quoslibero
Version:
FusionCharts JavaScript charting framework
1 lines • 1.98 kB
JavaScript
const epsilon=1e-6,pi=Math.PI,tau=2*pi,tauEpsilon=tau-epsilon;class Path{constructor(){this._clear()}moveTo(a,b){this._x0=this._x1=+a,this._y0=this._y1=+b,this.pathStr+=`M${this._x0},${this._y0}`}lineTo(a,b){this._x1=+a,this._y1=+b,this.pathStr+=`L${this._x1},${this._y1}`}quadraticCurveTo(a,b,c,d){this._x1=+c,this._y1=+d,a=+a,b=+b,this.pathStr+=`Q${a},${b},${this._x1},${this._y1}`}bezierCurveTo(a,b,c,d,e,f){this._x1=+e,this._y1=+f,a=+a,b=+b,c=+c,d=+d,this.pathStr+=`C${a},${b},${c},${d},${this._x1},${this._y1}`}rect(a,b,c,d){let e=this;e._x0=e._x1=+a,e._y0=e._y1=+b,c=+c,d=+d,e.pathStr+=`M${e._x0},${e._y0}h${c}v${d}h${-c}Z`}arcTo(a,b,c,d,e){var f=Math.sqrt,g=Math.abs;let h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x=this;a=+a,c=+c,b=+b,d=+d,e=+e,v=x._x1,w=x._y1,j=c-a,k=d-b,l=v-a,m=w-b,n=l*l+m*m,e=Math.max(e,0),null===this._x1?(this._x1=a,this._y1=b,this.pathStr+=`M${this._x1},${this._y1}`):!(n>epsilon)||(g(m*j-k*l)>epsilon&&e?(h=c-v,i=d-w,q=j*j+k*k,p=h*h+i*i,r=f(q),o=f(n),u=e*Math.tan((pi-Math.acos((q+n-p)/(2*r*o)))/2),s=u/o,t=u/r,g(s-1)>epsilon&&(this.pathStr+=`L${a+s*l},${b+s*m}`),this._x1=a+t*j,this._y1=b+t*k,this.pathStr+=`A${e},${e},0,0,${+(m*h>l*i)},${this._x1},${this._y1}`):(this._x1=a,this._y1=b,this.pathStr+=`L${this._x1},${this._y1}`))}arc(a,b,c,d,e,f=!1){var g=Math.sin,h=Math.cos,i=Math.abs;a=+a,b=+b,c=+c,d=+d,e=+e,f=!!f;let j=this,k=c*h(d),l=c*g(d),m=a+k,n=b+l,o=+!f,p=f?d-e:e-d;Math.max(c,0),null===j._x1?j.pathStr+=`M${m},${n}`:(i(j._x1-m)>epsilon||i(j._y1-n)>epsilon)&&(j.pathStr+=`L${m},${n}`);c&&(0>p&&(p=p%tau+tau),p>tauEpsilon?(j._x1=m,j._y1=n,j.pathStr+=`A${c},${c},0,1,${o},${a-k},${b-l}`,j.pathStr+=`A${c},${c},0,1,${o},${j._x1},${j._y1}`):p>epsilon&&(j._x1=a+c*h(e),j._y1=b+c*g(e),j.pathStr+=`A${c},${c},0,${+(p>=pi)},${o},${j._x1},${j._y1}`))}closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this.pathStr+='Z')}toString(){return this.pathStr}_clear(){this._x0=this._y0=this._x1=this._y1=null,this.pathStr=''}}export default Path;