@leafer/path
Advanced tools
+4
-4
| { | ||
| "name": "@leafer/path", | ||
| "version": "1.0.0-rc.9", | ||
| "version": "1.0.0-rc.10", | ||
| "description": "@leafer/path", | ||
@@ -25,8 +25,8 @@ "author": "Chao (Leafer) Wan", | ||
| "dependencies": { | ||
| "@leafer/math": "1.0.0-rc.9", | ||
| "@leafer/debug": "1.0.0-rc.9" | ||
| "@leafer/math": "1.0.0-rc.10", | ||
| "@leafer/debug": "1.0.0-rc.10" | ||
| }, | ||
| "devDependencies": { | ||
| "@leafer/interface": "1.0.0-rc.9" | ||
| "@leafer/interface": "1.0.0-rc.10" | ||
| } | ||
| } |
+0
-1
@@ -6,3 +6,2 @@ export { PathHelper } from './PathHelper' | ||
| export { PathDrawer } from './PathDrawer' | ||
| export { PathScaler } from './PathScaler' | ||
| export { PathBounds } from './PathBounds' | ||
@@ -9,0 +8,0 @@ export { PathCorner } from './PathCorner' |
| import { IPathCommandData, IPointData } from '@leafer/interface' | ||
| import { StringNumberMap } from '@leafer/math' | ||
| import { MathHelper, StringNumberMap } from '@leafer/math' | ||
| import { Debug } from '@leafer/debug' | ||
@@ -29,3 +29,3 @@ | ||
| stringify(data: IPathCommandData): string { | ||
| stringify(data: IPathCommandData, floatLength?: number): string { | ||
| let i = 0, len = data.length, count: number, str: string = '', command: number, lastCommand: number | ||
@@ -42,3 +42,3 @@ while (i < len) { | ||
| for (let j = 1; j < count; j++) { | ||
| str += data[i + j]; | ||
| str += MathHelper.float(data[i + j], floatLength); | ||
| (j === count - 1) || (str += ' ') | ||
@@ -45,0 +45,0 @@ } |
+2
-7
@@ -17,3 +17,3 @@ import { IPathCreator, IPathCommandData, IPathDrawer, IPathString, IBoundsData, ITwoPointBoundsData, IPointData, INumberMap, IStringMap } from '@leafer/interface'; | ||
| current: ICurrentCommand; | ||
| stringify(data: IPathCommandData): string; | ||
| stringify(data: IPathCommandData, floatLength?: number): string; | ||
| parse(pathString: string, curveMode?: boolean): IPathCommandData; | ||
@@ -65,7 +65,2 @@ toCanvasData(old: IPathCommandData, curveMode?: boolean): IPathCommandData; | ||
| declare const PathScaler: { | ||
| scale(data: IPathCommandData, scaleX: number, scaleY: number): void; | ||
| scalePoints(data: IPathCommandData, scaleX: number, scaleY: number, start?: number, pointCount?: number): void; | ||
| }; | ||
| declare const PathBounds: { | ||
@@ -107,2 +102,2 @@ toBounds(data: IPathCommandData, setBounds: IBoundsData): void; | ||
| export { BezierHelper, EllipseHelper, NeedConvertToCanvasCommandMap, PathBounds, PathCommandDataHelper, PathCommandMap, PathConvert, PathCorner, PathCreator, PathDrawer, PathHelper, PathNumberCommandLengthMap, PathNumberCommandMap, PathScaler, RectHelper }; | ||
| export { BezierHelper, EllipseHelper, NeedConvertToCanvasCommandMap, PathBounds, PathCommandDataHelper, PathCommandMap, PathConvert, PathCorner, PathCreator, PathDrawer, PathHelper, PathNumberCommandLengthMap, PathNumberCommandMap, RectHelper }; |
| import { IPathCommandData } from '@leafer/interface' | ||
| import { PathCommandMap as Command } from './PathCommandMap' | ||
| const { M, L, C, Q, Z, N, D, X, G, F, O, P, U } = Command | ||
| export const PathScaler = { | ||
| scale(data: IPathCommandData, scaleX: number, scaleY: number): void { | ||
| if (!data) return | ||
| let command: number | ||
| let i = 0, len = data.length | ||
| while (i < len) { | ||
| command = data[i] | ||
| switch (command) { | ||
| case M: //moveto(x, y) | ||
| scalePoints(data, scaleX, scaleY, i, 1) | ||
| i += 3 | ||
| break | ||
| case L: //lineto(x, y) | ||
| scalePoints(data, scaleX, scaleY, i, 1) | ||
| i += 3 | ||
| break | ||
| case C: //bezierCurveTo(x1, y1, x2, y2, x, y) | ||
| scalePoints(data, scaleX, scaleY, i, 3) | ||
| i += 7 | ||
| break | ||
| case Q: //quadraticCurveTo(x1, y1, x, y) | ||
| scalePoints(data, scaleX, scaleY, i, 2) | ||
| i += 5 | ||
| break | ||
| case Z: //closepath() | ||
| i += 1 | ||
| break | ||
| // canvas command | ||
| case N: // rect(x, y, width, height) | ||
| scalePoints(data, scaleX, scaleY, i, 2) | ||
| i += 5 | ||
| break | ||
| case D: // roundRect(x, y, width, height, radius1, radius2, radius3, radius4) | ||
| scalePoints(data, scaleX, scaleY, i, 2) | ||
| i += 9 | ||
| break | ||
| case X: // simple roundRect(x, y, width, height, radius) | ||
| scalePoints(data, scaleX, scaleY, i, 2) | ||
| i += 6 | ||
| break | ||
| case G: // ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise) | ||
| scalePoints(data, scaleX, scaleY, i, 2) | ||
| i += 9 | ||
| break | ||
| case F: // simple ellipse(x, y, radiusX, radiusY) | ||
| scalePoints(data, scaleX, scaleY, i, 2) | ||
| i += 5 | ||
| break | ||
| case O: // arc(x, y, radius, startAngle, endAngle, anticlockwise) | ||
| data[i] = G // to ellipse | ||
| data.splice(i + 4, 0, data[i + 3], 0) | ||
| scalePoints(data, scaleX, scaleY, i, 2) | ||
| i += 7 + 2 | ||
| len += 2 | ||
| break | ||
| case P: // simple arc(x, y, radius) | ||
| data[i] = F // to simple ellipse | ||
| data.splice(i + 4, 0, data[i + 3]) | ||
| scalePoints(data, scaleX, scaleY, i, 2) | ||
| i += 4 + 1 | ||
| len += 1 | ||
| break | ||
| case U: // arcTo(x1, y1, x2, y2, radius) | ||
| scalePoints(data, scaleX, scaleY, i, 2) | ||
| i += 6 | ||
| break | ||
| } | ||
| } | ||
| }, | ||
| scalePoints(data: IPathCommandData, scaleX: number, scaleY: number, start?: number, pointCount?: number): void { | ||
| for (let i = pointCount ? start + 1 : 0, end = pointCount ? i + pointCount * 2 : data.length; i < end; i += 2) { | ||
| data[i] *= scaleX | ||
| data[i + 1] *= scaleY | ||
| } | ||
| } | ||
| } | ||
| const { scalePoints } = PathScaler |
58969
-5.72%16
-5.88%1160
-6.75%+ Added
+ Added
- Removed
- Removed
Updated
Updated