void SimpleSimulator::mouseDragged(float x, float y) { //printf("dragged %f %f\n",x,y); TuioCursor *cursor = NULL; float distance = width; for (std::list<TuioCursor*>::iterator iter = activeCursorList.begin(); iter!=activeCursorList.end(); iter++) { TuioCursor *tcur = (*iter); float test = tcur->getDistance(x,y); if (test<distance) { distance = test; cursor = tcur; } } if (cursor==NULL) return; if (cursor->getTuioTime()==frameTime) return; std::list<TuioCursor*>::iterator joint = std::find( jointCursorList.begin(), jointCursorList.end(), cursor ); if( joint != jointCursorList.end() ) { float dx = x-cursor->getX(); float dy = y-cursor->getY(); for (std::list<TuioCursor*>::iterator iter = jointCursorList.begin(); iter!=jointCursorList.end(); iter++) { TuioCursor *jointCursor = (*iter); tuioServer->updateTuioCursor(jointCursor,jointCursor->getX()+dx,jointCursor->getY()+dy); } } else tuioServer->updateTuioCursor(cursor,x,y); }
void testApp::tuioCursorAdded(TuioCursor & tcur){ cout << " cursor added: " + ofToString(tcur.getCursorID())+ " X: "+ofToString(tcur.getX())+ " Y: "+ofToString(tcur.getY()) << endl; // cout << ofToString(touch.id) << ofToString((int)time(NULL)) << ofToString(touch.x) << endl; updateDB(tcur.getCursorID(), time(NULL), tcur.getX(), tcur.getY()); //forward the touch events to ofxMultiTouch for the InteractiveObjects // ofxMultiTouch.touchDown(tcur.getX(), tcur.getY(), tcur.getCursorID(), NULL); }
void testApp::cursorUpdateHandler(TuioCursor & tcur) { /*std::cout << "cursorUpdated " << tcur->getCursorID() << " (" << tcur->getSessionID() << ") " << tcur->getX() << " " << tcur->getY() << " " << tcur->getMotionSpeed() << " " << tcur->getMotionAccel() << " " << std::endl;*/ cout << "testApp::cursorUpdateHandler: " << " tcur.getX(): " << tcur.getX() << " tcur.getY(): " << tcur.getY() << endl; touchPoints.push_back(ofPoint(tcur.getX()*ofGetWidth(), tcur.getY()*ofGetHeight())); //touchPoints.push_back( ofPoint(tcur.getX(), tcur.getY()) ); //cout << "tcur.getX(): " << tcur.getX() << " tcur.getY() : " << tcur.getY() << endl; }
void testApp::tuioCursorRemoved(TuioCursor & tcur){ /*cout << " cursor removed: " + ofToString(tcur.getCursorID())+ " X: "+ofToString(tcur.getX())+ " Y: "+ofToString(tcur.getY()) << endl;*/ mtActionsHub.touchUp(tcur.getX(), tcur.getY(), tcur.getCursorID(), NULL); mtSliderHub.touchUp(tcur.getX(), tcur.getY(), tcur.getCursorID(), NULL); //draggableRotatableScalableItem.touchUp(tcur.getX(), tcur.getY(), tcur.getCursorID(), NULL); //forward the touch events to ofxMultiTouch for the InteractiveObjects ofxMultiTouch.touchUp(tcur.getX(), tcur.getY(), tcur.getCursorID(), NULL); }
void testApp::touchDown(TuioCursor & tcur) { cout << "testApp::touchDown" << endl; touchPoints.push_back( ofPoint(tcur.getX()*ofGetWidth(), tcur.getY()*ofGetHeight()) ); }
//draw them for debug purposes void ofxTuioServer::drawCursors() { char id[3]; // draw the cursors std::list<TuioCursor*> cursorList = tuioServer->getTuioCursors(); for (std::list<TuioCursor*>::iterator tuioCursor = cursorList.begin(); tuioCursor!=cursorList.end(); tuioCursor++) { TuioCursor * tcur = (*tuioCursor); std::list<TuioPoint> path = tcur->getPath(); if (path.size()>0) { TuioPoint last_point = path.front(); glBegin(GL_LINES); glColor3f(0.0, 0.0, 1.0); for (std::list<TuioPoint>::iterator point = path.begin(); point!=path.end(); point++) { glVertex3f(last_point.getX()*ofGetWidth(), last_point.getY()*ofGetHeight(), 0.0f); glVertex3f(point->getX()*ofGetWidth(), point->getY()*ofGetHeight(), 0.0f); last_point.update(point->getX(),point->getY()); } glEnd(); // draw the finger tip glColor3f(0.0, 0.75, 0.75); //float size = tcur->getWidth() + tcur ofCircle(tcur->getX()*ofGetWidth(), tcur->getY()*ofGetHeight(), 10); } } }
void testApp::tuioCursorUpdated(TuioCursor & tcur){ /*cout << " cursor updated: " + ofToString(tcur.getCursorID())+ " X: "+ofToString(tcur.getXSpeed())+ " Y: "+ofToString(tcur.getYSpeed()) << endl;*/ //forward the touch events to ofxMultiTouch for the InteractiveObjects ofxMultiTouch.touchMoved(tcur.getX(), tcur.getY(), tcur.getCursorID(), NULL); }
void ofxTuioClient::drawCursors(){ std::list<TuioCursor*> cursorList = client->getTuioCursors(); std::list<TuioCursor*>::iterator tit; client->lockCursorList(); for (tit=cursorList.begin(); tit != cursorList.end(); tit++) { TuioCursor * cur = (*tit); //if(tcur!=0){ //TuioCursor cur = *tcur; glColor3f(0.0,0.0,0.0); ofEllipse(cur->getX()*ofGetWidth(), cur->getY()*ofGetHeight(), 10.0, 10.0); string str = "SessionId: "+ofToString((int)(cur->getSessionID())); ofDrawBitmapString(str, cur->getX()*ofGetWidth()-10.0, cur->getY()*ofGetHeight()+25.0); str = "CursorId: "+ofToString((int)(cur->getCursorID())); ofDrawBitmapString(str, cur->getX()*ofGetWidth()-10.0, cur->getY()*ofGetHeight()+40.0); //} } client->unlockCursorList(); }
void testApp::tuioCursorRemoved(TuioCursor & tcur){ // cout << " cursor removed: " + ofToString(tcur.getCursorID())+ // " X: "+ofToString(tcur.getX())+ // " Y: "+ofToString(tcur.getY()) // << endl; updateDB(tcur.getCursorID(), time(NULL), tcur.getX(), tcur.getY()); //forward the touch events to ofxMultiTouch for the InteractiveObjects // ofxMultiTouch.touchUp(tcur.getX(), tcur.getY(), tcur.getCursorID(), NULL); }
void testApp::tuioCursorUpdated(TuioCursor & tcur){ /*cout << " cursor updated: " + ofToString(tcur.getCursorID())+ " X: "+ofToString(tcur.getXSpeed())+ " Y: "+ofToString(tcur.getYSpeed()) << endl;*/ ofxMultiTouchCustomDataSF multiTouchCustomData; multiTouchCustomData.sessionID = tcur.getSessionID(); mtActionsHub.touchMoved(tcur.getX(), tcur.getY(), tcur.getCursorID(), &multiTouchCustomData); mtSliderHub.touchMoved(tcur.getX(), tcur.getY(), tcur.getCursorID(), &multiTouchCustomData); /* draggableRotatableScalableItem.touchMoved(tcur.getX(), tcur.getY(), tcur.getCursorID(), NULL); if(draggableRotatableScalableItem.ownTouchCursor(tcur.getSessionID())) { return; } */ //forward the touch events to ofxMultiTouch for the InteractiveObjects ofxMultiTouch.touchMoved(tcur.getX(), tcur.getY(), tcur.getCursorID(), NULL); }
void TUIOInputModule::removeTuioCursor(TuioCursor *tcur) { std::vector<TouchInfo> touches; std::list<TuioCursor*> cursorList = tuioClient->getTuioCursors(); tuioClient->lockCursorList(); for (std::list<TuioCursor*>::iterator iter = cursorList.begin(); iter!=cursorList.end(); iter++) { TuioCursor *tuioCursor = (*iter); TouchInfo touch; touch.position.x = tuioCursor->getX(); touch.position.y = tuioCursor->getY(); touch.id= tuioCursor->getCursorID(); touches.push_back(touch); } tuioClient->unlockCursorList(); TUIOEvent event; event.type = InputEvent::EVENT_TOUCHES_ENDED; event.touches = touches; CoreServices::getInstance()->getCore()->lockMutex(eventMutex); events.push_back(event); CoreServices::getInstance()->getCore()->unlockMutex(eventMutex); }
//-------------------------------------------------------------- void TuioKinect::draw() { float height = (float)ofGetHeight(); float width = (float)ofGetWidth() ; ofSetColor(0,0,0,200) ; //Additive blend mode glBlendFunc(GL_SRC_COLOR, GL_ONE); ofSetColor(255, 255, 255) ; ofEnableSmoothing(); for(int i=0; i< customParticles.size(); i++) { customParticles[i].draw(0); } box2d.draw(); box2d.drawGround() ; ofSetColor(255, 255, 255); std::list<TuioCursor*> alive_cursor_list = tuioServer->getTuioCursors(); std::list<TuioCursor*>::iterator alive_cursor; for (alive_cursor=alive_cursor_list.begin(); alive_cursor!= alive_cursor_list.end(); alive_cursor++) { TuioCursor *ac = (*alive_cursor); float absXSpeed = ac->getXSpeed() ; float absYSpeed = ac->getYSpeed() ; float xpos = ac->getX() * (float)ofGetWidth() ; float ypos = ac->getY() * (float)ofGetHeight() ; absXSpeed = ( absXSpeed < 0 ) ? absXSpeed * -1 : absXSpeed ; absYSpeed = ( absYSpeed < 0 ) ? absYSpeed * -1 : absYSpeed ; if ( absXSpeed > .30 || absYSpeed > .30 ) { int _size = customParticles.size() ; if ( _size < 20 ) { CustomParticle p; if ( _size % 2 == 0 ) { p.changeIsFire(true); } else { p.changeIsFire(false) ; } float r = ofRandom(.25f, 1.0f); //normalized diff p.setPhysics(4.0 * r, .2 * r, .45 * r ); p.setup(box2d.getWorld(), xpos, ypos, (r*30) ); p.setVelocity( ac->getXSpeed()*10 , ac->getYSpeed()*10 ) ; customParticles.push_back(p); } } //Draw that path! drawTuioPath( ac->getPath() ) ; } //Debug Text ofSetColor(255, 255, 255); char reportStr[1024]; sprintf(reportStr, "set near threshold %i (press: + -)\nset far threshold %i (press: < >)\nnum blobs found %i, fps: %i", nearThreshold, farThreshold, (int)contourFinder.blobs.size(), (int)ofGetFrameRate()); ofDrawBitmapString(reportStr, 20, 650); ofEnableAlphaBlending() ; ofSetColor ( 10 , 10 , 10 ); ofFill() ; ofSetLineWidth( 2 ) ; ofRect(0, 0, 40, 40 ) ; ofSetColor(255, 255, 255 ) ; ofFill() ; grayImage.draw(5, 5, 192, 144 ); contourFinder.draw(5, 5, 192, 144 ); ofFill() ; ofDisableAlphaBlending() ; }
void TuioClient::oscMessageReceived (const OSCMessage& message) { if( message.getAddressPattern() == "/tuio/2Dcur" ) { String cmd; cmd = message[0].getString(); if (cmd == "set") { int32 s_id; float xpos, ypos, xspeed, yspeed, maccel; s_id=message[1].getInt32(); xpos=message[2].getFloat32(); ypos=message[3].getFloat32(); xspeed =message[4].getFloat32(); yspeed=message[5].getFloat32(); maccel=message[6].getFloat32(); std::list<TuioCursor*>::iterator tcur; for (tcur=cursorList.begin(); tcur!= cursorList.end(); tcur++) if((*tcur)->getSessionID()==(long)s_id) break; if (tcur==cursorList.end()) { TuioCursor *addCursor = new TuioCursor((long)s_id,-1,xpos,ypos); frameCursors.push_back(addCursor); } else if ( ((*tcur)->getX()!=xpos) || ((*tcur)->getY()!=ypos) || ((*tcur)->getXSpeed()!=xspeed) || ((*tcur)->getYSpeed()!=yspeed) || ((*tcur)->getMotionAccel()!=maccel) ) { int id = (*tcur)->getCursorID(); TuioCursor *updateCursor = new TuioCursor((long)s_id,id,xpos,ypos); updateCursor->update(xpos,ypos,xspeed,yspeed,maccel); frameCursors.push_back(updateCursor); } } else if (cmd=="alive") { aliveCursorList.clear(); for(int i = 1; i < message.size() ; i++) { aliveCursorList.push_back(message[i].getInt32()); } } else if( cmd== "fseq" ){ int32 fseq; fseq = message[1].getInt32(); bool lateFrame = false; if (fseq>0) { if (fseq>currentFrame) currentTime = TuioTime::getSessionTime(); if ((fseq>=currentFrame) || ((currentFrame-fseq)>100)) currentFrame = fseq; else lateFrame = true; } else if ((TuioTime::getSessionTime().getTotalMilliseconds()-currentTime.getTotalMilliseconds())>100) { currentTime = TuioTime::getSessionTime(); } if (!lateFrame) { // lockCursorList(); // find the removed cursors first for (std::list<TuioCursor*>::iterator tcur=cursorList.begin(); tcur != cursorList.end(); tcur++) { std::list<long>::iterator iter = find(aliveCursorList.begin(), aliveCursorList.end(), (*tcur)->getSessionID()); if (iter == aliveCursorList.end()) { (*tcur)->remove(currentTime); frameCursors.push_back(*tcur); } } // unlockCursorList(); for (std::list<TuioCursor*>::iterator iter=frameCursors.begin(); iter != frameCursors.end(); iter++) { TuioCursor *tcur = (*iter); int c_id = -1; TuioCursor *frameCursor = NULL; switch (tcur->getTuioState()) { case TUIO_REMOVED: frameCursor = tcur; frameCursor->remove(currentTime); for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++) (*listener)->removeTuioCursor(frameCursor); // lockCursorList(); for (std::list<TuioCursor*>::iterator delcur=cursorList.begin(); delcur!=cursorList.end(); delcur++) { if((*delcur)->getSessionID()==frameCursor->getSessionID()) { cursorList.erase(delcur); break; } } if (frameCursor->getCursorID()==maxCursorID) { maxCursorID = -1; delete frameCursor; if (cursorList.size()>0) { std::list<TuioCursor*>::iterator clist; for (clist=cursorList.begin(); clist != cursorList.end(); clist++) { c_id = (*clist)->getCursorID(); if (c_id>maxCursorID) maxCursorID=c_id; } freeCursorBuffer.clear(); for (std::list<TuioCursor*>::iterator flist=freeCursorList.begin(); flist != freeCursorList.end(); flist++) { TuioCursor *freeCursor = (*flist); if (freeCursor->getCursorID()>maxCursorID) delete freeCursor; else freeCursorBuffer.push_back(freeCursor); } freeCursorList = freeCursorBuffer; } else { for (std::list<TuioCursor*>::iterator flist=freeCursorList.begin(); flist != freeCursorList.end(); flist++) { TuioCursor *freeCursor = (*flist); delete freeCursor; } freeCursorList.clear(); } } else if (frameCursor->getCursorID()<maxCursorID) { freeCursorList.push_back(frameCursor); } // unlockCursorList(); break; case TUIO_ADDED: // lockCursorList(); c_id = (int)cursorList.size(); if (((int)(cursorList.size())<=maxCursorID) && ((int)(freeCursorList.size())>0)) { std::list<TuioCursor*>::iterator closestCursor = freeCursorList.begin(); for(std::list<TuioCursor*>::iterator iter = freeCursorList.begin();iter!= freeCursorList.end(); iter++) { if((*iter)->getDistance(tcur)<(*closestCursor)->getDistance(tcur)) closestCursor = iter; } TuioCursor *freeCursor = (*closestCursor); c_id = freeCursor->getCursorID(); freeCursorList.erase(closestCursor); delete freeCursor; } else maxCursorID = c_id; frameCursor = new TuioCursor(currentTime,tcur->getSessionID(),c_id,tcur->getX(),tcur->getY()); cursorList.push_back(frameCursor); delete tcur; // unlockCursorList(); for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++){ (*listener)->addTuioCursor(frameCursor); } break; default: // lockCursorList(); std::list<TuioCursor*>::iterator iter; for (iter=cursorList.begin(); iter != cursorList.end(); iter++) { if((*iter)->getSessionID()==tcur->getSessionID()) { frameCursor = (*iter); break; } } if ( (tcur->getX()!=frameCursor->getX() && tcur->getXSpeed()==0) || (tcur->getY()!=frameCursor->getY() && tcur->getYSpeed()==0) ) frameCursor->update(currentTime,tcur->getX(),tcur->getY()); else frameCursor->update(currentTime,tcur->getX(),tcur->getY(),tcur->getXSpeed(),tcur->getYSpeed(),tcur->getMotionAccel()); delete tcur; // unlockCursorList(); for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++) (*listener)->updateTuioCursor(frameCursor); } } for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++) (*listener)->refresh(currentTime); } else { for (std::list<TuioCursor*>::iterator iter=frameCursors.begin(); iter != frameCursors.end(); iter++) { TuioCursor *tcur = (*iter); delete tcur; } } frameCursors.clear(); } } else if( message.getAddressPattern()== "/tuio/2Dobj" ){ // String cmd = message[0].getString(); // // if (cmd=="set") { // // int32 s_id, c_id; // float xpos, ypos, angle, xspeed, yspeed, rspeed, maccel, raccel; // s_id=message[1].getInt32(); // c_id=message[2].getInt32(); // xpos=message[3].getFloat32(); // ypos=message[4].getFloat32(); // angle=message[5].getFloat32(); // xspeed =message[6].getFloat32(); // yspeed=message[7].getFloat32(); // rspeed=message[8].getFloat32(); // maccel=message[9].getFloat32(); // raccel=message[10].getFloat32(); // // lockObjectList(); // std::list<TuioObject*>::iterator tobj; // for (tobj=objectList.begin(); tobj!= objectList.end(); tobj++) // if((*tobj)->getSessionID()==(long)s_id) break; // // if (tobj == objectList.end()) { // // TuioObject *addObject = new TuioObject((long)s_id,(int)c_id,xpos,ypos,angle); // frameObjects.push_back(addObject); // // } else if ( ((*tobj)->getX()!=xpos) || ((*tobj)->getY()!=ypos) || ((*tobj)->getAngle()!=angle) || ((*tobj)->getXSpeed()!=xspeed) || ((*tobj)->getYSpeed()!=yspeed) || ((*tobj)->getRotationSpeed()!=rspeed) || ((*tobj)->getMotionAccel()!=maccel) || ((*tobj)->getRotationAccel()!=raccel) ) { // // TuioObject *updateObject = new TuioObject((long)s_id,(*tobj)->getSymbolID(),xpos,ypos,angle); // updateObject->update(xpos,ypos,angle,xspeed,yspeed,rspeed,maccel,raccel); // frameObjects.push_back(updateObject); // // } // unlockObjectList(); // // } // else if (cmd=="alive") { // // aliveObjectList.clear(); // for(int i = 1 ; i < message.size() ; i++){ // aliveObjectList.push_back(message[i].getInt32()); // } // // } else if (cmd == "fseq") { // // int32 fseq; // fseq = message[1].getInt32(); // bool lateFrame = false; // if (fseq>0) { // if (fseq>currentFrame) currentTime = TuioTime::getSessionTime(); // if ((fseq>=currentFrame) || ((currentFrame-fseq)>100)) currentFrame = fseq; // else lateFrame = true; // } else if ((TuioTime::getSessionTime().getTotalMilliseconds()-currentTime.getTotalMilliseconds())>100) { // currentTime = TuioTime::getSessionTime(); // } // // if (!lateFrame) { // // lockObjectList(); // //find the removed objects first // for (std::list<TuioObject*>::iterator tobj=objectList.begin(); tobj != objectList.end(); tobj++) { // std::list<long>::iterator iter = find(aliveObjectList.begin(), aliveObjectList.end(), (*tobj)->getSessionID()); // if (iter == aliveObjectList.end()) { // (*tobj)->remove(currentTime); // frameObjects.push_back(*tobj); // } // } // unlockObjectList(); // // for (std::list<TuioObject*>::iterator iter=frameObjects.begin(); iter != frameObjects.end(); iter++) { // TuioObject *tobj = (*iter); // // TuioObject *frameObject = NULL; // switch (tobj->getTuioState()) { // case TUIO_REMOVED: // frameObject = tobj; // frameObject->remove(currentTime); // // for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++) // (*listener)->removeTuioObject(frameObject); // // lockObjectList(); // for (std::list<TuioObject*>::iterator delobj=objectList.begin(); delobj!=objectList.end(); delobj++) { // if((*delobj)->getSessionID()==frameObject->getSessionID()) { // objectList.erase(delobj); // break; // } // } // unlockObjectList(); // break; // case TUIO_ADDED: // // lockObjectList(); // frameObject = new TuioObject(currentTime,tobj->getSessionID(),tobj->getSymbolID(),tobj->getX(),tobj->getY(),tobj->getAngle()); // objectList.push_back(frameObject); // unlockObjectList(); // // for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++) // (*listener)->addTuioObject(frameObject); // // break; // default: // // lockObjectList(); // std::list<TuioObject*>::iterator iter; // for (iter=objectList.begin(); iter != objectList.end(); iter++) { // if((*iter)->getSessionID()==tobj->getSessionID()) { // frameObject = (*iter); // break; // } // } // if(iter==objectList.end()) break; // // if ( (tobj->getX()!=frameObject->getX() && tobj->getXSpeed()==0) || (tobj->getY()!=frameObject->getY() && tobj->getYSpeed()==0) ) // frameObject->update(currentTime,tobj->getX(),tobj->getY(),tobj->getAngle()); // else // frameObject->update(currentTime,tobj->getX(),tobj->getY(),tobj->getAngle(),tobj->getXSpeed(),tobj->getYSpeed(),tobj->getRotationSpeed(),tobj->getMotionAccel(),tobj->getRotationAccel()); // unlockObjectList(); // // for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++) // (*listener)->updateTuioObject(frameObject); // // } // delete tobj; // } // // for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++) // (*listener)->refresh(currentTime); // // } else { // for (std::list<TuioObject*>::iterator iter=frameObjects.begin(); iter != frameObjects.end(); iter++) { // TuioObject *tobj = (*iter); // delete tobj; // } // } // // frameObjects.clear(); // } } }
void testApp::touchMoved(TuioCursor & tcur){ touchPoints.push_back( ofPoint(tcur.getX()*ofGetWidth(), tcur.getY()*ofGetHeight()) ); }
void VRTUIODevice::appendNewInputEventsSinceLastCall(VRDataQueue *inputEvents) { // Send out events for TUIO "cursors" by polling the TuioClient for the current state std::list<TuioCursor*> cursorList = _tuioClient->getTuioCursors(); _tuioClient->lockCursorList(); // Send "button" up events for cursors that were down last frame, but are now up. std::vector<int> downLast; for (std::set<int>::iterator downLast_it = _cursorsDown.begin(); downLast_it!= _cursorsDown.end(); ++downLast_it ) { downLast.push_back(*downLast_it); } for (int i=0;i<downLast.size();i++) { bool stillDown = false; for (std::list<TuioCursor*>::iterator iter = cursorList.begin(); iter!=cursorList.end(); iter++) { TuioCursor *tcur = (*iter); if (tcur->getCursorID() == downLast[i]) { stillDown = true; } } if (!stillDown) { std::string event = "Touch_Cursor_Up"; _dataIndex.addData(event + "/Id", downLast[i]); inputEvents->push(_dataIndex.serialize(event)); _cursorsDown.erase(downLast[i]); } } // Send "button" down events for cursors that are new and updated positions for all cursors for (std::list<TuioCursor*>::iterator iter = cursorList.begin(); iter!=cursorList.end(); iter++) { TuioCursor *tcur = (*iter); if (_cursorsDown.find(tcur->getCursorID()) == _cursorsDown.end()) { std::string event = "Touch_Cursor_Down"; _dataIndex.addData(event + "/Id", tcur->getCursorID()); _dataIndex.addData(event + "/XPos", _xScale*tcur->getX()); _dataIndex.addData(event + "/YPos", _yScale*tcur->getY()); inputEvents->push(_dataIndex.serialize(event)); _cursorsDown.insert(tcur->getCursorID()); } if (tcur->getMotionSpeed() > 0.0) { std::string event = "Touch_Cursor_Move"; _dataIndex.addData(event + "/Id", tcur->getCursorID()); _dataIndex.addData(event + "/XPos", _xScale*tcur->getX()); _dataIndex.addData(event + "/YPos", _yScale*tcur->getY()); inputEvents->push(_dataIndex.serialize(event)); } // Can also access several other properties of cursors (speed, acceleration, path followed, etc.) //std::cout << "cur " << tcur->getCursorID() << " (" << tcur->getSessionID() << ") " << tcur->getX() << " " << tcur->getY() // << " " << tcur->getMotionSpeed() << " " << tcur->getMotionAccel() << " " << std::endl; // This is how to access all the points in the path that a cursor follows: //std::list<TuioPoint> path = tuioCursor->getPath(); //if (path.size() > 0) { // TuioPoint last_point = path.front(); // for (std::list<TuioPoint>::iterator point = path.begin(); point!=path.end(); point++) { // last_point.update(point->getX(),point->getY()); // } //} } _tuioClient->unlockCursorList(); }
TuioCursor* TuioManager::addTuioCursor(float x, float y) { sessionID++; int cursorID = (int)cursorList.size(); if ((int)(cursorList.size())<=maxCursorID) { std::list<TuioCursor*>::iterator closestCursor = freeCursorList.begin(); for(std::list<TuioCursor*>::iterator iter = freeCursorList.begin();iter!= freeCursorList.end(); iter++) { if((*iter)->getDistance(x,y)<(*closestCursor)->getDistance(x,y)) closestCursor = iter; } TuioCursor *freeCursor = (*closestCursor); cursorID = (*closestCursor)->getCursorID(); freeCursorList.erase(closestCursor); delete freeCursor; } else maxCursorID = cursorID; TuioCursor *tcur = new TuioCursor(currentFrameTime, sessionID, cursorID, x, y); cursorList.push_back(tcur); updateCursor = true; for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++) (*listener)->addTuioCursor(tcur); if (verbose) std::cout << "add cur " << tcur->getCursorID() << " (" << tcur->getSessionID() << ") " << tcur->getX() << " " << tcur->getY() << std::endl; return tcur; }
void TuioManager::stopUntouchedMovingCursors() { std::list<TuioCursor*> untouched; for (std::list<TuioCursor*>::iterator tuioCursor = cursorList.begin(); tuioCursor!=cursorList.end(); tuioCursor++) { TuioCursor *tcur = (*tuioCursor); if ((tcur->getTuioTime()!=currentFrameTime) && (tcur->isMoving())) { tcur->stop(currentFrameTime); updateCursor = true; if (verbose) std::cout << "set cur " << tcur->getCursorID() << " (" << tcur->getSessionID() << ") " << tcur->getX() << " " << tcur->getY() << " " << tcur->getXSpeed() << " " << tcur->getYSpeed()<< " " << tcur->getMotionAccel() << " " << std::endl; } } }
TuioCursor* TuioServer::addTuioCursor(float x, float y, float z) { sessionID++; int cursorID = (int)cursorList.size(); if (((int)(cursorList.size())<=maxCursorID) && ((int)(freeCursorList.size())>0)) { std::list<TuioCursor*>::iterator closestCursor = freeCursorList.begin(); for(std::list<TuioCursor*>::iterator iter = freeCursorList.begin(); iter!= freeCursorList.end(); iter++) { if((*iter)->getDistance(x,y,z)<(*closestCursor)->getDistance(x,y,z)) closestCursor = iter; } TuioCursor *freeCursor = (*closestCursor); cursorID = (*closestCursor)->getCursorID(); freeCursorList.erase(closestCursor); delete freeCursor; } else maxCursorID = cursorID; TuioCursor *tcur = new TuioCursor(currentFrameTime, sessionID, cursorID, x, y, z); cursorList.push_back(tcur); updateCursor = true; if (verbose) { if (mode3d) { std::cout << "add cur " << tcur->getCursorID() << " (" << tcur->getSessionID() << ") " << tcur->getX() << " " << tcur->getY() << " " << tcur->getZ() << std::endl; } else { std::cout << "add cur " << tcur->getCursorID() << " (" << tcur->getSessionID() << ") " << tcur->getX() << " " << tcur->getY() << std::endl; } } return tcur; }