2011-03-08 60 views
0

我使用GEF和Draw2d來創建圖形。GEF/draw2d線路由算法

我有一個3級結構,我想說明,這意味着:

RootEditPart
/
Level1EditPart
/
Level2EditPart
/
Level3EditPart

凡Level2的有多個兒童。

我想繪製Level3EditParts(在Level2容器內)之間的連接。

我感到困惑的是我爲這些連接設置了一個線路由算法,以及它如何通過父/子EditPart /圖層次繼承。

理想情況下,我想使用ShortestPathConnectionRouter。 我試圖通過將此設置爲連接層的連接路由器,使用我的Level2EditPart中的圖來使用它。 我的理解是,它會使用這個數字的孩子作爲避免的障礙(所以它不會通過我的其他Level3畫線,但儘量避免它們)。

雖然它不是這樣工作的,但是當我調試代碼時,它看起來像在ShortestPathRoutingAlgorithm中使用的是一個座標系(用於連接圖)(我猜測它是連接層的座標系) ,另一個是Level3數字(他們父母的座標系,Level2數字)。 這意味着當它與我的Level3中的一個相交時,它永遠不會設法解決問題,因此絕不會試圖避免它們。

所以我要麼誤解ShortestPathConnectionRouter的功能,要麼我錯誤地設置了它。任何人都可以給我一些幫助嗎?

回答

0

您不能將ShortestPathConnectionRouter設置爲連接層的路由器,因爲您必須在構造函數中爲其提供父數字。 要使用此路由器,你必須設置它要使用它的每一個連接,並且還必須提供能這樣輕鬆地檢索父圖:

if(getSource().getParent() instanceof MyNodeEditPart) { 
    MyNodeEditPart parent = (MyNodeEditPart) getSource().getParent(); 
    conn.setConnectionRouter(new ShortestPathConnectionRouter(parent.getFigure())); 
} 

這樣它會奏效。