Pregunta

Estoy escribiendo un complemento de eclipse que dibuja un sistema de estados finitos.dado que puede ser grande, me gustaría adjuntar algún algoritmo de diseño de gráficos existente (p. ej.diseño jerárquico, diseño basado en fuerzas, ...) que optimizan automáticamente la visualización del sistema.

¿Hay alguna manera de integrar el complemento que estoy escribiendo (escrito usando GEF) para que las partes de edición generadas puedan colocarse en el área del editor siguiendo algunos de los algoritmos de diseño de gráficos comunes?

he encontrado esto artículo interesante pero en lugar de optimizar la visualización de las partes de edición, se centra en dibujar un gráfico completamente nuevo.

hasta ahora lo que estoy haciendo es agregar el siguiente código (basado en 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);
}

y mientras construyo mi modelo, también llamo createNewGraph(...), addGraphNode(...), addGraphConnection(...) y completeGraph(...).el problema es:después currGraph.setLayoutAlgorithm(..., true) eso true significa que debe aplicar el algoritmo y colocar los objetos en el orden "correcto".En este punto (como lo sugirió algún lector), es posible extraer las coordenadas calculadas a través de un GraphNode.getLocation() método.Desafortunadamente, después de establecer un diseño y aplicarlo, todos los estados tienen Point(0,0) como su ubicación.También encontré este comentario:

/**
 * 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() {
     ...
 }

en org.eclipse.zest.core.widgets.Graph fuentes :-[ para mí, parece que no puedo usar la biblioteca zest Graph para hacer este trabajo.¿Me equivoco?¿Hay alguna alternativa?

Cualquier ayuda sería apreciada :)

¿Fue útil?

Solución

En resumen, Zest no apoya directamente este escenario.

Sin embargo, puede crear una representación en memoria de sus partes editadas que se pueden diseñar usando Zest.En Zest 1.0 debe proporcionar una traducción a Graph Nodes y Graph Arcos Relaciones manualmente;en entusiasmo 2.0 solo tienes que proporcionar un LayoutContext.Zest 2.0 aún no se ha lanzado, pero me parece más fácil manejar este escenario.

Idea adicional:el proyecto de código abierto Spray admite el diseño Zest para gráficos Graphiti (Graphiti extiende GEF; tal vez haya algunas ideas que puedan reutilizarse).Vea el siguiente archivo de código: http://code.google.com/a/eclipselabs.org/p/spray/source/browse/plugins/org.eclipselabs.spray.runtime.graphiti.zest/src/org/eclipselabs/spray/runtime/graphiti/ entusiasmo/features/ZestLayoutDiagramFeature.java para algunas ideas.

EDITAR: Busqué un código relacionado en mi computadora;Logramos que dicho diseño funcionara en Zest 1.0 de la siguiente manera:

  1. Tenga un único GraphNode para cada nodo y una conexión para cada arco entre los nodos.Puedes agruparlos en dos conjuntos diferentes;p.ej. SimpleNode[] nodes; SimpleRelationship[] relationships;
  2. Cree una instancia de una clase de algoritmo y establezca sus parámetros opcionales como desee.
  3. Llamar algorithm.applyLayout(nodes, relationships, 0, 0, diagram.width, diagram.height, false, false) - lo siento, no tengo disponible una instalación de Zest 1.0 para comprobar el significado exacto de los parámetros;los dos primeros son los nodos y relaciones utilizadas;luego los siguientes cuatro preparan la mesa de dibujo;y sinceramente no tengo idea para qué sirven los dos últimos.:D

Más aclaraciones:Zest usa nodos y relaciones como terminología; reemplace mi arco anterior con relación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top