modern-path2d 0.1.9 → 0.1.11

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
@@ -65,81 +65,6 @@ declare class BoundingBox {
65
65
  toArray(): [number, number, number, number];
66
66
  }
67
67
 
68
- declare class CurvePath extends Curve {
69
- curves: Curve[];
70
- currentPoint: Vector2;
71
- autoClose: boolean;
72
- protected _cacheLengths: number[];
73
- constructor(points?: Vector2[]);
74
- addCurve(curve: Curve): this;
75
- closePath(): this;
76
- getPoint(position: number, output?: Vector2): Vector2;
77
- getLength(): number;
78
- updateArcLengths(): void;
79
- getCurveLengths(): number[];
80
- getSpacedPoints(divisions?: number): Vector2[];
81
- getPoints(divisions?: number): Vector2[];
82
- setFromPoints(points: Vector2[]): this;
83
- bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this;
84
- lineTo(x: number, y: number): this;
85
- moveTo(x: number, y: number): this;
86
- quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this;
87
- rect(x: number, y: number, w: number, h: number): this;
88
- splineThru(points: Vector2[]): this;
89
- arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, clockwise?: boolean): this;
90
- absarc(x: number, y: number, radius: number, startAngle: number, endAngle: number, clockwise?: boolean): this;
91
- ellipse(x: number, y: number, radiusX: number, radiusY: number, startAngle: number, endAngle: number, clockwise?: boolean, rotation?: number): this;
92
- absellipse(x: number, y: number, radiusX: number, radiusY: number, startAngle: number, endAngle: number, clockwise?: boolean, rotation?: number): this;
93
- getCommands(): PathCommand[];
94
- getMinMax(min?: Vector2, max?: Vector2): {
95
- min: Vector2;
96
- max: Vector2;
97
- };
98
- drawTo(ctx: CanvasRenderingContext2D): this;
99
- copy(source: CurvePath): this;
100
- }
101
-
102
- /**
103
- * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Path2D
104
- */
105
- declare class Path2D<T = any> {
106
- currentPath: CurvePath;
107
- paths: CurvePath[];
108
- userData?: T;
109
- constructor(path?: Path2D | PathCommand[] | string);
110
- addPath(path: Path2D | CurvePath): this;
111
- closePath(): this;
112
- moveTo(x: number, y: number): this;
113
- lineTo(x: number, y: number): this;
114
- bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this;
115
- quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this;
116
- arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
117
- arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): this;
118
- ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
119
- rect(x: number, y: number, w: number, h: number): this;
120
- addCommands(commands: PathCommand[]): this;
121
- addData(data: string): this;
122
- splineThru(points: Vector2[]): this;
123
- forEachCurve(cb: (curve: Curve) => void): this;
124
- transformPoint(cb: (point: Vector2) => void): this;
125
- transform(matrix: Matrix3): this;
126
- getMinMax(min?: Vector2, max?: Vector2): {
127
- min: Vector2;
128
- max: Vector2;
129
- };
130
- getBoundingBox(): BoundingBox;
131
- getCommands(): PathCommand[];
132
- getData(): string;
133
- getSvgString(): string;
134
- getSvgDataUri(): string;
135
- drawTo(ctx: CanvasRenderingContext2D): void;
136
- strokeTo(ctx: CanvasRenderingContext2D): void;
137
- fillTo(ctx: CanvasRenderingContext2D): void;
138
- copy(source: Path2D): this;
139
- toCanvas(fill?: boolean): HTMLCanvasElement;
140
- clone(): this;
141
- }
142
-
143
68
  /**
144
69
  * @link https://developer.mozilla.org/docs/Web/SVG/Attribute/d
145
70
  */
@@ -193,6 +118,49 @@ type PathCommand = {
193
118
  } | {
194
119
  type: 'z' | 'Z';
195
120
  };
121
+ type FillRule = 'nonzero' | 'evenodd';
122
+ type StrokeLinecap = 'butt' | 'round' | 'square';
123
+ type StrokeLinejoin = 'arcs' | 'bevel' | 'miter' | 'miter-clip' | 'round';
124
+ interface PathStyle {
125
+ [key: string]: any;
126
+ fill?: string;
127
+ fillOpacity?: number;
128
+ fillRule?: FillRule;
129
+ opacity?: number;
130
+ stroke?: string;
131
+ strokeOpacity?: number;
132
+ strokeWidth?: number;
133
+ strokeLinecap?: StrokeLinecap;
134
+ strokeLinejoin?: StrokeLinejoin;
135
+ strokeMiterlimit?: number;
136
+ strokeDasharray?: number[];
137
+ strokeDashoffset?: number;
138
+ visibility?: string;
139
+ }
140
+
141
+ /**
142
+ * @link http://www.w3.org/TR/SVG11/implnote.html#PathElementImplementationNotes
143
+ */
144
+ declare function addPathCommandsToPath2D(commands: PathCommand[], path: Path2D | CurvePath): void;
145
+
146
+ /**
147
+ * https://www.w3.org/TR/SVG/implnote.html#ArcImplementationNotes
148
+ * https://mortoray.com/2017/02/16/rendering-an-svg-elliptical-arc-as-bezier-curves/ Appendix: Endpoint to center arc conversion
149
+ * From
150
+ * rx ry x-axis-rotation large-arc-flag sweep-flag x y
151
+ * To
152
+ * aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation
153
+ */
154
+ declare function parseArcCommand(path: Path2D | CurvePath, rx: number, ry: number, xAxisRotation: number, largeArcFlag: number, sweepFlag: number, start: Vector2, end: Vector2): void;
155
+
156
+ /**
157
+ * from https://github.com/ppvg/svg-numbers (MIT License)
158
+ */
159
+ declare function parsePathDataArgs(input: string, flags?: number[], stride?: number): number[];
160
+
161
+ declare function pathCommandsToPathData(commands: PathCommand[]): string;
162
+
163
+ declare function pathDataToPathCommands(d: string): PathCommand[];
196
164
 
197
165
  declare abstract class Curve {
198
166
  arcLengthDivisions: number;
@@ -262,11 +230,11 @@ declare class EllipseCurve extends Curve {
262
230
  center: Vector2;
263
231
  radiusX: number;
264
232
  radiusY: number;
233
+ rotation: number;
265
234
  startAngle: number;
266
235
  endAngle: number;
267
236
  clockwise: boolean;
268
- rotation: number;
269
- constructor(center?: Vector2, radiusX?: number, radiusY?: number, startAngle?: number, endAngle?: number, clockwise?: boolean, rotation?: number);
237
+ constructor(center?: Vector2, radiusX?: number, radiusY?: number, rotation?: number, startAngle?: number, endAngle?: number, clockwise?: boolean);
270
238
  getPoint(t: number, output?: Vector2): Vector2;
271
239
  getDivisions(divisions?: number): number;
272
240
  getCommands(): PathCommand[];
@@ -401,7 +369,94 @@ declare class SplineCurve extends Curve {
401
369
  copy(source: SplineCurve): this;
402
370
  }
403
371
 
372
+ declare class CurvePath extends Curve {
373
+ curves: Curve[];
374
+ startPoint?: Vector2;
375
+ currentPoint: Vector2;
376
+ autoClose: boolean;
377
+ protected _cacheLengths: number[];
378
+ constructor(points?: Vector2[]);
379
+ addCurve(curve: Curve): this;
380
+ addPoints(points: Vector2[]): this;
381
+ addCommands(commands: PathCommand[]): this;
382
+ addData(data: string): this;
383
+ getPoint(t: number, output?: Vector2): Vector2;
384
+ getLength(): number;
385
+ updateArcLengths(): void;
386
+ getCurveLengths(): number[];
387
+ getSpacedPoints(divisions?: number): Vector2[];
388
+ getPoints(divisions?: number): Vector2[];
389
+ protected _setCurrentPoint(point: VectorLike): this;
390
+ closePath(): this;
391
+ moveTo(x: number, y: number): this;
392
+ lineTo(x: number, y: number): this;
393
+ bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this;
394
+ quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this;
395
+ arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
396
+ relativeArc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
397
+ arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): this;
398
+ ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
399
+ relativeEllipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
400
+ rect(x: number, y: number, w: number, h: number): this;
401
+ splineThru(points: Vector2[]): this;
402
+ transformPoint(cb: (point: Vector2) => void): this;
403
+ getMinMax(min?: Vector2, max?: Vector2): {
404
+ min: Vector2;
405
+ max: Vector2;
406
+ };
407
+ getBoundingBox(): BoundingBox;
408
+ getCommands(): PathCommand[];
409
+ drawTo(ctx: CanvasRenderingContext2D): this;
410
+ copy(source: CurvePath): this;
411
+ }
412
+
413
+ /**
414
+ * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Path2D
415
+ */
416
+ declare class Path2D {
417
+ currentPath: CurvePath;
418
+ paths: CurvePath[];
419
+ style: PathStyle;
420
+ get startPoint(): Vector2 | undefined;
421
+ get currentPoint(): Vector2 | undefined;
422
+ get strokeWidth(): number;
423
+ constructor(path?: Path2D | PathCommand[] | string);
424
+ addPath(path: Path2D | CurvePath): this;
425
+ closePath(): this;
426
+ moveTo(x: number, y: number): this;
427
+ lineTo(x: number, y: number): this;
428
+ bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this;
429
+ quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this;
430
+ arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
431
+ arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): this;
432
+ ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
433
+ rect(x: number, y: number, w: number, h: number): this;
434
+ addCommands(commands: PathCommand[]): this;
435
+ addData(data: string): this;
436
+ splineThru(points: Vector2[]): this;
437
+ forEachCurve(cb: (curve: Curve) => void): this;
438
+ transformPoint(cb: (point: Vector2) => void): this;
439
+ transform(matrix: Matrix3): this;
440
+ getMinMax(min?: Vector2, max?: Vector2): {
441
+ min: Vector2;
442
+ max: Vector2;
443
+ };
444
+ getBoundingBox(withStrokeWidth?: boolean): BoundingBox;
445
+ getCommands(): PathCommand[];
446
+ getData(): string;
447
+ getSvgPathXml(): string;
448
+ getSvgXml(): string;
449
+ getSvgDataUri(): string;
450
+ drawTo(ctx: CanvasRenderingContext2D): void;
451
+ copy(source: Path2D): this;
452
+ toSvg(): SVGElement;
453
+ toCanvas(pixelRatio?: number): HTMLCanvasElement;
454
+ clone(): this;
455
+ }
456
+
457
+ declare function setCanvasContextByPath(ctx: CanvasRenderingContext2D, path: Path2D): void;
458
+
404
459
  declare function parseSvgToDom(svg: string | SVGElement): SVGElement;
405
460
  declare function parseSvg(svg: string | SVGElement): Path2D[];
406
461
 
407
- export { BoundingBox, CircleCurve, CubicBezierCurve, Curve, CurvePath, EllipseCurve, HeartCurve, LineCurve, Matrix3, Path2D, PloygonCurve, QuadraticBezierCurve, RectangularCurve, SplineCurve, Vector2, type VectorLike, parseSvg, parseSvgToDom };
462
+ export { BoundingBox, CircleCurve, CubicBezierCurve, Curve, CurvePath, EllipseCurve, type FillRule, HeartCurve, LineCurve, Matrix3, Path2D, type PathCommand, type PathStyle, PloygonCurve, QuadraticBezierCurve, RectangularCurve, SplineCurve, type StrokeLinecap, type StrokeLinejoin, Vector2, type VectorLike, addPathCommandsToPath2D, parseArcCommand, parsePathDataArgs, parseSvg, parseSvgToDom, pathCommandsToPathData, pathDataToPathCommands, setCanvasContextByPath };
package/dist/index.d.mts CHANGED
@@ -65,81 +65,6 @@ declare class BoundingBox {
65
65
  toArray(): [number, number, number, number];
66
66
  }
67
67
 
68
- declare class CurvePath extends Curve {
69
- curves: Curve[];
70
- currentPoint: Vector2;
71
- autoClose: boolean;
72
- protected _cacheLengths: number[];
73
- constructor(points?: Vector2[]);
74
- addCurve(curve: Curve): this;
75
- closePath(): this;
76
- getPoint(position: number, output?: Vector2): Vector2;
77
- getLength(): number;
78
- updateArcLengths(): void;
79
- getCurveLengths(): number[];
80
- getSpacedPoints(divisions?: number): Vector2[];
81
- getPoints(divisions?: number): Vector2[];
82
- setFromPoints(points: Vector2[]): this;
83
- bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this;
84
- lineTo(x: number, y: number): this;
85
- moveTo(x: number, y: number): this;
86
- quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this;
87
- rect(x: number, y: number, w: number, h: number): this;
88
- splineThru(points: Vector2[]): this;
89
- arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, clockwise?: boolean): this;
90
- absarc(x: number, y: number, radius: number, startAngle: number, endAngle: number, clockwise?: boolean): this;
91
- ellipse(x: number, y: number, radiusX: number, radiusY: number, startAngle: number, endAngle: number, clockwise?: boolean, rotation?: number): this;
92
- absellipse(x: number, y: number, radiusX: number, radiusY: number, startAngle: number, endAngle: number, clockwise?: boolean, rotation?: number): this;
93
- getCommands(): PathCommand[];
94
- getMinMax(min?: Vector2, max?: Vector2): {
95
- min: Vector2;
96
- max: Vector2;
97
- };
98
- drawTo(ctx: CanvasRenderingContext2D): this;
99
- copy(source: CurvePath): this;
100
- }
101
-
102
- /**
103
- * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Path2D
104
- */
105
- declare class Path2D<T = any> {
106
- currentPath: CurvePath;
107
- paths: CurvePath[];
108
- userData?: T;
109
- constructor(path?: Path2D | PathCommand[] | string);
110
- addPath(path: Path2D | CurvePath): this;
111
- closePath(): this;
112
- moveTo(x: number, y: number): this;
113
- lineTo(x: number, y: number): this;
114
- bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this;
115
- quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this;
116
- arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
117
- arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): this;
118
- ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
119
- rect(x: number, y: number, w: number, h: number): this;
120
- addCommands(commands: PathCommand[]): this;
121
- addData(data: string): this;
122
- splineThru(points: Vector2[]): this;
123
- forEachCurve(cb: (curve: Curve) => void): this;
124
- transformPoint(cb: (point: Vector2) => void): this;
125
- transform(matrix: Matrix3): this;
126
- getMinMax(min?: Vector2, max?: Vector2): {
127
- min: Vector2;
128
- max: Vector2;
129
- };
130
- getBoundingBox(): BoundingBox;
131
- getCommands(): PathCommand[];
132
- getData(): string;
133
- getSvgString(): string;
134
- getSvgDataUri(): string;
135
- drawTo(ctx: CanvasRenderingContext2D): void;
136
- strokeTo(ctx: CanvasRenderingContext2D): void;
137
- fillTo(ctx: CanvasRenderingContext2D): void;
138
- copy(source: Path2D): this;
139
- toCanvas(fill?: boolean): HTMLCanvasElement;
140
- clone(): this;
141
- }
142
-
143
68
  /**
144
69
  * @link https://developer.mozilla.org/docs/Web/SVG/Attribute/d
145
70
  */
@@ -193,6 +118,49 @@ type PathCommand = {
193
118
  } | {
194
119
  type: 'z' | 'Z';
195
120
  };
121
+ type FillRule = 'nonzero' | 'evenodd';
122
+ type StrokeLinecap = 'butt' | 'round' | 'square';
123
+ type StrokeLinejoin = 'arcs' | 'bevel' | 'miter' | 'miter-clip' | 'round';
124
+ interface PathStyle {
125
+ [key: string]: any;
126
+ fill?: string;
127
+ fillOpacity?: number;
128
+ fillRule?: FillRule;
129
+ opacity?: number;
130
+ stroke?: string;
131
+ strokeOpacity?: number;
132
+ strokeWidth?: number;
133
+ strokeLinecap?: StrokeLinecap;
134
+ strokeLinejoin?: StrokeLinejoin;
135
+ strokeMiterlimit?: number;
136
+ strokeDasharray?: number[];
137
+ strokeDashoffset?: number;
138
+ visibility?: string;
139
+ }
140
+
141
+ /**
142
+ * @link http://www.w3.org/TR/SVG11/implnote.html#PathElementImplementationNotes
143
+ */
144
+ declare function addPathCommandsToPath2D(commands: PathCommand[], path: Path2D | CurvePath): void;
145
+
146
+ /**
147
+ * https://www.w3.org/TR/SVG/implnote.html#ArcImplementationNotes
148
+ * https://mortoray.com/2017/02/16/rendering-an-svg-elliptical-arc-as-bezier-curves/ Appendix: Endpoint to center arc conversion
149
+ * From
150
+ * rx ry x-axis-rotation large-arc-flag sweep-flag x y
151
+ * To
152
+ * aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation
153
+ */
154
+ declare function parseArcCommand(path: Path2D | CurvePath, rx: number, ry: number, xAxisRotation: number, largeArcFlag: number, sweepFlag: number, start: Vector2, end: Vector2): void;
155
+
156
+ /**
157
+ * from https://github.com/ppvg/svg-numbers (MIT License)
158
+ */
159
+ declare function parsePathDataArgs(input: string, flags?: number[], stride?: number): number[];
160
+
161
+ declare function pathCommandsToPathData(commands: PathCommand[]): string;
162
+
163
+ declare function pathDataToPathCommands(d: string): PathCommand[];
196
164
 
197
165
  declare abstract class Curve {
198
166
  arcLengthDivisions: number;
@@ -262,11 +230,11 @@ declare class EllipseCurve extends Curve {
262
230
  center: Vector2;
263
231
  radiusX: number;
264
232
  radiusY: number;
233
+ rotation: number;
265
234
  startAngle: number;
266
235
  endAngle: number;
267
236
  clockwise: boolean;
268
- rotation: number;
269
- constructor(center?: Vector2, radiusX?: number, radiusY?: number, startAngle?: number, endAngle?: number, clockwise?: boolean, rotation?: number);
237
+ constructor(center?: Vector2, radiusX?: number, radiusY?: number, rotation?: number, startAngle?: number, endAngle?: number, clockwise?: boolean);
270
238
  getPoint(t: number, output?: Vector2): Vector2;
271
239
  getDivisions(divisions?: number): number;
272
240
  getCommands(): PathCommand[];
@@ -401,7 +369,94 @@ declare class SplineCurve extends Curve {
401
369
  copy(source: SplineCurve): this;
402
370
  }
403
371
 
372
+ declare class CurvePath extends Curve {
373
+ curves: Curve[];
374
+ startPoint?: Vector2;
375
+ currentPoint: Vector2;
376
+ autoClose: boolean;
377
+ protected _cacheLengths: number[];
378
+ constructor(points?: Vector2[]);
379
+ addCurve(curve: Curve): this;
380
+ addPoints(points: Vector2[]): this;
381
+ addCommands(commands: PathCommand[]): this;
382
+ addData(data: string): this;
383
+ getPoint(t: number, output?: Vector2): Vector2;
384
+ getLength(): number;
385
+ updateArcLengths(): void;
386
+ getCurveLengths(): number[];
387
+ getSpacedPoints(divisions?: number): Vector2[];
388
+ getPoints(divisions?: number): Vector2[];
389
+ protected _setCurrentPoint(point: VectorLike): this;
390
+ closePath(): this;
391
+ moveTo(x: number, y: number): this;
392
+ lineTo(x: number, y: number): this;
393
+ bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this;
394
+ quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this;
395
+ arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
396
+ relativeArc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
397
+ arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): this;
398
+ ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
399
+ relativeEllipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
400
+ rect(x: number, y: number, w: number, h: number): this;
401
+ splineThru(points: Vector2[]): this;
402
+ transformPoint(cb: (point: Vector2) => void): this;
403
+ getMinMax(min?: Vector2, max?: Vector2): {
404
+ min: Vector2;
405
+ max: Vector2;
406
+ };
407
+ getBoundingBox(): BoundingBox;
408
+ getCommands(): PathCommand[];
409
+ drawTo(ctx: CanvasRenderingContext2D): this;
410
+ copy(source: CurvePath): this;
411
+ }
412
+
413
+ /**
414
+ * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Path2D
415
+ */
416
+ declare class Path2D {
417
+ currentPath: CurvePath;
418
+ paths: CurvePath[];
419
+ style: PathStyle;
420
+ get startPoint(): Vector2 | undefined;
421
+ get currentPoint(): Vector2 | undefined;
422
+ get strokeWidth(): number;
423
+ constructor(path?: Path2D | PathCommand[] | string);
424
+ addPath(path: Path2D | CurvePath): this;
425
+ closePath(): this;
426
+ moveTo(x: number, y: number): this;
427
+ lineTo(x: number, y: number): this;
428
+ bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this;
429
+ quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this;
430
+ arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
431
+ arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): this;
432
+ ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
433
+ rect(x: number, y: number, w: number, h: number): this;
434
+ addCommands(commands: PathCommand[]): this;
435
+ addData(data: string): this;
436
+ splineThru(points: Vector2[]): this;
437
+ forEachCurve(cb: (curve: Curve) => void): this;
438
+ transformPoint(cb: (point: Vector2) => void): this;
439
+ transform(matrix: Matrix3): this;
440
+ getMinMax(min?: Vector2, max?: Vector2): {
441
+ min: Vector2;
442
+ max: Vector2;
443
+ };
444
+ getBoundingBox(withStrokeWidth?: boolean): BoundingBox;
445
+ getCommands(): PathCommand[];
446
+ getData(): string;
447
+ getSvgPathXml(): string;
448
+ getSvgXml(): string;
449
+ getSvgDataUri(): string;
450
+ drawTo(ctx: CanvasRenderingContext2D): void;
451
+ copy(source: Path2D): this;
452
+ toSvg(): SVGElement;
453
+ toCanvas(pixelRatio?: number): HTMLCanvasElement;
454
+ clone(): this;
455
+ }
456
+
457
+ declare function setCanvasContextByPath(ctx: CanvasRenderingContext2D, path: Path2D): void;
458
+
404
459
  declare function parseSvgToDom(svg: string | SVGElement): SVGElement;
405
460
  declare function parseSvg(svg: string | SVGElement): Path2D[];
406
461
 
407
- export { BoundingBox, CircleCurve, CubicBezierCurve, Curve, CurvePath, EllipseCurve, HeartCurve, LineCurve, Matrix3, Path2D, PloygonCurve, QuadraticBezierCurve, RectangularCurve, SplineCurve, Vector2, type VectorLike, parseSvg, parseSvgToDom };
462
+ export { BoundingBox, CircleCurve, CubicBezierCurve, Curve, CurvePath, EllipseCurve, type FillRule, HeartCurve, LineCurve, Matrix3, Path2D, type PathCommand, type PathStyle, PloygonCurve, QuadraticBezierCurve, RectangularCurve, SplineCurve, type StrokeLinecap, type StrokeLinejoin, Vector2, type VectorLike, addPathCommandsToPath2D, parseArcCommand, parsePathDataArgs, parseSvg, parseSvgToDom, pathCommandsToPathData, pathDataToPathCommands, setCanvasContextByPath };