ループするポリライン

ループ(連環)しているポリラインはそれぞれの状態のポイントインデックスの終点が変わる。ポリラインを扱う時はこのズレに注意する必要がある。

Close

プリミティブが閉じている状態。

0から3のポイントで構成された四角形ポリゴン。ポイント数は4つ。

// 閉じたプリミティブ
int pts[] = primpoints(0, @primnum);
printf('pts[-1]: ' + sprintf('%g', pts[-1]) + '\n');
printf('pts[-2]: ' + sprintf('%g', pts[-2]) + '\n');
// pts[-1]: 3
// pts[-2]: 2

ポイントインデックス[-1]は3になる。

int isClosed = primintrinsic(0, "closed", 0);

プリミティブが閉じているか、開いているか(=ポリライン)はこれで確認できる。閉じていれば1が返る。

Unroll with New Points

プリミティブが開いているが始点と終点は重なっているだけの状態。

0と4が重なった状態の四角形ポリライン。ポイント数は5つ。

// 始点・終点が重なる開いたポリライン
int pts[] = primpoints(0, @primnum);
printf('pts[-1]: ' + sprintf('%g', pts[-1]) + '\n');
printf('pts[-2]: ' + sprintf('%g', pts[-2]) + '\n');
// pts[-1]: 4
// pts[-2]: 3

ポイントインデックス[-1]は4になる。

Unroll with Shared Points

プリミティブが開いていて、始点と終点が共有ポイント

0から3のポイントで構成された四角形ポリライン。ポイント数は4つ。Unroll with New PointsをFuseすることでも同じ状態になる。

// 始点・終点が結合している開いたポリライン
int pts[] = primpoints(0, @primnum);
printf('pts[-1]: ' + sprintf('%g', pts[-1]) + '\n');
printf('pts[-2]: ' + sprintf('%g', pts[-2]) + '\n');
// pts[-1]: 0
// pts[-2]: 3

ポイントインデックス[-1]は0になる。

タイトルとURLをコピーしました