MultitouchInteractor.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import vtk
  2. from threading import Thread
  3. from objreader import read_obj
  4. from touch import MultitouchServer
  5. class MultitouchInteractor():
  6. def __init__(self):
  7. self.iren = vtk.vtkRenderWindowInteractor()
  8. self.touch_server = MultitouchServer(verbose=1, tuio_verbose=1)
  9. self.touch_server.bind('rotate', self.on_rotate)
  10. self.touch_server.bind('pinch', self.on_pinch)
  11. self.touch_server.bind('tap', self.on_tap)
  12. def SetRenderWindow(self, window):
  13. self.iren.SetRenderWindow(window)
  14. self.window = window
  15. def Initialize(self):
  16. self.iren.Initialize()
  17. def Start(self):
  18. #self.iren.Start()
  19. #t = Thread(target=self.iren.Start)
  20. #t.daemon = True
  21. #t.start()
  22. self.touch_server.start(threaded=True, daemon=True)
  23. try:
  24. import time
  25. while True:
  26. self.window.Render()
  27. time.sleep(1. / 60)
  28. except KeyboardInterrupt:
  29. return
  30. def SetCamera(self, camera):
  31. self.camera = camera
  32. def on_rotate(self, event):
  33. self.camera.Roll(event.angle)
  34. def on_pinch(self, event):
  35. pass
  36. def on_tap(self, event):
  37. print 'tap:', event
  38. if __name__ == '__main__':
  39. # Create render window and interactor
  40. ren = vtk.vtkRenderer()
  41. win = vtk.vtkRenderWindow()
  42. win.AddRenderer(ren)
  43. mt = MultitouchInteractor()
  44. mt.SetRenderWindow(win)
  45. # Read OBJ file
  46. cubemapper = read_obj('cube.obj')
  47. # Create actor
  48. cubeactor = vtk.vtkActor()
  49. cubeactor.SetMapper(cubemapper)
  50. ren.AddActor(cubeactor)
  51. mt.Initialize()
  52. mt.SetCamera(ren.GetActiveCamera())
  53. win.Render()
  54. mt.Start()