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; } }
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; }