Frage

ich schreibe ein Eclipse-Plugin, das ein endliches Zustandssystem zeichnet.da es groß sein kann, möchte ich einen vorhandenen Diagrammlayout-Algorithmus anhängen (z.hierarchisches Layout, kraftbasiertes Layout, ...), die die Systemvisualisierung automatisch optimieren.

gibt es eine Möglichkeit, das Plugin, das ich schreibe (geschrieben mit GEF), zu integrieren, damit generierte Bearbeitungsteile gemäß einigen der gängigen Diagrammlayout-Algorithmen im Editorbereich platziert werden können?

ich habe das gefunden interessanter Artikel aber anstatt die Visualisierung von Bearbeitungsteilen zu optimieren, konzentriert es sich auf das Zeichnen eines komplett neuen Diagramms.

bisher füge ich den folgenden Code hinzu (basierend auf 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);
}

und während ich mein Modell baue, rufe ich auch an createNewGraph(...), addGraphNode(...), addGraphConnection(...) und completeGraph(...).das Problem ist:nach currGraph.setLayoutAlgorithm(..., true) dass true bedeutet, dass es den Algorithmus anwenden und die Objekte in der "richtigen" Reihenfolge platzieren sollte.an diesem Punkt (wie von einem Leser vorgeschlagen) ist es möglich, die berechneten Koordinaten durch a zu extrahieren GraphNode.getLocation() Methode.leider haben nach dem Festlegen und Anwenden eines Layouts alle Zustände Point(0,0) als ihren Standort.ich habe auch diesen Kommentar gefunden:

/**
 * 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 quellen: - [Für mich scheint es, dass ich die Zest-Grafikbibliothek nicht verwenden kann, um diesen Job zu erledigen.liege ich falsch?gibt es Alternativen?

jede Hilfe wäre dankbar :)

War es hilfreich?

Lösung

Kurz gesagt, Zest unterstützt dieses Szenario nicht direkt.

Sie können jedoch eine speicherinterne Darstellung Ihrer bearbeiteten Teile erstellen, die mit Zest gestaltet werden können.In Zest 1.0 müssen Sie eine Übersetzung für Diagrammknoten und Diagramme bereitstellen Arcs Beziehungen manuell;in Lust 2.0 sie müssen nur einen LayoutContext angeben.Zest 2.0 ist noch nicht veröffentlicht, aber es scheint mir einfacher zu sein, mit diesem Szenario umzugehen.

Zusätzliche Idee:das Open-Source-Projekt Spray unterstützt das Zest-Layout für Graphiti-Graphen (Graphiti erweitert GEF - vielleicht gibt es einige Ideen, die wiederverwendet werden können).Siehe die folgende Codedatei: 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 für einige Ideen.

BEARBEITEN: Ich habe in meinem Computer nach einem verwandten Code gesucht;wir haben es geschafft, ein solches Layout in Zest 1.0 auf folgende Weise zum Laufen zu bringen:

  1. Haben Sie einen einzelnen GraphNode für jeden Knoten und eine Verbindung für jeden Bogen zwischen den Knoten.Sie können sie in zwei verschiedenen Arrays sammeln;beispielsweise. SimpleNode[] nodes; SimpleRelationship[] relationships;
  2. Instanziieren Sie eine Algorithmusklasse und legen Sie Ihre optionalen Parameter nach Ihren Wünschen fest.
  3. Nennen algorithm.applyLayout(nodes, relationships, 0, 0, diagram.width, diagram.height, false, false) - entschuldigung, Sie haben keine verfügbare Zest 1.0-Installation, um die genaue Bedeutung der Parameter zu überprüfen;die ersten beiden sind die verwendeten Knoten und Beziehungen;dann legen die nächsten vier das Zeichenbrett fest;und ich habe ehrlich gesagt keine Ahnung, wofür die letzten beiden sind.:D

Weitere Klarstellung:Zest verwendet Knoten und Beziehungen als Terminologie - ersetze meinen vorherigen Bogen durch Beziehung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top