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 :

Rafraichissement des axes [Débutant]


Sujet :

Interfaces Graphiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 16
    Par défaut Rafraichissement des axes
    Bonjour,

    je suis en train de développer une interface graphique avec MATLAB GUIDE afin de visualiser des données enregistrées sur un graphique. Le but est de sélectionner les capteurs dont on souhaite afficher les données et aussi le pas de temps sur lequel on veut visualiser ces données. Voici à quoi ressemble mon interface:



    Je commence par initialiser mes variables et les enregistrer comme suit:
    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
    % Données natives à plotter
    t = 0:0.01:1;
    sinx = sin(2*pi()*t);
    cosx = cos(2*pi()*t);
    demi_sinx = 0.5*sin(2*pi()*t);
    handles.time = t;
    handles.sin = sinx;
    handles.cos = cosx;
    handles.demi_sin = demi_sinx;
     
    % Choose default command line output for test
    handles.output = hObject;
     
    % Update handles structure
    guidata(hObject, handles);
    J'utilise les fonctions sin et cos uniquement dans le but de tester l'interface car en parallèle je n'ai pas encore fini de traiter les données des capteurs. En cochant ou décochant les capteurs, j'arrive à afficher ou pas la courbe correspondante sur l'axe. Voici le code que j'ai utilisé (trouvé dans un post sur ce forum) pour ce faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    hplot1 = get(hObject,'UserData');
    if isempty(hplot1)
          hplot1 = plot(handles.time, handles.sin, 'r');
          set(hObject,'UserData',hplot1);
    else
          if strcmp(get(hplot1,'Visible'),'on'), set(hplot1,'Visible','off')
          else set(hplot1,'Visible','on')
          end
    end
    Et enfin je gère le popup menu qui me sert à régler la durée de visualisation de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    val = get(hObject,'Value');
    str = get(hObject,'String');
    switch str{val}
        case '1sec'
            handles.time = 0:0.01:1;
        case '2sec'
            handles.time = 0:0.01:2;
        case '3sec'
            handles.time = 0:0.01:3;
    end
    handles.sin = sin(2*pi()*handles.time);
    handles.cos = cos(2*pi()*handles.time);
    handles.demi_sin = 0.5*sin(2*pi()*handles.time);
    guidata(hObject,handles);
    Mon principal problème est que malgré le guidata, les données ne sont pas actualisées dans l'axe... lorsque je coche ou décoche les capteurs, cela affiche les courbes mais la durée est toujours de 1sec, celle initialisée au début du programme. J'ai aussi affiché les variables handles.sin, handles.cos, handles.time etc et elles ont été correctement modifiées par la sélection d'une valeur dans le popup menu. je suppose que j'ai oublié quelque chose mais je ne sais pas quoi :p. Si vous pouviez m'éclairer à ce sujet, ça m'aiderai beaucoup!


    Merci par Avance,
    Adrien


    NB: je viens à peine de me lancer dans les interfaces graphiques avec MATLAB et je cherche par ci par là des tutoriels sur la création d'interfaces graphiques mais je n'ai pas trouvé grand chose jusque là... si vous avez aussi des liens vers des tutoriels très complets (pas juste un exemple comme dans la demo de MatLab ^^), je suis aussi preneur!

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

    Avec ces lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    handles.sin = sin(2*pi()*handles.time);
    handles.cos = cos(2*pi()*handles.time);
    handles.demi_sin = 0.5*sin(2*pi()*handles.time);
    Tu modifies juste les valeurs contenues dans la structure handles. Mais cela ne modifie en rien les plot.
    Voici un exemple de façon de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    x = 0:0.01:1;
    y = sin(2*pi*x);
    hplot = plot(x,y);
    pause
    new_x = 0:0.01:2;
    new_y = sin(2*pi*new_x);
    set(hplot,'xdata',new_x,'ydata',new_y)
    On récupère le handle de la ligne tracée, et on modifie ensuite les données x et y de ses axes.

    PS: Peut-être l'as-tu déjà fait, mais tu peux regarder les tutoriels de ce site.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 16
    Par défaut
    Bonjour,

    merci de ton aide! j'ai stocker tous mes plots dans les handles, pour pouvoir les récupérer et ensuite les changer. Voici à quoi ressemble le nouveau code pour le popup menu:

    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
    val = get(hObject,'Value');
    str = get(hObject,'String');
    switch str{val}
        case '1sec'
            handles.time = 0:0.01:1;
        case '2sec'
            handles.time = 0:0.01:2;
        case '3sec'
            handles.time = 0:0.01:3;
    end
    handles.sin = sin(2*pi()*handles.time);
    handles.cos = cos(2*pi()*handles.time);
    handles.demi_sin = 0.5*sin(2*pi()*handles.time);
    guidata(hObject,handles);
    set(handles.hplot1,'xdata',handles.time,'ydata',handles.sin);
    set(handles.hplot2,'xdata',handles.time,'ydata',handles.cos);
    set(handles.hplot3,'xdata',handles.time,'ydata',handles.demi_sin);
    Cela à l'air de fonctionner correctement maintenant. Je vais continuer à développer mon interface et si je rencontre d'autres problèmes, j' n'hésiterai pas à repasser par ici. Encore merci

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

Discussions similaires

  1. Rafraichissement des données avec ADOConnection -SQL Server
    Par newfsch dans le forum Bases de données
    Réponses: 4
    Dernier message: 04/01/2006, 22h48
  2. [Form/ssForm] rafraichissement des données
    Par michaelbob dans le forum Access
    Réponses: 3
    Dernier message: 14/10/2005, 12h05
  3. Vitesse de rafraichissement des données
    Par StarMusic dans le forum Bases de données
    Réponses: 2
    Dernier message: 30/09/2005, 11h20
  4. question sur le rafraichissement des données dans la base
    Par vbcasimir dans le forum Bases de données
    Réponses: 8
    Dernier message: 06/06/2005, 13h44
  5. [VB6] Modification des axes d'un composant Chart
    Par HPJ dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 21/05/2003, 09h33

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