@leafer/path 2.0.5 → 2.0.7

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leafer/path",
3
- "version": "2.0.5",
3
+ "version": "2.0.7",
4
4
  "description": "@leafer/path",
5
5
  "author": "Chao (Leafer) Wan",
6
6
  "license": "MIT",
@@ -22,11 +22,11 @@
22
22
  "leaferjs"
23
23
  ],
24
24
  "dependencies": {
25
- "@leafer/data": "2.0.5",
26
- "@leafer/math": "2.0.5",
27
- "@leafer/debug": "2.0.5"
25
+ "@leafer/data": "2.0.7",
26
+ "@leafer/math": "2.0.7",
27
+ "@leafer/debug": "2.0.7"
28
28
  },
29
29
  "devDependencies": {
30
- "@leafer/interface": "2.0.5"
30
+ "@leafer/interface": "2.0.7"
31
31
  }
32
32
  }
@@ -270,6 +270,40 @@ export const BezierHelper = {
270
270
  return 3 * o * o * (v1 - fromV) + 6 * o * t * (v2 - v1) + 3 * t * t * (toV - v2)
271
271
  },
272
272
 
273
+ cut(t: number, fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number) {
274
+ // clamp
275
+ if (t <= 0) return { left: null, right: [x1, y1, x2, y2, toX, toY] }
276
+ else if (t >= 1) return { left: [x1, y1, x2, y2, toX, toY], right: null }
277
+
278
+ const u = 1 - t
279
+
280
+ // 一级插值
281
+ const leftX1 = fromX * u + x1 * t
282
+ const leftY1 = fromY * u + y1 * t
283
+
284
+ const P12x = x1 * u + x2 * t
285
+ const P12y = y1 * u + y2 * t
286
+
287
+ const rightX2 = x2 * u + toX * t
288
+ const rightY2 = y2 * u + toY * t
289
+
290
+ // 二级插值
291
+ const leftX2 = leftX1 * u + P12x * t
292
+ const leftY2 = leftY1 * u + P12y * t
293
+
294
+ const rightX1 = P12x * u + rightX2 * t
295
+ const rightY1 = P12y * u + rightY2 * t
296
+
297
+ // 最终切点
298
+ const leftX = leftX2 * u + rightX1 * t
299
+ const leftY = leftY2 * u + rightY1 * t
300
+
301
+ return {
302
+ left: [leftX1, leftY1, leftX2, leftY2, leftX, leftY],
303
+ right: [rightX1, rightY1, rightX2, rightY2, toX, toY]
304
+ }
305
+ }
306
+
273
307
  }
274
308
 
275
309
  const { getPointAndSet, toTwoPointBounds, ellipse } = BezierHelper
package/src/PathCorner.ts CHANGED
@@ -10,6 +10,7 @@ const { M, L, Z } = Command
10
10
  const { getCenterX, getCenterY } = PointHelper
11
11
  const { arcTo } = PathCommandDataHelper
12
12
 
13
+ // @leafer-in/corner will rewrite
13
14
  export const PathCorner = {
14
15
 
15
16
  smooth(data: IPathCommandData, cornerRadius: number, _cornerSmoothing?: number): IPathCommandData {
package/types/index.d.ts CHANGED
@@ -94,6 +94,10 @@ declare const BezierHelper: {
94
94
  getPointAndSet(t: number, fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number, setPoint: IPointData): void;
95
95
  getPoint(t: number, fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number): IPointData;
96
96
  getDerivative(t: number, fromV: number, v1: number, v2: number, toV: number): number;
97
+ cut(t: number, fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number): {
98
+ left: number[];
99
+ right: number[];
100
+ };
97
101
  };
98
102
 
99
103
  declare const EllipseHelper: {