1

假设有一个表示对象A的多面体,并且想要得到它的凹度。

这样做的一个选项包括计算对象A的凸包CH并将差异CH - A拆分为连通分量。

为此,我尝试在 CGAL 中使用 Nef Polyhedrons 模块。这允许将ACH转换为 Nef 多面体,以便轻松应用设置差异等布尔运算。

一旦作为 Nef 多面体获得差值,其mark在场中标记为 1 的体积应该表示差值的有限连通分量,并且可以使用函数 转换回多面体convert_inner_shell_to_polyhedron

从理论上讲,这种方法应该可以正常工作,但在实践中,当使用的多面体是从 STEP 文件转换为定义多面体的三角形网格的结果时,就会出现问题。事实上,以 STEP 文件中的四边形面为例。在转换过程中,必须至少转换成两个三角形。问题在于,当将生成的三角形保存到表示转换后的网格的文件(例如 OFF 文件、STL 或 OBJ)中时,它们可能会因为顶点坐标近似而失去共面性。

这会在计算 Nef 多面体差异时导致以下不良行为:

  • 产生了一些非常薄的体积,因为四边形的对角线之一(假设四边形已被分成两个三角形)已经“移动”到多面体的内部;
  • 该函数convert_inner_shell_to_polyhedron打印一条错误消息,例如

    lookup_halfedge():输入错误:面 11 与面 0 共享从顶点 2 到顶点 1 的半边。

第一个行为不是一个大问题:转换为多面体的每个体积都可以检查其厚度并最终丢弃。然而,第二个返回一个空的多面体,据我所知,没有办法获得所需的体积。

所以我问你解决这个问题的方法。在这里,我报告了我对此所做的一些观察:

  • CGAL 多面体允许使用多边形面而不是三角形面,因此可以将 STEP 文件转换为多边形网格:这应该允许保持相同面的点的共面性。但是,我找不到不通过三角形网格就可以执行转换的软件;
  • 直接将 STEP 文件转换为 CGAL 多面体实例。我认为这种方法在合理的时间内远非负担得起。
  • 实现一些方法来纠正相邻面的点的共面性。这可能是一种可行的方法,但是在手动改变多面体顶点的位置时可能会出现一些其他问题。
4

0 回答 0