AppDesigne​rで作成したFigu​reウィンドウの回転​、パニング、ズーム、​データヒントについて

1 view (last 30 days)
伶以 佐々木
伶以 佐々木 on 26 Sep 2023
AppDesignerで作成したFigureウィンドウ(座標軸ウィンドウ)にい表示された3Dプロットデータを回転・パニング・ズームをさせたりする場合は、ウィンドウ右上の座標軸ツールバーから操作するかと思いますが、これをマウスで操作できるようにしたいです。コールバック等で上手く再現可能でしょうか?
※例えば、マウス左クリックを維持した状態でマウスを動かすと回転・マウスホイールを動かすとズーム操作、右クリックを維持した状態でマウスを動かすとパニング、いわゆる3DCAD操作と同じような操作感といったようなイメージ
また、AppDesignerで作成したアプリをスタンドアロン化すると、外部データを読み込んでプロットした際のデータヒントが表示されなくなってしまったのですが、対処法等ありますでしょうか?

Answers (1)

交感神経優位なあかべぇ
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
アプリのスタンドアロンについては、すみませんが、私は分かりません。

Products


Release

R2023a

Community Treasure Hunt

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

Start Hunting!