// write cluster layout with attributes static void write_ogml_layout(const ClusterGraphAttributes &A, ostream &os) { const ClusterGraph &C = A.constClusterGraph(); GraphIO::indent(os,2) << "<layout>\n"; GraphIO::indent(os,3) << "<styles>\n"; for(cluster c : C.clusters) { if(c != C.rootCluster()) { GraphIO::indent(os,4) << "<nodeStyle idRef=\"c" << c->index() << "\">\n"; GraphIO::indent(os,5) << "<location x=\"" << A.x(c) << "\" y=\"" << A.y(c) << "\" />\n"; GraphIO::indent(os,5) << "<shape type=\"rect\" width=\"" << A.width(c) << "\" height=\"" << A.height(c) << "\" />\n"; GraphIO::indent(os,5) << "<fill color=\"" << A.fillColor(c) << "\"" << " pattern=\"" << fillPatternToOGML(A.fillPattern(c)) << "\" patternColor=\"" << A.fillBgColor(c) << "\" />\n"; GraphIO::indent(os,5) << "<line type=\"" << edgeStyleToOGML(A.strokeType(c)) << "\" width=\"" << A.strokeWidth(c) << "\" color=\"" << A.strokeColor(c) << "\" />\n"; GraphIO::indent(os,4) << "</nodeStyle>\n"; } } write_ogml_layout_nodes_edges(A,os); GraphIO::indent(os,3) << "</styles>\n"; GraphIO::indent(os,2) << "</layout>\n"; }
// write cluster structure with attributes static void write_ogml_graph(const ClusterGraphAttributes &A, ostream &os) { GraphIO::indent(os,2) << "<structure>\n"; write_ogml_graph(A, A.constClusterGraph().rootCluster(), 0, os); write_ogml_graph_edges(A, os); GraphIO::indent(os,2) << "</structure>\n"; }
bool GraphIO::writeGEXF(const ClusterGraphAttributes &CA, std::ostream &out) { const ClusterGraph &C = CA.constClusterGraph(); gexf::writeHeader(out, true); gexf::writeCluster(out, 1, C, &CA, C.rootCluster()); gexf::writeFooter(out); return true; }
void FMMMLayout::call(ClusterGraphAttributes &GA) { const Graph &G = GA.constGraph(); //compute depth of cluster tree, also sets cluster depth values const ClusterGraph &CG = GA.constClusterGraph(); int cdepth = CG.treeDepth(); EdgeArray<double> edgeLength(G); //compute lca of end vertices for each edge edge e; forall_edges(e, G) { edgeLength[e] = cdepth - CG.clusterDepth(CG.commonCluster(e->source(),e->target())) + 1; OGDF_ASSERT(edgeLength[e] > 0) }
bool GraphIO::writeDOT(const ClusterGraphAttributes &CA, std::ostream &out) { const Graph &G = CA.constGraph(); const ClusterGraph &C = CA.constClusterGraph(); int id = 1; // Assign a list of edges for each cluster. Perhaps usage of std::vector // here needs reconsideration - vector is fast but usage of STL iterators // is ugly without C++11 for-each loop. ClusterArray< std::vector<edge> > edgeMap(C); for(edge e : G.edges) { const node s = e->source(), t = e->target(); edgeMap[C.commonCluster(s, t)].push_back(e); } return dot::writeCluster(out, 0, edgeMap, C, &CA, C.rootCluster(), id); }