modern-path2d 0.0.1 → 0.0.3

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/index.d.cts CHANGED
@@ -1,3 +1,322 @@
1
- declare const one = 1;
1
+ type PathCommand = {
2
+ type: 'M';
3
+ x: number;
4
+ y: number;
5
+ } | {
6
+ type: 'L';
7
+ x: number;
8
+ y: number;
9
+ } | {
10
+ type: 'C';
11
+ x1: number;
12
+ y1: number;
13
+ x2: number;
14
+ y2: number;
15
+ x: number;
16
+ y: number;
17
+ } | {
18
+ type: 'Q';
19
+ x1: number;
20
+ y1: number;
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
+ };
2
35
 
3
- export { one };
36
+ declare class Point2D {
37
+ x: number;
38
+ y: number;
39
+ static get MAX(): Point2D;
40
+ static get MIN(): Point2D;
41
+ constructor(x?: number, y?: number);
42
+ set(x: number, y: number): this;
43
+ add(point: Point2D): this;
44
+ sub(point: Point2D): this;
45
+ distanceTo(point: Point2D): number;
46
+ distanceToSquared(point: Point2D): number;
47
+ length(): number;
48
+ multiplyScalar(scalar: number): this;
49
+ divideScalar(scalar: number): this;
50
+ subVectors(a: Point2D, b: Point2D): this;
51
+ normalize(): this;
52
+ lerpVectors(v1: Point2D, v2: Point2D, alpha: number): this;
53
+ equals(point: Point2D): boolean;
54
+ copy(point: Point2D): this;
55
+ clone(): Point2D;
56
+ }
57
+
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 getPathCommands(): 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
+ getPathData(): string;
80
+ clone(): this;
81
+ copy(source: Curve): this;
82
+ }
83
+
84
+ declare class CurvePath extends Curve {
85
+ curves: Curve[];
86
+ currentPoint: Point2D;
87
+ autoClose: boolean;
88
+ protected _cacheLengths: number[];
89
+ constructor(points?: Point2D[]);
90
+ addCurve(curve: Curve): this;
91
+ closePath(): this;
92
+ getPoint(position: number, output?: Point2D): Point2D;
93
+ getLength(): number;
94
+ updateArcLengths(): void;
95
+ getCurveLengths(): number[];
96
+ getSpacedPoints(divisions?: number): Point2D[];
97
+ getPoints(divisions?: number): Point2D[];
98
+ setFromPoints(points: Point2D[]): this;
99
+ bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this;
100
+ lineTo(x: number, y: number): this;
101
+ moveTo(x: number, y: number): this;
102
+ quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this;
103
+ rect(x: number, y: number, w: number, h: number): this;
104
+ splineThru(points: Point2D[]): this;
105
+ arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, clockwise?: boolean): this;
106
+ absarc(x: number, y: number, radius: number, startAngle: number, endAngle: number, clockwise?: boolean): this;
107
+ ellipse(x: number, y: number, xRadius: number, yRadius: number, startAngle: number, endAngle: number, clockwise?: boolean, rotation?: number): this;
108
+ absellipse(x: number, y: number, xRadius: number, yRadius: number, startAngle: number, endAngle: number, clockwise?: boolean, rotation?: number): this;
109
+ getPathCommands(): PathCommand[];
110
+ getMinMax(min?: Point2D, max?: Point2D): {
111
+ min: Point2D;
112
+ max: Point2D;
113
+ };
114
+ drawTo(ctx: CanvasRenderingContext2D): void;
115
+ copy(source: CurvePath): this;
116
+ }
117
+
118
+ declare class CircleCurve extends Curve {
119
+ center: Point2D;
120
+ radius: number;
121
+ start: number;
122
+ end: number;
123
+ constructor(center: Point2D, radius: number, start?: number, end?: number);
124
+ getMinMax(min?: Point2D, max?: Point2D): {
125
+ min: Point2D;
126
+ max: Point2D;
127
+ };
128
+ getPoint(t: number): Point2D;
129
+ getTangent(t: number): Point2D;
130
+ getNormal(t: number): Point2D;
131
+ getPathCommands(): PathCommand[];
132
+ drawTo(_ctx: CanvasRenderingContext2D): void;
133
+ }
134
+
135
+ declare class CubicBezierCurve extends Curve {
136
+ v0: Point2D;
137
+ v1: Point2D;
138
+ v2: Point2D;
139
+ v3: Point2D;
140
+ constructor(v0?: Point2D, v1?: Point2D, v2?: Point2D, v3?: Point2D);
141
+ getPoint(t: number, output?: Point2D): Point2D;
142
+ getMinMax(min?: Point2D, max?: Point2D): {
143
+ min: Point2D;
144
+ max: Point2D;
145
+ };
146
+ getPathCommands(): PathCommand[];
147
+ drawTo(ctx: CanvasRenderingContext2D): void;
148
+ copy(source: CubicBezierCurve): this;
149
+ }
150
+
151
+ declare class EllipseCurve extends Curve {
152
+ x: number;
153
+ y: number;
154
+ rx: number;
155
+ ry: number;
156
+ startAngle: number;
157
+ endAngle: number;
158
+ clockwise: boolean;
159
+ rotation: number;
160
+ constructor(x?: number, y?: number, rx?: number, ry?: number, startAngle?: number, endAngle?: number, clockwise?: boolean, rotation?: number);
161
+ getDivisions(divisions?: number): number;
162
+ getPoint(t: number, output?: Point2D): Point2D;
163
+ getPathCommands(): PathCommand[];
164
+ drawTo(ctx: CanvasRenderingContext2D): void;
165
+ copy(source: EllipseCurve): this;
166
+ }
167
+
168
+ declare class HeartCurve extends Curve {
169
+ center: Point2D;
170
+ size: number;
171
+ start: number;
172
+ end: number;
173
+ curves: Curve[];
174
+ pointT: number;
175
+ constructor(center: Point2D, size: number, start?: number, end?: number);
176
+ getPoint(value: number): Point2D;
177
+ getPointAt(value: number): Point2D;
178
+ getCurrentLine(value: number): Curve;
179
+ getTangent(value: number): Point2D;
180
+ getNormal(value: number): Point2D;
181
+ getPathCommands(): PathCommand[];
182
+ drawTo(ctx: CanvasRenderingContext2D): void;
183
+ }
184
+
185
+ declare class LineCurve extends Curve {
186
+ v1: Point2D;
187
+ v2: Point2D;
188
+ constructor(v1?: Point2D, v2?: Point2D);
189
+ getDivisions(): number;
190
+ getPoint(t: number, output?: Point2D): Point2D;
191
+ getPointAt(u: number, output?: Point2D): Point2D;
192
+ getTangent(t: number, output?: Point2D): Point2D;
193
+ getTangentAt(u: number, output?: Point2D): Point2D;
194
+ getPathCommands(): PathCommand[];
195
+ getMinMax(min?: Point2D, max?: Point2D): {
196
+ min: Point2D;
197
+ max: Point2D;
198
+ };
199
+ drawTo(ctx: CanvasRenderingContext2D): void;
200
+ copy(source: LineCurve): this;
201
+ }
202
+
203
+ declare class PloygonCurve extends Curve {
204
+ center: Point2D;
205
+ radius: number;
206
+ num: number;
207
+ start: number;
208
+ end: number;
209
+ curves: LineCurve[];
210
+ points: Point2D[];
211
+ currentLine: LineCurve;
212
+ pointK: any;
213
+ constructor(center: Point2D, radius?: number, num?: number, start?: number, end?: number);
214
+ getPoint(value: number): Point2D;
215
+ getPointAt(value: number): Point2D;
216
+ getCurrentLine(value: number): LineCurve;
217
+ getTangent(value: number): Point2D;
218
+ getNormal(value: number): Point2D;
219
+ getPathCommands(): PathCommand[];
220
+ getMinMax(min?: Point2D, max?: Point2D): {
221
+ min: Point2D;
222
+ max: Point2D;
223
+ };
224
+ drawTo(ctx: CanvasRenderingContext2D): void;
225
+ }
226
+
227
+ declare class QuadraticBezierCurve extends Curve {
228
+ v0: Point2D;
229
+ v1: Point2D;
230
+ v2: Point2D;
231
+ constructor(v0?: Point2D, v1?: Point2D, v2?: Point2D);
232
+ getPoint(t: number, output?: Point2D): Point2D;
233
+ getPathCommands(): PathCommand[];
234
+ getMinMax(min?: Point2D, max?: Point2D): {
235
+ min: Point2D;
236
+ max: Point2D;
237
+ };
238
+ drawTo(ctx: CanvasRenderingContext2D): void;
239
+ copy(source: QuadraticBezierCurve): this;
240
+ }
241
+
242
+ declare class RectangularCurve extends Curve {
243
+ center: Point2D;
244
+ rx: number;
245
+ aspectRatio: number;
246
+ start: number;
247
+ end: number;
248
+ curves: LineCurve[];
249
+ pointT: number;
250
+ get x(): number;
251
+ get y(): number;
252
+ get width(): number;
253
+ get height(): number;
254
+ constructor(center: Point2D, rx: number, aspectRatio?: number, start?: number, end?: number);
255
+ getPoint(t: number): Point2D;
256
+ getPointAt(u: number): Point2D;
257
+ getCurrentLine(t: number): LineCurve;
258
+ getTangent(t: number): Point2D;
259
+ getNormal(value: number): Point2D;
260
+ getPathCommands(): PathCommand[];
261
+ getMinMax(min?: Point2D, max?: Point2D): {
262
+ min: Point2D;
263
+ max: Point2D;
264
+ };
265
+ drawTo(ctx: CanvasRenderingContext2D): void;
266
+ }
267
+
268
+ declare class SplineCurve extends Curve {
269
+ points: Point2D[];
270
+ constructor(points?: Point2D[]);
271
+ getDivisions(divisions?: number): number;
272
+ getPoint(t: number, output?: Point2D): Point2D;
273
+ getPathCommands(): PathCommand[];
274
+ drawTo(_ctx: CanvasRenderingContext2D): void;
275
+ copy(source: SplineCurve): this;
276
+ }
277
+
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
+ addPath(path: Path2D): this;
285
+ closePath(): this;
286
+ moveTo(x: number, y: number): this;
287
+ lineTo(x: number, y: number): this;
288
+ bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this;
289
+ quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this;
290
+ arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
291
+ arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): this;
292
+ ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise: number): this;
293
+ rect(x: number, y: number, w: number, h: number): this;
294
+ splineThru(points: Point2D[]): this;
295
+ getMinMax(min?: Point2D, max?: Point2D): {
296
+ min: Point2D;
297
+ max: Point2D;
298
+ };
299
+ getPathCommands(): PathCommand[];
300
+ getPathData(): string;
301
+ getBoundingBox(): {
302
+ x: number;
303
+ y: number;
304
+ width: number;
305
+ height: number;
306
+ };
307
+ getSvgString(): string;
308
+ getSvgDataUri(): string;
309
+ drawTo(ctx: CanvasRenderingContext2D): void;
310
+ strokeTo(ctx: CanvasRenderingContext2D): void;
311
+ fillTo(ctx: CanvasRenderingContext2D): void;
312
+ }
313
+
314
+ /**
315
+ * Bezier Curves formulas obtained from
316
+ * https://en.wikipedia.org/wiki/B%C3%A9zier_curve
317
+ */
318
+ declare function catmullRom(t: number, p0: number, p1: number, p2: number, p3: number): number;
319
+ declare function quadraticBezier(t: number, p0: number, p1: number, p2: number): number;
320
+ declare function cubicBezier(t: number, p0: number, p1: number, p2: number, p3: number): number;
321
+
322
+ export { CircleCurve, CubicBezierCurve, Curve, CurvePath, EllipseCurve, HeartCurve, LineCurve, Path2D, type PathCommand, PloygonCurve, Point2D, QuadraticBezierCurve, RectangularCurve, SplineCurve, catmullRom, cubicBezier, quadraticBezier };
package/dist/index.d.mts CHANGED
@@ -1,3 +1,322 @@
1
- declare const one = 1;
1
+ type PathCommand = {
2
+ type: 'M';
3
+ x: number;
4
+ y: number;
5
+ } | {
6
+ type: 'L';
7
+ x: number;
8
+ y: number;
9
+ } | {
10
+ type: 'C';
11
+ x1: number;
12
+ y1: number;
13
+ x2: number;
14
+ y2: number;
15
+ x: number;
16
+ y: number;
17
+ } | {
18
+ type: 'Q';
19
+ x1: number;
20
+ y1: number;
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
+ };
2
35
 
3
- export { one };
36
+ declare class Point2D {
37
+ x: number;
38
+ y: number;
39
+ static get MAX(): Point2D;
40
+ static get MIN(): Point2D;
41
+ constructor(x?: number, y?: number);
42
+ set(x: number, y: number): this;
43
+ add(point: Point2D): this;
44
+ sub(point: Point2D): this;
45
+ distanceTo(point: Point2D): number;
46
+ distanceToSquared(point: Point2D): number;
47
+ length(): number;
48
+ multiplyScalar(scalar: number): this;
49
+ divideScalar(scalar: number): this;
50
+ subVectors(a: Point2D, b: Point2D): this;
51
+ normalize(): this;
52
+ lerpVectors(v1: Point2D, v2: Point2D, alpha: number): this;
53
+ equals(point: Point2D): boolean;
54
+ copy(point: Point2D): this;
55
+ clone(): Point2D;
56
+ }
57
+
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 getPathCommands(): 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
+ getPathData(): string;
80
+ clone(): this;
81
+ copy(source: Curve): this;
82
+ }
83
+
84
+ declare class CurvePath extends Curve {
85
+ curves: Curve[];
86
+ currentPoint: Point2D;
87
+ autoClose: boolean;
88
+ protected _cacheLengths: number[];
89
+ constructor(points?: Point2D[]);
90
+ addCurve(curve: Curve): this;
91
+ closePath(): this;
92
+ getPoint(position: number, output?: Point2D): Point2D;
93
+ getLength(): number;
94
+ updateArcLengths(): void;
95
+ getCurveLengths(): number[];
96
+ getSpacedPoints(divisions?: number): Point2D[];
97
+ getPoints(divisions?: number): Point2D[];
98
+ setFromPoints(points: Point2D[]): this;
99
+ bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this;
100
+ lineTo(x: number, y: number): this;
101
+ moveTo(x: number, y: number): this;
102
+ quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this;
103
+ rect(x: number, y: number, w: number, h: number): this;
104
+ splineThru(points: Point2D[]): this;
105
+ arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, clockwise?: boolean): this;
106
+ absarc(x: number, y: number, radius: number, startAngle: number, endAngle: number, clockwise?: boolean): this;
107
+ ellipse(x: number, y: number, xRadius: number, yRadius: number, startAngle: number, endAngle: number, clockwise?: boolean, rotation?: number): this;
108
+ absellipse(x: number, y: number, xRadius: number, yRadius: number, startAngle: number, endAngle: number, clockwise?: boolean, rotation?: number): this;
109
+ getPathCommands(): PathCommand[];
110
+ getMinMax(min?: Point2D, max?: Point2D): {
111
+ min: Point2D;
112
+ max: Point2D;
113
+ };
114
+ drawTo(ctx: CanvasRenderingContext2D): void;
115
+ copy(source: CurvePath): this;
116
+ }
117
+
118
+ declare class CircleCurve extends Curve {
119
+ center: Point2D;
120
+ radius: number;
121
+ start: number;
122
+ end: number;
123
+ constructor(center: Point2D, radius: number, start?: number, end?: number);
124
+ getMinMax(min?: Point2D, max?: Point2D): {
125
+ min: Point2D;
126
+ max: Point2D;
127
+ };
128
+ getPoint(t: number): Point2D;
129
+ getTangent(t: number): Point2D;
130
+ getNormal(t: number): Point2D;
131
+ getPathCommands(): PathCommand[];
132
+ drawTo(_ctx: CanvasRenderingContext2D): void;
133
+ }
134
+
135
+ declare class CubicBezierCurve extends Curve {
136
+ v0: Point2D;
137
+ v1: Point2D;
138
+ v2: Point2D;
139
+ v3: Point2D;
140
+ constructor(v0?: Point2D, v1?: Point2D, v2?: Point2D, v3?: Point2D);
141
+ getPoint(t: number, output?: Point2D): Point2D;
142
+ getMinMax(min?: Point2D, max?: Point2D): {
143
+ min: Point2D;
144
+ max: Point2D;
145
+ };
146
+ getPathCommands(): PathCommand[];
147
+ drawTo(ctx: CanvasRenderingContext2D): void;
148
+ copy(source: CubicBezierCurve): this;
149
+ }
150
+
151
+ declare class EllipseCurve extends Curve {
152
+ x: number;
153
+ y: number;
154
+ rx: number;
155
+ ry: number;
156
+ startAngle: number;
157
+ endAngle: number;
158
+ clockwise: boolean;
159
+ rotation: number;
160
+ constructor(x?: number, y?: number, rx?: number, ry?: number, startAngle?: number, endAngle?: number, clockwise?: boolean, rotation?: number);
161
+ getDivisions(divisions?: number): number;
162
+ getPoint(t: number, output?: Point2D): Point2D;
163
+ getPathCommands(): PathCommand[];
164
+ drawTo(ctx: CanvasRenderingContext2D): void;
165
+ copy(source: EllipseCurve): this;
166
+ }
167
+
168
+ declare class HeartCurve extends Curve {
169
+ center: Point2D;
170
+ size: number;
171
+ start: number;
172
+ end: number;
173
+ curves: Curve[];
174
+ pointT: number;
175
+ constructor(center: Point2D, size: number, start?: number, end?: number);
176
+ getPoint(value: number): Point2D;
177
+ getPointAt(value: number): Point2D;
178
+ getCurrentLine(value: number): Curve;
179
+ getTangent(value: number): Point2D;
180
+ getNormal(value: number): Point2D;
181
+ getPathCommands(): PathCommand[];
182
+ drawTo(ctx: CanvasRenderingContext2D): void;
183
+ }
184
+
185
+ declare class LineCurve extends Curve {
186
+ v1: Point2D;
187
+ v2: Point2D;
188
+ constructor(v1?: Point2D, v2?: Point2D);
189
+ getDivisions(): number;
190
+ getPoint(t: number, output?: Point2D): Point2D;
191
+ getPointAt(u: number, output?: Point2D): Point2D;
192
+ getTangent(t: number, output?: Point2D): Point2D;
193
+ getTangentAt(u: number, output?: Point2D): Point2D;
194
+ getPathCommands(): PathCommand[];
195
+ getMinMax(min?: Point2D, max?: Point2D): {
196
+ min: Point2D;
197
+ max: Point2D;
198
+ };
199
+ drawTo(ctx: CanvasRenderingContext2D): void;
200
+ copy(source: LineCurve): this;
201
+ }
202
+
203
+ declare class PloygonCurve extends Curve {
204
+ center: Point2D;
205
+ radius: number;
206
+ num: number;
207
+ start: number;
208
+ end: number;
209
+ curves: LineCurve[];
210
+ points: Point2D[];
211
+ currentLine: LineCurve;
212
+ pointK: any;
213
+ constructor(center: Point2D, radius?: number, num?: number, start?: number, end?: number);
214
+ getPoint(value: number): Point2D;
215
+ getPointAt(value: number): Point2D;
216
+ getCurrentLine(value: number): LineCurve;
217
+ getTangent(value: number): Point2D;
218
+ getNormal(value: number): Point2D;
219
+ getPathCommands(): PathCommand[];
220
+ getMinMax(min?: Point2D, max?: Point2D): {
221
+ min: Point2D;
222
+ max: Point2D;
223
+ };
224
+ drawTo(ctx: CanvasRenderingContext2D): void;
225
+ }
226
+
227
+ declare class QuadraticBezierCurve extends Curve {
228
+ v0: Point2D;
229
+ v1: Point2D;
230
+ v2: Point2D;
231
+ constructor(v0?: Point2D, v1?: Point2D, v2?: Point2D);
232
+ getPoint(t: number, output?: Point2D): Point2D;
233
+ getPathCommands(): PathCommand[];
234
+ getMinMax(min?: Point2D, max?: Point2D): {
235
+ min: Point2D;
236
+ max: Point2D;
237
+ };
238
+ drawTo(ctx: CanvasRenderingContext2D): void;
239
+ copy(source: QuadraticBezierCurve): this;
240
+ }
241
+
242
+ declare class RectangularCurve extends Curve {
243
+ center: Point2D;
244
+ rx: number;
245
+ aspectRatio: number;
246
+ start: number;
247
+ end: number;
248
+ curves: LineCurve[];
249
+ pointT: number;
250
+ get x(): number;
251
+ get y(): number;
252
+ get width(): number;
253
+ get height(): number;
254
+ constructor(center: Point2D, rx: number, aspectRatio?: number, start?: number, end?: number);
255
+ getPoint(t: number): Point2D;
256
+ getPointAt(u: number): Point2D;
257
+ getCurrentLine(t: number): LineCurve;
258
+ getTangent(t: number): Point2D;
259
+ getNormal(value: number): Point2D;
260
+ getPathCommands(): PathCommand[];
261
+ getMinMax(min?: Point2D, max?: Point2D): {
262
+ min: Point2D;
263
+ max: Point2D;
264
+ };
265
+ drawTo(ctx: CanvasRenderingContext2D): void;
266
+ }
267
+
268
+ declare class SplineCurve extends Curve {
269
+ points: Point2D[];
270
+ constructor(points?: Point2D[]);
271
+ getDivisions(divisions?: number): number;
272
+ getPoint(t: number, output?: Point2D): Point2D;
273
+ getPathCommands(): PathCommand[];
274
+ drawTo(_ctx: CanvasRenderingContext2D): void;
275
+ copy(source: SplineCurve): this;
276
+ }
277
+
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
+ addPath(path: Path2D): this;
285
+ closePath(): this;
286
+ moveTo(x: number, y: number): this;
287
+ lineTo(x: number, y: number): this;
288
+ bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this;
289
+ quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this;
290
+ arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
291
+ arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): this;
292
+ ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise: number): this;
293
+ rect(x: number, y: number, w: number, h: number): this;
294
+ splineThru(points: Point2D[]): this;
295
+ getMinMax(min?: Point2D, max?: Point2D): {
296
+ min: Point2D;
297
+ max: Point2D;
298
+ };
299
+ getPathCommands(): PathCommand[];
300
+ getPathData(): string;
301
+ getBoundingBox(): {
302
+ x: number;
303
+ y: number;
304
+ width: number;
305
+ height: number;
306
+ };
307
+ getSvgString(): string;
308
+ getSvgDataUri(): string;
309
+ drawTo(ctx: CanvasRenderingContext2D): void;
310
+ strokeTo(ctx: CanvasRenderingContext2D): void;
311
+ fillTo(ctx: CanvasRenderingContext2D): void;
312
+ }
313
+
314
+ /**
315
+ * Bezier Curves formulas obtained from
316
+ * https://en.wikipedia.org/wiki/B%C3%A9zier_curve
317
+ */
318
+ declare function catmullRom(t: number, p0: number, p1: number, p2: number, p3: number): number;
319
+ declare function quadraticBezier(t: number, p0: number, p1: number, p2: number): number;
320
+ declare function cubicBezier(t: number, p0: number, p1: number, p2: number, p3: number): number;
321
+
322
+ export { CircleCurve, CubicBezierCurve, Curve, CurvePath, EllipseCurve, HeartCurve, LineCurve, Path2D, type PathCommand, PloygonCurve, Point2D, QuadraticBezierCurve, RectangularCurve, SplineCurve, catmullRom, cubicBezier, quadraticBezier };