我正在尝试使用 OGDF 库和 Sugiyama 布局在 Qt 中布局和可视化代码流图。我使用的版本是 v2020.02,在撰写本文时应该是最新的。
我的问题:
创建节点时,我将它们设置为各种大小,但在调用SugiyamaLayout
算法后,所有节点大小都重置为 20x20(大概是默认值?)。如果我改用另一种算法(例如PlanarizationLayout
),问题就会消失,节点大小会保持其分配的值。我尝试了不同的配置,例如排名、crossMins 和布局,但节点大小不受这些影响。
最小的可重现示例:
//Create graph and attributes
graph_ = new Graph();
GA_ = new GraphAttributes(*graph_, GraphAttributes::nodeGraphics | GraphAttributes::nodeType |
GraphAttributes::nodeLabel | GraphAttributes::nodeStyle | GraphAttributes::edgeGraphics |
GraphAttributes::edgeType | GraphAttributes::edgeArrow);
//Create node and set size
node n = graph_->newNode();
GA_->width(n) = 80; //Or any other dimensions
GA_->height(n) = 40;
//Other nodes and edges omitted
//Create layout
SugiyamaLayout slayout;
slayout.setRanking(new OptimalRanking());
slayout.setCrossMin(new MedianHeuristic());
OptimalHierarchyLayout* ohl = new OptimalHierarchyLayout;
ohl->layerDistance(30.0);
ohl->nodeDistance(25.0);
ohl->weightBalancing(0.8);
slayout.setLayout(ohl);
slayout.call(*GA_);
//Retrieve new node position and size
double x = GA_->x(n);
double y = GA_->y(n);
double w = GA_->width(n); //This always retrieves w*h of 20x20,
double h = GA_->height(n); //no matter what node dimensions were initially set
//Draw graph, etc. (omitted)