本文整理汇总了C++中TuioCursor::getDistance方法的典型用法代码示例。如果您正苦于以下问题:C++ TuioCursor::getDistance方法的具体用法?C++ TuioCursor::getDistance怎么用?C++ TuioCursor::getDistance使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TuioCursor
的用法示例。
在下文中一共展示了TuioCursor::getDistance方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: mouseReleased
void SimpleSimulator::mouseReleased(float x, float y) {
//printf("released %f %f\n",x,y);
TuioCursor *cursor = NULL;
float distance = 0.01f;
for (std::list<TuioCursor*>::iterator iter = stickyCursorList.begin(); iter!=stickyCursorList.end(); iter++) {
TuioCursor *tcur = (*iter);
float test = tcur->getDistance(x,y);
if (test<distance) {
distance = test;
cursor = tcur;
}
}
if (cursor!=NULL) {
activeCursorList.remove(cursor);
return;
}
distance = 0.01f;
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) {
activeCursorList.remove(cursor);
tuioServer->removeTuioCursor(cursor);
}
}
示例2: mouseDragged
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);
}
示例3: mousePressed
void SimpleSimulator::mousePressed(float x, float y) {
//printf("pressed %f %f\n",x,y);
TuioCursor *match = NULL;
float distance = 0.01f;
for (std::list<TuioCursor*>::iterator iter = stickyCursorList.begin(); iter!=stickyCursorList.end(); iter++) {
TuioCursor *tcur = (*iter);
float test = tcur->getDistance(x,y);
if ((test < distance) && (test < 8.0f/width)) {
distance = test;
match = tcur;
}
}
Uint8 *keystate = SDL_GetKeyState(NULL);
if ((keystate[SDLK_LSHIFT]) || (keystate[SDLK_RSHIFT])) {
if (match!=NULL) {
std::list<TuioCursor*>::iterator joint = std::find( jointCursorList.begin(), jointCursorList.end(), match );
if( joint != jointCursorList.end() ) {
jointCursorList.erase( joint );
}
stickyCursorList.remove(match);
activeCursorList.remove(match);
tuioServer->removeTuioCursor(match);
} else {
TuioCursor *cursor = tuioServer->addTuioCursor(x,y);
stickyCursorList.push_back(cursor);
activeCursorList.push_back(cursor);
}
} else if ((keystate[SDLK_LCTRL]) || (keystate[SDLK_RCTRL])) {
if (match!=NULL) {
std::list<TuioCursor*>::iterator joint = std::find( jointCursorList.begin(), jointCursorList.end(), match );
if( joint != jointCursorList.end() ) {
jointCursorList.remove( match );
} else jointCursorList.push_back(match);
}
} else {
if (match==NULL) {
TuioCursor *cursor = tuioServer->addTuioCursor(x,y);
activeCursorList.push_back(cursor);
} else activeCursorList.push_back(match);
}
}
示例4: updateTuio
void TuioKinect::updateTuio() {
TuioTime frameTime = TuioTime::getSessionTime();
tuioServer->initFrame(frameTime);
std::vector<ofxCvBlob>::iterator blob;
// printf("Blobs: %d\n", contourFinder.blobs.size());
for (blob=contourFinder.blobs.begin(); blob!= contourFinder.blobs.end(); blob++) {
float xpos = (*blob).centroid.x;
float ypos = (*blob).centroid.y;
TuioPoint tp(xpos/kinect.width,ypos/kinect.height);
//if ((tp.getY() > 0.8) && (tp.getX()>0.25) && (tp.getX()<0.75)) continue;
TuioCursor *tcur = tuioServer->getClosestTuioCursor(tp.getX(),tp.getY());
if ((tcur==NULL) || (tcur->getDistance(&tp)>0.2)) {
tcur = tuioServer->addTuioCursor(tp.getX(), tp.getY());
updateKalman(tcur->getCursorID(),tcur);
} else {
TuioPoint kp = updateKalman(tcur->getCursorID(),tp);
tuioServer->updateTuioCursor(tcur, kp.getX(), kp.getY());
}
}
tuioServer->stopUntouchedMovingCursors();
std::list<TuioCursor*> dead_cursor_list = tuioServer->getUntouchedCursors();
std::list<TuioCursor*>::iterator dead_cursor;
for (dead_cursor=dead_cursor_list.begin(); dead_cursor!= dead_cursor_list.end(); dead_cursor++) {
clearKalman((*dead_cursor)->getCursorID());
}
tuioServer->removeUntouchedStoppedCursors();
tuioServer->commitFrame();
}
示例5: update
//--------------------------------------------------------------
void TuioKinect::update()
{
ofBackground(10, 10, 10);
//Kinect + Feeds updating
kinect.update();
grayImage.setFromPixels(kinect.getDepthPixels(), kinect.width, kinect.height);
grayImage.mirror(false, true);
unsigned char * pix = grayImage.getPixels();
int numPixels = grayImage.getWidth() * grayImage.getHeight()-1;
depthImage.setFromPixels(pix, kinect.width, kinect.height);
depthImage.flagImageChanged();
colorImage.setFromPixels(kinect.getPixels(), kinect.width, kinect.height);
colorImage.mirror(false, true);
colorImage.convertToGrayscalePlanarImage(redImage, 0);
for(int i = numPixels; i > 0 ; i--){
if( pix[i] > nearThreshold && pix[i] < farThreshold ){
pix[i] = 255;
}else{
pix[i] = 0;
}
}
//update the cv image
grayImage.flagImageChanged();
unsigned char * red = redImage.getPixels();
numPixels = redImage.getWidth() * redImage.getHeight();
//
contourFinder.findContours(grayImage, 900, (kinect.width*kinect.height)/8, 20, false);
TuioTime frameTime = TuioTime::getSessionTime();
tuioServer->initFrame(frameTime);
int numBlobs = contourFinder.blobs.size() ;
int count = 0 ;
if ( numBlobs == 0 )
holdingLength = 0 ;
//detect all blobs
std::vector<ofxCvBlob>::iterator blob;
for (blob=contourFinder.blobs.begin(); blob!= contourFinder.blobs.end(); blob++)
{
float xpos = (*blob).centroid.x;
float ypos = (*blob).centroid.y;
TuioPoint tp(xpos/kinect.width,ypos/kinect.height);
TuioCursor *tcur = tuioServer->getClosestTuioCursor(tp.getX(),tp.getY());
//Adjust here to change minumum distance for new points
if ((tcur==NULL) || (tcur->getDistance(&tp)>0.1)) {
tcur = tuioServer->addTuioCursor(tp.getX(), tp.getY());
updateKalman(tcur->getCursorID(),tcur);
} else {
TuioPoint kp = updateKalman(tcur->getCursorID(),tp);
tuioServer->updateTuioCursor(tcur, kp.getX(), kp.getY());
}
xpos = tp.getX() * ofGetWidth() ;
ypos = tp.getY() * ofGetHeight() ;
if ( numBlobs < 3 )
{
kCursors[count].x = xpos ;
kCursors[count].y = ypos ;
}
count++ ;
}
float strength = 5.0f;
float damping = 0.5f;
if ( numBlobs == 2 )
{
if ( holdingLength < 40 )
holdingLength++ ;
float holdingRatio = 0.05f + (float)holdingLength/40.0f ;
float minDis = 100.0f;
ofPoint c1 = kCursors[1] ;
ofPoint c0 = kCursors[0] ;
for(int i=0; i< customParticles.size() ; i++)
{
CustomParticle& p = customParticles[i] ;
if ( i % 2 == 0 )
{
p.addAttractionPoint( c0.x, c0.y, (float)holdingLength*1.05 * strength, minDis);
}
else
//.........这里部分代码省略.........