如何在CGAL中迭代介观骨架?

时间:2019-07-11 19:30:34

标签: c++ mesh cgal skeletal-animation

我正在尝试使用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功能)。

谢谢

1 个答案:

答案 0 :(得分:0)

here所述,介观骨架是[FaceListGraph]的模型。您可以使用faces(mcf_skel.meso_skeleton())范围来迭代面,使用halfedges(mcf_skel.meso_skeleton())来迭代半边,并且类似地使用顶点。要访问点,您可以使用v顶点调用boost::get(boost::vertex_point, mcf_skel.meso_skeleton(), v)