public class HierarchicLayout extends MultiStageLayout
Hierarchical diagrams are commonly used for the visualization of hierarchical data, since they facilitate the identification of dependencies and relationships among the nodes of the graph. Possible application domains are the following: workflow visualization, call graph visualization, entity-relationship diagrams, biochemical pathways and network management.
Hierarchic Layout obtained with default settings
FromScratchLayerer
or
FixedElementsLayerer
, respectively. If the layout orientation is top-to-bottom,
the nodes in each layer are arranged horizontally while the layers are ordered vertically top-to-bottom.
FromScratchSequencer
or
FixedElementsSequencer
.
This layout algorithm is able to create hierarchic layouts from scratch or add new elements to the existing sketch
drawing incrementally. In order to add elements incrementally to the current sketch or let the algorithm optimize
certain elements in the current sketch, set the layout mode to LayoutMode.INCREMENTAL
. Then register a IDataProvider
(e.g. use Maps.createHashedDataMap()
) with the graph using the INCREMENTAL_HINTS_DPKEY
DataProvider key and associate the hints obtained from the IIncrementalHintsFactory
with the elements to be
added incrementally.
NodeLayoutDescriptor
and EdgeLayoutDescriptor
instances can be used for specifying individual
information (e.g. distances or routing styles) for each node and edge in the graph. The descriptors are bound to the
graph using IDataProvider
s registered with HierarchicLayoutCore.NODE_LAYOUT_DESCRIPTOR_DPKEY
or
HierarchicLayoutCore.EDGE_LAYOUT_DESCRIPTOR_DPKEY
. If there is no descriptor assigned to some nodes/edges, a
default descriptor will be used. To set default descriptors use NodeLayoutDescriptor
and EdgeLayoutDescriptor
.
HierarchicLayout
supports two approaches to connect edges on a specific side or even an exact location to a
node. PortConstraint
s define a single constraint for the ports of an edge. To realize
more complex port restrictions, several PortCandidate
s or PortCandidateSet
s can be assigned to edges or
nodes. If an edge with registered PortCandidate
s connects to nodes with PortCandidateSet
s, the layouter
will try to match both collections to find an appropriate port. In case there is no matching port candidate, a PortCandidate
specified for the edge is preferred. Since their simultaneous existence at the same node may be ambiguous, it is not
recommended to use a combination of PortConstraint
s and
PortCandidate
s in the same layout.
The edge grouping feature of this layout algorithm is restricted to normal, hierarchic edges. Edges with recursive edge style
RecursiveEdgeStyle.DIRECTED
or RecursiveEdgeStyle.UNDIRECTED
will not be grouped. They are also not
grouped when enabling automatic edge grouping
.
Modifier and Type | Field and Description |
---|---|
static EdgeDpKey<YPointPath> |
ALTERNATIVE_EDGE_PATH_DPKEY
A
DataProvider key for associating alternative paths for edges connecting to groups, group content or folder nodes.
|
static NodeDpKey<YRectangle> |
ALTERNATIVE_GROUP_BOUNDS_DPKEY
A
DataProvider key for associating an alternative bounds with the collapsed/expanded group.
|
static EdgeDpKey<Integer> |
CRITICAL_EDGE_PRIORITY_DPKEY
A
DataProvider key for defining the priority of critical edges.
|
static EdgeDpKey<Double> |
EDGE_DIRECTEDNESS_DPKEY
A
DataProvider key for specifying the directedness of edges.
|
static EdgeDpKey<Double> |
EDGE_THICKNESS_DPKEY
A
DataProvider key for specifying the thickness of the edges.
|
static NodeDpKey<Boolean> |
FOLDER_NODES_DPKEY
A
DataProvider key for marking folder nodes.
|
static GraphObjectDpKey<Object> |
INCREMENTAL_HINTS_DPKEY
A
DataProvider key for specifying incremental hints.
|
static GraphDpKey<Object> |
LAYER_CONSTRAINTS_MEMENTO_DPKEY
A
DataProvider key for storing the constraint graph
|
static NodeDpKey<Integer> |
LAYER_INDEX_DPKEY
A
DataAcceptor key for publishing the layer IDs for all nodes in the graph.
|
static GraphDpKey<Object> |
SEQUENCE_CONSTRAINTS_MEMENTO_DPKEY
A
DataProvider key for storing the constraint graph
A v1 before v2 constraint is represented as an edge between the representatives of v1 and v2 in
the constraint graph. |
static NodeDpKey<Integer> |
SEQUENCE_INDEX_DPKEY
A
DataAcceptor key for publishing the index inside their layer for all nodes in the graph.
|
static NodeDpKey<SwimlaneDescriptor> |
SWIMLANE_DESCRIPTOR_DPKEY
A
DataProvider key for defining swimlanes for the nodes.
|
Constructor and Description |
---|
HierarchicLayout()
Creates a new
HierarchicLayout instance with the default settings. |
Modifier and Type | Method and Description |
---|---|
void |
applyLayoutCore(LayoutGraph graph)
Delegates the calculation of the hierarchic layout to a configured
HierarchicLayoutCore instance. |
protected void |
configureCoreLayout(LayoutGraph graph,
HierarchicLayoutCore coreLayouter)
Configures the core layout algorithm with the settings of this
HierarchicLayout instance. |
protected EdgeLayoutDescriptor |
createEdgeLayoutDescriptor()
Returns a new
EdgeLayoutDescriptor instance that will be used during the various phases of the layout algorithm
to determine the drawing details of the edges of the graph. |
protected HierarchicLayoutCore |
createHierarchicLayoutCore()
Returns a new
HierarchicLayoutCore instance. |
IIncrementalHintsFactory |
createIncrementalHintsFactory()
Returns a
IIncrementalHintsFactory instance that must be used to obtain hints to be associated with graph
elements that should be laid out incrementally. |
ILayerConstraintFactory |
createLayerConstraintFactory(Graph graph)
Returns a
ILayerConstraintFactory instance that can be used for specifying layer constraints for the given
graph. |
protected NodeLayoutDescriptor |
createNodeLayoutDescriptor()
Returns a new
NodeLayoutDescriptor instance that will be used during the various phases of the layout algorithm
to determine the drawing details of the nodes of the graph. |
ISequenceConstraintFactory |
createSequenceConstraintFactory(LayoutGraph graph)
Returns a
ISequenceConstraintFactory instance that can be used for specifying sequence constraints for the given
graph. |
protected void |
disposeCoreLayout(LayoutGraph graph,
HierarchicLayoutCore coreLayouter)
Disposes of the core layout algorithm.
|
ComponentArrangementPolicy |
getComponentArrangementPolicy()
Gets the policy that specifies how to arrange connected components.
|
protected DefaultDrawingDistanceCalculator |
getDefaultDrawingDistanceCalculator()
Gets the
DefaultDrawingDistanceCalculator that is registered with the layout algorithm by default. |
EdgeLayoutDescriptor |
getEdgeLayoutDescriptor()
Gets the
EdgeLayoutDescriptor instance used for all those edges that do not have a specific layout descriptor
assigned. |
double |
getEdgeToEdgeDistance()
Gets the minimum distance between two adjacent edges in one layer.
|
ILayerer |
getFixedElementsLayerer()
Gets the
ILayerer instance that obtains the layering for fixed nodes during the incremental layout run. |
ISequencer |
getFixedElementsSequencer()
Gets the
ISequencer instance that calculates the sequence of the fixed nodes during the incremental layout run. |
ILayerer |
getFromScratchLayerer()
Gets the
ILayerer instance that obtains the layering for the nodes if the layout algorithm runs in
From Scratch mode . |
LayeringStrategy |
getFromScratchLayeringStrategy()
Gets a predefined layering strategy for the
from scratch layerer. |
ISequencer |
getFromScratchSequencer()
Gets the
ISequencer instance that calculates the node sequence if the layout algorithm runs in
From Scratch mode . |
double |
getGridSpacing()
Gets the equidistant spacing between the horizontal and vertical grid lines.
|
GroupAlignmentPolicy |
getGroupAlignmentPolicy()
Gets the group layer alignment strategy used for recursive group layering.
|
HierarchicLayoutCore |
getHierarchicLayoutCore()
Gets the current layout algorithm instance.
|
LayoutMode |
getLayoutMode()
Gets the layout mode this layouter should use for upcoming layouts.
|
long |
getMaximumDuration()
Gets the time limit (in milliseconds) set for the layout algorithm.
|
double |
getMinimumLayerDistance()
Gets the minimum distance between two adjacent layers.
|
protected MirrorModes |
getMirrorMode()
Returns the mirror mask of the
orientation layouter . |
NodeLayoutDescriptor |
getNodeLayoutDescriptor()
Gets the
NodeLayoutDescriptor instance used for all those nodes that do not have a specific layout descriptor
assigned. |
INodePlacer |
getNodePlacer()
Gets the
INodePlacer instance that will calculate the final node placement of the layout. |
double |
getNodeToEdgeDistance()
Gets the minimum distance between an edge and an adjacent node in one layer.
|
double |
getNodeToNodeDistance()
Gets the minimum distance between two adjacent nodes in one layer.
|
boolean |
isAutomaticEdgeGroupingEnabled()
Gets whether or not edges are grouped automatically.
|
boolean |
isBackLoopRoutingEnabled()
Gets whether or not reversed edges should be routed as back-loops.
|
boolean |
isBackLoopRoutingForSelfLoopsEnabled()
Gets whether or not self-loops should be routed in a similar manner as back-loops.
|
boolean |
isGroupCompactionEnabled()
Gets whether or not layer compaction for recursive group layering is active.
|
boolean |
isIntegratedEdgeLabelingEnabled()
Gets whether or not the layout algorithm reserves space for labels and places them.
|
boolean |
isLayerSeparationEnabled()
Gets whether or not to separate layers.
|
boolean |
isNodeLabelConsiderationEnabled()
Gets whether or not the layout algorithm considers node labels when calculating node positions to avoid overlaps.
|
boolean |
isOrthogonalRoutingEnabled()
Gets whether or not edges should be routed orthogonally.
|
boolean |
isRecursiveGroupLayeringEnabled()
Gets whether or not groups are respected during the layering stage.
|
boolean |
isStopAfterLayeringEnabled()
Gets whether or not to stop the layout algorithm after the layering step.
|
boolean |
isStopAfterSequencingEnabled()
Gets whether or not to stop the layout algorithm after the sequencing step.
|
void |
setAutomaticEdgeGroupingEnabled(boolean value)
Sets whether or not edges are grouped automatically.
|
void |
setBackLoopRoutingEnabled(boolean value)
Sets whether or not reversed edges should be routed as back-loops.
|
void |
setBackLoopRoutingForSelfLoopsEnabled(boolean value)
Sets whether or not self-loops should be routed in a similar manner as back-loops.
|
void |
setComponentArrangementPolicy(ComponentArrangementPolicy value)
Sets the policy that specifies how to arrange connected components.
|
void |
setEdgeLayoutDescriptor(EdgeLayoutDescriptor value)
Sets the
EdgeLayoutDescriptor instance used for all those edges that do not have a specific layout descriptor
assigned. |
void |
setEdgeToEdgeDistance(double value)
Sets the minimum distance between two adjacent edges in one layer.
|
void |
setFixedElementsLayerer(ILayerer value)
Sets the
ILayerer instance that obtains the layering for fixed nodes during the incremental layout run. |
void |
setFixedElementsSequencer(ISequencer value)
Sets the
ISequencer instance that calculates the sequence of the fixed nodes during the incremental layout run. |
void |
setFromScratchLayerer(ILayerer value)
Sets the
ILayerer instance that obtains the layering for the nodes if the layout algorithm runs in
From Scratch mode . |
void |
setFromScratchLayeringStrategy(LayeringStrategy value)
Sets a predefined layering strategy for the
from scratch layerer. |
void |
setFromScratchSequencer(ISequencer value)
Sets the
ISequencer instance that calculates the node sequence if the layout algorithm runs in
From Scratch mode . |
void |
setGridSpacing(double value)
Sets the equidistant spacing between the horizontal and vertical grid lines.
|
void |
setGroupAlignmentPolicy(GroupAlignmentPolicy value)
Sets the group layer alignment strategy used for recursive group layering.
|
void |
setGroupCompactionEnabled(boolean value)
Sets whether or not layer compaction for recursive group layering is active.
|
void |
setIntegratedEdgeLabelingEnabled(boolean value)
Sets whether or not the layout algorithm reserves space for labels and places them.
|
void |
setLayerSeparationEnabled(boolean value)
Sets whether or not to separate layers.
|
void |
setLayoutMode(LayoutMode value)
Sets the layout mode this layouter should use for upcoming layouts.
|
void |
setMaximumDuration(long value)
Sets the time limit (in milliseconds) set for the layout algorithm.
|
void |
setMinimumLayerDistance(double value)
Sets the minimum distance between two adjacent layers.
|
void |
setNodeLabelConsiderationEnabled(boolean value)
Sets whether or not the layout algorithm considers node labels when calculating node positions to avoid overlaps.
|
void |
setNodeLayoutDescriptor(NodeLayoutDescriptor value)
Sets the
NodeLayoutDescriptor instance used for all those nodes that do not have a specific layout descriptor
assigned. |
void |
setNodePlacer(INodePlacer value)
Sets the
INodePlacer instance that will calculate the final node placement of the layout. |
void |
setNodeToEdgeDistance(double value)
Sets the minimum distance between an edge and an adjacent node in one layer.
|
void |
setNodeToNodeDistance(double value)
Sets the minimum distance between two adjacent nodes in one layer.
|
void |
setOrthogonalRoutingEnabled(boolean value)
Sets whether or not edges should be routed orthogonally.
|
void |
setRecursiveGroupLayeringEnabled(boolean value)
Sets whether or not groups are respected during the layering stage.
|
void |
setStopAfterLayeringEnabled(boolean value)
Sets whether or not to stop the layout algorithm after the layering step.
|
void |
setStopAfterSequencingEnabled(boolean value)
Sets whether or not to stop the layout algorithm after the sequencing step.
|
appendStage, applyLayout, checkNodeSize, disableAllStages, getComponentLayout, getHideGroupsStage, getLabeling, getLayoutOrientation, getOrientationLayout, getParallelEdgeRouter, getSelfLoopRouter, getSubgraphLayout, isComponentLayoutEnabled, isHideGroupsStageEnabled, isLabelingEnabled, isOrientationLayoutEnabled, isParallelEdgeRouterEnabled, isSelfLoopRouterEnabled, isSubgraphLayoutEnabled, prependStage, removeStage, setComponentLayout, setComponentLayoutEnabled, setHideGroupsStage, setHideGroupsStageEnabled, setLabeling, setLabelingEnabled, setLayoutOrientation, setOrientationLayout, setOrientationLayoutEnabled, setParallelEdgeRouter, setParallelEdgeRouterEnabled, setSelfLoopRouter, setSelfLoopRouterEnabled, setSubgraphLayout, setSubgraphLayoutEnabled
public static final EdgeDpKey<YPointPath> ALTERNATIVE_EDGE_PATH_DPKEY
DataProvider
key for associating alternative paths for edges connecting to groups, group content or folder nodes.
When running in incremental
layout mode
, the alternative edge paths are considered during the routing of fixed (i.e.,
non-incremental) edges.
The alternative paths should be used in conjunction with alternative group bounds
to achieve more stable layout results when collapsing/expanding a group node as follows:
ALTERNATIVE_GROUP_BOUNDS_DPKEY
public static final NodeDpKey<YRectangle> ALTERNATIVE_GROUP_BOUNDS_DPKEY
DataProvider
key for associating an alternative bounds with the collapsed/expanded group.
When running in incremental
layout mode
, the alternative bounds of the collapsed/expanded group will be used during the
layering and sequencing phase of the algorithm.
alternative edge paths
for
edges adjacent to such groups. In addition, recursive group layering
should
be enabled and recursive edge style
should be set to
RecursiveEdgeStyle.DIRECTED
. Edges that end at a group itself or a
folder node should not have port candidates
or port constraints
at this end (because this may destroy the recursive directed edge style required to obtain stable results).ALTERNATIVE_EDGE_PATH_DPKEY
public static final EdgeDpKey<Integer> CRITICAL_EDGE_PRIORITY_DPKEY
DataProvider
key for defining the priority of critical edges.
Critical edges highlight different edge paths that are relevant for a user. The layouter tries to vertically align each node pair that is connected by a critical edge. Conflicts between different critical edges are always resolved in favor of the higher priority.
public static final EdgeDpKey<Double> EDGE_DIRECTEDNESS_DPKEY
DataProvider
key for specifying the directedness of edges.
Generally, the hierarchic layout algorithm assigns nodes to layers such that most of the edges point in the
main layout direction
. The
directedness of an edge specifies whether it should comply with this strategy. More precisely, a value of 1
means that the edge should fully comply, a value of -1
that it should comply inversely (the edge should point
against the main layout direction), and a value of 0
means that the direction doesn't matter at all and the
endpoints of the edges may be placed at the same layer. If there are conflicting preferences, edges with higher absolute
values are more likely to point in the desired direction.
IDataProvider
is registered with this key, the algorithm assumes that all edges have directedness
1
.HierarchicLayout
ignores the
specified layerer
and automatically switches to the ConstraintIncrementalLayerer
in such cases.public static final EdgeDpKey<Double> EDGE_THICKNESS_DPKEY
DataProvider
key for specifying the thickness of the edges.
The specified non-negative thickness is considered when calculating minimum distances so that there are no overlaps
between edges and other graph elements. By default, each edge has thickness 0
.
on grid
and on sub-grid
ignore the thickness of edges.public static final NodeDpKey<Boolean> FOLDER_NODES_DPKEY
DataProvider
key for marking folder nodes.
When using recursive edge styles in incremental mode, edges will also start at the bottom and end at the top of marked folder nodes. This will keep the edge routes more stable since the connection sides won't change.
public static final GraphObjectDpKey<Object> INCREMENTAL_HINTS_DPKEY
DataProvider
key for specifying incremental hints.
Incremental hints are created using an incremental hints factory
.
public static final GraphDpKey<Object> LAYER_CONSTRAINTS_MEMENTO_DPKEY
DataProvider
key for storing the constraint graph
public static final NodeDpKey<Integer> LAYER_INDEX_DPKEY
DataAcceptor
key for publishing the layer IDs for all nodes in the graph.
IDataProvider
is registered with this key, the layer information of the nodes is dropped.HierarchicLayoutCore.LAYER_INDEX_DPKEY
public static final GraphDpKey<Object> SEQUENCE_CONSTRAINTS_MEMENTO_DPKEY
DataProvider
key for storing the constraint graph
A v1 before v2
constraint is represented as an edge between the representatives of v1
and v2
in
the constraint graph.
public static final NodeDpKey<Integer> SEQUENCE_INDEX_DPKEY
DataAcceptor
key for publishing the index inside their layer for all nodes in the graph.
IDataProvider
is registered with this key, the sequence information of the nodes is dropped.HierarchicLayoutCore.SEQUENCE_INDEX_DPKEY
public static final NodeDpKey<SwimlaneDescriptor> SWIMLANE_DESCRIPTOR_DPKEY
DataProvider
key for defining swimlanes for the nodes.
The layout algorithm will arrange nodes in swimlanes according to the registered descriptors.
Layout information about the swimlanes is finally written back to the descriptor instances. Instances can be shared among multiple nodes in the same lane.
public HierarchicLayout()
HierarchicLayout
instance with the default settings.public void applyLayoutCore(LayoutGraph graph)
HierarchicLayoutCore
instance.
HierarchicLayout
applies its own configuration to HierarchicLayoutCore
and also prepares the graph for
layout.
applyLayoutCore
in class MultiStageLayout
graph
- the input graphprotected void configureCoreLayout(LayoutGraph graph, HierarchicLayoutCore coreLayouter)
HierarchicLayout
instance.
This method is called by applyLayoutCore(LayoutGraph)
before the actual layout is calculated. It may be
overridden in order to manually reconfigure the core layout algorithm.
This implementation will temporarily set a PortCandidateOptimizer
if a IDataProvider
is registered with
PortCandidateSet.NODE_PORT_CANDIDATE_SET_DPKEY
and no PortConstraintOptimizer
is assigned.
disposeCoreLayout(LayoutGraph, HierarchicLayoutCore)
.graph
- the input graphcoreLayouter
- the given core layout algorithm instanceprotected EdgeLayoutDescriptor createEdgeLayoutDescriptor()
EdgeLayoutDescriptor
instance that will be used during the various phases of the layout algorithm
to determine the drawing details of the edges of the graph.
This method may be overridden to create a new EdgeLayoutDescriptor
instance with different configuration
settings.
EdgeLayoutDescriptor
instanceprotected HierarchicLayoutCore createHierarchicLayoutCore()
HierarchicLayoutCore
instance.
This method may be overridden to create a new HierarchicLayoutCore
object with different configuration
settings.
This factory method provides the initial HierarchicLayoutCore
instance.
HierarchicLayoutCore
instancepublic IIncrementalHintsFactory createIncrementalHintsFactory()
IIncrementalHintsFactory
instance that must be used to obtain hints to be associated with graph
elements that should be laid out incrementally.
Use this factory and a IDataProvider
that is registered to the graph using the INCREMENTAL_HINTS_DPKEY
key to associate appropriate hints with the graph elements that should be laid out incrementally by the algorithm.
public ILayerConstraintFactory createLayerConstraintFactory(Graph graph)
ILayerConstraintFactory
instance that can be used for specifying layer constraints for the given
graph.
The instance is usually bound to Graph
instance
graph
, i.e., if the input graph for the layerer changes, a new instance must be retrieved. This instance can
be used for creating constraints for this graph instance.
You can create an instance without binding it to a graph instance initially by passing a null
parameter. In that
case, you must bind the returned instance to the graph, see LayerConstraintFactoryCompanion.LAYER_CONSTRAINTS_MEMENTO_DPKEY
and Memento
.
ILayerConstraintFactory
instances have to be disposed
after use.
Disposing the factory will also remove all constraints previously specified for the factory's associated graph. Creating
layering constraints with a disposed factory will throw an IllegalStateException
.graph
- the input graphILayerConstraintFactory
instanceprotected NodeLayoutDescriptor createNodeLayoutDescriptor()
NodeLayoutDescriptor
instance that will be used during the various phases of the layout algorithm
to determine the drawing details of the nodes of the graph.
This method may be overridden to create a new NodeLayoutDescriptor
instance with different configuration
settings.
NodeLayoutDescriptor
instancepublic ISequenceConstraintFactory createSequenceConstraintFactory(LayoutGraph graph)
ISequenceConstraintFactory
instance that can be used for specifying sequence constraints for the given
graph.
For these sequence constraints to have any effect, the ISequencer
that determines the in-layer node order
(sequence) has to support constraints. Both, DefaultLayerSequencer
and the incremental sequencer used internally support sequence constraints.
ISequenceConstraintFactory
instances have to be disposed of
after
use. Disposing of the factory will also remove all constraints previously specified for the factory's associated graph.
Creating sequence constraints with a disposed of factory will throw an IllegalStateException
.graph
- the input graphISequenceConstraintFactory
instancesetFromScratchSequencer(ISequencer)
,
setFixedElementsSequencer(ISequencer)
protected void disposeCoreLayout(LayoutGraph graph, HierarchicLayoutCore coreLayouter)
This method is called by applyLayoutCore(LayoutGraph)
after the actual layout is calculated. It may be
overridden in order to revert a custom configuration made in
configureCoreLayout(LayoutGraph, HierarchicLayoutCore)
.
This implementation will remove the PortCandidateOptimizer
that was created in case a IDataProvider
is
registered with PortCandidateSet.NODE_PORT_CANDIDATE_SET_DPKEY
and no PortConstraintOptimizer
was initially assigned.
configureCoreLayout(LayoutGraph, HierarchicLayoutCore)
needs to be removed here.graph
- the input graphcoreLayouter
- the given core layout algorithm instancepublic ComponentArrangementPolicy getComponentArrangementPolicy()
IllegalArgumentException
- if the specified policy does not match a default component arrangement policyComponentArrangementPolicy.TOPMOST
. Connected components are aligned with their first layer.setComponentArrangementPolicy(ComponentArrangementPolicy)
protected DefaultDrawingDistanceCalculator getDefaultDrawingDistanceCalculator()
DefaultDrawingDistanceCalculator
that is registered with the layout algorithm by default.IllegalStateException
- if the current instance returned by DrawingDistanceCalculator
is not an instance of DefaultDrawingDistanceCalculator
DefaultDrawingDistanceCalculator
instancepublic EdgeLayoutDescriptor getEdgeLayoutDescriptor()
EdgeLayoutDescriptor
instance used for all those edges that do not have a specific layout descriptor
assigned.
By default, this method will return a EdgeLayoutDescriptor
instance created with
createEdgeLayoutDescriptor()
.
IllegalArgumentException
- if the EdgeLayoutDescriptor
is null
EdgeLayoutDescriptor
EdgeLayoutDescriptor
instanceHierarchicLayoutCore.EDGE_LAYOUT_DESCRIPTOR_DPKEY
,
setEdgeLayoutDescriptor(EdgeLayoutDescriptor)
public double getEdgeToEdgeDistance()
All values have to be greater than or equal to 0
.
IllegalArgumentException
- if the distance is negativeIllegalStateException
- if the current IDrawingDistanceCalculator
is not an instance of DefaultDrawingDistanceCalculator
EdgeLayoutDescriptor
instances (see
HierarchicLayoutCore.EDGE_LAYOUT_DESCRIPTOR_DPKEY
) with custom minimum distance
values.setEdgeToEdgeDistance(double)
public ILayerer getFixedElementsLayerer()
ILayerer
instance that obtains the layering for fixed nodes during the incremental layout run.IllegalArgumentException
- if the ILayerer
is null
AsIsLayerer
ILayerer
instance used for fixed nodessetLayoutMode(LayoutMode)
,
setFixedElementsLayerer(ILayerer)
public ISequencer getFixedElementsSequencer()
ISequencer
instance that calculates the sequence of the fixed nodes during the incremental layout run.IllegalArgumentException
- if the given ISequencer
is null
AsIsSequencer
ISequencer
instance used for fixed elementssetLayoutMode(LayoutMode)
,
setFixedElementsSequencer(ISequencer)
public ILayerer getFromScratchLayerer()
ILayerer
instance that obtains the layering for the nodes if the layout algorithm runs in
From Scratch mode
.
If the graph consists of multiple components, then the ILayerer
instance should be wrapped in
MultiComponentLayerer
.
IllegalArgumentException
- if the ILayerer
is null
WeightedLayerer
ILayerer
instancesetLayoutMode(LayoutMode)
,
setFromScratchLayerer(ILayerer)
public LayeringStrategy getFromScratchLayeringStrategy()
from scratch
layerer.
The layouter assigns the nodes to separate layers. The nodes within each layer will be placed on the same horizontal layer. The layers will be arranged vertically starting with the small-numbered layers.
An important layering strategy for the hierarchic layout style is called Hierarchical Layering. A hierarchical layering tries to assign nodes to layers in a way such that as much edges of the graph as possible will point to the main layout direction, i.e., the start nodes of the edges will be in a layer with a smaller number than the corresponding end nodes. Also, a hierarchical layering will never put two connected nodes in the same layer.
This method wraps the internal implementations into a MultiComponentLayerer
instance so that it is possible to
specify the behavior of the algorithm if the component layouter
is disabled.
IllegalArgumentException
- if an unknown strategy is givenLayeringStrategy.HIERARCHICAL_OPTIMAL
setFromScratchLayeringStrategy(LayeringStrategy)
public ISequencer getFromScratchSequencer()
ISequencer
instance that calculates the node sequence if the layout algorithm runs in
From Scratch mode
.IllegalArgumentException
- if the ISequencer
is null
DefaultLayerSequencer
ISequencer
instancegetFromScratchLayerer()
,
setLayoutMode(LayoutMode)
,
setFromScratchSequencer(ISequencer)
public double getGridSpacing()
When the spacing is negative or zero, no grid is defined, otherwise nodes and edges are placed on multiples of the grid spacing.
IIncrementalHintsFactory
,
setGridSpacing(double)
public GroupAlignmentPolicy getGroupAlignmentPolicy()
IllegalArgumentException
- if an unknown group alignment policy is givenGroupAlignmentPolicy.CENTER
. Groups and normal nodes are center aligned.setRecursiveGroupLayeringEnabled(boolean)
,
setGroupAlignmentPolicy(GroupAlignmentPolicy)
public HierarchicLayoutCore getHierarchicLayoutCore()
By default, this method will return a HierarchicLayoutCore
instance created with
createHierarchicLayoutCore()
.
HierarchicLayoutCore
instancecreateHierarchicLayoutCore()
public LayoutMode getLayoutMode()
Depending on the mode the layout algorithm will use different ILayerer
and ISequencer
implementations.
IllegalArgumentException
- if the given layout mode is unknownLayoutMode.FROM_SCRATCH
getFromScratchLayerer()
,
getFromScratchSequencer()
,
getFixedElementsLayerer()
,
getFixedElementsSequencer()
,
setLayoutMode(LayoutMode)
public long getMaximumDuration()
Values have to be greater or equal to 0
.
IllegalArgumentException
- if the maximum duration is negativeLong.MAX_VALUE
. The layout algorithm runs unrestricted.setMaximumDuration(long)
public double getMinimumLayerDistance()
The specified distance should have a non-negative value.
IllegalArgumentException
- if the distance is negativesetMinimumLayerDistance(double)
protected MirrorModes getMirrorMode()
orientation layouter
.
It may be overridden in order to configure a different mirror mask.
public NodeLayoutDescriptor getNodeLayoutDescriptor()
NodeLayoutDescriptor
instance used for all those nodes that do not have a specific layout descriptor
assigned.
By default, this method will return a NodeLayoutDescriptor
instance created with
createNodeLayoutDescriptor()
.
IllegalArgumentException
- if the given NodeLayoutDescriptor
is null
NodeLayoutDescriptor
NodeLayoutDescriptor
instanceHierarchicLayoutCore.NODE_LAYOUT_DESCRIPTOR_DPKEY
,
createNodeLayoutDescriptor()
,
setNodeLayoutDescriptor(NodeLayoutDescriptor)
public INodePlacer getNodePlacer()
INodePlacer
instance that will calculate the final node placement of the layout.IllegalArgumentException
- if the INodePlacer
is null
SimplexNodePlacer
INodePlacer
instancesetNodePlacer(INodePlacer)
public double getNodeToEdgeDistance()
All values have to be greater than or equal to 0
.
IllegalArgumentException
- if the distance is negativeIllegalStateException
- if the current IDrawingDistanceCalculator
is not an instance of DefaultDrawingDistanceCalculator
NodeLayoutDescriptor
/EdgeLayoutDescriptor
instances (see HierarchicLayoutCore.NODE_LAYOUT_DESCRIPTOR_DPKEY
and
HierarchicLayoutCore.EDGE_LAYOUT_DESCRIPTOR_DPKEY
) with custom minimum distance values.setNodeToEdgeDistance(double)
public double getNodeToNodeDistance()
All values have to be greater than or equal to 0
.
IllegalArgumentException
- if the distance is negativeIllegalStateException
- if the current IDrawingDistanceCalculator
is not an instance of DefaultDrawingDistanceCalculator
NodeLayoutDescriptor
instances (see
HierarchicLayoutCore.NODE_LAYOUT_DESCRIPTOR_DPKEY
) with custom minimum distance
values.setNodeToNodeDistance(double)
public boolean isAutomaticEdgeGroupingEnabled()
The automatic edge grouping tries to group a high number of edges without changing the semantic of the graph, i.e., it groups edges either at a common source node or a common target node. Edge groupings often allow more compact layouts since grouped edges are routed in a bus-style manner.
port constraints
, port candidates
or port
group ids (see PortConstraintKeys.SOURCE_PORT_GROUP_ID_DPKEY
and
PortConstraintKeys.TARGET_PORT_GROUP_ID_DPKEY
) at this node. Furthermore, edges cannot be grouped at a node
with specified port candidate set
.false
. Edges are not grouped automatically.true
if the edge grouping should be applied, false
otherwisesetAutomaticEdgeGroupingEnabled(boolean)
public boolean isBackLoopRoutingEnabled()
When this option is enabled, back-loops attach to the same node sides as the other edges, i.e., for layout orientation top-to-bottom, they leave their source at the bottom and enter their target at the top.
recursive edge styles
RecursiveEdgeStyle.DIRECTED
and
RecursiveEdgeStyle.UNDIRECTED
, including edges where source or target
are not inside a group node.false
. There is no back-loop routing applied to reversed edges.true
if back-loop routing is applied, false
otherwisesetBackLoopRoutingEnabled(boolean)
public boolean isBackLoopRoutingForSelfLoopsEnabled()
Self-loops will start at the bottom of their attached nodes and end at the top of them.
false
. There is no back-loop routing applied to self-loops.true
if self-loops should be routed like back-loops, false
otherwiseisBackLoopRoutingEnabled()
,
setBackLoopRoutingForSelfLoopsEnabled(boolean)
public boolean isGroupCompactionEnabled()
The number of node layers is decreased if possible without reversing edge directions. The resulting layering tries to keep the layer span of a group node minimum while minimizing the overall vertical space.
TopologicalLayerer
is used for layer assignment. If this feature is
enabled, an alignment policy that is set with GroupAlignmentPolicy
is ignored.false
. The layer compaction is disabled.true
if group compaction is active, false
otherwisesetRecursiveGroupLayeringEnabled(boolean)
,
setGroupCompactionEnabled(boolean)
public boolean isIntegratedEdgeLabelingEnabled()
To define the desired placement for each label add a PreferredPlacementDescriptor
on
IEdgeLabelLayout
.
This method is a convenience method that assures that the labeling algorithm
is
of type LabelLayoutTranslator
and EdgeLabelTranslationEnabled
is set to true
.
IllegalStateException
- if integrated labeling should be enabled but the current labeling algorithm
is
not of type LabelLayoutTranslator
IllegalStateException
- if no properly configured LabelLayoutTranslator
is registered even though integrated labeling was enabled
earlier (can happen when manually specifying the labeling algorithm
).labeling algorithm
will be
overwritten and when disabling it, any currently specified labeling algorithm will be disabled via property
LabelingEnabled
. Therefore, it is recommended to only use this
convenience property instead of manually changing the mentioned other properties.false
. Integrated edge labeling is disabled.true
if integrated edge labeling is enabled, false
otherwisesetIntegratedEdgeLabelingEnabled(boolean)
public boolean isLayerSeparationEnabled()
In case layers are not separated, nodes of a layer may extend into adjacent layers. Otherwise, nodes of different layers are strictly separated, i.e., layers are placed below each other.
true
. Layers are separated.true
if layers are separated, false
otherwisesetLayerSeparationEnabled(boolean)
public boolean isNodeLabelConsiderationEnabled()
This method is a convenience method that assures that the labeling algorithm
is
of type LabelLayoutTranslator
and NodeLabelTranslationEnabled
is set to true
.
IllegalStateException
- if this property should be enabled but the current labeling algorithm
is not of
type LabelLayoutTranslator
IllegalStateException
- if no properly configured LabelLayoutTranslator
is registered even though this property was enabled earlier (can
happen when manually specifying the labeling algorithm
).false
. Node labels are not considered.true
if the layout algorithm takes the node labels into account, false
otherwisesetNodeLabelConsiderationEnabled(boolean)
public boolean isOrthogonalRoutingEnabled()
When orthogonal routing is enabled, all resulting edge paths will be composed of vertical and horizontal segments, only.
default edge layout descriptor
to orthogonal.false
. Edges are not orthogonally routed.true
if edges are routed orthogonally, false
otherwisesetOrthogonalRoutingEnabled(boolean)
public boolean isRecursiveGroupLayeringEnabled()
If this option is enabled, groups are layered recursively, i.e.
If it is disabled, group information is ignored for the layering step.
If the graph is flat, this setting is ignored.
true
. Groups are layered recursively.true
if group information is used, false
otherwisesetGroupCompactionEnabled(boolean)
,
setRecursiveGroupLayeringEnabled(boolean)
public boolean isStopAfterLayeringEnabled()
By then, each node will be assigned to a layer. Since the sequencing and drawing phases are skipped, the order of the nodes within a layer matches the initial order of the nodes, edges won't be routed and the nodes won't get coordinates assigned.
The calculated layering information can be retrieved from the IDataProvider
registered with the key
LAYER_INDEX_DPKEY
.
1
.false
. The algorithm calculates the complete layout.true
if the layout algorithm should stop after the layering phase, false
if the complete layout should
be calculatedLAYER_INDEX_DPKEY
,
setStopAfterLayeringEnabled(boolean)
public boolean isStopAfterSequencingEnabled()
By then, each node will be assigned to a layer and will have a place in the sequence of nodes in this layer. Since the drawing phase is skipped, edges won't be routed and the nodes won't get coordinates assigned.
The calculated layering and sequencing information can be retrieved from the IDataProvider
s registered with the
keys LAYER_INDEX_DPKEY
and SEQUENCE_INDEX_DPKEY
.
1
.false
. The algorithm calculates the complete layout.true
if the layout algorithm should stop after the sequencing phase, false
if the complete layout should
be calculatedSEQUENCE_INDEX_DPKEY
,
LAYER_INDEX_DPKEY
,
setStopAfterSequencingEnabled(boolean)
public void setAutomaticEdgeGroupingEnabled(boolean value)
The automatic edge grouping tries to group a high number of edges without changing the semantic of the graph, i.e., it groups edges either at a common source node or a common target node. Edge groupings often allow more compact layouts since grouped edges are routed in a bus-style manner.
port constraints
, port candidates
or port
group ids (see PortConstraintKeys.SOURCE_PORT_GROUP_ID_DPKEY
and
PortConstraintKeys.TARGET_PORT_GROUP_ID_DPKEY
) at this node. Furthermore, edges cannot be grouped at a node
with specified port candidate set
.false
. Edges are not grouped automatically.value
- true
if the edge grouping should be applied, false
otherwiseisAutomaticEdgeGroupingEnabled()
public void setBackLoopRoutingEnabled(boolean value)
When this option is enabled, back-loops attach to the same node sides as the other edges, i.e., for layout orientation top-to-bottom, they leave their source at the bottom and enter their target at the top.
recursive edge styles
RecursiveEdgeStyle.DIRECTED
and
RecursiveEdgeStyle.UNDIRECTED
, including edges where source or target
are not inside a group node.false
. There is no back-loop routing applied to reversed edges.value
- true
if back-loop routing is applied, false
otherwiseisBackLoopRoutingEnabled()
public void setBackLoopRoutingForSelfLoopsEnabled(boolean value)
Self-loops will start at the bottom of their attached nodes and end at the top of them.
false
. There is no back-loop routing applied to self-loops.value
- true
if self-loops should be routed like back-loops, false
otherwiseisBackLoopRoutingEnabled()
,
isBackLoopRoutingForSelfLoopsEnabled()
public void setComponentArrangementPolicy(ComponentArrangementPolicy value)
IllegalArgumentException
- if the specified policy does not match a default component arrangement policyComponentArrangementPolicy.TOPMOST
. Connected components are aligned with their first layer.value
- one of the default component arrangement policiesgetComponentArrangementPolicy()
public void setEdgeLayoutDescriptor(EdgeLayoutDescriptor value)
EdgeLayoutDescriptor
instance used for all those edges that do not have a specific layout descriptor
assigned.
By default, this method will return a EdgeLayoutDescriptor
instance created with
createEdgeLayoutDescriptor()
.
IllegalArgumentException
- if the EdgeLayoutDescriptor
is null
EdgeLayoutDescriptor
value
- the current EdgeLayoutDescriptor
instanceHierarchicLayoutCore.EDGE_LAYOUT_DESCRIPTOR_DPKEY
,
getEdgeLayoutDescriptor()
public void setEdgeToEdgeDistance(double value)
All values have to be greater than or equal to 0
.
IllegalArgumentException
- if the distance is negativeIllegalStateException
- if the current IDrawingDistanceCalculator
is not an instance of DefaultDrawingDistanceCalculator
EdgeLayoutDescriptor
instances (see
HierarchicLayoutCore.EDGE_LAYOUT_DESCRIPTOR_DPKEY
) with custom minimum distance
values.value
- the non-negative minimum distancegetEdgeToEdgeDistance()
public void setFixedElementsLayerer(ILayerer value)
ILayerer
instance that obtains the layering for fixed nodes during the incremental layout run.IllegalArgumentException
- if the ILayerer
is null
AsIsLayerer
value
- the ILayerer
instance used for fixed nodessetLayoutMode(LayoutMode)
,
getFixedElementsLayerer()
public void setFixedElementsSequencer(ISequencer value)
ISequencer
instance that calculates the sequence of the fixed nodes during the incremental layout run.IllegalArgumentException
- if the given ISequencer
is null
AsIsSequencer
value
- the ISequencer
instance used for fixed elementssetLayoutMode(LayoutMode)
,
getFixedElementsSequencer()
public void setFromScratchLayerer(ILayerer value)
ILayerer
instance that obtains the layering for the nodes if the layout algorithm runs in
From Scratch mode
.
If the graph consists of multiple components, then the ILayerer
instance should be wrapped in
MultiComponentLayerer
.
IllegalArgumentException
- if the ILayerer
is null
WeightedLayerer
value
- the ILayerer
instancesetLayoutMode(LayoutMode)
,
getFromScratchLayerer()
public void setFromScratchLayeringStrategy(LayeringStrategy value)
from scratch
layerer.
The layouter assigns the nodes to separate layers. The nodes within each layer will be placed on the same horizontal layer. The layers will be arranged vertically starting with the small-numbered layers.
An important layering strategy for the hierarchic layout style is called Hierarchical Layering. A hierarchical layering tries to assign nodes to layers in a way such that as much edges of the graph as possible will point to the main layout direction, i.e., the start nodes of the edges will be in a layer with a smaller number than the corresponding end nodes. Also, a hierarchical layering will never put two connected nodes in the same layer.
This method wraps the internal implementations into a MultiComponentLayerer
instance so that it is possible to
specify the behavior of the algorithm if the component layouter
is disabled.
IllegalArgumentException
- if an unknown strategy is givenLayeringStrategy.HIERARCHICAL_OPTIMAL
value
- one of the predefined layering strategiesgetFromScratchLayeringStrategy()
public void setFromScratchSequencer(ISequencer value)
ISequencer
instance that calculates the node sequence if the layout algorithm runs in
From Scratch mode
.IllegalArgumentException
- if the ISequencer
is null
DefaultLayerSequencer
value
- the ISequencer
instancegetFromScratchLayerer()
,
setLayoutMode(LayoutMode)
,
getFromScratchSequencer()
public void setGridSpacing(double value)
When the spacing is negative or zero, no grid is defined, otherwise nodes and edges are placed on multiples of the grid spacing.
value
- the grid spacingIIncrementalHintsFactory
,
getGridSpacing()
public void setGroupAlignmentPolicy(GroupAlignmentPolicy value)
IllegalArgumentException
- if an unknown group alignment policy is givenGroupAlignmentPolicy.CENTER
. Groups and normal nodes are center aligned.value
- one of the default group alignment policiessetRecursiveGroupLayeringEnabled(boolean)
,
getGroupAlignmentPolicy()
public void setGroupCompactionEnabled(boolean value)
The number of node layers is decreased if possible without reversing edge directions. The resulting layering tries to keep the layer span of a group node minimum while minimizing the overall vertical space.
TopologicalLayerer
is used for layer assignment. If this feature is
enabled, an alignment policy that is set with GroupAlignmentPolicy
is ignored.false
. The layer compaction is disabled.value
- true
if group compaction is active, false
otherwisesetRecursiveGroupLayeringEnabled(boolean)
,
isGroupCompactionEnabled()
public void setIntegratedEdgeLabelingEnabled(boolean value)
To define the desired placement for each label add a PreferredPlacementDescriptor
on
IEdgeLabelLayout
.
This method is a convenience method that assures that the labeling algorithm
is
of type LabelLayoutTranslator
and EdgeLabelTranslationEnabled
is set to true
.
IllegalStateException
- if integrated labeling should be enabled but the current labeling algorithm
is
not of type LabelLayoutTranslator
IllegalStateException
- if no properly configured LabelLayoutTranslator
is registered even though integrated labeling was enabled
earlier (can happen when manually specifying the labeling algorithm
).labeling algorithm
will be
overwritten and when disabling it, any currently specified labeling algorithm will be disabled via property
LabelingEnabled
. Therefore, it is recommended to only use this
convenience property instead of manually changing the mentioned other properties.false
. Integrated edge labeling is disabled.value
- true
if integrated edge labeling is enabled, false
otherwiseisIntegratedEdgeLabelingEnabled()
public void setLayerSeparationEnabled(boolean value)
In case layers are not separated, nodes of a layer may extend into adjacent layers. Otherwise, nodes of different layers are strictly separated, i.e., layers are placed below each other.
true
. Layers are separated.value
- true
if layers are separated, false
otherwiseisLayerSeparationEnabled()
public void setLayoutMode(LayoutMode value)
Depending on the mode the layout algorithm will use different ILayerer
and ISequencer
implementations.
IllegalArgumentException
- if the given layout mode is unknownLayoutMode.FROM_SCRATCH
value
- the new layout modegetFromScratchLayerer()
,
getFromScratchSequencer()
,
getFixedElementsLayerer()
,
getFixedElementsSequencer()
,
getLayoutMode()
public void setMaximumDuration(long value)
Values have to be greater or equal to 0
.
IllegalArgumentException
- if the maximum duration is negativeLong.MAX_VALUE
. The layout algorithm runs unrestricted.value
- a non-negative value that specifies the time limitgetMaximumDuration()
public void setMinimumLayerDistance(double value)
The specified distance should have a non-negative value.
IllegalArgumentException
- if the distance is negativevalue
- the non-negative minimum distancegetMinimumLayerDistance()
public void setNodeLabelConsiderationEnabled(boolean value)
This method is a convenience method that assures that the labeling algorithm
is
of type LabelLayoutTranslator
and NodeLabelTranslationEnabled
is set to true
.
IllegalStateException
- if this property should be enabled but the current labeling algorithm
is not of
type LabelLayoutTranslator
IllegalStateException
- if no properly configured LabelLayoutTranslator
is registered even though this property was enabled earlier (can
happen when manually specifying the labeling algorithm
).false
. Node labels are not considered.value
- true
if the layout algorithm takes the node labels into account, false
otherwiseisNodeLabelConsiderationEnabled()
public void setNodeLayoutDescriptor(NodeLayoutDescriptor value)
NodeLayoutDescriptor
instance used for all those nodes that do not have a specific layout descriptor
assigned.
By default, this method will return a NodeLayoutDescriptor
instance created with
createNodeLayoutDescriptor()
.
IllegalArgumentException
- if the given NodeLayoutDescriptor
is null
NodeLayoutDescriptor
value
- the current NodeLayoutDescriptor
instanceHierarchicLayoutCore.NODE_LAYOUT_DESCRIPTOR_DPKEY
,
createNodeLayoutDescriptor()
,
getNodeLayoutDescriptor()
public void setNodePlacer(INodePlacer value)
INodePlacer
instance that will calculate the final node placement of the layout.IllegalArgumentException
- if the INodePlacer
is null
SimplexNodePlacer
value
- the INodePlacer
instancegetNodePlacer()
public void setNodeToEdgeDistance(double value)
All values have to be greater than or equal to 0
.
IllegalArgumentException
- if the distance is negativeIllegalStateException
- if the current IDrawingDistanceCalculator
is not an instance of DefaultDrawingDistanceCalculator
NodeLayoutDescriptor
/EdgeLayoutDescriptor
instances (see HierarchicLayoutCore.NODE_LAYOUT_DESCRIPTOR_DPKEY
and
HierarchicLayoutCore.EDGE_LAYOUT_DESCRIPTOR_DPKEY
) with custom minimum distance values.value
- the non-negative minimum distancegetNodeToEdgeDistance()
public void setNodeToNodeDistance(double value)
All values have to be greater than or equal to 0
.
IllegalArgumentException
- if the distance is negativeIllegalStateException
- if the current IDrawingDistanceCalculator
is not an instance of DefaultDrawingDistanceCalculator
NodeLayoutDescriptor
instances (see
HierarchicLayoutCore.NODE_LAYOUT_DESCRIPTOR_DPKEY
) with custom minimum distance
values.value
- the non-negative minimum distancegetNodeToNodeDistance()
public void setOrthogonalRoutingEnabled(boolean value)
When orthogonal routing is enabled, all resulting edge paths will be composed of vertical and horizontal segments, only.
default edge layout descriptor
to orthogonal.false
. Edges are not orthogonally routed.value
- true
if edges are routed orthogonally, false
otherwiseisOrthogonalRoutingEnabled()
public void setRecursiveGroupLayeringEnabled(boolean value)
If this option is enabled, groups are layered recursively, i.e.
If it is disabled, group information is ignored for the layering step.
If the graph is flat, this setting is ignored.
true
. Groups are layered recursively.value
- true
if group information is used, false
otherwisesetGroupCompactionEnabled(boolean)
,
isRecursiveGroupLayeringEnabled()
public void setStopAfterLayeringEnabled(boolean value)
By then, each node will be assigned to a layer. Since the sequencing and drawing phases are skipped, the order of the nodes within a layer matches the initial order of the nodes, edges won't be routed and the nodes won't get coordinates assigned.
The calculated layering information can be retrieved from the IDataProvider
registered with the key
LAYER_INDEX_DPKEY
.
1
.false
. The algorithm calculates the complete layout.value
- true
if the layout algorithm should stop after the layering phase, false
if the complete layout should
be calculatedLAYER_INDEX_DPKEY
,
isStopAfterLayeringEnabled()
public void setStopAfterSequencingEnabled(boolean value)
By then, each node will be assigned to a layer and will have a place in the sequence of nodes in this layer. Since the drawing phase is skipped, edges won't be routed and the nodes won't get coordinates assigned.
The calculated layering and sequencing information can be retrieved from the IDataProvider
s registered with the
keys LAYER_INDEX_DPKEY
and SEQUENCE_INDEX_DPKEY
.
1
.false
. The algorithm calculates the complete layout.value
- true
if the layout algorithm should stop after the sequencing phase, false
if the complete layout should
be calculatedSEQUENCE_INDEX_DPKEY
,
LAYER_INDEX_DPKEY
,
isStopAfterSequencingEnabled()