@flighthq/path-boolean 0.5.1-next.3302.76ece6b → 0.5.1-next.4304.322dc96
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/.tsbuildinfo.contract +1 -0
- package/dist/.tsbuildinfo.runtime +1 -0
- package/dist/booleanPaths.d.ts +33 -6
- package/dist/booleanPaths.d.ts.map +1 -1
- package/dist/booleanPaths.js +42 -3
- package/dist/booleanPaths.js.map +1 -1
- package/dist/contract.d.ts +12 -8
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +11 -8
- package/dist/contract.js.map +1 -1
- package/dist/contract.path-boolean-types.d.ts +4 -0
- package/dist/contract.path-boolean-types.d.ts.map +1 -0
- package/dist/contract.path-boolean-types.js +2 -0
- package/dist/contract.path-boolean-types.js.map +1 -0
- package/dist/explainPathBoolean.d.ts +15 -3
- package/dist/explainPathBoolean.d.ts.map +1 -1
- package/dist/explainPathBoolean.js +35 -9
- package/dist/explainPathBoolean.js.map +1 -1
- package/dist/index.d.ts +3 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -8
- package/dist/index.js.map +1 -1
- package/dist/martinezKernel.d.ts +44 -4
- package/dist/martinezKernel.d.ts.map +1 -1
- package/dist/martinezKernel.js +777 -559
- package/dist/martinezKernel.js.map +1 -1
- package/dist/offsetPath.d.ts +15 -2
- package/dist/offsetPath.d.ts.map +1 -1
- package/dist/offsetPath.js +205 -215
- package/dist/offsetPath.js.map +1 -1
- package/dist/pathBoolean.d.ts +53 -0
- package/dist/pathBoolean.d.ts.map +1 -0
- package/dist/pathBoolean.js +115 -0
- package/dist/pathBoolean.js.map +1 -0
- package/dist/pathBooleanCompat.d.ts +3 -0
- package/dist/pathBooleanCompat.d.ts.map +1 -0
- package/dist/pathBooleanCompat.js +2 -0
- package/dist/pathBooleanCompat.js.map +1 -0
- package/dist/resolvePathRegions.d.ts +8 -2
- package/dist/resolvePathRegions.d.ts.map +1 -1
- package/dist/resolvePathRegions.js +11 -3
- package/dist/resolvePathRegions.js.map +1 -1
- package/dist/simplifyPath.d.ts +9 -2
- package/dist/simplifyPath.d.ts.map +1 -1
- package/dist/simplifyPath.js +12 -2
- package/dist/simplifyPath.js.map +1 -1
- package/dist/unionAllPaths.d.ts +9 -2
- package/dist/unionAllPaths.d.ts.map +1 -1
- package/dist/unionAllPaths.js +23 -8
- package/dist/unionAllPaths.js.map +1 -1
- package/dist/writePathBooleanContours.d.ts +8 -2
- package/dist/writePathBooleanContours.d.ts.map +1 -1
- package/dist/writePathBooleanContours.js +16 -4
- package/dist/writePathBooleanContours.js.map +1 -1
- package/package.json +5 -4
- package/src/booleanPaths.test.ts +237 -114
- package/src/explainPathBoolean.test.ts +35 -21
- package/src/fuzzInvariants.test.ts +241 -154
- package/src/martinezKernel.test.ts +334 -328
- package/src/offsetPath.test.ts +296 -166
- package/src/pathBoolean.test.ts +95 -0
- package/src/resolvePathRegions.test.ts +41 -30
- package/src/simplifyPath.test.ts +143 -112
- package/src/unionAllPaths.test.ts +93 -61
- package/src/writePathBooleanContours.test.ts +44 -6
package/dist/offsetPath.js
CHANGED
|
@@ -1,102 +1,42 @@
|
|
|
1
|
+
// Generated from crates/flight-path-boolean/src/offset_path.rs by flight-compiler.
|
|
2
|
+
// Rust is authoritative; run `npm run generate` after changing it.
|
|
1
3
|
import { flattenPath } from '@flighthq/path/contract';
|
|
2
4
|
import { resolvePathRegions } from "./resolvePathRegions.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
// grows regardless of input winding. Over-deflating a region past self-collapse drops it, so the result
|
|
12
|
-
// can be an empty path (no commands).
|
|
13
|
-
export function offsetPath(out, pathBooleanKernel, path, delta, options) {
|
|
14
|
-
const join = options?.join ?? 'miter';
|
|
15
|
-
const end = options?.end ?? 'butt';
|
|
16
|
-
const miterLimit = options?.miterLimit ?? DEFAULT_MITER_LIMIT;
|
|
17
|
-
const arcTolerance = options?.arcTolerance ?? DEFAULT_ARC_TOLERANCE;
|
|
18
|
-
const contours = flattenPath(path, options?.tolerance);
|
|
19
|
-
// Coincident-point tolerance, made relative to the input's coordinate extent so the same corners
|
|
20
|
-
// collapse whether the contour is in pixels or micrometres; falls back to a fixed absolute when the
|
|
21
|
-
// extent is degenerate. Squared to match the squared-distance comparisons it feeds.
|
|
22
|
-
const pointEpsSq = getContourPointEps(contours) ** 2;
|
|
23
|
-
const rawRings = [];
|
|
24
|
-
for (const contour of contours) {
|
|
25
|
-
const closed = isClosedContour(contour, pointEpsSq);
|
|
26
|
-
const vertices = getCleanContourVertices(contour, closed, pointEpsSq);
|
|
27
|
-
if (closed) {
|
|
28
|
-
// Fewer than three distinct vertices enclose no area to offset.
|
|
29
|
-
if (vertices.length < 6)
|
|
30
|
-
continue;
|
|
31
|
-
const orientation = getRingOrientationSign(vertices);
|
|
32
|
-
const ring = buildOffsetRing(vertices, delta * orientation, NO_CAPS, join, end, miterLimit, arcTolerance);
|
|
33
|
-
if (ring.length < 6)
|
|
34
|
-
continue;
|
|
35
|
-
// Drop a ring deflated past self-collapse. Such a ring either fully inverts (its winding flips) or
|
|
36
|
-
// folds back so an inward offset fails to reduce the enclosed area — the global signature of a full
|
|
37
|
-
// collapse. (Partial self-overlap that stays same-signed is left for the positive-fill union below.)
|
|
38
|
-
const offsetArea = getRingSignedArea(ring);
|
|
39
|
-
const inverted = Math.sign(offsetArea) !== orientation;
|
|
40
|
-
const notReduced = delta < 0 && Math.abs(offsetArea) >= Math.abs(getRingSignedArea(vertices));
|
|
41
|
-
if (inverted || notReduced)
|
|
42
|
-
continue;
|
|
43
|
-
// Orient the surviving ring counter-clockwise (positive area) so the positive-fill self-union keeps
|
|
44
|
-
// it whatever the source winding was.
|
|
45
|
-
rawRings.push(offsetArea < 0 ? reverseVertexLoop(ring) : ring);
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
// Fewer than two distinct vertices form no segment to stroke.
|
|
49
|
-
if (vertices.length < 4)
|
|
50
|
-
continue;
|
|
51
|
-
const caps = new Set([0, vertices.length / 2 - 1]);
|
|
52
|
-
const loop = getOpenContourLoop(vertices);
|
|
53
|
-
const ring = buildOffsetRing(loop, Math.abs(delta), caps, join, end, miterLimit, arcTolerance);
|
|
54
|
-
// A stroked slab always bounds a positive-area band; orient it counter-clockwise so positive-fill
|
|
55
|
-
// union keeps it regardless of which way the doubled loop happened to wind.
|
|
56
|
-
if (ring.length >= 6)
|
|
57
|
-
rawRings.push(getRingSignedArea(ring) < 0 ? reverseVertexLoop(ring) : ring);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
// Self-union the raw rings under positive fill (Clipper's InflatePaths cleanup fill): where a concave
|
|
61
|
-
// corner's inner-miter emission overshoots on a feature narrower than 2·|delta|, it dissolves the
|
|
62
|
-
// negatively-wound self-overlap that non-zero fill would have kept; it also merges touching rings and
|
|
63
|
-
// emits a clean, hole-correct outline (empty ring set → empty path).
|
|
64
|
-
resolvePathRegions(out, pathBooleanKernel, rawRings, 'positive');
|
|
65
|
-
}
|
|
66
|
-
// Assembles one offset ring for a closed vertex loop by walking its vertices and emitting, at each, the
|
|
67
|
-
// join (or end cap, for the flagged terminal indices of an open-path loop) that bridges the offset end
|
|
68
|
-
// of the previous edge to the offset start of the next. `signedDelta` is the outward offset distance;
|
|
69
|
-
// the outward direction is the per-edge right normal, so a positively-oriented loop grows on positive
|
|
70
|
-
// `signedDelta`. `capIndices` is empty for a genuine closed contour and holds the two terminal indices
|
|
71
|
-
// for an open contour's doubled loop.
|
|
5
|
+
const DEFAULT_ARC_TOLERANCE = 0.25;
|
|
6
|
+
const DEFAULT_MITER_LIMIT = 2.0;
|
|
7
|
+
const DEFAULT_FLATTEN_TOLERANCE = 0.25;
|
|
8
|
+
const HALF_PI = Math.PI / 2.0;
|
|
9
|
+
const POINT_EPS = 1e-9;
|
|
10
|
+
const POINT_EPS_RELATIVE = 1e-9;
|
|
11
|
+
const PARALLEL_EPS = 1e-12;
|
|
12
|
+
const TWO_PI = Math.PI * 2.0;
|
|
72
13
|
function buildOffsetRing(vertices, signedDelta, capIndices, join, end, miterLimit, arcTolerance) {
|
|
73
|
-
const count = vertices.length / 2;
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
for (let k = 0; k < count; k++) {
|
|
14
|
+
const count = Math.trunc(vertices.length / 2);
|
|
15
|
+
let dirX = new Array(count).fill(0.0);
|
|
16
|
+
let dirY = new Array(count).fill(0.0);
|
|
17
|
+
let normalX = new Array(count).fill(0.0);
|
|
18
|
+
let normalY = new Array(count).fill(0.0);
|
|
19
|
+
for (let k = 0; k < count; k += 1) {
|
|
80
20
|
const kn = (k + 1) % count;
|
|
81
21
|
const dx = vertices[2 * kn] - vertices[2 * k];
|
|
82
22
|
const dy = vertices[2 * kn + 1] - vertices[2 * k + 1];
|
|
83
|
-
const length = Math.
|
|
84
|
-
const inverse = length > 0 ? 1 / length : 0;
|
|
23
|
+
const length = Math.sqrt(dx * dx + dy * dy);
|
|
24
|
+
const inverse = length > 0.0 ? 1.0 / length : 0.0;
|
|
85
25
|
dirX[k] = dx * inverse;
|
|
86
26
|
dirY[k] = dy * inverse;
|
|
87
27
|
normalX[k] = dirY[k];
|
|
88
28
|
normalY[k] = -dirX[k];
|
|
89
29
|
}
|
|
90
|
-
|
|
91
|
-
for (let k = 0; k < count; k
|
|
92
|
-
const previous = (k - 1
|
|
30
|
+
let ring = [];
|
|
31
|
+
for (let k = 0; k < count; k += 1) {
|
|
32
|
+
const previous = (k + count - 1) % count;
|
|
93
33
|
const vx = vertices[2 * k];
|
|
94
34
|
const vy = vertices[2 * k + 1];
|
|
95
35
|
const previousEndX = vx + signedDelta * normalX[previous];
|
|
96
36
|
const previousEndY = vy + signedDelta * normalY[previous];
|
|
97
37
|
const thisStartX = vx + signedDelta * normalX[k];
|
|
98
38
|
const thisStartY = vy + signedDelta * normalY[k];
|
|
99
|
-
if (capIndices.
|
|
39
|
+
if (capIndices.includes(k)) {
|
|
100
40
|
emitOffsetEndCap(ring, vx, vy, previousEndX, previousEndY, thisStartX, thisStartY, dirX[previous], dirY[previous], dirX[k], dirY[k], Math.abs(signedDelta), end, arcTolerance);
|
|
101
41
|
}
|
|
102
42
|
else {
|
|
@@ -105,214 +45,264 @@ function buildOffsetRing(vertices, signedDelta, capIndices, join, end, miterLimi
|
|
|
105
45
|
}
|
|
106
46
|
return ring;
|
|
107
47
|
}
|
|
108
|
-
// Emits the terminal cap of an open path at vertex (vx, vy), bridging the offset end of the incoming
|
|
109
|
-
// side (previousEnd) to the offset start of the outgoing side (thisStart), which sit on opposite sides
|
|
110
|
-
// of the terminal. `butt` connects them flat, `square` extends both out past the terminal by `radius`,
|
|
111
|
-
// and `round` sweeps a half-circle of that radius around the terminal. `previousEnd` is emitted first;
|
|
112
|
-
// `thisStart` is always emitted last.
|
|
113
48
|
function emitOffsetEndCap(ring, vx, vy, previousEndX, previousEndY, thisStartX, thisStartY, previousDirX, previousDirY, thisDirX, thisDirY, radius, end, arcTolerance) {
|
|
114
|
-
ring.push(previousEndX
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
49
|
+
ring.push(previousEndX);
|
|
50
|
+
ring.push(previousEndY);
|
|
51
|
+
switch (end) {
|
|
52
|
+
case 'square':
|
|
53
|
+
ring.push(previousEndX + radius * previousDirX);
|
|
54
|
+
ring.push(previousEndY + radius * previousDirY);
|
|
55
|
+
ring.push(thisStartX - radius * thisDirX);
|
|
56
|
+
ring.push(thisStartY - radius * thisDirY);
|
|
57
|
+
break;
|
|
58
|
+
case 'round':
|
|
59
|
+
const startAngle = Math.atan2(previousEndY - vy, previousEndX - vx);
|
|
60
|
+
const midX = Math.cos(startAngle + HALF_PI);
|
|
61
|
+
const midY = Math.sin(startAngle + HALF_PI);
|
|
62
|
+
const sweep = (midX * previousDirX + midY * previousDirY >= 0.0 ? 1.0 : -1.0) * Math.PI;
|
|
63
|
+
pushOffsetArc(ring, vx, vy, radius, startAngle, sweep, arcTolerance);
|
|
64
|
+
break;
|
|
65
|
+
case 'butt':
|
|
66
|
+
break;
|
|
126
67
|
}
|
|
127
|
-
ring.push(thisStartX
|
|
68
|
+
ring.push(thisStartX);
|
|
69
|
+
ring.push(thisStartY);
|
|
128
70
|
}
|
|
129
|
-
// Emits the join at vertex (vx, vy) on the convex (gap) side, bridging the offset end of the previous
|
|
130
|
-
// edge (previousEnd) to the offset start of the next edge (thisStart). On the concave side the two
|
|
131
|
-
// offset edges overlap; the outline routes back through the original vertex (previousEnd → vertex →
|
|
132
|
-
// thisStart), leaving a self-crossing spur with consistent winding for the kernel's self-union to
|
|
133
|
-
// resolve. `miter` extends the two offset edges to their apex, falling back to a bevel
|
|
134
|
-
// when that apex is farther than `miterLimit * |signedDelta|`; `bevel` chamfers straight across;
|
|
135
|
-
// `round` sweeps an arc of radius `|signedDelta|`; `square` extends both edges by `|signedDelta|`.
|
|
136
|
-
// `previousEnd` is emitted first; `thisStart` is always emitted last.
|
|
137
71
|
function emitOffsetJoin(ring, vx, vy, previousEndX, previousEndY, thisStartX, thisStartY, previousDirX, previousDirY, thisDirX, thisDirY, signedDelta, join, miterLimit, arcTolerance) {
|
|
138
|
-
ring.push(previousEndX
|
|
72
|
+
ring.push(previousEndX);
|
|
73
|
+
ring.push(previousEndY);
|
|
139
74
|
const turn = previousDirX * thisDirY - previousDirY * thisDirX;
|
|
140
|
-
const convex = turn * signedDelta > 0;
|
|
75
|
+
const convex = turn * signedDelta > 0.0;
|
|
141
76
|
if (!convex) {
|
|
142
|
-
// Inner (overlap) corner: emit where the two offset edge lines cross — the inner miter point. For a
|
|
143
|
-
// mild corner this is the correct clean vertex; for a feature narrower than 2·|delta| it overshoots
|
|
144
|
-
// past the offset edges, and the resulting self-crossing spur is dissolved by the positive-fill
|
|
145
|
-
// self-union, which drops the negatively-wound overshoot region. Positive fill is what makes this
|
|
146
|
-
// robust where non-zero fill (which keeps the overshoot) could not.
|
|
147
77
|
if (Math.abs(turn) > PARALLEL_EPS) {
|
|
148
78
|
const advance = ((thisStartX - previousEndX) * thisDirY - (thisStartY - previousEndY) * thisDirX) / turn;
|
|
149
|
-
ring.push(previousEndX + advance * previousDirX
|
|
79
|
+
ring.push(previousEndX + advance * previousDirX);
|
|
80
|
+
ring.push(previousEndY + advance * previousDirY);
|
|
150
81
|
}
|
|
151
82
|
}
|
|
152
83
|
else {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
84
|
+
switch (join) {
|
|
85
|
+
case 'miter':
|
|
86
|
+
if (Math.abs(turn) > PARALLEL_EPS) {
|
|
87
|
+
const advance = ((thisStartX - previousEndX) * thisDirY - (thisStartY - previousEndY) * thisDirX) / turn;
|
|
88
|
+
const apexX = previousEndX + advance * previousDirX;
|
|
89
|
+
const apexY = previousEndY + advance * previousDirY;
|
|
90
|
+
const miterLength = Math.sqrt((apexX - vx) * (apexX - vx) + (apexY - vy) * (apexY - vy));
|
|
91
|
+
if (miterLength <= miterLimit * Math.abs(signedDelta)) {
|
|
92
|
+
ring.push(apexX);
|
|
93
|
+
ring.push(apexY);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
break;
|
|
97
|
+
case 'square':
|
|
98
|
+
const squareExtent = Math.abs(signedDelta);
|
|
99
|
+
ring.push(previousEndX + squareExtent * previousDirX);
|
|
100
|
+
ring.push(previousEndY + squareExtent * previousDirY);
|
|
101
|
+
ring.push(thisStartX - squareExtent * thisDirX);
|
|
102
|
+
ring.push(thisStartY - squareExtent * thisDirY);
|
|
103
|
+
break;
|
|
104
|
+
case 'round':
|
|
105
|
+
const radius = Math.abs(signedDelta);
|
|
106
|
+
const startAngle = Math.atan2(previousEndY - vy, previousEndX - vx);
|
|
107
|
+
const endAngle = Math.atan2(thisStartY - vy, thisStartX - vx);
|
|
108
|
+
pushOffsetArc(ring, vx, vy, radius, startAngle, getShortSweep(startAngle, endAngle), arcTolerance);
|
|
109
|
+
break;
|
|
110
|
+
case 'bevel':
|
|
111
|
+
break;
|
|
168
112
|
}
|
|
169
|
-
else if (join === 'round') {
|
|
170
|
-
const radius = Math.abs(signedDelta);
|
|
171
|
-
const startAngle = Math.atan2(previousEndY - vy, previousEndX - vx);
|
|
172
|
-
const endAngle = Math.atan2(thisStartY - vy, thisStartX - vx);
|
|
173
|
-
pushOffsetArc(ring, vx, vy, radius, startAngle, getShortSweep(startAngle, endAngle), arcTolerance);
|
|
174
|
-
}
|
|
175
|
-
// A bevel adds nothing between previousEnd and thisStart — the straight edge is the chamfer.
|
|
176
113
|
}
|
|
177
|
-
ring.push(thisStartX
|
|
114
|
+
ring.push(thisStartX);
|
|
115
|
+
ring.push(thisStartY);
|
|
178
116
|
}
|
|
179
|
-
// Removes consecutive coincident points from a flattened contour and, for a closed contour, the closing
|
|
180
|
-
// vertex that repeats the first, yielding a clean `[x0, y0, ...]` vertex loop with no zero-length edges.
|
|
181
|
-
// `pointEpsSq` is the squared coincidence tolerance (magnitude-relative, computed by the caller).
|
|
182
117
|
function getCleanContourVertices(contour, closed, pointEpsSq) {
|
|
183
|
-
|
|
184
|
-
|
|
118
|
+
let out = [];
|
|
119
|
+
let i = 0;
|
|
120
|
+
while (i < contour.length) {
|
|
185
121
|
const x = contour[i];
|
|
186
122
|
const y = contour[i + 1];
|
|
187
123
|
if (out.length >= 2) {
|
|
188
124
|
const dx = x - out[out.length - 2];
|
|
189
125
|
const dy = y - out[out.length - 1];
|
|
190
|
-
if (dx * dx + dy * dy <= pointEpsSq)
|
|
126
|
+
if (dx * dx + dy * dy <= pointEpsSq) {
|
|
127
|
+
i += 2;
|
|
191
128
|
continue;
|
|
129
|
+
}
|
|
192
130
|
}
|
|
193
|
-
out.push(x
|
|
131
|
+
out.push(x);
|
|
132
|
+
out.push(y);
|
|
133
|
+
i += 2;
|
|
194
134
|
}
|
|
195
135
|
if (closed && out.length >= 4) {
|
|
196
136
|
const dx = out[0] - out[out.length - 2];
|
|
197
137
|
const dy = out[1] - out[out.length - 1];
|
|
198
|
-
if (dx * dx + dy * dy <= pointEpsSq)
|
|
199
|
-
out.length
|
|
138
|
+
if (dx * dx + dy * dy <= pointEpsSq) {
|
|
139
|
+
out = [...out.slice(0, out.length - 2)];
|
|
140
|
+
}
|
|
200
141
|
}
|
|
201
142
|
return out;
|
|
202
143
|
}
|
|
203
|
-
// The coincident-point tolerance for a contour set, scaled to the largest coordinate span across all
|
|
204
|
-
// contours so it tracks the input magnitude; falls back to a fixed absolute for degenerate extent.
|
|
205
144
|
function getContourPointEps(contours) {
|
|
206
|
-
let minX =
|
|
207
|
-
let minY =
|
|
208
|
-
let maxX =
|
|
209
|
-
let maxY =
|
|
145
|
+
let minX = Number.POSITIVE_INFINITY;
|
|
146
|
+
let minY = Number.POSITIVE_INFINITY;
|
|
147
|
+
let maxX = Number.NEGATIVE_INFINITY;
|
|
148
|
+
let maxY = Number.NEGATIVE_INFINITY;
|
|
210
149
|
for (const contour of contours) {
|
|
211
|
-
|
|
150
|
+
let i = 0;
|
|
151
|
+
while (i < contour.length) {
|
|
212
152
|
const x = contour[i];
|
|
213
153
|
const y = contour[i + 1];
|
|
214
|
-
if (x < minX)
|
|
154
|
+
if (x < minX) {
|
|
215
155
|
minX = x;
|
|
216
|
-
|
|
156
|
+
}
|
|
157
|
+
if (x > maxX) {
|
|
217
158
|
maxX = x;
|
|
218
|
-
|
|
159
|
+
}
|
|
160
|
+
if (y < minY) {
|
|
219
161
|
minY = y;
|
|
220
|
-
|
|
162
|
+
}
|
|
163
|
+
if (y > maxY) {
|
|
221
164
|
maxY = y;
|
|
165
|
+
}
|
|
166
|
+
i += 2;
|
|
222
167
|
}
|
|
223
168
|
}
|
|
224
169
|
const extent = Math.max(maxX - minX, maxY - minY);
|
|
225
|
-
return extent > 0 ? extent * POINT_EPS_RELATIVE : POINT_EPS;
|
|
170
|
+
return extent > 0.0 ? extent * POINT_EPS_RELATIVE : POINT_EPS;
|
|
226
171
|
}
|
|
227
|
-
// Builds the doubled vertex loop for an open contour: the forward vertices followed by the interior
|
|
228
|
-
// vertices in reverse. Offsetting this as a closed loop strokes both sides of the polyline, with the
|
|
229
|
-
// two terminal vertices (indices 0 and count - 1) reversing 180° so they take an end cap, not a join.
|
|
230
172
|
function getOpenContourLoop(vertices) {
|
|
231
|
-
const count = vertices.length / 2;
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
173
|
+
const count = Math.trunc(vertices.length / 2);
|
|
174
|
+
let result = [...vertices];
|
|
175
|
+
let k = count - 2;
|
|
176
|
+
while (k >= 1) {
|
|
177
|
+
result.push(vertices[2 * (k >>> 0)]);
|
|
178
|
+
result.push(vertices[2 * (k >>> 0) + 1]);
|
|
179
|
+
k -= 1;
|
|
180
|
+
}
|
|
181
|
+
return result;
|
|
236
182
|
}
|
|
237
|
-
// Signed orientation of a vertex loop under the standard shoelace convention: +1 counter-clockwise,
|
|
238
|
-
// -1 clockwise, +1 for a degenerate zero-area loop.
|
|
239
183
|
function getRingOrientationSign(vertices) {
|
|
240
|
-
const sign =
|
|
241
|
-
|
|
184
|
+
const sign = getRingSignedArea(vertices);
|
|
185
|
+
if (sign > 0.0) {
|
|
186
|
+
return 1;
|
|
187
|
+
}
|
|
188
|
+
if (sign < 0.0) {
|
|
189
|
+
return -1;
|
|
190
|
+
}
|
|
191
|
+
return 1;
|
|
242
192
|
}
|
|
243
|
-
// Twice-halved shoelace signed area of an implicitly-closed vertex loop.
|
|
244
193
|
function getRingSignedArea(vertices) {
|
|
245
|
-
let area = 0;
|
|
246
|
-
const count = vertices.length / 2;
|
|
247
|
-
for (let k = 0; k < count; k
|
|
194
|
+
let area = 0.0;
|
|
195
|
+
const count = Math.trunc(vertices.length / 2);
|
|
196
|
+
for (let k = 0; k < count; k += 1) {
|
|
248
197
|
const kn = (k + 1) % count;
|
|
249
198
|
area += vertices[2 * k] * vertices[2 * kn + 1] - vertices[2 * kn] * vertices[2 * k + 1];
|
|
250
199
|
}
|
|
251
200
|
return area * 0.5;
|
|
252
201
|
}
|
|
253
|
-
// The signed angular sweep from `startAngle` to `endAngle` taking the short way around, in (-PI, PI].
|
|
254
|
-
// Convex offset corners subtend the exterior turn angle, which is always the short arc.
|
|
255
202
|
function getShortSweep(startAngle, endAngle) {
|
|
256
203
|
let sweep = endAngle - startAngle;
|
|
257
|
-
while (sweep <= -Math.PI)
|
|
204
|
+
while (sweep <= -Math.PI) {
|
|
258
205
|
sweep += TWO_PI;
|
|
259
|
-
|
|
206
|
+
}
|
|
207
|
+
while (sweep > Math.PI) {
|
|
260
208
|
sweep -= TWO_PI;
|
|
209
|
+
}
|
|
261
210
|
return sweep;
|
|
262
211
|
}
|
|
263
|
-
// Whether a flattened contour is closed: it has at least three points and its last point coincides with
|
|
264
|
-
// its first (the explicit closing vertex `flattenPath` appends on a CLOSE). An open polyline whose ends
|
|
265
|
-
// happen to coincide is treated as closed — an acceptable inference at pixel scale. `pointEpsSq` is the
|
|
266
|
-
// squared coincidence tolerance (magnitude-relative, computed by the caller).
|
|
267
212
|
function isClosedContour(contour, pointEpsSq) {
|
|
268
213
|
const n = contour.length;
|
|
269
|
-
if (n < 6)
|
|
214
|
+
if (n < 6) {
|
|
270
215
|
return false;
|
|
216
|
+
}
|
|
271
217
|
const dx = contour[0] - contour[n - 2];
|
|
272
218
|
const dy = contour[1] - contour[n - 1];
|
|
273
219
|
return dx * dx + dy * dy <= pointEpsSq;
|
|
274
220
|
}
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
221
|
+
/**
|
|
222
|
+
* Offsets a path outward (positive `delta`, inflate) or inward (negative `delta`,
|
|
223
|
+
* deflate) by a signed distance. The input is flattened to polygon contours;
|
|
224
|
+
* closed contours are offset into grown/shrunk rings and open contours are offset
|
|
225
|
+
* into closed slab outlines with end caps. Corner style is controlled by
|
|
226
|
+
* `options.join`; open-path terminals by `options.end`. The raw offset rings are
|
|
227
|
+
* then self-unioned under positive fill to resolve self-overlap, merge touching
|
|
228
|
+
* rings, and emit a clean, hole-correct outline.
|
|
229
|
+
*
|
|
230
|
+
* Alias-safe: the input path is fully captured (flattened) before any write to `out`.
|
|
231
|
+
*/
|
|
232
|
+
export function offsetPath(out, pathBooleanKernel, path, delta, options) {
|
|
233
|
+
const join = options?.join ?? 'miter';
|
|
234
|
+
const end = options?.end ?? 'butt';
|
|
235
|
+
const miterLimit = options?.miterLimit ?? DEFAULT_MITER_LIMIT;
|
|
236
|
+
const arcTolerance = options?.arcTolerance ?? DEFAULT_ARC_TOLERANCE;
|
|
237
|
+
const tolerance = options?.tolerance ?? DEFAULT_FLATTEN_TOLERANCE;
|
|
238
|
+
const contours = flattenPath(path, tolerance);
|
|
239
|
+
const pointEpsSq = Math.pow(getContourPointEps(contours), 2);
|
|
240
|
+
let rawRings = [];
|
|
241
|
+
for (const contour of contours) {
|
|
242
|
+
const closed = isClosedContour(contour, pointEpsSq);
|
|
243
|
+
const vertices = getCleanContourVertices(contour, closed, pointEpsSq);
|
|
244
|
+
if (closed) {
|
|
245
|
+
if (vertices.length < 6) {
|
|
246
|
+
continue;
|
|
247
|
+
}
|
|
248
|
+
const orientation = getRingOrientationSign(vertices);
|
|
249
|
+
const noCaps = [];
|
|
250
|
+
const ring = buildOffsetRing(vertices, delta * orientation, noCaps, join, end, miterLimit, arcTolerance);
|
|
251
|
+
if (ring.length < 6) {
|
|
252
|
+
continue;
|
|
253
|
+
}
|
|
254
|
+
const offsetArea = getRingSignedArea(ring);
|
|
255
|
+
const inverted = (Math.sign(offsetArea) | 0) !== orientation;
|
|
256
|
+
const notReduced = delta < 0.0 && Math.abs(offsetArea) >= Math.abs(getRingSignedArea(vertices));
|
|
257
|
+
if (inverted || notReduced) {
|
|
258
|
+
continue;
|
|
259
|
+
}
|
|
260
|
+
if (offsetArea < 0.0) {
|
|
261
|
+
rawRings.push(reverseVertexLoop(ring));
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
rawRings.push(ring);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
if (vertices.length < 4) {
|
|
269
|
+
continue;
|
|
270
|
+
}
|
|
271
|
+
const count = Math.trunc(vertices.length / 2);
|
|
272
|
+
const caps = [0, count - 1];
|
|
273
|
+
const loopVerts = getOpenContourLoop(vertices);
|
|
274
|
+
const ring = buildOffsetRing(loopVerts, Math.abs(delta), caps, join, end, miterLimit, arcTolerance);
|
|
275
|
+
if (ring.length >= 6) {
|
|
276
|
+
if (getRingSignedArea(ring) < 0.0) {
|
|
277
|
+
rawRings.push(reverseVertexLoop(ring));
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
rawRings.push(ring);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
resolvePathRegions(out, pathBooleanKernel, rawRings, 'positive');
|
|
286
|
+
}
|
|
278
287
|
function pushOffsetArc(ring, cx, cy, radius, startAngle, sweep, arcTolerance) {
|
|
279
|
-
const maxAngle = arcTolerance > 0 && arcTolerance < radius ? 2 * Math.acos(1 - arcTolerance / radius) : Math.PI;
|
|
280
|
-
const steps = Math.max(1, Math.ceil(Math.abs(sweep) / maxAngle));
|
|
281
|
-
for (let i = 1; i < steps; i
|
|
288
|
+
const maxAngle = arcTolerance > 0.0 && arcTolerance < radius ? 2.0 * Math.acos(1.0 - arcTolerance / radius) : Math.PI;
|
|
289
|
+
const steps = Math.max(1, Math.ceil(Math.abs(sweep) / maxAngle) >>> 0);
|
|
290
|
+
for (let i = 1; i < steps; i += 1) {
|
|
282
291
|
const angle = startAngle + sweep * (i / steps);
|
|
283
|
-
ring.push(cx + radius * Math.cos(angle)
|
|
292
|
+
ring.push(cx + radius * Math.cos(angle));
|
|
293
|
+
ring.push(cy + radius * Math.sin(angle));
|
|
284
294
|
}
|
|
285
295
|
}
|
|
286
|
-
// Reverses a flat `[x0, y0, ...]` vertex loop in place-free fashion, flipping its winding while keeping
|
|
287
|
-
// vertex 0 first, so a clockwise loop becomes counter-clockwise and vice versa.
|
|
288
296
|
function reverseVertexLoop(vertices) {
|
|
289
|
-
const count = vertices.length / 2;
|
|
290
|
-
|
|
297
|
+
const count = Math.trunc(vertices.length / 2);
|
|
298
|
+
let out = new Array(vertices.length).fill(0.0);
|
|
291
299
|
out[0] = vertices[0];
|
|
292
300
|
out[1] = vertices[1];
|
|
293
|
-
for (let k = 1; k < count; k
|
|
301
|
+
for (let k = 1; k < count; k += 1) {
|
|
294
302
|
const source = count - k;
|
|
295
303
|
out[2 * k] = vertices[2 * source];
|
|
296
304
|
out[2 * k + 1] = vertices[2 * source + 1];
|
|
297
305
|
}
|
|
298
306
|
return out;
|
|
299
307
|
}
|
|
300
|
-
// Default maximum deviation between a round join/end arc and its true circle, in path units — a quarter
|
|
301
|
-
// pixel, matching the flattener's default and sane for pixel-scale output.
|
|
302
|
-
const DEFAULT_ARC_TOLERANCE = 0.25;
|
|
303
|
-
// Default miter length ceiling as a multiple of |delta|, the Clipper2 default: corners sharper than
|
|
304
|
-
// ~60° fall back to a bevel.
|
|
305
|
-
const DEFAULT_MITER_LIMIT = 2;
|
|
306
|
-
const HALF_PI = Math.PI / 2;
|
|
307
|
-
const NO_CAPS = new Set();
|
|
308
|
-
// Fallback absolute coincidence epsilon for degenerate zero-extent input, where the relative form has
|
|
309
|
-
// nothing to scale against. Well below any realistic flatten tolerance.
|
|
310
|
-
const POINT_EPS = 1e-9;
|
|
311
|
-
// Relative coincidence factor: the point-merge tolerance is this fraction of the input's coordinate
|
|
312
|
-
// extent, so corners collapse consistently whether the contour is in pixels or micrometres.
|
|
313
|
-
const POINT_EPS_RELATIVE = 1e-9;
|
|
314
|
-
// Below this cross-product magnitude the two offset edges are effectively parallel and a miter apex is
|
|
315
|
-
// unstable, so the join degrades to a bevel.
|
|
316
|
-
const PARALLEL_EPS = 1e-12;
|
|
317
|
-
const TWO_PI = Math.PI * 2;
|
|
318
308
|
//# sourceMappingURL=offsetPath.js.map
|
package/dist/offsetPath.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"offsetPath.js","sourceRoot":"","sources":["../src/offsetPath.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"offsetPath.js","sourceRoot":"","sources":["../src/offsetPath.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { PathWinding } from '@flighthq/path/contract';
|
|
2
|
+
/**
|
|
3
|
+
* The kind of boolean operation that was attempted.
|
|
4
|
+
*/
|
|
5
|
+
export type PathBooleanExplanationOperation = 'offset' | 'simplify';
|
|
6
|
+
/**
|
|
7
|
+
* The reason the operation produced a degenerate or empty result.
|
|
8
|
+
*/
|
|
9
|
+
export type PathBooleanExplanationReason = 'collapsed-or-degenerate' | 'empty-input' | 'non-finite-delta';
|
|
10
|
+
/**
|
|
11
|
+
* Join style for the convex side of offset path corners.
|
|
12
|
+
*/
|
|
13
|
+
export type PathOffsetJoin = 'bevel' | 'miter' | 'round' | 'square';
|
|
14
|
+
/**
|
|
15
|
+
* End cap style for open path terminals.
|
|
16
|
+
*/
|
|
17
|
+
export type PathOffsetEnd = 'butt' | 'round' | 'square';
|
|
18
|
+
/**
|
|
19
|
+
* Options controlling the boolean path operations (TS `PathBooleanOptions`). `fillRule` is a
|
|
20
|
+
* `PathWinding`, exactly TS (`fillRule?: PathWinding`): only even-odd and non-zero are public
|
|
21
|
+
* options. The positive/negative rules of `PathBooleanFillRule` stay kernel/offset conventions.
|
|
22
|
+
*/
|
|
23
|
+
export interface PathBooleanOptions {
|
|
24
|
+
fillRule?: PathWinding;
|
|
25
|
+
tolerance?: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Explains why a boolean path operation (offset or simplify) produced a
|
|
29
|
+
* degenerate or empty result. `undefined` means the operation succeeded normally.
|
|
30
|
+
*/
|
|
31
|
+
export interface PathBooleanExplanation {
|
|
32
|
+
readonly operation: PathBooleanExplanationOperation;
|
|
33
|
+
readonly reason: PathBooleanExplanationReason;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Options controlling the offset path operation.
|
|
37
|
+
*/
|
|
38
|
+
export interface PathOffsetOptions {
|
|
39
|
+
join?: PathOffsetJoin;
|
|
40
|
+
end?: PathOffsetEnd;
|
|
41
|
+
miterLimit?: number;
|
|
42
|
+
tolerance?: number;
|
|
43
|
+
arcTolerance?: number;
|
|
44
|
+
}
|
|
45
|
+
export declare function getPathBooleanExplanationOperationString(value: PathBooleanExplanationOperation): string;
|
|
46
|
+
export declare function getPathBooleanExplanationReasonString(value: PathBooleanExplanationReason): string;
|
|
47
|
+
export declare function getPathOffsetEndString(value: PathOffsetEnd): string;
|
|
48
|
+
export declare function getPathOffsetJoinString(value: PathOffsetJoin): string;
|
|
49
|
+
export declare function parsePathBooleanExplanationOperation(value: string): PathBooleanExplanationOperation | undefined;
|
|
50
|
+
export declare function parsePathBooleanExplanationReason(value: string): PathBooleanExplanationReason | undefined;
|
|
51
|
+
export declare function parsePathOffsetEnd(value: string): PathOffsetEnd | undefined;
|
|
52
|
+
export declare function parsePathOffsetJoin(value: string): PathOffsetJoin | undefined;
|
|
53
|
+
//# sourceMappingURL=pathBoolean.d.ts.map
|