我正在編寫一個繪製有限狀態系統的eclipse插件。因爲它可能很大,我想附加一些自動優化系統可視化的現有圖形佈局算法(例如分層佈局,基於力的佈局等)。eclipse插件(gef)和圖形可視化(zest)
有沒有一種方法可以整合我正在編寫的插件(使用GEF編寫),以便生成的編輯部分可以放在編輯器區域,遵循一些常用的圖形佈局算法?
我發現這個interesting article,但不是優化編輯部件可視化,而是專注於繪製一個全新的圖形。
到目前爲止,我在做什麼是添加以下代碼(基於激爽1)
private static void createNewGraph(String autName) {
Shell tmpShell = new Shell();
currGraph = new Graph(tmpShell, SWT.NONE);
mapStateAndNodes = new HashMap<State, GraphNode>();
}
private static void addGraphNode(State currState)
{
GraphNode newNode = new GraphNode(currGraph, SWT.NONE, currState.getName());
mapStateAndNodes.put(currState, newNode);
}
private static void addGraphConnection(Transition currTrans)
{
GraphNode source = mapStateAndNodes.get(currTrans.getOrigState());
GraphNode dest = mapStateAndNodes.get(currTrans.getDestState());
GraphConnection newConn = new GraphConnection(currGraph, SWT.NONE, source, dest);
}
private static void completeGraph()
{
currGraph.setLayoutAlgorithm(new SpringLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING), true);
}
,並同時建立我的模型,我也呼籲createNewGraph(...)
,addGraphNode(...)
,addGraphConnection(...)
和completeGraph(...)
。問題是:在currGraph.setLayoutAlgorithm(..., true)
那true
意味着它應該應用該算法並將對象放置在「正確」的順序。在這一點上(如一些讀者所建議的),可以通過GraphNode.getLocation()
方法提取計算出的座標。不幸的是,在設置佈局並應用它之後,所有州都有Point(0,0)
作爲它們的位置。我也發現了這個評論:
/**
* Runs the layout on this graph. It uses the reveal listener to run the
* layout only if the view is visible. Otherwise it will be deferred until
* after the view is available.
*/
public void applyLayout() {
...
}
在org.eclipse.zest.core.widgets.Graph
來源: - [我看來我不能用熱情圖形庫來做好這項工作。我錯了嗎?有沒有其他的選擇?
任何幫助將不勝感激:)
我編輯我的問題,並添加了一些代碼,做你的建議。我的問題是,我不知道如何從'Graph'對象中提取計算出的座標: - /另外,我想知道我是否可以直接將一個算法從zest庫應用到我的對象... – FSp 2012-01-18 12:05:21
你必須保持一個GraphNodes和模型對象之間的鏈接(例如,通過使用散列表或使用GraphNode對象模型對象存儲)。然後你可以遍歷所有節點,得到它們的座標(如果我沒有記錯的話,你可以使用GraphNodes上的getPosition或getX方法)。關於直接應用程序:由於Zest佈局算法需要特定輸入,因此您必須進行翻譯。 Zest 2.0中的輸入限制較少,所以翻譯起來會更容易,但在Zest 1.0中仍然可以。 – 2012-01-18 12:44:11
你好,我再次編輯我的問題,使其更加精確。不過,對我來說,似乎我不能使用zest爲我的圖形計算佈局,而沒有實際顯示它:[ – FSp 2012-01-18 23:16:53