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
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
Bonjour,
Un exemple est peut-être plus parlant:
Duf
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', []);
Simulink & Embedded Coder
Au boulot : Windows 7 , MATLAB r2016b
A la maison : ArchLinux mais pas MATLAB
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)
Bonjour,
Peut-être un
qui te permettrai de te placer de façon à voir ce que tu as tracé
Code : Sélectionner tout - Visualiser dans une fenêtre à part xlim(ax,[0 100])
ok merci .EN revanche si je veux mettre à jour la position de cette droite verticale. Je pensai faire:
avec x_position qui vari.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ln = line([x_position x_position],get(Data,'YLim'));
Mais une fois le programme lancé , la droite ne se déplace pas.Comment puis je mettre à jour la droite.Avec "set"?
Simulink & Embedded Coder
Au boulot : Windows 7 , MATLAB r2016b
A la maison : ArchLinux mais pas MATLAB
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])
J'ai essayé avec mes variables,j'ai doncMais cela ne fonctionne pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part set(findobj('tag','Ln'),'XData',[x_position x_position])
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');
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');
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
Que renvoie
Quand tu dis que cela ne fonctionne pas, cela te renvoie une erreur? que devient la ligne?
Code : Sélectionner tout - Visualiser dans une fenêtre à part findobj('tag','Ln')
Tu peux t'inspirer de ce lien
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.
Pourrai-tu nous montrer les parties de codes correspondantes?
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).
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.
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
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
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:
et je la modifie comme sui dans mes fonctions:
Code : Sélectionner tout - Visualiser dans une fenêtre à part ln=line([x_position x_position],get(Data,'YLim'),'color','w','tag','LN');
Code : Sélectionner tout - Visualiser dans une fenêtre à part set(findobj('tag','LN'),'XData',[x_position x_position])
À priori, cela devrai marcher.
À tout hazard, que retourne
et x_position est-il bien différent de celui de départ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part findobj('tag','LN')
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager