boost::write_graphviz - How to generate the graph horizontally

Viewed 1833

I'm trying to generate a .dot which displays an horizontal graph with Boost Graph Library.

My code when creating my graph looks like this:

struct VertexP {
    std::string tag;
};

struct EdgeP {
    std::string symbol;
};

struct GraphP{
    std::string orientation;
};

typedef boost::adjacency_list<boost::vecS,
        boost::vecS, boost::directedS,
        VertexP, EdgeP, GraphP> Graph;

GraphP property;
property.orientation = "LR";
Graph graph(property);
// Then fill the graph

The code I'm using to generate the .dot file is something like this:

Graph g = creator.AutomatonToGraph(&automaton);
ofstream dot_file("automaton.dot");
dynamic_properties dp;
dp.property("node_id", get(&VertexP::tag, g));
dp.property("label", get(&VertexP::tag, g));
dp.property("label", get(&EdgeP::symbol, g));

write_graphviz_dp(dot_file, g, dp);

This writes the .dot file perfectly with nodes and edges labels, but my problem is that I want to add the rankdir=LR graph property to the output file. I tried with:

Graph g = creator.AutomatonToGraph(&automaton);
ofstream dot_file("automaton.dot");
dynamic_properties dp;
dp.property("node_id", get(&VertexP::tag, g));
dp.property("label", get(&VertexP::tag, g));
dp.property("label", get(&EdgeP::symbol, g));
dp.property("rankdir", get(&GraphP::orientation, g));

write_graphviz_dp(dot_file, g, dp);

But I get a big chunk of errors starting by this:

/src/lab2.cc:48:55:   required from here
/usr/include/boost/graph/detail/adjacency_list.hpp:2585:29: error: forming reference to void
         typedef value_type& reference;
                             ^~~~~~~~~

I'm really new using BGL, what I'm doing wrong?

1 Answers
Related