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

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

回答(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
アプリのスタンドアロンについては、すみませんが、私は分かりません。

类别

Help CenterFile Exchange 中查找有关 対話型コントロールとコールバック 的更多信息

产品


版本

R2023a

Community Treasure Hunt

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

Start Hunting!