如何在 CGAL 中查找曲面网格的最长边界上的顶点



我想使用 CGAL 标记类型SurfaceMesh网格的最长边框。 我知道存在一个函数CGAL::Polygon_mesh_processing::longest_border但它只给出了一个halfedge_descriptor,文档说这是这个边界的一部分。那么如何获取这个最长边界的所有顶点或半边。

你可以使用这样的东西:

halfedge_descriptor hd = CGAL::Polygon_mesh_processing::longest_border(mesh);
halfedge_descriptor start = hd;
do
{
//store hd 
hd = next(hd, mesh);
}while hd != start;

结合上述答案,以下答案打印位于最长边界上的所有顶点索引的列表(并且还保存了索引向量(。为简单起见,将忽略包含:

typedef CGAL::Simple_cartesian<double>    Kernel;
typedef CGAL::Surface_mesh<Kernel::Kernel::Point_3>  SurfaceMesh;
typedef boost::graph_traits<SurfaceMesh>::halfedge_descriptor  halfedge_descriptor;
typedef SurfaceMesh::Vertex_index  mesh_vertex_descriptor;
boost::filesystem::path in;
SurfaceMesh sm;
std::vector<int> borderVertexID;
in >> sm;
bhd = CGAL::Polygon_mesh_processing::longest_border(sm).first;
BOOST_FOREACH(mesh_vertex_descriptor ved, vertices_around_face(bhd,sm)){
std::cout << ved << std::endl;
borderVertexID.push_back(ved);
}

除了带有next()的循环,您还可以编写

for(vertex_descriptor : CGAL::vertices_around_face(hd, mesh){ // do something }

查看手册

最新更新