一:主要的知识点
1、说明
本文只是教程内容的一小段,因博客字数限制,故进行拆分。主教程链接:vtk教程——逐行解析官网所有Python示例-CSDN博客
2、知识点纪要
本段代码主要涉及的有①vtkMaskPolyData抽取点或单元格
二:代码及注释
import vtkmodules.vtkRenderingOpenGL2 import vtkmodules.vtkInteractionStyle from vtkmodules.vtkCommonColor import vtkNamedColors from vtkmodules.vtkIOLegacy import vtkPolyDataReader from vtkmodules.vtkFiltersCore import vtkDecimatePro, vtkPolyDataNormals, vtkMaskPolyData, vtkStripper from vtkmodules.vtkRenderingCore import ( vtkActor, vtkCamera, vtkPolyDataMapper, vtkRenderWindow, vtkRenderWindowInteractor, vtkRenderer ) def main(): colors = vtkNamedColors() fileName = "Data/fran_cut.vtk" renderer1 = vtkRenderer() renderer1.SetViewport(0.0, 0.0, 0.5, 1.0) renderer2 = vtkRenderer() renderer2.SetViewport(0.5, 0.0, 1.0, 1.0) renderWindow = vtkRenderWindow() renderWindow.AddRenderer(renderer1) renderWindow.AddRenderer(renderer2) renderWindow.SetWindowName('StripFran') interactor = vtkRenderWindowInteractor() interactor.SetRenderWindow(renderWindow) cyber = vtkPolyDataReader() cyber.SetFileName(fileName) deci = vtkDecimatePro() deci.SetInputConnection(cyber.GetOutputPort()) deci.SetTargetReduction(0.7) deci.PreserveTopologyOn() normals = vtkPolyDataNormals() normals.SetInputConnection(deci.GetOutputPort()) """ vtkMaskPolyData 从一个 vtkPolyData(多边形数据集) 中,按一定规则抽取部分点或单元(cell),而不是使用全部数据 方法 | 功能 SetInputData(polydata)` 指定输入数据 SetOnRatio(n)` 抽样比例:每 n 个点取一个 RandomModeOn()` 开启随机抽样模式(非顺序) SetMaximumNumberOfPoints(m)` 限制输出最大点数 SetRandomSeed(seed)` 控制随机数种子,确保结果可重复 与vtkDecimatePro都是下采样,但是最大的不同在于vtkMaskPolyData无法保证原先的拓扑结构 """ mask = vtkMaskPolyData() mask.SetInputConnection(deci.GetOutputPort()) mask.SetOnRatio(2) cyberMapper = vtkPolyDataMapper() cyberMapper.SetInputConnection(mask.GetOutputPort()) cyberActor = vtkActor() cyberActor.SetMapper(cyberMapper) cyberActor.GetProperty().SetColor(colors.GetColor3d('Flesh')) stripper = vtkStripper() stripper.SetInputConnection(cyber.GetOutputPort()) stripperMask = vtkMaskPolyData() stripperMask.SetInputConnection(stripper.GetOutputPort()) stripperMask.SetOnRatio(2) stripperMapper = vtkPolyDataMapper() stripperMapper.SetInputConnection(stripperMask.GetOutputPort()) stripperActor = vtkActor() stripperActor.SetMapper(stripperMapper) stripperActor.GetProperty().SetColor(colors.GetColor3d('Flesh')) renderer1.AddActor(stripperActor) renderer2.AddActor(cyberActor) renderer1.SetBackground(colors.GetColor3d('Wheat')) renderer2.SetBackground(colors.GetColor3d('Papaya_Whip')) renderWindow.SetSize(1024, 640) cam1 = vtkCamera() cam1.SetFocalPoint(0, 0, 0) cam1.SetPosition(1, 0, 0) cam1.SetViewUp(0, 1, 0) renderer1.SetActiveCamera(cam1) renderer2.SetActiveCamera(cam1) renderer1.ResetCamera() cam1.Azimuth(30) cam1.Elevation(30) cam1.Dolly(1.4) renderer1.ResetCameraClippingRange() interactor.Start() if __name__ == '__main__': main()