階層型レイアウトでは、ノードのレベル・インデックスおよび位置インデックスを指定できます。
グラフィック・ノードのレベル・インデックスおよび位置インデックスを指定するには、以下のようにします。
layout.setSpecNodeLevelIndex(node, 5); layout.setSpecNodePositionIndex(node, 33);
これらのインデックスがどのように使用されるのかは、グラフ・トポロジーおよび追加制約によって異なります。
例えば、指定されたレベル・インデックスが、一部の ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalLevelRangeConstraint または ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalSameLevelConstraint と競合する場合があります。
この場合、制約優先度が、競合がどのように解決されるのかを決定します
(制約の優先度 (HL) を参照)。
インクリメンタル・モードが使用可能になっている場合は、インクリメンタル・モードは旧ノード位置を保持しようとするため、指定されたノードのレベル・インデックスおよび位置インデックスは無視されます。
また、レイアウト時に計算された、ノードのインデックスを取得することも可能です。
計算済みレベル・インデックス
レイアウト・アルゴリズムでは、以前のレイアウトでノードに対して計算されたレベル・インデックスにアクセスできます。
次のメソッドを使用します。
var index = layout.getCalcNodeLevelIndex(node);
ノードがレイアウトされたことがない場合は、このメソッドは
-1
を返します。
それ以外の場合は、ノードの以前のレベル・インデックスを返します。レイアウト・パラメーターをすべてプログラムで指定しているアプリケーションの場合、
以下のように、このメソッドを使用して、次回のレイアウトのレベル・インデックスを指定できます。
var index = layout.getCalcNodeLevelIndex(node); layout.setSpecNodeLevelIndex(node, index);
ノードは、以前のレイアウトと同じレベルに確実に配置されます。
グラフがレイアウト・アルゴリズムから切り離されると、ノードの計算済みレベル・インデックスは再び
-1
に設定されます。メモ
メソッド getCalcNodeLevelIndex と getSpecNodeLevelIndex の違いに注意してください。
最初のメソッドは、以前のレイアウトで計算されたレベル・インデックスを返します。
2 番目のメソッドは、以前のレイアウトがない場合でも、指定されたレベル・インデックスを返します。
例えば、2 つのノード
A および B を考えます。ノード
A にはレベル・インデックスが指定されておらず、
ノード B にはレベル・インデックス
5 が指定されているものとします。
最初のレイアウト前に、レベルがまだ計算されていないため、メソッド
getCalcNodeLevelIndex
は、両方のノードに対して
-1 を返します。 一方、getSpecNodeLevelIndex
は、A に対して
-1、B に対して 5 を返します。
最初のレイアウトの後に、ノード
A がレベル 4 に配置されたとします。
今度は、getCalcNodeLevelIndex
は、ノード A に対して
4、ノード B に対して
5 を返します。 getSpecNodeLevelIndex
は引き続き、A に対して
-1、B に対して 5 を返します。計算済み位置インデックス
レイアウト・アルゴリズムでは、以前のレイアウトでノードに対して計算された、レベル内の位置インデックスにアクセスできます。
次のメソッドを使用します。
var index = layout.getCalcNodePositionIndex(node);
ノードがレイアウトされたことがない場合は、このメソッドは
-1 を返します。 それ以外の場合は、属するレベル内の、ノードの以前の位置インデックスを返します。
ノードが以前のレイアウトと同じレベルの同じ相対位置に確実に配置されるようにするには、
アプリケーションで、すべてプログラムを使用してレイアウト・パラメーターを指定する以下のコードを使用します。
layout.setSpecNodeLevelIndex(node, layout.getCalcNodeLevelIndex(node)); layout.setSpecNodePositionIndex(node, layout.getCalcNodePositionIndex(node));
このサンプル・コードは、汎用接続コンポーネント・レイアウトが使用不可になっていて、
ポートの側面
EAST
および WEST
がレイアウトで使用されていない場合にのみ機能します。グラフがレイアウト・アルゴリズムから切り離されると、ノードの計算済みの位置は再び
-1 に設定されます。
メモ
メソッド getCalcNodePositionIndex と setSpecNodePositionIndex の違いに注意してください。
最初のメソッドは、以前のレイアウトによって計算された位置インデックス
(以前のレイアウトがない場合は
-1) を返します。 2 番目のメソッドは、以前のレイアウトがない場合でも、指定された位置インデックスを返します。
この振る舞いは、指定および計算されるレベル・インデックスの振る舞いと似ています
(計算済みレベル・インデックス を参照)。