Domanda

Sto scrivendo un plugin Eclipse che disegna un sistema di stato finito. Dal momento che potrebbe essere grande, vorrei allegare un algoritmo di layout del grafico esistente (ad esempio layout gerarchico, layout di forza, ...) che ottimizza automaticamente la visualizzazione del sistema.

C'è un modo per integrare il plugin che sto scrivendo (scritto usando GEF) in modo che venga effettuata le parti di modifica generata nell'area dell'editor seguendo alcuni degli algoritmi di layout del grafico comune?

Ho trovato questo Interessante articolo ma invece di ottimizzare la modifica Visualizzazione delle parti, si concentra sul disegno di un grafico completamente nuovo.

Finora Quello che sto facendo è aggiungere il seguente codice (basato su 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);
}
.

E mentre si costruisce il mio modello, chiamo anche createNewGraph(...), addGraphNode(...), addGraphConnection(...) e completeGraph(...). Il problema è: dopo currGraph.setLayoutAlgorithm(..., true) che true significa applicare l'algoritmo e posizionare gli oggetti nell'ordine "giusto". A questo punto (come suggerito da alcuni lettore), è possibile estrarre le coordinate calcolate attraverso un metodo GraphNode.getLocation(). Sfortunatamente dopo aver impostato un layout e applicandolo, tutti gli stati hanno Point(0,0) come posizione. Ho anche trovato questo commento:

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

In org.eclipse.zest.core.widgets.Graph Fonti: - [a me Sembra che non riesca a usare la libreria grafico a zest per fare questo lavoro. ho sbagliato? Ci sono alternative?

Qualsiasi aiuto sarebbe apprezzato :)

È stato utile?

Soluzione

In breve, lo zest non supporta direttamente questo scenario.

Tuttavia, è possibile creare una rappresentazione in memoria di modi di modificare le parti che possono essere layouted utilizzando la scorza. In Zest 1.0 è necessario fornire a una traduzione a grafico nodi e grafico ARCS relazioni manualmente; in Zest 2.0 Devi solo fornire un layoutContext. Zest 2.0 non è ancora stato rilasciato, ma sembra più facile per me gestire questo scenario.

Idea aggiuntiva: il layouting del layout del supporto dello spruzzo del progetto open source per grafiti (graphiti estende il GEF - Forse ci sono alcune idee che possono essere riutilizzate). Vedere il seguente file di codice: 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 per alcune idee.

Modifica: Ho esaminato un codice correlato nel mio computer; Siamo riusciti a ottenere tale layouting per lavorare in ZEST 1.0 il seguente modo:

    .
  1. Avere un singolo graphnode per ciascun nodo e una connessione per ciascun arco tra i nodi. Puoi ritirarli in due diversi array; per esempio. SimpleNode[] nodes; SimpleRelationship[] relationships;
  2. istanziare una classe di algoritmo e imposta i parametri opzionali come preferisci.
  3. Chiama algorithm.applyLayout(nodes, relationships, 0, 0, diagram.width, diagram.height, false, false) - Siamo spiacenti, non hanno un'installazione di Zest 1.0 disponibile per controllare i significati esatti dei parametri; I primi due sono i nodi e le relazioni utilizzate; Quindi i prossimi quattro imposta il tavolo da disegno; E onestamente non ho idea di quali sono gli ultimi due per. : D

    Ulteriori chiarificazione: lo zest utilizza nodi e relazioni come terminologia - sostituire il mio arco precedente con relazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top