2010-02-16 29 views
2

我正在使用PREFUSE庫開發數據的圖形視圖。通過Java的PREFUSE庫顯示節點的問題?

我有3個不同的節點在我的圖:

  1. 應用
  2. DATABASE
  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> 

I wan t顯示以上3個差異。 3種不同的節點。種形狀的如下:由矩形

  1. 應用
  2. DATABASE由自定義形狀(圓筒形狀,通常用於表示數據庫)由圓
  3. INTERFACE

我有第一讀取.xml文件中的一個

圖g

Q1。現在我怎麼能區分數據組中的這3種節點。我想我應該寫謂詞。我已經閱讀了prefuse的整個謂詞和表達式手冊,但不能寫出謂詞來區分它們。那麼對此的謂詞是什麼? Q2302。如何指定我的自定義形狀以及如何設置可呈現由我開發的自定義形狀的渲染器?

回答

1

用於向節點分配不同的形狀的範例是具有DataShapeAction

例如在「國會」演示(這同樣適用於節點表):

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

此分配不同的形狀,以基於在「參」數據字段中的值的數據點,即,參議員一種形狀,和國會議員是另一種形狀,按照某種順序(在API中有多種控制方式,例如參見Constants.ORDINAL)。因此,換句話說,您可能會使用「類型」數據字段來指示節點是哪種節點,然後使用DataShapeAction分配不同的形狀。

定義一個新的形狀肯定是可能的,但需要更多的修補。我會試着回答一個更好的答案,但我猜最直接的方法是編寫自己的noderenderer的子類,它能夠繪製所需的形狀,然後可能擴展DataShapeAction來處理一些標誌爲您的新數據類型。儘管如此,希望如此。

0

您不需要謂詞來分配形狀。實際上,爲了繪製自定義形狀,您必須對形狀繪製渲染器ShapeRenderer進行子類化。 ShapeRenderer使用ID號(int)區分形狀。 對於所有標準形狀,這些整數在結構Constants中 - 像bcr寫的,例如Constants.SHAPE_RECTANGLE

內部prefuse調用ShapeRenderer的protected Shape getRawShape(VisualItem item)函數。反過來,這個函數調用ShapeRenderer中的其他內部,以便繪製形狀。例如:

  • 獲得形狀ID,getRawShape調用int stype = item.getShape()設置由形狀動作DataShapeAction
  • 然後,hawing手頭的形狀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,則返回形狀,否則在實施getRawShape時會調用super(item)以調用標準形狀。