2016-03-24 35 views
1

ich diesen Code entwickelt, um zu sehen, ob der Benutzer in Zoom hat oder in Matlab auf eine Figur AuszoomenWenn ich die Zoom-Werkzeuge von Matlab verwende, erkenne ich, ob ich mit der Maus blättern kann.

function demo3 

MainFig = figure; 
x = sin(theta) + 0.75*rand(1,300); 
y = cos(theta) + 0.75*rand(1,300); 
a = 40; 
hs=scatter(x,y,a,'MarkerEdgeColor',[0 .5 .5],... 
'MarkerFaceColor',[0 .7 .7],... 
'LineWidth',1.5);   
h = zoom; 

set(MainFig, 'WindowScrollWheelFcn', @figure1_WindowScrollWheelFcn); 
set(h, 'ActionPostCallback', @mypostcallback); 

function mypostcallback(h, eventdata) 
disp('INFO: Direction') 
h2 = zoom; 
get(h2,'Direction') 

function figure1_WindowScrollWheelFcn(hObject, eventdata, handles) 
if eventdata.VerticalScrollCount > 0 
    disp ('Scrool Up ') 
else 
    disp ('Scrool Down ') 
end 

Das Problem ist, wenn ich den Code ausführen und ich verwende eine Maus bewegen die Informationen korrekt sind und erkennen, wenn Ich scrolle nach oben oder unten. Aber wenn ich die Zoom-Werkzeuge und drücken Sie in Zoom in den Informationen verwenden, korrekt ist relativ zur Richtung, aber wenn ich die Maus nach oben und unten den Informationen verwende, ist das gleiche:

INFO: Richtung

am =

in

brauche ich einen Code, wenn ich die Maus tun ein Zoom oder Verkleinern entweder mit dem Zoom-Werkzeug oder mit dem scrool erkennt.

Antwort

1

Versuchen Sie stattdessen:

set(h, 'ActionPostCallback', @mypostcallback); 
set(h, 'ActionPreCallback', @myprecallback); 

function myprecallback(h, eventdata) 
set(h, 'UserData', {eventdata.Axes.XLim, eventdata.Axes.YLim}) 

function mypostcallback(h, eventdata) 
old_lims = get(h, 'UserData'); 
old_d = cellfun(@diff, old_lims); 
new_d = [diff(eventdata.Axes.XLim), diff(eventdata.Axes.YLim)]; 
disp('INFO: Direction') 
if all(old_d == new_d) 
    disp('No change'); 
elseif all(old_d-new_d <= 0) 
    disp('Out') 
elseif all(old_d-new_d >= 0) 
    disp('In') 
else 
    disp('oops, did not expect this!') 
end 

Das spart die axes Grenzen kurz vor dem Zoom und vergleicht sie mit den Grenzen nach dem Zoom. Wenn sie größer sind, haben wir gezoomt, wenn sie kleiner sind, haben wir gezoomt.

+0

Es funktioniert. Vielen Dank –