ピンの使用

各リンクは、いわゆるピンに付加されています。各ピンはノード上の接点の位置を表します。
クラス 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 を返します (パラメーター originfalse です)。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)