我有一个基于此example的代码,可以使用C ++生成点文件以将其转换为png文件。
我的问题如下:
我的点文件有时包含相同的边缘,因为它们是自动生成的。我希望能够将相同的边缘分组。我在点文件中的“ digraph G”之前添加了关键字“ strict”,并且可以正常工作。但是,我不想编辑点文件,而是在我的C ++软件中完成。在使用write_graphviz_dp()生成我的点文件时,boost中是否建议使用任何功能来添加此关键字?
下面是代码示例:
#include <boost/graph/adj_list_serialize.hpp>
#include <boost/graph/graphviz.hpp>
#include <boost/property_map/function_property_map.hpp>
#include <fstream>
using namespace boost;
struct VertexP { std::string tag; };
struct EdgeP { std::string symbol; };
struct GraphP { std::string orientation; };
typedef adjacency_list<vecS, vecS, directedS, VertexP, EdgeP, GraphP> Graph;
int main() {
Graph g(GraphP{"LR"});
// Then fill the graph
add_edge(
add_vertex(VertexP{ "tag1" }, g),
add_vertex(VertexP{ "tag2" }, g),
EdgeP{ "symbol" }, g
);
add_edge(
add_vertex(VertexP{ "tag1" }, g),
add_vertex(VertexP{ "tag2" }, g),
EdgeP{ "symbol" }, g
);
{
std::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", boost::make_constant_property<Graph*>(std::string("LR")));
dp.property("dummy", boost::make_function_property_map<Graph*>([](Graph const* g) { return g->m_property->orientation; }));
write_graphviz_dp(dot_file, g, dp);
}
}
此代码提供了以下点文件:
digraph G {
dummy=LR;
rankdir=LR;
tag2 [label=tag2];
tag1 [label=tag1];
tag2 [label=tag2];
tag1 [label=tag1];
tag1->tag2 [label=symbol];
tag1->tag2 [label=symbol];
}
非常感谢您的帮助。