Created on | Updated on

カーブの直線上にないポイントをグループ化する

下記のように作成されているカーブから、直線状にあるポイントではなく、角にあるポイントをグループ化する方法です。

mceclip0.png

方法1 Facetノードを使用する

mceclip1.png

Facetを接続し、Remove Inline Pointsを有効にする。

mceclip2.png

これで直線状にあるポイントをすべて削除される。

mceclip3.png

残ったポイントをグループ化する。

mceclip4.png

最後にGroup Transferを使用してグループ情報をもとのカーブに転送。

mceclip5.png

オプションでポイントグループを指定。
Distance Thresholdで元のポイントからのどれくらいの距離をするかの閾値があるのでこの値を小さくする。

mceclip6.png

コーナーポイントがグループ化されていることがわかる。

mceclip7.png

 

方法2 VEXを使用する

各頂点の一番近いポイントから正規化したベクトルを計算し、そのベクトルの内積を求めます。
内積が0.99以下の場合、同一線上にないということでグループに適用します。

 

mceclip8.png

//隣接ポイントの1番目に近い隣接ポイントの番号を取得する
int a = neighbour(0,@ptnum,0);

//取得したポイント番号の位置を取得
vector ap = point(0,"P",a);

//隣接ポイントの2番目に近い隣接ポイントの番号を取得する
int b = neighbour(0,@ptnum,1);

//取得したポイント番号の位置を取得
vector bp = point(0,"P",b);

//得られた2つのポイントポジションから正規化したベクトルを返す
vector na = normalize(ap - @P);
vector nb = normalize(@P - bp);

//2つのベクトルから内積を計算
float d = dot(na,nb);

//内積結果が0.999以下をグループ
if (d < 0.999) {
@group_corner = 1;
}

 下記のように直線上にないポイントをグループ化することが可能です。

mceclip1.png

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

サポート問い合わせ