j'écris un plugin Eclipse qui dessine un système d'états finis. comme il peut être grand, je voudrais attacher un algorithme de disposition de graphique existant (par exemple, la disposition hiérarchique, la disposition basée sur la force, ...) qui optimisent automatiquement la visualisation du système.éclipse (Fem) et la visualisation graphique (zeste)
est-il un moyen d'intégrer le plugin j'écris (écrit à l'aide du FEM) afin que les parties d'édition pourraient être générés place sur la zone de l'éditeur ci-dessous certains des algorithmes de mise en page graphique commun?
J'ai trouvé ce interesting article mais au lieu d'optimiser la visualisation des pièces d'édition, il se concentre sur le dessin d'un graphique complètement nouveau.
jusqu'à ce que je fais est d'ajouter le code suivant (à base de zestes 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 tout en construisant mon modèle, je l'appelle également createNewGraph(...)
, addGraphNode(...)
, addGraphConnection(...)
et completeGraph(...)
. le problème est: après currGraph.setLayoutAlgorithm(..., true)
que true
signifie qu'il devrait appliquer l'algorithme et placer les objets dans le "bon" ordre. à ce stade (comme suggéré par certains lecteurs), il est possible d'extraire les coordonnées calculées à l'aide d'une méthode GraphNode.getLocation()
. malheureusement, après avoir défini une mise en page et l'avoir appliquée, tous les états ont Point(0,0)
comme emplacement. J'ai aussi 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() {
...
}
en org.eclipse.zest.core.widgets.Graph
sources: - [pour moi, il semble que je ne peux pas utiliser la bibliothèque zestes graphique pour faire ce travail. ai-je tort? Y a-t-il des alternatives?
toute aide serait appréciée :)
J'ai édité ma question et ajouté un code qui fait ce que vous avez suggéré. mon problème est que je ne sais pas comment extraire les coordonnées calculées de l'objet 'Graph': -/aussi, je me demande si je pourrais directement appliquer un algorithme de la bibliothèque zest à mes objets ... – FSp
Vous devez maintenir un lien entre les GraphNodes et votre objet modèle (par exemple, en utilisant une hashtable, ou en utilisant le magasin d'objets du modèle GraphNode). Ensuite, vous pouvez parcourir tous les nœuds, obtenir leurs coordonnées (si je me souviens bien, il existe un type de méthode getPosition ou getX sur GraphNodes que vous pouvez utiliser). A propos de l'application directe: comme les algorithmes de mise en page Zest attendent des entrées spécifiques, vous devez traduire pour cela. L'entrée est moins restrictive dans Zest 2.0, donc il serait plus facile à traduire, mais c'est encore possible dans Zest 1.0. –
bonjour, j'ai édité à nouveau ma question pour le rendre plus précis. Néanmoins, il me semble que je ne peux pas utiliser zest pour calculer une mise en page pour mon graphique sans réellement le montrer: [ – FSp