前回に続き、Houdini VEX勉強回。
今回は「近接ポイントの情報を取得する」VEX系の関数についてです。
近接ポイントとはこの場合、単純に距離の近いポイントのことを指します。
近接ポイントを取得するVEX関数は幾つかあります。
ここではnearpoint()とnearpoints()を取り上げようとおもいます。
表記の違いは名前に”s”があるかないか。まぎらわしい。
nearpoint()
一番近いポイント番号を取得する。
”一番近い”だから、取得するポイントは1コ。
最大どこまでの距離を探すか指定する。ポイントが見つからなければ-1。
int nearpoint(検出先の入力, 検索位置, 検索距離)
「作例」
一番近いポイント取得して色と高さをかえてみた。
ネットワークはこうじゃ!
VEXコードはこうじゃ!
vector pos = point(1, "P", 0); i@npt = nearpoint(0, pos, chf("dist")); if(@ptnum == @npt){ @Cd = {0, 0, 1}; @P += {0, 0.25, 0}; }
次じゃ!
nearpoints()
近接ポイントを探して、見つかったポイントを配列で返す。
先述のnearpoint()の配列版。
1番近いポイントに限らず、2番目3番目・・・と見つかった分だけ配列に格納する。
最大で何個のポイントを探すが指定する。
int nearpoints(検出先の入力, 検索位置, 検索距離, 見つけるポイントの最大個数)
「作例」
パーティクルの各点つないでみた。
(同様結果はConnect Adjacent Pieces(SOP)でもできる)
ネットワークはこうじゃ!
VEXコードはこうじゃ!
vector pos = point(0, "P", @ptnum); i[]@npts = nearpoints(0, pos, chf("dist"), chi("maxpt")); foreach(int pt; @npts){ if(pt>@ptnum && pt!=@ptnum){ int prim = addprim(geoself(), "polyline"); addvertex(geoself(), prim, @ptnum); addvertex(geoself(), prim, pt); } }
以上じゃ!
間違ってたら教えてほしいのじゃ!
鵜呑みにすると危ないじゃ!
これサンプルファイルじゃ!
VEX勉強シリーズはもう少し続くじゃ そのうち書きます。
[参考] マニュアル
nearpoint()
http://www.sidefx.com/docs/houdini/vex/functions/nearpoint
nearpoints()
http://www.sidefx.com/docs/houdini/vex/functions/nearpoints
コメント