positionNodes method
void
positionNodes(
- Graph graph
)
Implementation
void positionNodes(Graph graph) {
var doesNeedReverseOrder = needReverseOrder();
var offset = getOffset(graph, doesNeedReverseOrder);
var nodes = sortByLevel(graph, doesNeedReverseOrder);
var firstLevel = getNodeData(nodes.first)?.depth ?? 0;
var localMaxSize = findMaxSize(filterByLevel(nodes, firstLevel));
var currentLevel = doesNeedReverseOrder ? firstLevel : 0;
var globalPadding = 0.0;
var localPadding = 0.0;
nodes.forEach((node) {
final depth = getNodeData(node)?.depth ?? 0;
if (depth != currentLevel) {
if (doesNeedReverseOrder) {
globalPadding -= localPadding;
} else {
globalPadding += localPadding;
}
localPadding = 0.0;
currentLevel = depth;
localMaxSize = findMaxSize(filterByLevel(nodes, currentLevel));
}
final height = node.height;
final width = node.width;
switch (configuration.orientation) {
case BuchheimWalkerConfiguration.ORIENTATION_TOP_BOTTOM:
if (height > minNodeHeight) {
final diff = height - minNodeHeight;
localPadding = max(localPadding, diff);
}
break;
case BuchheimWalkerConfiguration.ORIENTATION_BOTTOM_TOP:
if (height < localMaxSize.height) {
var diff = localMaxSize.height - height;
node.position -= Offset(0, diff);
localPadding = max(localPadding, diff);
}
break;
case BuchheimWalkerConfiguration.ORIENTATION_LEFT_RIGHT:
if (width > minNodeWidth) {
final diff = width - minNodeWidth;
localPadding = max(localPadding, diff);
}
break;
case BuchheimWalkerConfiguration.ORIENTATION_RIGHT_LEFT:
if (width < localMaxSize.width) {
var diff = localMaxSize.width - width;
node.position -= Offset(0, diff);
localPadding = max(localPadding, diff);
}
}
node.position = getPosition(node, globalPadding, offset);
});
}