@mlightcad/geometry-engine 3.14.3 → 3.14.5

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(A,V){typeof exports=="object"&&typeof module<"u"?V(exports,require("@mlightcad/common")):typeof define=="function"&&define.amd?define(["exports","@mlightcad/common"],V):(A=typeof globalThis<"u"?globalThis:A||self,V(A["geometry-engine"]={},A.common))})(this,(function(A,V){"use strict";const F=["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 Ln=1234567;const sn=Math.PI/180,rn=180/Math.PI;function vn(){const i=Math.random()*4294967295|0,t=Math.random()*4294967295|0,n=Math.random()*4294967295|0,e=Math.random()*4294967295|0;return(F[i&255]+F[i>>8&255]+F[i>>16&255]+F[i>>24&255]+"-"+F[t&255]+F[t>>8&255]+"-"+F[t>>16&15|64]+F[t>>24&255]+"-"+F[n&63|128]+F[n>>8&255]+"-"+F[n>>16&255]+F[n>>24&255]+F[e&255]+F[e>>8&255]+F[e>>16&255]+F[e>>24&255]).toLowerCase()}function W(i,t,n){return Math.max(t,Math.min(n,i))}function on(i,t){return(i%t+t)%t}function jn(i,t,n,e,s){return e+(i-t)*(s-e)/(n-t)}function Fn(i,t,n){return i!==t?(n-i)/(t-i):0}function an(i,t,n){return(1-n)*i+n*t}function On(i,t,n,e){return an(i,t,1-Math.exp(-n*e))}function Un(i,t=1){return t-Math.abs(on(i,t*2)-t)}function Dn(i,t,n){return i<=t?0:i>=n?1:(i=(i-t)/(n-t),i*i*(3-2*i))}function Xn(i,t,n){return i<=t?0:i>=n?1:(i=(i-t)/(n-t),i*i*i*(i*(i*6-15)+10))}function Yn(i,t){return i+Math.floor(Math.random()*(t-i+1))}function Zn(i,t){return i+Math.random()*(t-i)}function Gn(i){return i*(.5-Math.random())}function Wn(i){i!==void 0&&(Ln=i);let t=Ln+=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 Qn(i){return i*sn}function Kn(i){return i*rn}function $n(i){return(i&i-1)===0&&i!==0}function Hn(i){return Math.pow(2,Math.ceil(Math.log(i)/Math.LN2))}function Jn(i){return Math.pow(2,Math.floor(Math.log(i)/Math.LN2))}function mt(i){const t=Math.PI*2;return(i%t+t)%t}function te(i,t,n){return i>t&&i<n||i>n&&i<t}function ne(i,t,n,e=!1){return i=mt(i),t=mt(t),n=mt(n),e?t>n?i<=t&&i>=n:i<=t||i>=n:t<n?i>=t&&i<=n:i>=t||i<=n}function ee(i,t,n){const e=mt(n-i);return mt(t-i)<=e+1e-7}function hn(i){return i=Math.abs(i),i<1?0:Math.ceil(Math.log10(Math.abs(i)+1))}function se(i,t=1e-7){const n=hn(i);return Math.max(Math.pow(10,n)*t,t)}const p={DEG2RAD:sn,RAD2DEG:rn,generateUUID:vn,clamp:W,euclideanModulo:on,mapLinear:jn,inverseLerp:Fn,lerp:an,damp:On,pingpong:Un,smoothstep:Dn,smootherstep:Xn,randInt:Yn,randFloat:Zn,randFloatSpread:Gn,seededRandom:Wn,degToRad:Qn,radToDeg:Kn,isPowerOfTwo:$n,ceilPowerOfTwo:Hn,floorPowerOfTwo:Jn,normalizeAngle:mt,isBetween:te,isBetweenAngle:ne,isAngleOnCcwSweep:ee,intPartLength:hn,relativeEps:se},Lt=class Lt{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:r}=t;this.x=s,this.y=r;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 Lt(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),r=this.x-t.x,o=this.y-t.y;return this.x=r*e-o*s+t.x,this.y=r*s+o*e+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}relativeEps(t=1e-7){return Math.min(p.relativeEps(this.x,t),p.relativeEps(this.y,t))}*[Symbol.iterator](){yield this.x,yield this.y}};Lt.EMPTY=Object.freeze(new Lt(0,0));let B=Lt;const vt=class vt{constructor(t,n,e,s,r,o,a,h,c){this.elements=[1,0,0,0,1,0,0,0,1],t!=null&&n!=null&&e!=null&&s!=null&&r!=null&&o!=null&&a!=null&&h!=null&&c!=null&&this.set(t,n,e,s,r,o,a,h,c)}set(t,n,e,s,r,o,a,h,c){const l=this.elements;return l[0]=t,l[1]=s,l[2]=a,l[3]=n,l[4]=r,l[5]=h,l[6]=e,l[7]=o,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,r=this.elements,o=e[0],a=e[3],h=e[6],c=e[1],l=e[4],u=e[7],d=e[2],g=e[5],m=e[8],f=s[0],x=s[3],_=s[6],C=s[1],b=s[4],R=s[7],N=s[2],k=s[5],I=s[8];return r[0]=o*f+a*C+h*N,r[3]=o*x+a*b+h*k,r[6]=o*_+a*R+h*I,r[1]=c*f+l*C+u*N,r[4]=c*x+l*b+u*k,r[7]=c*_+l*R+u*I,r[2]=d*f+g*C+m*N,r[5]=d*x+g*b+m*k,r[8]=d*_+g*R+m*I,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],r=t[3],o=t[4],a=t[5],h=t[6],c=t[7],l=t[8];return n*o*l-n*a*c-e*r*l+e*a*h+s*r*c-s*o*h}invert(){const t=this.elements,n=t[0],e=t[1],s=t[2],r=t[3],o=t[4],a=t[5],h=t[6],c=t[7],l=t[8],u=l*o-a*c,d=a*h-l*r,g=c*r-o*h,m=n*u+e*d+s*g;if(m===0)return this.set(0,0,0,0,0,0,0,0,0);const f=1/m;return t[0]=u*f,t[1]=(s*c-l*e)*f,t[2]=(a*e-s*o)*f,t[3]=d*f,t[4]=(l*n-s*h)*f,t[5]=(s*r-a*n)*f,t[6]=g*f,t[7]=(e*h-c*n)*f,t[8]=(o*n-e*r)*f,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,r,o,a){const h=Math.cos(r),c=Math.sin(r);return this.set(e*h,e*c,-e*(h*o+c*a)+o+t,-s*c,s*h,-s*(-c*o+h*a)+a+n,0,0,1),this}scale(t,n){return this.premultiply(cn.makeScale(t,n)),this}rotate(t){return this.premultiply(cn.makeRotation(-t)),this}translate(t,n){return this.premultiply(cn.makeTranslation(t,n)),this}makeTranslation(t,n){return t instanceof B?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 vt().fromArray(this.elements)}};vt.IDENTITY=Object.freeze(new vt);let Pt=vt;const cn=new Pt,E=1e-6,S=2*Math.PI,is={x:0,y:0},ln={x:0,y:0,z:0};class M{constructor(){this.equalPointTol=E,this.equalVectorTol=E}clone(){const t=new M;return t.equalPointTol=this.equalPointTol,t.equalVectorTol=this.equalVectorTol,t}equalPoint2d(t,n){return new B(t).sub(n).length()<this.equalPointTol}equalPoint3d(t,n){return new y(t).sub(n).length()<this.equalPointTol}static equalToZero(t,n=E){return t<n&&t>-n}static equal(t,n,e=E){return Math.abs(t-n)<e}static great(t,n,e=E){return t-n>e}static less(t,n,e=E){return t-n<e}static isPositive(t,n=E){return t>n}static isNonPositive(t,n=E){return t<=n}}const kt=new M;class Rt{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,r,o,a){let h=e[s+0],c=e[s+1],l=e[s+2],u=e[s+3];const d=r[o+0],g=r[o+1],m=r[o+2],f=r[o+3];if(a===0){t[n+0]=h,t[n+1]=c,t[n+2]=l,t[n+3]=u;return}if(a===1){t[n+0]=d,t[n+1]=g,t[n+2]=m,t[n+3]=f;return}if(u!==f||h!==d||c!==g||l!==m){let x=1-a;const _=h*d+c*g+l*m+u*f,C=_>=0?1:-1,b=1-_*_;if(b>Number.EPSILON){const N=Math.sqrt(b),k=Math.atan2(N,_*C);x=Math.sin(x*k)/N,a=Math.sin(a*k)/N}const R=a*C;if(h=h*x+d*R,c=c*x+g*R,l=l*x+m*R,u=u*x+f*R,x===1-a){const N=1/Math.sqrt(h*h+c*c+l*l+u*u);h*=N,c*=N,l*=N,u*=N}}t[n]=h,t[n+1]=c,t[n+2]=l,t[n+3]=u}static multiplyQuaternionsFlat(t,n,e,s,r,o){const a=e[s],h=e[s+1],c=e[s+2],l=e[s+3],u=r[o],d=r[o+1],g=r[o+2],m=r[o+3];return t[n]=a*m+l*u+h*g-c*d,t[n+1]=h*m+l*d+c*u-a*g,t[n+2]=c*m+l*g+a*d-h*u,t[n+3]=l*m-a*u-h*d-c*g,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 Rt(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,r=t.z,o=t.order,a=Math.cos,h=Math.sin,c=a(e/2),l=a(s/2),u=a(r/2),d=h(e/2),g=h(s/2),m=h(r/2);switch(o){case"XYZ":this._x=d*l*u+c*g*m,this._y=c*g*u-d*l*m,this._z=c*l*m+d*g*u,this._w=c*l*u-d*g*m;break;case"YXZ":this._x=d*l*u+c*g*m,this._y=c*g*u-d*l*m,this._z=c*l*m-d*g*u,this._w=c*l*u+d*g*m;break;case"ZXY":this._x=d*l*u-c*g*m,this._y=c*g*u+d*l*m,this._z=c*l*m+d*g*u,this._w=c*l*u-d*g*m;break;case"ZYX":this._x=d*l*u-c*g*m,this._y=c*g*u+d*l*m,this._z=c*l*m-d*g*u,this._w=c*l*u+d*g*m;break;case"YZX":this._x=d*l*u+c*g*m,this._y=c*g*u+d*l*m,this._z=c*l*m-d*g*u,this._w=c*l*u-d*g*m;break;case"XZY":this._x=d*l*u-c*g*m,this._y=c*g*u-d*l*m,this._z=c*l*m+d*g*u,this._w=c*l*u+d*g*m;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],r=n[8],o=n[1],a=n[5],h=n[9],c=n[2],l=n[6],u=n[10],d=e+a+u;if(d>0){const g=.5/Math.sqrt(d+1);this._w=.25/g,this._x=(l-h)*g,this._y=(r-c)*g,this._z=(o-s)*g}else if(e>a&&e>u){const g=2*Math.sqrt(1+e-a-u);this._w=(l-h)/g,this._x=.25*g,this._y=(s+o)/g,this._z=(r+c)/g}else if(a>u){const g=2*Math.sqrt(1+a-e-u);this._w=(r-c)/g,this._x=(s+o)/g,this._y=.25*g,this._z=(h+l)/g}else{const g=2*Math.sqrt(1+u-e-a);this._w=(o-s)/g,this._x=(r+c)/g,this._y=(h+l)/g,this._z=.25*g}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(W(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,r=t._z,o=t._w,a=n._x,h=n._y,c=n._z,l=n._w;return this._x=e*l+o*a+s*c-r*h,this._y=s*l+o*h+r*a-e*c,this._z=r*l+o*c+e*h-s*a,this._w=o*l-e*a-s*h-r*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,r=this._z,o=this._w;let a=o*t._w+e*t._x+s*t._y+r*t._z;if(a<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,a=-a):this.copy(t),a>=1)return this._w=o,this._x=e,this._y=s,this._z=r,this;const h=1-a*a;if(h<=Number.EPSILON){const g=1-n;return this._w=g*o+n*this._w,this._x=g*e+n*this._x,this._y=g*s+n*this._y,this._z=g*r+n*this._z,this.normalize(),this}const c=Math.sqrt(h),l=Math.atan2(c,a),u=Math.sin((1-n)*l)/c,d=Math.sin(n*l)/c;return this._w=o*u+this._w*d,this._x=e*u+this._x*d,this._y=s*u+this._y*d,this._z=r*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),r=Math.sqrt(e);return this.set(s*Math.sin(t),s*Math.cos(t),r*Math.sin(n),r*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:r,y:o,z:a}=t;this.x=r,this.y=o,this.z=a||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(ie.setFromEuler(t))}applyAxisAngle(t,n){return this.applyQuaternion(ie.setFromAxisAngle(t,n))}applyMatrix3(t){const n=this.x,e=this.y,s=this.z,r=t.elements;return this.x=r[0]*n+r[3]*e+r[6]*s,this.y=r[1]*n+r[4]*e+r[7]*s,this.z=r[2]*n+r[5]*e+r[8]*s,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const n=this.x,e=this.y,s=this.z,r=t.elements,o=1/(r[3]*n+r[7]*e+r[11]*s+r[15]);return this.x=(r[0]*n+r[4]*e+r[8]*s+r[12])*o,this.y=(r[1]*n+r[5]*e+r[9]*s+r[13])*o,this.z=(r[2]*n+r[6]*e+r[10]*s+r[14])*o,this}applyQuaternion(t){const n=this.x,e=this.y,s=this.z,r=t.x,o=t.y,a=t.z,h=t.w,c=2*(o*s-a*e),l=2*(a*n-r*s),u=2*(r*e-o*n);return this.x=n+h*c+o*u-a*l,this.y=e+h*l+a*c-r*u,this.z=s+h*u+r*l-o*c,this}transformDirection(t){const n=this.x,e=this.y,s=this.z,r=t.elements;return this.x=r[0]*n+r[4]*e+r[8]*s,this.y=r[1]*n+r[5]*e+r[9]*s,this.z=r[2]*n+r[6]*e+r[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,r=t.z,o=n.x,a=n.y,h=n.z;return this.x=s*h-r*a,this.y=r*o-e*h,this.z=e*a-s*o,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 un.copy(this).projectOnVector(t),this.sub(un)}reflect(t){return this.sub(un.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 y=v;const un=new y,ie=new Rt,Tt=class Tt{static makeTranslation(t,n,e){return new Tt().makeTranslation(t,n,e)}constructor(t,n,e,s,r,o,a,h,c,l,u,d,g,m,f,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&&r!=null&&o!=null&&a!=null&&h!=null&&c!=null&&l!=null&&u!=null&&d!=null&&g!=null&&m!=null&&f!=null&&x!=null&&this.set(t,n,e,s,r,o,a,h,c,l,u,d,g,m,f,x)}set(t,n,e,s,r,o,a,h,c,l,u,d,g,m,f,x){const _=this.elements;return _[0]=t,_[4]=n,_[8]=e,_[12]=s,_[1]=r,_[5]=o,_[9]=a,_[13]=h,_[2]=c,_[6]=l,_[10]=u,_[14]=d,_[3]=g,_[7]=m,_[11]=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 Tt().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(kt.equalPoint3d(e,y.Z_AXIS))this.identity();else{const s=new y(1,0,0);Math.abs(e.x)<1/64&&Math.abs(e.y)<1/64?s.crossVectors(y.Y_AXIS,e).normalize():s.crossVectors(y.Z_AXIS,e).normalize();const r=e.clone().cross(s).normalize();this.makeBasis(s,r,e)}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/pt.setFromMatrixColumn(t,0).length(),r=1/pt.setFromMatrixColumn(t,1).length(),o=1/pt.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]*r,n[5]=e[5]*r,n[6]=e[6]*r,n[7]=0,n[8]=e[8]*o,n[9]=e[9]*o,n[10]=e[10]*o,n[11]=0,n[12]=0,n[13]=0,n[14]=0,n[15]=1,this}makeRotationFromQuaternion(t){return this.compose(rs,t,os)}lookAt(t,n,e){const s=this.elements;return Z.subVectors(t,n),Z.lengthSq()===0&&(Z.z=1),Z.normalize(),ct.crossVectors(e,Z),ct.lengthSq()===0&&(Math.abs(e.z)===1?Z.x+=1e-4:Z.z+=1e-4,Z.normalize(),ct.crossVectors(e,Z)),ct.normalize(),Ft.crossVectors(Z,ct),s[0]=ct.x,s[4]=Ft.x,s[8]=Z.x,s[1]=ct.y,s[5]=Ft.y,s[9]=Z.y,s[2]=ct.z,s[6]=Ft.z,s[10]=Z.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,r=this.elements,o=e[0],a=e[4],h=e[8],c=e[12],l=e[1],u=e[5],d=e[9],g=e[13],m=e[2],f=e[6],x=e[10],_=e[14],C=e[3],b=e[7],R=e[11],N=e[15],k=s[0],I=s[4],gt=s[8],T=s[12],U=s[1],X=s[5],at=s[9],ht=s[13],Y=s[2],Kt=s[6],$t=s[10],Ht=s[14],Jt=s[3],tn=s[7],nn=s[11],en=s[15];return r[0]=o*k+a*U+h*Y+c*Jt,r[4]=o*I+a*X+h*Kt+c*tn,r[8]=o*gt+a*at+h*$t+c*nn,r[12]=o*T+a*ht+h*Ht+c*en,r[1]=l*k+u*U+d*Y+g*Jt,r[5]=l*I+u*X+d*Kt+g*tn,r[9]=l*gt+u*at+d*$t+g*nn,r[13]=l*T+u*ht+d*Ht+g*en,r[2]=m*k+f*U+x*Y+_*Jt,r[6]=m*I+f*X+x*Kt+_*tn,r[10]=m*gt+f*at+x*$t+_*nn,r[14]=m*T+f*ht+x*Ht+_*en,r[3]=C*k+b*U+R*Y+N*Jt,r[7]=C*I+b*X+R*Kt+N*tn,r[11]=C*gt+b*at+R*$t+N*nn,r[15]=C*T+b*ht+R*Ht+N*en,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],r=t[12],o=t[1],a=t[5],h=t[9],c=t[13],l=t[2],u=t[6],d=t[10],g=t[14],m=t[3],f=t[7],x=t[11],_=t[15];return m*(+r*h*u-s*c*u-r*a*d+e*c*d+s*a*g-e*h*g)+f*(+n*h*g-n*c*d+r*o*d-s*o*g+s*c*l-r*h*l)+x*(+n*c*u-n*a*g-r*o*u+e*o*g+r*a*l-e*c*l)+_*(-s*a*l-n*h*u+n*a*d+s*o*u-e*o*d+e*h*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 y?(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],r=t[3],o=t[4],a=t[5],h=t[6],c=t[7],l=t[8],u=t[9],d=t[10],g=t[11],m=t[12],f=t[13],x=t[14],_=t[15],C=u*x*c-f*d*c+f*h*g-a*x*g-u*h*_+a*d*_,b=m*d*c-l*x*c-m*h*g+o*x*g+l*h*_-o*d*_,R=l*f*c-m*u*c+m*a*g-o*f*g-l*a*_+o*u*_,N=m*u*h-l*f*h-m*a*d+o*f*d+l*a*x-o*u*x,k=n*C+e*b+s*R+r*N;if(k===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const I=1/k;return t[0]=C*I,t[1]=(f*d*r-u*x*r-f*s*g+e*x*g+u*s*_-e*d*_)*I,t[2]=(a*x*r-f*h*r+f*s*c-e*x*c-a*s*_+e*h*_)*I,t[3]=(u*h*r-a*d*r-u*s*c+e*d*c+a*s*g-e*h*g)*I,t[4]=b*I,t[5]=(l*x*r-m*d*r+m*s*g-n*x*g-l*s*_+n*d*_)*I,t[6]=(m*h*r-o*x*r-m*s*c+n*x*c+o*s*_-n*h*_)*I,t[7]=(o*d*r-l*h*r+l*s*c-n*d*c-o*s*g+n*h*g)*I,t[8]=R*I,t[9]=(m*u*r-l*f*r-m*e*g+n*f*g+l*e*_-n*u*_)*I,t[10]=(o*f*r-m*a*r+m*e*c-n*f*c-o*e*_+n*a*_)*I,t[11]=(l*a*r-o*u*r-l*e*c+n*u*c+o*e*g-n*a*g)*I,t[12]=N*I,t[13]=(l*f*s-m*u*s+m*e*d-n*f*d-l*e*x+n*u*x)*I,t[14]=(m*a*s-o*f*s-m*e*h+n*f*h+o*e*x-n*a*x)*I,t[15]=(o*u*s-l*a*s+l*e*h-n*u*h-o*e*d+n*a*d)*I,this}scale(t){const n=this.elements,e=t.x,s=t.y,r=t.z;return n[0]*=e,n[4]*=s,n[8]*=r,n[1]*=e,n[5]*=s,n[9]*=r,n[2]*=e,n[6]*=s,n[10]*=r,n[3]*=e,n[7]*=s,n[11]*=r,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),r=1-e,o=t.x,a=t.y,h=t.z,c=r*o,l=r*a;return this.set(c*o+e,c*a-s*h,c*h+s*a,0,c*a+s*h,l*a+e,l*h-s*o,0,c*h-s*a,l*h+s*o,r*h*h+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,r,o){return this.set(1,e,r,0,t,1,o,0,n,s,1,0,0,0,0,1),this}compose(t,n,e){const s=this.elements,r=n.x,o=n.y,a=n.z,h=n.w,c=r+r,l=o+o,u=a+a,d=r*c,g=r*l,m=r*u,f=o*l,x=o*u,_=a*u,C=h*c,b=h*l,R=h*u,N=e.x,k=e.y,I=e.z;return s[0]=(1-(f+_))*N,s[1]=(g+R)*N,s[2]=(m-b)*N,s[3]=0,s[4]=(g-R)*k,s[5]=(1-(d+_))*k,s[6]=(x+C)*k,s[7]=0,s[8]=(m+b)*I,s[9]=(x-C)*I,s[10]=(1-(d+f))*I,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 r=pt.set(s[0],s[1],s[2]).length();const o=pt.set(s[4],s[5],s[6]).length(),a=pt.set(s[8],s[9],s[10]).length();this.determinant()<0&&(r=-r),t.x=s[12],t.y=s[13],t.z=s[14],J.copy(this);const c=1/r,l=1/o,u=1/a;return J.elements[0]*=c,J.elements[1]*=c,J.elements[2]*=c,J.elements[4]*=l,J.elements[5]*=l,J.elements[6]*=l,J.elements[8]*=u,J.elements[9]*=u,J.elements[10]*=u,n.setFromRotationMatrix(J),e.x=r,e.y=o,e.z=a,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}};Tt.IDENTITY=Object.freeze(new Tt);let st=Tt;const pt=new y,J=new st,rs=new y(0,0,0),os=new y(1,1,1),ct=new y,Ft=new y,Z=new y;class Q{constructor(t=void 0,n=void 0){this.min=t==null?new y(1/0,1/0,1/0):new y(t.x,t.y,t.z),this.max=n==null?new y(-1/0,-1/0,-1/0):new y(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(dn.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=dn.copy(n).multiplyScalar(.5);return this.min.copy(t).sub(e),this.max.copy(t).add(e),this}clone(){return new Q().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 y(0,0,0):new y(0,0,0).addVectors(this.min,this.max).multiplyScalar(.5)}get size(){return this.isEmpty()?new y(0,0,0):new y(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,dn).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:(it[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),it[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),it[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),it[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),it[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),it[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),it[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),it[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(it),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 it=[new y,new y,new y,new y,new y,new y,new y,new y],dn=new y,re=new B;class K{constructor(t=void 0,n=void 0){this.min=t==null?new B(1/0,1/0):new B(t.x,t.y),this.max=n==null?new B(-1/0,-1/0):new B(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=re.copy(n).multiplyScalar(.5);return this.min.copy(t).sub(e),this.max.copy(t).add(e),this}clone(){return new K().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 B(0,0):new B(0,0).addVectors(this.min,this.max).multiplyScalar(.5)}get size(){return this.isEmpty()?new B(0,0):new B(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,re).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 oe=new y,as=new y,hs=new Pt;class wt{constructor(t=new y(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=oe.subVectors(e,n).cross(as.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||hs.getNormalMatrix(t),s=this.coplanarPoint(oe).applyMatrix4(t),r=this.normal.applyMatrix3(e).normalize();return this.constant=-s.dot(r),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 wt().copy(this)}}class P extends B{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 w extends y{clone(){return new w(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((r,o)=>{r.toArray(s,o*e)}),s}}const ae=new st,he=new Rt,jt=class jt{constructor(t=0,n=0,e=0,s=jt.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 jt(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,r=s[0],o=s[4],a=s[8],h=s[1],c=s[5],l=s[9],u=s[2],d=s[6],g=s[10];switch(n){case"XYZ":this._y=Math.asin(W(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-l,g),this._z=Math.atan2(-o,r)):(this._x=Math.atan2(d,c),this._z=0);break;case"YXZ":this._x=Math.asin(-W(l,-1,1)),Math.abs(l)<.9999999?(this._y=Math.atan2(a,g),this._z=Math.atan2(h,c)):(this._y=Math.atan2(-u,r),this._z=0);break;case"ZXY":this._x=Math.asin(W(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-u,g),this._z=Math.atan2(-o,c)):(this._y=0,this._z=Math.atan2(h,r));break;case"ZYX":this._y=Math.asin(-W(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(d,g),this._z=Math.atan2(h,r)):(this._x=0,this._z=Math.atan2(-o,c));break;case"YZX":this._z=Math.asin(W(h,-1,1)),Math.abs(h)<.9999999?(this._x=Math.atan2(-l,c),this._y=Math.atan2(-u,r)):(this._x=0,this._y=Math.atan2(a,g));break;case"XZY":this._z=Math.asin(-W(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(d,c),this._y=Math.atan2(a,r)):(this._x=Math.atan2(-l,g),this._y=0);break}return this._order=n,e===!0&&this._onChangeCallback(),this}setFromQuaternion(t,n,e=!0){return ae.makeRotationFromQuaternion(t),this.setFromRotationMatrix(ae,n,e)}setFromVector3(t,n=this._order){return this.set(t.x,t.y,t.z,n)}reorder(t){return he.setFromEuler(this),this.setFromQuaternion(he,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}};jt.DEFAULT_ORDER="XYZ";let gn=jt;function cs(i){const t=i;return{x:i.x,y:i.y,z:t.z??0}}function ls(i,t){i.x+=t.x,i.y+=t.y,i.z=(i.z??0)+(t.z??0)}function us(i,t,n=!1){const e=i.x,s=i.y;let r=!1;const o=t.length;for(let a=0,h=o-1;a<o;h=a++){const c=t[a].x,l=t[a].y,u=t[h].x,d=t[h].y;let g=l>s!=d>s;n&&(g=l>=s!=d>=s),g&&e<(u-c)*(s-l)/(d-l)+c&&(r=!r)}return r}function ds(i,t){if(i.length===0||t.length===0)return!1;const n=new K().setFromPoints(i),e=new K().setFromPoints(t);if(!n.intersectsBox(e))return!1;for(let s=0;s<i.length;){if(O.isPointInPolygon(i[s],t,!0))return!0;s<i.length-1&&kt.equalPoint2d(i[s+1],i[s])&&++s,++s}return!1}const O={applyOffsetToPoint3d:ls,isPointInPolygon:us,isPolygonIntersect:ds,point2dToPoint3d:cs};function gs(i,t){const n=[],e=t-1,s=i;for(let r=0;r<=s;r++)n.push(0);for(let r=1;r<=e-s;r++)n.push(r);for(let r=0;r<=s;r++)n.push(e-s+1);return n}function ms(i,t){const n=t.length-1,e=i,s=[0];let r=0;for(let a=1;a<=n;a++){const h=t[a][0]-t[a-1][0],c=t[a][1]-t[a-1][1],l=t[a][2]-t[a-1][2],u=Math.sqrt(h*h+c*c+l*l);r+=u,s.push(r)}const o=[];for(let a=0;a<=e;a++)o.push(0);for(let a=1;a<=n-e;a++){const h=s[a]/r;o.push(h*(n-e+1))}for(let a=0;a<=e;a++)o.push(n-e+1);return o}function ce(i,t="Uniform"){const n=i.length;if(n===0)return[];if(n===1)return[0];const e=n-1;if(t==="Uniform")return new Array(n).fill(0).map((o,a)=>a/e);const s=[0];let r=0;for(let o=1;o<=e;o++){const a=i[o][0]-i[o-1][0],h=i[o][1]-i[o-1][1],c=i[o][2]-i[o-1][2],l=Math.sqrt(a*a+h*h+c*c),u=t==="SqrtChord"?Math.sqrt(l):l;r+=u,s.push(r)}return r<1e-12?new Array(n).fill(0).map((o,a)=>a/e):s.map(o=>o/r)}function le(i,t){const n=t.length-1,e=i,s=n+e+1,r=new Array(s+1).fill(0),o=t[t.length-1];for(let a=s-e;a<=s;a++)r[a]=o;for(let a=1;a<=n-e;a++){let h=0;for(let c=a;c<a+e;c++)h+=t[c];r[a+e]=h/e}return r}function fs(i,t){const n=t.length-1,e=i,s=[0];let r=0;for(let a=1;a<=n;a++){const h=t[a][0]-t[a-1][0],c=t[a][1]-t[a-1][1],l=t[a][2]-t[a-1][2],u=Math.sqrt(h*h+c*c+l*l),d=Math.sqrt(u);r+=d,s.push(r)}const o=[];for(let a=0;a<=e;a++)o.push(0);for(let a=1;a<=n-e;a++){const h=s[a]/r;o.push(h*(n-e+1))}for(let a=0;a<=e;a++)o.push(n-e+1);return o}function mn(i,t){const n=i.length,e=i.map(o=>o.slice()),s=t.slice();for(let o=0;o<n;o++){let a=o,h=Math.abs(e[o][o]);for(let c=o+1;c<n;c++){const l=Math.abs(e[c][o]);l>h&&(h=l,a=c)}if(h<1e-12)throw new Error("Interpolation matrix is singular.");if(a!==o){const c=e[o];e[o]=e[a],e[a]=c;const l=s[o];s[o]=s[a],s[a]=l}for(let c=o+1;c<n;c++){const l=e[c][o]/e[o][o];if(!(Math.abs(l)<1e-14)){for(let u=o;u<n;u++)e[c][u]-=l*e[o][u];s[c]-=l*s[o]}}}const r=new Array(n).fill(0);for(let o=n-1;o>=0;o--){let a=s[o];for(let h=o+1;h<n;h++)a-=e[o][h]*r[h];r[o]=a/e[o][o]}return r}function fn(i,t,n="Uniform",e,s){if(i.length===0)return{controlPoints:[],knots:[],weights:[]};const r=i.map(T=>[T[0],T[1],T[2]??0]),o=!!e,a=!!s,h=(o?1:0)+(a?1:0),c=r.length-1,l=c+h;if(l<t)throw new Error("Not enough points to interpolate a curve of this degree.");const u=ce(r,n),d=u.slice();o&&d.unshift(u[0]),a&&d.push(u[u.length-1]);const g=le(t,d),m=l+1,f=new Array(m),x=new Array(m),_=new Array(m),C=new Array(m);let b=0;f[b]=new Array(m).fill(0),f[b][0]=1,x[b]=r[0][0],_[b]=r[0][1],C[b]=r[0][2],b++;for(let T=1;T<=c-1;T++){const U=u[T];f[b]=new Array(m).fill(0);for(let X=0;X<=l;X++)f[b][X]=lt(X,t,U,g);x[b]=r[T][0],_[b]=r[T][1],C[b]=r[T][2],b++}if(f[b]=new Array(m).fill(0),f[b][l]=1,x[b]=r[c][0],_[b]=r[c][1],C[b]=r[c][2],b++,o){const T=g[t+1]-g[0],U=T!==0?t/T:0;f[b]=new Array(m).fill(0),f[b][0]=-U,f[b][1]=U,x[b]=(e==null?void 0:e[0])??0,_[b]=(e==null?void 0:e[1])??0,C[b]=(e==null?void 0:e[2])??0,b++}if(a){const T=g[l+t+1]-g[l],U=T!==0?t/T:0;f[b]=new Array(m).fill(0),f[b][l-1]=-U,f[b][l]=U,x[b]=(s==null?void 0:s[0])??0,_[b]=(s==null?void 0:s[1])??0,C[b]=(s==null?void 0:s[2])??0,b++}const R=mn(f,x),N=mn(f,_),k=mn(f,C),I=new Array(m);for(let T=0;T<m;T++)I[T]=[R[T],N[T],k[T]];const gt=new Array(m).fill(1);return{controlPoints:I,knots:g,weights:gt}}function lt(i,t,n,e){if(t===0)return n>=e[i]&&n<e[i+1]?1:0;const s=e[i+t]-e[i],r=e[i+t+1]-e[i+1],o=s>1e-10?(n-e[i])/s:0,a=r>1e-10?(e[i+t+1]-n)/r:0;return o*lt(i,t-1,n,e)+a*lt(i+1,t-1,n,e)}function Nt(i,t,n,e,s){const r=e.length-1,o=t;if(i=Math.max(n[o],Math.min(n[r+1],i)),Math.abs(i-n[r+1])<1e-8)return[...e[r]];if(Math.abs(i-n[o])<1e-8)return[...e[0]];const a=[0,0,0];let h=0;for(let c=0;c<=r;c++){const l=lt(c,o,i,n),u=s[c]*l;a[0]+=e[c][0]*u,a[1]+=e[c][1]*u,a[2]+=e[c][2]*u,h+=u}if(Math.abs(h)<1e-10){const c=n[n.length-o-1];if(Math.abs(i-c)<1e-8)return[...e[r]];if(Math.abs(i-n[o])<1e-8)return[...e[0]]}return Math.abs(h)>=1e-10&&(a[0]/=h,a[1]/=h,a[2]/=h),a}function xn(i,t,n,e){if(t===0)return 0;const s=e[i+t]-e[i],r=e[i+t+1]-e[i+1];let o=0;return s>1e-10&&(o+=t/s*lt(i,t-1,n,e)),r>1e-10&&(o-=t/r*lt(i+1,t-1,n,e)),o}function xs(i,t,n,e){if(t<=1)return 0;const s=e[i+t]-e[i],r=e[i+t+1]-e[i+1];let o=0;return s>1e-10&&(o+=t/s*xn(i,t-1,n,e)),r>1e-10&&(o-=t/r*xn(i+1,t-1,n,e)),o}function ue(i,t,n,e,s){const r=e.length-1,o=t,a=n[o],h=n[r+1];i=Math.max(a,Math.min(h,i));const c=[0,0,0],l=[0,0,0],u=[0,0,0];let d=0,g=0,m=0;for(let k=0;k<=r;k++){const I=lt(k,o,i,n),gt=xn(k,o,i,n),T=xs(k,o,i,n),U=s[k],X=U*I,at=U*gt,ht=U*T,Y=e[k];c[0]+=X*Y[0],c[1]+=X*Y[1],c[2]+=X*Y[2],l[0]+=at*Y[0],l[1]+=at*Y[1],l[2]+=at*Y[2],u[0]+=ht*Y[0],u[1]+=ht*Y[1],u[2]+=ht*Y[2],d+=X,g+=at,m+=ht}if(Math.abs(d)<1e-10)return{point:Nt(i,t,n,e,s),deriv1:[0,0,0],deriv2:[0,0,0]};const f=d*d,x=[c[0]/d,c[1]/d,c[2]/d],_=[(l[0]*d-c[0]*g)/f,(l[1]*d-c[1]*g)/f,(l[2]*d-c[2]*g)/f],C=u[0]*d-c[0]*m,b=u[1]*d-c[1]*m,R=u[2]*d-c[2]*m,N=[C/f-2*g*_[0]/d,b/f-2*g*_[1]/d,R/f-2*g*_[2]/d];return{point:x,deriv1:_,deriv2:N}}function de(i,t){const n=i[0],e=i[1],s=t[0],r=t[1],o=n*n+e*e;return o<1e-20?0:(n*r-e*s)/Math.pow(o,1.5)}function ge(i,t,n,e){const s=i,r=t[s],o=t[t.length-s-1];let a=0;const h=1e3,c=(o-r)/h;let l=Nt(r,i,t,n,e);for(let f=1;f<=h;f++){const x=r+f*c,_=Nt(x,i,t,n,e),C=_[0]-l[0],b=_[1]-l[1],R=_[2]-l[2];a+=Math.sqrt(C*C+b*b+R*R),l=_}const u=Nt(o,i,t,n,e),d=u[0]-l[0],g=u[1]-l[1],m=u[2]-l[2];return a+=Math.sqrt(d*d+g*g+m*m),a}function ys(i,t=3,n="Uniform",e,s){return i.length===0?[]:fn(i,t,n,e,s).controlPoints}const me=new st,fe=new y,_s=new y,As=new y,yn=new w;function xe(i){return new st().setFromExtrusionDirection(new y(i.x,i.y,i.z))}function Ps(i){return me.setFromExtrusionDirection(new y(i.x,i.y,i.z)),me.extractBasis(fe,_s,As),fe.clone()}function ps(i,t){return new w(i.x,i.y,i.z??0).applyMatrix4(xe(t))}function _n(i,t){return new w(i.x,i.y,i.z??0).applyMatrix4(xe(t).invert())}function ws(i,t,n){const e=_n(i,n),s=_n(t,n);return yn.set(s.x-e.x,s.y-e.y,(s.z??0)-(e.z??0)),p.normalizeAngle(Math.atan2(yn.y,yn.x))}function An(i){const t=i.length;if(t<3)return 0;let n=0;for(let e=0,s=t-1;e<t;s=e++){const r=i[s],o=i[e];n+=r.x*o.y-o.x*r.y}return n*.5}function ye(i){return Math.abs(An(i))}function _e(i){const t=i.length;if(t<3)return 0;let n=0,e=0,s=0;for(let r=0,o=t-1;r<t;o=r++){const a=i[o],h=i[r],c=a.x,l=a.y,u=a.z??0,d=h.x,g=h.y,m=h.z??0;n+=(u+m)*(l-g),e+=(c+d)*(u-m),s+=(l+g)*(c-d)}return .5*Math.hypot(n,e,s)}function Ae(i){return i.length<3?0:ye(i)}function Pe(i){return i.length<3?0:_e(i)}function Pn(i,t,n){const e=i.x,s=i.y,r=t.x,o=t.y,a=n.x,h=n.y,c=2*(e*(o-h)+r*(h-s)+a*(s-o));if(M.equalToZero(c))return null;const l=((e*e+s*s)*(o-h)+(r*r+o*o)*(h-s)+(a*a+h*h)*(s-o))/c,u=((e*e+s*s)*(a-r)+(r*r+o*o)*(e-a)+(a*a+h*h)*(r-e))/c,d=Math.hypot(l-e,u-s);return!Number.isFinite(d)||M.isNonPositive(d)?null:{center:new P(l,u),radius:d}}function pe(i,t,n){const e=i.x,s=i.y,r=i.z??0,o=new y(t.x-e,t.y-s,(t.z??0)-r),a=new y(n.x-e,n.y-s,(n.z??0)-r),h=new y().crossVectors(o,a),c=h.lengthSq();if(c<E*E)return null;const l=o.lengthSq(),u=a.lengthSq(),d=new y().crossVectors(h,o).multiplyScalar(u).add(new y().crossVectors(a,h).multiplyScalar(l)).multiplyScalar(1/(2*c)),g=new w(e+d.x,s+d.y,r+d.z),m=Math.hypot(g.x-e,g.y-s,g.z-r);return!Number.isFinite(m)||M.isNonPositive(m)?null:{center:g,radius:m}}function ut(i,t){return Math.atan2(t.y-i.y,t.x-i.x)}function nt(i,t){return Math.hypot(t.x-i.x,t.y-i.y)}function we(i,t,n){if(M.isNonPositive(t))return null;const e=n.x-i.x,s=n.y-i.y,r=Math.hypot(e,s);if(M.isNonPositive(r))return null;const o=t/r;return new P(i.x+e*o,i.y+s*o)}const Ms=1e-8;function Me(i,t,n,e){return Math.abs(nt(i,t)-n)<=(e??Math.max(E,n*1e-5))}function ze(i,t,n,e,s=Ms){return Math.abs(i.x-n.x)<=s&&Math.abs(i.y-n.y)<=s&&Math.abs(t-e)<=s}function be(i,t,n,e){const s=Math.max(1e-18,Math.abs(n)*1e-9);return i<n-s?!0:i>n+s?!1:t>e}function Se(i,t,n,e=!1){const s=Pn(i,t,n);if(!s)return null;const r=ut(s.center,i),o=ut(s.center,t),a=ut(s.center,n);let h=!p.isAngleOnCcwSweep(r,o,a);return e&&(h=!h),q.fromMathAngles(s.center,s.radius,r,a,h)}function pn(i,t){return!Number.isFinite(t)||M.isNonPositive(t)?null:new q(i,t,0,S,!1)}function zs(i,t){const n=nt(i,t);return M.isNonPositive(n)?null:pn({x:(i.x+t.x)/2,y:(i.y+t.y)/2},n/2)}function bs(i,t,n){const e=Pn(i,t,n);return e?pn(e.center,e.radius):null}function Ss(i,t,n){const e=nt(n,i);if(M.isNonPositive(e))return null;const s=ut(n,i),r=ut(n,t),o=p.normalizeAngle(r-s);return q.fromMathAngles(n,e,s,r,o>Math.PI)}function Bt(i,t,n,e){const s=nt(i,t),r=nt(i,n);if(M.isNonPositive(s)||M.isNonPositive(r))return null;const o=Math.max(E,s*E);return Math.abs(s-r)>o?null:q.fromMathAngles(i,s,ut(i,t),ut(i,n),e)}function Cs(i,t,n,e){const s=nt(i,t);if(M.isNonPositive(s))return null;const r=we(i,s,n);return r?Bt(i,t,r,e):null}function Ce(i,t,n){const e=nt(i,t),s=Math.abs(n);if(M.isNonPositive(e)||M.isNonPositive(s)||!M.great(S-s,0))return null;const r=n<0,o=ut(i,t),a=r?o-s:o+s;return q.fromMathAngles(i,e,o,a,r)}function Es(i,t,n){const e=nt(i,t),s=Math.abs(n);if(M.isNonPositive(e)||M.isNonPositive(s)||M.great(s,2*e))return null;const r=Math.max(-1,Math.min(1,s/(2*e))),o=2*Math.asin(r);return Ce(i,t,n>=0?o:-o)}function Is(i,t,n){const e=nt(i,t),s=Math.abs(n);if(M.isNonPositive(e)||M.isNonPositive(s)||!M.great(S-s,0))return null;const r=Math.sin(s/2);if(M.equalToZero(r))return null;const o=e/(2*r),a=o*o-e*e/4;if(M.less(a,0))return null;const h=Math.sqrt(Math.max(0,a)),c=(i.x+t.x)/2,l=(i.y+t.y)/2,u=t.x-i.x,g=-(t.y-i.y)/e,m=u/e,f=n>=0,_=f&&s<=Math.PI||!f&&s>Math.PI?1:-1,C={x:c+g*h*_,y:l+m*h*_};return Bt(C,i,t,!f)}function Ts(i,t,n){const e=Math.cos(n),s=Math.sin(n),r=t.x-i.x,o=t.y-i.y,a=-s,h=e,c=2*(r*a+o*h);if(M.equalToZero(c))return null;const l=(r*r+o*o)/c;if(!Number.isFinite(l))return null;const u={x:i.x+a*l,y:i.y+h*l},d=i.x-u.x,g=i.y-u.y,m=d*s-g*e;return M.equalToZero(m)?null:Bt(u,i,t,m<0)}function ks(i,t,n){const e=Math.abs(n),s=nt(i,t);if(M.isNonPositive(e)||M.isNonPositive(s)||M.great(s,2*e))return null;const r=(i.x+t.x)/2,o=(i.y+t.y)/2,a=t.x-i.x,c=-(t.y-i.y)/s,l=a/s,u=Math.sqrt(Math.max(0,e*e-s*s/4)),d=n>=0?1:-1,g={x:r+c*u*d,y:o+l*u*d};return Bt(g,i,t,n<0)}class Ee{constructor(){this._boundingBoxNeedsUpdate=!1}get boundingBoxNeedUpdate(){return this._boundingBoxNeedsUpdate}}class wn extends Ee{translate(t){return this.transform(new Pt().makeTranslation(t.x,t.y))}get box(){return(this._box==null||this._boundingBoxNeedsUpdate)&&(this._box=this.calculateBoundingBox(),this._boundingBoxNeedsUpdate=!1),this._box}}class Mt extends wn{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),r=0;n.push(0);for(let o=1;o<=t;o++)e=this.getPoint(o/t),r+=e.distanceTo(s),n.push(r),s=e;return n}getUtoTmapping(t,n){const e=this.getLengths();let s=0;const r=e.length;let o;n?o=n:o=t*e[r-1];let a=0,h=r-1,c;for(;a<=h;)if(s=Math.floor(a+(h-a)/2),c=e[s]-o,c<0)a=s+1;else if(c>0)h=s-1;else{h=s;break}if(s=h,e[s]===o)return s/(r-1);const l=e[s],d=e[s+1]-l,g=(o-l)/d;return(s+g)/(r-1)}getTangent(t){let e=t-1e-4,s=t+1e-4;e<0&&(e=0),s>1&&(s=1);const r=this.getPoint(e),o=this.getPoint(s),a=new P;return a.copy(o).sub(r).normalize(),a}getTangentAt(t){const n=this.getUtoTmapping(t);return this.getTangent(n)}}const j=class j extends Mt{constructor(t,n,e,s,r){super();const o=+(t!==void 0)+ +(n!==void 0)+ +(e!==void 0)+ +(s!==void 0)+ +(r!==void 0);if(o==3)typeof t=="object"&&typeof n=="object"&&typeof e=="object"?this.createByThreePoints(t,n,e):this.createByStartEndPointsAndBulge(t,n,e);else if(o==5){const a=t;this.center=new P(a.x,a.y),this.radius=n,this._clockwise=r,this._startAngle=this._clockwise?this._mirrorAngle(p.normalizeAngle(e)):p.normalizeAngle(e),this._endAngle=this._clockwise?this._mirrorAngle(p.normalizeAngle(s)):p.normalizeAngle(s)}else throw V.AcCmErrors.ILLEGAL_PARAMETERS}static fromMathAngles(t,n,e,s,r){const o=new j(t,n,p.normalizeAngle(e),p.normalizeAngle(s),!1);return o._clockwise=r,o._boundingBoxNeedsUpdate=!0,o}static computeCircumcircle(t,n,e){return Pn(t,n,e)}static projectPoint(t,n,e){return we(t,n,e)}static pointLiesOnCircle(t,n,e,s){return Me(t,n,e,s)}static sameCircle(t,n,e,s,r){return ze(t,n,e,s,r)}static isBetterDistanceAlign(t,n,e,s){return be(t,n,e,s)}static tryCreateByThreePoints(t,n,e,s=!1){return Se(t,n,e,s)}static tryCreateCircle(t,n){return pn(t,n)}static tryCreateCircleByDiameter(t,n){return zs(t,n)}static tryCreateCircleByThreePoints(t,n,e){return bs(t,n,e)}static tryCreateShorterArc(t,n,e){return Ss(t,n,e)}static tryCreateByCenterStartEnd(t,n,e,s){return Bt(t,n,e,s)}static tryCreateByCenterStartProjectedEnd(t,n,e,s){return Cs(t,n,e,s)}static tryCreateByCenterStartSweep(t,n,e){return Ce(t,n,e)}static tryCreateByCenterStartChord(t,n,e){return Es(t,n,e)}static tryCreateByStartEndAngle(t,n,e){return Is(t,n,e)}static tryCreateByStartEndDirection(t,n,e){return Ts(t,n,e)}static tryCreateByStartEndRadius(t,n,e){return ks(t,n,e)}createByThreePoints(t,n,e){const s=Se(t,n,e);if(!s)throw V.AcCmErrors.ILLEGAL_PARAMETERS;this.center=s.center,this.radius=s.radius,this._clockwise=s._clockwise,this._startAngle=s._startAngle,this._endAngle=s._endAngle,this._boundingBoxNeedsUpdate=!0}createByStartEndPointsAndBulge(t,n,e){let s,r,o;e<0?(s=Math.atan(-e)*4,r=new B(t),o=new B(n)):(s=Math.atan(e)*4,r=new B(n),o=new B(t));const a=new B().subVectors(o,r),h=a.length(),c=new B().addVectors(r,a.multiplyScalar(.5)),l=Math.abs(h/2/Math.tan(s/2)),u=a.normalize(),d=e<0?-Math.PI/2:Math.PI/2,g=new B(u.x*Math.cos(d)-u.y*Math.sin(d),u.y*Math.cos(d)+u.x*Math.sin(d));let m;s<Math.PI?e<0?m=c.add(g.multiplyScalar(l)):m=c.add(g.multiplyScalar(-l)):e<0?m=c.add(g.multiplyScalar(-l)):m=c.add(g.multiplyScalar(l)),e<0?(this._startAngle=Math.atan2(r.y-m.y,r.x-m.x),this._endAngle=Math.atan2(o.y-m.y,o.x-m.x)):(this._startAngle=Math.atan2(o.y-m.y,o.x-m.x),this._endAngle=Math.atan2(r.y-m.y,r.x-m.x)),this._clockwise=e<0,this.center=m,this.radius=o.sub(m).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(p.normalizeAngle(t)):p.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==S?t:p.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?p.normalizeAngle(t-n):p.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?p.normalizeAngle(t-this.deltaAngle/2):p.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 r of n){const o=this._getInternalAngle(r);p.isBetweenAngle(o,this._getInternalAngle(this.startAngle),this._getInternalAngle(this.endAngle),this.clockwise)&&t.push(this.getPointAtAngle(r))}const e=t.map(r=>r.x),s=t.map(r=>r.y);return new K(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 r=this.midPoint.clone().applyMatrix2d(n),o=this.endPoint.clone().applyMatrix2d(n),a=new j(s,r,o),h=n.determinant()<0?!this.clockwise:this.clockwise,c=l=>{const u=p.normalizeAngle(l);return h?this._mirrorAngle(u):u};return this.center=a.center,this.radius=a.radius,this.clockwise=h,this.startAngle=c(Math.atan2(s.y-a.center.y,s.x-a.center.x)),this.endAngle=c(Math.atan2(o.y-a.center.y,o.x-a.center.x)),this._boundingBoxNeedsUpdate=!0,this}clone(){return new j(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 r of s){const o=this._getInternalAngle(r);p.isBetweenAngle(o,n,e,this.clockwise)&&t.push(this.getPointAtAngle(r))}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 o=Math.atan2(s,e),a=this.clockwise?this._mirrorAngle(p.normalizeAngle(o)):p.normalizeAngle(o),h=this._getInternalAngle(a),c=this._getInternalAngle(this.startAngle),l=this._getInternalAngle(this.endAngle);if(p.isBetweenAngle(h,c,l,this.clockwise))return this.getPointAtAngle(a);const u=n.distanceToSquared(this.startPoint),d=n.distanceToSquared(this.endPoint);return u<=d?this.startPoint.clone():this.endPoint.clone()}inwardAlignment(t,n){const e=n.x-t.x,s=n.y-t.y;if(e*e+s*s<1e-24)return 0;const r=this.radius>0?this.radius:1,o=Math.max(1e-16,1e-12*r*r),a=this.startPoint.distanceToSquared(t)<=o,h=this.endPoint.distanceToSquared(t)<=o;if(!a&&!h)return 0;const c=this.getPoints(8);if(c.length<3)return 0;const l=a&&!h?c[1]:c[c.length-2],u=l.x-t.x,d=l.y-t.y,g=Math.hypot(u,d);return g>1e-18?(e*u+s*d)/g:0}perpendicularPoints(t){const n=new P(t.x,t.y),e=n.x-this.center.x,s=n.y-this.center.y,r=Math.hypot(e,s);if(r<1e-12)return[];const o=e/r,a=s/r,h=[new P(this.center.x+o*this.radius,this.center.y+a*this.radius),new P(this.center.x-o*this.radius,this.center.y-a*this.radius)],c=[],l=this._getInternalAngle(this.startAngle),u=this._getInternalAngle(this.endAngle);for(const d of h){const g=Math.atan2(d.y-this.center.y,d.x-this.center.x),m=this.clockwise?this._mirrorAngle(p.normalizeAngle(g)):p.normalizeAngle(g),f=this._getInternalAngle(m);(this.closed||p.isBetweenAngle(f,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,r=Math.hypot(e,s),o=this.radius;if(r<o)return n;const a=Math.acos(o/r),h=Math.atan2(s,e),c=[h+a,h-a],l=this._getInternalAngle(this.startAngle),u=this._getInternalAngle(this.endAngle);for(const d of c){const g=this.clockwise?this._mirrorAngle(p.normalizeAngle(d)):p.normalizeAngle(d),m=this._getInternalAngle(g);(this.closed||p.isBetweenAngle(m,l,u,this.clockwise))&&n.push(this.getPointAtAngle(g))}return n}getPoints(t=100){const n=[];let e=this.deltaAngle,s=this._getInternalAngle(this.startAngle);if(this.closed&&(e=S,s=0),this.clockwise)for(let r=0;r<=t;r++){const o=s-e*(r/t),a=this._clockwise?this._mirrorAngle(o):o,h=this.getPointAtAngle(a);n.push(new P(h.x,h.y))}else for(let r=0;r<=t;r++){const o=s+e*(r/t),a=this._clockwise?this._mirrorAngle(o):o,h=this.getPointAtAngle(a);n.push(new P(h.x,h.y))}return n}tessellate(t){const n=this.closed?S:this.deltaAngle,e=j.segmentCount(this.radius,n,{...t,minSegments:(t==null?void 0:t.minSegments)??(this.closed?8:3)});return this.getPoints(e)}static resolveCircleSides(t){return t==null||!Number.isFinite(t)?j.DEFAULT_CIRCLE_SIDES:W(Math.round(t),j.MIN_CIRCLE_SIDES,j.MAX_CIRCLE_SIDES)}static resolveTessellateOptions(t){const n=j.resolveCircleSides(t==null?void 0:t.circleSides),e=Math.max(1,Math.round((t==null?void 0:t.maxSegments)??n));return{deviation:t==null?void 0:t.deviation,circleSides:n,minSegments:t==null?void 0:t.minSegments,maxSegments:e}}static chordDeviationFromRadius(t,n=j.DEFAULT_CIRCLE_SIDES){const e=Math.abs(t),s=j.resolveCircleSides(n);return e<=E?E:Math.max(E,e*(1-Math.cos(Math.PI/s)))}static segmentCount(t,n,e){const s=j.resolveTessellateOptions(e),r=Math.abs(n),o=r>=S-1e-8,a=Math.max(1,Math.round(s.minSegments??(o?8:3))),h=Math.max(a,s.maxSegments),c=Math.abs(t);if(c<=E||r<=E)return a;const u=1-(s.deviation??j.chordDeviationFromRadius(c,s.circleSides))/c;if(!Number.isFinite(u)||u>=1)return h;if(u<=-1)return a;const d=2*Math.acos(u);return d<=E?h:W(Math.ceil(r/d),a,h)}};j.DEFAULT_CIRCLE_SIDES=100,j.MIN_CIRCLE_SIDES=8,j.MAX_CIRCLE_SIDES=2e4;let q=j;const Ot=1e-6;function Ie(i,t){if(Js(i)){const r=Ns(i,t);return r?[r]:[]}const n=qe(i);if(n.numberOfVertices<2)return[];const s=ni(n,t);return s?[s]:[]}function Rs(i){return qe(i)}function Ns(i,t){const n=Bs(i);if(n.length===0)return null;const e=[];for(const a of n){const h=Vs(a,t);if(!h)return null;e.push(h)}const s=qs(i),r=Fs(e,s,i.closed,t);if(r.length<2)return null;const o=new dt;return r.forEach((a,h)=>{o.addVertexAt(h,{x:a.x,y:a.y})}),o.closed=i.closed,o}function Bs(i){const t=[],n=i.numberOfVertices,e=i.closed?n:n-1;for(let s=0;s<e;s++){const r=i.vertices[s],o=i.vertices[(s+1)%n];M.isPositive(Math.abs(r.bulge??0))?t.push({kind:"arc",arc:new q(r,o,r.bulge)}):t.push({kind:"line",start:new P(r.x,r.y),end:new P(o.x,o.y)})}return t}function qs(i){const t=[];for(let n=0;n<i.numberOfVertices;n++)t.push(i.getPointAt(n));return t}function Vs(i,t){if(i.kind==="line"){const e=js(i.start,i.end,t);return e?{kind:"line",...e}:null}const n=Ls(i.arc,i.arc.startPoint,i.arc.endPoint,t);return n?{kind:"arc",arc:n}:null}function Ls(i,t,n,e){const s=vs(i,t,n,e),r=i.radius+s;return M.isNonPositive(r)?null:new q(i.center,r,i.startAngle,i.endAngle,i.clockwise)}function vs(i,t,n,e){const s=n.x-t.x,r=n.y-t.y,o=Math.hypot(s,r);if(M.isNonPositive(o))return i.clockwise?-e:e;const a=-r/o,h=s/o,c=i.center.x-(t.x+n.x)/2,l=i.center.y-(t.y+n.y)/2;return c*a+l*h>0?-e:e}function js(i,t,n){const e=t.x-i.x,s=t.y-i.y,r=Math.hypot(e,s);if(M.isNonPositive(r))return null;const o=-s/r*n,a=e/r*n;return{start:new P(i.x+o,i.y+a),end:new P(t.x+o,t.y+a),dx:e,dy:s}}function Fs(i,t,n,e){var a;const s=i.length;if(s===0)return[];const r=Os(i,t,n,e),o=[((a=r[0].nextSegmentStart)==null?void 0:a.clone())??r[0].point.clone()];for(let h=0;h<s;h++){const c=i[h],l=h===s-1&&!n?{point:Zs(c)}:r[(h+1)%s];if(h>0&&r[h].filletPoints&&r[h].filletPoints.forEach(u=>o.push(u.clone())),c.kind==="arc"){const u=r[h].nextSegmentStart??r[h].point,d=l.point,g=Us(c.arc,u,d,Math.max(16,32));for(let m=1;m<g.length;m++)o.push(g[m])}else o.push(l.point.clone())}return Ve(o)}function Os(i,t,n,e){const s=i.length,r=[];for(let o=0;o<s;o++)o===0?r.push(n?Te(i[s-1],i[0],t[0],e):{point:Ys(i[0])}):r.push(Te(i[o-1],i[o],t[o],e));return r}function Us(i,t,n,e){const s=i.nearestPoint(t),r=i.nearestPoint(n),o=Mn(i,s),a=Mn(i,r),h=Xs(i,o,a),c=[];for(let l=0;l<=e;l++){const u=l/e,d=i.clockwise?o-h*u:o+h*u;c.push(i.getPointAtAngle(Ds(i,d)))}return c}function Mn(i,t){return Math.atan2(t.y-i.center.y,t.x-i.center.x)}function Ds(i,t){const n=p.normalizeAngle(t);return i.clockwise?zn(n):n}function zn(i){return(360-i*180/Math.PI)%360*(Math.PI/180)}function Xs(i,t,n){if(i.clockwise){let s=t-n;return M.isNonPositive(s)&&(s+=S),s}let e=n-t;return M.isNonPositive(e)&&(e+=S),e}function Ys(i){return i.kind==="line"?i.start.clone():i.arc.startPoint.clone()}function Zs(i){return i.kind==="line"?i.end.clone():i.arc.endPoint.clone()}function Te(i,t,n,e){return i.kind==="line"&&t.kind==="line"?{point:bn({start:i.start,end:i.end,dx:i.dx,dy:i.dy},{start:t.start,end:t.end,dx:t.dx,dy:t.dy})}:i.kind==="line"&&t.kind==="arc"?ke(i,t.arc,n,e,!0):i.kind==="arc"&&t.kind==="line"?ke(t,i.arc,n,e,!1):i.kind==="arc"&&t.kind==="arc"?Gs(i.arc,t.arc,n,e):{point:n.clone()}}function Gs(i,t,n,e){const s=Be(i.endPoint,t.startPoint),o=Hs(i,t).filter(l=>Ut(i,l)&&Ut(t,l));if(o.length>0)return{point:Ne(o,s)};const a=i.endPoint.clone(),h=t.startPoint.clone(),c=Re(n,Math.abs(e),a,h);return{point:a,filletPoints:c,nextSegmentStart:h}}function ke(i,t,n,e,s){const r=Be(s?i.end:i.start,s?t.startPoint:t.endPoint),o=$s(i,t,r);if(Qs(i,o)&&Ut(t,o))return{point:o};const a=Ws(i,n,e),h=s?t.startPoint.clone():t.endPoint.clone(),c=Re(n,Math.abs(e),s?a:h,s?h:a);return s?{point:a,filletPoints:c,nextSegmentStart:h}:{point:h,filletPoints:c,nextSegmentStart:a}}function Ws(i,t,n){const e=Math.hypot(i.dx,i.dy),s=-i.dy/e*n,r=i.dx/e*n;return new P(t.x+s,t.y+r)}function Qs(i,t){const n=Math.hypot(i.dx,i.dy);if(M.isNonPositive(n))return!1;const e=i.dx/n,s=i.dy/n,r=t.x-i.start.x,o=t.y-i.start.y,a=Math.abs(r*s-o*e);return M.equalToZero(a)}function Re(i,t,n,e){const s=Math.atan2(n.y-i.y,n.x-i.x),r=Math.atan2(e.y-i.y,e.x-i.x),o=Ks(s,r);if(M.equalToZero(Math.abs(o)))return[];const a=[],h=Math.max(2,Math.ceil(Math.abs(o)/Math.PI*16));for(let c=1;c<h;c++){const l=c/h,u=s+o*l;a.push(new P(i.x+t*Math.cos(u),i.y+t*Math.sin(u)))}return a}function Ks(i,t){let n=t-i;for(;n>Math.PI;)n-=S;for(;n<=-Math.PI;)n+=S;return n}function $s(i,t,n){const e=Math.hypot(i.dx,i.dy);if(M.isNonPositive(e))return n.clone();const s=i.dx/e,r=i.dy/e,o=i.start.x-t.center.x,a=i.start.y-t.center.y,h=2*(o*s+a*r),c=o*o+a*a-t.radius*t.radius,l=h*h-4*c;if(l<0)return n.clone();const u=Math.sqrt(l),d=[(-h-u)/2,(-h+u)/2].map(m=>new P(i.start.x+s*m,i.start.y+r*m)),g=d.filter(m=>Ut(t,m));return Ne(g.length>0?g:d,n)}function Ut(i,t){const n=Math.abs(Math.hypot(t.x-i.center.x,t.y-i.center.y)-i.radius);if(M.isPositive(n))return!1;const e=Mn(i,t),s=i.clockwise?zn(p.normalizeAngle(i.startAngle)):p.normalizeAngle(i.startAngle),r=i.clockwise?zn(p.normalizeAngle(i.endAngle)):p.normalizeAngle(i.endAngle);return p.isBetweenAngle(e,s,r,i.clockwise)}function Hs(i,t){const n=t.center.x-i.center.x,e=t.center.y-i.center.y,s=Math.hypot(n,e);if(M.isNonPositive(s))return[];const r=i.radius+t.radius,o=Math.abs(i.radius-t.radius);if(s>r+Ot)return[];if(s<o-Ot)return[];const a=(i.radius*i.radius-t.radius*t.radius+s*s)/(2*s),h=i.radius*i.radius-a*a;if(h<-Ot)return[];const c=i.center.x+a*n/s,l=i.center.y+a*e/s;if(h<=Ot)return[new P(c,l)];const u=Math.sqrt(h),d=-e*u/s,g=n*u/s;return[new P(c+d,l+g),new P(c-d,l-g)]}function Ne(i,t){let n=i[0],e=n.distanceToSquared(t);for(let s=1;s<i.length;s++){const r=i[s].distanceToSquared(t);r<e&&(n=i[s],e=r)}return n.clone()}function Be(i,t){return new P((i.x+t.x)/2,(i.y+t.y)/2)}function Js(i){const t=i.numberOfVertices,n=i.closed?t:t-1;for(let e=0;e<n;e++){const s=i.vertices[e];if(M.isPositive(Math.abs(s.bulge??0)))return!0}return!1}function qe(i){const t=ti(i.vertices.map(n=>new P(n.x,n.y)),i.closed);return t.length===i.numberOfVertices?i:new dt(t.map(n=>({x:n.x,y:n.y})),i.closed)}function ti(i,t){const n=Ve(i);if(!t||n.length<2)return n;const e=n[0],s=n[n.length-1];return M.isNonPositive(Math.hypot(e.x-s.x,e.y-s.y))&&n.pop(),n}function Ve(i){const t=[];return i.forEach(n=>{const e=t[t.length-1];(!e||M.isPositive(Math.hypot(e.x-n.x,e.y-n.y)))&&t.push(new P(n.x,n.y))}),t}function ni(i,t){const n=[];for(let o=0;o<i.numberOfVertices;o++)n.push(i.getPointAt(o));const e=ei(n,i.closed,t);if(e.length===0)return null;const s=[];if(i.closed){if(e.length<2)return null;const o=e.length;for(let a=0;a<o;a++){const h=e[(a-1+o)%o],c=e[a];s.push(bn(h,c))}}else{s.push(e[0].start);for(let o=1;o<e.length;o++)s.push(bn(e[o-1],e[o]));s.push(e[e.length-1].end)}const r=new dt;return s.forEach((o,a)=>{r.addVertexAt(a,{x:o.x,y:o.y})}),r.closed=i.closed,r}function ei(i,t,n){const e=[],s=t?i.length:i.length-1;for(let r=0;r<s;r++){const o=i[r],a=i[t?(r+1)%i.length:r+1],h=a.x-o.x,c=a.y-o.y,l=Math.hypot(h,c);if(M.isNonPositive(l))continue;const u=-c/l*n,d=h/l*n;e.push({start:new P(o.x+u,o.y+d),end:new P(a.x+u,a.y+d),dx:h,dy:c})}return e}function bn(i,t){const n=i.dx*t.dy-i.dy*t.dx;if(M.equalToZero(n))return new P((i.end.x+t.start.x)/2,(i.end.y+t.start.y)/2);const e=t.start.x-i.start.x,s=t.start.y-i.start.y,r=(e*t.dy-s*t.dx)/n;return new P(i.start.x+r*i.dx,i.start.y+r*i.dy)}class dt extends Mt{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 r=null;if(e<n-1?r=this._vertices[e+1]:e==n-1&&this.closed&&(r=this._vertices[0]),r)if(s.bulge){const o=new q(s,r,s.bulge);t+=o.length}else t+=new P(s.x,s.y).distanceTo(r)}return t}get area(){if(!this._closed||this._vertices.length<3)return 0;const t=this.getPoints(128);return Ae(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 K().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 dt(this._vertices.map(t=>({...t})),this._closed)}getPoints3d(t,n){const e=[];return this.getPoints(t).forEach(r=>e.push(new w().set(r.x,r.y,n))),e}getPoints(t){const n=[],e=this._vertices.length;for(let s=0;s<e;++s){const r=this._vertices[s];if(r.bulge){let o=null;if(s<e-1?o=this._vertices[s+1]:s==e-1&&this.closed&&(o=this._vertices[0]),o){const h=new q(r,o,r.bulge).getPoints(t),c=h.length;for(let l=0;l<c;++l){const u=h[l];n.push(new P(u.x,u.y))}}}else n.push(new P(r.x,r.y)),s==e-1&&this.closed&&n.push(n[0])}return n}tessellate(t){const n=[],e=this._vertices.length;for(let s=0;s<e;++s){const r=this._vertices[s];if(r.bulge){let o=null;if(s<e-1?o=this._vertices[s+1]:s===e-1&&this.closed&&(o=this._vertices[0]),o){const h=new q(r,o,r.bulge).tessellate(t);for(let c=0;c<h.length;++c)Le(n,h[c])}}else Le(n,r),s===e-1&&this.closed&&n.length>0&&n.push(n[0].clone())}return n}offset(t){return Ie(this,t)}}function Le(i,t){const n=i[i.length-1];if(n){const e=n.x-t.x,s=n.y-t.y;if(e*e+s*s<=E*E)return}i.push(new P(t.x,t.y))}function si(i,t,n){const e=Math.hypot(t.x,t.y);if(M.isNonPositive(e))return null;const s=-t.y/e*n,r=t.x/e*n;return new w(i.x+s,i.y+r,i.z)}function ii(i,t,n){if(i.length<2)return null;const e=Rs(new dt(i.map(r=>({x:r.x,y:r.y})),t));return Ie(e,n)[0]??null}function ri(i,t,n,e){if(i.length<2||M.equalToZero(n))return null;const{points:s,tangents:r}=je(i,e);if(s.length<2)return null;const o=r??oi(s,t),a=ai(s,o,n),h=t?ci(a):hi(a);if(h.length<2)return null;const c=new dt;return h.forEach((l,u)=>{c.addVertexAt(u,{x:l.x,y:l.y})}),c.closed=t,c}function oi(i,t){const n=i.length,e=new Array(n);for(let s=0;s<n;s++){let r=0,o=0;if(t){const h=i[(s-1+n)%n],c=i[(s+1)%n];r=c.x-h.x,o=c.y-h.y}else s===0?(r=i[1].x-i[0].x,o=i[1].y-i[0].y):s===n-1?(r=i[n-1].x-i[n-2].x,o=i[n-1].y-i[n-2].y):(r=i[s+1].x-i[s-1].x,o=i[s+1].y-i[s-1].y);const a=Math.hypot(r,o);M.isNonPositive(a)?e[s]=new P(1,0):e[s]=new P(r/a,o/a)}return e}function ai(i,t,n){return i.map((e,s)=>{const r=t[s],o=-r.y*n,a=r.x*n;return new P(e.x+o,e.y+a)})}function hi(i){let t=Dt(i);if(t.length<3)return t;for(;;){const n=ve(t,!1);if(!n||(t=Dt([...t.slice(0,n.segmentA+1),n.point,...t.slice(n.segmentB+1)]),t.length<2))break}return t}function ci(i){let t=Dt(i);if(t.length<4)return t;for(;;){const n=ve(t,!0);if(!n||(t=Dt([...t.slice(0,n.segmentA+1),n.point,...t.slice(n.segmentB+1)]),t.length<3))break}return t}function ve(i,t){const n=t?i.length:i.length-1;if(n<2)return null;for(let e=0;e<n;e++){const s=i[e],r=i[(e+1)%i.length];for(let o=e+1;o<n;o++){if(li(e,o,n,t))continue;const a=i[o],h=i[(o+1)%i.length],c=ui(s,r,a,h);if(c)return{point:c,segmentA:e,segmentB:o}}}return null}function li(i,t,n,e){return!!(t===i||t===i+1||e&&i===0&&t===n-1)}function ui(i,t,n,e){const s=t.x-i.x,r=t.y-i.y,o=e.x-n.x,a=e.y-n.y,h=s*a-r*o;if(M.equalToZero(h))return null;const c=n.x-i.x,l=n.y-i.y,u=(c*a-l*o)/h,d=(c*r-l*s)/h,g=kt.equalPointTol;return u<-g||u>1+g||d<-g||d>1+g?null:new P(i.x+u*s,i.y+u*r)}function je(i,t){const n=[],e=[],s=t!=null&&t.length===i.length;return i.forEach((r,o)=>{const a=n[n.length-1];if((!a||M.isPositive(Math.hypot(a.x-r.x,a.y-r.y)))&&(n.push(new P(r.x,r.y)),s)){const h=t[o];e.push(new P(h.x,h.y))}}),{points:n,tangents:s?e:void 0}}function Dt(i){return je(i).points}class Sn extends wn{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 K}transform(t){return this._loops.forEach(n=>{n.transform(t)}),this._boundingBoxNeedsUpdate=!0,this}clone(){const t=new Sn;return this._loops.forEach(n=>{t.add(n.clone())}),t}getPoints(t){const n=[];for(let e=0;e<this.loops.length;++e){const r=this.loops[e].getPoints(t);n.push(r)}return n}tessellate(t){return this.loops.map(n=>n.tessellate(t))}buildHierarchy(t){var h;const n=this.tessellate(t),e=this.calculateBoundaryBoxes(n),s=this.sortBoundaryBoxesByAreas(e),r=new Map,o=s.length;for(let c=0;c<o;c++)r.set(s[c],{index:s[c],children:[]});const a={index:-1,children:[]};for(let c=0;c<o;c++){const l=s[c],u=n[l],d=e[l];let g=c+1;for(;g<o;g++){const m=s[g],f=n[m];if(e[m].containsBox(d)&&O.isPointInPolygon(u[p.randInt(0,u.length-1)],f)){(h=r.get(m))==null||h.children.push(r.get(l));break}}g===o&&a.children.push(r.get(l))}return a}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),r=An(s);n===0?t+=Math.abs(r):t-=Math.abs(r)}return t}calculateBoundaryBoxes(t){const n=[];return t.forEach(e=>{n.push(new K().setFromPoints(e))}),n}sortBoundaryBoxesByAreas(t){const n=[];t.forEach((s,r)=>{const o=s.size,a=o.width*o.height;n.push({area:a,index:r})}),n.sort((s,r)=>s.area-r.area);const e=[];return n.forEach(s=>{e.push(s.index)}),e}}class di extends Ee{translate(t){return this.transform(new st().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 di{static tessellateParametricCurve(t,n,e,s){const r=Math.max(2,Math.round(s.maxSegments)),o=Math.max(1,Math.round(s.minSegments)),a=Math.max(0,s.deviation)*Math.max(0,s.deviation);if(!Number.isFinite(t)||!Number.isFinite(n))return[e(0)];if(Math.abs(n-t)<=E)return[e(t)];const h=Math.min(r,Math.max(2,o+1)),c=Math.min(r,Math.max(h,8));let l=mi(t,n,c);const u=[];for(let g=0;g<l.length;g++)u.push(e(l[g]));let d=u.length;for(let g=0;g<8&&d<r;g++){const m=[];for(let x=0;x<l.length-1&&!(d>=r);x++){const _=(l[x]+l[x+1])/2,C=e(_);d++,gi(C,u[x],u[x+1])>a&&m.push({index:x,t:_,point:C})}if(m.length===0)break;const f=fi(l,u,m);l=f.params,u.length=0;for(let x=0;x<f.points.length;x++)u.push(f.points[x])}return u}}function gi(i,t,n){const e=n.x-t.x,s=n.y-t.y,r=n.z-t.z,o=i.x-t.x,a=i.y-t.y,h=i.z-t.z,c=e*e+s*s+r*r;if(c<=E*E)return o*o+a*a+h*h;const l=W((o*e+a*s+h*r)/c,0,1),u=o-e*l,d=a-s*l,g=h-r*l;return u*u+d*d+g*g}function mi(i,t,n){if(n<=1)return[i];const e=[];for(let s=0;s<n;s++)e.push(s===n-1?t:i+(t-i)*s/(n-1));return e}function fi(i,t,n){const e=[],s=[];let r=0;for(let o=0;o<i.length;o++)for(e.push(i[o]),s.push(t[o]);r<n.length&&n[r].index===o;)e.push(n[r].t),s.push(n[r].point),r++;return{params:e,points:s}}class $ extends ft{static computeCenterPoint(t,n,e){var s;return((s=pe(t,e,n))==null?void 0:s.center)??null}static tryCreateByThreePoints(t,n,e){const s=pe(t,e,n);if(!s)return null;const{center:r,radius:o}=s,a=new y(t.x-r.x,t.y-r.y,(t.z??0)-r.z),h=new y(e.x-r.x,e.y-r.y,(e.z??0)-r.z),c=new y(n.x-r.x,n.y-r.y,(n.z??0)-r.z);if(a.lengthSq()===0||c.lengthSq()===0)return null;const l=new y().crossVectors(a,c);if(l.lengthSq()===0&&(l.crossVectors(a,h),l.lengthSq()===0))return null;l.normalize();const u=a.clone().normalize(),d=new y().crossVectors(l,u),g=f=>p.normalizeAngle(Math.atan2(f.dot(d),f.dot(u)));p.isAngleOnCcwSweep(0,g(h),g(c))||(l.negate(),d.negate());let m=g(c);return M.equalToZero(m)&&(m=S),new $(r,o,0,m,l,u)}static createByThreePoints(t,n,e){return $.tryCreateByThreePoints(t,n,e)}constructor(t,n,e,s,r,o=y.X_AXIS){super(),this.center=t,this.radius=n,this.startAngle=e,this.endAngle=s,this.normal=r,this.refVec=o,(s-e)%S==0?(this.startAngle=0,this.endAngle=S):(this.startAngle=e,this.endAngle=s)}get center(){return this._center}set center(t){this._center=new w(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=p.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._endAngle}set endAngle(t){this._endAngle=this.startAngle==0&&t==S?t:p.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get deltaAngle(){return p.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 y(t.x,t.y,t.z),this._normal.normalize(),this._boundingBoxNeedsUpdate=!0}get refVec(){return this._refVec}set refVec(t){this._refVec=new y(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=S);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 y(t.x,t.y,t.z||0),e=this.center,s=this.normal,o=n.clone().sub(e).dot(s),h=n.clone().sub(s.clone().multiplyScalar(o)).clone().sub(e);if(h.lengthSq()===0)return this.startPoint.clone();h.normalize().multiplyScalar(this.radius);const c=e.clone().add(h),l=this.getAngle(c.clone()),u=this.startAngle,d=this.deltaAngle;let g=p.normalizeAngle(l-u);g<0&&(g=0),g>d&&(g=d);const m=this.getPointAtAngle(u+g),f=m.distanceTo(n),x=this.startPoint.distanceTo(n),_=this.endPoint.distanceTo(n);return x<f&&x<=_?this.startPoint.clone():_<f&&_<x?this.endPoint.clone():m}tangentPoints(t){const n=[],e=new y(t.x,t.y,t.z||0),s=this.center,r=this.normal,o=this.radius,h=e.clone().sub(s).dot(r),c=e.clone().sub(r.clone().multiplyScalar(h)),l=s.clone(),d=c.clone().sub(l).length();if(d<o)return n;const g=Math.acos(o/d),m=this.getAngle(c.clone()),f=[m+g,m-g];for(const x of f){const _=p.normalizeAngle(x-this.startAngle);_>=0&&_<=this.deltaAngle&&n.push(this.getPointAtAngle(this.startAngle+_))}return n}perpendicularPoints(t){const n=[],e=new y(t.x,t.y,t.z||0),s=this.center,r=this.normal,o=this.radius,h=e.clone().sub(s).dot(r),l=e.clone().sub(r.clone().multiplyScalar(h)).clone().sub(s);if(l.lengthSq()<1e-24)return n;l.normalize();const u=[s.clone().add(l.clone().multiplyScalar(o)),s.clone().sub(l.clone().multiplyScalar(o))];for(const d of u){const g=this.getAngle(d.clone()),m=p.normalizeAngle(g-this.startAngle);m>=0&&m<=this.deltaAngle&&n.push(new w(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 w(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 h=0;h<2*Math.PI;h+=Math.PI/2)p.isBetweenAngle(h,this.startAngle,this.endAngle)&&t.push(h);let n=1/0,e=1/0,s=1/0,r=-1/0,o=-1/0,a=-1/0;for(const h of t){const c=this.getPointAtAngle(h);c.x<n&&(n=c.x),c.y<e&&(e=c.y),c.z<s&&(s=c.z),c.x>r&&(r=c.x),c.y>o&&(o=c.y),c.z>a&&(a=c.z)}return new Q({x:n,y:e,z:s},{x:r,y:o,z:a})}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=S,s=0);for(let r=0;r<=t;r++){const o=s+e*(r/t),a=this.getPointAtAngle(o);n.push(a)}return n}tessellate(t){const n=this.closed?S:this.deltaAngle,e=$.segmentCount(this.radius,n,{...t,minSegments:(t==null?void 0:t.minSegments)??(this.closed?8:3)});return this.getPoints(e)}static segmentCount(t,n,e){return q.segmentCount(t,n,e)}transform(t){const n=this.center.clone().applyMatrix4(t),e=this.startPoint.clone().applyMatrix4(t),s=this.endPoint.clone().applyMatrix4(t),r=this.getPointAtAngle(this.closed?Math.PI/2:this.startAngle+this.deltaAngle/2).clone().applyMatrix4(t),o=new y(e).sub(n).normalize(),a=n.distanceTo(e);let h=new y().crossVectors(new y(e).sub(n),new y(r).sub(n)).normalize();h.lengthSq()===0&&(h=this.normal.clone().transformDirection(t));const c=l=>{const u=new y(l).sub(n);return Math.atan2(u.dot(Fe.crossVectors(h,o)),u.dot(o))};return this.center=n,this.radius=a,this.normal=h,this.refVec=o,this.startAngle=0,this.endAngle=this.closed?S: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 $(this.center.clone(),this.radius,this.startAngle,this.endAngle,this.normal,this.refVec)}getAngle(t){return t.sub(this.center),Math.atan2(t.dot(Fe.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},r=this.center,o=this.radius;return new w(r.x+o*(e.x*Math.cos(t)+s.x*Math.sin(t)),r.y+o*(e.y*Math.cos(t)+s.y*Math.sin(t)),r.z+o*(e.z*Math.cos(t)+s.z*Math.sin(t)))}get plane(){const t=new y(this.center).distanceTo(ln);return new wt(this.normal,t)}offset(t){const n=this.radius+t;return n<=0?null:new $(this.center,n,this.startAngle,this.endAngle,this.normal,this.refVec)}}const Fe=new y;class xt extends Mt{constructor(t,n,e,s=0,r=S,o=!1,a=0){super(),this.center=t,this.majorAxisRadius=n,this.minorAxisRadius=e,(r-s)%S==0?(this.startAngle=0,this.endAngle=S):(this.startAngle=s,this.endAngle=r),this.clockwise=o,this.rotation=a}get center(){return this._center}set center(t){this._center=new w(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=p.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._endAngle}set endAngle(t){this._endAngle=this.startAngle==0&&t==S?t:p.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 p.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,r=-1/0;for(let o=0;o<=100;o++){const a=this.getPoint(o/100);n=Math.min(n,a.x),e=Math.min(e,a.y),s=Math.max(s,a.x),r=Math.max(r,a.y)}return new K({x:n,y:e},{x:s,y:r})}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 r=this.startAngle+t*e;let o=this.center.x+this.majorAxisRadius*Math.cos(r),a=this.center.y+this.minorAxisRadius*Math.sin(r);if(this.rotation!==0){const h=Math.cos(this.rotation),c=Math.sin(this.rotation),l=o-this.center.x,u=a-this.center.y;o=l*h-u*c+this.center.x,a=l*c+u*h+this.center.y}return new P(o,a)}transform(t){const n=t,e=new P(this.center).applyMatrix2d(n),s=new w(e.x,e.y,this.center.z),r=this.getPointAtAngle(0).clone().applyMatrix2d(n),o=this.getPointAtAngle(Math.PI/2).clone().applyMatrix2d(n),a=new P(r).sub(e),h=new P(o).sub(e),c=a.length(),l=h.length(),u=Math.atan2(a.y,a.x),d=a.clone().normalize(),g=h.clone().normalize(),m=_=>{const C=new P(_).sub(e),b=C.dot(d),R=C.dot(g);return p.normalizeAngle(Math.atan2(R/l,b/c))},f=n.determinant()<0?!this.clockwise:this.clockwise,x=this.closed?new xt(s,c,l,0,S,f,u):new xt(s,c,l,m(this.startPoint.clone().applyMatrix2d(n)),m(this.endPoint.clone().applyMatrix2d(n)),f,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/S:p.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 xt(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),r=Math.sin(this.rotation),o=this.majorAxisRadius>=this.minorAxisRadius,a=o?s:-r,h=o?r:s;return[new P(this.center.x-e*a,this.center.y-e*h),new P(this.center.x+e*a,this.center.y+e*h)]}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 r=72;for(let o=1;o<=r;o++){const a=this.getPoint(o/r),h=n.distanceToSquared(a);h<s&&(s=h,e=a)}return e}tangentPoints(t){const n=this._projectPointToLocal(t);return this._findSnapAngles(n,(s,r,o,a)=>{const h=-this.majorAxisRadius*a,c=this.minorAxisRadius*o;return(s-n.x)*c-(r-n.y)*h}).map(s=>this.getPointAtAngle(s))}perpendicularPoints(t){const n=this._projectPointToLocal(t);return this._findSnapAngles(n,(s,r,o,a)=>{const h=this.minorAxisRadius*o,c=this.majorAxisRadius*a;return(s-n.x)*c-(r-n.y)*h}).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),r=Math.sin(-this.rotation);return{x:n*s-e*r,y:n*r+e*s}}_findSnapAngles(t,n,e=144){const s=this.majorAxisRadius,r=this.minorAxisRadius,o=this.startAngle,a=this.deltaAngle,h=[],c=d=>{const g=Math.cos(d),m=Math.sin(d);return n(s*g,r*m,g,m)};let l=o,u=c(l);for(let d=1;d<=e;d++){const g=o+a*d/e,m=c(g);if(Math.abs(u)<1e-10&&h.push(l),u*m<0){let f=l,x=g;for(let _=0;_<32;_++){const C=(f+x)/2;c(f)*c(C)<=0?x=C:f=C}h.push((f+x)/2)}l=g,u=m}return h}}class tt extends ft{constructor(t,n,e,s,r,o=0,a=S){super(),this.center=t,this.normal=n,this.majorAxis=e,this.majorAxisRadius=s,this.minorAxisRadius=r;const h=Math.abs(a-o);Math.abs(h-S)<1e-10||Math.abs(h-2*S)<1e-10?(this.startAngle=0,this.endAngle=S):(this.startAngle=o,this.endAngle=a)}get center(){return this._center}set center(t){this._center=new w(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=p.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._endAngle}set endAngle(t){this._endAngle=this.startAngle==0&&t==S?t:p.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get deltaAngle(){const t=this.endAngle-this.startAngle;return Math.abs(t-S)<1e-10?S:p.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 y(t.x,t.y,t.z),this._normal.normalize(),this._boundingBoxNeedsUpdate=!0}get majorAxis(){return this._majorAxis}set majorAxis(t){this._majorAxis=new y(t.x,t.y,t.z),this._majorAxis.normalize(),this._boundingBoxNeedsUpdate=!0}get minorAxis(){return new y().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-S)<1e-10)&&(t=0,n=S);const e=t+n/2;return this.getPointAtAngle(e)}get isCircular(){return M.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 r=1;r<=t;r++){const o=this.startAngle+r*n,a=this.getPointAtAngle(o),h=a.x-s.x,c=a.y-s.y,l=a.z-s.z;e+=Math.sqrt(h*h+c*c+l*l),s=a}return e}get area(){return Math.abs(this.deltaAngle-S)>=1e-10?0:Math.PI*this.majorAxisRadius*this.minorAxisRadius}calculateBoundingBox(){if(this.majorAxis.equals(y.X_AXIS)||this.majorAxis.equals(y.Y_AXIS)||this.majorAxis.isParallelTo(y.X_AXIS)||this.majorAxis.isParallelTo(y.Y_AXIS)){const t=[this.startAngle,this.endAngle];for(let h=0;h<2*Math.PI;h+=Math.PI/2)p.isBetweenAngle(h,this.startAngle,this.endAngle)&&t.push(h);let n=1/0,e=1/0,s=1/0,r=-1/0,o=-1/0,a=-1/0;for(const h of t){const c=this.getPointAtAngle(h);c.x<n&&(n=c.x),c.y<e&&(e=c.y),c.z<s&&(s=c.z),c.x>r&&(r=c.x),c.y>o&&(o=c.y),c.z>a&&(a=c.z)}return new Q({x:n,y:e,z:s},{x:r,y:o,z:a})}else{let n=1/0,e=1/0,s=1/0,r=-1/0,o=-1/0,a=-1/0;for(let h=0;h<=100;h++){const c=this.startAngle+this.deltaAngle*(h/100),l=this.getPointAtAngle(c);n=Math.min(n,l.x),e=Math.min(e,l.y),s=Math.min(s,l.z),r=Math.max(r,l.x),o=Math.max(o,l.y),a=Math.max(a,l.z)}return new Q({x:n,y:e,z:s},{x:r,y:o,z:a})}}get closed(){return this.deltaAngle==0}getPoints(t=100){const n=[];let e=this.deltaAngle,s=this.startAngle;this.closed&&(e=S,s=0);for(let r=0;r<=t;r++){const o=s+e*(r/t),a=this.getPointAtAngle(o);n.push(a)}return n}tessellate(t){const n=q.resolveTessellateOptions(t),e=this.closed?S:this.deltaAngle,s=Math.max(this.majorAxisRadius,this.minorAxisRadius),r=Math.abs(e)>=S-1e-8,o=n.minSegments??(r?8:3);if(this.isCircular){const c=$.segmentCount(s,e,{...t,minSegments:o});return this.getPoints(c)}const a=n.deviation??q.chordDeviationFromRadius(s,n.circleSides),h=this.closed?0:this.startAngle;return ft.tessellateParametricCurve(h,h+e,c=>this.getPointAtAngle(c),{deviation:Math.max(E,a),minSegments:o,maxSegments:n.maxSegments})}getPointAtAngle(t){const n=Math.cos(t),e=Math.sin(t),s=this.minorAxis.clone().multiplyScalar(this.minorAxisRadius).multiplyScalar(e),r=this.majorAxis.clone().multiplyScalar(n*this.majorAxisRadius).add(s);return new w(this.center.x+r.x,this.center.y+r.y,this.center.z+r.z)}nearestPoint(t,n=72){const e=new w(t.x,t.y,t.z||0);let s=this.getPointAtAngle(this.startAngle),r=e.distanceToSquared(s);for(let h=1;h<=n;h++){const c=this.startAngle+this.deltaAngle*h/n,l=this.getPointAtAngle(c),u=e.distanceToSquared(l);u<r&&(r=u,s=l)}const o=e.distanceToSquared(this.startPoint),a=e.distanceToSquared(this.endPoint);return o<r&&o<=a?this.startPoint.clone():a<r&&a<o?this.endPoint.clone():s.clone()}tangentPoints(t){const n=this._projectPointToLocalPlane(t);return this._findSnapParameterAngles((s,r,o,a)=>{const h=-this.majorAxisRadius*a,c=this.minorAxisRadius*o;return(s-n.x)*c-(r-n.y)*h}).map(s=>this.getPointAtAngle(s))}perpendicularPoints(t){const n=this._projectPointToLocalPlane(t);return this._findSnapParameterAngles((s,r,o,a)=>{const h=this.minorAxisRadius*o,c=this.majorAxisRadius*a;return(s-n.x)*c-(r-n.y)*h}).map(s=>this.getPointAtAngle(s))}_projectPointToLocalPlane(t){const n=new w(t.x,t.y,t.z||0),e=new y(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,r=this.startAngle,o=this.deltaAngle,a=[],h=u=>{const d=Math.cos(u),g=Math.sin(u);return t(e*d,s*g,d,g)};let c=r,l=h(c);for(let u=1;u<=n;u++){const d=r+o*u/n,g=h(d);if(Math.abs(l)<1e-10&&a.push(c),l*g<0){let m=c,f=d;for(let x=0;x<32;x++){const _=(m+f)/2;h(m)*h(_)<=0?f=_:m=_}a.push((m+f)/2)}c=d,l=g}return a}contains(t){const n=new y(t).sub(this.center),e=n.dot(this.majorAxis),s=n.dot(this.minorAxis),r=e/this.majorAxisRadius,o=s/this.minorAxisRadius;return r*r+o*o<=1}transform(t){const n=t,e=this.center.clone().applyMatrix4(n),s=this.getPointAtAngle(0).clone().applyMatrix4(n),r=this.getPointAtAngle(Math.PI/2).clone().applyMatrix4(n),o=new y(s).sub(e),a=new y(r).sub(e),h=o.length(),c=a.length(),l=o.clone().normalize(),u=new y().crossVectors(o,a).normalize();let d=new y().crossVectors(u,l).normalize();d.dot(a)<0&&(u.negate(),d=new y().crossVectors(u,l).normalize());const g=f=>{const x=new y(f).sub(e),_=x.dot(l),C=x.dot(d);return p.normalizeAngle(Math.atan2(C/c,_/h))},m=this.closed?new tt(e,u,l,h,c,0,S):new tt(e,u,l,h,c,g(this.startPoint.clone().applyMatrix4(n)),g(this.endPoint.clone().applyMatrix4(n)));return this.center=m.center,this.normal=m.normal,this.majorAxis=m.majorAxis,this.majorAxisRadius=m.majorAxisRadius,this.minorAxisRadius=m.minorAxisRadius,this._startAngle=m._startAngle,this._endAngle=m._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 tt(this.center,this.normal,this.majorAxis,this.majorAxisRadius,this.minorAxisRadius,this.startAngle,this.endAngle)}get plane(){const t=new y(this.center).distanceTo(ln);return new wt(this.normal,t)}offset(t){const n=this.majorAxisRadius+t,e=this.minorAxisRadius+t;return n<=0||e<=0?null:new tt(this.center,this.normal,this.majorAxis,n,e,this.startAngle,this.endAngle)}}class zt extends Mt{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 K(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 zt(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 r=((t.x-this._start.x)*n+(t.y-this._start.y)*e)/s;return r=Math.max(0,Math.min(1,r)),new P(this._start.x+r*n,this._start.y+r*e)}nearestPoint(t){return this.project(t)}}class Xt extends ft{constructor(t,n){super(),this._start=new w(t),this._end=new w(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 y().subVectors(this.endPoint,this.startPoint).normalize()}get midPoint(){return new w((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(yt).normalize();return new w(this._start).addScaledVector(e,t)}else{const e=this.delta(yt).normalize();return new w(this._end).addScaledVector(e,t)}}extend(t,n=!1){if(n){const e=yt.subVectors(this._start,this._end).normalize();this._start=new w(this._start).addScaledVector(e,t)}else{const e=this.delta(yt).normalize();this._end=new w(this._end).addScaledVector(e,t)}return this._boundingBoxNeedsUpdate=!0,this}closestPointToPointParameter(t,n){Oe.subVectors(t,this._start),Yt.subVectors(this.endPoint,this.startPoint);const e=Yt.dot(Yt);let r=Yt.dot(Oe)/e;return n&&(r=p.clamp(r,0,1)),r}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=yt.subVectors(t,this.startPoint).dot(n);return new w().copy(n).multiplyScalar(s).add(this.startPoint)}perpPoint(t){const n=this.direction,e=this.startPoint,r=yt.subVectors(t,e).dot(n),o=yt.copy(n).multiplyScalar(r);return new w().addVectors(e,o)}calculateBoundingBox(){const t=new w(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 w(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 Q(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 Xt(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 r=new y(e.x-n.x,e.y-n.y,0).normalize(),o=new y(-r.y,r.x,0);return new Xt(new w(n.x+o.x*t,n.y+o.y*t,n.z),new w(e.x+o.x*t,e.y+o.y*t,e.z))}}const yt=new y,Oe=new y,Yt=new y;class Cn{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,r){this.init(n,e,r*(e-t),r*(s-n))}initNonuniformCatmullRom(t,n,e,s,r,o,a){let h=(n-t)/r-(e-t)/(r+o)+(e-n)/o,c=(e-n)/o-(s-n)/(o+a)+(s-e)/a;h*=o,c*=o,this.init(n,e,h,c)}calc(t){const n=t*t,e=n*t;return this.c0+this.c1*t+this.c2*n+this.c3*e}}class Zt extends ft{constructor(t=[],n=!1,e="centripetal",s=.5){super(),this.isCatmullRomCurve3d=!0,this.type="CatmullRomCurve3d",this._tmp=new y,this._px=new Cn,this._py=new Cn,this._pz=new Cn,this._points=t.map(r=>new w(r)),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 w}get endPoint(){return this._points.length>0?this._points[this._points.length-1]:new w}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 w){const e=n,s=this._points,r=s.length;if(r===0)return e.set(0,0,0);if(r===1)return e.copy(s[0]);const o=(r-(this._closed?0:1))*t;let a=Math.floor(o),h=o-a;this._closed?a+=a>0?0:(Math.floor(Math.abs(a)/r)+1)*r:h===0&&a===r-1&&(a=r-2,h=1);let c,l;this._closed||a>0?c=s[(a-1)%r]:(this._tmp.subVectors(s[0],s[1]).add(s[0]),c=new w(this._tmp.x,this._tmp.y,this._tmp.z));const u=s[a%r],d=s[(a+1)%r];if(this._closed||a+2<r?l=s[(a+2)%r]:(this._tmp.subVectors(s[r-1],s[r-2]).add(s[r-1]),l=new w(this._tmp.x,this._tmp.y,this._tmp.z)),this._curveType==="centripetal"||this._curveType==="chordal"){const g=this._curveType==="chordal"?.5:.25;let m=Math.pow(c.distanceToSquared(u),g),f=Math.pow(u.distanceToSquared(d),g),x=Math.pow(d.distanceToSquared(l),g);f<1e-4&&(f=1),m<1e-4&&(m=f),x<1e-4&&(x=f),this._px.initNonuniformCatmullRom(c.x,u.x,d.x,l.x,m,f,x),this._py.initNonuniformCatmullRom(c.y,u.y,d.y,l.y,m,f,x),this._pz.initNonuniformCatmullRom(c.z,u.z,d.z,l.z,m,f,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(h),this._py.calc(h),this._pz.calc(h)),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 w(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 Zt(this._points.map(t=>t.clone()),this._closed,this._curveType,this._tension)}transform(t){return this._points=this._points.map(n=>{const e=new w;return e.copy(n),e.applyMatrix4(t),e}),this._boundingBoxNeedsUpdate=!0,this}calculateBoundingBox(){if(this._points.length===0)return new Q;const t=new Q;return this._points.forEach(n=>{t.expandByPoint(n)}),t}}function Ue(i,t){const n=i.x-t[0],e=i.y-t[1],s=(i.z??0)-(t[2]??0);return n*n+e*e+s*s}class L{constructor(t,n,e,s){this._degree=t,this._knots=[...n],this._controlPoints=e.map(r=>({x:r.x,y:r.y,z:r.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 L(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 ue(t,this._degree,this._knots,n,this._weights)}signedPlanarCurvatureAt(t){const n=this.evaluate(t);return de(n.deriv1,n.deriv2)}getOffsetSamplePath2d(t,n=512){const e=Math.abs(t),{start:s,end:r}=this.getParameterRange(),o=this.length(),a=Math.max(64,Math.ceil(o/Math.max(e*.2,1e-6)));let h=xi(s,r,Math.min(a,n));for(let u=0;u<8&&h.length<n;u++){const d=[];for(let g=0;g<h.length-1;g++){const m=h[g],f=h[g+1],x=(m+f)/2,_=Math.max(Math.abs(this.signedPlanarCurvatureAt(m)),Math.abs(this.signedPlanarCurvatureAt(f)),Math.abs(this.signedPlanarCurvatureAt(x)));e*_>.85&&d.push(x)}if(d.length===0)break;if(h=yi(h,d),h.length>n){h=h.slice(0,n);break}}const c=[],l=[];return h.forEach(u=>{const d=this.evaluate(u);c.push(new P(d.point[0],d.point[1]));const g=d.deriv1[0],m=d.deriv1[1],f=Math.hypot(g,m);l.push(f>1e-10?new P(g/f,m/f):new P(1,0))}),{points:c,tangents:l}}length(){const t=this._controlPoints.map(n=>[n.x,n.y,n.z]);return ge(this._degree,this._knots,t,this._weights)}static byKnotsControlPointsWeights(t,n,e,s){return new L(t,n,e,s)}static byPoints(t,n,e="Uniform",s,r){const o=fn(t,n,e,s,r),a=o.controlPoints.map(h=>({x:h[0],y:h[1],z:h[2]}));return new L(n,o.knots,a,o.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 r=0;r<=t;r++){const o=e+(s-e)*(r/t);n.push(this.point(o))}return n}isClosed(t=1e-6){const{start:n,end:e}=this.getParameterRange(),s=this.point(n),r=this.point(e),o=s[0]-r[0],a=s[1]-r[1],h=s[2]-r[2];return Math.sqrt(o*o+a*a+h*h)<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 Zt(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 r=this.point(e),o=Ue(t,r);for(let a=0;a<=n;a++){const h=e+(s-e)*a/n,c=this.point(h),l=Ue(t,c);l<o&&(o=l,r=c)}return{x:r[0],y:r[1],z:r[2]??0}}static createClosedCurve(t,n,e="Chord"){const r=this.createFitPointsForClosedCurve(t).map(o=>[o.x,o.y,o.z]);return L.byPoints(r,n,e)}}function xi(i,t,n){if(n<2)return[i,t];const e=[];for(let s=0;s<n;s++)e.push(s===n-1?t:i+(t-i)*s/(n-1));return e}function yi(i,t){const n=[...i,...t].sort((s,r)=>s-r),e=[];return n.forEach(s=>{const r=e[e.length-1];(r===void 0||Math.abs(r-s)>1e-10)&&e.push(s)}),e}function De(i){if(!i)return!1;const t=i.x??0,n=i.y??0,e=i.z??0;return t*t+n*n+e*e>1e-20}function _i(i,t,n){let e=i??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 Ai(i,t,n){let e=i??0;e<1&&(e=3);const s=t+n-1;return e=Math.min(e,s),Math.max(1,e)}function Pi(i,t){if(!(!i||i.length!==t))return i}class D extends ft{constructor(t,n,e,s,r,o){super();const a=arguments.length;if(this._degree=3,this._closed=!1,Array.isArray(n)){if(a<2||a>5)throw V.AcCmErrors.ILLEGAL_PARAMETERS;this._controlPoints=t;let h,c=3,l=!1;if(a>=3&&(Array.isArray(e)?(h=e,a>=4&&(c=s||3),a>=5&&(l=r)):e!==void 0&&(c=e||3,a>=4&&(l=s))),e===void 0&&a>=4&&(c=s||3,a>=5&&(l=r)),this._degree=c,this._closed=l,this._controlPoints.length<this._degree+1)throw V.AcCmErrors.ILLEGAL_PARAMETERS;this._nurbsCurve=L.byKnotsControlPointsWeights(this._degree,n,this._controlPoints,h)}else{if(a<2||a>6)throw V.AcCmErrors.ILLEGAL_PARAMETERS;this._fitPoints=t,this._knotParameterization=n,a>=3&&(this._degree=e||3);const h=typeof s=="boolean";a>=4&&h&&(this._closed=s),h?(a>=5&&(this._startTangent=r),a>=6&&(this._endTangent=o)):(a>=4&&(this._startTangent=s),a>=5&&(this._endTangent=r)),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=L.createClosedCurve(this._fitPoints,this._degree,this._knotParameterization);else{const l=this.toNurbsPoints(this._fitPoints);this._nurbsCurve=L.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=L.createFitPointsForClosedCurve(this._fitPoints),n=this.toNurbsPoints(t);this._nurbsCurve=L.byPoints(n,this._degree,this._knotParameterization)}else{const t=this.toNurbsPoints(this._fitPoints);this._nurbsCurve=L.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=L.createFitPointsForClosedCurve(this._controlPoints),n=this.toNurbsPoints(t);this._nurbsCurve=L.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=L.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(O.point2dToPoint3d)}get fitPoints(){var t;return(t=this._fitPoints)==null?void 0:t.map(O.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 w(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 w(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 w(e.x,e.y,e.z||0)}evaluateAt(t){const n=this._nurbsCurve.point(t);return new w(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 O.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 w(t.x,t.y,t.z??0)):this._controlPoints.map(t=>new w(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&&O.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&&O.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=L.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(),r=this._nurbsCurve.degree(),o=s[r],a=s[s.length-r-1],h=(a-o)/(t-1);for(let c=0;c<t;c++){const l=c===t-1?a:o+c*h,u=n.point(l);e.push(new w(u[0],u[1],u[2]))}return e}tessellate(t){const n=q.resolveTessellateOptions(t),e=this._nurbsCurve.knots(),s=this._nurbsCurve.degree();if(e.length<s+2)return[this.startPoint.clone(),this.endPoint.clone()];const r=e[s],o=e[e.length-s-1],a=n.circleSides,h=Math.abs(this.length),c=n.deviation??Math.max(E,h<=E?E:h/(2*a*a));return ft.tessellateParametricCurve(r,o,l=>this.evaluateAt(l),{deviation:c,minSegments:n.minSegments??(this.closed?8:2),maxSegments:n.maxSegments})}getCurvePoints(t,n){const e=[],s=t.knots(),r=t.degree(),o=s[r],h=(s[s.length-r-1]-o)/(n-1);for(let c=0;c<n;c++){const l=o+c*h;e.push(t.point(l))}return e}calculateBoundingBox(){const t=this.getPoints(100);return new Q().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 Pe(t)}transform(t){if(this._fitPoints&&this._knotParameterization)this._fitPoints=this._fitPoints.map(n=>new w(n).applyMatrix4(t)),this._startTangent&&(this._startTangent=new w(this._startTangent).transformDirection(t)),this._endTangent&&(this._endTangent=new w(this._endTangent).transformDirection(t)),this.buildCurve();else{const n=this._nurbsCurve.knots(),e=this._nurbsCurve.weights();this._controlPoints=this._controlPoints.map(s=>new w(s).applyMatrix4(t)),this._nurbsCurve=L.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(O.point2dToPoint3d),this._knotParameterization,this._degree,this._closed,this._startTangent?O.point2dToPoint3d(this._startTangent):void 0,this._endTangent?O.point2dToPoint3d(this._endTangent):void 0):new D(this._controlPoints.map(O.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,r){if(t.length<2||n.length<2)return null;const o=_i(s,t.length,n.length);if(t.length<o+1)return null;try{return new D(t,n,Pi(e,t.length),o,r)}catch{return null}}static fromFitPoints(t,n,e,s,r,o){if(t.length<2)return null;const a=De(r),h=De(o),c=(a?1:0)+(h?1:0),l=Ai(e,t.length,c);if(t.length+c<l+1)return null;try{return a||h?new D(t,n,l,s,a?r:void 0,h?o: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(O.point2dToPoint3d);let e=!0;const s=t.controlPoints.map(r=>(r.weight==null&&(e=!1),r.weight||1));return D.fromControlPoints(n,t.knots,e?s:void 0,t.degree,!1)}if(t.numberOfFitData>0){const n=t.fitDatum.map(O.point2dToPoint3d);return D.fromFitPoints(n,"Uniform",t.degree,!1,t.startTangent?O.point2dToPoint3d(t.startTangent):void 0,t.endTangent?O.point2dToPoint3d(t.endTangent):void 0)}return null}}class G extends Mt{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=[],r=n*n,o=(a,h)=>{const c=a.x-h.x,l=a.y-h.y;return c*c+l*l<=r};for(;e.length>0;){const a=[],h=e.shift();a.push(h);const c=G.getEdgeStartPoint(h);let l=G.getEdgeEndPoint(h);if(!o(c,l))for(;e.length>0;){const u=G.findConnectingEdge(e,l,r);if(u.index<0)break;let d=e.splice(u.index,1)[0];if(u.reverse&&(d=G.reverseEdge(d)),a.push(d),l=G.getEdgeEndPoint(d),o(l,c))break}s.push(new G(a))}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 K;return n.setFromPoints(t),n}transform(t){const n=new st().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 G(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}tessellate(t){const n=[];return this._curves.forEach(e=>{pi(e,t).forEach(s=>{const r=n[n.length-1];r&&(r.x-s.x)**2+(r.y-s.y)**2<=E*E||n.push(new P(s.x,s.y))})}),n}static findConnectingEdge(t,n,e){let s=-1,r=!1,o=Number.POSITIVE_INFINITY;for(let a=0;a<t.length;a++){const h=t[a],c=G.getEdgeStartPoint(h),l=G.getEdgeEndPoint(h),u=n.x-c.x,d=n.y-c.y,g=u*u+d*d;g<o&&(o=g,s=a,r=!1);const m=n.x-l.x,f=n.y-l.y,x=m*m+f*f;x<o&&(o=x,s=a,r=!0)}return o>e?{index:-1,reverse:!1}:{index:s,reverse:r}}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 zt?new zt(t.endPoint,t.startPoint):t instanceof q?G.reverseCircArcEdge(t):t instanceof xt?new xt(t.center,t.majorAxisRadius,t.minorAxisRadius,t.endAngle,t.startAngle,!t.clockwise,t.rotation):t instanceof D?G.reverseSplineEdge(t):t}static reverseCircArcEdge(t){const n=t.startPoint,e=t.endPoint,s=!t.clockwise,r=Math.atan2(e.y-t.center.y,e.x-t.center.x),o=Math.atan2(n.y-t.center.y,n.x-t.center.x),a=h=>{const c=p.normalizeAngle(h);return s?p.normalizeAngle(-c):c};return new q(t.center,t.radius,a(r),a(o),s)}static reverseSplineEdge(t){const n=[...t.controlPoints].reverse(),e=t.knots,s=e[0],r=e[e.length-1],o=e.map(c=>s+r-c).reverse(),a=t.weights,h=a.length>0?[...a].reverse():void 0;return new D(n,o,h,t.degree,t.closed)}}function pi(i,t){if(i instanceof zt)return i.getPoints();if(i instanceof q||i instanceof D)return i.tessellate(t);const n=i.closed?S:i.deltaAngle,e=q.segmentCount(Math.max(i.majorAxisRadius,i.minorAxisRadius),n,t);return i.getPoints(e)}const qt=128,Gt=96,z=kt.equalPointTol,En=z*8;function wi(i,t,n=!1,e=!1,s){const r=Ye(i,n,s),o=Ye(t,e,s),a=[];for(const h of r)for(const c of o)Tn(h,c)&&Vn(a,Ke(h,c));return Fi(a)}function Mi(i,t){const n=Xe(i);switch(n.kind){case"line":return n.line.transform(t),n;case"circArc":return n.arc.transform(t),n;case"ellipseArc":return n.arc.transform(t),n;case"spline":return n.spline.transform(t),n}}function Xe(i){switch(i.kind){case"line":return{kind:"line",line:i.line.clone(),extent:i.extent,extendable:i.extendable};case"circArc":return{kind:"circArc",arc:i.arc.clone(),extendable:i.extendable};case"ellipseArc":return{kind:"ellipseArc",arc:i.arc.clone(),extendable:i.extendable};case"spline":return{kind:"spline",spline:i.spline.clone(),extendable:i.extendable}}}function Ye(i,t,n){const e=[];for(const s of i){const r=t&&s.extendable!==!1;switch(s.kind){case"line":{const o=Ci(s.line,n);if(!o)break;const a=r?"unbounded":s.extent;e.push(bt(o.start,o.end,a));break}case"circArc":{const o=bi(s.arc,r);if(n&&!Vt(o.normal,n.normal)){const a=Ii(o,n);(a==null?void 0:a.kind)==="circArc"?e.push(Ze(a.arc,et(a.arc))):(a==null?void 0:a.kind)==="ellipseArc"?e.push(Ge(a.arc,ot(a.arc))):In(e,We(o,et(o)),et(o),n)}else{const a=Ei(o,n);a&&e.push(Ze(a,et(a)))}break}case"ellipseArc":{const o=Si(s.arc,r);if(n&&!Vt(o.normal,n.normal))In(e,Qe(o,ot(o)),ot(o),n);else{const a=Ti(o,n);a&&e.push(Ge(a,ot(a)))}break}case"spline":{n?In(e,s.spline.getPoints(qt),s.spline.closed,n):e.push(zi(s.spline));break}}}return e}function bt(i,t,n){const e=new y().subVectors(t,i);return{kind:"line",start:i,dir:e,extent:n,box:n==="bounded"?new Q().setFromPoints([i,t]):void 0}}function Ze(i,t){return{kind:"circArc",arc:i,full:t||et(i),box:i.box}}function Ge(i,t){return{kind:"ellipseArc",arc:i,full:t||ot(i),box:i.box}}function zi(i){const t=[],n=i.getPoints(qt);if(n.length>=2){const s=i.closed?n.length:n.length-1;for(let r=0;r<s;r++){const o=n[r],a=n[(r+1)%n.length];o.distanceToSquared(a)<z*z||t.push(bt(o.clone(),a.clone(),"bounded"))}}const e=new Q;for(const s of t)s.box&&e.union(s.box);return{kind:"spline",spline:i,samples:t,box:t.length>0?e:void 0}}function bi(i,t){return!t||et(i)?i:new $(i.center,i.radius,0,S,i.normal,i.refVec)}function Si(i,t){return!t||ot(i)?i:new tt(i.center,i.normal,i.majorAxis,i.majorAxisRadius,i.minorAxisRadius,0,S)}function Ci(i,t){if(!t)return{start:i.startPoint.clone(),end:i.endPoint.clone()};const n=rt(i.startPoint,t),e=rt(i.endPoint,t);return n.distanceToSquared(e)<z*z?null:{start:n,end:e}}function Ei(i,t){if(!t)return i;const n=rt(i.center,t);return new $(n,i.radius,i.startAngle,i.endAngle,t.normal.clone(),Nn(i.refVec,t.normal))}function Ii(i,t){const n=rt(i.center,t),e=i.normal.clone();if(e.lengthSq()<z*z)return null;e.normalize();const s=t.normal.clone();if(s.lengthSq()<z*z)return null;s.normalize();const r=e.dot(s),o=Math.abs(r);if(o>1-1e-8)return{kind:"circArc",arc:new $(n,i.radius,i.startAngle,i.endAngle,s,Nn(i.refVec,s))};if(o<1e-8)return null;const a=new y().crossVectors(e,s);if(a.lengthSq()<z*z)return null;a.normalize();const h=new tt(n,s,a,i.radius,i.radius*o,0,S);if(et(i))return{kind:"ellipseArc",arc:h};const c=rt(i.startPoint,t),l=rt(i.endPoint,t),u=rt(i.midPoint,t),d=Et(h,c),g=Et(h,l),m=Et(h,u),f=p.normalizeAngle(m-d),x=p.normalizeAngle(g-d),_=f<=x||x<1e-8?d+x:d+x+S;return{kind:"ellipseArc",arc:new tt(n,s,a,i.radius,i.radius*o,d,_)}}function Ti(i,t){if(!t)return i;const n=rt(i.center,t),e=Nn(i.majorAxis,t.normal);return e.lengthSq()<z*z?null:new tt(n,t.normal.clone(),e,i.majorAxisRadius,i.minorAxisRadius,i.startAngle,i.endAngle)}function In(i,t,n,e){if(t.length<2)return;const s=e?t.map(o=>rt(o,e)):t,r=n?s.length:s.length-1;for(let o=0;o<r;o++){const a=s[o],h=s[(o+1)%s.length];a.distanceToSquared(h)<z*z||i.push(bt(a.clone(),h.clone(),"bounded"))}}function We(i,t){return t||et(i)?new $(i.center,i.radius,0,S,i.normal,i.refVec).getPoints(Gt):i.getPoints(Gt)}function Qe(i,t){return t||ot(i)?new tt(i.center,i.normal,i.majorAxis,i.majorAxisRadius,i.minorAxisRadius,0,S).getPoints(Gt):i.getPoints(Gt)}function Tn(i,t){return!i.box||!t.box?!0:i.box.intersectsBox(t.box)}function Ke(i,t){return i.kind==="spline"&&t.kind==="spline"?ki(i,t):i.kind==="spline"?$e(i,t):t.kind==="spline"?$e(t,i):i.kind==="line"&&t.kind==="line"?He(i,t):i.kind==="line"&&t.kind==="circArc"?Wt(i,t.arc,t.full):t.kind==="line"&&i.kind==="circArc"?Wt(t,i.arc,i.full):i.kind==="line"&&t.kind==="ellipseArc"?kn(i,t.arc,t.full):t.kind==="line"&&i.kind==="ellipseArc"?kn(t,i.arc,i.full):i.kind==="circArc"&&t.kind==="circArc"?Vi(i.arc,i.full,t.arc,t.full):i.kind==="circArc"&&t.kind==="ellipseArc"?Je(i.arc,i.full,t.arc,t.full):i.kind==="ellipseArc"&&t.kind==="circArc"?Je(t.arc,t.full,i.arc,i.full):i.kind==="ellipseArc"&&t.kind==="ellipseArc"?vi(i.arc,i.full,t.arc,t.full):[]}function $e(i,t){const n=[];for(const e of i.samples)Tn(e,t)&&Vn(n,Ke(e,t));return Ri(i.spline,n,t)}function ki(i,t){const n=[];for(const s of i.samples)for(const r of t.samples)Tn(s,r)&&Vn(n,He(s,r));const e=[];for(const s of n){const r=i.spline.nearestPoint(s,qt),o=t.spline.nearestPoint(s,qt);r.distanceTo(o)<=En&&e.push(r)}return e}function Ri(i,t,n){const e=[];for(const s of t){const r=i.nearestPoint(s,qt);Ni(n,r)<=En&&e.push(r)}return e}function Ni(i,t){if(i.kind==="line"){const n=i.dir.lengthSq();if(n<z*z)return Number.POSITIVE_INFINITY;const e=new y().subVectors(t,i.start).dot(i.dir)/n;return St(e,i.extent)?Ct(i.start,i.dir,e).distanceTo(t):Number.POSITIVE_INFINITY}if(i.kind==="circArc"){if(!qn(t,i.arc)){const n=H(i.arc.normal,i.arc.center),e=Math.abs(n.distanceToPoint(t)),s=Math.abs(t.distanceTo(i.arc.center)-i.arc.radius),r=Math.hypot(e,s);if(r>En)return r}return At(i.arc,_t(i.arc,t),i.full)?0:Number.POSITIVE_INFINITY}return i.kind==="ellipseArc"?It(t,i.arc,i.full)?0:Math.abs(Qt(i.arc,t)):Number.POSITIVE_INFINITY}function He(i,t){const n=i.dir,e=t.dir,s=n.lengthSq(),r=e.lengthSq();if(s<z*z||r<z*z)return[];const o=new y().subVectors(i.start,t.start),a=n.dot(n),h=n.dot(e),c=e.dot(e),l=n.dot(o),u=e.dot(o),d=a*c-h*h;if(Math.abs(d)<E*E*a*c)return[];const g=(h*u-c*l)/d,m=(a*u-h*l)/d;if(!St(g,i.extent)||!St(m,t.extent))return[];const f=Ct(i.start,n,g),x=Ct(t.start,e,m);return f.distanceTo(x)>z?[]:[f]}function Wt(i,t,n){const e=H(t.normal,t.center),s=ns(i,e);return s==="coplanar"?Bi(i,t,n):s?qn(s,t)?At(t,_t(t,s),n)?[s]:[]:[]:[]}function Bi(i,t,n){const e=new y().subVectors(i.start,t.center),s=i.dir.dot(i.dir);if(s<z*z)return[];const r=2*i.dir.dot(e),o=e.dot(e)-t.radius*t.radius,a=[];for(const h of ss(s,r,o)){if(!St(h,i.extent))continue;const c=Ct(i.start,i.dir,h);At(t,_t(t,c),n)&&a.push(c)}return a}function kn(i,t,n){const e=H(t.normal,t.center),s=ns(i,e);return s==="coplanar"?qi(i,t,n):s?It(s,t,n)?[s]:[]:[]}function qi(i,t,n){const e=t.majorAxis,s=t.minorAxis,r=t.majorAxisRadius,o=t.minorAxisRadius;if(r<z||o<z)return[];const a=new y().subVectors(i.start,t.center),h=a.dot(e),c=a.dot(s),l=i.dir.dot(e),u=i.dir.dot(s),d=l*l/(r*r)+u*u/(o*o),g=2*h*l/(r*r)+2*c*u/(o*o),m=h*h/(r*r)+c*c/(o*o)-1,f=[];for(const x of ss(d,g,m)){if(!St(x,i.extent))continue;const _=Ct(i.start,i.dir,x);Bn(t,Et(t,_),n)&&f.push(_)}return f}function Vi(i,t,n,e){if(Vt(i.normal,n.normal)){const a=H(i.normal,i.center);return Math.abs(a.distanceToPoint(n.center))>z?[]:ji(Li(i,n),i,t,n,e)}const s=Rn(H(i.normal,i.center),H(n.normal,n.center));if(!s)return[];const r=bt(s.point.clone(),new w().addVectors(s.point,s.dir),"unbounded");return Wt(r,i,t).filter(a=>qn(a,n)?At(n,_t(n,a),e):!1)}function Li(i,t){const n=new y().subVectors(t.center,i.center),e=n.length(),s=i.radius,r=t.radius;if(e<z&&M.equal(s,r,z))return[];if(e>s+r+z)return[];if(e+Math.min(s,r)+z<Math.max(s,r))return[];const o=e<z?es(i.normal):n.clone().normalize(),a=(s*s-r*r+e*e)/(2*Math.max(e,z)),h=s*s-a*a,c=new w().copy(i.center).addScaledVector(o,a);if(h<-z*z)return[];if(h<z*z)return[c];const l=Math.sqrt(Math.max(0,h)),u=new y().crossVectors(i.normal,o).normalize();return[new w().copy(c).addScaledVector(u,l),new w().copy(c).addScaledVector(u,-l)]}function Je(i,t,n,e){if(!Vt(i.normal,n.normal)){const s=Rn(H(i.normal,i.center),H(n.normal,n.center));if(!s)return[];const r=bt(s.point.clone(),new w().addVectors(s.point,s.dir),"unbounded");return Wt(r,i,t).filter(o=>It(o,n,e))}return ts(We(i,t),et(i)||t,s=>Qt(n,s),s=>At(i,_t(i,s),t)&&It(s,n,e))}function vi(i,t,n,e){if(!Vt(i.normal,n.normal)){const s=Rn(H(i.normal,i.center),H(n.normal,n.center));if(!s)return[];const r=bt(s.point.clone(),new w().addVectors(s.point,s.dir),"unbounded");return kn(r,i,t).filter(o=>It(o,n,e))}return ts(Qe(i,t),ot(i)||t,s=>Qt(n,s),s=>Bn(i,Et(i,s),t)&&It(s,n,e))}function ts(i,t,n,e){const s=[],r=t?i.length:i.length-1;for(let o=0;o<r;o++){const a=i[o],h=i[(o+1)%i.length],c=n(a),l=n(h);if(Math.abs(c)<=z){e(a)&&s.push(a.clone());continue}if(c*l>0)continue;let u=0,d=1,g=c;for(let f=0;f<40;f++){const x=(u+d)/2,_=new w().lerpVectors(a,h,x),C=n(_);g*C<=0?d=x:(u=x,g=C)}const m=new w().lerpVectors(a,h,(u+d)/2);e(m)&&s.push(m)}return s}function ns(i,t){const n=t.normal.dot(i.dir),e=t.distanceToPoint(i.start);if(M.equalToZero(n,z*Math.max(1,i.dir.length())))return M.equalToZero(e,z)?"coplanar":null;const s=-e/n;return St(s,i.extent)?Ct(i.start,i.dir,s):null}function Rn(i,t){const n=new y().crossVectors(i.normal,t.normal);if(n.lengthSq()<z*z)return null;n.normalize();const e=i.normal,s=t.normal,r=e.dot(e)*s.dot(s)-e.dot(s)**2;if(Math.abs(r)<E)return null;const o=-i.constant,a=-t.constant,h=(s.dot(s)*o-e.dot(s)*a)/r,c=(e.dot(e)*a-e.dot(s)*o)/r;return{point:new w().addScaledVector(e,h).addScaledVector(s,c),dir:n}}function St(i,t){return t==="unbounded"?!0:t==="ray"?i>=-z:i>=-z&&i<=1+z}function Ct(i,t,n){return new w().copy(i).addScaledVector(t,n)}function rt(i,t){const n=new w;return t.projectPoint(i,n),n}function Nn(i,t){const n=i.clone().addScaledVector(t,-i.dot(t));return n.lengthSq()<z*z?es(t):n.normalize()}function H(i,t){return new wt().setFromNormalAndCoplanarPoint(i,t)}function Vt(i,t){return new y().crossVectors(i,t).lengthSq()<z*z}function _t(i,t){const n=new y().subVectors(t,i.center),e=new y().crossVectors(i.normal,i.refVec);return Math.atan2(n.dot(e),n.dot(i.refVec))}function Et(i,t){const n=new y().subVectors(t,i.center),e=n.dot(i.majorAxis)/i.majorAxisRadius,s=n.dot(i.minorAxis)/i.minorAxisRadius;return Math.atan2(s,e)}function et(i){return i.closed||Math.abs(i.deltaAngle-S)<1e-10}function ot(i){return i.closed||Math.abs(i.endAngle-i.startAngle)<1e-10||Math.abs(i.deltaAngle-S)<1e-10}function At(i,t,n){return n||et(i)?!0:p.normalizeAngle(t-i.startAngle)<=i.deltaAngle+1e-8}function Bn(i,t,n){return n||ot(i)?!0:p.normalizeAngle(t-i.startAngle)<=i.deltaAngle+1e-8}function qn(i,t){const n=H(t.normal,t.center);return Math.abs(n.distanceToPoint(i))>z?!1:Math.abs(i.distanceTo(t.center)-t.radius)<=z}function Qt(i,t){const n=new y().subVectors(t,i.center),e=n.dot(i.majorAxis)/i.majorAxisRadius,s=n.dot(i.minorAxis)/i.minorAxisRadius;return e*e+s*s-1}function It(i,t,n){const e=H(t.normal,t.center);return Math.abs(e.distanceToPoint(i))>z||Math.abs(Qt(t,i))>1e-4?!1:Bn(t,Et(t,i),n)}function ji(i,t,n,e,s){return i.filter(r=>At(t,_t(t,r),n)&&At(e,_t(e,r),s))}function es(i){const t=Math.abs(i.x)<.9?y.X_AXIS:y.Y_AXIS,n=new y().crossVectors(i,t);return n.lengthSq()<z*z&&n.crossVectors(i,y.Z_AXIS),n.normalize()}function ss(i,t,n){if(Math.abs(i)<E)return Math.abs(t)<E?[]:[-n/t];const e=t*t-4*i*n;if(e<-z)return[];if(e<z)return[-t/(2*i)];const s=Math.sqrt(Math.max(0,e));return[(-t-s)/(2*i),(-t+s)/(2*i)]}function Vn(i,t){for(const n of t)i.push(n)}function Fi(i){const t=[];for(const n of i)t.some(e=>e.distanceTo(n)<=z)||t.push(n);return t}A.AcGeArea2d=Sn,A.AcGeBox2d=K,A.AcGeBox3d=Q,A.AcGeCatmullRomCurve3d=Zt,A.AcGeCircArc2d=q,A.AcGeCircArc3d=$,A.AcGeCurve2d=Mt,A.AcGeEllipseArc2d=xt,A.AcGeEllipseArc3d=tt,A.AcGeEuler=gn,A.AcGeGeometryUtil=O,A.AcGeLine2d=zt,A.AcGeLine3d=Xt,A.AcGeLoop2d=G,A.AcGeMathUtil=p,A.AcGeMatrix2d=Pt,A.AcGeMatrix3d=st,A.AcGeNurbsCurve=L,A.AcGePlane=wt,A.AcGePoint2d=P,A.AcGePoint3d=w,A.AcGePolyline2d=dt,A.AcGeQuaternion=Rt,A.AcGeShape2d=wn,A.AcGeSpline3d=D,A.AcGeTol=M,A.AcGeVector2d=B,A.AcGeVector3d=y,A.DEFAULT_TOL=kt,A.DEG2RAD=sn,A.FLOAT_TOL=E,A.ORIGIN_POINT_2D=is,A.ORIGIN_POINT_3D=ln,A.RAD2DEG=rn,A.TAU=S,A.acgeBasisFunction=lt,A.acgeCalculateCurveLength=ge,A.acgeCeilPowerOfTwo=Hn,A.acgeClamp=W,A.acgeCloneIntersectPrimitive=Xe,A.acgeClosedPolygonArea2d=Ae,A.acgeClosedPolygonArea3d=Pe,A.acgeComputeParameterValues=ce,A.acgeDamp=On,A.acgeDegToRad=Qn,A.acgeEuclideanModulo=on,A.acgeEvaluateNurbsDerivatives=ue,A.acgeEvaluateNurbsPoint=Nt,A.acgeFloorPowerOfTwo=Jn,A.acgeGenerateAveragedKnots=le,A.acgeGenerateChordKnots=ms,A.acgeGenerateSqrtChordKnots=fs,A.acgeGenerateUUID=vn,A.acgeGenerateUniformKnots=gs,A.acgeGetOcsAngle=ws,A.acgeGetOcsReferenceVector=Ps,A.acgeIntPartLength=hn,A.acgeInterpolateControlPoints=ys,A.acgeInterpolateNurbsCurve=fn,A.acgeIntersectCurves=wi,A.acgeInverseLerp=Fn,A.acgeIsAngleOnCcwSweep=ee,A.acgeIsBetterDistanceAlign=be,A.acgeIsBetween=te,A.acgeIsBetweenAngle=ne,A.acgeIsPowerOfTwo=$n,A.acgeLerp=an,A.acgeMapLinear=jn,A.acgeNormalizeAngle=mt,A.acgeOffsetPointByDirectionInXY=si,A.acgeOffsetSmoothedSampledPath=ri,A.acgeOffsetVertexPath=ii,A.acgePingpong=Un,A.acgePointLiesOnCircle2d=Me,A.acgePolygonArea2d=ye,A.acgePolygonArea3d=_e,A.acgeRadToDeg=Kn,A.acgeRandFloat=Zn,A.acgeRandFloatSpread=Gn,A.acgeRandInt=Yn,A.acgeRelativeEps=se,A.acgeSameCircle2d=ze,A.acgeSeededRandom=Wn,A.acgeSignedPlanarCurvature=de,A.acgeSignedPolygonArea2d=An,A.acgeSmootherstep=Xn,A.acgeSmoothstep=Dn,A.acgeTransformIntersectPrimitive=Mi,A.acgeTransformOcsPointToWcs=ps,A.acgeTransformWcsPointToOcs=_n,Object.defineProperty(A,Symbol.toStringTag,{value:"Module"})}));
1
+ (function(A,V){typeof exports=="object"&&typeof module<"u"?V(exports,require("@mlightcad/common")):typeof define=="function"&&define.amd?define(["exports","@mlightcad/common"],V):(A=typeof globalThis<"u"?globalThis:A||self,V(A["geometry-engine"]={},A.common))})(this,(function(A,V){"use strict";const F=["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 Ln=1234567;const sn=Math.PI/180,rn=180/Math.PI;function vn(){const i=Math.random()*4294967295|0,t=Math.random()*4294967295|0,n=Math.random()*4294967295|0,e=Math.random()*4294967295|0;return(F[i&255]+F[i>>8&255]+F[i>>16&255]+F[i>>24&255]+"-"+F[t&255]+F[t>>8&255]+"-"+F[t>>16&15|64]+F[t>>24&255]+"-"+F[n&63|128]+F[n>>8&255]+"-"+F[n>>16&255]+F[n>>24&255]+F[e&255]+F[e>>8&255]+F[e>>16&255]+F[e>>24&255]).toLowerCase()}function W(i,t,n){return Math.max(t,Math.min(n,i))}function on(i,t){return(i%t+t)%t}function jn(i,t,n,e,s){return e+(i-t)*(s-e)/(n-t)}function Fn(i,t,n){return i!==t?(n-i)/(t-i):0}function an(i,t,n){return(1-n)*i+n*t}function On(i,t,n,e){return an(i,t,1-Math.exp(-n*e))}function Un(i,t=1){return t-Math.abs(on(i,t*2)-t)}function Dn(i,t,n){return i<=t?0:i>=n?1:(i=(i-t)/(n-t),i*i*(3-2*i))}function Xn(i,t,n){return i<=t?0:i>=n?1:(i=(i-t)/(n-t),i*i*i*(i*(i*6-15)+10))}function Yn(i,t){return i+Math.floor(Math.random()*(t-i+1))}function Zn(i,t){return i+Math.random()*(t-i)}function Gn(i){return i*(.5-Math.random())}function Wn(i){i!==void 0&&(Ln=i);let t=Ln+=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 Qn(i){return i*sn}function Kn(i){return i*rn}function $n(i){return(i&i-1)===0&&i!==0}function Hn(i){return Math.pow(2,Math.ceil(Math.log(i)/Math.LN2))}function Jn(i){return Math.pow(2,Math.floor(Math.log(i)/Math.LN2))}function mt(i){const t=Math.PI*2;return(i%t+t)%t}function te(i,t,n){return i>t&&i<n||i>n&&i<t}function ne(i,t,n,e=!1){return i=mt(i),t=mt(t),n=mt(n),e?t>n?i<=t&&i>=n:i<=t||i>=n:t<n?i>=t&&i<=n:i>=t||i<=n}function ee(i,t,n){const e=mt(n-i);return mt(t-i)<=e+1e-7}function hn(i){return i=Math.abs(i),i<1?0:Math.ceil(Math.log10(Math.abs(i)+1))}function se(i,t=1e-7){const n=hn(i);return Math.max(Math.pow(10,n)*t,t)}const p={DEG2RAD:sn,RAD2DEG:rn,generateUUID:vn,clamp:W,euclideanModulo:on,mapLinear:jn,inverseLerp:Fn,lerp:an,damp:On,pingpong:Un,smoothstep:Dn,smootherstep:Xn,randInt:Yn,randFloat:Zn,randFloatSpread:Gn,seededRandom:Wn,degToRad:Qn,radToDeg:Kn,isPowerOfTwo:$n,ceilPowerOfTwo:Hn,floorPowerOfTwo:Jn,normalizeAngle:mt,isBetween:te,isBetweenAngle:ne,isAngleOnCcwSweep:ee,intPartLength:hn,relativeEps:se},Lt=class Lt{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:r}=t;this.x=s,this.y=r;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 Lt(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),r=this.x-t.x,o=this.y-t.y;return this.x=r*e-o*s+t.x,this.y=r*s+o*e+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}relativeEps(t=1e-7){return Math.min(p.relativeEps(this.x,t),p.relativeEps(this.y,t))}*[Symbol.iterator](){yield this.x,yield this.y}};Lt.EMPTY=Object.freeze(new Lt(0,0));let B=Lt;const vt=class vt{constructor(t,n,e,s,r,o,a,h,c){this.elements=[1,0,0,0,1,0,0,0,1],t!=null&&n!=null&&e!=null&&s!=null&&r!=null&&o!=null&&a!=null&&h!=null&&c!=null&&this.set(t,n,e,s,r,o,a,h,c)}set(t,n,e,s,r,o,a,h,c){const l=this.elements;return l[0]=t,l[1]=s,l[2]=a,l[3]=n,l[4]=r,l[5]=h,l[6]=e,l[7]=o,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,r=this.elements,o=e[0],a=e[3],h=e[6],c=e[1],l=e[4],u=e[7],d=e[2],g=e[5],m=e[8],f=s[0],x=s[3],_=s[6],C=s[1],b=s[4],N=s[7],R=s[2],k=s[5],I=s[8];return r[0]=o*f+a*C+h*R,r[3]=o*x+a*b+h*k,r[6]=o*_+a*N+h*I,r[1]=c*f+l*C+u*R,r[4]=c*x+l*b+u*k,r[7]=c*_+l*N+u*I,r[2]=d*f+g*C+m*R,r[5]=d*x+g*b+m*k,r[8]=d*_+g*N+m*I,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],r=t[3],o=t[4],a=t[5],h=t[6],c=t[7],l=t[8];return n*o*l-n*a*c-e*r*l+e*a*h+s*r*c-s*o*h}invert(){const t=this.elements,n=t[0],e=t[1],s=t[2],r=t[3],o=t[4],a=t[5],h=t[6],c=t[7],l=t[8],u=l*o-a*c,d=a*h-l*r,g=c*r-o*h,m=n*u+e*d+s*g;if(m===0)return this.set(0,0,0,0,0,0,0,0,0);const f=1/m;return t[0]=u*f,t[1]=(s*c-l*e)*f,t[2]=(a*e-s*o)*f,t[3]=d*f,t[4]=(l*n-s*h)*f,t[5]=(s*r-a*n)*f,t[6]=g*f,t[7]=(e*h-c*n)*f,t[8]=(o*n-e*r)*f,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,r,o,a){const h=Math.cos(r),c=Math.sin(r);return this.set(e*h,e*c,-e*(h*o+c*a)+o+t,-s*c,s*h,-s*(-c*o+h*a)+a+n,0,0,1),this}scale(t,n){return this.premultiply(cn.makeScale(t,n)),this}rotate(t){return this.premultiply(cn.makeRotation(-t)),this}translate(t,n){return this.premultiply(cn.makeTranslation(t,n)),this}makeTranslation(t,n){return t instanceof B?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 vt().fromArray(this.elements)}};vt.IDENTITY=Object.freeze(new vt);let Pt=vt;const cn=new Pt,E=1e-6,S=2*Math.PI,is={x:0,y:0},ln={x:0,y:0,z:0};class M{constructor(){this.equalPointTol=E,this.equalVectorTol=E}clone(){const t=new M;return t.equalPointTol=this.equalPointTol,t.equalVectorTol=this.equalVectorTol,t}equalPoint2d(t,n){return new B(t).sub(n).length()<this.equalPointTol}equalPoint3d(t,n){return new y(t).sub(n).length()<this.equalPointTol}static equalToZero(t,n=E){return t<n&&t>-n}static equal(t,n,e=E){return Math.abs(t-n)<e}static great(t,n,e=E){return t-n>e}static less(t,n,e=E){return t-n<e}static isPositive(t,n=E){return t>n}static isNonPositive(t,n=E){return t<=n}}const kt=new M;class Nt{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,r,o,a){let h=e[s+0],c=e[s+1],l=e[s+2],u=e[s+3];const d=r[o+0],g=r[o+1],m=r[o+2],f=r[o+3];if(a===0){t[n+0]=h,t[n+1]=c,t[n+2]=l,t[n+3]=u;return}if(a===1){t[n+0]=d,t[n+1]=g,t[n+2]=m,t[n+3]=f;return}if(u!==f||h!==d||c!==g||l!==m){let x=1-a;const _=h*d+c*g+l*m+u*f,C=_>=0?1:-1,b=1-_*_;if(b>Number.EPSILON){const R=Math.sqrt(b),k=Math.atan2(R,_*C);x=Math.sin(x*k)/R,a=Math.sin(a*k)/R}const N=a*C;if(h=h*x+d*N,c=c*x+g*N,l=l*x+m*N,u=u*x+f*N,x===1-a){const R=1/Math.sqrt(h*h+c*c+l*l+u*u);h*=R,c*=R,l*=R,u*=R}}t[n]=h,t[n+1]=c,t[n+2]=l,t[n+3]=u}static multiplyQuaternionsFlat(t,n,e,s,r,o){const a=e[s],h=e[s+1],c=e[s+2],l=e[s+3],u=r[o],d=r[o+1],g=r[o+2],m=r[o+3];return t[n]=a*m+l*u+h*g-c*d,t[n+1]=h*m+l*d+c*u-a*g,t[n+2]=c*m+l*g+a*d-h*u,t[n+3]=l*m-a*u-h*d-c*g,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 Nt(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,r=t.z,o=t.order,a=Math.cos,h=Math.sin,c=a(e/2),l=a(s/2),u=a(r/2),d=h(e/2),g=h(s/2),m=h(r/2);switch(o){case"XYZ":this._x=d*l*u+c*g*m,this._y=c*g*u-d*l*m,this._z=c*l*m+d*g*u,this._w=c*l*u-d*g*m;break;case"YXZ":this._x=d*l*u+c*g*m,this._y=c*g*u-d*l*m,this._z=c*l*m-d*g*u,this._w=c*l*u+d*g*m;break;case"ZXY":this._x=d*l*u-c*g*m,this._y=c*g*u+d*l*m,this._z=c*l*m+d*g*u,this._w=c*l*u-d*g*m;break;case"ZYX":this._x=d*l*u-c*g*m,this._y=c*g*u+d*l*m,this._z=c*l*m-d*g*u,this._w=c*l*u+d*g*m;break;case"YZX":this._x=d*l*u+c*g*m,this._y=c*g*u+d*l*m,this._z=c*l*m-d*g*u,this._w=c*l*u-d*g*m;break;case"XZY":this._x=d*l*u-c*g*m,this._y=c*g*u-d*l*m,this._z=c*l*m+d*g*u,this._w=c*l*u+d*g*m;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],r=n[8],o=n[1],a=n[5],h=n[9],c=n[2],l=n[6],u=n[10],d=e+a+u;if(d>0){const g=.5/Math.sqrt(d+1);this._w=.25/g,this._x=(l-h)*g,this._y=(r-c)*g,this._z=(o-s)*g}else if(e>a&&e>u){const g=2*Math.sqrt(1+e-a-u);this._w=(l-h)/g,this._x=.25*g,this._y=(s+o)/g,this._z=(r+c)/g}else if(a>u){const g=2*Math.sqrt(1+a-e-u);this._w=(r-c)/g,this._x=(s+o)/g,this._y=.25*g,this._z=(h+l)/g}else{const g=2*Math.sqrt(1+u-e-a);this._w=(o-s)/g,this._x=(r+c)/g,this._y=(h+l)/g,this._z=.25*g}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(W(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,r=t._z,o=t._w,a=n._x,h=n._y,c=n._z,l=n._w;return this._x=e*l+o*a+s*c-r*h,this._y=s*l+o*h+r*a-e*c,this._z=r*l+o*c+e*h-s*a,this._w=o*l-e*a-s*h-r*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,r=this._z,o=this._w;let a=o*t._w+e*t._x+s*t._y+r*t._z;if(a<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,a=-a):this.copy(t),a>=1)return this._w=o,this._x=e,this._y=s,this._z=r,this;const h=1-a*a;if(h<=Number.EPSILON){const g=1-n;return this._w=g*o+n*this._w,this._x=g*e+n*this._x,this._y=g*s+n*this._y,this._z=g*r+n*this._z,this.normalize(),this}const c=Math.sqrt(h),l=Math.atan2(c,a),u=Math.sin((1-n)*l)/c,d=Math.sin(n*l)/c;return this._w=o*u+this._w*d,this._x=e*u+this._x*d,this._y=s*u+this._y*d,this._z=r*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),r=Math.sqrt(e);return this.set(s*Math.sin(t),s*Math.cos(t),r*Math.sin(n),r*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:r,y:o,z:a}=t;this.x=r,this.y=o,this.z=a||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(ie.setFromEuler(t))}applyAxisAngle(t,n){return this.applyQuaternion(ie.setFromAxisAngle(t,n))}applyMatrix3(t){const n=this.x,e=this.y,s=this.z,r=t.elements;return this.x=r[0]*n+r[3]*e+r[6]*s,this.y=r[1]*n+r[4]*e+r[7]*s,this.z=r[2]*n+r[5]*e+r[8]*s,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const n=this.x,e=this.y,s=this.z,r=t.elements,o=1/(r[3]*n+r[7]*e+r[11]*s+r[15]);return this.x=(r[0]*n+r[4]*e+r[8]*s+r[12])*o,this.y=(r[1]*n+r[5]*e+r[9]*s+r[13])*o,this.z=(r[2]*n+r[6]*e+r[10]*s+r[14])*o,this}applyQuaternion(t){const n=this.x,e=this.y,s=this.z,r=t.x,o=t.y,a=t.z,h=t.w,c=2*(o*s-a*e),l=2*(a*n-r*s),u=2*(r*e-o*n);return this.x=n+h*c+o*u-a*l,this.y=e+h*l+a*c-r*u,this.z=s+h*u+r*l-o*c,this}transformDirection(t){const n=this.x,e=this.y,s=this.z,r=t.elements;return this.x=r[0]*n+r[4]*e+r[8]*s,this.y=r[1]*n+r[5]*e+r[9]*s,this.z=r[2]*n+r[6]*e+r[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,r=t.z,o=n.x,a=n.y,h=n.z;return this.x=s*h-r*a,this.y=r*o-e*h,this.z=e*a-s*o,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 un.copy(this).projectOnVector(t),this.sub(un)}reflect(t){return this.sub(un.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 y=v;const un=new y,ie=new Nt,Tt=class Tt{static makeTranslation(t,n,e){return new Tt().makeTranslation(t,n,e)}constructor(t,n,e,s,r,o,a,h,c,l,u,d,g,m,f,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&&r!=null&&o!=null&&a!=null&&h!=null&&c!=null&&l!=null&&u!=null&&d!=null&&g!=null&&m!=null&&f!=null&&x!=null&&this.set(t,n,e,s,r,o,a,h,c,l,u,d,g,m,f,x)}set(t,n,e,s,r,o,a,h,c,l,u,d,g,m,f,x){const _=this.elements;return _[0]=t,_[4]=n,_[8]=e,_[12]=s,_[1]=r,_[5]=o,_[9]=a,_[13]=h,_[2]=c,_[6]=l,_[10]=u,_[14]=d,_[3]=g,_[7]=m,_[11]=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 Tt().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(kt.equalPoint3d(e,y.Z_AXIS))this.identity();else{const s=new y(1,0,0);Math.abs(e.x)<1/64&&Math.abs(e.y)<1/64?s.crossVectors(y.Y_AXIS,e).normalize():s.crossVectors(y.Z_AXIS,e).normalize();const r=e.clone().cross(s).normalize();this.makeBasis(s,r,e)}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/pt.setFromMatrixColumn(t,0).length(),r=1/pt.setFromMatrixColumn(t,1).length(),o=1/pt.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]*r,n[5]=e[5]*r,n[6]=e[6]*r,n[7]=0,n[8]=e[8]*o,n[9]=e[9]*o,n[10]=e[10]*o,n[11]=0,n[12]=0,n[13]=0,n[14]=0,n[15]=1,this}makeRotationFromQuaternion(t){return this.compose(rs,t,os)}lookAt(t,n,e){const s=this.elements;return Z.subVectors(t,n),Z.lengthSq()===0&&(Z.z=1),Z.normalize(),ct.crossVectors(e,Z),ct.lengthSq()===0&&(Math.abs(e.z)===1?Z.x+=1e-4:Z.z+=1e-4,Z.normalize(),ct.crossVectors(e,Z)),ct.normalize(),Ft.crossVectors(Z,ct),s[0]=ct.x,s[4]=Ft.x,s[8]=Z.x,s[1]=ct.y,s[5]=Ft.y,s[9]=Z.y,s[2]=ct.z,s[6]=Ft.z,s[10]=Z.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,r=this.elements,o=e[0],a=e[4],h=e[8],c=e[12],l=e[1],u=e[5],d=e[9],g=e[13],m=e[2],f=e[6],x=e[10],_=e[14],C=e[3],b=e[7],N=e[11],R=e[15],k=s[0],I=s[4],gt=s[8],T=s[12],U=s[1],X=s[5],at=s[9],ht=s[13],Y=s[2],Kt=s[6],$t=s[10],Ht=s[14],Jt=s[3],tn=s[7],nn=s[11],en=s[15];return r[0]=o*k+a*U+h*Y+c*Jt,r[4]=o*I+a*X+h*Kt+c*tn,r[8]=o*gt+a*at+h*$t+c*nn,r[12]=o*T+a*ht+h*Ht+c*en,r[1]=l*k+u*U+d*Y+g*Jt,r[5]=l*I+u*X+d*Kt+g*tn,r[9]=l*gt+u*at+d*$t+g*nn,r[13]=l*T+u*ht+d*Ht+g*en,r[2]=m*k+f*U+x*Y+_*Jt,r[6]=m*I+f*X+x*Kt+_*tn,r[10]=m*gt+f*at+x*$t+_*nn,r[14]=m*T+f*ht+x*Ht+_*en,r[3]=C*k+b*U+N*Y+R*Jt,r[7]=C*I+b*X+N*Kt+R*tn,r[11]=C*gt+b*at+N*$t+R*nn,r[15]=C*T+b*ht+N*Ht+R*en,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],r=t[12],o=t[1],a=t[5],h=t[9],c=t[13],l=t[2],u=t[6],d=t[10],g=t[14],m=t[3],f=t[7],x=t[11],_=t[15];return m*(+r*h*u-s*c*u-r*a*d+e*c*d+s*a*g-e*h*g)+f*(+n*h*g-n*c*d+r*o*d-s*o*g+s*c*l-r*h*l)+x*(+n*c*u-n*a*g-r*o*u+e*o*g+r*a*l-e*c*l)+_*(-s*a*l-n*h*u+n*a*d+s*o*u-e*o*d+e*h*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 y?(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],r=t[3],o=t[4],a=t[5],h=t[6],c=t[7],l=t[8],u=t[9],d=t[10],g=t[11],m=t[12],f=t[13],x=t[14],_=t[15],C=u*x*c-f*d*c+f*h*g-a*x*g-u*h*_+a*d*_,b=m*d*c-l*x*c-m*h*g+o*x*g+l*h*_-o*d*_,N=l*f*c-m*u*c+m*a*g-o*f*g-l*a*_+o*u*_,R=m*u*h-l*f*h-m*a*d+o*f*d+l*a*x-o*u*x,k=n*C+e*b+s*N+r*R;if(k===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const I=1/k;return t[0]=C*I,t[1]=(f*d*r-u*x*r-f*s*g+e*x*g+u*s*_-e*d*_)*I,t[2]=(a*x*r-f*h*r+f*s*c-e*x*c-a*s*_+e*h*_)*I,t[3]=(u*h*r-a*d*r-u*s*c+e*d*c+a*s*g-e*h*g)*I,t[4]=b*I,t[5]=(l*x*r-m*d*r+m*s*g-n*x*g-l*s*_+n*d*_)*I,t[6]=(m*h*r-o*x*r-m*s*c+n*x*c+o*s*_-n*h*_)*I,t[7]=(o*d*r-l*h*r+l*s*c-n*d*c-o*s*g+n*h*g)*I,t[8]=N*I,t[9]=(m*u*r-l*f*r-m*e*g+n*f*g+l*e*_-n*u*_)*I,t[10]=(o*f*r-m*a*r+m*e*c-n*f*c-o*e*_+n*a*_)*I,t[11]=(l*a*r-o*u*r-l*e*c+n*u*c+o*e*g-n*a*g)*I,t[12]=R*I,t[13]=(l*f*s-m*u*s+m*e*d-n*f*d-l*e*x+n*u*x)*I,t[14]=(m*a*s-o*f*s-m*e*h+n*f*h+o*e*x-n*a*x)*I,t[15]=(o*u*s-l*a*s+l*e*h-n*u*h-o*e*d+n*a*d)*I,this}scale(t){const n=this.elements,e=t.x,s=t.y,r=t.z;return n[0]*=e,n[4]*=s,n[8]*=r,n[1]*=e,n[5]*=s,n[9]*=r,n[2]*=e,n[6]*=s,n[10]*=r,n[3]*=e,n[7]*=s,n[11]*=r,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),r=1-e,o=t.x,a=t.y,h=t.z,c=r*o,l=r*a;return this.set(c*o+e,c*a-s*h,c*h+s*a,0,c*a+s*h,l*a+e,l*h-s*o,0,c*h-s*a,l*h+s*o,r*h*h+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,r,o){return this.set(1,e,r,0,t,1,o,0,n,s,1,0,0,0,0,1),this}compose(t,n,e){const s=this.elements,r=n.x,o=n.y,a=n.z,h=n.w,c=r+r,l=o+o,u=a+a,d=r*c,g=r*l,m=r*u,f=o*l,x=o*u,_=a*u,C=h*c,b=h*l,N=h*u,R=e.x,k=e.y,I=e.z;return s[0]=(1-(f+_))*R,s[1]=(g+N)*R,s[2]=(m-b)*R,s[3]=0,s[4]=(g-N)*k,s[5]=(1-(d+_))*k,s[6]=(x+C)*k,s[7]=0,s[8]=(m+b)*I,s[9]=(x-C)*I,s[10]=(1-(d+f))*I,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 r=pt.set(s[0],s[1],s[2]).length();const o=pt.set(s[4],s[5],s[6]).length(),a=pt.set(s[8],s[9],s[10]).length();this.determinant()<0&&(r=-r),t.x=s[12],t.y=s[13],t.z=s[14],J.copy(this);const c=1/r,l=1/o,u=1/a;return J.elements[0]*=c,J.elements[1]*=c,J.elements[2]*=c,J.elements[4]*=l,J.elements[5]*=l,J.elements[6]*=l,J.elements[8]*=u,J.elements[9]*=u,J.elements[10]*=u,n.setFromRotationMatrix(J),e.x=r,e.y=o,e.z=a,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}};Tt.IDENTITY=Object.freeze(new Tt);let st=Tt;const pt=new y,J=new st,rs=new y(0,0,0),os=new y(1,1,1),ct=new y,Ft=new y,Z=new y;class Q{constructor(t=void 0,n=void 0){this.min=t==null?new y(1/0,1/0,1/0):new y(t.x,t.y,t.z),this.max=n==null?new y(-1/0,-1/0,-1/0):new y(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(dn.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=dn.copy(n).multiplyScalar(.5);return this.min.copy(t).sub(e),this.max.copy(t).add(e),this}clone(){return new Q().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 y(0,0,0):new y(0,0,0).addVectors(this.min,this.max).multiplyScalar(.5)}get size(){return this.isEmpty()?new y(0,0,0):new y(0,0,0).subVectors(this.max,this.min)}expandByPoint(t){return!Number.isFinite(t.x)||!Number.isFinite(t.y)||!Number.isFinite(t.z)?this:(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,dn).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:(it[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),it[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),it[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),it[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),it[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),it[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),it[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),it[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(it),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 it=[new y,new y,new y,new y,new y,new y,new y,new y],dn=new y,re=new B;class K{constructor(t=void 0,n=void 0){this.min=t==null?new B(1/0,1/0):new B(t.x,t.y),this.max=n==null?new B(-1/0,-1/0):new B(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=re.copy(n).multiplyScalar(.5);return this.min.copy(t).sub(e),this.max.copy(t).add(e),this}clone(){return new K().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 B(0,0):new B(0,0).addVectors(this.min,this.max).multiplyScalar(.5)}get size(){return this.isEmpty()?new B(0,0):new B(0,0).subVectors(this.max,this.min)}expandByPoint(t){return!Number.isFinite(t.x)||!Number.isFinite(t.y)?this:(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,re).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 oe=new y,as=new y,hs=new Pt;class wt{constructor(t=new y(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=oe.subVectors(e,n).cross(as.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||hs.getNormalMatrix(t),s=this.coplanarPoint(oe).applyMatrix4(t),r=this.normal.applyMatrix3(e).normalize();return this.constant=-s.dot(r),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 wt().copy(this)}}class P extends B{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 w extends y{clone(){return new w(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((r,o)=>{r.toArray(s,o*e)}),s}}const ae=new st,he=new Nt,jt=class jt{constructor(t=0,n=0,e=0,s=jt.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 jt(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,r=s[0],o=s[4],a=s[8],h=s[1],c=s[5],l=s[9],u=s[2],d=s[6],g=s[10];switch(n){case"XYZ":this._y=Math.asin(W(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-l,g),this._z=Math.atan2(-o,r)):(this._x=Math.atan2(d,c),this._z=0);break;case"YXZ":this._x=Math.asin(-W(l,-1,1)),Math.abs(l)<.9999999?(this._y=Math.atan2(a,g),this._z=Math.atan2(h,c)):(this._y=Math.atan2(-u,r),this._z=0);break;case"ZXY":this._x=Math.asin(W(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-u,g),this._z=Math.atan2(-o,c)):(this._y=0,this._z=Math.atan2(h,r));break;case"ZYX":this._y=Math.asin(-W(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(d,g),this._z=Math.atan2(h,r)):(this._x=0,this._z=Math.atan2(-o,c));break;case"YZX":this._z=Math.asin(W(h,-1,1)),Math.abs(h)<.9999999?(this._x=Math.atan2(-l,c),this._y=Math.atan2(-u,r)):(this._x=0,this._y=Math.atan2(a,g));break;case"XZY":this._z=Math.asin(-W(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(d,c),this._y=Math.atan2(a,r)):(this._x=Math.atan2(-l,g),this._y=0);break}return this._order=n,e===!0&&this._onChangeCallback(),this}setFromQuaternion(t,n,e=!0){return ae.makeRotationFromQuaternion(t),this.setFromRotationMatrix(ae,n,e)}setFromVector3(t,n=this._order){return this.set(t.x,t.y,t.z,n)}reorder(t){return he.setFromEuler(this),this.setFromQuaternion(he,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}};jt.DEFAULT_ORDER="XYZ";let gn=jt;function cs(i){const t=i;return{x:i.x,y:i.y,z:t.z??0}}function ls(i,t){i.x+=t.x,i.y+=t.y,i.z=(i.z??0)+(t.z??0)}function us(i,t,n=!1){const e=i.x,s=i.y;let r=!1;const o=t.length;for(let a=0,h=o-1;a<o;h=a++){const c=t[a].x,l=t[a].y,u=t[h].x,d=t[h].y;let g=l>s!=d>s;n&&(g=l>=s!=d>=s),g&&e<(u-c)*(s-l)/(d-l)+c&&(r=!r)}return r}function ds(i,t){if(i.length===0||t.length===0)return!1;const n=new K().setFromPoints(i),e=new K().setFromPoints(t);if(!n.intersectsBox(e))return!1;for(let s=0;s<i.length;){if(O.isPointInPolygon(i[s],t,!0))return!0;s<i.length-1&&kt.equalPoint2d(i[s+1],i[s])&&++s,++s}return!1}const O={applyOffsetToPoint3d:ls,isPointInPolygon:us,isPolygonIntersect:ds,point2dToPoint3d:cs};function gs(i,t){const n=[],e=t-1,s=i;for(let r=0;r<=s;r++)n.push(0);for(let r=1;r<=e-s;r++)n.push(r);for(let r=0;r<=s;r++)n.push(e-s+1);return n}function ms(i,t){const n=t.length-1,e=i,s=[0];let r=0;for(let a=1;a<=n;a++){const h=t[a][0]-t[a-1][0],c=t[a][1]-t[a-1][1],l=t[a][2]-t[a-1][2],u=Math.sqrt(h*h+c*c+l*l);r+=u,s.push(r)}const o=[];for(let a=0;a<=e;a++)o.push(0);for(let a=1;a<=n-e;a++){const h=s[a]/r;o.push(h*(n-e+1))}for(let a=0;a<=e;a++)o.push(n-e+1);return o}function ce(i,t="Uniform"){const n=i.length;if(n===0)return[];if(n===1)return[0];const e=n-1;if(t==="Uniform")return new Array(n).fill(0).map((o,a)=>a/e);const s=[0];let r=0;for(let o=1;o<=e;o++){const a=i[o][0]-i[o-1][0],h=i[o][1]-i[o-1][1],c=i[o][2]-i[o-1][2],l=Math.sqrt(a*a+h*h+c*c),u=t==="SqrtChord"?Math.sqrt(l):l;r+=u,s.push(r)}return r<1e-12?new Array(n).fill(0).map((o,a)=>a/e):s.map(o=>o/r)}function le(i,t){const n=t.length-1,e=i,s=n+e+1,r=new Array(s+1).fill(0),o=t[t.length-1];for(let a=s-e;a<=s;a++)r[a]=o;for(let a=1;a<=n-e;a++){let h=0;for(let c=a;c<a+e;c++)h+=t[c];r[a+e]=h/e}return r}function fs(i,t){const n=t.length-1,e=i,s=[0];let r=0;for(let a=1;a<=n;a++){const h=t[a][0]-t[a-1][0],c=t[a][1]-t[a-1][1],l=t[a][2]-t[a-1][2],u=Math.sqrt(h*h+c*c+l*l),d=Math.sqrt(u);r+=d,s.push(r)}const o=[];for(let a=0;a<=e;a++)o.push(0);for(let a=1;a<=n-e;a++){const h=s[a]/r;o.push(h*(n-e+1))}for(let a=0;a<=e;a++)o.push(n-e+1);return o}function mn(i,t){const n=i.length,e=i.map(o=>o.slice()),s=t.slice();for(let o=0;o<n;o++){let a=o,h=Math.abs(e[o][o]);for(let c=o+1;c<n;c++){const l=Math.abs(e[c][o]);l>h&&(h=l,a=c)}if(h<1e-12)throw new Error("Interpolation matrix is singular.");if(a!==o){const c=e[o];e[o]=e[a],e[a]=c;const l=s[o];s[o]=s[a],s[a]=l}for(let c=o+1;c<n;c++){const l=e[c][o]/e[o][o];if(!(Math.abs(l)<1e-14)){for(let u=o;u<n;u++)e[c][u]-=l*e[o][u];s[c]-=l*s[o]}}}const r=new Array(n).fill(0);for(let o=n-1;o>=0;o--){let a=s[o];for(let h=o+1;h<n;h++)a-=e[o][h]*r[h];r[o]=a/e[o][o]}return r}function fn(i,t,n="Uniform",e,s){if(i.length===0)return{controlPoints:[],knots:[],weights:[]};const r=i.map(T=>[T[0],T[1],T[2]??0]),o=!!e,a=!!s,h=(o?1:0)+(a?1:0),c=r.length-1,l=c+h;if(l<t)throw new Error("Not enough points to interpolate a curve of this degree.");const u=ce(r,n),d=u.slice();o&&d.unshift(u[0]),a&&d.push(u[u.length-1]);const g=le(t,d),m=l+1,f=new Array(m),x=new Array(m),_=new Array(m),C=new Array(m);let b=0;f[b]=new Array(m).fill(0),f[b][0]=1,x[b]=r[0][0],_[b]=r[0][1],C[b]=r[0][2],b++;for(let T=1;T<=c-1;T++){const U=u[T];f[b]=new Array(m).fill(0);for(let X=0;X<=l;X++)f[b][X]=lt(X,t,U,g);x[b]=r[T][0],_[b]=r[T][1],C[b]=r[T][2],b++}if(f[b]=new Array(m).fill(0),f[b][l]=1,x[b]=r[c][0],_[b]=r[c][1],C[b]=r[c][2],b++,o){const T=g[t+1]-g[0],U=T!==0?t/T:0;f[b]=new Array(m).fill(0),f[b][0]=-U,f[b][1]=U,x[b]=(e==null?void 0:e[0])??0,_[b]=(e==null?void 0:e[1])??0,C[b]=(e==null?void 0:e[2])??0,b++}if(a){const T=g[l+t+1]-g[l],U=T!==0?t/T:0;f[b]=new Array(m).fill(0),f[b][l-1]=-U,f[b][l]=U,x[b]=(s==null?void 0:s[0])??0,_[b]=(s==null?void 0:s[1])??0,C[b]=(s==null?void 0:s[2])??0,b++}const N=mn(f,x),R=mn(f,_),k=mn(f,C),I=new Array(m);for(let T=0;T<m;T++)I[T]=[N[T],R[T],k[T]];const gt=new Array(m).fill(1);return{controlPoints:I,knots:g,weights:gt}}function lt(i,t,n,e){if(t===0)return n>=e[i]&&n<e[i+1]?1:0;const s=e[i+t]-e[i],r=e[i+t+1]-e[i+1],o=s>1e-10?(n-e[i])/s:0,a=r>1e-10?(e[i+t+1]-n)/r:0;return o*lt(i,t-1,n,e)+a*lt(i+1,t-1,n,e)}function Rt(i,t,n,e,s){const r=e.length-1,o=t;if(i=Math.max(n[o],Math.min(n[r+1],i)),Math.abs(i-n[r+1])<1e-8)return[...e[r]];if(Math.abs(i-n[o])<1e-8)return[...e[0]];const a=[0,0,0];let h=0;for(let c=0;c<=r;c++){const l=lt(c,o,i,n),u=s[c]*l;a[0]+=e[c][0]*u,a[1]+=e[c][1]*u,a[2]+=e[c][2]*u,h+=u}if(Math.abs(h)<1e-10){const c=n[n.length-o-1];if(Math.abs(i-c)<1e-8)return[...e[r]];if(Math.abs(i-n[o])<1e-8)return[...e[0]]}return Math.abs(h)>=1e-10&&(a[0]/=h,a[1]/=h,a[2]/=h),a}function xn(i,t,n,e){if(t===0)return 0;const s=e[i+t]-e[i],r=e[i+t+1]-e[i+1];let o=0;return s>1e-10&&(o+=t/s*lt(i,t-1,n,e)),r>1e-10&&(o-=t/r*lt(i+1,t-1,n,e)),o}function xs(i,t,n,e){if(t<=1)return 0;const s=e[i+t]-e[i],r=e[i+t+1]-e[i+1];let o=0;return s>1e-10&&(o+=t/s*xn(i,t-1,n,e)),r>1e-10&&(o-=t/r*xn(i+1,t-1,n,e)),o}function ue(i,t,n,e,s){const r=e.length-1,o=t,a=n[o],h=n[r+1];i=Math.max(a,Math.min(h,i));const c=[0,0,0],l=[0,0,0],u=[0,0,0];let d=0,g=0,m=0;for(let k=0;k<=r;k++){const I=lt(k,o,i,n),gt=xn(k,o,i,n),T=xs(k,o,i,n),U=s[k],X=U*I,at=U*gt,ht=U*T,Y=e[k];c[0]+=X*Y[0],c[1]+=X*Y[1],c[2]+=X*Y[2],l[0]+=at*Y[0],l[1]+=at*Y[1],l[2]+=at*Y[2],u[0]+=ht*Y[0],u[1]+=ht*Y[1],u[2]+=ht*Y[2],d+=X,g+=at,m+=ht}if(Math.abs(d)<1e-10)return{point:Rt(i,t,n,e,s),deriv1:[0,0,0],deriv2:[0,0,0]};const f=d*d,x=[c[0]/d,c[1]/d,c[2]/d],_=[(l[0]*d-c[0]*g)/f,(l[1]*d-c[1]*g)/f,(l[2]*d-c[2]*g)/f],C=u[0]*d-c[0]*m,b=u[1]*d-c[1]*m,N=u[2]*d-c[2]*m,R=[C/f-2*g*_[0]/d,b/f-2*g*_[1]/d,N/f-2*g*_[2]/d];return{point:x,deriv1:_,deriv2:R}}function de(i,t){const n=i[0],e=i[1],s=t[0],r=t[1],o=n*n+e*e;return o<1e-20?0:(n*r-e*s)/Math.pow(o,1.5)}function ge(i,t,n,e){const s=i,r=t[s],o=t[t.length-s-1];let a=0;const h=1e3,c=(o-r)/h;let l=Rt(r,i,t,n,e);for(let f=1;f<=h;f++){const x=r+f*c,_=Rt(x,i,t,n,e),C=_[0]-l[0],b=_[1]-l[1],N=_[2]-l[2];a+=Math.sqrt(C*C+b*b+N*N),l=_}const u=Rt(o,i,t,n,e),d=u[0]-l[0],g=u[1]-l[1],m=u[2]-l[2];return a+=Math.sqrt(d*d+g*g+m*m),a}function ys(i,t=3,n="Uniform",e,s){return i.length===0?[]:fn(i,t,n,e,s).controlPoints}const me=new st,fe=new y,_s=new y,As=new y,yn=new w;function xe(i){return new st().setFromExtrusionDirection(new y(i.x,i.y,i.z))}function Ps(i){return me.setFromExtrusionDirection(new y(i.x,i.y,i.z)),me.extractBasis(fe,_s,As),fe.clone()}function ps(i,t){return new w(i.x,i.y,i.z??0).applyMatrix4(xe(t))}function _n(i,t){return new w(i.x,i.y,i.z??0).applyMatrix4(xe(t).invert())}function ws(i,t,n){const e=_n(i,n),s=_n(t,n);return yn.set(s.x-e.x,s.y-e.y,(s.z??0)-(e.z??0)),p.normalizeAngle(Math.atan2(yn.y,yn.x))}function An(i){const t=i.length;if(t<3)return 0;let n=0;for(let e=0,s=t-1;e<t;s=e++){const r=i[s],o=i[e];n+=r.x*o.y-o.x*r.y}return n*.5}function ye(i){return Math.abs(An(i))}function _e(i){const t=i.length;if(t<3)return 0;let n=0,e=0,s=0;for(let r=0,o=t-1;r<t;o=r++){const a=i[o],h=i[r],c=a.x,l=a.y,u=a.z??0,d=h.x,g=h.y,m=h.z??0;n+=(u+m)*(l-g),e+=(c+d)*(u-m),s+=(l+g)*(c-d)}return .5*Math.hypot(n,e,s)}function Ae(i){return i.length<3?0:ye(i)}function Pe(i){return i.length<3?0:_e(i)}function Pn(i,t,n){const e=i.x,s=i.y,r=t.x,o=t.y,a=n.x,h=n.y,c=2*(e*(o-h)+r*(h-s)+a*(s-o));if(M.equalToZero(c))return null;const l=((e*e+s*s)*(o-h)+(r*r+o*o)*(h-s)+(a*a+h*h)*(s-o))/c,u=((e*e+s*s)*(a-r)+(r*r+o*o)*(e-a)+(a*a+h*h)*(r-e))/c,d=Math.hypot(l-e,u-s);return!Number.isFinite(d)||M.isNonPositive(d)?null:{center:new P(l,u),radius:d}}function pe(i,t,n){const e=i.x,s=i.y,r=i.z??0,o=new y(t.x-e,t.y-s,(t.z??0)-r),a=new y(n.x-e,n.y-s,(n.z??0)-r),h=new y().crossVectors(o,a),c=h.lengthSq();if(c<E*E)return null;const l=o.lengthSq(),u=a.lengthSq(),d=new y().crossVectors(h,o).multiplyScalar(u).add(new y().crossVectors(a,h).multiplyScalar(l)).multiplyScalar(1/(2*c)),g=new w(e+d.x,s+d.y,r+d.z),m=Math.hypot(g.x-e,g.y-s,g.z-r);return!Number.isFinite(m)||M.isNonPositive(m)?null:{center:g,radius:m}}function ut(i,t){return Math.atan2(t.y-i.y,t.x-i.x)}function nt(i,t){return Math.hypot(t.x-i.x,t.y-i.y)}function we(i,t,n){if(M.isNonPositive(t))return null;const e=n.x-i.x,s=n.y-i.y,r=Math.hypot(e,s);if(M.isNonPositive(r))return null;const o=t/r;return new P(i.x+e*o,i.y+s*o)}const Ms=1e-8;function Me(i,t,n,e){return Math.abs(nt(i,t)-n)<=(e??Math.max(E,n*1e-5))}function ze(i,t,n,e,s=Ms){return Math.abs(i.x-n.x)<=s&&Math.abs(i.y-n.y)<=s&&Math.abs(t-e)<=s}function be(i,t,n,e){const s=Math.max(1e-18,Math.abs(n)*1e-9);return i<n-s?!0:i>n+s?!1:t>e}function Se(i,t,n,e=!1){const s=Pn(i,t,n);if(!s)return null;const r=ut(s.center,i),o=ut(s.center,t),a=ut(s.center,n);let h=!p.isAngleOnCcwSweep(r,o,a);return e&&(h=!h),q.fromMathAngles(s.center,s.radius,r,a,h)}function pn(i,t){return!Number.isFinite(t)||M.isNonPositive(t)?null:new q(i,t,0,S,!1)}function zs(i,t){const n=nt(i,t);return M.isNonPositive(n)?null:pn({x:(i.x+t.x)/2,y:(i.y+t.y)/2},n/2)}function bs(i,t,n){const e=Pn(i,t,n);return e?pn(e.center,e.radius):null}function Ss(i,t,n){const e=nt(n,i);if(M.isNonPositive(e))return null;const s=ut(n,i),r=ut(n,t),o=p.normalizeAngle(r-s);return q.fromMathAngles(n,e,s,r,o>Math.PI)}function Bt(i,t,n,e){const s=nt(i,t),r=nt(i,n);if(M.isNonPositive(s)||M.isNonPositive(r))return null;const o=Math.max(E,s*E);return Math.abs(s-r)>o?null:q.fromMathAngles(i,s,ut(i,t),ut(i,n),e)}function Cs(i,t,n,e){const s=nt(i,t);if(M.isNonPositive(s))return null;const r=we(i,s,n);return r?Bt(i,t,r,e):null}function Ce(i,t,n){const e=nt(i,t),s=Math.abs(n);if(M.isNonPositive(e)||M.isNonPositive(s)||!M.great(S-s,0))return null;const r=n<0,o=ut(i,t),a=r?o-s:o+s;return q.fromMathAngles(i,e,o,a,r)}function Es(i,t,n){const e=nt(i,t),s=Math.abs(n);if(M.isNonPositive(e)||M.isNonPositive(s)||M.great(s,2*e))return null;const r=Math.max(-1,Math.min(1,s/(2*e))),o=2*Math.asin(r);return Ce(i,t,n>=0?o:-o)}function Is(i,t,n){const e=nt(i,t),s=Math.abs(n);if(M.isNonPositive(e)||M.isNonPositive(s)||!M.great(S-s,0))return null;const r=Math.sin(s/2);if(M.equalToZero(r))return null;const o=e/(2*r),a=o*o-e*e/4;if(M.less(a,0))return null;const h=Math.sqrt(Math.max(0,a)),c=(i.x+t.x)/2,l=(i.y+t.y)/2,u=t.x-i.x,g=-(t.y-i.y)/e,m=u/e,f=n>=0,_=f&&s<=Math.PI||!f&&s>Math.PI?1:-1,C={x:c+g*h*_,y:l+m*h*_};return Bt(C,i,t,!f)}function Ts(i,t,n){const e=Math.cos(n),s=Math.sin(n),r=t.x-i.x,o=t.y-i.y,a=-s,h=e,c=2*(r*a+o*h);if(M.equalToZero(c))return null;const l=(r*r+o*o)/c;if(!Number.isFinite(l))return null;const u={x:i.x+a*l,y:i.y+h*l},d=i.x-u.x,g=i.y-u.y,m=d*s-g*e;return M.equalToZero(m)?null:Bt(u,i,t,m<0)}function ks(i,t,n){const e=Math.abs(n),s=nt(i,t);if(M.isNonPositive(e)||M.isNonPositive(s)||M.great(s,2*e))return null;const r=(i.x+t.x)/2,o=(i.y+t.y)/2,a=t.x-i.x,c=-(t.y-i.y)/s,l=a/s,u=Math.sqrt(Math.max(0,e*e-s*s/4)),d=n>=0?1:-1,g={x:r+c*u*d,y:o+l*u*d};return Bt(g,i,t,n<0)}class Ee{constructor(){this._boundingBoxNeedsUpdate=!1}get boundingBoxNeedUpdate(){return this._boundingBoxNeedsUpdate}}class wn extends Ee{translate(t){return this.transform(new Pt().makeTranslation(t.x,t.y))}get box(){return(this._box==null||this._boundingBoxNeedsUpdate)&&(this._box=this.calculateBoundingBox(),this._boundingBoxNeedsUpdate=!1),this._box}}class Mt extends wn{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),r=0;n.push(0);for(let o=1;o<=t;o++)e=this.getPoint(o/t),r+=e.distanceTo(s),n.push(r),s=e;return n}getUtoTmapping(t,n){const e=this.getLengths();let s=0;const r=e.length;let o;n?o=n:o=t*e[r-1];let a=0,h=r-1,c;for(;a<=h;)if(s=Math.floor(a+(h-a)/2),c=e[s]-o,c<0)a=s+1;else if(c>0)h=s-1;else{h=s;break}if(s=h,e[s]===o)return s/(r-1);const l=e[s],d=e[s+1]-l,g=(o-l)/d;return(s+g)/(r-1)}getTangent(t){let e=t-1e-4,s=t+1e-4;e<0&&(e=0),s>1&&(s=1);const r=this.getPoint(e),o=this.getPoint(s),a=new P;return a.copy(o).sub(r).normalize(),a}getTangentAt(t){const n=this.getUtoTmapping(t);return this.getTangent(n)}}const j=class j extends Mt{constructor(t,n,e,s,r){super();const o=+(t!==void 0)+ +(n!==void 0)+ +(e!==void 0)+ +(s!==void 0)+ +(r!==void 0);if(o==3)typeof t=="object"&&typeof n=="object"&&typeof e=="object"?this.createByThreePoints(t,n,e):this.createByStartEndPointsAndBulge(t,n,e);else if(o==5){const a=t;this.center=new P(a.x,a.y),this.radius=n,this._clockwise=r,this._startAngle=this._clockwise?this._mirrorAngle(p.normalizeAngle(e)):p.normalizeAngle(e),this._endAngle=this._clockwise?this._mirrorAngle(p.normalizeAngle(s)):p.normalizeAngle(s)}else throw V.AcCmErrors.ILLEGAL_PARAMETERS}static fromMathAngles(t,n,e,s,r){const o=new j(t,n,p.normalizeAngle(e),p.normalizeAngle(s),!1);return o._clockwise=r,o._boundingBoxNeedsUpdate=!0,o}static computeCircumcircle(t,n,e){return Pn(t,n,e)}static projectPoint(t,n,e){return we(t,n,e)}static pointLiesOnCircle(t,n,e,s){return Me(t,n,e,s)}static sameCircle(t,n,e,s,r){return ze(t,n,e,s,r)}static isBetterDistanceAlign(t,n,e,s){return be(t,n,e,s)}static tryCreateByThreePoints(t,n,e,s=!1){return Se(t,n,e,s)}static tryCreateCircle(t,n){return pn(t,n)}static tryCreateCircleByDiameter(t,n){return zs(t,n)}static tryCreateCircleByThreePoints(t,n,e){return bs(t,n,e)}static tryCreateShorterArc(t,n,e){return Ss(t,n,e)}static tryCreateByCenterStartEnd(t,n,e,s){return Bt(t,n,e,s)}static tryCreateByCenterStartProjectedEnd(t,n,e,s){return Cs(t,n,e,s)}static tryCreateByCenterStartSweep(t,n,e){return Ce(t,n,e)}static tryCreateByCenterStartChord(t,n,e){return Es(t,n,e)}static tryCreateByStartEndAngle(t,n,e){return Is(t,n,e)}static tryCreateByStartEndDirection(t,n,e){return Ts(t,n,e)}static tryCreateByStartEndRadius(t,n,e){return ks(t,n,e)}createByThreePoints(t,n,e){const s=Se(t,n,e);if(!s)throw V.AcCmErrors.ILLEGAL_PARAMETERS;this.center=s.center,this.radius=s.radius,this._clockwise=s._clockwise,this._startAngle=s._startAngle,this._endAngle=s._endAngle,this._boundingBoxNeedsUpdate=!0}createByStartEndPointsAndBulge(t,n,e){let s,r,o;e<0?(s=Math.atan(-e)*4,r=new B(t),o=new B(n)):(s=Math.atan(e)*4,r=new B(n),o=new B(t));const a=new B().subVectors(o,r),h=a.length(),c=new B().addVectors(r,a.multiplyScalar(.5)),l=Math.abs(h/2/Math.tan(s/2)),u=a.normalize(),d=e<0?-Math.PI/2:Math.PI/2,g=new B(u.x*Math.cos(d)-u.y*Math.sin(d),u.y*Math.cos(d)+u.x*Math.sin(d));let m;s<Math.PI?e<0?m=c.add(g.multiplyScalar(l)):m=c.add(g.multiplyScalar(-l)):e<0?m=c.add(g.multiplyScalar(-l)):m=c.add(g.multiplyScalar(l)),e<0?(this._startAngle=Math.atan2(r.y-m.y,r.x-m.x),this._endAngle=Math.atan2(o.y-m.y,o.x-m.x)):(this._startAngle=Math.atan2(o.y-m.y,o.x-m.x),this._endAngle=Math.atan2(r.y-m.y,r.x-m.x)),this._clockwise=e<0,this.center=m,this.radius=o.sub(m).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(p.normalizeAngle(t)):p.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==S?t:p.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?p.normalizeAngle(t-n):p.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?p.normalizeAngle(t-this.deltaAngle/2):p.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 r of n){const o=this._getInternalAngle(r);p.isBetweenAngle(o,this._getInternalAngle(this.startAngle),this._getInternalAngle(this.endAngle),this.clockwise)&&t.push(this.getPointAtAngle(r))}const e=t.map(r=>r.x),s=t.map(r=>r.y);return new K(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 r=this.midPoint.clone().applyMatrix2d(n),o=this.endPoint.clone().applyMatrix2d(n),a=new j(s,r,o),h=n.determinant()<0?!this.clockwise:this.clockwise,c=l=>{const u=p.normalizeAngle(l);return h?this._mirrorAngle(u):u};return this.center=a.center,this.radius=a.radius,this.clockwise=h,this.startAngle=c(Math.atan2(s.y-a.center.y,s.x-a.center.x)),this.endAngle=c(Math.atan2(o.y-a.center.y,o.x-a.center.x)),this._boundingBoxNeedsUpdate=!0,this}clone(){return new j(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 r of s){const o=this._getInternalAngle(r);p.isBetweenAngle(o,n,e,this.clockwise)&&t.push(this.getPointAtAngle(r))}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 o=Math.atan2(s,e),a=this.clockwise?this._mirrorAngle(p.normalizeAngle(o)):p.normalizeAngle(o),h=this._getInternalAngle(a),c=this._getInternalAngle(this.startAngle),l=this._getInternalAngle(this.endAngle);if(p.isBetweenAngle(h,c,l,this.clockwise))return this.getPointAtAngle(a);const u=n.distanceToSquared(this.startPoint),d=n.distanceToSquared(this.endPoint);return u<=d?this.startPoint.clone():this.endPoint.clone()}inwardAlignment(t,n){const e=n.x-t.x,s=n.y-t.y;if(e*e+s*s<1e-24)return 0;const r=this.radius>0?this.radius:1,o=Math.max(1e-16,1e-12*r*r),a=this.startPoint.distanceToSquared(t)<=o,h=this.endPoint.distanceToSquared(t)<=o;if(!a&&!h)return 0;const c=this.getPoints(8);if(c.length<3)return 0;const l=a&&!h?c[1]:c[c.length-2],u=l.x-t.x,d=l.y-t.y,g=Math.hypot(u,d);return g>1e-18?(e*u+s*d)/g:0}perpendicularPoints(t){const n=new P(t.x,t.y),e=n.x-this.center.x,s=n.y-this.center.y,r=Math.hypot(e,s);if(r<1e-12)return[];const o=e/r,a=s/r,h=[new P(this.center.x+o*this.radius,this.center.y+a*this.radius),new P(this.center.x-o*this.radius,this.center.y-a*this.radius)],c=[],l=this._getInternalAngle(this.startAngle),u=this._getInternalAngle(this.endAngle);for(const d of h){const g=Math.atan2(d.y-this.center.y,d.x-this.center.x),m=this.clockwise?this._mirrorAngle(p.normalizeAngle(g)):p.normalizeAngle(g),f=this._getInternalAngle(m);(this.closed||p.isBetweenAngle(f,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,r=Math.hypot(e,s),o=this.radius;if(r<o)return n;const a=Math.acos(o/r),h=Math.atan2(s,e),c=[h+a,h-a],l=this._getInternalAngle(this.startAngle),u=this._getInternalAngle(this.endAngle);for(const d of c){const g=this.clockwise?this._mirrorAngle(p.normalizeAngle(d)):p.normalizeAngle(d),m=this._getInternalAngle(g);(this.closed||p.isBetweenAngle(m,l,u,this.clockwise))&&n.push(this.getPointAtAngle(g))}return n}getPoints(t=100){const n=[];let e=this.deltaAngle,s=this._getInternalAngle(this.startAngle);if(this.closed&&(e=S,s=0),this.clockwise)for(let r=0;r<=t;r++){const o=s-e*(r/t),a=this._clockwise?this._mirrorAngle(o):o,h=this.getPointAtAngle(a);n.push(new P(h.x,h.y))}else for(let r=0;r<=t;r++){const o=s+e*(r/t),a=this._clockwise?this._mirrorAngle(o):o,h=this.getPointAtAngle(a);n.push(new P(h.x,h.y))}return n}tessellate(t){const n=this.closed?S:this.deltaAngle,e=j.segmentCount(this.radius,n,{...t,minSegments:(t==null?void 0:t.minSegments)??(this.closed?8:3)});return this.getPoints(e)}static resolveCircleSides(t){return t==null||!Number.isFinite(t)?j.DEFAULT_CIRCLE_SIDES:W(Math.round(t),j.MIN_CIRCLE_SIDES,j.MAX_CIRCLE_SIDES)}static resolveTessellateOptions(t){const n=j.resolveCircleSides(t==null?void 0:t.circleSides),e=Math.max(1,Math.round((t==null?void 0:t.maxSegments)??n));return{deviation:t==null?void 0:t.deviation,circleSides:n,minSegments:t==null?void 0:t.minSegments,maxSegments:e}}static chordDeviationFromRadius(t,n=j.DEFAULT_CIRCLE_SIDES){const e=Math.abs(t),s=j.resolveCircleSides(n);return e<=E?E:Math.max(E,e*(1-Math.cos(Math.PI/s)))}static segmentCount(t,n,e){const s=j.resolveTessellateOptions(e),r=Math.abs(n),o=r>=S-1e-8,a=Math.max(1,Math.round(s.minSegments??(o?8:3))),h=Math.max(a,s.maxSegments),c=Math.abs(t);if(c<=E||r<=E)return a;const u=1-(s.deviation??j.chordDeviationFromRadius(c,s.circleSides))/c;if(!Number.isFinite(u)||u>=1)return h;if(u<=-1)return a;const d=2*Math.acos(u);return d<=E?h:W(Math.ceil(r/d),a,h)}};j.DEFAULT_CIRCLE_SIDES=100,j.MIN_CIRCLE_SIDES=8,j.MAX_CIRCLE_SIDES=2e4;let q=j;const Ot=1e-6;function Ie(i,t){if(Js(i)){const r=Rs(i,t);return r?[r]:[]}const n=qe(i);if(n.numberOfVertices<2)return[];const s=ni(n,t);return s?[s]:[]}function Ns(i){return qe(i)}function Rs(i,t){const n=Bs(i);if(n.length===0)return null;const e=[];for(const a of n){const h=Vs(a,t);if(!h)return null;e.push(h)}const s=qs(i),r=Fs(e,s,i.closed,t);if(r.length<2)return null;const o=new dt;return r.forEach((a,h)=>{o.addVertexAt(h,{x:a.x,y:a.y})}),o.closed=i.closed,o}function Bs(i){const t=[],n=i.numberOfVertices,e=i.closed?n:n-1;for(let s=0;s<e;s++){const r=i.vertices[s],o=i.vertices[(s+1)%n];M.isPositive(Math.abs(r.bulge??0))?t.push({kind:"arc",arc:new q(r,o,r.bulge)}):t.push({kind:"line",start:new P(r.x,r.y),end:new P(o.x,o.y)})}return t}function qs(i){const t=[];for(let n=0;n<i.numberOfVertices;n++)t.push(i.getPointAt(n));return t}function Vs(i,t){if(i.kind==="line"){const e=js(i.start,i.end,t);return e?{kind:"line",...e}:null}const n=Ls(i.arc,i.arc.startPoint,i.arc.endPoint,t);return n?{kind:"arc",arc:n}:null}function Ls(i,t,n,e){const s=vs(i,t,n,e),r=i.radius+s;return M.isNonPositive(r)?null:new q(i.center,r,i.startAngle,i.endAngle,i.clockwise)}function vs(i,t,n,e){const s=n.x-t.x,r=n.y-t.y,o=Math.hypot(s,r);if(M.isNonPositive(o))return i.clockwise?-e:e;const a=-r/o,h=s/o,c=i.center.x-(t.x+n.x)/2,l=i.center.y-(t.y+n.y)/2;return c*a+l*h>0?-e:e}function js(i,t,n){const e=t.x-i.x,s=t.y-i.y,r=Math.hypot(e,s);if(M.isNonPositive(r))return null;const o=-s/r*n,a=e/r*n;return{start:new P(i.x+o,i.y+a),end:new P(t.x+o,t.y+a),dx:e,dy:s}}function Fs(i,t,n,e){var a;const s=i.length;if(s===0)return[];const r=Os(i,t,n,e),o=[((a=r[0].nextSegmentStart)==null?void 0:a.clone())??r[0].point.clone()];for(let h=0;h<s;h++){const c=i[h],l=h===s-1&&!n?{point:Zs(c)}:r[(h+1)%s];if(h>0&&r[h].filletPoints&&r[h].filletPoints.forEach(u=>o.push(u.clone())),c.kind==="arc"){const u=r[h].nextSegmentStart??r[h].point,d=l.point,g=Us(c.arc,u,d,Math.max(16,32));for(let m=1;m<g.length;m++)o.push(g[m])}else o.push(l.point.clone())}return Ve(o)}function Os(i,t,n,e){const s=i.length,r=[];for(let o=0;o<s;o++)o===0?r.push(n?Te(i[s-1],i[0],t[0],e):{point:Ys(i[0])}):r.push(Te(i[o-1],i[o],t[o],e));return r}function Us(i,t,n,e){const s=i.nearestPoint(t),r=i.nearestPoint(n),o=Mn(i,s),a=Mn(i,r),h=Xs(i,o,a),c=[];for(let l=0;l<=e;l++){const u=l/e,d=i.clockwise?o-h*u:o+h*u;c.push(i.getPointAtAngle(Ds(i,d)))}return c}function Mn(i,t){return Math.atan2(t.y-i.center.y,t.x-i.center.x)}function Ds(i,t){const n=p.normalizeAngle(t);return i.clockwise?zn(n):n}function zn(i){return(360-i*180/Math.PI)%360*(Math.PI/180)}function Xs(i,t,n){if(i.clockwise){let s=t-n;return M.isNonPositive(s)&&(s+=S),s}let e=n-t;return M.isNonPositive(e)&&(e+=S),e}function Ys(i){return i.kind==="line"?i.start.clone():i.arc.startPoint.clone()}function Zs(i){return i.kind==="line"?i.end.clone():i.arc.endPoint.clone()}function Te(i,t,n,e){return i.kind==="line"&&t.kind==="line"?{point:bn({start:i.start,end:i.end,dx:i.dx,dy:i.dy},{start:t.start,end:t.end,dx:t.dx,dy:t.dy})}:i.kind==="line"&&t.kind==="arc"?ke(i,t.arc,n,e,!0):i.kind==="arc"&&t.kind==="line"?ke(t,i.arc,n,e,!1):i.kind==="arc"&&t.kind==="arc"?Gs(i.arc,t.arc,n,e):{point:n.clone()}}function Gs(i,t,n,e){const s=Be(i.endPoint,t.startPoint),o=Hs(i,t).filter(l=>Ut(i,l)&&Ut(t,l));if(o.length>0)return{point:Re(o,s)};const a=i.endPoint.clone(),h=t.startPoint.clone(),c=Ne(n,Math.abs(e),a,h);return{point:a,filletPoints:c,nextSegmentStart:h}}function ke(i,t,n,e,s){const r=Be(s?i.end:i.start,s?t.startPoint:t.endPoint),o=$s(i,t,r);if(Qs(i,o)&&Ut(t,o))return{point:o};const a=Ws(i,n,e),h=s?t.startPoint.clone():t.endPoint.clone(),c=Ne(n,Math.abs(e),s?a:h,s?h:a);return s?{point:a,filletPoints:c,nextSegmentStart:h}:{point:h,filletPoints:c,nextSegmentStart:a}}function Ws(i,t,n){const e=Math.hypot(i.dx,i.dy),s=-i.dy/e*n,r=i.dx/e*n;return new P(t.x+s,t.y+r)}function Qs(i,t){const n=Math.hypot(i.dx,i.dy);if(M.isNonPositive(n))return!1;const e=i.dx/n,s=i.dy/n,r=t.x-i.start.x,o=t.y-i.start.y,a=Math.abs(r*s-o*e);return M.equalToZero(a)}function Ne(i,t,n,e){const s=Math.atan2(n.y-i.y,n.x-i.x),r=Math.atan2(e.y-i.y,e.x-i.x),o=Ks(s,r);if(M.equalToZero(Math.abs(o)))return[];const a=[],h=Math.max(2,Math.ceil(Math.abs(o)/Math.PI*16));for(let c=1;c<h;c++){const l=c/h,u=s+o*l;a.push(new P(i.x+t*Math.cos(u),i.y+t*Math.sin(u)))}return a}function Ks(i,t){let n=t-i;for(;n>Math.PI;)n-=S;for(;n<=-Math.PI;)n+=S;return n}function $s(i,t,n){const e=Math.hypot(i.dx,i.dy);if(M.isNonPositive(e))return n.clone();const s=i.dx/e,r=i.dy/e,o=i.start.x-t.center.x,a=i.start.y-t.center.y,h=2*(o*s+a*r),c=o*o+a*a-t.radius*t.radius,l=h*h-4*c;if(l<0)return n.clone();const u=Math.sqrt(l),d=[(-h-u)/2,(-h+u)/2].map(m=>new P(i.start.x+s*m,i.start.y+r*m)),g=d.filter(m=>Ut(t,m));return Re(g.length>0?g:d,n)}function Ut(i,t){const n=Math.abs(Math.hypot(t.x-i.center.x,t.y-i.center.y)-i.radius);if(M.isPositive(n))return!1;const e=Mn(i,t),s=i.clockwise?zn(p.normalizeAngle(i.startAngle)):p.normalizeAngle(i.startAngle),r=i.clockwise?zn(p.normalizeAngle(i.endAngle)):p.normalizeAngle(i.endAngle);return p.isBetweenAngle(e,s,r,i.clockwise)}function Hs(i,t){const n=t.center.x-i.center.x,e=t.center.y-i.center.y,s=Math.hypot(n,e);if(M.isNonPositive(s))return[];const r=i.radius+t.radius,o=Math.abs(i.radius-t.radius);if(s>r+Ot)return[];if(s<o-Ot)return[];const a=(i.radius*i.radius-t.radius*t.radius+s*s)/(2*s),h=i.radius*i.radius-a*a;if(h<-Ot)return[];const c=i.center.x+a*n/s,l=i.center.y+a*e/s;if(h<=Ot)return[new P(c,l)];const u=Math.sqrt(h),d=-e*u/s,g=n*u/s;return[new P(c+d,l+g),new P(c-d,l-g)]}function Re(i,t){let n=i[0],e=n.distanceToSquared(t);for(let s=1;s<i.length;s++){const r=i[s].distanceToSquared(t);r<e&&(n=i[s],e=r)}return n.clone()}function Be(i,t){return new P((i.x+t.x)/2,(i.y+t.y)/2)}function Js(i){const t=i.numberOfVertices,n=i.closed?t:t-1;for(let e=0;e<n;e++){const s=i.vertices[e];if(M.isPositive(Math.abs(s.bulge??0)))return!0}return!1}function qe(i){const t=ti(i.vertices.map(n=>new P(n.x,n.y)),i.closed);return t.length===i.numberOfVertices?i:new dt(t.map(n=>({x:n.x,y:n.y})),i.closed)}function ti(i,t){const n=Ve(i);if(!t||n.length<2)return n;const e=n[0],s=n[n.length-1];return M.isNonPositive(Math.hypot(e.x-s.x,e.y-s.y))&&n.pop(),n}function Ve(i){const t=[];return i.forEach(n=>{const e=t[t.length-1];(!e||M.isPositive(Math.hypot(e.x-n.x,e.y-n.y)))&&t.push(new P(n.x,n.y))}),t}function ni(i,t){const n=[];for(let o=0;o<i.numberOfVertices;o++)n.push(i.getPointAt(o));const e=ei(n,i.closed,t);if(e.length===0)return null;const s=[];if(i.closed){if(e.length<2)return null;const o=e.length;for(let a=0;a<o;a++){const h=e[(a-1+o)%o],c=e[a];s.push(bn(h,c))}}else{s.push(e[0].start);for(let o=1;o<e.length;o++)s.push(bn(e[o-1],e[o]));s.push(e[e.length-1].end)}const r=new dt;return s.forEach((o,a)=>{r.addVertexAt(a,{x:o.x,y:o.y})}),r.closed=i.closed,r}function ei(i,t,n){const e=[],s=t?i.length:i.length-1;for(let r=0;r<s;r++){const o=i[r],a=i[t?(r+1)%i.length:r+1],h=a.x-o.x,c=a.y-o.y,l=Math.hypot(h,c);if(M.isNonPositive(l))continue;const u=-c/l*n,d=h/l*n;e.push({start:new P(o.x+u,o.y+d),end:new P(a.x+u,a.y+d),dx:h,dy:c})}return e}function bn(i,t){const n=i.dx*t.dy-i.dy*t.dx;if(M.equalToZero(n))return new P((i.end.x+t.start.x)/2,(i.end.y+t.start.y)/2);const e=t.start.x-i.start.x,s=t.start.y-i.start.y,r=(e*t.dy-s*t.dx)/n;return new P(i.start.x+r*i.dx,i.start.y+r*i.dy)}class dt extends Mt{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 r=null;if(e<n-1?r=this._vertices[e+1]:e==n-1&&this.closed&&(r=this._vertices[0]),r)if(s.bulge){const o=new q(s,r,s.bulge);t+=o.length}else t+=new P(s.x,s.y).distanceTo(r)}return t}get area(){if(!this._closed||this._vertices.length<3)return 0;const t=this.getPoints(128);return Ae(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 K().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 dt(this._vertices.map(t=>({...t})),this._closed)}getPoints3d(t,n){const e=[];return this.getPoints(t).forEach(r=>e.push(new w().set(r.x,r.y,n))),e}getPoints(t){const n=[],e=this._vertices.length;for(let s=0;s<e;++s){const r=this._vertices[s];if(r.bulge){let o=null;if(s<e-1?o=this._vertices[s+1]:s==e-1&&this.closed&&(o=this._vertices[0]),o){const h=new q(r,o,r.bulge).getPoints(t),c=h.length;for(let l=0;l<c;++l){const u=h[l];n.push(new P(u.x,u.y))}}}else n.push(new P(r.x,r.y)),s==e-1&&this.closed&&n.push(n[0])}return n}tessellate(t){const n=[],e=this._vertices.length;for(let s=0;s<e;++s){const r=this._vertices[s];if(r.bulge){let o=null;if(s<e-1?o=this._vertices[s+1]:s===e-1&&this.closed&&(o=this._vertices[0]),o){const h=new q(r,o,r.bulge).tessellate(t);for(let c=0;c<h.length;++c)Le(n,h[c])}}else Le(n,r),s===e-1&&this.closed&&n.length>0&&n.push(n[0].clone())}return n}offset(t){return Ie(this,t)}}function Le(i,t){const n=i[i.length-1];if(n){const e=n.x-t.x,s=n.y-t.y;if(e*e+s*s<=E*E)return}i.push(new P(t.x,t.y))}function si(i,t,n){const e=Math.hypot(t.x,t.y);if(M.isNonPositive(e))return null;const s=-t.y/e*n,r=t.x/e*n;return new w(i.x+s,i.y+r,i.z)}function ii(i,t,n){if(i.length<2)return null;const e=Ns(new dt(i.map(r=>({x:r.x,y:r.y})),t));return Ie(e,n)[0]??null}function ri(i,t,n,e){if(i.length<2||M.equalToZero(n))return null;const{points:s,tangents:r}=je(i,e);if(s.length<2)return null;const o=r??oi(s,t),a=ai(s,o,n),h=t?ci(a):hi(a);if(h.length<2)return null;const c=new dt;return h.forEach((l,u)=>{c.addVertexAt(u,{x:l.x,y:l.y})}),c.closed=t,c}function oi(i,t){const n=i.length,e=new Array(n);for(let s=0;s<n;s++){let r=0,o=0;if(t){const h=i[(s-1+n)%n],c=i[(s+1)%n];r=c.x-h.x,o=c.y-h.y}else s===0?(r=i[1].x-i[0].x,o=i[1].y-i[0].y):s===n-1?(r=i[n-1].x-i[n-2].x,o=i[n-1].y-i[n-2].y):(r=i[s+1].x-i[s-1].x,o=i[s+1].y-i[s-1].y);const a=Math.hypot(r,o);M.isNonPositive(a)?e[s]=new P(1,0):e[s]=new P(r/a,o/a)}return e}function ai(i,t,n){return i.map((e,s)=>{const r=t[s],o=-r.y*n,a=r.x*n;return new P(e.x+o,e.y+a)})}function hi(i){let t=Dt(i);if(t.length<3)return t;for(;;){const n=ve(t,!1);if(!n||(t=Dt([...t.slice(0,n.segmentA+1),n.point,...t.slice(n.segmentB+1)]),t.length<2))break}return t}function ci(i){let t=Dt(i);if(t.length<4)return t;for(;;){const n=ve(t,!0);if(!n||(t=Dt([...t.slice(0,n.segmentA+1),n.point,...t.slice(n.segmentB+1)]),t.length<3))break}return t}function ve(i,t){const n=t?i.length:i.length-1;if(n<2)return null;for(let e=0;e<n;e++){const s=i[e],r=i[(e+1)%i.length];for(let o=e+1;o<n;o++){if(li(e,o,n,t))continue;const a=i[o],h=i[(o+1)%i.length],c=ui(s,r,a,h);if(c)return{point:c,segmentA:e,segmentB:o}}}return null}function li(i,t,n,e){return!!(t===i||t===i+1||e&&i===0&&t===n-1)}function ui(i,t,n,e){const s=t.x-i.x,r=t.y-i.y,o=e.x-n.x,a=e.y-n.y,h=s*a-r*o;if(M.equalToZero(h))return null;const c=n.x-i.x,l=n.y-i.y,u=(c*a-l*o)/h,d=(c*r-l*s)/h,g=kt.equalPointTol;return u<-g||u>1+g||d<-g||d>1+g?null:new P(i.x+u*s,i.y+u*r)}function je(i,t){const n=[],e=[],s=t!=null&&t.length===i.length;return i.forEach((r,o)=>{const a=n[n.length-1];if((!a||M.isPositive(Math.hypot(a.x-r.x,a.y-r.y)))&&(n.push(new P(r.x,r.y)),s)){const h=t[o];e.push(new P(h.x,h.y))}}),{points:n,tangents:s?e:void 0}}function Dt(i){return je(i).points}class Sn extends wn{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 K}transform(t){return this._loops.forEach(n=>{n.transform(t)}),this._boundingBoxNeedsUpdate=!0,this}clone(){const t=new Sn;return this._loops.forEach(n=>{t.add(n.clone())}),t}getPoints(t){const n=[];for(let e=0;e<this.loops.length;++e){const r=this.loops[e].getPoints(t);n.push(r)}return n}tessellate(t){return this.loops.map(n=>n.tessellate(t))}buildHierarchy(t){var h;const n=this.tessellate(t),e=this.calculateBoundaryBoxes(n),s=this.sortBoundaryBoxesByAreas(e),r=new Map,o=s.length;for(let c=0;c<o;c++)r.set(s[c],{index:s[c],children:[]});const a={index:-1,children:[]};for(let c=0;c<o;c++){const l=s[c],u=n[l],d=e[l];let g=c+1;for(;g<o;g++){const m=s[g],f=n[m];if(e[m].containsBox(d)&&O.isPointInPolygon(u[p.randInt(0,u.length-1)],f)){(h=r.get(m))==null||h.children.push(r.get(l));break}}g===o&&a.children.push(r.get(l))}return a}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),r=An(s);n===0?t+=Math.abs(r):t-=Math.abs(r)}return t}calculateBoundaryBoxes(t){const n=[];return t.forEach(e=>{n.push(new K().setFromPoints(e))}),n}sortBoundaryBoxesByAreas(t){const n=[];t.forEach((s,r)=>{const o=s.size,a=o.width*o.height;n.push({area:a,index:r})}),n.sort((s,r)=>s.area-r.area);const e=[];return n.forEach(s=>{e.push(s.index)}),e}}class di extends Ee{translate(t){return this.transform(new st().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 di{static tessellateParametricCurve(t,n,e,s){const r=Math.max(2,Math.round(s.maxSegments)),o=Math.max(1,Math.round(s.minSegments)),a=Math.max(0,s.deviation)*Math.max(0,s.deviation);if(!Number.isFinite(t)||!Number.isFinite(n))return[e(0)];if(Math.abs(n-t)<=E)return[e(t)];const h=Math.min(r,Math.max(2,o+1)),c=Math.min(r,Math.max(h,8));let l=mi(t,n,c);const u=[];for(let g=0;g<l.length;g++)u.push(e(l[g]));let d=u.length;for(let g=0;g<8&&d<r;g++){const m=[];for(let x=0;x<l.length-1&&!(d>=r);x++){const _=(l[x]+l[x+1])/2,C=e(_);d++,gi(C,u[x],u[x+1])>a&&m.push({index:x,t:_,point:C})}if(m.length===0)break;const f=fi(l,u,m);l=f.params,u.length=0;for(let x=0;x<f.points.length;x++)u.push(f.points[x])}return u}}function gi(i,t,n){const e=n.x-t.x,s=n.y-t.y,r=n.z-t.z,o=i.x-t.x,a=i.y-t.y,h=i.z-t.z,c=e*e+s*s+r*r;if(c<=E*E)return o*o+a*a+h*h;const l=W((o*e+a*s+h*r)/c,0,1),u=o-e*l,d=a-s*l,g=h-r*l;return u*u+d*d+g*g}function mi(i,t,n){if(n<=1)return[i];const e=[];for(let s=0;s<n;s++)e.push(s===n-1?t:i+(t-i)*s/(n-1));return e}function fi(i,t,n){const e=[],s=[];let r=0;for(let o=0;o<i.length;o++)for(e.push(i[o]),s.push(t[o]);r<n.length&&n[r].index===o;)e.push(n[r].t),s.push(n[r].point),r++;return{params:e,points:s}}class $ extends ft{static computeCenterPoint(t,n,e){var s;return((s=pe(t,e,n))==null?void 0:s.center)??null}static tryCreateByThreePoints(t,n,e){const s=pe(t,e,n);if(!s)return null;const{center:r,radius:o}=s,a=new y(t.x-r.x,t.y-r.y,(t.z??0)-r.z),h=new y(e.x-r.x,e.y-r.y,(e.z??0)-r.z),c=new y(n.x-r.x,n.y-r.y,(n.z??0)-r.z);if(a.lengthSq()===0||c.lengthSq()===0)return null;const l=new y().crossVectors(a,c);if(l.lengthSq()===0&&(l.crossVectors(a,h),l.lengthSq()===0))return null;l.normalize();const u=a.clone().normalize(),d=new y().crossVectors(l,u),g=f=>p.normalizeAngle(Math.atan2(f.dot(d),f.dot(u)));p.isAngleOnCcwSweep(0,g(h),g(c))||(l.negate(),d.negate());let m=g(c);return M.equalToZero(m)&&(m=S),new $(r,o,0,m,l,u)}static createByThreePoints(t,n,e){return $.tryCreateByThreePoints(t,n,e)}constructor(t,n,e,s,r,o=y.X_AXIS){super(),this.center=t,this.radius=n,this.startAngle=e,this.endAngle=s,this.normal=r,this.refVec=o,(s-e)%S==0?(this.startAngle=0,this.endAngle=S):(this.startAngle=e,this.endAngle=s)}get center(){return this._center}set center(t){this._center=new w(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=p.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._endAngle}set endAngle(t){this._endAngle=this.startAngle==0&&t==S?t:p.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get deltaAngle(){return p.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 y(t.x,t.y,t.z),this._normal.normalize(),this._boundingBoxNeedsUpdate=!0}get refVec(){return this._refVec}set refVec(t){this._refVec=new y(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=S);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 y(t.x,t.y,t.z||0),e=this.center,s=this.normal,o=n.clone().sub(e).dot(s),h=n.clone().sub(s.clone().multiplyScalar(o)).clone().sub(e);if(h.lengthSq()===0)return this.startPoint.clone();h.normalize().multiplyScalar(this.radius);const c=e.clone().add(h),l=this.getAngle(c.clone()),u=this.startAngle,d=this.deltaAngle;let g=p.normalizeAngle(l-u);g<0&&(g=0),g>d&&(g=d);const m=this.getPointAtAngle(u+g),f=m.distanceTo(n),x=this.startPoint.distanceTo(n),_=this.endPoint.distanceTo(n);return x<f&&x<=_?this.startPoint.clone():_<f&&_<x?this.endPoint.clone():m}tangentPoints(t){const n=[],e=new y(t.x,t.y,t.z||0),s=this.center,r=this.normal,o=this.radius,h=e.clone().sub(s).dot(r),c=e.clone().sub(r.clone().multiplyScalar(h)),l=s.clone(),d=c.clone().sub(l).length();if(d<o)return n;const g=Math.acos(o/d),m=this.getAngle(c.clone()),f=[m+g,m-g];for(const x of f){const _=p.normalizeAngle(x-this.startAngle);_>=0&&_<=this.deltaAngle&&n.push(this.getPointAtAngle(this.startAngle+_))}return n}perpendicularPoints(t){const n=[],e=new y(t.x,t.y,t.z||0),s=this.center,r=this.normal,o=this.radius,h=e.clone().sub(s).dot(r),l=e.clone().sub(r.clone().multiplyScalar(h)).clone().sub(s);if(l.lengthSq()<1e-24)return n;l.normalize();const u=[s.clone().add(l.clone().multiplyScalar(o)),s.clone().sub(l.clone().multiplyScalar(o))];for(const d of u){const g=this.getAngle(d.clone()),m=p.normalizeAngle(g-this.startAngle);m>=0&&m<=this.deltaAngle&&n.push(new w(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 w(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 h=0;h<2*Math.PI;h+=Math.PI/2)p.isBetweenAngle(h,this.startAngle,this.endAngle)&&t.push(h);let n=1/0,e=1/0,s=1/0,r=-1/0,o=-1/0,a=-1/0;for(const h of t){const c=this.getPointAtAngle(h);c.x<n&&(n=c.x),c.y<e&&(e=c.y),c.z<s&&(s=c.z),c.x>r&&(r=c.x),c.y>o&&(o=c.y),c.z>a&&(a=c.z)}return new Q({x:n,y:e,z:s},{x:r,y:o,z:a})}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=S,s=0);for(let r=0;r<=t;r++){const o=s+e*(r/t),a=this.getPointAtAngle(o);n.push(a)}return n}tessellate(t){const n=this.closed?S:this.deltaAngle,e=$.segmentCount(this.radius,n,{...t,minSegments:(t==null?void 0:t.minSegments)??(this.closed?8:3)});return this.getPoints(e)}static segmentCount(t,n,e){return q.segmentCount(t,n,e)}transform(t){const n=this.center.clone().applyMatrix4(t),e=this.startPoint.clone().applyMatrix4(t),s=this.endPoint.clone().applyMatrix4(t),r=this.getPointAtAngle(this.closed?Math.PI/2:this.startAngle+this.deltaAngle/2).clone().applyMatrix4(t),o=new y(e).sub(n).normalize(),a=n.distanceTo(e);let h=new y().crossVectors(new y(e).sub(n),new y(r).sub(n)).normalize();h.lengthSq()===0&&(h=this.normal.clone().transformDirection(t));const c=l=>{const u=new y(l).sub(n);return Math.atan2(u.dot(Fe.crossVectors(h,o)),u.dot(o))};return this.center=n,this.radius=a,this.normal=h,this.refVec=o,this.startAngle=0,this.endAngle=this.closed?S: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 $(this.center.clone(),this.radius,this.startAngle,this.endAngle,this.normal,this.refVec)}getAngle(t){return t.sub(this.center),Math.atan2(t.dot(Fe.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},r=this.center,o=this.radius;return new w(r.x+o*(e.x*Math.cos(t)+s.x*Math.sin(t)),r.y+o*(e.y*Math.cos(t)+s.y*Math.sin(t)),r.z+o*(e.z*Math.cos(t)+s.z*Math.sin(t)))}get plane(){const t=new y(this.center).distanceTo(ln);return new wt(this.normal,t)}offset(t){const n=this.radius+t;return n<=0?null:new $(this.center,n,this.startAngle,this.endAngle,this.normal,this.refVec)}}const Fe=new y;class xt extends Mt{constructor(t,n,e,s=0,r=S,o=!1,a=0){super(),this.center=t,this.majorAxisRadius=n,this.minorAxisRadius=e,(r-s)%S==0?(this.startAngle=0,this.endAngle=S):(this.startAngle=s,this.endAngle=r),this.clockwise=o,this.rotation=a}get center(){return this._center}set center(t){this._center=new w(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=p.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._endAngle}set endAngle(t){this._endAngle=this.startAngle==0&&t==S?t:p.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 p.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,r=-1/0;for(let o=0;o<=100;o++){const a=this.getPoint(o/100);n=Math.min(n,a.x),e=Math.min(e,a.y),s=Math.max(s,a.x),r=Math.max(r,a.y)}return new K({x:n,y:e},{x:s,y:r})}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 r=this.startAngle+t*e;let o=this.center.x+this.majorAxisRadius*Math.cos(r),a=this.center.y+this.minorAxisRadius*Math.sin(r);if(this.rotation!==0){const h=Math.cos(this.rotation),c=Math.sin(this.rotation),l=o-this.center.x,u=a-this.center.y;o=l*h-u*c+this.center.x,a=l*c+u*h+this.center.y}return new P(o,a)}transform(t){const n=t,e=new P(this.center).applyMatrix2d(n),s=new w(e.x,e.y,this.center.z),r=this.getPointAtAngle(0).clone().applyMatrix2d(n),o=this.getPointAtAngle(Math.PI/2).clone().applyMatrix2d(n),a=new P(r).sub(e),h=new P(o).sub(e),c=a.length(),l=h.length(),u=Math.atan2(a.y,a.x),d=a.clone().normalize(),g=h.clone().normalize(),m=_=>{const C=new P(_).sub(e),b=C.dot(d),N=C.dot(g);return p.normalizeAngle(Math.atan2(N/l,b/c))},f=n.determinant()<0?!this.clockwise:this.clockwise,x=this.closed?new xt(s,c,l,0,S,f,u):new xt(s,c,l,m(this.startPoint.clone().applyMatrix2d(n)),m(this.endPoint.clone().applyMatrix2d(n)),f,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/S:p.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 xt(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),r=Math.sin(this.rotation),o=this.majorAxisRadius>=this.minorAxisRadius,a=o?s:-r,h=o?r:s;return[new P(this.center.x-e*a,this.center.y-e*h),new P(this.center.x+e*a,this.center.y+e*h)]}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 r=72;for(let o=1;o<=r;o++){const a=this.getPoint(o/r),h=n.distanceToSquared(a);h<s&&(s=h,e=a)}return e}tangentPoints(t){const n=this._projectPointToLocal(t);return this._findSnapAngles(n,(s,r,o,a)=>{const h=-this.majorAxisRadius*a,c=this.minorAxisRadius*o;return(s-n.x)*c-(r-n.y)*h}).map(s=>this.getPointAtAngle(s))}perpendicularPoints(t){const n=this._projectPointToLocal(t);return this._findSnapAngles(n,(s,r,o,a)=>{const h=this.minorAxisRadius*o,c=this.majorAxisRadius*a;return(s-n.x)*c-(r-n.y)*h}).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),r=Math.sin(-this.rotation);return{x:n*s-e*r,y:n*r+e*s}}_findSnapAngles(t,n,e=144){const s=this.majorAxisRadius,r=this.minorAxisRadius,o=this.startAngle,a=this.deltaAngle,h=[],c=d=>{const g=Math.cos(d),m=Math.sin(d);return n(s*g,r*m,g,m)};let l=o,u=c(l);for(let d=1;d<=e;d++){const g=o+a*d/e,m=c(g);if(Math.abs(u)<1e-10&&h.push(l),u*m<0){let f=l,x=g;for(let _=0;_<32;_++){const C=(f+x)/2;c(f)*c(C)<=0?x=C:f=C}h.push((f+x)/2)}l=g,u=m}return h}}class tt extends ft{constructor(t,n,e,s,r,o=0,a=S){super(),this.center=t,this.normal=n,this.majorAxis=e,this.majorAxisRadius=s,this.minorAxisRadius=r;const h=Math.abs(a-o);Math.abs(h-S)<1e-10||Math.abs(h-2*S)<1e-10?(this.startAngle=0,this.endAngle=S):(this.startAngle=o,this.endAngle=a)}get center(){return this._center}set center(t){this._center=new w(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=p.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._endAngle}set endAngle(t){this._endAngle=this.startAngle==0&&t==S?t:p.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get deltaAngle(){const t=this.endAngle-this.startAngle;return Math.abs(t-S)<1e-10?S:p.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 y(t.x,t.y,t.z),this._normal.normalize(),this._boundingBoxNeedsUpdate=!0}get majorAxis(){return this._majorAxis}set majorAxis(t){this._majorAxis=new y(t.x,t.y,t.z),this._majorAxis.normalize(),this._boundingBoxNeedsUpdate=!0}get minorAxis(){return new y().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-S)<1e-10)&&(t=0,n=S);const e=t+n/2;return this.getPointAtAngle(e)}get isCircular(){return M.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 r=1;r<=t;r++){const o=this.startAngle+r*n,a=this.getPointAtAngle(o),h=a.x-s.x,c=a.y-s.y,l=a.z-s.z;e+=Math.sqrt(h*h+c*c+l*l),s=a}return e}get area(){return Math.abs(this.deltaAngle-S)>=1e-10?0:Math.PI*this.majorAxisRadius*this.minorAxisRadius}calculateBoundingBox(){if(this.majorAxis.equals(y.X_AXIS)||this.majorAxis.equals(y.Y_AXIS)||this.majorAxis.isParallelTo(y.X_AXIS)||this.majorAxis.isParallelTo(y.Y_AXIS)){const t=[this.startAngle,this.endAngle];for(let h=0;h<2*Math.PI;h+=Math.PI/2)p.isBetweenAngle(h,this.startAngle,this.endAngle)&&t.push(h);let n=1/0,e=1/0,s=1/0,r=-1/0,o=-1/0,a=-1/0;for(const h of t){const c=this.getPointAtAngle(h);c.x<n&&(n=c.x),c.y<e&&(e=c.y),c.z<s&&(s=c.z),c.x>r&&(r=c.x),c.y>o&&(o=c.y),c.z>a&&(a=c.z)}return new Q({x:n,y:e,z:s},{x:r,y:o,z:a})}else{let n=1/0,e=1/0,s=1/0,r=-1/0,o=-1/0,a=-1/0;for(let h=0;h<=100;h++){const c=this.startAngle+this.deltaAngle*(h/100),l=this.getPointAtAngle(c);n=Math.min(n,l.x),e=Math.min(e,l.y),s=Math.min(s,l.z),r=Math.max(r,l.x),o=Math.max(o,l.y),a=Math.max(a,l.z)}return new Q({x:n,y:e,z:s},{x:r,y:o,z:a})}}get closed(){return this.deltaAngle==0}getPoints(t=100){const n=[];let e=this.deltaAngle,s=this.startAngle;this.closed&&(e=S,s=0);for(let r=0;r<=t;r++){const o=s+e*(r/t),a=this.getPointAtAngle(o);n.push(a)}return n}tessellate(t){const n=q.resolveTessellateOptions(t),e=this.closed?S:this.deltaAngle,s=Math.max(this.majorAxisRadius,this.minorAxisRadius),r=Math.abs(e)>=S-1e-8,o=n.minSegments??(r?8:3);if(this.isCircular){const c=$.segmentCount(s,e,{...t,minSegments:o});return this.getPoints(c)}const a=n.deviation??q.chordDeviationFromRadius(s,n.circleSides),h=this.closed?0:this.startAngle;return ft.tessellateParametricCurve(h,h+e,c=>this.getPointAtAngle(c),{deviation:Math.max(E,a),minSegments:o,maxSegments:n.maxSegments})}getPointAtAngle(t){const n=Math.cos(t),e=Math.sin(t),s=this.minorAxis.clone().multiplyScalar(this.minorAxisRadius).multiplyScalar(e),r=this.majorAxis.clone().multiplyScalar(n*this.majorAxisRadius).add(s);return new w(this.center.x+r.x,this.center.y+r.y,this.center.z+r.z)}nearestPoint(t,n=72){const e=new w(t.x,t.y,t.z||0);let s=this.getPointAtAngle(this.startAngle),r=e.distanceToSquared(s);for(let h=1;h<=n;h++){const c=this.startAngle+this.deltaAngle*h/n,l=this.getPointAtAngle(c),u=e.distanceToSquared(l);u<r&&(r=u,s=l)}const o=e.distanceToSquared(this.startPoint),a=e.distanceToSquared(this.endPoint);return o<r&&o<=a?this.startPoint.clone():a<r&&a<o?this.endPoint.clone():s.clone()}tangentPoints(t){const n=this._projectPointToLocalPlane(t);return this._findSnapParameterAngles((s,r,o,a)=>{const h=-this.majorAxisRadius*a,c=this.minorAxisRadius*o;return(s-n.x)*c-(r-n.y)*h}).map(s=>this.getPointAtAngle(s))}perpendicularPoints(t){const n=this._projectPointToLocalPlane(t);return this._findSnapParameterAngles((s,r,o,a)=>{const h=this.minorAxisRadius*o,c=this.majorAxisRadius*a;return(s-n.x)*c-(r-n.y)*h}).map(s=>this.getPointAtAngle(s))}_projectPointToLocalPlane(t){const n=new w(t.x,t.y,t.z||0),e=new y(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,r=this.startAngle,o=this.deltaAngle,a=[],h=u=>{const d=Math.cos(u),g=Math.sin(u);return t(e*d,s*g,d,g)};let c=r,l=h(c);for(let u=1;u<=n;u++){const d=r+o*u/n,g=h(d);if(Math.abs(l)<1e-10&&a.push(c),l*g<0){let m=c,f=d;for(let x=0;x<32;x++){const _=(m+f)/2;h(m)*h(_)<=0?f=_:m=_}a.push((m+f)/2)}c=d,l=g}return a}contains(t){const n=new y(t).sub(this.center),e=n.dot(this.majorAxis),s=n.dot(this.minorAxis),r=e/this.majorAxisRadius,o=s/this.minorAxisRadius;return r*r+o*o<=1}transform(t){const n=t,e=this.center.clone().applyMatrix4(n),s=this.getPointAtAngle(0).clone().applyMatrix4(n),r=this.getPointAtAngle(Math.PI/2).clone().applyMatrix4(n),o=new y(s).sub(e),a=new y(r).sub(e),h=o.length(),c=a.length(),l=o.clone().normalize(),u=new y().crossVectors(o,a).normalize();let d=new y().crossVectors(u,l).normalize();d.dot(a)<0&&(u.negate(),d=new y().crossVectors(u,l).normalize());const g=f=>{const x=new y(f).sub(e),_=x.dot(l),C=x.dot(d);return p.normalizeAngle(Math.atan2(C/c,_/h))},m=this.closed?new tt(e,u,l,h,c,0,S):new tt(e,u,l,h,c,g(this.startPoint.clone().applyMatrix4(n)),g(this.endPoint.clone().applyMatrix4(n)));return this.center=m.center,this.normal=m.normal,this.majorAxis=m.majorAxis,this.majorAxisRadius=m.majorAxisRadius,this.minorAxisRadius=m.minorAxisRadius,this._startAngle=m._startAngle,this._endAngle=m._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 tt(this.center,this.normal,this.majorAxis,this.majorAxisRadius,this.minorAxisRadius,this.startAngle,this.endAngle)}get plane(){const t=new y(this.center).distanceTo(ln);return new wt(this.normal,t)}offset(t){const n=this.majorAxisRadius+t,e=this.minorAxisRadius+t;return n<=0||e<=0?null:new tt(this.center,this.normal,this.majorAxis,n,e,this.startAngle,this.endAngle)}}class zt extends Mt{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 K(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 zt(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 r=((t.x-this._start.x)*n+(t.y-this._start.y)*e)/s;return r=Math.max(0,Math.min(1,r)),new P(this._start.x+r*n,this._start.y+r*e)}nearestPoint(t){return this.project(t)}}class Xt extends ft{constructor(t,n){super(),this._start=new w(t),this._end=new w(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 y().subVectors(this.endPoint,this.startPoint).normalize()}get midPoint(){return new w((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(yt).normalize();return new w(this._start).addScaledVector(e,t)}else{const e=this.delta(yt).normalize();return new w(this._end).addScaledVector(e,t)}}extend(t,n=!1){if(n){const e=yt.subVectors(this._start,this._end).normalize();this._start=new w(this._start).addScaledVector(e,t)}else{const e=this.delta(yt).normalize();this._end=new w(this._end).addScaledVector(e,t)}return this._boundingBoxNeedsUpdate=!0,this}closestPointToPointParameter(t,n){Oe.subVectors(t,this._start),Yt.subVectors(this.endPoint,this.startPoint);const e=Yt.dot(Yt);let r=Yt.dot(Oe)/e;return n&&(r=p.clamp(r,0,1)),r}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=yt.subVectors(t,this.startPoint).dot(n);return new w().copy(n).multiplyScalar(s).add(this.startPoint)}perpPoint(t){const n=this.direction,e=this.startPoint,r=yt.subVectors(t,e).dot(n),o=yt.copy(n).multiplyScalar(r);return new w().addVectors(e,o)}calculateBoundingBox(){const t=new w(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 w(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 Q(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 Xt(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 r=new y(e.x-n.x,e.y-n.y,0).normalize(),o=new y(-r.y,r.x,0);return new Xt(new w(n.x+o.x*t,n.y+o.y*t,n.z),new w(e.x+o.x*t,e.y+o.y*t,e.z))}}const yt=new y,Oe=new y,Yt=new y;class Cn{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,r){this.init(n,e,r*(e-t),r*(s-n))}initNonuniformCatmullRom(t,n,e,s,r,o,a){let h=(n-t)/r-(e-t)/(r+o)+(e-n)/o,c=(e-n)/o-(s-n)/(o+a)+(s-e)/a;h*=o,c*=o,this.init(n,e,h,c)}calc(t){const n=t*t,e=n*t;return this.c0+this.c1*t+this.c2*n+this.c3*e}}class Zt extends ft{constructor(t=[],n=!1,e="centripetal",s=.5){super(),this.isCatmullRomCurve3d=!0,this.type="CatmullRomCurve3d",this._tmp=new y,this._px=new Cn,this._py=new Cn,this._pz=new Cn,this._points=t.map(r=>new w(r)),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 w}get endPoint(){return this._points.length>0?this._points[this._points.length-1]:new w}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 w){const e=n,s=this._points,r=s.length;if(r===0)return e.set(0,0,0);if(r===1)return e.copy(s[0]);const o=(r-(this._closed?0:1))*t;let a=Math.floor(o),h=o-a;this._closed?a+=a>0?0:(Math.floor(Math.abs(a)/r)+1)*r:h===0&&a===r-1&&(a=r-2,h=1);let c,l;this._closed||a>0?c=s[(a-1)%r]:(this._tmp.subVectors(s[0],s[1]).add(s[0]),c=new w(this._tmp.x,this._tmp.y,this._tmp.z));const u=s[a%r],d=s[(a+1)%r];if(this._closed||a+2<r?l=s[(a+2)%r]:(this._tmp.subVectors(s[r-1],s[r-2]).add(s[r-1]),l=new w(this._tmp.x,this._tmp.y,this._tmp.z)),this._curveType==="centripetal"||this._curveType==="chordal"){const g=this._curveType==="chordal"?.5:.25;let m=Math.pow(c.distanceToSquared(u),g),f=Math.pow(u.distanceToSquared(d),g),x=Math.pow(d.distanceToSquared(l),g);f<1e-4&&(f=1),m<1e-4&&(m=f),x<1e-4&&(x=f),this._px.initNonuniformCatmullRom(c.x,u.x,d.x,l.x,m,f,x),this._py.initNonuniformCatmullRom(c.y,u.y,d.y,l.y,m,f,x),this._pz.initNonuniformCatmullRom(c.z,u.z,d.z,l.z,m,f,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(h),this._py.calc(h),this._pz.calc(h)),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 w(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 Zt(this._points.map(t=>t.clone()),this._closed,this._curveType,this._tension)}transform(t){return this._points=this._points.map(n=>{const e=new w;return e.copy(n),e.applyMatrix4(t),e}),this._boundingBoxNeedsUpdate=!0,this}calculateBoundingBox(){if(this._points.length===0)return new Q;const t=new Q;return this._points.forEach(n=>{t.expandByPoint(n)}),t}}function Ue(i,t){const n=i.x-t[0],e=i.y-t[1],s=(i.z??0)-(t[2]??0);return n*n+e*e+s*s}class L{constructor(t,n,e,s){this._degree=t,this._knots=[...n],this._controlPoints=e.map(r=>({x:r.x,y:r.y,z:r.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 L(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 ue(t,this._degree,this._knots,n,this._weights)}signedPlanarCurvatureAt(t){const n=this.evaluate(t);return de(n.deriv1,n.deriv2)}getOffsetSamplePath2d(t,n=512){const e=Math.abs(t),{start:s,end:r}=this.getParameterRange(),o=this.length(),a=Math.max(64,Math.ceil(o/Math.max(e*.2,1e-6)));let h=xi(s,r,Math.min(a,n));for(let u=0;u<8&&h.length<n;u++){const d=[];for(let g=0;g<h.length-1;g++){const m=h[g],f=h[g+1],x=(m+f)/2,_=Math.max(Math.abs(this.signedPlanarCurvatureAt(m)),Math.abs(this.signedPlanarCurvatureAt(f)),Math.abs(this.signedPlanarCurvatureAt(x)));e*_>.85&&d.push(x)}if(d.length===0)break;if(h=yi(h,d),h.length>n){h=h.slice(0,n);break}}const c=[],l=[];return h.forEach(u=>{const d=this.evaluate(u);c.push(new P(d.point[0],d.point[1]));const g=d.deriv1[0],m=d.deriv1[1],f=Math.hypot(g,m);l.push(f>1e-10?new P(g/f,m/f):new P(1,0))}),{points:c,tangents:l}}length(){const t=this._controlPoints.map(n=>[n.x,n.y,n.z]);return ge(this._degree,this._knots,t,this._weights)}static byKnotsControlPointsWeights(t,n,e,s){return new L(t,n,e,s)}static byPoints(t,n,e="Uniform",s,r){const o=fn(t,n,e,s,r),a=o.controlPoints.map(h=>({x:h[0],y:h[1],z:h[2]}));return new L(n,o.knots,a,o.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 r=0;r<=t;r++){const o=e+(s-e)*(r/t);n.push(this.point(o))}return n}isClosed(t=1e-6){const{start:n,end:e}=this.getParameterRange(),s=this.point(n),r=this.point(e),o=s[0]-r[0],a=s[1]-r[1],h=s[2]-r[2];return Math.sqrt(o*o+a*a+h*h)<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 Zt(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 r=this.point(e),o=Ue(t,r);for(let a=0;a<=n;a++){const h=e+(s-e)*a/n,c=this.point(h),l=Ue(t,c);l<o&&(o=l,r=c)}return{x:r[0],y:r[1],z:r[2]??0}}static createClosedCurve(t,n,e="Chord"){const r=this.createFitPointsForClosedCurve(t).map(o=>[o.x,o.y,o.z]);return L.byPoints(r,n,e)}}function xi(i,t,n){if(n<2)return[i,t];const e=[];for(let s=0;s<n;s++)e.push(s===n-1?t:i+(t-i)*s/(n-1));return e}function yi(i,t){const n=[...i,...t].sort((s,r)=>s-r),e=[];return n.forEach(s=>{const r=e[e.length-1];(r===void 0||Math.abs(r-s)>1e-10)&&e.push(s)}),e}function De(i){if(!i)return!1;const t=i.x??0,n=i.y??0,e=i.z??0;return t*t+n*n+e*e>1e-20}function _i(i,t,n){let e=i??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 Ai(i,t,n){let e=i??0;e<1&&(e=3);const s=t+n-1;return e=Math.min(e,s),Math.max(1,e)}function Pi(i,t){if(!(!i||i.length!==t))return i}class D extends ft{constructor(t,n,e,s,r,o){super();const a=arguments.length;if(this._degree=3,this._closed=!1,Array.isArray(n)){if(a<2||a>5)throw V.AcCmErrors.ILLEGAL_PARAMETERS;this._controlPoints=t;let h,c=3,l=!1;if(a>=3&&(Array.isArray(e)?(h=e,a>=4&&(c=s||3),a>=5&&(l=r)):e!==void 0&&(c=e||3,a>=4&&(l=s))),e===void 0&&a>=4&&(c=s||3,a>=5&&(l=r)),this._degree=c,this._closed=l,this._controlPoints.length<this._degree+1)throw V.AcCmErrors.ILLEGAL_PARAMETERS;this._nurbsCurve=L.byKnotsControlPointsWeights(this._degree,n,this._controlPoints,h)}else{if(a<2||a>6)throw V.AcCmErrors.ILLEGAL_PARAMETERS;this._fitPoints=t,this._knotParameterization=n,a>=3&&(this._degree=e||3);const h=typeof s=="boolean";a>=4&&h&&(this._closed=s),h?(a>=5&&(this._startTangent=r),a>=6&&(this._endTangent=o)):(a>=4&&(this._startTangent=s),a>=5&&(this._endTangent=r)),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=L.createClosedCurve(this._fitPoints,this._degree,this._knotParameterization);else{const l=this.toNurbsPoints(this._fitPoints);this._nurbsCurve=L.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=L.createFitPointsForClosedCurve(this._fitPoints),n=this.toNurbsPoints(t);this._nurbsCurve=L.byPoints(n,this._degree,this._knotParameterization)}else{const t=this.toNurbsPoints(this._fitPoints);this._nurbsCurve=L.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=L.createFitPointsForClosedCurve(this._controlPoints),n=this.toNurbsPoints(t);this._nurbsCurve=L.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=L.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(O.point2dToPoint3d)}get fitPoints(){var t;return(t=this._fitPoints)==null?void 0:t.map(O.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 w(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 w(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 w(e.x,e.y,e.z||0)}evaluateAt(t){const n=this._nurbsCurve.point(t);return new w(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 O.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 w(t.x,t.y,t.z??0)):this._controlPoints.map(t=>new w(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&&O.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&&O.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=L.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(),r=this._nurbsCurve.degree(),o=s[r],a=s[s.length-r-1],h=(a-o)/(t-1);for(let c=0;c<t;c++){const l=c===t-1?a:o+c*h,u=n.point(l);e.push(new w(u[0],u[1],u[2]))}return e}tessellate(t){const n=q.resolveTessellateOptions(t),e=this._nurbsCurve.knots(),s=this._nurbsCurve.degree();if(e.length<s+2)return[this.startPoint.clone(),this.endPoint.clone()];const r=e[s],o=e[e.length-s-1],a=n.circleSides,h=Math.abs(this.length),c=n.deviation??Math.max(E,h<=E?E:h/(2*a*a));return ft.tessellateParametricCurve(r,o,l=>this.evaluateAt(l),{deviation:c,minSegments:n.minSegments??(this.closed?8:2),maxSegments:n.maxSegments})}getCurvePoints(t,n){const e=[],s=t.knots(),r=t.degree(),o=s[r],h=(s[s.length-r-1]-o)/(n-1);for(let c=0;c<n;c++){const l=o+c*h;e.push(t.point(l))}return e}calculateBoundingBox(){const t=this.getPoints(100);return new Q().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 Pe(t)}transform(t){if(this._fitPoints&&this._knotParameterization)this._fitPoints=this._fitPoints.map(n=>new w(n).applyMatrix4(t)),this._startTangent&&(this._startTangent=new w(this._startTangent).transformDirection(t)),this._endTangent&&(this._endTangent=new w(this._endTangent).transformDirection(t)),this.buildCurve();else{const n=this._nurbsCurve.knots(),e=this._nurbsCurve.weights();this._controlPoints=this._controlPoints.map(s=>new w(s).applyMatrix4(t)),this._nurbsCurve=L.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(O.point2dToPoint3d),this._knotParameterization,this._degree,this._closed,this._startTangent?O.point2dToPoint3d(this._startTangent):void 0,this._endTangent?O.point2dToPoint3d(this._endTangent):void 0):new D(this._controlPoints.map(O.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,r){if(t.length<2||n.length<2)return null;const o=_i(s,t.length,n.length);if(t.length<o+1)return null;try{return new D(t,n,Pi(e,t.length),o,r)}catch{return null}}static fromFitPoints(t,n,e,s,r,o){if(t.length<2)return null;const a=De(r),h=De(o),c=(a?1:0)+(h?1:0),l=Ai(e,t.length,c);if(t.length+c<l+1)return null;try{return a||h?new D(t,n,l,s,a?r:void 0,h?o: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(O.point2dToPoint3d);let e=!0;const s=t.controlPoints.map(r=>(r.weight==null&&(e=!1),r.weight||1));return D.fromControlPoints(n,t.knots,e?s:void 0,t.degree,!1)}if(t.numberOfFitData>0){const n=t.fitDatum.map(O.point2dToPoint3d);return D.fromFitPoints(n,"Uniform",t.degree,!1,t.startTangent?O.point2dToPoint3d(t.startTangent):void 0,t.endTangent?O.point2dToPoint3d(t.endTangent):void 0)}return null}}class G extends Mt{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=[],r=n*n,o=(a,h)=>{const c=a.x-h.x,l=a.y-h.y;return c*c+l*l<=r};for(;e.length>0;){const a=[],h=e.shift();a.push(h);const c=G.getEdgeStartPoint(h);let l=G.getEdgeEndPoint(h);if(!o(c,l))for(;e.length>0;){const u=G.findConnectingEdge(e,l,r);if(u.index<0)break;let d=e.splice(u.index,1)[0];if(u.reverse&&(d=G.reverseEdge(d)),a.push(d),l=G.getEdgeEndPoint(d),o(l,c))break}s.push(new G(a))}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 K;return n.setFromPoints(t),n}transform(t){const n=new st().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 G(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}tessellate(t){const n=[];return this._curves.forEach(e=>{pi(e,t).forEach(s=>{const r=n[n.length-1];r&&(r.x-s.x)**2+(r.y-s.y)**2<=E*E||n.push(new P(s.x,s.y))})}),n}static findConnectingEdge(t,n,e){let s=-1,r=!1,o=Number.POSITIVE_INFINITY;for(let a=0;a<t.length;a++){const h=t[a],c=G.getEdgeStartPoint(h),l=G.getEdgeEndPoint(h),u=n.x-c.x,d=n.y-c.y,g=u*u+d*d;g<o&&(o=g,s=a,r=!1);const m=n.x-l.x,f=n.y-l.y,x=m*m+f*f;x<o&&(o=x,s=a,r=!0)}return o>e?{index:-1,reverse:!1}:{index:s,reverse:r}}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 zt?new zt(t.endPoint,t.startPoint):t instanceof q?G.reverseCircArcEdge(t):t instanceof xt?new xt(t.center,t.majorAxisRadius,t.minorAxisRadius,t.endAngle,t.startAngle,!t.clockwise,t.rotation):t instanceof D?G.reverseSplineEdge(t):t}static reverseCircArcEdge(t){const n=t.startPoint,e=t.endPoint,s=!t.clockwise,r=Math.atan2(e.y-t.center.y,e.x-t.center.x),o=Math.atan2(n.y-t.center.y,n.x-t.center.x),a=h=>{const c=p.normalizeAngle(h);return s?p.normalizeAngle(-c):c};return new q(t.center,t.radius,a(r),a(o),s)}static reverseSplineEdge(t){const n=[...t.controlPoints].reverse(),e=t.knots,s=e[0],r=e[e.length-1],o=e.map(c=>s+r-c).reverse(),a=t.weights,h=a.length>0?[...a].reverse():void 0;return new D(n,o,h,t.degree,t.closed)}}function pi(i,t){if(i instanceof zt)return i.getPoints();if(i instanceof q||i instanceof D)return i.tessellate(t);const n=i.closed?S:i.deltaAngle,e=q.segmentCount(Math.max(i.majorAxisRadius,i.minorAxisRadius),n,t);return i.getPoints(e)}const qt=128,Gt=96,z=kt.equalPointTol,En=z*8;function wi(i,t,n=!1,e=!1,s){const r=Ye(i,n,s),o=Ye(t,e,s),a=[];for(const h of r)for(const c of o)Tn(h,c)&&Vn(a,Ke(h,c));return Fi(a)}function Mi(i,t){const n=Xe(i);switch(n.kind){case"line":return n.line.transform(t),n;case"circArc":return n.arc.transform(t),n;case"ellipseArc":return n.arc.transform(t),n;case"spline":return n.spline.transform(t),n}}function Xe(i){switch(i.kind){case"line":return{kind:"line",line:i.line.clone(),extent:i.extent,extendable:i.extendable};case"circArc":return{kind:"circArc",arc:i.arc.clone(),extendable:i.extendable};case"ellipseArc":return{kind:"ellipseArc",arc:i.arc.clone(),extendable:i.extendable};case"spline":return{kind:"spline",spline:i.spline.clone(),extendable:i.extendable}}}function Ye(i,t,n){const e=[];for(const s of i){const r=t&&s.extendable!==!1;switch(s.kind){case"line":{const o=Ci(s.line,n);if(!o)break;const a=r?"unbounded":s.extent;e.push(bt(o.start,o.end,a));break}case"circArc":{const o=bi(s.arc,r);if(n&&!Vt(o.normal,n.normal)){const a=Ii(o,n);(a==null?void 0:a.kind)==="circArc"?e.push(Ze(a.arc,et(a.arc))):(a==null?void 0:a.kind)==="ellipseArc"?e.push(Ge(a.arc,ot(a.arc))):In(e,We(o,et(o)),et(o),n)}else{const a=Ei(o,n);a&&e.push(Ze(a,et(a)))}break}case"ellipseArc":{const o=Si(s.arc,r);if(n&&!Vt(o.normal,n.normal))In(e,Qe(o,ot(o)),ot(o),n);else{const a=Ti(o,n);a&&e.push(Ge(a,ot(a)))}break}case"spline":{n?In(e,s.spline.getPoints(qt),s.spline.closed,n):e.push(zi(s.spline));break}}}return e}function bt(i,t,n){const e=new y().subVectors(t,i);return{kind:"line",start:i,dir:e,extent:n,box:n==="bounded"?new Q().setFromPoints([i,t]):void 0}}function Ze(i,t){return{kind:"circArc",arc:i,full:t||et(i),box:i.box}}function Ge(i,t){return{kind:"ellipseArc",arc:i,full:t||ot(i),box:i.box}}function zi(i){const t=[],n=i.getPoints(qt);if(n.length>=2){const s=i.closed?n.length:n.length-1;for(let r=0;r<s;r++){const o=n[r],a=n[(r+1)%n.length];o.distanceToSquared(a)<z*z||t.push(bt(o.clone(),a.clone(),"bounded"))}}const e=new Q;for(const s of t)s.box&&e.union(s.box);return{kind:"spline",spline:i,samples:t,box:t.length>0?e:void 0}}function bi(i,t){return!t||et(i)?i:new $(i.center,i.radius,0,S,i.normal,i.refVec)}function Si(i,t){return!t||ot(i)?i:new tt(i.center,i.normal,i.majorAxis,i.majorAxisRadius,i.minorAxisRadius,0,S)}function Ci(i,t){if(!t)return{start:i.startPoint.clone(),end:i.endPoint.clone()};const n=rt(i.startPoint,t),e=rt(i.endPoint,t);return n.distanceToSquared(e)<z*z?null:{start:n,end:e}}function Ei(i,t){if(!t)return i;const n=rt(i.center,t);return new $(n,i.radius,i.startAngle,i.endAngle,t.normal.clone(),Rn(i.refVec,t.normal))}function Ii(i,t){const n=rt(i.center,t),e=i.normal.clone();if(e.lengthSq()<z*z)return null;e.normalize();const s=t.normal.clone();if(s.lengthSq()<z*z)return null;s.normalize();const r=e.dot(s),o=Math.abs(r);if(o>1-1e-8)return{kind:"circArc",arc:new $(n,i.radius,i.startAngle,i.endAngle,s,Rn(i.refVec,s))};if(o<1e-8)return null;const a=new y().crossVectors(e,s);if(a.lengthSq()<z*z)return null;a.normalize();const h=new tt(n,s,a,i.radius,i.radius*o,0,S);if(et(i))return{kind:"ellipseArc",arc:h};const c=rt(i.startPoint,t),l=rt(i.endPoint,t),u=rt(i.midPoint,t),d=Et(h,c),g=Et(h,l),m=Et(h,u),f=p.normalizeAngle(m-d),x=p.normalizeAngle(g-d),_=f<=x||x<1e-8?d+x:d+x+S;return{kind:"ellipseArc",arc:new tt(n,s,a,i.radius,i.radius*o,d,_)}}function Ti(i,t){if(!t)return i;const n=rt(i.center,t),e=Rn(i.majorAxis,t.normal);return e.lengthSq()<z*z?null:new tt(n,t.normal.clone(),e,i.majorAxisRadius,i.minorAxisRadius,i.startAngle,i.endAngle)}function In(i,t,n,e){if(t.length<2)return;const s=e?t.map(o=>rt(o,e)):t,r=n?s.length:s.length-1;for(let o=0;o<r;o++){const a=s[o],h=s[(o+1)%s.length];a.distanceToSquared(h)<z*z||i.push(bt(a.clone(),h.clone(),"bounded"))}}function We(i,t){return t||et(i)?new $(i.center,i.radius,0,S,i.normal,i.refVec).getPoints(Gt):i.getPoints(Gt)}function Qe(i,t){return t||ot(i)?new tt(i.center,i.normal,i.majorAxis,i.majorAxisRadius,i.minorAxisRadius,0,S).getPoints(Gt):i.getPoints(Gt)}function Tn(i,t){return!i.box||!t.box?!0:i.box.intersectsBox(t.box)}function Ke(i,t){return i.kind==="spline"&&t.kind==="spline"?ki(i,t):i.kind==="spline"?$e(i,t):t.kind==="spline"?$e(t,i):i.kind==="line"&&t.kind==="line"?He(i,t):i.kind==="line"&&t.kind==="circArc"?Wt(i,t.arc,t.full):t.kind==="line"&&i.kind==="circArc"?Wt(t,i.arc,i.full):i.kind==="line"&&t.kind==="ellipseArc"?kn(i,t.arc,t.full):t.kind==="line"&&i.kind==="ellipseArc"?kn(t,i.arc,i.full):i.kind==="circArc"&&t.kind==="circArc"?Vi(i.arc,i.full,t.arc,t.full):i.kind==="circArc"&&t.kind==="ellipseArc"?Je(i.arc,i.full,t.arc,t.full):i.kind==="ellipseArc"&&t.kind==="circArc"?Je(t.arc,t.full,i.arc,i.full):i.kind==="ellipseArc"&&t.kind==="ellipseArc"?vi(i.arc,i.full,t.arc,t.full):[]}function $e(i,t){const n=[];for(const e of i.samples)Tn(e,t)&&Vn(n,Ke(e,t));return Ni(i.spline,n,t)}function ki(i,t){const n=[];for(const s of i.samples)for(const r of t.samples)Tn(s,r)&&Vn(n,He(s,r));const e=[];for(const s of n){const r=i.spline.nearestPoint(s,qt),o=t.spline.nearestPoint(s,qt);r.distanceTo(o)<=En&&e.push(r)}return e}function Ni(i,t,n){const e=[];for(const s of t){const r=i.nearestPoint(s,qt);Ri(n,r)<=En&&e.push(r)}return e}function Ri(i,t){if(i.kind==="line"){const n=i.dir.lengthSq();if(n<z*z)return Number.POSITIVE_INFINITY;const e=new y().subVectors(t,i.start).dot(i.dir)/n;return St(e,i.extent)?Ct(i.start,i.dir,e).distanceTo(t):Number.POSITIVE_INFINITY}if(i.kind==="circArc"){if(!qn(t,i.arc)){const n=H(i.arc.normal,i.arc.center),e=Math.abs(n.distanceToPoint(t)),s=Math.abs(t.distanceTo(i.arc.center)-i.arc.radius),r=Math.hypot(e,s);if(r>En)return r}return At(i.arc,_t(i.arc,t),i.full)?0:Number.POSITIVE_INFINITY}return i.kind==="ellipseArc"?It(t,i.arc,i.full)?0:Math.abs(Qt(i.arc,t)):Number.POSITIVE_INFINITY}function He(i,t){const n=i.dir,e=t.dir,s=n.lengthSq(),r=e.lengthSq();if(s<z*z||r<z*z)return[];const o=new y().subVectors(i.start,t.start),a=n.dot(n),h=n.dot(e),c=e.dot(e),l=n.dot(o),u=e.dot(o),d=a*c-h*h;if(Math.abs(d)<E*E*a*c)return[];const g=(h*u-c*l)/d,m=(a*u-h*l)/d;if(!St(g,i.extent)||!St(m,t.extent))return[];const f=Ct(i.start,n,g),x=Ct(t.start,e,m);return f.distanceTo(x)>z?[]:[f]}function Wt(i,t,n){const e=H(t.normal,t.center),s=ns(i,e);return s==="coplanar"?Bi(i,t,n):s?qn(s,t)?At(t,_t(t,s),n)?[s]:[]:[]:[]}function Bi(i,t,n){const e=new y().subVectors(i.start,t.center),s=i.dir.dot(i.dir);if(s<z*z)return[];const r=2*i.dir.dot(e),o=e.dot(e)-t.radius*t.radius,a=[];for(const h of ss(s,r,o)){if(!St(h,i.extent))continue;const c=Ct(i.start,i.dir,h);At(t,_t(t,c),n)&&a.push(c)}return a}function kn(i,t,n){const e=H(t.normal,t.center),s=ns(i,e);return s==="coplanar"?qi(i,t,n):s?It(s,t,n)?[s]:[]:[]}function qi(i,t,n){const e=t.majorAxis,s=t.minorAxis,r=t.majorAxisRadius,o=t.minorAxisRadius;if(r<z||o<z)return[];const a=new y().subVectors(i.start,t.center),h=a.dot(e),c=a.dot(s),l=i.dir.dot(e),u=i.dir.dot(s),d=l*l/(r*r)+u*u/(o*o),g=2*h*l/(r*r)+2*c*u/(o*o),m=h*h/(r*r)+c*c/(o*o)-1,f=[];for(const x of ss(d,g,m)){if(!St(x,i.extent))continue;const _=Ct(i.start,i.dir,x);Bn(t,Et(t,_),n)&&f.push(_)}return f}function Vi(i,t,n,e){if(Vt(i.normal,n.normal)){const a=H(i.normal,i.center);return Math.abs(a.distanceToPoint(n.center))>z?[]:ji(Li(i,n),i,t,n,e)}const s=Nn(H(i.normal,i.center),H(n.normal,n.center));if(!s)return[];const r=bt(s.point.clone(),new w().addVectors(s.point,s.dir),"unbounded");return Wt(r,i,t).filter(a=>qn(a,n)?At(n,_t(n,a),e):!1)}function Li(i,t){const n=new y().subVectors(t.center,i.center),e=n.length(),s=i.radius,r=t.radius;if(e<z&&M.equal(s,r,z))return[];if(e>s+r+z)return[];if(e+Math.min(s,r)+z<Math.max(s,r))return[];const o=e<z?es(i.normal):n.clone().normalize(),a=(s*s-r*r+e*e)/(2*Math.max(e,z)),h=s*s-a*a,c=new w().copy(i.center).addScaledVector(o,a);if(h<-z*z)return[];if(h<z*z)return[c];const l=Math.sqrt(Math.max(0,h)),u=new y().crossVectors(i.normal,o).normalize();return[new w().copy(c).addScaledVector(u,l),new w().copy(c).addScaledVector(u,-l)]}function Je(i,t,n,e){if(!Vt(i.normal,n.normal)){const s=Nn(H(i.normal,i.center),H(n.normal,n.center));if(!s)return[];const r=bt(s.point.clone(),new w().addVectors(s.point,s.dir),"unbounded");return Wt(r,i,t).filter(o=>It(o,n,e))}return ts(We(i,t),et(i)||t,s=>Qt(n,s),s=>At(i,_t(i,s),t)&&It(s,n,e))}function vi(i,t,n,e){if(!Vt(i.normal,n.normal)){const s=Nn(H(i.normal,i.center),H(n.normal,n.center));if(!s)return[];const r=bt(s.point.clone(),new w().addVectors(s.point,s.dir),"unbounded");return kn(r,i,t).filter(o=>It(o,n,e))}return ts(Qe(i,t),ot(i)||t,s=>Qt(n,s),s=>Bn(i,Et(i,s),t)&&It(s,n,e))}function ts(i,t,n,e){const s=[],r=t?i.length:i.length-1;for(let o=0;o<r;o++){const a=i[o],h=i[(o+1)%i.length],c=n(a),l=n(h);if(Math.abs(c)<=z){e(a)&&s.push(a.clone());continue}if(c*l>0)continue;let u=0,d=1,g=c;for(let f=0;f<40;f++){const x=(u+d)/2,_=new w().lerpVectors(a,h,x),C=n(_);g*C<=0?d=x:(u=x,g=C)}const m=new w().lerpVectors(a,h,(u+d)/2);e(m)&&s.push(m)}return s}function ns(i,t){const n=t.normal.dot(i.dir),e=t.distanceToPoint(i.start);if(M.equalToZero(n,z*Math.max(1,i.dir.length())))return M.equalToZero(e,z)?"coplanar":null;const s=-e/n;return St(s,i.extent)?Ct(i.start,i.dir,s):null}function Nn(i,t){const n=new y().crossVectors(i.normal,t.normal);if(n.lengthSq()<z*z)return null;n.normalize();const e=i.normal,s=t.normal,r=e.dot(e)*s.dot(s)-e.dot(s)**2;if(Math.abs(r)<E)return null;const o=-i.constant,a=-t.constant,h=(s.dot(s)*o-e.dot(s)*a)/r,c=(e.dot(e)*a-e.dot(s)*o)/r;return{point:new w().addScaledVector(e,h).addScaledVector(s,c),dir:n}}function St(i,t){return t==="unbounded"?!0:t==="ray"?i>=-z:i>=-z&&i<=1+z}function Ct(i,t,n){return new w().copy(i).addScaledVector(t,n)}function rt(i,t){const n=new w;return t.projectPoint(i,n),n}function Rn(i,t){const n=i.clone().addScaledVector(t,-i.dot(t));return n.lengthSq()<z*z?es(t):n.normalize()}function H(i,t){return new wt().setFromNormalAndCoplanarPoint(i,t)}function Vt(i,t){return new y().crossVectors(i,t).lengthSq()<z*z}function _t(i,t){const n=new y().subVectors(t,i.center),e=new y().crossVectors(i.normal,i.refVec);return Math.atan2(n.dot(e),n.dot(i.refVec))}function Et(i,t){const n=new y().subVectors(t,i.center),e=n.dot(i.majorAxis)/i.majorAxisRadius,s=n.dot(i.minorAxis)/i.minorAxisRadius;return Math.atan2(s,e)}function et(i){return i.closed||Math.abs(i.deltaAngle-S)<1e-10}function ot(i){return i.closed||Math.abs(i.endAngle-i.startAngle)<1e-10||Math.abs(i.deltaAngle-S)<1e-10}function At(i,t,n){return n||et(i)?!0:p.normalizeAngle(t-i.startAngle)<=i.deltaAngle+1e-8}function Bn(i,t,n){return n||ot(i)?!0:p.normalizeAngle(t-i.startAngle)<=i.deltaAngle+1e-8}function qn(i,t){const n=H(t.normal,t.center);return Math.abs(n.distanceToPoint(i))>z?!1:Math.abs(i.distanceTo(t.center)-t.radius)<=z}function Qt(i,t){const n=new y().subVectors(t,i.center),e=n.dot(i.majorAxis)/i.majorAxisRadius,s=n.dot(i.minorAxis)/i.minorAxisRadius;return e*e+s*s-1}function It(i,t,n){const e=H(t.normal,t.center);return Math.abs(e.distanceToPoint(i))>z||Math.abs(Qt(t,i))>1e-4?!1:Bn(t,Et(t,i),n)}function ji(i,t,n,e,s){return i.filter(r=>At(t,_t(t,r),n)&&At(e,_t(e,r),s))}function es(i){const t=Math.abs(i.x)<.9?y.X_AXIS:y.Y_AXIS,n=new y().crossVectors(i,t);return n.lengthSq()<z*z&&n.crossVectors(i,y.Z_AXIS),n.normalize()}function ss(i,t,n){if(Math.abs(i)<E)return Math.abs(t)<E?[]:[-n/t];const e=t*t-4*i*n;if(e<-z)return[];if(e<z)return[-t/(2*i)];const s=Math.sqrt(Math.max(0,e));return[(-t-s)/(2*i),(-t+s)/(2*i)]}function Vn(i,t){for(const n of t)i.push(n)}function Fi(i){const t=[];for(const n of i)t.some(e=>e.distanceTo(n)<=z)||t.push(n);return t}A.AcGeArea2d=Sn,A.AcGeBox2d=K,A.AcGeBox3d=Q,A.AcGeCatmullRomCurve3d=Zt,A.AcGeCircArc2d=q,A.AcGeCircArc3d=$,A.AcGeCurve2d=Mt,A.AcGeEllipseArc2d=xt,A.AcGeEllipseArc3d=tt,A.AcGeEuler=gn,A.AcGeGeometryUtil=O,A.AcGeLine2d=zt,A.AcGeLine3d=Xt,A.AcGeLoop2d=G,A.AcGeMathUtil=p,A.AcGeMatrix2d=Pt,A.AcGeMatrix3d=st,A.AcGeNurbsCurve=L,A.AcGePlane=wt,A.AcGePoint2d=P,A.AcGePoint3d=w,A.AcGePolyline2d=dt,A.AcGeQuaternion=Nt,A.AcGeShape2d=wn,A.AcGeSpline3d=D,A.AcGeTol=M,A.AcGeVector2d=B,A.AcGeVector3d=y,A.DEFAULT_TOL=kt,A.DEG2RAD=sn,A.FLOAT_TOL=E,A.ORIGIN_POINT_2D=is,A.ORIGIN_POINT_3D=ln,A.RAD2DEG=rn,A.TAU=S,A.acgeBasisFunction=lt,A.acgeCalculateCurveLength=ge,A.acgeCeilPowerOfTwo=Hn,A.acgeClamp=W,A.acgeCloneIntersectPrimitive=Xe,A.acgeClosedPolygonArea2d=Ae,A.acgeClosedPolygonArea3d=Pe,A.acgeComputeParameterValues=ce,A.acgeDamp=On,A.acgeDegToRad=Qn,A.acgeEuclideanModulo=on,A.acgeEvaluateNurbsDerivatives=ue,A.acgeEvaluateNurbsPoint=Rt,A.acgeFloorPowerOfTwo=Jn,A.acgeGenerateAveragedKnots=le,A.acgeGenerateChordKnots=ms,A.acgeGenerateSqrtChordKnots=fs,A.acgeGenerateUUID=vn,A.acgeGenerateUniformKnots=gs,A.acgeGetOcsAngle=ws,A.acgeGetOcsReferenceVector=Ps,A.acgeIntPartLength=hn,A.acgeInterpolateControlPoints=ys,A.acgeInterpolateNurbsCurve=fn,A.acgeIntersectCurves=wi,A.acgeInverseLerp=Fn,A.acgeIsAngleOnCcwSweep=ee,A.acgeIsBetterDistanceAlign=be,A.acgeIsBetween=te,A.acgeIsBetweenAngle=ne,A.acgeIsPowerOfTwo=$n,A.acgeLerp=an,A.acgeMapLinear=jn,A.acgeNormalizeAngle=mt,A.acgeOffsetPointByDirectionInXY=si,A.acgeOffsetSmoothedSampledPath=ri,A.acgeOffsetVertexPath=ii,A.acgePingpong=Un,A.acgePointLiesOnCircle2d=Me,A.acgePolygonArea2d=ye,A.acgePolygonArea3d=_e,A.acgeRadToDeg=Kn,A.acgeRandFloat=Zn,A.acgeRandFloatSpread=Gn,A.acgeRandInt=Yn,A.acgeRelativeEps=se,A.acgeSameCircle2d=ze,A.acgeSeededRandom=Wn,A.acgeSignedPlanarCurvature=de,A.acgeSignedPolygonArea2d=An,A.acgeSmootherstep=Xn,A.acgeSmoothstep=Dn,A.acgeTransformIntersectPrimitive=Mi,A.acgeTransformOcsPointToWcs=ps,A.acgeTransformWcsPointToOcs=_n,Object.defineProperty(A,Symbol.toStringTag,{value:"Module"})}));
@@ -1 +1 @@
1
- {"version":3,"file":"AcGeBox2d.d.ts","sourceRoot":"","sources":["../../src/math/AcGeBox2d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAI/D;;GAEG;AACH,qBAAa,SAAS;IACpB;;OAEG;IACH,GAAG,EAAE,YAAY,CAAA;IACjB;;OAEG;IACH,GAAG,EAAE,YAAY,CAAA;IAEjB;;;;;;OAMG;gBAED,GAAG,GAAE,gBAAgB,GAAG,SAAqB,EAC7C,GAAG,GAAE,gBAAgB,GAAG,SAAqB;IAY/C;;;;;;OAMG;IACH,GAAG,CAAC,GAAG,EAAE,gBAAgB,EAAE,GAAG,EAAE,gBAAgB;IAOhD;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,gBAAgB,EAAE;IAUxC;;;;;OAKG;IACH,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB;IAQrE;;;OAGG;IACH,KAAK;IAIL;;;;OAIG;IACH,IAAI,CAAC,GAAG,EAAE,SAAS;IAOnB;;;OAGG;IACH,SAAS;IAOT;;;;OAIG;IACH,OAAO;IAMP;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,YAAY;IAM9B;;;;OAIG;IACH,OAAO,CAAC,MAAM,EAAE,YAAY;IAM5B;;OAEG;IACH,IAAI,MAAM,iBAMT;IAED;;OAEG;IACH,IAAI,IAAI,iBAIP;IAED;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,gBAAgB;IAOrC;;;;;;OAMG;IACH,cAAc,CAAC,MAAM,EAAE,gBAAgB;IAOvC;;;;OAIG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM;IAO7B;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,gBAAgB;IASrC;;;;;OAKG;IACH,WAAW,CAAC,GAAG,EAAE,SAAS;IAS1B;;;;;OAKG;IACH,YAAY,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY;IAU1D;;;;OAIG;IACH,aAAa,CAAC,GAAG,EAAE,SAAS;IAW5B;;;;;OAKG;IACH,UAAU,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY;IAIxD;;;;;OAKG;IACH,eAAe,CAAC,KAAK,EAAE,gBAAgB;IAIvC;;;;;OAKG;IACH,SAAS,CAAC,GAAG,EAAE,SAAS;IASxB;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS;IAOpB;;;;;OAKG;IACH,SAAS,CAAC,MAAM,EAAE,gBAAgB;IAOlC;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,SAAS;CAGtB"}
1
+ {"version":3,"file":"AcGeBox2d.d.ts","sourceRoot":"","sources":["../../src/math/AcGeBox2d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAI/D;;GAEG;AACH,qBAAa,SAAS;IACpB;;OAEG;IACH,GAAG,EAAE,YAAY,CAAA;IACjB;;OAEG;IACH,GAAG,EAAE,YAAY,CAAA;IAEjB;;;;;;OAMG;gBAED,GAAG,GAAE,gBAAgB,GAAG,SAAqB,EAC7C,GAAG,GAAE,gBAAgB,GAAG,SAAqB;IAY/C;;;;;;OAMG;IACH,GAAG,CAAC,GAAG,EAAE,gBAAgB,EAAE,GAAG,EAAE,gBAAgB;IAOhD;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,gBAAgB,EAAE;IAUxC;;;;;OAKG;IACH,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB;IAQrE;;;OAGG;IACH,KAAK;IAIL;;;;OAIG;IACH,IAAI,CAAC,GAAG,EAAE,SAAS;IAOnB;;;OAGG;IACH,SAAS;IAOT;;;;OAIG;IACH,OAAO;IAMP;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,YAAY;IAM9B;;;;OAIG;IACH,OAAO,CAAC,MAAM,EAAE,YAAY;IAM5B;;OAEG;IACH,IAAI,MAAM,iBAMT;IAED;;OAEG;IACH,IAAI,IAAI,iBAIP;IAED;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,gBAAgB;IAWrC;;;;;;OAMG;IACH,cAAc,CAAC,MAAM,EAAE,gBAAgB;IAOvC;;;;OAIG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM;IAO7B;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,gBAAgB;IASrC;;;;;OAKG;IACH,WAAW,CAAC,GAAG,EAAE,SAAS;IAS1B;;;;;OAKG;IACH,YAAY,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY;IAU1D;;;;OAIG;IACH,aAAa,CAAC,GAAG,EAAE,SAAS;IAW5B;;;;;OAKG;IACH,UAAU,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY;IAIxD;;;;;OAKG;IACH,eAAe,CAAC,KAAK,EAAE,gBAAgB;IAIvC;;;;;OAKG;IACH,SAAS,CAAC,GAAG,EAAE,SAAS;IASxB;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS;IAOpB;;;;;OAKG;IACH,SAAS,CAAC,MAAM,EAAE,gBAAgB;IAOlC;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,SAAS;CAGtB"}
@@ -146,6 +146,10 @@ var AcGeBox2d = /** @class */ (function () {
146
146
  * @returns Return this box
147
147
  */
148
148
  AcGeBox2d.prototype.expandByPoint = function (point) {
149
+ // Non-finite coords poison min/max via Math.min/Math.max (NaN spreads to parents).
150
+ if (!Number.isFinite(point.x) || !Number.isFinite(point.y)) {
151
+ return this;
152
+ }
149
153
  this.min.min(point);
150
154
  this.max.max(point);
151
155
  return this;
@@ -1 +1 @@
1
- {"version":3,"file":"AcGeBox2d.js","sourceRoot":"","sources":["../../src/math/AcGeBox2d.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AcGeBox2d.js","sourceRoot":"","sources":["../../src/math/AcGeBox2d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAoB,MAAM,gBAAgB,CAAA;AAE/D,IAAM,OAAO,GAAG,aAAa,CAAC,IAAI,YAAY,EAAE,CAAA;AAEhD;;GAEG;AACH;IAUE;;;;;;OAMG;IACH,mBACE,GAA6C,EAC7C,GAA6C;QAD7C,oBAAA,EAAA,eAA6C;QAC7C,oBAAA,EAAA,eAA6C;QAE7C,IAAI,CAAC,GAAG;YACN,GAAG,IAAI,IAAI;gBACT,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;gBACxC,CAAC,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;QACpC,IAAI,CAAC,GAAG;YACN,GAAG,IAAI,IAAI;gBACT,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;gBACxC,CAAC,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;IACtC,CAAC;IAED;;;;;;OAMG;IACH,uBAAG,GAAH,UAAI,GAAqB,EAAE,GAAqB;QAC9C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAClB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAElB,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;OAIG;IACH,iCAAa,GAAb,UAAc,MAA0B;QACtC,IAAI,CAAC,SAAS,EAAE,CAAA;QAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QAC/B,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;OAKG;IACH,wCAAoB,GAApB,UAAqB,MAAwB,EAAE,IAAsB;QACnE,IAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;QACvD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACnC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAEnC,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;OAGG;IACH,yBAAK,GAAL;QACE,OAAO,IAAI,SAAS,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACnC,CAAC;IAED;;;;OAIG;IACH,wBAAI,GAAJ,UAAK,GAAc;QACjB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACtB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAEtB,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;OAGG;IACH,6BAAS,GAAT;QACE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAA;QACnC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAA;QAEnC,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;OAIG;IACH,2BAAO,GAAP;QACE,oHAAoH;QAEpH,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IAC3D,CAAC;IAED;;;;OAIG;IACH,6BAAS,GAAT,UAAU,MAAoB;QAC5B,OAAO,IAAI,CAAC,OAAO,EAAE;YACnB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;IAC/D,CAAC;IAED;;;;OAIG;IACH,2BAAO,GAAP,UAAQ,MAAoB;QAC1B,OAAO,IAAI,CAAC,OAAO,EAAE;YACnB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;IAC3C,CAAC;IAKD,sBAAI,6BAAM;QAHV;;WAEG;aACH;YACE,OAAO,IAAI,CAAC,OAAO,EAAE;gBACnB,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;gBACxB,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;qBACnB,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;qBAC9B,cAAc,CAAC,GAAG,CAAC,CAAA;QAC5B,CAAC;;;OAAA;IAKD,sBAAI,2BAAI;QAHR;;WAEG;aACH;YACE,OAAO,IAAI,CAAC,OAAO,EAAE;gBACnB,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;gBACxB,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;QAC3D,CAAC;;;OAAA;IAED;;;;OAIG;IACH,iCAAa,GAAb,UAAc,KAAuB;QACnC,mFAAmF;QACnF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,OAAO,IAAI,CAAA;QACb,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAEnB,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;;OAMG;IACH,kCAAc,GAAd,UAAe,MAAwB;QACrC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACpB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAEpB,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;OAIG;IACH,kCAAc,GAAd,UAAe,MAAc;QAC3B,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAA;QAC3B,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QAE1B,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;OAIG;IACH,iCAAa,GAAb,UAAc,KAAuB;QACnC,OAAO,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YACzB,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YACpB,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YACpB,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,IAAI,CAAA;IACV,CAAC;IAED;;;;;OAKG;IACH,+BAAW,GAAX,UAAY,GAAc;QACxB,OAAO,CACL,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YACvB,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YACvB,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CACxB,CAAA;IACH,CAAC;IAED;;;;;OAKG;IACH,gCAAY,GAAZ,UAAa,KAAuB,EAAE,MAAoB;QACxD,wDAAwD;QACxD,6BAA6B;QAE7B,OAAO,MAAM,CAAC,GAAG,CACf,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAClD,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CACnD,CAAA;IACH,CAAC;IAED;;;;OAIG;IACH,iCAAa,GAAb,UAAc,GAAc;QAC1B,qDAAqD;QAErD,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3B,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YACtB,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YACtB,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YACtB,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,IAAI,CAAA;IACV,CAAC;IAED;;;;;OAKG;IACH,8BAAU,GAAV,UAAW,KAAuB,EAAE,MAAoB;QACtD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;IACrD,CAAC;IAED;;;;;OAKG;IACH,mCAAe,GAAf,UAAgB,KAAuB;QACrC,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;IAC1D,CAAC;IAED;;;;;OAKG;IACH,6BAAS,GAAT,UAAU,GAAc;QACtB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACrB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAErB,IAAI,IAAI,CAAC,OAAO,EAAE;YAAE,IAAI,CAAC,SAAS,EAAE,CAAA;QAEpC,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;OAKG;IACH,yBAAK,GAAL,UAAM,GAAc;QAClB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACrB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAErB,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;OAKG;IACH,6BAAS,GAAT,UAAU,MAAwB;QAChC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACpB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAEpB,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;OAIG;IACH,0BAAM,GAAN,UAAO,GAAc;QACnB,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC7D,CAAC;IACH,gBAAC;AAAD,CAAC,AA1UD,IA0UC"}
@@ -1 +1 @@
1
- {"version":3,"file":"AcGeBox3d.d.ts","sourceRoot":"","sources":["../../src/math/AcGeBox3d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAE/D;;GAEG;AACH,qBAAa,SAAS;IACpB;;OAEG;IACH,GAAG,EAAE,YAAY,CAAA;IACjB;;OAEG;IACH,GAAG,EAAE,YAAY,CAAA;IAEjB;;;;;;OAMG;gBAED,GAAG,GAAE,gBAAgB,GAAG,SAAqB,EAC7C,GAAG,GAAE,gBAAgB,GAAG,SAAqB;IAY/C;;;;;;OAMG;IACH,GAAG,CAAC,GAAG,EAAE,gBAAgB,EAAE,GAAG,EAAE,gBAAgB;IAOhD;;;;OAIG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE;IAQ5B;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,gBAAgB,EAAE;IAUxC;;;;;OAKG;IACH,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB;IAOrE;;;OAGG;IACH,KAAK;IAIL;;;;OAIG;IACH,IAAI,CAAC,GAAG,EAAE,SAAS;IAMnB;;;OAGG;IACH,SAAS;IAMT;;;;OAIG;IACH,OAAO;IASP;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,YAAY;IAM9B;;;;OAIG;IACH,OAAO,CAAC,MAAM,EAAE,YAAY;IAM5B;;OAEG;IACH,IAAI,MAAM,iBAMT;IAED;;OAEG;IACH,IAAI,IAAI,iBAIP;IAED;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,gBAAgB;IAMrC;;;;;;;OAOG;IACH,cAAc,CAAC,MAAM,EAAE,gBAAgB;IAOvC;;;;OAIG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM;IAO7B;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,gBAAgB;IAWrC;;;;;OAKG;IACH,WAAW,CAAC,GAAG,EAAE,SAAS;IAW1B;;;;;OAKG;IACH,YAAY,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY;IAW1D;;;;OAIG;IACH,aAAa,CAAC,GAAG,EAAE,SAAS;IAY5B;;;;OAIG;IACH,eAAe,CAAC,KAAK,EAAE,SAAS;IAiChC;;;;;OAKG;IACH,UAAU,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY;IAIxD;;;;;OAKG;IACH,eAAe,CAAC,KAAK,EAAE,gBAAgB;IAIvC;;;;;;OAMG;IACH,SAAS,CAAC,GAAG,EAAE,SAAS;IAUxB;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS;IAOpB;;;;OAIG;IACH,YAAY,CAAC,MAAM,EAAE,YAAY;IAmBjC;;;;;OAKG;IACH,SAAS,CAAC,MAAM,EAAE,gBAAgB;IAOlC;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,SAAS;CAGtB"}
1
+ {"version":3,"file":"AcGeBox3d.d.ts","sourceRoot":"","sources":["../../src/math/AcGeBox3d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAE/D;;GAEG;AACH,qBAAa,SAAS;IACpB;;OAEG;IACH,GAAG,EAAE,YAAY,CAAA;IACjB;;OAEG;IACH,GAAG,EAAE,YAAY,CAAA;IAEjB;;;;;;OAMG;gBAED,GAAG,GAAE,gBAAgB,GAAG,SAAqB,EAC7C,GAAG,GAAE,gBAAgB,GAAG,SAAqB;IAY/C;;;;;;OAMG;IACH,GAAG,CAAC,GAAG,EAAE,gBAAgB,EAAE,GAAG,EAAE,gBAAgB;IAOhD;;;;OAIG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE;IAQ5B;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,gBAAgB,EAAE;IAUxC;;;;;OAKG;IACH,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB;IAOrE;;;OAGG;IACH,KAAK;IAIL;;;;OAIG;IACH,IAAI,CAAC,GAAG,EAAE,SAAS;IAMnB;;;OAGG;IACH,SAAS;IAMT;;;;OAIG;IACH,OAAO;IASP;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,YAAY;IAM9B;;;;OAIG;IACH,OAAO,CAAC,MAAM,EAAE,YAAY;IAM5B;;OAEG;IACH,IAAI,MAAM,iBAMT;IAED;;OAEG;IACH,IAAI,IAAI,iBAIP;IAED;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,gBAAgB;IAcrC;;;;;;;OAOG;IACH,cAAc,CAAC,MAAM,EAAE,gBAAgB;IAOvC;;;;OAIG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM;IAO7B;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,gBAAgB;IAWrC;;;;;OAKG;IACH,WAAW,CAAC,GAAG,EAAE,SAAS;IAW1B;;;;;OAKG;IACH,YAAY,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY;IAW1D;;;;OAIG;IACH,aAAa,CAAC,GAAG,EAAE,SAAS;IAY5B;;;;OAIG;IACH,eAAe,CAAC,KAAK,EAAE,SAAS;IAiChC;;;;;OAKG;IACH,UAAU,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY;IAIxD;;;;;OAKG;IACH,eAAe,CAAC,KAAK,EAAE,gBAAgB;IAIvC;;;;;;OAMG;IACH,SAAS,CAAC,GAAG,EAAE,SAAS;IAUxB;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS;IAOpB;;;;OAIG;IACH,YAAY,CAAC,MAAM,EAAE,YAAY;IAmBjC;;;;;OAKG;IACH,SAAS,CAAC,MAAM,EAAE,gBAAgB;IAOlC;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,SAAS;CAGtB"}
@@ -159,6 +159,12 @@ var AcGeBox3d = /** @class */ (function () {
159
159
  * @returns
160
160
  */
161
161
  AcGeBox3d.prototype.expandByPoint = function (point) {
162
+ // Non-finite coords poison min/max via Math.min/Math.max (NaN spreads to parents).
163
+ if (!Number.isFinite(point.x) ||
164
+ !Number.isFinite(point.y) ||
165
+ !Number.isFinite(point.z)) {
166
+ return this;
167
+ }
162
168
  this.min.min(point);
163
169
  this.max.max(point);
164
170
  return this;
@@ -1 +1 @@
1
- {"version":3,"file":"AcGeBox3d.js","sourceRoot":"","sources":["../../src/math/AcGeBox3d.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AcGeBox3d.js","sourceRoot":"","sources":["../../src/math/AcGeBox3d.ts"],"names":[],"mappings":"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C,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA,CAAC,MAAM;QAC9E,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA,CAAC,MAAM;QAC9E,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA,CAAC,MAAM;QAC9E,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA,CAAC,MAAM;QAC9E,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA,CAAC,MAAM;QAC9E,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA,CAAC,MAAM;QAC9E,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA,CAAC,MAAM;QAC9E,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA,CAAC,MAAM;QAE9E,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QAE3B,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;OAKG;IACH,6BAAS,GAAT,UAAU,MAAwB;QAChC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACpB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAEpB,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;OAIG;IACH,0BAAM,GAAN,UAAO,GAAc;QACnB,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC7D,CAAC;IACH,gBAAC;AAAD,CAAC,AAjaD,IAiaC;;AAED,IAAM,OAAO,GAAG;IACd,aAAa,CAAC,IAAI,YAAY,EAAE;IAChC,aAAa,CAAC,IAAI,YAAY,EAAE;IAChC,aAAa,CAAC,IAAI,YAAY,EAAE;IAChC,aAAa,CAAC,IAAI,YAAY,EAAE;IAChC,aAAa,CAAC,IAAI,YAAY,EAAE;IAChC,aAAa,CAAC,IAAI,YAAY,EAAE;IAChC,aAAa,CAAC,IAAI,YAAY,EAAE;IAChC,aAAa,CAAC,IAAI,YAAY,EAAE;CACjC,CAAA;AAED,IAAM,OAAO,GAAG,aAAa,CAAC,IAAI,YAAY,EAAE,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mlightcad/geometry-engine",
3
- "version": "3.14.3",
3
+ "version": "3.14.5",
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.14.3"
36
+ "@mlightcad/common": "1.14.5"
37
37
  },
38
38
  "scripts": {
39
39
  "clean": "rimraf dist lib tsconfig.tsbuildinfo",