如何用平面或边界框切割多面体?
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(poly, plane);
- 如@sloriot 所建议的那样,要在某个边界框内进行裁剪,有一个内部函数
CGAL::Polygon_mesh_processing::internal::clip_to_bbox
。这里是 an example.
最简单的方法是使用文件 CGAL/Polygon_mesh_processing/clip.h
中的函数未记录的函数 clip_to_bbox()
将平面变成裁剪 bbox 并调用函数 corefine()
来将平面相交嵌入到您的网格中。如果要获取相交边,请将边约束映射传递给命名参数中的corefine()
。
在一个多面体中,如何获得与给定平面相交的任何边的句柄(目的是我可以用 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(poly, plane);
- 如@sloriot 所建议的那样,要在某个边界框内进行裁剪,有一个内部函数
CGAL::Polygon_mesh_processing::internal::clip_to_bbox
。这里是 an example.
最简单的方法是使用文件 CGAL/Polygon_mesh_processing/clip.h
中的函数未记录的函数 clip_to_bbox()
将平面变成裁剪 bbox 并调用函数 corefine()
来将平面相交嵌入到您的网格中。如果要获取相交边,请将边约束映射传递给命名参数中的corefine()
。