mirror of https://github.com/CGAL/cgal
add a way to collect input coplanar faces after corefinement
This commit is contained in:
parent
6257109821
commit
86bf5305c8
|
|
@ -119,6 +119,9 @@ public:
|
||||||
/// The point has already been put in the vertex point map.
|
/// The point has already been put in the vertex point map.
|
||||||
void after_vertex_copy(vertex_descriptor v_src, const Triangle_mesh& tm_src,
|
void after_vertex_copy(vertex_descriptor v_src, const Triangle_mesh& tm_src,
|
||||||
vertex_descriptor v_tgt, const Triangle_mesh& tm_tgt);
|
vertex_descriptor v_tgt, const Triangle_mesh& tm_tgt);
|
||||||
|
/// called for each face `f` in the output mesh `tm` that belongs to the intersection of two coplanar faces of the input meshes.
|
||||||
|
void input_coplanar_face(face_descriptor f, TriangleMesh& tm);
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
|
|
||||||
/// @name Functions used by corefine() for progress tracking
|
/// @name Functions used by corefine() for progress tracking
|
||||||
|
|
|
||||||
|
|
@ -2131,6 +2131,34 @@ public:
|
||||||
Patches1 patches_of_tm1(tm1, tm1_patch_ids, fids1, intersection_edges1, nb_patches_tm1);
|
Patches1 patches_of_tm1(tm1, tm1_patch_ids, fids1, intersection_edges1, nb_patches_tm1);
|
||||||
Patches2 patches_of_tm2(tm2, tm2_patch_ids, fids2, intersection_edges2, nb_patches_tm2);
|
Patches2 patches_of_tm2(tm2, tm2_patch_ids, fids2, intersection_edges2, nb_patches_tm2);
|
||||||
|
|
||||||
|
// report input coplanar faces
|
||||||
|
if (coplanar_patches_of_tm1.any())
|
||||||
|
{
|
||||||
|
for (std::size_t i = coplanar_patches_of_tm1.find_first();
|
||||||
|
i < coplanar_patches_of_tm1.npos;
|
||||||
|
i = coplanar_patches_of_tm1.find_next(i))
|
||||||
|
{
|
||||||
|
|
||||||
|
for (face_descriptor f : patches_of_tm1[i].faces)
|
||||||
|
{
|
||||||
|
user_visitor.input_coplanar_face(f, tm1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (coplanar_patches_of_tm2.any())
|
||||||
|
{
|
||||||
|
for (std::size_t i = coplanar_patches_of_tm2.find_first();
|
||||||
|
i < coplanar_patches_of_tm2.npos;
|
||||||
|
i = coplanar_patches_of_tm2.find_next(i))
|
||||||
|
{
|
||||||
|
|
||||||
|
for (face_descriptor f : patches_of_tm2[i].faces)
|
||||||
|
{
|
||||||
|
user_visitor.input_coplanar_face(f, tm2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// for each boolean operation, define two bitsets of patches contributing
|
// for each boolean operation, define two bitsets of patches contributing
|
||||||
// to the result
|
// to the result
|
||||||
std::vector< boost::dynamic_bitset<> > patches_of_tm1_used(4);
|
std::vector< boost::dynamic_bitset<> > patches_of_tm1_used(4);
|
||||||
|
|
|
||||||
|
|
@ -428,6 +428,7 @@ struct Default_visitor{
|
||||||
void before_face_copy(face_descriptor /*f_old*/, const TriangleMesh&, TriangleMesh&){}
|
void before_face_copy(face_descriptor /*f_old*/, const TriangleMesh&, TriangleMesh&){}
|
||||||
void after_face_copy(face_descriptor /*f_old*/, const TriangleMesh&,
|
void after_face_copy(face_descriptor /*f_old*/, const TriangleMesh&,
|
||||||
face_descriptor /* f_new */, TriangleMesh&){}
|
face_descriptor /* f_new */, TriangleMesh&){}
|
||||||
|
void input_coplanar_face(face_descriptor /*f*/, TriangleMesh&) {}
|
||||||
// edge visitor functions
|
// edge visitor functions
|
||||||
void before_edge_split(halfedge_descriptor /* h */, TriangleMesh& /* tm */){}
|
void before_edge_split(halfedge_descriptor /* h */, TriangleMesh& /* tm */){}
|
||||||
void edge_split(halfedge_descriptor /* hnew */, TriangleMesh& /* tm */){}
|
void edge_split(halfedge_descriptor /* hnew */, TriangleMesh& /* tm */){}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue