我得到了多边形网格,即A
和B
。
A
是封闭网格,B
是任意曲面。我想做的是切断位于A
之外的B
部分。例如,如果A
是多边形球体,B
是矩形平原,则结果应为多边形圆形平原。
我想使用 CGAL 执行上述操作(或者如果 CGAL 无法执行此操作,则可能是其他库)。对此有什么想法吗?
我想你想要"Nef Polyhedra上的3D布尔运算"库:
http://doc.cgal.org/latest/Nef_3/index.html
常规布尔运算在这里是无用的,例如CGAL::P olygon_mesh_processing::corefine_and_compute_intersection(mesh1, mesh2, meshout)要求 mesh1 和 mesh2 都是绑定某些体积的封闭网格。
对于开放式网格使用:
CGAL::P olygon_mesh_processing::clip()
假设 mesh1是开放的网格(例如正方形),并且 mesh2 边界一定的体积(例如球体),那么您可以通过调用以下命令获得 mesh1 和 mesh2 的交集:
CGAL::Polygon_mesh_processing::clip(mesh1, mesh2);
结果(一个圆)将被保存到mesh1中。
如果您需要差分运算(带圆孔的正方形),则相同的clip()可能会有所帮助。在这种情况下,您需要首先通过将 mesh2 中每个三角形的方向从逆时针方向交换为顺时针来反转 mesh2。要反转网格方向,请使用:
CGAL::Polygon_mesh_processing::reverse_face_orientations(mesh2);