VTK 中平滑 Mesh 的方法 - vtkWindowedSincPolyDataFilter
1. 背景:
VTK 中有比较多的平滑 Mesh 的方法,其中比较有效的方法是:vtkWindowedSincPolyDataFilter
2. 代码:
输入的是 STL 格式的 Mesh
import vtk
def smooth_mesh(mesh_path, smooth_factor=0.2, smooth_iterations=50):
""" smooth mesh """
reader = vtk.vtkSTLReader()
reader.SetFileName(mesh_path)
reader.Update()
pass_band = pow(10.0, -4.0 * smooth_factor)
smooth = vtk.vtkWindowedSincPolyDataFilter()
smooth.SetInputConnection(reader.GetOutputPort())
smooth.SetNumberOfIterations(smooth_iterations)
smooth.SetPassBand(pass_band)
smooth.BoundarySmoothingOff()
smooth.FeatureEdgeSmoothingOff()
smooth.NonManifoldSmoothingOn()
smooth.NormalizeCoordinatesOn()
smooth.Update()
# 保存成 stl 格式
writer = vtk.vtkSTLWriter()
writer.SetInputData(smooth.GetOutput())
writer.SetFileTypeToBinary()
writer.SetFileName(r{}.stl.format(mesh_path))
writer.Update()
if __name__ == __main__:
stl_path = rD:datamesh.stl
smooth_mesh(stl_path, smooth_factor=0.2, smooth_iterations=100)
print(save end)
3. 最后结果:
最后的结果,显示还不错;
