2017-02-27 41 views
0

我想減少網格(STL文件)中的三角形數量。這裏是我的代碼:使用VTK提取網格點和多邊形

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

與大多數其他vtk過濾器一樣,deci.GetOuptut()會給出結果,在這種情況下,應該是一個vtkPolyData,它是輸入網格的抽取版本。您可以通過output.GetPoints(),三角形的output.GetPolys()等得到的輸出對象的點,請參閱文檔頁面在http://www.vtk.org/doc/nightly/html/classvtkPolyData.html

BTW,有一個與VTK過濾器的實例整個網頁,將給了你一些東西,例如http://www.vtk.org/Wiki/VTK/Examples/Cxx/Meshes/Decimation。它是用C++編寫的,但它在Python中的工作原理也是一樣的。