VEX関数のヘルプの見方 2


篠島です。

前回のブログの続きで、addpoint()の返り値として得られたポイントナンバーを元にsetpointattrib()でデータの変更をして見ようと思います。

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

まず setpointattrib() のヘルプが下になります。関数のプロトタイプが7つあります。ポイントの位置を変更する場合、どのプロトタイプが使われるか分かりますか ? 位置は Vector で表されるので、プロトタイプ6が当てはまりますね。

Selection_429

 

プロトタイプを詳しく見てみましょう。

int setpointattrib(int geohandle, string name, int pt, vector value, string mode=”set”)

パラメーターはgeohandlenameptvaluemode の5つになります。geohandleは 前のブログと同様にgeoself() を指定し自分自身のジオメトリを指定します。 string name は変更したいアトリビュートの名前、ここでは 位置を変更したいのでP とします。pt は変更したいポイント番号です。そしてvalueが実際の値です。mode = ”set” と書かれているのはデフォルトでこの関数は変数をセットするのに使われます。mode = ”set” の様にデフォルトの値が指定されている場合は、関数を呼び出す時にそのパラメーターを指定する必要はありません。なので本当は関数の呼び出しに5つのデータを渡す必要がありますが、実際には4つ渡すだけで良いのです。

なのでAttribute Wrangleで書くと下のようになります。下のコードが意味することは、ジオメトリのポイント1の複製を作り、その位置を{4,4,4}に変更するという意味です。

Selection_432

Selection_431

前のブログで説明しましたが、 addpoint() の返り値はポイントの番号でしたね。それを下のようにmyPtという変数に入れています。

int myPt = addpoint(geoself(), 1);

そしてsetpointattrib()の ポイント番号を指定する部分でこのmyPtのデータを入れることでどのポイントを編集するかを指定しているわけです。

最後に1つ注意点。気づいた方もいるかもしれませんが、setpointattrib()もまた関数の返り値としてintのデータを出力します。ですがヘルプには一体どのような結果が吐き出されるのか書かれていません。Houdiniのヘルプは常に進化していってますが、全ての情報がヘルプに載っているわけではないので注意が必要です。Selection_433

ヘルプに書いてないならどうすれば良いのか? その場合は自分で実際に変数を作り、値を代入してみて、どんな場合にどんな数値が入るのかを自分で試していく事になります。こういうデバッグスキルもHoudiniを扱っていく上で重要になってきます。