From dc54592a9ba95e8f3be1f0f017fde2a31cee79e0 Mon Sep 17 00:00:00 2001 From: Nikos M Date: Mon, 12 Dec 2022 23:16:55 +0200 Subject: [PATCH] fix intersectsSelf --- build/Geometrize.js | 16 ++++++++-------- build/Geometrize.min.js | 4 ++-- src/Curve.js | 4 ++-- src/Polygon.js | 4 ++-- src/Polyline.js | 4 ++-- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/build/Geometrize.js b/build/Geometrize.js index 18a2114..af67544 100644 --- a/build/Geometrize.js +++ b/build/Geometrize.js @@ -2,14 +2,14 @@ * Geometrize * computational geometry and rendering library for JavaScript * -* @version 0.9.0 (2022-12-12 19:36:15) +* @version 0.9.0 (2022-12-12 23:14:40) * https://github.com/foo123/Geometrize * **//** * Geometrize * computational geometry and rendering library for JavaScript * -* @version 0.9.0 (2022-12-12 19:36:15) +* @version 0.9.0 (2022-12-12 23:14:40) * https://github.com/foo123/Geometrize * **/ @@ -1968,8 +1968,8 @@ var CompositeCurve = makeClass(Curve, { p2 = c[j]._points[c[j]._points.length-1]; p3 = c[k]._points[0]; p4 = c[k]._points[c[k]._points.length-1]; - if (p_eq(p1, p3) || p_eq(p1, p4)) ii = ii.filter(function(p) {return !p_eq(p, p1);}); - if (p_eq(p2, p3) || p_eq(p2, p4)) ii = ii.filter(function(p) {return !p_eq(p, p2);}); + if ((j === 0) && (k === n-1) && p_eq(p1, p4)) ii = ii.filter(function(p) {return !p_eq(p, p1);}); + else if ((k === j+1) && p_eq(p2, p3)) ii = ii.filter(function(p) {return !p_eq(p, p2);}); i.push.apply(i, ii); } } @@ -2496,8 +2496,8 @@ var Polyline = makeClass(Curve, { ii = line_segments_intersection(p1, p2, p3, p4); if (ii) { - if (p_eq(p1, p3) || p_eq(p1, p4)) ii = ii.filter(function(p) {return !p_eq(p, p1);}); - if (p_eq(p2, p3) || p_eq(p2, p4)) ii = ii.filter(function(p) {return !p_eq(p, p2);}); + if ((j === 0) && (k === n-1) && p_eq(p1, p4)) ii = ii.filter(function(p) {return !p_eq(p, p1);}); + else if ((k === j+1) && p_eq(p2, p3)) ii = ii.filter(function(p) {return !p_eq(p, p2);}); i.push.apply(i, ii); } } @@ -3588,8 +3588,8 @@ var Polygon = makeClass(Curve, { ii = line_segments_intersection(p1, p2, p3, p4); if (ii) { - if (p_eq(p1, p3) || p_eq(p1, p4)) ii = ii.filter(function(p) {return !p_eq(p, p1);}); - if (p_eq(p2, p3) || p_eq(p2, p4)) ii = ii.filter(function(p) {return !p_eq(p, p2);}); + if ((j === 0) && (k === n-1) && p_eq(p1, p4)) ii = ii.filter(function(p) {return !p_eq(p, p1);}); + else if ((k === j+1) && p_eq(p2, p3)) ii = ii.filter(function(p) {return !p_eq(p, p2);}); i.push.apply(i, ii); } } diff --git a/build/Geometrize.min.js b/build/Geometrize.min.js index d9cfc2b..a8cfc48 100644 --- a/build/Geometrize.min.js +++ b/build/Geometrize.min.js @@ -2,8 +2,8 @@ * Geometrize * computational geometry and rendering library for JavaScript * -* @version 0.9.0 (2022-12-12 19:36:15) +* @version 0.9.0 (2022-12-12 23:14:40) * https://github.com/foo123/Geometrize * **/ -!function(t,n,e){"use strict";"object"==typeof module&&module.exports?(module.$deps=module.$deps||{})&&(module.exports=module.$deps[n]=e.call(t)):"function"==typeof define&&define.amd&&"function"==typeof require&&"function"==typeof require.specified&&require.specified(n)?define(n,["module"],function(n){return e.moduleUri=n.uri,e.call(t)}):n in t||(t[n]=e.call(t)||1)&&"function"==typeof define&&define.amd&&define(function(){return t[n]})}("undefined"!=typeof self?self:this,"Geometrize",function(){"use strict";var d=Object.prototype.hasOwnProperty,t=Object.prototype.toString,b=Object.defineProperty,S=Math,G=S.abs,C=S.sqrt,l=S.pow,$=S.PI,w=2*$,u=1e-6,o=$/2,a=3*$/2,r=C(2),c=C(3),f=20,h=.01,v={},g=function(){},n="undefined"!=typeof global&&"[object global]"===t.call(global),x="undefined"!=typeof window&&"[object Window]"===t.call(window),e=(n?global:x&&window,{VERSION:"0.9.0",Math:{},Geometry:{}});function i(n,t,e){var r,i,o,a=d.call(t,"constructor")?t.constructor:function(){};for(r in n?(a.prototype=Object.create(n.prototype),a.prototype.$super=(i=n,o={},function(n,t){var e=":"+n;return 1===o[e]?(i.prototype.$super||g).call(this,n,t):(o[e]=1,t=("constructor"===n?i:i.prototype[n]||g).apply(this,t||[]),o[e]=0,t)})):a.prototype.$super=g,a.prototype.constructor=a,t)d.call(t,r)&&"constructor"!==r&&(a.prototype[r]=t[r]);if(e)for(r in e)d.call(e,r)&&(a[r]=e[r]);return a}var n={$changed:!1,$cb:null,dispose:function(){this.$cb=null},isChanged:function(n){return arguments.length?(this.$changed=!!n,this):this.$changed},onChange:function(n,t){var e,r=this;return!1===t&&(St(n)||_t(n))?r.$cb&&-1!==(e=(_t(n)?r.$cb.map(function(n){return bt(n.id)}):r.$cb).indexOf(n))&&r.$cb.splice(e,1):St(n)&&(r.$cb||(r.$cb=[]),-1===(e=r.$cb.indexOf(n))&&r.$cb.push(n)),r},triggerChange:function(){var t=this;return t.$cb&&t.$cb.forEach(function(n){n(t)}),t}},_=i(null,lt(null,{constructor:function e(r){var i=this;return r instanceof e?r:i instanceof e?(r=Ct(r),i.dispose=function(){r=null,e.prototype.dispose.call(i)},i.clone=function(){return new e(r)},i.val=function(n){if(arguments.length){n=n instanceof e?n.val():Ct(n);var t=!at(r,n);return r=n,t&&!i.isChanged()&&(i.isChanged(!0),i.triggerChange()),i}return r},i.valueOf=function(){return r.valueOf()},i.toString=function(){return bt(r)},void i.isChanged(!0)):new e(r)},clone:null,val:null,valueOf:null,toString:null},n)),y=i(null,{constructor:function n(t,e,r,i,o,a,s,u,l){var c=this;return t instanceof n?t:c instanceof n?(kt(t)&&9<=t.length?(c.$00=Ct(t[0]),c.$01=Ct(t[1]),c.$02=Ct(t[2]),c.$10=Ct(t[3]),c.$11=Ct(t[4]),c.$12=Ct(t[5])):(c.$00=t,c.$01=e,c.$02=r,c.$10=i,c.$11=o,c.$12=a),c.$20=0,c.$21=0,void(c.$22=1)):new n(t,e,r,i,o,a,s,u,l)},$00:1,$01:0,$02:0,$10:0,$11:1,$12:0,$20:0,$21:0,$22:1,clone:function(){var n=this;return new y(n.$00,n.$01,n.$02,n.$10,n.$11,n.$12,0,0,1)},eq:function(n){if(n instanceof y){var t=this;return at(t.$00,n.$00)&&at(t.$01,n.$01)&&at(t.$02,n.$02)&&at(t.$10,n.$10)&&at(t.$11,n.$11)&&at(t.$12,n.$12)}return!1},add:function(n){var t=this;return n instanceof y?new y(t.$00+n.$00,t.$01+n.$01,t.$02+n.$02,t.$10+n.$10,t.$11+n.$11,t.$12+n.$12,0,0,1):(n=Ct(n),new y(t.$00+n,t.$01+n,t.$02+n,t.$10+n,t.$11+n,t.$12+n,0,0,1))},mul:function(n){var t=this;return n instanceof y?new y(t.$00*n.$00+t.$01*n.$10+t.$02*n.$20,t.$00*n.$01+t.$01*n.$11+t.$02*n.$21,t.$00*n.$02+t.$01*n.$12+t.$02*n.$22,t.$10*n.$00+t.$11*n.$10+t.$12*n.$20,t.$10*n.$01+t.$11*n.$11+t.$12*n.$21,t.$10*n.$02+t.$11*n.$12+t.$12*n.$22,0,0,1):(n=Ct(n),new y(t.$00*n,t.$01*n,t.$02*n,t.$10*n,t.$11*n,t.$12*n,0,0,1))},det:function(){var n=this;return n.$00*(n.$11*n.$22-n.$12*n.$21)+n.$01*(n.$12*n.$20-n.$10*n.$22)+n.$02*(n.$21*n.$10-n.$11*n.$20)},inv:function(){var n,t,e,r=this,i=r.$00,o=r.$01,a=r.$02,s=r.$10,u=r.$11,l=r.$12,c=i*u-o*s;return ot(c,0)?null:new y(n=u/c,t=-o/c,-n*a-t*l,e=-s/c,r=i/c,-e*a-r*l,0,0,1)},transform:function(n,t){var e=this,r=n.x,i=n.y,n=e.$00*r+e.$01*i+e.$02,e=e.$10*r+e.$11*i+e.$12;return t?(t.x=n,t.y=e):t=new B(n,e),t},getTranslation:function(){return{x:this.$02,y:this.$12}},getRotationAngle:function(){return S.atan2(this.$10,this.$00)},getScale:function(){var n=this.$00,t=-this.$01,e=this.$10,r=this.$11;return{x:it(n)*Dn(n,e),y:it(r)*Dn(t,r)}},toArray:function(){var n=this;return[n.$00,n.$01,n.$02,n.$10,n.$11,n.$12,n.$20,n.$21,n.$22]},toSVG:function(){var n=this;return"matrix("+bt(n.$00)+" "+bt(n.$10)+" "+bt(n.$01)+" "+bt(n.$11)+" "+bt(n.$02)+" "+bt(n.$12)+")"},toCSS:function(){var n=this;return"matrix("+bt(n.$00)+","+bt(n.$10)+","+bt(n.$01)+","+bt(n.$11)+","+bt(n.$02)+","+bt(n.$12)+")"},toCanvas:function(n){var t=this;return n.transform(t.$00,t.$10,t.$01,t.$11,t.$02,t.$12),n},toTex:function(){return y.arrayTex(this.toArray(),3,3)},toString:function(){return y.arrayString(this.toArray(),3,3)}},{eye:function(){return new y(1,0,0,0,1,0,0,0,1)},translate:function(n,t){return new y(1,0,Ct(n),0,1,Ct(t),0,0,1)},rotate:function(n,t,e){e=Ct(e||0),t=Ct(t||0),n=Ct(n);var r=S.cos(n),n=S.sin(n);return new y(r,-n,t-r*t+n*e,n,r,e-r*e-n*t,0,0,1)},scale:function(n,t,e,r){return r=Ct(r||0),e=Ct(e||0),n=Ct(n),t=Ct(t),new y(n,0,-n*e+e,0,t,-t*r+r,0,0,1)},reflectX:function(){return new y(-1,0,0,0,1,0,0,0,1)},reflectY:function(){return new y(1,0,0,0,-1,0,0,0,1)},shearX:function(n){return new y(1,Ct(n),0,0,1,0,0,0,1)},shearY:function(n){return new y(1,0,0,Ct(n),1,0,0,0,1)},arrayTex:function(n,t,e){for(var r="\\begin{pmatrix}",i=0;it.x?n:t),(!y&&(st.y?n:t),{ymin:h.y,xmin:f.x,ymax:u.y,xmax:o.x}}),configurable:!1}),void(l.isChanged=function(n){return!0===n&&(v=d=m=null),l.$super("isChanged",arguments)})):new n(t,e,r,i,o,a,s)},name:"Arc",clone:function(){var n=this;return new D(n.start.clone(),n.end.clone(),n.radiusX,n.radiusY,n.angle,n.largeArc,n.sweep)},transform:function(n){var t=this,e=t.radiusX,r=t.radiusY,i=t.angle,o=et(n.getRotationAngle()),a=n.getScale();return new D(t.start.transform(n),t.end.transform(n),e*a.x,r*a.y,i+o,t.largeArc,t.sweep)},isClosed:function(){return!1},isConvex:function(){return!1},hasMatrix:function(){return!1},f:function(n){var t=this,e=t.center,r=t.cs;return Rn(t.theta+n*t.dtheta,e.x,e.y,t.rX,t.rY,r[0],r[1])},d:function(){var n,t,e,r,i,o,a,s=this,a=(n=s.center.x,t=s.center.y,e=s.rY,r=s.rX,i=[s.cs[0],-s.cs[1]],o=-s.theta,a=-s.dtheta,{p0:Rn(o,n,t,e,r,i[0],i[1]),p1:Rn(o+a,n,t,e,r,i[0],i[1]),fa:G(a)>$,fs:0=w&&n.closePath()},toTex:function(){var n=this;return"\\text{Arc: }\\left("+[$t(n.start),$t(n.end),bt(n.radiusX),bt(n.radiusY),bt(n.angle)+"\\text{°}",bt(n.largeArc?1:0),bt(n.sweep?1:0)].join(",")+"\\right)"},toString:function(){var n=this;return"Arc("+[bt(n.start),bt(n.end),bt(n.radiusX),bt(n.radiusY),bt(n.angle)+"°",bt(n.largeArc),bt(n.sweep)].join(",")+")"}});e.Arc=D;var H=i(n,{constructor:function n(t){var r,i=this,e=null,o=null,a=null;return t instanceof n?t:i instanceof n?(i.$super("constructor",[t]),b(i,"length",{get:function(){return null==e&&(e=Gn(i._lines)),e},enumerable:!0,configurable:!1}),b(i,"_bbox",{get:function(){return null==o&&(o=r(i._points)),o},enumerable:!(r=function(t){var n=Tn(t[0].x-2*t[1].x+t[2].x,t[1].x-t[0].x),e=!1===n?[t[1]]:n.map(function(n){return 0<=n&&n<=1?In(n,t):t[1]}),r=Tn(t[0].y-2*t[1].y+t[2].y,t[1].y-t[0].y),n=!1===r?[t[1]]:r.map(function(n){return 0<=n&&n<=1?In(n,t):t[1]}),r=S.min.apply(S,e.concat([t[0],t[2]]).map(st)),e=S.max.apply(S,e.concat([t[0],t[2]]).map(st));return{ymin:S.min.apply(S,n.concat([t[0],t[2]]).map(ut)),xmin:r,ymax:S.max.apply(S,n.concat([t[0],t[2]]).map(ut)),xmax:e}}),configurable:!1}),b(i,"_hull",{get:function(){var t,n,e;return null==a&&(n=Qn(e=i._points),t=y.rotate(n.R).mul(y.translate(n.Tx,n.Ty)),n=r(e.map(function(n){return t.transform(n,{x:0,y:0})})),e=t.inv(),a=[e.transform(new B(n.xmin,n.ymin)),e.transform(new B(n.xmax,n.ymin)),e.transform(new B(n.xmax,n.ymax)),e.transform(new B(n.xmin,n.ymax))]),a},enumerable:!1,configurable:!1}),void(i.isChanged=function(n){return!0===n&&(a=o=e=null),i.$super("isChanged",arguments)})):new n(t)},name:"QBezier",clone:function(){return new H(this.points.map(function(n){return n.clone()}))},transform:function(t){return new H(this.points.map(function(n){return n.transform(t)}))},hasPoint:function(n){return cn(n,this._points)},intersects:function(n){var t,e=this;return n instanceof B?!!(t=cn(n,e._points))&&[n]:n instanceof J?!!(t=$n(e._lines,n.center,n.radius))&&t.map(B):n instanceof K?!!(t=wn(e._lines,n.center,n.radiusX,n.radiusY,n.cs))&&t.map(B):n instanceof D?!!(t=_n(e._lines,n.center,n.rX,n.rY,n.cs,n.theta,n.dtheta))&&t.map(B):n instanceof H?!!(t=kn(e._lines,n._points))&&t.map(B):n instanceof E&&n.intersects(e)},f:function(n){return In(n,this._points)},bezierPoints:function(){var n=this._points;return[[{x:n[0].x,y:n[0].y},{x:n[0].x+2*(n[1].x-n[0].x)/3,y:n[0].y+2*(n[1].y-n[0].y)/3},{x:n[2].x+2*(n[1].x-n[2].x)/3,y:n[2].y+2*(n[1].y-n[2].y)/3},{x:n[2].x,y:n[2].y}]]},toSVG:function(n){return this.toSVGPath(!!arguments.length&&n)},toSVGPath:function(n){var t=this,e=t._points,e=["M",e[0].x,e[0].y,"Q",e[1].x,e[1].y,e[2].x,e[2].y].join(" ");return arguments.length?ct("path",{id:[t.id,!1],d:[e,t.isChanged()],style:[t.style.toSVG(),t.style.isChanged()]},n):e},toCanvas:function(n){this.style.toCanvas(n),this.toCanvasPath(n),n.stroke()},toCanvasPath:function(n){var t=this._points;n.beginPath(),n.moveTo(t[0].x,t[0].y),n.quadraticCurveTo(t[1].x,t[1].y,t[2].x,t[2].y)}});e.QBezier=e.Bezier2=H;var W=i(n,{constructor:function n(t){var r,i=this,e=null,o=null,a=null;return t instanceof n?t:i instanceof n?(i.$super("constructor",[t]),b(i,"length",{get:function(){return null==e&&(e=Gn(i._lines)),e},enumerable:!0,configurable:!1}),b(i,"_bbox",{get:function(){return null==o&&(o=r(i._points)),o},enumerable:!(r=function(e){var n=An(3*(-e[0].x+3*e[1].x-3*e[2].x+e[3].x),2*(3*e[0].x-6*e[1].x+3*e[2].x),-3*e[0].x+3*e[1].x),t=!1===n?[e[1],e[2]]:n.map(function(n,t){return 0<=n&&n<=1?Ln(n,e):e[t+1]}),r=An(3*(-e[0].y+3*e[1].y-3*e[2].y+e[3].y),2*(3*e[0].y-6*e[1].y+3*e[2].y),-3*e[0].y+3*e[1].y),n=!1===r?[e[1],e[2]]:r.map(function(n,t){return 0<=n&&n<=1?Ln(n,e):e[t+1]}),r=S.min.apply(S,t.concat([e[0],e[3]]).map(st)),t=S.max.apply(S,t.concat([e[0],e[3]]).map(st));return{ymin:S.min.apply(S,n.concat([e[0],e[3]]).map(ut)),xmin:r,ymax:S.max.apply(S,n.concat([e[0],e[3]]).map(ut)),xmax:t}}),configurable:!1}),b(i,"_hull",{get:function(){var t,n,e;return null==a&&(n=Qn(e=i._points),t=y.rotate(n.R).mul(y.translate(n.Tx,n.Ty)),n=r(e.map(function(n){return t.transform(n,{x:0,y:0})})),e=t.inv(),a=[e.transform(new B(n.xmin,n.ymin)),e.transform(new B(n.xmax,n.ymin)),e.transform(new B(n.xmax,n.ymax)),e.transform(new B(n.xmin,n.ymax))]),a},enumerable:!1,configurable:!1}),void(i.isChanged=function(n){return!0===n&&(a=o=e=null),i.$super("isChanged",arguments)})):new n(t)},name:"CBezier",clone:function(){return new W(this.points.map(function(n){return n.clone()}))},transform:function(t){return new W(this.points.map(function(n){return n.transform(t)}))},hasPoint:function(n){return fn(n,this._points)},intersects:function(n){var t,e=this;return n instanceof B?!!(t=fn(n,e._points))&&[n]:n instanceof J?!!(t=$n(e._lines,n.center,n.radius))&&t.map(B):n instanceof K?!!(t=wn(e._lines,n.center,n.radiusX,n.radiusY,n.cs))&&t.map(B):n instanceof D?!!(t=_n(e._lines,n.center,n.rX,n.rY,n.cs,n.theta,n.dtheta))&&t.map(B):n instanceof H?!!(t=kn(e._lines,n._points))&&t.map(B):n instanceof W?!!(t=Pn(e._lines,n._points))&&t.map(B):n instanceof E&&n.intersects(e)},f:function(n){return Ln(n,this._points)},bezierPoints:function(){var n=this._points;return[[{x:n[0].x,y:n[0].y},{x:n[1].x,y:n[1].y},{x:n[2].x,y:n[2].y},{x:n[3].x,y:n[3].y}]]},toSVG:function(n){return this.toSVGPath(!!arguments.length&&n)},toSVGPath:function(n){var t=this,e=t._points,e=["M",e[0].x,e[0].y,"C",e[1].x,e[1].y,e[2].x,e[2].y,e[3].x,e[3].y].join(" ");return arguments.length?ct("path",{id:[t.id,!1],d:[e,t.isChanged()],style:[t.style.toSVG(),t.style.isChanged()]},n):e},toCanvas:function(n){this.style.toCanvas(n),this.toCanvasPath(n),n.stroke()},toCanvasPath:function(n){var t=this._points;n.beginPath(),n.moveTo(t[0].x,t[0].y),n.bezierCurveTo(t[1].x,t[1].y,t[2].x,t[2].y,t[3].x,t[3].y)}});e.CBezier=e.Bezier3=W;var U=i(z,{constructor:function n(t){var r=this,e=null,i=null,o=null,a=null,s=null;return t instanceof n?t:r instanceof n?(r.$super("constructor",[t]),b(r,"vertices",{get:function(){return r.points},set:function(n){r.points=n},enumerable:!0,configurable:!1}),b(r,"edges",{get:function(){var e=r.points;return 1=n.nframes}n["ease-in"]=n["ease-in-quad"],n["ease-out"]=n["ease-out-quad"],n["ease-in-out"]=n["ease-in-out-quad"];var rn=i(E,{constructor:function n(e){var t,r=this,i=!1,o=0,a=null,s=null;return e instanceof n?e:r instanceof n?(E.call(r),r.start=function(){return i=!0,tn(e)&&a&&a(r),setTimeout(t,((tn(e)?e.delay:0)||0)+o),r},r.stop=function(){return i=!1,r},r.rewind=function(){return function(n){n.reverse?n.kf=n.keyframes.length-1:n.kf=0;var t,e,r,i,o,a,s=n.keyframes[n.kf],u=s.transform.translate.x,l=s.transform.translate.y,c=s.transform.scale.origin.x,f=s.transform.scale.origin.y,h=s.transform.scale.x,g=s.transform.scale.y,y=s.transform.rotate.origin.x,x=s.transform.rotate.origin.y,p=s.transform.rotate.angle,m=1,d=0,v=s.shape,b=v.length,C=new Array(b);for(at(p,0)||(m=S.cos(p),d=S.sin(p)),u+=y-m*y+d*x,l+=x-m*x-d*y,e=0;ee+1?2:1}}(n.shape,p)}),y}(e,60),t=function n(){i&&e&&(!function(n){if(n.current.frame=tt(n.current.frame+(n.reverse?-1:1),-1,n.nframes),!en(n)){var t,e;b=n.reverse?(1<=n.kf&&n.current.frame<=n.keyframes[n.kf-1].frame&&0<=n.kf-2&&--n.kf,t=n.keyframes[n.kf],e=n.keyframes[1<=n.kf?n.kf-1:0],G(n.current.frame-t.frame)/(t.frame-e.frame+1)):(n.kf+1=n.keyframes[n.kf+1].frame&&n.kf+2"+bt(r)+"":"/>");return t}function ft(a,s,u,i){if(St(a.onChange))return a;function l(t){a.$cb.forEach(function(n){n(t)})}var c=!0;i=i||gt;var f=function(n,t){for(var e=n;et.x?n:t),(!y&&(st.y?n:t),{ymin:h.y,xmin:f.x,ymax:u.y,xmax:o.x}}),configurable:!1}),void(l.isChanged=function(n){return!0===n&&(v=d=m=null),l.$super("isChanged",arguments)})):new n(t,e,r,i,o,a,s)},name:"Arc",clone:function(){var n=this;return new D(n.start.clone(),n.end.clone(),n.radiusX,n.radiusY,n.angle,n.largeArc,n.sweep)},transform:function(n){var t=this,e=t.radiusX,r=t.radiusY,i=t.angle,o=et(n.getRotationAngle()),a=n.getScale();return new D(t.start.transform(n),t.end.transform(n),e*a.x,r*a.y,i+o,t.largeArc,t.sweep)},isClosed:function(){return!1},isConvex:function(){return!1},hasMatrix:function(){return!1},f:function(n){var t=this,e=t.center,r=t.cs;return Rn(t.theta+n*t.dtheta,e.x,e.y,t.rX,t.rY,r[0],r[1])},d:function(){var n,t,e,r,i,o,a,s=this,a=(n=s.center.x,t=s.center.y,e=s.rY,r=s.rX,i=[s.cs[0],-s.cs[1]],o=-s.theta,a=-s.dtheta,{p0:Rn(o,n,t,e,r,i[0],i[1]),p1:Rn(o+a,n,t,e,r,i[0],i[1]),fa:G(a)>$,fs:0=w&&n.closePath()},toTex:function(){var n=this;return"\\text{Arc: }\\left("+[$t(n.start),$t(n.end),bt(n.radiusX),bt(n.radiusY),bt(n.angle)+"\\text{°}",bt(n.largeArc?1:0),bt(n.sweep?1:0)].join(",")+"\\right)"},toString:function(){var n=this;return"Arc("+[bt(n.start),bt(n.end),bt(n.radiusX),bt(n.radiusY),bt(n.angle)+"°",bt(n.largeArc),bt(n.sweep)].join(",")+")"}});e.Arc=D;var H=i(n,{constructor:function n(t){var r,i=this,e=null,o=null,a=null;return t instanceof n?t:i instanceof n?(i.$super("constructor",[t]),b(i,"length",{get:function(){return null==e&&(e=Gn(i._lines)),e},enumerable:!0,configurable:!1}),b(i,"_bbox",{get:function(){return null==o&&(o=r(i._points)),o},enumerable:!(r=function(t){var n=Tn(t[0].x-2*t[1].x+t[2].x,t[1].x-t[0].x),e=!1===n?[t[1]]:n.map(function(n){return 0<=n&&n<=1?In(n,t):t[1]}),r=Tn(t[0].y-2*t[1].y+t[2].y,t[1].y-t[0].y),n=!1===r?[t[1]]:r.map(function(n){return 0<=n&&n<=1?In(n,t):t[1]}),r=S.min.apply(S,e.concat([t[0],t[2]]).map(st)),e=S.max.apply(S,e.concat([t[0],t[2]]).map(st));return{ymin:S.min.apply(S,n.concat([t[0],t[2]]).map(ut)),xmin:r,ymax:S.max.apply(S,n.concat([t[0],t[2]]).map(ut)),xmax:e}}),configurable:!1}),b(i,"_hull",{get:function(){var t,n,e;return null==a&&(n=Qn(e=i._points),t=y.rotate(n.R).mul(y.translate(n.Tx,n.Ty)),n=r(e.map(function(n){return t.transform(n,{x:0,y:0})})),e=t.inv(),a=[e.transform(new B(n.xmin,n.ymin)),e.transform(new B(n.xmax,n.ymin)),e.transform(new B(n.xmax,n.ymax)),e.transform(new B(n.xmin,n.ymax))]),a},enumerable:!1,configurable:!1}),void(i.isChanged=function(n){return!0===n&&(a=o=e=null),i.$super("isChanged",arguments)})):new n(t)},name:"QBezier",clone:function(){return new H(this.points.map(function(n){return n.clone()}))},transform:function(t){return new H(this.points.map(function(n){return n.transform(t)}))},hasPoint:function(n){return cn(n,this._points)},intersects:function(n){var t,e=this;return n instanceof B?!!(t=cn(n,e._points))&&[n]:n instanceof J?!!(t=$n(e._lines,n.center,n.radius))&&t.map(B):n instanceof K?!!(t=wn(e._lines,n.center,n.radiusX,n.radiusY,n.cs))&&t.map(B):n instanceof D?!!(t=_n(e._lines,n.center,n.rX,n.rY,n.cs,n.theta,n.dtheta))&&t.map(B):n instanceof H?!!(t=kn(e._lines,n._points))&&t.map(B):n instanceof E&&n.intersects(e)},f:function(n){return In(n,this._points)},bezierPoints:function(){var n=this._points;return[[{x:n[0].x,y:n[0].y},{x:n[0].x+2*(n[1].x-n[0].x)/3,y:n[0].y+2*(n[1].y-n[0].y)/3},{x:n[2].x+2*(n[1].x-n[2].x)/3,y:n[2].y+2*(n[1].y-n[2].y)/3},{x:n[2].x,y:n[2].y}]]},toSVG:function(n){return this.toSVGPath(!!arguments.length&&n)},toSVGPath:function(n){var t=this,e=t._points,e=["M",e[0].x,e[0].y,"Q",e[1].x,e[1].y,e[2].x,e[2].y].join(" ");return arguments.length?ct("path",{id:[t.id,!1],d:[e,t.isChanged()],style:[t.style.toSVG(),t.style.isChanged()]},n):e},toCanvas:function(n){this.style.toCanvas(n),this.toCanvasPath(n),n.stroke()},toCanvasPath:function(n){var t=this._points;n.beginPath(),n.moveTo(t[0].x,t[0].y),n.quadraticCurveTo(t[1].x,t[1].y,t[2].x,t[2].y)}});e.QBezier=e.Bezier2=H;var W=i(n,{constructor:function n(t){var r,i=this,e=null,o=null,a=null;return t instanceof n?t:i instanceof n?(i.$super("constructor",[t]),b(i,"length",{get:function(){return null==e&&(e=Gn(i._lines)),e},enumerable:!0,configurable:!1}),b(i,"_bbox",{get:function(){return null==o&&(o=r(i._points)),o},enumerable:!(r=function(e){var n=An(3*(-e[0].x+3*e[1].x-3*e[2].x+e[3].x),2*(3*e[0].x-6*e[1].x+3*e[2].x),-3*e[0].x+3*e[1].x),t=!1===n?[e[1],e[2]]:n.map(function(n,t){return 0<=n&&n<=1?Ln(n,e):e[t+1]}),r=An(3*(-e[0].y+3*e[1].y-3*e[2].y+e[3].y),2*(3*e[0].y-6*e[1].y+3*e[2].y),-3*e[0].y+3*e[1].y),n=!1===r?[e[1],e[2]]:r.map(function(n,t){return 0<=n&&n<=1?Ln(n,e):e[t+1]}),r=S.min.apply(S,t.concat([e[0],e[3]]).map(st)),t=S.max.apply(S,t.concat([e[0],e[3]]).map(st));return{ymin:S.min.apply(S,n.concat([e[0],e[3]]).map(ut)),xmin:r,ymax:S.max.apply(S,n.concat([e[0],e[3]]).map(ut)),xmax:t}}),configurable:!1}),b(i,"_hull",{get:function(){var t,n,e;return null==a&&(n=Qn(e=i._points),t=y.rotate(n.R).mul(y.translate(n.Tx,n.Ty)),n=r(e.map(function(n){return t.transform(n,{x:0,y:0})})),e=t.inv(),a=[e.transform(new B(n.xmin,n.ymin)),e.transform(new B(n.xmax,n.ymin)),e.transform(new B(n.xmax,n.ymax)),e.transform(new B(n.xmin,n.ymax))]),a},enumerable:!1,configurable:!1}),void(i.isChanged=function(n){return!0===n&&(a=o=e=null),i.$super("isChanged",arguments)})):new n(t)},name:"CBezier",clone:function(){return new W(this.points.map(function(n){return n.clone()}))},transform:function(t){return new W(this.points.map(function(n){return n.transform(t)}))},hasPoint:function(n){return fn(n,this._points)},intersects:function(n){var t,e=this;return n instanceof B?!!(t=fn(n,e._points))&&[n]:n instanceof J?!!(t=$n(e._lines,n.center,n.radius))&&t.map(B):n instanceof K?!!(t=wn(e._lines,n.center,n.radiusX,n.radiusY,n.cs))&&t.map(B):n instanceof D?!!(t=_n(e._lines,n.center,n.rX,n.rY,n.cs,n.theta,n.dtheta))&&t.map(B):n instanceof H?!!(t=kn(e._lines,n._points))&&t.map(B):n instanceof W?!!(t=Pn(e._lines,n._points))&&t.map(B):n instanceof E&&n.intersects(e)},f:function(n){return Ln(n,this._points)},bezierPoints:function(){var n=this._points;return[[{x:n[0].x,y:n[0].y},{x:n[1].x,y:n[1].y},{x:n[2].x,y:n[2].y},{x:n[3].x,y:n[3].y}]]},toSVG:function(n){return this.toSVGPath(!!arguments.length&&n)},toSVGPath:function(n){var t=this,e=t._points,e=["M",e[0].x,e[0].y,"C",e[1].x,e[1].y,e[2].x,e[2].y,e[3].x,e[3].y].join(" ");return arguments.length?ct("path",{id:[t.id,!1],d:[e,t.isChanged()],style:[t.style.toSVG(),t.style.isChanged()]},n):e},toCanvas:function(n){this.style.toCanvas(n),this.toCanvasPath(n),n.stroke()},toCanvasPath:function(n){var t=this._points;n.beginPath(),n.moveTo(t[0].x,t[0].y),n.bezierCurveTo(t[1].x,t[1].y,t[2].x,t[2].y,t[3].x,t[3].y)}});e.CBezier=e.Bezier3=W;var U=i(z,{constructor:function n(t){var r=this,e=null,i=null,o=null,a=null,s=null;return t instanceof n?t:r instanceof n?(r.$super("constructor",[t]),b(r,"vertices",{get:function(){return r.points},set:function(n){r.points=n},enumerable:!0,configurable:!1}),b(r,"edges",{get:function(){var e=r.points;return 1=n.nframes}n["ease-in"]=n["ease-in-quad"],n["ease-out"]=n["ease-out-quad"],n["ease-in-out"]=n["ease-in-out-quad"];var rn=i(E,{constructor:function n(e){var t,r=this,i=!1,o=0,a=null,s=null;return e instanceof n?e:r instanceof n?(E.call(r),r.start=function(){return i=!0,tn(e)&&a&&a(r),setTimeout(t,((tn(e)?e.delay:0)||0)+o),r},r.stop=function(){return i=!1,r},r.rewind=function(){return function(n){n.reverse?n.kf=n.keyframes.length-1:n.kf=0;var t,e,r,i,o,a,s=n.keyframes[n.kf],u=s.transform.translate.x,l=s.transform.translate.y,c=s.transform.scale.origin.x,f=s.transform.scale.origin.y,h=s.transform.scale.x,g=s.transform.scale.y,y=s.transform.rotate.origin.x,x=s.transform.rotate.origin.y,p=s.transform.rotate.angle,m=1,d=0,v=s.shape,b=v.length,C=new Array(b);for(at(p,0)||(m=S.cos(p),d=S.sin(p)),u+=y-m*y+d*x,l+=x-m*x-d*y,e=0;ee+1?2:1}}(n.shape,p)}),y}(e,60),t=function n(){i&&e&&(!function(n){if(n.current.frame=tt(n.current.frame+(n.reverse?-1:1),-1,n.nframes),!en(n)){var t,e;b=n.reverse?(1<=n.kf&&n.current.frame<=n.keyframes[n.kf-1].frame&&0<=n.kf-2&&--n.kf,t=n.keyframes[n.kf],e=n.keyframes[1<=n.kf?n.kf-1:0],G(n.current.frame-t.frame)/(t.frame-e.frame+1)):(n.kf+1=n.keyframes[n.kf+1].frame&&n.kf+2"+bt(r)+"":"/>");return t}function ft(a,s,u,i){if(St(a.onChange))return a;function l(t){a.$cb.forEach(function(n){n(t)})}var c=!0;i=i||gt;var f=function(n,t){for(var e=n;e