static void gv_to_gml(Agraph_t* G, FILE* outFile) { Agnode_t* n; Agedge_t* e; fprintf (outFile, "graph [\n version 2\n"); if (agisdirected(G)) fprintf (outFile, " directed 1\n"); else fprintf (outFile, " directed 0\n"); emitGraphAttrs (G, outFile); /* FIX: Not sure how to handle default attributes or subgraphs */ for (n = agfstnode(G); n; n = agnxtnode (G, n)) { emitNode (G, n, outFile); } for (n = agfstnode(G); n; n = agnxtnode (G, n)) { for (e = agfstout(G, n); e; e = agnxtout (G, e)) { emitEdge (G, e, outFile); } } fprintf (outFile, "]\n"); }
void BoxConvex::getFeatures(const MatrixF& mat,const VectorF& n, ConvexFeature* cf) { cf->material = 0; cf->object = mObject; S32 v = 0; v += (n.x >= 0)? 1: 0; v += (n.y >= 0)? 2: 0; v += (n.z >= 0)? 4: 0; PlaneF plane; plane.set(getVertex(v),n); // Emit vertex and edge S32 mask = 0; Corner& corner = sCorner[v]; mask |= isOnPlane(getVertex(corner.a),plane)? 1: 0; mask |= isOnPlane(getVertex(corner.b),plane)? 2: 0; mask |= isOnPlane(getVertex(corner.c),plane)? 4: 0; switch(mask) { case 0: { cf->mVertexList.increment(); mat.mulP(getVertex(v),&cf->mVertexList.last()); break; } case 1: emitEdge(v,corner.a,mat,cf); break; case 2: emitEdge(v,corner.b,mat,cf); break; case 4: emitEdge(v,corner.c,mat,cf); break; case 1 | 2: emitFace(corner.ab,mat,cf); break; case 2 | 4: emitFace(corner.bc,mat,cf); break; case 1 | 4: emitFace(corner.ac,mat,cf); break; } }
static void emitGraph (FILE* fp, maze* mp, int n_edges, route* route_list, epair_t es[]) { int i; boxf bb, absbb; box bbox; absbb.LL.x = absbb.LL.y = MAXDOUBLE; absbb.UR.x = absbb.UR.y = -MAXDOUBLE; fprintf (fp, "%s", prolog2); fprintf (fp, "%d %d translate\n", TRANS, TRANS); fputs ("0 0 1 setrgbcolor\n", fp); for (i = 0; i < mp->ngcells; i++) { bb = mp->gcells[i].bb; fprintf (fp, "%f %f %f %f node\n", bb.LL.x, bb.LL.y, bb.UR.x, bb.UR.y); } for (i = 0; i < n_edges; i++) { absbb = emitEdge (fp, es[i].e, route_list[i], mp, i, absbb); } fputs ("0.8 0.8 0.8 setrgbcolor\n", fp); for (i = 0; i < mp->ncells; i++) { bb = mp->cells[i].bb; fprintf (fp, "%f %f %f %f cell\n", bb.LL.x, bb.LL.y, bb.UR.x, bb.UR.y); absbb.LL.x = MIN(absbb.LL.x, bb.LL.x); absbb.LL.y = MIN(absbb.LL.y, bb.LL.y); absbb.UR.x = MAX(absbb.UR.x, bb.UR.x); absbb.UR.y = MAX(absbb.UR.y, bb.UR.y); } bbox.LL.x = absbb.LL.x + TRANS; bbox.LL.y = absbb.LL.y + TRANS; bbox.UR.x = absbb.UR.x + TRANS; bbox.UR.y = absbb.UR.y + TRANS; fprintf (fp, epilog2, bbox.LL.x, bbox.LL.y, bbox.UR.x, bbox.UR.y); }