@xtctwins/tctwins-core
Version:
Web Programming Toolkit for 3D/2D BIM and CAD
1 lines • 1.98 MB
JavaScript
function e(e,t){return t.forEach((function(t){t&&"string"!=typeof t&&!Array.isArray(t)&&Object.keys(t).forEach((function(i){if("default"!==i&&!(i in e)){var s=Object.getOwnPropertyDescriptor(t,i);Object.defineProperty(e,i,s.get?s:{enumerable:!0,get:function(){return t[i]}})}}))})),Object.freeze(e)}class t{constructor(e,t={}){this.viewer=e,this.scene=this.viewer.scene,this._lensCursorDiv=document.createElement("div"),this._lensCursorDiv.setAttribute("class","pointerLensCursor"),document.body.append(this._lensCursorDiv),this._lensCursorDiv.style.background="pink",this._lensCursorDiv.style.border="2px solid red",this._lensCursorDiv.style.borderRadius="20px",this._lensCursorDiv.style.width="10px",this._lensCursorDiv.style.height="10px",this._lensCursorDiv.style.margin="-200px -200px",this._lensCursorDiv.style.zIndex="100000",this._lensCursorDiv.style.position="absolute",this._lensCursorDiv.style.pointerEvents="none",this._lensContainer=document.createElement("div"),this._lensContainer.setAttribute("class","pointerLens"),this._lensContainer.style.border="1px solid black",this._lensContainer.style.background="white",this._lensContainer.style.borderRadius="50%",this._lensContainer.style.width="300px",this._lensContainer.style.height="300px",this._lensContainer.style.marginTop="85px",this._lensContainer.style.marginLeft="25px",this._lensContainer.style.zIndex="15000",this._lensContainer.style.position="absolute",this._lensContainer.style.pointerEvents="none",this._lensContainer.style.visibility="hidden",this._lensCanvas=document.createElement("canvas"),this._lensCanvas.style.borderRadius="50%",this._lensCanvas.style.width="300px",this._lensCanvas.style.height="300px",this._lensCanvas.style.zIndex="15000",this._lensCanvas.style.pointerEvents="none",document.body.appendChild(this._lensContainer),this._lensContainer.appendChild(this._lensCanvas),this._lensCanvasContext=this._lensCanvas.getContext("2d"),this._canvasElement=this.viewer.scene.canvas.canvas,this._canvasPos=null,this._snappedCanvasPos=null,this._lensPosToggle=!0,this._zoomLevel=void 0!==t.zoomFactor?t.zoomFactor:2,this._active=!1!==t.active,this._visible=!1,this._snapped=!1,this._onViewerRendering=this.viewer.scene.on("rendering",(()=>{this._active&&this._visible&&this.update()}))}update(){if(!this._active||!this._visible)return;if(!this._canvasPos)return;const e=this._lensContainer.getBoundingClientRect(),t=this._canvasElement.getBoundingClientRect(),i=this._canvasPos[0]<e.right&&this._canvasPos[0]>e.left&&this._canvasPos[1]<e.bottom&&this._canvasPos[1]>e.top;this._lensContainer.style.marginLeft="25px",i&&(this._lensPosToggle?this._lensContainer.style.marginTop=t.bottom-t.top-this._lensCanvas.height-85+"px":this._lensContainer.style.marginTop="85px",this._lensPosToggle=!this._lensPosToggle),this._lensCanvasContext.clearRect(0,0,this._lensCanvas.width,this._lensCanvas.height);const s=Math.max(this._lensCanvas.width,this._lensCanvas.height)/this._zoomLevel;this._lensCanvasContext.drawImage(this._canvasElement,this._canvasPos[0]-s/2,this._canvasPos[1]-s/2,s,s,0,0,this._lensCanvas.width,this._lensCanvas.height);const r=[(e.left+e.right)/2,(e.top+e.bottom)/2];if(this._snappedCanvasPos){const e=this._snappedCanvasPos[0]-this._canvasPos[0],t=this._snappedCanvasPos[1]-this._canvasPos[1];this._lensCursorDiv.style.marginLeft=r[0]+e*this._zoomLevel-10+"px",this._lensCursorDiv.style.marginTop=r[1]+t*this._zoomLevel-10+"px"}else this._lensCursorDiv.style.marginLeft=r[0]-10+"px",this._lensCursorDiv.style.marginTop=r[1]-10+"px"}set zoomFactor(e){this._zoomLevel=e,this.update()}get zoomFactor(){return this._zoomLevel}set canvasPos(e){this._canvasPos=e,this.update()}get canvasPos(){return this._canvasPos}set snappedCanvasPos(e){this._snappedCanvasPos=e,this.update()}get snappedCanvasPos(){return this._snappedCanvasPos}set snapped(e){this._snapped=e,e?(this._lensCursorDiv.style.background="greenyellow",this._lensCursorDiv.style.border="2px solid green"):(this._lensCursorDiv.style.background="pink",this._lensCursorDiv.style.border="2px solid red")}get snapped(){return this._snapped}set active(e){this._active=e,this._lensContainer.style.visibility=e&&this._visible?"visible":"hidden",e&&this._visible||(this._lensCursorDiv.style.marginLeft="-100px",this._lensCursorDiv.style.marginTop="-100px"),this.update()}get active(){return this._active}set visible(e){this._visible=e,this._lensContainer.style.visibility=e&&this._active?"visible":"hidden",e&&this._active||(this._lensCursorDiv.style.marginLeft="-100px",this._lensCursorDiv.style.marginTop="-100px"),this.update()}get visible(){return this._visible}destroy(){this._destroyed||(this.viewer.scene.off(this._onViewerRendering),this._lensContainer.removeChild(this._lensCanvas),document.body.removeChild(this._lensContainer),this._destroyed=!0)}}let i=!0,s=i?Float64Array:Float32Array;const r=new s(3),o=new s(16),n=new s(16),a=new s(4),l={setDoublePrecisionEnabled(e){i=e,s=i?Float64Array:Float32Array},getDoublePrecisionEnabled:()=>i,MIN_DOUBLE:-Number.MAX_SAFE_INTEGER,MAX_DOUBLE:Number.MAX_SAFE_INTEGER,MAX_INT:1e7,DEGTORAD:.0174532925,RADTODEG:57.295779513,unglobalizeObjectId(e,t){const i=t.indexOf("#");return i===e.length&&t.startsWith(e)?t.substring(i+1):t},globalizeObjectId:(e,t)=>e+"#"+t,safeInv(e){const t=1/e;return isNaN(t)||!isFinite(t)?1:t},vec2:e=>new s(e||2),vec3:e=>new s(e||3),vec4:e=>new s(e||4),mat3:e=>new s(e||9),mat3ToMat4:(e,t=new s(16))=>(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=0,t[4]=e[3],t[5]=e[4],t[6]=e[5],t[7]=0,t[8]=e[6],t[9]=e[7],t[10]=e[8],t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t),mat4:e=>new s(e||16),mat4ToMat3(e,t){},doublesToFloats(e,t,i){const r=new s(2);for(let s=0,o=e.length;s<o;s++)l.splitDouble(e[s],r),t[s]=r[0],i[s]=r[1]},splitDouble(e,t){const i=s.from([e])[0],r=e-i;t[0]=i,t[1]=r},createUUID:(()=>{const e=[];for(let t=0;t<256;t++)e[t]=(t<16?"0":"")+t.toString(16);return()=>{const t=4294967295*Math.random()|0,i=4294967295*Math.random()|0,s=4294967295*Math.random()|0,r=4294967295*Math.random()|0;return`${e[255&t]+e[t>>8&255]+e[t>>16&255]+e[t>>24&255]}-${e[255&i]}${e[i>>8&255]}-${e[i>>16&15|64]}${e[i>>24&255]}-${e[63&s|128]}${e[s>>8&255]}-${e[s>>16&255]}${e[s>>24&255]}${e[255&r]}${e[r>>8&255]}${e[r>>16&255]}${e[r>>24&255]}`}})(),clamp:(e,t,i)=>Math.max(t,Math.min(i,e)),fmod(e,t){if(e<t)return console.error("math.fmod : Attempting to find modulus within negative range - would be infinite loop - ignoring"),e;for(;t<=e;)e-=t;return e},compareVec3:(e,t)=>e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2],negateVec3:(e,t)=>(t||(t=e),t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t),negateVec4:(e,t)=>(t||(t=e),t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t),addVec4:(e,t,i)=>(i||(i=e),i[0]=e[0]+t[0],i[1]=e[1]+t[1],i[2]=e[2]+t[2],i[3]=e[3]+t[3],i),addVec4Scalar:(e,t,i)=>(i||(i=e),i[0]=e[0]+t,i[1]=e[1]+t,i[2]=e[2]+t,i[3]=e[3]+t,i),addVec3:(e,t,i)=>(i||(i=e),i[0]=e[0]+t[0],i[1]=e[1]+t[1],i[2]=e[2]+t[2],i),addVec3Scalar:(e,t,i)=>(i||(i=e),i[0]=e[0]+t,i[1]=e[1]+t,i[2]=e[2]+t,i),subVec4:(e,t,i)=>(i||(i=e),i[0]=e[0]-t[0],i[1]=e[1]-t[1],i[2]=e[2]-t[2],i[3]=e[3]-t[3],i),subVec3:(e,t,i)=>(i||(i=e),i[0]=e[0]-t[0],i[1]=e[1]-t[1],i[2]=e[2]-t[2],i),subVec2:(e,t,i)=>(i||(i=e),i[0]=e[0]-t[0],i[1]=e[1]-t[1],i),geometricMeanVec2(...e){const t=new s(e[0]);for(let i=1;i<e.length;i++)t[0]+=e[i][0],t[1]+=e[i][1];return t[0]/=e.length,t[1]/=e.length,t},subVec4Scalar:(e,t,i)=>(i||(i=e),i[0]=e[0]-t,i[1]=e[1]-t,i[2]=e[2]-t,i[3]=e[3]-t,i),subScalarVec4:(e,t,i)=>(i||(i=e),i[0]=t-e[0],i[1]=t-e[1],i[2]=t-e[2],i[3]=t-e[3],i),mulVec3:(e,t,i)=>(i||(i=e),i[0]=e[0]*t[0],i[1]=e[1]*t[1],i[2]=e[2]*t[2],i),mulVec4:(e,t,i)=>(i||(i=e),i[0]=e[0]*t[0],i[1]=e[1]*t[1],i[2]=e[2]*t[2],i[3]=e[3]*t[3],i),mulVec4Scalar:(e,t,i)=>(i||(i=e),i[0]=e[0]*t,i[1]=e[1]*t,i[2]=e[2]*t,i[3]=e[3]*t,i),mulVec3Scalar:(e,t,i)=>(i||(i=e),i[0]=e[0]*t,i[1]=e[1]*t,i[2]=e[2]*t,i),mulVec2Scalar:(e,t,i)=>(i||(i=e),i[0]=e[0]*t,i[1]=e[1]*t,i),divVec3:(e,t,i)=>(i||(i=e),i[0]=e[0]/t[0],i[1]=e[1]/t[1],i[2]=e[2]/t[2],i),divVec4:(e,t,i)=>(i||(i=e),i[0]=e[0]/t[0],i[1]=e[1]/t[1],i[2]=e[2]/t[2],i[3]=e[3]/t[3],i),divScalarVec3:(e,t,i)=>(i||(i=t),i[0]=e/t[0],i[1]=e/t[1],i[2]=e/t[2],i),divVec3Scalar:(e,t,i)=>(i||(i=e),i[0]=e[0]/t,i[1]=e[1]/t,i[2]=e[2]/t,i),divVec4Scalar:(e,t,i)=>(i||(i=e),i[0]=e[0]/t,i[1]=e[1]/t,i[2]=e[2]/t,i[3]=e[3]/t,i),divScalarVec4:(e,t,i)=>(i||(i=t),i[0]=e/t[0],i[1]=e/t[1],i[2]=e/t[2],i[3]=e/t[3],i),dotVec4:(e,t)=>e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3],cross3Vec4(e,t){const i=e[0],s=e[1],r=e[2],o=t[0],n=t[1],a=t[2];return[s*a-r*n,r*o-i*a,i*n-s*o,0]},cross3Vec3(e,t,i){i||(i=e);const s=e[0],r=e[1],o=e[2],n=t[0],a=t[1],l=t[2];return i[0]=r*l-o*a,i[1]=o*n-s*l,i[2]=s*a-r*n,i},sqLenVec4:e=>l.dotVec4(e,e),lenVec4:e=>Math.sqrt(l.sqLenVec4(e)),dotVec3:(e,t)=>e[0]*t[0]+e[1]*t[1]+e[2]*t[2],dotVec2:(e,t)=>e[0]*t[0]+e[1]*t[1],sqLenVec3:e=>l.dotVec3(e,e),sqLenVec2:e=>l.dotVec2(e,e),lenVec3:e=>Math.sqrt(l.sqLenVec3(e)),distVec3:(()=>{const e=new s(3);return(t,i)=>l.lenVec3(l.subVec3(t,i,e))})(),lenVec2:e=>Math.sqrt(l.sqLenVec2(e)),distVec2:(()=>{const e=new s(2);return(t,i)=>l.lenVec2(l.subVec2(t,i,e))})(),rcpVec3:(e,t)=>l.divScalarVec3(1,e,t),normalizeVec4(e,t){const i=1/l.lenVec4(e);return l.mulVec4Scalar(e,i,t)},normalizeVec3(e,t){const i=1/l.lenVec3(e);return l.mulVec3Scalar(e,i,t)},normalizeVec2(e,t){const i=1/l.lenVec2(e);return l.mulVec2Scalar(e,i,t)},angleVec3(e,t){let i=l.dotVec3(e,t)/Math.sqrt(l.sqLenVec3(e)*l.sqLenVec3(t));return i=i<-1?-1:i>1?1:i,Math.acos(i)},vec3FromMat4Scale:(()=>{const e=new s(3);return(t,i)=>(e[0]=t[0],e[1]=t[1],e[2]=t[2],i[0]=l.lenVec3(e),e[0]=t[4],e[1]=t[5],e[2]=t[6],i[1]=l.lenVec3(e),e[0]=t[8],e[1]=t[9],e[2]=t[10],i[2]=l.lenVec3(e),i)})(),vecToArray:(()=>{function e(e){return Math.round(1e5*e)/1e5}return t=>{for(let i=0,s=(t=Array.prototype.slice.call(t)).length;i<s;i++)t[i]=e(t[i]);return t}})(),xyzArrayToObject:e=>({x:e[0],y:e[1],z:e[2]}),xyzObjectToArray:(e,t)=>((t=t||l.vec3())[0]=e.x,t[1]=e.y,t[2]=e.z,t),dupMat4:e=>e.slice(0,16),mat4To3:e=>[e[0],e[1],e[2],e[4],e[5],e[6],e[8],e[9],e[10]],m4s:e=>[e,e,e,e,e,e,e,e,e,e,e,e,e,e,e,e],setMat4ToZeroes:()=>l.m4s(0),setMat4ToOnes:()=>l.m4s(1),diagonalMat4v:e=>new s([e[0],0,0,0,0,e[1],0,0,0,0,e[2],0,0,0,0,e[3]]),diagonalMat4c:(e,t,i,s)=>l.diagonalMat4v([e,t,i,s]),diagonalMat4s:e=>l.diagonalMat4c(e,e,e,e),identityMat4:(e=new s(16))=>(e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e),identityMat3:(e=new s(9))=>(e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=1,e[5]=0,e[6]=0,e[7]=0,e[8]=1,e),isIdentityMat4:e=>1===e[0]&&0===e[1]&&0===e[2]&&0===e[3]&&0===e[4]&&1===e[5]&&0===e[6]&&0===e[7]&&0===e[8]&&0===e[9]&&1===e[10]&&0===e[11]&&0===e[12]&&0===e[13]&&0===e[14]&&1===e[15],negateMat4:(e,t)=>(t||(t=e),t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t[4]=-e[4],t[5]=-e[5],t[6]=-e[6],t[7]=-e[7],t[8]=-e[8],t[9]=-e[9],t[10]=-e[10],t[11]=-e[11],t[12]=-e[12],t[13]=-e[13],t[14]=-e[14],t[15]=-e[15],t),addMat4:(e,t,i)=>(i||(i=e),i[0]=e[0]+t[0],i[1]=e[1]+t[1],i[2]=e[2]+t[2],i[3]=e[3]+t[3],i[4]=e[4]+t[4],i[5]=e[5]+t[5],i[6]=e[6]+t[6],i[7]=e[7]+t[7],i[8]=e[8]+t[8],i[9]=e[9]+t[9],i[10]=e[10]+t[10],i[11]=e[11]+t[11],i[12]=e[12]+t[12],i[13]=e[13]+t[13],i[14]=e[14]+t[14],i[15]=e[15]+t[15],i),addMat4Scalar:(e,t,i)=>(i||(i=e),i[0]=e[0]+t,i[1]=e[1]+t,i[2]=e[2]+t,i[3]=e[3]+t,i[4]=e[4]+t,i[5]=e[5]+t,i[6]=e[6]+t,i[7]=e[7]+t,i[8]=e[8]+t,i[9]=e[9]+t,i[10]=e[10]+t,i[11]=e[11]+t,i[12]=e[12]+t,i[13]=e[13]+t,i[14]=e[14]+t,i[15]=e[15]+t,i),addScalarMat4:(e,t,i)=>l.addMat4Scalar(t,e,i),subMat4:(e,t,i)=>(i||(i=e),i[0]=e[0]-t[0],i[1]=e[1]-t[1],i[2]=e[2]-t[2],i[3]=e[3]-t[3],i[4]=e[4]-t[4],i[5]=e[5]-t[5],i[6]=e[6]-t[6],i[7]=e[7]-t[7],i[8]=e[8]-t[8],i[9]=e[9]-t[9],i[10]=e[10]-t[10],i[11]=e[11]-t[11],i[12]=e[12]-t[12],i[13]=e[13]-t[13],i[14]=e[14]-t[14],i[15]=e[15]-t[15],i),subMat4Scalar:(e,t,i)=>(i||(i=e),i[0]=e[0]-t,i[1]=e[1]-t,i[2]=e[2]-t,i[3]=e[3]-t,i[4]=e[4]-t,i[5]=e[5]-t,i[6]=e[6]-t,i[7]=e[7]-t,i[8]=e[8]-t,i[9]=e[9]-t,i[10]=e[10]-t,i[11]=e[11]-t,i[12]=e[12]-t,i[13]=e[13]-t,i[14]=e[14]-t,i[15]=e[15]-t,i),subScalarMat4:(e,t,i)=>(i||(i=t),i[0]=e-t[0],i[1]=e-t[1],i[2]=e-t[2],i[3]=e-t[3],i[4]=e-t[4],i[5]=e-t[5],i[6]=e-t[6],i[7]=e-t[7],i[8]=e-t[8],i[9]=e-t[9],i[10]=e-t[10],i[11]=e-t[11],i[12]=e-t[12],i[13]=e-t[13],i[14]=e-t[14],i[15]=e-t[15],i),mulMat4(e,t,i){i||(i=e);const s=e[0],r=e[1],o=e[2],n=e[3],a=e[4],l=e[5],A=e[6],h=e[7],c=e[8],u=e[9],d=e[10],p=e[11],f=e[12],g=e[13],m=e[14],_=e[15],v=t[0],b=t[1],y=t[2],B=t[3],w=t[4],x=t[5],P=t[6],C=t[7],M=t[8],F=t[9],E=t[10],D=t[11],I=t[12],S=t[13],T=t[14],R=t[15];return i[0]=v*s+b*a+y*c+B*f,i[1]=v*r+b*l+y*u+B*g,i[2]=v*o+b*A+y*d+B*m,i[3]=v*n+b*h+y*p+B*_,i[4]=w*s+x*a+P*c+C*f,i[5]=w*r+x*l+P*u+C*g,i[6]=w*o+x*A+P*d+C*m,i[7]=w*n+x*h+P*p+C*_,i[8]=M*s+F*a+E*c+D*f,i[9]=M*r+F*l+E*u+D*g,i[10]=M*o+F*A+E*d+D*m,i[11]=M*n+F*h+E*p+D*_,i[12]=I*s+S*a+T*c+R*f,i[13]=I*r+S*l+T*u+R*g,i[14]=I*o+S*A+T*d+R*m,i[15]=I*n+S*h+T*p+R*_,i},mulMat3(e,t,i){i||(i=new s(9));const r=e[0],o=e[3],n=e[6],a=e[1],l=e[4],A=e[7],h=e[2],c=e[5],u=e[8],d=t[0],p=t[3],f=t[6],g=t[1],m=t[4],_=t[7],v=t[2],b=t[5],y=t[8];return i[0]=r*d+o*g+n*v,i[3]=r*p+o*m+n*b,i[6]=r*f+o*_+n*y,i[1]=a*d+l*g+A*v,i[4]=a*p+l*m+A*b,i[7]=a*f+l*_+A*y,i[2]=h*d+c*g+u*v,i[5]=h*p+c*m+u*b,i[8]=h*f+c*_+u*y,i},mulMat4Scalar:(e,t,i)=>(i||(i=e),i[0]=e[0]*t,i[1]=e[1]*t,i[2]=e[2]*t,i[3]=e[3]*t,i[4]=e[4]*t,i[5]=e[5]*t,i[6]=e[6]*t,i[7]=e[7]*t,i[8]=e[8]*t,i[9]=e[9]*t,i[10]=e[10]*t,i[11]=e[11]*t,i[12]=e[12]*t,i[13]=e[13]*t,i[14]=e[14]*t,i[15]=e[15]*t,i),mulMat4v4(e,t,i=l.vec4()){const s=t[0],r=t[1],o=t[2],n=t[3];return i[0]=e[0]*s+e[4]*r+e[8]*o+e[12]*n,i[1]=e[1]*s+e[5]*r+e[9]*o+e[13]*n,i[2]=e[2]*s+e[6]*r+e[10]*o+e[14]*n,i[3]=e[3]*s+e[7]*r+e[11]*o+e[15]*n,i},transposeMat4(e,t){const i=e[4],s=e[14],r=e[8],o=e[13],n=e[12],a=e[9];if(!t||e===t){const t=e[1],l=e[2],A=e[3],h=e[6],c=e[7],u=e[11];return e[1]=i,e[2]=r,e[3]=n,e[4]=t,e[6]=a,e[7]=o,e[8]=l,e[9]=h,e[11]=s,e[12]=A,e[13]=c,e[14]=u,e}return t[0]=e[0],t[1]=i,t[2]=r,t[3]=n,t[4]=e[1],t[5]=e[5],t[6]=a,t[7]=o,t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=s,t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15],t},transposeMat3(e,t){if(t===e){const i=e[1],s=e[2],r=e[5];t[1]=e[3],t[2]=e[6],t[3]=i,t[5]=e[7],t[6]=s,t[7]=r}else t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8];return t},determinantMat4(e){const t=e[0],i=e[1],s=e[2],r=e[3],o=e[4],n=e[5],a=e[6],l=e[7],A=e[8],h=e[9],c=e[10],u=e[11],d=e[12],p=e[13],f=e[14],g=e[15];return d*h*a*r-A*p*a*r-d*n*c*r+o*p*c*r+A*n*f*r-o*h*f*r-d*h*s*l+A*p*s*l+d*i*c*l-t*p*c*l-A*i*f*l+t*h*f*l+d*n*s*u-o*p*s*u-d*i*a*u+t*p*a*u+o*i*f*u-t*n*f*u-A*n*s*g+o*h*s*g+A*i*a*g-t*h*a*g-o*i*c*g+t*n*c*g},inverseMat4(e,t){t||(t=e);const i=e[0],s=e[1],r=e[2],o=e[3],n=e[4],a=e[5],l=e[6],A=e[7],h=e[8],c=e[9],u=e[10],d=e[11],p=e[12],f=e[13],g=e[14],m=e[15],_=i*a-s*n,v=i*l-r*n,b=i*A-o*n,y=s*l-r*a,B=s*A-o*a,w=r*A-o*l,x=h*f-c*p,P=h*g-u*p,C=h*m-d*p,M=c*g-u*f,F=c*m-d*f,E=u*m-d*g,D=1/(_*E-v*F+b*M+y*C-B*P+w*x);return t[0]=(a*E-l*F+A*M)*D,t[1]=(-s*E+r*F-o*M)*D,t[2]=(f*w-g*B+m*y)*D,t[3]=(-c*w+u*B-d*y)*D,t[4]=(-n*E+l*C-A*P)*D,t[5]=(i*E-r*C+o*P)*D,t[6]=(-p*w+g*b-m*v)*D,t[7]=(h*w-u*b+d*v)*D,t[8]=(n*F-a*C+A*x)*D,t[9]=(-i*F+s*C-o*x)*D,t[10]=(p*B-f*b+m*_)*D,t[11]=(-h*B+c*b-d*_)*D,t[12]=(-n*M+a*P-l*x)*D,t[13]=(i*M-s*P+r*x)*D,t[14]=(-p*y+f*v-g*_)*D,t[15]=(h*y-c*v+u*_)*D,t},traceMat4:e=>e[0]+e[5]+e[10]+e[15],translationMat4v(e,t){const i=t||l.identityMat4();return i[12]=e[0],i[13]=e[1],i[14]=e[2],i},translationMat3v(e,t){const i=t||l.identityMat3();return i[6]=e[0],i[7]=e[1],i},translationMat4c:(()=>{const e=new s(3);return(t,i,s,r)=>(e[0]=t,e[1]=i,e[2]=s,l.translationMat4v(e,r))})(),translationMat4s:(e,t)=>l.translationMat4c(e,e,e,t),translateMat4v:(e,t)=>l.translateMat4c(e[0],e[1],e[2],t),translateMat4c(e,t,i,s){const r=s[3];s[0]+=r*e,s[1]+=r*t,s[2]+=r*i;const o=s[7];s[4]+=o*e,s[5]+=o*t,s[6]+=o*i;const n=s[11];s[8]+=n*e,s[9]+=n*t,s[10]+=n*i;const a=s[15];return s[12]+=a*e,s[13]+=a*t,s[14]+=a*i,s},setMat4Translation:(e,t,i)=>(i[0]=e[0],i[1]=e[1],i[2]=e[2],i[3]=e[3],i[4]=e[4],i[5]=e[5],i[6]=e[6],i[7]=e[7],i[8]=e[8],i[9]=e[9],i[10]=e[10],i[11]=e[11],i[12]=t[0],i[13]=t[1],i[14]=t[2],i[15]=e[15],i),rotationMat4v(e,t,i){const s=l.normalizeVec4([t[0],t[1],t[2],0],[]),r=Math.sin(e),o=Math.cos(e),n=1-o,a=s[0],A=s[1],h=s[2];let c,u,d,p,f,g;return c=a*A,u=A*h,d=h*a,p=a*r,f=A*r,g=h*r,(i=i||l.mat4())[0]=n*a*a+o,i[1]=n*c+g,i[2]=n*d-f,i[3]=0,i[4]=n*c-g,i[5]=n*A*A+o,i[6]=n*u+p,i[7]=0,i[8]=n*d+f,i[9]=n*u-p,i[10]=n*h*h+o,i[11]=0,i[12]=0,i[13]=0,i[14]=0,i[15]=1,i},rotationMat4c:(e,t,i,s,r)=>l.rotationMat4v(e,[t,i,s],r),scalingMat4v:(e,t=l.identityMat4())=>(t[0]=e[0],t[5]=e[1],t[10]=e[2],t),scalingMat3v:(e,t=l.identityMat3())=>(t[0]=e[0],t[4]=e[1],t),scalingMat4c:(()=>{const e=new s(3);return(t,i,s,r)=>(e[0]=t,e[1]=i,e[2]=s,l.scalingMat4v(e,r))})(),scaleMat4c:(e,t,i,s)=>(s[0]*=e,s[4]*=t,s[8]*=i,s[1]*=e,s[5]*=t,s[9]*=i,s[2]*=e,s[6]*=t,s[10]*=i,s[3]*=e,s[7]*=t,s[11]*=i,s),scaleMat4v(e,t){const i=e[0],s=e[1],r=e[2];return t[0]*=i,t[4]*=s,t[8]*=r,t[1]*=i,t[5]*=s,t[9]*=r,t[2]*=i,t[6]*=s,t[10]*=r,t[3]*=i,t[7]*=s,t[11]*=r,t},scalingMat4s:e=>l.scalingMat4c(e,e,e),rotationTranslationMat4(e,t,i=l.mat4()){const s=e[0],r=e[1],o=e[2],n=e[3],a=s+s,A=r+r,h=o+o,c=s*a,u=s*A,d=s*h,p=r*A,f=r*h,g=o*h,m=n*a,_=n*A,v=n*h;return i[0]=1-(p+g),i[1]=u+v,i[2]=d-_,i[3]=0,i[4]=u-v,i[5]=1-(c+g),i[6]=f+m,i[7]=0,i[8]=d+_,i[9]=f-m,i[10]=1-(c+p),i[11]=0,i[12]=t[0],i[13]=t[1],i[14]=t[2],i[15]=1,i},mat4ToEuler(e,t,i=l.vec4()){const s=l.clamp,r=e[0],o=e[4],n=e[8],a=e[1],A=e[5],h=e[9],c=e[2],u=e[6],d=e[10];return"XYZ"===t?(i[1]=Math.asin(s(n,-1,1)),Math.abs(n)<.99999?(i[0]=Math.atan2(-h,d),i[2]=Math.atan2(-o,r)):(i[0]=Math.atan2(u,A),i[2]=0)):"YXZ"===t?(i[0]=Math.asin(-s(h,-1,1)),Math.abs(h)<.99999?(i[1]=Math.atan2(n,d),i[2]=Math.atan2(a,A)):(i[1]=Math.atan2(-c,r),i[2]=0)):"ZXY"===t?(i[0]=Math.asin(s(u,-1,1)),Math.abs(u)<.99999?(i[1]=Math.atan2(-c,d),i[2]=Math.atan2(-o,A)):(i[1]=0,i[2]=Math.atan2(a,r))):"ZYX"===t?(i[1]=Math.asin(-s(c,-1,1)),Math.abs(c)<.99999?(i[0]=Math.atan2(u,d),i[2]=Math.atan2(a,r)):(i[0]=0,i[2]=Math.atan2(-o,A))):"YZX"===t?(i[2]=Math.asin(s(a,-1,1)),Math.abs(a)<.99999?(i[0]=Math.atan2(-h,A),i[1]=Math.atan2(-c,r)):(i[0]=0,i[1]=Math.atan2(n,d))):"XZY"===t&&(i[2]=Math.asin(-s(o,-1,1)),Math.abs(o)<.99999?(i[0]=Math.atan2(u,A),i[1]=Math.atan2(n,r)):(i[0]=Math.atan2(-h,d),i[1]=0)),i},composeMat4:(e,t,i,s=l.mat4())=>(l.quaternionToRotationMat4(t,s),l.scaleMat4v(i,s),l.translateMat4v(e,s),s),decomposeMat4:(()=>{const e=new s(3),t=new s(16);return function(i,s,r,o){e[0]=i[0],e[1]=i[1],e[2]=i[2];let n=l.lenVec3(e);e[0]=i[4],e[1]=i[5],e[2]=i[6];const a=l.lenVec3(e);e[8]=i[8],e[9]=i[9],e[10]=i[10];const A=l.lenVec3(e);l.determinantMat4(i)<0&&(n=-n),s[0]=i[12],s[1]=i[13],s[2]=i[14],t.set(i);const h=1/n,c=1/a,u=1/A;return t[0]*=h,t[1]*=h,t[2]*=h,t[4]*=c,t[5]*=c,t[6]*=c,t[8]*=u,t[9]*=u,t[10]*=u,l.mat4ToQuaternion(t,r),o[0]=n,o[1]=a,o[2]=A,this}})(),getColMat4(e,t){const i=4*t;return[e[i],e[i+1],e[i+2],e[i+3]]},setRowMat4(e,t,i){e[t]=i[0],e[t+4]=i[1],e[t+8]=i[2],e[t+12]=i[3]},lookAtMat4v(e,t,i,s){s||(s=l.mat4());const r=e[0],o=e[1],n=e[2],a=i[0],A=i[1],h=i[2],c=t[0],u=t[1],d=t[2];if(r===c&&o===u&&n===d)return l.identityMat4();let p,f,g,m,_,v,b,y,B,w;return p=r-c,f=o-u,g=n-d,w=1/Math.sqrt(p*p+f*f+g*g),p*=w,f*=w,g*=w,m=A*g-h*f,_=h*p-a*g,v=a*f-A*p,w=Math.sqrt(m*m+_*_+v*v),w?(w=1/w,m*=w,_*=w,v*=w):(m=0,_=0,v=0),b=f*v-g*_,y=g*m-p*v,B=p*_-f*m,w=Math.sqrt(b*b+y*y+B*B),w?(w=1/w,b*=w,y*=w,B*=w):(b=0,y=0,B=0),s[0]=m,s[1]=b,s[2]=p,s[3]=0,s[4]=_,s[5]=y,s[6]=f,s[7]=0,s[8]=v,s[9]=B,s[10]=g,s[11]=0,s[12]=-(m*r+_*o+v*n),s[13]=-(b*r+y*o+B*n),s[14]=-(p*r+f*o+g*n),s[15]=1,s},lookAtMat4c:(e,t,i,s,r,o,n,a,A)=>l.lookAtMat4v([e,t,i],[s,r,o],[n,a,A],[]),orthoMat4c(e,t,i,s,r,o,n){n||(n=l.mat4());const a=t-e,A=s-i,h=o-r;return n[0]=2/a,n[1]=0,n[2]=0,n[3]=0,n[4]=0,n[5]=2/A,n[6]=0,n[7]=0,n[8]=0,n[9]=0,n[10]=-2/h,n[11]=0,n[12]=-(e+t)/a,n[13]=-(s+i)/A,n[14]=-(o+r)/h,n[15]=1,n},frustumMat4v(e,t,i){i||(i=l.mat4());const s=[e[0],e[1],e[2],0],r=[t[0],t[1],t[2],0];l.addVec4(r,s,o),l.subVec4(r,s,n);const a=2*s[2],A=n[0],h=n[1],c=n[2];return i[0]=a/A,i[1]=0,i[2]=0,i[3]=0,i[4]=0,i[5]=a/h,i[6]=0,i[7]=0,i[8]=o[0]/A,i[9]=o[1]/h,i[10]=-o[2]/c,i[11]=-1,i[12]=0,i[13]=0,i[14]=-a*r[2]/c,i[15]=0,i},frustumMat4(e,t,i,s,r,o,n){n||(n=l.mat4());const a=t-e,A=s-i,h=o-r;return n[0]=2*r/a,n[1]=0,n[2]=0,n[3]=0,n[4]=0,n[5]=2*r/A,n[6]=0,n[7]=0,n[8]=(t+e)/a,n[9]=(s+i)/A,n[10]=-(o+r)/h,n[11]=-1,n[12]=0,n[13]=0,n[14]=-o*r*2/h,n[15]=0,n},perspectiveMat4(e,t,i,s,r){const o=[],n=[];return o[2]=i,n[2]=s,n[1]=o[2]*Math.tan(e/2),o[1]=-n[1],n[0]=n[1]*t,o[0]=-n[0],l.frustumMat4v(o,n,r)},compareMat4:(e,t)=>e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]&&e[4]===t[4]&&e[5]===t[5]&&e[6]===t[6]&&e[7]===t[7]&&e[8]===t[8]&&e[9]===t[9]&&e[10]===t[10]&&e[11]===t[11]&&e[12]===t[12]&&e[13]===t[13]&&e[14]===t[14]&&e[15]===t[15],transformPoint3(e,t,i=l.vec3()){const s=t[0],r=t[1],o=t[2];return i[0]=e[0]*s+e[4]*r+e[8]*o+e[12],i[1]=e[1]*s+e[5]*r+e[9]*o+e[13],i[2]=e[2]*s+e[6]*r+e[10]*o+e[14],i},transformPoint4:(e,t,i=l.vec4())=>(i[0]=e[0]*t[0]+e[4]*t[1]+e[8]*t[2]+e[12]*t[3],i[1]=e[1]*t[0]+e[5]*t[1]+e[9]*t[2]+e[13]*t[3],i[2]=e[2]*t[0]+e[6]*t[1]+e[10]*t[2]+e[14]*t[3],i[3]=e[3]*t[0]+e[7]*t[1]+e[11]*t[2]+e[15]*t[3],i),transformPoints3(e,t,i){const s=i||[],r=t.length;let o,n,a,l;const A=e[0],h=e[1],c=e[2],u=e[3],d=e[4],p=e[5],f=e[6],g=e[7],m=e[8],_=e[9],v=e[10],b=e[11],y=e[12],B=e[13],w=e[14],x=e[15];let P;for(let e=0;e<r;++e)l=t[e],o=l[0],n=l[1],a=l[2],P=s[e]||(s[e]=[0,0,0]),P[0]=A*o+d*n+m*a+y,P[1]=h*o+p*n+_*a+B,P[2]=c*o+f*n+v*a+w,P[3]=u*o+g*n+b*a+x;return s.length=r,s},transformPositions3(e,t,i=t){let s;const r=t.length;let o,n,a;const l=e[0],A=e[1],h=e[2];e[3];const c=e[4],u=e[5],d=e[6];e[7];const p=e[8],f=e[9],g=e[10];e[11];const m=e[12],_=e[13],v=e[14];for(e[15],s=0;s<r;s+=3)o=t[s+0],n=t[s+1],a=t[s+2],i[s+0]=l*o+c*n+p*a+m,i[s+1]=A*o+u*n+f*a+_,i[s+2]=h*o+d*n+g*a+v;return i},transformPositions4(e,t,i=t){let s;const r=t.length;let o,n,a;const l=e[0],A=e[1],h=e[2],c=e[3],u=e[4],d=e[5],p=e[6],f=e[7],g=e[8],m=e[9],_=e[10],v=e[11],b=e[12],y=e[13],B=e[14],w=e[15];for(s=0;s<r;s+=4)o=t[s+0],n=t[s+1],a=t[s+2],i[s+0]=l*o+u*n+g*a+b,i[s+1]=A*o+d*n+m*a+y,i[s+2]=h*o+p*n+_*a+B,i[s+3]=c*o+f*n+v*a+w;return i},transformVec3(e,t,i){const s=t[0],r=t[1],o=t[2];return(i=i||this.vec3())[0]=e[0]*s+e[4]*r+e[8]*o,i[1]=e[1]*s+e[5]*r+e[9]*o,i[2]=e[2]*s+e[6]*r+e[10]*o,i},transformVec4(e,t,i){const s=t[0],r=t[1],o=t[2],n=t[3];return(i=i||l.vec4())[0]=e[0]*s+e[4]*r+e[8]*o+e[12]*n,i[1]=e[1]*s+e[5]*r+e[9]*o+e[13]*n,i[2]=e[2]*s+e[6]*r+e[10]*o+e[14]*n,i[3]=e[3]*s+e[7]*r+e[11]*o+e[15]*n,i},rotateVec2(e,t,i,s=e){const r=Math.cos(i),o=Math.sin(i),n=e[0]-t[0],a=e[1]-t[1];return s[0]=n*r-a*o+t[0],s[1]=n*o+a*r+t[1],e},rotateVec3X(e,t,i,s){const r=[],o=[];return r[0]=e[0]-t[0],r[1]=e[1]-t[1],r[2]=e[2]-t[2],o[0]=r[0],o[1]=r[1]*Math.cos(i)-r[2]*Math.sin(i),o[2]=r[1]*Math.sin(i)+r[2]*Math.cos(i),s[0]=o[0]+t[0],s[1]=o[1]+t[1],s[2]=o[2]+t[2],s},rotateVec3Y(e,t,i,s){const r=[],o=[];return r[0]=e[0]-t[0],r[1]=e[1]-t[1],r[2]=e[2]-t[2],o[0]=r[2]*Math.sin(i)+r[0]*Math.cos(i),o[1]=r[1],o[2]=r[2]*Math.cos(i)-r[0]*Math.sin(i),s[0]=o[0]+t[0],s[1]=o[1]+t[1],s[2]=o[2]+t[2],s},rotateVec3Z(e,t,i,s){const r=[],o=[];return r[0]=e[0]-t[0],r[1]=e[1]-t[1],r[2]=e[2]-t[2],o[0]=r[0]*Math.cos(i)-r[1]*Math.sin(i),o[1]=r[0]*Math.sin(i)+r[1]*Math.cos(i),o[2]=r[2],s[0]=o[0]+t[0],s[1]=o[1]+t[1],s[2]=o[2]+t[2],s},projectVec4(e,t){const i=1/e[3];return(t=t||l.vec2())[0]=e[0]*i,t[1]=e[1]*i,t},unprojectVec3:(()=>{const e=new s(16),t=new s(16),i=new s(16);return function(s,r,o,n){return this.transformVec3(this.mulMat4(this.inverseMat4(r,e),this.inverseMat4(o,t),i),s,n)}})(),lerpVec3(e,t,i,s,r,o){const n=o||l.vec3(),a=(e-t)/(i-t);return n[0]=s[0]+a*(r[0]-s[0]),n[1]=s[1]+a*(r[1]-s[1]),n[2]=s[2]+a*(r[2]-s[2]),n},lerpMat4(e,t,i,s,r,o){const n=o||l.mat4(),a=(e-t)/(i-t);return n[0]=s[0]+a*(r[0]-s[0]),n[1]=s[1]+a*(r[1]-s[1]),n[2]=s[2]+a*(r[2]-s[2]),n[3]=s[3]+a*(r[3]-s[3]),n[4]=s[4]+a*(r[4]-s[4]),n[5]=s[5]+a*(r[5]-s[5]),n[6]=s[6]+a*(r[6]-s[6]),n[7]=s[7]+a*(r[7]-s[7]),n[8]=s[8]+a*(r[8]-s[8]),n[9]=s[9]+a*(r[9]-s[9]),n[10]=s[10]+a*(r[10]-s[10]),n[11]=s[11]+a*(r[11]-s[11]),n[12]=s[12]+a*(r[12]-s[12]),n[13]=s[13]+a*(r[13]-s[13]),n[14]=s[14]+a*(r[14]-s[14]),n[15]=s[15]+a*(r[15]-s[15]),n},flatten(e){const t=[];let i,s,r,o,n;for(i=0,s=e.length;i<s;i++)for(n=e[i],r=0,o=n.length;r<o;r++)t.push(n[r]);return t},identityQuaternion:(e=l.vec4())=>(e[0]=0,e[1]=0,e[2]=0,e[3]=1,e),eulerToQuaternion(e,t,i=l.vec4()){const s=e[0]*l.DEGTORAD/2,r=e[1]*l.DEGTORAD/2,o=e[2]*l.DEGTORAD/2,n=Math.cos(s),a=Math.cos(r),A=Math.cos(o),h=Math.sin(s),c=Math.sin(r),u=Math.sin(o);return"XYZ"===t?(i[0]=h*a*A+n*c*u,i[1]=n*c*A-h*a*u,i[2]=n*a*u+h*c*A,i[3]=n*a*A-h*c*u):"YXZ"===t?(i[0]=h*a*A+n*c*u,i[1]=n*c*A-h*a*u,i[2]=n*a*u-h*c*A,i[3]=n*a*A+h*c*u):"ZXY"===t?(i[0]=h*a*A-n*c*u,i[1]=n*c*A+h*a*u,i[2]=n*a*u+h*c*A,i[3]=n*a*A-h*c*u):"ZYX"===t?(i[0]=h*a*A-n*c*u,i[1]=n*c*A+h*a*u,i[2]=n*a*u-h*c*A,i[3]=n*a*A+h*c*u):"YZX"===t?(i[0]=h*a*A+n*c*u,i[1]=n*c*A+h*a*u,i[2]=n*a*u-h*c*A,i[3]=n*a*A-h*c*u):"XZY"===t&&(i[0]=h*a*A-n*c*u,i[1]=n*c*A-h*a*u,i[2]=n*a*u+h*c*A,i[3]=n*a*A+h*c*u),i},mat4ToQuaternion(e,t=l.vec4()){const i=e[0],s=e[4],r=e[8],o=e[1],n=e[5],a=e[9],A=e[2],h=e[6],c=e[10];let u;const d=i+n+c;return d>0?(u=.5/Math.sqrt(d+1),t[3]=.25/u,t[0]=(h-a)*u,t[1]=(r-A)*u,t[2]=(o-s)*u):i>n&&i>c?(u=2*Math.sqrt(1+i-n-c),t[3]=(h-a)/u,t[0]=.25*u,t[1]=(s+o)/u,t[2]=(r+A)/u):n>c?(u=2*Math.sqrt(1+n-i-c),t[3]=(r-A)/u,t[0]=(s+o)/u,t[1]=.25*u,t[2]=(a+h)/u):(u=2*Math.sqrt(1+c-i-n),t[3]=(o-s)/u,t[0]=(r+A)/u,t[1]=(a+h)/u,t[2]=.25*u),t},vec3PairToQuaternion(e,t,i=l.vec4()){const s=Math.sqrt(l.dotVec3(e,e)*l.dotVec3(t,t));let r=s+l.dotVec3(e,t);return r<1e-8*s?(r=0,Math.abs(e[0])>Math.abs(e[2])?(i[0]=-e[1],i[1]=e[0],i[2]=0):(i[0]=0,i[1]=-e[2],i[2]=e[1])):l.cross3Vec3(e,t,i),i[3]=r,l.normalizeQuaternion(i)},angleAxisToQuaternion(e,t=l.vec4()){const i=e[3]/2,s=Math.sin(i);return t[0]=s*e[0],t[1]=s*e[1],t[2]=s*e[2],t[3]=Math.cos(i),t},quaternionToEuler:(()=>{const e=new s(16);return(t,i,s)=>(s=s||l.vec3(),l.quaternionToRotationMat4(t,e),l.mat4ToEuler(e,i,s),s)})(),mulQuaternions(e,t,i=l.vec4()){const s=e[0],r=e[1],o=e[2],n=e[3],a=t[0],A=t[1],h=t[2],c=t[3];return i[0]=n*a+s*c+r*h-o*A,i[1]=n*A+r*c+o*a-s*h,i[2]=n*h+o*c+s*A-r*a,i[3]=n*c-s*a-r*A-o*h,i},vec3ApplyQuaternion(e,t,i=l.vec3()){const s=t[0],r=t[1],o=t[2],n=e[0],a=e[1],A=e[2],h=e[3],c=h*s+a*o-A*r,u=h*r+A*s-n*o,d=h*o+n*r-a*s,p=-n*s-a*r-A*o;return i[0]=c*h+p*-n+u*-A-d*-a,i[1]=u*h+p*-a+d*-n-c*-A,i[2]=d*h+p*-A+c*-a-u*-n,i},quaternionToMat4(e,t){t=l.identityMat4(t);const i=e[0],s=e[1],r=e[2],o=e[3],n=2*i,a=2*s,A=2*r,h=n*o,c=a*o,u=A*o,d=n*i,p=a*i,f=A*i,g=a*s,m=A*s,_=A*r;return t[0]=1-(g+_),t[1]=p+u,t[2]=f-c,t[4]=p-u,t[5]=1-(d+_),t[6]=m+h,t[8]=f+c,t[9]=m-h,t[10]=1-(d+g),t},quaternionToRotationMat4(e,t){const i=e[0],s=e[1],r=e[2],o=e[3],n=i+i,a=s+s,l=r+r,A=i*n,h=i*a,c=i*l,u=s*a,d=s*l,p=r*l,f=o*n,g=o*a,m=o*l;return t[0]=1-(u+p),t[4]=h-m,t[8]=c+g,t[1]=h+m,t[5]=1-(A+p),t[9]=d-f,t[2]=c-g,t[6]=d+f,t[10]=1-(A+u),t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},normalizeQuaternion(e,t=e){const i=l.lenVec4([e[0],e[1],e[2],e[3]]);return t[0]=e[0]/i,t[1]=e[1]/i,t[2]=e[2]/i,t[3]=e[3]/i,t},conjugateQuaternion:(e,t=e)=>(t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=e[3],t),inverseQuaternion:(e,t)=>l.normalizeQuaternion(l.conjugateQuaternion(e,t)),quaternionToAngleAxis(e,t=l.vec4()){const i=(e=l.normalizeQuaternion(e,a))[3],s=2*Math.acos(i),r=Math.sqrt(1-i*i);return r<.001?(t[0]=e[0],t[1]=e[1],t[2]=e[2]):(t[0]=e[0]/r,t[1]=e[1]/r,t[2]=e[2]/r),t[3]=s,t},AABB3:e=>new s(e||6),AABB2:e=>new s(e||4),OBB3:e=>new s(e||32),OBB2:e=>new s(e||16),Sphere3:(e,t,i,r)=>new s([e,t,i,r]),transformOBB3(e,t,i=t){let s;const r=t.length;let o,n,a;const l=e[0],A=e[1],h=e[2],c=e[3],u=e[4],d=e[5],p=e[6],f=e[7],g=e[8],m=e[9],_=e[10],v=e[11],b=e[12],y=e[13],B=e[14],w=e[15];for(s=0;s<r;s+=4)o=t[s+0],n=t[s+1],a=t[s+2],i[s+0]=l*o+u*n+g*a+b,i[s+1]=A*o+d*n+m*a+y,i[s+2]=h*o+p*n+_*a+B,i[s+3]=c*o+f*n+v*a+w;return i},containsAABB3:function(e,t){return e[0]<=t[0]&&t[3]<=e[3]&&e[1]<=t[1]&&t[4]<=e[4]&&e[2]<=t[2]&&t[5]<=e[5]},getAABB3Diag:(()=>{const e=new s(3),t=new s(3),i=new s(3);return s=>(e[0]=s[0],e[1]=s[1],e[2]=s[2],t[0]=s[3],t[1]=s[4],t[2]=s[5],l.subVec3(t,e,i),Math.abs(l.lenVec3(i)))})(),getAABB3DiagPoint:(()=>{const e=new s(3),t=new s(3),i=new s(3);return(s,r)=>{e[0]=s[0],e[1]=s[1],e[2]=s[2],t[0]=s[3],t[1]=s[4],t[2]=s[5];const o=l.subVec3(t,e,i),n=r[0]-s[0],a=s[3]-r[0],A=r[1]-s[1],h=s[4]-r[1],c=r[2]-s[2],u=s[5]-r[2];return o[0]+=n>a?n:a,o[1]+=A>h?A:h,o[2]+=c>u?c:u,Math.abs(l.lenVec3(o))}})(),getAABB3Area:e=>(e[3]-e[0])*(e[4]-e[1])*(e[5]-e[2]),getAABB3Center(e,t){const i=t||l.vec3();return i[0]=(e[0]+e[3])/2,i[1]=(e[1]+e[4])/2,i[2]=(e[2]+e[5])/2,i},getAABB2Center(e,t){const i=t||l.vec2();return i[0]=(e[2]+e[0])/2,i[1]=(e[3]+e[1])/2,i},collapseAABB3:(e=l.AABB3())=>(e[0]=l.MAX_DOUBLE,e[1]=l.MAX_DOUBLE,e[2]=l.MAX_DOUBLE,e[3]=l.MIN_DOUBLE,e[4]=l.MIN_DOUBLE,e[5]=l.MIN_DOUBLE,e),AABB3ToOBB3:(e,t=l.OBB3())=>(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=1,t[4]=e[3],t[5]=e[1],t[6]=e[2],t[7]=1,t[8]=e[3],t[9]=e[4],t[10]=e[2],t[11]=1,t[12]=e[0],t[13]=e[4],t[14]=e[2],t[15]=1,t[16]=e[0],t[17]=e[1],t[18]=e[5],t[19]=1,t[20]=e[3],t[21]=e[1],t[22]=e[5],t[23]=1,t[24]=e[3],t[25]=e[4],t[26]=e[5],t[27]=1,t[28]=e[0],t[29]=e[4],t[30]=e[5],t[31]=1,t),positions3ToAABB3:(()=>{const e=new s(3);return(t,i,s)=>{i=i||l.AABB3();let r,o,n,a=l.MAX_DOUBLE,A=l.MAX_DOUBLE,h=l.MAX_DOUBLE,c=l.MIN_DOUBLE,u=l.MIN_DOUBLE,d=l.MIN_DOUBLE;for(let i=0,p=t.length;i<p;i+=3)s?(e[0]=t[i+0],e[1]=t[i+1],e[2]=t[i+2],l.decompressPosition(e,s,e),r=e[0],o=e[1],n=e[2]):(r=t[i+0],o=t[i+1],n=t[i+2]),r<a&&(a=r),o<A&&(A=o),n<h&&(h=n),r>c&&(c=r),o>u&&(u=o),n>d&&(d=n);return i[0]=a,i[1]=A,i[2]=h,i[3]=c,i[4]=u,i[5]=d,i}})(),OBB3ToAABB3(e,t=l.AABB3()){let i,s,r,o=l.MAX_DOUBLE,n=l.MAX_DOUBLE,a=l.MAX_DOUBLE,A=l.MIN_DOUBLE,h=l.MIN_DOUBLE,c=l.MIN_DOUBLE;for(let t=0,l=e.length;t<l;t+=4)i=e[t+0],s=e[t+1],r=e[t+2],i<o&&(o=i),s<n&&(n=s),r<a&&(a=r),i>A&&(A=i),s>h&&(h=s),r>c&&(c=r);return t[0]=o,t[1]=n,t[2]=a,t[3]=A,t[4]=h,t[5]=c,t},points3ToAABB3(e,t=l.AABB3()){let i,s,r,o=l.MAX_DOUBLE,n=l.MAX_DOUBLE,a=l.MAX_DOUBLE,A=l.MIN_DOUBLE,h=l.MIN_DOUBLE,c=l.MIN_DOUBLE;for(let t=0,l=e.length;t<l;t++)i=e[t][0],s=e[t][1],r=e[t][2],i<o&&(o=i),s<n&&(n=s),r<a&&(a=r),i>A&&(A=i),s>h&&(h=s),r>c&&(c=r);return t[0]=o,t[1]=n,t[2]=a,t[3]=A,t[4]=h,t[5]=c,t},points3ToSphere3:(()=>{const e=new s(3);return(t,i)=>{i=i||l.vec4();let s,r=0,o=0,n=0;const a=t.length;for(s=0;s<a;s++)r+=t[s][0],o+=t[s][1],n+=t[s][2];i[0]=r/a,i[1]=o/a,i[2]=n/a;let A,h=0;for(s=0;s<a;s++)A=Math.abs(l.lenVec3(l.subVec3(t[s],i,e))),A>h&&(h=A);return i[3]=h,i}})(),positions3ToSphere3:(()=>{const e=new s(3),t=new s(3);return(i,s)=>{s=s||l.vec4();let r,o=0,n=0,a=0;const A=i.length;let h=0;for(r=0;r<A;r+=3)o+=i[r],n+=i[r+1],a+=i[r+2];const c=A/3;let u;for(s[0]=o/c,s[1]=n/c,s[2]=a/c,r=0;r<A;r+=3)e[0]=i[r],e[1]=i[r+1],e[2]=i[r+2],u=Math.abs(l.lenVec3(l.subVec3(e,s,t))),u>h&&(h=u);return s[3]=h,s}})(),OBB3ToSphere3:(()=>{const e=new s(3),t=new s(3);return(i,s)=>{s=s||l.vec4();let r,o=0,n=0,a=0;const A=i.length,h=A/4;for(r=0;r<A;r+=4)o+=i[r+0],n+=i[r+1],a+=i[r+2];s[0]=o/h,s[1]=n/h,s[2]=a/h;let c,u=0;for(r=0;r<A;r+=4)e[0]=i[r+0],e[1]=i[r+1],e[2]=i[r+2],c=Math.abs(l.lenVec3(l.subVec3(e,s,t))),c>u&&(u=c);return s[3]=u,s}})(),getSphere3Center:(e,t=l.vec3())=>(t[0]=e[0],t[1]=e[1],t[2]=e[2],t),getPositionsCenter(e,t=l.vec3()){let i=0,s=0,r=0;for(var o=0,n=e.length;o<n;o+=3)i+=e[o+0],s+=e[o+1],r+=e[o+2];const a=e.length/3;return t[0]=i/a,t[1]=s/a,t[2]=r/a,t},expandAABB3:(e,t)=>(e[0]>t[0]&&(e[0]=t[0]),e[1]>t[1]&&(e[1]=t[1]),e[2]>t[2]&&(e[2]=t[2]),e[3]<t[3]&&(e[3]=t[3]),e[4]<t[4]&&(e[4]=t[4]),e[5]<t[5]&&(e[5]=t[5]),e),expandAABB3Point3:(e,t)=>(e[0]>t[0]&&(e[0]=t[0]),e[1]>t[1]&&(e[1]=t[1]),e[2]>t[2]&&(e[2]=t[2]),e[3]<t[0]&&(e[3]=t[0]),e[4]<t[1]&&(e[4]=t[1]),e[5]<t[2]&&(e[5]=t[2]),e),expandAABB3Points3(e,t){for(var i,s,r,o=0,n=t.length;o<n;o+=3)i=t[o],s=t[o+1],r=t[o+2],e[0]>i&&(e[0]=i),e[1]>s&&(e[1]=s),e[2]>r&&(e[2]=r),e[3]<i&&(e[3]=i),e[4]<s&&(e[4]=s),e[5]<r&&(e[5]=r);return e},collapseAABB2:(e=l.AABB2())=>(e[0]=l.MAX_DOUBLE,e[1]=l.MAX_DOUBLE,e[2]=l.MIN_DOUBLE,e[3]=l.MIN_DOUBLE,e),point3AABB3Intersect:(e,t)=>e[0]>t[0]||e[3]<t[0]||e[1]>t[1]||e[4]<t[1]||e[2]>t[2]||e[5]<t[2],point3AABB3AbsoluteIntersect:(e,t)=>e[0]<=t[0]&&e[3]>=t[0]&&e[1]<=t[1]&&e[4]>=t[1]&&e[2]<=t[2]&&e[5]>=t[2],planeAABB3Intersect(e,t,i){let s,r;e[0]>0?(s=e[0]*i[0],r=e[0]*i[3]):(s=e[0]*i[3],r=e[0]*i[0]),e[1]>0?(s+=e[1]*i[1],r+=e[1]*i[4]):(s+=e[1]*i[4],r+=e[1]*i[1]),e[2]>0?(s+=e[2]*i[2],r+=e[2]*i[5]):(s+=e[2]*i[5],r+=e[2]*i[2]);if(s<=-t&&r<=-t)return-1;return s>=-t&&r>=-t?1:0},OBB3ToAABB2(e,t=l.AABB2()){let i,s,r,o,n=l.MAX_DOUBLE,a=l.MAX_DOUBLE,A=l.MIN_DOUBLE,h=l.MIN_DOUBLE;for(let t=0,l=e.length;t<l;t+=4)i=e[t+0],s=e[t+1],r=e[t+3]||1,o=1/r,i*=o,s*=o,i<n&&(n=i),s<a&&(a=s),i>A&&(A=i),s>h&&(h=s);return t[0]=n,t[1]=a,t[2]=A,t[3]=h,t},expandAABB2:(e,t)=>(e[0]>t[0]&&(e[0]=t[0]),e[1]>t[1]&&(e[1]=t[1]),e[2]<t[2]&&(e[2]=t[2]),e[3]<t[3]&&(e[3]=t[3]),e),expandAABB2Point2:(e,t)=>(e[0]>t[0]&&(e[0]=t[0]),e[1]>t[1]&&(e[1]=t[1]),e[2]<t[0]&&(e[2]=t[0]),e[3]<t[1]&&(e[3]=t[1]),e),AABB2ToCanvas(e,t,i,s=e){const r=.5*(e[0]+1),o=.5*(e[1]+1),n=.5*(e[2]+1),a=.5*(e[3]+1);return s[0]=Math.floor(r*t),s[1]=i-Math.floor(a*i),s[2]=Math.floor(n*t),s[3]=i-Math.floor(o*i),s},tangentQuadraticBezier:(e,t,i,s)=>2*(1-e)*(i-t)+2*e*(s-i),tangentQuadraticBezier3:(e,t,i,s,r)=>-3*t*(1-e)*(1-e)+3*i*(1-e)*(1-e)-6*e*i*(1-e)+6*e*s*(1-e)-3*e*e*s+3*e*e*r,tangentSpline:e=>6*e*e-6*e+(3*e*e-4*e+1)+(-6*e*e+6*e)+(3*e*e-2*e),catmullRomInterpolate(e,t,i,s,r){const o=.5*(i-e),n=.5*(s-t),a=r*r;return(2*t-2*i+o+n)*(r*a)+(-3*t+3*i-2*o-n)*a+o*r+t},b2p0(e,t){const i=1-e;return i*i*t},b2p1:(e,t)=>2*(1-e)*e*t,b2p2:(e,t)=>e*e*t,b2(e,t,i,s){return this.b2p0(e,t)+this.b2p1(e,i)+this.b2p2(e,s)},b3p0(e,t){const i=1-e;return i*i*i*t},b3p1(e,t){const i=1-e;return 3*i*i*e*t},b3p2:(e,t)=>3*(1-e)*e*e*t,b3p3:(e,t)=>e*e*e*t,b3(e,t,i,s,r){return this.b3p0(e,t)+this.b3p1(e,i)+this.b3p2(e,s)+this.b3p3(e,r)},triangleNormal(e,t,i,s=l.vec3()){const r=t[0]-e[0],o=t[1]-e[1],n=t[2]-e[2],a=i[0]-e[0],A=i[1]-e[1],h=i[2]-e[2],c=o*h-n*A,u=n*a-r*h,d=r*A-o*a,p=Math.sqrt(c*c+u*u+d*d);return 0===p?(s[0]=0,s[1]=0,s[2]=0):(s[0]=c/p,s[1]=u/p,s[2]=d/p),s},rayTriangleIntersect:(()=>{const e=new s(3),t=new s(3),i=new s(3),r=new s(3),o=new s(3);return(s,n,a,A,h,c)=>{c=c||l.vec3();const u=l.subVec3(A,a,e),d=l.subVec3(h,a,t),p=l.cross3Vec3(n,d,i),f=l.dotVec3(u,p);if(f<1e-6)return null;const g=l.subVec3(s,a,r),m=l.dotVec3(g,p);if(m<0||m>f)return null;const _=l.cross3Vec3(g,u,o),v=l.dotVec3(n,_);if(v<0||m+v>f)return null;const b=l.dotVec3(d,_)/f;return c[0]=s[0]+b*n[0],c[1]=s[1]+b*n[1],c[2]=s[2]+b*n[2],c}})(),rayPlaneIntersect:(()=>{const e=new s(3),t=new s(3),i=new s(3),r=new s(3);return(s,o,n,a,A,h)=>{h=h||l.vec3(),o=l.normalizeVec3(o,e);const c=l.subVec3(a,n,t),u=l.subVec3(A,n,i),d=l.cross3Vec3(c,u,r);l.normalizeVec3(d,d);const p=-l.dotVec3(n,d),f=-(l.dotVec3(s,d)+p)/l.dotVec3(o,d);return h[0]=s[0]+f*o[0],h[1]=s[1]+f*o[1],h[2]=s[2]+f*o[2],h}})(),cartesianToBarycentric:(()=>{const e=new s(3),t=new s(3),i=new s(3);return(s,r,o,n,a)=>{const A=l.subVec3(n,r,e),h=l.subVec3(o,r,t),c=l.subVec3(s,r,i),u=l.dotVec3(A,A),d=l.dotVec3(A,h),p=l.dotVec3(A,c),f=l.dotVec3(h,h),g=l.dotVec3(h,c),m=u*f-d*d;if(0===m)return null;const _=1/m,v=(f*p-d*g)*_,b=(u*g-d*p)*_;return a[0]=1-v-b,a[1]=b,a[2]=v,a}})(),barycentricInsideTriangle(e){const t=e[1],i=e[2];return i>=0&&t>=0&&i+t<1},barycentricToCartesian(e,t,i,s,r=l.vec3()){const o=e[0],n=e[1],a=e[2];return r[0]=t[0]*o+i[0]*n+s[0]*a,r[1]=t[1]*o+i[1]*n+s[1]*a,r[2]=t[2]*o+i[2]*n+s[2]*a,r},mergeVertices(e,t,i,s){const r={},o=[],n=[],a=t?[]:null,l=i?[]:null,A=[];let h,c,u,d;const p=1e4;let f,g,m=0;for(f=0,g=e.length;f<g;f+=3)h=e[f],c=e[f+1],u=e[f+2],d=`${Math.round(h*p)}_${Math.round(c*p)}_${Math.round(u*p)}`,void 0===r[d]&&(r[d]=n.length/3,n.push(h),n.push(c),n.push(u),t&&(a.push(t[f]),a.push(t[f+1]),a.push(t[f+2])),i&&(l.push(i[m]),l.push(i[m+1]))),o[f/3]=r[d],m+=2;for(f=0,g=s.length;f<g;f++)A[f]=o[s[f]];const _={positions:n,indices:A};return a&&(_.normals=a),l&&(_.uv=l),_},buildNormals:(()=>{const e=new s(3),t=new s(3),i=new s(3),r=new s(3),o=new s(3),n=new s(3);return(s,a,A)=>{let h,c;const u=new Array(s.length/3);let d,p,f,g,m,_,v;for(h=0,c=a.length;h<c;h+=3){d=a[h],p=a[h+1],f=a[h+2],e[0]=s[3*d],e[1]=s[3*d+1],e[2]=s[3*d+2],t[0]=s[3*p],t[1]=s[3*p+1],t[2]=s[3*p+2],i[0]=s[3*f],i[1]=s[3*f+1],i[2]=s[3*f+2],l.subVec3(t,e,r),l.subVec3(i,e,o);const A=l.vec3();l.normalizeVec3(l.cross3Vec3(r,o,n),A),u[d]||(u[d]=[]),u[p]||(u[p]=[]),u[f]||(u[f]=[]),u[d].push(A),u[p].push(A),u[f].push(A)}for(A=A&&A.length===s.length?A:new Float32Array(s.length),h=0,c=u.length;h<c;h++){g=u[h].length,m=0,_=0,v=0;for(let e=0;e<g;e++)m+=u[h][e][0],_+=u[h][e][1],v+=u[h][e][2];A[3*h]=m/g,A[3*h+1]=_/g,A[3*h+2]=v/g}return A}})(),buildTangents:(()=>{const e=new s(3),t=new s(3),i=new s(3),r=new s(3),o=new s(3),n=new s(3),a=new s(3);return(s,A,h)=>{const c=new Float32Array(s.length);for(let u=0;u<A.length;u+=3){let d=A[u];const p=s.subarray(3*d,3*d+3),f=h.subarray(2*d,2*d+2);d=A[u+1];const g=s.subarray(3*d,3*d+3),m=h.subarray(2*d,2*d+2);d=A[u+2];const _=s.subarray(3*d,3*d+3),v=h.subarray(2*d,2*d+2),b=l.subVec3(g,p,e),y=l.subVec3(_,p,t),B=l.subVec2(m,f,i),w=l.subVec2(v,f,r),x=1/(B[0]*w[1]-B[1]*w[0]),P=l.mulVec3Scalar(l.subVec3(l.mulVec3Scalar(b,w[1],o),l.mulVec3Scalar(y,B[1],n),a),x,n);let C;for(let e=0;e<3;e++)C=3*A[u+e],c[C]+=P[0],c[C+1]+=P[1],c[C+2]+=P[2]}return c}})(),buildPickTriangles(e,t,i){const s=t.length,r=i?new Uint16Array(9*s):new Float32Array(9*s),o=new Uint8Array(12*s);let n,a,l,A,h,c,u=0,d=0,p=0;for(let i=0;i<s;i+=3)c=u>>24&255,h=u>>16&255,A=u>>8&255,l=255&u,a=t[i],n=3*a,r[d++]=e[n],r[d++]=e[n+1],r[d++]=e[n+2],o[p++]=l,o[p++]=A,o[p++]=h,o[p++]=c,a=t[i+1],n=3*a,r[d++]=e[n],r[d++]=e[n+1],r[d++]=e[n+2],o[p++]=l,o[p++]=A,o[p++]=h,o[p++]=c,a=t[i+2],n=3*a,r[d++]=e[n],r[d++]=e[n+1],r[d++]=e[n+2],o[p++]=l,o[p++]=A,o[p++]=h,o[p++]=c,u++;return{positions:r,colors:o}},faceToVertexNormals(e,t,i={}){const s=i.smoothNormalsAngleThreshold||20,r={},o=[],n={};let a,A,h,c,u;const d=1e4;let p,f,g,m,_,v;for(f=0,m=e.length;f<m;f+=3){p=f/3,A=e[f],h=e[f+1],c=e[f+2],u=`${Math.round(A*d)}_${Math.round(h*d)}_${Math.round(c*d)}`,void 0===r[u]?r[u]=[p]:r[u].push(p);const i=l.normalizeVec3([t[f],t[f+1],t[f+2]]);o[p]=i,a=l.vec4([i[0],i[1],i[2],1]),n[p]=a}for(u in r)if(r.hasOwnProperty(u)){const e=r[u],t=e.length;for(f=0;f<t;f++){const i=e[f];for(a=n[i],g=0;g<t;g++){if(f===g)continue;const t=e[g];_=o[i],v=o[t];Math.abs(l.angleVec3(_,v)/l.DEGTORAD)<s&&(a[0]+=v[0],a[1]+=v[1],a[2]+=v[2],a[3]+=1)}}}for(f=0,m=t.length;f<m;f+=3)a=n[f/3],t[f+0]=a[0]/a[3],t[f+1]=a[1]/a[3],t[f+2]=a[2]/a[3]},transformRay:(()=>{const e=new s(4),t=new s(4);return(i,s,r,o,n)=>{e[0]=s[0],e[1]=s[1],e[2]=s[2],e[3]=1,l.transformVec4(i,e,t),o[0]=t[0],o[1]=t[1],o[2]=t[2],e[0]=r[0],e[1]=r[1],e[2]=r[2],l.transformVec3(i,e,t),l.normalizeVec3(t),n[0]=t[0],n[1]=t[1],n[2]=t[2]}})(),canvasPosToWorldRay:(()=>{const e=new s(16),t=new s(4),i=new s(4),r=(t,i,s,r,o)=>{o[0]=t,o[1]=i,o[2]=s,o[3]=1,l.transformVec4(e,o,o),r||l.mulVec4Scalar(o,1/o[3])};return(s,o,n,a,A,h,c)=>{const u="ortho"===a;l.mulMat4(n,o,e),l.inverseMat4(e,e);const d=2*A[0]/s.width-1,p=1-2*A[1]/s.height;r(d,p,-1,u,t),r(d,p,1,u,i),h[0]=t[0],h[1]=t[1],h[2]=t[2],l.subVec3(i,t,c),l.normalizeVec3(c)}})(),canvasPosToLocalRay:(()=>{const e=new s(3),t=new s(3);return(i,s,r,o,n,a,A,h)=>{l.canvasPosToWorldRay(i,s,r,o,a,e,t),l.worldRayToLocalRay(n,e,t,A,h)}})(),worldRayToLocalRay:(()=>{const e=new s(16),t=new s(4),i=new s(4);return(s,r,o,n,a)=>{const A=l.inverseMat4(s,e);t[0]=r[0],t[1]=r[1],t[2]=r[2],t[3]=1,l.transformVec4(A,t,i),n[0]=i[0],n[1]=i[1],n[2]=i[2],l.transformVec3(A,o,a)}})(),buildKDTree:(()=>{const e=new Float32Array;function t(i,r,o,n){const a=new s(6),l={triangles:null,left:null,right:null,leaf:!1,splitDim:0,aabb:a};let A,h;for(a[0]=a[1]=a[2]=Number.POSITIVE_INFINITY,a[3]=a[4]=a[5]=Number.NEGATIVE_INFINITY,A=0,h=i.length;A<h;++A){var c=3*i[A];for(let e=0;e<3;++e){const t=3*r[c+e];o[t]<a[0]&&(a[0]=o[t]),o[t]>a[3]&&(a[3]=o[t]),o[t+1]<a[1]&&(a[1]=o[t+1]),o[t+1]>a[4]&&(a[4]=o[t+1]),o[t+2]<a[2]&&(a[2]=o[t+2]),o[t+2]>a[5]&&(a[5]=o[t+2])}}if(i.length<20||n>10)return l.triangles=i,l.leaf=!0,l;e[0]=a[3]-a[0],e[1]=a[4]-a[1],e[2]=a[5]-a[2];let u=0;e[1]>e[u]&&(u=1),e[2]>e[u]&&(u=2),l.splitDim=u;const d=(a[u]+a[u+3])/2,p=new Array(i.length);let f=0;const g=new Array(i.length);let m=0;for(A=0,h=i.length;A<h;++A){const e=r[c=3*i[A]],t=3*r[c+1],s=3*r[c+2];o[3*e+u]<=d||o[t+u]<=d||o[s+u]<=d?p[f++]=i[A]:g[m++]=i[A]}return p.length=f,g.length=m,l.left=t(p,r,o,n+1),l.right=t(g,r,o,n+1),l}return(e,i)=>{const s=e.length/3,r=new Array(s);for(let e=0;e<s;++e)r[e]=e;return t(r,e,i,0)}})(),decompressPosition(e,t,i){(i=i||e)[0]=e[0]*t[0]+t[12],i[1]=e[1]*t[5]+t[13],i[2]=e[2]*t[10]+t[14]},decompressPositions(e,t,i=new Float32Array(e.length)){for(let s=0,r=e.length;s<r;s+=3)i[s+0]=e[s+0]*t[0]+t[12],i[s+1]=e[s+1]*t[5]+t[13],i[s+2]=e[s+2]*t[10]+t[14];return i},decompressUV(e,t,i){i[0]=e[0]*t[0]+t[6],i[1]=e[1]*t[4]+t[7]},decompressUVs(e,t,i=new Float32Array(e.length)){for(let s=0,r=e.length;s<r;s+=3)i[s+0]=e[s+0]*t[0]+t[6],i[s+1]=e[s+1]*t[4]+t[7];return i},octDecodeVec2(e,t){let i=e[0],s=e[1];i=(2*i+1)/255,s=(2*s+1)/255;const r=1-Math.abs(i)-Math.abs(s);r<0&&(i=(1-Math.abs(s))*(i>=0?1:-1),s=(1-Math.abs(i))*(s>=0?1:-1));const o=Math.sqrt(i*i+s*s+r*r);return t[0]=i/o,t[1]=s/o,t[2]=r/o,t},octDecodeVec2s(e,t){for(let i=0,s=0,r=e.length;i<r;i+=2){let r=e[i+0],o=e[i+1];r=(2*r+1)/255,o=(2*o+1)/255;const n=1-Math.abs(r)-Math.abs(o);n<0&&(r=(1-Math.abs(o))*(r>=0?1:-1),o=(1-Math.abs(r))*(o>=0?1:-1));const a=Math.sqrt(r*r+o*o+n*n);t[s+0]=r/a,t[s+1]=o/a,t[s+2]=n/a,s+=3}return t}};l.buildEdgeIndices=function(){const e=[],t=[],i=[],s=[],r=[];let o=0;const n=new Uint16Array(3),a=new Uint16Array(3),A=new Uint16Array(3),h=l.vec3(),c=l.vec3(),u=l.vec3(),d=l.vec3(),p=l.vec3(),f=l.vec3(),g=l.vec3();return function(m,_,v,b){!function(r,o){const n={};let a,l,A,h;const c=Math.pow(10,4);let u,d,p=0;for(u=0,d=r.length;u<d;u+=3)a=r[u],l=r[u+1],A=r[u+2],h=Math.round(a*c)+"_"+Math.round(l*c)+"_"+Math.round(A*c),void 0===n[h]&&(n[h]=p/3,e[p++]=a,e[p++]=l,e[p++]=A),t[u/3]=n[h];for(u=0,d=o.length;u<d;u++)s[u]=t[o[u]],i[s[u]]=o[u]}(m,_),function(t,i){o=0;for(let m=0,_=t;m<_;m+=3){const t=3*s[m],_=3*s[m+1],v=3*s[m+2];i?(n[0]=e[t],n[1]=e[t+1],n[2]=e[t+2],a[0]=e[_],a[1]=e[_+1],a[2]=e[_+2],A[0]=e[v],A[1]=e[v+1],A[2]=e[v+2],l.decompressPosition(n,i,h),l.decompressPosition(a,i,c),l.decompressPosition(A,i,u)):(h[0]=e[t],h[1]=e[t+1],h[2]=e[t+2],c[0]=e[_],c[1]=e[_+1],c[2]=e[_+2],u[0]=e[v],u[1]=e[v+1],u[2]=e[v+2]),l.subVec3(u,c,d),l.subVec3(h,c,p),l.cross3Vec3(d,p,f),l.normalizeVec3(f,g);const b=r[o]||(r[o]={normal:l.vec3()});b.normal[0]=g[0],b.normal[1]=g[1],b.normal[2]=g[2],o++}}(_.length,v);const y=[],B=Math.cos(l.DEGTORAD*b),w={};let x,P,C,M,F,E,D,I,S,T,R,L=!1;for(let e=0,t=_.length;e<t;e+=3){const t=e/3;for(let i=0;i<3;i++)x=s[e+i],P=s[e+(i+1)%3],C=Math.min(x,P),M=Math.max(x,P),F=C+","+M,void 0===w[F]?w[F]={index1:C,index2:M,face1:t,face2:void 0}:w[F].face2=t}for(F in w)E=w[F],void 0!==E.face2&&(D=r[E.face1].normal,I=r[E.face2].normal,S=l.dotVec3(D,I),S>B)||(T=i[E.index1],R=i[E.index2],(!L&&T>65535||R>65535)&&(L=!0),y.push(T),y.push(R));return L?new Uint32Array(y):new Uint16Array(y)}}(),l.planeClipsPositions3=function(e,t,i,s=3){for(let o=0,n=i.length;o<n;o+=s){if(r[0]=i[o+0]-e[0],r[1]=i[o+1]-e[1],r[2]=i[o+2]-e[2],r[0]*t[0]+r[1]*t[1]+r[2]*t[2]<0)return!0}return!1};const A=new Float32Array(3);class h{constructor(e){if(!e)throw"Parameter expected: cfg";if(!e.viewer)throw"Parameter expected: cfg.viewer";this.viewer=e.viewer,this._maxTreeDepth=e.maxTreeDepth||15,this._root=null,this._needsRebuild=!0,this._onModelLoaded=this.viewer.scene.on("modelLoaded",(e=>{this._needsRebuild=!0})),this._onModelUnloaded=this.viewer.scene.on("modelUnloaded",(e=>{this._needsRebuild=!0})),this.viewer.scene.aabb.on("aabb",(()=>{this._needsRebuild=!0}))}get root(){return this._needsRebuild&&this._rebuild(),this._root}_rebuild(){const e=this.viewer.scene;this._root={aabb:e.getAABB()};for(let t in e.objects){const i=e.objects[t];this._insertEntity(this._root,i,1)}this._needsRebuild=!1}_insertEntity(e,t,i){const s=t.aabb;if(i>=this._maxTreeDepth)return e.entities=e.entities||[],void e.entities.push(t);if(e.left&&l.containsAABB3(e.left.aabb,s))return void this._insertEntity(e.left,t,i+1);if(e.right&&l.containsAABB3(e.right.aabb,s))return void this._insertEntity(e.right,t,i+1);const r=e.aabb;A[0]=r[3]-r[0],A[1]=r[4]-r[1],A[2]=r[5]-r[2];let o=0;if(A[1]>A[o]&&(o=1),A[2]>A[o]&&(o=2),!e.left){const n=r.slice();if(n[o+3]=(r[o]+r[o+3])/2,e.left={aabb:n},l.containsAABB3(n,s))return void this._insertEntity(e.left,t,i+1)}if(!e.right){const n=r.slice();if(n[o]=(r[o]+r[o+3])/2,e.right={aabb:n},l.containsAABB3(n,s))return void this._insertEntity(e.right,t,i+1)}e.entities=e.entities||[],e.entities.push(t)}destroy(){const e=this.viewer.scene;e.off(this._onModelLoaded),e.off(this._onModelUnloaded),this._root=null,this._needsRebuild=!0}}class c{constructor(e,t){this.items=e||[],this._lastUniqueId=(t||0)+1}addItem(){let e;if(2===arguments.length){const t=arguments[0];if(e=arguments[1],this.items[t])throw"ID clash: '"+t+"'";return this.items[t]=e,t}for(e=arguments[0]||{};;){const t=this._lastUniqueId++;if(!this.items[t])return this.items[t]=e,t}}removeItem(e){const t=this.items[e];return delete this.items[e],t}}class u{constructor(){this._head=[],this._headLength=0,this._tail=[],this._index=0,this._length=0}get length(){return this._length}shift(){if(this._index>=this._headLength){const e=this._head;if(e.length=0,this._head=this._tail,this._tail=e,this._index=0,this._headLength=this._head.length,!this._headLength)return}const e=this._head[this._index];return this._index<0?delete this._head[this._index++]:this._head[this._index++]=void 0,this._length--,e}push(e){return this._length++,this._tail.push(e),this}unshift(e){return this._head[--this._index]=e,this._length++,this}}const d={build:{version:"0.8"},client:{browser:navigator&&navigator.userAgent?navigator.userAgent:"n/a"},components:{scenes:0,models:0,meshes:0,objects:0},memory:{meshes:0,positions:0,colors:0,normals:0,uvs:0,indices:0,textures:0,transforms:0,materials:0,programs:0},frame:{frameCount:0,fps:0,useProgram:0,bindTexture:0,bindArray:0,drawElements:0,drawArrays:0,tasksRun:0,tasksScheduled:0}};var p=[["0",10],["A",26],["a",26],["_",1],["$",1]].map((function(e){for(var t=[],i=e[0].charCodeAt(0),s=i+e[1],r=i;r<s;++r)t.push(r);return String.fromCharCode.apply(null,t)})).join("");function f(e,t){return(t&&4!==t?[0,6]:[0,6,12,18]).map((function(t){return p.substr(parseInt(e/(1<<t))%64,1)})).reverse().join("")}const g=function(){for(var e={},t=window.location.search.substring(1).split("&"),i=0;i<t.length;i++){var s=t[i].split("=");if(void 0===e[s[0]])e[s[0]]=decodeURIComponent(s[1]);else if("string"==typeof e[s[0]]){var r=[e[s[0]],decodeURIComponent(s[1])];e[s[0]]=r}else e[s[0]].push(decodeURIComponent(s[1]))}return e}();const m={xmlToJson:function e(t,i){if(t.nodeType===t.TEXT_NODE){var s=t.nodeValue;if(null===s.match(/^\s+$/))return s}else if(t.nodeType===t.ELEMENT_NODE||t.nodeType===t.DOCUMENT_NODE){var r={type:t.nodeName,children:[]};if(t.nodeType===t.ELEMENT_NODE)for(var o=0;o<t.attributes.length;o++){var n=t.attributes[o];r[i[n.nodeName]||n.nodeName]=n.nodeValue}for(var a=0;a<t.childNodes.length;a++){(o=e(t.childNodes[a],i))&&r.children.push(o)}return r}},clone:function(e){return JSON.parse(JSON.stringify(e))},compressGuid:function(e){var t=[0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30].map((function(t){return parseInt(e.substr(t,2),16)}));return f(t[0],2)+[1,4,7,10,13].map((function(e){return f((t[e]<<16)+(t[e+1]<<8)+t[e+2])})).join("")},findNodeOfType:function(e,t){var i=[],s=function(e){e.type===t&&i.push(e),(e.children||[]).forEach((function(e){s(e)}))};return s(e),i},timeout:function(e){return new Promise((function(t,i){setTimeout(t,e)}))},httpRequest:function(e){return new Promise((function(t,i){var s=new XMLHttpRequest;s.open(e.method||"GET",e.url,!0),s.onload=function(e){4===s.readyState&&(200===s.status?t(s.responseXML):i(s.statusText))},s.send(null)}))},loadJSON:function(e,t,i){var s=e=>{};t=t||s,i=i||s;var r=new XMLHttpRequest;r.overrideMimeType("application/json"),r.open("GET",e,!0),r.addEventListener("load",(function(e){var s=e.target.response;if(200===this.status){var r;try{r=JSON.parse(s)}catch(e){i(`utils.loadJSON(): Failed to parse JSON response - ${e}`)}t(r)}else if(0===this.status){console.warn("loadFile: HTTP Status 0 received.");try{t(JSON.parse(s))}catch(e){i(`utils.loadJSON(): Failed to parse JSON response - ${e}`)}}else i(e)}),!1),r.addEventListener("error",(function(e){i(e)}),!1),r.send(null)},loadArraybuffer:function(e,t,i){var s=e=>{};t=t||s,i=i||s;const r=e.match(/^data:(.*?)(;base64)?,(.*)$/);if(r){const e=!!r[2];var o=r[3];o=window.decodeURIComponent(o),e&&(o=window.atob(o));try{const e=new ArrayBuffer(o.length),i=new Uint8Array(e);for(var n=0;n<o.length;n++)i[n]=o.charCodeAt(n);C.scheduleTask((()=>{t(e)}))}catch(e){C.scheduleTask((()=>{i(e)}))}}else{const s=new XMLHttpRequest;s.open("GET",e,!0),s.responseType="arraybuffer",s.onreadystatechange=function(){4===s.readyState&&(200===s.status?t(s.response):i("loadArrayBuffer error : "+s.response))},s.send(null)}},queryString:g,isArray:function(e){return e&&!e.propertyIsEnumerable("length")&&"object"==typeof e&&"number"==typeof e.length},isString:function(e){return"string"==typeof e||e instanceof String},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},isID:function(e){return m.isString(e)||m.isNumeric(e)},isSameComponent:function(e,t){return!(!e||!t)&&(m.isNumeric(e)||m.isString(e)?`${e}`:e.id)===(m.isNumeric(t)||m.isString(t)?`${t}`:t.id)},isFunction:function(e){return"function"==typeof e},isObject:function(e){const t={}.constructor;return!!e&&e.constructor===t},copy:function(e){return m.apply(e,{})}