|
|
@@ -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()
|