上級者向け: リンク・レイアウトの追加機能

ノードの側面フィルターの使用

アプリケーションの中には、リンクを特定ノードの特定の側面に接続しないようにする必要があるものがあります。リンク・レイアウト・アルゴリズムで、ノードの側面フィルターを使用することにより、 リンクを接続できるノードの側面を限定できます。
ノードの側面フィルターは、ibm_ilog.graphlayout.INodeSideFilter インターフェースを実装する任意のクラスです。このインターフェースは、以下のメソッドを定義します。
accept(graphModel, link, origin, node, side)
このメソッドは、link 入力引数 の origin または宛先を node 入力引数の side 入力 引数に接続します。
例として、アプリケーションで、 MyNode1 タイプの終了ノードについては、 リンクの起点を上下の側面でのみ接続できるようにする必要があるとします。
MyNode2 タイプの終了ノードについては、 リンクの宛先を左右の側面でのみ接続できるようにする必要があるとします。 このようにするには、以下のようなノードの側面フィルターを使用します。
dojo.declare('MyFilter', ibm_ilog.graphlayout.INodeSideFilter,
{
  accept: function(graphModel, link, origin, node, side) {
    if (node instanceof MyNode1 && origin)
        return (side == ibm_ilog.graphlayout.Direction.TOP || side == ibm_ilog.graphlayout.Direction.BOTTOM);
    if (node instanceof MyNode2 && !origin)
        return (side == ibm_ilog.graphlayout.Direction.LEFT || side == ibm_ilog.graphlayout.Direction.RIGHT);
    return true;
  }
});
ノードの側面フィルターの設定の例 (リンク・レイアウト・アルゴリズム)
このノードの側面フィルターを設定するには、以下のようにします。
メソッド nodeSideFilter を使用します。
layout.setNodeSideFilter(new MyFilter());
ノードの側面フィルターを除去するには、以下のようにします。
layout.nodeSideFilter(null); 

ノード・ボックス・インターフェースの使用

アプリケーションの中には、ノードの実効領域が必ずしもそのバウンディング・ボックス ではないことを要求するものがあります。例えば、ノードにシャドウがある場合、 シャドウはバウンディング・ボックスに含まれます。しかし、シャドウは、 リンクの障害物とは見なされない場合もあります。このような場合、ノードの実効バウンディング・ボックス は、より小さくなります。
ノード・ボックス・インターフェースの使用例 (リンク・レイアウト・アルゴリズム)
ibm_ilog.graphlayout.INodeBoxProvider を実装するクラスを実装することにより、ノードの実効バウンディング・ボックス を変更できます。
このインターフェースは、以下のメソッドを定義します。
getBox(graphModel, node)
このメソッドを使用することにより、実効バウンディング・ボックスを取得できます。 例えば、MyNode タイプのすべてのノードについて、 より小さいバウンディング・ボックスを返すノード・ボックス・インターフェースを設定するには、 以下を呼び出します。
dojo.declare('MyNodeBoxProvider', ibm_ilog.graphlayout.INodeBoxProvider,
 {
    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;
    }
});

link connection box・インターフェースの使用

リンク接続ポイントは、デフォルトで、ノードのバウンディング・ボックスの ボーダー上に配置されます。場合によっては、バウンディング・ボックスより小さいまたは大きい矩形上に接続ポイントを配置することが必要な場合もあります。例えば、ラベルがノードの下または上に表示されている場合に、 このようなことが起きる可能性があります。
接続ポイントの位置を変更するためのlink connection box・インターフェースの使用 (リンク・レイアウト・アルゴリズム)
ibm_ilog.graphlayout.ILinkConnectionBoxProvider を実装するクラスを実装することにより、 リンク接続ポイントの位置を変更できます。これは、 INodeBoxProvider のサブインターフェースです。ノード・ボックス・インターフェースの使用を参照してください。このサブインターフェースは、さらに、以下のメソッドを定義します。
getBox(graphModel, node)
このメソッドにより、リンク接続ポイントを配置する有効な矩形が返されます。
さらに、ibm_ilog.graphlayout.ILinkConnectionBoxProvider インターフェースは、以下の 2 番目のメソッドを定義します。
getTangentialOffset(graphModel, node, nodeSide)
このメソッドは、短リンク・レイアウトでのみ使用されます。詳細については、「リンク接続ボックス・インターフェースの使用」を参照してください。長リンク・レイアウトでは、 値 0 を返すことによりメソッドを実装してください。