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/README.md +1 -1
- package/dist/index.cjs +338 -265
- package/dist/index.d.cts +133 -78
- package/dist/index.d.mts +133 -78
- package/dist/index.d.ts +133 -78
- package/dist/index.js +1 -1
- package/dist/index.mjs +333 -266
- package/package.json +3 -3
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
|
|
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
|
|
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 };
|