一:主要的知识点
1、说明
本文只是教程内容的一小段,因博客字数限制,故进行拆分。主教程链接:vtk教程------逐行解析官网所有Python示例-CSDN博客
2、知识点纪要
本段代码主要涉及的有①通过特定索引取得网格面模型
二:代码及注释
python
import vtkmodules.vtkRenderingOpenGL2
from vtkmodules.vtkCommonColor import vtkNamedColors
from vtkmodules.vtkCommonCore import vtkIdTypeArray
from vtkmodules.vtkCommonDataModel import vtkSelection, vtkSelectionNode, vtkUnstructuredGrid
from vtkmodules.vtkFiltersExtraction import vtkExtractSelection
from vtkmodules.vtkFiltersSources import vtkSphereSource
from vtkmodules.vtkRenderingCore import (
vtkActor,
vtkCamera,
vtkDataSetMapper,
vtkProperty,
vtkRenderWindow,
vtkRenderWindowInteractor,
vtkRenderer
)
def main():
colors = vtkNamedColors()
sphereSource = vtkSphereSource()
sphereSource.Update()
ids = vtkIdTypeArray()
ids.SetNumberOfComponents(1)
for i in range(10, 20):
ids.InsertNextValue(i)
selectionNode = vtkSelectionNode()
selectionNode.SetFieldType(vtkSelectionNode.CELL)
selectionNode.SetSelectionList(ids)
selectionNode.SetContentType(vtkSelectionNode.INDICES)
selection = vtkSelection()
selection.AddNode(selectionNode)
extractSelection = vtkExtractSelection()
extractSelection.SetInputConnection(0, sphereSource.GetOutputPort())
extractSelection.SetInputData(1, selection)
extractSelection.Update()
selected = vtkUnstructuredGrid()
selected.ShallowCopy(extractSelection.GetOutput())
selectionNode.GetProperties().Set(vtkSelectionNode.INVERSE(), 1) #取反,1表示取反状态启用?
extractSelection.Update()
notSelected = vtkUnstructuredGrid()
notSelected.ShallowCopy(extractSelection.GetOutput())
backfaces = vtkProperty()
backfaces.SetColor(colors.GetColor3d("Gold"))
inputMapper = vtkDataSetMapper()
inputMapper.SetInputConnection(sphereSource.GetOutputPort())
inputActor = vtkActor()
inputActor.SetMapper(inputMapper)
inputActor.GetProperty().SetColor(colors.GetColor3d("MistyRose"))
inputActor.SetBackfaceProperty(backfaces)
selectedMapper = vtkDataSetMapper()
selectedMapper.SetInputData(selected)
selectedActor = vtkActor()
selectedActor.SetMapper(selectedMapper)
selectedActor.SetBackfaceProperty(backfaces)
selectedActor.GetProperty().SetColor(colors.GetColor3d('MistyRose'))
notSelectedMapper = vtkDataSetMapper()
notSelectedMapper.SetInputData(notSelected)
notSelectedActor = vtkActor()
notSelectedActor.SetMapper(notSelectedMapper)
notSelectedActor.SetBackfaceProperty(backfaces)
notSelectedActor.GetProperty().SetColor(colors.GetColor3d('MistyRose'))
# There will be one render window
renderWindow = vtkRenderWindow()
renderWindow.SetSize(900, 300)
renderWindow.SetWindowName('ExtractSelectionCells')
# And one interactor
interactor = vtkRenderWindowInteractor()
interactor.SetRenderWindow(renderWindow)
# Define viewport ranges
# (xmin, ymin, xmax, ymax)
leftViewport = [0.0, 0.0, 0.33, 1.0]
centerViewport = [0.33, 0.0, 0.66, 1.0]
rightViewport = [0.66, 0.0, 1.0, 1.0]
# Create a camera for all renderers
camera = vtkCamera()
# Setup the renderers
leftRenderer = vtkRenderer()
renderWindow.AddRenderer(leftRenderer)
leftRenderer.SetViewport(leftViewport)
leftRenderer.SetBackground(colors.GetColor3d('BurlyWood'))
leftRenderer.SetActiveCamera(camera)
centerRenderer = vtkRenderer()
renderWindow.AddRenderer(centerRenderer)
centerRenderer.SetViewport(centerViewport)
centerRenderer.SetBackground(colors.GetColor3d('orchid_dark'))
centerRenderer.SetActiveCamera(camera)
rightRenderer = vtkRenderer()
renderWindow.AddRenderer(rightRenderer)
rightRenderer.SetViewport(rightViewport)
rightRenderer.SetBackground(colors.GetColor3d('CornflowerBlue'))
rightRenderer.SetActiveCamera(camera)
leftRenderer.AddActor(inputActor)
centerRenderer.AddActor(selectedActor)
rightRenderer.AddActor(notSelectedActor)
leftRenderer.ResetCamera()
renderWindow.Render()
interactor.Start()
if __name__ == '__main__':
main()