Help us understand the problem. What is going on with this article?

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした