久しぶりのAnimation nodes。メッシュボリューム内に任意のポイントがあるかどうかはメッシュのBVHTreeを作成して「Is Inside Volume」ノードで調査しますが結果はポイントの数だけのBooleanリストとして出力されます。で、ここからボリュームの内側あるいは外側のポイント(Vector)のリストを作成したい場合、「Expression」ノードを使用してフィルタリングすることになります。

青が外側、赤が内側のポイント

以下サンプルのblendファイル、Animation Nodes + Extra Nodes2.2.2を使用しています。

[x for x,y in zip(positions,insides) if y==True]

エクスプレッションはPythonで表記します。VectorリストとBooleanリストをzipで対にしたイテレータを作成し、それぞれx,yで取り出しています。ボリューム内にあるポイントを取り出すなら「y==True」を条件にして、x(Vecor要素)をリストに加えます。リスト内包表記ですね。

ループにVectorリストとBooleanリストを入力して「Switch」ノードを使用する事も考えられますが「Switch」ノードは必ず「If True」と「If False」でそれぞれ値を出力してしまします。Falseの場合は出力しないということが出来ないため今回の用途には向きません。

参考: Expression [docs.animation-nodes.com]

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です