Show last authors
1 Crossing minimization is hard to get right and hard to understand once written. Case in point is our layer sweep crossing minimizer, that implements layer sweep crossing minimization in a monolithic bunch of some 1,200 lines of gloriously hard-to-understand code. (at the time of writing) A new structure is required!
2
3 [[image:attach:class_diagram.png]]
4
5 The new structure factors out much of what can possibly be factored out:
6
7 * {{code language="none"}}LayerSweepCrossingMinimizer{{/code}} is still the main class and implements the layer-sweep approach to crossing minimization. However, it does not know anymore how to do the actual crossing minimization step for a given pair of layers. However, it implements the cross counting algorithms, since these are not affected by the actual crossing minimization algorithm used.
8 * (% style="line-height: 1.4285715;" %)An {{code language="none"}}ICrossingMinimizationHeuristic{{/code}} is used to determine the ordering of a given set of nodes. The result is expected to adhere to any constraints, such as node successor constraints and layout unit constraints. The usual heuristic would be the {{code language="none"}}BarycenterHeuristic{{/code}}.
9 * The {{code language="none"}}IPortDistributor{{/code}} is used by the {{code language="none"}}LayerSweepCrossingMinimizer{{/code}} to calculate port ranks needed to determine node barycenters, and to handle the final port distribution. The standard implementation is the {{code language="none"}}NodeRelativePortDistributor{{/code}}. We're planning to add a {{code language="none"}}SimplePortDistributer{{/code}} as well that calculates port ranks as KLoDD did back in the day.
10 * If a heuristic doesn't know how to handle constraints, it can make use of an {{code language="none"}}IConstraintResolver{{/code}} to resolve any constraints after it has determined an initial node ordering. The standard implementation is the {{code language="none"}}ForsterConstraintResolver{{/code}}, which implements a constraint resolving heuristic proposed by Michael Forster.
11 * {{code language="none"}}NodeGroup{{/code}}s are used by the {{code language="none"}}CompoundGraphLayerCrossingMinimizer{{/code}} to encapsulate sets of nodes contained in a single compound node, to treat them as an atomic group with fixed ordering.