плагин Eclipse (Gef) и визуализация графика (Zest) - PullRequest
2 голосов
/ 16 января 2012

Я пишу плагин 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, чтобы сделать эту работу.я ошибся?Есть ли альтернативы?

любая помощь будет оценена :))

1 Ответ

3 голосов
/ 17 января 2012

Короче говоря, Zest не поддерживает этот сценарий напрямую.

Тем не менее, вы можете построить в памяти представление ваших редактируемых частей, которые могут быть размещены с помощью Zest. В Zest 1.0 вы должны обеспечить перевод узлов графов и графиков дуг отношений вручную; в Zest 2.0 вам нужно только указать LayoutContext. Zest 2.0 еще не выпущен, но мне, кажется, легче справиться с этим сценарием.

Дополнительная идея: проект с открытым исходным кодом Spray поддерживает макет Zest для графов Graphiti (Graphiti расширяет GEF - возможно, есть некоторые идеи, которые можно использовать повторно). См. Следующий файл кода: http://code.google.com/a/eclipselabs.org/p/spray/source/browse/plugins/org.eclipselabs.spray.runtime.graphiti.zest/src/org/eclipselabs/spray/runtime/graphiti/zest/features/ZestLayoutDiagramFeature.java для некоторых идей.

РЕДАКТИРОВАТЬ: Я искал связанный код на моем компьютере; нам удалось заставить такой макет работать в Zest 1.0 следующим образом:

  1. Иметь один GraphNode для каждого узла и Connection для каждой дуги между узлами. Вы можете собрать их в два разных массива; например SimpleNode[] nodes; SimpleRelationship[] relationships;
  2. Создание класса алгоритма и установка необязательных параметров по своему усмотрению.
  3. Позвоните algorithm.applyLayout(nodes, relationships, 0, 0, diagram.width, diagram.height, false, false) - извините, у вас нет доступной установки Zest 1.0 для проверки точного значения параметров; первые два - используемые узлы и отношения; затем следующие четыре устанавливают чертежную доску; и я, честно говоря, понятия не имею, для чего два последних. : D

Дальнейшее уточнение: Zest использует узлы и отношения в качестве терминологии - замените мою предыдущую дугу отношением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...