上級者向け: 短リンク・レイアウトの特殊オプション

以下のオプションは、ibm_ilog.graphlayout.shortlink.ShortLinkLayout のみのオプションです。

セルフリンク・スタイル

セルフリンクとは、ソース・ノードと宛先ノードが同じノードであるリンクです。 短リンク・レイアウトでは、セルフリンク用に 2 つの任意指定の形状が用意されています。

曲折点が 2 つのセルフリンク・スタイルを示すグラフと、曲折点が 3 つのセルフリンク・スタイルを示すグラフ
セルフリンク・スタイルのオプション
セルフリンク・スタイルの設定の例 (リンク・レイアウト・アルゴリズム)
セルフリンクのスタイルを設定するには、以下のようにします。
メソッド setGlobalSelfLinkStyle を使用します。
layout.setGlobalSelfLinkStyle(ibm_ilog.graphlayout.shortlink.ShortLinkLayout.TWO_BEND_ORTHOGONAL_STYLE);
style の有効な値は、以下のとおりです。
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.TWO_BENDS_ORTHOGONAL_STYLE
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.THREE_BENDS_ORTHOGONAL_STYLE

最適化反復回数

リンク形状の最適化は、許容時間を超えた場合 (許容時間 (LL) を参照)、または反復回数が反復許容回数 を超えた場合に停止します。
最適化反復回数の指定の例 (リンク・レイアウト・アルゴリズム)
反復の許容回数を 3 に設定するには、以下のようにします。
メソッド setAllowedNumberOfIterations を使用します。
layout.setAllowedNumberOfIterations(3);
メモ
レイアウト処理の速度を速くするために、反復回数をゼロに設定してリンク形状の最適化を 無効にすることもできます。

均等に配置されたピンの余白率

余白率により、コネクター・スタイル (コネクター・スタイルを参照) が EVENLY_SPACED_PINS である場合、 および EVENLY_SPACED_PINS スタイルを使用して AUTOMATIC_STYLE で接続ポイントを配置する場合に 接続ポイントを計算する方法をカスタマイズできます。 このオプションは、FIXED_OFFSET_PINS コネクター・スタイルが 使用される場合は無効です。
「均等に配置されたピン」コネクター・スタイルでは、 リンク接続ポイントが、ノードのボーダーの各末端までの余白を保ちながら、ノード・ボーダーに沿って等間隔に配置されます。この余白のサイズは、余白率によって制御され、リンク間のオフセットに余白率を乗算して算出されます。
余白率の指定の例 (リンク・レイアウト・アルゴリズム)
このオプションを指定するには、以下のようにします。
メソッド setEvenlySpacedPinsMarginRatio を使用します。
layout.setEvenlySpacedPinsMarginRatio(1);
入力値は、正の数またはゼロにする必要があります。デフォルト値 は 0.5 です。均等に配置されたピンの余白率に、値の例とその意味を示します。
均等に配置されたピンの余白率
比率値
意味
0
余白なし。
0.5 (デフォルト値)
余白は、リンク間のオフセットの半分になります。
1
余白は、リンク間のオフセットに等しくなります。
2
余白は、リンク間のオフセットの 2 倍になります。

ノードに重なるリンクの禁止

このオプションを使用して、リンクがノードに重なるような リンクの形状変更を厳重に回避するようレイアウト・アルゴリズムに要求することができます。 重複が禁止されると、アルゴリズムは重複を回避しようとしますが、他のリンクと交差するリンクなどについては重複が生じる可能性があります。
メモ
重複を禁止すると、レイアウト速度が低下する可能性があります。 また、重複が厳しく禁止されていなければノードに重なるであろうと思われるリンクについては、 (重複を禁止することにより) 曲折点の数が多くなる可能性があります。
ノードに重なるリンクの禁止の指定の例 (リンク・レイアウト・アルゴリズム)
このオプションを指定するには、以下のようにします。
メソッド setLinkOverlapNodesForbidden を使用します。
layout.setLinkOverlapNodesForbidden(true);
このオプションのデフォルト値は false です。
重複が禁止されている場合、短リンク・レイアウト・アルゴリズムは、 重複を禁止しないとノードに重なると思われるリンクについてのみ、 レイアウト時に長リンク・レイアウトを補助アルゴリズムとして使用します。
重複が禁止されている場合の長リンク・レイアウトの指定の例 (リンク・レイアウト・アルゴリズム)
長リンク・レイアウトの補助インスタンスを取得するには、以下のようにします。
ibm_ilog.graphlayout.shortlink.ShortLinkLayout インスタンスで以下のメソッドを呼び出します。
var longLinkLayout = layout.getAuxiliaryLongLinkLayout();
このメソッドにより、この補助レイアウト・インスタンスを取得し、 必要に応じてそのパラメーターをカスタマイズすることができます。ソース・ポイント・モードおよび宛先ポイント・モードを変更したり、固定リンクの保持を無効にしたりしてはなりません。

インクリメンタル・リンク形状変更モード

インクリメンタル・モードでは、短リンク・レイアウトで使用されるルールを カスタマイズして、前のレイアウト実行時に計算された現行のリンク形状をできる限り維持する必要がある リンクを判別することができます。インクリメンタル・リンク形状変更モードにより、 2 つのリンク・カテゴリーについて個別にこれらのルールをカスタマイズできます。
setLinkConnectionBoxInterface メソッドおよび setNodeBoxInterface メソッドを参照してください。
  • 「変更されるリンク」: 前のレイアウト実行時のものと異なる「リンク接続ボックス」を持つリンク、または 前のレイアウト実行時のものと異なるバウンディング・ボックスを持つノードに接続されるリンク。
  • 「変更されないリンク」: 前のレイアウト実行時のものと同じ「リンク接続ボックス」を持つリンク、および 前のレイアウト実行時のものと同じバウンディング・ボックスを持つノードに接続されるリンク。
これらの両方のリンク・カテゴリーについてモードをカスタマイズすることも、 どちらか一方のリンク・カテゴリーについてモードをカスタマイズすることもできます。
インクリメンタル・モードが無効である場合は、インクリメンタル・リンク形状変更モードを指定しても無効になります。
レイアウト・アルゴリズムには、2 つのインクリメンタル・リンク形状変更モードがあります。 すべてのリンクが同じモードである場合はモードを全体的に設定でき、 同じ描画内でモード異なる場合はモードを各リンクについてローカルに設定できます。

グローバル・インクリメンタル・リンク形状変更モード

グローバル・インクリメンタル・リンク形状変更モードの指定の例 (リンク・レイアウト・アルゴリズム)
グローバル・インクリメンタル・リンク形状変更モードを指定するには、以下のようにします。
layout.setGlobalIncrementalModifiedLinkReshapeMode(ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_NODE_SIDES_MODE);
mode の有効な値は、以下のとおりです。
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_SHAPE_TYPE_MODE (デフォルト)
    インクリメンタル・レイアウトは、リンクの形状タイプを保持します。これは、曲折点の数と リンクが接続されるノードの側面の両方が保持されることを意味します。
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_NODE_SIDES_MODE
    インクリメンタル・レイアウトは、リンクが接続されるノードの側面を保持します。
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_CONNECTION_POINTS_MODE
    インクリメンタル・レイアウトは、リンク接続ポイントを保持します。
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_MODE
    リンクは、インクリメンタル・レイアウト時にまったく形状変更されません。新しく追加されたリンクのみが経路変更されます。
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FREE_MODE
    インクリメンタル・レイアウトは、リンクを自由に形状変更できます。 これは、すべてのリンクに対してインクリメンタルの動作を行わない場合と同じになります。 よって、グローバル・インクリメンタル形状変更モードとして FREE_MODE を使用するよりも、インクリメンタル・モードを無効にすることをお勧めします。
    リンクの「固定」(固定リンクの保持 (LL)を参照) や、 ソース・ポイント・モードまたは宛先ポイント・モードのカスタマイズ (エンドポイント・モード (LL)を参照) によって行われた設定は、引き続き考慮されます。
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.MIXED_MODE
    各リンクに異なるモードを設定できます。

個別インクリメンタル・リンク形状変更モード

グローバル・インクリメンタル・リンク形状変更モードが ibm_ilog.graphlayout.shortlink.ShortLinkLayout.MIXED_MODE でない限り、すべてのリンクのインクリメンタル・リンク形状変更モードは同じです。
グローバル・モードが MIXED_MODE に 設定されている場合にのみ、各リンクに個別のモードを設定することができます。
個別インクリメンタル・リンク形状変更モードの指定の例 (リンク・レイアウト・アルゴリズム)
個々のリンクのモードを指定するには、以下のようにします。
ibm_ilog.graphlayout.shortlink.ShortLinkLayout インスタンスで以下のメソッドを使用します。
layout.setIncrementalModifiedLinkReshapeMode(link, mode);  
layout.setIncrementalUnmodifiedLinkReshapeMode(link, mode);
var mode = layout.getIncrementalModifiedLinkReshapeMode(link);
var mode = layout.getIncrementalUnmodifiedLinkReshapeMode(link); 
mode の有効な値は、以下のとおりです。
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_SHAPE_TYPE_MODE (デフォルト)
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_NODE_SIDES_MODE
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_CONNECTION_POINTS_MODE
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FREE_MODE
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_MODE

複数リンクの同形状

共通のソース・ノードと宛先ノードを持つすべてのリンクについて、 レイアウト・アルゴリズムで強制的に同じ形状が計算されるようにすることができます。 リンクは平行な形状になります。
このオプションを無効にすると、レイアウトは、同じペアのノードを接続するリンクに対して、 異なる形状を自由に計算します。一般的に、重ならないようにするために異なる形状が選択されます。
2 つの相互接続されたノードについて、同形状オプションを無効にした場合と、同形状オプションを有効にした場合
複数リンク・オプションの同形状
複数リンクの同形状の指定の例 (リンク・レイアウト・アルゴリズム)
複数リンクの同形状を有効にするには、以下のようにします。
次のメソッドを使用します。
layout.setSameShapeForMultipleLinks(true);
デフォルト値は false です。

リンク交差ペナルティー

リンクの形状は、コスト関数を最小化することを目標として計算されます。 このコスト関数は、リンク-リンク交差およびリンク-ノード交差の数に比例します。 デフォルトで、これらの 2 つのタイプの交差のウェイトは、ともに 1 です。 リンク-ノード交差のウェイトを大きくすることができます。
リンク-ノード交差ペナルティーの指定の例 (リンク・レイアウト・アルゴリズム)
リンク-ノード交差のウェイトを大きくするには、以下のようにします。
次のメソッドを使用します。
layout.setLinkToNodeCrossingPenalty(5);
この設定では、リンク-リンク交差がより多くなる可能性がありますが、リンク-ノード交差がない (または、ごくわずかしかない) レイアウトになる可能性が高くなります。
あるいは、リンク-リンク交差のウェイトを大きくすることもできます。
リンク-リンク交差ペナルティーの指定の例 (リンク・レイアウト・アルゴリズム)
リンク-リンク交差のウェイトを、例えば、値 3 に 増やすには、以下のようにします。
次のメソッドを使用します。
layout.setLinkToLinkCrossingPenalty(3);
この設定では、リンク-ノード交差がより多くなる可能性がありますが、 リンク-リンク交差がない (または、ごくわずかしかない) レイアウトになる可能性が高くなります。

バイパス距離

ソース・ノードと宛先ノードが近過ぎると、終了ノード間でリンクを直接経路指定するのに十分なスペースがない可能性があります。そのため、デフォルトでは、終了ノードの距離がしきい値距離より近いと、 レイアウトは近いノード間の間隔をバイパスするリンク形状を選択します。(「終了ノードとバイパス距離」を参照してください。)
相互接続された 2 つのノードで、2 つのノードがバイパス距離よりも遠い場合、
および 2 つのノードがバイパス距離よりも近い場合
終了ノードとバイパス距離
バイパス距離とは、あるノードから別のノードを直接結ぶリンク形状が許可される、ソース・ノードと宛先ノード間の最短距離です。アルゴリズムは、バイパス値よりも近い終了ノードの側面に直接接続するリンク形状を避けようとします。
バイパス距離の指定の例 (リンク・レイアウト・アルゴリズム)
バイパス距離を設定するには、以下のようにします。
setBypassDistanceのメソッドを使用します。
layout.setBypassDistance(1);
デフォルト値は負の値 (ゼロを含まない) です。バイパス距離が負 (ゼロを含まない) の場合には、 最終セグメントの最短長パラメーターの値がバイパス距離として使用されます。「最終セグメントの最短長」を参照してください。これにより、 最終セグメントの最短長の現在の値に応じて、バイパス距離を自動調整できます。 この動作はほとんどの場合に適しています。デフォルトの動作をオーバーライドする場合は、負ではない値を指定することができます。

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

リンク接続ポイントは、デフォルトで、ノードのバウンディング・ボックスのボーダー上に、 各側面の中央に対称になるように分散されます。 場合によっては、バウンディング・ボックスより小さいまたは大きい矩形上に接続ポイントを配置する必要があり、その場合には、対称にならないことがあります。例えば、ラベルがノードの下または上に表示されている場合などです。
接続ポイントの位置を変更するためのリンク接続ボックス・インターフェースの使用の例 (リンク・レイアウト・アルゴリズム)
ILinkConnectionBoxProvider インターフェースを実装するクラスを実装することにより、 リンク接続ポイントの位置を変更できます。
このインターフェースは、以下のメソッドを定義します。
getBox(graphModel, node)
このメソッドにより、リンク接続ポイントを配置する有効な矩形を取得できます。
インターフェースで定義されている 2 番目のメソッドにより、個々のノードの側面ごとに 異なる方法で接続ポイントを接線方向にシフトすることができます。
getTangentialOffset(graphModel, node, nodeSide)
例えば、MyNode タイプのすべてのノードについて バウンディング・ボックスより小さいリンク接続矩形を返し、すべてのノードの左右の接続ポイントを上にシフトするリンク接続ボックス・プロバイダーを設定するには、以下を呼び出します。
dojo.declare('MyLinkConnectionBoxProvider', ibm_ilog.graphlayout.ILinkConnectionBoxProvider,
 {
    getBox: function(graphModel, node)
   {
        var rect:Rectangle = graphModel.getBounds(node);
        if (node is MyNode) {
            // for example, the size of the bounding box is reduced:
            rect.x += 4;
            rect.y += 4;
            rect.width -= 8;
            rect.height -= 8;
        }
        return rect;
    },

    getTangentialOffset: function(graphModel, node, side)
    {
        switch (side) {
             case ibm_ilog.graphlayout.Direction.LEFT:
             case ibm_ilog.graphlayout.Direction.RIGHT:
                 return -10; // shift up with 10 for both left and right side
             case ibm_ilog.graphlayout.Direction.TOP:
             case ibm_ilog.graphlayout.Direction.BOTTOM:
             default:
                 return 0; // no shift for top and bottom side
         }
    }
});

layout.setLinkConnectionBoxProvider(new MyLinkConnectionBoxProvider());
セルフリンク・スタイルのオプションは、接続ボックスのカスタマイズによる結果を示しています。左側は、デフォルト設定を使用した結果です。 接続ポイントは、ノードのバウンディング・ボックス (ラベル部分を含む) 上に分散され、 各ノードの側面の中央 (ラベル部分も含めた長さの中央) に対称になっています。 右側は、link connection box・インターフェースを指定した後の結果です。ノードの下側面では、リンクが (ラベル上を通過して) ノードに接続されており、ノードの左右側面では、接続ポイントがノードの中央 (ラベル部分を含まない長さの中央) に対して対称になっています。

デフォルトのリンク接続ボックスによるグラフと、カスタマイズしたリンク接続ボックスによるグラフ
リンク接続ボックスのカスタマイズ