CGAL - 如何使用 CGAL::Polygon_mesh_processing::connected_components 将一个 CGAL::Surface_mesh 转换为多个?

CGAL - how to use CGAL::Polygon_mesh_processing::connected_components to convert one CGAL::Surface_mesh into many?

我正在创建一个网格实用程序库,我想包括的功能之一是能够拆分网格的不相交分区。为此,我正在尝试编写一种接受 CGAL::Surface_mesh 和 returns 和 std::vector<CGAL::Surface_mesh> 的方法,其中每个元素都是输入网格的连接组件。

我看到 CGAL 具有 CGAL::Polygon_mesh_processing::connected components 功能,但这似乎只是为每个面分配一个标签,指示它属于哪个组件。我如何使用该操作的结果从每组具有相同标签的面构造一个新的 CGAL::Surface_mesh

一种方法是使用 connected_components() 的结果作为 the Face_filtered_graph 的输入参数。 我相信你可以做类似的事情:

 FCCmap fccmap = mesh.add_property_map<face_descriptor, faces_size_type> 
                 ("f:CC").first;
 faces_size_type num = PMP::connected_components(mesh,fccmap); 
 std::vector<Mesh> meshes(num);
 for(int i=0; i< num; ++i)
 {
   Filtered_graph ffg(mesh, i, fccmap);
   CGAL::copy_face_graph(ffg, meshes[i]);
 }