使用CGAL,能否对开放式多边形网格执行布尔运算?

3

我已经获得了多边形网格,即AB

A是一个封闭的网格,B是一个任意的曲面。我的目标是切掉位于A外部的B部分。例如,如果A是一个多边形球体,B是一个矩形平面,则结果应该是一个多边形圆形平面。

我想使用CGAL(或者如果CGAL不能实现这个功能,则使用其他库)来执行上述操作。有什么好的想法吗?

2个回答

2

这几天我对此进行了研究。然而,似乎CGAL Nef Polyhedra只能处理闭合的几何结构,而我需要处理一个薄表面。为了避免这个布尔操作,我已经找到了一个解决办法,所以我没有进一步研究这个问题。 - Wesley Ranger
1
抱歉,但那是不正确的。非欧几里德多面体确实支持非流形几何:http://people.mpi-inf.mpg.de/~kettner/proj/Nef/ - user2658323
对我来说是个好消息,谢谢。我从一个官方示例中获得了“Nef用于多面体”的想法,该示例将多边形转换为Nef多面体。在这个示例中,有一个语句“if(Polygon.isclosed()) ...”,因此我认为Nef多面体只适用于流形。 - Wesley Ranger

1

在这里,常规的布尔运算是无用的,例如 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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接