Я пишу плагин Eclipse, который рисует систему конечных состояний.так как он может быть большим, я хотел бы добавить некоторый существующий алгоритм компоновки графа (например, иерархическую компоновку, компоновку с применением силы, ...), которая автоматически оптимизирует визуализацию системы.
есть способ интегрироватьПлагин, который я пишу (написанный с использованием GEF), чтобы сгенерированные части редактирования могли быть размещены в области редактора в соответствии с некоторыми из распространенных алгоритмов компоновки графиков?
я нашел эту интересную статью но вместо того, чтобы оптимизировать визуализацию редактируемых деталей, он фокусируется на рисовании совершенно нового графика.
До сих пор я добавляю следующий код (на основе Zest 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
источниках: - [мне кажется, я не могу использовать библиотеку Zest Graph, чтобы сделать эту работу.я ошибся?Есть ли альтернативы?
любая помощь будет оценена :))