On this page |
概要 ¶
ステートパラメータは、Viewerステートの挙動を制御する際に使用します。
例えば、ガイドジオメトリをスケールするためのfloatパラメータを使用したり、特定のスクリプトを発動させるためのボタンパラメータを定義することができます。
ステートにバインドされたパラメータは、Parameter Dialog
内で変更することができ、オプションでビューポート内の上部にあるOperation Toolbox Dialog
で変更することもできます。
パラメータをバインドさせる方法 ¶
ステートを登録する時に1個以上のパラメータを定義することができます。 hou.ViewerStateTemplate.bindParameterは、パラメータ名、パラメータを格納するデータタイプなどの設定を定義することで、ステートにパラメータテンプレートを追加することができます。 その結果のテンプレートは、ステートインスタンスが生成される時に実際のパラメータをインスタンス化する際に使用されます。
以下コードは、デモシーンのステート実装です:$HH/viewer_states/examples/state_parms_demo.hip
。
このシーンは、パラメータによってビューポート内でテキストの描画を駆動させるOBJステートを埋め込んでいます。
import hou import viewerstate.utils as su # パラメータダイアログにのみ表示される事前定義されたテキストサイズの値を使ってメニューパラメータを定義します。 menu_item_info = [ ('text_size_05', '0.5', 'BUTTONS_calc'), ('text_size_1', '1.0', 'BUTTONS_calc'), ('text_size_2', '2.0', 'BUTTONS_calc'), ('text_size_5', '5.0', 'BUTTONS_calc')] class State(object): def __init__(self, state_name, scene_viewer): self.state_name = state_name self.scene_viewer = scene_viewer self.text_scale = hou.Vector3() self.menu_item_dict = { menu_items[0]:float(menu_items[1]) for menu_items in menu_item_info} # ビューポート内にテキスト文字列を描画するためのDrawable。 self.text_drawable = hou.TextDrawable(self.scene_viewer, 'text_drawable_name', params = {'margins': (10.0,10.0)} ) self.text_drawable.show(True) def onEnter(self, kwargs): """ ステートに入すると、いくつかのパラメータを無効にします。 """ node = kwargs['node'] state_parms = kwargs['state_parms'] # テキストスケールを設定します。 size = state_parms['text_size']['value'] self.text_scale = hou.Vector3(size,size,size) # テキストサイズのプリセットメニューを非表示にして、トグルボタンのチェックを外します。 state_parms['text_size_menu']['visible'] = False state_parms['enable_text_size_menu']['value'] = False def onParmChangeEvent(self, kwargs): """ パラメータの変更に反応させます。 """ parm_name = kwargs['parm_name'] parm_value = kwargs['parm_value'] state_parms = kwargs['state_parms'] if parm_name == 'text_size': # テキストスケールを設定します。 self.text_scale = hou.Vector3(parm_value,parm_value,parm_value) elif parm_name == 'text_size_menu': # 選択したプリセットでテキストサイズを設定します。 size = self.menu_item_dict[parm_value] self.text_scale = hou.Vector3(size,size,size) state_parms['text_size']['value'] = size elif parm_name == 'text_size_reset': # テキストサイズをリセットします。 size = 1.0 self.text_scale = hou.Vector3(size,size,size) state_parms['text_size']['value'] = size elif parm_name == 'enable_text_size_menu': # テキストサイズメニューを有効または無効にします。 state_parms['text_size_menu']['visible'] = parm_value # テキストを強制的に再描画します。 self.scene_viewer.curViewport().draw() def onDraw( self, kwargs ): # ビューポート内の左下(デフォルトの原点)にテキストを描画します。 handle = kwargs['draw_handle'] state_parms = kwargs['state_parms'] params = { 'text': state_parms['text']['value'], 'scale' : self.text_scale } self.text_drawable.draw( handle, params ) def createViewerStateTemplate(): """登録するViewerステートテンプレートを作成して返すための必須エントリーポイント。""" state_typename = kwargs["type"].definition().sections()["DefaultState"].contents() state_label = "State parms demo" state_cat = hou.objNodeTypeCategory() template = hou.ViewerStateTemplate(state_typename, state_label, state_cat) template.bindFactory(State) template.bindIcon('$HFS/houdini/pic/minimizedicon.pic') # 描画するテキストを格納するための文字列パラメータを定義します。 template.bindParameter( hou.parmTemplateType.String, name="text", label="Text", default_value="Lorem ipsum dolor sit amet." ) # 最小/最大範囲を持ったテキストサイズ浮動小数点パラメータを定義します。 template.bindParameter( hou.parmTemplateType.Float, name="text_size", label="Text Size", min_limit=0.5, max_limit=5, default_value=0.75 ) # ファクトリー値でテキストサイズをリセットするためのボタンパラメータを定義します。 template.bindParameter( hou.parmTemplateType.Button, name="text_size_reset", label="Reset Text Size" ) # テキストサイズのプリセットメニューを表示/非表示するためのトグルパラメータを定義します。 template.bindParameter( hou.parmTemplateType.Toggle, name="enable_text_size_menu", label="Enable Text Size Menu", default_value=True, align=True ) # カーソルサイズのプリセット値でメニューパラメータを定義します。 template.bindParameter( hou.parmTemplateType.Menu, name="text_size_menu", label="Text Size Presets", default_value='text_size_1', menu_items=menu_item_info, toolbox=False ) return template
パラメータの変更に反応させる方法 ¶
onParmChangeEvent
コールバックは、パラメータの変更に反応させる際に使用します。
Houdiniは、パラメータダイアログでパラメータが変更された後で、以下の関数(が定義されていれば)をコールします。
onParmChangeEvent( self, kwargs )
このコールバックは、以下の項目を含んだ辞書引数(kwargs
)を受け取ります:
parm_name
変更されたパラメータの名前。
parm_value
そのパラメータの新しい値。
hou.parmTemplateType.Menuパラメータに関しては、parm_value
は新しく選択されたメニュー項目で、
hou.parmTemplateType.Buttonパラメータに関しては、値は何も意味がありません。
複数のコンポーネントで定義されたパラメータに関しては、parm_value
はコンポーネント値すべてを含んだリストです。
パラメータをバインドした時に使用されるnum_components
引数を参照してください。
ステートのサンプルのonParmChangeEvent
実装を確認してください。
パラメータUIを更新する方法 ¶
Viewerステートパラメータには、UIステートを変更するために修正可能なプロパティ(またはステート)があります。
これらのパラメータを動的に変更すると、インターフェースがもっと効率的でもっと使いやすくなります。
例えば、パラメータを無効にすることでパラメータダイアログ
内でそのパラメータをグレーアウトしたり、Visibilityプロパティを変更することでそのパラメータを完全に非表示することができます。
コールバックのkwargs
引数を介してstate_parms
辞書からパラメータプロパティにアクセスすることができます。
このstate_parms
辞書は、エントリーと各ステートパラメータ名をマップします。
これらのエントリーそれぞれが、パラメータプロパティ値とそれらのキーをマップした辞書を含んでいます:
-
enable
: パラメータを有効または無効にするブール値。 -
value
: パラメータ値。 -
visibility
: パラメータを表示または非表示するブール値。
パラメータ更新の使い方は、onParmChangeEvent
コールバックを参照してください。
更新が可能なコールバック ¶
たいていのコールバックは、state_parms
にアクセスすることができ、Operation toolbox
とParameter Dialog
の両方で1つ以上のパラメータのプロパティを更新することができます。
ただし、以下のコールバックは、読み込み専用のアクセスに制限されています:
-
onMouseEvent
-
onDraw
-
onDrawInterrupt
Note
これらのコールバックからパラメータプロパティを変更することは可能ですが、変更してもパラメータUIステートは更新されません。