リンクのベース・クラス
Figure 2.1 は、2 つのノードをつなぐ直線リンクを示します。
図 2.1 2 つのノード間の直接リンク
IlvLinkImage インスタンスは 2 つのノード間の接続を表すグラフィック・オブジェクトです。デフォルトでは、2 つのノードを結合する直線で表現されます。IlvLinkImage クラスのコンストラクターは以下の通りです。
IlvLinkImage(IlvDisplay* display, IlvBoolean oriented, IlvGraphic* from, IlvGraphic* to, IlvPalette* palette=0); |
from パラメーターは、リンクの開始ノードを示す IlvGraphic タイプのオブジェクトです。to パラメーターは、リンクの終了ノードを示す IlvGraphic タイプのオブジェクトです。oriented パラメーターは、リンクが矢印で終わるかどうかを示します。
前に set と get の付いている複数のメンバー関数を使用すると、これらのプロパティーにアクセスできます。たとえば、終了ノードは IlvLinkImage::getTo メソッドと IlvLinkImage::setTo メソッドでアクセスできます。同様に、IlvLinkImage::setOriented メソッドを使用してリンクの有向モードを変更することができます。
これらのプロパティーの格納に加え、IlvLinkImage クラスには次の目的もあります。
リンクの形状を関連するノードの関数として計算し、ノードのジオメトリーが変化した場合のリンクの振る舞いを定義します。このタスクは、
IlvLinkImage::getLinkPoints 仮想メソッドによって実行されます。
リンクがどのように描画されるかを定義します。これは、計算された形状を使用して行われ、
IlvGraphic クラスから継承された仮想メソッドに実装されます。
異なる振る舞いおよび/または描画アスペクトを持つリンクを作成する場合は、IlvLinkImage をサブクラス化すると役に立ちます。振る舞いを変更するには、IlvLinkImage::getLinkPoints メソッドをオーバーライドします。
virtual IlvPoint* getLinkPoints(IlvUInt& count, const IlvTransformer* t) const; |
返された配列を呼び出し側で削除することはできません。この配列を IlvPointPool クラスを使用して共通のメモリー・プールに割り当てる必要があります。このメソッドでは、開始ノードと終了ノードのジオメトリーを問い合わせてリンクの形状を定義する点を決めることができます。このような点には 2 つのカテゴリーがあります。
リンクの終点。これらはリンクが開始する位置と終了する位置を定義します。
中間点。これらはリンクの全体的なアスペクトを定義します。
IlvLinkImage クラスは、リンクの終点位置の計算に IlvLinkImage::computePoints メソッドを使用します。
virtual void computePoints(IlvPoint& src, IlvPoint& dst, const IlvTransformer* t = 0) const; |
デフォルトの実装では、まずリンクがノードの接続ピンに関連付けられているかどうかをチェックします(詳細については、
接続ピン管理クラス を参照してください)。接続ピンが定義されていない場合、開始ノードと終了ノードのバウンディング・ボックスとリンクの交差が計算されます。
Figure 2.2は、この関係を図示したものです。
図 2.2 接続ピンが定義されていない場合の終点の位置
Version 6.0
Copyright © 2015, Rogue Wave Software, Inc. All Rights Reserved.