modern-path2d 0.0.1 → 0.0.2

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,271 @@
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
+ constructor(x?: number, y?: number);
40
+ set(x: number, y: number): this;
41
+ add(point: Point2D): this;
42
+ sub(point: Point2D): this;
43
+ distanceTo(point: Point2D): number;
44
+ distanceToSquared(point: Point2D): number;
45
+ length(): number;
46
+ multiplyScalar(scalar: number): this;
47
+ divideScalar(scalar: number): this;
48
+ subVectors(a: Point2D, b: Point2D): this;
49
+ normalize(): this;
50
+ lerpVectors(v1: Point2D, v2: Point2D, alpha: number): this;
51
+ equals(point: Point2D): boolean;
52
+ copy(point: Point2D): this;
53
+ clone(): Point2D;
54
+ }
55
+
56
+ declare abstract class Curve {
57
+ arcLengthDivisions: number;
58
+ protected _cacheArcLengths?: number[];
59
+ protected _needsUpdate: boolean;
60
+ abstract getPoint(t: number, output?: Point2D): Point2D;
61
+ abstract toPathCommands(): PathCommand[];
62
+ abstract drawTo(ctx: CanvasRenderingContext2D): void;
63
+ getDivisions(divisions: number): number;
64
+ getPointAt(u: number, output?: Point2D): Point2D;
65
+ getPoints(divisions?: number): Point2D[];
66
+ getSpacedPoints(divisions?: number): Point2D[];
67
+ getLength(): number;
68
+ getLengths(divisions?: number): number[];
69
+ updateArcLengths(): void;
70
+ getUtoTmapping(u: number, distance?: number): number;
71
+ getTangent(t: number, output?: Point2D): Point2D;
72
+ getTangentAt(u: number, output?: Point2D): Point2D;
73
+ clone(): this;
74
+ copy(source: Curve): this;
75
+ }
76
+
77
+ declare class CurvePath extends Curve {
78
+ curves: Curve[];
79
+ currentPoint: Point2D;
80
+ autoClose: boolean;
81
+ protected _cacheLengths: number[];
82
+ constructor(points?: Point2D[]);
83
+ addCurve(curve: Curve): this;
84
+ closePath(): this;
85
+ getPoint(position: number, output?: Point2D): Point2D;
86
+ getLength(): number;
87
+ updateArcLengths(): void;
88
+ getCurveLengths(): number[];
89
+ getSpacedPoints(divisions?: number): Point2D[];
90
+ getPoints(divisions?: number): Point2D[];
91
+ setFromPoints(points: Point2D[]): this;
92
+ bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this;
93
+ lineTo(x: number, y: number): this;
94
+ moveTo(x: number, y: number): this;
95
+ quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this;
96
+ rect(x: number, y: number, w: number, h: number): this;
97
+ splineThru(points: Point2D[]): this;
98
+ arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, clockwise?: boolean): this;
99
+ absarc(x: number, y: number, radius: number, startAngle: number, endAngle: number, clockwise?: boolean): this;
100
+ ellipse(x: number, y: number, xRadius: number, yRadius: number, startAngle: number, endAngle: number, clockwise?: boolean, rotation?: number): this;
101
+ absellipse(x: number, y: number, xRadius: number, yRadius: number, startAngle: number, endAngle: number, clockwise?: boolean, rotation?: number): this;
102
+ toPathCommands(): PathCommand[];
103
+ drawTo(ctx: CanvasRenderingContext2D): void;
104
+ copy(source: CurvePath): this;
105
+ }
106
+
107
+ declare class CircleCurve extends Curve {
108
+ center: Point2D;
109
+ radius: number;
110
+ start: number;
111
+ end: number;
112
+ constructor(center: Point2D, radius: number, start?: number, end?: number);
113
+ getPole(min: Point2D, max: Point2D): void;
114
+ getPoint(index: number): Point2D;
115
+ getTangent(index: number): Point2D;
116
+ getNormal(index: number): Point2D;
117
+ toPathCommands(): PathCommand[];
118
+ drawTo(_ctx: CanvasRenderingContext2D): void;
119
+ }
120
+
121
+ declare class CubicBezierCurve extends Curve {
122
+ v0: Point2D;
123
+ v1: Point2D;
124
+ v2: Point2D;
125
+ v3: Point2D;
126
+ constructor(v0?: Point2D, v1?: Point2D, v2?: Point2D, v3?: Point2D);
127
+ getPoint(t: number, output?: Point2D): Point2D;
128
+ toPathCommands(): PathCommand[];
129
+ drawTo(ctx: CanvasRenderingContext2D): void;
130
+ copy(source: CubicBezierCurve): this;
131
+ }
132
+
133
+ declare class EllipseCurve extends Curve {
134
+ x: number;
135
+ y: number;
136
+ rx: number;
137
+ ry: number;
138
+ startAngle: number;
139
+ endAngle: number;
140
+ clockwise: boolean;
141
+ rotation: number;
142
+ constructor(x?: number, y?: number, rx?: number, ry?: number, startAngle?: number, endAngle?: number, clockwise?: boolean, rotation?: number);
143
+ getDivisions(divisions?: number): number;
144
+ getPoint(t: number, output?: Point2D): Point2D;
145
+ toPathCommands(): PathCommand[];
146
+ drawTo(ctx: CanvasRenderingContext2D): void;
147
+ copy(source: EllipseCurve): this;
148
+ }
149
+
150
+ declare class HeartCurve extends Curve {
151
+ center: Point2D;
152
+ size: number;
153
+ start: number;
154
+ end: number;
155
+ curves: Curve[];
156
+ pointT: number;
157
+ constructor(center: Point2D, size: number, start?: number, end?: number);
158
+ getPoint(value: number): Point2D;
159
+ getPointAt(value: number): Point2D;
160
+ getCurrentLine(value: number): Curve;
161
+ getTangent(value: number): Point2D;
162
+ getNormal(value: number): Point2D;
163
+ toPathCommands(): PathCommand[];
164
+ drawTo(ctx: CanvasRenderingContext2D): void;
165
+ }
166
+
167
+ declare class LineCurve extends Curve {
168
+ v1: Point2D;
169
+ v2: Point2D;
170
+ constructor(v1?: Point2D, v2?: Point2D);
171
+ getDivisions(): number;
172
+ getPoint(t: number, output?: Point2D): Point2D;
173
+ getPointAt(u: number, output?: Point2D): Point2D;
174
+ getTangent(t: number, output?: Point2D): Point2D;
175
+ getTangentAt(u: number, output?: Point2D): Point2D;
176
+ toPathCommands(): PathCommand[];
177
+ drawTo(ctx: CanvasRenderingContext2D): void;
178
+ copy(source: LineCurve): this;
179
+ }
180
+
181
+ declare class PloygonCurve extends Curve {
182
+ center: Point2D;
183
+ radius: number;
184
+ num: number;
185
+ start: number;
186
+ end: number;
187
+ curves: LineCurve[];
188
+ points: Point2D[];
189
+ currentLine: LineCurve;
190
+ pointK: any;
191
+ constructor(center: Point2D, radius?: number, num?: number, start?: number, end?: number);
192
+ getPoint(value: number): Point2D;
193
+ getPointAt(value: number): Point2D;
194
+ getCurrentLine(value: number): LineCurve;
195
+ getTangent(value: number): Point2D;
196
+ getNormal(value: number): Point2D;
197
+ toPathCommands(): PathCommand[];
198
+ drawTo(ctx: CanvasRenderingContext2D): void;
199
+ }
200
+
201
+ declare class QuadraticBezierCurve extends Curve {
202
+ v0: Point2D;
203
+ v1: Point2D;
204
+ v2: Point2D;
205
+ constructor(v0?: Point2D, v1?: Point2D, v2?: Point2D);
206
+ getPoint(t: number, output?: Point2D): Point2D;
207
+ toPathCommands(): PathCommand[];
208
+ drawTo(ctx: CanvasRenderingContext2D): void;
209
+ copy(source: QuadraticBezierCurve): this;
210
+ }
211
+
212
+ declare class RectangularCurve extends Curve {
213
+ center: Point2D;
214
+ rx: number;
215
+ aspectRatio: number;
216
+ start: number;
217
+ end: number;
218
+ curves: LineCurve[];
219
+ pointT: number;
220
+ get x(): number;
221
+ get y(): number;
222
+ get width(): number;
223
+ get height(): number;
224
+ constructor(center: Point2D, rx: number, aspectRatio?: number, start?: number, end?: number);
225
+ getPoint(t: number): Point2D;
226
+ getPointAt(u: number): Point2D;
227
+ getCurrentLine(t: number): LineCurve;
228
+ getTangent(t: number): Point2D;
229
+ getNormal(value: number): Point2D;
230
+ toPathCommands(): PathCommand[];
231
+ drawTo(ctx: CanvasRenderingContext2D): void;
232
+ }
233
+
234
+ declare class SplineCurve extends Curve {
235
+ points: Point2D[];
236
+ constructor(points?: Point2D[]);
237
+ getDivisions(divisions?: number): number;
238
+ getPoint(t: number, output?: Point2D): Point2D;
239
+ toPathCommands(): PathCommand[];
240
+ drawTo(_ctx: CanvasRenderingContext2D): void;
241
+ copy(source: SplineCurve): this;
242
+ }
243
+
244
+ /**
245
+ * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Path2D
246
+ */
247
+ declare class Path2D {
248
+ currentPath: CurvePath;
249
+ paths: CurvePath[];
250
+ arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
251
+ bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this;
252
+ lineTo(x: number, y: number): this;
253
+ moveTo(x: number, y: number): this;
254
+ quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this;
255
+ rect(x: number, y: number, w: number, h: number): this;
256
+ splineThru(points: Point2D[]): this;
257
+ toPathCommands(): PathCommand[];
258
+ drawTo(ctx: CanvasRenderingContext2D): void;
259
+ strokeTo(ctx: CanvasRenderingContext2D): void;
260
+ fillTo(ctx: CanvasRenderingContext2D): void;
261
+ }
262
+
263
+ /**
264
+ * Bezier Curves formulas obtained from
265
+ * https://en.wikipedia.org/wiki/B%C3%A9zier_curve
266
+ */
267
+ declare function catmullRom(t: number, p0: number, p1: number, p2: number, p3: number): number;
268
+ declare function quadraticBezier(t: number, p0: number, p1: number, p2: number): number;
269
+ declare function cubicBezier(t: number, p0: number, p1: number, p2: number, p3: number): number;
270
+
271
+ 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,271 @@
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
+ constructor(x?: number, y?: number);
40
+ set(x: number, y: number): this;
41
+ add(point: Point2D): this;
42
+ sub(point: Point2D): this;
43
+ distanceTo(point: Point2D): number;
44
+ distanceToSquared(point: Point2D): number;
45
+ length(): number;
46
+ multiplyScalar(scalar: number): this;
47
+ divideScalar(scalar: number): this;
48
+ subVectors(a: Point2D, b: Point2D): this;
49
+ normalize(): this;
50
+ lerpVectors(v1: Point2D, v2: Point2D, alpha: number): this;
51
+ equals(point: Point2D): boolean;
52
+ copy(point: Point2D): this;
53
+ clone(): Point2D;
54
+ }
55
+
56
+ declare abstract class Curve {
57
+ arcLengthDivisions: number;
58
+ protected _cacheArcLengths?: number[];
59
+ protected _needsUpdate: boolean;
60
+ abstract getPoint(t: number, output?: Point2D): Point2D;
61
+ abstract toPathCommands(): PathCommand[];
62
+ abstract drawTo(ctx: CanvasRenderingContext2D): void;
63
+ getDivisions(divisions: number): number;
64
+ getPointAt(u: number, output?: Point2D): Point2D;
65
+ getPoints(divisions?: number): Point2D[];
66
+ getSpacedPoints(divisions?: number): Point2D[];
67
+ getLength(): number;
68
+ getLengths(divisions?: number): number[];
69
+ updateArcLengths(): void;
70
+ getUtoTmapping(u: number, distance?: number): number;
71
+ getTangent(t: number, output?: Point2D): Point2D;
72
+ getTangentAt(u: number, output?: Point2D): Point2D;
73
+ clone(): this;
74
+ copy(source: Curve): this;
75
+ }
76
+
77
+ declare class CurvePath extends Curve {
78
+ curves: Curve[];
79
+ currentPoint: Point2D;
80
+ autoClose: boolean;
81
+ protected _cacheLengths: number[];
82
+ constructor(points?: Point2D[]);
83
+ addCurve(curve: Curve): this;
84
+ closePath(): this;
85
+ getPoint(position: number, output?: Point2D): Point2D;
86
+ getLength(): number;
87
+ updateArcLengths(): void;
88
+ getCurveLengths(): number[];
89
+ getSpacedPoints(divisions?: number): Point2D[];
90
+ getPoints(divisions?: number): Point2D[];
91
+ setFromPoints(points: Point2D[]): this;
92
+ bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this;
93
+ lineTo(x: number, y: number): this;
94
+ moveTo(x: number, y: number): this;
95
+ quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this;
96
+ rect(x: number, y: number, w: number, h: number): this;
97
+ splineThru(points: Point2D[]): this;
98
+ arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, clockwise?: boolean): this;
99
+ absarc(x: number, y: number, radius: number, startAngle: number, endAngle: number, clockwise?: boolean): this;
100
+ ellipse(x: number, y: number, xRadius: number, yRadius: number, startAngle: number, endAngle: number, clockwise?: boolean, rotation?: number): this;
101
+ absellipse(x: number, y: number, xRadius: number, yRadius: number, startAngle: number, endAngle: number, clockwise?: boolean, rotation?: number): this;
102
+ toPathCommands(): PathCommand[];
103
+ drawTo(ctx: CanvasRenderingContext2D): void;
104
+ copy(source: CurvePath): this;
105
+ }
106
+
107
+ declare class CircleCurve extends Curve {
108
+ center: Point2D;
109
+ radius: number;
110
+ start: number;
111
+ end: number;
112
+ constructor(center: Point2D, radius: number, start?: number, end?: number);
113
+ getPole(min: Point2D, max: Point2D): void;
114
+ getPoint(index: number): Point2D;
115
+ getTangent(index: number): Point2D;
116
+ getNormal(index: number): Point2D;
117
+ toPathCommands(): PathCommand[];
118
+ drawTo(_ctx: CanvasRenderingContext2D): void;
119
+ }
120
+
121
+ declare class CubicBezierCurve extends Curve {
122
+ v0: Point2D;
123
+ v1: Point2D;
124
+ v2: Point2D;
125
+ v3: Point2D;
126
+ constructor(v0?: Point2D, v1?: Point2D, v2?: Point2D, v3?: Point2D);
127
+ getPoint(t: number, output?: Point2D): Point2D;
128
+ toPathCommands(): PathCommand[];
129
+ drawTo(ctx: CanvasRenderingContext2D): void;
130
+ copy(source: CubicBezierCurve): this;
131
+ }
132
+
133
+ declare class EllipseCurve extends Curve {
134
+ x: number;
135
+ y: number;
136
+ rx: number;
137
+ ry: number;
138
+ startAngle: number;
139
+ endAngle: number;
140
+ clockwise: boolean;
141
+ rotation: number;
142
+ constructor(x?: number, y?: number, rx?: number, ry?: number, startAngle?: number, endAngle?: number, clockwise?: boolean, rotation?: number);
143
+ getDivisions(divisions?: number): number;
144
+ getPoint(t: number, output?: Point2D): Point2D;
145
+ toPathCommands(): PathCommand[];
146
+ drawTo(ctx: CanvasRenderingContext2D): void;
147
+ copy(source: EllipseCurve): this;
148
+ }
149
+
150
+ declare class HeartCurve extends Curve {
151
+ center: Point2D;
152
+ size: number;
153
+ start: number;
154
+ end: number;
155
+ curves: Curve[];
156
+ pointT: number;
157
+ constructor(center: Point2D, size: number, start?: number, end?: number);
158
+ getPoint(value: number): Point2D;
159
+ getPointAt(value: number): Point2D;
160
+ getCurrentLine(value: number): Curve;
161
+ getTangent(value: number): Point2D;
162
+ getNormal(value: number): Point2D;
163
+ toPathCommands(): PathCommand[];
164
+ drawTo(ctx: CanvasRenderingContext2D): void;
165
+ }
166
+
167
+ declare class LineCurve extends Curve {
168
+ v1: Point2D;
169
+ v2: Point2D;
170
+ constructor(v1?: Point2D, v2?: Point2D);
171
+ getDivisions(): number;
172
+ getPoint(t: number, output?: Point2D): Point2D;
173
+ getPointAt(u: number, output?: Point2D): Point2D;
174
+ getTangent(t: number, output?: Point2D): Point2D;
175
+ getTangentAt(u: number, output?: Point2D): Point2D;
176
+ toPathCommands(): PathCommand[];
177
+ drawTo(ctx: CanvasRenderingContext2D): void;
178
+ copy(source: LineCurve): this;
179
+ }
180
+
181
+ declare class PloygonCurve extends Curve {
182
+ center: Point2D;
183
+ radius: number;
184
+ num: number;
185
+ start: number;
186
+ end: number;
187
+ curves: LineCurve[];
188
+ points: Point2D[];
189
+ currentLine: LineCurve;
190
+ pointK: any;
191
+ constructor(center: Point2D, radius?: number, num?: number, start?: number, end?: number);
192
+ getPoint(value: number): Point2D;
193
+ getPointAt(value: number): Point2D;
194
+ getCurrentLine(value: number): LineCurve;
195
+ getTangent(value: number): Point2D;
196
+ getNormal(value: number): Point2D;
197
+ toPathCommands(): PathCommand[];
198
+ drawTo(ctx: CanvasRenderingContext2D): void;
199
+ }
200
+
201
+ declare class QuadraticBezierCurve extends Curve {
202
+ v0: Point2D;
203
+ v1: Point2D;
204
+ v2: Point2D;
205
+ constructor(v0?: Point2D, v1?: Point2D, v2?: Point2D);
206
+ getPoint(t: number, output?: Point2D): Point2D;
207
+ toPathCommands(): PathCommand[];
208
+ drawTo(ctx: CanvasRenderingContext2D): void;
209
+ copy(source: QuadraticBezierCurve): this;
210
+ }
211
+
212
+ declare class RectangularCurve extends Curve {
213
+ center: Point2D;
214
+ rx: number;
215
+ aspectRatio: number;
216
+ start: number;
217
+ end: number;
218
+ curves: LineCurve[];
219
+ pointT: number;
220
+ get x(): number;
221
+ get y(): number;
222
+ get width(): number;
223
+ get height(): number;
224
+ constructor(center: Point2D, rx: number, aspectRatio?: number, start?: number, end?: number);
225
+ getPoint(t: number): Point2D;
226
+ getPointAt(u: number): Point2D;
227
+ getCurrentLine(t: number): LineCurve;
228
+ getTangent(t: number): Point2D;
229
+ getNormal(value: number): Point2D;
230
+ toPathCommands(): PathCommand[];
231
+ drawTo(ctx: CanvasRenderingContext2D): void;
232
+ }
233
+
234
+ declare class SplineCurve extends Curve {
235
+ points: Point2D[];
236
+ constructor(points?: Point2D[]);
237
+ getDivisions(divisions?: number): number;
238
+ getPoint(t: number, output?: Point2D): Point2D;
239
+ toPathCommands(): PathCommand[];
240
+ drawTo(_ctx: CanvasRenderingContext2D): void;
241
+ copy(source: SplineCurve): this;
242
+ }
243
+
244
+ /**
245
+ * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Path2D
246
+ */
247
+ declare class Path2D {
248
+ currentPath: CurvePath;
249
+ paths: CurvePath[];
250
+ arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
251
+ bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this;
252
+ lineTo(x: number, y: number): this;
253
+ moveTo(x: number, y: number): this;
254
+ quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this;
255
+ rect(x: number, y: number, w: number, h: number): this;
256
+ splineThru(points: Point2D[]): this;
257
+ toPathCommands(): PathCommand[];
258
+ drawTo(ctx: CanvasRenderingContext2D): void;
259
+ strokeTo(ctx: CanvasRenderingContext2D): void;
260
+ fillTo(ctx: CanvasRenderingContext2D): void;
261
+ }
262
+
263
+ /**
264
+ * Bezier Curves formulas obtained from
265
+ * https://en.wikipedia.org/wiki/B%C3%A9zier_curve
266
+ */
267
+ declare function catmullRom(t: number, p0: number, p1: number, p2: number, p3: number): number;
268
+ declare function quadraticBezier(t: number, p0: number, p1: number, p2: number): number;
269
+ declare function cubicBezier(t: number, p0: number, p1: number, p2: number, p3: number): number;
270
+
271
+ export { CircleCurve, CubicBezierCurve, Curve, CurvePath, EllipseCurve, HeartCurve, LineCurve, Path2D, type PathCommand, PloygonCurve, Point2D, QuadraticBezierCurve, RectangularCurve, SplineCurve, catmullRom, cubicBezier, quadraticBezier };