Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Preconditions
  • No node is assigned to a layer yet.
Postconditions
  • The graph is now cycle-free. Still, no node is assigned to a layer yet.

Remarks

  • All implementations of phase one must include a dependency on the ReversedEdgeRestorer, to be included after phase five.
Implementations
  • GreedyCycleBreaker. Uses a greedy approach to cycle-breaking, inspired by 
    • Peter Eades, Xuemin Lin, W. F. Smyth, A fast and effective heuristic for the feedback arc set problem. Information Processing Letters 47(6), pp. 319-323, 1993.
  • InteractiveCycleBreaker. Detects feedback edges according to the current layout, hence it reacts to the user's placement.

Phase 2: Layering

The second phase assigns nodes to layers. (also called ranks in some papers) Nodes in the same layer are assigned the same x coordinate. (give or take) The problem to solve here is to assign each node x a layer i such that each successor of x is in a layer j>i. The only exception are self-loops, that may or may not be supported by later phases.

...

Preconditions
  • The graph is cycle-free.
  • The nodes have not been layered yet.
Postconditions
  • The graph has a layering.
Remarks
  • Implementations should usually include a dependency on the LayerConstraintHandler, unless they already adhere to layer constraints themselves.
Implementations
  • LongestPathLayerer. Layers nodes according to the longest paths between them. Very simple, and doesn't usually give the best results.
  • NetworkSimplexLayerer. A way more sophisticated algorithm whose results are usually very good, inspired by
    • Emden R. Gansner, Eleftherios Koutsofios, Stephen C. North, Kiem-Phong Vo, A technique for drawing directed graphs. Software Engineering 19(3), pp. 214-230, 1993.

  • InteractiveLayerer. Detects layers according to the current layout, hence it reacts to the user's placement.

Phase 3: Crossing Reduction

...

Preconditions
  • The graph has a proper layering. (except for self-loops)
  • Node orders are fixed.
  • Port positions are fixed.
  • An implementation may allow in-layer connections.
  • An implementation may require node margins to be set.
Postconditions
  • Each node is assigned a y coordinate such that no two nodes overlap.
  • The height of each layer is set.
  • The height of the graph is set to the maximal layer height.
Remarks
  • Support for in-layer connections may be required to be able to handle certain problems. (odd port sides, for instance)
  • If node margins are supported, the NodeMarginCalculator can compute them.
  • Port positions can be fixed by using the PortPositionProcessor.
Implementations 
  • LinearSegmentsNodePlacer. Builds linear segments of nodes that should have the same y coordinate and tries to respect those linear segments. Linear segments are placed according to a barycenter heuristic. Inspired by
    • Georg Sander, A fast heuristic for hierarchical Manhattan layout. In Proceedings of the Symposium on Graph Drawing (GD'95), LNCS vol. 1027, pp. 447-458, Springer, 1996.

  • BKNodePlacer. ??? Inspired by
    • Ulrik Brandes and Boris Köpf, Fast and simple horizontal coordinate assignment. In Proceedings of the 9th International Symposium on Graph Drawing (GD'01), LNCS vol. 2265, pp. 33-36, Springer, 2002.

Phase 5: Edge Routing

In the last phase, it's time to determine x coordinates for all nodes and route the edges. The routing may support very different kinds of features, such as support for odd port sides, (input ports that are on the node's right side) orthogonal edges, spline edges etc. Often times, the set of features supported by an edge router largely determines the intermediate processors used during the layout process.

Preconditions
  • The graph has a proper layering. (except for self-loops)
  • Nodes are assigned y coordinates.
  • Layer heights are correctly set.
  • An implementation may allow in-layer connections.
Postconditions
  • Nodes are assigned x coordinates.
  • Layer widths are set.
  • The graph's width is set.
  • The bend points of all edges are set.
RemarksNone.
Implementations
  • ComplexSplineRouter.
  • OrthogonalEdgeRouter. Routes edges orthogonally. Supports routing edges going into an eastern port around a node. Tries to minimize the width of the space between each pair of layers used for edge routing. Inspired by
    • Georg Sander, Layout of directed hypergraphs with orthogonal hyperedges. In Proceedings of the 11th International Symposium on Graph Drawing (GD '03), LNCS vol. 2912, pp. 381-386, Springer, 2004.

  • PolylineEdgeRouter. impleSplineEdgeRouterSimplest routing style that just inserts bend points at the position of long edge dummy nodes.
  • SplineEdgeRouter. A simple method for routing the edges with splines. Uses the long edge dummy nodes as reference points for spline calculation.