2015-03-31 81 views
1

我想在GraphStream中建模一個圖並使用其查看器進行渲染,但是我的節點需要具有不同的輸入和輸出端口(最好位於左側和右側)分別爲節點框的右側),並且邊應該與這些端口而不是節點中心連接。具有輸入和輸出端口的GraphStream節點

是甚至可能在GraphStream?如果沒有,是否有另一個Java庫可以使用?我知道GraphViz Dot允許這樣做,但我不想通過命令行調用它,因爲它引入了不屬於我的項目的外部依賴項。

編輯:我想渲染(但一個非常不同的域)的那種東西的例子:enter image description here

我甘心情願做渲染自己,但我當然還是需要路由和節點和邊緣的座標。

回答

1

GraphStream沒有辦法在節點上聲明錨點,句柄或端口。

但是,既然您希望您的邊緣在節點的左側和右側收緊,那麼您可能希望給「freeplan」CSS屬性一個嘗試。參閱圖表上下面的例子中,特別是在「樣式」屬性:

Graph graph = new SingleGraph("FreePlane"); 
System.setProperty("org.graphstream.ui.renderer", "org.graphstream.ui.j2dviewer.J2DGraphRenderer"); 
graph.display(); 
graph.setAttribute("stylesheet", "node { " 
     + "  shape: rounded-box; " 
     + "  padding: 5px; " 
     + "  fill-color: white; " 
     + "  stroke-mode: plain; " 
     + "  size-mode: fit; " 
     + "} " 
     + "edge { " 
     + "  shape: freeplane; " 
     + "}"); 
graph.addAttribute("ui.quality"); 
graph.addAttribute("ui.antialias"); 

Node a = graph.addNode("A"); 
Node b = graph.addNode("B"); 
graph.addEdge("AB", "A", "B"); 
Node c = graph.addNode("C"); 
graph.addEdge("BC", "B", "C"); 

a.addAttribute("ui.label", "node A"); 
b.addAttribute("ui.label", "node B"); 
c.addAttribute("ui.label", "node C"); 

這將使你類似的東西: screeshot of the window generetaed by this code

+0

有沒有辦法「分割」一個節點,有效地爲每個端口單獨的節點,然後將它們緊密粘合在一起,尊重左右位置? – 2015-03-31 13:32:29

+0

@WouterLenvens你可以*確實創建多個節點,但是將它們組合在一起並不容易。你必須自己處理他們的位置。您可能永遠無法獲得與您在帖子中添加的數字相近的任何內容。實際上,很難期望像GraphStream這樣的通用圖庫的特徵:( – Yoann 2015-03-31 15:21:38

+0

我明白這一點。看起來GraphStream中的重點更多地放在非常大的和/或動態的圖上,而不是微小的複雜圖結構。當然,你有沒有想過哪個(可嵌入的)java庫可能適合處理節點上帶有端口的圖的路由? – 2015-03-31 18:59:06

0

我無法與graphstream實現這一點,但這樣的功能