GraphStream Users

Archives de la liste Aide


Re: RE : RE : rapprocher les noeuds / les mettre au 1er plan


Chronologique Discussions 
  • From: Antoine Dutot <antoine.dutot AT gmail.com>
  • To: graphstream-users AT litislab.fr
  • Subject: Re: RE : RE : rapprocher les noeuds / les mettre au 1er plan
  • Date: Wed, 29 Jun 2011 14:55:46 +0200

Bonjour,

Désolé de cette réponse tardive.

Il y a effectivement un bug : quand le système de mise en forme du graphe détecte que les positions sont stables, il fait des pauses de plus en plus longues et ne recalcule pas la mise en forme pour économiser le CPU. Il y a pas mal de critères pour que le calcul redémarre, mais le changement du poids des arcs ou des nœuds n'était pas pris en compte ! Il est possible que le problème que vous rencontrez soit lié à ce bug.

C'est corrigé sur le dépôt logiciel GitHub. Je peux faire une archive de gs-core contenant cette correction si vous le désirez.

Salutations,

Antoine

Le 24 juin 2011 17:54, Dafflon Yaroslaw <Yaroslaw.Dafflon AT edu.hefr.ch> a écrit :
bonjour,

non il y a pas de changement .


Dafflon Yaroslaw
________________________________________
De : Antoine Dutot [antoine.dutot AT gmail.com]
Date d'envoi : vendredi, 24. juin 2011 16:16
Objet : Re: RE : rapprocher les noeuds / les mettre au 1er plan

Bonjour,

En fait c'était surtout pour tester et essayer de trouver le bug. Sinon la technique que vous utilisez semble être la bonne.

Le graphe ne bouge plus une fois mis en forme, même si vous opérez des changement dans celui-ci ?

Salutations,

Antoine

Le 24 juin 2011 09:46, Dafflon Yaroslaw <Yaroslaw.Dafflon AT edu.hefr.ch<mailto:Yaroslaw.Dafflon AT edu.hefr.ch>> a écrit :
bonjour,

je peux vous montrer ma méthode qui sélectionne les noeud et les regroupes mais je vais pas vous envoyer le programme car il est assez gros et va chercher les informations sur une base de données.
voila ma méthode je sais pas si vous pouvez plus m'aider avec :

      // MISE EN EVIDENCE D'UN NOEUD, DE SES VOISINS ET DE LEURS LIENS
      public void setActiveNode(String as){
              Node n;
              // RETOUR A LA NORMALE DU NOEUD CHOISI PRECEDEMMENT
              if(this.activeNode != null){
                      n = this.activeNode;
                      for(Edge e:n.getEachEdge()) {
                              e.setAttribute("ui.color", 0); // Couleur noeud
                              e.getOpposite(n).setAttribute("ui.color", 0); // Couleur voisin
                              e.setAttribute("ui.size", 1); // Largeur lien
                      }
                      n.setAttribute("ui.color", 0); // Couleur neoud actif
              }
              // MISE EN EVIDENCE
              n = this.activeNode = g.getNode(as); // Changement noeud actif
              for(Edge e:n.getEachEdge()) {
                      e.setAttribute("ui.color", 0.5);
                      e.getOpposite(n).setAttribute("ui.color", 0.3);
                      e.setAttribute("ui.size", 2);
                      e.setAttribute("layout.weight", 0.1);//attire les noeuds
              }
              n.setAttribute("ui.color", 1);
      }

merci

salutation

Dafflon Yaroslaw
________________________________________
De : Antoine Dutot [antoine.dutot AT gmail.com<mailto:antoine.dutot AT gmail.com>]
Date d'envoi : jeudi, 23. juin 2011 14:21
À : graphstream-users AT litislab.fr<mailto:graphstream-users AT litislab.fr>
Objet : Re: rapprocher les noeuds / les mettre au 1er plan

Bonjour,

Le 22 juin 2011 11:08, <yaroslaw.dafflon AT edu.hefr.ch<mailto:yaroslaw.dafflon AT edu.hefr.ch><mailto:yaroslaw.dafflon AT edu.hefr.ch<mailto:yaroslaw.dafflon AT edu.hefr.ch>>> a écrit :
bonjour,

je souhaite rapprocher les nœuds sélectionnés dans mon application et les
mettre au premier plan.

j'ai utilisé : e.setAttribute("layout.weight", 0.1);//attire les noeuds e=Edge

C'est la bonne méthode, cela devrait fonctionner. Cependant,
l'algorithme de mise en forme automatique du graphe est basé sur un système de
forces "attraction/répulsion", et certains arcs sont plus ou moins longs. Le poids
change cette longueur mais ne permet pas d'assigner la même longueur à tous les
arcs.

Si vous avez un exemple plus complet, on peut éventuellement tester, si vous le désirez.

mais les nœuds ne se rapproche pas, je dois le faire autrement?

Ma deuxième question serait de savoir comment mettre les nœuds au premier
plan, dans mon application qui comporte plein de nœuds, je voudrais en mettre
certains au premier plan mais je n'ai pas trouvé d'attribut pour cela. Il y en
a?

Vous pouvez utiliser une feuille de style avec la propriété "z-index". L'afficheur dessine
les éléments du graphe dans un ordre "Z" particulier, on peut voir cela comme des calques.
Si un objet a un niveau Z élevé il est dessiné au dessus de ceux qui ont un niveau Z bas.
Par défaut, tous les arcs sont au niveau 1 et tous les nœuds au niveau 2.
(http://graphstream-project.org/doc/Tutorials/GraphStream-CSS-Reference_1.0/#properties-common-to-nodes-edges-and-sprites)

En revanche deux objets qui ont le même niveau Z sont dessinés dans un ordre arbitraire. Pour
éviter cela, grosso-modo, vous pouvez procéder ainsi:
...
// Au début du programme.
graph.addAttribute("ui.stylehseet", "node.important { z-index: 10; }");
...
// Lors de la création des nœuds ou quand vous souhaitez les mettre au premier plan, lors de
// la sélection par exemple:
node.addAttribute("ui.class", "important");

Salutations

Antoine





Archives gérées par MHonArc 2.6.16.

Top of page