符号化Glyphing
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import vtk
reader = vtk.vtkPolyDataReader()
reader.SetFileName(r'E:/fran_cut.vtk')
reader.Update()
normFilter = vtk.vtkPolyDataNormals() # 计算法向量
'''
vtkPolyDataNormals 针对单元为三角形或者多边形类型的polyData数据进行计算
默认情况下计算点法向量,关闭单元法向量
'''
normFilter.SetInputData(reader.GetOutput())
normFilter.SetComputePointNormals(1) # 开启点法向量计算
normFilter.SetComputeCellNormals(0) # 关闭单元法向量计算
normFilter.SetAutoOrientNormals(1)
normFilter.SetSplitting(0)
normFilter.Update()
mask = vtk.vtkMaskPoints() # 仅保留输入数据中的点数据及其属性,并支持点数据的采样
mask.SetInputData(normFilter.GetOutput())
mask.SetMaximumNumberOfPoints(300) # 随机采样了300个点做Glyphing显示
mask.RandomModeOn()
mask.Update()
arrow = vtk.vtkArrowSource()
arrow.Update() # 注意
# 符号化 可以通过符号化技术将法向量图形化显示
glyph = vtk.vtkGlyph3D() # 支持Glyph图形的缩放、着色、设置空间姿态等
glyph.SetInputData(mask.GetOutput())
glyph.SetSourceData(arrow.GetOutput()) # 每一点用箭头代替
glyph.SetVectorModeToUseNormal