vtk_interactor.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import vtk
  2. from threading import Thread
  3. from math import degrees
  4. from src.gesture_server import GestureServer
  5. from src.trackers.transform import TransformationTracker
  6. from src.trackers.tap import TapTracker
  7. from src.window import FullscreenWindow
  8. class vtkMultitouchInteractor():
  9. def __init__(self):
  10. self.iren = vtk.vtkRenderWindowInteractor()
  11. self.server = GestureServer()
  12. self.window = FullscreenWindow(server=self.server)
  13. transform = TransformationTracker(window=self.window)
  14. transform.rotate(self.on_rotate)
  15. transform.pinch(self.on_pinch)
  16. tap = TapTracker(window=self.window)
  17. tap.tap(self.on_tap)
  18. def SetRenderWindow(self, window):
  19. self.iren.SetRenderWindow(window)
  20. self.window = window
  21. def Initialize(self):
  22. self.iren.Initialize()
  23. self.renderer.ResetCamera()
  24. def Start(self):
  25. #t = Thread(target=self.iren.Start)
  26. #t.daemon = True
  27. #t.start()
  28. #self.server.start()
  29. thread = Thread(target=self.server.start)
  30. thread.daemon = True
  31. thread.start()
  32. #self.iren.Start()
  33. try:
  34. import time
  35. while True:
  36. self.window.Render()
  37. time.sleep(1. / 60)
  38. except KeyboardInterrupt:
  39. return
  40. def SetRenderer(self, renderer):
  41. self.renderer = renderer
  42. self.camera = renderer.GetActiveCamera()
  43. def on_rotate(self, gesture):
  44. print 'rotate', gesture
  45. self.camera.Roll(degrees(gesture.get_angle()))
  46. def on_pinch(self, gesture):
  47. pass
  48. def on_tap(self, gesture):
  49. print 'tap:', gesture
  50. if __name__ == '__main__':
  51. from tests.objreader import read_obj
  52. # Create render window and interactor
  53. ren = vtk.vtkRenderer()
  54. win = vtk.vtkRenderWindow()
  55. win.AddRenderer(ren)
  56. mt = vtkMultitouchInteractor()
  57. mt.SetRenderWindow(win)
  58. # Read OBJ file
  59. cubemapper = read_obj('tests/cube.obj')
  60. # Create actor
  61. cubeactor = vtk.vtkActor()
  62. cubeactor.SetMapper(cubemapper)
  63. ren.AddActor(cubeactor)
  64. mt.SetRenderer(ren)
  65. mt.Initialize()
  66. win.Render()
  67. mt.Start()