2

PREFUSEライブラリを使用してデータのグラフィカルビューを開発しています。

グラフには3種類のノードがあります。

  1. 応用
  2. データベース
  3. インターフェース

以下は、グラフを含む私の.xmlファイルからの抜粋です。

<node id="AP-1">
<data key="name">Application1</data>
<data key="type">APPLICATION</data>
</node>

<node id="DB-1">
<data key="name">Database1</data>
<data key="type">DATABASE</data>
</node>

<node id="IT-1">
<data key="name">Interface1</data>
<data key="type">INTERFACE</data>
</node>

上記の3つの差分を表示したいと思います。3つの差分を持つノードの種類。次のような形状の種類:

  1. 長方形によるアプリケーション
  2. カスタム形状によるDATABASE(円柱の形状。通常はデータベースを表すために使用されます)
  3. サークルによるインターフェース

私は最初に.xmlファイルを

グラフg

Q1。次に、データグループ内のこれら3種類のノードをどのように区別できますか。述語を書くべきだと思います。prefuseの述語と式のマニュアル全体を読みましたが、それらを区別するための述語を書くことができませんでした。では、その述語は何でしょうか?

Q2。カスタムシェイプを指定する方法と、自分で開発したカスタムシェイプをレンダリングできるレンダラーを設定する方法を教えてください。

4

2 に答える 2

1

ノードにさまざまな形状を割り当てるためのパラダイムは、DataShapeActionを使用することです。

たとえば、「会議」デモ(テーブルと同じノードに適用されます):

int[] shapes = new int[]
            { Constants.SHAPE_RECTANGLE, Constants.SHAPE_DIAMOND };
DataShapeAction shape = new DataShapeAction(group, "Senate", shapes);

これにより、「Senate」データフィールドの値に基づいてデータポイントにさまざまな形状が割り当てられます。つまり、上院議員は1つの形状であり、議員は別の形状です(APIにはさまざまなコントロールがあります。Constants.ORDINALを参照してください)。例)。

つまり、「タイプ」データフィールドを使用してノードの種類を示し、DataShapeActionを使用してさまざまな形状を割り当てることができます。

新しい形状を定義することは確かに可能ですが、もう少しいじくり回す必要があります。より良い答えを返してみますが、最も簡単な方法は、目的の形状を描画できるノードレンダラーの独自のサブクラスを作成し、DataShapeActionを拡張していくつかを処理することだと思います。新しいデータ型のフラグ。それについては後で詳しく説明しますが、うまくいけば。

于 2011-05-06T21:00:36.770 に答える
0

形状を割り当てるために述語は必要ありません。実際、カスタム シェイプを描画するには、シェイプ描画 renderer をサブクラス化する必要がありますShapeRenderer。ShapeRenderer は、id 番号 ( ) を使用して形状を区別しintます。これらの int は、Constantsすべての標準的な形状の構造になっていConstants.SHAPE_RECTANGLEます。

内部で prefuse は ShapeRenderer のprotected Shape getRawShape(VisualItem item)関数を呼び出します。次に、この関数はShapeRenderer、描画する形状を取得するために、から他の内部を呼び出します。例えば:

  • 形状 ID を取得するには、getRawShape呼び出しますint stype = item.getShape()(形状アクションで設定DataShapeAction)
  • 次に、形状IDを手元に持っていると、switch描画する適切な形状を選択するステートメントがあります

    switch ( stype )  
    {  
    case Constants.SHAPE_NONE:  
        return null;  
    case Constants.SHAPE_RECTANGLE:  
        return rectangle(x, y, width, width);  
    case Constants.SHAPE_ELLIPSE:  
        return ellipse(x, y, width, width);  
    case Constants.SHAPE_TRIANGLE_UP:  
        return triangle_up((float)x, (float)y, (float)width);  
    ...  
    

他のいくつかの形状 (カスタム形状) を描画するには、サブクラスShapeRenderer化し、形状の独自の実装を描画およびオーバーライドするために提供しますgetRawShape
形状 ID を独自のものとして認識した場合は、形状を返します。それ以外の場合は、実装で super(item)getRawShapeを呼び出して、標準のものを呼び出します。

于 2011-11-07T06:43:29.837 に答える