使用CGAL,是否可以对开放的多边形网格进行布尔运算?

问题描述 投票:0回答:2

我已经得到多边形网格,即

A
B

A
是封闭网格,
B
是任意曲面。我想要做的是切断位于
B
外面的
A
部分。例如,如果
A
是多边形球体而
B
是矩形平面,则结果应为多边形圆形平面。

我想使用 CGAL 执行上述操作(如果 CGAL 不能执行此操作,则可能是其他库)。对此有什么想法吗?

c++ graphics cgal
2个回答
2
投票

我想你想要“Nef Polyhedra 的 3D 布尔运算”库:

http://doc.cgal.org/latest/Nef_3/index.html


0
投票

常规的布尔运算在这里没有用,例如 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。

© www.soinside.com 2019 - 2024. All rights reserved.