ノードが第 1 レベルになるように強制するために、以下を指定できます。
layout.setSpecNodeLevelIndex(node, 0);
ただし、レイアウトの開始時点では作成されるレベル数が不明であるため、最後のレベルに対してレベル・インデックスを指定することはできません。
以下のように指定するのは賢明ではありません。
layout.setSpecNodeLevelIndex(node, Number.MAX_VALUE);
これは、使用されるレベルと最後のレベルの間に多数の空のレベルが作成されるからです。
こうした空のレベルは後処理ステップで削除されますが、レイアウトの速度および品質に影響します。
(実際、指定レベル・インデックスをあまりにも高く設定した場合、アルゴリズムはメモリー不足になります)。
制約を使用することで、同じ効果をより効率的に実現できます。
ノードが第 1 レベルになるように強制するには、以下のようにします。
以下を呼び出します。
layout.addConstraint(new ibm_ilog.graphlayout.hierarchical.HierarchicalExtremityConstraint(node, ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.NORTH));
ノードが最後のレベルになるように強制するには、以下のようにします。
以下を呼び出します。
layout.addConstraint( new ibm_ilog.graphlayout.hierarchical.HierarchicalExtremityConstraint(node, ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.SOUTH));
コンパス方向を簡便な参照として使用すると
(ポートの側面パラメーター
(HL) を参照)、
第 1 レベルは北極を示し、最後のレベルは南極を示します。
また、以下のように、東側および西側に対しても末端制約を指定できます。
layout.addConstraint( new ibm_ilog.graphlayout.hierarchical.HierarchicalExtremityConstraint(node1, ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.EAST)); layout.addConstraint( new ibm_ilog.graphlayout.hierarchical.HierarchicalExtremityConstraint(node2, ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.WEST));
西の末端制約は、ノードが、属するレベル内の最低の位置インデックスになるように強制し、
東の末端制約は、ノードが、属するレベル内の最高の位置インデックスになるように強制します。
位置インデックスは、レベル内の相対位置を指定します。
例えば、方向選択が下向きの場合は、西の末端制約が指定されたノードは、属するレベル内の左端ノードになります。ただし、これは他のレベルに影響しません。そのため、別のレベルでこのノードよりもさらに左に配置されるノードが存在する可能性があります。
以下の図に、いくつかの末端制約の例を示します。

末端制約のスケッチ