如何使用 CGAL 获取 3D Delaunay 曲面细分的边缘?

How to get the edges of a 3D Delaunay tessellation with CGAL?

从标题看问题就明白了。我尝试了很多

的变体
  const DT3::Finite_edges itedges = mesh.finite_edges();
  for(DT3::Finite_edges_iterator eit = itedges.begin(); eit != itedges.end(); eit++) {
      const CGAL::Triple<DT3::Cell_handle, int, int> edge = *eit;
      edge.first->vertex((edge.second+1) % 3)->info();
      edge.first->vertex((edge.third+1) % 3)->info();
  }

但 none 有效(我尝试了 % 2% 4+2 等)。

我能够得到四面体和三角形。当然,我可以从中提取边缘,但这需要删除一些重复项。

无需使用加法或模运算。解决方法更简单:

  const DT3::Finite_edges itedges = mesh.finite_edges();
  for(DT3::Finite_edges_iterator eit = itedges.begin(); eit != itedges.end(); eit++) {
      const DT3::Edge edge = *eit;
      const DT3::Vertex::Info v1_info = edge.first->vertex(edge.second)->info();
      const DT3::Vertex::Info v2_info = edge.first->vertex(edge.third)->info();
  }

嵌套类型 Edge 的文档是 here as well as in the section "Representation" of the user manual of 3D Triangulation Data Structure


编辑:请注意,我选择了尊重您的编码风格,而忽略了现代 C++ 功能。使用 C++11 特性,我更喜欢这样写,使用 auto and range-based for loop:

  for(const auto edge: mesh.finite_edges()) {
      const auto v1_info = edge.first->vertex(edge.second)->info();
      const auto v2_info = edge.first->vertex(edge.third)->info();
  }