On this page |
runVex(vex_file, inputs, precision="32")
→ dict
of str
to values
引数 ¶
vex_file
ディスク上の コンパイルされた VEXオブジェクトファイル(.vex
)のパスを含んだ文字列。
この関数は、VEXソースコード(.vfl
)を受け取らないので、まず最初にソースコードをコンパイルしなければなりません。
現在のところ、この関数は、cvex
コンテキストの関数のみを扱います。
現在のところ、runVex
はファイルパスが.vex
で終わっていないと例外を引き起こします。
Note
runVex
は、コンパイルされたファイル内の“メイン関数”(戻りタイプがcvex
コンテキストタイプの関数)を 常に コールします。
現在のところ、コンパイルされたファイル内の他の関数を名前でコールすることができません。
inputs
VEX入力の名前と値をマッピングした辞書。
-
値が単一値、文字列、hou.Vector3、hou.Vector4、hou.Matrix3、hou.Matrix4の場合は、“静的”な値として扱われます。
-
値がシーケンス値の場合は 可変データ として扱われ、この関数は自動的に(できるだけ並列で)それらの値を“反復”させます。これは、例えばVEXスニペットでジオメトリ内のすべてのポイントを処理する時と同じです。リストを使って値ごとに別々に関数をコールするよりも、可変データを使って1回で関数をコールする方が非常に効率的です。
-
複数の“可変”入力を指定する場合、 それらの入力がすべて同じ長さでなけれなりません 。且つ、すべての値が同じタイプでなければなりません。Houdiniは可変シーケンスのインデックス毎に該当する値を反復させます。
ポイントのカラー(
Cd
)アトリビュートとポジション(P
)アトリビュートに該当する2つの引数を例にすると:runVex("test.vex", { "Cd": [hou.Vector3(1.0, 0, 0), hou.Vector3(0, 1.0, 0), hou.Vector3(0, 0, 1.0)], "P": [hou.Vector3(1.0, 1.0, 1.0), hou.Vector3(2.0, 2.0, 2.0), hou.Vector3(3.0, 3.0, 3.0)] })
Houdiniは、これら2個のリストを“zip”にして、以下の値を使って反復させます:
Iteration
Cd
P
1
Vector3(1.0, 0, 0)
Vector3(1.0, 1.0, 1.0)
2
Vector3(0, 1.0, 0)
Vector3(2.0, 2.0, 2.0)
3
Vector3(0, 0, 1.0)
Vector3(3.0, 3.0, 3.0)
Note
この関数はシーケンスを可変データとして解釈するので、現在のところ、この関数は配列の引数を使ってVEXを コールすることができません 。
precision
32
または64
のどちらかを指定します。64
を指定すると、HoudiniはVEXスニペットを64ビットモードで実行します。
戻り値 ¶
runVex()
は、VEX出力の名前と値をマッピングした辞書を返します。
“メイン”VEX関数は、値を直接返しません。メイン関数はexport
とマークされた引数にのみ値を書き出すことができます。
この辞書には、export
とマークされた引数の出力値が格納されます。
引数の入力が静的だった場合、その出力値は単一値になります。引数の入力が“可変”だった場合、その出力値は値のタプルになります。 複数の引数が可変だった場合、その出力タプルはすべて同じ長さになります。
サンプル ¶
以下のcode.vfl
ファイルがあって、vccを使ってそれをcode.vex
にコンパイルしたとします:
cvex add(float x=0; float y=0; export float out=0) { out = x + y; }
そして、以下のコードを使ってPythonからその関数をコールすることができます:
>>> hou.runVex("code.vex", {"x":(1.0, 2.0, 3.0), "y":(7.1, 8.1, 9.1)}) {"out": (8.1, 10.1, 12.1)} >>> hou.runVex("code.vex", {"x":(1.0, 2.0, 3.0), "y":0.5}) {"out": (1.5, 2.5, 3.5)} >>> hou.runVex("code.vex", {"x":1.0, "y":0.5}) {"out": 1.5} >>> hou.runVex("code.vex", {"x":1.0, "y":0.5}, precision="64") {"out": 1.5}
VOPネットワークの使い方 ¶
以下のコードは、VOPネットワークノード(例えば、CVEX VOP)で生成されたVEXコードをrunVex
で使用できるようにファイルに書き出す方法を説明しています:
import os import tempfile def runVexFromNode(vop_node, input_dict): handle, path = tempfile.mkstemp(prefix=vop_node.name(), suffix=".vex") vop_node.saveCompiledCookCodeToFile(path) os.close(handle) output_dict = hou.runVex(path, input_dict) os.remove(path) return output_dict