@openglobus/openglobus-react 0.4.7 → 0.4.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -97,7 +97,7 @@
97
97
  vec2 project(vec4 p,vec2 viewport){return(0.5*p.xyz/p.w+0.5).xy*viewport;}mat2 rotate2d(float angle){return mat2(cos(angle),-sin(angle),sin(angle),cos(angle));}attribute vec2 a_vertices;attribute vec2 a_texCoord;attribute vec3 a_positionsHigh;attribute vec3 a_positionsLow;attribute vec3 a_offset;attribute vec2 a_size;attribute float a_rotation;attribute vec4 a_rgba;varying vec2 v_texCoords;varying vec4 v_rgba;uniform mat4 viewMatrix;uniform mat4 projectionMatrix;uniform vec3 eyePositionHigh;uniform vec3 eyePositionLow;uniform vec3 uScaleByDistance;uniform float opacity;uniform float planetRadius;uniform vec2 viewport;uniform float depthOffset;const vec3 ZERO3=vec3(0.0);void main(){vec3 a_positions=a_positionsHigh+a_positionsLow;vec3 cameraPos=eyePositionHigh+eyePositionLow;v_texCoords=a_texCoord;vec3 look=a_positions-cameraPos;float lookDist=length(look);v_rgba=a_rgba;if(opacity*step(lookDist,sqrt(dot(cameraPos,cameraPos)-planetRadius)+sqrt(dot(a_positions,a_positions)-planetRadius))==0.0){return;}float scd=(1.0-smoothstep(uScaleByDistance[0],uScaleByDistance[1],lookDist))*(1.0-step(uScaleByDistance[2],lookDist));mat4 viewMatrixRTE=viewMatrix;viewMatrixRTE[3]=vec4(0.0,0.0,0.0,1.0);vec3 highDiff=a_positionsHigh-eyePositionHigh;vec3 lowDiff=a_positionsLow-eyePositionLow;vec4 posRTE=viewMatrixRTE*vec4(highDiff+lowDiff,1.0);vec4 projPos=projectionMatrix*posRTE;float camSlope=dot(vec3(viewMatrix[0][2],viewMatrix[1][2],viewMatrix[2][2]),normalize(cameraPos));if(camSlope>0.5){float dist=dot(look,normalize(cameraPos));projPos.z+=dist*0.02;}else{projPos.z+=-(abs(projPos.z))*0.002;}projPos.z+=depthOffset+a_offset.z;vec2 screenPos=project(projPos,viewport);vec2 v=screenPos+rotate2d(a_rotation)*(a_vertices*a_size*scd+a_offset.xy);gl_Position=vec4((2.0*v/viewport-1.0)*projPos.w,projPos.z,projPos.w);}`,fragmentShader:"precision highp float;uniform sampler2D u_texture;varying vec2 v_texCoords;varying vec4 v_rgba;void main(){vec4 color=texture2D(u_texture,v_texCoords);if(color.a<0.1)discard;gl_FragColor=color*v_rgba;}"})),this._renderer.handler.programs.billboardPicking||this._renderer.handler.addProgram(new X("billboardPicking",{uniforms:{viewport:"vec2",projectionMatrix:"mat4",viewMatrix:"mat4",eyePositionHigh:"vec3",eyePositionLow:"vec3",planetRadius:"float",uScaleByDistance:"vec3",opacity:"float",depthOffset:"float"},attributes:{a_vertices:"vec2",a_positionsHigh:"vec3",a_positionsLow:"vec3",a_offset:"vec3",a_size:"vec2",a_rotation:"float",a_rgba:"vec4"},vertexShader:`precision highp float;
98
98
  #define EMPTY - 1.0
99
99
  #define RTL 1.0
100
- vec2 project(vec4 p,vec2 viewport){return(0.5*p.xyz/p.w+0.5).xy*viewport;}mat2 rotate2d(float angle){return mat2(cos(angle),-sin(angle),sin(angle),cos(angle));}attribute vec2 a_vertices;attribute vec3 a_positionsHigh;attribute vec3 a_positionsLow;attribute vec3 a_offset;attribute vec2 a_size;attribute float a_rotation;attribute vec4 a_rgba;varying vec3 v_rgb;uniform mat4 viewMatrix;uniform mat4 projectionMatrix;uniform vec3 eyePositionHigh;uniform vec3 eyePositionLow;uniform vec3 uScaleByDistance;uniform float opacity;uniform float planetRadius;uniform vec2 viewport;uniform float depthOffset;const vec3 ZERO3=vec3(0.0);void main(){vec3 a_positions=a_positionsHigh+a_positionsLow;vec3 cameraPos=eyePositionHigh+eyePositionLow;vec3 look=a_positions-cameraPos;float lookDist=length(look);v_rgb=a_rgba.rgb;if(opacity*step(lookDist,sqrt(dot(cameraPos,cameraPos)-planetRadius)+sqrt(dot(a_positions,a_positions)-planetRadius))==0.0){return;}float scd=(1.0-smoothstep(uScaleByDistance[0],uScaleByDistance[1],lookDist))*(1.0-step(uScaleByDistance[2],lookDist));mat4 viewMatrixRTE=viewMatrix;viewMatrixRTE[3]=vec4(0.0,0.0,0.0,1.0);vec3 highDiff=a_positionsHigh-eyePositionHigh;vec3 lowDiff=a_positionsLow-eyePositionLow;vec4 posRTE=viewMatrixRTE*vec4(highDiff+lowDiff,1.0);vec4 projPos=projectionMatrix*posRTE;float camSlope=dot(vec3(viewMatrix[0][2],viewMatrix[1][2],viewMatrix[2][2]),normalize(cameraPos));if(camSlope>0.5){float dist=dot(look,normalize(cameraPos));projPos.z+=dist*0.02;}else{projPos.z+=-(abs(projPos.z))*0.002;}projPos.z+=depthOffset+a_offset.z;vec2 screenPos=project(projPos,viewport);vec2 v=screenPos+rotate2d(a_rotation)*(a_vertices*a_size*scd+a_offset.xy);gl_Position=vec4((2.0*v/viewport-1.0)*projPos.w,projPos.z,projPos.w);}`,fragmentShader:"precision highp float;varying vec3 v_rgb;void main(){gl_FragColor=vec4(v_rgb,1.0);}"})))}setRenderer(e){this._renderer=e,this.initProgram()}refresh(){let e=this._changedBuffers.length;for(;e--;)this._changedBuffers[e]=!0}_removeBillboards(){let e=this._billboards.length;for(;e--;){let t=this._billboards[e];t._handlerIndex=-1,t._handler=null,t._isReady=!1,t._lockId=-1}this._billboards.length=0,this._billboards=[]}clear(){this._texCoordArr=null,this._vertexArr=null,this._positionHighArr=null,this._positionLowArr=null,this._sizeArr=null,this._offsetArr=null,this._rgbaArr=null,this._rotationArr=null,this._pickingColorArr=null,this._texCoordArr=new Float32Array([]),this._vertexArr=new Float32Array([]),this._positionHighArr=new Float32Array([]),this._positionLowArr=new Float32Array([]),this._sizeArr=new Float32Array([]),this._offsetArr=new Float32Array([]),this._rgbaArr=new Float32Array([]),this._rotationArr=new Float32Array([]),this._pickingColorArr=new Float32Array([]),this._removeBillboards(),this._deleteBuffers(),this.refresh()}_deleteBuffers(){if(this._renderer){let e=this._renderer.handler.gl;e.deleteBuffer(this._positionHighBuffer),e.deleteBuffer(this._positionLowBuffer),e.deleteBuffer(this._sizeBuffer),e.deleteBuffer(this._offsetBuffer),e.deleteBuffer(this._rgbaBuffer),e.deleteBuffer(this._rotationBuffer),e.deleteBuffer(this._vertexBuffer),e.deleteBuffer(this._texCoordBuffer),e.deleteBuffer(this._pickingColorBuffer)}this._positionHighBuffer=null,this._positionLowBuffer=null,this._sizeBuffer=null,this._offsetBuffer=null,this._rgbaBuffer=null,this._rotationBuffer=null,this._vertexBuffer=null,this._texCoordBuffer=null,this._pickingColorBuffer=null}update(){if(this._renderer){let e=this._changedBuffers.length;for(;e--;)this._changedBuffers[e]&&(this._buffersUpdateCallbacks[e].call(this),this._changedBuffers[e]=!1)}}add(e){e._handlerIndex==-1&&(e._isReady=!0,e._handler=this,e._handlerIndex=this._billboards.length,this._billboards.push(e))}_displayPASS(){let e=this._renderer,t=e.handler;t.programs.billboard.activate();let i=t.programs.billboard._program,r=i.attributes,s=i.uniforms,n=t.gl,a=this._entityCollection;n.disable(n.CULL_FACE),n.uniform1f(s.depthOffset,a.polygonOffsetUnits),n.uniform1i(s.u_texture,0),n.uniformMatrix4fv(s.viewMatrix,!1,e.activeCamera.getViewMatrix()),n.uniformMatrix4fv(s.projectionMatrix,!1,e.activeCamera.getProjectionMatrix()),n.uniform3fv(s.eyePositionHigh,e.activeCamera.eyeHigh),n.uniform3fv(s.eyePositionLow,e.activeCamera.eyeLow),n.uniform3fv(s.uScaleByDistance,a.scaleByDistance),n.uniform1f(s.opacity,a._fadingOpacity),n.bindBuffer(n.ARRAY_BUFFER,this._texCoordBuffer),n.vertexAttribPointer(r.a_texCoord,this._texCoordBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._vertexBuffer),n.vertexAttribPointer(r.a_vertices,this._vertexBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._positionHighBuffer),n.vertexAttribPointer(r.a_positionsHigh,this._positionHighBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._positionLowBuffer),n.vertexAttribPointer(r.a_positionsLow,this._positionLowBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._rgbaBuffer),n.vertexAttribPointer(r.a_rgba,this._rgbaBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._sizeBuffer),n.vertexAttribPointer(r.a_size,this._sizeBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._offsetBuffer),n.vertexAttribPointer(r.a_offset,this._offsetBuffer.itemSize,n.FLOAT,!1,0,0),n.uniform1f(s.planetRadius,a.renderNode._planetRadius2||0),n.uniform2fv(s.viewport,[t.canvas.clientWidth,t.canvas.clientHeight]),n.bindBuffer(n.ARRAY_BUFFER,this._rotationBuffer),n.vertexAttribPointer(r.a_rotation,this._rotationBuffer.itemSize,n.FLOAT,!1,0,0),n.drawArrays(n.TRIANGLES,0,this._vertexBuffer.numItems),n.enable(n.CULL_FACE)}_pickingPASS(){let e=this._renderer,t=e.handler;t.programs.billboardPicking.activate();let i=t.programs.billboardPicking._program,r=i.attributes,s=i.uniforms,n=t.gl,a=this._entityCollection;n.disable(n.CULL_FACE),n.uniform1f(s.depthOffset,a.polygonOffsetUnits),n.uniformMatrix4fv(s.viewMatrix,!1,e.activeCamera.getViewMatrix()),n.uniformMatrix4fv(s.projectionMatrix,!1,e.activeCamera.getProjectionMatrix()),n.uniform3fv(s.eyePositionHigh,e.activeCamera.eyeHigh),n.uniform3fv(s.eyePositionLow,e.activeCamera.eyeLow),n.uniform3fv(s.uScaleByDistance,a.scaleByDistance),n.uniform1f(s.opacity,a._fadingOpacity),n.bindBuffer(n.ARRAY_BUFFER,this._vertexBuffer),n.vertexAttribPointer(r.a_vertices,this._vertexBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._positionHighBuffer),n.vertexAttribPointer(r.a_positionsHigh,this._positionHighBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._positionLowBuffer),n.vertexAttribPointer(r.a_positionsLow,this._positionLowBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._pickingColorBuffer),n.vertexAttribPointer(r.a_rgba,this._pickingColorBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._sizeBuffer),n.vertexAttribPointer(r.a_size,this._sizeBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._offsetBuffer),n.vertexAttribPointer(r.a_offset,this._offsetBuffer.itemSize,n.FLOAT,!1,0,0),n.uniform1f(s.planetRadius,a.renderNode._planetRadius2||0),n.uniform2fv(s.viewport,[t.canvas.clientWidth,t.canvas.clientHeight]),n.bindBuffer(n.ARRAY_BUFFER,this._rotationBuffer),n.vertexAttribPointer(r.a_rotation,this._rotationBuffer.itemSize,n.FLOAT,!1,0,0),n.drawArrays(n.TRIANGLES,0,this._vertexBuffer.numItems),n.enable(n.CULL_FACE)}draw(){this._billboards.length&&(this.update(),this._displayPASS())}drawPicking(){this._billboards.length&&this.pickingEnabled&&this._pickingPASS()}reindexBillboardsArray(e){let t=this._billboards;for(let i=e;i<t.length;i++)t[i]._handlerIndex=i}_removeBillboard(e){let t=e._handlerIndex;this._billboards.splice(t,1);let i=24*t;this._rgbaArr=ce(this._rgbaArr,i,24),i=18*t,this._positionHighArr=ce(this._positionHighArr,i,18),this._positionLowArr=ce(this._positionLowArr,i,18),this._offsetArr=ce(this._offsetArr,i,18),this._pickingColorArr=ce(this._pickingColorArr,i,18),i=12*t,this._vertexArr=ce(this._vertexArr,i,12),this._sizeArr=ce(this._sizeArr,i,12),this._texCoordArr=ce(this._texCoordArr,i,12),i=6*t,this._rotationArr=ce(this._rotationArr,i,6),this.reindexBillboardsArray(t),this.refresh(),e._handlerIndex=-1,e._handler=null,e._isReady=!1,e._lockId=-1}setAlignedAxisArr(e,t){}remove(e){e._handler&&(e._isReady&&this.__id===e._handler.__id?this._removeBillboard(e):e._handler=null)}setPositionArr(e,t,i){let r=18*e,s=this._positionHighArr,n=t.x,a=t.y,l=t.z;s[r]=n,s[r+1]=a,s[r+2]=l,s[r+3]=n,s[r+4]=a,s[r+5]=l,s[r+6]=n,s[r+7]=a,s[r+8]=l,s[r+9]=n,s[r+10]=a,s[r+11]=l,s[r+12]=n,s[r+13]=a,s[r+14]=l,s[r+15]=n,s[r+16]=a,s[r+17]=l,s=this._positionLowArr,n=i.x,a=i.y,l=i.z,s[r]=n,s[r+1]=a,s[r+2]=l,s[r+3]=n,s[r+4]=a,s[r+5]=l,s[r+6]=n,s[r+7]=a,s[r+8]=l,s[r+9]=n,s[r+10]=a,s[r+11]=l,s[r+12]=n,s[r+13]=a,s[r+14]=l,s[r+15]=n,s[r+16]=a,s[r+17]=l,this._changedBuffers[1]=!0}setPickingColorArr(e,t){let i=18*e,r=this._pickingColorArr,s=t.x/255,n=t.y/255,a=t.z/255;r[i]=s,r[i+1]=n,r[i+2]=a,r[i+3]=s,r[i+4]=n,r[i+5]=a,r[i+6]=s,r[i+7]=n,r[i+8]=a,r[i+9]=s,r[i+10]=n,r[i+11]=a,r[i+12]=s,r[i+13]=n,r[i+14]=a,r[i+15]=s,r[i+16]=n,r[i+17]=a,this._changedBuffers[0]=!0}setSizeArr(e,t,i){let r=12*e,s=this._sizeArr,n=t,a=i;s[r]=n,s[r+1]=a,s[r+2]=n,s[r+3]=a,s[r+4]=n,s[r+5]=a,s[r+6]=n,s[r+7]=a,s[r+8]=n,s[r+9]=a,s[r+10]=n,s[r+11]=a,this._changedBuffers[2]=!0}setOffsetArr(e,t){let i=18*e,r=this._offsetArr,s=t.x,n=t.y,a=t.z;r[i]=s,r[i+1]=n,r[i+2]=a,r[i+3]=s,r[i+4]=n,r[i+5]=a,r[i+6]=s,r[i+7]=n,r[i+8]=a,r[i+9]=s,r[i+10]=n,r[i+11]=a,r[i+12]=s,r[i+13]=n,r[i+14]=a,r[i+15]=s,r[i+16]=n,r[i+17]=a,this._changedBuffers[3]=!0}setRgbaArr(e,t){let i=24*e,r=this._rgbaArr,s=t.x,n=t.y,a=t.z,l=t.w;r[i]=s,r[i+1]=n,r[i+2]=a,r[i+3]=l,r[i+4]=s,r[i+5]=n,r[i+6]=a,r[i+7]=l,r[i+8]=s,r[i+9]=n,r[i+10]=a,r[i+11]=l,r[i+12]=s,r[i+13]=n,r[i+14]=a,r[i+15]=l,r[i+16]=s,r[i+17]=n,r[i+18]=a,r[i+19]=l,r[i+20]=s,r[i+21]=n,r[i+22]=a,r[i+23]=l,this._changedBuffers[4]=!0}setRotationArr(e,t){let i=6*e,r=this._rotationArr;r[i]=t,r[i+1]=t,r[i+2]=t,r[i+3]=t,r[i+4]=t,r[i+5]=t,this._changedBuffers[5]=!0}setTexCoordArr(e,t){let i=12*e,r=this._texCoordArr;r[i]=t[0],r[i+1]=t[1],r[i+2]=t[2],r[i+3]=t[3],r[i+4]=t[4],r[i+5]=t[5],r[i+6]=t[6],r[i+7]=t[7],r[i+8]=t[8],r[i+9]=t[9],r[i+10]=t[10],r[i+11]=t[11],this._changedBuffers[6]=!0}setVisibility(e,t){let i;i=t?[-.5,.5,-.5,-.5,.5,-.5,.5,-.5,.5,.5,-.5,.5]:[0,0,0,0,0,0,0,0,0,0,0,0],this.setVertexArr(e,i)}setVertexArr(e,t){let i=12*e,r=this._vertexArr;r[i]=t[0],r[i+1]=t[1],r[i+2]=t[2],r[i+3]=t[3],r[i+4]=t[4],r[i+5]=t[5],r[i+6]=t[6],r[i+7]=t[7],r[i+8]=t[8],r[i+9]=t[9],r[i+10]=t[10],r[i+11]=t[11],this._changedBuffers[7]=!0}createPositionBuffer(){let e=this._renderer.handler,t=this._positionHighArr.length/3;this._positionHighBuffer&&this._positionHighBuffer.numItems===t||(e.gl.deleteBuffer(this._positionHighBuffer),e.gl.deleteBuffer(this._positionLowBuffer),this._positionHighBuffer=e.createStreamArrayBuffer(3,t),this._positionLowBuffer=e.createStreamArrayBuffer(3,t)),e.setStreamArrayBuffer(this._positionHighBuffer,this._positionHighArr),e.setStreamArrayBuffer(this._positionLowBuffer,this._positionLowArr)}createSizeBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._sizeBuffer),this._sizeBuffer=e.createArrayBuffer(this._sizeArr,2,this._sizeArr.length/2)}createOffsetBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._offsetBuffer),this._offsetBuffer=e.createArrayBuffer(this._offsetArr,3,this._offsetArr.length/3)}createRgbaBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._rgbaBuffer),this._rgbaBuffer=e.createArrayBuffer(this._rgbaArr,4,this._rgbaArr.length/4)}createRotationBuffer(){let e=this._renderer.handler;this._rotationBuffer&&this._rotationBuffer.numItems===this._rotationArr.length||(e.gl.deleteBuffer(this._rotationBuffer),this._rotationBuffer=e.createStreamArrayBuffer(1,this._rotationArr.length)),e.setStreamArrayBuffer(this._rotationBuffer,this._rotationArr)}createVertexBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._vertexBuffer),this._vertexBuffer=e.createArrayBuffer(this._vertexArr,2,this._vertexArr.length/2)}createTexCoordBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._texCoordBuffer),this._texCoordBuffer=e.createArrayBuffer(this._texCoordArr,2,this._texCoordArr.length/2)}createPickingColorBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._pickingColorBuffer),this._pickingColorBuffer=e.createArrayBuffer(this._pickingColorArr,3,this._pickingColorArr.length/3)}refreshTexCoordsArr(){}};kn.__counter__=0;let In=kn;class Jl extends In{constructor(e){super(e),this._billboards=[]}add(e){if(e._handlerIndex==-1){super.add(e),this._addBillboardToArrays(e),this.refresh();let t=e.getSrc()||e.getImage()&&e.getImage().src;t&&e.setSrc(t)}}_addBillboardToArrays(e){e.getVisibility()?this._vertexArr=oe(this._vertexArr,[-.5,.5,-.5,-.5,.5,-.5,.5,-.5,.5,.5,-.5,.5]):this._vertexArr=oe(this._vertexArr,[0,0,0,0,0,0,0,0,0,0,0,0]),this._texCoordArr=oe(this._texCoordArr,[0,0,0,0,0,0,0,0,0,0,0,0]);let t,i=e._positionHigh.x,r=e._positionHigh.y,s=e._positionHigh.z;this._positionHighArr=oe(this._positionHighArr,[i,r,s,i,r,s,i,r,s,i,r,s,i,r,s,i,r,s]),i=e._positionLow.x,r=e._positionLow.y,s=e._positionLow.z,this._positionLowArr=oe(this._positionLowArr,[i,r,s,i,r,s,i,r,s,i,r,s,i,r,s,i,r,s]),i=e._width,r=e._height,this._sizeArr=oe(this._sizeArr,[i,r,i,r,i,r,i,r,i,r,i,r]),i=e._offset.x,r=e._offset.y,s=e._offset.z,this._offsetArr=oe(this._offsetArr,[i,r,s,i,r,s,i,r,s,i,r,s,i,r,s,i,r,s]),i=e._color.x,r=e._color.y,s=e._color.z,t=e._color.w,this._rgbaArr=oe(this._rgbaArr,[i,r,s,t,i,r,s,t,i,r,s,t,i,r,s,t,i,r,s,t,i,r,s,t]),i=e._rotation,this._rotationArr=oe(this._rotationArr,[i,i,i,i,i,i]),i=e._entity._pickingColor.x/255,r=e._entity._pickingColor.y/255,s=e._entity._pickingColor.z/255,this._pickingColorArr=oe(this._pickingColorArr,[i,r,s,i,r,s,i,r,s,i,r,s,i,r,s,i,r,s])}get billboards(){return this._billboards}refreshTexCoordsArr(){if(this._entityCollection&&this._renderer){let e=this._renderer.billboardsTextureAtlas;for(let t=0;t<this._billboards.length;t++){let i=this._billboards[t],r=i.getImage();if(r){let s=e.get(r.__nodeIndex);s&&this.setTexCoordArr(i._handlerIndex,s.texCoords)}}}}}class eh{constructor(e){this.isFree=!0,this._geoObjectHandler=e,this.geoObjects=[],this.numInstances=0,this._colorTexture=null,this._colorTextureSrc=null,this._colorTextureImage=null,this._normalTexture=null,this._normalTextureSrc=null,this._normalTextureImage=null,this._metallicRoughnessTexture=null,this._metallicRoughnessTextureSrc=null,this._metallicRoughnessTextureImage=null,this._sizeArr=[],this._translateArr=[],this._vertexArr=[],this._rtcPositionHighArr=[],this._rtcPositionLowArr=[],this._qRotArr=[],this._rgbaArr=[],this._normalsArr=[],this._indicesArr=[],this._pickingColorArr=[],this._visibleArr=[],this._texCoordArr=[],this._localPositionArr=[],this._sizeBuffer=null,this._translateBuffer=null,this._vertexBuffer=null,this._rtcPositionHighBuffer=null,this._rtcPositionLowBuffer=null,this._qRotBuffer=null,this._rgbaBuffer=null,this._normalsBuffer=null,this._indicesBuffer=null,this._pickingColorBuffer=null,this._visibleBuffer=null,this._texCoordBuffer=null,this._localPositionBuffer=null,this._materialParams=new Float32Array(9),this._materialShininess=0,this._buffersUpdateCallbacks=[],this._buffersUpdateCallbacks[Un]=this.createPickingColorBuffer,this._buffersUpdateCallbacks[On]=this.createNormalsBuffer,this._buffersUpdateCallbacks[Fn]=this.createRgbaBuffer,this._buffersUpdateCallbacks[Nn]=this.createIndicesBuffer,this._buffersUpdateCallbacks[zn]=this.createVertexBuffer,this._buffersUpdateCallbacks[Vn]=this.createSizeBuffer,this._buffersUpdateCallbacks[Gn]=this.createVisibleBuffer,this._buffersUpdateCallbacks[jn]=this.createTexCoordBuffer,this._buffersUpdateCallbacks[Hn]=this.createQRotBuffer,this._buffersUpdateCallbacks[qn]=this.createTranslateBuffer,this._buffersUpdateCallbacks[Dn]=this.createRTCPositionBuffer,this._buffersUpdateCallbacks[Yn]=this.createLocalPositionBuffer,this._changedBuffers=new Array(this._buffersUpdateCallbacks.length)}setMaterialAmbient(e,t,i){this._materialParams[0]=e,this._materialParams[1]=t,this._materialParams[2]=i}setMaterialDiffuse(e,t,i){this._materialParams[3]=e,this._materialParams[4]=t,this._materialParams[5]=i}setMaterialSpecular(e,t,i){this._materialParams[6]=e,this._materialParams[7]=t,this._materialParams[8]=i}setMaterialShininess(e){this._materialShininess=e}setMaterialParams(e,t,i,r){this.setMaterialAmbient(e[0],e[1],e[2]),this.setMaterialDiffuse(t[0],t[1],t[2]),this.setMaterialSpecular(i[0],i[1],i[2]),this.setMaterialShininess(r)}drawOpaque(e){let t=e.gl,i=e.uniforms,r=e.attributes;t.bindBuffer(t.ARRAY_BUFFER,this._qRotBuffer),t.vertexAttribPointer(r.qRot,this._qRotBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._sizeBuffer),t.vertexAttribPointer(r.aScale,this._sizeBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._translateBuffer),t.vertexAttribPointer(r.aTranslate,this._translateBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._localPositionBuffer),t.vertexAttribPointer(r.aLocalPosition,this._localPositionBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._visibleBuffer),t.vertexAttribPointer(r.aDispose,this._visibleBuffer.itemSize,t.FLOAT,!1,0,0),t.uniform1f(i.uUseTexture,this._colorTexture?1:0),t.bindBuffer(t.ARRAY_BUFFER,this._rgbaBuffer),t.vertexAttribPointer(r.aColor,this._rgbaBuffer.itemSize,t.FLOAT,!1,0,0),t.uniform3fv(i.materialParams,this._materialParams),t.uniform1f(i.materialShininess,this._materialShininess),this._drawElementsInstanced(e)}drawTransparent(e){let t=e.gl,i=e.uniforms,r=e.attributes;t.bindBuffer(t.ARRAY_BUFFER,this._qRotBuffer),t.vertexAttribPointer(r.qRot,this._qRotBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._sizeBuffer),t.vertexAttribPointer(r.aScale,this._sizeBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._translateBuffer),t.vertexAttribPointer(r.aTranslate,this._translateBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._localPositionBuffer),t.vertexAttribPointer(r.aLocalPosition,this._localPositionBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._visibleBuffer),t.vertexAttribPointer(r.aDispose,this._visibleBuffer.itemSize,t.FLOAT,!1,0,0),t.uniform1f(i.uUseTexture,this._colorTexture?1:0),t.uniform3fv(i.materialParams,this._materialParams),t.uniform1f(i.materialShininess,this._materialShininess),t.bindBuffer(t.ARRAY_BUFFER,this._rgbaBuffer),t.vertexAttribPointer(r.aColor,this._rgbaBuffer.itemSize,t.FLOAT,!1,0,0),this._drawElementsInstanced(e)}_drawElementsInstanced(e){let t=e.gl,i=e.uniforms,r=e.attributes,s=this._geoObjectHandler._renderer;t.bindBuffer(t.ARRAY_BUFFER,this._rtcPositionHighBuffer),t.vertexAttribPointer(r.aRTCPositionHigh,this._rtcPositionHighBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._rtcPositionLowBuffer),t.vertexAttribPointer(r.aRTCPositionLow,this._rtcPositionLowBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._normalsBuffer),t.vertexAttribPointer(r.aVertexNormal,this._normalsBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._vertexBuffer),t.vertexAttribPointer(r.aVertexPosition,this._vertexBuffer.itemSize,t.FLOAT,!1,0,0),t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,this._colorTexture||s.handler.defaultTexture),t.uniform1i(i.uTexture,0),t.bindBuffer(t.ARRAY_BUFFER,this._texCoordBuffer),t.vertexAttribPointer(r.aTexCoord,this._texCoordBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this._indicesBuffer),e.drawElementsInstanced(t.TRIANGLES,this._indicesBuffer.numItems,t.UNSIGNED_INT,0,this.numInstances)}async loadColorTexture(){if(this._geoObjectHandler._renderer){if(!this._colorTextureSrc)return this._colorTextureImage?(await this._colorTextureImage.decode(),void this._createColorTexture(this._colorTextureImage)):void 0;{const e=await Gi(this._colorTextureSrc);this._createColorTexture(e)}}}async loadNormalTexture(){if(this._geoObjectHandler._renderer){if(!this._normalTextureSrc)return this._normalTextureImage?(await this._normalTextureImage.decode(),void this._createNormalTexture(this._normalTextureImage)):void 0;{const e=await Gi(this._normalTextureSrc);this._createNormalTexture(e)}}}async loadMetallicRoughnessTexture(){if(this._geoObjectHandler._renderer){if(!this._metallicRoughnessTextureSrc)return this._metallicRoughnessTextureImage?(await this._metallicRoughnessTextureImage.decode(),void this._createMetallicRoughnessTexture(this._metallicRoughnessTextureImage)):void 0;{const e=await Gi(this._metallicRoughnessTextureSrc);this._createMetallicRoughnessTexture(e)}}}clear(){this.numInstances=0,this.geoObjects=[],this._sizeArr=[],this._translateArr=[],this._vertexArr=[],this._rtcPositionHighArr=[],this._rtcPositionLowArr=[],this._qRotArr=[],this._rgbaArr=[],this._normalsArr=[],this._indicesArr=[],this._pickingColorArr=[],this._visibleArr=[],this._texCoordArr=[],this._localPositionArr=[],this._deleteBuffers(),this.isFree=!1}_deleteBuffers(){if(this._geoObjectHandler&&this._geoObjectHandler._renderer){let e=this._geoObjectHandler._renderer.handler,t=e.gl;e.deleteTexture(this._colorTexture),e.deleteTexture(this._normalTexture),e.deleteTexture(this._metallicRoughnessTexture),this._colorTexture=null,this._normalTexture=null,this._metallicRoughnessTexture=null,t.deleteBuffer(this._sizeBuffer),t.deleteBuffer(this._translateBuffer),t.deleteBuffer(this._vertexBuffer),t.deleteBuffer(this._rtcPositionHighBuffer),t.deleteBuffer(this._rtcPositionLowBuffer),t.deleteBuffer(this._qRotBuffer),t.deleteBuffer(this._rgbaBuffer),t.deleteBuffer(this._normalsBuffer),t.deleteBuffer(this._indicesBuffer),t.deleteBuffer(this._pickingColorBuffer),t.deleteBuffer(this._visibleBuffer),t.deleteBuffer(this._texCoordBuffer),t.deleteBuffer(this._localPositionBuffer)}this._sizeBuffer=null,this._translateBuffer=null,this._vertexBuffer=null,this._rtcPositionHighBuffer=null,this._rtcPositionLowBuffer=null,this._qRotBuffer=null,this._rgbaBuffer=null,this._normalsBuffer=null,this._indicesBuffer=null,this._pickingColorBuffer=null,this._visibleBuffer=null,this._texCoordBuffer=null,this._localPositionBuffer=null}createVertexBuffer(){const e=this._geoObjectHandler._renderer.handler;e.gl.deleteBuffer(this._vertexBuffer),this._vertexArr=se(this._vertexArr),this._vertexBuffer=e.createArrayBuffer(this._vertexArr,3,this._vertexArr.length/3)}createVisibleBuffer(){const e=this._geoObjectHandler._renderer.handler,t=this._visibleArr.length;this._visibleBuffer&&this._visibleBuffer.numItems===t||(e.gl.deleteBuffer(this._visibleBuffer),this._visibleBuffer=e.createStreamArrayBuffer(1,t)),this._visibleArr=se(this._visibleArr),e.setStreamArrayBuffer(this._visibleBuffer,this._visibleArr)}createSizeBuffer(){let e=this._geoObjectHandler._renderer.handler,t=this._sizeArr.length/3;this._sizeBuffer&&this._sizeBuffer.numItems===t||(e.gl.deleteBuffer(this._sizeBuffer),this._sizeBuffer=e.createStreamArrayBuffer(3,t)),this._sizeArr=se(this._sizeArr),e.setStreamArrayBuffer(this._sizeBuffer,this._sizeArr)}createTranslateBuffer(){let e=this._geoObjectHandler._renderer.handler,t=this._translateArr.length/3;this._translateBuffer&&this._translateBuffer.numItems===t||(e.gl.deleteBuffer(this._translateBuffer),this._translateBuffer=e.createStreamArrayBuffer(3,t)),this._translateArr=se(this._translateArr),e.setStreamArrayBuffer(this._translateBuffer,this._translateArr)}createLocalPositionBuffer(){let e=this._geoObjectHandler._renderer.handler,t=this._localPositionArr.length/3;this._localPositionBuffer&&this._localPositionBuffer.numItems===t||(e.gl.deleteBuffer(this._localPositionBuffer),this._localPositionBuffer=e.createStreamArrayBuffer(3,t)),this._localPositionArr=se(this._localPositionArr),e.setStreamArrayBuffer(this._localPositionBuffer,this._localPositionArr)}createTexCoordBuffer(){const e=this._geoObjectHandler._renderer.handler;e.gl.deleteBuffer(this._texCoordBuffer),this._texCoordArr=se(this._texCoordArr),this._texCoordBuffer=e.createArrayBuffer(this._texCoordArr,2,this._texCoordArr.length/2)}createRTCPositionBuffer(){let e=this._geoObjectHandler._renderer.handler,t=this._rtcPositionHighArr.length/3;this._rtcPositionHighBuffer&&this._rtcPositionHighBuffer.numItems===t||(e.gl.deleteBuffer(this._rtcPositionHighBuffer),e.gl.deleteBuffer(this._rtcPositionLowBuffer),this._rtcPositionHighBuffer=e.createStreamArrayBuffer(3,t),this._rtcPositionLowBuffer=e.createStreamArrayBuffer(3,t)),this._rtcPositionHighArr=se(this._rtcPositionHighArr),this._rtcPositionLowArr=se(this._rtcPositionLowArr),e.setStreamArrayBuffer(this._rtcPositionHighBuffer,this._rtcPositionHighArr),e.setStreamArrayBuffer(this._rtcPositionLowBuffer,this._rtcPositionLowArr)}createRgbaBuffer(){let e=this._geoObjectHandler._renderer.handler,t=this._rgbaArr.length/4;this._rgbaBuffer&&this._rgbaBuffer.numItems===t||(e.gl.deleteBuffer(this._rgbaBuffer),this._rgbaBuffer=e.createStreamArrayBuffer(4,t)),this._rgbaArr=se(this._rgbaArr),e.setStreamArrayBuffer(this._rgbaBuffer,this._rgbaArr)}createQRotBuffer(){let e=this._geoObjectHandler._renderer.handler,t=this._qRotArr.length/4;this._qRotBuffer&&this._qRotBuffer.numItems===t||(e.gl.deleteBuffer(this._qRotBuffer),this._qRotBuffer=e.createStreamArrayBuffer(4,t)),this._qRotArr=se(this._qRotArr),e.setStreamArrayBuffer(this._qRotBuffer,this._qRotArr)}createNormalsBuffer(){const e=this._geoObjectHandler._renderer.handler;e.gl.deleteBuffer(this._normalsBuffer),this._normalsArr=se(this._normalsArr),this._normalsBuffer=e.createArrayBuffer(this._normalsArr,3,this._normalsArr.length/3)}createIndicesBuffer(){const e=this._geoObjectHandler._renderer.handler;e.gl.deleteBuffer(this._indicesBuffer),this._indicesArr=se(this._indicesArr,Uint32Array),this._indicesBuffer=e.createElementArrayBuffer(this._indicesArr,1,this._indicesArr.length)}createPickingColorBuffer(){const e=this._geoObjectHandler._renderer.handler;e.gl.deleteBuffer(this._pickingColorBuffer),this._pickingColorArr=se(this._pickingColorArr),this._pickingColorBuffer=e.createArrayBuffer(this._pickingColorArr,3,this._pickingColorArr.length/3)}refresh(){let e=this._changedBuffers.length;for(;e--;)this._changedBuffers[e]=!0}update(){if(this._geoObjectHandler._renderer){let e=this._changedBuffers.length;for(;e--;)this._changedBuffers[e]&&(this._buffersUpdateCallbacks[e].call(this),this._changedBuffers[e]=!1);this.isFree=!0}}_createColorTexture(e){if(this._geoObjectHandler&&this._geoObjectHandler._renderer){let t=this._geoObjectHandler._renderer.handler;this._colorTexture=t.createTextureDefault(e,null,t.gl.REPEAT)}}_createNormalTexture(e){if(this._geoObjectHandler&&this._geoObjectHandler._renderer){let t=this._geoObjectHandler._renderer.handler;this._normalTexture=t.createTextureDefault(e,null,t.gl.REPEAT)}}_createMetallicRoughnessTexture(e){if(this._geoObjectHandler&&this._geoObjectHandler._renderer){let t=this._geoObjectHandler._renderer.handler;this._metallicRoughnessTexture=t.createTextureDefault(e,null,t.gl.REPEAT)}}}const zn=0,Dn=1,Fn=2,On=3,Nn=4,Hn=5,Vn=6,Un=7,Gn=8,jn=9,qn=10,Yn=11;function Se(o,e=0,t=0,i=1,...r){const s=e*t;for(let n=s,a=s+t;n<a;n++)o[n]=r[n%i];return o}const Wn=class _l{constructor(e){this.__id=_l.__counter__++,this.pickingEnabled=!0,this._entityCollection=e,this._renderNode=null,this._renderer=null,this._geoObjects=[],this._instanceDataMap=new Map,this._instanceDataMapValues=[],this._dataTagUpdateQueue=[],this._relativeCenter=new m,this._rtcEyePositionHigh=new Float32Array([0,0,0]),this._rtcEyePositionLow=new Float32Array([0,0,0])}initProgram(){this._renderer&&(this._renderer.handler.programs.geo_object||this._renderer.handler.addProgram(new X("geo_object",{uniforms:{viewMatrix:"mat4",projectionMatrix:"mat4",uScaleByDistance:"vec3",eyePositionHigh:"vec3",eyePositionLow:"vec3",rtcEyePositionHigh:"vec3",rtcEyePositionLow:"vec3",sunPosition:"vec3",materialParams:"vec3",materialShininess:"float",uTexture:"sampler2d",uUseTexture:"float",useLighting:"float"},attributes:{aVertexPosition:"vec3",aVertexNormal:"vec3",aTexCoord:"vec2",aLocalPosition:{type:"vec3",divisor:1},aRTCPositionHigh:{type:"vec3",divisor:1},aRTCPositionLow:{type:"vec3",divisor:1},aColor:{type:"vec4",divisor:1},aScale:{type:"vec3",divisor:1},aTranslate:{type:"vec3",divisor:1},aDispose:{type:"float",divisor:1},qRot:{type:"vec4",divisor:1}},vertexShader:"precision highp float;vec3 qRotate(vec4 q,vec3 v){return v+2.0*cross(q.xyz,cross(q.xyz,v)+q.w*v);}attribute vec3 aVertexPosition;attribute vec3 aVertexNormal;attribute vec3 aRTCPositionHigh;attribute vec3 aRTCPositionLow;attribute vec4 aColor;attribute vec3 aScale;attribute vec3 aTranslate;attribute float aDispose;attribute float aUseTexture;attribute vec2 aTexCoord;attribute vec4 qRot;attribute vec3 aLocalPosition;uniform vec3 uScaleByDistance;uniform mat4 projectionMatrix;uniform mat4 viewMatrix;uniform vec3 eyePositionHigh;uniform vec3 eyePositionLow;uniform vec3 rtcEyePositionHigh;uniform vec3 rtcEyePositionLow;varying vec3 cameraPosition;varying vec3 vNormal;varying vec3 v_vertex;varying vec4 vColor;varying float vDispose;varying vec2 vTexCoords;void main(void){if(aDispose==0.0){return;}vColor=aColor;vTexCoords=aTexCoord;mat4 viewMatrixRTE=viewMatrix;viewMatrixRTE[3]=vec4(0.0,0.0,0.0,1.0);vec3 highDiff=aRTCPositionHigh-rtcEyePositionHigh;vec3 lowDiff=aRTCPositionLow-rtcEyePositionLow;cameraPosition=eyePositionHigh+eyePositionLow;highDiff=highDiff*step(1.0,length(highDiff));vec4 positionInViewSpace=viewMatrixRTE*vec4(highDiff+lowDiff,1.0);float lookLength=length(positionInViewSpace.xyz);vNormal=normalize(qRotate(qRot,aVertexNormal));float scd=uScaleByDistance[2]*clamp(lookLength,uScaleByDistance[0],uScaleByDistance[1])/uScaleByDistance[0];vec3 vert=qRotate(qRot,scd*(aVertexPosition*aScale+aTranslate))+scd*aLocalPosition;gl_Position=projectionMatrix*viewMatrixRTE*vec4(highDiff+lowDiff+vert,1.0);v_vertex=positionInViewSpace.xyz+vert;}",fragmentShader:"precision highp float;uniform vec3 sunPosition;uniform vec3 materialParams[3];uniform float materialShininess;uniform sampler2D uTexture;uniform float uUseTexture;uniform float useLighting;varying vec3 cameraPosition;varying vec3 v_vertex;varying vec4 vColor;varying vec3 vNormal;varying vec2 vTexCoords;void main(void){vec3 lightWeighting=vec3(1.0);if(useLighting!=0.0){vec3 normal=normalize(vNormal);vec3 light_dir=normalize(sunPosition);vec3 look_dir=normalize(cameraPosition-v_vertex);float diffuse=max(dot(normal,light_dir),0.0);vec3 refl_dir=reflect(-light_dir,normal);float refl=max(dot(refl_dir,look_dir),0.0);float specular=pow(refl,materialShininess)*step(1e-4,diffuse);lightWeighting=vColor.rgb*materialParams[0]+materialParams[1]*diffuse+materialParams[2]*specular;}else{lightWeighting=vColor.rgb;}if(uUseTexture>0.0){vec4 texColor=texture2D(uTexture,vTexCoords);gl_FragColor=vec4(texColor.rgb*lightWeighting,texColor.a);}else{gl_FragColor=vec4(lightWeighting,vColor.a);}}"})),this._renderer.handler.programs.geo_object_picking||this._renderer.handler.addProgram(new X("geo_object_picking",{uniforms:{viewMatrix:"mat4",projectionMatrix:"mat4",uScaleByDistance:"vec3",pickingScale:"vec3",rtcEyePositionHigh:"vec3",rtcEyePositionLow:"vec3"},attributes:{aVertexPosition:"vec3",aRTCPositionHigh:{type:"vec3",divisor:1},aRTCPositionLow:{type:"vec3",divisor:1},aPickingColor:{type:"vec3",divisor:1},aScale:{type:"vec3",divisor:1},aTranslate:{type:"vec3",divisor:1},aLocalPosition:{type:"vec3",divisor:1},aDispose:{type:"float",divisor:1},qRot:{type:"vec4",divisor:1}},vertexShader:"precision highp float;vec3 qRotate(vec4 q,vec3 v){return v+2.0*cross(q.xyz,cross(q.xyz,v)+q.w*v);}attribute vec3 aVertexPosition;attribute vec3 aRTCPositionHigh;attribute vec3 aRTCPositionLow;attribute vec3 aPickingColor;attribute vec3 aScale;attribute vec3 aTranslate;attribute float aDispose;attribute vec4 qRot;attribute vec3 aLocalPosition;uniform vec3 rtcEyePositionHigh;uniform vec3 rtcEyePositionLow;uniform vec3 uScaleByDistance;uniform mat4 projectionMatrix;uniform mat4 viewMatrix;uniform vec3 pickingScale;varying vec3 vColor;void main(void){if(aDispose==0.0){return;}vColor=aPickingColor;mat4 viewMatrixRTE=viewMatrix;viewMatrixRTE[3]=vec4(0.0,0.0,0.0,1.0);vec3 highDiff=aRTCPositionHigh-rtcEyePositionHigh;vec3 lowDiff=aRTCPositionLow-rtcEyePositionLow;highDiff=highDiff*step(1.0,length(highDiff));vec4 positionInViewSpace=viewMatrixRTE*vec4(highDiff+lowDiff,1.0);float lookLength=length(positionInViewSpace.xyz);float scd=uScaleByDistance[2]*clamp(lookLength,uScaleByDistance[0],uScaleByDistance[1])/uScaleByDistance[0];vec3 vert=qRotate(qRot,scd*pickingScale*(aVertexPosition*aScale+aTranslate))+scd*aLocalPosition;gl_Position=projectionMatrix*viewMatrixRTE*vec4(highDiff+lowDiff+vert,1.0);}",fragmentShader:"precision highp float;varying vec3 vColor;void main(){gl_FragColor=vec4(vColor,1.0);}"})),this._renderer.handler.programs.geo_object_depth||this._renderer.handler.addProgram(new X("geo_object_depth",{uniforms:{viewMatrix:"mat4",projectionMatrix:"mat4",uScaleByDistance:"vec3",rtcEyePositionHigh:"vec3",rtcEyePositionLow:"vec3",frustumPickingColor:"float"},attributes:{aVertexPosition:"vec3",aRTCPositionHigh:{type:"vec3",divisor:1},aRTCPositionLow:{type:"vec3",divisor:1},aScale:{type:"vec3",divisor:1},aTranslate:{type:"vec3",divisor:1},aDispose:{type:"float",divisor:1},qRot:{type:"vec4",divisor:1},aLocalPosition:{type:"vec3",divisor:1}},vertexShader:`#version 300 es
100
+ vec2 project(vec4 p,vec2 viewport){return(0.5*p.xyz/p.w+0.5).xy*viewport;}mat2 rotate2d(float angle){return mat2(cos(angle),-sin(angle),sin(angle),cos(angle));}attribute vec2 a_vertices;attribute vec3 a_positionsHigh;attribute vec3 a_positionsLow;attribute vec3 a_offset;attribute vec2 a_size;attribute float a_rotation;attribute vec4 a_rgba;varying vec3 v_rgb;uniform mat4 viewMatrix;uniform mat4 projectionMatrix;uniform vec3 eyePositionHigh;uniform vec3 eyePositionLow;uniform vec3 uScaleByDistance;uniform float opacity;uniform float planetRadius;uniform vec2 viewport;uniform float depthOffset;const vec3 ZERO3=vec3(0.0);void main(){vec3 a_positions=a_positionsHigh+a_positionsLow;vec3 cameraPos=eyePositionHigh+eyePositionLow;vec3 look=a_positions-cameraPos;float lookDist=length(look);v_rgb=a_rgba.rgb;if(opacity*step(lookDist,sqrt(dot(cameraPos,cameraPos)-planetRadius)+sqrt(dot(a_positions,a_positions)-planetRadius))==0.0){return;}float scd=(1.0-smoothstep(uScaleByDistance[0],uScaleByDistance[1],lookDist))*(1.0-step(uScaleByDistance[2],lookDist));mat4 viewMatrixRTE=viewMatrix;viewMatrixRTE[3]=vec4(0.0,0.0,0.0,1.0);vec3 highDiff=a_positionsHigh-eyePositionHigh;vec3 lowDiff=a_positionsLow-eyePositionLow;vec4 posRTE=viewMatrixRTE*vec4(highDiff+lowDiff,1.0);vec4 projPos=projectionMatrix*posRTE;float camSlope=dot(vec3(viewMatrix[0][2],viewMatrix[1][2],viewMatrix[2][2]),normalize(cameraPos));if(camSlope>0.5){float dist=dot(look,normalize(cameraPos));projPos.z+=dist*0.02;}else{projPos.z+=-(abs(projPos.z))*0.002;}projPos.z+=depthOffset+a_offset.z;vec2 screenPos=project(projPos,viewport);vec2 v=screenPos+rotate2d(a_rotation)*(a_vertices*a_size*scd+a_offset.xy);gl_Position=vec4((2.0*v/viewport-1.0)*projPos.w,projPos.z,projPos.w);}`,fragmentShader:"precision highp float;varying vec3 v_rgb;void main(){gl_FragColor=vec4(v_rgb,1.0);}"})))}setRenderer(e){this._renderer=e,this.initProgram()}refresh(){let e=this._changedBuffers.length;for(;e--;)this._changedBuffers[e]=!0}_removeBillboards(){let e=this._billboards.length;for(;e--;){let t=this._billboards[e];t._handlerIndex=-1,t._handler=null,t._isReady=!1,t._lockId=-1}this._billboards.length=0,this._billboards=[]}clear(){this._texCoordArr=null,this._vertexArr=null,this._positionHighArr=null,this._positionLowArr=null,this._sizeArr=null,this._offsetArr=null,this._rgbaArr=null,this._rotationArr=null,this._pickingColorArr=null,this._texCoordArr=new Float32Array([]),this._vertexArr=new Float32Array([]),this._positionHighArr=new Float32Array([]),this._positionLowArr=new Float32Array([]),this._sizeArr=new Float32Array([]),this._offsetArr=new Float32Array([]),this._rgbaArr=new Float32Array([]),this._rotationArr=new Float32Array([]),this._pickingColorArr=new Float32Array([]),this._removeBillboards(),this._deleteBuffers(),this.refresh()}_deleteBuffers(){if(this._renderer){let e=this._renderer.handler.gl;e.deleteBuffer(this._positionHighBuffer),e.deleteBuffer(this._positionLowBuffer),e.deleteBuffer(this._sizeBuffer),e.deleteBuffer(this._offsetBuffer),e.deleteBuffer(this._rgbaBuffer),e.deleteBuffer(this._rotationBuffer),e.deleteBuffer(this._vertexBuffer),e.deleteBuffer(this._texCoordBuffer),e.deleteBuffer(this._pickingColorBuffer)}this._positionHighBuffer=null,this._positionLowBuffer=null,this._sizeBuffer=null,this._offsetBuffer=null,this._rgbaBuffer=null,this._rotationBuffer=null,this._vertexBuffer=null,this._texCoordBuffer=null,this._pickingColorBuffer=null}update(){if(this._renderer){let e=this._changedBuffers.length;for(;e--;)this._changedBuffers[e]&&(this._buffersUpdateCallbacks[e].call(this),this._changedBuffers[e]=!1)}}add(e){e._handlerIndex==-1&&(e._isReady=!0,e._handler=this,e._handlerIndex=this._billboards.length,this._billboards.push(e))}_displayPASS(){let e=this._renderer,t=e.handler;t.programs.billboard.activate();let i=t.programs.billboard._program,r=i.attributes,s=i.uniforms,n=t.gl,a=this._entityCollection;n.disable(n.CULL_FACE),n.uniform1f(s.depthOffset,a.polygonOffsetUnits),n.uniform1i(s.u_texture,0),n.uniformMatrix4fv(s.viewMatrix,!1,e.activeCamera.getViewMatrix()),n.uniformMatrix4fv(s.projectionMatrix,!1,e.activeCamera.getProjectionMatrix()),n.uniform3fv(s.eyePositionHigh,e.activeCamera.eyeHigh),n.uniform3fv(s.eyePositionLow,e.activeCamera.eyeLow),n.uniform3fv(s.uScaleByDistance,a.scaleByDistance),n.uniform1f(s.opacity,a._fadingOpacity),n.bindBuffer(n.ARRAY_BUFFER,this._texCoordBuffer),n.vertexAttribPointer(r.a_texCoord,this._texCoordBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._vertexBuffer),n.vertexAttribPointer(r.a_vertices,this._vertexBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._positionHighBuffer),n.vertexAttribPointer(r.a_positionsHigh,this._positionHighBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._positionLowBuffer),n.vertexAttribPointer(r.a_positionsLow,this._positionLowBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._rgbaBuffer),n.vertexAttribPointer(r.a_rgba,this._rgbaBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._sizeBuffer),n.vertexAttribPointer(r.a_size,this._sizeBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._offsetBuffer),n.vertexAttribPointer(r.a_offset,this._offsetBuffer.itemSize,n.FLOAT,!1,0,0),n.uniform1f(s.planetRadius,a.renderNode._planetRadius2||0),n.uniform2fv(s.viewport,[t.canvas.clientWidth,t.canvas.clientHeight]),n.bindBuffer(n.ARRAY_BUFFER,this._rotationBuffer),n.vertexAttribPointer(r.a_rotation,this._rotationBuffer.itemSize,n.FLOAT,!1,0,0),n.drawArrays(n.TRIANGLES,0,this._vertexBuffer.numItems),n.enable(n.CULL_FACE)}_pickingPASS(){let e=this._renderer,t=e.handler;t.programs.billboardPicking.activate();let i=t.programs.billboardPicking._program,r=i.attributes,s=i.uniforms,n=t.gl,a=this._entityCollection;n.disable(n.CULL_FACE),n.uniform1f(s.depthOffset,a.polygonOffsetUnits),n.uniformMatrix4fv(s.viewMatrix,!1,e.activeCamera.getViewMatrix()),n.uniformMatrix4fv(s.projectionMatrix,!1,e.activeCamera.getProjectionMatrix()),n.uniform3fv(s.eyePositionHigh,e.activeCamera.eyeHigh),n.uniform3fv(s.eyePositionLow,e.activeCamera.eyeLow),n.uniform3fv(s.uScaleByDistance,a.scaleByDistance),n.uniform1f(s.opacity,a._fadingOpacity),n.bindBuffer(n.ARRAY_BUFFER,this._vertexBuffer),n.vertexAttribPointer(r.a_vertices,this._vertexBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._positionHighBuffer),n.vertexAttribPointer(r.a_positionsHigh,this._positionHighBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._positionLowBuffer),n.vertexAttribPointer(r.a_positionsLow,this._positionLowBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._pickingColorBuffer),n.vertexAttribPointer(r.a_rgba,this._pickingColorBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._sizeBuffer),n.vertexAttribPointer(r.a_size,this._sizeBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._offsetBuffer),n.vertexAttribPointer(r.a_offset,this._offsetBuffer.itemSize,n.FLOAT,!1,0,0),n.uniform1f(s.planetRadius,a.renderNode._planetRadius2||0),n.uniform2fv(s.viewport,[t.canvas.clientWidth,t.canvas.clientHeight]),n.bindBuffer(n.ARRAY_BUFFER,this._rotationBuffer),n.vertexAttribPointer(r.a_rotation,this._rotationBuffer.itemSize,n.FLOAT,!1,0,0),n.drawArrays(n.TRIANGLES,0,this._vertexBuffer.numItems),n.enable(n.CULL_FACE)}draw(){this._billboards.length&&(this.update(),this._displayPASS())}drawPicking(){this._billboards.length&&this.pickingEnabled&&this._pickingPASS()}reindexBillboardsArray(e){let t=this._billboards;for(let i=e;i<t.length;i++)t[i]._handlerIndex=i}_removeBillboard(e){let t=e._handlerIndex;this._billboards.splice(t,1);let i=24*t;this._rgbaArr=ce(this._rgbaArr,i,24),i=18*t,this._positionHighArr=ce(this._positionHighArr,i,18),this._positionLowArr=ce(this._positionLowArr,i,18),this._offsetArr=ce(this._offsetArr,i,18),this._pickingColorArr=ce(this._pickingColorArr,i,18),i=12*t,this._vertexArr=ce(this._vertexArr,i,12),this._sizeArr=ce(this._sizeArr,i,12),this._texCoordArr=ce(this._texCoordArr,i,12),i=6*t,this._rotationArr=ce(this._rotationArr,i,6),this.reindexBillboardsArray(t),this.refresh(),e._handlerIndex=-1,e._handler=null,e._isReady=!1,e._lockId=-1}setAlignedAxisArr(e,t){}remove(e){e._handler&&(e._isReady&&this.__id===e._handler.__id?this._removeBillboard(e):e._handler=null)}setPositionArr(e,t,i){let r=18*e,s=this._positionHighArr,n=t.x,a=t.y,l=t.z;s[r]=n,s[r+1]=a,s[r+2]=l,s[r+3]=n,s[r+4]=a,s[r+5]=l,s[r+6]=n,s[r+7]=a,s[r+8]=l,s[r+9]=n,s[r+10]=a,s[r+11]=l,s[r+12]=n,s[r+13]=a,s[r+14]=l,s[r+15]=n,s[r+16]=a,s[r+17]=l,s=this._positionLowArr,n=i.x,a=i.y,l=i.z,s[r]=n,s[r+1]=a,s[r+2]=l,s[r+3]=n,s[r+4]=a,s[r+5]=l,s[r+6]=n,s[r+7]=a,s[r+8]=l,s[r+9]=n,s[r+10]=a,s[r+11]=l,s[r+12]=n,s[r+13]=a,s[r+14]=l,s[r+15]=n,s[r+16]=a,s[r+17]=l,this._changedBuffers[1]=!0}setPickingColorArr(e,t){let i=18*e,r=this._pickingColorArr,s=t.x/255,n=t.y/255,a=t.z/255;r[i]=s,r[i+1]=n,r[i+2]=a,r[i+3]=s,r[i+4]=n,r[i+5]=a,r[i+6]=s,r[i+7]=n,r[i+8]=a,r[i+9]=s,r[i+10]=n,r[i+11]=a,r[i+12]=s,r[i+13]=n,r[i+14]=a,r[i+15]=s,r[i+16]=n,r[i+17]=a,this._changedBuffers[0]=!0}setSizeArr(e,t,i){let r=12*e,s=this._sizeArr,n=t,a=i;s[r]=n,s[r+1]=a,s[r+2]=n,s[r+3]=a,s[r+4]=n,s[r+5]=a,s[r+6]=n,s[r+7]=a,s[r+8]=n,s[r+9]=a,s[r+10]=n,s[r+11]=a,this._changedBuffers[2]=!0}setOffsetArr(e,t){let i=18*e,r=this._offsetArr,s=t.x,n=t.y,a=t.z;r[i]=s,r[i+1]=n,r[i+2]=a,r[i+3]=s,r[i+4]=n,r[i+5]=a,r[i+6]=s,r[i+7]=n,r[i+8]=a,r[i+9]=s,r[i+10]=n,r[i+11]=a,r[i+12]=s,r[i+13]=n,r[i+14]=a,r[i+15]=s,r[i+16]=n,r[i+17]=a,this._changedBuffers[3]=!0}setRgbaArr(e,t){let i=24*e,r=this._rgbaArr,s=t.x,n=t.y,a=t.z,l=t.w;r[i]=s,r[i+1]=n,r[i+2]=a,r[i+3]=l,r[i+4]=s,r[i+5]=n,r[i+6]=a,r[i+7]=l,r[i+8]=s,r[i+9]=n,r[i+10]=a,r[i+11]=l,r[i+12]=s,r[i+13]=n,r[i+14]=a,r[i+15]=l,r[i+16]=s,r[i+17]=n,r[i+18]=a,r[i+19]=l,r[i+20]=s,r[i+21]=n,r[i+22]=a,r[i+23]=l,this._changedBuffers[4]=!0}setRotationArr(e,t){let i=6*e,r=this._rotationArr;r[i]=t,r[i+1]=t,r[i+2]=t,r[i+3]=t,r[i+4]=t,r[i+5]=t,this._changedBuffers[5]=!0}setTexCoordArr(e,t){let i=12*e,r=this._texCoordArr;r[i]=t[0],r[i+1]=t[1],r[i+2]=t[2],r[i+3]=t[3],r[i+4]=t[4],r[i+5]=t[5],r[i+6]=t[6],r[i+7]=t[7],r[i+8]=t[8],r[i+9]=t[9],r[i+10]=t[10],r[i+11]=t[11],this._changedBuffers[6]=!0}setVisibility(e,t){let i;i=t?[-.5,.5,-.5,-.5,.5,-.5,.5,-.5,.5,.5,-.5,.5]:[0,0,0,0,0,0,0,0,0,0,0,0],this.setVertexArr(e,i)}setVertexArr(e,t){let i=12*e,r=this._vertexArr;r[i]=t[0],r[i+1]=t[1],r[i+2]=t[2],r[i+3]=t[3],r[i+4]=t[4],r[i+5]=t[5],r[i+6]=t[6],r[i+7]=t[7],r[i+8]=t[8],r[i+9]=t[9],r[i+10]=t[10],r[i+11]=t[11],this._changedBuffers[7]=!0}createPositionBuffer(){let e=this._renderer.handler,t=this._positionHighArr.length/3;this._positionHighBuffer&&this._positionHighBuffer.numItems===t||(e.gl.deleteBuffer(this._positionHighBuffer),e.gl.deleteBuffer(this._positionLowBuffer),this._positionHighBuffer=e.createStreamArrayBuffer(3,t),this._positionLowBuffer=e.createStreamArrayBuffer(3,t)),e.setStreamArrayBuffer(this._positionHighBuffer,this._positionHighArr),e.setStreamArrayBuffer(this._positionLowBuffer,this._positionLowArr)}createSizeBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._sizeBuffer),this._sizeBuffer=e.createArrayBuffer(this._sizeArr,2,this._sizeArr.length/2)}createOffsetBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._offsetBuffer),this._offsetBuffer=e.createArrayBuffer(this._offsetArr,3,this._offsetArr.length/3)}createRgbaBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._rgbaBuffer),this._rgbaBuffer=e.createArrayBuffer(this._rgbaArr,4,this._rgbaArr.length/4)}createRotationBuffer(){let e=this._renderer.handler;this._rotationBuffer&&this._rotationBuffer.numItems===this._rotationArr.length||(e.gl.deleteBuffer(this._rotationBuffer),this._rotationBuffer=e.createStreamArrayBuffer(1,this._rotationArr.length)),e.setStreamArrayBuffer(this._rotationBuffer,this._rotationArr)}createVertexBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._vertexBuffer),this._vertexBuffer=e.createArrayBuffer(this._vertexArr,2,this._vertexArr.length/2)}createTexCoordBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._texCoordBuffer),this._texCoordBuffer=e.createArrayBuffer(this._texCoordArr,2,this._texCoordArr.length/2)}createPickingColorBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._pickingColorBuffer),this._pickingColorBuffer=e.createArrayBuffer(this._pickingColorArr,3,this._pickingColorArr.length/3)}refreshTexCoordsArr(){}};kn.__counter__=0;let In=kn;class Jl extends In{constructor(e){super(e),this._billboards=[]}add(e){if(e._handlerIndex==-1){super.add(e),this._addBillboardToArrays(e),this.refresh();let t=e.getSrc()||e.getImage()&&e.getImage().src;t&&e.setSrc(t)}}_addBillboardToArrays(e){e.getVisibility()?this._vertexArr=oe(this._vertexArr,[-.5,.5,-.5,-.5,.5,-.5,.5,-.5,.5,.5,-.5,.5]):this._vertexArr=oe(this._vertexArr,[0,0,0,0,0,0,0,0,0,0,0,0]),this._texCoordArr=oe(this._texCoordArr,[0,0,0,0,0,0,0,0,0,0,0,0]);let t,i=e._positionHigh.x,r=e._positionHigh.y,s=e._positionHigh.z;this._positionHighArr=oe(this._positionHighArr,[i,r,s,i,r,s,i,r,s,i,r,s,i,r,s,i,r,s]),i=e._positionLow.x,r=e._positionLow.y,s=e._positionLow.z,this._positionLowArr=oe(this._positionLowArr,[i,r,s,i,r,s,i,r,s,i,r,s,i,r,s,i,r,s]),i=e._width,r=e._height,this._sizeArr=oe(this._sizeArr,[i,r,i,r,i,r,i,r,i,r,i,r]),i=e._offset.x,r=e._offset.y,s=e._offset.z,this._offsetArr=oe(this._offsetArr,[i,r,s,i,r,s,i,r,s,i,r,s,i,r,s,i,r,s]),i=e._color.x,r=e._color.y,s=e._color.z,t=e._color.w,this._rgbaArr=oe(this._rgbaArr,[i,r,s,t,i,r,s,t,i,r,s,t,i,r,s,t,i,r,s,t,i,r,s,t]),i=e._rotation,this._rotationArr=oe(this._rotationArr,[i,i,i,i,i,i]),i=e._entity._pickingColor.x/255,r=e._entity._pickingColor.y/255,s=e._entity._pickingColor.z/255,this._pickingColorArr=oe(this._pickingColorArr,[i,r,s,i,r,s,i,r,s,i,r,s,i,r,s,i,r,s])}get billboards(){return this._billboards}refreshTexCoordsArr(){if(this._entityCollection&&this._renderer){let e=this._renderer.billboardsTextureAtlas;for(let t=0;t<this._billboards.length;t++){let i=this._billboards[t],r=i.getImage();if(r){let s=e.get(r.__nodeIndex);s&&this.setTexCoordArr(i._handlerIndex,s.texCoords)}}}}}class eh{constructor(e){this.isFree=!0,this._geoObjectHandler=e,this.geoObjects=[],this.numInstances=0,this._colorTexture=null,this._colorTextureSrc=null,this._colorTextureImage=null,this._normalTexture=null,this._normalTextureSrc=null,this._normalTextureImage=null,this._metallicRoughnessTexture=null,this._metallicRoughnessTextureSrc=null,this._metallicRoughnessTextureImage=null,this._sizeArr=[],this._translateArr=[],this._vertexArr=[],this._rtcPositionHighArr=[],this._rtcPositionLowArr=[],this._qRotArr=[],this._rgbaArr=[],this._normalsArr=[],this._indicesArr=[],this._pickingColorArr=[],this._visibleArr=[],this._texCoordArr=[],this._localPositionArr=[],this._sizeBuffer=null,this._translateBuffer=null,this._vertexBuffer=null,this._rtcPositionHighBuffer=null,this._rtcPositionLowBuffer=null,this._qRotBuffer=null,this._rgbaBuffer=null,this._normalsBuffer=null,this._indicesBuffer=null,this._pickingColorBuffer=null,this._visibleBuffer=null,this._texCoordBuffer=null,this._localPositionBuffer=null,this._materialParams=new Float32Array(9),this._materialShininess=0,this._buffersUpdateCallbacks=[],this._buffersUpdateCallbacks[Un]=this.createPickingColorBuffer,this._buffersUpdateCallbacks[On]=this.createNormalsBuffer,this._buffersUpdateCallbacks[Fn]=this.createRgbaBuffer,this._buffersUpdateCallbacks[Nn]=this.createIndicesBuffer,this._buffersUpdateCallbacks[zn]=this.createVertexBuffer,this._buffersUpdateCallbacks[Vn]=this.createSizeBuffer,this._buffersUpdateCallbacks[Gn]=this.createVisibleBuffer,this._buffersUpdateCallbacks[jn]=this.createTexCoordBuffer,this._buffersUpdateCallbacks[Hn]=this.createQRotBuffer,this._buffersUpdateCallbacks[qn]=this.createTranslateBuffer,this._buffersUpdateCallbacks[Dn]=this.createRTCPositionBuffer,this._buffersUpdateCallbacks[Yn]=this.createLocalPositionBuffer,this._changedBuffers=new Array(this._buffersUpdateCallbacks.length)}setMaterialAmbient(e,t,i){this._materialParams[0]=e,this._materialParams[1]=t,this._materialParams[2]=i}setMaterialDiffuse(e,t,i){this._materialParams[3]=e,this._materialParams[4]=t,this._materialParams[5]=i}setMaterialSpecular(e,t,i){this._materialParams[6]=e,this._materialParams[7]=t,this._materialParams[8]=i}setMaterialShininess(e){this._materialShininess=e}setMaterialParams(e,t,i,r){this.setMaterialAmbient(e[0],e[1],e[2]),this.setMaterialDiffuse(t[0],t[1],t[2]),this.setMaterialSpecular(i[0],i[1],i[2]),this.setMaterialShininess(r)}drawOpaque(e){let t=e.gl,i=e.uniforms,r=e.attributes;t.bindBuffer(t.ARRAY_BUFFER,this._qRotBuffer),t.vertexAttribPointer(r.qRot,this._qRotBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._sizeBuffer),t.vertexAttribPointer(r.aScale,this._sizeBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._translateBuffer),t.vertexAttribPointer(r.aTranslate,this._translateBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._localPositionBuffer),t.vertexAttribPointer(r.aLocalPosition,this._localPositionBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._visibleBuffer),t.vertexAttribPointer(r.aDispose,this._visibleBuffer.itemSize,t.FLOAT,!1,0,0),t.uniform1f(i.uUseTexture,this._colorTexture?1:0),t.bindBuffer(t.ARRAY_BUFFER,this._rgbaBuffer),t.vertexAttribPointer(r.aColor,this._rgbaBuffer.itemSize,t.FLOAT,!1,0,0),t.uniform3fv(i.materialParams,this._materialParams),t.uniform1f(i.materialShininess,this._materialShininess),this._drawElementsInstanced(e)}drawTransparent(e){let t=e.gl,i=e.uniforms,r=e.attributes;t.bindBuffer(t.ARRAY_BUFFER,this._qRotBuffer),t.vertexAttribPointer(r.qRot,this._qRotBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._sizeBuffer),t.vertexAttribPointer(r.aScale,this._sizeBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._translateBuffer),t.vertexAttribPointer(r.aTranslate,this._translateBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._localPositionBuffer),t.vertexAttribPointer(r.aLocalPosition,this._localPositionBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._visibleBuffer),t.vertexAttribPointer(r.aDispose,this._visibleBuffer.itemSize,t.FLOAT,!1,0,0),t.uniform1f(i.uUseTexture,this._colorTexture?1:0),t.uniform3fv(i.materialParams,this._materialParams),t.uniform1f(i.materialShininess,this._materialShininess),t.bindBuffer(t.ARRAY_BUFFER,this._rgbaBuffer),t.vertexAttribPointer(r.aColor,this._rgbaBuffer.itemSize,t.FLOAT,!1,0,0),this._drawElementsInstanced(e)}_drawElementsInstanced(e){let t=e.gl,i=e.uniforms,r=e.attributes,s=this._geoObjectHandler._renderer;t.bindBuffer(t.ARRAY_BUFFER,this._rtcPositionHighBuffer),t.vertexAttribPointer(r.aRTCPositionHigh,this._rtcPositionHighBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._rtcPositionLowBuffer),t.vertexAttribPointer(r.aRTCPositionLow,this._rtcPositionLowBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._normalsBuffer),t.vertexAttribPointer(r.aVertexNormal,this._normalsBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._vertexBuffer),t.vertexAttribPointer(r.aVertexPosition,this._vertexBuffer.itemSize,t.FLOAT,!1,0,0),t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,this._colorTexture||s.handler.defaultTexture),t.uniform1i(i.uTexture,0),t.bindBuffer(t.ARRAY_BUFFER,this._texCoordBuffer),t.vertexAttribPointer(r.aTexCoord,this._texCoordBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this._indicesBuffer),e.drawElementsInstanced(t.TRIANGLES,this._indicesBuffer.numItems,t.UNSIGNED_INT,0,this.numInstances)}async loadColorTexture(){if(this._geoObjectHandler._renderer){if(!this._colorTextureSrc)return this._colorTextureImage?(await this._colorTextureImage.decode(),void this._createColorTexture(this._colorTextureImage)):void 0;{const e=await Gi(this._colorTextureSrc);this._createColorTexture(e)}}}async loadNormalTexture(){if(this._geoObjectHandler._renderer){if(!this._normalTextureSrc)return this._normalTextureImage?(await this._normalTextureImage.decode(),void this._createNormalTexture(this._normalTextureImage)):void 0;{const e=await Gi(this._normalTextureSrc);this._createNormalTexture(e)}}}async loadMetallicRoughnessTexture(){if(this._geoObjectHandler._renderer){if(!this._metallicRoughnessTextureSrc)return this._metallicRoughnessTextureImage?(await this._metallicRoughnessTextureImage.decode(),void this._createMetallicRoughnessTexture(this._metallicRoughnessTextureImage)):void 0;{const e=await Gi(this._metallicRoughnessTextureSrc);this._createMetallicRoughnessTexture(e)}}}clear(){this.numInstances=0,this.geoObjects=[],this._sizeArr=[],this._translateArr=[],this._vertexArr=[],this._rtcPositionHighArr=[],this._rtcPositionLowArr=[],this._qRotArr=[],this._rgbaArr=[],this._normalsArr=[],this._indicesArr=[],this._pickingColorArr=[],this._visibleArr=[],this._texCoordArr=[],this._localPositionArr=[],this._deleteBuffers(),this.isFree=!1}_deleteBuffers(){if(this._geoObjectHandler&&this._geoObjectHandler._renderer){let e=this._geoObjectHandler._renderer.handler,t=e.gl;e.deleteTexture(this._colorTexture),e.deleteTexture(this._normalTexture),e.deleteTexture(this._metallicRoughnessTexture),this._colorTexture=null,this._normalTexture=null,this._metallicRoughnessTexture=null,t&&(t.deleteBuffer(this._sizeBuffer),t.deleteBuffer(this._translateBuffer),t.deleteBuffer(this._vertexBuffer),t.deleteBuffer(this._rtcPositionHighBuffer),t.deleteBuffer(this._rtcPositionLowBuffer),t.deleteBuffer(this._qRotBuffer),t.deleteBuffer(this._rgbaBuffer),t.deleteBuffer(this._normalsBuffer),t.deleteBuffer(this._indicesBuffer),t.deleteBuffer(this._pickingColorBuffer),t.deleteBuffer(this._visibleBuffer),t.deleteBuffer(this._texCoordBuffer),t.deleteBuffer(this._localPositionBuffer))}this._sizeBuffer=null,this._translateBuffer=null,this._vertexBuffer=null,this._rtcPositionHighBuffer=null,this._rtcPositionLowBuffer=null,this._qRotBuffer=null,this._rgbaBuffer=null,this._normalsBuffer=null,this._indicesBuffer=null,this._pickingColorBuffer=null,this._visibleBuffer=null,this._texCoordBuffer=null,this._localPositionBuffer=null}createVertexBuffer(){const e=this._geoObjectHandler._renderer.handler;e.gl.deleteBuffer(this._vertexBuffer),this._vertexArr=se(this._vertexArr),this._vertexBuffer=e.createArrayBuffer(this._vertexArr,3,this._vertexArr.length/3)}createVisibleBuffer(){const e=this._geoObjectHandler._renderer.handler,t=this._visibleArr.length;this._visibleBuffer&&this._visibleBuffer.numItems===t||(e.gl.deleteBuffer(this._visibleBuffer),this._visibleBuffer=e.createStreamArrayBuffer(1,t)),this._visibleArr=se(this._visibleArr),e.setStreamArrayBuffer(this._visibleBuffer,this._visibleArr)}createSizeBuffer(){let e=this._geoObjectHandler._renderer.handler,t=this._sizeArr.length/3;this._sizeBuffer&&this._sizeBuffer.numItems===t||(e.gl.deleteBuffer(this._sizeBuffer),this._sizeBuffer=e.createStreamArrayBuffer(3,t)),this._sizeArr=se(this._sizeArr),e.setStreamArrayBuffer(this._sizeBuffer,this._sizeArr)}createTranslateBuffer(){let e=this._geoObjectHandler._renderer.handler,t=this._translateArr.length/3;this._translateBuffer&&this._translateBuffer.numItems===t||(e.gl.deleteBuffer(this._translateBuffer),this._translateBuffer=e.createStreamArrayBuffer(3,t)),this._translateArr=se(this._translateArr),e.setStreamArrayBuffer(this._translateBuffer,this._translateArr)}createLocalPositionBuffer(){let e=this._geoObjectHandler._renderer.handler,t=this._localPositionArr.length/3;this._localPositionBuffer&&this._localPositionBuffer.numItems===t||(e.gl.deleteBuffer(this._localPositionBuffer),this._localPositionBuffer=e.createStreamArrayBuffer(3,t)),this._localPositionArr=se(this._localPositionArr),e.setStreamArrayBuffer(this._localPositionBuffer,this._localPositionArr)}createTexCoordBuffer(){const e=this._geoObjectHandler._renderer.handler;e.gl.deleteBuffer(this._texCoordBuffer),this._texCoordArr=se(this._texCoordArr),this._texCoordBuffer=e.createArrayBuffer(this._texCoordArr,2,this._texCoordArr.length/2)}createRTCPositionBuffer(){let e=this._geoObjectHandler._renderer.handler,t=this._rtcPositionHighArr.length/3;this._rtcPositionHighBuffer&&this._rtcPositionHighBuffer.numItems===t||(e.gl.deleteBuffer(this._rtcPositionHighBuffer),e.gl.deleteBuffer(this._rtcPositionLowBuffer),this._rtcPositionHighBuffer=e.createStreamArrayBuffer(3,t),this._rtcPositionLowBuffer=e.createStreamArrayBuffer(3,t)),this._rtcPositionHighArr=se(this._rtcPositionHighArr),this._rtcPositionLowArr=se(this._rtcPositionLowArr),e.setStreamArrayBuffer(this._rtcPositionHighBuffer,this._rtcPositionHighArr),e.setStreamArrayBuffer(this._rtcPositionLowBuffer,this._rtcPositionLowArr)}createRgbaBuffer(){let e=this._geoObjectHandler._renderer.handler,t=this._rgbaArr.length/4;this._rgbaBuffer&&this._rgbaBuffer.numItems===t||(e.gl.deleteBuffer(this._rgbaBuffer),this._rgbaBuffer=e.createStreamArrayBuffer(4,t)),this._rgbaArr=se(this._rgbaArr),e.setStreamArrayBuffer(this._rgbaBuffer,this._rgbaArr)}createQRotBuffer(){let e=this._geoObjectHandler._renderer.handler,t=this._qRotArr.length/4;this._qRotBuffer&&this._qRotBuffer.numItems===t||(e.gl.deleteBuffer(this._qRotBuffer),this._qRotBuffer=e.createStreamArrayBuffer(4,t)),this._qRotArr=se(this._qRotArr),e.setStreamArrayBuffer(this._qRotBuffer,this._qRotArr)}createNormalsBuffer(){const e=this._geoObjectHandler._renderer.handler;e.gl.deleteBuffer(this._normalsBuffer),this._normalsArr=se(this._normalsArr),this._normalsBuffer=e.createArrayBuffer(this._normalsArr,3,this._normalsArr.length/3)}createIndicesBuffer(){const e=this._geoObjectHandler._renderer.handler;e.gl.deleteBuffer(this._indicesBuffer),this._indicesArr=se(this._indicesArr,Uint32Array),this._indicesBuffer=e.createElementArrayBuffer(this._indicesArr,1,this._indicesArr.length)}createPickingColorBuffer(){const e=this._geoObjectHandler._renderer.handler;e.gl.deleteBuffer(this._pickingColorBuffer),this._pickingColorArr=se(this._pickingColorArr),this._pickingColorBuffer=e.createArrayBuffer(this._pickingColorArr,3,this._pickingColorArr.length/3)}refresh(){let e=this._changedBuffers.length;for(;e--;)this._changedBuffers[e]=!0}update(){if(this._geoObjectHandler._renderer){let e=this._changedBuffers.length;for(;e--;)this._changedBuffers[e]&&(this._buffersUpdateCallbacks[e].call(this),this._changedBuffers[e]=!1);this.isFree=!0}}_createColorTexture(e){if(this._geoObjectHandler&&this._geoObjectHandler._renderer){let t=this._geoObjectHandler._renderer.handler;this._colorTexture=t.createTextureDefault(e,null,t.gl.REPEAT)}}_createNormalTexture(e){if(this._geoObjectHandler&&this._geoObjectHandler._renderer){let t=this._geoObjectHandler._renderer.handler;this._normalTexture=t.createTextureDefault(e,null,t.gl.REPEAT)}}_createMetallicRoughnessTexture(e){if(this._geoObjectHandler&&this._geoObjectHandler._renderer){let t=this._geoObjectHandler._renderer.handler;this._metallicRoughnessTexture=t.createTextureDefault(e,null,t.gl.REPEAT)}}}const zn=0,Dn=1,Fn=2,On=3,Nn=4,Hn=5,Vn=6,Un=7,Gn=8,jn=9,qn=10,Yn=11;function Se(o,e=0,t=0,i=1,...r){const s=e*t;for(let n=s,a=s+t;n<a;n++)o[n]=r[n%i];return o}const Wn=class _l{constructor(e){this.__id=_l.__counter__++,this.pickingEnabled=!0,this._entityCollection=e,this._renderNode=null,this._renderer=null,this._geoObjects=[],this._instanceDataMap=new Map,this._instanceDataMapValues=[],this._dataTagUpdateQueue=[],this._relativeCenter=new m,this._rtcEyePositionHigh=new Float32Array([0,0,0]),this._rtcEyePositionLow=new Float32Array([0,0,0])}initProgram(){this._renderer&&(this._renderer.handler.programs.geo_object||this._renderer.handler.addProgram(new X("geo_object",{uniforms:{viewMatrix:"mat4",projectionMatrix:"mat4",uScaleByDistance:"vec3",eyePositionHigh:"vec3",eyePositionLow:"vec3",rtcEyePositionHigh:"vec3",rtcEyePositionLow:"vec3",sunPosition:"vec3",materialParams:"vec3",materialShininess:"float",uTexture:"sampler2d",uUseTexture:"float",useLighting:"float"},attributes:{aVertexPosition:"vec3",aVertexNormal:"vec3",aTexCoord:"vec2",aLocalPosition:{type:"vec3",divisor:1},aRTCPositionHigh:{type:"vec3",divisor:1},aRTCPositionLow:{type:"vec3",divisor:1},aColor:{type:"vec4",divisor:1},aScale:{type:"vec3",divisor:1},aTranslate:{type:"vec3",divisor:1},aDispose:{type:"float",divisor:1},qRot:{type:"vec4",divisor:1}},vertexShader:"precision highp float;vec3 qRotate(vec4 q,vec3 v){return v+2.0*cross(q.xyz,cross(q.xyz,v)+q.w*v);}attribute vec3 aVertexPosition;attribute vec3 aVertexNormal;attribute vec3 aRTCPositionHigh;attribute vec3 aRTCPositionLow;attribute vec4 aColor;attribute vec3 aScale;attribute vec3 aTranslate;attribute float aDispose;attribute float aUseTexture;attribute vec2 aTexCoord;attribute vec4 qRot;attribute vec3 aLocalPosition;uniform vec3 uScaleByDistance;uniform mat4 projectionMatrix;uniform mat4 viewMatrix;uniform vec3 eyePositionHigh;uniform vec3 eyePositionLow;uniform vec3 rtcEyePositionHigh;uniform vec3 rtcEyePositionLow;varying vec3 cameraPosition;varying vec3 vNormal;varying vec3 v_vertex;varying vec4 vColor;varying float vDispose;varying vec2 vTexCoords;void main(void){if(aDispose==0.0){return;}vColor=aColor;vTexCoords=aTexCoord;mat4 viewMatrixRTE=viewMatrix;viewMatrixRTE[3]=vec4(0.0,0.0,0.0,1.0);vec3 highDiff=aRTCPositionHigh-rtcEyePositionHigh;vec3 lowDiff=aRTCPositionLow-rtcEyePositionLow;cameraPosition=eyePositionHigh+eyePositionLow;highDiff=highDiff*step(1.0,length(highDiff));vec4 positionInViewSpace=viewMatrixRTE*vec4(highDiff+lowDiff,1.0);float lookLength=length(positionInViewSpace.xyz);vNormal=normalize(qRotate(qRot,aVertexNormal));float scd=uScaleByDistance[2]*clamp(lookLength,uScaleByDistance[0],uScaleByDistance[1])/uScaleByDistance[0];vec3 vert=qRotate(qRot,scd*(aVertexPosition*aScale+aTranslate))+scd*aLocalPosition;gl_Position=projectionMatrix*viewMatrixRTE*vec4(highDiff+lowDiff+vert,1.0);v_vertex=positionInViewSpace.xyz+vert;}",fragmentShader:"precision highp float;uniform vec3 sunPosition;uniform vec3 materialParams[3];uniform float materialShininess;uniform sampler2D uTexture;uniform float uUseTexture;uniform float useLighting;varying vec3 cameraPosition;varying vec3 v_vertex;varying vec4 vColor;varying vec3 vNormal;varying vec2 vTexCoords;void main(void){vec3 lightWeighting=vec3(1.0);if(useLighting!=0.0){vec3 normal=normalize(vNormal);vec3 light_dir=normalize(sunPosition);vec3 look_dir=normalize(cameraPosition-v_vertex);float diffuse=max(dot(normal,light_dir),0.0);vec3 refl_dir=reflect(-light_dir,normal);float refl=max(dot(refl_dir,look_dir),0.0);float specular=pow(refl,materialShininess)*step(1e-4,diffuse);lightWeighting=vColor.rgb*materialParams[0]+materialParams[1]*diffuse+materialParams[2]*specular;}else{lightWeighting=vColor.rgb;}if(uUseTexture>0.0){vec4 texColor=texture2D(uTexture,vTexCoords);gl_FragColor=vec4(texColor.rgb*lightWeighting,texColor.a);}else{gl_FragColor=vec4(lightWeighting,vColor.a);}}"})),this._renderer.handler.programs.geo_object_picking||this._renderer.handler.addProgram(new X("geo_object_picking",{uniforms:{viewMatrix:"mat4",projectionMatrix:"mat4",uScaleByDistance:"vec3",pickingScale:"vec3",rtcEyePositionHigh:"vec3",rtcEyePositionLow:"vec3"},attributes:{aVertexPosition:"vec3",aRTCPositionHigh:{type:"vec3",divisor:1},aRTCPositionLow:{type:"vec3",divisor:1},aPickingColor:{type:"vec3",divisor:1},aScale:{type:"vec3",divisor:1},aTranslate:{type:"vec3",divisor:1},aLocalPosition:{type:"vec3",divisor:1},aDispose:{type:"float",divisor:1},qRot:{type:"vec4",divisor:1}},vertexShader:"precision highp float;vec3 qRotate(vec4 q,vec3 v){return v+2.0*cross(q.xyz,cross(q.xyz,v)+q.w*v);}attribute vec3 aVertexPosition;attribute vec3 aRTCPositionHigh;attribute vec3 aRTCPositionLow;attribute vec3 aPickingColor;attribute vec3 aScale;attribute vec3 aTranslate;attribute float aDispose;attribute vec4 qRot;attribute vec3 aLocalPosition;uniform vec3 rtcEyePositionHigh;uniform vec3 rtcEyePositionLow;uniform vec3 uScaleByDistance;uniform mat4 projectionMatrix;uniform mat4 viewMatrix;uniform vec3 pickingScale;varying vec3 vColor;void main(void){if(aDispose==0.0){return;}vColor=aPickingColor;mat4 viewMatrixRTE=viewMatrix;viewMatrixRTE[3]=vec4(0.0,0.0,0.0,1.0);vec3 highDiff=aRTCPositionHigh-rtcEyePositionHigh;vec3 lowDiff=aRTCPositionLow-rtcEyePositionLow;highDiff=highDiff*step(1.0,length(highDiff));vec4 positionInViewSpace=viewMatrixRTE*vec4(highDiff+lowDiff,1.0);float lookLength=length(positionInViewSpace.xyz);float scd=uScaleByDistance[2]*clamp(lookLength,uScaleByDistance[0],uScaleByDistance[1])/uScaleByDistance[0];vec3 vert=qRotate(qRot,scd*pickingScale*(aVertexPosition*aScale+aTranslate))+scd*aLocalPosition;gl_Position=projectionMatrix*viewMatrixRTE*vec4(highDiff+lowDiff+vert,1.0);}",fragmentShader:"precision highp float;varying vec3 vColor;void main(){gl_FragColor=vec4(vColor,1.0);}"})),this._renderer.handler.programs.geo_object_depth||this._renderer.handler.addProgram(new X("geo_object_depth",{uniforms:{viewMatrix:"mat4",projectionMatrix:"mat4",uScaleByDistance:"vec3",rtcEyePositionHigh:"vec3",rtcEyePositionLow:"vec3",frustumPickingColor:"float"},attributes:{aVertexPosition:"vec3",aRTCPositionHigh:{type:"vec3",divisor:1},aRTCPositionLow:{type:"vec3",divisor:1},aScale:{type:"vec3",divisor:1},aTranslate:{type:"vec3",divisor:1},aDispose:{type:"float",divisor:1},qRot:{type:"vec4",divisor:1},aLocalPosition:{type:"vec3",divisor:1}},vertexShader:`#version 300 es
101
101
  precision highp float;vec3 qRotate(vec4 q,vec3 v){return v+2.0*cross(q.xyz,cross(q.xyz,v)+q.w*v);}in vec3 aVertexPosition;in vec3 aRTCPositionHigh;in vec3 aRTCPositionLow;in vec3 aScale;in vec3 aTranslate;in float aDispose;in vec4 qRot;in vec3 aLocalPosition;uniform vec3 rtcEyePositionHigh;uniform vec3 rtcEyePositionLow;uniform vec3 uScaleByDistance;uniform mat4 projectionMatrix;uniform mat4 viewMatrix;void main(void){if(aDispose==0.0){return;}mat4 viewMatrixRTE=viewMatrix;viewMatrixRTE[3]=vec4(0.0,0.0,0.0,1.0);vec3 highDiff=aRTCPositionHigh-rtcEyePositionHigh;vec3 lowDiff=aRTCPositionLow-rtcEyePositionLow;highDiff=highDiff*step(1.0,length(highDiff));vec4 positionInViewSpace=viewMatrixRTE*vec4(highDiff+lowDiff,1.0);float lookLength=length(positionInViewSpace.xyz);float scd=uScaleByDistance[2]*clamp(lookLength,uScaleByDistance[0],uScaleByDistance[1])/uScaleByDistance[0];vec3 vert=qRotate(qRot,scd*(aVertexPosition*aScale+aTranslate))+scd*aLocalPosition;gl_Position=projectionMatrix*viewMatrixRTE*vec4(highDiff+lowDiff+vert,1.0);}`,fragmentShader:`#version 300 es
102
102
  precision highp float;uniform float frustumPickingColor;layout(location=0)out vec4 frustumColor;layout(location=1)out vec4 depthColor;void main(){frustumColor=vec4(frustumPickingColor,frustumPickingColor,frustumPickingColor,1.0);depthColor=vec4(gl_FragCoord.z,gl_FragCoord.z,gl_FragCoord.z,1.0);}`})))}setRenderNode(e){this._renderNode=e,this._renderer=e.renderer,this.initProgram();for(let t=0;t<this._instanceDataMapValues.length;t++)this._instanceDataMapValues[t].loadColorTexture(),this._instanceDataMapValues[t].loadNormalTexture(),this._instanceDataMapValues[t].loadMetallicRoughnessTexture();for(let t=0;t<this._geoObjects.length;t++)this._geoObjects[t].updateRotation();this.update()}setColorTextureTag(e,t){const i=this._instanceDataMap.get(t);i&&(typeof e=="string"&&(i._colorTextureSrc=e,i._colorTextureImage=null),e instanceof HTMLImageElement&&(i._colorTextureSrc=null,i._colorTextureImage=e),this._instanceDataMap.set(t,i),i.loadColorTexture())}setNormalTextureTag(e,t){const i=this._instanceDataMap.get(t);i&&(typeof e=="string"&&(i._normalTextureSrc=e,i._normalTextureImage=null),e instanceof HTMLImageElement&&(i._normalTextureSrc=null,i._normalTextureImage=e),this._instanceDataMap.set(t,i),i.loadNormalTexture())}setMetallicRoughnessTextureTag(e,t){const i=this._instanceDataMap.get(t);i&&(typeof e=="string"&&(i._metallicRoughnessTextureSrc=e,i._metallicRoughnessTextureImage=null),e instanceof HTMLImageElement&&(i._metallicRoughnessTextureSrc=null,i._metallicRoughnessTextureImage=e),this._instanceDataMap.set(t,i),i.loadMetallicRoughnessTexture())}setObjectSrc(e,t){const i=this._instanceDataMap.get(t);e&&i&&i._objectSrc!==e&&(i._objectSrc=e,$.loadObj(e).then((r=>{this._updateInstanceData(r[0],t)})))}_updateInstanceData(e,t){const i=this._instanceDataMap.get(t);i&&(e.vertices.length!==i._vertexArr.length&&(i._vertexArr=e.vertices,i._changedBuffers[zn]=!0),e.normals.length!==i._normalsArr.length&&(i._normalsArr=e.normals,i._changedBuffers[On]=!0),e.indices.length!==i._indicesArr.length&&(i._indicesArr=e.indices,i._changedBuffers[Nn]=!0),e.texCoords.length!==i._texCoordArr.length&&(i._texCoordArr=e.texCoords,i._changedBuffers[jn]=!0),i._colorTextureSrc=e.colorTextureSrc,i._normalTextureSrc=e.normalTextureSrc,i._metallicRoughnessTexture=e.metallicRoughnessTextureSrc,i._colorTextureImage=e.colorTextureImage,i._normalTextureImage=e.normalTextureImage,i._metallicRoughnessTextureImage=e.metallicRoughnessTextureImage,i.loadColorTexture(),i.loadNormalTexture(),i.loadMetallicRoughnessTexture(),this._updateTag(i),this._instanceDataMapValues=Array.from(this._instanceDataMap.values()))}_addGeoObjectToArray(e){const t=e.tag;let i=this._instanceDataMap.get(t);i||(i=new eh(this),this._instanceDataMap.set(t,i),this._instanceDataMapValues=Array.from(this._instanceDataMap.values()),i._vertexArr=e.vertices,i._normalsArr=e.normals,i._indicesArr=e.indices,i._texCoordArr=e.texCoords,i._colorTextureSrc=e.object3d.colorTextureSrc,i._normalTextureSrc=e.object3d.normalTextureSrc,i._metallicRoughnessTextureSrc=e.object3d.metallicRoughnessTextureSrc,i._colorTextureImage=e.object3d.colorTextureImage,i._normalTextureImage=e.object3d.normalTextureImage,i._metallicRoughnessTextureImage=e.object3d.metallicRoughnessTextureImage,i.setMaterialParams(e.object3d.ambient,e.object3d.diffuse,e.object3d.specular,e.object3d.shininess),i.loadColorTexture(),i.loadNormalTexture(),i.loadMetallicRoughnessTexture()),e._tagDataIndex=i.numInstances++,e._tagData=i,i.geoObjects.push(e);let r=3;i._visibleArr=we(i._visibleArr,Se([],0,1,1,e.getVisibility()?1:0)),this.getRTCPosition(e.getPosition(),e._rtcPositionHigh,e._rtcPositionLow);let s,n=e._rtcPositionHigh.x,a=e._rtcPositionHigh.y,l=e._rtcPositionHigh.z;i._rtcPositionHighArr=we(i._rtcPositionHighArr,Se([],0,r,r,n,a,l)),n=e._rtcPositionLow.x,a=e._rtcPositionLow.y,l=e._rtcPositionLow.z,i._rtcPositionLowArr=we(i._rtcPositionLowArr,Se([],0,r,r,n,a,l)),n=e._entity._pickingColor.x/255,a=e._entity._pickingColor.y/255,l=e._entity._pickingColor.z/255,i._pickingColorArr=we(i._pickingColorArr,Se([],0,r,r,n,a,l)),r=4,n=e._qRot.x,a=e._qRot.y,l=e._qRot.z,s=e._qRot.w,i._qRotArr=we(i._qRotArr,Se([],0,r,r,n,a,l,s)),n=e._color.x,a=e._color.y,l=e._color.z,s=e._color.w,i._rgbaArr=we(i._rgbaArr,Se([],0,r,r,n,a,l,s)),r=3;let h=e.getScale();n=h.x,a=h.y,l=h.z,i._sizeArr=we(i._sizeArr,Se([],0,r,r,n,a,l));let c=e.getTranslate();n=c.x,a=c.y,l=c.z,i._translateArr=we(i._translateArr,Se([],0,r,r,n,a,l));let d=e.getLocalPosition();n=d.x,a=d.y,l=d.z,i._localPositionArr=we(i._localPositionArr,Se([],0,r,r,n,a,l))}_bindCommon(){let e=this._renderer,t=e.handler.programs.geo_object._program.uniforms,i=e.handler.gl,r=this._entityCollection;i.uniform3fv(t.uScaleByDistance,r.scaleByDistance),i.uniform1f(t.useLighting,r._useLighting),i.uniform3fv(t.eyePositionHigh,e.activeCamera.eyeHigh),i.uniform3fv(t.eyePositionLow,e.activeCamera.eyeLow),i.uniform3fv(t.rtcEyePositionHigh,this._rtcEyePositionHigh),i.uniform3fv(t.rtcEyePositionLow,this._rtcEyePositionLow),i.uniformMatrix4fv(t.projectionMatrix,!1,e.activeCamera.getProjectionMatrix()),i.uniformMatrix4fv(t.viewMatrix,!1,e.activeCamera.getViewMatrix()),i.uniform3fv(t.sunPosition,this._renderNode._lightPosition)}_displayOpaquePASS(){let e=this._renderer.handler.programs.geo_object,t=e._program;e.activate(),this._bindCommon();for(let i=0;i<this._instanceDataMapValues.length;i++)this._instanceDataMapValues[i].drawOpaque(t)}_displayTransparentPASS(){let e=this._renderer.handler.programs.geo_object,t=e._program;e.activate(),this._bindCommon();for(let i=0;i<this._instanceDataMapValues.length;i++)this._instanceDataMapValues[i].drawTransparent(t)}_depthPASS(){let e=this._renderer,t=e.handler.programs.geo_object_depth,i=t._program,r=i.uniforms,s=i.attributes,n=e.handler.gl,a=this._entityCollection,l=e.activeCamera;t.activate(),n.uniform3fv(r.uScaleByDistance,a.scaleByDistance),n.uniform3fv(r.rtcEyePositionHigh,this._rtcEyePositionHigh),n.uniform3fv(r.rtcEyePositionLow,this._rtcEyePositionLow),n.uniformMatrix4fv(r.projectionMatrix,!1,e.activeCamera.getProjectionMatrix()),n.uniformMatrix4fv(r.viewMatrix,!1,e.activeCamera.getViewMatrix()),n.uniform1f(r.frustumPickingColor,l.frustumColorIndex);for(let h=0;h<this._instanceDataMapValues.length;h++){let c=this._instanceDataMapValues[h];n.bindBuffer(n.ARRAY_BUFFER,c._qRotBuffer),n.vertexAttribPointer(s.qRot,c._qRotBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,c._sizeBuffer),n.vertexAttribPointer(s.aScale,c._sizeBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,c._translateBuffer),n.vertexAttribPointer(s.aTranslate,c._translateBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,c._localPositionBuffer),n.vertexAttribPointer(s.aLocalPosition,c._localPositionBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,c._rtcPositionHighBuffer),n.vertexAttribPointer(s.aRTCPositionHigh,c._rtcPositionHighBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,c._rtcPositionLowBuffer),n.vertexAttribPointer(s.aRTCPositionLow,c._rtcPositionLowBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,c._visibleBuffer),n.vertexAttribPointer(s.aDispose,c._visibleBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,c._vertexBuffer),n.vertexAttribPointer(s.aVertexPosition,c._vertexBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,c._indicesBuffer),i.drawElementsInstanced(n.TRIANGLES,c._indicesBuffer.numItems,n.UNSIGNED_INT,0,c.numInstances)}}drawDepth(){this._geoObjects.length&&this._depthPASS()}drawPicking(){this._geoObjects.length&&this.pickingEnabled&&this._pickingPASS()}_pickingPASS(){let e=this._renderer,t=e.handler.programs.geo_object_picking,i=t._program,r=i.uniforms,s=i.attributes,n=e.handler.gl,a=this._entityCollection;t.activate(),n.uniform3fv(r.uScaleByDistance,a.scaleByDistance),n.uniform3fv(r.pickingScale,a.pickingScale),n.uniform3fv(r.rtcEyePositionHigh,this._rtcEyePositionHigh),n.uniform3fv(r.rtcEyePositionLow,this._rtcEyePositionLow),n.uniformMatrix4fv(r.projectionMatrix,!1,e.activeCamera.getProjectionMatrix()),n.uniformMatrix4fv(r.viewMatrix,!1,e.activeCamera.getViewMatrix());for(let l=0;l<this._instanceDataMapValues.length;l++){let h=this._instanceDataMapValues[l];n.bindBuffer(n.ARRAY_BUFFER,h._qRotBuffer),n.vertexAttribPointer(s.qRot,h._qRotBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,h._sizeBuffer),n.vertexAttribPointer(s.aScale,h._sizeBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,h._translateBuffer),n.vertexAttribPointer(s.aTranslate,h._translateBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,h._localPositionBuffer),n.vertexAttribPointer(s.aLocalPosition,h._localPositionBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,h._pickingColorBuffer),n.vertexAttribPointer(s.aPickingColor,h._pickingColorBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,h._rtcPositionHighBuffer),n.vertexAttribPointer(s.aRTCPositionHigh,h._rtcPositionHighBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,h._rtcPositionLowBuffer),n.vertexAttribPointer(s.aRTCPositionLow,h._rtcPositionLowBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,h._visibleBuffer),n.vertexAttribPointer(s.aDispose,h._visibleBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,h._vertexBuffer),n.vertexAttribPointer(s.aVertexPosition,h._vertexBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,h._indicesBuffer),i.drawElementsInstanced(n.TRIANGLES,h._indicesBuffer.numItems,n.UNSIGNED_INT,0,h.numInstances)}}setQRotArr(e,t,i){Se(e._qRotArr,t,4,4,i.x,i.y,i.z,i.w),e._changedBuffers[Hn]=!0,this._updateTag(e)}setVisibility(e,t,i){Se(e._visibleArr,t,1,1,i?1:0),e._changedBuffers[Gn]=!0,this._updateTag(e)}setRTCPositionArr(e,t,i,r){Se(e._rtcPositionHighArr,t,3,3,i.x,i.y,i.z),Se(e._rtcPositionLowArr,t,3,3,r.x,r.y,r.z),e._changedBuffers[Dn]=!0,this._updateTag(e)}setRgbaArr(e,t,i){Se(e._rgbaArr,t,4,4,i.x,i.y,i.z,i.w),e._changedBuffers[Fn]=!0,this._updateTag(e)}setPickingColorArr(e,t,i){Se(e._pickingColorArr,t,3,3,i.x/255,i.y/255,i.z/255),e._changedBuffers[Un]=!0,this._updateTag(e)}setScaleArr(e,t,i){Se(e._sizeArr,t,3,3,i.x,i.y,i.z),e._changedBuffers[Vn]=!0,this._updateTag(e)}setTranslateArr(e,t,i){Se(e._translateArr,t,3,3,i.x,i.y,i.z),e._changedBuffers[qn]=!0,this._updateTag(e)}setLocalPositionArr(e,t,i){Se(e._localPositionArr,t,3,3,i.x,i.y,i.z),e._changedBuffers[Yn]=!0,this._updateTag(e)}_updateTag(e){e.isFree&&(e.isFree=!1,this._dataTagUpdateQueue.push(e))}update(){for(let e=0,t=this._dataTagUpdateQueue.length;e<t;e++)this._dataTagUpdateQueue[e].update();this._dataTagUpdateQueue=[]}_removeAll(){let e=this._geoObjects.length;for(;e--;){const t=this._geoObjects[e];t._tagDataIndex=-1,t._tagData=null,t._handlerIndex=-1,t._handler=null}this._geoObjects.length=0,this._geoObjects=[];for(let t=0;t<this._instanceDataMapValues.length;t++)this._instanceDataMapValues[t].clear();this._instanceDataMap.clear(),this._instanceDataMapValues=[]}clear(){this._removeAll()}getRTCPosition(e,t,i){let r=e.sub(this._relativeCenter);m.doubleToTwoFloats(r,t,i)}setRelativeCenter(e){this._relativeCenter.copy(e);for(let t=0;t<this._instanceDataMapValues.length;t++){let i=this._instanceDataMapValues[t].geoObjects;for(let r=0;r<i.length;r++)i[r].updateRTCPosition()}}_updateRTCEyePosition(){let e=this._renderer;if(e.activeCamera.isFirstPass){let t=e.activeCamera.eye.sub(this._relativeCenter);m.doubleToTwoFloat32Array(t,this._rtcEyePositionHigh,this._rtcEyePositionLow)}}draw(){this._geoObjects.length&&(this._updateRTCEyePosition(),this.update(),this._displayOpaquePASS())}drawTransparent(){this._geoObjects.length&&this._displayTransparentPASS()}add(e){e._handlerIndex===-1&&(e._handler=this,e._handlerIndex=this._geoObjects.length,this._geoObjects.push(e),this._addGeoObjectToArray(e),e.updateRotation(),e._tagData.refresh(),this._updateTag(e._tagData),e.setObjectSrc(e._objectSrc))}remove(e){e._handler&&this.__id==e._handler.__id&&this._removeGeoObject(e)}_clearDataTagQueue(){this._dataTagUpdateQueue=[]}_removeGeoObject(e){let t=e._tagData,i=e.tag;t.numInstances--;let r=!1;if(t.numInstances===0){t.clear(),this._instanceDataMap.delete(i);for(let n=0;this._instanceDataMapValues.length;n++)if(this._instanceDataMapValues[n].numInstances===0){this._instanceDataMapValues.splice(n,1);break}this._clearDataTagQueue(),r=!0}this._geoObjects.splice(e._handlerIndex,1);for(let n=e._handlerIndex,a=this._geoObjects.length;n<a;n++){let l=this._geoObjects[n];l._handlerIndex=l._handlerIndex-1}let s=e._tagDataIndex;t.geoObjects.splice(s,1);for(let n=e._tagDataIndex,a=t.geoObjects.length;n<a;n++){let l=t.geoObjects[n];l._tagDataIndex=l._tagDataIndex-1}t._rgbaArr=Pe(t._rgbaArr,4*s,4),t._rtcPositionHighArr=Pe(t._rtcPositionHighArr,3*s,3),t._rtcPositionLowArr=Pe(t._rtcPositionLowArr,3*s,3),t._qRotArr=Pe(t._qRotArr,4*s,4),t._pickingColorArr=Pe(t._pickingColorArr,3*s,3),t._sizeArr=Pe(t._sizeArr,3*s,3),t._translateArr=Pe(t._translateArr,3*s,3),t._localPositionArr=Pe(t._localPositionArr,3*s,3),t._visibleArr=Pe(t._visibleArr,s,1),e._handlerIndex=-1,e._handler=null,e._tagDataIndex=-1,e._tagData=null,r||(t.refresh(),this._updateTag(t))}};Wn.__counter__=0;let th=Wn;class ih extends In{constructor(e,t=21){super(e),this._billboards=[],this._gliphParamBuffer=null,this._fontIndexBuffer=null,this._outlineBuffer=null,this._outlineColorBuffer=null,this._gliphParamArr=new Float32Array([]),this._fontIndexArr=new Float32Array([]),this._outlineArr=new Float32Array([]),this._outlineColorArr=new Float32Array([]),this._buffersUpdateCallbacks[8]=this.createFontIndexBuffer,this._buffersUpdateCallbacks[9]=this.createOutlineBuffer,this._buffersUpdateCallbacks[10]=this.createOutlineColorBuffer,this._changedBuffers=new Array(this._buffersUpdateCallbacks.length),this._maxLetters=t}initProgram(){this._renderer&&this._renderer.handler&&this._renderer.handler.gl&&(this._renderer.handler.programs.label||(this._renderer.handler.gl.type==="webgl2"?this._renderer.handler.addProgram(new X("label",{uniforms:{viewport:"vec2",fontTextureArr:"sampler2darray",sdfParamsArr:"vec4",projectionMatrix:"mat4",viewMatrix:"mat4",eyePositionHigh:"vec3",eyePositionLow:"vec3",planetRadius:"float",scaleByDistance:"vec3",opacity:"float",isOutlinePass:"int",depthOffset:"float"},attributes:{a_outline:"float",a_gliphParam:"vec4",a_vertices:"vec2",a_texCoord:"vec4",a_positionsHigh:"vec3",a_positionsLow:"vec3",a_size:"float",a_rotation:"float",a_rgba:"vec4",a_offset:"vec3",a_fontIndex:"float"},vertexShader:`#version 300 es
103
103
  #define EMPTY - 1.0
@@ -345,7 +345,7 @@ vec2 project(vec4 p,vec2 viewport){return(0.5*p.xyz/p.w+0.5).xy*viewport;}mat2 r
345
345
  <path d="M5 15H3v4c0 1.1.9 2 2 2h4v-2H5v-4zM5 5h4V3H5c-1.1 0-2 .9-2 2v4h2V5zm14-2h-4v2h4v4h2V5c0-1.1-.9-2-2-2zm0 16h-4v2h4c1.1 0 2-.9 2-2v-4h-2v4zM12 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/>
346
346
  </svg>`,title:"Lock/Unlock camera view"});return r.appendTo(i),r.events.on("change",(s=>{s?this.model.lockView():this.model.unlockView()})),this.events.on("visibility",(s=>{s||(r.events.stopPropagation(),r.setActive(!1))})),this.events.on("visibility",this._onVisibility),this._relativePositionView.appendTo(this.container),this.model.planet&&(this._lonView.appendTo(this.container),this._latView.appendTo(this.container),this._heightView.appendTo(this.container)),this._xView.appendTo(this.container),this._yView.appendTo(this.container),this._zView.appendTo(this.container),this._absXView.appendTo(this.container),this._absYView.appendTo(this.container),this._absZView.appendTo(this.container),this._pitchView.appendTo(this.container),this._yawView.appendTo(this.container),this._rollView.appendTo(this.container),this._absolutePitchView.appendTo(this.container),this._absoluteYawView.appendTo(this.container),this._absoluteRollView.appendTo(this.container),this._scaleView.appendTo(this.container),this._scaleXView.appendTo(this.container),this._scaleYView.appendTo(this.container),this._scaleZView.appendTo(this.container),this.model.planet&&this._groundBtn.appendTo(this.container),this._relativePositionView.events.on("change",this._onChangeRelativePosition),this._lonView.events.on("change",this._onChangeLon),this._latView.events.on("change",this._onChangeLat),this._heightView.events.on("change",this._onChangeHeight),this._xView.events.on("change",this._onChangeX),this._yView.events.on("change",this._onChangeY),this._zView.events.on("change",this._onChangeZ),this._absXView.events.on("change",this._onChangeAbsoluteX),this._absYView.events.on("change",this._onChangeAbsoluteY),this._absZView.events.on("change",this._onChangeAbsoluteZ),this._pitchView.events.on("change",this._onChangePitch),this._yawView.events.on("change",this._onChangeYaw),this._rollView.events.on("change",this._onChangeRoll),this._absolutePitchView.events.on("change",this._onChangeAbsolutePitch),this._absoluteYawView.events.on("change",this._onChangeAbsoluteYaw),this._absoluteRollView.events.on("change",this._onChangeAbsoluteRoll),this._scaleView.events.on("change",this._onChangeScale),this._scaleXView.events.on("change",this._onChangeScaleX),this._scaleYView.events.on("change",this._onChangeScaleY),this._scaleZView.events.on("change",this._onChangeScaleZ),this._groundBtn.appendTo(this.container),this._groundBtn.events.on("click",this._onGround),this}remove(){super.remove(),this._clearSceneEvents()}_initSceneEvents(){this.model.events.on("select",this._onSelect),this.model.events.on("unselect",this._onUnselect),this.model.events.on("position",this._onPosition),this.model.events.on("pitch",this._onPitch),this.model.events.on("yaw",this._onYaw),this.model.events.on("roll",this._onRoll)}_clearSceneEvents(){this.model.events.off("select",this._onSelect),this.model.events.off("unselect",this._onUnselect),this.model.events.off("position",this._onPosition),this.model.events.off("pitch",this._onPitch),this.model.events.off("yaw",this._onYaw),this.model.events.off("roll",this._onRoll)}_refresh(e){e.parent?this._relativePositionView.disabled=!1:this._relativePositionView.disabled=!0,this._relativePositionView.checked=e.relativePosition;let t=e.getLonLat();this._lonView.stopPropagation(),this._latView.stopPropagation(),this._heightView.stopPropagation(),this._lonView.value=t.lon,this._latView.value=t.lat,this._heightView.value=t.height;let i=e.getCartesian();this._xView.stopPropagation(),this._yView.stopPropagation(),this._zView.stopPropagation(),this._xView.value=i.x,this._yView.value=i.y,this._zView.value=i.z,i=e.getAbsoluteCartesian(),this._absXView.stopPropagation(),this._absYView.stopPropagation(),this._absZView.stopPropagation(),this._absXView.value=i.x,this._absYView.value=i.y,this._absZView.value=i.z,this._pitchView.stopPropagation(),this._yawView.stopPropagation(),this._rollView.stopPropagation(),this._pitchView.value=e.getPitch()*J,this._yawView.value=e.getYaw()*J,this._rollView.value=e.getRoll()*J,this._absolutePitchView.stopPropagation(),this._absoluteYawView.stopPropagation(),this._absoluteRollView.stopPropagation(),this._absolutePitchView.value=e.getAbsolutePitch()*J,this._absoluteYawView.value=e.getAbsoluteYaw()*J,this._absoluteRollView.value=e.getAbsoluteRoll()*J,this._scaleView.stopPropagation();let r=e.getScale();r.x===r.y&&r.y===r.z?this._scaleView.value=r.x:this._scaleView.value=1,this._scaleXView.stopPropagation(),this._scaleYView.stopPropagation(),this._scaleZView.stopPropagation(),this._scaleXView.value=r.x,this._scaleYView.value=r.y,this._scaleZView.value=r.z}hide(){super.hide(),this.model.events.stopPropagation(),this.model.unselect()}}const Cc=["lockview","unlockview"];class Ya extends ee{constructor(e={}){super(e),this._onLockViewDraw=()=>{this.renderer&&this._lockEntity&&(this._isFromTheBack||this.renderer.activeCamera.viewDistance(this._lockEntity.getAbsoluteCartesian(),this._lockDistance))},this._onMouseWheel=t=>{if(this.renderer&&this._lockEntity&&!this._isFromTheBack){let i=this.renderer.activeCamera.eye.distance(this._lockEntity.getAbsoluteCartesian());this._lockDistance-=.33*i*Math.sign(t.wheelDelta),this._lockDistance<.001&&(this._lockDistance=.001),this.renderer.activeCamera.viewDistance(this._lockEntity.getAbsoluteCartesian(),this._lockDistance)}},this._onMouseMove=t=>{if(this._lockEntity&&this.renderer&&(t.rightButtonDown||this.renderer.events.isKeyPressed(W.KEY_ALT))){let i=this._lockEntity.getAbsoluteCartesian(),r=this.renderer.activeCamera,s=.5/G;s>.007&&(s=.007),this.planet?r.rotateHorizontal(s*(t.x-t.prev_x),!1,i,i.isZero()?m.UP:i.normal()):r.rotateHorizontal(s*(t.x-t.prev_x),!1,i,m.UP),r.rotateVertical(s*(t.y-t.prev_y),i),this._viewDir=i.sub(r.eye).normalize()}},this.events=le(Cc),this._name="CameraLock",this.planet=e.planet||null,this._lockDistance=0,this._isFromTheBack=!1,this._lockEntity=null,this._viewDir=new m(0,0,0)}onactivate(){this.renderer}ondeactivate(){this.renderer&&this.unlockView()}oninit(){this.activate(),this.renderer}flyCartesian(e,t=120){if(!e.isZero()&&this.renderer)if(this.unlockView(),this.planet){let i=this.planet.camera;this.isVisibleDistance(e)&&i.flyDistance(e,t),i.eye.distance(e)<1e6?i.flyDistance(e,t):i.viewDistance(e,t)}else this.renderer.activeCamera.viewDistance(e,t)}lockView(e,t=!1){if(!this.renderer)return;this._lockDistance=this._getDistance(e,this._lockEntity),this._isFromTheBack=t,this._deactivateLockViewEvents(),this._lockEntity=e;let i=this.renderer.activeCamera;this.planet&&this.planet.camera.stopFlying(),i.viewDistance(e.getAbsoluteCartesian(),this._lockDistance),this._deactivateNav(),this._activateLockViewEvents(),this._viewDir=e.getAbsoluteCartesian().sub(i.eye).normalize(),this.events.dispatch(this.events.lockview,this._lockEntity,t)}_activateNav(){this.renderer&&this.renderer.controls.mouseNavigation&&this.renderer.controls.mouseNavigation.activate(),this.renderer&&this.renderer.controls.simpleNavigation&&this.renderer.controls.simpleNavigation.activate()}_deactivateNav(){this.renderer&&this.renderer.controls.mouseNavigation&&(this.renderer.controls.mouseNavigation.deactivate(),this.renderer.controls.mouseNavigation.stop()),this.renderer&&this.renderer.controls.simpleNavigation&&this.renderer.controls.simpleNavigation.deactivate()}unlockView(){this._lockEntity&&(this._deactivateLockViewEvents(),this._activateNav(),this.events.dispatch(this.events.unlockview,this._lockEntity),this._lockEntity=null)}_getCenterDist(){return this.renderer&&this.renderer.getDistanceFromPixel(this.renderer.handler.getCenter())||0}_getDistance(e,t){if(this.renderer){let i=e.getAbsoluteCartesian(),r=this.renderer.activeCamera,s=r.eye.distance(i);return t&&(s=r.eye.distance(t.getAbsoluteCartesian())),this.isVisibleDistance(i)?s:r.eye.distance(i)<1e6?this._getCenterDist():120}return 0}isVisibleDistance(e,t=0){if(this.planet){let i=this.planet.ellipsoid.equatorialSize,r=this.planet.camera.eye;return r.distance(e)<Math.sqrt(r.length2()-i*i)+t}return!0}get lockEntity(){return this._lockEntity}flyLonLat(e,t=120){if(this.planet){let i=this.planet.ellipsoid.lonLatToCartesian(e);this.flyCartesian(i,t)}}_activateLockViewEvents(){this.renderer&&(this.renderer.events.on("mousewheel",this._onMouseWheel),this.renderer.events.on("mousemove",this._onMouseMove),this.renderer.events.on("draw",this._onLockViewDraw))}_deactivateLockViewEvents(){this.renderer&&(this.renderer.events.off("mousewheel",this._onMouseWheel),this.renderer.events.off("mousemove",this._onMouseMove),this._lockEntity&&this.renderer.events.off("draw",this._onLockViewDraw))}}const Tc=["click"];class Ec extends Ce{constructor(e){super({template:Ne(`<button class="og-object3d-collection__item">
347
347
  <div class="og-object3d-collection__item_name">{name}</div>
348
- </button>`,{name:e.model.name}),...e}),this.events=le(Tc)}render(e){var t;return super.render(e),(t=this.el)==null||t.addEventListener("click",(i=>{this.events.dispatch(this.events.click,this.model,this,i)})),this}}const Ac=["select"];class Lc extends Ce{constructor(e){super({template:'<div class="og-object3d-collection"></div>',model:e.model,...e}),this._onAdd=t=>{this._addItem(t)},this.events=le(Ac),this._activeView=null}_addItem(e){let t=new Ec({model:e});t.appendTo(this.el),t.events.on("click",(i=>{var r,s;this._activeView&&((r=this._activeView.el)==null||r.classList.remove("active")),this._activeView=t,(s=this._activeView.el)==null||s.classList.add("active"),this.events.dispatch(this.events.select,i,t)}))}render(e){super.render(e);let t=this.model.getItems();for(let i of t)this._addItem(i);return this._initEvents(),this}_initEvents(){this.model.events.on("add",this._onAdd)}}const Pc=["select"];class Sc extends nt{constructor(e){super({classList:["og-object3d-manager"],title:"Object3D Collection",visible:!1,resizable:!0,useHide:!0,top:25,right:85,width:252,height:480,minHeight:100,minWidth:100}),this._onLoadClick=()=>{let t=new Ce({initRender:!0,template:'<input type="file" accept=".obj,.mtl" multiple />'});t.el&&(t.el.addEventListener("change",(i=>{const r=i.target;if(r.files){const s=Array.from(r.files),n=s.find((l=>l.name.toLowerCase().endsWith(".obj"))),a=s.find((l=>l.name.toLowerCase().endsWith(".mtl")));n&&(async function(l,h){return await $.readFileObj(l,h).then((c=>({name:l.name,objects:h?c:[$.merge(c)]})))})(n,a).then(this._addObject)}})),t.el.click())},this._addObject=t=>{this._object3dCollectionView.model.addItem(t)},this.events=le(Pc),this._object3dCollectionView=new Lc({model:e.model})}render(e){var t;super.render(e);let i=document.createElement("div");i.classList.add("og-editor_toolbar"),(t=this.container)==null||t.appendChild(i);let r=new st({classList:["og-editor_toolbar-button"],icon:'<svg class="svg-icon" style="vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M426.666667 170.666667H170.666667c-47.146667 0-84.906667 38.186667-84.906667 85.333333L85.333333 768c0 47.146667 38.186667 85.333333 85.333334 85.333333h682.666666c47.146667 0 85.333333-38.186667 85.333334-85.333333V341.333333c0-47.146667-38.186667-85.333333-85.333334-85.333333H512l-85.333333-85.333333z" /></svg>',title:"Load 3D object"});return r.appendTo(i),r.events.on("click",this._onLoadClick),this._object3dCollectionView.appendTo(this.container),this._object3dCollectionView.events.on("select",(s=>{this.events.dispatch(this.events.select,s)})),this}}const Mc=["add","remove"];class ss{constructor(e={}){this.events=le(Mc,this),this._items=ss.createItemsMap(e.collection||[])}static createItemsMap(e){let t=new Map;for(let i=0;i<e.length;i++)t.set(e[i].name,e[i]);return t}getItem(e){return this._items.get(e)}addItem(e,t=!1){this._items.has(e.name)&&!t||(this._items.set(e.name,e),this.events.dispatch(this.events.add,e))}getItems(){return Array.from(this._items,(([e,t])=>t))}}class ns extends ee{constructor(e={}){super({name:"CameraFrameComposer",autoActivate:!0,...e}),this._onPostdraw=()=>{for(let t=0,i=this._frameHandlers.length;t<i;t++)this._frameHandlers[t].frame()},this._cameraLayer=new _t({scaleByDistance:[100,1e6,1],pickingEnabled:!1}),this._cameraScene=new at("CameraScene"),this._frameHandlers=e.frameHandlers||[]}get frameHandlers(){return[...this._frameHandlers]}add(e){e.addTo(this),this._cameraLayer.add(e.cameraEntity)}oninit(){super.oninit(),this._cameraLayer.addTo(this._cameraScene)}activate(){super.activate(),this.renderer&&(this.renderer.events.on("postdraw",this._onPostdraw),this.renderer.addNode(this._cameraScene))}deactivate(){super.deactivate(),this.renderer&&(this.renderer.events.off("postdraw",this._onPostdraw),this.renderer.removeNode(this._cameraScene))}}let Rc=$.createFrustum();class Wa{constructor(e){this.camera=e.camera,this.frameBuffer=e.frameBuffer,this.frameHandler=e.frameHandler||null,this._composer=null,this._composerIndex=-1,this.showFrustum=e.showFrustum==null||e.showFrustum,this.cameraEntity=new V({visibility:!0,scale:this.frustumScale,geoObject:{tag:"frustum",color:"rgba(0,255,0,0.20)",object3d:Rc}}),this.frameBuffer.init()}get frustumScale(){return $.getFrustumScaleByCameraAspectRatio(1e3,this.camera.getViewAngle(),this.camera.getAspectRatio())}addTo(e){this._composer||(this._composer=e,this._composerIndex=e.frameHandlers.length,this._composer._frameHandlers.push(this))}remove(){this._composer&&(this._composer._frameHandlers.splice(this._composerIndex,1),this._composer=null,this._composerIndex=-1)}frame(){if(this.frameHandler&&this.frameBuffer.handler.gl&&(this.frameHandler(this),this.showFrustum)){let e=this.camera,t=$.getFrustumScaleByCameraAngles(100,e.horizontalViewAngle,e.verticalViewAngle);this.cameraEntity.setScale3v(t),this.cameraEntity.setCartesian3v(e.eye),this.cameraEntity.setAbsolutePitch(e.getAbsolutePitch()),this.cameraEntity.setAbsoluteYaw(e.getAbsoluteYaw()),this.cameraEntity.setAbsoluteRoll(e.getAbsoluteRoll())}}}function Yt(o){let e=1/Math.sqrt(o[0]*o[0]+o[1]*o[1]+o[2]*o[2]);o[0]*=e,o[1]*=e,o[2]*=e,o[3]*=e}class $a{constructor(e={}){this._pickingColorU=new Float32Array([0,0,0]),this._f=[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],this.projectionMatrix=new re,this.inverseProjectionMatrix=new re,this.projectionViewMatrix=new re,this.projectionViewRTEMatrix=new re,this.inverseProjectionViewMatrix=new re,this.left=0,this.right=0,this.bottom=0,this.top=0,this.near=0,this.far=0,this.cameraFrustumIndex=e.cameraFrustumIndex!=null?e.cameraFrustumIndex:-1,this.setProjectionMatrix(e.fov||30,e.aspect||1,e.near||1,e.far||1e3)}getRightPlane(){return this._f[0]}getLeftPlane(){return this._f[1]}getBottomPlane(){return this._f[2]}getTopPlane(){return this._f[3]}getBackwardPlane(){return this._f[4]}getForwardPlane(){return this._f[5]}getProjectionViewMatrix(){return this.projectionViewMatrix._m}getProjectionViewRTEMatrix(){return this.projectionViewRTEMatrix._m}getProjectionMatrix(){return this.projectionMatrix._m}getInverseProjectionMatrix(){return this.inverseProjectionMatrix._m}setProjectionMatrix(e,t,i,r,s,n=10){if(s){let a=n*Math.tan(e*$e),l=a*t;this._setFrustumParams(a,l,i,r),this.projectionMatrix.setOrthographic(this.left,this.right,this.bottom,this.top,this.near,this.far)}else{let a=i*Math.tan(e*$e),l=a*t;this._setFrustumParams(a,l,i,r),this.projectionMatrix.setPerspective(this.left,this.right,this.bottom,this.top,this.near,this.far)}this.projectionMatrix.inverseTo(this.inverseProjectionMatrix)}_setFrustumParams(e,t,i,r){this.top=e,this.right=t,this.bottom=-this.top,this.left=-this.right,this.near=i,this.far=r}setProjectionViewRTEMatrix(e){this.projectionViewRTEMatrix=this.projectionMatrix.mul(e)}setViewMatrix(e){this.projectionViewMatrix=this.projectionMatrix.mul(e),this.projectionViewMatrix.inverseTo(this.inverseProjectionViewMatrix);let t=this.projectionViewMatrix._m;this._f[0][0]=t[3]-t[0],this._f[0][1]=t[7]-t[4],this._f[0][2]=t[11]-t[8],this._f[0][3]=t[15]-t[12],Yt(this._f[0]),this._f[1][0]=t[3]+t[0],this._f[1][1]=t[7]+t[4],this._f[1][2]=t[11]+t[8],this._f[1][3]=t[15]+t[12],Yt(this._f[1]),this._f[2][0]=t[3]+t[1],this._f[2][1]=t[7]+t[5],this._f[2][2]=t[11]+t[9],this._f[2][3]=t[15]+t[13],Yt(this._f[2]),this._f[3][0]=t[3]-t[1],this._f[3][1]=t[7]-t[5],this._f[3][2]=t[11]-t[9],this._f[3][3]=t[15]-t[13],Yt(this._f[3]),this._f[4][0]=t[3]-t[2],this._f[4][1]=t[7]-t[6],this._f[4][2]=t[11]-t[10],this._f[4][3]=t[15]-t[14],Yt(this._f[4]),this._f[5][0]=t[3]+t[2],this._f[5][1]=t[7]+t[6],this._f[5][2]=t[11]+t[10],this._f[5][3]=t[15]+t[14],Yt(this._f[5])}containsPoint(e){for(let t=0;t<6;t++)if(e.dotArr(this._f[t])+this._f[t][3]<=0)return!1;return!0}containsSphereBottomExc(e){let t=-e.radius,i=this._f;return!(e.center.dotArr(i[0])+i[0][3]<=t||e.center.dotArr(i[1])+i[1][3]<=t||e.center.dotArr(i[3])+i[3][3]<=t||e.center.dotArr(i[4])+i[4][3]<=t||e.center.dotArr(i[5])+i[5][3]<=t)}containsSphereButtom(e){let t=-e.radius,i=this._f;return!(e.center.dotArr(i[2])+i[2][3]<=t)}containsSphere(e){let t=-e.radius,i=this._f;return!(e.center.dotArr(i[0])+i[0][3]<=t||e.center.dotArr(i[1])+i[1][3]<=t||e.center.dotArr(i[2])+i[2][3]<=t||e.center.dotArr(i[3])+i[3][3]<=t||e.center.dotArr(i[4])+i[4][3]<=t||e.center.dotArr(i[5])+i[5][3]<=t)}containsSphere2(e,t){let i=-t;return!(e.dotArr(this._f[0])+this._f[0][3]<=i||e.dotArr(this._f[1])+this._f[1][3]<=i||e.dotArr(this._f[2])+this._f[2][3]<=i||e.dotArr(this._f[3])+this._f[3][3]<=i||e.dotArr(this._f[4])+this._f[4][3]<=i||e.dotArr(this._f[5])+this._f[5][3]<=i)}containsBox(e){let t,i,r=!0;for(let s=0;s<6;s++){t=0,i=0;for(let n=0;n<8&&(i===0||t===0);n++)e.vertices[n].dotArr(this._f[s])+this._f[s][3]<0?t++:i++;if(i===0)return!1;t>0&&(r=!0)}return r}}const K=class{};K.Linear=o=>o,K.QuadIn=o=>o*o,K.QuadOut=o=>1-(1-o)*(1-o),K.QuadInOut=o=>o<.5?2*o*o:1-Math.pow(-2*o+2,2)/2,K.CubicIn=o=>o*o*o,K.CubicOut=o=>1-Math.pow(1-o,3),K.CubicInOut=o=>o<.5?4*o*o*o:1-Math.pow(-2*o+2,3)/2,K.QuartIn=o=>o*o*o*o,K.QuartOut=o=>1-Math.pow(1-o,4),K.QuartInOut=o=>o<.5?8*o*o*o*o:1-Math.pow(-2*o+2,4)/2,K.QuintIn=o=>o*o*o*o*o,K.QuintOut=o=>1-Math.pow(1-o,5),K.QuintInOut=o=>o<.5?16*o*o*o*o*o:1-Math.pow(-2*o+2,5)/2,K.SineIn=o=>1-Math.cos(o*Math.PI/2),K.SineOut=o=>Math.sin(o*Math.PI/2),K.SineInOut=o=>-(Math.cos(Math.PI*o)-1)/2,K.ExpoIn=o=>o===0?0:Math.pow(2,10*o-10),K.ExpoOut=o=>o===1?1:1-Math.pow(2,-10*o),K.ExpoInOut=o=>o===0?0:o===1?1:o<.5?Math.pow(2,20*o-10)/2:(2-Math.pow(2,-20*o+10))/2,K.CircIn=o=>1-Math.sqrt(1-Math.pow(o,2)),K.CircOut=o=>Math.sqrt(1-Math.pow(o-1,2)),K.CircInOut=o=>o<.5?(1-Math.sqrt(1-Math.pow(2*o,2)))/2:(Math.sqrt(1-Math.pow(-2*o+2,2))+1)/2,K.BackIn=o=>2.70158*o*o*o-1.70158*o*o,K.BackOut=o=>1+2.70158*Math.pow(o-1,3)+1.70158*Math.pow(o-1,2),K.BackInOut=o=>{const e=2.5949095;return o<.5?Math.pow(2*o,2)*(7.189819*o-e)/2:(Math.pow(2*o-2,2)*((e+1)*(2*o-2)+e)+2)/2},K.ElasticIn=o=>{const e=2*Math.PI/3;return o===0?0:o===1?1:-Math.pow(2,10*o-10)*Math.sin((10*o-10.75)*e)},K.ElasticOut=o=>{const e=2*Math.PI/3;return o===0?0:o===1?1:Math.pow(2,-10*o)*Math.sin((10*o-.75)*e)+1},K.ElasticInOut=o=>{const e=2*Math.PI/4.5;return o===0?0:o===1?1:o<.5?-Math.pow(2,20*o-10)*Math.sin((20*o-11.125)*e)/2:Math.pow(2,-20*o+10)*Math.sin((20*o-11.125)*e)/2+1},K.BounceOut=o=>o<1/2.75?7.5625*o*o:o<2/2.75?7.5625*(o-=1.5/2.75)*o+.75:o<2.5/2.75?7.5625*(o-=2.25/2.75)*o+.9375:7.5625*(o-=2.625/2.75)*o+.984375,K.BounceIn=o=>1-K.BounceOut(1-o),K.BounceInOut=o=>o<.5?.5*(1-K.BounceOut(1-2*o)):.5*(K.BounceOut(2*o-1)+1);let Bc=K;const kc=["viewchange","moveend","flystart","flyend","flystop"],Xa=Bc.CubicInOut,Za=class xl{constructor(e={}){if(this.__id=xl.__counter__++,this.events=le(kc,this),this._isOrthographic=e.isOrthographic??!1,this._focusDistance=e.focusDistance!=null?e.focusDistance:10,this._width=e.width||1,this._height=e.height||1,this.eye=e.eye||new m,this.eyeHigh=new Float32Array(3),this.eyeLow=new Float32Array(3),this._viewAngle=e.viewAngle||47,this._horizontalViewAngle=0,this._viewMatrix=new re,this._viewMatrixRTE=new re,this._normalMatrix=new bt,this._r=new m(1,0,0),this._u=new m(0,1,0),this._b=new m(0,0,1),this._f=this._b.negateTo(),this._pr=this._r.clone(),this._pu=this._u.clone(),this._pb=this._b.clone(),this._peye=this.eye.clone(),this.isMoving=!1,this._flight=null,this._completeCallback=null,this._frameCallback=null,this._flying=!1,this._tanViewAngle_hrad=0,this._tanViewAngle_hradOneByHeight=0,this.frustums=[],this.frustumColors=[],e.frustums)for(let t=0,i=e.frustums.length;t<i;t++){let r=e.frustums[t],s=new $a({fov:this._viewAngle,aspect:this.getAspectRatio(),near:r[0],far:r[1]});s.cameraFrustumIndex=this.frustums.length,this.frustums.push(s),this.frustumColors.push(s._pickingColorU[0],s._pickingColorU[1],s._pickingColorU[2])}else{let t=1,i=500,r=new $a({fov:this._viewAngle,aspect:this.getAspectRatio(),near:t,far:i});r.cameraFrustumIndex=this.frustums.length,this.frustums.push(r),this.frustumColors.push(r._pickingColorU[0],r._pickingColorU[1],r._pickingColorU[2])}this.FARTHEST_FRUSTUM_INDEX=this.frustums.length-1,this.currentFrustumIndex=0,this.frustumColorIndex=0,this.isFirstPass=!1,this._projSizeConst=0,this.set(e.eye||new m(0,0,1),e.look||new m,e.up||new m(0,1,0))}get isOrthographic(){return this._isOrthographic}set isOrthographic(e){this._isOrthographic!==e&&(this._isOrthographic=e,this.refresh())}get focusDistance(){return this._focusDistance}set focusDistance(e){e!==this._focusDistance&&(this._focusDistance=e,this._isOrthographic&&this.refresh())}get id(){return this.__id}flyCartesian(e,t={}){this.stopFlying(),t.look=t.look||m.ZERO,t.up=t.up||m.UP,t.duration=t.duration||800;const i=t.ease||Xa;this._completeCallback=t.completeCallback||(()=>{}),this._frameCallback=t.frameCallback||(()=>{}),t.startCallback&&t.startCallback.call(this);let r=this.eye.clone(),s=this._u,n=this._b,a=t.up,l=e.clone(),h=m.sub(e,t.look),c=a.cross(h);h.normalize(),c.normalize();let d=h.cross(c);this._flight={fly:u=>{let g=1-i(u),f=r.smerp(l,g),p=s.smerp(d,g),_=m.add(f,n.smerp(h,g).negateTo()),v=new m(f.x-_.x,f.y-_.y,f.z-_.z),x=p.cross(v);v.normalize(),x.normalize();let y=v.cross(x);return{eye:f,n:v,u:x,v:y}},duration:t.duration,startedAt:Date.now()},this._flying=!0,this.events.dispatch(this.events.flystart,this)}stopFlying(){this._flying&&(this._flying=!1,this._flight=null,this._frameCallback=null,this.events.dispatch(this.events.flystop,this))}checkFly(){if(this._flying&&this._flight!==null){let e=Math.min((Date.now()-this._flight.startedAt)/this._flight.duration,1);const t=this._flight.fly(e);this.eye=t.eye,this._r=t.u,this._u=t.v,this._b=t.n,this._f.set(-this._b.x,-this._b.y,-this._b.z),this._frameCallback&&this._frameCallback(),this.update(),e>=1&&(this.stopFlying(),this._completeCallback&&(this.events.dispatch(this.events.flyend,this),this._completeCallback(),this._completeCallback=null))}}isFlying(){return this._flying}checkMoveEnd(){let e=this._r,t=this._u,i=this._b,r=this.eye;this._peye.equal(r)&&this._pr.equal(e)&&this._pu.equal(t)&&this._pb.equal(i)?(this.isMoving&&this.events.dispatch(this.events.moveend,this),this.isMoving=!1):this.isMoving=!0,this._pr.copy(e),this._pu.copy(t),this._pb.copy(i),this._peye.copy(r)}bindFrustumsPickingColors(e){for(let t=0;t<this.frustums.length;t++)e.assignPickingColor(this.frustums[t])}_init(e){this._setProj(this._viewAngle,this.getAspectRatio()),this.set(e.eye||new m(0,0,1),e.look||new m,e.up||new m(0,1,0))}getUp(){return this._u.clone()}getDown(){return this._u.negateTo()}getRight(){return this._r.clone()}getLeft(){return this._r.negateTo()}getForward(){return this._f.clone()}getBackward(){return this._b.clone()}update(){let e=this._r,t=this._u,i=this._b,r=this.eye;m.doubleToTwoFloat32Array(r,this.eyeHigh,this.eyeLow),this._viewMatrix.set([e.x,t.x,i.x,0,e.y,t.y,i.y,0,e.z,t.z,i.z,0,-r.dot(e),-r.dot(t),-r.dot(i),1]),this._viewMatrixRTE.set([e.x,t.x,i.x,0,e.y,t.y,i.y,0,e.z,t.z,i.z,0,0,0,0,1]);for(let s=0,n=this.frustums.length;s<n;s++)this.frustums[s].setViewMatrix(this._viewMatrix),this.frustums[s].setProjectionViewRTEMatrix(this._viewMatrixRTE);this.events.dispatch(this.events.viewchange,this)}refresh(){this._setProj(this._viewAngle,this.getAspectRatio()),this.update()}get width(){return this._width}get height(){return this._height}setViewportSize(e,t){this._width=e,this._height=t,this.refresh()}getAspectRatio(){return this._width/this._height}_setProj(e,t){this._viewAngle=e;for(let s=0,n=this.frustums.length;s<n;s++){let a=this.frustums[s];a.setProjectionMatrix(e,t,a.near,a.far,this._isOrthographic,this._focusDistance)}var i,r;this._horizontalViewAngle=(i=e,r=t,or*Math.atan(Math.tan($e*i)*r)),this._updateViewportParameters()}_updateViewportParameters(){this._tanViewAngle_hrad=Math.tan(this._viewAngle*$e),this._tanViewAngle_hradOneByHeight=this._tanViewAngle_hrad*(1/this._height),this._projSizeConst=Math.min(this._width<512?512:this._width,this._height<512?512:this._height)/(this._viewAngle*G)}setViewAngle(e){this._viewAngle=e,this.refresh()}getViewAngle(){return this._viewAngle}get viewAngle(){return this._viewAngle}get verticalViewAngle(){return this._viewAngle}get horizontalViewAngle(){return this._horizontalViewAngle}set(e,t,i){return this.eye.x=e.x,this.eye.y=e.y,this.eye.z=e.z,t=t||this._b,i=i||this._u,this._b.x=e.x-t.x,this._b.y=e.y-t.y,this._b.z=e.z-t.z,this._r.copy(i.cross(this._b)),this._b.normalize(),this._r.normalize(),this._u.copy(this._b.cross(this._r)),this._f.set(-this._b.x,-this._b.y,-this._b.z),this}look(e,t){this._b.set(this.eye.x-e.x,this.eye.y-e.y,this.eye.z-e.z),this._r.copy((t||this._u).cross(this._b)),this._b.normalize(),this._f.set(-this._b.x,-this._b.y,-this._b.z),this._r.normalize(),this._u.copy(this._b.cross(this._r))}slide(e,t,i){this.eye.x+=e*this._r.x+t*this._u.x+i*this._b.x,this.eye.y+=e*this._r.y+t*this._u.y+i*this._b.y,this.eye.z+=e*this._r.z+t*this._u.z+i*this._b.z}setRoll(e){let t=Math.cos(e),i=Math.sin(e),r=this._r.clone();this._r.set(t*r.x-i*this._u.x,t*r.y-i*this._u.y,t*r.z-i*this._u.z),this._u.set(i*r.x+t*this._u.x,i*r.y+t*this._u.y,i*r.z+t*this._u.z)}setPitch(e){let t=Math.cos(e),i=Math.sin(e),r=this._b;this._b.set(t*r.x-i*this._u.x,t*r.y-i*this._u.y,t*r.z-i*this._u.z),this._u.set(i*r.x+t*this._u.x,i*r.y+t*this._u.y,i*r.z+t*this._u.z)}setYaw(e){let t=Math.cos(e),i=Math.sin(e),r=this._r;this._r.set(t*r.x-i*this._b.x,t*r.y-i*this._b.y,t*r.z-i*this._b.z),this._b.set(i*r.x+t*this._b.x,i*r.y+t*this._b.y,i*r.z+t*this._b.z)}setPitchYawRoll(e,t,i){let r=new O;r.setPitchYawRoll(e,t,i),this.setRotation(r)}getPitch(){return this.getRotation().getPitch()}getYaw(){return this.getRotation().getYaw()}getRoll(){return this.getRotation().getRoll()}getAbsolutePitch(){return this.getRotation().getPitch()}getAbsoluteYaw(){return this.getRotation().getYaw()}getAbsoluteRoll(){return this.getRotation().getRoll()}getRotation(){return O.getLookRotation(this._f,this._u).conjugate()}setRotation(e,t,i,r){e.mulVec3Res(t||new m(0,1,0),this._u),e.mulVec3Res(i||new m(1,0,0),this._r),e.mulVec3Res(r||new m(0,0,1),this._b),this._f.set(-this._b.x,-this._b.y,-this._b.z)}rotate(e){e.mulVec3Res(this._u,this._u),e.mulVec3Res(this._r,this._r),e.mulVec3Res(this._b,this._b),this._f.set(-this._b.x,-this._b.y,-this._b.z)}unproject2v(e,t,i){return this.unproject(e.x,e.y,t,i)}unproject(e,t,i,r){let s=.5*this._width,n=.5*this._height,a=(e-s)/s,l=-(t-n)/n,h=this.frustums[0];if(this.isOrthographic){if(i){let c=.5*(h.right-h.left)*a,d=.5*(h.top-h.bottom)*l,u=this.getUp().scale(d),g=this.getRight().scale(c),f=u.addA(g),p=this.eye.add(f),_=this.getForward(),v=p.addA(_.scaleTo(i));return r&&r.copy(v),v.sub(this.eye).normalize()}return this.getForward()}{let c=h.inverseProjectionViewMatrix,d=c.mulVec4(new te(a,l,-1,1)).affinity();return c.mulVec4(new te(a,l,0,1)).affinity().subA(d).toVec3().normalize()}}project3v(e){return this.project(e.x,e.y,e.z)}project(e,t,i){let r=this.frustums[0].projectionViewMatrix.mulVec4(new te(e,t,i,1));return new N((1+r.x/r.w)*this._width*.5,(1-r.y/r.w)*this._height*.5)}rotateAround(e,t=!1,i=m.ZERO,r=m.UP){r=t?this._u:r;let s=re.getRotation(e,r),n=re.getRotationAroundPoint(e,i,r);this.eye=n.mulVec3(this.eye),this._u=s.mulVec3(this._u).normalize(),this._r=s.mulVec3(this._r).normalize(),this._b=s.mulVec3(this._b).normalize(),this._f.set(-this._b.x,-this._b.y,-this._b.z)}rotateHorizontal(e,t,i,r){this.rotateAround(e,t,i,r)}rotateVertical(e,t){this.rotateAround(e,!1,t,this._r)}projectedSize(e,t){if(this.isOrthographic){const i=this.frustums[0].projectionMatrix._m;return t*(this._height*i[5]*.5)}return Math.atan(t/this.eye.distance(e))*this._projSizeConst}getViewMatrix(){return this._viewMatrix._m}getNormalMatrix(){return this._normalMatrix._m}setCurrentFrustum(e){this.currentFrustumIndex=e,this.frustumColorIndex=10*(e+1)/255,this.isFirstPass=e===this.FARTHEST_FRUSTUM_INDEX}getCurrentFrustum(){return this.currentFrustumIndex}containsSphere(e){for(let t=0;t<this.frustums.length;t++)if(this.frustums[t].containsSphere(e))return!0;return!1}get frustum(){return this.frustums[this.currentFrustumIndex]}getProjectionMatrix(){return this.frustum.projectionMatrix._m}getProjectionViewMatrix(){return this.frustum.projectionViewMatrix._m}getProjectionViewRTEMatrix(){return this.frustum.projectionViewRTEMatrix._m}getInverseProjectionViewMatrix(){return this.frustum.inverseProjectionViewMatrix._m}getInverseProjectionMatrix(){return this.frustum.inverseProjectionMatrix._m}viewDistance(e,t=1e4){let i=e.add(this.getBackward().scaleTo(t));this.set(i,e),this.update()}copy(e){this.eye.copy(e.eye),this._r.copy(e._r),this._u.copy(e._u),this._b.copy(e._b),this._f.copy(e._f),this._width=e.width,this._height=e.height,this.setViewAngle(e.viewAngle),this.update()}getAltitude(){return this.eye.y}};Za.__counter__=0;let as=Za;class Qa extends as{constructor(e,t={}){super({...t,frustums:t.frustums||[[1,100.075],[100,1000.075],[1e3,101e4],[1e6,1e9]]}),this.planet=e,this.minAltitude=t.minAltitude||1,this.maxAltitude=t.maxAltitude||2e7,this._lonLat=this.planet.ellipsoid.cartesianToLonLat(this.eye),this._lonLatMerc=this._lonLat.forwardMercator(),this._terrainAltitude=this._lonLat.height,this._terrainPoint=new m,this._insideSegment=null,this.slope=0,this._keyLock=new mi,this._flight=null,this._completeCallback=null,this._frameCallback=null,this._flying=!1,this._checkTerrainCollision=!0,this.eyeNorm=this.eye.getNormal()}setTerrainCollisionActivity(e){this._checkTerrainCollision=e}update(){this.events.stopPropagation();let e=this.maxAltitude+this.planet.ellipsoid.getEquatorialSize();this.eye.length()>e&&this.eye.copy(this.eye.getNormal().scale(e)),super.update(),this.updateGeodeticPosition(),this.eyeNorm=this.eye.getNormal(),this.slope=this._b.dot(this.eyeNorm),this.events.dispatch(this.events.viewchange,this)}updateGeodeticPosition(){this.planet.ellipsoid.cartesianToLonLatRes(this.eye,this._lonLat),Math.abs(this._lonLat.lat)<=de&&P.forwardMercatorRes(this._lonLat,this._lonLatMerc)}setAltitude(e){let t=this._terrainPoint,i=this.planet.ellipsoid.getSurfaceNormal3v(this.eye);this.eye.x=i.x*e+t.x,this.eye.y=i.y*e+t.y,this.eye.z=i.z*e+t.z,this._terrainAltitude=e}getAltitude(){return this._terrainAltitude}setLonLat(e,t,i){this.stopFlying(),this._lonLat.set(e.lon,e.lat,e.height||this._lonLat.height);let r=this.planet.ellipsoid,s=r.lonLatToCartesian(this._lonLat),n=t?r.lonLatToCartesian(t):m.ZERO;this.set(s,n,i||s.getNormal()),this.update()}getLonLat(){return this._lonLat}getHeight(){return this._lonLat.height}getExtentPosition(e,t){t=t||0;let i=e.getNorth(),r=e.getSouth(),s=e.getEast(),n=e.getWest();n>s&&(s+=360);let a=this.planet.ellipsoid,l=new P(s,i),h=a.lonLatToCartesian(l);l.lat=r;let c=a.lonLatToCartesian(l);l.lon=n;let d=a.lonLatToCartesian(l);l.lat=i;let u=a.lonLatToCartesian(l),g=m.sub(h,d).scale(.5).addA(d),f=g.length();f<1e-6&&(l.lon=.5*(s+n),l.lat=.5*(i+r),g=a.lonLatToCartesian(l)),u.subA(g),c.subA(g),h.subA(g),d.subA(g);let p=g.getNormal(),_=p.cross(m.NORTH).normalize(),v=_.cross(p).normalize(),x=Math.max(Math.abs(v.dot(u)),Math.abs(v.dot(c)),Math.abs(v.dot(h)),Math.abs(v.dot(d))),y=Math.max(Math.abs(_.dot(u)),Math.abs(_.dot(c)),Math.abs(_.dot(h)),Math.abs(_.dot(d))),w=Math.tan(this._viewAngle*G*.5),b=this.getAspectRatio()*w,C=Math.max(y/b,x/w);return g.normalize(),g.scale(f+C+t),g}viewExtent(e,t){this.stopFlying(),this.set(this.getExtentPosition(e,t),m.ZERO,m.NORTH),this.update()}flyExtent(e,t,i={}){i.look=m.ZERO,this.flyCartesian(this.getExtentPosition(e,t),i)}viewDistance(e,t=1e4){let i=this.eye.add(this.getForward().scaleTo(t)),r=O.getRotationBetweenVectors(i.getNormal(),e.getNormal());if(r.isZero()){let s=e.add(this.getBackward().scaleTo(t));this.set(s,e)}else{let s=e.add(r.mulVec3(this.getBackward()).scale(t)),n=r.mulVec3(this.getUp());this.set(s,e,n)}this.update()}flyLonLat(e,t={}){let i=new P(e.lon,e.lat,e.height||this._lonLat.height);this.flyCartesian(this.planet.ellipsoid.lonLatToCartesian(i),t)}flyDistance(e,t=1e4,i={}){let r=this.eye.add(this.getForward().scaleTo(t)),s=O.getRotationBetweenVectors(r.getNormal(),e.getNormal());if(s.isZero()){let n=e.add(this.getBackward().scaleTo(t));this.set(n,e)}else{let n=e.add(s.mulVec3(this.getBackward()).scale(t)),a=s.mulVec3(this.getUp());i.look=e,i.up=a,this.flyCartesian(n,i)}}flyCartesian(e,t={}){this.stopFlying(),t.preventLock||(this.planet.layerLock.lock(this._keyLock),this.planet.terrainLock.lock(this._keyLock),this.planet.normalMapCreator.lock(this._keyLock)),t.amplitude=t.amplitude!=null?t.amplitude:1,t.look=t.look||m.ZERO,t.up=t.up||m.NORTH,t.duration=t.duration||800;const i=t.ease||Xa;this._completeCallback=t.completeCallback||(()=>{}),this._frameCallback=t.frameCallback||(()=>{}),t.startCallback&&t.startCallback.call(this),t.look instanceof P&&(t.look=this.planet.ellipsoid.lonLatToCartesian(t.look));let r=this.eye.clone(),s=this._u,n=this._b,a=this.planet.ellipsoid.cartesianToLonLat(e),l=t.up,h=this.planet.ellipsoid.lonLatToCartesian(new P(a.lon,a.lat,0)),c=m.sub(e,t.look),d=l.cross(c);c.normalize(),d.normalize();let u=c.cross(d),g=r.getNormal(),f=h.getNormal(),p=1-g.dot(f),_=t.amplitude*Ss*Math.sqrt(p>0?p:0),v=6639613,x=Math.max(this._lonLat.height,a.height);x>v&&(v=x);let y=x+2.5*_*(v-x),w=m.ZERO;this._flight={fly:b=>{let C,E=i(b),T=1-E;if(E>=1)C=e.clone();else{let B=r.smerp(e,T).normalize(),D=this.planet.getRayIntersectionEllipsoid(new H(w,B)),A=this._lonLat.height*T*T*T+3*y*T*T*E+3*y*T*E*E+a.height*E*E*E;C=D.addA(B.scale(A))}let L=s.smerp(u,T),S=m.add(C,n.smerp(c,T).negateTo()),R=new m(C.x-S.x,C.y-S.y,C.z-S.z),z=L.cross(R);R.normalize(),z.normalize();let F=R.cross(z);return{eye:C,n:R,u:z,v:F}},duration:t.duration,startedAt:Date.now()},this._flying=!0,this.events.dispatch(this.events.flystart,this)}stopFlying(){this._flying&&(this.planet.layerLock.free(this._keyLock),this.planet.terrainLock.free(this._keyLock),this.planet.normalMapCreator.free(this._keyLock),super.stopFlying())}rotateLeft(e,t){this.rotateHorizontal(e,t!==!0,m.ZERO),this.update()}rotateRight(e,t){this.rotateHorizontal(-e,t!==!0,m.ZERO),this.update()}rotateUp(e){this.rotateVertical(e,m.ZERO),this.update()}rotateDown(e){this.rotateVertical(-e,m.ZERO),this.update()}rotateVertical(e,t,i=0){let r=new re().setRotation(this._r,e),s=new re().setIdentity().translate(t),n=new re().setIdentity().translate(t.negateTo()),a=s.mul(r).mul(n).mulVec3(this.eye),l=r.mulVec3(this._u).normalize(),h=r.mulVec3(this._r).normalize(),c=r.mulVec3(this._b).normalize(),d=a.getNormal(),u=c.dot(d);if(!(l.dot(d)<=0))if(i){let g=u-this.slope;if(u<i&&g<0)return;(u>.1&&l.dot(d)>0||this.slope<=.1||this._u.dot(this.eye.getNormal())<=0)&&(this.eye=a,this._u=l,this._r=h,this._b=c,this._f.set(-c.x,-c.y,-c.z))}else this.eye=a,this._u=l,this._r=h,this._b=c,this._f.set(-c.x,-c.y,-c.z)}checkTerrainCollision(){if(this._terrainAltitude=this._lonLat.height,this._insideSegment&&this._insideSegment.planet)return this._terrainAltitude=this._insideSegment.getTerrainPoint(this.eye,this._insideSegment.getInsideLonLat(this),this._terrainPoint),this._terrainAltitude<this.minAltitude&&this._checkTerrainCollision&&this.setAltitude(this.minAltitude),this._terrainPoint}getSurfaceVisibleDistance(e){let t=this.planet.ellipsoid.equatorialSize;return t*Math.acos(t/(t+this._lonLat.height+e))}getHeading(){let e=this.eye.getNormal(),t=m.proj_b_to_plane(this.slope>=.97?this.getUp():this.getForward(),e).normalize(),i=m.proj_b_to_plane(m.NORTH,e).normalize(),r=Math.sign(e.dot(t.cross(i)))*Math.acos(t.dot(i))*J;return r<0?360+r:r}isVisible(e){let t=this.eye.length();return this.eye.distance(e)<Math.sqrt(t*t-this.planet.ellipsoid.equatorialSizeSqr)}getPitch(){return this.planet.getFrameRotation(this.eye).conjugate().inverse().mul(this.getRotation()).getPitch()}getYaw(){return this.planet.getFrameRotation(this.eye).conjugate().inverse().mul(this.getRotation()).getYaw()}getRoll(){return this.planet.getFrameRotation(this.eye).conjugate().inverse().mul(this.getRotation()).getRoll()}setPitch(e){let t=this.planet.getFrameRotation(this.eye),i=new O;i.setPitchYawRoll(e,this.getYaw(),this.getRoll(),t),this.setRotation(i)}setYaw(e){let t=this.planet.getFrameRotation(this.eye),i=new O;i.setPitchYawRoll(this.getPitch(),e,this.getRoll(),t),this.setRotation(i)}setRoll(e){let t=this.planet.getFrameRotation(this.eye),i=new O;i.setPitchYawRoll(this.getPitch(),this.getYaw(),e,t),this.setRotation(i)}setPitchYawRoll(e,t,i){let r=this.planet.getFrameRotation(this.eye),s=new O;s.setPitchYawRoll(e,t,i,r).conjugate(),this.setRotation(s)}}const Ka=class bl{constructor(e,t={}){this.handler=e,this.__id=bl.__counter__++,this._fbo=null,this._width=t.width||e.canvas.width,this._height=t.height||e.canvas.height,this._depthComponent=t.depthComponent!=null?t.depthComponent:"DEPTH_COMPONENT16",this._useDepth=t.useDepth==null||t.useDepth,this._active=!1,this._size=t.size||1,this._depthRenderbuffer=null,this._filter=t.filter||"NEAREST"}get width(){return this._width}get height(){return this._height}setSize(e,t,i=!1){this._width=e,this._height=t,this._active&&this.handler.gl.viewport(0,0,this._width,this._height),(this._useDepth||i)&&(this.destroy(),this.init())}init(){}destroy(){}isComplete(){let e=this.handler.gl;return e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE}checkStatus(){let e=this.handler.gl;return e.checkFramebufferStatus(e.FRAMEBUFFER)}activate(){let e=this.handler.gl;e.bindFramebuffer(e.FRAMEBUFFER,null),e.bindFramebuffer(e.FRAMEBUFFER,this._fbo),e.viewport(0,0,this._width,this._height),this._active=!0;let t=this.handler.framebufferStack.current().data;return t&&(t._active=!1),this.handler.framebufferStack.push(this),this}deactivate(){let e=this.handler,t=e.gl;t.bindFramebuffer(t.FRAMEBUFFER,null),this._active=!1;let i=this.handler.framebufferStack.popPrev();i?(t.bindFramebuffer(t.FRAMEBUFFER,i._fbo),t.viewport(0,0,i._width,i._height)):t.viewport(0,0,e.canvas.width,e.canvas.height)}isEqual(e){return!!e&&this.__id===e.__id}};Ka.__counter__=0;let Ja=Ka;class xi{constructor(e=256,t=256){this._canvas=document.createElement("canvas"),this._canvas.width=e,this._canvas.height=t,this._context=this._canvas.getContext("2d",{willReadFrequently:!0})}getCanvas(){return this._canvas}getContext(){return this._context}fillEmpty(){let e=this._context.getImageData(0,0,this._canvas.width,this._canvas.height),t=e.data;for(let i=0,r=t.length;i<r;i+=4)t[i]=t[i+1]=t[i+2]=t[i+3]=0;this._context.putImageData(e,0,0)}fill(e){this._context.fillStyle=e,this._context.fill()}getData(){return this._context.getImageData(0,0,this._canvas.width,this._canvas.height).data}fillColor(e){this._context.fillStyle=e,this._context.fillRect(0,0,this._canvas.width,this._canvas.height)}setData(e){let t=this._context.createImageData(this._canvas.width,this._canvas.height);t.data.set(e),this._context.putImageData(t,0,0)}resize(e,t){this._canvas.width=e,this._canvas.height=t,this._context=this._canvas.getContext("2d")}drawImage(e,t,i,r,s){this._context.drawImage(e,t||0,i||0,r||e.width,s||e.height)}getImage(){let e=new Image;return e.width=this.getWidth(),e.height=this.getHeight(),e.src=this._canvas.toDataURL("image/png"),e}getTextWidth(e){let t=this._context.measureText(e);return Math.round(t.width)}drawText(e,t=0,i=14,r="normal 14px Verdana",s="black"){this._context.fillStyle=s,this._context.font=r,this._context.fillText(e,t,i)}getWidth(){return this._canvas.width}getHeight(){return this._canvas.height}load(e,t){let i=new Image,r=this;i.onload=function(){r.resize(i.width,i.height),r._context.drawImage(i,0,0,i.width,i.height),t&&t(i)},i.src=e}openImage(){let e=this.getImage(),t="<!DOCTYPE html>";t+="<html>",t+="<head><title>Print</title></head>",t+="<body>",t+='<img src="'+e.src+'">',t+="</body>",t+="</html>";let i=window.open("","","width="+e.width+"px ,height="+e.height+"px");i&&(i.document.open(),i.document.write(t),i.document.close(),i.focus())}destroy(){this._canvas.width=1,this._canvas.height=1,this._canvas=null,this._context=null}}const eo={UNSIGNED_BYTE:Uint8Array,FLOAT:Float32Array};class Re extends Ja{constructor(e,t={}){super(e,t),this.readPixelBuffersAsync=i=>{const r=this.handler.gl;if(this._skipFrame)return;this._skipFrame=!0;let s=this.width,n=this.height,a=this.pixelBuffers;this.activate();for(let d=0;d<a.length;d++){let u=a[d];r.bindBuffer(r.PIXEL_PACK_BUFFER,u.buffer),r.bufferData(r.PIXEL_PACK_BUFFER,u.data.byteLength,r.STREAM_READ),r.readBuffer(u.glAttachment),r.readPixels(0,0,s,n,r.RGBA,u.glType,0),r.bindBuffer(r.PIXEL_PACK_BUFFER,null)}this.deactivate();const l=r.fenceSync(r.SYNC_GPU_COMMANDS_COMPLETE,0);var h,c;r.flush(),(h=r,c=l,new Promise(((d,u)=>{(function g(){const f=h.clientWaitSync(c,0,0);f==h.WAIT_FAILED?u():f==h.TIMEOUT_EXPIRED?requestAnimationFrame(g):d()})()}))).then((()=>{this._skipFrame=!1,r.deleteSync(l);for(let d=0;d<a.length;d++){let u=a[d];u.data&&(r.bindBuffer(r.PIXEL_PACK_BUFFER,u.buffer),r.getBufferSubData(r.PIXEL_PACK_BUFFER,0,u.data))}r.bindBuffer(r.PIXEL_PACK_BUFFER,null),i&&i(this)}))},this._targets=Re.createTargets(t.targets),this._size=this._targets.length,this._renderbufferTarget=t.renderbufferTarget!=null?t.renderbufferTarget:"DEPTH_ATTACHMENT",this.textures=t.textures||new Array(this._size),this.pixelBuffers=[],this._skipFrame=!1}static createTargets(e){let t=0,i=0;return e?e.map((r=>{let s=r.attachment||"COLOR_ATTACHMENT";s==="COLOR_ATTACHMENT"&&(s="COLOR_ATTACHMENT"+t++);let n=r.type||"UNSIGNED_BYTE";return{internalFormat:r.internalFormat||"RGBA",format:r.format||"RGBA",type:n,attachment:s,filter:r.filter||"NEAREST",pixelBufferIndex:r.readAsync?i++:-1,TypeArrayConstructor:eo[n]}})):[{internalFormat:"RGBA",format:"RGBA",type:"UNSIGNED_BYTE",attachment:"COLOR_ATTACHMENT0",filter:"NEAREST",pixelBufferIndex:-1,TypeArrayConstructor:eo.UNSIGNED_BYTE}]}destroy(){let e=this.handler.gl;if(e){for(let t=0;t<this.textures.length;t++)e.deleteTexture(this.textures[t]);this.textures=new Array(this._size);for(let t=0;t<this.pixelBuffers.length;t++)this.pixelBuffers[t].data=null,e.deleteBuffer(this.pixelBuffers[t].buffer);this.pixelBuffers=[],e.deleteFramebuffer(this._fbo),e.deleteRenderbuffer(this._depthRenderbuffer),this._depthRenderbuffer=null,this._fbo=null,this._active=!1}}init(){let e=this.handler.gl;if(!e)return;this._fbo=e.createFramebuffer(),e.bindFramebuffer(e.FRAMEBUFFER,this._fbo);let t=[];for(let i=0;i<this._targets.length;i++){let r=this._targets[i],s=this.textures[i]||this.handler.createEmptyTexture2DExt(this._width,this._height,r.filter,r.internalFormat,r.format,r.type),n=e[r.attachment];s&&(this.bindOutputTexture(s,n),this.textures[i]=s),r.attachment!=="DEPTH_ATTACHMENT"&&t.push(n),r.pixelBufferIndex!==-1&&this._createPixelBuffer(r)}e.drawBuffers&&e.drawBuffers(t),this._useDepth&&(this._depthRenderbuffer=e.createRenderbuffer(),e.bindRenderbuffer(e.RENDERBUFFER,this._depthRenderbuffer),e.renderbufferStorage(e.RENDERBUFFER,e[this._depthComponent],this._width,this._height),e.framebufferRenderbuffer(e.FRAMEBUFFER,e[this._renderbufferTarget],e.RENDERBUFFER,this._depthRenderbuffer),e.bindRenderbuffer(e.RENDERBUFFER,null)),e.bindFramebuffer(e.FRAMEBUFFER,null)}getPixelBufferData(e=0){let t=this._targets[e].pixelBufferIndex;return t!==-1?this.pixelBuffers[t].data:null}_createPixelBuffer(e){let t=this.handler.gl,i=e.pixelBufferIndex,r=this.pixelBuffers[i];r||(r=this.pixelBuffers[i]={buffer:null,data:null,glType:-1,glAttachment:-1});let s=this.width*this.height*4;r.data=null,r.data=new e.TypeArrayConstructor(s),r.buffer=t.createBuffer(),t.bindBuffer(t.PIXEL_PACK_BUFFER,r.buffer),t.bufferData(t.PIXEL_PACK_BUFFER,s,t.STREAM_READ),t.bindBuffer(t.PIXEL_PACK_BUFFER,null),r.glType=t[e.type],r.glAttachment=t[e.attachment]}bindOutputTexture(e,t){let i=this.handler.gl;i.bindTexture(i.TEXTURE_2D,e),i.framebufferTexture2D(i.FRAMEBUFFER,t||i.COLOR_ATTACHMENT0,i.TEXTURE_2D,e,0),i.bindTexture(i.TEXTURE_2D,null)}readPixels(e,t,i,r=0,s=1,n=1){let a=this.handler.gl;a.bindFramebuffer(a.FRAMEBUFFER,this._fbo),a.readBuffer&&a.readBuffer(a.COLOR_ATTACHMENT0+r||0),a.readPixels(t*this._width,i*this._height,s,n,a.RGBA,a[this._targets[r].type],e),a.bindFramebuffer(a.FRAMEBUFFER,null)}readAllPixels(e,t=0){let i=this.handler.gl;i.bindFramebuffer(i.FRAMEBUFFER,this._fbo),i.readBuffer&&i.readBuffer(i.COLOR_ATTACHMENT0+t),i.readPixels(0,0,this._width,this._height,i.RGBA,i[this._targets[t].type],e),i.bindFramebuffer(i.FRAMEBUFFER,null)}getImage(){let e=new Uint8Array(4*this._width*this._height);this.readAllPixels(e);let t=new xi(this._width,this._height);return t.setData(e),t.getImage()}readData(e,t,i,r=0){const s=this.width,n=this.height,a=Math.floor(e*(s-1)),l=4*(Math.floor(t*(n-1))*s+a),h=this.pixelBuffers[r].data;h&&(i[0]=h[l],i[1]=h[l+1],i[2]=h[l+2],i[3]=h[l+3])}}const Ic=["tick","end","start","stop"],to=class wl{constructor(e={}){this.__handler=null,this.active=!0,this.__id=wl.__counter__++,this.events=le(Ic,this),this.name=e.name||"",this.startDate=e.startDate||0,this.endDate=e.endDate||0;let t=e.currentDate||$i(new Date);e.startDate&&t<e.startDate&&(t=e.startDate),e.endDate&&t>e.endDate&&(t=e.endDate),this.currentDate=t,this._multiplier=e.multiplier!==void 0?e.multiplier:1,this._running=1,this.deltaTicks=0,this.active=!0,this._intervalDelay=0,this._intervalStart=0,this._intervalCallback=null}clearInterval(){this._intervalDelay=0,this._intervalStart=0,this._intervalCallback=null}setInterval(e,t){this._intervalStart=this.currentDate,this._intervalDelay=e*Rr,this._intervalCallback=t}setDate(e){let t=$i(e);this.startDate&&t<this.startDate&&(t=this.startDate),this.endDate&&t>this.endDate&&(t=this.endDate),this.currentDate=t}getDate(){return Ir(this.currentDate)}reset(){this.startDate&&(this.currentDate=this.startDate)}tick(e){let t=this._multiplier*this._running;if(this.deltaTicks=e*t,this.active){let i=Qs(this.currentDate,this.deltaTicks);t>0?this.endDate&&i>this.endDate?(this.currentDate=this.startDate,this.events.dispatch(this.events.end,this)):this.currentDate=i:this.startDate&&i<this.startDate?(this.currentDate=this.endDate,this.events.dispatch(this.events.end,this)):this.currentDate=i,this._intervalCallback&&this.currentDate-this._intervalStart>=this._intervalDelay&&(this._intervalStart=this.currentDate,this._intervalCallback(this)),this.events.dispatch(this.events.tick,this)}}isEqual(e){return this.__id===e.__id}start(){this._running===0&&(this._running=1,this.events.dispatch(this.events.start,this))}get multiplier(){return this._multiplier}set multiplier(e){this._multiplier=e}stop(){this._running===1&&(this._running=0,this.events.dispatch(this.events.stop,this))}};to.__counter__=0;let zc=to;class Dc{constructor(e,t){t._programController=this,this._program=t,this._handler=e,this._activated=!1}initialize(){this._handler.gl&&this._program.createProgram(this._handler.gl)}getProgram(){return this._program}activate(){if(!this._activated){this._handler.activeProgram.deactivate(),this._handler.activeProgram=this;let e=this._program;this._activated=!0,e.enableAttribArrays(),e.use()}return this}remove(){let e=this._handler.programs;e[this._program.name]&&(this._activated&&this.deactivate(),this._program.delete(),delete e[this._program.name])}deactivate(){this._program.disableAttribArrays(),this._activated=!1}isActive(){return this._activated}set(e){return this.activate(),this._program.set(e),this}drawIndexBuffer(e,t){return this._program.drawIndexBuffer(e,t),this}drawArrays(e,t){return this._program.drawArrays(e,t),this}}let io=class{constructor(){this.next=null,this.prev=null,this.data=null}};class os{constructor(e=256){this._current=new io,this._head=this._current;for(let t=0;t<e;t++){let i=new io;i.prev=this._current,this._current.next=i,this._current=i}this._current=this._head}current(){return this._current}push(e){this._current=this._current.next,this._current.data=e}pop(){let e=this._current.data;return this._current=this._current.prev,e}popPrev(){return this._current=this._current.prev,this._current.data}}const ro=["","WEBKIT_","MOZ_"],ls=["webgl2","webgl"];class Tt{constructor(e,t={}){this.framebufferStack=new os,this._requestAnimationFrameId=0,this.drawFrame=()=>{let i=window.performance.now(),r=this.deltaTime;this.deltaTime=.5*(i-this._lastAnimationFrameTime+this.prevDeltaTime),this.deltaTime>3?this.deltaTime=3:this.deltaTime<1&&(this.deltaTime=1),this.prevDeltaTime=r,this._lastAnimationFrameTime=i,this.defaultClock.tick(this.deltaTime);for(let n=0;n<this._clocks.length;n++)this._clocks[n].tick(this.deltaTime);let s=this.canvas;Math.floor(s.clientWidth*this._params.pixelRatio)===s.width&&Math.floor(s.clientHeight*this._params.pixelRatio)===s.height||(s.clientWidth===0||s.clientHeight===0?this.stop():document.hidden||(this.start(),this.setSize(s.clientWidth,s.clientHeight))),this._frameCallback()},this.events=le(["visibilitychange","resize"]),this._throttledDrawFrame=this.drawFrame,this.defaultClock=new zc,this._clocks=[],this.prevDeltaTime=0,this.deltaTime=0,this.canvas=null,this.gl=null,this.programs={},this.activeProgram=null,this._canvasSize=[0,0],this._params={anisotropy:t.anisotropy||4,width:t.width||256,height:t.height||256,pixelRatio:$s("og_dpi")||t.pixelRatio||1,extensions:t.extensions||[],context:t.context||{}},this.extensions={},this._canvasTarget=e,this._lastAnimationFrameTime=0,this._initialized=!1,this._frameCallback=function(){},this.transparentTexture=null,this.defaultTexture=null,this.framebufferStack=new os,this.createTexture_n=this.createTexture_n_webgl2.bind(this),this.createTexture_l=this.createTexture_l_webgl2.bind(this),this.createTexture_mm=this.createTexture_mm_webgl2.bind(this),this.createTexture_a=this.createTexture_a_webgl2.bind(this),this.createTexture={NEAREST:this.createTexture_n,LINEAR:this.createTexture_l,MIPMAP:this.createTexture_mm,ANISOTROPIC:this.createTexture_a},this.createTextureDefault=this.createTexture_n,this.ONCANVASRESIZE=null,this._createCanvas(),(t.autoActivate||Ue(t.autoActivate))&&this.initialize()}set frameDelay(e){this._throttledDrawFrame=e===0?this.drawFrame:si(this.drawFrame,e)}isInitialized(){return this._initialized}_createCanvas(){this._canvasTarget?this._canvasTarget instanceof HTMLElement?this.canvas=this._canvasTarget:this.canvas=document.getElementById(this._canvasTarget)||document.querySelector(this._canvasTarget):(this.canvas=document.createElement("canvas"),this.canvas.width=this._params.width,this.canvas.height=this._params.height)}static getExtension(e,t){if(!e)return;let i,r;for(i in ro)if(r=e.getExtension(ro[i]+t),r)return r}static getContext(e,t){let i=null;try{let r=new URLSearchParams(location.search).get("og_ver");if(r)i=e.getContext(r,t),i&&(i.type=r);else for(let s=0;s<ls.length;s++)if(i=e.getContext(ls[s],t),i){i.type=ls[s];break}}catch{Qe.logErr("exception during the GL context initialization")}return i||Qe.logErr("could not initialise WebGL"),i}setFrameCallback(e){e&&(this._frameCallback=e)}createEmptyTexture2DExt(e=1,t=1,i="NEAREST",r="RGBA",s="RGBA",n="UNSIGNED_BYTE",a="CLAMP_TO_EDGE",l=0){let h=this.gl,c=h.createTexture();return h.bindTexture(h.TEXTURE_2D,c),h.texImage2D(h.TEXTURE_2D,l,h[r.toUpperCase()],e,t,0,h[s.toUpperCase()],h[n.toUpperCase()],null),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MIN_FILTER,h[i.toUpperCase()]),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MAG_FILTER,h[i.toUpperCase()]),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_S,h[a.toUpperCase()]),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_T,h[a.toUpperCase()]),h.bindTexture(h.TEXTURE_2D,null),c}createEmptyTexture_n(e,t,i,r){let s=this.gl,n=s.createTexture();return s.bindTexture(s.TEXTURE_2D,n),s.texImage2D(s.TEXTURE_2D,0,i||s.RGBA,e,t,0,s.RGBA,s.UNSIGNED_BYTE,null),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,r||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,r||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),n}createEmptyTexture_l(e,t,i,r){let s=this.gl,n=s.createTexture();return s.bindTexture(s.TEXTURE_2D,n),s.texImage2D(s.TEXTURE_2D,0,i||s.RGBA,e,t,0,s.RGBA,s.UNSIGNED_BYTE,null),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,r||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,r||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),n}createTexture_n_webgl1(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texImage2D(s.TEXTURE_2D,0,t||s.RGBA,s.RGBA,s.UNSIGNED_BYTE,e),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_l_webgl1(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texImage2D(s.TEXTURE_2D,0,t||s.RGBA,s.RGBA,s.UNSIGNED_BYTE,e),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_mm_webgl1(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texImage2D(s.TEXTURE_2D,0,t||s.RGBA,s.RGBA,s.UNSIGNED_BYTE,e),s.generateMipmap(s.TEXTURE_2D),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR_MIPMAP_LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_a_webgl1(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texImage2D(s.TEXTURE_2D,0,t||s.RGBA,s.RGBA,s.UNSIGNED_BYTE,e),s.generateMipmap(s.TEXTURE_2D),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR_MIPMAP_LINEAR),s.texParameterf(s.TEXTURE_2D,this.extensions.EXT_texture_filter_anisotropic.TEXTURE_MAX_ANISOTROPY_EXT,this._params.anisotropy),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_n_webgl2(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texStorage2D(s.TEXTURE_2D,1,t||s.RGBA8,e.width,e.height),s.texSubImage2D(s.TEXTURE_2D,0,0,0,e.width,e.height,s.RGBA,s.UNSIGNED_BYTE,e),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_l_webgl2(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texStorage2D(s.TEXTURE_2D,1,t||s.RGBA8,e.width,e.height),s.texSubImage2D(s.TEXTURE_2D,0,0,0,e.width,e.height,s.RGBA,s.UNSIGNED_BYTE,e),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_mm_webgl2(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texStorage2D(s.TEXTURE_2D,2,t||s.RGBA8,e.width,e.height),s.texSubImage2D(s.TEXTURE_2D,0,0,0,e.width,e.height,s.RGBA,s.UNSIGNED_BYTE,e),s.generateMipmap(s.TEXTURE_2D),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR_MIPMAP_LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_a_webgl2(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texStorage2D(s.TEXTURE_2D,2,t||s.RGBA8,e.width,e.height),s.texSubImage2D(s.TEXTURE_2D,0,0,0,e.width,e.height,s.RGBA,s.UNSIGNED_BYTE,e),s.generateMipmap(s.TEXTURE_2D),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR_MIPMAP_LINEAR),s.texParameterf(s.TEXTURE_2D,this.extensions.EXT_texture_filter_anisotropic.TEXTURE_MAX_ANISOTROPY_EXT,this._params.anisotropy),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}loadCubeMapTexture(e){let t=this.gl,i=t.createTexture();t.bindTexture(t.TEXTURE_CUBE_MAP,i),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_MAG_FILTER,t.LINEAR);let r=[[e.px,t.TEXTURE_CUBE_MAP_POSITIVE_X],[e.nx,t.TEXTURE_CUBE_MAP_NEGATIVE_X],[e.py,t.TEXTURE_CUBE_MAP_POSITIVE_Y],[e.ny,t.TEXTURE_CUBE_MAP_NEGATIVE_Y],[e.pz,t.TEXTURE_CUBE_MAP_POSITIVE_Z],[e.nz,t.TEXTURE_CUBE_MAP_NEGATIVE_Z]],s=new xi;s.fillEmpty();let n=s.getImage();for(let a=0;a<r.length;a++){let l=r[a][1];t.bindTexture(t.TEXTURE_CUBE_MAP,i),t.texImage2D(l,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,n)}for(let a=0;a<r.length;a++){let l=r[a][1],h=new Image;h.crossOrigin="",h.onload=(function(c,d,u){return function(){t&&c&&(t.bindTexture(t.TEXTURE_CUBE_MAP,c),t.texImage2D(d,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,u))}})(i,l,h),h.src=r[a][0]}return i}addProgram(e,t=!1){if(this.programs[e.name])console.warn(`Shader program: "${e.name}" already exists.`);else{let i=new Dc(this,e);this.programs[e.name]=i,this._initProgramController(i),t||(i._activated=!1)}return e}removeProgram(e){this.programs[e]&&this.programs[e].remove()}addPrograms(e){for(let t=0;t<e.length;t++)this.addProgram(e[t])}_initProgramController(e){this._initialized&&(e.initialize(),this.activeProgram?(e.deactivate(),this.activeProgram._program.enableAttribArrays(),this.activeProgram._program.use()):(this.activeProgram=e,e.activate()))}_initPrograms(){for(let e in this.programs)this._initProgramController(this.programs[e])}initializeExtension(e,t=!1){if(!this.extensions||!this.extensions[e]){let i=Tt.getExtension(this.gl,e);i?this.extensions[e]=i:t&&console.warn("og.webgl.Handler: extension '"+e+"' doesn't initialize.")}return this.extensions&&this.extensions[e]}initialize(){if(this._initialized||!this.canvas||(this.gl=Tt.getContext(this.canvas,this._params.context),!this.gl))return;this._initialized=!0,this._params.extensions.push("EXT_texture_filter_anisotropic"),this.gl.type==="webgl"?(this._params.extensions.push("OES_standard_derivatives"),this._params.extensions.push("OES_element_index_uint"),this._params.extensions.push("WEBGL_depth_texture"),this._params.extensions.push("ANGLE_instanced_arrays")):(this._params.extensions.push("EXT_color_buffer_float"),this._params.extensions.push("OES_texture_float_linear"));let e=this._params.extensions.length;for(;e--;)this.initializeExtension(this._params.extensions[e],!0);this.gl.type==="webgl"?(this.createTexture_n=this.createTexture_n_webgl1.bind(this),this.createTexture_l=this.createTexture_l_webgl1.bind(this),this.createTexture_mm=this.createTexture_mm_webgl1.bind(this),this.createTexture_a=this.createTexture_a_webgl1.bind(this)):(this.createTexture_n=this.createTexture_n_webgl2.bind(this),this.createTexture_l=this.createTexture_l_webgl2.bind(this),this.createTexture_mm=this.createTexture_mm_webgl2.bind(this),this.createTexture_a=this.createTexture_a_webgl2.bind(this)),this.createTexture.NEAREST=this.createTexture_n,this.createTexture.LINEAR=this.createTexture_l,this.createTexture.MIPMAP=this.createTexture_mm,this.createTexture.ANISOTROPIC=this.createTexture_a,this.extensions.EXT_texture_filter_anisotropic?this.createTextureDefault=this.createTexture_a:this.createTextureDefault=this.createTexture_mm,this._initPrograms(),this._setDefaults(),this.intersectionObserver=new IntersectionObserver((t=>{this._toggleVisibilityChange(t[t.length-1].isIntersecting)}),{threshold:0}),this.intersectionObserver.observe(this.canvas),this.resizeObserver=new ResizeObserver((t=>{this._toggleVisibilityChange(t[0].contentRect.width!==0&&t[0].contentRect.height!==0)})),this.resizeObserver.observe(this.canvas),document.addEventListener("visibilitychange",(()=>{this._toggleVisibilityChange(document.visibilityState==="visible")}))}_toggleVisibilityChange(e){e?(this.start(),this.ONCANVASRESIZE&&this.ONCANVASRESIZE(),this.events.dispatch(this.events.visibilitychange,!0)):(this.events.dispatch(this.events.visibilitychange,!1),this.stop())}_setDefaults(){let e=this.gl;e&&this.canvas&&(e.depthFunc(e.LESS),e.enable(e.DEPTH_TEST),this.setSize(this.canvas.clientWidth||this._params.width,this.canvas.clientHeight||this._params.height),e.frontFace(e.CCW),e.cullFace(e.BACK),e.enable(e.CULL_FACE),e.disable(e.BLEND),this.createDefaultTexture({color:"rgba(0,0,0,0.0)"},(t=>{this.transparentTexture=t})),this.createDefaultTexture({color:"rgba(255, 255, 255, 1.0)"},(t=>{this.defaultTexture=t})))}getCanvasSize(){return this._canvasSize}createStreamArrayBuffer(e,t,i,r=4){let s=this.gl,n=s.createBuffer();return s.bindBuffer(s.ARRAY_BUFFER,n),s.bufferData(s.ARRAY_BUFFER,t*e*r,i||s.STREAM_DRAW),s.bindBuffer(s.ARRAY_BUFFER,null),n.itemSize=e,n.numItems=t,n}setStreamArrayBuffer(e,t,i=0){let r=this.gl;return r.bindBuffer(r.ARRAY_BUFFER,e),r.bufferSubData(r.ARRAY_BUFFER,i,t),r.bindBuffer(r.ARRAY_BUFFER,null),e}createArrayBuffer(e,t,i,r){let s=this.gl,n=s.createBuffer();return s.bindBuffer(s.ARRAY_BUFFER,n),s.bufferData(s.ARRAY_BUFFER,e,r||s.STATIC_DRAW),s.bindBuffer(s.ARRAY_BUFFER,null),n.itemSize=t,n.numItems=i||e.length/t,n}createArrayBufferLength(e,t){let i=this.gl,r=i.createBuffer();return i.bindBuffer(i.ARRAY_BUFFER,r),i.bufferData(i.ARRAY_BUFFER,e,t||i.STATIC_DRAW),i.bindBuffer(i.ARRAY_BUFFER,null),r.itemSize=1,r.numItems=e,r}createElementArrayBuffer(e,t,i,r){let s=this.gl,n=s.createBuffer();return s.bindBuffer(s.ELEMENT_ARRAY_BUFFER,n),s.bufferData(s.ELEMENT_ARRAY_BUFFER,e,r||s.STATIC_DRAW),s.bindBuffer(s.ELEMENT_ARRAY_BUFFER,null),n.itemSize=t,n.numItems=i||e.length,n}setSize(e,t){this._params.width=e,this._params.height=t,this.canvas&&(this.canvas.width=e*this._params.pixelRatio,this.canvas.height=t*this._params.pixelRatio,this._canvasSize[0]=this.canvas.width,this._canvasSize[1]=this.canvas.height,this.gl&&this.gl.viewport(0,0,e,t),this.ONCANVASRESIZE&&this.ONCANVASRESIZE(this.canvas),this.events.dispatch(this.events.resize,this))}get pixelRatio(){return this._params.pixelRatio}set pixelRatio(e){this._params.pixelRatio=e,this.setSize(this._params.width,this._params.height)}getWidth(){return this.canvas?this.canvas.width:0}getHeight(){return this.canvas?this.canvas.height:0}getClientAspect(){return this.canvas?this.canvas.clientWidth/this.canvas.clientHeight:0}getCenter(){let e=this.canvas;return e?new N(Math.round(.5*e.width),Math.round(.5*e.height)):new N}clearFrame(){let e=this.gl;e.clearColor(0,0,0,1),e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT)}start(){!this._requestAnimationFrameId&&this._initialized&&this._animationFrameCallback()}stop(){this._requestAnimationFrameId&&(window.cancelAnimationFrame(this._requestAnimationFrameId),this._requestAnimationFrameId=0)}isStopped(){return!this._requestAnimationFrameId}isWebGl2(){return!!this.gl&&this.gl.type==="webgl2"}_animationFrameCallback(){this._requestAnimationFrameId=window.requestAnimationFrame((()=>{this._throttledDrawFrame(),this._requestAnimationFrameId&&this._animationFrameCallback()}))}createDefaultTexture(e,t){let i,r;if(e&&e.color)i=new xi(2,2),i.fillColor(e.color),r=this.createTexture_n(i.getCanvas()),r.default=!0,t(r);else if(e&&e.url){let s=new Image,n=this;s.onload=function(){r=n.createTextureDefault(s),r.default=!0,t(r)},s.src=e.url}else i=new xi(2,2),i.fillColor("#C5C5C5"),r=this.createTexture_n(i.getCanvas()),r.default=!0,t(r)}deleteTexture(e){e&&!e.default&&this.gl.deleteTexture(e)}destroy(){var e,t;(e=this.resizeObserver)==null||e.disconnect(),(t=this.intersectionObserver)==null||t.disconnect(),this.stop();for(let r in this.programs)this.removeProgram(r);let i=this.gl;if(i){i.deleteTexture(this.transparentTexture),this.transparentTexture=null,i.deleteTexture(this.defaultTexture),this.defaultTexture=null,this.framebufferStack=new os;let r=i.getParameter(i.MAX_VERTEX_ATTRIBS),s=i.createBuffer();i.bindBuffer(i.ARRAY_BUFFER,s);for(let a=0;a<r;++a)i.disableVertexAttribArray(a),i.vertexAttribPointer(a,4,i.FLOAT,!1,0,0),i.vertexAttrib1f(a,0);i.deleteBuffer(s);let n=i.getParameter(i.MAX_TEXTURE_IMAGE_UNITS);for(let a=0;a<n;++a)i.activeTexture(i.TEXTURE0+a),i.bindTexture(i.TEXTURE_CUBE_MAP,null),i.bindTexture(i.TEXTURE_2D,null);i.activeTexture(i.TEXTURE0),i.useProgram(null),i.bindBuffer(i.ARRAY_BUFFER,null),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,null),i.bindFramebuffer(i.FRAMEBUFFER,null),i.bindRenderbuffer(i.RENDERBUFFER,null),i.disable(i.BLEND),i.disable(i.CULL_FACE),i.disable(i.DEPTH_TEST),i.disable(i.DITHER),i.disable(i.SCISSOR_TEST),i.blendColor(0,0,0,0),i.blendEquation(i.FUNC_ADD),i.blendFunc(i.ONE,i.ZERO),i.clearColor(0,0,0,0),i.clearDepth(1),i.clearStencil(-1)}this.canvas&&(this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas),this.canvas.width=1,this.canvas.height=1,this.canvas=null),this.gl=null,this._initialized=!1}addClock(e){e.__handler||(e.__handler=this,this._clocks.push(e))}addClocks(e){for(let t=0;t<e.length;t++)this.addClock(e[t])}removeClock(e){if(e.__handler){let t=this._clocks,i=t.length;for(;i--;)if(t[i].isEqual(e)){e.__handler=null,t.splice(i,1);break}}}}class so extends Ja{constructor(e,t={}){super(e,t),this._internalFormat=t.internalFormat?t.internalFormat.toUpperCase():"RGBA8",this._msaa=t.msaa!=null?t.msaa:4,this._glFilter=0,this.renderbuffers=new Array(this._size)}destroy(){let e=this.handler.gl;if(e){for(let t=0;t<this.renderbuffers.length;t++)e.deleteRenderbuffer(this.renderbuffers[t]);this.renderbuffers=new Array(this._size),e.deleteFramebuffer(this._fbo),e.deleteRenderbuffer(this._depthRenderbuffer),this._depthRenderbuffer=null,this._fbo=null,this._active=!1}}init(){let e=this.handler.gl;if(!e)return;this._glFilter=e[this._filter],this._fbo=e.createFramebuffer(),e.bindFramebuffer(e.FRAMEBUFFER,this._fbo);let t=[];for(let i=0;i<this.renderbuffers.length;i++){let r=e.createRenderbuffer();e.bindRenderbuffer(e.RENDERBUFFER,r),this._msaa>0?e.renderbufferStorageMultisample(e.RENDERBUFFER,this._msaa,e[this._internalFormat],this._width,this._height):e.renderbufferStorage(e.RENDERBUFFER,e[this._internalFormat],this._width,this._height),e.framebufferRenderbuffer(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0+i,e.RENDERBUFFER,r),t.push(e.COLOR_ATTACHMENT0+i),this.renderbuffers[i]=r,e.bindRenderbuffer(e.RENDERBUFFER,null)}e.drawBuffers(t),this._useDepth&&(this._depthRenderbuffer=e.createRenderbuffer(),e.bindRenderbuffer(e.RENDERBUFFER,this._depthRenderbuffer),e.renderbufferStorageMultisample(e.RENDERBUFFER,this._msaa,e[this._depthComponent],this._width,this._height),e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.RENDERBUFFER,this._depthRenderbuffer),e.bindRenderbuffer(e.RENDERBUFFER,null)),e.bindFramebuffer(e.FRAMEBUFFER,null)}blitTo(e,t=0){let i=this.handler.gl;i.bindFramebuffer(i.READ_FRAMEBUFFER,this._fbo),i.bindFramebuffer(i.DRAW_FRAMEBUFFER,e._fbo),i.readBuffer(i.COLOR_ATTACHMENT0+t),i.clearBufferfv(i.COLOR,0,[0,0,0,1]),i.blitFramebuffer(0,0,this._width,this._height,0,0,e._width,e._height,i.COLOR_BUFFER_BIT,this._glFilter),i.bindFramebuffer(i.FRAMEBUFFER,null),i.bindFramebuffer(i.READ_FRAMEBUFFER,null),i.bindFramebuffer(i.DRAW_FRAMEBUFFER,null)}}Object.freeze(Object.defineProperty({__proto__:null,Framebuffer:Re,Handler:Tt,Multisample:so,Program:X,types:ue},Symbol.toStringTag,{value:"Module"}));class hs extends pi{constructor(e,t={}){super(e,t),this._image=t.image||null,this._src=t.src||null,this._onLoad_=null}get instanceName(){return"GeoImage"}abortLoading(){this._image instanceof HTMLImageElement&&(this._image.src="")}setSrc(e){this._planet&&this._planet._geoImageCreator.remove(this),this._src=e,this._sourceReady=!1,this._sourceCreated=!1,this._image=new Image,this._image.crossOrigin="Anonymous",this._onLoad_=this._onLoad.bind(this),this._image.addEventListener("load",this._onLoad_),this._image.src=e}setImage(e){this._planet&&this._planet._geoImageCreator.remove(this),this._sourceCreated=!1,this._sourceReady=!1,this._image=e,this._image.crossOrigin="Anonymous",this._src=e.src,Ar(this._image)?this._applyImage(this._image):(this._onLoad_=this._onLoad.bind(this),this._image.addEventListener("load",this._onLoad_))}_createSourceTexture(){!this._sourceCreated&&this._image&&(this._sourceTexture=this._planet.renderer.handler.createTexture_l(this._image),this._sourceCreated=!0)}_onLoad(e){this._applyImage(this._image),this._image instanceof HTMLImageElement&&this._image.removeEventListener("load",this._onLoad_),this._onLoad_=null}_applyImage(e){e&&(this._frameWidth=zt(2*e.width,4096),this._frameHeight=zt(3*e.height,4096),this._sourceReady=!0,this._planet&&this._planet._geoImageCreator.add(this))}loadMaterial(e){e.isLoading=!0,this._creationProceeding=!0,!this._sourceReady&&this._src?this._image?this._image instanceof HTMLImageElement&&(Ar(this._image)?this._applyImage(this._image):(this._onLoad_=this._onLoad.bind(this),this._image.addEventListener("load",this._onLoad_))):(this._image=new Image,this._image.crossOrigin="Anonymous",this._onLoad_=this._onLoad.bind(this),this._image.addEventListener("load",this._onLoad_),this._image.src=this._src):this._planet&&this._planet._geoImageCreator.add(this)}abortMaterialLoading(e){this._image&&this._image instanceof HTMLImageElement&&(this._image.src=""),this._creationProceeding=!1,e.isLoading=!1,e.isReady=!1}}Object.freeze(Object.defineProperty({__proto__:null,AtmosphereConfig:class extends ee{constructor(o={}){super(o),this.$maxOpacity=null,this.$minOpacity=null,this.$rayleight=null,this.$mie=null,this.$height=null,this.$bottomRadius=null,this.$mieScatteringCoefficient=null,this.$mieExtinctionCoefficient=null,this.$rayleighScatteringCoefficientA=null,this.$rayleighScatteringCoefficientB=null,this.$rayleighScatteringCoefficientC=null,this.$ozoneAbsorptionCoefficientA=null,this.$ozoneAbsorptionCoefficientB=null,this.$ozoneAbsorptionCoefficientC=null,this.$sunAngularRadius=null,this.$sunIntensity=null,this.$groundAlbedo=null,this.$ozoneDensityHeight=null,this.$ozoneDensityWide=null,this._toggleBtn=new _e({classList:["og-map-button","og-atmosphere_button"],icon:`<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
348
+ </button>`,{name:e.model.name}),...e}),this.events=le(Tc)}render(e){var t;return super.render(e),(t=this.el)==null||t.addEventListener("click",(i=>{this.events.dispatch(this.events.click,this.model,this,i)})),this}}const Ac=["select"];class Lc extends Ce{constructor(e){super({template:'<div class="og-object3d-collection"></div>',model:e.model,...e}),this._onAdd=t=>{this._addItem(t)},this.events=le(Ac),this._activeView=null}_addItem(e){let t=new Ec({model:e});t.appendTo(this.el),t.events.on("click",(i=>{var r,s;this._activeView&&((r=this._activeView.el)==null||r.classList.remove("active")),this._activeView=t,(s=this._activeView.el)==null||s.classList.add("active"),this.events.dispatch(this.events.select,i,t)}))}render(e){super.render(e);let t=this.model.getItems();for(let i of t)this._addItem(i);return this._initEvents(),this}_initEvents(){this.model.events.on("add",this._onAdd)}}const Pc=["select"];class Sc extends nt{constructor(e){super({classList:["og-object3d-manager"],title:"Object3D Collection",visible:!1,resizable:!0,useHide:!0,top:25,right:85,width:252,height:480,minHeight:100,minWidth:100}),this._onLoadClick=()=>{let t=new Ce({initRender:!0,template:'<input type="file" accept=".obj,.mtl" multiple />'});t.el&&(t.el.addEventListener("change",(i=>{const r=i.target;if(r.files){const s=Array.from(r.files),n=s.find((l=>l.name.toLowerCase().endsWith(".obj"))),a=s.find((l=>l.name.toLowerCase().endsWith(".mtl")));n&&(async function(l,h){return await $.readFileObj(l,h).then((c=>({name:l.name,objects:h?c:[$.merge(c)]})))})(n,a).then(this._addObject)}})),t.el.click())},this._addObject=t=>{this._object3dCollectionView.model.addItem(t)},this.events=le(Pc),this._object3dCollectionView=new Lc({model:e.model})}render(e){var t;super.render(e);let i=document.createElement("div");i.classList.add("og-editor_toolbar"),(t=this.container)==null||t.appendChild(i);let r=new st({classList:["og-editor_toolbar-button"],icon:'<svg class="svg-icon" style="vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M426.666667 170.666667H170.666667c-47.146667 0-84.906667 38.186667-84.906667 85.333333L85.333333 768c0 47.146667 38.186667 85.333333 85.333334 85.333333h682.666666c47.146667 0 85.333333-38.186667 85.333334-85.333333V341.333333c0-47.146667-38.186667-85.333333-85.333334-85.333333H512l-85.333333-85.333333z" /></svg>',title:"Load 3D object"});return r.appendTo(i),r.events.on("click",this._onLoadClick),this._object3dCollectionView.appendTo(this.container),this._object3dCollectionView.events.on("select",(s=>{this.events.dispatch(this.events.select,s)})),this}}const Mc=["add","remove"];class ss{constructor(e={}){this.events=le(Mc,this),this._items=ss.createItemsMap(e.collection||[])}static createItemsMap(e){let t=new Map;for(let i=0;i<e.length;i++)t.set(e[i].name,e[i]);return t}getItem(e){return this._items.get(e)}addItem(e,t=!1){this._items.has(e.name)&&!t||(this._items.set(e.name,e),this.events.dispatch(this.events.add,e))}getItems(){return Array.from(this._items,(([e,t])=>t))}}class ns extends ee{constructor(e={}){super({name:"CameraFrameComposer",autoActivate:!0,...e}),this._onPostdraw=()=>{for(let t=0,i=this._frameHandlers.length;t<i;t++)this._frameHandlers[t].frame()},this._cameraLayer=new _t({scaleByDistance:[100,1e6,1],pickingEnabled:!1}),this._cameraScene=new at("CameraScene"),this._frameHandlers=e.frameHandlers||[]}get frameHandlers(){return[...this._frameHandlers]}add(e){e.addTo(this),this._cameraLayer.add(e.cameraEntity)}oninit(){super.oninit(),this._cameraLayer.addTo(this._cameraScene)}activate(){super.activate(),this.renderer&&(this.renderer.events.on("postdraw",this._onPostdraw),this.renderer.addNode(this._cameraScene))}deactivate(){super.deactivate(),this.renderer&&(this.renderer.events.off("postdraw",this._onPostdraw),this.renderer.removeNode(this._cameraScene))}}let Rc=$.createFrustum();class Wa{constructor(e){this.camera=e.camera,this.frameBuffer=e.frameBuffer,this.frameHandler=e.frameHandler||null,this._composer=null,this._composerIndex=-1,this.showFrustum=e.showFrustum==null||e.showFrustum,this.cameraEntity=new V({visibility:!0,scale:this.frustumScale,geoObject:{tag:"frustum",color:"rgba(0,255,0,0.20)",object3d:Rc}}),this.frameBuffer.init()}get frustumScale(){return $.getFrustumScaleByCameraAspectRatio(1e3,this.camera.getViewAngle(),this.camera.getAspectRatio())}addTo(e){this._composer||(this._composer=e,this._composerIndex=e.frameHandlers.length,this._composer._frameHandlers.push(this))}remove(){this._composer&&(this._composer._frameHandlers.splice(this._composerIndex,1),this._composer=null,this._composerIndex=-1)}frame(){if(this.frameHandler&&this.frameBuffer.handler.gl&&(this.frameHandler(this),this.showFrustum)){let e=this.camera,t=$.getFrustumScaleByCameraAngles(100,e.horizontalViewAngle,e.verticalViewAngle);this.cameraEntity.setScale3v(t),this.cameraEntity.setCartesian3v(e.eye),this.cameraEntity.setAbsolutePitch(e.getAbsolutePitch()),this.cameraEntity.setAbsoluteYaw(e.getAbsoluteYaw()),this.cameraEntity.setAbsoluteRoll(e.getAbsoluteRoll())}}}function Yt(o){let e=1/Math.sqrt(o[0]*o[0]+o[1]*o[1]+o[2]*o[2]);o[0]*=e,o[1]*=e,o[2]*=e,o[3]*=e}class $a{constructor(e={}){this._pickingColorU=new Float32Array([0,0,0]),this._f=[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],this.projectionMatrix=new re,this.inverseProjectionMatrix=new re,this.projectionViewMatrix=new re,this.projectionViewRTEMatrix=new re,this.inverseProjectionViewMatrix=new re,this.left=0,this.right=0,this.bottom=0,this.top=0,this.near=0,this.far=0,this.cameraFrustumIndex=e.cameraFrustumIndex!=null?e.cameraFrustumIndex:-1,this.setProjectionMatrix(e.fov||30,e.aspect||1,e.near||1,e.far||1e3)}getRightPlane(){return this._f[0]}getLeftPlane(){return this._f[1]}getBottomPlane(){return this._f[2]}getTopPlane(){return this._f[3]}getBackwardPlane(){return this._f[4]}getForwardPlane(){return this._f[5]}getProjectionViewMatrix(){return this.projectionViewMatrix._m}getProjectionViewRTEMatrix(){return this.projectionViewRTEMatrix._m}getProjectionMatrix(){return this.projectionMatrix._m}getInverseProjectionMatrix(){return this.inverseProjectionMatrix._m}setProjectionMatrix(e,t,i,r,s,n=10){if(s){let a=n*Math.tan(e*$e),l=a*t;this._setFrustumParams(a,l,i,r),this.projectionMatrix.setOrthographic(this.left,this.right,this.bottom,this.top,this.near,this.far)}else{let a=i*Math.tan(e*$e),l=a*t;this._setFrustumParams(a,l,i,r),this.projectionMatrix.setPerspective(this.left,this.right,this.bottom,this.top,this.near,this.far)}this.projectionMatrix.inverseTo(this.inverseProjectionMatrix)}_setFrustumParams(e,t,i,r){this.top=e,this.right=t,this.bottom=-this.top,this.left=-this.right,this.near=i,this.far=r}setProjectionViewRTEMatrix(e){this.projectionViewRTEMatrix=this.projectionMatrix.mul(e)}setViewMatrix(e){this.projectionViewMatrix=this.projectionMatrix.mul(e),this.projectionViewMatrix.inverseTo(this.inverseProjectionViewMatrix);let t=this.projectionViewMatrix._m;this._f[0][0]=t[3]-t[0],this._f[0][1]=t[7]-t[4],this._f[0][2]=t[11]-t[8],this._f[0][3]=t[15]-t[12],Yt(this._f[0]),this._f[1][0]=t[3]+t[0],this._f[1][1]=t[7]+t[4],this._f[1][2]=t[11]+t[8],this._f[1][3]=t[15]+t[12],Yt(this._f[1]),this._f[2][0]=t[3]+t[1],this._f[2][1]=t[7]+t[5],this._f[2][2]=t[11]+t[9],this._f[2][3]=t[15]+t[13],Yt(this._f[2]),this._f[3][0]=t[3]-t[1],this._f[3][1]=t[7]-t[5],this._f[3][2]=t[11]-t[9],this._f[3][3]=t[15]-t[13],Yt(this._f[3]),this._f[4][0]=t[3]-t[2],this._f[4][1]=t[7]-t[6],this._f[4][2]=t[11]-t[10],this._f[4][3]=t[15]-t[14],Yt(this._f[4]),this._f[5][0]=t[3]+t[2],this._f[5][1]=t[7]+t[6],this._f[5][2]=t[11]+t[10],this._f[5][3]=t[15]+t[14],Yt(this._f[5])}containsPoint(e){for(let t=0;t<6;t++)if(e.dotArr(this._f[t])+this._f[t][3]<=0)return!1;return!0}containsSphereBottomExc(e){let t=-e.radius,i=this._f;return!(e.center.dotArr(i[0])+i[0][3]<=t||e.center.dotArr(i[1])+i[1][3]<=t||e.center.dotArr(i[3])+i[3][3]<=t||e.center.dotArr(i[4])+i[4][3]<=t||e.center.dotArr(i[5])+i[5][3]<=t)}containsSphereButtom(e){let t=-e.radius,i=this._f;return!(e.center.dotArr(i[2])+i[2][3]<=t)}containsSphere(e){let t=-e.radius,i=this._f;return!(e.center.dotArr(i[0])+i[0][3]<=t||e.center.dotArr(i[1])+i[1][3]<=t||e.center.dotArr(i[2])+i[2][3]<=t||e.center.dotArr(i[3])+i[3][3]<=t||e.center.dotArr(i[4])+i[4][3]<=t||e.center.dotArr(i[5])+i[5][3]<=t)}containsSphere2(e,t){let i=-t;return!(e.dotArr(this._f[0])+this._f[0][3]<=i||e.dotArr(this._f[1])+this._f[1][3]<=i||e.dotArr(this._f[2])+this._f[2][3]<=i||e.dotArr(this._f[3])+this._f[3][3]<=i||e.dotArr(this._f[4])+this._f[4][3]<=i||e.dotArr(this._f[5])+this._f[5][3]<=i)}containsBox(e){let t,i,r=!0;for(let s=0;s<6;s++){t=0,i=0;for(let n=0;n<8&&(i===0||t===0);n++)e.vertices[n].dotArr(this._f[s])+this._f[s][3]<0?t++:i++;if(i===0)return!1;t>0&&(r=!0)}return r}}const K=class{};K.Linear=o=>o,K.QuadIn=o=>o*o,K.QuadOut=o=>1-(1-o)*(1-o),K.QuadInOut=o=>o<.5?2*o*o:1-Math.pow(-2*o+2,2)/2,K.CubicIn=o=>o*o*o,K.CubicOut=o=>1-Math.pow(1-o,3),K.CubicInOut=o=>o<.5?4*o*o*o:1-Math.pow(-2*o+2,3)/2,K.QuartIn=o=>o*o*o*o,K.QuartOut=o=>1-Math.pow(1-o,4),K.QuartInOut=o=>o<.5?8*o*o*o*o:1-Math.pow(-2*o+2,4)/2,K.QuintIn=o=>o*o*o*o*o,K.QuintOut=o=>1-Math.pow(1-o,5),K.QuintInOut=o=>o<.5?16*o*o*o*o*o:1-Math.pow(-2*o+2,5)/2,K.SineIn=o=>1-Math.cos(o*Math.PI/2),K.SineOut=o=>Math.sin(o*Math.PI/2),K.SineInOut=o=>-(Math.cos(Math.PI*o)-1)/2,K.ExpoIn=o=>o===0?0:Math.pow(2,10*o-10),K.ExpoOut=o=>o===1?1:1-Math.pow(2,-10*o),K.ExpoInOut=o=>o===0?0:o===1?1:o<.5?Math.pow(2,20*o-10)/2:(2-Math.pow(2,-20*o+10))/2,K.CircIn=o=>1-Math.sqrt(1-Math.pow(o,2)),K.CircOut=o=>Math.sqrt(1-Math.pow(o-1,2)),K.CircInOut=o=>o<.5?(1-Math.sqrt(1-Math.pow(2*o,2)))/2:(Math.sqrt(1-Math.pow(-2*o+2,2))+1)/2,K.BackIn=o=>2.70158*o*o*o-1.70158*o*o,K.BackOut=o=>1+2.70158*Math.pow(o-1,3)+1.70158*Math.pow(o-1,2),K.BackInOut=o=>{const e=2.5949095;return o<.5?Math.pow(2*o,2)*(7.189819*o-e)/2:(Math.pow(2*o-2,2)*((e+1)*(2*o-2)+e)+2)/2},K.ElasticIn=o=>{const e=2*Math.PI/3;return o===0?0:o===1?1:-Math.pow(2,10*o-10)*Math.sin((10*o-10.75)*e)},K.ElasticOut=o=>{const e=2*Math.PI/3;return o===0?0:o===1?1:Math.pow(2,-10*o)*Math.sin((10*o-.75)*e)+1},K.ElasticInOut=o=>{const e=2*Math.PI/4.5;return o===0?0:o===1?1:o<.5?-Math.pow(2,20*o-10)*Math.sin((20*o-11.125)*e)/2:Math.pow(2,-20*o+10)*Math.sin((20*o-11.125)*e)/2+1},K.BounceOut=o=>o<1/2.75?7.5625*o*o:o<2/2.75?7.5625*(o-=1.5/2.75)*o+.75:o<2.5/2.75?7.5625*(o-=2.25/2.75)*o+.9375:7.5625*(o-=2.625/2.75)*o+.984375,K.BounceIn=o=>1-K.BounceOut(1-o),K.BounceInOut=o=>o<.5?.5*(1-K.BounceOut(1-2*o)):.5*(K.BounceOut(2*o-1)+1);let Bc=K;const kc=["viewchange","moveend","flystart","flyend","flystop"],Xa=Bc.CubicInOut,Za=class xl{constructor(e={}){if(this.__id=xl.__counter__++,this.events=le(kc,this),this._isOrthographic=e.isOrthographic??!1,this._focusDistance=e.focusDistance!=null?e.focusDistance:10,this._width=e.width||1,this._height=e.height||1,this.eye=e.eye||new m,this.eyeHigh=new Float32Array(3),this.eyeLow=new Float32Array(3),this._viewAngle=e.viewAngle||47,this._horizontalViewAngle=0,this._viewMatrix=new re,this._viewMatrixRTE=new re,this._normalMatrix=new bt,this._r=new m(1,0,0),this._u=new m(0,1,0),this._b=new m(0,0,1),this._f=this._b.negateTo(),this._pr=this._r.clone(),this._pu=this._u.clone(),this._pb=this._b.clone(),this._peye=this.eye.clone(),this.isMoving=!1,this._flight=null,this._completeCallback=null,this._frameCallback=null,this._flying=!1,this._tanViewAngle_hrad=0,this._tanViewAngle_hradOneByHeight=0,this.frustums=[],this.frustumColors=[],e.frustums)for(let t=0,i=e.frustums.length;t<i;t++){let r=e.frustums[t],s=new $a({fov:this._viewAngle,aspect:this.getAspectRatio(),near:r[0],far:r[1]});s.cameraFrustumIndex=this.frustums.length,this.frustums.push(s),this.frustumColors.push(s._pickingColorU[0],s._pickingColorU[1],s._pickingColorU[2])}else{let t=1,i=500,r=new $a({fov:this._viewAngle,aspect:this.getAspectRatio(),near:t,far:i});r.cameraFrustumIndex=this.frustums.length,this.frustums.push(r),this.frustumColors.push(r._pickingColorU[0],r._pickingColorU[1],r._pickingColorU[2])}this.FARTHEST_FRUSTUM_INDEX=this.frustums.length-1,this.currentFrustumIndex=0,this.frustumColorIndex=0,this.isFirstPass=!1,this._projSizeConst=0,this.set(e.eye||new m(0,0,1),e.look||new m,e.up||new m(0,1,0))}get isOrthographic(){return this._isOrthographic}set isOrthographic(e){this._isOrthographic!==e&&(this._isOrthographic=e,this.refresh())}get focusDistance(){return this._focusDistance}set focusDistance(e){e!==this._focusDistance&&(this._focusDistance=e,this._isOrthographic&&this.refresh())}get id(){return this.__id}flyCartesian(e,t={}){this.stopFlying(),t.look=t.look||m.ZERO,t.up=t.up||m.UP,t.duration=t.duration||800;const i=t.ease||Xa;this._completeCallback=t.completeCallback||(()=>{}),this._frameCallback=t.frameCallback||(()=>{}),t.startCallback&&t.startCallback.call(this);let r=this.eye.clone(),s=this._u,n=this._b,a=t.up,l=e.clone(),h=m.sub(e,t.look),c=a.cross(h);h.normalize(),c.normalize();let d=h.cross(c);this._flight={fly:u=>{let g=1-i(u),f=r.smerp(l,g),p=s.smerp(d,g),_=m.add(f,n.smerp(h,g).negateTo()),v=new m(f.x-_.x,f.y-_.y,f.z-_.z),x=p.cross(v);v.normalize(),x.normalize();let y=v.cross(x);return{eye:f,n:v,u:x,v:y}},duration:t.duration,startedAt:Date.now()},this._flying=!0,this.events.dispatch(this.events.flystart,this)}stopFlying(){this._flying&&(this._flying=!1,this._flight=null,this._frameCallback=null,this.events.dispatch(this.events.flystop,this))}checkFly(){if(this._flying&&this._flight!==null){let e=Math.min((Date.now()-this._flight.startedAt)/this._flight.duration,1);const t=this._flight.fly(e);this.eye=t.eye,this._r=t.u,this._u=t.v,this._b=t.n,this._f.set(-this._b.x,-this._b.y,-this._b.z),this._frameCallback&&this._frameCallback(),this.update(),e>=1&&(this.stopFlying(),this._completeCallback&&(this.events.dispatch(this.events.flyend,this),this._completeCallback(),this._completeCallback=null))}}isFlying(){return this._flying}checkMoveEnd(){let e=this._r,t=this._u,i=this._b,r=this.eye;this._peye.equal(r)&&this._pr.equal(e)&&this._pu.equal(t)&&this._pb.equal(i)?(this.isMoving&&this.events.dispatch(this.events.moveend,this),this.isMoving=!1):this.isMoving=!0,this._pr.copy(e),this._pu.copy(t),this._pb.copy(i),this._peye.copy(r)}bindFrustumsPickingColors(e){for(let t=0;t<this.frustums.length;t++)e.assignPickingColor(this.frustums[t])}_init(e){this._setProj(this._viewAngle,this.getAspectRatio()),this.set(e.eye||new m(0,0,1),e.look||new m,e.up||new m(0,1,0))}getUp(){return this._u.clone()}getDown(){return this._u.negateTo()}getRight(){return this._r.clone()}getLeft(){return this._r.negateTo()}getForward(){return this._f.clone()}getBackward(){return this._b.clone()}update(){let e=this._r,t=this._u,i=this._b,r=this.eye;m.doubleToTwoFloat32Array(r,this.eyeHigh,this.eyeLow),this._viewMatrix.set([e.x,t.x,i.x,0,e.y,t.y,i.y,0,e.z,t.z,i.z,0,-r.dot(e),-r.dot(t),-r.dot(i),1]),this._viewMatrixRTE.set([e.x,t.x,i.x,0,e.y,t.y,i.y,0,e.z,t.z,i.z,0,0,0,0,1]);for(let s=0,n=this.frustums.length;s<n;s++)this.frustums[s].setViewMatrix(this._viewMatrix),this.frustums[s].setProjectionViewRTEMatrix(this._viewMatrixRTE);this.events.dispatch(this.events.viewchange,this)}refresh(){this._setProj(this._viewAngle,this.getAspectRatio()),this.update()}get width(){return this._width}get height(){return this._height}setViewportSize(e,t){this._width=e,this._height=t,this.refresh()}getAspectRatio(){return this._width/this._height}_setProj(e,t){this._viewAngle=e;for(let s=0,n=this.frustums.length;s<n;s++){let a=this.frustums[s];a.setProjectionMatrix(e,t,a.near,a.far,this._isOrthographic,this._focusDistance)}var i,r;this._horizontalViewAngle=(i=e,r=t,or*Math.atan(Math.tan($e*i)*r)),this._updateViewportParameters()}_updateViewportParameters(){this._tanViewAngle_hrad=Math.tan(this._viewAngle*$e),this._tanViewAngle_hradOneByHeight=this._tanViewAngle_hrad*(1/this._height),this._projSizeConst=Math.min(this._width<512?512:this._width,this._height<512?512:this._height)/(this._viewAngle*G)}setViewAngle(e){this._viewAngle=e,this.refresh()}getViewAngle(){return this._viewAngle}get viewAngle(){return this._viewAngle}get verticalViewAngle(){return this._viewAngle}get horizontalViewAngle(){return this._horizontalViewAngle}set(e,t,i){return this.eye.x=e.x,this.eye.y=e.y,this.eye.z=e.z,t=t||this._b,i=i||this._u,this._b.x=e.x-t.x,this._b.y=e.y-t.y,this._b.z=e.z-t.z,this._r.copy(i.cross(this._b)),this._b.normalize(),this._r.normalize(),this._u.copy(this._b.cross(this._r)),this._f.set(-this._b.x,-this._b.y,-this._b.z),this}look(e,t){this._b.set(this.eye.x-e.x,this.eye.y-e.y,this.eye.z-e.z),this._r.copy((t||this._u).cross(this._b)),this._b.normalize(),this._f.set(-this._b.x,-this._b.y,-this._b.z),this._r.normalize(),this._u.copy(this._b.cross(this._r))}slide(e,t,i){this.eye.x+=e*this._r.x+t*this._u.x+i*this._b.x,this.eye.y+=e*this._r.y+t*this._u.y+i*this._b.y,this.eye.z+=e*this._r.z+t*this._u.z+i*this._b.z}setRoll(e){let t=Math.cos(e),i=Math.sin(e),r=this._r.clone();this._r.set(t*r.x-i*this._u.x,t*r.y-i*this._u.y,t*r.z-i*this._u.z),this._u.set(i*r.x+t*this._u.x,i*r.y+t*this._u.y,i*r.z+t*this._u.z)}setPitch(e){let t=Math.cos(e),i=Math.sin(e),r=this._b;this._b.set(t*r.x-i*this._u.x,t*r.y-i*this._u.y,t*r.z-i*this._u.z),this._u.set(i*r.x+t*this._u.x,i*r.y+t*this._u.y,i*r.z+t*this._u.z)}setYaw(e){let t=Math.cos(e),i=Math.sin(e),r=this._r;this._r.set(t*r.x-i*this._b.x,t*r.y-i*this._b.y,t*r.z-i*this._b.z),this._b.set(i*r.x+t*this._b.x,i*r.y+t*this._b.y,i*r.z+t*this._b.z)}setPitchYawRoll(e,t,i){let r=new O;r.setPitchYawRoll(e,t,i),this.setRotation(r)}getPitch(){return this.getRotation().getPitch()}getYaw(){return this.getRotation().getYaw()}getRoll(){return this.getRotation().getRoll()}getAbsolutePitch(){return this.getRotation().getPitch()}getAbsoluteYaw(){return this.getRotation().getYaw()}getAbsoluteRoll(){return this.getRotation().getRoll()}getRotation(){return O.getLookRotation(this._f,this._u).conjugate()}setRotation(e,t,i,r){e.mulVec3Res(t||new m(0,1,0),this._u),e.mulVec3Res(i||new m(1,0,0),this._r),e.mulVec3Res(r||new m(0,0,1),this._b),this._f.set(-this._b.x,-this._b.y,-this._b.z)}rotate(e){e.mulVec3Res(this._u,this._u),e.mulVec3Res(this._r,this._r),e.mulVec3Res(this._b,this._b),this._f.set(-this._b.x,-this._b.y,-this._b.z)}unproject2v(e,t,i){return this.unproject(e.x,e.y,t,i)}unproject(e,t,i,r){let s=.5*this._width,n=.5*this._height,a=(e-s)/s,l=-(t-n)/n,h=this.frustums[0];if(this.isOrthographic){if(i){let c=.5*(h.right-h.left)*a,d=.5*(h.top-h.bottom)*l,u=this.getUp().scale(d),g=this.getRight().scale(c),f=u.addA(g),p=this.eye.add(f),_=this.getForward(),v=p.addA(_.scaleTo(i));return r&&r.copy(v),v.sub(this.eye).normalize()}return this.getForward()}{let c=h.inverseProjectionViewMatrix,d=c.mulVec4(new te(a,l,-1,1)).affinity();return c.mulVec4(new te(a,l,0,1)).affinity().subA(d).toVec3().normalize()}}project3v(e){return this.project(e.x,e.y,e.z)}project(e,t,i){let r=this.frustums[0].projectionViewMatrix.mulVec4(new te(e,t,i,1));return new N((1+r.x/r.w)*this._width*.5,(1-r.y/r.w)*this._height*.5)}rotateAround(e,t=!1,i=m.ZERO,r=m.UP){r=t?this._u:r;let s=re.getRotation(e,r),n=re.getRotationAroundPoint(e,i,r);this.eye=n.mulVec3(this.eye),this._u=s.mulVec3(this._u).normalize(),this._r=s.mulVec3(this._r).normalize(),this._b=s.mulVec3(this._b).normalize(),this._f.set(-this._b.x,-this._b.y,-this._b.z)}rotateHorizontal(e,t,i,r){this.rotateAround(e,t,i,r)}rotateVertical(e,t){this.rotateAround(e,!1,t,this._r)}projectedSize(e,t){if(this.isOrthographic){const i=this.frustums[0].projectionMatrix._m;return t*(this._height*i[5]*.5)}return Math.atan(t/this.eye.distance(e))*this._projSizeConst}getViewMatrix(){return this._viewMatrix._m}getNormalMatrix(){return this._normalMatrix._m}setCurrentFrustum(e){this.currentFrustumIndex=e,this.frustumColorIndex=10*(e+1)/255,this.isFirstPass=e===this.FARTHEST_FRUSTUM_INDEX}getCurrentFrustum(){return this.currentFrustumIndex}containsSphere(e){for(let t=0;t<this.frustums.length;t++)if(this.frustums[t].containsSphere(e))return!0;return!1}get frustum(){return this.frustums[this.currentFrustumIndex]}getProjectionMatrix(){return this.frustum.projectionMatrix._m}getProjectionViewMatrix(){return this.frustum.projectionViewMatrix._m}getProjectionViewRTEMatrix(){return this.frustum.projectionViewRTEMatrix._m}getInverseProjectionViewMatrix(){return this.frustum.inverseProjectionViewMatrix._m}getInverseProjectionMatrix(){return this.frustum.inverseProjectionMatrix._m}viewDistance(e,t=1e4){let i=e.add(this.getBackward().scaleTo(t));this.set(i,e),this.update()}copy(e){this.eye.copy(e.eye),this._r.copy(e._r),this._u.copy(e._u),this._b.copy(e._b),this._f.copy(e._f),this._width=e.width,this._height=e.height,this.setViewAngle(e.viewAngle),this.update()}getAltitude(){return this.eye.y}};Za.__counter__=0;let as=Za;class Qa extends as{constructor(e,t={}){super({...t,frustums:t.frustums||[[1,100.075],[100,1000.075],[1e3,101e4],[1e6,1e9]]}),this.planet=e,this.minAltitude=t.minAltitude||1,this.maxAltitude=t.maxAltitude||2e7,this._lonLat=this.planet.ellipsoid.cartesianToLonLat(this.eye),this._lonLatMerc=this._lonLat.forwardMercator(),this._terrainAltitude=this._lonLat.height,this._terrainPoint=new m,this._insideSegment=null,this.slope=0,this._keyLock=new mi,this._flight=null,this._completeCallback=null,this._frameCallback=null,this._flying=!1,this._checkTerrainCollision=!0,this.eyeNorm=this.eye.getNormal()}setTerrainCollisionActivity(e){this._checkTerrainCollision=e}update(){this.events.stopPropagation();let e=this.maxAltitude+this.planet.ellipsoid.getEquatorialSize();this.eye.length()>e&&this.eye.copy(this.eye.getNormal().scale(e)),super.update(),this.updateGeodeticPosition(),this.eyeNorm=this.eye.getNormal(),this.slope=this._b.dot(this.eyeNorm),this.events.dispatch(this.events.viewchange,this)}updateGeodeticPosition(){this.planet.ellipsoid.cartesianToLonLatRes(this.eye,this._lonLat),Math.abs(this._lonLat.lat)<=de&&P.forwardMercatorRes(this._lonLat,this._lonLatMerc)}setAltitude(e){let t=this._terrainPoint,i=this.planet.ellipsoid.getSurfaceNormal3v(this.eye);this.eye.x=i.x*e+t.x,this.eye.y=i.y*e+t.y,this.eye.z=i.z*e+t.z,this._terrainAltitude=e}getAltitude(){return this._terrainAltitude}setLonLat(e,t,i){this.stopFlying(),this._lonLat.set(e.lon,e.lat,e.height||this._lonLat.height);let r=this.planet.ellipsoid,s=r.lonLatToCartesian(this._lonLat),n=t?r.lonLatToCartesian(t):m.ZERO;this.set(s,n,i||s.getNormal()),this.update()}getLonLat(){return this._lonLat}getHeight(){return this._lonLat.height}getExtentPosition(e,t){t=t||0;let i=e.getNorth(),r=e.getSouth(),s=e.getEast(),n=e.getWest();n>s&&(s+=360);let a=this.planet.ellipsoid,l=new P(s,i),h=a.lonLatToCartesian(l);l.lat=r;let c=a.lonLatToCartesian(l);l.lon=n;let d=a.lonLatToCartesian(l);l.lat=i;let u=a.lonLatToCartesian(l),g=m.sub(h,d).scale(.5).addA(d),f=g.length();f<1e-6&&(l.lon=.5*(s+n),l.lat=.5*(i+r),g=a.lonLatToCartesian(l)),u.subA(g),c.subA(g),h.subA(g),d.subA(g);let p=g.getNormal(),_=p.cross(m.NORTH).normalize(),v=_.cross(p).normalize(),x=Math.max(Math.abs(v.dot(u)),Math.abs(v.dot(c)),Math.abs(v.dot(h)),Math.abs(v.dot(d))),y=Math.max(Math.abs(_.dot(u)),Math.abs(_.dot(c)),Math.abs(_.dot(h)),Math.abs(_.dot(d))),w=Math.tan(this._viewAngle*G*.5),b=this.getAspectRatio()*w,C=Math.max(y/b,x/w);return g.normalize(),g.scale(f+C+t),g}viewExtent(e,t){this.stopFlying(),this.set(this.getExtentPosition(e,t),m.ZERO,m.NORTH),this.update()}flyExtent(e,t,i={}){i.look=m.ZERO,this.flyCartesian(this.getExtentPosition(e,t),i)}viewDistance(e,t=1e4){let i=this.eye.add(this.getForward().scaleTo(t)),r=O.getRotationBetweenVectors(i.getNormal(),e.getNormal());if(r.isZero()){let s=e.add(this.getBackward().scaleTo(t));this.set(s,e)}else{let s=e.add(r.mulVec3(this.getBackward()).scale(t)),n=r.mulVec3(this.getUp());this.set(s,e,n)}this.update()}flyLonLat(e,t={}){let i=new P(e.lon,e.lat,e.height||this._lonLat.height);this.flyCartesian(this.planet.ellipsoid.lonLatToCartesian(i),t)}flyDistance(e,t=1e4,i={}){let r=this.eye.add(this.getForward().scaleTo(t)),s=O.getRotationBetweenVectors(r.getNormal(),e.getNormal());if(s.isZero()){let n=e.add(this.getBackward().scaleTo(t));this.set(n,e)}else{let n=e.add(s.mulVec3(this.getBackward()).scale(t)),a=s.mulVec3(this.getUp());i.look=e,i.up=a,this.flyCartesian(n,i)}}flyCartesian(e,t={}){this.stopFlying(),t.preventLock||(this.planet.layerLock.lock(this._keyLock),this.planet.terrainLock.lock(this._keyLock),this.planet.normalMapCreator.lock(this._keyLock)),t.amplitude=t.amplitude!=null?t.amplitude:1,t.look=t.look||m.ZERO,t.up=t.up||m.NORTH,t.duration=t.duration||800;const i=t.ease||Xa;this._completeCallback=t.completeCallback||(()=>{}),this._frameCallback=t.frameCallback||(()=>{}),t.startCallback&&t.startCallback.call(this),t.look instanceof P&&(t.look=this.planet.ellipsoid.lonLatToCartesian(t.look));let r=this.eye.clone(),s=this._u,n=this._b,a=this.planet.ellipsoid.cartesianToLonLat(e),l=t.up,h=this.planet.ellipsoid.lonLatToCartesian(new P(a.lon,a.lat,0)),c=m.sub(e,t.look),d=l.cross(c);c.normalize(),d.normalize();let u=c.cross(d),g=r.getNormal(),f=h.getNormal(),p=1-g.dot(f),_=t.amplitude*Ss*Math.sqrt(p>0?p:0),v=6639613,x=Math.max(this._lonLat.height,a.height);x>v&&(v=x);let y=x+2.5*_*(v-x),w=m.ZERO;this._flight={fly:b=>{let C,E=i(b),T=1-E;if(E>=1)C=e.clone();else{let B=r.smerp(e,T).normalize(),D=this.planet.getRayIntersectionEllipsoid(new H(w,B)),A=this._lonLat.height*T*T*T+3*y*T*T*E+3*y*T*E*E+a.height*E*E*E;C=D.addA(B.scale(A))}let L=s.smerp(u,T),S=m.add(C,n.smerp(c,T).negateTo()),R=new m(C.x-S.x,C.y-S.y,C.z-S.z),z=L.cross(R);R.normalize(),z.normalize();let F=R.cross(z);return{eye:C,n:R,u:z,v:F}},duration:t.duration,startedAt:Date.now()},this._flying=!0,this.events.dispatch(this.events.flystart,this)}stopFlying(){this._flying&&(this.planet.layerLock.free(this._keyLock),this.planet.terrainLock.free(this._keyLock),this.planet.normalMapCreator.free(this._keyLock),super.stopFlying())}rotateLeft(e,t){this.rotateHorizontal(e,t!==!0,m.ZERO),this.update()}rotateRight(e,t){this.rotateHorizontal(-e,t!==!0,m.ZERO),this.update()}rotateUp(e){this.rotateVertical(e,m.ZERO),this.update()}rotateDown(e){this.rotateVertical(-e,m.ZERO),this.update()}rotateVertical(e,t,i=0){let r=new re().setRotation(this._r,e),s=new re().setIdentity().translate(t),n=new re().setIdentity().translate(t.negateTo()),a=s.mul(r).mul(n).mulVec3(this.eye),l=r.mulVec3(this._u).normalize(),h=r.mulVec3(this._r).normalize(),c=r.mulVec3(this._b).normalize(),d=a.getNormal(),u=c.dot(d);if(!(l.dot(d)<=0))if(i){let g=u-this.slope;if(u<i&&g<0)return;(u>.1&&l.dot(d)>0||this.slope<=.1||this._u.dot(this.eye.getNormal())<=0)&&(this.eye=a,this._u=l,this._r=h,this._b=c,this._f.set(-c.x,-c.y,-c.z))}else this.eye=a,this._u=l,this._r=h,this._b=c,this._f.set(-c.x,-c.y,-c.z)}checkTerrainCollision(){if(this._terrainAltitude=this._lonLat.height,this._insideSegment&&this._insideSegment.planet)return this._terrainAltitude=this._insideSegment.getTerrainPoint(this.eye,this._insideSegment.getInsideLonLat(this),this._terrainPoint),this._terrainAltitude<this.minAltitude&&this._checkTerrainCollision&&this.setAltitude(this.minAltitude),this._terrainPoint}getSurfaceVisibleDistance(e){let t=this.planet.ellipsoid.equatorialSize;return t*Math.acos(t/(t+this._lonLat.height+e))}getHeading(){let e=this.eye.getNormal(),t=m.proj_b_to_plane(this.slope>=.97?this.getUp():this.getForward(),e).normalize(),i=m.proj_b_to_plane(m.NORTH,e).normalize(),r=Math.sign(e.dot(t.cross(i)))*Math.acos(t.dot(i))*J;return r<0?360+r:r}isVisible(e){let t=this.eye.length();return this.eye.distance(e)<Math.sqrt(t*t-this.planet.ellipsoid.equatorialSizeSqr)}getPitch(){return this.planet.getFrameRotation(this.eye).conjugate().inverse().mul(this.getRotation()).getPitch()}getYaw(){return this.planet.getFrameRotation(this.eye).conjugate().inverse().mul(this.getRotation()).getYaw()}getRoll(){return this.planet.getFrameRotation(this.eye).conjugate().inverse().mul(this.getRotation()).getRoll()}setPitch(e){let t=this.planet.getFrameRotation(this.eye),i=new O;i.setPitchYawRoll(e,this.getYaw(),this.getRoll(),t),this.setRotation(i)}setYaw(e){let t=this.planet.getFrameRotation(this.eye),i=new O;i.setPitchYawRoll(this.getPitch(),e,this.getRoll(),t),this.setRotation(i)}setRoll(e){let t=this.planet.getFrameRotation(this.eye),i=new O;i.setPitchYawRoll(this.getPitch(),this.getYaw(),e,t),this.setRotation(i)}setPitchYawRoll(e,t,i){let r=this.planet.getFrameRotation(this.eye),s=new O;s.setPitchYawRoll(e,t,i,r).conjugate(),this.setRotation(s)}}const Ka=class bl{constructor(e,t={}){this.handler=e,this.__id=bl.__counter__++,this._fbo=null,this._width=t.width||e.canvas.width,this._height=t.height||e.canvas.height,this._depthComponent=t.depthComponent!=null?t.depthComponent:"DEPTH_COMPONENT16",this._useDepth=t.useDepth==null||t.useDepth,this._active=!1,this._size=t.size||1,this._depthRenderbuffer=null,this._filter=t.filter||"NEAREST"}get width(){return this._width}get height(){return this._height}setSize(e,t,i=!1){this._width=e,this._height=t,this._active&&this.handler.gl.viewport(0,0,this._width,this._height),(this._useDepth||i)&&(this.destroy(),this.init())}init(){}destroy(){}isComplete(){let e=this.handler.gl;return e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE}checkStatus(){let e=this.handler.gl;return e.checkFramebufferStatus(e.FRAMEBUFFER)}activate(){let e=this.handler.gl;e.bindFramebuffer(e.FRAMEBUFFER,null),e.bindFramebuffer(e.FRAMEBUFFER,this._fbo),e.viewport(0,0,this._width,this._height),this._active=!0;let t=this.handler.framebufferStack.current().data;return t&&(t._active=!1),this.handler.framebufferStack.push(this),this}deactivate(){let e=this.handler,t=e.gl;t.bindFramebuffer(t.FRAMEBUFFER,null),this._active=!1;let i=this.handler.framebufferStack.popPrev();i?(t.bindFramebuffer(t.FRAMEBUFFER,i._fbo),t.viewport(0,0,i._width,i._height)):t.viewport(0,0,e.canvas.width,e.canvas.height)}isEqual(e){return!!e&&this.__id===e.__id}};Ka.__counter__=0;let Ja=Ka;class xi{constructor(e=256,t=256){this._canvas=document.createElement("canvas"),this._canvas.width=e,this._canvas.height=t,this._context=this._canvas.getContext("2d",{willReadFrequently:!0})}getCanvas(){return this._canvas}getContext(){return this._context}fillEmpty(){let e=this._context.getImageData(0,0,this._canvas.width,this._canvas.height),t=e.data;for(let i=0,r=t.length;i<r;i+=4)t[i]=t[i+1]=t[i+2]=t[i+3]=0;this._context.putImageData(e,0,0)}fill(e){this._context.fillStyle=e,this._context.fill()}getData(){return this._context.getImageData(0,0,this._canvas.width,this._canvas.height).data}fillColor(e){this._context.fillStyle=e,this._context.fillRect(0,0,this._canvas.width,this._canvas.height)}setData(e){let t=this._context.createImageData(this._canvas.width,this._canvas.height);t.data.set(e),this._context.putImageData(t,0,0)}resize(e,t){this._canvas.width=e,this._canvas.height=t,this._context=this._canvas.getContext("2d")}drawImage(e,t,i,r,s){this._context.drawImage(e,t||0,i||0,r||e.width,s||e.height)}getImage(){let e=new Image;return e.width=this.getWidth(),e.height=this.getHeight(),e.src=this._canvas.toDataURL("image/png"),e}getTextWidth(e){let t=this._context.measureText(e);return Math.round(t.width)}drawText(e,t=0,i=14,r="normal 14px Verdana",s="black"){this._context.fillStyle=s,this._context.font=r,this._context.fillText(e,t,i)}getWidth(){return this._canvas.width}getHeight(){return this._canvas.height}load(e,t){let i=new Image,r=this;i.onload=function(){r.resize(i.width,i.height),r._context.drawImage(i,0,0,i.width,i.height),t&&t(i)},i.src=e}openImage(){let e=this.getImage(),t="<!DOCTYPE html>";t+="<html>",t+="<head><title>Print</title></head>",t+="<body>",t+='<img src="'+e.src+'">',t+="</body>",t+="</html>";let i=window.open("","","width="+e.width+"px ,height="+e.height+"px");i&&(i.document.open(),i.document.write(t),i.document.close(),i.focus())}destroy(){this._canvas.width=1,this._canvas.height=1,this._canvas=null,this._context=null}}const eo={UNSIGNED_BYTE:Uint8Array,FLOAT:Float32Array};class Re extends Ja{constructor(e,t={}){super(e,t),this.readPixelBuffersAsync=i=>{const r=this.handler.gl;if(this._skipFrame)return;this._skipFrame=!0;let s=this.width,n=this.height,a=this.pixelBuffers;this.activate();for(let d=0;d<a.length;d++){let u=a[d];r.bindBuffer(r.PIXEL_PACK_BUFFER,u.buffer),r.bufferData(r.PIXEL_PACK_BUFFER,u.data.byteLength,r.STREAM_READ),r.readBuffer(u.glAttachment),r.readPixels(0,0,s,n,r.RGBA,u.glType,0),r.bindBuffer(r.PIXEL_PACK_BUFFER,null)}this.deactivate();const l=r.fenceSync(r.SYNC_GPU_COMMANDS_COMPLETE,0);var h,c;r.flush(),(h=r,c=l,new Promise(((d,u)=>{(function g(){const f=h.clientWaitSync(c,0,0);f==h.WAIT_FAILED?u():f==h.TIMEOUT_EXPIRED?requestAnimationFrame(g):d()})()}))).then((()=>{this._skipFrame=!1,r.deleteSync(l);for(let d=0;d<a.length;d++){let u=a[d];u.data&&(r.bindBuffer(r.PIXEL_PACK_BUFFER,u.buffer),r.getBufferSubData(r.PIXEL_PACK_BUFFER,0,u.data))}r.bindBuffer(r.PIXEL_PACK_BUFFER,null),i&&i(this)}))},this._targets=Re.createTargets(t.targets),this._size=this._targets.length,this._renderbufferTarget=t.renderbufferTarget!=null?t.renderbufferTarget:"DEPTH_ATTACHMENT",this.textures=t.textures||new Array(this._size),this.pixelBuffers=[],this._skipFrame=!1}static createTargets(e){let t=0,i=0;return e?e.map((r=>{let s=r.attachment||"COLOR_ATTACHMENT";s==="COLOR_ATTACHMENT"&&(s="COLOR_ATTACHMENT"+t++);let n=r.type||"UNSIGNED_BYTE";return{internalFormat:r.internalFormat||"RGBA",format:r.format||"RGBA",type:n,attachment:s,filter:r.filter||"NEAREST",pixelBufferIndex:r.readAsync?i++:-1,TypeArrayConstructor:eo[n]}})):[{internalFormat:"RGBA",format:"RGBA",type:"UNSIGNED_BYTE",attachment:"COLOR_ATTACHMENT0",filter:"NEAREST",pixelBufferIndex:-1,TypeArrayConstructor:eo.UNSIGNED_BYTE}]}destroy(){let e=this.handler.gl;if(e){for(let t=0;t<this.textures.length;t++)e.deleteTexture(this.textures[t]);this.textures=new Array(this._size);for(let t=0;t<this.pixelBuffers.length;t++)this.pixelBuffers[t].data=null,e.deleteBuffer(this.pixelBuffers[t].buffer);this.pixelBuffers=[],e.deleteFramebuffer(this._fbo),e.deleteRenderbuffer(this._depthRenderbuffer),this._depthRenderbuffer=null,this._fbo=null,this._active=!1}}init(){let e=this.handler.gl;if(!e)return;this._fbo=e.createFramebuffer(),e.bindFramebuffer(e.FRAMEBUFFER,this._fbo);let t=[];for(let i=0;i<this._targets.length;i++){let r=this._targets[i],s=this.textures[i]||this.handler.createEmptyTexture2DExt(this._width,this._height,r.filter,r.internalFormat,r.format,r.type),n=e[r.attachment];s&&(this.bindOutputTexture(s,n),this.textures[i]=s),r.attachment!=="DEPTH_ATTACHMENT"&&t.push(n),r.pixelBufferIndex!==-1&&this._createPixelBuffer(r)}e.drawBuffers&&e.drawBuffers(t),this._useDepth&&(this._depthRenderbuffer=e.createRenderbuffer(),e.bindRenderbuffer(e.RENDERBUFFER,this._depthRenderbuffer),e.renderbufferStorage(e.RENDERBUFFER,e[this._depthComponent],this._width,this._height),e.framebufferRenderbuffer(e.FRAMEBUFFER,e[this._renderbufferTarget],e.RENDERBUFFER,this._depthRenderbuffer),e.bindRenderbuffer(e.RENDERBUFFER,null)),e.bindFramebuffer(e.FRAMEBUFFER,null)}getPixelBufferData(e=0){let t=this._targets[e].pixelBufferIndex;return t!==-1?this.pixelBuffers[t].data:null}_createPixelBuffer(e){let t=this.handler.gl,i=e.pixelBufferIndex,r=this.pixelBuffers[i];r||(r=this.pixelBuffers[i]={buffer:null,data:null,glType:-1,glAttachment:-1});let s=this.width*this.height*4;r.data=null,r.data=new e.TypeArrayConstructor(s),r.buffer=t.createBuffer(),t.bindBuffer(t.PIXEL_PACK_BUFFER,r.buffer),t.bufferData(t.PIXEL_PACK_BUFFER,s,t.STREAM_READ),t.bindBuffer(t.PIXEL_PACK_BUFFER,null),r.glType=t[e.type],r.glAttachment=t[e.attachment]}bindOutputTexture(e,t){let i=this.handler.gl;i.bindTexture(i.TEXTURE_2D,e),i.framebufferTexture2D(i.FRAMEBUFFER,t||i.COLOR_ATTACHMENT0,i.TEXTURE_2D,e,0),i.bindTexture(i.TEXTURE_2D,null)}readPixels(e,t,i,r=0,s=1,n=1){let a=this.handler.gl;a.bindFramebuffer(a.FRAMEBUFFER,this._fbo),a.readBuffer&&a.readBuffer(a.COLOR_ATTACHMENT0+r||0),a.readPixels(t*this._width,i*this._height,s,n,a.RGBA,a[this._targets[r].type],e),a.bindFramebuffer(a.FRAMEBUFFER,null)}readAllPixels(e,t=0){let i=this.handler.gl;i.bindFramebuffer(i.FRAMEBUFFER,this._fbo),i.readBuffer&&i.readBuffer(i.COLOR_ATTACHMENT0+t),i.readPixels(0,0,this._width,this._height,i.RGBA,i[this._targets[t].type],e),i.bindFramebuffer(i.FRAMEBUFFER,null)}getImage(){let e=new Uint8Array(4*this._width*this._height);this.readAllPixels(e);let t=new xi(this._width,this._height);return t.setData(e),t.getImage()}readData(e,t,i,r=0){const s=this.width,n=this.height,a=Math.floor(e*(s-1)),l=4*(Math.floor(t*(n-1))*s+a),h=this.pixelBuffers[r].data;h&&(i[0]=h[l],i[1]=h[l+1],i[2]=h[l+2],i[3]=h[l+3])}}const Ic=["tick","end","start","stop"],to=class wl{constructor(e={}){this.__handler=null,this.active=!0,this.__id=wl.__counter__++,this.events=le(Ic,this),this.name=e.name||"",this.startDate=e.startDate||0,this.endDate=e.endDate||0;let t=e.currentDate||$i(new Date);e.startDate&&t<e.startDate&&(t=e.startDate),e.endDate&&t>e.endDate&&(t=e.endDate),this.currentDate=t,this._multiplier=e.multiplier!==void 0?e.multiplier:1,this._running=1,this.deltaTicks=0,this.active=!0,this._intervalDelay=0,this._intervalStart=0,this._intervalCallback=null}clearInterval(){this._intervalDelay=0,this._intervalStart=0,this._intervalCallback=null}setInterval(e,t){this._intervalStart=this.currentDate,this._intervalDelay=e*Rr,this._intervalCallback=t}setDate(e){let t=$i(e);this.startDate&&t<this.startDate&&(t=this.startDate),this.endDate&&t>this.endDate&&(t=this.endDate),this.currentDate=t}getDate(){return Ir(this.currentDate)}reset(){this.startDate&&(this.currentDate=this.startDate)}tick(e){let t=this._multiplier*this._running;if(this.deltaTicks=e*t,this.active){let i=Qs(this.currentDate,this.deltaTicks);t>0?this.endDate&&i>this.endDate?(this.currentDate=this.startDate,this.events.dispatch(this.events.end,this)):this.currentDate=i:this.startDate&&i<this.startDate?(this.currentDate=this.endDate,this.events.dispatch(this.events.end,this)):this.currentDate=i,this._intervalCallback&&this.currentDate-this._intervalStart>=this._intervalDelay&&(this._intervalStart=this.currentDate,this._intervalCallback(this)),this.events.dispatch(this.events.tick,this)}}isEqual(e){return this.__id===e.__id}start(){this._running===0&&(this._running=1,this.events.dispatch(this.events.start,this))}get multiplier(){return this._multiplier}set multiplier(e){this._multiplier=e}stop(){this._running===1&&(this._running=0,this.events.dispatch(this.events.stop,this))}};to.__counter__=0;let zc=to;class Dc{constructor(e,t){t._programController=this,this._program=t,this._handler=e,this._activated=!1}initialize(){this._handler.gl&&this._program.createProgram(this._handler.gl)}getProgram(){return this._program}activate(){if(!this._activated){this._handler.activeProgram.deactivate(),this._handler.activeProgram=this;let e=this._program;this._activated=!0,e.enableAttribArrays(),e.use()}return this}remove(){let e=this._handler.programs;e[this._program.name]&&(this._activated&&this.deactivate(),this._program.delete(),delete e[this._program.name])}deactivate(){this._program.disableAttribArrays(),this._activated=!1}isActive(){return this._activated}set(e){return this.activate(),this._program.set(e),this}drawIndexBuffer(e,t){return this._program.drawIndexBuffer(e,t),this}drawArrays(e,t){return this._program.drawArrays(e,t),this}}let io=class{constructor(){this.next=null,this.prev=null,this.data=null}};class os{constructor(e=256){this._current=new io,this._head=this._current;for(let t=0;t<e;t++){let i=new io;i.prev=this._current,this._current.next=i,this._current=i}this._current=this._head}current(){return this._current}push(e){this._current=this._current.next,this._current.data=e}pop(){let e=this._current.data;return this._current=this._current.prev,e}popPrev(){return this._current=this._current.prev,this._current.data}}const ro=["","WEBKIT_","MOZ_"],ls=["webgl2","webgl"];class Tt{constructor(e,t={}){this.framebufferStack=new os,this._requestAnimationFrameId=0,this.drawFrame=()=>{let i=window.performance.now(),r=this.deltaTime;this.deltaTime=.5*(i-this._lastAnimationFrameTime+this.prevDeltaTime),this.deltaTime>3?this.deltaTime=3:this.deltaTime<1&&(this.deltaTime=1),this.prevDeltaTime=r,this._lastAnimationFrameTime=i,this.defaultClock.tick(this.deltaTime);for(let n=0;n<this._clocks.length;n++)this._clocks[n].tick(this.deltaTime);let s=this.canvas;Math.floor(s.clientWidth*this._params.pixelRatio)===s.width&&Math.floor(s.clientHeight*this._params.pixelRatio)===s.height||(s.clientWidth===0||s.clientHeight===0?this.stop():document.hidden||(this.start(),this.setSize(s.clientWidth,s.clientHeight))),this._frameCallback()},this.events=le(["visibilitychange","resize"]),this._throttledDrawFrame=this.drawFrame,this.defaultClock=new zc,this._clocks=[],this.prevDeltaTime=0,this.deltaTime=0,this.canvas=null,this.gl=null,this.programs={},this.activeProgram=null,this._canvasSize=[0,0],this._params={anisotropy:t.anisotropy||4,width:t.width||256,height:t.height||256,pixelRatio:$s("og_dpi")||t.pixelRatio||1,extensions:t.extensions||[],context:t.context||{}},this.extensions={},this._canvasTarget=e,this._lastAnimationFrameTime=0,this._initialized=!1,this._frameCallback=function(){},this.transparentTexture=null,this.defaultTexture=null,this.framebufferStack=new os,this.createTexture_n=this.createTexture_n_webgl2.bind(this),this.createTexture_l=this.createTexture_l_webgl2.bind(this),this.createTexture_mm=this.createTexture_mm_webgl2.bind(this),this.createTexture_a=this.createTexture_a_webgl2.bind(this),this.createTexture={NEAREST:this.createTexture_n,LINEAR:this.createTexture_l,MIPMAP:this.createTexture_mm,ANISOTROPIC:this.createTexture_a},this.createTextureDefault=this.createTexture_n,this.ONCANVASRESIZE=null,this._createCanvas(),(t.autoActivate||Ue(t.autoActivate))&&this.initialize()}set frameDelay(e){this._throttledDrawFrame=e===0?this.drawFrame:si(this.drawFrame,e)}isInitialized(){return this._initialized}_createCanvas(){this._canvasTarget?this._canvasTarget instanceof HTMLElement?this.canvas=this._canvasTarget:this.canvas=document.getElementById(this._canvasTarget)||document.querySelector(this._canvasTarget):(this.canvas=document.createElement("canvas"),this.canvas.width=this._params.width,this.canvas.height=this._params.height)}static getExtension(e,t){if(!e)return;let i,r;for(i in ro)if(r=e.getExtension(ro[i]+t),r)return r}static getContext(e,t){let i=null;try{let r=new URLSearchParams(location.search).get("og_ver");if(r)i=e.getContext(r,t),i&&(i.type=r);else for(let s=0;s<ls.length;s++)if(i=e.getContext(ls[s],t),i){i.type=ls[s];break}}catch{Qe.logErr("exception during the GL context initialization")}return i||Qe.logErr("could not initialise WebGL"),i}setFrameCallback(e){e&&(this._frameCallback=e)}createEmptyTexture2DExt(e=1,t=1,i="NEAREST",r="RGBA",s="RGBA",n="UNSIGNED_BYTE",a="CLAMP_TO_EDGE",l=0){let h=this.gl,c=h.createTexture();return h.bindTexture(h.TEXTURE_2D,c),h.texImage2D(h.TEXTURE_2D,l,h[r.toUpperCase()],e,t,0,h[s.toUpperCase()],h[n.toUpperCase()],null),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MIN_FILTER,h[i.toUpperCase()]),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MAG_FILTER,h[i.toUpperCase()]),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_S,h[a.toUpperCase()]),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_T,h[a.toUpperCase()]),h.bindTexture(h.TEXTURE_2D,null),c}createEmptyTexture_n(e,t,i,r){let s=this.gl,n=s.createTexture();return s.bindTexture(s.TEXTURE_2D,n),s.texImage2D(s.TEXTURE_2D,0,i||s.RGBA,e,t,0,s.RGBA,s.UNSIGNED_BYTE,null),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,r||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,r||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),n}createEmptyTexture_l(e,t,i,r){let s=this.gl,n=s.createTexture();return s.bindTexture(s.TEXTURE_2D,n),s.texImage2D(s.TEXTURE_2D,0,i||s.RGBA,e,t,0,s.RGBA,s.UNSIGNED_BYTE,null),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,r||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,r||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),n}createTexture_n_webgl1(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texImage2D(s.TEXTURE_2D,0,t||s.RGBA,s.RGBA,s.UNSIGNED_BYTE,e),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_l_webgl1(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texImage2D(s.TEXTURE_2D,0,t||s.RGBA,s.RGBA,s.UNSIGNED_BYTE,e),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_mm_webgl1(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texImage2D(s.TEXTURE_2D,0,t||s.RGBA,s.RGBA,s.UNSIGNED_BYTE,e),s.generateMipmap(s.TEXTURE_2D),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR_MIPMAP_LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_a_webgl1(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texImage2D(s.TEXTURE_2D,0,t||s.RGBA,s.RGBA,s.UNSIGNED_BYTE,e),s.generateMipmap(s.TEXTURE_2D),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR_MIPMAP_LINEAR),s.texParameterf(s.TEXTURE_2D,this.extensions.EXT_texture_filter_anisotropic.TEXTURE_MAX_ANISOTROPY_EXT,this._params.anisotropy),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_n_webgl2(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texStorage2D(s.TEXTURE_2D,1,t||s.RGBA8,e.width,e.height),s.texSubImage2D(s.TEXTURE_2D,0,0,0,e.width,e.height,s.RGBA,s.UNSIGNED_BYTE,e),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_l_webgl2(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texStorage2D(s.TEXTURE_2D,1,t||s.RGBA8,e.width,e.height),s.texSubImage2D(s.TEXTURE_2D,0,0,0,e.width,e.height,s.RGBA,s.UNSIGNED_BYTE,e),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_mm_webgl2(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texStorage2D(s.TEXTURE_2D,2,t||s.RGBA8,e.width,e.height),s.texSubImage2D(s.TEXTURE_2D,0,0,0,e.width,e.height,s.RGBA,s.UNSIGNED_BYTE,e),s.generateMipmap(s.TEXTURE_2D),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR_MIPMAP_LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_a_webgl2(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texStorage2D(s.TEXTURE_2D,2,t||s.RGBA8,e.width,e.height),s.texSubImage2D(s.TEXTURE_2D,0,0,0,e.width,e.height,s.RGBA,s.UNSIGNED_BYTE,e),s.generateMipmap(s.TEXTURE_2D),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR_MIPMAP_LINEAR),s.texParameterf(s.TEXTURE_2D,this.extensions.EXT_texture_filter_anisotropic.TEXTURE_MAX_ANISOTROPY_EXT,this._params.anisotropy),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}loadCubeMapTexture(e){let t=this.gl,i=t.createTexture();t.bindTexture(t.TEXTURE_CUBE_MAP,i),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_MAG_FILTER,t.LINEAR);let r=[[e.px,t.TEXTURE_CUBE_MAP_POSITIVE_X],[e.nx,t.TEXTURE_CUBE_MAP_NEGATIVE_X],[e.py,t.TEXTURE_CUBE_MAP_POSITIVE_Y],[e.ny,t.TEXTURE_CUBE_MAP_NEGATIVE_Y],[e.pz,t.TEXTURE_CUBE_MAP_POSITIVE_Z],[e.nz,t.TEXTURE_CUBE_MAP_NEGATIVE_Z]],s=new xi;s.fillEmpty();let n=s.getImage();for(let a=0;a<r.length;a++){let l=r[a][1];t.bindTexture(t.TEXTURE_CUBE_MAP,i),t.texImage2D(l,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,n)}for(let a=0;a<r.length;a++){let l=r[a][1],h=new Image;h.crossOrigin="",h.onload=(function(c,d,u){return function(){t&&c&&(t.bindTexture(t.TEXTURE_CUBE_MAP,c),t.texImage2D(d,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,u))}})(i,l,h),h.src=r[a][0]}return i}addProgram(e,t=!1){if(this.programs[e.name])console.warn(`Shader program: "${e.name}" already exists.`);else{let i=new Dc(this,e);this.programs[e.name]=i,this._initProgramController(i),t||(i._activated=!1)}return e}removeProgram(e){this.programs[e]&&this.programs[e].remove()}addPrograms(e){for(let t=0;t<e.length;t++)this.addProgram(e[t])}_initProgramController(e){this._initialized&&(e.initialize(),this.activeProgram?(e.deactivate(),this.activeProgram._program.enableAttribArrays(),this.activeProgram._program.use()):(this.activeProgram=e,e.activate()))}_initPrograms(){for(let e in this.programs)this._initProgramController(this.programs[e])}initializeExtension(e,t=!1){if(!this.extensions||!this.extensions[e]){let i=Tt.getExtension(this.gl,e);i?this.extensions[e]=i:t&&console.warn("og.webgl.Handler: extension '"+e+"' doesn't initialize.")}return this.extensions&&this.extensions[e]}initialize(){if(this._initialized||!this.canvas||(this.gl=Tt.getContext(this.canvas,this._params.context),!this.gl))return;this._initialized=!0,this._params.extensions.push("EXT_texture_filter_anisotropic"),this.gl.type==="webgl"?(this._params.extensions.push("OES_standard_derivatives"),this._params.extensions.push("OES_element_index_uint"),this._params.extensions.push("WEBGL_depth_texture"),this._params.extensions.push("ANGLE_instanced_arrays")):(this._params.extensions.push("EXT_color_buffer_float"),this._params.extensions.push("OES_texture_float_linear"));let e=this._params.extensions.length;for(;e--;)this.initializeExtension(this._params.extensions[e],!0);this.gl.type==="webgl"?(this.createTexture_n=this.createTexture_n_webgl1.bind(this),this.createTexture_l=this.createTexture_l_webgl1.bind(this),this.createTexture_mm=this.createTexture_mm_webgl1.bind(this),this.createTexture_a=this.createTexture_a_webgl1.bind(this)):(this.createTexture_n=this.createTexture_n_webgl2.bind(this),this.createTexture_l=this.createTexture_l_webgl2.bind(this),this.createTexture_mm=this.createTexture_mm_webgl2.bind(this),this.createTexture_a=this.createTexture_a_webgl2.bind(this)),this.createTexture.NEAREST=this.createTexture_n,this.createTexture.LINEAR=this.createTexture_l,this.createTexture.MIPMAP=this.createTexture_mm,this.createTexture.ANISOTROPIC=this.createTexture_a,this.extensions.EXT_texture_filter_anisotropic?this.createTextureDefault=this.createTexture_a:this.createTextureDefault=this.createTexture_mm,this._initPrograms(),this._setDefaults(),this.intersectionObserver=new IntersectionObserver((t=>{this._toggleVisibilityChange(t[t.length-1].isIntersecting)}),{threshold:0}),this.intersectionObserver.observe(this.canvas),this.resizeObserver=new ResizeObserver((t=>{this._toggleVisibilityChange(t[0].contentRect.width!==0&&t[0].contentRect.height!==0)})),this.resizeObserver.observe(this.canvas),document.addEventListener("visibilitychange",(()=>{this._toggleVisibilityChange(document.visibilityState==="visible")}))}_toggleVisibilityChange(e){e?(this.start(),this.ONCANVASRESIZE&&this.ONCANVASRESIZE(),this.events.dispatch(this.events.visibilitychange,!0)):(this.events.dispatch(this.events.visibilitychange,!1),this.stop())}_setDefaults(){let e=this.gl;e&&this.canvas&&(e.depthFunc(e.LESS),e.enable(e.DEPTH_TEST),this.setSize(this.canvas.clientWidth||this._params.width,this.canvas.clientHeight||this._params.height),e.frontFace(e.CCW),e.cullFace(e.BACK),e.enable(e.CULL_FACE),e.disable(e.BLEND),this.createDefaultTexture({color:"rgba(0,0,0,0.0)"},(t=>{this.transparentTexture=t})),this.createDefaultTexture({color:"rgba(255, 255, 255, 1.0)"},(t=>{this.defaultTexture=t})))}getCanvasSize(){return this._canvasSize}createStreamArrayBuffer(e,t,i,r=4){let s=this.gl,n=s.createBuffer();return s.bindBuffer(s.ARRAY_BUFFER,n),s.bufferData(s.ARRAY_BUFFER,t*e*r,i||s.STREAM_DRAW),s.bindBuffer(s.ARRAY_BUFFER,null),n.itemSize=e,n.numItems=t,n}setStreamArrayBuffer(e,t,i=0){let r=this.gl;return r.bindBuffer(r.ARRAY_BUFFER,e),r.bufferSubData(r.ARRAY_BUFFER,i,t),r.bindBuffer(r.ARRAY_BUFFER,null),e}createArrayBuffer(e,t,i,r){let s=this.gl,n=s.createBuffer();return s.bindBuffer(s.ARRAY_BUFFER,n),s.bufferData(s.ARRAY_BUFFER,e,r||s.STATIC_DRAW),s.bindBuffer(s.ARRAY_BUFFER,null),n.itemSize=t,n.numItems=i||e.length/t,n}createArrayBufferLength(e,t){let i=this.gl,r=i.createBuffer();return i.bindBuffer(i.ARRAY_BUFFER,r),i.bufferData(i.ARRAY_BUFFER,e,t||i.STATIC_DRAW),i.bindBuffer(i.ARRAY_BUFFER,null),r.itemSize=1,r.numItems=e,r}createElementArrayBuffer(e,t,i,r){let s=this.gl,n=s.createBuffer();return s.bindBuffer(s.ELEMENT_ARRAY_BUFFER,n),s.bufferData(s.ELEMENT_ARRAY_BUFFER,e,r||s.STATIC_DRAW),s.bindBuffer(s.ELEMENT_ARRAY_BUFFER,null),n.itemSize=t,n.numItems=i||e.length,n}setSize(e,t){this._params.width=e,this._params.height=t,this.canvas&&(this.canvas.width=e*this._params.pixelRatio,this.canvas.height=t*this._params.pixelRatio,this._canvasSize[0]=this.canvas.width,this._canvasSize[1]=this.canvas.height,this.gl&&this.gl.viewport(0,0,e,t),this.ONCANVASRESIZE&&this.ONCANVASRESIZE(this.canvas),this.events.dispatch(this.events.resize,this))}get pixelRatio(){return this._params.pixelRatio}set pixelRatio(e){this._params.pixelRatio=e,this.setSize(this._params.width,this._params.height)}getWidth(){return this.canvas?this.canvas.width:0}getHeight(){return this.canvas?this.canvas.height:0}getClientAspect(){return this.canvas?this.canvas.clientWidth/this.canvas.clientHeight:0}getCenter(){let e=this.canvas;return e?new N(Math.round(.5*e.width),Math.round(.5*e.height)):new N}clearFrame(){let e=this.gl;e.clearColor(0,0,0,1),e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT)}start(){!this._requestAnimationFrameId&&this._initialized&&this._animationFrameCallback()}stop(){this._requestAnimationFrameId&&(window.cancelAnimationFrame(this._requestAnimationFrameId),this._requestAnimationFrameId=0)}isStopped(){return!this._requestAnimationFrameId}isWebGl2(){return!!this.gl&&this.gl.type==="webgl2"}_animationFrameCallback(){this._requestAnimationFrameId=window.requestAnimationFrame((()=>{this._throttledDrawFrame(),this._requestAnimationFrameId&&this._animationFrameCallback()}))}createDefaultTexture(e,t){let i,r;if(e&&e.color)i=new xi(2,2),i.fillColor(e.color),r=this.createTexture_n(i.getCanvas()),r.default=!0,t(r);else if(e&&e.url){let s=new Image,n=this;s.onload=function(){r=n.createTextureDefault(s),r.default=!0,t(r)},s.src=e.url}else i=new xi(2,2),i.fillColor("#C5C5C5"),r=this.createTexture_n(i.getCanvas()),r.default=!0,t(r)}deleteTexture(e){e&&!e.default&&this.gl&&this.gl.deleteTexture(e)}destroy(){var e,t;(e=this.resizeObserver)==null||e.disconnect(),(t=this.intersectionObserver)==null||t.disconnect(),this.stop();for(let r in this.programs)this.removeProgram(r);let i=this.gl;if(i){i.deleteTexture(this.transparentTexture),this.transparentTexture=null,i.deleteTexture(this.defaultTexture),this.defaultTexture=null,this.framebufferStack=new os;let r=i.getParameter(i.MAX_VERTEX_ATTRIBS),s=i.createBuffer();i.bindBuffer(i.ARRAY_BUFFER,s);for(let a=0;a<r;++a)i.disableVertexAttribArray(a),i.vertexAttribPointer(a,4,i.FLOAT,!1,0,0),i.vertexAttrib1f(a,0);i.deleteBuffer(s);let n=i.getParameter(i.MAX_TEXTURE_IMAGE_UNITS);for(let a=0;a<n;++a)i.activeTexture(i.TEXTURE0+a),i.bindTexture(i.TEXTURE_CUBE_MAP,null),i.bindTexture(i.TEXTURE_2D,null);i.activeTexture(i.TEXTURE0),i.useProgram(null),i.bindBuffer(i.ARRAY_BUFFER,null),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,null),i.bindFramebuffer(i.FRAMEBUFFER,null),i.bindRenderbuffer(i.RENDERBUFFER,null),i.disable(i.BLEND),i.disable(i.CULL_FACE),i.disable(i.DEPTH_TEST),i.disable(i.DITHER),i.disable(i.SCISSOR_TEST),i.blendColor(0,0,0,0),i.blendEquation(i.FUNC_ADD),i.blendFunc(i.ONE,i.ZERO),i.clearColor(0,0,0,0),i.clearDepth(1),i.clearStencil(-1)}this.canvas&&(this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas),this.canvas.width=1,this.canvas.height=1,this.canvas=null),this.gl=null,this._initialized=!1}addClock(e){e.__handler||(e.__handler=this,this._clocks.push(e))}addClocks(e){for(let t=0;t<e.length;t++)this.addClock(e[t])}removeClock(e){if(e.__handler){let t=this._clocks,i=t.length;for(;i--;)if(t[i].isEqual(e)){e.__handler=null,t.splice(i,1);break}}}}class so extends Ja{constructor(e,t={}){super(e,t),this._internalFormat=t.internalFormat?t.internalFormat.toUpperCase():"RGBA8",this._msaa=t.msaa!=null?t.msaa:4,this._glFilter=0,this.renderbuffers=new Array(this._size)}destroy(){let e=this.handler.gl;if(e){for(let t=0;t<this.renderbuffers.length;t++)e.deleteRenderbuffer(this.renderbuffers[t]);this.renderbuffers=new Array(this._size),e.deleteFramebuffer(this._fbo),e.deleteRenderbuffer(this._depthRenderbuffer),this._depthRenderbuffer=null,this._fbo=null,this._active=!1}}init(){let e=this.handler.gl;if(!e)return;this._glFilter=e[this._filter],this._fbo=e.createFramebuffer(),e.bindFramebuffer(e.FRAMEBUFFER,this._fbo);let t=[];for(let i=0;i<this.renderbuffers.length;i++){let r=e.createRenderbuffer();e.bindRenderbuffer(e.RENDERBUFFER,r),this._msaa>0?e.renderbufferStorageMultisample(e.RENDERBUFFER,this._msaa,e[this._internalFormat],this._width,this._height):e.renderbufferStorage(e.RENDERBUFFER,e[this._internalFormat],this._width,this._height),e.framebufferRenderbuffer(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0+i,e.RENDERBUFFER,r),t.push(e.COLOR_ATTACHMENT0+i),this.renderbuffers[i]=r,e.bindRenderbuffer(e.RENDERBUFFER,null)}e.drawBuffers(t),this._useDepth&&(this._depthRenderbuffer=e.createRenderbuffer(),e.bindRenderbuffer(e.RENDERBUFFER,this._depthRenderbuffer),e.renderbufferStorageMultisample(e.RENDERBUFFER,this._msaa,e[this._depthComponent],this._width,this._height),e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.RENDERBUFFER,this._depthRenderbuffer),e.bindRenderbuffer(e.RENDERBUFFER,null)),e.bindFramebuffer(e.FRAMEBUFFER,null)}blitTo(e,t=0){let i=this.handler.gl;i.bindFramebuffer(i.READ_FRAMEBUFFER,this._fbo),i.bindFramebuffer(i.DRAW_FRAMEBUFFER,e._fbo),i.readBuffer(i.COLOR_ATTACHMENT0+t),i.clearBufferfv(i.COLOR,0,[0,0,0,1]),i.blitFramebuffer(0,0,this._width,this._height,0,0,e._width,e._height,i.COLOR_BUFFER_BIT,this._glFilter),i.bindFramebuffer(i.FRAMEBUFFER,null),i.bindFramebuffer(i.READ_FRAMEBUFFER,null),i.bindFramebuffer(i.DRAW_FRAMEBUFFER,null)}}Object.freeze(Object.defineProperty({__proto__:null,Framebuffer:Re,Handler:Tt,Multisample:so,Program:X,types:ue},Symbol.toStringTag,{value:"Module"}));class hs extends pi{constructor(e,t={}){super(e,t),this._image=t.image||null,this._src=t.src||null,this._onLoad_=null}get instanceName(){return"GeoImage"}abortLoading(){this._image instanceof HTMLImageElement&&(this._image.src="")}setSrc(e){this._planet&&this._planet._geoImageCreator.remove(this),this._src=e,this._sourceReady=!1,this._sourceCreated=!1,this._image=new Image,this._image.crossOrigin="Anonymous",this._onLoad_=this._onLoad.bind(this),this._image.addEventListener("load",this._onLoad_),this._image.src=e}setImage(e){this._planet&&this._planet._geoImageCreator.remove(this),this._sourceCreated=!1,this._sourceReady=!1,this._image=e,this._image.crossOrigin="Anonymous",this._src=e.src,Ar(this._image)?this._applyImage(this._image):(this._onLoad_=this._onLoad.bind(this),this._image.addEventListener("load",this._onLoad_))}_createSourceTexture(){!this._sourceCreated&&this._image&&(this._sourceTexture=this._planet.renderer.handler.createTexture_l(this._image),this._sourceCreated=!0)}_onLoad(e){this._applyImage(this._image),this._image instanceof HTMLImageElement&&this._image.removeEventListener("load",this._onLoad_),this._onLoad_=null}_applyImage(e){e&&(this._frameWidth=zt(2*e.width,4096),this._frameHeight=zt(3*e.height,4096),this._sourceReady=!0,this._planet&&this._planet._geoImageCreator.add(this))}loadMaterial(e){e.isLoading=!0,this._creationProceeding=!0,!this._sourceReady&&this._src?this._image?this._image instanceof HTMLImageElement&&(Ar(this._image)?this._applyImage(this._image):(this._onLoad_=this._onLoad.bind(this),this._image.addEventListener("load",this._onLoad_))):(this._image=new Image,this._image.crossOrigin="Anonymous",this._onLoad_=this._onLoad.bind(this),this._image.addEventListener("load",this._onLoad_),this._image.src=this._src):this._planet&&this._planet._geoImageCreator.add(this)}abortMaterialLoading(e){this._image&&this._image instanceof HTMLImageElement&&(this._image.src=""),this._creationProceeding=!1,e.isLoading=!1,e.isReady=!1}}Object.freeze(Object.defineProperty({__proto__:null,AtmosphereConfig:class extends ee{constructor(o={}){super(o),this.$maxOpacity=null,this.$minOpacity=null,this.$rayleight=null,this.$mie=null,this.$height=null,this.$bottomRadius=null,this.$mieScatteringCoefficient=null,this.$mieExtinctionCoefficient=null,this.$rayleighScatteringCoefficientA=null,this.$rayleighScatteringCoefficientB=null,this.$rayleighScatteringCoefficientC=null,this.$ozoneAbsorptionCoefficientA=null,this.$ozoneAbsorptionCoefficientB=null,this.$ozoneAbsorptionCoefficientC=null,this.$sunAngularRadius=null,this.$sunIntensity=null,this.$groundAlbedo=null,this.$ozoneDensityHeight=null,this.$ozoneDensityWide=null,this._toggleBtn=new _e({classList:["og-map-button","og-atmosphere_button"],icon:`<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
349
349
  <svg width="800px" height="800px" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path fill="#000000" d="M135.688 18.5c-6.798 74.842-23.842 85.39-107.907 59.656 84.85 52.022 73.57 64.954-6.843 96.938 87.743-10.27 103.29 4.89 70.75 87.594 17.805-27.56 32.5-44.498 46.282-54.47-11.813 28.26-18.345 59.274-18.345 91.813 0 84.184 43.71 157.96 109.656 200.376-41.624-43.834-67.686-102.7-67.686-167.875 0-134.923 109.45-244.405 244.375-244.405 30.92 0 60.76 5.762 88 16.25-38.584-26.87-85.517-42.625-136.064-42.625-55.257 0-106.14 18.802-146.562 50.375 4.627-18.783 17.39-38.073 41.03-60.906C190.18 90.942 153.53 95.634 135.69 18.5zm10.03 77.188c5.67.002 11.428 1.247 16.876 3.874 14.506 6.998 22.72 21.81 22 36.938-10.26 10.87-19.507 22.696-27.594 35.344-9.035 2.753-19.075 2.27-28.25-2.156-19.37-9.343-27.5-32.6-18.156-51.97 6.715-13.92 20.638-22.036 35.125-22.03z"/></svg>`}),this._dialog=new nt({title:"Atmosphere Parameters",visible:!1,useHide:!0,top:60,left:60,width:720}),this._dialog.events.on("visibility",(e=>{this._toggleBtn.setActive(e)})),this._panel=new Ce({template:`<div class="og-atmosphere og-options-container">
350
350
 
351
351
  <div class="og-option og-atmosphere-maxOpacity"></div>
@@ -937,5 +937,5 @@ vec3 Uncharted2ToneMapping(vec3 color){color*=exposure;return saturate(Uncharted
937
937
  void main(void) {
938
938
  float c = LinearizeDepth(tc);
939
939
  fragColor = vec4(c, c, c, 1.0);
940
- }`})]),this.sceneFramebuffer=new so(this.handler,{size:1,msaa:this._msaa,internalFormat:this._internalFormat,filter:"LINEAR"}),this.sceneFramebuffer.init(),this.blitFramebuffer=new Re(this.handler,{size:1,useDepth:!1,targets:[{internalFormat:this._internalFormat,format:this._format,type:this._type,filter:"NEAREST"}]}),this.blitFramebuffer.init(),this.toneMappingFramebuffer=new Re(this.handler,{useDepth:!1}),this.toneMappingFramebuffer.init(),this._fnScreenFrame=this._screenFrameMSAA,this.screenTexture={screen:this.toneMappingFramebuffer.textures[0],picking:this.pickingFramebuffer.textures[0],depth:this.screenDepthFramebuffer.textures[0],frustum:this.depthFramebuffer.textures[0]}}this.handler.ONCANVASRESIZE=()=>{this._resizeStart(),this.events.dispatch(this.events.resize,this.handler.canvas),this._resizeEnd(),this.events.dispatch(this.events.resizeend,this.handler.canvas)},this.screenFramePositionBuffer=this.handler.createArrayBuffer(new Float32Array([1,1,-1,1,1,-1,-1,-1]),2,4),this.outputTexture=this.screenTexture.screen,this._initializeRenderNodes(),this._initializeControls()}}_initializeControls(){let e=this.controls;this.controls={};for(let t in e)this.addControl(e[t])}resize(){this._resizeEnd()}setCurrentScreen(e){this._currentOutput=e,this.screenTexture[e]&&(this.outputTexture=this.screenTexture[e])}_resizeStart(){let e=this.handler.canvas;this.activeCamera.setViewportSize(e.width,e.height),this.sceneFramebuffer.setSize(.5*e.width,.5*e.height),this.blitFramebuffer&&this.blitFramebuffer.setSize(.5*e.width,.5*e.height,!0)}_resizeEnd(){let e=this.handler.canvas;this.activeCamera.setViewportSize(e.width,e.height),this.sceneFramebuffer.setSize(e.width,e.height),this.blitFramebuffer&&this.blitFramebuffer.setSize(e.width,e.height,!0),this.toneMappingFramebuffer&&this.toneMappingFramebuffer.setSize(e.width,e.height,!0),this.screenDepthFramebuffer&&this.screenDepthFramebuffer.setSize(e.clientWidth,e.clientHeight,!0),this.handler.gl.type==="webgl"?(this.screenTexture.screen=this.sceneFramebuffer.textures[0],this.screenTexture.picking=this.pickingFramebuffer.textures[0],this.screenTexture.depth=this.screenDepthFramebuffer.textures[0],this.screenTexture.frustum=this.depthFramebuffer.textures[0]):(this.screenTexture.screen=this.toneMappingFramebuffer.textures[0],this.screenTexture.picking=this.pickingFramebuffer.textures[0],this.screenTexture.depth=this.screenDepthFramebuffer.textures[0],this.screenTexture.frustum=this.depthFramebuffer.textures[0]),this.setCurrentScreen(this._currentOutput)}removeNode(e){e.remove()}addNode(e){this.renderNodes[e.name]?Qe.logWrn(`Node name ${e.name} already exists.`):(e.assign(this),this._renderNodesArr.unshift(e),this.renderNodes[e.name]=e)}_initializeRenderNodes(){for(let e=0;e<this._renderNodesArr.length;e++)this._renderNodesArr[e].initialize()}addNodeBefore(e,t){if(this.renderNodes[e.name])Qe.logWrn(`Node name ${e.name} already exists.`);else{e.assign(this),this.renderNodes[e.name]=e;for(let i=0;i<this._renderNodesArr.length;i++)if(this._renderNodesArr[i].isEqual(t)){this._renderNodesArr.splice(i,0,e);break}this._renderNodesArr.unshift(e)}}addNodes(e){for(let t=0;t<e.length;t++)this.addNode(e[t])}getMaxMSAA(e){let t=this.handler.gl;return t.getInternalformatParameter(t.RENDERBUFFER,t[e],t.SAMPLES)[0]}getMSAA(){return this._msaa}enqueueEntityCollectionsToDraw(e,t=0){this._entityCollections[t]||(this._entityCollections[t]=[]),this._entityCollections[t].push(...e)}markForDepthRefresh(){this._depthRefreshRequired=!0}_drawEntityCollections(e){let t=this._entityCollections[e];if(t.length){let i=this.handler.gl;this.enableBlendDefault();let r=t.length;for(;r--;)t[r]._fadingOpacity&&t[r].pointCloudHandler.draw();for(r=t.length;r--;){let n=t[r];t[r]._fadingOpacity&&(n.events.dispatch(n.events.draw,n),t[r].geoObjectHandler.draw())}for(i.activeTexture(i.TEXTURE0),i.bindTexture(i.TEXTURE_2D,this.billboardsTextureAtlas.texture),r=t.length;r--;){let n=t[r];n._fadingOpacity&&n.billboardHandler.draw()}let s=this.fontAtlas.atlasesArr;for(r=0;r<s.length;r++)i.activeTexture(i.TEXTURE0+r),i.bindTexture(i.TEXTURE_2D,s[r].texture);for(r=t.length;r--;)t[r]._fadingOpacity&&t[r].labelHandler.draw();for(r=t.length;r--;)t[r]._fadingOpacity&&t[r].rayHandler.draw();for(r=t.length;r--;)t[r]._fadingOpacity&&t[r].polylineHandler.draw();for(r=t.length;r--;)t[r]._fadingOpacity&&t[r].stripHandler.draw()}}_drawPickingEntityCollections(e){let t=this._entityCollections[e];if(t.length){let i=t.length;for(;i--;)t[i]._fadingOpacity&&t[i].billboardHandler.drawPicking();for(i=t.length;i--;)t[i]._fadingOpacity&&t[i].geoObjectHandler.drawPicking();for(i=t.length;i--;)t[i]._fadingOpacity&&t[i].labelHandler.drawPicking();for(i=t.length;i--;)t[i]._fadingOpacity&&t[i].rayHandler.drawPicking();for(i=t.length;i--;)t[i]._visibility&&t[i].polylineHandler.drawPicking();for(i=t.length;i--;)t[i]._visibility&&t[i].stripHandler.drawPicking()}}_drawDepthEntityCollections(e){let t=this._entityCollections[e];if(t.length){let i=t.length;for(;i--;)t[i]._fadingOpacity&&t[i].geoObjectHandler.drawDepth()}}_clearEntityCollectionQueue(e){this._entityCollections[e].length=0,this._entityCollections[e]=[]}draw(){this.activeCamera.checkMoveEnd();let e=this.events,t=e.pointerEvent(),i=!e.mouseState.leftButtonDown&&!e.mouseState.rightButtonDown,r=e.touchState.touchStart||e.touchState.touchEnd;const s=t&&i||r||this._depthRefreshRequired;this._depthRefreshRequired=!1,e.handleEvents();let n=this.sceneFramebuffer;n.activate();let a=this.handler.gl;a.clearColor(this.clearColor[0],this.clearColor[1],this.clearColor[2],this.clearColor[3]),a.clear(a.COLOR_BUFFER_BIT|a.DEPTH_BUFFER_BIT),this.enableBlendDefault(),e.dispatch(e.draw,this),this.activeCamera.checkFly();let l=this.activeCamera.frustums,h=this._renderNodesArr,c=l.length;for(;c--;){this.activeCamera.setCurrentFrustum(c),a.clear(a.DEPTH_BUFFER_BIT);let d=h.length;for(;d--;)h[d].preDrawNode();for(d=h.length;d--;)this.enableBlendDefault(),h[d].drawNode();this._drawEntityCollections(0),e.dispatch(e.drawtransparent,this),s&&this._drawPickingBuffer(0),this._drawDepthBuffer(0),this._clearEntityCollectionQueue(0)}for(let d=1;d<this._entityCollections.length;d++){a.clear(a.DEPTH_BUFFER_BIT);let u=l.length;for(;u--;)this.activeCamera.setCurrentFrustum(u),this._drawEntityCollections(d),s&&this._drawPickingBuffer(d),this._drawDepthBuffer(d);this._clearEntityCollectionQueue(d)}n.deactivate(),this.blitFramebuffer&&n.blitTo(this.blitFramebuffer,0),s&&(this._readPickingBuffer(),this._readDepthBuffer()),this._fnScreenFrame(),e.dispatch(e.postdraw,this),e.mouseState.wheelDelta=0,e.mouseState.justStopped=!1,e.mouseState.moving=!1,e.touchState.moving=!1}getImageDataURL(e="image/png",t=1){return this.draw(),this.handler.canvas?this.handler.canvas.toDataURL(e,t):""}_screenFrameMSAA(){let e=this.handler,t=e.programs.toneMapping,i=t._program,r=e.gl;r.disable(r.DEPTH_TEST),r.bindBuffer(r.ARRAY_BUFFER,this.screenFramePositionBuffer),r.vertexAttribPointer(i.attributes.corners,2,r.FLOAT,!1,0,0),this.toneMappingFramebuffer.activate(),r.clearColor(0,0,0,0),r.clear(r.COLOR_BUFFER_BIT),t.activate(),r.activeTexture(r.TEXTURE0),r.bindTexture(r.TEXTURE_2D,this.blitFramebuffer.textures[0]),r.uniform1i(i.uniforms.hdrBuffer,0),r.uniform1f(i.uniforms.gamma,this.gamma),r.uniform1f(i.uniforms.exposure,this.exposure),r.uniform1f(i.uniforms.whitepoint,this.whitepoint),r.drawArrays(r.TRIANGLE_STRIP,0,4),this.toneMappingFramebuffer.deactivate(),t=e.programs.screenFrame,i=t._program,t.activate(),r.activeTexture(r.TEXTURE0),r.bindTexture(r.TEXTURE_2D,this.outputTexture),r.uniform1i(i.uniforms.texture,0),r.drawArrays(r.TRIANGLE_STRIP,0,4),r.enable(r.DEPTH_TEST)}_screenFrameNoMSAA(){let e=this.handler,t=e.programs.screenFrame,i=t._program,r=e.gl;r.disable(r.DEPTH_TEST),t.activate(),r.activeTexture(r.TEXTURE0),r.bindTexture(r.TEXTURE_2D,this.outputTexture),r.uniform1i(i.uniforms.texture,0),r.bindBuffer(r.ARRAY_BUFFER,this.screenFramePositionBuffer),r.vertexAttribPointer(i.attributes.corners,2,r.FLOAT,!1,0,0),r.drawArrays(r.TRIANGLE_STRIP,0,4),r.enable(r.DEPTH_TEST)}_drawPickingBuffer(e){this.pickingFramebuffer.activate();let t=this.handler.gl;if(this.activeCamera.isFirstPass&&e===0?(t.clearColor(0,0,0,1),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT)):t.clear(t.DEPTH_BUFFER_BIT),t.disable(t.BLEND),e===0){let i=this._pickingCallbacks;for(let r=0,s=i.length;r<s;r++)i[r].callback.call(i[r].sender)}this._drawPickingEntityCollections(e),t.enable(t.BLEND),this.pickingFramebuffer.deactivate()}_drawDepthBuffer(e){this.depthFramebuffer.activate();let t=this.handler,i=t.gl;if(i.disable(i.BLEND),this.activeCamera.isFirstPass&&e===0?(i.clearColor(0,0,0,1),i.clear(i.COLOR_BUFFER_BIT|i.DEPTH_BUFFER_BIT)):i.clear(i.DEPTH_BUFFER_BIT),e===0){let r=this._depthCallbacks,s=r.length;for(;s--;)r[s].callback.call(r[s].sender)}if(this._drawDepthEntityCollections(e),this.depthFramebuffer.deactivate(),this._currentOutput==="depth"||this._currentOutput==="frustum"){this.screenDepthFramebuffer.activate();let r=t.programs.depth,s=r._program;i.bindBuffer(i.ARRAY_BUFFER,this.screenFramePositionBuffer),i.vertexAttribPointer(s.attributes.corners,2,i.FLOAT,!1,0,0),r.activate(),i.activeTexture(i.TEXTURE0),i.bindTexture(i.TEXTURE_2D,this.depthFramebuffer.textures[1]),i.uniform1i(s.uniforms.depthTexture,0),i.drawArrays(i.TRIANGLE_STRIP,0,4),this.screenDepthFramebuffer.deactivate()}i.enable(i.BLEND)}_readDepthBuffer(e){this.depthFramebuffer.readPixelBuffersAsync(e)}_readPickingBuffer_webgl1(){this.pickingFramebuffer.readPixelBuffersAsync()}_readPickingBuffer_webgl2(){this.pickingFramebuffer.readPixelBuffersAsync()}readPickingColor(e,t,i){var r;let s=this.pickingFramebuffer.width,n=this.pickingFramebuffer.height;e=Math.round(e*s);let a=4*((t=Math.round(t*n))*s+e),l=(r=this.pickingFramebuffer)==null?void 0:r.pixelBuffers[0].data;l&&(i[0]=l[a],i[1]=l[a+1],i[2]=l[a+2])}readDepth(e,t,i){let r=new Float32Array(4),s=new Uint8Array(4);this.depthFramebuffer.readData(e,t,s,0),this.depthFramebuffer.readData(e,t,r,1),i[0]=r[0],i[1]=Math.round(s[0]/10)-1}getDistanceFromPixel(e){let t=this.activeCamera,i=this.handler.canvas,r=e.x/i.width,s=(i.height-e.y)/i.height;if(Zt[0]=Zt[1]=0,this.readDepth(r,s,Zt),Zt[1]===-1)return;let n=Zt[0],a=t.frustums[Zt[1]];if(!a)return;let l=new te(2*r-1,2*s-1,2*n-1,1),h=a.inverseProjectionMatrix.mulVec4(l),c=-h.z/h.w;if(t.isOrthographic)return c;let d=e.direction||t.unproject(e.x,e.y);return c/Math.max(1e-6,d.dot(t.getForward()))}getCartesianFromPixel(e){let t=this.getDistanceFromPixel(e);if(t){if(this.activeCamera.isOrthographic){let i=new m;return this.activeCamera.unproject(e.x,e.y,t,i),i}return(e.direction||this.activeCamera.unproject(e.x,e.y)).scaleTo(t).addA(this.activeCamera.eye)}}getCartesianFromPixelAsync(e){return new Promise(((t,i)=>{this._readDepthBuffer((()=>{t(this.getCartesianFromPixel(e))}))}))}getDepthMinDistance(){let e=this.handler.canvas,t=e.width,i=e.height,r=ar,s=i*t,n=new N;for(let a=0;a<s;a++){n.x=a%t,n.y=Math.floor(a/t);let l=this.getDistanceFromPixel(n);l&&l<r&&(r=l)}return r<ar?r:0}getDepthMinDistanceAsync(){return new Promise(((e,t)=>{this._readDepthBuffer((()=>{e(this.getDepthMinDistance())}))}))}async setOrthographicProjection(e){if(e!==this.activeCamera.isOrthographic){let t=await this.getDepthMinDistanceAsync();t&&e&&(this.activeCamera.focusDistance=t),this.activeCamera.isOrthographic=e,this.events.dispatch(this.events.projchanged,this.activeCamera)}}start(){this._initialized||this.initialize(),this.handler.start()}destroy(){for(let e in this.controls)this.controls[e].remove();for(let e=0;e<this._renderNodesArr.length;e++)this._renderNodesArr[e].remove();this.div=null,this._renderNodesArr=[],this.renderNodes={},this.activeCamera=null,this.controls={},this.controlsBag={},this.colorObjects.clear(),this.colorObjects=null,this._pickingCallbacks=[],this.pickingFramebuffer=null,this._tempPickingPix_=null,this._depthCallbacks=[],this.depthFramebuffer=null,this.sceneFramebuffer=null,this.blitFramebuffer=null,this.toneMappingFramebuffer=null,this._entityCollections=[[]],this.handler.ONCANVASRESIZE=null,this.handler.destroy(),this.handler=null,this._initialized=!1}}const Po="/res",So=class nr{constructor(e){this.$target=null,this._instanceID=`__globus${nr.__counter__++?nr.__counter__:""}__`,window[this._instanceID]=this,this._canvas=document.createElement("canvas"),this._canvas.id=`canvas${this._instanceID}`,this._canvas.style.width="100%",this._canvas.style.height="100%",this._canvas.style.display="block",this._canvas.style.opacity="0.0",this._canvas.style.transition="opacity 150ms",this.$inner=document.createElement("div"),this.$inner.classList.add("og-inner"),this.$inner.appendChild(this._canvas),this.$inner.attributions=document.createElement("div"),e.attributionContainer?e.attributionContainer.appendChild(this.$inner.attributions):(this.$inner.attributions.classList.add("og-attribution"),this.$inner.appendChild(this.$inner.attributions)),e.target&&this.attachTo(e.target);const t=n=>{n.preventDefault()};this._canvas.onmouseenter=function(){document.addEventListener("mousewheel",t,{capture:!1,passive:!1})},this._canvas.onmouseleave=function(){document.removeEventListener("mousewheel",t)},this.renderer=new Md(new Tt(this._canvas,{autoActivate:!1,pixelRatio:e.dpi||window.devicePixelRatio+.15,context:{alpha:e.transparentBackground,antialias:!1,premultipliedAlpha:!0,preserveDrawingBuffer:!1}}),{autoActivate:!1,msaa:e.msaa,fontsSrc:e.fontsSrc,gamma:e.gamma,exposure:e.exposure,...e.transparentBackground&&{clearColor:[0,0,0,0]}}),this.renderer.div=this.$inner,e.skybox&&this.renderer.addNode(e.skybox),this._planetName=e.name?e.name:"globus_planet_"+nr.__counter__,this.planet=new Ai({name:this._planetName,frustums:e.frustums,ellipsoid:e.ellipsoid,maxGridSize:e.maxGridSize,nightTextureSrc:e.nightTextureSrc===null?null:e.nightTextureSrc||`${e.resourcesSrc||Po}/night.png`,specularTextureSrc:e.specularTextureSrc===null?null:e.specularTextureSrc||`${e.resourcesSrc||Po}/spec.png`,minAltitude:e.minAltitude,maxAltitude:e.maxAltitude||15e6,maxEqualZoomAltitude:e.maxEqualZoomAltitude,minEqualZoomAltitude:e.minEqualZoomAltitude,minEqualZoomCameraSlope:e.minEqualZoomCameraSlope,quadTreeStrategyPrototype:e.quadTreeStrategyPrototype,maxLoadingRequests:e.maxLoadingRequests,atmosphereEnabled:e.atmosphereEnabled,transitionOpacityEnabled:e.transitionOpacityEnabled,atmosphereParameters:e.atmosphereParameters,minDistanceBeforeMemClear:e.minDistanceBeforeMemClear,vectorTileSize:e.vectorTileSize,maxNodesCount:e.maxNodesCount,transparentBackground:e.transparentBackground}),e.terrain?Array.isArray(e.terrain)?this.planet.setTerrain(e.terrain[0]):this.planet.setTerrain(e.terrain):this.planet.setTerrain(new ms),this.renderer.addNode(this.planet),e.controls?this.planet.addControls(e.controls):this.planet.addControls([new Ra,new ya,new Ma,new pa,new La,new nn,new ns]);const i=this.renderer.controls;let r;for(let n in i)if(i[n]instanceof Qr){r=i[n];break}r?this.sun=r:(this.sun=new Qr,this.planet.addControl(this.sun)),e.sun&&(e.sun.active===void 0||e.sun.active||this.sun.deactivate(),e.sun.stopped===!0&&this.sun.stop()),e.layers&&this.planet.addLayers(e.layers);let s=e.viewExtent;s&&(s instanceof Array?this.planet.viewExtentArr(s):this.planet.viewExtent(s)),(e.autoActivate||Ue(e.autoActivate))&&this.start()}start(){this.renderer.start(),this.fadeIn()}fadeIn(){this._canvas.style.opacity="1.0"}fadeOut(){this._canvas.style.opacity="0"}attachTo(e,t){let i;this.detach(),i=e instanceof HTMLElement?e:document.getElementById(e)||document.querySelector(e),i?(this.$target=i,t&&this.$target.firstChild?this.$target.insertBefore(this.$inner,this.$target.firstChild):i.appendChild(this.$inner)):console.warn(`Target container not found. Provided target: ${e}`)}detach(){this.$target&&(this.$target.removeChild(this.$inner),this.$target=null)}destroy(){this.detach(),this.planet.layers.forEach((e=>e.remove())),this.planet.destroy(),this.renderer.destroy(),window[this._instanceID]=null}};So.__counter__=0;let Rd=So;new pr(3396200,3389508),new pr(1737400,1737400);class Bd{static async load(e){const t=await fetch(e);if(!t.ok)throw new Error(`Unable to load '${e}'`);const i=await t.arrayBuffer(),r=new DataView(i);if(r.getUint32(0,!0)!==1179937895)throw new Error("Not a valid GLB");r.getUint32(4,!0);const s=this.getChunks(r);return this.parseChunks(s)}static getChunks(e){const t=[];let i=12;do{const r=this.getChunk(e,i);i+=8+r.length,t.push(r)}while(i<e.byteLength);return t}static getChunk(e,t){const i=e.getUint32(t,!0);return{length:i,type:this.getChunkType(e.getUint32(t+4,!0)),chunkData:e.buffer.slice(t+8,t+8+i)}}static getChunkType(e){switch(e){case 1313821514:return 0;case 5130562:return 1;default:return 2}}static parseChunks(e){let t,i=[];for(const r of e)switch(r.type){case 0:t=this.parseJsonChunk(r);break;case 1:i.push(r.chunkData)}if(t===void 0)throw new Error("GLB json data extraction failed");return{gltf:t,bin:i}}static parseJsonChunk(e){return JSON.parse(new TextDecoder().decode(e.chunkData))}}var Rt=(o=>(o[o.byte=5120]="byte",o[o.ubyte=5121]="ubyte",o[o.short=5122]="short",o[o.ushort=5123]="ushort",o[o.uint=5125]="uint",o[o.float=5126]="float",o))(Rt||{}),yt=(o=>(o.scalar="SCALAR",o.vec2="VEC2",o.vec3="VEC3",o.vec4="VEC4",o.mat2="MAT2",o.mat3="MAT3",o.mat4="MAT4",o))(yt||{}),ws=(o=>(o[o.points=0]="points",o[o.lines=1]="lines",o[o.lineLoop=2]="lineLoop",o[o.lineStrip=3]="lineStrip",o[o.triangles=4]="triangles",o[o.triangleStrip=5]="triangleStrip",o[o.triangleFan=6]="triangleFan",o))(ws||{});const Mo=class dt{constructor(e){var t;if(this.gltf=e,this._materials=[],this._images=[],this.meshes=[],((t=e.gltf.extensionsRequired)==null?void 0:t.includes("KHR_draco_mesh_compression"))&&dt._dracoDecoderModule===null)throw new Error("Unable to import GLTF. Draco decoder module is not connected");this._initImages(),this._initMaterials(),this._initMeshes()}static connectDracoDecoderModule(e){dt._dracoDecoderModule=e}static async loadGlb(e){const t=await Bd.load(e);return new dt(t)}getObjects3d(){const e=[];for(let t=0;t<this.meshes.length;t++)for(let i=0;i<this.meshes[t].primitives.length;i++)this.meshes[t].primitives[i].object3d!==void 0&&e.push(this.meshes[t].primitives[i].object3d);return e}toEntities(){const e=[];for(const t of this.gltf.gltf.scenes){if(t===void 0||t.nodes===void 0)return[];for(const i of t.nodes){const r=this.gltf.gltf.nodes[i];r.mesh===void 0&&r.children===void 0||e.push(this._nodeToEntity(r))}}return e}_nodeToEntity(e,t){const i=new V({name:e.name,cartesian:new m(0,0,0),relativePosition:t!==void 0});let r=null;if(e.mesh!==void 0&&(r=this.meshToEntity(this.meshes[e.mesh],t),i.appendChild(r)),e.matrix!==void 0){const s=new re;s.set(e.matrix),i.setCartesian3v(s.getPosition()),i.setDirectQuaternionRotation(s.getQuat()),i.setScale3v(s.getScaling())}if(e.translation!==void 0&&e.matrix===void 0&&(i.relativePosition=!0,i.setCartesian(e.translation[0],e.translation[1],e.translation[2])),e.rotation!==void 0&&e.matrix===void 0&&i.setDirectQuaternionRotation(new O(e.rotation[0],e.rotation[1],e.rotation[2],e.rotation[3])),e.scale!==void 0&&e.matrix===void 0&&i.setScale3v(new m(e.scale[0],e.scale[1],e.scale[2])),e.children!==void 0)for(const s of e.children){const n=this._nodeToEntity(this.gltf.gltf.nodes[s],i);r?r.appendChild(n):i.appendChild(n)}return i}meshToEntity(e,t){const i=new V({name:e.name,cartesian:new m(0,0,0),relativePosition:!0,independentPicking:!0});return e.primitives.map((r=>{i.appendChild(new V({name:r.name,relativePosition:!0,geoObject:{object3d:r.object3d,tag:r.name}}))})),i}_initImages(){if(this.gltf.gltf.images)for(const e of this.gltf.gltf.images)this._images.push({src:e.uri,element:this._getImage(e.mimeType,e.bufferView),mimeType:e.mimeType,name:e.name})}_getImage(e,t){if(t&&e){const i=this.gltf.gltf.bufferViews[t],r=URL.createObjectURL(new Blob([this.gltf.bin[i.buffer].slice(i.byteOffset,i.byteOffset+i.byteLength)],{type:e})),s=new Image;return s.src=r,s}}_initMaterials(){if(this.gltf.gltf.materials)for(const e of this.gltf.gltf.materials){const t={name:e.name,emissiveFactor:e.emissiveFactor,alphaMode:e.alphaMode,alphaCutoff:e.alphaCutoff,doubleSided:e.doubleSided};if(e.pbrMetallicRoughness){if(e.pbrMetallicRoughness.baseColorFactor&&(t.baseColorFactor=e.pbrMetallicRoughness.baseColorFactor),e.pbrMetallicRoughness.baseColorTexture){const i=this.gltf.gltf.textures[e.pbrMetallicRoughness.baseColorTexture.index].source;i!==void 0&&(t.baseColorTexture={image:this._images[i],texCoord:e.pbrMetallicRoughness.baseColorTexture.texCoord})}if(e.pbrMetallicRoughness.metallicRoughnessTexture){const i=this.gltf.gltf.textures[e.pbrMetallicRoughness.metallicRoughnessTexture.index].source;i!==void 0&&(t.metallicRoughnessTexture={image:this._images[i],texCoord:e.pbrMetallicRoughness.metallicRoughnessTexture.texCoord})}}if(e.normalTexture){const i=this.gltf.gltf.textures[e.normalTexture.index].source;i!==void 0&&(t.normalTexture={image:this._images[i],texCoord:e.normalTexture.texCoord,scale:e.normalTexture.scale})}if(e.occlusionTexture){const i=this.gltf.gltf.textures[e.occlusionTexture.index].source;i!==void 0&&(t.occlusionTexture={image:this._images[i],texCoord:e.occlusionTexture.texCoord,strength:e.occlusionTexture.strength})}if(e.emissiveTexture){const i=this.gltf.gltf.textures[e.emissiveTexture.index].source;i!==void 0&&(t.emissiveTexture={image:this._images[i],texCoord:e.emissiveTexture.texCoord})}this._materials.push(t)}}_initMeshes(){this.meshes=[];for(let e=0;e<this.gltf.gltf.meshes.length;e++){const t=this.gltf.gltf.meshes[e],i={name:t.name,primitives:[]};for(let r=0;r<t.primitives.length;r++)i.primitives.push(this._buildPrimitive(t,t.primitives[r],`${e}-${r}`));this.meshes.push(i)}}_buildPrimitive(e,t,i){var r,s;let n=null;const a=this._materials[t.material||0],l=(r=a.baseColorTexture)!=null&&r.texCoord?`TEXCOORD_${a.baseColorTexture.texCoord}`:"TEXCOORD_0";if((s=t.extensions)!=null&&s.KHR_draco_mesh_compression){const h=t.extensions.KHR_draco_mesh_compression,c=this.gltf.gltf.bufferViews[h.bufferView],d=c.byteOffset||0,u=dt._dracoDecoderModule,g=new u.Decoder,f=new u.DecoderBuffer;if(f.Init(new Int8Array(this.gltf.bin[c.buffer].slice(d,d+c.byteLength)),c.byteLength),g.GetEncodedGeometryType(f)!==u.TRIANGULAR_MESH)throw new Error("Draco compressed data is not a mesh");const p=new u.Mesh;if(!g.DecodeBufferToMesh(f,p).ok()||p.ptr===0)throw new Error("Failed to decode Draco mesh");const _=p.num_faces(),v=new Uint32Array(3*_),x=new u.DracoInt32Array;for(let w=0;w<_;w++)g.GetFaceFromMesh(p,w,x),v[3*w]=x.GetValue(0),v[3*w+1]=x.GetValue(1),v[3*w+2]=x.GetValue(2);u.destroy(x);const y={};for(const w in h.attributes){const b=h.attributes[w],C=g.GetAttributeByUniqueId(p,b),E=p.num_points(),T=C.num_components(),L=new u.DracoFloat32Array;g.GetAttributeFloatForAllPoints(p,C,L);const S=new Float32Array(E*T);for(let R=0;R<S.length;R++)S[R]=L.GetValue(R);u.destroy(L),y[w]=S}u.destroy(p),u.destroy(f),u.destroy(g),n={name:`${e.name}/${a.name}/${i}`,vertices:y.POSITION,indices:v,mode:t.mode?t.mode:ws.triangles,material:this._materials[t.material||0]||void 0,normals:y.NORMAL,texCoords:void 0}}else{const h=l?t.attributes[l]:void 0,c=h?this.gltf.gltf.accessors[h]:void 0;n={name:`${e.name}/${a.name}/${i}`,indices:t.indices?dt._access(this.gltf.gltf.accessors[t.indices],this.gltf):void 0,mode:t.mode?t.mode:ws.triangles,material:this._materials[t.material||0]||void 0,vertices:dt._access(this.gltf.gltf.accessors[t.attributes.POSITION],this.gltf),normals:dt._access(this.gltf.gltf.accessors[t.attributes.NORMAL],this.gltf),texCoords:c?dt._access(c,this.gltf):void 0}}if(n===null)throw new Error("Unable to build primitive");return n.object3d=dt._toObject3d(n),n}static _toObject3d(e){var t,i,r,s,n,a,l,h,c,d,u,g,f;return new $({name:e.name,vertices:Array.from(e.vertices),normals:Array.from(e.normals),texCoords:e.texCoords?Array.from(e.texCoords):void 0,indices:Array.from(e.indices),normalTextureImage:(i=(t=e.material)==null?void 0:t.normalTexture)==null?void 0:i.image.element,normalTextureSrc:(s=(r=e.material)==null?void 0:r.normalTexture)==null?void 0:s.image.src,colorTextureImage:(a=(n=e.material)==null?void 0:n.baseColorTexture)==null?void 0:a.image.element,colorTextureSrc:(h=(l=e.material)==null?void 0:l.baseColorTexture)==null?void 0:h.image.src,metallicRoughnessTextureImage:(d=(c=e.material)==null?void 0:c.occlusionTexture)==null?void 0:d.image.element,metallicRoughnessTextureSrc:(g=(u=e.material)==null?void 0:u.occlusionTexture)==null?void 0:g.image.src,color:(f=e.material)==null?void 0:f.baseColorFactor})}static _access(e,t){const i=t.gltf.bufferViews[e.bufferView],r=t.bin[i.buffer];let s=i.byteOffset||0;e.byteOffset!==void 0&&(s+=e.byteOffset);const n=r.slice(s,s+i.byteLength);switch(e.type){case yt.scalar:return this._getTensor(n,e,1,i.byteStride);case yt.vec2:return this._getTensor(n,e,2,i.byteStride);case yt.vec3:return this._getTensor(n,e,3,i.byteStride);case yt.vec4:case yt.mat2:return this._getTensor(n,e,4,i.byteStride);case yt.mat3:return this._getTensor(n,e,9,i.byteStride);case yt.mat4:return this._getTensor(n,e,16,i.byteStride);default:throw new Error("Unknown accessor type")}}static _getTensor(e,t,i,r){if(t.componentType===Rt.ushort)return new Uint16Array(e,0,t.count*i);if(t.componentType===Rt.short)return new Int16Array(e,0,t.count*i);if(t.componentType===Rt.uint)return new Uint32Array(e,0,t.count*i);if(t.componentType===Rt.float)return new Float32Array(e,0,t.count*i);if(t.componentType===Rt.ubyte)return new Uint8Array(e,0,t.count*i);if(t.componentType===Rt.byte)return new Int8Array(e,0,t.count*i);throw new Error("Unknown component type")}};Mo._dracoDecoderModule=null;let kd=Mo;const Id=({children:o,onDraw:e,...t})=>{const i=M.useRef(null),{setGlobe:r}=ut(),[s,n]=M.useState(t),a=M.useRef(null);return M.useEffect(()=>{if(a&&a.current&&t.viewExtent!==void 0){const l=t.viewExtent instanceof j?t.viewExtent:new j(new P(t.viewExtent[0],t.viewExtent[1]),new P(t.viewExtent[2],t.viewExtent[3]));a.current.planet.viewExtent(l)}},[t.viewExtent]),M.useEffect(()=>{a&&a.current&&t.atmosphereEnabled!==void 0&&(a.current.planet.atmosphereEnabled=t.atmosphereEnabled)},[t.atmosphereEnabled]),M.useEffect(()=>{a&&a.current&&t.sunActive!==void 0&&(t.sunActive?a.current?.sun.activate():a.current?.sun.deactivate())},[t.sunActive]),M.useEffect(()=>{if(a.current)i.current=a.current.$target;else{const l=new Eo("OSM"),h=new Ao("Microsoft Bing");a.current=new Rd({target:i.current,name:"Earth",terrain:new Co,layers:[l,h],autoActivate:!0,atmosphereEnabled:!0,...s}),e&&a.current.planet.events.on("draw",e)}return r(a.current),()=>{a.current&&(e&&a.current.planet.events.off("draw",e),a.current.destroy(),a.current=null)}},[s]),Ve.createElement("div",{style:{width:"100%",height:"100%"},ref:i},o)},zd=({name:o,...e})=>{const{globe:t}=ut(),i=M.useRef(null);return M.useEffect(()=>{typeof e.src=="string"&&i.current&&i.current?.setSrc(e.src)},[e.src]),M.useEffect(()=>{if(t)return i.current=new hs(o,e),t.planet.addLayer(i.current),()=>{i.current&&t.planet.removeLayer(i.current)}},[t]),null},Dd=({name:o,...e})=>{const{globe:t}=ut(),i=M.useRef(null);return M.useEffect(()=>{typeof e.src=="string"&&i.current&&i.current?.setSrc(e.src)},[e.src]),M.useEffect(()=>{if(t)return i.current=new To(o,e),t.planet.addLayer(i.current),()=>{i.current&&t.planet.removeLayer(i.current)}},[t]),null},Fd=({name:o,...e})=>{const{globe:t}=ut(),i=M.useRef(null);return M.useEffect(()=>{typeof e.url=="string"&&i.current&&i.current?.setUrl(e.url)},[e.url]),M.useEffect(()=>{if(t)return i.current=new Li(o,{...e}),t.planet.addLayer(i.current),()=>{i.current&&t.planet.removeLayer(i.current)}},[t]),Ve.createElement(Cs,{layerRef:i,name:o,...e})},Cs=({opacity:o,children:e,name:t,layerRef:i,...r})=>{const[s,n]=Ve.useState(!1);return M.useEffect(()=>{i&&i.current&&typeof o=="number"&&s&&(i.current.opacity=o)},[o]),M.useEffect(()=>(s&&i&&i.current&&(r.onVisibilityChange&&i.current?.events.on("visibilitychange",r.onVisibilityChange),r.onAdd&&i.current?.events.on("add",r.onAdd),r.onRemove&&i.current?.events.on("remove",r.onRemove),r.onMouseMove&&i.current?.events.on("mousemove",r.onMouseMove),r.onMouseEnter&&i.current?.events.on("mouseenter",r.onMouseEnter),r.onMouseLeave&&i.current?.events.on("mouseleave",r.onMouseLeave),r.onLclick&&i.current?.events.on("lclick",r.onLclick),r.onRclick&&i.current?.events.on("rclick",r.onRclick),r.onMclick&&i.current?.events.on("mclick",r.onMclick),r.onLdblclick&&i.current?.events.on("ldblclick",r.onLdblclick),r.onRdblclick&&i.current?.events.on("rdblclick",r.onRdblclick),r.onMdblclick&&i.current?.events.on("mdblclick",r.onMdblclick),r.onLup&&i.current?.events.on("lup",r.onLup),r.onRup&&i.current?.events.on("rup",r.onRup),r.onMup&&i.current?.events.on("mup",r.onMup),r.onLdown&&i.current?.events.on("ldown",r.onLdown),r.onRdown&&i.current?.events.on("rdown",r.onRdown),r.onMdown&&i.current?.events.on("mdown",r.onMdown),r.onLhold&&i.current?.events.on("lhold",r.onLhold),r.onRhold&&i.current?.events.on("rhold",r.onRhold),r.onMhold&&i.current?.events.on("mhold",r.onMhold),r.onMouseWheel&&i.current?.events.on("mousewheel",r.onMouseWheel),r.onTouchMove&&i.current?.events.on("touchmove",r.onTouchMove),r.onTouchStart&&i.current?.events.on("touchstart",r.onTouchStart),r.onTouchEnd&&i.current?.events.on("touchend",r.onTouchEnd),r.onDoubleTouch&&i.current?.events.on("doubletouch",r.onDoubleTouch)),()=>{r.onLclick&&i?.current?.events.off("lclick",r.onLclick),n(!1)}),[s]),i?.current&&!s&&n(!0),Ve.createElement(Ve.Fragment,null,e)},Ts=M.createContext({addEntity:()=>{},removeEntity:()=>{},addLabel:()=>{},removeLabel:()=>{},addBillboard:()=>{},removeBillboard:()=>{},addGeoObject:()=>{},removeGeoObject:()=>{},addGeometry:()=>{},removeGeometry:()=>{},addPolyline:()=>{},removePolyline:()=>{},addStrip:()=>{},removeStrip:()=>{},addGltf:(o,e)=>{},removeGltf:(o,e)=>{}}),Od=({visibility:o,children:e,name:t,...i})=>{const{globe:r}=ut(),s=M.useRef(null),[n,a]=M.useState([]),l=M.useRef(new Set);M.useEffect(()=>{typeof o=="boolean"&&s.current&&s.current.setVisibility(o)},[o]),M.useEffect(()=>{if(r)return s.current=new fe(t,i),r.planet.addLayer(s.current),i.onDraw&&s.current?.events.on("draw",i.onDraw),i.onMouseEnter&&s.current?.events.on("mouseenter",i.onMouseEnter),()=>{s.current&&(r.planet.removeLayer(s.current),i.onDraw&&s.current?.events.off("draw",i.onDraw),i.onMouseEnter&&s.current?.events.off("mouseenter",i.onMouseEnter))}},[r]),M.useEffect(()=>{if(s.current&&n.length>0){const L=n.filter(S=>!l.current.has(S));s.current.addEntities(L),L.forEach(S=>l.current.add(S))}},[n]);const h=M.useCallback(L=>{a(S=>S.includes(L)?S:[...S,L])},[]),c=M.useCallback(L=>{a(S=>S.filter(R=>R!==L)),s.current&&(s.current.removeEntity(L),l.current.delete(L))},[]),d=M.useCallback((L,S)=>{L.setBillboard(S)},[]),u=M.useCallback(L=>{L.billboard?.remove()},[]),g=M.useCallback((L,S)=>{L.setGeoObject(S)},[]),f=M.useCallback(L=>{L.geoObject?.remove()},[]),p=M.useCallback((L,S)=>{L.setLabel(S)},[]),_=M.useCallback(L=>{L.label?.remove()},[]),v=M.useCallback((L,S)=>{L.setGeometry(S)},[]),x=M.useCallback(L=>{L.geometry?.remove()},[]),y=M.useCallback((L,S)=>{L.setPolyline(S)},[]),w=M.useCallback(L=>{L.polyline?.remove()},[]),b=M.useCallback((L,S)=>{L.setStrip(S)},[]),C=M.useCallback(L=>{L.strip?.remove()},[]),E=M.useCallback((L,S)=>{L.appendChildren(S,!0)},[]),T=M.useCallback((L,S)=>{S.forEach(R=>{R.parent===L&&R.remove()})},[]);return Ve.createElement(Ts.Provider,{value:{addEntity:h,removeEntity:c,addBillboard:d,removeBillboard:u,addGeoObject:g,removeGeoObject:f,addLabel:p,removeLabel:_,addGeometry:v,removeGeometry:x,addPolyline:y,removePolyline:w,addStrip:b,removeStrip:C,addGltf:E,removeGltf:T}},Ve.createElement(Cs,{layerRef:s,name:t,...i},e))},Nd=({visibility:o,src:e,size:t,color:i,rotation:r,offset:s,_addBillboard:n,_removeBillboard:a,...l})=>{const h=M.useRef(null);return M.useEffect(()=>{typeof o=="boolean"&&h.current&&h.current?.setVisibility(o)},[o]),M.useEffect(()=>{typeof e=="string"&&h.current&&h.current?.setSrc(e)},[e]),M.useEffect(()=>{typeof r=="number"&&h.current&&h.current?.setRotation(r*Math.PI/180)},[r]),M.useEffect(()=>{s&&h.current&&(s instanceof m?h.current?.setOffset(s.x,s.y,s.z):s instanceof N?h.current?.setOffset(s.x,s.y):h.current?.setOffset(s[0],s[1],s[2]))},[s]),M.useEffect(()=>{t&&h.current&&h.current?.setSize(t[0],t[1])},[t]),M.useEffect(()=>{typeof i=="string"&&h.current&&h.current?.setColorHTML(i)},[i]),M.useEffect(()=>(h.current=new mn({...l,color:i,size:t,src:e,offset:s,visibility:o,rotation:r?r*Math.PI/180:0}),h.current&&n&&n(h.current),()=>{h.current&&a&&a(h.current)}),[n,a]),null},Hd=({color:o,objSrc:e,scale:t,visibility:i,_addGeoObject:r,_removeGeoObject:s,...n})=>{const a=M.useRef(null);return M.useEffect(()=>{t&&a.current&&a.current?.setScale(t)},[t]),M.useEffect(()=>{a.current&&(typeof o=="string"?a.current?.setColorHTML(o):o instanceof te?a.current?.setColor4v(o):Array.isArray(o)&&a.current?.setColor(...o))},[o]),M.useEffect(()=>{e&&a.current&&a.current?.setObjectSrc(e)},[e]),M.useEffect(()=>{typeof i=="boolean"&&a.current&&a.current?.setVisibility(i)},[i]),M.useEffect(()=>(a.current=new wn({color:o,objSrc:e,scale:t,visibility:i,...n}),a.current&&r&&r(a.current),()=>{a.current&&s&&s(a.current)}),[r,s]),null},Vd=({visibility:o,size:e,color:t,rotation:i,offset:r,text:s,face:n,isRTL:a,align:l,outline:h,outlineColor:c,opacity:d,_addLabel:u,_removeLabel:g,...f})=>{const p=M.useRef(null);return M.useEffect(()=>{typeof o=="boolean"&&p.current&&p.current?.setVisibility(o)},[o]),M.useEffect(()=>{typeof i=="number"&&p.current&&p.current?.setRotation(i*Math.PI/180)},[i]),M.useEffect(()=>{typeof e=="number"&&p.current&&p.current?.setSize(e)},[e]),M.useEffect(()=>{typeof h=="number"&&p.current&&p.current?.setOutline(h)},[h]),M.useEffect(()=>{typeof d=="number"&&p.current&&p.current?.setOpacity(d)},[d]),M.useEffect(()=>{typeof a=="boolean"&&p.current&&p.current?.setRtl(a)},[a]),M.useEffect(()=>{r&&p.current&&(r instanceof m?p.current?.setOffset(r.x,r.y,r.z):r instanceof N?p.current?.setOffset(r.x,r.y):p.current?.setOffset(r[0],r[1],r[2]))},[r]),M.useEffect(()=>{typeof s=="string"&&p.current&&p.current?.setText(s)},[s]),M.useEffect(()=>{typeof n=="string"&&p.current&&p.current?.setFace(n)},[n]),M.useEffect(()=>{typeof l=="string"&&p.current&&p.current?.setAlign(l)},[l]),M.useEffect(()=>{typeof t=="string"&&p.current&&p.current?.setColorHTML(t)},[t]),M.useEffect(()=>{typeof c=="string"&&p.current&&p.current?.setOutlineColorHTML(c)},[c]),M.useEffect(()=>(p.current=new Tn({...f,color:t,size:e,text:s,face:n,isRTL:a,align:l,outline:h,outlineColor:c,opacity:d,offset:r,visibility:o,rotation:i?i*Math.PI/180:0}),p.current&&u&&u(p.current),()=>{p.current&&g&&g(p.current)}),[u,g]),null};function Ud(o){switch(o.type){case"POINT":return Array.isArray(o.coordinates)&&o.coordinates.length>=2&&typeof o.coordinates[0]=="number";case"LINESTRING":return Array.isArray(o.coordinates)&&o.coordinates.every(e=>Array.isArray(e)&&e.length>=2&&typeof e[0]=="number");case"POLYGON":return Array.isArray(o.coordinates)&&o.coordinates.every(e=>Array.isArray(e)&&e.every(t=>Array.isArray(t)&&t.length>=2&&typeof t[0]=="number"));case"MULTIPOLYGON":return Array.isArray(o.coordinates)&&o.coordinates.every(e=>Array.isArray(e)&&e.every(t=>Array.isArray(t)&&t.every(i=>Array.isArray(i)&&i.length>=2&&typeof i[0]=="number")));case"MULTILINESTRING":return Array.isArray(o.coordinates)&&o.coordinates.every(e=>Array.isArray(e)&&e.every(t=>Array.isArray(t)&&t.length>=2&&typeof t[0]=="number"));default:return!1}}const Gd=o=>{const{visibility:e,fillColor:t,lineColor:i,strokeColor:r,lineWidth:s,strokeWidth:n,type:a,coordinates:l,_addGeometry:h,_removeGeometry:c}=o,d=M.useRef(null);if(!Ud({type:a,coordinates:l}))throw new Error(`Invalid coordinates for type ${a}`);return M.useEffect(()=>{typeof e=="boolean"&&d.current&&d.current.setVisibility(e)},[e]),M.useEffect(()=>{if(t!==void 0&&d.current){if(t instanceof te)d.current.setFillColor4v(t);else if(Array.isArray(t))d.current.setFillColor(...t);else if(typeof t=="string"&&d.current){const u=ji.htmlColorToRgba(t);d.current.setFillColor4v(u)}}},[t]),M.useEffect(()=>{if(i!==void 0&&d.current){if(i instanceof te)d.current.setLineColor4v(i);else if(Array.isArray(i))d.current.setLineColor(...i);else if(typeof i=="string"&&d.current){const u=ji.htmlColorToRgba(i);d.current.setLineColor4v(u)}}},[i]),M.useEffect(()=>{if(r!==void 0&&d.current){if(r instanceof te)d.current.setStrokeColor4v(r);else if(Array.isArray(r))d.current.setStrokeColor(...r);else if(typeof r=="string"&&d.current){const u=ji.htmlColorToRgba(r);d.current.setStrokeColor4v(u)}}},[r]),M.useEffect(()=>{typeof s=="number"&&d.current&&d.current.setLineWidth(s)},[s]),M.useEffect(()=>{typeof n=="number"&&d.current&&d.current.setStrokeWidth(n)},[n]),M.useEffect(()=>(d.current=new yn({...o,type:a,coordinates:l,style:{fillColor:t,lineColor:i,strokeColor:r,lineWidth:s,strokeWidth:n},visibility:e}),d.current&&h&&h(d.current),()=>{d.current&&c&&c(d.current)}),[h,c]),null},Ro=o=>Array.isArray(o)&&o.length>0&&o[0][0]instanceof m,Bo=o=>Array.isArray(o)&&o.length>0&&(o[0][0]instanceof P||o[0][0]instanceof Array),jd=o=>o.map(e=>e.map(t=>P.createFromArray(t))),qd=o=>typeof o=="string"||Array.isArray(o),ko=o=>Array.isArray(o)&&o.every(e=>Array.isArray(e)&&e.every(qd)),Yd=o=>Array.isArray(o)&&o.every(e=>Array.isArray(e)&&e.every(t=>Array.isArray(t)&&t.length===4&&t.every(i=>typeof i=="number"))),Io=o=>ko(o)?o.map(e=>e.map(t=>{const i=ji.htmlColorToRgba(t);return[i.x,i.y,i.z,i.w]})):o,Wd=({visibility:o,color:e,altitude:t,thickness:i,opacity:r,isClosed:s,pathColors:n,path:a,_addPolyline:l,_removePolyline:h,...c})=>{const d=M.useRef(null);return M.useEffect(()=>{typeof o=="boolean"&&d.current&&d.current?.setVisibility(o)},[o]),M.useEffect(()=>{typeof e=="string"&&d.current&&d.current?.setColorHTML(e)},[e]),M.useEffect(()=>{typeof t=="number"&&d.current&&d.current?.setAltitude(t)},[t]),M.useEffect(()=>{typeof i=="number"&&d.current&&d.current?.setThickness(i)},[i]),M.useEffect(()=>{typeof r=="number"&&d.current&&d.current?.setOpacity(r)},[r]),M.useEffect(()=>{if(d.current&&a!==void 0)if(Bo(a))d.current?.setPathLonLat(a);else if(Ro(a))d.current?.setPath3v(a);else{const u=jd(a);u&&d.current?.setPathLonLat(u)}},[a]),M.useEffect(()=>{if(n&&Array.isArray(n)&&n.length>0)if(ko(n)){const u=Io(n);u&&d.current?.setPathColors(u)}else Yd(n)&&d.current?.setPathColors(n)},[n]),M.useEffect(()=>(d.current=new Ln({...c,color:e,visibility:o,opacity:r,thickness:i,pathLonLat:a&&Bo(a)?a:void 0,path3v:a&&Ro(a)?a:void 0,pathColors:Io(n),altitude:t}),d.current&&l&&l(d.current),()=>{d.current&&h&&h(d.current)}),[l,h]),null},$d=o=>Array.isArray(o)&&o.length>0&&o[0][0]instanceof m,Xd=o=>Array.isArray(o)&&o.length>0&&o[0][0]instanceof P,zo=(o,e)=>e?$d(e)?e:Xd(e)?e.map(t=>t.map(i=>o.lonLatToCartesian(i))):e.map(t=>t.map(i=>o.lonLatToCartesian(P.createFromArray(i)))):[],Zd=({visibility:o,color:e,opacity:t,path:i,_addStrip:r,_removeStrip:s,...n})=>{const a=M.useRef(null),{globe:l}=ut();return M.useEffect(()=>{typeof o=="boolean"&&a.current&&a.current?.setVisibility(o)},[o]),M.useEffect(()=>{typeof t=="number"&&a.current&&a.current?.setOpacity(t)},[t]),M.useEffect(()=>{l&&i!==void 0&&a.current&&a.current?.setPath(zo(l.planet.ellipsoid,i))},[i]),M.useEffect(()=>{typeof e=="string"&&a.current&&a.current?.setColorHTML(e)},[e]),M.useEffect(()=>(l&&(a.current=new Mn({...n,color:e,visibility:o,path:zo(l.planet.ellipsoid,i),opacity:t}),a.current&&r&&r(a.current)),()=>{a.current&&s&&s(a.current)}),[r,s,l]),null},Qd=({visibility:o,lon:e,lat:t,alt:i,lonlat:r,name:s,children:n,yaw:a,pitch:l,roll:h,cartesian:c,_addEntity:d,_removeEntity:u,relativePosition:g,...f})=>{const{globe:p}=ut(),{addEntity:_,removeEntity:v,addBillboard:x,removeBillboard:y,addGeoObject:w,removeGeoObject:b,addLabel:C,removeLabel:E,addGeometry:T,removeGeometry:L,addPolyline:S,removePolyline:R,addStrip:z,removeStrip:F,addGltf:B,removeGltf:D}=M.useContext(Ts),A=M.useRef(null),[I,k]=M.useState(null),[U,Fe]=M.useState(null),[ge,ke]=M.useState(null),[Ee,ie]=M.useState(null),[xe,Ie]=M.useState(null),[Bt,Qt]=M.useState(null),[kt,Do]=M.useState(null),[Fo,sr]=M.useState(!1),ft=M.useRef([]);M.useEffect(()=>{r&&(r instanceof P||(r=P.createFromArray(r)),A.current?.setLonLat(r))},[r,I]),M.useEffect(()=>{typeof e=="number"&&typeof t=="number"&&typeof i=="number"&&A.current?.setLonLat2(e,t,i)},[e,t,i]),M.useEffect(()=>{typeof o=="boolean"&&A.current&&A.current?.setVisibility(o)},[o]),M.useEffect(()=>{Array.isArray(c)&&A.current&&A.current?.setCartesian(c[0],c[1],c[2])},[]),M.useEffect(()=>{typeof a=="number"&&A.current&&A.current?.setYaw(a*_r.RADIANS)},[a]),M.useEffect(()=>{typeof h=="number"&&A.current&&A.current?.setRoll(h*_r.RADIANS)},[h]),M.useEffect(()=>{typeof l=="number"&&A.current&&A.current?.setPitch(l*_r.RADIANS)},[l]),M.useEffect(()=>{typeof g=="boolean"&&A.current&&(A.current.relativePosition=g)},[g]),M.useLayoutEffect(()=>{if(!p||d)return;const Z=new V({lonlat:r||new P(e,t,i),name:s,...f});return A.current=Z,_(Z),sr(!0),xe&&A.current&&B(A.current,xe),ft.current.length&&A.current&&(ft.current.forEach(lt=>A.current.appendChild(lt)),ft.current=[]),()=>{A.current&&v(A.current),sr(!1)}},[p,_,v,d]),M.useEffect(()=>{if(!d)return;const Z=new V({visibility:o,name:s,yaw:a,pitch:l,roll:h,lonlat:r||new P(e,t,i),cartesian:c,relativePosition:g,...f});return A.current=Z,d(Z),xe&&A.current&&B(A.current,xe),sr(!0),ft.current.length&&A.current&&(ft.current.forEach(lt=>A.current.appendChild(lt)),ft.current=[]),()=>{u?.(Z),sr(!1)}},[d,u]),M.useEffect(()=>{xe&&A.current&&Fo&&B(A.current,xe)},[xe,Fo]),M.useEffect(()=>{I&&!A.current?.billboard&&A.current?.setBillboard(I)},[I]),M.useEffect(()=>{U&&!A.current?.geoObject&&A.current?.setGeoObject(U)},[U]),M.useEffect(()=>{ge&&!A.current?.label&&A.current?.setLabel(ge)},[ge]),M.useEffect(()=>{Ee&&!A.current?.geometry&&A.current?.setGeometry(Ee)},[Ee]),M.useEffect(()=>{Bt&&!A.current?.polyline&&A.current?.setPolyline(Bt)},[Bt]),M.useEffect(()=>{kt&&!A.current?.strip&&A.current?.setStrip(kt)},[kt]);const Oo=M.useCallback(Z=>{k(Z),A.current&&x(A.current,Z)},[x]),No=M.useCallback(()=>{A.current&&y(A.current),k(null)},[y]),Ho=M.useCallback(Z=>{Fe(Z),A.current&&w(A.current,Z)},[w]),Vo=M.useCallback(()=>{A.current&&b(A.current),Fe(null)},[b]),Uo=M.useCallback(Z=>{ke(Z),A.current&&C(A.current,Z)},[C]),Go=M.useCallback(()=>{A.current&&E(A.current),ke(null)},[E]),jo=M.useCallback(Z=>{ie(Z),A.current&&T(A.current,Z)},[T]),qo=M.useCallback(()=>{A.current&&L(A.current),ie(null)},[L]),Yo=M.useCallback(Z=>{Qt(Z),A.current&&S(A.current,Z)},[S]),Wo=M.useCallback(()=>{A.current&&R(A.current),Qt(null)},[R]),$o=M.useCallback(Z=>{Do(Z),A.current&&z(A.current,Z)},[z]),Xo=M.useCallback(()=>{A.current&&F(A.current),Do(null)},[F]),Zo=M.useCallback(Z=>{Ie(Z)},[]),Qo=M.useCallback(()=>{Ie(null)},[]),Ko=M.useCallback(Z=>{A.current?A.current.appendChild(Z):ft.current.push(Z)},[]),Jo=M.useCallback(Z=>{if(A.current){const lt=A.current.childEntities||[],el=lt.indexOf(Z);el!==-1&&lt.splice(el,1)}else ft.current=ft.current.filter(lt=>lt!==Z)},[]),eu=M.useMemo(()=>({_addEntity:Ko,_removeEntity:Jo,_addGeometry:jo,_removeGeometry:qo,_addLabel:Uo,_removeLabel:Go,_addBillboard:Oo,_removeBillboard:No,_addGeoObject:Ho,_removeGeoObject:Vo,_addPolyline:Yo,_removePolyline:Wo,_addStrip:$o,_removeStrip:Xo,_addGltf:Zo,_removeGltf:Qo}),[Ko,Jo,jo,qo,Uo,Go,Oo,No,Ho,Vo,Yo,Wo,$o,Xo,Zo,Qo]);return n?Ve.createElement(Ve.Fragment,null,Ve.Children.map(n,(Z,lt)=>Ve.isValidElement(Z)?Ve.cloneElement(Z,{...eu,key:Z.key??lt}):Z)):null},Kd=({src:o,_addGltf:e,_removeGltf:t})=>{const i=M.useRef(null);return M.useEffect(()=>{let r=!0;return(async()=>{const n=(await kd.loadGlb(o)).toEntities();i.current=n,r&&e&&e(n)})(),()=>{r=!1,t&&i.current&&t(i.current)}},[o]),null},Jd=({lon:o,lat:e,alt:t,lookLon:i,lookLat:r,lookAlt:s,viewAngle:n,...a})=>{const{globe:l}=ut();return M.useEffect(()=>{l&&typeof o=="number"&&typeof e=="number"&&typeof t=="number"&&l.planet.flyLonLat(new P(o,e,t),new P(i,r,s))},[o,e,t,i,r,s,l]),M.useEffect(()=>{l&&typeof n=="number"&&l.planet.camera.setViewAngle(n)},[n,l]),null};he.Billboard=Nd,he.Entity=Qd,he.GeoImage=zd,he.GeoObject=Hd,he.GeoVideo=Dd,he.Geometry=Gd,he.Globe=Id,he.GlobeContextProvider=El,he.Gltf=Kd,he.Label=Vd,he.Layer=Cs,he.PlanetCamera=Jd,he.Polyline=Wd,he.Strip=Zd,he.Vector=Od,he.VectorContext=Ts,he.XYZ=Fd,he.useGlobeContext=ut,Object.defineProperty(he,Symbol.toStringTag,{value:"Module"})}));
940
+ }`})]),this.sceneFramebuffer=new so(this.handler,{size:1,msaa:this._msaa,internalFormat:this._internalFormat,filter:"LINEAR"}),this.sceneFramebuffer.init(),this.blitFramebuffer=new Re(this.handler,{size:1,useDepth:!1,targets:[{internalFormat:this._internalFormat,format:this._format,type:this._type,filter:"NEAREST"}]}),this.blitFramebuffer.init(),this.toneMappingFramebuffer=new Re(this.handler,{useDepth:!1}),this.toneMappingFramebuffer.init(),this._fnScreenFrame=this._screenFrameMSAA,this.screenTexture={screen:this.toneMappingFramebuffer.textures[0],picking:this.pickingFramebuffer.textures[0],depth:this.screenDepthFramebuffer.textures[0],frustum:this.depthFramebuffer.textures[0]}}this.handler.ONCANVASRESIZE=()=>{this._resizeStart(),this.events.dispatch(this.events.resize,this.handler.canvas),this._resizeEnd(),this.events.dispatch(this.events.resizeend,this.handler.canvas)},this.screenFramePositionBuffer=this.handler.createArrayBuffer(new Float32Array([1,1,-1,1,1,-1,-1,-1]),2,4),this.outputTexture=this.screenTexture.screen,this._initializeRenderNodes(),this._initializeControls()}}_initializeControls(){let e=this.controls;this.controls={};for(let t in e)this.addControl(e[t])}resize(){this._resizeEnd()}setCurrentScreen(e){this._currentOutput=e,this.screenTexture[e]&&(this.outputTexture=this.screenTexture[e])}_resizeStart(){let e=this.handler.canvas;this.activeCamera.setViewportSize(e.width,e.height),this.sceneFramebuffer.setSize(.5*e.width,.5*e.height),this.blitFramebuffer&&this.blitFramebuffer.setSize(.5*e.width,.5*e.height,!0)}_resizeEnd(){let e=this.handler.canvas;this.activeCamera.setViewportSize(e.width,e.height),this.sceneFramebuffer.setSize(e.width,e.height),this.blitFramebuffer&&this.blitFramebuffer.setSize(e.width,e.height,!0),this.toneMappingFramebuffer&&this.toneMappingFramebuffer.setSize(e.width,e.height,!0),this.screenDepthFramebuffer&&this.screenDepthFramebuffer.setSize(e.clientWidth,e.clientHeight,!0),this.handler.gl.type==="webgl"?(this.screenTexture.screen=this.sceneFramebuffer.textures[0],this.screenTexture.picking=this.pickingFramebuffer.textures[0],this.screenTexture.depth=this.screenDepthFramebuffer.textures[0],this.screenTexture.frustum=this.depthFramebuffer.textures[0]):(this.screenTexture.screen=this.toneMappingFramebuffer.textures[0],this.screenTexture.picking=this.pickingFramebuffer.textures[0],this.screenTexture.depth=this.screenDepthFramebuffer.textures[0],this.screenTexture.frustum=this.depthFramebuffer.textures[0]),this.setCurrentScreen(this._currentOutput)}removeNode(e){e.remove()}addNode(e){this.renderNodes[e.name]?Qe.logWrn(`Node name ${e.name} already exists.`):(e.assign(this),this._renderNodesArr.unshift(e),this.renderNodes[e.name]=e)}_initializeRenderNodes(){for(let e=0;e<this._renderNodesArr.length;e++)this._renderNodesArr[e].initialize()}addNodeBefore(e,t){if(this.renderNodes[e.name])Qe.logWrn(`Node name ${e.name} already exists.`);else{e.assign(this),this.renderNodes[e.name]=e;for(let i=0;i<this._renderNodesArr.length;i++)if(this._renderNodesArr[i].isEqual(t)){this._renderNodesArr.splice(i,0,e);break}this._renderNodesArr.unshift(e)}}addNodes(e){for(let t=0;t<e.length;t++)this.addNode(e[t])}getMaxMSAA(e){let t=this.handler.gl;return t.getInternalformatParameter(t.RENDERBUFFER,t[e],t.SAMPLES)[0]}getMSAA(){return this._msaa}enqueueEntityCollectionsToDraw(e,t=0){this._entityCollections[t]||(this._entityCollections[t]=[]),this._entityCollections[t].push(...e)}markForDepthRefresh(){this._depthRefreshRequired=!0}_drawEntityCollections(e){let t=this._entityCollections[e];if(t.length){let i=this.handler.gl;this.enableBlendDefault();let r=t.length;for(;r--;)t[r]._fadingOpacity&&t[r].pointCloudHandler.draw();for(r=t.length;r--;){let n=t[r];t[r]._fadingOpacity&&(n.events.dispatch(n.events.draw,n),t[r].geoObjectHandler.draw())}for(i.activeTexture(i.TEXTURE0),i.bindTexture(i.TEXTURE_2D,this.billboardsTextureAtlas.texture),r=t.length;r--;){let n=t[r];n._fadingOpacity&&n.billboardHandler.draw()}let s=this.fontAtlas.atlasesArr;for(r=0;r<s.length;r++)i.activeTexture(i.TEXTURE0+r),i.bindTexture(i.TEXTURE_2D,s[r].texture);for(r=t.length;r--;)t[r]._fadingOpacity&&t[r].labelHandler.draw();for(r=t.length;r--;)t[r]._fadingOpacity&&t[r].rayHandler.draw();for(r=t.length;r--;)t[r]._fadingOpacity&&t[r].polylineHandler.draw();for(r=t.length;r--;)t[r]._fadingOpacity&&t[r].stripHandler.draw()}}_drawPickingEntityCollections(e){let t=this._entityCollections[e];if(t.length){let i=t.length;for(;i--;)t[i]._fadingOpacity&&t[i].billboardHandler.drawPicking();for(i=t.length;i--;)t[i]._fadingOpacity&&t[i].geoObjectHandler.drawPicking();for(i=t.length;i--;)t[i]._fadingOpacity&&t[i].labelHandler.drawPicking();for(i=t.length;i--;)t[i]._fadingOpacity&&t[i].rayHandler.drawPicking();for(i=t.length;i--;)t[i]._visibility&&t[i].polylineHandler.drawPicking();for(i=t.length;i--;)t[i]._visibility&&t[i].stripHandler.drawPicking()}}_drawDepthEntityCollections(e){let t=this._entityCollections[e];if(t.length){let i=t.length;for(;i--;)t[i]._fadingOpacity&&t[i].geoObjectHandler.drawDepth()}}_clearEntityCollectionQueue(e){this._entityCollections[e].length=0,this._entityCollections[e]=[]}draw(){this.activeCamera.checkMoveEnd();let e=this.events,t=e.pointerEvent(),i=!e.mouseState.leftButtonDown&&!e.mouseState.rightButtonDown,r=e.touchState.touchStart||e.touchState.touchEnd;const s=t&&i||r||this._depthRefreshRequired;this._depthRefreshRequired=!1,e.handleEvents();let n=this.sceneFramebuffer;n.activate();let a=this.handler.gl;a.clearColor(this.clearColor[0],this.clearColor[1],this.clearColor[2],this.clearColor[3]),a.clear(a.COLOR_BUFFER_BIT|a.DEPTH_BUFFER_BIT),this.enableBlendDefault(),e.dispatch(e.draw,this),this.activeCamera.checkFly();let l=this.activeCamera.frustums,h=this._renderNodesArr,c=l.length;for(;c--;){this.activeCamera.setCurrentFrustum(c),a.clear(a.DEPTH_BUFFER_BIT);let d=h.length;for(;d--;)h[d].preDrawNode();for(d=h.length;d--;)this.enableBlendDefault(),h[d].drawNode();this._drawEntityCollections(0),e.dispatch(e.drawtransparent,this),s&&this._drawPickingBuffer(0),this._drawDepthBuffer(0),this._clearEntityCollectionQueue(0)}for(let d=1;d<this._entityCollections.length;d++){a.clear(a.DEPTH_BUFFER_BIT);let u=l.length;for(;u--;)this.activeCamera.setCurrentFrustum(u),this._drawEntityCollections(d),s&&this._drawPickingBuffer(d),this._drawDepthBuffer(d);this._clearEntityCollectionQueue(d)}n.deactivate(),this.blitFramebuffer&&n.blitTo(this.blitFramebuffer,0),s&&(this._readPickingBuffer(),this._readDepthBuffer()),this._fnScreenFrame(),e.dispatch(e.postdraw,this),e.mouseState.wheelDelta=0,e.mouseState.justStopped=!1,e.mouseState.moving=!1,e.touchState.moving=!1}getImageDataURL(e="image/png",t=1){return this.draw(),this.handler.canvas?this.handler.canvas.toDataURL(e,t):""}_screenFrameMSAA(){let e=this.handler,t=e.programs.toneMapping,i=t._program,r=e.gl;r.disable(r.DEPTH_TEST),r.bindBuffer(r.ARRAY_BUFFER,this.screenFramePositionBuffer),r.vertexAttribPointer(i.attributes.corners,2,r.FLOAT,!1,0,0),this.toneMappingFramebuffer.activate(),r.clearColor(0,0,0,0),r.clear(r.COLOR_BUFFER_BIT),t.activate(),r.activeTexture(r.TEXTURE0),r.bindTexture(r.TEXTURE_2D,this.blitFramebuffer.textures[0]),r.uniform1i(i.uniforms.hdrBuffer,0),r.uniform1f(i.uniforms.gamma,this.gamma),r.uniform1f(i.uniforms.exposure,this.exposure),r.uniform1f(i.uniforms.whitepoint,this.whitepoint),r.drawArrays(r.TRIANGLE_STRIP,0,4),this.toneMappingFramebuffer.deactivate(),t=e.programs.screenFrame,i=t._program,t.activate(),r.activeTexture(r.TEXTURE0),r.bindTexture(r.TEXTURE_2D,this.outputTexture),r.uniform1i(i.uniforms.texture,0),r.drawArrays(r.TRIANGLE_STRIP,0,4),r.enable(r.DEPTH_TEST)}_screenFrameNoMSAA(){let e=this.handler,t=e.programs.screenFrame,i=t._program,r=e.gl;r.disable(r.DEPTH_TEST),t.activate(),r.activeTexture(r.TEXTURE0),r.bindTexture(r.TEXTURE_2D,this.outputTexture),r.uniform1i(i.uniforms.texture,0),r.bindBuffer(r.ARRAY_BUFFER,this.screenFramePositionBuffer),r.vertexAttribPointer(i.attributes.corners,2,r.FLOAT,!1,0,0),r.drawArrays(r.TRIANGLE_STRIP,0,4),r.enable(r.DEPTH_TEST)}_drawPickingBuffer(e){this.pickingFramebuffer.activate();let t=this.handler.gl;if(this.activeCamera.isFirstPass&&e===0?(t.clearColor(0,0,0,1),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT)):t.clear(t.DEPTH_BUFFER_BIT),t.disable(t.BLEND),e===0){let i=this._pickingCallbacks;for(let r=0,s=i.length;r<s;r++)i[r].callback.call(i[r].sender)}this._drawPickingEntityCollections(e),t.enable(t.BLEND),this.pickingFramebuffer.deactivate()}_drawDepthBuffer(e){this.depthFramebuffer.activate();let t=this.handler,i=t.gl;if(i.disable(i.BLEND),this.activeCamera.isFirstPass&&e===0?(i.clearColor(0,0,0,1),i.clear(i.COLOR_BUFFER_BIT|i.DEPTH_BUFFER_BIT)):i.clear(i.DEPTH_BUFFER_BIT),e===0){let r=this._depthCallbacks,s=r.length;for(;s--;)r[s].callback.call(r[s].sender)}if(this._drawDepthEntityCollections(e),this.depthFramebuffer.deactivate(),this._currentOutput==="depth"||this._currentOutput==="frustum"){this.screenDepthFramebuffer.activate();let r=t.programs.depth,s=r._program;i.bindBuffer(i.ARRAY_BUFFER,this.screenFramePositionBuffer),i.vertexAttribPointer(s.attributes.corners,2,i.FLOAT,!1,0,0),r.activate(),i.activeTexture(i.TEXTURE0),i.bindTexture(i.TEXTURE_2D,this.depthFramebuffer.textures[1]),i.uniform1i(s.uniforms.depthTexture,0),i.drawArrays(i.TRIANGLE_STRIP,0,4),this.screenDepthFramebuffer.deactivate()}i.enable(i.BLEND)}_readDepthBuffer(e){this.depthFramebuffer.readPixelBuffersAsync(e)}_readPickingBuffer_webgl1(){this.pickingFramebuffer.readPixelBuffersAsync()}_readPickingBuffer_webgl2(){this.pickingFramebuffer.readPixelBuffersAsync()}readPickingColor(e,t,i){var r;let s=this.pickingFramebuffer.width,n=this.pickingFramebuffer.height;e=Math.round(e*s);let a=4*((t=Math.round(t*n))*s+e),l=(r=this.pickingFramebuffer)==null?void 0:r.pixelBuffers[0].data;l&&(i[0]=l[a],i[1]=l[a+1],i[2]=l[a+2])}readDepth(e,t,i){let r=new Float32Array(4),s=new Uint8Array(4);this.depthFramebuffer.readData(e,t,s,0),this.depthFramebuffer.readData(e,t,r,1),i[0]=r[0],i[1]=Math.round(s[0]/10)-1}getDistanceFromPixel(e){let t=this.activeCamera,i=this.handler.canvas,r=e.x/i.width,s=(i.height-e.y)/i.height;if(Zt[0]=Zt[1]=0,this.readDepth(r,s,Zt),Zt[1]===-1)return;let n=Zt[0],a=t.frustums[Zt[1]];if(!a)return;let l=new te(2*r-1,2*s-1,2*n-1,1),h=a.inverseProjectionMatrix.mulVec4(l),c=-h.z/h.w;if(t.isOrthographic)return c;let d=e.direction||t.unproject(e.x,e.y);return c/Math.max(1e-6,d.dot(t.getForward()))}getCartesianFromPixel(e){let t=this.getDistanceFromPixel(e);if(t){if(this.activeCamera.isOrthographic){let i=new m;return this.activeCamera.unproject(e.x,e.y,t,i),i}return(e.direction||this.activeCamera.unproject(e.x,e.y)).scaleTo(t).addA(this.activeCamera.eye)}}getCartesianFromPixelAsync(e){return new Promise(((t,i)=>{this._readDepthBuffer((()=>{t(this.getCartesianFromPixel(e))}))}))}getDepthMinDistance(){let e=this.handler.canvas,t=e.width,i=e.height,r=ar,s=i*t,n=new N;for(let a=0;a<s;a++){n.x=a%t,n.y=Math.floor(a/t);let l=this.getDistanceFromPixel(n);l&&l<r&&(r=l)}return r<ar?r:0}getDepthMinDistanceAsync(){return new Promise(((e,t)=>{this._readDepthBuffer((()=>{e(this.getDepthMinDistance())}))}))}async setOrthographicProjection(e){if(e!==this.activeCamera.isOrthographic){let t=await this.getDepthMinDistanceAsync();t&&e&&(this.activeCamera.focusDistance=t),this.activeCamera.isOrthographic=e,this.events.dispatch(this.events.projchanged,this.activeCamera)}}start(){this._initialized||this.initialize(),this.handler.start()}destroy(){for(let e in this.controls)this.controls[e].remove();for(let e=0;e<this._renderNodesArr.length;e++)this._renderNodesArr[e].remove();this.div=null,this._renderNodesArr=[],this.renderNodes={},this.activeCamera=null,this.controls={},this.controlsBag={},this.colorObjects.clear(),this._pickingCallbacks=[],this.pickingFramebuffer=null,this._tempPickingPix_=null,this._depthCallbacks=[],this.depthFramebuffer=null,this.sceneFramebuffer=null,this.blitFramebuffer=null,this.toneMappingFramebuffer=null,this._entityCollections=[[]],this.handler.ONCANVASRESIZE=null,this.handler.destroy(),this.handler=null,this._initialized=!1}}const Po="/res",So=class nr{constructor(e){this.$target=null,this._instanceID=`__globus${nr.__counter__++?nr.__counter__:""}__`,window[this._instanceID]=this,this._canvas=document.createElement("canvas"),this._canvas.id=`canvas${this._instanceID}`,this._canvas.style.width="100%",this._canvas.style.height="100%",this._canvas.style.display="block",this._canvas.style.opacity="0.0",this._canvas.style.transition="opacity 150ms",this.$inner=document.createElement("div"),this.$inner.classList.add("og-inner"),this.$inner.appendChild(this._canvas),this.$inner.attributions=document.createElement("div"),e.attributionContainer?e.attributionContainer.appendChild(this.$inner.attributions):(this.$inner.attributions.classList.add("og-attribution"),this.$inner.appendChild(this.$inner.attributions)),e.target&&this.attachTo(e.target);const t=n=>{n.preventDefault()};this._canvas.onmouseenter=function(){document.addEventListener("mousewheel",t,{capture:!1,passive:!1})},this._canvas.onmouseleave=function(){document.removeEventListener("mousewheel",t)},this.renderer=new Md(new Tt(this._canvas,{autoActivate:!1,pixelRatio:e.dpi||window.devicePixelRatio+.15,context:{alpha:e.transparentBackground,antialias:!1,premultipliedAlpha:!0,preserveDrawingBuffer:!1}}),{autoActivate:!1,msaa:e.msaa,fontsSrc:e.fontsSrc,gamma:e.gamma,exposure:e.exposure,...e.transparentBackground&&{clearColor:[0,0,0,0]}}),this.renderer.div=this.$inner,e.skybox&&this.renderer.addNode(e.skybox),this._planetName=e.name?e.name:"globus_planet_"+nr.__counter__,this.planet=new Ai({name:this._planetName,frustums:e.frustums,ellipsoid:e.ellipsoid,maxGridSize:e.maxGridSize,nightTextureSrc:e.nightTextureSrc===null?null:e.nightTextureSrc||`${e.resourcesSrc||Po}/night.png`,specularTextureSrc:e.specularTextureSrc===null?null:e.specularTextureSrc||`${e.resourcesSrc||Po}/spec.png`,minAltitude:e.minAltitude,maxAltitude:e.maxAltitude||15e6,maxEqualZoomAltitude:e.maxEqualZoomAltitude,minEqualZoomAltitude:e.minEqualZoomAltitude,minEqualZoomCameraSlope:e.minEqualZoomCameraSlope,quadTreeStrategyPrototype:e.quadTreeStrategyPrototype,maxLoadingRequests:e.maxLoadingRequests,atmosphereEnabled:e.atmosphereEnabled,transitionOpacityEnabled:e.transitionOpacityEnabled,atmosphereParameters:e.atmosphereParameters,minDistanceBeforeMemClear:e.minDistanceBeforeMemClear,vectorTileSize:e.vectorTileSize,maxNodesCount:e.maxNodesCount,transparentBackground:e.transparentBackground}),e.terrain?Array.isArray(e.terrain)?this.planet.setTerrain(e.terrain[0]):this.planet.setTerrain(e.terrain):this.planet.setTerrain(new ms),this.renderer.addNode(this.planet),e.controls?this.planet.addControls(e.controls):this.planet.addControls([new Ra,new ya,new Ma,new pa,new La,new nn,new ns]);const i=this.renderer.controls;let r;for(let n in i)if(i[n]instanceof Qr){r=i[n];break}r?this.sun=r:(this.sun=new Qr,this.planet.addControl(this.sun)),e.sun&&(e.sun.active===void 0||e.sun.active||this.sun.deactivate(),e.sun.stopped===!0&&this.sun.stop()),e.layers&&this.planet.addLayers(e.layers);let s=e.viewExtent;s&&(s instanceof Array?this.planet.viewExtentArr(s):this.planet.viewExtent(s)),(e.autoActivate||Ue(e.autoActivate))&&this.start()}start(){this.renderer.start(),this.fadeIn()}fadeIn(){this._canvas.style.opacity="1.0"}fadeOut(){this._canvas.style.opacity="0"}attachTo(e,t){let i;this.detach(),i=e instanceof HTMLElement?e:document.getElementById(e)||document.querySelector(e),i?(this.$target=i,t&&this.$target.firstChild?this.$target.insertBefore(this.$inner,this.$target.firstChild):i.appendChild(this.$inner)):console.warn(`Target container not found. Provided target: ${e}`)}detach(){this.$target&&(this.$target.removeChild(this.$inner),this.$target=null)}destroy(){this.detach(),this.planet.layers.forEach((e=>e.remove())),this.planet.destroy(),this.renderer.destroy(),window[this._instanceID]=null}};So.__counter__=0;let Rd=So;new pr(3396200,3389508),new pr(1737400,1737400);class Bd{static async load(e){const t=await fetch(e);if(!t.ok)throw new Error(`Unable to load '${e}'`);const i=await t.arrayBuffer(),r=new DataView(i);if(r.getUint32(0,!0)!==1179937895)throw new Error("Not a valid GLB");r.getUint32(4,!0);const s=this.getChunks(r);return this.parseChunks(s)}static getChunks(e){const t=[];let i=12;do{const r=this.getChunk(e,i);i+=8+r.length,t.push(r)}while(i<e.byteLength);return t}static getChunk(e,t){const i=e.getUint32(t,!0);return{length:i,type:this.getChunkType(e.getUint32(t+4,!0)),chunkData:e.buffer.slice(t+8,t+8+i)}}static getChunkType(e){switch(e){case 1313821514:return 0;case 5130562:return 1;default:return 2}}static parseChunks(e){let t,i=[];for(const r of e)switch(r.type){case 0:t=this.parseJsonChunk(r);break;case 1:i.push(r.chunkData)}if(t===void 0)throw new Error("GLB json data extraction failed");return{gltf:t,bin:i}}static parseJsonChunk(e){return JSON.parse(new TextDecoder().decode(e.chunkData))}}var Rt=(o=>(o[o.byte=5120]="byte",o[o.ubyte=5121]="ubyte",o[o.short=5122]="short",o[o.ushort=5123]="ushort",o[o.uint=5125]="uint",o[o.float=5126]="float",o))(Rt||{}),yt=(o=>(o.scalar="SCALAR",o.vec2="VEC2",o.vec3="VEC3",o.vec4="VEC4",o.mat2="MAT2",o.mat3="MAT3",o.mat4="MAT4",o))(yt||{}),ws=(o=>(o[o.points=0]="points",o[o.lines=1]="lines",o[o.lineLoop=2]="lineLoop",o[o.lineStrip=3]="lineStrip",o[o.triangles=4]="triangles",o[o.triangleStrip=5]="triangleStrip",o[o.triangleFan=6]="triangleFan",o))(ws||{});const Mo=class dt{constructor(e){var t;if(this.gltf=e,this._materials=[],this._images=[],this.meshes=[],((t=e.gltf.extensionsRequired)==null?void 0:t.includes("KHR_draco_mesh_compression"))&&dt._dracoDecoderModule===null)throw new Error("Unable to import GLTF. Draco decoder module is not connected");this._initImages(),this._initMaterials(),this._initMeshes()}static connectDracoDecoderModule(e){dt._dracoDecoderModule=e}static async loadGlb(e){const t=await Bd.load(e);return new dt(t)}getObjects3d(){const e=[];for(let t=0;t<this.meshes.length;t++)for(let i=0;i<this.meshes[t].primitives.length;i++)this.meshes[t].primitives[i].object3d!==void 0&&e.push(this.meshes[t].primitives[i].object3d);return e}toEntities(){const e=[];for(const t of this.gltf.gltf.scenes){if(t===void 0||t.nodes===void 0)return[];for(const i of t.nodes){const r=this.gltf.gltf.nodes[i];r.mesh===void 0&&r.children===void 0||e.push(this._nodeToEntity(r))}}return e}_nodeToEntity(e,t){const i=new V({name:e.name,cartesian:new m(0,0,0),relativePosition:t!==void 0});let r=null;if(e.mesh!==void 0&&(r=this.meshToEntity(this.meshes[e.mesh],t),i.appendChild(r)),e.matrix!==void 0){const s=new re;s.set(e.matrix),i.setCartesian3v(s.getPosition()),i.setDirectQuaternionRotation(s.getQuat()),i.setScale3v(s.getScaling())}if(e.translation!==void 0&&e.matrix===void 0&&(i.relativePosition=!0,i.setCartesian(e.translation[0],e.translation[1],e.translation[2])),e.rotation!==void 0&&e.matrix===void 0&&i.setDirectQuaternionRotation(new O(e.rotation[0],e.rotation[1],e.rotation[2],e.rotation[3])),e.scale!==void 0&&e.matrix===void 0&&i.setScale3v(new m(e.scale[0],e.scale[1],e.scale[2])),e.children!==void 0)for(const s of e.children){const n=this._nodeToEntity(this.gltf.gltf.nodes[s],i);r?r.appendChild(n):i.appendChild(n)}return i}meshToEntity(e,t){const i=new V({name:e.name,cartesian:new m(0,0,0),relativePosition:!0,independentPicking:!0});return e.primitives.map((r=>{i.appendChild(new V({name:r.name,relativePosition:!0,geoObject:{object3d:r.object3d,tag:r.name}}))})),i}_initImages(){if(this.gltf.gltf.images)for(const e of this.gltf.gltf.images)this._images.push({src:e.uri,element:this._getImage(e.mimeType,e.bufferView),mimeType:e.mimeType,name:e.name})}_getImage(e,t){if(t&&e){const i=this.gltf.gltf.bufferViews[t],r=URL.createObjectURL(new Blob([this.gltf.bin[i.buffer].slice(i.byteOffset,i.byteOffset+i.byteLength)],{type:e})),s=new Image;return s.src=r,s}}_initMaterials(){if(this.gltf.gltf.materials)for(const e of this.gltf.gltf.materials){const t={name:e.name,emissiveFactor:e.emissiveFactor,alphaMode:e.alphaMode,alphaCutoff:e.alphaCutoff,doubleSided:e.doubleSided};if(e.pbrMetallicRoughness){if(e.pbrMetallicRoughness.baseColorFactor&&(t.baseColorFactor=e.pbrMetallicRoughness.baseColorFactor),e.pbrMetallicRoughness.baseColorTexture){const i=this.gltf.gltf.textures[e.pbrMetallicRoughness.baseColorTexture.index].source;i!==void 0&&(t.baseColorTexture={image:this._images[i],texCoord:e.pbrMetallicRoughness.baseColorTexture.texCoord})}if(e.pbrMetallicRoughness.metallicRoughnessTexture){const i=this.gltf.gltf.textures[e.pbrMetallicRoughness.metallicRoughnessTexture.index].source;i!==void 0&&(t.metallicRoughnessTexture={image:this._images[i],texCoord:e.pbrMetallicRoughness.metallicRoughnessTexture.texCoord})}}if(e.normalTexture){const i=this.gltf.gltf.textures[e.normalTexture.index].source;i!==void 0&&(t.normalTexture={image:this._images[i],texCoord:e.normalTexture.texCoord,scale:e.normalTexture.scale})}if(e.occlusionTexture){const i=this.gltf.gltf.textures[e.occlusionTexture.index].source;i!==void 0&&(t.occlusionTexture={image:this._images[i],texCoord:e.occlusionTexture.texCoord,strength:e.occlusionTexture.strength})}if(e.emissiveTexture){const i=this.gltf.gltf.textures[e.emissiveTexture.index].source;i!==void 0&&(t.emissiveTexture={image:this._images[i],texCoord:e.emissiveTexture.texCoord})}this._materials.push(t)}}_initMeshes(){this.meshes=[];for(let e=0;e<this.gltf.gltf.meshes.length;e++){const t=this.gltf.gltf.meshes[e],i={name:t.name,primitives:[]};for(let r=0;r<t.primitives.length;r++)i.primitives.push(this._buildPrimitive(t,t.primitives[r],`${e}-${r}`));this.meshes.push(i)}}_buildPrimitive(e,t,i){var r,s;let n=null;const a=this._materials[t.material||0],l=(r=a.baseColorTexture)!=null&&r.texCoord?`TEXCOORD_${a.baseColorTexture.texCoord}`:"TEXCOORD_0";if((s=t.extensions)!=null&&s.KHR_draco_mesh_compression){const h=t.extensions.KHR_draco_mesh_compression,c=this.gltf.gltf.bufferViews[h.bufferView],d=c.byteOffset||0,u=dt._dracoDecoderModule,g=new u.Decoder,f=new u.DecoderBuffer;if(f.Init(new Int8Array(this.gltf.bin[c.buffer].slice(d,d+c.byteLength)),c.byteLength),g.GetEncodedGeometryType(f)!==u.TRIANGULAR_MESH)throw new Error("Draco compressed data is not a mesh");const p=new u.Mesh;if(!g.DecodeBufferToMesh(f,p).ok()||p.ptr===0)throw new Error("Failed to decode Draco mesh");const _=p.num_faces(),v=new Uint32Array(3*_),x=new u.DracoInt32Array;for(let w=0;w<_;w++)g.GetFaceFromMesh(p,w,x),v[3*w]=x.GetValue(0),v[3*w+1]=x.GetValue(1),v[3*w+2]=x.GetValue(2);u.destroy(x);const y={};for(const w in h.attributes){const b=h.attributes[w],C=g.GetAttributeByUniqueId(p,b),E=p.num_points(),T=C.num_components(),L=new u.DracoFloat32Array;g.GetAttributeFloatForAllPoints(p,C,L);const S=new Float32Array(E*T);for(let R=0;R<S.length;R++)S[R]=L.GetValue(R);u.destroy(L),y[w]=S}u.destroy(p),u.destroy(f),u.destroy(g),n={name:`${e.name}/${a.name}/${i}`,vertices:y.POSITION,indices:v,mode:t.mode?t.mode:ws.triangles,material:this._materials[t.material||0]||void 0,normals:y.NORMAL,texCoords:void 0}}else{const h=l?t.attributes[l]:void 0,c=h?this.gltf.gltf.accessors[h]:void 0;n={name:`${e.name}/${a.name}/${i}`,indices:t.indices?dt._access(this.gltf.gltf.accessors[t.indices],this.gltf):void 0,mode:t.mode?t.mode:ws.triangles,material:this._materials[t.material||0]||void 0,vertices:dt._access(this.gltf.gltf.accessors[t.attributes.POSITION],this.gltf),normals:dt._access(this.gltf.gltf.accessors[t.attributes.NORMAL],this.gltf),texCoords:c?dt._access(c,this.gltf):void 0}}if(n===null)throw new Error("Unable to build primitive");return n.object3d=dt._toObject3d(n),n}static _toObject3d(e){var t,i,r,s,n,a,l,h,c,d,u,g,f;return new $({name:e.name,vertices:Array.from(e.vertices),normals:Array.from(e.normals),texCoords:e.texCoords?Array.from(e.texCoords):void 0,indices:Array.from(e.indices),normalTextureImage:(i=(t=e.material)==null?void 0:t.normalTexture)==null?void 0:i.image.element,normalTextureSrc:(s=(r=e.material)==null?void 0:r.normalTexture)==null?void 0:s.image.src,colorTextureImage:(a=(n=e.material)==null?void 0:n.baseColorTexture)==null?void 0:a.image.element,colorTextureSrc:(h=(l=e.material)==null?void 0:l.baseColorTexture)==null?void 0:h.image.src,metallicRoughnessTextureImage:(d=(c=e.material)==null?void 0:c.occlusionTexture)==null?void 0:d.image.element,metallicRoughnessTextureSrc:(g=(u=e.material)==null?void 0:u.occlusionTexture)==null?void 0:g.image.src,color:(f=e.material)==null?void 0:f.baseColorFactor})}static _access(e,t){const i=t.gltf.bufferViews[e.bufferView],r=t.bin[i.buffer];let s=i.byteOffset||0;e.byteOffset!==void 0&&(s+=e.byteOffset);const n=r.slice(s,s+i.byteLength);switch(e.type){case yt.scalar:return this._getTensor(n,e,1,i.byteStride);case yt.vec2:return this._getTensor(n,e,2,i.byteStride);case yt.vec3:return this._getTensor(n,e,3,i.byteStride);case yt.vec4:case yt.mat2:return this._getTensor(n,e,4,i.byteStride);case yt.mat3:return this._getTensor(n,e,9,i.byteStride);case yt.mat4:return this._getTensor(n,e,16,i.byteStride);default:throw new Error("Unknown accessor type")}}static _getTensor(e,t,i,r){if(t.componentType===Rt.ushort)return new Uint16Array(e,0,t.count*i);if(t.componentType===Rt.short)return new Int16Array(e,0,t.count*i);if(t.componentType===Rt.uint)return new Uint32Array(e,0,t.count*i);if(t.componentType===Rt.float)return new Float32Array(e,0,t.count*i);if(t.componentType===Rt.ubyte)return new Uint8Array(e,0,t.count*i);if(t.componentType===Rt.byte)return new Int8Array(e,0,t.count*i);throw new Error("Unknown component type")}};Mo._dracoDecoderModule=null;let kd=Mo;const Id=({children:o,onDraw:e,...t})=>{const i=M.useRef(null),{setGlobe:r}=ut(),[s,n]=M.useState(t),a=M.useRef(null);return M.useEffect(()=>{if(a&&a.current&&t.viewExtent!==void 0){const l=t.viewExtent instanceof j?t.viewExtent:new j(new P(t.viewExtent[0],t.viewExtent[1]),new P(t.viewExtent[2],t.viewExtent[3]));a.current.planet.viewExtent(l)}},[t.viewExtent]),M.useEffect(()=>{a&&a.current&&t.atmosphereEnabled!==void 0&&(a.current.planet.atmosphereEnabled=t.atmosphereEnabled)},[t.atmosphereEnabled]),M.useEffect(()=>{a&&a.current&&t.sunActive!==void 0&&(t.sunActive?a.current?.sun.activate():a.current?.sun.deactivate())},[t.sunActive]),M.useEffect(()=>{if(a.current)i.current=a.current.$target;else{const l=new Eo("OSM"),h=new Ao("Microsoft Bing");a.current=new Rd({target:i.current,name:"Earth",terrain:new Co,layers:[l,h],autoActivate:!0,atmosphereEnabled:!0,...s}),e&&a.current.planet.events.on("draw",e)}return r(a.current),()=>{a.current&&(e&&a.current.planet.events.off("draw",e),a.current.destroy(),a.current=null)}},[s]),Ve.createElement("div",{style:{width:"100%",height:"100%"},ref:i},o)},zd=({name:o,...e})=>{const{globe:t}=ut(),i=M.useRef(null);return M.useEffect(()=>{typeof e.src=="string"&&i.current&&i.current?.setSrc(e.src)},[e.src]),M.useEffect(()=>{if(t)return i.current=new hs(o,e),t.planet.addLayer(i.current),()=>{i.current&&t.planet.removeLayer(i.current)}},[t]),null},Dd=({name:o,...e})=>{const{globe:t}=ut(),i=M.useRef(null);return M.useEffect(()=>{typeof e.src=="string"&&i.current&&i.current?.setSrc(e.src)},[e.src]),M.useEffect(()=>{if(t)return i.current=new To(o,e),t.planet.addLayer(i.current),()=>{i.current&&t.planet.removeLayer(i.current)}},[t]),null},Fd=({name:o,...e})=>{const{globe:t}=ut(),i=M.useRef(null);return M.useEffect(()=>{typeof e.url=="string"&&i.current&&i.current?.setUrl(e.url)},[e.url]),M.useEffect(()=>{if(t)return i.current=new Li(o,{...e}),t.planet.addLayer(i.current),()=>{i.current&&t.planet.removeLayer(i.current)}},[t]),Ve.createElement(Cs,{layerRef:i,name:o,...e})},Cs=({opacity:o,children:e,name:t,layerRef:i,...r})=>{const[s,n]=Ve.useState(!1);return M.useEffect(()=>{i&&i.current&&typeof o=="number"&&s&&(i.current.opacity=o)},[o]),M.useEffect(()=>(s&&i&&i.current&&(r.onVisibilityChange&&i.current?.events.on("visibilitychange",r.onVisibilityChange),r.onAdd&&i.current?.events.on("add",r.onAdd),r.onRemove&&i.current?.events.on("remove",r.onRemove),r.onMouseMove&&i.current?.events.on("mousemove",r.onMouseMove),r.onMouseEnter&&i.current?.events.on("mouseenter",r.onMouseEnter),r.onMouseLeave&&i.current?.events.on("mouseleave",r.onMouseLeave),r.onLclick&&i.current?.events.on("lclick",r.onLclick),r.onRclick&&i.current?.events.on("rclick",r.onRclick),r.onMclick&&i.current?.events.on("mclick",r.onMclick),r.onLdblclick&&i.current?.events.on("ldblclick",r.onLdblclick),r.onRdblclick&&i.current?.events.on("rdblclick",r.onRdblclick),r.onMdblclick&&i.current?.events.on("mdblclick",r.onMdblclick),r.onLup&&i.current?.events.on("lup",r.onLup),r.onRup&&i.current?.events.on("rup",r.onRup),r.onMup&&i.current?.events.on("mup",r.onMup),r.onLdown&&i.current?.events.on("ldown",r.onLdown),r.onRdown&&i.current?.events.on("rdown",r.onRdown),r.onMdown&&i.current?.events.on("mdown",r.onMdown),r.onLhold&&i.current?.events.on("lhold",r.onLhold),r.onRhold&&i.current?.events.on("rhold",r.onRhold),r.onMhold&&i.current?.events.on("mhold",r.onMhold),r.onMouseWheel&&i.current?.events.on("mousewheel",r.onMouseWheel),r.onTouchMove&&i.current?.events.on("touchmove",r.onTouchMove),r.onTouchStart&&i.current?.events.on("touchstart",r.onTouchStart),r.onTouchEnd&&i.current?.events.on("touchend",r.onTouchEnd),r.onDoubleTouch&&i.current?.events.on("doubletouch",r.onDoubleTouch)),()=>{r.onLclick&&i?.current?.events.off("lclick",r.onLclick),n(!1)}),[s]),i?.current&&!s&&n(!0),Ve.createElement(Ve.Fragment,null,e)},Ts=M.createContext({addEntity:()=>{},removeEntity:()=>{},addLabel:()=>{},removeLabel:()=>{},addBillboard:()=>{},removeBillboard:()=>{},addGeoObject:()=>{},removeGeoObject:()=>{},addGeometry:()=>{},removeGeometry:()=>{},addPolyline:()=>{},removePolyline:()=>{},addStrip:()=>{},removeStrip:()=>{},addGltf:(o,e)=>{},removeGltf:(o,e)=>{}}),Od=({visibility:o,children:e,name:t,...i})=>{const{globe:r}=ut(),s=M.useRef(null),[n,a]=M.useState([]),l=M.useRef(new Set);M.useEffect(()=>{typeof o=="boolean"&&s.current&&s.current.setVisibility(o)},[o]),M.useEffect(()=>{if(r)return s.current=new fe(t,i),r.planet.addLayer(s.current),i.onDraw&&s.current?.events.on("draw",i.onDraw),i.onMouseEnter&&s.current?.events.on("mouseenter",i.onMouseEnter),()=>{s.current&&(r.planet.removeLayer(s.current),i.onDraw&&s.current?.events.off("draw",i.onDraw),i.onMouseEnter&&s.current?.events.off("mouseenter",i.onMouseEnter))}},[r]),M.useEffect(()=>{if(s.current&&n.length>0){const L=n.filter(S=>!l.current.has(S));s.current.addEntities(L),L.forEach(S=>l.current.add(S))}},[n]);const h=M.useCallback(L=>{a(S=>S.includes(L)?S:[...S,L])},[]),c=M.useCallback(L=>{a(S=>S.filter(R=>R!==L)),s.current&&(s.current.removeEntity(L),l.current.delete(L))},[]),d=M.useCallback((L,S)=>{L.setBillboard(S)},[]),u=M.useCallback(L=>{L.billboard?.remove()},[]),g=M.useCallback((L,S)=>{L.setGeoObject(S)},[]),f=M.useCallback(L=>{L.geoObject?.remove()},[]),p=M.useCallback((L,S)=>{L.setLabel(S)},[]),_=M.useCallback(L=>{L.label?.remove()},[]),v=M.useCallback((L,S)=>{L.setGeometry(S)},[]),x=M.useCallback(L=>{L.geometry?.remove()},[]),y=M.useCallback((L,S)=>{L.setPolyline(S)},[]),w=M.useCallback(L=>{L.polyline?.remove()},[]),b=M.useCallback((L,S)=>{L.setStrip(S)},[]),C=M.useCallback(L=>{L.strip?.remove()},[]),E=M.useCallback((L,S)=>{L.appendChildren(S,!0)},[]),T=M.useCallback((L,S)=>{S.forEach(R=>{R.parent===L&&R.remove()})},[]);return Ve.createElement(Ts.Provider,{value:{addEntity:h,removeEntity:c,addBillboard:d,removeBillboard:u,addGeoObject:g,removeGeoObject:f,addLabel:p,removeLabel:_,addGeometry:v,removeGeometry:x,addPolyline:y,removePolyline:w,addStrip:b,removeStrip:C,addGltf:E,removeGltf:T}},Ve.createElement(Cs,{layerRef:s,name:t,...i},e))},Nd=({visibility:o,src:e,size:t,color:i,rotation:r,offset:s,_addBillboard:n,_removeBillboard:a,...l})=>{const h=M.useRef(null);return M.useEffect(()=>{typeof o=="boolean"&&h.current&&h.current?.setVisibility(o)},[o]),M.useEffect(()=>{typeof e=="string"&&h.current&&h.current?.setSrc(e)},[e]),M.useEffect(()=>{typeof r=="number"&&h.current&&h.current?.setRotation(r*Math.PI/180)},[r]),M.useEffect(()=>{s&&h.current&&(s instanceof m?h.current?.setOffset(s.x,s.y,s.z):s instanceof N?h.current?.setOffset(s.x,s.y):h.current?.setOffset(s[0],s[1],s[2]))},[s]),M.useEffect(()=>{t&&h.current&&h.current?.setSize(t[0],t[1])},[t]),M.useEffect(()=>{typeof i=="string"&&h.current&&h.current?.setColorHTML(i)},[i]),M.useEffect(()=>(h.current=new mn({...l,color:i,size:t,src:e,offset:s,visibility:o,rotation:r?r*Math.PI/180:0}),h.current&&n&&n(h.current),()=>{h.current&&a&&a(h.current)}),[n,a]),null},Hd=({color:o,objSrc:e,scale:t,visibility:i,_addGeoObject:r,_removeGeoObject:s,...n})=>{const a=M.useRef(null);return M.useEffect(()=>{t&&a.current&&a.current?.setScale(t)},[t]),M.useEffect(()=>{a.current&&(typeof o=="string"?a.current?.setColorHTML(o):o instanceof te?a.current?.setColor4v(o):Array.isArray(o)&&a.current?.setColor(...o))},[o]),M.useEffect(()=>{e&&a.current&&a.current?.setObjectSrc(e)},[e]),M.useEffect(()=>{typeof i=="boolean"&&a.current&&a.current?.setVisibility(i)},[i]),M.useEffect(()=>(a.current=new wn({color:o,objSrc:e,scale:t,visibility:i,...n}),a.current&&r&&r(a.current),()=>{a.current&&s&&s(a.current)}),[r,s]),null},Vd=({visibility:o,size:e,color:t,rotation:i,offset:r,text:s,face:n,isRTL:a,align:l,outline:h,outlineColor:c,opacity:d,_addLabel:u,_removeLabel:g,...f})=>{const p=M.useRef(null);return M.useEffect(()=>{typeof o=="boolean"&&p.current&&p.current?.setVisibility(o)},[o]),M.useEffect(()=>{typeof i=="number"&&p.current&&p.current?.setRotation(i*Math.PI/180)},[i]),M.useEffect(()=>{typeof e=="number"&&p.current&&p.current?.setSize(e)},[e]),M.useEffect(()=>{typeof h=="number"&&p.current&&p.current?.setOutline(h)},[h]),M.useEffect(()=>{typeof d=="number"&&p.current&&p.current?.setOpacity(d)},[d]),M.useEffect(()=>{typeof a=="boolean"&&p.current&&p.current?.setRtl(a)},[a]),M.useEffect(()=>{r&&p.current&&(r instanceof m?p.current?.setOffset(r.x,r.y,r.z):r instanceof N?p.current?.setOffset(r.x,r.y):p.current?.setOffset(r[0],r[1],r[2]))},[r]),M.useEffect(()=>{typeof s=="string"&&p.current&&p.current?.setText(s)},[s]),M.useEffect(()=>{typeof n=="string"&&p.current&&p.current?.setFace(n)},[n]),M.useEffect(()=>{typeof l=="string"&&p.current&&p.current?.setAlign(l)},[l]),M.useEffect(()=>{typeof t=="string"&&p.current&&p.current?.setColorHTML(t)},[t]),M.useEffect(()=>{typeof c=="string"&&p.current&&p.current?.setOutlineColorHTML(c)},[c]),M.useEffect(()=>(p.current=new Tn({...f,color:t,size:e,text:s,face:n,isRTL:a,align:l,outline:h,outlineColor:c,opacity:d,offset:r,visibility:o,rotation:i?i*Math.PI/180:0}),p.current&&u&&u(p.current),()=>{p.current&&g&&g(p.current)}),[u,g]),null};function Ud(o){switch(o.type){case"POINT":return Array.isArray(o.coordinates)&&o.coordinates.length>=2&&typeof o.coordinates[0]=="number";case"LINESTRING":return Array.isArray(o.coordinates)&&o.coordinates.every(e=>Array.isArray(e)&&e.length>=2&&typeof e[0]=="number");case"POLYGON":return Array.isArray(o.coordinates)&&o.coordinates.every(e=>Array.isArray(e)&&e.every(t=>Array.isArray(t)&&t.length>=2&&typeof t[0]=="number"));case"MULTIPOLYGON":return Array.isArray(o.coordinates)&&o.coordinates.every(e=>Array.isArray(e)&&e.every(t=>Array.isArray(t)&&t.every(i=>Array.isArray(i)&&i.length>=2&&typeof i[0]=="number")));case"MULTILINESTRING":return Array.isArray(o.coordinates)&&o.coordinates.every(e=>Array.isArray(e)&&e.every(t=>Array.isArray(t)&&t.length>=2&&typeof t[0]=="number"));default:return!1}}const Gd=o=>{const{visibility:e,fillColor:t,lineColor:i,strokeColor:r,lineWidth:s,strokeWidth:n,type:a,coordinates:l,_addGeometry:h,_removeGeometry:c}=o,d=M.useRef(null);if(!Ud({type:a,coordinates:l}))throw new Error(`Invalid coordinates for type ${a}`);return M.useEffect(()=>{typeof e=="boolean"&&d.current&&d.current.setVisibility(e)},[e]),M.useEffect(()=>{if(t!==void 0&&d.current){if(t instanceof te)d.current.setFillColor4v(t);else if(Array.isArray(t))d.current.setFillColor(...t);else if(typeof t=="string"&&d.current){const u=ji.htmlColorToRgba(t);d.current.setFillColor4v(u)}}},[t]),M.useEffect(()=>{if(i!==void 0&&d.current){if(i instanceof te)d.current.setLineColor4v(i);else if(Array.isArray(i))d.current.setLineColor(...i);else if(typeof i=="string"&&d.current){const u=ji.htmlColorToRgba(i);d.current.setLineColor4v(u)}}},[i]),M.useEffect(()=>{if(r!==void 0&&d.current){if(r instanceof te)d.current.setStrokeColor4v(r);else if(Array.isArray(r))d.current.setStrokeColor(...r);else if(typeof r=="string"&&d.current){const u=ji.htmlColorToRgba(r);d.current.setStrokeColor4v(u)}}},[r]),M.useEffect(()=>{typeof s=="number"&&d.current&&d.current.setLineWidth(s)},[s]),M.useEffect(()=>{typeof n=="number"&&d.current&&d.current.setStrokeWidth(n)},[n]),M.useEffect(()=>(d.current=new yn({...o,type:a,coordinates:l,style:{fillColor:t,lineColor:i,strokeColor:r,lineWidth:s,strokeWidth:n},visibility:e}),d.current&&h&&h(d.current),()=>{d.current&&c&&c(d.current)}),[h,c]),null},Ro=o=>Array.isArray(o)&&o.length>0&&o[0][0]instanceof m,Bo=o=>Array.isArray(o)&&o.length>0&&(o[0][0]instanceof P||o[0][0]instanceof Array),jd=o=>o.map(e=>e.map(t=>P.createFromArray(t))),qd=o=>typeof o=="string"||Array.isArray(o),ko=o=>Array.isArray(o)&&o.every(e=>Array.isArray(e)&&e.every(qd)),Yd=o=>Array.isArray(o)&&o.every(e=>Array.isArray(e)&&e.every(t=>Array.isArray(t)&&t.length===4&&t.every(i=>typeof i=="number"))),Io=o=>ko(o)?o.map(e=>e.map(t=>{const i=ji.htmlColorToRgba(t);return[i.x,i.y,i.z,i.w]})):o,Wd=({visibility:o,color:e,altitude:t,thickness:i,opacity:r,isClosed:s,pathColors:n,path:a,_addPolyline:l,_removePolyline:h,...c})=>{const d=M.useRef(null);return M.useEffect(()=>{typeof o=="boolean"&&d.current&&d.current?.setVisibility(o)},[o]),M.useEffect(()=>{typeof e=="string"&&d.current&&d.current?.setColorHTML(e)},[e]),M.useEffect(()=>{typeof t=="number"&&d.current&&d.current?.setAltitude(t)},[t]),M.useEffect(()=>{typeof i=="number"&&d.current&&d.current?.setThickness(i)},[i]),M.useEffect(()=>{typeof r=="number"&&d.current&&d.current?.setOpacity(r)},[r]),M.useEffect(()=>{if(d.current&&a!==void 0)if(Bo(a))d.current?.setPathLonLat(a);else if(Ro(a))d.current?.setPath3v(a);else{const u=jd(a);u&&d.current?.setPathLonLat(u)}},[a]),M.useEffect(()=>{if(n&&Array.isArray(n)&&n.length>0)if(ko(n)){const u=Io(n);u&&d.current?.setPathColors(u)}else Yd(n)&&d.current?.setPathColors(n)},[n]),M.useEffect(()=>(d.current=new Ln({...c,color:e,visibility:o,opacity:r,thickness:i,pathLonLat:a&&Bo(a)?a:void 0,path3v:a&&Ro(a)?a:void 0,pathColors:Io(n),altitude:t}),d.current&&l&&l(d.current),()=>{d.current&&h&&h(d.current)}),[l,h]),null},$d=o=>Array.isArray(o)&&o.length>0&&o[0][0]instanceof m,Xd=o=>Array.isArray(o)&&o.length>0&&o[0][0]instanceof P,zo=(o,e)=>e?$d(e)?e:Xd(e)?e.map(t=>t.map(i=>o.lonLatToCartesian(i))):e.map(t=>t.map(i=>o.lonLatToCartesian(P.createFromArray(i)))):[],Zd=({visibility:o,color:e,opacity:t,path:i,_addStrip:r,_removeStrip:s,...n})=>{const a=M.useRef(null),{globe:l}=ut();return M.useEffect(()=>{typeof o=="boolean"&&a.current&&a.current?.setVisibility(o)},[o]),M.useEffect(()=>{typeof t=="number"&&a.current&&a.current?.setOpacity(t)},[t]),M.useEffect(()=>{l&&i!==void 0&&a.current&&a.current?.setPath(zo(l.planet.ellipsoid,i))},[i]),M.useEffect(()=>{typeof e=="string"&&a.current&&a.current?.setColorHTML(e)},[e]),M.useEffect(()=>(l&&(a.current=new Mn({...n,color:e,visibility:o,path:zo(l.planet.ellipsoid,i),opacity:t}),a.current&&r&&r(a.current)),()=>{a.current&&s&&s(a.current)}),[r,s,l]),null},Qd=({visibility:o,lon:e,lat:t,alt:i,lonlat:r,name:s,children:n,yaw:a,pitch:l,roll:h,cartesian:c,_addEntity:d,_removeEntity:u,relativePosition:g,...f})=>{const{globe:p}=ut(),{addEntity:_,removeEntity:v,addBillboard:x,removeBillboard:y,addGeoObject:w,removeGeoObject:b,addLabel:C,removeLabel:E,addGeometry:T,removeGeometry:L,addPolyline:S,removePolyline:R,addStrip:z,removeStrip:F,addGltf:B,removeGltf:D}=M.useContext(Ts),A=M.useRef(null),[I,k]=M.useState(null),[U,Fe]=M.useState(null),[ge,ke]=M.useState(null),[Ee,ie]=M.useState(null),[xe,Ie]=M.useState(null),[Bt,Qt]=M.useState(null),[kt,Do]=M.useState(null),[Fo,sr]=M.useState(!1),ft=M.useRef([]);M.useEffect(()=>{r&&(r instanceof P||(r=P.createFromArray(r)),A.current?.setLonLat(r))},[r,I]),M.useEffect(()=>{typeof e=="number"&&typeof t=="number"&&typeof i=="number"&&A.current?.setLonLat2(e,t,i)},[e,t,i]),M.useEffect(()=>{typeof o=="boolean"&&A.current&&A.current?.setVisibility(o)},[o]),M.useEffect(()=>{Array.isArray(c)&&A.current&&A.current?.setCartesian(c[0],c[1],c[2])},[]),M.useEffect(()=>{typeof a=="number"&&A.current&&A.current?.setYaw(a*_r.RADIANS)},[a]),M.useEffect(()=>{typeof h=="number"&&A.current&&A.current?.setRoll(h*_r.RADIANS)},[h]),M.useEffect(()=>{typeof l=="number"&&A.current&&A.current?.setPitch(l*_r.RADIANS)},[l]),M.useEffect(()=>{typeof g=="boolean"&&A.current&&(A.current.relativePosition=g)},[g]),M.useLayoutEffect(()=>{if(!p||d)return;const Z=new V({lonlat:r||new P(e,t,i),name:s,...f});return A.current=Z,_(Z),sr(!0),xe&&A.current&&B(A.current,xe),ft.current.length&&A.current&&(ft.current.forEach(lt=>A.current.appendChild(lt)),ft.current=[]),()=>{A.current&&v(A.current),sr(!1)}},[p,_,v,d]),M.useEffect(()=>{if(!d)return;const Z=new V({visibility:o,name:s,yaw:a,pitch:l,roll:h,lonlat:r||new P(e,t,i),cartesian:c,relativePosition:g,...f});return A.current=Z,d(Z),xe&&A.current&&B(A.current,xe),sr(!0),ft.current.length&&A.current&&(ft.current.forEach(lt=>A.current.appendChild(lt)),ft.current=[]),()=>{u?.(Z),sr(!1)}},[d,u]),M.useEffect(()=>{xe&&A.current&&Fo&&B(A.current,xe)},[xe,Fo]),M.useEffect(()=>{I&&!A.current?.billboard&&A.current?.setBillboard(I)},[I]),M.useEffect(()=>{U&&!A.current?.geoObject&&A.current?.setGeoObject(U)},[U]),M.useEffect(()=>{ge&&!A.current?.label&&A.current?.setLabel(ge)},[ge]),M.useEffect(()=>{Ee&&!A.current?.geometry&&A.current?.setGeometry(Ee)},[Ee]),M.useEffect(()=>{Bt&&!A.current?.polyline&&A.current?.setPolyline(Bt)},[Bt]),M.useEffect(()=>{kt&&!A.current?.strip&&A.current?.setStrip(kt)},[kt]);const Oo=M.useCallback(Z=>{k(Z),A.current&&x(A.current,Z)},[x]),No=M.useCallback(()=>{A.current&&y(A.current),k(null)},[y]),Ho=M.useCallback(Z=>{Fe(Z),A.current&&w(A.current,Z)},[w]),Vo=M.useCallback(()=>{A.current&&b(A.current),Fe(null)},[b]),Uo=M.useCallback(Z=>{ke(Z),A.current&&C(A.current,Z)},[C]),Go=M.useCallback(()=>{A.current&&E(A.current),ke(null)},[E]),jo=M.useCallback(Z=>{ie(Z),A.current&&T(A.current,Z)},[T]),qo=M.useCallback(()=>{A.current&&L(A.current),ie(null)},[L]),Yo=M.useCallback(Z=>{Qt(Z),A.current&&S(A.current,Z)},[S]),Wo=M.useCallback(()=>{A.current&&R(A.current),Qt(null)},[R]),$o=M.useCallback(Z=>{Do(Z),A.current&&z(A.current,Z)},[z]),Xo=M.useCallback(()=>{A.current&&F(A.current),Do(null)},[F]),Zo=M.useCallback(Z=>{Ie(Z)},[]),Qo=M.useCallback(()=>{Ie(null)},[]),Ko=M.useCallback(Z=>{A.current?A.current.appendChild(Z):ft.current.push(Z)},[]),Jo=M.useCallback(Z=>{if(A.current){const lt=A.current.childEntities||[],el=lt.indexOf(Z);el!==-1&&lt.splice(el,1)}else ft.current=ft.current.filter(lt=>lt!==Z)},[]),eu=M.useMemo(()=>({_addEntity:Ko,_removeEntity:Jo,_addGeometry:jo,_removeGeometry:qo,_addLabel:Uo,_removeLabel:Go,_addBillboard:Oo,_removeBillboard:No,_addGeoObject:Ho,_removeGeoObject:Vo,_addPolyline:Yo,_removePolyline:Wo,_addStrip:$o,_removeStrip:Xo,_addGltf:Zo,_removeGltf:Qo}),[Ko,Jo,jo,qo,Uo,Go,Oo,No,Ho,Vo,Yo,Wo,$o,Xo,Zo,Qo]);return n?Ve.createElement(Ve.Fragment,null,Ve.Children.map(n,(Z,lt)=>Ve.isValidElement(Z)?Ve.cloneElement(Z,{...eu,key:Z.key??lt}):Z)):null},Kd=({src:o,_addGltf:e,_removeGltf:t})=>{const i=M.useRef(null);return M.useEffect(()=>{let r=!0;return(async()=>{const n=(await kd.loadGlb(o)).toEntities();i.current=n,r&&e&&e(n)})(),()=>{r=!1,t&&i.current&&t(i.current)}},[o]),null},Jd=({lon:o,lat:e,alt:t,lookLon:i,lookLat:r,lookAlt:s,viewAngle:n,...a})=>{const{globe:l}=ut();return M.useEffect(()=>{l&&typeof o=="number"&&typeof e=="number"&&typeof t=="number"&&l.planet.flyLonLat(new P(o,e,t),new P(i,r,s))},[o,e,t,i,r,s,l]),M.useEffect(()=>{l&&typeof n=="number"&&l.planet.camera.setViewAngle(n)},[n,l]),null};he.Billboard=Nd,he.Entity=Qd,he.GeoImage=zd,he.GeoObject=Hd,he.GeoVideo=Dd,he.Geometry=Gd,he.Globe=Id,he.GlobeContextProvider=El,he.Gltf=Kd,he.Label=Vd,he.Layer=Cs,he.PlanetCamera=Jd,he.Polyline=Wd,he.Strip=Zd,he.Vector=Od,he.VectorContext=Ts,he.XYZ=Fd,he.useGlobeContext=ut,Object.defineProperty(he,Symbol.toStringTag,{value:"Module"})}));
941
941
  //# sourceMappingURL=index.umd.cjs.map