アクティブ ビューポート情報、タイプ、および変換へのアクセス
 
 
 

3ds Max

viewport.activeViewport 	 

アクティブ ビューポートのインデックスを取得および設定します。現在のアクティブ ビューポートを 2D ビューに変更すると、この変数の値は 0 になります。

   

viewport.numViews   

Contains the number of 3D viewports in the current viewport layout. この変数は読み取り専用です。この変数は、ビューポート レイアウト内のトラック ビュー、スケマティク ビュー、リスナーなどの 2D ビューには影響しません。たとえば、 viewport.getLayout() #layout_4 を返し、この変数の値が 2 の場合、2 つのビューポートに 2D ビューが含まれていることがわかります。現時点では、MAXScript で 2D ビューのビューポートにアクセスすることはできません。

ビューポート レイアウト

viewport.getLayout()   
viewport.setLayout<view_layout_name> 

ビューポート レイアウトを取得または設定し、<view_layout_name> にはビューポート レイアウト設定を指定します。レイアウトの設定の際に各ビューポート内に表示されるビューは、[カスタマイズ]/[ビューポート設定]/[レイアウト]で行った設定セットに基づきます。

次に有効な <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> 値は次のとおりです。

#layout_1  -- 1 つのビューポート 
#layout_2v  -- 2 つのビューポート、同じサイズの垂直分割 
#layout_2h  -- 2 つのビューポート、同じサイズの水平分割 
#layout_2ht  -- 2 つのビューポート、上が小さめの水平分割 
#layout_2hb  -- 2 つのビューポート、上が大きめの水平分割 
#layout_3vl  -- 3 つのビューポート、左に 2 つ、右に 1 つ 
#layout_3vr  -- 3 つのビューポート、左に 1 つ、右に 2 つ 
#layout_3ht  -- 3 つのビューポート、上に 2 つ、下に 1 つ 
#layout_3hb  -- 3 つのビューポート、上に 1 つ、下に 2 つ 
#layout_4  -- 4 つのビューポート、すべて同じサイズ 
#layout_4vl  --4 つのビューポート、左に 3 つ、右に 1 つ 
#layout_4vr  --4 つのビューポート、左に 1 つ、右に 3 つ 
#layout_4ht  --4 つのビューポート、上に 3 つ、下に 1 つ 
#layout_4hb  --4 つのビューポート、上に 1 つ、下に 3 つ 

   

viewport.getType [ index:<integer> ] 
viewport.setType <name> 

現在のビューポートのビューのタイプを取得および設定します。有効な <name> 値は次のとおりです。

#view_top -- トップ 
#view_bottom  -- ボトム 
#view_right -- ライト 
#view_left -- レフト 
#view_front  -- フロント 
#view_back -- バック 
#view_persp_user  -- パースペクティブ 
#view_iso_user  -- ユーザ 
#view_camera -- カメラ 
#view_spot  -- ライト  
#view_shape  -- シェイプ 
#view_grid  -- グリッド 

3ds Max 2009 以降では、オプションの index: キーワードが指定されている場合、 viewport.getType() はアクティブ ビューポートのタイプではなく、インデックスで指定されたビューポートのタイプを返します。このインデックス番号は、 viewport.activeViewport で使用されているインデックス番号に対応します。

注:

現在のビューポートが拡張ビューポート(例: スケマティク ビュー、アセット マネージャ、または MAXScript リスナー ビューポート)の場合、 getType() undefined を返します。 setType() によってカメラが指定されており、カメラが 1 つだけ選択されている条件が満たされていない場合は、使用するカメラを選択するためのダイアログ ボックスが表示されます。カメラがない場合は、「シーンにカメラがありません」という警告が表示されます。

viewport.getType #view_none の戻り値も取得できます。いずれのビューポートもフォーカスを保持しない場合、 false が返されます。

viewport.setType は、ブール値(ビュー タイプの設定に成功した場合は true、失敗した場合は false)を返します。

例:

viewport.setType #view_top -- アクティブ ビューポートを[トップ]に設定します。
--> true
viewport.getType() -- 期待どおりの結果が返されるはずです。
--> #view_top

   

viewport.GetID <viewportIndex> 

3ds Max 2009 以降 では、インデックスで指定されたビューポートの ID を返します。ID は設定できません。

ビューポートが最大化されている場合、インデックスは常に 1 となり、ID は最大化されていないときのインデックスと一致します。 たとえば、インデックス 4 の右下のビューポートが最大化された場合、そのインデックスは 1 になりますが ID は 4 のままになります。

   

viewport.ResetAllViews() 

この関数は、3ds Max のすべてのビューポートをリセットし、既定のレイアウトに戻します。

   

getActiveCamera() 

viewport.getCamera [index:<integer>] 

アクティブ ビューに関連付けられたカメラ ノードがある場合はそれを返し、ない場合は undefined を返します。

3ds Max 2009 以降 では、オプションの index: キーワードが指定されている場合、 viewport.getCamera() はアクティブ ビューポートのカメラではなく、インデックスで指定されたビューポートのカメラを返します。このインデックス番号は、 viewport.activeViewport で使用されているインデックス番号に対応します。

   

viewport.setCamera <camera_or_light_node> 

指定されたカメラを使って、アクティブ ビューポートをカメラ ビューに設定します。

また、フリー、ターゲット、またはダイレクト ライトを使用して、アクティブ ビューをライト ビューに設定することもできます。

   

viewport.CanSetToViewport() 

ビューポート カメラとして使用できるカメラとライトに対して、 true を返します(viewport.setCamera への有効な引数)。

   

ビューポート表示とレンダリング制御

viewport.setGridVisibility {<int> | #all} <bool> 

グリッドをビューポートに表示するかどうかを設定します。 <int> はビューポートのインデックスであり、 <bool> はグリッドの可視性状態です。 #all を指定すると、すべてのビューポートでのグリッド表示は、指定した状態に設定されます。

   

viewport.getGridVisibility <int> 

グリッドをビューポートに表示するかどうかを取得します。 <int> はビューポートのインデックスを示します。

   

viewport.isWire() 

アクティブ ビューポートがワイヤ モードであれば true を返します。

   

viewport.DispBkgImage 

true に設定すると、アクティブ ビューポートにバックグラウンド イメージが表示されます。false に設定すると、バックグラウンド イメージは表示されません。

   

viewport.GetRenderLevel() 

ビューポート レンダリング レベルを返します。

戻り値は、 #smoothhighlights #wireFrame #smooth #facethighlights #facet #flat #litwireframe #Box #hiddenline のいずれかになります。

   

viewport.SetRenderLevel <render_level> 

現在のビューポートで[エッジ面]が有効になっている場合は true、それ以外の場合は false を返します。

有効な引数の値は、 #smoothhighlights #wireFrame #smooth #facethighlights #facet #flat #litwireframe #Box #hiddenline です。

   

viewport.GetShowEdgeFaces() 

現在のビューポートで[エッジ面]が有効になっている場合は true、それ以外の場合は false を返します。

   

viewport.SetShowEdgeFaces <boolean> 

ブール値の引数によってエッジ面の表示のオンとオフを切り替えます。

   

viewport.GetTransparencyLevel() 

現在のビューポートの透明度のレベルを返します。有効な値は次のとおりです。

1 - なし

2 - シンプル

3 - ベスト

   

viewport.SetTransparencyLevel <transp_level> 

現在のビューポートの透明度のレベルを設定します。有効な値については、上記を参照してください。

   

viewport.IsEnabled() 

現在のビューポートが有効になっている場合は true、無効になっている場合は false を返します。

   

viewport.IsPerspView() 

現在のビューポートがパースペクティブ ビューポート(パースペクティブまたは正射投影以外のカメラ)である場合は true、正射投影ビュー(トップ、ボトム、フロント、バック、レフト、ライト、ユーザ、正射投影のカメラなど)である場合は false を返します。

   

viewport.GetFPS() 

現在のビューポートの[統計を表示]オーバレイで計算された、最後のフレーム レートの値をフレーム/秒単位で返します。ビューポートの[統計を表示]がオンに設定されていない場合には、返される値はビューポートの現在のフレーム レートを表しません

3ds Max 9 以降 で使用可能です。

3ds Max 2008 以降では、[最適表示]がオンの場合、報告される値は実際のフレーム レートではなくターゲット フレーム レートになります。

   

ビューポート変換

<matrix3>getViewTM() <matrix3>viewport.getTM() viewport.setTM <matrix3> 

正射投影以外(パースペクティブおよびアイソメトリック ユーザ ビュー)のビューポートのアクティブ ビュー画面とワールド間の変換行列を取得または設定します。これはアフィン カメラまたはビューポート行列です。 setTM はパースペクティブ ビューポートでのみ実行され、ビュー変換行列が正しく設定された場合は true を返し、それ以外の場合は false を返します。

次の関数は、アクティブ ビューポートの「目」の位置と方向を示すレイ値を返します。ビューポートは、直交投影以外のビューポートでなければなりません。

例:

fn getViewDirectionRay =
(
-- ワールド座標からビュー座標へのアフィン TM 変換なので
-- この行列の逆行列が必要になります。
local coordSysTM = Inverse(getViewTM())
-- この行列の Z 軸はビューの方向です。
local viewDir = -coordSysTM.row3
-- この行列からビューの位置を取得します。
local viewPt = coordSysTM.row4
return ray viewPt viewDir
)

   

getViewFOV() 

アクティブ ビューポートの視野を返します。ビューポートが直交投影ビューポートの場合は、57.2958(1 ラジアン)が返されます。

   

viewport.GetFOV() 

アクティブ ビューポートの視野を返します。 getViewFOV() と同じ。

   

viewport.SetFOV <float> 

アクティブ ビューポートの視野を、指定された角度(単位: 度)に設定します。

パースペクティブ ビューおよびカメラ ビューでのみ動作します。

成功の場合は true 、それ以外の場合は false を返します。

3ds Max 2008 以降 で使用可能です。

   

<float>viewport.getFocalDistance() 

パースペクティブ ビューの場合は、アクティブ ビューポートの焦点距離を返し、それ以外の場合は undefined を返します。

3ds Max 2008 以降 で使用可能です。

   

<boolean>viewport.setFocalDistance() 

アクティブ ビューポートの焦点距離を設定します。

パースペクティブ ビューでのみ動作します。 カメラ ビューでは動作しません。

成功の場合は true 、それ以外の場合は false を返します。

3ds Max 2008 以降 で使用可能です。

   

<boolean>viewport.pan <float> <float> 

最初の引数を X、2 番目の引数を Y 方向のピクセル単位のデルタ値として使用して、現在のビューポートをパンします。

オブジェクトベースのタイプ(カメラ、ライトなど)を除くすべてのビューポート タイプで動作します。

成功の場合は true 、それ以外の場合は false を返します。

3ds Max 2008 以降 で使用可能です。

viewport.pan 10 0 --水平に10ピクセル分パンします。
completeredraw() -- ビューを再描画して変更を表示します。

   

viewport.zoom <float> 

渡された浮動小数点値をズーム係数として使用して、現在のビューポートのズームを実行します(例: 2.0 の場合には 1/2 にズーム縮小し、0.5 の場合には 2 倍にズーム拡大します)。

オブジェクトベースのタイプ(カメラ、ライトなど)を除くすべてのビューポート タイプで動作します。

成功の場合は true 、それ以外の場合は false を返します。

3ds Max 2008 以降 で使用可能です。

-- パースペクティブ ビューポートがアクティブな間、評価を実行します。
viewport.setFOV 50.0 --ビューポートの視野を 50 度に設定します。
true
completeredraw() --ビューポートを再描画します。
OK
viewport.zoom 2.0 --1/2 にズーム縮小します。
true
completeredraw() --ビューを再描画します。
OK
viewport.getFOV() --新しい視野を取得します。
86.0061
--この結果の意味は以下のとおりです。
--FOV 角度は、イメージ平面の幅に依存しますが、
--ターゲットの距離は変わりません。
--角度が 50 度である場合、半分の角度のタンジェントは、
--tan (50.0/2) -> 0.466308 となります。
--1/2 倍にズーム縮小した場合、幅は 2 倍に拡大されます。
--したがって、atan(0.466308*2) -> 43.0031 (新しい半分の角度)となり
--43.0031 * 2 = 86.0062が、ビューポート全体の FOV 角度となります。
 

   

<boolean>viewport.zoomPerspective <float> 

アクティブなビューポートをズームします。3ds Max UI のインタラクティブ ズーム ツールとまったく同等です。

このメソッドは、パースペクティブ ビューでのみ動作します。カメラ ビューでは動作しません。3ds Max UI で、ユーザが正射投影ビューまたはアイソメトリック ユーザ ビューをズーム拡大すると、ビューポート タイプに対して内部的に切り替えが実行され、代わりに ViewExp::Zoom( viewport.zoom() )が呼び出されます。

成功の場合は true 、それ以外の場合は false を返します。

3ds Max 2008 以降 で使用可能です。

   

<boolean>viewport.rotate <quat> [center:<Point3>] 

渡されたクォータニオン値を回転の値、Point3 値を回転の中心点として使用し、現在のビューポートの回転を実行します。

オブジェクトベースのタイプ(カメラ、ライトなど)を除くすべてのビューポート タイプで動作します。

成功の場合は true 、それ以外の場合は false を返します。

3ds Max 2008 以降 で使用可能です。

theAxis = (viewport.getTM()).row3
for i = 1 to 180 do
(
viewport.rotate (quat 2 theAxis)
completeredraw()
)

   

<bitmap>viewport.getViewportDib() 

このメソッドは、アクティブ ビューポートのグラフィックス ウィンドウのイメージをビットマップ値で返します。ビットマップのサイズは、ビューポートのサイズと同一です。このメソッドと、別のトピックで説明している gw.getViewportDib() との相違点は、このメソッドに maxops.displayActiveCameraViewWithMultiPassEffect() を使用した結果が含まれることです。このため、このメソッドは、被写界深度(DOF)またはモーション ブラーのプレビューを含むビューポート イメージを生成するために使用できます。

3ds Max 2008 以降 で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。

   

viewport.ZoomToBounds <All_Bool> <A_Point3> <B_Point3> 

すべてのビューポートまたは現在のビューポートを境界で囲まれた領域にズームします。

1 番目の引数が true として渡された場合、すべてのビューポートがズームされます。 false の場合は、選択されたビューポートだけがズームされます。

2 番目と 3 番目の引数は、ズームする、境界で囲まれた領域を定義します。

   

<point2>getViewSize() 

アクティブ ビュー サイズをピクセル数による point2 で返します。

   

<float>getScreenScaleFactor <point3> 

アクティブ ビューのスケール係数を返し、ポイントのビュー スペース原点からの距離にワールド スペース単位で幅を指定します。

   

<float>viewport.GetScreenScaleFactor() 

アクティブ ビューのスケール係数を返し、ポイントのビュー スペース原点からの距離にワールド スペース単位で幅を指定します。 getScreenScaleFactor() と同じ。

   

<ray>mapScreenToWorldRay <pixel_coord_point2> 

現在のアクティブ ビューにあり、ビューポート面に垂直なビューポート ピクセル座標を通過する、ワールド スペースの Ray 値を返します。

   

<point3>mapScreenToView <pixel_coord_point2> <depth_float> \ [ <viewport_size_point2> ] 

ビュー座標空間内の 3D 点を返します。アクティブ ビューポート画面(ビューポート ピクセル座標)のポイント、およびビュー座標の深さにより、このメソッドはこのポイントをビュー座標にマップします。 <viewport_size_point2> が指定されている場合は、実際のビューポート サイズの代わりに指定されたビューポート サイズが使用されます。

   

<point3>mapScreenToCP <pixel_coord_point2> [ <viewport_size_point2> ] 

現在アクティブなビューのビューポート ピクセル座標をワールド座標の作図平面にマップします。 <viewport_size_point2> が指定されている場合は、実際のビューポート サイズの代わりに指定されたビューポート サイズが使用されます。

   

<matrix3>getCPTM() 

作図平面とワールド間の変換行列を返します。

   

<float>gw.nonScalingObjectSize() 

このメソッドから返される値は、ビューポートのズームを元のサイズに戻すスケール係数として使用できます。たとえば、ライト、カメラ、テープ ヘルパー オブジェクトは、ビューポートがズーム拡大および縮小するときシーン内のノードを一定のサイズに保つために、この係数を使用します。

この値は、[ビューポート設定]ダイアログ ボックスの[非スケーリング オブジェクトのサイズ]編集ボックスの影響を受けるので、ある程度の制御が可能です。

   

<point3>gw.getPointOnCP <pixel_coord_point2> 

指定した画面座標に基づいて、現在の作図平面上のワールド スペース内のポイントを返します。

   

<float>gw.getCPDisp <base_point3> <dir_point3> <start_pixel_coord_point2> <end_pixel_coord_point2> 

このメソッドは、画面の開始点( <start_pixel_coord_point2> )、画面の終了点( <end_pixel_coord_point2> )、基点( <base_point3> )、および方向ベクトル( <dir_point3> )により、ワールド スペース内の長さを返します。たとえば、円柱を作成する場合、マウスをクリックして円柱の中心点(基点)を定義し、半径をドラッグします。続いて円柱の高さをドラッグします。このメソッドは、初期基点、方向ベクトル(Z 軸)、マウスの開始点、およびユーザがインタラクティブに調整している現在のポイントに基づいて、途中および最終の円柱の高さを返す場合に使用します。

   

<float>gw.getVPWorldWidth <point3> 

ワールド スペース内のポイントに対するワールド スペース内のビューポート画面の幅係数を返します。

   

<point3>gw.mapCPToWorld <point3> 

作図平面上の所定のポイントに対応するワールド スペースのポイントを返します。たとえば、 gw.getPointOnCP() を使用して画面上の座標を作図平面上のポイントに変換した場合、次にこのメソッドを呼び出して作図平面上のポイントをワールド スペースのポイントに変換できます。

   

<float>gw.getFocalDist() 

アクティブ パースペクティブ ビューの焦点距離を返します。

   

<boolean>gw.IsPerspView() 

アクティブ ビューポートがパースペクティブ ビューの場合は true 、それ以外の場合は false を返します。

   

ビューポートのスナップ設定

<point3>gw.snapPoint<pixel_coord_point2> [ snapType:<snapType_name> ] [ snapPlane:<matrix3> ] 

2 次元画面座標を指定すると、このメソッドは、現在のスナップ設定およびオプションの snapType: パラメータに基づいて、現在の作図平面またはオプションの snapPlane の 3D 点を返します。

有効な <snapType_name> 値は次のとおりです。

#in3d - すべてのポイントにスナップします。

#inPlane - 作図平面上のポイントだけにスナップします。

#unSelObjs - スナップ ポイントを考慮するとき、選択されているノードを無視します。

#selObjs - スナップ ポイントを考慮するとき、選択されていないノードを無視します。

#unSelSubobj - スナップ ポイントを考慮するとき、選択されているサブオブジェクト ジオメトリを無視します。

#selSubobj - スナップ ポイントを考慮するとき、選択されていないサブオブジェクト ジオメトリを無視します。

#force3d - ユーザ設定を無視し、3D 点に強制的にスナップします。

3ds Max 8 以降で使用可能なオプションの snapPlane: 引数は、XY 平面をスナッピング平面にマップする変換の matrix3 値です。指定した matrix3 値が単位行列(Matrix3 1)に等しい場合、スナッピング平面は XY 作図平面と同一になります。

例:

tm = Matrix3(1) --XY 平面を表します。
m = Point2 0 0 --画面ピクセル座標を表します。
p = gw.snapPoint m snapPlane:tm --スナッピング ポイントを返します。

   

<float>gw.snapLength <length_float> 

このメソッドは、最も近いスナップ増分に長さをスナップし、スナップした距離を返します。

   

ビューポート領域

viewport.setRegionRect <viewport index> <box2> 

指定されたビューポートの領域矩形を設定します。

   

viewport.getRegionRect <viewport index> 

指定されたビューポートの領域矩形を取得します。

   

viewport.setBlowupRect <viewport index> <box2> 

指定されたビューポートの引き伸ばし矩形を設定します。引き伸ばし矩形は、現在のレンダリング出力サイズと同じアスペクトに設定する必要があります。トップ、ボトム、およびレフト コンポーネントの値は Box2 値の引数から得られますが、ライト コンポーネント値はアスペクトを強制的に適合するように再計算されます。

   

viewport.getBlowupRect <viewport index> 

指定されたビューポートの引き伸ばし矩形を取得します。

インタフェース: EditRenderRegion を使用すると手動の領域編集ギズモを制御できます(3ds Max 2009 以降で使用可能)。

関連事項