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

MATLAB Discussion :

Réalisation d'une droite verticale pour jouer le rôle de curseur


Sujet :

MATLAB

  1. #1
    Débutant
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 358
    Points : 106
    Points
    106
    Par défaut Réalisation d'une droite verticale pour jouer le rôle de curseur
    Bonjour , j'ai une question suite à une discution du forum:

    http://www.developpez.net/forums/d71...ition-curseur/

    Je souhaiterai donc savoir comment manipuler l'option Xdata dans ce cas précis .

    merci

  2. #2
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Bonjour,

    Un exemple est peut-être plus parlant:
    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
     
    function essai
     
    % Creation de la figure et de l'axe
    fig = figure;
    ax = axes('Parent',fig, 'XLimMode', 'manual');
     
    % Creation de la ligne
    ln = line([0.5 0.5],get(ax,'YLim'), 'ButtonDownFcn', @(obj,evt)click_on_line(obj));
     
    % Callback lors d'un clic sur la ligne
    function click_on_line(hObject)
     
    % Utilisation des callbacks WindowButtonMotionFcn et WindowButtonUpFcn de
    % la figure pour mettre à jour la position de la ligne (et desactiver la
    % mise à jour lorsque le clic est relache)
    set(ancestor(hObject,'figure'), ...
        'WindowButtonMotionFcn',    @(obj,evt) update_line_pos(hObject), ...
        'WindowButtonUpFcn',        @(obj,evt) unclick(obj));
     
    % Callback de mise à jour de la position du curseur
    function update_line_pos(hObject)
     
    % Recuperation du point courant dans l'axe parent du curseur
    current_point = get(ancestor(hObject,'axes'), 'CurrentPoint');
     
    % Mise à jour des valeurs XData du curseur
    set(hObject, 'XData', current_point(:,1));
     
    % Callback lorsque le clic est relache
    function unclick(hObject)
     
    % Remise à zero des callbacks de la figure
    set(hObject, 'WindowButtonMotionFcn', [], 'WindowButtonUpFcn', []);
    Duf
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  3. #3
    Débutant
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 358
    Points : 106
    Points
    106
    Par défaut
    Merci pour l'exemple.Mais quand je souhaite mettre une courbe sur l'axe ax , rien n'apparait.
    Voici ce que j'ai rajouté dans le code précédent , au niveau de la fonction essai.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function essai
    
    % Creation de la figure et de l'axe
    fig = figure;
    ax = axes('Parent',fig, 'XLimMode', 'manual');
    
    % Creation de la ligne
    ln = line([0.5 0.5],get(ax,'YLim'), 'ButtonDownFcn', @(obj,evt)click_on_line(obj));
    t=1:1:100
    line(t,sin(t),'Parent',ax)

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

    Peut-être un
    qui te permettrai de te placer de façon à voir ce que tu as tracé

  5. #5
    Débutant
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 358
    Points : 106
    Points
    106
    Par défaut
    ok merci .EN revanche si je veux mettre à jour la position de cette droite verticale. Je pensai faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ln = line([x_position x_position],get(Data,'YLim'));
    avec x_position qui vari.
    Mais une fois le programme lancé , la droite ne se déplace pas.Comment puis je mettre à jour la droite.Avec "set"?

  6. #6
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Citation Envoyé par oliv27400 Voir le message
    Merci pour l'exemple.Mais quand je souhaite mettre une courbe sur l'axe ax , rien n'apparait.
    Voici ce que j'ai rajouté dans le code précédent , au niveau de la fonction essai.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function essai
    
    % Creation de la figure et de l'axe
    fig = figure;
    ax = axes('Parent',fig, 'XLimMode', 'manual');
    
    % Creation de la ligne
    ln = line([0.5 0.5],get(ax,'YLim'), 'ButtonDownFcn', @(obj,evt)click_on_line(obj));
    t=1:1:100
    line(t,sin(t),'Parent',ax)
    C'est normal puisque les limites de ton axe (XLim) sont 0 et 1 (valeurs par défaut) et tu traces ta courbe à partir de 1. De plus la définition automatique des limites est désactivée pour l'axe X afin de rendre l'utilisation du curseur plus sympathique...
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  7. #7
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ln = line([0.5 0.5],get(ax,'YLim'), 'ButtonDownFcn', @(obj,evt)click_on_line(obj));
    set(ln,'XData',[pos pos])

  8. #8
    Débutant
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 358
    Points : 106
    Points
    106
    Par défaut
    J'ai essayé avec mes variables,j'ai donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set(findobj('tag','Ln'),'XData',[x_position x_position])
    Mais cela ne fonctionne pas.

  9. #9
    Invité
    Invité(e)
    Par défaut
    As tu défini le tag de ta ligne quelque part?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ln = line([0.5 0.5],get(ax,'YLim'), 'ButtonDownFcn', @(obj,evt)click_on_line(obj),'tag','Ln');

  10. #10
    Débutant
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 358
    Points : 106
    Points
    106
    Par défaut
    oui je l'ai fait.La seul différence par rapport à ton code, c'est que je n'appel pas de fonction.Je l'ai défini comme sui:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      ln = line([x_position x_position],get(Data,'YLim'),'Tag','Ln','color','w');

  11. #11
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Si tu n'appelles pas de fonction, comment veux-tu mettre à jour la position?
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  12. #12
    Invité
    Invité(e)
    Par défaut
    Que renvoie
    Quand tu dis que cela ne fonctionne pas, cela te renvoie une erreur? que devient la ligne?

    Tu peux t'inspirer de ce lien

  13. #13
    Débutant
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 358
    Points : 106
    Points
    106
    Par défaut
    En fait je souhaiterai mettre à jour la position mais dans 3 fonctions qui sont deja appeller pour une autre utilité.Donc je vois pas comment faire.

  14. #14
    Invité
    Invité(e)
    Par défaut
    Pourrai-tu nous montrer les parties de codes correspondantes?

  15. #15
    Débutant
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 358
    Points : 106
    Points
    106
    Par défaut
    Parce que je n'est pas besoin du déplacement à l'aide de la souris en cliquant dessus.C'est juste une mise a jour que je souhaiterai faire.Précédemment je faisais la même chose avec un uiobject de forme rectangle( je mettais à jour sans appeler de fonction , simplement avec la fonction set, mais cela ne convenait pas pour la suite de mon programme).

  16. #16
    Invité
    Invité(e)
    Par défaut
    J'avais bien compris, ce qu'il y a dans la fonction draggingFcn est ce que tu veux faire.
    La seule différence, c'est l'obtention de la position:il la récupère avec les mouvements de la souris.
    Mais pour ce qui est de déplacer la ligne, c'est la même chose.

  17. #17
    Débutant
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 358
    Points : 106
    Points
    106
    Par défaut
    Donc du coup selon toi si j'utilise tout simplement la fonction set, cela ne fonctionnera pas?Je suis obliger de passer par l'utilisation des fonctions

  18. #18
    Invité
    Invité(e)
    Par défaut
    Je ne t'ai pas dit de suivre exactement ce qu'il y avait dans le lien, tu dois utiliser la fonction set comme indiqué dans le lien, mais dans tes fonctions(qui sont là pour quelque chose quand même).
    Toutefois sans code, je ne peux pas te dire ce qui ne va pas

  19. #19
    Débutant
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 358
    Points : 106
    Points
    106
    Par défaut
    Et bien j'ai mis la fonction set , paramétrer comme il faut dans mes différentes fonctions .Et la ligne ne se met pas à jour....
    Je l'a défini comme sui:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ln=line([x_position x_position],get(Data,'YLim'),'color','w','tag','LN');
    et je la modifie comme sui dans mes fonctions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set(findobj('tag','LN'),'XData',[x_position x_position])

  20. #20
    Invité
    Invité(e)
    Par défaut
    À priori, cela devrai marcher.
    À tout hazard, que retourne
    et x_position est-il bien différent de celui de départ?

Discussions similaires

  1. [WD-2003] Insertion d'une marque verticale pour indiquer une révision de document
    Par guillaumeleroux dans le forum Word
    Réponses: 3
    Dernier message: 10/03/2011, 15h48
  2. Déplacement d'une droite verticale
    Par zakmakaay dans le forum Interfaces Graphiques
    Réponses: 23
    Dernier message: 01/11/2009, 20h27
  3. PROC GCHART : tracer droite verticale pour simulation
    Par stefsas dans le forum ODS et reporting
    Réponses: 1
    Dernier message: 30/09/2008, 12h47
  4. Tracer une droite verticale sur un graphique
    Par AdiAccess dans le forum IHM
    Réponses: 1
    Dernier message: 04/03/2008, 12h05
  5. Tracer une droite verticale
    Par jmbonnaz dans le forum MATLAB
    Réponses: 1
    Dernier message: 16/05/2007, 11h10

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