无法提取源自STEP文件的三角Nef多面体之间的差异量

时间:2018-12-10 14:16:38

标签: mesh data-conversion cgal step polyhedra

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

一种选择,包括计算对象 A 的凸包 CH 并将差异 CH-A 拆分为连接的组件。

为此,我尝试使用Nef Polyhedrons module in CGAL。这样可以将 A CH 转换为Nef多面体,以便轻松应用布尔运算(如集合差异)。

一旦差值以Nef多面体形式获得,则其mark字段中标有1的体积应表示差的有限连接分量,并且可以使用函数{{1 }}。

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

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

  • 会生成一些非常薄的体积,因为四边形的对角线之一(假设四边形已被分割为两个个三角形)已经朝着多面体内部移动了;
  • 函数convert_inner_shell_to_polyhedron会显示一条错误消息,例如
      

    lookup_halfedge():输入错误:构面11共享顶点的半边   2到第1面的小平面0。

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

因此,我要求您提供解决此问题的方法。在这里,我报告我对此所做的一些观察:

  • CGAL多面体允许使用多边形的面而不是三角形的面,因此一种解决方案是将STEP文件转换为多边形网格:这应允许保持相同面的点的共面性。但是,我找不到不经过三角形网格即可执行转换的软件;
  • 直接将STEP文件转换为CGAL多面体实例。我认为这种方法在合理的时间内远远无法承受;
  • 实现用于校正相邻面的点的共面性的一些方法。这可能是一种可行的方法,但是当手动更改多面体的顶点位置时,可能还会出现其他一些问题。

0 个答案:

没有答案