pantograph2d 0.3.0 → 0.3.1

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.
@@ -1,825 +1,608 @@
1
- import { L as A, A as y, a as F, s as v, p as $, t as nt, c as et, f as ut, b as pt, d as _, e as dt, g as S, h as L, T as gt, D as P, F as b, i as I, j as Y, k as R, l as mt, m as wt, n as Pt, o as At, q as xt, r as yt, u as it, v as _t, w as St, x as st, y as Ft } from "./exportJSON-c42ca4ac.js";
2
- import { z as tn } from "./exportJSON-c42ca4ac.js";
3
- class T {
4
- constructor(t, e) {
5
- this.firstPoint = t, this.lastPoint = e;
6
- }
7
- }
8
- function D(n, t) {
9
- if (n instanceof A)
10
- return vt(n, t);
11
- if (n instanceof y)
12
- return bt(n, t);
1
+ import { L as p, A as P, a as L, s as C, p as D, t as Q, c as j, f as ct, b as ft, d as A, e as ut, g as S, h as $, T as lt, D as g, F as T, i as M, j as _, k as V, l as ht, m as gt, n as pt, o as mt, q as Pt, r as wt, u as tt, v as dt, w as At, x as nt, y as St, z as vt, S as Lt } from "./exportJSON-26bb92ef.js";
2
+ import { B as Zt } from "./exportJSON-26bb92ef.js";
3
+ class F {
4
+ constructor(n, e) {
5
+ this.firstPoint = n, this.lastPoint = e;
6
+ }
7
+ }
8
+ function k(t, n) {
9
+ if (t instanceof p)
10
+ return Ct(t, n);
11
+ if (t instanceof P)
12
+ return Tt(t, n);
13
13
  throw new Error("Not implemented");
14
14
  }
15
- function vt(n, t) {
16
- const { firstPoint: e, lastPoint: i } = n, r = n.normalVector;
17
- return new A(
18
- F(e, v(r, t)),
19
- F(i, v(r, t))
15
+ function Ct(t, n) {
16
+ const { firstPoint: e, lastPoint: r } = t, s = t.normalVector;
17
+ return new p(
18
+ L(e, C(s, n)),
19
+ L(r, C(s, n))
20
20
  );
21
21
  }
22
- function bt(n, t) {
23
- const e = F(
24
- n.firstPoint,
25
- v($(n.tangentAtFirstPoint), t)
26
- ), i = F(
27
- n.lastPoint,
28
- v($(n.tangentAtLastPoint), t)
29
- ), r = t * (n.clockwise ? 1 : -1);
30
- return n.radius + r < n.precision ? new T(e, i) : new y(e, i, n.center, n.clockwise);
31
- }
32
- function rt(n, t, e) {
33
- const i = et(
34
- n.tangentAtLastPoint,
35
- t.tangentAtFirstPoint
22
+ function Tt(t, n) {
23
+ const e = L(
24
+ t.firstPoint,
25
+ C(D(t.tangentAtFirstPoint), n)
26
+ ), r = L(
27
+ t.lastPoint,
28
+ C(D(t.tangentAtLastPoint), n)
29
+ ), s = n * (t.clockwise ? 1 : -1);
30
+ return t.radius + s < t.precision ? new F(e, r) : new P(e, r, t.center, t.clockwise);
31
+ }
32
+ function et(t, n, e) {
33
+ const r = j(
34
+ t.tangentAtLastPoint,
35
+ n.tangentAtFirstPoint
36
36
  );
37
- if (Math.abs(i) < 1e-10)
37
+ if (Math.abs(r) < 1e-10)
38
38
  return null;
39
- const r = i > 0 ? 1 : -1, s = Math.abs(e) * r, o = D(n, s), a = D(t, s);
40
- if (o instanceof T || a instanceof T)
39
+ const s = r > 0 ? 1 : -1, i = Math.abs(e) * s, o = k(t, i), u = k(n, i);
40
+ if (o instanceof F || u instanceof F)
41
41
  return null;
42
- let h;
42
+ let c;
43
43
  try {
44
- h = ut(o, a, 1e-9).at(-1);
44
+ c = ct(o, u, 1e-9).at(-1);
45
45
  } catch {
46
46
  return null;
47
47
  }
48
- if (!h)
48
+ if (!c)
49
49
  return null;
50
- const l = h, c = (p, g) => {
51
- const m = g.tangentAt(l), x = pt(m), d = F(l, v(x, s));
52
- return p.splitAt(d);
53
- }, [f] = c(n, o), [, u] = c(t, a);
54
- return { first: f, second: u, center: l };
55
- }
56
- function V(n, t, e) {
57
- const i = rt(n, t, e);
58
- if (!i)
50
+ const m = c, a = (v, b) => {
51
+ const w = b.tangentAt(m), d = ft(w), h = L(m, C(d, i));
52
+ return v.splitAt(h);
53
+ }, [f] = a(t, o), [, l] = a(n, u);
54
+ return { first: f, second: l, center: m };
55
+ }
56
+ function B(t, n, e) {
57
+ const r = et(t, n, e);
58
+ if (!r)
59
59
  return console.warn(
60
60
  "Cannot fillet between segments",
61
- n.repr,
62
- t.repr
63
- ), [n, t];
64
- const { first: r, second: s } = i;
61
+ t.repr,
62
+ n.repr
63
+ ), [t, n];
64
+ const { first: s, second: i } = r;
65
65
  return [
66
- r,
67
- nt(r.lastPoint, s.firstPoint, r.tangentAtLastPoint),
68
- s
66
+ s,
67
+ Q(s.lastPoint, i.firstPoint, s.tangentAtLastPoint),
68
+ i
69
69
  ];
70
70
  }
71
- function N(n, t, e) {
72
- const i = rt(n, t, e);
73
- if (!i)
71
+ function G(t, n, e) {
72
+ const r = et(t, n, e);
73
+ if (!r)
74
74
  return console.warn(
75
75
  "Cannot chamfer between segments",
76
- n.repr,
77
- t.repr
78
- ), [n, t];
79
- const { first: r, second: s } = i;
80
- return [r, new A(r.lastPoint, s.firstPoint), s];
76
+ t.repr,
77
+ n.repr
78
+ ), [t, n];
79
+ const { first: s, second: i } = r;
80
+ return [s, new p(s.lastPoint, i.firstPoint), i];
81
81
  }
82
- function X(n) {
83
- return new P([new b(new I(n))]);
82
+ function N(t) {
83
+ return new g([new T(new M(t))]);
84
84
  }
85
85
  class Et {
86
- constructor(t = [0, 0]) {
87
- this.pointer = t, this.firstPoint = t, this.pendingSegments = [], this._nextCorner = null;
86
+ constructor(n = [0, 0]) {
87
+ this.pointer = n, this.firstPoint = n, this.pendingSegments = [], this._nextCorner = null;
88
88
  }
89
- movePointerTo(t) {
89
+ movePointerTo(n) {
90
90
  if (this.pendingSegments.length)
91
91
  throw new Error(
92
92
  "You can only move the pointer if there is no segment defined"
93
93
  );
94
- return this.pointer = t, this.firstPoint = t, this;
94
+ return this.pointer = n, this.firstPoint = n, this;
95
95
  }
96
- saveSegment(t) {
97
- if (_(t.firstPoint, t.lastPoint))
98
- throw new Error(`Segment has no length, ${t.repr}`);
96
+ saveSegment(n) {
97
+ if (A(n.firstPoint, n.lastPoint))
98
+ throw new Error(`Segment has no length, ${n.repr}`);
99
99
  if (!this._nextCorner)
100
- return this.pendingSegments.push(t), this;
100
+ return this.pendingSegments.push(n), this;
101
101
  const e = this.pendingSegments.pop();
102
102
  if (!e)
103
103
  throw new Error("bug in the custom corner algorithm");
104
- const i = this._nextCorner.mode === "chamfer" ? N : V;
104
+ const r = this._nextCorner.mode === "chamfer" ? G : B;
105
105
  return this.pendingSegments.push(
106
- ...i(e, t, this._nextCorner.radius)
106
+ ...r(e, n, this._nextCorner.radius)
107
107
  ), this._nextCorner = null, this;
108
108
  }
109
- lineTo(t) {
110
- const e = new A(this.pointer, t);
111
- return this.pointer = t, this.saveSegment(e);
109
+ lineTo(n) {
110
+ const e = new p(this.pointer, n);
111
+ return this.pointer = n, this.saveSegment(e);
112
112
  }
113
- line(t, e) {
114
- return this.lineTo([this.pointer[0] + t, this.pointer[1] + e]);
113
+ line(n, e) {
114
+ return this.lineTo([this.pointer[0] + n, this.pointer[1] + e]);
115
115
  }
116
- vLine(t) {
117
- return this.line(0, t);
116
+ vLine(n) {
117
+ return this.line(0, n);
118
118
  }
119
- hLine(t) {
120
- return this.line(t, 0);
119
+ hLine(n) {
120
+ return this.line(n, 0);
121
121
  }
122
- vLineTo(t) {
123
- return this.lineTo([this.pointer[0], t]);
122
+ vLineTo(n) {
123
+ return this.lineTo([this.pointer[0], n]);
124
124
  }
125
- hLineTo(t) {
126
- return this.lineTo([t, this.pointer[1]]);
125
+ hLineTo(n) {
126
+ return this.lineTo([n, this.pointer[1]]);
127
127
  }
128
- polarLineTo([t, e]) {
129
- const i = e * R, r = Y(t, i);
130
- return this.lineTo(r);
128
+ polarLineTo([n, e]) {
129
+ const r = e * V, s = _(n, r);
130
+ return this.lineTo(s);
131
131
  }
132
- polarLine(t, e) {
133
- const i = e * R, [r, s] = Y(t, i);
134
- return this.line(r, s);
132
+ polarLine(n, e) {
133
+ const r = e * V, [s, i] = _(n, r);
134
+ return this.line(s, i);
135
135
  }
136
- tangentLine(t) {
136
+ tangentLine(n) {
137
137
  const e = this.pendingSegments.at(-1);
138
138
  if (!e)
139
139
  throw new Error("You need a previous segment to sketch a tangent line");
140
- const [i, r] = e.tangentAtLastPoint;
141
- return this.line(i * t, r * t);
140
+ const [r, s] = e.tangentAtLastPoint;
141
+ return this.line(r * n, s * n);
142
142
  }
143
- threePointsArcTo(t, e) {
144
- return this.saveSegment(dt(this.pointer, e, t)), this.pointer = t, this;
143
+ threePointsArcTo(n, e) {
144
+ return this.saveSegment(ut(this.pointer, e, n)), this.pointer = n, this;
145
145
  }
146
- threePointsArc(t, e, i, r) {
147
- const [s, o] = this.pointer;
146
+ threePointsArc(n, e, r, s) {
147
+ const [i, o] = this.pointer;
148
148
  return this.threePointsArcTo(
149
- [s + t, o + e],
150
- [s + i, o + r]
149
+ [i + n, o + e],
150
+ [i + r, o + s]
151
151
  );
152
152
  }
153
- sagittaArcTo(t, e) {
153
+ sagittaArcTo(n, e) {
154
154
  if (!e)
155
- return this.lineTo(t);
156
- const i = new A(this.pointer, t), r = $(i.tangentAtFirstPoint), s = F(i.midPoint, v(r, e));
157
- return this.threePointsArcTo(t, s);
155
+ return this.lineTo(n);
156
+ const r = new p(this.pointer, n), s = D(r.tangentAtFirstPoint), i = L(r.midPoint, C(s, e));
157
+ return this.threePointsArcTo(n, i);
158
158
  }
159
- sagittaArc(t, e, i) {
159
+ sagittaArc(n, e, r) {
160
160
  return this.sagittaArcTo(
161
- [t + this.pointer[0], e + this.pointer[1]],
162
- i
161
+ [n + this.pointer[0], e + this.pointer[1]],
162
+ r
163
163
  );
164
164
  }
165
- vSagittaArc(t, e) {
166
- return this.sagittaArc(0, t, e);
165
+ vSagittaArc(n, e) {
166
+ return this.sagittaArc(0, n, e);
167
167
  }
168
- hSagittaArc(t, e) {
169
- return this.sagittaArc(t, 0, e);
168
+ hSagittaArc(n, e) {
169
+ return this.sagittaArc(n, 0, e);
170
170
  }
171
- bulgeArcTo(t, e) {
171
+ bulgeArcTo(n, e) {
172
172
  if (!e)
173
- return this.lineTo(t);
174
- const i = S(this.pointer, t) / 2, r = -e * i;
175
- return this.sagittaArcTo(t, r);
173
+ return this.lineTo(n);
174
+ const r = S(this.pointer, n) / 2, s = -e * r;
175
+ return this.sagittaArcTo(n, s);
176
176
  }
177
- bulgeArc(t, e, i) {
177
+ bulgeArc(n, e, r) {
178
178
  return this.bulgeArcTo(
179
- [t + this.pointer[0], e + this.pointer[1]],
180
- i
179
+ [n + this.pointer[0], e + this.pointer[1]],
180
+ r
181
181
  );
182
182
  }
183
- vBulgeArc(t, e) {
184
- return this.bulgeArc(0, t, e);
183
+ vBulgeArc(n, e) {
184
+ return this.bulgeArc(0, n, e);
185
185
  }
186
- hBulgeArc(t, e) {
187
- return this.bulgeArc(t, 0, e);
186
+ hBulgeArc(n, e) {
187
+ return this.bulgeArc(n, 0, e);
188
188
  }
189
- tangentArcTo(t) {
189
+ tangentArcTo(n) {
190
190
  const e = this.pendingSegments.at(-1);
191
191
  if (!e)
192
192
  throw new Error("You need a previous curve to sketch a tangent arc");
193
193
  return this.saveSegment(
194
- nt(this.pointer, t, e.tangentAtLastPoint)
195
- ), this.pointer = t, this;
194
+ Q(this.pointer, n, e.tangentAtLastPoint)
195
+ ), this.pointer = n, this;
196
196
  }
197
- tangentArc(t, e) {
198
- const [i, r] = this.pointer;
199
- return this.tangentArcTo([t + i, e + r]);
197
+ tangentArc(n, e) {
198
+ const [r, s] = this.pointer;
199
+ return this.tangentArcTo([n + r, e + s]);
200
200
  }
201
- customCorner(t, e = "fillet") {
201
+ customCorner(n, e = "fillet") {
202
202
  if (!this.pendingSegments.length)
203
203
  throw new Error("You need a segment defined to fillet the angle");
204
- return this._nextCorner = { mode: e, radius: t }, this;
204
+ return this._nextCorner = { mode: e, radius: n }, this;
205
205
  }
206
- _customCornerLastWithFirst(t, e = "fillet") {
207
- if (!t)
206
+ _customCornerLastWithFirst(n, e = "fillet") {
207
+ if (!n)
208
208
  return;
209
- const i = this.pendingSegments.pop(), r = this.pendingSegments.shift();
210
- if (!i || !r)
209
+ const r = this.pendingSegments.pop(), s = this.pendingSegments.shift();
210
+ if (!r || !s)
211
211
  throw new Error("Not enough curves to close and fillet");
212
- const s = e === "chamfer" ? N : V;
213
- this.pendingSegments.push(...s(i, r, t));
212
+ const i = e === "chamfer" ? G : B;
213
+ this.pendingSegments.push(...i(r, s, n));
214
214
  }
215
215
  close() {
216
216
  if (!this.pendingSegments.length)
217
217
  throw new Error("No segments to close");
218
- const t = this.pendingSegments[0], e = this.pendingSegments.at(-1);
219
- return _(t.firstPoint, e.lastPoint) || this.lineTo(t.firstPoint), this._nextCorner !== null && (this._customCornerLastWithFirst(
218
+ const n = this.pendingSegments[0], e = this.pendingSegments.at(-1);
219
+ return A(n.firstPoint, e.lastPoint) || this.lineTo(n.firstPoint), this._nextCorner !== null && (this._customCornerLastWithFirst(
220
220
  this._nextCorner.radius,
221
221
  this._nextCorner.mode
222
- ), this._nextCorner = null), X(this.pendingSegments);
222
+ ), this._nextCorner = null), N(this.pendingSegments);
223
223
  }
224
224
  closeWithMirror() {
225
225
  if (!this.pendingSegments.length)
226
226
  throw new Error("No segments to close");
227
- const t = this.pendingSegments[0], e = this.pendingSegments.at(-1), i = L(
227
+ const n = this.pendingSegments[0], e = this.pendingSegments.at(-1), r = $(
228
228
  e.lastPoint,
229
- t.firstPoint
230
- ), r = new gt().mirrorLine(
231
- i,
232
- t.firstPoint
233
- ), s = this.pendingSegments.map(
234
- (o) => o.transform(r).reverse()
229
+ n.firstPoint
230
+ ), s = new lt().mirrorLine(
231
+ r,
232
+ n.firstPoint
233
+ ), i = this.pendingSegments.map(
234
+ (o) => o.transform(s).reverse()
235
235
  );
236
- return s.reverse(), X([
236
+ return i.reverse(), N([
237
237
  ...this.pendingSegments,
238
- ...s
238
+ ...i
239
239
  ]);
240
240
  }
241
241
  }
242
- function qt(n = [0, 0]) {
243
- return new Et(n);
242
+ function Gt(t = [0, 0]) {
243
+ return new Et(t);
244
244
  }
245
- function E(n) {
246
- if (n instanceof b)
247
- return [n];
248
- if (n instanceof I)
249
- return [new b(n)];
250
- if (n instanceof P)
251
- return n.figures;
245
+ function E(t) {
246
+ if (t instanceof T)
247
+ return [t];
248
+ if (t instanceof M)
249
+ return [new T(t)];
250
+ if (t instanceof g)
251
+ return t.figures;
252
252
  throw new Error("Unknown shape");
253
253
  }
254
- function Mt(n, t) {
255
- return new P(
256
- mt(E(n), E(t))
254
+ function Ft(t, n) {
255
+ return new g(
256
+ ht(E(t), E(n))
257
257
  );
258
258
  }
259
- function G(n) {
260
- return n.reduce(
261
- (t, e) => Mt(t, e),
262
- new P()
259
+ function U(t) {
260
+ return t.reduce(
261
+ (n, e) => Ft(n, e),
262
+ new g()
263
263
  );
264
264
  }
265
- function Tt(n, t) {
266
- return new P(
267
- wt(E(n), E(t))
265
+ function Mt(t, n) {
266
+ return new g(
267
+ gt(E(t), E(n))
268
268
  );
269
269
  }
270
- function zt(n, t) {
271
- return new P(
272
- Pt(E(n), E(t))
270
+ function Nt(t, n) {
271
+ return new g(
272
+ pt(E(t), E(n))
273
273
  );
274
274
  }
275
- function q(n) {
276
- return n < 0 ? "before" : n > 1 ? "after" : "between";
275
+ function Y(t) {
276
+ return t < 0 ? "before" : t > 1 ? "after" : "between";
277
277
  }
278
- const z = (n, t, e) => {
278
+ const q = (t, n, e) => {
279
279
  if (e === "before")
280
- return n.distanceFrom(t.firstPoint);
280
+ return t.distanceFrom(n.firstPoint);
281
281
  if (e === "after")
282
- return n.distanceFrom(t.lastPoint);
282
+ return t.distanceFrom(n.lastPoint);
283
283
  throw new Error("Invalid position");
284
284
  };
285
- function It(n, t) {
286
- const e = At(n, t);
285
+ function bt(t, n) {
286
+ const e = mt(t, n);
287
287
  if (e === "parallel")
288
288
  return Math.min(
289
- n.distanceFrom(t.firstPoint),
290
- n.distanceFrom(t.lastPoint)
289
+ t.distanceFrom(n.firstPoint),
290
+ t.distanceFrom(n.lastPoint)
291
291
  );
292
- const { intersectionParam1: i, intersectionParam2: r } = e, s = q(i), o = q(r);
293
- if (s === "between" && o === "between")
292
+ const { intersectionParam1: r, intersectionParam2: s } = e, i = Y(r), o = Y(s);
293
+ if (i === "between" && o === "between")
294
294
  return 0;
295
- if (s === "between" && o !== "between")
296
- return z(n, t, o);
297
- if (o === "between" && s !== "between")
298
- return z(t, n, s);
299
- if (s === "before" && o === "before")
300
- return S(n.firstPoint, t.firstPoint);
301
- if (s === "after" && o === "after")
302
- return S(n.lastPoint, t.lastPoint);
303
- if (s === "before" && o === "after")
304
- return S(n.firstPoint, t.lastPoint);
305
- if (s === "after" && o === "before")
306
- return S(n.lastPoint, t.firstPoint);
295
+ if (i === "between" && o !== "between")
296
+ return q(t, n, o);
297
+ if (o === "between" && i !== "between")
298
+ return q(n, t, i);
299
+ if (i === "before" && o === "before")
300
+ return S(t.firstPoint, n.firstPoint);
301
+ if (i === "after" && o === "after")
302
+ return S(t.lastPoint, n.lastPoint);
303
+ if (i === "before" && o === "after")
304
+ return S(t.firstPoint, n.lastPoint);
305
+ if (i === "after" && o === "before")
306
+ return S(t.lastPoint, n.firstPoint);
307
307
  throw new Error("Invalid position");
308
308
  }
309
- function W(n, t) {
310
- if (xt(n, t).length > 0)
309
+ function z(t, n) {
310
+ if (Pt(t, n).length > 0)
311
311
  return 0;
312
- const e = yt(n, t.center);
313
- if (n.isOnSegment(e)) {
314
- const i = S(e, t.center);
315
- if (Math.abs(i - t.radius) < n.precision && t.isOnSegment(e))
312
+ const e = wt(t, n.center);
313
+ if (t.isOnSegment(e)) {
314
+ const r = S(e, n.center);
315
+ if (Math.abs(r - n.radius) < t.precision && n.isOnSegment(e))
316
316
  return 0;
317
- if (i - t.radius > n.precision) {
318
- const r = it(
319
- L(e, t.center)
320
- ), s = F(
321
- t.center,
322
- v(r, t.radius)
317
+ if (r - n.radius > t.precision) {
318
+ const s = tt(
319
+ $(e, n.center)
320
+ ), i = L(
321
+ n.center,
322
+ C(s, n.radius)
323
323
  );
324
- if (t.isOnSegment(s))
325
- return S(s, e);
324
+ if (n.isOnSegment(i))
325
+ return S(i, e);
326
326
  }
327
327
  }
328
328
  return Math.min(
329
- t.distanceFrom(n.firstPoint),
330
- t.distanceFrom(n.lastPoint),
331
329
  n.distanceFrom(t.firstPoint),
332
- n.distanceFrom(t.lastPoint)
330
+ n.distanceFrom(t.lastPoint),
331
+ t.distanceFrom(n.firstPoint),
332
+ t.distanceFrom(n.lastPoint)
333
333
  );
334
334
  }
335
- const Lt = (n, t) => {
336
- const e = n.angleToParam(t.firstAngle);
337
- if (n.isValidParameter(e))
335
+ const $t = (t, n) => {
336
+ const e = t.angleToParam(n.firstAngle);
337
+ if (t.isValidParameter(e))
338
338
  return !0;
339
- const i = n.angleToParam(t.lastAngle);
340
- return !!n.isValidParameter(i);
339
+ const r = t.angleToParam(n.lastAngle);
340
+ return !!t.isValidParameter(r);
341
341
  };
342
- function Ct(n, t) {
343
- if (_t(n, t, !0).length > 0)
342
+ function yt(t, n) {
343
+ if (dt(t, n, !0).length > 0)
344
344
  return 0;
345
- const e = S(n.center, t.center);
346
- if (e < n.precision && Lt(n, t))
347
- return Math.abs(n.radius - t.radius);
348
- const i = it(L(t.center, n.center)), r = e - Math.abs(n.radius - t.radius) < n.precision;
349
- let s = St(i);
350
- r && t.radius > n.radius && (s += Math.PI);
351
- const o = r ? s : s + Math.PI, a = n.angleToParam(s), h = t.angleToParam(o);
352
- return n.isValidParameter(a) && t.isValidParameter(h) ? S(n.paramPoint(a), t.paramPoint(h)) : Math.min(
353
- n.distanceFrom(t.firstPoint),
354
- n.distanceFrom(t.lastPoint),
345
+ const e = S(t.center, n.center);
346
+ if (e < t.precision && $t(t, n))
347
+ return Math.abs(t.radius - n.radius);
348
+ const r = tt($(n.center, t.center)), s = e - Math.abs(t.radius - n.radius) < t.precision;
349
+ let i = At(r);
350
+ s && n.radius > t.radius && (i += Math.PI);
351
+ const o = s ? i : i + Math.PI, u = t.angleToParam(i), c = n.angleToParam(o);
352
+ return t.isValidParameter(u) && n.isValidParameter(c) ? S(t.paramPoint(u), n.paramPoint(c)) : Math.min(
355
353
  t.distanceFrom(n.firstPoint),
356
- t.distanceFrom(n.lastPoint)
354
+ t.distanceFrom(n.lastPoint),
355
+ n.distanceFrom(t.firstPoint),
356
+ n.distanceFrom(t.lastPoint)
357
357
  );
358
358
  }
359
- function $t(n, t) {
360
- if (n instanceof A && t instanceof A)
361
- return It(n, t);
362
- if (n instanceof A && t instanceof y)
363
- return W(n, t);
364
- if (n instanceof y && t instanceof A)
365
- return W(t, n);
366
- if (n instanceof y && t instanceof y)
367
- return Ct(n, t);
359
+ function xt(t, n) {
360
+ if (t instanceof p && n instanceof p)
361
+ return bt(t, n);
362
+ if (t instanceof p && n instanceof P)
363
+ return z(t, n);
364
+ if (t instanceof P && n instanceof p)
365
+ return z(n, t);
366
+ if (t instanceof P && n instanceof P)
367
+ return yt(t, n);
368
368
  throw new Error("Not implemented");
369
369
  }
370
- class Dt {
371
- constructor() {
372
- this.ids = [], this.values = [], this.length = 0;
373
- }
374
- clear() {
375
- this.length = 0;
376
- }
377
- push(t, e) {
378
- let i = this.length++;
379
- for (; i > 0; ) {
380
- const r = i - 1 >> 1, s = this.values[r];
381
- if (e >= s)
382
- break;
383
- this.ids[i] = this.ids[r], this.values[i] = s, i = r;
384
- }
385
- this.ids[i] = t, this.values[i] = e;
386
- }
387
- pop() {
388
- if (this.length === 0)
389
- return;
390
- const t = this.ids[0];
391
- if (this.length--, this.length > 0) {
392
- const e = this.ids[0] = this.ids[this.length], i = this.values[0] = this.values[this.length], r = this.length >> 1;
393
- let s = 0;
394
- for (; s < r; ) {
395
- let o = (s << 1) + 1;
396
- const a = o + 1;
397
- let h = this.ids[o], l = this.values[o];
398
- const c = this.values[a];
399
- if (a < this.length && c < l && (o = a, h = this.ids[a], l = c), l >= i)
400
- break;
401
- this.ids[s] = h, this.values[s] = l, s = o;
402
- }
403
- this.ids[s] = e, this.values[s] = i;
404
- }
405
- return t;
406
- }
407
- peek() {
408
- if (this.length !== 0)
409
- return this.ids[0];
410
- }
411
- peekValue() {
412
- if (this.length !== 0)
413
- return this.values[0];
414
- }
415
- shrink() {
416
- this.ids.length = this.values.length = this.length;
417
- }
418
- }
419
- const J = [
420
- Int8Array,
421
- Uint8Array,
422
- Uint8ClampedArray,
423
- Int16Array,
424
- Uint16Array,
425
- Int32Array,
426
- Uint32Array,
427
- Float32Array,
428
- Float64Array
429
- ], C = 3;
430
- class U {
431
- static from(t) {
432
- if (!t || t.byteLength === void 0 || t.buffer)
433
- throw new Error("Data must be an instance of ArrayBuffer or SharedArrayBuffer.");
434
- const [e, i] = new Uint8Array(t, 0, 2);
435
- if (e !== 251)
436
- throw new Error("Data does not appear to be in a Flatbush format.");
437
- if (i >> 4 !== C)
438
- throw new Error(`Got v${i >> 4} data when expected v${C}.`);
439
- const [r] = new Uint16Array(t, 2, 1), [s] = new Uint32Array(t, 4, 1);
440
- return new U(s, r, J[i & 15], void 0, t);
441
- }
442
- constructor(t, e = 16, i = Float64Array, r = ArrayBuffer, s) {
443
- if (t === void 0)
444
- throw new Error("Missing required argument: numItems.");
445
- if (isNaN(t) || t <= 0)
446
- throw new Error(`Unexpected numItems value: ${t}.`);
447
- this.numItems = +t, this.nodeSize = Math.min(Math.max(+e, 2), 65535);
448
- let o = t, a = o;
449
- this._levelBounds = [o * 4];
450
- do
451
- o = Math.ceil(o / this.nodeSize), a += o, this._levelBounds.push(a * 4);
452
- while (o !== 1);
453
- this.ArrayType = i || Float64Array, this.IndexArrayType = a < 16384 ? Uint16Array : Uint32Array;
454
- const h = J.indexOf(this.ArrayType), l = a * 4 * this.ArrayType.BYTES_PER_ELEMENT;
455
- if (h < 0)
456
- throw new Error(`Unexpected typed array class: ${i}.`);
457
- s && s.byteLength !== void 0 && !s.buffer ? (this.data = s, this._boxes = new this.ArrayType(this.data, 8, a * 4), this._indices = new this.IndexArrayType(this.data, 8 + l, a), this._pos = a * 4, this.minX = this._boxes[this._pos - 4], this.minY = this._boxes[this._pos - 3], this.maxX = this._boxes[this._pos - 2], this.maxY = this._boxes[this._pos - 1]) : (this.data = new r(8 + l + a * this.IndexArrayType.BYTES_PER_ELEMENT), this._boxes = new this.ArrayType(this.data, 8, a * 4), this._indices = new this.IndexArrayType(this.data, 8 + l, a), this._pos = 0, this.minX = 1 / 0, this.minY = 1 / 0, this.maxX = -1 / 0, this.maxY = -1 / 0, new Uint8Array(this.data, 0, 2).set([251, (C << 4) + h]), new Uint16Array(this.data, 2, 1)[0] = e, new Uint32Array(this.data, 4, 1)[0] = t), this._queue = new Dt();
458
- }
459
- add(t, e, i, r) {
460
- const s = this._pos >> 2, o = this._boxes;
461
- return this._indices[s] = s, o[this._pos++] = t, o[this._pos++] = e, o[this._pos++] = i, o[this._pos++] = r, t < this.minX && (this.minX = t), e < this.minY && (this.minY = e), i > this.maxX && (this.maxX = i), r > this.maxY && (this.maxY = r), s;
462
- }
463
- finish() {
464
- if (this._pos >> 2 !== this.numItems)
465
- throw new Error(`Added ${this._pos >> 2} items when expected ${this.numItems}.`);
466
- const t = this._boxes;
467
- if (this.numItems <= this.nodeSize) {
468
- t[this._pos++] = this.minX, t[this._pos++] = this.minY, t[this._pos++] = this.maxX, t[this._pos++] = this.maxY;
469
- return;
470
- }
471
- const e = this.maxX - this.minX || 1, i = this.maxY - this.minY || 1, r = new Uint32Array(this.numItems), s = (1 << 16) - 1;
472
- for (let o = 0, a = 0; o < this.numItems; o++) {
473
- const h = t[a++], l = t[a++], c = t[a++], f = t[a++], u = Math.floor(s * ((h + c) / 2 - this.minX) / e), p = Math.floor(s * ((l + f) / 2 - this.minY) / i);
474
- r[o] = Bt(u, p);
475
- }
476
- k(r, t, this._indices, 0, this.numItems - 1, this.nodeSize);
477
- for (let o = 0, a = 0; o < this._levelBounds.length - 1; o++) {
478
- const h = this._levelBounds[o];
479
- for (; a < h; ) {
480
- const l = a;
481
- let c = t[a++], f = t[a++], u = t[a++], p = t[a++];
482
- for (let g = 1; g < this.nodeSize && a < h; g++)
483
- c = Math.min(c, t[a++]), f = Math.min(f, t[a++]), u = Math.max(u, t[a++]), p = Math.max(p, t[a++]);
484
- this._indices[this._pos >> 2] = l, t[this._pos++] = c, t[this._pos++] = f, t[this._pos++] = u, t[this._pos++] = p;
485
- }
486
- }
487
- }
488
- search(t, e, i, r, s) {
489
- if (this._pos !== this._boxes.length)
490
- throw new Error("Data not yet indexed - call index.finish().");
491
- let o = this._boxes.length - 4;
492
- const a = [], h = [];
493
- for (; o !== void 0; ) {
494
- const l = Math.min(o + this.nodeSize * 4, Z(o, this._levelBounds));
495
- for (let c = o; c < l; c += 4) {
496
- if (i < this._boxes[c] || r < this._boxes[c + 1] || t > this._boxes[c + 2] || e > this._boxes[c + 3])
497
- continue;
498
- const f = this._indices[c >> 2] | 0;
499
- o >= this.numItems * 4 ? a.push(f) : (s === void 0 || s(f)) && h.push(f);
500
- }
501
- o = a.pop();
502
- }
503
- return h;
504
- }
505
- neighbors(t, e, i = 1 / 0, r = 1 / 0, s) {
506
- if (this._pos !== this._boxes.length)
507
- throw new Error("Data not yet indexed - call index.finish().");
508
- let o = this._boxes.length - 4;
509
- const a = this._queue, h = [], l = r * r;
510
- for (; o !== void 0; ) {
511
- const c = Math.min(o + this.nodeSize * 4, Z(o, this._levelBounds));
512
- for (let f = o; f < c; f += 4) {
513
- const u = this._indices[f >> 2] | 0, p = Q(t, this._boxes[f], this._boxes[f + 2]), g = Q(e, this._boxes[f + 1], this._boxes[f + 3]), m = p * p + g * g;
514
- o >= this.numItems * 4 ? a.push(u << 1, m) : (s === void 0 || s(u)) && a.push((u << 1) + 1, m);
515
- }
516
- for (; a.length && a.peek() & 1; )
517
- if (a.peekValue() > l || (h.push(a.pop() >> 1), h.length === i))
518
- return a.clear(), h;
519
- o = a.pop() >> 1;
520
- }
521
- return a.clear(), h;
522
- }
523
- }
524
- function Q(n, t, e) {
525
- return n < t ? t - n : n <= e ? 0 : n - e;
526
- }
527
- function Z(n, t) {
528
- let e = 0, i = t.length - 1;
529
- for (; e < i; ) {
530
- const r = e + i >> 1;
531
- t[r] > n ? i = r : e = r + 1;
532
- }
533
- return t[e];
534
- }
535
- function k(n, t, e, i, r, s) {
536
- if (Math.floor(i / s) >= Math.floor(r / s))
537
- return;
538
- const o = n[i + r >> 1];
539
- let a = i - 1, h = r + 1;
540
- for (; ; ) {
541
- do
542
- a++;
543
- while (n[a] < o);
544
- do
545
- h--;
546
- while (n[h] > o);
547
- if (a >= h)
548
- break;
549
- kt(n, t, e, a, h);
550
- }
551
- k(n, t, e, i, h, s), k(n, t, e, h + 1, r, s);
552
- }
553
- function kt(n, t, e, i, r) {
554
- const s = n[i];
555
- n[i] = n[r], n[r] = s;
556
- const o = 4 * i, a = 4 * r, h = t[o], l = t[o + 1], c = t[o + 2], f = t[o + 3];
557
- t[o] = t[a], t[o + 1] = t[a + 1], t[o + 2] = t[a + 2], t[o + 3] = t[a + 3], t[a] = h, t[a + 1] = l, t[a + 2] = c, t[a + 3] = f;
558
- const u = e[i];
559
- e[i] = e[r], e[r] = u;
560
- }
561
- function Bt(n, t) {
562
- let e = n ^ t, i = 65535 ^ e, r = 65535 ^ (n | t), s = n & (t ^ 65535), o = e | i >> 1, a = e >> 1 ^ e, h = r >> 1 ^ i & s >> 1 ^ r, l = e & r >> 1 ^ s >> 1 ^ s;
563
- e = o, i = a, r = h, s = l, o = e & e >> 2 ^ i & i >> 2, a = e & i >> 2 ^ i & (e ^ i) >> 2, h ^= e & r >> 2 ^ i & s >> 2, l ^= i & r >> 2 ^ (e ^ i) & s >> 2, e = o, i = a, r = h, s = l, o = e & e >> 4 ^ i & i >> 4, a = e & i >> 4 ^ i & (e ^ i) >> 4, h ^= e & r >> 4 ^ i & s >> 4, l ^= i & r >> 4 ^ (e ^ i) & s >> 4, e = o, i = a, r = h, s = l, h ^= e & r >> 8 ^ i & s >> 8, l ^= i & r >> 8 ^ (e ^ i) & s >> 8, e = h ^ h >> 1, i = l ^ l >> 1;
564
- let c = n ^ t, f = i | 65535 ^ (c | e);
565
- return c = (c | c << 8) & 16711935, c = (c | c << 4) & 252645135, c = (c | c << 2) & 858993459, c = (c | c << 1) & 1431655765, f = (f | f << 8) & 16711935, f = (f | f << 4) & 252645135, f = (f | f << 2) & 858993459, f = (f | f << 1) & 1431655765, (f << 1 | c) >>> 0;
566
- }
567
- function Ot(n, t = 1e-7) {
568
- const e = new U(n.length);
569
- n.forEach((s) => {
570
- const [o, a] = s.firstPoint;
571
- e.add(o - t, a - t, o + t, a + t);
572
- }), e.finish();
573
- const i = [], r = /* @__PURE__ */ new Set();
574
- return n.forEach((s, o) => {
575
- if (r.has(o))
576
- return;
577
- const a = [s];
578
- let h = o;
579
- r.add(o);
580
- let l = n.length;
581
- for (; ; ) {
582
- if (l-- < 0)
583
- throw new Error("Infinite loop detected");
584
- const c = a[a.length - 1].lastPoint, [f, u] = c, p = e.search(
585
- f - t,
586
- u - t,
587
- f + t,
588
- u + t
589
- ), g = (w) => Math.abs((h - w) % n.length), m = p.filter((w) => !r.has(w)).map((w) => [
590
- n[w],
591
- w,
592
- g(w)
593
- ]).sort(([, , w], [, , M]) => g(w) - g(M));
594
- if (m.length === 0) {
595
- i.push(a);
596
- break;
597
- }
598
- const [x, d] = m[0];
599
- a.push(x), r.add(d), h = d;
600
- }
601
- }), i;
602
- }
603
- const B = 1e-8;
604
- function Ut(n, t) {
605
- const e = n.map((h) => ({
606
- offset: D(h, t),
607
- original: h
608
- })), i = [];
609
- let r = null, s = e.at(-1);
610
- if (!s)
370
+ const I = 1e-8;
371
+ function Dt(t, n) {
372
+ const e = t.map((c) => ({
373
+ offset: k(c, n),
374
+ original: c
375
+ })), r = [];
376
+ let s = null, i = e.at(-1);
377
+ if (!i)
611
378
  return [];
612
- if (i.length === 1)
613
- return i;
614
- const o = (h) => {
615
- r ? h.offset instanceof T ? _(h.offset.firstPoint, h.offset.lastPoint) || i.push(
616
- new A(h.offset.firstPoint, h.offset.lastPoint)
617
- ) : i.push(h.offset) : r = h;
618
- }, a = function* () {
619
- for (const h of e.slice(0, -1))
620
- yield h;
621
- if (!r)
379
+ if (r.length === 1)
380
+ return r;
381
+ const o = (c) => {
382
+ s ? c.offset instanceof F ? A(c.offset.firstPoint, c.offset.lastPoint) || r.push(
383
+ new p(c.offset.firstPoint, c.offset.lastPoint)
384
+ ) : r.push(c.offset) : s = c;
385
+ }, u = function* () {
386
+ for (const c of e.slice(0, -1))
387
+ yield c;
388
+ if (!s)
622
389
  throw new Error("Bug in the offset algorithm");
623
- yield r;
390
+ yield s;
624
391
  };
625
- for (const h of a()) {
626
- const l = s.offset.lastPoint, c = h.offset.firstPoint;
627
- if (_(l, c)) {
628
- o(s), s = h;
392
+ for (const c of u()) {
393
+ const m = i.offset.lastPoint, a = c.offset.firstPoint;
394
+ if (A(m, a)) {
395
+ o(i), i = c;
629
396
  continue;
630
397
  }
631
398
  let f = [];
632
- if (!(s.offset instanceof T) && !(h.offset instanceof T)) {
633
- const { intersections: m, overlaps: x } = st(
634
- s.offset,
635
- h.offset,
636
- B / 100
399
+ if (!(i.offset instanceof F) && !(c.offset instanceof F)) {
400
+ const { intersections: w, overlaps: d } = nt(
401
+ i.offset,
402
+ c.offset,
403
+ I / 100
637
404
  );
638
405
  f = [
639
- ...m,
640
- ...x.flatMap((d) => [d.firstPoint, d.lastPoint])
406
+ ...w,
407
+ ...d.flatMap((h) => [h.firstPoint, h.lastPoint])
641
408
  ];
642
409
  }
643
410
  if (f.length > 0) {
644
- let m = f[0];
411
+ let w = f[0];
645
412
  if (f.length > 1) {
646
- const w = s == null ? void 0 : s.original.lastPoint, M = f.map(
647
- (lt) => Ft(lt, w)
413
+ const x = i == null ? void 0 : i.original.lastPoint, y = f.map(
414
+ (at) => vt(at, x)
648
415
  );
649
- m = f[M.indexOf(Math.min(...M))];
416
+ w = f[y.indexOf(Math.min(...y))];
650
417
  }
651
- const x = s.offset.splitAt([
652
- m
653
- ])[0], d = h.offset.splitAt([m]).at(-1);
654
- if (!d)
418
+ const d = i.offset.splitAt([
419
+ w
420
+ ])[0], h = c.offset.splitAt([w]).at(-1);
421
+ if (!h)
655
422
  throw new Error("Bug in the splitting algo in offset");
656
423
  o({
657
- offset: x,
658
- original: s.original
659
- }), s = { offset: d, original: h.original };
424
+ offset: d,
425
+ original: i.original
426
+ }), i = { offset: h, original: c.original };
660
427
  continue;
661
428
  }
662
- const u = s.original.lastPoint, p = et(
663
- L(c, u),
664
- L(l, u)
665
- ) > 0, g = new y(l, c, u, p);
666
- o(s), i.push(g), s = h;
667
- }
668
- return o(s), i;
669
- }
670
- function H(n, t) {
671
- const e = n.clockwise ? t : -t, i = Ut(n.segments, e);
672
- if (i.length < 2)
673
- return new P();
674
- const r = /* @__PURE__ */ new Map(), s = (c, f) => {
675
- const u = r.get(c) || [];
676
- r.set(c, [...u, ...f]);
429
+ const l = i.original.lastPoint, v = j(
430
+ $(a, l),
431
+ $(m, l)
432
+ ) > 0, b = new P(m, a, l, v);
433
+ o(i), r.push(b), i = c;
434
+ }
435
+ return o(i), r;
436
+ }
437
+ function W(t, n) {
438
+ const e = t.clockwise ? n : -n, r = Dt(t.segments, e);
439
+ if (r.length < 2)
440
+ return new g();
441
+ const s = /* @__PURE__ */ new Map(), i = (a, f) => {
442
+ const l = s.get(a) || [];
443
+ s.set(a, [...l, ...f]);
677
444
  };
678
- if (i.forEach((c, f) => {
679
- i.slice(f + 1).forEach((u, p) => {
680
- const { intersections: g, overlaps: m } = st(c, u, B), x = [
681
- ...g,
682
- ...m.flatMap((d) => [d.firstPoint, d.lastPoint])
683
- ].filter((d) => {
684
- const w = _(d, c.firstPoint) || _(d, c.lastPoint), M = _(d, u.firstPoint) || _(d, u.lastPoint);
685
- return !(w && M);
445
+ if (r.forEach((a, f) => {
446
+ r.slice(f + 1).forEach((l, v) => {
447
+ const { intersections: b, overlaps: w } = nt(a, l, I), d = [
448
+ ...b,
449
+ ...w.flatMap((h) => [h.firstPoint, h.lastPoint])
450
+ ].filter((h) => {
451
+ const x = A(h, a.firstPoint) || A(h, a.lastPoint), y = A(h, l.firstPoint) || A(h, l.lastPoint);
452
+ return !(x && y);
686
453
  });
687
- x.length && (s(f, x), s(p + f + 1, x));
454
+ d.length && (i(f, d), i(v + f + 1, d));
688
455
  });
689
- }), !r.size) {
690
- const c = new I(i);
691
- return new P([new b(c)]);
692
- }
693
- const a = i.flatMap((c, f) => {
694
- if (!r.has(f))
695
- return c;
696
- const u = r.get(f) || [];
697
- return c.splitAt(u);
698
- }).filter((c) => !n.segments.some((u) => $t(u, c) < Math.abs(t) - B));
699
- if (!a.length)
700
- return new P();
701
- const l = Ot(a).filter((c) => c.length > 1).filter((c) => _(c[0].firstPoint, c.at(-1).lastPoint)).map((c) => new I(c));
702
- return l.length ? new P(l.map((c) => new b(c))) : new P();
703
- }
704
- function Yt(n, t) {
705
- const e = n.map((i) => {
706
- const r = G(
707
- i.holes.map((s) => H(s, t))
456
+ }), !s.size) {
457
+ const a = new M(r);
458
+ return new g([new T(a)]);
459
+ }
460
+ const u = r.flatMap((a, f) => {
461
+ if (!s.has(f))
462
+ return a;
463
+ const l = s.get(f) || [];
464
+ return a.splitAt(l);
465
+ }).filter((a) => !t.segments.some((l) => xt(l, a) < Math.abs(n) - I));
466
+ if (!u.length)
467
+ return new g();
468
+ const m = St(u).filter((a) => a.length > 1).filter((a) => A(a[0].firstPoint, a.at(-1).lastPoint)).map((a) => new M(a));
469
+ return m.length ? new g(m.map((a) => new T(a))) : new g();
470
+ }
471
+ function kt(t, n) {
472
+ const e = t.map((r) => {
473
+ const s = U(
474
+ r.holes.map((i) => W(i, n))
708
475
  );
709
- return Tt(H(i.contour, t), r);
476
+ return Mt(W(r.contour, n), s);
710
477
  });
711
- return G(e);
478
+ return U(e);
712
479
  }
713
- function Wt(n, t) {
714
- return Yt(E(n), t);
480
+ function Ut(t, n) {
481
+ return kt(E(t), n);
715
482
  }
716
- function ot(n) {
717
- if (n instanceof A)
718
- return `L ${n.lastPoint.join(" ")}`;
719
- if (n instanceof y)
720
- return `A ${n.radius} ${n.radius} 0 ${n.angularLength > Math.PI ? "1" : "0"} ${n.clockwise ? "0" : "1"} ${n.lastPoint.join(" ")}`;
483
+ function R(t) {
484
+ if (t instanceof p)
485
+ return `L ${t.lastPoint.join(" ")}`;
486
+ if (t instanceof P)
487
+ return `A ${t.radius} ${t.radius} 0 ${t.angularLength > Math.PI ? "1" : "0"} ${t.clockwise ? "0" : "1"} ${t.lastPoint.join(" ")}`;
721
488
  throw new Error("Unknown segment type");
722
489
  }
723
- function at(n) {
724
- const t = `M ${n.firstPoint.join(" ")}`, e = n.segments.map(ot).join(" ");
725
- return `${t} ${e} Z`;
490
+ function rt(t) {
491
+ const n = `M ${t.firstPoint.join(" ")}`, e = t.segments.map(R).join(" ");
492
+ return `${n} ${e} Z`;
726
493
  }
727
- function ht(n) {
728
- return `<path d="${n.allLoops.map(at).join(" ")}" />`;
494
+ function it(t) {
495
+ return `<path d="${t.allLoops.map(rt).join(" ")}" />`;
729
496
  }
730
- function Rt(n) {
497
+ function It(t) {
731
498
  return `<g>
732
- ${n.figures.map(ht).join(`
499
+ ${t.figures.map(it).join(`
733
500
  `)}
734
501
  </g>`;
735
502
  }
736
- function Vt(n, t = 1) {
737
- const e = n.xMin - t, i = n.yMin - t;
738
- return `${e} ${i} ${n.width + 2 * t} ${n.height + 2 * t}`;
503
+ function Ot(t) {
504
+ const n = `M ${t.firstPoint.join(" ")}`, e = t.segments.map(R).join(" ");
505
+ return `${n} ${e}`;
739
506
  }
740
- function K(n, t, e = 1) {
507
+ function Rt(t, n = 1) {
508
+ const e = t.xMin - n, r = t.yMin - n;
509
+ return `${e} ${r} ${t.width + 2 * n} ${t.height + 2 * n}`;
510
+ }
511
+ function J(t, n, e = 1) {
741
512
  return `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
742
- <svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="${Vt(t, e)}" fill="none" stroke="black" stroke-width="0.2%" vector-effect="non-scaling-stroke">
743
- ${n}
513
+ <svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="${Rt(n, e)}" fill="none" stroke="black" stroke-width="0.2%" vector-effect="non-scaling-stroke">
514
+ ${t}
744
515
  </svg>`;
745
516
  }
746
- function j(n) {
747
- if (n instanceof P)
748
- return Rt(n);
749
- if (n instanceof b)
750
- return ht(n);
751
- if (n instanceof I)
752
- return `<path d="${at(n)}" />`;
753
- if (n instanceof y || n instanceof A)
754
- return `<path d="${`M ${n.firstPoint.join(" ")}`} ${ot(
755
- n
517
+ function X(t) {
518
+ if (t instanceof g)
519
+ return It(t);
520
+ if (t instanceof T)
521
+ return it(t);
522
+ if (t instanceof M)
523
+ return `<path d="${rt(t)}" />`;
524
+ if (t instanceof Lt)
525
+ return `<path d="${Ot(t)}" />`;
526
+ if (t instanceof P || t instanceof p)
527
+ return `<path d="${`M ${t.firstPoint.join(" ")}`} ${R(
528
+ t
756
529
  )}" />`;
757
530
  throw new Error("Unknown shape type");
758
531
  }
759
- function Jt(n, t = 1) {
760
- if (Array.isArray(n)) {
761
- const i = n.map((o) => o.mirror()), r = i.map((o) => j(o)).join(`
762
- `), s = i.slice(1).reduce((o, a) => o.merge(a.boundingBox), i[0].boundingBox);
763
- return K(r, s);
764
- }
765
- const e = n.mirror();
766
- return K(j(e), e.boundingBox, t);
767
- }
768
- const ct = (n) => {
769
- if (n.type === "LINE")
770
- return new A(n.firstPoint, n.lastPoint);
771
- if (n.type === "ARC")
772
- return new y(
773
- n.firstPoint,
774
- n.lastPoint,
775
- n.center,
776
- n.clockwise
532
+ const Z = (t) => "shape" in t ? t.shape : t, H = (t, n) => {
533
+ if (!("shape" in t))
534
+ return n;
535
+ const { color: e } = t;
536
+ return e ? `<g stroke="${e}">${n}</g>` : n;
537
+ };
538
+ function Yt(t, n = 1) {
539
+ if (Array.isArray(t)) {
540
+ const r = t.map((o) => Z(o).mirror()), s = r.map((o, u) => H(t[u], X(o))).join(`
541
+ `), i = r.slice(1).reduce((o, u) => o.merge(u.boundingBox), r[0].boundingBox);
542
+ return J(s, i);
543
+ }
544
+ const e = Z(t).mirror();
545
+ return J(
546
+ H(t, X(e)),
547
+ e.boundingBox,
548
+ n
549
+ );
550
+ }
551
+ const st = (t) => {
552
+ if (t.type === "LINE")
553
+ return new p(t.firstPoint, t.lastPoint);
554
+ if (t.type === "ARC")
555
+ return new P(
556
+ t.firstPoint,
557
+ t.lastPoint,
558
+ t.center,
559
+ t.clockwise
777
560
  );
778
561
  throw new Error("Unknown segment type");
779
- }, O = (n) => {
780
- const t = n.segments.map(ct);
781
- return new I(t);
782
- }, ft = (n) => {
783
- const t = O(n.contour), e = n.holes.map(O);
784
- return new b(t, e);
785
- }, Nt = (n) => {
786
- const t = n.figures.map(ft);
787
- return new P(t);
562
+ }, O = (t) => {
563
+ const n = t.segments.map(st);
564
+ return new M(n);
565
+ }, ot = (t) => {
566
+ const n = O(t.contour), e = t.holes.map(O);
567
+ return new T(n, e);
568
+ }, _t = (t) => {
569
+ const n = t.figures.map(ot);
570
+ return new g(n);
788
571
  };
789
- function Qt(n) {
790
- if (n.type === "DIAGRAM")
791
- return Nt(n);
792
- if (n.type === "FIGURE")
793
- return ft(n);
794
- if (n.type === "LOOP")
795
- return O(n);
796
- if (n.type === "LINE" || n.type === "ARC")
797
- return ct(n);
572
+ function qt(t) {
573
+ if (t.type === "DIAGRAM")
574
+ return _t(t);
575
+ if (t.type === "FIGURE")
576
+ return ot(t);
577
+ if (t.type === "LOOP")
578
+ return O(t);
579
+ if (t.type === "LINE" || t.type === "ARC")
580
+ return st(t);
798
581
  throw new Error("Unknown shape type");
799
582
  }
800
- const tt = Math.PI / 180, Xt = 180 / Math.PI;
801
- function Zt(n, t) {
802
- const e = Math.cos(t * tt) * n, i = Math.sin(t * tt) * n;
803
- return [e, i];
583
+ const K = Math.PI / 180, Vt = 180 / Math.PI;
584
+ function zt(t, n) {
585
+ const e = Math.cos(n * K) * t, r = Math.sin(n * K) * t;
586
+ return [e, r];
804
587
  }
805
- function Ht([n, t]) {
806
- const e = Math.sqrt(n * n + t * t), i = Math.atan2(t, n) * Xt;
807
- return [e, i];
588
+ function Wt([t, n]) {
589
+ const e = Math.sqrt(t * t + n * n), r = Math.atan2(n, t) * Vt;
590
+ return [e, r];
808
591
  }
809
592
  export {
810
- tt as DEG2RAD,
811
- Xt as RAD2DEG,
812
- Ht as cartesianToPolar,
813
- Tt as cut,
814
- qt as draw,
815
- tn as exportJSON,
816
- Jt as exportSVG,
817
- Mt as fuse,
818
- G as fuseAll,
819
- Qt as importJSON,
820
- zt as intersect,
821
- Wt as offset,
822
- Zt as polarToCartesian,
823
- j as svgBody
593
+ K as DEG2RAD,
594
+ Vt as RAD2DEG,
595
+ Wt as cartesianToPolar,
596
+ Mt as cut,
597
+ Gt as draw,
598
+ Zt as exportJSON,
599
+ Yt as exportSVG,
600
+ Ft as fuse,
601
+ U as fuseAll,
602
+ qt as importJSON,
603
+ Nt as intersect,
604
+ Ut as offset,
605
+ zt as polarToCartesian,
606
+ X as svgBody
824
607
  };
825
608
  //# sourceMappingURL=pantograph.js.map