# ELK Layered

Property | Value
--- | ---
Identifier: | `org.eclipse.elk.layered`
Meta Data Provider: | `options.LayeredMetaDataProvider`

## Description

Layer-based algorithm provided by the Eclipse Layout Kernel. Arranges as many edges as possible into one direction by placing nodes into subsequent layers. This implementation supports different routing styles (straight, orthogonal, splines); if orthogonal routing is selected, arbitrary port constraints are respected, thus enabling the layout of block diagrams such as actor-oriented models or circuit schematics. Furthermore, full layout of compound graphs with cross-hierarchy edges is supported when the respective option is activated on the top level.

## Category: Layered

The layer-based method was introduced by Sugiyama, Tagawa and Toda in 1981. It emphasizes the direction of edges by pointing as many edges as possible into the same direction. The nodes are arranged in layers, which are sometimes called “hierarchies”, and then reordered such that the number of edge crossings is minimized. Afterwards, concrete coordinates are computed for the nodes and edge bend points.

## Supported Graph Features

Name | Description
--- | ---
Self Loops | Edges connecting a node with itself.
Inside Self Loops | Self-loops routed through a node instead of around it.
Multi Edges | Multiple edges with the same source and target node.
Edge Labels | Labels that are associated with edges.
Ports | Edges are connected to nodes over ports.
Compound | Edges that connect nodes from different hierarchy levelsand are incident to compound nodes.
Clusters | Edges that connect nodes from different clusters, but not the cluster parent nodes.

## Supported Options

Option | Default Value
--- | ---
Activate Inside Self Loops | `false`
Add Unnecessary Bendpoints | `false`
Additional Port Space | `new ElkMargin(0)`
Additional Wrapped Edges Spacing | `10`
Alignment | `Alignment.AUTOMATIC`
Aspect Ratio | `1.6f`
BK Edge Straightening | `EdgeStraighteningStrategy.IMPROVE_STRAIGHTNESS`
BK Fixed Alignment | `FixedAlignment.NONE`
Comment Box | `false`
Components Spacing | `12f`
Connected Components Compaction | `false`
Content Alignment | `EnumSet.noneOf(ContentAlignment)`
Correction factor for the wrapping | `1.0`
Crossing Minimization Strategy | `CrossingMinimizationStrategy.LAYER_SWEEP`
Cutting Strategy | `CuttingStrategy.MSD`
Cycle Breaking Strategy | `CycleBreakingStrategy.GREEDY`
Debug Mode | `false`
Direction | `Direction.UNDEFINED`
Direction Priority | `0`
Distance Penalty When Improving Cuts | `2.0`
Edge Center Label Placement Strategy | `CenterEdgeLabelPlacementStrategy.MEDIAN_LAYER`
Edge Edge Between Layer Spacing | `10`
Edge Label Placement | `EdgeLabelPlacement.UNDEFINED`
Edge Label Side Selection | `EdgeLabelSideSelection.SMART_DOWN`
Edge Label Spacing | `2`
Edge Node Between Layers Spacing | `10`
Edge Node Spacing | `10`
Edge Routing | `EdgeRouting.ORTHOGONAL`
Edge Spacing | `10`
Edge Thickness | `1`
Favor Straight Edges Over Balancing | `<not defined>`
Feedback Edges | `false`
Graph Wrapping Strategy | `WrappingStrategy.OFF`
Greedy Switch Activation Threshold | `40`
Greedy Switch Crossing Minimization | `GreedySwitchType.TWO_SIDED`
Hierarchical Sweepiness | `0.1`
Hierarchy Handling | `HierarchyHandling.INHERIT`
High Degree Node Maximum Tree Height | `5`
High Degree Node Threshold | `16`
High Degree Node Treatment | `false`
Hypernode | `false`
Improve Cuts | `true`
Improve Wrapped Edges | `true`
Individual Spacing Override | `<not defined>`
Inline Edge Labels | `false`
Inside Self Loop | `false`
Interactive Reference Point | `InteractiveReferencePoint.CENTER`
Junction Points | `new KVectorChain()`
Label Node Spacing | `5`
Label Port Spacing | `1`
Label Spacing | `0`
Layer Bound | `Integer.MAX_VALUE`
Layer Constraint | `LayerConstraint.NONE`
Layout Partition | `<not defined>`
Layout Partitioning | `false`
Linear Segments Deflection Dampening | `0.3`
Manually Specified Cuts | `<not defined>`
Margins | `new ElkMargin()`
Max Node Promotion Iterations | `0`
Merge Edges | `false`
Merge Hierarchy-Crossing Edges | `true`
MSD Freedom | `1`
No Layout | `false`
Node Flexibility | `<not defined>`
Node Flexibility Default | `NodeFlexibility.NONE`
Node Label Placement | `NodeLabelPlacement.fixed()`
Node Layering Strategy | `LayeringStrategy.NETWORK_SIMPLEX`
Node Node Between Layers Spacing | `20`
Node Placement Strategy | `NodePlacementStrategy.BRANDES_KOEPF`
Node Promotion Strategy | `NodePromotionStrategy.NONE`
Node Size Constraints | `EnumSet.noneOf(SizeConstraint)`
Node Size Minimum | `new KVector(0, 0)`
Node Size Options | `EnumSet.of(SizeOptions.DEFAULT_MINIMUM_SIZE)`
Node Spacing | `20`
North or South Port | `false`
Padding | `new ElkPadding(12)`
Path-Like Validify Strategy | `ValidifyStrategy.GREEDY`
Port Alignment | `PortAlignment.JUSTIFIED`
Port Alignment (East) | `<not defined>`
Port Alignment (North) | `<not defined>`
Port Alignment (South) | `<not defined>`
Port Alignment (West) | `<not defined>`
Port Anchor Offset | `<not defined>`
Port Border Offset | `0`
Port Constraints | `PortConstraints.UNDEFINED`
Port Index | `<not defined>`
Port Label Placement | `PortLabelPlacement.OUTSIDE`
Port Labels Next to Port | `false`
Port Side | `PortSide.UNDEFINED`
Port Spacing | `10`
Position | `<not defined>`
Post Compaction Constraint Calculation | `ConstraintCalculationStrategy.SCANLINE`
Post Compaction Strategy | `GraphCompactionStrategy.NONE`
Priority | `0`
Randomization Seed | `1`
Semi-Interactive Crossing Minimization | `false`
Separate Connected Components | `true`
Shortness Priority | `0`
Sloppy Spline Layer Spacing Factor | `0.4`
Sloppy Spline Routing | `true`
Spline Self-Loop Placement | `SelfLoopPlacement.NORTH_STACKED`
Straightness Priority | `0`
Thoroughness | `7`
Upper Bound On Width [MinWidth Layerer] | `4`
Upper Layer Estimation Scaling Factor [MinWidth Layerer] | `2`
Wide Nodes on Multiple Layers | `WideNodesStrategy.OFF`

- Algorithms
- Box Layout
- Circo
- Dot
- Draw2D Layout
- ELK DisCo
- ELK Force
- ELK Layered
- ELK Mr. Tree
- ELK Radial
- ELK Stress
- FDP
- Fixed Layout
- Neato
- Randomizer
- Twopi
- Layout Options
- Activate Inside Self Loops
- Adapt Port Positions
- Add Unnecessary Bendpoints
- Additional Port Space
- Additional Wrapped Edges Spacing
- Alignment
- Animate
- Animation Time Factor
- Annulus Wedge Criteria
- Aspect Ratio
- BK Edge Straightening
- BK Fixed Alignment
- Bend Points
- Box Layout Mode
- Comment Box
- Compaction
- Compaction Step Size
- Components Spacing
- Concentrate Edges
- Connected Components Compaction
- Connected Components Compaction Strategy
- Connected Components Layout Algorithm
- Content Alignment
- Correction factor for the wrapping
- Crossing Minimization Strategy
- Cutting Strategy
- Cycle Breaking Strategy
- DCGraph
- Debug Mode
- Desired Edge Length
- Direction
- Direction Priority
- Distance Model
- Distance Penalty When Improving Cuts
- Eades Repulsion
- Edge Center Label Placement Strategy
- Edge Edge Between Layer Spacing
- Edge Label Placement
- Edge Label Side Selection
- Edge Label Spacing
- Edge Node Between Layers Spacing
- Edge Node Spacing
- Edge Routing
- Edge Spacing
- Edge Thickness
- Edge Type
- Epsilon
- Expand Nodes
- FR Temperature
- Favor Straight Edges Over Balancing
- Feedback Edges
- Fill Polyominoes
- Fixed Position
- Font Name
- Font Size
- Force Model
- Graph Wrapping Strategy
- Greedy Switch Activation Threshold
- Greedy Switch Crossing Minimization
- Hierarchical Sweepiness
- Hierarchy Handling
- High Degree Node Maximum Tree Height
- High Degree Node Threshold
- High Degree Node Treatment
- Hypernode
- Improve Cuts
- Improve Wrapped Edges
- Individual Spacing Override
- Inline Edge Labels
- Inside Self Loop
- Interactive
- Interactive Reference Point
- Iteration Limit
- Iterations
- Iterations Factor
- Junction Points
- Label Angle
- Label Distance
- Label Manager
- Label Manager
- Label Node Spacing
- Label Port Spacing
- Label Spacing
- Layer Bound
- Layer Constraint
- Layer Spacing Factor
- Layout Algorithm
- Layout Ancestors
- Layout Dimension
- Layout Partition
- Layout Partitioning
- Linear Segments Deflection Dampening
- List of Polyominoes
- MSD Freedom
- Manually Specified Cuts
- Margins
- Max Node Promotion Iterations
- Max. Iterations
- Maximal Animation Time
- Merge Edges
- Merge Hierarchy-Crossing Edges
- Minimal Animation Time
- No Layout
- Node Flexibility
- Node Flexibility Default
- Node Label Padding
- Node Label Placement
- Node Layering Strategy
- Node Node Between Layers Spacing
- Node Placement Strategy
- Node Promotion Strategy
- Node Size Constraints
- Node Size Minimum
- Node Size Options
- Node Spacing
- North or South Port
- Order ID
- Overlap Removal
- Padding
- Path-Like Validify Strategy
- Polyomino Primary Sorting Criterion
- Polyomino Secondary Sorting Criterion
- Polyomino Traversal Strategy
- Port Alignment
- Port Alignment (East)
- Port Alignment (North)
- Port Alignment (South)
- Port Alignment (West)
- Port Anchor Offset
- Port Border Offset
- Port Constraints
- Port Index
- Port Label Placement
- Port Labels Next to Port
- Port Side
- Port Spacing
- Position
- Post Compaction Constraint Calculation
- Post Compaction Strategy
- Priority
- Progress Bar
- Radius
- Randomization Seed
- Repulsive Power
- Scale Factor
- Search Order
- Semi-Interactive Crossing Minimization
- Separate Connected Components
- Shortness Priority
- Sloppy Spline Layer Spacing Factor
- Sloppy Spline Routing
- Sorter
- Spline Self-Loop Placement
- Straightness Priority
- Stress Epsilon
- Thoroughness
- Translation Optimization
- Upper Bound On Width [MinWidth Layerer]
- Upper Layer Estimation Scaling Factor [MinWidth Layerer]
- Validate Options
- Weighting of Nodes
- Wide Nodes on Multiple Layers
- Zoom to Fit
- Layout Option Groups
- compaction
- compaction.postCompaction
- componentCompaction
- crossingMinimization
- crossingMinimization.greedySwitch
- cycleBreaking
- debug
- edge
- edgeLabels
- edgeLabels
- edgeRouting
- font
- highDegreeNodes
- insideSelfLoops
- layering
- layering.coffmanGraham
- layering.minWidth
- layering.nodePromotion
- nodeLabels
- nodePlacement
- nodePlacement.bk
- nodePlacement.linearSegments
- nodePlacement.networkSimplex
- nodeSize
- partitioning
- polyomino
- port
- portAlignment
- portLabels
- priority
- spacing
- spacing
- wrapping
- wrapping.cutting
- wrapping.cutting.msd
- wrapping.multiEdge
- wrapping.singleEdge
- wrapping.singleEdge.validify