リンク・レイアウト・アルゴリズムは、以下のクラスにより実装されます。
短リンク・レイアウト・アルゴリズム
短リンク・レイアウト・アルゴリズムは、コスト関数を最小化するためにリンクの
「最適な」形状を選択する組み合わせ最適化に基づいています。
このコスト関数は、リンク-リンク交差およびリンク-ノード交差の数に比例します。
効率化を図るため、各リンクの基本的な形状は、事前定義されている形状セットから選択されます。
これらの形状は、リンク・スタイル・オプションごとに異なります。
直交リンク・スタイルの場合、リンクは最大 5 つの水平セグメントと垂直セグメントが交互になった折れ線に形状変更されます (直交リンクを含む短リンク・レイアウトを参照してください)。直接リンク
・スタイルの場合、リンクは 3 つのセグメント (短い水平または垂直セグメントで開始および終了する直線セグメント) で構成される折れ線に形状変更されます。(直接リンクを含む短リンク・レイアウトの同じグラフを参照してください)。
リンクの形状は、ソース・ノードおよび宛先ノードの相対位置によっても異なります。
例えば、2 つのノードが非常に近いかまたは重なっている場合、
リンクの形状として、リンクが最も見やすくなる形状が選択されます。
リンクの実際の形状は、追加の制約を考慮して計算されます。
レイアウト・アルゴリズムは、以下を行います。
- ノードの特定の側面に付随しているリンク間の交差の数を最小化します。
- ノードの特定の側面に付随しているリンクの最終セグメントをノードのボーダー上に均等な間隔で配置します。
長リンク・レイアウト・アルゴリズム
長リンク・レイアウト・アルゴリズムは、まず、各リンクを個別に処理します。
最初に、リンクごとに、グリッド上の終了ノードの接続ポイントを計算し、
ペナルティー値に従って順序付けます。
使用済みグリッド・ポイント上の接続ポイントは高いペナルティーを持つため、
あまり使用されません。
直交リンクの場合 (直交リンクを含む長リンク・レイアウトを参照)、長リンク・レイアウト・アルゴリズムは、グリッド上移動を使用して、
開始接続ポイントから終了接続ポイントまでの経路をフリー・グリッド・ポイントで探索します。
そのため、短リンク・モードと比較すると、直交リンクでは、重複を回避するために障害となるノードをバイパスする
ために必要である場合に、多数の曲折点がある任意の形状が生じる可能性があります。直接リンクの場合 (直接リンクを含む短リンク・レイアウトの同じグラフ を参照)、
長リンク・レイアウト・アルゴリズムは、接続ポイント間の直接セグメントを使用して検索時間を短縮します。
すべてのリンクが配置された後、交差削減フェーズによりリンクのペアが検査され、
両方のリンク間の経路の一部を交換することにより、リンク交差が削減されます。
長リンク・レイアウト・アルゴリズムは、リンクがグリッド間隔に合っており、
異なるリンク間の経路の一部を交換できるという事実に依存しています。
そのため、長リンク・レイアウト・アルゴリズムは、リンク幅を考慮しません。
リンク幅を考慮すると、交換可能な 2 つのリンクの一部分を検索することが大変困難になるからです。
グリッド間隔を最大リンク幅よりも大きく設定することをお勧めします。
リンク・レイアウトの例
以下のコード例は、ibm_ilog.graphlayout.shortlink.ShortLinkLayout クラスの使用法を示しています。
var layout = new ibm_ilog.graphlayout.shortlink.ShortLinkLayout(); graph.setLinkLayout(layout); graph.performGraphLayout();