我已经得到多边形网格,即
A
和B
。
A
是封闭网格,B
是任意曲面。我想要做的是切断位于B
外面的A
部分。例如,如果 A
是多边形球体而 B
是矩形平面,则结果应为多边形圆形平面。
我想使用 CGAL 执行上述操作(如果 CGAL 不能执行此操作,则可能是其他库)。对此有什么想法吗?
我想你想要“Nef Polyhedra 的 3D 布尔运算”库:
常规的布尔运算在这里没有用,例如 CGAL::Polygon_mesh_processing::corefine_and_compute_intersection(mesh1, mesh2, meshout) requires mesh1 和 mesh2 都是 closed meshes bounding some volumes.
对于 open mesh 使用:
CGAL::Polygon_mesh_processing::clip()
说,mesh1 是开放网格(例如 square)并且 mesh2 限制了一些体积(例如 sphere),那么您可以通过调用获得 mesh1 和 mesh2 的intersection:
CGAL::Polygon_mesh_processing::clip(mesh1, mesh2)
结果(一个circle)将保存到mesh1.
如果您需要 difference 操作(带圆孔的方形),相同的 clip() 可能会有所帮助。在这种情况下,您需要首先通过将 mesh2 中每个三角形的方向从逆时针方向交换为顺时针方向来反转 mesh2。