Created on | Updated on

Houdini でプログラミング:dict 型(VEX)

概要

mceclip0.png

Houdini での制作は基本的にノードベースであり、プログラミングを必要としません。
しかし Houdini がサポートする PythonやWrangle などの言語を使うことで、これらのノードを制御し、さらに柔軟な表現が可能になります。

mceclip38.png

本記事では、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

 

辞書の作成

空の辞書

mceclip2.png
サポートされている辞書リテラルは空辞書のみです。

初期値を設定

mceclip7.png
辞書に値を追加したい場合は dict[key] = value を使います。

指定した key が辞書内にない場合は代入値を値として新しい要素を作成します。
key があった場合は、その値を代入値で上書きします。

既存値をコピー

mceclip8.png
既にあるキーを使って新しいキーを作ることもできます。ただし dict[key] をそのまま代入するとあいまいな型としてエラーが発生するため、型明示が必要になります。

辞書の中に辞書

mceclip9.pngmceclip11.png
辞書の値に dict 型を指定することで、辞書の中に辞書を再現することができます。

値を取り出すには二次配列的に dict[][] を使います。

辞書の操作

getcomp(dict dstring key, float/int/... defaultvalue)

mceclip12.png
getcomp() は指定したキーの値を返します。(#1)

指定したキーが辞書に存在しない場合、デフォルト値を返します。(#2)

あくまで get するだけなので、デフォルト値を値とした新しい要素を作るわけではありません。

この関数は isvalidindex() と同じ働きをします。

int insert(dict dstdictstring dstkeydict srcdictstring srckey)

mceclip22.png
insert() は辞書の値を別の辞書に追加します。
引数は追加先(dst:destination)の辞書とキー、追加元(src:source)の辞書とキーで構成されます。

mceclip18.pngmceclip21.pngmceclip17.png
srckey が srcdict に存在している場合、その値(srcvalue)を dstkey(insetredkey)で dstdict に追加します。
srcdict に存在する値を、別のキー名で dstdict に追加できます。

mceclip23.pngmceclip17.pngmceclip26.png
srckey(nonekey)が srcdict に存在していない場合、dstkey を dstdict から削除します。
dstkey も存在しない場合は何も起きません。

mceclip27.pngmceclip26.pngmceclip28.png
引数に dstkey と srckey を指定しない場合、 srcdict が持つ要素を dstdict に追加します。
dstkey と srckey が一致する場合、srcdkey の値(srcvalue)で dstkey の値(dstvalue)を上書きします。

key_name を引数に取った場合の返り値は、辞書更新前に dstkey が dstdict に存在した場合は 1 になり、存在しなかった場合は 0 になります。
key_name を取らなかった場合は void を返します。

int len(dect d)

mceclip30.png
指定した辞書のキーの数を返します。

string [] keys(dict d)

mceclip31.png

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

int isvalidindex(sict d, string key)

mceclip33.png

辞書に指定したキーが存在するか判定します。 存在する場合は 1 を、しない場合は 0 を返します。

int removeindex(dict d, string key)

mceclip37.png

辞書から指定したキーを削除します。 キーが存在する場合は 1 を、しない場合は 0 を返します。

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

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