使用 VTK 提取网格的点和多边形

Extract points and polygons for a mesh using VTK

我想减少网格(STL 文件)中的三角形数量。这是我的代码:

import vtk

filename = 'E://stl_file.stl'
reader = vtk.vtkSTLReader()
reader.SetFileName('filename.stl')

##convert polygonal mesh into triangle mesh
tri = vtk.vtkTriangleFilter()
tri.SetInputConnection(reader.GetOutputPort());

##decimate triangle
deci = vtk.vtkDecimatePro()
deci.SetInputConnection(tri.GetOutputPort())
deci.SetTargetReduction(0.9)
deci.PreserveTopologyOn()

它似乎可以工作(至少它运行没有错误)。现在如何提取网格的点和三角形?

与大多数其他 vtk 过滤器一样,deci.GetOuptut() 将为您提供结果,在这种情况下应该是 vtkPolyData,它是输入网格的抽取版本。您可以通过 output.GetPoints() 从输出对象中获取点,通过 output.GetPolys() 等获取三角形,请参阅 http://www.vtk.org/doc/nightly/html/classvtkPolyData.html

处的文档页面

顺便说一句,有一整页的 VTK 过滤器示例可以为您提供答案,例如http://www.vtk.org/Wiki/VTK/Examples/Cxx/Meshes/Decimation。它在 C++ 中,但它在 python 中的工作方式相同。