ExtractSelection
VTKExamples/Python/PolyData/ExtractSelection
Description¶
This example creates 50 random points and extracts 10 of them (the points with ids 10-19).
Other Languages
See (Cxx)
Code¶
ExtractSelection.py
""" converted from: - http://www.vtk.org/Wiki/VTK/Examples/Python/PolyData/ExtractSelectionCells """ import vtk def main(): colors = vtk.vtkNamedColors() colors.SetColor('leftBkg', [0.6, 0.5, 0.4, 1.0]) colors.SetColor('centreBkg', [0.3, 0.1, 0.4, 1.0]) colors.SetColor('rightBkg', [0.4, 0.5, 0.6, 1.0]) pointSource = vtk.vtkPointSource() pointSource.SetNumberOfPoints(50) pointSource.Update() print("There are %s input points\n" % pointSource.GetOutput().GetNumberOfPoints()) ids = vtk.vtkIdTypeArray() ids.SetNumberOfComponents(1) # Set values i = 10 while i < 20: ids.InsertNextValue(i) i += 1 selectionNode = vtk.vtkSelectionNode() selectionNode.SetFieldType(1) # POINT # CELL_DATA = 0 # POINT_DATA = 1 # FIELD_DATA = 2 # VERTEX_DATA = 3 # EDGE_DATA = 4 selectionNode.SetContentType(4) # INDICES # SELECTIONS = 0 # GLOBALIDS = 1 # PEDIGREEIDS = 2 # VALUES = 3 # INDICES = 4 # FRUSTUM = 5 # LOCATIONS = 6 # THRESHOLDS = 7 # BLOCKS = 8 selectionNode.SetSelectionList(ids) selection = vtk.vtkSelection() selection.AddNode(selectionNode) extractSelection = vtk.vtkExtractSelection() extractSelection.SetInputConnection(0, pointSource.GetOutputPort()) extractSelection.SetInputData(1, selection) extractSelection.Update() # In selection selected = vtk.vtkUnstructuredGrid() selected.ShallowCopy(extractSelection.GetOutput()) print("There are %s points in the selection" % selected.GetNumberOfPoints()) print("There are %s cells in the selection" % selected.GetNumberOfCells()) # Get points that are NOT in the selection # invert the selection selectionNode.GetProperties().Set(vtk.vtkSelectionNode.INVERSE(), 1) extractSelection.Update() notSelected = vtk.vtkUnstructuredGrid() notSelected.ShallowCopy(extractSelection.GetOutput()) print("There are %s points NOT in the selection" % notSelected.GetNumberOfPoints()) print("There are %s cells NOT in the selection" % notSelected.GetNumberOfCells()) inputMapper = vtk.vtkDataSetMapper() inputMapper.SetInputConnection(pointSource.GetOutputPort()) inputActor = vtk.vtkActor() inputActor.SetMapper(inputMapper) selectedMapper = vtk.vtkDataSetMapper() selectedMapper.SetInputData(selected) selectedActor = vtk.vtkActor() selectedActor.SetMapper(selectedMapper) notSelectedMapper = vtk.vtkDataSetMapper() notSelectedMapper.SetInputData(notSelected) notSelectedActor = vtk.vtkActor() notSelectedActor.SetMapper(notSelectedMapper) # There will be one render window renderWindow = vtk.vtkRenderWindow() renderWindow.SetSize(900, 300) # And one interactor interactor = vtk.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, .66, 1.0] rightViewport = [0.66, 0.0, 1.0, 1.0] # Setup the renderers leftRenderer = vtk.vtkRenderer() renderWindow.AddRenderer(leftRenderer) leftRenderer.SetViewport(leftViewport) leftRenderer.SetBackground(colors.GetColor3d('leftBkg')) centerRenderer = vtk.vtkRenderer() renderWindow.AddRenderer(centerRenderer) centerRenderer.SetViewport(centerViewport) centerRenderer.SetBackground(colors.GetColor3d('centreBkg')) rightRenderer = vtk.vtkRenderer() renderWindow.AddRenderer(rightRenderer) rightRenderer.SetViewport(rightViewport) rightRenderer.SetBackground(colors.GetColor3d('rightBkg')) leftRenderer.AddActor(inputActor) centerRenderer.AddActor(selectedActor) rightRenderer.AddActor(notSelectedActor) leftRenderer.ResetCamera() centerRenderer.ResetCamera() rightRenderer.ResetCamera() renderWindow.Render() interactor.Start() if __name__ == '__main__': main()