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

33 visualizzazioni (ultimi 30 giorni)
MathWorks Support Team
MathWorks Support Team il 25 Ott 2013
Figure 上に描画されているラインや Patch などのオブジェクトをマウスでドラッグし、移動させる方法を教えてください。

Risposta accettata

MathWorks Support Team
MathWorks Support Team il 18 Gen 2024
Modificato: MathWorks Support Team il 18 Gen 2024
マウスでグラフィックスオブジェクトを移動するには、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インスタンスで以下のコマンドを実行し、リリース固有のドキュメントにアクセスしてください:
web(fullfile(docroot, 'matlab/creating_plots/callbacks-programmed-response-to-user-action.html'))
現在のリリースに関する必要な情報は以下のリンクから検索してください:

Più risposte (0)

Prodotti


Release

R2009b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!