필터 지우기
필터 지우기

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

조회 수: 43 (최근 30일)
MathWorks Support Team
MathWorks Support Team 2013년 10월 25일
편집: MathWorks Support Team 2024년 1월 18일
Figure 上に描画されているラインや Patch などのオブジェクトをマウスでドラッグし、移動させる方法を教えてください。

채택된 답변

MathWorks Support Team
MathWorks Support Team 2024년 1월 18일
편집: MathWorks Support Team 2024년 1월 18일
マウスでグラフィックスオブジェクトを移動するには、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'))
現在のリリースに関する必要な情報は以下のリンクから検索してください:

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 対話型コントロールとコールバック에 대해 자세히 알아보기

제품


릴리스

R2009b

Community Treasure Hunt

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

Start Hunting!