verticalAlignment method
void
verticalAlignment()
Implementation
void verticalAlignment(Map<Node?, Node?> root, Map<Node?, Node?> align, Map<int,int> type1Conflicts,
bool downward, bool leftToRight) {
// for all Level;
var layersa = downward ? layers : layers.reversed;
for (var layer in layersa) {
// As with layers, we need a reversed iterator for blocks for different directions
var nodes = leftToRight ? layer : layer.reversed;
// Do an initial placement for all blocks
var r = leftToRight ? -1 : double.infinity;
for (var v in nodes) {
final adjNodes = getAdjNodes(v, downward);
if (adjNodes.isNotEmpty) {
var midLevelValue = adjNodes.length / 2;
// Calculate medians
final medians = adjNodes.length % 2 == 1
? [adjNodes[midLevelValue.floor()]]
: [adjNodes[midLevelValue.toInt() - 1], adjNodes[midLevelValue.toInt()]];
// For all median neighbours in direction of H
for (var m in medians) {
final posM = positionOfNode(m);
// if segment (u,v) not marked by type1 conflicts AND ...;
if (align[v] == v &&
type1Conflicts[positionOfNode(v)] != posM &&
(leftToRight ? r < posM : r > posM)) {
align[m] = v;
root[v] = root[m];
align[v] = root[v];
r = posM;
}
}
}
}
}
}