HL の特定のパラメーター

方向選択 (HL)

方向選択パラメーターは、ほとんどのリンクが向かうべき方向を指定します。 方向選択が上向きや下向きの場合は、ノード・レベルは水平方向になりリンクはほとんどが垂直になります。方向選択が左向きや右向きの場合は、ノード・レベルは垂直方向になりリンクはほとんどが水平になります。
方向選択が下向きの場合、インデックス 0 のレベルにあるノードは、描画の一番上のボーダーに配置されます。インデックス 0 のレベルにあるノードは通常はその描画のルート・ノード (到着リンクのないノード) です。方向選択が上向きの場合は、インデックス 0 のレベルにあるノードは、描画の一番下のボーダーに配置されます。方向選択が右向きの場合は、ノードは描画の左ボーダーに配置されます。
方向選択パラメーターを示す階層型レイアウトの図
方向選択
下向きの方向選択を指定する場合は、以下のようにします。
setFlowDirectionのメソッドを使用します。 次に例を示します。
layout.setFlowDirection(ibm_ilog.graphlayout.Direction.LEFT);
方向選択の有効な値は以下のとおりです。
  • ibm_ilog.graphlayout.Direction.RIGHT (デフォルト)
  • ibm_ilog.graphlayout.Direction.LEFT
  • ibm_ilog.graphlayout.Direction.BOTTOM
  • ibm_ilog.graphlayout.Direction.TOP

レベル・ストラテジー (HL)

レイアウト・アルゴリズムはノードをレベルに分割します (HL アルゴリズムの要旨 を参照)。 レベル・ストラテジーは、レベルの計算方法を指定します。レベル・ストラテジーの他に、レイアウトの制約 (HL のレイアウト制約 を参照)、 レベル・インデックス (上級者向け: 追加インデックス (HL) を参照)、 およびインクリメンタル・モード (HL でのインクリメンタル・モード を参照) も、レベルの計算方法に影響します。 インクリメンタル・モードが無効になっている場合、レベル・ストラテジーがレイアウトの制約およびレベル・インデックス仕様の影響を受けないすべてのノードのレベルを決定します。
階層型レイアウトにおけるレベル・ストラテジー
レベル・ストラテジー
レベル・ストラテジーを指定するには、以下のようにします。
setLevelingStrategyのメソッドを使用します。 次に例を示します。
layout.setLevelingStrategy(ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.SEMI_OPTIMAL);
レベル・ストラテジーの有効な値は以下のとおりです。
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.SEMI_OPTIMAL (デフォルト)
    多くの場合、この値により、最適ストラテジーと同じ結果がより迅速に得られます。 レイアウト・アルゴリズムは、すべてのエッジのレベル距離の合計を最小限に抑えるため、選択肢の中から最適なものを選択します。ルート・ノードを最大可能レベルまで引き上げ、リーフ・ノードを最小可能レベルまで引き下げます。
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.OPTIMAL
    この値の場合、すべてのエッジのレベル距離の合計を最小化するアルゴリズムを使用します。 最適ストラテジーは他のストラテジーに比べて時間はかかりますが、一番いい結果をもたらします。
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HIGHER_LEVELS
    ノードは、可能な限り一番高いレベル番号のレベルを使用する傾向にあります。 すべてのリーフ・ノードは、一番高いレベル番号のレベルになります。すべてのルート・ノードは、可能な限り高いレベルまで引き上げられます。
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.LOWER_LEVELS
    ノードは、可能な限り一番低いレベル番号のレベルを使用する傾向にあります。 すべてのルート・ノードはレベル 0 です。 すべてのリーフ・ノードは、可能な限り低い番号のレベルまで引き下げられます。
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.SPREAD_OUT
    このストラテジーは、下位レベル・ストラテジーと上位レベル・ストラテジーの組み合わせです。 すべてのルート・ノードはレベル 0 になり、すべてのリーフ・ノードは一番高いレベル番号のレベルになります。 すべての内部ノードは、バランスのよい位置にあります。

レベル位置揃え (HL)

レイアウトで水平レベルを使用する場合は、同じレベルのノードはほぼ同じ Y 座標に配置されます。 同じ Y 座標にするのが、同じレベルのすべてのノードの上ボーダーなのか、下ボーダーなのか、または中心なのかによって、ノードを位置揃えできます。
レイアウトが垂直レベルを使用する場合は、同じレベルにあるノードはほぼ同じ X 座標に配置されます。 ノードは同じレベルに属するノードの左ボーダー、右ボーダー、または中心に整列するように位置揃えできます。
上向きのレベル位置揃えを指定するには、以下のようにします。
setLevelJustificationのメソッドを使用します。 次に例を示します。
layout.setLevelJustification(ibm_ilog.graphlayout.Direction.TOP);
方向選択が上向きや下向きの場合は、レベル位置揃えの有効な値は以下のとおりです。
  • ibm_ilog.graphlayout.Direction.TOP
  • ibm_ilog.graphlayout.Direction.BOTTOM
  • ibm_ilog.graphlayout.Direction.CENTER (デフォルト)
水平レベルのレベル位置揃えパラメーターを示す階層型レイアウトの図
水平レベルのレベル位置揃え
方向選択が左向きや右向きの場合は、レベル位置揃えの有効な値は以下のとおりです。
  • ibm_ilog.graphlayout.Direction.LEFT
  • ibm_ilog.graphlayout.Direction.RIGHT
  • ibm_ilog.graphlayout.Direction.CENTER (デフォルト)
垂直レベルのレベル位置揃えパラメーターを示す階層型レイアウトの図
垂直レベルのレベル位置揃え

リンク・スタイル (HL)

レイアウト・アルゴリズムはノードを配置して、リンクを経路指定します。 ノードとリンクの重なりを回避するために、リンクの形状に曲折点を作成します。 リンク・スタイル・パラメーターは、曲折点の位置および数を制御します。 リンク・スタイルはグローバルまたは各リンクでローカルに設定できます。 グローバルに設定した場合は、すべてのリンクが同じ形状になり、ローカルに設定した場合は、同じ描画で異なるリンク形状が生じます。
 リンク・スタイル・パラメーターを使用した例を示す階層型レイアウトの図
リンク・スタイル

グローバル・リンク・スタイル

グローバル・リンク・スタイルを設定するには、以下のようにします。
setGlobalLinkStyleのメソッドを使用します。 次に例を示します。
layout.setGlobalLinkStyle(ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.ORTHOGONAL_STYLE);
リンク・スタイルの有効値は、以下のとおりです。
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.POLYLINE_STYLE
    すべてのリンクは折れ線形状になります。 折れ線形状は、曲折点で接続される一連の線分から成ります。 線分は任意の方向に向けることができます。この値はデフォルト値です。
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.ORTHOGONAL_STYLE
    すべてのリンクは直交形状になります。 直交形状は、曲折点で接続される直交線分から成ります。 直交形状は、線分を 0 度、90 度、180 度、270 度の方向にのみ向けることができる折れ線形状です。
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.STRAIGHT_LINE_STYLE
    すべてのリンクは 直線 形状になります。 すべての中間曲折点 (存在する場合) が削除されます。 多くの場合、この値により、ノードとリンクが重なります。
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.NO_RESHAPE_STYLE
    リンクは、方法を問わず、形状変更されることはありません。ただし、固定リンクと異なり、リンクは完全には無視されません。 依然としてレベル付けの計算に使用されます。
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.MIXED_STYLE
    各リンクには、異なるリンク・スタイルを指定できます。同じグラフで異なるリンク形状を持てるように、各個別リンクのスタイルを設定できます。

個別リンク・スタイル

グローバル・リンク・スタイルが MIXED_STYLE でない限り、すべてのリンクの形状スタイルは同じです。 グローバル・リンク・スタイルが MIXED_STYLE の場合にのみ、各リンクに個別リンク・スタイルを設定できます。
 異なるリンク・スタイルの混用を示す階層型レイアウトの例
同じ描画内に混合された各種リンク・スタイル
個別リンクのスタイルを指定するには、以下のようにします。
以下のメソッドを使用します。
layout.setLinkStyle(link, ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.ORTHOGONAL_STYLE);
var style = layout.getLinkStyle();
ローカル・リンクのリンク・スタイルの有効値は、以下のように、グローバル・リンク・スタイルの場合と同じです。
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.POLYLINE_STYLE
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.ORTHOGONAL_STYLE
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.STRAIGHT_LINE_STYLE
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.NO_RESHAPE_STYLE

コネクター・スタイル (HL)

レイアウト・アルゴリズムは、リンクの終点 (コネクター・ピン) をノードに自動的に配置します。 コネクター・スタイル・パラメーターは、これらの終点の計算方法を指定します。
 コネクター・スタイル・パラメーターを使用した例を示す階層型レイアウトの図
コネクター・スタイル
コネクター・スタイルを指定するには、以下のようにします。
setConnectorStyleのメソッドを使用します。 次に例を示します。
layout.setConnectorStyle(ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.CENTERED_PINS);
style の有効な値は、以下のとおりです。
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.CENTERED_PINS
    リンクの終点は、リンクが接続されるボーダーの中央に配置されます。このオプションは、 折れ線リンクおよび 直線 リンクの場合に適しています。 直交リンクはこのスタイルでは不明確な外観になる可能性があるため、直交リンクにはあまり適していません。
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.CLIPPED_PINS
    ノードの中心に向かう各リンクは、ノード・ボーダーでクリップされます。 コネクター・ピンは、リンクがクリップされるボーダー上のポイントに配置されます。 このオプションは、ポートの指定がない折れ線リンクの場合に適しています。いずれかのリンクのポート側面が指定されている場合は、使用しないでください。
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.EVENLY_SPACED_PINS
    コネクター・ピンは、ノードのボーダーに沿って等間隔に分散されます。 このスタイルは、リンクの終点が重ならないことを保証します。 これは、直交リンクの場合に最適なスタイルで、その他のリンク・スタイルにも適しています。
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.AUTOMATIC_PINS
    コネクター・スタイルは、リンク・スタイルに応じて自動的に選択されます。 リンクのいずれかが直交スタイルである場合、またはリンクのいずれかにポート側面が指定されている場合は、アルゴリズムは等間隔コネクターを選択します。すべてのリンクが直線である場合は、中央揃えのコネクターを選択します。 それ以外の場合は、クリッピング・コネクターを選択します。

エンドポイント・モード (HL)

通常、レイアウト・アルゴリズムは、各リンクの終端ポイントを自由に選択します。 ただし、ユーザーは、リンクの現行固定終端ピンを使用するように指定できます。
レイアウト・アルゴリズムには、2 つのエンドポイント・モードがあります。エンドポイント・モードはグローバルに、または各リンクでローカルに設定できます。 グローバルに設定した場合は、すべての終点が同じモードになり、ローカルに設定した場合は同じ描画で異なる終点が生じます。

グローバル・エンドポイント・モード

グローバル・エンドポイント・モードを設定するには、以下のようにします。
setGlobalOriginPointMode メソッドおよび setGlobalDestinationPointMode メソッドを使用します。次に例を示します。
layout.setGlobalOriginPointMode(ibm_ilog.graphlayout.HierarchicalLayout.FREE_MODE);
mode の有効な値は、以下のとおりです。
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.FREE_MODE (デフォルト)
    レイアウトは、ソース/宛先ノード上の接続ポイントの適切な位置を自由に選択します。
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.FIXED_MODE
    レイアウトは、ソース/宛先ノード上の接続ポイントの現行位置を保持する必要があります。
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.MIXED_MODE
    各リンクは異なるエンドポイント・モードにすることができます。

個別エンドポイント・モード

グローバル・エンドポイント・モードが ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.MIXED_MODE でない限り、すべてのリンクのエンドポイント・モードは同じです。グローバル・エンドポイント・モードが MIXED_MODE に設定されている場合にのみ、各リンクに個別エンドポイント・モードを設定できます。
個別リンクのエンドポイント・モードを設定するには、以下のようにします。
以下のメソッドを使用します。
layout.setOriginPointMode(link, ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.FIXED_MODE);
var mode = layout.getOriginPointMode();
layout.setDestinationPointMode(link, ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.FIXED_MODE);
var mode = layout.getDestinationPointMode();
mode の有効な値は、以下のとおりです。
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.FREE_MODE (デフォルト)
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.FIXED_MODE

リンク接続ボックス・インターフェースの使用 (HL)

デフォルトでは、コネクター・スタイルは、各側の中央で対称になるように、リンクの接続ポイントをノードのバウンディング・ボックスのボーダーに分散する方法を決定します。バウンディング・ボックスよりも小さいまたは大きい矩形に接続ポイントを配置する必要が生じることがあります。例えば、ラベルがノードの下または上に表示されている場合に、 このようなことが起きる可能性があります。
ILinkConnectionBoxProvider を実装するクラスを提供することで、リンクの接続ポイントの位置を変更できます。 リンク接続ボックス・インターフェースを設定するには、メソッド setLinkConnectionBoxInterface を使用します。
リンク接続ボックス・インターフェースは、各ノードにリンク接続ボックスおよび接線シフト・オフセットを提供します。 階層型レイアウトはリンク接続ボックスを使用しますが、接線オフセットは使用しません。
以下の図で、接続ボックスのカスタマイズによる効果を示します。 左は、接続ボックス・インターフェースなしの結果です。 右のピクチャーは、接続ボックス・インターフェースが、対応するノードに破線の矩形を返した場合の効果を示しています。
 リンク接続ボックス・インターフェースの結果を示す図
接続ボックス・インターフェースの効果

上級者向け: 太いリンク (HL)

等間隔ピンをコネクター・スタイルとして使用する場合は、リンクの中央またはリンクのボーダーについて等間隔にリンクを配置できます。 その差は、同じノードに接続するリンクの幅が異なる場合にのみ認識できます。 例えば、アプリケーションでリンク幅がフローのコストまたは能力を示す場合は、多数の異なるリンク幅が生じる可能性があります。
リンク幅の使用 に、異なるリンク幅を使用した場合の効果を示します。 左の描画では、左ノードでリンクの中央が均一に分散されています。 各リンクには、ノードの側で同じスペースが使用可能になっています。 そのため、太いリンク同士は細いリンク同士よりも近いように見え、リンク・ボーダー間のオフセットが異なります。 右の描画では、太いリンクには、細いリンクよりも多くのスペースが使用可能になっています。 (左ノードに接続している部分の) リンク・ボーダー間のオフセットは、リンク幅が接続ポイントの計算で考慮されているため、一定になっています。
 リンク幅の使用
(LinkWidthUsed) パラメーターを使用した例を示す階層型レイアウトの図
リンク幅の使用
コネクター計算でリンク幅を考慮するようにするには、以下のようにします。
setLinkWidthUsedのメソッドを使用します。 次に例を示します。
layout.setLinkWidthUsed(true);
リンク幅設定はデフォルトでは使用不可です。 コネクター・スタイル CENTERED_PINS または CLIPPED_PINS が使用されている場合は、リンク幅の効果はありません。

ポートの側面パラメーター (HL)

階層型レイアウト・アルゴリズムは、なるべく多くのリンクのフローが同じ方向であるレイアウトを作成します。 方向選択が下向きの場合は、通常、到着リンクはノードの上側に接続し、出発リンクはノードの下側に接続します。リンクがノードのどの側面に接続するかを指定することもできます。
ポートの側面の説明を単純化するために、 コンパスの方向 (東西南北) を使用してポートの側面を示します。 指定されたリンクの方向選択は常に南向きで、第 1 レベルは北向きになります。 方向選択が下向きの場合は、北が描画の一番上で、南が下、東が右、西が左側になります。方向選択が右向きの場合は、北が左で、南が右、東が上、西が下になります。
ポートの側面へのリンク接続 に、大きな中央のノードの指定ポート側面にリンクが接続している描画を示します。コンパス・アイコンで、これらの描画内のコンパス方向が示されています。
 ノードの側面を指定するためにコンパスの方向を使用した例を示す階層型レイアウトの図
ポートの側面へのリンク接続
リンクがソース・ノードのどの側面に接続するのかを設定できます。
リンクがソース・ノードのどの側面に接続するのかを設定するには、以下のようにします。
次のメソッドを使用します。
layout.setFromPortSide(link, ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.EAST);
同様に、リンクが宛先ノードのどの側面に接続するのかを設定できます。
リンクが宛先ノードのどの側面に接続するのかを設定するには、以下のようにします。
次のメソッドを使用します。
layout.setToPortSide(link, ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.WEST);
side の有効な値は、以下のとおりです。
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.UNSPECIFIED (デフォルト)
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.NORTH
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.SOUTH
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.EAST
  • ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.WEST
リンクの現行選択項目を取得するには、以下のメソッドを使用します。
var side = layout.getFromPortSide();
var side = layout.getToPortSide();
ポートの側面の東および西は、直交リンク・スタイルと組み合わせることでうまくいきます。これらのポートの側面を使用した折れ線リンクでは、不要な曲折点が生じる場合があります。 また、ポートの側面が指定された場合は、コネクター・スタイル CLIPPED_PINS を使用しないでください。

ポートのインデックス・パラメーター (HL)

リンクがノードのどこに接続するかを指定できます。 正確な場所を指定することはできませんが、他のリンクの接続ポイントに対する相対位置を指定できます。 これはポート・インデックスを使用して行います。図 ポートおよび直交リンク・スタイルを使用したサンプル・レイアウト に、多数のノードでポートを使用したサンプル・レイアウトを示します。
同じポートのインデックスを持つリンクは、ノードの同じポイントに接続します。 コネクター・スタイル EVENLY_SPACED_PINS の場合と同じように、ポートはノードの側面で均等に分布されます。 ポートは、 そのインデックスに従って順序が決まります。ノードの北側や南側では、ポート・インデックスは東に向かって増加します。 ノードの東側や西側では、ポート・インデックスは南に向かって増加します。 このようにポートのインデックスを使用すると、方向選択を変更するだけで、すべてのポートの指定を更新する必要はないため、グラフを回転するのが簡単になります。
方向選択に関連するポートのインデックスの番号付け規則 に、どのようにポートのインデックスが方向選択に依存しているかを示します。
 ポートのインデックスを使用した例を示す階層型レイアウトの図
方向選択に関連するポートのインデックスの番号付け規則
ポート番号は通常、ポートの側面と組み合わせて使用されます。 そのため、ノードの各側面で使用可能なポート数を指定する必要があります。
ポート数を指定するには、以下のようにします。
次のメソッドを使用します。
layout.setNumberOfPorts(node, side, numberOfPorts);
例えば、特定のノードの各側面で 4 つのポートを使用する場合、以下の呼び出しを使用します。
layout.setNumberOfPorts(node, ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.EAST, 4);
layout.setNumberOfPorts(node, ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.WEST, 4);
layout.setNumberOfPorts(node, ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.NORTH, 4);
layout.setNumberOfPorts(node, ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.SOUTH, 4);
ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.EASTibm_ilog.graphlayout.hierarchical.HierarchicalLayout.WESTibm_ilog.graphlayout.hierarchical.HierarchicalLayout.NORTH、 および ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.SOUTH によって、ノードの側面が再度指定されます。 ノードで使用可能なポートの数を取得するには、以下のメソッドを使用します。
var n = layout.getNumberOfPorts(node);
各側面のポートの数を指定した後に、各リンクが接続するポートを選択できます。
リンクのポートの側面およびポートのインデックスを選択するには、以下のようにします。
ソース・ノードでの接続を指定するには、以下のメソッドを使用します。
layout.setFromPortSide(link, ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.EAST);
layout.setFromPortIndex(link, 2);
宛先ノードでの接続を指定するには、以下のメソッドを使用します。
layout.setToPortSide(link, ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.WEST);
layout.setToPortIndex(link, 2);
リンクの現在のポートのインデックスを取得するには、以下のメソッドを使用します。
var index = layout.getFromPortIndex(link);
var index = layout.getToPortIndex(link);
ポートの側面およびポートのインデックスの指定を使用すると、レイアウト・アルゴリズムに追加の制約を適用することになります。 指定する制約が多ければ多いほど、レイアウトの計算が難しくなります。 そのため、あまりにも多くのリンクにポートのインデックスを指定した場合、リンク交差が増加し、レイアウトのバランスが低下する可能性があります。

フォーク・リンク形状 (HL)

複数のリンクが同じ位置から開始し、直交に経路指定された場合、リンクが最初の 2 つのリンク・セグメントを共有するようにした方が望ましい場合があります。 この種類のリンク・バンドルの形状はフォークのようになります。 出発リンクのフォーク形状モードを使用可能にするには、以下を呼び出します。
layout.setFromFork(true);
到着リンクのフォーク形状モードを使用可能にするには、以下のようにします。
setToForkのメソッドを使用します。 次に例を示します。
layout.setToFork(true);
これらのステートメントは、リンクが直交に経路指定される場合にのみ有効です。 完全に同じポイントで開始または終了するリンクでのみフォークの外観になります。 setFromForktrue に指定するだけでは、 リンクが同じポイントから開始するようには強制されません。 リンクが同じポイントで開始または終了するように強制するには、中央揃えコネクター・スタイルを使用するか (コネクター・スタイル (HL) を参照)、 リンクに同じポートを指定します (ポートのインデックス・パラメーター (HL) を参照)。
 リンクでのフォーク形状の使用例を示す階層型レイアウトのダイアグラム
フォーク・リンク形状
フォーク形状には、以下のように 2 つの間隔パラメーターがあります。
layout.setMinForkSegmentLength(30);
ノードに直接隣接するセグメントの最小長を設定します。
layout.setPreferredForkAxisLength(10);
各分岐のフォーク軸 (ノードに隣接する 2 番目のセグメント) の優先長を設定します。
フォークに 5 つのブランチがある場合、軸全体の優先長は、指定したパラメーターの 5 倍になります。 優先フォーク軸長は、レイアウト・アルゴリズムにとって手掛かりに過ぎません。 十分なスペースが使用可能な場合、アルゴリズムはフォーク軸を拡張して、不要なリンク曲折点を回避します。 十分なスペースがない場合、アルゴリズムは、優先フォーク軸よりも小さいフォーク軸を計算できます。
フォーク・リンク形状は不明確な外観になる場合があります。 特に、リンクが、別のリンクが終了するポイントと同じポイントを起点とする場合は、その可能性があります。 このような場合、矢印がどちらのリンクに属しているのか認識できなくなるためです。

リンク優先度パラメーター (HL)

レイアウト・アルゴリズムは、すべてのリンクが短くなり、方向選択の向きに向かい、お互いに交差しないようにノードを配置しようとします。 ただし、これは常に可能なわけではありません。多くの場合、リンクの長さは同じにすることができません。 グラフに 環状 がある場合、一部のリンクは、方向選択の逆向きにする必要が生じます。 グラフが 非平面グラフ である場合は、一部のリンクは互いに交差する必要が生じます。
リンク優先度パラメーターは、長いリンク、逆向きのリンク、または交差するリンクが必要になる場合にどのリンクを選択するかを制御します。 優先度が低いリンクの方が、優先度が高いリンクよりも選択されやすくなります。 これは、低優先度のリンクが常に長くなったり、逆向きになったり、交差したりすることを意味するわけではありません。グラフの構造上、長いリンク、逆向きのリンク、および交差するリンクが不要な場合があるためです。
リンク優先度を設定するには、以下のようにします。
以下のメソッドを使用します。
layout.setLinkPriority(link, 0.5);
var priority = layout.getLinkPriority();
リンク優先度のデフォルト値は 1.0 です。 負のリンク優先度は許可されません。
リンク優先度の使用例として、循環 A->B->C->D->E->A を考えます。 どのリンクも逆向きにすることなくこのグラフをレイアウトするのは不可能です。 そのため、レイアウト・アルゴリズムは、逆向きにするリンクを 1 つ選択します。 選択するリンクを制御するために、1 つのリンクに他のリンクよりも低い優先度を付与します。 このリンクが逆向きになります。 図 リンク優先度の処理 で、下の方のレイアウトが、リンク優先度を使用した場合を示しています。 リンク C->D に優先度 0.5 を付与し、その他のすべてのリンクに優先度 1.0 を設定しています。 そのため、C-D が逆向きになります。リンク優先度の処理 の上の方のレイアウトは、すべてのリンクの優先度が同じ場合にどのようになるかが示されています。 リンク E->A が逆向きになっています。
 リンク優先度パラメーターを使用した例を示す階層型レイアウトのダイアグラム
リンク優先度の処理
リンク優先度の使用は、ポートとの組み合わせで重要になります。 南側に「開始」ポートがあり、北側に「終了」ポートがあるリンクは、方向選択の逆向きに優先的にレイアウトされます。 このようなフィードバック・リンクにより、描画の一部が傾斜する可能性があります。 図 リンク優先度とポートの使用 は、例を示しています。赤色のリンクは、ポートが指定されたフィードバック・リンクです。 以下の図の右側に示されているように正しい結果を得るには、フィードバック・リンクの優先度を非常に低い値に設定します。
1 つのリンクに低い優先度を付与する効果を示す例
リンク優先度とポートの使用

間隔パラメーター (HL)

レイアウトの間隔は、3 種類の間隔パラメーター (ノード間の最小オフセット、リンクの平行セグメント間の最小オフセット、 ノード・ボーダーとリンクの曲折点またはそのボーダーに平行なリンク・セグメントとの間の最小オフセット) によって制御されます。 リンクの平行セグメント間のオフセットは、同時に、リンクの曲折点間のオフセットでもあります。 3 種類のパラメーターはすべて、両方の方向 (水平および垂直) で生じます。
階層型レイアウトで使用される水平および垂直間隔パラメーター
間隔パラメーター
間隔パラメーターを設定するには、以下のようにします。
水平レベルを使用したレイアウト (方向選択は上向きまたは下向き) の場合、水平ノード・オフセットは、同じレベルのノード間の最小距離です。 垂直ノード・オフセットは、異なるレベルのノード間の最小距離 (すなわち、レベル間の最小距離) です。 非直交リンク・スタイルの場合、水平リンク・オフセットは基本的に、リンクの曲折点間の最小距離です。 水平ノード - リンク・オフセットは、ノード・ボーダーとリンクの曲折点との間の最小距離です。 水平レベルの場合、垂直リンク・オフセットおよび垂直ノード - リンク・オフセットは、リンク形状が直交の場合にのみ役割を果たします。
同様に、垂直レベルを使用したレイアウト (方向選択が左向きまたは右向き) の場合、垂直ノード・オフセットはレベル内のノード距離を制御します。 水平ノード・オフセットは、レベル間の最小距離です。 この場合、垂直リンク・オフセットおよび垂直ノード - リンク・オフセットは常に役割を果たしますが、 水平リンク・オフセットおよび水平ノード - リンク・オフセットは直交リンクの場合にのみレイアウトに影響します。
直交リンクの場合、水平リンク・オフセットは、平行な垂直リンク・セグメント間の最小距離です。 垂直リンク・オフセットは、平行な水平リンク・セグメント間の最小距離です。 ただし、レイアウト・アルゴリズムは常にこれらのオフセット要件を満たすことができるわけではありません。 ノードが小さいにもかかわらず多数の付随リンクがある場合、指定された最小リンク距離では、ノード・ボーダーに直交にリンクを配置できない場合があります。 この場合、アルゴリズムは、一部のリンク・セグメントを指定リンク・オフセットよりも近くに配置します。
 直交リンクによる階層型レイアウトのオフセット・パラメーターを使用した例を示すダイアグラム
直交リンクの場合の間隔パラメーター