#include "graphviz.hpp" #include "workflow_graph.hpp" namespace xios { CGraphviz::CGraphviz() { } /*! * */ void CGraphviz::buildStaticWorkflowGraph() TRY { if (!CWorkflowGraph::mapFieldToFilters.empty()) { CWorkflowGraph::buildStaticWorkflow(); typedef boost::property EdgeProperty; typedef boost::adjacency_list Graph; // Input 1: nodes (=filters) vector& nodes = CWorkflowGraph::filters; const int nbNodes = nodes.size(); // Input 2: edges (=fields) vector& edges = CWorkflowGraph::fields; // Input 3: nodes to edges connectivity vector >& nodesToEdges = CWorkflowGraph::fieldsToFilters; const int nbEdges = nodesToEdges.size(); // Declare a graph object, adding the edges and edge properties Graph g(nbNodes); for (int j = 0; j < nbEdges; ++j) { graph_traits::edge_descriptor e; bool inserted; boost::tie(e, inserted) = boost::add_edge(nodesToEdges[j].first, nodesToEdges[j].second, edges[j], g); } std::for_each(vertices(g).first, vertices(g).second, exercise_vertex(g)); std::map graph_attr, vertex_attr, edge_attr; graph_attr["size"] = "5,5"; graph_attr["rankdir"] = "LR"; graph_attr["ratio"] = "fill"; vertex_attr["shape"] = "record"; vertex_attr["width"] = "2.2"; vertex_attr["fontsize"] = "16"; const std::string filename = "graph.dot"; std::ofstream file (filename.c_str()); boost::write_graphviz(file, g, boost::make_label_writer(&nodes[0]), boost::make_label_writer(get(edge_name, g)), boost::make_graph_attributes_writer(graph_attr, vertex_attr, edge_attr)); } } CATCH }