UNPKG

@mlightcad/geometry-engine

Version:

The geometry-engine package provides comprehensive geometric entities, mathematical operations, and transformations for 2D and 3D space. This package mimics AutoCAD ObjectARX's AcGe (Geometry) classes and provides the mathematical foundation for CAD opera

1 lines 71.6 kB
(function(y,L){typeof exports=="object"&&typeof module<"u"?L(exports,require("@mlightcad/common")):typeof define=="function"&&define.amd?define(["exports","@mlightcad/common"],L):(y=typeof globalThis<"u"?globalThis:y||self,L(y["geometry-engine"]={},y.common))})(this,function(y,L){"use strict";const k=["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 Gt=1234567;const wt=Math.PI/180,Pt=180/Math.PI;function Xt(){const u=Math.random()*4294967295|0,t=Math.random()*4294967295|0,s=Math.random()*4294967295|0,e=Math.random()*4294967295|0;return(k[u&255]+k[u>>8&255]+k[u>>16&255]+k[u>>24&255]+"-"+k[t&255]+k[t>>8&255]+"-"+k[t>>16&15|64]+k[t>>24&255]+"-"+k[s&63|128]+k[s>>8&255]+"-"+k[s>>16&255]+k[s>>24&255]+k[e&255]+k[e>>8&255]+k[e>>16&255]+k[e>>24&255]).toLowerCase()}function q(u,t,s){return Math.max(t,Math.min(s,u))}function bt(u,t){return(u%t+t)%t}function Dt(u,t,s,e,n){return e+(u-t)*(n-e)/(s-t)}function Yt(u,t,s){return u!==t?(s-u)/(t-u):0}function St(u,t,s){return(1-s)*u+s*t}function Zt(u,t,s,e){return St(u,t,1-Math.exp(-s*e))}function Ot(u,t=1){return t-Math.abs(bt(u,t*2)-t)}function Kt(u,t,s){return u<=t?0:u>=s?1:(u=(u-t)/(s-t),u*u*(3-2*u))}function Qt(u,t,s){return u<=t?0:u>=s?1:(u=(u-t)/(s-t),u*u*u*(u*(u*6-15)+10))}function Wt(u,t){return u+Math.floor(Math.random()*(t-u+1))}function Ht(u,t){return u+Math.random()*(t-u)}function $t(u){return u*(.5-Math.random())}function Jt(u){u!==void 0&&(Gt=u);let t=Gt+=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 vt(u){return u*wt}function ts(u){return u*Pt}function ss(u){return(u&u-1)===0&&u!==0}function es(u){return Math.pow(2,Math.ceil(Math.log(u)/Math.LN2))}function ns(u){return Math.pow(2,Math.floor(Math.log(u)/Math.LN2))}function v(u){const t=Math.PI*2;return(u%t+t)%t}function is(u,t,s){return u>t&&u<s||u>s&&u<t}function rs(u,t,s,e=!1){return u=v(u),t=v(t),s=v(s),e?t>s?u<=t&&u>=s:u<=t||u>=s:t<s?u>=t&&u<=s:u>=t||u<=s}function Ct(u){return u=Math.abs(u),u<1?0:Math.ceil(Math.log10(Math.abs(u)+1))}function hs(u,t=1e-7){const s=Ct(u);return Math.max(Math.pow(10,s)*t,t)}const C={DEG2RAD:wt,RAD2DEG:Pt,generateUUID:Xt,clamp:q,euclideanModulo:bt,mapLinear:Dt,inverseLerp:Yt,lerp:St,damp:Zt,pingpong:Ot,smoothstep:Kt,smootherstep:Qt,randInt:Wt,randFloat:Ht,randFloatSpread:$t,seededRandom:Jt,degToRad:vt,radToDeg:ts,isPowerOfTwo:ss,ceilPowerOfTwo:es,floorPowerOfTwo:ns,normalizeAngle:v,isBetween:is,isBetweenAngle:rs,intPartLength:Ct,relativeEps:hs},ht=class ht{constructor(t,s){this.x=0,this.y=0;const e=+(t!==void 0)+ +(s!==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:n,y:i}=t;this.x=n,this.y=i;return}if(e===2){this.x=t,this.y=s;return}throw L.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,s){return this.x=t,this.y=s,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,s){switch(t){case 0:this.x=s;break;case 1:this.y=s;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 ht(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,s){return this.x=t.x+s.x,this.y=t.y+s.y,this}addScaledVector(t,s){return this.x+=t.x*s,this.y+=t.y*s,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,s){return this.x=t.x-s.x,this.y=t.y-s.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 s=this.x,e=this.y,n=t.elements;return this.x=n[0]*s+n[3]*e+n[6],this.y=n[1]*s+n[4]*e+n[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,s){return this.x=Math.max(t.x,Math.min(s.x,this.x)),this.y=Math.max(t.y,Math.min(s.y,this.y)),this}clampScalar(t,s){return this.x=Math.max(t,Math.min(s,this.x)),this.y=Math.max(t,Math.min(s,this.y)),this}clampLength(t,s){const e=this.length();return this.divideScalar(e||1).multiplyScalar(Math.max(t,Math.min(s,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 s=Math.sqrt(this.lengthSq()*t.lengthSq());if(s===0)return Math.PI/2;const e=this.dot(t)/s;return Math.acos(Math.max(-1,Math.min(1,e)))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const s=this.x-t.x,e=this.y-t.y;return s*s+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,s){return this.x+=(t.x-this.x)*s,this.y+=(t.y-this.y)*s,this}lerpVectors(t,s,e){return this.x=t.x+(s.x-t.x)*e,this.y=t.y+(s.y-t.y)*e,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,s=0){return this.x=t[s],this.y=t[s+1],this}toArray(t=[],s=0){return t[s]=this.x,t[s+1]=this.y,t}rotateAround(t,s){const e=Math.cos(s),n=Math.sin(s),i=this.x-t.x,h=this.y-t.y;return this.x=i*e-h*n+t.x,this.y=i*n+h*e+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}relativeEps(t=1e-7){return Math.min(C.relativeEps(this.x,t),C.relativeEps(this.y,t))}*[Symbol.iterator](){yield this.x,yield this.y}};ht.EMPTY=Object.freeze(new ht(0,0));let b=ht;const ot=class ot{constructor(t,s,e,n,i,h,r,a,o){this.elements=[1,0,0,0,1,0,0,0,1],t!=null&&s!=null&&e!=null&&n!=null&&i!=null&&h!=null&&r!=null&&a!=null&&o!=null&&this.set(t,s,e,n,i,h,r,a,o)}set(t,s,e,n,i,h,r,a,o){const c=this.elements;return c[0]=t,c[1]=n,c[2]=r,c[3]=s,c[4]=i,c[5]=a,c[6]=e,c[7]=h,c[8]=o,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const s=this.elements,e=t.elements;return s[0]=e[0],s[1]=e[1],s[2]=e[2],s[3]=e[3],s[4]=e[4],s[5]=e[5],s[6]=e[6],s[7]=e[7],s[8]=e[8],this}extractBasis(t,s,e){return t.setFromMatrix3Column(this,0),s.setFromMatrix3Column(this,1),e.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const s=t.elements;return this.set(s[0],s[4],s[8],s[1],s[5],s[9],s[2],s[6],s[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,s){const e=t.elements,n=s.elements,i=this.elements,h=e[0],r=e[3],a=e[6],o=e[1],c=e[4],l=e[7],m=e[2],d=e[5],x=e[8],_=n[0],M=n[3],A=n[6],P=n[1],w=n[4],f=n[7],p=n[2],I=n[5],z=n[8];return i[0]=h*_+r*P+a*p,i[3]=h*M+r*w+a*I,i[6]=h*A+r*f+a*z,i[1]=o*_+c*P+l*p,i[4]=o*M+c*w+l*I,i[7]=o*A+c*f+l*z,i[2]=m*_+d*P+x*p,i[5]=m*M+d*w+x*I,i[8]=m*A+d*f+x*z,this}multiplyScalar(t){const s=this.elements;return s[0]*=t,s[3]*=t,s[6]*=t,s[1]*=t,s[4]*=t,s[7]*=t,s[2]*=t,s[5]*=t,s[8]*=t,this}determinant(){const t=this.elements,s=t[0],e=t[1],n=t[2],i=t[3],h=t[4],r=t[5],a=t[6],o=t[7],c=t[8];return s*h*c-s*r*o-e*i*c+e*r*a+n*i*o-n*h*a}invert(){const t=this.elements,s=t[0],e=t[1],n=t[2],i=t[3],h=t[4],r=t[5],a=t[6],o=t[7],c=t[8],l=c*h-r*o,m=r*a-c*i,d=o*i-h*a,x=s*l+e*m+n*d;if(x===0)return this.set(0,0,0,0,0,0,0,0,0);const _=1/x;return t[0]=l*_,t[1]=(n*o-c*e)*_,t[2]=(r*e-n*h)*_,t[3]=m*_,t[4]=(c*s-n*a)*_,t[5]=(n*i-r*s)*_,t[6]=d*_,t[7]=(e*a-o*s)*_,t[8]=(h*s-e*i)*_,this}transpose(){let t;const s=this.elements;return t=s[1],s[1]=s[3],s[3]=t,t=s[2],s[2]=s[6],s[6]=t,t=s[5],s[5]=s[7],s[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const s=this.elements;return t.elements[0]=s[0],t.elements[1]=s[3],t.elements[2]=s[6],t.elements[3]=s[1],t.elements[4]=s[4],t.elements[5]=s[7],t.elements[6]=s[2],t.elements[7]=s[5],t.elements[8]=s[8],this}setUvTransform(t,s,e,n,i,h,r){const a=Math.cos(i),o=Math.sin(i);return this.set(e*a,e*o,-e*(a*h+o*r)+h+t,-n*o,n*a,-n*(-o*h+a*r)+r+s,0,0,1),this}scale(t,s){return this.premultiply(Et.makeScale(t,s)),this}rotate(t){return this.premultiply(Et.makeRotation(-t)),this}translate(t,s){return this.premultiply(Et.makeTranslation(t,s)),this}makeTranslation(t,s){return t instanceof b?this.set(1,0,t.x,0,1,t.y,0,0,1):this.set(1,0,t,0,1,s,0,0,1),this}makeRotation(t){const s=Math.cos(t),e=Math.sin(t);return this.set(s,-e,0,e,s,0,0,0,1),this}makeScale(t,s){return this.set(t,0,0,0,s,0,0,0,1),this}equals(t){const s=this.elements,e=t.elements;for(let n=0;n<9;n++)if(s[n]!==e[n])return!1;return!0}fromArray(t,s=0){for(let e=0;e<9;e++)this.elements[e]=t[e+s];return this}toArray(t=[],s=0){const e=this.elements;return t[s]=e[0],t[s+1]=e[1],t[s+2]=e[2],t[s+3]=e[3],t[s+4]=e[4],t[s+5]=e[5],t[s+6]=e[6],t[s+7]=e[7],t[s+8]=e[8],t}clone(){return new ot().fromArray(this.elements)}};ot.IDENTITY=Object.freeze(new ot);let O=ot;const Et=new O,X=1e-6,B=2*Math.PI,ps={x:0,y:0},It={x:0,y:0,z:0};class Bt{constructor(){this.equalPointTol=X,this.equalVectorTol=X}equalPoint2d(t,s){return new b(t).sub(s).length()<this.equalPointTol}equalPoint3d(t,s){return new g(t).sub(s).length()<this.equalPointTol}static equalToZero(t,s=X){return t<s&&t>-s}static equal(t,s,e=X){return Math.abs(t-s)<e}static great(t,s,e=X){return t-s>e}static less(t,s,e=X){return t-s<e}}const kt=new Bt;function Nt(u,t,s=!1){const e=u.x,n=u.y;let i=!1;const h=t.length;for(let r=0,a=h-1;r<h;a=r++){const o=t[r].x,c=t[r].y,l=t[a].x,m=t[a].y;let d=c>n!=m>n;s&&(d=c>=n!=m>=n),d&&e<(l-o)*(n-c)/(m-c)+o&&(i=!i)}return i}function os(u,t){if(u.length===0||t.length===0)return!1;const s=new U().setFromPoints(u),e=new U().setFromPoints(t);if(!s.intersectsBox(e))return!1;for(let n=0;n<u.length;){if(Nt(u[n],t,!0))return!0;n<u.length-1&&kt.equalPoint2d(u[n+1],u[n])&&++n,++n}return!1}const as={isPointInPolygon:Nt,isPolygonIntersect:os};function cs(u,t){const s=[],e=t-1,n=u;for(let i=0;i<=n;i++)s.push(0);for(let i=1;i<=e-n;i++)s.push(i);for(let i=0;i<=n;i++)s.push(e-n+1);return s}function ls(u,t){const s=t.length-1,e=u,n=[0];let i=0;for(let r=1;r<=s;r++){const a=t[r][0]-t[r-1][0],o=t[r][1]-t[r-1][1],c=t[r][2]-t[r-1][2],l=Math.sqrt(a*a+o*o+c*c);i+=l,n.push(i)}const h=[];for(let r=0;r<=e;r++)h.push(0);for(let r=1;r<=s-e;r++){const a=n[r]/i;h.push(a*(s-e+1))}for(let r=0;r<=e;r++)h.push(s-e+1);return h}function us(u,t){const s=t.length-1,e=u,n=[0];let i=0;for(let r=1;r<=s;r++){const a=t[r][0]-t[r-1][0],o=t[r][1]-t[r-1][1],c=t[r][2]-t[r-1][2],l=Math.sqrt(a*a+o*o+c*c),m=Math.sqrt(l);i+=m,n.push(i)}const h=[];for(let r=0;r<=e;r++)h.push(0);for(let r=1;r<=s-e;r++){const a=n[r]/i;h.push(a*(s-e+1))}for(let r=0;r<=e;r++)h.push(s-e+1);return h}function lt(u,t,s,e){if(t===0)return s>=e[u]&&s<e[u+1]?1:0;const n=e[u+t]-e[u],i=e[u+t+1]-e[u+1],h=n>1e-10?(s-e[u])/n:0,r=i>1e-10?(e[u+t+1]-s)/i:0;return h*lt(u,t-1,s,e)+r*lt(u+1,t-1,s,e)}function tt(u,t,s,e,n){const i=e.length-1,h=t;if(u=Math.max(s[h],Math.min(s[i+1],u)),Math.abs(u-s[i+1])<1e-8)return[...e[i]];if(Math.abs(u-s[h])<1e-8)return[...e[0]];const r=[0,0,0];let a=0;for(let o=0;o<=i;o++){const c=lt(o,h,u,s),l=n[o]*c;r[0]+=e[o][0]*l,r[1]+=e[o][1]*l,r[2]+=e[o][2]*l,a+=l}if(a<1e-10){const o=s[s.length-h-1];if(Math.abs(u-o)<1e-8)return[...e[i]];if(Math.abs(u-s[h])<1e-8)return[...e[0]]}return a>1e-10&&(r[0]/=a,r[1]/=a,r[2]/=a),r}function ds(u,t,s,e){const n=u,i=t[n],h=t[t.length-n-1];let r=0;const a=1e3,o=(h-i)/a;let c=tt(i,u,t,s,e);for(let _=1;_<=a;_++){const M=i+_*o,A=tt(M,u,t,s,e),P=A[0]-c[0],w=A[1]-c[1],f=A[2]-c[2];r+=Math.sqrt(P*P+w*w+f*f),c=A}const l=tt(h,u,t,s,e),m=l[0]-c[0],d=l[1]-c[1],x=l[2]-c[2];return r+=Math.sqrt(m*m+d*d+x*x),r}function ms(u){return u.map(t=>[...t])}class st{constructor(t=0,s=0,e=0,n=1){this._x=t,this._y=s,this._z=e,this._w=n}static slerpFlat(t,s,e,n,i,h,r){let a=e[n+0],o=e[n+1],c=e[n+2],l=e[n+3];const m=i[h+0],d=i[h+1],x=i[h+2],_=i[h+3];if(r===0){t[s+0]=a,t[s+1]=o,t[s+2]=c,t[s+3]=l;return}if(r===1){t[s+0]=m,t[s+1]=d,t[s+2]=x,t[s+3]=_;return}if(l!==_||a!==m||o!==d||c!==x){let M=1-r;const A=a*m+o*d+c*x+l*_,P=A>=0?1:-1,w=1-A*A;if(w>Number.EPSILON){const p=Math.sqrt(w),I=Math.atan2(p,A*P);M=Math.sin(M*I)/p,r=Math.sin(r*I)/p}const f=r*P;if(a=a*M+m*f,o=o*M+d*f,c=c*M+x*f,l=l*M+_*f,M===1-r){const p=1/Math.sqrt(a*a+o*o+c*c+l*l);a*=p,o*=p,c*=p,l*=p}}t[s]=a,t[s+1]=o,t[s+2]=c,t[s+3]=l}static multiplyQuaternionsFlat(t,s,e,n,i,h){const r=e[n],a=e[n+1],o=e[n+2],c=e[n+3],l=i[h],m=i[h+1],d=i[h+2],x=i[h+3];return t[s]=r*x+c*l+a*d-o*m,t[s+1]=a*x+c*m+o*l-r*d,t[s+2]=o*x+c*d+r*m-a*l,t[s+3]=c*x-r*l-a*m-o*d,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,s,e,n){return this._x=t,this._y=s,this._z=e,this._w=n,this._onChangeCallback(),this}clone(){return new st(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,s=!0){const e=t.x,n=t.y,i=t.z,h=t.order,r=Math.cos,a=Math.sin,o=r(e/2),c=r(n/2),l=r(i/2),m=a(e/2),d=a(n/2),x=a(i/2);switch(h){case"XYZ":this._x=m*c*l+o*d*x,this._y=o*d*l-m*c*x,this._z=o*c*x+m*d*l,this._w=o*c*l-m*d*x;break;case"YXZ":this._x=m*c*l+o*d*x,this._y=o*d*l-m*c*x,this._z=o*c*x-m*d*l,this._w=o*c*l+m*d*x;break;case"ZXY":this._x=m*c*l-o*d*x,this._y=o*d*l+m*c*x,this._z=o*c*x+m*d*l,this._w=o*c*l-m*d*x;break;case"ZYX":this._x=m*c*l-o*d*x,this._y=o*d*l+m*c*x,this._z=o*c*x-m*d*l,this._w=o*c*l+m*d*x;break;case"YZX":this._x=m*c*l+o*d*x,this._y=o*d*l+m*c*x,this._z=o*c*x-m*d*l,this._w=o*c*l-m*d*x;break;case"XZY":this._x=m*c*l-o*d*x,this._y=o*d*l-m*c*x,this._z=o*c*x+m*d*l,this._w=o*c*l+m*d*x;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+h)}return s===!0&&this._onChangeCallback(),this}setFromAxisAngle(t,s){const e=s/2,n=Math.sin(e);return this._x=t.x*n,this._y=t.y*n,this._z=t.z*n,this._w=Math.cos(e),this._onChangeCallback(),this}setFromRotationMatrix(t){const s=t.elements,e=s[0],n=s[4],i=s[8],h=s[1],r=s[5],a=s[9],o=s[2],c=s[6],l=s[10],m=e+r+l;if(m>0){const d=.5/Math.sqrt(m+1);this._w=.25/d,this._x=(c-a)*d,this._y=(i-o)*d,this._z=(h-n)*d}else if(e>r&&e>l){const d=2*Math.sqrt(1+e-r-l);this._w=(c-a)/d,this._x=.25*d,this._y=(n+h)/d,this._z=(i+o)/d}else if(r>l){const d=2*Math.sqrt(1+r-e-l);this._w=(i-o)/d,this._x=(n+h)/d,this._y=.25*d,this._z=(a+c)/d}else{const d=2*Math.sqrt(1+l-e-r);this._w=(h-n)/d,this._x=(i+o)/d,this._y=(a+c)/d,this._z=.25*d}return this._onChangeCallback(),this}setFromUnitVectors(t,s){let e=t.dot(s)+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*s.z-t.z*s.y,this._y=t.z*s.x-t.x*s.z,this._z=t.x*s.y-t.y*s.x,this._w=e),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(q(this.dot(t),-1,1)))}rotateTowards(t,s){const e=this.angleTo(t);if(e===0)return this;const n=Math.min(1,s/e);return this.slerp(t,n),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,s){const e=t._x,n=t._y,i=t._z,h=t._w,r=s._x,a=s._y,o=s._z,c=s._w;return this._x=e*c+h*r+n*o-i*a,this._y=n*c+h*a+i*r-e*o,this._z=i*c+h*o+e*a-n*r,this._w=h*c-e*r-n*a-i*o,this._onChangeCallback(),this}slerp(t,s){if(s===0)return this;if(s===1)return this.copy(t);const e=this._x,n=this._y,i=this._z,h=this._w;let r=h*t._w+e*t._x+n*t._y+i*t._z;if(r<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,r=-r):this.copy(t),r>=1)return this._w=h,this._x=e,this._y=n,this._z=i,this;const a=1-r*r;if(a<=Number.EPSILON){const d=1-s;return this._w=d*h+s*this._w,this._x=d*e+s*this._x,this._y=d*n+s*this._y,this._z=d*i+s*this._z,this.normalize(),this}const o=Math.sqrt(a),c=Math.atan2(o,r),l=Math.sin((1-s)*c)/o,m=Math.sin(s*c)/o;return this._w=h*l+this._w*m,this._x=e*l+this._x*m,this._y=n*l+this._y*m,this._z=i*l+this._z*m,this._onChangeCallback(),this}slerpQuaternions(t,s,e){return this.copy(t).slerp(s,e)}random(){const t=2*Math.PI*Math.random(),s=2*Math.PI*Math.random(),e=Math.random(),n=Math.sqrt(1-e),i=Math.sqrt(e);return this.set(n*Math.sin(t),n*Math.cos(t),i*Math.sin(s),i*Math.cos(s))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,s=0){return this._x=t[s],this._y=t[s+1],this._z=t[s+2],this._w=t[s+3],this._onChangeCallback(),this}toArray(t=[],s=0){return t[s]=this._x,t[s+1]=this._y,t[s+2]=this._z,t[s+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 R=class R{constructor(t,s,e){this.x=0,this.y=0,this.z=0;const n=+(t!==void 0)+ +(s!==void 0)+ +(e!==void 0);if(n!==0){if(n===1&&t instanceof Array){this.x=t[0],this.y=t[1],this.z=t[2];return}if(n===1){const{x:i,y:h,z:r}=t;this.x=i,this.y=h,this.z=r||0;return}if(n===3){this.x=t,this.y=s,this.z=e;return}throw L.AcCmErrors.ILLEGAL_PARAMETERS}}set(t,s,e){return e===void 0&&(e=this.z),this.x=t,this.y=s,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,s){switch(t){case 0:this.x=s;break;case 1:this.y=s;break;case 2:this.z=s;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 R(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,s){return this.x=t.x+s.x,this.y=t.y+s.y,this.z=t.z+s.z,this}addScaledVector(t,s){return this.x+=t.x*s,this.y+=t.y*s,this.z+=t.z*s,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,s){return this.x=t.x-s.x,this.y=t.y-s.y,this.z=t.z-s.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,s){return this.x=t.x*s.x,this.y=t.y*s.y,this.z=t.z*s.z,this}applyEuler(t){return this.applyQuaternion(xs.setFromEuler(t))}applyAxisAngle(t,s){return this.applyQuaternion(xs.setFromAxisAngle(t,s))}applyMatrix3(t){const s=this.x,e=this.y,n=this.z,i=t.elements;return this.x=i[0]*s+i[3]*e+i[6]*n,this.y=i[1]*s+i[4]*e+i[7]*n,this.z=i[2]*s+i[5]*e+i[8]*n,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix3d(t){const s=this.x,e=this.y,n=this.z,i=t.elements,h=1/(i[3]*s+i[7]*e+i[11]*n+i[15]);return this.x=(i[0]*s+i[4]*e+i[8]*n+i[12])*h,this.y=(i[1]*s+i[5]*e+i[9]*n+i[13])*h,this.z=(i[2]*s+i[6]*e+i[10]*n+i[14])*h,this}applyQuaternion(t){const s=this.x,e=this.y,n=this.z,i=t.x,h=t.y,r=t.z,a=t.w,o=2*(h*n-r*e),c=2*(r*s-i*n),l=2*(i*e-h*s);return this.x=s+a*o+h*l-r*c,this.y=e+a*c+r*o-i*l,this.z=n+a*l+i*c-h*o,this}transformDirection(t){const s=this.x,e=this.y,n=this.z,i=t.elements;return this.x=i[0]*s+i[4]*e+i[8]*n,this.y=i[1]*s+i[5]*e+i[9]*n,this.z=i[2]*s+i[6]*e+i[10]*n,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,s){return this.x=Math.max(t.x,Math.min(s.x,this.x)),this.y=Math.max(t.y,Math.min(s.y,this.y)),this.z=Math.max(t.z,Math.min(s.z,this.z)),this}clampScalar(t,s){return this.x=Math.max(t,Math.min(s,this.x)),this.y=Math.max(t,Math.min(s,this.y)),this.z=Math.max(t,Math.min(s,this.z)),this}clampLength(t,s){const e=this.length();return this.divideScalar(e||1).multiplyScalar(Math.max(t,Math.min(s,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 s=this.dot(t),e=this.length(),n=t.length();return Math.abs(s)===e*n}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,s){return this.x+=(t.x-this.x)*s,this.y+=(t.y-this.y)*s,this.z+=(t.z-this.z)*s,this}lerpVectors(t,s,e){return this.x=t.x+(s.x-t.x)*e,this.y=t.y+(s.y-t.y)*e,this.z=t.z+(s.z-t.z)*e,this}cross(t){return this.crossVectors(this,t)}crossVectors(t,s){const e=t.x,n=t.y,i=t.z,h=s.x,r=s.y,a=s.z;return this.x=n*a-i*r,this.y=i*h-e*a,this.z=e*r-n*h,this}projectOnVector(t){const s=t.lengthSq();if(s===0)return this.set(0,0,0);const e=t.dot(this)/s;return this.copy(t).multiplyScalar(e)}projectOnPlane(t){return Lt.copy(this).projectOnVector(t),this.sub(Lt)}reflect(t){return this.sub(Lt.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const s=Math.sqrt(this.lengthSq()*t.lengthSq());if(s===0)return Math.PI/2;const e=this.dot(t)/s;return Math.acos(Math.max(-1,Math.min(1,e)))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const s=this.x-t.x,e=this.y-t.y,n=this.z-t.z;return s*s+e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromMatrixPosition(t){const s=t.elements;return this.x=s[12],this.y=s[13],this.z=s[14],this}setFromMatrixScale(t){const s=this.setFromMatrixColumn(t,0).length(),e=this.setFromMatrixColumn(t,1).length(),n=this.setFromMatrixColumn(t,2).length();return this.x=s,this.y=e,this.z=n,this}setFromMatrixColumn(t,s){return this.fromArray(t.elements,s*4)}setFromMatrix3Column(t,s){return this.fromArray(t.elements,s*3)}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,s=0){return this.x=t[s],this.y=t[s+1],this.z=t[s+2],this}toArray(t=[],s=0){return t[s]=this.x,t[s+1]=this.y,t[s+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,s=Math.random()*2-1,e=Math.sqrt(1-s*s);return this.x=e*Math.cos(t),this.y=s,this.z=e*Math.sin(t),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}};R.X_AXIS=Object.freeze(new R(1,0,0)),R.NEGATIVE_X_AXIS=Object.freeze(new R(-1,0,0)),R.Y_AXIS=Object.freeze(new R(0,1,0)),R.NEGATIVE_Y_AXIS=Object.freeze(new R(0,-1,0)),R.Z_AXIS=Object.freeze(new R(0,0,1)),R.NEGATIVE_Z_AXIS=Object.freeze(new R(0,0,-1));let g=R;const Lt=new g,xs=new st,at=class at{constructor(t,s,e,n,i,h,r,a,o,c,l,m,d,x,_,M){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],t!=null&&s!=null&&e!=null&&n!=null&&i!=null&&h!=null&&r!=null&&a!=null&&o!=null&&c!=null&&l!=null&&m!=null&&d!=null&&x!=null&&_!=null&&M!=null&&this.set(t,s,e,n,i,h,r,a,o,c,l,m,d,x,_,M)}set(t,s,e,n,i,h,r,a,o,c,l,m,d,x,_,M){const A=this.elements;return A[0]=t,A[4]=s,A[8]=e,A[12]=n,A[1]=i,A[5]=h,A[9]=r,A[13]=a,A[2]=o,A[6]=c,A[10]=l,A[14]=m,A[3]=d,A[7]=x,A[11]=_,A[15]=M,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 at().fromArray(this.elements)}copy(t){const s=this.elements,e=t.elements;return s[0]=e[0],s[1]=e[1],s[2]=e[2],s[3]=e[3],s[4]=e[4],s[5]=e[5],s[6]=e[6],s[7]=e[7],s[8]=e[8],s[9]=e[9],s[10]=e[10],s[11]=e[11],s[12]=e[12],s[13]=e[13],s[14]=e[14],s[15]=e[15],this}copyPosition(t){const s=this.elements,e=t.elements;return s[12]=e[12],s[13]=e[13],s[14]=e[14],this}setFromMatrix3(t){const s=t.elements;return this.set(s[0],s[3],s[6],0,s[1],s[4],s[7],0,s[2],s[5],s[8],0,0,0,0,1),this}setFromExtrusionDirection(t){if(kt.equalPoint3d(t,g.Z_AXIS))this.identity();else{const s=new g(1,0,0);Math.abs(t.x)<1/64&&Math.abs(t.y)<1/64?s.crossVectors(g.Y_AXIS,t).normalize():s.crossVectors(g.Z_AXIS,t).normalize();const e=t.clone().cross(s).normalize();this.set(s.x,s.y,s.z,0,e.x,e.y,e.z,0,t.x,t.y,t.z,0,0,0,0,1)}return this}extractBasis(t,s,e){return t.setFromMatrixColumn(this,0),s.setFromMatrixColumn(this,1),e.setFromMatrixColumn(this,2),this}makeBasis(t,s,e){return this.set(t.x,s.x,e.x,0,t.y,s.y,e.y,0,t.z,s.z,e.z,0,0,0,0,1),this}extractRotation(t){const s=this.elements,e=t.elements,n=1/Q.setFromMatrixColumn(t,0).length(),i=1/Q.setFromMatrixColumn(t,1).length(),h=1/Q.setFromMatrixColumn(t,2).length();return s[0]=e[0]*n,s[1]=e[1]*n,s[2]=e[2]*n,s[3]=0,s[4]=e[4]*i,s[5]=e[5]*i,s[6]=e[6]*i,s[7]=0,s[8]=e[8]*h,s[9]=e[9]*h,s[10]=e[10]*h,s[11]=0,s[12]=0,s[13]=0,s[14]=0,s[15]=1,this}makeRotationFromQuaternion(t){return this.compose(fs,t,ws)}lookAt(t,s,e){const n=this.elements;return T.subVectors(t,s),T.lengthSq()===0&&(T.z=1),T.normalize(),F.crossVectors(e,T),F.lengthSq()===0&&(Math.abs(e.z)===1?T.x+=1e-4:T.z+=1e-4,T.normalize(),F.crossVectors(e,T)),F.normalize(),ut.crossVectors(T,F),n[0]=F.x,n[4]=ut.x,n[8]=T.x,n[1]=F.y,n[5]=ut.y,n[9]=T.y,n[2]=F.z,n[6]=ut.z,n[10]=T.z,this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,s){const e=t.elements,n=s.elements,i=this.elements,h=e[0],r=e[4],a=e[8],o=e[12],c=e[1],l=e[5],m=e[9],d=e[13],x=e[2],_=e[6],M=e[10],A=e[14],P=e[3],w=e[7],f=e[11],p=e[15],I=n[0],z=n[4],N=n[8],H=n[12],$=n[1],Z=n[5],J=n[9],xt=n[13],yt=n[2],gt=n[6],_t=n[10],At=n[14],Mt=n[3],zt=n[7],pt=n[11],ft=n[15];return i[0]=h*I+r*$+a*yt+o*Mt,i[4]=h*z+r*Z+a*gt+o*zt,i[8]=h*N+r*J+a*_t+o*pt,i[12]=h*H+r*xt+a*At+o*ft,i[1]=c*I+l*$+m*yt+d*Mt,i[5]=c*z+l*Z+m*gt+d*zt,i[9]=c*N+l*J+m*_t+d*pt,i[13]=c*H+l*xt+m*At+d*ft,i[2]=x*I+_*$+M*yt+A*Mt,i[6]=x*z+_*Z+M*gt+A*zt,i[10]=x*N+_*J+M*_t+A*pt,i[14]=x*H+_*xt+M*At+A*ft,i[3]=P*I+w*$+f*yt+p*Mt,i[7]=P*z+w*Z+f*gt+p*zt,i[11]=P*N+w*J+f*_t+p*pt,i[15]=P*H+w*xt+f*At+p*ft,this}multiplyScalar(t){const s=this.elements;return s[0]*=t,s[4]*=t,s[8]*=t,s[12]*=t,s[1]*=t,s[5]*=t,s[9]*=t,s[13]*=t,s[2]*=t,s[6]*=t,s[10]*=t,s[14]*=t,s[3]*=t,s[7]*=t,s[11]*=t,s[15]*=t,this}determinant(){const t=this.elements,s=t[0],e=t[4],n=t[8],i=t[12],h=t[1],r=t[5],a=t[9],o=t[13],c=t[2],l=t[6],m=t[10],d=t[14],x=t[3],_=t[7],M=t[11],A=t[15];return x*(+i*a*l-n*o*l-i*r*m+e*o*m+n*r*d-e*a*d)+_*(+s*a*d-s*o*m+i*h*m-n*h*d+n*o*c-i*a*c)+M*(+s*o*l-s*r*d-i*h*l+e*h*d+i*r*c-e*o*c)+A*(-n*r*c-s*a*l+s*r*m+n*h*l-e*h*m+e*a*c)}transpose(){const t=this.elements;let s;return s=t[1],t[1]=t[4],t[4]=s,s=t[2],t[2]=t[8],t[8]=s,s=t[6],t[6]=t[9],t[9]=s,s=t[3],t[3]=t[12],t[12]=s,s=t[7],t[7]=t[13],t[13]=s,s=t[11],t[11]=t[14],t[14]=s,this}setPosition(t,s,e){const n=this.elements;return t instanceof g?(n[12]=t.x,n[13]=t.y,n[14]=t.z):(n[12]=t,n[13]=s,n[14]=e),this}invert(){const t=this.elements,s=t[0],e=t[1],n=t[2],i=t[3],h=t[4],r=t[5],a=t[6],o=t[7],c=t[8],l=t[9],m=t[10],d=t[11],x=t[12],_=t[13],M=t[14],A=t[15],P=l*M*o-_*m*o+_*a*d-r*M*d-l*a*A+r*m*A,w=x*m*o-c*M*o-x*a*d+h*M*d+c*a*A-h*m*A,f=c*_*o-x*l*o+x*r*d-h*_*d-c*r*A+h*l*A,p=x*l*a-c*_*a-x*r*m+h*_*m+c*r*M-h*l*M,I=s*P+e*w+n*f+i*p;if(I===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const z=1/I;return t[0]=P*z,t[1]=(_*m*i-l*M*i-_*n*d+e*M*d+l*n*A-e*m*A)*z,t[2]=(r*M*i-_*a*i+_*n*o-e*M*o-r*n*A+e*a*A)*z,t[3]=(l*a*i-r*m*i-l*n*o+e*m*o+r*n*d-e*a*d)*z,t[4]=w*z,t[5]=(c*M*i-x*m*i+x*n*d-s*M*d-c*n*A+s*m*A)*z,t[6]=(x*a*i-h*M*i-x*n*o+s*M*o+h*n*A-s*a*A)*z,t[7]=(h*m*i-c*a*i+c*n*o-s*m*o-h*n*d+s*a*d)*z,t[8]=f*z,t[9]=(x*l*i-c*_*i-x*e*d+s*_*d+c*e*A-s*l*A)*z,t[10]=(h*_*i-x*r*i+x*e*o-s*_*o-h*e*A+s*r*A)*z,t[11]=(c*r*i-h*l*i-c*e*o+s*l*o+h*e*d-s*r*d)*z,t[12]=p*z,t[13]=(c*_*n-x*l*n+x*e*m-s*_*m-c*e*M+s*l*M)*z,t[14]=(x*r*n-h*_*n-x*e*a+s*_*a+h*e*M-s*r*M)*z,t[15]=(h*l*n-c*r*n+c*e*a-s*l*a-h*e*m+s*r*m)*z,this}scale(t){const s=this.elements,e=t.x,n=t.y,i=t.z;return s[0]*=e,s[4]*=n,s[8]*=i,s[1]*=e,s[5]*=n,s[9]*=i,s[2]*=e,s[6]*=n,s[10]*=i,s[3]*=e,s[7]*=n,s[11]*=i,this}getMaxScaleOnAxis(){const t=this.elements,s=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],n=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(s,e,n))}makeTranslation(t,s,e){return t instanceof g?this.set(1,0,0,t.x,0,1,0,t.y,0,0,1,t.z,0,0,0,1):this.set(1,0,0,t,0,1,0,s,0,0,1,e,0,0,0,1),this}makeRotationX(t){const s=Math.cos(t),e=Math.sin(t);return this.set(1,0,0,0,0,s,-e,0,0,e,s,0,0,0,0,1),this}makeRotationY(t){const s=Math.cos(t),e=Math.sin(t);return this.set(s,0,e,0,0,1,0,0,-e,0,s,0,0,0,0,1),this}makeRotationZ(t){const s=Math.cos(t),e=Math.sin(t);return this.set(s,-e,0,0,e,s,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,s){const e=Math.cos(s),n=Math.sin(s),i=1-e,h=t.x,r=t.y,a=t.z,o=i*h,c=i*r;return this.set(o*h+e,o*r-n*a,o*a+n*r,0,o*r+n*a,c*r+e,c*a-n*h,0,o*a-n*r,c*a+n*h,i*a*a+e,0,0,0,0,1),this}makeScale(t,s,e){return this.set(t,0,0,0,0,s,0,0,0,0,e,0,0,0,0,1),this}makeShear(t,s,e,n,i,h){return this.set(1,e,i,0,t,1,h,0,s,n,1,0,0,0,0,1),this}compose(t,s,e){const n=this.elements,i=s.x,h=s.y,r=s.z,a=s.w,o=i+i,c=h+h,l=r+r,m=i*o,d=i*c,x=i*l,_=h*c,M=h*l,A=r*l,P=a*o,w=a*c,f=a*l,p=e.x,I=e.y,z=e.z;return n[0]=(1-(_+A))*p,n[1]=(d+f)*p,n[2]=(x-w)*p,n[3]=0,n[4]=(d-f)*I,n[5]=(1-(m+A))*I,n[6]=(M+P)*I,n[7]=0,n[8]=(x+w)*z,n[9]=(M-P)*z,n[10]=(1-(m+_))*z,n[11]=0,n[12]=t.x,n[13]=t.y,n[14]=t.z,n[15]=1,this}decompose(t,s,e){const n=this.elements;let i=Q.set(n[0],n[1],n[2]).length();const h=Q.set(n[4],n[5],n[6]).length(),r=Q.set(n[8],n[9],n[10]).length();this.determinant()<0&&(i=-i),t.x=n[12],t.y=n[13],t.z=n[14],V.copy(this);const o=1/i,c=1/h,l=1/r;return V.elements[0]*=o,V.elements[1]*=o,V.elements[2]*=o,V.elements[4]*=c,V.elements[5]*=c,V.elements[6]*=c,V.elements[8]*=l,V.elements[9]*=l,V.elements[10]*=l,s.setFromRotationMatrix(V),e.x=i,e.y=h,e.z=r,this}equals(t){const s=this.elements,e=t.elements;for(let n=0;n<16;n++)if(s[n]!==e[n])return!1;return!0}fromArray(t,s=0){for(let e=0;e<16;e++)this.elements[e]=t[e+s];return this}toArray(t=[],s=0){const e=this.elements;return t[s]=e[0],t[s+1]=e[1],t[s+2]=e[2],t[s+3]=e[3],t[s+4]=e[4],t[s+5]=e[5],t[s+6]=e[6],t[s+7]=e[7],t[s+8]=e[8],t[s+9]=e[9],t[s+10]=e[10],t[s+11]=e[11],t[s+12]=e[12],t[s+13]=e[13],t[s+14]=e[14],t[s+15]=e[15],t}};at.IDENTITY=Object.freeze(new at);let K=at;const Q=new g,V=new K,fs=new g(0,0,0),ws=new g(1,1,1),F=new g,ut=new g,T=new g;class G{constructor(t=void 0,s=void 0){this.min=t==null?new g(1/0,1/0,1/0):new g(t.x,t.y,t.z),this.max=s==null?new g(-1/0,-1/0,-1/0):new g(s.x,s.y,s.z)}set(t,s){return this.min.copy(t),this.max.copy(s),this}setFromArray(t){this.makeEmpty();for(let s=0,e=t.length;s<e;s+=3)this.expandByPoint(Rt.fromArray(t,s));return this}setFromPoints(t){this.makeEmpty();for(let s=0,e=t.length;s<e;s++)this.expandByPoint(t[s]);return this}setFromCenterAndSize(t,s){const e=Rt.copy(s).multiplyScalar(.5);return this.min.copy(t).sub(e),this.max.copy(t).add(e),this}clone(){return new G().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 g(0,0,0):new g(0,0,0).addVectors(this.min,this.max).multiplyScalar(.5)}get size(){return this.isEmpty()?new g(0,0,0):new g(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,s){return s.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 s,e;return t.normal.x>0?(s=t.normal.x*this.min.x,e=t.normal.x*this.max.x):(s=t.normal.x*this.max.x,e=t.normal.x*this.min.x),t.normal.y>0?(s+=t.normal.y*this.min.y,e+=t.normal.y*this.max.y):(s+=t.normal.y*this.max.y,e+=t.normal.y*this.min.y),t.normal.z>0?(s+=t.normal.z*this.min.z,e+=t.normal.z*this.max.z):(s+=t.normal.z*this.max.z,e+=t.normal.z*this.min.z),s<=-t.constant&&e>=-t.constant}clampPoint(t,s){return s.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,Rt).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:(j[0].set(this.min.x,this.min.y,this.min.z).applyMatrix3d(t),j[1].set(this.min.x,this.min.y,this.max.z).applyMatrix3d(t),j[2].set(this.min.x,this.max.y,this.min.z).applyMatrix3d(t),j[3].set(this.min.x,this.max.y,this.max.z).applyMatrix3d(t),j[4].set(this.max.x,this.min.y,this.min.z).applyMatrix3d(t),j[5].set(this.max.x,this.min.y,this.max.z).applyMatrix3d(t),j[6].set(this.max.x,this.max.y,this.min.z).applyMatrix3d(t),j[7].set(this.max.x,this.max.y,this.max.z).applyMatrix3d(t),this.setFromPoints(j),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 j=[new g,new g,new g,new g,new g,new g,new g,new g],Rt=new g,ys=new b;class U{constructor(t=void 0,s=void 0){this.min=t==null?new b(1/0,1/0):new b(t.x,t.y),this.max=s==null?new b(-1/0,-1/0):new b(s.x,s.y)}set(t,s){return this.min.copy(t),this.max.copy(s),this}setFromPoints(t){this.makeEmpty();for(let s=0,e=t.length;s<e;s++)this.expandByPoint(t[s]);return this}setFromCenterAndSize(t,s){const e=ys.copy(s).multiplyScalar(.5);return this.min.copy(t).sub(e),this.max.copy(t).add(e),this}clone(){return new U().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,s){return s.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,s){return s.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,ys).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 gs=new g,Ps=new g,bs=new O;class et{constructor(t=new g(1,0,0),s=0){this.normal=t,this.constant=s}set(t,s){return this.normal.copy(t),this.constant=s,this}setComponents(t,s,e,n){return this.normal.set(t,s,e),this.constant=n,this}setFromNormalAndCoplanarPoint(t,s){return this.normal.copy(t),this.constant=-s.dot(this.normal),this}setFromCoplanarPoints(t,s,e){const n=gs.subVectors(e,s).cross(Ps.subVectors(t,s)).normalize();return this.setFromNormalAndCoplanarPoint(n,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,s){return s.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,s){const e=s||bs.getNormalMatrix(t),n=this.coplanarPoint(gs).applyMatrix3d(t),i=this.normal.applyMatrix3(e).normalize();return this.constant=-n.dot(i),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return new et().copy(this)}}class S extends b{static pointArrayToNumberArray(t){const s=new Array(t.length*2);return t.forEach((e,n)=>{e.toArray(s,n*2)}),s}}class E extends g{static pointArrayToNumberArray(t,s=!0){const e=s?3:2,n=new Array(t.length*e);return t.forEach((i,h)=>{i.toArray(n,h*e)}),n}}const _s=new K,As=new st,ct=class ct{constructor(t=0,s=0,e=0,n=ct.DEFAULT_ORDER){this._x=t,this._y=s,this._z=e,this._order=n}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,s,e,n=this._order){return this._x=t,this._y=s,this._z=e,this._order=n,this._onChangeCallback(),this}clone(){return new ct(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,s=this._order,e=!0){const n=t.elements,i=n[0],h=n[4],r=n[8],a=n[1],o=n[5],c=n[9],l=n[2],m=n[6],d=n[10];switch(s){case"XYZ":this._y=Math.asin(q(r,-1,1)),Math.abs(r)<.9999999?(this._x=Math.atan2(-c,d),this._z=Math.atan2(-h,i)):(this._x=Math.atan2(m,o),this._z=0);break;case"YXZ":this._x=Math.asin(-q(c,-1,1)),Math.abs(c)<.9999999?(this._y=Math.atan2(r,d),this._z=Math.atan2(a,o)):(this._y=Math.atan2(-l,i),this._z=0);break;case"ZXY":this._x=Math.asin(q(m,-1,1)),Math.abs(m)<.9999999?(this._y=Math.atan2(-l,d),this._z=Math.atan2(-h,o)):(this._y=0,this._z=Math.atan2(a,i));break;case"ZYX":this._y=Math.asin(-q(l,-1,1)),Math.abs(l)<.9999999?(this._x=Math.atan2(m,d),this._z=Math.atan2(a,i)):(this._x=0,this._z=Math.atan2(-h,o));break;case"YZX":this._z=Math.asin(q(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-c,o),this._y=Math.atan2(-l,i)):(this._x=0,this._y=Math.atan2(r,d));break;case"XZY":this._z=Math.asin(-q(h,-1,1)),Math.abs(h)<.9999999?(this._x=Math.atan2(m,o),this._y=Math.atan2(r,i)):(this._x=Math.atan2(-c,d),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+s)}return this._order=s,e===!0&&this._onChangeCallback(),this}setFromQuaternion(t,s,e=!0){return _s.makeRotationFromQuaternion(t),this.setFromRotationMatrix(_s,s,e)}setFromVector3(t,s=this._order){return this.set(t.x,t.y,t.z,s)}reorder(t){return As.setFromEuler(this),this.setFromQuaternion(As,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=[],s=0){return t[s]=this._x,t[s+1]=this._y,t[s+2]=this._z,t[s+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}};ct.DEFAULT_ORDER="XYZ";let Tt=ct;class Ms{constructor(){this._boundingBoxNeedsUpdate=!1}get boundingBoxNeedUpdate(){return this._boundingBoxNeedsUpdate}}class Ut extends Ms{translate(t){return this.transform(new O().makeTranslation(t.x,t.y))}get box(){return(this._box==null||this._boundingBoxNeedsUpdate)&&(this._box=this.calculateBoundingBox(),this._boundingBoxNeedsUpdate=!1),this._box}}class Ss extends Ut{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 U}transform(t){return this._boundingBoxNeedsUpdate=!0,this}getPoints(t){const s=[];for(let e=0;e<this.loops.length;++e){const i=this.loops[e].getPoints(t);s.push(i)}return s}buildHierarchy(){var r;const t=this.getPoints(100),s=this.calculateBoundaryBoxes(t),e=this.sortBoundaryBoxesByAreas(s),n=new Map,i=e.length;for(let a=0;a<i;a++)n.set(e[a],{index:e[a],children:[]});const h={index:-1,children:[]};for(let a=0;a<i;a++){const o=e[a],c=t[o],l=s[o];let m=a+1;for(;m<i;m++){const d=e[m],x=t[d];if(s[d].containsBox(l)&&as.isPointInPolygon(c[C.randInt(0,c.length-1)],x)){(r=n.get(d))==null||r.children.push(n.get(o));break}}m===i&&h.children.push(n.get(o))}return h}calculateBoundaryBoxes(t){const s=[];return t.forEach(e=>{s.push(new U().setFromPoints(e))}),s}sortBoundaryBoxesByAreas(t){const s=[];t.forEach((n,i)=>{const h=n.size,r=h.width*h.height;s.push({area:r,index:i})}),s.sort((n,i)=>n.area-i.area);const e=[];return s.forEach(n=>{e.push(n.index)}),e}}class W extends Ut{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 s=this.getUtoTmapping(t);return this.getPoint(s)}getPoints(t=5){const s=[];for(let e=0;e<=t;e++)s.push(this.getPoint(e/t));return s}getSpacedPoints(t=5){const s=[];for(let e=0;e<=t;e++)s.push(this.getPointAt(e/t));return s}getLength(){const t=this.getLengths();return t[t.length-1]}getLengths(t=this.arcLengthDivisions){const s=[];let e,n=this.getPoint(0),i=0;s.push(0);for(let h=1;h<=t;h++)e=this.getPoint(h/t),i+=e.distanceTo(n),s.push(i),n=e;return s}getUtoTmapping(t,s){const e=this.getLengths();let n=0;const i=e.length;let h;s?h=s:h=t*e[i-1];let r=0,a=i-1,o;for(;r<=a;)if(n=Math.floor(r+(a-r)/2),o=e[n]-h,o<0)r=n+1;else if(o>0)a=n-1;else{a=n;break}if(n=a,e[n]===h)return n/(i-1);const c=e[n],m=e[n+1]-c,d=(h-c)/m;return(n+d)/(i-1)}getTangent(t){let e=t-1e-4,n=t+1e-4;e<0&&(e=0),n>1&&(n=1);const i=this.getPoint(e),h=this.getPoint(n),r=new S;return r.copy(h).sub(i).normalize(),r}getTangentAt(t){const s=this.getUtoTmapping(t);return this.getTangent(s)}}class nt extends W{constructor(t,s,e,n,i){super();const h=+(t!==void 0)+ +(s!==void 0)+ +(e!==void 0)+ +(n!==void 0)+ +(i!==void 0);if(h==3)typeof t=="object"&&typeof s=="object"&&typeof e=="object"?this.createByThreePoints(t,s,e):this.createByStartEndPointsAndBulge(t,s,e);else if(h==5){const r=t;this.center=new S(r.x,r.y),this.radius=s,this.startAngle=e,this.endAngle=n,this.clockwise=i}else throw L.AcCmErrors.ILLEGAL_PARAMETERS}createByThreePoints(t,s,e){const n=(z,N)=>({x:(z.x+N.x)/2,y:(z.y+N.y)/2}),i=(z,N)=>(N.y-z.y)/(N.x-z.x),h=z=>-1/z,r=n(t,s),a=n(s,e),o=i(t,s),c=i(s,e),l=h(o),m=h(c),d=(z,N,H,$)=>{const Z=($-N)/(z-H),J=z*Z+N;return{x:Z,y:J}},x=r.y-l*r.x,_=a.y-m*a.x,M=d(l,x,m,_),A=Math.sqrt(Math.pow(t.x-M.x,2)+Math.pow(t.y-M.y,2)),P=(z,N)=>Math.atan2(z.y-N.y,z.x-N.x),w=P(t,M),f=P(s,M),p=P(e,M),I=p>w&&p<f||w>p&&w<f||f>p&&f<w;this.center=M,this.radius=A,this.startAngle=w,this.endAngle=p,this.clockwise=!I}createByStartEndPointsAndBulge(t,s,e){let n,i,h;e<0?(n=Math.atan(-e)*4,i=new b(t),h=new b(s)):(n=Math.atan(e)*4,i=new b(s),h=new b(t));const r=new b().subVectors(h,i),a=r.length(),o=new b().addVectors(i,r.multiplyScalar(.5)),c=Math.abs(a/2/Math.tan(n/2)),l=r.normalize();let m;if(n<Math.PI){const d=new b(l.x*Math.cos(Math.PI/2)-l.y*Math.sin(Math.PI/2),l.y*Math.cos(Math.PI/2)+l.x*Math.sin(Math.PI/2));m=o.add(d.multiplyScalar(-c))}else{const d=new b(l.x*Math.cos(Math.PI/2)-l.y*Math.sin(Math.PI/2),l.y*Math.cos(Math.PI/2)+l.x*Math.sin(Math.PI/2));m=o.add(d.multiplyScalar(c))}e<0?(this.startAngle=Math.atan2(i.y-m.y,i.x-m.x),this.endAngle=Math.atan2(h.y-m.y,h.x-m.x)):(this.startAngle=Math.atan2(h.y-m.y,h.x-m.x),this.endAngle=Math.atan2(i.y-m.y,i.x-m.x)),this.clockwise=e<0,this.center=m,this.radius=h.sub(m).length()}get center(){return this._center}set center(t){this._center=new S(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._startAngle}set startAngle(t){this._startAngle=C.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._endAngle}set endAngle(t){this._endAngle=this.startAngle==0&&t==B?t:C.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get deltaAngle(){return this.clockwise?C.normalizeAngle(this.startAngle-this.endAngle):C.normalizeAngle(this.endAngle-this.startAngle)}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=C.normalizeAngle((this.startAngle+this.endAngle)/2);return this.getPointAtAngle(t)}get closed(){return Math.abs(this.endAngle-this.startAngle)/Math.PI%2==0}calculateBoundingBox(){const t=[this.startPoint,this.endPoint],s=[0,Math.PI/2,Math.PI,3*Math.PI/2];for(const i of s)C.isBetweenAngle(i,this.startAngle,this.endAngle,this.clockwise)&&t.push(this.getPointAtAngle(i));const e=t.map(i=>i.x),n=t.map(i=>i.y);return new U(new S(Math.min(...e),Math.min(...n)),new S(Math.max(...e),Math.max(...n)))}get length(){return Math.abs(this.deltaAngle*this.radius)}transform(t){return this._boundingBoxNeedsUpdate=!0,this}clone(){return new nt(this.center.clone(),this.radius,this.startAngle,this.endAngle,this.clockwise)}getPointAtAngle(t){const s=this.center.x+this.radius*Math.cos(t),e=this.center.y+this.radius*Math.sin(t);return new S(s,e)}getPoints(t=100){const s=[];let e=this.deltaAngle,n=this.startAngle;if(this.closed&&(e=B,n=0),this.clockwise)for(let i=0;i<=t;i++){const h=n-e*(i/t),r=this.getPointAtAngle(h);s.push(new S(r.x,r.y))}else for(let i=0;i<=t;i++){const h=n+e*(i/t),r=this.getPointAtAngle(h);s.push(new S(r.x,r.y))}return s}}class Cs extends Ms{translate(t){return this.transform(new K().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 dt extends Cs{}class it extends dt{constructor(t,s){super(),this._start=new E(t),this._end=new E(s)}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 g().subVectors(this.endPoint,this.startPoint).normalize()}get midPoint(){return new E((this._start.x+this._end.x)/2,(this._start.y+this._end.y)/2,(this._start.z+this._end.z)/2)}get length(){return this.startPoint.distanceTo(this.endPoint)}isPointOnLine(t){return