概要
Houdini での制作は基本的にノードベースであり、プログラミングを必要としません。
しかし Houdini がサポートする PythonやWrangle などの言語を使うことで、これらのノードを制御し、さらに柔軟な表現が可能になります。
本記事では、Houdini 18.5 から VEX でサポートされるようになった dict 型(辞書)を紹介します。
以下のリンクも併せてご参考ください:
Dictionaries:https://www.sidefx.com/docs/houdini/vex/dicts.html
Dictionary attributes:https://www.sidefx.com/docs/houdini/model/attributes#dict
辞書の作成
空の辞書
サポートされている辞書リテラルは空辞書のみです。
初期値を設定
辞書に値を追加したい場合は dict[key] = value を使います。
指定した key が辞書内にない場合は代入値を値として新しい要素を作成します。
key があった場合は、その値を代入値で上書きします。
既存値をコピー
既にあるキーを使って新しいキーを作ることもできます。ただし dict[key] をそのまま代入するとあいまいな型としてエラーが発生するため、型明示が必要になります。
辞書の中に辞書
辞書の値に dict 型を指定することで、辞書の中に辞書を再現することができます。
値を取り出すには二次配列的に dict[][] を使います。
辞書の操作
getcomp(dict d, string key, float/int/... defaultvalue)
getcomp() は指定したキーの値を返します。(#1)
指定したキーが辞書に存在しない場合、デフォルト値を返します。(#2)
あくまで get するだけなので、デフォルト値を値とした新しい要素を作るわけではありません。
この関数は isvalidindex() と同じ働きをします。
int insert(dict dstdict, string dstkey, dict srcdict, string srckey)
insert() は辞書の値を別の辞書に追加します。
引数は追加先(dst:destination)の辞書とキー、追加元(src:source)の辞書とキーで構成されます。
srckey が srcdict に存在している場合、その値(srcvalue)を dstkey(insetredkey)で dstdict に追加します。
srcdict に存在する値を、別のキー名で dstdict に追加できます。
srckey(nonekey)が srcdict に存在していない場合、dstkey を dstdict から削除します。
dstkey も存在しない場合は何も起きません。
引数に dstkey と srckey を指定しない場合、 srcdict が持つ要素を dstdict に追加します。
dstkey と srckey が一致する場合、srcdkey の値(srcvalue)で dstkey の値(dstvalue)を上書きします。
key_name を引数に取った場合の返り値は、辞書更新前に dstkey が dstdict に存在した場合は 1 になり、存在しなかった場合は 0 になります。
key_name を取らなかった場合は void を返します。
int len(dect d)

指定した辞書のキーの数を返します。
string [] keys(dict d)
指定した辞書のキー一覧を、アルファベット順にソートして返します。 キーは string 型なので、返り値は string 型の配列になります。