@mlightcad/geometry-engine 3.10.5 → 3.10.6

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.
@@ -1 +1 @@
1
- (function(_,V){typeof exports=="object"&&typeof module<"u"?V(exports,require("@mlightcad/common")):typeof define=="function"&&define.amd?define(["exports","@mlightcad/common"],V):(_=typeof globalThis<"u"?globalThis:_||self,V(_["geometry-engine"]={},_.common))})(this,function(_,V){"use strict";const L=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];let rn=1234567;const qt=Math.PI/180,vt=180/Math.PI;function on(){const o=Math.random()*4294967295|0,t=Math.random()*4294967295|0,n=Math.random()*4294967295|0,e=Math.random()*4294967295|0;return(L[o&255]+L[o>>8&255]+L[o>>16&255]+L[o>>24&255]+"-"+L[t&255]+L[t>>8&255]+"-"+L[t>>16&15|64]+L[t>>24&255]+"-"+L[n&63|128]+L[n>>8&255]+"-"+L[n>>16&255]+L[n>>24&255]+L[e&255]+L[e>>8&255]+L[e>>16&255]+L[e>>24&255]).toLowerCase()}function Q(o,t,n){return Math.max(t,Math.min(n,o))}function Vt(o,t){return(o%t+t)%t}function hn(o,t,n,e,s){return e+(o-t)*(s-e)/(n-t)}function an(o,t,n){return o!==t?(n-o)/(t-o):0}function Lt(o,t,n){return(1-n)*o+n*t}function cn(o,t,n,e){return Lt(o,t,1-Math.exp(-n*e))}function ln(o,t=1){return t-Math.abs(Vt(o,t*2)-t)}function un(o,t,n){return o<=t?0:o>=n?1:(o=(o-t)/(n-t),o*o*(3-2*o))}function dn(o,t,n){return o<=t?0:o>=n?1:(o=(o-t)/(n-t),o*o*o*(o*(o*6-15)+10))}function mn(o,t){return o+Math.floor(Math.random()*(t-o+1))}function gn(o,t){return o+Math.random()*(t-o)}function yn(o){return o*(.5-Math.random())}function xn(o){o!==void 0&&(rn=o);let t=rn+=1831565813;return t=Math.imul(t^t>>>15,t|1),t^=t+Math.imul(t^t>>>7,t|61),((t^t>>>14)>>>0)/4294967296}function fn(o){return o*qt}function _n(o){return o*vt}function An(o){return(o&o-1)===0&&o!==0}function Pn(o){return Math.pow(2,Math.ceil(Math.log(o)/Math.LN2))}function pn(o){return Math.pow(2,Math.floor(Math.log(o)/Math.LN2))}function mt(o){const t=Math.PI*2;return(o%t+t)%t}function wn(o,t,n){return o>t&&o<n||o>n&&o<t}function Mn(o,t,n,e=!1){return o=mt(o),t=mt(t),n=mt(n),e?t>n?o<=t&&o>=n:o<=t||o>=n:t<n?o>=t&&o<=n:o>=t||o<=n}function Ut(o){return o=Math.abs(o),o<1?0:Math.ceil(Math.log10(Math.abs(o)+1))}function zn(o,t=1e-7){const n=Ut(o);return Math.max(Math.pow(10,n)*t,t)}const w={DEG2RAD:qt,RAD2DEG:vt,generateUUID:on,clamp:Q,euclideanModulo:Vt,mapLinear:hn,inverseLerp:an,lerp:Lt,damp:cn,pingpong:ln,smoothstep:un,smootherstep:dn,randInt:mn,randFloat:gn,randFloatSpread:yn,seededRandom:xn,degToRad:fn,radToDeg:_n,isPowerOfTwo:An,ceilPowerOfTwo:Pn,floorPowerOfTwo:pn,normalizeAngle:mt,isBetween:wn,isBetweenAngle:Mn,intPartLength:Ut,relativeEps:zn},At=class At{constructor(t,n){this.x=0,this.y=0;const e=+(t!==void 0)+ +(n!==void 0);if(e!==0){if(e===1&&t instanceof Array){this.x=t[0],this.y=t[1];return}if(e===1){const{x:s,y:i}=t;this.x=s,this.y=i;return}if(e===2){this.x=t,this.y=n;return}throw V.AcCmErrors.ILLEGAL_PARAMETERS}}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,n){return this.x=t,this.y=n,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,n){switch(t){case 0:this.x=n;break;case 1:this.y=n;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new At(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t){return this.x+=t.x,this.y+=t.y,this}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,n){return this.x=t.x+n.x,this.y=t.y+n.y,this}addScaledVector(t,n){return this.x+=t.x*n,this.y+=t.y*n,this}sub(t){return this.x-=t.x,this.y-=t.y,this}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,n){return this.x=t.x-n.x,this.y=t.y-n.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix2d(t){const n=this.x,e=this.y,s=t.elements;return this.x=s[0]*n+s[3]*e+s[6],this.y=s[1]*n+s[4]*e+s[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,n){return this.x=Math.max(t.x,Math.min(n.x,this.x)),this.y=Math.max(t.y,Math.min(n.y,this.y)),this}clampScalar(t,n){return this.x=Math.max(t,Math.min(n,this.x)),this.y=Math.max(t,Math.min(n,this.y)),this}clampLength(t,n){const e=this.length();return this.divideScalar(e||1).multiplyScalar(Math.max(t,Math.min(n,e)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(t){const n=Math.sqrt(this.lengthSq()*t.lengthSq());if(n===0)return Math.PI/2;const e=this.dot(t)/n;return Math.acos(Math.max(-1,Math.min(1,e)))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const n=this.x-t.x,e=this.y-t.y;return n*n+e*e}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,n){return this.x+=(t.x-this.x)*n,this.y+=(t.y-this.y)*n,this}lerpVectors(t,n,e){return this.x=t.x+(n.x-t.x)*e,this.y=t.y+(n.y-t.y)*e,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,n=0){return this.x=t[n],this.y=t[n+1],this}toArray(t=[],n=0){return t[n]=this.x,t[n+1]=this.y,t}rotateAround(t,n){const e=Math.cos(n),s=Math.sin(n),i=this.x-t.x,r=this.y-t.y;return this.x=i*e-r*s+t.x,this.y=i*s+r*e+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}relativeEps(t=1e-7){return Math.min(w.relativeEps(this.x,t),w.relativeEps(this.y,t))}*[Symbol.iterator](){yield this.x,yield this.y}};At.EMPTY=Object.freeze(new At(0,0));let R=At;const Pt=class Pt{constructor(t,n,e,s,i,r,h,a,c){this.elements=[1,0,0,0,1,0,0,0,1],t!=null&&n!=null&&e!=null&&s!=null&&i!=null&&r!=null&&h!=null&&a!=null&&c!=null&&this.set(t,n,e,s,i,r,h,a,c)}set(t,n,e,s,i,r,h,a,c){const l=this.elements;return l[0]=t,l[1]=s,l[2]=h,l[3]=n,l[4]=i,l[5]=a,l[6]=e,l[7]=r,l[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const n=this.elements,e=t.elements;return n[0]=e[0],n[1]=e[1],n[2]=e[2],n[3]=e[3],n[4]=e[4],n[5]=e[5],n[6]=e[6],n[7]=e[7],n[8]=e[8],this}extractBasis(t,n,e){return t.setFromMatrix3Column(this,0),n.setFromMatrix3Column(this,1),e.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const n=t.elements;return this.set(n[0],n[4],n[8],n[1],n[5],n[9],n[2],n[6],n[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,n){const e=t.elements,s=n.elements,i=this.elements,r=e[0],h=e[3],a=e[6],c=e[1],l=e[4],u=e[7],d=e[2],m=e[5],g=e[8],y=s[0],x=s[3],f=s[6],b=s[1],p=s[4],C=s[7],S=s[2],T=s[5],z=s[8];return i[0]=r*y+h*b+a*S,i[3]=r*x+h*p+a*T,i[6]=r*f+h*C+a*z,i[1]=c*y+l*b+u*S,i[4]=c*x+l*p+u*T,i[7]=c*f+l*C+u*z,i[2]=d*y+m*b+g*S,i[5]=d*x+m*p+g*T,i[8]=d*f+m*C+g*z,this}multiplyScalar(t){const n=this.elements;return n[0]*=t,n[3]*=t,n[6]*=t,n[1]*=t,n[4]*=t,n[7]*=t,n[2]*=t,n[5]*=t,n[8]*=t,this}determinant(){const t=this.elements,n=t[0],e=t[1],s=t[2],i=t[3],r=t[4],h=t[5],a=t[6],c=t[7],l=t[8];return n*r*l-n*h*c-e*i*l+e*h*a+s*i*c-s*r*a}invert(){const t=this.elements,n=t[0],e=t[1],s=t[2],i=t[3],r=t[4],h=t[5],a=t[6],c=t[7],l=t[8],u=l*r-h*c,d=h*a-l*i,m=c*i-r*a,g=n*u+e*d+s*m;if(g===0)return this.set(0,0,0,0,0,0,0,0,0);const y=1/g;return t[0]=u*y,t[1]=(s*c-l*e)*y,t[2]=(h*e-s*r)*y,t[3]=d*y,t[4]=(l*n-s*a)*y,t[5]=(s*i-h*n)*y,t[6]=m*y,t[7]=(e*a-c*n)*y,t[8]=(r*n-e*i)*y,this}transpose(){let t;const n=this.elements;return t=n[1],n[1]=n[3],n[3]=t,t=n[2],n[2]=n[6],n[6]=t,t=n[5],n[5]=n[7],n[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const n=this.elements;return t.elements[0]=n[0],t.elements[1]=n[3],t.elements[2]=n[6],t.elements[3]=n[1],t.elements[4]=n[4],t.elements[5]=n[7],t.elements[6]=n[2],t.elements[7]=n[5],t.elements[8]=n[8],this}setUvTransform(t,n,e,s,i,r,h){const a=Math.cos(i),c=Math.sin(i);return this.set(e*a,e*c,-e*(a*r+c*h)+r+t,-s*c,s*a,-s*(-c*r+a*h)+h+n,0,0,1),this}scale(t,n){return this.premultiply(Ft.makeScale(t,n)),this}rotate(t){return this.premultiply(Ft.makeRotation(-t)),this}translate(t,n){return this.premultiply(Ft.makeTranslation(t,n)),this}makeTranslation(t,n){return t instanceof R?this.set(1,0,t.x,0,1,t.y,0,0,1):this.set(1,0,t,0,1,n,0,0,1),this}makeRotation(t){const n=Math.cos(t),e=Math.sin(t);return this.set(n,-e,0,e,n,0,0,0,1),this}makeScale(t,n){return this.set(t,0,0,0,n,0,0,0,1),this}equals(t){const n=this.elements,e=t.elements;for(let s=0;s<9;s++)if(n[s]!==e[s])return!1;return!0}fromArray(t,n=0){for(let e=0;e<9;e++)this.elements[e]=t[e+n];return this}toArray(t=[],n=0){const e=this.elements;return t[n]=e[0],t[n+1]=e[1],t[n+2]=e[2],t[n+3]=e[3],t[n+4]=e[4],t[n+5]=e[5],t[n+6]=e[6],t[n+7]=e[7],t[n+8]=e[8],t}clone(){return new Pt().fromArray(this.elements)}};Pt.IDENTITY=Object.freeze(new Pt);let ot=Pt;const Ft=new ot,$=1e-6,I=2*Math.PI,se={x:0,y:0},Ot={x:0,y:0,z:0};class B{constructor(){this.equalPointTol=$,this.equalVectorTol=$}clone(){const t=new B;return t.equalPointTol=this.equalPointTol,t.equalVectorTol=this.equalVectorTol,t}equalPoint2d(t,n){return new R(t).sub(n).length()<this.equalPointTol}equalPoint3d(t,n){return new A(t).sub(n).length()<this.equalPointTol}static equalToZero(t,n=$){return t<n&&t>-n}static equal(t,n,e=$){return Math.abs(t-n)<e}static great(t,n,e=$){return t-n>e}static less(t,n,e=$){return t-n<e}static isPositive(t,n=$){return t>n}static isNonPositive(t,n=$){return t<=n}}const wt=new B;class gt{constructor(t=0,n=0,e=0,s=1){this._x=t,this._y=n,this._z=e,this._w=s}static slerpFlat(t,n,e,s,i,r,h){let a=e[s+0],c=e[s+1],l=e[s+2],u=e[s+3];const d=i[r+0],m=i[r+1],g=i[r+2],y=i[r+3];if(h===0){t[n+0]=a,t[n+1]=c,t[n+2]=l,t[n+3]=u;return}if(h===1){t[n+0]=d,t[n+1]=m,t[n+2]=g,t[n+3]=y;return}if(u!==y||a!==d||c!==m||l!==g){let x=1-h;const f=a*d+c*m+l*g+u*y,b=f>=0?1:-1,p=1-f*f;if(p>Number.EPSILON){const S=Math.sqrt(p),T=Math.atan2(S,f*b);x=Math.sin(x*T)/S,h=Math.sin(h*T)/S}const C=h*b;if(a=a*x+d*C,c=c*x+m*C,l=l*x+g*C,u=u*x+y*C,x===1-h){const S=1/Math.sqrt(a*a+c*c+l*l+u*u);a*=S,c*=S,l*=S,u*=S}}t[n]=a,t[n+1]=c,t[n+2]=l,t[n+3]=u}static multiplyQuaternionsFlat(t,n,e,s,i,r){const h=e[s],a=e[s+1],c=e[s+2],l=e[s+3],u=i[r],d=i[r+1],m=i[r+2],g=i[r+3];return t[n]=h*g+l*u+a*m-c*d,t[n+1]=a*g+l*d+c*u-h*m,t[n+2]=c*g+l*m+h*d-a*u,t[n+3]=l*g-h*u-a*d-c*m,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,n,e,s){return this._x=t,this._y=n,this._z=e,this._w=s,this._onChangeCallback(),this}clone(){return new gt(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,n=!0){const e=t.x,s=t.y,i=t.z,r=t.order,h=Math.cos,a=Math.sin,c=h(e/2),l=h(s/2),u=h(i/2),d=a(e/2),m=a(s/2),g=a(i/2);switch(r){case"XYZ":this._x=d*l*u+c*m*g,this._y=c*m*u-d*l*g,this._z=c*l*g+d*m*u,this._w=c*l*u-d*m*g;break;case"YXZ":this._x=d*l*u+c*m*g,this._y=c*m*u-d*l*g,this._z=c*l*g-d*m*u,this._w=c*l*u+d*m*g;break;case"ZXY":this._x=d*l*u-c*m*g,this._y=c*m*u+d*l*g,this._z=c*l*g+d*m*u,this._w=c*l*u-d*m*g;break;case"ZYX":this._x=d*l*u-c*m*g,this._y=c*m*u+d*l*g,this._z=c*l*g-d*m*u,this._w=c*l*u+d*m*g;break;case"YZX":this._x=d*l*u+c*m*g,this._y=c*m*u+d*l*g,this._z=c*l*g-d*m*u,this._w=c*l*u-d*m*g;break;case"XZY":this._x=d*l*u-c*m*g,this._y=c*m*u-d*l*g,this._z=c*l*g+d*m*u,this._w=c*l*u+d*m*g;break}return n===!0&&this._onChangeCallback(),this}setFromAxisAngle(t,n){const e=n/2,s=Math.sin(e);return this._x=t.x*s,this._y=t.y*s,this._z=t.z*s,this._w=Math.cos(e),this._onChangeCallback(),this}setFromRotationMatrix(t){const n=t.elements,e=n[0],s=n[4],i=n[8],r=n[1],h=n[5],a=n[9],c=n[2],l=n[6],u=n[10],d=e+h+u;if(d>0){const m=.5/Math.sqrt(d+1);this._w=.25/m,this._x=(l-a)*m,this._y=(i-c)*m,this._z=(r-s)*m}else if(e>h&&e>u){const m=2*Math.sqrt(1+e-h-u);this._w=(l-a)/m,this._x=.25*m,this._y=(s+r)/m,this._z=(i+c)/m}else if(h>u){const m=2*Math.sqrt(1+h-e-u);this._w=(i-c)/m,this._x=(s+r)/m,this._y=.25*m,this._z=(a+l)/m}else{const m=2*Math.sqrt(1+u-e-h);this._w=(r-s)/m,this._x=(i+c)/m,this._y=(a+l)/m,this._z=.25*m}return this._onChangeCallback(),this}setFromUnitVectors(t,n){let e=t.dot(n)+1;return e<Number.EPSILON?(e=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=e):(this._x=0,this._y=-t.z,this._z=t.y,this._w=e)):(this._x=t.y*n.z-t.z*n.y,this._y=t.z*n.x-t.x*n.z,this._z=t.x*n.y-t.y*n.x,this._w=e),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(Q(this.dot(t),-1,1)))}rotateTowards(t,n){const e=this.angleTo(t);if(e===0)return this;const s=Math.min(1,n/e);return this.slerp(t,s),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return t===0?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t){return this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,n){const e=t._x,s=t._y,i=t._z,r=t._w,h=n._x,a=n._y,c=n._z,l=n._w;return this._x=e*l+r*h+s*c-i*a,this._y=s*l+r*a+i*h-e*c,this._z=i*l+r*c+e*a-s*h,this._w=r*l-e*h-s*a-i*c,this._onChangeCallback(),this}slerp(t,n){if(n===0)return this;if(n===1)return this.copy(t);const e=this._x,s=this._y,i=this._z,r=this._w;let h=r*t._w+e*t._x+s*t._y+i*t._z;if(h<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,h=-h):this.copy(t),h>=1)return this._w=r,this._x=e,this._y=s,this._z=i,this;const a=1-h*h;if(a<=Number.EPSILON){const m=1-n;return this._w=m*r+n*this._w,this._x=m*e+n*this._x,this._y=m*s+n*this._y,this._z=m*i+n*this._z,this.normalize(),this}const c=Math.sqrt(a),l=Math.atan2(c,h),u=Math.sin((1-n)*l)/c,d=Math.sin(n*l)/c;return this._w=r*u+this._w*d,this._x=e*u+this._x*d,this._y=s*u+this._y*d,this._z=i*u+this._z*d,this._onChangeCallback(),this}slerpQuaternions(t,n,e){return this.copy(t).slerp(n,e)}random(){const t=2*Math.PI*Math.random(),n=2*Math.PI*Math.random(),e=Math.random(),s=Math.sqrt(1-e),i=Math.sqrt(e);return this.set(s*Math.sin(t),s*Math.cos(t),i*Math.sin(n),i*Math.cos(n))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,n=0){return this._x=t[n],this._y=t[n+1],this._z=t[n+2],this._w=t[n+3],this._onChangeCallback(),this}toArray(t=[],n=0){return t[n]=this._x,t[n+1]=this._y,t[n+2]=this._z,t[n+3]=this._w,t}toJSON(){return this.toArray()}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}const q=class q{constructor(t,n,e){this.x=0,this.y=0,this.z=0;const s=+(t!==void 0)+ +(n!==void 0)+ +(e!==void 0);if(s!==0){if(s===1&&t instanceof Array){this.x=t[0],this.y=t[1],this.z=t[2];return}if(s===1){const{x:i,y:r,z:h}=t;this.x=i,this.y=r,this.z=h||0;return}if(s===3){this.x=t,this.y=n,this.z=e;return}throw V.AcCmErrors.ILLEGAL_PARAMETERS}}set(t,n,e){return e===void 0&&(e=this.z),this.x=t,this.y=n,this.z=e,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,n){switch(t){case 0:this.x=n;break;case 1:this.y=n;break;case 2:this.z=n;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new q(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z||0,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z||0,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,n){return this.x=t.x+n.x,this.y=t.y+n.y,this.z=t.z+n.z,this}addScaledVector(t,n){return this.x+=t.x*n,this.y+=t.y*n,this.z+=t.z*n,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,n){return this.x=t.x-n.x,this.y=t.y-n.y,this.z=t.z-n.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,n){return this.x=t.x*n.x,this.y=t.y*n.y,this.z=t.z*n.z,this}applyEuler(t){return this.applyQuaternion(bn.setFromEuler(t))}applyAxisAngle(t,n){return this.applyQuaternion(bn.setFromAxisAngle(t,n))}applyMatrix3(t){const n=this.x,e=this.y,s=this.z,i=t.elements;return this.x=i[0]*n+i[3]*e+i[6]*s,this.y=i[1]*n+i[4]*e+i[7]*s,this.z=i[2]*n+i[5]*e+i[8]*s,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const n=this.x,e=this.y,s=this.z,i=t.elements,r=1/(i[3]*n+i[7]*e+i[11]*s+i[15]);return this.x=(i[0]*n+i[4]*e+i[8]*s+i[12])*r,this.y=(i[1]*n+i[5]*e+i[9]*s+i[13])*r,this.z=(i[2]*n+i[6]*e+i[10]*s+i[14])*r,this}applyQuaternion(t){const n=this.x,e=this.y,s=this.z,i=t.x,r=t.y,h=t.z,a=t.w,c=2*(r*s-h*e),l=2*(h*n-i*s),u=2*(i*e-r*n);return this.x=n+a*c+r*u-h*l,this.y=e+a*l+h*c-i*u,this.z=s+a*u+i*l-r*c,this}transformDirection(t){const n=this.x,e=this.y,s=this.z,i=t.elements;return this.x=i[0]*n+i[4]*e+i[8]*s,this.y=i[1]*n+i[5]*e+i[9]*s,this.z=i[2]*n+i[6]*e+i[10]*s,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,n){return this.x=Math.max(t.x,Math.min(n.x,this.x)),this.y=Math.max(t.y,Math.min(n.y,this.y)),this.z=Math.max(t.z,Math.min(n.z,this.z)),this}clampScalar(t,n){return this.x=Math.max(t,Math.min(n,this.x)),this.y=Math.max(t,Math.min(n,this.y)),this.z=Math.max(t,Math.min(n,this.z)),this}clampLength(t,n){const e=this.length();return this.divideScalar(e||1).multiplyScalar(Math.max(t,Math.min(n,e)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}isParallelTo(t){const n=this.dot(t),e=this.length(),s=t.length();return Math.abs(n)===e*s}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,n){return this.x+=(t.x-this.x)*n,this.y+=(t.y-this.y)*n,this.z+=(t.z-this.z)*n,this}lerpVectors(t,n,e){return this.x=t.x+(n.x-t.x)*e,this.y=t.y+(n.y-t.y)*e,this.z=t.z+(n.z-t.z)*e,this}cross(t){return this.crossVectors(this,t)}crossVectors(t,n){const e=t.x,s=t.y,i=t.z,r=n.x,h=n.y,a=n.z;return this.x=s*a-i*h,this.y=i*r-e*a,this.z=e*h-s*r,this}projectOnVector(t){const n=t.lengthSq();if(n===0)return this.set(0,0,0);const e=t.dot(this)/n;return this.copy(t).multiplyScalar(e)}projectOnPlane(t){return Dt.copy(this).projectOnVector(t),this.sub(Dt)}reflect(t){return this.sub(Dt.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const n=Math.sqrt(this.lengthSq()*t.lengthSq());if(n===0)return Math.PI/2;const e=this.dot(t)/n;return Math.acos(Math.max(-1,Math.min(1,e)))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const n=this.x-t.x,e=this.y-t.y,s=this.z-t.z;return n*n+e*e+s*s}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromMatrixPosition(t){const n=t.elements;return this.x=n[12],this.y=n[13],this.z=n[14],this}setFromMatrixScale(t){const n=this.setFromMatrixColumn(t,0).length(),e=this.setFromMatrixColumn(t,1).length(),s=this.setFromMatrixColumn(t,2).length();return this.x=n,this.y=e,this.z=s,this}setFromMatrixColumn(t,n){return this.fromArray(t.elements,n*4)}setFromMatrix3Column(t,n){return this.fromArray(t.elements,n*3)}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,n=0){return this.x=t[n],this.y=t[n+1],this.z=t[n+2],this}toArray(t=[],n=0){return t[n]=this.x,t[n+1]=this.y,t[n+2]=this.z,t}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=Math.random()*Math.PI*2,n=Math.random()*2-1,e=Math.sqrt(1-n*n);return this.x=e*Math.cos(t),this.y=n,this.z=e*Math.sin(t),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}};q.ORIGIN=Object.freeze(new q(0,0,0)),q.X_AXIS=Object.freeze(new q(1,0,0)),q.NEGATIVE_X_AXIS=Object.freeze(new q(-1,0,0)),q.Y_AXIS=Object.freeze(new q(0,1,0)),q.NEGATIVE_Y_AXIS=Object.freeze(new q(0,-1,0)),q.Z_AXIS=Object.freeze(new q(0,0,1)),q.NEGATIVE_Z_AXIS=Object.freeze(new q(0,0,-1));let A=q;const Dt=new A,bn=new gt,dt=class dt{static makeTranslation(t,n,e){return new dt().makeTranslation(t,n,e)}constructor(t,n,e,s,i,r,h,a,c,l,u,d,m,g,y,x){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],t!=null&&n!=null&&e!=null&&s!=null&&i!=null&&r!=null&&h!=null&&a!=null&&c!=null&&l!=null&&u!=null&&d!=null&&m!=null&&g!=null&&y!=null&&x!=null&&this.set(t,n,e,s,i,r,h,a,c,l,u,d,m,g,y,x)}set(t,n,e,s,i,r,h,a,c,l,u,d,m,g,y,x){const f=this.elements;return f[0]=t,f[4]=n,f[8]=e,f[12]=s,f[1]=i,f[5]=r,f[9]=h,f[13]=a,f[2]=c,f[6]=l,f[10]=u,f[14]=d,f[3]=m,f[7]=g,f[11]=y,f[15]=x,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new dt().fromArray(this.elements)}copy(t){const n=this.elements,e=t.elements;return n[0]=e[0],n[1]=e[1],n[2]=e[2],n[3]=e[3],n[4]=e[4],n[5]=e[5],n[6]=e[6],n[7]=e[7],n[8]=e[8],n[9]=e[9],n[10]=e[10],n[11]=e[11],n[12]=e[12],n[13]=e[13],n[14]=e[14],n[15]=e[15],this}copyPosition(t){const n=this.elements,e=t.elements;return n[12]=e[12],n[13]=e[13],n[14]=e[14],this}setFromMatrix3(t){const n=t.elements;return this.set(n[0],n[3],n[6],0,n[1],n[4],n[7],0,n[2],n[5],n[8],0,0,0,0,1),this}setFromExtrusionDirection(t){const n=Math.hypot(t.x,t.y,t.z);if(!Number.isFinite(n)||n<1e-12)return this.identity(),this;const e=Math.abs(n-1)>1e-6?t.clone().multiplyScalar(1/n):t;if(wt.equalPoint3d(e,A.Z_AXIS))this.identity();else{const s=new A(1,0,0);Math.abs(e.x)<1/64&&Math.abs(e.y)<1/64?s.crossVectors(A.Y_AXIS,e).normalize():s.crossVectors(A.Z_AXIS,e).normalize();const i=e.clone().cross(s).normalize();this.set(s.x,s.y,s.z,0,i.x,i.y,i.z,0,e.x,e.y,e.z,0,0,0,0,1)}return this}extractBasis(t,n,e){return t.setFromMatrixColumn(this,0),n.setFromMatrixColumn(this,1),e.setFromMatrixColumn(this,2),this}makeBasis(t,n,e){return this.set(t.x,n.x,e.x,0,t.y,n.y,e.y,0,t.z,n.z,e.z,0,0,0,0,1),this}extractRotation(t){const n=this.elements,e=t.elements,s=1/ht.setFromMatrixColumn(t,0).length(),i=1/ht.setFromMatrixColumn(t,1).length(),r=1/ht.setFromMatrixColumn(t,2).length();return n[0]=e[0]*s,n[1]=e[1]*s,n[2]=e[2]*s,n[3]=0,n[4]=e[4]*i,n[5]=e[5]*i,n[6]=e[6]*i,n[7]=0,n[8]=e[8]*r,n[9]=e[9]*r,n[10]=e[10]*r,n[11]=0,n[12]=0,n[13]=0,n[14]=0,n[15]=1,this}makeRotationFromQuaternion(t){return this.compose(ie,t,re)}lookAt(t,n,e){const s=this.elements;return O.subVectors(t,n),O.lengthSq()===0&&(O.z=1),O.normalize(),nt.crossVectors(e,O),nt.lengthSq()===0&&(Math.abs(e.z)===1?O.x+=1e-4:O.z+=1e-4,O.normalize(),nt.crossVectors(e,O)),nt.normalize(),Mt.crossVectors(O,nt),s[0]=nt.x,s[4]=Mt.x,s[8]=O.x,s[1]=nt.y,s[5]=Mt.y,s[9]=O.y,s[2]=nt.z,s[6]=Mt.z,s[10]=O.z,this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,n){const e=t.elements,s=n.elements,i=this.elements,r=e[0],h=e[4],a=e[8],c=e[12],l=e[1],u=e[5],d=e[9],m=e[13],g=e[2],y=e[6],x=e[10],f=e[14],b=e[3],p=e[7],C=e[11],S=e[15],T=s[0],z=s[4],k=s[8],E=s[12],N=s[1],v=s[5],G=s[9],tt=s[13],F=s[2],It=s[6],Tt=s[10],Bt=s[14],Rt=s[3],kt=s[7],Nt=s[11],jt=s[15];return i[0]=r*T+h*N+a*F+c*Rt,i[4]=r*z+h*v+a*It+c*kt,i[8]=r*k+h*G+a*Tt+c*Nt,i[12]=r*E+h*tt+a*Bt+c*jt,i[1]=l*T+u*N+d*F+m*Rt,i[5]=l*z+u*v+d*It+m*kt,i[9]=l*k+u*G+d*Tt+m*Nt,i[13]=l*E+u*tt+d*Bt+m*jt,i[2]=g*T+y*N+x*F+f*Rt,i[6]=g*z+y*v+x*It+f*kt,i[10]=g*k+y*G+x*Tt+f*Nt,i[14]=g*E+y*tt+x*Bt+f*jt,i[3]=b*T+p*N+C*F+S*Rt,i[7]=b*z+p*v+C*It+S*kt,i[11]=b*k+p*G+C*Tt+S*Nt,i[15]=b*E+p*tt+C*Bt+S*jt,this}multiplyScalar(t){const n=this.elements;return n[0]*=t,n[4]*=t,n[8]*=t,n[12]*=t,n[1]*=t,n[5]*=t,n[9]*=t,n[13]*=t,n[2]*=t,n[6]*=t,n[10]*=t,n[14]*=t,n[3]*=t,n[7]*=t,n[11]*=t,n[15]*=t,this}determinant(){const t=this.elements,n=t[0],e=t[4],s=t[8],i=t[12],r=t[1],h=t[5],a=t[9],c=t[13],l=t[2],u=t[6],d=t[10],m=t[14],g=t[3],y=t[7],x=t[11],f=t[15];return g*(+i*a*u-s*c*u-i*h*d+e*c*d+s*h*m-e*a*m)+y*(+n*a*m-n*c*d+i*r*d-s*r*m+s*c*l-i*a*l)+x*(+n*c*u-n*h*m-i*r*u+e*r*m+i*h*l-e*c*l)+f*(-s*h*l-n*a*u+n*h*d+s*r*u-e*r*d+e*a*l)}transpose(){const t=this.elements;let n;return n=t[1],t[1]=t[4],t[4]=n,n=t[2],t[2]=t[8],t[8]=n,n=t[6],t[6]=t[9],t[9]=n,n=t[3],t[3]=t[12],t[12]=n,n=t[7],t[7]=t[13],t[13]=n,n=t[11],t[11]=t[14],t[14]=n,this}setPosition(t,n,e){const s=this.elements;return t instanceof A?(s[12]=t.x,s[13]=t.y,s[14]=t.z):(s[12]=t,s[13]=n,s[14]=e),this}invert(){const t=this.elements,n=t[0],e=t[1],s=t[2],i=t[3],r=t[4],h=t[5],a=t[6],c=t[7],l=t[8],u=t[9],d=t[10],m=t[11],g=t[12],y=t[13],x=t[14],f=t[15],b=u*x*c-y*d*c+y*a*m-h*x*m-u*a*f+h*d*f,p=g*d*c-l*x*c-g*a*m+r*x*m+l*a*f-r*d*f,C=l*y*c-g*u*c+g*h*m-r*y*m-l*h*f+r*u*f,S=g*u*a-l*y*a-g*h*d+r*y*d+l*h*x-r*u*x,T=n*b+e*p+s*C+i*S;if(T===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const z=1/T;return t[0]=b*z,t[1]=(y*d*i-u*x*i-y*s*m+e*x*m+u*s*f-e*d*f)*z,t[2]=(h*x*i-y*a*i+y*s*c-e*x*c-h*s*f+e*a*f)*z,t[3]=(u*a*i-h*d*i-u*s*c+e*d*c+h*s*m-e*a*m)*z,t[4]=p*z,t[5]=(l*x*i-g*d*i+g*s*m-n*x*m-l*s*f+n*d*f)*z,t[6]=(g*a*i-r*x*i-g*s*c+n*x*c+r*s*f-n*a*f)*z,t[7]=(r*d*i-l*a*i+l*s*c-n*d*c-r*s*m+n*a*m)*z,t[8]=C*z,t[9]=(g*u*i-l*y*i-g*e*m+n*y*m+l*e*f-n*u*f)*z,t[10]=(r*y*i-g*h*i+g*e*c-n*y*c-r*e*f+n*h*f)*z,t[11]=(l*h*i-r*u*i-l*e*c+n*u*c+r*e*m-n*h*m)*z,t[12]=S*z,t[13]=(l*y*s-g*u*s+g*e*d-n*y*d-l*e*x+n*u*x)*z,t[14]=(g*h*s-r*y*s-g*e*a+n*y*a+r*e*x-n*h*x)*z,t[15]=(r*u*s-l*h*s+l*e*a-n*u*a-r*e*d+n*h*d)*z,this}scale(t){const n=this.elements,e=t.x,s=t.y,i=t.z;return n[0]*=e,n[4]*=s,n[8]*=i,n[1]*=e,n[5]*=s,n[9]*=i,n[2]*=e,n[6]*=s,n[10]*=i,n[3]*=e,n[7]*=s,n[11]*=i,this}getMaxScaleOnAxis(){const t=this.elements,n=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],e=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],s=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(n,e,s))}makeTranslation(t,n,e){return typeof t=="object"?this.set(1,0,0,t.x,0,1,0,t.y,0,0,1,t.z??0,0,0,0,1):this.set(1,0,0,t,0,1,0,n,0,0,1,e,0,0,0,1),this}makeRotationX(t){const n=Math.cos(t),e=Math.sin(t);return this.set(1,0,0,0,0,n,-e,0,0,e,n,0,0,0,0,1),this}makeRotationY(t){const n=Math.cos(t),e=Math.sin(t);return this.set(n,0,e,0,0,1,0,0,-e,0,n,0,0,0,0,1),this}makeRotationZ(t){const n=Math.cos(t),e=Math.sin(t);return this.set(n,-e,0,0,e,n,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,n){const e=Math.cos(n),s=Math.sin(n),i=1-e,r=t.x,h=t.y,a=t.z,c=i*r,l=i*h;return this.set(c*r+e,c*h-s*a,c*a+s*h,0,c*h+s*a,l*h+e,l*a-s*r,0,c*a-s*h,l*a+s*r,i*a*a+e,0,0,0,0,1),this}makeScale(t,n,e){return this.set(t,0,0,0,0,n,0,0,0,0,e,0,0,0,0,1),this}makeShear(t,n,e,s,i,r){return this.set(1,e,i,0,t,1,r,0,n,s,1,0,0,0,0,1),this}compose(t,n,e){const s=this.elements,i=n.x,r=n.y,h=n.z,a=n.w,c=i+i,l=r+r,u=h+h,d=i*c,m=i*l,g=i*u,y=r*l,x=r*u,f=h*u,b=a*c,p=a*l,C=a*u,S=e.x,T=e.y,z=e.z;return s[0]=(1-(y+f))*S,s[1]=(m+C)*S,s[2]=(g-p)*S,s[3]=0,s[4]=(m-C)*T,s[5]=(1-(d+f))*T,s[6]=(x+b)*T,s[7]=0,s[8]=(g+p)*z,s[9]=(x-b)*z,s[10]=(1-(d+y))*z,s[11]=0,s[12]=t.x,s[13]=t.y,s[14]=t.z,s[15]=1,this}decompose(t,n,e){const s=this.elements;let i=ht.set(s[0],s[1],s[2]).length();const r=ht.set(s[4],s[5],s[6]).length(),h=ht.set(s[8],s[9],s[10]).length();this.determinant()<0&&(i=-i),t.x=s[12],t.y=s[13],t.z=s[14],Z.copy(this);const c=1/i,l=1/r,u=1/h;return Z.elements[0]*=c,Z.elements[1]*=c,Z.elements[2]*=c,Z.elements[4]*=l,Z.elements[5]*=l,Z.elements[6]*=l,Z.elements[8]*=u,Z.elements[9]*=u,Z.elements[10]*=u,n.setFromRotationMatrix(Z),e.x=i,e.y=r,e.z=h,this}equals(t){const n=this.elements,e=t.elements;for(let s=0;s<16;s++)if(n[s]!==e[s])return!1;return!0}fromArray(t,n=0){for(let e=0;e<16;e++)this.elements[e]=t[e+n];return this}toArray(t=[],n=0){const e=this.elements;return t[n]=e[0],t[n+1]=e[1],t[n+2]=e[2],t[n+3]=e[3],t[n+4]=e[4],t[n+5]=e[5],t[n+6]=e[6],t[n+7]=e[7],t[n+8]=e[8],t[n+9]=e[9],t[n+10]=e[10],t[n+11]=e[11],t[n+12]=e[12],t[n+13]=e[13],t[n+14]=e[14],t[n+15]=e[15],t}};dt.IDENTITY=Object.freeze(new dt);let J=dt;const ht=new A,Z=new J,ie=new A(0,0,0),re=new A(1,1,1),nt=new A,Mt=new A,O=new A;class W{constructor(t=void 0,n=void 0){this.min=t==null?new A(1/0,1/0,1/0):new A(t.x,t.y,t.z),this.max=n==null?new A(-1/0,-1/0,-1/0):new A(n.x,n.y,n.z)}set(t,n){return this.min.copy(t),this.max.copy(n),this}setFromArray(t){this.makeEmpty();for(let n=0,e=t.length;n<e;n+=3)this.expandByPoint(Xt.fromArray(t,n));return this}setFromPoints(t){this.makeEmpty();for(let n=0,e=t.length;n<e;n++)this.expandByPoint(t[n]);return this}setFromCenterAndSize(t,n){const e=Xt.copy(n).multiplyScalar(.5);return this.min.copy(t).sub(e),this.max.copy(t).add(e),this}clone(){return new W().copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(t){return this.isEmpty()?t.set(0,0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0,0):t.subVectors(this.max,this.min)}get center(){return this.isEmpty()?new A(0,0,0):new A(0,0,0).addVectors(this.min,this.max).multiplyScalar(.5)}get size(){return this.isEmpty()?new A(0,0,0):new A(0,0,0).subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}containsPoint(t){return!(t.x<this.min.x||t.x>this.max.x||t.y<this.min.y||t.y>this.max.y||t.z<this.min.z||t.z>this.max.z)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,n){return n.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return!(t.max.x<this.min.x||t.min.x>this.max.x||t.max.y<this.min.y||t.min.y>this.max.y||t.max.z<this.min.z||t.min.z>this.max.z)}intersectsPlane(t){let n,e;return t.normal.x>0?(n=t.normal.x*this.min.x,e=t.normal.x*this.max.x):(n=t.normal.x*this.max.x,e=t.normal.x*this.min.x),t.normal.y>0?(n+=t.normal.y*this.min.y,e+=t.normal.y*this.max.y):(n+=t.normal.y*this.max.y,e+=t.normal.y*this.min.y),t.normal.z>0?(n+=t.normal.z*this.min.z,e+=t.normal.z*this.max.z):(n+=t.normal.z*this.max.z,e+=t.normal.z*this.min.z),n<=-t.constant&&e>=-t.constant}clampPoint(t,n){return n.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,Xt).distanceTo(t)}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()?this:(H[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),H[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),H[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),H[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),H[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),H[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),H[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),H[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(H),this)}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}const H=[new A,new A,new A,new A,new A,new A,new A,new A],Xt=new A,Sn=new R;class X{constructor(t=void 0,n=void 0){this.min=t==null?new R(1/0,1/0):new R(t.x,t.y),this.max=n==null?new R(-1/0,-1/0):new R(n.x,n.y)}set(t,n){return this.min.copy(t),this.max.copy(n),this}setFromPoints(t){this.makeEmpty();for(let n=0,e=t.length;n<e;n++)this.expandByPoint(t[n]);return this}setFromCenterAndSize(t,n){const e=Sn.copy(n).multiplyScalar(.5);return this.min.copy(t).sub(e),this.max.copy(t).add(e),this}clone(){return new X().copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=1/0,this.max.x=this.max.y=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y}getCenter(t){return this.isEmpty()?t.set(0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0):t.subVectors(this.max,this.min)}get center(){return this.isEmpty()?new R(0,0):new R(0,0).addVectors(this.min,this.max).multiplyScalar(.5)}get size(){return this.isEmpty()?new R(0,0):new R(0,0).subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}containsPoint(t){return!(t.x<this.min.x||t.x>this.max.x||t.y<this.min.y||t.y>this.max.y)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y}getParameter(t,n){return n.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(t){return!(t.max.x<this.min.x||t.min.x>this.max.x||t.max.y<this.min.y||t.min.y>this.max.y)}clampPoint(t,n){return n.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,Sn).distanceTo(t)}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}const Cn=new A,oe=new A,he=new ot;class yt{constructor(t=new A(1,0,0),n=0){this.normal=t,this.constant=n}set(t,n){return this.normal.copy(t),this.constant=n,this}setComponents(t,n,e,s){return this.normal.set(t,n,e),this.constant=s,this}setFromNormalAndCoplanarPoint(t,n){return this.normal.copy(t),this.constant=-n.dot(this.normal),this}setFromCoplanarPoints(t,n,e){const s=Cn.subVectors(e,n).cross(oe.subVectors(t,n)).normalize();return this.setFromNormalAndCoplanarPoint(s,t),this}copy(t){return this.normal.copy(t.normal),this.constant=t.constant,this}normalize(){const t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(t){return this.normal.dot(t)+this.constant}projectPoint(t,n){return n.copy(t).addScaledVector(this.normal,-this.distanceToPoint(t))}intersectsBox(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,n){const e=n||he.getNormalMatrix(t),s=this.coplanarPoint(Cn).applyMatrix4(t),i=this.normal.applyMatrix3(e).normalize();return this.constant=-s.dot(i),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return new yt().copy(this)}}class P extends R{clone(){return new P(this.x,this.y)}static pointArrayToNumberArray(t){const n=new Array(t.length*2);return t.forEach((e,s)=>{e.toArray(n,s*2)}),n}}class M extends A{clone(){return new M(this.x,this.y,this.z)}static pointArrayToNumberArray(t,n=!0){const e=n?3:2,s=new Array(t.length*e);return t.forEach((i,r)=>{i.toArray(s,r*e)}),s}}const En=new J,In=new gt,pt=class pt{constructor(t=0,n=0,e=0,s=pt.DEFAULT_ORDER){this._x=t,this._y=n,this._z=e,this._order=s}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,n,e,s=this._order){return this._x=t,this._y=n,this._z=e,this._order=s,this._onChangeCallback(),this}clone(){return new pt(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,n=this._order,e=!0){const s=t.elements,i=s[0],r=s[4],h=s[8],a=s[1],c=s[5],l=s[9],u=s[2],d=s[6],m=s[10];switch(n){case"XYZ":this._y=Math.asin(Q(h,-1,1)),Math.abs(h)<.9999999?(this._x=Math.atan2(-l,m),this._z=Math.atan2(-r,i)):(this._x=Math.atan2(d,c),this._z=0);break;case"YXZ":this._x=Math.asin(-Q(l,-1,1)),Math.abs(l)<.9999999?(this._y=Math.atan2(h,m),this._z=Math.atan2(a,c)):(this._y=Math.atan2(-u,i),this._z=0);break;case"ZXY":this._x=Math.asin(Q(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-u,m),this._z=Math.atan2(-r,c)):(this._y=0,this._z=Math.atan2(a,i));break;case"ZYX":this._y=Math.asin(-Q(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(d,m),this._z=Math.atan2(a,i)):(this._x=0,this._z=Math.atan2(-r,c));break;case"YZX":this._z=Math.asin(Q(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-l,c),this._y=Math.atan2(-u,i)):(this._x=0,this._y=Math.atan2(h,m));break;case"XZY":this._z=Math.asin(-Q(r,-1,1)),Math.abs(r)<.9999999?(this._x=Math.atan2(d,c),this._y=Math.atan2(h,i)):(this._x=Math.atan2(-l,m),this._y=0);break}return this._order=n,e===!0&&this._onChangeCallback(),this}setFromQuaternion(t,n,e=!0){return En.makeRotationFromQuaternion(t),this.setFromRotationMatrix(En,n,e)}setFromVector3(t,n=this._order){return this.set(t.x,t.y,t.z,n)}reorder(t){return In.setFromEuler(this),this.setFromQuaternion(In,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],t[3]!==void 0&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],n=0){return t[n]=this._x,t[n+1]=this._y,t[n+2]=this._z,t[n+3]=this._order,t}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}};pt.DEFAULT_ORDER="XYZ";let Yt=pt;function ae(o){const t=o;return{x:o.x,y:o.y,z:t.z??0}}function ce(o,t){o.x+=t.x,o.y+=t.y,o.z=(o.z??0)+(t.z??0)}function le(o,t,n=!1){const e=o.x,s=o.y;let i=!1;const r=t.length;for(let h=0,a=r-1;h<r;a=h++){const c=t[h].x,l=t[h].y,u=t[a].x,d=t[a].y;let m=l>s!=d>s;n&&(m=l>=s!=d>=s),m&&e<(u-c)*(s-l)/(d-l)+c&&(i=!i)}return i}function ue(o,t){if(o.length===0||t.length===0)return!1;const n=new X().setFromPoints(o),e=new X().setFromPoints(t);if(!n.intersectsBox(e))return!1;for(let s=0;s<o.length;){if(U.isPointInPolygon(o[s],t,!0))return!0;s<o.length-1&&wt.equalPoint2d(o[s+1],o[s])&&++s,++s}return!1}const U={applyOffsetToPoint3d:ce,isPointInPolygon:le,isPolygonIntersect:ue,point2dToPoint3d:ae};function de(o,t){const n=[],e=t-1,s=o;for(let i=0;i<=s;i++)n.push(0);for(let i=1;i<=e-s;i++)n.push(i);for(let i=0;i<=s;i++)n.push(e-s+1);return n}function me(o,t){const n=t.length-1,e=o,s=[0];let i=0;for(let h=1;h<=n;h++){const a=t[h][0]-t[h-1][0],c=t[h][1]-t[h-1][1],l=t[h][2]-t[h-1][2],u=Math.sqrt(a*a+c*c+l*l);i+=u,s.push(i)}const r=[];for(let h=0;h<=e;h++)r.push(0);for(let h=1;h<=n-e;h++){const a=s[h]/i;r.push(a*(n-e+1))}for(let h=0;h<=e;h++)r.push(n-e+1);return r}function Tn(o,t="Uniform"){const n=o.length;if(n===0)return[];if(n===1)return[0];const e=n-1;if(t==="Uniform")return new Array(n).fill(0).map((r,h)=>h/e);const s=[0];let i=0;for(let r=1;r<=e;r++){const h=o[r][0]-o[r-1][0],a=o[r][1]-o[r-1][1],c=o[r][2]-o[r-1][2],l=Math.sqrt(h*h+a*a+c*c),u=t==="SqrtChord"?Math.sqrt(l):l;i+=u,s.push(i)}return i<1e-12?new Array(n).fill(0).map((r,h)=>h/e):s.map(r=>r/i)}function Bn(o,t){const n=t.length-1,e=o,s=n+e+1,i=new Array(s+1).fill(0),r=t[t.length-1];for(let h=s-e;h<=s;h++)i[h]=r;for(let h=1;h<=n-e;h++){let a=0;for(let c=h;c<h+e;c++)a+=t[c];i[h+e]=a/e}return i}function ge(o,t){const n=t.length-1,e=o,s=[0];let i=0;for(let h=1;h<=n;h++){const a=t[h][0]-t[h-1][0],c=t[h][1]-t[h-1][1],l=t[h][2]-t[h-1][2],u=Math.sqrt(a*a+c*c+l*l),d=Math.sqrt(u);i+=d,s.push(i)}const r=[];for(let h=0;h<=e;h++)r.push(0);for(let h=1;h<=n-e;h++){const a=s[h]/i;r.push(a*(n-e+1))}for(let h=0;h<=e;h++)r.push(n-e+1);return r}function Zt(o,t){const n=o.length,e=o.map(r=>r.slice()),s=t.slice();for(let r=0;r<n;r++){let h=r,a=Math.abs(e[r][r]);for(let c=r+1;c<n;c++){const l=Math.abs(e[c][r]);l>a&&(a=l,h=c)}if(a<1e-12)throw new Error("Interpolation matrix is singular.");if(h!==r){const c=e[r];e[r]=e[h],e[h]=c;const l=s[r];s[r]=s[h],s[h]=l}for(let c=r+1;c<n;c++){const l=e[c][r]/e[r][r];if(!(Math.abs(l)<1e-14)){for(let u=r;u<n;u++)e[c][u]-=l*e[r][u];s[c]-=l*s[r]}}}const i=new Array(n).fill(0);for(let r=n-1;r>=0;r--){let h=s[r];for(let a=r+1;a<n;a++)h-=e[r][a]*i[a];i[r]=h/e[r][r]}return i}function Gt(o,t,n="Uniform",e,s){if(o.length===0)return{controlPoints:[],knots:[],weights:[]};const i=o.map(E=>[E[0],E[1],E[2]??0]),r=!!e,h=!!s,a=(r?1:0)+(h?1:0),c=i.length-1,l=c+a;if(l<t)throw new Error("Not enough points to interpolate a curve of this degree.");const u=Tn(i,n),d=u.slice();r&&d.unshift(u[0]),h&&d.push(u[u.length-1]);const m=Bn(t,d),g=l+1,y=new Array(g),x=new Array(g),f=new Array(g),b=new Array(g);let p=0;y[p]=new Array(g).fill(0),y[p][0]=1,x[p]=i[0][0],f[p]=i[0][1],b[p]=i[0][2],p++;for(let E=1;E<=c-1;E++){const N=u[E];y[p]=new Array(g).fill(0);for(let v=0;v<=l;v++)y[p][v]=et(v,t,N,m);x[p]=i[E][0],f[p]=i[E][1],b[p]=i[E][2],p++}if(y[p]=new Array(g).fill(0),y[p][l]=1,x[p]=i[c][0],f[p]=i[c][1],b[p]=i[c][2],p++,r){const E=m[t+1]-m[0],N=E!==0?t/E:0;y[p]=new Array(g).fill(0),y[p][0]=-N,y[p][1]=N,x[p]=(e==null?void 0:e[0])??0,f[p]=(e==null?void 0:e[1])??0,b[p]=(e==null?void 0:e[2])??0,p++}if(h){const E=m[l+t+1]-m[l],N=E!==0?t/E:0;y[p]=new Array(g).fill(0),y[p][l-1]=-N,y[p][l]=N,x[p]=(s==null?void 0:s[0])??0,f[p]=(s==null?void 0:s[1])??0,b[p]=(s==null?void 0:s[2])??0,p++}const C=Zt(y,x),S=Zt(y,f),T=Zt(y,b),z=new Array(g);for(let E=0;E<g;E++)z[E]=[C[E],S[E],T[E]];const k=new Array(g).fill(1);return{controlPoints:z,knots:m,weights:k}}function et(o,t,n,e){if(t===0)return n>=e[o]&&n<e[o+1]?1:0;const s=e[o+t]-e[o],i=e[o+t+1]-e[o+1],r=s>1e-10?(n-e[o])/s:0,h=i>1e-10?(e[o+t+1]-n)/i:0;return r*et(o,t-1,n,e)+h*et(o+1,t-1,n,e)}function xt(o,t,n,e,s){const i=e.length-1,r=t;if(o=Math.max(n[r],Math.min(n[i+1],o)),Math.abs(o-n[i+1])<1e-8)return[...e[i]];if(Math.abs(o-n[r])<1e-8)return[...e[0]];const h=[0,0,0];let a=0;for(let c=0;c<=i;c++){const l=et(c,r,o,n),u=s[c]*l;h[0]+=e[c][0]*u,h[1]+=e[c][1]*u,h[2]+=e[c][2]*u,a+=u}if(Math.abs(a)<1e-10){const c=n[n.length-r-1];if(Math.abs(o-c)<1e-8)return[...e[i]];if(Math.abs(o-n[r])<1e-8)return[...e[0]]}return Math.abs(a)>=1e-10&&(h[0]/=a,h[1]/=a,h[2]/=a),h}function Wt(o,t,n,e){if(t===0)return 0;const s=e[o+t]-e[o],i=e[o+t+1]-e[o+1];let r=0;return s>1e-10&&(r+=t/s*et(o,t-1,n,e)),i>1e-10&&(r-=t/i*et(o+1,t-1,n,e)),r}function ye(o,t,n,e){if(t<=1)return 0;const s=e[o+t]-e[o],i=e[o+t+1]-e[o+1];let r=0;return s>1e-10&&(r+=t/s*Wt(o,t-1,n,e)),i>1e-10&&(r-=t/i*Wt(o+1,t-1,n,e)),r}function Rn(o,t,n,e,s){const i=e.length-1,r=t,h=n[r],a=n[i+1];o=Math.max(h,Math.min(a,o));const c=[0,0,0],l=[0,0,0],u=[0,0,0];let d=0,m=0,g=0;for(let T=0;T<=i;T++){const z=et(T,r,o,n),k=Wt(T,r,o,n),E=ye(T,r,o,n),N=s[T],v=N*z,G=N*k,tt=N*E,F=e[T];c[0]+=v*F[0],c[1]+=v*F[1],c[2]+=v*F[2],l[0]+=G*F[0],l[1]+=G*F[1],l[2]+=G*F[2],u[0]+=tt*F[0],u[1]+=tt*F[1],u[2]+=tt*F[2],d+=v,m+=G,g+=tt}if(Math.abs(d)<1e-10)return{point:xt(o,t,n,e,s),deriv1:[0,0,0],deriv2:[0,0,0]};const y=d*d,x=[c[0]/d,c[1]/d,c[2]/d],f=[(l[0]*d-c[0]*m)/y,(l[1]*d-c[1]*m)/y,(l[2]*d-c[2]*m)/y],b=u[0]*d-c[0]*g,p=u[1]*d-c[1]*g,C=u[2]*d-c[2]*g,S=[b/y-2*m*f[0]/d,p/y-2*m*f[1]/d,C/y-2*m*f[2]/d];return{point:x,deriv1:f,deriv2:S}}function kn(o,t){const n=o[0],e=o[1],s=t[0],i=t[1],r=n*n+e*e;return r<1e-20?0:(n*i-e*s)/Math.pow(r,1.5)}function Nn(o,t,n,e){const s=o,i=t[s],r=t[t.length-s-1];let h=0;const a=1e3,c=(r-i)/a;let l=xt(i,o,t,n,e);for(let y=1;y<=a;y++){const x=i+y*c,f=xt(x,o,t,n,e),b=f[0]-l[0],p=f[1]-l[1],C=f[2]-l[2];h+=Math.sqrt(b*b+p*p+C*C),l=f}const u=xt(r,o,t,n,e),d=u[0]-l[0],m=u[1]-l[1],g=u[2]-l[2];return h+=Math.sqrt(d*d+m*m+g*g),h}function xe(o,t=3,n="Uniform",e,s){return o.length===0?[]:Gt(o,t,n,e,s).controlPoints}const jn=new J,qn=new A,fe=new A,_e=new A,Kt=new M;function vn(o){return new J().setFromExtrusionDirection(new A(o.x,o.y,o.z))}function Ae(o){return jn.setFromExtrusionDirection(new A(o.x,o.y,o.z)),jn.extractBasis(qn,fe,_e),qn.clone()}function Pe(o,t){return new M(o.x,o.y,o.z??0).applyMatrix4(vn(t))}function Qt(o,t){return new M(o.x,o.y,o.z??0).applyMatrix4(vn(t).invert())}function pe(o,t,n){const e=Qt(o,n),s=Qt(t,n);return Kt.set(s.x-e.x,s.y-e.y,(s.z??0)-(e.z??0)),w.normalizeAngle(Math.atan2(Kt.y,Kt.x))}function $t(o){const t=o.length;if(t<3)return 0;let n=0;for(let e=0,s=t-1;e<t;s=e++){const i=o[s],r=o[e];n+=i.x*r.y-r.x*i.y}return n*.5}function Vn(o){return Math.abs($t(o))}function Ln(o){const t=o.length;if(t<3)return 0;let n=0,e=0,s=0;for(let i=0,r=t-1;i<t;r=i++){const h=o[r],a=o[i],c=h.x,l=h.y,u=h.z??0,d=a.x,m=a.y,g=a.z??0;n+=(u+g)*(l-m),e+=(c+d)*(u-g),s+=(l+m)*(c-d)}return .5*Math.hypot(n,e,s)}function Un(o){return o.length<3?0:Vn(o)}function Fn(o){return o.length<3?0:Ln(o)}class On{constructor(){this._boundingBoxNeedsUpdate=!1}get boundingBoxNeedUpdate(){return this._boundingBoxNeedsUpdate}}class Jt extends On{translate(t){return this.transform(new ot().makeTranslation(t.x,t.y))}get box(){return(this._box==null||this._boundingBoxNeedsUpdate)&&(this._box=this.calculateBoundingBox(),this._boundingBoxNeedsUpdate=!1),this._box}}class at extends Jt{constructor(){super(),this.arcLengthDivisions=100}get startPoint(){return this.getPoint(0)}get endPoint(){return this.getPoint(1)}get length(){return this.getLength()}getPoint(t){throw new Error("AcGeCurve2d: .getPoint() not implemented.")}getPointAt(t){const n=this.getUtoTmapping(t);return this.getPoint(n)}getPoints(t=5){const n=[];for(let e=0;e<=t;e++)n.push(this.getPoint(e/t));return n}getSpacedPoints(t=5){const n=[];for(let e=0;e<=t;e++)n.push(this.getPointAt(e/t));return n}getLength(){const t=this.getLengths();return t[t.length-1]}getLengths(t=this.arcLengthDivisions){const n=[];let e,s=this.getPoint(0),i=0;n.push(0);for(let r=1;r<=t;r++)e=this.getPoint(r/t),i+=e.distanceTo(s),n.push(i),s=e;return n}getUtoTmapping(t,n){const e=this.getLengths();let s=0;const i=e.length;let r;n?r=n:r=t*e[i-1];let h=0,a=i-1,c;for(;h<=a;)if(s=Math.floor(h+(a-h)/2),c=e[s]-r,c<0)h=s+1;else if(c>0)a=s-1;else{a=s;break}if(s=a,e[s]===r)return s/(i-1);const l=e[s],d=e[s+1]-l,m=(r-l)/d;return(s+m)/(i-1)}getTangent(t){let e=t-1e-4,s=t+1e-4;e<0&&(e=0),s>1&&(s=1);const i=this.getPoint(e),r=this.getPoint(s),h=new P;return h.copy(r).sub(i).normalize(),h}getTangentAt(t){const n=this.getUtoTmapping(t);return this.getTangent(n)}}class K extends at{constructor(t,n,e,s,i){super();const r=+(t!==void 0)+ +(n!==void 0)+ +(e!==void 0)+ +(s!==void 0)+ +(i!==void 0);if(r==3)typeof t=="object"&&typeof n=="object"&&typeof e=="object"?this.createByThreePoints(t,n,e):this.createByStartEndPointsAndBulge(t,n,e);else if(r==5){const h=t;this.center=new P(h.x,h.y),this.radius=n,this._clockwise=i,this._startAngle=this._clockwise?this._mirrorAngle(w.normalizeAngle(e)):w.normalizeAngle(e),this._endAngle=this._clockwise?this._mirrorAngle(w.normalizeAngle(s)):w.normalizeAngle(s)}else throw V.AcCmErrors.ILLEGAL_PARAMETERS}createByThreePoints(t,n,e){const s=(z,k)=>({x:(z.x+k.x)/2,y:(z.y+k.y)/2}),i=(z,k)=>(k.y-z.y)/(k.x-z.x),r=z=>-1/z,h=s(t,n),a=s(n,e),c=i(t,n),l=i(n,e),u=r(c),d=r(l),m=(z,k,E,N)=>{const v=(N-k)/(z-E),G=z*v+k;return{x:v,y:G}},g=h.y-u*h.x,y=a.y-d*a.x,x=m(u,g,d,y),f=Math.sqrt(Math.pow(t.x-x.x,2)+Math.pow(t.y-x.y,2)),b=(z,k)=>Math.atan2(z.y-k.y,z.x-k.x),p=b(t,x),C=b(n,x),S=b(e,x),T=S>p&&S<C||p>S&&p<C||C>S&&C<p;this.center=x,this.radius=f,this._clockwise=!T,this._startAngle=p,this._endAngle=S}createByStartEndPointsAndBulge(t,n,e){let s,i,r;e<0?(s=Math.atan(-e)*4,i=new R(t),r=new R(n)):(s=Math.atan(e)*4,i=new R(n),r=new R(t));const h=new R().subVectors(r,i),a=h.length(),c=new R().addVectors(i,h.multiplyScalar(.5)),l=Math.abs(a/2/Math.tan(s/2)),u=h.normalize(),d=e<0?-Math.PI/2:Math.PI/2,m=new R(u.x*Math.cos(d)-u.y*Math.sin(d),u.y*Math.cos(d)+u.x*Math.sin(d));let g;s<Math.PI?e<0?g=c.add(m.multiplyScalar(l)):g=c.add(m.multiplyScalar(-l)):e<0?g=c.add(m.multiplyScalar(-l)):g=c.add(m.multiplyScalar(l)),e<0?(this._startAngle=Math.atan2(i.y-g.y,i.x-g.x),this._endAngle=Math.atan2(r.y-g.y,r.x-g.x)):(this._startAngle=Math.atan2(r.y-g.y,r.x-g.x),this._endAngle=Math.atan2(i.y-g.y,i.x-g.x)),this._clockwise=e<0,this.center=g,this.radius=r.sub(g).length()}get center(){return this._center}set center(t){this._center=new P(t.x,t.y),this._boundingBoxNeedsUpdate=!0}get radius(){return this._radius}set radius(t){this._radius=t,this._boundingBoxNeedsUpdate=!0}get startAngle(){return this._clockwise?this._mirrorAngle(this._startAngle):this._startAngle}set startAngle(t){this._startAngle=this._clockwise?this._mirrorAngle(w.normalizeAngle(t)):w.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._clockwise?this._mirrorAngle(this._endAngle):this._endAngle}set endAngle(t){const n=this.startAngle==0&&t==I?t:w.normalizeAngle(t);this._endAngle=this._clockwise?this._mirrorAngle(n):n,this._boundingBoxNeedsUpdate=!0}_mirrorAngle(t){return(360-t*180/Math.PI)%360*Math.PI/180}_getInternalAngle(t){return this._clockwise?this._mirrorAngle(t):t}get deltaAngle(){const t=this._getInternalAngle(this.startAngle),n=this._getInternalAngle(this.endAngle);return this.clockwise?w.normalizeAngle(t-n):w.normalizeAngle(n-t)}get clockwise(){return this._clockwise}set clockwise(t){this._clockwise=t,this._boundingBoxNeedsUpdate=!0}get startPoint(){return this.getPointAtAngle(this.startAngle)}get endPoint(){return this.getPointAtAngle(this.endAngle)}get midPoint(){const t=this._getInternalAngle(this.startAngle),n=this._clockwise?w.normalizeAngle(t-this.deltaAngle/2):w.normalizeAngle(t+this.deltaAngle/2),e=this._clockwise?this._mirrorAngle(n):n;return this.getPointAtAngle(e)}get closed(){const t=this._getInternalAngle(this.startAngle),n=this._getInternalAngle(this.endAngle);return Math.abs(n-t)/Math.PI%2==0}calculateBoundingBox(){const t=[this.startPoint,this.endPoint],n=[0,Math.PI/2,Math.PI,3*Math.PI/2];for(const i of n){const r=this._getInternalAngle(i);w.isBetweenAngle(r,this._getInternalAngle(this.startAngle),this._getInternalAngle(this.endAngle),this.clockwise)&&t.push(this.getPointAtAngle(i))}const e=t.map(i=>i.x),s=t.map(i=>i.y);return new X(new P(Math.min(...e),Math.min(...s)),new P(Math.max(...e),Math.max(...s)))}get length(){return Math.abs(this.deltaAngle*this.radius)}transform(t){const n=t,e=this.center.clone().applyMatrix2d(n),s=this.startPoint.clone().applyMatrix2d(n);if(this.closed)return this.center=e,this.radius=e.distanceTo(s),this._startAngle=Math.atan2(s.y-e.y,s.x-e.x),this._endAngle=this._startAngle,this._clockwise=n.determinant()<0?!this._clockwise:this._clockwise,this._boundingBoxNeedsUpdate=!0,this;const i=this.midPoint.clone().applyMatrix2d(n),r=this.endPoint.clone().applyMatrix2d(n),h=new K(s,i,r),a=n.determinant()<0?!this.clockwise:this.clockwise,c=l=>{const u=w.normalizeAngle(l);return a?this._mirrorAngle(u):u};return this.center=h.center,this.radius=h.radius,this.clockwise=a,this.startAngle=c(Math.atan2(s.y-h.center.y,s.x-h.center.x)),this.endAngle=c(Math.atan2(r.y-h.center.y,r.x-h.center.x)),this._boundingBoxNeedsUpdate=!0,this}clone(){return new K(this.center.clone(),this.radius,this._startAngle,this._endAngle,this.clockwise)}getPointAtAngle(t){const n=this._getInternalAngle(t),e=this.center.x+this.radius*Math.cos(n),s=this.center.y+this.radius*Math.sin(n);return new P(e,s)}getQuadrantPoints(){const t=[],n=this._getInternalAngle(this.startAngle),e=this._getInternalAngle(this.endAngle),s=[0,Math.PI/2,Math.PI,3*Math.PI/2];for(const i of s){const r=this._getInternalAngle(i);w.isBetweenAngle(r,n,e,this.clockwise)&&t.push(this.getPointAtAngle(i))}return t}nearestPoint(t){const n=new P(t.x,t.y),e=n.x-this.center.x,s=n.y-this.center.y;if(Math.hypot(e,s)<1e-12)return this.startPoint.clone();const r=Math.atan2(s,e),h=this.clockwise?this._mirrorAngle(w.normalizeAngle(r)):w.normalizeAngle(r),a=this._getInternalAngle(h),c=this._getInternalAngle(this.startAngle),l=this._getInternalAngle(this.endAngle);if(w.isBetweenAngle(a,c,l,this.clockwise))return this.getPointAtAngle(h);const u=n.distanceToSquared(this.startPoint),d=n.distanceToSquared(this.endPoint);return u<=d?this.startPoint.clone():this.endPoint.clone()}perpendicularPoints(t){const n=new P(t.x,t.y),e=n.x-this.center.x,s=n.y-this.center.y,i=Math.hypot(e,s);if(i<1e-12)return[];const r=e/i,h=s/i,a=[new P(this.center.x+r*this.radius,this.center.y+h*this.radius),new P(this.center.x-r*this.radius,this.center.y-h*this.radius)],c=[],l=this._getInternalAngle(this.startAngle),u=this._getInternalAngle(this.endAngle);for(const d of a){const m=Math.atan2(d.y-this.center.y,d.x-this.center.x),g=this.clockwise?this._mirrorAngle(w.normalizeAngle(m)):w.normalizeAngle(m),y=this._getInternalAngle(g);(this.closed||w.isBetweenAngle(y,l,u,this.clockwise))&&c.push(d)}return c}tangentPoints(t){const n=[],e=t.x-this.center.x,s=t.y-this.center.y,i=Math.hypot(e,s),r=this.radius;if(i<r)return n;const h=Math.acos(r/i),a=Math.atan2(s,e),c=[a+h,a-h],l=this._getInternalAngle(this.startAngle),u=this._getInternalAngle(this.endAngle);for(const d of c){const m=this.clockwise?this._mirrorAngle(w.normalizeAngle(d)):w.normalizeAngle(d),g=this._getInternalAngle(m);(this.closed||w.isBetweenAngle(g,l,u,this.clockwise))&&n.push(this.getPointAtAngle(m))}return n}getPoints(t=100){const n=[];let e=this.deltaAngle,s=this._getInternalAngle(this.startAngle);if(this.closed&&(e=I,s=0),this.clockwise)for(let i=0;i<=t;i++){const r=s-e*(i/t),h=this._clockwise?this._mirrorAngle(r):r,a=this.getPointAtAngle(h);n.push(new P(a.x,a.y))}else for(let i=0;i<=t;i++){const r=s+e*(i/t),h=this._clockwise?this._mirrorAngle(r):r,a=this.getPointAtAngle(h);n.push(new P(a.x,a.y))}return n}}const zt=1e-6;function Dn(o,t){if(De(o)){const i=Me(o,t);return i?[i]:[]}const n=Kn(o);if(n.numberOfVertices<2)return[];const s=Ye(n,t);return s?[s]:[]}function we(o){return Kn(o)}function Me(o,t){const n=ze(o);if(n.length===0)return null;const e=[];for(const h of n){const a=Se(h,t);if(!a)return null;e.push(a)}const s=be(o),i=Te(e,s,o.closed,t);if(i.length<2)return null;const r=new st;return i.forEach((h,a)=>{r.addVertexAt(a,{x:h.x,y:h.y})}),r.closed=o.closed,r}function ze(o){const t=[],n=o.numberOfVertices,e=o.closed?n:n-1;for(let s=0;s<e;s++){const i=o.vertices[s],r=o.vertices[(s+1)%n];B.isPositive(Math.abs(i.bulge??0))?t.push({kind:"arc",arc:new K(i,r,i.bulge)}):t.push({kind:"line",start:new P(i.x,i.y),end:new P(r.x,r.y)})}return t}function be(o){const t=[];for(let n=0;n<o.numberOfVertices;n++)t.push(o.getPointAt(n));return t}function Se(o,t){if(o.kind==="line"){const e=Ie(o.start,o.end,t);return e?{kind:"line",...e}:null}const n=Ce(o.arc,o.arc.startPoint,o.arc.endPoint,t);return n?{kind:"arc",arc:n}:null}function Ce(o,t,n,e){const s=Ee(o,t,n,e),i=o.radius+s;return B.isNonPositive(i)?null:new K(o.center,i,o.startAngle,o.endAngle,o.clockwise)}function Ee(o,t,n,e){const s=n.x-t.x,i=n.y-t.y,r=Math.hypot(s,i);if(B.isNonPositive(r))return o.clockwise?-e:e;const h=-i/r,a=s/r,c=o.center.x-(t.x+n.x)/2,l=o.center.y-(t.y+n.y)/2;return c*h+l*a>0?-e:e}function Ie(o,t,n){const e=t.x-o.x,s=t.y-o.y,i=Math.hypot(e,s);if(B.isNonPositive(i))return null;const r=-s/i*n,h=e/i*n;return{start:new P(o.x+r,o.y+h),end:new P(t.x+r,t.y+h),dx:e,dy:s}}function Te(o,t,n,e){var h;const s=o.length;if(s===0)return[];const i=Be(o,t,n,e),r=[((h=i[0].nextSegmentStart)==null?void 0:h.clone())??i[0].point.clone()];for(let a=0;a<s;a++){const c=o[a],l=a===s-1&&!n?{point:qe(c)}:i[(a+1)%s];if(a>0&&i[a].filletPoints&&i[a].filletPoints.forEach(u=>r.push(u.clone())),c.kind==="arc"){const u=i[a].nextSegmentStart??i[a].point,d=l.point,m=Re(c.arc,u,d,Math.max(16,32));for(let g=1;g<m.length;g++)r.push(m[g])}else r.push(l.point.clone())}return Qn(r)}function Be(o,t,n,e){const s=o.length,i=[];for(let r=0;r<s;r++)r===0?i.push(n?Xn(o[s-1],o[0],t[0],e):{point:je(o[0])}):i.push(Xn(o[r-1],o[r],t[r],e));return i}function Re(o,t,n,e){const s=o.nearestPoint(t),i=o.nearestPoint(n),r=Ht(o,s),h=Ht(o,i),a=Ne(o,r,h),c=[];for(let l=0;l<=e;l++){const u=l/e,d=o.clockwise?r-a*u:r+a*u;c.push(o.getPointAtAngle(ke(o,d)))}return c}function Ht(o,t){return Math.atan2(t.y-o.center.y,t.x-o.center.x)}function ke(o,t){const n=w.normalizeAngle(t);return o.clockwise?tn(n):n}function tn(o){return(360-o*180/Math.PI)%360*(Math.PI/180)}function Ne(o,t,n){if(o.clockwise){let s=t-n;return B.isNonPositive(s)&&(s+=I),s}let e=n-t;return B.isNonPositive(e)&&(e+=I),e}function je(o){return o.kind==="line"?o.start.clone():o.arc.startPoint.clone()}function qe(o){return o.kind==="line"?o.end.clone():o.arc.endPoint.clone()}function Xn(o,t,n,e){return o.kind==="line"&&t.kind==="line"?{point:nn({start:o.start,end:o.end,dx:o.dx,dy:o.dy},{start:t.start,end:t.end,dx:t.dx,dy:t.dy})}:o.kind==="line"&&t.kind==="arc"?Yn(o,t.arc,n,e,!0):o.kind==="arc"&&t.kind==="line"?Yn(t,o.arc,n,e,!1):o.kind==="arc"&&t.kind==="arc"?ve(o.arc,t.arc,n,e):{point:n.clone()}}function ve(o,t,n,e){const s=Wn(o.endPoint,t.startPoint),r=Oe(o,t).filter(l=>bt(o,l)&&bt(t,l));if(r.length>0)return{point:Gn(r,s)};const h=o.endPoint.clone(),a=t.startPoint.clone(),c=Zn(n,Math.abs(e),h,a);return{point:h,filletPoints:c,nextSegmentStart:a}}function Yn(o,t,n,e,s){const i=Wn(s?o.end:o.start,s?t.startPoint:t.endPoint),r=Fe(o,t,i);if(Le(o,r)&&bt(t,r))return{point:r};const h=Ve(o,n,e),a=s?t.startPoint.clone():t.endPoint.clone(),c=Zn(n,Math.abs(e),s?h:a,s?a:h);return s?{point:h,filletPoints:c,nextSegmentStart:a}:{point:a,filletPoints:c,nextSegmentStart:h}}function Ve(o,t,n){const e=Math.hypot(o.dx,o.dy),s=-o.dy/e*n,i=o.dx/e*n;return new P(t.x+s,t.y+i)}function Le(o,t){const n=Math.hypot(o.dx,o.dy);if(B.isNonPositive(n))return!1;const e=o.dx/n,s=o.dy/n,i=t.x-o.start.x,r=t.y-o.start.y,h=Math.abs(i*s-r*e);return B.equalToZero(h)}function Zn(o,t,n,e){const s=Math.atan2(n.y-o.y,n.x-o.x),i=Math.atan2(e.y-o.y,e.x-o.x),r=Ue(s,i);if(B.equalToZero(Math.abs(r)))return[];const h=[],a=Math.max(2,Math.ceil(Math.abs(r)/Math.PI*16));for(let c=1;c<a;c++){const l=c/a,u=s+r*l;h.push(new P(o.x+t*Math.cos(u),o.y+t*Math.sin(u)))}return h}function Ue(o,t){let n=t-o;for(;n>Math.PI;)n-=I;for(;n<=-Math.PI;)n+=I;return n}function Fe(o,t,n){const e=Math.hypot(o.dx,o.dy);if(B.isNonPositive(e))return n.clone();const s=o.dx/e,i=o.dy/e,r=o.start.x-t.center.x,h=o.start.y-t.center.y,a=2*(r*s+h*i),c=r*r+h*h-t.radius*t.radius,l=a*a-4*c;if(l<0)return n.clone();const u=Math.sqrt(l),d=[(-a-u)/2,(-a+u)/2].map(g=>new P(o.start.x+s*g,o.start.y+i*g)),m=d.filter(g=>bt(t,g));return Gn(m.length>0?m:d,n)}function bt(o,t){const n=Math.abs(Math.hypot(t.x-o.center.x,t.y-o.center.y)-o.radius);if(B.isPositive(n))return!1;const e=Ht(o,t),s=o.clockwise?tn(w.normalizeAngle(o.startAngle)):w.normalizeAngle(o.startAngle),i=o.clockwise?tn(w.normalizeAngle(o.endAngle)):w.normalizeAngle(o.endAngle);return w.isBetweenAngle(e,s,i,o.clockwise)}function Oe(o,t){const n=t.center.x-o.center.x,e=t.center.y-o.center.y,s=Math.hypot(n,e);if(B.isNonPositive(s))return[];const i=o.radius+t.radius,r=Math.abs(o.radius-t.radius);if(s>i+zt)return[];if(s<r-zt)return[];const h=(o.radius*o.radius-t.radius*t.radius+s*s)/(2*s),a=o.radius*o.radius-h*h;if(a<-zt)return[];const c=o.center.x+h*n/s,l=o.center.y+h*e/s;if(a<=zt)return[new P(c,l)];const u=Math.sqrt(a),d=-e*u/s,m=n*u/s;return[new P(c+d,l+m),new P(c-d,l-m)]}function Gn(o,t){let n=o[0],e=n.distanceToSquared(t);for(let s=1;s<o.length;s++){const i=o[s].distanceToSquared(t);i<e&&(n=o[s],e=i)}return n.clone()}function Wn(o,t){return new P((o.x+t.x)/2,(o.y+t.y)/2)}function De(o){const t=o.numberOfVertices,n=o.closed?t:t-1;for(let e=0;e<n;e++){const s=o.vertices[e];if(B.isPositive(Math.abs(s.bulge??0)))return!0}return!1}function Kn(o){const t=Xe(o.vertices.map(n=>new P(n.x,n.y)),o.closed);return t.length===o.numberOfVertices?o:new st(t.map(n=>({x:n.x,y:n.y})),o.closed)}function Xe(o,t){const n=Qn(o);if(!t||n.length<2)return n;const e=n[0],s=n[n.length-1];return B.isNonPositive(Math.hypot(e.x-s.x,e.y-s.y))&&n.pop(),n}function Qn(o){const t=[];return o.forEach(n=>{const e=t[t.length-1];(!e||B.isPositive(Math.hypot(e.x-n.x,e.y-n.y)))&&t.push(new P(n.x,n.y))}),t}function Ye(o,t){const n=[];for(let r=0;r<o.numberOfVertices;r++)n.push(o.getPointAt(r));const e=Ze(n,o.closed,t);if(e.length===0)return null;const s=[];if(o.closed){if(e.length<2)return null;const r=e.length;for(let h=0;h<r;h++){const a=e[(h-1+r)%r],c=e[h];s.push(nn(a,c))}}else{s.push(e[0].start);for(let r=1;r<e.length;r++)s.push(nn(e[r-1],e[r]));s.push(e[e.length-1].end)}const i=new st;return s.forEach((r,h)=>{i.addVertexAt(h,{x:r.x,y:r.y})}),i.closed=o.closed,i}function Ze(o,t,n){const e=[],s=t?o.length:o.length-1;for(let i=0;i<s;i++){const r=o[i],h=o[t?(i+1)%o.length:i+1],a=h.x-r.x,c=h.y-r.y,l=Math.hypot(a,c);if(B.isNonPositive(l))continue;const u=-c/l*n,d=a/l*n;e.push({start:new P(r.x+u,r.y+d),end:new P(h.x+u,h.y+d),dx:a,dy:c})}return e}function nn(o,t){const n=o.dx*t.dy-o.dy*t.dx;if(B.equalToZero(n))return new P((o.end.x+t.start.x)/2,(o.end.y+t.start.y)/2);const e=t.start.x-o.start.x,s=t.start.y-o.start.y,i=(e*t.dy-s*t.dx)/n;return new P(o.start.x+i*o.dx,o.start.y+i*o.dy)}class st extends at{constructor(t=null,n=!1){super(),this._vertices=t||new Array,this._closed=n}get vertices(){return this._vertices}get numberOfVertices(){return this._vertices.length}get closed(){return this._closed}get startPoint(){if(this.numberOfVertices>0){const t=this._vertices[0];return new P(t.x,t.y)}throw new Error("Start point does not exist in an empty polyline.")}get endPoint(){const t=this.numberOfVertices;if(t>0)if(this.closed){const n=this._vertices[0];return new P(n.x,n.y)}else{const n=this._vertices[t-1];return new P(n.x,n.y)}throw new Error("End point does not exist in an empty polyline.")}get length(){let t=0;const n=this._vertices.length;for(let e=0;e<n;++e){const s=this._vertices[e];let i=null;if(e<n-1?i=this._vertices[e+1]:e==n-1&&this.closed&&(i=this._vertices[0]),i)if(s.bulge){const r=new K(s,i,s.bulge);t+=r.length}else t+=new P(s.x,s.y).distanceTo(i)}return t}get area(){if(!this._closed||this._vertices.length<3)return 0;const t=this.getPoints(128);return Un(t)}set closed(t){this._closed=t,this._boundingBoxNeedsUpdate=!0}addVertexAt(t,n){t<=0?this._vertices.unshift(n):this._vertices.splice(t,0,n),this._boundingBoxNeedsUpdate=!0}removeVertexAt(t){if(t<0||t>=this._vertices.length)throw new Error(`Index ${t} is out of bounds. Valid range is 0 to ${this._vertices.length-1}.`);this._vertices.splice(t,1),this._boundingBoxNeedsUpdate=!0}reset(t,n){t?n!==void 0&&n>=0&&n<this._vertices.length&&(this._vertices=this._vertices.slice(0,n),this._boundingBoxNeedsUpdate=!0):(this._vertices=new Array,this._boundingBoxNeedsUpdate=!0)}getPointAt(t){const n=this._vertices[t];return new P(n.x,n.y)}calculateBoundingBox(){const t=this.getPoints(100);return new X().setFromPoints(t)}transform(t){const n=t.determinant()<0;return this._vertices.forEach(e=>{const s=new P(e).applyMatrix2d(t);e.x=s.x,e.y=s.y,n&&e.bulge!=null&&(e.bulge=-e.bulge)}),this._boundingBoxNeedsUpdate=!0,this}clone(){return new st(this._vertices.map(t=>({...t})),this._closed)}getPoints3d(t,n){const e=[];return this.getPoints(t).forEach(i=>e.push(new M().set(i.x,i.y,n))),e}getPoints(t){const n=[],e=this._vertices.length;for(let s=0;s<e;++s){const i=this._vertices[s];if(i.bulge){let r=null;if(s<e-1?r=this._vertices[s+1]:s==e-1&&this.closed&&(r=this._vertices[0]),r){const a=new K(i,r,i.bulge).getPoints(t),c=a.length;for(let l=0;l<c;++l){const u=a[l];n.push(new P(u.x,u.y))}}}else n.push(new P(i.x,i.y)),s==e-1&&this.closed&&n.push(n[0])}return n}offset(t){return Dn(this,t)}}function Ge(o,t,n){const e=Math.hypot(t.x,t.y);if(B.isNonPositive(e))return null;const s=-t.y/e*n,i=t.x/e*n;return new M(o.x+s,o.y+i,o.z)}function We(o,t,n){if(o.length<2)return null;const e=we(new st(o.map(i=>({x:i.x,y:i.y})),t));return Dn(e,n)[0]??null}function Ke(o,t,n,e){if(o.length<2||B.equalToZero(n))return null;const{points:s,tangents:i}=Jn(o,e);if(s.length<2)return null;const r=i??Qe(s,t),h=$e(s,r,n),a=t?He(h):Je(h);if(a.length<2)return null;const c=new st;return a.forEach((l,u)=>{c.addVertexAt(u,{x:l.x,y:l.y})}),c.closed=t,c}function Qe(o,t){const n=o.length,e=new Array(n);for(let s=0;s<n;s++){let i=0,r=0;if(t){const a=o[(s-1+n)%n],c=o[(s+1)%n];i=c.x-a.x,r=c.y-a.y}else s===0?(i=o[1].x-o[0].x,r=o[1].y-o[0].y):s===n-1?(i=o[n-1].x-o[n-2].x,r=o[n-1].y-o[n-2].y):(i=o[s+1].x-o[s-1].x,r=o[s+1].y-o[s-1].y);const h=Math.hypot(i,r);B.isNonPositive(h)?e[s]=new P(1,0):e[s]=new P(i/h,r/h)}return e}function $e(o,t,n){return o.map((e,s)=>{const i=t[s],r=-i.y*n,h=i.x*n;return new P(e.x+r,e.y+h)})}function Je(o){let t=St(o);if(t.length<3)return t;for(;;){const n=$n(t,!1);if(!n||(t=St([...t.slice(0,n.segmentA+1),n.point,...t.slice(n.segmentB+1)]),t.length<2))break}return t}function He(o){let t=St(o);if(t.length<4)return t;for(;;){const n=$n(t,!0);if(!n||(t=St([...t.slice(0,n.segmentA+1),n.point,...t.slice(n.segmentB+1)]),t.length<3))break}return t}function $n(o,t){const n=t?o.length:o.length-1;if(n<2)return null;for(let e=0;e<n;e++){const s=o[e],i=o[(e+1)%o.length];for(let r=e+1;r<n;r++){if(ts(e,r,n,t))continue;const h=o[r],a=o[(r+1)%o.length],c=ns(s,i,h,a);if(c)return{point:c,segmentA:e,segmentB:r}}}return null}function ts(o,t,n,e){return!!(t===o||t===o+1||e&&o===0&&t===n-1)}function ns(o,t,n,e){const s=t.x-o.x,i=t.y-o.y,r=e.x-n.x,h=e.y-n.y,a=s*h-i*r;if(B.equalToZero(a))return null;const c=n.x-o.x,l=n.y-o.y,u=(c*h-l*r)/a,d=(c*i-l*s)/a,m=wt.equalPointTol;return u<-m||u>1+m||d<-m||d>1+m?null:new P(o.x+u*s,o.y+u*i)}function Jn(o,t){const n=[],e=[],s=t!=null&&t.length===o.length;return o.forEach((i,r)=>{const h=n[n.length-1];if((!h||B.isPositive(Math.hypot(h.x-i.x,h.y-i.y)))&&(n.push(new P(i.x,i.y)),s)){const a=t[r];e.push(new P(a.x,a.y))}}),{points:n,tangents:s?e:void 0}}function St(o){return Jn(o).points}class en extends Jt{constructor(){super(),this._loops=[]}add(t){this._loops.push(t),this._boundingBoxNeedsUpdate=!0}get loops(){return this._loops}get outter(){if(this._loops.length>0)return this._loops[0]}calculateBoundingBox(){const t=this.outter;return t?t.box:new X}transform(t){return this._loops.forEach(n=>{n.transform(t)}),this._boundingBoxNeedsUpdate=!0,this}clone(){const t=new en;return this._loops.forEach(n=>{t.add(n.clone())}),t}getPoints(t){const n=[];for(let e=0;e<this.loops.length;++e){const i=this.loops[e].getPoints(t);n.push(i)}return n}buildHierarchy(){var h;const t=this.getPoints(100),n=this.calculateBoundaryBoxes(t),e=this.sortBoundaryBoxesByAreas(n),s=new Map,i=e.length;for(let a=0;a<i;a++)s.set(e[a],{index:e[a],children:[]});const r={index:-1,children:[]};for(let a=0;a<i;a++){const c=e[a],l=t[c],u=n[c];let d=a+1;for(;d<i;d++){const m=e[d],g=t[m];if(n[m].containsBox(u)&&U.isPointInPolygon(l[w.randInt(0,l.length-1)],g)){(h=s.get(m))==null||h.children.push(s.get(c));break}}d===i&&r.children.push(s.get(c))}return r}get area(){if(this._loops.length===0)return 0;let t=0;for(let n=0;n<this._loops.length;n++){const s=this._loops[n].getPoints(128),i=$t(s);n===0?t+=Math.abs(i):t-=Math.abs(i)}return t}calculateBoundaryBoxes(t){const n=[];return t.forEach(e=>{n.push(new X().setFromPoints(e))}),n}sortBoundaryBoxesByAreas(t){const n=[];t.forEach((s,i)=>{const r=s.size,h=r.width*r.height;n.push({area:h,index:i})}),n.sort((s,i)=>s.area-i.area);const e=[];return n.forEach(s=>{e.push(s.index)}),e}}class es extends On{translate(t){return this.transform(new J().makeTranslation(t.x,t.y,t.z))}get box(){return(this._box==null||this._boundingBoxNeedsUpdate)&&(this._box=this.calculateBoundingBox(),this._boundingBoxNeedsUpdate=!1),this._box}}class ft extends es{}class ct extends ft{constructor(t,n){super(),this._start=new M(t),this._end=new M(n)}get startPoint(){return this._start}set startPoint(t){this._start.copy(t),this._boundingBoxNeedsUpdate=!0}get endPoint(){return this._end}set endPoint(t){this._end.copy(t),this._boundingBoxNeedsUpdate=!0}get direction(){return new A().subVectors(this.endPoint,this.startPoint).normalize()}get midPoint(){return new M((this._start.x+this._end.x)/2,(this._start.y+this._end.y)/2,(this._start.z+this._end.z)/2)}nearestPoint(t){return this.project(t)}get length(){return this.startPoint.distanceTo(this.endPoint)}isPointOnLine(t){return this.project(t).distanceTo(t)<1e-6}at(t,n){return this.delta(n).multiplyScalar(t).add(this._start)}atLength(t,n=!1){if(n){const e=this.delta(it).normalize();return new M(this._start).addScaledVector(e,t)}else{const e=this.delta(it).normalize();return new M(this._end).addScaledVector(e,t)}}extend(t,n=!1){if(n){const e=it.subVectors(this._start,this._end).normalize();this._start=new M(this._start).addScaledVector(e,t)}else{const e=this.delta(it).normalize();this._end=new M(this._end).addScaledVector(e,t)}return this._boundingBoxNeedsUpdate=!0,this}closestPointToPointParameter(t,n){Hn.subVectors(t,this._start),Ct.subVectors(this.endPoint,this.startPoint);const e=Ct.dot(Ct);let i=Ct.dot(Hn)/e;return n&&(i=w.clamp(i,0,1)),i}closestPointToPoint(t,n,e){const s=this.closestPointToPointParameter(t,n);return this.delta(e).multiplyScalar(s).add(this._start)}delta(t){return t.subVectors(this._end,this._start)}distanceSq(){return this._start.distanceToSquared(this._end)}distance(){return this._start.distanceTo(this._end)}project(t){const n=this.direction,s=it.subVectors(t,this.startPoint).dot(n);return new M().copy(n).multiplyScalar(s).add(this.startPoint)}perpPoint(t){const n=this.direction,e=this.startPoint,i=it.subVectors(t,e).dot(n),r=it.copy(n).multiplyScalar(i);return new M().addVectors(e,r)}calculateBoundingBox(){const t=new M(Math.min(this._start.x,this._end.x),Math.min(this._start.y,this._end.y),Math.min(this._start.z,this._end.z)),n=new M(Math.max(this._start.x,this._end.x),Math.max(this._start.y,this._end.y),Math.max(this._start.z,this._end.z));return new W(t,n)}transform(t){return this._start.applyMatrix4(t),this._end.applyMatrix4(t),this._boundingBoxNeedsUpdate=!0,this}get closed(){return!1}copy(t){return this.startPoint=t.startPoint,this.endPoint=t.endPoint,this._boundingBoxNeedsUpdate=!0,this}clone(){return new ct(this._start.clone(),this._end.clone())}offset(t){const n=this.startPoint,e=this.endPoint;if(Math.hypot(e.x-n.x,e.y-n.y)===0)return this.clone();const i=new A(e.x-n.x,e.y-n.y,0).normalize(),r=new A(-i.y,i.x,0);return new ct(new M(n.x+r.x*t,n.y+r.y*t,n.z),new M(e.x+r.x*t,e.y+r.y*t,e.z))}}const it=new A,Hn=new A,Ct=new A;class lt extends ft{static computeCenterPoint(t,n,e){const s=new A().addVectors(t,n).multiplyScalar(.5),i=new A().addVectors(t,e).multiplyScalar(.5),r=new A().subVectors(n,t),h=new A().subVectors(e,t),a=new A().crossVectors(r,h).normalize();if(a.lengthSq()===0)return null;const c=new A().crossVectors(r,a).normalize(),l=new A().crossVectors(h,a).normalize(),u=c.clone().multiplyScalar(Number.MAX_SAFE_INTEGER),d=l.clone().multiplyScalar(Number.MAX_SAFE_INTEGER),m=new ct(s,s.clone().add(u)),g=new ct(i,i.clone().add(d)),y=new A;return m.closestPointToPoint(g.startPoint,!0,y)?y:null}static createByThreePoints(t,n,e){const s=lt.computeCenterPoint(t,n,e);if(s){const i=s.distanceTo(t),r=new A().subVectors(t,s),h=new A().subVectors(n,s),a=Math.atan2(r.y,r.x),c=Math.atan2(h.y,h.x);return new lt(s,i,a,c,A.Z_AXIS)}}constructor(t,n,e,s,i,r=A.X_AXIS){super(),this.center=t,this.radius=n,this.startAngle=e,this.endAngle=s,this.normal=i,this.refVec=r,(s-e)%I==0?(this.startAngle=0,this.endAngle=I):(this.startAngle=e,this.endAngle=s)}get center(){return this._center}set center(t){this._center=new M(t.x,t.y,t.z||0),this._boundingBoxNeedsUpdate=!0}get radius(){return this._radius}set radius(t){if(t<0)throw V.AcCmErrors.ILLEGAL_PARAMETERS;this._radius=t,this._boundingBoxNeedsUpdate=!0}get startAngle(){return this._startAngle}set startAngle(t){this._startAngle=w.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._endAngle}set endAngle(t){this._endAngle=this.startAngle==0&&t==I?t:w.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get deltaAngle(){return w.normalizeAngle(this.endAngle-this.startAngle)}get isLargeArc(){return Math.abs(this.deltaAngle)>Math.PI?1:0}get clockwise(){return this.deltaAngle<=0}get normal(){return this._normal}set normal(t){this._normal=new A(t.x,t.y,t.z),this._normal.normalize(),this._boundingBoxNeedsUpdate=!0}get refVec(){return this._refVec}set refVec(t){this._refVec=new A(t.x,t.y,t.z),this._refVec.normalize(),this._boundingBoxNeedsUpdate=!0}get startPoint(){return this.getPointAtAngle(this._startAngle)}get endPoint(){return this.getPointAtAngle(this._endAngle)}get midPoint(){let t=this.startAngle,n=this.deltaAngle;this.closed&&(t=0,n=I);const e=t+n*.5;return this.getPointAtAngle(e)}get length(){return this.closed?2*Math.PI*this.radius:Math.abs(this.deltaAngle*this.radius)}get area(){return this.closed?Math.PI*this.radius*this.radius:0}nearestPoint(t){const n=new A(t.x,t.y,t.z||0),e=this.center,s=this.normal,r=n.clone().sub(e).dot(s),a=n.clone().sub(s.clone().multiplyScalar(r)).clone().sub(e);if(a.lengthSq()===0)return this.startPoint.clone();a.normalize().multiplyScalar(this.radius);const c=e.clone().add(a),l=this.getAngle(c.clone()),u=this.startAngle,d=this.deltaAngle;let m=w.normalizeAngle(l-u);m<0&&(m=0),m>d&&(m=d);const g=this.getPointAtAngle(u+m),y=g.distanceTo(n),x=this.startPoint.distanceTo(n),f=this.endPoint.distanceTo(n);return x<y&&x<=f?this.startPoint.clone():f<y&&f<x?this.endPoint.clone():g}tangentPoints(t){const n=[],e=new A(t.x,t.y,t.z||0),s=this.center,i=this.normal,r=this.radius,a=e.clone().sub(s).dot(i),c=e.clone().sub(i.clone().multiplyScalar(a)),l=s.clone(),d=c.clone().sub(l).length();if(d<r)return n;const m=Math.acos(r/d),g=this.getAngle(c.clone()),y=[g+m,g-m];for(const x of y){const f=w.normalizeAngle(x-this.startAngle);f>=0&&f<=this.deltaAngle&&n.push(this.getPointAtAngle(this.startAngle+f))}return n}perpendicularPoints(t){const n=[],e=new A(t.x,t.y,t.z||0),s=this.center,i=this.normal,r=this.radius,a=e.clone().sub(s).dot(i),l=e.clone().sub(i.clone().multiplyScalar(a)).clone().sub(s);if(l.lengthSq()<1e-24)return n;l.normalize();const u=[s.clone().add(l.clone().multiplyScalar(r)),s.clone().sub(l.clone().multiplyScalar(r))];for(const d of u){const m=this.getAngle(d.clone()),g=w.normalizeAngle(m-this.startAngle);g>=0&&g<=this.deltaAngle&&n.push(new M(d.x,d.y,d.z||0))}return n}nearestTangentPoint(t){const n=this.tangentPoints(t);if(n.length===0)return null;const e=new M(t.x,t.y,t.z||0);return n.length===1||n[0].distanceTo(e)<n[1].distanceTo(e)?n[0]:n[1]}calculateBoundingBox(){const t=[this.startAngle,this.endAngle];for(let a=0;a<2*Math.PI;a+=Math.PI/2)w.isBetweenAngle(a,this.startAngle,this.endAngle)&&t.push(a);let n=1/0,e=1/0,s=1/0,i=-1/0,r=-1/0,h=-1/0;for(const a of t){const c=this.getPointAtAngle(a);c.x<n&&(n=c.x),c.y<e&&(e=c.y),c.z<s&&(s=c.z),c.x>i&&(i=c.x),c.y>r&&(r=c.y),c.z>h&&(h=c.z)}return new W({x:n,y:e,z:s},{x:i,y:r,z:h})}get closed(){return Math.abs(this.endAngle-this.startAngle)/Math.PI%2==0}getPoints(t){const n=[];let e=this.deltaAngle,s=this.startAngle;this.closed&&(e=I,s=0);for(let i=0;i<=t;i++){const r=s+e*(i/t),h=this.getPointAtAngle(r);n.push(h)}return n}transform(t){const n=this.center.clone().applyMatrix4(t),e=this.startPoint.clone().applyMatrix4(t),s=this.endPoint.clone().applyMatrix4(t),i=this.getPointAtAngle(this.closed?Math.PI/2:this.startAngle+this.deltaAngle/2).clone().applyMatrix4(t),r=new A(e).sub(n).normalize(),h=n.distanceTo(e);let a=new A().crossVectors(new A(e).sub(n),new A(i).sub(n)).normalize();a.lengthSq()===0&&(a=this.normal.clone().transformDirection(t));const c=l=>{const u=new A(l).sub(n);return Math.atan2(u.dot(te.crossVectors(a,r)),u.dot(r))};return this.center=n,this.radius=h,this.normal=a,this.refVec=r,this.startAngle=0,this.endAngle=this.closed?I:c(s),this._boundingBoxNeedsUpdate=!0,this}copy(t){return this.center=t.center,this.radius=t.radius,this.startAngle=t.startAngle,this.endAngle=t.endAngle,this.normal=t.normal,this.refVec=t.refVec,this._boundingBoxNeedsUpdate=!0,this}clone(){return new lt(this.center.clone(),this.radius,this.startAngle,this.endAngle,this.normal,this.refVec)}getAngle(t){return t.sub(this.center),Math.atan2(t.dot(te.crossVectors(this.refVec,this.normal)),t.dot(this.refVec))}getPointAtAngle(t){const n=this.normal,e=this.refVec,s={x:n.y*e.z-n.z*e.y,y:n.z*e.x-n.x*e.z,z:n.x*e.y-n.y*e.x},i=this.center,r=this.radius;return new M(i.x+r*(e.x*Math.cos(t)+s.x*Math.sin(t)),i.y+r*(e.y*Math.cos(t)+s.y*Math.sin(t)),i.z+r*(e.z*Math.cos(t)+s.z*Math.sin(t)))}get plane(){const t=new A(this.center).distanceTo(Ot);return new yt(this.normal,t)}offset(t){const n=this.radius+t;return n<=0?null:new lt(this.center,n,this.startAngle,this.endAngle,this.normal,this.refVec)}}const te=new A;class rt extends at{constructor(t,n,e,s=0,i=I,r=!1,h=0){super(),this.center=t,this.majorAxisRadius=n,this.minorAxisRadius=e,(i-s)%I==0?(this.startAngle=0,this.endAngle=I):(this.startAngle=s,this.endAngle=i),this.clockwise=r,this.rotation=h}get center(){return this._center}set center(t){this._center=new M(t.x,t.y,t.z||0),this._boundingBoxNeedsUpdate=!0}get majorAxisRadius(){return this._majorAxisRadius}set majorAxisRadius(t){if(t<0)throw V.AcCmErrors.ILLEGAL_PARAMETERS;this._majorAxisRadius=t,this._boundingBoxNeedsUpdate=!0}get minorAxisRadius(){return this._minorAxisRadius}set minorAxisRadius(t){if(t<0)throw V.AcCmErrors.ILLEGAL_PARAMETERS;this._minorAxisRadius=t,this._boundingBoxNeedsUpdate=!0}get startAngle(){return this._startAngle}set startAngle(t){this._startAngle=w.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._endAngle}set endAngle(t){this._endAngle=this.startAngle==0&&t==I?t:w.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get clockwise(){return this._clockwise}set clockwise(t){this._clockwise=t,this._boundingBoxNeedsUpdate=!0}get rotation(){return this._rotation}set rotation(t){this._rotation=t,this._boundingBoxNeedsUpdate=!0}get deltaAngle(){return w.normalizeAngle(this.endAngle-this.startAngle)}get isLargeArc(){return Math.abs(this.deltaAngle)>Math.PI?1:0}calculateBoundingBox(){let n=1/0,e=1/0,s=-1/0,i=-1/0;for(let r=0;r<=100;r++){const h=this.getPoint(r/100);n=Math.min(n,h.x),e=Math.min(e,h.y),s=Math.max(s,h.x),i=Math.max(i,h.y)}return new X({x:n,y:e},{x:s,y:i})}get closed(){return this.deltaAngle==0}getPoint(t){const n=Math.PI*2;let e=this.endAngle-this.startAngle;const s=Math.abs(e)<Number.EPSILON;for(;e<0;)e+=n;for(;e>n;)e-=n;e<Number.EPSILON&&(s?e=0:e=n),this.clockwise===!0&&!s&&(e===n?e=-n:e=e-n);const i=this.startAngle+t*e;let r=this.center.x+this.majorAxisRadius*Math.cos(i),h=this.center.y+this.minorAxisRadius*Math.sin(i);if(this.rotation!==0){const a=Math.cos(this.rotation),c=Math.sin(this.rotation),l=r-this.center.x,u=h-this.center.y;r=l*a-u*c+this.center.x,h=l*c+u*a+this.center.y}return new P(r,h)}transform(t){const n=t,e=new P(this.center).applyMatrix2d(n),s=new M(e.x,e.y,this.center.z),i=this.getPointAtAngle(0).clone().applyMatrix2d(n),r=this.getPointAtAngle(Math.PI/2).clone().applyMatrix2d(n),h=new P(i).sub(e),a=new P(r).sub(e),c=h.length(),l=a.length(),u=Math.atan2(h.y,h.x),d=h.clone().normalize(),m=a.clone().normalize(),g=f=>{const b=new P(f).sub(e),p=b.dot(d),C=b.dot(m);return w.normalizeAngle(Math.atan2(C/l,p/c))},y=n.determinant()<0?!this.clockwise:this.clockwise,x=this.closed?new rt(s,c,l,0,I,y,u):new rt(s,c,l,g(this.startPoint.clone().applyMatrix2d(n)),g(this.endPoint.clone().applyMatrix2d(n)),y,u);return this.center=x.center,this.majorAxisRadius=x.majorAxisRadius,this.minorAxisRadius=x.minorAxisRadius,this._startAngle=x._startAngle,this._endAngle=x._endAngle,this._clockwise=x._clockwise,this.rotation=x.rotation,this._boundingBoxNeedsUpdate=!0,this}getPointAtAngle(t){return this.getPoint(this.closed?t/I:w.normalizeAngle(t-this.startAngle)/this.deltaAngle)}copy(t){return this.center=t.center,this.majorAxisRadius=t.majorAxisRadius,this.minorAxisRadius=t.minorAxisRadius,this.startAngle=t.startAngle,this.endAngle=t.endAngle,this.clockwise=t.clockwise,this.rotation=t.rotation,this}clone(){return new rt(this.center,this.majorAxisRadius,this.minorAxisRadius,this.startAngle,this.endAngle,this.clockwise,this.rotation)}getFocusPoints(){const t=Math.max(this.majorAxisRadius,this.minorAxisRadius),n=Math.min(this.majorAxisRadius,this.minorAxisRadius);if(t-n<1e-9)return[];const e=Math.sqrt(t*t-n*n),s=Math.cos(this.rotation),i=Math.sin(this.rotation),r=this.majorAxisRadius>=this.minorAxisRadius,h=r?s:-i,a=r?i:s;return[new P(this.center.x-e*h,this.center.y-e*a),new P(this.center.x+e*h,this.center.y+e*a)]}getQuadrantPoints(){return this.closed?[this.getPoint(0),this.getPoint(.25),this.getPoint(.5),this.getPoint(.75)]:[]}nearestPoint(t){const n=new P(t.x,t.y);let e=this.getPoint(0),s=n.distanceToSquared(e);const i=72;for(let r=1;r<=i;r++){const h=this.getPoint(r/i),a=n.distanceToSquared(h);a<s&&(s=a,e=h)}return e}tangentPoints(t){const n=this._projectPointToLocal(t);return this._findSnapAngles(n,(s,i,r,h)=>{const a=-this.majorAxisRadius*h,c=this.minorAxisRadius*r;return(s-n.x)*c-(i-n.y)*a}).map(s=>this.getPointAtAngle(s))}perpendicularPoints(t){const n=this._projectPointToLocal(t);return this._findSnapAngles(n,(s,i,r,h)=>{const a=this.minorAxisRadius*r,c=this.majorAxisRadius*h;return(s-n.x)*c-(i-n.y)*a}).map(s=>this.getPointAtAngle(s))}_projectPointToLocal(t){const n=t.x-this.center.x,e=t.y-this.center.y,s=Math.cos(-this.rotation),i=Math.sin(-this.rotation);return{x:n*s-e*i,y:n*i+e*s}}_findSnapAngles(t,n,e=144){const s=this.majorAxisRadius,i=this.minorAxisRadius,r=this.startAngle,h=this.deltaAngle,a=[],c=d=>{const m=Math.cos(d),g=Math.sin(d);return n(s*m,i*g,m,g)};let l=r,u=c(l);for(let d=1;d<=e;d++){const m=r+h*d/e,g=c(m);if(Math.abs(u)<1e-10&&a.push(l),u*g<0){let y=l,x=m;for(let f=0;f<32;f++){const b=(y+x)/2;c(y)*c(b)<=0?x=b:y=b}a.push((y+x)/2)}l=m,u=g}return a}}class ut extends ft{constructor(t,n,e,s,i,r=0,h=I){super(),this.center=t,this.normal=n,this.majorAxis=e,this.majorAxisRadius=s,this.minorAxisRadius=i;const a=Math.abs(h-r);Math.abs(a-I)<1e-10||Math.abs(a-2*I)<1e-10?(this.startAngle=0,this.endAngle=I):(this.startAngle=r,this.endAngle=h)}get center(){return this._center}set center(t){this._center=new M(t.x,t.y,t.z||0),this._boundingBoxNeedsUpdate=!0}get majorAxisRadius(){return this._majorAxisRadius}set majorAxisRadius(t){if(t<0)throw V.AcCmErrors.ILLEGAL_PARAMETERS;this._majorAxisRadius=t,this._boundingBoxNeedsUpdate=!0}get minorAxisRadius(){return this._minorAxisRadius}set minorAxisRadius(t){if(t<0)throw V.AcCmErrors.ILLEGAL_PARAMETERS;this._minorAxisRadius=t,this._boundingBoxNeedsUpdate=!0}get startAngle(){return this._startAngle}set startAngle(t){this._startAngle=w.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._endAngle}set endAngle(t){this._endAngle=this.startAngle==0&&t==I?t:w.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get deltaAngle(){const t=this.endAngle-this.startAngle;return Math.abs(t-I)<1e-10?I:w.normalizeAngle(t)}get isLargeArc(){return Math.abs(this.deltaAngle)>Math.PI?1:0}get clockwise(){return this.deltaAngle<=0}get normal(){return this._normal}set normal(t){this._normal=new A(t.x,t.y,t.z),this._normal.normalize(),this._boundingBoxNeedsUpdate=!0}get majorAxis(){return this._majorAxis}set majorAxis(t){this._majorAxis=new A(t.x,t.y,t.z),this._majorAxis.normalize(),this._boundingBoxNeedsUpdate=!0}get minorAxis(){return new A().crossVectors(this.normal,this.majorAxis).normalize()}get startPoint(){return this.getPointAtAngle(this._startAngle)}get endPoint(){return this.getPointAtAngle(this._endAngle)}get midPoint(){let t=this.startAngle,n=this.deltaAngle;(this.closed||Math.abs(n-I)<1e-10)&&(t=0,n=I);const e=t+n/2;return this.getPointAtAngle(e)}get isCircular(){return B.equal(this.majorAxisRadius,this.minorAxisRadius)}get length(){if(this.isCircular)return this.majorAxisRadius*Math.abs(this.deltaAngle);const t=1e3,n=this.deltaAngle/t;let e=0,s=this.getPointAtAngle(this.startAngle);for(let i=1;i<=t;i++){const r=this.startAngle+i*n,h=this.getPointAtAngle(r),a=h.x-s.x,c=h.y-s.y,l=h.z-s.z;e+=Math.sqrt(a*a+c*c+l*l),s=h}return e}get area(){return Math.abs(this.deltaAngle-I)>=1e-10?0:Math.PI*this.majorAxisRadius*this.minorAxisRadius}calculateBoundingBox(){if(this.majorAxis.equals(A.X_AXIS)||this.majorAxis.equals(A.Y_AXIS)||this.majorAxis.isParallelTo(A.X_AXIS)||this.majorAxis.isParallelTo(A.Y_AXIS)){const t=[this.startAngle,this.endAngle];for(let a=0;a<2*Math.PI;a+=Math.PI/2)w.isBetweenAngle(a,this.startAngle,this.endAngle)&&t.push(a);let n=1/0,e=1/0,s=1/0,i=-1/0,r=-1/0,h=-1/0;for(const a of t){const c=this.getPointAtAngle(a);c.x<n&&(n=c.x),c.y<e&&(e=c.y),c.z<s&&(s=c.z),c.x>i&&(i=c.x),c.y>r&&(r=c.y),c.z>h&&(h=c.z)}return new W({x:n,y:e,z:s},{x:i,y:r,z:h})}else{let n=1/0,e=1/0,s=1/0,i=-1/0,r=-1/0,h=-1/0;for(let a=0;a<=100;a++){const c=this.startAngle+this.deltaAngle*(a/100),l=this.getPointAtAngle(c);n=Math.min(n,l.x),e=Math.min(e,l.y),s=Math.min(s,l.z),i=Math.max(i,l.x),r=Math.max(r,l.y),h=Math.max(h,l.z)}return new W({x:n,y:e,z:s},{x:i,y:r,z:h})}}get closed(){return this.deltaAngle==0}getPoints(t=100){const n=[];let e=this.deltaAngle,s=this.startAngle;this.closed&&(e=I,s=0);for(let i=0;i<=t;i++){const r=s+e*(i/t),h=this.getPointAtAngle(r);n.push(h)}return n}getPointAtAngle(t){const n=Math.cos(t),e=Math.sin(t),s=this.minorAxis.clone().multiplyScalar(this.minorAxisRadius).multiplyScalar(e),i=this.majorAxis.clone().multiplyScalar(n*this.majorAxisRadius).add(s);return new M(this.center.x+i.x,this.center.y+i.y,this.center.z+i.z)}nearestPoint(t,n=72){const e=new M(t.x,t.y,t.z||0);let s=this.getPointAtAngle(this.startAngle),i=e.distanceToSquared(s);for(let a=1;a<=n;a++){const c=this.startAngle+this.deltaAngle*a/n,l=this.getPointAtAngle(c),u=e.distanceToSquared(l);u<i&&(i=u,s=l)}const r=e.distanceToSquared(this.startPoint),h=e.distanceToSquared(this.endPoint);return r<i&&r<=h?this.startPoint.clone():h<i&&h<r?this.endPoint.clone():s.clone()}tangentPoints(t){const n=this._projectPointToLocalPlane(t);return this._findSnapParameterAngles((s,i,r,h)=>{const a=-this.majorAxisRadius*h,c=this.minorAxisRadius*r;return(s-n.x)*c-(i-n.y)*a}).map(s=>this.getPointAtAngle(s))}perpendicularPoints(t){const n=this._projectPointToLocalPlane(t);return this._findSnapParameterAngles((s,i,r,h)=>{const a=this.minorAxisRadius*r,c=this.majorAxisRadius*h;return(s-n.x)*c-(i-n.y)*a}).map(s=>this.getPointAtAngle(s))}_projectPointToLocalPlane(t){const n=new M(t.x,t.y,t.z||0),e=new A(n).sub(this.center),s=e.dot(this.normal);return e.sub(this.normal.clone().multiplyScalar(s)),{x:e.dot(this.majorAxis),y:e.dot(this.minorAxis)}}_findSnapParameterAngles(t,n=144){const e=this.majorAxisRadius,s=this.minorAxisRadius,i=this.startAngle,r=this.deltaAngle,h=[],a=u=>{const d=Math.cos(u),m=Math.sin(u);return t(e*d,s*m,d,m)};let c=i,l=a(c);for(let u=1;u<=n;u++){const d=i+r*u/n,m=a(d);if(Math.abs(l)<1e-10&&h.push(c),l*m<0){let g=c,y=d;for(let x=0;x<32;x++){const f=(g+y)/2;a(g)*a(f)<=0?y=f:g=f}h.push((g+y)/2)}c=d,l=m}return h}contains(t){const n=new A(t).sub(this.center),e=n.dot(this.majorAxis),s=n.dot(this.minorAxis),i=e/this.majorAxisRadius,r=s/this.minorAxisRadius;return i*i+r*r<=1}transform(t){const n=t,e=this.center.clone().applyMatrix4(n),s=this.getPointAtAngle(0).clone().applyMatrix4(n),i=this.getPointAtAngle(Math.PI/2).clone().applyMatrix4(n),r=new A(s).sub(e),h=new A(i).sub(e),a=r.length(),c=h.length(),l=r.clone().normalize(),u=new A().crossVectors(r,h).normalize();let d=new A().crossVectors(u,l).normalize();d.dot(h)<0&&(u.negate(),d=new A().crossVectors(u,l).normalize());const m=y=>{const x=new A(y).sub(e),f=x.dot(l),b=x.dot(d);return w.normalizeAngle(Math.atan2(b/c,f/a))},g=this.closed?new ut(e,u,l,a,c,0,I):new ut(e,u,l,a,c,m(this.startPoint.clone().applyMatrix4(n)),m(this.endPoint.clone().applyMatrix4(n)));return this.center=g.center,this.normal=g.normal,this.majorAxis=g.majorAxis,this.majorAxisRadius=g.majorAxisRadius,this.minorAxisRadius=g.minorAxisRadius,this._startAngle=g._startAngle,this._endAngle=g._endAngle,this._boundingBoxNeedsUpdate=!0,this}copy(t){return this.center=t.center,this.normal=t.normal,this.majorAxis=t.majorAxis,this.majorAxisRadius=t.majorAxisRadius,this.minorAxisRadius=t.minorAxisRadius,this.startAngle=t.startAngle,this.endAngle=t.endAngle,this._boundingBoxNeedsUpdate=!0,this}clone(){return new ut(this.center,this.normal,this.majorAxis,this.majorAxisRadius,this.minorAxisRadius,this.startAngle,this.endAngle)}get plane(){const t=new A(this.center).distanceTo(Ot);return new yt(this.normal,t)}offset(t){const n=this.majorAxisRadius+t,e=this.minorAxisRadius+t;return n<=0||e<=0?null:new ut(this.center,this.normal,this.majorAxis,n,e,this.startAngle,this.endAngle)}}class _t extends at{constructor(t,n){super(),this._start=new P(t),this._end=new P(n)}get startPoint(){return this._start}set startPoint(t){this._start.copy(t),this._boundingBoxNeedsUpdate=!0}get endPoint(){return this._end}set endPoint(t){this._end.copy(t),this._boundingBoxNeedsUpdate=!0}getPoints(){return[this.startPoint,this.endPoint]}get length(){return this.startPoint.distanceTo(this.endPoint)}calculateBoundingBox(){const t=new P(Math.min(this._start.x,this._end.x),Math.min(this._start.y,this._end.y)),n=new P(Math.max(this._start.x,this._end.x),Math.max(this._start.y,this._end.y));return new X(t,n)}transform(t){return this._start.applyMatrix2d(t),this._end.applyMatrix2d(t),this._boundingBoxNeedsUpdate=!0,this}get closed(){return!1}copy(t){return this.startPoint=t.startPoint,this.endPoint=t.endPoint,this._boundingBoxNeedsUpdate=!0,this}clone(){return new _t(this._start.clone(),this._end.clone())}project(t){const n=this._end.x-this._start.x,e=this._end.y-this._start.y,s=n*n+e*e;if(s<1e-18)return this._start.clone();let i=((t.x-this._start.x)*n+(t.y-this._start.y)*e)/s;return i=Math.max(0,Math.min(1,i)),new P(this._start.x+i*n,this._start.y+i*e)}nearestPoint(t){return this.project(t)}}class sn{constructor(){this.c0=0,this.c1=0,this.c2=0,this.c3=0}init(t,n,e,s){this.c0=t,this.c1=e,this.c2=-3*t+3*n-2*e-s,this.c3=2*t-2*n+e+s}initCatmullRom(t,n,e,s,i){this.init(n,e,i*(e-t),i*(s-n))}initNonuniformCatmullRom(t,n,e,s,i,r,h){let a=(n-t)/i-(e-t)/(i+r)+(e-n)/r,c=(e-n)/r-(s-n)/(r+h)+(s-e)/h;a*=r,c*=r,this.init(n,e,a,c)}calc(t){const n=t*t,e=n*t;return this.c0+this.c1*t+this.c2*n+this.c3*e}}class Et extends ft{constructor(t=[],n=!1,e="centripetal",s=.5){super(),this.isCatmullRomCurve3d=!0,this.type="CatmullRomCurve3d",this._tmp=new A,this._px=new sn,this._py=new sn,this._pz=new sn,this._points=t.map(i=>new M(i)),this._closed=n,this._curveType=e,this._tension=s}get points(){return this._points}get closed(){return this._closed}get curveType(){return this._curveType}get tension(){return this._tension}get startPoint(){return this._points.length>0?this._points[0]:new M}get endPoint(){return this._points.length>0?this._points[this._points.length-1]:new M}get length(){if(this._points.length<2)return 0;let t=0;for(let n=1;n<this._points.length;n++)t+=this._points[n-1].distanceTo(this._points[n]);return this._closed&&this._points.length>2&&(t+=this._points[this._points.length-1].distanceTo(this._points[0])),t}getPoint(t,n=new M){const e=n,s=this._points,i=s.length;if(i===0)return e.set(0,0,0);if(i===1)return e.copy(s[0]);const r=(i-(this._closed?0:1))*t;let h=Math.floor(r),a=r-h;this._closed?h+=h>0?0:(Math.floor(Math.abs(h)/i)+1)*i:a===0&&h===i-1&&(h=i-2,a=1);let c,l;this._closed||h>0?c=s[(h-1)%i]:(this._tmp.subVectors(s[0],s[1]).add(s[0]),c=new M(this._tmp.x,this._tmp.y,this._tmp.z));const u=s[h%i],d=s[(h+1)%i];if(this._closed||h+2<i?l=s[(h+2)%i]:(this._tmp.subVectors(s[i-1],s[i-2]).add(s[i-1]),l=new M(this._tmp.x,this._tmp.y,this._tmp.z)),this._curveType==="centripetal"||this._curveType==="chordal"){const m=this._curveType==="chordal"?.5:.25;let g=Math.pow(c.distanceToSquared(u),m),y=Math.pow(u.distanceToSquared(d),m),x=Math.pow(d.distanceToSquared(l),m);y<1e-4&&(y=1),g<1e-4&&(g=y),x<1e-4&&(x=y),this._px.initNonuniformCatmullRom(c.x,u.x,d.x,l.x,g,y,x),this._py.initNonuniformCatmullRom(c.y,u.y,d.y,l.y,g,y,x),this._pz.initNonuniformCatmullRom(c.z,u.z,d.z,l.z,g,y,x)}else this._curveType==="catmullrom"&&(this._px.initCatmullRom(c.x,u.x,d.x,l.x,this._tension),this._py.initCatmullRom(c.y,u.y,d.y,l.y,this._tension),this._pz.initCatmullRom(c.z,u.z,d.z,l.z,this._tension));return e.set(this._px.calc(a),this._py.calc(a),this._pz.calc(a)),e}getPoints(t){const n=[];for(let e=0;e<=t;e++)n.push(this.getPoint(e/t));return n}setPoints(t){this._points=t.map(n=>new M(n)),this._boundingBoxNeedsUpdate=!0}setClosed(t){this._closed!==t&&(this._closed=t,this._boundingBoxNeedsUpdate=!0)}setCurveType(t){this._curveType=t}setTension(t){this._tension=t}clone(){return new Et(this._points.map(t=>t.clone()),this._closed,this._curveType,this._tension)}transform(t){return this._points=this._points.map(n=>{const e=new M;return e.copy(n),e.applyMatrix4(t),e}),this._boundingBoxNeedsUpdate=!0,this}calculateBoundingBox(){if(this._points.length===0)return new W;const t=new W;return this._points.forEach(n=>{t.expandByPoint(n)}),t}}function ne(o,t){const n=o.x-t[0],e=o.y-t[1],s=(o.z??0)-(t[2]??0);return n*n+e*e+s*s}class j{constructor(t,n,e,s){this._degree=t,this._knots=[...n],this._controlPoints=e.map(i=>({x:i.x,y:i.y,z:i.z})),this._weights=s?[...s]:new Array(e.length).fill(1)}degree(){return this._degree}knots(){return[...this._knots]}controlPoints(){return this._controlPoints.map(t=>({x:t.x,y:t.y,z:t.z}))}weights(){return[...this._weights]}clone(){return new j(this._degree,this._knots,this._controlPoints,this._weights)}point(t){return this.evaluate(t).point}evaluate(t){const n=this._controlPoints.map(e=>[e.x,e.y,e.z]);return Rn(t,this._degree,this._knots,n,this._weights)}signedPlanarCurvatureAt(t){const n=this.evaluate(t);return kn(n.deriv1,n.deriv2)}getOffsetSamplePath2d(t,n=512){const e=Math.abs(t),{start:s,end:i}=this.getParameterRange(),r=this.length(),h=Math.max(64,Math.ceil(r/Math.max(e*.2,1e-6)));let a=ss(s,i,Math.min(h,n));for(let u=0;u<8&&a.length<n;u++){const d=[];for(let m=0;m<a.length-1;m++){const g=a[m],y=a[m+1],x=(g+y)/2,f=Math.max(Math.abs(this.signedPlanarCurvatureAt(g)),Math.abs(this.signedPlanarCurvatureAt(y)),Math.abs(this.signedPlanarCurvatureAt(x)));e*f>.85&&d.push(x)}if(d.length===0)break;if(a=is(a,d),a.length>n){a=a.slice(0,n);break}}const c=[],l=[];return a.forEach(u=>{const d=this.evaluate(u);c.push(new P(d.point[0],d.point[1]));const m=d.deriv1[0],g=d.deriv1[1],y=Math.hypot(m,g);l.push(y>1e-10?new P(m/y,g/y):new P(1,0))}),{points:c,tangents:l}}length(){const t=this._controlPoints.map(n=>[n.x,n.y,n.z]);return Nn(this._degree,this._knots,t,this._weights)}static byKnotsControlPointsWeights(t,n,e,s){return new j(t,n,e,s)}static byPoints(t,n,e="Uniform",s,i){const r=Gt(t,n,e,s,i),h=r.controlPoints.map(a=>({x:a[0],y:a[1],z:a[2]}));return new j(n,r.knots,h,r.weights)}getParameterRange(){const t=this._knots[this._degree],n=this._knots[this._knots.length-this._degree-1];return{start:t,end:n}}getPoints(t){const n=[],{start:e,end:s}=this.getParameterRange();for(let i=0;i<=t;i++){const r=e+(s-e)*(i/t);n.push(this.point(r))}return n}isClosed(t=1e-6){const{start:n,end:e}=this.getParameterRange(),s=this.point(n),i=this.point(e),r=s[0]-i[0],h=s[1]-i[1],a=s[2]-i[2];return Math.sqrt(r*r+h*h+a*a)<t}static createFitPointsForClosedCurve(t){if(t.length<4)throw new Error("At least 4 points are required for a closed NURBS curve");const n=new Et(t,!0,"centripetal"),e=Math.max(50,t.length*2);return n.getPoints(e)}nearestPoint(t,n=64){const{start:e,end:s}=this.getParameterRange();let i=this.point(e),r=ne(t,i);for(let h=0;h<=n;h++){const a=e+(s-e)*h/n,c=this.point(a),l=ne(t,c);l<r&&(r=l,i=c)}return{x:i[0],y:i[1],z:i[2]??0}}static createClosedCurve(t,n,e="Chord"){const i=this.createFitPointsForClosedCurve(t).map(r=>[r.x,r.y,r.z]);return j.byPoints(i,n,e)}}function ss(o,t,n){if(n<2)return[o,t];const e=[];for(let s=0;s<n;s++)e.push(s===n-1?t:o+(t-o)*s/(n-1));return e}function is(o,t){const n=[...o,...t].sort((s,i)=>s-i),e=[];return n.forEach(s=>{const i=e[e.length-1];(i===void 0||Math.abs(i-s)>1e-10)&&e.push(s)}),e}function ee(o){if(!o)return!1;const t=o.x??0,n=o.y??0,e=o.z??0;return t*t+n*n+e*e>1e-20}function rs(o,t,n){let e=o??0;return e<1&&n>0&&t>0&&(e=n-t-1),e<1&&(e=3),e=Math.min(e,t-1),Math.max(1,e)}function os(o,t,n){let e=o??0;e<1&&(e=3);const s=t+n-1;return e=Math.min(e,s),Math.max(1,e)}function hs(o,t){if(!(!o||o.length!==t))return o}class D extends ft{constructor(t,n,e,s,i,r){super();const h=arguments.length;if(this._degree=3,this._closed=!1,Array.isArray(n)){if(h<2||h>5)throw V.AcCmErrors.ILLEGAL_PARAMETERS;this._controlPoints=t;let a,c=3,l=!1;if(h>=3&&(Array.isArray(e)?(a=e,h>=4&&(c=s||3),h>=5&&(l=i)):e!==void 0&&(c=e||3,h>=4&&(l=s))),e===void 0&&h>=4&&(c=s||3,h>=5&&(l=i)),this._degree=c,this._closed=l,this._controlPoints.length<this._degree+1)throw V.AcCmErrors.ILLEGAL_PARAMETERS;this._nurbsCurve=j.byKnotsControlPointsWeights(this._degree,n,this._controlPoints,a)}else{if(h<2||h>6)throw V.AcCmErrors.ILLEGAL_PARAMETERS;this._fitPoints=t,this._knotParameterization=n,h>=3&&(this._degree=e||3);const a=typeof s=="boolean";h>=4&&a&&(this._closed=s),a?(h>=5&&(this._startTangent=i),h>=6&&(this._endTangent=r)):(h>=4&&(this._startTangent=s),h>=5&&(this._endTangent=i)),this._closed&&(this._startTangent=void 0,this._endTangent=void 0);const c=(this._startTangent?1:0)+(this._endTangent?1:0);if(this._fitPoints.length+c<this._degree+1)throw V.AcCmErrors.ILLEGAL_PARAMETERS;if(this._closed)this._nurbsCurve=j.createClosedCurve(this._fitPoints,this._degree,this._knotParameterization);else{const l=this.toNurbsPoints(this._fitPoints);this._nurbsCurve=j.byPoints(l,this._degree,this._knotParameterization,this._startTangent?this.toNurbsPoint(this._startTangent):void 0,this._endTangent?this.toNurbsPoint(this._endTangent):void 0)}this._controlPoints=this.toGePoints(this._nurbsCurve.controlPoints().map(l=>[l.x,l.y,l.z||0]))}}buildCurve(){if(this._fitPoints&&this._knotParameterization){if(this._closed){const t=j.createFitPointsForClosedCurve(this._fitPoints),n=this.toNurbsPoints(t);this._nurbsCurve=j.byPoints(n,this._degree,this._knotParameterization)}else{const t=this.toNurbsPoints(this._fitPoints);this._nurbsCurve=j.byPoints(t,this._degree,this._knotParameterization,this._startTangent?this.toNurbsPoint(this._startTangent):void 0,this._endTangent?this.toNurbsPoint(this._endTangent):void 0)}this._controlPoints=this.toGePoints(this._nurbsCurve.controlPoints().map(t=>[t.x,t.y,t.z||0]))}else if(this._controlPoints)if(this._closed){const t=j.createFitPointsForClosedCurve(this._controlPoints),n=this.toNurbsPoints(t);this._nurbsCurve=j.byPoints(n,this._degree,this._knotParameterization),this._controlPoints=this.toGePoints(this._nurbsCurve.controlPoints().map(e=>[e.x,e.y,e.z||0]))}else{const t=this._nurbsCurve.knots(),n=this._nurbsCurve.weights();this._nurbsCurve=j.byKnotsControlPointsWeights(this._degree,t,this._controlPoints,n)}}setClosed(t){this._closed!==t&&(this._closed=t,this._boundingBoxNeedsUpdate=!0,this.buildCurve())}get degree(){return this._degree}get knotParameterization(){return this._knotParameterization}get controlPoints(){return this._controlPoints.map(U.point2dToPoint3d)}get fitPoints(){var t;return(t=this._fitPoints)==null?void 0:t.map(U.point2dToPoint3d)}get knots(){return[...this._nurbsCurve.knots()]}get weights(){return[...this._nurbsCurve.weights()]}get startPoint(){const t=this._nurbsCurve.knots(),n=this._nurbsCurve.degree(),e=t[n],s=this._nurbsCurve.point(e);return new M(s[0],s[1],s[2])}get endPoint(){const t=this._nurbsCurve.knots(),n=this._nurbsCurve.degree(),e=t[t.length-n-1],s=this._nurbsCurve.point(e);return new M(s[0],s[1],s[2])}get length(){return this._nurbsCurve.length()}nearestPoint(t,n=64){const e=this._nurbsCurve.nearestPoint(t,n);return new M(e.x,e.y,e.z||0)}evaluateAt(t){const n=this._nurbsCurve.point(t);return new M(n[0],n[1],n[2])}getFitPointAt(t){if(!this._fitPoints)throw new Error("No fit points in this spline");const n=this._fitPoints.length,e=t<0||t>=n?n-1:t,s=this._fitPoints[e];return U.point2dToPoint3d(s)}getControlPointAt(t){const n=this._controlPoints.length,e=t<0||t>=n?n-1:t;return this._controlPoints[e]}get isFitPointSpline(){return!!(this._fitPoints&&this._fitPoints.length>0&&this._knotParameterization)}get isControlPointSpline(){return!this.isFitPointSpline}getGripPoints(){return this.isFitPointSpline?this._fitPoints.map(t=>new M(t.x,t.y,t.z??0)):this._controlPoints.map(t=>new M(t.x,t.y,t.z??0))}moveGripPointsAt(t,n){return this.isFitPointSpline?(this.moveFitPointsAt(t,n),this):(this.moveControlPointsAt(t,n),this)}moveFitPointsAt(t,n){if(this._fitPoints){for(const e of t){if(!Number.isInteger(e)||e<0)continue;const s=this._fitPoints[e];s&&U.applyOffsetToPoint3d(s,n)}this._boundingBoxNeedsUpdate=!0,this.buildCurve()}}moveControlPointsAt(t,n){for(const e of t){if(!Number.isInteger(e)||e<0)continue;const s=this.getControlPointAt(e);s&&U.applyOffsetToPoint3d(s,n)}this.rebuildAfterControlPointMutation()}rebuildAfterControlPointMutation(){const t=this._nurbsCurve.knots(),n=this._nurbsCurve.weights();this.isFitPointSpline&&(this._fitPoints=void 0,this._knotParameterization=void 0,this._startTangent=void 0,this._endTangent=void 0),this._nurbsCurve=j.byKnotsControlPointsWeights(this._degree,t,this._controlPoints,n.length>0?n:void 0),this._boundingBoxNeedsUpdate=!0}getOffsetSamplePath2d(t){return this._nurbsCurve.getOffsetSamplePath2d(t)}getPoints(t=100){const n=this._nurbsCurve,e=[],s=n.knots(),i=this._nurbsCurve.degree(),r=s[i],h=s[s.length-i-1],a=(h-r)/(t-1);for(let c=0;c<t;c++){const l=c===t-1?h:r+c*a,u=n.point(l);e.push(new M(u[0],u[1],u[2]))}return e}getCurvePoints(t,n){const e=[],s=t.knots(),i=t.degree(),r=s[i],a=(s[s.length-i-1]-r)/(n-1);for(let c=0;c<n;c++){const l=r+c*a;e.push(t.point(l))}return e}calculateBoundingBox(){const t=this.getPoints(100);return new W().setFromPoints(t)}get closed(){return this._closed}set closed(t){this.setClosed(t)}get area(){if(!this._closed)return 0;const t=this.getPoints(128);return Fn(t)}transform(t){if(this._fitPoints&&this._knotParameterization)this._fitPoints=this._fitPoints.map(n=>new M(n).applyMatrix4(t)),this._startTangent&&(this._startTangent=new M(this._startTangent).transformDirection(t)),this._endTangent&&(this._endTangent=new M(this._endTangent).transformDirection(t)),this.buildCurve();else{const n=this._nurbsCurve.knots(),e=this._nurbsCurve.weights();this._controlPoints=this._controlPoints.map(s=>new M(s).applyMatrix4(t)),this._nurbsCurve=j.byKnotsControlPointsWeights(this._degree,n,this._controlPoints,e.length>0?e:void 0)}return this._boundingBoxNeedsUpdate=!0,this}clone(){return this._fitPoints&&this._knotParameterization?new D(this._fitPoints.map(U.point2dToPoint3d),this._knotParameterization,this._degree,this._closed,this._startTangent?U.point2dToPoint3d(this._startTangent):void 0,this._endTangent?U.point2dToPoint3d(this._endTangent):void 0):new D(this._controlPoints.map(U.point2dToPoint3d),this._nurbsCurve.knots(),this._nurbsCurve.weights(),this._degree,this._closed)}toNurbsPoints(t){const n=new Array(t.length);return t.forEach((e,s)=>{n[s]=[e.x,e.y,e.z||0]}),n}toGePoints(t){const n=new Array(t.length);return t.forEach((e,s)=>{n[s]={x:e[0],y:e[1],z:e[2]}}),n}toNurbsPoint(t){return[t.x,t.y,t.z||0]}static createClosedSpline(t,n="Uniform",e=3){if(t.length<e+1)throw new Error(`At least ${e+1} points are required for a degree ${e} closed spline`);return new D(t,n,e,!0)}static fromControlPoints(t,n,e,s,i){if(t.length<2||n.length<2)return null;const r=rs(s,t.length,n.length);if(t.length<r+1)return null;try{return new D(t,n,hs(e,t.length),r,i)}catch{return null}}static fromFitPoints(t,n,e,s,i,r){if(t.length<2)return null;const h=ee(i),a=ee(r),c=(h?1:0)+(a?1:0),l=os(e,t.length,c);if(t.length+c<l+1)return null;try{return h||a?new D(t,n,l,s,h?i:void 0,a?r:void 0):new D(t,n,l,s)}catch{return null}}static fromDwgSplineEdge(t){if(t.numberOfControlPoints>0&&t.numberOfKnots>0){const n=t.controlPoints.map(U.point2dToPoint3d);let e=!0;const s=t.controlPoints.map(i=>(i.weight==null&&(e=!1),i.weight||1));return D.fromControlPoints(n,t.knots,e?s:void 0,t.degree,!1)}if(t.numberOfFitData>0){const n=t.fitDatum.map(U.point2dToPoint3d);return D.fromFitPoints(n,"Uniform",t.degree,!1,t.startTangent?U.point2dToPoint3d(t.startTangent):void 0,t.endTangent?U.point2dToPoint3d(t.endTangent):void 0)}return null}}class Y extends at{constructor(t=[]){super(),this._curves=t}get curves(){return this._curves}static buildFromEdges(t,n=.001){if(t.length===0)return[];const e=[...t],s=[],i=n*n,r=(h,a)=>{const c=h.x-a.x,l=h.y-a.y;return c*c+l*l<=i};for(;e.length>0;){const h=[],a=e.shift();h.push(a);const c=Y.getEdgeStartPoint(a);let l=Y.getEdgeEndPoint(a);if(!r(c,l))for(;e.length>0;){const u=Y.findConnectingEdge(e,l,i);if(u.index<0)break;let d=e.splice(u.index,1)[0];if(u.reverse&&(d=Y.reverseEdge(d)),h.push(d),l=Y.getEdgeEndPoint(d),r(l,c))break}s.push(new Y(h))}return s}add(t){this._curves.push(t),this._boundingBoxNeedsUpdate=!0}get numberOfEdges(){return this._curves.length}get startPoint(){if(this._curves.length>0){const t=this._curves[0].startPoint;return new P(t.x,t.y)}throw new Error("Start point does not exist in an empty loop.")}get endPoint(){return this.startPoint}get length(){let t=0;return this._curves.forEach(n=>{t+=n.length}),t}calculateBoundingBox(){const t=this.getPoints(100),n=new X;return n.setFromPoints(t),n}transform(t){const n=new J().set(t.elements[0],t.elements[3],0,t.elements[6],t.elements[1],t.elements[4],0,t.elements[7],0,0,1,0,0,0,0,1);return this._curves.forEach(e=>{e instanceof D?e.transform(n):e.transform(t)}),this._boundingBoxNeedsUpdate=!0,this}clone(){return new Y(this._curves.map(t=>t.clone()))}get closed(){return!0}getPoints(t){const n=[];return this.curves.forEach(e=>{e.getPoints(t).forEach(s=>{n.push(new P(s.x,s.y))})}),n}static findConnectingEdge(t,n,e){let s=-1,i=!1,r=Number.POSITIVE_INFINITY;for(let h=0;h<t.length;h++){const a=t[h],c=Y.getEdgeStartPoint(a),l=Y.getEdgeEndPoint(a),u=n.x-c.x,d=n.y-c.y,m=u*u+d*d;m<r&&(r=m,s=h,i=!1);const g=n.x-l.x,y=n.y-l.y,x=g*g+y*y;x<r&&(r=x,s=h,i=!0)}return r>e?{index:-1,reverse:!1}:{index:s,reverse:i}}static getEdgeStartPoint(t){const n=t.startPoint;return new P(n.x,n.y)}static getEdgeEndPoint(t){const n=t.endPoint;return new P(n.x,n.y)}static reverseEdge(t){return t instanceof _t?new _t(t.endPoint,t.startPoint):t instanceof K?new K(t.center,t.radius,t.endAngle,t.startAngle,!t.clockwise):t instanceof rt?new rt(t.center,t.majorAxisRadius,t.minorAxisRadius,t.endAngle,t.startAngle,!t.clockwise,t.rotation):t instanceof D?Y.reverseSplineEdge(t):t}static reverseSplineEdge(t){const n=[...t.controlPoints].reverse(),e=t.knots,s=e[0],i=e[e.length-1],r=e.map(c=>s+i-c).reverse(),h=t.weights,a=h.length>0?[...h].reverse():void 0;return new D(n,r,a,t.degree,t.closed)}}_.AcGeArea2d=en,_.AcGeBox2d=X,_.AcGeBox3d=W,_.AcGeCatmullRomCurve3d=Et,_.AcGeCircArc2d=K,_.AcGeCircArc3d=lt,_.AcGeCurve2d=at,_.AcGeEllipseArc2d=rt,_.AcGeEllipseArc3d=ut,_.AcGeEuler=Yt,_.AcGeGeometryUtil=U,_.AcGeLine2d=_t,_.AcGeLine3d=ct,_.AcGeLoop2d=Y,_.AcGeMathUtil=w,_.AcGeMatrix2d=ot,_.AcGeMatrix3d=J,_.AcGeNurbsCurve=j,_.AcGePlane=yt,_.AcGePoint2d=P,_.AcGePoint3d=M,_.AcGePolyline2d=st,_.AcGeQuaternion=gt,_.AcGeShape2d=Jt,_.AcGeSpline3d=D,_.AcGeTol=B,_.AcGeVector2d=R,_.AcGeVector3d=A,_.DEFAULT_TOL=wt,_.DEG2RAD=qt,_.FLOAT_TOL=$,_.ORIGIN_POINT_2D=se,_.ORIGIN_POINT_3D=Ot,_.RAD2DEG=vt,_.TAU=I,_.acGeClosedPolygonArea2d=Un,_.acGeClosedPolygonArea3d=Fn,_.acGePolygonArea2d=Vn,_.acGePolygonArea3d=Ln,_.acGeSignedPolygonArea2d=$t,_.basisFunction=et,_.calculateCurveLength=Nn,_.ceilPowerOfTwo=Pn,_.clamp=Q,_.computeParameterValues=Tn,_.damp=cn,_.degToRad=fn,_.euclideanModulo=Vt,_.evaluateNurbsDerivatives=Rn,_.evaluateNurbsPoint=xt,_.floorPowerOfTwo=pn,_.generateAveragedKnots=Bn,_.generateChordKnots=me,_.generateSqrtChordKnots=ge,_.generateUUID=on,_.generateUniformKnots=de,_.getOcsAngle=pe,_.getOcsReferenceVector=Ae,_.intPartLength=Ut,_.interpolateControlPoints=xe,_.interpolateNurbsCurve=Gt,_.inverseLerp=an,_.isBetween=wn,_.isBetweenAngle=Mn,_.isPowerOfTwo=An,_.lerp=Lt,_.mapLinear=hn,_.normalizeAngle=mt,_.offsetPointByDirectionInXY=Ge,_.offsetSmoothedSampledPath=Ke,_.offsetVertexPath=We,_.pingpong=ln,_.radToDeg=_n,_.randFloat=gn,_.randFloatSpread=yn,_.randInt=mn,_.relativeEps=zn,_.seededRandom=xn,_.signedPlanarCurvature=kn,_.smootherstep=dn,_.smoothstep=un,_.transformOcsPointToWcs=Pe,_.transformWcsPointToOcs=Qt,Object.defineProperty(_,Symbol.toStringTag,{value:"Module"})});
1
+ (function(_,V){typeof exports=="object"&&typeof module<"u"?V(exports,require("@mlightcad/common")):typeof define=="function"&&define.amd?define(["exports","@mlightcad/common"],V):(_=typeof globalThis<"u"?globalThis:_||self,V(_["geometry-engine"]={},_.common))})(this,function(_,V){"use strict";const L=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];let rn=1234567;const vt=Math.PI/180,qt=180/Math.PI;function on(){const o=Math.random()*4294967295|0,t=Math.random()*4294967295|0,n=Math.random()*4294967295|0,e=Math.random()*4294967295|0;return(L[o&255]+L[o>>8&255]+L[o>>16&255]+L[o>>24&255]+"-"+L[t&255]+L[t>>8&255]+"-"+L[t>>16&15|64]+L[t>>24&255]+"-"+L[n&63|128]+L[n>>8&255]+"-"+L[n>>16&255]+L[n>>24&255]+L[e&255]+L[e>>8&255]+L[e>>16&255]+L[e>>24&255]).toLowerCase()}function Q(o,t,n){return Math.max(t,Math.min(n,o))}function Vt(o,t){return(o%t+t)%t}function hn(o,t,n,e,s){return e+(o-t)*(s-e)/(n-t)}function an(o,t,n){return o!==t?(n-o)/(t-o):0}function Lt(o,t,n){return(1-n)*o+n*t}function cn(o,t,n,e){return Lt(o,t,1-Math.exp(-n*e))}function ln(o,t=1){return t-Math.abs(Vt(o,t*2)-t)}function un(o,t,n){return o<=t?0:o>=n?1:(o=(o-t)/(n-t),o*o*(3-2*o))}function dn(o,t,n){return o<=t?0:o>=n?1:(o=(o-t)/(n-t),o*o*o*(o*(o*6-15)+10))}function mn(o,t){return o+Math.floor(Math.random()*(t-o+1))}function gn(o,t){return o+Math.random()*(t-o)}function yn(o){return o*(.5-Math.random())}function xn(o){o!==void 0&&(rn=o);let t=rn+=1831565813;return t=Math.imul(t^t>>>15,t|1),t^=t+Math.imul(t^t>>>7,t|61),((t^t>>>14)>>>0)/4294967296}function fn(o){return o*vt}function _n(o){return o*qt}function An(o){return(o&o-1)===0&&o!==0}function Pn(o){return Math.pow(2,Math.ceil(Math.log(o)/Math.LN2))}function pn(o){return Math.pow(2,Math.floor(Math.log(o)/Math.LN2))}function mt(o){const t=Math.PI*2;return(o%t+t)%t}function wn(o,t,n){return o>t&&o<n||o>n&&o<t}function Mn(o,t,n,e=!1){return o=mt(o),t=mt(t),n=mt(n),e?t>n?o<=t&&o>=n:o<=t||o>=n:t<n?o>=t&&o<=n:o>=t||o<=n}function Ut(o){return o=Math.abs(o),o<1?0:Math.ceil(Math.log10(Math.abs(o)+1))}function zn(o,t=1e-7){const n=Ut(o);return Math.max(Math.pow(10,n)*t,t)}const w={DEG2RAD:vt,RAD2DEG:qt,generateUUID:on,clamp:Q,euclideanModulo:Vt,mapLinear:hn,inverseLerp:an,lerp:Lt,damp:cn,pingpong:ln,smoothstep:un,smootherstep:dn,randInt:mn,randFloat:gn,randFloatSpread:yn,seededRandom:xn,degToRad:fn,radToDeg:_n,isPowerOfTwo:An,ceilPowerOfTwo:Pn,floorPowerOfTwo:pn,normalizeAngle:mt,isBetween:wn,isBetweenAngle:Mn,intPartLength:Ut,relativeEps:zn},At=class At{constructor(t,n){this.x=0,this.y=0;const e=+(t!==void 0)+ +(n!==void 0);if(e!==0){if(e===1&&t instanceof Array){this.x=t[0],this.y=t[1];return}if(e===1){const{x:s,y:i}=t;this.x=s,this.y=i;return}if(e===2){this.x=t,this.y=n;return}throw V.AcCmErrors.ILLEGAL_PARAMETERS}}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,n){return this.x=t,this.y=n,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,n){switch(t){case 0:this.x=n;break;case 1:this.y=n;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new At(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t){return this.x+=t.x,this.y+=t.y,this}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,n){return this.x=t.x+n.x,this.y=t.y+n.y,this}addScaledVector(t,n){return this.x+=t.x*n,this.y+=t.y*n,this}sub(t){return this.x-=t.x,this.y-=t.y,this}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,n){return this.x=t.x-n.x,this.y=t.y-n.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix2d(t){const n=this.x,e=this.y,s=t.elements;return this.x=s[0]*n+s[3]*e+s[6],this.y=s[1]*n+s[4]*e+s[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,n){return this.x=Math.max(t.x,Math.min(n.x,this.x)),this.y=Math.max(t.y,Math.min(n.y,this.y)),this}clampScalar(t,n){return this.x=Math.max(t,Math.min(n,this.x)),this.y=Math.max(t,Math.min(n,this.y)),this}clampLength(t,n){const e=this.length();return this.divideScalar(e||1).multiplyScalar(Math.max(t,Math.min(n,e)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(t){const n=Math.sqrt(this.lengthSq()*t.lengthSq());if(n===0)return Math.PI/2;const e=this.dot(t)/n;return Math.acos(Math.max(-1,Math.min(1,e)))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const n=this.x-t.x,e=this.y-t.y;return n*n+e*e}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,n){return this.x+=(t.x-this.x)*n,this.y+=(t.y-this.y)*n,this}lerpVectors(t,n,e){return this.x=t.x+(n.x-t.x)*e,this.y=t.y+(n.y-t.y)*e,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,n=0){return this.x=t[n],this.y=t[n+1],this}toArray(t=[],n=0){return t[n]=this.x,t[n+1]=this.y,t}rotateAround(t,n){const e=Math.cos(n),s=Math.sin(n),i=this.x-t.x,r=this.y-t.y;return this.x=i*e-r*s+t.x,this.y=i*s+r*e+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}relativeEps(t=1e-7){return Math.min(w.relativeEps(this.x,t),w.relativeEps(this.y,t))}*[Symbol.iterator](){yield this.x,yield this.y}};At.EMPTY=Object.freeze(new At(0,0));let R=At;const Pt=class Pt{constructor(t,n,e,s,i,r,h,a,c){this.elements=[1,0,0,0,1,0,0,0,1],t!=null&&n!=null&&e!=null&&s!=null&&i!=null&&r!=null&&h!=null&&a!=null&&c!=null&&this.set(t,n,e,s,i,r,h,a,c)}set(t,n,e,s,i,r,h,a,c){const l=this.elements;return l[0]=t,l[1]=s,l[2]=h,l[3]=n,l[4]=i,l[5]=a,l[6]=e,l[7]=r,l[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const n=this.elements,e=t.elements;return n[0]=e[0],n[1]=e[1],n[2]=e[2],n[3]=e[3],n[4]=e[4],n[5]=e[5],n[6]=e[6],n[7]=e[7],n[8]=e[8],this}extractBasis(t,n,e){return t.setFromMatrix3Column(this,0),n.setFromMatrix3Column(this,1),e.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const n=t.elements;return this.set(n[0],n[4],n[8],n[1],n[5],n[9],n[2],n[6],n[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,n){const e=t.elements,s=n.elements,i=this.elements,r=e[0],h=e[3],a=e[6],c=e[1],l=e[4],u=e[7],d=e[2],m=e[5],g=e[8],y=s[0],x=s[3],f=s[6],b=s[1],p=s[4],C=s[7],S=s[2],T=s[5],z=s[8];return i[0]=r*y+h*b+a*S,i[3]=r*x+h*p+a*T,i[6]=r*f+h*C+a*z,i[1]=c*y+l*b+u*S,i[4]=c*x+l*p+u*T,i[7]=c*f+l*C+u*z,i[2]=d*y+m*b+g*S,i[5]=d*x+m*p+g*T,i[8]=d*f+m*C+g*z,this}multiplyScalar(t){const n=this.elements;return n[0]*=t,n[3]*=t,n[6]*=t,n[1]*=t,n[4]*=t,n[7]*=t,n[2]*=t,n[5]*=t,n[8]*=t,this}determinant(){const t=this.elements,n=t[0],e=t[1],s=t[2],i=t[3],r=t[4],h=t[5],a=t[6],c=t[7],l=t[8];return n*r*l-n*h*c-e*i*l+e*h*a+s*i*c-s*r*a}invert(){const t=this.elements,n=t[0],e=t[1],s=t[2],i=t[3],r=t[4],h=t[5],a=t[6],c=t[7],l=t[8],u=l*r-h*c,d=h*a-l*i,m=c*i-r*a,g=n*u+e*d+s*m;if(g===0)return this.set(0,0,0,0,0,0,0,0,0);const y=1/g;return t[0]=u*y,t[1]=(s*c-l*e)*y,t[2]=(h*e-s*r)*y,t[3]=d*y,t[4]=(l*n-s*a)*y,t[5]=(s*i-h*n)*y,t[6]=m*y,t[7]=(e*a-c*n)*y,t[8]=(r*n-e*i)*y,this}transpose(){let t;const n=this.elements;return t=n[1],n[1]=n[3],n[3]=t,t=n[2],n[2]=n[6],n[6]=t,t=n[5],n[5]=n[7],n[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const n=this.elements;return t.elements[0]=n[0],t.elements[1]=n[3],t.elements[2]=n[6],t.elements[3]=n[1],t.elements[4]=n[4],t.elements[5]=n[7],t.elements[6]=n[2],t.elements[7]=n[5],t.elements[8]=n[8],this}setUvTransform(t,n,e,s,i,r,h){const a=Math.cos(i),c=Math.sin(i);return this.set(e*a,e*c,-e*(a*r+c*h)+r+t,-s*c,s*a,-s*(-c*r+a*h)+h+n,0,0,1),this}scale(t,n){return this.premultiply(Ft.makeScale(t,n)),this}rotate(t){return this.premultiply(Ft.makeRotation(-t)),this}translate(t,n){return this.premultiply(Ft.makeTranslation(t,n)),this}makeTranslation(t,n){return t instanceof R?this.set(1,0,t.x,0,1,t.y,0,0,1):this.set(1,0,t,0,1,n,0,0,1),this}makeRotation(t){const n=Math.cos(t),e=Math.sin(t);return this.set(n,-e,0,e,n,0,0,0,1),this}makeScale(t,n){return this.set(t,0,0,0,n,0,0,0,1),this}equals(t){const n=this.elements,e=t.elements;for(let s=0;s<9;s++)if(n[s]!==e[s])return!1;return!0}fromArray(t,n=0){for(let e=0;e<9;e++)this.elements[e]=t[e+n];return this}toArray(t=[],n=0){const e=this.elements;return t[n]=e[0],t[n+1]=e[1],t[n+2]=e[2],t[n+3]=e[3],t[n+4]=e[4],t[n+5]=e[5],t[n+6]=e[6],t[n+7]=e[7],t[n+8]=e[8],t}clone(){return new Pt().fromArray(this.elements)}};Pt.IDENTITY=Object.freeze(new Pt);let ot=Pt;const Ft=new ot,$=1e-6,I=2*Math.PI,se={x:0,y:0},Ot={x:0,y:0,z:0};class B{constructor(){this.equalPointTol=$,this.equalVectorTol=$}clone(){const t=new B;return t.equalPointTol=this.equalPointTol,t.equalVectorTol=this.equalVectorTol,t}equalPoint2d(t,n){return new R(t).sub(n).length()<this.equalPointTol}equalPoint3d(t,n){return new A(t).sub(n).length()<this.equalPointTol}static equalToZero(t,n=$){return t<n&&t>-n}static equal(t,n,e=$){return Math.abs(t-n)<e}static great(t,n,e=$){return t-n>e}static less(t,n,e=$){return t-n<e}static isPositive(t,n=$){return t>n}static isNonPositive(t,n=$){return t<=n}}const wt=new B;class gt{constructor(t=0,n=0,e=0,s=1){this._x=t,this._y=n,this._z=e,this._w=s}static slerpFlat(t,n,e,s,i,r,h){let a=e[s+0],c=e[s+1],l=e[s+2],u=e[s+3];const d=i[r+0],m=i[r+1],g=i[r+2],y=i[r+3];if(h===0){t[n+0]=a,t[n+1]=c,t[n+2]=l,t[n+3]=u;return}if(h===1){t[n+0]=d,t[n+1]=m,t[n+2]=g,t[n+3]=y;return}if(u!==y||a!==d||c!==m||l!==g){let x=1-h;const f=a*d+c*m+l*g+u*y,b=f>=0?1:-1,p=1-f*f;if(p>Number.EPSILON){const S=Math.sqrt(p),T=Math.atan2(S,f*b);x=Math.sin(x*T)/S,h=Math.sin(h*T)/S}const C=h*b;if(a=a*x+d*C,c=c*x+m*C,l=l*x+g*C,u=u*x+y*C,x===1-h){const S=1/Math.sqrt(a*a+c*c+l*l+u*u);a*=S,c*=S,l*=S,u*=S}}t[n]=a,t[n+1]=c,t[n+2]=l,t[n+3]=u}static multiplyQuaternionsFlat(t,n,e,s,i,r){const h=e[s],a=e[s+1],c=e[s+2],l=e[s+3],u=i[r],d=i[r+1],m=i[r+2],g=i[r+3];return t[n]=h*g+l*u+a*m-c*d,t[n+1]=a*g+l*d+c*u-h*m,t[n+2]=c*g+l*m+h*d-a*u,t[n+3]=l*g-h*u-a*d-c*m,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,n,e,s){return this._x=t,this._y=n,this._z=e,this._w=s,this._onChangeCallback(),this}clone(){return new gt(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,n=!0){const e=t.x,s=t.y,i=t.z,r=t.order,h=Math.cos,a=Math.sin,c=h(e/2),l=h(s/2),u=h(i/2),d=a(e/2),m=a(s/2),g=a(i/2);switch(r){case"XYZ":this._x=d*l*u+c*m*g,this._y=c*m*u-d*l*g,this._z=c*l*g+d*m*u,this._w=c*l*u-d*m*g;break;case"YXZ":this._x=d*l*u+c*m*g,this._y=c*m*u-d*l*g,this._z=c*l*g-d*m*u,this._w=c*l*u+d*m*g;break;case"ZXY":this._x=d*l*u-c*m*g,this._y=c*m*u+d*l*g,this._z=c*l*g+d*m*u,this._w=c*l*u-d*m*g;break;case"ZYX":this._x=d*l*u-c*m*g,this._y=c*m*u+d*l*g,this._z=c*l*g-d*m*u,this._w=c*l*u+d*m*g;break;case"YZX":this._x=d*l*u+c*m*g,this._y=c*m*u+d*l*g,this._z=c*l*g-d*m*u,this._w=c*l*u-d*m*g;break;case"XZY":this._x=d*l*u-c*m*g,this._y=c*m*u-d*l*g,this._z=c*l*g+d*m*u,this._w=c*l*u+d*m*g;break}return n===!0&&this._onChangeCallback(),this}setFromAxisAngle(t,n){const e=n/2,s=Math.sin(e);return this._x=t.x*s,this._y=t.y*s,this._z=t.z*s,this._w=Math.cos(e),this._onChangeCallback(),this}setFromRotationMatrix(t){const n=t.elements,e=n[0],s=n[4],i=n[8],r=n[1],h=n[5],a=n[9],c=n[2],l=n[6],u=n[10],d=e+h+u;if(d>0){const m=.5/Math.sqrt(d+1);this._w=.25/m,this._x=(l-a)*m,this._y=(i-c)*m,this._z=(r-s)*m}else if(e>h&&e>u){const m=2*Math.sqrt(1+e-h-u);this._w=(l-a)/m,this._x=.25*m,this._y=(s+r)/m,this._z=(i+c)/m}else if(h>u){const m=2*Math.sqrt(1+h-e-u);this._w=(i-c)/m,this._x=(s+r)/m,this._y=.25*m,this._z=(a+l)/m}else{const m=2*Math.sqrt(1+u-e-h);this._w=(r-s)/m,this._x=(i+c)/m,this._y=(a+l)/m,this._z=.25*m}return this._onChangeCallback(),this}setFromUnitVectors(t,n){let e=t.dot(n)+1;return e<Number.EPSILON?(e=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=e):(this._x=0,this._y=-t.z,this._z=t.y,this._w=e)):(this._x=t.y*n.z-t.z*n.y,this._y=t.z*n.x-t.x*n.z,this._z=t.x*n.y-t.y*n.x,this._w=e),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(Q(this.dot(t),-1,1)))}rotateTowards(t,n){const e=this.angleTo(t);if(e===0)return this;const s=Math.min(1,n/e);return this.slerp(t,s),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return t===0?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t){return this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,n){const e=t._x,s=t._y,i=t._z,r=t._w,h=n._x,a=n._y,c=n._z,l=n._w;return this._x=e*l+r*h+s*c-i*a,this._y=s*l+r*a+i*h-e*c,this._z=i*l+r*c+e*a-s*h,this._w=r*l-e*h-s*a-i*c,this._onChangeCallback(),this}slerp(t,n){if(n===0)return this;if(n===1)return this.copy(t);const e=this._x,s=this._y,i=this._z,r=this._w;let h=r*t._w+e*t._x+s*t._y+i*t._z;if(h<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,h=-h):this.copy(t),h>=1)return this._w=r,this._x=e,this._y=s,this._z=i,this;const a=1-h*h;if(a<=Number.EPSILON){const m=1-n;return this._w=m*r+n*this._w,this._x=m*e+n*this._x,this._y=m*s+n*this._y,this._z=m*i+n*this._z,this.normalize(),this}const c=Math.sqrt(a),l=Math.atan2(c,h),u=Math.sin((1-n)*l)/c,d=Math.sin(n*l)/c;return this._w=r*u+this._w*d,this._x=e*u+this._x*d,this._y=s*u+this._y*d,this._z=i*u+this._z*d,this._onChangeCallback(),this}slerpQuaternions(t,n,e){return this.copy(t).slerp(n,e)}random(){const t=2*Math.PI*Math.random(),n=2*Math.PI*Math.random(),e=Math.random(),s=Math.sqrt(1-e),i=Math.sqrt(e);return this.set(s*Math.sin(t),s*Math.cos(t),i*Math.sin(n),i*Math.cos(n))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,n=0){return this._x=t[n],this._y=t[n+1],this._z=t[n+2],this._w=t[n+3],this._onChangeCallback(),this}toArray(t=[],n=0){return t[n]=this._x,t[n+1]=this._y,t[n+2]=this._z,t[n+3]=this._w,t}toJSON(){return this.toArray()}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}const v=class v{constructor(t,n,e){this.x=0,this.y=0,this.z=0;const s=+(t!==void 0)+ +(n!==void 0)+ +(e!==void 0);if(s!==0){if(s===1&&t instanceof Array){this.x=t[0],this.y=t[1],this.z=t[2];return}if(s===1){const{x:i,y:r,z:h}=t;this.x=i,this.y=r,this.z=h||0;return}if(s===3){this.x=t,this.y=n,this.z=e;return}throw V.AcCmErrors.ILLEGAL_PARAMETERS}}set(t,n,e){return e===void 0&&(e=this.z),this.x=t,this.y=n,this.z=e,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,n){switch(t){case 0:this.x=n;break;case 1:this.y=n;break;case 2:this.z=n;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new v(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z||0,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z||0,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,n){return this.x=t.x+n.x,this.y=t.y+n.y,this.z=t.z+n.z,this}addScaledVector(t,n){return this.x+=t.x*n,this.y+=t.y*n,this.z+=t.z*n,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,n){return this.x=t.x-n.x,this.y=t.y-n.y,this.z=t.z-n.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,n){return this.x=t.x*n.x,this.y=t.y*n.y,this.z=t.z*n.z,this}applyEuler(t){return this.applyQuaternion(bn.setFromEuler(t))}applyAxisAngle(t,n){return this.applyQuaternion(bn.setFromAxisAngle(t,n))}applyMatrix3(t){const n=this.x,e=this.y,s=this.z,i=t.elements;return this.x=i[0]*n+i[3]*e+i[6]*s,this.y=i[1]*n+i[4]*e+i[7]*s,this.z=i[2]*n+i[5]*e+i[8]*s,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const n=this.x,e=this.y,s=this.z,i=t.elements,r=1/(i[3]*n+i[7]*e+i[11]*s+i[15]);return this.x=(i[0]*n+i[4]*e+i[8]*s+i[12])*r,this.y=(i[1]*n+i[5]*e+i[9]*s+i[13])*r,this.z=(i[2]*n+i[6]*e+i[10]*s+i[14])*r,this}applyQuaternion(t){const n=this.x,e=this.y,s=this.z,i=t.x,r=t.y,h=t.z,a=t.w,c=2*(r*s-h*e),l=2*(h*n-i*s),u=2*(i*e-r*n);return this.x=n+a*c+r*u-h*l,this.y=e+a*l+h*c-i*u,this.z=s+a*u+i*l-r*c,this}transformDirection(t){const n=this.x,e=this.y,s=this.z,i=t.elements;return this.x=i[0]*n+i[4]*e+i[8]*s,this.y=i[1]*n+i[5]*e+i[9]*s,this.z=i[2]*n+i[6]*e+i[10]*s,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,n){return this.x=Math.max(t.x,Math.min(n.x,this.x)),this.y=Math.max(t.y,Math.min(n.y,this.y)),this.z=Math.max(t.z,Math.min(n.z,this.z)),this}clampScalar(t,n){return this.x=Math.max(t,Math.min(n,this.x)),this.y=Math.max(t,Math.min(n,this.y)),this.z=Math.max(t,Math.min(n,this.z)),this}clampLength(t,n){const e=this.length();return this.divideScalar(e||1).multiplyScalar(Math.max(t,Math.min(n,e)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}isParallelTo(t){const n=this.dot(t),e=this.length(),s=t.length();return Math.abs(n)===e*s}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,n){return this.x+=(t.x-this.x)*n,this.y+=(t.y-this.y)*n,this.z+=(t.z-this.z)*n,this}lerpVectors(t,n,e){return this.x=t.x+(n.x-t.x)*e,this.y=t.y+(n.y-t.y)*e,this.z=t.z+(n.z-t.z)*e,this}cross(t){return this.crossVectors(this,t)}crossVectors(t,n){const e=t.x,s=t.y,i=t.z,r=n.x,h=n.y,a=n.z;return this.x=s*a-i*h,this.y=i*r-e*a,this.z=e*h-s*r,this}projectOnVector(t){const n=t.lengthSq();if(n===0)return this.set(0,0,0);const e=t.dot(this)/n;return this.copy(t).multiplyScalar(e)}projectOnPlane(t){return Dt.copy(this).projectOnVector(t),this.sub(Dt)}reflect(t){return this.sub(Dt.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const n=Math.sqrt(this.lengthSq()*t.lengthSq());if(n===0)return Math.PI/2;const e=this.dot(t)/n;return Math.acos(Math.max(-1,Math.min(1,e)))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const n=this.x-t.x,e=this.y-t.y,s=this.z-t.z;return n*n+e*e+s*s}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromMatrixPosition(t){const n=t.elements;return this.x=n[12],this.y=n[13],this.z=n[14],this}setFromMatrixScale(t){const n=this.setFromMatrixColumn(t,0).length(),e=this.setFromMatrixColumn(t,1).length(),s=this.setFromMatrixColumn(t,2).length();return this.x=n,this.y=e,this.z=s,this}setFromMatrixColumn(t,n){return this.fromArray(t.elements,n*4)}setFromMatrix3Column(t,n){return this.fromArray(t.elements,n*3)}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,n=0){return this.x=t[n],this.y=t[n+1],this.z=t[n+2],this}toArray(t=[],n=0){return t[n]=this.x,t[n+1]=this.y,t[n+2]=this.z,t}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=Math.random()*Math.PI*2,n=Math.random()*2-1,e=Math.sqrt(1-n*n);return this.x=e*Math.cos(t),this.y=n,this.z=e*Math.sin(t),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}};v.ORIGIN=Object.freeze(new v(0,0,0)),v.X_AXIS=Object.freeze(new v(1,0,0)),v.NEGATIVE_X_AXIS=Object.freeze(new v(-1,0,0)),v.Y_AXIS=Object.freeze(new v(0,1,0)),v.NEGATIVE_Y_AXIS=Object.freeze(new v(0,-1,0)),v.Z_AXIS=Object.freeze(new v(0,0,1)),v.NEGATIVE_Z_AXIS=Object.freeze(new v(0,0,-1));let A=v;const Dt=new A,bn=new gt,dt=class dt{static makeTranslation(t,n,e){return new dt().makeTranslation(t,n,e)}constructor(t,n,e,s,i,r,h,a,c,l,u,d,m,g,y,x){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],t!=null&&n!=null&&e!=null&&s!=null&&i!=null&&r!=null&&h!=null&&a!=null&&c!=null&&l!=null&&u!=null&&d!=null&&m!=null&&g!=null&&y!=null&&x!=null&&this.set(t,n,e,s,i,r,h,a,c,l,u,d,m,g,y,x)}set(t,n,e,s,i,r,h,a,c,l,u,d,m,g,y,x){const f=this.elements;return f[0]=t,f[4]=n,f[8]=e,f[12]=s,f[1]=i,f[5]=r,f[9]=h,f[13]=a,f[2]=c,f[6]=l,f[10]=u,f[14]=d,f[3]=m,f[7]=g,f[11]=y,f[15]=x,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new dt().fromArray(this.elements)}copy(t){const n=this.elements,e=t.elements;return n[0]=e[0],n[1]=e[1],n[2]=e[2],n[3]=e[3],n[4]=e[4],n[5]=e[5],n[6]=e[6],n[7]=e[7],n[8]=e[8],n[9]=e[9],n[10]=e[10],n[11]=e[11],n[12]=e[12],n[13]=e[13],n[14]=e[14],n[15]=e[15],this}copyPosition(t){const n=this.elements,e=t.elements;return n[12]=e[12],n[13]=e[13],n[14]=e[14],this}setFromMatrix3(t){const n=t.elements;return this.set(n[0],n[3],n[6],0,n[1],n[4],n[7],0,n[2],n[5],n[8],0,0,0,0,1),this}setFromExtrusionDirection(t){const n=Math.hypot(t.x,t.y,t.z);if(!Number.isFinite(n)||n<1e-12)return this.identity(),this;const e=Math.abs(n-1)>1e-6?t.clone().multiplyScalar(1/n):t;if(wt.equalPoint3d(e,A.Z_AXIS))this.identity();else{const s=new A(1,0,0);Math.abs(e.x)<1/64&&Math.abs(e.y)<1/64?s.crossVectors(A.Y_AXIS,e).normalize():s.crossVectors(A.Z_AXIS,e).normalize();const i=e.clone().cross(s).normalize();this.set(s.x,s.y,s.z,0,i.x,i.y,i.z,0,e.x,e.y,e.z,0,0,0,0,1)}return this}extractBasis(t,n,e){return t.setFromMatrixColumn(this,0),n.setFromMatrixColumn(this,1),e.setFromMatrixColumn(this,2),this}makeBasis(t,n,e){return this.set(t.x,n.x,e.x,0,t.y,n.y,e.y,0,t.z,n.z,e.z,0,0,0,0,1),this}extractRotation(t){const n=this.elements,e=t.elements,s=1/ht.setFromMatrixColumn(t,0).length(),i=1/ht.setFromMatrixColumn(t,1).length(),r=1/ht.setFromMatrixColumn(t,2).length();return n[0]=e[0]*s,n[1]=e[1]*s,n[2]=e[2]*s,n[3]=0,n[4]=e[4]*i,n[5]=e[5]*i,n[6]=e[6]*i,n[7]=0,n[8]=e[8]*r,n[9]=e[9]*r,n[10]=e[10]*r,n[11]=0,n[12]=0,n[13]=0,n[14]=0,n[15]=1,this}makeRotationFromQuaternion(t){return this.compose(ie,t,re)}lookAt(t,n,e){const s=this.elements;return O.subVectors(t,n),O.lengthSq()===0&&(O.z=1),O.normalize(),nt.crossVectors(e,O),nt.lengthSq()===0&&(Math.abs(e.z)===1?O.x+=1e-4:O.z+=1e-4,O.normalize(),nt.crossVectors(e,O)),nt.normalize(),Mt.crossVectors(O,nt),s[0]=nt.x,s[4]=Mt.x,s[8]=O.x,s[1]=nt.y,s[5]=Mt.y,s[9]=O.y,s[2]=nt.z,s[6]=Mt.z,s[10]=O.z,this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,n){const e=t.elements,s=n.elements,i=this.elements,r=e[0],h=e[4],a=e[8],c=e[12],l=e[1],u=e[5],d=e[9],m=e[13],g=e[2],y=e[6],x=e[10],f=e[14],b=e[3],p=e[7],C=e[11],S=e[15],T=s[0],z=s[4],k=s[8],E=s[12],N=s[1],q=s[5],G=s[9],tt=s[13],F=s[2],It=s[6],Tt=s[10],Bt=s[14],Rt=s[3],kt=s[7],Nt=s[11],jt=s[15];return i[0]=r*T+h*N+a*F+c*Rt,i[4]=r*z+h*q+a*It+c*kt,i[8]=r*k+h*G+a*Tt+c*Nt,i[12]=r*E+h*tt+a*Bt+c*jt,i[1]=l*T+u*N+d*F+m*Rt,i[5]=l*z+u*q+d*It+m*kt,i[9]=l*k+u*G+d*Tt+m*Nt,i[13]=l*E+u*tt+d*Bt+m*jt,i[2]=g*T+y*N+x*F+f*Rt,i[6]=g*z+y*q+x*It+f*kt,i[10]=g*k+y*G+x*Tt+f*Nt,i[14]=g*E+y*tt+x*Bt+f*jt,i[3]=b*T+p*N+C*F+S*Rt,i[7]=b*z+p*q+C*It+S*kt,i[11]=b*k+p*G+C*Tt+S*Nt,i[15]=b*E+p*tt+C*Bt+S*jt,this}multiplyScalar(t){const n=this.elements;return n[0]*=t,n[4]*=t,n[8]*=t,n[12]*=t,n[1]*=t,n[5]*=t,n[9]*=t,n[13]*=t,n[2]*=t,n[6]*=t,n[10]*=t,n[14]*=t,n[3]*=t,n[7]*=t,n[11]*=t,n[15]*=t,this}determinant(){const t=this.elements,n=t[0],e=t[4],s=t[8],i=t[12],r=t[1],h=t[5],a=t[9],c=t[13],l=t[2],u=t[6],d=t[10],m=t[14],g=t[3],y=t[7],x=t[11],f=t[15];return g*(+i*a*u-s*c*u-i*h*d+e*c*d+s*h*m-e*a*m)+y*(+n*a*m-n*c*d+i*r*d-s*r*m+s*c*l-i*a*l)+x*(+n*c*u-n*h*m-i*r*u+e*r*m+i*h*l-e*c*l)+f*(-s*h*l-n*a*u+n*h*d+s*r*u-e*r*d+e*a*l)}transpose(){const t=this.elements;let n;return n=t[1],t[1]=t[4],t[4]=n,n=t[2],t[2]=t[8],t[8]=n,n=t[6],t[6]=t[9],t[9]=n,n=t[3],t[3]=t[12],t[12]=n,n=t[7],t[7]=t[13],t[13]=n,n=t[11],t[11]=t[14],t[14]=n,this}setPosition(t,n,e){const s=this.elements;return t instanceof A?(s[12]=t.x,s[13]=t.y,s[14]=t.z):(s[12]=t,s[13]=n,s[14]=e),this}invert(){const t=this.elements,n=t[0],e=t[1],s=t[2],i=t[3],r=t[4],h=t[5],a=t[6],c=t[7],l=t[8],u=t[9],d=t[10],m=t[11],g=t[12],y=t[13],x=t[14],f=t[15],b=u*x*c-y*d*c+y*a*m-h*x*m-u*a*f+h*d*f,p=g*d*c-l*x*c-g*a*m+r*x*m+l*a*f-r*d*f,C=l*y*c-g*u*c+g*h*m-r*y*m-l*h*f+r*u*f,S=g*u*a-l*y*a-g*h*d+r*y*d+l*h*x-r*u*x,T=n*b+e*p+s*C+i*S;if(T===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const z=1/T;return t[0]=b*z,t[1]=(y*d*i-u*x*i-y*s*m+e*x*m+u*s*f-e*d*f)*z,t[2]=(h*x*i-y*a*i+y*s*c-e*x*c-h*s*f+e*a*f)*z,t[3]=(u*a*i-h*d*i-u*s*c+e*d*c+h*s*m-e*a*m)*z,t[4]=p*z,t[5]=(l*x*i-g*d*i+g*s*m-n*x*m-l*s*f+n*d*f)*z,t[6]=(g*a*i-r*x*i-g*s*c+n*x*c+r*s*f-n*a*f)*z,t[7]=(r*d*i-l*a*i+l*s*c-n*d*c-r*s*m+n*a*m)*z,t[8]=C*z,t[9]=(g*u*i-l*y*i-g*e*m+n*y*m+l*e*f-n*u*f)*z,t[10]=(r*y*i-g*h*i+g*e*c-n*y*c-r*e*f+n*h*f)*z,t[11]=(l*h*i-r*u*i-l*e*c+n*u*c+r*e*m-n*h*m)*z,t[12]=S*z,t[13]=(l*y*s-g*u*s+g*e*d-n*y*d-l*e*x+n*u*x)*z,t[14]=(g*h*s-r*y*s-g*e*a+n*y*a+r*e*x-n*h*x)*z,t[15]=(r*u*s-l*h*s+l*e*a-n*u*a-r*e*d+n*h*d)*z,this}scale(t){const n=this.elements,e=t.x,s=t.y,i=t.z;return n[0]*=e,n[4]*=s,n[8]*=i,n[1]*=e,n[5]*=s,n[9]*=i,n[2]*=e,n[6]*=s,n[10]*=i,n[3]*=e,n[7]*=s,n[11]*=i,this}getMaxScaleOnAxis(){const t=this.elements,n=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],e=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],s=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(n,e,s))}makeTranslation(t,n,e){return typeof t=="object"?this.set(1,0,0,t.x,0,1,0,t.y,0,0,1,t.z??0,0,0,0,1):this.set(1,0,0,t,0,1,0,n,0,0,1,e,0,0,0,1),this}makeRotationX(t){const n=Math.cos(t),e=Math.sin(t);return this.set(1,0,0,0,0,n,-e,0,0,e,n,0,0,0,0,1),this}makeRotationY(t){const n=Math.cos(t),e=Math.sin(t);return this.set(n,0,e,0,0,1,0,0,-e,0,n,0,0,0,0,1),this}makeRotationZ(t){const n=Math.cos(t),e=Math.sin(t);return this.set(n,-e,0,0,e,n,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,n){const e=Math.cos(n),s=Math.sin(n),i=1-e,r=t.x,h=t.y,a=t.z,c=i*r,l=i*h;return this.set(c*r+e,c*h-s*a,c*a+s*h,0,c*h+s*a,l*h+e,l*a-s*r,0,c*a-s*h,l*a+s*r,i*a*a+e,0,0,0,0,1),this}makeScale(t,n,e){return this.set(t,0,0,0,0,n,0,0,0,0,e,0,0,0,0,1),this}makeShear(t,n,e,s,i,r){return this.set(1,e,i,0,t,1,r,0,n,s,1,0,0,0,0,1),this}compose(t,n,e){const s=this.elements,i=n.x,r=n.y,h=n.z,a=n.w,c=i+i,l=r+r,u=h+h,d=i*c,m=i*l,g=i*u,y=r*l,x=r*u,f=h*u,b=a*c,p=a*l,C=a*u,S=e.x,T=e.y,z=e.z;return s[0]=(1-(y+f))*S,s[1]=(m+C)*S,s[2]=(g-p)*S,s[3]=0,s[4]=(m-C)*T,s[5]=(1-(d+f))*T,s[6]=(x+b)*T,s[7]=0,s[8]=(g+p)*z,s[9]=(x-b)*z,s[10]=(1-(d+y))*z,s[11]=0,s[12]=t.x,s[13]=t.y,s[14]=t.z,s[15]=1,this}decompose(t,n,e){const s=this.elements;let i=ht.set(s[0],s[1],s[2]).length();const r=ht.set(s[4],s[5],s[6]).length(),h=ht.set(s[8],s[9],s[10]).length();this.determinant()<0&&(i=-i),t.x=s[12],t.y=s[13],t.z=s[14],Z.copy(this);const c=1/i,l=1/r,u=1/h;return Z.elements[0]*=c,Z.elements[1]*=c,Z.elements[2]*=c,Z.elements[4]*=l,Z.elements[5]*=l,Z.elements[6]*=l,Z.elements[8]*=u,Z.elements[9]*=u,Z.elements[10]*=u,n.setFromRotationMatrix(Z),e.x=i,e.y=r,e.z=h,this}equals(t){const n=this.elements,e=t.elements;for(let s=0;s<16;s++)if(n[s]!==e[s])return!1;return!0}fromArray(t,n=0){for(let e=0;e<16;e++)this.elements[e]=t[e+n];return this}toArray(t=[],n=0){const e=this.elements;return t[n]=e[0],t[n+1]=e[1],t[n+2]=e[2],t[n+3]=e[3],t[n+4]=e[4],t[n+5]=e[5],t[n+6]=e[6],t[n+7]=e[7],t[n+8]=e[8],t[n+9]=e[9],t[n+10]=e[10],t[n+11]=e[11],t[n+12]=e[12],t[n+13]=e[13],t[n+14]=e[14],t[n+15]=e[15],t}};dt.IDENTITY=Object.freeze(new dt);let J=dt;const ht=new A,Z=new J,ie=new A(0,0,0),re=new A(1,1,1),nt=new A,Mt=new A,O=new A;class W{constructor(t=void 0,n=void 0){this.min=t==null?new A(1/0,1/0,1/0):new A(t.x,t.y,t.z),this.max=n==null?new A(-1/0,-1/0,-1/0):new A(n.x,n.y,n.z)}set(t,n){return this.min.copy(t),this.max.copy(n),this}setFromArray(t){this.makeEmpty();for(let n=0,e=t.length;n<e;n+=3)this.expandByPoint(Xt.fromArray(t,n));return this}setFromPoints(t){this.makeEmpty();for(let n=0,e=t.length;n<e;n++)this.expandByPoint(t[n]);return this}setFromCenterAndSize(t,n){const e=Xt.copy(n).multiplyScalar(.5);return this.min.copy(t).sub(e),this.max.copy(t).add(e),this}clone(){return new W().copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(t){return this.isEmpty()?t.set(0,0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0,0):t.subVectors(this.max,this.min)}get center(){return this.isEmpty()?new A(0,0,0):new A(0,0,0).addVectors(this.min,this.max).multiplyScalar(.5)}get size(){return this.isEmpty()?new A(0,0,0):new A(0,0,0).subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}containsPoint(t){return!(t.x<this.min.x||t.x>this.max.x||t.y<this.min.y||t.y>this.max.y||t.z<this.min.z||t.z>this.max.z)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,n){return n.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return!(t.max.x<this.min.x||t.min.x>this.max.x||t.max.y<this.min.y||t.min.y>this.max.y||t.max.z<this.min.z||t.min.z>this.max.z)}intersectsPlane(t){let n,e;return t.normal.x>0?(n=t.normal.x*this.min.x,e=t.normal.x*this.max.x):(n=t.normal.x*this.max.x,e=t.normal.x*this.min.x),t.normal.y>0?(n+=t.normal.y*this.min.y,e+=t.normal.y*this.max.y):(n+=t.normal.y*this.max.y,e+=t.normal.y*this.min.y),t.normal.z>0?(n+=t.normal.z*this.min.z,e+=t.normal.z*this.max.z):(n+=t.normal.z*this.max.z,e+=t.normal.z*this.min.z),n<=-t.constant&&e>=-t.constant}clampPoint(t,n){return n.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,Xt).distanceTo(t)}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()?this:(H[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),H[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),H[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),H[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),H[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),H[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),H[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),H[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(H),this)}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}const H=[new A,new A,new A,new A,new A,new A,new A,new A],Xt=new A,Sn=new R;class Y{constructor(t=void 0,n=void 0){this.min=t==null?new R(1/0,1/0):new R(t.x,t.y),this.max=n==null?new R(-1/0,-1/0):new R(n.x,n.y)}set(t,n){return this.min.copy(t),this.max.copy(n),this}setFromPoints(t){this.makeEmpty();for(let n=0,e=t.length;n<e;n++)this.expandByPoint(t[n]);return this}setFromCenterAndSize(t,n){const e=Sn.copy(n).multiplyScalar(.5);return this.min.copy(t).sub(e),this.max.copy(t).add(e),this}clone(){return new Y().copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=1/0,this.max.x=this.max.y=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y}getCenter(t){return this.isEmpty()?t.set(0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0):t.subVectors(this.max,this.min)}get center(){return this.isEmpty()?new R(0,0):new R(0,0).addVectors(this.min,this.max).multiplyScalar(.5)}get size(){return this.isEmpty()?new R(0,0):new R(0,0).subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}containsPoint(t){return!(t.x<this.min.x||t.x>this.max.x||t.y<this.min.y||t.y>this.max.y)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y}getParameter(t,n){return n.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(t){return!(t.max.x<this.min.x||t.min.x>this.max.x||t.max.y<this.min.y||t.min.y>this.max.y)}clampPoint(t,n){return n.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,Sn).distanceTo(t)}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}const Cn=new A,oe=new A,he=new ot;class yt{constructor(t=new A(1,0,0),n=0){this.normal=t,this.constant=n}set(t,n){return this.normal.copy(t),this.constant=n,this}setComponents(t,n,e,s){return this.normal.set(t,n,e),this.constant=s,this}setFromNormalAndCoplanarPoint(t,n){return this.normal.copy(t),this.constant=-n.dot(this.normal),this}setFromCoplanarPoints(t,n,e){const s=Cn.subVectors(e,n).cross(oe.subVectors(t,n)).normalize();return this.setFromNormalAndCoplanarPoint(s,t),this}copy(t){return this.normal.copy(t.normal),this.constant=t.constant,this}normalize(){const t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(t){return this.normal.dot(t)+this.constant}projectPoint(t,n){return n.copy(t).addScaledVector(this.normal,-this.distanceToPoint(t))}intersectsBox(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,n){const e=n||he.getNormalMatrix(t),s=this.coplanarPoint(Cn).applyMatrix4(t),i=this.normal.applyMatrix3(e).normalize();return this.constant=-s.dot(i),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return new yt().copy(this)}}class P extends R{clone(){return new P(this.x,this.y)}static pointArrayToNumberArray(t){const n=new Array(t.length*2);return t.forEach((e,s)=>{e.toArray(n,s*2)}),n}}class M extends A{clone(){return new M(this.x,this.y,this.z)}static pointArrayToNumberArray(t,n=!0){const e=n?3:2,s=new Array(t.length*e);return t.forEach((i,r)=>{i.toArray(s,r*e)}),s}}const En=new J,In=new gt,pt=class pt{constructor(t=0,n=0,e=0,s=pt.DEFAULT_ORDER){this._x=t,this._y=n,this._z=e,this._order=s}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,n,e,s=this._order){return this._x=t,this._y=n,this._z=e,this._order=s,this._onChangeCallback(),this}clone(){return new pt(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,n=this._order,e=!0){const s=t.elements,i=s[0],r=s[4],h=s[8],a=s[1],c=s[5],l=s[9],u=s[2],d=s[6],m=s[10];switch(n){case"XYZ":this._y=Math.asin(Q(h,-1,1)),Math.abs(h)<.9999999?(this._x=Math.atan2(-l,m),this._z=Math.atan2(-r,i)):(this._x=Math.atan2(d,c),this._z=0);break;case"YXZ":this._x=Math.asin(-Q(l,-1,1)),Math.abs(l)<.9999999?(this._y=Math.atan2(h,m),this._z=Math.atan2(a,c)):(this._y=Math.atan2(-u,i),this._z=0);break;case"ZXY":this._x=Math.asin(Q(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-u,m),this._z=Math.atan2(-r,c)):(this._y=0,this._z=Math.atan2(a,i));break;case"ZYX":this._y=Math.asin(-Q(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(d,m),this._z=Math.atan2(a,i)):(this._x=0,this._z=Math.atan2(-r,c));break;case"YZX":this._z=Math.asin(Q(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-l,c),this._y=Math.atan2(-u,i)):(this._x=0,this._y=Math.atan2(h,m));break;case"XZY":this._z=Math.asin(-Q(r,-1,1)),Math.abs(r)<.9999999?(this._x=Math.atan2(d,c),this._y=Math.atan2(h,i)):(this._x=Math.atan2(-l,m),this._y=0);break}return this._order=n,e===!0&&this._onChangeCallback(),this}setFromQuaternion(t,n,e=!0){return En.makeRotationFromQuaternion(t),this.setFromRotationMatrix(En,n,e)}setFromVector3(t,n=this._order){return this.set(t.x,t.y,t.z,n)}reorder(t){return In.setFromEuler(this),this.setFromQuaternion(In,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],t[3]!==void 0&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],n=0){return t[n]=this._x,t[n+1]=this._y,t[n+2]=this._z,t[n+3]=this._order,t}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}};pt.DEFAULT_ORDER="XYZ";let Yt=pt;function ae(o){const t=o;return{x:o.x,y:o.y,z:t.z??0}}function ce(o,t){o.x+=t.x,o.y+=t.y,o.z=(o.z??0)+(t.z??0)}function le(o,t,n=!1){const e=o.x,s=o.y;let i=!1;const r=t.length;for(let h=0,a=r-1;h<r;a=h++){const c=t[h].x,l=t[h].y,u=t[a].x,d=t[a].y;let m=l>s!=d>s;n&&(m=l>=s!=d>=s),m&&e<(u-c)*(s-l)/(d-l)+c&&(i=!i)}return i}function ue(o,t){if(o.length===0||t.length===0)return!1;const n=new Y().setFromPoints(o),e=new Y().setFromPoints(t);if(!n.intersectsBox(e))return!1;for(let s=0;s<o.length;){if(U.isPointInPolygon(o[s],t,!0))return!0;s<o.length-1&&wt.equalPoint2d(o[s+1],o[s])&&++s,++s}return!1}const U={applyOffsetToPoint3d:ce,isPointInPolygon:le,isPolygonIntersect:ue,point2dToPoint3d:ae};function de(o,t){const n=[],e=t-1,s=o;for(let i=0;i<=s;i++)n.push(0);for(let i=1;i<=e-s;i++)n.push(i);for(let i=0;i<=s;i++)n.push(e-s+1);return n}function me(o,t){const n=t.length-1,e=o,s=[0];let i=0;for(let h=1;h<=n;h++){const a=t[h][0]-t[h-1][0],c=t[h][1]-t[h-1][1],l=t[h][2]-t[h-1][2],u=Math.sqrt(a*a+c*c+l*l);i+=u,s.push(i)}const r=[];for(let h=0;h<=e;h++)r.push(0);for(let h=1;h<=n-e;h++){const a=s[h]/i;r.push(a*(n-e+1))}for(let h=0;h<=e;h++)r.push(n-e+1);return r}function Tn(o,t="Uniform"){const n=o.length;if(n===0)return[];if(n===1)return[0];const e=n-1;if(t==="Uniform")return new Array(n).fill(0).map((r,h)=>h/e);const s=[0];let i=0;for(let r=1;r<=e;r++){const h=o[r][0]-o[r-1][0],a=o[r][1]-o[r-1][1],c=o[r][2]-o[r-1][2],l=Math.sqrt(h*h+a*a+c*c),u=t==="SqrtChord"?Math.sqrt(l):l;i+=u,s.push(i)}return i<1e-12?new Array(n).fill(0).map((r,h)=>h/e):s.map(r=>r/i)}function Bn(o,t){const n=t.length-1,e=o,s=n+e+1,i=new Array(s+1).fill(0),r=t[t.length-1];for(let h=s-e;h<=s;h++)i[h]=r;for(let h=1;h<=n-e;h++){let a=0;for(let c=h;c<h+e;c++)a+=t[c];i[h+e]=a/e}return i}function ge(o,t){const n=t.length-1,e=o,s=[0];let i=0;for(let h=1;h<=n;h++){const a=t[h][0]-t[h-1][0],c=t[h][1]-t[h-1][1],l=t[h][2]-t[h-1][2],u=Math.sqrt(a*a+c*c+l*l),d=Math.sqrt(u);i+=d,s.push(i)}const r=[];for(let h=0;h<=e;h++)r.push(0);for(let h=1;h<=n-e;h++){const a=s[h]/i;r.push(a*(n-e+1))}for(let h=0;h<=e;h++)r.push(n-e+1);return r}function Zt(o,t){const n=o.length,e=o.map(r=>r.slice()),s=t.slice();for(let r=0;r<n;r++){let h=r,a=Math.abs(e[r][r]);for(let c=r+1;c<n;c++){const l=Math.abs(e[c][r]);l>a&&(a=l,h=c)}if(a<1e-12)throw new Error("Interpolation matrix is singular.");if(h!==r){const c=e[r];e[r]=e[h],e[h]=c;const l=s[r];s[r]=s[h],s[h]=l}for(let c=r+1;c<n;c++){const l=e[c][r]/e[r][r];if(!(Math.abs(l)<1e-14)){for(let u=r;u<n;u++)e[c][u]-=l*e[r][u];s[c]-=l*s[r]}}}const i=new Array(n).fill(0);for(let r=n-1;r>=0;r--){let h=s[r];for(let a=r+1;a<n;a++)h-=e[r][a]*i[a];i[r]=h/e[r][r]}return i}function Gt(o,t,n="Uniform",e,s){if(o.length===0)return{controlPoints:[],knots:[],weights:[]};const i=o.map(E=>[E[0],E[1],E[2]??0]),r=!!e,h=!!s,a=(r?1:0)+(h?1:0),c=i.length-1,l=c+a;if(l<t)throw new Error("Not enough points to interpolate a curve of this degree.");const u=Tn(i,n),d=u.slice();r&&d.unshift(u[0]),h&&d.push(u[u.length-1]);const m=Bn(t,d),g=l+1,y=new Array(g),x=new Array(g),f=new Array(g),b=new Array(g);let p=0;y[p]=new Array(g).fill(0),y[p][0]=1,x[p]=i[0][0],f[p]=i[0][1],b[p]=i[0][2],p++;for(let E=1;E<=c-1;E++){const N=u[E];y[p]=new Array(g).fill(0);for(let q=0;q<=l;q++)y[p][q]=et(q,t,N,m);x[p]=i[E][0],f[p]=i[E][1],b[p]=i[E][2],p++}if(y[p]=new Array(g).fill(0),y[p][l]=1,x[p]=i[c][0],f[p]=i[c][1],b[p]=i[c][2],p++,r){const E=m[t+1]-m[0],N=E!==0?t/E:0;y[p]=new Array(g).fill(0),y[p][0]=-N,y[p][1]=N,x[p]=(e==null?void 0:e[0])??0,f[p]=(e==null?void 0:e[1])??0,b[p]=(e==null?void 0:e[2])??0,p++}if(h){const E=m[l+t+1]-m[l],N=E!==0?t/E:0;y[p]=new Array(g).fill(0),y[p][l-1]=-N,y[p][l]=N,x[p]=(s==null?void 0:s[0])??0,f[p]=(s==null?void 0:s[1])??0,b[p]=(s==null?void 0:s[2])??0,p++}const C=Zt(y,x),S=Zt(y,f),T=Zt(y,b),z=new Array(g);for(let E=0;E<g;E++)z[E]=[C[E],S[E],T[E]];const k=new Array(g).fill(1);return{controlPoints:z,knots:m,weights:k}}function et(o,t,n,e){if(t===0)return n>=e[o]&&n<e[o+1]?1:0;const s=e[o+t]-e[o],i=e[o+t+1]-e[o+1],r=s>1e-10?(n-e[o])/s:0,h=i>1e-10?(e[o+t+1]-n)/i:0;return r*et(o,t-1,n,e)+h*et(o+1,t-1,n,e)}function xt(o,t,n,e,s){const i=e.length-1,r=t;if(o=Math.max(n[r],Math.min(n[i+1],o)),Math.abs(o-n[i+1])<1e-8)return[...e[i]];if(Math.abs(o-n[r])<1e-8)return[...e[0]];const h=[0,0,0];let a=0;for(let c=0;c<=i;c++){const l=et(c,r,o,n),u=s[c]*l;h[0]+=e[c][0]*u,h[1]+=e[c][1]*u,h[2]+=e[c][2]*u,a+=u}if(Math.abs(a)<1e-10){const c=n[n.length-r-1];if(Math.abs(o-c)<1e-8)return[...e[i]];if(Math.abs(o-n[r])<1e-8)return[...e[0]]}return Math.abs(a)>=1e-10&&(h[0]/=a,h[1]/=a,h[2]/=a),h}function Wt(o,t,n,e){if(t===0)return 0;const s=e[o+t]-e[o],i=e[o+t+1]-e[o+1];let r=0;return s>1e-10&&(r+=t/s*et(o,t-1,n,e)),i>1e-10&&(r-=t/i*et(o+1,t-1,n,e)),r}function ye(o,t,n,e){if(t<=1)return 0;const s=e[o+t]-e[o],i=e[o+t+1]-e[o+1];let r=0;return s>1e-10&&(r+=t/s*Wt(o,t-1,n,e)),i>1e-10&&(r-=t/i*Wt(o+1,t-1,n,e)),r}function Rn(o,t,n,e,s){const i=e.length-1,r=t,h=n[r],a=n[i+1];o=Math.max(h,Math.min(a,o));const c=[0,0,0],l=[0,0,0],u=[0,0,0];let d=0,m=0,g=0;for(let T=0;T<=i;T++){const z=et(T,r,o,n),k=Wt(T,r,o,n),E=ye(T,r,o,n),N=s[T],q=N*z,G=N*k,tt=N*E,F=e[T];c[0]+=q*F[0],c[1]+=q*F[1],c[2]+=q*F[2],l[0]+=G*F[0],l[1]+=G*F[1],l[2]+=G*F[2],u[0]+=tt*F[0],u[1]+=tt*F[1],u[2]+=tt*F[2],d+=q,m+=G,g+=tt}if(Math.abs(d)<1e-10)return{point:xt(o,t,n,e,s),deriv1:[0,0,0],deriv2:[0,0,0]};const y=d*d,x=[c[0]/d,c[1]/d,c[2]/d],f=[(l[0]*d-c[0]*m)/y,(l[1]*d-c[1]*m)/y,(l[2]*d-c[2]*m)/y],b=u[0]*d-c[0]*g,p=u[1]*d-c[1]*g,C=u[2]*d-c[2]*g,S=[b/y-2*m*f[0]/d,p/y-2*m*f[1]/d,C/y-2*m*f[2]/d];return{point:x,deriv1:f,deriv2:S}}function kn(o,t){const n=o[0],e=o[1],s=t[0],i=t[1],r=n*n+e*e;return r<1e-20?0:(n*i-e*s)/Math.pow(r,1.5)}function Nn(o,t,n,e){const s=o,i=t[s],r=t[t.length-s-1];let h=0;const a=1e3,c=(r-i)/a;let l=xt(i,o,t,n,e);for(let y=1;y<=a;y++){const x=i+y*c,f=xt(x,o,t,n,e),b=f[0]-l[0],p=f[1]-l[1],C=f[2]-l[2];h+=Math.sqrt(b*b+p*p+C*C),l=f}const u=xt(r,o,t,n,e),d=u[0]-l[0],m=u[1]-l[1],g=u[2]-l[2];return h+=Math.sqrt(d*d+m*m+g*g),h}function xe(o,t=3,n="Uniform",e,s){return o.length===0?[]:Gt(o,t,n,e,s).controlPoints}const jn=new J,vn=new A,fe=new A,_e=new A,Kt=new M;function qn(o){return new J().setFromExtrusionDirection(new A(o.x,o.y,o.z))}function Ae(o){return jn.setFromExtrusionDirection(new A(o.x,o.y,o.z)),jn.extractBasis(vn,fe,_e),vn.clone()}function Pe(o,t){return new M(o.x,o.y,o.z??0).applyMatrix4(qn(t))}function Qt(o,t){return new M(o.x,o.y,o.z??0).applyMatrix4(qn(t).invert())}function pe(o,t,n){const e=Qt(o,n),s=Qt(t,n);return Kt.set(s.x-e.x,s.y-e.y,(s.z??0)-(e.z??0)),w.normalizeAngle(Math.atan2(Kt.y,Kt.x))}function $t(o){const t=o.length;if(t<3)return 0;let n=0;for(let e=0,s=t-1;e<t;s=e++){const i=o[s],r=o[e];n+=i.x*r.y-r.x*i.y}return n*.5}function Vn(o){return Math.abs($t(o))}function Ln(o){const t=o.length;if(t<3)return 0;let n=0,e=0,s=0;for(let i=0,r=t-1;i<t;r=i++){const h=o[r],a=o[i],c=h.x,l=h.y,u=h.z??0,d=a.x,m=a.y,g=a.z??0;n+=(u+g)*(l-m),e+=(c+d)*(u-g),s+=(l+m)*(c-d)}return .5*Math.hypot(n,e,s)}function Un(o){return o.length<3?0:Vn(o)}function Fn(o){return o.length<3?0:Ln(o)}class On{constructor(){this._boundingBoxNeedsUpdate=!1}get boundingBoxNeedUpdate(){return this._boundingBoxNeedsUpdate}}class Jt extends On{translate(t){return this.transform(new ot().makeTranslation(t.x,t.y))}get box(){return(this._box==null||this._boundingBoxNeedsUpdate)&&(this._box=this.calculateBoundingBox(),this._boundingBoxNeedsUpdate=!1),this._box}}class at extends Jt{constructor(){super(),this.arcLengthDivisions=100}get startPoint(){return this.getPoint(0)}get endPoint(){return this.getPoint(1)}get length(){return this.getLength()}getPoint(t){throw new Error("AcGeCurve2d: .getPoint() not implemented.")}getPointAt(t){const n=this.getUtoTmapping(t);return this.getPoint(n)}getPoints(t=5){const n=[];for(let e=0;e<=t;e++)n.push(this.getPoint(e/t));return n}getSpacedPoints(t=5){const n=[];for(let e=0;e<=t;e++)n.push(this.getPointAt(e/t));return n}getLength(){const t=this.getLengths();return t[t.length-1]}getLengths(t=this.arcLengthDivisions){const n=[];let e,s=this.getPoint(0),i=0;n.push(0);for(let r=1;r<=t;r++)e=this.getPoint(r/t),i+=e.distanceTo(s),n.push(i),s=e;return n}getUtoTmapping(t,n){const e=this.getLengths();let s=0;const i=e.length;let r;n?r=n:r=t*e[i-1];let h=0,a=i-1,c;for(;h<=a;)if(s=Math.floor(h+(a-h)/2),c=e[s]-r,c<0)h=s+1;else if(c>0)a=s-1;else{a=s;break}if(s=a,e[s]===r)return s/(i-1);const l=e[s],d=e[s+1]-l,m=(r-l)/d;return(s+m)/(i-1)}getTangent(t){let e=t-1e-4,s=t+1e-4;e<0&&(e=0),s>1&&(s=1);const i=this.getPoint(e),r=this.getPoint(s),h=new P;return h.copy(r).sub(i).normalize(),h}getTangentAt(t){const n=this.getUtoTmapping(t);return this.getTangent(n)}}class K extends at{constructor(t,n,e,s,i){super();const r=+(t!==void 0)+ +(n!==void 0)+ +(e!==void 0)+ +(s!==void 0)+ +(i!==void 0);if(r==3)typeof t=="object"&&typeof n=="object"&&typeof e=="object"?this.createByThreePoints(t,n,e):this.createByStartEndPointsAndBulge(t,n,e);else if(r==5){const h=t;this.center=new P(h.x,h.y),this.radius=n,this._clockwise=i,this._startAngle=this._clockwise?this._mirrorAngle(w.normalizeAngle(e)):w.normalizeAngle(e),this._endAngle=this._clockwise?this._mirrorAngle(w.normalizeAngle(s)):w.normalizeAngle(s)}else throw V.AcCmErrors.ILLEGAL_PARAMETERS}createByThreePoints(t,n,e){const s=(z,k)=>({x:(z.x+k.x)/2,y:(z.y+k.y)/2}),i=(z,k)=>(k.y-z.y)/(k.x-z.x),r=z=>-1/z,h=s(t,n),a=s(n,e),c=i(t,n),l=i(n,e),u=r(c),d=r(l),m=(z,k,E,N)=>{const q=(N-k)/(z-E),G=z*q+k;return{x:q,y:G}},g=h.y-u*h.x,y=a.y-d*a.x,x=m(u,g,d,y),f=Math.sqrt(Math.pow(t.x-x.x,2)+Math.pow(t.y-x.y,2)),b=(z,k)=>Math.atan2(z.y-k.y,z.x-k.x),p=b(t,x),C=b(n,x),S=b(e,x),T=S>p&&S<C||p>S&&p<C||C>S&&C<p;this.center=x,this.radius=f,this._clockwise=!T,this._startAngle=p,this._endAngle=S}createByStartEndPointsAndBulge(t,n,e){let s,i,r;e<0?(s=Math.atan(-e)*4,i=new R(t),r=new R(n)):(s=Math.atan(e)*4,i=new R(n),r=new R(t));const h=new R().subVectors(r,i),a=h.length(),c=new R().addVectors(i,h.multiplyScalar(.5)),l=Math.abs(a/2/Math.tan(s/2)),u=h.normalize(),d=e<0?-Math.PI/2:Math.PI/2,m=new R(u.x*Math.cos(d)-u.y*Math.sin(d),u.y*Math.cos(d)+u.x*Math.sin(d));let g;s<Math.PI?e<0?g=c.add(m.multiplyScalar(l)):g=c.add(m.multiplyScalar(-l)):e<0?g=c.add(m.multiplyScalar(-l)):g=c.add(m.multiplyScalar(l)),e<0?(this._startAngle=Math.atan2(i.y-g.y,i.x-g.x),this._endAngle=Math.atan2(r.y-g.y,r.x-g.x)):(this._startAngle=Math.atan2(r.y-g.y,r.x-g.x),this._endAngle=Math.atan2(i.y-g.y,i.x-g.x)),this._clockwise=e<0,this.center=g,this.radius=r.sub(g).length()}get center(){return this._center}set center(t){this._center=new P(t.x,t.y),this._boundingBoxNeedsUpdate=!0}get radius(){return this._radius}set radius(t){this._radius=t,this._boundingBoxNeedsUpdate=!0}get startAngle(){return this._clockwise?this._mirrorAngle(this._startAngle):this._startAngle}set startAngle(t){this._startAngle=this._clockwise?this._mirrorAngle(w.normalizeAngle(t)):w.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._clockwise?this._mirrorAngle(this._endAngle):this._endAngle}set endAngle(t){const n=this.startAngle==0&&t==I?t:w.normalizeAngle(t);this._endAngle=this._clockwise?this._mirrorAngle(n):n,this._boundingBoxNeedsUpdate=!0}_mirrorAngle(t){return(360-t*180/Math.PI)%360*Math.PI/180}_getInternalAngle(t){return this._clockwise?this._mirrorAngle(t):t}get deltaAngle(){const t=this._getInternalAngle(this.startAngle),n=this._getInternalAngle(this.endAngle);return this.clockwise?w.normalizeAngle(t-n):w.normalizeAngle(n-t)}get clockwise(){return this._clockwise}set clockwise(t){this._clockwise=t,this._boundingBoxNeedsUpdate=!0}get startPoint(){return this.getPointAtAngle(this.startAngle)}get endPoint(){return this.getPointAtAngle(this.endAngle)}get midPoint(){const t=this._getInternalAngle(this.startAngle),n=this._clockwise?w.normalizeAngle(t-this.deltaAngle/2):w.normalizeAngle(t+this.deltaAngle/2),e=this._clockwise?this._mirrorAngle(n):n;return this.getPointAtAngle(e)}get closed(){const t=this._getInternalAngle(this.startAngle),n=this._getInternalAngle(this.endAngle);return Math.abs(n-t)/Math.PI%2==0}calculateBoundingBox(){const t=[this.startPoint,this.endPoint],n=[0,Math.PI/2,Math.PI,3*Math.PI/2];for(const i of n){const r=this._getInternalAngle(i);w.isBetweenAngle(r,this._getInternalAngle(this.startAngle),this._getInternalAngle(this.endAngle),this.clockwise)&&t.push(this.getPointAtAngle(i))}const e=t.map(i=>i.x),s=t.map(i=>i.y);return new Y(new P(Math.min(...e),Math.min(...s)),new P(Math.max(...e),Math.max(...s)))}get length(){return Math.abs(this.deltaAngle*this.radius)}transform(t){const n=t,e=this.center.clone().applyMatrix2d(n),s=this.startPoint.clone().applyMatrix2d(n);if(this.closed)return this.center=e,this.radius=e.distanceTo(s),this._startAngle=Math.atan2(s.y-e.y,s.x-e.x),this._endAngle=this._startAngle,this._clockwise=n.determinant()<0?!this._clockwise:this._clockwise,this._boundingBoxNeedsUpdate=!0,this;const i=this.midPoint.clone().applyMatrix2d(n),r=this.endPoint.clone().applyMatrix2d(n),h=new K(s,i,r),a=n.determinant()<0?!this.clockwise:this.clockwise,c=l=>{const u=w.normalizeAngle(l);return a?this._mirrorAngle(u):u};return this.center=h.center,this.radius=h.radius,this.clockwise=a,this.startAngle=c(Math.atan2(s.y-h.center.y,s.x-h.center.x)),this.endAngle=c(Math.atan2(r.y-h.center.y,r.x-h.center.x)),this._boundingBoxNeedsUpdate=!0,this}clone(){return new K(this.center.clone(),this.radius,this._startAngle,this._endAngle,this.clockwise)}getPointAtAngle(t){const n=this._getInternalAngle(t),e=this.center.x+this.radius*Math.cos(n),s=this.center.y+this.radius*Math.sin(n);return new P(e,s)}getQuadrantPoints(){const t=[],n=this._getInternalAngle(this.startAngle),e=this._getInternalAngle(this.endAngle),s=[0,Math.PI/2,Math.PI,3*Math.PI/2];for(const i of s){const r=this._getInternalAngle(i);w.isBetweenAngle(r,n,e,this.clockwise)&&t.push(this.getPointAtAngle(i))}return t}nearestPoint(t){const n=new P(t.x,t.y),e=n.x-this.center.x,s=n.y-this.center.y;if(Math.hypot(e,s)<1e-12)return this.startPoint.clone();const r=Math.atan2(s,e),h=this.clockwise?this._mirrorAngle(w.normalizeAngle(r)):w.normalizeAngle(r),a=this._getInternalAngle(h),c=this._getInternalAngle(this.startAngle),l=this._getInternalAngle(this.endAngle);if(w.isBetweenAngle(a,c,l,this.clockwise))return this.getPointAtAngle(h);const u=n.distanceToSquared(this.startPoint),d=n.distanceToSquared(this.endPoint);return u<=d?this.startPoint.clone():this.endPoint.clone()}perpendicularPoints(t){const n=new P(t.x,t.y),e=n.x-this.center.x,s=n.y-this.center.y,i=Math.hypot(e,s);if(i<1e-12)return[];const r=e/i,h=s/i,a=[new P(this.center.x+r*this.radius,this.center.y+h*this.radius),new P(this.center.x-r*this.radius,this.center.y-h*this.radius)],c=[],l=this._getInternalAngle(this.startAngle),u=this._getInternalAngle(this.endAngle);for(const d of a){const m=Math.atan2(d.y-this.center.y,d.x-this.center.x),g=this.clockwise?this._mirrorAngle(w.normalizeAngle(m)):w.normalizeAngle(m),y=this._getInternalAngle(g);(this.closed||w.isBetweenAngle(y,l,u,this.clockwise))&&c.push(d)}return c}tangentPoints(t){const n=[],e=t.x-this.center.x,s=t.y-this.center.y,i=Math.hypot(e,s),r=this.radius;if(i<r)return n;const h=Math.acos(r/i),a=Math.atan2(s,e),c=[a+h,a-h],l=this._getInternalAngle(this.startAngle),u=this._getInternalAngle(this.endAngle);for(const d of c){const m=this.clockwise?this._mirrorAngle(w.normalizeAngle(d)):w.normalizeAngle(d),g=this._getInternalAngle(m);(this.closed||w.isBetweenAngle(g,l,u,this.clockwise))&&n.push(this.getPointAtAngle(m))}return n}getPoints(t=100){const n=[];let e=this.deltaAngle,s=this._getInternalAngle(this.startAngle);if(this.closed&&(e=I,s=0),this.clockwise)for(let i=0;i<=t;i++){const r=s-e*(i/t),h=this._clockwise?this._mirrorAngle(r):r,a=this.getPointAtAngle(h);n.push(new P(a.x,a.y))}else for(let i=0;i<=t;i++){const r=s+e*(i/t),h=this._clockwise?this._mirrorAngle(r):r,a=this.getPointAtAngle(h);n.push(new P(a.x,a.y))}return n}}const zt=1e-6;function Dn(o,t){if(De(o)){const i=Me(o,t);return i?[i]:[]}const n=Kn(o);if(n.numberOfVertices<2)return[];const s=Ye(n,t);return s?[s]:[]}function we(o){return Kn(o)}function Me(o,t){const n=ze(o);if(n.length===0)return null;const e=[];for(const h of n){const a=Se(h,t);if(!a)return null;e.push(a)}const s=be(o),i=Te(e,s,o.closed,t);if(i.length<2)return null;const r=new st;return i.forEach((h,a)=>{r.addVertexAt(a,{x:h.x,y:h.y})}),r.closed=o.closed,r}function ze(o){const t=[],n=o.numberOfVertices,e=o.closed?n:n-1;for(let s=0;s<e;s++){const i=o.vertices[s],r=o.vertices[(s+1)%n];B.isPositive(Math.abs(i.bulge??0))?t.push({kind:"arc",arc:new K(i,r,i.bulge)}):t.push({kind:"line",start:new P(i.x,i.y),end:new P(r.x,r.y)})}return t}function be(o){const t=[];for(let n=0;n<o.numberOfVertices;n++)t.push(o.getPointAt(n));return t}function Se(o,t){if(o.kind==="line"){const e=Ie(o.start,o.end,t);return e?{kind:"line",...e}:null}const n=Ce(o.arc,o.arc.startPoint,o.arc.endPoint,t);return n?{kind:"arc",arc:n}:null}function Ce(o,t,n,e){const s=Ee(o,t,n,e),i=o.radius+s;return B.isNonPositive(i)?null:new K(o.center,i,o.startAngle,o.endAngle,o.clockwise)}function Ee(o,t,n,e){const s=n.x-t.x,i=n.y-t.y,r=Math.hypot(s,i);if(B.isNonPositive(r))return o.clockwise?-e:e;const h=-i/r,a=s/r,c=o.center.x-(t.x+n.x)/2,l=o.center.y-(t.y+n.y)/2;return c*h+l*a>0?-e:e}function Ie(o,t,n){const e=t.x-o.x,s=t.y-o.y,i=Math.hypot(e,s);if(B.isNonPositive(i))return null;const r=-s/i*n,h=e/i*n;return{start:new P(o.x+r,o.y+h),end:new P(t.x+r,t.y+h),dx:e,dy:s}}function Te(o,t,n,e){var h;const s=o.length;if(s===0)return[];const i=Be(o,t,n,e),r=[((h=i[0].nextSegmentStart)==null?void 0:h.clone())??i[0].point.clone()];for(let a=0;a<s;a++){const c=o[a],l=a===s-1&&!n?{point:ve(c)}:i[(a+1)%s];if(a>0&&i[a].filletPoints&&i[a].filletPoints.forEach(u=>r.push(u.clone())),c.kind==="arc"){const u=i[a].nextSegmentStart??i[a].point,d=l.point,m=Re(c.arc,u,d,Math.max(16,32));for(let g=1;g<m.length;g++)r.push(m[g])}else r.push(l.point.clone())}return Qn(r)}function Be(o,t,n,e){const s=o.length,i=[];for(let r=0;r<s;r++)r===0?i.push(n?Xn(o[s-1],o[0],t[0],e):{point:je(o[0])}):i.push(Xn(o[r-1],o[r],t[r],e));return i}function Re(o,t,n,e){const s=o.nearestPoint(t),i=o.nearestPoint(n),r=Ht(o,s),h=Ht(o,i),a=Ne(o,r,h),c=[];for(let l=0;l<=e;l++){const u=l/e,d=o.clockwise?r-a*u:r+a*u;c.push(o.getPointAtAngle(ke(o,d)))}return c}function Ht(o,t){return Math.atan2(t.y-o.center.y,t.x-o.center.x)}function ke(o,t){const n=w.normalizeAngle(t);return o.clockwise?tn(n):n}function tn(o){return(360-o*180/Math.PI)%360*(Math.PI/180)}function Ne(o,t,n){if(o.clockwise){let s=t-n;return B.isNonPositive(s)&&(s+=I),s}let e=n-t;return B.isNonPositive(e)&&(e+=I),e}function je(o){return o.kind==="line"?o.start.clone():o.arc.startPoint.clone()}function ve(o){return o.kind==="line"?o.end.clone():o.arc.endPoint.clone()}function Xn(o,t,n,e){return o.kind==="line"&&t.kind==="line"?{point:nn({start:o.start,end:o.end,dx:o.dx,dy:o.dy},{start:t.start,end:t.end,dx:t.dx,dy:t.dy})}:o.kind==="line"&&t.kind==="arc"?Yn(o,t.arc,n,e,!0):o.kind==="arc"&&t.kind==="line"?Yn(t,o.arc,n,e,!1):o.kind==="arc"&&t.kind==="arc"?qe(o.arc,t.arc,n,e):{point:n.clone()}}function qe(o,t,n,e){const s=Wn(o.endPoint,t.startPoint),r=Oe(o,t).filter(l=>bt(o,l)&&bt(t,l));if(r.length>0)return{point:Gn(r,s)};const h=o.endPoint.clone(),a=t.startPoint.clone(),c=Zn(n,Math.abs(e),h,a);return{point:h,filletPoints:c,nextSegmentStart:a}}function Yn(o,t,n,e,s){const i=Wn(s?o.end:o.start,s?t.startPoint:t.endPoint),r=Fe(o,t,i);if(Le(o,r)&&bt(t,r))return{point:r};const h=Ve(o,n,e),a=s?t.startPoint.clone():t.endPoint.clone(),c=Zn(n,Math.abs(e),s?h:a,s?a:h);return s?{point:h,filletPoints:c,nextSegmentStart:a}:{point:a,filletPoints:c,nextSegmentStart:h}}function Ve(o,t,n){const e=Math.hypot(o.dx,o.dy),s=-o.dy/e*n,i=o.dx/e*n;return new P(t.x+s,t.y+i)}function Le(o,t){const n=Math.hypot(o.dx,o.dy);if(B.isNonPositive(n))return!1;const e=o.dx/n,s=o.dy/n,i=t.x-o.start.x,r=t.y-o.start.y,h=Math.abs(i*s-r*e);return B.equalToZero(h)}function Zn(o,t,n,e){const s=Math.atan2(n.y-o.y,n.x-o.x),i=Math.atan2(e.y-o.y,e.x-o.x),r=Ue(s,i);if(B.equalToZero(Math.abs(r)))return[];const h=[],a=Math.max(2,Math.ceil(Math.abs(r)/Math.PI*16));for(let c=1;c<a;c++){const l=c/a,u=s+r*l;h.push(new P(o.x+t*Math.cos(u),o.y+t*Math.sin(u)))}return h}function Ue(o,t){let n=t-o;for(;n>Math.PI;)n-=I;for(;n<=-Math.PI;)n+=I;return n}function Fe(o,t,n){const e=Math.hypot(o.dx,o.dy);if(B.isNonPositive(e))return n.clone();const s=o.dx/e,i=o.dy/e,r=o.start.x-t.center.x,h=o.start.y-t.center.y,a=2*(r*s+h*i),c=r*r+h*h-t.radius*t.radius,l=a*a-4*c;if(l<0)return n.clone();const u=Math.sqrt(l),d=[(-a-u)/2,(-a+u)/2].map(g=>new P(o.start.x+s*g,o.start.y+i*g)),m=d.filter(g=>bt(t,g));return Gn(m.length>0?m:d,n)}function bt(o,t){const n=Math.abs(Math.hypot(t.x-o.center.x,t.y-o.center.y)-o.radius);if(B.isPositive(n))return!1;const e=Ht(o,t),s=o.clockwise?tn(w.normalizeAngle(o.startAngle)):w.normalizeAngle(o.startAngle),i=o.clockwise?tn(w.normalizeAngle(o.endAngle)):w.normalizeAngle(o.endAngle);return w.isBetweenAngle(e,s,i,o.clockwise)}function Oe(o,t){const n=t.center.x-o.center.x,e=t.center.y-o.center.y,s=Math.hypot(n,e);if(B.isNonPositive(s))return[];const i=o.radius+t.radius,r=Math.abs(o.radius-t.radius);if(s>i+zt)return[];if(s<r-zt)return[];const h=(o.radius*o.radius-t.radius*t.radius+s*s)/(2*s),a=o.radius*o.radius-h*h;if(a<-zt)return[];const c=o.center.x+h*n/s,l=o.center.y+h*e/s;if(a<=zt)return[new P(c,l)];const u=Math.sqrt(a),d=-e*u/s,m=n*u/s;return[new P(c+d,l+m),new P(c-d,l-m)]}function Gn(o,t){let n=o[0],e=n.distanceToSquared(t);for(let s=1;s<o.length;s++){const i=o[s].distanceToSquared(t);i<e&&(n=o[s],e=i)}return n.clone()}function Wn(o,t){return new P((o.x+t.x)/2,(o.y+t.y)/2)}function De(o){const t=o.numberOfVertices,n=o.closed?t:t-1;for(let e=0;e<n;e++){const s=o.vertices[e];if(B.isPositive(Math.abs(s.bulge??0)))return!0}return!1}function Kn(o){const t=Xe(o.vertices.map(n=>new P(n.x,n.y)),o.closed);return t.length===o.numberOfVertices?o:new st(t.map(n=>({x:n.x,y:n.y})),o.closed)}function Xe(o,t){const n=Qn(o);if(!t||n.length<2)return n;const e=n[0],s=n[n.length-1];return B.isNonPositive(Math.hypot(e.x-s.x,e.y-s.y))&&n.pop(),n}function Qn(o){const t=[];return o.forEach(n=>{const e=t[t.length-1];(!e||B.isPositive(Math.hypot(e.x-n.x,e.y-n.y)))&&t.push(new P(n.x,n.y))}),t}function Ye(o,t){const n=[];for(let r=0;r<o.numberOfVertices;r++)n.push(o.getPointAt(r));const e=Ze(n,o.closed,t);if(e.length===0)return null;const s=[];if(o.closed){if(e.length<2)return null;const r=e.length;for(let h=0;h<r;h++){const a=e[(h-1+r)%r],c=e[h];s.push(nn(a,c))}}else{s.push(e[0].start);for(let r=1;r<e.length;r++)s.push(nn(e[r-1],e[r]));s.push(e[e.length-1].end)}const i=new st;return s.forEach((r,h)=>{i.addVertexAt(h,{x:r.x,y:r.y})}),i.closed=o.closed,i}function Ze(o,t,n){const e=[],s=t?o.length:o.length-1;for(let i=0;i<s;i++){const r=o[i],h=o[t?(i+1)%o.length:i+1],a=h.x-r.x,c=h.y-r.y,l=Math.hypot(a,c);if(B.isNonPositive(l))continue;const u=-c/l*n,d=a/l*n;e.push({start:new P(r.x+u,r.y+d),end:new P(h.x+u,h.y+d),dx:a,dy:c})}return e}function nn(o,t){const n=o.dx*t.dy-o.dy*t.dx;if(B.equalToZero(n))return new P((o.end.x+t.start.x)/2,(o.end.y+t.start.y)/2);const e=t.start.x-o.start.x,s=t.start.y-o.start.y,i=(e*t.dy-s*t.dx)/n;return new P(o.start.x+i*o.dx,o.start.y+i*o.dy)}class st extends at{constructor(t=null,n=!1){super(),this._vertices=t||new Array,this._closed=n}get vertices(){return this._vertices}get numberOfVertices(){return this._vertices.length}get closed(){return this._closed}get startPoint(){if(this.numberOfVertices>0){const t=this._vertices[0];return new P(t.x,t.y)}throw new Error("Start point does not exist in an empty polyline.")}get endPoint(){const t=this.numberOfVertices;if(t>0)if(this.closed){const n=this._vertices[0];return new P(n.x,n.y)}else{const n=this._vertices[t-1];return new P(n.x,n.y)}throw new Error("End point does not exist in an empty polyline.")}get length(){let t=0;const n=this._vertices.length;for(let e=0;e<n;++e){const s=this._vertices[e];let i=null;if(e<n-1?i=this._vertices[e+1]:e==n-1&&this.closed&&(i=this._vertices[0]),i)if(s.bulge){const r=new K(s,i,s.bulge);t+=r.length}else t+=new P(s.x,s.y).distanceTo(i)}return t}get area(){if(!this._closed||this._vertices.length<3)return 0;const t=this.getPoints(128);return Un(t)}set closed(t){this._closed=t,this._boundingBoxNeedsUpdate=!0}addVertexAt(t,n){t<=0?this._vertices.unshift(n):this._vertices.splice(t,0,n),this._boundingBoxNeedsUpdate=!0}removeVertexAt(t){if(t<0||t>=this._vertices.length)throw new Error(`Index ${t} is out of bounds. Valid range is 0 to ${this._vertices.length-1}.`);this._vertices.splice(t,1),this._boundingBoxNeedsUpdate=!0}reset(t,n){t?n!==void 0&&n>=0&&n<this._vertices.length&&(this._vertices=this._vertices.slice(0,n),this._boundingBoxNeedsUpdate=!0):(this._vertices=new Array,this._boundingBoxNeedsUpdate=!0)}getPointAt(t){const n=this._vertices[t];return new P(n.x,n.y)}calculateBoundingBox(){const t=this.getPoints(100);return new Y().setFromPoints(t)}transform(t){const n=t.determinant()<0;return this._vertices.forEach(e=>{const s=new P(e).applyMatrix2d(t);e.x=s.x,e.y=s.y,n&&e.bulge!=null&&(e.bulge=-e.bulge)}),this._boundingBoxNeedsUpdate=!0,this}clone(){return new st(this._vertices.map(t=>({...t})),this._closed)}getPoints3d(t,n){const e=[];return this.getPoints(t).forEach(i=>e.push(new M().set(i.x,i.y,n))),e}getPoints(t){const n=[],e=this._vertices.length;for(let s=0;s<e;++s){const i=this._vertices[s];if(i.bulge){let r=null;if(s<e-1?r=this._vertices[s+1]:s==e-1&&this.closed&&(r=this._vertices[0]),r){const a=new K(i,r,i.bulge).getPoints(t),c=a.length;for(let l=0;l<c;++l){const u=a[l];n.push(new P(u.x,u.y))}}}else n.push(new P(i.x,i.y)),s==e-1&&this.closed&&n.push(n[0])}return n}offset(t){return Dn(this,t)}}function Ge(o,t,n){const e=Math.hypot(t.x,t.y);if(B.isNonPositive(e))return null;const s=-t.y/e*n,i=t.x/e*n;return new M(o.x+s,o.y+i,o.z)}function We(o,t,n){if(o.length<2)return null;const e=we(new st(o.map(i=>({x:i.x,y:i.y})),t));return Dn(e,n)[0]??null}function Ke(o,t,n,e){if(o.length<2||B.equalToZero(n))return null;const{points:s,tangents:i}=Jn(o,e);if(s.length<2)return null;const r=i??Qe(s,t),h=$e(s,r,n),a=t?He(h):Je(h);if(a.length<2)return null;const c=new st;return a.forEach((l,u)=>{c.addVertexAt(u,{x:l.x,y:l.y})}),c.closed=t,c}function Qe(o,t){const n=o.length,e=new Array(n);for(let s=0;s<n;s++){let i=0,r=0;if(t){const a=o[(s-1+n)%n],c=o[(s+1)%n];i=c.x-a.x,r=c.y-a.y}else s===0?(i=o[1].x-o[0].x,r=o[1].y-o[0].y):s===n-1?(i=o[n-1].x-o[n-2].x,r=o[n-1].y-o[n-2].y):(i=o[s+1].x-o[s-1].x,r=o[s+1].y-o[s-1].y);const h=Math.hypot(i,r);B.isNonPositive(h)?e[s]=new P(1,0):e[s]=new P(i/h,r/h)}return e}function $e(o,t,n){return o.map((e,s)=>{const i=t[s],r=-i.y*n,h=i.x*n;return new P(e.x+r,e.y+h)})}function Je(o){let t=St(o);if(t.length<3)return t;for(;;){const n=$n(t,!1);if(!n||(t=St([...t.slice(0,n.segmentA+1),n.point,...t.slice(n.segmentB+1)]),t.length<2))break}return t}function He(o){let t=St(o);if(t.length<4)return t;for(;;){const n=$n(t,!0);if(!n||(t=St([...t.slice(0,n.segmentA+1),n.point,...t.slice(n.segmentB+1)]),t.length<3))break}return t}function $n(o,t){const n=t?o.length:o.length-1;if(n<2)return null;for(let e=0;e<n;e++){const s=o[e],i=o[(e+1)%o.length];for(let r=e+1;r<n;r++){if(ts(e,r,n,t))continue;const h=o[r],a=o[(r+1)%o.length],c=ns(s,i,h,a);if(c)return{point:c,segmentA:e,segmentB:r}}}return null}function ts(o,t,n,e){return!!(t===o||t===o+1||e&&o===0&&t===n-1)}function ns(o,t,n,e){const s=t.x-o.x,i=t.y-o.y,r=e.x-n.x,h=e.y-n.y,a=s*h-i*r;if(B.equalToZero(a))return null;const c=n.x-o.x,l=n.y-o.y,u=(c*h-l*r)/a,d=(c*i-l*s)/a,m=wt.equalPointTol;return u<-m||u>1+m||d<-m||d>1+m?null:new P(o.x+u*s,o.y+u*i)}function Jn(o,t){const n=[],e=[],s=t!=null&&t.length===o.length;return o.forEach((i,r)=>{const h=n[n.length-1];if((!h||B.isPositive(Math.hypot(h.x-i.x,h.y-i.y)))&&(n.push(new P(i.x,i.y)),s)){const a=t[r];e.push(new P(a.x,a.y))}}),{points:n,tangents:s?e:void 0}}function St(o){return Jn(o).points}class en extends Jt{constructor(){super(),this._loops=[]}add(t){this._loops.push(t),this._boundingBoxNeedsUpdate=!0}get loops(){return this._loops}get outter(){if(this._loops.length>0)return this._loops[0]}calculateBoundingBox(){const t=this.outter;return t?t.box:new Y}transform(t){return this._loops.forEach(n=>{n.transform(t)}),this._boundingBoxNeedsUpdate=!0,this}clone(){const t=new en;return this._loops.forEach(n=>{t.add(n.clone())}),t}getPoints(t){const n=[];for(let e=0;e<this.loops.length;++e){const i=this.loops[e].getPoints(t);n.push(i)}return n}buildHierarchy(){var h;const t=this.getPoints(100),n=this.calculateBoundaryBoxes(t),e=this.sortBoundaryBoxesByAreas(n),s=new Map,i=e.length;for(let a=0;a<i;a++)s.set(e[a],{index:e[a],children:[]});const r={index:-1,children:[]};for(let a=0;a<i;a++){const c=e[a],l=t[c],u=n[c];let d=a+1;for(;d<i;d++){const m=e[d],g=t[m];if(n[m].containsBox(u)&&U.isPointInPolygon(l[w.randInt(0,l.length-1)],g)){(h=s.get(m))==null||h.children.push(s.get(c));break}}d===i&&r.children.push(s.get(c))}return r}get area(){if(this._loops.length===0)return 0;let t=0;for(let n=0;n<this._loops.length;n++){const s=this._loops[n].getPoints(128),i=$t(s);n===0?t+=Math.abs(i):t-=Math.abs(i)}return t}calculateBoundaryBoxes(t){const n=[];return t.forEach(e=>{n.push(new Y().setFromPoints(e))}),n}sortBoundaryBoxesByAreas(t){const n=[];t.forEach((s,i)=>{const r=s.size,h=r.width*r.height;n.push({area:h,index:i})}),n.sort((s,i)=>s.area-i.area);const e=[];return n.forEach(s=>{e.push(s.index)}),e}}class es extends On{translate(t){return this.transform(new J().makeTranslation(t.x,t.y,t.z))}get box(){return(this._box==null||this._boundingBoxNeedsUpdate)&&(this._box=this.calculateBoundingBox(),this._boundingBoxNeedsUpdate=!1),this._box}}class ft extends es{}class ct extends ft{constructor(t,n){super(),this._start=new M(t),this._end=new M(n)}get startPoint(){return this._start}set startPoint(t){this._start.copy(t),this._boundingBoxNeedsUpdate=!0}get endPoint(){return this._end}set endPoint(t){this._end.copy(t),this._boundingBoxNeedsUpdate=!0}get direction(){return new A().subVectors(this.endPoint,this.startPoint).normalize()}get midPoint(){return new M((this._start.x+this._end.x)/2,(this._start.y+this._end.y)/2,(this._start.z+this._end.z)/2)}nearestPoint(t){return this.project(t)}get length(){return this.startPoint.distanceTo(this.endPoint)}isPointOnLine(t){return this.project(t).distanceTo(t)<1e-6}at(t,n){return this.delta(n).multiplyScalar(t).add(this._start)}atLength(t,n=!1){if(n){const e=this.delta(it).normalize();return new M(this._start).addScaledVector(e,t)}else{const e=this.delta(it).normalize();return new M(this._end).addScaledVector(e,t)}}extend(t,n=!1){if(n){const e=it.subVectors(this._start,this._end).normalize();this._start=new M(this._start).addScaledVector(e,t)}else{const e=this.delta(it).normalize();this._end=new M(this._end).addScaledVector(e,t)}return this._boundingBoxNeedsUpdate=!0,this}closestPointToPointParameter(t,n){Hn.subVectors(t,this._start),Ct.subVectors(this.endPoint,this.startPoint);const e=Ct.dot(Ct);let i=Ct.dot(Hn)/e;return n&&(i=w.clamp(i,0,1)),i}closestPointToPoint(t,n,e){const s=this.closestPointToPointParameter(t,n);return this.delta(e).multiplyScalar(s).add(this._start)}delta(t){return t.subVectors(this._end,this._start)}distanceSq(){return this._start.distanceToSquared(this._end)}distance(){return this._start.distanceTo(this._end)}project(t){const n=this.direction,s=it.subVectors(t,this.startPoint).dot(n);return new M().copy(n).multiplyScalar(s).add(this.startPoint)}perpPoint(t){const n=this.direction,e=this.startPoint,i=it.subVectors(t,e).dot(n),r=it.copy(n).multiplyScalar(i);return new M().addVectors(e,r)}calculateBoundingBox(){const t=new M(Math.min(this._start.x,this._end.x),Math.min(this._start.y,this._end.y),Math.min(this._start.z,this._end.z)),n=new M(Math.max(this._start.x,this._end.x),Math.max(this._start.y,this._end.y),Math.max(this._start.z,this._end.z));return new W(t,n)}transform(t){return this._start.applyMatrix4(t),this._end.applyMatrix4(t),this._boundingBoxNeedsUpdate=!0,this}get closed(){return!1}copy(t){return this.startPoint=t.startPoint,this.endPoint=t.endPoint,this._boundingBoxNeedsUpdate=!0,this}clone(){return new ct(this._start.clone(),this._end.clone())}offset(t){const n=this.startPoint,e=this.endPoint;if(Math.hypot(e.x-n.x,e.y-n.y)===0)return this.clone();const i=new A(e.x-n.x,e.y-n.y,0).normalize(),r=new A(-i.y,i.x,0);return new ct(new M(n.x+r.x*t,n.y+r.y*t,n.z),new M(e.x+r.x*t,e.y+r.y*t,e.z))}}const it=new A,Hn=new A,Ct=new A;class lt extends ft{static computeCenterPoint(t,n,e){const s=new A().addVectors(t,n).multiplyScalar(.5),i=new A().addVectors(t,e).multiplyScalar(.5),r=new A().subVectors(n,t),h=new A().subVectors(e,t),a=new A().crossVectors(r,h).normalize();if(a.lengthSq()===0)return null;const c=new A().crossVectors(r,a).normalize(),l=new A().crossVectors(h,a).normalize(),u=c.clone().multiplyScalar(Number.MAX_SAFE_INTEGER),d=l.clone().multiplyScalar(Number.MAX_SAFE_INTEGER),m=new ct(s,s.clone().add(u)),g=new ct(i,i.clone().add(d)),y=new A;return m.closestPointToPoint(g.startPoint,!0,y)?y:null}static createByThreePoints(t,n,e){const s=lt.computeCenterPoint(t,n,e);if(s){const i=s.distanceTo(t),r=new A().subVectors(t,s),h=new A().subVectors(n,s),a=Math.atan2(r.y,r.x),c=Math.atan2(h.y,h.x);return new lt(s,i,a,c,A.Z_AXIS)}}constructor(t,n,e,s,i,r=A.X_AXIS){super(),this.center=t,this.radius=n,this.startAngle=e,this.endAngle=s,this.normal=i,this.refVec=r,(s-e)%I==0?(this.startAngle=0,this.endAngle=I):(this.startAngle=e,this.endAngle=s)}get center(){return this._center}set center(t){this._center=new M(t.x,t.y,t.z||0),this._boundingBoxNeedsUpdate=!0}get radius(){return this._radius}set radius(t){if(t<0)throw V.AcCmErrors.ILLEGAL_PARAMETERS;this._radius=t,this._boundingBoxNeedsUpdate=!0}get startAngle(){return this._startAngle}set startAngle(t){this._startAngle=w.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._endAngle}set endAngle(t){this._endAngle=this.startAngle==0&&t==I?t:w.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get deltaAngle(){return w.normalizeAngle(this.endAngle-this.startAngle)}get isLargeArc(){return Math.abs(this.deltaAngle)>Math.PI?1:0}get clockwise(){return this.deltaAngle<=0}get normal(){return this._normal}set normal(t){this._normal=new A(t.x,t.y,t.z),this._normal.normalize(),this._boundingBoxNeedsUpdate=!0}get refVec(){return this._refVec}set refVec(t){this._refVec=new A(t.x,t.y,t.z),this._refVec.normalize(),this._boundingBoxNeedsUpdate=!0}get startPoint(){return this.getPointAtAngle(this._startAngle)}get endPoint(){return this.getPointAtAngle(this._endAngle)}get midPoint(){let t=this.startAngle,n=this.deltaAngle;this.closed&&(t=0,n=I);const e=t+n*.5;return this.getPointAtAngle(e)}get length(){return this.closed?2*Math.PI*this.radius:Math.abs(this.deltaAngle*this.radius)}get area(){return this.closed?Math.PI*this.radius*this.radius:0}nearestPoint(t){const n=new A(t.x,t.y,t.z||0),e=this.center,s=this.normal,r=n.clone().sub(e).dot(s),a=n.clone().sub(s.clone().multiplyScalar(r)).clone().sub(e);if(a.lengthSq()===0)return this.startPoint.clone();a.normalize().multiplyScalar(this.radius);const c=e.clone().add(a),l=this.getAngle(c.clone()),u=this.startAngle,d=this.deltaAngle;let m=w.normalizeAngle(l-u);m<0&&(m=0),m>d&&(m=d);const g=this.getPointAtAngle(u+m),y=g.distanceTo(n),x=this.startPoint.distanceTo(n),f=this.endPoint.distanceTo(n);return x<y&&x<=f?this.startPoint.clone():f<y&&f<x?this.endPoint.clone():g}tangentPoints(t){const n=[],e=new A(t.x,t.y,t.z||0),s=this.center,i=this.normal,r=this.radius,a=e.clone().sub(s).dot(i),c=e.clone().sub(i.clone().multiplyScalar(a)),l=s.clone(),d=c.clone().sub(l).length();if(d<r)return n;const m=Math.acos(r/d),g=this.getAngle(c.clone()),y=[g+m,g-m];for(const x of y){const f=w.normalizeAngle(x-this.startAngle);f>=0&&f<=this.deltaAngle&&n.push(this.getPointAtAngle(this.startAngle+f))}return n}perpendicularPoints(t){const n=[],e=new A(t.x,t.y,t.z||0),s=this.center,i=this.normal,r=this.radius,a=e.clone().sub(s).dot(i),l=e.clone().sub(i.clone().multiplyScalar(a)).clone().sub(s);if(l.lengthSq()<1e-24)return n;l.normalize();const u=[s.clone().add(l.clone().multiplyScalar(r)),s.clone().sub(l.clone().multiplyScalar(r))];for(const d of u){const m=this.getAngle(d.clone()),g=w.normalizeAngle(m-this.startAngle);g>=0&&g<=this.deltaAngle&&n.push(new M(d.x,d.y,d.z||0))}return n}nearestTangentPoint(t){const n=this.tangentPoints(t);if(n.length===0)return null;const e=new M(t.x,t.y,t.z||0);return n.length===1||n[0].distanceTo(e)<n[1].distanceTo(e)?n[0]:n[1]}calculateBoundingBox(){const t=[this.startAngle,this.endAngle];for(let a=0;a<2*Math.PI;a+=Math.PI/2)w.isBetweenAngle(a,this.startAngle,this.endAngle)&&t.push(a);let n=1/0,e=1/0,s=1/0,i=-1/0,r=-1/0,h=-1/0;for(const a of t){const c=this.getPointAtAngle(a);c.x<n&&(n=c.x),c.y<e&&(e=c.y),c.z<s&&(s=c.z),c.x>i&&(i=c.x),c.y>r&&(r=c.y),c.z>h&&(h=c.z)}return new W({x:n,y:e,z:s},{x:i,y:r,z:h})}get closed(){return Math.abs(this.endAngle-this.startAngle)/Math.PI%2==0}getPoints(t){const n=[];let e=this.deltaAngle,s=this.startAngle;this.closed&&(e=I,s=0);for(let i=0;i<=t;i++){const r=s+e*(i/t),h=this.getPointAtAngle(r);n.push(h)}return n}transform(t){const n=this.center.clone().applyMatrix4(t),e=this.startPoint.clone().applyMatrix4(t),s=this.endPoint.clone().applyMatrix4(t),i=this.getPointAtAngle(this.closed?Math.PI/2:this.startAngle+this.deltaAngle/2).clone().applyMatrix4(t),r=new A(e).sub(n).normalize(),h=n.distanceTo(e);let a=new A().crossVectors(new A(e).sub(n),new A(i).sub(n)).normalize();a.lengthSq()===0&&(a=this.normal.clone().transformDirection(t));const c=l=>{const u=new A(l).sub(n);return Math.atan2(u.dot(te.crossVectors(a,r)),u.dot(r))};return this.center=n,this.radius=h,this.normal=a,this.refVec=r,this.startAngle=0,this.endAngle=this.closed?I:c(s),this._boundingBoxNeedsUpdate=!0,this}copy(t){return this.center=t.center,this.radius=t.radius,this.startAngle=t.startAngle,this.endAngle=t.endAngle,this.normal=t.normal,this.refVec=t.refVec,this._boundingBoxNeedsUpdate=!0,this}clone(){return new lt(this.center.clone(),this.radius,this.startAngle,this.endAngle,this.normal,this.refVec)}getAngle(t){return t.sub(this.center),Math.atan2(t.dot(te.crossVectors(this.refVec,this.normal)),t.dot(this.refVec))}getPointAtAngle(t){const n=this.normal,e=this.refVec,s={x:n.y*e.z-n.z*e.y,y:n.z*e.x-n.x*e.z,z:n.x*e.y-n.y*e.x},i=this.center,r=this.radius;return new M(i.x+r*(e.x*Math.cos(t)+s.x*Math.sin(t)),i.y+r*(e.y*Math.cos(t)+s.y*Math.sin(t)),i.z+r*(e.z*Math.cos(t)+s.z*Math.sin(t)))}get plane(){const t=new A(this.center).distanceTo(Ot);return new yt(this.normal,t)}offset(t){const n=this.radius+t;return n<=0?null:new lt(this.center,n,this.startAngle,this.endAngle,this.normal,this.refVec)}}const te=new A;class rt extends at{constructor(t,n,e,s=0,i=I,r=!1,h=0){super(),this.center=t,this.majorAxisRadius=n,this.minorAxisRadius=e,(i-s)%I==0?(this.startAngle=0,this.endAngle=I):(this.startAngle=s,this.endAngle=i),this.clockwise=r,this.rotation=h}get center(){return this._center}set center(t){this._center=new M(t.x,t.y,t.z||0),this._boundingBoxNeedsUpdate=!0}get majorAxisRadius(){return this._majorAxisRadius}set majorAxisRadius(t){if(t<0)throw V.AcCmErrors.ILLEGAL_PARAMETERS;this._majorAxisRadius=t,this._boundingBoxNeedsUpdate=!0}get minorAxisRadius(){return this._minorAxisRadius}set minorAxisRadius(t){if(t<0)throw V.AcCmErrors.ILLEGAL_PARAMETERS;this._minorAxisRadius=t,this._boundingBoxNeedsUpdate=!0}get startAngle(){return this._startAngle}set startAngle(t){this._startAngle=w.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._endAngle}set endAngle(t){this._endAngle=this.startAngle==0&&t==I?t:w.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get clockwise(){return this._clockwise}set clockwise(t){this._clockwise=t,this._boundingBoxNeedsUpdate=!0}get rotation(){return this._rotation}set rotation(t){this._rotation=t,this._boundingBoxNeedsUpdate=!0}get deltaAngle(){return w.normalizeAngle(this.endAngle-this.startAngle)}get isLargeArc(){return Math.abs(this.deltaAngle)>Math.PI?1:0}calculateBoundingBox(){let n=1/0,e=1/0,s=-1/0,i=-1/0;for(let r=0;r<=100;r++){const h=this.getPoint(r/100);n=Math.min(n,h.x),e=Math.min(e,h.y),s=Math.max(s,h.x),i=Math.max(i,h.y)}return new Y({x:n,y:e},{x:s,y:i})}get closed(){return this.deltaAngle==0}getPoint(t){const n=Math.PI*2;let e=this.endAngle-this.startAngle;const s=Math.abs(e)<Number.EPSILON;for(;e<0;)e+=n;for(;e>n;)e-=n;e<Number.EPSILON&&(s?e=0:e=n),this.clockwise===!0&&!s&&(e===n?e=-n:e=e-n);const i=this.startAngle+t*e;let r=this.center.x+this.majorAxisRadius*Math.cos(i),h=this.center.y+this.minorAxisRadius*Math.sin(i);if(this.rotation!==0){const a=Math.cos(this.rotation),c=Math.sin(this.rotation),l=r-this.center.x,u=h-this.center.y;r=l*a-u*c+this.center.x,h=l*c+u*a+this.center.y}return new P(r,h)}transform(t){const n=t,e=new P(this.center).applyMatrix2d(n),s=new M(e.x,e.y,this.center.z),i=this.getPointAtAngle(0).clone().applyMatrix2d(n),r=this.getPointAtAngle(Math.PI/2).clone().applyMatrix2d(n),h=new P(i).sub(e),a=new P(r).sub(e),c=h.length(),l=a.length(),u=Math.atan2(h.y,h.x),d=h.clone().normalize(),m=a.clone().normalize(),g=f=>{const b=new P(f).sub(e),p=b.dot(d),C=b.dot(m);return w.normalizeAngle(Math.atan2(C/l,p/c))},y=n.determinant()<0?!this.clockwise:this.clockwise,x=this.closed?new rt(s,c,l,0,I,y,u):new rt(s,c,l,g(this.startPoint.clone().applyMatrix2d(n)),g(this.endPoint.clone().applyMatrix2d(n)),y,u);return this.center=x.center,this.majorAxisRadius=x.majorAxisRadius,this.minorAxisRadius=x.minorAxisRadius,this._startAngle=x._startAngle,this._endAngle=x._endAngle,this._clockwise=x._clockwise,this.rotation=x.rotation,this._boundingBoxNeedsUpdate=!0,this}getPointAtAngle(t){return this.getPoint(this.closed?t/I:w.normalizeAngle(t-this.startAngle)/this.deltaAngle)}copy(t){return this.center=t.center,this.majorAxisRadius=t.majorAxisRadius,this.minorAxisRadius=t.minorAxisRadius,this.startAngle=t.startAngle,this.endAngle=t.endAngle,this.clockwise=t.clockwise,this.rotation=t.rotation,this}clone(){return new rt(this.center,this.majorAxisRadius,this.minorAxisRadius,this.startAngle,this.endAngle,this.clockwise,this.rotation)}getFocusPoints(){const t=Math.max(this.majorAxisRadius,this.minorAxisRadius),n=Math.min(this.majorAxisRadius,this.minorAxisRadius);if(t-n<1e-9)return[];const e=Math.sqrt(t*t-n*n),s=Math.cos(this.rotation),i=Math.sin(this.rotation),r=this.majorAxisRadius>=this.minorAxisRadius,h=r?s:-i,a=r?i:s;return[new P(this.center.x-e*h,this.center.y-e*a),new P(this.center.x+e*h,this.center.y+e*a)]}getQuadrantPoints(){return this.closed?[this.getPoint(0),this.getPoint(.25),this.getPoint(.5),this.getPoint(.75)]:[]}nearestPoint(t){const n=new P(t.x,t.y);let e=this.getPoint(0),s=n.distanceToSquared(e);const i=72;for(let r=1;r<=i;r++){const h=this.getPoint(r/i),a=n.distanceToSquared(h);a<s&&(s=a,e=h)}return e}tangentPoints(t){const n=this._projectPointToLocal(t);return this._findSnapAngles(n,(s,i,r,h)=>{const a=-this.majorAxisRadius*h,c=this.minorAxisRadius*r;return(s-n.x)*c-(i-n.y)*a}).map(s=>this.getPointAtAngle(s))}perpendicularPoints(t){const n=this._projectPointToLocal(t);return this._findSnapAngles(n,(s,i,r,h)=>{const a=this.minorAxisRadius*r,c=this.majorAxisRadius*h;return(s-n.x)*c-(i-n.y)*a}).map(s=>this.getPointAtAngle(s))}_projectPointToLocal(t){const n=t.x-this.center.x,e=t.y-this.center.y,s=Math.cos(-this.rotation),i=Math.sin(-this.rotation);return{x:n*s-e*i,y:n*i+e*s}}_findSnapAngles(t,n,e=144){const s=this.majorAxisRadius,i=this.minorAxisRadius,r=this.startAngle,h=this.deltaAngle,a=[],c=d=>{const m=Math.cos(d),g=Math.sin(d);return n(s*m,i*g,m,g)};let l=r,u=c(l);for(let d=1;d<=e;d++){const m=r+h*d/e,g=c(m);if(Math.abs(u)<1e-10&&a.push(l),u*g<0){let y=l,x=m;for(let f=0;f<32;f++){const b=(y+x)/2;c(y)*c(b)<=0?x=b:y=b}a.push((y+x)/2)}l=m,u=g}return a}}class ut extends ft{constructor(t,n,e,s,i,r=0,h=I){super(),this.center=t,this.normal=n,this.majorAxis=e,this.majorAxisRadius=s,this.minorAxisRadius=i;const a=Math.abs(h-r);Math.abs(a-I)<1e-10||Math.abs(a-2*I)<1e-10?(this.startAngle=0,this.endAngle=I):(this.startAngle=r,this.endAngle=h)}get center(){return this._center}set center(t){this._center=new M(t.x,t.y,t.z||0),this._boundingBoxNeedsUpdate=!0}get majorAxisRadius(){return this._majorAxisRadius}set majorAxisRadius(t){if(t<0)throw V.AcCmErrors.ILLEGAL_PARAMETERS;this._majorAxisRadius=t,this._boundingBoxNeedsUpdate=!0}get minorAxisRadius(){return this._minorAxisRadius}set minorAxisRadius(t){if(t<0)throw V.AcCmErrors.ILLEGAL_PARAMETERS;this._minorAxisRadius=t,this._boundingBoxNeedsUpdate=!0}get startAngle(){return this._startAngle}set startAngle(t){this._startAngle=w.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._endAngle}set endAngle(t){this._endAngle=this.startAngle==0&&t==I?t:w.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get deltaAngle(){const t=this.endAngle-this.startAngle;return Math.abs(t-I)<1e-10?I:w.normalizeAngle(t)}get isLargeArc(){return Math.abs(this.deltaAngle)>Math.PI?1:0}get clockwise(){return this.deltaAngle<=0}get normal(){return this._normal}set normal(t){this._normal=new A(t.x,t.y,t.z),this._normal.normalize(),this._boundingBoxNeedsUpdate=!0}get majorAxis(){return this._majorAxis}set majorAxis(t){this._majorAxis=new A(t.x,t.y,t.z),this._majorAxis.normalize(),this._boundingBoxNeedsUpdate=!0}get minorAxis(){return new A().crossVectors(this.normal,this.majorAxis).normalize()}get startPoint(){return this.getPointAtAngle(this._startAngle)}get endPoint(){return this.getPointAtAngle(this._endAngle)}get midPoint(){let t=this.startAngle,n=this.deltaAngle;(this.closed||Math.abs(n-I)<1e-10)&&(t=0,n=I);const e=t+n/2;return this.getPointAtAngle(e)}get isCircular(){return B.equal(this.majorAxisRadius,this.minorAxisRadius)}get length(){if(this.isCircular)return this.majorAxisRadius*Math.abs(this.deltaAngle);const t=1e3,n=this.deltaAngle/t;let e=0,s=this.getPointAtAngle(this.startAngle);for(let i=1;i<=t;i++){const r=this.startAngle+i*n,h=this.getPointAtAngle(r),a=h.x-s.x,c=h.y-s.y,l=h.z-s.z;e+=Math.sqrt(a*a+c*c+l*l),s=h}return e}get area(){return Math.abs(this.deltaAngle-I)>=1e-10?0:Math.PI*this.majorAxisRadius*this.minorAxisRadius}calculateBoundingBox(){if(this.majorAxis.equals(A.X_AXIS)||this.majorAxis.equals(A.Y_AXIS)||this.majorAxis.isParallelTo(A.X_AXIS)||this.majorAxis.isParallelTo(A.Y_AXIS)){const t=[this.startAngle,this.endAngle];for(let a=0;a<2*Math.PI;a+=Math.PI/2)w.isBetweenAngle(a,this.startAngle,this.endAngle)&&t.push(a);let n=1/0,e=1/0,s=1/0,i=-1/0,r=-1/0,h=-1/0;for(const a of t){const c=this.getPointAtAngle(a);c.x<n&&(n=c.x),c.y<e&&(e=c.y),c.z<s&&(s=c.z),c.x>i&&(i=c.x),c.y>r&&(r=c.y),c.z>h&&(h=c.z)}return new W({x:n,y:e,z:s},{x:i,y:r,z:h})}else{let n=1/0,e=1/0,s=1/0,i=-1/0,r=-1/0,h=-1/0;for(let a=0;a<=100;a++){const c=this.startAngle+this.deltaAngle*(a/100),l=this.getPointAtAngle(c);n=Math.min(n,l.x),e=Math.min(e,l.y),s=Math.min(s,l.z),i=Math.max(i,l.x),r=Math.max(r,l.y),h=Math.max(h,l.z)}return new W({x:n,y:e,z:s},{x:i,y:r,z:h})}}get closed(){return this.deltaAngle==0}getPoints(t=100){const n=[];let e=this.deltaAngle,s=this.startAngle;this.closed&&(e=I,s=0);for(let i=0;i<=t;i++){const r=s+e*(i/t),h=this.getPointAtAngle(r);n.push(h)}return n}getPointAtAngle(t){const n=Math.cos(t),e=Math.sin(t),s=this.minorAxis.clone().multiplyScalar(this.minorAxisRadius).multiplyScalar(e),i=this.majorAxis.clone().multiplyScalar(n*this.majorAxisRadius).add(s);return new M(this.center.x+i.x,this.center.y+i.y,this.center.z+i.z)}nearestPoint(t,n=72){const e=new M(t.x,t.y,t.z||0);let s=this.getPointAtAngle(this.startAngle),i=e.distanceToSquared(s);for(let a=1;a<=n;a++){const c=this.startAngle+this.deltaAngle*a/n,l=this.getPointAtAngle(c),u=e.distanceToSquared(l);u<i&&(i=u,s=l)}const r=e.distanceToSquared(this.startPoint),h=e.distanceToSquared(this.endPoint);return r<i&&r<=h?this.startPoint.clone():h<i&&h<r?this.endPoint.clone():s.clone()}tangentPoints(t){const n=this._projectPointToLocalPlane(t);return this._findSnapParameterAngles((s,i,r,h)=>{const a=-this.majorAxisRadius*h,c=this.minorAxisRadius*r;return(s-n.x)*c-(i-n.y)*a}).map(s=>this.getPointAtAngle(s))}perpendicularPoints(t){const n=this._projectPointToLocalPlane(t);return this._findSnapParameterAngles((s,i,r,h)=>{const a=this.minorAxisRadius*r,c=this.majorAxisRadius*h;return(s-n.x)*c-(i-n.y)*a}).map(s=>this.getPointAtAngle(s))}_projectPointToLocalPlane(t){const n=new M(t.x,t.y,t.z||0),e=new A(n).sub(this.center),s=e.dot(this.normal);return e.sub(this.normal.clone().multiplyScalar(s)),{x:e.dot(this.majorAxis),y:e.dot(this.minorAxis)}}_findSnapParameterAngles(t,n=144){const e=this.majorAxisRadius,s=this.minorAxisRadius,i=this.startAngle,r=this.deltaAngle,h=[],a=u=>{const d=Math.cos(u),m=Math.sin(u);return t(e*d,s*m,d,m)};let c=i,l=a(c);for(let u=1;u<=n;u++){const d=i+r*u/n,m=a(d);if(Math.abs(l)<1e-10&&h.push(c),l*m<0){let g=c,y=d;for(let x=0;x<32;x++){const f=(g+y)/2;a(g)*a(f)<=0?y=f:g=f}h.push((g+y)/2)}c=d,l=m}return h}contains(t){const n=new A(t).sub(this.center),e=n.dot(this.majorAxis),s=n.dot(this.minorAxis),i=e/this.majorAxisRadius,r=s/this.minorAxisRadius;return i*i+r*r<=1}transform(t){const n=t,e=this.center.clone().applyMatrix4(n),s=this.getPointAtAngle(0).clone().applyMatrix4(n),i=this.getPointAtAngle(Math.PI/2).clone().applyMatrix4(n),r=new A(s).sub(e),h=new A(i).sub(e),a=r.length(),c=h.length(),l=r.clone().normalize(),u=new A().crossVectors(r,h).normalize();let d=new A().crossVectors(u,l).normalize();d.dot(h)<0&&(u.negate(),d=new A().crossVectors(u,l).normalize());const m=y=>{const x=new A(y).sub(e),f=x.dot(l),b=x.dot(d);return w.normalizeAngle(Math.atan2(b/c,f/a))},g=this.closed?new ut(e,u,l,a,c,0,I):new ut(e,u,l,a,c,m(this.startPoint.clone().applyMatrix4(n)),m(this.endPoint.clone().applyMatrix4(n)));return this.center=g.center,this.normal=g.normal,this.majorAxis=g.majorAxis,this.majorAxisRadius=g.majorAxisRadius,this.minorAxisRadius=g.minorAxisRadius,this._startAngle=g._startAngle,this._endAngle=g._endAngle,this._boundingBoxNeedsUpdate=!0,this}copy(t){return this.center=t.center,this.normal=t.normal,this.majorAxis=t.majorAxis,this.majorAxisRadius=t.majorAxisRadius,this.minorAxisRadius=t.minorAxisRadius,this.startAngle=t.startAngle,this.endAngle=t.endAngle,this._boundingBoxNeedsUpdate=!0,this}clone(){return new ut(this.center,this.normal,this.majorAxis,this.majorAxisRadius,this.minorAxisRadius,this.startAngle,this.endAngle)}get plane(){const t=new A(this.center).distanceTo(Ot);return new yt(this.normal,t)}offset(t){const n=this.majorAxisRadius+t,e=this.minorAxisRadius+t;return n<=0||e<=0?null:new ut(this.center,this.normal,this.majorAxis,n,e,this.startAngle,this.endAngle)}}class _t extends at{constructor(t,n){super(),this._start=new P(t),this._end=new P(n)}get startPoint(){return this._start}set startPoint(t){this._start.copy(t),this._boundingBoxNeedsUpdate=!0}get endPoint(){return this._end}set endPoint(t){this._end.copy(t),this._boundingBoxNeedsUpdate=!0}getPoints(){return[this.startPoint,this.endPoint]}get length(){return this.startPoint.distanceTo(this.endPoint)}calculateBoundingBox(){const t=new P(Math.min(this._start.x,this._end.x),Math.min(this._start.y,this._end.y)),n=new P(Math.max(this._start.x,this._end.x),Math.max(this._start.y,this._end.y));return new Y(t,n)}transform(t){return this._start.applyMatrix2d(t),this._end.applyMatrix2d(t),this._boundingBoxNeedsUpdate=!0,this}get closed(){return!1}copy(t){return this.startPoint=t.startPoint,this.endPoint=t.endPoint,this._boundingBoxNeedsUpdate=!0,this}clone(){return new _t(this._start.clone(),this._end.clone())}project(t){const n=this._end.x-this._start.x,e=this._end.y-this._start.y,s=n*n+e*e;if(s<1e-18)return this._start.clone();let i=((t.x-this._start.x)*n+(t.y-this._start.y)*e)/s;return i=Math.max(0,Math.min(1,i)),new P(this._start.x+i*n,this._start.y+i*e)}nearestPoint(t){return this.project(t)}}class sn{constructor(){this.c0=0,this.c1=0,this.c2=0,this.c3=0}init(t,n,e,s){this.c0=t,this.c1=e,this.c2=-3*t+3*n-2*e-s,this.c3=2*t-2*n+e+s}initCatmullRom(t,n,e,s,i){this.init(n,e,i*(e-t),i*(s-n))}initNonuniformCatmullRom(t,n,e,s,i,r,h){let a=(n-t)/i-(e-t)/(i+r)+(e-n)/r,c=(e-n)/r-(s-n)/(r+h)+(s-e)/h;a*=r,c*=r,this.init(n,e,a,c)}calc(t){const n=t*t,e=n*t;return this.c0+this.c1*t+this.c2*n+this.c3*e}}class Et extends ft{constructor(t=[],n=!1,e="centripetal",s=.5){super(),this.isCatmullRomCurve3d=!0,this.type="CatmullRomCurve3d",this._tmp=new A,this._px=new sn,this._py=new sn,this._pz=new sn,this._points=t.map(i=>new M(i)),this._closed=n,this._curveType=e,this._tension=s}get points(){return this._points}get closed(){return this._closed}get curveType(){return this._curveType}get tension(){return this._tension}get startPoint(){return this._points.length>0?this._points[0]:new M}get endPoint(){return this._points.length>0?this._points[this._points.length-1]:new M}get length(){if(this._points.length<2)return 0;let t=0;for(let n=1;n<this._points.length;n++)t+=this._points[n-1].distanceTo(this._points[n]);return this._closed&&this._points.length>2&&(t+=this._points[this._points.length-1].distanceTo(this._points[0])),t}getPoint(t,n=new M){const e=n,s=this._points,i=s.length;if(i===0)return e.set(0,0,0);if(i===1)return e.copy(s[0]);const r=(i-(this._closed?0:1))*t;let h=Math.floor(r),a=r-h;this._closed?h+=h>0?0:(Math.floor(Math.abs(h)/i)+1)*i:a===0&&h===i-1&&(h=i-2,a=1);let c,l;this._closed||h>0?c=s[(h-1)%i]:(this._tmp.subVectors(s[0],s[1]).add(s[0]),c=new M(this._tmp.x,this._tmp.y,this._tmp.z));const u=s[h%i],d=s[(h+1)%i];if(this._closed||h+2<i?l=s[(h+2)%i]:(this._tmp.subVectors(s[i-1],s[i-2]).add(s[i-1]),l=new M(this._tmp.x,this._tmp.y,this._tmp.z)),this._curveType==="centripetal"||this._curveType==="chordal"){const m=this._curveType==="chordal"?.5:.25;let g=Math.pow(c.distanceToSquared(u),m),y=Math.pow(u.distanceToSquared(d),m),x=Math.pow(d.distanceToSquared(l),m);y<1e-4&&(y=1),g<1e-4&&(g=y),x<1e-4&&(x=y),this._px.initNonuniformCatmullRom(c.x,u.x,d.x,l.x,g,y,x),this._py.initNonuniformCatmullRom(c.y,u.y,d.y,l.y,g,y,x),this._pz.initNonuniformCatmullRom(c.z,u.z,d.z,l.z,g,y,x)}else this._curveType==="catmullrom"&&(this._px.initCatmullRom(c.x,u.x,d.x,l.x,this._tension),this._py.initCatmullRom(c.y,u.y,d.y,l.y,this._tension),this._pz.initCatmullRom(c.z,u.z,d.z,l.z,this._tension));return e.set(this._px.calc(a),this._py.calc(a),this._pz.calc(a)),e}getPoints(t){const n=[];for(let e=0;e<=t;e++)n.push(this.getPoint(e/t));return n}setPoints(t){this._points=t.map(n=>new M(n)),this._boundingBoxNeedsUpdate=!0}setClosed(t){this._closed!==t&&(this._closed=t,this._boundingBoxNeedsUpdate=!0)}setCurveType(t){this._curveType=t}setTension(t){this._tension=t}clone(){return new Et(this._points.map(t=>t.clone()),this._closed,this._curveType,this._tension)}transform(t){return this._points=this._points.map(n=>{const e=new M;return e.copy(n),e.applyMatrix4(t),e}),this._boundingBoxNeedsUpdate=!0,this}calculateBoundingBox(){if(this._points.length===0)return new W;const t=new W;return this._points.forEach(n=>{t.expandByPoint(n)}),t}}function ne(o,t){const n=o.x-t[0],e=o.y-t[1],s=(o.z??0)-(t[2]??0);return n*n+e*e+s*s}class j{constructor(t,n,e,s){this._degree=t,this._knots=[...n],this._controlPoints=e.map(i=>({x:i.x,y:i.y,z:i.z})),this._weights=s?[...s]:new Array(e.length).fill(1)}degree(){return this._degree}knots(){return[...this._knots]}controlPoints(){return this._controlPoints.map(t=>({x:t.x,y:t.y,z:t.z}))}weights(){return[...this._weights]}clone(){return new j(this._degree,this._knots,this._controlPoints,this._weights)}point(t){return this.evaluate(t).point}evaluate(t){const n=this._controlPoints.map(e=>[e.x,e.y,e.z]);return Rn(t,this._degree,this._knots,n,this._weights)}signedPlanarCurvatureAt(t){const n=this.evaluate(t);return kn(n.deriv1,n.deriv2)}getOffsetSamplePath2d(t,n=512){const e=Math.abs(t),{start:s,end:i}=this.getParameterRange(),r=this.length(),h=Math.max(64,Math.ceil(r/Math.max(e*.2,1e-6)));let a=ss(s,i,Math.min(h,n));for(let u=0;u<8&&a.length<n;u++){const d=[];for(let m=0;m<a.length-1;m++){const g=a[m],y=a[m+1],x=(g+y)/2,f=Math.max(Math.abs(this.signedPlanarCurvatureAt(g)),Math.abs(this.signedPlanarCurvatureAt(y)),Math.abs(this.signedPlanarCurvatureAt(x)));e*f>.85&&d.push(x)}if(d.length===0)break;if(a=is(a,d),a.length>n){a=a.slice(0,n);break}}const c=[],l=[];return a.forEach(u=>{const d=this.evaluate(u);c.push(new P(d.point[0],d.point[1]));const m=d.deriv1[0],g=d.deriv1[1],y=Math.hypot(m,g);l.push(y>1e-10?new P(m/y,g/y):new P(1,0))}),{points:c,tangents:l}}length(){const t=this._controlPoints.map(n=>[n.x,n.y,n.z]);return Nn(this._degree,this._knots,t,this._weights)}static byKnotsControlPointsWeights(t,n,e,s){return new j(t,n,e,s)}static byPoints(t,n,e="Uniform",s,i){const r=Gt(t,n,e,s,i),h=r.controlPoints.map(a=>({x:a[0],y:a[1],z:a[2]}));return new j(n,r.knots,h,r.weights)}getParameterRange(){const t=this._knots[this._degree],n=this._knots[this._knots.length-this._degree-1];return{start:t,end:n}}getPoints(t){const n=[],{start:e,end:s}=this.getParameterRange();for(let i=0;i<=t;i++){const r=e+(s-e)*(i/t);n.push(this.point(r))}return n}isClosed(t=1e-6){const{start:n,end:e}=this.getParameterRange(),s=this.point(n),i=this.point(e),r=s[0]-i[0],h=s[1]-i[1],a=s[2]-i[2];return Math.sqrt(r*r+h*h+a*a)<t}static createFitPointsForClosedCurve(t){if(t.length<4)throw new Error("At least 4 points are required for a closed NURBS curve");const n=new Et(t,!0,"centripetal"),e=Math.max(50,t.length*2);return n.getPoints(e)}nearestPoint(t,n=64){const{start:e,end:s}=this.getParameterRange();let i=this.point(e),r=ne(t,i);for(let h=0;h<=n;h++){const a=e+(s-e)*h/n,c=this.point(a),l=ne(t,c);l<r&&(r=l,i=c)}return{x:i[0],y:i[1],z:i[2]??0}}static createClosedCurve(t,n,e="Chord"){const i=this.createFitPointsForClosedCurve(t).map(r=>[r.x,r.y,r.z]);return j.byPoints(i,n,e)}}function ss(o,t,n){if(n<2)return[o,t];const e=[];for(let s=0;s<n;s++)e.push(s===n-1?t:o+(t-o)*s/(n-1));return e}function is(o,t){const n=[...o,...t].sort((s,i)=>s-i),e=[];return n.forEach(s=>{const i=e[e.length-1];(i===void 0||Math.abs(i-s)>1e-10)&&e.push(s)}),e}function ee(o){if(!o)return!1;const t=o.x??0,n=o.y??0,e=o.z??0;return t*t+n*n+e*e>1e-20}function rs(o,t,n){let e=o??0;return e<1&&n>0&&t>0&&(e=n-t-1),e<1&&(e=3),e=Math.min(e,t-1),Math.max(1,e)}function os(o,t,n){let e=o??0;e<1&&(e=3);const s=t+n-1;return e=Math.min(e,s),Math.max(1,e)}function hs(o,t){if(!(!o||o.length!==t))return o}class D extends ft{constructor(t,n,e,s,i,r){super();const h=arguments.length;if(this._degree=3,this._closed=!1,Array.isArray(n)){if(h<2||h>5)throw V.AcCmErrors.ILLEGAL_PARAMETERS;this._controlPoints=t;let a,c=3,l=!1;if(h>=3&&(Array.isArray(e)?(a=e,h>=4&&(c=s||3),h>=5&&(l=i)):e!==void 0&&(c=e||3,h>=4&&(l=s))),e===void 0&&h>=4&&(c=s||3,h>=5&&(l=i)),this._degree=c,this._closed=l,this._controlPoints.length<this._degree+1)throw V.AcCmErrors.ILLEGAL_PARAMETERS;this._nurbsCurve=j.byKnotsControlPointsWeights(this._degree,n,this._controlPoints,a)}else{if(h<2||h>6)throw V.AcCmErrors.ILLEGAL_PARAMETERS;this._fitPoints=t,this._knotParameterization=n,h>=3&&(this._degree=e||3);const a=typeof s=="boolean";h>=4&&a&&(this._closed=s),a?(h>=5&&(this._startTangent=i),h>=6&&(this._endTangent=r)):(h>=4&&(this._startTangent=s),h>=5&&(this._endTangent=i)),this._closed&&(this._startTangent=void 0,this._endTangent=void 0);const c=(this._startTangent?1:0)+(this._endTangent?1:0);if(this._fitPoints.length+c<this._degree+1)throw V.AcCmErrors.ILLEGAL_PARAMETERS;if(this._closed)this._nurbsCurve=j.createClosedCurve(this._fitPoints,this._degree,this._knotParameterization);else{const l=this.toNurbsPoints(this._fitPoints);this._nurbsCurve=j.byPoints(l,this._degree,this._knotParameterization,this._startTangent?this.toNurbsPoint(this._startTangent):void 0,this._endTangent?this.toNurbsPoint(this._endTangent):void 0)}this._controlPoints=this.toGePoints(this._nurbsCurve.controlPoints().map(l=>[l.x,l.y,l.z||0]))}}buildCurve(){if(this._fitPoints&&this._knotParameterization){if(this._closed){const t=j.createFitPointsForClosedCurve(this._fitPoints),n=this.toNurbsPoints(t);this._nurbsCurve=j.byPoints(n,this._degree,this._knotParameterization)}else{const t=this.toNurbsPoints(this._fitPoints);this._nurbsCurve=j.byPoints(t,this._degree,this._knotParameterization,this._startTangent?this.toNurbsPoint(this._startTangent):void 0,this._endTangent?this.toNurbsPoint(this._endTangent):void 0)}this._controlPoints=this.toGePoints(this._nurbsCurve.controlPoints().map(t=>[t.x,t.y,t.z||0]))}else if(this._controlPoints)if(this._closed){const t=j.createFitPointsForClosedCurve(this._controlPoints),n=this.toNurbsPoints(t);this._nurbsCurve=j.byPoints(n,this._degree,this._knotParameterization),this._controlPoints=this.toGePoints(this._nurbsCurve.controlPoints().map(e=>[e.x,e.y,e.z||0]))}else{const t=this._nurbsCurve.knots(),n=this._nurbsCurve.weights();this._nurbsCurve=j.byKnotsControlPointsWeights(this._degree,t,this._controlPoints,n)}}setClosed(t){this._closed!==t&&(this._closed=t,this._boundingBoxNeedsUpdate=!0,this.buildCurve())}get degree(){return this._degree}get knotParameterization(){return this._knotParameterization}get controlPoints(){return this._controlPoints.map(U.point2dToPoint3d)}get fitPoints(){var t;return(t=this._fitPoints)==null?void 0:t.map(U.point2dToPoint3d)}get knots(){return[...this._nurbsCurve.knots()]}get weights(){return[...this._nurbsCurve.weights()]}get startPoint(){const t=this._nurbsCurve.knots(),n=this._nurbsCurve.degree(),e=t[n],s=this._nurbsCurve.point(e);return new M(s[0],s[1],s[2])}get endPoint(){const t=this._nurbsCurve.knots(),n=this._nurbsCurve.degree(),e=t[t.length-n-1],s=this._nurbsCurve.point(e);return new M(s[0],s[1],s[2])}get length(){return this._nurbsCurve.length()}nearestPoint(t,n=64){const e=this._nurbsCurve.nearestPoint(t,n);return new M(e.x,e.y,e.z||0)}evaluateAt(t){const n=this._nurbsCurve.point(t);return new M(n[0],n[1],n[2])}getFitPointAt(t){if(!this._fitPoints)throw new Error("No fit points in this spline");const n=this._fitPoints.length,e=t<0||t>=n?n-1:t,s=this._fitPoints[e];return U.point2dToPoint3d(s)}getControlPointAt(t){const n=this._controlPoints.length,e=t<0||t>=n?n-1:t;return this._controlPoints[e]}get isFitPointSpline(){return!!(this._fitPoints&&this._fitPoints.length>0&&this._knotParameterization)}get isControlPointSpline(){return!this.isFitPointSpline}getGripPoints(){return this.isFitPointSpline?this._fitPoints.map(t=>new M(t.x,t.y,t.z??0)):this._controlPoints.map(t=>new M(t.x,t.y,t.z??0))}moveGripPointsAt(t,n){return this.isFitPointSpline?(this.moveFitPointsAt(t,n),this):(this.moveControlPointsAt(t,n),this)}moveFitPointsAt(t,n){if(this._fitPoints){for(const e of t){if(!Number.isInteger(e)||e<0)continue;const s=this._fitPoints[e];s&&U.applyOffsetToPoint3d(s,n)}this._boundingBoxNeedsUpdate=!0,this.buildCurve()}}moveControlPointsAt(t,n){for(const e of t){if(!Number.isInteger(e)||e<0)continue;const s=this.getControlPointAt(e);s&&U.applyOffsetToPoint3d(s,n)}this.rebuildAfterControlPointMutation()}rebuildAfterControlPointMutation(){const t=this._nurbsCurve.knots(),n=this._nurbsCurve.weights();this.isFitPointSpline&&(this._fitPoints=void 0,this._knotParameterization=void 0,this._startTangent=void 0,this._endTangent=void 0),this._nurbsCurve=j.byKnotsControlPointsWeights(this._degree,t,this._controlPoints,n.length>0?n:void 0),this._boundingBoxNeedsUpdate=!0}getOffsetSamplePath2d(t){return this._nurbsCurve.getOffsetSamplePath2d(t)}getPoints(t=100){const n=this._nurbsCurve,e=[],s=n.knots(),i=this._nurbsCurve.degree(),r=s[i],h=s[s.length-i-1],a=(h-r)/(t-1);for(let c=0;c<t;c++){const l=c===t-1?h:r+c*a,u=n.point(l);e.push(new M(u[0],u[1],u[2]))}return e}getCurvePoints(t,n){const e=[],s=t.knots(),i=t.degree(),r=s[i],a=(s[s.length-i-1]-r)/(n-1);for(let c=0;c<n;c++){const l=r+c*a;e.push(t.point(l))}return e}calculateBoundingBox(){const t=this.getPoints(100);return new W().setFromPoints(t)}get closed(){return this._closed}set closed(t){this.setClosed(t)}get area(){if(!this._closed)return 0;const t=this.getPoints(128);return Fn(t)}transform(t){if(this._fitPoints&&this._knotParameterization)this._fitPoints=this._fitPoints.map(n=>new M(n).applyMatrix4(t)),this._startTangent&&(this._startTangent=new M(this._startTangent).transformDirection(t)),this._endTangent&&(this._endTangent=new M(this._endTangent).transformDirection(t)),this.buildCurve();else{const n=this._nurbsCurve.knots(),e=this._nurbsCurve.weights();this._controlPoints=this._controlPoints.map(s=>new M(s).applyMatrix4(t)),this._nurbsCurve=j.byKnotsControlPointsWeights(this._degree,n,this._controlPoints,e.length>0?e:void 0)}return this._boundingBoxNeedsUpdate=!0,this}clone(){return this._fitPoints&&this._knotParameterization?new D(this._fitPoints.map(U.point2dToPoint3d),this._knotParameterization,this._degree,this._closed,this._startTangent?U.point2dToPoint3d(this._startTangent):void 0,this._endTangent?U.point2dToPoint3d(this._endTangent):void 0):new D(this._controlPoints.map(U.point2dToPoint3d),this._nurbsCurve.knots(),this._nurbsCurve.weights(),this._degree,this._closed)}toNurbsPoints(t){const n=new Array(t.length);return t.forEach((e,s)=>{n[s]=[e.x,e.y,e.z||0]}),n}toGePoints(t){const n=new Array(t.length);return t.forEach((e,s)=>{n[s]={x:e[0],y:e[1],z:e[2]}}),n}toNurbsPoint(t){return[t.x,t.y,t.z||0]}static createClosedSpline(t,n="Uniform",e=3){if(t.length<e+1)throw new Error(`At least ${e+1} points are required for a degree ${e} closed spline`);return new D(t,n,e,!0)}static fromControlPoints(t,n,e,s,i){if(t.length<2||n.length<2)return null;const r=rs(s,t.length,n.length);if(t.length<r+1)return null;try{return new D(t,n,hs(e,t.length),r,i)}catch{return null}}static fromFitPoints(t,n,e,s,i,r){if(t.length<2)return null;const h=ee(i),a=ee(r),c=(h?1:0)+(a?1:0),l=os(e,t.length,c);if(t.length+c<l+1)return null;try{return h||a?new D(t,n,l,s,h?i:void 0,a?r:void 0):new D(t,n,l,s)}catch{return null}}static fromDwgSplineEdge(t){if(t.numberOfControlPoints>0&&t.numberOfKnots>0){const n=t.controlPoints.map(U.point2dToPoint3d);let e=!0;const s=t.controlPoints.map(i=>(i.weight==null&&(e=!1),i.weight||1));return D.fromControlPoints(n,t.knots,e?s:void 0,t.degree,!1)}if(t.numberOfFitData>0){const n=t.fitDatum.map(U.point2dToPoint3d);return D.fromFitPoints(n,"Uniform",t.degree,!1,t.startTangent?U.point2dToPoint3d(t.startTangent):void 0,t.endTangent?U.point2dToPoint3d(t.endTangent):void 0)}return null}}class X extends at{constructor(t=[]){super(),this._curves=t}get curves(){return this._curves}static buildFromEdges(t,n=.001){if(t.length===0)return[];const e=[...t],s=[],i=n*n,r=(h,a)=>{const c=h.x-a.x,l=h.y-a.y;return c*c+l*l<=i};for(;e.length>0;){const h=[],a=e.shift();h.push(a);const c=X.getEdgeStartPoint(a);let l=X.getEdgeEndPoint(a);if(!r(c,l))for(;e.length>0;){const u=X.findConnectingEdge(e,l,i);if(u.index<0)break;let d=e.splice(u.index,1)[0];if(u.reverse&&(d=X.reverseEdge(d)),h.push(d),l=X.getEdgeEndPoint(d),r(l,c))break}s.push(new X(h))}return s}add(t){this._curves.push(t),this._boundingBoxNeedsUpdate=!0}get numberOfEdges(){return this._curves.length}get startPoint(){if(this._curves.length>0){const t=this._curves[0].startPoint;return new P(t.x,t.y)}throw new Error("Start point does not exist in an empty loop.")}get endPoint(){return this.startPoint}get length(){let t=0;return this._curves.forEach(n=>{t+=n.length}),t}calculateBoundingBox(){const t=this.getPoints(100),n=new Y;return n.setFromPoints(t),n}transform(t){const n=new J().set(t.elements[0],t.elements[3],0,t.elements[6],t.elements[1],t.elements[4],0,t.elements[7],0,0,1,0,0,0,0,1);return this._curves.forEach(e=>{e instanceof D?e.transform(n):e.transform(t)}),this._boundingBoxNeedsUpdate=!0,this}clone(){return new X(this._curves.map(t=>t.clone()))}get closed(){return!0}getPoints(t){const n=[];return this.curves.forEach(e=>{e.getPoints(t).forEach(s=>{n.push(new P(s.x,s.y))})}),n}static findConnectingEdge(t,n,e){let s=-1,i=!1,r=Number.POSITIVE_INFINITY;for(let h=0;h<t.length;h++){const a=t[h],c=X.getEdgeStartPoint(a),l=X.getEdgeEndPoint(a),u=n.x-c.x,d=n.y-c.y,m=u*u+d*d;m<r&&(r=m,s=h,i=!1);const g=n.x-l.x,y=n.y-l.y,x=g*g+y*y;x<r&&(r=x,s=h,i=!0)}return r>e?{index:-1,reverse:!1}:{index:s,reverse:i}}static getEdgeStartPoint(t){const n=t.startPoint;return new P(n.x,n.y)}static getEdgeEndPoint(t){const n=t.endPoint;return new P(n.x,n.y)}static reverseEdge(t){return t instanceof _t?new _t(t.endPoint,t.startPoint):t instanceof K?X.reverseCircArcEdge(t):t instanceof rt?new rt(t.center,t.majorAxisRadius,t.minorAxisRadius,t.endAngle,t.startAngle,!t.clockwise,t.rotation):t instanceof D?X.reverseSplineEdge(t):t}static reverseCircArcEdge(t){const n=t.startPoint,e=t.endPoint,s=!t.clockwise,i=Math.atan2(e.y-t.center.y,e.x-t.center.x),r=Math.atan2(n.y-t.center.y,n.x-t.center.x),h=a=>{const c=w.normalizeAngle(a);return s?w.normalizeAngle(-c):c};return new K(t.center,t.radius,h(i),h(r),s)}static reverseSplineEdge(t){const n=[...t.controlPoints].reverse(),e=t.knots,s=e[0],i=e[e.length-1],r=e.map(c=>s+i-c).reverse(),h=t.weights,a=h.length>0?[...h].reverse():void 0;return new D(n,r,a,t.degree,t.closed)}}_.AcGeArea2d=en,_.AcGeBox2d=Y,_.AcGeBox3d=W,_.AcGeCatmullRomCurve3d=Et,_.AcGeCircArc2d=K,_.AcGeCircArc3d=lt,_.AcGeCurve2d=at,_.AcGeEllipseArc2d=rt,_.AcGeEllipseArc3d=ut,_.AcGeEuler=Yt,_.AcGeGeometryUtil=U,_.AcGeLine2d=_t,_.AcGeLine3d=ct,_.AcGeLoop2d=X,_.AcGeMathUtil=w,_.AcGeMatrix2d=ot,_.AcGeMatrix3d=J,_.AcGeNurbsCurve=j,_.AcGePlane=yt,_.AcGePoint2d=P,_.AcGePoint3d=M,_.AcGePolyline2d=st,_.AcGeQuaternion=gt,_.AcGeShape2d=Jt,_.AcGeSpline3d=D,_.AcGeTol=B,_.AcGeVector2d=R,_.AcGeVector3d=A,_.DEFAULT_TOL=wt,_.DEG2RAD=vt,_.FLOAT_TOL=$,_.ORIGIN_POINT_2D=se,_.ORIGIN_POINT_3D=Ot,_.RAD2DEG=qt,_.TAU=I,_.acGeClosedPolygonArea2d=Un,_.acGeClosedPolygonArea3d=Fn,_.acGePolygonArea2d=Vn,_.acGePolygonArea3d=Ln,_.acGeSignedPolygonArea2d=$t,_.basisFunction=et,_.calculateCurveLength=Nn,_.ceilPowerOfTwo=Pn,_.clamp=Q,_.computeParameterValues=Tn,_.damp=cn,_.degToRad=fn,_.euclideanModulo=Vt,_.evaluateNurbsDerivatives=Rn,_.evaluateNurbsPoint=xt,_.floorPowerOfTwo=pn,_.generateAveragedKnots=Bn,_.generateChordKnots=me,_.generateSqrtChordKnots=ge,_.generateUUID=on,_.generateUniformKnots=de,_.getOcsAngle=pe,_.getOcsReferenceVector=Ae,_.intPartLength=Ut,_.interpolateControlPoints=xe,_.interpolateNurbsCurve=Gt,_.inverseLerp=an,_.isBetween=wn,_.isBetweenAngle=Mn,_.isPowerOfTwo=An,_.lerp=Lt,_.mapLinear=hn,_.normalizeAngle=mt,_.offsetPointByDirectionInXY=Ge,_.offsetSmoothedSampledPath=Ke,_.offsetVertexPath=We,_.pingpong=ln,_.radToDeg=_n,_.randFloat=gn,_.randFloatSpread=yn,_.randInt=mn,_.relativeEps=zn,_.seededRandom=xn,_.signedPlanarCurvature=kn,_.smootherstep=dn,_.smoothstep=un,_.transformOcsPointToWcs=Pe,_.transformWcsPointToOcs=Qt,Object.defineProperty(_,Symbol.toStringTag,{value:"Module"})});
@@ -91,6 +91,14 @@ export declare class AcGeLoop2d extends AcGeCurve2d {
91
91
  * @returns Reversed edge
92
92
  */
93
93
  private static reverseEdge;
94
+ /**
95
+ * Reverse a circular arc while preserving physical endpoints.
96
+ *
97
+ * `AcGeCircArc2d` uses mirrored public angles when `clockwise` is true, so simply
98
+ * swapping `startAngle`/`endAngle` and flipping `clockwise` produces a reflected
99
+ * complementary arc. Rebuild from physical endpoint angles instead.
100
+ */
101
+ private static reverseCircArcEdge;
94
102
  /**
95
103
  * Reverse a spline edge by mirroring its knots and control points.
96
104
  * @param edge Input spline edge
@@ -1 +1 @@
1
- {"version":3,"file":"AcGeLoop2d.d.ts","sourceRoot":"","sources":["../../src/geometry/AcGeLoop2d.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,YAAY,EAEZ,WAAW,EAEZ,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,MAAM,MAAM,oBAAoB,GAC5B,UAAU,GACV,aAAa,GACb,YAAY,GACZ,gBAAgB,CAAA;AAEpB;;;GAGG;AACH,qBAAa,UAAW,SAAQ,WAAW;IACzC,OAAO,CAAC,OAAO,CAA6B;IAE5C;;;OAGG;gBACS,MAAM,GAAE,KAAK,CAAC,oBAAoB,CAAM;IAKpD,IAAI,MAAM,IACe,aAAa,CAAC,oBAAoB,CAAC,CAC3D;IAED;;;;;;;;;;OAUG;IACH,MAAM,CAAC,cAAc,CACnB,KAAK,EAAE,aAAa,CAAC,oBAAoB,CAAC,EAC1C,SAAS,SAAO,GACf,UAAU,EAAE;IAqDf;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE,oBAAoB;IAK/B;;OAEG;IACH,IAAI,aAAa,WAEhB;IAED;;OAEG;IACH,IAAI,UAAU,IAAI,WAAW,CAM5B;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,WAAW,CAE1B;IAED;;OAEG;IACH,IAAI,MAAM,WAMT;IAED;;OAEG;IACH,oBAAoB,IAAI,SAAS;IAOjC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,YAAY;IAgC9B;;OAEG;IACH,KAAK;IAIL;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED;;;;OAIG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE;IAU3C,OAAO,CAAC,MAAM,CAAC,kBAAkB;IA4CjC;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAKhC;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAK9B;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IA+B1B;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;CAoBjC"}
1
+ {"version":3,"file":"AcGeLoop2d.d.ts","sourceRoot":"","sources":["../../src/geometry/AcGeLoop2d.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,YAAY,EAEZ,WAAW,EAEZ,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,MAAM,MAAM,oBAAoB,GAC5B,UAAU,GACV,aAAa,GACb,YAAY,GACZ,gBAAgB,CAAA;AAEpB;;;GAGG;AACH,qBAAa,UAAW,SAAQ,WAAW;IACzC,OAAO,CAAC,OAAO,CAA6B;IAE5C;;;OAGG;gBACS,MAAM,GAAE,KAAK,CAAC,oBAAoB,CAAM;IAKpD,IAAI,MAAM,IACe,aAAa,CAAC,oBAAoB,CAAC,CAC3D;IAED;;;;;;;;;;OAUG;IACH,MAAM,CAAC,cAAc,CACnB,KAAK,EAAE,aAAa,CAAC,oBAAoB,CAAC,EAC1C,SAAS,SAAO,GACf,UAAU,EAAE;IAqDf;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE,oBAAoB;IAK/B;;OAEG;IACH,IAAI,aAAa,WAEhB;IAED;;OAEG;IACH,IAAI,UAAU,IAAI,WAAW,CAM5B;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,WAAW,CAE1B;IAED;;OAEG;IACH,IAAI,MAAM,WAMT;IAED;;OAEG;IACH,oBAAoB,IAAI,SAAS;IAOjC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,YAAY;IAgC9B;;OAEG;IACH,KAAK;IAIL;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED;;;;OAIG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE;IAU3C,OAAO,CAAC,MAAM,CAAC,kBAAkB;IA4CjC;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAKhC;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAK9B;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAyB1B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IA6BjC;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;CAoBjC"}
@@ -39,6 +39,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
39
39
  return to.concat(ar || Array.prototype.slice.call(from));
40
40
  };
41
41
  import { AcGeBox2d, AcGeMatrix3d, AcGePoint2d } from '../math';
42
+ import { AcGeMathUtil } from '../util';
42
43
  import { AcGeCircArc2d } from './AcGeCircArc2d';
43
44
  import { AcGeCurve2d } from './AcGeCurve2d';
44
45
  import { AcGeEllipseArc2d } from './AcGeEllipseArc2d';
@@ -293,7 +294,7 @@ var AcGeLoop2d = /** @class */ (function (_super) {
293
294
  return new AcGeLine2d(edge.endPoint, edge.startPoint);
294
295
  }
295
296
  if (edge instanceof AcGeCircArc2d) {
296
- return new AcGeCircArc2d(edge.center, edge.radius, edge.endAngle, edge.startAngle, !edge.clockwise);
297
+ return AcGeLoop2d.reverseCircArcEdge(edge);
297
298
  }
298
299
  if (edge instanceof AcGeEllipseArc2d) {
299
300
  return new AcGeEllipseArc2d(edge.center, edge.majorAxisRadius, edge.minorAxisRadius, edge.endAngle, edge.startAngle, !edge.clockwise, edge.rotation);
@@ -304,6 +305,29 @@ var AcGeLoop2d = /** @class */ (function (_super) {
304
305
  }
305
306
  return edge;
306
307
  };
308
+ /**
309
+ * Reverse a circular arc while preserving physical endpoints.
310
+ *
311
+ * `AcGeCircArc2d` uses mirrored public angles when `clockwise` is true, so simply
312
+ * swapping `startAngle`/`endAngle` and flipping `clockwise` produces a reflected
313
+ * complementary arc. Rebuild from physical endpoint angles instead.
314
+ */
315
+ AcGeLoop2d.reverseCircArcEdge = function (edge) {
316
+ var start = edge.startPoint;
317
+ var end = edge.endPoint;
318
+ var newClockwise = !edge.clockwise;
319
+ // New start is the old end; new end is the old start.
320
+ var physicalStartAngle = Math.atan2(end.y - edge.center.y, end.x - edge.center.x);
321
+ var physicalEndAngle = Math.atan2(start.y - edge.center.y, start.x - edge.center.x);
322
+ // Match AcGeCircArc2d clockwise public-angle convention (mirror ≈ negation).
323
+ var toPublicAngle = function (angle) {
324
+ var normalized = AcGeMathUtil.normalizeAngle(angle);
325
+ return newClockwise
326
+ ? AcGeMathUtil.normalizeAngle(-normalized)
327
+ : normalized;
328
+ };
329
+ return new AcGeCircArc2d(edge.center, edge.radius, toPublicAngle(physicalStartAngle), toPublicAngle(physicalEndAngle), newClockwise);
330
+ };
307
331
  /**
308
332
  * Reverse a spline edge by mirroring its knots and control points.
309
333
  * @param edge Input spline edge
@@ -1 +1 @@
1
- {"version":3,"file":"AcGeLoop2d.js","sourceRoot":"","sources":["../../src/geometry/AcGeLoop2d.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AcGeLoop2d.js","sourceRoot":"","sources":["../../src/geometry/AcGeLoop2d.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mlightcad/geometry-engine",
3
- "version": "3.10.5",
3
+ "version": "3.10.6",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "repository": {
@@ -33,7 +33,7 @@
33
33
  "require": "./dist/geometry-engine.umd.cjs"
34
34
  },
35
35
  "peerDependencies": {
36
- "@mlightcad/common": "1.10.5"
36
+ "@mlightcad/common": "1.10.6"
37
37
  },
38
38
  "scripts": {
39
39
  "clean": "rimraf dist lib tsconfig.tsbuildinfo",