Changes for page The Five Phases

Last modified by Alexander Schulz-Rosengarten on 2023/07/11 10:33

From version 6.1
edited by cds
on 2012/03/24 14:45
Change comment: Linked to further documentation
To version 11.1
edited by uru
on 2013/05/27 08:43
Change comment: There is no comment for this version

Summary

Details

Page properties
Author
... ... @@ -1,1 +1,1 @@
1 -XWiki.cds
1 +XWiki.uru
Content
... ... @@ -10,28 +10,36 @@
10 10  
11 11  |=(((
12 12  Preconditions
13 -)))|=(% class="nohighlight" %)(% class="nohighlight" %)
14 -(((
13 +)))|(((
15 15  * No node is assigned to a layer yet.
16 16  )))
17 -|(% class="highlight" %)(% class="highlight" %)
16 +|=(% class="highlight-grey" data-highlight-colour="grey" %)(% class="highlight-grey" data-highlight-colour="grey" %)
18 18  (((
19 19  Postconditions
20 20  )))|(((
21 21  * The graph is now cycle-free. Still, no node is assigned to a layer yet.
22 22  )))
23 -|(% class="highlight" %)(% class="highlight" %)
22 +|=(% class="highlight-grey" data-highlight-colour="grey" %)(% class="highlight-grey" data-highlight-colour="grey" %)
24 24  (((
25 25  Remarks
26 26  )))|(((
27 27  * All implementations of phase one must include a dependency on the {{code language="none"}}ReversedEdgeRestorer{{/code}}, to be included after phase five.
28 28  )))
29 -|(% class="highlight" %)(% class="highlight" %)
28 +|=(% class="highlight-grey" data-highlight-colour="grey" %)(% class="highlight-grey" data-highlight-colour="grey" %)
30 30  (((
31 31  Implementations
32 32  )))|(((
33 -* {{code language="none"}}GreedyCycleBreaker{{/code}}. Uses a greedy approach to cycle-breaking.
32 +* {{code language="none"}}GreedyCycleBreaker{{/code}}. Uses a greedy approach to cycle-breaking, inspired by \\
33 +** 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.
34 +* {{code language="none"}}InteractiveCycleBreaker.{{/code}} Detects feedback edges according to the current layout, hence it reacts to the user's placement.
34 34  )))
36 +|=(% colspan="1" %)(% colspan="1" %)
37 +(((
38 +Tests
39 +)))|(% colspan="1" %)(% colspan="1" %)
40 +(((
41 +* The graph contains no cycles.
42 +)))
35 35  
36 36  == Phase 2: Layering ==
37 37  
... ... @@ -43,30 +43,43 @@
43 43  
44 44  |=(((
45 45  Preconditions
46 -)))|=(% class="nohighlight" %)(% class="nohighlight" %)
47 -(((
54 +)))|(((
48 48  * The graph is cycle-free.
49 49  * The nodes have not been layered yet.
50 50  )))
51 -|(% class="highlight" %)(% class="highlight" %)
58 +|=(% class="highlight-grey" data-highlight-colour="grey" %)(% class="highlight-grey" data-highlight-colour="grey" %)
52 52  (((
53 53  Postconditions
54 54  )))|(((
55 55  * The graph has a layering.
56 56  )))
57 -|(% class="highlight" %)(% class="highlight" %)
64 +|=(% class="highlight-grey" data-highlight-colour="grey" %)(% class="highlight-grey" data-highlight-colour="grey" %)
58 58  (((
59 59  Remarks
60 60  )))|(((
61 61  * Implementations should usually include a dependency on the {{code language="none"}}LayerConstraintHandler{{/code}}, unless they already adhere to layer constraints themselves.
62 62  )))
63 -|(% class="highlight" %)(% class="highlight" %)
70 +|=(% class="highlight-grey" data-highlight-colour="grey" %)(% class="highlight-grey" data-highlight-colour="grey" %)
64 64  (((
65 65  Implementations
66 66  )))|(((
67 67  * {{code language="none"}}LongestPathLayerer{{/code}}. Layers nodes according to the longest paths between them. Very simple, and doesn't usually give the best results.
68 -* {{code language="none"}}NetworkSimplexLayerer{{/code}}. A way more sophisticated algorithm whose results are usually very good.
75 +* {{code language="none"}}NetworkSimplexLayerer{{/code}}. A way more sophisticated algorithm whose results are usually very good, inspired by\\
76 +** (((
77 +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.
69 69  )))
79 +* {{code language="none"}}InteractiveLayerer.{{/code}} Detects layers according to the current layout, hence it reacts to the user's placement.
80 +)))
81 +|=(% colspan="1" %)(% colspan="1" %)
82 +(((
83 +
84 +)))|(% colspan="1" %)(% colspan="1" %)
85 +(((
86 +* The set of layerless nodes is empty.
87 +* For every edge that points from layer {{code language="none"}}i{{/code}} to layer {{code language="none"}}j, i<j{{/code}} holds.
88 +* No empty layer exists.
89 +* All nodes that existed prior to this phase are assigned to a layer.
90 +)))
70 70  
71 71  == Phase 3: Crossing Reduction ==
72 72  
... ... @@ -76,13 +76,12 @@
76 76  
77 77  |=(((
78 78  Preconditions
79 -)))|=(% class="nohighlight" %)(% class="nohighlight" %)
80 -(((
100 +)))|(((
81 81  * The graph has a proper layering. (except for self-loops)
82 82  * An implementation may allow in-layer connections.
83 83  * Usually, all nodes are required to have a least fixed port sides.
84 84  )))
85 -|(% class="highlight" %)(% class="highlight" %)
105 +|=(% class="highlight-grey" data-highlight-colour="grey" %)(% class="highlight-grey" data-highlight-colour="grey" %)
86 86  (((
87 87  Postconditions
88 88  )))|(((
... ... @@ -89,7 +89,7 @@
89 89  * The order of nodes in each layer is fixed.
90 90  * All nodes have a fixed port order.
91 91  )))
92 -|(% class="highlight" %)(% class="highlight" %)
112 +|=(% class="highlight-grey" data-highlight-colour="grey" %)(% class="highlight-grey" data-highlight-colour="grey" %)
93 93  (((
94 94  Remarks
95 95  )))|(((
... ... @@ -96,12 +96,20 @@
96 96  * If fixed port sides are required, the {{code language="none"}}PortPositionProcessor{{/code}} may be of use.
97 97  * Support for in-layer connections may be required to be able to handle certain problems. (odd port sides, for instance)
98 98  )))
99 -|(% class="highlight" %)(% class="highlight" %)
119 +|=(% class="highlight-grey" data-highlight-colour="grey" %)(% class="highlight-grey" data-highlight-colour="grey" %)
100 100  (((
101 101  Implementations
102 102  )))|(((
103 103  * {{code language="none"}}LayerSweepCrossingMinmizer{{/code}}. Does several sweeps across the layers, minimizing the crossings between each pair of layers using a barycenter heuristic. Supports node successor constraints and layout groups. Node successor constraints require one node to appear before another node. Layout groups specify sets of nodes whose nodes must not be interleaved. See [[this page>>doc:Layer Sweep Crossing Minimization]] for more information.
124 +* {{code language="none"}}InteractiveCrossingMinimizer.{{/code}} Detects the order of nodes according to the current layout, hence it reacts to the user's placement.
104 104  )))
126 +|=(% colspan="1" %)(% colspan="1" %)
127 +(((
128 +Tests
129 +)))|(% colspan="1" %)(% colspan="1" %)
130 +(((
131 +* All nodes remain in their respective layer.
132 +)))
105 105  
106 106  == Phase 4: Node Placement ==
107 107  
... ... @@ -111,8 +111,7 @@
111 111  
112 112  |=(((
113 113  Preconditions
114 -)))|=(% class="nohighlight" %)(% class="nohighlight" %)
115 -(((
142 +)))|(((
116 116  * The graph has a proper layering. (except for self-loops)
117 117  * Node orders are fixed.
118 118  * Port positions are fixed.
... ... @@ -119,7 +119,7 @@
119 119  * An implementation may allow in-layer connections.
120 120  * An implementation may require node margins to be set.
121 121  )))
122 -|(% class="highlight" %)(% class="highlight" %)
149 +|=(% class="highlight-grey" data-highlight-colour="grey" %)(% class="highlight-grey" data-highlight-colour="grey" %)
123 123  (((
124 124  Postconditions
125 125  )))|(((
... ... @@ -127,7 +127,7 @@
127 127  * The height of each layer is set.
128 128  * The height of the graph is set to the maximal layer height.
129 129  )))
130 -|(% class="highlight" %)(% class="highlight" %)
157 +|=(% class="highlight-grey" data-highlight-colour="grey" %)(% class="highlight-grey" data-highlight-colour="grey" %)
131 131  (((
132 132  Remarks
133 133  )))|(((
... ... @@ -135,17 +135,26 @@
135 135  * If node margins are supported, the {{code language="none"}}NodeMarginCalculator{{/code}} can compute them.
136 136  * Port positions can be fixed by using the {{code language="none"}}PortPositionProcessor{{/code}}.
137 137  )))
138 -|(% class="highlight" %)(% class="highlight" %)
165 +|=(% class="highlight-grey" data-highlight-colour="grey" %)(% class="highlight-grey" data-highlight-colour="grey" %)
139 139  (((
140 140  Implementations
141 141  )))|(((
169 +* {{code language="none"}}LinearSegmentsNodePlacer{{/code}}. 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\\
170 +** (((
171 +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.
172 +)))
173 +* {{code language="none"}}BKNodePlacer.{{/code}} Assembles nodes into blocks placed in straight lines in an attempt to minimize the number of edge bends, similar to the linear segments node placer. However, instead of using a barycenter heuristic to place nodes, the placement also tries to minimize the number of edge bends, usually resulting in diagrams that require more space.\\
174 +** (((
175 +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.
176 +)))
177 +)))
178 +|=(% colspan="1" %)(% colspan="1" %)
179 +(((
142 142  
143 -
144 -{{code language="none"}}
145 -LinearSegmentsNodePlacer
146 -{{/code}}
147 -
148 -. 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.
181 +)))|(% colspan="1" %)(% colspan="1" %)
182 +(((
183 +* The nodes of a layer are strictly ordered with regards to their y coordinate.
184 +* Any two nodes of a layer do not overlap with regards to their bounding box (height + margins).
149 149  )))
150 150  
151 151  == Phase 5: Edge Routing ==
... ... @@ -154,14 +154,13 @@
154 154  
155 155  |=(((
156 156  Preconditions
157 -)))|=(% class="nohighlight" %)(% class="nohighlight" %)
158 -(((
193 +)))|(((
159 159  * The graph has a proper layering. (except for self-loops)
160 160  * Nodes are assigned y coordinates.
161 161  * Layer heights are correctly set.
162 162  * An implementation may allow in-layer connections.
163 163  )))
164 -|(% class="highlight" %)(% class="highlight" %)
199 +|=(% class="highlight-grey" data-highlight-colour="grey" %)(% class="highlight-grey" data-highlight-colour="grey" %)
165 165  (((
166 166  Postconditions
167 167  )))|(((
... ... @@ -170,18 +170,27 @@
170 170  * The graph's width is set.
171 171  * The bend points of all edges are set.
172 172  )))
173 -|(% class="highlight" %)(% class="highlight" %)
208 +|=(% class="highlight-grey" data-highlight-colour="grey" %)(% class="highlight-grey" data-highlight-colour="grey" %)
174 174  (((
175 175  Remarks
176 176  )))|(((
177 177  None.
178 178  )))
179 -|(% class="highlight" %)(% class="highlight" %)
214 +|=(% class="highlight-grey" data-highlight-colour="grey" %)(% class="highlight-grey" data-highlight-colour="grey" %)
180 180  (((
181 181  Implementations
182 182  )))|(((
183 -* {{code language="none"}}ComplexSplineRouter{{/code}}.
184 -* {{code language="none"}}OrthogonalEdgeRouter{{/code}}. 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.
185 -* {{code language="none"}}PolylineEdgeRouter{{/code}}.
186 -* {{code language="none"}}impleSplineEdgeRouter{{/code}}.
218 +* {{code language="none"}}OrthogonalEdgeRouter{{/code}}. 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\\
219 +** (((
220 +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.
187 187  )))
222 +* {{code language="none"}}PolylineEdgeRouter{{/code}}. Simplest routing style that just inserts bend points at the position of long edge dummy nodes.
223 +* {{code language="none"}}SplineEdgeRouter{{/code}}. A simple method for routing the edges with splines. Uses the long edge dummy nodes as reference points for spline calculation.
224 +)))
225 +|=(% colspan="1" %)(% colspan="1" %)
226 +(((
227 +Tests
228 +)))|(% colspan="1" %)(% colspan="1" %)
229 +(((
230 +* {{code language="none"}}OrthogonalEdgeRouter{{/code}}: For any two succeeding bendpoints of an edge either the y coordinates or the x coordinates are the same. Starting with the same x coordinates, alternating equality is required.
231 +)))
Confluence.Code.ConfluencePageClass[0]
Id
... ... @@ -1,1 +1,1 @@
1 -1998958
1 +7111017
URL
... ... @@ -1,1 +1,1 @@
1 -https://rtsys.informatik.uni-kiel.de/confluence//wiki/spaces/KIELER/pages/1998958/The Five Phases
1 +https://rtsys.informatik.uni-kiel.de/confluence//wiki/spaces/KIELER/pages/7111017/The Five Phases