UNPKG

fabric

Version:

Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.

2 lines 3.65 kB
import{_defineProperty as e}from"../../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/defineProperty.min.mjs";import{halfPI as t,twoMathPi as n}from"../../../constants.min.mjs";import{Point as r}from"../../../Point.min.mjs";import{degreesToRadians as i}from"../radiansDegreesConversion.min.mjs";import{calcAngleBetweenVectors as a,calcVectorRotation as o,crossProduct as s,getOrthonormalVector as c,getUnitVector as l,isBetweenVectors as u,magnitude as d,rotateVector as f}from"../vectors.min.mjs";import{StrokeProjectionsBase as p}from"./StrokeProjectionsBase.min.mjs";const m=new r;var h=class h extends p{static getOrthogonalRotationFactor(e,n){let r=n?a(e,n):o(e);return Math.abs(r)<t?-1:1}constructor(t,n,i,o){super(o),e(this,`AB`,void 0),e(this,`AC`,void 0),e(this,`alpha`,void 0),e(this,`bisector`,void 0),this.A=new r(t),this.B=new r(n),this.C=new r(i),this.AB=this.createSideVector(this.A,this.B),this.AC=this.createSideVector(this.A,this.C),this.alpha=a(this.AB,this.AC),this.bisector=l(f(this.AB.eq(m)?this.AC:this.AB,this.alpha/2))}calcOrthogonalProjection(e,t,n=this.strokeProjectionMagnitude){let r=c(this.createSideVector(e,t)),i=h.getOrthogonalRotationFactor(r,this.bisector);return this.scaleUnitVector(r,n*i)}projectBevel(){let e=[];return(this.alpha%n===0?[this.B]:[this.B,this.C]).forEach(t=>{e.push(this.projectOrthogonally(this.A,t)),e.push(this.projectOrthogonally(this.A,t,-this.strokeProjectionMagnitude))}),e}projectMiter(){let e=[],t=Math.abs(this.alpha),n=1/Math.sin(t/2),r=this.scaleUnitVector(this.bisector,-this.strokeProjectionMagnitude*n),i=this.options.strokeUniform?d(this.scaleUnitVector(this.bisector,this.options.strokeMiterLimit)):this.options.strokeMiterLimit;return d(r)/this.strokeProjectionMagnitude<=i&&e.push(this.applySkew(this.A.add(r))),e.push(...this.projectBevel()),e}projectRoundNoSkew(e,t){let n=[],i=new r(h.getOrthogonalRotationFactor(this.bisector),h.getOrthogonalRotationFactor(new r(this.bisector.y,this.bisector.x)));return[new r(1,0).scalarMultiply(this.strokeProjectionMagnitude).multiply(this.strokeUniformScalar).multiply(i),new r(0,1).scalarMultiply(this.strokeProjectionMagnitude).multiply(this.strokeUniformScalar).multiply(i)].forEach(r=>{u(r,e,t)&&n.push(this.A.add(r))}),n}projectRoundWithSkew(e,t){let n=[],{skewX:a,skewY:o,scaleX:s,scaleY:c,strokeUniform:l}=this.options,d=new r(Math.tan(i(a)),Math.tan(i(o))),f=this.strokeProjectionMagnitude,p=l?f/c/Math.sqrt(1/c**2+1/s**2*d.y**2):f/Math.sqrt(1+d.y**2),m=new r(Math.sqrt(Math.max(f**2-p**2,0)),p),h=l?f/Math.sqrt(1+d.x**2*(1/c)**2/(1/s+1/s*d.x*d.y)**2):f/Math.sqrt(1+d.x**2/(1+d.x*d.y)**2),g=new r(h,Math.sqrt(Math.max(f**2-h**2,0)));return[g,g.scalarMultiply(-1),m,m.scalarMultiply(-1)].map(e=>this.applySkew(l?e.multiply(this.strokeUniformScalar):e)).forEach(r=>{u(r,e,t)&&n.push(this.applySkew(this.A).add(r))}),n}projectRound(){let e=[];e.push(...this.projectBevel());let t=this.alpha%n===0,r=this.applySkew(this.A),i=e[t?0:2].subtract(r),a=e[t?1:0].subtract(r),o=s(i,t?this.applySkew(this.AB.scalarMultiply(-1)):this.applySkew(this.bisector.multiply(this.strokeUniformScalar).scalarMultiply(-1)))>0,c=o?i:a,l=o?a:i;return this.isSkewed()?e.push(...this.projectRoundWithSkew(c,l)):e.push(...this.projectRoundNoSkew(c,l)),e}projectPoints(){switch(this.options.strokeLineJoin){case`miter`:return this.projectMiter();case`round`:return this.projectRound();default:return this.projectBevel()}}project(){return this.projectPoints().map(e=>({originPoint:this.A,projectedPoint:e,angle:this.alpha,bisector:this.bisector}))}};export{h as StrokeLineJoinProjections}; //# sourceMappingURL=StrokeLineJoinProjections.min.mjs.map