SelectedVerticesAndEdges
VTKExamples/Python/Graphs/SelectedVerticesAndEdges
Description¶
*Contributed by Eric Monson
Code¶
SelectedVerticesAndEdges.py
#!/usr/bin/env python from __future__ import print_function import vtk source = vtk.vtkRandomGraphSource() source.Update() view = vtk.vtkGraphLayoutView() view.AddRepresentationFromInputConnection(source.GetOutputPort()) def selectionCallback(caller, event): # In C++ there is some extra data passed to the callback, but in Python # the callback data is lost... # There should be two selection nodes, but which one is vertices and which # is edges does not seem to be guaranteed... sel = caller.GetCurrentSelection() node0 = sel.GetNode(0) node0_field_type = node0.GetFieldType() sel_list0 = caller.GetCurrentSelection().GetNode(0).GetSelectionList() node1 = sel.GetNode(1) node1_field_type = node1.GetFieldType() sel_list1 = caller.GetCurrentSelection().GetNode(1).GetSelectionList() if (sel_list0.GetNumberOfTuples() > 0): printFieldType(node0_field_type) for ii in range(sel_list0.GetNumberOfTuples()): print("\t", sel_list0.GetValue(ii)) if (sel_list1.GetNumberOfTuples() > 0): printFieldType(node1_field_type) for ii in range(sel_list1.GetNumberOfTuples()): print("\t", sel_list1.GetValue(ii)) print("- - -") def printFieldType(field_type): if field_type == 3: print("Vertices Selected:") elif field_type == 4: print("Edges Selected:") else: print("Unknown type:") rep = view.GetRepresentation(0) # The vtkRenderedGraphRepresentation should already have a vtkAnnotationLink, # so we just want to grab it and add an observer with our callback function # attached link = rep.GetAnnotationLink() link.AddObserver("AnnotationChangedEvent", selectionCallback) view.GetRenderWindow().SetSize(600, 600) view.ResetCamera() view.Render() view.GetInteractor().Start()