void WriteComponentsAlongPath(const Graph& g, Path<typename Graph::EdgeId> path, const string& folder_name, shared_ptr<GraphColorer<Graph>> colorer, const GraphLabeler<Graph> &labeler) { auto edge_colorer = make_shared<CompositeEdgeColorer<Graph>>("black"); edge_colorer->AddColorer(colorer); edge_colorer->AddColorer(make_shared<SetColorer<Graph>>(g, path.sequence(), "green")); shared_ptr<GraphColorer<Graph>> resulting_colorer = make_shared<CompositeGraphColorer<Graph>>(colorer, edge_colorer); shared_ptr<GraphSplitter<Graph>> rs = ReliableSplitterAlongPath<Graph>(g, path); auto filter = make_shared<omnigraph::SmallComponentFilter<Graph>>(g, 3); shared_ptr<GraphSplitter<Graph>> splitter = make_shared<omnigraph::CondensingSplitterWrapper<Graph>>(rs, filter); WriteComponents<Graph>(g, folder_name, splitter, resulting_colorer, labeler); }
void VisualizeNontrivialComponentAutoInc( const Graph& g, const set<typename Graph::EdgeId>& edges, const string& folder, const GraphLabeler<Graph>& labeler, shared_ptr<visualization::GraphColorer<Graph>> colorer) { static size_t cnt = 0; auto edge_colorer = make_shared<visualization::CompositeEdgeColorer<Graph>>("black"); edge_colorer->AddColorer(colorer); edge_colorer->AddColorer(make_shared<visualization::SetColorer<Graph>>(g, edges, "green")); // shared_ptr<visualization::GraphColorer<Graph>> auto resulting_colorer = make_shared<visualization::CompositeGraphColorer<Graph>>(colorer, edge_colorer); if (edges.size() > 1) { set<typename Graph::VertexId> vertices; for (auto e : edges) { vertices.insert(g.EdgeStart(e)); vertices.insert(g.EdgeEnd(e)); } visualization::WriteComponent( ComponentCloser<Graph>(g, 0).CloseComponent(GraphComponent<Graph>(g, vertices.begin(), vertices.end())), folder + ToString(cnt++) + ".dot", colorer, labeler); } }