# HardwareSelector

VTKExamples/Python/Visualization/HardwareSelector

### Code

HardwareSelector.py

    from __future__ import print_function
    import vtk
    import vtk.util.numpy_support as VN

    # Callback for when selection is changed
    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())

    sphere = vtk.vtkSphereSource()
    sphere.SetCenter( 0, 0, 0 )
    sphere.SetRadius( 5.0 )

    sphereMapper = vtk.vtkPolyDataMapper()
    sphereMapper.SetInputConnection(sphere.GetOutputPort())

    sphereActor = vtk.vtkActor()
    sphereActor.SetMapper(sphereMapper)

    ren1 = vtk.vtkRenderer()
    ren1.AddActor(sphereActor)
    ren1.SetBackground(0.1, 0.2, 0.4)
    ren1.GetActiveCamera().ParallelProjectionOn()

    renWin = vtk.vtkRenderWindow()
    renWin.AddRenderer(ren1)
    renWin.SetSize(300, 300)

    iren = vtk.vtkRenderWindowInteractor()
    iren.SetRenderWindow(renWin)
    iren.AddObserver("UserEvent", selectionCallback)

    style = vtk.vtkInteractorStyleTrackballCamera()
    iren.SetInteractorStyle(style)
    renWin.GetInteractor().SetInteractorStyle(style)

    ren1.ResetCamera()
    renWin.Render()

    iren.Initialize()
    iren.Start()