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

以下のオプションは、長リンク・レイアウトにのみ適用されます。

追加障害物の指定

長リンク・レイアウト・アルゴリズムは、ノードを重なることができない障害物とみなし、 リンクを 90 度 (リンク・スタイルが直接の場合のおよその角度) の角度で交差できるが重なることはできない障害物とみなします。

ノードに重なっているリンク、別のリンクと交差しているリンク、別のリンクと重なり合っているリンク
交差および重なり
追加障害物の指定の例 (リンク・レイアウト・アルゴリズム)
アプリケーションで、リンクでもノードでもない追加の障害物が必要な場合は、 それらを以下のように指定できます。
以下を呼び出します。
layout.addRectObstacle(rect);
layout.addLineRectObstacle(rect);
layout.addLineObstacle(p1, p2);
矩形の障害物は、ノードのように機能します。この矩形にリンクを重ねることはできません。 ライン障害物は、リンク・セグメントのように機能します。他のリンクは、 このライン・セグメントと交差することはできますが、このライン・セグメントに重なることはできません。 これらの障害物の設定は、以下のようにして削除できます。
layout.removeAllLineObstacles();
layout.removeAllRectObstacles();

可変エンドポイントのペナルティー

リンクの終端ポイントが固定でない場合、 アルゴリズムはヒューリスティックな方法を使用して、各リンクの終端ポイントを計算します。 アルゴリズムは、開始ノードおよび終了ノードのボーダーに近いフリーのグリッド・ポイントをすべて調べて、 各グリッド・ポイントにペナルティーを割り当てます。 ノードの側面フィルターがインストールされている場合、ペナルティーは、ノードの側面が許可されるか または拒否されるかによって異なります。
終端ポイントの選択方法に影響を与えるより正確な方法として、終端ポイント・フィルターがあります。 これにより、グリッド・ポイントごとにペナルティーを指定することができます。
終端ポイント・フィルターの指定の例 (リンク・レイアウト・アルゴリズム)
終端ポイント・フィルターは、以下のメソッドを定義する ibm_ilog.graphlayout.longlink.LongLinkTerminationPointFilter インターフェースを実装するクラスです。
getPenalty(graphModel, link, origin, node, point, side, proposedPenalty)
link 入力引数の origin ポイントまたは宛先ポイントを選択するために、 point 入力引数 (nodeside 入力引数上のグリッド・ポイント) が調べられます。 アルゴリズムのデフォルト・ヒューリスティックにより proposedPenalty が計算されます。変更されたペナルティーを返したり、 Number.MAX_VALUE を返してグリッド・ポイントを 拒否したりすることができます。グリッド・ポイントは、拒否されると、リンクの終端ポイントとして 選択されません。
終端ポイント・フィルターは、setTerminationPointFilter メソッドを使用して設定できます。
layout.setTerminationPointFilter(new MyTerminationPointFilter());

経路指定段階の取り扱い

長リンク・レイアウト・アルゴリズムで説明されているように、 アルゴリズムはまず各リンクを個別に処理してから、すべてのリンクに交差低減段階を適用します。 アルゴリズムは、個々のリンクの経路を見つけるために、まず経路指定 (直線または曲折点が 1 つのみなど) が可能であるかどうかを検査します。 このタイプの経路指定が可能ではない場合は、より多くの時間がかかりますが、バックトラックによる高機能のグリッド・サーチ・アルゴリズムを使用して、多数の曲折点を持つ経路を検索します。
経路指定段階の取り扱いの例 (リンク・レイアウト・アルゴリズム)
直線または曲折点が 1 つの経路を見つける段階を使用不可にするには、以下のようにします。
メソッド setStraightRouteEnabled を使用します。
layout.setStraightRouteEnabled(true);
多数の曲折点を持つ経路のバックトラック・サーチは、さまざまな方法で行えます。
中でも、リンクごとの経路探索に許容可能な最大時間を指定する方法は便利です。
バックトラック・ステップの指定の例 (リンク・レイアウト・アルゴリズム)
バックトラック・ステップの最大数を指定できます。
メソッド setMaxBacktrack を使用します。
layout.setMaxBacktrack(25000);
デフォルトのバックトラック最大数は 30000 です。
経路探索の最大時間の指定の例 (リンク・レイアウト・アルゴリズム)
リンクごとの経路探索に許容可能な最大時間を指定するには、以下のようにします。
setAllowedTimePerLinkのメソッドを使用します。
layout.setAllowedTimePerLink(2500);
リンクあたりの許容時間のデフォルトは、2000 ミリ秒 (2 秒) です。
また、交差低減段階で実行する必要があるステップ数を指定できます。
交差低減段階におけるステップ数の指定の例 (リンク・レイアウト・アルゴリズム)
交差低減段階で実行する必要があるステップ数を指定するには、以下のようにします。
setNumberCrossingReductionIterationsのメソッドを使用します。
layout.setNumberCrossingReductionIterations(3);
交差低減の無効化の例 (リンク・レイアウト・アルゴリズム)
交差低減を完全に無効にすることができます。
setCrossingReductionEnabledのメソッドを使用します。
layout.setCrossingReductionEnabled(false);

フォールバック・メカニズム

一方の終了ノードがエンクレーブ内にある場合、長リンク・レイアウト・アルゴリズムで、 リンクの経路を検索できない場合があります。 エンクレーブ内にあるノードで、ピンクのノードは エンクレーブ内にあります。このような場合、バックトラック・サーチ・アルゴリズムは、 ノードに重ならない経路を見つけることができません。状況がとても複雑でリンクあたりの検索許容時間を超える場合は、バックトラック・サーチ・アルゴリズムも失敗する可能性があります。

エンクレーブ内にあるノードに接続するためにノードに重なるリンク
エンクレーブ内にあるノード
バックトラック・サーチ・アルゴリズムが経路の検索に失敗すると、 ノードに重なる経路を作成する簡単なフォールバック・メカニズムが適用されます。
フォールバック・メカニズムの無効化の例 (リンク・レイアウト・アルゴリズム)
フォールバック・メカニズムを無効にするには、以下のようにします。
メソッド setFallbackRouteEnabled を使用します。
layout.setFallbackRouteEnabled(false);
フォールバック・メカニズムが無効になっていると、リンクは経路指定されず、 レイアウト前と同じ形状のままになります。 Java コードで、通常の方法では経路指定できなかったリンクを、フォールバック・メカニズムを使用せずに検索することができます。
フォールバック・メカニズムを使用しないリンクの検索の例 (リンク・レイアウト・アルゴリズム)
通常の方法で経路指定できなかったリンクを、フォールバック・メカニズムを使用せずに検索するには、 以下のようにします。
var links = layout.getCalcFallbackLinks();
while(links.hasNext()){
    var link = links.next();
    // ...
} 
例えば、これらのリンクを繰り返して、長リンク・レイアウト・アルゴリズムのデフォルトのフォールバック・メカニズムの代わりに、ユーザー独自のフォールバック・メカニズムを適用することができます。