このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
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 のCameraTarget
、CameraPosition
、およびCameraUpVector
プロパティを修正します。詳細については、Axes のプロパティを参照してください。
Figure の [ツール] メニューまたは Figure のツール バーから 3 次元回転を有効にできます。
例 3 で示したように、一度rotate3d
モード オブジェクトを作成すると、他の Axes 動作のカスタマイズにも使用できます。また、移動モード オブジェクトのコールバック関数も順次変更できます。
メモ
対話型モードでは Figure コールバックを変更しないでください。モードがアクティブな場合 (移動中、ズーム中の場合など)、Figure のコールバックのいずれかを変更しようとすると警告が表示され、操作は失敗します。この規則の 1 つの例外は、Figure のWindowButtonMotionFcn
コールバックであり、これはモード内から変更できます。したがって、Figure のコールバックを更新する UI を作成する場合は、これを行う前に、どの対話モードがアクティブになっているか、何らかの方法でその UI で追跡する必要があります。
1 つのモード オブジェクトを通じて別の 3 次元回転動作を別のsubplot
Axes に割り当て、関数linkaxes
を使用してそれらをリンクした場合、リンクした Axes 上でのマウス操作による処理は、他の Axes に設定した動作に影響を受けません。
代替方法
プロットの 3 次元回転モードを有効/無効にするには、ツール バーの 3 次元回転ツールを使用するか、Figure の[ツール]メニューから[3 次元回転]を選択します。