On this page |
概要 ¶
ビューア は、シーンを表示するタイプのペインです。 このビューアの内容は、概念的に ビューポート に分かれています。 デフォルトでは、シーンビューアは、Perspectiveビューの単一ビューポートを表示します。 しかし、ビューレイアウトコントロールを使用することで、例えば、そのビューを4つのビューポート(Perspective、Top、Front、Rightのビュー)に分割することができます。 ビューポートは、実際にシーンをユーザに表示するインターフェースのパーツです。
ビューポートにアクセスするには、まず最初にScene Viewerペインタブの参照を取得する必要があります。以下の方法を参照してください:
hou.ui.paneTabOfType(hou.paneTabType.SceneViewer)
を使用することで、現行ペインレイアウト内のScene Viewerペインタブを取得することができます。
現行レイアウトにScene Viewerペインタブがない場合、これはNone
を返します。
マルチビューアレイアウトの場合でも正しくビューアを取得できるようにしたいのであれば、hou.ui.curDesktopを参考に、現行ペインレイアウトを表現したhou.Desktopオブジェクトを取得し、hou.Desktop.sceneViewersを参考に、その現行レイアウト内のScene Viewerペインタブのリストを取得すると良いでしょう。
一度hou.SceneViewerペインオブジェクトの参照を取得すれば、その参照を使用してビューアペインのビューポートにアクセスすることができます。 以下の方法を参照してください:
ビューアペイン内のビューポートのリストを返します。
名前(例えば、"Top"
)で単一ビューポートを取得します。
hou.SceneViewer.selectedViewport
現在“選択されている”ビューポートを取得します。 ユーザは、ビューポート内でSpace + Nを押すことでビューポートを選択することができます。 選択したビューポートの右上コーナーには、明るい表示でビューメニューが描画されます。
メソッド ¶
ビューポートのフレーム操作 ¶
一般的には、 ホーム はビュー方向をデフォルトのビューにリセットするのに対して、 フレーム は現行のビュー方向を維持しつつビューポイントのみを動かします。
home()
ビューポートをデフォルトのビューに移動/タンブルします。
homeAll()
すべてのジオメトリ/オブジェクト(テンプレートジオメトリを含む)が表示されるようにビューを移動/タンブルします。 homeNonTemplated()も参照してください。
homeSelected()
選択したジオメトリ/オブジェクトが表示されるようにビューを移動/タンブルします。
homeGrid()
グリッドに対してビューポートをホームにします。
homeNonTemplated()
すべての 非テンプレート ジオメトリが表示されるようにビューを移動/タンブルします。
homeBoundingBox(bbox, center_to_origin=False)
frameAll()
すべてのジオメトリ/オブジェクトが表示されるようにビューを移動します。 frameNonTemplates()も参照してください。
frameBoundingBox(bbox)
シーン内の任意の領域が表示されるようにビューを移動します。
bbox
焦点を当てたいボリューム空間を表現したhou.BoundingBox。
frameSelected()
選択したジオメトリ/オブジェクトが表示されるようにビューを移動します。
frameGrid()
グリッドに対してビューをフレームします。
frameNonTemplated()
すべての 非テンプレート ジオメトリが表示されるようにビューを移動します。
ビューポイントとカメラ ¶
-
他の3Dパッケージとは違って、Houdiniのビューは常に実際のCameraオブジェクトとリンクされているわけではありません。ビューをカメラに“ロック”させると、そのビューを変更するとカメラがタンブル/移動し、ビューをカメラにリンクさせなければ“自由”(“No Camera”)にビューが動きます。ビューをカメラ(またはライト)視点に 一時的に 変更することができますが、ビューはカメラにロックされません(ビューを変更してもカメラに影響しません)。これらの設定に関するユーザインターフェースは、各ビューポートの右上コーナーにあるカメラメニューとビューツールバーの Lock Cameraボタンです。
このセクションのほとんどのメソッドは、その違いの影響を受けません。 例えば、ビューが“自由”であれば、defaultCamera()メソッドは、そのビューのみを操作するオブジェクトを返しますが、ビューがカメラにロックされていれば、リンクしたカメラを制御するオブジェクトを返します。
-
camera()の結果が
None
でない限りは、現在のビューがカメラ/ライト視点かどうかを調べることができます。これは、ビューがカメラにロックされているかどうかを調べません。 -
以下では、“ビューポート”を省略して表現したカメラについて説明していますが、ビューポートには、ビューポイントの位置と向き、ピボット、アスペクト比、クリップ平面などたくさんの設定が入っています。
viewTransform()
→ hou.Matrix4
ビューのトランスフォームマトリックスを返します。 プログラム的にビューポイントを設定するには、defaultCamera()を使ってhou.ViewportCameraオブジェクトを取得し、そのオブジェクトを制御します。
modelToGeometryTransform()
→ hou.Matrix4
モデリング空間からジオメトリのポイントの空間へのトランスフォームを返します。 オブジェクトレベルでモデリングしている時、これは、そのオブジェクト空間からSOP空間へのトランスフォームを返します。 SOPレベルでモデリングしている時、これは、モデル空間がそのままSOP空間となる単位行列を返します。
cameraToModelTransform()
→ hou.Matrix4
viewTransformと同じで、これはビューのトランスフォームマトリックスです。 カメラの空間から現在モデリングされている空間へのトランスフォームを返します。
ndcToCameraTransform()
→ hou.Matrix4
正規デバイス座標からビューポートカメラの空間へのトランスフォームを返します。 たいていの場合、これは射影変換になるため、これを使用した場合は、その結果のポイントをwで割って非同次化する必要があります。
viewportToNDCTransform()
→ hou.Matrix4
ビューポートピクセル座標から正規デバイス座標に変換するマトリックスを返します。 これは、2次元のスケール/移動なので、zとwの成分は単位行列です。
windowToViewportTransform()
→ hou.Matrix4
ウィンドウピクセルビューポート座標からビューポートピクセル座標に変換するマトリックスを返します。 ウィンドウ座標は、hou.ViewerEvent内に存在し、四分割ビューポートを認識しません。
これは、2次元の移動なので、zとwの成分は単位行列です。
viewPivot()
→ hou.Vector3
ビューのピボットをワールド空間のポイントとして表現したhou.Vector3を返します。
resolutionInPixels()
→ 2-tuple of int
ビューポートの解像度を(幅,高さ)のピクセルで返します。
camera()
→ hou.ObjNode or None
ビューポートが現在カメラまたはライトの 視点 になっている場合(必ずロックをかける必要はありません)、これは、そのカメラ/ライトのノードを表現したオブジェクトを返します。
ビューポートがカメラ/ライトの視点でない場合は、None
を返します。
cameraPath()
→ str
ビューポートの視点となっているカメラのパスを返します。 ビューポートの視点がカメラでなかった場合、空っぽの文字列を返します。 オブジェクトでは、これはカメラオブジェクトノードのパスを返します。 LOPsでは、これはUSDプリミティブパスを返します。
saveViewToCamera(camera_node)
現行ビューのビューポイントトランスフォームを、カメラまたはライトのノードのトランスフォームパラメータにコピーします。
camera_node
ビューの保存先であるノードを表現したhou.ObjNodeオブジェクト。
setCamera(camera_node)
カメラまたはライトのトランスフォームパラメータからビューポートトランスフォームを現行ビューにコピーします。 これは、ビューポートのCameraメニューの Look Through サブメニューからカメラ/ライトを選択する事と同じです。
camera_node
ビューの保存元であるノードを表現したhou.ObjNodeオブジェクト。
defaultCamera()
→ hou.GeometryViewportCamera
ビューポートのビューポイントを表現したオブジェクトを返します。 戻り値のオブジェクトは“ライブ”なので、設定を変更すれば即座にそのビューが変更されます。
カメラ/ライトがビューにロックされている場合、GeometryViewportCamera
の設定を変更すると、カメラ/ライトのノードのパラメータも変更されます。
ライブのオブジェクトの代わりに、hou.GeometryViewportCamera.stashを使用することで、“接続解除された”バージョンのビューポイントを取得することができます。 これは、後で利用できるようにコード内で特定のビューポイントを記憶させるのに便利な方法です。 setDefaultCamera()を使用することで、“貯蔵させた”カメラを復元することができます。
# 現行ビューを記憶します。 cam = viewport.defaultCamera() saved = cam.stash() # 何かしらの方法でビューを変更します。 # 元のビューを復元します。 viewport.setDefaultCamera(saved)
setDefaultCamera(stashed_cam)
hou.GeometryViewportCameraを受け取り、その値をこのビューポートにコピーします。
setDefaultCamera(cam_settings)
ビューポートの現在のカメラ設定をcam_setting
に設定します。
ビューポートがカメラ視点でビューがカメラにロックされていない場合、“No camera”に切り替わります。
ビューがカメラにロックされている場合、カメラオブジェクトは更新されます。
useDefaultCamera()
ビューポートカメラを“No camera”に設定し、カメラオブジェクト視点(またはライト視点)を止めます。
isCameraLockedToView()
→ bool
カメラがビューにロックされているかどうかを照会します。 これは、カメラのみのロック状態を返します。つまり、カメラ視点でなくても有効です。
lockCameraToView()
ビューポートカメラをロックします。 Trueに設定すると、ビューへの変更が視点のカメラオブジェクトに影響します。 Falseに設定すると、カメラがビューポートから外れて、ユーザがビューをタンブルした時にデフォルトのビューポートカメラに戻ります。 ビューポートをカメラ視点にしなくてもこれを有効にすることができますが、ビューを変更しても、ユーザがビューポートをカメラまたはライトの視点に設定しない限りはオブジェクトに何も影響しません。
isViewExportedToCameraContinuously()
→ bool
ビュー変更がロックされたカメラに断続的にエクスポートされている(True)、または、マウスを離した時にのみエクスポートされている(False)のどちらなのかを照会します。
exportViewToCameraContinuously()
ビュー変更のロックされたカメラへのエクスポートを断続的に行なう(True)、または、マウスを離した時にのみエクスポートする(False)のどちらかに設定します。
isActive2D()
→ bool
ビューポートが現在2Dジオメトリを表示しているかどうかを照会し、たいていの場合は、それはUV情報が表示されていることを意味します。
isActive3D()
→ bool
ビューポートが現在3Dジオメトリを表示しているかどうかを照会します。これは、ビューポートが遠近法、正投影の場合です。
draw()
ビューポートの再描画を要求します。同じスクリプト内の複数のdraw()
コールは、単一コールにまとめられます。
設定 ¶
name()
→ str
ビューポートの名前(persp1
, top1
など)を照会します。
changeName(str)
ビューポートの名前を設定します。名前を設定しても、ビューポートタイプに影響しないので、Perspectiveビューをfront
という名前にすると紛らわしくなります。この場合は、changeType()
と併用すると良いです。
settings()
→ hou.GeometryViewportSettings
このビューポートのhou.GeometryViewportSettingsオブジェクトを返します。 そのオブジェクトのメソッドをコールすることで、ビューポートのディスプレイオプションを読み込み/編集することができます。
size()
→ tuple of
double
このビューポートのサイズを返します。これはビューポート座標でタプルのエレメントが返されます。
-
(左下基準の)
X
位置 -
(左下基準の)
Y
位置 -
Width
寸法 -
Height
寸法
geometry()
→ tuple of
int
UI空間内のこのビューポートの位置とサイズを返します。 返されるタプルのエレメントは、シーンビューアの左下コーナー位置を基準としたビューポート座標とビューアのサイズです。
-
(左下基準の)
X
位置 -
(左下基準の)
Y
位置 -
Width
寸法 -
Height
寸法
type()
→ hou.geometryViewportType enum value
ビューポートタイプ(UV, 3D, top, leftなど)を照会します。
changeType([Hom:hou.geometryViewportType])
ビューポートタイプ(hou.geometryViewportType)を設定します。 このメソッドは、まず最初に新しいビューポートタイプにスタッシュ(保存)されているビューの復元を試みますが、 その復元に失敗したら、ビューポートをホームにします。
usesConstructionPlane()
→ bool
このビューポートがコンストラクション平面を使用しているかどうかを返します。
選択 ¶
queryNodeAtPixel(x, y, pick_templates=False)
→ hou.ObjNode, hou.SopNode, or None
ビューポート内の指定したピクセルで描画されているノードを返します。そこに何もなければNone
を返します。
返されるノードのタイプは、ビューアのレベルに依存します。
pick_templates
がTrueの場合、照会にはテンプレートジオメトリも含まれるようになります。
queryPrimAtPixel(node, x, y)
→ hou.Prim or None
ビューポート内で指定したピクセルで描画されているプリミティブを返します。そこに何もなければNone
を返します。
返されるプリミティブは、hou.Primのサブクラスです。
nodeパラメータを使用することで、特定のノード内のジオメトリを照会するように制限することができます。 ノードがNoneであれば、その照会の制限はありません。
queryInspectedGeometry()
→ hou.Geometry or None
ビューポートで現在検査されているジオメトリを返します。何も検査されていない時や検査スクリプトの範囲外でコールされている場合はNone
を返します。
queryInspectedPrim()
→ hou.Prim or None
ビューポートで現在検査されているプリミティブを返します。何も検査されていない時や検査スクリプトの範囲外でコールされている場合はNone
を返します。
返されるプリミティブは、hou.Primのサブクラスです。
mapToScreen(position)
→ hou.Vector2
ワールド座標をビューポート座標に変換します。
position
ワールド空間の位置を含んだhou.Vector3。
mapToWorld(x, y)
→ tuple of (hou.Vector3, hou.Vector3)
ビューポート座標をワールド座標に変換します。 光線(方向ベクトルと原点ポイント)を返します。
mapFromMouseChop(x, y)
→ tuple of (int, int)
Mouse CHOPのXとYのスクリーン値(-1
から1
の範囲)をビューポート座標に変換します。
(0,0)
がビューポートの左下コーナーです。
queryWorldPositionAndNormal(x,y,selectionRestriction)
→ tuple of (hou.Vector3, hou.Vector3, bool)
ビューポート座標(x,y)
におけるジオメトリのワールド位置と法線を照会します。
(0,0)
は、ビューポートの左下コーナーです。
返されるタプルには、位置、法線、ブールフラグが格納されます。このブールフラグは、そのスクリーン位置にジオメトリが存在していればTrue
です。
オプションのselectionRestriction
は、選択または非選択のプリミティブを除外することができます。デフォルトでは、すべてのプリミティブが照会されます。
コールバック ¶
addEventCallback(callback)
ビューポートイベントが発生する度にコールされるPythonコールバックを登録します。
callback
コール可能なPythonオブジェクトで必要なキーワード引数は、イベントタイプによって異なります。 このコールバックは、ジオメトリビューポートのイベントタイプで使用することができます。
The kwargs contains the following:
-
event_type: ビューポートイベント。
-
desktop: シーンビューアを保持したデスクトップオブジェクト。
-
viewer: ビューポートを指したシーンビューアオブジェクト。
-
viewport: イベントをトリガーしたビューポートオブジェクト。
import hou def onViewportCB(**kwargs): event_type=kwargs['event_type'] desktop=kwargs['desktop'] viewer=kwargs['viewer'] viewport=kwargs['viewport'] print( "event type=",event_type ) print( "desktop=",desktop ) print( "viewer=",viewer ) print( "viewport=",viewport ) cam = viewport.camera() if cam: print( "camera=%s\n\n"%(cam.name()) ) curSceneViewer = [item for item in hou.ui.curDesktop().currentPaneTabs() if item.type() == hou.paneTabType.SceneViewer][0] curSceneViewer.curViewport().addEventCallback(onViewportCB)
clearEventCallbacks()
hou.GeometryViewport.addEventCallbackを使って登録したPythonコールバックすべてを削除します。
removeEventCallback(self,callback)
hou.GeometryViewport.addEventCallbackを使って登録した特定のPythonコールバックを削除します。
eventCallbacks()
→ tuple
of callbacks
hou.GeometryViewport.addEventCallbackを使って登録したPythonコールバックすべてのタプルを返します。