@remotion/paths 3.3.38 → 3.3.40
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/dist/get-bounding-box.d.ts +2 -0
- package/dist/get-bounding-box.js +146 -0
- package/dist/get-subpaths.js +4 -5
- package/dist/helpers/construct.d.ts +1 -2
- package/dist/helpers/construct.js +199 -123
- package/dist/helpers/iterate.d.ts +12 -0
- package/dist/helpers/iterate.js +53 -0
- package/dist/helpers/linear.d.ts +6 -1
- package/dist/helpers/linear.js +1 -1
- package/dist/helpers/remove-a-s-t-curves.d.ts +2 -0
- package/dist/helpers/remove-a-s-t-curves.js +260 -0
- package/dist/helpers/serialize.d.ts +2 -0
- package/dist/helpers/serialize.js +75 -0
- package/dist/helpers/types.d.ts +105 -1
- package/dist/helpers/unarc.d.ts +2 -0
- package/dist/helpers/unarc.js +254 -0
- package/dist/helpers/unshort.d.ts +2 -0
- package/dist/helpers/unshort.js +65 -0
- package/dist/index.d.ts +6 -1
- package/dist/index.js +11 -1
- package/dist/normalize-path.d.ts +2 -0
- package/dist/normalize-path.js +129 -275
- package/dist/parse-path.d.ts +2 -0
- package/dist/parse-path.js +259 -0
- package/dist/parse.d.ts +2 -0
- package/dist/parse.js +266 -0
- package/dist/reduce-instructions.d.ts +2 -0
- package/dist/reduce-instructions.js +10 -0
- package/dist/reset-path.d.ts +1 -0
- package/dist/reset-path.js +10 -0
- package/dist/serialize-instructions.d.ts +2 -0
- package/dist/serialize-instructions.js +72 -0
- package/dist/serialize.d.ts +2 -0
- package/dist/serialize.js +75 -0
- package/dist/simplify-instructions.d.ts +2 -0
- package/dist/simplify-instructions.js +10 -0
- package/dist/translate-path.js +42 -25
- package/dist/unarc.d.ts +2 -0
- package/dist/unarc.js +180 -0
- package/dist/unshort.d.ts +2 -0
- package/dist/unshort.js +118 -0
- package/package.json +2 -2
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
// Copied from: https://github.com/rveciana/svg-path-properties
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.construct = void 0;
|
|
5
|
+
const parse_path_1 = require("../parse-path");
|
|
5
6
|
const arc_1 = require("./arc");
|
|
6
7
|
const bezier_1 = require("./bezier");
|
|
7
8
|
const linear_1 = require("./linear");
|
|
8
|
-
const parse_1 = require("./parse");
|
|
9
9
|
const construct = (string) => {
|
|
10
10
|
let length = 0;
|
|
11
11
|
const partial_lengths = [];
|
|
12
12
|
const functions = [];
|
|
13
13
|
let initial_point = null;
|
|
14
|
-
const parsed = (0,
|
|
14
|
+
const parsed = (0, parse_path_1.parsePath)(string);
|
|
15
15
|
let cur = [0, 0];
|
|
16
16
|
let prev_point = [0, 0];
|
|
17
17
|
let curve;
|
|
@@ -19,100 +19,142 @@ const construct = (string) => {
|
|
|
19
19
|
const segments = [];
|
|
20
20
|
for (let i = 0; i < parsed.length; i++) {
|
|
21
21
|
const instruction = parsed[i];
|
|
22
|
-
if (instruction
|
|
22
|
+
if (instruction.type !== 'm' &&
|
|
23
|
+
instruction.type !== 'M' &&
|
|
24
|
+
segments.length > 0) {
|
|
23
25
|
segments[segments.length - 1].push(instruction);
|
|
24
26
|
}
|
|
25
27
|
// moveTo
|
|
26
|
-
if (instruction
|
|
27
|
-
cur = [instruction
|
|
28
|
+
if (instruction.type === 'M') {
|
|
29
|
+
cur = [instruction.x, instruction.y];
|
|
28
30
|
ringStart = [cur[0], cur[1]];
|
|
29
31
|
segments.push([instruction]);
|
|
30
32
|
functions.push(null);
|
|
31
33
|
if (i === 0) {
|
|
32
|
-
initial_point = { x: instruction
|
|
34
|
+
initial_point = { x: instruction.x, y: instruction.y };
|
|
33
35
|
}
|
|
34
36
|
}
|
|
35
|
-
else if (instruction
|
|
36
|
-
cur = [instruction
|
|
37
|
+
else if (instruction.type === 'm') {
|
|
38
|
+
cur = [instruction.dx + cur[0], instruction.dy + cur[1]];
|
|
37
39
|
ringStart = [cur[0], cur[1]];
|
|
38
|
-
segments.push([
|
|
40
|
+
segments.push([{ type: 'M', x: cur[0], y: cur[1] }]);
|
|
39
41
|
functions.push(null);
|
|
40
42
|
// lineTo
|
|
41
43
|
}
|
|
42
|
-
else if (instruction
|
|
43
|
-
length += Math.sqrt((cur[0] - instruction
|
|
44
|
-
functions.push((0, linear_1.makeLinearPosition)(
|
|
45
|
-
|
|
44
|
+
else if (instruction.type === 'L') {
|
|
45
|
+
length += Math.sqrt((cur[0] - instruction.x) ** 2 + (cur[1] - instruction.y) ** 2);
|
|
46
|
+
functions.push((0, linear_1.makeLinearPosition)({
|
|
47
|
+
x0: cur[0],
|
|
48
|
+
x1: instruction.x,
|
|
49
|
+
y0: cur[1],
|
|
50
|
+
y1: instruction.y,
|
|
51
|
+
}));
|
|
52
|
+
cur = [instruction.x, instruction.y];
|
|
46
53
|
}
|
|
47
|
-
else if (instruction
|
|
48
|
-
length += Math.sqrt(instruction
|
|
49
|
-
functions.push((0, linear_1.makeLinearPosition)(
|
|
50
|
-
|
|
54
|
+
else if (instruction.type === 'l') {
|
|
55
|
+
length += Math.sqrt(instruction.dx ** 2 + instruction.dy ** 2);
|
|
56
|
+
functions.push((0, linear_1.makeLinearPosition)({
|
|
57
|
+
x0: cur[0],
|
|
58
|
+
x1: instruction.dx + cur[0],
|
|
59
|
+
y0: cur[1],
|
|
60
|
+
y1: instruction.dy + cur[1],
|
|
61
|
+
}));
|
|
62
|
+
cur = [instruction.dx + cur[0], instruction.dy + cur[1]];
|
|
51
63
|
}
|
|
52
|
-
else if (instruction
|
|
53
|
-
length += Math.abs(cur[0] - instruction
|
|
54
|
-
functions.push((0, linear_1.makeLinearPosition)(
|
|
55
|
-
|
|
64
|
+
else if (instruction.type === 'H') {
|
|
65
|
+
length += Math.abs(cur[0] - instruction.x);
|
|
66
|
+
functions.push((0, linear_1.makeLinearPosition)({
|
|
67
|
+
x0: cur[0],
|
|
68
|
+
x1: instruction.x,
|
|
69
|
+
y0: cur[1],
|
|
70
|
+
y1: cur[1],
|
|
71
|
+
}));
|
|
72
|
+
cur[0] = instruction.x;
|
|
56
73
|
}
|
|
57
|
-
else if (instruction
|
|
58
|
-
length += Math.abs(instruction
|
|
59
|
-
functions.push((0, linear_1.makeLinearPosition)(
|
|
60
|
-
|
|
74
|
+
else if (instruction.type === 'h') {
|
|
75
|
+
length += Math.abs(instruction.dx);
|
|
76
|
+
functions.push((0, linear_1.makeLinearPosition)({
|
|
77
|
+
x0: cur[0],
|
|
78
|
+
x1: cur[0] + instruction.dx,
|
|
79
|
+
y0: cur[1],
|
|
80
|
+
y1: cur[1],
|
|
81
|
+
}));
|
|
82
|
+
cur[0] = instruction.dx + cur[0];
|
|
61
83
|
}
|
|
62
|
-
else if (instruction
|
|
63
|
-
length += Math.abs(cur[1] - instruction
|
|
64
|
-
functions.push((0, linear_1.makeLinearPosition)(
|
|
65
|
-
|
|
84
|
+
else if (instruction.type === 'V') {
|
|
85
|
+
length += Math.abs(cur[1] - instruction.y);
|
|
86
|
+
functions.push((0, linear_1.makeLinearPosition)({
|
|
87
|
+
x0: cur[0],
|
|
88
|
+
x1: cur[0],
|
|
89
|
+
y0: cur[1],
|
|
90
|
+
y1: instruction.y,
|
|
91
|
+
}));
|
|
92
|
+
cur[1] = instruction.y;
|
|
66
93
|
}
|
|
67
|
-
else if (instruction
|
|
68
|
-
length += Math.abs(instruction
|
|
69
|
-
functions.push((0, linear_1.makeLinearPosition)(
|
|
70
|
-
|
|
94
|
+
else if (instruction.type === 'v') {
|
|
95
|
+
length += Math.abs(instruction.dy);
|
|
96
|
+
functions.push((0, linear_1.makeLinearPosition)({
|
|
97
|
+
x0: cur[0],
|
|
98
|
+
x1: cur[0],
|
|
99
|
+
y0: cur[1],
|
|
100
|
+
y1: cur[1] + instruction.dy,
|
|
101
|
+
}));
|
|
102
|
+
cur[1] = instruction.dy + cur[1];
|
|
71
103
|
// Close path
|
|
72
104
|
}
|
|
73
|
-
else if (instruction
|
|
105
|
+
else if (instruction.type === 'Z') {
|
|
74
106
|
length += Math.sqrt((ringStart[0] - cur[0]) ** 2 + (ringStart[1] - cur[1]) ** 2);
|
|
75
|
-
functions.push((0, linear_1.makeLinearPosition)(
|
|
107
|
+
functions.push((0, linear_1.makeLinearPosition)({
|
|
108
|
+
x0: cur[0],
|
|
109
|
+
x1: ringStart[0],
|
|
110
|
+
y0: cur[1],
|
|
111
|
+
y1: ringStart[1],
|
|
112
|
+
}));
|
|
76
113
|
cur = [ringStart[0], ringStart[1]];
|
|
77
114
|
// Cubic Bezier curves
|
|
78
115
|
}
|
|
79
|
-
else if (instruction
|
|
116
|
+
else if (instruction.type === 'C') {
|
|
80
117
|
curve = (0, bezier_1.makeBezier)({
|
|
81
118
|
ax: cur[0],
|
|
82
119
|
ay: cur[1],
|
|
83
|
-
bx: instruction
|
|
84
|
-
by: instruction
|
|
85
|
-
cx: instruction
|
|
86
|
-
cy: instruction
|
|
87
|
-
dx: instruction
|
|
88
|
-
dy: instruction
|
|
120
|
+
bx: instruction.cp1x,
|
|
121
|
+
by: instruction.cp1y,
|
|
122
|
+
cx: instruction.cp2x,
|
|
123
|
+
cy: instruction.cp2y,
|
|
124
|
+
dx: instruction.x,
|
|
125
|
+
dy: instruction.y,
|
|
89
126
|
});
|
|
90
127
|
length += curve.getTotalLength();
|
|
91
|
-
cur = [instruction
|
|
128
|
+
cur = [instruction.x, instruction.y];
|
|
92
129
|
functions.push(curve);
|
|
93
130
|
}
|
|
94
|
-
else if (instruction
|
|
131
|
+
else if (instruction.type === 'c') {
|
|
95
132
|
curve = (0, bezier_1.makeBezier)({
|
|
96
133
|
ax: cur[0],
|
|
97
134
|
ay: cur[1],
|
|
98
|
-
bx: cur[0] + instruction
|
|
99
|
-
by: cur[1] + instruction
|
|
100
|
-
cx: cur[0] + instruction
|
|
101
|
-
cy: cur[1] + instruction
|
|
102
|
-
dx: cur[0] + instruction
|
|
103
|
-
dy: cur[1] + instruction
|
|
135
|
+
bx: cur[0] + instruction.cp1dx,
|
|
136
|
+
by: cur[1] + instruction.cp1dy,
|
|
137
|
+
cx: cur[0] + instruction.cp2dx,
|
|
138
|
+
cy: cur[1] + instruction.cp2dy,
|
|
139
|
+
dx: cur[0] + instruction.dx,
|
|
140
|
+
dy: cur[1] + instruction.dy,
|
|
104
141
|
});
|
|
105
142
|
if (curve.getTotalLength() > 0) {
|
|
106
143
|
length += curve.getTotalLength();
|
|
107
144
|
functions.push(curve);
|
|
108
|
-
cur = [instruction
|
|
145
|
+
cur = [instruction.dx + cur[0], instruction.dy + cur[1]];
|
|
109
146
|
}
|
|
110
147
|
else {
|
|
111
|
-
functions.push((0, linear_1.makeLinearPosition)(cur[0], cur[0], cur[1], cur[1]));
|
|
148
|
+
functions.push((0, linear_1.makeLinearPosition)({ x0: cur[0], x1: cur[0], y0: cur[1], y1: cur[1] }));
|
|
112
149
|
}
|
|
113
150
|
}
|
|
114
|
-
else if (instruction
|
|
115
|
-
|
|
151
|
+
else if (instruction.type === 'S') {
|
|
152
|
+
const prev = parsed[i - 1];
|
|
153
|
+
const prevWasCurve = prev.type === 'C' ||
|
|
154
|
+
prev.type === 'c' ||
|
|
155
|
+
prev.type === 'S' ||
|
|
156
|
+
prev.type === 's';
|
|
157
|
+
if (i > 0 && prevWasCurve) {
|
|
116
158
|
if (curve) {
|
|
117
159
|
const c = curve.getC();
|
|
118
160
|
curve = (0, bezier_1.makeBezier)({
|
|
@@ -120,10 +162,10 @@ const construct = (string) => {
|
|
|
120
162
|
ay: cur[1],
|
|
121
163
|
bx: 2 * cur[0] - c.x,
|
|
122
164
|
by: 2 * cur[1] - c.y,
|
|
123
|
-
cx: instruction
|
|
124
|
-
cy: instruction
|
|
125
|
-
dx: instruction
|
|
126
|
-
dy: instruction
|
|
165
|
+
cx: instruction.cpx,
|
|
166
|
+
cy: instruction.cpy,
|
|
167
|
+
dx: instruction.x,
|
|
168
|
+
dy: instruction.y,
|
|
127
169
|
});
|
|
128
170
|
}
|
|
129
171
|
}
|
|
@@ -133,21 +175,25 @@ const construct = (string) => {
|
|
|
133
175
|
ay: cur[1],
|
|
134
176
|
bx: cur[0],
|
|
135
177
|
by: cur[1],
|
|
136
|
-
cx: instruction
|
|
137
|
-
cy: instruction
|
|
138
|
-
dx: instruction
|
|
139
|
-
dy: instruction
|
|
178
|
+
cx: instruction.cpx,
|
|
179
|
+
cy: instruction.cpy,
|
|
180
|
+
dx: instruction.x,
|
|
181
|
+
dy: instruction.y,
|
|
140
182
|
});
|
|
141
183
|
}
|
|
142
184
|
if (curve) {
|
|
143
185
|
length += curve.getTotalLength();
|
|
144
|
-
cur = [instruction
|
|
186
|
+
cur = [instruction.x, instruction.y];
|
|
145
187
|
functions.push(curve);
|
|
146
188
|
}
|
|
147
189
|
}
|
|
148
|
-
else if (instruction
|
|
149
|
-
|
|
150
|
-
|
|
190
|
+
else if (instruction.type === 's') {
|
|
191
|
+
const prev = parsed[i - 1];
|
|
192
|
+
const prevWasCurve = prev.type === 'C' ||
|
|
193
|
+
prev.type === 'c' ||
|
|
194
|
+
prev.type === 'S' ||
|
|
195
|
+
prev.type === 's';
|
|
196
|
+
if (i > 0 && prevWasCurve) {
|
|
151
197
|
if (curve) {
|
|
152
198
|
const c = curve.getC();
|
|
153
199
|
const d = curve.getD();
|
|
@@ -156,10 +202,10 @@ const construct = (string) => {
|
|
|
156
202
|
ay: cur[1],
|
|
157
203
|
bx: cur[0] + d.x - c.x,
|
|
158
204
|
by: cur[1] + d.y - c.y,
|
|
159
|
-
cx: cur[0] + instruction
|
|
160
|
-
cy: cur[1] + instruction
|
|
161
|
-
dx: cur[0] + instruction
|
|
162
|
-
dy: cur[1] + instruction
|
|
205
|
+
cx: cur[0] + instruction.cpdx,
|
|
206
|
+
cy: cur[1] + instruction.cpdy,
|
|
207
|
+
dx: cur[0] + instruction.dx,
|
|
208
|
+
dy: cur[1] + instruction.dy,
|
|
163
209
|
});
|
|
164
210
|
}
|
|
165
211
|
}
|
|
@@ -169,22 +215,27 @@ const construct = (string) => {
|
|
|
169
215
|
ay: cur[1],
|
|
170
216
|
bx: cur[0],
|
|
171
217
|
by: cur[1],
|
|
172
|
-
cx: cur[0] + instruction
|
|
173
|
-
cy: cur[1] + instruction
|
|
174
|
-
dx: cur[0] + instruction
|
|
175
|
-
dy: cur[1] + instruction
|
|
218
|
+
cx: cur[0] + instruction.cpdx,
|
|
219
|
+
cy: cur[1] + instruction.cpdy,
|
|
220
|
+
dx: cur[0] + instruction.dx,
|
|
221
|
+
dy: cur[1] + instruction.dy,
|
|
176
222
|
});
|
|
177
223
|
}
|
|
178
224
|
if (curve) {
|
|
179
225
|
length += curve.getTotalLength();
|
|
180
|
-
cur = [instruction
|
|
226
|
+
cur = [instruction.dx + cur[0], instruction.dy + cur[1]];
|
|
181
227
|
functions.push(curve);
|
|
182
228
|
}
|
|
183
229
|
}
|
|
184
230
|
// Quadratic Bezier curves
|
|
185
|
-
else if (instruction
|
|
186
|
-
if (cur[0] === instruction
|
|
187
|
-
const linearCurve = (0, linear_1.makeLinearPosition)(
|
|
231
|
+
else if (instruction.type === 'Q') {
|
|
232
|
+
if (cur[0] === instruction.cpx && cur[1] === instruction.cpy) {
|
|
233
|
+
const linearCurve = (0, linear_1.makeLinearPosition)({
|
|
234
|
+
x0: instruction.cpx,
|
|
235
|
+
x1: instruction.x,
|
|
236
|
+
y0: instruction.cpy,
|
|
237
|
+
y1: instruction.y,
|
|
238
|
+
});
|
|
188
239
|
length += linearCurve.getTotalLength();
|
|
189
240
|
functions.push(linearCurve);
|
|
190
241
|
}
|
|
@@ -192,22 +243,27 @@ const construct = (string) => {
|
|
|
192
243
|
curve = (0, bezier_1.makeBezier)({
|
|
193
244
|
ax: cur[0],
|
|
194
245
|
ay: cur[1],
|
|
195
|
-
bx: instruction
|
|
196
|
-
by: instruction
|
|
197
|
-
cx: instruction
|
|
198
|
-
cy: instruction
|
|
246
|
+
bx: instruction.cpx,
|
|
247
|
+
by: instruction.cpy,
|
|
248
|
+
cx: instruction.x,
|
|
249
|
+
cy: instruction.y,
|
|
199
250
|
dx: null,
|
|
200
251
|
dy: null,
|
|
201
252
|
});
|
|
202
253
|
length += curve.getTotalLength();
|
|
203
254
|
functions.push(curve);
|
|
204
255
|
}
|
|
205
|
-
cur = [instruction
|
|
206
|
-
prev_point = [instruction
|
|
256
|
+
cur = [instruction.x, instruction.y];
|
|
257
|
+
prev_point = [instruction.cpx, instruction.cpy];
|
|
207
258
|
}
|
|
208
|
-
else if (instruction
|
|
209
|
-
if (instruction
|
|
210
|
-
const linearCurve = (0, linear_1.makeLinearPosition)(
|
|
259
|
+
else if (instruction.type === 'q') {
|
|
260
|
+
if (instruction.cpdx === 0 && instruction.cpdy === 0) {
|
|
261
|
+
const linearCurve = (0, linear_1.makeLinearPosition)({
|
|
262
|
+
x0: cur[0] + instruction.cpdx,
|
|
263
|
+
x1: cur[0] + instruction.cpdy,
|
|
264
|
+
y0: cur[1] + instruction.dx,
|
|
265
|
+
y1: cur[1] + instruction.dy,
|
|
266
|
+
});
|
|
211
267
|
length += linearCurve.getTotalLength();
|
|
212
268
|
functions.push(linearCurve);
|
|
213
269
|
}
|
|
@@ -215,28 +271,33 @@ const construct = (string) => {
|
|
|
215
271
|
curve = (0, bezier_1.makeBezier)({
|
|
216
272
|
ax: cur[0],
|
|
217
273
|
ay: cur[1],
|
|
218
|
-
bx: cur[0] + instruction
|
|
219
|
-
by: cur[1] + instruction
|
|
220
|
-
cx: cur[0] + instruction
|
|
221
|
-
cy: cur[1] + instruction
|
|
274
|
+
bx: cur[0] + instruction.cpdx,
|
|
275
|
+
by: cur[1] + instruction.cpdy,
|
|
276
|
+
cx: cur[0] + instruction.dx,
|
|
277
|
+
cy: cur[1] + instruction.dy,
|
|
222
278
|
dx: null,
|
|
223
279
|
dy: null,
|
|
224
280
|
});
|
|
225
281
|
length += curve.getTotalLength();
|
|
226
282
|
functions.push(curve);
|
|
227
283
|
}
|
|
228
|
-
prev_point = [cur[0] + instruction
|
|
229
|
-
cur = [instruction
|
|
284
|
+
prev_point = [cur[0] + instruction.cpdx, cur[1] + instruction.cpdy];
|
|
285
|
+
cur = [instruction.dx + cur[0], instruction.dy + cur[1]];
|
|
230
286
|
}
|
|
231
|
-
else if (instruction
|
|
232
|
-
|
|
287
|
+
else if (instruction.type === 'T') {
|
|
288
|
+
const prev = parsed[i - 1];
|
|
289
|
+
const prevWasQ = prev.type === 'Q' ||
|
|
290
|
+
prev.type === 'q' ||
|
|
291
|
+
prev.type === 'T' ||
|
|
292
|
+
prev.type === 't';
|
|
293
|
+
if (i > 0 && prevWasQ) {
|
|
233
294
|
curve = (0, bezier_1.makeBezier)({
|
|
234
295
|
ax: cur[0],
|
|
235
296
|
ay: cur[1],
|
|
236
297
|
bx: 2 * cur[0] - prev_point[0],
|
|
237
298
|
by: 2 * cur[1] - prev_point[1],
|
|
238
|
-
cx: instruction
|
|
239
|
-
cy: instruction
|
|
299
|
+
cx: instruction.x,
|
|
300
|
+
cy: instruction.y,
|
|
240
301
|
dx: null,
|
|
241
302
|
dy: null,
|
|
242
303
|
});
|
|
@@ -244,22 +305,32 @@ const construct = (string) => {
|
|
|
244
305
|
length += curve.getTotalLength();
|
|
245
306
|
}
|
|
246
307
|
else {
|
|
247
|
-
const linearCurve = (0, linear_1.makeLinearPosition)(
|
|
308
|
+
const linearCurve = (0, linear_1.makeLinearPosition)({
|
|
309
|
+
x0: cur[0],
|
|
310
|
+
x1: instruction.x,
|
|
311
|
+
y0: cur[1],
|
|
312
|
+
y1: instruction.y,
|
|
313
|
+
});
|
|
248
314
|
functions.push(linearCurve);
|
|
249
315
|
length += linearCurve.getTotalLength();
|
|
250
316
|
}
|
|
251
317
|
prev_point = [2 * cur[0] - prev_point[0], 2 * cur[1] - prev_point[1]];
|
|
252
|
-
cur = [instruction
|
|
318
|
+
cur = [instruction.x, instruction.y];
|
|
253
319
|
}
|
|
254
|
-
else if (instruction
|
|
255
|
-
|
|
320
|
+
else if (instruction.type === 't') {
|
|
321
|
+
const prev = parsed[i - 1];
|
|
322
|
+
const prevWasQ = prev.type === 'Q' ||
|
|
323
|
+
prev.type === 'q' ||
|
|
324
|
+
prev.type === 'T' ||
|
|
325
|
+
prev.type === 't';
|
|
326
|
+
if (i > 0 && prevWasQ) {
|
|
256
327
|
curve = (0, bezier_1.makeBezier)({
|
|
257
328
|
ax: cur[0],
|
|
258
329
|
ay: cur[1],
|
|
259
330
|
bx: 2 * cur[0] - prev_point[0],
|
|
260
331
|
by: 2 * cur[1] - prev_point[1],
|
|
261
|
-
cx: cur[0] + instruction
|
|
262
|
-
cy: cur[1] + instruction
|
|
332
|
+
cx: cur[0] + instruction.dx,
|
|
333
|
+
cy: cur[1] + instruction.dy,
|
|
263
334
|
dx: null,
|
|
264
335
|
dy: null,
|
|
265
336
|
});
|
|
@@ -267,43 +338,48 @@ const construct = (string) => {
|
|
|
267
338
|
functions.push(curve);
|
|
268
339
|
}
|
|
269
340
|
else {
|
|
270
|
-
const linearCurve = (0, linear_1.makeLinearPosition)(
|
|
341
|
+
const linearCurve = (0, linear_1.makeLinearPosition)({
|
|
342
|
+
x0: cur[0],
|
|
343
|
+
x1: cur[0] + instruction.dx,
|
|
344
|
+
y0: cur[1],
|
|
345
|
+
y1: cur[1] + instruction.dy,
|
|
346
|
+
});
|
|
271
347
|
length += linearCurve.getTotalLength();
|
|
272
348
|
functions.push(linearCurve);
|
|
273
349
|
}
|
|
274
350
|
prev_point = [2 * cur[0] - prev_point[0], 2 * cur[1] - prev_point[1]];
|
|
275
|
-
cur = [instruction
|
|
351
|
+
cur = [instruction.dx + cur[0], instruction.dy + cur[1]];
|
|
276
352
|
}
|
|
277
|
-
else if (instruction
|
|
353
|
+
else if (instruction.type === 'A') {
|
|
278
354
|
const arcCurve = (0, arc_1.makeArc)({
|
|
279
355
|
x0: cur[0],
|
|
280
356
|
y0: cur[1],
|
|
281
|
-
rx: instruction
|
|
282
|
-
ry: instruction
|
|
283
|
-
xAxisRotate: instruction
|
|
284
|
-
LargeArcFlag: instruction
|
|
285
|
-
SweepFlag: instruction
|
|
286
|
-
x1: instruction
|
|
287
|
-
y1: instruction
|
|
357
|
+
rx: instruction.rx,
|
|
358
|
+
ry: instruction.ry,
|
|
359
|
+
xAxisRotate: instruction.xAxisRotation,
|
|
360
|
+
LargeArcFlag: instruction.largeArcFlag,
|
|
361
|
+
SweepFlag: instruction.sweepFlag,
|
|
362
|
+
x1: instruction.x,
|
|
363
|
+
y1: instruction.y,
|
|
288
364
|
});
|
|
289
365
|
length += arcCurve.getTotalLength();
|
|
290
|
-
cur = [instruction
|
|
366
|
+
cur = [instruction.x, instruction.y];
|
|
291
367
|
functions.push(arcCurve);
|
|
292
368
|
}
|
|
293
|
-
else if (instruction
|
|
369
|
+
else if (instruction.type === 'a') {
|
|
294
370
|
const arcCurve = (0, arc_1.makeArc)({
|
|
295
371
|
x0: cur[0],
|
|
296
372
|
y0: cur[1],
|
|
297
|
-
rx: instruction
|
|
298
|
-
ry: instruction
|
|
299
|
-
xAxisRotate: instruction
|
|
300
|
-
LargeArcFlag: instruction
|
|
301
|
-
SweepFlag: instruction
|
|
302
|
-
x1: cur[0] + instruction
|
|
303
|
-
y1: cur[1] + instruction
|
|
373
|
+
rx: instruction.rx,
|
|
374
|
+
ry: instruction.ry,
|
|
375
|
+
xAxisRotate: instruction.xAxisRotation,
|
|
376
|
+
LargeArcFlag: instruction.largeArcFlag,
|
|
377
|
+
SweepFlag: instruction.sweepFlag,
|
|
378
|
+
x1: cur[0] + instruction.dx,
|
|
379
|
+
y1: cur[1] + instruction.dy,
|
|
304
380
|
});
|
|
305
381
|
length += arcCurve.getTotalLength();
|
|
306
|
-
cur = [cur[0] + instruction
|
|
382
|
+
cur = [cur[0] + instruction.dx, cur[1] + instruction.dy];
|
|
307
383
|
functions.push(arcCurve);
|
|
308
384
|
}
|
|
309
385
|
partial_lengths.push(length);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { AbsoluteInstruction, ReducedInstruction } from './types';
|
|
2
|
+
export declare const iterateOverSegments: <T extends ReducedInstruction>({ segments, iterate, }: {
|
|
3
|
+
segments: AbsoluteInstruction[];
|
|
4
|
+
iterate: (options: {
|
|
5
|
+
segment: AbsoluteInstruction;
|
|
6
|
+
prevSegment: AbsoluteInstruction | null;
|
|
7
|
+
x: number;
|
|
8
|
+
y: number;
|
|
9
|
+
initialX: number;
|
|
10
|
+
initialY: number;
|
|
11
|
+
}) => T[];
|
|
12
|
+
}) => T[];
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.iterateOverSegments = void 0;
|
|
4
|
+
const iterateOverSegments = ({ segments, iterate, }) => {
|
|
5
|
+
let x = 0;
|
|
6
|
+
let y = 0;
|
|
7
|
+
let initialX = 0;
|
|
8
|
+
let initialY = 0;
|
|
9
|
+
const newSegments = segments.map((s, i) => {
|
|
10
|
+
var _a;
|
|
11
|
+
const newSeg = iterate({
|
|
12
|
+
segment: s,
|
|
13
|
+
x,
|
|
14
|
+
y,
|
|
15
|
+
prevSegment: (_a = segments[i - 1]) !== null && _a !== void 0 ? _a : null,
|
|
16
|
+
initialX,
|
|
17
|
+
initialY,
|
|
18
|
+
});
|
|
19
|
+
switch (s.type) {
|
|
20
|
+
case 'M':
|
|
21
|
+
initialX = s.x;
|
|
22
|
+
initialY = s.y;
|
|
23
|
+
// fallthrough
|
|
24
|
+
case 'A':
|
|
25
|
+
case 'C':
|
|
26
|
+
case 'Q':
|
|
27
|
+
case 'S':
|
|
28
|
+
case 'T':
|
|
29
|
+
case 'L': {
|
|
30
|
+
x = s.x;
|
|
31
|
+
y = s.y;
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
case 'V': {
|
|
35
|
+
y = s.y;
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
case 'H': {
|
|
39
|
+
x = s.x;
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
case 'Z': {
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
default:
|
|
46
|
+
// @ts-expect-error
|
|
47
|
+
throw new Error(`Unexpected instruction ${s.type}`);
|
|
48
|
+
}
|
|
49
|
+
return newSeg;
|
|
50
|
+
});
|
|
51
|
+
return newSegments.flat(1);
|
|
52
|
+
};
|
|
53
|
+
exports.iterateOverSegments = iterateOverSegments;
|
package/dist/helpers/linear.d.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import type { Point, PointProperties } from './types';
|
|
2
|
-
export declare const makeLinearPosition: (x0
|
|
2
|
+
export declare const makeLinearPosition: ({ x0, x1, y0, y1, }: {
|
|
3
|
+
x0: number;
|
|
4
|
+
x1: number;
|
|
5
|
+
y0: number;
|
|
6
|
+
y1: number;
|
|
7
|
+
}) => {
|
|
3
8
|
getTotalLength: () => number;
|
|
4
9
|
getPointAtLength: (pos: number) => Point;
|
|
5
10
|
getTangentAtLength: () => Point;
|
package/dist/helpers/linear.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.makeLinearPosition = void 0;
|
|
4
|
-
const makeLinearPosition = (x0, x1, y0, y1) => {
|
|
4
|
+
const makeLinearPosition = ({ x0, x1, y0, y1, }) => {
|
|
5
5
|
const getTotalLength = () => {
|
|
6
6
|
return Math.sqrt((x0 - x1) ** 2 + (y0 - y1) ** 2);
|
|
7
7
|
};
|