如何访问boost图拓扑布局中的坐标?

时间:2016-08-20 19:13:53

标签: c++ boost graph

我正在尝试创建一个显示简单图形的应用程序,因为我使用boost :: graph作为底层数据结构,我想使用中提供的布局算法。图书馆也是如此。

这里给出的答案解释了如何在boost库中使用布局算法来布局图的顶点: How does the attractive force of Fruchterman Reingold work with Boost Graph Library

但遗憾的是,它没有解释如何 - 在计算布局之后 - 实际上可以访问顶点的坐标。即使我们得到一个位置向量(或者更确切地说是点),浮点组件也是私有的,所以这并没有帮助。 boost :: graph文档也没有解决这个问题。

那么在应用布局算法后,如何检索每个顶点的简单(X,Y)坐标?

1 个答案:

答案 0 :(得分:2)

在查看了boost图源代码之后,事实证明这并不是那么难。 我们可以使用属性映射迭代PositionsMap和[]运算符来访问坐标:

template<typename Graph, typename Positions>
void print_positions(const Graph &g, const Positions &positions) {
    auto index_map = boost::get(boost::vertex_index, graph);

    using PropertyMap = boost::iterator_property_map<Positions::iterator, decltype(index_map)>;
    PropertyMap position_map(positions.begin(), index_map);
    BGL_FORALL_VERTICES(v, graph, Graph) {
        Position pos = position_map[v];
        cout << v << ": " << pos[0] << "|" << pos[1] << endl;
    }
}