2016-03-24 2 views
1

ユーザーがズームをしたか、MathWorks社のMATLABでの図に私はマウスのスクロールを使用する場合、どのように私は検出する方法をmatlabのズームツールを使用する?

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 

をズームアウト場合、私は、私は、コードを実行すると、私はマウスの情報が正しい方向にスクロールした場合に検出し使用した場合、問題がある表示するには、このコードを開発私は上下にスクロールします。しかし、私は情報にズームでズームツールとプレスを使用している場合、比較的方向に正しいですが、私はアップと情報ダウンマウスのスクロールを使用した場合と同じである:

INFO:方向

ANS =

私はズームを行うか、ズームツールまたはscroolマウスのいずれかでズームアウトかどうかを検出するコードが必要です。

答えて

1

は、代わりにこれを試してみてください:

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 

をこれだけのズーム前axes限界を節約し、ズーム後の制限と比較します。彼らが大きくなるとズームアウトし、小さくなるとズームインしました。

+0

これは機能します。ありがとう –

関連する問題