Show last authors
1 KLay Layered supports a whole bunch of layout options. Every single one of them is documented here.
2
3 **Contents**
4
5
6
7 {{toc/}}
8
9 = Overview =
10
11 For a general introduction on layout options, see [[the KIML documentation>>doc:KIML Layout Options]]. KLay Layered supports layout options defined by KIML and defines additional custom layout options.
12
13 == Supported KIML Layout Options ==
14
15 KLay Layered supports the following standard layout options defined by KIML. Note that the default value may be altered (highlighted yellow). These layout options are documented on [[KIML's Layout Options page>>doc:KIML Layout Options]].
16
17 |=(((
18 Option
19 )))|=(((
20 ID
21 )))|=(((
22 Type
23 )))|=(((
24 Applies to
25 )))|=(((
26 Default
27 )))
28 |(% colspan="1" %)(% colspan="1" %)
29 (((
30 Additional Port Space
31 )))|(% colspan="1" %)(% colspan="1" %)
32 (((
33 de.cau.cs.kieler.additionalPortSpace
34 )))|(% colspan="1" %)(% colspan="1" %)
35 (((
36 Margins
37 )))|(% colspan="1" %)(% colspan="1" %)
38 (((
39 Nodes
40 )))|(% colspan="1" %)(% colspan="1" %)
41 (((
42 0, 0, 0, 0
43 )))
44 |(((
45 Alignment
46 )))|(((
47 de.cau.cs.kieler.alignment
48 )))|(((
49 Enum
50 )))|(((
51 Nodes
52 )))|(((
53 AUTOMATIC
54 )))
55 |(((
56 Aspect Ratio
57 )))|(((
58 de.cau.cs.kieler.aspectRatio
59 )))|(((
60 Float
61 )))|(((
62 Parents
63 )))|(% class="highlight-yellow" data-highlight-colour="yellow" %)(% class="highlight-yellow" data-highlight-colour="yellow" %)
64 (((
65 1.6
66 )))
67 |(((
68 Border Spacing
69 )))|(((
70 de.cau.cs.kieler.borderSpacing
71 )))|(((
72 Float
73 )))|(((
74 Parents
75 )))|(% class="highlight-yellow" data-highlight-colour="yellow" %)(% class="highlight-yellow" data-highlight-colour="yellow" %)
76 (((
77 20
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 (((
87 Boolean
88 )))|(% colspan="1" %)(% colspan="1" %)
89 (((
90 Nodes
91 )))|(% colspan="1" %)(% colspan="1" %)
92 (((
93 false
94 )))
95 |(((
96 Debug Mode
97 )))|(((
98 de.cau.cs.kieler.debugMode
99 )))|(((
100 Boolean
101 )))|(((
102 Parents
103 )))|(((
104 false
105 )))
106 |(% colspan="1" %)(% colspan="1" %)
107 (((
108 Diagram Type
109 )))|(% colspan="1" %)(% colspan="1" %)
110 (((
111 de.cau.cs.kieler.diagramType
112 )))|(% colspan="1" %)(% colspan="1" %)
113 (((
114 String
115 )))|(% colspan="1" %)(% colspan="1" %)
116 (((
117
118 )))|(% colspan="1" %)(% colspan="1" %)
119 (((
120
121 )))
122 |(((
123 [[Direction>>doc:||anchor="direction"]]
124 )))|(((
125 de.cau.cs.kieler.direction
126 )))|(((
127 Enum
128 )))|(((
129 Parents
130 )))|(((
131 UNDEFINED
132 )))
133 |(% colspan="1" %)(% colspan="1" %)
134 (((
135 Edge Label Placement
136 )))|(% colspan="1" %)(% colspan="1" %)
137 (((
138 de.cau.cs.kieler.edgeLabelPlacement
139 )))|(% colspan="1" %)(% colspan="1" %)
140 (((
141 Enum
142 )))|(% colspan="1" %)(% colspan="1" %)
143 (((
144 Labels
145 )))|(% colspan="1" %)(% colspan="1" %)
146 (((
147 UNDEFINED
148 )))
149 |(((
150 Edge Routing
151 )))|(((
152 de.cau.cs.kieler.edgeRouting
153 )))|(((
154 Enum
155 )))|(((
156 Parents
157 )))|(% class="highlight-yellow" data-highlight-colour="yellow" %)(% class="highlight-yellow" data-highlight-colour="yellow" %)
158 (((
159 POLYLINE
160 )))
161 |(% colspan="1" %)(% colspan="1" %)
162 (((
163 Hypernode
164 )))|(% colspan="1" %)(% colspan="1" %)
165 (((
166 de.cau.cs.kieler.hypernode
167 )))|(% colspan="1" %)(% colspan="1" %)
168 (((
169 Boolean
170 )))|(% colspan="1" %)(% colspan="1" %)
171 (((
172 Nodes
173 )))|(% colspan="1" %)(% colspan="1" %)
174 (((
175 false
176 )))
177 |(% colspan="1" %)(% colspan="1" %)
178 (((
179 Label Side
180 )))|(% colspan="1" %)(% colspan="1" %)
181 (((
182 de.cau.cs.kieler.labelSide
183 )))|(% colspan="1" %)(% colspan="1" %)
184 (((
185 Enum
186 )))|(% colspan="1" %)(% colspan="1" %)
187 (((
188 Parents
189 )))|(% colspan="1" %)(% colspan="1" %)
190 (((
191 SMART
192 )))
193 |(((
194 Label Spacing
195 )))|(((
196 de.cau.cs.kieler.labelSpacing
197 )))|(((
198 Float
199 )))|(((
200 Edges
201 Nodes
202 )))|(((
203 -1.0
204 )))
205 |(((
206 Layout Hierarchy
207 )))|(((
208 de.cau.cs.kieler.layoutHierarchy
209 )))|(((
210 Boolean
211 )))|(((
212 Parents
213 )))|(((
214 false
215 )))
216 |(% colspan="1" %)(% colspan="1" %)
217 (((
218 Minimal Height
219 )))|(% colspan="1" %)(% colspan="1" %)
220 (((
221 de.cau.cs.kieler.minHeight
222 )))|(% colspan="1" %)(% colspan="1" %)
223 (((
224 Float
225 )))|(% colspan="1" %)(% colspan="1" %)
226 (((
227 Nodes
228 Parents
229 )))|(% colspan="1" %)(% colspan="1" %)
230 (((
231 0.0
232 )))
233 |(% colspan="1" %)(% colspan="1" %)
234 (((
235 Minimal Width
236 )))|(% colspan="1" %)(% colspan="1" %)
237 (((
238 de.cau.cs.kieler.minWidth
239 )))|(% colspan="1" %)(% colspan="1" %)
240 (((
241 Float
242 )))|(% colspan="1" %)(% colspan="1" %)
243 (((
244 Nodes
245 Parents
246 )))|(% colspan="1" %)(% colspan="1" %)
247 (((
248 0.0
249 )))
250 |(% colspan="1" %)(% colspan="1" %)
251 (((
252 No Layout
253 )))|(% colspan="1" %)(% colspan="1" %)
254 (((
255 de.cau.cs.kieler.noLayout
256 )))|(% colspan="1" %)(% colspan="1" %)
257 (((
258 Boolean
259 )))|(% colspan="1" %)(% colspan="1" %)
260 (((
261
262 )))|(% colspan="1" %)(% colspan="1" %)
263 (((
264 false
265 )))
266 |(% colspan="1" %)(% colspan="1" %)
267 (((
268 Node Label Placement
269 )))|(% colspan="1" %)(% colspan="1" %)
270 (((
271 de.cau.cs.kieler.nodeLabelPlacement
272 )))|(% colspan="1" %)(% colspan="1" %)
273 (((
274 EnumSet
275 )))|(% colspan="1" %)(% colspan="1" %)
276 (((
277 Nodes
278 )))|(% colspan="1" %)(% colspan="1" %)
279 (((
280
281 )))
282 |(((
283 Port Constraints
284 )))|(((
285 de.cau.cs.kieler.portConstraints
286 )))|(((
287 Enum
288 )))|(((
289 Nodes
290 )))|(((
291 UNDEFINED
292 )))
293 |(% colspan="1" %)(% colspan="1" %)
294 (((
295 Port Label Placement
296 )))|(% colspan="1" %)(% colspan="1" %)
297 (((
298 de.cau.cs.kieler.portLabelPlacement
299 )))|(% colspan="1" %)(% colspan="1" %)
300 (((
301 Enum
302 )))|(% colspan="1" %)(% colspan="1" %)
303 (((
304 Nodes
305 )))|(% colspan="1" %)(% colspan="1" %)
306 (((
307 OUTSIDE
308 )))
309 |(% colspan="1" %)(% colspan="1" %)
310 (((
311 Port Offset
312 )))|(% colspan="1" %)(% colspan="1" %)
313 (((
314 de.cau.cs.kieler.offset
315 )))|(% colspan="1" %)(% colspan="1" %)
316 (((
317 Float
318 )))|(% colspan="1" %)(% colspan="1" %)
319 (((
320 Ports
321 )))|(% colspan="1" %)(% colspan="1" %)
322 (((
323
324 )))
325 |(% colspan="1" %)(% colspan="1" %)
326 (((
327 Port Side
328 )))|(% colspan="1" %)(% colspan="1" %)
329 (((
330 de.cau.cs.kieler.portSide
331 )))|(% colspan="1" %)(% colspan="1" %)
332 (((
333 Enum
334 )))|(% colspan="1" %)(% colspan="1" %)
335 (((
336 Ports
337 )))|(% colspan="1" %)(% colspan="1" %)
338 (((
339 UNDEFINED
340 )))
341 |(% colspan="1" %)(% colspan="1" %)
342 (((
343 Port Spacing
344 )))|(% colspan="1" %)(% colspan="1" %)
345 (((
346 de.cau.cs.kieler.portSpacing
347 )))|(% colspan="1" %)(% colspan="1" %)
348 (((
349 Float
350 )))|(% colspan="1" %)(% colspan="1" %)
351 (((
352 Nodes
353 )))|(% class="highlight-yellow" colspan="1" data-highlight-colour="yellow" %)(% class="highlight-yellow" colspan="1" data-highlight-colour="yellow" %)
354 (((
355 10
356 )))
357 |(((
358 Priority
359 )))|(((
360 de.cau.cs.kieler.priority
361 )))|(((
362 Int
363 )))|(((
364 Edges
365 Nodes
366 )))|(((
367
368 )))
369 |(% colspan="1" %)(% colspan="1" %)
370 (((
371 Randomization Seed
372 )))|(% colspan="1" %)(% colspan="1" %)
373 (((
374 de.cau.cs.kieler.randomSeed
375 )))|(% colspan="1" %)(% colspan="1" %)
376 (((
377 Int
378 )))|(% colspan="1" %)(% colspan="1" %)
379 (((
380 Parents
381 )))|(% class="highlight-yellow" colspan="1" data-highlight-colour="yellow" %)(% class="highlight-yellow" colspan="1" data-highlight-colour="yellow" %)
382 (((
383 1
384 )))
385 |(% colspan="1" %)(% colspan="1" %)
386 (((
387 Separate Connected Components
388 )))|(% colspan="1" %)(% colspan="1" %)
389 (((
390 de.cau.cs.kieler.separateConnComp
391 )))|(% colspan="1" %)(% colspan="1" %)
392 (((
393 Boolean
394 )))|(% colspan="1" %)(% colspan="1" %)
395 (((
396 Parents
397 )))|(% class="highlight-yellow" colspan="1" data-highlight-colour="yellow" %)(% class="highlight-yellow" colspan="1" data-highlight-colour="yellow" %)
398 (((
399 true
400 )))
401 |(% colspan="1" %)(% colspan="1" %)
402 (((
403 Size Constraint
404 )))|(% colspan="1" %)(% colspan="1" %)
405 (((
406 de.cau.cs.kieler.sizeConstraint
407 )))|(% colspan="1" %)(% colspan="1" %)
408 (((
409 EnumSet
410 )))|(% colspan="1" %)(% colspan="1" %)
411 (((
412 Nodes
413 )))|(% colspan="1" %)(% colspan="1" %)
414 (((
415
416 )))
417 |(% colspan="1" %)(% colspan="1" %)
418 (((
419 Size Options
420 )))|(% colspan="1" %)(% colspan="1" %)
421 (((
422 de.cau.cs.kieler.sizeOptions
423 )))|(% colspan="1" %)(% colspan="1" %)
424 (((
425 EnumSet
426 )))|(% colspan="1" %)(% colspan="1" %)
427 (((
428 Nodes
429 )))|(% colspan="1" %)(% colspan="1" %)
430 (((
431 DEFAULT_MINIMUM_SIZE
432 )))
433 |(% colspan="1" %)(% colspan="1" %)
434 (((
435 Spacing
436 )))|(% colspan="1" %)(% colspan="1" %)
437 (((
438 de.cau.cs.kieler.spacing
439 )))|(% colspan="1" %)(% colspan="1" %)
440 (((
441 Float
442 )))|(% colspan="1" %)(% colspan="1" %)
443 (((
444 Parents
445 )))|(% class="highlight-yellow" colspan="1" data-highlight-colour="yellow" %)(% class="highlight-yellow" colspan="1" data-highlight-colour="yellow" %)
446 (((
447 20
448 )))
449
450 == Custom Layout Options ==
451
452 |=(((
453 Option
454 )))|=(((
455 ID
456 )))|=(((
457 Type
458 )))|=(((
459 Applies to
460 )))|=(((
461 Default
462 )))|=(% colspan="1" %)(% colspan="1" %)
463 (((
464 Dependency
465 )))
466 |(% colspan="1" %)(% colspan="1" %)
467 (((
468 [[Add Unnecessary Bendpoints>>doc:||anchor="addUnnecessaryBendpoints"]]
469 )))|(% colspan="1" %)(% colspan="1" %)
470 (((
471 de.cau.cs.kieler.klay.layered.unnecessaryBendpoints
472 )))|(% colspan="1" %)(% colspan="1" %)
473 (((
474 Boolean
475 )))|(% colspan="1" %)(% colspan="1" %)
476 (((
477 Parents
478 )))|(% colspan="1" %)(% colspan="1" %)
479 (((
480 false
481 )))|(% colspan="1" %)(% colspan="1" %)
482 (((
483
484 )))
485 |(((
486 [[Crossing Minimization>>doc:||anchor="crossingMinimization"]]
487 )))|(((
488 de.cau.cs.kieler.klay.layered.crossMin
489 )))|(((
490 Enum
491 )))|(((
492 Parents
493 )))|(((
494 LAYER_SWEEP
495 )))|(% colspan="1" %)(% colspan="1" %)
496 (((
497
498 )))
499 |(((
500 [[Cycle Breaking>>doc:||anchor="cycleBre"]]
501 )))|(((
502 de.cau.cs.kieler.klay.layered.cycleBreaking
503 )))|(((
504 Enum
505 )))|(((
506 Parents
507 )))|(((
508 GREEDY
509 )))|(% colspan="1" %)(% colspan="1" %)
510 (((
511
512 )))
513 |(((
514 [[Edge Spacing Factor>>doc:||anchor="edgeSpacingFactor"]]
515 )))|(((
516 de.cau.cs.kieler.klay.layered.edgeSpacingFactor
517 )))|(((
518 Float
519 )))|(((
520 Parents
521 )))|(((
522 0.5
523 )))|(% colspan="1" %)(% colspan="1" %)
524 (((
525
526 )))
527 |(% colspan="1" %)(% colspan="1" %)
528 (((
529 [[Edge Label Side Selection>>doc:||anchor="edgeLabelSideSelection"]]
530 )))|(% colspan="1" %)(% colspan="1" %)
531 (((
532 de.cau.cs.kieler.klay.layered.edgeLabelSideSelection
533 )))|(% colspan="1" %)(% colspan="1" %)
534 (((
535 Enum
536 )))|(% colspan="1" %)(% colspan="1" %)
537 (((
538 Parents
539 )))|(% colspan="1" %)(% colspan="1" %)
540 (((
541 SMART
542 )))|(% colspan="1" %)(% colspan="1" %)
543 (((
544
545 )))
546 |(% colspan="1" %)(% colspan="1" %)
547 (((
548 [[Feedback Edges>>doc:||anchor="feedbackEdges"]]
549 )))|(% colspan="1" %)(% colspan="1" %)
550 (((
551 de.cau.cs.kieler.klay.layered.feedBackEdges
552 )))|(% colspan="1" %)(% colspan="1" %)
553 (((
554 Boolean
555 )))|(% colspan="1" %)(% colspan="1" %)
556 (((
557 Parents
558 )))|(% colspan="1" %)(% colspan="1" %)
559 (((
560 false
561 )))|(% colspan="1" %)(% colspan="1" %)
562 (((
563
564 )))
565 |(% colspan="1" %)(% colspan="1" %)
566 (((
567 [[Fixed Alignment>>doc:||anchor="fixedAlignment"]]
568 )))|(% colspan="1" %)(% colspan="1" %)
569 (((
570 de.cau.cs.kieler.klay.layered.fixedAlignment
571 )))|(% colspan="1" %)(% colspan="1" %)
572 (((
573 Enum
574 )))|(% colspan="1" %)(% colspan="1" %)
575 (((
576 Parents
577 )))|(% colspan="1" %)(% colspan="1" %)
578 (((
579 NONE
580 )))|(% colspan="1" %)(% colspan="1" %)
581 (((
582 nodePlace=BRANDES_KOEPF
583 )))
584 |(% colspan="1" %)(% colspan="1" %)
585 (((
586 [[Interactive Reference Point>>doc:||anchor="interactiveReferencePoint"]]
587 )))|(% colspan="1" %)(% colspan="1" %)
588 (((
589 de.cau.cs.kieler.klay.layered.interactiveReferencePoint
590 )))|(% colspan="1" %)(% colspan="1" %)
591 (((
592 Enum
593 )))|(% colspan="1" %)(% colspan="1" %)
594 (((
595 Parents
596 )))|(% colspan="1" %)(% colspan="1" %)
597 (((
598 CENTER
599 )))|(% colspan="1" %)(% colspan="1" %)
600 (((
601
602 )))
603 |(% colspan="1" %)(% colspan="1" %)
604 (((
605 [[Layer Constraint>>doc:||anchor="layerConstraint"]]
606 )))|(% colspan="1" %)(% colspan="1" %)
607 (((
608 de.cau.cs.kieler.klay.layered.layerConstraint
609 )))|(% colspan="1" %)(% colspan="1" %)
610 (((
611 Enum
612 )))|(% colspan="1" %)(% colspan="1" %)
613 (((
614 Nodes
615 )))|(% colspan="1" %)(% colspan="1" %)
616 (((
617 NONE
618 )))|(% colspan="1" %)(% colspan="1" %)
619 (((
620
621 )))
622 |(% colspan="1" %)(% colspan="1" %)
623 (((
624 [[Linear Segments Deflection Dampening>>doc:||anchor="deflectionDampening"]]
625 )))|(% colspan="1" %)(% colspan="1" %)
626 (((
627 de.cau.cs.kieler.klay.layered.linearSegmentsDeflectionDampening
628 )))|(% colspan="1" %)(% colspan="1" %)
629 (((
630 Float
631 )))|(% colspan="1" %)(% colspan="1" %)
632 (((
633 Parents
634 )))|(% colspan="1" %)(% colspan="1" %)
635 (((
636 0.3
637 )))|(% colspan="1" %)(% colspan="1" %)
638 (((
639 nodePlace=LINEAR_SEGMENTS
640 )))
641 |(% colspan="1" %)(% colspan="1" %)
642 (((
643 [[Maximal Iterations>>doc:||anchor="maximalIterations"]]
644 )))|(% colspan="1" %)(% colspan="1" %)
645 (((
646 de.cau.cs.kieler.klay.layered.nodeLayering
647 )))|(% colspan="1" %)(% colspan="1" %)
648 (((
649 Int
650 )))|(% colspan="1" %)(% colspan="1" %)
651 (((
652 Parents
653 )))|(% colspan="1" %)(% colspan="1" %)
654 (((
655 10.000.000
656 )))|(% colspan="1" %)(% colspan="1" %)
657 (((
658 nodeLayering=NETWORK_SIMPLEX
659 )))
660 |(% colspan="1" %)(% colspan="1" %)
661 (((
662 [[Merge Edges>>doc:||anchor="mergeEdges"]]
663 )))|(% colspan="1" %)(% colspan="1" %)
664 (((
665 de.cau.cs.kieler.klay.layered.mergeEdges
666 )))|(% colspan="1" %)(% colspan="1" %)
667 (((
668 Boolean
669 )))|(% colspan="1" %)(% colspan="1" %)
670 (((
671 Parents
672 )))|(% colspan="1" %)(% colspan="1" %)
673 (((
674 false
675 )))|(% colspan="1" %)(% colspan="1" %)
676 (((
677
678 )))
679 |(% colspan="1" %)(% colspan="1" %)
680 (((
681 [[Merge Hierarchy-Crossing Edges>>doc:||anchor="mergeHierarchyEdges"]]
682 )))|(% colspan="1" %)(% colspan="1" %)
683 (((
684 de.cau.cs.kieler.klay.layered.mergeHierarchyPorts
685 )))|(% colspan="1" %)(% colspan="1" %)
686 (((
687 Boolean
688 )))|(% colspan="1" %)(% colspan="1" %)
689 (((
690 Parents
691 )))|(% colspan="1" %)(% colspan="1" %)
692 (((
693 true
694 )))|(% colspan="1" %)(% colspan="1" %)
695 (((
696 layoutHierarchy=true
697 )))
698 |(((
699 [[Node Layering>>doc:||anchor="nodeLayering"]]
700 )))|(((
701 de.cau.cs.kieler.klay.layered.nodeLayering
702 )))|(((
703 Enum
704 )))|(((
705 Parents
706 )))|(((
707 NETWORK_SIMPLEX
708 )))|(% colspan="1" %)(% colspan="1" %)
709 (((
710
711 )))
712 |(% colspan="1" %)(% colspan="1" %)
713 (((
714 [[Node Placement>>doc:||anchor="nodePlacement"]]
715 )))|(% colspan="1" %)(% colspan="1" %)
716 (((
717 de.cau.cs.kieler.klay.layered.nodePlace
718 )))|(% colspan="1" %)(% colspan="1" %)
719 (((
720 Enum
721 )))|(% colspan="1" %)(% colspan="1" %)
722 (((
723 Parents
724 )))|(% colspan="1" %)(% colspan="1" %)
725 (((
726 BRANDES_KOEPF
727 )))|(% colspan="1" %)(% colspan="1" %)
728 (((
729
730 )))
731 |(% colspan="1" %)(% colspan="1" %)
732 (((
733 [[Port Anchor Offset>>doc:||anchor="portAnchor"]]
734 )))|(% colspan="1" %)(% colspan="1" %)
735 (((
736 de.cau.cs.kieler.klay.layered.portAnchor
737 )))|(% colspan="1" %)(% colspan="1" %)
738 (((
739 Object
740 )))|(% colspan="1" %)(% colspan="1" %)
741 (((
742 Ports
743 )))|(% colspan="1" %)(% colspan="1" %)
744 (((
745
746 )))|(% colspan="1" %)(% colspan="1" %)
747 (((
748
749 )))
750 |(((
751 [[Thoroughness>>doc:||anchor="thoroughness"]]
752 )))|(((
753 de.cau.cs.kieler.klay.layered.thoroughness
754 )))|(((
755 Int
756 )))|(((
757 Parents
758 )))|(((
759 7
760 )))|(% colspan="1" %)(% colspan="1" %)
761 (((
762
763 )))
764
765 = Detailed Documentation =
766
767 This section explains every layout option in more detail. See [[the KIML documentation>>doc:KIML Layout Options]] for more information on KIML layout options. Those options are only mentioned here if KLay Layered adds some custom behavior.
768
769 == Add Unnecessary Bendpoints ==
770
771
772
773 {{id name="addUnnecessaryBendpoints"/}}
774
775 By default, KLay Layered tries not to add bendpoints to an edge at positions where the edge doesn't change direction since there's no real bend there. Turning this option on forces such bend points. More specifically, a bend point is added for each edge that spans more than one layer at the point where it crosses a layer. If hierarchy layout is turned on, a bend point is also added whenever the edge crosses a hierarchy boundary.
776
777 == Crossing Minimization ==
778
779
780
781 {{id name="crossingMinimization"/}}
782
783 Crossing minimization determines the ordering of nodes in each layer, which influences the number of edge crossings. This option switches between one of several algorithms that can be used to minimize crossings. Possible values are:
784
785 * LAYER_SWEEP
786 The layer sweep algorithm iterates multiple times over the layers, trying to find node orderings that minimize the number of crossings. The algorithm uses randomization to increase the odds of finding a good result. To improve its results, consider increasing the //Thoroughness// option, which influences the number of iterations done. The //Randomization// seed also influences results.
787 * INTERACTIVE
788 Orders the nodes of each layer by comparing their positions before the layout algorithm was started. The idea is that the relative order of nodes as it was before layout was applied is not changed. This of course requires valid positions for all nodes to have been set on the input graph before calling the layout algorithm. The interactive layer sweep algorithm uses the //Interactive Reference Point// option to determine which reference point of nodes are used to compare positions.
789
790 == Cycle Breaking ==
791
792
793
794 {{id name="cycleBreaking"/}}
795
796 KLay Layered tries to position nodes in a way that all edges point rightwards. This is not possible if the input graph has cycles. Such cycles have to be broken by reversing as few edges as possible. The reversed edges end up pointing leftwards in the resulting diagram. There are different cycle breaking algorithms available:
797
798 * GREEDY
799 This algorithm reverses edges greedily. The algorithm tries to avoid edges that have the //Priority// property set.
800 * INTERACTIVE
801 The interactive algorithm tries to reverse edges that already pointed leftwards in the input graph. This requires node and port coordinates to have been set to sensible values.
802
803 == Direction ==
804
805
806
807 {{id name="direction"/}}
808
809 The layout direction influences where the majority of edges in the final layout will point to. With data flow diagrams, this will usually be to the right. With control flow diagrams, it might be downwards. The layout direction defaults to {{code language="none"}}UNDEFINED{{/code}}. This causes KLay Layered to calculate a layout direction based on the {{code language="none"}}ASPECT_RATIO{{/code}} setting. As of now, if the aspect ratio is >=1 (that is, if the diagram should be wider than it is high), the direction is set to {{code language="none"}}RIGHT{{/code}}. Otherwise, it is set to {{code language="none"}}DOWN{{/code}}.
810
811 == Edge Spacing Factor ==
812
813
814
815 {{id name="edgeSpacingFactor"/}}
816
817 The edge spacing factor determines the amount of space between edges, relative to the regular //Spacing// value. The idea is that we don't need as much space between edges as we do between nodes.
818
819 [[image:attach:edgeSpacingFactor.png]]
820
821 == Edge Label Side Selection ==
822
823
824
825 {{id name="edgeLabelSideSelection"/}}
826
827 Determines how KLay Layered places edge labels. The following strategies are available:
828
829 * ALWAYS_UP
830 Always places edge labels above the edge.
831 * ALWAYS_DOWN
832 Always places edge labels below the edge.
833 * DIRECTION_UP
834 Places edge labels above edges pointing right, and below edges pointing left.
835 * DIRECTION_DOWN
836 Places edge labels below edges pointing right, and above edges pointing left.
837 * SMART
838 Uses a heuristic that determines the best edge label placement, also taking the placement of port labels into account.
839
840 == Feedback Edges ==
841
842
843
844 {{id name="feedbackEdges"/}}
845
846 Feedback edges are edges that feed the output of a node back to be the input of a previous node. This option controls how feedback edges are routed if port constraints are FREE. This influences how much emphasis is put on feedback edges.
847
848 With feedback edges:
849
850 [[image:attach:feedback_on.png]]
851
852 Without feedback edges:
853
854 [[image:attach:feedback_off.png]]
855
856 == Fixed Alignment ==
857
858
859
860 {{id name="fixedAlignment"/}}
861
862 The BRANDES_KOEPF node placement algorithm computes several different node placements. One of the placements is chosen by the algorithm, usually the one that takes the least amount of space. With this option, a particular result can be chosen.
863
864 This option should usually be left alone.
865
866 == Interactive Reference Point ==
867
868
869
870 {{id name="interactiveReferencePoint"/}}
871
872 Interactive layering, crossing minimization, and cycle breaking algorithms use node positions to sort nodes into layers or to determine the order of nodes in each layer. However, it is unclear if for example the top left corners of nodes should be compared, or the bottom left corners — different settings might lead to different results. The interactive reference point determines which part of nodes is used to compare their positions. It provides the following settings:
873
874 * TOP_LEFT
875 The top left corner of a node is taken as the reference point.
876 * CENTER
877 The center of a node is taken as the reference point.
878
879 == Layer Constraint ==
880
881
882
883 {{id name="layerConstraint"/}}
884
885 The layer a node is placed in is usually computed by the layer assignment algorithms. However, sometimes certain nodes need to be placed in the first or in the last layer (for example, nodes that represent inputs from the outside). The layer constraint option can be set on such nodes to do just that.
886
887 [[image:attach:layer_constraints.png]]
888
889 {{note}}
890 This option can also be set to {{code language="none"}}FIRST_SEPARATE{{/code}} and {{code language="none"}}LAST_SEPARATE{{/code}}. These are for internal use only and should not have been publicly exposed in the first place. Using them can result in layout problems.
891 {{/note}}
892
893 == Linear Segments Deflection Dampening ==
894
895
896
897 {{id name="deflectionDampening"/}}
898
899 {{note}}
900 This is a very advanced layout option that you normally shouldn't worry about.
901 {{/note}}
902
903 The linear segments node placer can sometimes place nodes in a way that results in unnecessarily large diagrams. This option dampens how much the nodes are moved around. A dampening factor of 1.0 disables dampening and just lets the node placer do what it wants. A more conservative dampening factor of 0.3 (the default) restricts the freedom of the node placer a bit more.
904
905 == Maximal Iterations ==
906
907
908
909 {{id name="maximalIterations"/}}
910
911 Delimits the amount of depth-first-search iterations performed by the network simplex layering strategy. Large, highly connected graphs might require a long time to be processed. This property serves as a timeout after which an exception is raised.
912
913 == Merge Edges ==
914
915
916
917 {{id name="mergeEdges"/}}
918
919 In the KGraph model, edges can either connect to nodes through ports or directly. In the latter case, KLay Layered will introduce a virtual port for each edge, which results in all edges connecting to the node at different points in the final drawing. If this option is switched on, KLay Layered will only generate up to one input and one output port for each node. The option is set on a parent node and applies to all of its children, but not to the parent node itself.
920
921 [[image:attach:merging.png]]
922
923 == Merge Hierarchy-Crossing Edges ==
924
925
926
927 {{id name="mergeHierarchyEdges"/}}
928
929 If hierarchical layout is active, this option is the hierarchical equivalent to //Merge Edges//. If set to true on a compound node, all hierarchy-crossing edges that start or end inside that compound node are eligible for merging.
930
931 [[image:attach:merge_hierarchy_edges.png]]
932
933 == Node Layering ==
934
935
936
937 {{id name="nodeLayering"/}}
938
939 Decides which algorithm is used to compute the layer each node is placed in. We have different algorithms available, with different optimization goals:
940
941 * NETWORK_SIMPLEX
942 This algorithm tries to minimize the length of edges. This is the most computationally intensive algorithm. The number of iterations after which it aborts if it hasn't found a result yet can be set with the [[Maximal Iterations>>doc:||anchor="maximalInterations"]] option.
943 * LONGEST_PATH
944 A very simple algorithm that distributes nodes along their longest path to a sink node.
945 * INTERACTIVE
946 Distributes the nodes into layers by comparing their positions before the layout algorithm was started. The idea is that the relative horizontal order of nodes as it was before layout was applied is not changed. This of course requires valid positions for all nodes to have been set on the input graph before calling the layout algorithm. The interactive node layering algorithm uses the //Interactive Reference Point// option to determine which reference point of nodes are used to compare positions.
947
948 == Node Placement ==
949
950
951
952 {{id name="nodePlacement"/}}
953
954 Decides which algorithm is used to compute the y coordinate of each node. This influences the length of edges, the number of edge bends, and the height of the diagram. We have different algorithms available, with different optimization goals:
955
956 * BRANDES_KOEPF
957 Minimizes the number of edge bends at the expense of diagram size: diagrams drawn with this algorithm are usually higher than diagrams drawn with other algorithms.
958 * LINEAR_SEGMENTS
959 Computes a balanced placement.
960 * BUCHHEIM_JUENGER_LEIPERT
961 Also computes a balanced placement, but a little faster.
962 * SIMPLE
963 Minimizes the area at the expense of... well, pretty much everything else.
964
965 == Port Anchor Offset ==
966
967
968
969 {{id name="portAnchor"/}}
970
971 Since 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.
972
973 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:
974
975 [[image:attach:port_anchors.png]]
976
977 == Thoroughness ==
978
979
980
981 {{id name="thoroughness"/}}
982
983 There are heuristics in use all over KLay Layered whose results often improve with the number of iterations computed. The thoroughness is a measure for telling KLay Layered to compute more iterations to improve the quality of results, at the expense of performance.