我已经获得了多边形网格,即A
和B
。
A
是一个封闭的网格,B
是一个任意的曲面。我的目标是切掉位于A
外部的B
部分。例如,如果A
是一个多边形球体,B
是一个矩形平面,则结果应该是一个多边形圆形平面。
我想使用CGAL(或者如果CGAL不能实现这个功能,则使用其他库)来执行上述操作。有什么好的想法吗?
在这里,常规的布尔运算是无用的,例如 CGAL::Polygon_mesh_processing::corefine_and_compute_intersection(mesh1, mesh2, meshout) 需要mesh1和mesh2都是包围一些体积的封闭网格。
对于开放式网格,请使用:
CGAL::Polygon_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);