Przeglądaj źródła

Sterted integration of MultitouchServer with VTK.

Taddeus Kroes 13 lat temu
rodzic
commit
d0ffb5c1d3
1 zmienionych plików z 74 dodań i 0 usunięć
  1. 74 0
      src/MultitouchInteractor.py

+ 74 - 0
src/MultitouchInteractor.py

@@ -0,0 +1,74 @@
+import vtk
+from threading import Thread
+
+from objreader import read_obj
+from touch import MultitouchServer
+
+
+class MultitouchInteractor():
+    def __init__(self):
+        self.iren = vtk.vtkRenderWindowInteractor()
+
+        self.touch_server = MultitouchServer(verbose=1, tuio_verbose=1)
+        self.touch_server.bind('rotate', self.on_rotate)
+        self.touch_server.bind('pinch', self.on_pinch)
+        self.touch_server.bind('tap', self.on_tap)
+
+    def SetRenderWindow(self, window):
+        self.iren.SetRenderWindow(window)
+        self.window = window
+
+    def Initialize(self):
+        self.iren.Initialize()
+
+    def Start(self):
+        #self.iren.Start()
+
+        #t = Thread(target=self.iren.Start)
+        #t.daemon = True
+        #t.start()
+        self.touch_server.start(threaded=True, daemon=True)
+
+        try:
+            import time
+
+            while True:
+                self.window.Render()
+                time.sleep(1. / 60)
+        except KeyboardInterrupt:
+            return
+
+    def SetCamera(self, camera):
+        self.camera = camera
+
+    def on_rotate(self, event):
+        self.camera.Roll(event.angle)
+
+    def on_pinch(self, event):
+        pass
+
+    def on_tap(self, event):
+        print 'tap:', event
+
+
+if __name__ == '__main__':
+    # Create render window and interactor
+    ren = vtk.vtkRenderer()
+    win = vtk.vtkRenderWindow()
+    win.AddRenderer(ren)
+    mt = MultitouchInteractor()
+
+    mt.SetRenderWindow(win)
+
+    # Read OBJ file
+    cubemapper = read_obj('cube.obj')
+
+    # Create actor
+    cubeactor = vtk.vtkActor()
+    cubeactor.SetMapper(cubemapper)
+    ren.AddActor(cubeactor)
+
+    mt.Initialize()
+    mt.SetCamera(ren.GetActiveCamera())
+    win.Render()
+    mt.Start()