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

时间:2017-02-27 10:39:04

标签: python stl 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()
它似乎工作(至少它运行没有错误)。现在我如何提取网格的点和三角形?

1 个答案:

答案 0 :(得分:1)

与大多数其他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中的工作方式相同。