使用 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 中的工作方式相同。
我想减少网格(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 中的工作方式相同。