import vtk

# A red cube
cube = vtk.vtkCubeSource()
cubeMapper = vtk.vtkPolyDataMapper()
cubeMapper.SetInputConnection(cube.GetOutputPort())
cubeActor = vtk.vtkActor()
cubeActor.SetMapper(cubeMapper)
cubeActor.GetProperty().SetColor(1,0,0)

# A green sphere
sphere = vtk.vtkSphereSource()
sphere.SetThetaResolution(16)
sphere.SetPhiResolution(16)
sphere.SetCenter(.5,.5,.5)
sphereMapper = vtk.vtkPolyDataMapper()
sphereMapper.SetInputConnection(sphere.GetOutputPort())
sphereActor = vtk.vtkActor()
sphereActor.SetMapper(sphereMapper)
sphereActor.GetProperty().SetColor(0,1,0)


class ToggleOpacity:
  """ Toggles the opacity in the assigned vtkProperty """
  def __init__(self,prop):
      self.opacity = 1.
      self.prop=prop

  def __call__(self,obj,ev):
    currentOpacity = self.prop.GetOpacity()
    if currentOpacity < 1.:
        nextOpacity = 1.
    else:
        nextOpacity = .6
    print("opacity set to {}".format(nextOpacity))
    self.prop.SetOpacity(nextOpacity)
    obj.Render()


r = vtk.vtkRenderer()
r.AddViewProp(cubeActor)
r.AddViewProp(sphereActor)

r.GetActiveCamera().SetPosition(2,1,.5)
r.ResetCamera()

rw = vtk.vtkRenderWindow()
rw.AddRenderer(r)
rw.Render()

rwi = vtk.vtkRenderWindowInteractor()
rwi.SetRenderWindow(rw)
# on any key, toggle the opacity
rwi.AddObserver('KeyPressEvent',ToggleOpacity(sphereActor.GetProperty()))
rwi.Start()
