Created on | Updated on

Houdini でプログラミング:隣接するポイント

概要

mceclip0.png

Houdini での制作は基本的にノードベースであり、プログラミングを必要としません。
しかし Houdini がサポートする PythonやWrangle などの言語を使うことで、これらのノードを制御し、さらに柔軟な表現が可能になります。

mceclip3.pngmceclip8.png

本記事では、Wrangle で指定したポイントの隣接ポイントを走査する関数を紹介します。

int  neighbour(geometryint point_numint neighbour_num)

mceclip1.png
第二引数で指定したポイント番号につながっている次のポイント番号を返します。

第三引数は調べたい隣接ポイントで、その整数によって走査する方向が変わります。

mceclip3.pngmceclip2.png
上のスプレッドシートは、左から neighbour_num = 0, 1, 2, 3, 4 としたときの返り値です。
neighbour_num が ptnum の範囲外であったりその入力が存在しなかった場合、-1 を返します。

int  neighbourcount(geometryint point_num)

mceclip2.pngmceclip3.pngmceclip4.png
neighbour() や neoghbours() がポイント番号を返すのとは違い、この関数は第二引数で指定したポイントに接続するポイントの数を返します。

入力がない(隣接ポイントがない)場合や、ポイント番号が範囲外なら0を返します。

mceclip11.png
返り値を利用して、そのポイントが角(neighbourcount == 2)か辺(neighbourcount == 3)か内側(neighbourcount == 4)かがわかります。(大小関係はポリゴンに依ります)

mceclip12.pngmceclip13.pngmceclip14.png
左から、corners, edges, inner グループをそれぞれ blast ノードで削除したものです。

int [] neighbours(geometryint ptnum)

mceclip4.pngmceclip3.pngmceclip7.png
neighbour() とは異なり、第二引数に指定したポイント番号に隣接するポイント番号を返します。

この関数は ptnum とエッジを共有しているすべてのポイント番号が格納された int 型配列を返します。

mceclip7.pngこの関数は neighbour() と neighbourcount() を組み合わせて実現できます。neighbourcount() の返り値分だけ neighbour() を回すことですべての隣接ポイントを探索しています。

問題が解決しない場合は、Born Digital サポートまでお問い合わせ下さい。

※ 問い合わせ対応はBorn Digitalより製品をご購入頂きましたお客様のみのサービスとなります。ご了承下さい。
サポート問い合わせ