次のグローバル変数とメソッドにより、3ds Max のビューポートにアクセスできます。
また、3ds Max 2013 で導入された ViewPanelManager コア インタフェースは、ビュー パネル管理機能、およびスプリッタ バーの配置とビューポートの設定をコントロールすることに関連のあるメソッドを各拡張のタイプに公開します。
この 3ds Max システム グローバル変数には、現在のビューポート レイアウト内の 3D ビューポートの数が含まれています。
この変数には、ビューポート レイアウト内のトラック ビュー、スケマティク ビュー、MAXScript リスナーなどの 2D ビューは反映されません。
たとえば、 viewport.getLayout() が #layout_4 を返し、この変数の値が 2 の場合、2 つのビューポートに 2D ビューが含まれていることがわかります。
3ds Max 2013 の前までは、MAXScript で 2D ビューポートにアクセスすることはできませんでした。3ds Max 2013 以降のビューポートは、特にトラック ビュー、スケマティク ビュー、シーン エクスプローラなどのいくつかの拡張タイプに設定することができます。詳細については、 ViewPanelManager.SetExtendedView() メソッドを参照してください。
この 3ds Max システム グローバル変数により、アクティブ ビューポートのインデックスを取得および設定できます。
現在のアクティブ ビューポートを 2D ビューに変更すると、この変数の値は 0 になります。
viewport.activeViewportID
<integer>viewport.numViewEx <numViews>
<integer>viewport.activeViewportEx <viewportIndex>
<view_layout_name>viewport.getLayout()
ビューポート レイアウトを返します。可能なレイアウト名のリストについては、以下を参照してください。
ビューポート レイアウトを設定します。このレイアウトでは、<view_layout_name> によってりビューポート レイアウト設定を指定します。
レイアウトの設定の際に各ビューポート内に表示されるビューは、[カスタマイズ](Customize) > [ビューポート設定](Viewport Configuration) > [レイアウト](Layout)で行った設定セットに基づきます。
次に有効な <view_layout_name> 値の構文を示します。
# is the total number of viewports. V = vertical split H = horizontal split L/R = left/right placement T/B = top/bottom placement
有効な <view_layout_name> 値は次のとおりです。
3ds Max 2013 以降、スプリッタ バーの実際の場所は MAXScript を使ってコントロールできます。詳細については、 ViewPanelManager.SetSplitterBarPos() メソッドを参照してください。
<view_type_name>viewport.getType [ index:<integer> ]
このメソッドは、アクティブ ビューポートのタイプを返します。
3ds Max 2009 以降でオプションの index: キーワード引数が指定されている場合は、インデックス付きビューポートのタイプを返します。
このインデックス番号は、 viewport.activeViewport で使用されているインデックス番号に対応します。
このメソッドは、アクティブ ビューポートのビュー タイプを設定します。
ビュー タイプが設定された場合は True を、設定されなかった場合は False を返します。
有効な <view_type_name> 値は次のとおりです。
#view_top | 上部 (Top) |
#view_bottom | 下面 (Bottom) |
#view_right | Right |
#view_left | Left |
#view_front | 前面 (Front) |
#view_back | 後面 (Back) |
#view_persp_user | パース ビュー (Perspective) |
#view_iso_user | ユーザ |
#view_camera | カメラ |
#view_spot | ライト (Light) |
#view_shape | シェイプ |
#view_grid | グリッド |
現在のビューポートが拡張ビューポート(例: スケマティク ビュー、アセット マネージャ、または MAXScript リスナー ビューポート)の場合、 getType() は undefined を返します。 setType() によってカメラが指定されており、カメラが 1 つだけ選択されている条件が満たされていない場合は、使用するカメラを選択するためのダイアログ ボックスが表示されます。カメラがない場合は、「シーンにカメラがありません」という警告が表示されます。
viewport.getType は #view_none の戻り値も取得できます。いずれのビューポートもフォーカスを保持しない場合、False が返されます。
3ds Max 2013 以降のビューポートは、トラック ビュー、スケマティク ビュー、またはシーン エクスプローラなどのいくつかの拡張タイプに設定することができます。詳細については、 ViewPanelManager.SetExtendedView() メソッドを参照してください。
3ds Max 2009 以降 では、インデックスで指定されたビューポートの ID を返します。ID は設定できません。
ビューポートを最大化すると、インデックスは必ず 1 になり、その ID は最大化されないときのインデックスに対応します。たとえば、インデックスが 4 の右下のビューポートを最大化すると、インデックスは 1 になりますが、ID は 4 のままになります。
このメソッドは、3ds Max のすべてのビューポートをリセットし、既定のレイアウトに戻します。
<node>getActiveCamera()
アクティブ ビューに関連付けられたカメラ ノードを返します。ビューがカメラ ビューではない場合は、 undefined を返します。
アクティブ ビューに関連付けられたカメラ ノードを返します。ビューがカメラ ビューではない場合は、 undefined を返します。
3ds Max 2009 以降 では、オプションの index: キーワードが指定されている場合、アクティブ ビューポートのカメラの代わりにインデックス付きビューポートのカメラを返します。
このインデックス番号は、 viewport.activeViewport で使用されているインデックス番号に対応します。
指定されたカメラを使って、アクティブ ビューポートをカメラ ビューに設定します。
また、フリー、ターゲット、またはダイレクト ライトを使用して、アクティブ ビューをライト ビューに設定することもできます。
ビューポート カメラとして使用可能なカメラとライトの場合は True を返します(言い換えると、オブジェクトは viewport.setCamera() の有効な引数です)。
このメソッドにより、ビューポートでのグリッド可視性を設定します。
<int> はビューポート インデックス、<bool> は新しいグリッド可視性状態です。
#all を指定すると、すべてのビューポートでのグリッド表示は、指定した状態に設定されます。
このメソッドは、指定したビューポートにグリッドが表示される場合には True を、表示されない場合は False を返します。
このメソッドは、アクティブ ビューポートがワイヤ モードの場合に True を返します。
このプロパティを True に設定すると、アクティブ ビューポートにバックグラウンド イメージが表示されます。False に設定すると、バックグラウンド イメージは表示されません。
<boolean>viewport.EnableSolidBackgroundColorMode <bool>
このメソッドにより、ソリッド バックグラウンド カラー表示とグラデーション バックグラウンド カラー表示をコントロールします。
ブール演算引数が True の場合、現在のビューポートのバックグラウンドはソリッド カラーに設定されます (言い換えると、グラデーションは無効にされます)。
ブール演算引数が False の場合、現在のビューポートのバックグラウンドにグラデーション カラーが適用されます。
成功した場合は true を、失敗した場合は false を返します。
<boolean>viewport.IsSolidBackgroundColorMode()
このメソッドは、現在のビューポートがソリッド バックグラウンド カラー モードの場合には True を、グラデーション モードの場合は False を返します。
戻り値は、 #smoothhighlights 、 #wireFrame 、 #smooth 、 #facethighlights 、 #facet 、 #flat 、 #litwireframe 、 #Box 、 #hiddenline のいずれかになります。
現在のビューポートでエッジ面が有効になっている場合は true、それ以外の場合は false を返します。
有効な引数の値は、 #smoothhighlights 、 #wireFrame 、 #smooth 、 #facethighlights 、 #facet 、 #flat 、 #litwireframe 、 #Box 、 #hiddenline です。
現在のビューポートで[エッジ面](Edged Faces)表示が有効になっている場合は True、それ以外の場合は False を返します。
ブール値の引数によってエッジ面の表示のオンとオフを切り替えます。
現在のビューポートの透明度のレベルを返します。有効な値は次のとおりです。
現在のビューポートの透明度のレベルを設定します。有効な値については、上記を参照してください。
現在のビューポートが有効になっている場合は True、無効になっている場合は False を返します。
現在のビューポートがパース ビューポート(パースまたは正投影以外のカメラ)である場合は True、正投影ビュー(トップ、ボトム、フロント、バック、レフト、ライト、ユーザ、正投影のカメラなど)である場合は False を返します。
現在のビューポートの[統計を表示](Show Statistics)オーバレイで計算された、最後のフレーム レートの値をフレーム/秒単位で返します。ビューポートの[統計を表示](Show Statistics)がオンに設定されていない場合には、返される値はビューポートの現在のフレーム レートを表しません。
3ds Max 2008 以降では、[最適表示](Adaptive Degradation)がオンの場合、報告される値は実際のフレーム レートではなくターゲット フレーム レートになります。
正投影以外(パースおよびアイソメトリック ユーザ ビュー)のビューポートのアクティブ ビュー画面とワールド間の変換行列を取得または設定します。これはアフィン カメラまたはビューポート行列です。 setTM はパース ビューポートでのみ実行され、ビュー変換行列が正しく設定された場合は True を返し、それ以外の場合は False を返します。
次の関数は、アクティブ ビューポートの「目」の位置と方向を示すレイ値を返します。ビューポートは、正投影以外のビューポートでなければなりません。
アクティブ ビューポートの視野を返します。ビューポートが正投影ビューポートの場合は、57.2958(1 ラジアン)が返されます。
アクティブ ビューポートの視野を返します。 getViewFOV() と同じ。
アクティブ ビューポートの視野を、指定された角度(単位: 度)に設定します。
成功した場合は True を、現在のビューポートがパースペクティブまたはカメラ ビューではない場合は False を返します。
パース ビューの場合は、アクティブ ビューポートの焦点距離を返し、それ以外の場合は undefined を返します。
パース ビューでのみ動作します。 カメラ ビューでは動作しません。
成功した場合は True を、現在のビューポートがパースペクティブまたはカメラ ビューではない場合は False を返します。
最初の引数を X、2 番目の引数を Y 方向のピクセル単位のデルタ値として使用して、現在のビューポートをパンします。
オブジェクトベースのタイプ(カメラ、ライトなど)を除くすべてのビューポート タイプで動作します。
成功した場合は True を、ビューポートがオブジェクトベースの場合は False を返します。
渡された浮動小数点値をズーム係数として使用して、現在のビューポートのズームを実行します(例: 2.0 の場合には 1/2 にズーム縮小し、0.5 の場合には 2 倍にズーム拡大します)。
オブジェクトベースのタイプ(カメラ、ライトなど)を除くすべてのビューポート タイプで動作します。
成功した場合は True を、ビューがオブジェクトベースの場合は False を返します。
アクティブなビューポートをズームします。3ds Max UI のインタラクティブ ズーム ツールとまったく同等です。
このメソッドは、パース ビューでのみ動作します。カメラ ビューでは動作しません。3ds Max UI で、ユーザが正投影ビューまたはアイソメトリック ユーザ ビューをズーム拡大すると、ビューポート タイプに対して内部的に切り替えが実行され、代わりに ViewExp::Zoom( viewport.zoom() )が呼び出されます。
成功した場合は True を、ビューポートがパースペクティブ ビューではない場合は False を返します。
渡されたクォータニオン値を回転の値、Point3 値を回転の中心点として使用し、現在のビューポートの回転を実行します。
オブジェクトベースのタイプ(カメラ、ライトなど)を除くすべてのビューポート タイプで動作します。
成功した場合は True を、ビューがオブジェクトベースの場合は False を返します。
viewport.setCanvasNavigationMode <boolean>
アクティブ ビューポートのキャンバス ナビゲーション モードをオンまたはオフにします。
ビューポートが 2D キャンバス ナビゲーション モードの場合、ユーザはビューポート内で 2D パンおよびズームのみを実行することができ、他のすべてのビューポート ナビゲーション コマンドは拒否されます。
<boolean>viewport.isCanvasNavigationMode()
ビューポートがキャンバス ナビゲーション モードの場合は True を返し、そうでなければ False を返します。
ビューポートが 2D キャンバス ナビゲーション モードの場合、ユーザはビューポート内で 2D パンおよびズームのみを実行することができ、他のすべてのビューポート ナビゲーション コマンドは拒否されます。
<bitmap>viewport.getViewportDib index:<int> viewPanelIndex:<int> captureAlpha:<bool> gammaCorrect:<bool>
このメソッドは、アクティブ ビューポートのグラフィックス ウィンドウのイメージをビットマップ値で返します。
このメソッドと、 別のトピックで説明されている gw.getViewportDib() との相違点は、このメソッドに maxops.displayActiveCameraViewWithMultiPassEffect() を使用した結果が含まれることです。このため、このメソッドは、被写界深度(DOF)またはモーション ブラーのプレビューを含むビューポート イメージを生成するために使用できます。
3ds Max 2008 以降で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。
次のオプションは、3ds Max 2015 で追加されたものです。
index: または viewPanelIndex: のいずれも指定されない場合、現在アクティブのビュ-ポ-トを返します。
index: のみが指定されている場合、現在の viewPanel パネルのインデックスで指定された HWND を返します。
viewPanelIndex: が指定され、 index: が指定されない場合、インデックスで指定された viewPanel のアクティブなビューポートの HWND を返します。
viewPanelIndex : および index: の両方が指定されない場合、インデックス指定された viewPanel のインデックス指定されたビューポートの HWND を返します。
captureAlpha : オプション キーワード引数が指定され、True に設定されている場合、ビューポートアルファもキャプチャされます。指定されないまたは False に設定された場合、返されたイメージには、アルファおよび RGB チャンネルのみが含まれます(古い動作)。
gammaCorrect: オプション キーワード引数が指定されないまたは True に設定されている場合、ガンマ補正が返されたビットマップ値に対して実行されます。False に設定した場合は、ガンマ補正は実行されません。
windows.snapshot() (ここで説明) も参照してください。
<IntegerPtr>viewport.getHWnd index:<int> viewPanelIndex:<int>
指定されたビューポートまたは viewPanel の HWND ウィンドウ ハンドルを返します。
index: または viewPanelIndex: のいずれも指定されない場合、現在アクティブのビュ-ポ-トを返します。
index: のみが指定されている場合、現在の viewPanel パネルのインデックスで指定された HWND を返します。
viewPanelIndex: が指定され、 index: が指定されない場合、インデックスで指定された viewPanel のアクティブなビューポートの HWND を返します。
viewPanelIndex : および index: の両方が指定されない場合、インデックス指定された viewPanel のインデックス指定されたビューポートの HWND を返します。
すべてのビューポートまたは現在のビューポートを境界で囲まれた領域にズームします。
1 番目の引数が True として渡された場合、すべてのビューポートがズームされます。False の場合は、選択されたビューポートだけがズームされます。
2 番目と 3 番目の引数は、ズームする、境界で囲まれた領域を定義します。
アクティブ ビュー サイズをピクセル数による point2 で返します。
アクティブ ビューのスケール係数を返し、ポイントのビュー スペース原点からの距離にワールド空間単位で幅を指定します。
アクティブ ビューのスケール係数を返し、ポイントのビュー スペース原点からの距離にワールド空間単位で幅を指定します。 getScreenScaleFactor() と同じ。
現在のアクティブ ビューにあり、ビューポート面に垂直なビューポート ピクセル座標を通過する、ワールド空間の Ray 値を返します。
ビュー座標空間内の 3D 点を返します。アクティブ ビューポート画面(ビューポート ピクセル座標)のポイント、およびビュー座標の深さにより、このメソッドはこのポイントをビュー座標にマップします。 <viewport_size_point2> が指定されている場合は、実際のビューポート サイズの代わりに指定されたビューポート サイズが使用されます。
現在アクティブなビューのビューポート ピクセル座標をワールド座標の作図平面にマップします。<viewport_size_point2> が指定されている場合は、実際のビューポート サイズの代わりに指定されたビューポート サイズが使用されます。
このメソッドから返される値は、ビューポートのズームを元のサイズに戻すスケール係数として使用できます。たとえば、ライト、カメラ、テープ ヘルパー オブジェクトは、ビューポートがズーム拡大および縮小するときシーン内のノードを一定のサイズに保つために、この係数を使用します。
この値は、[ビューポート設定](Viewport Preferences)ダイアログ ボックスの[非スケーリング オブジェクトのサイズ](Non-Scaling Object Size)編集ボックスの影響を受けるので、ある程度の制御が可能です。
指定した画面座標に基づいて、現在の作図平面上のワールド空間内のポイントを返します。
このメソッドは、画面の開始点(<start_pixel_coord_point2>)、画面の終了点(<end_pixel_coord_point2>)、基点(<base_point3>)、および方向ベクトル(<dir_point3>)により、ワールド空間内の長さを返します。たとえば、円柱を作成する場合、マウスをクリックして円柱の中心点(基点)を定義し、半径をドラッグします。続いて円柱の高さをドラッグします。このメソッドは、初期基点、方向ベクトル(Z 軸)、マウスの開始点、およびユーザがインタラクティブに調整している現在のポイントに基づいて、途中および最終の円柱の高さを返す場合に使用します。
ワールド空間内のポイントに対するワールド空間内のビューポート画面の幅係数を返します。
作図平面上の所定のポイントに対応するワールド空間のポイントを返します。たとえば、 gw.getPointOnCP() を使用して画面上の座標を作図平面上のポイントに変換した場合、次にこのメソッドを呼び出して作図平面上のポイントをワールド空間のポイントに変換できます。
2 次元画面座標を指定すると、このメソッドは、現在のスナップ設定およびオプションの snapType: パラメータに基づいて、現在の作図平面またはオプションの snapPlane の 3D 点を返します。
有効な <snapType_name> 値は次のとおりです。
#inPlane - 作図平面上のポイントだけにスナップします。
#unSelObjs - スナップ ポイントを考慮するとき、選択されているノードを無視します。
#selObjs - スナップ ポイントを考慮するとき、選択されていないノードを無視します。
#unSelSubobj - スナップ ポイントを考慮するとき、選択されているサブオブジェクト ジオメトリを無視します。
#selSubobj - スナップ ポイントを考慮するとき、選択されていないサブオブジェクト ジオメトリを無視します。
#force3d - ユーザ設定を無視し、3D 点に強制的にスナップします。
3ds Max 8 以降で使用可能なオプションの snapPlane: 引数は、XY 平面をスナッピング平面にマップする変換の matrix3 値です。指定した matrix3 値が単位行列(Matrix3 1)に等しい場合、スナッピング平面は XY 作図平面と同一になります。
指定されたビューポートの引き伸ばし矩形を設定します。引き伸ばし矩形は、現在のレンダリング出力サイズと同じアスペクトに設定する必要があります。トップ、ボトム、およびレフト コンポーネントの値は Box2 値の引数から得られますが、ライト コンポーネント値はアスペクトを強制的に適合するように再計算されます。
インタフェース: EditRenderRegion を使用すると手動の領域編集ギズモをコントロールできます(3ds Max 2009 以降で使用可能)。