//-------------------------------------------------------------- void testApp::updateApp(){ ofPoint * pos; Trail *trail; bool bInsideLetter; vector<ofPoint> growings; for(int i=0; i<trails.size(); i++){ trail = &trails[i]; pos = &trail->position; // If trail isn't in a letter yet if(trail->letterId == -1) { trail->update(screenBounds); if(!ofInsidePoly( trail->position, screenBounds.getVertices() )){ trails.erase(trails.begin()+i); i--; continue; } // look if it has found a letter now for(int j=0; j<letters.size(); j++){ if( ofInsidePoly( *pos, letters[j].getVertices() ) ) { trail->letterId = j; } } } else { trail->update(letters[trail->letterId]); if (trails[i].bActive) { growings.push_back(trails[i].position); } } } triangle.clear(); if(growings.size()>=3) triangle.triangulate( growings, growings.size() ); }
bool SmartPoly::containsPoint(int x, int y){ return ofInsidePoly(x, y, controlPoints); //TODO: this is inaccurate for circles }
bool SmartPoly::containsPoint(const ofPoint p){ return ofInsidePoly(p.x, p.y, controlPoints); //TODO: this is inaccurate for circles }
//-------------------------------------------------------------- void testApp::mousePressed(int x, int y, int button){ if(modificar) { switch(button) { case 0: for(int i=0;i<nAreas;i++) { int dpaso = 0; for(int j=0;j<areas[i].vCapturados;j++) { if(ofDist(mouseX,mouseY,areas[i].v_triang[j].x,areas[i].v_triang[j].y)<rad_seleccion) { aSeleccion = i; pSeleccion = j; dpaso=1; } } if(dpaso==0) { if(ofInsidePoly(mouseX,mouseY,areas[i].v_triang)) { mover_poli = true; aSeleccion = i; cout<<"Moviendo area "<<i<<endl; mover_con_mouse.assign(areas[i].vCapturados,ofPoint()); for(int k=0;k<areas[i].vCapturados;k++) mover_con_mouse[k] = ofPoint(areas[i].v_triang[k].x-x,areas[i].v_triang[k].y-y); break; } } } break; case 2: for(int i=0;i<nAreas;i++) { for(int j=0;j<areas[i].vCapturados;j++) { if(ofDist(mouseX,mouseY,areas[i].v_triang[j].x,areas[i].v_triang[j].y)<rad_seleccion) { vert_movidos.push_back(ofPoint(i,j)); } } } break; } cout<<"Vertices movidos = "<<vert_movidos.size()<<endl; } if(modificar_area) { switch(button) { case 0: for(int i=0;i<nAreas;i++) { for(int j=0;j<areas[i].vCapturados;j++) if(ofDist(mouseX,mouseY,areas[i].vertices[j].x,areas[i].vertices[j].y)<rad_seleccion) { aSeleccion = i; pSeleccion = j; } } break; case 2: for(int i=0;i<nAreas;i++) { for(int j=0;j<areas[i].vCapturados;j++) { if(ofDist(mouseX,mouseY,areas[i].vertices[j].x,areas[i].vertices[j].y)<rad_seleccion) { vert_movidos.push_back(ofPoint(i,j)); } } } break; } } if(borrar) { for(int i=0;i<nAreas;i++) { if(ofInsidePoly(mouseX,mouseY,areas[i].v_triang)) { areas[i].vida = false; borrar = false; cout<<"Borrar = 0"<<endl; break; } } } }