IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques Discussion :

Afficher/Masquer une courbe


Sujet :

Interfaces Graphiques

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 177
    Points : 46
    Points
    46
    Par défaut Afficher/Masquer une courbe
    Bonjour,
    J'arrive à afficher une courbe en appuyant sur un pushbutton, et j'aimerais qu'en recliquant sur le bouton elle disparaisse. C'est possible ?

    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Cela dépend de ce que tu entends par disparaître
    Il existe la propriété 'Visible': set(monAxes,'visible','off').
    Ou veux-tu juste le supprimer? delete(MonAxes).

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 177
    Points : 46
    Points
    46
    Par défaut
    En fait, j'ai un graphe avec 2 courbes, qui apparaissent lorsque je clique sur 1 des 2 pushbuttons (1 pushbutton par courbe)

    J'aimerais pouvoir isoler une des courbes si je le souhaite en recliquant sur le pushbutton.

    Actuellement mes courbes apparaissent bien toutes les 2, mais si je veux en retirer une du graphe, je suis obligé de recompiler mon interface et de ne cliquer que sur le bouton que je souhaite

  4. #4
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 56
    Points : 50
    Points
    50
    Par défaut
    Dans ce cas la propriété 'Visible' de l'objet courbe (et non de l'objet axe) est adaptée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set(hplot,'Visible','off')
    %set(hplot,'Visible','on') % pour le remettre
    où hplot est le handle retourné par ta fonction 'plot' qui t'a permis d'afficher ta courbe. Il faut sûrement que tu sauves ce handle dans le callback de ton pushbutton, par exemple, dans la propriété 'UserData' du bouton.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function ButtonCallBack(hObj,Event)
    hplot = get(hObj,'UserData');
    if isempty(hplot)
      hplot = plot(1:10);
      set(hObj,'UserData',hplot);
    else
      if strcmp(get(hplot,'Visible'),'on'), set(hplot,'Visible','off')
      else set(hplot,'Visible','on')
      end
    end

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 177
    Points : 46
    Points
    46
    Par défaut
    Ca fonctionne, mais quand je lui dis de tracer en utilisant des données issus de la simulation, j'ai ce message d'erreur
    ??? Undefined function or variable 'd1'.
    
    Error in ==> interface>ButtonCallBack at 860
      hplot = plot(d1,Fres);
     
    ??? Error while evaluating uicontrol Callback
    Mais en mettant directement un line ou plot dans le callback (sans créer de fonction), la courbe se trace sans soucis.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    uicontrol(...
        'Parent',testpanel(1),...
        'units','normalized',...
        'style','pushbutton',...
        'String','affiche courbe',...
        'position',[0.3,0.05,0.15,0.05],...
        'callback','line(d1,Fres)');
    Pourquoi dans le 1er cas Matlab ne connait pas ma variable et dans le 2e cas il l'utilise sans soucis ?

    Merci

  6. #6
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 56
    Points : 50
    Points
    50
    Par défaut
    dans le cas où tu utilises la chaine à la place de la fonction callbacks, matlab connait surement déjà d1 (tu n'as pas mis tout le code, mais je suppose que juste avant uicontrol(...), tu as d1=...
    Dans le callback, d1 n'est pas connu puisque tu es dans une sous-fonction. Si tu veux qu'il soit connu, il faut le passer en paramètre de ton handle de fonction par exemple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    set(ButtonControl, 'Callback',{@ButtonCallBack,d1})
    
    function ButtonCallBack(hObj,Event, data)
    % data = d1
    ...
    Dans ces deux cas, tu ne peux pas faire évoluer d1 indépendamment du callback, car d1 est passé en dur finalement. Ce n'est pas un pb si d1 est statique.

    Si d1 peut etre dynamique, une autre possibilité est de calculer d1 directement dans ton callback.
    Une autre est encore d'utiliser les setappdata/getappdata ou le guidata : cf. http://www.developpez.net/forums/d40...es-graphiques/

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 177
    Points : 46
    Points
    46
    Par défaut
    d1 est dynamique, je vais essayer setappdata et getappdata voir si ça fonctionne.

    Merci de ton aide

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 177
    Points : 46
    Points
    46
    Par défaut
    Ca fonctionne, je te remercie.
    Mais il reste un dernier détail que je ne comprend pas.
    J'ai ce code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    uicontrol(...
        'Parent',testpanel(1),...
        'units','normalized',...
        'style','pushbutton',...
        'String','Afficher courbe test1',...
        'position',[0.05,0.05,0.15,0.05],...
        'callback',@trace_graphe_button1);
     
    uicontrol(...
        'Parent',testpanel(1),...
        'units','normalized',...
        'style','pushbutton',...
        'String','Afficher courbe test2',...
        'position',[0.3,0.05,0.15,0.05],...
        'callback',@graphe2);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    function trace_graphe_button1(hObj,Event)
    %Récupération des valeurs
    d1=getappdata(gcbf,'valeur_de_d1');
    Fres1=getappdata(gcbf,'valeur_de_Fres1');
     
    handles = guidata(gcbf);
    hplot = get(hObj,'UserData');
    if isempty(hplot)
     
      hplot = plot(d1,Fres1); %Courbe
      set(hObj,'UserData',hplot);
    else
      if strcmp(get(hplot,'Visible'),'on'), set(hplot,'Visible','off')
      else set(hplot,'Visible','on')
      end
    end       
    guidata(gcbf,handles)
     
    function graphe2(hObj,Event)
    %Récupération des valeurs
    d1=getappdata(gcbf,'valeur_de_d1');
    Trainee1=getappdata(gcbf,'valeur_de_Trainee1');
     
    handles = guidata(gcbf);
    hplot = get(hObj,'UserData');
    if isempty(hplot)
     
      hplot = plot(d1,Trainee1); %Courbe
      set(hObj,'UserData',hplot);
    else
      if strcmp(get(hplot,'Visible'),'on'), set(hplot,'Visible','off')
      else set(hplot,'Visible','on')
      end
    end       
    guidata(gcbf,handles)
    J'ai sauvegarder les valeurs utiles précédemment avec setappdata.

    En fait, j'aimerais pouvoir avec les 2 courbes sur le même graphe et pouvoir "jongler" entre les 2 (faire disparaitre celle souhaitée, faire disparaitre l'autre, avoir les 2...)

    Acutellement j'en affiche 1, puis la seconde. Et à partir du moment où la seconde courbe est affichée, il se passe comme si le 1er pushbutton devient inactif (je ne peux plus que faire apparaitre/disparaitre 1seule courbe...)

    Merci

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 177
    Points : 46
    Points
    46
    Par défaut
    C'est ok, il manquait juste un petit "hold on".

    Merci beaucoup

  10. #10
    Invité
    Invité(e)
    Par défaut
    Une ligne à rajouter, sans quoi chaque nouveau plot efface l'ancien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set(gca,'nextplot','add')
    [EDIT] Ou hold on qui a le même effet oui...

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 177
    Points : 46
    Points
    46
    Par défaut
    Bonjour,

    Nouveau problème concernant l'affichage de mes courbes.

    La 1ere courbe que j'affiche avec le bouton 1 s'affiche bien,
    la 2e courbe que j'affiche avec le bouton 2 s'affiche également bien, mais lorsque je l'affiche, c'est comme si elle bloquait la 1ère courbe (je ne peux plus que afficher/cacher la dernière courbe affichée)

    Et j'aimerais pouvoir "jongler" entre afficher la courbe1, la courbe2 ou les 2 en même temps.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    handles = guidata(gcbf);
     
    hplot = get(hObj,'UserData');
    if isempty(hplot)
     
      hplot = plot(handles.axes1,b1,F1,'b'); %Courbe
      hold on
      grid on
      set(hObj,'UserData',hplot);
    else
      if strcmp(get(hplot,'Visible'),'on'), set(hplot,'Visible','off')
      else set(hplot,'Visible','on')
      end
    end       
    guidata(gcbf,handles)
    Voici l'affichage de la courbe 1, b1 et F1 sont appelés avec getappdata et la fonction a comme argument (hObj et Event).

    La fonction est identique pour la courbe 2.

    Merci

  12. #12
    Invité
    Invité(e)
    Par défaut
    As-tu plusieurs objets Axes?
    Dans ce cas, il serait bon de spécifier le handle lorsque tu utilises grid et surtout hold:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    hold(handles.axes1,'on')
    grid(handles.axes1,'on')

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 177
    Points : 46
    Points
    46
    Par défaut
    Oui j'ai 4 axes réparti sur 2 pages. Mais ils n'ont pas le même nom

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] afficher ou masquer une courbe avec Zgraph
    Par lolo81 dans le forum C#
    Réponses: 1
    Dernier message: 15/07/2011, 11h09
  2. afficher/masquer une partie d'un formulaire jsp
    Par maroosoft dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 07/01/2009, 13h47
  3. Afficher/masquer une partie d'un tr au survol de la souris
    Par Kefass dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/03/2008, 10h11
  4. Afficher/Masquer une div
    Par philbona dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 08/02/2007, 23h09
  5. [Form] Afficher/Masquer une zone de texte
    Par SpyesX dans le forum IHM
    Réponses: 14
    Dernier message: 01/12/2005, 01h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo