概要
Houdini での制作は基本的にノードベースであり、プログラミングを必要としません。
しかし Houdini がサポートする PythonやWrangle などの言語を使うことで、これらのノードを制御し、さらに柔軟な表現が可能になります。
本記事では、Wrangle で指定したポイントの隣接ポイントを走査する関数を紹介します。
int neighbour(geometry, int point_num, int neighbour_num)
第二引数で指定したポイント番号につながっている次のポイント番号を返します。
第三引数は調べたい隣接ポイントで、その整数によって走査する方向が変わります。
上のスプレッドシートは、左から neighbour_num = 0, 1, 2, 3, 4 としたときの返り値です。
neighbour_num が ptnum の範囲外であったりその入力が存在しなかった場合、-1 を返します。
int neighbourcount(geometry, int point_num)
neighbour() や neoghbours() がポイント番号を返すのとは違い、この関数は第二引数で指定したポイントに接続するポイントの数を返します。
入力がない(隣接ポイントがない)場合や、ポイント番号が範囲外なら0を返します。
返り値を利用して、そのポイントが角(neighbourcount == 2)か辺(neighbourcount == 3)か内側(neighbourcount == 4)かがわかります。(大小関係はポリゴンに依ります)
左から、corners, edges, inner グループをそれぞれ blast ノードで削除したものです。
int [] neighbours(geometry, int ptnum)
neighbour() とは異なり、第二引数に指定したポイント番号に隣接するポイント番号を返します。
この関数は ptnum とエッジを共有しているすべてのポイント番号が格納された int 型配列を返します。
この関数は neighbour() と neighbourcount() を組み合わせて実現できます。neighbourcount() の返り値分だけ neighbour() を回すことですべての隣接ポイントを探索しています。