modern-path2d 0.0.5 → 0.1.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.
- package/README.md +39 -1
- package/dist/index.cjs +1597 -140
- package/dist/index.d.cts +181 -131
- package/dist/index.d.mts +181 -131
- package/dist/index.d.ts +181 -131
- package/dist/index.js +1 -1
- package/dist/index.mjs +1596 -138
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -1,37 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
x: number;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
x: number;
|
|
22
|
-
y: number;
|
|
23
|
-
} | {
|
|
24
|
-
type: 'A';
|
|
25
|
-
rx: number;
|
|
26
|
-
ry: number;
|
|
27
|
-
xAxisRotation: number;
|
|
28
|
-
largeArcFlag: number;
|
|
29
|
-
sweepFlag: number;
|
|
30
|
-
x: number;
|
|
31
|
-
y: number;
|
|
32
|
-
} | {
|
|
33
|
-
type: 'Z';
|
|
34
|
-
};
|
|
1
|
+
declare class Matrix3 {
|
|
2
|
+
elements: number[];
|
|
3
|
+
constructor(n11?: number, n12?: number, n13?: number, n21?: number, n22?: number, n23?: number, n31?: number, n32?: number, n33?: number);
|
|
4
|
+
set(n11: number, n12: number, n13: number, n21: number, n22: number, n23: number, n31: number, n32: number, n33: number): this;
|
|
5
|
+
identity(): this;
|
|
6
|
+
copy(m: Matrix3): this;
|
|
7
|
+
multiply(m: Matrix3): this;
|
|
8
|
+
premultiply(m: Matrix3): this;
|
|
9
|
+
multiplyMatrices(a: Matrix3, b: Matrix3): this;
|
|
10
|
+
invert(): this;
|
|
11
|
+
transpose(): this;
|
|
12
|
+
scale(sx: number, sy: number): this;
|
|
13
|
+
rotate(theta: number): this;
|
|
14
|
+
translate(tx: number, ty: number): this;
|
|
15
|
+
makeTranslation(x: number, y: number): this;
|
|
16
|
+
makeRotation(theta: number): this;
|
|
17
|
+
makeScale(x: number, y: number): this;
|
|
18
|
+
fromArray(array: number[], offset?: number): this;
|
|
19
|
+
clone(): Matrix3;
|
|
20
|
+
}
|
|
35
21
|
|
|
36
22
|
declare class Point2D {
|
|
37
23
|
x: number;
|
|
@@ -51,36 +37,11 @@ declare class Point2D {
|
|
|
51
37
|
normalize(): this;
|
|
52
38
|
lerpVectors(v1: Point2D, v2: Point2D, alpha: number): this;
|
|
53
39
|
equals(point: Point2D): boolean;
|
|
40
|
+
applyMatrix3(matrix3: Matrix3): this;
|
|
54
41
|
copy(point: Point2D): this;
|
|
55
42
|
clone(): Point2D;
|
|
56
43
|
}
|
|
57
44
|
|
|
58
|
-
declare abstract class Curve {
|
|
59
|
-
arcLengthDivisions: number;
|
|
60
|
-
protected _cacheArcLengths?: number[];
|
|
61
|
-
protected _needsUpdate: boolean;
|
|
62
|
-
abstract getPoint(t: number, output?: Point2D): Point2D;
|
|
63
|
-
abstract getCommands(): PathCommand[];
|
|
64
|
-
abstract drawTo(ctx: CanvasRenderingContext2D): void;
|
|
65
|
-
getMinMax(min?: Point2D, max?: Point2D): {
|
|
66
|
-
min: Point2D;
|
|
67
|
-
max: Point2D;
|
|
68
|
-
};
|
|
69
|
-
getDivisions(divisions: number): number;
|
|
70
|
-
getPointAt(u: number, output?: Point2D): Point2D;
|
|
71
|
-
getPoints(divisions?: number): Point2D[];
|
|
72
|
-
getSpacedPoints(divisions?: number): Point2D[];
|
|
73
|
-
getLength(): number;
|
|
74
|
-
getLengths(divisions?: number): number[];
|
|
75
|
-
updateArcLengths(): void;
|
|
76
|
-
getUtoTmapping(u: number, distance?: number): number;
|
|
77
|
-
getTangent(t: number, output?: Point2D): Point2D;
|
|
78
|
-
getTangentAt(u: number, output?: Point2D): Point2D;
|
|
79
|
-
getData(): string;
|
|
80
|
-
clone(): this;
|
|
81
|
-
copy(source: Curve): this;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
45
|
declare class CurvePath extends Curve {
|
|
85
46
|
curves: Curve[];
|
|
86
47
|
currentPoint: Point2D;
|
|
@@ -104,32 +65,164 @@ declare class CurvePath extends Curve {
|
|
|
104
65
|
splineThru(points: Point2D[]): this;
|
|
105
66
|
arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, clockwise?: boolean): this;
|
|
106
67
|
absarc(x: number, y: number, radius: number, startAngle: number, endAngle: number, clockwise?: boolean): this;
|
|
107
|
-
ellipse(x: number, y: number,
|
|
108
|
-
absellipse(x: number, y: number,
|
|
68
|
+
ellipse(x: number, y: number, radiusX: number, radiusY: number, startAngle: number, endAngle: number, clockwise?: boolean, rotation?: number): this;
|
|
69
|
+
absellipse(x: number, y: number, radiusX: number, radiusY: number, startAngle: number, endAngle: number, clockwise?: boolean, rotation?: number): this;
|
|
109
70
|
getCommands(): PathCommand[];
|
|
110
71
|
getMinMax(min?: Point2D, max?: Point2D): {
|
|
111
72
|
min: Point2D;
|
|
112
73
|
max: Point2D;
|
|
113
74
|
};
|
|
114
|
-
drawTo(ctx: CanvasRenderingContext2D):
|
|
75
|
+
drawTo(ctx: CanvasRenderingContext2D): this;
|
|
115
76
|
copy(source: CurvePath): this;
|
|
116
77
|
}
|
|
117
78
|
|
|
79
|
+
/**
|
|
80
|
+
* @see https://developer.mozilla.org/zh-CN/docs/Web/API/Path2D
|
|
81
|
+
*/
|
|
82
|
+
declare class Path2D<T = any> {
|
|
83
|
+
currentPath: CurvePath;
|
|
84
|
+
paths: CurvePath[];
|
|
85
|
+
userData?: T;
|
|
86
|
+
constructor(path?: Path2D | PathCommand[] | string);
|
|
87
|
+
addPath(path: Path2D | CurvePath): this;
|
|
88
|
+
closePath(): this;
|
|
89
|
+
moveTo(x: number, y: number): this;
|
|
90
|
+
lineTo(x: number, y: number): this;
|
|
91
|
+
bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this;
|
|
92
|
+
quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this;
|
|
93
|
+
arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
|
|
94
|
+
arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): this;
|
|
95
|
+
ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
|
|
96
|
+
rect(x: number, y: number, w: number, h: number): this;
|
|
97
|
+
addCommands(commands: PathCommand[]): this;
|
|
98
|
+
addData(data: string): this;
|
|
99
|
+
splineThru(points: Point2D[]): this;
|
|
100
|
+
forEachCurve(cb: (curve: Curve) => void): this;
|
|
101
|
+
transform(matrix: Matrix3): this;
|
|
102
|
+
getMinMax(min?: Point2D, max?: Point2D): {
|
|
103
|
+
min: Point2D;
|
|
104
|
+
max: Point2D;
|
|
105
|
+
};
|
|
106
|
+
getBoundingBox(): {
|
|
107
|
+
x: number;
|
|
108
|
+
y: number;
|
|
109
|
+
left: number;
|
|
110
|
+
top: number;
|
|
111
|
+
right: number;
|
|
112
|
+
bottom: number;
|
|
113
|
+
width: number;
|
|
114
|
+
height: number;
|
|
115
|
+
};
|
|
116
|
+
getCommands(): PathCommand[];
|
|
117
|
+
getData(): string;
|
|
118
|
+
getSvgString(): string;
|
|
119
|
+
getSvgDataUri(): string;
|
|
120
|
+
drawTo(ctx: CanvasRenderingContext2D): void;
|
|
121
|
+
strokeTo(ctx: CanvasRenderingContext2D): void;
|
|
122
|
+
fillTo(ctx: CanvasRenderingContext2D): void;
|
|
123
|
+
copy(source: Path2D): this;
|
|
124
|
+
clone(): Path2D;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* @link https://developer.mozilla.org/docs/Web/SVG/Attribute/d
|
|
129
|
+
*/
|
|
130
|
+
type PathCommand = {
|
|
131
|
+
type: 'm' | 'M';
|
|
132
|
+
x: number;
|
|
133
|
+
y: number;
|
|
134
|
+
} | {
|
|
135
|
+
type: 'h' | 'H';
|
|
136
|
+
x: number;
|
|
137
|
+
} | {
|
|
138
|
+
type: 'v' | 'V';
|
|
139
|
+
y: number;
|
|
140
|
+
} | {
|
|
141
|
+
type: 'l' | 'L';
|
|
142
|
+
x: number;
|
|
143
|
+
y: number;
|
|
144
|
+
} | {
|
|
145
|
+
type: 'c' | 'C';
|
|
146
|
+
x1: number;
|
|
147
|
+
y1: number;
|
|
148
|
+
x2: number;
|
|
149
|
+
y2: number;
|
|
150
|
+
x: number;
|
|
151
|
+
y: number;
|
|
152
|
+
} | {
|
|
153
|
+
type: 's' | 'S';
|
|
154
|
+
x2: number;
|
|
155
|
+
y2: number;
|
|
156
|
+
x: number;
|
|
157
|
+
y: number;
|
|
158
|
+
} | {
|
|
159
|
+
type: 'q' | 'Q';
|
|
160
|
+
x1: number;
|
|
161
|
+
y1: number;
|
|
162
|
+
x: number;
|
|
163
|
+
y: number;
|
|
164
|
+
} | {
|
|
165
|
+
type: 't' | 'T';
|
|
166
|
+
x: number;
|
|
167
|
+
y: number;
|
|
168
|
+
} | {
|
|
169
|
+
type: 'a' | 'A';
|
|
170
|
+
rx: number;
|
|
171
|
+
ry: number;
|
|
172
|
+
angle: number;
|
|
173
|
+
largeArcFlag: number;
|
|
174
|
+
sweepFlag: number;
|
|
175
|
+
x: number;
|
|
176
|
+
y: number;
|
|
177
|
+
} | {
|
|
178
|
+
type: 'z' | 'Z';
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
declare abstract class Curve {
|
|
182
|
+
arcLengthDivisions: number;
|
|
183
|
+
protected _cacheArcLengths?: number[];
|
|
184
|
+
protected _needsUpdate: boolean;
|
|
185
|
+
abstract getPoint(t: number, output?: Point2D): Point2D;
|
|
186
|
+
getPointAt(u: number, output?: Point2D): Point2D;
|
|
187
|
+
getPoints(divisions?: number): Point2D[];
|
|
188
|
+
getSpacedPoints(divisions?: number): Point2D[];
|
|
189
|
+
getLength(): number;
|
|
190
|
+
getLengths(divisions?: number): number[];
|
|
191
|
+
updateArcLengths(): void;
|
|
192
|
+
getUtoTmapping(u: number, distance?: number): number;
|
|
193
|
+
getTangent(t: number, output?: Point2D): Point2D;
|
|
194
|
+
getTangentAt(u: number, output?: Point2D): Point2D;
|
|
195
|
+
/** overrideable */
|
|
196
|
+
transform(matrix: Matrix3): this;
|
|
197
|
+
/** overrideable */
|
|
198
|
+
getDivisions(divisions: number): number;
|
|
199
|
+
/** overrideable */
|
|
200
|
+
getMinMax(min?: Point2D, max?: Point2D): {
|
|
201
|
+
min: Point2D;
|
|
202
|
+
max: Point2D;
|
|
203
|
+
};
|
|
204
|
+
/** overrideable */
|
|
205
|
+
getCommands(): PathCommand[];
|
|
206
|
+
getData(): string;
|
|
207
|
+
/** overrideable */
|
|
208
|
+
drawTo(ctx: CanvasRenderingContext2D): this;
|
|
209
|
+
copy(source: Curve): this;
|
|
210
|
+
clone(): this;
|
|
211
|
+
}
|
|
212
|
+
|
|
118
213
|
declare class CircleCurve extends Curve {
|
|
119
214
|
center: Point2D;
|
|
120
215
|
radius: number;
|
|
121
216
|
start: number;
|
|
122
217
|
end: number;
|
|
123
218
|
constructor(center: Point2D, radius: number, start?: number, end?: number);
|
|
219
|
+
getPoint(t: number): Point2D;
|
|
220
|
+
getTangent(t: number): Point2D;
|
|
221
|
+
getNormal(t: number): Point2D;
|
|
124
222
|
getMinMax(min?: Point2D, max?: Point2D): {
|
|
125
223
|
min: Point2D;
|
|
126
224
|
max: Point2D;
|
|
127
225
|
};
|
|
128
|
-
getPoint(t: number): Point2D;
|
|
129
|
-
getTangent(t: number): Point2D;
|
|
130
|
-
getNormal(t: number): Point2D;
|
|
131
|
-
getCommands(): PathCommand[];
|
|
132
|
-
drawTo(_ctx: CanvasRenderingContext2D): void;
|
|
133
226
|
}
|
|
134
227
|
|
|
135
228
|
declare class CubicBezierCurve extends Curve {
|
|
@@ -139,29 +232,31 @@ declare class CubicBezierCurve extends Curve {
|
|
|
139
232
|
v3: Point2D;
|
|
140
233
|
constructor(v0?: Point2D, v1?: Point2D, v2?: Point2D, v3?: Point2D);
|
|
141
234
|
getPoint(t: number, output?: Point2D): Point2D;
|
|
235
|
+
transform(matrix: Matrix3): this;
|
|
142
236
|
getMinMax(min?: Point2D, max?: Point2D): {
|
|
143
237
|
min: Point2D;
|
|
144
238
|
max: Point2D;
|
|
145
239
|
};
|
|
146
240
|
getCommands(): PathCommand[];
|
|
147
|
-
drawTo(ctx: CanvasRenderingContext2D):
|
|
241
|
+
drawTo(ctx: CanvasRenderingContext2D): this;
|
|
148
242
|
copy(source: CubicBezierCurve): this;
|
|
149
243
|
}
|
|
150
244
|
|
|
151
245
|
declare class EllipseCurve extends Curve {
|
|
152
246
|
x: number;
|
|
153
247
|
y: number;
|
|
154
|
-
|
|
155
|
-
|
|
248
|
+
radiusX: number;
|
|
249
|
+
radiusY: number;
|
|
156
250
|
startAngle: number;
|
|
157
251
|
endAngle: number;
|
|
158
252
|
clockwise: boolean;
|
|
159
253
|
rotation: number;
|
|
160
|
-
constructor(x?: number, y?: number,
|
|
161
|
-
getDivisions(divisions?: number): number;
|
|
254
|
+
constructor(x?: number, y?: number, radiusX?: number, radiusY?: number, startAngle?: number, endAngle?: number, clockwise?: boolean, rotation?: number);
|
|
162
255
|
getPoint(t: number, output?: Point2D): Point2D;
|
|
256
|
+
getDivisions(divisions?: number): number;
|
|
163
257
|
getCommands(): PathCommand[];
|
|
164
|
-
drawTo(ctx: CanvasRenderingContext2D):
|
|
258
|
+
drawTo(ctx: CanvasRenderingContext2D): this;
|
|
259
|
+
transform(matrix: Matrix3): this;
|
|
165
260
|
copy(source: EllipseCurve): this;
|
|
166
261
|
}
|
|
167
262
|
|
|
@@ -179,24 +274,25 @@ declare class HeartCurve extends Curve {
|
|
|
179
274
|
getTangent(value: number): Point2D;
|
|
180
275
|
getNormal(value: number): Point2D;
|
|
181
276
|
getCommands(): PathCommand[];
|
|
182
|
-
drawTo(ctx: CanvasRenderingContext2D):
|
|
277
|
+
drawTo(ctx: CanvasRenderingContext2D): this;
|
|
183
278
|
}
|
|
184
279
|
|
|
185
280
|
declare class LineCurve extends Curve {
|
|
186
281
|
v1: Point2D;
|
|
187
282
|
v2: Point2D;
|
|
188
283
|
constructor(v1?: Point2D, v2?: Point2D);
|
|
189
|
-
getDivisions(): number;
|
|
190
284
|
getPoint(t: number, output?: Point2D): Point2D;
|
|
191
285
|
getPointAt(u: number, output?: Point2D): Point2D;
|
|
192
286
|
getTangent(t: number, output?: Point2D): Point2D;
|
|
193
287
|
getTangentAt(u: number, output?: Point2D): Point2D;
|
|
194
|
-
|
|
288
|
+
transform(matrix: Matrix3): this;
|
|
289
|
+
getDivisions(): number;
|
|
195
290
|
getMinMax(min?: Point2D, max?: Point2D): {
|
|
196
291
|
min: Point2D;
|
|
197
292
|
max: Point2D;
|
|
198
293
|
};
|
|
199
|
-
|
|
294
|
+
getCommands(): PathCommand[];
|
|
295
|
+
drawTo(ctx: CanvasRenderingContext2D): this;
|
|
200
296
|
copy(source: LineCurve): this;
|
|
201
297
|
}
|
|
202
298
|
|
|
@@ -221,7 +317,7 @@ declare class PloygonCurve extends Curve {
|
|
|
221
317
|
min: Point2D;
|
|
222
318
|
max: Point2D;
|
|
223
319
|
};
|
|
224
|
-
drawTo(ctx: CanvasRenderingContext2D):
|
|
320
|
+
drawTo(ctx: CanvasRenderingContext2D): this;
|
|
225
321
|
}
|
|
226
322
|
|
|
227
323
|
declare class QuadraticBezierCurve extends Curve {
|
|
@@ -230,12 +326,13 @@ declare class QuadraticBezierCurve extends Curve {
|
|
|
230
326
|
v2: Point2D;
|
|
231
327
|
constructor(v0?: Point2D, v1?: Point2D, v2?: Point2D);
|
|
232
328
|
getPoint(t: number, output?: Point2D): Point2D;
|
|
233
|
-
|
|
329
|
+
transform(matrix: Matrix3): this;
|
|
234
330
|
getMinMax(min?: Point2D, max?: Point2D): {
|
|
235
331
|
min: Point2D;
|
|
236
332
|
max: Point2D;
|
|
237
333
|
};
|
|
238
|
-
|
|
334
|
+
getCommands(): PathCommand[];
|
|
335
|
+
drawTo(ctx: CanvasRenderingContext2D): this;
|
|
239
336
|
copy(source: QuadraticBezierCurve): this;
|
|
240
337
|
}
|
|
241
338
|
|
|
@@ -262,7 +359,7 @@ declare class RectangularCurve extends Curve {
|
|
|
262
359
|
min: Point2D;
|
|
263
360
|
max: Point2D;
|
|
264
361
|
};
|
|
265
|
-
drawTo(ctx: CanvasRenderingContext2D):
|
|
362
|
+
drawTo(ctx: CanvasRenderingContext2D): this;
|
|
266
363
|
}
|
|
267
364
|
|
|
268
365
|
declare class SplineCurve extends Curve {
|
|
@@ -270,56 +367,9 @@ declare class SplineCurve extends Curve {
|
|
|
270
367
|
constructor(points?: Point2D[]);
|
|
271
368
|
getDivisions(divisions?: number): number;
|
|
272
369
|
getPoint(t: number, output?: Point2D): Point2D;
|
|
273
|
-
getCommands(): PathCommand[];
|
|
274
|
-
drawTo(_ctx: CanvasRenderingContext2D): void;
|
|
275
370
|
copy(source: SplineCurve): this;
|
|
276
371
|
}
|
|
277
372
|
|
|
278
|
-
|
|
279
|
-
* @see https://developer.mozilla.org/zh-CN/docs/Web/API/Path2D
|
|
280
|
-
*/
|
|
281
|
-
declare class Path2D {
|
|
282
|
-
currentPath: CurvePath;
|
|
283
|
-
paths: CurvePath[];
|
|
284
|
-
constructor(path?: Path2D | PathCommand[] | string);
|
|
285
|
-
addPath(path: Path2D): this;
|
|
286
|
-
addCommands(commands: PathCommand[]): this;
|
|
287
|
-
addData(data: string): this;
|
|
288
|
-
closePath(): this;
|
|
289
|
-
moveTo(x: number, y: number): this;
|
|
290
|
-
lineTo(x: number, y: number): this;
|
|
291
|
-
bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this;
|
|
292
|
-
quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this;
|
|
293
|
-
arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
|
|
294
|
-
arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): this;
|
|
295
|
-
ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
|
|
296
|
-
rect(x: number, y: number, w: number, h: number): this;
|
|
297
|
-
splineThru(points: Point2D[]): this;
|
|
298
|
-
getMinMax(min?: Point2D, max?: Point2D): {
|
|
299
|
-
min: Point2D;
|
|
300
|
-
max: Point2D;
|
|
301
|
-
};
|
|
302
|
-
getCommands(): PathCommand[];
|
|
303
|
-
getData(): string;
|
|
304
|
-
getBoundingBox(): {
|
|
305
|
-
x: number;
|
|
306
|
-
y: number;
|
|
307
|
-
width: number;
|
|
308
|
-
height: number;
|
|
309
|
-
};
|
|
310
|
-
getSvgString(): string;
|
|
311
|
-
getSvgDataUri(): string;
|
|
312
|
-
drawTo(ctx: CanvasRenderingContext2D): void;
|
|
313
|
-
strokeTo(ctx: CanvasRenderingContext2D): void;
|
|
314
|
-
fillTo(ctx: CanvasRenderingContext2D): void;
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
/**
|
|
318
|
-
* Bezier Curves formulas obtained from
|
|
319
|
-
* https://en.wikipedia.org/wiki/B%C3%A9zier_curve
|
|
320
|
-
*/
|
|
321
|
-
declare function catmullRom(t: number, p0: number, p1: number, p2: number, p3: number): number;
|
|
322
|
-
declare function quadraticBezier(t: number, p0: number, p1: number, p2: number): number;
|
|
323
|
-
declare function cubicBezier(t: number, p0: number, p1: number, p2: number, p3: number): number;
|
|
373
|
+
declare function parseSvg(svg: string | SVGElement): Path2D[];
|
|
324
374
|
|
|
325
|
-
export { CircleCurve, CubicBezierCurve, Curve, CurvePath, EllipseCurve, HeartCurve, LineCurve,
|
|
375
|
+
export { CircleCurve, CubicBezierCurve, Curve, CurvePath, EllipseCurve, HeartCurve, LineCurve, Matrix3, Path2D, PloygonCurve, Point2D, QuadraticBezierCurve, RectangularCurve, SplineCurve, parseSvg };
|