andrew@50
|
1 #include "testApp.h"
|
andrew@50
|
2
|
andrew@50
|
3 //--------------------------------------------------------------
|
andrew@50
|
4 void testApp::setup(){
|
andrew@50
|
5 drawIt=false;
|
andrew@50
|
6 // load the default ofxOpenNI config settings
|
andrew@50
|
7 // see bin/data/openni/config/ofxopenni_config.xml
|
andrew@50
|
8 context.setupUsingXMLFile();
|
andrew@50
|
9
|
andrew@50
|
10 // uncomment this to see what open ni is doing inside
|
andrew@50
|
11 //context.enableLogging(OF_LOG_VERBOSE);
|
andrew@50
|
12
|
andrew@50
|
13 // setup resources
|
andrew@50
|
14 depth.setup(&context);
|
andrew@50
|
15 image.setup(&context);
|
andrew@50
|
16 user.setup(&context, &depth);
|
andrew@50
|
17 // Davy.loadImage("images/davy.jpg");
|
andrew@50
|
18 ofEnableSmoothing();
|
andrew@50
|
19 ofSetBackgroundAuto(false);
|
andrew@50
|
20 ofBackground(238,238,224);
|
andrew@50
|
21 // ofEnableAlphaBlending();
|
andrew@50
|
22 ofSetLineWidth(12);
|
andrew@50
|
23
|
andrew@50
|
24
|
andrew@50
|
25
|
andrew@50
|
26 anubis.loadImage("images/anubis-wall-mask.gif");
|
andrew@50
|
27
|
andrew@50
|
28 franklinBook.loadFont("frabk.ttf", 32);
|
andrew@50
|
29
|
andrew@50
|
30 sender.setup( HOST, PORT );
|
andrew@50
|
31 stopSender.setup( HOST, STOPPORT );
|
andrew@50
|
32
|
andrew@50
|
33 maxTorsoValues[0] = 0;
|
andrew@50
|
34 maxTorsoValues[1] = 0;
|
andrew@50
|
35 maxTorsoValues[2] = 0;
|
andrew@50
|
36 double timeNow = ofGetElapsedTimeMillis();
|
andrew@50
|
37 for (int user = 0;user < NUMBER_OF_USERS;user++)
|
andrew@50
|
38 lastRecordedTime[user] = timeNow;
|
andrew@50
|
39 }
|
andrew@50
|
40
|
andrew@50
|
41 //--------------------------------------------------------------
|
andrew@50
|
42 void testApp::update(){
|
andrew@50
|
43
|
andrew@50
|
44 // update the open ni context and user tracker
|
andrew@50
|
45 context.update();
|
andrew@50
|
46 user.update();
|
andrew@50
|
47
|
andrew@50
|
48
|
andrew@50
|
49 }
|
andrew@50
|
50
|
andrew@50
|
51
|
andrew@50
|
52 void testApp::getCoordinates(int userID){
|
andrew@50
|
53 //tracked = user.getTrackedUser(i);
|
andrew@50
|
54 ofxTrackedUser* tracked = user.getTrackedUser(userID);
|
andrew@50
|
55
|
andrew@50
|
56
|
andrew@50
|
57 double timeNow = ofGetElapsedTimeMillis();
|
andrew@50
|
58
|
andrew@50
|
59
|
andrew@50
|
60
|
andrew@50
|
61
|
andrew@50
|
62 if ((fabs(torso[userID][0] - tracked->left_upper_torso.end.x) + fabs(torso[userID][1] - tracked->left_upper_torso.end.y) > 0.1 && tracked->left_upper_torso.end.x > 0 )){
|
andrew@50
|
63 //printf("tracking time %d and last recorded %d\n", timeNow, lastRecordedTime[userID]);
|
andrew@50
|
64 userPresent[userID] = true;
|
andrew@50
|
65 lastRecordedTime[userID] = timeNow ;
|
andrew@50
|
66 torso[userID][0] = tracked->left_upper_torso.end.x;
|
andrew@50
|
67 torso[userID][1] = tracked->left_upper_torso.end.y;
|
andrew@50
|
68 torso[userID][2] = tracked->left_upper_torso.end.z;
|
andrew@50
|
69
|
andrew@50
|
70 checkTorsoMaxima(userID);
|
andrew@50
|
71
|
andrew@50
|
72 //recent track, low distance but do nothing yet
|
andrew@50
|
73 }
|
andrew@50
|
74 else if(userPresent[userID] && (timeNow - lastRecordedTime[userID]) > 500 ){
|
andrew@50
|
75 //not recent track => stopped
|
andrew@50
|
76 userPresent[userID] = false;
|
andrew@50
|
77 printf("user %i has STOPPED!\n", userID);
|
andrew@50
|
78 torso[userID][0] = tracked->left_upper_torso.end.x;
|
andrew@50
|
79 torso[userID][1] = tracked->left_upper_torso.end.y;
|
andrew@50
|
80 torso[userID][2] = tracked->left_upper_torso.end.z;
|
andrew@50
|
81
|
andrew@50
|
82 sendStopMessageForUser(userID);
|
andrew@50
|
83
|
andrew@50
|
84 }
|
andrew@50
|
85 ofSetColor(0x00FF00);
|
andrew@50
|
86 outputString = "HeadX : ";
|
andrew@50
|
87 outputString += ofToString(torso[0][0]);
|
andrew@50
|
88 franklinBook.drawString(outputString, 100,600);
|
andrew@50
|
89
|
andrew@50
|
90 }
|
andrew@50
|
91
|
andrew@50
|
92 void testApp::checkTorsoMaxima(int id){
|
andrew@50
|
93 for (int h = 0; h < 3;h++){
|
andrew@50
|
94 if (torso[id][h] > maxTorsoValues[h])
|
andrew@50
|
95 maxTorsoValues[h] = torso[id][h];
|
andrew@50
|
96 }
|
andrew@50
|
97 }
|
andrew@50
|
98
|
andrew@50
|
99 void testApp::sendDataViaOSC(int userID){
|
andrew@50
|
100
|
andrew@50
|
101 ofxOscMessage m;
|
andrew@50
|
102 m.setAddress( "/person" );
|
andrew@50
|
103 m.addIntArg( userID );
|
andrew@50
|
104 m.addFloatArg( torso[userID][0]/maxTorsoValues[0] );
|
andrew@50
|
105 m.addFloatArg( torso[userID][1] /maxTorsoValues[1]);
|
andrew@50
|
106 m.addFloatArg( torso[userID][2] /maxTorsoValues[2]);
|
andrew@50
|
107 sender.sendMessage( m );
|
andrew@50
|
108
|
andrew@50
|
109 }
|
andrew@50
|
110
|
andrew@50
|
111 void testApp::sendStopMessageForUser(int userID){
|
andrew@50
|
112 ofxOscMessage m;
|
andrew@50
|
113 m.setAddress( "/stoppedperson" );
|
andrew@50
|
114 m.addIntArg( userID );
|
andrew@50
|
115 m.addFloatArg( torso[userID][0]/maxTorsoValues[0] );
|
andrew@50
|
116 m.addFloatArg( torso[userID][1] /maxTorsoValues[1]);
|
andrew@50
|
117 m.addFloatArg( torso[userID][2] /maxTorsoValues[2]);
|
andrew@50
|
118 stopSender.sendMessage( m );
|
andrew@50
|
119 }
|
andrew@50
|
120
|
andrew@50
|
121 //--------------------------------------------------------------
|
andrew@50
|
122 void testApp::draw(){
|
andrew@50
|
123 ofBackground(238,238,224);
|
andrew@50
|
124
|
andrew@50
|
125 // draw depth and rgb images
|
andrew@50
|
126 //depth.draw();
|
andrew@50
|
127 if (drawIt != true) {
|
andrew@50
|
128 image.draw();
|
andrew@50
|
129 user.draw();
|
andrew@50
|
130 }
|
andrew@50
|
131 // draw all the users automatically?
|
andrew@50
|
132
|
andrew@50
|
133
|
andrew@50
|
134
|
andrew@50
|
135
|
andrew@50
|
136 stringstream info;
|
andrew@50
|
137 info << "number of tracked users: " << user.getNumTrackedUsers() << endl;
|
andrew@50
|
138
|
andrew@50
|
139 // draw the neck positions of each user
|
andrew@50
|
140 for(int i = 0; i < user.getNumTrackedUsers(); ++i) {
|
andrew@50
|
141 ofxTrackedUser* tracked = user.getTrackedUser(i);
|
andrew@50
|
142 if(tracked != NULL) {
|
andrew@50
|
143
|
andrew@50
|
144
|
andrew@50
|
145
|
andrew@50
|
146 //andrews code
|
andrew@50
|
147 int userID = i;
|
andrew@50
|
148
|
andrew@50
|
149 if (userID < 6){
|
andrew@50
|
150
|
andrew@50
|
151 getCoordinates(userID);
|
andrew@50
|
152
|
andrew@50
|
153
|
andrew@50
|
154 if (userPresent[userID]){
|
andrew@50
|
155 sendDataViaOSC(userID);
|
andrew@50
|
156
|
andrew@50
|
157 ofSetColor(0x000000);
|
andrew@50
|
158 outputString = "Us ";
|
andrew@50
|
159 outputString += ofToString(userID);
|
andrew@50
|
160 outputString += " ";
|
andrew@50
|
161 outputString += ofToString(userPresent[userID]);
|
andrew@50
|
162 outputString += "HeadX : ";
|
andrew@50
|
163 outputString += ofToString(torso[userID][0], 2);
|
andrew@50
|
164 outputString += " HeadY : ";
|
andrew@50
|
165 outputString += ofToString(torso[userID][1], 2);
|
andrew@50
|
166 outputString += " HeadZ : ";
|
andrew@50
|
167 outputString += ofToString(torso[userID][2], 2);
|
andrew@50
|
168
|
andrew@50
|
169 franklinBook.drawString(outputString, 100,600+userID*40);
|
andrew@50
|
170
|
andrew@50
|
171 ofSetColor(0,0,255);
|
andrew@50
|
172 ofCircle(tracked->neck.begin.x, tracked->neck.begin.y , 40);
|
andrew@50
|
173
|
andrew@50
|
174
|
andrew@50
|
175
|
andrew@50
|
176 }
|
andrew@50
|
177
|
andrew@50
|
178 ofSetColor(255,255,255);
|
andrew@50
|
179 anubis.draw(tracked->neck.begin.x- anubis.width/2,tracked->neck.begin.y - anubis.height/2);
|
andrew@50
|
180
|
andrew@50
|
181 }
|
andrew@50
|
182
|
andrew@50
|
183 //end andrew
|
andrew@50
|
184
|
andrew@50
|
185 info << i << " neck pos: "
|
andrew@50
|
186 << tracked->left_lower_arm.end.x << " "
|
andrew@50
|
187 << tracked->left_lower_arm.end.y << " "
|
andrew@50
|
188 << tracked->neck.begin.z << endl;
|
andrew@50
|
189
|
andrew@50
|
190
|
andrew@50
|
191 if (tracked->neck.begin.x != 0)
|
andrew@50
|
192
|
andrew@50
|
193
|
andrew@50
|
194 ofSetColor(139,0,0,100);
|
andrew@50
|
195 ofNoFill();
|
andrew@50
|
196 float w = ofGetWidth();
|
andrew@50
|
197 float h = ofGetHeight();
|
andrew@50
|
198
|
andrew@50
|
199 // ofBezier(tracked->neck.begin.x,tracked->neck.begin.y,tracked->neck.end.x,tracked->neck.end.y,tracked->left_lower_arm.begin.x,tracked->left_lower_arm.begin.y,tracked->left_lower_arm.end.x,/*tracked->left_lower_arm.end.y*/ w);
|
andrew@50
|
200 // ofBezier(tracked->neck.begin.x,tracked->neck.begin.y,tracked->neck.end.x,tracked->neck.end.y,tracked->right_lower_arm.begin.x,tracked->right_lower_arm.begin.y,tracked->right_lower_arm.end.x,/*tracked->right_lower_arm.end.y*/ w);
|
andrew@50
|
201 // ofBezier(tracked->neck.begin.x,tracked->neck.begin.y,tracked->neck.end.x,tracked->neck.end.y,tracked->left_lower_leg.begin.x,tracked->left_lower_leg.begin.y,tracked->left_lower_leg.end.x,/*tracked->left_lower_leg.end.y*/ h);
|
andrew@50
|
202 // ofBezier(tracked->neck.begin.x,tracked->neck.begin.y,tracked->neck.end.x,tracked->neck.end.y,tracked->right_lower_leg.begin.x,tracked->right_lower_leg.begin.y,tracked->right_lower_leg.end.x,/*tracked->right_lower_leg.end.y*/ h);
|
andrew@50
|
203
|
andrew@50
|
204 //acid smiley
|
andrew@50
|
205 /* ofFill();
|
andrew@50
|
206 ofSetColor(255,255,100);
|
andrew@50
|
207 ofCircle(tracked->neck.begin.x,tracked->neck.begin.y,30);
|
andrew@50
|
208 ofSetColor(0);
|
andrew@50
|
209 ofCircle(tracked->neck.begin.x,tracked->neck.begin.y,35);
|
andrew@50
|
210 ofSetColor(255,255,100);
|
andrew@50
|
211 ofCircle(tracked->neck.begin.x,tracked->neck.begin.y,30);
|
andrew@50
|
212 ofSetColor(0);
|
andrew@50
|
213 ofCircle(tracked->neck.begin.x+10.0f,tracked->neck.begin.y,6);
|
andrew@50
|
214 ofCircle(tracked->neck.begin.x-10.0f,tracked->neck.begin.y,6);
|
andrew@50
|
215 */
|
andrew@50
|
216 // anubis.draw(tracked->neck.begin.x,tracked->neck.begin.y);
|
andrew@50
|
217
|
andrew@50
|
218
|
andrew@50
|
219
|
andrew@50
|
220 ofBezier(tracked->neck.begin.x,tracked->neck.begin.y,tracked->neck.end.x,tracked->neck.end.y,tracked->left_lower_arm.begin.x,tracked->left_lower_arm.begin.y,tracked->left_lower_arm.end.x,/*tracked->left_lower_arm.end.y*/ w);
|
andrew@50
|
221 ofBezier(tracked->neck.begin.x,tracked->neck.begin.y,tracked->neck.end.x,tracked->neck.end.y,tracked->right_lower_arm.begin.x,tracked->right_lower_arm.begin.y,tracked->right_lower_arm.end.x,/*tracked->right_lower_arm.end.y*/ w);
|
andrew@50
|
222 ofBezier(tracked->neck.begin.x,tracked->neck.begin.y,tracked->neck.end.x,tracked->neck.end.y,tracked->left_lower_leg.begin.x,tracked->left_lower_leg.begin.y,tracked->left_lower_leg.end.x,/*tracked->left_lower_leg.end.y*/ h);
|
andrew@50
|
223 ofBezier(tracked->neck.begin.x,tracked->neck.begin.y,tracked->neck.end.x,tracked->neck.end.y,tracked->right_lower_leg.begin.x,tracked->right_lower_leg.begin.y,tracked->right_lower_leg.end.x,/*tracked->right_lower_leg.end.y*/ h);
|
andrew@50
|
224 ofFill();
|
andrew@50
|
225 ofSetColor(255,255,100);
|
andrew@50
|
226 ofCircle(tracked->neck.begin.x,tracked->neck.begin.y,30);
|
andrew@50
|
227 ofSetColor(0);
|
andrew@50
|
228 ofCircle(tracked->neck.begin.x,tracked->neck.begin.y,35);
|
andrew@50
|
229 ofSetColor(255,255,100);
|
andrew@50
|
230 ofCircle(tracked->neck.begin.x,tracked->neck.begin.y,30);
|
andrew@50
|
231 ofSetColor(0);
|
andrew@50
|
232 ofCircle(tracked->neck.begin.x+10.0f,tracked->neck.begin.y,6);
|
andrew@50
|
233 ofCircle(tracked->neck.begin.x-10.0f,tracked->neck.begin.y,6);
|
andrew@50
|
234
|
andrew@50
|
235 }
|
andrew@50
|
236 }
|
andrew@50
|
237
|
andrew@50
|
238 //faint rectangle?
|
andrew@50
|
239 ofFill();
|
andrew@50
|
240 ofSetColor(238,238,224,20);
|
andrew@50
|
241 // ofRect(0,0,ofGetWidth(),ofGetHeight()); blurring
|
andrew@50
|
242 ofDrawBitmapString(info.str(), 10, 500);
|
andrew@50
|
243
|
andrew@50
|
244 }
|
andrew@50
|
245
|
andrew@50
|
246 //--------------------------------------------------------------
|
andrew@50
|
247 void testApp::keyPressed(int key){
|
andrew@50
|
248 ofSetColor(238,238,224);
|
andrew@50
|
249 ofRect(0,0,ofGetWidth(),ofGetHeight());
|
andrew@50
|
250 // drawIt =!drawIt;
|
andrew@50
|
251 ofToggleFullscreen();
|
andrew@50
|
252
|
andrew@50
|
253 sendDataViaOSC(0);
|
andrew@50
|
254 }
|
andrew@50
|
255
|
andrew@50
|
256 //--------------------------------------------------------------
|
andrew@50
|
257 void testApp::keyReleased(int key){
|
andrew@50
|
258
|
andrew@50
|
259 }
|
andrew@50
|
260
|
andrew@50
|
261 //--------------------------------------------------------------
|
andrew@50
|
262 void testApp::mouseMoved(int x, int y ){
|
andrew@50
|
263
|
andrew@50
|
264 }
|
andrew@50
|
265
|
andrew@50
|
266 //--------------------------------------------------------------
|
andrew@50
|
267 void testApp::mouseDragged(int x, int y, int button){
|
andrew@50
|
268
|
andrew@50
|
269 }
|
andrew@50
|
270
|
andrew@50
|
271 //--------------------------------------------------------------
|
andrew@50
|
272 void testApp::mousePressed(int x, int y, int button){
|
andrew@50
|
273 ofSetColor(238,238,224);
|
andrew@50
|
274 ofFill();
|
andrew@50
|
275 ofRect(0,0,ofGetWidth(),ofGetHeight());
|
andrew@50
|
276
|
andrew@50
|
277 }
|
andrew@50
|
278
|
andrew@50
|
279 //--------------------------------------------------------------
|
andrew@50
|
280 void testApp::mouseReleased(int x, int y, int button){
|
andrew@50
|
281
|
andrew@50
|
282 }
|
andrew@50
|
283
|
andrew@50
|
284 //--------------------------------------------------------------
|
andrew@50
|
285 void testApp::windowResized(int w, int h){
|
andrew@50
|
286
|
andrew@50
|
287 }
|
andrew@50
|
288
|