VEX関数のヘルプの見方 1


篠島です。

Wrangleノードを勉強していてVEX関数のヘルプを見る際に、プログラミングの経験が無い人だとヘルプが何を言っているのか非常にわかりにくいと思います。そこでプログラミング未経験の人でも分かるようにVEXのヘルプの読み方を説明しようと思います。

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

簡単な例として addpoint() という関数のヘルプを見てみるとします。addpointはポイントを追加するだけの単純な関数です。ヘルプ内で関数の使い方が2つ書いてあります。これらは関数のプロトタイプと呼ばれ、関数がどんなデータを受け取り、どんなデータを吐き出すのかを簡潔に書いたものです。
下のヘルプの画面だとプロトタイプが2つあるのが分かると思います。ここで、()内に書かれたものがパラメーターと呼ばれ、その関数が受け取るデータです。そして関数名の前に int とありますが、これが関数が出力するデータの型になります。intとはInteger(整数)の事です。プロトタイプが2つある理由はパラメーターが異なるからです。このaddpoint()関数は2つの異なるパラメーターを受け取り、それによって異なる処理をします。Selection_411

 

まず、プロトタイプ1を見てみます。

int addpoint(int geohandle, int point_number)

int geohandle と int point_number というデータを受け取ると読めます。このパラメーターの int geohandle と int point_number の int がデータの型を表し、geohandle と point_number はその型にどんなデータが入るのかを分かりやすくするために名前をつけたものです。
int geohandle というのは、どのオブジェクトにポイントを追加するのかを指定するもので、ここでは自分自身のオブジェクトを指す geoself() を指定します。そしてpoint_number は英語の説明を見るとわかりますが、既にあるポイントと同じアトリビュートを持つポイントを作成します。

下のように2つのポイントを持つラインにAttribute Wrangleによってaddpoint()を書くと次の様になります。

Selection_418

前のブログでも説明しましたが、Attribute WrangleのRun Overがポイントだと全てのポイントの数だけ関数が実行されてしまうので、今回はわかりやすくRun OverをDetailに指定して1回だけ実行するようにします。point_number の部分で1を指定しています。これはオリジナルのジオメトリのポイント番号1と同じアトリビュートを持つポイントを作ると言うことです。

Selection_417

Geometry Spreadsheet を確認すると、新しく作られたポイント (ポイント番号 2) のアトリビュートがポイント番号1と全く同じなのが確認出来ますね。

Selection_427

 

 

次にプロトタイプ2の場合の例です。

int addpoint(int geohandle, vector pos)

今度は int point_number の代わりに vector pos のデータを受け取ります。ここで指定したポジションの位置に新しいポイントが作られます。先ほどと同じラインオブジェクトに次のようなコードを書くとします。ベクトルの書き方は{} の中に3つの値を入れることで書くことが出来ます。

Selection_423

すると、新しく出来たポイント2の位置がWrangleノード内で指定した位置に作られているのが確認できます。

Selection_426

addpoint() は関数の戻り値として ポイントナンバーを返します。そしてそのポイントナンバーを元に setpointattrib() など別の関数で更に処理をしていくという流れになります。ちょっと複雑になってきますので、次のブログで addpoint() で作ったポイントを setpointattrib() で編集してみようと思います。