CGAL:遍历所有面的所有顶点



我在CGAL中有一个SurfaceMesh:

https://doc.cgal.org/latest/Surface_mesh/index.html

我了解如何遍历每个面孔,如示例所示:

typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel;
typedef Kernel::Point_3                    Point;
typedef CGAL::Surface_mesh<Point>          Surface_mesh;
BOOST_FOREACH(boost::graph_traits<Surface_mesh>::face_descriptor fit, faces(mesh)){
  //do something here
}

在这里,网格是一个Surface_mesh。 我完全不清楚的是face_descriptor是什么,以及如何使用它。 当一个人有face_descriptor时,如何访问人脸的半边和顶点? 特别是,如何迭代半边的所有顶点,并获取它们的坐标?

Boost Graph Library 有一个定义 vertex_descriptoredge_descriptor 的概念Graph。它们是图形元素的标识符。在CGAL中,我们将其扩展到具有面和半边的图形。 该概念FaceGraph解释了您可以使用face_descriptor做什么。从此页面,您可以通过Refines:转到概念HalfedgeGraph,它告诉您可以使用其他描述符做什么。

这些链接指向即将推出的 CGAL 版本的在线手册,我们在其中改进了有关描述符的文档 - 因此您并不孤单。

解决方案是,对于每个面,遍历面周围的顶点。

这就是以下代码的作用:

typedef CGAL::Surface_mesh<Point>    Mesh;
typedef CGAL_Mesh::Face_index        face_descriptor;
int i=0;
BOOST_FOREACH(face_descriptor f, faces(mesh)){
    int j=0;
    CGAL::Vertex_around_face_iterator<Mesh> vbegin, vend;
    for(boost::tie(vbegin, vend) = vertices_around_face(mesh.halfedge(f), mesh);
            vbegin != vend;
            ++vbegin){
        j++;
        std::cout << "jth index of ith face: "<< *vbegin << std::endl;
    }
    i++;
}

相关内容

  • 没有找到相关文章

最新更新