各リンクは、いわゆるピンに付加されています。各ピンはノード上の接点の位置を表します。
クラス IlvPinLinkConnector (クラス IlvLinkConnector のサブクラス) は、ノードへのリンク接続を管理します。
IlvPinLinkConnector
クラスのインスタンスは、グラフィック・オブジェクトにインストールされることもあります。このインスタンスはピン・セットを保持します。IlvPinLinkConnector
インスタンスの作成時には、インスタンスは空でピンは含まれていません。必要な接点の位置を表すピン・セットを入力する必要があります。ピンはクラス IlvGrapherPin で定義されています。このクラスは、その getPosition
メソッドが抽象メソッドであるため、抽象クラスです。そのため、まず IlvGrapherPin
クラスのサブクラスを作成する必要があります。 getPosition メソッドへの実装を指定すると、グラファー・ピンの位置を示すことができます。このメソッドの署名は次のとおりです。IlvPoint getPosition(IlvTransformer t)
ピンの位置はノードの描画に使用するトランスフォーマーによって異なります。このトランスフォーマーは、
getPosition
メソッドにパスされます。ピンの位置を計算にするには、ノードの位置を知る必要があります。位置計算には、次を使用します。IlvGraphic getNode()
このピンへ特定タイプのリンク接続を許可したり、禁止することもできます。その場合は、インタラクターとのリンクを作成するときに呼び出すピンの
allow
メソッドを上書きします。boolean allow(Object oClass, Object dClass, Object linkOrClass, boolean origin)
インタラクターは、このメソッドの結果に基づき指定されたピンのみを強調表示することができます。
ピン・クラスを作成したら、次のメソッドを使用して、前に作成した
IlvPinLinkConnector
のインスタンスにピンを追加する必要があります。void addPin(IlvGrapherPin pin)
例: 接続点の定義
この例ではピンのクラスを 2 つ定義します。
- ノードへのリンクを許可するクラス
InPin
。 - ノードからのリンクを許可するクラス
OutPin
。InPin
クラスのピンはオブジェクトの左枠に配置され、タイプOutPin
のピンは右枠に配置されます。
以下のクラスがあります。
final class InPin extends IlvGrapherPin { static final int numberOfPins = 5; int index; public InPin(IlvPinLinkConnector connector, int index) { super(connector); this.index = index; } protected boolean allow(Object orig, Object dest, Object linkOrClass, boolean origin) { return !origin; } public IlvPoint getPosition(IlvTransformer t) { IlvRect bbox = getNode().boundingBox(null); IlvPoint p = new IlvPoint(bbox.x, bbox.y+(bbox.height/(numberOfPins+1)* (index+1)); if (t != null) t.apply(p); return p; } }
この例では、
InPin
のインスタンスが 5 つ作成されます。各ピンにはノード上の位置を指定するインデックスがあります。getPosition
メソッドは、そのインデックスに応じてノードの左側のピンの位置を返します。allow
メソッドは、このピンへのリンクに対してのみ true
を返します (パラメーター origin
は false
です)。OutPin
クラスも同様です。final class OutPin extends IlvGrapherPin { static final int numberOfPins = 5; int index; public OutPin(IlvPinLinkConnector connector, int index) { super(connector); this.index = index; } protected boolean allow(Object orig, Object dest, Object linkOrClass, boolean origin) { return origin; } public IlvPoint getPosition(IlvTransformer t) { IlvRect bbox = getNode().boundingBox(null); IlvPoint p = new IlvPoint(bbox.x+ bbox.width, bbox.y+(bbox.height/ (numberOfPins+1))*(index+1)); if (t != null) t.apply(p); return p; } }
ピンは右側にあり、ノードから出るリンクのみを許可します。
node
がグラフィック・オブジェクトの場合、ピンをノードに追加するメソッドは次のようになります。grapher.addNode(node, 1, false); IlvPinLinkConnector lc = new IlvPinLinkConnector(node); for (int i = 0; i < 5; i++) { new InPin(lc, i); new OutPin(lc, i); }
特定のピンにリンクを接続する場合は、クラス
IlvPinLinkConnector
のメソッド connectLink
を使用します。public void connectLink(IlvLinkImage link, IlvGrapherPin pin, boolean origin)