1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 import os
24 import math
25 from libavg import avg
26 from AVGAppStarter import AVGAppStarter
27
28 try:
29 from alib.calibrator.CamCalibrator import Calibrator
30 except ImportError:
31 from .camcalibrator import CamCalibrator as Calibrator
32
33 try:
34 from alib.clicktest import ClickTest
35 except ImportError:
36 ClickTest = None
37
38 g_player = avg.Player.get()
39
86
88
89 self.tracker = g_player.addTracker()
90
91 if Calibrator:
92 self.__calibratorNode = g_player.createNode('div',{
93 'opacity': 0,
94 'active': False,
95 })
96 rootNode = g_player.getRootNode()
97 rootNode.appendChild(self.__calibratorNode)
98 self.__calibratorNode.size = rootNode.size
99 self.__calibrator = Calibrator(self.__calibratorNode, appStarter=self)
100 self.__calibrator.setOnCalibrationSuccess(self.__onCalibrationSuccess)
101 self.__calibrator.init()
102 else:
103 self.__calibrator = None
104
105 self.__showTrackerImage = False
106 self.__updateTrackerImageInterval = None
107 self.__trackerImageNode = g_player.createNode('image', {'sensitive': False})
108 g_player.getRootNode().appendChild(self.__trackerImageNode)
109
110 self.__updateTrackerImageFixup()
111
112 self.bindKey('h', self.tracker.resetHistory, 'RESET tracker history')
113 self.bindKey('d', self.toggleTrackerImage, 'toggle tracker image')
114
115 if self.__calibrator:
116 self.bindKey('c', self.__enterCalibrator, 'enter calibrator')
117
119 if ClickTest:
120 self._clickTest = ClickTest(self._appNode, multiClick=True)
121 else:
122 self._clickTest = None
123
125
126 trackerAngle = float(self.tracker.getParam('/transform/angle/@value'))
127 angle = round(trackerAngle/math.pi) * math.pi
128 self.__trackerImageNode.angle = angle
129 self.trackerFlipX = float(self.tracker.getParam('/transform/displayscale/@x')) < 0
130 self.trackerFlipY = float(self.tracker.getParam('/transform/displayscale/@y')) < 0
131
133 self.__updateTrackerImageFixup()
134
136 def leaveCalibrator():
137
138 self.unbindKey('e')
139 self._activeApp = self._appInstance
140 self._appInstance.enter()
141 self.__calibrator.leave()
142 self._appNode.opacity = 1
143 self._appNode.active = True
144 self.__calibratorNode.opacity = 0
145 self.__calibratorNode.active = False
146
147 if self.__calibrator.isRunning():
148 print "calibrator already running!"
149 return
150
151 self._activeApp = self.__calibrator
152 self.__calibrator.enter()
153 self.bindKey('e', leaveCalibrator, 'leave Calibrator')
154 self._appInstance.leave()
155 self.__calibratorNode.opacity = 1
156 self.__calibratorNode.active = True
157 self._appNode.opacity = 0
158 self._appNode.active = False
159
160 AVGMTAppStarter.instance = None
161