@remotion/paths 3.2.12-crf.6 → 3.2.13
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/package.json +2 -2
- package/dist/arc.d.ts +0 -12
- package/dist/arc.js +0 -231
- package/dist/bezier-functions.d.ts +0 -11
- package/dist/bezier-functions.js +0 -138
- package/dist/bezier-values.d.ts +0 -3
- package/dist/bezier-values.js +0 -693
- package/dist/bezier.d.ts +0 -26
- package/dist/bezier.js +0 -81
- package/dist/construct.d.ts +0 -7
- package/dist/construct.js +0 -308
- package/dist/get-part-at-length.d.ts +0 -4
- package/dist/get-part-at-length.js +0 -20
- package/dist/get-properties-at-length.d.ts +0 -1
- package/dist/get-properties-at-length.js +0 -23
- package/dist/get-reversed-path.d.ts +0 -12
- package/dist/get-reversed-path.js +0 -159
- package/dist/linear.d.ts +0 -7
- package/dist/linear.js +0 -31
- package/dist/parse.d.ts +0 -2
- package/dist/parse.js +0 -48
- package/dist/types.d.ts +0 -26
- package/dist/types.js +0 -2
package/dist/bezier.d.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import type { Point } from './types';
|
|
2
|
-
export declare const makeBezier: ({ ax, ay, bx, by, cx, cy, dx, dy, }: {
|
|
3
|
-
ax: number;
|
|
4
|
-
ay: number;
|
|
5
|
-
bx: number;
|
|
6
|
-
by: number;
|
|
7
|
-
cx: number;
|
|
8
|
-
cy: number;
|
|
9
|
-
dx: number | null;
|
|
10
|
-
dy: number | null;
|
|
11
|
-
}) => {
|
|
12
|
-
getPointAtLength: (len: number) => Point;
|
|
13
|
-
getPropertiesAtLength: (len: number) => {
|
|
14
|
-
x: number;
|
|
15
|
-
y: number;
|
|
16
|
-
tangentX: number;
|
|
17
|
-
tangentY: number;
|
|
18
|
-
};
|
|
19
|
-
getTangentAtLength: (len: number) => Point;
|
|
20
|
-
getTotalLength: () => number;
|
|
21
|
-
getC: () => {
|
|
22
|
-
x: number;
|
|
23
|
-
y: number;
|
|
24
|
-
};
|
|
25
|
-
getD: () => Point;
|
|
26
|
-
};
|
package/dist/bezier.js
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.makeBezier = void 0;
|
|
4
|
-
const bezier_functions_1 = require("./bezier-functions");
|
|
5
|
-
const makeBezier = ({ ax, ay, bx, by, cx, cy, dx, dy, }) => {
|
|
6
|
-
let d;
|
|
7
|
-
let getArcLength;
|
|
8
|
-
let getPoint;
|
|
9
|
-
let getDerivative;
|
|
10
|
-
const a = { x: ax, y: ay };
|
|
11
|
-
const b = { x: bx, y: by };
|
|
12
|
-
const c = { x: cx, y: cy };
|
|
13
|
-
if (dx !== null && dy !== null) {
|
|
14
|
-
getArcLength = bezier_functions_1.getCubicArcLength;
|
|
15
|
-
getPoint = bezier_functions_1.cubicPoint;
|
|
16
|
-
getDerivative = bezier_functions_1.cubicDerivative;
|
|
17
|
-
d = { x: dx, y: dy };
|
|
18
|
-
}
|
|
19
|
-
else {
|
|
20
|
-
getArcLength = bezier_functions_1.getQuadraticArcLength;
|
|
21
|
-
getPoint = bezier_functions_1.quadraticPoint;
|
|
22
|
-
getDerivative = bezier_functions_1.quadraticDerivative;
|
|
23
|
-
d = { x: 0, y: 0 };
|
|
24
|
-
}
|
|
25
|
-
const length = getArcLength([a.x, b.x, c.x, d.x], [a.y, b.y, c.y, d.y], 1);
|
|
26
|
-
const getTotalLength = () => {
|
|
27
|
-
return length;
|
|
28
|
-
};
|
|
29
|
-
const getPointAtLength = (len) => {
|
|
30
|
-
const xs = [a.x, b.x, c.x, d.x];
|
|
31
|
-
const xy = [a.y, b.y, c.y, d.y];
|
|
32
|
-
const t = (0, bezier_functions_1.t2length)(len, len, (i) => getArcLength(xs, xy, i));
|
|
33
|
-
return getPoint(xs, xy, t);
|
|
34
|
-
};
|
|
35
|
-
const getTangentAtLength = (len) => {
|
|
36
|
-
const xs = [a.x, b.x, c.x, d.x];
|
|
37
|
-
const xy = [a.y, b.y, c.y, d.y];
|
|
38
|
-
const t = (0, bezier_functions_1.t2length)(len, len, (i) => getArcLength(xs, xy, i));
|
|
39
|
-
const derivative = getDerivative(xs, xy, t);
|
|
40
|
-
const mdl = Math.sqrt(derivative.x * derivative.x + derivative.y * derivative.y);
|
|
41
|
-
let tangent;
|
|
42
|
-
if (mdl > 0) {
|
|
43
|
-
tangent = { x: derivative.x / mdl, y: derivative.y / mdl };
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
tangent = { x: 0, y: 0 };
|
|
47
|
-
}
|
|
48
|
-
return tangent;
|
|
49
|
-
};
|
|
50
|
-
const getPropertiesAtLength = (len) => {
|
|
51
|
-
const xs = [a.x, b.x, c.x, d.x];
|
|
52
|
-
const xy = [a.y, b.y, c.y, d.y];
|
|
53
|
-
const t = (0, bezier_functions_1.t2length)(len, len, (i) => getArcLength(xs, xy, i));
|
|
54
|
-
const derivative = getDerivative(xs, xy, t);
|
|
55
|
-
const mdl = Math.sqrt(derivative.x * derivative.x + derivative.y * derivative.y);
|
|
56
|
-
let tangent;
|
|
57
|
-
if (mdl > 0) {
|
|
58
|
-
tangent = { x: derivative.x / mdl, y: derivative.y / mdl };
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
tangent = { x: 0, y: 0 };
|
|
62
|
-
}
|
|
63
|
-
const point = getPoint(xs, xy, t);
|
|
64
|
-
return { x: point.x, y: point.y, tangentX: tangent.x, tangentY: tangent.y };
|
|
65
|
-
};
|
|
66
|
-
const getC = () => {
|
|
67
|
-
return c;
|
|
68
|
-
};
|
|
69
|
-
const getD = () => {
|
|
70
|
-
return d;
|
|
71
|
-
};
|
|
72
|
-
return {
|
|
73
|
-
getPointAtLength,
|
|
74
|
-
getPropertiesAtLength,
|
|
75
|
-
getTangentAtLength,
|
|
76
|
-
getTotalLength,
|
|
77
|
-
getC,
|
|
78
|
-
getD,
|
|
79
|
-
};
|
|
80
|
-
};
|
|
81
|
-
exports.makeBezier = makeBezier;
|
package/dist/construct.d.ts
DELETED
package/dist/construct.js
DELETED
|
@@ -1,308 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.construct = void 0;
|
|
7
|
-
const arc_1 = require("./arc");
|
|
8
|
-
const bezier_1 = require("./bezier");
|
|
9
|
-
const linear_1 = require("./linear");
|
|
10
|
-
const parse_1 = __importDefault(require("./parse"));
|
|
11
|
-
const construct = (string) => {
|
|
12
|
-
let length = 0;
|
|
13
|
-
const partial_lengths = [];
|
|
14
|
-
const functions = [];
|
|
15
|
-
let initial_point = null;
|
|
16
|
-
const parsed = (0, parse_1.default)(string);
|
|
17
|
-
let cur = [0, 0];
|
|
18
|
-
let prev_point = [0, 0];
|
|
19
|
-
let curve;
|
|
20
|
-
let ringStart = [0, 0];
|
|
21
|
-
for (let i = 0; i < parsed.length; i++) {
|
|
22
|
-
// moveTo
|
|
23
|
-
if (parsed[i][0] === 'M') {
|
|
24
|
-
cur = [parsed[i][1], parsed[i][2]];
|
|
25
|
-
ringStart = [cur[0], cur[1]];
|
|
26
|
-
functions.push(null);
|
|
27
|
-
if (i === 0) {
|
|
28
|
-
initial_point = { x: parsed[i][1], y: parsed[i][2] };
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
else if (parsed[i][0] === 'm') {
|
|
32
|
-
cur = [parsed[i][1] + cur[0], parsed[i][2] + cur[1]];
|
|
33
|
-
ringStart = [cur[0], cur[1]];
|
|
34
|
-
functions.push(null);
|
|
35
|
-
// lineTo
|
|
36
|
-
}
|
|
37
|
-
else if (parsed[i][0] === 'L') {
|
|
38
|
-
length += Math.sqrt((cur[0] - parsed[i][1]) ** 2 + (cur[1] - parsed[i][2]) ** 2);
|
|
39
|
-
functions.push((0, linear_1.makeLinearPosition)(cur[0], parsed[i][1], cur[1], parsed[i][2]));
|
|
40
|
-
cur = [parsed[i][1], parsed[i][2]];
|
|
41
|
-
}
|
|
42
|
-
else if (parsed[i][0] === 'l') {
|
|
43
|
-
length += Math.sqrt(parsed[i][1] ** 2 + parsed[i][2] ** 2);
|
|
44
|
-
functions.push((0, linear_1.makeLinearPosition)(cur[0], parsed[i][1] + cur[0], cur[1], parsed[i][2] + cur[1]));
|
|
45
|
-
cur = [parsed[i][1] + cur[0], parsed[i][2] + cur[1]];
|
|
46
|
-
}
|
|
47
|
-
else if (parsed[i][0] === 'H') {
|
|
48
|
-
length += Math.abs(cur[0] - parsed[i][1]);
|
|
49
|
-
functions.push((0, linear_1.makeLinearPosition)(cur[0], parsed[i][1], cur[1], cur[1]));
|
|
50
|
-
cur[0] = parsed[i][1];
|
|
51
|
-
}
|
|
52
|
-
else if (parsed[i][0] === 'h') {
|
|
53
|
-
length += Math.abs(parsed[i][1]);
|
|
54
|
-
functions.push((0, linear_1.makeLinearPosition)(cur[0], cur[0] + parsed[i][1], cur[1], cur[1]));
|
|
55
|
-
cur[0] = parsed[i][1] + cur[0];
|
|
56
|
-
}
|
|
57
|
-
else if (parsed[i][0] === 'V') {
|
|
58
|
-
length += Math.abs(cur[1] - parsed[i][1]);
|
|
59
|
-
functions.push((0, linear_1.makeLinearPosition)(cur[0], cur[0], cur[1], parsed[i][1]));
|
|
60
|
-
cur[1] = parsed[i][1];
|
|
61
|
-
}
|
|
62
|
-
else if (parsed[i][0] === 'v') {
|
|
63
|
-
length += Math.abs(parsed[i][1]);
|
|
64
|
-
functions.push((0, linear_1.makeLinearPosition)(cur[0], cur[0], cur[1], cur[1] + parsed[i][1]));
|
|
65
|
-
cur[1] = parsed[i][1] + cur[1];
|
|
66
|
-
// Close path
|
|
67
|
-
}
|
|
68
|
-
else if (parsed[i][0] === 'z' || parsed[i][0] === 'Z') {
|
|
69
|
-
length += Math.sqrt((ringStart[0] - cur[0]) ** 2 + (ringStart[1] - cur[1]) ** 2);
|
|
70
|
-
functions.push((0, linear_1.makeLinearPosition)(cur[0], ringStart[0], cur[1], ringStart[1]));
|
|
71
|
-
cur = [ringStart[0], ringStart[1]];
|
|
72
|
-
// Cubic Bezier curves
|
|
73
|
-
}
|
|
74
|
-
else if (parsed[i][0] === 'C') {
|
|
75
|
-
curve = (0, bezier_1.makeBezier)({
|
|
76
|
-
ax: cur[0],
|
|
77
|
-
ay: cur[1],
|
|
78
|
-
bx: parsed[i][1],
|
|
79
|
-
by: parsed[i][2],
|
|
80
|
-
cx: parsed[i][3],
|
|
81
|
-
cy: parsed[i][4],
|
|
82
|
-
dx: parsed[i][5],
|
|
83
|
-
dy: parsed[i][6],
|
|
84
|
-
});
|
|
85
|
-
length += curve.getTotalLength();
|
|
86
|
-
cur = [parsed[i][5], parsed[i][6]];
|
|
87
|
-
functions.push(curve);
|
|
88
|
-
}
|
|
89
|
-
else if (parsed[i][0] === 'c') {
|
|
90
|
-
curve = (0, bezier_1.makeBezier)({
|
|
91
|
-
ax: cur[0],
|
|
92
|
-
ay: cur[1],
|
|
93
|
-
bx: cur[0] + parsed[i][1],
|
|
94
|
-
by: cur[1] + parsed[i][2],
|
|
95
|
-
cx: cur[0] + parsed[i][3],
|
|
96
|
-
cy: cur[1] + parsed[i][4],
|
|
97
|
-
dx: cur[0] + parsed[i][5],
|
|
98
|
-
dy: cur[1] + parsed[i][6],
|
|
99
|
-
});
|
|
100
|
-
if (curve.getTotalLength() > 0) {
|
|
101
|
-
length += curve.getTotalLength();
|
|
102
|
-
functions.push(curve);
|
|
103
|
-
cur = [parsed[i][5] + cur[0], parsed[i][6] + cur[1]];
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
functions.push((0, linear_1.makeLinearPosition)(cur[0], cur[0], cur[1], cur[1]));
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
else if (parsed[i][0] === 'S') {
|
|
110
|
-
if (i > 0 && ['C', 'c', 'S', 's'].indexOf(parsed[i - 1][0]) > -1) {
|
|
111
|
-
if (curve) {
|
|
112
|
-
const c = curve.getC();
|
|
113
|
-
curve = (0, bezier_1.makeBezier)({
|
|
114
|
-
ax: cur[0],
|
|
115
|
-
ay: cur[1],
|
|
116
|
-
bx: 2 * cur[0] - c.x,
|
|
117
|
-
by: 2 * cur[1] - c.y,
|
|
118
|
-
cx: parsed[i][1],
|
|
119
|
-
cy: parsed[i][2],
|
|
120
|
-
dx: parsed[i][3],
|
|
121
|
-
dy: parsed[i][4],
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
else {
|
|
126
|
-
curve = (0, bezier_1.makeBezier)({
|
|
127
|
-
ax: cur[0],
|
|
128
|
-
ay: cur[1],
|
|
129
|
-
bx: cur[0],
|
|
130
|
-
by: cur[1],
|
|
131
|
-
cx: parsed[i][1],
|
|
132
|
-
cy: parsed[i][2],
|
|
133
|
-
dx: parsed[i][3],
|
|
134
|
-
dy: parsed[i][4],
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
if (curve) {
|
|
138
|
-
length += curve.getTotalLength();
|
|
139
|
-
cur = [parsed[i][3], parsed[i][4]];
|
|
140
|
-
functions.push(curve);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
else if (parsed[i][0] === 's') {
|
|
144
|
-
// 240 225
|
|
145
|
-
if (i > 0 && ['C', 'c', 'S', 's'].indexOf(parsed[i - 1][0]) > -1) {
|
|
146
|
-
if (curve) {
|
|
147
|
-
const c = curve.getC();
|
|
148
|
-
const d = curve.getD();
|
|
149
|
-
curve = (0, bezier_1.makeBezier)({
|
|
150
|
-
ax: cur[0],
|
|
151
|
-
ay: cur[1],
|
|
152
|
-
bx: cur[0] + d.x - c.x,
|
|
153
|
-
by: cur[1] + d.y - c.y,
|
|
154
|
-
cx: cur[0] + parsed[i][1],
|
|
155
|
-
cy: cur[1] + parsed[i][2],
|
|
156
|
-
dx: cur[0] + parsed[i][3],
|
|
157
|
-
dy: cur[1] + parsed[i][4],
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
curve = (0, bezier_1.makeBezier)({
|
|
163
|
-
ax: cur[0],
|
|
164
|
-
ay: cur[1],
|
|
165
|
-
bx: cur[0],
|
|
166
|
-
by: cur[1],
|
|
167
|
-
cx: cur[0] + parsed[i][1],
|
|
168
|
-
cy: cur[1] + parsed[i][2],
|
|
169
|
-
dx: cur[0] + parsed[i][3],
|
|
170
|
-
dy: cur[1] + parsed[i][4],
|
|
171
|
-
});
|
|
172
|
-
}
|
|
173
|
-
if (curve) {
|
|
174
|
-
length += curve.getTotalLength();
|
|
175
|
-
cur = [parsed[i][3] + cur[0], parsed[i][4] + cur[1]];
|
|
176
|
-
functions.push(curve);
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
// Quadratic Bezier curves
|
|
180
|
-
else if (parsed[i][0] === 'Q') {
|
|
181
|
-
if (cur[0] === parsed[i][1] && cur[1] === parsed[i][2]) {
|
|
182
|
-
const linearCurve = (0, linear_1.makeLinearPosition)(parsed[i][1], parsed[i][3], parsed[i][2], parsed[i][4]);
|
|
183
|
-
length += linearCurve.getTotalLength();
|
|
184
|
-
functions.push(linearCurve);
|
|
185
|
-
}
|
|
186
|
-
else {
|
|
187
|
-
curve = (0, bezier_1.makeBezier)({
|
|
188
|
-
ax: cur[0],
|
|
189
|
-
ay: cur[1],
|
|
190
|
-
bx: parsed[i][1],
|
|
191
|
-
by: parsed[i][2],
|
|
192
|
-
cx: parsed[i][3],
|
|
193
|
-
cy: parsed[i][4],
|
|
194
|
-
dx: null,
|
|
195
|
-
dy: null,
|
|
196
|
-
});
|
|
197
|
-
length += curve.getTotalLength();
|
|
198
|
-
functions.push(curve);
|
|
199
|
-
}
|
|
200
|
-
cur = [parsed[i][3], parsed[i][4]];
|
|
201
|
-
prev_point = [parsed[i][1], parsed[i][2]];
|
|
202
|
-
}
|
|
203
|
-
else if (parsed[i][0] === 'q') {
|
|
204
|
-
if (parsed[i][1] === 0 && parsed[i][2] === 0) {
|
|
205
|
-
const linearCurve = (0, linear_1.makeLinearPosition)(cur[0] + parsed[i][1], cur[0] + parsed[i][3], cur[1] + parsed[i][2], cur[1] + parsed[i][4]);
|
|
206
|
-
length += linearCurve.getTotalLength();
|
|
207
|
-
functions.push(linearCurve);
|
|
208
|
-
}
|
|
209
|
-
else {
|
|
210
|
-
curve = (0, bezier_1.makeBezier)({
|
|
211
|
-
ax: cur[0],
|
|
212
|
-
ay: cur[1],
|
|
213
|
-
bx: cur[0] + parsed[i][1],
|
|
214
|
-
by: cur[1] + parsed[i][2],
|
|
215
|
-
cx: cur[0] + parsed[i][3],
|
|
216
|
-
cy: cur[1] + parsed[i][4],
|
|
217
|
-
dx: null,
|
|
218
|
-
dy: null,
|
|
219
|
-
});
|
|
220
|
-
length += curve.getTotalLength();
|
|
221
|
-
functions.push(curve);
|
|
222
|
-
}
|
|
223
|
-
prev_point = [cur[0] + parsed[i][1], cur[1] + parsed[i][2]];
|
|
224
|
-
cur = [parsed[i][3] + cur[0], parsed[i][4] + cur[1]];
|
|
225
|
-
}
|
|
226
|
-
else if (parsed[i][0] === 'T') {
|
|
227
|
-
if (i > 0 && ['Q', 'q', 'T', 't'].indexOf(parsed[i - 1][0]) > -1) {
|
|
228
|
-
curve = (0, bezier_1.makeBezier)({
|
|
229
|
-
ax: cur[0],
|
|
230
|
-
ay: cur[1],
|
|
231
|
-
bx: 2 * cur[0] - prev_point[0],
|
|
232
|
-
by: 2 * cur[1] - prev_point[1],
|
|
233
|
-
cx: parsed[i][1],
|
|
234
|
-
cy: parsed[i][2],
|
|
235
|
-
dx: null,
|
|
236
|
-
dy: null,
|
|
237
|
-
});
|
|
238
|
-
functions.push(curve);
|
|
239
|
-
length += curve.getTotalLength();
|
|
240
|
-
}
|
|
241
|
-
else {
|
|
242
|
-
const linearCurve = (0, linear_1.makeLinearPosition)(cur[0], parsed[i][1], cur[1], parsed[i][2]);
|
|
243
|
-
functions.push(linearCurve);
|
|
244
|
-
length += linearCurve.getTotalLength();
|
|
245
|
-
}
|
|
246
|
-
prev_point = [2 * cur[0] - prev_point[0], 2 * cur[1] - prev_point[1]];
|
|
247
|
-
cur = [parsed[i][1], parsed[i][2]];
|
|
248
|
-
}
|
|
249
|
-
else if (parsed[i][0] === 't') {
|
|
250
|
-
if (i > 0 && ['Q', 'q', 'T', 't'].indexOf(parsed[i - 1][0]) > -1) {
|
|
251
|
-
curve = (0, bezier_1.makeBezier)({
|
|
252
|
-
ax: cur[0],
|
|
253
|
-
ay: cur[1],
|
|
254
|
-
bx: 2 * cur[0] - prev_point[0],
|
|
255
|
-
by: 2 * cur[1] - prev_point[1],
|
|
256
|
-
cx: cur[0] + parsed[i][1],
|
|
257
|
-
cy: cur[1] + parsed[i][2],
|
|
258
|
-
dx: null,
|
|
259
|
-
dy: null,
|
|
260
|
-
});
|
|
261
|
-
length += curve.getTotalLength();
|
|
262
|
-
functions.push(curve);
|
|
263
|
-
}
|
|
264
|
-
else {
|
|
265
|
-
const linearCurve = (0, linear_1.makeLinearPosition)(cur[0], cur[0] + parsed[i][1], cur[1], cur[1] + parsed[i][2]);
|
|
266
|
-
length += linearCurve.getTotalLength();
|
|
267
|
-
functions.push(linearCurve);
|
|
268
|
-
}
|
|
269
|
-
prev_point = [2 * cur[0] - prev_point[0], 2 * cur[1] - prev_point[1]];
|
|
270
|
-
cur = [parsed[i][1] + cur[0], parsed[i][2] + cur[1]];
|
|
271
|
-
}
|
|
272
|
-
else if (parsed[i][0] === 'A') {
|
|
273
|
-
const arcCurve = (0, arc_1.makeArc)({
|
|
274
|
-
x0: cur[0],
|
|
275
|
-
y0: cur[1],
|
|
276
|
-
rx: parsed[i][1],
|
|
277
|
-
ry: parsed[i][2],
|
|
278
|
-
xAxisRotate: parsed[i][3],
|
|
279
|
-
LargeArcFlag: parsed[i][4] === 1,
|
|
280
|
-
SweepFlag: parsed[i][5] === 1,
|
|
281
|
-
x1: parsed[i][6],
|
|
282
|
-
y1: parsed[i][7],
|
|
283
|
-
});
|
|
284
|
-
length += arcCurve.getTotalLength();
|
|
285
|
-
cur = [parsed[i][6], parsed[i][7]];
|
|
286
|
-
functions.push(arcCurve);
|
|
287
|
-
}
|
|
288
|
-
else if (parsed[i][0] === 'a') {
|
|
289
|
-
const arcCurve = (0, arc_1.makeArc)({
|
|
290
|
-
x0: cur[0],
|
|
291
|
-
y0: cur[1],
|
|
292
|
-
rx: parsed[i][1],
|
|
293
|
-
ry: parsed[i][2],
|
|
294
|
-
xAxisRotate: parsed[i][3],
|
|
295
|
-
LargeArcFlag: parsed[i][4] === 1,
|
|
296
|
-
SweepFlag: parsed[i][5] === 1,
|
|
297
|
-
x1: cur[0] + parsed[i][6],
|
|
298
|
-
y1: cur[1] + parsed[i][7],
|
|
299
|
-
});
|
|
300
|
-
length += arcCurve.getTotalLength();
|
|
301
|
-
cur = [cur[0] + parsed[i][6], cur[1] + parsed[i][7]];
|
|
302
|
-
functions.push(arcCurve);
|
|
303
|
-
}
|
|
304
|
-
partial_lengths.push(length);
|
|
305
|
-
}
|
|
306
|
-
return { initial_point, length, partial_lengths, functions };
|
|
307
|
-
};
|
|
308
|
-
exports.construct = construct;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getPartAtLength = void 0;
|
|
4
|
-
const construct_1 = require("./helpers/construct");
|
|
5
|
-
const getPartAtLength = (p, fractionLength) => {
|
|
6
|
-
const constructed = (0, construct_1.construct)(p);
|
|
7
|
-
if (fractionLength < 0) {
|
|
8
|
-
fractionLength = 0;
|
|
9
|
-
}
|
|
10
|
-
else if (fractionLength > constructed.length) {
|
|
11
|
-
fractionLength = constructed.length;
|
|
12
|
-
}
|
|
13
|
-
let i = constructed.partial_lengths.length - 1;
|
|
14
|
-
while (constructed.partial_lengths[i] >= fractionLength && i > 0) {
|
|
15
|
-
i--;
|
|
16
|
-
}
|
|
17
|
-
i++;
|
|
18
|
-
return { fraction: fractionLength - constructed.partial_lengths[i - 1], i };
|
|
19
|
-
};
|
|
20
|
-
exports.getPartAtLength = getPartAtLength;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const getPropertiesAtLength: (p: string, fractionLength: number) => any;
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getPropertiesAtLength = void 0;
|
|
4
|
-
const construct_1 = require("./helpers/construct");
|
|
5
|
-
const get_part_at_length_1 = require("./helpers/get-part-at-length");
|
|
6
|
-
const getPropertiesAtLength = (p, fractionLength) => {
|
|
7
|
-
const constructed = (0, construct_1.construct)(p);
|
|
8
|
-
const fractionPart = (0, get_part_at_length_1.getPartAtLength)(p, fractionLength);
|
|
9
|
-
const functionAtPart = constructed.functions[fractionPart.i];
|
|
10
|
-
if (functionAtPart) {
|
|
11
|
-
return functionAtPart.getPropertiesAtLength(fractionPart.fraction);
|
|
12
|
-
}
|
|
13
|
-
if (constructed.initial_point) {
|
|
14
|
-
return {
|
|
15
|
-
x: constructed.initial_point.x,
|
|
16
|
-
y: constructed.initial_point.y,
|
|
17
|
-
tangentX: 0,
|
|
18
|
-
tangentY: 0,
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
throw new Error('Wrong function at this part.');
|
|
22
|
-
};
|
|
23
|
-
exports.getPropertiesAtLength = getPropertiesAtLength;
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* https://github.com/Pomax/svg-path-reverse
|
|
3
|
-
*
|
|
4
|
-
* This code is in the public domain, except in jurisdictions that do
|
|
5
|
-
* not recognise the public domain, where this code is MIT licensed.
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* This is the function that you'll actually want to
|
|
9
|
-
* make use of, because it lets you reverse individual
|
|
10
|
-
* subpaths in some <path> "d" attribute.
|
|
11
|
-
*/
|
|
12
|
-
export declare const reversePath: (_path: string, _subpath?: number) => string;
|
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* https://github.com/Pomax/svg-path-reverse
|
|
4
|
-
*
|
|
5
|
-
* This code is in the public domain, except in jurisdictions that do
|
|
6
|
-
* not recognise the public domain, where this code is MIT licensed.
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.reversePath = void 0;
|
|
10
|
-
const normalize_path_1 = require("./normalize-path");
|
|
11
|
-
/**
|
|
12
|
-
* Normalise an SVG path to absolute coordinates
|
|
13
|
-
* and full commands, rather than relative coordinates
|
|
14
|
-
* and/or shortcut commands.
|
|
15
|
-
*/
|
|
16
|
-
/**
|
|
17
|
-
* Reverse an SVG path.
|
|
18
|
-
* As long as the input path is normalised, this is actually really
|
|
19
|
-
* simple to do. As all pathing commands are symmetrical, meaning
|
|
20
|
-
* that they render the same when you reverse the coordinate order,
|
|
21
|
-
* the grand trick here is to reverse the path (making sure to keep
|
|
22
|
-
* coordinates ordered pairwise) and shift the operators left by
|
|
23
|
-
* one or two coordinate pairs depending on the operator:
|
|
24
|
-
*
|
|
25
|
-
* - Z is removed (after noting it existed),
|
|
26
|
-
* - L moves to 2 spots earlier (skipping one coordinate),
|
|
27
|
-
* - Q moves to 2 spots earlier (skipping one coordinate),
|
|
28
|
-
* - C moves to 4 spots earlier (skipping two coordinates)
|
|
29
|
-
* and its arguments get reversed,
|
|
30
|
-
* - the path start becomes M.
|
|
31
|
-
* - the path end becomes Z iff it was there to begin with.
|
|
32
|
-
*/
|
|
33
|
-
function reverseNormalizedPath(normalized) {
|
|
34
|
-
const terms = normalized.trim().split(' ');
|
|
35
|
-
let term;
|
|
36
|
-
const tlen = terms.length;
|
|
37
|
-
const tlen1 = tlen - 1;
|
|
38
|
-
let t;
|
|
39
|
-
const reversed = [];
|
|
40
|
-
let x;
|
|
41
|
-
let y;
|
|
42
|
-
let pair;
|
|
43
|
-
let pairs;
|
|
44
|
-
let shift;
|
|
45
|
-
const matcher = /[QAZLCM]/;
|
|
46
|
-
const closed = terms.slice(-1)[0].toUpperCase() === 'Z';
|
|
47
|
-
for (t = 0; t < tlen; t++) {
|
|
48
|
-
term = terms[t];
|
|
49
|
-
// Is this an operator? If it is, run through its
|
|
50
|
-
// argument list, which we know is fixed length.
|
|
51
|
-
if (matcher.test(term)) {
|
|
52
|
-
// Arc processing relies on not-just-coordinates
|
|
53
|
-
if (term === 'A') {
|
|
54
|
-
reversed.push(terms[t + 5] === '0' ? '1' : '0');
|
|
55
|
-
reversed.push(terms[t + 4]);
|
|
56
|
-
reversed.push(terms[t + 3]);
|
|
57
|
-
reversed.push(terms[t + 2]);
|
|
58
|
-
reversed.push(terms[t + 1]);
|
|
59
|
-
reversed.push(term);
|
|
60
|
-
reversed.push(terms[t + 7]);
|
|
61
|
-
reversed.push(terms[t + 6]);
|
|
62
|
-
t += 7;
|
|
63
|
-
continue;
|
|
64
|
-
}
|
|
65
|
-
// how many coordinate pairs do we need to read,
|
|
66
|
-
// and by how many pairs should this operator be
|
|
67
|
-
// shifted left?
|
|
68
|
-
else if (term === 'C') {
|
|
69
|
-
pairs = 3;
|
|
70
|
-
shift = 2;
|
|
71
|
-
}
|
|
72
|
-
else if (term === 'Q') {
|
|
73
|
-
pairs = 2;
|
|
74
|
-
shift = 1;
|
|
75
|
-
}
|
|
76
|
-
else if (term === 'L') {
|
|
77
|
-
pairs = 1;
|
|
78
|
-
shift = 1;
|
|
79
|
-
}
|
|
80
|
-
else if (term === 'M') {
|
|
81
|
-
pairs = 1;
|
|
82
|
-
shift = 0;
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
continue;
|
|
86
|
-
}
|
|
87
|
-
// do the argument reading and operator shifting
|
|
88
|
-
if (pairs === shift) {
|
|
89
|
-
reversed.push(term);
|
|
90
|
-
}
|
|
91
|
-
for (pair = 0; pair < pairs; pair++) {
|
|
92
|
-
if (pair === shift) {
|
|
93
|
-
reversed.push(term);
|
|
94
|
-
}
|
|
95
|
-
x = terms[++t];
|
|
96
|
-
y = terms[++t];
|
|
97
|
-
reversed.push(y);
|
|
98
|
-
reversed.push(x);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
// the code has been set up so that every time we
|
|
102
|
-
// iterate because of the for() operation, the term
|
|
103
|
-
// we see is a pathing operator, not a number. As
|
|
104
|
-
// such, if we get to this "else" the path is malformed.
|
|
105
|
-
else {
|
|
106
|
-
const pre = terms.slice(Math.max(t - 3, 0), 3).join(' ');
|
|
107
|
-
const post = terms.slice(t + 1, Math.min(t + 4, tlen1)).join(' ');
|
|
108
|
-
const range = pre + ' [' + term + '] ' + post;
|
|
109
|
-
throw new Error('Error while trying to reverse normalized SVG path, at position ' +
|
|
110
|
-
t +
|
|
111
|
-
' (' +
|
|
112
|
-
range +
|
|
113
|
-
').\n' +
|
|
114
|
-
"Either the path is not normalised, or it's malformed.");
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
reversed.push('M');
|
|
118
|
-
// generating the reversed path string involves
|
|
119
|
-
// running through our transformed terms in reverse.
|
|
120
|
-
let revstring = '';
|
|
121
|
-
const rlen1 = reversed.length - 1;
|
|
122
|
-
let r;
|
|
123
|
-
for (r = rlen1; r > 0; r--) {
|
|
124
|
-
revstring += reversed[r] + ' ';
|
|
125
|
-
}
|
|
126
|
-
if (closed)
|
|
127
|
-
revstring += 'Z';
|
|
128
|
-
revstring = revstring.replace(/M M/g, 'Z M');
|
|
129
|
-
return revstring;
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* This is the function that you'll actually want to
|
|
133
|
-
* make use of, because it lets you reverse individual
|
|
134
|
-
* subpaths in some <path> "d" attribute.
|
|
135
|
-
*/
|
|
136
|
-
const reversePath = (_path, _subpath) => {
|
|
137
|
-
const subpath = _subpath !== null && _subpath !== void 0 ? _subpath : false;
|
|
138
|
-
const path = (0, normalize_path_1.normalizePath)(_path);
|
|
139
|
-
let paths = path.replace(/M/g, '|M').split('|');
|
|
140
|
-
let revpath;
|
|
141
|
-
paths.splice(0, 1);
|
|
142
|
-
if (subpath !== false && subpath >= paths.length) {
|
|
143
|
-
return path;
|
|
144
|
-
}
|
|
145
|
-
if (subpath === false) {
|
|
146
|
-
paths = paths.map((spath) => {
|
|
147
|
-
return reverseNormalizedPath(spath.trim());
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
const spath = paths[subpath];
|
|
152
|
-
if (spath) {
|
|
153
|
-
revpath = reverseNormalizedPath(spath.trim());
|
|
154
|
-
paths[subpath] = revpath;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
return paths.join(' ').replace(/ +/g, ' ').trim();
|
|
158
|
-
};
|
|
159
|
-
exports.reversePath = reversePath;
|
package/dist/linear.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { Point, PointProperties } from './types';
|
|
2
|
-
export declare const makeLinearPosition: (x0: number, x1: number, y0: number, y1: number) => {
|
|
3
|
-
getTotalLength: () => number;
|
|
4
|
-
getPointAtLength: (pos: number) => Point;
|
|
5
|
-
getTangentAtLength: () => Point;
|
|
6
|
-
getPropertiesAtLength: (pos: number) => PointProperties;
|
|
7
|
-
};
|