Primの有無で処理を分岐する
表題の通り、SOLARIS で特定の Prim がある場合、処理を分岐したりさせたい場合
若干悩んだのでメモがてら書いていきます。
やりたいことは、例えば /Root のような特定の決められた Prim があるときだけ
処理をしたい..のように、Prim の有無で Switch を切り替えたいというもの。
ただ、PythonExpression 内で現在のノードの Stage をうまく拾えなかったので
別の方法を試してみます。
サンプルでは、CheckPrim がある場合は何もしない(Switch index = 0 )
Prim がない場合は PrimA を作ります ( Switch index = 1 )
まず、PythonScript ノードで、その時点でのノードの有無をチェックします。
チェックしたパラメータを、Switch ノードでどう使うかというと、
こちらの記事の Store Parameter Values を使用します。
このノードは、USD のレイヤーには値を書きたくないけれども、Houdini 内だけで
なにかしらのパラメーターを保持したい場合などに
HoudiniLayerInfo Prim に、パラメーターをセットする機能です。
今回のように、条件などを一時的に保存したい...等にちょうど良い機能です。
import loputils
node = hou.pwd()
stage = node.editableStage()
prim = stage.GetPrimAtPath('/Check')
check = 0
if prim.IsValid():
check = 1
loputils.storeParameterValues(node,'__check',check,propertytype='int')
Python ノードには、このようにします。
prim.IsValid() で、存在する場合 1 しない場合は 0 のように
StoreParameterValue に対して Switch ノードの Index 情報を入れます。
import loputils
check = hou.pwd().node("../PrimCheck")
return loputils.fetchParameterValues(check, "__check")
次に、Switch ノードの Index に対して PythonExpression を仕込みます。
StoreParameterValue は、そのノードの下流のノードであれば取得できますが
今回の場合は、いわゆる If の分岐地点が Python ノードにあたるので
Python ノードを指定して値を取得します。
結果、このように Prim の有無で分岐するような処理ができました。