import vtk from threading import Thread from math import degrees from src.event_server import EventServer from src.widgets import FullscreenWidget class vtkMultitouchInteractor(): def __init__(self): self.iren = vtk.vtkRenderWindowInteractor() self.widget = FullscreenWidget() self.server = EventServer(screen) widget.on_rotate(self.on_rotate) widget.on_pinch(self.on_pinch) widget.on_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()