def selectionCallback(caller, eventId): hsel = vtk.vtkHardwareSelector() hsel.SetFieldAssociation(vtk.vtkDataObject.FIELD_ASSOCIATION_CELLS) hsel.SetRenderer(ren1) x, y = caller.GetRenderWindow().GetSize() # Create a small area around clicked point for selector area hsel.SetArea(0, 0, x, y) res = hsel.Select() numNodes = res.GetNumberOfNodes() if (numNodes < 1): print("No visible cells") else: sel_node = res.GetNode(0) print('Visible cell IDs: ', VN.vtk_to_numpy(sel_node.GetSelectionList()).tolist())
def selectionCallback(caller, eventId): hsel = vtk.vtkHardwareSelector() hsel.SetFieldAssociation(vtk.vtkDataObject.FIELD_ASSOCIATION_CELLS) hsel.SetRenderer(ren1) x, y = caller.GetRenderWindow().GetSize() # Create a small area around clicked point for selector area hsel.SetArea(0, 0, x, y) res = hsel.Select() numNodes = res.GetNumberOfNodes() if numNodes < 1: print("No visible cells") else: sel_node = res.GetNode(0) print("Visible cell IDs: ", VN.vtk_to_numpy(sel_node.GetSelectionList()).tolist())
def __init__(self, select='faces'): """ Selection Manager helps with picking many objects simultaneously Parameters ----------- select : 'faces' Options are 'faces', 'vertices' or 'actors'. Default 'faces'. Methods ------- select() pick() """ self.hsel = vtk.vtkHardwareSelector() self.update_selection_type(select)
def PickData(object, event, selactor, state, view, text_init): picker = object.GetPicker() hsel = vtk.vtkHardwareSelector() ren = picker.GetRenderer(); hsel.SetRenderer(ren) hsel.SetArea(ren.GetPickX1(),ren.GetPickY1(),ren.GetPickX2(),ren.GetPickY2()) if state: hsel.SetFieldAssociation(vtk.vtkDataObject.FIELD_ASSOCIATION_CELLS) else: hsel.SetFieldAssociation(vtk.vtkDataObject.FIELD_ASSOCIATION_POINTS) sel = hsel.Select(); ex = vtk.vtkExtractSelection() if picker.GetMapper(): if (not sel.GetNumberOfNodes()==0): ex.SetInputConnection(picker.GetMapper().GetInputConnection(0,0)) ex.SetSelectionConnection(sel.GetProducerPort()); ex.Update() selmapper = vtk.vtkDataSetMapper(); data = ex.GetOutput() selmapper.SetInput(data); selmapper.ScalarVisibilityOff() selactor.SetMapper(selmapper); selactor.PickableOff(); selactor.GetProperty().SetColor(0.0, 1.0, 0.0) selactor.GetProperty().SetOpacity(0.5); selactor.GetProperty().SetPointSize(5) ren.AddActor(selactor) PlotSelectedData(data, state, view, text_init)
selected_actor.text.SetText(labels[selected_node]) else: selected_actor.text.SetText("#%d" % selected_node) selected_actor.SetPosition(positions[selected_node]) else: selected_actor.text.SetText("") timer_callback(None, None) ############################################################################### # We add observers to pick the nodes and enable hardware selector nodes_actor.AddObserver('LeftButtonPressEvent', left_click_callback, 1) hsel = vtk.vtkHardwareSelector() hsel.SetFieldAssociation(vtk.vtkDataObject.FIELD_ASSOCIATION_CELLS) hsel.SetRenderer(scene) ############################################################################### # All actors need to be added in a scene, so we build one and add our # lines_actor and nodes_actor. scene.add(lines_actor) scene.add(nodes_actor) scene.add(selected_actor) ############################################################################### # The final step ! Visualize the result of our creation! Also, we need to move # the camera a little bit farther from the network. you can increase the # parameter max_iteractions of the timer callback to let the animation run for
polydata = sphere_source.GetOutput() mapper = vtk.vtkPolyDataMapper() mapper.SetInputData(polydata) mapper.ScalarVisibilityOn() surface_actor = vtk.vtkActor() surface_actor.SetMapper(mapper) ren.AddActor(surface_actor) ren.Render() hw_filter = vtk.vtkHardwareSelector() hw_filter.SetRenderer(ren) window_size = ren_win.GetSize() hw_filter.SetArea(1, 1, window_size[0], window_size[1]) hw_filter.SetFieldAssociation(vtk.vtkDataObject.FIELD_ASSOCIATION_CELLS) selection = hw_filter.Select() extract_selection = vtk.vtkExtractSelection() extract_selection.SetInputData(0, polydata) extract_selection.SetInputData(1, selection) extract_selection.Update() selection = extract_selection.GetOutput() polydata.BuildLinks()