vtk_interactor.py 1.9 KB

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