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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
| function curs_vert
% Ouverture d'une fenetre
fig = figure('Doublebuffer','On');
% Un tracé
th =linspace(0,4*pi,200);
fth = sin(th);
plot(th,fth,'r');
% Récuperation des limites du graphique
a = xlim;
b = ylim;
% Ajout des deux curseurs et prise en compte du clic souris
% avec la propriété ButtonDownFcn
hCurA = line([0.1*a(2) 0.1*a(2)],b,'Linewidth',1,...
'Color','Black','ButtonDownFcn',@clickFcn);
hCurB = line([0.2*a(2) 0.2*a(2)],b,'Linewidth',1,...
'Color','Black','ButtonDownFcn',@clickFcn);
% Curseurs invisibles au lancement
set(hCurA,'Visible','Off');
set(hCurB,'Visible','Off');
% Creation des pushbutton
pushbuttonCurseurOn = uicontrol(fig,...
'style','pushbutton',...
'units','normalized',...
'position',[0.0285 0.936 0.175 0.0458],...
'string','Curseur on',...
'tag','pushCurseurOn',...
'callback',@CurseurOn,...
'backgroundcolor',get(fig,'color'));
pushbuttonCurseurOff = uicontrol(fig,...
'style','pushbutton',...
'units','normalized',...
'position',[0.285 0.936 0.175 0.0458],...
'string','Curseur off',...
'tag','pushCurseurOff',...
'callback',@CurseurOff,...
'backgroundcolor',get(fig,'color'));
% Creation des editbox
deltaXtext = uicontrol(fig,...
'style','text',...
'units','normalized',...
'position',[0.585 0.936 0.175 0.0458],...
'string','0',...
'backgroundcolor',get(fig,'color'));
deltaYtext = uicontrol(fig,...
'style','text',...
'units','normalized',...
'position',[0.785 0.936 0.175 0.0458],...
'string','0',...
'backgroundcolor',get(fig,'color'));
% Creation des textbox
hTextA = text(NaN,NaN,'',...
'Tag','hTextA',...
'BackgroundColor','Yellow',...
'Color',get(hCurA,'Color'));
hTextB = text(NaN,NaN,'',...
'Tag','hTextB',...
'BackgroundColor','Yellow',...
'Color',get(hCurB,'Color'));
% Blocage des limites du graphique
set(gca,'Xlimmode','Manu');
% Coordonnees yA et yB vides au demarrage
yA = [];
yB = [];
% Definition des fonctions
function clickFcn(obj,event)
% Fonction a exécuter quand on clique sur une barre
% OBJ : identifiant de la barre sélectionnée
% WindowButtonMotionFcn : fonction à exécuter au drag souris
% WindowButtonUpFcn : fonction à exécuter au relachmt souris
set(fig,'WindowButtonMotionFcn',{@dragFcn,obj}, ...
'WindowButtonUpFcn',@unclickFcn);
end
function dragFcn(obj,event,h)
% Fonction à exécuter quand on déplace la souris
% OBJ : identifiant de la fenetre courante
% H : identifiant de la barre sélectionnée
% Modification du pointeur de la souris (juste esthétique)
set(fig,'Pointer','Fleur');
% Récupération des coordonnées du pointeur de la souris
pt = get(gca,'CurrentPoint');
% Modification de la position en x de la barre sélectionnée
set(h,'Xdata',[pt(1),pt(1)]);
% Maj textbox avec position curseur A
xdataA = get(hCurA,'XData');
% Maj textbox avec position curseur B
xdataB = get(hCurB,'XData');
% Interpolation y au pointeur souris
y = interp1(th,fth,pt(1));
% Affichage coordonnees dans textbox curseur A
if h == hCurA
set(hTextA,'Position',[xdataA(2) y],...
'String',sprintf('(%0.2f, %0.2f)',xdataA(2),y));
TextA = get(hTextA,'String');
[~,yA] = strread(TextA,'%s %s','delimiter',', ');
yA = str2double(strrep(yA{1},')',''));
% Affichage coordonnees dans textbox curseur B
elseif h == hCurB
set(hTextB,'Position',[xdataB(2) y],...
'String',sprintf('(%0.2f, %0.2f)',xdataB(2),y));
TextB = get(hTextB,'String');
[~,yB] = strread(TextB,'%s %s','delimiter',', ');
yB = str2double(strrep(yB{1},')',''));
end
% Affichage des differences entre coordonnees
deltaX = abs(xdataB(2) - xdataA(2));
set(deltaXtext,'String',sprintf('%0.2f',deltaX));
if ~isempty(yA) && ~isempty(yB)
deltaY = abs(yB - yA);
set(deltaYtext,'String',sprintf('%0.2f',deltaY));
end
end
function unclickFcn(obj,event)
% Fonction à exécuter quand on relâche la souris
set(fig,'WindowButtonMotionFcn',[],'Pointer','Arrow');
end
function CurseurOn(obj,event)
% Callback pushbutton pour affichage et reset curseurs
set(hCurA,'XData',[0.1*a(2) 0.1*a(2)],...
'Visible','On');
set(hCurB,'XData',[0.2*a(2) 0.2*a(2)],...
'Visible','On');
set(hTextA,'Position',[NaN NaN],...
'Visible','On');
set(hTextB,'Position',[NaN NaN],...
'Visible','On');
end
function CurseurOff(obj,event,h)
% Callback pushbutton pour suppression curseurs
set(hCurA,'Visible','Off');
set(hCurB,'Visible','Off');
set(hTextA,'Visible','Off');
set(hTextB,'Visible','Off');
end
end |
Partager