@leafer-in/motion-path 2.0.7 → 2.0.9

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.
@@ -1 +1 @@
1
- {"version":3,"file":"motion-path.esm.min.js","sources":["../../../../../../src/in/packages/motion-path/src/HighBezierHelper.ts","../../../../../../src/in/packages/motion-path/src/HighCurveHelper.ts","../../../../../../src/in/packages/motion-path/src/decorator.ts","../../../../../../src/in/packages/motion-path/src/index.ts"],"sourcesContent":["import { IPathCommandData } from '@leafer-ui/interface'\nimport { BezierHelper, OneRadian, PathCommandMap } from '@leafer-ui/draw'\n\n\n// 高斯-勒让德积分节点和权重\nconst gaussNodes = [0.1488743389, 0.4333953941, 0.6794095682, 0.8650633666, 0.9739065285]\nconst gaussWeights = [0.2955242247, 0.2692667193, 0.2190863625, 0.1494513491, 0.0666713443]\n\nconst { sqrt } = Math\nconst { getDerivative } = BezierHelper\n\nexport const HighBezierHelper = {\n\n getDistance(fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number, t = 1): number {\n let distance = 0, t1: number, t2: number, d1X: number, d1Y: number, d2X: number, d2Y: number, half = t / 2\n for (let i = 0; i < gaussNodes.length; i++) {\n t1 = half * (1 + gaussNodes[i])\n t2 = half * (1 - gaussNodes[i])\n\n d1X = getDerivative(t1, fromX, x1, x2, toX)\n d1Y = getDerivative(t1, fromY, y1, y2, toY)\n\n d2X = getDerivative(t2, fromX, x1, x2, toX)\n d2Y = getDerivative(t2, fromY, y1, y2, toY)\n\n distance += gaussWeights[i] * (sqrt(d1X * d1X + d1Y * d1Y) + sqrt(d2X * d2X + d2Y * d2Y))\n }\n return distance * half\n },\n\n getRotation(t: number, fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number): number { // 切线角度\n const dx = getDerivative(t, fromX, x1, x2, toX)\n const dy = getDerivative(t, fromY, y1, y2, toY)\n return Math.atan2(dy, dx) / OneRadian\n },\n\n getT(distance: number, totalDistance: number, fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number, precision = 1): number { // 弧长反解 t\n let low = 0, high = 1, middle = distance / totalDistance, realPrecision = precision / totalDistance / 3\n\n if (middle >= 1) return 1\n if (middle <= 0) return 0\n\n while (high - low > realPrecision) { // 2分法快速对比\n getDistance(fromX, fromY, x1, y1, x2, y2, toX, toY, middle) < distance ? low = middle : high = middle\n middle = (low + high) / 2\n }\n\n return middle\n },\n\n cut(data: IPathCommandData, t: number, fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number) {\n const o = 1 - t\n const ax = o * fromX + t * x1, ay = o * fromY + t * y1\n const mbx = o * x1 + t * x2, mby = o * y1 + t * y2\n const mcx = o * x2 + t * toX, mcy = o * y2 + t * toY\n\n const bx = o * ax + t * mbx, by = o * ay + t * mby\n const mbcx = o * mbx + t * mcx, mbcy = o * mby + t * mcy\n\n const cx = o * bx + t * mbcx, cy = o * by + t * mbcy\n data.push(PathCommandMap.C, ax, ay, bx, by, cx, cy)\n }\n\n}\n\nconst { getDistance } = HighBezierHelper","import { IMatrixData, IPathCommandData, IMotionPathData, IRotationPointData, IPointData, IUnitData } from '@leafer-ui/interface'\nimport { BezierHelper, MatrixHelper, MathHelper, PathCommandMap, PointHelper, UnitConvert } from '@leafer-ui/draw'\n\nimport { HighBezierHelper } from './HighBezierHelper'\n\n\nconst { M, L, C, Z } = PathCommandMap, { float } = MathHelper\nconst tempPoint = {} as IPointData, tempFrom = {} as IPointData\n\nexport const HighCurveHelper = {\n\n transform(data: IPathCommandData, matrix: IMatrixData): void {\n let i: number = 0, command: number\n\n const len = data.length\n while (i < len) {\n command = data[i]\n switch (command) {\n case M: //moveto(x, y)\n case L: //lineto(x, y)\n HighCurveHelper.transformPoints(data, matrix, i, 1)\n i += 3\n break\n case C: //bezierCurveTo(x1, y1, x2, y2, x,y)\n HighCurveHelper.transformPoints(data, matrix, i, 3)\n i += 7\n break\n case Z: //closepath()\n i += 1\n }\n }\n },\n\n transformPoints(data: IPathCommandData, matrix: IMatrixData, start: number, pointCount: number): void {\n for (let i = start + 1, end = i + pointCount * 2; i < end; i += 2) {\n tempPoint.x = data[i]\n tempPoint.y = data[i + 1]\n MatrixHelper.toOuterPoint(matrix, tempPoint)\n data[i] = tempPoint.x\n data[i + 1] = tempPoint.y\n }\n },\n\n getMotionPathData(data: IPathCommandData): IMotionPathData {\n let total = 0, distance: number, segments: number[] = []\n let i = 0, x = 0, y = 0, toX: number, toY: number, command: number\n\n const len = data.length\n while (i < len) {\n command = data[i]\n switch (command) {\n case M: //moveto(x, y)\n case L: //lineto(x, y)\n toX = data[i + 1]\n toY = data[i + 2]\n distance = (command === L && i > 0) ? PointHelper.getDistanceFrom(x, y, toX, toY) : 0\n x = toX\n y = toY\n i += 3\n break\n case C: //bezierCurveTo(x1, y1, x2, y2, x,y)\n toX = data[i + 5]\n toY = data[i + 6]\n distance = HighBezierHelper.getDistance(x, y, data[i + 1], data[i + 2], data[i + 3], data[i + 4], toX, toY)\n x = toX\n y = toY\n i += 7\n break\n case Z: //closepath()\n i += 1\n default:\n distance = 0\n\n }\n\n segments.push(distance)\n total += distance\n }\n\n return { total, segments, data }\n\n },\n\n\n getDistancePoint(distanceData: IMotionPathData, motionDistance: number | IUnitData, motionPrecision?: number): IRotationPointData {\n const { segments, data } = distanceData\n motionDistance = UnitConvert.number(motionDistance, distanceData.total)\n\n let total = 0, distance: number, to = {} as IRotationPointData\n let i = 0, index = 0, x: number = 0, y: number = 0, toX: number, toY: number, command: number\n let x1: number, y1: number, x2: number, y2: number, t: number\n\n const len = data.length\n while (i < len) {\n command = data[i]\n switch (command) {\n case M: //moveto(x, y)\n case L: //lineto(x, y)\n toX = data[i + 1]\n toY = data[i + 2]\n distance = segments[index]\n\n if (total + distance >= motionDistance || !distanceData.total) {\n if (!i) x = toX, y = toY // first M\n tempFrom.x = x\n tempFrom.y = y\n to.x = toX\n to.y = toY\n PointHelper.getDistancePoint(tempFrom, to, motionDistance - total, true)\n to.rotation = PointHelper.getAngle(tempFrom, to)\n return to\n }\n\n x = toX\n y = toY\n i += 3\n break\n case C: //bezierCurveTo(x1, y1, x2, y2, x,y)\n toX = data[i + 5]\n toY = data[i + 6]\n distance = segments[index]\n\n if (total + distance >= motionDistance) {\n x1 = data[i + 1], y1 = data[i + 2], x2 = data[i + 3], y2 = data[i + 4]\n t = HighBezierHelper.getT(motionDistance - total, distance, x, y, x1, y1, x2, y2, toX, toY, motionPrecision)\n BezierHelper.getPointAndSet(t, x, y, x1, y1, x2, y2, toX, toY, to)\n to.rotation = HighBezierHelper.getRotation(t, x, y, x1, y1, x2, y2, toX, toY)\n return to\n }\n\n x = toX\n y = toY\n i += 7\n break\n case Z: //closepath()\n i += 1\n default:\n distance = 0\n }\n\n index++\n total += distance\n }\n\n return to\n },\n\n getDistancePath(distanceData: IMotionPathData, motionDistance: number | IUnitData, motionPrecision?: number): IPathCommandData {\n const { segments, data } = distanceData, path: IPathCommandData = []\n motionDistance = UnitConvert.number(motionDistance, distanceData.total)\n\n let total = 0, distance: number, cutDistance: number, to = {} as IRotationPointData\n let i = 0, index = 0, x: number = 0, y: number = 0, toX: number, toY: number, command: number\n let x1: number, y1: number, x2: number, y2: number, t: number\n\n const len = data.length\n while (i < len) {\n command = data[i]\n switch (command) {\n case M: //moveto(x, y)\n case L: //lineto(x, y)\n toX = data[i + 1]\n toY = data[i + 2]\n distance = segments[index]\n\n if (total + distance > motionDistance || !distanceData.total) {\n if (!i) x = toX, y = toY // first M\n tempFrom.x = x\n tempFrom.y = y\n to.x = toX\n to.y = toY\n cutDistance = float(motionDistance - total)\n if (cutDistance) {\n PointHelper.getDistancePoint(tempFrom, to, cutDistance, true)\n path.push(command, to.x, to.y)\n }\n return path\n }\n\n x = toX\n y = toY\n i += 3\n path.push(command, x, y)\n break\n case C: //bezierCurveTo(x1, y1, x2, y2, x,y)\n x1 = data[i + 1], y1 = data[i + 2], x2 = data[i + 3], y2 = data[i + 4]\n toX = data[i + 5]\n toY = data[i + 6]\n distance = segments[index]\n\n if (total + distance > motionDistance) {\n cutDistance = float(motionDistance - total)\n if (cutDistance) {\n t = HighBezierHelper.getT(cutDistance, distance, x, y, x1, y1, x2, y2, toX, toY, motionPrecision)\n HighBezierHelper.cut(path, t, x, y, x1, y1, x2, y2, toX, toY)\n }\n return path\n }\n\n x = toX\n y = toY\n i += 7\n path.push(command, x1, y1, x2, y2, toX, toY)\n break\n case Z: //closepath()\n i += 1\n path.push(command)\n default:\n distance = 0\n\n }\n\n index++\n total += distance\n }\n\n return path\n }\n\n}","import { IValue } from '@leafer-ui/interface'\nimport { decorateLeafAttr, attr, isNull } from '@leafer-ui/draw'\n\nexport function motionPathType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: any) {\n this.__setAttr(key, value)\n this.__hasMotionPath = this.motionPath || !isNull(this.motion)\n this.__layout.matrixChanged || this.__layout.matrixChange()\n }\n }))\n}","export { HighCurveHelper } from './HighCurveHelper'\nexport { HighBezierHelper } from './HighBezierHelper'\nexport { motionPathType } from './decorator'\n\nimport { IMotionPathData, IUI, IUnitData, IRotationPointData, IPercentData } from '@leafer-ui/interface'\nimport { isNull, MatrixHelper, LeafHelper, BranchHelper, Transition, UI, UnitConvert, Plugin, isObject, isNumber } from '@leafer-ui/draw'\n\nimport { HighCurveHelper } from './HighCurveHelper'\nimport { motionPathType } from './decorator'\n\n\nPlugin.add('motion-path')\n\n\nTransition.register('motion', function (from: number | IPercentData, to: number | IPercentData, t: number, target: IUI): number {\n if (isObject(from)) from = UnitConvert.number(from, target.getMotionTotal())\n if (isObject(to)) to = UnitConvert.number(to, target.getMotionTotal())\n return Transition.number(from || 0, to || 0, t)\n})\n\nTransition.register('motionRotation', function (from: any, to: any, t: number): number {\n return Transition.number(from, to, t)\n})\n\n\nconst ui = UI.prototype\nconst { updateMatrix, updateAllMatrix } = LeafHelper\nconst { updateBounds } = BranchHelper\n\n\n// addAttr\nUI.addAttr('motionPath', undefined, motionPathType)\nUI.addAttr('motionPrecision', 1, motionPathType)\n\nUI.addAttr('motion', undefined, motionPathType)\nUI.addAttr('motionRotation', true, motionPathType)\n\n\nui.getMotionPathData = function (): IMotionPathData {\n return getMotionPathData(getMotionPath(this))\n}\n\nui.getMotionPoint = function (motionDistance: number | IUnitData): IRotationPointData {\n const path = getMotionPath(this)\n const data = getMotionPathData(path)\n if (!data.total) return {} as IRotationPointData\n\n const point = HighCurveHelper.getDistancePoint(data, motionDistance, path.motionPrecision)\n MatrixHelper.toOuterPoint(path.localTransform, point)\n\n const { motionRotation } = this\n if (motionRotation === false) delete point.rotation\n else if (isNumber(motionRotation)) point.rotation += motionRotation\n return point\n}\n\nui.getMotionTotal = function (): number {\n return this.getMotionPathData().total\n}\n\nui.__updateMotionPath = function (): void {\n const data = this.__\n if (this.__layout.resized && data.__pathForMotion) data.__pathForMotion = undefined\n\n if (this.motionPath) {\n let child: IUI\n const { children } = this.parent\n for (let i = 0; i < children.length; i++) {\n child = children[i]\n if (!isNull(child.motion) && !child.__layout.matrixChanged) {\n if (child !== this) child.__extraUpdate()\n updateMotion(child)\n }\n }\n } else updateMotion(this)\n}\n\n\nfunction updateMotion(leaf: IUI): void {\n const { motion, leaferIsCreated } = leaf\n if (isNull(motion)) return\n\n if (leaferIsCreated) leaf.leafer.created = false // 拦截布局更新通知,进行手动更新布局\n\n if (leaf.motionPath) {\n\n const data = getMotionPathData(leaf)\n if (data.total) leaf.__.__pathForRender = HighCurveHelper.getDistancePath(data, motion, leaf.motionPrecision) // 生长路径\n\n } else {\n\n leaf.set(leaf.getMotionPoint(motion)) // 动画路径\n\n if (!leaf.__hasAutoLayout) { // 手动更新布局\n if (leaf.isBranch) updateAllMatrix(leaf), updateBounds(leaf, leaf)\n else updateMatrix(leaf)\n }\n\n }\n\n if (leaferIsCreated) leaf.leafer.created = true\n}\n\nfunction getMotionPath(leaf: IUI): IUI {\n const { parent } = leaf\n if (!leaf.motionPath && parent) {\n const { children } = parent\n for (let i = 0; i < children.length; i++) {\n if (children[i].motionPath) return children[i]\n }\n }\n return leaf\n}\n\nfunction getMotionPathData(leaf: IUI): IMotionPathData {\n const data = leaf.__\n if (data.__pathForMotion) return data.__pathForMotion\n return data.__pathForMotion = HighCurveHelper.getMotionPathData(leaf.getPath(true, true))\n}"],"names":["gaussNodes","gaussWeights","sqrt","Math","getDerivative","BezierHelper","HighBezierHelper","getDistance","fromX","fromY","x1","y1","x2","y2","toX","toY","t","t1","t2","d1X","d1Y","d2X","d2Y","distance","half","i","length","getRotation","dx","dy","atan2","OneRadian","getT","totalDistance","precision","low","high","middle","realPrecision","cut","data","o","ax","ay","mbx","mby","bx","by","cx","cy","push","PathCommandMap","C","M","L","Z","float","MathHelper","tempPoint","tempFrom","HighCurveHelper","transform","matrix","command","len","transformPoints","start","pointCount","end","x","y","MatrixHelper","toOuterPoint","getMotionPathData","total","segments","PointHelper","getDistanceFrom","getDistancePoint","distanceData","motionDistance","motionPrecision","UnitConvert","number","to","index","rotation","getAngle","getPointAndSet","getDistancePath","path","cutDistance","motionPathType","defaultValue","decorateLeafAttr","key","attr","set","value","this","__setAttr","__hasMotionPath","motionPath","isNull","motion","__layout","matrixChanged","matrixChange","Plugin","add","Transition","register","from","target","isObject","getMotionTotal","ui","UI","prototype","updateMatrix","updateAllMatrix","LeafHelper","updateBounds","BranchHelper","updateMotion","leaf","leaferIsCreated","leafer","created","__","__pathForRender","getMotionPoint","__hasAutoLayout","isBranch","getMotionPath","parent","children","__pathForMotion","getPath","addAttr","undefined","point","localTransform","motionRotation","isNumber","__updateMotionPath","resized","child","__extraUpdate"],"mappings":"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"}
1
+ {"version":3,"file":"motion-path.esm.min.js","sources":["../../../../../../src/in/packages/motion-path/src/HighBezierHelper.ts","../../../../../../src/in/packages/motion-path/src/HighCurveHelper.ts","../../../../../../src/in/packages/motion-path/src/decorator.ts","../../../../../../src/in/packages/motion-path/src/index.ts"],"sourcesContent":["import { IPathCommandData } from '@leafer-ui/interface'\nimport { BezierHelper, OneRadian, PathCommandMap } from '@leafer-ui/draw'\n\n\n// 高斯-勒让德积分节点和权重\nconst gaussNodes = [0.1488743389, 0.4333953941, 0.6794095682, 0.8650633666, 0.9739065285]\nconst gaussWeights = [0.2955242247, 0.2692667193, 0.2190863625, 0.1494513491, 0.0666713443]\n\nconst { sqrt } = Math\nconst { getDerivative } = BezierHelper\n\nexport const HighBezierHelper = {\n\n getDistance(fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number, t = 1): number {\n let distance = 0, t1: number, t2: number, d1X: number, d1Y: number, d2X: number, d2Y: number, half = t / 2\n for (let i = 0; i < gaussNodes.length; i++) {\n t1 = half * (1 + gaussNodes[i])\n t2 = half * (1 - gaussNodes[i])\n\n d1X = getDerivative(t1, fromX, x1, x2, toX)\n d1Y = getDerivative(t1, fromY, y1, y2, toY)\n\n d2X = getDerivative(t2, fromX, x1, x2, toX)\n d2Y = getDerivative(t2, fromY, y1, y2, toY)\n\n distance += gaussWeights[i] * (sqrt(d1X * d1X + d1Y * d1Y) + sqrt(d2X * d2X + d2Y * d2Y))\n }\n return distance * half\n },\n\n getRotation(t: number, fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number): number { // 切线角度\n const dx = getDerivative(t, fromX, x1, x2, toX)\n const dy = getDerivative(t, fromY, y1, y2, toY)\n return Math.atan2(dy, dx) / OneRadian\n },\n\n getT(distance: number, totalDistance: number, fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number, precision = 1): number { // 弧长反解 t\n let low = 0, high = 1, middle = distance / totalDistance, realPrecision = precision / totalDistance / 3\n\n if (middle >= 1) return 1\n if (middle <= 0) return 0\n\n while (high - low > realPrecision) { // 2分法快速对比\n getDistance(fromX, fromY, x1, y1, x2, y2, toX, toY, middle) < distance ? low = middle : high = middle\n middle = (low + high) / 2\n }\n\n return middle\n },\n\n cut(data: IPathCommandData, t: number, fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number) {\n const o = 1 - t\n const ax = o * fromX + t * x1, ay = o * fromY + t * y1\n const mbx = o * x1 + t * x2, mby = o * y1 + t * y2\n const mcx = o * x2 + t * toX, mcy = o * y2 + t * toY\n\n const bx = o * ax + t * mbx, by = o * ay + t * mby\n const mbcx = o * mbx + t * mcx, mbcy = o * mby + t * mcy\n\n const cx = o * bx + t * mbcx, cy = o * by + t * mbcy\n data.push(PathCommandMap.C, ax, ay, bx, by, cx, cy)\n }\n\n}\n\nconst { getDistance } = HighBezierHelper","import { IMatrixData, IPathCommandData, IMotionPathData, IRotationPointData, IPointData, IUnitData } from '@leafer-ui/interface'\nimport { BezierHelper, MatrixHelper, MathHelper, PathCommandMap, PointHelper, UnitConvert } from '@leafer-ui/draw'\n\nimport { HighBezierHelper } from './HighBezierHelper'\n\n\nconst { M, L, C, Z } = PathCommandMap, { float } = MathHelper\nconst tempPoint = {} as IPointData, tempFrom = {} as IPointData\n\nexport const HighCurveHelper = {\n\n transform(data: IPathCommandData, matrix: IMatrixData): void {\n let i: number = 0, command: number\n\n const len = data.length\n while (i < len) {\n command = data[i]\n switch (command) {\n case M: //moveto(x, y)\n case L: //lineto(x, y)\n HighCurveHelper.transformPoints(data, matrix, i, 1)\n i += 3\n break\n case C: //bezierCurveTo(x1, y1, x2, y2, x,y)\n HighCurveHelper.transformPoints(data, matrix, i, 3)\n i += 7\n break\n case Z: //closepath()\n i += 1\n }\n }\n },\n\n transformPoints(data: IPathCommandData, matrix: IMatrixData, start: number, pointCount: number): void {\n for (let i = start + 1, end = i + pointCount * 2; i < end; i += 2) {\n tempPoint.x = data[i]\n tempPoint.y = data[i + 1]\n MatrixHelper.toOuterPoint(matrix, tempPoint)\n data[i] = tempPoint.x\n data[i + 1] = tempPoint.y\n }\n },\n\n getMotionPathData(data: IPathCommandData): IMotionPathData {\n let total = 0, distance: number, segments: number[] = []\n let i = 0, x = 0, y = 0, toX: number, toY: number, command: number\n\n const len = data.length\n while (i < len) {\n command = data[i]\n switch (command) {\n case M: //moveto(x, y)\n case L: //lineto(x, y)\n toX = data[i + 1]\n toY = data[i + 2]\n distance = (command === L && i > 0) ? PointHelper.getDistanceFrom(x, y, toX, toY) : 0\n x = toX\n y = toY\n i += 3\n break\n case C: //bezierCurveTo(x1, y1, x2, y2, x,y)\n toX = data[i + 5]\n toY = data[i + 6]\n distance = HighBezierHelper.getDistance(x, y, data[i + 1], data[i + 2], data[i + 3], data[i + 4], toX, toY)\n x = toX\n y = toY\n i += 7\n break\n case Z: //closepath()\n i += 1\n default:\n distance = 0\n\n }\n\n segments.push(distance)\n total += distance\n }\n\n return { total, segments, data }\n\n },\n\n\n getDistancePoint(distanceData: IMotionPathData, motionDistance: number | IUnitData, motionPrecision?: number): IRotationPointData {\n const { segments, data } = distanceData\n motionDistance = UnitConvert.number(motionDistance, distanceData.total)\n\n let total = 0, distance: number, to = {} as IRotationPointData\n let i = 0, index = 0, x: number = 0, y: number = 0, toX: number, toY: number, command: number\n let x1: number, y1: number, x2: number, y2: number, t: number\n\n const len = data.length\n while (i < len) {\n command = data[i]\n switch (command) {\n case M: //moveto(x, y)\n case L: //lineto(x, y)\n toX = data[i + 1]\n toY = data[i + 2]\n distance = segments[index]\n\n if (total + distance >= motionDistance || !distanceData.total) {\n if (!i) x = toX, y = toY // first M\n tempFrom.x = x\n tempFrom.y = y\n to.x = toX\n to.y = toY\n PointHelper.getDistancePoint(tempFrom, to, motionDistance - total, true)\n to.rotation = PointHelper.getAngle(tempFrom, to)\n return to\n }\n\n x = toX\n y = toY\n i += 3\n break\n case C: //bezierCurveTo(x1, y1, x2, y2, x,y)\n toX = data[i + 5]\n toY = data[i + 6]\n distance = segments[index]\n\n if (total + distance >= motionDistance) {\n x1 = data[i + 1], y1 = data[i + 2], x2 = data[i + 3], y2 = data[i + 4]\n t = HighBezierHelper.getT(motionDistance - total, distance, x, y, x1, y1, x2, y2, toX, toY, motionPrecision)\n BezierHelper.getPointAndSet(t, x, y, x1, y1, x2, y2, toX, toY, to)\n to.rotation = HighBezierHelper.getRotation(t, x, y, x1, y1, x2, y2, toX, toY)\n return to\n }\n\n x = toX\n y = toY\n i += 7\n break\n case Z: //closepath()\n i += 1\n default:\n distance = 0\n }\n\n index++\n total += distance\n }\n\n return to\n },\n\n getDistancePath(distanceData: IMotionPathData, motionDistance: number | IUnitData, motionPrecision?: number): IPathCommandData {\n const { segments, data } = distanceData, path: IPathCommandData = []\n motionDistance = UnitConvert.number(motionDistance, distanceData.total)\n\n let total = 0, distance: number, cutDistance: number, to = {} as IRotationPointData\n let i = 0, index = 0, x: number = 0, y: number = 0, toX: number, toY: number, command: number\n let x1: number, y1: number, x2: number, y2: number, t: number\n\n const len = data.length\n while (i < len) {\n command = data[i]\n switch (command) {\n case M: //moveto(x, y)\n case L: //lineto(x, y)\n toX = data[i + 1]\n toY = data[i + 2]\n distance = segments[index]\n\n if (total + distance > motionDistance || !distanceData.total) {\n if (!i) x = toX, y = toY // first M\n tempFrom.x = x\n tempFrom.y = y\n to.x = toX\n to.y = toY\n cutDistance = float(motionDistance - total)\n if (cutDistance) {\n PointHelper.getDistancePoint(tempFrom, to, cutDistance, true)\n path.push(command, to.x, to.y)\n }\n return path\n }\n\n x = toX\n y = toY\n i += 3\n path.push(command, x, y)\n break\n case C: //bezierCurveTo(x1, y1, x2, y2, x,y)\n x1 = data[i + 1], y1 = data[i + 2], x2 = data[i + 3], y2 = data[i + 4]\n toX = data[i + 5]\n toY = data[i + 6]\n distance = segments[index]\n\n if (total + distance > motionDistance) {\n cutDistance = float(motionDistance - total)\n if (cutDistance) {\n t = HighBezierHelper.getT(cutDistance, distance, x, y, x1, y1, x2, y2, toX, toY, motionPrecision)\n HighBezierHelper.cut(path, t, x, y, x1, y1, x2, y2, toX, toY)\n }\n return path\n }\n\n x = toX\n y = toY\n i += 7\n path.push(command, x1, y1, x2, y2, toX, toY)\n break\n case Z: //closepath()\n i += 1\n path.push(command)\n default:\n distance = 0\n\n }\n\n index++\n total += distance\n }\n\n return path\n }\n\n}","import { IValue } from '@leafer-ui/interface'\nimport { decorateLeafAttr, attr, isNull } from '@leafer-ui/draw'\n\nexport function motionPathType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: any) {\n this.__setAttr(key, value)\n this.__hasMotionPath = (this.motionPath || !isNull(this.motion)) as boolean\n this.__layout.matrixChanged || this.__layout.matrixChange()\n }\n }))\n}","export { HighCurveHelper } from './HighCurveHelper'\nexport { HighBezierHelper } from './HighBezierHelper'\nexport { motionPathType } from './decorator'\n\nimport { IMotionPathData, IUI, IUnitData, IRotationPointData, IPercentData } from '@leafer-ui/interface'\nimport { isNull, MatrixHelper, LeafHelper, BranchHelper, Transition, UI, UnitConvert, Plugin, isObject, isNumber } from '@leafer-ui/draw'\n\nimport { HighCurveHelper } from './HighCurveHelper'\nimport { motionPathType } from './decorator'\n\n\nPlugin.add('motion-path')\n\n\nTransition.register('motion', function (from: number | IPercentData, to: number | IPercentData, t: number, target: IUI): number {\n if (isObject(from)) from = UnitConvert.number(from, target.getMotionTotal())\n if (isObject(to)) to = UnitConvert.number(to, target.getMotionTotal())\n return Transition.number(from || 0, to || 0, t)\n})\n\nTransition.register('motionRotation', function (from: any, to: any, t: number): number {\n return Transition.number(from, to, t)\n})\n\n\nconst ui = UI.prototype\nconst { updateMatrix, updateAllMatrix } = LeafHelper\nconst { updateBounds } = BranchHelper\n\n\n// addAttr\nUI.addAttr('motionPath', undefined, motionPathType)\nUI.addAttr('motionPrecision', 1, motionPathType)\n\nUI.addAttr('motion', undefined, motionPathType)\nUI.addAttr('motionRotation', true, motionPathType)\n\n\nui.getMotionPathData = function (): IMotionPathData {\n return getMotionPathData(getMotionPath(this))\n}\n\nui.getMotionPoint = function (motionDistance: number | IUnitData): IRotationPointData {\n const path = getMotionPath(this)\n const data = getMotionPathData(path)\n if (!data.total) return {} as IRotationPointData\n\n const point = HighCurveHelper.getDistancePoint(data, motionDistance, path.motionPrecision)\n MatrixHelper.toOuterPoint(path.localTransform, point)\n\n const { motionRotation } = this\n if (motionRotation === false) delete point.rotation\n else if (isNumber(motionRotation)) point.rotation += motionRotation\n return point\n}\n\nui.getMotionTotal = function (): number {\n return this.getMotionPathData().total\n}\n\nui.__updateMotionPath = function (): void {\n const data = this.__\n if (this.__layout.resized && data.__pathForMotion) data.__pathForMotion = undefined\n\n if (this.motionPath) {\n let child: IUI\n const { children } = this.parent\n for (let i = 0; i < children.length; i++) {\n child = children[i]\n if (!isNull(child.motion) && !child.__layout.matrixChanged) {\n if (child !== this) child.__extraUpdate()\n updateMotion(child)\n }\n }\n } else updateMotion(this)\n}\n\n\nfunction updateMotion(leaf: IUI): void {\n const { motion, leaferIsCreated } = leaf\n if (isNull(motion)) return\n\n if (leaferIsCreated) leaf.leafer.created = false // 拦截布局更新通知,进行手动更新布局\n\n if (leaf.motionPath) {\n\n const data = getMotionPathData(leaf)\n if (data.total) leaf.__.__pathForRender = HighCurveHelper.getDistancePath(data, motion, leaf.motionPrecision) // 生长路径\n\n } else {\n\n leaf.set(leaf.getMotionPoint(motion)) // 动画路径\n\n if (!leaf.__hasAutoLayout) { // 手动更新布局\n if (leaf.isBranch) updateAllMatrix(leaf), updateBounds(leaf, leaf)\n else updateMatrix(leaf)\n }\n\n }\n\n if (leaferIsCreated) leaf.leafer.created = true\n}\n\nfunction getMotionPath(leaf: IUI): IUI {\n const { parent } = leaf\n if (!leaf.motionPath && parent) {\n const { children } = parent\n for (let i = 0; i < children.length; i++) {\n if (children[i].motionPath) return children[i]\n }\n }\n return leaf\n}\n\nfunction getMotionPathData(leaf: IUI): IMotionPathData {\n const data = leaf.__\n if (data.__pathForMotion) return data.__pathForMotion\n return data.__pathForMotion = HighCurveHelper.getMotionPathData(leaf.getPath(true, true))\n}"],"names":["gaussNodes","gaussWeights","sqrt","Math","getDerivative","BezierHelper","HighBezierHelper","getDistance","fromX","fromY","x1","y1","x2","y2","toX","toY","t","t1","t2","d1X","d1Y","d2X","d2Y","distance","half","i","length","getRotation","dx","dy","atan2","OneRadian","getT","totalDistance","precision","low","high","middle","realPrecision","cut","data","o","ax","ay","mbx","mby","bx","by","cx","cy","push","PathCommandMap","C","M","L","Z","float","MathHelper","tempPoint","tempFrom","HighCurveHelper","transform","matrix","command","len","transformPoints","start","pointCount","end","x","y","MatrixHelper","toOuterPoint","getMotionPathData","total","segments","PointHelper","getDistanceFrom","getDistancePoint","distanceData","motionDistance","motionPrecision","UnitConvert","number","to","index","rotation","getAngle","getPointAndSet","getDistancePath","path","cutDistance","motionPathType","defaultValue","decorateLeafAttr","key","attr","set","value","this","__setAttr","__hasMotionPath","motionPath","isNull","motion","__layout","matrixChanged","matrixChange","Plugin","add","Transition","register","from","target","isObject","getMotionTotal","ui","UI","prototype","updateMatrix","updateAllMatrix","LeafHelper","updateBounds","BranchHelper","updateMotion","leaf","leaferIsCreated","leafer","created","__","__pathForRender","getMotionPoint","__hasAutoLayout","isBranch","getMotionPath","parent","children","__pathForMotion","getPath","addAttr","undefined","point","localTransform","motionRotation","isNumber","__updateMotionPath","resized","child","__extraUpdate"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"motion-path.min.cjs","sources":["../../../../../../src/in/packages/motion-path/src/HighBezierHelper.ts","../../../../../../src/in/packages/motion-path/src/HighCurveHelper.ts","../../../../../../src/in/packages/motion-path/src/decorator.ts","../../../../../../src/in/packages/motion-path/src/index.ts"],"sourcesContent":["import { IPathCommandData } from '@leafer-ui/interface'\nimport { BezierHelper, OneRadian, PathCommandMap } from '@leafer-ui/draw'\n\n\n// 高斯-勒让德积分节点和权重\nconst gaussNodes = [0.1488743389, 0.4333953941, 0.6794095682, 0.8650633666, 0.9739065285]\nconst gaussWeights = [0.2955242247, 0.2692667193, 0.2190863625, 0.1494513491, 0.0666713443]\n\nconst { sqrt } = Math\nconst { getDerivative } = BezierHelper\n\nexport const HighBezierHelper = {\n\n getDistance(fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number, t = 1): number {\n let distance = 0, t1: number, t2: number, d1X: number, d1Y: number, d2X: number, d2Y: number, half = t / 2\n for (let i = 0; i < gaussNodes.length; i++) {\n t1 = half * (1 + gaussNodes[i])\n t2 = half * (1 - gaussNodes[i])\n\n d1X = getDerivative(t1, fromX, x1, x2, toX)\n d1Y = getDerivative(t1, fromY, y1, y2, toY)\n\n d2X = getDerivative(t2, fromX, x1, x2, toX)\n d2Y = getDerivative(t2, fromY, y1, y2, toY)\n\n distance += gaussWeights[i] * (sqrt(d1X * d1X + d1Y * d1Y) + sqrt(d2X * d2X + d2Y * d2Y))\n }\n return distance * half\n },\n\n getRotation(t: number, fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number): number { // 切线角度\n const dx = getDerivative(t, fromX, x1, x2, toX)\n const dy = getDerivative(t, fromY, y1, y2, toY)\n return Math.atan2(dy, dx) / OneRadian\n },\n\n getT(distance: number, totalDistance: number, fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number, precision = 1): number { // 弧长反解 t\n let low = 0, high = 1, middle = distance / totalDistance, realPrecision = precision / totalDistance / 3\n\n if (middle >= 1) return 1\n if (middle <= 0) return 0\n\n while (high - low > realPrecision) { // 2分法快速对比\n getDistance(fromX, fromY, x1, y1, x2, y2, toX, toY, middle) < distance ? low = middle : high = middle\n middle = (low + high) / 2\n }\n\n return middle\n },\n\n cut(data: IPathCommandData, t: number, fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number) {\n const o = 1 - t\n const ax = o * fromX + t * x1, ay = o * fromY + t * y1\n const mbx = o * x1 + t * x2, mby = o * y1 + t * y2\n const mcx = o * x2 + t * toX, mcy = o * y2 + t * toY\n\n const bx = o * ax + t * mbx, by = o * ay + t * mby\n const mbcx = o * mbx + t * mcx, mbcy = o * mby + t * mcy\n\n const cx = o * bx + t * mbcx, cy = o * by + t * mbcy\n data.push(PathCommandMap.C, ax, ay, bx, by, cx, cy)\n }\n\n}\n\nconst { getDistance } = HighBezierHelper","import { IMatrixData, IPathCommandData, IMotionPathData, IRotationPointData, IPointData, IUnitData } from '@leafer-ui/interface'\nimport { BezierHelper, MatrixHelper, MathHelper, PathCommandMap, PointHelper, UnitConvert } from '@leafer-ui/draw'\n\nimport { HighBezierHelper } from './HighBezierHelper'\n\n\nconst { M, L, C, Z } = PathCommandMap, { float } = MathHelper\nconst tempPoint = {} as IPointData, tempFrom = {} as IPointData\n\nexport const HighCurveHelper = {\n\n transform(data: IPathCommandData, matrix: IMatrixData): void {\n let i: number = 0, command: number\n\n const len = data.length\n while (i < len) {\n command = data[i]\n switch (command) {\n case M: //moveto(x, y)\n case L: //lineto(x, y)\n HighCurveHelper.transformPoints(data, matrix, i, 1)\n i += 3\n break\n case C: //bezierCurveTo(x1, y1, x2, y2, x,y)\n HighCurveHelper.transformPoints(data, matrix, i, 3)\n i += 7\n break\n case Z: //closepath()\n i += 1\n }\n }\n },\n\n transformPoints(data: IPathCommandData, matrix: IMatrixData, start: number, pointCount: number): void {\n for (let i = start + 1, end = i + pointCount * 2; i < end; i += 2) {\n tempPoint.x = data[i]\n tempPoint.y = data[i + 1]\n MatrixHelper.toOuterPoint(matrix, tempPoint)\n data[i] = tempPoint.x\n data[i + 1] = tempPoint.y\n }\n },\n\n getMotionPathData(data: IPathCommandData): IMotionPathData {\n let total = 0, distance: number, segments: number[] = []\n let i = 0, x = 0, y = 0, toX: number, toY: number, command: number\n\n const len = data.length\n while (i < len) {\n command = data[i]\n switch (command) {\n case M: //moveto(x, y)\n case L: //lineto(x, y)\n toX = data[i + 1]\n toY = data[i + 2]\n distance = (command === L && i > 0) ? PointHelper.getDistanceFrom(x, y, toX, toY) : 0\n x = toX\n y = toY\n i += 3\n break\n case C: //bezierCurveTo(x1, y1, x2, y2, x,y)\n toX = data[i + 5]\n toY = data[i + 6]\n distance = HighBezierHelper.getDistance(x, y, data[i + 1], data[i + 2], data[i + 3], data[i + 4], toX, toY)\n x = toX\n y = toY\n i += 7\n break\n case Z: //closepath()\n i += 1\n default:\n distance = 0\n\n }\n\n segments.push(distance)\n total += distance\n }\n\n return { total, segments, data }\n\n },\n\n\n getDistancePoint(distanceData: IMotionPathData, motionDistance: number | IUnitData, motionPrecision?: number): IRotationPointData {\n const { segments, data } = distanceData\n motionDistance = UnitConvert.number(motionDistance, distanceData.total)\n\n let total = 0, distance: number, to = {} as IRotationPointData\n let i = 0, index = 0, x: number = 0, y: number = 0, toX: number, toY: number, command: number\n let x1: number, y1: number, x2: number, y2: number, t: number\n\n const len = data.length\n while (i < len) {\n command = data[i]\n switch (command) {\n case M: //moveto(x, y)\n case L: //lineto(x, y)\n toX = data[i + 1]\n toY = data[i + 2]\n distance = segments[index]\n\n if (total + distance >= motionDistance || !distanceData.total) {\n if (!i) x = toX, y = toY // first M\n tempFrom.x = x\n tempFrom.y = y\n to.x = toX\n to.y = toY\n PointHelper.getDistancePoint(tempFrom, to, motionDistance - total, true)\n to.rotation = PointHelper.getAngle(tempFrom, to)\n return to\n }\n\n x = toX\n y = toY\n i += 3\n break\n case C: //bezierCurveTo(x1, y1, x2, y2, x,y)\n toX = data[i + 5]\n toY = data[i + 6]\n distance = segments[index]\n\n if (total + distance >= motionDistance) {\n x1 = data[i + 1], y1 = data[i + 2], x2 = data[i + 3], y2 = data[i + 4]\n t = HighBezierHelper.getT(motionDistance - total, distance, x, y, x1, y1, x2, y2, toX, toY, motionPrecision)\n BezierHelper.getPointAndSet(t, x, y, x1, y1, x2, y2, toX, toY, to)\n to.rotation = HighBezierHelper.getRotation(t, x, y, x1, y1, x2, y2, toX, toY)\n return to\n }\n\n x = toX\n y = toY\n i += 7\n break\n case Z: //closepath()\n i += 1\n default:\n distance = 0\n }\n\n index++\n total += distance\n }\n\n return to\n },\n\n getDistancePath(distanceData: IMotionPathData, motionDistance: number | IUnitData, motionPrecision?: number): IPathCommandData {\n const { segments, data } = distanceData, path: IPathCommandData = []\n motionDistance = UnitConvert.number(motionDistance, distanceData.total)\n\n let total = 0, distance: number, cutDistance: number, to = {} as IRotationPointData\n let i = 0, index = 0, x: number = 0, y: number = 0, toX: number, toY: number, command: number\n let x1: number, y1: number, x2: number, y2: number, t: number\n\n const len = data.length\n while (i < len) {\n command = data[i]\n switch (command) {\n case M: //moveto(x, y)\n case L: //lineto(x, y)\n toX = data[i + 1]\n toY = data[i + 2]\n distance = segments[index]\n\n if (total + distance > motionDistance || !distanceData.total) {\n if (!i) x = toX, y = toY // first M\n tempFrom.x = x\n tempFrom.y = y\n to.x = toX\n to.y = toY\n cutDistance = float(motionDistance - total)\n if (cutDistance) {\n PointHelper.getDistancePoint(tempFrom, to, cutDistance, true)\n path.push(command, to.x, to.y)\n }\n return path\n }\n\n x = toX\n y = toY\n i += 3\n path.push(command, x, y)\n break\n case C: //bezierCurveTo(x1, y1, x2, y2, x,y)\n x1 = data[i + 1], y1 = data[i + 2], x2 = data[i + 3], y2 = data[i + 4]\n toX = data[i + 5]\n toY = data[i + 6]\n distance = segments[index]\n\n if (total + distance > motionDistance) {\n cutDistance = float(motionDistance - total)\n if (cutDistance) {\n t = HighBezierHelper.getT(cutDistance, distance, x, y, x1, y1, x2, y2, toX, toY, motionPrecision)\n HighBezierHelper.cut(path, t, x, y, x1, y1, x2, y2, toX, toY)\n }\n return path\n }\n\n x = toX\n y = toY\n i += 7\n path.push(command, x1, y1, x2, y2, toX, toY)\n break\n case Z: //closepath()\n i += 1\n path.push(command)\n default:\n distance = 0\n\n }\n\n index++\n total += distance\n }\n\n return path\n }\n\n}","import { IValue } from '@leafer-ui/interface'\nimport { decorateLeafAttr, attr, isNull } from '@leafer-ui/draw'\n\nexport function motionPathType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: any) {\n this.__setAttr(key, value)\n this.__hasMotionPath = this.motionPath || !isNull(this.motion)\n this.__layout.matrixChanged || this.__layout.matrixChange()\n }\n }))\n}","export { HighCurveHelper } from './HighCurveHelper'\nexport { HighBezierHelper } from './HighBezierHelper'\nexport { motionPathType } from './decorator'\n\nimport { IMotionPathData, IUI, IUnitData, IRotationPointData, IPercentData } from '@leafer-ui/interface'\nimport { isNull, MatrixHelper, LeafHelper, BranchHelper, Transition, UI, UnitConvert, Plugin, isObject, isNumber } from '@leafer-ui/draw'\n\nimport { HighCurveHelper } from './HighCurveHelper'\nimport { motionPathType } from './decorator'\n\n\nPlugin.add('motion-path')\n\n\nTransition.register('motion', function (from: number | IPercentData, to: number | IPercentData, t: number, target: IUI): number {\n if (isObject(from)) from = UnitConvert.number(from, target.getMotionTotal())\n if (isObject(to)) to = UnitConvert.number(to, target.getMotionTotal())\n return Transition.number(from || 0, to || 0, t)\n})\n\nTransition.register('motionRotation', function (from: any, to: any, t: number): number {\n return Transition.number(from, to, t)\n})\n\n\nconst ui = UI.prototype\nconst { updateMatrix, updateAllMatrix } = LeafHelper\nconst { updateBounds } = BranchHelper\n\n\n// addAttr\nUI.addAttr('motionPath', undefined, motionPathType)\nUI.addAttr('motionPrecision', 1, motionPathType)\n\nUI.addAttr('motion', undefined, motionPathType)\nUI.addAttr('motionRotation', true, motionPathType)\n\n\nui.getMotionPathData = function (): IMotionPathData {\n return getMotionPathData(getMotionPath(this))\n}\n\nui.getMotionPoint = function (motionDistance: number | IUnitData): IRotationPointData {\n const path = getMotionPath(this)\n const data = getMotionPathData(path)\n if (!data.total) return {} as IRotationPointData\n\n const point = HighCurveHelper.getDistancePoint(data, motionDistance, path.motionPrecision)\n MatrixHelper.toOuterPoint(path.localTransform, point)\n\n const { motionRotation } = this\n if (motionRotation === false) delete point.rotation\n else if (isNumber(motionRotation)) point.rotation += motionRotation\n return point\n}\n\nui.getMotionTotal = function (): number {\n return this.getMotionPathData().total\n}\n\nui.__updateMotionPath = function (): void {\n const data = this.__\n if (this.__layout.resized && data.__pathForMotion) data.__pathForMotion = undefined\n\n if (this.motionPath) {\n let child: IUI\n const { children } = this.parent\n for (let i = 0; i < children.length; i++) {\n child = children[i]\n if (!isNull(child.motion) && !child.__layout.matrixChanged) {\n if (child !== this) child.__extraUpdate()\n updateMotion(child)\n }\n }\n } else updateMotion(this)\n}\n\n\nfunction updateMotion(leaf: IUI): void {\n const { motion, leaferIsCreated } = leaf\n if (isNull(motion)) return\n\n if (leaferIsCreated) leaf.leafer.created = false // 拦截布局更新通知,进行手动更新布局\n\n if (leaf.motionPath) {\n\n const data = getMotionPathData(leaf)\n if (data.total) leaf.__.__pathForRender = HighCurveHelper.getDistancePath(data, motion, leaf.motionPrecision) // 生长路径\n\n } else {\n\n leaf.set(leaf.getMotionPoint(motion)) // 动画路径\n\n if (!leaf.__hasAutoLayout) { // 手动更新布局\n if (leaf.isBranch) updateAllMatrix(leaf), updateBounds(leaf, leaf)\n else updateMatrix(leaf)\n }\n\n }\n\n if (leaferIsCreated) leaf.leafer.created = true\n}\n\nfunction getMotionPath(leaf: IUI): IUI {\n const { parent } = leaf\n if (!leaf.motionPath && parent) {\n const { children } = parent\n for (let i = 0; i < children.length; i++) {\n if (children[i].motionPath) return children[i]\n }\n }\n return leaf\n}\n\nfunction getMotionPathData(leaf: IUI): IMotionPathData {\n const data = leaf.__\n if (data.__pathForMotion) return data.__pathForMotion\n return data.__pathForMotion = HighCurveHelper.getMotionPathData(leaf.getPath(true, true))\n}"],"names":["gaussNodes","gaussWeights","sqrt","Math","getDerivative","BezierHelper","HighBezierHelper","getDistance","fromX","fromY","x1","y1","x2","y2","toX","toY","t","t1","t2","d1X","d1Y","d2X","d2Y","distance","half","i","length","getRotation","dx","dy","atan2","OneRadian","getT","totalDistance","precision","low","high","middle","realPrecision","cut","data","o","ax","ay","mbx","mby","bx","by","cx","cy","push","PathCommandMap","C","M","L","Z","float","MathHelper","tempPoint","tempFrom","HighCurveHelper","transform","matrix","command","len","transformPoints","start","pointCount","end","x","y","MatrixHelper","toOuterPoint","getMotionPathData","total","segments","PointHelper","getDistanceFrom","getDistancePoint","distanceData","motionDistance","motionPrecision","UnitConvert","number","to","index","rotation","getAngle","getPointAndSet","getDistancePath","path","cutDistance","motionPathType","defaultValue","decorateLeafAttr","key","attr","set","value","this","__setAttr","__hasMotionPath","motionPath","isNull","motion","__layout","matrixChanged","matrixChange","Plugin","add","Transition","register","from","target","isObject","getMotionTotal","ui","UI","prototype","updateMatrix","updateAllMatrix","LeafHelper","updateBounds","BranchHelper","updateMotion","leaf","leaferIsCreated","leafer","created","__","__pathForRender","getMotionPoint","__hasAutoLayout","isBranch","getMotionPath","parent","children","__pathForMotion","getPath","addAttr","undefined","point","localTransform","motionRotation","isNumber","__updateMotionPath","resized","child","__extraUpdate"],"mappings":"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"}
1
+ {"version":3,"file":"motion-path.min.cjs","sources":["../../../../../../src/in/packages/motion-path/src/HighBezierHelper.ts","../../../../../../src/in/packages/motion-path/src/HighCurveHelper.ts","../../../../../../src/in/packages/motion-path/src/decorator.ts","../../../../../../src/in/packages/motion-path/src/index.ts"],"sourcesContent":["import { IPathCommandData } from '@leafer-ui/interface'\nimport { BezierHelper, OneRadian, PathCommandMap } from '@leafer-ui/draw'\n\n\n// 高斯-勒让德积分节点和权重\nconst gaussNodes = [0.1488743389, 0.4333953941, 0.6794095682, 0.8650633666, 0.9739065285]\nconst gaussWeights = [0.2955242247, 0.2692667193, 0.2190863625, 0.1494513491, 0.0666713443]\n\nconst { sqrt } = Math\nconst { getDerivative } = BezierHelper\n\nexport const HighBezierHelper = {\n\n getDistance(fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number, t = 1): number {\n let distance = 0, t1: number, t2: number, d1X: number, d1Y: number, d2X: number, d2Y: number, half = t / 2\n for (let i = 0; i < gaussNodes.length; i++) {\n t1 = half * (1 + gaussNodes[i])\n t2 = half * (1 - gaussNodes[i])\n\n d1X = getDerivative(t1, fromX, x1, x2, toX)\n d1Y = getDerivative(t1, fromY, y1, y2, toY)\n\n d2X = getDerivative(t2, fromX, x1, x2, toX)\n d2Y = getDerivative(t2, fromY, y1, y2, toY)\n\n distance += gaussWeights[i] * (sqrt(d1X * d1X + d1Y * d1Y) + sqrt(d2X * d2X + d2Y * d2Y))\n }\n return distance * half\n },\n\n getRotation(t: number, fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number): number { // 切线角度\n const dx = getDerivative(t, fromX, x1, x2, toX)\n const dy = getDerivative(t, fromY, y1, y2, toY)\n return Math.atan2(dy, dx) / OneRadian\n },\n\n getT(distance: number, totalDistance: number, fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number, precision = 1): number { // 弧长反解 t\n let low = 0, high = 1, middle = distance / totalDistance, realPrecision = precision / totalDistance / 3\n\n if (middle >= 1) return 1\n if (middle <= 0) return 0\n\n while (high - low > realPrecision) { // 2分法快速对比\n getDistance(fromX, fromY, x1, y1, x2, y2, toX, toY, middle) < distance ? low = middle : high = middle\n middle = (low + high) / 2\n }\n\n return middle\n },\n\n cut(data: IPathCommandData, t: number, fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number) {\n const o = 1 - t\n const ax = o * fromX + t * x1, ay = o * fromY + t * y1\n const mbx = o * x1 + t * x2, mby = o * y1 + t * y2\n const mcx = o * x2 + t * toX, mcy = o * y2 + t * toY\n\n const bx = o * ax + t * mbx, by = o * ay + t * mby\n const mbcx = o * mbx + t * mcx, mbcy = o * mby + t * mcy\n\n const cx = o * bx + t * mbcx, cy = o * by + t * mbcy\n data.push(PathCommandMap.C, ax, ay, bx, by, cx, cy)\n }\n\n}\n\nconst { getDistance } = HighBezierHelper","import { IMatrixData, IPathCommandData, IMotionPathData, IRotationPointData, IPointData, IUnitData } from '@leafer-ui/interface'\nimport { BezierHelper, MatrixHelper, MathHelper, PathCommandMap, PointHelper, UnitConvert } from '@leafer-ui/draw'\n\nimport { HighBezierHelper } from './HighBezierHelper'\n\n\nconst { M, L, C, Z } = PathCommandMap, { float } = MathHelper\nconst tempPoint = {} as IPointData, tempFrom = {} as IPointData\n\nexport const HighCurveHelper = {\n\n transform(data: IPathCommandData, matrix: IMatrixData): void {\n let i: number = 0, command: number\n\n const len = data.length\n while (i < len) {\n command = data[i]\n switch (command) {\n case M: //moveto(x, y)\n case L: //lineto(x, y)\n HighCurveHelper.transformPoints(data, matrix, i, 1)\n i += 3\n break\n case C: //bezierCurveTo(x1, y1, x2, y2, x,y)\n HighCurveHelper.transformPoints(data, matrix, i, 3)\n i += 7\n break\n case Z: //closepath()\n i += 1\n }\n }\n },\n\n transformPoints(data: IPathCommandData, matrix: IMatrixData, start: number, pointCount: number): void {\n for (let i = start + 1, end = i + pointCount * 2; i < end; i += 2) {\n tempPoint.x = data[i]\n tempPoint.y = data[i + 1]\n MatrixHelper.toOuterPoint(matrix, tempPoint)\n data[i] = tempPoint.x\n data[i + 1] = tempPoint.y\n }\n },\n\n getMotionPathData(data: IPathCommandData): IMotionPathData {\n let total = 0, distance: number, segments: number[] = []\n let i = 0, x = 0, y = 0, toX: number, toY: number, command: number\n\n const len = data.length\n while (i < len) {\n command = data[i]\n switch (command) {\n case M: //moveto(x, y)\n case L: //lineto(x, y)\n toX = data[i + 1]\n toY = data[i + 2]\n distance = (command === L && i > 0) ? PointHelper.getDistanceFrom(x, y, toX, toY) : 0\n x = toX\n y = toY\n i += 3\n break\n case C: //bezierCurveTo(x1, y1, x2, y2, x,y)\n toX = data[i + 5]\n toY = data[i + 6]\n distance = HighBezierHelper.getDistance(x, y, data[i + 1], data[i + 2], data[i + 3], data[i + 4], toX, toY)\n x = toX\n y = toY\n i += 7\n break\n case Z: //closepath()\n i += 1\n default:\n distance = 0\n\n }\n\n segments.push(distance)\n total += distance\n }\n\n return { total, segments, data }\n\n },\n\n\n getDistancePoint(distanceData: IMotionPathData, motionDistance: number | IUnitData, motionPrecision?: number): IRotationPointData {\n const { segments, data } = distanceData\n motionDistance = UnitConvert.number(motionDistance, distanceData.total)\n\n let total = 0, distance: number, to = {} as IRotationPointData\n let i = 0, index = 0, x: number = 0, y: number = 0, toX: number, toY: number, command: number\n let x1: number, y1: number, x2: number, y2: number, t: number\n\n const len = data.length\n while (i < len) {\n command = data[i]\n switch (command) {\n case M: //moveto(x, y)\n case L: //lineto(x, y)\n toX = data[i + 1]\n toY = data[i + 2]\n distance = segments[index]\n\n if (total + distance >= motionDistance || !distanceData.total) {\n if (!i) x = toX, y = toY // first M\n tempFrom.x = x\n tempFrom.y = y\n to.x = toX\n to.y = toY\n PointHelper.getDistancePoint(tempFrom, to, motionDistance - total, true)\n to.rotation = PointHelper.getAngle(tempFrom, to)\n return to\n }\n\n x = toX\n y = toY\n i += 3\n break\n case C: //bezierCurveTo(x1, y1, x2, y2, x,y)\n toX = data[i + 5]\n toY = data[i + 6]\n distance = segments[index]\n\n if (total + distance >= motionDistance) {\n x1 = data[i + 1], y1 = data[i + 2], x2 = data[i + 3], y2 = data[i + 4]\n t = HighBezierHelper.getT(motionDistance - total, distance, x, y, x1, y1, x2, y2, toX, toY, motionPrecision)\n BezierHelper.getPointAndSet(t, x, y, x1, y1, x2, y2, toX, toY, to)\n to.rotation = HighBezierHelper.getRotation(t, x, y, x1, y1, x2, y2, toX, toY)\n return to\n }\n\n x = toX\n y = toY\n i += 7\n break\n case Z: //closepath()\n i += 1\n default:\n distance = 0\n }\n\n index++\n total += distance\n }\n\n return to\n },\n\n getDistancePath(distanceData: IMotionPathData, motionDistance: number | IUnitData, motionPrecision?: number): IPathCommandData {\n const { segments, data } = distanceData, path: IPathCommandData = []\n motionDistance = UnitConvert.number(motionDistance, distanceData.total)\n\n let total = 0, distance: number, cutDistance: number, to = {} as IRotationPointData\n let i = 0, index = 0, x: number = 0, y: number = 0, toX: number, toY: number, command: number\n let x1: number, y1: number, x2: number, y2: number, t: number\n\n const len = data.length\n while (i < len) {\n command = data[i]\n switch (command) {\n case M: //moveto(x, y)\n case L: //lineto(x, y)\n toX = data[i + 1]\n toY = data[i + 2]\n distance = segments[index]\n\n if (total + distance > motionDistance || !distanceData.total) {\n if (!i) x = toX, y = toY // first M\n tempFrom.x = x\n tempFrom.y = y\n to.x = toX\n to.y = toY\n cutDistance = float(motionDistance - total)\n if (cutDistance) {\n PointHelper.getDistancePoint(tempFrom, to, cutDistance, true)\n path.push(command, to.x, to.y)\n }\n return path\n }\n\n x = toX\n y = toY\n i += 3\n path.push(command, x, y)\n break\n case C: //bezierCurveTo(x1, y1, x2, y2, x,y)\n x1 = data[i + 1], y1 = data[i + 2], x2 = data[i + 3], y2 = data[i + 4]\n toX = data[i + 5]\n toY = data[i + 6]\n distance = segments[index]\n\n if (total + distance > motionDistance) {\n cutDistance = float(motionDistance - total)\n if (cutDistance) {\n t = HighBezierHelper.getT(cutDistance, distance, x, y, x1, y1, x2, y2, toX, toY, motionPrecision)\n HighBezierHelper.cut(path, t, x, y, x1, y1, x2, y2, toX, toY)\n }\n return path\n }\n\n x = toX\n y = toY\n i += 7\n path.push(command, x1, y1, x2, y2, toX, toY)\n break\n case Z: //closepath()\n i += 1\n path.push(command)\n default:\n distance = 0\n\n }\n\n index++\n total += distance\n }\n\n return path\n }\n\n}","import { IValue } from '@leafer-ui/interface'\nimport { decorateLeafAttr, attr, isNull } from '@leafer-ui/draw'\n\nexport function motionPathType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: any) {\n this.__setAttr(key, value)\n this.__hasMotionPath = (this.motionPath || !isNull(this.motion)) as boolean\n this.__layout.matrixChanged || this.__layout.matrixChange()\n }\n }))\n}","export { HighCurveHelper } from './HighCurveHelper'\nexport { HighBezierHelper } from './HighBezierHelper'\nexport { motionPathType } from './decorator'\n\nimport { IMotionPathData, IUI, IUnitData, IRotationPointData, IPercentData } from '@leafer-ui/interface'\nimport { isNull, MatrixHelper, LeafHelper, BranchHelper, Transition, UI, UnitConvert, Plugin, isObject, isNumber } from '@leafer-ui/draw'\n\nimport { HighCurveHelper } from './HighCurveHelper'\nimport { motionPathType } from './decorator'\n\n\nPlugin.add('motion-path')\n\n\nTransition.register('motion', function (from: number | IPercentData, to: number | IPercentData, t: number, target: IUI): number {\n if (isObject(from)) from = UnitConvert.number(from, target.getMotionTotal())\n if (isObject(to)) to = UnitConvert.number(to, target.getMotionTotal())\n return Transition.number(from || 0, to || 0, t)\n})\n\nTransition.register('motionRotation', function (from: any, to: any, t: number): number {\n return Transition.number(from, to, t)\n})\n\n\nconst ui = UI.prototype\nconst { updateMatrix, updateAllMatrix } = LeafHelper\nconst { updateBounds } = BranchHelper\n\n\n// addAttr\nUI.addAttr('motionPath', undefined, motionPathType)\nUI.addAttr('motionPrecision', 1, motionPathType)\n\nUI.addAttr('motion', undefined, motionPathType)\nUI.addAttr('motionRotation', true, motionPathType)\n\n\nui.getMotionPathData = function (): IMotionPathData {\n return getMotionPathData(getMotionPath(this))\n}\n\nui.getMotionPoint = function (motionDistance: number | IUnitData): IRotationPointData {\n const path = getMotionPath(this)\n const data = getMotionPathData(path)\n if (!data.total) return {} as IRotationPointData\n\n const point = HighCurveHelper.getDistancePoint(data, motionDistance, path.motionPrecision)\n MatrixHelper.toOuterPoint(path.localTransform, point)\n\n const { motionRotation } = this\n if (motionRotation === false) delete point.rotation\n else if (isNumber(motionRotation)) point.rotation += motionRotation\n return point\n}\n\nui.getMotionTotal = function (): number {\n return this.getMotionPathData().total\n}\n\nui.__updateMotionPath = function (): void {\n const data = this.__\n if (this.__layout.resized && data.__pathForMotion) data.__pathForMotion = undefined\n\n if (this.motionPath) {\n let child: IUI\n const { children } = this.parent\n for (let i = 0; i < children.length; i++) {\n child = children[i]\n if (!isNull(child.motion) && !child.__layout.matrixChanged) {\n if (child !== this) child.__extraUpdate()\n updateMotion(child)\n }\n }\n } else updateMotion(this)\n}\n\n\nfunction updateMotion(leaf: IUI): void {\n const { motion, leaferIsCreated } = leaf\n if (isNull(motion)) return\n\n if (leaferIsCreated) leaf.leafer.created = false // 拦截布局更新通知,进行手动更新布局\n\n if (leaf.motionPath) {\n\n const data = getMotionPathData(leaf)\n if (data.total) leaf.__.__pathForRender = HighCurveHelper.getDistancePath(data, motion, leaf.motionPrecision) // 生长路径\n\n } else {\n\n leaf.set(leaf.getMotionPoint(motion)) // 动画路径\n\n if (!leaf.__hasAutoLayout) { // 手动更新布局\n if (leaf.isBranch) updateAllMatrix(leaf), updateBounds(leaf, leaf)\n else updateMatrix(leaf)\n }\n\n }\n\n if (leaferIsCreated) leaf.leafer.created = true\n}\n\nfunction getMotionPath(leaf: IUI): IUI {\n const { parent } = leaf\n if (!leaf.motionPath && parent) {\n const { children } = parent\n for (let i = 0; i < children.length; i++) {\n if (children[i].motionPath) return children[i]\n }\n }\n return leaf\n}\n\nfunction getMotionPathData(leaf: IUI): IMotionPathData {\n const data = leaf.__\n if (data.__pathForMotion) return data.__pathForMotion\n return data.__pathForMotion = HighCurveHelper.getMotionPathData(leaf.getPath(true, true))\n}"],"names":["gaussNodes","gaussWeights","sqrt","Math","getDerivative","BezierHelper","HighBezierHelper","getDistance","fromX","fromY","x1","y1","x2","y2","toX","toY","t","t1","t2","d1X","d1Y","d2X","d2Y","distance","half","i","length","getRotation","dx","dy","atan2","OneRadian","getT","totalDistance","precision","low","high","middle","realPrecision","cut","data","o","ax","ay","mbx","mby","bx","by","cx","cy","push","PathCommandMap","C","M","L","Z","float","MathHelper","tempPoint","tempFrom","HighCurveHelper","transform","matrix","command","len","transformPoints","start","pointCount","end","x","y","MatrixHelper","toOuterPoint","getMotionPathData","total","segments","PointHelper","getDistanceFrom","getDistancePoint","distanceData","motionDistance","motionPrecision","UnitConvert","number","to","index","rotation","getAngle","getPointAndSet","getDistancePath","path","cutDistance","motionPathType","defaultValue","decorateLeafAttr","key","attr","set","value","this","__setAttr","__hasMotionPath","motionPath","isNull","motion","__layout","matrixChanged","matrixChange","Plugin","add","Transition","register","from","target","isObject","getMotionTotal","ui","UI","prototype","updateMatrix","updateAllMatrix","LeafHelper","updateBounds","BranchHelper","updateMotion","leaf","leaferIsCreated","leafer","created","__","__pathForRender","getMotionPoint","__hasAutoLayout","isBranch","getMotionPath","parent","children","__pathForMotion","getPath","addAttr","undefined","point","localTransform","motionRotation","isNumber","__updateMotionPath","resized","child","__extraUpdate"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"motion-path.min.js","sources":["../../../../../../src/in/packages/motion-path/src/HighBezierHelper.ts","../../../../../../src/in/packages/motion-path/src/HighCurveHelper.ts","../../../../../../src/in/packages/motion-path/src/decorator.ts","../../../../../../src/in/packages/motion-path/src/index.ts"],"sourcesContent":["import { IPathCommandData } from '@leafer-ui/interface'\nimport { BezierHelper, OneRadian, PathCommandMap } from '@leafer-ui/draw'\n\n\n// 高斯-勒让德积分节点和权重\nconst gaussNodes = [0.1488743389, 0.4333953941, 0.6794095682, 0.8650633666, 0.9739065285]\nconst gaussWeights = [0.2955242247, 0.2692667193, 0.2190863625, 0.1494513491, 0.0666713443]\n\nconst { sqrt } = Math\nconst { getDerivative } = BezierHelper\n\nexport const HighBezierHelper = {\n\n getDistance(fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number, t = 1): number {\n let distance = 0, t1: number, t2: number, d1X: number, d1Y: number, d2X: number, d2Y: number, half = t / 2\n for (let i = 0; i < gaussNodes.length; i++) {\n t1 = half * (1 + gaussNodes[i])\n t2 = half * (1 - gaussNodes[i])\n\n d1X = getDerivative(t1, fromX, x1, x2, toX)\n d1Y = getDerivative(t1, fromY, y1, y2, toY)\n\n d2X = getDerivative(t2, fromX, x1, x2, toX)\n d2Y = getDerivative(t2, fromY, y1, y2, toY)\n\n distance += gaussWeights[i] * (sqrt(d1X * d1X + d1Y * d1Y) + sqrt(d2X * d2X + d2Y * d2Y))\n }\n return distance * half\n },\n\n getRotation(t: number, fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number): number { // 切线角度\n const dx = getDerivative(t, fromX, x1, x2, toX)\n const dy = getDerivative(t, fromY, y1, y2, toY)\n return Math.atan2(dy, dx) / OneRadian\n },\n\n getT(distance: number, totalDistance: number, fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number, precision = 1): number { // 弧长反解 t\n let low = 0, high = 1, middle = distance / totalDistance, realPrecision = precision / totalDistance / 3\n\n if (middle >= 1) return 1\n if (middle <= 0) return 0\n\n while (high - low > realPrecision) { // 2分法快速对比\n getDistance(fromX, fromY, x1, y1, x2, y2, toX, toY, middle) < distance ? low = middle : high = middle\n middle = (low + high) / 2\n }\n\n return middle\n },\n\n cut(data: IPathCommandData, t: number, fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number) {\n const o = 1 - t\n const ax = o * fromX + t * x1, ay = o * fromY + t * y1\n const mbx = o * x1 + t * x2, mby = o * y1 + t * y2\n const mcx = o * x2 + t * toX, mcy = o * y2 + t * toY\n\n const bx = o * ax + t * mbx, by = o * ay + t * mby\n const mbcx = o * mbx + t * mcx, mbcy = o * mby + t * mcy\n\n const cx = o * bx + t * mbcx, cy = o * by + t * mbcy\n data.push(PathCommandMap.C, ax, ay, bx, by, cx, cy)\n }\n\n}\n\nconst { getDistance } = HighBezierHelper","import { IMatrixData, IPathCommandData, IMotionPathData, IRotationPointData, IPointData, IUnitData } from '@leafer-ui/interface'\nimport { BezierHelper, MatrixHelper, MathHelper, PathCommandMap, PointHelper, UnitConvert } from '@leafer-ui/draw'\n\nimport { HighBezierHelper } from './HighBezierHelper'\n\n\nconst { M, L, C, Z } = PathCommandMap, { float } = MathHelper\nconst tempPoint = {} as IPointData, tempFrom = {} as IPointData\n\nexport const HighCurveHelper = {\n\n transform(data: IPathCommandData, matrix: IMatrixData): void {\n let i: number = 0, command: number\n\n const len = data.length\n while (i < len) {\n command = data[i]\n switch (command) {\n case M: //moveto(x, y)\n case L: //lineto(x, y)\n HighCurveHelper.transformPoints(data, matrix, i, 1)\n i += 3\n break\n case C: //bezierCurveTo(x1, y1, x2, y2, x,y)\n HighCurveHelper.transformPoints(data, matrix, i, 3)\n i += 7\n break\n case Z: //closepath()\n i += 1\n }\n }\n },\n\n transformPoints(data: IPathCommandData, matrix: IMatrixData, start: number, pointCount: number): void {\n for (let i = start + 1, end = i + pointCount * 2; i < end; i += 2) {\n tempPoint.x = data[i]\n tempPoint.y = data[i + 1]\n MatrixHelper.toOuterPoint(matrix, tempPoint)\n data[i] = tempPoint.x\n data[i + 1] = tempPoint.y\n }\n },\n\n getMotionPathData(data: IPathCommandData): IMotionPathData {\n let total = 0, distance: number, segments: number[] = []\n let i = 0, x = 0, y = 0, toX: number, toY: number, command: number\n\n const len = data.length\n while (i < len) {\n command = data[i]\n switch (command) {\n case M: //moveto(x, y)\n case L: //lineto(x, y)\n toX = data[i + 1]\n toY = data[i + 2]\n distance = (command === L && i > 0) ? PointHelper.getDistanceFrom(x, y, toX, toY) : 0\n x = toX\n y = toY\n i += 3\n break\n case C: //bezierCurveTo(x1, y1, x2, y2, x,y)\n toX = data[i + 5]\n toY = data[i + 6]\n distance = HighBezierHelper.getDistance(x, y, data[i + 1], data[i + 2], data[i + 3], data[i + 4], toX, toY)\n x = toX\n y = toY\n i += 7\n break\n case Z: //closepath()\n i += 1\n default:\n distance = 0\n\n }\n\n segments.push(distance)\n total += distance\n }\n\n return { total, segments, data }\n\n },\n\n\n getDistancePoint(distanceData: IMotionPathData, motionDistance: number | IUnitData, motionPrecision?: number): IRotationPointData {\n const { segments, data } = distanceData\n motionDistance = UnitConvert.number(motionDistance, distanceData.total)\n\n let total = 0, distance: number, to = {} as IRotationPointData\n let i = 0, index = 0, x: number = 0, y: number = 0, toX: number, toY: number, command: number\n let x1: number, y1: number, x2: number, y2: number, t: number\n\n const len = data.length\n while (i < len) {\n command = data[i]\n switch (command) {\n case M: //moveto(x, y)\n case L: //lineto(x, y)\n toX = data[i + 1]\n toY = data[i + 2]\n distance = segments[index]\n\n if (total + distance >= motionDistance || !distanceData.total) {\n if (!i) x = toX, y = toY // first M\n tempFrom.x = x\n tempFrom.y = y\n to.x = toX\n to.y = toY\n PointHelper.getDistancePoint(tempFrom, to, motionDistance - total, true)\n to.rotation = PointHelper.getAngle(tempFrom, to)\n return to\n }\n\n x = toX\n y = toY\n i += 3\n break\n case C: //bezierCurveTo(x1, y1, x2, y2, x,y)\n toX = data[i + 5]\n toY = data[i + 6]\n distance = segments[index]\n\n if (total + distance >= motionDistance) {\n x1 = data[i + 1], y1 = data[i + 2], x2 = data[i + 3], y2 = data[i + 4]\n t = HighBezierHelper.getT(motionDistance - total, distance, x, y, x1, y1, x2, y2, toX, toY, motionPrecision)\n BezierHelper.getPointAndSet(t, x, y, x1, y1, x2, y2, toX, toY, to)\n to.rotation = HighBezierHelper.getRotation(t, x, y, x1, y1, x2, y2, toX, toY)\n return to\n }\n\n x = toX\n y = toY\n i += 7\n break\n case Z: //closepath()\n i += 1\n default:\n distance = 0\n }\n\n index++\n total += distance\n }\n\n return to\n },\n\n getDistancePath(distanceData: IMotionPathData, motionDistance: number | IUnitData, motionPrecision?: number): IPathCommandData {\n const { segments, data } = distanceData, path: IPathCommandData = []\n motionDistance = UnitConvert.number(motionDistance, distanceData.total)\n\n let total = 0, distance: number, cutDistance: number, to = {} as IRotationPointData\n let i = 0, index = 0, x: number = 0, y: number = 0, toX: number, toY: number, command: number\n let x1: number, y1: number, x2: number, y2: number, t: number\n\n const len = data.length\n while (i < len) {\n command = data[i]\n switch (command) {\n case M: //moveto(x, y)\n case L: //lineto(x, y)\n toX = data[i + 1]\n toY = data[i + 2]\n distance = segments[index]\n\n if (total + distance > motionDistance || !distanceData.total) {\n if (!i) x = toX, y = toY // first M\n tempFrom.x = x\n tempFrom.y = y\n to.x = toX\n to.y = toY\n cutDistance = float(motionDistance - total)\n if (cutDistance) {\n PointHelper.getDistancePoint(tempFrom, to, cutDistance, true)\n path.push(command, to.x, to.y)\n }\n return path\n }\n\n x = toX\n y = toY\n i += 3\n path.push(command, x, y)\n break\n case C: //bezierCurveTo(x1, y1, x2, y2, x,y)\n x1 = data[i + 1], y1 = data[i + 2], x2 = data[i + 3], y2 = data[i + 4]\n toX = data[i + 5]\n toY = data[i + 6]\n distance = segments[index]\n\n if (total + distance > motionDistance) {\n cutDistance = float(motionDistance - total)\n if (cutDistance) {\n t = HighBezierHelper.getT(cutDistance, distance, x, y, x1, y1, x2, y2, toX, toY, motionPrecision)\n HighBezierHelper.cut(path, t, x, y, x1, y1, x2, y2, toX, toY)\n }\n return path\n }\n\n x = toX\n y = toY\n i += 7\n path.push(command, x1, y1, x2, y2, toX, toY)\n break\n case Z: //closepath()\n i += 1\n path.push(command)\n default:\n distance = 0\n\n }\n\n index++\n total += distance\n }\n\n return path\n }\n\n}","import { IValue } from '@leafer-ui/interface'\nimport { decorateLeafAttr, attr, isNull } from '@leafer-ui/draw'\n\nexport function motionPathType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: any) {\n this.__setAttr(key, value)\n this.__hasMotionPath = this.motionPath || !isNull(this.motion)\n this.__layout.matrixChanged || this.__layout.matrixChange()\n }\n }))\n}","export { HighCurveHelper } from './HighCurveHelper'\nexport { HighBezierHelper } from './HighBezierHelper'\nexport { motionPathType } from './decorator'\n\nimport { IMotionPathData, IUI, IUnitData, IRotationPointData, IPercentData } from '@leafer-ui/interface'\nimport { isNull, MatrixHelper, LeafHelper, BranchHelper, Transition, UI, UnitConvert, Plugin, isObject, isNumber } from '@leafer-ui/draw'\n\nimport { HighCurveHelper } from './HighCurveHelper'\nimport { motionPathType } from './decorator'\n\n\nPlugin.add('motion-path')\n\n\nTransition.register('motion', function (from: number | IPercentData, to: number | IPercentData, t: number, target: IUI): number {\n if (isObject(from)) from = UnitConvert.number(from, target.getMotionTotal())\n if (isObject(to)) to = UnitConvert.number(to, target.getMotionTotal())\n return Transition.number(from || 0, to || 0, t)\n})\n\nTransition.register('motionRotation', function (from: any, to: any, t: number): number {\n return Transition.number(from, to, t)\n})\n\n\nconst ui = UI.prototype\nconst { updateMatrix, updateAllMatrix } = LeafHelper\nconst { updateBounds } = BranchHelper\n\n\n// addAttr\nUI.addAttr('motionPath', undefined, motionPathType)\nUI.addAttr('motionPrecision', 1, motionPathType)\n\nUI.addAttr('motion', undefined, motionPathType)\nUI.addAttr('motionRotation', true, motionPathType)\n\n\nui.getMotionPathData = function (): IMotionPathData {\n return getMotionPathData(getMotionPath(this))\n}\n\nui.getMotionPoint = function (motionDistance: number | IUnitData): IRotationPointData {\n const path = getMotionPath(this)\n const data = getMotionPathData(path)\n if (!data.total) return {} as IRotationPointData\n\n const point = HighCurveHelper.getDistancePoint(data, motionDistance, path.motionPrecision)\n MatrixHelper.toOuterPoint(path.localTransform, point)\n\n const { motionRotation } = this\n if (motionRotation === false) delete point.rotation\n else if (isNumber(motionRotation)) point.rotation += motionRotation\n return point\n}\n\nui.getMotionTotal = function (): number {\n return this.getMotionPathData().total\n}\n\nui.__updateMotionPath = function (): void {\n const data = this.__\n if (this.__layout.resized && data.__pathForMotion) data.__pathForMotion = undefined\n\n if (this.motionPath) {\n let child: IUI\n const { children } = this.parent\n for (let i = 0; i < children.length; i++) {\n child = children[i]\n if (!isNull(child.motion) && !child.__layout.matrixChanged) {\n if (child !== this) child.__extraUpdate()\n updateMotion(child)\n }\n }\n } else updateMotion(this)\n}\n\n\nfunction updateMotion(leaf: IUI): void {\n const { motion, leaferIsCreated } = leaf\n if (isNull(motion)) return\n\n if (leaferIsCreated) leaf.leafer.created = false // 拦截布局更新通知,进行手动更新布局\n\n if (leaf.motionPath) {\n\n const data = getMotionPathData(leaf)\n if (data.total) leaf.__.__pathForRender = HighCurveHelper.getDistancePath(data, motion, leaf.motionPrecision) // 生长路径\n\n } else {\n\n leaf.set(leaf.getMotionPoint(motion)) // 动画路径\n\n if (!leaf.__hasAutoLayout) { // 手动更新布局\n if (leaf.isBranch) updateAllMatrix(leaf), updateBounds(leaf, leaf)\n else updateMatrix(leaf)\n }\n\n }\n\n if (leaferIsCreated) leaf.leafer.created = true\n}\n\nfunction getMotionPath(leaf: IUI): IUI {\n const { parent } = leaf\n if (!leaf.motionPath && parent) {\n const { children } = parent\n for (let i = 0; i < children.length; i++) {\n if (children[i].motionPath) return children[i]\n }\n }\n return leaf\n}\n\nfunction getMotionPathData(leaf: IUI): IMotionPathData {\n const data = leaf.__\n if (data.__pathForMotion) return data.__pathForMotion\n return data.__pathForMotion = HighCurveHelper.getMotionPathData(leaf.getPath(true, true))\n}"],"names":["gaussNodes","gaussWeights","sqrt","Math","getDerivative","BezierHelper","HighBezierHelper","getDistance","fromX","fromY","x1","y1","x2","y2","toX","toY","t","t1","t2","d1X","d1Y","d2X","d2Y","distance","half","i","length","getRotation","dx","dy","atan2","OneRadian","getT","totalDistance","precision","low","high","middle","realPrecision","cut","data","o","ax","ay","mbx","mby","bx","by","cx","cy","push","PathCommandMap","C","M","L","Z","float","MathHelper","tempPoint","tempFrom","HighCurveHelper","transform","matrix","command","len","transformPoints","start","pointCount","end","x","y","MatrixHelper","toOuterPoint","getMotionPathData","total","segments","PointHelper","getDistanceFrom","getDistancePoint","distanceData","motionDistance","motionPrecision","UnitConvert","number","to","index","rotation","getAngle","getPointAndSet","getDistancePath","path","cutDistance","motionPathType","defaultValue","decorateLeafAttr","key","attr","set","value","this","__setAttr","__hasMotionPath","motionPath","isNull","motion","__layout","matrixChanged","matrixChange","Plugin","add","Transition","register","from","target","isObject","getMotionTotal","ui","UI","prototype","updateMatrix","updateAllMatrix","LeafHelper","updateBounds","BranchHelper","updateMotion","leaf","leaferIsCreated","leafer","created","__","__pathForRender","getMotionPoint","__hasAutoLayout","isBranch","getMotionPath","parent","children","__pathForMotion","getPath","addAttr","undefined","point","localTransform","motionRotation","isNumber","__updateMotionPath","resized","child","__extraUpdate"],"mappings":"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"}
1
+ {"version":3,"file":"motion-path.min.js","sources":["../../../../../../src/in/packages/motion-path/src/HighBezierHelper.ts","../../../../../../src/in/packages/motion-path/src/HighCurveHelper.ts","../../../../../../src/in/packages/motion-path/src/decorator.ts","../../../../../../src/in/packages/motion-path/src/index.ts"],"sourcesContent":["import { IPathCommandData } from '@leafer-ui/interface'\nimport { BezierHelper, OneRadian, PathCommandMap } from '@leafer-ui/draw'\n\n\n// 高斯-勒让德积分节点和权重\nconst gaussNodes = [0.1488743389, 0.4333953941, 0.6794095682, 0.8650633666, 0.9739065285]\nconst gaussWeights = [0.2955242247, 0.2692667193, 0.2190863625, 0.1494513491, 0.0666713443]\n\nconst { sqrt } = Math\nconst { getDerivative } = BezierHelper\n\nexport const HighBezierHelper = {\n\n getDistance(fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number, t = 1): number {\n let distance = 0, t1: number, t2: number, d1X: number, d1Y: number, d2X: number, d2Y: number, half = t / 2\n for (let i = 0; i < gaussNodes.length; i++) {\n t1 = half * (1 + gaussNodes[i])\n t2 = half * (1 - gaussNodes[i])\n\n d1X = getDerivative(t1, fromX, x1, x2, toX)\n d1Y = getDerivative(t1, fromY, y1, y2, toY)\n\n d2X = getDerivative(t2, fromX, x1, x2, toX)\n d2Y = getDerivative(t2, fromY, y1, y2, toY)\n\n distance += gaussWeights[i] * (sqrt(d1X * d1X + d1Y * d1Y) + sqrt(d2X * d2X + d2Y * d2Y))\n }\n return distance * half\n },\n\n getRotation(t: number, fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number): number { // 切线角度\n const dx = getDerivative(t, fromX, x1, x2, toX)\n const dy = getDerivative(t, fromY, y1, y2, toY)\n return Math.atan2(dy, dx) / OneRadian\n },\n\n getT(distance: number, totalDistance: number, fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number, precision = 1): number { // 弧长反解 t\n let low = 0, high = 1, middle = distance / totalDistance, realPrecision = precision / totalDistance / 3\n\n if (middle >= 1) return 1\n if (middle <= 0) return 0\n\n while (high - low > realPrecision) { // 2分法快速对比\n getDistance(fromX, fromY, x1, y1, x2, y2, toX, toY, middle) < distance ? low = middle : high = middle\n middle = (low + high) / 2\n }\n\n return middle\n },\n\n cut(data: IPathCommandData, t: number, fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number) {\n const o = 1 - t\n const ax = o * fromX + t * x1, ay = o * fromY + t * y1\n const mbx = o * x1 + t * x2, mby = o * y1 + t * y2\n const mcx = o * x2 + t * toX, mcy = o * y2 + t * toY\n\n const bx = o * ax + t * mbx, by = o * ay + t * mby\n const mbcx = o * mbx + t * mcx, mbcy = o * mby + t * mcy\n\n const cx = o * bx + t * mbcx, cy = o * by + t * mbcy\n data.push(PathCommandMap.C, ax, ay, bx, by, cx, cy)\n }\n\n}\n\nconst { getDistance } = HighBezierHelper","import { IMatrixData, IPathCommandData, IMotionPathData, IRotationPointData, IPointData, IUnitData } from '@leafer-ui/interface'\nimport { BezierHelper, MatrixHelper, MathHelper, PathCommandMap, PointHelper, UnitConvert } from '@leafer-ui/draw'\n\nimport { HighBezierHelper } from './HighBezierHelper'\n\n\nconst { M, L, C, Z } = PathCommandMap, { float } = MathHelper\nconst tempPoint = {} as IPointData, tempFrom = {} as IPointData\n\nexport const HighCurveHelper = {\n\n transform(data: IPathCommandData, matrix: IMatrixData): void {\n let i: number = 0, command: number\n\n const len = data.length\n while (i < len) {\n command = data[i]\n switch (command) {\n case M: //moveto(x, y)\n case L: //lineto(x, y)\n HighCurveHelper.transformPoints(data, matrix, i, 1)\n i += 3\n break\n case C: //bezierCurveTo(x1, y1, x2, y2, x,y)\n HighCurveHelper.transformPoints(data, matrix, i, 3)\n i += 7\n break\n case Z: //closepath()\n i += 1\n }\n }\n },\n\n transformPoints(data: IPathCommandData, matrix: IMatrixData, start: number, pointCount: number): void {\n for (let i = start + 1, end = i + pointCount * 2; i < end; i += 2) {\n tempPoint.x = data[i]\n tempPoint.y = data[i + 1]\n MatrixHelper.toOuterPoint(matrix, tempPoint)\n data[i] = tempPoint.x\n data[i + 1] = tempPoint.y\n }\n },\n\n getMotionPathData(data: IPathCommandData): IMotionPathData {\n let total = 0, distance: number, segments: number[] = []\n let i = 0, x = 0, y = 0, toX: number, toY: number, command: number\n\n const len = data.length\n while (i < len) {\n command = data[i]\n switch (command) {\n case M: //moveto(x, y)\n case L: //lineto(x, y)\n toX = data[i + 1]\n toY = data[i + 2]\n distance = (command === L && i > 0) ? PointHelper.getDistanceFrom(x, y, toX, toY) : 0\n x = toX\n y = toY\n i += 3\n break\n case C: //bezierCurveTo(x1, y1, x2, y2, x,y)\n toX = data[i + 5]\n toY = data[i + 6]\n distance = HighBezierHelper.getDistance(x, y, data[i + 1], data[i + 2], data[i + 3], data[i + 4], toX, toY)\n x = toX\n y = toY\n i += 7\n break\n case Z: //closepath()\n i += 1\n default:\n distance = 0\n\n }\n\n segments.push(distance)\n total += distance\n }\n\n return { total, segments, data }\n\n },\n\n\n getDistancePoint(distanceData: IMotionPathData, motionDistance: number | IUnitData, motionPrecision?: number): IRotationPointData {\n const { segments, data } = distanceData\n motionDistance = UnitConvert.number(motionDistance, distanceData.total)\n\n let total = 0, distance: number, to = {} as IRotationPointData\n let i = 0, index = 0, x: number = 0, y: number = 0, toX: number, toY: number, command: number\n let x1: number, y1: number, x2: number, y2: number, t: number\n\n const len = data.length\n while (i < len) {\n command = data[i]\n switch (command) {\n case M: //moveto(x, y)\n case L: //lineto(x, y)\n toX = data[i + 1]\n toY = data[i + 2]\n distance = segments[index]\n\n if (total + distance >= motionDistance || !distanceData.total) {\n if (!i) x = toX, y = toY // first M\n tempFrom.x = x\n tempFrom.y = y\n to.x = toX\n to.y = toY\n PointHelper.getDistancePoint(tempFrom, to, motionDistance - total, true)\n to.rotation = PointHelper.getAngle(tempFrom, to)\n return to\n }\n\n x = toX\n y = toY\n i += 3\n break\n case C: //bezierCurveTo(x1, y1, x2, y2, x,y)\n toX = data[i + 5]\n toY = data[i + 6]\n distance = segments[index]\n\n if (total + distance >= motionDistance) {\n x1 = data[i + 1], y1 = data[i + 2], x2 = data[i + 3], y2 = data[i + 4]\n t = HighBezierHelper.getT(motionDistance - total, distance, x, y, x1, y1, x2, y2, toX, toY, motionPrecision)\n BezierHelper.getPointAndSet(t, x, y, x1, y1, x2, y2, toX, toY, to)\n to.rotation = HighBezierHelper.getRotation(t, x, y, x1, y1, x2, y2, toX, toY)\n return to\n }\n\n x = toX\n y = toY\n i += 7\n break\n case Z: //closepath()\n i += 1\n default:\n distance = 0\n }\n\n index++\n total += distance\n }\n\n return to\n },\n\n getDistancePath(distanceData: IMotionPathData, motionDistance: number | IUnitData, motionPrecision?: number): IPathCommandData {\n const { segments, data } = distanceData, path: IPathCommandData = []\n motionDistance = UnitConvert.number(motionDistance, distanceData.total)\n\n let total = 0, distance: number, cutDistance: number, to = {} as IRotationPointData\n let i = 0, index = 0, x: number = 0, y: number = 0, toX: number, toY: number, command: number\n let x1: number, y1: number, x2: number, y2: number, t: number\n\n const len = data.length\n while (i < len) {\n command = data[i]\n switch (command) {\n case M: //moveto(x, y)\n case L: //lineto(x, y)\n toX = data[i + 1]\n toY = data[i + 2]\n distance = segments[index]\n\n if (total + distance > motionDistance || !distanceData.total) {\n if (!i) x = toX, y = toY // first M\n tempFrom.x = x\n tempFrom.y = y\n to.x = toX\n to.y = toY\n cutDistance = float(motionDistance - total)\n if (cutDistance) {\n PointHelper.getDistancePoint(tempFrom, to, cutDistance, true)\n path.push(command, to.x, to.y)\n }\n return path\n }\n\n x = toX\n y = toY\n i += 3\n path.push(command, x, y)\n break\n case C: //bezierCurveTo(x1, y1, x2, y2, x,y)\n x1 = data[i + 1], y1 = data[i + 2], x2 = data[i + 3], y2 = data[i + 4]\n toX = data[i + 5]\n toY = data[i + 6]\n distance = segments[index]\n\n if (total + distance > motionDistance) {\n cutDistance = float(motionDistance - total)\n if (cutDistance) {\n t = HighBezierHelper.getT(cutDistance, distance, x, y, x1, y1, x2, y2, toX, toY, motionPrecision)\n HighBezierHelper.cut(path, t, x, y, x1, y1, x2, y2, toX, toY)\n }\n return path\n }\n\n x = toX\n y = toY\n i += 7\n path.push(command, x1, y1, x2, y2, toX, toY)\n break\n case Z: //closepath()\n i += 1\n path.push(command)\n default:\n distance = 0\n\n }\n\n index++\n total += distance\n }\n\n return path\n }\n\n}","import { IValue } from '@leafer-ui/interface'\nimport { decorateLeafAttr, attr, isNull } from '@leafer-ui/draw'\n\nexport function motionPathType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: any) {\n this.__setAttr(key, value)\n this.__hasMotionPath = (this.motionPath || !isNull(this.motion)) as boolean\n this.__layout.matrixChanged || this.__layout.matrixChange()\n }\n }))\n}","export { HighCurveHelper } from './HighCurveHelper'\nexport { HighBezierHelper } from './HighBezierHelper'\nexport { motionPathType } from './decorator'\n\nimport { IMotionPathData, IUI, IUnitData, IRotationPointData, IPercentData } from '@leafer-ui/interface'\nimport { isNull, MatrixHelper, LeafHelper, BranchHelper, Transition, UI, UnitConvert, Plugin, isObject, isNumber } from '@leafer-ui/draw'\n\nimport { HighCurveHelper } from './HighCurveHelper'\nimport { motionPathType } from './decorator'\n\n\nPlugin.add('motion-path')\n\n\nTransition.register('motion', function (from: number | IPercentData, to: number | IPercentData, t: number, target: IUI): number {\n if (isObject(from)) from = UnitConvert.number(from, target.getMotionTotal())\n if (isObject(to)) to = UnitConvert.number(to, target.getMotionTotal())\n return Transition.number(from || 0, to || 0, t)\n})\n\nTransition.register('motionRotation', function (from: any, to: any, t: number): number {\n return Transition.number(from, to, t)\n})\n\n\nconst ui = UI.prototype\nconst { updateMatrix, updateAllMatrix } = LeafHelper\nconst { updateBounds } = BranchHelper\n\n\n// addAttr\nUI.addAttr('motionPath', undefined, motionPathType)\nUI.addAttr('motionPrecision', 1, motionPathType)\n\nUI.addAttr('motion', undefined, motionPathType)\nUI.addAttr('motionRotation', true, motionPathType)\n\n\nui.getMotionPathData = function (): IMotionPathData {\n return getMotionPathData(getMotionPath(this))\n}\n\nui.getMotionPoint = function (motionDistance: number | IUnitData): IRotationPointData {\n const path = getMotionPath(this)\n const data = getMotionPathData(path)\n if (!data.total) return {} as IRotationPointData\n\n const point = HighCurveHelper.getDistancePoint(data, motionDistance, path.motionPrecision)\n MatrixHelper.toOuterPoint(path.localTransform, point)\n\n const { motionRotation } = this\n if (motionRotation === false) delete point.rotation\n else if (isNumber(motionRotation)) point.rotation += motionRotation\n return point\n}\n\nui.getMotionTotal = function (): number {\n return this.getMotionPathData().total\n}\n\nui.__updateMotionPath = function (): void {\n const data = this.__\n if (this.__layout.resized && data.__pathForMotion) data.__pathForMotion = undefined\n\n if (this.motionPath) {\n let child: IUI\n const { children } = this.parent\n for (let i = 0; i < children.length; i++) {\n child = children[i]\n if (!isNull(child.motion) && !child.__layout.matrixChanged) {\n if (child !== this) child.__extraUpdate()\n updateMotion(child)\n }\n }\n } else updateMotion(this)\n}\n\n\nfunction updateMotion(leaf: IUI): void {\n const { motion, leaferIsCreated } = leaf\n if (isNull(motion)) return\n\n if (leaferIsCreated) leaf.leafer.created = false // 拦截布局更新通知,进行手动更新布局\n\n if (leaf.motionPath) {\n\n const data = getMotionPathData(leaf)\n if (data.total) leaf.__.__pathForRender = HighCurveHelper.getDistancePath(data, motion, leaf.motionPrecision) // 生长路径\n\n } else {\n\n leaf.set(leaf.getMotionPoint(motion)) // 动画路径\n\n if (!leaf.__hasAutoLayout) { // 手动更新布局\n if (leaf.isBranch) updateAllMatrix(leaf), updateBounds(leaf, leaf)\n else updateMatrix(leaf)\n }\n\n }\n\n if (leaferIsCreated) leaf.leafer.created = true\n}\n\nfunction getMotionPath(leaf: IUI): IUI {\n const { parent } = leaf\n if (!leaf.motionPath && parent) {\n const { children } = parent\n for (let i = 0; i < children.length; i++) {\n if (children[i].motionPath) return children[i]\n }\n }\n return leaf\n}\n\nfunction getMotionPathData(leaf: IUI): IMotionPathData {\n const data = leaf.__\n if (data.__pathForMotion) return data.__pathForMotion\n return data.__pathForMotion = HighCurveHelper.getMotionPathData(leaf.getPath(true, true))\n}"],"names":["gaussNodes","gaussWeights","sqrt","Math","getDerivative","BezierHelper","HighBezierHelper","getDistance","fromX","fromY","x1","y1","x2","y2","toX","toY","t","t1","t2","d1X","d1Y","d2X","d2Y","distance","half","i","length","getRotation","dx","dy","atan2","OneRadian","getT","totalDistance","precision","low","high","middle","realPrecision","cut","data","o","ax","ay","mbx","mby","bx","by","cx","cy","push","PathCommandMap","C","M","L","Z","float","MathHelper","tempPoint","tempFrom","HighCurveHelper","transform","matrix","command","len","transformPoints","start","pointCount","end","x","y","MatrixHelper","toOuterPoint","getMotionPathData","total","segments","PointHelper","getDistanceFrom","getDistancePoint","distanceData","motionDistance","motionPrecision","UnitConvert","number","to","index","rotation","getAngle","getPointAndSet","getDistancePath","path","cutDistance","motionPathType","defaultValue","decorateLeafAttr","key","attr","set","value","this","__setAttr","__hasMotionPath","motionPath","isNull","motion","__layout","matrixChanged","matrixChange","Plugin","add","Transition","register","from","target","isObject","getMotionTotal","ui","UI","prototype","updateMatrix","updateAllMatrix","LeafHelper","updateBounds","BranchHelper","updateMotion","leaf","leaferIsCreated","leafer","created","__","__pathForRender","getMotionPoint","__hasAutoLayout","isBranch","getMotionPath","parent","children","__pathForMotion","getPath","addAttr","undefined","point","localTransform","motionRotation","isNumber","__updateMotionPath","resized","child","__extraUpdate"],"mappings":"oFAKA,MAAMA,EAAa,CAAC,YAAc,YAAc,YAAc,YAAc,aACtEC,EAAe,CAAC,YAAc,YAAc,YAAc,YAAc,cAExEC,KAAEA,GAASC,MACXC,cAAEA,GAAkBC,EAAAA,aAEbC,EAAmB,CAE5B,WAAAC,CAAYC,EAAeC,EAAeC,EAAYC,EAAYC,EAAYC,EAAYC,EAAaC,EAAaC,EAAI,GACpH,IAAkBC,EAAYC,EAAYC,EAAaC,EAAaC,EAAaC,EAA7EC,EAAW,EAA+EC,EAAOR,EAAI,EACzG,IAAK,IAAIS,EAAI,EAAGA,EAAIzB,EAAW0B,OAAQD,IACnCR,EAAKO,GAAQ,EAAIxB,EAAWyB,IAC5BP,EAAKM,GAAQ,EAAIxB,EAAWyB,IAE5BN,EAAMf,EAAca,EAAIT,EAAOE,EAAIE,EAAIE,GACvCM,EAAMhB,EAAca,EAAIR,EAAOE,EAAIE,EAAIE,GAEvCM,EAAMjB,EAAcc,EAAIV,EAAOE,EAAIE,EAAIE,GACvCQ,EAAMlB,EAAcc,EAAIT,EAAOE,EAAIE,EAAIE,GAEvCQ,GAAYtB,EAAawB,IAAMvB,EAAKiB,EAAMA,EAAMC,EAAMA,GAAOlB,EAAKmB,EAAMA,EAAMC,EAAMA,IAExF,OAAOC,EAAWC,CACtB,EAEA,WAAAG,CAAYX,EAAWR,EAAeC,EAAeC,EAAYC,EAAYC,EAAYC,EAAYC,EAAaC,GAC9G,MAAMa,EAAKxB,EAAcY,EAAGR,EAAOE,EAAIE,EAAIE,GACrCe,EAAKzB,EAAcY,EAAGP,EAAOE,EAAIE,EAAIE,GAC3C,OAAOZ,KAAK2B,MAAMD,EAAID,GAAMG,EAAAA,SAChC,EAEA,IAAAC,CAAKT,EAAkBU,EAAuBzB,EAAeC,EAAeC,EAAYC,EAAYC,EAAYC,EAAYC,EAAaC,EAAamB,EAAY,GAC9J,IAAIC,EAAM,EAAGC,EAAO,EAAGC,EAASd,EAAWU,EAAeK,EAAgBJ,EAAYD,EAAgB,EAEtG,GAAII,GAAU,EAAG,OAAO,EACxB,GAAIA,GAAU,EAAG,OAAO,EAExB,KAAOD,EAAOD,EAAMG,GAChB/B,EAAYC,EAAOC,EAAOC,EAAIC,EAAIC,EAAIC,EAAIC,EAAKC,EAAKsB,GAAUd,EAAWY,EAAME,EAASD,EAAOC,EAC/FA,GAAUF,EAAMC,GAAQ,EAG5B,OAAOC,CACX,EAEA,GAAAE,CAAIC,EAAwBxB,EAAWR,EAAeC,EAAeC,EAAYC,EAAYC,EAAYC,EAAYC,EAAaC,GAC9H,MAAM0B,EAAI,EAAIzB,EACR0B,EAAKD,EAAIjC,EAAQQ,EAAIN,EAAIiC,EAAKF,EAAIhC,EAAQO,EAAIL,EAC9CiC,EAAMH,EAAI/B,EAAKM,EAAIJ,EAAIiC,EAAMJ,EAAI9B,EAAKK,EAAIH,EAG1CiC,EAAKL,EAAIC,EAAK1B,EAAI4B,EAAKG,EAAKN,EAAIE,EAAK3B,EAAI6B,EAGzCG,EAAKP,EAAIK,EAAK9B,GAFPyB,EAAIG,EAAM5B,GAHXyB,EAAI7B,EAAKI,EAAIF,IAKKmC,EAAKR,EAAIM,EAAK/B,GAFLyB,EAAII,EAAM7B,GAHbyB,EAAI5B,EAAKG,EAAID,IAMjDyB,EAAKU,KAAKC,EAAAA,eAAeC,EAAGV,EAAIC,EAAIG,EAAIC,EAAIC,EAAIC,EACpD,IAIE1C,YAAEA,GAAgBD,GC3DlB+C,EAAEA,EAACC,EAAEA,EAACF,EAAEA,EAACG,EAAEA,GAAMJ,kBAAgBK,MAAEA,GAAUC,EAAAA,WAC7CC,EAAY,CAAA,EAAkBC,EAAW,CAAA,EAElCC,EAAkB,CAE3B,SAAAC,CAAUrB,EAAwBsB,GAC9B,IAAmBC,EAAftC,EAAY,EAEhB,MAAMuC,EAAMxB,EAAKd,OACjB,KAAOD,EAAIuC,GAEP,OADAD,EAAUvB,EAAKf,GACPsC,GACJ,KAAKV,EACL,KAAKC,EACDM,EAAgBK,gBAAgBzB,EAAMsB,EAAQrC,EAAG,GACjDA,GAAK,EACL,MACJ,KAAK2B,EACDQ,EAAgBK,gBAAgBzB,EAAMsB,EAAQrC,EAAG,GACjDA,GAAK,EACL,MACJ,KAAK8B,EACD9B,GAAK,EAGrB,EAEA,eAAAwC,CAAgBzB,EAAwBsB,EAAqBI,EAAeC,GACxE,IAAK,IAAI1C,EAAIyC,EAAQ,EAAGE,EAAM3C,EAAiB,EAAb0C,EAAgB1C,EAAI2C,EAAK3C,GAAK,EAC5DiC,EAAUW,EAAI7B,EAAKf,GACnBiC,EAAUY,EAAI9B,EAAKf,EAAI,GACvB8C,eAAaC,aAAaV,EAAQJ,GAClClB,EAAKf,GAAKiC,EAAUW,EACpB7B,EAAKf,EAAI,GAAKiC,EAAUY,CAEhC,EAEA,iBAAAG,CAAkBjC,GACd,IAAejB,EACUT,EAAaC,EAAagD,EAD/CW,EAAQ,EAAqBC,EAAqB,GAClDlD,EAAI,EAAG4C,EAAI,EAAGC,EAAI,EAEtB,MAAMN,EAAMxB,EAAKd,OACjB,KAAOD,EAAIuC,GAAK,CAEZ,OADAD,EAAUvB,EAAKf,GACPsC,GACJ,KAAKV,EACL,KAAKC,EACDxC,EAAM0B,EAAKf,EAAI,GACfV,EAAMyB,EAAKf,EAAI,GACfF,EAAYwC,IAAYT,GAAK7B,EAAI,EAAKmD,EAAAA,YAAYC,gBAAgBR,EAAGC,EAAGxD,EAAKC,GAAO,EACpFsD,EAAIvD,EACJwD,EAAIvD,EACJU,GAAK,EACL,MACJ,KAAK2B,EACDtC,EAAM0B,EAAKf,EAAI,GACfV,EAAMyB,EAAKf,EAAI,GACfF,EAAWjB,EAAiBC,YAAY8D,EAAGC,EAAG9B,EAAKf,EAAI,GAAIe,EAAKf,EAAI,GAAIe,EAAKf,EAAI,GAAIe,EAAKf,EAAI,GAAIX,EAAKC,GACvGsD,EAAIvD,EACJwD,EAAIvD,EACJU,GAAK,EACL,MACJ,KAAK8B,EACD9B,GAAK,EACT,QACIF,EAAW,EAInBoD,EAASzB,KAAK3B,GACdmD,GAASnD,CACb,CAEA,MAAO,CAAEmD,QAAOC,WAAUnC,OAE9B,EAGA,gBAAAsC,CAAiBC,EAA+BC,EAAoCC,GAChF,MAAMN,SAAEA,EAAQnC,KAAEA,GAASuC,EAC3BC,EAAiBE,EAAAA,YAAYC,OAAOH,EAAgBD,EAAaL,OAEjE,IAAenD,EACqCT,EAAaC,EAAagD,EAC1ErD,EAAYC,EAAYC,EAAYC,EAAYG,EAFhD0D,EAAQ,EAAqBU,EAAK,CAAA,EAClC3D,EAAI,EAAG4D,EAAQ,EAAGhB,EAAY,EAAGC,EAAY,EAGjD,MAAMN,EAAMxB,EAAKd,OACjB,KAAOD,EAAIuC,GAAK,CAEZ,OADAD,EAAUvB,EAAKf,GACPsC,GACJ,KAAKV,EACL,KAAKC,EAKD,GAJAxC,EAAM0B,EAAKf,EAAI,GACfV,EAAMyB,EAAKf,EAAI,GACfF,EAAWoD,EAASU,GAEhBX,EAAQnD,GAAYyD,IAAmBD,EAAaL,MAQpD,OAPKjD,IAAG4C,EAAIvD,EAAKwD,EAAIvD,GACrB4C,EAASU,EAAIA,EACbV,EAASW,EAAIA,EACbc,EAAGf,EAAIvD,EACPsE,EAAGd,EAAIvD,EACP6D,EAAAA,YAAYE,iBAAiBnB,EAAUyB,EAAIJ,EAAiBN,GAAO,GACnEU,EAAGE,SAAWV,EAAAA,YAAYW,SAAS5B,EAAUyB,GACtCA,EAGXf,EAAIvD,EACJwD,EAAIvD,EACJU,GAAK,EACL,MACJ,KAAK2B,EAKD,GAJAtC,EAAM0B,EAAKf,EAAI,GACfV,EAAMyB,EAAKf,EAAI,GACfF,EAAWoD,EAASU,GAEhBX,EAAQnD,GAAYyD,EAKpB,OAJAtE,EAAK8B,EAAKf,EAAI,GAAId,EAAK6B,EAAKf,EAAI,GAAIb,EAAK4B,EAAKf,EAAI,GAAIZ,EAAK2B,EAAKf,EAAI,GACpET,EAAIV,EAAiB0B,KAAKgD,EAAiBN,EAAOnD,EAAU8C,EAAGC,EAAG5D,EAAIC,EAAIC,EAAIC,EAAIC,EAAKC,EAAKkE,GAC5F5E,EAAAA,aAAamF,eAAexE,EAAGqD,EAAGC,EAAG5D,EAAIC,EAAIC,EAAIC,EAAIC,EAAKC,EAAKqE,GAC/DA,EAAGE,SAAWhF,EAAiBqB,YAAYX,EAAGqD,EAAGC,EAAG5D,EAAIC,EAAIC,EAAIC,EAAIC,EAAKC,GAClEqE,EAGXf,EAAIvD,EACJwD,EAAIvD,EACJU,GAAK,EACL,MACJ,KAAK8B,EACD9B,GAAK,EACT,QACIF,EAAW,EAGnB8D,IACAX,GAASnD,CACb,CAEA,OAAO6D,CACX,EAEA,eAAAK,CAAgBV,EAA+BC,EAAoCC,GAC/E,MAAMN,SAAEA,EAAQnC,KAAEA,GAASuC,EAAcW,EAAyB,GAClEV,EAAiBE,EAAAA,YAAYC,OAAOH,EAAgBD,EAAaL,OAEjE,IAAenD,EAAkBoE,EACmB7E,EAAaC,EAAagD,EAC1ErD,EAAYC,EAAYC,EAAYC,EAAYG,EAFhD0D,EAAQ,EAA0CU,EAAK,CAAA,EACvD3D,EAAI,EAAG4D,EAAQ,EAAGhB,EAAY,EAAGC,EAAY,EAGjD,MAAMN,EAAMxB,EAAKd,OACjB,KAAOD,EAAIuC,GAAK,CAEZ,OADAD,EAAUvB,EAAKf,GACPsC,GACJ,KAAKV,EACL,KAAKC,EAKD,GAJAxC,EAAM0B,EAAKf,EAAI,GACfV,EAAMyB,EAAKf,EAAI,GACfF,EAAWoD,EAASU,GAEhBX,EAAQnD,EAAWyD,IAAmBD,EAAaL,MAWnD,OAVKjD,IAAG4C,EAAIvD,EAAKwD,EAAIvD,GACrB4C,EAASU,EAAIA,EACbV,EAASW,EAAIA,EACbc,EAAGf,EAAIvD,EACPsE,EAAGd,EAAIvD,EACP4E,EAAcnC,EAAMwB,EAAiBN,GACjCiB,IACAf,EAAAA,YAAYE,iBAAiBnB,EAAUyB,EAAIO,GAAa,GACxDD,EAAKxC,KAAKa,EAASqB,EAAGf,EAAGe,EAAGd,IAEzBoB,EAGXrB,EAAIvD,EACJwD,EAAIvD,EACJU,GAAK,EACLiE,EAAKxC,KAAKa,EAASM,EAAGC,GACtB,MACJ,KAAKlB,EAMD,GALA1C,EAAK8B,EAAKf,EAAI,GAAId,EAAK6B,EAAKf,EAAI,GAAIb,EAAK4B,EAAKf,EAAI,GAAIZ,EAAK2B,EAAKf,EAAI,GACpEX,EAAM0B,EAAKf,EAAI,GACfV,EAAMyB,EAAKf,EAAI,GACfF,EAAWoD,EAASU,GAEhBX,EAAQnD,EAAWyD,EAMnB,OALAW,EAAcnC,EAAMwB,EAAiBN,GACjCiB,IACA3E,EAAIV,EAAiB0B,KAAK2D,EAAapE,EAAU8C,EAAGC,EAAG5D,EAAIC,EAAIC,EAAIC,EAAIC,EAAKC,EAAKkE,GACjF3E,EAAiBiC,IAAImD,EAAM1E,EAAGqD,EAAGC,EAAG5D,EAAIC,EAAIC,EAAIC,EAAIC,EAAKC,IAEtD2E,EAGXrB,EAAIvD,EACJwD,EAAIvD,EACJU,GAAK,EACLiE,EAAKxC,KAAKa,EAASrD,EAAIC,EAAIC,EAAIC,EAAIC,EAAKC,GACxC,MACJ,KAAKwC,EACD9B,GAAK,EACLiE,EAAKxC,KAAKa,GACd,QACIxC,EAAW,EAInB8D,IACAX,GAASnD,CACb,CAEA,OAAOmE,CACX,GCtNE,SAAUE,EAAeC,GAC3B,OAAOC,mBAAiBD,EAAeE,GAAgBC,EAAAA,KAAK,CACxD,GAAAC,CAAIC,GACAC,KAAKC,UAAUL,EAAKG,GACpBC,KAAKE,gBAAmBF,KAAKG,aAAeC,SAAOJ,KAAKK,QACxDL,KAAKM,SAASC,eAAiBP,KAAKM,SAASE,cACjD,IAER,CCAAC,EAAAA,OAAOC,IAAI,eAGXC,EAAAA,WAAWC,SAAS,SAAU,SAAUC,EAA6B5B,EAA2BpE,EAAWiG,GAGvG,OAFIC,EAAAA,SAASF,KAAOA,EAAO9B,EAAAA,YAAYC,OAAO6B,EAAMC,EAAOE,mBACvDD,EAAAA,SAAS9B,KAAKA,EAAKF,EAAAA,YAAYC,OAAOC,EAAI6B,EAAOE,mBAC9CL,EAAAA,WAAW3B,OAAO6B,GAAQ,EAAG5B,GAAM,EAAGpE,EACjD,GAEA8F,EAAAA,WAAWC,SAAS,iBAAkB,SAAUC,EAAW5B,EAASpE,GAChE,OAAO8F,EAAAA,WAAW3B,OAAO6B,EAAM5B,EAAIpE,EACvC,GAGA,MAAMoG,EAAKC,EAAAA,GAAGC,WACRC,aAAEA,EAAYC,gBAAEA,GAAoBC,EAAAA,YACpCC,aAAEA,GAAiBC,EAAAA,aAmDzB,SAASC,EAAaC,GAClB,MAAMrB,OAAEA,EAAMsB,gBAAEA,GAAoBD,EACpC,IAAItB,EAAAA,OAAOC,GAAX,CAIA,GAFIsB,IAAiBD,EAAKE,OAAOC,SAAU,GAEvCH,EAAKvB,WAAY,CAEjB,MAAM9D,EAAOiC,EAAkBoD,GAC3BrF,EAAKkC,QAAOmD,EAAKI,GAAGC,gBAAkBtE,EAAgB6B,gBAAgBjD,EAAMgE,EAAQqB,EAAK5C,iBAEjG,MAEI4C,EAAK5B,IAAI4B,EAAKM,eAAe3B,IAExBqB,EAAKO,kBACFP,EAAKQ,UAAUb,EAAgBK,GAAOH,EAAaG,EAAMA,IACxDN,EAAaM,IAKtBC,IAAiBD,EAAKE,OAAOC,SAAU,EApBvB,CAqBxB,CAEA,SAASM,EAAcT,GACnB,MAAMU,OAAEA,GAAWV,EACnB,IAAKA,EAAKvB,YAAciC,EAAQ,CAC5B,MAAMC,SAAEA,GAAaD,EACrB,IAAK,IAAI9G,EAAI,EAAGA,EAAI+G,EAAS9G,OAAQD,IACjC,GAAI+G,EAAS/G,GAAG6E,WAAY,OAAOkC,EAAS/G,EAEpD,CACA,OAAOoG,CACX,CAEA,SAASpD,EAAkBoD,GACvB,MAAMrF,EAAOqF,EAAKI,GAClB,OAAIzF,EAAKiG,gBAAwBjG,EAAKiG,gBAC/BjG,EAAKiG,gBAAkB7E,EAAgBa,kBAAkBoD,EAAKa,SAAQ,GAAM,GACvF,QAvFArB,EAAAA,GAAGsB,QAAQ,kBAAcC,EAAWhD,GACpCyB,EAAAA,GAAGsB,QAAQ,kBAAmB,EAAG/C,GAEjCyB,EAAAA,GAAGsB,QAAQ,cAAUC,EAAWhD,GAChCyB,EAAAA,GAAGsB,QAAQ,kBAAkB,EAAM/C,GAGnCwB,EAAG3C,kBAAoB,WACnB,OAAOA,EAAkB6D,EAAcnC,MAC3C,EAEAiB,EAAGe,eAAiB,SAAUnD,GAC1B,MAAMU,EAAO4C,EAAcnC,MACrB3D,EAAOiC,EAAkBiB,GAC/B,IAAKlD,EAAKkC,MAAO,MAAO,CAAA,EAExB,MAAMmE,EAAQjF,EAAgBkB,iBAAiBtC,EAAMwC,EAAgBU,EAAKT,iBAC1EV,EAAAA,aAAaC,aAAakB,EAAKoD,eAAgBD,GAE/C,MAAME,eAAEA,GAAmB5C,KAG3B,OAFuB,IAAnB4C,SAAiCF,EAAMvD,SAClC0D,EAAAA,SAASD,KAAiBF,EAAMvD,UAAYyD,GAC9CF,CACX,EAEAzB,EAAGD,eAAiB,WAChB,OAAOhB,KAAK1B,oBAAoBC,KACpC,EAEA0C,EAAG6B,mBAAqB,WACpB,MAAMzG,EAAO2D,KAAK8B,GAGlB,GAFI9B,KAAKM,SAASyC,SAAW1G,EAAKiG,kBAAiBjG,EAAKiG,qBAAkBG,GAEtEzC,KAAKG,WAAY,CACjB,IAAI6C,EACJ,MAAMX,SAAEA,GAAarC,KAAKoC,OAC1B,IAAK,IAAI9G,EAAI,EAAGA,EAAI+G,EAAS9G,OAAQD,IACjC0H,EAAQX,EAAS/G,GACZ8E,EAAAA,OAAO4C,EAAM3C,SAAY2C,EAAM1C,SAASC,gBACrCyC,IAAUhD,MAAMgD,EAAMC,gBAC1BxB,EAAauB,GAGzB,MAAOvB,EAAazB,KACxB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leafer-in/motion-path",
3
- "version": "2.0.7",
3
+ "version": "2.0.9",
4
4
  "description": "@leafer-in/motion-path",
5
5
  "author": "Chao (Leafer) Wan",
6
6
  "license": "MIT",
@@ -34,8 +34,8 @@
34
34
  "leaferjs"
35
35
  ],
36
36
  "peerDependencies": {
37
- "@leafer-ui/draw": "^2.0.7",
38
- "@leafer-ui/interface": "^2.0.7",
39
- "@leafer-in/interface": "^2.0.7"
37
+ "@leafer-ui/draw": "^2.0.9",
38
+ "@leafer-ui/interface": "^2.0.9",
39
+ "@leafer-in/interface": "^2.0.9"
40
40
  }
41
41
  }
package/src/decorator.ts CHANGED
@@ -5,7 +5,7 @@ export function motionPathType(defaultValue?: IValue) {
5
5
  return decorateLeafAttr(defaultValue, (key: string) => attr({
6
6
  set(value: any) {
7
7
  this.__setAttr(key, value)
8
- this.__hasMotionPath = this.motionPath || !isNull(this.motion)
8
+ this.__hasMotionPath = (this.motionPath || !isNull(this.motion)) as boolean
9
9
  this.__layout.matrixChanged || this.__layout.matrixChange()
10
10
  }
11
11
  }))