I'm attempting to layout and visualise a code flow graph in Qt using the OGDF library and the Sugiyama layout. The version I'm using is v2020.02, which should be the latest at the time of writing.
My issue:
When creating nodes, I set them to various sizes, but after calling the SugiyamaLayout
algorithm all node sizes are reset to 20x20 (presumably the default?).
If I use another algorithm (such as PlanarizationLayout
) instead, the issue disappears and node sizes keep their assigned values.
I tried different configurations, such as rankings, crossMins and layouts, but the node size is not affected by those.
Minimal reproducible example:
//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)