also copy face properties in split_copy(EdgeHandle, VertexHandle)

This commit is contained in:
Max Lyon
2018-03-19 10:54:06 +01:00
parent 0d45e1e4c6
commit 480f1175e1

View File

@@ -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