Created on | Updated on

ノードの再作成に必要なPythonコードをプリントする asCode()

hou.Node.asCode()

hou.Node.asCode() からの出力を使えば、ノードの作成とパラメータとキーフレームの設定をするHOM APIを学習するのに役に立ちます。

または特定のパラメータの構造に興味を持ったなら、そのパラメータを実装するコードを自分で解析するのにも役立ちます。

mceclip13.png

 

 

任意のノードを Python Shell にドラッグするとプロンプトにカーソルが出るので、
そのまま離すとそのノードの Node オブジェクトが生成されます。

______1.png

mceclip1.png

 

後ろに .asCode() を付けて Enter を入力すると、

mceclip2.png

 

一気にコードが生成されました。

mceclip3.png

 

このままだと改行文字(\n)有りで読みにくいので、print() 関数を使って成形しながら出力します。

これで改行は文字ではなく、見やすく出力されました。

 

 

出力の解説

コードは大きく分けて三つに分割されます。

if 文で既に hou_parent が定義されているかを確認し、されていない(None)とき、
対象ノードの親ノード(今回で言う geo2)の Node オブジェクトを hou_parent に格納します。

mceclip7.png

 

続いて対象ノードを定義するコードで、
hou_node には hou_parent の子ノードとして作られた box ノードのオブジェクトが格納されます。

オプションは
run_init_scripts:Trueの場合、ノードタイプに関連した初期化スクリプトが新しいノードに対して実行されます。
load_contents:Trueの場合、サブネットの内容がカスタムサブネットオペレータに対して読み込まれます。
exact_type_name:Trueの場合、ノードのタイプ名がnode_type_nameで指定した通りのままになります。 そうでない場合、指定したnode_type_nameに合致する優先度の高いオペレータタイプを使用することができます。

その hou_node に対して、move() で対象ノードの一に移動させたり、Flag() で各フラグの設定をしたりなどして対象ノードの状態をコピーする処理をします。

mceclip8.png

 

その下はパラメータの設定で、上から順にパラメータを設定していきます。

mceclip11.png

 

最後にデフォルトのエクスプレッション言語を設定し、
必要があれば指定したバージョンのHDA定義から現行バージョンのHDA定義へノードを同期化します。

mceclip12.png

 

 

ファイルに出力して実行してみる

ノードの再作成に必要な Python コードが手に入ったので、実際に Python Shell で実行して、本当に同じノードが生成できるのか確認してみます。

(box ノードの名前が box1 から box__original に変わっています。)

 

まずは Python コードの出力先を Python Shell から任意の Python ファイルに変更します。
デフォルトでは .py の保存先は C:\Users\username\ になっています。

 

続いて、この保存された .py ファイルを実行します。

ただし Houdini の Python Shell では、通常の Shell で使用するような「python xxxxxx.py」というコマンド形式は利用できません。

代わりに、execfile() 関数(Houdini18.5 未満)や exec() 関数(Houdini18.5 以降)を使用して Python ファイルを実行します。

 

これで box__original と全く同じノードが生成されました。

ただ同じノード名は不可なため、末尾にはインデックスが付きます。

 

参考:https://www.sidefx.com/ja/docs/houdini/hom/hou/IntParmTemplate.html#asCode

問題が解決しない場合は、Born Digital サポートまでお問い合わせ下さい。

※ 問い合わせ対応はBorn Digitalより製品をご購入頂きましたお客様のみのサービスとなります。ご了承下さい。
サポート問い合わせ