AppDesignerで作成したFigureウィンドウの回転、パニング、ズーム、データヒントについて
6 views (last 30 days)
Show older comments
AppDesignerで作成したFigureウィンドウ(座標軸ウィンドウ)にい表示された3Dプロットデータを回転・パニング・ズームをさせたりする場合は、ウィンドウ右上の座標軸ツールバーから操作するかと思いますが、これをマウスで操作できるようにしたいです。コールバック等で上手く再現可能でしょうか?
※例えば、マウス左クリックを維持した状態でマウスを動かすと回転・マウスホイールを動かすとズーム操作、右クリックを維持した状態でマウスを動かすとパニング、いわゆる3DCAD操作と同じような操作感といったようなイメージ
また、AppDesignerで作成したアプリをスタンドアロン化すると、外部データを読み込んでプロットした際のデータヒントが表示されなくなってしまったのですが、対処法等ありますでしょうか?
0 Comments
Answers (1)
交感神経優位なあかべぇ
on 27 Sep 2023
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 Comments
See Also
Categories
Find more on Interaction Control in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!