3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Houdini ApprenticeAdvent Calendar 2019

Day 3

Pythonでパラメータの値を移す

Last updated at Posted at 2019-12-02

Houdiniにはノード上のパラメータが更新されたときに自動でPythonスクリプトを実行してくれる機能があります
Edit Parameter Interface内のCallback ScriptにPythonを書けば値の変更時にそのPythonを実行してくれます
bandicam 2019-11-16 21-57-31-466.jpg

#方法
Callback Scriptの欄には一行分しか書くスペースが無いので、どこかに実行する関数を定義しておいてそれを呼ぶようにします

一番簡単な定義の方法はメニューの
Windows > Python Source Editorを開いてその中に関数定義を書くことです
bandicam 2019-11-20 10-51-42-016.jpg
bandicam 2019-11-16 22-06-49-389.jpg

ここに関数を書いておけば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))

bandicam 2019-11-16 22-32-19-427.jpg
コピー元のパスとコピー先のパスを文字列(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でよく使う関数はsetevalでしょう
b.set(888)と書くとtx888に更新します
c = b.eval()c888等の値が代入出来ます

ちなみにabを使うのは冗長なのでhou.node('../null').parm('tx').set(888)と書けば一発です

##null1からnull2にコピー

null1とnull2ノードを作って値をコピーしてみます

null1のCallback Scriptには次のように書いて関数を呼び出します
bandicam 2019-11-16 22-53-26-969.jpg
hou.session.Send('.','../null2','t2x t2y t2z')

'.'は呼び出したノード(この場合はnull1)を表す文字列です
t2x t2y t2zはパラメータの名前です

null1のt2xに0.3と入れてみると、null2のt2xも0.3に変わりました
bandicam 2019-11-16 21-44-42-466.jpg

##ボタンを押した時に実行
上の例ではt2xの変更ですぐに関数が実行されましたが、ボタンを作っておいてユーザーがボタンを押したタイミングで値をコピーすることもできます

bandicam 2019-11-20 10-59-43-402.jpg

この場合はボタンのCallback Scriptにボタンを押した時、実行したいスクリプトを記述しましょう
bandicam 2019-11-20 11-03-15-849.jpg

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?