void ofxPuppetInteractive::mousePressed(ofMouseEventArgs& e){
	float distance = getNearestVertex(deformedMesh, ofVec2f(e.x, e.y), selectedVertex);
	if(distance < selectionRadius) {
		if(e.button == 0) {
			selected = true;
			setControlPoint(selectedVertex);
		} else if(e.button == 2) {
			if(controlPoints.find(selectedVertex) != controlPoints.end()) {
				removeControlPoint(selectedVertex);
			}
		}
	} else {
		selected = false;
	}
}
示例#2
0
Routes* getRoutes(Graph* graph, int vertex)
{
	if (graph->vertices > 32)
	{
		return NULL;
	}
	Routes *routes = createRoutes(graph->vertices);
	unsigned int endMask = 0;
	endMask = ~endMask;
	endMask >>= (32 - graph->vertices);
	unsigned int visited = 0;
	routes->weight[vertex] = 0;
	routes->from[vertex] = vertex;
	int current = vertex;
	while ((visited != endMask) && (current != 0))
	{
		int i = current;
		for (int j = 1; j <= graph->vertices; j++)
		{
			if (graph->a[i][j] == 0)
			{
				continue;
			}
			int weight = routes->weight[i] + graph->a[i][j];
			unsigned int jMask = 1;
			jMask <<= j - 1;
			if (!(jMask & visited) && ((weight < routes->weight[j]) || (routes->weight[j] == 0)))
			{
				routes->weight[j] = weight;
				routes->from[j] = current;
			}
		}
		unsigned int mask = 1;
		mask <<= current - 1;
		visited |= mask;
		current = getNearestVertex(routes, visited);
	}
	return routes;
}