如何用平面或边界框切割多面体?

How to cut polyhedron with a plane or bounding box?

在一个多面体中,如何获得与给定平面相交的任何边的句柄(目的是我可以用 CGAL::polyhedron_cut_plane_3 进一步切割它)?

我目前有此代码段,但它不起作用。我根据 CGAL 文档和示例中的片段构建了它:

typedef CGAL::Simple_cartesian<double> Kernel;
typedef CGAL::Polyhedron_3<Kernel> Polyhedron;
typedef CGAL::AABB_face_graph_triangle_primitive<Polyhedron> Primitive;
typedef CGAL::AABB_traits<Kernel, Primitive> Traits;

Polyhedron poly = load_obj(argv[1]); // load from file using a helper
Kernel::Plane_3 plane(1, 0, 0, 0);   // I am certain this plane intersects the given mesh

CGAL::AABB_tree<Traits> tree(faces(poly).first, faces(poly).second, poly);
auto intersection = tree.any_intersection(plane);
if (intersection) {
  if (boost::get<Kernel::Segment_3>(&(intersection->first))) {
    // SHOULD enter here and I can do things with intersection->second
  } else {
    // BUT it enters here
  }
} else {
  std::cout << "No intersection." << std::endl;
}

2019 年 9 月 9 日编辑:

我将此标题从原来的旧标题更改为:如何获取在 plane-polyhedron 交叉点 中找到的某条边的句柄。使用CGAL/Polygon_mesh_processing/clip.h中提供的方法,不需要使用AABB_Tree求交集。

最简单的方法是使用文件 CGAL/Polygon_mesh_processing/clip.h 中的函数未记录的函数 clip_to_bbox() 将平面变成裁剪 bbox 并调用函数 corefine() 来将平面相交嵌入到您的网格中。如果要获取相交边,请将边约束映射传递给命名参数中的corefine()