|
|
@@ -0,0 +1,90 @@
|
|
|
+import vtk
|
|
|
+from threading import Thread
|
|
|
+from math import degrees
|
|
|
+
|
|
|
+from src.gesture_server import GestureServer
|
|
|
+from src.trackers.transform import TransformationTracker
|
|
|
+from src.trackers.tap import TapTracker
|
|
|
+from src.window import FullscreenWindow
|
|
|
+
|
|
|
+
|
|
|
+class vtkMultitouchInteractor():
|
|
|
+ def __init__(self):
|
|
|
+ self.iren = vtk.vtkRenderWindowInteractor()
|
|
|
+
|
|
|
+ self.server = GestureServer()
|
|
|
+ self.window = FullscreenWindow(server=self.server)
|
|
|
+
|
|
|
+ transform = TransformationTracker(window=self.window)
|
|
|
+ transform.rotate(self.on_rotate)
|
|
|
+ transform.pinch(self.on_pinch)
|
|
|
+
|
|
|
+ tap = TapTracker(window=self.window)
|
|
|
+ tap.tap(self.on_tap)
|
|
|
+
|
|
|
+ def SetRenderWindow(self, window):
|
|
|
+ self.iren.SetRenderWindow(window)
|
|
|
+ self.window = window
|
|
|
+
|
|
|
+ def Initialize(self):
|
|
|
+ self.iren.Initialize()
|
|
|
+ self.renderer.ResetCamera()
|
|
|
+
|
|
|
+ def Start(self):
|
|
|
+ #t = Thread(target=self.iren.Start)
|
|
|
+ #t.daemon = True
|
|
|
+ #t.start()
|
|
|
+ #self.server.start()
|
|
|
+
|
|
|
+ thread = Thread(target=self.server.start)
|
|
|
+ thread.daemon = True
|
|
|
+ thread.start()
|
|
|
+ #self.iren.Start()
|
|
|
+
|
|
|
+ try:
|
|
|
+ import time
|
|
|
+
|
|
|
+ while True:
|
|
|
+ self.window.Render()
|
|
|
+ time.sleep(1. / 60)
|
|
|
+ except KeyboardInterrupt:
|
|
|
+ return
|
|
|
+
|
|
|
+ def SetRenderer(self, renderer):
|
|
|
+ self.renderer = renderer
|
|
|
+ self.camera = renderer.GetActiveCamera()
|
|
|
+
|
|
|
+ def on_rotate(self, gesture):
|
|
|
+ print 'rotate', gesture
|
|
|
+ self.camera.Roll(degrees(gesture.get_angle()))
|
|
|
+
|
|
|
+ def on_pinch(self, gesture):
|
|
|
+ pass
|
|
|
+
|
|
|
+ def on_tap(self, gesture):
|
|
|
+ print 'tap:', gesture
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == '__main__':
|
|
|
+ from tests.objreader import read_obj
|
|
|
+
|
|
|
+ # Create render window and interactor
|
|
|
+ ren = vtk.vtkRenderer()
|
|
|
+ win = vtk.vtkRenderWindow()
|
|
|
+ win.AddRenderer(ren)
|
|
|
+ mt = vtkMultitouchInteractor()
|
|
|
+
|
|
|
+ mt.SetRenderWindow(win)
|
|
|
+
|
|
|
+ # Read OBJ file
|
|
|
+ cubemapper = read_obj('tests/cube.obj')
|
|
|
+
|
|
|
+ # Create actor
|
|
|
+ cubeactor = vtk.vtkActor()
|
|
|
+ cubeactor.SetMapper(cubemapper)
|
|
|
+ ren.AddActor(cubeactor)
|
|
|
+
|
|
|
+ mt.SetRenderer(ren)
|
|
|
+ mt.Initialize()
|
|
|
+ win.Render()
|
|
|
+ mt.Start()
|