MATLAB Answers

0

マウスの動きに合わせ​てグラフィックスオブ​ジェクトを移動させる​ことはできますか?

Figure 上に描画されているラインや Patch などのオブジェクトをマウスでドラッグし、移動させる方法を教えてください。

Products


Release

R2009b

1 Answer

Answer by MathWorks Support Team on 6 Sep 2019
Edited by MathWorks Support Team on 6 Sep 2019
 Accepted Answer

マウスでグラフィックスオブジェクトを移動するには、Figure オブジェクトの以下のコールバック関数を使用します。
WindowButtonDownFcn
Figure上でマウスを押した時に実行されるコールバック関数
WindowButtonMotionFcn
Figure 上でマウスを動かした時に実行されるコールバック関数
WindowButtonUpFcn
Figure 上でマウスを放した時に実行されるコールバック関数
これらの各コールバック関数を次のように使用します。
1. マウスが押されたら、WindowsButtonMotionFcn を設定する(WindowButtonDownFcn のコールバック)
2. マウスの移動中は、マウスの現在値を取得し、オブジェクトの位置を逐次変更する(WindowButtonMotionFcn のコールバック)
3. マウスを放したら、WindowsButtonMotionFcn を削除する(WindowButtonUpnFcn のコールバック)
以下のプログラムは、Patch オブジェクトをマウスのドラッグにより移動する例です。
function test1
% Patch オブジェクトをマウスで動かすサンプル例
% Figure に各種コールバックを設定
figure('WindowButtonDownFcn',@myBDCallback,'WindowButtonUpFcn',@myBUCallback)
axis([-1,2,-1,2,-1,2]);
xlabel('x'), ylabel('y'), view(3);
h = patch([-1,2,2,-1],[-1,-1,2,2],[1,1,1,1],'b'); % 面を表示
function myBDCallback(src,eventdata)
% WindowButtonDownFcn
% マウスを押したときのコールバック関数
set(src,'WindowButtonMotionFcn',@myBMCallback);
function myBMCallback(src,evnt)
% WindowButtonMotionFcn
% マウスを動かしたときのコールバック関数
Cp = get(gca,'CurrentPoint'); % 座標軸上のマウスの位置を取得
Zf = Cp(1,3); % 前面側の Z 軸上の位置
Zb = Cp(2,3); % 背面側の Z 軸上の位置
Zp = Zf+(Zb-Zf)/2; % Z軸上のマウス位置
set(h,'Zdata',repmat(Zp,4,1)) % Patch の高さを変更
drawnow % 強制描画
end
end
function myBUCallback(src,evantdata)
% WindowButtonUpFcn
% マウスを放したときのコールバック関数
set(src,'WindowButtonMotionFcn','');
end
end
各種コールバックの詳細については、以下の URL をご覧下さい。
・MATLAB ヘルプドキュメント:関数ハンドルコールバック

  0 Comments

Sign in to comment.