Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

rotate3d

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

構文

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

説明

rotate3d onは、回転モードをオンにし、現在の Figure 内のすべての座標軸で回転を有効にします。

rotate3d offは、回転モードをオフにし、現在の Figure での座標軸の対話型の回転を無効にします。R2018b 以降、回転モードに関係なく一部の回転操作が既定で有効になっています。これらの既定の操作を無効にするには、関数disableDefaultInteractivityを使用します。

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

rotate3d(figure_handle,...)は、現在の Figure ではなく、指定した Figure の回転を有効にします。

rotate3d(axes_handle,...)は、指定された座標軸でのみ回転モードをオンにします。

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

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

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

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

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

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

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

  • UseLegacyExplorationModes'off'(既定の設定) | on/off logical 値 – レガシ モード。'on'または'off'、もしくは数値または logical1(true) または0(false) として指定します。'on'の値はtrueと等価であり、'off'falseと等価です。したがって、このプロパティの値を logical 値として使用できます。値はmatlab.lang.OnOffSwitchState型の on/off logical 値として格納されます。

    このプロパティを'on'に設定すると、従来の Figure のモードの動作と一致するように UI figure の操作モードの動作が変更されます。詳細については、enableLegacyExplorationModesを参照してください。このプロパティを'on'に設定した後に'off'に戻すことはできません。このプロパティは、関数uifigureを使用して、またはMATLAB®Online™で作成された Figure の rotate3d オブジェクトにのみ適用されます。

Rotate3D モード コールバック

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

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

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

    function[res] = myfunction(obj,event_obj)% obj handle to the object that has been clicked on% event_obj手le 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 — 回転前に実行される関数

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

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

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

    Axes

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

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

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

    functionmyfunction(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 ハンドル ベクトルと同じ次元の logical 配列が返されます。この配列は、その Axes オブジェクトで回転操作が利用可能であるかを示します。

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

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

例 1

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

surf(peaks); rotate3don;

例 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 コールバックを作成します。以下のコードを新規ファイルにコピーし、実行して、回転動作を確認してください。

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

例 5

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

functiondemo_mbd2% Listen to rotate eventssurf(peaks); h = rotate3d; h.ActionPreCallback = @myprecallback; h.ActionPostCallback = @mypostcallback; h.Enable ='on';functionmyprecallback(obj,evd) disp('A rotation is about to occur.');functionmypostcallback (obj, evd) newView =圆(evd.Axes.View); msgbox(sprintf('The new view is [%d %d].',newView));

ヒント

回転モードが有効な場合、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 のコールバックを更新する UI を作成する場合は、これを行う前に、どの対話モードがアクティブになっているか、何らかの方法でその UI で追跡する必要があります。

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

代替方法

プロットの 3 次元回転モードを有効/無効にするには、ツール バーの 3 次元回転ツールを使用するか、Figure の[ツール]メニューから[3 次元回転]を選択します。

R2006a より前に導入