Przeglądaj źródła

Verbosity level is now and integer, and ran pyflakes+pep8.

Taddeus Kroes 14 lat temu
rodzic
commit
a495e74e46
1 zmienionych plików z 10 dodań i 9 usunięć
  1. 10 9
      src/multitouch/touch.py

+ 10 - 9
src/multitouch/touch.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 from events import TapEvent, FlickEvent, RotateEvent, PinchEvent, PanEvent
 import time
-from math import atan2
+from math import atan2, PI
 from threading import Thread
 from OSC import OSCServer
 
@@ -61,14 +61,15 @@ class TouchPoint(object):
 # TODO: Encapsulate DPI resolution in distance heuristics
 SUPPORTED_GESTURES = ('tap', 'pan', 'flick', 'rotate', 'pinch')
 TUIO_ADDRESS = ('localhost', 3333)
-DOUBLE_TAP_DISTANCE = 30
+DOUBLE_TAP_DISTANCE_THRESHOLD = 30
+FLICK_VELOCITY_TRESHOLD = 20
 TAP_INTERVAL = .200
 TAP_TIMEOUT = .200
 MAX_MULTI_DRAG_DISTANCE = 100
 
 
 class MultiTouchListener(object):
-    def __init__(self, verbose=False, update_rate=60):
+    def __init__(self, verbose=0, update_rate=60):
         self.verbose = verbose
         self.last_tap = 0
         self.update_rate = update_rate
@@ -102,7 +103,7 @@ class MultiTouchListener(object):
 
     def detect_taps(self):
         if len(self.taps) == 2:
-            if distance(*self.taps) > DOUBLE_TAP_DISTANCE:
+            if distance(*self.taps) > DOUBLE_TAP_DISTANCE_THRESHOLD:
                 # Taps are too far away too be a double tap, add 2 separate
                 # events
                 self.trigger(TapEvent(*self.taps[0]))
@@ -130,6 +131,7 @@ class MultiTouchListener(object):
             return
 
         rotation = pinch = 0
+        cx, cy = self.centroid
 
         for p in self.points:
             p.set_angle(atan2(p.y - cy, p.x - cx))
@@ -163,7 +165,6 @@ class MultiTouchListener(object):
                                    for p in self.points])
         directions = [(cmp(p.dx(), 0), cmp(p.dy(), 0)) for p in self.points]
 
-
         if any(map(all, zip(*directions))) and clustered:
             if l == 1:
                 p = self.points[0]
@@ -179,7 +180,7 @@ class MultiTouchListener(object):
         if sid in self.points:
             raise KeyError('Point with session id "%s" already exists.' % sid)
 
-        self.points[sid] = TouchPoint(sid, x, y)
+        self.points[sid] = p = TouchPoint(sid, x, y)
         self.update_centroid()
 
         # Detect multi-point gestures
@@ -249,8 +250,8 @@ class MultiTouchListener(object):
         except KeyboardInterrupt:
             self.log('Stopping event loop')
 
-    def log(self, msg):
-        if self.verbose:
+    def log(self, msg, verbosity=1):
+        if self.verbose >= verbosity:
             print '| LOG | %s' % msg
 
     def bind(self, gesture, handler):
@@ -275,6 +276,6 @@ if __name__ == '__main__':
     def tap(event):
         print 'tap:', event
 
-    loop = MultiTouchListener(verbose=True)
+    loop = MultiTouchListener(verbose=2)
     loop.bind('tap', tap)
     loop.start()