Show last authors
1 {{warning}}
2 This is preliminary and incomplete documentation. You've been warned.
3 {{/warning}}
4
5 KLay Layered supports a whole bunch of layout options. Every single one of them is documented here.
6
7 **Contents**
8
9
10
11 {{toc/}}
12
13 = Overview =
14
15 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.
16
17 == Supported KIML Layout Options ==
18
19 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]].
20
21 |=(((
22 Option
23 )))|=(((
24 ID
25 )))|=(((
26 Type
27 )))|=(((
28 Applies to
29 )))|=(((
30 Default
31 )))
32 |(((
33 Alignment
34 )))|(((
35 de.cau.cs.kieler.alignment
36 )))|(((
37 Enum
38 )))|(((
39 Nodes
40 )))|(((
41 AUTOMATIC
42 )))
43 |(((
44 Aspect Ratio
45 )))|(((
46 de.cau.cs.kieler.aspectRatio
47 )))|(((
48 Float
49 )))|(((
50 Parents
51 )))|(% class="highlight-yellow" data-highlight-colour="yellow" %)(% class="highlight-yellow" data-highlight-colour="yellow" %)
52 (((
53 1.6
54 )))
55 |(((
56 Border Spacing
57 )))|(((
58 de.cau.cs.kieler.borderSpacing
59 )))|(((
60 Float
61 )))|(((
62 Parents
63 )))|(% class="highlight-yellow" data-highlight-colour="yellow" %)(% class="highlight-yellow" data-highlight-colour="yellow" %)
64 (((
65 20
66 )))
67 |(% colspan="1" %)(% colspan="1" %)
68 (((
69 Comment Box
70 )))|(% colspan="1" %)(% colspan="1" %)
71 (((
72 de.cau.cs.kieler.commentBox
73 )))|(% colspan="1" %)(% colspan="1" %)
74 (((
75 Boolean
76 )))|(% colspan="1" %)(% colspan="1" %)
77 (((
78 Nodes
79 )))|(% colspan="1" %)(% colspan="1" %)
80 (((
81 false
82 )))
83 |(((
84 Debug Mode
85 )))|(((
86 de.cau.cs.kieler.debugMode
87 )))|(((
88 Boolean
89 )))|(((
90 Parents
91 )))|(((
92 false
93 )))
94 |(% colspan="1" %)(% colspan="1" %)
95 (((
96 Diagram Type
97 )))|(% colspan="1" %)(% colspan="1" %)
98 (((
99 de.cau.cs.kieler.diagramType
100 )))|(% colspan="1" %)(% colspan="1" %)
101 (((
102 String
103 )))|(% colspan="1" %)(% colspan="1" %)
104 (((
105
106 )))|(% colspan="1" %)(% colspan="1" %)
107 (((
108
109 )))
110 |(((
111 Direction
112 )))|(((
113 de.cau.cs.kieler.direction
114 )))|(((
115 Enum
116 )))|(((
117 Parents
118 )))|(% class="highlight-yellow" data-highlight-colour="yellow" %)(% class="highlight-yellow" data-highlight-colour="yellow" %)
119 (((
120 RIGHT
121 )))
122 |(% colspan="1" %)(% colspan="1" %)
123 (((
124 Edge Label Placement
125 )))|(% colspan="1" %)(% colspan="1" %)
126 (((
127 de.cau.cs.kieler.edgeLabelPlacement
128 )))|(% colspan="1" %)(% colspan="1" %)
129 (((
130 Enum
131 )))|(% colspan="1" %)(% colspan="1" %)
132 (((
133 Labels
134 )))|(% colspan="1" %)(% colspan="1" %)
135 (((
136 UNDEFINED
137 )))
138 |(((
139 Edge Routing
140 )))|(((
141 de.cau.cs.kieler.edgeRouting
142 )))|(((
143 Enum
144 )))|(((
145 Parents
146 )))|(% class="highlight-yellow" data-highlight-colour="yellow" %)(% class="highlight-yellow" data-highlight-colour="yellow" %)
147 (((
148 POLYLINE
149 )))
150 |(% colspan="1" %)(% colspan="1" %)
151 (((
152 Hypernode
153 )))|(% colspan="1" %)(% colspan="1" %)
154 (((
155 de.cau.cs.kieler.hypernode
156 )))|(% colspan="1" %)(% colspan="1" %)
157 (((
158 Boolean
159 )))|(% colspan="1" %)(% colspan="1" %)
160 (((
161 Nodes
162 )))|(% colspan="1" %)(% colspan="1" %)
163 (((
164 false
165 )))
166 |(% colspan="1" %)(% colspan="1" %)
167 (((
168 Label Side
169 )))|(% colspan="1" %)(% colspan="1" %)
170 (((
171 de.cau.cs.kieler.labelSide
172 )))|(% colspan="1" %)(% colspan="1" %)
173 (((
174 Enum
175 )))|(% colspan="1" %)(% colspan="1" %)
176 (((
177 Parents
178 )))|(% colspan="1" %)(% colspan="1" %)
179 (((
180 SMART
181 )))
182 |(((
183 Label Spacing
184 )))|(((
185 de.cau.cs.kieler.labelSpacing
186 )))|(((
187 Float
188 )))|(((
189 Edges
190 Nodes
191 )))|(((
192 -1.0
193 )))
194 |(((
195 Layout Hierarchy
196 )))|(((
197 de.cau.cs.kieler.layoutHierarchy
198 )))|(((
199 Boolean
200 )))|(((
201 Parents
202 )))|(((
203 false
204 )))
205 |(% colspan="1" %)(% colspan="1" %)
206 (((
207 Minimal Height
208 )))|(% colspan="1" %)(% colspan="1" %)
209 (((
210 de.cau.cs.kieler.minHeight
211 )))|(% colspan="1" %)(% colspan="1" %)
212 (((
213 Float
214 )))|(% colspan="1" %)(% colspan="1" %)
215 (((
216 Nodes
217 Parents
218 )))|(% colspan="1" %)(% colspan="1" %)
219 (((
220 0.0
221 )))
222 |(% colspan="1" %)(% colspan="1" %)
223 (((
224 Minimal Width
225 )))|(% colspan="1" %)(% colspan="1" %)
226 (((
227 de.cau.cs.kieler.minWidth
228 )))|(% colspan="1" %)(% colspan="1" %)
229 (((
230 Float
231 )))|(% colspan="1" %)(% colspan="1" %)
232 (((
233 Nodes
234 Parents
235 )))|(% colspan="1" %)(% colspan="1" %)
236 (((
237 0.0
238 )))
239 |(% colspan="1" %)(% colspan="1" %)
240 (((
241 No Layout
242 )))|(% colspan="1" %)(% colspan="1" %)
243 (((
244 de.cau.cs.kieler.noLayout
245 )))|(% colspan="1" %)(% colspan="1" %)
246 (((
247 Boolean
248 )))|(% colspan="1" %)(% colspan="1" %)
249 (((
250
251 )))|(% colspan="1" %)(% colspan="1" %)
252 (((
253 false
254 )))
255 |(% colspan="1" %)(% colspan="1" %)
256 (((
257 Node Label Placement
258 )))|(% colspan="1" %)(% colspan="1" %)
259 (((
260 de.cau.cs.kieler.nodeLabelPlacement
261 )))|(% colspan="1" %)(% colspan="1" %)
262 (((
263 EnumSet
264 )))|(% colspan="1" %)(% colspan="1" %)
265 (((
266 Nodes
267 )))|(% colspan="1" %)(% colspan="1" %)
268 (((
269
270 )))
271 |(((
272 Port Constraints
273 )))|(((
274 de.cau.cs.kieler.portConstraints
275 )))|(((
276 Enum
277 )))|(((
278 Nodes
279 )))|(((
280 UNDEFINED
281 )))
282 |(% colspan="1" %)(% colspan="1" %)
283 (((
284 Port Label Placement
285 )))|(% colspan="1" %)(% colspan="1" %)
286 (((
287 de.cau.cs.kieler.portLabelPlacement
288 )))|(% colspan="1" %)(% colspan="1" %)
289 (((
290 Enum
291 )))|(% colspan="1" %)(% colspan="1" %)
292 (((
293 Nodes
294 )))|(% colspan="1" %)(% colspan="1" %)
295 (((
296 OUTSIDE
297 )))
298 |(% colspan="1" %)(% colspan="1" %)
299 (((
300 Port Offset
301 )))|(% colspan="1" %)(% colspan="1" %)
302 (((
303 de.cau.cs.kieler.offset
304 )))|(% colspan="1" %)(% colspan="1" %)
305 (((
306 Float
307 )))|(% colspan="1" %)(% colspan="1" %)
308 (((
309 Ports
310 )))|(% colspan="1" %)(% colspan="1" %)
311 (((
312
313 )))
314 |(% colspan="1" %)(% colspan="1" %)
315 (((
316 Port Side
317 )))|(% colspan="1" %)(% colspan="1" %)
318 (((
319 de.cau.cs.kieler.portSide
320 )))|(% colspan="1" %)(% colspan="1" %)
321 (((
322 Enum
323 )))|(% colspan="1" %)(% colspan="1" %)
324 (((
325 Ports
326 )))|(% colspan="1" %)(% colspan="1" %)
327 (((
328 UNDEFINED
329 )))
330 |(((
331 Priority
332 )))|(((
333 de.cau.cs.kieler.priority
334 )))|(((
335 Int
336 )))|(((
337 Edges
338 Nodes
339 )))|(((
340
341 )))
342 |(% colspan="1" %)(% colspan="1" %)
343 (((
344 Randomization Seed
345 )))|(% colspan="1" %)(% colspan="1" %)
346 (((
347 de.cau.cs.kieler.randomSeed
348 )))|(% colspan="1" %)(% colspan="1" %)
349 (((
350 Int
351 )))|(% colspan="1" %)(% colspan="1" %)
352 (((
353 Parents
354 )))|(% class="highlight-yellow" colspan="1" data-highlight-colour="yellow" %)(% class="highlight-yellow" colspan="1" data-highlight-colour="yellow" %)
355 (((
356 1
357 )))
358 |(% colspan="1" %)(% colspan="1" %)
359 (((
360 Separate Connected Components
361 )))|(% colspan="1" %)(% colspan="1" %)
362 (((
363 de.cau.cs.kieler.separateConnComp
364 )))|(% colspan="1" %)(% colspan="1" %)
365 (((
366 Boolean
367 )))|(% colspan="1" %)(% colspan="1" %)
368 (((
369 Parents
370 )))|(% class="highlight-yellow" colspan="1" data-highlight-colour="yellow" %)(% class="highlight-yellow" colspan="1" data-highlight-colour="yellow" %)
371 (((
372 true
373 )))
374 |(% colspan="1" %)(% colspan="1" %)
375 (((
376 Size Constraint
377 )))|(% colspan="1" %)(% colspan="1" %)
378 (((
379 de.cau.cs.kieler.sizeConstraint
380 )))|(% colspan="1" %)(% colspan="1" %)
381 (((
382 EnumSet
383 )))|(% colspan="1" %)(% colspan="1" %)
384 (((
385 Nodes
386 )))|(% colspan="1" %)(% colspan="1" %)
387 (((
388
389 )))
390 |(% colspan="1" %)(% colspan="1" %)
391 (((
392 Size Options
393 )))|(% colspan="1" %)(% colspan="1" %)
394 (((
395 de.cau.cs.kieler.sizeOptions
396 )))|(% colspan="1" %)(% colspan="1" %)
397 (((
398 EnumSet
399 )))|(% colspan="1" %)(% colspan="1" %)
400 (((
401 Nodes
402 )))|(% colspan="1" %)(% colspan="1" %)
403 (((
404 DEFAULT_MINIMUM_SIZE
405 )))
406 |(% colspan="1" %)(% colspan="1" %)
407 (((
408 Spacing
409 )))|(% colspan="1" %)(% colspan="1" %)
410 (((
411 de.cau.cs.kieler.spacing
412 )))|(% colspan="1" %)(% colspan="1" %)
413 (((
414 Float
415 )))|(% colspan="1" %)(% colspan="1" %)
416 (((
417 Parents
418 )))|(% class="highlight-yellow" colspan="1" data-highlight-colour="yellow" %)(% class="highlight-yellow" colspan="1" data-highlight-colour="yellow" %)
419 (((
420 20
421 )))
422
423 == Custom Layout Options ==
424
425 |=(((
426 Option
427 )))|=(((
428 ID
429 )))|=(((
430 Type
431 )))|=(((
432 Applies to
433 )))|=(((
434 Default
435 )))|=(% colspan="1" %)(% colspan="1" %)
436 (((
437 Dependency
438 )))
439 |(((
440 [[Crossing Minimization>>doc:||anchor="crossingMinimization"]]
441 )))|(((
442 de.cau.cs.kieler.klay.layered.crossMin
443 )))|(((
444 Enum
445 )))|(((
446 Parents
447 )))|(((
448 LAYER_SWEEP
449 )))|(% colspan="1" %)(% colspan="1" %)
450 (((
451
452 )))
453 |(((
454 [[Cycle Breaking>>doc:||anchor="cycleBre"]]
455 )))|(((
456 de.cau.cs.kieler.klay.layered.cycleBreaking
457 )))|(((
458 Enum
459 )))|(((
460 Parents
461 )))|(((
462 GREEDY
463 )))|(% colspan="1" %)(% colspan="1" %)
464 (((
465
466 )))
467 |(((
468 [[Edge Spacing Factor>>doc:||anchor="edgeSpacingFactor"]]
469 )))|(((
470 de.cau.cs.kieler.klay.layered.edgeSpacingFactor
471 )))|(((
472 Float
473 )))|(((
474 Parents
475 )))|(((
476 0.5
477 )))|(% colspan="1" %)(% colspan="1" %)
478 (((
479
480 )))
481 |(% colspan="1" %)(% colspan="1" %)
482 (((
483 [[Edge Label Side Selection>>doc:||anchor="edgeLabelSideSelection"]]
484 )))|(% colspan="1" %)(% colspan="1" %)
485 (((
486 de.cau.cs.kieler.klay.layered.edgeLabelSideSelection
487 )))|(% colspan="1" %)(% colspan="1" %)
488 (((
489 Enum
490 )))|(% colspan="1" %)(% colspan="1" %)
491 (((
492 Parents
493 )))|(% colspan="1" %)(% colspan="1" %)
494 (((
495 SMART
496 )))|(% colspan="1" %)(% colspan="1" %)
497 (((
498
499 )))
500 |(% colspan="1" %)(% colspan="1" %)
501 (((
502 [[Feedback Edges>>doc:||anchor="feedbackEdges"]]
503 )))|(% colspan="1" %)(% colspan="1" %)
504 (((
505 de.cau.cs.kieler.klay.layered.feedBackEdges
506 )))|(% colspan="1" %)(% colspan="1" %)
507 (((
508 Boolean
509 )))|(% colspan="1" %)(% colspan="1" %)
510 (((
511 Parents
512 )))|(% colspan="1" %)(% colspan="1" %)
513 (((
514 false
515 )))|(% colspan="1" %)(% colspan="1" %)
516 (((
517
518 )))
519 |(% colspan="1" %)(% colspan="1" %)
520 (((
521 [[Fixed Alignment>>doc:||anchor="fixedAlignment"]]
522 )))|(% colspan="1" %)(% colspan="1" %)
523 (((
524 de.cau.cs.kieler.klay.layered.fixedAlignment
525 )))|(% colspan="1" %)(% colspan="1" %)
526 (((
527 Enum
528 )))|(% colspan="1" %)(% colspan="1" %)
529 (((
530 Parents
531 )))|(% colspan="1" %)(% colspan="1" %)
532 (((
533 NONE
534 )))|(% colspan="1" %)(% colspan="1" %)
535 (((
536 nodePlace=BRANDES_KOEPF
537 )))
538 |(% colspan="1" %)(% colspan="1" %)
539 (((
540 [[Interactive Reference Point>>doc:||anchor="interactiveReferencePoint"]]
541 )))|(% colspan="1" %)(% colspan="1" %)
542 (((
543 de.cau.cs.kieler.klay.layered.interactiveReferencePoint
544 )))|(% colspan="1" %)(% colspan="1" %)
545 (((
546 Enum
547 )))|(% colspan="1" %)(% colspan="1" %)
548 (((
549 Parents
550 )))|(% colspan="1" %)(% colspan="1" %)
551 (((
552 CENTER
553 )))|(% colspan="1" %)(% colspan="1" %)
554 (((
555
556 )))
557 |(% colspan="1" %)(% colspan="1" %)
558 (((
559 [[Layer Constraint>>doc:||anchor="layerConstraint"]]
560 )))|(% colspan="1" %)(% colspan="1" %)
561 (((
562 de.cau.cs.kieler.klay.layered.layerConstraint
563 )))|(% colspan="1" %)(% colspan="1" %)
564 (((
565 Enum
566 )))|(% colspan="1" %)(% colspan="1" %)
567 (((
568 Nodes
569 )))|(% colspan="1" %)(% colspan="1" %)
570 (((
571 NONE
572 )))|(% colspan="1" %)(% colspan="1" %)
573 (((
574
575 )))
576 |(% colspan="1" %)(% colspan="1" %)
577 (((
578 [[Maximal Iterations>>doc:||anchor="maximalIterations"]]
579 )))|(% colspan="1" %)(% colspan="1" %)
580 (((
581 de.cau.cs.kieler.klay.layered.nodeLayering
582 )))|(% colspan="1" %)(% colspan="1" %)
583 (((
584 Int
585 )))|(% colspan="1" %)(% colspan="1" %)
586 (((
587 Parents
588 )))|(% colspan="1" %)(% colspan="1" %)
589 (((
590 10.000.000
591 )))|(% colspan="1" %)(% colspan="1" %)
592 (((
593 nodeLayering=NETWORK_SIMPLEX
594 )))
595 |(% colspan="1" %)(% colspan="1" %)
596 (((
597 [[Merge Edges>>doc:||anchor="mergeEdges"]]
598 )))|(% colspan="1" %)(% colspan="1" %)
599 (((
600 de.cau.cs.kieler.klay.layered.mergePorts
601 )))|(% colspan="1" %)(% colspan="1" %)
602 (((
603 Boolean
604 )))|(% colspan="1" %)(% colspan="1" %)
605 (((
606 Parents
607 )))|(% colspan="1" %)(% colspan="1" %)
608 (((
609 false
610 )))|(% colspan="1" %)(% colspan="1" %)
611 (((
612
613 )))
614 |(% colspan="1" %)(% colspan="1" %)
615 (((
616 [[Merge Hierarchy-Crossing Edges>>doc:||anchor="mergeHierarchyEdges"]]
617 )))|(% colspan="1" %)(% colspan="1" %)
618 (((
619 de.cau.cs.kieler.klay.layered.mergeHierarchyPorts
620 )))|(% colspan="1" %)(% colspan="1" %)
621 (((
622 Boolean
623 )))|(% colspan="1" %)(% colspan="1" %)
624 (((
625 Parents
626 )))|(% colspan="1" %)(% colspan="1" %)
627 (((
628 true
629 )))|(% colspan="1" %)(% colspan="1" %)
630 (((
631
632 )))
633 |(((
634 [[Node Layering>>doc:||anchor="nodeLayering"]]
635 )))|(((
636 de.cau.cs.kieler.klay.layered.nodeLayering
637 )))|(((
638 Enum
639 )))|(((
640 Parents
641 )))|(((
642 NETWORK_SIMPLEX
643 )))|(% colspan="1" %)(% colspan="1" %)
644 (((
645
646 )))
647 |(% colspan="1" %)(% colspan="1" %)
648 (((
649 [[Node Placement>>doc:||anchor="nodePlacement"]]
650 )))|(% colspan="1" %)(% colspan="1" %)
651 (((
652 de.cau.cs.kieler.klay.layered.nodePlace
653 )))|(% colspan="1" %)(% colspan="1" %)
654 (((
655 Enum
656 )))|(% colspan="1" %)(% colspan="1" %)
657 (((
658 Parents
659 )))|(% colspan="1" %)(% colspan="1" %)
660 (((
661 BRANDES_KOEPF
662 )))|(% colspan="1" %)(% colspan="1" %)
663 (((
664
665 )))
666 |(% colspan="1" %)(% colspan="1" %)
667 (((
668 [[Port Anchor Offset>>doc:||anchor="portAnchor"]]
669 )))|(% colspan="1" %)(% colspan="1" %)
670 (((
671 de.cau.cs.kieler.klay.layered.portAnchor
672 )))|(% colspan="1" %)(% colspan="1" %)
673 (((
674 Object
675 )))|(% colspan="1" %)(% colspan="1" %)
676 (((
677 Ports
678 )))|(% colspan="1" %)(% colspan="1" %)
679 (((
680
681 )))|(% colspan="1" %)(% colspan="1" %)
682 (((
683
684 )))
685 |(((
686 [[Thoroughness>>doc:||anchor="thoroughness"]]
687 )))|(((
688 de.cau.cs.kieler.klay.layered.thoroughness
689 )))|(((
690 Int
691 )))|(((
692 Parents
693 )))|(((
694 7
695 )))|(% colspan="1" %)(% colspan="1" %)
696 (((
697
698 )))
699
700 = The Most Important Options =
701
702 **TODO:** Write a bit of documentation about the most important layout options and how to use them, possibly with a simple example or something.
703
704 = Detailed Documentation =
705
706 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.
707
708 == Crossing Minimization ==
709
710
711
712 {{id name="crossingMinimization"/}}
713
714 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:
715
716 * LAYER_SWEEP
717 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.
718 * INTERACTIVE
719 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.
720
721 == Cycle Breaking ==
722
723
724
725 {{id name="cycleBreaking"/}}
726
727 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:
728
729 * GREEDY
730 This algorithm reverses edges greedily. The algorithm tries to avoid edges that have the //Priority// property set.
731 * INTERACTIVE
732 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.
733
734 == Edge Spacing Factor ==
735
736
737
738 {{id name="edgeSpacingFactor"/}}
739
740 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.
741
742 [[image:attach:edgeSpacingFactor.png]]
743
744 == Edge Label Side Selection ==
745
746
747
748 {{id name="edgeLabelSideSelection"/}}
749
750 {{warning}}
751 Document!
752 {{/warning}}
753
754
755
756 == Feedback Edges ==
757
758
759
760 {{id name="feedbackEdges"/}}
761
762 {{warning}}
763 Document!
764 {{/warning}}
765
766 == Fixed Alignment ==
767
768
769
770 {{id name="fixedAlignment"/}}
771
772 {{warning}}
773 Document!
774 {{/warning}}
775
776
777
778 == Interactive Reference Point ==
779
780
781
782 {{id name="interactiveReferencePoint"/}}
783
784 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:
785
786 * TOP_LEFT
787 The top left corner of a node is taken as the reference point.
788 * CENTER
789 The center of a node is taken as the reference point.
790
791 == Layer Constraint ==
792
793
794
795 {{id name="layerConstraint"/}}
796
797 {{warning}}
798 Document!
799 {{/warning}}
800
801
802
803 == Maximal Iterations ==
804
805
806
807 {{id name="maximalIterations"/}}
808
809 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.
810
811 == Merge Edges ==
812
813
814
815 {{id name="mergeEdges"/}}
816
817 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.
818
819 [[image:attach:merging.png]]
820
821 == Merge Hierarchy-Crossing Edges ==
822
823
824
825 {{id name="mergeHierarchyEdges"/}}
826
827 {{warning}}
828 Document!
829 {{/warning}}
830
831 == Node Layering ==
832
833
834
835 {{id name="nodeLayering"/}}
836
837 Decides which algorithm is used to compute the layer each node is placed in. We have different algorithms available, with different optimization goals:
838
839 * NETWORK_SIMPLEX
840 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.
841 * LONGEST_PATH
842 A very simple algorithm that distributes nodes along their longest path to a sink node.
843 * INTERACTIVE
844 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.
845
846 == Node Placement ==
847
848
849
850 {{id name="nodePlacement"/}}
851
852 {{warning}}
853 Document!
854 {{/warning}}
855
856 == Port Anchor Offset ==
857
858
859
860 {{id name="portAnchor"/}}
861
862 {{warning}}
863 Document!
864 {{/warning}}
865
866
867
868 == Thoroughness ==
869
870
871
872 {{id name="thoroughness"/}}
873
874 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.