AppDesignerで作成したFigureウィンドウの回転、パニング、ズーム、データヒントについて
조회 수: 6 (최근 30일)
이전 댓글 표시
AppDesignerで作成したFigureウィンドウ(座標軸ウィンドウ)にい表示された3Dプロットデータを回転・パニング・ズームをさせたりする場合は、ウィンドウ右上の座標軸ツールバーから操作するかと思いますが、これをマウスで操作できるようにしたいです。コールバック等で上手く再現可能でしょうか?
※例えば、マウス左クリックを維持した状態でマウスを動かすと回転・マウスホイールを動かすとズーム操作、右クリックを維持した状態でマウスを動かすとパニング、いわゆる3DCAD操作と同じような操作感といったようなイメージ
また、AppDesignerで作成したアプリをスタンドアロン化すると、外部データを読み込んでプロットした際のデータヒントが表示されなくなってしまったのですが、対処法等ありますでしょうか?
댓글 수: 0
답변 (1개)
交感神経優位なあかべぇ
2023년 9월 27일
ctrlなどのキーを押したときに、パン操作にするなどであれば、axesのInteractionsとuifigureのWindowKeyPressFcnを組み合わせることで、それっぽい操作にできました。
下記サンプルは、デフォルトは回転とズーム操作のみですが、ctrlを押してドラックしたらパン操作に切り替わります。
% テキトーにサンプルデータ表示
hfigure = uifigure();
haxes = axes(hfigure);
data = magic(5);
bar3(haxes,data);
set(haxes, 'Interactions', [rotateInteraction,zoomInteraction]); % デフォルトは、回転とズーム操作
haxes.Toolbar.Visible = false; % ツールバーは使用しないので非表示
hfigure.WindowKeyPressFcn = @(src, event) KeyPressFcn(event, hfigure, haxes); % キーボード入力のコールバック
hfigure.WindowKeyReleaseFcn = @(src,event) KeyReleaseFcn(event, hfigure, haxes); % キーを離した時のコールバック
function KeyPressFcn(event, hfigure, haxes)
if length(event.Modifier) == 1
switch event.Modifier{1}
case 'control'
haxes.Interactions = panInteraction; % ctrlキーを押したとき、パン操作
end
end
hfigure.WindowKeyPressFcn = ''; % 連続してコールバックしないように削除(Axesが動かなくなる)
end
function KeyReleaseFcn(event, hfigure, haxes)
if isempty(event.Modifier)
haxes.Interactions = [rotateInteraction,zoomInteraction]; % 押してるキーがなくなったら、デフォルトに戻す。
hfigure.WindowKeyPressFcn = @(src, event) KeyPressFcn(event, hfigure, haxes);
end
end
アプリのスタンドアロンについては、すみませんが、私は分かりません。
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Interaction Control에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!