An orthogonal bus-style edge routing algorithm which combines the large number of edges of complete subgraphs in a concise, tree-like structure that consists of vertical and horizontal line segments.

Namespace: yWorks.yFiles.Layout.Router
Assembly: yWorks.yFilesSilverlight.Algorithms (in yWorks.yFilesSilverlight.Algorithms.dll) Version: 2.4.0.0

Syntax

C#
public class BusRouter : AbstractLayoutStage
Visual Basic
Public Class BusRouter _ Inherits AbstractLayoutStage

Remarks

An orthogonal bus-style edge routing algorithm which combines the large number of edges of complete subgraphs in a concise, tree-like structure that consists of vertical and horizontal line segments. A complete (sub)graph is a set of nodes, in which each node is connected to every other node. The positions of the nodes in a graph are not altered by this algorithm.



In a drawing of this algorithm, each edge path is orthogonal and there are no cycles induced by any two edge paths of the same bus, that is, the combination of all edge routes looks like an orthogonal tree. Besides these strict requirements, the algorithm aims to find routes where shared paths of edges with different end-nodes are drawn on top of each other and form long straight lines, so-called backbone segments. From these backbone segments, short connections of grouped edges branch off to each node (bus connections).

This routing algorithm uses a two-phase process. First, in backbone selection, a set of good initial backbone segments is determined. In routing and recombination, each initial backbone segment is connected to all others and also to each node by using orthogonal edge paths. Then, the set of resulting structures is reduced to the most optimal structure where backbone segments are long and connections to the nodes are short. Note that the calculated paths can join before reaching an initial backbone segment and, thus, establish additional backbone segments. Contrariwise, initial backbone segments of low overall profit are discarded and connections to them are rerouted to other backbone segments.

To determine which edges belong to a common bus, a mapping that assigns a bus ID to each edge must be specified using BusDescriptor s. A data provider holding bus descriptor objects is expected to be registered with the graph using the EdgeDescriptorDpKey look-up key. In the absence of an individual bus ID for an edge, a bus consisting only of the single edge is created. Additionally, a bus descriptors allows to mark its associated edge as fixed or movable, which is required for incremental routing, and to specify an optional group ID for an edge's source end and target end, respectively.

Incremental routing means extending or updating an already existing bus-style representation. This can be used to rearrange existing edges or to include additional edges in an existing bus. The paths of edges not marked as fixed by their associated BusDescriptor are calculated anew. The structure induced by the fixed edges must be orthogonal and cycle-free.

Inheritance Hierarchy

System..::..Object
  yWorks.yFiles.Layout..::..AbstractLayoutStage
    yWorks.yFiles.Layout.Router..::..BusRouter

See Also