andrew@50: #include "testApp.h" andrew@50: andrew@50: //-------------------------------------------------------------- andrew@50: void testApp::setup(){ andrew@50: drawIt=false; andrew@50: // load the default ofxOpenNI config settings andrew@50: // see bin/data/openni/config/ofxopenni_config.xml andrew@50: context.setupUsingXMLFile(); andrew@50: andrew@50: // uncomment this to see what open ni is doing inside andrew@50: //context.enableLogging(OF_LOG_VERBOSE); andrew@50: andrew@50: // setup resources andrew@50: depth.setup(&context); andrew@50: image.setup(&context); andrew@50: user.setup(&context, &depth); andrew@50: // Davy.loadImage("images/davy.jpg"); andrew@50: ofEnableSmoothing(); andrew@50: ofSetBackgroundAuto(false); andrew@50: ofBackground(238,238,224); andrew@50: // ofEnableAlphaBlending(); andrew@50: ofSetLineWidth(12); andrew@50: andrew@50: andrew@50: andrew@50: anubis.loadImage("images/anubis-wall-mask.gif"); andrew@50: andrew@50: franklinBook.loadFont("frabk.ttf", 32); andrew@50: andrew@50: sender.setup( HOST, PORT ); andrew@50: stopSender.setup( HOST, STOPPORT ); andrew@50: andrew@50: maxTorsoValues[0] = 0; andrew@50: maxTorsoValues[1] = 0; andrew@50: maxTorsoValues[2] = 0; andrew@50: double timeNow = ofGetElapsedTimeMillis(); andrew@50: for (int user = 0;user < NUMBER_OF_USERS;user++) andrew@50: lastRecordedTime[user] = timeNow; andrew@50: } andrew@50: andrew@50: //-------------------------------------------------------------- andrew@50: void testApp::update(){ andrew@50: andrew@50: // update the open ni context and user tracker andrew@50: context.update(); andrew@50: user.update(); andrew@50: andrew@50: andrew@50: } andrew@50: andrew@50: andrew@50: void testApp::getCoordinates(int userID){ andrew@50: //tracked = user.getTrackedUser(i); andrew@50: ofxTrackedUser* tracked = user.getTrackedUser(userID); andrew@50: andrew@50: andrew@50: double timeNow = ofGetElapsedTimeMillis(); andrew@50: andrew@50: andrew@50: andrew@50: andrew@50: 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: //printf("tracking time %d and last recorded %d\n", timeNow, lastRecordedTime[userID]); andrew@50: userPresent[userID] = true; andrew@50: lastRecordedTime[userID] = timeNow ; andrew@50: torso[userID][0] = tracked->left_upper_torso.end.x; andrew@50: torso[userID][1] = tracked->left_upper_torso.end.y; andrew@50: torso[userID][2] = tracked->left_upper_torso.end.z; andrew@50: andrew@50: checkTorsoMaxima(userID); andrew@50: andrew@50: //recent track, low distance but do nothing yet andrew@50: } andrew@50: else if(userPresent[userID] && (timeNow - lastRecordedTime[userID]) > 500 ){ andrew@50: //not recent track => stopped andrew@50: userPresent[userID] = false; andrew@50: printf("user %i has STOPPED!\n", userID); andrew@50: torso[userID][0] = tracked->left_upper_torso.end.x; andrew@50: torso[userID][1] = tracked->left_upper_torso.end.y; andrew@50: torso[userID][2] = tracked->left_upper_torso.end.z; andrew@50: andrew@50: sendStopMessageForUser(userID); andrew@50: andrew@50: } andrew@50: ofSetColor(0x00FF00); andrew@50: outputString = "HeadX : "; andrew@50: outputString += ofToString(torso[0][0]); andrew@50: franklinBook.drawString(outputString, 100,600); andrew@50: andrew@50: } andrew@50: andrew@50: void testApp::checkTorsoMaxima(int id){ andrew@50: for (int h = 0; h < 3;h++){ andrew@50: if (torso[id][h] > maxTorsoValues[h]) andrew@50: maxTorsoValues[h] = torso[id][h]; andrew@50: } andrew@50: } andrew@50: andrew@50: void testApp::sendDataViaOSC(int userID){ andrew@50: andrew@50: ofxOscMessage m; andrew@50: m.setAddress( "/person" ); andrew@50: m.addIntArg( userID ); andrew@50: m.addFloatArg( torso[userID][0]/maxTorsoValues[0] ); andrew@50: m.addFloatArg( torso[userID][1] /maxTorsoValues[1]); andrew@50: m.addFloatArg( torso[userID][2] /maxTorsoValues[2]); andrew@50: sender.sendMessage( m ); andrew@50: andrew@50: } andrew@50: andrew@50: void testApp::sendStopMessageForUser(int userID){ andrew@50: ofxOscMessage m; andrew@50: m.setAddress( "/stoppedperson" ); andrew@50: m.addIntArg( userID ); andrew@50: m.addFloatArg( torso[userID][0]/maxTorsoValues[0] ); andrew@50: m.addFloatArg( torso[userID][1] /maxTorsoValues[1]); andrew@50: m.addFloatArg( torso[userID][2] /maxTorsoValues[2]); andrew@50: stopSender.sendMessage( m ); andrew@50: } andrew@50: andrew@50: //-------------------------------------------------------------- andrew@50: void testApp::draw(){ andrew@50: ofBackground(238,238,224); andrew@50: andrew@50: // draw depth and rgb images andrew@50: //depth.draw(); andrew@50: if (drawIt != true) { andrew@50: image.draw(); andrew@50: user.draw(); andrew@50: } andrew@50: // draw all the users automatically? andrew@50: andrew@50: andrew@50: andrew@50: andrew@50: stringstream info; andrew@50: info << "number of tracked users: " << user.getNumTrackedUsers() << endl; andrew@50: andrew@50: // draw the neck positions of each user andrew@50: for(int i = 0; i < user.getNumTrackedUsers(); ++i) { andrew@50: ofxTrackedUser* tracked = user.getTrackedUser(i); andrew@50: if(tracked != NULL) { andrew@50: andrew@50: andrew@50: andrew@50: //andrews code andrew@50: int userID = i; andrew@50: andrew@50: if (userID < 6){ andrew@50: andrew@50: getCoordinates(userID); andrew@50: andrew@50: andrew@50: if (userPresent[userID]){ andrew@50: sendDataViaOSC(userID); andrew@50: andrew@50: ofSetColor(0x000000); andrew@50: outputString = "Us "; andrew@50: outputString += ofToString(userID); andrew@50: outputString += " "; andrew@50: outputString += ofToString(userPresent[userID]); andrew@50: outputString += "HeadX : "; andrew@50: outputString += ofToString(torso[userID][0], 2); andrew@50: outputString += " HeadY : "; andrew@50: outputString += ofToString(torso[userID][1], 2); andrew@50: outputString += " HeadZ : "; andrew@50: outputString += ofToString(torso[userID][2], 2); andrew@50: andrew@50: franklinBook.drawString(outputString, 100,600+userID*40); andrew@50: andrew@50: ofSetColor(0,0,255); andrew@50: ofCircle(tracked->neck.begin.x, tracked->neck.begin.y , 40); andrew@50: andrew@50: andrew@50: andrew@50: } andrew@50: andrew@50: ofSetColor(255,255,255); andrew@50: anubis.draw(tracked->neck.begin.x- anubis.width/2,tracked->neck.begin.y - anubis.height/2); andrew@50: andrew@50: } andrew@50: andrew@50: //end andrew andrew@50: andrew@50: info << i << " neck pos: " andrew@50: << tracked->left_lower_arm.end.x << " " andrew@50: << tracked->left_lower_arm.end.y << " " andrew@50: << tracked->neck.begin.z << endl; andrew@50: andrew@50: andrew@50: if (tracked->neck.begin.x != 0) andrew@50: andrew@50: andrew@50: ofSetColor(139,0,0,100); andrew@50: ofNoFill(); andrew@50: float w = ofGetWidth(); andrew@50: float h = ofGetHeight(); andrew@50: andrew@50: // 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: // 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: // 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: // 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: andrew@50: //acid smiley andrew@50: /* ofFill(); andrew@50: ofSetColor(255,255,100); andrew@50: ofCircle(tracked->neck.begin.x,tracked->neck.begin.y,30); andrew@50: ofSetColor(0); andrew@50: ofCircle(tracked->neck.begin.x,tracked->neck.begin.y,35); andrew@50: ofSetColor(255,255,100); andrew@50: ofCircle(tracked->neck.begin.x,tracked->neck.begin.y,30); andrew@50: ofSetColor(0); andrew@50: ofCircle(tracked->neck.begin.x+10.0f,tracked->neck.begin.y,6); andrew@50: ofCircle(tracked->neck.begin.x-10.0f,tracked->neck.begin.y,6); andrew@50: */ andrew@50: // anubis.draw(tracked->neck.begin.x,tracked->neck.begin.y); andrew@50: andrew@50: andrew@50: andrew@50: 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: 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: 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: 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: ofFill(); andrew@50: ofSetColor(255,255,100); andrew@50: ofCircle(tracked->neck.begin.x,tracked->neck.begin.y,30); andrew@50: ofSetColor(0); andrew@50: ofCircle(tracked->neck.begin.x,tracked->neck.begin.y,35); andrew@50: ofSetColor(255,255,100); andrew@50: ofCircle(tracked->neck.begin.x,tracked->neck.begin.y,30); andrew@50: ofSetColor(0); andrew@50: ofCircle(tracked->neck.begin.x+10.0f,tracked->neck.begin.y,6); andrew@50: ofCircle(tracked->neck.begin.x-10.0f,tracked->neck.begin.y,6); andrew@50: andrew@50: } andrew@50: } andrew@50: andrew@50: //faint rectangle? andrew@50: ofFill(); andrew@50: ofSetColor(238,238,224,20); andrew@50: // ofRect(0,0,ofGetWidth(),ofGetHeight()); blurring andrew@50: ofDrawBitmapString(info.str(), 10, 500); andrew@50: andrew@50: } andrew@50: andrew@50: //-------------------------------------------------------------- andrew@50: void testApp::keyPressed(int key){ andrew@50: ofSetColor(238,238,224); andrew@50: ofRect(0,0,ofGetWidth(),ofGetHeight()); andrew@50: // drawIt =!drawIt; andrew@50: ofToggleFullscreen(); andrew@50: andrew@50: sendDataViaOSC(0); andrew@50: } andrew@50: andrew@50: //-------------------------------------------------------------- andrew@50: void testApp::keyReleased(int key){ andrew@50: andrew@50: } andrew@50: andrew@50: //-------------------------------------------------------------- andrew@50: void testApp::mouseMoved(int x, int y ){ andrew@50: andrew@50: } andrew@50: andrew@50: //-------------------------------------------------------------- andrew@50: void testApp::mouseDragged(int x, int y, int button){ andrew@50: andrew@50: } andrew@50: andrew@50: //-------------------------------------------------------------- andrew@50: void testApp::mousePressed(int x, int y, int button){ andrew@50: ofSetColor(238,238,224); andrew@50: ofFill(); andrew@50: ofRect(0,0,ofGetWidth(),ofGetHeight()); andrew@50: andrew@50: } andrew@50: andrew@50: //-------------------------------------------------------------- andrew@50: void testApp::mouseReleased(int x, int y, int button){ andrew@50: andrew@50: } andrew@50: andrew@50: //-------------------------------------------------------------- andrew@50: void testApp::windowResized(int w, int h){ andrew@50: andrew@50: } andrew@50: