[Houdini] バラバラなptnumをなんとかする

例えばなんですが、↓こんな感じの状態のポイントを、ちゃんときれいに丸に繋ぎたいと思ったらどうしましょうか。


こんな感じでただの円であれば別にcircle使って置き直せばいいんですけどね。
そうじゃない場合もあるじゃないですか。起き直せない事情が。ね。
あるんですよ察してくれ。

最終的にはaddでポイントを繋ぎたいなと思うんですが、いかんせんptnumがバラッバラ。
通常そんな時に登場するのはSort SOPですよね。
なんだこれで解決!
と思いきやどれもうまくいかないんですね。

例えばv@P.xを元にとか、またはある点からの距離でsortしたらこう。

よし出来てない。立派なエラーです。
違う違う、違うんだよ。この場合望んでるのは完全に丸い感じのやつ。
わかるじゃん配置でなんとなく。

でもsortにあるメニューじゃ難しいしどうしようかなぁ、と思った時に使えるのがBy Attribute
これはアトリビュートの大小を判断してsortしてくれるすごく便利なやつです。
当然、同じ値が入らないように気をつけないといけないですし、完全に一手間二手間多いんですが、自由度に関しては段違いです。

で、それを使ってどうするかというと、まずはwrangleなりvopなりで一意の値を作ります。
今回使うのはatan2関数です。

詳しい解説はリンク先を見てもらうとしてざっくり説明しますと、xとyの値を渡すと角度的なものが返ってきます(クソ)。
で、これを使ってptnumをsortしてやると、これこの通り。


じゃーん

ただしこの方法は、Convex(凸包)な形状でしかうまくいかないと思うので、条件には制限があるのですが、とりあえず今回の僕の要求としては問題なく動作したので、メモまでに記しておきます。
あとこの方法で作った場合、始点や向きが思ったところと違う!みたいな問題が出てくることもあるかと思いますが、そういう場合はsortのshiftなりreverseなりを使って上手いこと調整してあげて下さい。

サンプルのhipファイルを用意したので、興味のある方はこちらからDLして下さい。
H16で作ってあります。

あともっと上手い方法ご存じの方いたら教えてください!w
よろしくおねがいしますー。

コメントを残す

メールアドレスが公開されることはありません。