CGAL seam_mesh: 如何在边界的 halfedge_descriptor 中包含接缝?

CGAL seam_mesh: how to include the seam in the halfedge_descriptor of the boundary?

我正在使用 CGAL 4.14 的 seam_Polyhedron_3.cpp 示例参数化一个简单的网格(见下图)。

我确定了 "cut it open" 的顶点,这些顶点是我写入接缝文件的(它们位于连接下边界和上边界的一条折线上):



73 75 80 120

但是,我对这行是什么感到困惑

halfedge_descriptor bhd = CGAL::Polygon_mesh_processing::longest_border(mesh).first;

returns:好像只遍历了下边界。我可以通过计算边界上的顶点来检查,

typedef typename boost::graph_traits<Mesh>::vertex_descriptor Mesh_vertex_descriptor;
Mesh_vertex_descriptor beg = source(bhd, mesh);
int i=0;
do
{
    i++;
    bhd = next(bhd, mesh);
}
while(source(bhd, mesh) != beg);
std::cout << "There were " << i << " vertices on the boundary." << std::endl;

其中 returned 34(这又是下边界上的顶点数)。

问题: 如何修改 bhd 的构造,使其包含 整个 (虚拟)边界?即,我刚刚展示的迭代应该迭代下边界、向上接缝、上边界和向下接缝,并且 return 32 + 3 + 32 + 3 = 70?

到目前为止,我试图找到 longest_boundary and to see if there is a possibility to modify the behaviour through the named parameters. I also tried adding the vertices on the lower and upper boundaries to the mesh but this does not change anything, as noted in the documentation of Seam_mesh 的替代方法。颠倒接缝顶点的顺序也没有明显的变化。

提前致谢!

@mgimeno 的评论帮助我了解了错误所在。我 post 它作为一个答案,以防其他人将来会对 .selection.txt 文件的结构感到困惑(另请参阅 related discussion)。

这里又是网格,但带有我要切割的顶点的标签。

提示:要在您的网格中找到这些数字,请在 Meshlab 中将其打开并单击“渲染”>“显示标签”。它适用于 .off 格式的网格,但可能 运行 与 .stl 一起出现问题,其中未指定顶点的顺序。

根据 Seam_mesh::add_seam(..) 的文档,我们需要添加三个接缝边缘。这些边中的每一个都由其端点的索引给出。 seam.selection.txt 的正确格式是



73 75 75 80 80 120

注意两面性(每个顶点一次作为起点,一次作为终点)和两条前导空行。

边界现在有 70 个顶点(我在问题的原始版本中多次偏离一个)。