The Hierarchical Layout allows you to specify the level
index and the position index of a node.
You specify the level and position index of a graphic
node in the following way:
layout.setSpecNodeLevelIndex(node, 5); layout.setSpecNodePositionIndex(node, 33);
How these indexes are used depends on the graph topology
and the additional constraints. For example, the specified level index
can be in conflict with some ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalLevelRangeConstraint or ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalSameLevelConstraint. In this case, the constraint
priorities determine how the conflict is resolved (see Constraint priorities (HL)). If the
incremental mode is enabled, the specified node level and position
index are ignored, since the incremental mode tries to preserve old
node positions. It is also possible to obtain the indexes of nodes
that were calculated during layout.
Calculated level index
The layout algorithm allows you to access the level index
that was calculated for a node by a previous layout. Use the method:
var index = layout.getCalcNodeLevelIndex(node);
If the node was never laid out, this method returns
-1
.
Otherwise, it returns the previous level index of the node. In an application that specifies layout parameters entirely
programmatically, the method can be used to specify the level index
for the next layout in the following way:
var index = layout.getCalcNodeLevelIndex(node); layout.setSpecNodeLevelIndex(node, index);
It ensures that the node is placed at the same level
as in the previous layout.
If the graph is detached from the layout algorithm, the
calculated level index of a node is set back to
-1
.
Note
Be aware of the difference between the methods getCalcNodeLevelIndex and getSpecNodeLevelIndex. The first one returns the
level index calculated by the previous layout. The second one returns
the specified level index, even if there was no previous layout.
For instance, consider two nodes A and B. Node A has
no specified level index and node B has a specified level index 5.
Before the first layout, the method
getCalcNodeLevelIndex
returns
-1 for both nodes because the levels have not been calculated yet.
However, getSpecNodeLevelIndex
returns
-1 for A and 5 for B. After the first layout, node A can be placed
at level 4. Now, getCalcNodeLevelIndex
returns
4 for node A and 5 for node B and getSpecNodeLevelIndex
still
returns -1 for A and 5 for B. Calculated position index
The layout algorithm allows you to access the position
index within a level that was calculated for a node by a previous
layout. Use the method:
var index = layout.getCalcNodePositionIndex(node);
If the node was never laid out, this method returns -1.
Otherwise, it returns the previous position index of the node within
its level.
To ensure that the node is placed at the same level at
the same relative position as in the previous layout, use the following
code in an application that specifies layout parameters entirely programmatically:
layout.setSpecNodeLevelIndex(node, layout.getCalcNodeLevelIndex(node)); layout.setSpecNodePositionIndex(node, layout.getCalcNodePositionIndex(node));
This example code works only if the generic connected
component layout is disabled and the port sides
EAST
or WEST
are
not used in the layout. If the graph is detached from the layout algorithm, the
calculated position index of a node is set back to -1.
Note
Be aware of the difference between the methods getCalcNodePositionIndex and setSpecNodePositionIndex. The first one returns the
position index calculated by the previous layout and -1 if there was
no previous layout. The second one returns the specified position
index even if there was no previous layout. This behavior is similar
to the behavior of the specified and calculated level index (see Calculated level index).