Houdini AttributeWrangleについて

Houdini備忘録

AttributeWrangleについて

2016-01-24_213346

 

AttributeWrangleをダブルクリックして中に入るとAttributeVopがある。

2016-01-24_213358

 

さらにAttributeVopをダブルクリックして中に入るとSnippetがあるが、
AttributeWrangleに書いたコードは実際にはこのSnippetに記述されるように
なっている。

2016-01-24_213437

2016-01-24_213500

肝要なのはこのSnippetがCVEXコンテキストで実行され
特定のコンテキスト内で実行されるわけではないこと。
よって、以下のグループ系関数を
AttributeWrangleに記述するとエラーとなる。

// pop,sopコンテキストのみで有効な関数
void addgroup(string group_name, int point_number)
int ingroup(string group_name, int point_number)
void newgroup(string group_name)
void removegroup(string group_name, int point_number)

 

 

ついでにCVEXコンテキストで有効なグループ系の関数をまとめてみた。

// stringには0-10や@Cd.x>0.5のような一時的なグループを使用することができる
// 空の文字列の場合すべてのポイント(プリミティブ)に相当する
int [] expandpointgroup(string filename, string groupname)
int [] expandpointgroup(int input, string groupname)
int [] expandprimgroup(string filename, string groupname)
int [] expandprimgroup(int input, string groupname)

// ポイント番号で指定したポイントが指定したグループ内にあれば1を返す
int inpointgroup(string filename, string groupname, int pointnum)
int inpointgroup(int input, string groupname, int pointnum)
int inprimgroup(string filename, string groupname, int primnum)
int inprimgroup(int input, string groupname, int primnum)

// ジオメトリの指定したグループ内のポイントの数を返す
int npointsgroup(string filename, string groupname)
int npointsgroup(int input, string groupname)

// ジオメトリの指定したグループ内のプリミティブの数を返す
int nprimitives(string filename, string groupname)
int nprimitives(int input, string groupname)

// 指定グループにポイント(プリミティブ)を含める
// その際valueには0以外の値を設定する
// 0を設定した場合にはグループからの除外を意味する
// グループが存在しなかった場合は【グループが作成される】
int setpointgroup(int geohandle, string name, int pt, int value, string mode=”set”)
int setprimgroup(int geohandle, string name, int prim, int value, string mode=”set”)

// 現在のポイント/エッジ/プリミティブ/パーティクルが指定グループ内にあるかは以下のやり方で判定可能
if(@group_グループ名 == 1)

// グループへの追加、グループからの解除
@group_グループ名 = 1;// グループへエレメントを追加
@group_グループ名 = 0;// グループからエレメントを削除