ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

rotate3d

マウスを使用した 3 次元の視点の回転

構文

rotate3d on
rotate3d off
rotate3d
rotate3d(figure_handle,...)
rotate3d(axes_handle,...)
h = rotate3d(figure_handle)

説明

rotate3d on は、現在の Figure 内のすべての Axes に対して、マウスを使用した回転を有効にします。

rotate3d off は、現在の Figure での Axes の対話型の回転を無効にします。

rotate3d は、現在の Figure での Axes の対話型の回転を切り替えます。

rotate3d(figure_handle,...) は、現在の Figure の代わりに指定した Figure の回転を使用可能にします。

rotate3d(axes_handle,...) は、指定した Axes のみ回転を有効にします。

h = rotate3d(figure_handle) は、Figure のモード動作をカスタマイズするために、Figure の figure_handle の rotate3d モード オブジェクトを返します。

回転モード オブジェクトの使用

回転モード オブジェクトには次のプロパティがあります。

  • FigureHandle <handle> — 関連する Figure ハンドル。これは読み取り専用のプロパティは設定できません。

  • Enable 'on'|'off' — この Figure のモードが Figure 上で現在有効かどうかを指定します。

  • RotateStyle 'orbit'|'box' — 回転のメソッドを設定します。

    'orbit' は Axes 全体を回転し、'box' は Axes のプロット ボックスの外枠を回転します。

Rotate3D モード コールバック

rotate3d モード操作のために次のコールバックをプログラムできます。

  • ButtonDownFilter <function_handle>ButtonDown イベントをインターセプトする関数

    プログラマの定義により、アプリケーションは返すコールバックによって、回転操作を取り消せます。入力の関数ハンドルは、2 つの暗黙の引数で関数を参照する必要があります (ハンドルのコールバックと同様)。

    function [res] = myfunction(obj,event_obj)
    % obj          handle to the object that has been clicked on
    % event_obj    handle to event data object (empty in this release)
    % res [output] logical flag to determine whether the rotate
    %              operation should take place or the 'ButtonDownFcn'
    %              property of the object should take precedence
    
  • ActionPreCallback <function_handle> — 回転前に実行される関数

    このコールバックを回転操作を開始するときに受け取るよう設定します。入力の関数ハンドルは、2 つの暗黙の引数で関数を参照する必要があります (Handle Graphics® オブジェクトのコールバックと同様)。

    function myfunction(obj,event_obj)
    % obj         handle to the figure that has been clicked on
    % event_obj   object containing struct of event data
    

    このイベント データには、以下のフィールドがあります。

    Axes

    Axes のハンドルは、移動されます。

  • ActionPostCallback <function_handle> — 回転後に実行される関数

    このコールバックを回転操作を終了したときに受け取るよう設定します。入力の関数ハンドルは、2 つの暗黙の引数で関数を参照する必要があります (Handle Graphics オブジェクトのコールバックと同様)。

    function myfunction(obj,event_obj)
    % obj         handle to the figure that has been clicked on
    % event_obj   object containing struct of event data (same as the
    %             event data of the 'ActionPreCallback' callback)
    
    

Rotate3D モード ユーティリティ関数

移動モードにおける次の関数は、そのプロパティのいくつかをクエリして設定します。

  • flags = isAllowAxesRotate(h,axes) — Axes を回転する権限をクエリする関数

    関数 isAllowAxesRotate の入力として、rotate3d オブジェクト h と Axes ハンドルのベクトル axes を呼び出すと、Axes ハンドル ベクトルと同じ次元の論理配列が返されます。この配列は、その Axes オブジェクトで回転操作が利用可能であるかを示します。

  • setAllowAxesRotate(h,axes,flag) — Axes の移動権限を設定する関数

    関数 setAllowAxesRotate の入力として、rotate3d オブジェクト h, Axes ハンドル ベクトル axes, 論理スカラー flag を呼び出すと、この Axes オブジェクト上で回転操作を有効/無効のいずれかに設定します。

例 1

マウスを使用してプロットを回転します。

surf(peaks);
rotate3d on;

例 2

"プロットボックス" の回転スタイルを使用して、プロットを回転します。

surf(peaks);
h = rotate3d;
h.RotateStyle = 'box';
h.Enable = 'on';

例 3

サブプロットとして 2 つの Axes を作成し、片方は回転できないように設定します。

ax1 = subplot(1,2,1);
surf(peaks);
h = rotate3d;
h.Enable = 'on';
ax2 = subplot(1,2,2);
surf(membrane);
setAllowAxesRotate(h,ax2,false); % disable rotating for second plot

例 4

トリガーとして回転モード オブジェクトの buttonDown コールバックを作成します。以下のコードを新規ファイルにコピーし、実行して、回転動作を確認してください。

function demo_mbd
% Allow a line to have its own 'ButtonDownFcn' callback
hLine = plot(rand(1,10),'ButtonDownFcn','disp(''This executes'')');
hLine.Tag = 'DoNotIgnore';
h = rotate3d;
h,ButtonDownFilter = @mycallback;
h.Enable = 'on';
% mouse-click on the line
function [flag] = mycallback(obj,event_obj)
% If the tag of the object is 'DoNotIgnore', then return true
objTag = obj.Tag;
if strcmpi(objTag,'DoNotIgnore')
   flag = true;
else
   flag = false;
end

例 5

トリガーとして、rotate3D モード オブジェクトの pre-/post-buttonDown イベントのコールバックを作成します。以下のコードを新規ファイルにコピーし、実行して、回転動作を確認してください。

function demo_mbd2
% Listen to rotate events
surf(peaks);
h = rotate3d;
h.ActionPreCallback = @myprecallback;
h.ActionPostCallback = @mypostcallback;
h.Enable = 'on';

function myprecallback(obj,evd)
disp('A rotation is about to occur.');

function mypostcallback(obj,evd)
newView = round(evd.Axes.View);
msgbox(sprintf('The new view is [%d %d].',newView));

代替方法

Figure ツール バーでプロットの 3 次元回転モードを有効/無効にするには、3 次元回転ツール を使用するか、または Figure の [ツール] メニューから [3 次元回転] を選択します。詳細は、「3 次元での回転」を参照してください。

詳細

すべて折りたたむ

ヒント

回転モードが有効な場合、rotate3d はマウスが操作されている間、Axes と それが含まれるオブジェクトの回転を継続します。現在の axes の方位角と高度を示す数値情報は、回転中、Figure の左下隅に現れます。マウス ボタンを離すと、動画ボックスと数値情報は消去されます。これは、関数 camorbit とは異なります。rotate3d ツールは Axes の View プロパティを修正しますが、関数 camorbit は縦横比を固定し、Axes の CameraTargetCameraPosition、および CameraUpVector プロパティを修正します。詳細は、Axes のプロパティ を参照してください。

Figure の [ツール] メニューまたは Figure のツール バーから 3 次元回転を有効にできます。

例 3 で示したように、一度 rotate3d モード オブジェクトを作成すると、他の Axes 動作のカスタマイズにも使用できます。また、移動モード オブジェクトのコールバック関数も順次変更できます。

    メモ:   対話型モードでは Figure コールバックを変更しないでください。モードがアクティブな場合 (移動中、ズーム中の場合など)、Figure のコールバックのいずれかを変更しようとすると警告が表示され、操作は失敗します。この規則の 1 つの例外は、Figure の WindowButtonMotionFcn コールバックであり、これはモード内から変更できます。したがって、Figure のコールバックを更新する GUI を作成する場合は、その前に、GUI でどの対話型モードがアクティブかをある程度追跡する必要があります。

1 つのモード オブジェクトを通じて別の 3 次元回転動作を別の subplot Axes に割り当て、関数 linkaxes を使用してそれらをリンクした場合、リンクした Axes 上でのマウス操作による処理は、他の Axes に設定した動作に影響を受けません。

参考

| | | |

この情報は役に立ちましたか?