0

我正在尝试使用 Meso_skeleton 类从 CGAL 的骨架化工具中获取中间骨架。
问题是我想迭代它的顶点和面,但我不明白迭代器是什么类,所以我得到编译错误(关键字 auto 似乎在迭代器中不起作用,给出编译错误因为编译器不能干扰类型)。

此外,CGAL 文档似乎缺少有关如何使用 Meso_skeleton 类的信息,所以如果有人知道我可以找到其他信息的地方会很棒。

我试图运行的代码是这样的:


Skeleton skeleton;
Skeletonization mcs(tmesh);


Triangle_mesh contractedMesh; // prova a creare una nuova mesh dalla Skeletonization

mcs.set_is_medially_centered(true);
// 1. Contract the mesh by mean curvature flow.
mcs.contract_geometry();
// 2. Collapse short edges and split bad triangles.
mcs.collapse_edges();
mcs.split_faces();
// 3. Fix degenerate vertices.
mcs.detect_degeneracies();
// Perform the above three steps in one iteration.
mcs.contract();
auto meso = mcs.meso_skeleton();

output.open("verticesTest.cgal");

int number_of_vertices = 0;
CGAL::Polyhedron_3<Kernel>::Vertex_iterator ptr;
for( ptr = meso.vertices_begin; ptr != meso.vertices_end; ptr++)
{
    output << ptr->point << std::endl;
    ++number_of_vertices;
}

此代码的目的是从 CGAL 的骨架化工具 (mean_curvature_flow_skeleton) 的中间步骤导出 meso_skeleton 的顶点和面。让我知道是否可以编写一个更好的解决方案(也许有一些我忽略的 CGAL 功能)。

谢谢

4

1 回答 1

0

如此所述,中观骨架是 [FaceListGraph] 的模型。您可以使用 range 迭代面faces(mcf_skel.meso_skeleton()),使用 halfedgeshalfedges(mcf_skel.meso_skeleton())和类似的顶点。要访问您需要的点,可以boost::get(boost::vertex_point, mcf_skel.meso_skeleton(), v)使用 va vertex 调用。

于 2019-07-12T04:38:23.253 回答