Wrangleでアップストリームのアトリビュートを継承、もしアトリビュートがなければ初期化


こんにちは、篠島です。前回に続きVEXのウェビナーで紹介されていたものを説明したいと思います。Wrangleノードでアトリビュートをセットすると、基本的に前に存在していたアトリビュートが上書きされてしまいますが、アトリビュートの名前を宣言し、コンスタントの値を入れることで、もし前にアトリビュートが存在していた場合はその値を使う、もしアトリビュートが存在しなければコンスタントの値で初期化ができます。

 

今回のサンプルファイルです。
initialization.zip

 

下の様にGridを作り、一つ目のWrangleノードで色をランダムに設定、そして二つ目のWrangleノードで、色を緑色に初期化しています。一つ目のWrangleノードをバイパスしたりして見ると、色がランダムから緑に変わるのがわかると思います。

a

 

これは一つ目のWrangleノードで色が設定され、二つ目のWrangleノードは既にCdアトリビュートが存在しているので純粋に無効になります。一つ目のWrangleノードをOFFにすると、二つ目のWrangleノードによって色が緑色によって初期化されます。

アトリビュートをセットするときは @Cd = set(1,1,1);  の様に書きますが、二つ目では vector @Cd = {0, 1, 0};  と変数の型を宣言してから初期化しています。すると、既にアトリビュートが存在する場合はその値を使い、アトリビュートが存在しない場合のみ初期化のVEXコードが実行されます。

この時、コンスタントの値で初期化するという所に注目してください。言い換えると、 = の右側は関数などの戻り値によって初期化することはできません。以下の例は右辺がコンスタントではないためにエラーがでます。

vector @Cd = set(0, 1, 0); 
vector @Cd = anoise(@P);
vector @Cd = @P;