GraphStream Users

Archives de la liste Aide


Re: Recuperer les modifications apportees a un GraphicGraph vers un Graph


Chronologique Discussions 
  • From: Antoine Dutot <antoine.dutot AT gmail.com>
  • To: "graphstream-users AT litislab.fr" <graphstream-users AT litislab.fr>, tomdu19 AT hotmail.fr
  • Subject: Re: Recuperer les modifications apportees a un GraphicGraph vers un Graph
  • Date: Sun, 16 Mar 2014 12:06:58 +0100

Bonjour,

Si je comprends bien, vous souhaitez que l’affichage dans le main du « ui.selected » soit alternativement « true » et « false » ?

Si c’est bien cela, cela ne se produit pas avec le programme que vous donnez sauf « de temps en temps » car cette boucle est « trop rapide ». En effet, le pump n’est pas bloquant, et comme on travaille avec deux threads distincts, les deux n’ont pas le temps de se synchroniser. Si vous ajoutez un Thread.sleep(10) dans le while, cela devrait donner le temps aux messages provenant du main d’arriver au thread graphique.

La boucle donnée en exemple dans le tutoriel graphique suppose que le traitement que vous placez dans cette boucle gère le temps, sinon vous pouvez utiliser un pump bloquant : http://graphstream-project.org/doc/Tutorials/Graph-Visualisation_1.1/#simulations-and-gui-views

J’espère avoir répondu à la question.

Antoine


Le 14 mars 2014 14:08, <tomdu19 AT hotmail.fr> a écrit :
Bonjour,

Ayant codé ma propre class MouseManager, je souhaite reproduire le
comportement de la class ViewerListener (je souhaite avoir un thread graphique
qui gère les évènements utilisateur, et un thread de calcul ).

Ainsi, lorsqu'il y a un click sur un noeud, je lui attribue un état "noeud
sélectionné" (="ui.selected"). L'état du noeud est donc modifié dans le
GraphicGraph du viewer. Je souhaite synchroniser mon Graph (sur lequel je fais
tous mes calculs) avec ce GraphicGraph modifié. Cependant, je n'y arrive pas.

Par exemple, dans mon GraphicGraph, si j'ajoute un attribut lors d'un click au
noeud correspondant, je souhaite retrouvé ce même attribut dans mon Graph de
calcul (GraphicGraph et Graph étant le même graph). Je souhaite donc que les
modifications faite sur l'un, se reproduise sur l'autre. Pour cela j'ai donc
ajouté un sink. Cependant tout cela ne semble pas fonctionner. Je sollicite
donc votre aide.

Le code sera surement plus parlant, je pense. En esperant m'etre fait
comprendre.

Merci d'avoir pris le temps de repondre.

------------------------------------------------------ CODE
-------------------------------------------------------

Ma class MouseManager :
{

public class ProperMouseManager implements MouseManager
{
    private View a_view;
    private GraphicGraph a_g;

    public void init(GraphicGraph g, View view)
    {
        this.a_view = view;
        this.a_g = g;
        a_view.addMouseListener(this);
        a_view.addMouseMotionListener(this);
    }

    public void release()
    {
        a_view.removeMouseListener(this);
        a_view.removeMouseMotionListener(this);
    }

    public void mousePressed(MouseEvent e)
    {
        if(e.getButton() == MouseEvent.BUTTON1){
             GraphicElement element = a_view.findNodeOrSpriteAt(e.getX(),
e.getY());

             if(element != null){
                 a_g.addAttribute("ui.changed", element.getId());

                  if (element.hasAttribute("ui.selected"))
                      element.removeAttribute("ui.selected");
                  else
                      element.addAttribute("ui.selected");
              }
          }
    }
}

}


Contenu de ma fonction main :
{

        Graph g; //Graph quelconque

        Viewer viewer = new Viewer(g,
Viewer.ThreadingModel.GRAPH_IN_ANOTHER_THREAD);
        View view = viewer.addDefaultView(false);
        view.setShortcutManager(null);
        view.setMouseManager(new ProperMouseManager());

        JFrame fenetre = new JFrame();
        fenetre.add(view);
        fenetre.setVisible(true);

        ViewerPipe fromViewer = viewer.newViewerPipe();
        fromViewer.addSink(g);

        while(!g.hasAttribute("ui.viewClosed")){
            fromViewer.pump();

            if (g.hasAttribute("ui.changed")) {
                Node changedNode = g.getNode((String)
g.getAttribute("ui.changed"));
                System.out.println(changedNode.getAttribute("ui.selected"));

                g.removeAttribute("ui.changed");
            }
        }
        viewer.close();
}




Archives gérées par MHonArc 2.6.16.

Top of page