@leafer-in/motion-path 1.6.1 → 1.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,6 +5,7 @@ var draw = require('@leafer-ui/draw');
5
5
  const gaussNodes = [0.1488743389, 0.4333953941, 0.6794095682, 0.8650633666, 0.9739065285];
6
6
  const gaussWeights = [0.2955242247, 0.2692667193, 0.2190863625, 0.1494513491, 0.0666713443];
7
7
  const { sqrt } = Math;
8
+ const { getDerivative } = draw.BezierHelper;
8
9
  const HighBezierHelper = {
9
10
  getDistance(fromX, fromY, x1, y1, x2, y2, toX, toY, t = 1) {
10
11
  let distance = 0, t1, t2, d1X, d1Y, d2X, d2Y, half = t / 2;
@@ -19,10 +20,6 @@ const HighBezierHelper = {
19
20
  }
20
21
  return distance * half;
21
22
  },
22
- getDerivative(t, fromV, v1, v2, toV) {
23
- const o = 1 - t;
24
- return 3 * o * o * (v1 - fromV) + 6 * o * t * (v2 - v1) + 3 * t * t * (toV - v2);
25
- },
26
23
  getRotation(t, fromX, fromY, x1, y1, x2, y2, toX, toY) {
27
24
  const dx = getDerivative(t, fromX, x1, x2, toX);
28
25
  const dy = getDerivative(t, fromY, y1, y2, toY);
@@ -51,7 +48,7 @@ const HighBezierHelper = {
51
48
  data.push(draw.PathCommandMap.C, ax, ay, bx, by, cx, cy);
52
49
  }
53
50
  };
54
- const { getDerivative, getDistance } = HighBezierHelper;
51
+ const { getDistance } = HighBezierHelper;
55
52
 
56
53
  const { M, L, C, Z } = draw.PathCommandMap;
57
54
  const tempPoint = {}, tempFrom = {};
@@ -348,4 +345,3 @@ function getMotionPathData(leaf) {
348
345
  exports.HighBezierHelper = HighBezierHelper;
349
346
  exports.HighCurveHelper = HighCurveHelper;
350
347
  exports.motionPathType = motionPathType;
351
- //# sourceMappingURL=motion-path.cjs.map
@@ -1,8 +1,9 @@
1
- import { PathCommandMap, OneRadian, UnitConvert, PointHelper, BezierHelper, MatrixHelper, decorateLeafAttr, attr, isNull, Plugin, Transition, UI, LeafHelper, BranchHelper } from '@leafer-ui/draw';
1
+ import { BezierHelper, PathCommandMap, OneRadian, UnitConvert, PointHelper, MatrixHelper, decorateLeafAttr, attr, isNull, Plugin, Transition, UI, LeafHelper, BranchHelper } from '@leafer-ui/draw';
2
2
 
3
3
  const gaussNodes = [0.1488743389, 0.4333953941, 0.6794095682, 0.8650633666, 0.9739065285];
4
4
  const gaussWeights = [0.2955242247, 0.2692667193, 0.2190863625, 0.1494513491, 0.0666713443];
5
5
  const { sqrt } = Math;
6
+ const { getDerivative } = BezierHelper;
6
7
  const HighBezierHelper = {
7
8
  getDistance(fromX, fromY, x1, y1, x2, y2, toX, toY, t = 1) {
8
9
  let distance = 0, t1, t2, d1X, d1Y, d2X, d2Y, half = t / 2;
@@ -17,10 +18,6 @@ const HighBezierHelper = {
17
18
  }
18
19
  return distance * half;
19
20
  },
20
- getDerivative(t, fromV, v1, v2, toV) {
21
- const o = 1 - t;
22
- return 3 * o * o * (v1 - fromV) + 6 * o * t * (v2 - v1) + 3 * t * t * (toV - v2);
23
- },
24
21
  getRotation(t, fromX, fromY, x1, y1, x2, y2, toX, toY) {
25
22
  const dx = getDerivative(t, fromX, x1, x2, toX);
26
23
  const dy = getDerivative(t, fromY, y1, y2, toY);
@@ -49,7 +46,7 @@ const HighBezierHelper = {
49
46
  data.push(PathCommandMap.C, ax, ay, bx, by, cx, cy);
50
47
  }
51
48
  };
52
- const { getDerivative, getDistance } = HighBezierHelper;
49
+ const { getDistance } = HighBezierHelper;
53
50
 
54
51
  const { M, L, C, Z } = PathCommandMap;
55
52
  const tempPoint = {}, tempFrom = {};
@@ -344,4 +341,3 @@ function getMotionPathData(leaf) {
344
341
  }
345
342
 
346
343
  export { HighBezierHelper, HighCurveHelper, motionPathType };
347
- //# sourceMappingURL=motion-path.esm.js.map
@@ -1,2 +1,2 @@
1
- import{PathCommandMap as t,OneRadian as o,UnitConvert as e,PointHelper as n,BezierHelper as a,MatrixHelper as i,decorateLeafAttr as r,attr as s,isNull as c,Plugin as h,Transition as u,UI as l,LeafHelper as f,BranchHelper as g}from"@leafer-ui/draw";const m=[.1488743389,.4333953941,.6794095682,.8650633666,.9739065285],d=[.2955242247,.2692667193,.2190863625,.1494513491,.0666713443],{sqrt:_}=Math,P={getDistance(t,o,e,n,a,i,r,s,c=1){let h,u,l,f,g,P,M=0,b=c/2;for(let c=0;c<m.length;c++)h=b*(1+m[c]),u=b*(1-m[c]),l=p(h,t,e,a,r),f=p(h,o,n,i,s),g=p(u,t,e,a,r),P=p(u,o,n,i,s),M+=d[c]*(_(l*l+f*f)+_(g*g+P*P));return M*b},getDerivative(t,o,e,n,a){const i=1-t;return 3*i*i*(e-o)+6*i*t*(n-e)+3*t*t*(a-n)},getRotation(t,e,n,a,i,r,s,c,h){const u=p(t,e,a,r,c),l=p(t,n,i,s,h);return Math.atan2(l,u)/o},getT(t,o,e,n,a,i,r,s,c,h,u=1){let l=0,f=1,g=t/o,m=u/o/3;if(g>=1)return 1;if(g<=0)return 0;for(;f-l>m;)M(e,n,a,i,r,s,c,h,g)<t?l=g:f=g,g=(l+f)/2;return g},cut(o,e,n,a,i,r,s,c,h,u){const l=1-e,f=l*n+e*i,g=l*a+e*r,m=l*i+e*s,d=l*r+e*c,_=l*f+e*m,P=l*g+e*d,p=l*_+e*(l*m+e*(l*s+e*h)),M=l*P+e*(l*d+e*(l*c+e*u));o.push(t.C,f,g,_,P,p,M)}},{getDerivative:p,getDistance:M}=P,{M:b,L:y,C:D,Z:x}=t,A={},k={},v={transform(t,o){let e,n=0;const a=t.length;for(;n<a;)switch(e=t[n],e){case b:case y:v.transformPoints(t,o,n,1),n+=3;break;case D:v.transformPoints(t,o,n,3),n+=7;break;case x:n+=1}},transformPoints(t,o,e,n){for(let a=e+1,r=a+2*n;a<r;a+=2)A.x=t[a],A.y=t[a+1],i.toOuterPoint(o,A),t[a]=A.x,t[a+1]=A.y},getMotionPathData(t){let o,e,a,i,r=0,s=[],c=0,h=0,u=0;const l=t.length;for(;c<l;){switch(i=t[c],i){case b:case y:e=t[c+1],a=t[c+2],o=i===y&&c>0?n.getDistanceFrom(h,u,e,a):0,h=e,u=a,c+=3;break;case D:e=t[c+5],a=t[c+6],o=P.getDistance(h,u,t[c+1],t[c+2],t[c+3],t[c+4],e,a),h=e,u=a,c+=7;break;case x:c+=1;default:o=0}s.push(o),r+=o}return{total:r,segments:s,data:t}},getDistancePoint(t,o,i){const{segments:r,data:s}=t;o=e.number(o,t.total);let c,h,u,l,f,g,m,d,_,p=0,M={},A=0,v=0,F=0,T=0;const C=s.length;for(;A<C;){switch(l=s[A],l){case b:case y:if(h=s[A+1],u=s[A+2],c=r[v],p+c>=o||!t.total)return A||(F=h,T=u),k.x=F,k.y=T,M.x=h,M.y=u,n.getDistancePoint(k,M,o-p,!0),M.rotation=n.getAngle(k,M),M;F=h,T=u,A+=3;break;case D:if(h=s[A+5],u=s[A+6],c=r[v],p+c>=o)return f=s[A+1],g=s[A+2],m=s[A+3],d=s[A+4],_=P.getT(o-p,c,F,T,f,g,m,d,h,u,i),a.getPointAndSet(_,F,T,f,g,m,d,h,u,M),M.rotation=P.getRotation(_,F,T,f,g,m,d,h,u),M;F=h,T=u,A+=7;break;case x:A+=1;default:c=0}v++,p+=c}return M},getDistancePath(t,o,a){const{segments:i,data:r}=t,s=[];o=e.number(o,t.total);let c,h,u,l,f,g,m,d,_,p=0,M={},A=0,v=0,F=0,T=0;const C=r.length;for(;A<C;){switch(l=r[A],l){case b:case y:if(h=r[A+1],u=r[A+2],c=i[v],p+c>=o||!t.total)return A||(F=h,T=u),k.x=F,k.y=T,M.x=h,M.y=u,n.getDistancePoint(k,M,o-p,!0),s.push(l,M.x,M.y),s;F=h,T=u,A+=3,s.push(l,F,T);break;case D:if(f=r[A+1],g=r[A+2],m=r[A+3],d=r[A+4],h=r[A+5],u=r[A+6],c=i[v],p+c>=o)return _=P.getT(o-p,c,F,T,f,g,m,d,h,u,a),P.cut(s,_,F,T,f,g,m,d,h,u),s;F=h,T=u,A+=7,s.push(l,f,g,m,d,h,u);break;case x:A+=1,s.push(l);default:c=0}v++,p+=c}return s}};function F(t){return r(t,(t=>s({set(o){this.__setAttr(t,o),this.__hasMotionPath=this.motionPath||!c(this.motion),this.__layout.matrixChanged||this.__layout.matrixChange()}})))}h.add("motion-path"),u.register("motion",(function(t,o,n,a){return t?"object"==typeof t&&(t=e.number(t,a.getMotionTotal())):t=0,o?"object"==typeof o&&(o=e.number(o,a.getMotionTotal())):o=0,u.number(t,o,n)})),u.register("motionRotation",(function(t,o,e){return u.number(t,o,e)}));const T=l.prototype,{updateMatrix:C,updateAllMatrix:R}=f,{updateBounds:w}=g;function j(t){const{motion:o,leaferIsCreated:e}=t;if(!c(o)){if(e&&(t.leafer.created=!1),t.motionPath){const e=L(t);e.total&&(t.__.__pathForRender=v.getDistancePath(e,o,t.motionPrecision))}else t.set(t.getMotionPoint(o)),t.__hasAutoLayout||(t.isBranch?(R(t),w(t,t)):C(t));e&&(t.leafer.created=!0)}}function B(t){const{parent:o}=t;if(!t.motionPath&&o){const{children:t}=o;for(let o=0;o<t.length;o++)if(t[o].motionPath)return t[o]}return t}function L(t){const o=t.__;return o.__pathForMotion?o.__pathForMotion:o.__pathForMotion=v.getMotionPathData(t.getPath(!0,!0))}l.addAttr("motionPath",void 0,F),l.addAttr("motionPrecision",1,F),l.addAttr("motion",void 0,F),l.addAttr("motionRotation",!0,F),T.getMotionPathData=function(){return L(B(this))},T.getMotionPoint=function(t){const o=B(this),e=L(o);if(!e.total)return{};const n=v.getDistancePoint(e,t,o.motionPrecision);i.toOuterPoint(o.localTransform,n);const{motionRotation:a}=this;return!1===a?delete n.rotation:"number"==typeof a&&(n.rotation+=a),n},T.getMotionTotal=function(){return this.getMotionPathData().total},T.__updateMotionPath=function(){const t=this.__;if(this.__layout.resized&&t.__pathForMotion&&(t.__pathForMotion=void 0),this.motionPath){let t;const{children:o}=this.parent;for(let e=0;e<o.length;e++)t=o[e],c(t.motion)||t.__layout.matrixChanged||(t!==this&&t.__extraUpdate(),j(t))}else j(this)};export{P as HighBezierHelper,v as HighCurveHelper,F as motionPathType};
1
+ import{BezierHelper as t,PathCommandMap as o,OneRadian as e,UnitConvert as n,PointHelper as a,MatrixHelper as i,decorateLeafAttr as r,attr as s,isNull as c,Plugin as h,Transition as u,UI as l,LeafHelper as f,BranchHelper as g}from"@leafer-ui/draw";const m=[.1488743389,.4333953941,.6794095682,.8650633666,.9739065285],d=[.2955242247,.2692667193,.2190863625,.1494513491,.0666713443],{sqrt:_}=Math,{getDerivative:P}=t,p={getDistance(t,o,e,n,a,i,r,s,c=1){let h,u,l,f,g,p,M=0,b=c/2;for(let c=0;c<m.length;c++)h=b*(1+m[c]),u=b*(1-m[c]),l=P(h,t,e,a,r),f=P(h,o,n,i,s),g=P(u,t,e,a,r),p=P(u,o,n,i,s),M+=d[c]*(_(l*l+f*f)+_(g*g+p*p));return M*b},getRotation(t,o,n,a,i,r,s,c,h){const u=P(t,o,a,r,c),l=P(t,n,i,s,h);return Math.atan2(l,u)/e},getT(t,o,e,n,a,i,r,s,c,h,u=1){let l=0,f=1,g=t/o,m=u/o/3;if(g>=1)return 1;if(g<=0)return 0;for(;f-l>m;)M(e,n,a,i,r,s,c,h,g)<t?l=g:f=g,g=(l+f)/2;return g},cut(t,e,n,a,i,r,s,c,h,u){const l=1-e,f=l*n+e*i,g=l*a+e*r,m=l*i+e*s,d=l*r+e*c,_=l*f+e*m,P=l*g+e*d,p=l*_+e*(l*m+e*(l*s+e*h)),M=l*P+e*(l*d+e*(l*c+e*u));t.push(o.C,f,g,_,P,p,M)}},{getDistance:M}=p,{M:b,L:y,C:D,Z:x}=o,A={},k={},F={transform(t,o){let e,n=0;const a=t.length;for(;n<a;)switch(e=t[n],e){case b:case y:F.transformPoints(t,o,n,1),n+=3;break;case D:F.transformPoints(t,o,n,3),n+=7;break;case x:n+=1}},transformPoints(t,o,e,n){for(let a=e+1,r=a+2*n;a<r;a+=2)A.x=t[a],A.y=t[a+1],i.toOuterPoint(o,A),t[a]=A.x,t[a+1]=A.y},getMotionPathData(t){let o,e,n,i,r=0,s=[],c=0,h=0,u=0;const l=t.length;for(;c<l;){switch(i=t[c],i){case b:case y:e=t[c+1],n=t[c+2],o=i===y&&c>0?a.getDistanceFrom(h,u,e,n):0,h=e,u=n,c+=3;break;case D:e=t[c+5],n=t[c+6],o=p.getDistance(h,u,t[c+1],t[c+2],t[c+3],t[c+4],e,n),h=e,u=n,c+=7;break;case x:c+=1;default:o=0}s.push(o),r+=o}return{total:r,segments:s,data:t}},getDistancePoint(o,e,i){const{segments:r,data:s}=o;e=n.number(e,o.total);let c,h,u,l,f,g,m,d,_,P=0,M={},A=0,F=0,T=0,C=0;const R=s.length;for(;A<R;){switch(l=s[A],l){case b:case y:if(h=s[A+1],u=s[A+2],c=r[F],P+c>=e||!o.total)return A||(T=h,C=u),k.x=T,k.y=C,M.x=h,M.y=u,a.getDistancePoint(k,M,e-P,!0),M.rotation=a.getAngle(k,M),M;T=h,C=u,A+=3;break;case D:if(h=s[A+5],u=s[A+6],c=r[F],P+c>=e)return f=s[A+1],g=s[A+2],m=s[A+3],d=s[A+4],_=p.getT(e-P,c,T,C,f,g,m,d,h,u,i),t.getPointAndSet(_,T,C,f,g,m,d,h,u,M),M.rotation=p.getRotation(_,T,C,f,g,m,d,h,u),M;T=h,C=u,A+=7;break;case x:A+=1;default:c=0}F++,P+=c}return M},getDistancePath(t,o,e){const{segments:i,data:r}=t,s=[];o=n.number(o,t.total);let c,h,u,l,f,g,m,d,_,P=0,M={},A=0,F=0,T=0,C=0;const R=r.length;for(;A<R;){switch(l=r[A],l){case b:case y:if(h=r[A+1],u=r[A+2],c=i[F],P+c>=o||!t.total)return A||(T=h,C=u),k.x=T,k.y=C,M.x=h,M.y=u,a.getDistancePoint(k,M,o-P,!0),s.push(l,M.x,M.y),s;T=h,C=u,A+=3,s.push(l,T,C);break;case D:if(f=r[A+1],g=r[A+2],m=r[A+3],d=r[A+4],h=r[A+5],u=r[A+6],c=i[F],P+c>=o)return _=p.getT(o-P,c,T,C,f,g,m,d,h,u,e),p.cut(s,_,T,C,f,g,m,d,h,u),s;T=h,C=u,A+=7,s.push(l,f,g,m,d,h,u);break;case x:A+=1,s.push(l);default:c=0}F++,P+=c}return s}};function T(t){return r(t,(t=>s({set(o){this.__setAttr(t,o),this.__hasMotionPath=this.motionPath||!c(this.motion),this.__layout.matrixChanged||this.__layout.matrixChange()}})))}h.add("motion-path"),u.register("motion",(function(t,o,e,a){return t?"object"==typeof t&&(t=n.number(t,a.getMotionTotal())):t=0,o?"object"==typeof o&&(o=n.number(o,a.getMotionTotal())):o=0,u.number(t,o,e)})),u.register("motionRotation",(function(t,o,e){return u.number(t,o,e)}));const C=l.prototype,{updateMatrix:R,updateAllMatrix:v}=f,{updateBounds:w}=g;function j(t){const{motion:o,leaferIsCreated:e}=t;if(!c(o)){if(e&&(t.leafer.created=!1),t.motionPath){const e=L(t);e.total&&(t.__.__pathForRender=F.getDistancePath(e,o,t.motionPrecision))}else t.set(t.getMotionPoint(o)),t.__hasAutoLayout||(t.isBranch?(v(t),w(t,t)):R(t));e&&(t.leafer.created=!0)}}function B(t){const{parent:o}=t;if(!t.motionPath&&o){const{children:t}=o;for(let o=0;o<t.length;o++)if(t[o].motionPath)return t[o]}return t}function L(t){const o=t.__;return o.__pathForMotion?o.__pathForMotion:o.__pathForMotion=F.getMotionPathData(t.getPath(!0,!0))}l.addAttr("motionPath",void 0,T),l.addAttr("motionPrecision",1,T),l.addAttr("motion",void 0,T),l.addAttr("motionRotation",!0,T),C.getMotionPathData=function(){return L(B(this))},C.getMotionPoint=function(t){const o=B(this),e=L(o);if(!e.total)return{};const n=F.getDistancePoint(e,t,o.motionPrecision);i.toOuterPoint(o.localTransform,n);const{motionRotation:a}=this;return!1===a?delete n.rotation:"number"==typeof a&&(n.rotation+=a),n},C.getMotionTotal=function(){return this.getMotionPathData().total},C.__updateMotionPath=function(){const t=this.__;if(this.__layout.resized&&t.__pathForMotion&&(t.__pathForMotion=void 0),this.motionPath){let t;const{children:o}=this.parent;for(let e=0;e<o.length;e++)t=o[e],c(t.motion)||t.__layout.matrixChanged||(t!==this&&t.__extraUpdate(),j(t))}else j(this)};export{p as HighBezierHelper,F as HighCurveHelper,T as motionPathType};
2
2
  //# sourceMappingURL=motion-path.esm.min.js.map
@@ -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 { 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\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 getDerivative(t: number, fromV: number, v1: number, v2: number, toV: number): number { // 导数\n const o = 1 - t\n return 3 * o * o * (v1 - fromV) + 6 * o * t * (v2 - v1) + 3 * t * t * (toV - v2)\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 { getDerivative, getDistance } = HighBezierHelper","import { IMatrixData, IPathCommandData, IMotionPathData, IRotationPointData, IPointData, IUnitData } from '@leafer-ui/interface'\nimport { BezierHelper, MatrixHelper, PathCommandMap, PointHelper, UnitConvert } from '@leafer-ui/draw'\n\nimport { HighBezierHelper } from './HighBezierHelper'\n\n\nconst { M, L, C, Z } = PathCommandMap\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, 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 path.push(command, to.x, to.y)\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 t = HighBezierHelper.getT(motionDistance - total, distance, x, y, x1, y1, x2, y2, toX, toY, motionPrecision)\n HighBezierHelper.cut(path, t, x, y, x1, y1, x2, y2, toX, toY)\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 } from '@leafer-ui/interface'\nimport { isNull, MatrixHelper, LeafHelper, BranchHelper, Transition, UI, UnitConvert, Plugin } 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: any, to: any, t: number, target: IUI): number {\n if (!from) from = 0\n else if (typeof from === 'object') from = UnitConvert.number(from, target.getMotionTotal())\n if (!to) to = 0\n else if (typeof to === 'object') to = UnitConvert.number(to, target.getMotionTotal())\n return Transition.number(from, to, 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 (typeof motionRotation === 'number') 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","HighBezierHelper","getDistance","fromX","fromY","x1","y1","x2","y2","toX","toY","t","t1","t2","d1X","d1Y","d2X","d2Y","distance","half","i","length","getDerivative","fromV","v1","v2","toV","o","getRotation","dx","dy","atan2","OneRadian","getT","totalDistance","precision","low","high","middle","realPrecision","cut","data","ax","ay","mbx","mby","bx","by","cx","cy","push","PathCommandMap","C","M","L","Z","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","BezierHelper","getPointAndSet","getDistancePath","path","motionPathType","defaultValue","decorateLeafAttr","key","attr","set","value","this","__setAttr","__hasMotionPath","motionPath","isNull","motion","__layout","matrixChanged","matrixChange","Plugin","add","Transition","register","from","target","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","__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, PathCommandMap, PointHelper, UnitConvert } from '@leafer-ui/draw'\n\nimport { HighBezierHelper } from './HighBezierHelper'\n\n\nconst { M, L, C, Z } = PathCommandMap\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, 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 path.push(command, to.x, to.y)\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 t = HighBezierHelper.getT(motionDistance - total, distance, x, y, x1, y1, x2, y2, toX, toY, motionPrecision)\n HighBezierHelper.cut(path, t, x, y, x1, y1, x2, y2, toX, toY)\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 } from '@leafer-ui/interface'\nimport { isNull, MatrixHelper, LeafHelper, BranchHelper, Transition, UI, UnitConvert, Plugin } 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: any, to: any, t: number, target: IUI): number {\n if (!from) from = 0\n else if (typeof from === 'object') from = UnitConvert.number(from, target.getMotionTotal())\n if (!to) to = 0\n else if (typeof to === 'object') to = UnitConvert.number(to, target.getMotionTotal())\n return Transition.number(from, to, 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 (typeof motionRotation === 'number') 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","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","motionPathType","defaultValue","decorateLeafAttr","key","attr","set","value","this","__setAttr","__hasMotionPath","motionPath","isNull","motion","__layout","matrixChanged","matrixChange","Plugin","add","Transition","register","from","target","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","__updateMotionPath","resized","child","__extraUpdate"],"mappings":"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"}
@@ -5,6 +5,7 @@ this.LeaferIN.motionPath = (function (exports, draw) {
5
5
  const gaussNodes = [0.1488743389, 0.4333953941, 0.6794095682, 0.8650633666, 0.9739065285];
6
6
  const gaussWeights = [0.2955242247, 0.2692667193, 0.2190863625, 0.1494513491, 0.0666713443];
7
7
  const { sqrt } = Math;
8
+ const { getDerivative } = draw.BezierHelper;
8
9
  const HighBezierHelper = {
9
10
  getDistance(fromX, fromY, x1, y1, x2, y2, toX, toY, t = 1) {
10
11
  let distance = 0, t1, t2, d1X, d1Y, d2X, d2Y, half = t / 2;
@@ -19,10 +20,6 @@ this.LeaferIN.motionPath = (function (exports, draw) {
19
20
  }
20
21
  return distance * half;
21
22
  },
22
- getDerivative(t, fromV, v1, v2, toV) {
23
- const o = 1 - t;
24
- return 3 * o * o * (v1 - fromV) + 6 * o * t * (v2 - v1) + 3 * t * t * (toV - v2);
25
- },
26
23
  getRotation(t, fromX, fromY, x1, y1, x2, y2, toX, toY) {
27
24
  const dx = getDerivative(t, fromX, x1, x2, toX);
28
25
  const dy = getDerivative(t, fromY, y1, y2, toY);
@@ -51,7 +48,7 @@ this.LeaferIN.motionPath = (function (exports, draw) {
51
48
  data.push(draw.PathCommandMap.C, ax, ay, bx, by, cx, cy);
52
49
  }
53
50
  };
54
- const { getDerivative, getDistance } = HighBezierHelper;
51
+ const { getDistance } = HighBezierHelper;
55
52
 
56
53
  const { M, L, C, Z } = draw.PathCommandMap;
57
54
  const tempPoint = {}, tempFrom = {};
@@ -352,4 +349,3 @@ this.LeaferIN.motionPath = (function (exports, draw) {
352
349
  return exports;
353
350
 
354
351
  })({}, LeaferUI);
355
- //# sourceMappingURL=motion-path.js.map
@@ -1,2 +1,2 @@
1
- "use strict";var t=require("@leafer-ui/draw");const e=[.1488743389,.4333953941,.6794095682,.8650633666,.9739065285],o=[.2955242247,.2692667193,.2190863625,.1494513491,.0666713443],{sqrt:n}=Math,r={getDistance(t,r,i,s,c,u,h,l,f=1){let g,m,p,d,P,_,M=0,x=f/2;for(let f=0;f<e.length;f++)g=x*(1+e[f]),m=x*(1-e[f]),p=a(g,t,i,c,h),d=a(g,r,s,u,l),P=a(m,t,i,c,h),_=a(m,r,s,u,l),M+=o[f]*(n(p*p+d*d)+n(P*P+_*_));return M*x},getDerivative(t,e,o,n,r){const a=1-t;return 3*a*a*(o-e)+6*a*t*(n-o)+3*t*t*(r-n)},getRotation(e,o,n,r,i,s,c,u,h){const l=a(e,o,r,s,u),f=a(e,n,i,c,h);return Math.atan2(f,l)/t.OneRadian},getT(t,e,o,n,r,a,s,c,u,h,l=1){let f=0,g=1,m=t/e,p=l/e/3;if(m>=1)return 1;if(m<=0)return 0;for(;g-f>p;)i(o,n,r,a,s,c,u,h,m)<t?f=m:g=m,m=(f+g)/2;return m},cut(e,o,n,r,a,i,s,c,u,h){const l=1-o,f=l*n+o*a,g=l*r+o*i,m=l*a+o*s,p=l*i+o*c,d=l*f+o*m,P=l*g+o*p,_=l*d+o*(l*m+o*(l*s+o*u)),M=l*P+o*(l*p+o*(l*c+o*h));e.push(t.PathCommandMap.C,f,g,d,P,_,M)}},{getDerivative:a,getDistance:i}=r,{M:s,L:c,C:u,Z:h}=t.PathCommandMap,l={},f={},g={transform(t,e){let o,n=0;const r=t.length;for(;n<r;)switch(o=t[n],o){case s:case c:g.transformPoints(t,e,n,1),n+=3;break;case u:g.transformPoints(t,e,n,3),n+=7;break;case h:n+=1}},transformPoints(e,o,n,r){for(let a=n+1,i=a+2*r;a<i;a+=2)l.x=e[a],l.y=e[a+1],t.MatrixHelper.toOuterPoint(o,l),e[a]=l.x,e[a+1]=l.y},getMotionPathData(e){let o,n,a,i,l=0,f=[],g=0,m=0,p=0;const d=e.length;for(;g<d;){switch(i=e[g],i){case s:case c:n=e[g+1],a=e[g+2],o=i===c&&g>0?t.PointHelper.getDistanceFrom(m,p,n,a):0,m=n,p=a,g+=3;break;case u:n=e[g+5],a=e[g+6],o=r.getDistance(m,p,e[g+1],e[g+2],e[g+3],e[g+4],n,a),m=n,p=a,g+=7;break;case h:g+=1;default:o=0}f.push(o),l+=o}return{total:l,segments:f,data:e}},getDistancePoint(e,o,n){const{segments:a,data:i}=e;o=t.UnitConvert.number(o,e.total);let l,g,m,p,d,P,_,M,x,b=0,y={},D=0,v=0,C=0,H=0;const T=i.length;for(;D<T;){switch(p=i[D],p){case s:case c:if(g=i[D+1],m=i[D+2],l=a[v],b+l>=o||!e.total)return D||(C=g,H=m),f.x=C,f.y=H,y.x=g,y.y=m,t.PointHelper.getDistancePoint(f,y,o-b,!0),y.rotation=t.PointHelper.getAngle(f,y),y;C=g,H=m,D+=3;break;case u:if(g=i[D+5],m=i[D+6],l=a[v],b+l>=o)return d=i[D+1],P=i[D+2],_=i[D+3],M=i[D+4],x=r.getT(o-b,l,C,H,d,P,_,M,g,m,n),t.BezierHelper.getPointAndSet(x,C,H,d,P,_,M,g,m,y),y.rotation=r.getRotation(x,C,H,d,P,_,M,g,m),y;C=g,H=m,D+=7;break;case h:D+=1;default:l=0}v++,b+=l}return y},getDistancePath(e,o,n){const{segments:a,data:i}=e,l=[];o=t.UnitConvert.number(o,e.total);let g,m,p,d,P,_,M,x,b,y=0,D={},v=0,C=0,H=0,T=0;const A=i.length;for(;v<A;){switch(d=i[v],d){case s:case c:if(m=i[v+1],p=i[v+2],g=a[C],y+g>=o||!e.total)return v||(H=m,T=p),f.x=H,f.y=T,D.x=m,D.y=p,t.PointHelper.getDistancePoint(f,D,o-y,!0),l.push(d,D.x,D.y),l;H=m,T=p,v+=3,l.push(d,H,T);break;case u:if(P=i[v+1],_=i[v+2],M=i[v+3],x=i[v+4],m=i[v+5],p=i[v+6],g=a[C],y+g>=o)return b=r.getT(o-y,g,H,T,P,_,M,x,m,p,n),r.cut(l,b,H,T,P,_,M,x,m,p),l;H=m,T=p,v+=7,l.push(d,P,_,M,x,m,p);break;case h:v+=1,l.push(d);default:g=0}C++,y+=g}return l}};function m(e){return t.decorateLeafAttr(e,(e=>t.attr({set(o){this.__setAttr(e,o),this.__hasMotionPath=this.motionPath||!t.isNull(this.motion),this.__layout.matrixChanged||this.__layout.matrixChange()}})))}t.Plugin.add("motion-path"),t.Transition.register("motion",(function(e,o,n,r){return e?"object"==typeof e&&(e=t.UnitConvert.number(e,r.getMotionTotal())):e=0,o?"object"==typeof o&&(o=t.UnitConvert.number(o,r.getMotionTotal())):o=0,t.Transition.number(e,o,n)})),t.Transition.register("motionRotation",(function(e,o,n){return t.Transition.number(e,o,n)}));const p=t.UI.prototype,{updateMatrix:d,updateAllMatrix:P}=t.LeafHelper,{updateBounds:_}=t.BranchHelper;function M(e){const{motion:o,leaferIsCreated:n}=e;if(!t.isNull(o)){if(n&&(e.leafer.created=!1),e.motionPath){const t=b(e);t.total&&(e.__.__pathForRender=g.getDistancePath(t,o,e.motionPrecision))}else e.set(e.getMotionPoint(o)),e.__hasAutoLayout||(e.isBranch?(P(e),_(e,e)):d(e));n&&(e.leafer.created=!0)}}function x(t){const{parent:e}=t;if(!t.motionPath&&e){const{children:t}=e;for(let e=0;e<t.length;e++)if(t[e].motionPath)return t[e]}return t}function b(t){const e=t.__;return e.__pathForMotion?e.__pathForMotion:e.__pathForMotion=g.getMotionPathData(t.getPath(!0,!0))}t.UI.addAttr("motionPath",void 0,m),t.UI.addAttr("motionPrecision",1,m),t.UI.addAttr("motion",void 0,m),t.UI.addAttr("motionRotation",!0,m),p.getMotionPathData=function(){return b(x(this))},p.getMotionPoint=function(e){const o=x(this),n=b(o);if(!n.total)return{};const r=g.getDistancePoint(n,e,o.motionPrecision);t.MatrixHelper.toOuterPoint(o.localTransform,r);const{motionRotation:a}=this;return!1===a?delete r.rotation:"number"==typeof a&&(r.rotation+=a),r},p.getMotionTotal=function(){return this.getMotionPathData().total},p.__updateMotionPath=function(){const e=this.__;if(this.__layout.resized&&e.__pathForMotion&&(e.__pathForMotion=void 0),this.motionPath){let e;const{children:o}=this.parent;for(let n=0;n<o.length;n++)e=o[n],t.isNull(e.motion)||e.__layout.matrixChanged||(e!==this&&e.__extraUpdate(),M(e))}else M(this)},exports.HighBezierHelper=r,exports.HighCurveHelper=g,exports.motionPathType=m;
1
+ "use strict";var t=require("@leafer-ui/draw");const e=[.1488743389,.4333953941,.6794095682,.8650633666,.9739065285],o=[.2955242247,.2692667193,.2190863625,.1494513491,.0666713443],{sqrt:n}=Math,{getDerivative:r}=t.BezierHelper,a={getDistance(t,a,i,s,c,h,u,l,f=1){let g,p,m,d,P,_,M=0,x=f/2;for(let f=0;f<e.length;f++)g=x*(1+e[f]),p=x*(1-e[f]),m=r(g,t,i,c,u),d=r(g,a,s,h,l),P=r(p,t,i,c,u),_=r(p,a,s,h,l),M+=o[f]*(n(m*m+d*d)+n(P*P+_*_));return M*x},getRotation(e,o,n,a,i,s,c,h,u){const l=r(e,o,a,s,h),f=r(e,n,i,c,u);return Math.atan2(f,l)/t.OneRadian},getT(t,e,o,n,r,a,s,c,h,u,l=1){let f=0,g=1,p=t/e,m=l/e/3;if(p>=1)return 1;if(p<=0)return 0;for(;g-f>m;)i(o,n,r,a,s,c,h,u,p)<t?f=p:g=p,p=(f+g)/2;return p},cut(e,o,n,r,a,i,s,c,h,u){const l=1-o,f=l*n+o*a,g=l*r+o*i,p=l*a+o*s,m=l*i+o*c,d=l*f+o*p,P=l*g+o*m,_=l*d+o*(l*p+o*(l*s+o*h)),M=l*P+o*(l*m+o*(l*c+o*u));e.push(t.PathCommandMap.C,f,g,d,P,_,M)}},{getDistance:i}=a,{M:s,L:c,C:h,Z:u}=t.PathCommandMap,l={},f={},g={transform(t,e){let o,n=0;const r=t.length;for(;n<r;)switch(o=t[n],o){case s:case c:g.transformPoints(t,e,n,1),n+=3;break;case h:g.transformPoints(t,e,n,3),n+=7;break;case u:n+=1}},transformPoints(e,o,n,r){for(let a=n+1,i=a+2*r;a<i;a+=2)l.x=e[a],l.y=e[a+1],t.MatrixHelper.toOuterPoint(o,l),e[a]=l.x,e[a+1]=l.y},getMotionPathData(e){let o,n,r,i,l=0,f=[],g=0,p=0,m=0;const d=e.length;for(;g<d;){switch(i=e[g],i){case s:case c:n=e[g+1],r=e[g+2],o=i===c&&g>0?t.PointHelper.getDistanceFrom(p,m,n,r):0,p=n,m=r,g+=3;break;case h:n=e[g+5],r=e[g+6],o=a.getDistance(p,m,e[g+1],e[g+2],e[g+3],e[g+4],n,r),p=n,m=r,g+=7;break;case u:g+=1;default:o=0}f.push(o),l+=o}return{total:l,segments:f,data:e}},getDistancePoint(e,o,n){const{segments:r,data:i}=e;o=t.UnitConvert.number(o,e.total);let l,g,p,m,d,P,_,M,x,b=0,y={},D=0,H=0,C=0,T=0;const v=i.length;for(;D<v;){switch(m=i[D],m){case s:case c:if(g=i[D+1],p=i[D+2],l=r[H],b+l>=o||!e.total)return D||(C=g,T=p),f.x=C,f.y=T,y.x=g,y.y=p,t.PointHelper.getDistancePoint(f,y,o-b,!0),y.rotation=t.PointHelper.getAngle(f,y),y;C=g,T=p,D+=3;break;case h:if(g=i[D+5],p=i[D+6],l=r[H],b+l>=o)return d=i[D+1],P=i[D+2],_=i[D+3],M=i[D+4],x=a.getT(o-b,l,C,T,d,P,_,M,g,p,n),t.BezierHelper.getPointAndSet(x,C,T,d,P,_,M,g,p,y),y.rotation=a.getRotation(x,C,T,d,P,_,M,g,p),y;C=g,T=p,D+=7;break;case u:D+=1;default:l=0}H++,b+=l}return y},getDistancePath(e,o,n){const{segments:r,data:i}=e,l=[];o=t.UnitConvert.number(o,e.total);let g,p,m,d,P,_,M,x,b,y=0,D={},H=0,C=0,T=0,v=0;const A=i.length;for(;H<A;){switch(d=i[H],d){case s:case c:if(p=i[H+1],m=i[H+2],g=r[C],y+g>=o||!e.total)return H||(T=p,v=m),f.x=T,f.y=v,D.x=p,D.y=m,t.PointHelper.getDistancePoint(f,D,o-y,!0),l.push(d,D.x,D.y),l;T=p,v=m,H+=3,l.push(d,T,v);break;case h:if(P=i[H+1],_=i[H+2],M=i[H+3],x=i[H+4],p=i[H+5],m=i[H+6],g=r[C],y+g>=o)return b=a.getT(o-y,g,T,v,P,_,M,x,p,m,n),a.cut(l,b,T,v,P,_,M,x,p,m),l;T=p,v=m,H+=7,l.push(d,P,_,M,x,p,m);break;case u:H+=1,l.push(d);default:g=0}C++,y+=g}return l}};function p(e){return t.decorateLeafAttr(e,(e=>t.attr({set(o){this.__setAttr(e,o),this.__hasMotionPath=this.motionPath||!t.isNull(this.motion),this.__layout.matrixChanged||this.__layout.matrixChange()}})))}t.Plugin.add("motion-path"),t.Transition.register("motion",(function(e,o,n,r){return e?"object"==typeof e&&(e=t.UnitConvert.number(e,r.getMotionTotal())):e=0,o?"object"==typeof o&&(o=t.UnitConvert.number(o,r.getMotionTotal())):o=0,t.Transition.number(e,o,n)})),t.Transition.register("motionRotation",(function(e,o,n){return t.Transition.number(e,o,n)}));const m=t.UI.prototype,{updateMatrix:d,updateAllMatrix:P}=t.LeafHelper,{updateBounds:_}=t.BranchHelper;function M(e){const{motion:o,leaferIsCreated:n}=e;if(!t.isNull(o)){if(n&&(e.leafer.created=!1),e.motionPath){const t=b(e);t.total&&(e.__.__pathForRender=g.getDistancePath(t,o,e.motionPrecision))}else e.set(e.getMotionPoint(o)),e.__hasAutoLayout||(e.isBranch?(P(e),_(e,e)):d(e));n&&(e.leafer.created=!0)}}function x(t){const{parent:e}=t;if(!t.motionPath&&e){const{children:t}=e;for(let e=0;e<t.length;e++)if(t[e].motionPath)return t[e]}return t}function b(t){const e=t.__;return e.__pathForMotion?e.__pathForMotion:e.__pathForMotion=g.getMotionPathData(t.getPath(!0,!0))}t.UI.addAttr("motionPath",void 0,p),t.UI.addAttr("motionPrecision",1,p),t.UI.addAttr("motion",void 0,p),t.UI.addAttr("motionRotation",!0,p),m.getMotionPathData=function(){return b(x(this))},m.getMotionPoint=function(e){const o=x(this),n=b(o);if(!n.total)return{};const r=g.getDistancePoint(n,e,o.motionPrecision);t.MatrixHelper.toOuterPoint(o.localTransform,r);const{motionRotation:a}=this;return!1===a?delete r.rotation:"number"==typeof a&&(r.rotation+=a),r},m.getMotionTotal=function(){return this.getMotionPathData().total},m.__updateMotionPath=function(){const e=this.__;if(this.__layout.resized&&e.__pathForMotion&&(e.__pathForMotion=void 0),this.motionPath){let e;const{children:o}=this.parent;for(let n=0;n<o.length;n++)e=o[n],t.isNull(e.motion)||e.__layout.matrixChanged||(e!==this&&e.__extraUpdate(),M(e))}else M(this)},exports.HighBezierHelper=a,exports.HighCurveHelper=g,exports.motionPathType=p;
2
2
  //# sourceMappingURL=motion-path.min.cjs.map
@@ -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 { 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\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 getDerivative(t: number, fromV: number, v1: number, v2: number, toV: number): number { // 导数\n const o = 1 - t\n return 3 * o * o * (v1 - fromV) + 6 * o * t * (v2 - v1) + 3 * t * t * (toV - v2)\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 { getDerivative, getDistance } = HighBezierHelper","import { IMatrixData, IPathCommandData, IMotionPathData, IRotationPointData, IPointData, IUnitData } from '@leafer-ui/interface'\nimport { BezierHelper, MatrixHelper, PathCommandMap, PointHelper, UnitConvert } from '@leafer-ui/draw'\n\nimport { HighBezierHelper } from './HighBezierHelper'\n\n\nconst { M, L, C, Z } = PathCommandMap\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, 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 path.push(command, to.x, to.y)\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 t = HighBezierHelper.getT(motionDistance - total, distance, x, y, x1, y1, x2, y2, toX, toY, motionPrecision)\n HighBezierHelper.cut(path, t, x, y, x1, y1, x2, y2, toX, toY)\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 } from '@leafer-ui/interface'\nimport { isNull, MatrixHelper, LeafHelper, BranchHelper, Transition, UI, UnitConvert, Plugin } 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: any, to: any, t: number, target: IUI): number {\n if (!from) from = 0\n else if (typeof from === 'object') from = UnitConvert.number(from, target.getMotionTotal())\n if (!to) to = 0\n else if (typeof to === 'object') to = UnitConvert.number(to, target.getMotionTotal())\n return Transition.number(from, to, 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 (typeof motionRotation === 'number') 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","HighBezierHelper","getDistance","fromX","fromY","x1","y1","x2","y2","toX","toY","t","t1","t2","d1X","d1Y","d2X","d2Y","distance","half","i","length","getDerivative","fromV","v1","v2","toV","o","getRotation","dx","dy","atan2","OneRadian","getT","totalDistance","precision","low","high","middle","realPrecision","cut","data","ax","ay","mbx","mby","bx","by","cx","cy","push","PathCommandMap","C","M","L","Z","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","BezierHelper","getPointAndSet","getDistancePath","path","motionPathType","defaultValue","decorateLeafAttr","key","attr","set","value","this","__setAttr","__hasMotionPath","motionPath","isNull","motion","__layout","matrixChanged","matrixChange","Plugin","add","Transition","register","from","target","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","__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, PathCommandMap, PointHelper, UnitConvert } from '@leafer-ui/draw'\n\nimport { HighBezierHelper } from './HighBezierHelper'\n\n\nconst { M, L, C, Z } = PathCommandMap\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, 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 path.push(command, to.x, to.y)\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 t = HighBezierHelper.getT(motionDistance - total, distance, x, y, x1, y1, x2, y2, toX, toY, motionPrecision)\n HighBezierHelper.cut(path, t, x, y, x1, y1, x2, y2, toX, toY)\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 } from '@leafer-ui/interface'\nimport { isNull, MatrixHelper, LeafHelper, BranchHelper, Transition, UI, UnitConvert, Plugin } 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: any, to: any, t: number, target: IUI): number {\n if (!from) from = 0\n else if (typeof from === 'object') from = UnitConvert.number(from, target.getMotionTotal())\n if (!to) to = 0\n else if (typeof to === 'object') to = UnitConvert.number(to, target.getMotionTotal())\n return Transition.number(from, to, 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 (typeof motionRotation === 'number') 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","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","motionPathType","defaultValue","decorateLeafAttr","key","attr","set","value","this","__setAttr","__hasMotionPath","motionPath","isNull","motion","__layout","matrixChanged","matrixChange","Plugin","add","Transition","register","from","target","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","__updateMotionPath","resized","child","__extraUpdate"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- this.LeaferIN=this.LeaferIN||{},this.LeaferIN.motionPath=function(t,e){"use strict";const o=[.1488743389,.4333953941,.6794095682,.8650633666,.9739065285],n=[.2955242247,.2692667193,.2190863625,.1494513491,.0666713443],{sqrt:a}=Math,i={getDistance(t,e,i,s,c,h,u,l,f=1){let g,m,d,p,P,_,M=0,b=f/2;for(let f=0;f<o.length;f++)g=b*(1+o[f]),m=b*(1-o[f]),d=r(g,t,i,c,u),p=r(g,e,s,h,l),P=r(m,t,i,c,u),_=r(m,e,s,h,l),M+=n[f]*(a(d*d+p*p)+a(P*P+_*_));return M*b},getDerivative(t,e,o,n,a){const i=1-t;return 3*i*i*(o-e)+6*i*t*(n-o)+3*t*t*(a-n)},getRotation(t,o,n,a,i,s,c,h,u){const l=r(t,o,a,s,h),f=r(t,n,i,c,u);return Math.atan2(f,l)/e.OneRadian},getT(t,e,o,n,a,i,r,c,h,u,l=1){let f=0,g=1,m=t/e,d=l/e/3;if(m>=1)return 1;if(m<=0)return 0;for(;g-f>d;)s(o,n,a,i,r,c,h,u,m)<t?f=m:g=m,m=(f+g)/2;return m},cut(t,o,n,a,i,r,s,c,h,u){const l=1-o,f=l*n+o*i,g=l*a+o*r,m=l*i+o*s,d=l*r+o*c,p=l*f+o*m,P=l*g+o*d,_=l*p+o*(l*m+o*(l*s+o*h)),M=l*P+o*(l*d+o*(l*c+o*u));t.push(e.PathCommandMap.C,f,g,p,P,_,M)}},{getDerivative:r,getDistance:s}=i,{M:c,L:h,C:u,Z:l}=e.PathCommandMap,f={},g={},m={transform(t,e){let o,n=0;const a=t.length;for(;n<a;)switch(o=t[n],o){case c:case h:m.transformPoints(t,e,n,1),n+=3;break;case u:m.transformPoints(t,e,n,3),n+=7;break;case l:n+=1}},transformPoints(t,o,n,a){for(let i=n+1,r=i+2*a;i<r;i+=2)f.x=t[i],f.y=t[i+1],e.MatrixHelper.toOuterPoint(o,f),t[i]=f.x,t[i+1]=f.y},getMotionPathData(t){let o,n,a,r,s=0,f=[],g=0,m=0,d=0;const p=t.length;for(;g<p;){switch(r=t[g],r){case c:case h:n=t[g+1],a=t[g+2],o=r===h&&g>0?e.PointHelper.getDistanceFrom(m,d,n,a):0,m=n,d=a,g+=3;break;case u:n=t[g+5],a=t[g+6],o=i.getDistance(m,d,t[g+1],t[g+2],t[g+3],t[g+4],n,a),m=n,d=a,g+=7;break;case l:g+=1;default:o=0}f.push(o),s+=o}return{total:s,segments:f,data:t}},getDistancePoint(t,o,n){const{segments:a,data:r}=t;o=e.UnitConvert.number(o,t.total);let s,f,m,d,p,P,_,M,b,y=0,D={},x=0,C=0,H=0,v=0;const T=r.length;for(;x<T;){switch(d=r[x],d){case c:case h:if(f=r[x+1],m=r[x+2],s=a[C],y+s>=o||!t.total)return x||(H=f,v=m),g.x=H,g.y=v,D.x=f,D.y=m,e.PointHelper.getDistancePoint(g,D,o-y,!0),D.rotation=e.PointHelper.getAngle(g,D),D;H=f,v=m,x+=3;break;case u:if(f=r[x+5],m=r[x+6],s=a[C],y+s>=o)return p=r[x+1],P=r[x+2],_=r[x+3],M=r[x+4],b=i.getT(o-y,s,H,v,p,P,_,M,f,m,n),e.BezierHelper.getPointAndSet(b,H,v,p,P,_,M,f,m,D),D.rotation=i.getRotation(b,H,v,p,P,_,M,f,m),D;H=f,v=m,x+=7;break;case l:x+=1;default:s=0}C++,y+=s}return D},getDistancePath(t,o,n){const{segments:a,data:r}=t,s=[];o=e.UnitConvert.number(o,t.total);let f,m,d,p,P,_,M,b,y,D=0,x={},C=0,H=0,v=0,T=0;const U=r.length;for(;C<U;){switch(p=r[C],p){case c:case h:if(m=r[C+1],d=r[C+2],f=a[H],D+f>=o||!t.total)return C||(v=m,T=d),g.x=v,g.y=T,x.x=m,x.y=d,e.PointHelper.getDistancePoint(g,x,o-D,!0),s.push(p,x.x,x.y),s;v=m,T=d,C+=3,s.push(p,v,T);break;case u:if(P=r[C+1],_=r[C+2],M=r[C+3],b=r[C+4],m=r[C+5],d=r[C+6],f=a[H],D+f>=o)return y=i.getT(o-D,f,v,T,P,_,M,b,m,d,n),i.cut(s,y,v,T,P,_,M,b,m,d),s;v=m,T=d,C+=7,s.push(p,P,_,M,b,m,d);break;case l:C+=1,s.push(p);default:f=0}H++,D+=f}return s}};function d(t){return e.decorateLeafAttr(t,(t=>e.attr({set(o){this.__setAttr(t,o),this.__hasMotionPath=this.motionPath||!e.isNull(this.motion),this.__layout.matrixChanged||this.__layout.matrixChange()}})))}e.Plugin.add("motion-path"),e.Transition.register("motion",(function(t,o,n,a){return t?"object"==typeof t&&(t=e.UnitConvert.number(t,a.getMotionTotal())):t=0,o?"object"==typeof o&&(o=e.UnitConvert.number(o,a.getMotionTotal())):o=0,e.Transition.number(t,o,n)})),e.Transition.register("motionRotation",(function(t,o,n){return e.Transition.number(t,o,n)}));const p=e.UI.prototype,{updateMatrix:P,updateAllMatrix:_}=e.LeafHelper,{updateBounds:M}=e.BranchHelper;function b(t){const{motion:o,leaferIsCreated:n}=t;if(!e.isNull(o)){if(n&&(t.leafer.created=!1),t.motionPath){const e=D(t);e.total&&(t.__.__pathForRender=m.getDistancePath(e,o,t.motionPrecision))}else t.set(t.getMotionPoint(o)),t.__hasAutoLayout||(t.isBranch?(_(t),M(t,t)):P(t));n&&(t.leafer.created=!0)}}function y(t){const{parent:e}=t;if(!t.motionPath&&e){const{children:t}=e;for(let e=0;e<t.length;e++)if(t[e].motionPath)return t[e]}return t}function D(t){const e=t.__;return e.__pathForMotion?e.__pathForMotion:e.__pathForMotion=m.getMotionPathData(t.getPath(!0,!0))}return e.UI.addAttr("motionPath",void 0,d),e.UI.addAttr("motionPrecision",1,d),e.UI.addAttr("motion",void 0,d),e.UI.addAttr("motionRotation",!0,d),p.getMotionPathData=function(){return D(y(this))},p.getMotionPoint=function(t){const o=y(this),n=D(o);if(!n.total)return{};const a=m.getDistancePoint(n,t,o.motionPrecision);e.MatrixHelper.toOuterPoint(o.localTransform,a);const{motionRotation:i}=this;return!1===i?delete a.rotation:"number"==typeof i&&(a.rotation+=i),a},p.getMotionTotal=function(){return this.getMotionPathData().total},p.__updateMotionPath=function(){const t=this.__;if(this.__layout.resized&&t.__pathForMotion&&(t.__pathForMotion=void 0),this.motionPath){let t;const{children:o}=this.parent;for(let n=0;n<o.length;n++)t=o[n],e.isNull(t.motion)||t.__layout.matrixChanged||(t!==this&&t.__extraUpdate(),b(t))}else b(this)},t.HighBezierHelper=i,t.HighCurveHelper=m,t.motionPathType=d,t}({},LeaferUI);
1
+ this.LeaferIN=this.LeaferIN||{},this.LeaferIN.motionPath=function(t,e){"use strict";const o=[.1488743389,.4333953941,.6794095682,.8650633666,.9739065285],n=[.2955242247,.2692667193,.2190863625,.1494513491,.0666713443],{sqrt:a}=Math,{getDerivative:i}=e.BezierHelper,r={getDistance(t,e,r,s,c,h,u,l,f=1){let g,m,d,p,P,_,M=0,b=f/2;for(let f=0;f<o.length;f++)g=b*(1+o[f]),m=b*(1-o[f]),d=i(g,t,r,c,u),p=i(g,e,s,h,l),P=i(m,t,r,c,u),_=i(m,e,s,h,l),M+=n[f]*(a(d*d+p*p)+a(P*P+_*_));return M*b},getRotation(t,o,n,a,r,s,c,h,u){const l=i(t,o,a,s,h),f=i(t,n,r,c,u);return Math.atan2(f,l)/e.OneRadian},getT(t,e,o,n,a,i,r,c,h,u,l=1){let f=0,g=1,m=t/e,d=l/e/3;if(m>=1)return 1;if(m<=0)return 0;for(;g-f>d;)s(o,n,a,i,r,c,h,u,m)<t?f=m:g=m,m=(f+g)/2;return m},cut(t,o,n,a,i,r,s,c,h,u){const l=1-o,f=l*n+o*i,g=l*a+o*r,m=l*i+o*s,d=l*r+o*c,p=l*f+o*m,P=l*g+o*d,_=l*p+o*(l*m+o*(l*s+o*h)),M=l*P+o*(l*d+o*(l*c+o*u));t.push(e.PathCommandMap.C,f,g,p,P,_,M)}},{getDistance:s}=r,{M:c,L:h,C:u,Z:l}=e.PathCommandMap,f={},g={},m={transform(t,e){let o,n=0;const a=t.length;for(;n<a;)switch(o=t[n],o){case c:case h:m.transformPoints(t,e,n,1),n+=3;break;case u:m.transformPoints(t,e,n,3),n+=7;break;case l:n+=1}},transformPoints(t,o,n,a){for(let i=n+1,r=i+2*a;i<r;i+=2)f.x=t[i],f.y=t[i+1],e.MatrixHelper.toOuterPoint(o,f),t[i]=f.x,t[i+1]=f.y},getMotionPathData(t){let o,n,a,i,s=0,f=[],g=0,m=0,d=0;const p=t.length;for(;g<p;){switch(i=t[g],i){case c:case h:n=t[g+1],a=t[g+2],o=i===h&&g>0?e.PointHelper.getDistanceFrom(m,d,n,a):0,m=n,d=a,g+=3;break;case u:n=t[g+5],a=t[g+6],o=r.getDistance(m,d,t[g+1],t[g+2],t[g+3],t[g+4],n,a),m=n,d=a,g+=7;break;case l:g+=1;default:o=0}f.push(o),s+=o}return{total:s,segments:f,data:t}},getDistancePoint(t,o,n){const{segments:a,data:i}=t;o=e.UnitConvert.number(o,t.total);let s,f,m,d,p,P,_,M,b,y=0,x={},D=0,H=0,C=0,T=0;const U=i.length;for(;D<U;){switch(d=i[D],d){case c:case h:if(f=i[D+1],m=i[D+2],s=a[H],y+s>=o||!t.total)return D||(C=f,T=m),g.x=C,g.y=T,x.x=f,x.y=m,e.PointHelper.getDistancePoint(g,x,o-y,!0),x.rotation=e.PointHelper.getAngle(g,x),x;C=f,T=m,D+=3;break;case u:if(f=i[D+5],m=i[D+6],s=a[H],y+s>=o)return p=i[D+1],P=i[D+2],_=i[D+3],M=i[D+4],b=r.getT(o-y,s,C,T,p,P,_,M,f,m,n),e.BezierHelper.getPointAndSet(b,C,T,p,P,_,M,f,m,x),x.rotation=r.getRotation(b,C,T,p,P,_,M,f,m),x;C=f,T=m,D+=7;break;case l:D+=1;default:s=0}H++,y+=s}return x},getDistancePath(t,o,n){const{segments:a,data:i}=t,s=[];o=e.UnitConvert.number(o,t.total);let f,m,d,p,P,_,M,b,y,x=0,D={},H=0,C=0,T=0,U=0;const v=i.length;for(;H<v;){switch(p=i[H],p){case c:case h:if(m=i[H+1],d=i[H+2],f=a[C],x+f>=o||!t.total)return H||(T=m,U=d),g.x=T,g.y=U,D.x=m,D.y=d,e.PointHelper.getDistancePoint(g,D,o-x,!0),s.push(p,D.x,D.y),s;T=m,U=d,H+=3,s.push(p,T,U);break;case u:if(P=i[H+1],_=i[H+2],M=i[H+3],b=i[H+4],m=i[H+5],d=i[H+6],f=a[C],x+f>=o)return y=r.getT(o-x,f,T,U,P,_,M,b,m,d,n),r.cut(s,y,T,U,P,_,M,b,m,d),s;T=m,U=d,H+=7,s.push(p,P,_,M,b,m,d);break;case l:H+=1,s.push(p);default:f=0}C++,x+=f}return s}};function d(t){return e.decorateLeafAttr(t,(t=>e.attr({set(o){this.__setAttr(t,o),this.__hasMotionPath=this.motionPath||!e.isNull(this.motion),this.__layout.matrixChanged||this.__layout.matrixChange()}})))}e.Plugin.add("motion-path"),e.Transition.register("motion",(function(t,o,n,a){return t?"object"==typeof t&&(t=e.UnitConvert.number(t,a.getMotionTotal())):t=0,o?"object"==typeof o&&(o=e.UnitConvert.number(o,a.getMotionTotal())):o=0,e.Transition.number(t,o,n)})),e.Transition.register("motionRotation",(function(t,o,n){return e.Transition.number(t,o,n)}));const p=e.UI.prototype,{updateMatrix:P,updateAllMatrix:_}=e.LeafHelper,{updateBounds:M}=e.BranchHelper;function b(t){const{motion:o,leaferIsCreated:n}=t;if(!e.isNull(o)){if(n&&(t.leafer.created=!1),t.motionPath){const e=x(t);e.total&&(t.__.__pathForRender=m.getDistancePath(e,o,t.motionPrecision))}else t.set(t.getMotionPoint(o)),t.__hasAutoLayout||(t.isBranch?(_(t),M(t,t)):P(t));n&&(t.leafer.created=!0)}}function y(t){const{parent:e}=t;if(!t.motionPath&&e){const{children:t}=e;for(let e=0;e<t.length;e++)if(t[e].motionPath)return t[e]}return t}function x(t){const e=t.__;return e.__pathForMotion?e.__pathForMotion:e.__pathForMotion=m.getMotionPathData(t.getPath(!0,!0))}return e.UI.addAttr("motionPath",void 0,d),e.UI.addAttr("motionPrecision",1,d),e.UI.addAttr("motion",void 0,d),e.UI.addAttr("motionRotation",!0,d),p.getMotionPathData=function(){return x(y(this))},p.getMotionPoint=function(t){const o=y(this),n=x(o);if(!n.total)return{};const a=m.getDistancePoint(n,t,o.motionPrecision);e.MatrixHelper.toOuterPoint(o.localTransform,a);const{motionRotation:i}=this;return!1===i?delete a.rotation:"number"==typeof i&&(a.rotation+=i),a},p.getMotionTotal=function(){return this.getMotionPathData().total},p.__updateMotionPath=function(){const t=this.__;if(this.__layout.resized&&t.__pathForMotion&&(t.__pathForMotion=void 0),this.motionPath){let t;const{children:o}=this.parent;for(let n=0;n<o.length;n++)t=o[n],e.isNull(t.motion)||t.__layout.matrixChanged||(t!==this&&t.__extraUpdate(),b(t))}else b(this)},t.HighBezierHelper=r,t.HighCurveHelper=m,t.motionPathType=d,t}({},LeaferUI);
2
2
  //# sourceMappingURL=motion-path.min.js.map
@@ -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 { 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\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 getDerivative(t: number, fromV: number, v1: number, v2: number, toV: number): number { // 导数\n const o = 1 - t\n return 3 * o * o * (v1 - fromV) + 6 * o * t * (v2 - v1) + 3 * t * t * (toV - v2)\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 { getDerivative, getDistance } = HighBezierHelper","import { IMatrixData, IPathCommandData, IMotionPathData, IRotationPointData, IPointData, IUnitData } from '@leafer-ui/interface'\nimport { BezierHelper, MatrixHelper, PathCommandMap, PointHelper, UnitConvert } from '@leafer-ui/draw'\n\nimport { HighBezierHelper } from './HighBezierHelper'\n\n\nconst { M, L, C, Z } = PathCommandMap\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, 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 path.push(command, to.x, to.y)\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 t = HighBezierHelper.getT(motionDistance - total, distance, x, y, x1, y1, x2, y2, toX, toY, motionPrecision)\n HighBezierHelper.cut(path, t, x, y, x1, y1, x2, y2, toX, toY)\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 } from '@leafer-ui/interface'\nimport { isNull, MatrixHelper, LeafHelper, BranchHelper, Transition, UI, UnitConvert, Plugin } 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: any, to: any, t: number, target: IUI): number {\n if (!from) from = 0\n else if (typeof from === 'object') from = UnitConvert.number(from, target.getMotionTotal())\n if (!to) to = 0\n else if (typeof to === 'object') to = UnitConvert.number(to, target.getMotionTotal())\n return Transition.number(from, to, 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 (typeof motionRotation === 'number') 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","HighBezierHelper","getDistance","fromX","fromY","x1","y1","x2","y2","toX","toY","t","t1","t2","d1X","d1Y","d2X","d2Y","distance","half","i","length","getDerivative","fromV","v1","v2","toV","o","getRotation","dx","dy","atan2","OneRadian","getT","totalDistance","precision","low","high","middle","realPrecision","cut","data","ax","ay","mbx","mby","bx","by","cx","cy","push","PathCommandMap","C","M","L","Z","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","BezierHelper","getPointAndSet","getDistancePath","path","motionPathType","defaultValue","decorateLeafAttr","key","attr","set","value","this","__setAttr","__hasMotionPath","motionPath","isNull","motion","__layout","matrixChanged","matrixChange","Plugin","add","Transition","register","from","target","getMotionTotal","draw","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","__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, PathCommandMap, PointHelper, UnitConvert } from '@leafer-ui/draw'\n\nimport { HighBezierHelper } from './HighBezierHelper'\n\n\nconst { M, L, C, Z } = PathCommandMap\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, 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 path.push(command, to.x, to.y)\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 t = HighBezierHelper.getT(motionDistance - total, distance, x, y, x1, y1, x2, y2, toX, toY, motionPrecision)\n HighBezierHelper.cut(path, t, x, y, x1, y1, x2, y2, toX, toY)\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 } from '@leafer-ui/interface'\nimport { isNull, MatrixHelper, LeafHelper, BranchHelper, Transition, UI, UnitConvert, Plugin } 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: any, to: any, t: number, target: IUI): number {\n if (!from) from = 0\n else if (typeof from === 'object') from = UnitConvert.number(from, target.getMotionTotal())\n if (!to) to = 0\n else if (typeof to === 'object') to = UnitConvert.number(to, target.getMotionTotal())\n return Transition.number(from, to, 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 (typeof motionRotation === 'number') 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","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","motionPathType","defaultValue","decorateLeafAttr","key","attr","set","value","this","__setAttr","__hasMotionPath","motionPath","isNull","motion","__layout","matrixChanged","matrixChange","Plugin","add","Transition","register","from","target","getMotionTotal","draw","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","__updateMotionPath","resized","child","__extraUpdate"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leafer-in/motion-path",
3
- "version": "1.6.1",
3
+ "version": "1.6.2",
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": "^1.6.1",
38
- "@leafer-ui/interface": "^1.6.1",
39
- "@leafer-in/interface": "^1.6.1"
37
+ "@leafer-ui/draw": "^1.6.2",
38
+ "@leafer-ui/interface": "^1.6.2",
39
+ "@leafer-in/interface": "^1.6.2"
40
40
  }
41
41
  }
@@ -1,5 +1,5 @@
1
1
  import { IPathCommandData } from '@leafer-ui/interface'
2
- import { OneRadian, PathCommandMap } from '@leafer-ui/draw'
2
+ import { BezierHelper, OneRadian, PathCommandMap } from '@leafer-ui/draw'
3
3
 
4
4
 
5
5
  // 高斯-勒让德积分节点和权重
@@ -7,6 +7,7 @@ const gaussNodes = [0.1488743389, 0.4333953941, 0.6794095682, 0.8650633666, 0.97
7
7
  const gaussWeights = [0.2955242247, 0.2692667193, 0.2190863625, 0.1494513491, 0.0666713443]
8
8
 
9
9
  const { sqrt } = Math
10
+ const { getDerivative } = BezierHelper
10
11
 
11
12
  export const HighBezierHelper = {
12
13
 
@@ -27,11 +28,6 @@ export const HighBezierHelper = {
27
28
  return distance * half
28
29
  },
29
30
 
30
- getDerivative(t: number, fromV: number, v1: number, v2: number, toV: number): number { // 导数
31
- const o = 1 - t
32
- return 3 * o * o * (v1 - fromV) + 6 * o * t * (v2 - v1) + 3 * t * t * (toV - v2)
33
- },
34
-
35
31
  getRotation(t: number, fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number): number { // 切线角度
36
32
  const dx = getDerivative(t, fromX, x1, x2, toX)
37
33
  const dy = getDerivative(t, fromY, y1, y2, toY)
@@ -67,4 +63,4 @@ export const HighBezierHelper = {
67
63
 
68
64
  }
69
65
 
70
- const { getDerivative, getDistance } = HighBezierHelper
66
+ const { getDistance } = HighBezierHelper
package/types/index.d.ts CHANGED
@@ -11,7 +11,6 @@ declare const HighCurveHelper: {
11
11
 
12
12
  declare const HighBezierHelper: {
13
13
  getDistance(fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number, t?: number): number;
14
- getDerivative(t: number, fromV: number, v1: number, v2: number, toV: number): number;
15
14
  getRotation(t: number, fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number): number;
16
15
  getT(distance: number, totalDistance: number, fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number, precision?: number): number;
17
16
  cut(data: IPathCommandData, t: number, fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number): void;
@@ -1 +0,0 @@
1
- {"version":3,"file":"motion-path.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 { 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\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 getDerivative(t: number, fromV: number, v1: number, v2: number, toV: number): number { // 导数\n const o = 1 - t\n return 3 * o * o * (v1 - fromV) + 6 * o * t * (v2 - v1) + 3 * t * t * (toV - v2)\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 { getDerivative, getDistance } = HighBezierHelper","import { IMatrixData, IPathCommandData, IMotionPathData, IRotationPointData, IPointData, IUnitData } from '@leafer-ui/interface'\nimport { BezierHelper, MatrixHelper, PathCommandMap, PointHelper, UnitConvert } from '@leafer-ui/draw'\n\nimport { HighBezierHelper } from './HighBezierHelper'\n\n\nconst { M, L, C, Z } = PathCommandMap\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, 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 path.push(command, to.x, to.y)\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 t = HighBezierHelper.getT(motionDistance - total, distance, x, y, x1, y1, x2, y2, toX, toY, motionPrecision)\n HighBezierHelper.cut(path, t, x, y, x1, y1, x2, y2, toX, toY)\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 } from '@leafer-ui/interface'\nimport { isNull, MatrixHelper, LeafHelper, BranchHelper, Transition, UI, UnitConvert, Plugin } 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: any, to: any, t: number, target: IUI): number {\n if (!from) from = 0\n else if (typeof from === 'object') from = UnitConvert.number(from, target.getMotionTotal())\n if (!to) to = 0\n else if (typeof to === 'object') to = UnitConvert.number(to, target.getMotionTotal())\n return Transition.number(from, to, 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 (typeof motionRotation === 'number') 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":["OneRadian","PathCommandMap","MatrixHelper","PointHelper","UnitConvert","BezierHelper","decorateLeafAttr","attr","isNull","Plugin","Transition","UI","LeafHelper","BranchHelper"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"motion-path.esm.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 { 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\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 getDerivative(t: number, fromV: number, v1: number, v2: number, toV: number): number { // 导数\n const o = 1 - t\n return 3 * o * o * (v1 - fromV) + 6 * o * t * (v2 - v1) + 3 * t * t * (toV - v2)\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 { getDerivative, getDistance } = HighBezierHelper","import { IMatrixData, IPathCommandData, IMotionPathData, IRotationPointData, IPointData, IUnitData } from '@leafer-ui/interface'\nimport { BezierHelper, MatrixHelper, PathCommandMap, PointHelper, UnitConvert } from '@leafer-ui/draw'\n\nimport { HighBezierHelper } from './HighBezierHelper'\n\n\nconst { M, L, C, Z } = PathCommandMap\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, 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 path.push(command, to.x, to.y)\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 t = HighBezierHelper.getT(motionDistance - total, distance, x, y, x1, y1, x2, y2, toX, toY, motionPrecision)\n HighBezierHelper.cut(path, t, x, y, x1, y1, x2, y2, toX, toY)\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 } from '@leafer-ui/interface'\nimport { isNull, MatrixHelper, LeafHelper, BranchHelper, Transition, UI, UnitConvert, Plugin } 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: any, to: any, t: number, target: IUI): number {\n if (!from) from = 0\n else if (typeof from === 'object') from = UnitConvert.number(from, target.getMotionTotal())\n if (!to) to = 0\n else if (typeof to === 'object') to = UnitConvert.number(to, target.getMotionTotal())\n return Transition.number(from, to, 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 (typeof motionRotation === 'number') 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":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"motion-path.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 { 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\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 getDerivative(t: number, fromV: number, v1: number, v2: number, toV: number): number { // 导数\n const o = 1 - t\n return 3 * o * o * (v1 - fromV) + 6 * o * t * (v2 - v1) + 3 * t * t * (toV - v2)\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 { getDerivative, getDistance } = HighBezierHelper","import { IMatrixData, IPathCommandData, IMotionPathData, IRotationPointData, IPointData, IUnitData } from '@leafer-ui/interface'\nimport { BezierHelper, MatrixHelper, PathCommandMap, PointHelper, UnitConvert } from '@leafer-ui/draw'\n\nimport { HighBezierHelper } from './HighBezierHelper'\n\n\nconst { M, L, C, Z } = PathCommandMap\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, 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 path.push(command, to.x, to.y)\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 t = HighBezierHelper.getT(motionDistance - total, distance, x, y, x1, y1, x2, y2, toX, toY, motionPrecision)\n HighBezierHelper.cut(path, t, x, y, x1, y1, x2, y2, toX, toY)\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 } from '@leafer-ui/interface'\nimport { isNull, MatrixHelper, LeafHelper, BranchHelper, Transition, UI, UnitConvert, Plugin } 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: any, to: any, t: number, target: IUI): number {\n if (!from) from = 0\n else if (typeof from === 'object') from = UnitConvert.number(from, target.getMotionTotal())\n if (!to) to = 0\n else if (typeof to === 'object') to = UnitConvert.number(to, target.getMotionTotal())\n return Transition.number(from, to, 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 (typeof motionRotation === 'number') 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":["OneRadian","PathCommandMap","MatrixHelper","PointHelper","UnitConvert","BezierHelper","decorateLeafAttr","attr","isNull","Plugin","Transition","UI","LeafHelper","BranchHelper"],"mappings":"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"}