ExtractSelection
VTKExamples/Python/PolyData/ExtractSelection
Description¶
This example creates 50 random points and extracts 10 of them (the points with ids 10-19).
Code¶
ExtractSelection.py
""" converted from: - http://www.vtk.org/Wiki/VTK/Examples/Python/PolyData/ExtractSelectionCells """ import vtk def main(): 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()) if vtk.VTK_MAJOR_VERSION <= 5: extractSelection.SetInput(1, selection) else: 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() if vtk.VTK_MAJOR_VERSION <= 5: selectedMapper.SetInputConnection(selected.GetProducerPort()) else: selectedMapper.SetInputData(selected) selectedActor = vtk.vtkActor() selectedActor.SetMapper(selectedMapper) notSelectedMapper = vtk.vtkDataSetMapper() if vtk.VTK_MAJOR_VERSION <= 5: notSelectedMapper.SetInputConnection(notSelected.GetProducerPort()) else: 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(.6, .5, .4) centerRenderer = vtk.vtkRenderer() renderWindow.AddRenderer(centerRenderer) centerRenderer.SetViewport(centerViewport) centerRenderer.SetBackground(.3, .1, .4) rightRenderer = vtk.vtkRenderer() renderWindow.AddRenderer(rightRenderer) rightRenderer.SetViewport(rightViewport) rightRenderer.SetBackground(.4, .5, .6) leftRenderer.AddActor(inputActor) centerRenderer.AddActor(selectedActor) rightRenderer.AddActor(notSelectedActor) leftRenderer.ResetCamera() centerRenderer.ResetCamera() rightRenderer.ResetCamera() renderWindow.Render() interactor.Start() if __name__ == '__main__': main()