在多面体中,如何获得与给定平面相交的任何边缘的手柄(目的是我可以用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日编辑:
我将此标题从原来的旧标题更改为:如何获取在平面-多面体相交处找到的某些边缘的手柄。使用CGAL/Polygon_mesh_processing/clip.h
中提供的方法,无需使用ABBB_Tree查找交点。
CGAL::Polygon_mesh_processing::clip(poly, plane);
CGAL::Polygon_mesh_processing::internal::clip_to_bbox
。这是an example。答案 0 :(得分:0)
最简单的方法是使用文件clip_to_bbox()
中未公开功能的函数CGAL/Polygon_mesh_processing/clip.h
将平面变成裁剪bbox并调用函数corefine()
来嵌入平面相交到您的网格中。如果要获取相交边,请在指定参数中将边约束图传递到corefine()
。