Changes for page KIML Layout Options

Last modified by Alexander Schulz-Rosengarten on 2023/09/11 16:17

From version 17.1
edited by msp
on 2014/03/07 16:46
Change comment: There is no comment for this version
To version 32.1
edited by csp
on 2023/07/06 14:35
Change comment: Renamed from xwiki:KIELER.KIML Layout Options

Summary

Details

Page properties
Parent
... ... @@ -1,0 +1,1 @@
1 +Infrastructure for Meta Layout (KIML)
Author
... ... @@ -1,1 +1,1 @@
1 -XWiki.msp
1 +XWiki.csp
Content
... ... @@ -1,26 +1,28 @@
1 -{{warning}}
2 -This is preliminary and incomplete documentation. You've been warned.
3 -{{/warning}}
1 +
4 4  
5 -KIML defines a whole set of standard layout options that many layout algorithms support. Whether an algorithm supports a layout option depends on the option and on the algorithm. When an option is supported by an algorithm, it may change the option's default value. Algorithms may also provide more specialized documentation for a given layout option.
3 +KIML defines a whole set of standard layout options that many layout algorithms support. When an option is supported by an algorithm, that algorithm may override the option's default value. Algorithms may also provide more specialized documentation for layout options.
6 6  
7 7  **Contents**
8 8  
9 9  
10 10  
11 -{{toc/}}
9 +{{toc maxLevel="2"/}}
12 12  
13 13  = Overview =
14 14  
15 -Beside a human-readable name, layout options are defined by the following properties:
13 +Beside a user-friendly name, layout options are defined by the following properties:
16 16  
17 17  * An ID to identify them.
18 -* A type. One of Boolean, String, Int, Float, Enum, EnumSet (a {{code language="none"}}Set{{/code}} over a given enumeration), or Object. The types Enum and EnumSet have to be further defined by an enumeration class. The Object type can be constricted to a certain class.
19 -* The kinds of graph objects the option applies to. At least one of Parents (nodes that have children, including the diagram root node), Nodes, Edges, Ports, and Labels.
20 -* An optional default value. If an option is not set on an object and if the option does not have a default value, {{code language="none"}}null{{/code}} is returned when it is accessed.
16 +* A type. One of Boolean, String, Int, Float, Enum, EnumSet (a s{{code language="none"}}et{{/code}} over a given enumeration), or Object (a non-primitive Java object). The types Enum and EnumSet have to be further defined by an enumeration class. The Object type can be constricted to a certain Java class.
17 +* The kinds of graph objects the option applies to. At least one of Nodes, Edges, Ports, Labels, or Parents (nodes that have children, including the diagram root node). Parents-applicable options affect whole graphs or subgraphs, while options with other application targets affect only single graph elements.
18 +* An optional default value. A default value may also be provided by the layout algorithm using the option, or by the modeling application you are using. In these cases the value given here is overridden.
21 21  
22 -KIML defines the following set of layout options:
20 +Layout options can be assigned to two main categories: user options and programmatic options.
23 23  
22 +== User Options ==
23 +
24 +User options are those that you can see in the "//Layout View//" available in Eclipse if the KIML user interface is installed. That view is restricted to layout options that are supported by the currently active layout algorithm. Furthermore, some options are visible only when the //Show Advanced Properties// button is active in the view.
25 +
24 24  |=(((
25 25  Option
26 26  )))|=(((
... ... @@ -33,7 +33,7 @@
33 33  Default
34 34  )))
35 35  |(((
36 -Alignment
38 +[[Alignment>>doc:||anchor="alignment"]]
37 37  )))|(((
38 38  de.cau.cs.kieler.alignment
39 39  )))|(((
... ... @@ -44,7 +44,7 @@
44 44  AUTOMATIC
45 45  )))
46 46  |(((
47 -Aspect Ratio
49 +[[Aspect Ratio>>doc:||anchor="aspectRatio"]]
48 48  )))|(((
49 49  de.cau.cs.kieler.aspectRatio
50 50  )))|(((
... ... @@ -76,27 +76,44 @@
76 76  )))|(((
77 77  
78 78  )))
79 -|(% colspan="1" %)(% colspan="1" %)
80 -(((
81 -Comment Box
82 -)))|(% colspan="1" %)(% colspan="1" %)
83 -(((
84 -de.cau.cs.kieler.commentBox
85 -)))|(% colspan="1" %)(% colspan="1" %)
86 -(((
81 +|(((
82 +Debug Mode
83 +)))|(((
84 +de.cau.cs.kieler.debugMode
85 +)))|(((
87 87  Boolean
88 -)))|(% colspan="1" %)(% colspan="1" %)
89 -(((
90 -Nodes
91 -)))|(% colspan="1" %)(% colspan="1" %)
92 -(((
87 +)))|(((
88 +Parents
89 +)))|(((
93 93  false
94 94  )))
95 95  |(((
96 -Debug Mode
93 +Direction
97 97  )))|(((
98 -de.cau.cs.kieler.debugMode
95 +de.cau.cs.kieler.direction
99 99  )))|(((
97 +Enum
98 +)))|(((
99 +Parents
100 +)))|(((
101 +
102 +)))
103 +|(((
104 +[[Edge Routing>>doc:||anchor="edgeRouting"]]
105 +)))|(((
106 +de.cau.cs.kieler.edgeRouting
107 +)))|(((
108 +Enum
109 +)))|(((
110 +Parents
111 +)))|(((
112 +
113 +)))
114 +|(((
115 +Expand Nodes
116 +)))|(((
117 +de.cau.cs.kieler.expandNodes
118 +)))|(((
100 100  Boolean
101 101  )))|(((
102 102  Parents
... ... @@ -103,152 +103,215 @@
103 103  )))|(((
104 104  false
105 105  )))
125 +|(((
126 +Interactive
127 +)))|(((
128 +de.cau.cs.kieler.interactive
129 +)))|(((
130 +Boolean
131 +)))|(((
132 +Parents
133 +)))|(((
134 +false
135 +)))
136 +|(((
137 +Label Spacing
138 +)))|(((
139 +de.cau.cs.kieler.labelSpacing
140 +)))|(((
141 +Float
142 +)))|(((
143 +Edges
144 +Nodes
145 +)))|(((
146 +
147 +)))
148 +|(((
149 +[[Layout Hierarchy>>doc:||anchor="layoutHierarchy"]]
150 +)))|(((
151 +de.cau.cs.kieler.layoutHierarchy
152 +)))|(((
153 +Boolean
154 +)))|(((
155 +Parents
156 +)))|(((
157 +false
158 +)))
159 +|(((
160 +[[Layout Algorithm>>doc:||anchor="layoutAlgorithm"]]
161 +)))|(((
162 +de.cau.cs.kieler.algorithm
163 +)))|(((
164 +String
165 +)))|(((
166 +Parents
167 +)))|(((
168 +
169 +)))
106 106  |(% colspan="1" %)(% colspan="1" %)
107 107  (((
108 -[[Diagram Type>>doc:||anchor="diagramType"]]
172 +Node Label Placement
109 109  )))|(% colspan="1" %)(% colspan="1" %)
110 110  (((
111 -de.cau.cs.kieler.diagramType
175 +de.cau.cs.kieler.nodeLabelPlacement
112 112  )))|(% colspan="1" %)(% colspan="1" %)
113 113  (((
114 -String
178 +EnumSet
115 115  )))|(% colspan="1" %)(% colspan="1" %)
116 116  (((
117 -
181 +Nodes
182 +Labels
118 118  )))|(% colspan="1" %)(% colspan="1" %)
119 119  (((
120 120  
121 121  )))
122 122  |(((
123 -Direction
188 +Port Constraints
124 124  )))|(((
125 -de.cau.cs.kieler.direction
190 +de.cau.cs.kieler.portConstraints
126 126  )))|(((
127 127  Enum
128 128  )))|(((
129 -Parents
194 +Nodes
130 130  )))|(((
131 131  
132 132  )))
133 133  |(% colspan="1" %)(% colspan="1" %)
134 134  (((
135 -Edge Label Placement
200 +Port Label Placement
136 136  )))|(% colspan="1" %)(% colspan="1" %)
137 137  (((
138 -de.cau.cs.kieler.edgeLabelPlacement
203 +de.cau.cs.kieler.portLabelPlacement
139 139  )))|(% colspan="1" %)(% colspan="1" %)
140 140  (((
141 141  Enum
142 142  )))|(% colspan="1" %)(% colspan="1" %)
143 143  (((
144 -Labels
209 +Nodes
145 145  )))|(% colspan="1" %)(% colspan="1" %)
146 146  (((
212 +OUTSIDE
213 +)))
214 +|(% colspan="1" %)(% colspan="1" %)
215 +(((
216 +[[Port Spacing>>doc:||anchor="portSpacing"]]
217 +)))|(% colspan="1" %)(% colspan="1" %)
218 +(((
219 +de.cau.cs.kieler.portSpacing
220 +)))|(% colspan="1" %)(% colspan="1" %)
221 +(((
222 +Float
223 +)))|(% colspan="1" %)(% colspan="1" %)
224 +(((
225 +Nodes
226 +)))|(% colspan="1" %)(% colspan="1" %)
227 +(((
147 147  
148 148  )))
149 -|(((
150 -[[Edge Routing>>doc:||anchor="edgeRouting"]]
151 -)))|(((
152 -de.cau.cs.kieler.edgeRouting
153 -)))|(((
230 +|(% colspan="1" %)(% colspan="1" %)
231 +(((
232 +[[Port Alignment>>doc:||anchor="portAlignment"]]
233 +)))|(% colspan="1" %)(% colspan="1" %)
234 +(((
235 +de.cau.cs.kieler.portAlignment
236 +)))|(% colspan="1" %)(% colspan="1" %)
237 +(((
154 154  Enum
155 -)))|(((
239 +)))|(% colspan="1" %)(% colspan="1" %)
240 +(((
241 +Nodes
156 156  Parents
157 -)))|(((
158 -
243 +)))|(% colspan="1" %)(% colspan="1" %)
244 +(((
245 +JUSTIFIED
159 159  )))
160 160  |(% colspan="1" %)(% colspan="1" %)
161 161  (((
162 -Edge Type
249 +Port Alignment for Northern Ports
163 163  )))|(% colspan="1" %)(% colspan="1" %)
164 164  (((
165 -de.cau.cs.kieler.edgeType
252 +de.cau.cs.kieler.portAlignment.north
166 166  )))|(% colspan="1" %)(% colspan="1" %)
167 167  (((
168 168  Enum
169 169  )))|(% colspan="1" %)(% colspan="1" %)
170 170  (((
171 -Edges
258 +Nodes
259 +Parents
172 172  )))|(% colspan="1" %)(% colspan="1" %)
173 173  (((
174 -NONE
262 +UNDEFINED
175 175  )))
176 -|(((
177 -Expand Nodes
178 -)))|(((
179 -de.cau.cs.kieler.expandNodes
180 -)))|(((
181 -Boolean
182 -)))|(((
183 -Parents
184 -)))|(((
185 -false
186 -)))
187 187  |(% colspan="1" %)(% colspan="1" %)
188 188  (((
189 -Font Name
266 +Port Alignment for Souther Ports
190 190  )))|(% colspan="1" %)(% colspan="1" %)
191 191  (((
192 -de.cau.cs.kieler.fontName
269 +de.cau.cs.kieler.portAlignment.south
193 193  )))|(% colspan="1" %)(% colspan="1" %)
194 194  (((
195 -String
272 +Enum
196 196  )))|(% colspan="1" %)(% colspan="1" %)
197 197  (((
198 -Labels
275 +Nodes
276 +Parents
199 199  )))|(% colspan="1" %)(% colspan="1" %)
200 200  (((
201 -
279 +UNDEFINED
202 202  )))
203 203  |(% colspan="1" %)(% colspan="1" %)
204 204  (((
205 -Font Size
283 +Port Alignment for Eastern Ports
206 206  )))|(% colspan="1" %)(% colspan="1" %)
207 207  (((
208 -de.cau.cs.kieler.fontSize
286 +de.cau.cs.kieler.portAlignment.east
209 209  )))|(% colspan="1" %)(% colspan="1" %)
210 210  (((
211 -Int
289 +Enum
212 212  )))|(% colspan="1" %)(% colspan="1" %)
213 213  (((
214 -Labels
292 +Nodes
293 +Parents
215 215  )))|(% colspan="1" %)(% colspan="1" %)
216 216  (((
217 -
296 +UNDEFINED
218 218  )))
219 219  |(% colspan="1" %)(% colspan="1" %)
220 220  (((
221 -Hypernode
300 +Port Alignment for Western Ports
222 222  )))|(% colspan="1" %)(% colspan="1" %)
223 223  (((
224 -de.cau.cs.kieler.hypernode
303 +de.cau.cs.kieler.portAlignment.west
225 225  )))|(% colspan="1" %)(% colspan="1" %)
226 226  (((
227 -Boolean
306 +Enum
228 228  )))|(% colspan="1" %)(% colspan="1" %)
229 229  (((
230 230  Nodes
310 +Parents
231 231  )))|(% colspan="1" %)(% colspan="1" %)
232 232  (((
233 -false
313 +UNDEFINED
234 234  )))
235 235  |(((
236 -Interactive
316 +Position
237 237  )))|(((
238 -de.cau.cs.kieler.interactive
318 +de.cau.cs.kieler.position
239 239  )))|(((
240 -Boolean
320 +Object
241 241  )))|(((
242 -Parents
322 +Labels
323 +Nodes
324 +Ports
243 243  )))|(((
244 -false
326 +
245 245  )))
246 246  |(((
247 -Label Spacing
329 +Priority
248 248  )))|(((
249 -de.cau.cs.kieler.labelSpacing
331 +de.cau.cs.kieler.priority
250 250  )))|(((
251 -Float
333 +Int
252 252  )))|(((
253 253  Edges
254 254  Nodes
... ... @@ -255,133 +255,216 @@
255 255  )))|(((
256 256  
257 257  )))
258 -|(((
259 -Layout Hierarchy
260 -)))|(((
261 -de.cau.cs.kieler.layoutHierarchy
262 -)))|(((
263 -Boolean
264 -)))|(((
340 +|(% colspan="1" %)(% colspan="1" %)
341 +(((
342 +Randomization Seed
343 +)))|(% colspan="1" %)(% colspan="1" %)
344 +(((
345 +de.cau.cs.kieler.randomSeed
346 +)))|(% colspan="1" %)(% colspan="1" %)
347 +(((
348 +Int
349 +)))|(% colspan="1" %)(% colspan="1" %)
350 +(((
265 265  Parents
266 -)))|(((
267 -false
352 +)))|(% colspan="1" %)(% colspan="1" %)
353 +(((
354 +
268 268  )))
269 -|(((
270 -[[Layout Algorithm>>doc:||anchor="layoutAlgorithm"]]
271 -)))|(((
272 -de.cau.cs.kieler.algorithm
273 -)))|(((
274 -String
275 -)))|(((
356 +|(% colspan="1" %)(% colspan="1" %)
357 +(((
358 +Separate Connected Components
359 +)))|(% colspan="1" %)(% colspan="1" %)
360 +(((
361 +de.cau.cs.kieler.separateConnComp
362 +)))|(% colspan="1" %)(% colspan="1" %)
363 +(((
364 +Boolean
365 +)))|(% colspan="1" %)(% colspan="1" %)
366 +(((
276 276  Parents
277 -)))|(((
368 +)))|(% colspan="1" %)(% colspan="1" %)
369 +(((
278 278  
279 279  )))
280 280  |(% colspan="1" %)(% colspan="1" %)
281 281  (((
282 -Minimal Height
374 +Size Constraint
283 283  )))|(% colspan="1" %)(% colspan="1" %)
284 284  (((
285 -de.cau.cs.kieler.minHeight
377 +de.cau.cs.kieler.sizeConstraint
286 286  )))|(% colspan="1" %)(% colspan="1" %)
287 287  (((
288 -Float
380 +EnumSet
289 289  )))|(% colspan="1" %)(% colspan="1" %)
290 290  (((
291 291  Nodes
292 -Parents
293 293  )))|(% colspan="1" %)(% colspan="1" %)
294 294  (((
295 -0.0
386 +
296 296  )))
297 297  |(% colspan="1" %)(% colspan="1" %)
298 298  (((
299 -Minimal Width
390 +Size Options
300 300  )))|(% colspan="1" %)(% colspan="1" %)
301 301  (((
302 -de.cau.cs.kieler.minWidth
393 +de.cau.cs.kieler.sizeOptions
303 303  )))|(% colspan="1" %)(% colspan="1" %)
304 304  (((
305 -Float
396 +EnumSet
306 306  )))|(% colspan="1" %)(% colspan="1" %)
307 307  (((
308 308  Nodes
400 +)))|(% colspan="1" %)(% colspan="1" %)
401 +(((
402 +DEFAULT_MINIMUM_SIZE
403 +)))
404 +|(% colspan="1" %)(% colspan="1" %)
405 +(((
406 +Spacing
407 +)))|(% colspan="1" %)(% colspan="1" %)
408 +(((
409 +de.cau.cs.kieler.spacing
410 +)))|(% colspan="1" %)(% colspan="1" %)
411 +(((
412 +Float
413 +)))|(% colspan="1" %)(% colspan="1" %)
414 +(((
309 309  Parents
310 310  )))|(% colspan="1" %)(% colspan="1" %)
311 311  (((
312 -0.0
418 +
313 313  )))
420 +
421 +== Programmatic Options ==
422 +
423 +Programmatic options are such that are meant to be configured exclusively through the KIML API. They should not be visible in the user interface.
424 +
425 +|=(((
426 +Option
427 +)))|=(((
428 +ID
429 +)))|=(((
430 +Type
431 +)))|=(((
432 +Applies to
433 +)))|=(((
434 +Default
435 +)))
314 314  |(% colspan="1" %)(% colspan="1" %)
315 315  (((
316 -No Layout
438 +[[Additional Port Space>>doc:||anchor="addPortSpace"]]
317 317  )))|(% colspan="1" %)(% colspan="1" %)
318 318  (((
319 -de.cau.cs.kieler.noLayout
441 +de.cau.cs.kieler.additionalPortSpace
320 320  )))|(% colspan="1" %)(% colspan="1" %)
321 321  (((
444 +Margins
445 +)))|(% colspan="1" %)(% colspan="1" %)
446 +(((
447 +Nodes
448 +)))|(% colspan="1" %)(% colspan="1" %)
449 +(((
450 +0, 0, 0, 0
451 +)))
452 +|(% colspan="1" %)(% colspan="1" %)
453 +(((
454 +Animate
455 +)))|(% colspan="1" %)(% colspan="1" %)
456 +(((
457 +de.cau.cs.kieler.animate
458 +)))|(% colspan="1" %)(% colspan="1" %)
459 +(((
322 322  Boolean
323 323  )))|(% colspan="1" %)(% colspan="1" %)
324 324  (((
325 -
463 +Parents
326 326  )))|(% colspan="1" %)(% colspan="1" %)
327 327  (((
328 -false
466 +true
329 329  )))
330 330  |(% colspan="1" %)(% colspan="1" %)
331 331  (((
332 -Node Label Placement
470 +Animation Time Factor
333 333  )))|(% colspan="1" %)(% colspan="1" %)
334 334  (((
335 -de.cau.cs.kieler.nodeLabelPlacement
473 +de.cau.cs.kieler.animTimeFactor
336 336  )))|(% colspan="1" %)(% colspan="1" %)
337 337  (((
338 -EnumSet
476 +Int
339 339  )))|(% colspan="1" %)(% colspan="1" %)
340 340  (((
479 +Parents
480 +)))|(% colspan="1" %)(% colspan="1" %)
481 +(((
482 +100
483 +)))
484 +|(% colspan="1" %)(% colspan="1" %)
485 +(((
486 +[[Comment Box>>doc:||anchor="commentBox"]]
487 +)))|(% colspan="1" %)(% colspan="1" %)
488 +(((
489 +de.cau.cs.kieler.commentBox
490 +)))|(% colspan="1" %)(% colspan="1" %)
491 +(((
492 +Boolean
493 +)))|(% colspan="1" %)(% colspan="1" %)
494 +(((
341 341  Nodes
342 342  )))|(% colspan="1" %)(% colspan="1" %)
343 343  (((
498 +false
499 +)))
500 +|(((
501 +[[Diagram Type>>doc:||anchor="diagramType"]]
502 +)))|(((
503 +de.cau.cs.kieler.diagramType
504 +)))|(((
505 +String
506 +)))|(((
507 +Parents
508 +)))|(((
344 344  
345 345  )))
346 346  |(((
347 -Port Constraints
512 +Edge Label Placement
348 348  )))|(((
349 -de.cau.cs.kieler.portConstraints
514 +de.cau.cs.kieler.edgeLabelPlacement
350 350  )))|(((
351 351  Enum
352 352  )))|(((
353 -Nodes
518 +Labels
354 354  )))|(((
355 355  
356 356  )))
357 357  |(% colspan="1" %)(% colspan="1" %)
358 358  (((
359 -Port Label Placement
524 +Edge Type
360 360  )))|(% colspan="1" %)(% colspan="1" %)
361 361  (((
362 -de.cau.cs.kieler.portLabelPlacement
527 +de.cau.cs.kieler.edgeType
363 363  )))|(% colspan="1" %)(% colspan="1" %)
364 364  (((
365 365  Enum
366 366  )))|(% colspan="1" %)(% colspan="1" %)
367 367  (((
368 -Nodes
533 +Edges
369 369  )))|(% colspan="1" %)(% colspan="1" %)
370 370  (((
371 -OUTSIDE
536 +NONE
372 372  )))
373 373  |(% colspan="1" %)(% colspan="1" %)
374 374  (((
375 -[[Port Offset>>doc:||anchor="portOffset"]]
540 +Font Name
376 376  )))|(% colspan="1" %)(% colspan="1" %)
377 377  (((
378 -de.cau.cs.kieler.offset
543 +de.cau.cs.kieler.fontName
379 379  )))|(% colspan="1" %)(% colspan="1" %)
380 380  (((
381 -Float
546 +String
382 382  )))|(% colspan="1" %)(% colspan="1" %)
383 383  (((
384 -Ports
549 +Labels
385 385  )))|(% colspan="1" %)(% colspan="1" %)
386 386  (((
387 387  
... ... @@ -388,16 +388,16 @@
388 388  )))
389 389  |(% colspan="1" %)(% colspan="1" %)
390 390  (((
391 -Port Side
556 +Font Size
392 392  )))|(% colspan="1" %)(% colspan="1" %)
393 393  (((
394 -de.cau.cs.kieler.portSide
559 +de.cau.cs.kieler.fontSize
395 395  )))|(% colspan="1" %)(% colspan="1" %)
396 396  (((
397 -Enum
562 +Int
398 398  )))|(% colspan="1" %)(% colspan="1" %)
399 399  (((
400 -Ports
565 +Labels
401 401  )))|(% colspan="1" %)(% colspan="1" %)
402 402  (((
403 403  
... ... @@ -404,57 +404,162 @@
404 404  )))
405 405  |(% colspan="1" %)(% colspan="1" %)
406 406  (((
407 -Port Spacing
572 +[[Hypernode>>doc:||anchor="hypernode"]]
408 408  )))|(% colspan="1" %)(% colspan="1" %)
409 409  (((
410 -de.cau.cs.kieler.portSpacing
575 +de.cau.cs.kieler.hypernode
411 411  )))|(% colspan="1" %)(% colspan="1" %)
412 412  (((
578 +Boolean
579 +)))|(% colspan="1" %)(% colspan="1" %)
580 +(((
581 +Nodes
582 +)))|(% colspan="1" %)(% colspan="1" %)
583 +(((
584 +false
585 +)))
586 +|(% colspan="1" %)(% colspan="1" %)
587 +(((
588 +Layout Ancestors
589 +)))|(% colspan="1" %)(% colspan="1" %)
590 +(((
591 +de.cau.cs.kieler.layoutAncestors
592 +)))|(% colspan="1" %)(% colspan="1" %)
593 +(((
594 +Boolean
595 +)))|(% colspan="1" %)(% colspan="1" %)
596 +(((
597 +Parents
598 +)))|(% colspan="1" %)(% colspan="1" %)
599 +(((
600 +false
601 +)))
602 +|(% colspan="1" %)(% colspan="1" %)
603 +(((
604 +Maximal Animation Time
605 +)))|(% colspan="1" %)(% colspan="1" %)
606 +(((
607 +de.cau.cs.kieler.maxAnimTim
608 +)))|(% colspan="1" %)(% colspan="1" %)
609 +(((
610 +Int
611 +)))|(% colspan="1" %)(% colspan="1" %)
612 +(((
613 +Parents
614 +)))|(% colspan="1" %)(% colspan="1" %)
615 +(((
616 +4000
617 +)))
618 +|(% colspan="1" %)(% colspan="1" %)
619 +(((
620 +Minimal Animation Time
621 +)))|(% colspan="1" %)(% colspan="1" %)
622 +(((
623 +de.cau.cs.kieler.minAnimTim
624 +)))|(% colspan="1" %)(% colspan="1" %)
625 +(((
626 +Int
627 +)))|(% colspan="1" %)(% colspan="1" %)
628 +(((
629 +Parents
630 +)))|(% colspan="1" %)(% colspan="1" %)
631 +(((
632 +400
633 +)))
634 +|(% colspan="1" %)(% colspan="1" %)
635 +(((
636 +Minimal Height
637 +)))|(% colspan="1" %)(% colspan="1" %)
638 +(((
639 +de.cau.cs.kieler.minHeight
640 +)))|(% colspan="1" %)(% colspan="1" %)
641 +(((
413 413  Float
414 414  )))|(% colspan="1" %)(% colspan="1" %)
415 415  (((
416 416  Nodes
646 +Parents
417 417  )))|(% colspan="1" %)(% colspan="1" %)
418 418  (((
649 +0.0
650 +)))
651 +|(% colspan="1" %)(% colspan="1" %)
652 +(((
653 +Minimal Width
654 +)))|(% colspan="1" %)(% colspan="1" %)
655 +(((
656 +de.cau.cs.kieler.minWidth
657 +)))|(% colspan="1" %)(% colspan="1" %)
658 +(((
659 +Float
660 +)))|(% colspan="1" %)(% colspan="1" %)
661 +(((
662 +Nodes
663 +Parents
664 +)))|(% colspan="1" %)(% colspan="1" %)
665 +(((
666 +0.0
667 +)))
668 +|(% colspan="1" %)(% colspan="1" %)
669 +(((
670 +[[No Layout>>doc:||anchor="noLayout"]]
671 +)))|(% colspan="1" %)(% colspan="1" %)
672 +(((
673 +de.cau.cs.kieler.noLayout
674 +)))|(% colspan="1" %)(% colspan="1" %)
675 +(((
676 +Boolean
677 +)))|(% colspan="1" %)(% colspan="1" %)
678 +(((
419 419  
680 +)))|(% colspan="1" %)(% colspan="1" %)
681 +(((
682 +false
420 420  )))
421 -|(((
422 -Position
423 -)))|(((
424 -de.cau.cs.kieler.position
425 -)))|(((
684 +|(% colspan="1" %)(% colspan="1" %)
685 +(((
686 +[[Port Anchor Offset>>doc:||anchor="portAnchor"]]
687 +)))|(% colspan="1" %)(% colspan="1" %)
688 +(((
689 +de.cau.cs.kieler.klay.layered.portAnchor
690 +)))|(% colspan="1" %)(% colspan="1" %)
691 +(((
426 426  Object
427 -)))|(((
428 -Labels
429 -Nodes
693 +)))|(% colspan="1" %)(% colspan="1" %)
694 +(((
430 430  Ports
431 -)))|(((
696 +)))|(% colspan="1" %)(% colspan="1" %)
697 +(((
432 432  
433 433  )))
434 -|(((
435 -Priority
436 -)))|(((
437 -de.cau.cs.kieler.priority
438 -)))|(((
700 +|(% colspan="1" %)(% colspan="1" %)
701 +(((
702 +Port Index
703 +)))|(% colspan="1" %)(% colspan="1" %)
704 +(((
705 +de.cau.cs.kieler.portIndex
706 +)))|(% colspan="1" %)(% colspan="1" %)
707 +(((
439 439  Int
440 -)))|(((
441 -Edges
442 -Nodes
443 -)))|(((
709 +)))|(% colspan="1" %)(% colspan="1" %)
710 +(((
711 +Ports
712 +)))|(% colspan="1" %)(% colspan="1" %)
713 +(((
444 444  
445 445  )))
446 446  |(% colspan="1" %)(% colspan="1" %)
447 447  (((
448 -Randomization Seed
718 +[[Port Offset>>doc:||anchor="portOffset"]]
449 449  )))|(% colspan="1" %)(% colspan="1" %)
450 450  (((
451 -de.cau.cs.kieler.randomSeed
721 +de.cau.cs.kieler.offset
452 452  )))|(% colspan="1" %)(% colspan="1" %)
453 453  (((
454 -Int
724 +Float
455 455  )))|(% colspan="1" %)(% colspan="1" %)
456 456  (((
457 -Parents
727 +Ports
458 458  )))|(% colspan="1" %)(% colspan="1" %)
459 459  (((
460 460  
... ... @@ -461,16 +461,16 @@
461 461  )))
462 462  |(% colspan="1" %)(% colspan="1" %)
463 463  (((
464 -Separate Connected Components
734 +Port Side
465 465  )))|(% colspan="1" %)(% colspan="1" %)
466 466  (((
467 -de.cau.cs.kieler.separateConnComp
737 +de.cau.cs.kieler.portSide
468 468  )))|(% colspan="1" %)(% colspan="1" %)
469 469  (((
470 -Boolean
740 +Enum
471 471  )))|(% colspan="1" %)(% colspan="1" %)
472 472  (((
473 -Parents
743 +Ports
474 474  )))|(% colspan="1" %)(% colspan="1" %)
475 475  (((
476 476  
... ... @@ -477,74 +477,122 @@
477 477  )))
478 478  |(% colspan="1" %)(% colspan="1" %)
479 479  (((
480 -Size Constraint
750 +Progress Bar
481 481  )))|(% colspan="1" %)(% colspan="1" %)
482 482  (((
483 -de.cau.cs.kieler.sizeConstraint
753 +de.cau.cs.kieler.progressBar
484 484  )))|(% colspan="1" %)(% colspan="1" %)
485 485  (((
486 -EnumSet
756 +Boolean
487 487  )))|(% colspan="1" %)(% colspan="1" %)
488 488  (((
489 -Nodes
759 +Parents
490 490  )))|(% colspan="1" %)(% colspan="1" %)
491 491  (((
492 -
762 +false
493 493  )))
494 494  |(% colspan="1" %)(% colspan="1" %)
495 495  (((
496 -Size Options
766 +Scale Factor
497 497  )))|(% colspan="1" %)(% colspan="1" %)
498 498  (((
499 -de.cau.cs.kieler.sizeOptions
769 +de.cau.cs.kieler.scaleFactor
500 500  )))|(% colspan="1" %)(% colspan="1" %)
501 501  (((
502 -EnumSet
772 +Float
503 503  )))|(% colspan="1" %)(% colspan="1" %)
504 504  (((
505 505  Nodes
506 506  )))|(% colspan="1" %)(% colspan="1" %)
507 507  (((
508 -DEFAULT_MINIMUM_SIZE
778 +1.0
509 509  )))
510 510  |(% colspan="1" %)(% colspan="1" %)
511 511  (((
512 -Spacing
782 +Thickness
513 513  )))|(% colspan="1" %)(% colspan="1" %)
514 514  (((
515 -de.cau.cs.kieler.spacing
785 +de.cau.cs.kieler.thickness
516 516  )))|(% colspan="1" %)(% colspan="1" %)
517 517  (((
518 518  Float
519 519  )))|(% colspan="1" %)(% colspan="1" %)
520 520  (((
791 +Edges
792 +)))|(% colspan="1" %)(% colspan="1" %)
793 +(((
794 +1.0
795 +)))
796 +|(% colspan="1" %)(% colspan="1" %)
797 +(((
798 +Zoom to Fit
799 +)))|(% colspan="1" %)(% colspan="1" %)
800 +(((
801 +de.cau.cs.kieler.zoomToFit
802 +)))|(% colspan="1" %)(% colspan="1" %)
803 +(((
804 +Boolean
805 +)))|(% colspan="1" %)(% colspan="1" %)
806 +(((
521 521  Parents
522 522  )))|(% colspan="1" %)(% colspan="1" %)
523 523  (((
524 -
810 +false
525 525  )))
526 526  
527 -= The Most Important Options =
813 +=== Layout Output Properties ===
528 528  
529 -While most layout options are used to affect how the active layout algorithm computes concrete coordinates for the graph elements, there are some layout options that have a special role in KIML.
815 +A few properties are used as additional information in the output of a layout algorithm. This information should be considered when the layout is applied to the original diagram
530 530  
531 -== Layout Algorithm ==
817 +|=(((
818 +Property
819 +)))|=(((
820 +ID
821 +)))|=(((
822 +Type
823 +)))|=(((
824 +Applies to
825 +)))
826 +|(((
827 +[[Edge Routing>>doc:||anchor="edgeRouting"]]
828 +)))|(((
829 +de.cau.cs.kieler.edgeRouting
830 +)))|(((
831 +Enum
832 +)))|(((
833 +Edges
834 +)))
835 +|(((
836 +Junction Points
837 +)))|(((
838 +de.cau.cs.kieler.junctionPoints
839 +)))|(((
840 +Object
841 +)))|(((
842 +Edges
843 +)))
532 532  
533 -{{id name="layoutAlgorithm"/}}
845 +
534 534  
535 -The option with identifier {{code language="none"}}de.cau.cs.kieler.algorithm{{/code}} specifies which layout algorithm to use for the content of a composite node. The value can be either the identifier of a layout algorithm or the identifier of a layout type. In the latter case the algorithm with highest priority of that type is applied.
847 += Detailed Documentation =
536 536  
537 -The following layout types are predefined:
849 +This section explains every layout option in more detail.
538 538  
539 -* **Layered** - The layer-based method emphasizes the direction of edges by pointing as many edges as possible into the same direction. The nodes are arranged in layers and then reordered such that the number of edge crossings is minimized. Afterwards, concrete coordinates are computed for the nodes and edge bend points.
540 -* **Orthogonal** - Orthogonal methods follow the "topology-shape-metrics" approach, which first applies a planarization technique, resulting in a planar representation of the graph, then compute an orthogonal shape, and finally determine concrete coordinates for nodes and edge bend points by applying a compaction method.
541 -* **Force** - Layout algorithms that follow physical analogies by simulating a system of attractive and repulsive forces.
542 -* **Circular** - Circular layout algorithms emphasize biconnected components of a graph by arranging them in circles. This is useful if a drawing is desired where such components are clearly grouped, or where cycles are shown as prominent properties of the graph.
543 -* **Tree** - Specialized layout methods for trees, i.e. acyclic graphs. The regular structure of graphs that have no undirected cycles can be emphasized using an algorithm of this type.
851 +== The Most Important Options ==
544 544  
545 -=== Available Algorithms and Libraries ===
853 +While most layout options are used to affect how the active layout algorithm computes concrete coordinates for the graph elements, there are some layout options that have a special role in KIML.
546 546  
547 -* **The [[KLay Project>>doc:Layout Algorithms (KLay)]]** - Java implementations of standard layout approaches, augmented with special processing of graph features such as ports and edge labels.
855 +=== ===
856 +
857 +{{id name="layoutAlgorithm"/}}Layout AlgorithmThe option with identifier {{code language="none"}}de.cau.cs.kieler.algorithm{{/code}} specifies which layout algorithm to use for a graph or subgraph. The value can be either the identifier of a layout algorithm or the identifier of a layout type. In the latter case the algorithm with highest priority of that type is applied. It is possible to set different values for this option on subgraphs of a hierarchical graph, where a subgraph is identified by a parent node. A layout algorithm is responsible to process only the direct content of a given parent node. An exception from this rule is made when the [[Layout Hierarchy>>doc:||anchor="layoutHierarchy"]] option is active.
858 +
859 +The following layout has been created by setting a force-based layout algorithm on the inner hierarchy level and a layer-based layout algorithm on the top level.
860 +
861 +[[image:attach:layout_algorithm.png]]
862 +
863 +==== Available Algorithms and Libraries ====
864 +
865 +* **The [[KLay Project>>doc:Layout Algorithms (KLay)]]** - Java implementations of standard layout approaches, augmented with special processing of graph features such as ports and labels.
548 548  * **Randomizer** - Distributes the nodes randomly; not very useful, but it can show how important a good layout is for understanding a graph.
549 549  * (((
550 550  **Box Layout** - Ignores edges, places all nodes in rows. Can be used to layout collections of unconnected boxes, such as Statechart regions.
... ... @@ -553,56 +553,130 @@
553 553  * **OGDF** ((% style="color: rgb(0,0,0);" %)[[www.ogdf.net>>url:http://www.ogdf.net/||shape="rect"]](%%)) - A self-contained C++ class library for the automatic layout of diagrams. The version that is shipped with KIELER is compiled as an executable that reads files in OGML format and outputs the computed concrete layout.
554 554  * **Graphviz** ([[www.graphviz.org>>url:http://www.graphviz.org/||shape="rect"]]) - An open source graph visualization tool with several graph layout programs, web and interactive graphical interfaces, auxiliary tools, libraries, and language bindings. Graphviz needs to be installed separately in order to be used within KIELER, since it is called in a separate process using the DOT language for communication.
555 555  
556 -== Diagram Type ==
874 +==== Predefined Layout Types ====
557 557  
558 -{{id name="diagramType"/}}
876 +* **Layered** - The layer-based method emphasizes the direction of edges by pointing as many edges as possible into the same direction. The nodes are arranged in layers and then reordered such that the number of edge crossings is minimized. Afterwards, concrete coordinates are computed for the nodes and edge bend points.
877 +* **Orthogonal** - Orthogonal methods follow the "topology-shape-metrics" approach, which first applies a planarization technique, resulting in a planar representation of the graph, then compute an orthogonal shape, and finally determine concrete coordinates for nodes and edge bend points by applying a compaction method.
878 +* **Force** - Layout algorithms that follow physical analogies by simulating a system of attractive and repulsive forces.
879 +* **Circular** - Circular layout algorithms emphasize biconnected components of a graph by arranging them in circles. This is useful if a drawing is desired where such components are clearly grouped, or where cycles are shown as prominent properties of the graph.
880 +* **Tree** - Specialized layout methods for trees, i.e. acyclic graphs. The regular structure of graphs that have no undirected cycles can be emphasized using an algorithm of this type.
559 559  
560 -Diagram types are used to classify graphical diagrams for setting default layout option values for a set of similar diagrams. The diagram type of an element is specified with the layout option {{code language="none"}}de.cau.cs.kieler.diagramType{{/code}}. Layout algorithms can declare which diagram types they support well, and give a priority value for each supported type. KIML decides at runtime which layout algorithm has the highest priority for a given diagram, so that the most suitable algorithm is always used. Usual values for such priorities are between 1 and 10, where the highest value should only be assigned if the algorithm is especially designed for diagrams of the respective type, or if it has proven to be very adequate for them. Lower values should be given if the algorithm is able to draw the diagrams correctly, but with lower quality of the resulting layout.
882 +=== ===
561 561  
884 +{{id name="diagramType"/}}Diagram TypeDiagram types are used to classify graphical diagrams for setting default layout option values for a set of similar diagrams. The diagram type of an element is specified with the layout option {{code language="none"}}de.cau.cs.kieler.diagramType{{/code}}. Layout algorithms can declare which diagram types they support well, and give a priority value for each supported type. KIML decides at runtime which layout algorithm has the highest priority for a given diagram, so that the most suitable algorithm is always used. Usual values for such priorities are between 1 and 10, where the highest value should only be assigned if the algorithm is especially designed for diagrams of the respective type, or if it has proven to be very adequate for them. Lower values should be given if the algorithm is able to draw the diagrams correctly, but with lower quality of the resulting layout.
885 +
562 562  The following diagram types are predefined:
563 563  
564 564  * **General** - This type is automatically assigned to all diagrams for which no specific type is declared. A layout algorithm that has the highest priority on the //General// diagram type is taken as the default algorithm when no further information on a diagram is available to KIML.
565 -* **State Machine** - All kinds of state machines, automata, and activity diagrams. Examples: [[doc:SCCharts SyncCharts]], UML Activity diagrams.
889 +* **State Machine** - All kinds of state machines, automata, and activity diagrams. Examples: [[doc:SyncCharts]], UML Activity diagrams.
566 566  * **Data Flow Diagram** - Actor-oriented diagrams, where connections are mostly done between //ports// of nodes. These diagrams can only be handled properly by very special layout algorithms, such as those developed in the [[KLay project>>doc:Layout Algorithms (KLay)]].
567 567  * **Class Diagram** - Class diagrams such as Ecore diagrams for the [[EMF>>url:http://www.eclipse.org/modeling/emf/||shape="rect"]] or UML Class diagrams.
568 568  * **Use Case Diagram** - Use case diagrams as defined by the UML.
569 -* **Unconnected Boxes** - Sets of nodes that have no connections and are treated as resizable boxes. This is related to mathematical [[packing problems>>url:http://en.wikipedia.org/wiki/Packing_problem||shape="rect"]]. Example: Regions in [[doc:SCCharts SyncCharts]].
893 +* **Unconnected Boxes** - Sets of nodes that have no connections and are treated as resizable boxes. This is related to mathematical [[packing problems>>url:http://en.wikipedia.org/wiki/Packing_problem||shape="rect"]]. Example: Regions in [[doc:SyncCharts]].
570 570  
895 +=== ===
896 +
897 +{{id name="edgeRouting"/}}Edge RoutingThis option influences the way in which edges are routed between the nodes they connect. The following settings are available:
898 +
899 +* POLYLINE
900 +Edges consist of one or more segments defined by a list of bend points.
901 +* ORTHOGONAL
902 +Edges are routed orthogonally, meaning that each segment of an edge runs either horizontally or vertically.
903 +* SPLINES
904 +Edges are routed as splines (smooth curves).
905 +* UNDEFINED
906 +No particular edge routing style is selected. Usually this value points to the default setting of the selected layout algorithm.
907 +
908 +[[image:attach:edge_routing.png]]
909 +
910 +When used as layout option, the edge routing is set for a whole graph or subgraph, i.e. on a parent node. However, the property is additionally used for the output of the layout algorithm in order to mark individual edges. If the edge routing assigned to an edge is anything other than SPLINES, the bend points of that edge are interpreted with their normal meaning, i.e. straight lines are drawn between consecutive bend points. If, on the other hand, a layout algorithm marks an edge with the value SPLINES, the bend points have to be interpreted as control points for a series of cubic splines following this procedure:
911 +
912 +1. Start at the source point of the edge.
913 +1. As long as there are at least three bend points left:
914 +11. Draw a cubic spline segment to the third bend point with the other two bend points as control points.
915 +11. Use the third bend point as start point for the next segment.
916 +11. Consume the three bend points and proceed to the next segment.
917 +1. Check the number of remaining bend points:
918 +11. Two bend points – draw a cubic spline segment to the target point of the edge.
919 +11. One bend point – draw a quadratic spline segment to the target point of the edge.
920 +11. No bend point – draw a straight line to the target point of the edge.
921 +
571 571  == Other Options ==
572 572  
573 -* **Layout Hierarchy** ({{code language="none"}}de.cau.cs.kieler.layoutHierarchy{{/code}}) - If this option is supported and active, the layout algorithm is requested to process the full hierarchy contained in the input node. This means that instead of executing another algorithm on each hierarchy level, all levels are arranged in a single algorithm execution.
574 -* **Hypernode** ({{code language="none"}}de.cau.cs.kieler.hypernode{{/code}}) - A node that is marked as hypernode has a special role in the graph structure, since all its incident edges are treated as parts of the same [[hyperedge>>url:http://en.wikipedia.org/wiki/Hypergraph||shape="rect"]]. Example: relation vertices in [[Ptolemy>>url:http://ptolemy.eecs.berkeley.edu/||shape="rect"]] models.
575 -* **Comment Box** ({{code language="none"}}de.cau.cs.kieler.commentBox{{/code}}) - A node that is marked as comment box is treated as a label that needs to be placed somewhere. This is different to normal node labels, which are usually regarded as fixed.
576 -* **No Layout** ({{code language="none"}}de.cau.cs.kieler.noLayout{{/code}}) - Elements that are marked with this option are excluded from layout. This is used to identify diagram objects that should not be regarded as graph elements.
924 +=== ===
577 577  
578 -= Detailed Documentation =
926 +{{id name="addPortSpace"/}}Additional Port SpaceThis option controls the usable space for ports on each side:
579 579  
580 -This section explains every layout option in more detail.
928 +[[image:attach:addPortSpace.png]]
581 581  
582 -== Edge Routing ==
930 +If the option is not set, the value of [[Port Spacing>>doc:||anchor="portSpacing"]] is used instead for all four components.
583 583  
584 -{{id name="edgeRouting"/}}
932 +This option is only relevant if port constraints are {{code language="none"}}FREE{{/code}}, {{code language="none"}}FIXED_SIDE{{/code}}, or {{code language="none"}}FIXED_ORDER{{/code}}. If size constraints include {{code language="none"}}PORTS{{/code}}, the additional port space, together with the port spacing and the size of ports, determines a lower bound on the node size.
585 585  
586 -This option influences the way in which edges are routed between the nodes they connect. The following settings are available:
934 +=== ===
587 587  
588 -* POLYLINE
589 -Edges consist of one or more segments defined by a list of bend points.
590 -* ORTHOGONAL
591 -Edges are routed orthogonally, meaning that each segment of an edge runs either horizontally or vertically, but never at an angle.
592 -* SPLINE
593 -Edges are routed as splines (smooth curves). (% style="color: rgb(153,51,0);" %)**TODO:** Add more documentation on how the returned bend points are to be interpreted.
594 -* UNDEFINED
595 -No particular edge routing style is selected. The result produced by the layout algorithm may be undefined.
936 +{{id name="alignment"/}}AlignmentDetermines the alignment of a node in relation to other nodes of the same row or column. For layer-based algorithms, for instance, this option controls how a node is positioned inside its assigned layer.
596 596  
597 -(% style="color: rgb(153,51,0);" %)**TODO:** Add an image illustrating the different routing styles.
938 +=== ===
598 598  
599 -== Port Offset ==
940 +{{id name="aspectRatio"/}}Aspect RatioThe aspect ratio of a drawing is the ratio of its total width to its total height. This option gives some control over that ratio, although in most cases it is only interpreted as a hint on how to arrange multiple connected components, hence the actual aspect ratio will probably be different from what has been specified with the option.
600 600  
601 -{{id name="portOffset"/}}
942 +=== ===
602 602  
603 -The port offset is used to specify how much space a layout algorithm should leave between a port and the border of its node. This is usually zero, but doesn't have to be. If the offset is not defined for a given port, a layout algorithm can try to infer the offset from the port's coordinates and its node's size in the input graph. This of course requires both properties to be set to sensible values.
944 +{{id name="commentBox"/}}Comment BoxA node that is marked as comment box is treated as a label that needs to be placed somewhere. In contrast to normal node labels (modeled with a KLabel instance), comment boxes may have connections to other nodes, as in the following example.
604 604  
946 +[[image:attach:comment_box.png]]
947 +
948 +=== ===
949 +
950 +{{id name="hypernode"/}}HypernodeA node that is marked as hypernode has a special role in the graph structure, since all its incident edges are treated as parts of the same [[hyperedge>>url:http://en.wikipedia.org/wiki/Hypergraph||shape="rect"]]. Example: relation vertices in [[Ptolemy>>url:http://ptolemy.eecs.berkeley.edu/||shape="rect"]] models.
951 +
952 +=== ===
953 +
954 +{{id name="layoutHierarchy"/}}Layout HierarchyIf this option is supported and active, the layout algorithm is requested to process the full hierarchy contained in the input node. This means that instead of executing another algorithm on each hierarchy level, all levels are arranged in a single algorithm execution.
955 +
956 +=== ===
957 +
958 +{{id name="noLayout"/}}No LayoutElements that are marked with this option are excluded from layout. This is used to identify diagram objects that should not be regarded as graph elements.
959 +
960 +=== ===
961 +
962 +{{id name="portAlignment"/}}Port AlignmentThe port alignment controls how ports are distributed over their respective edge.
963 +
964 +This option is only relevant if port constraints are {{code language="none"}}FREE{{/code}}, {{code language="none"}}FIXED_SIDE{{/code}}, or {{code language="none"}}FIXED_ORDER{{/code}}.
965 +
966 +The following settings are possible:
967 +
968 +* {{code language="none"}}UNDEFINED{{/code}}
969 +Defaults to {{code language="none"}}JUSTIFIED{{/code}}.
970 +* {{code language="none"}}JUSTIFIED{{/code}}
971 +Distributes the ports evenly over the whole usable space (for usable space, see [[additional port space>>doc:||anchor="addPortSpace"]]).
972 +* {{code language="none"}}BEGIN{{/code}}
973 +Places the ports at top-/leftmost position with [[port spacing>>doc:||anchor="portSpacing"]] between them.
974 +* {{code language="none"}}CENTER{{/code}}
975 +Places the ports centered in the usable space with port spacing between them.
976 +* {{code language="none"}}END{{/code}}
977 +Places the ports at bottom-/rightmost position with port spacing between them.
978 +
979 +Port alignment can also be set as specialized options {{code language="none"}}portAlignment.{north|south|east|west{{/code}}}. These options overwrite the general policy for the respective side. Setting one of these to {{code language="none"}}UNDEFINED{{/code}} defaults it to the general port alignment.
980 +
981 +=== ===
982 +
983 +{{id name="portAnchor"/}}Port Anchor OffsetSince ports have a size, we need a concrete point inside the port that edges should start or end in. In KLay Layered, this is referred to as the //port anchor//. By default, the center of each port is used as its port anchor, but this behavior can be overridden by setting an explicit port anchor.
984 +
985 +In the following example, the port anchor of the left port was moved upwards, while the port anchor of the second port was moved downwards:
986 +
987 +[[image:attach:KLay Layered Layout Options@port_anchors.png]]
988 +
989 +=== ===
990 +
991 +{{id name="portOffset"/}}Port OffsetThe port offset is used to specify how much space a layout algorithm should leave between a port and the border of its node. This is usually zero, but doesn't have to be. If the offset is not defined for a given port, a layout algorithm can try to infer the offset from the port's coordinates and its node's size in the input graph. This of course requires both properties to be set to sensible values.
992 +
605 605  Set this property if one of the following cases applies:
606 606  
607 607  * The port constraints on a node are set to FREE, FIXED_SIDES or FIXED_ORDER.
608 608  * The port constraints on a node are set to FIXED_RATIO or FIXED_POS, and the size of the node is not fixed. (Note that this is especially true for ports of compound nodes.)
997 +
998 +=== ===
999 +
1000 +{{id name="portSpacing"/}}Port SpacingThe port spacing determines how much space KLay Layered should leave between the ports of each side. This option is only relevant if the node size depends on the ports, that is, if the size constraints include {{code language="none"}}SizeConstraint.PORTS{{/code}}.
addPortSpace.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.XWikiGuest
Size
... ... @@ -1,0 +1,1 @@
1 +20.2 KB
Content
comment_box.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.XWikiGuest
Size
... ... @@ -1,0 +1,1 @@
1 +5.5 KB
Content
edge_routing.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.XWikiGuest
Size
... ... @@ -1,0 +1,1 @@
1 +57.8 KB
Content
layout_algorithm.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.XWikiGuest
Size
... ... @@ -1,0 +1,1 @@
1 +20.0 KB
Content
Confluence.Code.ConfluencePageClass[0]
Id
... ... @@ -1,1 +1,1 @@
1 -9470006
1 +7111094
URL
... ... @@ -1,1 +1,1 @@
1 -https://rtsys.informatik.uni-kiel.de/confluence//wiki/spaces/KIELER/pages/9470006/KIML Layout Options
1 +https://rtsys.informatik.uni-kiel.de/confluence//wiki/spaces/KIELER/pages/7111094/KIML Layout Options