Пример #1
0
//--------------------------------------------------------------
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() );
}
Пример #2
0
bool SmartPoly::containsPoint(int x, int y){
    return ofInsidePoly(x, y, controlPoints);
    //TODO: this is inaccurate for circles
}
Пример #3
0
bool SmartPoly::containsPoint(const ofPoint p){
    return ofInsidePoly(p.x, p.y, controlPoints);
    //TODO: this is inaccurate for circles
}
Пример #4
0
//--------------------------------------------------------------
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;
			}
		}
	}
}