Graphics 如何修复vtk中的损坏表面?

Graphics 如何修复vtk中的损坏表面?,graphics,computational-geometry,vtk,Graphics,Computational Geometry,Vtk,我敢肯定,一个普通的vtk用户已经不止一次看到下面这样的结果 我的问题:你将如何修复这样一个破损的表面?表面上这种完整性的典型原因是什么 我的具体示例是使用VTKBooleaneOperationPolyDataFilter和VTKappendendPolyData创建的,但是我看到了这样的破碎退化曲面也在不同的场合 非常感谢您的建议。这很可能与数据有关。建议: 很多vtk过滤器都有关于输入的假设,我猜您的输入违反了其中一些假设。例如,vtkBooleanOperationPolyDataF

我敢肯定,一个普通的vtk用户已经不止一次看到下面这样的结果

我的问题:你将如何修复这样一个破损的表面?表面上这种完整性的典型原因是什么

我的具体示例是使用VTKBooleaneOperationPolyDataFilter和VTKappendendPolyData创建的,但是我看到了这样的破碎退化曲面也在不同的场合


非常感谢您的建议。

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

  • 很多vtk过滤器都有关于输入的假设,我猜您的输入违反了其中一些假设。例如,
    vtkBooleanOperationPolyDataFilter
    期望输入为流形,否则“可能会获得意外结果”。您正在向布尔过滤器中输入什么?这些输入是流形吗
  • 其他一些过滤器有更严格的要求,只需要三角化曲面;在你发布的图片中,我想我看到了四边形。尝试在处理管道开始时通过
    vtkTriangleFilter
    运行输入,以将所有多边形拆分为三角形

  • 检查
    vtkBooleanOperationPolyDataFilter
    的第二个输出,该输出包含作为多段线集的交点,以了解导致此问题的原因

  • 尝试将中间结果保存到文件中,并在处理管道的不同阶段使用它们

如果所有这些都不能找到问题的原因,请发布输入、代码和运行它的vtk版本和系统,以便我们重现您的结果

嗯,


Miro

在我上面介绍的案例中,破裂表面是由
vtkBooleanOperationPolyDataFilter
的问题引起的。据thread称,该算法已得到改进,并已(或即将)在更新版本的vtk中提供


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

@Miro。谢谢你的建议。输入数据是多方面的,我确实使用vtkTriangleFilter,并且我还检查了vtkBooleanOperationPolyDataFilter的第二个输出。目前我认为这是vtkBooleanOperationPoyDataFilter中的一个(可能是数字)缺陷,因为它只是偶尔出现。我已经在vtk邮件列表上发布了这个问题,以便让开发团队知道。@Miro。我希望得到一个关于如何事后修复这些破损表面的通用方法。有些工具具有“网格医生”功能,我想知道如何在vtk中实现这一点。vtkFillHolesFilter可以缝合撕裂,但您的里程可能会有所不同。我注意到您在邮件列表上发布的代码中,实际上在operation2中没有使用trianglefilter,因此可能值得插入sourceTriangles而不是source。此外,您可能希望稍微降低或增加容差,这取决于数据的规模,可能会产生不同。请参阅vtkBooleanOperationPolyDataFilter::SetTolerance(double)