fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
2 lines • 6.48 kB
JavaScript
import{CENTER as e,LEFT as t,SCALE_X as n,SCALE_Y as r,iMatrix as i}from"../../constants.min.mjs";import{Point as a}from"../../Point.min.mjs";import{CommonMethods as o}from"../../CommonMethods.min.mjs";import{degreesToRadians as s,radiansToDegrees as c}from"../../util/misc/radiansDegreesConversion.min.mjs";import{calcDimensionsMatrix as l,calcPlaneRotation as u,composeMatrix as d,createRotateMatrix as f,createTranslateMatrix as p,invertTransform as m,multiplyTransformMatrices as h,transformPoint as g}from"../../util/misc/matrix.min.mjs";import{makeBoundingBoxFromPoints as _}from"../../util/misc/boundingBoxFromPoints.min.mjs";import{sizeAfterTransform as v}from"../../util/misc/objectTransforms.min.mjs";import{resolveOrigin as y}from"../../util/misc/resolveOrigin.min.mjs";import{Intersection as b}from"../../Intersection.min.mjs";var x=class extends o{getX(){return this.getXY().x}setX(e){this.setXY(this.getXY().setX(e))}getY(){return this.getXY().y}setY(e){this.setXY(this.getXY().setY(e))}getRelativeX(){return this.left}setRelativeX(e){this.left=e}getRelativeY(){return this.top}setRelativeY(e){this.top=e}getXY(){let e=this.getRelativeXY();return this.group?g(e,this.group.calcTransformMatrix()):e}setXY(e,t,n){this.group&&(e=g(e,m(this.group.calcTransformMatrix()))),this.setRelativeXY(e,t,n)}getRelativeXY(){return new a(this.left,this.top)}setRelativeXY(e,t=this.originX,n=this.originY){this.setPositionByOrigin(e,t,n)}isStrokeAccountedForInDimensions(){return!1}getCoords(){let{tl:e,tr:t,br:n,bl:r}=this.aCoords||(this.aCoords=this.calcACoords()),i=[e,t,n,r];if(this.group){let e=this.group.calcTransformMatrix();return i.map(t=>g(t,e))}return i}intersectsWithRect(e,t){return b.intersectPolygonRectangle(this.getCoords(),e,t).status===`Intersection`}intersectsWithObject(e){let t=b.intersectPolygonPolygon(this.getCoords(),e.getCoords());return t.status===`Intersection`||t.status===`Coincident`||e.isContainedWithinObject(this)||this.isContainedWithinObject(e)}isContainedWithinObject(e){return this.getCoords().every(t=>e.containsPoint(t))}isContainedWithinRect(e,t){let{left:n,top:r,width:i,height:a}=this.getBoundingRect();return n>=e.x&&n+i<=t.x&&r>=e.y&&r+a<=t.y}isOverlapping(e){return this.intersectsWithObject(e)||this.isContainedWithinObject(e)||e.isContainedWithinObject(this)}containsPoint(e){return b.isPointInPolygon(e,this.getCoords())}isOnScreen(){if(!this.canvas)return!1;let{tl:e,br:t}=this.canvas.vptCoords;return!!this.getCoords().some(n=>n.x<=t.x&&n.x>=e.x&&n.y<=t.y&&n.y>=e.y)||!!this.intersectsWithRect(e,t)||this.containsPoint(e.midPointFrom(t))}isPartiallyOnScreen(){if(!this.canvas)return!1;let{tl:e,br:t}=this.canvas.vptCoords;return!!this.intersectsWithRect(e,t)||this.getCoords().every(n=>(n.x>=t.x||n.x<=e.x)&&(n.y>=t.y||n.y<=e.y))&&this.containsPoint(e.midPointFrom(t))}getBoundingRect(){return _(this.getCoords())}getScaledWidth(){return this._getTransformedDimensions().x}getScaledHeight(){return this._getTransformedDimensions().y}scale(e){this._set(n,e),this._set(r,e),this.setCoords()}scaleToWidth(e){let t=this.getBoundingRect().width/this.getScaledWidth();return this.scale(e/this.width/t)}scaleToHeight(e){let t=this.getBoundingRect().height/this.getScaledHeight();return this.scale(e/this.height/t)}getCanvasRetinaScaling(){var e;return((e=this.canvas)==null?void 0:e.getRetinaScaling())||1}getTotalAngle(){return this.group?c(u(this.calcTransformMatrix())):this.angle}getViewportTransform(){var e;return((e=this.canvas)==null?void 0:e.viewportTransform)||i.concat()}calcACoords(){let e=f({angle:this.angle}),{x:t,y:n}=this.getRelativeCenterPoint(),r=h(p(t,n),e),i=this._getTransformedDimensions(),a=i.x/2,o=i.y/2;return{tl:g({x:-a,y:-o},r),tr:g({x:a,y:-o},r),bl:g({x:-a,y:o},r),br:g({x:a,y:o},r)}}setCoords(){this.aCoords=this.calcACoords()}transformMatrixKey(e=!1){let t=[];return!e&&this.group&&(t=this.group.transformMatrixKey(e)),t.push(this.top,this.left,this.width,this.height,this.scaleX,this.scaleY,this.angle,this.strokeWidth,this.skewX,this.skewY,+this.flipX,+this.flipY,y(this.originX),y(this.originY)),t}calcTransformMatrix(e=!1){let t=this.calcOwnMatrix();if(e||!this.group)return t;let n=this.transformMatrixKey(e),r=this.matrixCache;return r&&r.key.every((e,t)=>e===n[t])?r.value:(this.group&&(t=h(this.group.calcTransformMatrix(!1),t)),this.matrixCache={key:n,value:t},t)}calcOwnMatrix(){let e=this.transformMatrixKey(!0),t=this.ownMatrixCache;if(t&&t.key.every((t,n)=>t===e[n]))return t.value;let n=this.getRelativeCenterPoint(),r=d({angle:this.angle,translateX:n.x,translateY:n.y,scaleX:this.scaleX,scaleY:this.scaleY,skewX:this.skewX,skewY:this.skewY,flipX:this.flipX,flipY:this.flipY});return this.ownMatrixCache={key:e,value:r},r}_getNonTransformedDimensions(){return new a(this.width,this.height).scalarAdd(this.strokeWidth)}_calculateCurrentDimensions(e){return this._getTransformedDimensions(e).transform(this.getViewportTransform(),!0).scalarAdd(2*this.padding)}_getTransformedDimensions(e={}){let t={scaleX:this.scaleX,scaleY:this.scaleY,skewX:this.skewX,skewY:this.skewY,width:this.width,height:this.height,strokeWidth:this.strokeWidth,...e},n=t.strokeWidth,r=n,i=0;this.strokeUniform&&(r=0,i=n);let o=t.width+r,s=t.height+r,c;return c=t.skewX===0&&t.skewY===0?new a(o*t.scaleX,s*t.scaleY):v(o,s,l(t)),c.scalarAdd(i)}translateToGivenOrigin(e,t,n,r,i){let o=e.x,s=e.y,c=y(r)-y(t),l=y(i)-y(n);if(c||l){let e=this._getTransformedDimensions();o+=c*e.x,s+=l*e.y}return new a(o,s)}translateToCenterPoint(t,n,r){if(n===`center`&&r===`center`)return t;let i=this.translateToGivenOrigin(t,n,r,e,e);return this.angle?i.rotate(s(this.angle),t):i}translateToOriginPoint(t,n,r){let i=this.translateToGivenOrigin(t,e,e,n,r);return this.angle?i.rotate(s(this.angle),t):i}getCenterPoint(){let e=this.getRelativeCenterPoint();return this.group?g(e,this.group.calcTransformMatrix()):e}getRelativeCenterPoint(){return this.translateToCenterPoint(new a(this.left,this.top),this.originX,this.originY)}getPointByOrigin(e,t){return this.getPositionByOrigin(e,t)}getPositionByOrigin(e,t){return this.translateToOriginPoint(this.getRelativeCenterPoint(),e,t)}setPositionByOrigin(e,t,n){let r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set({left:i.x,top:i.y})}_getLeftTopCoords(){return this.getPositionByOrigin(t,`top`)}positionByLeftTop(e){return this.setPositionByOrigin(e,t,`top`)}};export{x as ObjectGeometry};
//# sourceMappingURL=ObjectGeometry.min.mjs.map