Houdiniにはノード上のパラメータが更新されたときに自動でPythonスクリプトを実行してくれる機能があります
Edit Parameter Interface内のCallback ScriptにPythonを書けば値の変更時にそのPythonを実行してくれます
#方法
Callback Scriptの欄には一行分しか書くスペースが無いので、どこかに実行する関数を定義しておいてそれを呼ぶようにします
一番簡単な定義の方法はメニューの
Windows > Python Source Editorを開いてその中に関数定義を書くことです
ここに関数を書いておけばhou.session
からアクセスできます
例えば、
def func():
pass
という関数定義の場合、hou.session.func()
で呼び出せます
実際に書いてみます
下記は一例です
#パラメータを指定してコピー
def Send(from_path, to_path, params):
from_path = hou.nodes(from_path.split())
to_path = hou.nodes(to_path.split())
params = params.split()
for f, t in zip(from_path,to_path):
for p in params:
t.parm(p).set(f.evalParm(p))
コピー元のパスとコピー先のパスを文字列(string)として受け取ってforでループしながらコピーするコードです
HoudiniをPythonで操作するにはhouに含まれるクラスや関数を使います
↓が参考になります
hou package
https://www.sidefx.com/docs/houdini/hom/hou/index.html
ノードを操作するとき使うもの↓
hou.node HOM function
hou.nodes HOM function
hou.Node class
パラメータを操作するとき使うもの↓
hou.parm HOM function
hou.Parm class
例えばa = hou.node('../null')
と書くと、このa
を使って'../null'
のノードを操作できます
a
にはhou.Node
型を継承した何かしらのクラスが代入されているので、これを使うにはhou.Node classを見ると良いです 様々なクラス内関数があります
パラメータを操作するときはb = a.parm('tx')
と書くとb
に代入されるのはhou.Parm型のクラスで、b
を使ってパラメータを操作できます→hou.Parm class
hou.Parm classでよく使う関数はset
やeval
でしょう
b.set(888)
と書くとtx
を888
に更新します
c = b.eval()
でc
に888
等の値が代入出来ます
ちなみにa
やb
を使うのは冗長なのでhou.node('../null').parm('tx').set(888)
と書けば一発です
##null1からnull2にコピー
null1とnull2ノードを作って値をコピーしてみます
null1のCallback Scriptには次のように書いて関数を呼び出します
hou.session.Send('.','../null2','t2x t2y t2z')
'.'
は呼び出したノード(この場合はnull1)を表す文字列です
t2x
t2y
t2z
はパラメータの名前です
null1のt2xに0.3と入れてみると、null2のt2xも0.3に変わりました
##ボタンを押した時に実行
上の例ではt2x
の変更ですぐに関数が実行されましたが、ボタンを作っておいてユーザーがボタンを押したタイミングで値をコピーすることもできます