下記のように作成されているカーブから、直線状にあるポイントではなく、角にあるポイントをグループ化する方法です。
方法1 Facetノードを使用する
Facetを接続し、Remove Inline Pointsを有効にする。
これで直線状にあるポイントをすべて削除される。
残ったポイントをグループ化する。
最後にGroup Transferを使用してグループ情報をもとのカーブに転送。
オプションでポイントグループを指定。
Distance Thresholdで元のポイントからのどれくらいの距離をするかの閾値があるのでこの値を小さくする。
コーナーポイントがグループ化されていることがわかる。
方法2 VEXを使用する
各頂点の一番近いポイントから正規化したベクトルを計算し、そのベクトルの内積を求めます。
内積が0.99以下の場合、同一線上にないということでグループに適用します。
//隣接ポイントの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;
}
下記のように直線上にないポイントをグループ化することが可能です。