| On this page | |
| Inheritance |
|
概要 ¶
hou.ViewerHandleContextは、実行中のビューアハンドルに関連付けられているステートを格納します。
これには、ハンドル自体の情報(パラメータを含む)に加え、ハンドルのガジェットに関する情報(hou.GadgetContextを参照)が含まれます。
ビューアハンドルの実装は、handle_contextデータメンバーを介して、自身のコンテキストインスタンスにアクセスすることができます。
また、コンテキストは、2Dビューアハンドル(例えば、sidefx_transform2dハンドル)で使用されるDrawableオブジェクトも管理します。
これによって、コンテキストはDrawableオブジェクトをレンダリングし、それらのDrawableオブジェクトに対してピッキングサービスを用意することができます。
メソッド ¶
isParameterEnabled(parm_name)
→ bool
parm_name
指定したパラメータ名が有効ならTrueを返します。
通常では、この戻り値は、このパラメータに依存する機能を有効または無効(非表示)にするといったハンドルの実装に使用します。
scaleFactor(ref_position)
→ double
このメソッドは、ズームイン/ズームアウトした時にハンドルガジェットのスケールサイズを一定に保つのに使用できるスケール係数を返します。
通常では、scaleFactorはonDrawSetupで使用します。
ref_position
スケール係数の計算に使用される(ハンドル関連の)参照位置。 ここには、(存在すれば)ハンドルのピボット位置などのハンドル関連の位置を指定します。 これを省略した場合、参照位置は(0,0,0)です。
scaleValue()
→ double
ハンドルスケールのプリファレンス値を返します。
ハンドルスケールは、現在のビューポートサイズに比例して計算され、これを使用することで、ハンドルガジェットを好みのサイズまでスケールさせることができます。
通常では、onDrawSetupからscaleValueをコールします。
handleScaleValue(ref_position=None)
→ double
アクティブなHoudiniビューポート内の現在のハンドルに対して計算されたスケール係数を返します。 Houdiniでは異なるズームレベル間で表示サイズを一定に保つためにDrawableを自動スケールしますが、この値はCOP Pythonハンドルの実装において極めて重要です。 この値によって、Drawableの表示サイズを調整できるようになり、特に要素をインタラクティブにドラッグした時のハンドル自身のスケールを補正するのに役立ちます。
ref_position
スケール値の計算に使用される(ハンドルに関連する)基準位置。 これは、Drawableの位置とかその他の関連する位置などを指定します。 省略した場合、基準位置は(0,0,0)となります。
このコードスニペットでは、COP PythonハンドルでhandleScaleValue()を使用する方法を説明しています。
import hou import drawable2d as d2d MY_LINE_DRAWABLE = "line" MY_MARKER_DRAWABLE = "marker" TX = "tx" TY = "ty" def __init__(self, **kwargs): self.__dict__.update(kwargs) self._line = None self._marker = None # ハンドルのドラッガー self._dragger = d2d.Dragger2D(self.scene_viewer) def onActivate(self, kwargs): # 簡潔にするため、Drawableの作成は省略しています。 pass def onMouseEvent(self, kwargs): """ マーカーの位置をドラッグし、ラインのポイント#2を 新しい位置で更新します。 """ ui_event = kwargs["ui_event"] reason = ui_event.reason() if reason == hou.uiEventReason.Changed: # マウスアップ時に現在のドラッグ操作を終了します。 self._dragger.endDrag() return True if not self._dragger.update(kwargs, self._marker): return False drawable_name = self.handle_context.name() consumed = True if reason == hou.uiEventReason.Start: if drawable_name == MY_MARKER_DRAWABLE: self._dragger.startDrag(p1=self.handle_parms[TX], p2=self.handle_parms[TY], transform_mode=d2d.Drawable2D.TransformMode.PARAMS) elif reason in [hou.uiEventReason.Active, hou.uiEventReason.Changed]: if drawable_name == MY_MARKER_DRAWABLE: # Drawableをドラッグします。 self._dragger.dragXY() # Drawableの位置を変更します。 dx, dy = self._dragger.delta() delta = hou.Vector3(dx,dy,0) # ハンドルのスケール係数で差分を調整します。 handle_scale = self.handle_context.handleScaleValue(delta) delta /= handle_scale dx = delta[0] dy = delta[1] su.addToDrawablePos(self._marker, dx, dy) su.addToDrawablePoint(self._line, 1, dx, dy) return consumed ...
objectWorldTransform()
→ [Hom:hou.Matrix4]
ハンドルの親オブジェクトのワールド空間トランスフォームを返します。
objectLocalTransform()
→ [Hom:hou.Matrix4]
ハンドルの親オブジェクトのローカル空間トランスフォームを返します。
draw(draw_handle)
ビューポート内でハンドルのDrawableをレンダリングします。 このメソッドは、PythonハンドルのonDrawイベント中に呼び出され、 登録されているすべてのDrawableを描画します。
Note
現在のところ、このメソッドは2Dビューアハンドルでのみサポートされています。
draw_handle
Houdiniがレンダリング用に用意した内部的な識別子。
この値は、PythonハンドルのonDrawコールバックに渡され、変更を加えることなくこのdrawメソッドに引き継がれなければなりません。
setDrawOrder(drawable_names)
ハンドルのDrawableの描画順序を定義します。 この順序は、ピック時にも適用されますが、手前から奥へという順序で反復処理されるため、視覚的には最前面のDrawableが最初にテストされます。
Note
現在のところ、このメソッドは2Dビューアハンドルでのみサポートされています。
drawable_names
奥から手前の描画順序を示したDrawable名の(一部またはすべての)リスト(最初の名前が最初に描画され、最も奥に配置されます。最後の名前が最後に描画され、最前面に配置されます)。
このリストに含まれていないDrawableは、作成順に描画され、このリストに含まれているすべてのDrawableよりも背後に配置されます。
Methods from hou.GadgetContext ¶
name()
→ string
アクティブなDrawableの名前を返します。 Drawableは、それが選択された時、または、マウスがそのDrawable上にある(ロケートされている)時にアクティブになります。
label()
→ string
アクティブなDrawableラベル名。
gadget()
→ string
name()と同様。
gadgetLabel()
→ string
label()と同様。
component1()
→ int
アクティブなガジェットジオメトリのコンポーネントID。 このIDは、ポリゴン、ポリゴン頂点、ラインジオメトリの始点のどれかを指します。 アクティブなガジェットがなければ-1を返します。
Note
このメソッドは、hou.Drawable2Dオブジェクトには適用されません。
component2()
→ int
アクティブなガジェットジオメトリのコンポーネントID。 返されるIDは、典型的にはラインジオメトリの終点を指します。 ラインジオメトリが選択されていない場合やロケートされていない場合またはアクティブなガジェットがない場合は-1を返します。
Note
このメソッドは、hou.Drawable2Dオブジェクトには適用されません。
isDrawing()
→ bool
ハンドルが描画ステート(Drawableが選択もロケートもされていないことを意味します)の場合はTrueを返します。
isPicking()
→ bool
Drawableが選択されている場合はTrueを返します。
isLocating()
→ bool
Drawableがロケートされている場合はTrueを返します。
isLocated(drawable_name)
→ bool
指定したDrawableがロケートされている場合はTrueを返します。
drawable_name
テストするDrawableの名前。
isPicked(drawable_name)
→ bool
指定したDrawableが選択されている場合はTrueを返します。
drawable_name
テストするDrawableの名前。
| See also |