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