also copy face properties in split_copy(EdgeHandle, VertexHandle)
This commit is contained in:
@@ -488,6 +488,11 @@ void TriConnectivity::split(EdgeHandle _eh, VertexHandle _vh)
|
|||||||
|
|
||||||
void TriConnectivity::split_copy(EdgeHandle _eh, VertexHandle _vh)
|
void TriConnectivity::split_copy(EdgeHandle _eh, VertexHandle _vh)
|
||||||
{
|
{
|
||||||
|
VertexHandle v0 = to_vertex_handle(halfedge_handle(_eh, 0));
|
||||||
|
VertexHandle v1 = to_vertex_handle(halfedge_handle(_eh, 1));
|
||||||
|
|
||||||
|
int nf = n_faces();
|
||||||
|
|
||||||
// Split the halfedge ( handle will be preserved)
|
// Split the halfedge ( handle will be preserved)
|
||||||
split(_eh, _vh);
|
split(_eh, _vh);
|
||||||
|
|
||||||
@@ -495,6 +500,22 @@ void TriConnectivity::split_copy(EdgeHandle _eh, VertexHandle _vh)
|
|||||||
// have been created
|
// have been created
|
||||||
for(VEIter ve_it = ve_iter(_vh); ve_it.is_valid(); ++ve_it)
|
for(VEIter ve_it = ve_iter(_vh); ve_it.is_valid(); ++ve_it)
|
||||||
copy_all_properties(_eh, *ve_it, true);
|
copy_all_properties(_eh, *ve_it, true);
|
||||||
|
|
||||||
|
for (auto vh : {v0, v1})
|
||||||
|
{
|
||||||
|
// get the halfedge pointing from new vertex to old vertex
|
||||||
|
HalfedgeHandle h = find_halfedge(_vh, vh);
|
||||||
|
if (!is_boundary(h)) // for boundaries there are no faces whose properties need to be copied
|
||||||
|
{
|
||||||
|
FaceHandle fh0 = face_handle(h);
|
||||||
|
FaceHandle fh1 = face_handle(opposite_halfedge_handle(prev_halfedge_handle(h)));
|
||||||
|
if (fh0.idx() >= nf) // is fh0 the new face?
|
||||||
|
std::swap(fh0, fh1);
|
||||||
|
|
||||||
|
// copy properties from old face to new face
|
||||||
|
copy_all_properties(fh0, fh1, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}// namespace OpenMesh
|
}// namespace OpenMesh
|
||||||
|
|||||||
Reference in New Issue
Block a user