如何修复 vtk 中的破损表面?

How to repair a broken surface in vtk?

我敢肯定,普通的 vtk 用户已经不止一次看到类似下面的结果。

我的问题:你会如何修复这样一个破损的表面?表面出现这种整体的典型原因是什么?

我的特定示例是通过使用 vtkBooleanOperationPolyDataFilter 和 vtkAppendPolyData 创建的,但我在不同的场合也看到过这种破碎、退化的表面。

非常感谢您的建议。

这很可能与数据有关。建议:

  • 许多 vtk 过滤器对输入都有假设,我猜您的输入违反了其中一些假设。例如。 vtkBooleanOperationPolyDataFilter 期望输入是流形,否则 "unexpected results may be obtained"。你在布尔过滤器中输入什么?这些输入是流形的吗?
  • 其他一些过滤器有更严格的要求,只需要三角形表面;在图片中,你 posted 我 think 我看到了四边形。尝试在处理管道的开头通过 vtkTriangleFilter 运行 输入,将所有多边形拆分为三角形。

  • 检查 vtkBooleanOperationPolyDataFilter 的第二个输出,其中包含作为多段线集的交点,以获取有关可能是什么原因的任何提示。

  • 尝试将中间结果保存到一个文件中,并期望它们出现在处理管道的不同阶段。

如果 none 将引导您找到问题的原因,请 post 输入、代码和您正在使用的 vtk 版本和系统 运行 ,以便我们可以重现您的结果。

HTH,

米罗

在我上面介绍的案例中,破损的表面是由 vtkBooleanOperationPolyDataFilter 的问题造成的。根据 this 线程,该算法已得到改进,并且(或即将)在较新版本的 vtk 中可用。

我还需要接受这样一个事实,即在 vtk 中没有从此类故障中恢复的通用方法,而且正如 mirni 指出的那样,这些故障与数据有关。