Question

J'écris un plugin Eclipse qui dessine un système d'état fini. Puisqu'il peut être grand, je voudrais attacher un algorithme de mise en page de graphe existant (par exemple, disposition hiérarchique, mise en page basée sur la force, ...) qui optimiser automatiquement la visualisation du système.

Existe-t-il un moyen d'intégrer le plugin que j'écris (écrit à l'aide de GEF) afin que les pièces de modification générées puissent être placées sur la zone de l'éditeur en suivant certains des algorithmes de mise en page graphiques courants?

J'ai trouvé ça article intéressant Mais au lieu d'optimiser la visualisation des pièces de modification, il se concentre sur le dessin d'un graphique complètement nouveau.

Jusqu'à présent, ce que je fais est d'ajouter le code suivant (basé sur le zeste 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);
}

Et pendant la construction de mon modèle, j'appelle aussi createNewGraph(...), addGraphNode(...), addGraphConnection(...) et completeGraph(...). Le problème est: après currGraph.setLayoutAlgorithm(..., true) ce true signifie qu'il doit appliquer l'algorithme et placer les objets dans l'ordre "droit". À ce stade (comme suggéré par certains lecteur), il est possible d'extraire les coordonnées calculées via un GraphNode.getLocation() méthode. Malheureusement après avoir mis en page et l'appliquer, tous les États ont Point(0,0) comme leur emplacement. J'ai également trouvé ce commentaire:

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

dans org.eclipse.zest.core.widgets.Graph Sources: - [Pour moi, il semble que je ne peux pas utiliser la bibliothèque de graphiques ZEST pour faire ce travail. ai-je tort? Y a-t-il des alternatives?

Toute aide serait appréciée :)

Était-ce utile?

La solution

En bref, Zest ne prend pas en charge directement ce scénario.

Cependant, vous pouvez construire une représentation en mémoire de vous éditer des pièces qui peuvent être disposées à l'aide du zeste. Dans Zest 1.0, vous devez fournir une traduction pour graphiquer les nœuds et graphique Arcs Relations manuellement; dans Zeste 2.0 Vous n'avez qu'à fournir un LayoutContext. Zest 2.0 n'est pas encore sorti, mais il me semble plus facile de gérer ce scénario.

Idée supplémentaire: la mise en page de la mise en place du zeste de la pulvérisation du projet open source pour les graphiques Graphi (Graphiti étend GEF - peut-être qu'il y a des idées qui peuvent être réutilisées). Voir le fichier de code suivant: http://code.google.com/a/eclipselabs.org/p/spray/source/browse/plugins/org.eclipselabs.spray.runtime.graphiti.zest/src/org/eclipselabs/spray/runtime/graphiti/ zeste / fonctionnalités / zestlayoutdiagramfeature.java pour quelques idées.

ÉDITER: J'ai examiné un code connexe dans mon ordinateur; Nous avons réussi à faire fonctionner une telle mise en page dans le zeste 1.0 de la manière suivante:

  1. Ont un seul graphnode pour chaque nœud et une connexion pour chaque arc entre les nœuds. Vous pouvez les collecter en deux tableaux différents; par exemple SimpleNode[] nodes; SimpleRelationship[] relationships;
  2. Instanciez une classe d'algorithme et définissez vos paramètres facultatifs comme vous le souhaitez.
  3. Appel algorithm.applyLayout(nodes, relationships, 0, 0, diagram.width, diagram.height, false, false) - Désolé, je n'ai pas d'installation de zeste 1.0 disponible pour vérifier les significations exactes des paramètres; Les deux premiers sont les nœuds et les relations utilisés; Ensuite, les quatre suivants définissent la planche à dessin; Et honnêtement, je n'ai aucune idée de quoi servent les deux derniers. :RÉ

Clarification supplémentaire: le zeste utilise les nœuds et les relations comme terminologie - remplacez mon arc précédent par rapport.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top