@openglobus/openglobus-react 0.0.3 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/index.mjs +94 -92
- package/dist/index.umd.js +19 -19
- package/dist/src/index.d.ts +4 -3
- package/package.json +2 -2
package/dist/index.umd.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(function(je,Me){typeof exports=="object"&&typeof module<"u"?Me(exports,require("react")):typeof define=="function"&&define.amd?define(["exports","react"],Me):(je=typeof globalThis<"u"?globalThis:je||self,Me(je["@openglobus/react"]={},je.React))})(this,function(je,Me){"use strict";const Ni=2*Math.PI,nt=2147483647,fe=549755748352,pe=-fe,O=Math.PI/180,we=180/Math.PI,hi=.5*O,Hn=Math.sqrt(.5),On=.1,Ye=1e-10,Rr=1e-12,Sr=1e-14,Vn=1e-15;function Hi(c=0,e=1){return Math.floor(Math.random()*(e-c))+c}function Oi(c,e){return(c%e+e)%e}function Ir(c){const e=Oi(c,Ni);return Math.abs(e)<Sr&&Math.abs(c)>Sr?Ni:e}function zr(c,e){return e<c?0:1}function ci(c){const e=Math.abs(c);return e-Math.floor(e)}function Un(c){return Math.pow(2,c)}function Gn(c,e,t){return t+c*(e-t)}function Fr(c){return c-Math.floor(c/360)*360}const jn=Math.PI*.5,kr=180/Math.PI,Yn=kr*2,Vi=Math.PI/360,qn=kr*jn;class B{constructor(e=0,t=0,i=0){this.lon=0,this.lat=0,this.height=0,this.lon=e,this.lat=t,this.height=i}isZero(){return this.lon===0&&this.lat===0&&this.height===0}static join(e){let t=[];for(let i=0;i<e.length;i++){let r=e[i];t[i]=new B(r[0],r[1],r[2])}return t}static createFromArray(e){return new B(e[0],e[1],e[2])}static toArray(e){return[e.lon,e.lat,e.height]}toArray(){return B.toArray(this)}static forwardMercator(e,t,i){return new B(e*Gi,Math.log(Math.tan((90+t)*Vi))*Dt,i)}static forwardMercatorRes(e,t){return t.lon=e.lon*Gi,t.lat=Math.log(Math.tan((90+e.lat)*Vi))*Dt,t.height=e.height,t}static inverseMercator(e,t,i=0){return new B(e*Xn,Yn*Math.atan(Math.exp(t*Dr))-qn,i)}set(e=0,t=0,i=0){return this.lon=e,this.lat=t,this.height=i,this}copy(e){return this.lon=e.lon,this.lat=e.lat,this.height=e.height,this}clone(){return new B(this.lon,this.lat,this.height)}forwardMercator(){return B.forwardMercator(this.lon,this.lat,this.height)}forwardMercatorEPS01(){let e=this.lat;return e>89.9?e=89.9:e<-89.9&&(e=-89.9),new B(this.lon*Gi,Math.log(Math.tan((90+e)*Vi))*Dt)}inverseMercator(){return B.inverseMercator(this.lon,this.lat,this.height)}equal(e){return e.height?this.lon===e.lon&&this.lat===e.lat&&this.height===e.height:this.lon===e.lon&&this.lat===e.lat}}const re=2003750834e-2,Ui=re*2,Dr=Math.PI/re,Dt=re/Math.PI,Wn=Math.PI*.5,Gi=re/180,Xn=180/re,Nr=Math.PI/360,Zn=180/Math.PI,ji=2*re,di=1/ji;function Hr(c){return new B(c.lon*re/180,Math.log(Math.tan((90+c.lat)*Nr))*Dt,c.height)}function fi(c){return c*re/180}function ui(c){return Math.log(Math.tan((90+c)*Nr))*Dt}function $n(c){return Zn*(2*Math.atan(Math.exp(c*Dr))-Wn)}function Kn(c,e,t){let i=Ui/Math.pow(2,t),r=new B(-re+c*i,re-e*i-i);return new U(r,new B(r.lon+i,r.lat+i))}const ce=$n(re),Re=-ce;class U{constructor(e=new B,t=new B){this.southWest=e,this.northEast=t}static createFromArray(e){return new U(new B(e[0],e[1]),new B(e[2],e[3]))}static createByCoordinates(e){let t=fe,i=pe,r=fe,s=pe;for(let n=0;n<e.length;n++){const a=e[n];a.lon<t&&(t=a.lon),a.lon>i&&(i=a.lon),a.lat<r&&(r=a.lat),a.lat>s&&(s=a.lat)}return new U(new B(t,r),new B(i,s))}static createByCoordinatesArr(e){let t=fe,i=pe,r=fe,s=pe;for(let n=0;n<e.length;n++){const a=e[n];a[0]<t&&(t=a[0]),a[0]>i&&(i=a[0]),a[1]<r&&(r=a[1]),a[1]>s&&(s=a[1])}return new U(new B(t,r),new B(i,s))}static fromTile(e,t,i,r=ji,s=ji){const n=Math.pow(2,i),a=Math.pow(2,i),o=r/a,l=s/n,h=-r*.5+e*o,d=s*.5-t*l,f=d-l,u=h+o;return new U(new B(h,f),new B(u,d))}setByCoordinates(e){let t=fe,i=pe,r=fe,s=pe;for(let n=0;n<e.length;n++){const a=e[n];a.lon<t&&(t=a.lon),a.lon>i&&(i=a.lon),a.lat<r&&(r=a.lat),a.lat>s&&(s=a.lat)}return this.southWest.lon=t,this.southWest.lat=r,this.northEast.lon=i,this.northEast.lat=s,this}isInside(e){const t=this.southWest,i=this.northEast;return e.lon>=t.lon&&e.lon<=i.lon&&e.lat>=t.lat&&e.lat<=i.lat}overlaps(e){const t=this.southWest,i=this.northEast;return t.lon<=e.northEast.lon&&i.lon>=e.southWest.lon&&t.lat<=e.northEast.lat&&i.lat>=e.southWest.lat}getWidth(){return this.northEast.lon-this.southWest.lon}getHeight(){return this.northEast.lat-this.southWest.lat}clone(){return new U(this.southWest.clone(),this.northEast.clone())}getCenter(){const e=this.southWest,t=this.northEast;return new B(e.lon+(t.lon-e.lon)*.5,e.lat+(t.lat-e.lat)*.5)}getNorthWest(){return new B(this.southWest.lon,this.northEast.lat)}getNorthEast(){return new B(this.northEast.lon,this.northEast.lat)}getSouthWest(){return new B(this.southWest.lon,this.southWest.lat)}getSouthEast(){return new B(this.northEast.lon,this.southWest.lat)}getNorth(){return this.northEast.lat}getEast(){return this.northEast.lon}getWest(){return this.southWest.lon}getSouth(){return this.southWest.lat}equals(e){return this.southWest.lon===e.southWest.lon&&this.southWest.lat===e.southWest.lat&&this.northEast.lon===e.northEast.lon&&this.northEast.lat===e.northEast.lat}forwardMercator(){return new U(this.southWest.forwardMercator(),this.northEast.forwardMercator())}inverseMercator(){return new U(this.southWest.inverseMercator(),this.northEast.inverseMercator())}getCartesianBounds(e){let t=fe,i=pe,r=fe,s=pe,n=fe,a=pe;const o=[new B(this.southWest.lon,this.southWest.lat),new B(this.southWest.lon,this.northEast.lat),new B(this.northEast.lon,this.northEast.lat),new B(this.northEast.lon,this.southWest.lat)];for(let l=0;l<o.length;l++){const h=e.lonLatToCartesian(o[l]),d=h.x,f=h.y,u=h.z;d<t&&(t=d),d>i&&(i=d),f<r&&(r=f),f>s&&(s=f),u<n&&(n=u),u>a&&(a=u)}return[t,r,n,i,s,a]}toString(){return`[${this.southWest.lon.toFixed(5)}, ${this.southWest.lat.toFixed(5)}, ${this.northEast.lon.toFixed(5)}, ${this.northEast.lat.toFixed(5)}]`}}class at{constructor(){this._m=[0,0,0,0,0,0,0,0,0]}set(e){return this._m[0]=e[0],this._m[1]=e[1],this._m[2]=e[2],this._m[3]=e[3],this._m[4]=e[4],this._m[5]=e[5],this._m[6]=e[6],this._m[7]=e[7],this._m[8]=e[8],this}clone(){let e=new at;return e.set(this._m),e}copy(e){return this.set(e._m)}transposeTo(){let e=new at,t=this._m;return e._m[0]=t[0],e._m[1]=t[3],e._m[2]=t[6],e._m[3]=t[1],e._m[4]=t[4],e._m[5]=t[7],e._m[6]=t[2],e._m[7]=t[5],e._m[8]=t[8],e}setIdentity(){return this._m[0]=1,this._m[1]=0,this._m[2]=0,this._m[3]=0,this._m[4]=1,this._m[5]=0,this._m[6]=0,this._m[7]=0,this._m[8]=1,this}mulVec(e){let t=e.x,i=e.y,r=e.z,s=this._m;return new p(s[0]*t+s[3]*i+s[6]*r,s[1]*t+s[4]*i+s[7]*r,s[2]*t+s[5]*i+s[8]*r)}toMatrix4(){let e=new ne,t=e._m,i=this._m;return t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=0,t[4]=i[3],t[5]=i[4],t[6]=i[5],t[7]=0,t[8]=i[6],t[9]=i[7],t[10]=i[8],t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,e}}class J{constructor(e=0,t=0,i=0,r=0){this.x=e,this.y=t,this.z=i,this.w=r}static get identity(){return new J(0,0,0,1)}static fromVec(e){return new J(e[0],e[1],e[2],e[3])}toVec3(){return new p(this.x,this.y,this.z)}clone(){return new J(this.x,this.y,this.z,this.w)}equal(e){return this.x===e.x&&this.y===e.y&&this.z===e.z&&this.w===e.w}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w,this}toArray(){return[this.x,this.y,this.z,this.w]}toArray3(){return[this.x,this.y,this.z]}set(e,t,i,r){return this.x=e,this.y=t,this.z=i,this.w=r,this}addA(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}subA(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}scale(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}affinity(){let e=1/this.w;return this.x*=e,this.y*=e,this.z*=e,this.w=1,this}scaleTo(e){return new J(this.x*e,this.y*e,this.z*e,this.w*e)}getStep(e){return new J(this.x<e?0:1,this.y<e?0:1,this.z<e?0:1,this.w<e?0:1)}getFrac(e){return new J(ci(e.x),ci(e.y),ci(e.z),ci(e.w))}dot(e){return e.x*this.x+e.y*this.y+e.z*this.z+e.w*this.w}isZero(){return!(this.x||this.y||this.z||this.w)}}class ne{constructor(){this._m=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}static identity(){let e=new ne;return e._m[0]=1,e._m[1]=0,e._m[2]=0,e._m[3]=0,e._m[4]=0,e._m[5]=1,e._m[6]=0,e._m[7]=0,e._m[8]=0,e._m[9]=0,e._m[10]=1,e._m[11]=0,e._m[12]=0,e._m[13]=0,e._m[14]=0,e._m[15]=1,e}set(e){return this._m[0]=e[0],this._m[1]=e[1],this._m[2]=e[2],this._m[3]=e[3],this._m[4]=e[4],this._m[5]=e[5],this._m[6]=e[6],this._m[7]=e[7],this._m[8]=e[8],this._m[9]=e[9],this._m[10]=e[10],this._m[11]=e[11],this._m[12]=e[12],this._m[13]=e[13],this._m[14]=e[14],this._m[15]=e[15],this}clone(){let e=new ne;return e.set(this._m),e}copy(e){return this.set(e._m)}toMatrix3(){let e=new at,t=this._m,i=e._m;return i[0]=t[0],i[1]=t[1],i[2]=t[2],i[3]=t[4],i[4]=t[5],i[5]=t[6],i[6]=t[8],i[7]=t[9],i[8]=t[10],e}mulVec3(e){let t=e.x,i=e.y,r=e.z;return new p(this._m[0]*t+this._m[4]*i+this._m[8]*r+this._m[12],this._m[1]*t+this._m[5]*i+this._m[9]*r+this._m[13],this._m[2]*t+this._m[6]*i+this._m[10]*r+this._m[14])}mulVec4(e){let t=e.x,i=e.y,r=e.z,s=e.w;return new J(this._m[0]*t+this._m[4]*i+this._m[8]*r+this._m[12]*s,this._m[1]*t+this._m[5]*i+this._m[9]*r+this._m[13]*s,this._m[2]*t+this._m[6]*i+this._m[10]*r+this._m[14]*s,this._m[3]*t+this._m[7]*i+this._m[11]*r+this._m[15]*s)}toInverseMatrix3(){let e=this._m,t=e[0],i=e[1],r=e[2],s=e[4],n=e[5],a=e[6],o=e[8],l=e[9],h=e[10],d=h*n-a*l,f=-h*s+a*o,u=l*s-n*o,g=t*d+i*f+r*u;if(!g)return;g=1/g;let _=new at;return _._m[0]=d*g,_._m[1]=(-h*i+r*l)*g,_._m[2]=(a*i-r*n)*g,_._m[3]=f*g,_._m[4]=(h*t-r*o)*g,_._m[5]=(-a*t+r*s)*g,_._m[6]=u*g,_._m[7]=(-l*t+i*o)*g,_._m[8]=(n*t-i*s)*g,_}inverseTo(e=new ne){let t=this._m[0],i=this._m[1],r=this._m[2],s=this._m[3],n=this._m[4],a=this._m[5],o=this._m[6],l=this._m[7],h=this._m[8],d=this._m[9],f=this._m[10],u=this._m[11],g=this._m[12],_=this._m[13],m=this._m[14],v=this._m[15],b=t*a-i*n,y=t*o-r*n,w=t*l-s*n,x=i*o-r*a,T=i*l-s*a,A=r*l-s*o,E=h*_-d*g,C=h*m-f*g,P=h*v-u*g,I=d*m-f*_,k=d*v-u*_,z=f*v-u*m,L=1/(b*z-y*k+w*I+x*P-T*C+A*E);return e._m[0]=(a*z-o*k+l*I)*L,e._m[1]=(-i*z+r*k-s*I)*L,e._m[2]=(_*A-m*T+v*x)*L,e._m[3]=(-d*A+f*T-u*x)*L,e._m[4]=(-n*z+o*P-l*C)*L,e._m[5]=(t*z-r*P+s*C)*L,e._m[6]=(-g*A+m*w-v*y)*L,e._m[7]=(h*A-f*w+u*y)*L,e._m[8]=(n*k-a*P+l*E)*L,e._m[9]=(-t*k+i*P-s*E)*L,e._m[10]=(g*T-_*w+v*b)*L,e._m[11]=(-h*T+d*w-u*b)*L,e._m[12]=(-n*I+a*C-o*E)*L,e._m[13]=(t*I-i*C+r*E)*L,e._m[14]=(-g*x+_*y-m*b)*L,e._m[15]=(h*x-d*y+f*b)*L,e}transposeTo(){let e=new ne;return e._m[0]=this._m[0],e._m[1]=this._m[4],e._m[2]=this._m[8],e._m[3]=this._m[12],e._m[4]=this._m[1],e._m[5]=this._m[5],e._m[6]=this._m[9],e._m[7]=this._m[13],e._m[8]=this._m[2],e._m[9]=this._m[6],e._m[10]=this._m[10],e._m[11]=this._m[14],e._m[12]=this._m[3],e._m[13]=this._m[7],e._m[14]=this._m[11],e._m[15]=this._m[15],e}setIdentity(){return this._m[0]=1,this._m[1]=0,this._m[2]=0,this._m[3]=0,this._m[4]=0,this._m[5]=1,this._m[6]=0,this._m[7]=0,this._m[8]=0,this._m[9]=0,this._m[10]=1,this._m[11]=0,this._m[12]=0,this._m[13]=0,this._m[14]=0,this._m[15]=1,this}mul(e){let t=this._m[0],i=this._m[1],r=this._m[2],s=this._m[3],n=this._m[4],a=this._m[5],o=this._m[6],l=this._m[7],h=this._m[8],d=this._m[9],f=this._m[10],u=this._m[11],g=this._m[12],_=this._m[13],m=this._m[14],v=this._m[15],b=e._m[0],y=e._m[1],w=e._m[2],x=e._m[3],T=e._m[4],A=e._m[5],E=e._m[6],C=e._m[7],P=e._m[8],I=e._m[9],k=e._m[10],z=e._m[11],L=e._m[12],S=e._m[13],F=e._m[14],R=e._m[15],M=new ne;return M._m[0]=b*t+y*n+w*h+x*g,M._m[1]=b*i+y*a+w*d+x*_,M._m[2]=b*r+y*o+w*f+x*m,M._m[3]=b*s+y*l+w*u+x*v,M._m[4]=T*t+A*n+E*h+C*g,M._m[5]=T*i+A*a+E*d+C*_,M._m[6]=T*r+A*o+E*f+C*m,M._m[7]=T*s+A*l+E*u+C*v,M._m[8]=P*t+I*n+k*h+z*g,M._m[9]=P*i+I*a+k*d+z*_,M._m[10]=P*r+I*o+k*f+z*m,M._m[11]=P*s+I*l+k*u+z*v,M._m[12]=L*t+S*n+F*h+R*g,M._m[13]=L*i+S*a+F*d+R*_,M._m[14]=L*r+S*o+F*f+R*m,M._m[15]=L*s+S*l+F*u+R*v,M}translate(e){let t=e.x,i=e.y,r=e.z,s=this._m;return s[12]=s[0]*t+s[4]*i+s[8]*r+s[12],s[13]=s[1]*t+s[5]*i+s[9]*r+s[13],s[14]=s[2]*t+s[6]*i+s[10]*r+s[14],s[15]=s[3]*t+s[7]*i+s[11]*r+s[15],this}translateToPosition(e){let t=this._m;return t[12]=e.x,t[13]=e.y,t[14]=e.z,this}rotate(e,t){let i=Math.cos(t),r=Math.sin(t),s=new ne,n=s._m;return n[0]=i+(1-i)*e.x*e.x,n[1]=(1-i)*e.y*e.x-r*e.z,n[2]=(1-i)*e.z*e.x+r*e.y,n[3]=0,n[4]=(1-i)*e.x*e.y+r*e.z,n[5]=i+(1-i)*e.y*e.y,n[6]=(1-i)*e.z*e.y-r*e.x,n[7]=0,n[8]=(1-i)*e.x*e.z-r*e.y,n[9]=(1-i)*e.y*e.z+r*e.x,n[10]=i+(1-i)*e.z*e.z,n[11]=0,n[12]=0,n[13]=0,n[14]=0,n[15]=1,this.mul(s)}setRotation(e,t){let i=Math.cos(t),r=Math.sin(t),s=this._m;return s[0]=i+(1-i)*e.x*e.x,s[1]=(1-i)*e.y*e.x-r*e.z,s[2]=(1-i)*e.z*e.x+r*e.y,s[3]=0,s[4]=(1-i)*e.x*e.y+r*e.z,s[5]=i+(1-i)*e.y*e.y,s[6]=(1-i)*e.z*e.y-r*e.x,s[7]=0,s[8]=(1-i)*e.x*e.z-r*e.y,s[9]=(1-i)*e.y*e.z+r*e.x,s[10]=i+(1-i)*e.z*e.z,s[11]=0,s[12]=0,s[13]=0,s[14]=0,s[15]=1,this}rotateBetweenVectors(e,t){return D.getRotationBetweenVectors(e,t).getMat4()}scale(e){let t=this._m;return t[0]=t[0]*e.x,t[1]=t[1]*e.x,t[2]=t[2]*e.x,t[3]=t[3]*e.x,t[4]=t[4]*e.y,t[5]=t[5]*e.y,t[6]=t[6]*e.y,t[7]=t[7]*e.y,t[8]=t[8]*e.z,t[9]=t[9]*e.z,t[10]=t[10]*e.z,t[11]=t[11]*e.z,this}setPerspective(e,t,i,r,s,n){let a=t-e,o=r-i,l=n-s;return this._m[0]=s*2/a,this._m[1]=0,this._m[2]=0,this._m[3]=0,this._m[4]=0,this._m[5]=s*2/o,this._m[6]=0,this._m[7]=0,this._m[8]=(t+e)/a,this._m[9]=(r+i)/o,this._m[10]=-(n+s)/l,this._m[11]=-1,this._m[12]=0,this._m[13]=0,this._m[14]=-(n*s*2)/l,this._m[15]=0,this}setOrtho(e,t,i,r,s,n){let a=1/(e-t),o=1/(i-r),l=1/(s-n),h=this._m;return h[0]=-2*a,h[1]=0,h[2]=0,h[3]=0,h[4]=0,h[5]=-2*o,h[6]=0,h[7]=0,h[8]=0,h[9]=0,h[10]=2*l,h[11]=0,h[12]=(e+t)*a,h[13]=(r+i)*o,h[14]=(n+s)*l,h[15]=1,this}eulerToMatrix(e,t,i){let r=Math.cos(e),s=Math.sin(e),n=Math.cos(t),a=Math.sin(t),o=Math.cos(i),l=Math.sin(i),h=r*a,d=s*a,f=this._m;return f[0]=n*o,f[1]=-n*l,f[2]=-a,f[4]=-d*o+r*l,f[5]=d*l+r*o,f[6]=-s*n,f[8]=h*o+s*l,f[9]=-h*l+s*o,f[10]=r*n,f[3]=f[7]=f[11]=f[12]=f[13]=f[14]=0,f[15]=1,this}}class D{constructor(e=0,t=0,i=0,r=0){this.x=e,this.y=t,this.z=i,this.w=r}static get IDENTITY(){return new D(0,0,0,1)}static xRotation(e){return e*=.5,new D(Math.sin(e),0,0,Math.cos(e))}static yRotation(e){return e*=.5,new D(0,Math.sin(e),0,Math.cos(e))}static zRotation(e){return e*=.5,new D(0,0,Math.sin(e),Math.cos(e))}static axisAngleToQuat(e,t=0){let i=e.getNormal(),r=t*.5,s=Math.sin(r);return new D(i.x*s,i.y*s,i.z*s,Math.cos(r))}static getLookRotation(e,t){let i=e.getNormal().negate(),r=t.cross(i).normalize(),s=i.cross(r),n=1+r.x+s.y+i.z;if(n>1e-6){let o=1/(2*Math.sqrt(n));return new D((i.y-s.z)*o,(r.z-i.x)*o,(s.x-r.y)*o,.25/o)}if(r.x>s.y&&r.x>i.z){let o=1/(2*Math.sqrt(1+r.x-s.y-i.z));return new D(.25/o,(s.x+r.y)*o,(r.z+i.x)*o,(i.y-s.z)*o)}if(s.y>i.z){let o=1/(2*Math.sqrt(1+s.y-r.x-i.z));return new D((s.x+r.y)*o,.25/o,(i.y+s.z)*o,(r.z-i.x)*o)}let a=1/(2*Math.sqrt(1+i.z-r.x-s.y));return new D((r.z+i.x)*a,(i.y+s.z)*a,.25/a,(s.x-r.y)*a)}static getLookAtSourceDest(e,t){let i=t.subA(e).normalize(),r=p.FORWARD.dot(i);if(Math.abs(r- -1)<1e-6)return D.axisAngleToQuat(p.UP,Math.PI);if(Math.abs(r-1)<1e-6)return new D(0,0,0,1);let s=Math.acos(r),n=p.FORWARD.cross(i).normalize();return D.axisAngleToQuat(n,s)}static getRotationBetweenVectors(e,t){let i=e.cross(t);return new D(i.x,i.y,i.z,1+e.dot(t)).normalize()}static getRotationBetweenVectorsRes(e,t,i){let r=e.cross(t);return i.set(r.x,r.y,r.z,1+e.dot(t)),i.normalize()}static getRotationBetweenVectorsUp(e,t,i){let r=e.dot(t);if(Math.abs(r+1)<1e-6)return D.axisAngleToQuat(i,Math.PI);if(Math.abs(r-1)<1e-6)return new D(0,0,0,1);let s=Math.acos(r),n=e.cross(t).normalize();return D.axisAngleToQuat(n,s)}isZero(){return this.x===0&&this.y===0&&this.z===0&&this.w===0}clear(){return this.x=this.y=this.z=this.w=0,this}set(e,t,i,r){return this.x=e,this.y=t,this.z=i,this.w=r,this}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w,this}setIdentity(){return this.x=0,this.y=0,this.z=0,this.w=1,this}clone(){return new D(this.x,this.y,this.z,this.w)}add(e){return new D(this.x+e.x,this.y+e.y,this.z+e.z,this.w+e.w)}sub(e){return new D(this.x-e.x,this.y-e.y,this.z-e.z,this.w-e.w)}scaleTo(e){return new D(this.x*e,this.y*e,this.z*e,this.w*e)}scale(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}toVec(){return[this.x,this.y,this.z,this.w]}setFromSphericalCoords(e,t,i){let r=Math.sin(i/2),s=Math.cos(i/2),n=Math.sin(e),a=Math.cos(e),o=Math.sin(t),l=Math.cos(t);return this.x=r*a*o,this.y=r*n,this.z=r*n*l,this.w=s,this}setLookRotation(e,t){let i=e.getNormal().negate(),r=t.cross(i).normalize(),s=i.cross(r),n=1+r.x+s.y+i.z;if(n>1e-6){let a=1/(2*Math.sqrt(n));this.x=(i.y-s.z)*a,this.y=(r.z-i.x)*a,this.z=(s.x-r.y)*a,this.w=.25/a}else if(r.x>s.y&&r.x>i.z){let a=1/(2*Math.sqrt(1+r.x-s.y-i.z));this.x=.25/a,this.y=(s.x+r.y)*a,this.z=(r.z+i.x)*a,this.w=(i.y-s.z)*a}else if(s.y>i.z){let a=1/(2*Math.sqrt(1+s.y-r.x-i.z));this.x=(s.x+r.y)*a,this.y=.25/a,this.z=(i.y+s.z)*a,this.w=(r.z-i.x)*a}else{let a=1/(2*Math.sqrt(1+i.z-r.x-s.y));this.x=(r.z+i.x)*a,this.y=(i.y+s.z)*a,this.z=.25/a,this.w=(s.x-r.y)*a}return this}toSphericalCoords(){let e=this.w,t=Math.sqrt(1-e*e);Math.abs(t)<5e-4&&(t=1);let i=this.x/t,r=this.y/t,s=this.z/t,n,a=-Math.asin(r);return i*i+s*s<5e-4?n=0:n=Math.atan2(i,s),n<0&&(n+=360),{lat:a,lon:n,alpha:Math.acos(e)}}setFromAxisAngle(e,t){let i=e.getNormal(),r=t*.5,s=Math.sin(r);return this.set(i.x*s,i.y*s,i.z*s,Math.cos(r)),this}getAxisAngle(){let e=this.x,t=this.y,i=this.z,r=this.w,s=Math.sqrt(e*e+t*t+i*i),n,a;if(s>1e-7){let o=1/s;n=new p(e*o,t*o,i*o),r<0?a=2*Math.atan2(-s,-r):a=2*Math.atan2(s,r)}else n=new p(0,0,0),a=0;return{axis:n,angle:a}}setFromEulerAngles(e,t,i){let r=e*hi,s=t*hi,n=i*hi,a=Math.cos(r),o=Math.cos(s),l=Math.cos(n),h=Math.sin(r),d=Math.sin(s),f=Math.sin(n),u=o*l,g=d*f;return this.w=a*u+h*g,this.x=h*u-a*g,this.y=a*d*l+h*o*f,this.z=a*o*f-h*d*l,this.normalize()}getEulerAngles(){let e=this.x,t=this.y,i=this.z,r=this.w,s=t*t,n=Math.atan2(2*(r*e+t*i),1-2*(e*e+s)),a=r*t-i*e;a<-1?a=-1:a>1&&(a=1);let o=Math.asin(2*a),l=Math.atan2(2*(r*i+e*t),1-2*(s+i*i));return{roll:n,pitch:o,yaw:l}}setFromMatrix4(e){let t,i,r=[],s,n,a,o=e._m,l=[1,2,0];return t=o[0]+o[5]+o[10],t>0?(i=Math.sqrt(t+1),this.w=i/2,i=.5/i,this.x=(o[6]-o[9])*i,this.y=(o[8]-o[2])*i,this.z=(o[1]-o[4])*i):(s=0,o[5]>o[0]&&(s=1),o[10]>o[s*5]&&(s=2),n=l[s],a=l[n],i=Math.sqrt(o[s*5]-(o[n*5]+o[a*5])+1),r[s]=i*.5,i!==0&&(i=.5/i),r[3]=(o[n*4+a]-o[a*4+n])*i,r[n]=(o[s*4+n]+o[n*4+s])*i,r[a]=(o[s*4+a]+o[a*4+s])*i,this.x=r[0],this.y=r[1],this.z=r[2],this.w=r[3]),this}getMat4(e=new ne){let t=this.x+this.x,i=this.y+this.y,r=this.z+this.z,s=this.w*t,n=this.w*i,a=this.w*r,o=this.x*t,l=this.x*i,h=this.x*r,d=this.y*i,f=this.y*r,u=this.z*r;return e.set([1-(d+u),l-a,h+n,0,l+a,1-(o+u),f-s,0,h-n,f+s,1-(o+d),0,0,0,0,1])}getMat3(){let e=new at,t=e._m,i=this.x,r=this.y,s=this.z,n=this.w,a=i+i,o=r+r,l=s+s,h=i*a,d=i*o;i=i*l;let f=r*o;return r=r*l,s=s*l,a=n*a,o=n*o,n=n*l,t[0]=1-(f+s),t[1]=d-n,t[2]=i+o,t[3]=d+n,t[4]=1-(h+s),t[5]=r-a,t[6]=i-o,t[7]=r+a,t[8]=1-(h+f),e}mulVec3(e){let t=e.x,i=e.y,r=e.z,s=this.x,n=this.y,a=this.z,o=this.w,l=o*t+n*r-a*i,h=o*i+a*t-s*r,d=o*r+s*i-n*t;return t=-s*t-n*i-a*r,new p(l*o+t*-s+h*-a-d*-n,h*o+t*-n+d*-s-l*-a,d*o+t*-a+l*-n-h*-s)}mul(e){let t=this.x,i=this.y,r=this.z,s=this.w,n=e.x,a=e.y,o=e.z,l=e.w;return new D(t*l+s*n+i*o-r*a,i*l+s*a+r*n-t*o,r*l+s*o+t*a-i*n,s*l-t*n-i*a-r*o)}mulA(e){let t=this.x,i=this.y,r=this.z,s=this.w,n=e.x,a=e.y,o=e.z,l=e.w;return this.x=t*l+s*n+i*o-r*a,this.y=i*l+s*a+r*n-t*o,this.z=r*l+s*o+t*a-i*n,this.w=s*l-t*n-i*a-r*o,this}conjugate(){return new D(-this.x,-this.y,-this.z,this.w)}inverse(){let e=1/this.magnitude2();return new D(-this.x*e,-this.y*e,-this.z*e,this.w*e)}magnitude(){let e=this.x,t=this.y,i=this.z,r=this.w;return Math.sqrt(e*e+t*t+i*i+r*r)}magnitude2(){let e=this.x,t=this.y,i=this.z,r=this.w;return e*e+t*t+i*i+r*r}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}normalize(){let e=this.x,t=this.y,i=this.z,r=this.w,s=Math.sqrt(e*e+t*t+i*i+r*r);return s===0?(this.x=0,this.y=0,this.z=0,this.w=0,this):(s=1/s,this.x=e*s,this.y=t*s,this.z=i*s,this.w=r*s,this)}isEqual(e){let t=this.dot(e);return Math.abs(t-1)<.001}slerp(e,t){let i=this.x,r=this.y,s=this.z,n=this.w,a=e.x,o=e.y,l=e.z,h=e.w,d,f,u,g,_;return f=i*a+r*o+s*l+n*h,f<0&&(f=-f,a=-a,o=-o,l=-l,h=-h),1-f>1e-6?(d=Math.acos(f),u=Math.sin(d),g=Math.sin((1-t)*d)/u,_=Math.sin(t*d)/u):(g=1-t,_=t),new D(g*i+_*a,g*r+_*o,g*s+_*l,g*n+_*h)}getRoll(e=!1){let t=this.x,i=this.y,r=this.z,s=this.w;if(e){let n=2*i,a=2*r,o=a*s,l=n*t,h=n*i,d=a*r;return Math.atan2(l+o,1-(h+d))}else return Math.atan2(2*(t*i+s*r),s*s+t*t-i*i-r*r)}getPitch(e=!1){let t=this.x,i=this.y,r=this.z,s=this.w;if(e){let n=2*t,a=2*r,o=n*s,l=n*t,h=a*i,d=a*r;return Math.atan2(h+o,1-(l+d))}else return Math.atan2(2*(i*r+s*t),s*s-t*t-i*i+r*r)}getYaw(e=!1){let t=this.x,i=this.y,r=this.z,s=this.w;if(e){let n=2*t,a=2*i,o=2*r,l=a*s,h=n*t,d=o*t,f=a*i;return Math.atan2(d+l,1-(h+f))}else return Math.asin(-2*(t*r-s*i))}}class p{constructor(e=0,t=0,i=0){this.x=e,this.y=t,this.z=i}static get UP(){return new p(0,1,0)}static get DOWN(){return new p(0,-1,0)}static get RIGHT(){return new p(1,0,0)}static get LEFT(){return new p(-1,0,0)}static get FORWARD(){return new p(0,0,-1)}static get BACKWARD(){return new p(0,0,1)}static get ZERO(){return new p}static get UNIT_X(){return new p(1,0,0)}static get UNIT_Y(){return new p(0,1,0)}static get UNIT_Z(){return new p(0,0,1)}static get NORTH(){return p.UNIT_Z}static doubleToTwoFloats(e,t,i){let r=e.x,s=e.y,n=e.z;if(r>=0){let a=Math.floor(r/65536)*65536;t.x=Math.fround(a),i.x=Math.fround(r-a)}else{let a=Math.floor(-r/65536)*65536;t.x=Math.fround(-a),i.x=Math.fround(r+a)}if(s>=0){let a=Math.floor(s/65536)*65536;t.y=Math.fround(a),i.y=Math.fround(s-a)}else{let a=Math.floor(-s/65536)*65536;t.y=Math.fround(-a),i.y=Math.fround(s+a)}if(n>=0){let a=Math.floor(n/65536)*65536;t.z=Math.fround(a),i.z=Math.fround(n-a)}else{let a=Math.floor(-n/65536)*65536;t.z=Math.fround(-a),i.z=Math.fround(n+a)}}static doubleToTwoFloat32Array(e,t,i){let r=e.x,s=e.y,n=e.z;if(r>=0){let a=Math.floor(r/65536)*65536;t[0]=Math.fround(a),i[0]=Math.fround(r-a)}else{let a=Math.floor(-r/65536)*65536;t[0]=Math.fround(-a),i[0]=Math.fround(r+a)}if(s>=0){let a=Math.floor(s/65536)*65536;t[1]=Math.fround(a),i[1]=Math.fround(s-a)}else{let a=Math.floor(-s/65536)*65536;t[1]=Math.fround(-a),i[1]=Math.fround(s+a)}if(n>=0){let a=Math.floor(n/65536)*65536;t[2]=Math.fround(a),i[2]=Math.fround(n-a)}else{let a=Math.floor(-n/65536)*65536;t[2]=Math.fround(-a),i[2]=Math.fround(n+a)}}static fromVec(e){return new p(e[0],e[1],e[2])}static angle(e,t){return Math.acos(e.dot(t)/Math.sqrt(e.length2()*t.length2()))}static lerp(e,t,i){return new p(e.x+(t.x-e.x)*i,e.y+(t.y-e.y)*i,e.z+(t.z-e.z)*i)}static add(e,t){let i=new p(e.x,e.y,e.z);return i.addA(t),i}static sub(e,t){let i=new p(e.x,e.y,e.z);return i.subA(t),i}static scale(e,t){return e.scaleTo(t)}static mul(e,t){let i=new p(e.x,e.y,e.z);return i.mulA(t),i}static noncollinear(e,t){return!!(e.y*t.z-e.z*t.y||e.z*t.x-e.x*t.z||e.x*t.y-e.y*t.z)}static proj_b_to_plane(e,t,i){let r=e.sub(t.scaleTo(t.dot(e)/t.dot(t)));return i&&r.isZero()?new p(i.x,i.y,i.z):r}static proj_b_to_a(e,t){return t.scaleTo(t.dot(e)/t.dot(t))}static orthoNormalize(e,t){return e=e.getNormal(),e.scale(t.dot(e)),t.subA(e).normalize()}static div(e,t){let i=new p(e.x,e.y,e.z);return i.divA(t),i}static length2(e){return e.length2()}static dot(e,t){return e.dot(t)}toVec4(){return new J(this.x,this.y,this.z,1)}clone(){return new p(this.x,this.y,this.z)}toString(){return`(${this.x},${this.y},${this.z})`}isZero(){return!(this.x||this.y||this.z)}projToVec(e){return e.scaleTo(e.dot(this)/e.dot(e))}equal(e){return this.x===e.x&&this.y===e.y&&this.z===e.z}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}length2(){return this.x*this.x+this.y*this.y+this.z*this.z}getQuat(){return new D(this.x,this.y,this.z)}addA(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}add(e){return new p(this.x+e.x,this.y+e.y,this.z+e.z)}subA(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}sub(e){return new p(this.x-e.x,this.y-e.y,this.z-e.z)}scale(e){return this.x*=e,this.y*=e,this.z*=e,this}scaleTo(e){return new p(this.x*e,this.y*e,this.z*e)}mulA(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}mul(e){return new p(this.x*e.x,this.y*e.y,this.z*e.z)}divA(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}div(e){return new p(this.x/e.x,this.y/e.y,this.z/e.z)}dot(e){return e.x*this.x+e.y*this.y+e.z*this.z}dotArr(e){return e[0]*this.x+e[1]*this.y+e[2]*this.z}cross(e){return new p(this.y*e.z-this.z*e.y,this.z*e.x-this.x*e.z,this.x*e.y-this.y*e.x)}clear(){return this.x=this.y=this.z=0,this}getNormal(){let e=new p;e.copy(this);let t=1/e.length();return e.x*=t,e.y*=t,e.z*=t,e}normal(){let e=new p;e.copy(this);let t=1/e.length();return e.x*=t,e.y*=t,e.z*=t,e}normalNegate(){let e=new p;e.copy(this);let t=-1/e.length();return e.x*=t,e.y*=t,e.z*=t,e}normalNegateScale(e){let t=new p;t.copy(this);let i=-e/t.length();return t.x*=i,t.y*=i,t.z*=i,t}normalScale(e){let t=new p;t.copy(this);let i=e/t.length();return t.x*=i,t.y*=i,t.z*=i,t}normalize(){let e=1/this.length();return this.x*=e,this.y*=e,this.z*=e,this}toVec(){return[this.x,this.y,this.z]}toArray(){return[this.x,this.y,this.z]}distance(e){let t=this.x-e.x,i=this.y-e.y,r=this.z-e.z;return Math.sqrt(t*t+i*i+r*r)}distance2(e){let t=this.x-e.x,i=this.y-e.y,r=this.z-e.z;return t*t+i*i+r*r}set(e,t,i){return this.x=e,this.y=t,this.z=i,this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}negateTo(){return new p(-this.x,-this.y,-this.z)}projToRay(e,t){let i=p.proj_b_to_a(p.sub(this,e),t);return i.addA(e),i}angle(e){return p.angle(this,e)}lerp(e,t){return new p(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t,this.z+(e.z-this.z)*t)}smerp(e,t){let i=1-t;return new p(this.x*t+e.x*i,this.y*t+e.y*i,this.z*t+e.z*i)}static get LERP_DELTA(){return 1e-6}slerp(e,t){let i=new p;if(t<=0)return i.copy(this),i;if(t>=1)return i.copy(e),i;let r,s,n,a,o=this.dot(e);return 1-o>p.LERP_DELTA?(r=Math.acos(o),s=Math.sin(r),n=Math.sin((1-t)*r)/s,a=Math.sin(t*r)/s):(n=1-t,a=t),p.add(this.scaleTo(n),e.scale(a))}getRotationTo(e,t){let i=this.clone(),r=e.clone();i.normalize(),r.normalize();let s=i.dot(r);if(s>=1)return D.IDENTITY.clone();if(s<1e-6-1)if(t.equal(p.ZERO)){let n=p.UNIT_X.cross(i);return n.isZero()&&(n=p.UNIT_Y.cross(i)),n.normalize(),D.axisAngleToQuat(n,Math.PI)}else return D.axisAngleToQuat(t,Math.PI);else{let n=Math.sqrt((1+s)*2),a=1/n,o=i.cross(r),l=new D(o.x*a,o.y*a,o.z*a,n*.5);return l.normalize(),l}}}class V{constructor(e=0,t=0){this.x=e,this.y=t}static get UP(){return new V(0,1)}static get DOWN(){return new V(0,-1)}static get RIGHT(){return new V(1,0)}static get LEFT(){return new V(-1,0)}static get ZERO(){return new V}static add(e,t){const i=new V(e.x,e.y);return i.addA(t),i}static sub(e,t){var i=new V(e.x,e.y);return i.subA(t),i}static scale(e,t){let i=new V(e.x,e.y);return i.scale(t),i}static mul(e,t){let i=new V(e.x,e.y);return i.mulA(t),i}static div(e,t){let i=new V(e.x,e.y);return i.divA(t),i}static proj_b_to_a(e,t){return t.scaleTo(t.dot(e)/t.dot(t))}static angle(e,t){return Math.acos(e.dot(t)/Math.sqrt(e.length2()*t.length2()))}static orthoNormalize(e,t){return e=e.normal(),e.scale(t.dot(e)),t.sub(e).normalize()}toVector3(){return new p(this.x,this.y,0)}clone(){return new V(this.x,this.y)}equal(e){return this.x===e.x&&this.y===e.y}copy(e){return this.x=e.x,this.y=e.y,this}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}length2(){return this.x*this.x+this.y*this.y}addA(e){return this.x+=e.x,this.y+=e.y,this}add(e){return new V(this.x+e.x,this.y+e.y)}subA(e){return this.x-=e.x,this.y-=e.y,this}sub(e){return new V(this.x-e.x,this.y-e.y)}scale(e){return this.x*=e,this.y*=e,this}scaleTo(e){return new V(this.x*e,this.y*e)}mulA(e){return this.x*=e.x,this.y*=e.y,this}mul(e){return new V(this.x*e.x,this.y*e.y)}divA(e){return this.x/=e.x,this.y/=e.y,this}dot(e){return e.x*this.x+e.y*this.y}dotArr(e){return e[0]*this.x+e[1]*this.y}cross(e){return this.x*e.y-this.y*e.x}clear(){return this.x=this.y=0,this}normal(){let e=new V;e.copy(this);let t=1/e.length();return e.x*=t,e.y*=t,e}normalize(){let e=1/this.length();return this.x*=e,this.y*=e,this}toVec(){return[this.x,this.y]}distance(e){return V.sub(this,e).length()}set(e,t){return this.x=e,this.y=t,this}negate(){return this.x=-this.x,this.y=-this.y,this}negateTo(){return new V(-this.x,-this.y)}projToRay(e,t){let i=V.proj_b_to_a(V.sub(this,e),t);return i.add(e),i}angle(e){return V.angle(this,e)}lerp(e,t,i){let r=this.clone();return i<=0?r.copy(e):i>=1?r.copy(t):r=V.add(e,V.sub(t,e).scale(i)),r}static get LERP_DELTA(){return 1e-6}slerp(e,t){let i=new V;if(t<=0)return i.copy(this),i;if(t>=1)return i.copy(e),i;let r,s,n,a,o=this.dot(e);return 1-o>V.LERP_DELTA?(r=Math.acos(o),s=Math.sin(r),n=Math.sin((1-t)*r)/s,a=Math.sin(t*r)/s):(n=1-t,a=t),V.add(this.scale(n),e.scale(a))}}const Or={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4","indianred ":"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};function Yi(c,e){return c??e}function At(c){return c==null}let Qn=0;function Vr(c){let e=c._openglobus_id;return e||(e=c._openglobus_id=++Qn),e}function Ur(c){return typeof c=="string"||c instanceof String}function ot(c,e){let t=Or[c];if(t&&(c=t),c[0]==="#"){let i=/^#?([a-f\d])([a-f\d])([a-f\d])$/i,r=c.replace(i,function(n,a,o,l){return a+a+o+o+l+l}),s=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(r);return s?new J(parseInt(s[1],16)/255,parseInt(s[2],16)/255,parseInt(s[3],16)/255,At(e)?1:e):new J}else{At(e)&&(e=1);let i=c.split(",");return new J(parseInt(i[0].split("(")[1])/255,parseInt(i[1])/255,parseInt(i[2])/255,At(i[3])?e:parseFloat(i[3]))}}function qi(c,e){let t=ot(c,e);return new Float32Array([t.x,t.y,t.z,t.w])}function Wi(c){let e=Or[c];if(e&&(c=e),c[0]==="#"){let t=/^#?([a-f\d])([a-f\d])([a-f\d])$/i,i=c.replace(t,function(s,n,a,o){return n+n+a+a+o+o}),r=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(i);return r?new p(parseInt(r[1],16)/255,parseInt(r[2],16)/255,parseInt(r[3],16)/255):new p}else{let t=c.split(",");return new p(parseInt(t[0].split("(")[1])/255,parseInt(t[1])/255,parseInt(t[2])/255)}}function Et(c,e){return c.replace(/{[^{}]+}/g,function(t){return e[t.replace(/[{}]+/g,"")]||""})}function Gr(c){let e=document.createElement("div");e.innerHTML=c;let t=[];for(let i=0;i<e.childNodes.length;i++)t.push(e.childNodes[i]),e.removeChild(e.childNodes[i]);return t}function Jn(c,e=""){return c?c.trim():e}function lt(c,e){if(c){if(c instanceof p)return c.clone();if(c instanceof Array)return p.fromVec(c);if(c instanceof V)return new p(c.x,c.y,0)}else if(e)return e;return new p}function qe(c,e){if(c){if(Ur(c))return ot(c);if(c instanceof Array)return J.fromVec(c);if(c instanceof J)return c.clone()}else if(e)return e;return new J(1,1,1,1)}function Se(c,e){if(c){if(Ur(c))return Wi(c);if(c instanceof Array)return p.fromVec(c);if(c instanceof p)return c.clone()}else if(e)return e;return new p(1,1,1)}function jr(c,e){if(c){if(c instanceof Array)return new U(Xi(c[0]),Xi(c[1]));if(c instanceof U)return c.clone()}else if(e)return e;return new U}function Xi(c,e){if(c){if(c instanceof Array)return new B(c[0],c[1],c[2]);if(c instanceof B)return c.clone()}else if(e)return e;return new B}function ea(c,e){let t=0,i=c.length-1;for(;t<=i;){let r=Math.floor((t+i)*.5);if(Math.abs(c[r]-e)<.001)return r;c[r]<e?t=r+1:i=r-1}return-1}function Zi(c,e,t){let i=0,r=c.length-1;for(;i<=r;){let s=r+i>>1,n=t(e,c[s],s);if(n>0)i=s+1;else if(n<0)r=s-1;else return s}return-i-1}function ta(c,e,t){let i=Zi(c,e,t);return i<0&&(i=~i),c.splice(i,0,e),i}function ia(c,e,t,i,r=!1){let s=new B(e.lon-c.lon,e.lat-c.lat),n=new B(i.lon-t.lon,i.lat-t.lat),a=-s.lat,o=+s.lon,l=-(a*c.lon+o*c.lat),h=-n.lat,d=+n.lon,f=-(h*t.lon+d*t.lat),u=h*c.lon+d*c.lat+f,g=h*e.lon+d*e.lat+f,_=a*t.lon+o*t.lat+l,m=a*i.lon+o*i.lat+l;if(r&&(u*g>0||_*m>0))return;let v=u/(u-g);return new B(c.lon+v*s.lon,c.lat+v*s.lat)}function Yr(c,e,t=!1){let i,r=0;return function(){const s=arguments;r?(t&&clearTimeout(i),i=setTimeout(()=>{Date.now()-r>=e&&(c.apply(null,s),r=Date.now())},e-(Date.now()-r))):(c.apply(null,s),r=Date.now())}}function Z(c,e){let t=new c.constructor(c.length+e.length);return t.set(c,0),t.set(e,c.length),t}function ve(c=[],e=[]){if(ArrayBuffer.isView(c))return Z(c,e);for(let t=0;t<e.length;t++)c.push(e[t]);return c}function X(c,e=Float32Array){if(ArrayBuffer.isView(c))return c;{const t=new e(c.length);return t.set(c,0),t}}function Nt(c){return ArrayBuffer.isView(c)?Array.from(c):c}function Te(c,e,t,i){if(ArrayBuffer.isView(c))return e<0&&(t=Math.abs(e),e+=c.length),ee(c,e,t,i);{let r;return e<0?r=c.splice(e):r=c.splice(e,t),i&&(i.result=r),c}}function ee(c,e,t,i){if(c.length===0)return c;const r=c.length-t,s=new c.constructor(r);return s.set(c.subarray(0,e)),s.set(c.subarray(e+t),e),i&&(i.result=c.subarray(e,e+t)),s}function qr(c,e,t,i,r){const s=r+1,n=t+s,a=i+s;let o=new Float64Array(s*s*3),l=0;for(let h=t;h<n;h++)for(let d=i;d<a;d++){let f=3*(h*(e+1)+d);o[l++]=c[f],o[l++]=c[f+1],o[l++]=c[f+2]}return o}function ra(c,e,t,i,r){const s=r+1,n=t+s,a=i+s;let o=new Float32Array(s*s*3),l=0;for(let h=t;h<n;h++)for(let d=i;d<a;d++){let f=3*(h*(e+1)+d);o[l++]=c[f],o[l++]=c[f+1],o[l++]=c[f+2]}return o}function Wr(c,e,t,i,r,s,n,a,o,l,h,d,f){const u=s+a+1,g=n+a+1;r+=1;let _=0,m=0;for(let v=s;v<u;v++)for(let b=n;b<g;b++){let y=v*r+b,w=3*y,x=c[w],T=c[w+1],A=c[w+2];!i||i[y]===0?(x<d.xmin&&(d.xmin=x),x>d.xmax&&(d.xmax=x),T<d.ymin&&(d.ymin=T),T>d.ymax&&(d.ymax=T),A<d.zmin&&(d.zmin=A),A>d.zmax&&(d.zmax=A)):f[m]=1,m++,o[_]=x,h[_]=t[w],l[_++]=e[w],o[_]=T,h[_]=t[w+1],l[_++]=e[w+1],o[_]=A,h[_]=t[w+2],l[_++]=e[w+2]}}function Xr(c){return c.map(e=>Array.isArray(e)?Xr(e):e)}async function sa(c){return new Promise(e=>{const t=new Image;return t.addEventListener("load",()=>{e(t)}),t.src=c,t.crossOrigin="",t})}function na(c){let t=new URLSearchParams(location.search).get(c);if(t)return Number(t)}const aa=.001,oa=1e3,$i=60,la=1/$i,_i=3600,ha=1/_i,Zr=12*_i,Ht=86400,$r=1/864e5,Ki=1/Ht,Kr=2451545;function ca(c,e,t){let i=(e-14)/12|0,r=c+4800+i;return(1461*r/4|0)+(367*(e-2-12*i)/12|0)-(3*((r+100)/100|0)/4|0)+t-32075}function Qr(c){let e=ca(c.getUTCFullYear(),c.getUTCMonth()+1,c.getUTCDate()),t=c.getUTCHours()-12;t<0&&(t+=24);let i=c.getUTCSeconds()+t*_i+c.getUTCMinutes()*$i+c.getUTCMilliseconds()*aa;i>=Zr&&e--;let r=i*Ki|0;return e+=r,i-=Ht*r,i<0&&(e--,i+=Ht),e+i*Ki}function da(c){let e=_a,t=Zi(e,c,function(r,s){return r-s.jd});t<0&&(t=~t),t>=e.length&&(t=e.length-1);let i=e[t].leapSeconds;return t!==0&&(e[t].jd-c)*Ht>i&&(i=e[t-1].leapSeconds),c+i*Ki}function fa(c){let e=c|0,t=(c-e)*Ht;t>=Zr&&e++;let i=e+68569|0,r=4*i/146097|0;i=i-((146097*r+3)/4|0)|0;let s=4e3*(i+1)/1461001|0;i=i-(1461*s/4|0)+31|0;let n=80*i/2447|0,a=i-(2447*n/80|0)|0;i=n/11|0;let o=n+2-12*i|0,l=100*(r-49)+s+i|0,h=t*ha|0,d=t-h*_i,f=d*la|0;d=d-f*$i;let u=d|0,g=(d-u)*oa|0;return h+=12,h>23&&(h-=24),new Date(Date.UTC(l,o-1,a,h,f,u,g))}function ua(c,e){return c+e*$r}function Y(c,e){return{jd:c,leapSeconds:e}}const _a=[Y(24413175e-1,10),Y(24414995e-1,11),Y(24416835e-1,12),Y(24420485e-1,13),Y(24424135e-1,14),Y(24427785e-1,15),Y(24431445e-1,16),Y(24435095e-1,17),Y(24438745e-1,18),Y(24442395e-1,19),Y(24447865e-1,20),Y(24451515e-1,21),Y(24455165e-1,22),Y(24462475e-1,23),Y(24471615e-1,24),Y(24478925e-1,25),Y(24482575e-1,26),Y(24488045e-1,27),Y(24491695e-1,28),Y(24495345e-1,29),Y(24500835e-1,30),Y(24506305e-1,31),Y(24511795e-1,32),Y(24537365e-1,33),Y(24548325e-1,34),Y(24561095e-1,35),Y(24572045e-1,36)];da(Kr);class ga{constructor(e){this.vertices=[new p,new p,new p,new p,new p,new p,new p,new p],e&&this.setFromBoundsArr(e)}copy(e){for(let t=0,i=this.vertices.length;t<i;t++)this.vertices[t].copy(e.vertices[t])}setFromBoundsArr(e){let t=e[0],i=e[3],r=e[1],s=e[4],n=e[2],a=e[5],o=this.vertices;o[0].set(t,r,n),o[1].set(i,r,n),o[2].set(i,r,a),o[3].set(t,r,a),o[4].set(t,s,n),o[5].set(i,s,n),o[6].set(i,s,a),o[7].set(t,s,a)}setFromExtent(e,t){this.setFromBoundsArr(t.getCartesianBounds(e))}}class Ze{constructor(e=0,t){this.radius=e,this.center=t?t.clone():new p}setFromBounds(e){let t=new p(e[0],e[1],e[2]);this.center.set(t.x+(e[3]-t.x)*.5,t.y+(e[3]-t.y)*.5,t.z+(e[5]-t.z)*.5),this.radius=this.center.distance(t)}setFromExtent(e,t){this.setFromBounds(t.getCartesianBounds(e))}}function We(c,e){return new Ot(c,e)}class Ot{constructor(e,t){this.__id=Ot.__counter__++,this._eventNames=[],e&&this.registerNames(e),this._sender=t||this,this._stopPropagation=!1,this._stampCache={}}bindSender(e){this._sender=e||this}registerNames(e){for(let t=0;t<e.length;t++)this[e[t]]={active:!0,handlers:[]},this._eventNames.push(e[t]);return this}_getStamp(e,t,i){return`${e}_${t}_${i}`}_stamp(e,t){let i=Vr(t),r=this._getStamp(e,this.__id,i);return this._stampCache[r]?!1:(this._stampCache[r]=i,!0)}on(e,t,i,r=0){if(this._stamp(e,t)&&this[e]){let s=t.bind(i||this._sender);s._openglobus_id=t._openglobus_id,s._openglobus_priority=r,ta(this[e].handlers,s,(n,a)=>(a._openglobus_priority||0)-(n._openglobus_priority||0))}}off(e,t){if(t){let i=this._getStamp(e,this.__id,t._openglobus_id);if(t._openglobus_id&&this._stampCache[i]){let r=this[e].handlers,s=r.length,n=-1;for(;s--;)if(r[s]._openglobus_id===t._openglobus_id){n=s;break}n!==-1&&(r.splice(n,1),this._stampCache[i]=void 0,delete this._stampCache[i])}}}dispatch(e,...t){let i=!0;if(e&&e.active&&!this._stopPropagation){let r=e.handlers.slice(0),s=r.length;for(;s--;)r[s](...t)===!1&&(i=!1)}return this._stopPropagation=!1,i}stopPropagation(){this._stopPropagation=!0}clear(){for(let e=0;e<this._eventNames.length;e++){let t=this[this._eventNames[e]];t.handlers.length=0,t.handlers=[]}this._eventNames.length=0,this._eventNames=[]}}Ot.__counter__=0;const ma=["render"];class Pe{constructor(e={}){this.__id=Pe.__counter__++,this.events=We(ma),this.model=e.model||null,this.template=e.template||"",this.parent=e.parent||null,this._classList=e.classList||[],this.el=null}static getHTML(e,t){return Et(e,t)}static parseHTML(e){return Gr(e)}static insertAfter(e,t){Array.isArray(e)||(e=[e]);for(let i=0;i<e.length;i++)t.parentNode&&t.parentNode.insertBefore(e[i],t.nextSibling);return e}static insertBefore(e,t){Array.isArray(e)||(e=[e]);for(let i=0;i<e.length;i++)t.parentNode&&t.parentNode.insertBefore(e[i],t);return e}insertBefore(e){this.el||this.render(),this.el&&(e instanceof HTMLElement&&e.parentNode&&Pe.insertBefore(this.el,e),e instanceof Pe&&e.el&&e.el.parentNode&&Pe.insertBefore(this.el,e.el))}insertAfter(e){this.el||this.render(),this.el&&(e instanceof HTMLElement&&e.parentNode&&Pe.insertAfter(this.el,e),e instanceof Pe&&e.el&&e.el.parentNode&&Pe.insertAfter(this.el,e.el))}isEqual(e){return e.__id===this.__id}appendTo(e,t=!1,i=!1){return e&&(this.el||(this.beforeRender(e),this.render()),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el),t&&(e.innerHTML=""),this.el&&(i?e.childNodes[0]?Pe.insertBefore(this.el,e.childNodes[0]):e.appendChild(this.el):e.appendChild(this.el)),this.afterRender(e)),this}afterRender(e){}beforeRender(e){}stopPropagation(){this.events.stopPropagation()}renderTemplate(e){return Pe.parseHTML(Pe.getHTML(this.template,e||{}))[0]}render(e){this.el=this.renderTemplate(e);for(let t=0,i=this._classList.length;t<i;t++)this.el.classList.add(this._classList[t]);return this.events.dispatch(this.events.render,this),this}select(e){return this.el?this.el.querySelector(e):null}selectRemove(e){if(this.el){let t=this.select(e);if(t&&t.parentNode)return t.parentNode.removeChild(t),t}}selectAll(e,t){if(this.el){const i=this.el.querySelectorAll(e);if(t)for(let r=0,s=i.length;r<s;r++)t(i[r],r);return i}}remove(){this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)}}Pe.__counter__=0;const pa=`<div class="og-button" title="{title}">
|
|
1
|
+
(function(je,Me){typeof exports=="object"&&typeof module<"u"?Me(exports,require("react")):typeof define=="function"&&define.amd?define(["exports","react"],Me):(je=typeof globalThis<"u"?globalThis:je||self,Me(je["@openglobus/openglobus-react"]={},je.React))})(this,function(je,Me){"use strict";const Ni=2*Math.PI,nt=2147483647,fe=549755748352,pe=-fe,O=Math.PI/180,we=180/Math.PI,hi=.5*O,Hn=Math.sqrt(.5),On=.1,Ye=1e-10,Rr=1e-12,Sr=1e-14,Vn=1e-15;function Hi(c=0,e=1){return Math.floor(Math.random()*(e-c))+c}function Oi(c,e){return(c%e+e)%e}function Ir(c){const e=Oi(c,Ni);return Math.abs(e)<Sr&&Math.abs(c)>Sr?Ni:e}function zr(c,e){return e<c?0:1}function ci(c){const e=Math.abs(c);return e-Math.floor(e)}function Un(c){return Math.pow(2,c)}function Gn(c,e,t){return t+c*(e-t)}function Fr(c){return c-Math.floor(c/360)*360}const jn=Math.PI*.5,kr=180/Math.PI,Yn=kr*2,Vi=Math.PI/360,qn=kr*jn;class B{constructor(e=0,t=0,i=0){this.lon=0,this.lat=0,this.height=0,this.lon=e,this.lat=t,this.height=i}isZero(){return this.lon===0&&this.lat===0&&this.height===0}static join(e){let t=[];for(let i=0;i<e.length;i++){let r=e[i];t[i]=new B(r[0],r[1],r[2])}return t}static createFromArray(e){return new B(e[0],e[1],e[2])}static toArray(e){return[e.lon,e.lat,e.height]}toArray(){return B.toArray(this)}static forwardMercator(e,t,i){return new B(e*Gi,Math.log(Math.tan((90+t)*Vi))*kt,i)}static forwardMercatorRes(e,t){return t.lon=e.lon*Gi,t.lat=Math.log(Math.tan((90+e.lat)*Vi))*kt,t.height=e.height,t}static inverseMercator(e,t,i=0){return new B(e*Xn,Yn*Math.atan(Math.exp(t*Dr))-qn,i)}set(e=0,t=0,i=0){return this.lon=e,this.lat=t,this.height=i,this}copy(e){return this.lon=e.lon,this.lat=e.lat,this.height=e.height,this}clone(){return new B(this.lon,this.lat,this.height)}forwardMercator(){return B.forwardMercator(this.lon,this.lat,this.height)}forwardMercatorEPS01(){let e=this.lat;return e>89.9?e=89.9:e<-89.9&&(e=-89.9),new B(this.lon*Gi,Math.log(Math.tan((90+e)*Vi))*kt)}inverseMercator(){return B.inverseMercator(this.lon,this.lat,this.height)}equal(e){return e.height?this.lon===e.lon&&this.lat===e.lat&&this.height===e.height:this.lon===e.lon&&this.lat===e.lat}}const re=2003750834e-2,Ui=re*2,Dr=Math.PI/re,kt=re/Math.PI,Wn=Math.PI*.5,Gi=re/180,Xn=180/re,Nr=Math.PI/360,Zn=180/Math.PI,ji=2*re,di=1/ji;function Hr(c){return new B(c.lon*re/180,Math.log(Math.tan((90+c.lat)*Nr))*kt,c.height)}function fi(c){return c*re/180}function ui(c){return Math.log(Math.tan((90+c)*Nr))*kt}function $n(c){return Zn*(2*Math.atan(Math.exp(c*Dr))-Wn)}function Kn(c,e,t){let i=Ui/Math.pow(2,t),r=new B(-re+c*i,re-e*i-i);return new U(r,new B(r.lon+i,r.lat+i))}const ce=$n(re),Re=-ce;class U{constructor(e=new B,t=new B){this.southWest=e,this.northEast=t}static createFromArray(e){return new U(new B(e[0],e[1]),new B(e[2],e[3]))}static createByCoordinates(e){let t=fe,i=pe,r=fe,s=pe;for(let n=0;n<e.length;n++){const a=e[n];a.lon<t&&(t=a.lon),a.lon>i&&(i=a.lon),a.lat<r&&(r=a.lat),a.lat>s&&(s=a.lat)}return new U(new B(t,r),new B(i,s))}static createByCoordinatesArr(e){let t=fe,i=pe,r=fe,s=pe;for(let n=0;n<e.length;n++){const a=e[n];a[0]<t&&(t=a[0]),a[0]>i&&(i=a[0]),a[1]<r&&(r=a[1]),a[1]>s&&(s=a[1])}return new U(new B(t,r),new B(i,s))}static fromTile(e,t,i,r=ji,s=ji){const n=Math.pow(2,i),a=Math.pow(2,i),o=r/a,l=s/n,h=-r*.5+e*o,d=s*.5-t*l,f=d-l,u=h+o;return new U(new B(h,f),new B(u,d))}setByCoordinates(e){let t=fe,i=pe,r=fe,s=pe;for(let n=0;n<e.length;n++){const a=e[n];a.lon<t&&(t=a.lon),a.lon>i&&(i=a.lon),a.lat<r&&(r=a.lat),a.lat>s&&(s=a.lat)}return this.southWest.lon=t,this.southWest.lat=r,this.northEast.lon=i,this.northEast.lat=s,this}isInside(e){const t=this.southWest,i=this.northEast;return e.lon>=t.lon&&e.lon<=i.lon&&e.lat>=t.lat&&e.lat<=i.lat}overlaps(e){const t=this.southWest,i=this.northEast;return t.lon<=e.northEast.lon&&i.lon>=e.southWest.lon&&t.lat<=e.northEast.lat&&i.lat>=e.southWest.lat}getWidth(){return this.northEast.lon-this.southWest.lon}getHeight(){return this.northEast.lat-this.southWest.lat}clone(){return new U(this.southWest.clone(),this.northEast.clone())}getCenter(){const e=this.southWest,t=this.northEast;return new B(e.lon+(t.lon-e.lon)*.5,e.lat+(t.lat-e.lat)*.5)}getNorthWest(){return new B(this.southWest.lon,this.northEast.lat)}getNorthEast(){return new B(this.northEast.lon,this.northEast.lat)}getSouthWest(){return new B(this.southWest.lon,this.southWest.lat)}getSouthEast(){return new B(this.northEast.lon,this.southWest.lat)}getNorth(){return this.northEast.lat}getEast(){return this.northEast.lon}getWest(){return this.southWest.lon}getSouth(){return this.southWest.lat}equals(e){return this.southWest.lon===e.southWest.lon&&this.southWest.lat===e.southWest.lat&&this.northEast.lon===e.northEast.lon&&this.northEast.lat===e.northEast.lat}forwardMercator(){return new U(this.southWest.forwardMercator(),this.northEast.forwardMercator())}inverseMercator(){return new U(this.southWest.inverseMercator(),this.northEast.inverseMercator())}getCartesianBounds(e){let t=fe,i=pe,r=fe,s=pe,n=fe,a=pe;const o=[new B(this.southWest.lon,this.southWest.lat),new B(this.southWest.lon,this.northEast.lat),new B(this.northEast.lon,this.northEast.lat),new B(this.northEast.lon,this.southWest.lat)];for(let l=0;l<o.length;l++){const h=e.lonLatToCartesian(o[l]),d=h.x,f=h.y,u=h.z;d<t&&(t=d),d>i&&(i=d),f<r&&(r=f),f>s&&(s=f),u<n&&(n=u),u>a&&(a=u)}return[t,r,n,i,s,a]}toString(){return`[${this.southWest.lon.toFixed(5)}, ${this.southWest.lat.toFixed(5)}, ${this.northEast.lon.toFixed(5)}, ${this.northEast.lat.toFixed(5)}]`}}class at{constructor(){this._m=[0,0,0,0,0,0,0,0,0]}set(e){return this._m[0]=e[0],this._m[1]=e[1],this._m[2]=e[2],this._m[3]=e[3],this._m[4]=e[4],this._m[5]=e[5],this._m[6]=e[6],this._m[7]=e[7],this._m[8]=e[8],this}clone(){let e=new at;return e.set(this._m),e}copy(e){return this.set(e._m)}transposeTo(){let e=new at,t=this._m;return e._m[0]=t[0],e._m[1]=t[3],e._m[2]=t[6],e._m[3]=t[1],e._m[4]=t[4],e._m[5]=t[7],e._m[6]=t[2],e._m[7]=t[5],e._m[8]=t[8],e}setIdentity(){return this._m[0]=1,this._m[1]=0,this._m[2]=0,this._m[3]=0,this._m[4]=1,this._m[5]=0,this._m[6]=0,this._m[7]=0,this._m[8]=1,this}mulVec(e){let t=e.x,i=e.y,r=e.z,s=this._m;return new p(s[0]*t+s[3]*i+s[6]*r,s[1]*t+s[4]*i+s[7]*r,s[2]*t+s[5]*i+s[8]*r)}toMatrix4(){let e=new ne,t=e._m,i=this._m;return t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=0,t[4]=i[3],t[5]=i[4],t[6]=i[5],t[7]=0,t[8]=i[6],t[9]=i[7],t[10]=i[8],t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,e}}class J{constructor(e=0,t=0,i=0,r=0){this.x=e,this.y=t,this.z=i,this.w=r}static get identity(){return new J(0,0,0,1)}static fromVec(e){return new J(e[0],e[1],e[2],e[3])}toVec3(){return new p(this.x,this.y,this.z)}clone(){return new J(this.x,this.y,this.z,this.w)}equal(e){return this.x===e.x&&this.y===e.y&&this.z===e.z&&this.w===e.w}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w,this}toArray(){return[this.x,this.y,this.z,this.w]}toArray3(){return[this.x,this.y,this.z]}set(e,t,i,r){return this.x=e,this.y=t,this.z=i,this.w=r,this}addA(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}subA(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}scale(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}affinity(){let e=1/this.w;return this.x*=e,this.y*=e,this.z*=e,this.w=1,this}scaleTo(e){return new J(this.x*e,this.y*e,this.z*e,this.w*e)}getStep(e){return new J(this.x<e?0:1,this.y<e?0:1,this.z<e?0:1,this.w<e?0:1)}getFrac(e){return new J(ci(e.x),ci(e.y),ci(e.z),ci(e.w))}dot(e){return e.x*this.x+e.y*this.y+e.z*this.z+e.w*this.w}isZero(){return!(this.x||this.y||this.z||this.w)}}class ne{constructor(){this._m=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}static identity(){let e=new ne;return e._m[0]=1,e._m[1]=0,e._m[2]=0,e._m[3]=0,e._m[4]=0,e._m[5]=1,e._m[6]=0,e._m[7]=0,e._m[8]=0,e._m[9]=0,e._m[10]=1,e._m[11]=0,e._m[12]=0,e._m[13]=0,e._m[14]=0,e._m[15]=1,e}set(e){return this._m[0]=e[0],this._m[1]=e[1],this._m[2]=e[2],this._m[3]=e[3],this._m[4]=e[4],this._m[5]=e[5],this._m[6]=e[6],this._m[7]=e[7],this._m[8]=e[8],this._m[9]=e[9],this._m[10]=e[10],this._m[11]=e[11],this._m[12]=e[12],this._m[13]=e[13],this._m[14]=e[14],this._m[15]=e[15],this}clone(){let e=new ne;return e.set(this._m),e}copy(e){return this.set(e._m)}toMatrix3(){let e=new at,t=this._m,i=e._m;return i[0]=t[0],i[1]=t[1],i[2]=t[2],i[3]=t[4],i[4]=t[5],i[5]=t[6],i[6]=t[8],i[7]=t[9],i[8]=t[10],e}mulVec3(e){let t=e.x,i=e.y,r=e.z;return new p(this._m[0]*t+this._m[4]*i+this._m[8]*r+this._m[12],this._m[1]*t+this._m[5]*i+this._m[9]*r+this._m[13],this._m[2]*t+this._m[6]*i+this._m[10]*r+this._m[14])}mulVec4(e){let t=e.x,i=e.y,r=e.z,s=e.w;return new J(this._m[0]*t+this._m[4]*i+this._m[8]*r+this._m[12]*s,this._m[1]*t+this._m[5]*i+this._m[9]*r+this._m[13]*s,this._m[2]*t+this._m[6]*i+this._m[10]*r+this._m[14]*s,this._m[3]*t+this._m[7]*i+this._m[11]*r+this._m[15]*s)}toInverseMatrix3(){let e=this._m,t=e[0],i=e[1],r=e[2],s=e[4],n=e[5],a=e[6],o=e[8],l=e[9],h=e[10],d=h*n-a*l,f=-h*s+a*o,u=l*s-n*o,g=t*d+i*f+r*u;if(!g)return;g=1/g;let _=new at;return _._m[0]=d*g,_._m[1]=(-h*i+r*l)*g,_._m[2]=(a*i-r*n)*g,_._m[3]=f*g,_._m[4]=(h*t-r*o)*g,_._m[5]=(-a*t+r*s)*g,_._m[6]=u*g,_._m[7]=(-l*t+i*o)*g,_._m[8]=(n*t-i*s)*g,_}inverseTo(e=new ne){let t=this._m[0],i=this._m[1],r=this._m[2],s=this._m[3],n=this._m[4],a=this._m[5],o=this._m[6],l=this._m[7],h=this._m[8],d=this._m[9],f=this._m[10],u=this._m[11],g=this._m[12],_=this._m[13],m=this._m[14],v=this._m[15],b=t*a-i*n,y=t*o-r*n,w=t*l-s*n,x=i*o-r*a,T=i*l-s*a,A=r*l-s*o,E=h*_-d*g,C=h*m-f*g,P=h*v-u*g,I=d*m-f*_,k=d*v-u*_,z=f*v-u*m,L=1/(b*z-y*k+w*I+x*P-T*C+A*E);return e._m[0]=(a*z-o*k+l*I)*L,e._m[1]=(-i*z+r*k-s*I)*L,e._m[2]=(_*A-m*T+v*x)*L,e._m[3]=(-d*A+f*T-u*x)*L,e._m[4]=(-n*z+o*P-l*C)*L,e._m[5]=(t*z-r*P+s*C)*L,e._m[6]=(-g*A+m*w-v*y)*L,e._m[7]=(h*A-f*w+u*y)*L,e._m[8]=(n*k-a*P+l*E)*L,e._m[9]=(-t*k+i*P-s*E)*L,e._m[10]=(g*T-_*w+v*b)*L,e._m[11]=(-h*T+d*w-u*b)*L,e._m[12]=(-n*I+a*C-o*E)*L,e._m[13]=(t*I-i*C+r*E)*L,e._m[14]=(-g*x+_*y-m*b)*L,e._m[15]=(h*x-d*y+f*b)*L,e}transposeTo(){let e=new ne;return e._m[0]=this._m[0],e._m[1]=this._m[4],e._m[2]=this._m[8],e._m[3]=this._m[12],e._m[4]=this._m[1],e._m[5]=this._m[5],e._m[6]=this._m[9],e._m[7]=this._m[13],e._m[8]=this._m[2],e._m[9]=this._m[6],e._m[10]=this._m[10],e._m[11]=this._m[14],e._m[12]=this._m[3],e._m[13]=this._m[7],e._m[14]=this._m[11],e._m[15]=this._m[15],e}setIdentity(){return this._m[0]=1,this._m[1]=0,this._m[2]=0,this._m[3]=0,this._m[4]=0,this._m[5]=1,this._m[6]=0,this._m[7]=0,this._m[8]=0,this._m[9]=0,this._m[10]=1,this._m[11]=0,this._m[12]=0,this._m[13]=0,this._m[14]=0,this._m[15]=1,this}mul(e){let t=this._m[0],i=this._m[1],r=this._m[2],s=this._m[3],n=this._m[4],a=this._m[5],o=this._m[6],l=this._m[7],h=this._m[8],d=this._m[9],f=this._m[10],u=this._m[11],g=this._m[12],_=this._m[13],m=this._m[14],v=this._m[15],b=e._m[0],y=e._m[1],w=e._m[2],x=e._m[3],T=e._m[4],A=e._m[5],E=e._m[6],C=e._m[7],P=e._m[8],I=e._m[9],k=e._m[10],z=e._m[11],L=e._m[12],S=e._m[13],F=e._m[14],R=e._m[15],M=new ne;return M._m[0]=b*t+y*n+w*h+x*g,M._m[1]=b*i+y*a+w*d+x*_,M._m[2]=b*r+y*o+w*f+x*m,M._m[3]=b*s+y*l+w*u+x*v,M._m[4]=T*t+A*n+E*h+C*g,M._m[5]=T*i+A*a+E*d+C*_,M._m[6]=T*r+A*o+E*f+C*m,M._m[7]=T*s+A*l+E*u+C*v,M._m[8]=P*t+I*n+k*h+z*g,M._m[9]=P*i+I*a+k*d+z*_,M._m[10]=P*r+I*o+k*f+z*m,M._m[11]=P*s+I*l+k*u+z*v,M._m[12]=L*t+S*n+F*h+R*g,M._m[13]=L*i+S*a+F*d+R*_,M._m[14]=L*r+S*o+F*f+R*m,M._m[15]=L*s+S*l+F*u+R*v,M}translate(e){let t=e.x,i=e.y,r=e.z,s=this._m;return s[12]=s[0]*t+s[4]*i+s[8]*r+s[12],s[13]=s[1]*t+s[5]*i+s[9]*r+s[13],s[14]=s[2]*t+s[6]*i+s[10]*r+s[14],s[15]=s[3]*t+s[7]*i+s[11]*r+s[15],this}translateToPosition(e){let t=this._m;return t[12]=e.x,t[13]=e.y,t[14]=e.z,this}rotate(e,t){let i=Math.cos(t),r=Math.sin(t),s=new ne,n=s._m;return n[0]=i+(1-i)*e.x*e.x,n[1]=(1-i)*e.y*e.x-r*e.z,n[2]=(1-i)*e.z*e.x+r*e.y,n[3]=0,n[4]=(1-i)*e.x*e.y+r*e.z,n[5]=i+(1-i)*e.y*e.y,n[6]=(1-i)*e.z*e.y-r*e.x,n[7]=0,n[8]=(1-i)*e.x*e.z-r*e.y,n[9]=(1-i)*e.y*e.z+r*e.x,n[10]=i+(1-i)*e.z*e.z,n[11]=0,n[12]=0,n[13]=0,n[14]=0,n[15]=1,this.mul(s)}setRotation(e,t){let i=Math.cos(t),r=Math.sin(t),s=this._m;return s[0]=i+(1-i)*e.x*e.x,s[1]=(1-i)*e.y*e.x-r*e.z,s[2]=(1-i)*e.z*e.x+r*e.y,s[3]=0,s[4]=(1-i)*e.x*e.y+r*e.z,s[5]=i+(1-i)*e.y*e.y,s[6]=(1-i)*e.z*e.y-r*e.x,s[7]=0,s[8]=(1-i)*e.x*e.z-r*e.y,s[9]=(1-i)*e.y*e.z+r*e.x,s[10]=i+(1-i)*e.z*e.z,s[11]=0,s[12]=0,s[13]=0,s[14]=0,s[15]=1,this}rotateBetweenVectors(e,t){return D.getRotationBetweenVectors(e,t).getMat4()}scale(e){let t=this._m;return t[0]=t[0]*e.x,t[1]=t[1]*e.x,t[2]=t[2]*e.x,t[3]=t[3]*e.x,t[4]=t[4]*e.y,t[5]=t[5]*e.y,t[6]=t[6]*e.y,t[7]=t[7]*e.y,t[8]=t[8]*e.z,t[9]=t[9]*e.z,t[10]=t[10]*e.z,t[11]=t[11]*e.z,this}setPerspective(e,t,i,r,s,n){let a=t-e,o=r-i,l=n-s;return this._m[0]=s*2/a,this._m[1]=0,this._m[2]=0,this._m[3]=0,this._m[4]=0,this._m[5]=s*2/o,this._m[6]=0,this._m[7]=0,this._m[8]=(t+e)/a,this._m[9]=(r+i)/o,this._m[10]=-(n+s)/l,this._m[11]=-1,this._m[12]=0,this._m[13]=0,this._m[14]=-(n*s*2)/l,this._m[15]=0,this}setOrtho(e,t,i,r,s,n){let a=1/(e-t),o=1/(i-r),l=1/(s-n),h=this._m;return h[0]=-2*a,h[1]=0,h[2]=0,h[3]=0,h[4]=0,h[5]=-2*o,h[6]=0,h[7]=0,h[8]=0,h[9]=0,h[10]=2*l,h[11]=0,h[12]=(e+t)*a,h[13]=(r+i)*o,h[14]=(n+s)*l,h[15]=1,this}eulerToMatrix(e,t,i){let r=Math.cos(e),s=Math.sin(e),n=Math.cos(t),a=Math.sin(t),o=Math.cos(i),l=Math.sin(i),h=r*a,d=s*a,f=this._m;return f[0]=n*o,f[1]=-n*l,f[2]=-a,f[4]=-d*o+r*l,f[5]=d*l+r*o,f[6]=-s*n,f[8]=h*o+s*l,f[9]=-h*l+s*o,f[10]=r*n,f[3]=f[7]=f[11]=f[12]=f[13]=f[14]=0,f[15]=1,this}}class D{constructor(e=0,t=0,i=0,r=0){this.x=e,this.y=t,this.z=i,this.w=r}static get IDENTITY(){return new D(0,0,0,1)}static xRotation(e){return e*=.5,new D(Math.sin(e),0,0,Math.cos(e))}static yRotation(e){return e*=.5,new D(0,Math.sin(e),0,Math.cos(e))}static zRotation(e){return e*=.5,new D(0,0,Math.sin(e),Math.cos(e))}static axisAngleToQuat(e,t=0){let i=e.getNormal(),r=t*.5,s=Math.sin(r);return new D(i.x*s,i.y*s,i.z*s,Math.cos(r))}static getLookRotation(e,t){let i=e.getNormal().negate(),r=t.cross(i).normalize(),s=i.cross(r),n=1+r.x+s.y+i.z;if(n>1e-6){let o=1/(2*Math.sqrt(n));return new D((i.y-s.z)*o,(r.z-i.x)*o,(s.x-r.y)*o,.25/o)}if(r.x>s.y&&r.x>i.z){let o=1/(2*Math.sqrt(1+r.x-s.y-i.z));return new D(.25/o,(s.x+r.y)*o,(r.z+i.x)*o,(i.y-s.z)*o)}if(s.y>i.z){let o=1/(2*Math.sqrt(1+s.y-r.x-i.z));return new D((s.x+r.y)*o,.25/o,(i.y+s.z)*o,(r.z-i.x)*o)}let a=1/(2*Math.sqrt(1+i.z-r.x-s.y));return new D((r.z+i.x)*a,(i.y+s.z)*a,.25/a,(s.x-r.y)*a)}static getLookAtSourceDest(e,t){let i=t.subA(e).normalize(),r=p.FORWARD.dot(i);if(Math.abs(r- -1)<1e-6)return D.axisAngleToQuat(p.UP,Math.PI);if(Math.abs(r-1)<1e-6)return new D(0,0,0,1);let s=Math.acos(r),n=p.FORWARD.cross(i).normalize();return D.axisAngleToQuat(n,s)}static getRotationBetweenVectors(e,t){let i=e.cross(t);return new D(i.x,i.y,i.z,1+e.dot(t)).normalize()}static getRotationBetweenVectorsRes(e,t,i){let r=e.cross(t);return i.set(r.x,r.y,r.z,1+e.dot(t)),i.normalize()}static getRotationBetweenVectorsUp(e,t,i){let r=e.dot(t);if(Math.abs(r+1)<1e-6)return D.axisAngleToQuat(i,Math.PI);if(Math.abs(r-1)<1e-6)return new D(0,0,0,1);let s=Math.acos(r),n=e.cross(t).normalize();return D.axisAngleToQuat(n,s)}isZero(){return this.x===0&&this.y===0&&this.z===0&&this.w===0}clear(){return this.x=this.y=this.z=this.w=0,this}set(e,t,i,r){return this.x=e,this.y=t,this.z=i,this.w=r,this}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w,this}setIdentity(){return this.x=0,this.y=0,this.z=0,this.w=1,this}clone(){return new D(this.x,this.y,this.z,this.w)}add(e){return new D(this.x+e.x,this.y+e.y,this.z+e.z,this.w+e.w)}sub(e){return new D(this.x-e.x,this.y-e.y,this.z-e.z,this.w-e.w)}scaleTo(e){return new D(this.x*e,this.y*e,this.z*e,this.w*e)}scale(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}toVec(){return[this.x,this.y,this.z,this.w]}setFromSphericalCoords(e,t,i){let r=Math.sin(i/2),s=Math.cos(i/2),n=Math.sin(e),a=Math.cos(e),o=Math.sin(t),l=Math.cos(t);return this.x=r*a*o,this.y=r*n,this.z=r*n*l,this.w=s,this}setLookRotation(e,t){let i=e.getNormal().negate(),r=t.cross(i).normalize(),s=i.cross(r),n=1+r.x+s.y+i.z;if(n>1e-6){let a=1/(2*Math.sqrt(n));this.x=(i.y-s.z)*a,this.y=(r.z-i.x)*a,this.z=(s.x-r.y)*a,this.w=.25/a}else if(r.x>s.y&&r.x>i.z){let a=1/(2*Math.sqrt(1+r.x-s.y-i.z));this.x=.25/a,this.y=(s.x+r.y)*a,this.z=(r.z+i.x)*a,this.w=(i.y-s.z)*a}else if(s.y>i.z){let a=1/(2*Math.sqrt(1+s.y-r.x-i.z));this.x=(s.x+r.y)*a,this.y=.25/a,this.z=(i.y+s.z)*a,this.w=(r.z-i.x)*a}else{let a=1/(2*Math.sqrt(1+i.z-r.x-s.y));this.x=(r.z+i.x)*a,this.y=(i.y+s.z)*a,this.z=.25/a,this.w=(s.x-r.y)*a}return this}toSphericalCoords(){let e=this.w,t=Math.sqrt(1-e*e);Math.abs(t)<5e-4&&(t=1);let i=this.x/t,r=this.y/t,s=this.z/t,n,a=-Math.asin(r);return i*i+s*s<5e-4?n=0:n=Math.atan2(i,s),n<0&&(n+=360),{lat:a,lon:n,alpha:Math.acos(e)}}setFromAxisAngle(e,t){let i=e.getNormal(),r=t*.5,s=Math.sin(r);return this.set(i.x*s,i.y*s,i.z*s,Math.cos(r)),this}getAxisAngle(){let e=this.x,t=this.y,i=this.z,r=this.w,s=Math.sqrt(e*e+t*t+i*i),n,a;if(s>1e-7){let o=1/s;n=new p(e*o,t*o,i*o),r<0?a=2*Math.atan2(-s,-r):a=2*Math.atan2(s,r)}else n=new p(0,0,0),a=0;return{axis:n,angle:a}}setFromEulerAngles(e,t,i){let r=e*hi,s=t*hi,n=i*hi,a=Math.cos(r),o=Math.cos(s),l=Math.cos(n),h=Math.sin(r),d=Math.sin(s),f=Math.sin(n),u=o*l,g=d*f;return this.w=a*u+h*g,this.x=h*u-a*g,this.y=a*d*l+h*o*f,this.z=a*o*f-h*d*l,this.normalize()}getEulerAngles(){let e=this.x,t=this.y,i=this.z,r=this.w,s=t*t,n=Math.atan2(2*(r*e+t*i),1-2*(e*e+s)),a=r*t-i*e;a<-1?a=-1:a>1&&(a=1);let o=Math.asin(2*a),l=Math.atan2(2*(r*i+e*t),1-2*(s+i*i));return{roll:n,pitch:o,yaw:l}}setFromMatrix4(e){let t,i,r=[],s,n,a,o=e._m,l=[1,2,0];return t=o[0]+o[5]+o[10],t>0?(i=Math.sqrt(t+1),this.w=i/2,i=.5/i,this.x=(o[6]-o[9])*i,this.y=(o[8]-o[2])*i,this.z=(o[1]-o[4])*i):(s=0,o[5]>o[0]&&(s=1),o[10]>o[s*5]&&(s=2),n=l[s],a=l[n],i=Math.sqrt(o[s*5]-(o[n*5]+o[a*5])+1),r[s]=i*.5,i!==0&&(i=.5/i),r[3]=(o[n*4+a]-o[a*4+n])*i,r[n]=(o[s*4+n]+o[n*4+s])*i,r[a]=(o[s*4+a]+o[a*4+s])*i,this.x=r[0],this.y=r[1],this.z=r[2],this.w=r[3]),this}getMat4(e=new ne){let t=this.x+this.x,i=this.y+this.y,r=this.z+this.z,s=this.w*t,n=this.w*i,a=this.w*r,o=this.x*t,l=this.x*i,h=this.x*r,d=this.y*i,f=this.y*r,u=this.z*r;return e.set([1-(d+u),l-a,h+n,0,l+a,1-(o+u),f-s,0,h-n,f+s,1-(o+d),0,0,0,0,1])}getMat3(){let e=new at,t=e._m,i=this.x,r=this.y,s=this.z,n=this.w,a=i+i,o=r+r,l=s+s,h=i*a,d=i*o;i=i*l;let f=r*o;return r=r*l,s=s*l,a=n*a,o=n*o,n=n*l,t[0]=1-(f+s),t[1]=d-n,t[2]=i+o,t[3]=d+n,t[4]=1-(h+s),t[5]=r-a,t[6]=i-o,t[7]=r+a,t[8]=1-(h+f),e}mulVec3(e){let t=e.x,i=e.y,r=e.z,s=this.x,n=this.y,a=this.z,o=this.w,l=o*t+n*r-a*i,h=o*i+a*t-s*r,d=o*r+s*i-n*t;return t=-s*t-n*i-a*r,new p(l*o+t*-s+h*-a-d*-n,h*o+t*-n+d*-s-l*-a,d*o+t*-a+l*-n-h*-s)}mul(e){let t=this.x,i=this.y,r=this.z,s=this.w,n=e.x,a=e.y,o=e.z,l=e.w;return new D(t*l+s*n+i*o-r*a,i*l+s*a+r*n-t*o,r*l+s*o+t*a-i*n,s*l-t*n-i*a-r*o)}mulA(e){let t=this.x,i=this.y,r=this.z,s=this.w,n=e.x,a=e.y,o=e.z,l=e.w;return this.x=t*l+s*n+i*o-r*a,this.y=i*l+s*a+r*n-t*o,this.z=r*l+s*o+t*a-i*n,this.w=s*l-t*n-i*a-r*o,this}conjugate(){return new D(-this.x,-this.y,-this.z,this.w)}inverse(){let e=1/this.magnitude2();return new D(-this.x*e,-this.y*e,-this.z*e,this.w*e)}magnitude(){let e=this.x,t=this.y,i=this.z,r=this.w;return Math.sqrt(e*e+t*t+i*i+r*r)}magnitude2(){let e=this.x,t=this.y,i=this.z,r=this.w;return e*e+t*t+i*i+r*r}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}normalize(){let e=this.x,t=this.y,i=this.z,r=this.w,s=Math.sqrt(e*e+t*t+i*i+r*r);return s===0?(this.x=0,this.y=0,this.z=0,this.w=0,this):(s=1/s,this.x=e*s,this.y=t*s,this.z=i*s,this.w=r*s,this)}isEqual(e){let t=this.dot(e);return Math.abs(t-1)<.001}slerp(e,t){let i=this.x,r=this.y,s=this.z,n=this.w,a=e.x,o=e.y,l=e.z,h=e.w,d,f,u,g,_;return f=i*a+r*o+s*l+n*h,f<0&&(f=-f,a=-a,o=-o,l=-l,h=-h),1-f>1e-6?(d=Math.acos(f),u=Math.sin(d),g=Math.sin((1-t)*d)/u,_=Math.sin(t*d)/u):(g=1-t,_=t),new D(g*i+_*a,g*r+_*o,g*s+_*l,g*n+_*h)}getRoll(e=!1){let t=this.x,i=this.y,r=this.z,s=this.w;if(e){let n=2*i,a=2*r,o=a*s,l=n*t,h=n*i,d=a*r;return Math.atan2(l+o,1-(h+d))}else return Math.atan2(2*(t*i+s*r),s*s+t*t-i*i-r*r)}getPitch(e=!1){let t=this.x,i=this.y,r=this.z,s=this.w;if(e){let n=2*t,a=2*r,o=n*s,l=n*t,h=a*i,d=a*r;return Math.atan2(h+o,1-(l+d))}else return Math.atan2(2*(i*r+s*t),s*s-t*t-i*i+r*r)}getYaw(e=!1){let t=this.x,i=this.y,r=this.z,s=this.w;if(e){let n=2*t,a=2*i,o=2*r,l=a*s,h=n*t,d=o*t,f=a*i;return Math.atan2(d+l,1-(h+f))}else return Math.asin(-2*(t*r-s*i))}}class p{constructor(e=0,t=0,i=0){this.x=e,this.y=t,this.z=i}static get UP(){return new p(0,1,0)}static get DOWN(){return new p(0,-1,0)}static get RIGHT(){return new p(1,0,0)}static get LEFT(){return new p(-1,0,0)}static get FORWARD(){return new p(0,0,-1)}static get BACKWARD(){return new p(0,0,1)}static get ZERO(){return new p}static get UNIT_X(){return new p(1,0,0)}static get UNIT_Y(){return new p(0,1,0)}static get UNIT_Z(){return new p(0,0,1)}static get NORTH(){return p.UNIT_Z}static doubleToTwoFloats(e,t,i){let r=e.x,s=e.y,n=e.z;if(r>=0){let a=Math.floor(r/65536)*65536;t.x=Math.fround(a),i.x=Math.fround(r-a)}else{let a=Math.floor(-r/65536)*65536;t.x=Math.fround(-a),i.x=Math.fround(r+a)}if(s>=0){let a=Math.floor(s/65536)*65536;t.y=Math.fround(a),i.y=Math.fround(s-a)}else{let a=Math.floor(-s/65536)*65536;t.y=Math.fround(-a),i.y=Math.fround(s+a)}if(n>=0){let a=Math.floor(n/65536)*65536;t.z=Math.fround(a),i.z=Math.fround(n-a)}else{let a=Math.floor(-n/65536)*65536;t.z=Math.fround(-a),i.z=Math.fround(n+a)}}static doubleToTwoFloat32Array(e,t,i){let r=e.x,s=e.y,n=e.z;if(r>=0){let a=Math.floor(r/65536)*65536;t[0]=Math.fround(a),i[0]=Math.fround(r-a)}else{let a=Math.floor(-r/65536)*65536;t[0]=Math.fround(-a),i[0]=Math.fround(r+a)}if(s>=0){let a=Math.floor(s/65536)*65536;t[1]=Math.fround(a),i[1]=Math.fround(s-a)}else{let a=Math.floor(-s/65536)*65536;t[1]=Math.fround(-a),i[1]=Math.fround(s+a)}if(n>=0){let a=Math.floor(n/65536)*65536;t[2]=Math.fround(a),i[2]=Math.fround(n-a)}else{let a=Math.floor(-n/65536)*65536;t[2]=Math.fround(-a),i[2]=Math.fround(n+a)}}static fromVec(e){return new p(e[0],e[1],e[2])}static angle(e,t){return Math.acos(e.dot(t)/Math.sqrt(e.length2()*t.length2()))}static lerp(e,t,i){return new p(e.x+(t.x-e.x)*i,e.y+(t.y-e.y)*i,e.z+(t.z-e.z)*i)}static add(e,t){let i=new p(e.x,e.y,e.z);return i.addA(t),i}static sub(e,t){let i=new p(e.x,e.y,e.z);return i.subA(t),i}static scale(e,t){return e.scaleTo(t)}static mul(e,t){let i=new p(e.x,e.y,e.z);return i.mulA(t),i}static noncollinear(e,t){return!!(e.y*t.z-e.z*t.y||e.z*t.x-e.x*t.z||e.x*t.y-e.y*t.z)}static proj_b_to_plane(e,t,i){let r=e.sub(t.scaleTo(t.dot(e)/t.dot(t)));return i&&r.isZero()?new p(i.x,i.y,i.z):r}static proj_b_to_a(e,t){return t.scaleTo(t.dot(e)/t.dot(t))}static orthoNormalize(e,t){return e=e.getNormal(),e.scale(t.dot(e)),t.subA(e).normalize()}static div(e,t){let i=new p(e.x,e.y,e.z);return i.divA(t),i}static length2(e){return e.length2()}static dot(e,t){return e.dot(t)}toVec4(){return new J(this.x,this.y,this.z,1)}clone(){return new p(this.x,this.y,this.z)}toString(){return`(${this.x},${this.y},${this.z})`}isZero(){return!(this.x||this.y||this.z)}projToVec(e){return e.scaleTo(e.dot(this)/e.dot(e))}equal(e){return this.x===e.x&&this.y===e.y&&this.z===e.z}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}length2(){return this.x*this.x+this.y*this.y+this.z*this.z}getQuat(){return new D(this.x,this.y,this.z)}addA(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}add(e){return new p(this.x+e.x,this.y+e.y,this.z+e.z)}subA(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}sub(e){return new p(this.x-e.x,this.y-e.y,this.z-e.z)}scale(e){return this.x*=e,this.y*=e,this.z*=e,this}scaleTo(e){return new p(this.x*e,this.y*e,this.z*e)}mulA(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}mul(e){return new p(this.x*e.x,this.y*e.y,this.z*e.z)}divA(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}div(e){return new p(this.x/e.x,this.y/e.y,this.z/e.z)}dot(e){return e.x*this.x+e.y*this.y+e.z*this.z}dotArr(e){return e[0]*this.x+e[1]*this.y+e[2]*this.z}cross(e){return new p(this.y*e.z-this.z*e.y,this.z*e.x-this.x*e.z,this.x*e.y-this.y*e.x)}clear(){return this.x=this.y=this.z=0,this}getNormal(){let e=new p;e.copy(this);let t=1/e.length();return e.x*=t,e.y*=t,e.z*=t,e}normal(){let e=new p;e.copy(this);let t=1/e.length();return e.x*=t,e.y*=t,e.z*=t,e}normalNegate(){let e=new p;e.copy(this);let t=-1/e.length();return e.x*=t,e.y*=t,e.z*=t,e}normalNegateScale(e){let t=new p;t.copy(this);let i=-e/t.length();return t.x*=i,t.y*=i,t.z*=i,t}normalScale(e){let t=new p;t.copy(this);let i=e/t.length();return t.x*=i,t.y*=i,t.z*=i,t}normalize(){let e=1/this.length();return this.x*=e,this.y*=e,this.z*=e,this}toVec(){return[this.x,this.y,this.z]}toArray(){return[this.x,this.y,this.z]}distance(e){let t=this.x-e.x,i=this.y-e.y,r=this.z-e.z;return Math.sqrt(t*t+i*i+r*r)}distance2(e){let t=this.x-e.x,i=this.y-e.y,r=this.z-e.z;return t*t+i*i+r*r}set(e,t,i){return this.x=e,this.y=t,this.z=i,this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}negateTo(){return new p(-this.x,-this.y,-this.z)}projToRay(e,t){let i=p.proj_b_to_a(p.sub(this,e),t);return i.addA(e),i}angle(e){return p.angle(this,e)}lerp(e,t){return new p(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t,this.z+(e.z-this.z)*t)}smerp(e,t){let i=1-t;return new p(this.x*t+e.x*i,this.y*t+e.y*i,this.z*t+e.z*i)}static get LERP_DELTA(){return 1e-6}slerp(e,t){let i=new p;if(t<=0)return i.copy(this),i;if(t>=1)return i.copy(e),i;let r,s,n,a,o=this.dot(e);return 1-o>p.LERP_DELTA?(r=Math.acos(o),s=Math.sin(r),n=Math.sin((1-t)*r)/s,a=Math.sin(t*r)/s):(n=1-t,a=t),p.add(this.scaleTo(n),e.scale(a))}getRotationTo(e,t){let i=this.clone(),r=e.clone();i.normalize(),r.normalize();let s=i.dot(r);if(s>=1)return D.IDENTITY.clone();if(s<1e-6-1)if(t.equal(p.ZERO)){let n=p.UNIT_X.cross(i);return n.isZero()&&(n=p.UNIT_Y.cross(i)),n.normalize(),D.axisAngleToQuat(n,Math.PI)}else return D.axisAngleToQuat(t,Math.PI);else{let n=Math.sqrt((1+s)*2),a=1/n,o=i.cross(r),l=new D(o.x*a,o.y*a,o.z*a,n*.5);return l.normalize(),l}}}class V{constructor(e=0,t=0){this.x=e,this.y=t}static get UP(){return new V(0,1)}static get DOWN(){return new V(0,-1)}static get RIGHT(){return new V(1,0)}static get LEFT(){return new V(-1,0)}static get ZERO(){return new V}static add(e,t){const i=new V(e.x,e.y);return i.addA(t),i}static sub(e,t){var i=new V(e.x,e.y);return i.subA(t),i}static scale(e,t){let i=new V(e.x,e.y);return i.scale(t),i}static mul(e,t){let i=new V(e.x,e.y);return i.mulA(t),i}static div(e,t){let i=new V(e.x,e.y);return i.divA(t),i}static proj_b_to_a(e,t){return t.scaleTo(t.dot(e)/t.dot(t))}static angle(e,t){return Math.acos(e.dot(t)/Math.sqrt(e.length2()*t.length2()))}static orthoNormalize(e,t){return e=e.normal(),e.scale(t.dot(e)),t.sub(e).normalize()}toVector3(){return new p(this.x,this.y,0)}clone(){return new V(this.x,this.y)}equal(e){return this.x===e.x&&this.y===e.y}copy(e){return this.x=e.x,this.y=e.y,this}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}length2(){return this.x*this.x+this.y*this.y}addA(e){return this.x+=e.x,this.y+=e.y,this}add(e){return new V(this.x+e.x,this.y+e.y)}subA(e){return this.x-=e.x,this.y-=e.y,this}sub(e){return new V(this.x-e.x,this.y-e.y)}scale(e){return this.x*=e,this.y*=e,this}scaleTo(e){return new V(this.x*e,this.y*e)}mulA(e){return this.x*=e.x,this.y*=e.y,this}mul(e){return new V(this.x*e.x,this.y*e.y)}divA(e){return this.x/=e.x,this.y/=e.y,this}dot(e){return e.x*this.x+e.y*this.y}dotArr(e){return e[0]*this.x+e[1]*this.y}cross(e){return this.x*e.y-this.y*e.x}clear(){return this.x=this.y=0,this}normal(){let e=new V;e.copy(this);let t=1/e.length();return e.x*=t,e.y*=t,e}normalize(){let e=1/this.length();return this.x*=e,this.y*=e,this}toVec(){return[this.x,this.y]}distance(e){return V.sub(this,e).length()}set(e,t){return this.x=e,this.y=t,this}negate(){return this.x=-this.x,this.y=-this.y,this}negateTo(){return new V(-this.x,-this.y)}projToRay(e,t){let i=V.proj_b_to_a(V.sub(this,e),t);return i.add(e),i}angle(e){return V.angle(this,e)}lerp(e,t,i){let r=this.clone();return i<=0?r.copy(e):i>=1?r.copy(t):r=V.add(e,V.sub(t,e).scale(i)),r}static get LERP_DELTA(){return 1e-6}slerp(e,t){let i=new V;if(t<=0)return i.copy(this),i;if(t>=1)return i.copy(e),i;let r,s,n,a,o=this.dot(e);return 1-o>V.LERP_DELTA?(r=Math.acos(o),s=Math.sin(r),n=Math.sin((1-t)*r)/s,a=Math.sin(t*r)/s):(n=1-t,a=t),V.add(this.scale(n),e.scale(a))}}const Or={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4","indianred ":"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};function Yi(c,e){return c??e}function At(c){return c==null}let Qn=0;function Vr(c){let e=c._openglobus_id;return e||(e=c._openglobus_id=++Qn),e}function Ur(c){return typeof c=="string"||c instanceof String}function ot(c,e){let t=Or[c];if(t&&(c=t),c[0]==="#"){let i=/^#?([a-f\d])([a-f\d])([a-f\d])$/i,r=c.replace(i,function(n,a,o,l){return a+a+o+o+l+l}),s=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(r);return s?new J(parseInt(s[1],16)/255,parseInt(s[2],16)/255,parseInt(s[3],16)/255,At(e)?1:e):new J}else{At(e)&&(e=1);let i=c.split(",");return new J(parseInt(i[0].split("(")[1])/255,parseInt(i[1])/255,parseInt(i[2])/255,At(i[3])?e:parseFloat(i[3]))}}function qi(c,e){let t=ot(c,e);return new Float32Array([t.x,t.y,t.z,t.w])}function Wi(c){let e=Or[c];if(e&&(c=e),c[0]==="#"){let t=/^#?([a-f\d])([a-f\d])([a-f\d])$/i,i=c.replace(t,function(s,n,a,o){return n+n+a+a+o+o}),r=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(i);return r?new p(parseInt(r[1],16)/255,parseInt(r[2],16)/255,parseInt(r[3],16)/255):new p}else{let t=c.split(",");return new p(parseInt(t[0].split("(")[1])/255,parseInt(t[1])/255,parseInt(t[2])/255)}}function Et(c,e){return c.replace(/{[^{}]+}/g,function(t){return e[t.replace(/[{}]+/g,"")]||""})}function Gr(c){let e=document.createElement("div");e.innerHTML=c;let t=[];for(let i=0;i<e.childNodes.length;i++)t.push(e.childNodes[i]),e.removeChild(e.childNodes[i]);return t}function Jn(c,e=""){return c?c.trim():e}function lt(c,e){if(c){if(c instanceof p)return c.clone();if(c instanceof Array)return p.fromVec(c);if(c instanceof V)return new p(c.x,c.y,0)}else if(e)return e;return new p}function qe(c,e){if(c){if(Ur(c))return ot(c);if(c instanceof Array)return J.fromVec(c);if(c instanceof J)return c.clone()}else if(e)return e;return new J(1,1,1,1)}function Se(c,e){if(c){if(Ur(c))return Wi(c);if(c instanceof Array)return p.fromVec(c);if(c instanceof p)return c.clone()}else if(e)return e;return new p(1,1,1)}function jr(c,e){if(c){if(c instanceof Array)return new U(Xi(c[0]),Xi(c[1]));if(c instanceof U)return c.clone()}else if(e)return e;return new U}function Xi(c,e){if(c){if(c instanceof Array)return new B(c[0],c[1],c[2]);if(c instanceof B)return c.clone()}else if(e)return e;return new B}function ea(c,e){let t=0,i=c.length-1;for(;t<=i;){let r=Math.floor((t+i)*.5);if(Math.abs(c[r]-e)<.001)return r;c[r]<e?t=r+1:i=r-1}return-1}function Zi(c,e,t){let i=0,r=c.length-1;for(;i<=r;){let s=r+i>>1,n=t(e,c[s],s);if(n>0)i=s+1;else if(n<0)r=s-1;else return s}return-i-1}function ta(c,e,t){let i=Zi(c,e,t);return i<0&&(i=~i),c.splice(i,0,e),i}function ia(c,e,t,i,r=!1){let s=new B(e.lon-c.lon,e.lat-c.lat),n=new B(i.lon-t.lon,i.lat-t.lat),a=-s.lat,o=+s.lon,l=-(a*c.lon+o*c.lat),h=-n.lat,d=+n.lon,f=-(h*t.lon+d*t.lat),u=h*c.lon+d*c.lat+f,g=h*e.lon+d*e.lat+f,_=a*t.lon+o*t.lat+l,m=a*i.lon+o*i.lat+l;if(r&&(u*g>0||_*m>0))return;let v=u/(u-g);return new B(c.lon+v*s.lon,c.lat+v*s.lat)}function Yr(c,e,t=!1){let i,r=0;return function(){const s=arguments;r?(t&&clearTimeout(i),i=setTimeout(()=>{Date.now()-r>=e&&(c.apply(null,s),r=Date.now())},e-(Date.now()-r))):(c.apply(null,s),r=Date.now())}}function Z(c,e){let t=new c.constructor(c.length+e.length);return t.set(c,0),t.set(e,c.length),t}function ve(c=[],e=[]){if(ArrayBuffer.isView(c))return Z(c,e);for(let t=0;t<e.length;t++)c.push(e[t]);return c}function X(c,e=Float32Array){if(ArrayBuffer.isView(c))return c;{const t=new e(c.length);return t.set(c,0),t}}function Dt(c){return ArrayBuffer.isView(c)?Array.from(c):c}function Te(c,e,t,i){if(ArrayBuffer.isView(c))return e<0&&(t=Math.abs(e),e+=c.length),ee(c,e,t,i);{let r;return e<0?r=c.splice(e):r=c.splice(e,t),i&&(i.result=r),c}}function ee(c,e,t,i){if(c.length===0)return c;const r=c.length-t,s=new c.constructor(r);return s.set(c.subarray(0,e)),s.set(c.subarray(e+t),e),i&&(i.result=c.subarray(e,e+t)),s}function qr(c,e,t,i,r){const s=r+1,n=t+s,a=i+s;let o=new Float64Array(s*s*3),l=0;for(let h=t;h<n;h++)for(let d=i;d<a;d++){let f=3*(h*(e+1)+d);o[l++]=c[f],o[l++]=c[f+1],o[l++]=c[f+2]}return o}function ra(c,e,t,i,r){const s=r+1,n=t+s,a=i+s;let o=new Float32Array(s*s*3),l=0;for(let h=t;h<n;h++)for(let d=i;d<a;d++){let f=3*(h*(e+1)+d);o[l++]=c[f],o[l++]=c[f+1],o[l++]=c[f+2]}return o}function Wr(c,e,t,i,r,s,n,a,o,l,h,d,f){const u=s+a+1,g=n+a+1;r+=1;let _=0,m=0;for(let v=s;v<u;v++)for(let b=n;b<g;b++){let y=v*r+b,w=3*y,x=c[w],T=c[w+1],A=c[w+2];!i||i[y]===0?(x<d.xmin&&(d.xmin=x),x>d.xmax&&(d.xmax=x),T<d.ymin&&(d.ymin=T),T>d.ymax&&(d.ymax=T),A<d.zmin&&(d.zmin=A),A>d.zmax&&(d.zmax=A)):f[m]=1,m++,o[_]=x,h[_]=t[w],l[_++]=e[w],o[_]=T,h[_]=t[w+1],l[_++]=e[w+1],o[_]=A,h[_]=t[w+2],l[_++]=e[w+2]}}function Xr(c){return c.map(e=>Array.isArray(e)?Xr(e):e)}async function sa(c){return new Promise(e=>{const t=new Image;return t.addEventListener("load",()=>{e(t)}),t.src=c,t.crossOrigin="",t})}function na(c){let t=new URLSearchParams(location.search).get(c);if(t)return Number(t)}const aa=.001,oa=1e3,$i=60,la=1/$i,_i=3600,ha=1/_i,Zr=12*_i,Nt=86400,$r=1/864e5,Ki=1/Nt,Kr=2451545;function ca(c,e,t){let i=(e-14)/12|0,r=c+4800+i;return(1461*r/4|0)+(367*(e-2-12*i)/12|0)-(3*((r+100)/100|0)/4|0)+t-32075}function Qr(c){let e=ca(c.getUTCFullYear(),c.getUTCMonth()+1,c.getUTCDate()),t=c.getUTCHours()-12;t<0&&(t+=24);let i=c.getUTCSeconds()+t*_i+c.getUTCMinutes()*$i+c.getUTCMilliseconds()*aa;i>=Zr&&e--;let r=i*Ki|0;return e+=r,i-=Nt*r,i<0&&(e--,i+=Nt),e+i*Ki}function da(c){let e=_a,t=Zi(e,c,function(r,s){return r-s.jd});t<0&&(t=~t),t>=e.length&&(t=e.length-1);let i=e[t].leapSeconds;return t!==0&&(e[t].jd-c)*Nt>i&&(i=e[t-1].leapSeconds),c+i*Ki}function fa(c){let e=c|0,t=(c-e)*Nt;t>=Zr&&e++;let i=e+68569|0,r=4*i/146097|0;i=i-((146097*r+3)/4|0)|0;let s=4e3*(i+1)/1461001|0;i=i-(1461*s/4|0)+31|0;let n=80*i/2447|0,a=i-(2447*n/80|0)|0;i=n/11|0;let o=n+2-12*i|0,l=100*(r-49)+s+i|0,h=t*ha|0,d=t-h*_i,f=d*la|0;d=d-f*$i;let u=d|0,g=(d-u)*oa|0;return h+=12,h>23&&(h-=24),new Date(Date.UTC(l,o-1,a,h,f,u,g))}function ua(c,e){return c+e*$r}function Y(c,e){return{jd:c,leapSeconds:e}}const _a=[Y(24413175e-1,10),Y(24414995e-1,11),Y(24416835e-1,12),Y(24420485e-1,13),Y(24424135e-1,14),Y(24427785e-1,15),Y(24431445e-1,16),Y(24435095e-1,17),Y(24438745e-1,18),Y(24442395e-1,19),Y(24447865e-1,20),Y(24451515e-1,21),Y(24455165e-1,22),Y(24462475e-1,23),Y(24471615e-1,24),Y(24478925e-1,25),Y(24482575e-1,26),Y(24488045e-1,27),Y(24491695e-1,28),Y(24495345e-1,29),Y(24500835e-1,30),Y(24506305e-1,31),Y(24511795e-1,32),Y(24537365e-1,33),Y(24548325e-1,34),Y(24561095e-1,35),Y(24572045e-1,36)];da(Kr);class ga{constructor(e){this.vertices=[new p,new p,new p,new p,new p,new p,new p,new p],e&&this.setFromBoundsArr(e)}copy(e){for(let t=0,i=this.vertices.length;t<i;t++)this.vertices[t].copy(e.vertices[t])}setFromBoundsArr(e){let t=e[0],i=e[3],r=e[1],s=e[4],n=e[2],a=e[5],o=this.vertices;o[0].set(t,r,n),o[1].set(i,r,n),o[2].set(i,r,a),o[3].set(t,r,a),o[4].set(t,s,n),o[5].set(i,s,n),o[6].set(i,s,a),o[7].set(t,s,a)}setFromExtent(e,t){this.setFromBoundsArr(t.getCartesianBounds(e))}}class Ze{constructor(e=0,t){this.radius=e,this.center=t?t.clone():new p}setFromBounds(e){let t=new p(e[0],e[1],e[2]);this.center.set(t.x+(e[3]-t.x)*.5,t.y+(e[3]-t.y)*.5,t.z+(e[5]-t.z)*.5),this.radius=this.center.distance(t)}setFromExtent(e,t){this.setFromBounds(t.getCartesianBounds(e))}}function We(c,e){return new Ht(c,e)}class Ht{constructor(e,t){this.__id=Ht.__counter__++,this._eventNames=[],e&&this.registerNames(e),this._sender=t||this,this._stopPropagation=!1,this._stampCache={}}bindSender(e){this._sender=e||this}registerNames(e){for(let t=0;t<e.length;t++)this[e[t]]={active:!0,handlers:[]},this._eventNames.push(e[t]);return this}_getStamp(e,t,i){return`${e}_${t}_${i}`}_stamp(e,t){let i=Vr(t),r=this._getStamp(e,this.__id,i);return this._stampCache[r]?!1:(this._stampCache[r]=i,!0)}on(e,t,i,r=0){if(this._stamp(e,t)&&this[e]){let s=t.bind(i||this._sender);s._openglobus_id=t._openglobus_id,s._openglobus_priority=r,ta(this[e].handlers,s,(n,a)=>(a._openglobus_priority||0)-(n._openglobus_priority||0))}}off(e,t){if(t){let i=this._getStamp(e,this.__id,t._openglobus_id);if(t._openglobus_id&&this._stampCache[i]){let r=this[e].handlers,s=r.length,n=-1;for(;s--;)if(r[s]._openglobus_id===t._openglobus_id){n=s;break}n!==-1&&(r.splice(n,1),this._stampCache[i]=void 0,delete this._stampCache[i])}}}dispatch(e,...t){let i=!0;if(e&&e.active&&!this._stopPropagation){let r=e.handlers.slice(0),s=r.length;for(;s--;)r[s](...t)===!1&&(i=!1)}return this._stopPropagation=!1,i}stopPropagation(){this._stopPropagation=!0}clear(){for(let e=0;e<this._eventNames.length;e++){let t=this[this._eventNames[e]];t.handlers.length=0,t.handlers=[]}this._eventNames.length=0,this._eventNames=[]}}Ht.__counter__=0;const ma=["render"];class Pe{constructor(e={}){this.__id=Pe.__counter__++,this.events=We(ma),this.model=e.model||null,this.template=e.template||"",this.parent=e.parent||null,this._classList=e.classList||[],this.el=null}static getHTML(e,t){return Et(e,t)}static parseHTML(e){return Gr(e)}static insertAfter(e,t){Array.isArray(e)||(e=[e]);for(let i=0;i<e.length;i++)t.parentNode&&t.parentNode.insertBefore(e[i],t.nextSibling);return e}static insertBefore(e,t){Array.isArray(e)||(e=[e]);for(let i=0;i<e.length;i++)t.parentNode&&t.parentNode.insertBefore(e[i],t);return e}insertBefore(e){this.el||this.render(),this.el&&(e instanceof HTMLElement&&e.parentNode&&Pe.insertBefore(this.el,e),e instanceof Pe&&e.el&&e.el.parentNode&&Pe.insertBefore(this.el,e.el))}insertAfter(e){this.el||this.render(),this.el&&(e instanceof HTMLElement&&e.parentNode&&Pe.insertAfter(this.el,e),e instanceof Pe&&e.el&&e.el.parentNode&&Pe.insertAfter(this.el,e.el))}isEqual(e){return e.__id===this.__id}appendTo(e,t=!1,i=!1){return e&&(this.el||(this.beforeRender(e),this.render()),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el),t&&(e.innerHTML=""),this.el&&(i?e.childNodes[0]?Pe.insertBefore(this.el,e.childNodes[0]):e.appendChild(this.el):e.appendChild(this.el)),this.afterRender(e)),this}afterRender(e){}beforeRender(e){}stopPropagation(){this.events.stopPropagation()}renderTemplate(e){return Pe.parseHTML(Pe.getHTML(this.template,e||{}))[0]}render(e){this.el=this.renderTemplate(e);for(let t=0,i=this._classList.length;t<i;t++)this.el.classList.add(this._classList[t]);return this.events.dispatch(this.events.render,this),this}select(e){return this.el?this.el.querySelector(e):null}selectRemove(e){if(this.el){let t=this.select(e);if(t&&t.parentNode)return t.parentNode.removeChild(t),t}}selectAll(e,t){if(this.el){const i=this.el.querySelectorAll(e);if(t)for(let r=0,s=i.length;r<s;r++)t(i[r],r);return i}}remove(){this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)}}Pe.__counter__=0;const pa=`<div class="og-button" title="{title}">
|
|
2
2
|
<div class="og-button-icon">{icon}</div>
|
|
3
3
|
<div class="og-button-text">{text}</div>
|
|
4
4
|
</div>`,va=["click","mousedown","mouseup","touchstart","touchend","touchcancel"];class gi extends Pe{constructor(e={}){super({template:Et(pa,{icon:e.icon||"",text:e.text||"",title:e.title||""}),...e}),this._onMouseDown=t=>{t.preventDefault(),this.events.dispatch(this.events.mousedown,this,t)},this._onMouseUp=t=>{t.preventDefault(),this.events.dispatch(this.events.mouseup,this,t)},this._onTouchStart=t=>{t.preventDefault(),this.events.dispatch(this.events.touchstart,this,t)},this._onTouchEnd=t=>{t.preventDefault(),this.events.dispatch(this.events.touchend,this,t)},this._onTouchCancel=t=>{t.preventDefault(),this.events.dispatch(this.events.touchcancel,this,t)},this._onMouseClick=t=>{this._mouseClickHandler(t)},this.events=this.events.registerNames(va),this.el=null,this.name=e.name||"",this.$icon=null,this.$text=null}render(e){return super.render(e),this.$icon=this.select(".og-button-icon"),this.$text=this.select(".og-button-text"),this.el.__og_button__=this,this._initEvents(),this}_initEvents(){this.el&&(this.el.addEventListener("click",this._onMouseClick),this.el.addEventListener("mousedown",this._onMouseDown),this.el.addEventListener("mouseup",this._onMouseUp),this.el.addEventListener("touchstart",this._onTouchStart),this.el.addEventListener("touchend",this._onTouchEnd),this.el.addEventListener("touchcancel",this._onTouchCancel))}_mouseClickHandler(e){e.preventDefault(),this.events.dispatch(this.events.click,this,e)}remove(){this._clearEvents(),super.remove()}_clearEvents(){this.el&&this.el.removeEventListener("click",this._onMouseClick)}}class Le{constructor(e={}){this.__id=Le.__counter__++,this._name=e.name||`_control_${this.__id.toString()}`,this.planet=null,this._initialized=!1,this.renderer=null,this.autoActivate=e.autoActivate||!1,this._active=!1,this._deferredActive=!0}get name(){return this._name}oninit(){}onadd(){}onremove(){}onactivate(){}ondeactivate(){}addTo(e){e&&(this.renderer=e,e.controls[this.name]=this,this.onadd&&this.onadd(),e.isInitialized()&&(this._initialized=!0,this.oninit&&this.oninit(),this.autoActivate&&this.activate()))}remove(){this.deactivate(),this.onremove&&this.onremove();let e=this.renderer,t=this.name;if(!e)return;let i=e.controls[t];i&&this.isEqual(i)&&delete e.controls[t],this.renderer=null,this._active=!1,this._initialized=!1}activate(){this._active||(this._initialized||(this._initialized=!0,this.oninit&&this.oninit()),this._deferredActive?(this._active=!0,this.onactivate&&this.onactivate()):this._deferredActive=!0)}deactivate(){this._active?(this._active=!1,this.ondeactivate&&this.ondeactivate()):this._initialized||(this._deferredActive=!1)}isActive(){return this._active}isEqual(e){return e.__id===this.__id}}Le.__counter__=0;const xa=`<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
<div class="og-ddialog-header__buttons"></div>
|
|
85
85
|
</div>
|
|
86
86
|
<div class="og-ddialog-container"></div>
|
|
87
|
-
</div>>`;class Qi extends Pe{constructor(e={}){super({template:Et(Ta,{title:e.title||"",display:Yi(e.visible,!0)?"flex":"none",resize:Yi(e.resizable,!0)?"both":"none",width:e.width||300,height:e.height?`height: ${e.height||200}px`:"",left:e.left||0,top:e.top||0,minHeight:e.minHeight?`${e.minHeight}px`:"unset",maxHeight:e.maxHeight?`${e.maxHeight}px`:"unset",minWidth:e.minWidth?`${e.minWidth}px`:"unset",maxWidth:e.maxWidth?`${e.maxWidth}px`:"unset"}),...e}),this._onCloseBtnClick=()=>{this.close()},this._onMouseDownAll=()=>{this.bringToFront()},this._onMouseDown=t=>{t.preventDefault(),this._startDragging(),this._startPosX=t.clientX,this._startPosY=t.clientY,document.addEventListener("mousemove",this._onMouseMove),document.addEventListener("mouseup",this._onMouseUp)},this._onMouseMove=t=>{t.preventDefault();let i=this._startPosX-t.clientX,r=this._startPosY-t.clientY;this._startPosX=t.clientX,this._startPosY=t.clientY,this.setPosition(this.el.offsetLeft-i,this.el.offsetTop-r)},this._onMouseUp=()=>{this._clearDragging(),document.removeEventListener("mouseup",this._onMouseUp),document.removeEventListener("mousemove",this._onMouseMove)},this.events=this.events.registerNames(wa),this._startPosX=0,this._startPosY=0,this.$header=null,this.$title=null,this.$container=null,this.$buttons=null,this._closeBtn=new gi({icon:ba,classList:["og-button-size__20"]}),this.useHide=e.useHide||!1,this._visibility=Yi(e.visible,!0)}setContainer(e){this.$container.innerHTML=e}get container(){return this.$container}get width(){return this.el?parseFloat(this.el.style.width):0}get height(){return this.el?parseFloat(this.el.style.height):0}bringToFront(){this.el.style.zIndex=String(Qi.__zIndex__++)}render(e){return super.render(e),this.bringToFront(),this.$header=this.select(".og-ddialog-header"),this.$title=this.select(".og-ddialog-header__title"),this.$container=this.select(".og-ddialog-container"),this.$buttons=this.select(".og-ddialog-header__buttons"),this._initEvents(),this._initButtons(),this}show(){this._visibility||(this._visibility=!0,this.el.style.display="flex",this.bringToFront(),this.events.dispatch(this.events.visibility,!0,this))}hide(){this._visibility&&(this._visibility=!1,this.el.style.display="none",this.events.dispatch(this.events.visibility,!1,this))}close(){this.useHide?this.hide():this.remove()}setVisibility(e){e?this.show():this.hide()}_initButtons(){this._closeBtn.events.on("click",this._onCloseBtnClick),this._closeBtn.appendTo(this.$buttons)}_initEvents(){this.$header.addEventListener("mousedown",this._onMouseDown),this.el.addEventListener("mousedown",this._onMouseDownAll)}setPosition(e,t){e!=null&&(this.el.style.left=`${e}px`),t!=null&&(this.el.style.top=`${t}px`)}_startDragging(){this.el.classList.contains("dragging")||(this.el.classList.add("dragging"),this.events.dispatch(this.events.dragstart,this))}_clearDragging(){this.el.classList.contains("dragging")&&(this.events.dispatch(this.events.dragend,this),this.el.classList.remove("dragging"))}remove(){this._clearDragging(),this._clearEvents(),super.remove()}_clearEvents(){this._closeBtn.events.off("click",this._onCloseBtnClick),document.removeEventListener("mouseup",this._onMouseUp),document.removeEventListener("mousemove",this._onMouseMove),this.$header.removeEventListener("mousedown",this._onMouseDown),this.el.removeEventListener("mousedown",this._onMouseDownAll)}}Qi.__zIndex__=0;const Jr=3570,Aa=1e3,$=0,ue=1,_e=2,ge=3,K=0,te=1,Q=2,ie=3,De=0,$e=1,es=2,Vt=[Q,ie,K,te],ts=[[-1,-1,$,ue],[ue,-1,ge,-1],[_e,ge,-1,-1],[-1,$,-1,_e]],Ea=[[_e,ge,$,ue],[ue,$,ge,_e],[_e,ge,$,ue],[ue,$,ge,_e]],Ca=[[0,1,0,0],[1,0,0,0],[0,1,0,1],[1,1,1,1]];class Pa{constructor(e,t){this.segment=e,this.layer=t,this.isReady=!1,this.isLoading=!1,this.texture=null,this.pickingMask=null,this.textureExists=!1,this.appliedNodeId=0,this.appliedNode=null,this.texOffset=[0,0,1,1],this.loadingAttempts=0,this._updateTexture=null,this._updatePickingMask=null,this.pickingReady=!1}abortLoading(){this.layer.abortMaterialLoading(this)}_createTexture(e){return this.layer._planet&&this.layer.createTexture(e,this.layer._internalFormat,this.isReady?this.texture:null)}applyImage(e){this.segment.initialized&&(this._updateTexture=null,this.texture=this._createTexture(e),this.isReady=!0,this.pickingReady=!0,this.textureExists=!0,this.isLoading=!1,this.appliedNodeId=this.segment.node.nodeId,this.texOffset=[0,0,1,1])}applyTexture(e,t){this.segment.initialized&&(this.texture=e,this._updateTexture=null,this.pickingMask=t||null,this._updatePickingMask=null,this.isReady=!0,this.pickingReady=!0,this.textureExists=!0,this.isLoading=!1,this.appliedNodeId=this.segment.node.nodeId,this.texOffset=[0,0,1,1])}textureNotExists(){this.segment.initialized&&(this.pickingReady=!0,this.isLoading=!1,this.isReady=!0,this.textureExists=!1)}clear(){this.loadingAttempts=0,this.layer.clearMaterial(this)}}const Ji=15.8;class Oe{constructor(e,t={}){if(this.isVector=!1,this.__id=Oe.__counter__++,this.events=We(La,this),this.name=e||"noname",this.properties=t.properties||{},this.displayInLayerSwitcher=t.displayInLayerSwitcher!==void 0?t.displayInLayerSwitcher:!0,this._hasImageryTiles=!0,this._opacity=t.opacity||1,this.minZoom=t.minZoom||0,this.maxZoom=t.maxZoom||50,this._planet=null,this.isVector=!1,this._attribution=t.attribution||"",this._zIndex=t.zIndex||0,this._isBaseLayer=t.isBaseLayer||!1,this._defaultTextures=t.defaultTextures||[null,null],this._visibility=t.visibility!==void 0?t.visibility:!0,this._fading=t.fading||!1,this._fadingFactor=this._opacity/Ji,this._fading?this._fadingOpacity=this._visibility?this._opacity:0:this._fadingOpacity=this._opacity,this._height=t.height||0,this._extent=new U,this.createTexture=null,this._textureFilter=t.textureFilter?t.textureFilter.trim().toUpperCase():"MIPMAP",this._isSRGB=t.isSRGB!=null?t.isSRGB:!1,this._internalFormat=null,this._extentMerc=new U,this.setExtent(jr(t.extent,new U(new B(-180,-90),new B(180,90)))),this._pickingColor=new p,this._pickingEnabled=t.pickingEnabled!==void 0?t.pickingEnabled:!0,this._isPreloadDone=!1,this._preLoadZoomLevels=t.preLoadZoomLevels||[0,1],this._ambient=null,this._diffuse=null,this._specular=null,t.ambient){let i=Se(t.ambient,new p(.2,.2,.2));this._ambient=new Float32Array([i.x,i.y,i.z])}if(t.diffuse){let i=Se(t.diffuse,new p(.8,.8,.8));this._diffuse=new Float32Array([i.x,i.y,i.z])}if(t.specular){let i=Se(t.specular,new p(3e-4,3e-4,3e-4)),r=t.shininess||20;this._specular=new Float32Array([i.x,i.y,i.z,r])}this.nightTextureCoefficient=t.nightTextureCoefficient||1}set diffuse(e){if(e){let t=Se(e);this._diffuse=new Float32Array(t.toArray())}else this._diffuse=null}set ambient(e){if(e){let t=Se(e);this._ambient=new Float32Array(t.toArray())}else this._ambient=null}set specular(e){if(e){let t=Se(e);this._specular=new Float32Array([t.x,t.y,t.y,this._specular?this._specular[3]:0])}else this._specular=null}set shininess(e){this._specular&&(this._specular[3]=e)}static getTMS(e,t,i){return{x:e,y:(1<<i)-t-1,z:i}}static getTileIndex(...e){return e.join("_")}get instanceName(){return"Layer"}get rendererEvents(){return this.events}set opacity(e){e!==this._opacity&&(this._fading?e>this._opacity?this._fadingFactor=(e-this._opacity)/Ji:e<this._opacity&&(this._fadingFactor=(e-this._opacity)/Ji):this._fadingOpacity=e,this._opacity=e)}set pickingEnabled(e){this._pickingEnabled=e}get pickingEnabled(){return this._pickingEnabled}hasImageryTiles(){return this._hasImageryTiles}getID(){return this.__id}get id(){return this.__id}get _id(){return this.__id}isEqual(e){return e.__id===this.__id}_assignPlanet(e){this._planet=e,e._layers.push(this),e.renderer&&e.renderer.isInitialized()&&(this._isSRGB?this._internalFormat=e.renderer.handler.gl.SRGB8_ALPHA8:this._internalFormat=e.renderer.handler.gl.RGBA8,this.createTexture=e.renderer.handler.createTexture[this._textureFilter],this.events.on("visibilitychange",e._onLayerVisibilityChanged,e),this._isBaseLayer&&this._visibility&&e.setBaseLayer(this),e.events.dispatch(e.events.layeradd,this),this.events.dispatch(this.events.add,e),e.updateVisibleLayers(),this._bindPicking(),this._visibility&&this.hasImageryTiles()&&this._preLoad())}get isIdle(){return this._planet&&this._planet._terrainCompletedActivated||!1}_bindPicking(){this._planet&&this._planet.renderer&&this._planet.renderer.assignPickingColor(this)}addTo(e){this._planet||this._assignPlanet(e)}remove(){let e=this._planet;if(e){for(let t=0;t<e._layers.length;t++)if(this.isEqual(e._layers[t]))return e.renderer&&e.renderer.clearPickingColor(this),e._layers.splice(t,1),e.updateVisibleLayers(),this.clear(),e.events.dispatch(e.events.layerremove,this),this.events.dispatch(this.events.remove,e),this._planet=null,this._internalFormat=null,this.createTexture=null,this}return this}clear(){this._planet&&this._planet._clearLayerMaterial(this)}get planet(){return this._planet}setAttribution(e){this._attribution!==e&&(this._attribution=e,this._planet&&this._planet.updateAttributionsList())}getAttribution(){return this._attribution}setHeight(e){this._height=e,this._planet&&this._planet.updateVisibleLayers()}getHeight(){return this._height}setZIndex(e){this._zIndex=e,this._planet&&this._planet.updateVisibleLayers()}getZIndex(){return this._zIndex}bringToFront(){if(this._planet){let e=this._planet.visibleTileLayers,t=e[e.length-1];t.isEqual(this)||this.setZIndex(t.getZIndex()+1)}}isBaseLayer(){return this._isBaseLayer}setBaseLayer(e){this._isBaseLayer=e,this._planet&&(!e&&this._planet.baseLayer&&this.isEqual(this._planet.baseLayer)&&(this._planet.baseLayer=null),this._planet.updateVisibleLayers())}setVisibility(e){e!==this._visibility&&(this._visibility=e,this._planet&&(this._isBaseLayer&&e&&this._planet.setBaseLayer(this),this._planet.updateVisibleLayers(),e&&!this._isPreloadDone&&!this.isVector&&(this._isPreloadDone=!0,this._preLoad())),this.events.dispatch(this.events.visibilitychange,this))}_forceMaterialApply(e){let t=e.materials,i=t[this.__id];i||(i=t[this.__id]=this.createMaterial(e)),i.isReady||(this._planet._renderCompleted=!1),this.applyMaterial(i,!0)}clearMaterial(e){}loadMaterial(e,t=!1){}applyMaterial(e,t=!1){return[0,0,1,1]}_preLoadRecursive(e,t){if(!(e.segment.tileZoom>t)){this._preLoadZoomLevels.includes(e.segment.tileZoom)&&this._forceMaterialApply(e.segment);for(let i=0,r=e.nodes.length;i<r;i++)e.nodes[i]&&this._preLoadRecursive(e.nodes[i],t)}}_preLoad(){if(this._planet&&this._preLoadZoomLevels.length){let e=this._planet,t=Math.max(...this._preLoadZoomLevels);for(let i=0,r=e.quadTreeStrategy.quadTreeList.length;i<r;i++)this._preLoadRecursive(e.quadTreeStrategy.quadTreeList[i],t)}}getVisibility(){return this._visibility}setExtent(e){let t=e.southWest.clone(),i=e.northEast.clone();t.lat<Re&&(t.lat=Re),i.lat>ce&&(i.lat=ce),this._extent=e.clone(),this._extentMerc=new U(t.forwardMercator(),i.forwardMercator()),this._correctFullExtent()}getExtent(){return this._extent}getExtentMerc(){return this._extentMerc}_correctFullExtent(){}get opacity(){return this._opacity}get screenOpacity(){return this._fading?this._fadingOpacity:this._opacity}_refreshFadingOpacity(){let e=this._planet;return this._visibility&&e.getViewExtent().overlaps(this._extent)&&e.maxCurrZoom>=this.minZoom&&e.minCurrZoom<=this.maxZoom?(this._fadingOpacity+=this._fadingFactor,(this._fadingFactor>0&&this._fadingOpacity>this._opacity||this._fadingFactor<0&&this._fadingOpacity<this._opacity)&&(this._fadingOpacity=this._opacity),!1):(this._fadingOpacity=0,!this._visibility)}createMaterial(e){return new Pa(e,this)}redraw(){this._planet&&this._planet.quadTreeStrategy.clearLayerMaterial(this)}abortMaterialLoading(e){}abortLoading(){}}Oe.__counter__=0;const La=["visibilitychange","add","remove","mousemove","mouseenter","mouseleave","lclick","rclick","mclick","ldblclick","rdblclick","mdblclick","lup","rup","mup","ldown","rdown","mdown","lhold","rhold","mhold","mousewheel","touchmove","touchstart","touchend","doubletouch","touchleave","touchenter"],Ba=["load","loadend"];class Ie extends Oe{constructor(e,t){super(e,t),this.events=this.events.registerNames(Ba),this.animated=t.animated||!1,this.minNativeZoom=t.minNativeZoom||0,this.maxNativeZoom=t.maxNativeZoom||100,this._counter=0,this._pendingsQueue=[],this.drawTile=t.drawTile,this._onLoadend_=null}addTo(e){return this._onLoadend_=this._onLoadend.bind(this),this.events.on("loadend",this._onLoadend_,this),super.addTo(e)}remove(){return this.events.off("loadend",this._onLoadend_),this._onLoadend_=null,super.remove()}_onLoadend(){this._planet&&this._planet._terrainCompletedActivated&&this._planet.events.dispatch(this._planet.events.layerloadend,this)}get instanceName(){return"CanvasTiles"}get isIdle(){return super.isIdle&&this._counter===0}abortLoading(){this._pendingsQueue.forEach(e=>{this.abortMaterialLoading(e)}),this._pendingsQueue=[]}setVisibility(e){e!==this._visibility&&(super.setVisibility(e),e||this.abortLoading())}loadMaterial(e){let t=e.segment;this._isBaseLayer?e.texture=t._isNorth?t.planet.solidTextureOne:t.planet.solidTextureTwo:e.texture=t.planet.transparentTexture,(this._planet.layerLock.isFree()||e.segment.tileZoom<2)&&(e.isReady=!1,e.isLoading=!0,Ie.__requestsCounter>=Ie.MAX_REQUESTS&&this._counter?this._pendingsQueue.push(e):this._exec(e))}_exec(e){Ie.__requestsCounter++,this._counter++;const t=this.events.load;t.handlers.length&&this.events.dispatch(t,e),requestAnimationFrame(()=>{this.drawTile(e,i=>{this._counter--,Ie.__requestsCounter--,this._correctCounter(),e.isLoading&&e.applyImage(i),this._dequeueRequest()})})}_correctCounter(){this._counter<0&&(this._counter=0),Ie.__requestsCounter<0&&(Ie.__requestsCounter=0)}abortMaterialLoading(e){e.isLoading&&(this._counter--,Ie.__requestsCounter--,this._correctCounter(),this._dequeueRequest()),e.isLoading=!1,e.isReady=!1}_dequeueRequest(){if(this._pendingsQueue.length){if(Ie.__requestsCounter<Ie.MAX_REQUESTS){const e=this._whilePendings();e&&this._exec(e)}}else this._counter===0&&this._planet&&this._planet._terrainCompletedActivated&&this.events.dispatch(this.events.loadend)}_whilePendings(){for(;this._pendingsQueue.length;){const e=this._pendingsQueue.pop();if(e&&e.segment&&e.segment.node){if(e.segment.initialized&&e.segment.node.getState()===$e)return e;e.isLoading=!1}}return null}applyMaterial(e){if(e.isReady)return e.layer.animated&&requestAnimationFrame(()=>{this.drawTile(e,function(t){e.applyImage(t)})}),e.texOffset;if(e.segment.tileZoom<this.minNativeZoom)e.textureNotExists();else{let t=e.segment,i=t.node,r=!1,s=e.layer.maxNativeZoom;t.passReady&&!e.isLoading&&t.tileZoom<=s&&this.loadMaterial(e);let n=this._id,a=e;for(;i.parentNode;)if(i=i.parentNode,a=i.segment.materials[n],a&&a.textureExists){r=!0;break}if(t.passReady){if(i.segment.tileZoom===s)t.tileZoom>s&&e.textureNotExists();else if(i.segment.tileZoom<s){let o=t.node;for(;o.segment.tileZoom>s;)o=o.parentNode;let l=o.segment.materials[n];l?!l.isLoading&&!l.isReady&&this.loadMaterial(l):(l=o.segment.materials[e.layer._id]=e.layer.createMaterial(o.segment),this.loadMaterial(l))}}if(r){e.layer.animated&&requestAnimationFrame(()=>{this.drawTile(e,function(l){e.applyImage(l)})}),e.appliedNodeId=i.nodeId,e.texture=a.texture;let o=1/(2<<t.tileZoom-i.segment.tileZoom-1);e.texOffset[0]=t.tileX*o-i.segment.tileX,e.texOffset[1]=t.tileY*o-i.segment.tileY,e.texOffset[2]=o,e.texOffset[3]=o}else e.texture=t.planet.transparentTexture,e.texOffset[0]=0,e.texOffset[1]=0,e.texOffset[2]=1,e.texOffset[3]=1}return e.texOffset}clearMaterial(e){e.isReady&&(e.isReady=!1,e.textureExists&&e.texture&&!e.texture.default&&(e.segment.handler.gl.deleteTexture(e.texture),e.texture=null)),this.abortMaterialLoading(e),e.isLoading=!1,e.textureExists=!1,e.layer=null,e.segment=null}}Ie.MAX_REQUESTS=20,Ie.__requestsCounter=0;class er{constructor(e=2,t){this._sourceId=0,this._source=new Map,this._pendingQueue=[],this._numWorkers=e,this._workerQueue=[],t&&this.setProgram(t)}check(){this._pendingQueue.length&&this.make(this._pendingQueue.pop())}setProgram(e){let t=new Blob([e],{type:"application/javascript"});for(let i=0;i<this._numWorkers;i++){let r=new Worker(URL.createObjectURL(t));r.onmessage=s=>{this._onMessage(s),this._workerQueue&&this._workerQueue.unshift(s.target),this.check()},this._workerQueue.push(r)}}make(e){}_onMessage(e){}destroy(){for(let e=0;e<this._workerQueue.length;e++){const t=this._workerQueue[e];t.onmessage=null,t.terminate()}this._pendingQueue=null,this._workerQueue=null}get pendingQueue(){return this._pendingQueue}}const Ae=-2,ae=-1;class Ma extends er{constructor(e=4){super(e,Ra)}_onMessage(e){let t=this._source.get(e.data.id);t.label._lockId===Ae?requestAnimationFrame(()=>{this.make({handler:t.handler,label:t.label})}):t.handler.workerCallback(e.data,t.label),this._source.delete(e.data.id)}make(e){let t=e.label;if(e.handler._entityCollection){let r=t.serializeWorkerData(this._sourceId);if(r)if(this._workerQueue.length){let s=this._workerQueue.pop();this._source.set(this._sourceId,e),t._lockId=this._sourceId,this._sourceId++,s.postMessage({labelData:r},[r.buffer])}else this._pendingQueue.push(e)}}}const Ra=`'use strict';
|
|
87
|
+
</div>>`;class Qi extends Pe{constructor(e={}){super({template:Et(Ta,{title:e.title||"",display:Yi(e.visible,!0)?"flex":"none",resize:Yi(e.resizable,!0)?"both":"none",width:e.width||300,height:e.height?`height: ${e.height||200}px`:"",left:e.left||0,top:e.top||0,minHeight:e.minHeight?`${e.minHeight}px`:"unset",maxHeight:e.maxHeight?`${e.maxHeight}px`:"unset",minWidth:e.minWidth?`${e.minWidth}px`:"unset",maxWidth:e.maxWidth?`${e.maxWidth}px`:"unset"}),...e}),this._onCloseBtnClick=()=>{this.close()},this._onMouseDownAll=()=>{this.bringToFront()},this._onMouseDown=t=>{t.preventDefault(),this._startDragging(),this._startPosX=t.clientX,this._startPosY=t.clientY,document.addEventListener("mousemove",this._onMouseMove),document.addEventListener("mouseup",this._onMouseUp)},this._onMouseMove=t=>{t.preventDefault();let i=this._startPosX-t.clientX,r=this._startPosY-t.clientY;this._startPosX=t.clientX,this._startPosY=t.clientY,this.setPosition(this.el.offsetLeft-i,this.el.offsetTop-r)},this._onMouseUp=()=>{this._clearDragging(),document.removeEventListener("mouseup",this._onMouseUp),document.removeEventListener("mousemove",this._onMouseMove)},this.events=this.events.registerNames(wa),this._startPosX=0,this._startPosY=0,this.$header=null,this.$title=null,this.$container=null,this.$buttons=null,this._closeBtn=new gi({icon:ba,classList:["og-button-size__20"]}),this.useHide=e.useHide||!1,this._visibility=Yi(e.visible,!0)}setContainer(e){this.$container.innerHTML=e}get container(){return this.$container}get width(){return this.el?parseFloat(this.el.style.width):0}get height(){return this.el?parseFloat(this.el.style.height):0}bringToFront(){this.el.style.zIndex=String(Qi.__zIndex__++)}render(e){return super.render(e),this.bringToFront(),this.$header=this.select(".og-ddialog-header"),this.$title=this.select(".og-ddialog-header__title"),this.$container=this.select(".og-ddialog-container"),this.$buttons=this.select(".og-ddialog-header__buttons"),this._initEvents(),this._initButtons(),this}show(){this._visibility||(this._visibility=!0,this.el.style.display="flex",this.bringToFront(),this.events.dispatch(this.events.visibility,!0,this))}hide(){this._visibility&&(this._visibility=!1,this.el.style.display="none",this.events.dispatch(this.events.visibility,!1,this))}close(){this.useHide?this.hide():this.remove()}setVisibility(e){e?this.show():this.hide()}_initButtons(){this._closeBtn.events.on("click",this._onCloseBtnClick),this._closeBtn.appendTo(this.$buttons)}_initEvents(){this.$header.addEventListener("mousedown",this._onMouseDown),this.el.addEventListener("mousedown",this._onMouseDownAll)}setPosition(e,t){e!=null&&(this.el.style.left=`${e}px`),t!=null&&(this.el.style.top=`${t}px`)}_startDragging(){this.el.classList.contains("dragging")||(this.el.classList.add("dragging"),this.events.dispatch(this.events.dragstart,this))}_clearDragging(){this.el.classList.contains("dragging")&&(this.events.dispatch(this.events.dragend,this),this.el.classList.remove("dragging"))}remove(){this._clearDragging(),this._clearEvents(),super.remove()}_clearEvents(){this._closeBtn.events.off("click",this._onCloseBtnClick),document.removeEventListener("mouseup",this._onMouseUp),document.removeEventListener("mousemove",this._onMouseMove),this.$header.removeEventListener("mousedown",this._onMouseDown),this.el.removeEventListener("mousedown",this._onMouseDownAll)}}Qi.__zIndex__=0;const Jr=3570,Aa=1e3,$=0,ue=1,_e=2,ge=3,K=0,te=1,Q=2,ie=3,De=0,$e=1,es=2,Ot=[Q,ie,K,te],ts=[[-1,-1,$,ue],[ue,-1,ge,-1],[_e,ge,-1,-1],[-1,$,-1,_e]],Ea=[[_e,ge,$,ue],[ue,$,ge,_e],[_e,ge,$,ue],[ue,$,ge,_e]],Ca=[[0,1,0,0],[1,0,0,0],[0,1,0,1],[1,1,1,1]];class Pa{constructor(e,t){this.segment=e,this.layer=t,this.isReady=!1,this.isLoading=!1,this.texture=null,this.pickingMask=null,this.textureExists=!1,this.appliedNodeId=0,this.appliedNode=null,this.texOffset=[0,0,1,1],this.loadingAttempts=0,this._updateTexture=null,this._updatePickingMask=null,this.pickingReady=!1}abortLoading(){this.layer.abortMaterialLoading(this)}_createTexture(e){return this.layer._planet&&this.layer.createTexture(e,this.layer._internalFormat,this.isReady?this.texture:null)}applyImage(e){this.segment.initialized&&(this._updateTexture=null,this.texture=this._createTexture(e),this.isReady=!0,this.pickingReady=!0,this.textureExists=!0,this.isLoading=!1,this.appliedNodeId=this.segment.node.nodeId,this.texOffset=[0,0,1,1])}applyTexture(e,t){this.segment.initialized&&(this.texture=e,this._updateTexture=null,this.pickingMask=t||null,this._updatePickingMask=null,this.isReady=!0,this.pickingReady=!0,this.textureExists=!0,this.isLoading=!1,this.appliedNodeId=this.segment.node.nodeId,this.texOffset=[0,0,1,1])}textureNotExists(){this.segment.initialized&&(this.pickingReady=!0,this.isLoading=!1,this.isReady=!0,this.textureExists=!1)}clear(){this.loadingAttempts=0,this.layer.clearMaterial(this)}}const Ji=15.8;class Oe{constructor(e,t={}){if(this.isVector=!1,this.__id=Oe.__counter__++,this.events=We(La,this),this.name=e||"noname",this.properties=t.properties||{},this.displayInLayerSwitcher=t.displayInLayerSwitcher!==void 0?t.displayInLayerSwitcher:!0,this._hasImageryTiles=!0,this._opacity=t.opacity||1,this.minZoom=t.minZoom||0,this.maxZoom=t.maxZoom||50,this._planet=null,this.isVector=!1,this._attribution=t.attribution||"",this._zIndex=t.zIndex||0,this._isBaseLayer=t.isBaseLayer||!1,this._defaultTextures=t.defaultTextures||[null,null],this._visibility=t.visibility!==void 0?t.visibility:!0,this._fading=t.fading||!1,this._fadingFactor=this._opacity/Ji,this._fading?this._fadingOpacity=this._visibility?this._opacity:0:this._fadingOpacity=this._opacity,this._height=t.height||0,this._extent=new U,this.createTexture=null,this._textureFilter=t.textureFilter?t.textureFilter.trim().toUpperCase():"MIPMAP",this._isSRGB=t.isSRGB!=null?t.isSRGB:!1,this._internalFormat=null,this._extentMerc=new U,this.setExtent(jr(t.extent,new U(new B(-180,-90),new B(180,90)))),this._pickingColor=new p,this._pickingEnabled=t.pickingEnabled!==void 0?t.pickingEnabled:!0,this._isPreloadDone=!1,this._preLoadZoomLevels=t.preLoadZoomLevels||[0,1],this._ambient=null,this._diffuse=null,this._specular=null,t.ambient){let i=Se(t.ambient,new p(.2,.2,.2));this._ambient=new Float32Array([i.x,i.y,i.z])}if(t.diffuse){let i=Se(t.diffuse,new p(.8,.8,.8));this._diffuse=new Float32Array([i.x,i.y,i.z])}if(t.specular){let i=Se(t.specular,new p(3e-4,3e-4,3e-4)),r=t.shininess||20;this._specular=new Float32Array([i.x,i.y,i.z,r])}this.nightTextureCoefficient=t.nightTextureCoefficient||1}set diffuse(e){if(e){let t=Se(e);this._diffuse=new Float32Array(t.toArray())}else this._diffuse=null}set ambient(e){if(e){let t=Se(e);this._ambient=new Float32Array(t.toArray())}else this._ambient=null}set specular(e){if(e){let t=Se(e);this._specular=new Float32Array([t.x,t.y,t.y,this._specular?this._specular[3]:0])}else this._specular=null}set shininess(e){this._specular&&(this._specular[3]=e)}static getTMS(e,t,i){return{x:e,y:(1<<i)-t-1,z:i}}static getTileIndex(...e){return e.join("_")}get instanceName(){return"Layer"}get rendererEvents(){return this.events}set opacity(e){e!==this._opacity&&(this._fading?e>this._opacity?this._fadingFactor=(e-this._opacity)/Ji:e<this._opacity&&(this._fadingFactor=(e-this._opacity)/Ji):this._fadingOpacity=e,this._opacity=e)}set pickingEnabled(e){this._pickingEnabled=e}get pickingEnabled(){return this._pickingEnabled}hasImageryTiles(){return this._hasImageryTiles}getID(){return this.__id}get id(){return this.__id}get _id(){return this.__id}isEqual(e){return e.__id===this.__id}_assignPlanet(e){this._planet=e,e._layers.push(this),e.renderer&&e.renderer.isInitialized()&&(this._isSRGB?this._internalFormat=e.renderer.handler.gl.SRGB8_ALPHA8:this._internalFormat=e.renderer.handler.gl.RGBA8,this.createTexture=e.renderer.handler.createTexture[this._textureFilter],this.events.on("visibilitychange",e._onLayerVisibilityChanged,e),this._isBaseLayer&&this._visibility&&e.setBaseLayer(this),e.events.dispatch(e.events.layeradd,this),this.events.dispatch(this.events.add,e),e.updateVisibleLayers(),this._bindPicking(),this._visibility&&this.hasImageryTiles()&&this._preLoad())}get isIdle(){return this._planet&&this._planet._terrainCompletedActivated||!1}_bindPicking(){this._planet&&this._planet.renderer&&this._planet.renderer.assignPickingColor(this)}addTo(e){this._planet||this._assignPlanet(e)}remove(){let e=this._planet;if(e){for(let t=0;t<e._layers.length;t++)if(this.isEqual(e._layers[t]))return e.renderer&&e.renderer.clearPickingColor(this),e._layers.splice(t,1),e.updateVisibleLayers(),this.clear(),e.events.dispatch(e.events.layerremove,this),this.events.dispatch(this.events.remove,e),this._planet=null,this._internalFormat=null,this.createTexture=null,this}return this}clear(){this._planet&&this._planet._clearLayerMaterial(this)}get planet(){return this._planet}setAttribution(e){this._attribution!==e&&(this._attribution=e,this._planet&&this._planet.updateAttributionsList())}getAttribution(){return this._attribution}setHeight(e){this._height=e,this._planet&&this._planet.updateVisibleLayers()}getHeight(){return this._height}setZIndex(e){this._zIndex=e,this._planet&&this._planet.updateVisibleLayers()}getZIndex(){return this._zIndex}bringToFront(){if(this._planet){let e=this._planet.visibleTileLayers,t=e[e.length-1];t.isEqual(this)||this.setZIndex(t.getZIndex()+1)}}isBaseLayer(){return this._isBaseLayer}setBaseLayer(e){this._isBaseLayer=e,this._planet&&(!e&&this._planet.baseLayer&&this.isEqual(this._planet.baseLayer)&&(this._planet.baseLayer=null),this._planet.updateVisibleLayers())}setVisibility(e){e!==this._visibility&&(this._visibility=e,this._planet&&(this._isBaseLayer&&e&&this._planet.setBaseLayer(this),this._planet.updateVisibleLayers(),e&&!this._isPreloadDone&&!this.isVector&&(this._isPreloadDone=!0,this._preLoad())),this.events.dispatch(this.events.visibilitychange,this))}_forceMaterialApply(e){let t=e.materials,i=t[this.__id];i||(i=t[this.__id]=this.createMaterial(e)),i.isReady||(this._planet._renderCompleted=!1),this.applyMaterial(i,!0)}clearMaterial(e){}loadMaterial(e,t=!1){}applyMaterial(e,t=!1){return[0,0,1,1]}_preLoadRecursive(e,t){if(!(e.segment.tileZoom>t)){this._preLoadZoomLevels.includes(e.segment.tileZoom)&&this._forceMaterialApply(e.segment);for(let i=0,r=e.nodes.length;i<r;i++)e.nodes[i]&&this._preLoadRecursive(e.nodes[i],t)}}_preLoad(){if(this._planet&&this._preLoadZoomLevels.length){let e=this._planet,t=Math.max(...this._preLoadZoomLevels);for(let i=0,r=e.quadTreeStrategy.quadTreeList.length;i<r;i++)this._preLoadRecursive(e.quadTreeStrategy.quadTreeList[i],t)}}getVisibility(){return this._visibility}setExtent(e){let t=e.southWest.clone(),i=e.northEast.clone();t.lat<Re&&(t.lat=Re),i.lat>ce&&(i.lat=ce),this._extent=e.clone(),this._extentMerc=new U(t.forwardMercator(),i.forwardMercator()),this._correctFullExtent()}getExtent(){return this._extent}getExtentMerc(){return this._extentMerc}_correctFullExtent(){}get opacity(){return this._opacity}get screenOpacity(){return this._fading?this._fadingOpacity:this._opacity}_refreshFadingOpacity(){let e=this._planet;return this._visibility&&e.getViewExtent().overlaps(this._extent)&&e.maxCurrZoom>=this.minZoom&&e.minCurrZoom<=this.maxZoom?(this._fadingOpacity+=this._fadingFactor,(this._fadingFactor>0&&this._fadingOpacity>this._opacity||this._fadingFactor<0&&this._fadingOpacity<this._opacity)&&(this._fadingOpacity=this._opacity),!1):(this._fadingOpacity=0,!this._visibility)}createMaterial(e){return new Pa(e,this)}redraw(){this._planet&&this._planet.quadTreeStrategy.clearLayerMaterial(this)}abortMaterialLoading(e){}abortLoading(){}}Oe.__counter__=0;const La=["visibilitychange","add","remove","mousemove","mouseenter","mouseleave","lclick","rclick","mclick","ldblclick","rdblclick","mdblclick","lup","rup","mup","ldown","rdown","mdown","lhold","rhold","mhold","mousewheel","touchmove","touchstart","touchend","doubletouch","touchleave","touchenter"],Ba=["load","loadend"];class Ie extends Oe{constructor(e,t){super(e,t),this.events=this.events.registerNames(Ba),this.animated=t.animated||!1,this.minNativeZoom=t.minNativeZoom||0,this.maxNativeZoom=t.maxNativeZoom||100,this._counter=0,this._pendingsQueue=[],this.drawTile=t.drawTile,this._onLoadend_=null}addTo(e){return this._onLoadend_=this._onLoadend.bind(this),this.events.on("loadend",this._onLoadend_,this),super.addTo(e)}remove(){return this.events.off("loadend",this._onLoadend_),this._onLoadend_=null,super.remove()}_onLoadend(){this._planet&&this._planet._terrainCompletedActivated&&this._planet.events.dispatch(this._planet.events.layerloadend,this)}get instanceName(){return"CanvasTiles"}get isIdle(){return super.isIdle&&this._counter===0}abortLoading(){this._pendingsQueue.forEach(e=>{this.abortMaterialLoading(e)}),this._pendingsQueue=[]}setVisibility(e){e!==this._visibility&&(super.setVisibility(e),e||this.abortLoading())}loadMaterial(e){let t=e.segment;this._isBaseLayer?e.texture=t._isNorth?t.planet.solidTextureOne:t.planet.solidTextureTwo:e.texture=t.planet.transparentTexture,(this._planet.layerLock.isFree()||e.segment.tileZoom<2)&&(e.isReady=!1,e.isLoading=!0,Ie.__requestsCounter>=Ie.MAX_REQUESTS&&this._counter?this._pendingsQueue.push(e):this._exec(e))}_exec(e){Ie.__requestsCounter++,this._counter++;const t=this.events.load;t.handlers.length&&this.events.dispatch(t,e),requestAnimationFrame(()=>{this.drawTile(e,i=>{this._counter--,Ie.__requestsCounter--,this._correctCounter(),e.isLoading&&e.applyImage(i),this._dequeueRequest()})})}_correctCounter(){this._counter<0&&(this._counter=0),Ie.__requestsCounter<0&&(Ie.__requestsCounter=0)}abortMaterialLoading(e){e.isLoading&&(this._counter--,Ie.__requestsCounter--,this._correctCounter(),this._dequeueRequest()),e.isLoading=!1,e.isReady=!1}_dequeueRequest(){if(this._pendingsQueue.length){if(Ie.__requestsCounter<Ie.MAX_REQUESTS){const e=this._whilePendings();e&&this._exec(e)}}else this._counter===0&&this._planet&&this._planet._terrainCompletedActivated&&this.events.dispatch(this.events.loadend)}_whilePendings(){for(;this._pendingsQueue.length;){const e=this._pendingsQueue.pop();if(e&&e.segment&&e.segment.node){if(e.segment.initialized&&e.segment.node.getState()===$e)return e;e.isLoading=!1}}return null}applyMaterial(e){if(e.isReady)return e.layer.animated&&requestAnimationFrame(()=>{this.drawTile(e,function(t){e.applyImage(t)})}),e.texOffset;if(e.segment.tileZoom<this.minNativeZoom)e.textureNotExists();else{let t=e.segment,i=t.node,r=!1,s=e.layer.maxNativeZoom;t.passReady&&!e.isLoading&&t.tileZoom<=s&&this.loadMaterial(e);let n=this._id,a=e;for(;i.parentNode;)if(i=i.parentNode,a=i.segment.materials[n],a&&a.textureExists){r=!0;break}if(t.passReady){if(i.segment.tileZoom===s)t.tileZoom>s&&e.textureNotExists();else if(i.segment.tileZoom<s){let o=t.node;for(;o.segment.tileZoom>s;)o=o.parentNode;let l=o.segment.materials[n];l?!l.isLoading&&!l.isReady&&this.loadMaterial(l):(l=o.segment.materials[e.layer._id]=e.layer.createMaterial(o.segment),this.loadMaterial(l))}}if(r){e.layer.animated&&requestAnimationFrame(()=>{this.drawTile(e,function(l){e.applyImage(l)})}),e.appliedNodeId=i.nodeId,e.texture=a.texture;let o=1/(2<<t.tileZoom-i.segment.tileZoom-1);e.texOffset[0]=t.tileX*o-i.segment.tileX,e.texOffset[1]=t.tileY*o-i.segment.tileY,e.texOffset[2]=o,e.texOffset[3]=o}else e.texture=t.planet.transparentTexture,e.texOffset[0]=0,e.texOffset[1]=0,e.texOffset[2]=1,e.texOffset[3]=1}return e.texOffset}clearMaterial(e){e.isReady&&(e.isReady=!1,e.textureExists&&e.texture&&!e.texture.default&&(e.segment.handler.gl.deleteTexture(e.texture),e.texture=null)),this.abortMaterialLoading(e),e.isLoading=!1,e.textureExists=!1,e.layer=null,e.segment=null}}Ie.MAX_REQUESTS=20,Ie.__requestsCounter=0;class er{constructor(e=2,t){this._sourceId=0,this._source=new Map,this._pendingQueue=[],this._numWorkers=e,this._workerQueue=[],t&&this.setProgram(t)}check(){this._pendingQueue.length&&this.make(this._pendingQueue.pop())}setProgram(e){let t=new Blob([e],{type:"application/javascript"});for(let i=0;i<this._numWorkers;i++){let r=new Worker(URL.createObjectURL(t));r.onmessage=s=>{this._onMessage(s),this._workerQueue&&this._workerQueue.unshift(s.target),this.check()},this._workerQueue.push(r)}}make(e){}_onMessage(e){}destroy(){for(let e=0;e<this._workerQueue.length;e++){const t=this._workerQueue[e];t.onmessage=null,t.terminate()}this._pendingQueue=null,this._workerQueue=null}get pendingQueue(){return this._pendingQueue}}const Ae=-2,ae=-1;class Ma extends er{constructor(e=4){super(e,Ra)}_onMessage(e){let t=this._source.get(e.data.id);t.label._lockId===Ae?requestAnimationFrame(()=>{this.make({handler:t.handler,label:t.label})}):t.handler.workerCallback(e.data,t.label),this._source.delete(e.data.id)}make(e){let t=e.label;if(e.handler._entityCollection){let r=t.serializeWorkerData(this._sourceId);if(r)if(this._workerQueue.length){let s=this._workerQueue.pop();this._source.set(this._sourceId,e),t._lockId=this._sourceId,this._sourceId++,s.postMessage({labelData:r},[r.buffer])}else this._pendingQueue.push(e)}}}const Ra=`'use strict';
|
|
88
88
|
|
|
89
89
|
function concatTypedArrays(dest, index, source) {
|
|
90
90
|
let len = source.length,
|
|
@@ -203,8 +203,8 @@
|
|
|
203
203
|
_outlineColorArr.buffer,
|
|
204
204
|
_pickingColorArr.buffer
|
|
205
205
|
]);
|
|
206
|
-
}`;class Ut{constructor(e={}){this.__id=Ut.__counter__++,this._position=lt(e.position),this._positionHigh=new p,this._positionLow=new p,p.doubleToTwoFloats(this._position,this._positionHigh,this._positionLow),this._rotation=e.rotation||0,this._color=qe(e.color),this._alignedAxis=lt(e.alignedAxis),this._offset=lt(e.offset),this._visibility=e.visibility!=null?e.visibility:!0,this._entity=null,this._handler=null,this._handlerIndex=-1,this._isReady=!1,this._lockId=ae}setPosition(e,t,i){this._position.x=e,this._position.y=t,this._position.z=i,p.doubleToTwoFloats(this._position,this._positionHigh,this._positionLow),this._isReady&&this._handler?this._handler.setPositionArr(this._handlerIndex,this._positionHigh,this._positionLow):this._lockId!==ae&&(this._lockId=Ae)}setPosition3v(e){this._position.x=e.x,this._position.y=e.y,this._position.z=e.z,p.doubleToTwoFloats(e,this._positionHigh,this._positionLow),this._isReady&&this._handler?this._handler.setPositionArr(this._handlerIndex,this._positionHigh,this._positionLow):this._lockId!==ae&&(this._lockId=Ae)}getPosition(){return this._position}setOffset(e,t,i){this._offset.x=e,this._offset.y=t,i!=null&&(this._offset.z=i),this._isReady&&this._handler?this._handler.setOffsetArr(this._handlerIndex,this._offset):this._lockId!==ae&&(this._lockId=Ae)}setOffset3v(e){this.setOffset(e.x,e.y,e.z)}getOffset(){return this._offset}setRotation(e){e!==this._rotation&&(this._rotation=e,this._isReady&&this._handler?this._handler.setRotationArr(this._handlerIndex,e):this._lockId!==ae&&(this._lockId=Ae))}getRotation(){return this._rotation}setOpacity(e){e!==this._color.w&&(e!=null&&(this._color.w=e),this._isReady&&this._handler?this._handler.setRgbaArr(this._handlerIndex,this._color):this._lockId!==ae&&(this._lockId=Ae))}setColor(e,t,i,r){(r!==this._color.w||e!==this._color.x||t!==this._color.y||this._color.z!==i)&&(this._color.x=e,this._color.y=t,this._color.z=i,r!=null&&(this._color.w=r),this._isReady&&this._handler?this._handler.setRgbaArr(this._handlerIndex,this._color):this._lockId!==ae&&(this._lockId=Ae))}setColor4v(e){this.setColor(e.x,e.y,e.z,e.w)}setColorHTML(e){this.setColor4v(ot(e))}getColor(){return this._color}setVisibility(e){e!==this._visibility&&(this._visibility=e,this._isReady&&this._handler?this._handler.setVisibility(this._handlerIndex,e):this._lockId!==ae&&(this._lockId=Ae))}getVisibility(){return this._visibility}setAlignedAxis(e,t,i){this._alignedAxis.x=e,this._alignedAxis.y=t,this._alignedAxis.z=i,this._isReady&&this._handler?this._handler.setAlignedAxisArr(this._handlerIndex,this._alignedAxis):this._lockId!==ae&&(this._lockId=Ae)}setAlignedAxis3v(e){this.setAlignedAxis(e.x,e.y,e.z)}getAlignedAxis(){return this._alignedAxis}remove(){this._entity=null,this._handler&&this._handler.remove(this)}setPickingColor3v(e){this._isReady&&this._handler?this._handler.setPickingColorArr(this._handlerIndex,e):this._lockId!==ae&&(this._lockId=Ae)}serializeWorkerData(e){return this._handler?new Float32Array([]):null}}Ut.__counter__=0;class Sa extends Ut{constructor(e={}){super(e),this._handler=null,this._src=e.src||null,this._image=e.image||null,this._scale=1,this._width=e.width||(e.size?e.size[0]:30),this._height=e.height||(e.size?e.size[1]:30)}setSrc(e){this._src=e;let t=this._handler;if(t&&e&&e.length){let i=t._entityCollection.renderNode;if(i&&i.renderer){let r=i.renderer.billboardsTextureAtlas,s=this;r.loadImage(e,function(n){n.__nodeIndex!=null&&r.get(n.__nodeIndex)?(s._image=n,t.setTexCoordArr(s._handlerIndex,r.get(s._image.__nodeIndex).texCoords)):(r.addImage(n),r.createTexture(),s._image=n,i.updateBillboardsTexCoords())})}}}getSrc(){return this._src}setImage(e){this.setSrc(e.src)}getImage(){return this._image}setSize(e,t){this._width=e,this._height=t,this._handler&&this._handler.setSizeArr(this._handlerIndex,e*this._scale,t*this._scale)}getSize(){return{width:this._width,height:this._height}}setWidth(e){this.setSize(e,this._height)}getWidth(){return this._width}setHeight(e){this.setSize(this._width,e)}getHeight(){return this._height}}const Ne={POINT:1,LINESTRING:2,POLYGON:3,MULTIPOLYGON:4,MULTILINESTRING:5};class Xe{constructor(e={}){this.__id=Xe.__counter__++,this._entity=null,this._handler=null,this._handlerIndex=-1,this._polyVerticesHighMerc=[],this._polyVerticesLowMerc=[],this._polyVerticesLength=-1,this._polyIndexesLength=-1,this._polyVerticesHandlerIndex=-1,this._polyIndexesHandlerIndex=-1,this._lineVerticesHighMerc=[],this._lineVerticesLowMerc=[],this._lineVerticesLength=-1,this._lineOrdersLength=-1,this._lineIndexesLength=-1,this._lineColorsLength=-1,this._lineThicknessLength=-1,this._lineVerticesHandlerIndex=-1,this._lineOrdersHandlerIndex=-1,this._lineIndexesHandlerIndex=-1,this._lineThicknessHandlerIndex=-1,this._lineColorsHandlerIndex=-1,this._type=e.type&&Xe.getType(e.type)||Ne.POINT,this._coordinates=[],this._extent=Xe.getExtent({type:e.type||"Point",coordinates:e.coordinates||[]},this._coordinates),e.style=e.style||{},this._style={fillColor:qe(e.style.fillColor,new J(.19,.62,.85,.4)),lineColor:qe(e.style.lineColor,new J(.19,.62,.85,1)),strokeColor:qe(e.style.strokeColor,new J(1,1,1,.95)),lineWidth:e.style.lineWidth||3,strokeWidth:e.style.strokeWidth||0},this._visibility=e.visibility||!0,this._pickingReady=!1}get id(){return this.__id}get type(){return this._type}static getType(e){return Ne[e.toUpperCase()]}static getExtent(e,t){let i=new U(new B(180,90),new B(-180,-90)),r=Xe.getType(e.type);if(r===Ne.POINT){let s=e.coordinates[0],n=e.coordinates[1];i.southWest.lon=s,i.southWest.lat=n,i.northEast.lon=s,i.northEast.lat=n,t&&(t[0]=s)&&(t[1]=n)}else if(r===Ne.LINESTRING){let s=e.coordinates;for(let n=0;n<s.length;n++){let a=s[n][0],o=s[n][1];a<i.southWest.lon&&(i.southWest.lon=a),o<i.southWest.lat&&(i.southWest.lat=o),a>i.northEast.lon&&(i.northEast.lon=a),o>i.northEast.lat&&(i.northEast.lat=o),t&&(t[n]=[a,o])}}else if(r===Ne.POLYGON){let s=e.coordinates;for(let n=0;n<s.length;n++){let a=s[n];t&&(t[n]=[]);for(let o=0;o<a.length;o++){let l=a[o],h=l[0],d=l[1];h<i.southWest.lon&&(i.southWest.lon=h),d<i.southWest.lat&&(i.southWest.lat=d),h>i.northEast.lon&&(i.northEast.lon=h),d>i.northEast.lat&&(i.northEast.lat=d),t&&(t[n][o]=[h,d])}}}else if(r===Ne.MULTIPOLYGON){let s=e.coordinates;for(let n=0;n<s.length;n++){let a=s[n];t&&(t[n]=[]);for(let o=0;o<a.length;o++){let l=a[o];t&&(t[n][o]=[]);for(let h=0;h<l.length;h++){let d=l[h],f=d[0],u=d[1];f<i.southWest.lon&&(i.southWest.lon=f),u<i.southWest.lat&&(i.southWest.lat=u),f>i.northEast.lon&&(i.northEast.lon=f),u>i.northEast.lat&&(i.northEast.lat=u),t&&(t[n][o][h]=[f,u])}}}}else if(r===Ne.MULTILINESTRING){let s=e.coordinates;for(let n=0;n<s.length;n++){let a=s[n];t&&(t[n]=[]);for(let o=0;o<a.length;o++){let l=a[o],h=l[0],d=l[1];h<i.southWest.lon&&(i.southWest.lon=h),d<i.southWest.lat&&(i.southWest.lat=d),h>i.northEast.lon&&(i.northEast.lon=h),d>i.northEast.lat&&(i.northEast.lat=d),t&&(t[n][o]=[h,d])}}}else i.southWest.lon=i.southWest.lat=i.northEast.lon=i.northEast.lat=0,t&&(t[0]=0)&&(t[1]=0);return i}setGeometry(e){let t=this._handler;return t&&(this.remove(),this._type=Xe.getType(e.type||"Point"),this._extent=Xe.getExtent(e,this._coordinates),t.add(this)),this}setFillColor(e,t,i,r=1){let s=this._style.fillColor;return(s.w===0&&r!==0||s.w!==0&&r===0)&&(this._pickingReady=!1),s.x=e,s.y=t,s.z=i,s.w=r,this._handler&&this._handler.setPolyColorArr(this,s),this}overlaps(e){return this._extent.overlaps(e)}setFillColor4v(e){return this.setFillColor(e.x,e.y,e.z,e.w)}setStrokeColor(e,t,i,r=1){let s=this._style.strokeColor;return(s.w===0&&r!==0||s.w!==0&&r===0)&&(this._pickingReady=!1),s.x=e,s.y=t,s.z=i,s.w=r,this._handler&&this._handler.setLineStrokeColorArr(this,s),this}setLineColor(e,t,i,r=1){let s=this._style.lineColor;return(s.w===0&&r!==0||s.w!==0&&r===0)&&(this._pickingReady=!1),s.x=e,s.y=t,s.z=i,s.w=r,this._handler&&this._handler.setLineColorArr(this,s),this}setStrokeColor4v(e){return this.setStrokeColor(e.x,e.y,e.z,e.w)}setLineColor4v(e){return this.setLineColor(e.x,e.y,e.z,e.w)}setStrokeOpacity(e){let t=this._style.strokeColor;return t.w=e,this.setStrokeColor(t.x,t.y,t.z,e)}setLineOpacity(e){let t=this._style.lineColor;return t.w=e,this.setLineColor(t.x,t.y,t.z,e)}setStrokeWidth(e){return this._style.strokeWidth=e,this._pickingReady=!1,this._handler&&this._handler.setLineStrokeArr(this,e),this}bringToFront(){return this._handler&&this._handler.bringToFront(this),this}setLineWidth(e){return this._style.lineWidth=e,this._pickingReady=!1,this._handler&&this._handler.setLineThicknessArr(this,e),this}setFillOpacity(e){let t=this._style.fillColor;return(t.w===0&&e!==0||t.w!==0&&e===0)&&(this._pickingReady=!1),t.w=e,this._handler&&this._handler.setPolyColorArr(this,t),this}setVisibility(e){return this._visibility=e,this._handler&&this._handler.setGeometryVisibility(this),this}getVisibility(){return this._visibility}remove(){this._handler&&this._handler.remove(this)}getExtent(){return this._extent.clone()}getType(){return this._type}}Xe.__counter__=0;class Ve{constructor(e,t){this.p0=e||new p,this.p1=t||new p}getMagnitude(){return this.p0.distance(this.p1)}getSphereIntersection(e){let t=this.p0,i=this.p1,r=e.center.x,s=e.center.y,n=e.center.z,a=t.x,o=t.y,l=t.z,h=i.x-a,d=i.y-o,f=i.z-l,u=h*h+d*d+f*f,g=2*(a*h+o*d+l*f-h*r-d*s-f*n),_=a*a-2*a*r+r*r+o*o-2*o*s+s*s+l*l-2*l*n+n*n-e.radius*e.radius,m=g*g-4*u*_;if(m<0)return[];let v=(-g-Math.sqrt(m))/(2*u),b=new p(t.x*(1-v)+v*i.x,t.y*(1-v)+v*i.y,t.z*(1-v)+v*i.z);if(m==0)return[b];let y=(-g+Math.sqrt(m))/(2*u),w=new p(t.x*(1-y)+y*i.x,t.y*(1-y)+y*i.y,t.z*(1-y)+y*i.z);return Math.abs(v-.5)<Math.abs(y-.5)?[b,w]:[w,b]}intersects(e,t,i){let r=this.p0.sub(e.p0),s=e.p1.sub(e.p0);if(Math.abs(s.x)<Ye&&Math.abs(s.y)<Ye&&Math.abs(s.z)<Ye)return!1;let n=this.p1.sub(this.p0);if(Math.abs(n.x)<Ye&&Math.abs(n.y)<Ye&&Math.abs(n.z)<Ye)return!1;let a=r.x*s.x+r.y*s.y+r.z*s.z,o=s.x*n.x+s.y*n.y+s.z*n.z,l=r.x*n.x+r.y*n.y+r.z*n.z,h=s.x*s.x+s.y*s.y+s.z*s.z,f=(n.x*n.x+n.y*n.y+n.z*n.z)*h-o*o;if(Math.abs(f)<Ye)return!1;let g=(a*o-l*h)/f;if(t.x=this.p0.x+g*n.x,t.y=this.p0.y+g*n.y,t.z=this.p0.z+g*n.z,i){let _=(a+o*g)/h;i.x=e.p0.x+_*s.x,i.y=e.p0.y+_*s.y,i.z=e.p0.z+_*s.z}return!0}getNearestDistancePoint(e,t){let i=this.p0,r=this.p1,s=this.getMagnitude(),n=((e.x-i.x)*(r.x-i.x)+(e.y-i.y)*(r.y-i.y)+(e.z-i.z)*(r.z-i.z))/(s*s);return t.x=i.x+n*(r.x-i.x),t.y=i.y+n*(r.y-i.y),t.z=i.z+n*(r.z-i.z),!(n<0||n>1)}}let se=class Ge{constructor(e=p.ZERO,t=p.ZERO){this.origin=e,this.direction=t}static get OUTSIDE(){return 0}static get INSIDE(){return 1}static get INPLANE(){return 2}static get AWAY(){return 3}set(e,t){return this.origin=e,this.direction=t,this}getPoint(e){return p.add(this.origin,this.direction.scaleTo(e))}hitTriangle(e,t,i,r){let s=t.sub(e),n=i.sub(e),a=s.cross(n),o=this.origin.sub(e),l=-a.dot(o),h=a.dot(this.direction);if(Math.abs(h)<Ye)return l===0?(r.copy(this.origin),Ge.INPLANE):Ge.OUTSIDE;let d=l/h;if(r.copy(this.origin.add(this.direction.scaleTo(d))),d<0)return Ge.AWAY;let f=s.dot(s),u=s.dot(n),g=n.dot(n),_=r.sub(e),m=_.dot(s),v=_.dot(n),b=u*u-f*g,y=(u*v-g*m)/b;if(y<0||y>1)return Ge.OUTSIDE;let w=(u*m-f*v)/b;return w<0||y+w>1?Ge.OUTSIDE:Ge.INSIDE}hitPlane(e,t,i,r){let s=p.sub(t,e),n=p.sub(i,e),a=s.cross(n),o=p.sub(this.origin,e),l=-a.dot(o),h=a.dot(this.direction);if(Math.abs(h)<Ye&&l===0)return Ge.OUTSIDE;let d=l/h;if(d<0)return Ge.OUTSIDE;let f=this.direction.scaleTo(d);return r.x=this.origin.x+f.x,r.y=this.origin.y+f.y,r.z=this.origin.z+f.z,Ge.INSIDE}hitSphere(e){let t=e.radius,i=e.center,r=this.origin,s=this.direction,n=p.sub(i,r);if(n.dot(s)<0){var a=n.length();if(a>t)return null;if(a===t)return r.clone();let h=i.projToRay(r,n);var o=p.sub(h,i).length();let f=Math.sqrt(t*t-o*o)-p.sub(h,r).length();return p.add(r,s.scaleTo(f))}else{let h=i.projToRay(r,s);var l=p.sub(i,h).length();if(l>e.radius)return null;{let d=Math.sqrt(t*t-l*l),f;return h.subA(r),n.length()>t?f=h.length()-d:f=h.length()+d,p.add(r,s.scaleTo(f))}}}hitBox(e){}};class Ia{constructor(e){this._handlerIndex=-1,this._tag=e.tag||"none",this.instanced=!0,this._entity=null,this._position=lt(e.position),this._positionHigh=new p,this._positionLow=new p,p.doubleToTwoFloats(this._position,this._positionHigh,this._positionLow),this._pitch=e.pitch||0,this._yaw=e.yaw||0,this._roll=e.roll||0,this._scale=e.scale||1,this._color=qe(e.color),this._direction=new p(0,1,0),this._handler=null,this._handlerIndex=-1,this._tagData=null,this._tagDataIndex=-1,this._object3d=e.object3d,this._visibility=!0,this._qNorthFrame=new D}get tag(){return this._tag}getPosition(){return this._position}getPitch(){return this._pitch}getYaw(){return this._yaw}getRoll(){return this._roll}getDirection(){return this._direction}get object3d(){return this._object3d}get vertices(){return this._object3d.vertices}get normals(){return this._object3d.normals}get texCoords(){return this._object3d.texCoords}get indices(){return this._object3d.indices}setOpacity(e){this._color.w=e,this.setColor(this._color.x,this._color.y,this._color.z,e)}setColor(e,t,i,r){this._color.x=e,this._color.y=t,this._color.z=i,r!=null&&(this._color.w=r),this._handler&&this._handler.setRgbaArr(this._tagData,this._tagDataIndex,this._color)}setColor4v(e){this._color.x=e.x,this._color.y=e.y,this._color.z=e.z,e.w!=null&&(this._color.w=e.w),this._handler&&this._handler.setRgbaArr(this._tagData,this._tagDataIndex,this._color)}setVisibility(e){this._visibility=e,this._handler&&this._handler.setVisibility(this._tagData,this._tagDataIndex,e)}getVisibility(){return this._visibility}setPosition(e,t,i){this._position.x=e,this._position.y=t,this._position.z=i,p.doubleToTwoFloats(this._position,this._positionHigh,this._positionLow),this._handler&&this._handler.setPositionArr(this._tagData,this._tagDataIndex,this._positionHigh,this._positionLow),this.updateDirection()}setPosition3v(e){this._position.x=e.x,this._position.y=e.y,this._position.z=e.z,p.doubleToTwoFloats(e,this._positionHigh,this._positionLow),this._handler&&this._handler.setPositionArr(this._tagData,this._tagDataIndex,this._positionHigh,this._positionLow),this.updateDirection()}setYaw(e){this._yaw=e,this.updateDirection()}setPitch(e){this._pitch=e,this._handler&&this._handler.setPitchRollArr(this._tagData,this._tagDataIndex,e,this._roll)}setRoll(e){this._roll=e,this._handler&&this._handler.setPitchRollArr(this._tagData,this._tagDataIndex,this._pitch,e)}setScale(e){this._scale=e,this._handler&&this._handler.setScaleArr(this._tagData,this._tagDataIndex,e)}getScale(){return this._scale}remove(){this._entity=null,this._handler&&this._handler.remove(this)}setPickingColor3v(e){this._handler&&this._handler.setPickingColorArr(this._tagData,this._tagDataIndex,e)}updateDirection(){if(this._handler&&this._handler._planet){this._qNorthFrame=this._handler._planet.getNorthFrameRotation(this._position);let e=D.yRotation(this._yaw).mul(this._qNorthFrame).conjugate();this._direction=e.mulVec3(new p(0,0,-1)).normalize(),this._handler.setDirectionArr(this._tagData,this._tagDataIndex,this._direction)}}}const Ct={RIGHT:0,LEFT:1,CENTER:2},is={left:Ct.LEFT,right:Ct.RIGHT,center:Ct.CENTER};class za extends Ut{constructor(e={}){super(e),this._handler=null,this._text=e.text||"",this._face=Jn(e.face,"arial"),this._size=e.size||24,this._outline=e.outline!=null?e.outline:0,this._outlineColor=qe(e.outlineColor,new J(0,0,0,1)),this._align=e.align&&is[e.align.trim().toLowerCase()]||Ct.RIGHT,this._fontIndex=0,this._fontAtlas=null,this._isRTL=e.isRTL||!1}setText(e){this._text=e.toString(),this._isReady&&this._handler&&this._handler.setText(this._handlerIndex,e,this._fontIndex,this._align,this._isRTL)}getText(){return this._text}setAlign(e){this._align=is[e.trim().toLowerCase()],this._isReady&&this._handler?this._handler.setText(this._handlerIndex,this._text,this._fontIndex,this._align,this._isRTL):this._lockId!==ae&&(this._lockId=Ae)}getAlign(){return this._align}setFace(e){this._face=e.trim(),this.update()}getFace(){return this._face}setSize(e){e!==this._size&&(this._size=e,this._isReady&&this._handler?this._handler.setSizeArr(this._handlerIndex,e):this._lockId!==ae&&(this._lockId=Ae))}getSize(){return this._size}setOutline(e){this._outline=e,this._isReady&&this._handler?this._handler.setOutlineArr(this._handlerIndex,e):this._lockId!==ae&&(this._lockId=Ae)}getOutline(){return this._outline}setOpacity(e){super.setOpacity(e),this.setOutlineOpacity(e)}setOutlineColor(e,t,i,r){(r!==this._outlineColor.w||e!==this._outlineColor.x||t!==this._outlineColor.y||i!==this._outlineColor.z)&&(this._outlineColor.x=e,this._outlineColor.y=t,this._outlineColor.z=i,this._outlineColor.w=r,this._isReady&&this._handler?this._handler.setOutlineColorArr(this._handlerIndex,this._outlineColor):this._lockId!==ae&&(this._lockId=Ae))}setOutlineColor4v(e){this.setOutlineColor(e.x,e.y,e.z,e.w)}setOutlineColorHTML(e){this.setOutlineColor4v(ot(e))}getOutlineColor(){return this._outlineColor}setOutlineOpacity(e){e!==this._outlineColor.w&&(this._outlineColor.w=e,this._isReady&&this._handler?this._handler.setOutlineColorArr(this._handlerIndex,this._outlineColor):this._lockId!==ae&&(this._lockId=Ae))}getOutlineOpacity(){return this._outlineColor.w}async update(){if(this._fontAtlas){const e=await this._fontAtlas.getFontIndex(this._face);this._applyFontIndex(e)}}_applyFontIndex(e){this._fontIndex=e,this._isReady&&this._handler?(this._handler.setFontIndexArr(this._handlerIndex,this._fontIndex),this._handler.setText(this._handlerIndex,this._text,this._fontIndex,this._align,this._isRTL)):this._lockId!==ae&&(this._lockId=Ae)}assignFontAtlas(e){this._fontAtlas||(this._fontAtlas=e),this.update()}serializeWorkerData(e){return this._handler?new Float32Array([e,this._handler._maxLetters,this.getVisibility()?1:0,this._positionHigh.x,this._positionHigh.y,this._positionHigh.z,this._positionLow.x,this._positionLow.y,this._positionLow.z,this._size,this._offset.x,this._offset.y,this._offset.z,this._color.x,this._color.y,this._color.z,this._color.w,this._rotation,this._alignedAxis.x,this._alignedAxis.y,this._alignedAxis.z,this._fontIndex,this._outline,this._outlineColor.x,this._outlineColor.y,this._outlineColor.z,this._outlineColor.w,this._entity._pickingColor.x,this._entity._pickingColor.y,this._entity._pickingColor.z]):null}}const ht=0,ct=1,dt=2;class mi{constructor(e={}){this.__id=mi.__counter__++,this.visibility=e.visibility!=null?e.visibility:!0,this.pointSize=e.pointSize||3,this.pickingScale=e.pickingScale||0,this._renderNode=null,this._entity=null,this._points=[],this._coordinatesData=[],this._colorData=[],this._pickingColorData=[],this._coordinatesBuffer=null,this._colorBuffer=null,this._pickingColorBuffer=null,this._handler=null,this._handlerIndex=-1,this._buffersUpdateCallbacks=[],this._buffersUpdateCallbacks[ht]=this._createCoordinatesBuffer,this._buffersUpdateCallbacks[ct]=this._createColorBuffer,this._buffersUpdateCallbacks[dt]=this._createPickingColorBuffer,this._changedBuffers=new Array(this._buffersUpdateCallbacks.length),e.points&&this.setPoints(e.points)}clear(){this._points.length=0,this._points=[],this._coordinatesData.length=0,this._coordinatesData=[],this._colorData.length=0,this._colorData=[],this._pickingColorData.length=0,this._pickingColorData=[],this._deleteBuffers()}setVisibility(e){this.visibility=e}getVisibility(){return this.visibility}setRenderNode(e){this._renderNode=e,this._setPickingColors()}remove(){this._entity=null,this._handler&&this._handler.remove(this)}setPoints(e){this.clear();for(let t=0;t<e.length;t++){let i=e[t],r=new p(i[0],i[1],i[2]),s=new J(i[3],i[4],i[5],i[6]==null?255:i[6]);this._coordinatesData.push(r.x,r.y,r.z),this._colorData.push(s.x/255,s.y/255,s.z/255,s.w/255);let n={_entity:this._entity,_pickingColor:new p,_entityCollection:this._entity?this._entity._entityCollection:null,index:t,position:r,color:s,pointCloud:this,properties:i[7]||{}};this._points.push(n),this._renderNode&&this._renderNode.renderer&&(this._renderNode.renderer.assignPickingColor(n),this._pickingColorData.push(n._pickingColor.x/255,n._pickingColor.y/255,n._pickingColor.z/255,1))}this._changedBuffers[ht]=!0,this._changedBuffers[ct]=!0,this._changedBuffers[dt]=!0}setPointPosition(e,t,i,r){this._changedBuffers[ht]=!0}setPointColor(e,t,i,r,s){this._changedBuffers[ct]=!0}addPoints(e){this._changedBuffers[ht]=!0,this._changedBuffers[ct]=!0,this._changedBuffers[dt]=!0}addPoint(e,t){this._changedBuffers[ht]=!0,this._changedBuffers[ct]=!0,this._changedBuffers[dt]=!0}getPoint(e){return this._points[e]}removePoint(e){this._changedBuffers[ht]=!0,this._changedBuffers[ct]=!0,this._changedBuffers[dt]=!0}insertPoint(e,t){this._changedBuffers[ht]=!0,this._changedBuffers[ct]=!0,this._changedBuffers[dt]=!0}draw(){if(this.visibility&&this._coordinatesData.length){this._update();let t=this._renderNode.renderer,i=t.handler.programs.pointCloud,r=i._program,s=t.handler.gl,n=r.attributes,a=r.uniforms;i.activate(),s.uniformMatrix4fv(a.projectionViewMatrix,!1,t.activeCamera.getProjectionViewMatrix()),s.uniform1f(a.opacity,this._handler._entityCollection._fadingOpacity),s.uniform1f(a.pointSize,this.pointSize),s.bindBuffer(s.ARRAY_BUFFER,this._coordinatesBuffer),s.vertexAttribPointer(n.coordinates,this._coordinatesBuffer.itemSize,s.FLOAT,!1,0,0),s.bindBuffer(s.ARRAY_BUFFER,this._colorBuffer),s.vertexAttribPointer(n.colors,this._colorBuffer.itemSize,s.FLOAT,!1,0,0),s.drawArrays(s.POINTS,0,this._coordinatesBuffer.numItems)}}drawPicking(){if(this.visibility&&this._coordinatesData.length){let t=this._renderNode.renderer,i=t.handler.programs.pointCloud,r=i._program,s=t.handler.gl,n=r.attributes,a=r.uniforms;i.activate(),s.uniformMatrix4fv(a.projectionViewMatrix,!1,t.activeCamera.getProjectionViewMatrix()),s.uniform1f(a.opacity,this._handler._entityCollection._fadingOpacity),s.uniform1f(a.pointSize,this.pointSize+this.pickingScale),s.bindBuffer(s.ARRAY_BUFFER,this._coordinatesBuffer),s.vertexAttribPointer(n.coordinates,this._coordinatesBuffer.itemSize,s.FLOAT,!1,0,0),s.bindBuffer(s.ARRAY_BUFFER,this._pickingColorBuffer),s.vertexAttribPointer(n.colors,this._pickingColorBuffer.itemSize,s.FLOAT,!1,0,0),s.drawArrays(s.POINTS,0,this._coordinatesBuffer.numItems)}}_update(){if(this._renderNode){let e=this._changedBuffers.length;for(;e--;)this._changedBuffers[e]&&(this._buffersUpdateCallbacks[e].call(this),this._changedBuffers[e]=!1)}}_deleteBuffers(){if(this._renderNode){let e=this._renderNode.renderer,t=e.handler.gl;t.deleteBuffer(this._coordinatesBuffer),t.deleteBuffer(this._colorBuffer),t.deleteBuffer(this._pickingColorBuffer)}this._coordinatesBuffer=null,this._colorBuffer=null,this._pickingColorBuffer=null}_createCoordinatesBuffer(){let e=this._renderNode.renderer.handler;e.gl.deleteBuffer(this._coordinatesBuffer),this._coordinatesBuffer=e.createArrayBuffer(new Float32Array(this._coordinatesData),3,this._coordinatesData.length/3)}_createColorBuffer(){let e=this._renderNode.renderer.handler;e.gl.deleteBuffer(this._colorBuffer),this._colorBuffer=e.createArrayBuffer(new Float32Array(this._colorData),4,this._colorData.length/4)}_createPickingColorBuffer(){let e=this._renderNode.renderer.handler;e.gl.deleteBuffer(this._pickingColorBuffer),this._pickingColorBuffer=e.createArrayBuffer(new Float32Array(this._pickingColorData),4,this._pickingColorData.length/4)}_setPickingColors(){if(this._renderNode&&this._renderNode.renderer){for(let e=0;e<this._points.length;e++){let t=this._points[e];t._entity=this._entity,t._entityCollection=this._entity._entityCollection,this._renderNode.renderer.assignPickingColor(t),this._pickingColorData.push(t._pickingColor.x/255,t._pickingColor.y/255,t._pickingColor.z/255,1)}this._changedBuffers[dt]=!0}}}mi.__counter__=0;const ft=0,pi=1,Ke=2,Fa="#0000FF",ze=0,Fe=1,ke=2,de=3;class ut{constructor(e={}){this.__id=ut.__counter__++,this.altitude=e.altitude||0,this.thickness=e.thickness||1.5,this._opacity=e.opacity!=null?e.opacity:1,this._defaultColor=qi(e.color||Fa,e.opacity),this.visibility=e.visibility!=null?e.visibility:!0,this._closedLine=e.isClosed||!1,this._path3v=[],this._pathLengths=[],this._pathLonLat=[],this._pathLonLatMerc=[],this._pathColors=e.pathColors?Xr(e.pathColors):[],this._extent=new U,this._verticesHigh=[],this._verticesLow=[],this._orders=[],this._indexes=[],this._colors=[],this._verticesHighBuffer=null,this._verticesLowBuffer=null,this._ordersBuffer=null,this._indexesBuffer=null,this._colorsBuffer=null,this._pickingColor=[0,0,0],this._renderNode=null,this._entity=null,this._handler=null,this._handlerIndex=-1,this._buffersUpdateCallbacks=[],this._buffersUpdateCallbacks[ft]=this._createVerticesBuffer,this._buffersUpdateCallbacks[pi]=this._createIndexBuffer,this._buffersUpdateCallbacks[Ke]=this._createColorsBuffer,this._changedBuffers=new Array(this._buffersUpdateCallbacks.length),e.pathLonLat?this.setPathLonLat(e.pathLonLat):e.path3v&&this.setPath3v(e.path3v),this._refresh()}static appendLineData3v(e,t,i,r,s,n,a,o,l,h,d,f,u,g){var _=0,m=new p,v=new p;u&&(u.southWest.set(180,90),u.northEast.set(-180,-90)),o.length>0?(_=o[o.length-5]+9,o.push(_,_)):o.push(0,0);for(let I=0,k=e.length;I<k;I++){var b=e[I],y=t[I];if(h[I]=[],f[I]=[],d[I]=[],b.length===0)continue;var w=_,x;if(r)x=b[b.length-1],x instanceof Array&&(x=new p(x[0],x[1],x[2]));else{var T=b[0],A=b[1]||T;T instanceof Array&&(T=new p(T[0],T[1],T[2])),A instanceof Array&&(A=new p(A[0],A[1],A[2])),T=T,A=A,x=new p(T.x+T.x-A.x,T.y+T.y-A.y,T.z+T.z-A.z)}let z=i;y&&y[0]&&(z=y[0]),p.doubleToTwoFloats(x,m,v),s.push(m.x,m.y,m.z,m.x,m.y,m.z,m.x,m.y,m.z,m.x,m.y,m.z),n.push(v.x,v.y,v.z,v.x,v.y,v.z,v.x,v.y,v.z,v.x,v.y,v.z);let L=z[ze],S=z[Fe],F=z[ke],R=z[de]!=null?z[de]:1;I>0&&g.push(L,S,F,R,L,S,F,R,L,S,F,R,L,S,F,R),a.push(1,-1,2,-2);for(let M=0,j=b.length;M<j;M++){var E=b[M];if(E instanceof Array&&(E=new p(E[0],E[1],E[2])),d[I].push(E),l){var C=l.cartesianToLonLat(E);h[I].push(C),f[I].push(C.forwardMercator()),C.lon<u.southWest.lon&&(u.southWest.lon=C.lon),C.lat<u.southWest.lat&&(u.southWest.lat=C.lat),C.lon>u.northEast.lon&&(u.northEast.lon=C.lon),C.lat>u.northEast.lat&&(u.northEast.lat=C.lat)}y&&y[M]&&(z=y[M]),L=z[ze],S=z[Fe],F=z[ke],R=z[de]!=null?z[de]:1,p.doubleToTwoFloats(E,m,v),s.push(m.x,m.y,m.z,m.x,m.y,m.z,m.x,m.y,m.z,m.x,m.y,m.z),n.push(v.x,v.y,v.z,v.x,v.y,v.z,v.x,v.y,v.z,v.x,v.y,v.z),g.push(L,S,F,R,L,S,F,R,L,S,F,R,L,S,F,R),a.push(1,-1,2,-2),o.push(_++,_++,_++,_++)}var P;if(r)P=b[0],P instanceof Array&&(P=new p(P[0],P[1],P[2])),o.push(w,w+1,w+1,w+1);else{let M=b[b.length-1],j=b[b.length-2]||M;M instanceof Array?M=new p(M[0],M[1],M[2]):M=M,j instanceof Array?j=new p(j[0],j[1],j[2]):j=j,P=new p(M.x+M.x-j.x,M.y+M.y-j.y,M.z+M.z-j.z),o.push(_-1,_-1,_-1,_-1)}y&&y[b.length-1]&&(z=y[b.length-1]),L=z[ze],S=z[Fe],F=z[ke],R=z[de]!=null?z[de]:1,p.doubleToTwoFloats(P,m,v),s.push(m.x,m.y,m.z,m.x,m.y,m.z,m.x,m.y,m.z,m.x,m.y,m.z),n.push(v.x,v.y,v.z,v.x,v.y,v.z,v.x,v.y,v.z,v.x,v.y,v.z),g.push(L,S,F,R,L,S,F,R,L,S,F,R,L,S,F,R),a.push(1,-1,2,-2),I<e.length-1&&e[I+1].length!==0&&(_+=8,o.push(_,_))}}static appendPoint3v(e,t,i,r,s,n,a,o,l,h,d,f,u,g){var _=new p,m=new p,v=h.length-4,b=h[v-1]+1;e.length===0?(e.push([]),i[0]||(i[0]=[])):i[e.length-1]||(i[e.length-1]=[]);var y=e[e.length-1],w=y.length;y.push(t);let x=r[ze],T=r[Fe],A=r[ke],E=r[de]!=null?r[de]:1,C=i[e.length-1];if(C[w]?(C[w][ze]=x,C[w][Fe]=T,C[w][ke]=A,C[w][de]=E):C.push(r),w===1){var P;if(s)P=y[w-1],P instanceof Array&&(P=new p(P[0],P[1],P[2]));else{let M=y[0],j=y[1]||M;M instanceof Array?M=new p(M[0],M[1],M[2]):M=M,j instanceof Array?j=new p(j[0],j[1],j[2]):j=j,P=new p(M.x+M.x-j.x,M.y+M.y-j.y,M.z+M.z-j.z)}p.doubleToTwoFloats(P,_,m);let R=n.length-3*12;n[R]=_.x,n[R+1]=_.y,n[R+2]=_.z,n[R+3]=_.x,n[R+4]=_.y,n[R+5]=_.z,n[R+6]=_.x,n[R+7]=_.y,n[R+8]=_.z,n[R+9]=_.x,n[R+10]=_.y,n[R+11]=_.z,a[R]=m.x,a[R+1]=m.y,a[R+2]=m.z,a[R+3]=m.x,a[R+4]=m.y,a[R+5]=m.z,a[R+6]=m.x,a[R+7]=m.y,a[R+8]=m.z,a[R+9]=m.x,a[R+10]=m.y,a[R+11]=m.z}var I=b;if(d){f.length===0&&f.push([]),u.length===0&&u.push([]);var k=f[f.length-1],z=u[u.length-1];let R=d.cartesianToLonLat(t);k.push(R),z.push(R.forwardMercator()),R.lon<g.southWest.lon&&(g.southWest.lon=R.lon),R.lat<g.southWest.lat&&(g.southWest.lat=R.lat),R.lon>g.northEast.lon&&(g.northEast.lon=R.lon),R.lat>g.northEast.lat&&(g.northEast.lat=R.lat)}p.doubleToTwoFloats(t,_,m);let L=n.length-12;n[L]=_.x,n[L+1]=_.y,n[L+2]=_.z,n[L+3]=_.x,n[L+4]=_.y,n[L+5]=_.z,n[L+6]=_.x,n[L+7]=_.y,n[L+8]=_.z,n[L+9]=_.x,n[L+10]=_.y,n[L+11]=_.z,a[L]=m.x,a[L+1]=m.y,a[L+2]=m.z,a[L+3]=m.x,a[L+4]=m.y,a[L+5]=m.z,a[L+6]=m.x,a[L+7]=m.y,a[L+8]=m.z,a[L+9]=m.x,a[L+10]=m.y,a[L+11]=m.z;let S=o.length-16;o[S]=x,o[S+1]=T,o[S+2]=A,o[S+3]=E,o[S+4]=x,o[S+5]=T,o[S+6]=A,o[S+7]=E,o[S+8]=x,o[S+9]=T,o[S+10]=A,o[S+11]=E,o[S+12]=x,o[S+13]=T,o[S+14]=A,o[S+15]=E,h[v]=b++,h[v+1]=b++,h[v+2]=b++,h[v+3]=b++;var F;if(s)F=y[0],h.push(I,I+1,I+1,I+1);else{let R=y[y.length-1],M=y[y.length-2]||R;F=new p(R.x+R.x-M.x,R.y+R.y-M.y,R.z+R.z-M.z),h.push(b-1,b-1,b-1,b-1)}p.doubleToTwoFloats(F,_,m),n.push(_.x,_.y,_.z,_.x,_.y,_.z,_.x,_.y,_.z,_.x,_.y,_.z),a.push(m.x,m.y,m.z,m.x,m.y,m.z,m.x,m.y,m.z,m.x,m.y,m.z),o.push(x,T,A,E,x,T,A,E,x,T,A,E,x,T,A,E),l.push(1,-1,2,-2)}static appendLineDataLonLat(e,t,i,r,s,n,a,o,l,h,d,f,u,g){var _=0,m=new p,v=new p;u&&(u.southWest.set(180,90),u.northEast.set(-180,-90)),o.length>0?(_=o[o.length-5]+9,o.push(_,_)):o.push(0,0);for(let C=0,P=e.length;C<P;C++){var b=e[C],y=t[C];if(h[C]=[],f[C]=[],d[C]=[],b.length===0)continue;var w=_,x;if(r){let F=b[b.length-1];F instanceof Array?x=l.lonLatToCartesian(new B(F[0],F[1],F[2])):x=l.lonLatToCartesian(F)}else{let F,R,M=b[0];M instanceof Array?F=l.lonLatToCartesian(new B(M[0],M[1],M[2])):F=l.lonLatToCartesian(M),M=b[1],M||(M=b[0]),M instanceof Array?R=l.lonLatToCartesian(new B(M[0],M[1],M[2])):R=l.lonLatToCartesian(M),x=new p(F.x+F.x-R.x,F.y+F.y-R.y,F.z+F.z-R.z)}let I=i;y&&y[0]&&(I=y[0]),p.doubleToTwoFloats(x,m,v),s.push(m.x,m.y,m.z,m.x,m.y,m.z,m.x,m.y,m.z,m.x,m.y,m.z),n.push(v.x,v.y,v.z,v.x,v.y,v.z,v.x,v.y,v.z,v.x,v.y,v.z);let k=I[ze],z=I[Fe],L=I[ke],S=I[de]!=null?I[de]:1;C>0&&g.push(k,z,L,S,k,z,L,S,k,z,L,S,k,z,L,S),a.push(1,-1,2,-2);for(let F=0,R=b.length;F<R;F++){var T=b[F];T instanceof Array&&(T=new B(T[0],T[1],T[2])),y&&y[F]&&(I=y[F]),k=I[ze],z=I[Fe],L=I[ke],S=I[de]!=null?I[de]:1;var A=l.lonLatToCartesian(T);h[C].push(A),d[C].push(T),f[C].push(T.forwardMercator()),p.doubleToTwoFloats(A,m,v),s.push(m.x,m.y,m.z,m.x,m.y,m.z,m.x,m.y,m.z,m.x,m.y,m.z),n.push(v.x,v.y,v.z,v.x,v.y,v.z,v.x,v.y,v.z,v.x,v.y,v.z),g.push(k,z,L,S,k,z,L,S,k,z,L,S,k,z,L,S),a.push(1,-1,2,-2),o.push(_++,_++,_++,_++),T.lon<u.southWest.lon&&(u.southWest.lon=T.lon),T.lat<u.southWest.lat&&(u.southWest.lat=T.lat),T.lon>u.northEast.lon&&(u.northEast.lon=T.lon),T.lat>u.northEast.lat&&(u.northEast.lat=T.lat)}var E;if(r){let F=b[0];F instanceof Array?E=l.lonLatToCartesian(new B(F[0],F[1],F[2])):E=l.lonLatToCartesian(F),o.push(w,w+1,w+1,w+1)}else{let F,R,M=b[b.length-1];M instanceof Array?F=l.lonLatToCartesian(new B(M[0],M[1],M[2])):F=l.lonLatToCartesian(M),M=b[b.length-2],M||(M=b[0]),M instanceof Array?R=l.lonLatToCartesian(new B(M[0],M[1],M[2])):R=l.lonLatToCartesian(M),E=new p(F.x+F.x-R.x,F.y+F.y-R.y,F.z+F.z-R.z),o.push(_-1,_-1,_-1,_-1)}y&&y[b.length-1]&&(I=y[b.length-1]),k=I[ze],z=I[Fe],L=I[ke],S=I[de]!=null?I[de]:1,p.doubleToTwoFloats(E,m,v),s.push(m.x,m.y,m.z,m.x,m.y,m.z,m.x,m.y,m.z,m.x,m.y,m.z),n.push(v.x,v.y,v.z,v.x,v.y,v.z,v.x,v.y,v.z,v.x,v.y,v.z),g.push(k,z,L,S,k,z,L,S,k,z,L,S,k,z,L,S),a.push(1,-1,2,-2),C<e.length-1&&e[C+1].length!==0&&(_+=8,o.push(_,_))}}_setEqualPath3v(e){var t=this._extent;t.southWest.set(180,90),t.northEast.set(-180,-90);var i=new p,r=new p,s=this._verticesHigh,n=this._verticesLow,a=this._pathLonLat,o=this._pathLonLatMerc,l=0,h=this._renderNode.ellipsoid;for(let b=0;b<e.length;b++){var d=e[b],f;this._closedLine?f=d[d.length-1]:f=new p(d[0].x+d[0].x-d[1].x,d[0].y+d[0].y-d[1].y,d[0].z+d[0].z-d[1].z),p.doubleToTwoFloats(f,i,r),s[l]=i.x,n[l++]=r.x,s[l]=i.y,n[l++]=r.y,s[l]=i.z,n[l++]=r.z,s[l]=i.x,n[l++]=r.x,s[l]=i.y,n[l++]=r.y,s[l]=i.z,n[l++]=r.z,s[l]=i.x,n[l++]=r.x,s[l]=i.y,n[l++]=r.y,s[l]=i.z,n[l++]=r.z,s[l]=i.x,n[l++]=r.x,s[l]=i.y,n[l++]=r.y,s[l]=i.z,n[l++]=r.z;for(let y=0;y<d.length;y++){var u=d[y],g=this._path3v[b][y];if(g.x=u.x,g.y=u.y,g.z=u.z,h){var _=h.cartesianToLonLat(u);this._pathLonLat[b][y]=_,a[b][y]=_,o[b][y]=_.forwardMercator(),_.lon<t.southWest.lon&&(t.southWest.lon=_.lon),_.lat<t.southWest.lat&&(t.southWest.lat=_.lat),_.lon>t.northEast.lon&&(t.northEast.lon=_.lon),_.lat>t.northEast.lat&&(t.northEast.lat=_.lat)}p.doubleToTwoFloats(u,i,r),s[l]=i.x,n[l++]=r.x,s[l]=i.y,n[l++]=r.y,s[l]=i.z,n[l++]=r.z,s[l]=i.x,n[l++]=r.x,s[l]=i.y,n[l++]=r.y,s[l]=i.z,n[l++]=r.z,s[l]=i.x,n[l++]=r.x,s[l]=i.y,n[l++]=r.y,s[l]=i.z,n[l++]=r.z,s[l]=i.x,n[l++]=r.x,s[l]=i.y,n[l++]=r.y,s[l]=i.z,n[l++]=r.z}var m;if(this._closedLine)m=d[0];else{var v=d.length-1;m=new p(d[v].x+d[v].x-d[v-1].x,d[v].y+d[v].y-d[v-1].y,d[v].z+d[v].z-d[v-1].z)}p.doubleToTwoFloats(m,i,r),s[l]=i.x,n[l++]=r.x,s[l]=i.y,n[l++]=r.y,s[l]=i.z,n[l++]=r.z,s[l]=i.x,n[l++]=r.x,s[l]=i.y,n[l++]=r.y,s[l]=i.z,n[l++]=r.z,s[l]=i.x,n[l++]=r.x,s[l]=i.y,n[l++]=r.y,s[l]=i.z,n[l++]=r.z,s[l]=i.x,n[l++]=r.x,s[l]=i.y,n[l++]=r.y,s[l]=i.z,n[l++]=r.z}}_setEqualPathLonLat(e){var t=this._extent;t.southWest.set(180,90),t.northEast.set(-180,-90);var i=new p,r=new p,s=this._verticesHigh,n=this._verticesLow,a=this._pathLonLat,o=this._pathLonLatMerc,l=this._path3v,h=0,d=this._renderNode.ellipsoid;for(let v=0;v<e.length;v++){var f=e[v],u;if(this._closedLine)u=d.lonLatToCartesian(f[f.length-1]);else{let b=d.lonLatToCartesian(f[0]),y=d.lonLatToCartesian(f[1]);u=new p(b.x+b.x-y.x,b.y+b.y-y.y,b.z+b.z-y.z)}p.doubleToTwoFloats(u,i,r),s[h]=i.x,n[h++]=r.x,s[h]=i.y,n[h++]=r.y,s[h]=i.z,n[h++]=r.z,s[h]=i.x,n[h++]=r.x,s[h]=i.y,n[h++]=r.y,s[h]=i.z,n[h++]=r.z,s[h]=i.x,n[h++]=r.x,s[h]=i.y,n[h++]=r.y,s[h]=i.z,n[h++]=r.z,s[h]=i.x,n[h++]=r.x,s[h]=i.y,n[h++]=r.y,s[h]=i.z,n[h++]=r.z;for(let b=0;b<f.length;b++){var g=f[b],_=d.lonLatToCartesian(g);l[v][b]=_,o[v][b]=g.forwardMercator(),a[v][b]=g,p.doubleToTwoFloats(_,i,r),s[h]=i.x,n[h++]=r.x,s[h]=i.y,n[h++]=r.y,s[h]=i.z,n[h++]=r.z,s[h]=i.x,n[h++]=r.x,s[h]=i.y,n[h++]=r.y,s[h]=i.z,n[h++]=r.z,s[h]=i.x,n[h++]=r.x,s[h]=i.y,n[h++]=r.y,s[h]=i.z,n[h++]=r.z,s[h]=i.x,n[h++]=r.x,s[h]=i.y,n[h++]=r.y,s[h]=i.z,n[h++]=r.z,g.lon<t.southWest.lon&&(t.southWest.lon=g.lon),g.lat<t.southWest.lat&&(t.southWest.lat=g.lat),g.lon>t.northEast.lon&&(t.northEast.lon=g.lon),g.lat>t.northEast.lat&&(t.northEast.lat=g.lat)}var m;if(this._closedLine)m=d.lonLatToCartesian(f[0]);else{let b=d.lonLatToCartesian(f[f.length-1]),y=d.lonLatToCartesian(f[f.length-2]);m=new p(b.x+b.x-y.x,b.y+b.y-y.y,b.z+b.z-y.z)}p.doubleToTwoFloats(m,i,r),s[h]=i.x,n[h++]=r.x,s[h]=i.y,n[h++]=r.y,s[h]=i.z,n[h++]=r.z,s[h]=i.x,n[h++]=r.x,s[h]=i.y,n[h++]=r.y,s[h]=i.z,n[h++]=r.z,s[h]=i.x,n[h++]=r.x,s[h]=i.y,n[h++]=r.y,s[h]=i.z,n[h++]=r.z,s[h]=i.x,n[h++]=r.x,s[h]=i.y,n[h++]=r.y,s[h]=i.z,n[h++]=r.z}}setPointLonLat(e,t,i){if(this._renderNode&&this._renderNode.ellipsoid){let o=this._pathLonLat,l=this._pathLonLatMerc;o[i][t]=e,l[i][t]=e.forwardMercator();var r=this._extent;r.southWest.set(180,90),r.northEast.set(-180,-90);for(let h=0;h<o.length;h++){var s=o[h];for(let d=0;d<s.length;d++){var n=s[d].lon,a=s[d].lat;n>r.northEast.lon&&(r.northEast.lon=n),a>r.northEast.lat&&(r.northEast.lat=a),n<r.southWest.lon&&(r.southWest.lon=n),a<r.southWest.lat&&(r.southWest.lat=a)}}this.setPoint3v(this._renderNode.ellipsoid.lonLatToCartesian(e),t,i,!0)}else{let o=this._pathLonLat[i];o[t].lon=e.lon,o[t].lat=e.lat,o[t].height=e.height}}setPoint3v(e,t=0,i=0,r=!1){if(this._renderNode){var s=new p,n=new p,a=this._verticesHigh,o=this._verticesLow,l=this._pathLonLat,h=this._pathLonLatMerc,d=0,f=0;f=this._pathLengths[i]*12+24*i;let x=this._path3v[i];x[t].x=e.x,x[t].y=e.y,x[t].z=e.z;let T=this._closedLine||x.length===1;if(t===0||t===1){var u;T?u=x[x.length-1]:u=new p(x[0].x+x[0].x-x[1].x,x[0].y+x[0].y-x[1].y,x[0].z+x[0].z-x[1].z),d=f,p.doubleToTwoFloats(u,s,n),a[d]=s.x,a[d+1]=s.y,a[d+2]=s.z,a[d+3]=s.x,a[d+4]=s.y,a[d+5]=s.z,a[d+6]=s.x,a[d+7]=s.y,a[d+8]=s.z,a[d+9]=s.x,a[d+10]=s.y,a[d+11]=s.z,o[d]=n.x,o[d+1]=n.y,o[d+2]=n.z,o[d+3]=n.x,o[d+4]=n.y,o[d+5]=n.z,o[d+6]=n.x,o[d+7]=n.y,o[d+8]=n.z,o[d+9]=n.x,o[d+10]=n.y,o[d+11]=n.z}if(!r&&this._renderNode.ellipsoid){var g=this._renderNode.ellipsoid.cartesianToLonLat(e);l[i][t]=g,h[i][t]=g.forwardMercator();var _=this._extent;_.southWest.set(180,90),_.northEast.set(-180,-90);for(let A=0;A<l.length;A++){var m=l[A];for(let E=0;E<m.length;E++){var v=m[E].lon,b=m[E].lat;v>_.northEast.lon&&(_.northEast.lon=v),b>_.northEast.lat&&(_.northEast.lat=b),v<_.southWest.lon&&(_.southWest.lon=v),b<_.southWest.lat&&(_.southWest.lat=b)}}}if(d=f+t*12+12,p.doubleToTwoFloats(e,s,n),a[d]=s.x,a[d+1]=s.y,a[d+2]=s.z,a[d+3]=s.x,a[d+4]=s.y,a[d+5]=s.z,a[d+6]=s.x,a[d+7]=s.y,a[d+8]=s.z,a[d+9]=s.x,a[d+10]=s.y,a[d+11]=s.z,o[d]=n.x,o[d+1]=n.y,o[d+2]=n.z,o[d+3]=n.x,o[d+4]=n.y,o[d+5]=n.z,o[d+6]=n.x,o[d+7]=n.y,o[d+8]=n.z,o[d+9]=n.x,o[d+10]=n.y,o[d+11]=n.z,t===x.length-1||t===x.length-2){var y;if(T)y=x[0];else{var w=x.length-1;y=new p(x[w].x+x[w].x-x[w-1].x,x[w].y+x[w].y-x[w-1].y,x[w].z+x[w].z-x[w-1].z)}d=f+x.length*12+12,p.doubleToTwoFloats(y,s,n),a[d]=s.x,a[d+1]=s.y,a[d+2]=s.z,a[d+3]=s.x,a[d+4]=s.y,a[d+5]=s.z,a[d+6]=s.x,a[d+7]=s.y,a[d+8]=s.z,a[d+9]=s.x,a[d+10]=s.y,a[d+11]=s.z,o[d]=n.x,o[d+1]=n.y,o[d+2]=n.z,o[d+3]=n.x,o[d+4]=n.y,o[d+5]=n.z,o[d+6]=n.x,o[d+7]=n.y,o[d+8]=n.z,o[d+9]=n.x,o[d+10]=n.y,o[d+11]=n.z}this._changedBuffers[ft]=!0}else{let x=this._path3v[i];x[t].x=e.x,x[t].y=e.y,x[t].z=e.z}}_resizePathLengths(e=0){this._pathLengths[0]=0;for(let t=e+1,i=this._path3v.length;t<=i;t++)this._pathLengths[t]=this._pathLengths[t-1]+this._path3v[t-1].length}removeSegment(e){this._path3v.splice(e,1),this.setPath3v([].concat(this._path3v))}removePoint(e,t=0){this._path3v[t].splice(e,1),this._path3v[t].length===0&&this._path3v.splice(t,1),this.setPath3v([].concat(this._path3v))}insertPoint3v(e,t=0,i,r=0){let s=[].concat(this._path3v),n=s[r];if(n){let a=[].concat(this._pathColors);if(n.splice(t,0,e),i){let o=a[r];o||(o=new Array(n.length)),o.splice(t,0,i)}this.setPath3v(s,a)}else this.addPoint3v(e,r)}appendPoint3v(e,t,i){this._path3v.length===0||!this._renderNode?(this._pathColors.push([t||this._defaultColor]),this.addPoint3v(e)):(this._verticesHigh=Nt(this._verticesHigh),this._verticesLow=Nt(this._verticesLow),this._colors=Nt(this._colors),this._orders=Nt(this._orders),this._indexes=Nt(this._indexes),ut.appendPoint3v(this._path3v,e,this._pathColors,t||this._defaultColor,this._closedLine,this._verticesHigh,this._verticesLow,this._colors,this._orders,this._indexes,i?null:this._renderNode.ellipsoid,this._pathLonLat,this._pathLonLatMerc,this._extent),this._pathLengths[this._path3v.length]+=1,this._changedBuffers[ft]=!0,this._changedBuffers[Ke]=!0,this._changedBuffers[pi]=!0)}addPoint3v(e,t=0){t>=this._path3v.length&&this._path3v.push([]),this._path3v[t].push(e),this.setPath3v([].concat(this._path3v))}addPointLonLat(e,t=0){t>=this._pathLonLat.length&&this._pathLonLat.push([]),this._pathLonLat[t].push(e),this.setPathLonLat([].concat(this._pathLonLat))}clear(){this._clearData()}setPointColor(e,t=0,i=0){if(this._renderNode&&t<this._path3v[i].length){let r=this._pathColors[i];if(!r)if(this._path3v[i]&&t<this._path3v[i].length)this._pathColors[i]=new Array(this._path3v[i].length);else return;r[t]?(r[t][ze]=e[ze],r[t][Fe]=e[Fe],r[t][ke]=e[ke],r[t][de]=e[de]||1):r[t]=[e[ze],e[Fe],e[ke],e[de]||1];let s=this._colors,n=t*16+this._pathLengths[i]*16+32*i;s[n]=s[n+4]=s[n+8]=s[n+12]=e[ze],s[n+1]=s[n+5]=s[n+9]=s[n+13]=e[Fe],s[n+2]=s[n+6]=s[n+10]=s[n+14]=e[ke],s[n+3]=s[n+7]=s[n+11]=s[n+15]=e[de]||1,this._changedBuffers[Ke]=!0}else{let r=this._pathColors[i];r[t]=e}}setOpacity(e){this._opacity=e}setThickness(e){this.thickness=e}getThickness(){return this.thickness}setVisibility(e){this.visibility=e}getVisibility(){return this.visibility}setRenderNode(e){e&&(this._renderNode=e,this._pathLonLat.length?this._createDataLonLat([].concat(this._pathLonLat)):this._createData3v([].concat(this._path3v)),this._refresh(),e.renderer&&e.renderer.isInitialized()&&this._update())}_clearData(){this._verticesHigh=null,this._verticesLow=null,this._orders=null,this._indexes=null,this._colors=null,this._verticesHigh=[],this._verticesLow=[],this._orders=[],this._indexes=[],this._colors=[],this._path3v.length=0,this._pathLonLat.length=0,this._pathLonLatMerc.length=0,this._path3v=[],this._pathLonLat=[],this._pathLonLatMerc=[]}_createData3v(e){this._clearData(),ut.appendLineData3v(e,this._pathColors,this._defaultColor,this._closedLine,this._verticesHigh,this._verticesLow,this._orders,this._indexes,this._renderNode.ellipsoid,this._pathLonLat,this._path3v,this._pathLonLatMerc,this._extent,this._colors),this._resizePathLengths(0)}_createDataLonLat(e){this._clearData(),ut.appendLineDataLonLat(e,this._pathColors,this._defaultColor,this._closedLine,this._verticesHigh,this._verticesLow,this._orders,this._indexes,this._renderNode.ellipsoid,this._path3v,this._pathLonLat,this._pathLonLatMerc,this._extent,this._colors),this._resizePathLengths(0)}remove(){this._entity=null,this._pathColors.length=0,this._pathColors=[],this._verticesHigh=null,this._verticesLow=null,this._orders=null,this._indexes=null,this._colors=null,this._verticesHigh=[],this._verticesLow=[],this._orders=[],this._indexes=[],this._colors=[],this._deleteBuffers(),this._handler&&this._handler.remove(this)}setPickingColor3v(e){this._pickingColor[0]=e.x/255,this._pickingColor[1]=e.y/255,this._pickingColor[2]=e.z/255}getExtent(){return this._extent.clone()}getPath3v(){return this._path3v}getPathLonLat(){return this._pathLonLat}getPathColors(){return this._pathColors}setPathColors(e){this._renderNode}setColorHTML(e){this._defaultColor=qi(e);let t=ot(e),i=this._pathColors;for(let s=0,n=i.length;s<n;s++){let a=i[s];for(let o=0,l=a.length;o<l;o++)a[o][0]=t.x,a[o][1]=t.y,a[o][2]=t.z,a[o][3]=t.w}let r=this._colors;for(let s=0,n=r.length;s<n;s+=4)r[s]=t.x,r[s+1]=t.y,r[s+2]=t.z,r[s+3]=t.w;this._changedBuffers[Ke]=!0}setPathLonLat(e,t=!1){this._renderNode&&this._renderNode.ellipsoid?t?(this._setEqualPathLonLat(e),this._changedBuffers[ft]=!0,this._changedBuffers[Ke]=!0):(this._createDataLonLat(e),this._changedBuffers[ft]=!0,this._changedBuffers[pi]=!0,this._changedBuffers[Ke]=!0):this._pathLonLat=[].concat(e)}setPath3v(e,t,i=!1){t&&(this._pathColors=[].concat(t)),this._renderNode?i?(this._setEqualPath3v(e),this._changedBuffers[ft]=!0,this._changedBuffers[Ke]=!0):(this._createData3v(e),this._changedBuffers[ft]=!0,this._changedBuffers[pi]=!0,this._changedBuffers[Ke]=!0):this._path3v=[].concat(e)}draw(){if(this.visibility&&this._path3v.length){this._update();let e=this._renderNode,t=e.renderer,i=t.handler.programs.polyline_screen,r=i._program,s=t.handler.gl,n=r.attributes,a=r.uniforms,o=this._handler._entityCollection;i.activate(),s.disable(s.CULL_FACE),s.uniform1f(a.depthOffset,o.polygonOffsetUnits),s.uniformMatrix4fv(a.proj,!1,t.activeCamera.getProjectionMatrix()),s.uniformMatrix4fv(a.view,!1,t.activeCamera.getViewMatrix()),s.uniform3fv(a.eyePositionHigh,t.activeCamera.eyeHigh),s.uniform3fv(a.eyePositionLow,t.activeCamera.eyeLow),s.uniform2fv(a.uFloatParams,[e._planetRadius2||0,t.activeCamera._tanViewAngle_hradOneByHeight]),s.uniform2fv(a.viewport,[t.handler.canvas.width,t.handler.canvas.height]),s.uniform1f(a.thickness,this.thickness*.5),s.uniform1f(a.opacity,this._opacity*o._fadingOpacity),s.bindBuffer(s.ARRAY_BUFFER,this._colorsBuffer),s.vertexAttribPointer(n.color,this._colorsBuffer.itemSize,s.FLOAT,!1,0,0);let l=this._verticesHighBuffer;s.bindBuffer(s.ARRAY_BUFFER,l),s.vertexAttribPointer(n.prevHigh,l.itemSize,s.FLOAT,!1,12,0),s.vertexAttribPointer(n.currentHigh,l.itemSize,s.FLOAT,!1,12,48),s.vertexAttribPointer(n.nextHigh,l.itemSize,s.FLOAT,!1,12,96),l=this._verticesLowBuffer,s.bindBuffer(s.ARRAY_BUFFER,l),s.vertexAttribPointer(n.prevLow,l.itemSize,s.FLOAT,!1,12,0),s.vertexAttribPointer(n.currentLow,l.itemSize,s.FLOAT,!1,12,48),s.vertexAttribPointer(n.nextLow,l.itemSize,s.FLOAT,!1,12,96),s.bindBuffer(s.ARRAY_BUFFER,this._ordersBuffer),s.vertexAttribPointer(n.order,this._ordersBuffer.itemSize,s.FLOAT,!1,4,0),s.bindBuffer(s.ELEMENT_ARRAY_BUFFER,this._indexesBuffer),s.drawElements(s.TRIANGLE_STRIP,this._indexesBuffer.numItems,s.UNSIGNED_INT,0),s.enable(s.CULL_FACE)}}drawPicking(){if(this.visibility&&this._path3v.length){let e=this._renderNode,t=e.renderer,i=t.handler.programs.polyline_picking,r=i._program,s=t.handler.gl,n=r.attributes,a=r.uniforms;i.activate(),s.disable(s.CULL_FACE),s.uniform1f(a.depthOffset,this._handler._entityCollection.polygonOffsetUnits),s.uniformMatrix4fv(a.proj,!1,t.activeCamera.getProjectionMatrix()),s.uniformMatrix4fv(a.view,!1,t.activeCamera.getViewMatrix()),s.uniform4fv(a.color,[this._pickingColor[0],this._pickingColor[1],this._pickingColor[2],1]),s.uniform3fv(a.eyePositionHigh,t.activeCamera.eyeHigh),s.uniform3fv(a.eyePositionLow,t.activeCamera.eyeLow),s.uniform2fv(a.uFloatParams,[e._planetRadius2||0,t.activeCamera._tanViewAngle_hradOneByHeight]),s.uniform2fv(a.viewport,[t.handler.canvas.width,t.handler.canvas.height]),s.uniform1f(a.thickness,this.thickness*.5);let o=this._verticesHighBuffer;s.bindBuffer(s.ARRAY_BUFFER,o),s.vertexAttribPointer(n.prevHigh,o.itemSize,s.FLOAT,!1,12,0),s.vertexAttribPointer(n.currentHigh,o.itemSize,s.FLOAT,!1,12,48),s.vertexAttribPointer(n.nextHigh,o.itemSize,s.FLOAT,!1,12,96),o=this._verticesLowBuffer,s.bindBuffer(s.ARRAY_BUFFER,o),s.vertexAttribPointer(n.prevLow,o.itemSize,s.FLOAT,!1,12,0),s.vertexAttribPointer(n.currentLow,o.itemSize,s.FLOAT,!1,12,48),s.vertexAttribPointer(n.nextLow,o.itemSize,s.FLOAT,!1,12,96),s.bindBuffer(s.ARRAY_BUFFER,this._ordersBuffer),s.vertexAttribPointer(n.order,this._ordersBuffer.itemSize,s.FLOAT,!1,4,0),s.bindBuffer(s.ELEMENT_ARRAY_BUFFER,this._indexesBuffer),s.drawElements(s.TRIANGLE_STRIP,this._indexesBuffer.numItems,s.UNSIGNED_INT,0),s.enable(s.CULL_FACE)}}_refresh(){let e=this._changedBuffers.length;for(;e--;)this._changedBuffers[e]=!0}_update(){if(this._renderNode){let e=this._changedBuffers.length;for(;e--;)this._changedBuffers[e]&&(this._buffersUpdateCallbacks[e].call(this),this._changedBuffers[e]=!1)}}_deleteBuffers(){if(this._renderNode){let e=this._renderNode.renderer,t=e.handler.gl;t.deleteBuffer(this._verticesHighBuffer),t.deleteBuffer(this._verticesLowBuffer),t.deleteBuffer(this._ordersBuffer),t.deleteBuffer(this._indexesBuffer),t.deleteBuffer(this._colorsBuffer),this._verticesHighBuffer=null,this._verticesLowBuffer=null,this._ordersBuffer=null,this._indexesBuffer=null,this._colorsBuffer=null}}_createVerticesBuffer(){let e=this._renderNode.renderer.handler,t=this._verticesHigh.length/3;(!this._verticesHighBuffer||this._verticesHighBuffer.numItems!==t)&&(e.gl.deleteBuffer(this._verticesHighBuffer),e.gl.deleteBuffer(this._verticesLowBuffer),this._verticesHighBuffer=e.createStreamArrayBuffer(3,t),this._verticesLowBuffer=e.createStreamArrayBuffer(3,t)),this._verticesHigh=X(this._verticesHigh),this._verticesLow=X(this._verticesLow),e.setStreamArrayBuffer(this._verticesHighBuffer,this._verticesHigh),e.setStreamArrayBuffer(this._verticesLowBuffer,this._verticesLow)}_createIndexBuffer(){let e=this._renderNode.renderer.handler;e.gl.deleteBuffer(this._ordersBuffer),e.gl.deleteBuffer(this._indexesBuffer),this._orders=X(this._orders),this._ordersBuffer=e.createArrayBuffer(this._orders,1,this._orders.length/2),this._indexes=X(this._indexes,Uint32Array),this._indexesBuffer=e.createElementArrayBuffer(this._indexes,1,this._indexes.length)}_createColorsBuffer(){let e=this._renderNode.renderer.handler;e.gl.deleteBuffer(this._colorsBuffer),this._colors=X(this._colors),this._colorsBuffer=e.createArrayBuffer(new Float32Array(this._colors),4,this._colors.length/4)}}ut.__counter__=0;class vi{constructor(e={}){this.__id=vi.__counter__++,this._thickness=e.thickness||2,this._startPosition=lt(e.startPosition),this._startPositionHigh=new p,this._startPositionLow=new p,p.doubleToTwoFloats(this._startPosition,this._startPositionHigh,this._startPositionLow),this._endPosition=lt(e.endPosition),this._endPositionHigh=new p,this._endPositionLow=new p,p.doubleToTwoFloats(this._endPosition,this._endPositionHigh,this._endPositionLow),this._startColor=qe(e.startColor),this._endColor=qe(e.endColor),this._visibility=e.visibility!=null?e.visibility:!0,this._entity=null,this._handler=null,this._handlerIndex=-1}setStartPosition(e,t,i){this._startPosition.x=e,this._startPosition.y=t,this._startPosition.z=i,p.doubleToTwoFloats(this._startPosition,this._startPositionHigh,this._startPositionLow),this._handler&&this._handler.setStartPositionArr(this._handlerIndex,this._startPositionHigh,this._startPositionLow)}getLength(){return this._startPosition.distance(this._endPosition)}setStartPosition3v(e){this._startPosition.x=e.x,this._startPosition.y=e.y,this._startPosition.z=e.z,p.doubleToTwoFloats(this._startPosition,this._startPositionHigh,this._startPositionLow),this._handler&&this._handler.setStartPositionArr(this._handlerIndex,this._startPositionHigh,this._startPositionLow)}setEndPosition(e,t,i){this._endPosition.x=e,this._endPosition.y=t,this._endPosition.z=i,p.doubleToTwoFloats(this._endPosition,this._endPositionHigh,this._endPositionLow),this._handler&&this._handler.setEndPositionArr(this._handlerIndex,this._endPositionHigh,this._endPositionLow)}setEndPosition3v(e){this._endPosition.x=e.x,this._endPosition.y=e.y,this._endPosition.z=e.z,p.doubleToTwoFloats(this._endPosition,this._endPositionHigh,this._endPositionLow),this._handler&&this._handler.setEndPositionArr(this._handlerIndex,this._endPositionHigh,this._endPositionLow)}setThickness(e){this._thickness=e,this._handler&&this._handler.setThicknessArr(this._handlerIndex,e)}setColors4v(e,t){e&&(this._startColor.x=e.x,this._startColor.y=e.y,this._startColor.z=e.z,this._startColor.w=e.w),t&&(this._endColor.x=t.x,this._endColor.y=t.y,this._endColor.z=t.z,this._endColor.w=t.w),this._handler&&this._handler.setRgbaArr(this._handlerIndex,this._startColor,this._endColor)}setColorsHTML(e,t){e&&(this._startColor=ot(e)),t&&(this._endColor=ot(t)),this._handler&&this._handler.setRgbaArr(this._handlerIndex,this._startColor,this._endColor)}getStartPosition(){return this._startPosition}getEndPosition(){return this._endPosition}setVisibility(e){this._visibility=e,this._handler&&this._handler.setVisibility(this._handlerIndex,e)}getVisibility(){return this._visibility}remove(){this._entity=null,this._handler&&this._handler.remove(this)}setPickingColor3v(e){this._handler&&this._handler.setPickingColorArr(this._handlerIndex,e)}}vi.__counter__=0;let oe=new p,le=new p;class xi{constructor(e={}){if(this.__id=xi.__counter__++,this.visibility=e.visibility!=null?e.visibility:!0,this.color=new Float32Array([1,1,1,.5]),e.color){let t=qe(e.color);this.setColor(t.x,t.y,t.z,t.w)}e.opacity&&this.setOpacity(e.opacity),this._renderNode=null,this._entity=null,this._verticesHighBuffer=null,this._verticesLowBuffer=null,this._indexBuffer=null,this._verticesHigh=[],this._verticesLow=[],this._indexes=[],this._path=[],this._pickingColor=new Float32Array(4),this._gridSize=1,this._handler=null,this._handlerIndex=-1,e.path&&this.setPath(e.path)}setPickingColor3v(e){this._pickingColor[0]=e.x/255,this._pickingColor[1]=e.y/255,this._pickingColor[2]=e.z/255,this._pickingColor[3]=1}clear(){this._path.length=0,this._path=[],this._verticesHigh.length=0,this._verticesHigh=[],this._verticesLow.length=0,this._verticesLow=[],this._indexes.length=0,this._indexes=[],this._deleteBuffers()}setColor(e,t,i,r){r=r||this.color[3],this.color[0]=e,this.color[1]=t,this.color[2]=i,this.color[3]=r}setOpacity(e){this.color[3]=e||0}setVisibility(e){this.visibility=e}getVisibility(){return this.visibility}setRenderNode(e){this._renderNode=e,this._createBuffers()}remove(){this._entity=null,this._handler&&this._handler.remove(this)}draw(){if(this.visibility&&this._verticesHigh.length){let e=this._renderNode.renderer,t=e.handler.gl,i=e.handler.programs.strip,r=i._program,s=r.attributes,n=r.uniforms;i.activate(),t.disable(t.CULL_FACE),t.uniformMatrix4fv(n.viewMatrix,!1,e.activeCamera.getViewMatrix()),t.uniformMatrix4fv(n.projectionMatrix,!1,e.activeCamera.getProjectionMatrix()),t.uniform3fv(n.eyePositionHigh,e.activeCamera.eyeHigh),t.uniform3fv(n.eyePositionLow,e.activeCamera.eyeLow),t.uniform4fv(n.uColor,this.color),t.uniform1f(n.uOpacity,this._entity._entityCollection._fadingOpacity),t.bindBuffer(t.ARRAY_BUFFER,this._verticesHighBuffer),t.vertexAttribPointer(s.aVertexPositionHigh,this._verticesHighBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._verticesLowBuffer),t.vertexAttribPointer(s.aVertexPositionLow,this._verticesLowBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this._indexBuffer),t.drawElements(e.handler.gl.TRIANGLE_STRIP,this._indexBuffer.numItems,t.UNSIGNED_INT,0),t.enable(t.CULL_FACE)}}drawPicking(){if(this.visibility&&this._verticesHigh.length){let e=this._renderNode.renderer,t=e.handler.gl,i=e.handler.programs.strip,r=i._program,s=r.attributes,n=r.uniforms;i.activate(),t.disable(t.CULL_FACE),t.uniformMatrix4fv(n.viewMatrix,!1,e.activeCamera.getViewMatrix()),t.uniformMatrix4fv(n.projectionMatrix,!1,e.activeCamera.getProjectionMatrix()),t.uniform3fv(n.eyePositionHigh,e.activeCamera.eyeHigh),t.uniform3fv(n.eyePositionLow,e.activeCamera.eyeLow),t.uniform1f(n.uOpacity,this._entity._entityCollection._fadingOpacity!=0?1:0),t.uniform4fv(n.uColor,this._pickingColor),t.bindBuffer(t.ARRAY_BUFFER,this._verticesHighBuffer),t.vertexAttribPointer(s.aVertexPositionHigh,this._verticesHighBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._verticesLowBuffer),t.vertexAttribPointer(s.aVertexPositionLow,this._verticesLowBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this._indexBuffer),t.drawElements(e.handler.gl.TRIANGLE_STRIP,this._indexBuffer.numItems,t.UNSIGNED_INT,0),t.enable(t.CULL_FACE)}}_deleteBuffers(){if(this._renderNode&&this._renderNode.renderer){let e=this._renderNode.renderer,t=e.handler.gl;t.deleteBuffer(this._indexBuffer),t.deleteBuffer(this._verticesHighBuffer),t.deleteBuffer(this._verticesLowBuffer)}this._verticesHighBuffer=null,this._verticesLowBuffer=null,this._indexBuffer=null}_createBuffers(){if(this._renderNode&&this._renderNode.renderer&&this._renderNode.renderer.isInitialized()){let e=this._renderNode.renderer.handler.gl;e.deleteBuffer(this._indexBuffer),e.deleteBuffer(this._verticesHighBuffer),e.deleteBuffer(this._verticesLowBuffer),this._verticesHighBuffer=this._renderNode.renderer.handler.createArrayBuffer(new Float32Array(this._verticesHigh),3,this._verticesHigh.length/3),this._verticesLowBuffer=this._renderNode.renderer.handler.createArrayBuffer(new Float32Array(this._verticesLow),3,this._verticesLow.length/3),this._indexBuffer=this._renderNode.renderer.handler.createElementArrayBuffer(new Uint32Array(this._indexes),1,this._indexes.length)}}addEdge3v(e,t){let i=this._path.length;if(i===0)this._path.push([e.clone(),t.clone()]);else{let r=this._path[i-1][0],s=this._path[i-1][1];this._path.push([e.clone(),t.clone()]);let n=this._verticesHigh,a=this._verticesLow,o=this._gridSize,l=o+1,h=new p,d=this._verticesHigh.length/3,f=d,u=Math.abs(r.sub(s).normal().dot(e.sub(r).normal()));for(let g=0;g<l;g++){let _=g/o,m=r.lerp(e,_),v=s.lerp(t,_);for(let b=0;b<l;b++){let y=b/o,w=r.lerp(s,y),x=e.lerp(t,y);u!==1?new Ve(m,v).intersects(new Ve(w,x),h):h=x,f=d+g*l+b,p.doubleToTwoFloats(h,oe,le);let T=f*3;n[T]=oe.x,n[T+1]=oe.y,n[T+2]=oe.z,a[T]=le.x,a[T+1]=le.y,a[T+2]=le.z,g<o&&this._indexes.push(f,f+l)}g<o&&this._indexes.push(f+l,f+1)}this._createBuffers()}}setEdge3v(e,t,i){if(i===this._path.length){this.addEdge3v(e,t);return}if(this._path[i]){if(this._path[i][0]=e,this._path[i][1]=t,this._path.length>1){let r=this._gridSize,s=r+1,n=s*s,a=new p,o=this._verticesHigh,l=this._verticesLow;if(i===this._path.length-1){let h=this._path[i-1][0],d=this._path[i-1][1],f=this._verticesHigh.length/3-n,u=f,g=Math.abs(h.sub(d).normal().dot(e.sub(h).normal()));for(let _=0;_<s;_++){let m=_/r,v=h.lerp(e,m),b=d.lerp(t,m);for(let y=0;y<s;y++){let w=y/r,x=h.lerp(d,w),T=e.lerp(t,w);g!==1?new Ve(v,b).intersects(new Ve(x,T),a):a=T,u=f+_*s+y,p.doubleToTwoFloats(a,oe,le);let A=u*3;o[A]=oe.x,o[A+1]=oe.y,o[A+2]=oe.z,l[A]=le.x,l[A+1]=le.y,l[A+2]=le.z}}}else if(i===0){let h=0,d=e,f=t;e=this._path[1][0],t=this._path[1][1];for(let u=0;u<s;u++){let g=u/r,_=d.lerp(e,g),m=f.lerp(t,g);for(let v=0;v<s;v++){let b=v/r,y=d.lerp(f,b),w=e.lerp(t,b);new Ve(_,m).intersects(new Ve(y,w),a),h=u*s+v,p.doubleToTwoFloats(a,oe,le);let x=h*3;o[x]=oe.x,o[x+1]=oe.y,o[x+2]=oe.z,l[x]=le.x,l[x+1]=le.y,l[x+2]=le.z}}}else if(i>0&&i<this._path.length){let h=this._path[i-1][0],d=this._path[i-1][1],f=this._path[i+1][0],u=this._path[i+1][1],g=i*n,_=(i-1)*n,m=_;for(let v=0;v<s;v++){let b=v/r,y=h.lerp(e,b),w=t.lerp(u,b),x=e.lerp(f,b),T=d.lerp(t,b);for(let A=0;A<s;A++){let E=A/r,C=h.lerp(d,E),P=e.lerp(t,E);new Ve(y,T).intersects(new Ve(C,P),a);let I=v*s+A;m=_+I,p.doubleToTwoFloats(a,oe,le);let k=m*3;o[k]=oe.x,o[k+1]=oe.y,o[k+2]=oe.z,l[k]=le.x,l[k+1]=le.y,l[k+2]=le.z;let z=f.lerp(u,E);P=e.lerp(t,E),new Ve(x,w).intersects(new Ve(P,z),a),m=g+I,p.doubleToTwoFloats(a,oe,le),k=m*3,o[k]=oe.x,o[k+1]=oe.y,o[k+2]=oe.z,l[k]=le.x,l[k+1]=le.y,l[k+2]=le.z}}}this._createBuffers()}}else console.warn(`strip index ${i} is out of range`)}removeEdge(e){this._path.splice(e,1),this.setPath([].concat(this._path))}setGridSize(e){this._gridSize=e,this.setPath([].concat(this._path))}getPath(){return this._path}setPath(e){this._verticesHigh=[],this._verticesLow=[],this._indexes=[],this._path=[];for(let t=0;t<e.length;t++){let i=e[t][0],r=e[t][1];i instanceof Array&&(i=new p(i[0],i[1],i[2])),r instanceof Array&&(r=new p(r[0],r[1],r[2])),this.addEdge3v(i,r)}}insertEdge3v(e,t,i){if(i<this._path.length){let r=[].concat(this._path);r.splice(i,0,[e,t]),this.setPath(r)}else i===this._path.length&&this.addEdge3v(e,t)}}xi.__counter__=0;class yi{constructor(e={}){e.properties=e.properties||{},this.__id=yi.__counter__++,this.properties=e.properties||{},this.properties.name=this.properties.name!=null?this.properties.name:"",this.childrenNodes=[],this.parent=null,this._cartesian=lt(e.cartesian),this._lonLat=Xi(e.lonlat),this._lonLatMerc=new B,this._altitude=e.altitude||0,this._visibility=e.visibility!=null?e.visibility:!0,this._entityCollection=null,this._entityCollectionIndex=-1,this._layer=null,this._layerIndex=-1,this._pickingColor=new p(0,0,0),this._featureConstructorArray={billboard:[Sa,this.setBillboard],label:[za,this.setLabel],polyline:[ut,this.setPolyline],pointCloud:[mi,this.setPointCloud],geometry:[Xe,this.setGeometry],geoObject:[Ia,this.setGeoObject],strip:[xi,this.setStrip],ray:[vi,this.setRay]},this.billboard=this._createOptionFeature("billboard",e.billboard),this.label=this._createOptionFeature("label",e.label),this.polyline=this._createOptionFeature("polyline",e.polyline),this.ray=this._createOptionFeature("ray",e.ray),this.pointCloud=this._createOptionFeature("pointCloud",e.pointCloud),this.geometry=this._createOptionFeature("geometry",e.geometry),this.geoObject=this._createOptionFeature("geoObject",e.geoObject),this.strip=this._createOptionFeature("strip",e.strip)}get id(){return this.__id}isEqual(e){return this.__id===e.__id}get layerIndex(){return this._layerIndex}get instanceName(){return"Entity"}_createOptionFeature(e,t){if(t){let i=this._featureConstructorArray[e];return i[1].call(this,new i[0](t))}return null}getCollectionIndex(){return this._entityCollectionIndex}addTo(e,t=!1){return e.add(this,t),this}remove(){this._layer&&this._layer.removeEntity(this),this._entityCollection&&this._entityCollection.removeEntity(this)}setVisibility(e){this._visibility=e,this.billboard&&this.billboard.setVisibility(e),this.geoObject&&this.geoObject.setVisibility(e),this.label&&this.label.setVisibility(e),this.polyline&&this.polyline.setVisibility(e),this.ray&&this.ray.setVisibility(e),this.geometry&&this.geometry.setVisibility(e);for(let t=0;t<this.childrenNodes.length;t++)this.childrenNodes[t].setVisibility(e)}getVisibility(){return this._visibility}setCartesian3v(e){this.setCartesian(e.x,e.y,e.z)}setCartesian(e,t,i){let r=this._cartesian;r.x=e||0,r.y=t||0,r.z=i||0,this.billboard&&this.billboard.setPosition3v(r),this.geoObject&&this.geoObject.setPosition3v(r),this.label&&this.label.setPosition3v(r);for(let n=0;n<this.childrenNodes.length;n++)this.childrenNodes[n].setCartesian(e,t,i);let s=this._entityCollection;s&&s.renderNode&&s.renderNode.ellipsoid&&(this._lonLat=s.renderNode.ellipsoid.cartesianToLonLat(r),Math.abs(this._lonLat.lat)<ce?this._lonLatMerc=this._lonLat.forwardMercator():this._lonLatMerc.lon=this._lonLatMerc.lat=this._lonLatMerc.height=0)}_setCartesian3vSilent(e,t=!1){let i=this._cartesian;i.x=e.x||0,i.y=e.y||0,i.z=e.z||0,this.billboard&&this.billboard.setPosition3v(i),this.geoObject&&this.geoObject.setPosition3v(i),this.label&&this.label.setPosition3v(i);for(let s=0;s<this.childrenNodes.length;s++)this.childrenNodes[s].setCartesian(i.x,i.y,i.z);let r=this._entityCollection;!t&&r&&r.renderNode&&r.renderNode.ellipsoid&&(this._lonLat=r.renderNode.ellipsoid.cartesianToLonLat(i),Math.abs(this._lonLat.lat)<ce&&(this._lonLatMerc=this._lonLat.forwardMercator()))}getLonLat(){return this._lonLat.clone()}setLonLat(e){let t=this._lonLat;t.lon=e.lon,t.lat=e.lat,t.height=e.height;let i=this._entityCollection;i&&i.renderNode&&i.renderNode.ellipsoid&&(Math.abs(t.lat)<ce&&(this._lonLatMerc=t.forwardMercator()),i.renderNode.ellipsoid.lonLatToCartesianRes(t,this._cartesian),this.setCartesian3v(this._cartesian))}setLonLat2(e,t,i){let r=this._lonLat;r.lon=e,r.lat=t,r.height=i??r.height;let s=this._entityCollection;s&&s.renderNode&&s.renderNode.ellipsoid&&(Math.abs(r.lat)<ce?this._lonLatMerc=r.forwardMercator():this._lonLatMerc.lon=this._lonLatMerc.lat=this._lonLatMerc.height=0,s.renderNode.ellipsoid.lonLatToCartesianRes(r,this._cartesian),this.setCartesian3v(this._cartesian))}setAltitude(e){this._altitude=e}getAltitude(){return this._altitude}getCartesian(){return this._cartesian.clone()}setBillboard(e){return this.billboard&&this.billboard.remove(),this.billboard=e,this.billboard._entity=this,this.billboard.setPosition3v(this._cartesian),this.billboard.setVisibility(this._visibility),this._entityCollection&&this._entityCollection.billboardHandler.add(e),e}setLabel(e){return this.label&&this.label.remove(),this.label=e,this.label._entity=this,this.label.setPosition3v(this._cartesian),this.label.setVisibility(this._visibility),this._entityCollection&&this._entityCollection.labelHandler.add(e),e}setRay(e){return this.ray&&this.ray.remove(),this.ray=e,this.ray._entity=this,this.ray.setVisibility(this._visibility),this._entityCollection&&this._entityCollection.rayHandler.add(e),e}setPolyline(e){return this.polyline&&this.polyline.remove(),this.polyline=e,this.polyline._entity=this,this.polyline.setVisibility(this._visibility),this._entityCollection&&this._entityCollection.polylineHandler.add(e),e}setPointCloud(e){return this.pointCloud&&this.pointCloud.remove(),this.pointCloud=e,this.pointCloud._entity=this,this.pointCloud.setVisibility(this._visibility),this._entityCollection&&this._entityCollection.pointCloudHandler.add(e),e}setGeometry(e){return this.geometry&&this.geometry.remove(),this.geometry=e,this.geometry._entity=this,this.geometry.setVisibility(this._visibility),this._layer&&this._layer.add(this),e}setGeoObject(e){return this.geoObject&&this.geoObject.remove(),this.geoObject=e,this.geoObject._entity=this,this.geoObject.setPosition3v(this._cartesian),this.geoObject.setVisibility(this._visibility),this._entityCollection&&this._entityCollection.geoObjectHandler.add(e),e}setStrip(e){return this.strip&&this.strip.remove(),this.strip=e,this.strip._entity=this,this.strip.setVisibility(this._visibility),this._entityCollection&&this._entityCollection.stripHandler.add(e),e}get layer(){return this._layer}get rendererEvents(){return this._layer?this._layer.events:this._entityCollection?this._entityCollection.events:null}appendChild(e){e._entityCollection=this._entityCollection,e._pickingColor=this._pickingColor,e.parent=this,this.childrenNodes.push(e),this._entityCollection&&this._entityCollection.appendChildEntity(e)}setPickingColor(){let e=this._pickingColor;this.billboard&&this.billboard.setPickingColor3v(e),this.label&&this.label.setPickingColor3v(e),this.polyline&&this.polyline.setPickingColor3v(e),this.ray&&this.ray.setPickingColor3v(e),this.strip&&this.strip.setPickingColor3v(e),this.geoObject&&this.geoObject.setPickingColor3v(e);for(let t=0;t<this.childrenNodes.length;t++)this.childrenNodes[t].setPickingColor()}getExtent(){let e,t=this._lonLat;this.billboard||this.label?e=new U(new B(t.lon,t.lat),new B(t.lon,t.lat)):e=new U(new B(180,90),new B(-180,-90));let i=e.southWest,r=e.northEast;if(this.polyline){let s=this.polyline.getExtent();s.southWest.lon<i.lon&&(i.lon=s.southWest.lon),s.southWest.lat<i.lat&&(i.lat=s.southWest.lat),s.northEast.lon>r.lon&&(r.lon=s.northEast.lon),s.northEast.lat>r.lat&&(r.lat=s.northEast.lat)}if(this.geometry){let s=this.geometry.getExtent();s.southWest.lon<i.lon&&(i.lon=s.southWest.lon),s.southWest.lat<i.lat&&(i.lat=s.southWest.lat),s.northEast.lon>r.lon&&(r.lon=s.northEast.lon),s.northEast.lat>r.lat&&(r.lat=s.northEast.lat)}for(let s=0;s<this.childrenNodes.length;s++){let n=this.childrenNodes[s].getExtent();n.southWest.lon<i.lon&&(i.lon=n.southWest.lon),n.southWest.lat<i.lat&&(i.lat=n.southWest.lat),n.northEast.lon>r.lon&&(r.lon=n.northEast.lon),n.northEast.lat>r.lat&&(r.lat=n.northEast.lat)}return e}}yi.__counter__=0;function ka(c){const e=[[0,0,0]],t=[[0,0]],i=[[0,0,0]],r=[e,t,i];let s=[[],[],[]];const n=[],a=[];let o,l=["default"],h="default",d="default";function f(){o&&o.data.vertices.length&&(o=null)}function u(){if(!o){const b=[],y=[],w=[];s=[b,y,w],o={object:d,groups:l,material:h,data:{vertices:b,textures:y,normals:w}},a.push(o)}}function g(b){b.split("/").forEach((w,x)=>{if(!w)return;const T=parseInt(w),A=T+(T>=0?0:r[x].length);s[x].push(...r[x][A])})}const _={v(b){e.push(b.map(parseFloat))},vn(b){i.push(b.map(parseFloat))},vt(b){t.push(b.map(parseFloat))},f(b){u();const y=b.length-2;for(let w=0;w<y;++w)g(b[0]),g(b[w+1]),g(b[w+2])},s:()=>{},mtllib(b,y){n.push(y)},usemtl(b,y){h=y,f()},g(b){l=b,f()},o(b,y){d=y,f()}},m=/(\w*)(?: )*(.*)/,v=c.split(`
|
|
207
|
-
`);for(let b=0;b<v.length;++b){const y=v[b].trim();if(y===""||y.startsWith("#"))continue;const w=m.exec(y);if(!w)continue;const[,x,T]=w,A=y.split(/\s+/).slice(1),E=_[x];if(!E){console.warn("unhandled keyword:",x);continue}E(A,T)}for(const b of a)b.data=Object.fromEntries(Object.entries(b.data).filter(([y,w])=>w.length>0));return{geometries:a,materialLibs:n}}function Da(c){return{geometries:c.geometries.map(t=>{const i=t.data.vertices,r=t.data.normals,s=t.data.textures;Na(t.data,0);let n=[],a=[],o=[];for(let l=0;l<i.length;l+=3){const h=i[l],d=i[l+1],f=i[l+2];n.push(h,d,f)}for(let l=0;l<r.length;l+=3){const h=r[l],d=r[l+1],f=r[l+2];a.push(h,d,-f)}for(let l=0;l<s.length;l+=2){const h=s[l],d=1-s[l+1];o.push(h,d)}return{object:t.object,groups:t.groups,material:t.material,data:{vertices:n,normals:a,textures:o}}}),materialLibs:c.materialLibs}}function Na(c,e){const t=Math.cos(e),i=Math.sin(e),r=c.vertices,s=c.normals;for(let n=0;n<r.length;n+=3){const a=r[n],o=r[n+1],l=r[n+2];r[n]=a*t+l*i,r[n+1]=o,r[n+2]=-a*i+l*t;const h=s[n],d=s[n+1],f=s[n+2];s[n]=h*t+f*i,s[n+1]=d,s[n+2]=-h*i+f*t}return{vertices:r,normals:s}}function Ha(c){return c instanceof Array?new Float32Array(c):typeof c=="string"?qi(c):new Float32Array([1,1,1,1])}class xe{constructor(e={}){if(this._name=e.name||"noname",this._vertices=e.vertices||[],this._numVertices=this._vertices.length/3,this._texCoords=e.texCoords||new Array(2*this._numVertices),e.center&&xe.centering(this._vertices),this._src=e.src||null,this.color=Ha(e.color),e.scale&&xe.scale(this._vertices,e.scale),e.indices)this._indices=e.indices,this._normals=e.normals||[];else{this._normals=xe.getNormals(this._vertices),this._indices=new Array(this._vertices.length/3);for(let t=0,i=this._indices.length;t<i;t++)this._indices[t]=t}}static centering(e){let t=fe,i=fe,r=fe,s=pe,n=pe,a=pe;for(let d=0,f=e.length;d<f;d+=3){let u=e[d],g=e[d+1],_=e[d+2];u<t&&(t=u),g<i&&(i=g),_<r&&(r=_),u>s&&(s=u),g>n&&(n=g),_>a&&(a=_)}let o=t+(s-t)*.5,l=i+(n-i)*.5,h=r+(a-r)*.5;for(let d=0,f=e.length;d<f;d+=3)e[d]-=o,e[d+1]-=l,e[d+2]-=h}get src(){return this._src}set src(e){this._src=e}get name(){return this._name}get vertices(){return this._vertices}get normals(){return this._normals}get indices(){return this._indices}get texCoords(){return this._texCoords}get numVertices(){return this._numVertices}static scale(e,t){for(let i=0;i<e.length;i++)e[i]*=t}static centroid(e){let t=1e3,i=1e3,r=1e3,s=-1e3,n=-1e3,a=-1e3;for(let o=0;o<e.length;o+=3){let l=e[o],h=e[o+1],d=e[o+2];l<t&&(t=l),h<i&&(i=h),d<r&&(r=d),l>s&&(s=l),h>n&&(n=h),d>a&&(a=d)}return[t+(s-t)*.5,i+(n-i)*.5,r+(a-r)*.5]}static translate(e,t){for(let i=0;i<e.length;i+=3)e[i]-=t[0],e[i+1]-=t[1],e[i+2]-=t[2]}static getNormals(e){let t=new Array(e.length);for(let i=0;i<e.length;i+=9){let r=i,s=i+3,n=i+6,a=e[r],o=e[r+1],l=e[r+2],h=e[s],d=e[s+1],f=e[s+2],u=e[n],g=e[n+1],_=e[n+2],m=h-a,v=d-o,b=f-l,y=u-a,w=g-o,x=_-l,T=v*x-b*w,A=b*y-m*x,E=m*w-v*y,C=Math.sqrt(T*T+A*A+E*E);T/=C,A/=C,E/=C,t[r]=T,t[r+1]=A,t[r+2]=E,t[s]=T,t[s+1]=A,t[s+2]=E,t[n]=T,t[n+1]=A,t[n+2]=E}return t}static createSphere(e=16,t=16,i=1,r=0,s=0,n=0){let a=[],o=[],l=[];for(let h=0;h<=t;h++){let d=h*Math.PI/t,f=Math.sin(d),u=Math.cos(d);for(let g=0;g<=e;g++){let _=g*2*Math.PI/e,m=Math.sin(_),b=Math.cos(_)*f+r,y=u+s,w=m*f+n;l.push(b),l.push(y),l.push(w),a.push(i*b),a.push(i*y),a.push(i*w)}}for(let h=0;h<t;h++)for(let d=0;d<e;d++){let f=h*(e+1)+d,u=f+e+1;o.push(f),o.push(f+1),o.push(u),o.push(u),o.push(f+1),o.push(u+1)}return new xe({vertices:a,normals:l,indices:o})}static createDisc(e=1,t=0,i=8,r=!0,s=0,n=0,a=0,o=0){let l=[],h=[],d=[],f=0,u=Math.PI*2,g=r?1:-1,_=s;for(let v=1;v<=i;v++)l.push(n,t*g+a,o),d.push(0,g,0),s++;let m=s;for(let v=0;v<=i;v++){let y=v/i*u+f,w=Math.cos(y),x=Math.sin(y);l.push(e*x+n,t*g+a,e*w+o),d.push(0,g,0),s++}for(let v=0;v<i;v++){let b=_+v,y=m+v;r?h.push(y,y+1,b):h.push(y+1,y,b)}return new xe({vertices:l,normals:d,indices:h})}static createCylinder(e=1,t=1,i=1,r=32,s=1,n=!0,a=!0,o=0,l=0,h=0){let d=[],f=[],u=[],g=0,_=Math.PI*2,m=0,v=[],b=new p,y=(t-e)/i;for(let w=0;w<=s;w++){let x=[],T=w/s,A=T*(t-e)+e;for(let E=0;E<=r;E++){let P=E/r*_+g,I=Math.sin(P),k=Math.cos(P);d.push(A*I+o,-T*i+i+l,A*k+h),b.set(I,y,k).normalize(),u.push(b.x,b.y,b.z),x.push(m++)}v.push(x)}for(let w=0;w<r;w++)for(let x=0;x<s;x++){let T=v[x][w],A=v[x+1][w],E=v[x+1][w+1],C=v[x][w+1];f.push(T,A,C),f.push(A,E,C)}if(e!==0&&n){let w=xe.createDisc(e,i,r,!0,m,o,l,h);d.push(...w.vertices),u.push(...w.normals),f.push(...w.indices)}if(t!==0&&a){let w=xe.createDisc(t,0,r,!1,m+(n?1+2*r:0),o,l,h);d.push(...w.vertices),u.push(...w.normals),f.push(...w.indices)}return new xe({vertices:d,normals:u,indices:f})}static createCube(e=1,t=1,i=1,r=0,s=0,n=0){let a=e*.5+r,o=t*.5+s,l=i*.5+n;return new xe({vertices:[-a,-o,l,a,-o,-l,a,-o,l,-a,-o,l,-a,-o,-l,a,-o,-l,-a,o,l,a,o,l,a,o,-l,-a,o,l,a,o,-l,-a,o,-l,-a,-o,l,a,-o,l,-a,o,l,-a,o,l,a,-o,l,a,o,l,-a,-o,-l,-a,o,-l,a,-o,-l,-a,o,-l,a,o,-l,a,-o,-l,a,-o,l,a,-o,-l,a,o,l,a,o,l,a,-o,-l,a,o,-l,-a,-o,l,-a,o,l,-a,-o,-l,-a,o,l,-a,o,-l,-a,-o,-l]})}static createArrow(e=0,t=2.1,i=-15){return new xe({vertices:[0,t,0,7,0,6,0,0,i,0,0,e,7,0,6,0,t,0,-7,0,6,0,0,e,0,t,0,-7,0,6,0,t,0,0,0,i,-7,0,6,0,0,i,0,0,e,0,0,e,0,0,i,7,0,6]})}static async loadObj(e){return(await fetch(e,{mode:"cors"}).then(i=>i.text()).then(i=>Da(ka(i))).catch(()=>[])).geometries.map(({data:{vertices:i,normals:r,textures:s}})=>new xe({vertices:i,normals:r,texCoords:s}))}}class bi{constructor(e){this.__id=bi.__counter__++,this._name=e||`nonameNode:${this.__id}`,this.topNode=this,this._dictionary={},this._dictionary[this._name]=this,this.childNodes=[],this.parentNode=null}get name(){return this._name}addNode(e){this.parentNode==null?e.topNode=this:e.topNode=this.topNode,e.parentNode=this,e._dictionary=this.topNode._dictionary,this.childNodes.push(e),this.topNode._dictionary[e.name]=e}destroy(){for(let e=0;e<this.childNodes.length;e++)this.childNodes[e].destroy();this._clear()}getNodeByName(e){return this._dictionary[e]}_clear(){this.parentNode=null,this.topNode=this,this.childNodes.length=0}isEqual(e){return e.__id===this.__id}}bi.__counter__=0;class Oa extends bi{constructor(e){super(e),this.childNodes=[],this.renderer=null,this.drawMode=0,this.show=!0,this._isActive=!0,this.lightEnabled=!1,this._lights=[],this._lightsNames=[],this._lightsPositions=[],this._lightsParamsv=[],this._lightsParamsf=[],this.entityCollections=[],this._pickingId=-1}addNode(e){super.addNode(e),this.renderer&&e.assign(this.renderer)}assign(e){this.renderer=e,this._pickingId=e.addPickingCallback(this,this._entityCollectionPickingCallback),this.initialize()}initialize(){if(this.renderer&&this.renderer.isInitialized()){for(let e=0;e<this.entityCollections.length;e++)this.entityCollections[e].bindRenderNode(this);this.init()}}init(){}onremove(){}remove(){let e=this.renderer,t=this.name;if(e){e.renderNodes[t]&&e.renderNodes[t].isEqual(this)&&(e.renderNodes[t]=null,delete e.renderNodes[t]);for(let i=0;i<e._renderNodesArr.length;i++)if(e._renderNodesArr[i].isEqual(this)){e._renderNodesArr.splice(i,1);break}e.removePickingCallback(this._pickingId),this._pickingId=-1,this.onremove&&this.onremove()}}addEntityCollection(e,t){return e.addTo(this,t),this}removeEntityCollection(e){e.remove()}addLight(e){return e.addTo(this),this}getLightByName(e){let t=this._lightsNames.indexOf(e);return this._lights[t]}removeLight(e){e.remove()}preDrawNode(){this._isActive&&this._preDrawNodes()}drawNode(){this._isActive&&this._drawNodes()}isActive(){return this._isActive}setActive(e){this._isActive=e,this.renderer&&(this._isActive&&this._pickingId===-1?this._pickingId=this.renderer.addPickingCallback(this,this._entityCollectionPickingCallback):!this._isActive&&this._pickingId!==-1&&(this.renderer.removePickingCallback(this._pickingId),this._pickingId=-1));for(let t=0;t<this.childNodes.length;t++)this.childNodes[t].setActive(e)}setDrawMode(e){this.drawMode=e;for(let t=0;t<this.childNodes.length;t++)this.childNodes[t].setDrawMode(e)}transformLights(){for(let e=0;e<this._lights.length;e++){let t=e*3,i;i=this._lights[e]._position,this._lightsPositions[t]=i.x,this._lightsPositions[t+1]=i.y,this._lightsPositions[t+2]=i.z}}updateBillboardsTexCoords(){for(let e=0;e<this.entityCollections.length;e++)this.entityCollections[e].billboardHandler.refreshTexCoordsArr()}frame(){}preFrame(){}_preDrawNodes(){for(let e=0;e<this.childNodes.length;e++)this.childNodes[e]._isActive&&this.childNodes[e]._preDrawNodes();this.show&&(this.preFrame(),this.drawEntityCollections(this.entityCollections))}_drawNodes(){for(let e=0;e<this.childNodes.length;e++)this.childNodes[e]._isActive&&this.childNodes[e]._drawNodes();this.show&&this.frame()}drawEntityCollections(e){this.renderer.enqueueEntityCollectionsToDraw(e)}drawPickingEntityCollections(e){if(e.length){let t=e.length;for(;t--;)e[t]._fadingOpacity&&e[t].billboardHandler.drawPicking();for(t=e.length;t--;)e[t]._fadingOpacity&&e[t].geoObjectHandler.drawPicking();for(t=e.length;t--;)e[t]._fadingOpacity&&e[t].labelHandler.drawPicking();for(t=e.length;t--;)e[t]._fadingOpacity&&e[t].rayHandler.drawPicking();for(t=e.length;t--;)e[t]._visibility&&e[t].polylineHandler.drawPicking();for(t=e.length;t--;)e[t]._visibility&&e[t].stripHandler.drawPicking()}}_entityCollectionPickingCallback(){this.drawPickingEntityCollections(this.entityCollections)}}class Va{constructor(){this._container=document.createElement("div"),this._container.classList.add("ogConsole"),this._container.style.display="none",document.body&&document.body.appendChild(this._container),this._visibility=!1}getVisibility(){return this._visibility}setVisibility(e){this._visibility!=e&&(this._visibility=e,this._visibility?this.show():this.hide())}show(){this._container.parentNode||document.body&&document.body.appendChild(this._container),this._container.style.display="block",this._visibility=!0}hide(){this._container.style.display="none",this._visibility=!1}logErr(e){let t=document.createElement("div");t.classList.add("ogConsole-text"),t.classList.add("ogConsole-error"),t.innerHTML="error: "+e,console.trace(t.innerHTML),this._container.appendChild(t),this.show()}logWrn(e){let t=document.createElement("div");t.classList.add("ogConsole-text"),t.classList.add("ogConsole-warning"),t.innerHTML="warning: "+e,console.trace(t.innerHTML),this._container.appendChild(t),this.show()}log(e){let t=document.createElement("div");t.classList.add("ogConsole-text"),t.innerHTML=e,console.trace(e),this._container.appendChild(t),this.show()}}const He=new Va;let Gt=["FLOAT","DOUBLE","BOOL","INT","UINT","VEC2","VEC3","VEC4","DVEC2","DVEC3","DVEC4","BVEC2","BVEC3","BVEC4","IVEC2","IVEC3","IVEC4","UVEC2","UVEC3","UVEC4","MAT2","DMAT2","MAT3","DMAT3","MAT4","DMAT4","MAT2X3","MAT2X4","MAT3X2","MAT3X4","MAT4X2","MAT4X3","DMAT2X3","DMAT2X4","DMAT3X2","DMAT3X4","DMAT4X2","DMAT4X3","SAMPLER1D","SAMPLER2D","SAMPLER3D","SAMPLERCUBE","SAMPLER2DSHADOW","SAMPLER2DARRAY","INTXX","FLOATXX"];const me={};for(let c=0;c<Gt.length;c++)me[Gt[c]]=c;const tr={};for(let c=0;c<Gt.length;c++)tr[Gt[c].toLowerCase()]=me[Gt[c]];const ye={u:[],a:[]};ye.u[me.MAT4]=function(c,e){c.gl.uniformMatrix4fv(e._pName,!1,e.value)},ye.u[me.MAT3]=function(c,e){c.gl.uniformMatrix3fv(e._pName,!1,e.value)},ye.u[me.FLOAT]=function(c,e){c.gl.uniform1f(e._pName,e.value)},ye.u[me.INT]=function(c,e){c.gl.uniform1i(e._pName,e.value)},ye.u[me.VEC2]=function(c,e){c.gl.uniform2fv(e._pName,e.value)},ye.u[me.VEC3]=function(c,e){c.gl.uniform3fv(e._pName,e.value)},ye.u[me.VEC4]=function(c,e){c.gl.uniform4fv(e._pName,e.value)},ye.u[me.SAMPLER2D]=function(c,e){let t=c.gl;t.activeTexture(t.TEXTURE0+c._textureID),t.bindTexture(t.TEXTURE_2D,e.value),t.uniform1i(e._pName,c._textureID),c._textureID++},ye.u[me.SAMPLERCUBE]=function(c,e){let t=c.gl;t.activeTexture(t.TEXTURE0+c._textureID),t.bindTexture(t.TEXTURE_CUBE_MAP,e.value),t.uniform1i(e._pName,c._textureID),c._textureID++},ye.u[me.SAMPLER2DARRAY]=function(c,e){let t=e.value,i=c.gl,r=t.length,s=new Int32Array(r);for(let n=0;n<r;n++)i.activeTexture(i.TEXTURE0+c._textureID+n),i.bindTexture(i.TEXTURE_2D,t[n]),s[n]=n;i.uniform1iv(e._pName,s)},ye.u[me.INTXX]=function(c,e){c.gl.uniform1iv(e._pName,e.value)},ye.u[me.FLOATXX]=function(c,e){c.gl.uniform1fv(e._pName,e.value)},ye.a[me.FLOAT]=function(c,e){c.gl.vertexAttrib1f(e._pName,e.value)},ye.a[me.VEC2]=function(c,e){c.gl.vertexAttrib2fv(e._pName,e.value)},ye.a[me.VEC3]=function(c,e){c.gl.vertexAttrib3fv(e._pName,e.value)};const Ua=["BYTE","SHORT","UNSIGNED_BYTE","UNSIGNED_SHORT","FLOAT","HALF_FLOAT"];class G{constructor(e,t){this.name=e,this._attributes={};for(let i in t.attributes)typeof t.attributes[i]=="string"||typeof t.attributes[i]=="number"?this._attributes[i]={type:t.attributes[i]}:this._attributes[i]=t.attributes[i];this._uniforms={};for(let i in t.uniforms)typeof t.uniforms[i]=="string"||typeof t.uniforms[i]=="number"?this._uniforms[i]={type:t.uniforms[i]}:this._uniforms[i]=t.uniforms[i];this.vertexShader=t.vertexShader,this.fragmentShader=t.fragmentShader,this.gl=null,this._variables={},this._p=null,this._textureID=0,this._attribArrays=[],this._attribDivisor=[],this.attributes={},this.uniforms={},this.vertexAttribDivisor=null,this.drawElementsInstanced=null}static bindBuffer(e,t){let i=e.gl;i&&(i.bindBuffer(i.ARRAY_BUFFER,t.value),i.vertexAttribPointer(t._pName,t.value.itemSize,t.itemType,t.normalized,0,0))}use(){this.gl&&this.gl.useProgram(this._p)}set(e){this._textureID=0;for(let t in e)this._variables[t].value=e[t],this._variables[t].func(this,this._variables[t])}apply(){this._textureID=0;let e=this._variables;for(let t in e)e[t].func(this,e[t])}drawIndexBuffer(e,t){let i=this.gl;i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,t),i.drawElements(e,t.numItems,i.UNSIGNED_SHORT,0)}drawArrays(e,t){this.gl.drawArrays(e,0,t)}_getShaderCompileStatus(e,t){return this.gl?(this.gl.shaderSource(e,t),this.gl.compileShader(e),this.gl.getShaderParameter(e,this.gl.COMPILE_STATUS)?!0:(He.logErr(`Shader program "${this.name}":${this.gl.getShaderInfoLog(e)}.`),!1)):!1}_createVertexShader(e){if(!this.gl)return;let t=this.gl.createShader(this.gl.VERTEX_SHADER);if(t&&this._getShaderCompileStatus(t,e))return t}_createFragmentShader(e){if(!this.gl)return;let t=this.gl.createShader(this.gl.FRAGMENT_SHADER);if(t&&this._getShaderCompileStatus(t,e))return t}disableAttribArrays(){let e=this.gl,t=this._attribArrays;for(let i=0,r=t.length;i<r;i++)e.disableVertexAttribArray(t[i]),this.vertexAttribDivisor(t[i],0)}enableAttribArrays(){let e=this.gl,t=this._attribArrays,i=this._attribDivisor;for(let r=0,s=t.length;r<s;r++)e.enableVertexAttribArray(t[r]),this.vertexAttribDivisor(t[r],i[r])}delete(){this.gl&&this.gl.deleteProgram(this._p)}createProgram(e){if(this.gl=e,this._p=this.gl.createProgram(),!this._p)return;let t=this._createFragmentShader(this.fragmentShader),i=this._createVertexShader(this.vertexShader);if(!(!t||!i)){if(e.attachShader(this._p,t),e.attachShader(this._p,i),e.linkProgram(this._p),!this.drawElementsInstanced)if(e.drawElementsInstanced)this.drawElementsInstanced=e.drawElementsInstanced.bind(e);else{let r=e.getExtension("ANGLE_instanced_arrays");r&&(this.drawElementsInstanced=r.drawElementsInstancedANGLE.bind(r))}if(!this.vertexAttribDivisor)if(e.vertexAttribDivisor)this.vertexAttribDivisor=e.vertexAttribDivisor.bind(e);else{let r=e.getExtension("ANGLE_instanced_arrays");r&&(this.vertexAttribDivisor=r.vertexAttribDivisorANGLE.bind(r))}if(!e.getProgramParameter(this._p,e.LINK_STATUS)){He.logErr(`Shader program "${this.name}": initialization failed. ${e.getProgramInfoLog(this._p)}.`),e.deleteProgram(this._p);return}this.use();for(let r in this._attributes){this._variables[r]=this._attributes[r],this._attributes[r].func=G.bindBuffer;let s=this._attributes[r].itemType,n=s?s.trim().toUpperCase():"FLOAT";if(Ua.indexOf(n)==-1?(He.logErr(`Shader program "${this.name}": attribute '${r}', item type '${this._attributes[r].itemType}' not exists.`),this._attributes[r].itemType=e.FLOAT):this._attributes[r].itemType=e[n],this._attributes[r].normalized=this._attributes[r].normalized||!1,this._attributes[r].divisor=this._attributes[r].divisor||0,this._p[r]=e.getAttribLocation(this._p,r),this._p[r]==null){He.logErr(`Shader program "${this.name}": attribute '${r}' not exists.`),e.deleteProgram(this._p);return}let a=this._attributes[r].type;typeof a=="string"&&(a=tr[a.trim().toLowerCase()]);let o=this._attributes[r].divisor;if(a===me.MAT4){let l=this._p[r];this._attribArrays.push(l,l+1,l+2,l+3),this._attribDivisor.push(o,o,o,o)}else this._attribArrays.push(this._p[r]),this._attribDivisor.push(o);e.enableVertexAttribArray(this._p[r]),this._attributes[r]._pName=this._p[r],this.attributes[r]=this._p[r]}for(let r in this._uniforms){if(typeof this._uniforms[r].type=="string"){let s=this._uniforms[r].type;this._uniforms[r].func=ye.u[tr[s.trim().toLowerCase()]]}else this._uniforms[r].func=ye.u[this._uniforms[r].type];if(this._variables[r]=this._uniforms[r],this._p[r]=e.getUniformLocation(this._p,r),this._p[r]==null){He.logErr(`Shader program "${this.name}": uniform '${r}' not exists.`),e.deleteProgram(this._p);return}this._uniforms[r]._pName=this._p[r],this.uniforms[r]=this._p[r]}e.detachShader(this._p,t),e.detachShader(this._p,i),e.deleteShader(t),e.deleteShader(i)}}}const rs=`vec2 project(vec4 p) {
|
|
206
|
+
}`;class Vt{constructor(e={}){this.__id=Vt.__counter__++,this._position=lt(e.position),this._positionHigh=new p,this._positionLow=new p,p.doubleToTwoFloats(this._position,this._positionHigh,this._positionLow),this._rotation=e.rotation||0,this._color=qe(e.color),this._alignedAxis=lt(e.alignedAxis),this._offset=lt(e.offset),this._visibility=e.visibility!=null?e.visibility:!0,this._entity=null,this._handler=null,this._handlerIndex=-1,this._isReady=!1,this._lockId=ae}setPosition(e,t,i){this._position.x=e,this._position.y=t,this._position.z=i,p.doubleToTwoFloats(this._position,this._positionHigh,this._positionLow),this._isReady&&this._handler?this._handler.setPositionArr(this._handlerIndex,this._positionHigh,this._positionLow):this._lockId!==ae&&(this._lockId=Ae)}setPosition3v(e){this._position.x=e.x,this._position.y=e.y,this._position.z=e.z,p.doubleToTwoFloats(e,this._positionHigh,this._positionLow),this._isReady&&this._handler?this._handler.setPositionArr(this._handlerIndex,this._positionHigh,this._positionLow):this._lockId!==ae&&(this._lockId=Ae)}getPosition(){return this._position}setOffset(e,t,i){this._offset.x=e,this._offset.y=t,i!=null&&(this._offset.z=i),this._isReady&&this._handler?this._handler.setOffsetArr(this._handlerIndex,this._offset):this._lockId!==ae&&(this._lockId=Ae)}setOffset3v(e){this.setOffset(e.x,e.y,e.z)}getOffset(){return this._offset}setRotation(e){e!==this._rotation&&(this._rotation=e,this._isReady&&this._handler?this._handler.setRotationArr(this._handlerIndex,e):this._lockId!==ae&&(this._lockId=Ae))}getRotation(){return this._rotation}setOpacity(e){e!==this._color.w&&(e!=null&&(this._color.w=e),this._isReady&&this._handler?this._handler.setRgbaArr(this._handlerIndex,this._color):this._lockId!==ae&&(this._lockId=Ae))}setColor(e,t,i,r){(r!==this._color.w||e!==this._color.x||t!==this._color.y||this._color.z!==i)&&(this._color.x=e,this._color.y=t,this._color.z=i,r!=null&&(this._color.w=r),this._isReady&&this._handler?this._handler.setRgbaArr(this._handlerIndex,this._color):this._lockId!==ae&&(this._lockId=Ae))}setColor4v(e){this.setColor(e.x,e.y,e.z,e.w)}setColorHTML(e){this.setColor4v(ot(e))}getColor(){return this._color}setVisibility(e){e!==this._visibility&&(this._visibility=e,this._isReady&&this._handler?this._handler.setVisibility(this._handlerIndex,e):this._lockId!==ae&&(this._lockId=Ae))}getVisibility(){return this._visibility}setAlignedAxis(e,t,i){this._alignedAxis.x=e,this._alignedAxis.y=t,this._alignedAxis.z=i,this._isReady&&this._handler?this._handler.setAlignedAxisArr(this._handlerIndex,this._alignedAxis):this._lockId!==ae&&(this._lockId=Ae)}setAlignedAxis3v(e){this.setAlignedAxis(e.x,e.y,e.z)}getAlignedAxis(){return this._alignedAxis}remove(){this._entity=null,this._handler&&this._handler.remove(this)}setPickingColor3v(e){this._isReady&&this._handler?this._handler.setPickingColorArr(this._handlerIndex,e):this._lockId!==ae&&(this._lockId=Ae)}serializeWorkerData(e){return this._handler?new Float32Array([]):null}}Vt.__counter__=0;class Sa extends Vt{constructor(e={}){super(e),this._handler=null,this._src=e.src||null,this._image=e.image||null,this._scale=1,this._width=e.width||(e.size?e.size[0]:30),this._height=e.height||(e.size?e.size[1]:30)}setSrc(e){this._src=e;let t=this._handler;if(t&&e&&e.length){let i=t._entityCollection.renderNode;if(i&&i.renderer){let r=i.renderer.billboardsTextureAtlas,s=this;r.loadImage(e,function(n){n.__nodeIndex!=null&&r.get(n.__nodeIndex)?(s._image=n,t.setTexCoordArr(s._handlerIndex,r.get(s._image.__nodeIndex).texCoords)):(r.addImage(n),r.createTexture(),s._image=n,i.updateBillboardsTexCoords())})}}}getSrc(){return this._src}setImage(e){this.setSrc(e.src)}getImage(){return this._image}setSize(e,t){this._width=e,this._height=t,this._handler&&this._handler.setSizeArr(this._handlerIndex,e*this._scale,t*this._scale)}getSize(){return{width:this._width,height:this._height}}setWidth(e){this.setSize(e,this._height)}getWidth(){return this._width}setHeight(e){this.setSize(this._width,e)}getHeight(){return this._height}}const Ne={POINT:1,LINESTRING:2,POLYGON:3,MULTIPOLYGON:4,MULTILINESTRING:5};class Xe{constructor(e={}){this.__id=Xe.__counter__++,this._entity=null,this._handler=null,this._handlerIndex=-1,this._polyVerticesHighMerc=[],this._polyVerticesLowMerc=[],this._polyVerticesLength=-1,this._polyIndexesLength=-1,this._polyVerticesHandlerIndex=-1,this._polyIndexesHandlerIndex=-1,this._lineVerticesHighMerc=[],this._lineVerticesLowMerc=[],this._lineVerticesLength=-1,this._lineOrdersLength=-1,this._lineIndexesLength=-1,this._lineColorsLength=-1,this._lineThicknessLength=-1,this._lineVerticesHandlerIndex=-1,this._lineOrdersHandlerIndex=-1,this._lineIndexesHandlerIndex=-1,this._lineThicknessHandlerIndex=-1,this._lineColorsHandlerIndex=-1,this._type=e.type&&Xe.getType(e.type)||Ne.POINT,this._coordinates=[],this._extent=Xe.getExtent({type:e.type||"Point",coordinates:e.coordinates||[]},this._coordinates),e.style=e.style||{},this._style={fillColor:qe(e.style.fillColor,new J(.19,.62,.85,.4)),lineColor:qe(e.style.lineColor,new J(.19,.62,.85,1)),strokeColor:qe(e.style.strokeColor,new J(1,1,1,.95)),lineWidth:e.style.lineWidth||3,strokeWidth:e.style.strokeWidth||0},this._visibility=e.visibility||!0,this._pickingReady=!1}get id(){return this.__id}get type(){return this._type}static getType(e){return Ne[e.toUpperCase()]}static getExtent(e,t){let i=new U(new B(180,90),new B(-180,-90)),r=Xe.getType(e.type);if(r===Ne.POINT){let s=e.coordinates[0],n=e.coordinates[1];i.southWest.lon=s,i.southWest.lat=n,i.northEast.lon=s,i.northEast.lat=n,t&&(t[0]=s)&&(t[1]=n)}else if(r===Ne.LINESTRING){let s=e.coordinates;for(let n=0;n<s.length;n++){let a=s[n][0],o=s[n][1];a<i.southWest.lon&&(i.southWest.lon=a),o<i.southWest.lat&&(i.southWest.lat=o),a>i.northEast.lon&&(i.northEast.lon=a),o>i.northEast.lat&&(i.northEast.lat=o),t&&(t[n]=[a,o])}}else if(r===Ne.POLYGON){let s=e.coordinates;for(let n=0;n<s.length;n++){let a=s[n];t&&(t[n]=[]);for(let o=0;o<a.length;o++){let l=a[o],h=l[0],d=l[1];h<i.southWest.lon&&(i.southWest.lon=h),d<i.southWest.lat&&(i.southWest.lat=d),h>i.northEast.lon&&(i.northEast.lon=h),d>i.northEast.lat&&(i.northEast.lat=d),t&&(t[n][o]=[h,d])}}}else if(r===Ne.MULTIPOLYGON){let s=e.coordinates;for(let n=0;n<s.length;n++){let a=s[n];t&&(t[n]=[]);for(let o=0;o<a.length;o++){let l=a[o];t&&(t[n][o]=[]);for(let h=0;h<l.length;h++){let d=l[h],f=d[0],u=d[1];f<i.southWest.lon&&(i.southWest.lon=f),u<i.southWest.lat&&(i.southWest.lat=u),f>i.northEast.lon&&(i.northEast.lon=f),u>i.northEast.lat&&(i.northEast.lat=u),t&&(t[n][o][h]=[f,u])}}}}else if(r===Ne.MULTILINESTRING){let s=e.coordinates;for(let n=0;n<s.length;n++){let a=s[n];t&&(t[n]=[]);for(let o=0;o<a.length;o++){let l=a[o],h=l[0],d=l[1];h<i.southWest.lon&&(i.southWest.lon=h),d<i.southWest.lat&&(i.southWest.lat=d),h>i.northEast.lon&&(i.northEast.lon=h),d>i.northEast.lat&&(i.northEast.lat=d),t&&(t[n][o]=[h,d])}}}else i.southWest.lon=i.southWest.lat=i.northEast.lon=i.northEast.lat=0,t&&(t[0]=0)&&(t[1]=0);return i}setGeometry(e){let t=this._handler;return t&&(this.remove(),this._type=Xe.getType(e.type||"Point"),this._extent=Xe.getExtent(e,this._coordinates),t.add(this)),this}setFillColor(e,t,i,r=1){let s=this._style.fillColor;return(s.w===0&&r!==0||s.w!==0&&r===0)&&(this._pickingReady=!1),s.x=e,s.y=t,s.z=i,s.w=r,this._handler&&this._handler.setPolyColorArr(this,s),this}overlaps(e){return this._extent.overlaps(e)}setFillColor4v(e){return this.setFillColor(e.x,e.y,e.z,e.w)}setStrokeColor(e,t,i,r=1){let s=this._style.strokeColor;return(s.w===0&&r!==0||s.w!==0&&r===0)&&(this._pickingReady=!1),s.x=e,s.y=t,s.z=i,s.w=r,this._handler&&this._handler.setLineStrokeColorArr(this,s),this}setLineColor(e,t,i,r=1){let s=this._style.lineColor;return(s.w===0&&r!==0||s.w!==0&&r===0)&&(this._pickingReady=!1),s.x=e,s.y=t,s.z=i,s.w=r,this._handler&&this._handler.setLineColorArr(this,s),this}setStrokeColor4v(e){return this.setStrokeColor(e.x,e.y,e.z,e.w)}setLineColor4v(e){return this.setLineColor(e.x,e.y,e.z,e.w)}setStrokeOpacity(e){let t=this._style.strokeColor;return t.w=e,this.setStrokeColor(t.x,t.y,t.z,e)}setLineOpacity(e){let t=this._style.lineColor;return t.w=e,this.setLineColor(t.x,t.y,t.z,e)}setStrokeWidth(e){return this._style.strokeWidth=e,this._pickingReady=!1,this._handler&&this._handler.setLineStrokeArr(this,e),this}bringToFront(){return this._handler&&this._handler.bringToFront(this),this}setLineWidth(e){return this._style.lineWidth=e,this._pickingReady=!1,this._handler&&this._handler.setLineThicknessArr(this,e),this}setFillOpacity(e){let t=this._style.fillColor;return(t.w===0&&e!==0||t.w!==0&&e===0)&&(this._pickingReady=!1),t.w=e,this._handler&&this._handler.setPolyColorArr(this,t),this}setVisibility(e){return this._visibility=e,this._handler&&this._handler.setGeometryVisibility(this),this}getVisibility(){return this._visibility}remove(){this._handler&&this._handler.remove(this)}getExtent(){return this._extent.clone()}getType(){return this._type}}Xe.__counter__=0;class Ve{constructor(e,t){this.p0=e||new p,this.p1=t||new p}getMagnitude(){return this.p0.distance(this.p1)}getSphereIntersection(e){let t=this.p0,i=this.p1,r=e.center.x,s=e.center.y,n=e.center.z,a=t.x,o=t.y,l=t.z,h=i.x-a,d=i.y-o,f=i.z-l,u=h*h+d*d+f*f,g=2*(a*h+o*d+l*f-h*r-d*s-f*n),_=a*a-2*a*r+r*r+o*o-2*o*s+s*s+l*l-2*l*n+n*n-e.radius*e.radius,m=g*g-4*u*_;if(m<0)return[];let v=(-g-Math.sqrt(m))/(2*u),b=new p(t.x*(1-v)+v*i.x,t.y*(1-v)+v*i.y,t.z*(1-v)+v*i.z);if(m==0)return[b];let y=(-g+Math.sqrt(m))/(2*u),w=new p(t.x*(1-y)+y*i.x,t.y*(1-y)+y*i.y,t.z*(1-y)+y*i.z);return Math.abs(v-.5)<Math.abs(y-.5)?[b,w]:[w,b]}intersects(e,t,i){let r=this.p0.sub(e.p0),s=e.p1.sub(e.p0);if(Math.abs(s.x)<Ye&&Math.abs(s.y)<Ye&&Math.abs(s.z)<Ye)return!1;let n=this.p1.sub(this.p0);if(Math.abs(n.x)<Ye&&Math.abs(n.y)<Ye&&Math.abs(n.z)<Ye)return!1;let a=r.x*s.x+r.y*s.y+r.z*s.z,o=s.x*n.x+s.y*n.y+s.z*n.z,l=r.x*n.x+r.y*n.y+r.z*n.z,h=s.x*s.x+s.y*s.y+s.z*s.z,f=(n.x*n.x+n.y*n.y+n.z*n.z)*h-o*o;if(Math.abs(f)<Ye)return!1;let g=(a*o-l*h)/f;if(t.x=this.p0.x+g*n.x,t.y=this.p0.y+g*n.y,t.z=this.p0.z+g*n.z,i){let _=(a+o*g)/h;i.x=e.p0.x+_*s.x,i.y=e.p0.y+_*s.y,i.z=e.p0.z+_*s.z}return!0}getNearestDistancePoint(e,t){let i=this.p0,r=this.p1,s=this.getMagnitude(),n=((e.x-i.x)*(r.x-i.x)+(e.y-i.y)*(r.y-i.y)+(e.z-i.z)*(r.z-i.z))/(s*s);return t.x=i.x+n*(r.x-i.x),t.y=i.y+n*(r.y-i.y),t.z=i.z+n*(r.z-i.z),!(n<0||n>1)}}let se=class Ge{constructor(e=p.ZERO,t=p.ZERO){this.origin=e,this.direction=t}static get OUTSIDE(){return 0}static get INSIDE(){return 1}static get INPLANE(){return 2}static get AWAY(){return 3}set(e,t){return this.origin=e,this.direction=t,this}getPoint(e){return p.add(this.origin,this.direction.scaleTo(e))}hitTriangle(e,t,i,r){let s=t.sub(e),n=i.sub(e),a=s.cross(n),o=this.origin.sub(e),l=-a.dot(o),h=a.dot(this.direction);if(Math.abs(h)<Ye)return l===0?(r.copy(this.origin),Ge.INPLANE):Ge.OUTSIDE;let d=l/h;if(r.copy(this.origin.add(this.direction.scaleTo(d))),d<0)return Ge.AWAY;let f=s.dot(s),u=s.dot(n),g=n.dot(n),_=r.sub(e),m=_.dot(s),v=_.dot(n),b=u*u-f*g,y=(u*v-g*m)/b;if(y<0||y>1)return Ge.OUTSIDE;let w=(u*m-f*v)/b;return w<0||y+w>1?Ge.OUTSIDE:Ge.INSIDE}hitPlane(e,t,i,r){let s=p.sub(t,e),n=p.sub(i,e),a=s.cross(n),o=p.sub(this.origin,e),l=-a.dot(o),h=a.dot(this.direction);if(Math.abs(h)<Ye&&l===0)return Ge.OUTSIDE;let d=l/h;if(d<0)return Ge.OUTSIDE;let f=this.direction.scaleTo(d);return r.x=this.origin.x+f.x,r.y=this.origin.y+f.y,r.z=this.origin.z+f.z,Ge.INSIDE}hitSphere(e){let t=e.radius,i=e.center,r=this.origin,s=this.direction,n=p.sub(i,r);if(n.dot(s)<0){var a=n.length();if(a>t)return null;if(a===t)return r.clone();let h=i.projToRay(r,n);var o=p.sub(h,i).length();let f=Math.sqrt(t*t-o*o)-p.sub(h,r).length();return p.add(r,s.scaleTo(f))}else{let h=i.projToRay(r,s);var l=p.sub(i,h).length();if(l>e.radius)return null;{let d=Math.sqrt(t*t-l*l),f;return h.subA(r),n.length()>t?f=h.length()-d:f=h.length()+d,p.add(r,s.scaleTo(f))}}}hitBox(e){}};class Ia{constructor(e){this._handlerIndex=-1,this._tag=e.tag||"none",this.instanced=!0,this._entity=null,this._position=lt(e.position),this._positionHigh=new p,this._positionLow=new p,p.doubleToTwoFloats(this._position,this._positionHigh,this._positionLow),this._pitch=e.pitch||0,this._yaw=e.yaw||0,this._roll=e.roll||0,this._scale=e.scale||1,this._color=qe(e.color),this._direction=new p(0,1,0),this._handler=null,this._handlerIndex=-1,this._tagData=null,this._tagDataIndex=-1,this._object3d=e.object3d,this._visibility=!0,this._qNorthFrame=new D}get tag(){return this._tag}getPosition(){return this._position}getPitch(){return this._pitch}getYaw(){return this._yaw}getRoll(){return this._roll}getDirection(){return this._direction}get object3d(){return this._object3d}get vertices(){return this._object3d.vertices}get normals(){return this._object3d.normals}get texCoords(){return this._object3d.texCoords}get indices(){return this._object3d.indices}setOpacity(e){this._color.w=e,this.setColor(this._color.x,this._color.y,this._color.z,e)}setColor(e,t,i,r){this._color.x=e,this._color.y=t,this._color.z=i,r!=null&&(this._color.w=r),this._handler&&this._handler.setRgbaArr(this._tagData,this._tagDataIndex,this._color)}setColor4v(e){this._color.x=e.x,this._color.y=e.y,this._color.z=e.z,e.w!=null&&(this._color.w=e.w),this._handler&&this._handler.setRgbaArr(this._tagData,this._tagDataIndex,this._color)}setVisibility(e){this._visibility=e,this._handler&&this._handler.setVisibility(this._tagData,this._tagDataIndex,e)}getVisibility(){return this._visibility}setPosition(e,t,i){this._position.x=e,this._position.y=t,this._position.z=i,p.doubleToTwoFloats(this._position,this._positionHigh,this._positionLow),this._handler&&this._handler.setPositionArr(this._tagData,this._tagDataIndex,this._positionHigh,this._positionLow),this.updateDirection()}setPosition3v(e){this._position.x=e.x,this._position.y=e.y,this._position.z=e.z,p.doubleToTwoFloats(e,this._positionHigh,this._positionLow),this._handler&&this._handler.setPositionArr(this._tagData,this._tagDataIndex,this._positionHigh,this._positionLow),this.updateDirection()}setYaw(e){this._yaw=e,this.updateDirection()}setPitch(e){this._pitch=e,this._handler&&this._handler.setPitchRollArr(this._tagData,this._tagDataIndex,e,this._roll)}setRoll(e){this._roll=e,this._handler&&this._handler.setPitchRollArr(this._tagData,this._tagDataIndex,this._pitch,e)}setScale(e){this._scale=e,this._handler&&this._handler.setScaleArr(this._tagData,this._tagDataIndex,e)}getScale(){return this._scale}remove(){this._entity=null,this._handler&&this._handler.remove(this)}setPickingColor3v(e){this._handler&&this._handler.setPickingColorArr(this._tagData,this._tagDataIndex,e)}updateDirection(){if(this._handler&&this._handler._planet){this._qNorthFrame=this._handler._planet.getNorthFrameRotation(this._position);let e=D.yRotation(this._yaw).mul(this._qNorthFrame).conjugate();this._direction=e.mulVec3(new p(0,0,-1)).normalize(),this._handler.setDirectionArr(this._tagData,this._tagDataIndex,this._direction)}}}const Ct={RIGHT:0,LEFT:1,CENTER:2},is={left:Ct.LEFT,right:Ct.RIGHT,center:Ct.CENTER};class za extends Vt{constructor(e={}){super(e),this._handler=null,this._text=e.text||"",this._face=Jn(e.face,"arial"),this._size=e.size||24,this._outline=e.outline!=null?e.outline:0,this._outlineColor=qe(e.outlineColor,new J(0,0,0,1)),this._align=e.align&&is[e.align.trim().toLowerCase()]||Ct.RIGHT,this._fontIndex=0,this._fontAtlas=null,this._isRTL=e.isRTL||!1}setText(e){this._text=e.toString(),this._isReady&&this._handler&&this._handler.setText(this._handlerIndex,e,this._fontIndex,this._align,this._isRTL)}getText(){return this._text}setAlign(e){this._align=is[e.trim().toLowerCase()],this._isReady&&this._handler?this._handler.setText(this._handlerIndex,this._text,this._fontIndex,this._align,this._isRTL):this._lockId!==ae&&(this._lockId=Ae)}getAlign(){return this._align}setFace(e){this._face=e.trim(),this.update()}getFace(){return this._face}setSize(e){e!==this._size&&(this._size=e,this._isReady&&this._handler?this._handler.setSizeArr(this._handlerIndex,e):this._lockId!==ae&&(this._lockId=Ae))}getSize(){return this._size}setOutline(e){this._outline=e,this._isReady&&this._handler?this._handler.setOutlineArr(this._handlerIndex,e):this._lockId!==ae&&(this._lockId=Ae)}getOutline(){return this._outline}setOpacity(e){super.setOpacity(e),this.setOutlineOpacity(e)}setOutlineColor(e,t,i,r){(r!==this._outlineColor.w||e!==this._outlineColor.x||t!==this._outlineColor.y||i!==this._outlineColor.z)&&(this._outlineColor.x=e,this._outlineColor.y=t,this._outlineColor.z=i,this._outlineColor.w=r,this._isReady&&this._handler?this._handler.setOutlineColorArr(this._handlerIndex,this._outlineColor):this._lockId!==ae&&(this._lockId=Ae))}setOutlineColor4v(e){this.setOutlineColor(e.x,e.y,e.z,e.w)}setOutlineColorHTML(e){this.setOutlineColor4v(ot(e))}getOutlineColor(){return this._outlineColor}setOutlineOpacity(e){e!==this._outlineColor.w&&(this._outlineColor.w=e,this._isReady&&this._handler?this._handler.setOutlineColorArr(this._handlerIndex,this._outlineColor):this._lockId!==ae&&(this._lockId=Ae))}getOutlineOpacity(){return this._outlineColor.w}async update(){if(this._fontAtlas){const e=await this._fontAtlas.getFontIndex(this._face);this._applyFontIndex(e)}}_applyFontIndex(e){this._fontIndex=e,this._isReady&&this._handler?(this._handler.setFontIndexArr(this._handlerIndex,this._fontIndex),this._handler.setText(this._handlerIndex,this._text,this._fontIndex,this._align,this._isRTL)):this._lockId!==ae&&(this._lockId=Ae)}assignFontAtlas(e){this._fontAtlas||(this._fontAtlas=e),this.update()}serializeWorkerData(e){return this._handler?new Float32Array([e,this._handler._maxLetters,this.getVisibility()?1:0,this._positionHigh.x,this._positionHigh.y,this._positionHigh.z,this._positionLow.x,this._positionLow.y,this._positionLow.z,this._size,this._offset.x,this._offset.y,this._offset.z,this._color.x,this._color.y,this._color.z,this._color.w,this._rotation,this._alignedAxis.x,this._alignedAxis.y,this._alignedAxis.z,this._fontIndex,this._outline,this._outlineColor.x,this._outlineColor.y,this._outlineColor.z,this._outlineColor.w,this._entity._pickingColor.x,this._entity._pickingColor.y,this._entity._pickingColor.z]):null}}const ht=0,ct=1,dt=2;class mi{constructor(e={}){this.__id=mi.__counter__++,this.visibility=e.visibility!=null?e.visibility:!0,this.pointSize=e.pointSize||3,this.pickingScale=e.pickingScale||0,this._renderNode=null,this._entity=null,this._points=[],this._coordinatesData=[],this._colorData=[],this._pickingColorData=[],this._coordinatesBuffer=null,this._colorBuffer=null,this._pickingColorBuffer=null,this._handler=null,this._handlerIndex=-1,this._buffersUpdateCallbacks=[],this._buffersUpdateCallbacks[ht]=this._createCoordinatesBuffer,this._buffersUpdateCallbacks[ct]=this._createColorBuffer,this._buffersUpdateCallbacks[dt]=this._createPickingColorBuffer,this._changedBuffers=new Array(this._buffersUpdateCallbacks.length),e.points&&this.setPoints(e.points)}clear(){this._points.length=0,this._points=[],this._coordinatesData.length=0,this._coordinatesData=[],this._colorData.length=0,this._colorData=[],this._pickingColorData.length=0,this._pickingColorData=[],this._deleteBuffers()}setVisibility(e){this.visibility=e}getVisibility(){return this.visibility}setRenderNode(e){this._renderNode=e,this._setPickingColors()}remove(){this._entity=null,this._handler&&this._handler.remove(this)}setPoints(e){this.clear();for(let t=0;t<e.length;t++){let i=e[t],r=new p(i[0],i[1],i[2]),s=new J(i[3],i[4],i[5],i[6]==null?255:i[6]);this._coordinatesData.push(r.x,r.y,r.z),this._colorData.push(s.x/255,s.y/255,s.z/255,s.w/255);let n={_entity:this._entity,_pickingColor:new p,_entityCollection:this._entity?this._entity._entityCollection:null,index:t,position:r,color:s,pointCloud:this,properties:i[7]||{}};this._points.push(n),this._renderNode&&this._renderNode.renderer&&(this._renderNode.renderer.assignPickingColor(n),this._pickingColorData.push(n._pickingColor.x/255,n._pickingColor.y/255,n._pickingColor.z/255,1))}this._changedBuffers[ht]=!0,this._changedBuffers[ct]=!0,this._changedBuffers[dt]=!0}setPointPosition(e,t,i,r){this._changedBuffers[ht]=!0}setPointColor(e,t,i,r,s){this._changedBuffers[ct]=!0}addPoints(e){this._changedBuffers[ht]=!0,this._changedBuffers[ct]=!0,this._changedBuffers[dt]=!0}addPoint(e,t){this._changedBuffers[ht]=!0,this._changedBuffers[ct]=!0,this._changedBuffers[dt]=!0}getPoint(e){return this._points[e]}removePoint(e){this._changedBuffers[ht]=!0,this._changedBuffers[ct]=!0,this._changedBuffers[dt]=!0}insertPoint(e,t){this._changedBuffers[ht]=!0,this._changedBuffers[ct]=!0,this._changedBuffers[dt]=!0}draw(){if(this.visibility&&this._coordinatesData.length){this._update();let t=this._renderNode.renderer,i=t.handler.programs.pointCloud,r=i._program,s=t.handler.gl,n=r.attributes,a=r.uniforms;i.activate(),s.uniformMatrix4fv(a.projectionViewMatrix,!1,t.activeCamera.getProjectionViewMatrix()),s.uniform1f(a.opacity,this._handler._entityCollection._fadingOpacity),s.uniform1f(a.pointSize,this.pointSize),s.bindBuffer(s.ARRAY_BUFFER,this._coordinatesBuffer),s.vertexAttribPointer(n.coordinates,this._coordinatesBuffer.itemSize,s.FLOAT,!1,0,0),s.bindBuffer(s.ARRAY_BUFFER,this._colorBuffer),s.vertexAttribPointer(n.colors,this._colorBuffer.itemSize,s.FLOAT,!1,0,0),s.drawArrays(s.POINTS,0,this._coordinatesBuffer.numItems)}}drawPicking(){if(this.visibility&&this._coordinatesData.length){let t=this._renderNode.renderer,i=t.handler.programs.pointCloud,r=i._program,s=t.handler.gl,n=r.attributes,a=r.uniforms;i.activate(),s.uniformMatrix4fv(a.projectionViewMatrix,!1,t.activeCamera.getProjectionViewMatrix()),s.uniform1f(a.opacity,this._handler._entityCollection._fadingOpacity),s.uniform1f(a.pointSize,this.pointSize+this.pickingScale),s.bindBuffer(s.ARRAY_BUFFER,this._coordinatesBuffer),s.vertexAttribPointer(n.coordinates,this._coordinatesBuffer.itemSize,s.FLOAT,!1,0,0),s.bindBuffer(s.ARRAY_BUFFER,this._pickingColorBuffer),s.vertexAttribPointer(n.colors,this._pickingColorBuffer.itemSize,s.FLOAT,!1,0,0),s.drawArrays(s.POINTS,0,this._coordinatesBuffer.numItems)}}_update(){if(this._renderNode){let e=this._changedBuffers.length;for(;e--;)this._changedBuffers[e]&&(this._buffersUpdateCallbacks[e].call(this),this._changedBuffers[e]=!1)}}_deleteBuffers(){if(this._renderNode){let e=this._renderNode.renderer,t=e.handler.gl;t.deleteBuffer(this._coordinatesBuffer),t.deleteBuffer(this._colorBuffer),t.deleteBuffer(this._pickingColorBuffer)}this._coordinatesBuffer=null,this._colorBuffer=null,this._pickingColorBuffer=null}_createCoordinatesBuffer(){let e=this._renderNode.renderer.handler;e.gl.deleteBuffer(this._coordinatesBuffer),this._coordinatesBuffer=e.createArrayBuffer(new Float32Array(this._coordinatesData),3,this._coordinatesData.length/3)}_createColorBuffer(){let e=this._renderNode.renderer.handler;e.gl.deleteBuffer(this._colorBuffer),this._colorBuffer=e.createArrayBuffer(new Float32Array(this._colorData),4,this._colorData.length/4)}_createPickingColorBuffer(){let e=this._renderNode.renderer.handler;e.gl.deleteBuffer(this._pickingColorBuffer),this._pickingColorBuffer=e.createArrayBuffer(new Float32Array(this._pickingColorData),4,this._pickingColorData.length/4)}_setPickingColors(){if(this._renderNode&&this._renderNode.renderer){for(let e=0;e<this._points.length;e++){let t=this._points[e];t._entity=this._entity,t._entityCollection=this._entity._entityCollection,this._renderNode.renderer.assignPickingColor(t),this._pickingColorData.push(t._pickingColor.x/255,t._pickingColor.y/255,t._pickingColor.z/255,1)}this._changedBuffers[dt]=!0}}}mi.__counter__=0;const ft=0,pi=1,Ke=2,Fa="#0000FF",ze=0,Fe=1,ke=2,de=3;class ut{constructor(e={}){this.__id=ut.__counter__++,this.altitude=e.altitude||0,this.thickness=e.thickness||1.5,this._opacity=e.opacity!=null?e.opacity:1,this._defaultColor=qi(e.color||Fa,e.opacity),this.visibility=e.visibility!=null?e.visibility:!0,this._closedLine=e.isClosed||!1,this._path3v=[],this._pathLengths=[],this._pathLonLat=[],this._pathLonLatMerc=[],this._pathColors=e.pathColors?Xr(e.pathColors):[],this._extent=new U,this._verticesHigh=[],this._verticesLow=[],this._orders=[],this._indexes=[],this._colors=[],this._verticesHighBuffer=null,this._verticesLowBuffer=null,this._ordersBuffer=null,this._indexesBuffer=null,this._colorsBuffer=null,this._pickingColor=[0,0,0],this._renderNode=null,this._entity=null,this._handler=null,this._handlerIndex=-1,this._buffersUpdateCallbacks=[],this._buffersUpdateCallbacks[ft]=this._createVerticesBuffer,this._buffersUpdateCallbacks[pi]=this._createIndexBuffer,this._buffersUpdateCallbacks[Ke]=this._createColorsBuffer,this._changedBuffers=new Array(this._buffersUpdateCallbacks.length),e.pathLonLat?this.setPathLonLat(e.pathLonLat):e.path3v&&this.setPath3v(e.path3v),this._refresh()}static appendLineData3v(e,t,i,r,s,n,a,o,l,h,d,f,u,g){var _=0,m=new p,v=new p;u&&(u.southWest.set(180,90),u.northEast.set(-180,-90)),o.length>0?(_=o[o.length-5]+9,o.push(_,_)):o.push(0,0);for(let I=0,k=e.length;I<k;I++){var b=e[I],y=t[I];if(h[I]=[],f[I]=[],d[I]=[],b.length===0)continue;var w=_,x;if(r)x=b[b.length-1],x instanceof Array&&(x=new p(x[0],x[1],x[2]));else{var T=b[0],A=b[1]||T;T instanceof Array&&(T=new p(T[0],T[1],T[2])),A instanceof Array&&(A=new p(A[0],A[1],A[2])),T=T,A=A,x=new p(T.x+T.x-A.x,T.y+T.y-A.y,T.z+T.z-A.z)}let z=i;y&&y[0]&&(z=y[0]),p.doubleToTwoFloats(x,m,v),s.push(m.x,m.y,m.z,m.x,m.y,m.z,m.x,m.y,m.z,m.x,m.y,m.z),n.push(v.x,v.y,v.z,v.x,v.y,v.z,v.x,v.y,v.z,v.x,v.y,v.z);let L=z[ze],S=z[Fe],F=z[ke],R=z[de]!=null?z[de]:1;I>0&&g.push(L,S,F,R,L,S,F,R,L,S,F,R,L,S,F,R),a.push(1,-1,2,-2);for(let M=0,j=b.length;M<j;M++){var E=b[M];if(E instanceof Array&&(E=new p(E[0],E[1],E[2])),d[I].push(E),l){var C=l.cartesianToLonLat(E);h[I].push(C),f[I].push(C.forwardMercator()),C.lon<u.southWest.lon&&(u.southWest.lon=C.lon),C.lat<u.southWest.lat&&(u.southWest.lat=C.lat),C.lon>u.northEast.lon&&(u.northEast.lon=C.lon),C.lat>u.northEast.lat&&(u.northEast.lat=C.lat)}y&&y[M]&&(z=y[M]),L=z[ze],S=z[Fe],F=z[ke],R=z[de]!=null?z[de]:1,p.doubleToTwoFloats(E,m,v),s.push(m.x,m.y,m.z,m.x,m.y,m.z,m.x,m.y,m.z,m.x,m.y,m.z),n.push(v.x,v.y,v.z,v.x,v.y,v.z,v.x,v.y,v.z,v.x,v.y,v.z),g.push(L,S,F,R,L,S,F,R,L,S,F,R,L,S,F,R),a.push(1,-1,2,-2),o.push(_++,_++,_++,_++)}var P;if(r)P=b[0],P instanceof Array&&(P=new p(P[0],P[1],P[2])),o.push(w,w+1,w+1,w+1);else{let M=b[b.length-1],j=b[b.length-2]||M;M instanceof Array?M=new p(M[0],M[1],M[2]):M=M,j instanceof Array?j=new p(j[0],j[1],j[2]):j=j,P=new p(M.x+M.x-j.x,M.y+M.y-j.y,M.z+M.z-j.z),o.push(_-1,_-1,_-1,_-1)}y&&y[b.length-1]&&(z=y[b.length-1]),L=z[ze],S=z[Fe],F=z[ke],R=z[de]!=null?z[de]:1,p.doubleToTwoFloats(P,m,v),s.push(m.x,m.y,m.z,m.x,m.y,m.z,m.x,m.y,m.z,m.x,m.y,m.z),n.push(v.x,v.y,v.z,v.x,v.y,v.z,v.x,v.y,v.z,v.x,v.y,v.z),g.push(L,S,F,R,L,S,F,R,L,S,F,R,L,S,F,R),a.push(1,-1,2,-2),I<e.length-1&&e[I+1].length!==0&&(_+=8,o.push(_,_))}}static appendPoint3v(e,t,i,r,s,n,a,o,l,h,d,f,u,g){var _=new p,m=new p,v=h.length-4,b=h[v-1]+1;e.length===0?(e.push([]),i[0]||(i[0]=[])):i[e.length-1]||(i[e.length-1]=[]);var y=e[e.length-1],w=y.length;y.push(t);let x=r[ze],T=r[Fe],A=r[ke],E=r[de]!=null?r[de]:1,C=i[e.length-1];if(C[w]?(C[w][ze]=x,C[w][Fe]=T,C[w][ke]=A,C[w][de]=E):C.push(r),w===1){var P;if(s)P=y[w-1],P instanceof Array&&(P=new p(P[0],P[1],P[2]));else{let M=y[0],j=y[1]||M;M instanceof Array?M=new p(M[0],M[1],M[2]):M=M,j instanceof Array?j=new p(j[0],j[1],j[2]):j=j,P=new p(M.x+M.x-j.x,M.y+M.y-j.y,M.z+M.z-j.z)}p.doubleToTwoFloats(P,_,m);let R=n.length-3*12;n[R]=_.x,n[R+1]=_.y,n[R+2]=_.z,n[R+3]=_.x,n[R+4]=_.y,n[R+5]=_.z,n[R+6]=_.x,n[R+7]=_.y,n[R+8]=_.z,n[R+9]=_.x,n[R+10]=_.y,n[R+11]=_.z,a[R]=m.x,a[R+1]=m.y,a[R+2]=m.z,a[R+3]=m.x,a[R+4]=m.y,a[R+5]=m.z,a[R+6]=m.x,a[R+7]=m.y,a[R+8]=m.z,a[R+9]=m.x,a[R+10]=m.y,a[R+11]=m.z}var I=b;if(d){f.length===0&&f.push([]),u.length===0&&u.push([]);var k=f[f.length-1],z=u[u.length-1];let R=d.cartesianToLonLat(t);k.push(R),z.push(R.forwardMercator()),R.lon<g.southWest.lon&&(g.southWest.lon=R.lon),R.lat<g.southWest.lat&&(g.southWest.lat=R.lat),R.lon>g.northEast.lon&&(g.northEast.lon=R.lon),R.lat>g.northEast.lat&&(g.northEast.lat=R.lat)}p.doubleToTwoFloats(t,_,m);let L=n.length-12;n[L]=_.x,n[L+1]=_.y,n[L+2]=_.z,n[L+3]=_.x,n[L+4]=_.y,n[L+5]=_.z,n[L+6]=_.x,n[L+7]=_.y,n[L+8]=_.z,n[L+9]=_.x,n[L+10]=_.y,n[L+11]=_.z,a[L]=m.x,a[L+1]=m.y,a[L+2]=m.z,a[L+3]=m.x,a[L+4]=m.y,a[L+5]=m.z,a[L+6]=m.x,a[L+7]=m.y,a[L+8]=m.z,a[L+9]=m.x,a[L+10]=m.y,a[L+11]=m.z;let S=o.length-16;o[S]=x,o[S+1]=T,o[S+2]=A,o[S+3]=E,o[S+4]=x,o[S+5]=T,o[S+6]=A,o[S+7]=E,o[S+8]=x,o[S+9]=T,o[S+10]=A,o[S+11]=E,o[S+12]=x,o[S+13]=T,o[S+14]=A,o[S+15]=E,h[v]=b++,h[v+1]=b++,h[v+2]=b++,h[v+3]=b++;var F;if(s)F=y[0],h.push(I,I+1,I+1,I+1);else{let R=y[y.length-1],M=y[y.length-2]||R;F=new p(R.x+R.x-M.x,R.y+R.y-M.y,R.z+R.z-M.z),h.push(b-1,b-1,b-1,b-1)}p.doubleToTwoFloats(F,_,m),n.push(_.x,_.y,_.z,_.x,_.y,_.z,_.x,_.y,_.z,_.x,_.y,_.z),a.push(m.x,m.y,m.z,m.x,m.y,m.z,m.x,m.y,m.z,m.x,m.y,m.z),o.push(x,T,A,E,x,T,A,E,x,T,A,E,x,T,A,E),l.push(1,-1,2,-2)}static appendLineDataLonLat(e,t,i,r,s,n,a,o,l,h,d,f,u,g){var _=0,m=new p,v=new p;u&&(u.southWest.set(180,90),u.northEast.set(-180,-90)),o.length>0?(_=o[o.length-5]+9,o.push(_,_)):o.push(0,0);for(let C=0,P=e.length;C<P;C++){var b=e[C],y=t[C];if(h[C]=[],f[C]=[],d[C]=[],b.length===0)continue;var w=_,x;if(r){let F=b[b.length-1];F instanceof Array?x=l.lonLatToCartesian(new B(F[0],F[1],F[2])):x=l.lonLatToCartesian(F)}else{let F,R,M=b[0];M instanceof Array?F=l.lonLatToCartesian(new B(M[0],M[1],M[2])):F=l.lonLatToCartesian(M),M=b[1],M||(M=b[0]),M instanceof Array?R=l.lonLatToCartesian(new B(M[0],M[1],M[2])):R=l.lonLatToCartesian(M),x=new p(F.x+F.x-R.x,F.y+F.y-R.y,F.z+F.z-R.z)}let I=i;y&&y[0]&&(I=y[0]),p.doubleToTwoFloats(x,m,v),s.push(m.x,m.y,m.z,m.x,m.y,m.z,m.x,m.y,m.z,m.x,m.y,m.z),n.push(v.x,v.y,v.z,v.x,v.y,v.z,v.x,v.y,v.z,v.x,v.y,v.z);let k=I[ze],z=I[Fe],L=I[ke],S=I[de]!=null?I[de]:1;C>0&&g.push(k,z,L,S,k,z,L,S,k,z,L,S,k,z,L,S),a.push(1,-1,2,-2);for(let F=0,R=b.length;F<R;F++){var T=b[F];T instanceof Array&&(T=new B(T[0],T[1],T[2])),y&&y[F]&&(I=y[F]),k=I[ze],z=I[Fe],L=I[ke],S=I[de]!=null?I[de]:1;var A=l.lonLatToCartesian(T);h[C].push(A),d[C].push(T),f[C].push(T.forwardMercator()),p.doubleToTwoFloats(A,m,v),s.push(m.x,m.y,m.z,m.x,m.y,m.z,m.x,m.y,m.z,m.x,m.y,m.z),n.push(v.x,v.y,v.z,v.x,v.y,v.z,v.x,v.y,v.z,v.x,v.y,v.z),g.push(k,z,L,S,k,z,L,S,k,z,L,S,k,z,L,S),a.push(1,-1,2,-2),o.push(_++,_++,_++,_++),T.lon<u.southWest.lon&&(u.southWest.lon=T.lon),T.lat<u.southWest.lat&&(u.southWest.lat=T.lat),T.lon>u.northEast.lon&&(u.northEast.lon=T.lon),T.lat>u.northEast.lat&&(u.northEast.lat=T.lat)}var E;if(r){let F=b[0];F instanceof Array?E=l.lonLatToCartesian(new B(F[0],F[1],F[2])):E=l.lonLatToCartesian(F),o.push(w,w+1,w+1,w+1)}else{let F,R,M=b[b.length-1];M instanceof Array?F=l.lonLatToCartesian(new B(M[0],M[1],M[2])):F=l.lonLatToCartesian(M),M=b[b.length-2],M||(M=b[0]),M instanceof Array?R=l.lonLatToCartesian(new B(M[0],M[1],M[2])):R=l.lonLatToCartesian(M),E=new p(F.x+F.x-R.x,F.y+F.y-R.y,F.z+F.z-R.z),o.push(_-1,_-1,_-1,_-1)}y&&y[b.length-1]&&(I=y[b.length-1]),k=I[ze],z=I[Fe],L=I[ke],S=I[de]!=null?I[de]:1,p.doubleToTwoFloats(E,m,v),s.push(m.x,m.y,m.z,m.x,m.y,m.z,m.x,m.y,m.z,m.x,m.y,m.z),n.push(v.x,v.y,v.z,v.x,v.y,v.z,v.x,v.y,v.z,v.x,v.y,v.z),g.push(k,z,L,S,k,z,L,S,k,z,L,S,k,z,L,S),a.push(1,-1,2,-2),C<e.length-1&&e[C+1].length!==0&&(_+=8,o.push(_,_))}}_setEqualPath3v(e){var t=this._extent;t.southWest.set(180,90),t.northEast.set(-180,-90);var i=new p,r=new p,s=this._verticesHigh,n=this._verticesLow,a=this._pathLonLat,o=this._pathLonLatMerc,l=0,h=this._renderNode.ellipsoid;for(let b=0;b<e.length;b++){var d=e[b],f;this._closedLine?f=d[d.length-1]:f=new p(d[0].x+d[0].x-d[1].x,d[0].y+d[0].y-d[1].y,d[0].z+d[0].z-d[1].z),p.doubleToTwoFloats(f,i,r),s[l]=i.x,n[l++]=r.x,s[l]=i.y,n[l++]=r.y,s[l]=i.z,n[l++]=r.z,s[l]=i.x,n[l++]=r.x,s[l]=i.y,n[l++]=r.y,s[l]=i.z,n[l++]=r.z,s[l]=i.x,n[l++]=r.x,s[l]=i.y,n[l++]=r.y,s[l]=i.z,n[l++]=r.z,s[l]=i.x,n[l++]=r.x,s[l]=i.y,n[l++]=r.y,s[l]=i.z,n[l++]=r.z;for(let y=0;y<d.length;y++){var u=d[y],g=this._path3v[b][y];if(g.x=u.x,g.y=u.y,g.z=u.z,h){var _=h.cartesianToLonLat(u);this._pathLonLat[b][y]=_,a[b][y]=_,o[b][y]=_.forwardMercator(),_.lon<t.southWest.lon&&(t.southWest.lon=_.lon),_.lat<t.southWest.lat&&(t.southWest.lat=_.lat),_.lon>t.northEast.lon&&(t.northEast.lon=_.lon),_.lat>t.northEast.lat&&(t.northEast.lat=_.lat)}p.doubleToTwoFloats(u,i,r),s[l]=i.x,n[l++]=r.x,s[l]=i.y,n[l++]=r.y,s[l]=i.z,n[l++]=r.z,s[l]=i.x,n[l++]=r.x,s[l]=i.y,n[l++]=r.y,s[l]=i.z,n[l++]=r.z,s[l]=i.x,n[l++]=r.x,s[l]=i.y,n[l++]=r.y,s[l]=i.z,n[l++]=r.z,s[l]=i.x,n[l++]=r.x,s[l]=i.y,n[l++]=r.y,s[l]=i.z,n[l++]=r.z}var m;if(this._closedLine)m=d[0];else{var v=d.length-1;m=new p(d[v].x+d[v].x-d[v-1].x,d[v].y+d[v].y-d[v-1].y,d[v].z+d[v].z-d[v-1].z)}p.doubleToTwoFloats(m,i,r),s[l]=i.x,n[l++]=r.x,s[l]=i.y,n[l++]=r.y,s[l]=i.z,n[l++]=r.z,s[l]=i.x,n[l++]=r.x,s[l]=i.y,n[l++]=r.y,s[l]=i.z,n[l++]=r.z,s[l]=i.x,n[l++]=r.x,s[l]=i.y,n[l++]=r.y,s[l]=i.z,n[l++]=r.z,s[l]=i.x,n[l++]=r.x,s[l]=i.y,n[l++]=r.y,s[l]=i.z,n[l++]=r.z}}_setEqualPathLonLat(e){var t=this._extent;t.southWest.set(180,90),t.northEast.set(-180,-90);var i=new p,r=new p,s=this._verticesHigh,n=this._verticesLow,a=this._pathLonLat,o=this._pathLonLatMerc,l=this._path3v,h=0,d=this._renderNode.ellipsoid;for(let v=0;v<e.length;v++){var f=e[v],u;if(this._closedLine)u=d.lonLatToCartesian(f[f.length-1]);else{let b=d.lonLatToCartesian(f[0]),y=d.lonLatToCartesian(f[1]);u=new p(b.x+b.x-y.x,b.y+b.y-y.y,b.z+b.z-y.z)}p.doubleToTwoFloats(u,i,r),s[h]=i.x,n[h++]=r.x,s[h]=i.y,n[h++]=r.y,s[h]=i.z,n[h++]=r.z,s[h]=i.x,n[h++]=r.x,s[h]=i.y,n[h++]=r.y,s[h]=i.z,n[h++]=r.z,s[h]=i.x,n[h++]=r.x,s[h]=i.y,n[h++]=r.y,s[h]=i.z,n[h++]=r.z,s[h]=i.x,n[h++]=r.x,s[h]=i.y,n[h++]=r.y,s[h]=i.z,n[h++]=r.z;for(let b=0;b<f.length;b++){var g=f[b],_=d.lonLatToCartesian(g);l[v][b]=_,o[v][b]=g.forwardMercator(),a[v][b]=g,p.doubleToTwoFloats(_,i,r),s[h]=i.x,n[h++]=r.x,s[h]=i.y,n[h++]=r.y,s[h]=i.z,n[h++]=r.z,s[h]=i.x,n[h++]=r.x,s[h]=i.y,n[h++]=r.y,s[h]=i.z,n[h++]=r.z,s[h]=i.x,n[h++]=r.x,s[h]=i.y,n[h++]=r.y,s[h]=i.z,n[h++]=r.z,s[h]=i.x,n[h++]=r.x,s[h]=i.y,n[h++]=r.y,s[h]=i.z,n[h++]=r.z,g.lon<t.southWest.lon&&(t.southWest.lon=g.lon),g.lat<t.southWest.lat&&(t.southWest.lat=g.lat),g.lon>t.northEast.lon&&(t.northEast.lon=g.lon),g.lat>t.northEast.lat&&(t.northEast.lat=g.lat)}var m;if(this._closedLine)m=d.lonLatToCartesian(f[0]);else{let b=d.lonLatToCartesian(f[f.length-1]),y=d.lonLatToCartesian(f[f.length-2]);m=new p(b.x+b.x-y.x,b.y+b.y-y.y,b.z+b.z-y.z)}p.doubleToTwoFloats(m,i,r),s[h]=i.x,n[h++]=r.x,s[h]=i.y,n[h++]=r.y,s[h]=i.z,n[h++]=r.z,s[h]=i.x,n[h++]=r.x,s[h]=i.y,n[h++]=r.y,s[h]=i.z,n[h++]=r.z,s[h]=i.x,n[h++]=r.x,s[h]=i.y,n[h++]=r.y,s[h]=i.z,n[h++]=r.z,s[h]=i.x,n[h++]=r.x,s[h]=i.y,n[h++]=r.y,s[h]=i.z,n[h++]=r.z}}setPointLonLat(e,t,i){if(this._renderNode&&this._renderNode.ellipsoid){let o=this._pathLonLat,l=this._pathLonLatMerc;o[i][t]=e,l[i][t]=e.forwardMercator();var r=this._extent;r.southWest.set(180,90),r.northEast.set(-180,-90);for(let h=0;h<o.length;h++){var s=o[h];for(let d=0;d<s.length;d++){var n=s[d].lon,a=s[d].lat;n>r.northEast.lon&&(r.northEast.lon=n),a>r.northEast.lat&&(r.northEast.lat=a),n<r.southWest.lon&&(r.southWest.lon=n),a<r.southWest.lat&&(r.southWest.lat=a)}}this.setPoint3v(this._renderNode.ellipsoid.lonLatToCartesian(e),t,i,!0)}else{let o=this._pathLonLat[i];o[t].lon=e.lon,o[t].lat=e.lat,o[t].height=e.height}}setPoint3v(e,t=0,i=0,r=!1){if(this._renderNode){var s=new p,n=new p,a=this._verticesHigh,o=this._verticesLow,l=this._pathLonLat,h=this._pathLonLatMerc,d=0,f=0;f=this._pathLengths[i]*12+24*i;let x=this._path3v[i];x[t].x=e.x,x[t].y=e.y,x[t].z=e.z;let T=this._closedLine||x.length===1;if(t===0||t===1){var u;T?u=x[x.length-1]:u=new p(x[0].x+x[0].x-x[1].x,x[0].y+x[0].y-x[1].y,x[0].z+x[0].z-x[1].z),d=f,p.doubleToTwoFloats(u,s,n),a[d]=s.x,a[d+1]=s.y,a[d+2]=s.z,a[d+3]=s.x,a[d+4]=s.y,a[d+5]=s.z,a[d+6]=s.x,a[d+7]=s.y,a[d+8]=s.z,a[d+9]=s.x,a[d+10]=s.y,a[d+11]=s.z,o[d]=n.x,o[d+1]=n.y,o[d+2]=n.z,o[d+3]=n.x,o[d+4]=n.y,o[d+5]=n.z,o[d+6]=n.x,o[d+7]=n.y,o[d+8]=n.z,o[d+9]=n.x,o[d+10]=n.y,o[d+11]=n.z}if(!r&&this._renderNode.ellipsoid){var g=this._renderNode.ellipsoid.cartesianToLonLat(e);l[i][t]=g,h[i][t]=g.forwardMercator();var _=this._extent;_.southWest.set(180,90),_.northEast.set(-180,-90);for(let A=0;A<l.length;A++){var m=l[A];for(let E=0;E<m.length;E++){var v=m[E].lon,b=m[E].lat;v>_.northEast.lon&&(_.northEast.lon=v),b>_.northEast.lat&&(_.northEast.lat=b),v<_.southWest.lon&&(_.southWest.lon=v),b<_.southWest.lat&&(_.southWest.lat=b)}}}if(d=f+t*12+12,p.doubleToTwoFloats(e,s,n),a[d]=s.x,a[d+1]=s.y,a[d+2]=s.z,a[d+3]=s.x,a[d+4]=s.y,a[d+5]=s.z,a[d+6]=s.x,a[d+7]=s.y,a[d+8]=s.z,a[d+9]=s.x,a[d+10]=s.y,a[d+11]=s.z,o[d]=n.x,o[d+1]=n.y,o[d+2]=n.z,o[d+3]=n.x,o[d+4]=n.y,o[d+5]=n.z,o[d+6]=n.x,o[d+7]=n.y,o[d+8]=n.z,o[d+9]=n.x,o[d+10]=n.y,o[d+11]=n.z,t===x.length-1||t===x.length-2){var y;if(T)y=x[0];else{var w=x.length-1;y=new p(x[w].x+x[w].x-x[w-1].x,x[w].y+x[w].y-x[w-1].y,x[w].z+x[w].z-x[w-1].z)}d=f+x.length*12+12,p.doubleToTwoFloats(y,s,n),a[d]=s.x,a[d+1]=s.y,a[d+2]=s.z,a[d+3]=s.x,a[d+4]=s.y,a[d+5]=s.z,a[d+6]=s.x,a[d+7]=s.y,a[d+8]=s.z,a[d+9]=s.x,a[d+10]=s.y,a[d+11]=s.z,o[d]=n.x,o[d+1]=n.y,o[d+2]=n.z,o[d+3]=n.x,o[d+4]=n.y,o[d+5]=n.z,o[d+6]=n.x,o[d+7]=n.y,o[d+8]=n.z,o[d+9]=n.x,o[d+10]=n.y,o[d+11]=n.z}this._changedBuffers[ft]=!0}else{let x=this._path3v[i];x[t].x=e.x,x[t].y=e.y,x[t].z=e.z}}_resizePathLengths(e=0){this._pathLengths[0]=0;for(let t=e+1,i=this._path3v.length;t<=i;t++)this._pathLengths[t]=this._pathLengths[t-1]+this._path3v[t-1].length}removeSegment(e){this._path3v.splice(e,1),this.setPath3v([].concat(this._path3v))}removePoint(e,t=0){this._path3v[t].splice(e,1),this._path3v[t].length===0&&this._path3v.splice(t,1),this.setPath3v([].concat(this._path3v))}insertPoint3v(e,t=0,i,r=0){let s=[].concat(this._path3v),n=s[r];if(n){let a=[].concat(this._pathColors);if(n.splice(t,0,e),i){let o=a[r];o||(o=new Array(n.length)),o.splice(t,0,i)}this.setPath3v(s,a)}else this.addPoint3v(e,r)}appendPoint3v(e,t,i){this._path3v.length===0||!this._renderNode?(this._pathColors.push([t||this._defaultColor]),this.addPoint3v(e)):(this._verticesHigh=Dt(this._verticesHigh),this._verticesLow=Dt(this._verticesLow),this._colors=Dt(this._colors),this._orders=Dt(this._orders),this._indexes=Dt(this._indexes),ut.appendPoint3v(this._path3v,e,this._pathColors,t||this._defaultColor,this._closedLine,this._verticesHigh,this._verticesLow,this._colors,this._orders,this._indexes,i?null:this._renderNode.ellipsoid,this._pathLonLat,this._pathLonLatMerc,this._extent),this._pathLengths[this._path3v.length]+=1,this._changedBuffers[ft]=!0,this._changedBuffers[Ke]=!0,this._changedBuffers[pi]=!0)}addPoint3v(e,t=0){t>=this._path3v.length&&this._path3v.push([]),this._path3v[t].push(e),this.setPath3v([].concat(this._path3v))}addPointLonLat(e,t=0){t>=this._pathLonLat.length&&this._pathLonLat.push([]),this._pathLonLat[t].push(e),this.setPathLonLat([].concat(this._pathLonLat))}clear(){this._clearData()}setPointColor(e,t=0,i=0){if(this._renderNode&&t<this._path3v[i].length){let r=this._pathColors[i];if(!r)if(this._path3v[i]&&t<this._path3v[i].length)this._pathColors[i]=new Array(this._path3v[i].length);else return;r[t]?(r[t][ze]=e[ze],r[t][Fe]=e[Fe],r[t][ke]=e[ke],r[t][de]=e[de]||1):r[t]=[e[ze],e[Fe],e[ke],e[de]||1];let s=this._colors,n=t*16+this._pathLengths[i]*16+32*i;s[n]=s[n+4]=s[n+8]=s[n+12]=e[ze],s[n+1]=s[n+5]=s[n+9]=s[n+13]=e[Fe],s[n+2]=s[n+6]=s[n+10]=s[n+14]=e[ke],s[n+3]=s[n+7]=s[n+11]=s[n+15]=e[de]||1,this._changedBuffers[Ke]=!0}else{let r=this._pathColors[i];r[t]=e}}setOpacity(e){this._opacity=e}setThickness(e){this.thickness=e}getThickness(){return this.thickness}setVisibility(e){this.visibility=e}getVisibility(){return this.visibility}setRenderNode(e){e&&(this._renderNode=e,this._pathLonLat.length?this._createDataLonLat([].concat(this._pathLonLat)):this._createData3v([].concat(this._path3v)),this._refresh(),e.renderer&&e.renderer.isInitialized()&&this._update())}_clearData(){this._verticesHigh=null,this._verticesLow=null,this._orders=null,this._indexes=null,this._colors=null,this._verticesHigh=[],this._verticesLow=[],this._orders=[],this._indexes=[],this._colors=[],this._path3v.length=0,this._pathLonLat.length=0,this._pathLonLatMerc.length=0,this._path3v=[],this._pathLonLat=[],this._pathLonLatMerc=[]}_createData3v(e){this._clearData(),ut.appendLineData3v(e,this._pathColors,this._defaultColor,this._closedLine,this._verticesHigh,this._verticesLow,this._orders,this._indexes,this._renderNode.ellipsoid,this._pathLonLat,this._path3v,this._pathLonLatMerc,this._extent,this._colors),this._resizePathLengths(0)}_createDataLonLat(e){this._clearData(),ut.appendLineDataLonLat(e,this._pathColors,this._defaultColor,this._closedLine,this._verticesHigh,this._verticesLow,this._orders,this._indexes,this._renderNode.ellipsoid,this._path3v,this._pathLonLat,this._pathLonLatMerc,this._extent,this._colors),this._resizePathLengths(0)}remove(){this._entity=null,this._pathColors.length=0,this._pathColors=[],this._verticesHigh=null,this._verticesLow=null,this._orders=null,this._indexes=null,this._colors=null,this._verticesHigh=[],this._verticesLow=[],this._orders=[],this._indexes=[],this._colors=[],this._deleteBuffers(),this._handler&&this._handler.remove(this)}setPickingColor3v(e){this._pickingColor[0]=e.x/255,this._pickingColor[1]=e.y/255,this._pickingColor[2]=e.z/255}getExtent(){return this._extent.clone()}getPath3v(){return this._path3v}getPathLonLat(){return this._pathLonLat}getPathColors(){return this._pathColors}setPathColors(e){this._renderNode}setColorHTML(e){this._defaultColor=qi(e);let t=ot(e),i=this._pathColors;for(let s=0,n=i.length;s<n;s++){let a=i[s];for(let o=0,l=a.length;o<l;o++)a[o][0]=t.x,a[o][1]=t.y,a[o][2]=t.z,a[o][3]=t.w}let r=this._colors;for(let s=0,n=r.length;s<n;s+=4)r[s]=t.x,r[s+1]=t.y,r[s+2]=t.z,r[s+3]=t.w;this._changedBuffers[Ke]=!0}setPathLonLat(e,t=!1){this._renderNode&&this._renderNode.ellipsoid?t?(this._setEqualPathLonLat(e),this._changedBuffers[ft]=!0,this._changedBuffers[Ke]=!0):(this._createDataLonLat(e),this._changedBuffers[ft]=!0,this._changedBuffers[pi]=!0,this._changedBuffers[Ke]=!0):this._pathLonLat=[].concat(e)}setPath3v(e,t,i=!1){t&&(this._pathColors=[].concat(t)),this._renderNode?i?(this._setEqualPath3v(e),this._changedBuffers[ft]=!0,this._changedBuffers[Ke]=!0):(this._createData3v(e),this._changedBuffers[ft]=!0,this._changedBuffers[pi]=!0,this._changedBuffers[Ke]=!0):this._path3v=[].concat(e)}draw(){if(this.visibility&&this._path3v.length){this._update();let e=this._renderNode,t=e.renderer,i=t.handler.programs.polyline_screen,r=i._program,s=t.handler.gl,n=r.attributes,a=r.uniforms,o=this._handler._entityCollection;i.activate(),s.disable(s.CULL_FACE),s.uniform1f(a.depthOffset,o.polygonOffsetUnits),s.uniformMatrix4fv(a.proj,!1,t.activeCamera.getProjectionMatrix()),s.uniformMatrix4fv(a.view,!1,t.activeCamera.getViewMatrix()),s.uniform3fv(a.eyePositionHigh,t.activeCamera.eyeHigh),s.uniform3fv(a.eyePositionLow,t.activeCamera.eyeLow),s.uniform2fv(a.uFloatParams,[e._planetRadius2||0,t.activeCamera._tanViewAngle_hradOneByHeight]),s.uniform2fv(a.viewport,[t.handler.canvas.width,t.handler.canvas.height]),s.uniform1f(a.thickness,this.thickness*.5),s.uniform1f(a.opacity,this._opacity*o._fadingOpacity),s.bindBuffer(s.ARRAY_BUFFER,this._colorsBuffer),s.vertexAttribPointer(n.color,this._colorsBuffer.itemSize,s.FLOAT,!1,0,0);let l=this._verticesHighBuffer;s.bindBuffer(s.ARRAY_BUFFER,l),s.vertexAttribPointer(n.prevHigh,l.itemSize,s.FLOAT,!1,12,0),s.vertexAttribPointer(n.currentHigh,l.itemSize,s.FLOAT,!1,12,48),s.vertexAttribPointer(n.nextHigh,l.itemSize,s.FLOAT,!1,12,96),l=this._verticesLowBuffer,s.bindBuffer(s.ARRAY_BUFFER,l),s.vertexAttribPointer(n.prevLow,l.itemSize,s.FLOAT,!1,12,0),s.vertexAttribPointer(n.currentLow,l.itemSize,s.FLOAT,!1,12,48),s.vertexAttribPointer(n.nextLow,l.itemSize,s.FLOAT,!1,12,96),s.bindBuffer(s.ARRAY_BUFFER,this._ordersBuffer),s.vertexAttribPointer(n.order,this._ordersBuffer.itemSize,s.FLOAT,!1,4,0),s.bindBuffer(s.ELEMENT_ARRAY_BUFFER,this._indexesBuffer),s.drawElements(s.TRIANGLE_STRIP,this._indexesBuffer.numItems,s.UNSIGNED_INT,0),s.enable(s.CULL_FACE)}}drawPicking(){if(this.visibility&&this._path3v.length){let e=this._renderNode,t=e.renderer,i=t.handler.programs.polyline_picking,r=i._program,s=t.handler.gl,n=r.attributes,a=r.uniforms;i.activate(),s.disable(s.CULL_FACE),s.uniform1f(a.depthOffset,this._handler._entityCollection.polygonOffsetUnits),s.uniformMatrix4fv(a.proj,!1,t.activeCamera.getProjectionMatrix()),s.uniformMatrix4fv(a.view,!1,t.activeCamera.getViewMatrix()),s.uniform4fv(a.color,[this._pickingColor[0],this._pickingColor[1],this._pickingColor[2],1]),s.uniform3fv(a.eyePositionHigh,t.activeCamera.eyeHigh),s.uniform3fv(a.eyePositionLow,t.activeCamera.eyeLow),s.uniform2fv(a.uFloatParams,[e._planetRadius2||0,t.activeCamera._tanViewAngle_hradOneByHeight]),s.uniform2fv(a.viewport,[t.handler.canvas.width,t.handler.canvas.height]),s.uniform1f(a.thickness,this.thickness*.5);let o=this._verticesHighBuffer;s.bindBuffer(s.ARRAY_BUFFER,o),s.vertexAttribPointer(n.prevHigh,o.itemSize,s.FLOAT,!1,12,0),s.vertexAttribPointer(n.currentHigh,o.itemSize,s.FLOAT,!1,12,48),s.vertexAttribPointer(n.nextHigh,o.itemSize,s.FLOAT,!1,12,96),o=this._verticesLowBuffer,s.bindBuffer(s.ARRAY_BUFFER,o),s.vertexAttribPointer(n.prevLow,o.itemSize,s.FLOAT,!1,12,0),s.vertexAttribPointer(n.currentLow,o.itemSize,s.FLOAT,!1,12,48),s.vertexAttribPointer(n.nextLow,o.itemSize,s.FLOAT,!1,12,96),s.bindBuffer(s.ARRAY_BUFFER,this._ordersBuffer),s.vertexAttribPointer(n.order,this._ordersBuffer.itemSize,s.FLOAT,!1,4,0),s.bindBuffer(s.ELEMENT_ARRAY_BUFFER,this._indexesBuffer),s.drawElements(s.TRIANGLE_STRIP,this._indexesBuffer.numItems,s.UNSIGNED_INT,0),s.enable(s.CULL_FACE)}}_refresh(){let e=this._changedBuffers.length;for(;e--;)this._changedBuffers[e]=!0}_update(){if(this._renderNode){let e=this._changedBuffers.length;for(;e--;)this._changedBuffers[e]&&(this._buffersUpdateCallbacks[e].call(this),this._changedBuffers[e]=!1)}}_deleteBuffers(){if(this._renderNode){let e=this._renderNode.renderer,t=e.handler.gl;t.deleteBuffer(this._verticesHighBuffer),t.deleteBuffer(this._verticesLowBuffer),t.deleteBuffer(this._ordersBuffer),t.deleteBuffer(this._indexesBuffer),t.deleteBuffer(this._colorsBuffer),this._verticesHighBuffer=null,this._verticesLowBuffer=null,this._ordersBuffer=null,this._indexesBuffer=null,this._colorsBuffer=null}}_createVerticesBuffer(){let e=this._renderNode.renderer.handler,t=this._verticesHigh.length/3;(!this._verticesHighBuffer||this._verticesHighBuffer.numItems!==t)&&(e.gl.deleteBuffer(this._verticesHighBuffer),e.gl.deleteBuffer(this._verticesLowBuffer),this._verticesHighBuffer=e.createStreamArrayBuffer(3,t),this._verticesLowBuffer=e.createStreamArrayBuffer(3,t)),this._verticesHigh=X(this._verticesHigh),this._verticesLow=X(this._verticesLow),e.setStreamArrayBuffer(this._verticesHighBuffer,this._verticesHigh),e.setStreamArrayBuffer(this._verticesLowBuffer,this._verticesLow)}_createIndexBuffer(){let e=this._renderNode.renderer.handler;e.gl.deleteBuffer(this._ordersBuffer),e.gl.deleteBuffer(this._indexesBuffer),this._orders=X(this._orders),this._ordersBuffer=e.createArrayBuffer(this._orders,1,this._orders.length/2),this._indexes=X(this._indexes,Uint32Array),this._indexesBuffer=e.createElementArrayBuffer(this._indexes,1,this._indexes.length)}_createColorsBuffer(){let e=this._renderNode.renderer.handler;e.gl.deleteBuffer(this._colorsBuffer),this._colors=X(this._colors),this._colorsBuffer=e.createArrayBuffer(new Float32Array(this._colors),4,this._colors.length/4)}}ut.__counter__=0;class vi{constructor(e={}){this.__id=vi.__counter__++,this._thickness=e.thickness||2,this._startPosition=lt(e.startPosition),this._startPositionHigh=new p,this._startPositionLow=new p,p.doubleToTwoFloats(this._startPosition,this._startPositionHigh,this._startPositionLow),this._endPosition=lt(e.endPosition),this._endPositionHigh=new p,this._endPositionLow=new p,p.doubleToTwoFloats(this._endPosition,this._endPositionHigh,this._endPositionLow),this._startColor=qe(e.startColor),this._endColor=qe(e.endColor),this._visibility=e.visibility!=null?e.visibility:!0,this._entity=null,this._handler=null,this._handlerIndex=-1}setStartPosition(e,t,i){this._startPosition.x=e,this._startPosition.y=t,this._startPosition.z=i,p.doubleToTwoFloats(this._startPosition,this._startPositionHigh,this._startPositionLow),this._handler&&this._handler.setStartPositionArr(this._handlerIndex,this._startPositionHigh,this._startPositionLow)}getLength(){return this._startPosition.distance(this._endPosition)}setStartPosition3v(e){this._startPosition.x=e.x,this._startPosition.y=e.y,this._startPosition.z=e.z,p.doubleToTwoFloats(this._startPosition,this._startPositionHigh,this._startPositionLow),this._handler&&this._handler.setStartPositionArr(this._handlerIndex,this._startPositionHigh,this._startPositionLow)}setEndPosition(e,t,i){this._endPosition.x=e,this._endPosition.y=t,this._endPosition.z=i,p.doubleToTwoFloats(this._endPosition,this._endPositionHigh,this._endPositionLow),this._handler&&this._handler.setEndPositionArr(this._handlerIndex,this._endPositionHigh,this._endPositionLow)}setEndPosition3v(e){this._endPosition.x=e.x,this._endPosition.y=e.y,this._endPosition.z=e.z,p.doubleToTwoFloats(this._endPosition,this._endPositionHigh,this._endPositionLow),this._handler&&this._handler.setEndPositionArr(this._handlerIndex,this._endPositionHigh,this._endPositionLow)}setThickness(e){this._thickness=e,this._handler&&this._handler.setThicknessArr(this._handlerIndex,e)}setColors4v(e,t){e&&(this._startColor.x=e.x,this._startColor.y=e.y,this._startColor.z=e.z,this._startColor.w=e.w),t&&(this._endColor.x=t.x,this._endColor.y=t.y,this._endColor.z=t.z,this._endColor.w=t.w),this._handler&&this._handler.setRgbaArr(this._handlerIndex,this._startColor,this._endColor)}setColorsHTML(e,t){e&&(this._startColor=ot(e)),t&&(this._endColor=ot(t)),this._handler&&this._handler.setRgbaArr(this._handlerIndex,this._startColor,this._endColor)}getStartPosition(){return this._startPosition}getEndPosition(){return this._endPosition}setVisibility(e){this._visibility=e,this._handler&&this._handler.setVisibility(this._handlerIndex,e)}getVisibility(){return this._visibility}remove(){this._entity=null,this._handler&&this._handler.remove(this)}setPickingColor3v(e){this._handler&&this._handler.setPickingColorArr(this._handlerIndex,e)}}vi.__counter__=0;let oe=new p,le=new p;class xi{constructor(e={}){if(this.__id=xi.__counter__++,this.visibility=e.visibility!=null?e.visibility:!0,this.color=new Float32Array([1,1,1,.5]),e.color){let t=qe(e.color);this.setColor(t.x,t.y,t.z,t.w)}e.opacity&&this.setOpacity(e.opacity),this._renderNode=null,this._entity=null,this._verticesHighBuffer=null,this._verticesLowBuffer=null,this._indexBuffer=null,this._verticesHigh=[],this._verticesLow=[],this._indexes=[],this._path=[],this._pickingColor=new Float32Array(4),this._gridSize=1,this._handler=null,this._handlerIndex=-1,e.path&&this.setPath(e.path)}setPickingColor3v(e){this._pickingColor[0]=e.x/255,this._pickingColor[1]=e.y/255,this._pickingColor[2]=e.z/255,this._pickingColor[3]=1}clear(){this._path.length=0,this._path=[],this._verticesHigh.length=0,this._verticesHigh=[],this._verticesLow.length=0,this._verticesLow=[],this._indexes.length=0,this._indexes=[],this._deleteBuffers()}setColor(e,t,i,r){r=r||this.color[3],this.color[0]=e,this.color[1]=t,this.color[2]=i,this.color[3]=r}setOpacity(e){this.color[3]=e||0}setVisibility(e){this.visibility=e}getVisibility(){return this.visibility}setRenderNode(e){this._renderNode=e,this._createBuffers()}remove(){this._entity=null,this._handler&&this._handler.remove(this)}draw(){if(this.visibility&&this._verticesHigh.length){let e=this._renderNode.renderer,t=e.handler.gl,i=e.handler.programs.strip,r=i._program,s=r.attributes,n=r.uniforms;i.activate(),t.disable(t.CULL_FACE),t.uniformMatrix4fv(n.viewMatrix,!1,e.activeCamera.getViewMatrix()),t.uniformMatrix4fv(n.projectionMatrix,!1,e.activeCamera.getProjectionMatrix()),t.uniform3fv(n.eyePositionHigh,e.activeCamera.eyeHigh),t.uniform3fv(n.eyePositionLow,e.activeCamera.eyeLow),t.uniform4fv(n.uColor,this.color),t.uniform1f(n.uOpacity,this._entity._entityCollection._fadingOpacity),t.bindBuffer(t.ARRAY_BUFFER,this._verticesHighBuffer),t.vertexAttribPointer(s.aVertexPositionHigh,this._verticesHighBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._verticesLowBuffer),t.vertexAttribPointer(s.aVertexPositionLow,this._verticesLowBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this._indexBuffer),t.drawElements(e.handler.gl.TRIANGLE_STRIP,this._indexBuffer.numItems,t.UNSIGNED_INT,0),t.enable(t.CULL_FACE)}}drawPicking(){if(this.visibility&&this._verticesHigh.length){let e=this._renderNode.renderer,t=e.handler.gl,i=e.handler.programs.strip,r=i._program,s=r.attributes,n=r.uniforms;i.activate(),t.disable(t.CULL_FACE),t.uniformMatrix4fv(n.viewMatrix,!1,e.activeCamera.getViewMatrix()),t.uniformMatrix4fv(n.projectionMatrix,!1,e.activeCamera.getProjectionMatrix()),t.uniform3fv(n.eyePositionHigh,e.activeCamera.eyeHigh),t.uniform3fv(n.eyePositionLow,e.activeCamera.eyeLow),t.uniform1f(n.uOpacity,this._entity._entityCollection._fadingOpacity!=0?1:0),t.uniform4fv(n.uColor,this._pickingColor),t.bindBuffer(t.ARRAY_BUFFER,this._verticesHighBuffer),t.vertexAttribPointer(s.aVertexPositionHigh,this._verticesHighBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._verticesLowBuffer),t.vertexAttribPointer(s.aVertexPositionLow,this._verticesLowBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this._indexBuffer),t.drawElements(e.handler.gl.TRIANGLE_STRIP,this._indexBuffer.numItems,t.UNSIGNED_INT,0),t.enable(t.CULL_FACE)}}_deleteBuffers(){if(this._renderNode&&this._renderNode.renderer){let e=this._renderNode.renderer,t=e.handler.gl;t.deleteBuffer(this._indexBuffer),t.deleteBuffer(this._verticesHighBuffer),t.deleteBuffer(this._verticesLowBuffer)}this._verticesHighBuffer=null,this._verticesLowBuffer=null,this._indexBuffer=null}_createBuffers(){if(this._renderNode&&this._renderNode.renderer&&this._renderNode.renderer.isInitialized()){let e=this._renderNode.renderer.handler.gl;e.deleteBuffer(this._indexBuffer),e.deleteBuffer(this._verticesHighBuffer),e.deleteBuffer(this._verticesLowBuffer),this._verticesHighBuffer=this._renderNode.renderer.handler.createArrayBuffer(new Float32Array(this._verticesHigh),3,this._verticesHigh.length/3),this._verticesLowBuffer=this._renderNode.renderer.handler.createArrayBuffer(new Float32Array(this._verticesLow),3,this._verticesLow.length/3),this._indexBuffer=this._renderNode.renderer.handler.createElementArrayBuffer(new Uint32Array(this._indexes),1,this._indexes.length)}}addEdge3v(e,t){let i=this._path.length;if(i===0)this._path.push([e.clone(),t.clone()]);else{let r=this._path[i-1][0],s=this._path[i-1][1];this._path.push([e.clone(),t.clone()]);let n=this._verticesHigh,a=this._verticesLow,o=this._gridSize,l=o+1,h=new p,d=this._verticesHigh.length/3,f=d,u=Math.abs(r.sub(s).normal().dot(e.sub(r).normal()));for(let g=0;g<l;g++){let _=g/o,m=r.lerp(e,_),v=s.lerp(t,_);for(let b=0;b<l;b++){let y=b/o,w=r.lerp(s,y),x=e.lerp(t,y);u!==1?new Ve(m,v).intersects(new Ve(w,x),h):h=x,f=d+g*l+b,p.doubleToTwoFloats(h,oe,le);let T=f*3;n[T]=oe.x,n[T+1]=oe.y,n[T+2]=oe.z,a[T]=le.x,a[T+1]=le.y,a[T+2]=le.z,g<o&&this._indexes.push(f,f+l)}g<o&&this._indexes.push(f+l,f+1)}this._createBuffers()}}setEdge3v(e,t,i){if(i===this._path.length){this.addEdge3v(e,t);return}if(this._path[i]){if(this._path[i][0]=e,this._path[i][1]=t,this._path.length>1){let r=this._gridSize,s=r+1,n=s*s,a=new p,o=this._verticesHigh,l=this._verticesLow;if(i===this._path.length-1){let h=this._path[i-1][0],d=this._path[i-1][1],f=this._verticesHigh.length/3-n,u=f,g=Math.abs(h.sub(d).normal().dot(e.sub(h).normal()));for(let _=0;_<s;_++){let m=_/r,v=h.lerp(e,m),b=d.lerp(t,m);for(let y=0;y<s;y++){let w=y/r,x=h.lerp(d,w),T=e.lerp(t,w);g!==1?new Ve(v,b).intersects(new Ve(x,T),a):a=T,u=f+_*s+y,p.doubleToTwoFloats(a,oe,le);let A=u*3;o[A]=oe.x,o[A+1]=oe.y,o[A+2]=oe.z,l[A]=le.x,l[A+1]=le.y,l[A+2]=le.z}}}else if(i===0){let h=0,d=e,f=t;e=this._path[1][0],t=this._path[1][1];for(let u=0;u<s;u++){let g=u/r,_=d.lerp(e,g),m=f.lerp(t,g);for(let v=0;v<s;v++){let b=v/r,y=d.lerp(f,b),w=e.lerp(t,b);new Ve(_,m).intersects(new Ve(y,w),a),h=u*s+v,p.doubleToTwoFloats(a,oe,le);let x=h*3;o[x]=oe.x,o[x+1]=oe.y,o[x+2]=oe.z,l[x]=le.x,l[x+1]=le.y,l[x+2]=le.z}}}else if(i>0&&i<this._path.length){let h=this._path[i-1][0],d=this._path[i-1][1],f=this._path[i+1][0],u=this._path[i+1][1],g=i*n,_=(i-1)*n,m=_;for(let v=0;v<s;v++){let b=v/r,y=h.lerp(e,b),w=t.lerp(u,b),x=e.lerp(f,b),T=d.lerp(t,b);for(let A=0;A<s;A++){let E=A/r,C=h.lerp(d,E),P=e.lerp(t,E);new Ve(y,T).intersects(new Ve(C,P),a);let I=v*s+A;m=_+I,p.doubleToTwoFloats(a,oe,le);let k=m*3;o[k]=oe.x,o[k+1]=oe.y,o[k+2]=oe.z,l[k]=le.x,l[k+1]=le.y,l[k+2]=le.z;let z=f.lerp(u,E);P=e.lerp(t,E),new Ve(x,w).intersects(new Ve(P,z),a),m=g+I,p.doubleToTwoFloats(a,oe,le),k=m*3,o[k]=oe.x,o[k+1]=oe.y,o[k+2]=oe.z,l[k]=le.x,l[k+1]=le.y,l[k+2]=le.z}}}this._createBuffers()}}else console.warn(`strip index ${i} is out of range`)}removeEdge(e){this._path.splice(e,1),this.setPath([].concat(this._path))}setGridSize(e){this._gridSize=e,this.setPath([].concat(this._path))}getPath(){return this._path}setPath(e){this._verticesHigh=[],this._verticesLow=[],this._indexes=[],this._path=[];for(let t=0;t<e.length;t++){let i=e[t][0],r=e[t][1];i instanceof Array&&(i=new p(i[0],i[1],i[2])),r instanceof Array&&(r=new p(r[0],r[1],r[2])),this.addEdge3v(i,r)}}insertEdge3v(e,t,i){if(i<this._path.length){let r=[].concat(this._path);r.splice(i,0,[e,t]),this.setPath(r)}else i===this._path.length&&this.addEdge3v(e,t)}}xi.__counter__=0;class yi{constructor(e={}){e.properties=e.properties||{},this.__id=yi.__counter__++,this.properties=e.properties||{},this.properties.name=this.properties.name!=null?this.properties.name:"",this.childrenNodes=[],this.parent=null,this._cartesian=lt(e.cartesian),this._lonLat=Xi(e.lonlat),this._lonLatMerc=new B,this._altitude=e.altitude||0,this._visibility=e.visibility!=null?e.visibility:!0,this._entityCollection=null,this._entityCollectionIndex=-1,this._layer=null,this._layerIndex=-1,this._pickingColor=new p(0,0,0),this._featureConstructorArray={billboard:[Sa,this.setBillboard],label:[za,this.setLabel],polyline:[ut,this.setPolyline],pointCloud:[mi,this.setPointCloud],geometry:[Xe,this.setGeometry],geoObject:[Ia,this.setGeoObject],strip:[xi,this.setStrip],ray:[vi,this.setRay]},this.billboard=this._createOptionFeature("billboard",e.billboard),this.label=this._createOptionFeature("label",e.label),this.polyline=this._createOptionFeature("polyline",e.polyline),this.ray=this._createOptionFeature("ray",e.ray),this.pointCloud=this._createOptionFeature("pointCloud",e.pointCloud),this.geometry=this._createOptionFeature("geometry",e.geometry),this.geoObject=this._createOptionFeature("geoObject",e.geoObject),this.strip=this._createOptionFeature("strip",e.strip)}get id(){return this.__id}isEqual(e){return this.__id===e.__id}get layerIndex(){return this._layerIndex}get instanceName(){return"Entity"}_createOptionFeature(e,t){if(t){let i=this._featureConstructorArray[e];return i[1].call(this,new i[0](t))}return null}getCollectionIndex(){return this._entityCollectionIndex}addTo(e,t=!1){return e.add(this,t),this}remove(){this._layer&&this._layer.removeEntity(this),this._entityCollection&&this._entityCollection.removeEntity(this)}setVisibility(e){this._visibility=e,this.billboard&&this.billboard.setVisibility(e),this.geoObject&&this.geoObject.setVisibility(e),this.label&&this.label.setVisibility(e),this.polyline&&this.polyline.setVisibility(e),this.ray&&this.ray.setVisibility(e),this.geometry&&this.geometry.setVisibility(e);for(let t=0;t<this.childrenNodes.length;t++)this.childrenNodes[t].setVisibility(e)}getVisibility(){return this._visibility}setCartesian3v(e){this.setCartesian(e.x,e.y,e.z)}setCartesian(e,t,i){let r=this._cartesian;r.x=e||0,r.y=t||0,r.z=i||0,this.billboard&&this.billboard.setPosition3v(r),this.geoObject&&this.geoObject.setPosition3v(r),this.label&&this.label.setPosition3v(r);for(let n=0;n<this.childrenNodes.length;n++)this.childrenNodes[n].setCartesian(e,t,i);let s=this._entityCollection;s&&s.renderNode&&s.renderNode.ellipsoid&&(this._lonLat=s.renderNode.ellipsoid.cartesianToLonLat(r),Math.abs(this._lonLat.lat)<ce?this._lonLatMerc=this._lonLat.forwardMercator():this._lonLatMerc.lon=this._lonLatMerc.lat=this._lonLatMerc.height=0)}_setCartesian3vSilent(e,t=!1){let i=this._cartesian;i.x=e.x||0,i.y=e.y||0,i.z=e.z||0,this.billboard&&this.billboard.setPosition3v(i),this.geoObject&&this.geoObject.setPosition3v(i),this.label&&this.label.setPosition3v(i);for(let s=0;s<this.childrenNodes.length;s++)this.childrenNodes[s].setCartesian(i.x,i.y,i.z);let r=this._entityCollection;!t&&r&&r.renderNode&&r.renderNode.ellipsoid&&(this._lonLat=r.renderNode.ellipsoid.cartesianToLonLat(i),Math.abs(this._lonLat.lat)<ce&&(this._lonLatMerc=this._lonLat.forwardMercator()))}getLonLat(){return this._lonLat.clone()}setLonLat(e){let t=this._lonLat;t.lon=e.lon,t.lat=e.lat,t.height=e.height;let i=this._entityCollection;i&&i.renderNode&&i.renderNode.ellipsoid&&(Math.abs(t.lat)<ce&&(this._lonLatMerc=t.forwardMercator()),i.renderNode.ellipsoid.lonLatToCartesianRes(t,this._cartesian),this.setCartesian3v(this._cartesian))}setLonLat2(e,t,i){let r=this._lonLat;r.lon=e,r.lat=t,r.height=i??r.height;let s=this._entityCollection;s&&s.renderNode&&s.renderNode.ellipsoid&&(Math.abs(r.lat)<ce?this._lonLatMerc=r.forwardMercator():this._lonLatMerc.lon=this._lonLatMerc.lat=this._lonLatMerc.height=0,s.renderNode.ellipsoid.lonLatToCartesianRes(r,this._cartesian),this.setCartesian3v(this._cartesian))}setAltitude(e){this._altitude=e}getAltitude(){return this._altitude}getCartesian(){return this._cartesian.clone()}setBillboard(e){return this.billboard&&this.billboard.remove(),this.billboard=e,this.billboard._entity=this,this.billboard.setPosition3v(this._cartesian),this.billboard.setVisibility(this._visibility),this._entityCollection&&this._entityCollection.billboardHandler.add(e),e}setLabel(e){return this.label&&this.label.remove(),this.label=e,this.label._entity=this,this.label.setPosition3v(this._cartesian),this.label.setVisibility(this._visibility),this._entityCollection&&this._entityCollection.labelHandler.add(e),e}setRay(e){return this.ray&&this.ray.remove(),this.ray=e,this.ray._entity=this,this.ray.setVisibility(this._visibility),this._entityCollection&&this._entityCollection.rayHandler.add(e),e}setPolyline(e){return this.polyline&&this.polyline.remove(),this.polyline=e,this.polyline._entity=this,this.polyline.setVisibility(this._visibility),this._entityCollection&&this._entityCollection.polylineHandler.add(e),e}setPointCloud(e){return this.pointCloud&&this.pointCloud.remove(),this.pointCloud=e,this.pointCloud._entity=this,this.pointCloud.setVisibility(this._visibility),this._entityCollection&&this._entityCollection.pointCloudHandler.add(e),e}setGeometry(e){return this.geometry&&this.geometry.remove(),this.geometry=e,this.geometry._entity=this,this.geometry.setVisibility(this._visibility),this._layer&&this._layer.add(this),e}setGeoObject(e){return this.geoObject&&this.geoObject.remove(),this.geoObject=e,this.geoObject._entity=this,this.geoObject.setPosition3v(this._cartesian),this.geoObject.setVisibility(this._visibility),this._entityCollection&&this._entityCollection.geoObjectHandler.add(e),e}setStrip(e){return this.strip&&this.strip.remove(),this.strip=e,this.strip._entity=this,this.strip.setVisibility(this._visibility),this._entityCollection&&this._entityCollection.stripHandler.add(e),e}get layer(){return this._layer}get rendererEvents(){return this._layer?this._layer.events:this._entityCollection?this._entityCollection.events:null}appendChild(e){e._entityCollection=this._entityCollection,e._pickingColor=this._pickingColor,e.parent=this,this.childrenNodes.push(e),this._entityCollection&&this._entityCollection.appendChildEntity(e)}setPickingColor(){let e=this._pickingColor;this.billboard&&this.billboard.setPickingColor3v(e),this.label&&this.label.setPickingColor3v(e),this.polyline&&this.polyline.setPickingColor3v(e),this.ray&&this.ray.setPickingColor3v(e),this.strip&&this.strip.setPickingColor3v(e),this.geoObject&&this.geoObject.setPickingColor3v(e);for(let t=0;t<this.childrenNodes.length;t++)this.childrenNodes[t].setPickingColor()}getExtent(){let e,t=this._lonLat;this.billboard||this.label?e=new U(new B(t.lon,t.lat),new B(t.lon,t.lat)):e=new U(new B(180,90),new B(-180,-90));let i=e.southWest,r=e.northEast;if(this.polyline){let s=this.polyline.getExtent();s.southWest.lon<i.lon&&(i.lon=s.southWest.lon),s.southWest.lat<i.lat&&(i.lat=s.southWest.lat),s.northEast.lon>r.lon&&(r.lon=s.northEast.lon),s.northEast.lat>r.lat&&(r.lat=s.northEast.lat)}if(this.geometry){let s=this.geometry.getExtent();s.southWest.lon<i.lon&&(i.lon=s.southWest.lon),s.southWest.lat<i.lat&&(i.lat=s.southWest.lat),s.northEast.lon>r.lon&&(r.lon=s.northEast.lon),s.northEast.lat>r.lat&&(r.lat=s.northEast.lat)}for(let s=0;s<this.childrenNodes.length;s++){let n=this.childrenNodes[s].getExtent();n.southWest.lon<i.lon&&(i.lon=n.southWest.lon),n.southWest.lat<i.lat&&(i.lat=n.southWest.lat),n.northEast.lon>r.lon&&(r.lon=n.northEast.lon),n.northEast.lat>r.lat&&(r.lat=n.northEast.lat)}return e}}yi.__counter__=0;function ka(c){const e=[[0,0,0]],t=[[0,0]],i=[[0,0,0]],r=[e,t,i];let s=[[],[],[]];const n=[],a=[];let o,l=["default"],h="default",d="default";function f(){o&&o.data.vertices.length&&(o=null)}function u(){if(!o){const b=[],y=[],w=[];s=[b,y,w],o={object:d,groups:l,material:h,data:{vertices:b,textures:y,normals:w}},a.push(o)}}function g(b){b.split("/").forEach((w,x)=>{if(!w)return;const T=parseInt(w),A=T+(T>=0?0:r[x].length);s[x].push(...r[x][A])})}const _={v(b){e.push(b.map(parseFloat))},vn(b){i.push(b.map(parseFloat))},vt(b){t.push(b.map(parseFloat))},f(b){u();const y=b.length-2;for(let w=0;w<y;++w)g(b[0]),g(b[w+1]),g(b[w+2])},s:()=>{},mtllib(b,y){n.push(y)},usemtl(b,y){h=y,f()},g(b){l=b,f()},o(b,y){d=y,f()}},m=/(\w*)(?: )*(.*)/,v=c.split(`
|
|
207
|
+
`);for(let b=0;b<v.length;++b){const y=v[b].trim();if(y===""||y.startsWith("#"))continue;const w=m.exec(y);if(!w)continue;const[,x,T]=w,A=y.split(/\s+/).slice(1),E=_[x];if(!E){console.warn("unhandled keyword:",x);continue}E(A,T)}for(const b of a)b.data=Object.fromEntries(Object.entries(b.data).filter(([y,w])=>w.length>0));return{geometries:a,materialLibs:n}}function Da(c){return{geometries:c.geometries.map(t=>{const i=t.data.vertices,r=t.data.normals,s=t.data.textures;Na(t.data,0);let n=[],a=[],o=[];for(let l=0;l<i.length;l+=3){const h=i[l],d=i[l+1],f=i[l+2];n.push(h,d,f)}for(let l=0;l<r.length;l+=3){const h=r[l],d=r[l+1],f=r[l+2];a.push(h,d,-f)}for(let l=0;l<s.length;l+=2){const h=s[l],d=1-s[l+1];o.push(h,d)}return{object:t.object,groups:t.groups,material:t.material,data:{vertices:n,normals:a,textures:o}}}),materialLibs:c.materialLibs}}function Na(c,e){const t=Math.cos(e),i=Math.sin(e),r=c.vertices,s=c.normals;for(let n=0;n<r.length;n+=3){const a=r[n],o=r[n+1],l=r[n+2];r[n]=a*t+l*i,r[n+1]=o,r[n+2]=-a*i+l*t;const h=s[n],d=s[n+1],f=s[n+2];s[n]=h*t+f*i,s[n+1]=d,s[n+2]=-h*i+f*t}return{vertices:r,normals:s}}function Ha(c){return c instanceof Array?new Float32Array(c):typeof c=="string"?qi(c):new Float32Array([1,1,1,1])}class xe{constructor(e={}){if(this._name=e.name||"noname",this._vertices=e.vertices||[],this._numVertices=this._vertices.length/3,this._texCoords=e.texCoords||new Array(2*this._numVertices),e.center&&xe.centering(this._vertices),this._src=e.src||null,this.color=Ha(e.color),e.scale&&xe.scale(this._vertices,e.scale),e.indices)this._indices=e.indices,this._normals=e.normals||[];else{this._normals=xe.getNormals(this._vertices),this._indices=new Array(this._vertices.length/3);for(let t=0,i=this._indices.length;t<i;t++)this._indices[t]=t}}static centering(e){let t=fe,i=fe,r=fe,s=pe,n=pe,a=pe;for(let d=0,f=e.length;d<f;d+=3){let u=e[d],g=e[d+1],_=e[d+2];u<t&&(t=u),g<i&&(i=g),_<r&&(r=_),u>s&&(s=u),g>n&&(n=g),_>a&&(a=_)}let o=t+(s-t)*.5,l=i+(n-i)*.5,h=r+(a-r)*.5;for(let d=0,f=e.length;d<f;d+=3)e[d]-=o,e[d+1]-=l,e[d+2]-=h}get src(){return this._src}set src(e){this._src=e}get name(){return this._name}get vertices(){return this._vertices}get normals(){return this._normals}get indices(){return this._indices}get texCoords(){return this._texCoords}get numVertices(){return this._numVertices}static scale(e,t){for(let i=0;i<e.length;i++)e[i]*=t}static centroid(e){let t=1e3,i=1e3,r=1e3,s=-1e3,n=-1e3,a=-1e3;for(let o=0;o<e.length;o+=3){let l=e[o],h=e[o+1],d=e[o+2];l<t&&(t=l),h<i&&(i=h),d<r&&(r=d),l>s&&(s=l),h>n&&(n=h),d>a&&(a=d)}return[t+(s-t)*.5,i+(n-i)*.5,r+(a-r)*.5]}static translate(e,t){for(let i=0;i<e.length;i+=3)e[i]-=t[0],e[i+1]-=t[1],e[i+2]-=t[2]}static getNormals(e){let t=new Array(e.length);for(let i=0;i<e.length;i+=9){let r=i,s=i+3,n=i+6,a=e[r],o=e[r+1],l=e[r+2],h=e[s],d=e[s+1],f=e[s+2],u=e[n],g=e[n+1],_=e[n+2],m=h-a,v=d-o,b=f-l,y=u-a,w=g-o,x=_-l,T=v*x-b*w,A=b*y-m*x,E=m*w-v*y,C=Math.sqrt(T*T+A*A+E*E);T/=C,A/=C,E/=C,t[r]=T,t[r+1]=A,t[r+2]=E,t[s]=T,t[s+1]=A,t[s+2]=E,t[n]=T,t[n+1]=A,t[n+2]=E}return t}static createSphere(e=16,t=16,i=1,r=0,s=0,n=0){let a=[],o=[],l=[];for(let h=0;h<=t;h++){let d=h*Math.PI/t,f=Math.sin(d),u=Math.cos(d);for(let g=0;g<=e;g++){let _=g*2*Math.PI/e,m=Math.sin(_),b=Math.cos(_)*f+r,y=u+s,w=m*f+n;l.push(b),l.push(y),l.push(w),a.push(i*b),a.push(i*y),a.push(i*w)}}for(let h=0;h<t;h++)for(let d=0;d<e;d++){let f=h*(e+1)+d,u=f+e+1;o.push(f),o.push(f+1),o.push(u),o.push(u),o.push(f+1),o.push(u+1)}return new xe({vertices:a,normals:l,indices:o})}static createDisc(e=1,t=0,i=8,r=!0,s=0,n=0,a=0,o=0){let l=[],h=[],d=[],f=0,u=Math.PI*2,g=r?1:-1,_=s;for(let v=1;v<=i;v++)l.push(n,t*g+a,o),d.push(0,g,0),s++;let m=s;for(let v=0;v<=i;v++){let y=v/i*u+f,w=Math.cos(y),x=Math.sin(y);l.push(e*x+n,t*g+a,e*w+o),d.push(0,g,0),s++}for(let v=0;v<i;v++){let b=_+v,y=m+v;r?h.push(y,y+1,b):h.push(y+1,y,b)}return new xe({vertices:l,normals:d,indices:h})}static createCylinder(e=1,t=1,i=1,r=32,s=1,n=!0,a=!0,o=0,l=0,h=0){let d=[],f=[],u=[],g=0,_=Math.PI*2,m=0,v=[],b=new p,y=(t-e)/i;for(let w=0;w<=s;w++){let x=[],T=w/s,A=T*(t-e)+e;for(let E=0;E<=r;E++){let P=E/r*_+g,I=Math.sin(P),k=Math.cos(P);d.push(A*I+o,-T*i+i+l,A*k+h),b.set(I,y,k).normalize(),u.push(b.x,b.y,b.z),x.push(m++)}v.push(x)}for(let w=0;w<r;w++)for(let x=0;x<s;x++){let T=v[x][w],A=v[x+1][w],E=v[x+1][w+1],C=v[x][w+1];f.push(T,A,C),f.push(A,E,C)}if(e!==0&&n){let w=xe.createDisc(e,i,r,!0,m,o,l,h);d.push(...w.vertices),u.push(...w.normals),f.push(...w.indices)}if(t!==0&&a){let w=xe.createDisc(t,0,r,!1,m+(n?1+2*r:0),o,l,h);d.push(...w.vertices),u.push(...w.normals),f.push(...w.indices)}return new xe({vertices:d,normals:u,indices:f})}static createCube(e=1,t=1,i=1,r=0,s=0,n=0){let a=e*.5+r,o=t*.5+s,l=i*.5+n;return new xe({vertices:[-a,-o,l,a,-o,-l,a,-o,l,-a,-o,l,-a,-o,-l,a,-o,-l,-a,o,l,a,o,l,a,o,-l,-a,o,l,a,o,-l,-a,o,-l,-a,-o,l,a,-o,l,-a,o,l,-a,o,l,a,-o,l,a,o,l,-a,-o,-l,-a,o,-l,a,-o,-l,-a,o,-l,a,o,-l,a,-o,-l,a,-o,l,a,-o,-l,a,o,l,a,o,l,a,-o,-l,a,o,-l,-a,-o,l,-a,o,l,-a,-o,-l,-a,o,l,-a,o,-l,-a,-o,-l]})}static createArrow(e=0,t=2.1,i=-15){return new xe({vertices:[0,t,0,7,0,6,0,0,i,0,0,e,7,0,6,0,t,0,-7,0,6,0,0,e,0,t,0,-7,0,6,0,t,0,0,0,i,-7,0,6,0,0,i,0,0,e,0,0,e,0,0,i,7,0,6]})}static async loadObj(e){return(await fetch(e,{mode:"cors"}).then(i=>i.text()).then(i=>Da(ka(i))).catch(()=>[])).geometries.map(({data:{vertices:i,normals:r,textures:s}})=>new xe({vertices:i,normals:r,texCoords:s}))}}class bi{constructor(e){this.__id=bi.__counter__++,this._name=e||`nonameNode:${this.__id}`,this.topNode=this,this._dictionary={},this._dictionary[this._name]=this,this.childNodes=[],this.parentNode=null}get name(){return this._name}addNode(e){this.parentNode==null?e.topNode=this:e.topNode=this.topNode,e.parentNode=this,e._dictionary=this.topNode._dictionary,this.childNodes.push(e),this.topNode._dictionary[e.name]=e}destroy(){for(let e=0;e<this.childNodes.length;e++)this.childNodes[e].destroy();this._clear()}getNodeByName(e){return this._dictionary[e]}_clear(){this.parentNode=null,this.topNode=this,this.childNodes.length=0}isEqual(e){return e.__id===this.__id}}bi.__counter__=0;class Oa extends bi{constructor(e){super(e),this.childNodes=[],this.renderer=null,this.drawMode=0,this.show=!0,this._isActive=!0,this.lightEnabled=!1,this._lights=[],this._lightsNames=[],this._lightsPositions=[],this._lightsParamsv=[],this._lightsParamsf=[],this.entityCollections=[],this._pickingId=-1}addNode(e){super.addNode(e),this.renderer&&e.assign(this.renderer)}assign(e){this.renderer=e,this._pickingId=e.addPickingCallback(this,this._entityCollectionPickingCallback),this.initialize()}initialize(){if(this.renderer&&this.renderer.isInitialized()){for(let e=0;e<this.entityCollections.length;e++)this.entityCollections[e].bindRenderNode(this);this.init()}}init(){}onremove(){}remove(){let e=this.renderer,t=this.name;if(e){e.renderNodes[t]&&e.renderNodes[t].isEqual(this)&&(e.renderNodes[t]=null,delete e.renderNodes[t]);for(let i=0;i<e._renderNodesArr.length;i++)if(e._renderNodesArr[i].isEqual(this)){e._renderNodesArr.splice(i,1);break}e.removePickingCallback(this._pickingId),this._pickingId=-1,this.onremove&&this.onremove()}}addEntityCollection(e,t){return e.addTo(this,t),this}removeEntityCollection(e){e.remove()}addLight(e){return e.addTo(this),this}getLightByName(e){let t=this._lightsNames.indexOf(e);return this._lights[t]}removeLight(e){e.remove()}preDrawNode(){this._isActive&&this._preDrawNodes()}drawNode(){this._isActive&&this._drawNodes()}isActive(){return this._isActive}setActive(e){this._isActive=e,this.renderer&&(this._isActive&&this._pickingId===-1?this._pickingId=this.renderer.addPickingCallback(this,this._entityCollectionPickingCallback):!this._isActive&&this._pickingId!==-1&&(this.renderer.removePickingCallback(this._pickingId),this._pickingId=-1));for(let t=0;t<this.childNodes.length;t++)this.childNodes[t].setActive(e)}setDrawMode(e){this.drawMode=e;for(let t=0;t<this.childNodes.length;t++)this.childNodes[t].setDrawMode(e)}transformLights(){for(let e=0;e<this._lights.length;e++){let t=e*3,i;i=this._lights[e]._position,this._lightsPositions[t]=i.x,this._lightsPositions[t+1]=i.y,this._lightsPositions[t+2]=i.z}}updateBillboardsTexCoords(){for(let e=0;e<this.entityCollections.length;e++)this.entityCollections[e].billboardHandler.refreshTexCoordsArr()}frame(){}preFrame(){}_preDrawNodes(){for(let e=0;e<this.childNodes.length;e++)this.childNodes[e]._isActive&&this.childNodes[e]._preDrawNodes();this.show&&(this.preFrame(),this.drawEntityCollections(this.entityCollections))}_drawNodes(){for(let e=0;e<this.childNodes.length;e++)this.childNodes[e]._isActive&&this.childNodes[e]._drawNodes();this.show&&this.frame()}drawEntityCollections(e){this.renderer.enqueueEntityCollectionsToDraw(e)}drawPickingEntityCollections(e){if(e.length){let t=e.length;for(;t--;)e[t]._fadingOpacity&&e[t].billboardHandler.drawPicking();for(t=e.length;t--;)e[t]._fadingOpacity&&e[t].geoObjectHandler.drawPicking();for(t=e.length;t--;)e[t]._fadingOpacity&&e[t].labelHandler.drawPicking();for(t=e.length;t--;)e[t]._fadingOpacity&&e[t].rayHandler.drawPicking();for(t=e.length;t--;)e[t]._visibility&&e[t].polylineHandler.drawPicking();for(t=e.length;t--;)e[t]._visibility&&e[t].stripHandler.drawPicking()}}_entityCollectionPickingCallback(){this.drawPickingEntityCollections(this.entityCollections)}}class Va{constructor(){this._container=document.createElement("div"),this._container.classList.add("ogConsole"),this._container.style.display="none",document.body&&document.body.appendChild(this._container),this._visibility=!1}getVisibility(){return this._visibility}setVisibility(e){this._visibility!=e&&(this._visibility=e,this._visibility?this.show():this.hide())}show(){this._container.parentNode||document.body&&document.body.appendChild(this._container),this._container.style.display="block",this._visibility=!0}hide(){this._container.style.display="none",this._visibility=!1}logErr(e){let t=document.createElement("div");t.classList.add("ogConsole-text"),t.classList.add("ogConsole-error"),t.innerHTML="error: "+e,console.trace(t.innerHTML),this._container.appendChild(t),this.show()}logWrn(e){let t=document.createElement("div");t.classList.add("ogConsole-text"),t.classList.add("ogConsole-warning"),t.innerHTML="warning: "+e,console.trace(t.innerHTML),this._container.appendChild(t),this.show()}log(e){let t=document.createElement("div");t.classList.add("ogConsole-text"),t.innerHTML=e,console.trace(e),this._container.appendChild(t),this.show()}}const He=new Va;let Ut=["FLOAT","DOUBLE","BOOL","INT","UINT","VEC2","VEC3","VEC4","DVEC2","DVEC3","DVEC4","BVEC2","BVEC3","BVEC4","IVEC2","IVEC3","IVEC4","UVEC2","UVEC3","UVEC4","MAT2","DMAT2","MAT3","DMAT3","MAT4","DMAT4","MAT2X3","MAT2X4","MAT3X2","MAT3X4","MAT4X2","MAT4X3","DMAT2X3","DMAT2X4","DMAT3X2","DMAT3X4","DMAT4X2","DMAT4X3","SAMPLER1D","SAMPLER2D","SAMPLER3D","SAMPLERCUBE","SAMPLER2DSHADOW","SAMPLER2DARRAY","INTXX","FLOATXX"];const me={};for(let c=0;c<Ut.length;c++)me[Ut[c]]=c;const tr={};for(let c=0;c<Ut.length;c++)tr[Ut[c].toLowerCase()]=me[Ut[c]];const ye={u:[],a:[]};ye.u[me.MAT4]=function(c,e){c.gl.uniformMatrix4fv(e._pName,!1,e.value)},ye.u[me.MAT3]=function(c,e){c.gl.uniformMatrix3fv(e._pName,!1,e.value)},ye.u[me.FLOAT]=function(c,e){c.gl.uniform1f(e._pName,e.value)},ye.u[me.INT]=function(c,e){c.gl.uniform1i(e._pName,e.value)},ye.u[me.VEC2]=function(c,e){c.gl.uniform2fv(e._pName,e.value)},ye.u[me.VEC3]=function(c,e){c.gl.uniform3fv(e._pName,e.value)},ye.u[me.VEC4]=function(c,e){c.gl.uniform4fv(e._pName,e.value)},ye.u[me.SAMPLER2D]=function(c,e){let t=c.gl;t.activeTexture(t.TEXTURE0+c._textureID),t.bindTexture(t.TEXTURE_2D,e.value),t.uniform1i(e._pName,c._textureID),c._textureID++},ye.u[me.SAMPLERCUBE]=function(c,e){let t=c.gl;t.activeTexture(t.TEXTURE0+c._textureID),t.bindTexture(t.TEXTURE_CUBE_MAP,e.value),t.uniform1i(e._pName,c._textureID),c._textureID++},ye.u[me.SAMPLER2DARRAY]=function(c,e){let t=e.value,i=c.gl,r=t.length,s=new Int32Array(r);for(let n=0;n<r;n++)i.activeTexture(i.TEXTURE0+c._textureID+n),i.bindTexture(i.TEXTURE_2D,t[n]),s[n]=n;i.uniform1iv(e._pName,s)},ye.u[me.INTXX]=function(c,e){c.gl.uniform1iv(e._pName,e.value)},ye.u[me.FLOATXX]=function(c,e){c.gl.uniform1fv(e._pName,e.value)},ye.a[me.FLOAT]=function(c,e){c.gl.vertexAttrib1f(e._pName,e.value)},ye.a[me.VEC2]=function(c,e){c.gl.vertexAttrib2fv(e._pName,e.value)},ye.a[me.VEC3]=function(c,e){c.gl.vertexAttrib3fv(e._pName,e.value)};const Ua=["BYTE","SHORT","UNSIGNED_BYTE","UNSIGNED_SHORT","FLOAT","HALF_FLOAT"];class G{constructor(e,t){this.name=e,this._attributes={};for(let i in t.attributes)typeof t.attributes[i]=="string"||typeof t.attributes[i]=="number"?this._attributes[i]={type:t.attributes[i]}:this._attributes[i]=t.attributes[i];this._uniforms={};for(let i in t.uniforms)typeof t.uniforms[i]=="string"||typeof t.uniforms[i]=="number"?this._uniforms[i]={type:t.uniforms[i]}:this._uniforms[i]=t.uniforms[i];this.vertexShader=t.vertexShader,this.fragmentShader=t.fragmentShader,this.gl=null,this._variables={},this._p=null,this._textureID=0,this._attribArrays=[],this._attribDivisor=[],this.attributes={},this.uniforms={},this.vertexAttribDivisor=null,this.drawElementsInstanced=null}static bindBuffer(e,t){let i=e.gl;i&&(i.bindBuffer(i.ARRAY_BUFFER,t.value),i.vertexAttribPointer(t._pName,t.value.itemSize,t.itemType,t.normalized,0,0))}use(){this.gl&&this.gl.useProgram(this._p)}set(e){this._textureID=0;for(let t in e)this._variables[t].value=e[t],this._variables[t].func(this,this._variables[t])}apply(){this._textureID=0;let e=this._variables;for(let t in e)e[t].func(this,e[t])}drawIndexBuffer(e,t){let i=this.gl;i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,t),i.drawElements(e,t.numItems,i.UNSIGNED_SHORT,0)}drawArrays(e,t){this.gl.drawArrays(e,0,t)}_getShaderCompileStatus(e,t){return this.gl?(this.gl.shaderSource(e,t),this.gl.compileShader(e),this.gl.getShaderParameter(e,this.gl.COMPILE_STATUS)?!0:(He.logErr(`Shader program "${this.name}":${this.gl.getShaderInfoLog(e)}.`),!1)):!1}_createVertexShader(e){if(!this.gl)return;let t=this.gl.createShader(this.gl.VERTEX_SHADER);if(t&&this._getShaderCompileStatus(t,e))return t}_createFragmentShader(e){if(!this.gl)return;let t=this.gl.createShader(this.gl.FRAGMENT_SHADER);if(t&&this._getShaderCompileStatus(t,e))return t}disableAttribArrays(){let e=this.gl,t=this._attribArrays;for(let i=0,r=t.length;i<r;i++)e.disableVertexAttribArray(t[i]),this.vertexAttribDivisor(t[i],0)}enableAttribArrays(){let e=this.gl,t=this._attribArrays,i=this._attribDivisor;for(let r=0,s=t.length;r<s;r++)e.enableVertexAttribArray(t[r]),this.vertexAttribDivisor(t[r],i[r])}delete(){this.gl&&this.gl.deleteProgram(this._p)}createProgram(e){if(this.gl=e,this._p=this.gl.createProgram(),!this._p)return;let t=this._createFragmentShader(this.fragmentShader),i=this._createVertexShader(this.vertexShader);if(!(!t||!i)){if(e.attachShader(this._p,t),e.attachShader(this._p,i),e.linkProgram(this._p),!this.drawElementsInstanced)if(e.drawElementsInstanced)this.drawElementsInstanced=e.drawElementsInstanced.bind(e);else{let r=e.getExtension("ANGLE_instanced_arrays");r&&(this.drawElementsInstanced=r.drawElementsInstancedANGLE.bind(r))}if(!this.vertexAttribDivisor)if(e.vertexAttribDivisor)this.vertexAttribDivisor=e.vertexAttribDivisor.bind(e);else{let r=e.getExtension("ANGLE_instanced_arrays");r&&(this.vertexAttribDivisor=r.vertexAttribDivisorANGLE.bind(r))}if(!e.getProgramParameter(this._p,e.LINK_STATUS)){He.logErr(`Shader program "${this.name}": initialization failed. ${e.getProgramInfoLog(this._p)}.`),e.deleteProgram(this._p);return}this.use();for(let r in this._attributes){this._variables[r]=this._attributes[r],this._attributes[r].func=G.bindBuffer;let s=this._attributes[r].itemType,n=s?s.trim().toUpperCase():"FLOAT";if(Ua.indexOf(n)==-1?(He.logErr(`Shader program "${this.name}": attribute '${r}', item type '${this._attributes[r].itemType}' not exists.`),this._attributes[r].itemType=e.FLOAT):this._attributes[r].itemType=e[n],this._attributes[r].normalized=this._attributes[r].normalized||!1,this._attributes[r].divisor=this._attributes[r].divisor||0,this._p[r]=e.getAttribLocation(this._p,r),this._p[r]==null){He.logErr(`Shader program "${this.name}": attribute '${r}' not exists.`),e.deleteProgram(this._p);return}let a=this._attributes[r].type;typeof a=="string"&&(a=tr[a.trim().toLowerCase()]);let o=this._attributes[r].divisor;if(a===me.MAT4){let l=this._p[r];this._attribArrays.push(l,l+1,l+2,l+3),this._attribDivisor.push(o,o,o,o)}else this._attribArrays.push(this._p[r]),this._attribDivisor.push(o);e.enableVertexAttribArray(this._p[r]),this._attributes[r]._pName=this._p[r],this.attributes[r]=this._p[r]}for(let r in this._uniforms){if(typeof this._uniforms[r].type=="string"){let s=this._uniforms[r].type;this._uniforms[r].func=ye.u[tr[s.trim().toLowerCase()]]}else this._uniforms[r].func=ye.u[this._uniforms[r].type];if(this._variables[r]=this._uniforms[r],this._p[r]=e.getUniformLocation(this._p,r),this._p[r]==null){He.logErr(`Shader program "${this.name}": uniform '${r}' not exists.`),e.deleteProgram(this._p);return}this._uniforms[r]._pName=this._p[r],this.uniforms[r]=this._p[r]}e.detachShader(this._p,t),e.detachShader(this._p,i),e.deleteShader(t),e.deleteShader(i)}}}const rs=`vec2 project(vec4 p) {
|
|
208
208
|
return (0.5 * p.xyz / p.w + 0.5).xy * viewport;
|
|
209
209
|
}`,ss=`mat2 rotate2d(float angle) {
|
|
210
210
|
return mat2(cos(angle), -sin(angle),
|
|
@@ -361,7 +361,7 @@
|
|
|
361
361
|
if(color.a < 0.1)
|
|
362
362
|
discard;
|
|
363
363
|
gl_FragColor = color * v_rgba;
|
|
364
|
-
}`})}const ns=0,as=1,os=2,ls=3,hs=4,cs=5,ds=6,fs=7;class jt{constructor(e){this.__id=jt.__counter__++,this.pickingEnabled=!0,this._entityCollection=e,this._renderer=null,this._billboards=[],this._positionHighBuffer=null,this._positionLowBuffer=null,this._sizeBuffer=null,this._offsetBuffer=null,this._rgbaBuffer=null,this._rotationBuffer=null,this._texCoordBuffer=null,this._vertexBuffer=null,this._pickingColorBuffer=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._buffersUpdateCallbacks=[],this._buffersUpdateCallbacks[ns]=this.createPickingColorBuffer,this._buffersUpdateCallbacks[as]=this.createPositionBuffer,this._buffersUpdateCallbacks[os]=this.createSizeBuffer,this._buffersUpdateCallbacks[ls]=this.createOffsetBuffer,this._buffersUpdateCallbacks[hs]=this.createRgbaBuffer,this._buffersUpdateCallbacks[cs]=this.createRotationBuffer,this._buffersUpdateCallbacks[ds]=this.createTexCoordBuffer,this._buffersUpdateCallbacks[fs]=this.createVertexBuffer,this._changedBuffers=new Array(this._buffersUpdateCallbacks.length)}isEqual(e){return e&&e.__id===this.__id}static concArr(e,t){for(let i=0;i<t.length;i++)e.push(t[i])}initProgram(){this._renderer&&this._renderer.handler&&(this._renderer.handler.programs.billboard||this._renderer.handler.addProgram(ja()),this._renderer.handler.programs.billboardPicking||this._renderer.handler.addProgram(Ga()))}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=ae}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=t*24;this._rgbaArr=ee(this._rgbaArr,i,24),i=t*18,this._positionHighArr=ee(this._positionHighArr,i,18),this._positionLowArr=ee(this._positionLowArr,i,18),this._offsetArr=ee(this._offsetArr,i,18),this._pickingColorArr=ee(this._pickingColorArr,i,18),i=t*12,this._vertexArr=ee(this._vertexArr,i,12),this._sizeArr=ee(this._sizeArr,i,12),this._texCoordArr=ee(this._texCoordArr,i,12),i=t*6,this._rotationArr=ee(this._rotationArr,i,6),this.reindexBillboardsArray(t),this.refresh(),e._handlerIndex=-1,e._handler=null,e._isReady=!1,e._lockId=ae}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=e*18,s=this._positionHighArr,n=t.x,a=t.y,o=t.z;s[r]=n,s[r+1]=a,s[r+2]=o,s[r+3]=n,s[r+4]=a,s[r+5]=o,s[r+6]=n,s[r+7]=a,s[r+8]=o,s[r+9]=n,s[r+10]=a,s[r+11]=o,s[r+12]=n,s[r+13]=a,s[r+14]=o,s[r+15]=n,s[r+16]=a,s[r+17]=o,s=this._positionLowArr,n=i.x,a=i.y,o=i.z,s[r]=n,s[r+1]=a,s[r+2]=o,s[r+3]=n,s[r+4]=a,s[r+5]=o,s[r+6]=n,s[r+7]=a,s[r+8]=o,s[r+9]=n,s[r+10]=a,s[r+11]=o,s[r+12]=n,s[r+13]=a,s[r+14]=o,s[r+15]=n,s[r+16]=a,s[r+17]=o,this._changedBuffers[as]=!0}setPickingColorArr(e,t){let i=e*18,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[ns]=!0}setSizeArr(e,t,i){let r=e*12,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[os]=!0}setOffsetArr(e,t){let i=e*18,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[ls]=!0}setRgbaArr(e,t){let i=e*24,r=this._rgbaArr,s=t.x,n=t.y,a=t.z,o=t.w;r[i]=s,r[i+1]=n,r[i+2]=a,r[i+3]=o,r[i+4]=s,r[i+5]=n,r[i+6]=a,r[i+7]=o,r[i+8]=s,r[i+9]=n,r[i+10]=a,r[i+11]=o,r[i+12]=s,r[i+13]=n,r[i+14]=a,r[i+15]=o,r[i+16]=s,r[i+17]=n,r[i+18]=a,r[i+19]=o,r[i+20]=s,r[i+21]=n,r[i+22]=a,r[i+23]=o,this._changedBuffers[hs]=!0}setRotationArr(e,t){let i=e*6,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[cs]=!0}setTexCoordArr(e,t){let i=e*12,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[ds]=!0}setVisibility(e,t){let i;t?i=[-.5,.5,-.5,-.5,.5,-.5,.5,-.5,.5,.5,-.5,.5]:i=[0,0,0,0,0,0,0,0,0,0,0,0],this.setVertexArr(e,i)}setVertexArr(e,t){let i=e*12,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[fs]=!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(){}}jt.__counter__=0;class Ya extends jt{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=Z(this._vertexArr,[-.5,.5,-.5,-.5,.5,-.5,.5,-.5,.5,.5,-.5,.5]):this._vertexArr=Z(this._vertexArr,[0,0,0,0,0,0,0,0,0,0,0,0]),this._texCoordArr=Z(this._texCoordArr,[0,0,0,0,0,0,0,0,0,0,0,0]);let t=e._positionHigh.x,i=e._positionHigh.y,r=e._positionHigh.z,s;this._positionHighArr=Z(this._positionHighArr,[t,i,r,t,i,r,t,i,r,t,i,r,t,i,r,t,i,r]),t=e._positionLow.x,i=e._positionLow.y,r=e._positionLow.z,this._positionLowArr=Z(this._positionLowArr,[t,i,r,t,i,r,t,i,r,t,i,r,t,i,r,t,i,r]),t=e._width,i=e._height,this._sizeArr=Z(this._sizeArr,[t,i,t,i,t,i,t,i,t,i,t,i]),t=e._offset.x,i=e._offset.y,r=e._offset.z,this._offsetArr=Z(this._offsetArr,[t,i,r,t,i,r,t,i,r,t,i,r,t,i,r,t,i,r]),t=e._color.x,i=e._color.y,r=e._color.z,s=e._color.w,this._rgbaArr=Z(this._rgbaArr,[t,i,r,s,t,i,r,s,t,i,r,s,t,i,r,s,t,i,r,s,t,i,r,s]),t=e._rotation,this._rotationArr=Z(this._rotationArr,[t,t,t,t,t,t]),t=e._entity._pickingColor.x/255,i=e._entity._pickingColor.y/255,r=e._entity._pickingColor.z/255,this._pickingColorArr=Z(this._pickingColorArr,[t,i,r,t,i,r,t,i,r,t,i,r,t,i,r,t,i,r])}get billboards(){return this._billboards}refreshTexCoordsArr(){if(this._entityCollection&&this._renderer){let t=this._renderer.billboardsTextureAtlas;for(let i=0;i<this._billboards.length;i++){let r=this._billboards[i],s=r.getImage();if(s){let n=t.get(s.__nodeIndex);n&&this.setTexCoordArr(r._handlerIndex,n.texCoords)}}}}}const qa=()=>new G("geo_object",{uniforms:{viewMatrix:"mat4",projectionMatrix:"mat4",uScaleByDistance:"vec3",eyePositionHigh:"vec3",eyePositionLow:"vec3",lightsPositions:"vec3",lightsParamsv:"vec3",lightsParamsf:"float",uTexture:"sampler2d",uUseTexture:"float"},attributes:{aVertexPosition:"vec3",aVertexNormal:"vec3",aTexCoord:"vec2",aPositionHigh:{type:"vec3",divisor:1},aPositionLow:{type:"vec3",divisor:1},aDirection:{type:"vec3",divisor:1},aPitchRoll:{type:"vec2",divisor:1},aColor:{type:"vec4",divisor:1},aScale:{type:"float",divisor:1},aDispose:{type:"float",divisor:1}},vertexShader:`precision highp float;
|
|
364
|
+
}`})}const ns=0,as=1,os=2,ls=3,hs=4,cs=5,ds=6,fs=7;class Gt{constructor(e){this.__id=Gt.__counter__++,this.pickingEnabled=!0,this._entityCollection=e,this._renderer=null,this._billboards=[],this._positionHighBuffer=null,this._positionLowBuffer=null,this._sizeBuffer=null,this._offsetBuffer=null,this._rgbaBuffer=null,this._rotationBuffer=null,this._texCoordBuffer=null,this._vertexBuffer=null,this._pickingColorBuffer=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._buffersUpdateCallbacks=[],this._buffersUpdateCallbacks[ns]=this.createPickingColorBuffer,this._buffersUpdateCallbacks[as]=this.createPositionBuffer,this._buffersUpdateCallbacks[os]=this.createSizeBuffer,this._buffersUpdateCallbacks[ls]=this.createOffsetBuffer,this._buffersUpdateCallbacks[hs]=this.createRgbaBuffer,this._buffersUpdateCallbacks[cs]=this.createRotationBuffer,this._buffersUpdateCallbacks[ds]=this.createTexCoordBuffer,this._buffersUpdateCallbacks[fs]=this.createVertexBuffer,this._changedBuffers=new Array(this._buffersUpdateCallbacks.length)}isEqual(e){return e&&e.__id===this.__id}static concArr(e,t){for(let i=0;i<t.length;i++)e.push(t[i])}initProgram(){this._renderer&&this._renderer.handler&&(this._renderer.handler.programs.billboard||this._renderer.handler.addProgram(ja()),this._renderer.handler.programs.billboardPicking||this._renderer.handler.addProgram(Ga()))}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=ae}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=t*24;this._rgbaArr=ee(this._rgbaArr,i,24),i=t*18,this._positionHighArr=ee(this._positionHighArr,i,18),this._positionLowArr=ee(this._positionLowArr,i,18),this._offsetArr=ee(this._offsetArr,i,18),this._pickingColorArr=ee(this._pickingColorArr,i,18),i=t*12,this._vertexArr=ee(this._vertexArr,i,12),this._sizeArr=ee(this._sizeArr,i,12),this._texCoordArr=ee(this._texCoordArr,i,12),i=t*6,this._rotationArr=ee(this._rotationArr,i,6),this.reindexBillboardsArray(t),this.refresh(),e._handlerIndex=-1,e._handler=null,e._isReady=!1,e._lockId=ae}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=e*18,s=this._positionHighArr,n=t.x,a=t.y,o=t.z;s[r]=n,s[r+1]=a,s[r+2]=o,s[r+3]=n,s[r+4]=a,s[r+5]=o,s[r+6]=n,s[r+7]=a,s[r+8]=o,s[r+9]=n,s[r+10]=a,s[r+11]=o,s[r+12]=n,s[r+13]=a,s[r+14]=o,s[r+15]=n,s[r+16]=a,s[r+17]=o,s=this._positionLowArr,n=i.x,a=i.y,o=i.z,s[r]=n,s[r+1]=a,s[r+2]=o,s[r+3]=n,s[r+4]=a,s[r+5]=o,s[r+6]=n,s[r+7]=a,s[r+8]=o,s[r+9]=n,s[r+10]=a,s[r+11]=o,s[r+12]=n,s[r+13]=a,s[r+14]=o,s[r+15]=n,s[r+16]=a,s[r+17]=o,this._changedBuffers[as]=!0}setPickingColorArr(e,t){let i=e*18,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[ns]=!0}setSizeArr(e,t,i){let r=e*12,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[os]=!0}setOffsetArr(e,t){let i=e*18,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[ls]=!0}setRgbaArr(e,t){let i=e*24,r=this._rgbaArr,s=t.x,n=t.y,a=t.z,o=t.w;r[i]=s,r[i+1]=n,r[i+2]=a,r[i+3]=o,r[i+4]=s,r[i+5]=n,r[i+6]=a,r[i+7]=o,r[i+8]=s,r[i+9]=n,r[i+10]=a,r[i+11]=o,r[i+12]=s,r[i+13]=n,r[i+14]=a,r[i+15]=o,r[i+16]=s,r[i+17]=n,r[i+18]=a,r[i+19]=o,r[i+20]=s,r[i+21]=n,r[i+22]=a,r[i+23]=o,this._changedBuffers[hs]=!0}setRotationArr(e,t){let i=e*6,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[cs]=!0}setTexCoordArr(e,t){let i=e*12,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[ds]=!0}setVisibility(e,t){let i;t?i=[-.5,.5,-.5,-.5,.5,-.5,.5,-.5,.5,.5,-.5,.5]:i=[0,0,0,0,0,0,0,0,0,0,0,0],this.setVertexArr(e,i)}setVertexArr(e,t){let i=e*12,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[fs]=!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(){}}Gt.__counter__=0;class Ya extends Gt{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=Z(this._vertexArr,[-.5,.5,-.5,-.5,.5,-.5,.5,-.5,.5,.5,-.5,.5]):this._vertexArr=Z(this._vertexArr,[0,0,0,0,0,0,0,0,0,0,0,0]),this._texCoordArr=Z(this._texCoordArr,[0,0,0,0,0,0,0,0,0,0,0,0]);let t=e._positionHigh.x,i=e._positionHigh.y,r=e._positionHigh.z,s;this._positionHighArr=Z(this._positionHighArr,[t,i,r,t,i,r,t,i,r,t,i,r,t,i,r,t,i,r]),t=e._positionLow.x,i=e._positionLow.y,r=e._positionLow.z,this._positionLowArr=Z(this._positionLowArr,[t,i,r,t,i,r,t,i,r,t,i,r,t,i,r,t,i,r]),t=e._width,i=e._height,this._sizeArr=Z(this._sizeArr,[t,i,t,i,t,i,t,i,t,i,t,i]),t=e._offset.x,i=e._offset.y,r=e._offset.z,this._offsetArr=Z(this._offsetArr,[t,i,r,t,i,r,t,i,r,t,i,r,t,i,r,t,i,r]),t=e._color.x,i=e._color.y,r=e._color.z,s=e._color.w,this._rgbaArr=Z(this._rgbaArr,[t,i,r,s,t,i,r,s,t,i,r,s,t,i,r,s,t,i,r,s,t,i,r,s]),t=e._rotation,this._rotationArr=Z(this._rotationArr,[t,t,t,t,t,t]),t=e._entity._pickingColor.x/255,i=e._entity._pickingColor.y/255,r=e._entity._pickingColor.z/255,this._pickingColorArr=Z(this._pickingColorArr,[t,i,r,t,i,r,t,i,r,t,i,r,t,i,r,t,i,r])}get billboards(){return this._billboards}refreshTexCoordsArr(){if(this._entityCollection&&this._renderer){let t=this._renderer.billboardsTextureAtlas;for(let i=0;i<this._billboards.length;i++){let r=this._billboards[i],s=r.getImage();if(s){let n=t.get(s.__nodeIndex);n&&this.setTexCoordArr(r._handlerIndex,n.texCoords)}}}}}const qa=()=>new G("geo_object",{uniforms:{viewMatrix:"mat4",projectionMatrix:"mat4",uScaleByDistance:"vec3",eyePositionHigh:"vec3",eyePositionLow:"vec3",lightsPositions:"vec3",lightsParamsv:"vec3",lightsParamsf:"float",uTexture:"sampler2d",uUseTexture:"float"},attributes:{aVertexPosition:"vec3",aVertexNormal:"vec3",aTexCoord:"vec2",aPositionHigh:{type:"vec3",divisor:1},aPositionLow:{type:"vec3",divisor:1},aDirection:{type:"vec3",divisor:1},aPitchRoll:{type:"vec2",divisor:1},aColor:{type:"vec4",divisor:1},aScale:{type:"float",divisor:1},aDispose:{type:"float",divisor:1}},vertexShader:`precision highp float;
|
|
365
365
|
|
|
366
366
|
attribute vec3 aVertexPosition;
|
|
367
367
|
attribute vec3 aVertexNormal;
|
|
@@ -1057,7 +1057,7 @@
|
|
|
1057
1057
|
}
|
|
1058
1058
|
|
|
1059
1059
|
gl_FragColor = vec4(v_rgba.rgb, v_rgba.a);
|
|
1060
|
-
}`})}const io=0,ro=1,so=2,no=3,ao=4,oo=5,lo=6,ho=7,ys=8,bs=9,ws=10,Pt=-1,co=1;class fo extends jt{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[ys]=this.createFontIndexBuffer,this._buffersUpdateCallbacks[bs]=this.createOutlineBuffer,this._buffersUpdateCallbacks[ws]=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(Ja()):this._renderer.handler.addProgram(eo())),this._renderer.handler.programs.labelPicking||this._renderer.handler.addProgram(to()))}get labels(){return this._billboards}add(e){e._handler||(e._handler=this,this.assignFontAtlas(e),this.refresh())}updateFonts(){let e=[...this._billboards];this._billboards=[];for(let t=0;t<e.length;t++)this.assignFontAtlas(e[t])}_addLabelToArrays(e){this._renderer&&this._renderer.labelWorker.make({handler:this,label:e})}assignFontAtlas(e){this._entityCollection&&this._renderer?(e.assignFontAtlas(this._renderer.fontAtlas),this._addLabelToArrays(e)):this._billboards.push(e)}workerCallback(e,t){t._lockId!==ae&&t._handler&&this.isEqual(t._handler)&&(t._isReady=!0,t._lockId=ae,t._handlerIndex=this._billboards.length,this._billboards.push(t),this._vertexArr=Z(this._vertexArr,e.vertexArr),this._texCoordArr=Z(this._texCoordArr,e.texCoordArr),this._gliphParamArr=Z(this._gliphParamArr,e.gliphParamArr),this._positionHighArr=Z(this._positionHighArr,e.positionHighArr),this._positionLowArr=Z(this._positionLowArr,e.positionLowArr),this._sizeArr=Z(this._sizeArr,e.sizeArr),this._offsetArr=Z(this._offsetArr,e.offsetArr),this._rgbaArr=Z(this._rgbaArr,e.rgbaArr),this._rotationArr=Z(this._rotationArr,e.rotationArr),this._fontIndexArr=Z(this._fontIndexArr,e.fontIndexArr),this._outlineArr=Z(this._outlineArr,e.outlineArr),this._outlineColorArr=Z(this._outlineColorArr,e.outlineColorArr),this._pickingColorArr=Z(this._pickingColorArr,e.pickingColorArr),t.update(),this.refresh())}clear(){this._texCoordArr=null,this._gliphParamArr=null,this._vertexArr=null,this._positionHighArr=null,this._positionLowArr=null,this._sizeArr=null,this._offsetArr=null,this._rgbaArr=null,this._rotationArr=null,this._fontIndexArr=null,this._outlineArr=null,this._outlineColorArr=null,this._texCoordArr=new Float32Array([]),this._gliphParamArr=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._fontIndexArr=new Float32Array([]),this._outlineArr=new Float32Array([]),this._outlineColorArr=new Float32Array([]),this._removeBillboards(),this._deleteBuffers(),this.refresh()}_deleteBuffers(){if(this._renderer){let e=this._renderer.handler.gl;e.deleteBuffer(this._gliphParamBuffer),e.deleteBuffer(this._sizeBuffer),e.deleteBuffer(this._fontIndexBuffer),e.deleteBuffer(this._texCoordBuffer),e.deleteBuffer(this._outlineBuffer),e.deleteBuffer(this._outlineColorBuffer),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._gliphParamBuffer=null,this._sizeBuffer=null,this._fontIndexBuffer=null,this._texCoordBuffer=null,this._outlineBuffer=null,this._outlineColorBuffer=null,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}}_displayPASS(){let e=this._renderer,t=e.handler;t.programs.label.activate();let i=t.programs.label._program,r=i.attributes,s=i.uniforms,n=t.gl,a=this._entityCollection;n.disable(n.CULL_FACE),n.uniform1iv(s.fontTextureArr,e.fontAtlas.samplerArr),n.uniform4fv(s.sdfParamsArr,e.fontAtlas.sdfParamsArr),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.scaleByDistance,a.scaleByDistance),n.uniform1f(s.opacity,a._fadingOpacity),n.uniform1f(s.planetRadius,a.renderNode._planetRadius2||0),n.uniform2fv(s.viewport,[t.canvas.clientWidth,t.canvas.clientHeight]),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._gliphParamBuffer),n.vertexAttribPointer(r.a_gliphParam,this._gliphParamBuffer.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._sizeBuffer),n.vertexAttribPointer(r.a_size,this._sizeBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._rotationBuffer),n.vertexAttribPointer(r.a_rotation,this._rotationBuffer.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.bindBuffer(n.ARRAY_BUFFER,this._fontIndexBuffer),n.vertexAttribPointer(r.a_fontIndex,this._fontIndexBuffer.itemSize,n.FLOAT,!1,0,0),n.uniform1i(s.isOutlinePass,1),n.uniform1f(s.depthOffset,a.polygonOffsetUnits),n.bindBuffer(n.ARRAY_BUFFER,this._outlineColorBuffer),n.vertexAttribPointer(r.a_rgba,this._outlineColorBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._outlineBuffer),n.vertexAttribPointer(r.a_outline,this._outlineBuffer.itemSize,n.FLOAT,!1,0,0),n.drawArrays(n.TRIANGLES,0,this._vertexBuffer.numItems),n.depthFunc(n.EQUAL),n.uniform1i(s.isOutlinePass,0),n.uniform1f(s.depthOffset,a.polygonOffsetUnits),n.bindBuffer(n.ARRAY_BUFFER,this._rgbaBuffer),n.vertexAttribPointer(r.a_rgba,this._rgbaBuffer.itemSize,n.FLOAT,!1,0,0),n.drawArrays(n.TRIANGLES,0,this._vertexBuffer.numItems),n.depthFunc(n.LESS),n.enable(n.CULL_FACE)}_pickingPASS(){let e=this._renderer,t=e.handler;t.programs.labelPicking.activate();let i=t.programs.labelPicking._program,r=i.attributes,s=i.uniforms,n=t.gl,a=this._entityCollection,o=a.renderNode;n.disable(n.CULL_FACE),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.scaleByDistance,a.scaleByDistance),n.uniform1f(s.opacity,a._fadingOpacity),n.uniform1f(s.planetRadius,o._planetRadius2||0),n.uniform2fv(s.viewport,[t.canvas.clientWidth,t.canvas.clientHeight]),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._gliphParamBuffer),n.vertexAttribPointer(r.a_gliphParam,this._gliphParamBuffer.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._sizeBuffer),n.vertexAttribPointer(r.a_size,this._sizeBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._rotationBuffer),n.vertexAttribPointer(r.a_rotation,this._rotationBuffer.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.bindBuffer(n.ARRAY_BUFFER,this._pickingColorBuffer),n.vertexAttribPointer(r.a_rgba,this._pickingColorBuffer.itemSize,n.FLOAT,!1,0,0),n.uniform1f(s.depthOffset,a.polygonOffsetUnits),n.drawArrays(n.TRIANGLES,0,this._vertexBuffer.numItems),n.enable(n.CULL_FACE)}_removeBillboard(e){let t=e._handlerIndex;this._billboards.splice(t,1);let i=24*this._maxLetters,r=t*i;this._rgbaArr=ee(this._rgbaArr,r,i),this._outlineColorArr=ee(this._outlineColorArr,r,i),this._texCoordArr=ee(this._texCoordArr,r,i),this._gliphParamArr=ee(this._gliphParamArr,r,i),i=18*this._maxLetters,r=t*i,this._positionHighArr=ee(this._positionHighArr,r,i),this._positionLowArr=ee(this._positionLowArr,r,i),this._offsetArr=ee(this._offsetArr,r,i),this._pickingColorArr=ee(this._pickingColorArr,r,i),i=12*this._maxLetters,r=t*i,this._vertexArr=ee(this._vertexArr,r,i),i=6*this._maxLetters,r=t*i,this._sizeArr=ee(this._sizeArr,r,i),this._rotationArr=ee(this._rotationArr,r,i),this._fontIndexArr=ee(this._fontIndexArr,r,i),this._outlineArr=ee(this._outlineArr,r,i),this.reindexBillboardsArray(t),this.refresh(),e._handlerIndex=-1,e._handler=null,e._isReady=!1}setText(e,t,i,r,s=!1){t=t.normalize("NFKC");let n=this._renderer.fontAtlas.atlasesArr[i];if(!n)return;let a=e*24*this._maxLetters,o=this._texCoordArr,l=this._gliphParamArr,h=0,d=Math.min(this._maxLetters,t.length),f=0;s&&(f=co);let u=0,g=n.kernings;for(h=0;h<d;h++){let _=a+h*24,m=t[h],v=n.get(m.charCodeAt(0))||n.get(32);if(!v)continue;let b=v.texCoords,y=v.metrics;o[_]=b[0],o[_+1]=b[1],o[_+2]=u,o[_+3]=f,o[_+4]=b[2],o[_+5]=b[3],o[_+6]=u,o[_+7]=f,o[_+8]=b[4],o[_+9]=b[5],o[_+10]=u,o[_+11]=f,o[_+12]=b[6],o[_+13]=b[7],o[_+14]=u,o[_+15]=f,o[_+16]=b[8],o[_+17]=b[9],o[_+18]=u,o[_+19]=f,o[_+20]=b[10],o[_+21]=b[11],o[_+22]=u,o[_+23]=f,l[_]=y.nWidth,l[_+1]=y.nHeight,l[_+2]=y.nXOffset,l[_+3]=y.nYOffset,l[_+4]=y.nWidth,l[_+5]=y.nHeight,l[_+6]=y.nXOffset,l[_+7]=y.nYOffset,l[_+8]=y.nWidth,l[_+9]=y.nHeight,l[_+10]=y.nXOffset,l[_+11]=y.nYOffset,l[_+12]=y.nWidth,l[_+13]=y.nHeight,l[_+14]=y.nXOffset,l[_+15]=y.nYOffset,l[_+16]=y.nWidth,l[_+17]=y.nHeight,l[_+18]=y.nXOffset,l[_+19]=y.nYOffset,l[_+20]=y.nWidth,l[_+21]=y.nHeight,l[_+22]=y.nXOffset,l[_+23]=y.nYOffset;let w=g[m.charCodeAt(0)];if(w&&t[h+1]){let x=w[t[h+1].charCodeAt(0)];x?u+=y.nAdvance+x:u+=y.nAdvance}else u+=y.nAdvance}if(r===Ct.CENTER)for(u*=-.5,h=0;h<d;h++){let _=a+h*24;o[_+2]+=u,o[_+6]+=u,o[_+10]+=u,o[_+14]+=u,o[_+18]+=u,o[_+22]+=u}for(;h<this._maxLetters;h++){let _=a+h*24;o[_+3]=Pt,o[_+7]=Pt,o[_+11]=Pt,o[_+15]=Pt,o[_+19]=Pt,o[_+23]=Pt}this._changedBuffers[lo]=!0}setPositionArr(e,t,i){let r=e*18*this._maxLetters,s=this._positionHighArr,n=t.x,a=t.y,o=t.z,l=this._positionLowArr,h=i.x,d=i.y,f=i.z;for(let u=0;u<this._maxLetters;u++){let g=r+u*18;s[g]=n,s[g+1]=a,s[g+2]=o,s[g+3]=n,s[g+4]=a,s[g+5]=o,s[g+6]=n,s[g+7]=a,s[g+8]=o,s[g+9]=n,s[g+10]=a,s[g+11]=o,s[g+12]=n,s[g+13]=a,s[g+14]=o,s[g+15]=n,s[g+16]=a,s[g+17]=o,l[g]=h,l[g+1]=d,l[g+2]=f,l[g+3]=h,l[g+4]=d,l[g+5]=f,l[g+6]=h,l[g+7]=d,l[g+8]=f,l[g+9]=h,l[g+10]=d,l[g+11]=f,l[g+12]=h,l[g+13]=d,l[g+14]=f,l[g+15]=h,l[g+16]=d,l[g+17]=f}this._changedBuffers[ro]=!0}setPickingColorArr(e,t){let i=e*18*this._maxLetters,r=this._pickingColorArr,s=t.x/255,n=t.y/255,a=t.z/255;for(let o=0;o<this._maxLetters;o++){let l=i+o*18;r[l]=s,r[l+1]=n,r[l+2]=a,r[l+3]=s,r[l+4]=n,r[l+5]=a,r[l+6]=s,r[l+7]=n,r[l+8]=a,r[l+9]=s,r[l+10]=n,r[l+11]=a,r[l+12]=s,r[l+13]=n,r[l+14]=a,r[l+15]=s,r[l+16]=n,r[l+17]=a}this._changedBuffers[io]=!0}setSizeArr(e,t){let i=e*6*this._maxLetters,r=this._sizeArr;for(let s=0;s<this._maxLetters;s++){let n=i+s*6;r[n]=t,r[n+1]=t,r[n+2]=t,r[n+3]=t,r[n+4]=t,r[n+5]=t}this._changedBuffers[so]=!0}setOffsetArr(e,t){let i=e*18*this._maxLetters,r=this._offsetArr,s=t.x,n=t.y,a=t.z;for(let o=0;o<this._maxLetters;o++){let l=i+o*18;r[l]=s,r[l+1]=n,r[l+2]=a,r[l+3]=s,r[l+4]=n,r[l+5]=a,r[l+6]=s,r[l+7]=n,r[l+8]=a,r[l+9]=s,r[l+10]=n,r[l+11]=a,r[l+12]=s,r[l+13]=n,r[l+14]=a,r[l+15]=s,r[l+16]=n,r[l+17]=a}this._changedBuffers[no]=!0}setRgbaArr(e,t){let i=e*24*this._maxLetters,r=this._rgbaArr,s=t.x,n=t.y,a=t.z,o=t.w;for(let l=0;l<this._maxLetters;l++){let h=i+l*24;r[h]=s,r[h+1]=n,r[h+2]=a,r[h+3]=o,r[h+4]=s,r[h+5]=n,r[h+6]=a,r[h+7]=o,r[h+8]=s,r[h+9]=n,r[h+10]=a,r[h+11]=o,r[h+12]=s,r[h+13]=n,r[h+14]=a,r[h+15]=o,r[h+16]=s,r[h+17]=n,r[h+18]=a,r[h+19]=o,r[h+20]=s,r[h+21]=n,r[h+22]=a,r[h+23]=o}this._changedBuffers[ao]=!0}setOutlineColorArr(e,t){let i=e*24*this._maxLetters,r=this._outlineColorArr,s=t.x,n=t.y,a=t.z,o=t.w;for(let l=0;l<this._maxLetters;l++){let h=i+l*24;r[h]=s,r[h+1]=n,r[h+2]=a,r[h+3]=o,r[h+4]=s,r[h+5]=n,r[h+6]=a,r[h+7]=o,r[h+8]=s,r[h+9]=n,r[h+10]=a,r[h+11]=o,r[h+12]=s,r[h+13]=n,r[h+14]=a,r[h+15]=o,r[h+16]=s,r[h+17]=n,r[h+18]=a,r[h+19]=o,r[h+20]=s,r[h+21]=n,r[h+22]=a,r[h+23]=o}this._changedBuffers[ws]=!0}setOutlineArr(e,t){let i=e*6*this._maxLetters,r=this._outlineArr;for(let s=0;s<this._maxLetters;s++){let n=i+s*6;r[n]=t,r[n+1]=t,r[n+2]=t,r[n+3]=t,r[n+4]=t,r[n+5]=t}this._changedBuffers[bs]=!0}setRotationArr(e,t){let i=e*6*this._maxLetters,r=this._rotationArr;for(let s=0;s<this._maxLetters;s++){let n=i+s*6;r[n]=t,r[n+1]=t,r[n+2]=t,r[n+3]=t,r[n+4]=t,r[n+5]=t}this._changedBuffers[oo]=!0}setVisibility(e,t){let i;t?i=[0,0,0,-1,1,-1,1,-1,1,0,0,0]:i=[0,0,0,0,0,0,0,0,0,0,0,0],this.setVertexArr(e,i)}setVertexArr(e,t){let i=e*12*this._maxLetters,r=this._vertexArr;for(let s=0;s<this._maxLetters;s++){let n=i+s*12;r[n]=t[0],r[n+1]=t[1],r[n+2]=t[2],r[n+3]=t[3],r[n+4]=t[4],r[n+5]=t[5],r[n+6]=t[6],r[n+7]=t[7],r[n+8]=t[8],r[n+9]=t[9],r[n+10]=t[10],r[n+11]=t[11]}this._changedBuffers[ho]=!0}setFontIndexArr(e,t){let i=e*6*this._maxLetters,r=this._fontIndexArr;for(let s=0;s<this._maxLetters;s++){let n=i+s*6;r[n]=t,r[n+1]=t,r[n+2]=t,r[n+3]=t,r[n+4]=t,r[n+5]=t}this._changedBuffers[ys]=!0}createSizeBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._sizeBuffer),this._sizeBuffer=e.createArrayBuffer(this._sizeArr,1,this._sizeArr.length)}createFontIndexBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._fontIndexBuffer),this._fontIndexBuffer=e.createArrayBuffer(this._fontIndexArr,1,this._fontIndexArr.length)}createTexCoordBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._texCoordBuffer),this._texCoordBuffer=e.createArrayBuffer(this._texCoordArr,4,this._texCoordArr.length/4),e.gl.deleteBuffer(this._gliphParamBuffer),this._gliphParamBuffer=e.createArrayBuffer(this._gliphParamArr,4,this._gliphParamArr.length/4)}createOutlineBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._outlineBuffer),this._outlineBuffer=e.createArrayBuffer(this._outlineArr,1,this._outlineArr.length)}createOutlineColorBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._outlineColorBuffer),this._outlineColorBuffer=e.createArrayBuffer(this._outlineColorArr,4,this._outlineColorArr.length/4)}setMaxLetters(e){this._maxLetters=e}}function uo(){return new G("pointCloud",{uniforms:{projectionViewMatrix:"mat4",opacity:"float",pointSize:"float"},attributes:{coordinates:"vec3",colors:"vec3"},vertexShader:`attribute vec3 coordinates;
|
|
1060
|
+
}`})}const io=0,ro=1,so=2,no=3,ao=4,oo=5,lo=6,ho=7,ys=8,bs=9,ws=10,Pt=-1,co=1;class fo extends Gt{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[ys]=this.createFontIndexBuffer,this._buffersUpdateCallbacks[bs]=this.createOutlineBuffer,this._buffersUpdateCallbacks[ws]=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(Ja()):this._renderer.handler.addProgram(eo())),this._renderer.handler.programs.labelPicking||this._renderer.handler.addProgram(to()))}get labels(){return this._billboards}add(e){e._handler||(e._handler=this,this.assignFontAtlas(e),this.refresh())}updateFonts(){let e=[...this._billboards];this._billboards=[];for(let t=0;t<e.length;t++)this.assignFontAtlas(e[t])}_addLabelToArrays(e){this._renderer&&this._renderer.labelWorker.make({handler:this,label:e})}assignFontAtlas(e){this._entityCollection&&this._renderer?(e.assignFontAtlas(this._renderer.fontAtlas),this._addLabelToArrays(e)):this._billboards.push(e)}workerCallback(e,t){t._lockId!==ae&&t._handler&&this.isEqual(t._handler)&&(t._isReady=!0,t._lockId=ae,t._handlerIndex=this._billboards.length,this._billboards.push(t),this._vertexArr=Z(this._vertexArr,e.vertexArr),this._texCoordArr=Z(this._texCoordArr,e.texCoordArr),this._gliphParamArr=Z(this._gliphParamArr,e.gliphParamArr),this._positionHighArr=Z(this._positionHighArr,e.positionHighArr),this._positionLowArr=Z(this._positionLowArr,e.positionLowArr),this._sizeArr=Z(this._sizeArr,e.sizeArr),this._offsetArr=Z(this._offsetArr,e.offsetArr),this._rgbaArr=Z(this._rgbaArr,e.rgbaArr),this._rotationArr=Z(this._rotationArr,e.rotationArr),this._fontIndexArr=Z(this._fontIndexArr,e.fontIndexArr),this._outlineArr=Z(this._outlineArr,e.outlineArr),this._outlineColorArr=Z(this._outlineColorArr,e.outlineColorArr),this._pickingColorArr=Z(this._pickingColorArr,e.pickingColorArr),t.update(),this.refresh())}clear(){this._texCoordArr=null,this._gliphParamArr=null,this._vertexArr=null,this._positionHighArr=null,this._positionLowArr=null,this._sizeArr=null,this._offsetArr=null,this._rgbaArr=null,this._rotationArr=null,this._fontIndexArr=null,this._outlineArr=null,this._outlineColorArr=null,this._texCoordArr=new Float32Array([]),this._gliphParamArr=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._fontIndexArr=new Float32Array([]),this._outlineArr=new Float32Array([]),this._outlineColorArr=new Float32Array([]),this._removeBillboards(),this._deleteBuffers(),this.refresh()}_deleteBuffers(){if(this._renderer){let e=this._renderer.handler.gl;e.deleteBuffer(this._gliphParamBuffer),e.deleteBuffer(this._sizeBuffer),e.deleteBuffer(this._fontIndexBuffer),e.deleteBuffer(this._texCoordBuffer),e.deleteBuffer(this._outlineBuffer),e.deleteBuffer(this._outlineColorBuffer),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._gliphParamBuffer=null,this._sizeBuffer=null,this._fontIndexBuffer=null,this._texCoordBuffer=null,this._outlineBuffer=null,this._outlineColorBuffer=null,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}}_displayPASS(){let e=this._renderer,t=e.handler;t.programs.label.activate();let i=t.programs.label._program,r=i.attributes,s=i.uniforms,n=t.gl,a=this._entityCollection;n.disable(n.CULL_FACE),n.uniform1iv(s.fontTextureArr,e.fontAtlas.samplerArr),n.uniform4fv(s.sdfParamsArr,e.fontAtlas.sdfParamsArr),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.scaleByDistance,a.scaleByDistance),n.uniform1f(s.opacity,a._fadingOpacity),n.uniform1f(s.planetRadius,a.renderNode._planetRadius2||0),n.uniform2fv(s.viewport,[t.canvas.clientWidth,t.canvas.clientHeight]),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._gliphParamBuffer),n.vertexAttribPointer(r.a_gliphParam,this._gliphParamBuffer.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._sizeBuffer),n.vertexAttribPointer(r.a_size,this._sizeBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._rotationBuffer),n.vertexAttribPointer(r.a_rotation,this._rotationBuffer.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.bindBuffer(n.ARRAY_BUFFER,this._fontIndexBuffer),n.vertexAttribPointer(r.a_fontIndex,this._fontIndexBuffer.itemSize,n.FLOAT,!1,0,0),n.uniform1i(s.isOutlinePass,1),n.uniform1f(s.depthOffset,a.polygonOffsetUnits),n.bindBuffer(n.ARRAY_BUFFER,this._outlineColorBuffer),n.vertexAttribPointer(r.a_rgba,this._outlineColorBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._outlineBuffer),n.vertexAttribPointer(r.a_outline,this._outlineBuffer.itemSize,n.FLOAT,!1,0,0),n.drawArrays(n.TRIANGLES,0,this._vertexBuffer.numItems),n.depthFunc(n.EQUAL),n.uniform1i(s.isOutlinePass,0),n.uniform1f(s.depthOffset,a.polygonOffsetUnits),n.bindBuffer(n.ARRAY_BUFFER,this._rgbaBuffer),n.vertexAttribPointer(r.a_rgba,this._rgbaBuffer.itemSize,n.FLOAT,!1,0,0),n.drawArrays(n.TRIANGLES,0,this._vertexBuffer.numItems),n.depthFunc(n.LESS),n.enable(n.CULL_FACE)}_pickingPASS(){let e=this._renderer,t=e.handler;t.programs.labelPicking.activate();let i=t.programs.labelPicking._program,r=i.attributes,s=i.uniforms,n=t.gl,a=this._entityCollection,o=a.renderNode;n.disable(n.CULL_FACE),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.scaleByDistance,a.scaleByDistance),n.uniform1f(s.opacity,a._fadingOpacity),n.uniform1f(s.planetRadius,o._planetRadius2||0),n.uniform2fv(s.viewport,[t.canvas.clientWidth,t.canvas.clientHeight]),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._gliphParamBuffer),n.vertexAttribPointer(r.a_gliphParam,this._gliphParamBuffer.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._sizeBuffer),n.vertexAttribPointer(r.a_size,this._sizeBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._rotationBuffer),n.vertexAttribPointer(r.a_rotation,this._rotationBuffer.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.bindBuffer(n.ARRAY_BUFFER,this._pickingColorBuffer),n.vertexAttribPointer(r.a_rgba,this._pickingColorBuffer.itemSize,n.FLOAT,!1,0,0),n.uniform1f(s.depthOffset,a.polygonOffsetUnits),n.drawArrays(n.TRIANGLES,0,this._vertexBuffer.numItems),n.enable(n.CULL_FACE)}_removeBillboard(e){let t=e._handlerIndex;this._billboards.splice(t,1);let i=24*this._maxLetters,r=t*i;this._rgbaArr=ee(this._rgbaArr,r,i),this._outlineColorArr=ee(this._outlineColorArr,r,i),this._texCoordArr=ee(this._texCoordArr,r,i),this._gliphParamArr=ee(this._gliphParamArr,r,i),i=18*this._maxLetters,r=t*i,this._positionHighArr=ee(this._positionHighArr,r,i),this._positionLowArr=ee(this._positionLowArr,r,i),this._offsetArr=ee(this._offsetArr,r,i),this._pickingColorArr=ee(this._pickingColorArr,r,i),i=12*this._maxLetters,r=t*i,this._vertexArr=ee(this._vertexArr,r,i),i=6*this._maxLetters,r=t*i,this._sizeArr=ee(this._sizeArr,r,i),this._rotationArr=ee(this._rotationArr,r,i),this._fontIndexArr=ee(this._fontIndexArr,r,i),this._outlineArr=ee(this._outlineArr,r,i),this.reindexBillboardsArray(t),this.refresh(),e._handlerIndex=-1,e._handler=null,e._isReady=!1}setText(e,t,i,r,s=!1){t=t.normalize("NFKC");let n=this._renderer.fontAtlas.atlasesArr[i];if(!n)return;let a=e*24*this._maxLetters,o=this._texCoordArr,l=this._gliphParamArr,h=0,d=Math.min(this._maxLetters,t.length),f=0;s&&(f=co);let u=0,g=n.kernings;for(h=0;h<d;h++){let _=a+h*24,m=t[h],v=n.get(m.charCodeAt(0))||n.get(32);if(!v)continue;let b=v.texCoords,y=v.metrics;o[_]=b[0],o[_+1]=b[1],o[_+2]=u,o[_+3]=f,o[_+4]=b[2],o[_+5]=b[3],o[_+6]=u,o[_+7]=f,o[_+8]=b[4],o[_+9]=b[5],o[_+10]=u,o[_+11]=f,o[_+12]=b[6],o[_+13]=b[7],o[_+14]=u,o[_+15]=f,o[_+16]=b[8],o[_+17]=b[9],o[_+18]=u,o[_+19]=f,o[_+20]=b[10],o[_+21]=b[11],o[_+22]=u,o[_+23]=f,l[_]=y.nWidth,l[_+1]=y.nHeight,l[_+2]=y.nXOffset,l[_+3]=y.nYOffset,l[_+4]=y.nWidth,l[_+5]=y.nHeight,l[_+6]=y.nXOffset,l[_+7]=y.nYOffset,l[_+8]=y.nWidth,l[_+9]=y.nHeight,l[_+10]=y.nXOffset,l[_+11]=y.nYOffset,l[_+12]=y.nWidth,l[_+13]=y.nHeight,l[_+14]=y.nXOffset,l[_+15]=y.nYOffset,l[_+16]=y.nWidth,l[_+17]=y.nHeight,l[_+18]=y.nXOffset,l[_+19]=y.nYOffset,l[_+20]=y.nWidth,l[_+21]=y.nHeight,l[_+22]=y.nXOffset,l[_+23]=y.nYOffset;let w=g[m.charCodeAt(0)];if(w&&t[h+1]){let x=w[t[h+1].charCodeAt(0)];x?u+=y.nAdvance+x:u+=y.nAdvance}else u+=y.nAdvance}if(r===Ct.CENTER)for(u*=-.5,h=0;h<d;h++){let _=a+h*24;o[_+2]+=u,o[_+6]+=u,o[_+10]+=u,o[_+14]+=u,o[_+18]+=u,o[_+22]+=u}for(;h<this._maxLetters;h++){let _=a+h*24;o[_+3]=Pt,o[_+7]=Pt,o[_+11]=Pt,o[_+15]=Pt,o[_+19]=Pt,o[_+23]=Pt}this._changedBuffers[lo]=!0}setPositionArr(e,t,i){let r=e*18*this._maxLetters,s=this._positionHighArr,n=t.x,a=t.y,o=t.z,l=this._positionLowArr,h=i.x,d=i.y,f=i.z;for(let u=0;u<this._maxLetters;u++){let g=r+u*18;s[g]=n,s[g+1]=a,s[g+2]=o,s[g+3]=n,s[g+4]=a,s[g+5]=o,s[g+6]=n,s[g+7]=a,s[g+8]=o,s[g+9]=n,s[g+10]=a,s[g+11]=o,s[g+12]=n,s[g+13]=a,s[g+14]=o,s[g+15]=n,s[g+16]=a,s[g+17]=o,l[g]=h,l[g+1]=d,l[g+2]=f,l[g+3]=h,l[g+4]=d,l[g+5]=f,l[g+6]=h,l[g+7]=d,l[g+8]=f,l[g+9]=h,l[g+10]=d,l[g+11]=f,l[g+12]=h,l[g+13]=d,l[g+14]=f,l[g+15]=h,l[g+16]=d,l[g+17]=f}this._changedBuffers[ro]=!0}setPickingColorArr(e,t){let i=e*18*this._maxLetters,r=this._pickingColorArr,s=t.x/255,n=t.y/255,a=t.z/255;for(let o=0;o<this._maxLetters;o++){let l=i+o*18;r[l]=s,r[l+1]=n,r[l+2]=a,r[l+3]=s,r[l+4]=n,r[l+5]=a,r[l+6]=s,r[l+7]=n,r[l+8]=a,r[l+9]=s,r[l+10]=n,r[l+11]=a,r[l+12]=s,r[l+13]=n,r[l+14]=a,r[l+15]=s,r[l+16]=n,r[l+17]=a}this._changedBuffers[io]=!0}setSizeArr(e,t){let i=e*6*this._maxLetters,r=this._sizeArr;for(let s=0;s<this._maxLetters;s++){let n=i+s*6;r[n]=t,r[n+1]=t,r[n+2]=t,r[n+3]=t,r[n+4]=t,r[n+5]=t}this._changedBuffers[so]=!0}setOffsetArr(e,t){let i=e*18*this._maxLetters,r=this._offsetArr,s=t.x,n=t.y,a=t.z;for(let o=0;o<this._maxLetters;o++){let l=i+o*18;r[l]=s,r[l+1]=n,r[l+2]=a,r[l+3]=s,r[l+4]=n,r[l+5]=a,r[l+6]=s,r[l+7]=n,r[l+8]=a,r[l+9]=s,r[l+10]=n,r[l+11]=a,r[l+12]=s,r[l+13]=n,r[l+14]=a,r[l+15]=s,r[l+16]=n,r[l+17]=a}this._changedBuffers[no]=!0}setRgbaArr(e,t){let i=e*24*this._maxLetters,r=this._rgbaArr,s=t.x,n=t.y,a=t.z,o=t.w;for(let l=0;l<this._maxLetters;l++){let h=i+l*24;r[h]=s,r[h+1]=n,r[h+2]=a,r[h+3]=o,r[h+4]=s,r[h+5]=n,r[h+6]=a,r[h+7]=o,r[h+8]=s,r[h+9]=n,r[h+10]=a,r[h+11]=o,r[h+12]=s,r[h+13]=n,r[h+14]=a,r[h+15]=o,r[h+16]=s,r[h+17]=n,r[h+18]=a,r[h+19]=o,r[h+20]=s,r[h+21]=n,r[h+22]=a,r[h+23]=o}this._changedBuffers[ao]=!0}setOutlineColorArr(e,t){let i=e*24*this._maxLetters,r=this._outlineColorArr,s=t.x,n=t.y,a=t.z,o=t.w;for(let l=0;l<this._maxLetters;l++){let h=i+l*24;r[h]=s,r[h+1]=n,r[h+2]=a,r[h+3]=o,r[h+4]=s,r[h+5]=n,r[h+6]=a,r[h+7]=o,r[h+8]=s,r[h+9]=n,r[h+10]=a,r[h+11]=o,r[h+12]=s,r[h+13]=n,r[h+14]=a,r[h+15]=o,r[h+16]=s,r[h+17]=n,r[h+18]=a,r[h+19]=o,r[h+20]=s,r[h+21]=n,r[h+22]=a,r[h+23]=o}this._changedBuffers[ws]=!0}setOutlineArr(e,t){let i=e*6*this._maxLetters,r=this._outlineArr;for(let s=0;s<this._maxLetters;s++){let n=i+s*6;r[n]=t,r[n+1]=t,r[n+2]=t,r[n+3]=t,r[n+4]=t,r[n+5]=t}this._changedBuffers[bs]=!0}setRotationArr(e,t){let i=e*6*this._maxLetters,r=this._rotationArr;for(let s=0;s<this._maxLetters;s++){let n=i+s*6;r[n]=t,r[n+1]=t,r[n+2]=t,r[n+3]=t,r[n+4]=t,r[n+5]=t}this._changedBuffers[oo]=!0}setVisibility(e,t){let i;t?i=[0,0,0,-1,1,-1,1,-1,1,0,0,0]:i=[0,0,0,0,0,0,0,0,0,0,0,0],this.setVertexArr(e,i)}setVertexArr(e,t){let i=e*12*this._maxLetters,r=this._vertexArr;for(let s=0;s<this._maxLetters;s++){let n=i+s*12;r[n]=t[0],r[n+1]=t[1],r[n+2]=t[2],r[n+3]=t[3],r[n+4]=t[4],r[n+5]=t[5],r[n+6]=t[6],r[n+7]=t[7],r[n+8]=t[8],r[n+9]=t[9],r[n+10]=t[10],r[n+11]=t[11]}this._changedBuffers[ho]=!0}setFontIndexArr(e,t){let i=e*6*this._maxLetters,r=this._fontIndexArr;for(let s=0;s<this._maxLetters;s++){let n=i+s*6;r[n]=t,r[n+1]=t,r[n+2]=t,r[n+3]=t,r[n+4]=t,r[n+5]=t}this._changedBuffers[ys]=!0}createSizeBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._sizeBuffer),this._sizeBuffer=e.createArrayBuffer(this._sizeArr,1,this._sizeArr.length)}createFontIndexBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._fontIndexBuffer),this._fontIndexBuffer=e.createArrayBuffer(this._fontIndexArr,1,this._fontIndexArr.length)}createTexCoordBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._texCoordBuffer),this._texCoordBuffer=e.createArrayBuffer(this._texCoordArr,4,this._texCoordArr.length/4),e.gl.deleteBuffer(this._gliphParamBuffer),this._gliphParamBuffer=e.createArrayBuffer(this._gliphParamArr,4,this._gliphParamArr.length/4)}createOutlineBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._outlineBuffer),this._outlineBuffer=e.createArrayBuffer(this._outlineArr,1,this._outlineArr.length)}createOutlineColorBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._outlineColorBuffer),this._outlineColorBuffer=e.createArrayBuffer(this._outlineColorArr,4,this._outlineColorArr.length/4)}setMaxLetters(e){this._maxLetters=e}}function uo(){return new G("pointCloud",{uniforms:{projectionViewMatrix:"mat4",opacity:"float",pointSize:"float"},attributes:{coordinates:"vec3",colors:"vec3"},vertexShader:`attribute vec3 coordinates;
|
|
1061
1061
|
attribute vec4 colors;
|
|
1062
1062
|
uniform mat4 projectionViewMatrix;
|
|
1063
1063
|
uniform float opacity;
|
|
@@ -1435,13 +1435,13 @@
|
|
|
1435
1435
|
uniform float uOpacity;
|
|
1436
1436
|
void main(void) {
|
|
1437
1437
|
gl_FragColor = vec4(uColor.rgb, uColor.a * uOpacity);
|
|
1438
|
-
}`}))}setRenderNode(e){this._renderer=e.renderer,this._initProgram();for(let t=0;t<this._strips.length;t++)this._strips[t].setRenderNode(e)}add(e){e._handlerIndex===-1&&(e._handler=this,e._handlerIndex=this._strips.length,this._strips.push(e),this._entityCollection&&this._entityCollection.renderNode&&e.setRenderNode(this._entityCollection.renderNode))}remove(e){let t=e._handlerIndex;t!==-1&&(e._deleteBuffers(),e._handlerIndex=-1,e._handler=null,this._strips.splice(t,1),this.reindexStripArray(t))}reindexStripArray(e){let t=this._strips;for(let i=e;i<t.length;i++)t[i]._handlerIndex=i}draw(){let e=this._strips.length;for(;e--;)this._strips[e].draw()}drawPicking(){if(this.pickingEnabled){let e=this._strips.length;for(;e--;)this._strips[e].drawPicking()}}clear(){let e=this._strips.length;for(;e--;)this._strips[e]._deleteBuffers(),this._strips[e]._handler=null,this._strips[e]._handlerIndex=-1;this._strips.length=0,this._strips=[]}}Ci.__counter__=0;class _t{constructor(e={}){this.__id=_t.__counter__++,this._renderNodeIndex=-1,this.renderNode=null,this._visibility=e.visibility==null?!0:e.visibility,this.polygonOffsetUnits=e.polygonOffsetUnits!=null?e.polygonOffsetUnits:0,this.billboardHandler=new Ya(this),this.labelHandler=new fo(this,e.labelMaxLetters),this.polylineHandler=new Ai(this),this.rayHandler=new Ei(this),this.pointCloudHandler=new Ti(this),this.stripHandler=new Ci(this),this.geoObjectHandler=new wi(this),e.pickingEnabled!=null&&this.setPickingEnabled(e.pickingEnabled),this._entities=[],this.scaleByDistance=e.scaleByDistance||[nt,nt,nt],this.pickingScale=e.pickingScale||1,this._opacity=e.opacity==null?1:e.opacity,this._fadingOpacity=this._opacity,this.events=this.rendererEvents=We(po,this),e.entities&&this.addEntities(e.entities)}get id(){return this.__id}isEqual(e){return this.__id===e.__id}setVisibility(e){this._visibility=e,this._fadingOpacity=this._opacity*(e?1:0),this.events.dispatch(this.events.visibilitychange,this)}getVisibility(){return this._visibility}setOpacity(e){this._opacity=e}setPickingEnabled(e){this.billboardHandler.pickingEnabled=e,this.labelHandler.pickingEnabled=e,this.polylineHandler.pickingEnabled=e,this.rayHandler.pickingEnabled=e,this.pointCloudHandler.pickingEnabled=e,this.stripHandler.pickingEnabled=e,this.geoObjectHandler.pickingEnabled=e}getOpacity(){return this._opacity}setScaleByDistance(e,t,i){this.scaleByDistance[0]=e,this.scaleByDistance[1]=t,this.scaleByDistance[2]=i||nt}appendChildEntity(e){this._addRecursively(e)}_addRecursively(e){e.billboard&&this.billboardHandler.add(e.billboard),e.label&&this.labelHandler.add(e.label),e.polyline&&this.polylineHandler.add(e.polyline),e.ray&&this.rayHandler.add(e.ray),e.pointCloud&&this.pointCloudHandler.add(e.pointCloud),e.strip&&this.stripHandler.add(e.strip),e.geoObject&&this.geoObjectHandler.add(e.geoObject),this.events.dispatch(this.events.entityadd,e);for(let t=0;t<e.childrenNodes.length;t++)e.childrenNodes[t]._entityCollection=this,e.childrenNodes[t]._entityCollectionIndex=e._entityCollectionIndex,e.childrenNodes[t]._pickingColor=e._pickingColor,this._addRecursively(e.childrenNodes[t])}add(e){if(!e._entityCollection){e._entityCollection=this,e._entityCollectionIndex=this._entities.length,this._entities.push(e);let t=this.renderNode;t&&(t.renderer&&t.renderer.assignPickingColor(e),t.ellipsoid&&e._cartesian.isZero()&&e.setCartesian3v(t.ellipsoid.lonLatToCartesian(e._lonLat))),this._addRecursively(e),e.setPickingColor()}return this}addEntities(e){for(let t=0,i=e.length;t<i;t++)this.add(e[t]);return this}belongs(e){return e._entityCollection&&this._renderNodeIndex===e._entityCollection._renderNodeIndex}_removeRecursively(e){e._entityCollection=null,e._entityCollectionIndex=-1,e.billboard&&this.billboardHandler.remove(e.billboard),e.label&&this.labelHandler.remove(e.label),e.polyline&&this.polylineHandler.remove(e.polyline),e.ray&&this.rayHandler.remove(e.ray),e.pointCloud&&this.pointCloudHandler.remove(e.pointCloud),e.strip&&this.stripHandler.remove(e.strip),e.geoObject&&this.geoObjectHandler.remove(e.geoObject);for(let t=0;t<e.childrenNodes.length;t++)this._removeRecursively(e.childrenNodes[t])}removeEntity(e){this._entities.splice(e._entityCollectionIndex,1),this.reindexEntitiesArray(e._entityCollectionIndex),this.renderNode&&this.renderNode.renderer&&(this.renderNode.renderer.clearPickingColor(e),e._pickingColor.clear()),this.belongs(e)&&this._removeRecursively(e),this.events.dispatch(this.events.entityremove,e)}_removeEntitySilent(e){this._entities.splice(e._entityCollectionIndex,1),this.reindexEntitiesArray(e._entityCollectionIndex),this.renderNode&&this.renderNode.renderer&&(this.renderNode.renderer.clearPickingColor(e),e._pickingColor.clear()),this.belongs(e)&&this._removeRecursively(e)}createPickingColors(){if(!(this.renderNode&&this.renderNode.renderer))return;let e=this._entities;for(let t=0;t<e.length;t++)e[t].parent||(this.renderNode.renderer.assignPickingColor(e[t]),e[t].setPickingColor())}reindexEntitiesArray(e){let t=this._entities;for(let i=e;i<t.length;i++)t[i]._entityCollectionIndex=i}addTo(e,t=!1){return this.renderNode||(this.renderNode=e,t||(this._renderNodeIndex=e.entityCollections.length,e.entityCollections.push(this)),e.ellipsoid&&this._updateGeodeticCoordinates(e.ellipsoid),this.bindRenderNode(e),this.events.dispatch(this.events.add,this)),this}bindRenderNode(e){e.renderer&&e.renderer.isInitialized()&&(this.billboardHandler.setRenderer(e.renderer),this.labelHandler.setRenderer(e.renderer),this.rayHandler.setRenderer(e.renderer),this.geoObjectHandler.setRenderNode(e),this.polylineHandler.setRenderNode(e),this.pointCloudHandler.setRenderNode(e),this.stripHandler.setRenderNode(e),this.updateBillboardsTextureAtlas(),this.updateLabelsFontAtlas(),this.createPickingColors())}_updateGeodeticCoordinates(e){let t=this._entities,i=t.length;for(;i--;){let r=t[i];r._lonLat&&r.setCartesian3v(e.lonLatToCartesian(r._lonLat))}}updateBillboardsTextureAtlas(){let e=this.billboardHandler.billboards;for(let t=0;t<e.length;t++)e[t].setSrc(e[t].getSrc())}updateLabelsFontAtlas(){this.renderNode&&this.labelHandler.updateFonts()}remove(){if(this.renderNode){if(this._renderNodeIndex!==-1){this.renderNode.entityCollections.splice(this._renderNodeIndex,1);for(let e=this._renderNodeIndex;e<this.renderNode.entityCollections.length;e++)this.renderNode.entityCollections[e]._renderNodeIndex=e}this.renderNode=null,this._renderNodeIndex=-1,this.events.dispatch(this.events.remove,this)}}getEntities(){return[].concat(this._entities)}each(e){let t=this._entities.length;for(;t--;){let i=this._entities[t];i&&e(i)}}clear(){this.billboardHandler.clear(),this.labelHandler.clear(),this.polylineHandler.clear(),this.rayHandler.clear(),this.pointCloudHandler.clear(),this.stripHandler.clear(),this.geoObjectHandler.clear();let e=this._entities.length;for(;e--;){let t=this._entities[e];this.renderNode&&this.renderNode.renderer&&(this.renderNode.renderer.clearPickingColor(t),t._pickingColor.clear()),this._clearEntity(t)}this._entities.length=0,this._entities=[]}_clearEntity(e){e._entityCollection=null,e._entityCollectionIndex=-1;for(let t=0;t<e.childrenNodes.length;t++)this._clearEntity(e.childrenNodes[t])}}_t.__counter__=0;const po=["draw","drawend","add","remove","entityadd","entityremove","visibilitychange","mousemove","mouseenter","mouseleave","lclick","rclick","mclick","ldblclick","rdblclick","mdblclick","lup","rup","mup","ldown","rdown","mdown","lhold","rhold","mhold","mousewheel","touchmove","touchstart","touchend","doubletouch","touchleave","touchenter"];class gt{constructor(e,t,i,r,s,n,a){this.layer=e,this.parentNode=i,this.childrenNodes=[],this.partId=t,this.nodeId=t+r,this.state=null,this.extent=s,this.count=0,this.deferredEntities=[],this.entityCollection=null,this.zoom=a,this._inTheQueue=!1,this.bsphere=new Ze,n&&this._setExtentBounds()}insertEntity(e,t=!1){this.buildTree([e],t)}_addEntitiesToCollection(e,t=!1){if(e.length){const i=this.layer,r=i._planet;let s=this.entityCollection;s||(s=new _t({pickingEnabled:i._pickingEnabled,labelMaxLetters:i.labelMaxLetters}),s._layer=this.layer,s.addTo(r,!0),s._quadNode=this,i._bindEventsDefault(s),this.entityCollection=s),t||!i.async?this.entityCollection.addEntities(e):this.deferredEntities.push.apply(this.deferredEntities,e)}}_setExtentBounds(){this.nodeId?this.bsphere.setFromExtent(this.layer._planet.ellipsoid,this.extent.inverseMercator()):(this.bsphere.radius=this.layer._planet.ellipsoid.equatorialSize,this.bsphere.center=new p)}__setLonLat__(e){return e._lonLat.isZero()&&!e._cartesian.isZero()&&(e._lonLat=this.layer._planet.ellipsoid.cartesianToLonLat(e._cartesian)),Math.abs(e._lonLat.lat)<ce?e._lonLatMerc=e._lonLat.forwardMercator():e._lonLatMerc=new B,e._lonLatMerc}buildTree(e,t=!1){if(this.count+=e.length,e.length>this.layer._nodeCapacity){const i=this.childrenNodes;i.length||this.createChildrenNodes();let r=[],s=[],n=[],a=[],o=e.length;for(;o--;){const l=e[o];i[$].isInside(l)?(l._nodePtr=i[$],r.push(l)):i[ue].isInside(l)?(l._nodePtr=i[ue],s.push(l)):i[_e].isInside(l)?(l._nodePtr=i[_e],n.push(l)):i[ge].isInside(l)&&(l._nodePtr=i[ge],a.push(l))}r.length&&i[$].buildTree(r,t),s.length&&i[ue].buildTree(s,t),n.length&&i[_e].buildTree(n,t),a.length&&i[ge].buildTree(a,t)}else this._addEntitiesToCollection(e,t)}isInside(e){return e._lonLatMerc?this.extent.isInside(e._lonLatMerc):!1}createChildrenNodes(){const e=this.layer,t=this.extent,i=t.getWidth()*.5,r=t.getHeight()*.5,s=t.northEast,n=t.southWest,a=this.nodeId*4+1,o=new B(n.lon+i,n.lat+r),l=this.childrenNodes,h=this.layer._planet,d=this.zoom+1;l[$]=new gt(e,$,this,a,new U(new B(n.lon,n.lat+r),new B(n.lon+i,s.lat)),h,d),l[ue]=new gt(e,ue,this,a,new U(o,new B(s.lon,s.lat)),h,d),l[_e]=new gt(e,_e,this,a,new U(new B(n.lon,n.lat),o),h,d),l[ge]=new gt(e,ge,this,a,new U(new B(n.lon+i,n.lat),new B(s.lon,n.lat+r)),h,d)}collectRenderCollectionsPASS1(e,t){const i=e[this.nodeId];if(i){const r=this.childrenNodes;this.entityCollection?this.renderCollection(t,e):r.length&&(i.state===$e?this.layer._secondPASS.push(this):(r[$].collectRenderCollectionsPASS1(e,t),r[ue].collectRenderCollectionsPASS1(e,t),r[_e].collectRenderCollectionsPASS1(e,t),r[ge].collectRenderCollectionsPASS1(e,t)))}}collectRenderCollectionsPASS2(e,t,i){const s=this.layer._planet.camera,n=s.eye.distance(this.bsphere.center)-this.bsphere.radius<Jr*Math.sqrt(s._lonLat.height)||s._lonLat.height>1e4;if(this.count>0&&n&&s.frustum.containsSphere(this.bsphere)){const a=this.childrenNodes;this.entityCollection?this.renderCollection(t,e,i):a.length&&(a[$].collectRenderCollectionsPASS2(e,t,i),a[ue].collectRenderCollectionsPASS2(e,t,i),a[_e].collectRenderCollectionsPASS2(e,t,i),a[ge].collectRenderCollectionsPASS2(e,t,i))}}applyCollection(){this.entityCollection.addEntities(this.deferredEntities),this.deferredEntities.length=0,this.deferredEntities=[],this._inTheQueue=!1}traverseTree(e){const t=this.childrenNodes;this.entityCollection?e(this):t.length&&(t[$].traverseTree(e),t[ue].traverseTree(e),t[_e].traverseTree(e),t[ge].traverseTree(e))}renderCollection(e,t,i){const r=this.layer;r._renderingNodes[this.nodeId]=!0,this.deferredEntities.length&&!this._inTheQueue&&(r.async?r._queueDeferredNode(this):this.applyCollection());const s=this.entityCollection;if(s._fadingOpacity=r._fadingOpacity,s.scaleByDistance=r.scaleByDistance,s.pickingScale=r.pickingScale,s.polygonOffsetUnits=r.polygonOffsetUnits,e.push(s),r.clampToGround||r.relativeToGround){const n=s._entities;let a=n.length;if(t[this.nodeId]&&t[this.nodeId].state===$e)for(;a--;){let o=n[a];this.alignEntityToTheGround(o,t[this.nodeId].segment)}else if(i)for(;a--;){let o=n[a];this.alignEntityToTheGround(o,t[i].segment)}else{const o=r._planet._renderedNodes;for(;a--;){let l=n[a],h=o.length;for(;h--;)if(o[h].segment.isEntityInside(l)){this.alignEntityToTheGround(l,o[h].segment);break}}}}}alignEntityToTheGround(e,t){let i=new p;t.getEntityTerrainPoint(e,i);let r=Number(this.layer.relativeToGround)&&e._altitude||0;if(r){let s=this.layer._planet.ellipsoid.getSurfaceNormal3v(i);e._setCartesian3vSilent(i.addA(s.scale(r)))}else e._setCartesian3vSilent(i)}isVisible(){return!!this.layer._renderingNodes[this.nodeId]}}class mt extends gt{constructor(e,t,i,r,s,n,a){super(e,t,i,r,s,n,a),this.isNorth=!1}createChildrenNodes(){const e=this.layer,t=this.extent,i=t.getWidth()*.5,r=t.getHeight()*.5,s=t.northEast,n=t.southWest,a=this.nodeId*4+1,o=new B(n.lon+i,n.lat+r),l=this.childrenNodes,h=this.layer._planet,d=this.zoom+1;l[$]=new mt(e,$,this,a,new U(new B(n.lon,n.lat+r),new B(n.lon+i,s.lat)),h,d),l[ue]=new mt(e,ue,this,a,new U(o,new B(s.lon,s.lat)),h,d),l[_e]=new mt(e,_e,this,a,new U(new B(n.lon,n.lat),o),h,d),l[ge]=new mt(e,ge,this,a,new U(new B(n.lon+i,n.lat),new B(s.lon,n.lat+r)),h,d)}_setExtentBounds(){this.extent.northEast.lat>0&&(this.isNorth=!0),this.bsphere.setFromExtent(this.layer._planet.ellipsoid,this.extent)}__setLonLat__(e){return e._lonLat.isZero()&&(e._lonLat=this.layer._planet.ellipsoid.cartesianToLonLat(e._cartesian)),e._lonLat}isVisible(){return this.isNorth&&this.layer._renderingNodesNorth[this.nodeId]?!0:!!this.layer._renderingNodesSouth[this.nodeId]}isInside(e){return this.extent.isInside(e._lonLat)}renderCollection(e,t,i){this.isNorth?this.layer._renderingNodesNorth[this.nodeId]=!0:this.layer._renderingNodesSouth[this.nodeId]=!0,this.deferredEntities.length&&!this._inTheQueue&&(this.layer.async?this.layer._queueDeferredNode(this):this.applyCollection());const r=this.entityCollection;r._fadingOpacity=this.layer._fadingOpacity,r.scaleByDistance=this.layer.scaleByDistance,r.pickingScale=this.layer.pickingScale,e.push(r)}}function vo(c,e=!1){let t=1-zr(128,c[0])*2,i=2*Oi(c[0],128)+zr(128,c[1])-127,r=Oi(c[1],128)*65536+c[2]*256+(e&&c[3]||0)+8388608;return t*Un(i)*(r*11920928955078125e-23)}function Lt(c,e){if(c>=0){let t=Math.floor(c/65536)*65536;e[0]=Math.fround(t),e[1]=Math.fround(c-t)}else{let t=Math.floor(-c/65536)*65536;e[0]=Math.fround(-t),e[1]=Math.fround(c+t)}return e}function Bs(c,e){if(c>=0){let t=Math.floor(c/65536)*65536;e.x=Math.fround(t),e.y=Math.fround(c-t)}else{let t=Math.floor(-c/65536)*65536;e.x=Math.fround(-t),e.y=Math.fround(c+t)}return e}function Ms(c,e,t){t=t||2;var i=e&&e.length,r=i?e[0]*t:c.length,s=Rs(c,0,r,t,!0),n=[];if(!s)return n;var a,o,l,h,d,f,u;if(i&&(s=To(c,e,s,t)),c.length>80*t){a=l=c[0],o=h=c[1];for(let g=t;g<r;g+=t)d=c[g],f=c[g+1],d<a&&(a=d),f<o&&(o=f),d>l&&(l=d),f>h&&(h=f);u=Math.max(l-a,h-o)}return qt(s,n,t,a,o,u),n}function Rs(c,e,t,i,r){var s,n;if(r===Io(c,e,t,i)>0)for(s=e;s<t;s+=i)n=zs(s,c[s],c[s+1],n);else for(s=t-i;s>=e;s-=i)n=zs(s,c[s],c[s+1],n);return n&&pt(n,n.next)&&(Xt(n),n=n.next),n}function Yt(c,e){if(!c)return c;e||(e=c);var t=c,i;do if(i=!1,!t.steiner&&(pt(t,t.next)||Ce(t.prev,t,t.next)===0)){if(Xt(t),t=e=t.prev,t===t.next)return null;i=!0}else t=t.next;while(i||t!==e);return e}function qt(c,e,t,i,r,s,n){if(c){!n&&s&&Po(c,i,r,s);for(var a=c,o,l;c.prev!==c.next;){if(o=c.prev,l=c.next,s?yo(c,i,r,s):xo(c)){e.push(o.i/t),e.push(c.i/t),e.push(l.i/t),Xt(c),c=l.next,a=l.next;continue}if(c=l,c===a){n?n===1?(c=bo(c,e,t),qt(c,e,t,i,r,s,2)):n===2&&wo(c,e,t,i,r,s):qt(Yt(c),e,t,i,r,s,1);break}}}}function xo(c){var e=c.prev,t=c,i=c.next;if(Ce(e,t,i)>=0)return!1;for(var r=c.next.next;r!==c.prev;){if(Pi(e.x,e.y,t.x,t.y,i.x,i.y,r.x,r.y)&&Ce(r.prev,r,r.next)>=0)return!1;r=r.next}return!0}function yo(c,e,t,i){var r=c.prev,s=c,n=c.next;if(Ce(r,s,n)>=0)return!1;for(var a=r.x<s.x?r.x<n.x?r.x:n.x:s.x<n.x?s.x:n.x,o=r.y<s.y?r.y<n.y?r.y:n.y:s.y<n.y?s.y:n.y,l=r.x>s.x?r.x>n.x?r.x:n.x:s.x>n.x?s.x:n.x,h=r.y>s.y?r.y>n.y?r.y:n.y:s.y>n.y?s.y:n.y,d=nr(a,o,e,t,i),f=nr(l,h,e,t,i),u=c.nextZ;u&&u.z<=f;){if(u!==c.prev&&u!==c.next&&Pi(r.x,r.y,s.x,s.y,n.x,n.y,u.x,u.y)&&Ce(u.prev,u,u.next)>=0)return!1;u=u.nextZ}for(u=c.prevZ;u&&u.z>=d;){if(u!==c.prev&&u!==c.next&&Pi(r.x,r.y,s.x,s.y,n.x,n.y,u.x,u.y)&&Ce(u.prev,u,u.next)>=0)return!1;u=u.prevZ}return!0}function bo(c,e,t){var i=c;do{var r=i.prev,s=i.next.next;!pt(r,s)&&Ss(r,i,i.next,s)&&Wt(r,s)&&Wt(s,r)&&(e.push(r.i/t),e.push(i.i/t),e.push(s.i/t),Xt(i),Xt(i.next),i=c=s),i=i.next}while(i!==c);return i}function wo(c,e,t,i,r,s){var n=c;do{for(var a=n.next.next;a!==n.prev;){if(n.i!==a.i&&Mo(n,a)){var o=Is(n,a);n=Yt(n,n.next),o=Yt(o,o.next),qt(n,e,t,i,r,s),qt(o,e,t,i,r,s);return}a=a.next}n=n.next}while(n!==c)}function To(c,e,t,i){var r=[],s,n,a,o,l;for(s=0,n=e.length;s<n;s++)a=e[s]*i,o=s<n-1?e[s+1]*i:c.length,l=Rs(c,a,o,i,!1),l===l.next&&(l.steiner=!0),r.push(Bo(l));for(r.sort(Ao),s=0;s<r.length;s++)Eo(r[s],t),t=Yt(t,t.next);return t}function Ao(c,e){return c.x-e.x}function Eo(c,e){if(e=Co(c,e),e){var t=Is(e,c);Yt(t,t.next)}}function Co(c,e){var t=e,i=c.x,r=c.y,s=-1/0,n;do{if(r<=t.y&&r>=t.next.y&&t.next.y!==t.y){var a=t.x+(r-t.y)*(t.next.x-t.x)/(t.next.y-t.y);if(a<=i&&a>s){if(s=a,a===i){if(r===t.y)return t;if(r===t.next.y)return t.next}n=t.x<t.next.x?t:t.next}}t=t.next}while(t!==e);if(!n)return null;if(i===s)return n.prev;var o=n,l=n.x,h=n.y,d=1/0,f;for(t=n.next;t!==o;)i>=t.x&&t.x>=l&&i!==t.x&&Pi(r<h?i:s,r,l,h,r<h?s:i,r,t.x,t.y)&&(f=Math.abs(r-t.y)/(i-t.x),(f<d||f===d&&t.x>n.x)&&Wt(t,c)&&(n=t,d=f)),t=t.next;return n}function Po(c,e,t,i){var r=c;do r.z===null&&(r.z=nr(r.x,r.y,e,t,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next;while(r!==c);r.prevZ.nextZ=null,r.prevZ=null,Lo(r)}function Lo(c){var e,t,i,r,s,n,a,o,l=1;do{for(t=c,c=null,s=null,n=0;t;){for(n++,i=t,a=0,e=0;e<l&&(a++,i=i.nextZ,!!i);e++);for(o=l;a>0||o>0&&i;)a!==0&&(o===0||!i||t.z<=i.z)?(r=t,t=t.nextZ,a--):(r=i,i=i.nextZ,o--),s?s.nextZ=r:c=r,r.prevZ=s,s=r;t=i}s.nextZ=null,l*=2}while(n>1);return c}function nr(c,e,t,i,r){return c=32767*(c-t)/r,e=32767*(e-i)/r,c=(c|c<<8)&16711935,c=(c|c<<4)&252645135,c=(c|c<<2)&858993459,c=(c|c<<1)&1431655765,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,c|e<<1}function Bo(c){var e=c,t=c;do e.x<t.x&&(t=e),e=e.next;while(e!==c);return t}function Pi(c,e,t,i,r,s,n,a){return(r-n)*(e-a)-(c-n)*(s-a)>=0&&(c-n)*(i-a)-(t-n)*(e-a)>=0&&(t-n)*(s-a)-(r-n)*(i-a)>=0}function Mo(c,e){return c.next.i!==e.i&&c.prev.i!==e.i&&!Ro(c,e)&&Wt(c,e)&&Wt(e,c)&&So(c,e)}function Ce(c,e,t){return(e.y-c.y)*(t.x-e.x)-(e.x-c.x)*(t.y-e.y)}function pt(c,e){return c.x===e.x&&c.y===e.y}function Ss(c,e,t,i){return pt(c,e)&&pt(t,i)||pt(c,i)&&pt(t,e)?!0:Ce(c,e,t)>0!=Ce(c,e,i)>0&&Ce(t,i,c)>0!=Ce(t,i,e)>0}function Ro(c,e){var t=c;do{if(t.i!==c.i&&t.next.i!==c.i&&t.i!==e.i&&t.next.i!==e.i&&Ss(t,t.next,c,e))return!0;t=t.next}while(t!==c);return!1}function Wt(c,e){return Ce(c.prev,c,c.next)<0?Ce(c,e,c.next)>=0&&Ce(c,c.prev,e)>=0:Ce(c,e,c.prev)<0||Ce(c,c.next,e)<0}function So(c,e){var t=c,i=!1,r=(c.x+e.x)/2,s=(c.y+e.y)/2;do t.y>s!=t.next.y>s&&t.next.y!==t.y&&r<(t.next.x-t.x)*(s-t.y)/(t.next.y-t.y)+t.x&&(i=!i),t=t.next;while(t!==c);return i}function Is(c,e){var t=new ar(c.i,c.x,c.y),i=new ar(e.i,e.x,e.y),r=c.next,s=e.prev;return c.next=e,e.prev=c,t.next=r,r.prev=t,i.next=t,t.prev=i,s.next=i,i.prev=s,i}function zs(c,e,t,i){var r=new ar(c,e,t);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function Xt(c){c.next.prev=c.prev,c.prev.next=c.next,c.prevZ&&(c.prevZ.nextZ=c.nextZ),c.nextZ&&(c.nextZ.prevZ=c.prevZ)}function ar(c,e,t){this.i=c,this.x=e,this.y=t,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function Io(c,e,t,i){var r=0;for(let s=e,n=t-i;s<t;s+=i)r+=(c[n]-c[s])*(c[s+1]+c[n+1]),n=s;return r}function Fs(c){var e=c[0][0].length,t={vertices:[],holes:[],dimensions:e},i=0;for(let r=0;r<c.length;r++){for(let s=0;s<c[r].length;s++)for(let n=0;n<e;n++)t.vertices.push(c[r][s][n]);r>0&&(i+=c[r-1].length,t.holes.push(i))}return t}const ks=0,Ds=1,Ns=2,Hs=3,Os=4,zo=5,Vs=6,Us=7,Fo=8,Gs=9,ko=10,Do=11;function or(c,e,t){let i=c[0],r=c[1];if(i>=0){let s=Math.floor(i/65536)*65536;e.x=Math.fround(s),t.x=Math.fround(i-s)}else{let s=Math.floor(-i/65536)*65536;e.x=Math.fround(-s),t.x=Math.fround(i+s)}if(r>=0){let s=Math.floor(r/65536)*65536;e.y=Math.fround(s),t.y=Math.fround(r-s)}else{let s=Math.floor(-r/65536)*65536;e.y=Math.fround(-s),t.y=Math.fround(r+s)}}let N=new V,H=new V,Bt=new V;class Qe{constructor(e){this.__id=Qe.__counter__++,this._layer=e,this._handler=null,this._geometries=[],this._updatedGeometryArr=[],this._updatedGeometry={},this._removeGeometryExtentArr=[],this._removeGeometryExtents={},this._polyVerticesHighMerc=[],this._polyVerticesLowMerc=[],this._polyColors=[],this._polyPickingColors=[],this._polyIndexes=[],this._lineVerticesHighMerc=[],this._lineVerticesLowMerc=[],this._lineOrders=[],this._lineIndexes=[],this._lineColors=[],this._linePickingColors=[],this._lineThickness=[],this._lineStrokes=[],this._lineStrokeColors=[],this._polyVerticesHighBufferMerc=null,this._polyVerticesLowBufferMerc=null,this._polyColorsBuffer=null,this._polyPickingColorsBuffer=null,this._polyIndexesBuffer=null,this._lineVerticesHighBufferMerc=null,this._lineVerticesLowBufferMerc=null,this._lineColorsBuffer=null,this._linePickingColorsBuffer=null,this._lineThicknessBuffer=null,this._lineStrokesBuffer=null,this._lineStrokeColorsBuffer=null,this._lineOrdersBuffer=null,this._lineIndexesBuffer=null,this._buffersUpdateCallbacks=[],this._buffersUpdateCallbacks[ks]=this.createPolyVerticesBuffer,this._buffersUpdateCallbacks[Ds]=this.createPolyIndexesBuffer,this._buffersUpdateCallbacks[Ns]=this.createPolyColorsBuffer,this._buffersUpdateCallbacks[Hs]=this.createLineVerticesBuffer,this._buffersUpdateCallbacks[Os]=this.createLineIndexesBuffer,this._buffersUpdateCallbacks[zo]=this.createLineOrdersBuffer,this._buffersUpdateCallbacks[Vs]=this.createLineColorsBuffer,this._buffersUpdateCallbacks[Us]=this.createLineThicknessBuffer,this._buffersUpdateCallbacks[Fo]=this.createLineStrokesBuffer,this._buffersUpdateCallbacks[Gs]=this.createLineStrokeColorsBuffer,this._buffersUpdateCallbacks[ko]=this.createPolyPickingColorsBuffer,this._buffersUpdateCallbacks[Do]=this.createLinePickingColorsBuffer,this._changedBuffers=new Array(this._buffersUpdateCallbacks.length)}static appendLineData(e,t,i,r,s,n,a,o,l,h,d,f,u,g,_,m,v,b){var y=0;d.length>0?(y=d[d.length-5]+9,d.push(y,y)):d.push(0,0);var w=s,x=[i.x,i.y,i.z,i.w],T=a,A=[n.x,n.y,n.z,n.w],E=[r.x,r.y,r.z,1];for(let P=0;P<e.length;P++){var C=e[P];if(C.length===0)continue;let I=y,k;if(t)k=C[C.length-1];else{let L=C[0],S=C[1];S||(S=L),k=[L[0]+L[0]-S[0],L[1]+L[1]-S[1]]}or(k,N,H),o.push(N.x,N.y,N.x,N.y,N.x,N.y,N.x,N.y),l.push(H.x,H.y,H.x,H.y,H.x,H.y,H.x,H.y),v.push(N.x,N.y,N.x,N.y,N.x,N.y,N.x,N.y),b.push(H.x,H.y,H.x,H.y,H.x,H.y,H.x,H.y),h.push(1,-1,2,-2),g.push(w,w,w,w),m.push(T,T,T,T),f.push(x[0],x[1],x[2],x[3],x[0],x[1],x[2],x[3],x[0],x[1],x[2],x[3],x[0],x[1],x[2],x[3]),_.push(A[0],A[1],A[2],A[3],A[0],A[1],A[2],A[3],A[0],A[1],A[2],A[3],A[0],A[1],A[2],A[3]),u.push(E[0],E[1],E[2],E[3],E[0],E[1],E[2],E[3],E[0],E[1],E[2],E[3],E[0],E[1],E[2],E[3]);for(let L=0;L<C.length;L++){let S=C[L];or(S,N,H),o.push(N.x,N.y,N.x,N.y,N.x,N.y,N.x,N.y),l.push(H.x,H.y,H.x,H.y,H.x,H.y,H.x,H.y),v.push(N.x,N.y,N.x,N.y,N.x,N.y,N.x,N.y),b.push(H.x,H.y,H.x,H.y,H.x,H.y,H.x,H.y),h.push(1,-1,2,-2),g.push(w,w,w,w),m.push(T,T,T,T),f.push(x[0],x[1],x[2],x[3],x[0],x[1],x[2],x[3],x[0],x[1],x[2],x[3],x[0],x[1],x[2],x[3]),_.push(A[0],A[1],A[2],A[3],A[0],A[1],A[2],A[3],A[0],A[1],A[2],A[3],A[0],A[1],A[2],A[3]),u.push(E[0],E[1],E[2],E[3],E[0],E[1],E[2],E[3],E[0],E[1],E[2],E[3],E[0],E[1],E[2],E[3]),d.push(y++,y++,y++,y++)}let z;if(t)z=C[0],d.push(I,I+1,I+1,I+1);else{let L=C[C.length-1],S=C[C.length-2];S||(S=L),z=[L[0]+L[0]-S[0],L[1]+L[1]-S[1]],d.push(y-1,y-1,y-1,y-1)}or(z,N,H),o.push(N.x,N.y,N.x,N.y,N.x,N.y,N.x,N.y),l.push(H.x,H.y,H.x,H.y,H.x,H.y,H.x,H.y),v.push(N.x,N.y,N.x,N.y,N.x,N.y,N.x,N.y),b.push(H.x,H.y,H.x,H.y,H.x,H.y,H.x,H.y),h.push(1,-1,2,-2),g.push(w,w,w,w),m.push(T,T,T,T),f.push(x[0],x[1],x[2],x[3],x[0],x[1],x[2],x[3],x[0],x[1],x[2],x[3],x[0],x[1],x[2],x[3]),_.push(A[0],A[1],A[2],A[3],A[0],A[1],A[2],A[3],A[0],A[1],A[2],A[3],A[0],A[1],A[2],A[3]),u.push(E[0],E[1],E[2],E[3],E[0],E[1],E[2],E[3],E[0],E[1],E[2],E[3],E[0],E[1],E[2],E[3]),P<e.length-1&&(y+=8,d.push(y,y))}}assignHandler(e){this._handler=e,this.refresh(),e.isInitialized()&&this.update()}add(e){if(e._handlerIndex===-1){e._handler=this,e._handlerIndex=this._geometries.length,this._geometries.push(e);let t=e._entity._pickingColor.scaleTo(1/255);if(e._polyVerticesHighMerc=[],e._polyVerticesLowMerc=[],e._lineVerticesHighMerc=[],e._lineVerticesLowMerc=[],e._coordinates[0].length){if(e.type===Ne.POLYGON){let i=e._coordinates,r=[];for(let h=0;h<i.length;h++){r[h]=[];for(let d=0;d<i[h].length;d++)r[h][d]=[fi(i[h][d][0]),ui(i[h][d][1])]}let s=Fs(r),n=Ms(s.vertices,s.holes,2);e._polyVerticesHandlerIndex=this._polyVerticesHighMerc.length,e._polyIndexesHandlerIndex=this._polyIndexes.length;for(let h=0;h<n.length;h++)this._polyIndexes.push(n[h]+e._polyVerticesHandlerIndex*.5);let a=e._style.fillColor,o=[],l=[];for(let h=0;h<s.vertices.length*.5;h++)this._polyColors.push(a.x,a.y,a.z,a.w),this._polyPickingColors.push(t.x,t.y,t.z,1);for(let h=0;h<s.vertices.length;h++)Bs(s.vertices[h],Bt),o[h]=Bt.x,l[h]=Bt.y;e._polyVerticesHighMerc=o,e._polyVerticesLowMerc=l,this._polyVerticesHighMerc.push.apply(this._polyVerticesHighMerc,o),this._polyVerticesLowMerc.push.apply(this._polyVerticesLowMerc,l),e._polyVerticesLength=s.vertices.length,e._polyIndexesLength=n.length,e._lineVerticesHandlerIndex=this._lineVerticesHighMerc.length,e._lineOrdersHandlerIndex=this._lineOrders.length,e._lineIndexesHandlerIndex=this._lineIndexes.length,e._lineColorsHandlerIndex=this._lineColors.length,e._lineThicknessHandlerIndex=this._lineThickness.length,Qe.appendLineData(r,!0,e._style.lineColor,t,e._style.lineWidth,e._style.strokeColor,e._style.strokeWidth,this._lineVerticesHighMerc,this._lineVerticesLowMerc,this._lineOrders,this._lineIndexes,this._lineColors,this._linePickingColors,this._lineThickness,this._lineStrokeColors,this._lineStrokes,e._lineVerticesHighMerc,e._lineVerticesLowMerc),e._lineVerticesLength=this._lineVerticesHighMerc.length-e._lineVerticesHandlerIndex,e._lineOrdersLength=this._lineOrders.length-e._lineOrdersHandlerIndex,e._lineIndexesLength=this._lineIndexes.length-e._lineIndexesHandlerIndex,e._lineColorsLength=this._lineColors.length-e._lineColorsHandlerIndex,e._lineThicknessLength=this._lineThickness.length-e._lineThicknessHandlerIndex}else if(e.type===Ne.MULTIPOLYGON){let i=e._coordinates,r=[],s=[];e._lineVerticesHandlerIndex=this._lineVerticesHighMerc.length,e._lineOrdersHandlerIndex=this._lineOrders.length,e._lineIndexesHandlerIndex=this._lineIndexes.length,e._lineColorsHandlerIndex=this._lineColors.length,e._lineThicknessHandlerIndex=this._lineThickness.length;for(let l=0;l<i.length;l++){let h=i[l],d=[];for(let g=0;g<h.length;g++){d[g]=[];for(let _=0;_<i[l][g].length;_++)d[g][_]=[fi(h[g][_][0]),ui(h[g][_][1])]}let f=Fs(d),u=Ms(f.vertices,f.holes,2);for(let g=0;g<u.length;g++)s.push(u[g]+r.length*.5);r.push.apply(r,f.vertices),Qe.appendLineData(d,!0,e._style.lineColor,t,e._style.lineWidth,e._style.strokeColor,e._style.strokeWidth,this._lineVerticesHighMerc,this._lineVerticesLowMerc,this._lineOrders,this._lineIndexes,this._lineColors,this._linePickingColors,this._lineThickness,this._lineStrokeColors,this._lineStrokes,e._lineVerticesHighMerc,e._lineVerticesLowMerc)}e._polyVerticesHandlerIndex=this._polyVerticesHighMerc.length,e._polyIndexesHandlerIndex=this._polyIndexes.length;for(let l=0;l<s.length;l++)this._polyIndexes.push(s[l]+e._polyVerticesHandlerIndex*.5);let n=e._style.fillColor,a=[],o=[];for(let l=0;l<r.length*.5;l++)this._polyColors.push(n.x,n.y,n.z,n.w),this._polyPickingColors.push(t.x,t.y,t.z,1);for(let l=0;l<r.length;l++)Bs(r[l],Bt),a[l]=Bt.x,o[l]=Bt.y;e._polyVerticesHighMerc=a,e._polyVerticesLowMerc=o,this._polyVerticesHighMerc.push.apply(this._polyVerticesHighMerc,a),this._polyVerticesLowMerc.push.apply(this._polyVerticesLowMerc,o),e._polyVerticesLength=r.length,e._polyIndexesLength=s.length,e._lineVerticesLength=this._lineVerticesHighMerc.length-e._lineVerticesHandlerIndex,e._lineOrdersLength=this._lineOrders.length-e._lineOrdersHandlerIndex,e._lineIndexesLength=this._lineIndexes.length-e._lineIndexesHandlerIndex,e._lineColorsLength=this._lineColors.length-e._lineColorsHandlerIndex,e._lineThicknessLength=this._lineThickness.length-e._lineThicknessHandlerIndex}else if(e.type===Ne.LINESTRING){let i=e._coordinates,r=new Array(i.length);for(let s=0;s<i.length;s++)r[s]=[fi(i[s][0]),ui(i[s][1])];e._lineVerticesHandlerIndex=this._lineVerticesHighMerc.length,e._lineOrdersHandlerIndex=this._lineOrders.length,e._lineIndexesHandlerIndex=this._lineIndexes.length,e._lineColorsHandlerIndex=this._lineColors.length,e._lineThicknessHandlerIndex=this._lineThickness.length,Qe.appendLineData([r],!1,e._style.lineColor,t,e._style.lineWidth,e._style.strokeColor,e._style.strokeWidth,this._lineVerticesHighMerc,this._lineVerticesLowMerc,this._lineOrders,this._lineIndexes,this._lineColors,this._linePickingColors,this._lineThickness,this._lineStrokeColors,this._lineStrokes,e._lineVerticesHighMerc,e._lineVerticesLowMerc),e._lineVerticesLength=this._lineVerticesHighMerc.length-e._lineVerticesHandlerIndex,e._lineOrdersLength=this._lineOrders.length-e._lineOrdersHandlerIndex,e._lineIndexesLength=this._lineIndexes.length-e._lineIndexesHandlerIndex,e._lineColorsLength=this._lineColors.length-e._lineColorsHandlerIndex,e._lineThicknessLength=this._lineThickness.length-e._lineThicknessHandlerIndex}else if(e.type===Ne.MULTILINESTRING){let i=e._coordinates,r=[];for(let s=0;s<i.length;s++){r[s]=[];for(let n=0;n<i[s].length;n++)r[s][n]=[fi(i[s][n][0]),ui(i[s][n][1])]}e._lineVerticesHandlerIndex=this._lineVerticesHighMerc.length,e._lineOrdersHandlerIndex=this._lineOrders.length,e._lineIndexesHandlerIndex=this._lineIndexes.length,e._lineColorsHandlerIndex=this._lineColors.length,e._lineThicknessHandlerIndex=this._lineThickness.length,Qe.appendLineData(r,!1,e._style.lineColor,t,e._style.lineWidth,e._style.strokeColor,e._style.strokeWidth,this._lineVerticesHighMerc,this._lineVerticesLowMerc,this._lineOrders,this._lineIndexes,this._lineColors,this._linePickingColors,this._lineThickness,this._lineStrokeColors,this._lineStrokes,e._lineVerticesHighMerc,e._lineVerticesLowMerc),e._lineVerticesLength=this._lineVerticesHighMerc.length-e._lineVerticesHandlerIndex,e._lineOrdersLength=this._lineOrders.length-e._lineOrdersHandlerIndex,e._lineIndexesLength=this._lineIndexes.length-e._lineIndexesHandlerIndex,e._lineColorsLength=this._lineColors.length-e._lineColorsHandlerIndex,e._lineThicknessLength=this._lineThickness.length-e._lineThicknessHandlerIndex}}this.setGeometryVisibility(e),!this._updatedGeometry[e.__id]&&this._updatedGeometryArr.push(e),this._updatedGeometry[e.__id]=!0,this.refresh()}}remove(e){const t=e._handlerIndex;if(t!==-1){this._geometries.splice(t,1),this._polyVerticesHighMerc.splice(e._polyVerticesHandlerIndex,e._polyVerticesLength),this._polyVerticesLowMerc.splice(e._polyVerticesHandlerIndex,e._polyVerticesLength),this._polyColors.splice(e._polyVerticesHandlerIndex*2,e._polyVerticesLength*2),this._polyPickingColors.splice(e._polyVerticesHandlerIndex*2,e._polyVerticesLength*2),this._polyIndexes.splice(e._polyIndexesHandlerIndex,e._polyIndexesLength);let i=e._polyVerticesLength*.5;for(let s=e._polyIndexesHandlerIndex;s<this._polyIndexes.length;s++)this._polyIndexes[s]-=i;this._lineVerticesHighMerc.splice(e._lineVerticesHandlerIndex,e._lineVerticesLength),this._lineVerticesLowMerc.splice(e._lineVerticesHandlerIndex,e._lineVerticesLength),this._lineOrders.splice(e._lineOrdersHandlerIndex,e._lineOrdersLength),this._lineColors.splice(e._lineColorsHandlerIndex,e._lineColorsLength),this._linePickingColors.splice(e._lineColorsHandlerIndex,e._lineColorsLength),this._lineStrokeColors.splice(e._lineColorsHandlerIndex,e._lineColorsLength),this._lineThickness.splice(e._lineThicknessHandlerIndex,e._lineThicknessLength),this._lineStrokes.splice(e._lineThicknessHandlerIndex,e._lineThicknessLength),this._lineIndexes.splice(e._lineIndexesHandlerIndex,e._lineIndexesLength),i=e._lineVerticesLength*.5;for(let s=e._lineIndexesHandlerIndex;s<this._lineIndexes.length;s++)this._lineIndexes[s]-=i;let r=this._geometries;for(let s=t;s<r.length;s++){let n=r[s];n._handlerIndex=s,n._polyVerticesHandlerIndex-=e._polyVerticesLength,n._polyIndexesHandlerIndex-=e._polyIndexesLength,n._lineVerticesHandlerIndex-=e._lineVerticesLength,n._lineOrdersHandlerIndex-=e._lineOrdersLength,n._lineColorsHandlerIndex-=e._lineColorsLength,n._lineThicknessHandlerIndex-=e._lineThicknessLength,n._lineIndexesHandlerIndex-=e._lineIndexesLength}e._pickingReady=!1,e._handler=null,e._handlerIndex=-1,e._polyVerticesHighMerc=[],e._polyVerticesLowMerc=[],e._polyVerticesLength=-1,e._polyIndexesLength=-1,e._polyVerticesHandlerIndex=-1,e._polyIndexesHandlerIndex=-1,e._lineVerticesHighMerc=[],e._lineVerticesLowMerc=[],e._lineVerticesLength=-1,e._lineOrdersLength=-1,e._lineIndexesLength=-1,e._lineColorsLength=-1,e._lineThicknessLength=-1,e._lineVerticesHandlerIndex=-1,e._lineOrdersHandlerIndex=-1,e._lineIndexesHandlerIndex=-1,e._lineThicknessHandlerIndex=-1,e._lineColorsHandlerIndex=-1,!this._removeGeometryExtents[e.__id]&&this._removeGeometryExtentArr.push(e.getExtent()),this._removeGeometryExtents[e.__id]=!0,this.refresh()}}_refreshRecursevely(e,t){if(t.ready){let i=this._layer._id;for(let r=0;r<t.nodes.length;r++){let s=t.nodes[r];if(e.overlaps(s.segment.getExtentLonLat())){this._refreshRecursevely(e,s);let n=s.segment.materials[i];n&&n.isReady&&(n.segment.node.getState()!==$e?n.layer.clearMaterial(n):(n.pickingReady=n.pickingReady&&e._pickingReady,n.isReady=!1,n._updateTexture=n.texture,n._updatePickingMask=n.pickingMask),e._pickingReady=!0)}}}}_refreshRecursevelyExt(e,t){if(t.ready){let i=this._layer.__id;for(let r=0;r<t.nodes.length;r++){let s=t.nodes[r];if(e.overlaps(s.segment.getExtentLonLat())){this._refreshRecursevelyExt(e,s);let n=s.segment.materials[i];n&&n.isReady&&n.layer.clearMaterial(n)}}}}_refreshPlanetNode(e){let t,i=this._removeGeometryExtentArr;for(t=0;t<i.length;t++)this._refreshRecursevelyExt(i[t],e);let r=this._updatedGeometryArr;for(t=0;t<r.length;t++)this._refreshRecursevely(r[t],e)}_updatePlanet(){let e=this._layer._planet;if(e){let t=e.quadTreeStrategy.quadTreeList;for(let i=0;i<t.length;i++)this._refreshPlanetNode(t[i])}this._updatedGeometryArr.length=0,this._updatedGeometryArr=[],this._updatedGeometry={},this._removeGeometryExtentArr.length=0,this._removeGeometryExtentArr=[],this._removeGeometryExtents={}}refresh(){let e=this._changedBuffers.length;for(;e--;)this._changedBuffers[e]=!0}update(){if(this._handler){let e=!1,t=this._changedBuffers.length;for(;t--;)this._changedBuffers[t]&&(e=!0,this._buffersUpdateCallbacks[t].call(this),this._changedBuffers[t]=!1);e&&this._updatePlanet()}}setGeometryVisibility(e){let t=e.getVisibility()?1:0,i=this._polyVerticesHighMerc,r=this._polyVerticesLowMerc,s=e._polyVerticesLength,n=e._polyVerticesHandlerIndex;for(let a=0;a<s;a++)i[n+a]=e._polyVerticesHighMerc[a]*t,r[n+a]=e._polyVerticesLowMerc[a]*t;i=this._lineVerticesHighMerc,r=this._lineVerticesLowMerc,s=e._lineVerticesLength,n=e._lineVerticesHandlerIndex;for(let a=0;a<s;a++)i[n+a]=e._lineVerticesHighMerc[a]*t,r[n+a]=e._lineVerticesLowMerc[a]*t;this._changedBuffers[ks]=!0,this._changedBuffers[Hs]=!0,!this._updatedGeometry[e.__id]&&this._updatedGeometryArr.push(e),this._updatedGeometry[e.__id]=!0}setPolyColorArr(e,t){let i=e._polyVerticesHandlerIndex*2,r=i+e._polyVerticesLength*2,s=this._polyColors;for(let n=i;n<r;n+=4)s[n]=t.x,s[n+1]=t.y,s[n+2]=t.z,s[n+3]=t.w;this._changedBuffers[Ns]=!0,!this._updatedGeometry[e.__id]&&this._updatedGeometryArr.push(e),this._updatedGeometry[e.__id]=!0}setLineStrokeColorArr(e,t){let i=e._lineColorsHandlerIndex,r=i+e._lineColorsLength,s=this._lineStrokeColors;for(let n=i;n<r;n+=4)s[n]=t.x,s[n+1]=t.y,s[n+2]=t.z,s[n+3]=t.w;this._changedBuffers[Gs]=!0,!this._updatedGeometry[e.__id]&&this._updatedGeometryArr.push(e),this._updatedGeometry[e.__id]=!0}setLineColorArr(e,t){let i=e._lineColorsHandlerIndex,r=i+e._lineColorsLength,s=this._lineColors;for(let n=i;n<r;n+=4)s[n]=t.x,s[n+1]=t.y,s[n+2]=t.z,s[n+3]=t.w;this._changedBuffers[Vs]=!0,!this._updatedGeometry[e.__id]&&this._updatedGeometryArr.push(e),this._updatedGeometry[e.__id]=!0}setLineStrokeArr(e,t){}setLineThicknessArr(e,t){let i=e._lineThicknessHandlerIndex,r=i+e._lineThicknessLength,s=this._lineThickness;for(let n=i;n<r;n++)s[n]=t;this._changedBuffers[Us]=!0,!this._updatedGeometry[e.__id]&&this._updatedGeometryArr.push(e),this._updatedGeometry[e.__id]=!0}bringToFront(e){let t=this._polyIndexes.splice(e._polyIndexesHandlerIndex,e._polyIndexesLength),i=this._lineIndexes.splice(e._lineIndexesHandlerIndex,e._lineIndexesLength);this._geometries.splice(e._handlerIndex,1);let r=this._geometries;for(let s=e._handlerIndex;s<r.length;s++){let n=r[s];n._handlerIndex=s,n._polyIndexesHandlerIndex-=e._polyIndexesLength,n._lineIndexesHandlerIndex-=e._lineIndexesLength}e._polyIndexesHandlerIndex=this._polyIndexes.length,e._lineIndexesHandlerIndex=this._lineIndexes.length,e._handlerIndex=this._geometries.length,this._geometries.push(e),this._polyIndexes.push.apply(this._polyIndexes,t),this._lineIndexes.push.apply(this._lineIndexes,i),this._changedBuffers[Ds]=!0,this._changedBuffers[Os]=!0,!this._updatedGeometry[e.__id]&&this._updatedGeometryArr.push(e),this._updatedGeometry[e.__id]=!0}createPolyVerticesBuffer(){let e=this._handler;e.gl.deleteBuffer(this._polyVerticesHighBufferMerc),this._polyVerticesHighBufferMerc=e.createArrayBuffer(new Float32Array(this._polyVerticesHighMerc),2,this._polyVerticesHighMerc.length/2),e.gl.deleteBuffer(this._polyVerticesLowBufferMerc),this._polyVerticesLowBufferMerc=e.createArrayBuffer(new Float32Array(this._polyVerticesLowMerc),2,this._polyVerticesLowMerc.length/2)}createPolyIndexesBuffer(){let e=this._handler;e.gl.deleteBuffer(this._polyIndexesBuffer),this._polyIndexesBuffer=e.createElementArrayBuffer(new Uint32Array(this._polyIndexes),1,this._polyIndexes.length)}createPolyColorsBuffer(){let e=this._handler;e.gl.deleteBuffer(this._polyColorsBuffer),this._polyColorsBuffer=e.createArrayBuffer(new Float32Array(this._polyColors),4,this._polyColors.length/4)}createPolyPickingColorsBuffer(){let e=this._handler;e.gl.deleteBuffer(this._polyPickingColorsBuffer),this._polyPickingColorsBuffer=e.createArrayBuffer(new Float32Array(this._polyPickingColors),4,this._polyPickingColors.length/4)}createLineVerticesBuffer(){let e=this._handler;e.gl.deleteBuffer(this._lineVerticesHighBufferMerc),this._lineVerticesHighBufferMerc=e.createArrayBuffer(new Float32Array(this._lineVerticesHighMerc),2,this._lineVerticesHighMerc.length/2),e.gl.deleteBuffer(this._lineVerticesLowBufferMerc),this._lineVerticesLowBufferMerc=e.createArrayBuffer(new Float32Array(this._lineVerticesLowMerc),2,this._lineVerticesLowMerc.length/2)}createLineIndexesBuffer(){let e=this._handler;e.gl.deleteBuffer(this._lineIndexesBuffer),this._lineIndexesBuffer=e.createElementArrayBuffer(new Uint32Array(this._lineIndexes),1,this._lineIndexes.length)}createLineOrdersBuffer(){let e=this._handler;e.gl.deleteBuffer(this._lineOrdersBuffer),this._lineOrdersBuffer=e.createArrayBuffer(new Float32Array(this._lineOrders),1,this._lineOrders.length/2)}createLineColorsBuffer(){let e=this._handler;e.gl.deleteBuffer(this._lineColorsBuffer),this._lineColorsBuffer=e.createArrayBuffer(new Float32Array(this._lineColors),4,this._lineColors.length/4)}createLinePickingColorsBuffer(){let e=this._handler;e.gl.deleteBuffer(this._linePickingColorsBuffer),this._linePickingColorsBuffer=e.createArrayBuffer(new Float32Array(this._linePickingColors),4,this._linePickingColors.length/4)}createLineThicknessBuffer(){let e=this._handler;e.gl.deleteBuffer(this._lineThicknessBuffer),this._lineThicknessBuffer=e.createArrayBuffer(new Float32Array(this._lineThickness),1,this._lineThickness.length)}createLineStrokesBuffer(){let e=this._handler;e.gl.deleteBuffer(this._lineStrokesBuffer),this._lineStrokesBuffer=e.createArrayBuffer(new Float32Array(this._lineStrokes),1,this._lineStrokes.length)}createLineStrokeColorsBuffer(){let e=this._handler;e.gl.deleteBuffer(this._lineStrokeColorsBuffer),this._lineStrokeColorsBuffer=e.createArrayBuffer(new Float32Array(this._lineStrokeColors),4,this._lineStrokeColors.length/4)}}Qe.__counter__=0;class lr{constructor(e=2048){this._size=e,this._array=new Array(this._size),this._popIndex=Math.floor(this._size*.5),this._shiftIndex=this._popIndex,this.length=0}reset(){this._popIndex=Math.floor(this._size*.5),this._shiftIndex=this._popIndex,this.length=0}clear(){this._array.length=0,this._array=new Array(this._size),this._popIndex=Math.floor(this._size*.5),this._shiftIndex=this._popIndex,this.length=0}push(e){this.length++,this._array[this._popIndex++]=e}pop(){if(this.length){this.length--;let e=this._array[--this._popIndex];return this._array[this._popIndex]=null,this._array[this._popIndex-1]||(this._popIndex=Math.floor(this._size*.5),this._shiftIndex=this._popIndex),e}}unshift(e){this.length++,this._array[--this._shiftIndex]=e}shift(){if(this.length){this.length--;let e=this._array[this._shiftIndex];return this._array[this._shiftIndex++]=null,this._array[this._shiftIndex]||(this._popIndex=Math.floor(this._size*.5),this._shiftIndex=this._popIndex),e}}forEach(e){for(let t=this._shiftIndex;t<this._popIndex;t++)e(this._array[t])}}function No(c){let e=[];for(let t=0;t<c.length;t++){let i=c[t];i.instanceName==="Entity"?e.push(i):e.push(new yi(i))}return e}class Ho extends Oe{constructor(e,t={}){super(e,t),this.events=this.events.registerNames(Oo),this.isVector=!0,this._hasImageryTiles=!1,this.scaleByDistance=t.scaleByDistance||[nt,nt,nt],this.pickingScale=t.pickingScale||1,this.async=t.async!==void 0?t.async:!0,this.clampToGround=t.clampToGround||!1,this.relativeToGround=t.relativeToGround||!1,this._nodeCapacity=t.nodeCapacity||30,this._entities=No(t.entities||[]),this._labelMaxLetters=t.labelMaxLetters||24,this._stripEntityCollection=new _t({pickingEnabled:this.pickingEnabled}),this._bindEventsDefault(this._stripEntityCollection),this._polylineEntityCollection=new _t({pickingEnabled:this.pickingEnabled}),this._bindEventsDefault(this._polylineEntityCollection),this._geoObjectEntityCollection=new _t({pickingEnabled:this.pickingEnabled}),this._bindEventsDefault(this._geoObjectEntityCollection),this._geometryHandler=new Qe(this),this._entityCollectionsTree=null,this._entityCollectionsTreeNorth=null,this._entityCollectionsTreeSouth=null,this._renderingNodes={},this._renderingNodesNorth={},this._renderingNodesSouth={},this._counter=0,this._deferredEntitiesPendingQueue=new lr,this._pendingsQueue=[],this.setEntities(this._entities),this.polygonOffsetUnits=t.polygonOffsetUnits!=null?t.polygonOffsetUnits:0,this.pickingEnabled=this._pickingEnabled,this._secondPASS=[]}get labelMaxLetters(){return this._labelMaxLetters}get instanceName(){return"Vector"}_bindPicking(){this._pickingColor.clear()}addTo(e){this._planet||(this._assignPlanet(e),this._geometryHandler.assignHandler(e.renderer.handler),this._polylineEntityCollection.addTo(e,!0),this._stripEntityCollection.addTo(e,!0),this._geoObjectEntityCollection.addTo(e,!0),this.setEntities(this._entities))}remove(){return super.remove(),this._polylineEntityCollection.remove(),this._stripEntityCollection.remove(),this._geoObjectEntityCollection.remove(),this}getEntities(){return[].concat(this._entities)}add(e,t=!1){return e._layer||e._entityCollection||(e._layer=this,e._layerIndex=this._entities.length,this._entities.push(e),this._proceedEntity(e,t)),this}insert(e,t,i=!1){if(!(e._layer||e._entityCollection)){e._layer=this,e._layerIndex=t,this._entities.splice(t,0,e);for(let r=t+1,s=this._entities.length;r<s;r++)this._entities[r]._layerIndex=r;this._proceedEntity(e,i)}return this}_proceedEntity(e,t=!1){let i=this._hasImageryTiles;e.strip&&this._stripEntityCollection.add(e),(e.polyline||e.ray)&&this._polylineEntityCollection.add(e),e.geoObject&&this._geoObjectEntityCollection.add(e),e.geometry&&(this._hasImageryTiles=!0,this._planet&&(this._planet.renderer.assignPickingColor(e),this._geometryHandler.add(e.geometry))),(e.billboard||e.label||e.geoObject)&&this._planet&&(e._cartesian.isZero()&&!e._lonLat.isZero()?e._setCartesian3vSilent(this._planet.ellipsoid.lonLatToCartesian(e._lonLat)):e._lonLat=this._planet.ellipsoid.cartesianToLonLat(e._cartesian),e._lonLat.lat>ce?(this._entityCollectionsTreeNorth.__setLonLat__(e),this._entityCollectionsTreeNorth.insertEntity(e,t)):e._lonLat.lat<Re?(this._entityCollectionsTreeSouth.__setLonLat__(e),this._entityCollectionsTreeSouth.insertEntity(e,t)):(this._entityCollectionsTree.__setLonLat__(e),this._entityCollectionsTree.insertEntity(e,t))),this._planet&&this._hasImageryTiles!==i&&this._planet.updateVisibleLayers(),this.events.dispatch(this.events.entityadd,e)}addEntities(e,t=!1){let i=e.length;for(;i--;)this.add(e[i],t);return this}removeEntity(e){if(e._layer&&this.isEqual(e._layer)){if(this._entities.splice(e._layerIndex,1),this._reindexEntitiesArray(e._layerIndex),e._layer=null,e._layerIndex=-1,e._entityCollection){e._entityCollection._removeEntitySilent(e);let t=e._nodePtr;for(;t;)t.count--,t=t.parentNode;e._nodePtr&&e._nodePtr.count===0&&e._nodePtr.deferredEntities.length===0&&(e._nodePtr.entityCollection=null)}else if(e._nodePtr&&e._nodePtr.deferredEntities.length){let t=e._nodePtr.deferredEntities,i=t.length;for(;i--;)if(t[i].id===e.id){t.splice(i,1);let r=e._nodePtr;for(;r;)r.count--,r=r.parentNode;break}}e.geometry&&this._planet&&(this._geometryHandler.remove(e.geometry),this._planet.renderer.clearPickingColor(e)),e._nodePtr=void 0,this.events.dispatch(this.events.entityremove,e)}return this}set pickingEnabled(e){this._pickingEnabled=e,this._stripEntityCollection.setPickingEnabled(e),this._polylineEntityCollection.setPickingEnabled(e),this._geoObjectEntityCollection.setPickingEnabled(e),this._entityCollectionsTree&&this._entityCollectionsTree.traverseTree(t=>{t.entityCollection.setPickingEnabled(e)}),this._entityCollectionsTreeNorth&&this._entityCollectionsTreeNorth.traverseTree(t=>{t.entityCollection.setPickingEnabled(e)}),this._entityCollectionsTreeSouth&&this._entityCollectionsTreeSouth.traverseTree(t=>{t.entityCollection.setPickingEnabled(e)})}_reindexEntitiesArray(e){const t=this._entities;for(let i=e;i<t.length;i++)t[i]._layerIndex=i}removeEntities(e){let t=e.length;for(;t--;)this.removeEntity(e[t]);return this}clear(){let e=new Array(this._entities.length);for(let i=0;i<e.length;i++)e[i]=this._entities[i];let t=this._entities.length;for(;t--;)this._entities[t].remove();this._entities.length=0,this._entities=[];for(let i=0;i<e.length;i++)this._entities[i]=e[i];this._entityCollectionsTree=null,this._entityCollectionsTreeNorth=null,this._entityCollectionsTreeSouth=null}each(e){let t=this._entities,i=t.length;for(;i--;)e(t[i],i)}setEntities(e){let t=new Array(e.length);for(let r=0,s=e.length;r<s;r++)t[r]=e[r];this.clear(),this._entities=new Array(t.length);let i=[];for(let r=0;r<t.length;r++){let s=t[r];s._layer=this,s._layerIndex=r,s.strip?this._stripEntityCollection.add(s):s.polyline||s.ray?this._polylineEntityCollection.add(s):s.geoObject?this._geoObjectEntityCollection.add(s):(s.billboard||s.label)&&i.push(s),s.geometry&&(this._hasImageryTiles=!0,this._planet&&(this._planet.renderer.assignPickingColor(s),this._geometryHandler.add(s.geometry))),this._entities[r]=s}return this._createEntityCollectionsTree(i),this}_createEntityCollectionsTree(e){if(this._planet){this._entityCollectionsTree=new gt(this,$,null,0,U.createFromArray([-2003750834e-2,-2003750834e-2,2003750834e-2,2003750834e-2]),this._planet,0),this._entityCollectionsTreeNorth=new mt(this,$,null,0,U.createFromArray([-180,ce,180,90]),this._planet,0),this._entityCollectionsTreeSouth=new mt(this,$,null,0,U.createFromArray([-180,-90,180,Re]),this._planet,0);for(let t=0,i=e.length;t<i;t++){let r=e[t];r._lonLat.lat>ce?this._entityCollectionsTreeNorth.__setLonLat__(r):r._lonLat.lat<Re?this._entityCollectionsTreeSouth.__setLonLat__(r):this._entityCollectionsTree.__setLonLat__(r)}this._entityCollectionsTree.buildTree(e),this._entityCollectionsTreeNorth.buildTree(e),this._entityCollectionsTreeSouth.buildTree(e)}}_bindEventsDefault(e){let t=this.events;e.events.on("mousemove",i=>{t.dispatch(t.mousemove,i)}),e.events.on("mouseenter",i=>{t.dispatch(t.mouseenter,i)}),e.events.on("mouseleave",i=>{t.dispatch(t.mouseleave,i)}),e.events.on("lclick",i=>{t.dispatch(t.lclick,i)}),e.events.on("rclick",i=>{t.dispatch(t.rclick,i)}),e.events.on("mclick",i=>{t.dispatch(t.mclick,i)}),e.events.on("ldblclick",i=>{t.dispatch(t.ldblclick,i)}),e.events.on("rdblclick",i=>{t.dispatch(t.rdblclick,i)}),e.events.on("mdblclick",i=>{t.dispatch(t.mdblclick,i)}),e.events.on("lup",i=>{t.dispatch(t.lup,i)}),e.events.on("rup",i=>{t.dispatch(t.rup,i)}),e.events.on("mup",i=>{t.dispatch(t.mup,i)}),e.events.on("ldown",i=>{t.dispatch(t.ldown,i)}),e.events.on("rdown",i=>{t.dispatch(t.rdown,i)}),e.events.on("mdown",i=>{t.dispatch(t.mdown,i)}),e.events.on("lhold",i=>{t.dispatch(t.lhold,i)}),e.events.on("rhold",i=>{t.dispatch(t.rhold,i)}),e.events.on("mhold",i=>{t.dispatch(t.mhold,i)}),e.events.on("mousewheel",i=>{t.dispatch(t.mousewheel,i)}),e.events.on("touchmove",i=>{t.dispatch(t.touchmove,i)}),e.events.on("touchstart",i=>{t.dispatch(t.touchstart,i)}),e.events.on("touchend",i=>{t.dispatch(t.touchend,i)}),e.events.on("doubletouch",i=>{t.dispatch(t.doubletouch,i)}),e.events.on("touchleave",i=>{t.dispatch(t.touchleave,i)}),e.events.on("touchenter",i=>{t.dispatch(t.touchenter,i)})}_collectStripCollectionPASS(e){let t=this._stripEntityCollection;t._fadingOpacity=this._fadingOpacity,t.scaleByDistance=this.scaleByDistance,t.pickingScale=this.pickingScale,t.polygonOffsetUnits=this.polygonOffsetUnits,e.push(t)}_collectPolylineCollectionPASS(e){let t=this._polylineEntityCollection;if(t._fadingOpacity=this._fadingOpacity,t.scaleByDistance=this.scaleByDistance,t.pickingScale=this.pickingScale,t.polygonOffsetUnits=this.polygonOffsetUnits,e.push(t),this.clampToGround||this.relativeToGround){let i=Number(this.relativeToGround);const r=this._planet._renderedNodes,s=this._planet.getViewExtent();let n=t._entities,a=n.length,o=new p;for(;a--;){let l=n[a].polyline;if(l&&s.overlaps(l._extent)){let h=l._pathLonLatMerc,d=h.length;for(;d--;){let f=h[d].length;for(;f--;){let u=h[d][f],g=r.length;for(;g--;){let _=r[g].segment;if(_._extent.isInside(u)){let m=l._path3v[d][f];_.getTerrainPoint(m,u,o);let v=i&&l.altitude||0;if(v){let b=this._planet.ellipsoid.getSurfaceNormal3v(o);l.setPoint3v(o.addA(b.scale(v)),f,d,!0)}else l.setPoint3v(o,f,d,!0);break}}}}}}}}_collectGeoObjectCollectionPASS(e){let t=this._geoObjectEntityCollection;t._fadingOpacity=this._fadingOpacity,t.scaleByDistance=this.scaleByDistance,t.pickingScale=this.pickingScale,t.polygonOffsetUnits=this.polygonOffsetUnits,e.push(t)}collectVisibleCollections(e){let t=this._planet;if(this._fading&&this._fadingOpacity>0||this.minZoom<=t.maxCurrZoom&&this.maxZoom>=t.maxCurrZoom){this._renderingNodes={},this._renderingNodesNorth={},this._renderingNodesSouth={},this._collectStripCollectionPASS(e),this._collectPolylineCollectionPASS(e),this._collectGeoObjectCollectionPASS(e),this._secondPASS=[],this._entityCollectionsTree&&this._entityCollectionsTree.collectRenderCollectionsPASS1(t._visibleNodes,e);let i=this._secondPASS.length;for(;i--;)this._secondPASS[i].collectRenderCollectionsPASS2(t._visibleNodes,e,this._secondPASS[i].nodeId);for(this._secondPASS=[],this._entityCollectionsTreeNorth&&this._entityCollectionsTreeNorth.collectRenderCollectionsPASS1(t._visibleNodesNorth,e),i=this._secondPASS.length;i--;)this._secondPASS[i].collectRenderCollectionsPASS2(t._visibleNodesNorth,e,this._secondPASS[i].nodeId);for(this._secondPASS=[],this._entityCollectionsTreeSouth&&this._entityCollectionsTreeSouth.collectRenderCollectionsPASS1(t._visibleNodesSouth,e),i=this._secondPASS.length;i--;)this._secondPASS[i].collectRenderCollectionsPASS2(t._visibleNodesSouth,e,this._secondPASS[i].nodeId)}}_queueDeferredNode(e){this._visibility&&(e._inTheQueue=!0,this._counter>=1?this._deferredEntitiesPendingQueue.push(e):this._execDeferredNode(e))}_execDeferredNode(e){this._counter++,setTimeout(()=>{if(e.applyCollection(),this._counter--,this._deferredEntitiesPendingQueue.length&&this._counter<1)for(;this._deferredEntitiesPendingQueue.length;){let t=this._deferredEntitiesPendingQueue.pop();if(t._inTheQueue=!1,t.isVisible()){this._execDeferredNode(t);return}}},0)}loadMaterial(e){const t=e.segment;this._isBaseLayer?e.texture=t._isNorth?t.planet.solidTextureOne:t.planet.solidTextureTwo:e.texture=t.planet.transparentTexture,this._planet.layerLock.isFree()&&(e.isReady=!1,e.isLoading=!0,this._planet._vectorTileCreator.add(e))}abortMaterialLoading(e){e.isLoading=!1,e.isReady=!1}applyMaterial(e,t=!1){if(e.isReady)return[0,0,1,1];{!e.isLoading&&this.loadMaterial(e);const i=e.segment;let r=i.node,s=!1,n=this.__id,a=e;for(;r.parentNode;){if(a&&a.isReady){s=!0;break}r=r.parentNode,a=r.segment.materials[n]}if(s){e.appliedNodeId=r.nodeId,e.texture=a.texture,e.pickingMask=a.pickingMask;const o=1/(2<<i.tileZoom-r.segment.tileZoom-1);return[i.tileX*o-r.segment.tileX,i.tileY*o-r.segment.tileY,o,o]}else return e.textureExists&&e._updateTexture?(e.texture=e._updateTexture,e.pickingMask=e._updatePickingMask):(e.texture=i.planet.transparentTexture,e.pickingMask=i.planet.transparentTexture),e.pickingReady=!0,[0,0,1,1]}}clearMaterial(e){if(e.isReady){const t=e.segment.handler.gl;e.isReady=!1,e.pickingReady=!1;let i=e.texture;e.texture=null,i&&!i.default&&t.deleteTexture(i),i=e.pickingMask,e.pickingMask=null,i&&!i.default&&t.deleteTexture(i),i=e._updateTexture,e._updateTexture=null,i&&!i.default&&t.deleteTexture(i),i=e._updatePickingMask,e._updatePickingMask=null,i&&!i.default&&t.deleteTexture(i)}this.abortMaterialLoading(e),e.isLoading=!1,e.textureExists=!1}update(){this._geometryHandler.update(),this.events.dispatch(this.events.draw,this)}}const Oo=["draw","entityadd","entityremove"];xe.createCylinder(1,1,2,20,1,!0,!1,0,-.5,0);const js=0,Ys=1,qs=2,Zt={ell:js,msl:Ys,gnd:qs},Ws=1e3,Xs=1/Ws,hr=.3048,Vo=1/hr,Zs=3.6,Uo=1/Zs,Go=3.28084,$s=hr*Xs,jo=1/$s,Ue=0,Je=1,et=2,Yo=3,qo=4,vt=5,Mt=6,Ks=7,Wo="--",Xo=["m","km","ft","s","h","m/s","km/h","ft/s"],Qs=[0,2,0,0,0,0,0,0];let he=[];he[Ue]=[],he[Ue][Ue]=c=>c,he[Ue][Je]=c=>c*Xs,he[Ue][et]=c=>c*Vo,he[et]=[],he[et][Ue]=c=>c*hr,he[et][Je]=c=>c*$s,he[et][et]=c=>c,he[Je]=[],he[Je][Ue]=c=>c*Ws,he[Je][Je]=c=>c,he[Je][et]=c=>c*jo,he[vt]=[],he[vt][vt]=c=>c,he[vt][Mt]=c=>c*Zs,he[vt][Ks]=c=>c*Go,he[Mt]=[],he[Mt][vt]=c=>c*Uo,he[Mt][Mt]=c=>c;function Js(c,e,t){return he[c][e](t)}function cr(c,e,t,i,r){return c?Js(e,t,i).toFixed(r||Qs[t]):Wo}function en(c){return Xo[c]}const tn=Object.freeze(Object.defineProperty({__proto__:null,ELL:js,GND:qs,MSL:Ys,_tenth:Qs,convert:Js,convertExt:cr,ft:et,fts:Ks,h:qo,heightMode:Zt,km:Je,kmh:Mt,m:Ue,ms:vt,s:Yo,toString:en},Symbol.toStringTag,{value:"Module"})),Zo=`<div class="og-lat-side"></div><div class="og-lat-val"></div>
|
|
1438
|
+
}`}))}setRenderNode(e){this._renderer=e.renderer,this._initProgram();for(let t=0;t<this._strips.length;t++)this._strips[t].setRenderNode(e)}add(e){e._handlerIndex===-1&&(e._handler=this,e._handlerIndex=this._strips.length,this._strips.push(e),this._entityCollection&&this._entityCollection.renderNode&&e.setRenderNode(this._entityCollection.renderNode))}remove(e){let t=e._handlerIndex;t!==-1&&(e._deleteBuffers(),e._handlerIndex=-1,e._handler=null,this._strips.splice(t,1),this.reindexStripArray(t))}reindexStripArray(e){let t=this._strips;for(let i=e;i<t.length;i++)t[i]._handlerIndex=i}draw(){let e=this._strips.length;for(;e--;)this._strips[e].draw()}drawPicking(){if(this.pickingEnabled){let e=this._strips.length;for(;e--;)this._strips[e].drawPicking()}}clear(){let e=this._strips.length;for(;e--;)this._strips[e]._deleteBuffers(),this._strips[e]._handler=null,this._strips[e]._handlerIndex=-1;this._strips.length=0,this._strips=[]}}Ci.__counter__=0;class _t{constructor(e={}){this.__id=_t.__counter__++,this._renderNodeIndex=-1,this.renderNode=null,this._visibility=e.visibility==null?!0:e.visibility,this.polygonOffsetUnits=e.polygonOffsetUnits!=null?e.polygonOffsetUnits:0,this.billboardHandler=new Ya(this),this.labelHandler=new fo(this,e.labelMaxLetters),this.polylineHandler=new Ai(this),this.rayHandler=new Ei(this),this.pointCloudHandler=new Ti(this),this.stripHandler=new Ci(this),this.geoObjectHandler=new wi(this),e.pickingEnabled!=null&&this.setPickingEnabled(e.pickingEnabled),this._entities=[],this.scaleByDistance=e.scaleByDistance||[nt,nt,nt],this.pickingScale=e.pickingScale||1,this._opacity=e.opacity==null?1:e.opacity,this._fadingOpacity=this._opacity,this.events=this.rendererEvents=We(po,this),e.entities&&this.addEntities(e.entities)}get id(){return this.__id}isEqual(e){return this.__id===e.__id}setVisibility(e){this._visibility=e,this._fadingOpacity=this._opacity*(e?1:0),this.events.dispatch(this.events.visibilitychange,this)}getVisibility(){return this._visibility}setOpacity(e){this._opacity=e}setPickingEnabled(e){this.billboardHandler.pickingEnabled=e,this.labelHandler.pickingEnabled=e,this.polylineHandler.pickingEnabled=e,this.rayHandler.pickingEnabled=e,this.pointCloudHandler.pickingEnabled=e,this.stripHandler.pickingEnabled=e,this.geoObjectHandler.pickingEnabled=e}getOpacity(){return this._opacity}setScaleByDistance(e,t,i){this.scaleByDistance[0]=e,this.scaleByDistance[1]=t,this.scaleByDistance[2]=i||nt}appendChildEntity(e){this._addRecursively(e)}_addRecursively(e){e.billboard&&this.billboardHandler.add(e.billboard),e.label&&this.labelHandler.add(e.label),e.polyline&&this.polylineHandler.add(e.polyline),e.ray&&this.rayHandler.add(e.ray),e.pointCloud&&this.pointCloudHandler.add(e.pointCloud),e.strip&&this.stripHandler.add(e.strip),e.geoObject&&this.geoObjectHandler.add(e.geoObject),this.events.dispatch(this.events.entityadd,e);for(let t=0;t<e.childrenNodes.length;t++)e.childrenNodes[t]._entityCollection=this,e.childrenNodes[t]._entityCollectionIndex=e._entityCollectionIndex,e.childrenNodes[t]._pickingColor=e._pickingColor,this._addRecursively(e.childrenNodes[t])}add(e){if(!e._entityCollection){e._entityCollection=this,e._entityCollectionIndex=this._entities.length,this._entities.push(e);let t=this.renderNode;t&&(t.renderer&&t.renderer.assignPickingColor(e),t.ellipsoid&&e._cartesian.isZero()&&e.setCartesian3v(t.ellipsoid.lonLatToCartesian(e._lonLat))),this._addRecursively(e),e.setPickingColor()}return this}addEntities(e){for(let t=0,i=e.length;t<i;t++)this.add(e[t]);return this}belongs(e){return e._entityCollection&&this._renderNodeIndex===e._entityCollection._renderNodeIndex}_removeRecursively(e){e._entityCollection=null,e._entityCollectionIndex=-1,e.billboard&&this.billboardHandler.remove(e.billboard),e.label&&this.labelHandler.remove(e.label),e.polyline&&this.polylineHandler.remove(e.polyline),e.ray&&this.rayHandler.remove(e.ray),e.pointCloud&&this.pointCloudHandler.remove(e.pointCloud),e.strip&&this.stripHandler.remove(e.strip),e.geoObject&&this.geoObjectHandler.remove(e.geoObject);for(let t=0;t<e.childrenNodes.length;t++)this._removeRecursively(e.childrenNodes[t])}removeEntity(e){this._entities.splice(e._entityCollectionIndex,1),this.reindexEntitiesArray(e._entityCollectionIndex),this.renderNode&&this.renderNode.renderer&&(this.renderNode.renderer.clearPickingColor(e),e._pickingColor.clear()),this.belongs(e)&&this._removeRecursively(e),this.events.dispatch(this.events.entityremove,e)}_removeEntitySilent(e){this._entities.splice(e._entityCollectionIndex,1),this.reindexEntitiesArray(e._entityCollectionIndex),this.renderNode&&this.renderNode.renderer&&(this.renderNode.renderer.clearPickingColor(e),e._pickingColor.clear()),this.belongs(e)&&this._removeRecursively(e)}createPickingColors(){if(!(this.renderNode&&this.renderNode.renderer))return;let e=this._entities;for(let t=0;t<e.length;t++)e[t].parent||(this.renderNode.renderer.assignPickingColor(e[t]),e[t].setPickingColor())}reindexEntitiesArray(e){let t=this._entities;for(let i=e;i<t.length;i++)t[i]._entityCollectionIndex=i}addTo(e,t=!1){return this.renderNode||(this.renderNode=e,t||(this._renderNodeIndex=e.entityCollections.length,e.entityCollections.push(this)),e.ellipsoid&&this._updateGeodeticCoordinates(e.ellipsoid),this.bindRenderNode(e),this.events.dispatch(this.events.add,this)),this}bindRenderNode(e){e.renderer&&e.renderer.isInitialized()&&(this.billboardHandler.setRenderer(e.renderer),this.labelHandler.setRenderer(e.renderer),this.rayHandler.setRenderer(e.renderer),this.geoObjectHandler.setRenderNode(e),this.polylineHandler.setRenderNode(e),this.pointCloudHandler.setRenderNode(e),this.stripHandler.setRenderNode(e),this.updateBillboardsTextureAtlas(),this.updateLabelsFontAtlas(),this.createPickingColors())}_updateGeodeticCoordinates(e){let t=this._entities,i=t.length;for(;i--;){let r=t[i];r._lonLat&&r.setCartesian3v(e.lonLatToCartesian(r._lonLat))}}updateBillboardsTextureAtlas(){let e=this.billboardHandler.billboards;for(let t=0;t<e.length;t++)e[t].setSrc(e[t].getSrc())}updateLabelsFontAtlas(){this.renderNode&&this.labelHandler.updateFonts()}remove(){if(this.renderNode){if(this._renderNodeIndex!==-1){this.renderNode.entityCollections.splice(this._renderNodeIndex,1);for(let e=this._renderNodeIndex;e<this.renderNode.entityCollections.length;e++)this.renderNode.entityCollections[e]._renderNodeIndex=e}this.renderNode=null,this._renderNodeIndex=-1,this.events.dispatch(this.events.remove,this)}}getEntities(){return[].concat(this._entities)}each(e){let t=this._entities.length;for(;t--;){let i=this._entities[t];i&&e(i)}}clear(){this.billboardHandler.clear(),this.labelHandler.clear(),this.polylineHandler.clear(),this.rayHandler.clear(),this.pointCloudHandler.clear(),this.stripHandler.clear(),this.geoObjectHandler.clear();let e=this._entities.length;for(;e--;){let t=this._entities[e];this.renderNode&&this.renderNode.renderer&&(this.renderNode.renderer.clearPickingColor(t),t._pickingColor.clear()),this._clearEntity(t)}this._entities.length=0,this._entities=[]}_clearEntity(e){e._entityCollection=null,e._entityCollectionIndex=-1;for(let t=0;t<e.childrenNodes.length;t++)this._clearEntity(e.childrenNodes[t])}}_t.__counter__=0;const po=["draw","drawend","add","remove","entityadd","entityremove","visibilitychange","mousemove","mouseenter","mouseleave","lclick","rclick","mclick","ldblclick","rdblclick","mdblclick","lup","rup","mup","ldown","rdown","mdown","lhold","rhold","mhold","mousewheel","touchmove","touchstart","touchend","doubletouch","touchleave","touchenter"];class gt{constructor(e,t,i,r,s,n,a){this.layer=e,this.parentNode=i,this.childrenNodes=[],this.partId=t,this.nodeId=t+r,this.state=null,this.extent=s,this.count=0,this.deferredEntities=[],this.entityCollection=null,this.zoom=a,this._inTheQueue=!1,this.bsphere=new Ze,n&&this._setExtentBounds()}insertEntity(e,t=!1){this.buildTree([e],t)}_addEntitiesToCollection(e,t=!1){if(e.length){const i=this.layer,r=i._planet;let s=this.entityCollection;s||(s=new _t({pickingEnabled:i._pickingEnabled,labelMaxLetters:i.labelMaxLetters}),s._layer=this.layer,s.addTo(r,!0),s._quadNode=this,i._bindEventsDefault(s),this.entityCollection=s),t||!i.async?this.entityCollection.addEntities(e):this.deferredEntities.push.apply(this.deferredEntities,e)}}_setExtentBounds(){this.nodeId?this.bsphere.setFromExtent(this.layer._planet.ellipsoid,this.extent.inverseMercator()):(this.bsphere.radius=this.layer._planet.ellipsoid.equatorialSize,this.bsphere.center=new p)}__setLonLat__(e){return e._lonLat.isZero()&&!e._cartesian.isZero()&&(e._lonLat=this.layer._planet.ellipsoid.cartesianToLonLat(e._cartesian)),Math.abs(e._lonLat.lat)<ce?e._lonLatMerc=e._lonLat.forwardMercator():e._lonLatMerc=new B,e._lonLatMerc}buildTree(e,t=!1){if(this.count+=e.length,e.length>this.layer._nodeCapacity){const i=this.childrenNodes;i.length||this.createChildrenNodes();let r=[],s=[],n=[],a=[],o=e.length;for(;o--;){const l=e[o];i[$].isInside(l)?(l._nodePtr=i[$],r.push(l)):i[ue].isInside(l)?(l._nodePtr=i[ue],s.push(l)):i[_e].isInside(l)?(l._nodePtr=i[_e],n.push(l)):i[ge].isInside(l)&&(l._nodePtr=i[ge],a.push(l))}r.length&&i[$].buildTree(r,t),s.length&&i[ue].buildTree(s,t),n.length&&i[_e].buildTree(n,t),a.length&&i[ge].buildTree(a,t)}else this._addEntitiesToCollection(e,t)}isInside(e){return e._lonLatMerc?this.extent.isInside(e._lonLatMerc):!1}createChildrenNodes(){const e=this.layer,t=this.extent,i=t.getWidth()*.5,r=t.getHeight()*.5,s=t.northEast,n=t.southWest,a=this.nodeId*4+1,o=new B(n.lon+i,n.lat+r),l=this.childrenNodes,h=this.layer._planet,d=this.zoom+1;l[$]=new gt(e,$,this,a,new U(new B(n.lon,n.lat+r),new B(n.lon+i,s.lat)),h,d),l[ue]=new gt(e,ue,this,a,new U(o,new B(s.lon,s.lat)),h,d),l[_e]=new gt(e,_e,this,a,new U(new B(n.lon,n.lat),o),h,d),l[ge]=new gt(e,ge,this,a,new U(new B(n.lon+i,n.lat),new B(s.lon,n.lat+r)),h,d)}collectRenderCollectionsPASS1(e,t){const i=e[this.nodeId];if(i){const r=this.childrenNodes;this.entityCollection?this.renderCollection(t,e):r.length&&(i.state===$e?this.layer._secondPASS.push(this):(r[$].collectRenderCollectionsPASS1(e,t),r[ue].collectRenderCollectionsPASS1(e,t),r[_e].collectRenderCollectionsPASS1(e,t),r[ge].collectRenderCollectionsPASS1(e,t)))}}collectRenderCollectionsPASS2(e,t,i){const s=this.layer._planet.camera,n=s.eye.distance(this.bsphere.center)-this.bsphere.radius<Jr*Math.sqrt(s._lonLat.height)||s._lonLat.height>1e4;if(this.count>0&&n&&s.frustum.containsSphere(this.bsphere)){const a=this.childrenNodes;this.entityCollection?this.renderCollection(t,e,i):a.length&&(a[$].collectRenderCollectionsPASS2(e,t,i),a[ue].collectRenderCollectionsPASS2(e,t,i),a[_e].collectRenderCollectionsPASS2(e,t,i),a[ge].collectRenderCollectionsPASS2(e,t,i))}}applyCollection(){this.entityCollection.addEntities(this.deferredEntities),this.deferredEntities.length=0,this.deferredEntities=[],this._inTheQueue=!1}traverseTree(e){const t=this.childrenNodes;this.entityCollection?e(this):t.length&&(t[$].traverseTree(e),t[ue].traverseTree(e),t[_e].traverseTree(e),t[ge].traverseTree(e))}renderCollection(e,t,i){const r=this.layer;r._renderingNodes[this.nodeId]=!0,this.deferredEntities.length&&!this._inTheQueue&&(r.async?r._queueDeferredNode(this):this.applyCollection());const s=this.entityCollection;if(s._fadingOpacity=r._fadingOpacity,s.scaleByDistance=r.scaleByDistance,s.pickingScale=r.pickingScale,s.polygonOffsetUnits=r.polygonOffsetUnits,e.push(s),r.clampToGround||r.relativeToGround){const n=s._entities;let a=n.length;if(t[this.nodeId]&&t[this.nodeId].state===$e)for(;a--;){let o=n[a];this.alignEntityToTheGround(o,t[this.nodeId].segment)}else if(i)for(;a--;){let o=n[a];this.alignEntityToTheGround(o,t[i].segment)}else{const o=r._planet._renderedNodes;for(;a--;){let l=n[a],h=o.length;for(;h--;)if(o[h].segment.isEntityInside(l)){this.alignEntityToTheGround(l,o[h].segment);break}}}}}alignEntityToTheGround(e,t){let i=new p;t.getEntityTerrainPoint(e,i);let r=Number(this.layer.relativeToGround)&&e._altitude||0;if(r){let s=this.layer._planet.ellipsoid.getSurfaceNormal3v(i);e._setCartesian3vSilent(i.addA(s.scale(r)))}else e._setCartesian3vSilent(i)}isVisible(){return!!this.layer._renderingNodes[this.nodeId]}}class mt extends gt{constructor(e,t,i,r,s,n,a){super(e,t,i,r,s,n,a),this.isNorth=!1}createChildrenNodes(){const e=this.layer,t=this.extent,i=t.getWidth()*.5,r=t.getHeight()*.5,s=t.northEast,n=t.southWest,a=this.nodeId*4+1,o=new B(n.lon+i,n.lat+r),l=this.childrenNodes,h=this.layer._planet,d=this.zoom+1;l[$]=new mt(e,$,this,a,new U(new B(n.lon,n.lat+r),new B(n.lon+i,s.lat)),h,d),l[ue]=new mt(e,ue,this,a,new U(o,new B(s.lon,s.lat)),h,d),l[_e]=new mt(e,_e,this,a,new U(new B(n.lon,n.lat),o),h,d),l[ge]=new mt(e,ge,this,a,new U(new B(n.lon+i,n.lat),new B(s.lon,n.lat+r)),h,d)}_setExtentBounds(){this.extent.northEast.lat>0&&(this.isNorth=!0),this.bsphere.setFromExtent(this.layer._planet.ellipsoid,this.extent)}__setLonLat__(e){return e._lonLat.isZero()&&(e._lonLat=this.layer._planet.ellipsoid.cartesianToLonLat(e._cartesian)),e._lonLat}isVisible(){return this.isNorth&&this.layer._renderingNodesNorth[this.nodeId]?!0:!!this.layer._renderingNodesSouth[this.nodeId]}isInside(e){return this.extent.isInside(e._lonLat)}renderCollection(e,t,i){this.isNorth?this.layer._renderingNodesNorth[this.nodeId]=!0:this.layer._renderingNodesSouth[this.nodeId]=!0,this.deferredEntities.length&&!this._inTheQueue&&(this.layer.async?this.layer._queueDeferredNode(this):this.applyCollection());const r=this.entityCollection;r._fadingOpacity=this.layer._fadingOpacity,r.scaleByDistance=this.layer.scaleByDistance,r.pickingScale=this.layer.pickingScale,e.push(r)}}function vo(c,e=!1){let t=1-zr(128,c[0])*2,i=2*Oi(c[0],128)+zr(128,c[1])-127,r=Oi(c[1],128)*65536+c[2]*256+(e&&c[3]||0)+8388608;return t*Un(i)*(r*11920928955078125e-23)}function Lt(c,e){if(c>=0){let t=Math.floor(c/65536)*65536;e[0]=Math.fround(t),e[1]=Math.fround(c-t)}else{let t=Math.floor(-c/65536)*65536;e[0]=Math.fround(-t),e[1]=Math.fround(c+t)}return e}function Bs(c,e){if(c>=0){let t=Math.floor(c/65536)*65536;e.x=Math.fround(t),e.y=Math.fround(c-t)}else{let t=Math.floor(-c/65536)*65536;e.x=Math.fround(-t),e.y=Math.fround(c+t)}return e}function Ms(c,e,t){t=t||2;var i=e&&e.length,r=i?e[0]*t:c.length,s=Rs(c,0,r,t,!0),n=[];if(!s)return n;var a,o,l,h,d,f,u;if(i&&(s=To(c,e,s,t)),c.length>80*t){a=l=c[0],o=h=c[1];for(let g=t;g<r;g+=t)d=c[g],f=c[g+1],d<a&&(a=d),f<o&&(o=f),d>l&&(l=d),f>h&&(h=f);u=Math.max(l-a,h-o)}return Yt(s,n,t,a,o,u),n}function Rs(c,e,t,i,r){var s,n;if(r===Io(c,e,t,i)>0)for(s=e;s<t;s+=i)n=zs(s,c[s],c[s+1],n);else for(s=t-i;s>=e;s-=i)n=zs(s,c[s],c[s+1],n);return n&&pt(n,n.next)&&(Wt(n),n=n.next),n}function jt(c,e){if(!c)return c;e||(e=c);var t=c,i;do if(i=!1,!t.steiner&&(pt(t,t.next)||Ce(t.prev,t,t.next)===0)){if(Wt(t),t=e=t.prev,t===t.next)return null;i=!0}else t=t.next;while(i||t!==e);return e}function Yt(c,e,t,i,r,s,n){if(c){!n&&s&&Po(c,i,r,s);for(var a=c,o,l;c.prev!==c.next;){if(o=c.prev,l=c.next,s?yo(c,i,r,s):xo(c)){e.push(o.i/t),e.push(c.i/t),e.push(l.i/t),Wt(c),c=l.next,a=l.next;continue}if(c=l,c===a){n?n===1?(c=bo(c,e,t),Yt(c,e,t,i,r,s,2)):n===2&&wo(c,e,t,i,r,s):Yt(jt(c),e,t,i,r,s,1);break}}}}function xo(c){var e=c.prev,t=c,i=c.next;if(Ce(e,t,i)>=0)return!1;for(var r=c.next.next;r!==c.prev;){if(Pi(e.x,e.y,t.x,t.y,i.x,i.y,r.x,r.y)&&Ce(r.prev,r,r.next)>=0)return!1;r=r.next}return!0}function yo(c,e,t,i){var r=c.prev,s=c,n=c.next;if(Ce(r,s,n)>=0)return!1;for(var a=r.x<s.x?r.x<n.x?r.x:n.x:s.x<n.x?s.x:n.x,o=r.y<s.y?r.y<n.y?r.y:n.y:s.y<n.y?s.y:n.y,l=r.x>s.x?r.x>n.x?r.x:n.x:s.x>n.x?s.x:n.x,h=r.y>s.y?r.y>n.y?r.y:n.y:s.y>n.y?s.y:n.y,d=nr(a,o,e,t,i),f=nr(l,h,e,t,i),u=c.nextZ;u&&u.z<=f;){if(u!==c.prev&&u!==c.next&&Pi(r.x,r.y,s.x,s.y,n.x,n.y,u.x,u.y)&&Ce(u.prev,u,u.next)>=0)return!1;u=u.nextZ}for(u=c.prevZ;u&&u.z>=d;){if(u!==c.prev&&u!==c.next&&Pi(r.x,r.y,s.x,s.y,n.x,n.y,u.x,u.y)&&Ce(u.prev,u,u.next)>=0)return!1;u=u.prevZ}return!0}function bo(c,e,t){var i=c;do{var r=i.prev,s=i.next.next;!pt(r,s)&&Ss(r,i,i.next,s)&&qt(r,s)&&qt(s,r)&&(e.push(r.i/t),e.push(i.i/t),e.push(s.i/t),Wt(i),Wt(i.next),i=c=s),i=i.next}while(i!==c);return i}function wo(c,e,t,i,r,s){var n=c;do{for(var a=n.next.next;a!==n.prev;){if(n.i!==a.i&&Mo(n,a)){var o=Is(n,a);n=jt(n,n.next),o=jt(o,o.next),Yt(n,e,t,i,r,s),Yt(o,e,t,i,r,s);return}a=a.next}n=n.next}while(n!==c)}function To(c,e,t,i){var r=[],s,n,a,o,l;for(s=0,n=e.length;s<n;s++)a=e[s]*i,o=s<n-1?e[s+1]*i:c.length,l=Rs(c,a,o,i,!1),l===l.next&&(l.steiner=!0),r.push(Bo(l));for(r.sort(Ao),s=0;s<r.length;s++)Eo(r[s],t),t=jt(t,t.next);return t}function Ao(c,e){return c.x-e.x}function Eo(c,e){if(e=Co(c,e),e){var t=Is(e,c);jt(t,t.next)}}function Co(c,e){var t=e,i=c.x,r=c.y,s=-1/0,n;do{if(r<=t.y&&r>=t.next.y&&t.next.y!==t.y){var a=t.x+(r-t.y)*(t.next.x-t.x)/(t.next.y-t.y);if(a<=i&&a>s){if(s=a,a===i){if(r===t.y)return t;if(r===t.next.y)return t.next}n=t.x<t.next.x?t:t.next}}t=t.next}while(t!==e);if(!n)return null;if(i===s)return n.prev;var o=n,l=n.x,h=n.y,d=1/0,f;for(t=n.next;t!==o;)i>=t.x&&t.x>=l&&i!==t.x&&Pi(r<h?i:s,r,l,h,r<h?s:i,r,t.x,t.y)&&(f=Math.abs(r-t.y)/(i-t.x),(f<d||f===d&&t.x>n.x)&&qt(t,c)&&(n=t,d=f)),t=t.next;return n}function Po(c,e,t,i){var r=c;do r.z===null&&(r.z=nr(r.x,r.y,e,t,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next;while(r!==c);r.prevZ.nextZ=null,r.prevZ=null,Lo(r)}function Lo(c){var e,t,i,r,s,n,a,o,l=1;do{for(t=c,c=null,s=null,n=0;t;){for(n++,i=t,a=0,e=0;e<l&&(a++,i=i.nextZ,!!i);e++);for(o=l;a>0||o>0&&i;)a!==0&&(o===0||!i||t.z<=i.z)?(r=t,t=t.nextZ,a--):(r=i,i=i.nextZ,o--),s?s.nextZ=r:c=r,r.prevZ=s,s=r;t=i}s.nextZ=null,l*=2}while(n>1);return c}function nr(c,e,t,i,r){return c=32767*(c-t)/r,e=32767*(e-i)/r,c=(c|c<<8)&16711935,c=(c|c<<4)&252645135,c=(c|c<<2)&858993459,c=(c|c<<1)&1431655765,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,c|e<<1}function Bo(c){var e=c,t=c;do e.x<t.x&&(t=e),e=e.next;while(e!==c);return t}function Pi(c,e,t,i,r,s,n,a){return(r-n)*(e-a)-(c-n)*(s-a)>=0&&(c-n)*(i-a)-(t-n)*(e-a)>=0&&(t-n)*(s-a)-(r-n)*(i-a)>=0}function Mo(c,e){return c.next.i!==e.i&&c.prev.i!==e.i&&!Ro(c,e)&&qt(c,e)&&qt(e,c)&&So(c,e)}function Ce(c,e,t){return(e.y-c.y)*(t.x-e.x)-(e.x-c.x)*(t.y-e.y)}function pt(c,e){return c.x===e.x&&c.y===e.y}function Ss(c,e,t,i){return pt(c,e)&&pt(t,i)||pt(c,i)&&pt(t,e)?!0:Ce(c,e,t)>0!=Ce(c,e,i)>0&&Ce(t,i,c)>0!=Ce(t,i,e)>0}function Ro(c,e){var t=c;do{if(t.i!==c.i&&t.next.i!==c.i&&t.i!==e.i&&t.next.i!==e.i&&Ss(t,t.next,c,e))return!0;t=t.next}while(t!==c);return!1}function qt(c,e){return Ce(c.prev,c,c.next)<0?Ce(c,e,c.next)>=0&&Ce(c,c.prev,e)>=0:Ce(c,e,c.prev)<0||Ce(c,c.next,e)<0}function So(c,e){var t=c,i=!1,r=(c.x+e.x)/2,s=(c.y+e.y)/2;do t.y>s!=t.next.y>s&&t.next.y!==t.y&&r<(t.next.x-t.x)*(s-t.y)/(t.next.y-t.y)+t.x&&(i=!i),t=t.next;while(t!==c);return i}function Is(c,e){var t=new ar(c.i,c.x,c.y),i=new ar(e.i,e.x,e.y),r=c.next,s=e.prev;return c.next=e,e.prev=c,t.next=r,r.prev=t,i.next=t,t.prev=i,s.next=i,i.prev=s,i}function zs(c,e,t,i){var r=new ar(c,e,t);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function Wt(c){c.next.prev=c.prev,c.prev.next=c.next,c.prevZ&&(c.prevZ.nextZ=c.nextZ),c.nextZ&&(c.nextZ.prevZ=c.prevZ)}function ar(c,e,t){this.i=c,this.x=e,this.y=t,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function Io(c,e,t,i){var r=0;for(let s=e,n=t-i;s<t;s+=i)r+=(c[n]-c[s])*(c[s+1]+c[n+1]),n=s;return r}function Fs(c){var e=c[0][0].length,t={vertices:[],holes:[],dimensions:e},i=0;for(let r=0;r<c.length;r++){for(let s=0;s<c[r].length;s++)for(let n=0;n<e;n++)t.vertices.push(c[r][s][n]);r>0&&(i+=c[r-1].length,t.holes.push(i))}return t}const ks=0,Ds=1,Ns=2,Hs=3,Os=4,zo=5,Vs=6,Us=7,Fo=8,Gs=9,ko=10,Do=11;function or(c,e,t){let i=c[0],r=c[1];if(i>=0){let s=Math.floor(i/65536)*65536;e.x=Math.fround(s),t.x=Math.fround(i-s)}else{let s=Math.floor(-i/65536)*65536;e.x=Math.fround(-s),t.x=Math.fround(i+s)}if(r>=0){let s=Math.floor(r/65536)*65536;e.y=Math.fround(s),t.y=Math.fround(r-s)}else{let s=Math.floor(-r/65536)*65536;e.y=Math.fround(-s),t.y=Math.fround(r+s)}}let N=new V,H=new V,Bt=new V;class Qe{constructor(e){this.__id=Qe.__counter__++,this._layer=e,this._handler=null,this._geometries=[],this._updatedGeometryArr=[],this._updatedGeometry={},this._removeGeometryExtentArr=[],this._removeGeometryExtents={},this._polyVerticesHighMerc=[],this._polyVerticesLowMerc=[],this._polyColors=[],this._polyPickingColors=[],this._polyIndexes=[],this._lineVerticesHighMerc=[],this._lineVerticesLowMerc=[],this._lineOrders=[],this._lineIndexes=[],this._lineColors=[],this._linePickingColors=[],this._lineThickness=[],this._lineStrokes=[],this._lineStrokeColors=[],this._polyVerticesHighBufferMerc=null,this._polyVerticesLowBufferMerc=null,this._polyColorsBuffer=null,this._polyPickingColorsBuffer=null,this._polyIndexesBuffer=null,this._lineVerticesHighBufferMerc=null,this._lineVerticesLowBufferMerc=null,this._lineColorsBuffer=null,this._linePickingColorsBuffer=null,this._lineThicknessBuffer=null,this._lineStrokesBuffer=null,this._lineStrokeColorsBuffer=null,this._lineOrdersBuffer=null,this._lineIndexesBuffer=null,this._buffersUpdateCallbacks=[],this._buffersUpdateCallbacks[ks]=this.createPolyVerticesBuffer,this._buffersUpdateCallbacks[Ds]=this.createPolyIndexesBuffer,this._buffersUpdateCallbacks[Ns]=this.createPolyColorsBuffer,this._buffersUpdateCallbacks[Hs]=this.createLineVerticesBuffer,this._buffersUpdateCallbacks[Os]=this.createLineIndexesBuffer,this._buffersUpdateCallbacks[zo]=this.createLineOrdersBuffer,this._buffersUpdateCallbacks[Vs]=this.createLineColorsBuffer,this._buffersUpdateCallbacks[Us]=this.createLineThicknessBuffer,this._buffersUpdateCallbacks[Fo]=this.createLineStrokesBuffer,this._buffersUpdateCallbacks[Gs]=this.createLineStrokeColorsBuffer,this._buffersUpdateCallbacks[ko]=this.createPolyPickingColorsBuffer,this._buffersUpdateCallbacks[Do]=this.createLinePickingColorsBuffer,this._changedBuffers=new Array(this._buffersUpdateCallbacks.length)}static appendLineData(e,t,i,r,s,n,a,o,l,h,d,f,u,g,_,m,v,b){var y=0;d.length>0?(y=d[d.length-5]+9,d.push(y,y)):d.push(0,0);var w=s,x=[i.x,i.y,i.z,i.w],T=a,A=[n.x,n.y,n.z,n.w],E=[r.x,r.y,r.z,1];for(let P=0;P<e.length;P++){var C=e[P];if(C.length===0)continue;let I=y,k;if(t)k=C[C.length-1];else{let L=C[0],S=C[1];S||(S=L),k=[L[0]+L[0]-S[0],L[1]+L[1]-S[1]]}or(k,N,H),o.push(N.x,N.y,N.x,N.y,N.x,N.y,N.x,N.y),l.push(H.x,H.y,H.x,H.y,H.x,H.y,H.x,H.y),v.push(N.x,N.y,N.x,N.y,N.x,N.y,N.x,N.y),b.push(H.x,H.y,H.x,H.y,H.x,H.y,H.x,H.y),h.push(1,-1,2,-2),g.push(w,w,w,w),m.push(T,T,T,T),f.push(x[0],x[1],x[2],x[3],x[0],x[1],x[2],x[3],x[0],x[1],x[2],x[3],x[0],x[1],x[2],x[3]),_.push(A[0],A[1],A[2],A[3],A[0],A[1],A[2],A[3],A[0],A[1],A[2],A[3],A[0],A[1],A[2],A[3]),u.push(E[0],E[1],E[2],E[3],E[0],E[1],E[2],E[3],E[0],E[1],E[2],E[3],E[0],E[1],E[2],E[3]);for(let L=0;L<C.length;L++){let S=C[L];or(S,N,H),o.push(N.x,N.y,N.x,N.y,N.x,N.y,N.x,N.y),l.push(H.x,H.y,H.x,H.y,H.x,H.y,H.x,H.y),v.push(N.x,N.y,N.x,N.y,N.x,N.y,N.x,N.y),b.push(H.x,H.y,H.x,H.y,H.x,H.y,H.x,H.y),h.push(1,-1,2,-2),g.push(w,w,w,w),m.push(T,T,T,T),f.push(x[0],x[1],x[2],x[3],x[0],x[1],x[2],x[3],x[0],x[1],x[2],x[3],x[0],x[1],x[2],x[3]),_.push(A[0],A[1],A[2],A[3],A[0],A[1],A[2],A[3],A[0],A[1],A[2],A[3],A[0],A[1],A[2],A[3]),u.push(E[0],E[1],E[2],E[3],E[0],E[1],E[2],E[3],E[0],E[1],E[2],E[3],E[0],E[1],E[2],E[3]),d.push(y++,y++,y++,y++)}let z;if(t)z=C[0],d.push(I,I+1,I+1,I+1);else{let L=C[C.length-1],S=C[C.length-2];S||(S=L),z=[L[0]+L[0]-S[0],L[1]+L[1]-S[1]],d.push(y-1,y-1,y-1,y-1)}or(z,N,H),o.push(N.x,N.y,N.x,N.y,N.x,N.y,N.x,N.y),l.push(H.x,H.y,H.x,H.y,H.x,H.y,H.x,H.y),v.push(N.x,N.y,N.x,N.y,N.x,N.y,N.x,N.y),b.push(H.x,H.y,H.x,H.y,H.x,H.y,H.x,H.y),h.push(1,-1,2,-2),g.push(w,w,w,w),m.push(T,T,T,T),f.push(x[0],x[1],x[2],x[3],x[0],x[1],x[2],x[3],x[0],x[1],x[2],x[3],x[0],x[1],x[2],x[3]),_.push(A[0],A[1],A[2],A[3],A[0],A[1],A[2],A[3],A[0],A[1],A[2],A[3],A[0],A[1],A[2],A[3]),u.push(E[0],E[1],E[2],E[3],E[0],E[1],E[2],E[3],E[0],E[1],E[2],E[3],E[0],E[1],E[2],E[3]),P<e.length-1&&(y+=8,d.push(y,y))}}assignHandler(e){this._handler=e,this.refresh(),e.isInitialized()&&this.update()}add(e){if(e._handlerIndex===-1){e._handler=this,e._handlerIndex=this._geometries.length,this._geometries.push(e);let t=e._entity._pickingColor.scaleTo(1/255);if(e._polyVerticesHighMerc=[],e._polyVerticesLowMerc=[],e._lineVerticesHighMerc=[],e._lineVerticesLowMerc=[],e._coordinates[0].length){if(e.type===Ne.POLYGON){let i=e._coordinates,r=[];for(let h=0;h<i.length;h++){r[h]=[];for(let d=0;d<i[h].length;d++)r[h][d]=[fi(i[h][d][0]),ui(i[h][d][1])]}let s=Fs(r),n=Ms(s.vertices,s.holes,2);e._polyVerticesHandlerIndex=this._polyVerticesHighMerc.length,e._polyIndexesHandlerIndex=this._polyIndexes.length;for(let h=0;h<n.length;h++)this._polyIndexes.push(n[h]+e._polyVerticesHandlerIndex*.5);let a=e._style.fillColor,o=[],l=[];for(let h=0;h<s.vertices.length*.5;h++)this._polyColors.push(a.x,a.y,a.z,a.w),this._polyPickingColors.push(t.x,t.y,t.z,1);for(let h=0;h<s.vertices.length;h++)Bs(s.vertices[h],Bt),o[h]=Bt.x,l[h]=Bt.y;e._polyVerticesHighMerc=o,e._polyVerticesLowMerc=l,this._polyVerticesHighMerc.push.apply(this._polyVerticesHighMerc,o),this._polyVerticesLowMerc.push.apply(this._polyVerticesLowMerc,l),e._polyVerticesLength=s.vertices.length,e._polyIndexesLength=n.length,e._lineVerticesHandlerIndex=this._lineVerticesHighMerc.length,e._lineOrdersHandlerIndex=this._lineOrders.length,e._lineIndexesHandlerIndex=this._lineIndexes.length,e._lineColorsHandlerIndex=this._lineColors.length,e._lineThicknessHandlerIndex=this._lineThickness.length,Qe.appendLineData(r,!0,e._style.lineColor,t,e._style.lineWidth,e._style.strokeColor,e._style.strokeWidth,this._lineVerticesHighMerc,this._lineVerticesLowMerc,this._lineOrders,this._lineIndexes,this._lineColors,this._linePickingColors,this._lineThickness,this._lineStrokeColors,this._lineStrokes,e._lineVerticesHighMerc,e._lineVerticesLowMerc),e._lineVerticesLength=this._lineVerticesHighMerc.length-e._lineVerticesHandlerIndex,e._lineOrdersLength=this._lineOrders.length-e._lineOrdersHandlerIndex,e._lineIndexesLength=this._lineIndexes.length-e._lineIndexesHandlerIndex,e._lineColorsLength=this._lineColors.length-e._lineColorsHandlerIndex,e._lineThicknessLength=this._lineThickness.length-e._lineThicknessHandlerIndex}else if(e.type===Ne.MULTIPOLYGON){let i=e._coordinates,r=[],s=[];e._lineVerticesHandlerIndex=this._lineVerticesHighMerc.length,e._lineOrdersHandlerIndex=this._lineOrders.length,e._lineIndexesHandlerIndex=this._lineIndexes.length,e._lineColorsHandlerIndex=this._lineColors.length,e._lineThicknessHandlerIndex=this._lineThickness.length;for(let l=0;l<i.length;l++){let h=i[l],d=[];for(let g=0;g<h.length;g++){d[g]=[];for(let _=0;_<i[l][g].length;_++)d[g][_]=[fi(h[g][_][0]),ui(h[g][_][1])]}let f=Fs(d),u=Ms(f.vertices,f.holes,2);for(let g=0;g<u.length;g++)s.push(u[g]+r.length*.5);r.push.apply(r,f.vertices),Qe.appendLineData(d,!0,e._style.lineColor,t,e._style.lineWidth,e._style.strokeColor,e._style.strokeWidth,this._lineVerticesHighMerc,this._lineVerticesLowMerc,this._lineOrders,this._lineIndexes,this._lineColors,this._linePickingColors,this._lineThickness,this._lineStrokeColors,this._lineStrokes,e._lineVerticesHighMerc,e._lineVerticesLowMerc)}e._polyVerticesHandlerIndex=this._polyVerticesHighMerc.length,e._polyIndexesHandlerIndex=this._polyIndexes.length;for(let l=0;l<s.length;l++)this._polyIndexes.push(s[l]+e._polyVerticesHandlerIndex*.5);let n=e._style.fillColor,a=[],o=[];for(let l=0;l<r.length*.5;l++)this._polyColors.push(n.x,n.y,n.z,n.w),this._polyPickingColors.push(t.x,t.y,t.z,1);for(let l=0;l<r.length;l++)Bs(r[l],Bt),a[l]=Bt.x,o[l]=Bt.y;e._polyVerticesHighMerc=a,e._polyVerticesLowMerc=o,this._polyVerticesHighMerc.push.apply(this._polyVerticesHighMerc,a),this._polyVerticesLowMerc.push.apply(this._polyVerticesLowMerc,o),e._polyVerticesLength=r.length,e._polyIndexesLength=s.length,e._lineVerticesLength=this._lineVerticesHighMerc.length-e._lineVerticesHandlerIndex,e._lineOrdersLength=this._lineOrders.length-e._lineOrdersHandlerIndex,e._lineIndexesLength=this._lineIndexes.length-e._lineIndexesHandlerIndex,e._lineColorsLength=this._lineColors.length-e._lineColorsHandlerIndex,e._lineThicknessLength=this._lineThickness.length-e._lineThicknessHandlerIndex}else if(e.type===Ne.LINESTRING){let i=e._coordinates,r=new Array(i.length);for(let s=0;s<i.length;s++)r[s]=[fi(i[s][0]),ui(i[s][1])];e._lineVerticesHandlerIndex=this._lineVerticesHighMerc.length,e._lineOrdersHandlerIndex=this._lineOrders.length,e._lineIndexesHandlerIndex=this._lineIndexes.length,e._lineColorsHandlerIndex=this._lineColors.length,e._lineThicknessHandlerIndex=this._lineThickness.length,Qe.appendLineData([r],!1,e._style.lineColor,t,e._style.lineWidth,e._style.strokeColor,e._style.strokeWidth,this._lineVerticesHighMerc,this._lineVerticesLowMerc,this._lineOrders,this._lineIndexes,this._lineColors,this._linePickingColors,this._lineThickness,this._lineStrokeColors,this._lineStrokes,e._lineVerticesHighMerc,e._lineVerticesLowMerc),e._lineVerticesLength=this._lineVerticesHighMerc.length-e._lineVerticesHandlerIndex,e._lineOrdersLength=this._lineOrders.length-e._lineOrdersHandlerIndex,e._lineIndexesLength=this._lineIndexes.length-e._lineIndexesHandlerIndex,e._lineColorsLength=this._lineColors.length-e._lineColorsHandlerIndex,e._lineThicknessLength=this._lineThickness.length-e._lineThicknessHandlerIndex}else if(e.type===Ne.MULTILINESTRING){let i=e._coordinates,r=[];for(let s=0;s<i.length;s++){r[s]=[];for(let n=0;n<i[s].length;n++)r[s][n]=[fi(i[s][n][0]),ui(i[s][n][1])]}e._lineVerticesHandlerIndex=this._lineVerticesHighMerc.length,e._lineOrdersHandlerIndex=this._lineOrders.length,e._lineIndexesHandlerIndex=this._lineIndexes.length,e._lineColorsHandlerIndex=this._lineColors.length,e._lineThicknessHandlerIndex=this._lineThickness.length,Qe.appendLineData(r,!1,e._style.lineColor,t,e._style.lineWidth,e._style.strokeColor,e._style.strokeWidth,this._lineVerticesHighMerc,this._lineVerticesLowMerc,this._lineOrders,this._lineIndexes,this._lineColors,this._linePickingColors,this._lineThickness,this._lineStrokeColors,this._lineStrokes,e._lineVerticesHighMerc,e._lineVerticesLowMerc),e._lineVerticesLength=this._lineVerticesHighMerc.length-e._lineVerticesHandlerIndex,e._lineOrdersLength=this._lineOrders.length-e._lineOrdersHandlerIndex,e._lineIndexesLength=this._lineIndexes.length-e._lineIndexesHandlerIndex,e._lineColorsLength=this._lineColors.length-e._lineColorsHandlerIndex,e._lineThicknessLength=this._lineThickness.length-e._lineThicknessHandlerIndex}}this.setGeometryVisibility(e),!this._updatedGeometry[e.__id]&&this._updatedGeometryArr.push(e),this._updatedGeometry[e.__id]=!0,this.refresh()}}remove(e){const t=e._handlerIndex;if(t!==-1){this._geometries.splice(t,1),this._polyVerticesHighMerc.splice(e._polyVerticesHandlerIndex,e._polyVerticesLength),this._polyVerticesLowMerc.splice(e._polyVerticesHandlerIndex,e._polyVerticesLength),this._polyColors.splice(e._polyVerticesHandlerIndex*2,e._polyVerticesLength*2),this._polyPickingColors.splice(e._polyVerticesHandlerIndex*2,e._polyVerticesLength*2),this._polyIndexes.splice(e._polyIndexesHandlerIndex,e._polyIndexesLength);let i=e._polyVerticesLength*.5;for(let s=e._polyIndexesHandlerIndex;s<this._polyIndexes.length;s++)this._polyIndexes[s]-=i;this._lineVerticesHighMerc.splice(e._lineVerticesHandlerIndex,e._lineVerticesLength),this._lineVerticesLowMerc.splice(e._lineVerticesHandlerIndex,e._lineVerticesLength),this._lineOrders.splice(e._lineOrdersHandlerIndex,e._lineOrdersLength),this._lineColors.splice(e._lineColorsHandlerIndex,e._lineColorsLength),this._linePickingColors.splice(e._lineColorsHandlerIndex,e._lineColorsLength),this._lineStrokeColors.splice(e._lineColorsHandlerIndex,e._lineColorsLength),this._lineThickness.splice(e._lineThicknessHandlerIndex,e._lineThicknessLength),this._lineStrokes.splice(e._lineThicknessHandlerIndex,e._lineThicknessLength),this._lineIndexes.splice(e._lineIndexesHandlerIndex,e._lineIndexesLength),i=e._lineVerticesLength*.5;for(let s=e._lineIndexesHandlerIndex;s<this._lineIndexes.length;s++)this._lineIndexes[s]-=i;let r=this._geometries;for(let s=t;s<r.length;s++){let n=r[s];n._handlerIndex=s,n._polyVerticesHandlerIndex-=e._polyVerticesLength,n._polyIndexesHandlerIndex-=e._polyIndexesLength,n._lineVerticesHandlerIndex-=e._lineVerticesLength,n._lineOrdersHandlerIndex-=e._lineOrdersLength,n._lineColorsHandlerIndex-=e._lineColorsLength,n._lineThicknessHandlerIndex-=e._lineThicknessLength,n._lineIndexesHandlerIndex-=e._lineIndexesLength}e._pickingReady=!1,e._handler=null,e._handlerIndex=-1,e._polyVerticesHighMerc=[],e._polyVerticesLowMerc=[],e._polyVerticesLength=-1,e._polyIndexesLength=-1,e._polyVerticesHandlerIndex=-1,e._polyIndexesHandlerIndex=-1,e._lineVerticesHighMerc=[],e._lineVerticesLowMerc=[],e._lineVerticesLength=-1,e._lineOrdersLength=-1,e._lineIndexesLength=-1,e._lineColorsLength=-1,e._lineThicknessLength=-1,e._lineVerticesHandlerIndex=-1,e._lineOrdersHandlerIndex=-1,e._lineIndexesHandlerIndex=-1,e._lineThicknessHandlerIndex=-1,e._lineColorsHandlerIndex=-1,!this._removeGeometryExtents[e.__id]&&this._removeGeometryExtentArr.push(e.getExtent()),this._removeGeometryExtents[e.__id]=!0,this.refresh()}}_refreshRecursevely(e,t){if(t.ready){let i=this._layer._id;for(let r=0;r<t.nodes.length;r++){let s=t.nodes[r];if(e.overlaps(s.segment.getExtentLonLat())){this._refreshRecursevely(e,s);let n=s.segment.materials[i];n&&n.isReady&&(n.segment.node.getState()!==$e?n.layer.clearMaterial(n):(n.pickingReady=n.pickingReady&&e._pickingReady,n.isReady=!1,n._updateTexture=n.texture,n._updatePickingMask=n.pickingMask),e._pickingReady=!0)}}}}_refreshRecursevelyExt(e,t){if(t.ready){let i=this._layer.__id;for(let r=0;r<t.nodes.length;r++){let s=t.nodes[r];if(e.overlaps(s.segment.getExtentLonLat())){this._refreshRecursevelyExt(e,s);let n=s.segment.materials[i];n&&n.isReady&&n.layer.clearMaterial(n)}}}}_refreshPlanetNode(e){let t,i=this._removeGeometryExtentArr;for(t=0;t<i.length;t++)this._refreshRecursevelyExt(i[t],e);let r=this._updatedGeometryArr;for(t=0;t<r.length;t++)this._refreshRecursevely(r[t],e)}_updatePlanet(){let e=this._layer._planet;if(e){let t=e.quadTreeStrategy.quadTreeList;for(let i=0;i<t.length;i++)this._refreshPlanetNode(t[i])}this._updatedGeometryArr.length=0,this._updatedGeometryArr=[],this._updatedGeometry={},this._removeGeometryExtentArr.length=0,this._removeGeometryExtentArr=[],this._removeGeometryExtents={}}refresh(){let e=this._changedBuffers.length;for(;e--;)this._changedBuffers[e]=!0}update(){if(this._handler){let e=!1,t=this._changedBuffers.length;for(;t--;)this._changedBuffers[t]&&(e=!0,this._buffersUpdateCallbacks[t].call(this),this._changedBuffers[t]=!1);e&&this._updatePlanet()}}setGeometryVisibility(e){let t=e.getVisibility()?1:0,i=this._polyVerticesHighMerc,r=this._polyVerticesLowMerc,s=e._polyVerticesLength,n=e._polyVerticesHandlerIndex;for(let a=0;a<s;a++)i[n+a]=e._polyVerticesHighMerc[a]*t,r[n+a]=e._polyVerticesLowMerc[a]*t;i=this._lineVerticesHighMerc,r=this._lineVerticesLowMerc,s=e._lineVerticesLength,n=e._lineVerticesHandlerIndex;for(let a=0;a<s;a++)i[n+a]=e._lineVerticesHighMerc[a]*t,r[n+a]=e._lineVerticesLowMerc[a]*t;this._changedBuffers[ks]=!0,this._changedBuffers[Hs]=!0,!this._updatedGeometry[e.__id]&&this._updatedGeometryArr.push(e),this._updatedGeometry[e.__id]=!0}setPolyColorArr(e,t){let i=e._polyVerticesHandlerIndex*2,r=i+e._polyVerticesLength*2,s=this._polyColors;for(let n=i;n<r;n+=4)s[n]=t.x,s[n+1]=t.y,s[n+2]=t.z,s[n+3]=t.w;this._changedBuffers[Ns]=!0,!this._updatedGeometry[e.__id]&&this._updatedGeometryArr.push(e),this._updatedGeometry[e.__id]=!0}setLineStrokeColorArr(e,t){let i=e._lineColorsHandlerIndex,r=i+e._lineColorsLength,s=this._lineStrokeColors;for(let n=i;n<r;n+=4)s[n]=t.x,s[n+1]=t.y,s[n+2]=t.z,s[n+3]=t.w;this._changedBuffers[Gs]=!0,!this._updatedGeometry[e.__id]&&this._updatedGeometryArr.push(e),this._updatedGeometry[e.__id]=!0}setLineColorArr(e,t){let i=e._lineColorsHandlerIndex,r=i+e._lineColorsLength,s=this._lineColors;for(let n=i;n<r;n+=4)s[n]=t.x,s[n+1]=t.y,s[n+2]=t.z,s[n+3]=t.w;this._changedBuffers[Vs]=!0,!this._updatedGeometry[e.__id]&&this._updatedGeometryArr.push(e),this._updatedGeometry[e.__id]=!0}setLineStrokeArr(e,t){}setLineThicknessArr(e,t){let i=e._lineThicknessHandlerIndex,r=i+e._lineThicknessLength,s=this._lineThickness;for(let n=i;n<r;n++)s[n]=t;this._changedBuffers[Us]=!0,!this._updatedGeometry[e.__id]&&this._updatedGeometryArr.push(e),this._updatedGeometry[e.__id]=!0}bringToFront(e){let t=this._polyIndexes.splice(e._polyIndexesHandlerIndex,e._polyIndexesLength),i=this._lineIndexes.splice(e._lineIndexesHandlerIndex,e._lineIndexesLength);this._geometries.splice(e._handlerIndex,1);let r=this._geometries;for(let s=e._handlerIndex;s<r.length;s++){let n=r[s];n._handlerIndex=s,n._polyIndexesHandlerIndex-=e._polyIndexesLength,n._lineIndexesHandlerIndex-=e._lineIndexesLength}e._polyIndexesHandlerIndex=this._polyIndexes.length,e._lineIndexesHandlerIndex=this._lineIndexes.length,e._handlerIndex=this._geometries.length,this._geometries.push(e),this._polyIndexes.push.apply(this._polyIndexes,t),this._lineIndexes.push.apply(this._lineIndexes,i),this._changedBuffers[Ds]=!0,this._changedBuffers[Os]=!0,!this._updatedGeometry[e.__id]&&this._updatedGeometryArr.push(e),this._updatedGeometry[e.__id]=!0}createPolyVerticesBuffer(){let e=this._handler;e.gl.deleteBuffer(this._polyVerticesHighBufferMerc),this._polyVerticesHighBufferMerc=e.createArrayBuffer(new Float32Array(this._polyVerticesHighMerc),2,this._polyVerticesHighMerc.length/2),e.gl.deleteBuffer(this._polyVerticesLowBufferMerc),this._polyVerticesLowBufferMerc=e.createArrayBuffer(new Float32Array(this._polyVerticesLowMerc),2,this._polyVerticesLowMerc.length/2)}createPolyIndexesBuffer(){let e=this._handler;e.gl.deleteBuffer(this._polyIndexesBuffer),this._polyIndexesBuffer=e.createElementArrayBuffer(new Uint32Array(this._polyIndexes),1,this._polyIndexes.length)}createPolyColorsBuffer(){let e=this._handler;e.gl.deleteBuffer(this._polyColorsBuffer),this._polyColorsBuffer=e.createArrayBuffer(new Float32Array(this._polyColors),4,this._polyColors.length/4)}createPolyPickingColorsBuffer(){let e=this._handler;e.gl.deleteBuffer(this._polyPickingColorsBuffer),this._polyPickingColorsBuffer=e.createArrayBuffer(new Float32Array(this._polyPickingColors),4,this._polyPickingColors.length/4)}createLineVerticesBuffer(){let e=this._handler;e.gl.deleteBuffer(this._lineVerticesHighBufferMerc),this._lineVerticesHighBufferMerc=e.createArrayBuffer(new Float32Array(this._lineVerticesHighMerc),2,this._lineVerticesHighMerc.length/2),e.gl.deleteBuffer(this._lineVerticesLowBufferMerc),this._lineVerticesLowBufferMerc=e.createArrayBuffer(new Float32Array(this._lineVerticesLowMerc),2,this._lineVerticesLowMerc.length/2)}createLineIndexesBuffer(){let e=this._handler;e.gl.deleteBuffer(this._lineIndexesBuffer),this._lineIndexesBuffer=e.createElementArrayBuffer(new Uint32Array(this._lineIndexes),1,this._lineIndexes.length)}createLineOrdersBuffer(){let e=this._handler;e.gl.deleteBuffer(this._lineOrdersBuffer),this._lineOrdersBuffer=e.createArrayBuffer(new Float32Array(this._lineOrders),1,this._lineOrders.length/2)}createLineColorsBuffer(){let e=this._handler;e.gl.deleteBuffer(this._lineColorsBuffer),this._lineColorsBuffer=e.createArrayBuffer(new Float32Array(this._lineColors),4,this._lineColors.length/4)}createLinePickingColorsBuffer(){let e=this._handler;e.gl.deleteBuffer(this._linePickingColorsBuffer),this._linePickingColorsBuffer=e.createArrayBuffer(new Float32Array(this._linePickingColors),4,this._linePickingColors.length/4)}createLineThicknessBuffer(){let e=this._handler;e.gl.deleteBuffer(this._lineThicknessBuffer),this._lineThicknessBuffer=e.createArrayBuffer(new Float32Array(this._lineThickness),1,this._lineThickness.length)}createLineStrokesBuffer(){let e=this._handler;e.gl.deleteBuffer(this._lineStrokesBuffer),this._lineStrokesBuffer=e.createArrayBuffer(new Float32Array(this._lineStrokes),1,this._lineStrokes.length)}createLineStrokeColorsBuffer(){let e=this._handler;e.gl.deleteBuffer(this._lineStrokeColorsBuffer),this._lineStrokeColorsBuffer=e.createArrayBuffer(new Float32Array(this._lineStrokeColors),4,this._lineStrokeColors.length/4)}}Qe.__counter__=0;class lr{constructor(e=2048){this._size=e,this._array=new Array(this._size),this._popIndex=Math.floor(this._size*.5),this._shiftIndex=this._popIndex,this.length=0}reset(){this._popIndex=Math.floor(this._size*.5),this._shiftIndex=this._popIndex,this.length=0}clear(){this._array.length=0,this._array=new Array(this._size),this._popIndex=Math.floor(this._size*.5),this._shiftIndex=this._popIndex,this.length=0}push(e){this.length++,this._array[this._popIndex++]=e}pop(){if(this.length){this.length--;let e=this._array[--this._popIndex];return this._array[this._popIndex]=null,this._array[this._popIndex-1]||(this._popIndex=Math.floor(this._size*.5),this._shiftIndex=this._popIndex),e}}unshift(e){this.length++,this._array[--this._shiftIndex]=e}shift(){if(this.length){this.length--;let e=this._array[this._shiftIndex];return this._array[this._shiftIndex++]=null,this._array[this._shiftIndex]||(this._popIndex=Math.floor(this._size*.5),this._shiftIndex=this._popIndex),e}}forEach(e){for(let t=this._shiftIndex;t<this._popIndex;t++)e(this._array[t])}}function No(c){let e=[];for(let t=0;t<c.length;t++){let i=c[t];i.instanceName==="Entity"?e.push(i):e.push(new yi(i))}return e}class Ho extends Oe{constructor(e,t={}){super(e,t),this.events=this.events.registerNames(Oo),this.isVector=!0,this._hasImageryTiles=!1,this.scaleByDistance=t.scaleByDistance||[nt,nt,nt],this.pickingScale=t.pickingScale||1,this.async=t.async!==void 0?t.async:!0,this.clampToGround=t.clampToGround||!1,this.relativeToGround=t.relativeToGround||!1,this._nodeCapacity=t.nodeCapacity||30,this._entities=No(t.entities||[]),this._labelMaxLetters=t.labelMaxLetters||24,this._stripEntityCollection=new _t({pickingEnabled:this.pickingEnabled}),this._bindEventsDefault(this._stripEntityCollection),this._polylineEntityCollection=new _t({pickingEnabled:this.pickingEnabled}),this._bindEventsDefault(this._polylineEntityCollection),this._geoObjectEntityCollection=new _t({pickingEnabled:this.pickingEnabled}),this._bindEventsDefault(this._geoObjectEntityCollection),this._geometryHandler=new Qe(this),this._entityCollectionsTree=null,this._entityCollectionsTreeNorth=null,this._entityCollectionsTreeSouth=null,this._renderingNodes={},this._renderingNodesNorth={},this._renderingNodesSouth={},this._counter=0,this._deferredEntitiesPendingQueue=new lr,this._pendingsQueue=[],this.setEntities(this._entities),this.polygonOffsetUnits=t.polygonOffsetUnits!=null?t.polygonOffsetUnits:0,this.pickingEnabled=this._pickingEnabled,this._secondPASS=[]}get labelMaxLetters(){return this._labelMaxLetters}get instanceName(){return"Vector"}_bindPicking(){this._pickingColor.clear()}addTo(e){this._planet||(this._assignPlanet(e),this._geometryHandler.assignHandler(e.renderer.handler),this._polylineEntityCollection.addTo(e,!0),this._stripEntityCollection.addTo(e,!0),this._geoObjectEntityCollection.addTo(e,!0),this.setEntities(this._entities))}remove(){return super.remove(),this._polylineEntityCollection.remove(),this._stripEntityCollection.remove(),this._geoObjectEntityCollection.remove(),this}getEntities(){return[].concat(this._entities)}add(e,t=!1){return e._layer||e._entityCollection||(e._layer=this,e._layerIndex=this._entities.length,this._entities.push(e),this._proceedEntity(e,t)),this}insert(e,t,i=!1){if(!(e._layer||e._entityCollection)){e._layer=this,e._layerIndex=t,this._entities.splice(t,0,e);for(let r=t+1,s=this._entities.length;r<s;r++)this._entities[r]._layerIndex=r;this._proceedEntity(e,i)}return this}_proceedEntity(e,t=!1){let i=this._hasImageryTiles;e.strip&&this._stripEntityCollection.add(e),(e.polyline||e.ray)&&this._polylineEntityCollection.add(e),e.geoObject&&this._geoObjectEntityCollection.add(e),e.geometry&&(this._hasImageryTiles=!0,this._planet&&(this._planet.renderer.assignPickingColor(e),this._geometryHandler.add(e.geometry))),(e.billboard||e.label||e.geoObject)&&this._planet&&(e._cartesian.isZero()&&!e._lonLat.isZero()?e._setCartesian3vSilent(this._planet.ellipsoid.lonLatToCartesian(e._lonLat)):e._lonLat=this._planet.ellipsoid.cartesianToLonLat(e._cartesian),e._lonLat.lat>ce?(this._entityCollectionsTreeNorth.__setLonLat__(e),this._entityCollectionsTreeNorth.insertEntity(e,t)):e._lonLat.lat<Re?(this._entityCollectionsTreeSouth.__setLonLat__(e),this._entityCollectionsTreeSouth.insertEntity(e,t)):(this._entityCollectionsTree.__setLonLat__(e),this._entityCollectionsTree.insertEntity(e,t))),this._planet&&this._hasImageryTiles!==i&&this._planet.updateVisibleLayers(),this.events.dispatch(this.events.entityadd,e)}addEntities(e,t=!1){let i=e.length;for(;i--;)this.add(e[i],t);return this}removeEntity(e){if(e._layer&&this.isEqual(e._layer)){if(this._entities.splice(e._layerIndex,1),this._reindexEntitiesArray(e._layerIndex),e._layer=null,e._layerIndex=-1,e._entityCollection){e._entityCollection._removeEntitySilent(e);let t=e._nodePtr;for(;t;)t.count--,t=t.parentNode;e._nodePtr&&e._nodePtr.count===0&&e._nodePtr.deferredEntities.length===0&&(e._nodePtr.entityCollection=null)}else if(e._nodePtr&&e._nodePtr.deferredEntities.length){let t=e._nodePtr.deferredEntities,i=t.length;for(;i--;)if(t[i].id===e.id){t.splice(i,1);let r=e._nodePtr;for(;r;)r.count--,r=r.parentNode;break}}e.geometry&&this._planet&&(this._geometryHandler.remove(e.geometry),this._planet.renderer.clearPickingColor(e)),e._nodePtr=void 0,this.events.dispatch(this.events.entityremove,e)}return this}set pickingEnabled(e){this._pickingEnabled=e,this._stripEntityCollection.setPickingEnabled(e),this._polylineEntityCollection.setPickingEnabled(e),this._geoObjectEntityCollection.setPickingEnabled(e),this._entityCollectionsTree&&this._entityCollectionsTree.traverseTree(t=>{t.entityCollection.setPickingEnabled(e)}),this._entityCollectionsTreeNorth&&this._entityCollectionsTreeNorth.traverseTree(t=>{t.entityCollection.setPickingEnabled(e)}),this._entityCollectionsTreeSouth&&this._entityCollectionsTreeSouth.traverseTree(t=>{t.entityCollection.setPickingEnabled(e)})}_reindexEntitiesArray(e){const t=this._entities;for(let i=e;i<t.length;i++)t[i]._layerIndex=i}removeEntities(e){let t=e.length;for(;t--;)this.removeEntity(e[t]);return this}clear(){let e=new Array(this._entities.length);for(let i=0;i<e.length;i++)e[i]=this._entities[i];let t=this._entities.length;for(;t--;)this._entities[t].remove();this._entities.length=0,this._entities=[];for(let i=0;i<e.length;i++)this._entities[i]=e[i];this._entityCollectionsTree=null,this._entityCollectionsTreeNorth=null,this._entityCollectionsTreeSouth=null}each(e){let t=this._entities,i=t.length;for(;i--;)e(t[i],i)}setEntities(e){let t=new Array(e.length);for(let r=0,s=e.length;r<s;r++)t[r]=e[r];this.clear(),this._entities=new Array(t.length);let i=[];for(let r=0;r<t.length;r++){let s=t[r];s._layer=this,s._layerIndex=r,s.strip?this._stripEntityCollection.add(s):s.polyline||s.ray?this._polylineEntityCollection.add(s):s.geoObject?this._geoObjectEntityCollection.add(s):(s.billboard||s.label)&&i.push(s),s.geometry&&(this._hasImageryTiles=!0,this._planet&&(this._planet.renderer.assignPickingColor(s),this._geometryHandler.add(s.geometry))),this._entities[r]=s}return this._createEntityCollectionsTree(i),this}_createEntityCollectionsTree(e){if(this._planet){this._entityCollectionsTree=new gt(this,$,null,0,U.createFromArray([-2003750834e-2,-2003750834e-2,2003750834e-2,2003750834e-2]),this._planet,0),this._entityCollectionsTreeNorth=new mt(this,$,null,0,U.createFromArray([-180,ce,180,90]),this._planet,0),this._entityCollectionsTreeSouth=new mt(this,$,null,0,U.createFromArray([-180,-90,180,Re]),this._planet,0);for(let t=0,i=e.length;t<i;t++){let r=e[t];r._lonLat.lat>ce?this._entityCollectionsTreeNorth.__setLonLat__(r):r._lonLat.lat<Re?this._entityCollectionsTreeSouth.__setLonLat__(r):this._entityCollectionsTree.__setLonLat__(r)}this._entityCollectionsTree.buildTree(e),this._entityCollectionsTreeNorth.buildTree(e),this._entityCollectionsTreeSouth.buildTree(e)}}_bindEventsDefault(e){let t=this.events;e.events.on("mousemove",i=>{t.dispatch(t.mousemove,i)}),e.events.on("mouseenter",i=>{t.dispatch(t.mouseenter,i)}),e.events.on("mouseleave",i=>{t.dispatch(t.mouseleave,i)}),e.events.on("lclick",i=>{t.dispatch(t.lclick,i)}),e.events.on("rclick",i=>{t.dispatch(t.rclick,i)}),e.events.on("mclick",i=>{t.dispatch(t.mclick,i)}),e.events.on("ldblclick",i=>{t.dispatch(t.ldblclick,i)}),e.events.on("rdblclick",i=>{t.dispatch(t.rdblclick,i)}),e.events.on("mdblclick",i=>{t.dispatch(t.mdblclick,i)}),e.events.on("lup",i=>{t.dispatch(t.lup,i)}),e.events.on("rup",i=>{t.dispatch(t.rup,i)}),e.events.on("mup",i=>{t.dispatch(t.mup,i)}),e.events.on("ldown",i=>{t.dispatch(t.ldown,i)}),e.events.on("rdown",i=>{t.dispatch(t.rdown,i)}),e.events.on("mdown",i=>{t.dispatch(t.mdown,i)}),e.events.on("lhold",i=>{t.dispatch(t.lhold,i)}),e.events.on("rhold",i=>{t.dispatch(t.rhold,i)}),e.events.on("mhold",i=>{t.dispatch(t.mhold,i)}),e.events.on("mousewheel",i=>{t.dispatch(t.mousewheel,i)}),e.events.on("touchmove",i=>{t.dispatch(t.touchmove,i)}),e.events.on("touchstart",i=>{t.dispatch(t.touchstart,i)}),e.events.on("touchend",i=>{t.dispatch(t.touchend,i)}),e.events.on("doubletouch",i=>{t.dispatch(t.doubletouch,i)}),e.events.on("touchleave",i=>{t.dispatch(t.touchleave,i)}),e.events.on("touchenter",i=>{t.dispatch(t.touchenter,i)})}_collectStripCollectionPASS(e){let t=this._stripEntityCollection;t._fadingOpacity=this._fadingOpacity,t.scaleByDistance=this.scaleByDistance,t.pickingScale=this.pickingScale,t.polygonOffsetUnits=this.polygonOffsetUnits,e.push(t)}_collectPolylineCollectionPASS(e){let t=this._polylineEntityCollection;if(t._fadingOpacity=this._fadingOpacity,t.scaleByDistance=this.scaleByDistance,t.pickingScale=this.pickingScale,t.polygonOffsetUnits=this.polygonOffsetUnits,e.push(t),this.clampToGround||this.relativeToGround){let i=Number(this.relativeToGround);const r=this._planet._renderedNodes,s=this._planet.getViewExtent();let n=t._entities,a=n.length,o=new p;for(;a--;){let l=n[a].polyline;if(l&&s.overlaps(l._extent)){let h=l._pathLonLatMerc,d=h.length;for(;d--;){let f=h[d].length;for(;f--;){let u=h[d][f],g=r.length;for(;g--;){let _=r[g].segment;if(_._extent.isInside(u)){let m=l._path3v[d][f];_.getTerrainPoint(m,u,o);let v=i&&l.altitude||0;if(v){let b=this._planet.ellipsoid.getSurfaceNormal3v(o);l.setPoint3v(o.addA(b.scale(v)),f,d,!0)}else l.setPoint3v(o,f,d,!0);break}}}}}}}}_collectGeoObjectCollectionPASS(e){let t=this._geoObjectEntityCollection;t._fadingOpacity=this._fadingOpacity,t.scaleByDistance=this.scaleByDistance,t.pickingScale=this.pickingScale,t.polygonOffsetUnits=this.polygonOffsetUnits,e.push(t)}collectVisibleCollections(e){let t=this._planet;if(this._fading&&this._fadingOpacity>0||this.minZoom<=t.maxCurrZoom&&this.maxZoom>=t.maxCurrZoom){this._renderingNodes={},this._renderingNodesNorth={},this._renderingNodesSouth={},this._collectStripCollectionPASS(e),this._collectPolylineCollectionPASS(e),this._collectGeoObjectCollectionPASS(e),this._secondPASS=[],this._entityCollectionsTree&&this._entityCollectionsTree.collectRenderCollectionsPASS1(t._visibleNodes,e);let i=this._secondPASS.length;for(;i--;)this._secondPASS[i].collectRenderCollectionsPASS2(t._visibleNodes,e,this._secondPASS[i].nodeId);for(this._secondPASS=[],this._entityCollectionsTreeNorth&&this._entityCollectionsTreeNorth.collectRenderCollectionsPASS1(t._visibleNodesNorth,e),i=this._secondPASS.length;i--;)this._secondPASS[i].collectRenderCollectionsPASS2(t._visibleNodesNorth,e,this._secondPASS[i].nodeId);for(this._secondPASS=[],this._entityCollectionsTreeSouth&&this._entityCollectionsTreeSouth.collectRenderCollectionsPASS1(t._visibleNodesSouth,e),i=this._secondPASS.length;i--;)this._secondPASS[i].collectRenderCollectionsPASS2(t._visibleNodesSouth,e,this._secondPASS[i].nodeId)}}_queueDeferredNode(e){this._visibility&&(e._inTheQueue=!0,this._counter>=1?this._deferredEntitiesPendingQueue.push(e):this._execDeferredNode(e))}_execDeferredNode(e){this._counter++,setTimeout(()=>{if(e.applyCollection(),this._counter--,this._deferredEntitiesPendingQueue.length&&this._counter<1)for(;this._deferredEntitiesPendingQueue.length;){let t=this._deferredEntitiesPendingQueue.pop();if(t._inTheQueue=!1,t.isVisible()){this._execDeferredNode(t);return}}},0)}loadMaterial(e){const t=e.segment;this._isBaseLayer?e.texture=t._isNorth?t.planet.solidTextureOne:t.planet.solidTextureTwo:e.texture=t.planet.transparentTexture,this._planet.layerLock.isFree()&&(e.isReady=!1,e.isLoading=!0,this._planet._vectorTileCreator.add(e))}abortMaterialLoading(e){e.isLoading=!1,e.isReady=!1}applyMaterial(e,t=!1){if(e.isReady)return[0,0,1,1];{!e.isLoading&&this.loadMaterial(e);const i=e.segment;let r=i.node,s=!1,n=this.__id,a=e;for(;r.parentNode;){if(a&&a.isReady){s=!0;break}r=r.parentNode,a=r.segment.materials[n]}if(s){e.appliedNodeId=r.nodeId,e.texture=a.texture,e.pickingMask=a.pickingMask;const o=1/(2<<i.tileZoom-r.segment.tileZoom-1);return[i.tileX*o-r.segment.tileX,i.tileY*o-r.segment.tileY,o,o]}else return e.textureExists&&e._updateTexture?(e.texture=e._updateTexture,e.pickingMask=e._updatePickingMask):(e.texture=i.planet.transparentTexture,e.pickingMask=i.planet.transparentTexture),e.pickingReady=!0,[0,0,1,1]}}clearMaterial(e){if(e.isReady){const t=e.segment.handler.gl;e.isReady=!1,e.pickingReady=!1;let i=e.texture;e.texture=null,i&&!i.default&&t.deleteTexture(i),i=e.pickingMask,e.pickingMask=null,i&&!i.default&&t.deleteTexture(i),i=e._updateTexture,e._updateTexture=null,i&&!i.default&&t.deleteTexture(i),i=e._updatePickingMask,e._updatePickingMask=null,i&&!i.default&&t.deleteTexture(i)}this.abortMaterialLoading(e),e.isLoading=!1,e.textureExists=!1}update(){this._geometryHandler.update(),this.events.dispatch(this.events.draw,this)}}const Oo=["draw","entityadd","entityremove"];xe.createCylinder(1,1,2,20,1,!0,!1,0,-.5,0);const js=0,Ys=1,qs=2,Xt={ell:js,msl:Ys,gnd:qs},Ws=1e3,Xs=1/Ws,hr=.3048,Vo=1/hr,Zs=3.6,Uo=1/Zs,Go=3.28084,$s=hr*Xs,jo=1/$s,Ue=0,Je=1,et=2,Yo=3,qo=4,vt=5,Mt=6,Ks=7,Wo="--",Xo=["m","km","ft","s","h","m/s","km/h","ft/s"],Qs=[0,2,0,0,0,0,0,0];let he=[];he[Ue]=[],he[Ue][Ue]=c=>c,he[Ue][Je]=c=>c*Xs,he[Ue][et]=c=>c*Vo,he[et]=[],he[et][Ue]=c=>c*hr,he[et][Je]=c=>c*$s,he[et][et]=c=>c,he[Je]=[],he[Je][Ue]=c=>c*Ws,he[Je][Je]=c=>c,he[Je][et]=c=>c*jo,he[vt]=[],he[vt][vt]=c=>c,he[vt][Mt]=c=>c*Zs,he[vt][Ks]=c=>c*Go,he[Mt]=[],he[Mt][vt]=c=>c*Uo,he[Mt][Mt]=c=>c;function Js(c,e,t){return he[c][e](t)}function cr(c,e,t,i,r){return c?Js(e,t,i).toFixed(r||Qs[t]):Wo}function en(c){return Xo[c]}const tn=Object.freeze(Object.defineProperty({__proto__:null,ELL:js,GND:qs,MSL:Ys,_tenth:Qs,convert:Js,convertExt:cr,ft:et,fts:Ks,h:qo,heightMode:Xt,km:Je,kmh:Mt,m:Ue,ms:vt,s:Yo,toString:en},Symbol.toStringTag,{value:"Module"})),Zo=`<div class="og-lat-side"></div><div class="og-lat-val"></div>
|
|
1439
1439
|
<div class="og-lon-side"></div><div class="og-lon-val"></div>
|
|
1440
1440
|
<div class="og-height"></div>
|
|
1441
1441
|
<div class="og-units-height"></div>`,$o=`<div class="og-lat-side"></div><div class="og-lat-val"></div>
|
|
1442
1442
|
<div class="og-lon-side"></div><div class="og-lon-val"></div>
|
|
1443
1443
|
<div class="og-height"></div>
|
|
1444
|
-
<div class="og-units-height"></div>`,Ko='<svg width="12" height="12"><g><path stroke-width="1" stroke-opacity="1" d="M6 0L6 12M0 6L12 6" stroke="#337ab7"></path></g></svg>',Qo=[Zo,$o];class Jo extends Le{constructor(e={}){super(e),this._type=e.type||0,this._TYPE_FUNC=[this._SHOW_DECIMAL,this._SHOW_DEGREE],this._showFn=null,this._el=null,this._latSideEl=null,this._lonSideEl=null,this._latValEl=null,this._lonValEl=null,this._heightEl=null,this._altUnitVal=e.altitudeUnit||"m",this._heightModeVal=e.heightMode||"ell",this._altUnit=tn[this._altUnitVal],this._heightMode=Zt[this._heightModeVal],this._lonLat=null,this._centerMode=e.centerMode!=null?e.centerMode:!0}_SHOW_DECIMAL(e){if(e){let t=e.lat,i=e.lon;t>=0?this._latSideEl.innerHTML="N":this._latSideEl.innerHTML="S",i>=0?this._lonSideEl.innerHTML="E":this._lonSideEl.innerHTML="W",this._latValEl.innerHTML=Math.abs(t).toFixed(7)+"°",this._lonValEl.innerHTML=Math.abs(i).toFixed(7)+"°"}}_SHOW_DEGREE(e){if(e){let t=e.lat,i=e.lon;t>=0?this._latSideEl.innerHTML="N":this._latSideEl.innerHTML="S",i>=0?this._lonSideEl.innerHTML="E":this._lonSideEl.innerHTML="W";let r=0,s=t<0?Math.ceil(t):Math.floor(t),n=Math.floor(r=Math.abs(t-s)*60),a=Math.floor((r-n)*6e3)/100;this._latValEl.innerHTML=Math.abs(s)+"°"+n+"'"+a.toFixed(0)+'"',s=i<0?Math.ceil(i):Math.floor(i),n=Math.floor(r=Math.abs(i-s)*60),a=Math.floor((r-n)*6e3)/100,this._lonValEl.innerHTML=Math.abs(s)+"°"+n+"'"+a.toFixed(0)+'"'}}_createCenterEl(){let e=document.createElement("div");return e.className="og-center-icon",e.innerHTML=Ko,e}_updateUnits(){this._heightMode=Zt[this._heightModeVal],this._altUnit=tn[this._altUnitVal],this._el.querySelector(".og-units-height").innerHTML=en(this._altUnit),this._showHeight()}_refreshCoordinates(){this._type>=this._TYPE_FUNC.length&&(this._type=0);let e=this._el;e.innerHTML=Qo[this._type],this._latSideEl=e.querySelector(".og-lat-side"),this._lonSideEl=e.querySelector(".og-lon-side"),this._latValEl=e.querySelector(".og-lat-val"),this._lonValEl=e.querySelector(".og-lon-val"),this._heightEl=e.querySelector(".og-height"),this._showFn=this._TYPE_FUNC[this._type],this._showFn(this._lonLat)}oninit(){this._el=document.createElement("div"),this._el.classList.add("og-coordinates"),this.renderer.div.appendChild(this._el),this._el.addEventListener("click",()=>{this._type++,this._refreshCoordinates(),this._updateUnits(),this._showHeight()}),this._centerMode?(this.renderer.div.appendChild(this._createCenterEl()),this.planet.camera.events.on("moveend",this._grabCoordinates,this),this.planet.camera.events.on("moveend",Yr(()=>this._showHeight(),400,!0),this)):(this.renderer.events.on("mousemove",this._grabCoordinates,this),this.renderer.events.on("mousestop",Yr(()=>this._showHeight(),400,!0),this)),this._refreshCoordinates(),this._updateUnits()}_grabCoordinates(e){let t=e.pos,i,r=this.renderer;this._centerMode?i=r.handler.getCenter():i=t,this._lonLat=this.planet.getLonLatFromPixelTerrain(i)||null,this._showFn(this._lonLat)}async _showHeight(){if(this._lonLat&&this.planet){let e=0;this._heightEl.style.opacity="0.7",this._heightMode===Zt.ell?(e=await this.planet.getHeightAboveELL(this._lonLat),e=Number(cr(!0,Ue,this._altUnit,e))):this._heightMode===Zt.msl&&(e=await this.planet.getHeightDefault(this._lonLat),e=Number(cr(!0,Ue,this._altUnit,e))),this._heightEl.style.opacity="1.0",this._heightEl.innerHTML=e.toString()}}}let rn=class{constructor(){this.x=0,this.y=0,this.prev_x=0,this.prev_y=0,this.grabbedPoint=new p,this.grabbedSpheroid=new Ze}dX(){return this.x-this.prev_x}dY(){return this.y-this.prev_y}};class el extends Le{constructor(e={}){super(e),this.grabbedPoint=new p,this.grabbedDir=new p,this.inertia=.007,this.grabbedSpheroid=new Ze,this.planet=null,this._vRot=new D,this._hRot=new D,this._a=0,this.scaleRot=0,this.currState=0,this.positionState=[{h:17119745303455353e-9,max:.98,min:-.98},{h:6866011,max:.98,min:-.98},{h:3e6,max:.98,min:-.98},{h:1e6,max:.98,min:-.98},{h:5e5,max:.98,min:-.98}],this.touches=[new rn,new rn]}switchZoomState(e){this.stopRotation(),e>0?this.currState++:this.currState--,this.currState<=0&&(this.currState=0),this.currState>=this.positionState.length&&(this.currState=this.positionState.length-1),this.planet.stopFlying();const t=this.planet.camera._lonLat;this.planet.flyLonLat(new B(t.lon,t.lat,this.positionState[this.currState].h))}onMouseWheel(e){this.switchZoomState(e.wheelDelta)}oninit(){this.activate()}onactivate(){let e=this.renderer;e.events.on("mousewheel",this.onMouseWheel,this),e.events.on("lhold",this.onMouseLeftButtonDown,this),e.events.on("ldown",this.onMouseLeftButtonClick,this),e.events.on("lup",this.onMouseLeftButtonUp,this),e.events.on("touchstart",this.onTouchStart,this),e.events.on("touchend",this.onTouchEnd,this),e.events.on("touchmove",this.onTouchMove,this),e.events.on("draw",this.onDraw,this)}onTouchStart(e){if(e.sys.touches.length==1){const t=this.touches[0];t.x=e.sys.touches.item(0).pageX-e.sys.offsetLeft,t.y=e.sys.touches.item(0).pageY-e.sys.offsetTop,t.prev_x=e.sys.touches.item(0).pageX-e.sys.offsetLeft,t.prev_y=e.sys.touches.item(0).pageY-e.sys.offsetTop,t.grabbedPoint=this.planet.getCartesianFromPixelTerrain(new V(t.x,t.y))||null,t.grabbedPoint&&(t.grabbedSpheroid.radius=t.grabbedPoint.length(),this.stopRotation())}}onTouchEnd(e){e.sys.touches.length==0&&(this.scaleRot=1,Math.abs(this.touches[0].x-this.touches[0].prev_x)<3&&Math.abs(this.touches[0].y-this.touches[0].prev_y)<3&&this.stopRotation())}onTouchMove(e){if(e.sys.touches.length==1){let t=this.planet.camera,i=this.touches[0];if(i.prev_x=i.x,i.prev_y=i.y,i.x=e.sys.touches.item(0).pageX-e.sys.offsetLeft,i.y=e.sys.touches.item(0).pageY-e.sys.offsetTop,!i.grabbedPoint)return;let r=t.unproject(i.x,i.y),s=new se(t.eye,r).hitSphere(i.grabbedSpheroid);if(s){this._a=Math.acos(i.grabbedPoint.y/i.grabbedSpheroid.radius)-Math.acos(s.y/i.grabbedSpheroid.radius),this._vRot=D.axisAngleToQuat(t._u,this._a),this._hRot=D.getRotationBetweenVectors(new p(s.x,0,s.z).normal(),new p(i.grabbedPoint.x,0,i.grabbedPoint.z).normal());let n=this._hRot.mul(this._vRot),a=this.positionState[this.currState],o=n.mulVec3(t.eye).normal().dot(p.NORTH);(o>a.max||o<a.min)&&(n=D.yRotation(n.getYaw())),t.set(n.mulVec3(t.eye),p.ZERO,p.NORTH),t.update()}}}onMouseLeftButtonClick(e){this.renderer.handler.canvas.classList.add("ogGrabbingPoiner"),this.grabbedPoint=this.planet.getCartesianFromMouseTerrain()||null,this.grabbedDir.copy(e.direction),this.grabbedPoint&&(this.grabbedSpheroid.radius=this.grabbedPoint.length(),this.stopRotation())}stopRotation(){this.scaleRot=0,this._a=0,this._vRot.clear(),this._hRot.clear()}onMouseLeftButtonUp(e){this.scaleRot=1,this.renderer.handler.canvas.classList.remove("ogGrabbingPoiner"),Math.abs(e.x-e.prev_x)<3&&Math.abs(e.y-e.prev_y)<3&&this.stopRotation()}onMouseLeftButtonDown(e){let t=this.planet.camera;if(!(!this.grabbedPoint||t.isFlying()))if(this.renderer.events.mouseState.moving){let i=new se(t.eye,e.direction).hitSphere(this.grabbedSpheroid);if(i){this._a=Math.acos(this.grabbedPoint.y/this.grabbedSpheroid.radius)-Math.acos(i.y/this.grabbedSpheroid.radius);let r=this._vRot=D.axisAngleToQuat(t._u,this._a);t.set(r.mulVec3(t.eye),p.ZERO,r.mulVec3(t.getUp())),this._hRot=D.getRotationBetweenVectors(new p(i.x,0,i.z).normal(),new p(this.grabbedPoint.x,0,this.grabbedPoint.z).normal()),r=this._hRot,t.set(r.mulVec3(t.eye),p.ZERO,r.mulVec3(t.getUp())),t.update()}}else this.scaleRot=0}onDraw(){let e=this.renderer,t=this.planet.camera;if(!(e.events.mouseState.leftButtonDown||!this.scaleRot||t.isFlying()))if(this.scaleRot-=this.inertia,this.scaleRot<=0)this.scaleRot=0;else{this._vRot=D.axisAngleToQuat(t._u,this._a);let i=this._vRot.mul(this._hRot),r=i.mulVec3(t.eye).normal().dot(p.NORTH),s=this.positionState[this.currState];(r>s.max||r<s.min)&&(i=D.yRotation(i.getYaw())),e.controlsBag.scaleRot=this.scaleRot,i=i.slerp(D.IDENTITY,1-this.scaleRot*this.scaleRot*this.scaleRot).normalize(),i.x||i.y||i.z||(this.scaleRot=0),t.set(i.mulVec3(t.eye),p.ZERO,p.NORTH),t.update()}}}const be={MB_LEFT:0,MB_RIGHT:2,MB_MIDDLE:1,KEY_CTRL:17,KEY_ALT:18,KEY_SHIFT:16,KEY_SPACE:32,KEY_PGUP:33,KEY_PGDN:34,KEY_LEFT:37,KEY_UP:38,KEY_RIGHT:39,KEY_DOWN:40,KEY_PRINTSCREEN:44,KEY_EQUALS:61,KEY_A:65,KEY_C:67,KEY_D:68,KEY_E:69,KEY_F:70,KEY_H:72,KEY_I:73,KEY_K:75,KEY_L:76,KEY_N:78,KEY_O:79,KEY_P:80,KEY_Q:81,KEY_R:82,KEY_S:83,KEY_V:86,KEY_W:87,KEY_X:88,KEY_Z:90,KEY_PLUS:107,KEY_F1:112,KEY_MINUS:173,KEY_APOSTROPHE:192,KEY_BACK_SLASH:220,KEY_MORE:190,KEY_SLASH:191,KEY_LESS:188,KEY_LEFT_SQUARE_BRACKET:219,KEY_RIGHT_SQUARE_BRACKET:221,KEY_SINGLE_QUOTE:222};class dr{constructor(){this._lock=0}lock(e){this._lock|=1<<e.id}free(e){this._lock&=~(1<<e.id)}isFree(){return this._lock===0}isLocked(){return this._lock!==0}}class tt{constructor(){this.__id=tt.__counter__++}get id(){return this.__id}}tt.__counter__=0;class fr extends Le{constructor(e={}){super(e),this._deactivate=!1,this._shiftBusy=!1,this._name="mouseNavigation",this.grabbedPoint=new p,this._eye0=new p,this.pointOnEarth=new p,this.earthUp=new p,this.inertia=.007,this.grabbedSpheroid=new Ze,this.qRot=new D,this.scaleRot=0,this.distDiff=.3,this.stepsCount=8,this.stepsForward=null,this.stepIndex=0,this._lmbDoubleClickActive=!0,this.minSlope=e.minSlope||.1,this._wheelDirection=1,this._keyLock=new tt}static getMovePointsFromPixelTerrain(e,t,i,r,s,n,a){const o=[];let l=e.eye.clone(),h=e._b.clone(),d=e._r.clone(),f=e._u.clone(),u=t.getCartesianFromPixelTerrain(s);if(u||(u=t.getCartesianFromPixelTerrain(t.renderer.handler.getCenter())),u){a||(a=p.sub(u,e.eye).normalize());let g=r*e.eye.distance(u)/i;n?g=-1.25*g:g*=2;const _=h.scaleTo(g);if(a.dot(e.eye.normal().negate())>=.1){const v=new Ze;v.radius=u.length();let b=[],y=[],w=!1;for(let x=0;x<i;x++){l.addA(_);const T=new se(l,a).hitSphere(v);if(y[x]=l.clone(),T)b[x]=new ne().rotateBetweenVectors(u.normal(),T.normal());else{w=!0;break}}if(w){l=e.eye.clone();for(let x=0;x<i;x++)o[x]={eye:l.addA(_).clone(),v:f,u:d,n:h}}else for(let x=0;x<i;x++){let T=b[x];o[x]={eye:T.mulVec3(y[x]),v:T.mulVec3(f),u:T.mulVec3(d),n:T.mulVec3(h)}}}else for(let v=0;v<i;v++)o[v]={eye:l.addA(a.scaleTo(-g)).clone(),v:f,u:d,n:h};return o}}onactivate(){this.renderer&&(this.renderer.events.on("mousewheel",this.onMouseWheel,this),this.renderer.events.on("lhold",this.onMouseLeftButtonDown,this),this.renderer.events.on("rhold",this.onMouseRightButtonDown,this),this.renderer.events.on("ldown",this.onMouseLeftButtonClick,this),this.renderer.events.on("lup",this.onMouseLeftButtonUp,this),this.renderer.events.on("rdown",this.onMouseRightButtonClick,this),this.renderer.events.on("draw",this.onDraw,this,-1e3),this.renderer.events.on("mousemove",this.onMouseMove,this),this.renderer.events.on("mouseleave",this.onMouseLeave,this),this.renderer.events.on("mouseenter",this.onMouseEnter,this),this._lmbDoubleClickActive&&this.renderer.events.on("ldblclick",this.onMouseLeftButtonDoubleClick,this))}ondeactivate(){this.renderer&&(this.renderer.events.off("mousewheel",this.onMouseWheel),this.renderer.events.off("lhold",this.onMouseLeftButtonDown),this.renderer.events.off("rhold",this.onMouseRightButtonDown),this.renderer.events.off("ldown",this.onMouseLeftButtonClick),this.renderer.events.off("lup",this.onMouseLeftButtonUp),this.renderer.events.off("rdown",this.onMouseRightButtonClick),this.renderer.events.off("draw",this.onDraw),this.renderer.events.off("ldblclick",this.onMouseLeftButtonDoubleClick),this.renderer.events.off("mouseleave",this.onMouseLeave),this.renderer.events.off("mouseenter",this.onMouseEnter))}activateDoubleClickZoom(){this._lmbDoubleClickActive||(this._lmbDoubleClickActive=!0,this.renderer&&this.renderer.events.on("ldblclick",this.onMouseLeftButtonDoubleClick,this))}deactivateDoubleClickZoom(){this._lmbDoubleClickActive&&(this._lmbDoubleClickActive=!1,this.renderer&&this.renderer.events.off("ldblclick",this.onMouseLeftButtonDoubleClick))}onMouseEnter(e){const t=this.renderer.events;t.isKeyPressed(be.KEY_ALT)&&t.releaseKeys(),t.updateButtonsStates(e.sys.buttons),t.mouseState.leftButtonDown?this.renderer.handler.canvas.classList.add("ogGrabbingPoiner"):this.renderer.handler.canvas.classList.remove("ogGrabbingPoiner")}onMouseLeave(){this.renderer.events.mouseState.leftButtonDown&&(this.scaleRot=0),this.renderer.handler.canvas.classList.remove("ogGrabbingPoiner")}onMouseWheel(e){this.stepIndex||(this.planet.stopFlying(),this.stopRotation(),this._deactivate=!0,this.planet.layerLock.lock(this._keyLock),this.planet._normalMapCreator.lock(this._keyLock),this.stepsForward=fr.getMovePointsFromPixelTerrain(this.planet.camera,this.planet,this.stepsCount,this.distDiff,e.pos,e.wheelDelta>0,e.direction)||null,this._wheelDirection=e.wheelDelta,this.stepsForward&&(this.stepIndex=this.stepsCount))}oninit(){this.activate(),this.renderer&&(this.renderer.events.on("keyfree",be.KEY_ALT,this.onShiftFree,this),this.renderer.events.on("keyfree",be.KEY_PRINTSCREEN,this.onShiftFree,this))}onMouseLeftButtonDoubleClick(e){this.planet.stopFlying(),this.stopRotation();const t=this.planet.getCartesianFromPixelTerrain(e.pos);if(t){const i=this.planet.camera;let r=i.maxAltitude+this.planet.ellipsoid.polarSize,s=i.minAltitude+this.planet.ellipsoid.polarSize;const n=i.eye.length(),a=this.planet.ellipsoid.cartesianToLonLat(t);if(n>r||n<s){this.planet.flyLonLat(new B(a.lon,a.lat));return}this.renderer.events.isKeyPressed(be.KEY_ALT)?this.planet.flyLonLat(new B(a.lon,a.lat,i.eye.distance(t)*2)):this.planet.flyLonLat(new B(a.lon,a.lat,i.eye.distance(t)*.57))}}onMouseLeftButtonClick(){this._active&&(this.renderer.handler.canvas.classList.add("ogGrabbingPoiner"),this.grabbedPoint=this.planet.getCartesianFromMouseTerrain(),this.grabbedPoint&&(this._eye0.copy(this.planet.camera.eye),this.grabbedSpheroid.radius=this.grabbedPoint.length(),this.stopRotation()))}stopRotation(){this.qRot.clear(),this.planet.layerLock.free(this._keyLock),this.planet.terrainLock.free(this._keyLock),this.planet._normalMapCreator.free(this._keyLock)}onMouseLeftButtonUp(e){this.renderer.handler.canvas.classList.remove("ogGrabbingPoiner"),e.x===e.prev_x&&e.y===e.prev_y&&(this.scaleRot=0)}onMouseLeftButtonDown(e){if(this._active){if(!this.grabbedPoint)return;if(this.planet.stopFlying(),e.moving){let t=this.planet.camera;if(t.slope>.2){const i=new se(t.eye,e.direction).hitSphere(this.grabbedSpheroid);if(i){this.scaleRot=1,this.qRot=D.getRotationBetweenVectors(i.normal(),this.grabbedPoint.normal());let r=this.qRot;t.eye=r.mulVec3(t.eye),t._u=r.mulVec3(t._u),t._r=r.mulVec3(t._r),t._b=r.mulVec3(t._b)}}else{let i=this.grabbedPoint,r=p.add(i,t._r),s=p.add(i,i.normal()),n=new p;new se(t.eye,e.direction).hitPlane(i,r,s,n)===se.INSIDE&&(t.eye=this._eye0.addA(n.subA(i).negate()))}}}}onMouseRightButtonClick(e){this.stopRotation(),this.planet.stopFlying(),this.pointOnEarth=this.planet.getCartesianFromPixelTerrain(e.pos),this.pointOnEarth&&(this.earthUp=this.pointOnEarth.normal())}onMouseRightButtonDown(e){const t=this.planet.camera;if(this.pointOnEarth&&e.moving){this.renderer.controlsBag.scaleRot=1;let i=.5/t.eye.distance(this.pointOnEarth)*(t._lonLat.height<5?5:t._lonLat.height)*O;i>.007&&(i=.007),t.rotateHorizontal(i*(e.x-e.prev_x),!1,this.pointOnEarth,this.earthUp),t.rotateVertical(i*(e.y-e.prev_y),this.pointOnEarth,this.minSlope)}}onShiftFree(){this._shiftBusy=!1}onMouseMove(e){this._active&&this.renderer.events.isKeyPressed(be.KEY_ALT)&&(this._shiftBusy||(this._shiftBusy=!0,this.onMouseRightButtonClick(e)),this.onMouseRightButtonDown(e))}onDraw(){if(this._active){const e=this.renderer,t=this.planet.camera;let i=t.eye.clone();if(this.stepIndex){e.controlsBag.scaleRot=1;const r=this.stepsForward[this.stepsCount-this.stepIndex--];let s=t.maxAltitude+this.planet.ellipsoid.polarSize,n=t.minAltitude+this.planet.ellipsoid.polarSize;const a=r.eye.length();if(a>s||a<n&&this._wheelDirection>0){this._wheelDirection=1;return}t.eye=r.eye,t._u=r.v,t._r=r.u,t._b=r.n}else this._deactivate&&(this._deactivate=!1,this.planet.layerLock.free(this._keyLock),this.planet.terrainLock.free(this._keyLock),this.planet._normalMapCreator.free(this._keyLock));if(e.events.mouseState.leftButtonDown||!this.scaleRot)return;if(this.scaleRot-=this.inertia,this.scaleRot<=0)this.scaleRot=0;else{e.controlsBag.scaleRot=this.scaleRot;let r=this.qRot.slerp(D.IDENTITY,1-this.scaleRot*this.scaleRot*this.scaleRot).normalize();r.x||r.y||r.z||(this.scaleRot=0),t.eye=r.mulVec3(t.eye),t._u=r.mulVec3(t._u),t._r=r.mulVec3(t._r),t._b=r.mulVec3(t._b)}t.eye.distance(i)/t.getAltitude()>.01?(this.planet.layerLock.lock(this._keyLock),this.planet.terrainLock.lock(this._keyLock),this.planet._normalMapCreator.lock(this._keyLock)):(this.planet.layerLock.free(this._keyLock),this.planet.terrainLock.free(this._keyLock),this.planet._normalMapCreator.free(this._keyLock))}}}xe.createCylinder(1.1,0,2.7,20,1,!0,!1,0,0,0),xe.createCylinder(1.1,0,2,6,1,!0,!0,0,0,0);const ur=[1,2,3,5,10,20,30,50,100,200,300,500,1e3,2e3,3e3,5e3,1e4,2e4,3e4,5e4,1e5,2e5,3e5,5e5,1e6,2e6,3e6,5e6,1e7],tl=`<div class="og-scale-container">
|
|
1444
|
+
<div class="og-units-height"></div>`,Ko='<svg width="12" height="12"><g><path stroke-width="1" stroke-opacity="1" d="M6 0L6 12M0 6L12 6" stroke="#337ab7"></path></g></svg>',Qo=[Zo,$o];class Jo extends Le{constructor(e={}){super(e),this._type=e.type||0,this._TYPE_FUNC=[this._SHOW_DECIMAL,this._SHOW_DEGREE],this._showFn=null,this._el=null,this._latSideEl=null,this._lonSideEl=null,this._latValEl=null,this._lonValEl=null,this._heightEl=null,this._altUnitVal=e.altitudeUnit||"m",this._heightModeVal=e.heightMode||"ell",this._altUnit=tn[this._altUnitVal],this._heightMode=Xt[this._heightModeVal],this._lonLat=null,this._centerMode=e.centerMode!=null?e.centerMode:!0}_SHOW_DECIMAL(e){if(e){let t=e.lat,i=e.lon;t>=0?this._latSideEl.innerHTML="N":this._latSideEl.innerHTML="S",i>=0?this._lonSideEl.innerHTML="E":this._lonSideEl.innerHTML="W",this._latValEl.innerHTML=Math.abs(t).toFixed(7)+"°",this._lonValEl.innerHTML=Math.abs(i).toFixed(7)+"°"}}_SHOW_DEGREE(e){if(e){let t=e.lat,i=e.lon;t>=0?this._latSideEl.innerHTML="N":this._latSideEl.innerHTML="S",i>=0?this._lonSideEl.innerHTML="E":this._lonSideEl.innerHTML="W";let r=0,s=t<0?Math.ceil(t):Math.floor(t),n=Math.floor(r=Math.abs(t-s)*60),a=Math.floor((r-n)*6e3)/100;this._latValEl.innerHTML=Math.abs(s)+"°"+n+"'"+a.toFixed(0)+'"',s=i<0?Math.ceil(i):Math.floor(i),n=Math.floor(r=Math.abs(i-s)*60),a=Math.floor((r-n)*6e3)/100,this._lonValEl.innerHTML=Math.abs(s)+"°"+n+"'"+a.toFixed(0)+'"'}}_createCenterEl(){let e=document.createElement("div");return e.className="og-center-icon",e.innerHTML=Ko,e}_updateUnits(){this._heightMode=Xt[this._heightModeVal],this._altUnit=tn[this._altUnitVal],this._el.querySelector(".og-units-height").innerHTML=en(this._altUnit),this._showHeight()}_refreshCoordinates(){this._type>=this._TYPE_FUNC.length&&(this._type=0);let e=this._el;e.innerHTML=Qo[this._type],this._latSideEl=e.querySelector(".og-lat-side"),this._lonSideEl=e.querySelector(".og-lon-side"),this._latValEl=e.querySelector(".og-lat-val"),this._lonValEl=e.querySelector(".og-lon-val"),this._heightEl=e.querySelector(".og-height"),this._showFn=this._TYPE_FUNC[this._type],this._showFn(this._lonLat)}oninit(){this._el=document.createElement("div"),this._el.classList.add("og-coordinates"),this.renderer.div.appendChild(this._el),this._el.addEventListener("click",()=>{this._type++,this._refreshCoordinates(),this._updateUnits(),this._showHeight()}),this._centerMode?(this.renderer.div.appendChild(this._createCenterEl()),this.planet.camera.events.on("moveend",this._grabCoordinates,this),this.planet.camera.events.on("moveend",Yr(()=>this._showHeight(),400,!0),this)):(this.renderer.events.on("mousemove",this._grabCoordinates,this),this.renderer.events.on("mousestop",Yr(()=>this._showHeight(),400,!0),this)),this._refreshCoordinates(),this._updateUnits()}_grabCoordinates(e){let t=e.pos,i,r=this.renderer;this._centerMode?i=r.handler.getCenter():i=t,this._lonLat=this.planet.getLonLatFromPixelTerrain(i)||null,this._showFn(this._lonLat)}async _showHeight(){if(this._lonLat&&this.planet){let e=0;this._heightEl.style.opacity="0.7",this._heightMode===Xt.ell?(e=await this.planet.getHeightAboveELL(this._lonLat),e=Number(cr(!0,Ue,this._altUnit,e))):this._heightMode===Xt.msl&&(e=await this.planet.getHeightDefault(this._lonLat),e=Number(cr(!0,Ue,this._altUnit,e))),this._heightEl.style.opacity="1.0",this._heightEl.innerHTML=e.toString()}}}let rn=class{constructor(){this.x=0,this.y=0,this.prev_x=0,this.prev_y=0,this.grabbedPoint=new p,this.grabbedSpheroid=new Ze}dX(){return this.x-this.prev_x}dY(){return this.y-this.prev_y}};class el extends Le{constructor(e={}){super(e),this.grabbedPoint=new p,this.grabbedDir=new p,this.inertia=.007,this.grabbedSpheroid=new Ze,this.planet=null,this._vRot=new D,this._hRot=new D,this._a=0,this.scaleRot=0,this.currState=0,this.positionState=[{h:17119745303455353e-9,max:.98,min:-.98},{h:6866011,max:.98,min:-.98},{h:3e6,max:.98,min:-.98},{h:1e6,max:.98,min:-.98},{h:5e5,max:.98,min:-.98}],this.touches=[new rn,new rn]}switchZoomState(e){this.stopRotation(),e>0?this.currState++:this.currState--,this.currState<=0&&(this.currState=0),this.currState>=this.positionState.length&&(this.currState=this.positionState.length-1),this.planet.stopFlying();const t=this.planet.camera._lonLat;this.planet.flyLonLat(new B(t.lon,t.lat,this.positionState[this.currState].h))}onMouseWheel(e){this.switchZoomState(e.wheelDelta)}oninit(){this.activate()}onactivate(){let e=this.renderer;e.events.on("mousewheel",this.onMouseWheel,this),e.events.on("lhold",this.onMouseLeftButtonDown,this),e.events.on("ldown",this.onMouseLeftButtonClick,this),e.events.on("lup",this.onMouseLeftButtonUp,this),e.events.on("touchstart",this.onTouchStart,this),e.events.on("touchend",this.onTouchEnd,this),e.events.on("touchmove",this.onTouchMove,this),e.events.on("draw",this.onDraw,this)}onTouchStart(e){if(e.sys.touches.length==1){const t=this.touches[0];t.x=e.sys.touches.item(0).pageX-e.sys.offsetLeft,t.y=e.sys.touches.item(0).pageY-e.sys.offsetTop,t.prev_x=e.sys.touches.item(0).pageX-e.sys.offsetLeft,t.prev_y=e.sys.touches.item(0).pageY-e.sys.offsetTop,t.grabbedPoint=this.planet.getCartesianFromPixelTerrain(new V(t.x,t.y))||null,t.grabbedPoint&&(t.grabbedSpheroid.radius=t.grabbedPoint.length(),this.stopRotation())}}onTouchEnd(e){e.sys.touches.length==0&&(this.scaleRot=1,Math.abs(this.touches[0].x-this.touches[0].prev_x)<3&&Math.abs(this.touches[0].y-this.touches[0].prev_y)<3&&this.stopRotation())}onTouchMove(e){if(e.sys.touches.length==1){let t=this.planet.camera,i=this.touches[0];if(i.prev_x=i.x,i.prev_y=i.y,i.x=e.sys.touches.item(0).pageX-e.sys.offsetLeft,i.y=e.sys.touches.item(0).pageY-e.sys.offsetTop,!i.grabbedPoint)return;let r=t.unproject(i.x,i.y),s=new se(t.eye,r).hitSphere(i.grabbedSpheroid);if(s){this._a=Math.acos(i.grabbedPoint.y/i.grabbedSpheroid.radius)-Math.acos(s.y/i.grabbedSpheroid.radius),this._vRot=D.axisAngleToQuat(t._u,this._a),this._hRot=D.getRotationBetweenVectors(new p(s.x,0,s.z).normal(),new p(i.grabbedPoint.x,0,i.grabbedPoint.z).normal());let n=this._hRot.mul(this._vRot),a=this.positionState[this.currState],o=n.mulVec3(t.eye).normal().dot(p.NORTH);(o>a.max||o<a.min)&&(n=D.yRotation(n.getYaw())),t.set(n.mulVec3(t.eye),p.ZERO,p.NORTH),t.update()}}}onMouseLeftButtonClick(e){this.renderer.handler.canvas.classList.add("ogGrabbingPoiner"),this.grabbedPoint=this.planet.getCartesianFromMouseTerrain()||null,this.grabbedDir.copy(e.direction),this.grabbedPoint&&(this.grabbedSpheroid.radius=this.grabbedPoint.length(),this.stopRotation())}stopRotation(){this.scaleRot=0,this._a=0,this._vRot.clear(),this._hRot.clear()}onMouseLeftButtonUp(e){this.scaleRot=1,this.renderer.handler.canvas.classList.remove("ogGrabbingPoiner"),Math.abs(e.x-e.prev_x)<3&&Math.abs(e.y-e.prev_y)<3&&this.stopRotation()}onMouseLeftButtonDown(e){let t=this.planet.camera;if(!(!this.grabbedPoint||t.isFlying()))if(this.renderer.events.mouseState.moving){let i=new se(t.eye,e.direction).hitSphere(this.grabbedSpheroid);if(i){this._a=Math.acos(this.grabbedPoint.y/this.grabbedSpheroid.radius)-Math.acos(i.y/this.grabbedSpheroid.radius);let r=this._vRot=D.axisAngleToQuat(t._u,this._a);t.set(r.mulVec3(t.eye),p.ZERO,r.mulVec3(t.getUp())),this._hRot=D.getRotationBetweenVectors(new p(i.x,0,i.z).normal(),new p(this.grabbedPoint.x,0,this.grabbedPoint.z).normal()),r=this._hRot,t.set(r.mulVec3(t.eye),p.ZERO,r.mulVec3(t.getUp())),t.update()}}else this.scaleRot=0}onDraw(){let e=this.renderer,t=this.planet.camera;if(!(e.events.mouseState.leftButtonDown||!this.scaleRot||t.isFlying()))if(this.scaleRot-=this.inertia,this.scaleRot<=0)this.scaleRot=0;else{this._vRot=D.axisAngleToQuat(t._u,this._a);let i=this._vRot.mul(this._hRot),r=i.mulVec3(t.eye).normal().dot(p.NORTH),s=this.positionState[this.currState];(r>s.max||r<s.min)&&(i=D.yRotation(i.getYaw())),e.controlsBag.scaleRot=this.scaleRot,i=i.slerp(D.IDENTITY,1-this.scaleRot*this.scaleRot*this.scaleRot).normalize(),i.x||i.y||i.z||(this.scaleRot=0),t.set(i.mulVec3(t.eye),p.ZERO,p.NORTH),t.update()}}}const be={MB_LEFT:0,MB_RIGHT:2,MB_MIDDLE:1,KEY_CTRL:17,KEY_ALT:18,KEY_SHIFT:16,KEY_SPACE:32,KEY_PGUP:33,KEY_PGDN:34,KEY_LEFT:37,KEY_UP:38,KEY_RIGHT:39,KEY_DOWN:40,KEY_PRINTSCREEN:44,KEY_EQUALS:61,KEY_A:65,KEY_C:67,KEY_D:68,KEY_E:69,KEY_F:70,KEY_H:72,KEY_I:73,KEY_K:75,KEY_L:76,KEY_N:78,KEY_O:79,KEY_P:80,KEY_Q:81,KEY_R:82,KEY_S:83,KEY_V:86,KEY_W:87,KEY_X:88,KEY_Z:90,KEY_PLUS:107,KEY_F1:112,KEY_MINUS:173,KEY_APOSTROPHE:192,KEY_BACK_SLASH:220,KEY_MORE:190,KEY_SLASH:191,KEY_LESS:188,KEY_LEFT_SQUARE_BRACKET:219,KEY_RIGHT_SQUARE_BRACKET:221,KEY_SINGLE_QUOTE:222};class dr{constructor(){this._lock=0}lock(e){this._lock|=1<<e.id}free(e){this._lock&=~(1<<e.id)}isFree(){return this._lock===0}isLocked(){return this._lock!==0}}class tt{constructor(){this.__id=tt.__counter__++}get id(){return this.__id}}tt.__counter__=0;class fr extends Le{constructor(e={}){super(e),this._deactivate=!1,this._shiftBusy=!1,this._name="mouseNavigation",this.grabbedPoint=new p,this._eye0=new p,this.pointOnEarth=new p,this.earthUp=new p,this.inertia=.007,this.grabbedSpheroid=new Ze,this.qRot=new D,this.scaleRot=0,this.distDiff=.3,this.stepsCount=8,this.stepsForward=null,this.stepIndex=0,this._lmbDoubleClickActive=!0,this.minSlope=e.minSlope||.1,this._wheelDirection=1,this._keyLock=new tt}static getMovePointsFromPixelTerrain(e,t,i,r,s,n,a){const o=[];let l=e.eye.clone(),h=e._b.clone(),d=e._r.clone(),f=e._u.clone(),u=t.getCartesianFromPixelTerrain(s);if(u||(u=t.getCartesianFromPixelTerrain(t.renderer.handler.getCenter())),u){a||(a=p.sub(u,e.eye).normalize());let g=r*e.eye.distance(u)/i;n?g=-1.25*g:g*=2;const _=h.scaleTo(g);if(a.dot(e.eye.normal().negate())>=.1){const v=new Ze;v.radius=u.length();let b=[],y=[],w=!1;for(let x=0;x<i;x++){l.addA(_);const T=new se(l,a).hitSphere(v);if(y[x]=l.clone(),T)b[x]=new ne().rotateBetweenVectors(u.normal(),T.normal());else{w=!0;break}}if(w){l=e.eye.clone();for(let x=0;x<i;x++)o[x]={eye:l.addA(_).clone(),v:f,u:d,n:h}}else for(let x=0;x<i;x++){let T=b[x];o[x]={eye:T.mulVec3(y[x]),v:T.mulVec3(f),u:T.mulVec3(d),n:T.mulVec3(h)}}}else for(let v=0;v<i;v++)o[v]={eye:l.addA(a.scaleTo(-g)).clone(),v:f,u:d,n:h};return o}}onactivate(){this.renderer&&(this.renderer.events.on("mousewheel",this.onMouseWheel,this),this.renderer.events.on("lhold",this.onMouseLeftButtonDown,this),this.renderer.events.on("rhold",this.onMouseRightButtonDown,this),this.renderer.events.on("ldown",this.onMouseLeftButtonClick,this),this.renderer.events.on("lup",this.onMouseLeftButtonUp,this),this.renderer.events.on("rdown",this.onMouseRightButtonClick,this),this.renderer.events.on("draw",this.onDraw,this,-1e3),this.renderer.events.on("mousemove",this.onMouseMove,this),this.renderer.events.on("mouseleave",this.onMouseLeave,this),this.renderer.events.on("mouseenter",this.onMouseEnter,this),this._lmbDoubleClickActive&&this.renderer.events.on("ldblclick",this.onMouseLeftButtonDoubleClick,this))}ondeactivate(){this.renderer&&(this.renderer.events.off("mousewheel",this.onMouseWheel),this.renderer.events.off("lhold",this.onMouseLeftButtonDown),this.renderer.events.off("rhold",this.onMouseRightButtonDown),this.renderer.events.off("ldown",this.onMouseLeftButtonClick),this.renderer.events.off("lup",this.onMouseLeftButtonUp),this.renderer.events.off("rdown",this.onMouseRightButtonClick),this.renderer.events.off("draw",this.onDraw),this.renderer.events.off("ldblclick",this.onMouseLeftButtonDoubleClick),this.renderer.events.off("mouseleave",this.onMouseLeave),this.renderer.events.off("mouseenter",this.onMouseEnter))}activateDoubleClickZoom(){this._lmbDoubleClickActive||(this._lmbDoubleClickActive=!0,this.renderer&&this.renderer.events.on("ldblclick",this.onMouseLeftButtonDoubleClick,this))}deactivateDoubleClickZoom(){this._lmbDoubleClickActive&&(this._lmbDoubleClickActive=!1,this.renderer&&this.renderer.events.off("ldblclick",this.onMouseLeftButtonDoubleClick))}onMouseEnter(e){const t=this.renderer.events;t.isKeyPressed(be.KEY_ALT)&&t.releaseKeys(),t.updateButtonsStates(e.sys.buttons),t.mouseState.leftButtonDown?this.renderer.handler.canvas.classList.add("ogGrabbingPoiner"):this.renderer.handler.canvas.classList.remove("ogGrabbingPoiner")}onMouseLeave(){this.renderer.events.mouseState.leftButtonDown&&(this.scaleRot=0),this.renderer.handler.canvas.classList.remove("ogGrabbingPoiner")}onMouseWheel(e){this.stepIndex||(this.planet.stopFlying(),this.stopRotation(),this._deactivate=!0,this.planet.layerLock.lock(this._keyLock),this.planet._normalMapCreator.lock(this._keyLock),this.stepsForward=fr.getMovePointsFromPixelTerrain(this.planet.camera,this.planet,this.stepsCount,this.distDiff,e.pos,e.wheelDelta>0,e.direction)||null,this._wheelDirection=e.wheelDelta,this.stepsForward&&(this.stepIndex=this.stepsCount))}oninit(){this.activate(),this.renderer&&(this.renderer.events.on("keyfree",be.KEY_ALT,this.onShiftFree,this),this.renderer.events.on("keyfree",be.KEY_PRINTSCREEN,this.onShiftFree,this))}onMouseLeftButtonDoubleClick(e){this.planet.stopFlying(),this.stopRotation();const t=this.planet.getCartesianFromPixelTerrain(e.pos);if(t){const i=this.planet.camera;let r=i.maxAltitude+this.planet.ellipsoid.polarSize,s=i.minAltitude+this.planet.ellipsoid.polarSize;const n=i.eye.length(),a=this.planet.ellipsoid.cartesianToLonLat(t);if(n>r||n<s){this.planet.flyLonLat(new B(a.lon,a.lat));return}this.renderer.events.isKeyPressed(be.KEY_ALT)?this.planet.flyLonLat(new B(a.lon,a.lat,i.eye.distance(t)*2)):this.planet.flyLonLat(new B(a.lon,a.lat,i.eye.distance(t)*.57))}}onMouseLeftButtonClick(){this._active&&(this.renderer.handler.canvas.classList.add("ogGrabbingPoiner"),this.grabbedPoint=this.planet.getCartesianFromMouseTerrain(),this.grabbedPoint&&(this._eye0.copy(this.planet.camera.eye),this.grabbedSpheroid.radius=this.grabbedPoint.length(),this.stopRotation()))}stopRotation(){this.qRot.clear(),this.planet.layerLock.free(this._keyLock),this.planet.terrainLock.free(this._keyLock),this.planet._normalMapCreator.free(this._keyLock)}onMouseLeftButtonUp(e){this.renderer.handler.canvas.classList.remove("ogGrabbingPoiner"),e.x===e.prev_x&&e.y===e.prev_y&&(this.scaleRot=0)}onMouseLeftButtonDown(e){if(this._active){if(!this.grabbedPoint)return;if(this.planet.stopFlying(),e.moving){let t=this.planet.camera;if(t.slope>.2){const i=new se(t.eye,e.direction).hitSphere(this.grabbedSpheroid);if(i){this.scaleRot=1,this.qRot=D.getRotationBetweenVectors(i.normal(),this.grabbedPoint.normal());let r=this.qRot;t.eye=r.mulVec3(t.eye),t._u=r.mulVec3(t._u),t._r=r.mulVec3(t._r),t._b=r.mulVec3(t._b)}}else{let i=this.grabbedPoint,r=p.add(i,t._r),s=p.add(i,i.normal()),n=new p;new se(t.eye,e.direction).hitPlane(i,r,s,n)===se.INSIDE&&(t.eye=this._eye0.addA(n.subA(i).negate()))}}}}onMouseRightButtonClick(e){this.stopRotation(),this.planet.stopFlying(),this.pointOnEarth=this.planet.getCartesianFromPixelTerrain(e.pos),this.pointOnEarth&&(this.earthUp=this.pointOnEarth.normal())}onMouseRightButtonDown(e){const t=this.planet.camera;if(this.pointOnEarth&&e.moving){this.renderer.controlsBag.scaleRot=1;let i=.5/t.eye.distance(this.pointOnEarth)*(t._lonLat.height<5?5:t._lonLat.height)*O;i>.007&&(i=.007),t.rotateHorizontal(i*(e.x-e.prev_x),!1,this.pointOnEarth,this.earthUp),t.rotateVertical(i*(e.y-e.prev_y),this.pointOnEarth,this.minSlope)}}onShiftFree(){this._shiftBusy=!1}onMouseMove(e){this._active&&this.renderer.events.isKeyPressed(be.KEY_ALT)&&(this._shiftBusy||(this._shiftBusy=!0,this.onMouseRightButtonClick(e)),this.onMouseRightButtonDown(e))}onDraw(){if(this._active){const e=this.renderer,t=this.planet.camera;let i=t.eye.clone();if(this.stepIndex){e.controlsBag.scaleRot=1;const r=this.stepsForward[this.stepsCount-this.stepIndex--];let s=t.maxAltitude+this.planet.ellipsoid.polarSize,n=t.minAltitude+this.planet.ellipsoid.polarSize;const a=r.eye.length();if(a>s||a<n&&this._wheelDirection>0){this._wheelDirection=1;return}t.eye=r.eye,t._u=r.v,t._r=r.u,t._b=r.n}else this._deactivate&&(this._deactivate=!1,this.planet.layerLock.free(this._keyLock),this.planet.terrainLock.free(this._keyLock),this.planet._normalMapCreator.free(this._keyLock));if(e.events.mouseState.leftButtonDown||!this.scaleRot)return;if(this.scaleRot-=this.inertia,this.scaleRot<=0)this.scaleRot=0;else{e.controlsBag.scaleRot=this.scaleRot;let r=this.qRot.slerp(D.IDENTITY,1-this.scaleRot*this.scaleRot*this.scaleRot).normalize();r.x||r.y||r.z||(this.scaleRot=0),t.eye=r.mulVec3(t.eye),t._u=r.mulVec3(t._u),t._r=r.mulVec3(t._r),t._b=r.mulVec3(t._b)}t.eye.distance(i)/t.getAltitude()>.01?(this.planet.layerLock.lock(this._keyLock),this.planet.terrainLock.lock(this._keyLock),this.planet._normalMapCreator.lock(this._keyLock)):(this.planet.layerLock.free(this._keyLock),this.planet.terrainLock.free(this._keyLock),this.planet._normalMapCreator.free(this._keyLock))}}}xe.createCylinder(1.1,0,2.7,20,1,!0,!1,0,0,0),xe.createCylinder(1.1,0,2,6,1,!0,!0,0,0,0);const ur=[1,2,3,5,10,20,30,50,100,200,300,500,1e3,2e3,3e3,5e3,1e4,2e4,3e4,5e4,1e5,2e5,3e5,5e5,1e6,2e6,3e6,5e6,1e7],tl=`<div class="og-scale-container">
|
|
1445
1445
|
<div class="og-scale-label"></div>
|
|
1446
1446
|
<div class="og-scale-ruler"></div>
|
|
1447
1447
|
</div>`;class il extends Le{constructor(e={}){(!e.name||e.name==="")&&(e.name="scaleControl"),super(e),this._template=tl,this._minWidth=100,this._maxWidth=150,this._isCenter=e.isCenter!=null?e.isCenter:!0,this._mPx=0,this.currWidth=0,this._metersInMinSize=0,this.el=null,this._scaleLabelEl=null}_renderTemplate(){return Gr(this._template)[0]}oninit(){this.el=this._renderTemplate(),this._scaleLabelEl=this.el.querySelector(".og-scale-label"),this.renderer.div.appendChild(this.el),this._isCenter?(this.planet.camera.events.on("moveend",()=>{this._drawScreen(this.planet.renderer.handler.getCenter())}),!this.planet.terrain.isEmpty&&this.planet.terrain.events.on("loadend",()=>{this._drawScreen(this.planet.renderer.handler.getCenter())})):(this.renderer.events.on("mousemove",e=>{!e.leftButtonHold&&!e.rightButtonHold&&this._drawScreen(e.pos)}),this.planet.camera.events.on("moveend",()=>{let e=this.renderer.events.mouseState;!e.leftButtonHold&&!e.rightButtonHold&&this._drawScreen(e.pos)}))}_drawScreen(e){let t=this.planet.camera,i=e,r=this.planet.getDistanceFromPixel(i)||0;r===0&&(i=t.project(p.ZERO),r=this.planet.getDistanceFromPixel(i)||0);let s=t.getForward().scaleTo(r).addA(t.eye),n=r*Math.tan(t.viewAngle*O),a=s.add(t.getRight().scaleTo(n)),o=t.project(a);this._mPx=n/o.distance(i);let l=this._mPx*this._minWidth,h=Zi(ur,l,(g,_)=>g-_);h<0&&(h=~h);let d=ur[h],f=ur[h+1],u=(d-l)/(f-d);this.currWidth=this._minWidth+u*(this._maxWidth-this._minWidth),d>1e3?this._scaleLabelEl.innerText=`${d/1e3} km`:this._scaleLabelEl.innerText=`${d} m`,this._metersInMinSize=l,this.el.style.width=this.currWidth+"px"}}class rl extends Le{constructor(e={}){super({name:"SimpleSkyBackground",...e}),this._colorOne=new Float32Array([1,1,1]),this._colorTwo=new Float32Array([0,153/255,221/255])}set colorOne(e){let t=Wi(e);this._colorOne[0]=t.x,this._colorOne[1]=t.y,this._colorOne[2]=t.z}set colorTwo(e){let t=Wi(e);this._colorTwo[0]=t.x,this._colorTwo[1]=t.y,this._colorTwo[2]=t.z}oninit(){this.renderer.handler.addProgram(sl()),this.activate()}onactivate(){super.onactivate(),this.planet.events.on("draw",this._drawBackground,this)}ondeactivate(){super.ondeactivate(),this.planet.events.off("draw",this._drawBackground)}_drawBackground(){let e=this.renderer.handler,t=e.programs.simpleSkyBackground,i=t._program,r=i.uniforms,s=e.gl,n=this.planet.camera;s.disable(s.DEPTH_TEST),t.activate(),s.bindBuffer(s.ARRAY_BUFFER,this.renderer.screenFramePositionBuffer),s.vertexAttribPointer(i.attributes.corners,2,s.FLOAT,!1,0,0),s.uniform3fv(r.camPos,[n.eye.x,n.eye.y,n.eye.z]),s.uniform2fv(r.iResolution,[e.getWidth(),e.getHeight()]),s.uniform1f(r.fov,n.getViewAngle()),s.uniform1f(r.earthRadius,this.planet.ellipsoid.getPolarSize()+1),s.uniform3fv(r.colorOne,this._colorOne),s.uniform3fv(r.colorTwo,this._colorTwo),s.uniformMatrix4fv(r.viewMatrix,!1,n.getViewMatrix()),s.drawArrays(s.TRIANGLE_STRIP,0,4),s.enable(s.DEPTH_TEST)}}function sl(){return new G("simpleSkyBackground",{uniforms:{iResolution:"vec2",fov:"float",camPos:"vec3",earthRadius:"float",viewMatrix:"mat4",colorOne:"vec3",colorTwo:"vec3"},attributes:{corners:"vec3"},vertexShader:`attribute vec2 corners;
|
|
@@ -1845,7 +1845,7 @@
|
|
|
1845
1845
|
lightTransferFactor /= float(SAMPLE_COUNT);
|
|
1846
1846
|
vec3 color = light / (1.0 - lightTransferFactor);
|
|
1847
1847
|
gl_FragColor = vec4(color, 1.0);
|
|
1848
|
-
}`})}const vr="const vec3 nightStep = 10.0 * vec3(0.58, 0.48, 0.25);",ln="#define blend(DEST, SAMPLER, OFFSET, OPACITY) src = texture( SAMPLER, OFFSET.xy + vTextureCoord.xy * OFFSET.zw ); DEST = DEST * (1.0 - src.a * OPACITY) + src * OPACITY;",hn="#define blend(DEST, SAMPLER, OFFSET, OPACITY) src = texture2D( SAMPLER, OFFSET.xy + vTextureCoord.xy * OFFSET.zw ); DEST = DEST * (1.0 - src.a * OPACITY) + src * OPACITY;",bl="#define blendPicking(DEST, OFFSET, SAMPLER, MASK, COLOR, OPACITY) tc = OFFSET.xy + vTextureCoord.xy * OFFSET.zw; t = texture2D(SAMPLER, tc); p = texture2D(MASK, tc); DEST = mix(DEST, vec4(max(COLOR.rgb, p.rgb), OPACITY), (t.a == 0.0 ? 0.0 : 1.0) * COLOR.a);"
|
|
1848
|
+
}`})}const vr="const vec3 nightStep = 10.0 * vec3(0.58, 0.48, 0.25);",ln="#define blend(DEST, SAMPLER, OFFSET, OPACITY) src = texture( SAMPLER, OFFSET.xy + vTextureCoord.xy * OFFSET.zw ); DEST = DEST * (1.0 - src.a * OPACITY) + src * OPACITY;",hn="#define blend(DEST, SAMPLER, OFFSET, OPACITY) src = texture2D( SAMPLER, OFFSET.xy + vTextureCoord.xy * OFFSET.zw ); DEST = DEST * (1.0 - src.a * OPACITY) + src * OPACITY;",bl="#define blendPicking(DEST, OFFSET, SAMPLER, MASK, COLOR, OPACITY) tc = OFFSET.xy + vTextureCoord.xy * OFFSET.zw; t = texture2D(SAMPLER, tc); p = texture2D(MASK, tc); DEST = mix(DEST, vec4(max(COLOR.rgb, p.rgb), OPACITY), (t.a == 0.0 ? 0.0 : 1.0) * COLOR.a);",Zt=4;function wl(){return new G("drawnode_screen_nl",{uniforms:{projectionMatrix:"mat4",viewMatrix:"mat4",eyePositionHigh:"vec3",eyePositionLow:"vec3",samplerCount:"int",tileOffsetArr:"vec4",layerOpacityArr:"float",samplerArr:"sampler2darray",defaultTexture:"sampler2d",height:"float"},attributes:{aVertexPositionHigh:"vec3",aVertexPositionLow:"vec3",aTextureCoord:"vec2"},vertexShader:`precision highp float;
|
|
1849
1849
|
|
|
1850
1850
|
attribute vec3 aVertexPositionHigh;
|
|
1851
1851
|
attribute vec3 aVertexPositionLow;
|
|
@@ -1874,7 +1874,7 @@
|
|
|
1874
1874
|
// This is works for Mac Chrome, prevent some weird optimization I suppose
|
|
1875
1875
|
gl_Position = m * vec4(highDiff + lowDiff, 1.0);
|
|
1876
1876
|
}`,fragmentShader:`precision highp float;
|
|
1877
|
-
#define SLICE_SIZE ${
|
|
1877
|
+
#define SLICE_SIZE ${Zt+1}
|
|
1878
1878
|
uniform vec4 tileOffsetArr[SLICE_SIZE];
|
|
1879
1879
|
uniform float layerOpacityArr[SLICE_SIZE];
|
|
1880
1880
|
uniform sampler2D defaultTexture;
|
|
@@ -1948,7 +1948,7 @@
|
|
|
1948
1948
|
precision highp float;
|
|
1949
1949
|
|
|
1950
1950
|
#define MAX_POINT_LIGHTS 1
|
|
1951
|
-
#define SLICE_SIZE ${
|
|
1951
|
+
#define SLICE_SIZE ${Zt+1}
|
|
1952
1952
|
|
|
1953
1953
|
uniform vec4 specular;
|
|
1954
1954
|
uniform vec3 diffuse;
|
|
@@ -2096,7 +2096,7 @@
|
|
|
2096
2096
|
precision highp float;
|
|
2097
2097
|
|
|
2098
2098
|
#define MAX_POINT_LIGHTS 1
|
|
2099
|
-
#define SLICE_SIZE ${
|
|
2099
|
+
#define SLICE_SIZE ${Zt+1}
|
|
2100
2100
|
|
|
2101
2101
|
uniform vec4 specular;
|
|
2102
2102
|
uniform vec3 diffuse;
|
|
@@ -2247,7 +2247,7 @@
|
|
|
2247
2247
|
precision highp float;
|
|
2248
2248
|
|
|
2249
2249
|
#define MAX_POINT_LIGHTS 1
|
|
2250
|
-
#define SLICE_SIZE ${
|
|
2250
|
+
#define SLICE_SIZE ${Zt+1}
|
|
2251
2251
|
|
|
2252
2252
|
uniform vec4 specular;
|
|
2253
2253
|
uniform vec3 diffuse;
|
|
@@ -2515,7 +2515,7 @@
|
|
|
2515
2515
|
|
|
2516
2516
|
gl_Position = m * vec4(highDiff + lowDiff, 1.0);
|
|
2517
2517
|
}`,fragmentShader:`precision highp float;
|
|
2518
|
-
#define SLICE_SIZE ${
|
|
2518
|
+
#define SLICE_SIZE ${Zt+1}
|
|
2519
2519
|
uniform vec4 tileOffsetArr[SLICE_SIZE];
|
|
2520
2520
|
uniform vec4 pickingColorArr[SLICE_SIZE];
|
|
2521
2521
|
uniform sampler2D samplerArr[SLICE_SIZE];
|
|
@@ -2635,7 +2635,7 @@
|
|
|
2635
2635
|
|
|
2636
2636
|
void main(void) {
|
|
2637
2637
|
gl_FragColor = vec4(frustumPickingColor, 1.0);
|
|
2638
|
-
} `})}class dn{constructor(e,t={}){this.handler=e,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:!0,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)}}class
|
|
2638
|
+
} `})}class dn{constructor(e,t={}){this.handler=e,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:!0,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)}}class $t{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=e.src,i="<!DOCTYPE html>";i+="<html>",i+="<head><title>Print</title></head>",i+="<body>",i+='<img src="'+t+'">',i+="</body>",i+="</html>";let r=window.open("","","width="+e.width+"px ,height="+e.height+"px");r&&(r.document.open(),r.document.write(i),r.document.close(),r.focus())}destroy(){this._canvas.width=1,this._canvas.height=1,this._canvas=null,this._context=null}}class Be extends dn{constructor(e,t={}){super(e,t),this._isBare=t.isBare||!1,this._internalFormatArr=t.internalFormat instanceof Array?t.internalFormat:[t.internalFormat||"RGBA"],this._formatArr=t.format instanceof Array?t.format:[t.format||"RGBA"],this._typeArr=t.type instanceof Array?t.type:[t.type||"UNSIGNED_BYTE"],t.attachment instanceof Array?this._attachmentArr=t.attachment.map((i,r)=>{let s=i.toUpperCase();return s==="COLOR_ATTACHMENT"?`${s}${r.toString()}`:s}):this._attachmentArr=[t.attachment||"COLOR_ATTACHMENT0"],this._renderbufferTarget=t.renderbufferTarget!=null?t.renderbufferTarget:"DEPTH_ATTACHMENT",this.textures=t.textures||new Array(this._size)}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),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){if(this._fbo=e.createFramebuffer(),e.bindFramebuffer(e.FRAMEBUFFER,this._fbo),!this._isBare){let t=[];for(let i=0;i<this.textures.length;i++){let r=this.textures[i]||this.handler.createEmptyTexture2DExt(this._width,this._height,this._filter,this._internalFormatArr[i],this._formatArr[i],this._typeArr[i]),s=e[this._attachmentArr[i]];r&&(this.bindOutputTexture(r,s),this.textures[i]=r),this._attachmentArr[i]!="DEPTH_ATTACHMENT"&&t.push(s)}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)}}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._typeArr[r]],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._typeArr[t]],e),i.bindFramebuffer(i.FRAMEBUFFER,null)}getImage(){let e=new Uint8Array(4*this._width*this._height);this.readAllPixels(e);let t=new $t(this._width,this._height);return t.setData(e),t.getImage()}}class Ll extends Le{constructor(e={}){super({name:"Atmosphere",...e}),this._transmittanceBuffer=null,this._scatteringBuffer=null,this.opacity=1}oninit(){this.renderer&&(this.renderer.handler.addProgram(xl(),!0),this.renderer.handler.addProgram(yl(),!0),this.renderer.handler.addProgram(Bl(),!0),this._drawAtmosphereTextures(),this.activate())}onactivate(){super.onactivate(),this.planet&&this.planet.events.on("draw",this._drawBackground,this)}ondeactivate(){super.ondeactivate(),this.planet&&this.planet.events.off("draw",this._drawBackground)}_drawAtmosphereTextures(){let e=1024,t=1024;this._transmittanceBuffer=new Be(this.renderer.handler,{width:e,height:t,useDepth:!1,filter:"LINEAR",type:"FLOAT",internalFormat:"RGBA16F"}),this._transmittanceBuffer.init(),this._scatteringBuffer=new Be(this.renderer.handler,{width:e,height:t,useDepth:!1,filter:"LINEAR",type:"FLOAT",internalFormat:"RGBA16F"}),this._scatteringBuffer.init();let i=this.renderer.screenFramePositionBuffer,r=this.renderer.handler,s=r.gl;this._transmittanceBuffer.activate();let n=r.programs.transmittance,a=n._program.attributes,o=n._program.uniforms;n.activate(),s.clearColor(0,0,0,1),s.clear(s.COLOR_BUFFER_BIT|s.DEPTH_BUFFER_BIT),s.uniform2fv(o.iResolution,[this._transmittanceBuffer.width,this._transmittanceBuffer.height]),s.bindBuffer(s.ARRAY_BUFFER,i),s.vertexAttribPointer(a.a_position,i.itemSize,s.FLOAT,!1,0,0),s.drawArrays(s.TRIANGLE_STRIP,0,i.numItems),this._transmittanceBuffer.deactivate(),this._scatteringBuffer.activate(),n=r.programs.scattering,a=n._program.attributes,o=n._program.uniforms,n.activate(),s.clearColor(0,0,0,1),s.clear(s.COLOR_BUFFER_BIT|s.DEPTH_BUFFER_BIT),s.uniform2fv(o.iResolution,[this._scatteringBuffer.width,this._scatteringBuffer.height]),s.activeTexture(s.TEXTURE0),s.bindTexture(s.TEXTURE_2D,this._transmittanceBuffer.textures[0]),s.uniform1i(o.transmittanceTexture,0),s.bindBuffer(s.ARRAY_BUFFER,i),s.vertexAttribPointer(a.a_position,i.itemSize,s.FLOAT,!1,0,0),s.drawArrays(s.TRIANGLE_STRIP,0,i.numItems),this._scatteringBuffer.deactivate(),this._scatteringBuffer.isComplete()&&r.removeProgram("scattering"),this._transmittanceBuffer.isComplete()&&r.removeProgram("transmittance")}_drawBackground(){let e=this.renderer.handler,t=e.programs.atmosphereBackground,i=t._program,r=i.uniforms,s=e.gl,n=this.renderer,a=this.planet.camera;s.disable(s.DEPTH_TEST),t.activate(),s.bindBuffer(s.ARRAY_BUFFER,n.screenFramePositionBuffer),s.vertexAttribPointer(i.attributes.corners,2,s.FLOAT,!1,0,0),s.activeTexture(s.TEXTURE0),s.bindTexture(s.TEXTURE_2D,this._transmittanceBuffer.textures[0]),s.uniform1i(r.transmittanceTexture,0),s.activeTexture(s.TEXTURE1),s.bindTexture(s.TEXTURE_2D,this._scatteringBuffer.textures[0]),s.uniform1i(r.scatteringTexture,1),s.uniformMatrix4fv(r.viewMatrix,!1,a.getViewMatrix());let o=this.planet.sunPos;s.uniform3fv(r.sunPos,[o.x,o.y,o.z]),s.uniform3fv(r.camPos,[a.eye.x,a.eye.y,a.eye.z]),s.uniform2fv(r.iResolution,[n.sceneFramebuffer.width,n.sceneFramebuffer.height]),s.uniform1f(r.fov,a.getViewAngle()),s.uniform1f(r.opacity,this.opacity),s.drawArrays(s.TRIANGLE_STRIP,0,4),s.enable(s.DEPTH_TEST)}}function Bl(){return new G("atmosphereBackground",{uniforms:{iResolution:"vec2",fov:"float",camPos:"vec3",viewMatrix:"mat4",transmittanceTexture:"sampler2D",scatteringTexture:"sampler2D",sunPos:"vec3",opacity:"float"},attributes:{corners:"vec3"},vertexShader:`
|
|
2639
2639
|
attribute vec2 corners;
|
|
2640
2640
|
|
|
2641
2641
|
void main(void) {
|
|
@@ -2825,7 +2825,7 @@
|
|
|
2825
2825
|
void main(void)
|
|
2826
2826
|
{
|
|
2827
2827
|
mainImage(gl_FragColor);
|
|
2828
|
-
}`})}const fn={DEGREES:"degrees",FEET:"ft",METERS:"m",KILOMETERS:"km"};let Ml=0;class un{constructor(e){this.id=Ml++,this.code=e.code,this.units=e.units}equal(e){return e.id===this.id}}const Ri=new un({code:"epsg:3857",units:fn.METERS}),xr=new un({code:"epsg:4326",units:fn.DEGREES});class Rl{constructor(e){this.segment=e,this.layers=[],this.tileOffsetArr=new Float32Array(e.planet.SLICE_SIZE_4),this.layerOpacityArr=new Float32Array(e.planet.SLICE_SIZE)}clear(){this.layers=null,this.tileOffsetArr=null,this.layerOpacityArr=null}append(e,t){let i=this.layers.length;this.layers.push(e),this.layerOpacityArr[i]=e.screenOpacity;let r=i*4,s=e.applyMaterial(t);this.tileOffsetArr[r]=s[0],this.tileOffsetArr[r+1]=s[1],this.tileOffsetArr[r+2]=s[2],this.tileOffsetArr[r+3]=s[3]}}const St=0,Si=1,_n=2;let xt=new p,yt=new p,yr=new p,Qt=new p,Jt=new p,br=new p,ei=new se,Ii=new se;const ti=new Array(4);ti[K]=0,ti[te]=1,ti[Q]=1,ti[ie]=0;const ii=new Array(4);ii[K]=!1,ii[te]=!0,ii[Q]=!1,ii[ie]=!0;class gn{constructor(e,t,i,r){this.isPole=!1,this._tileGroup=St,this._projection=Ri,this.node=e,this.planet=t,this.handler=t.renderer.handler,this.bsphere=new Ze,this._plainRadius=0,this.bbox=new ga,this._sw=new p,this._nw=new p,this._se=new p,this._ne=new p,this.centerNormal=new p,this._extent=this._extentMerc=r,this._extentLonLat=new U,this.gridSize=t.terrain.gridSizeByZoom[i],this.fileGridSize=0,this.tileZoom=i,this.tileX=0,this.tileXE=0,this.tileXW=0,this.tileYN=0,this.tileYS=0,this.tileY=0,this.tileIndex="",this._assignTileIndexes(),this.materials=[],this.plainReady=!1,this.initialized=!1,this.normalMapReady=!1,this.terrainReady=!1,this.terrainIsLoading=!1,this.terrainExists=!1,this.passReady=!1,this.plainVertices=null,this.plainVerticesHigh=null,this.plainVerticesLow=null,this.plainNormals=null,this.terrainVertices=null,this.terrainVerticesHigh=null,this.terrainVerticesLow=null,this.noDataVertices=null,this.tempVertices=null,this.tempVerticesHigh=null,this.tempVerticesLow=null,this.normalMapTexture=null,this.normalMapTextureBias=new Float32Array(3),this.normalMapVertices=null,this.normalMapVerticesHigh=null,this.normalMapVerticesLow=null,this.normalMapNormals=null,this.vertexNormalBuffer=null,this.vertexPositionBuffer=null,this.vertexPositionBufferHigh=null,this.vertexPositionBufferLow=null,this.vertexTextureCoordBuffer=null,this._globalTextureCoordinates=new Float32Array(4),this._inTheQueue=!1,this._appliedNeighborsZoom=[0,0,0,0],this._slices=[],this._indexBuffer=null,this.readyToEngage=!1,this.plainProcessing=!1,this.normalMapTexturePtr=null}checkZoom(){return this.tileZoom<this.planet.terrain._maxNodeZoom}getEntityTerrainPoint(e,t){return this.getTerrainPoint(e._cartesian,this.getInsideLonLat(e),t)}getInsideLonLat(e){return e._lonLatMerc}isEntityInside(e){return this._extentLonLat.isInside(e._lonLat)}getTerrainPoint(e,t,i){let r=this.tempVertices;if(r&&r.length){let s=this.planet.ellipsoid.getSurfaceNormal3v(e);ei.set(e,s.negateTo());let n=this._extent.northEast,a=this._extent.southWest,o=Math.sqrt(r.length/3)-1,l=n.lon,h=n.lat,d=a.lon,f=a.lat,u=t.lon,g=t.lat,_=l-d,m=h-f,v=_/o,b=m/o,y=u-d,w=g-f,x=Math.floor(y/v),T=Math.floor(o-w/b),A=((o+1)*T+x)*3,E=((o+1)*(T+1)+x)*3;yr.set(r[A],r[A+1],r[A+2]),Qt.set(r[A+3],r[A+4],r[A+5]),Jt.set(r[E],r[E+1],r[E+2]);let C=ei.hitTriangle(yr,Qt,Jt,i);return C===se.INSIDE?e.distance(i):C===se.AWAY&&(Ii.set(e,s),Ii.hitTriangle(yr,Qt,Jt,i)===se.INSIDE)?-e.distance(i):(br.set(r[E+3],r[E+4],r[E+5]),C=ei.hitTriangle(Qt,br,Jt,i),C===se.INSIDE?e.distance(i):C===se.AWAY&&(Ii.set(e,s),Ii.hitTriangle(Qt,br,Jt,i)===se.INSIDE)||C===se.AWAY?-e.distance(i):e.distance(i))}else return e.distance(this.planet.ellipsoid.hitRay(ei.origin,ei.direction))}projectNative(e){return e.forwardMercator()}loadTerrain(e=!1){this.tileZoom<this.planet.terrain.minZoom||this.planet.terrain.isEmpty?(this.terrainIsLoading=!0,this.elevationsNotExists(),this._inTheQueue||this.planet._normalMapCreator.queue(this)):this.tileZoom>this.planet.terrain.maxZoom?this.elevationsNotExists():!this.terrainIsLoading&&!this.terrainReady&&this.planet.terrain.loadTerrain(this,e)}elevationsExists(e){if(this.plainReady&&this.terrainIsLoading){let t=new Float32Array(e.length);t.set(e),this.planet._terrainWorker.make({segment:this,elevations:t}),this.plainVerticesHigh=null,this.plainVerticesLow=null,this.normalMapVerticesHigh=null,this.normalMapVerticesLow=null,this.planet.terrain.equalizeVertices||(this.tempVerticesHigh=null,this.tempVerticesLow=null)}}elevationsNotExists(){if(this.planet&&this.tileZoom<=this.planet.terrain.maxNativeZoom){if(this.plainReady&&this.terrainIsLoading){this.terrainIsLoading=!1;let e=this.node;e.appliedTerrainNodeId=this.node.nodeId,e.equalizedSideWithNodeId[K]=e.equalizedSideWithNodeId[te]=e.equalizedSideWithNodeId[Q]=e.equalizedSideWithNodeId[ie]=e.appliedTerrainNodeId,this.planet.lightEnabled&&!this._inTheQueue&&this.planet._normalMapCreator.queue(this),this.readyToEngage=!0}this.terrainVertices=this.plainVertices,this.terrainVerticesHigh=this.plainVerticesHigh,this.terrainVerticesLow=this.plainVerticesLow,this.tempVertices=this.terrainVertices,this.tempVerticesHigh=this.terrainVerticesHigh,this.tempVerticesLow=this.terrainVerticesLow,this.noDataVertices=null,this.fileGridSize=Math.sqrt(this.terrainVertices.length/3)-1,this.gridSize=this.fileGridSize,this.terrainReady=!0,this.terrainExists=!1}else if(this.plainReady&&this.terrainIsLoading){this.terrainIsLoading=!1;let e=this.node;e.appliedTerrainNodeId=this.node.nodeId,e.equalizedSideWithNodeId[K]=e.equalizedSideWithNodeId[te]=e.equalizedSideWithNodeId[Q]=e.equalizedSideWithNodeId[ie]=e.appliedTerrainNodeId,this.readyToEngage=!0,this.terrainReady=!0,this.passReady=!0,this.terrainExists=!1}}_checkEqualization(e,t){return t&&this.tileZoom>=t.segment.tileZoom&&this.node.equalizedSideWithNodeId[e]!==t.equalizedSideWithNodeId[Vt[e]]}equalize(){if(this.tileZoom<8||this.gridSize<2)return;this.readyToEngage=!0;let e=this.node.neighbors,t=this.tempVertices,i=this.tempVerticesHigh,r=this.tempVerticesLow,s=this.gridSize,n=s+1,a=e[K][0];if(this._checkEqualization(K,a)){this.node.equalizedSideWithNodeId[K]=a.equalizedSideWithNodeId[Q],this.readyToEngage=!0;let o=this.node.getOffsetOppositeNeighbourSide(a,K),l=a.segment.tempVertices,h=a.segment.tempVerticesHigh,d=a.segment.tempVerticesLow,f=a.segment.gridSize,u=f+1,g=1/(1<<this.tileZoom-a.segment.tileZoom),_=Math.max(s/(f*g),1),m=Math.max(f*g/s,1),v=o*f;for(let b=0,y=v;b<n;b+=_,y+=m){const w=b*3,x=(u*f+y)*3;t[w]=l[x],t[w+1]=l[x+1],t[w+2]=l[x+2],i[w]=h[x],i[w+1]=h[x+1],i[w+2]=h[x+2],r[w]=d[x],r[w+1]=d[x+1],r[w+2]=d[x+2]}}if(a=e[te][0],this._checkEqualization(te,a)){this.node.equalizedSideWithNodeId[te]=a.equalizedSideWithNodeId[ie],this.readyToEngage=!0;let o=this.node.getOffsetOppositeNeighbourSide(a,te),l=a.segment.tempVertices,h=a.segment.tempVerticesHigh,d=a.segment.tempVerticesLow,f=a.segment.gridSize,u=f+1,g=1/(1<<this.tileZoom-a.segment.tileZoom),_=Math.max(s/(f*g),1),m=Math.max(f*g/s,1),v=o*f;for(let b=0,y=v;b<n;b+=_,y+=m){const w=(n*b+s)*3,x=u*y*3;t[w]=l[x],t[w+1]=l[x+1],t[w+2]=l[x+2],i[w]=h[x],i[w+1]=h[x+1],i[w+2]=h[x+2],r[w]=d[x],r[w+1]=d[x+1],r[w+2]=d[x+2]}}if(a=e[Q][0],this._checkEqualization(Q,a)){this.node.equalizedSideWithNodeId[Q]=a.equalizedSideWithNodeId[K],this.readyToEngage=!0;let o=this.node.getOffsetOppositeNeighbourSide(a,Q),l=a.segment.tempVertices,h=a.segment.tempVerticesHigh,d=a.segment.tempVerticesLow,f=a.segment.gridSize,u=1/(1<<this.tileZoom-a.segment.tileZoom),g=Math.max(s/(f*u),1),_=Math.max(f*u/s,1),m=o*f;for(let v=0,b=m;v<n;v+=g,b+=_){const y=(n*s+v)*3,w=b*3;t[y]=l[w],t[y+1]=l[w+1],t[y+2]=l[w+2],i[y]=h[w],i[y+1]=h[w+1],i[y+2]=h[w+2],r[y]=d[w],r[y+1]=d[w+1],r[y+2]=d[w+2]}}if(a=e[ie][0],this._checkEqualization(ie,a)){this.node.equalizedSideWithNodeId[ie]=a.equalizedSideWithNodeId[te],this.readyToEngage=!0;let o=this.node.getOffsetOppositeNeighbourSide(a,ie),l=a.segment.tempVertices,h=a.segment.tempVerticesHigh,d=a.segment.tempVerticesLow,f=a.segment.gridSize,u=f+1,g=1/(1<<this.tileZoom-a.segment.tileZoom),_=Math.max(s/(f*g),1),m=Math.max(f*g/s,1),v=o*f;for(let b=0,y=v;b<n;b+=_,y+=m){const w=n*b*3,x=(u*y+f)*3;t[w]=l[x],t[w+1]=l[x+1],t[w+2]=l[x+2],i[w]=h[x],i[w+1]=h[x+1],i[w+2]=h[x+2],r[w]=d[x],r[w+1]=d[x+1],r[w+2]=d[x+2]}}}engage(){this.readyToEngage=!1,this.createCoordsBuffers(this.tempVerticesHigh,this.tempVerticesLow,this.gridSize)}_terrainWorkerCallback(e){if(this.plainReady){this.readyToEngage=!0,this.normalMapNormals=null,this.normalMapVertices=null,this.normalMapVerticesHigh=null,this.normalMapVerticesLow=null,this.terrainVertices=null,this.terrainVerticesHigh=null,this.terrainVerticesLow=null,this.noDataVertices=null,this.tempVertices=null,this.tempVerticesHigh=null,this.tempVerticesLow=null,this.normalMapNormals=e.normalMapNormals,this.normalMapVertices=e.normalMapVertices,this.normalMapVerticesHigh=e.normalMapVerticesHigh,this.normalMapVerticesLow=e.normalMapVerticesLow,this.terrainVertices=e.terrainVertices,this.terrainVerticesHigh=e.terrainVerticesHigh,this.terrainVerticesLow=e.terrainVerticesLow,this.noDataVertices=e.noDataVertices,this.tempVertices=this.terrainVertices,this.tempVerticesHigh=this.terrainVerticesHigh,this.tempVerticesLow=this.terrainVerticesLow,this.setBoundingVolumeArr(e.bounds),this.gridSize=Math.sqrt(this.terrainVertices.length/3)-1;let t=this.node;if(t.appliedTerrainNodeId=t.nodeId,t.equalizedSideWithNodeId[K]=t.equalizedSideWithNodeId[te]=t.equalizedSideWithNodeId[Q]=t.equalizedSideWithNodeId[ie]=t.appliedTerrainNodeId,this.terrainReady=!0,this.terrainIsLoading=!1,this.terrainExists=!0,!this.normalMapTexturePtr){const i=this.planet._normalMapCreator;this.normalMapTexturePtr=this.planet.renderer.handler.createEmptyTexture_l(i.width,i.height)}this.planet.lightEnabled&&this.planet._normalMapCreator.queue(this)}}_normalMapEdgeEqualize(e){let t=this.node.neighbors,i=t[e][0],r=this.planet.terrain.maxZoom;this.tileZoom===r&&(t[0].length||t[1].length||t[2].length||t[3].length||(i=this.node.getEqualNeighbor(e)));let s=i&&i.segment,n=this;if(i&&s&&s.terrainReady&&s.terrainExists&&s.tileZoom<=r&&n._appliedNeighborsZoom[e]!==s.tileZoom){n._appliedNeighborsZoom[e]=s.tileZoom;let a=n.normalMapNormals,o=s.normalMapNormals;if(!(a&&o))return;let l=n.normalMapNormals,h=s.normalMapNormals,d=Math.sqrt(a.length/3),f=d-1;const u=f*ti[e];let g,_,m,v;if(n.tileZoom===s.tileZoom){const b=f-u;if(ii[e])for(let y=0;y<d;y++){let w=(y*d+u)*3,x=(y*d+b)*3;g=l[w]+h[x],_=l[w+1]+h[x+1],m=l[w+2]+h[x+2],v=1/Math.sqrt(g*g+_*_+m*m),o[x]=a[w]=g*v,o[x+1]=a[w+1]=_*v,o[x+2]=a[w+2]=m*v}else for(let y=0;y<d;y++){let w=(u*d+y)*3,x=(b*d+y)*3;g=l[w]+h[x],_=l[w+1]+h[x+1],m=l[w+2]+h[x+2],v=1/Math.sqrt(g*g+_*_+m*m),o[x]=a[w]=g*v,o[x+1]=a[w+1]=_*v,o[x+2]=a[w+2]=m*v}!s._inTheQueue&&s._appliedNeighborsZoom[Vt[e]]!==n.tileZoom&&(s._appliedNeighborsZoom[Vt[e]]=n.tileZoom,n.planet._normalMapCreator.queue(s))}}}applyTerrain(e){e?this.elevationsExists(e):this.elevationsNotExists()}deleteBuffers(){const e=this.handler.gl;e.deleteBuffer(this.vertexNormalBuffer),e.deleteBuffer(this.vertexPositionBuffer),e.deleteBuffer(this.vertexPositionBufferHigh),e.deleteBuffer(this.vertexPositionBufferLow),this.vertexNormalBuffer=null,this.vertexPositionBuffer=null,this.vertexPositionBufferHigh=null,this.vertexPositionBufferLow=null,this.vertexTextureCoordBuffer=null}deleteMaterials(){let e=this.materials;for(let t=0;t<e.length;t++){let i=e[t];i&&i.clear()}this.materials.length=0}deleteElevations(){this.terrainExists=!1,this.terrainReady=!1,this.terrainIsLoading=!1,this.normalMapVertices=null,this.normalMapVerticesHigh=null,this.normalMapVerticesLow=null,this.normalMapNormals=null,this.tempVertices=null,this.tempVerticesHigh=null,this.tempVerticesLow=null,this.terrainVertices=null,this.terrainVerticesHigh=null,this.terrainVerticesLow=null,this.noDataVertices=null,this.plainVertices=null,this.plainVerticesHigh=null,this.plainVerticesLow=null,this.plainNormals=null,this.normalMapReady&&(this.handler.gl.deleteTexture(this.normalMapTexture),this.normalMapReady=!1),this._appliedNeighborsZoom=[0,0,0,0],this.normalMapTextureBias[0]=0,this.normalMapTextureBias[1]=0,this.normalMapTextureBias[2]=1,this._inTheQueue=!1}clearSegment(){this.plainReady=!1,this.initialized=!1,this.deleteBuffers(),this.deleteMaterials(),this.deleteElevations()}destroySegment(){this.clearSegment();let e=this._slices.length;for(;e--;)this._slices[e].clear();this._slices=null,this.node=null,this.planet=null,this.handler=null,this.bbox=null,this.bsphere=null,this._extent=null,this.materials=null,this.plainVertices=null,this.plainVerticesHigh=null,this.plainVerticesLow=null,this.plainNormals=null,this.terrainVertices=null,this.terrainVerticesHigh=null,this.terrainVerticesLow=null,this.noDataVertices=null,this.tempVertices=null,this.tempVerticesHigh=null,this.tempVerticesLow=null,this.normalMapTextureBias=null,this.normalMapTexture=null,this.normalMapVertices=null,this.normalMapVerticesHigh=null,this.normalMapVerticesLow=null,this.normalMapNormals=null,this.vertexNormalBuffer=null,this.vertexPositionBuffer=null,this.vertexPositionBufferHigh=null,this.vertexPositionBufferLow=null,this.vertexTextureCoordBuffer=null,this._projection=null,this._appliedNeighborsZoom=null,this._globalTextureCoordinates=null}_setExtentLonLat(){this._extentLonLat=this._extent.inverseMercator()}createBoundsByExtent(){const e=this.planet.ellipsoid,t=this._extentLonLat,i=e.geodeticToCartesian(t.southWest.lon,t.southWest.lat),r=e.geodeticToCartesian(t.northEast.lon,t.northEast.lat),s=e.geodeticToCartesian(t.southWest.lon,t.northEast.lat),n=e.geodeticToCartesian(t.northEast.lon,t.southWest.lat);this._sw.copy(i),this._nw.copy(s),this._ne.copy(r),this._se.copy(n),this.setBoundingVolume3v(i,r)}createBoundsByParent(){let e=this.node;for(;e.parentNode&&!e.segment.terrainReady;)e=e.parentNode;let t=1<<this.tileZoom-e.segment.tileZoom,i=this.tileX-e.segment.tileX*t,r=this.tileY-e.segment.tileY*t;if(e.segment.terrainReady&&e.segment.tileZoom>=this.planet.terrain.minZoom){let s=e.segment.gridSize/t;if(s>=1){this.bsphere.center.x=e.segment.bsphere.center.x,this.bsphere.center.y=e.segment.bsphere.center.y,this.bsphere.center.z=e.segment.bsphere.center.z,this.bsphere.radius=e.segment.bsphere.radius;let n=s*r,a=s*i,o=e.segment.gridSize+1,l=3*((n+s)*o+a),h=3*(n*o+a),d=3*(n*o+a+s),f=3*((n+s)*o+a+s),u=e.segment.tempVertices,g=new p(u[l],u[l+1],u[l+2]),_=new p(u[d],u[d+1],u[d+2]),m=new p(u[h],u[h+1],u[h+2]),v=new p(u[f],u[f+1],u[f+2]);this._sw.copy(g),this._nw.copy(m),this._ne.copy(_),this._se.copy(v)}else{let n=e.segment,a=Math.floor(s*r),o=Math.floor(s*i),l=1/s,h=r-l*a,d=i-l*o,f;n.gridSize===1?f=n.tempVertices:f=qr(n.tempVertices,n.gridSize,a,o,1);let u=new p(f[0],f[1],f[2]),g=new p(f[9],f[10],f[11]),_=new p(f[3]-f[0],f[4]-f[1],f[5]-f[2]),m=new p(f[6]-f[0],f[7]-f[1],f[8]-f[2]),v=new p(f[3]-f[9],f[4]-f[10],f[5]-f[11]),b=new p(f[6]-f[9],f[7]-f[10],f[8]-f[11]),y=h,w=d,x,T;y+w<l?x=p.add(_.scaleTo(w/l),m.scaleTo(y/l)).addA(u):x=p.add(b.scaleTo(1-w/l),v.scaleTo(1-y/l)).addA(g),y=h+1,w=d+1,y+w<l?T=p.add(_.scaleTo(w/l),m.scaleTo(y/l)).addA(u):T=p.add(b.scaleTo(1-w/l),v.scaleTo(1-y/l)).addA(g),this.setBoundingVolume3v(x,T)}}else this.createBoundsByExtent()}setBoundingSphere(e,t,i,r){this.bsphere.center.x=e,this.bsphere.center.y=t,this.bsphere.center.z=i,this.bsphere.radius=this.bsphere.center.distance(r)}setBoundingVolume(e,t,i,r,s,n){this.bbox.setFromBoundsArr([e,t,i,r,s,n]);let a=e+(r-e)*.5,o=t+(s-t)*.5,l=i+(n-i)*.5;this.bsphere.center.set(a,o,l),this.bsphere.radius=this.bsphere.center.distance(new p(e,t,i))}setBoundingVolume3v(e,t){this.bbox.setFromBoundsArr([e.x,e.y,e.z,t.x,t.y,t.z]);let i=e.x+(t.x-e.x)*.5,r=e.y+(t.y-e.y)*.5,s=e.z+(t.z-e.z)*.5;this.bsphere.center.set(i,r,s),this.bsphere.radius=this.bsphere.center.distance(new p(e.x,e.y,e.z))}setBoundingVolumeArr(e){this.bbox.setFromBoundsArr(e);let t=e[0]+(e[3]-e[0])*.5,i=e[1]+(e[4]-e[1])*.5,r=e[2]+(e[5]-e[2])*.5;this.bsphere.center.set(t,i,r),this.bsphere.radius=this.bsphere.center.distance(new p(e[0],e[1],e[2]))}createCoordsBuffers(e,t,i){const r=(i+1)*(i+1),s=this.handler;this.vertexPositionBufferHigh&&this.vertexPositionBufferHigh.numItems===r?(s.setStreamArrayBuffer(this.vertexPositionBufferHigh,e),s.setStreamArrayBuffer(this.vertexPositionBufferLow,t)):(s.gl.deleteBuffer(this.vertexPositionBufferHigh),s.gl.deleteBuffer(this.vertexPositionBufferLow),this.vertexTextureCoordBuffer=this.planet._textureCoordsBufferCache[Math.log2(i)],this.vertexPositionBufferHigh=s.createArrayBuffer(e,3,r),this.vertexPositionBufferLow=s.createArrayBuffer(t,3,r))}_addViewExtent(){const e=this._extentLonLat;let t=this.planet._viewExtent;e.southWest.lon<t.southWest.lon&&(t.southWest.lon=e.southWest.lon),e.northEast.lon>t.northEast.lon&&(t.northEast.lon=e.northEast.lon),e.southWest.lat<t.southWest.lat&&(t.southWest.lat=e.southWest.lat),e.northEast.lat>t.northEast.lat&&(t.northEast.lat=e.northEast.lat)}_assignTileIndexes(){this._tileGroup=St;const e=this.tileZoom,t=this._extent,i=re;this.tileX=Math.round(Math.abs(-i-t.southWest.lon)/(t.northEast.lon-t.southWest.lon)),this.tileY=Math.round(Math.abs(i-t.northEast.lat)/(t.northEast.lat-t.southWest.lat));const r=Math.pow(2,e);this.tileXE=(this.tileX+1)%r,this.tileXW=(r+this.tileX-1)%r,this.tileYN=this.tileY-1,this.tileYS=this.tileY+1,this.tileIndex=Oe.getTileIndex(this.tileX,this.tileY,e)}initialize(){const e=this.planet,t=this.node;if(this.gridSize=e.terrain.gridSizeByZoom[this.tileZoom]||e.terrain.plainGridSize,t.sideSizeLog2[0]=t.sideSizeLog2[1]=t.sideSizeLog2[2]=t.sideSizeLog2[3]=Math.log2(this.gridSize),this.tileZoom<=e.terrain.maxZoom){const i=this.planet._normalMapCreator;this.normalMapTexturePtr=e.renderer.handler.createEmptyTexture_l(i.width,i.height)}this.normalMapTexture=this.planet.transparentTexture,this._assignGlobalTextureCoordinates(),this.initialized=!0}_assignGlobalTextureCoordinates(){const e=this._extent;this._globalTextureCoordinates[0]=(e.southWest.lon+re)*di,this._globalTextureCoordinates[1]=(re-e.northEast.lat)*di,this._globalTextureCoordinates[2]=(e.northEast.lon+re)*di,this._globalTextureCoordinates[3]=(re-e.southWest.lat)*di}createPlainSegmentAsync(){let e=this.planet,t=e.terrain;t.isReady()&&!this.plainReady&&this.tileZoom<=t.maxZoom&&(this.plainProcessing=!0,e._plainSegmentWorker.make(this))}_plainSegmentWorkerCallback(e){this.plainProcessing=!1,this.initialized&&!this.terrainReady&&(this.plainReady=!0,this.plainVertices=e.plainVertices,this.plainVerticesHigh=e.plainVerticesHigh,this.plainVerticesLow=e.plainVerticesLow,this.plainNormals=e.plainNormals,this._plainRadius=e.plainRadius,this.normalMapNormals=e.normalMapNormals,this.normalMapVertices=e.normalMapVertices,this.normalMapVerticesHigh=e.normalMapVerticesHigh,this.normalMapVerticesLow=e.normalMapVerticesLow,this.fileGridSize=Math.sqrt(e.normalMapVertices.length/3)-1)}createPlainSegment(){this.initialize(),this._createPlainVertices(),this.readyToEngage=!0}_createPlainVertices(){const e=this.planet.terrain.gridSizeByZoom[this.tileZoom],t=this._extent,i=this.planet.terrain.plainGridSize,s=t.getWidth()/Math.max(i,e),n=t.southWest.lon,a=t.northEast.lat,o=Math.max(i/e,1),l=Math.max(i,e)+1,h=this.planet.ellipsoid._invRadii2,d=l*l,f=(e+1)*(e+1)*3;let u=0,g=0;this.plainNormals=new Float32Array(f),this.plainVertices=new Float64Array(f),this.plainVerticesHigh=new Float32Array(f),this.plainVerticesLow=new Float32Array(f),this.normalMapNormals=new Float32Array(d*3),this.normalMapVertices=new Float64Array(d*3),this.normalMapVerticesHigh=new Float32Array(d*3),this.normalMapVerticesLow=new Float32Array(d*3);let _=this.plainVertices,m=this.plainVerticesHigh,v=this.plainVerticesLow,b=this.plainNormals,y=this.normalMapVertices,w=this.normalMapVerticesHigh,x=this.normalMapVerticesLow,T=this.normalMapNormals;for(let A=0;A<d;A++){let E=A%l,C=~~(A/l),P=this.planet.ellipsoid.lonLatToCartesian(B.inverseMercator(n+E*s,a-C*s)),I=P.x*h.x,k=P.y*h.y,z=P.z*h.z,L=1/Math.sqrt(I*I+k*k+z*z),S=I*L,F=k*L,R=z*L;p.doubleToTwoFloats(P,xt,yt),y[g]=P.x,w[g]=xt.x,x[g]=yt.x,T[g++]=S,y[g]=P.y,w[g]=xt.y,x[g]=yt.y,T[g++]=F,y[g]=P.z,w[g]=xt.z,x[g]=yt.z,T[g++]=R,C%o===0&&E%o===0&&(_[u]=P.x,m[u]=xt.x,v[u]=yt.x,b[u++]=S,_[u]=P.y,m[u]=xt.y,v[u]=yt.y,b[u++]=F,_[u]=P.z,m[u]=xt.z,v[u]=yt.z,b[u++]=R)}this.terrainVertices=_,this.terrainVerticesHigh=m,this.terrainVerticesLow=v,this.plainReady=!0}getMaterialByLayer(e){return this.materials[e.__id]}_getLayerExtentOffset(e){const t=e._extentMerc,i=this._extent,r=t.northEast.lon-t.southWest.lon,s=t.northEast.lat-t.southWest.lat,n=(i.southWest.lon-t.southWest.lon)/r,a=(t.northEast.lat-i.northEast.lat)/s,o=(i.northEast.lon-i.southWest.lon)/r,l=(i.northEast.lat-i.southWest.lat)/s;return[n,a,o,l]}screenRendering(e,t,i,r,s=!1){const n=this.handler.gl,a=e.attributes,o=e.uniforms,l=this.materials,h=this.planet;let d,f;t&&t.length?(f=t[0],d=f._height):d=0,n.activeTexture(n.TEXTURE0+h.SLICE_SIZE+2),n.bindTexture(n.TEXTURE_2D,r||this.getDefaultTexture()),n.uniform1i(o.defaultTexture,h.SLICE_SIZE+2);let u=0,g=0,_=!1,m=this._slices[i];for(m?m.layers=[]:m=this._slices[i]=new Rl(this),this._indexBuffer=this._getIndexBuffer();f;){if(this.layerOverlap(f)&&(f._fading&&f._fadingOpacity>0||(f.minZoom>=h.minCurrZoom||f.maxZoom>=h.minCurrZoom)&&(f.minZoom<=h.maxCurrZoom||f.maxZoom<=h.maxCurrZoom))){_=!0;let v=l[f.__id];v||(v=l[f.__id]=f.createMaterial(this)),v.isReady||(this.planet._renderCompleted=!1),m.append(f,v),h._samplerArr[u]=u,n.activeTexture(n.TEXTURE0+u),n.bindTexture(n.TEXTURE_2D,v.texture||h.transparentTexture),u++}g++,f=t[g]}(_||!s)&&(n.uniform1i(o.samplerCount,u),n.uniform1f(o.height,d),n.uniform1iv(o.samplerArr,h._samplerArr),n.uniform4fv(o.tileOffsetArr,m.tileOffsetArr),n.uniform1fv(o.layerOpacityArr,m.layerOpacityArr),h.lightEnabled&&(n.activeTexture(n.TEXTURE0+h.SLICE_SIZE+3),n.bindTexture(n.TEXTURE_2D,this.normalMapTexture||h.transparentTexture),n.uniform1i(o.uNormalMap,h.SLICE_SIZE+3),n.uniform3fv(o.uNormalMapBias,this.normalMapTextureBias),n.uniform4fv(o.uGlobalTextureCoord,this._globalTextureCoordinates)),n.bindBuffer(n.ARRAY_BUFFER,this.vertexPositionBufferHigh),n.vertexAttribPointer(a.aVertexPositionHigh,this.vertexPositionBufferHigh.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this.vertexPositionBufferLow),n.vertexAttribPointer(a.aVertexPositionLow,this.vertexPositionBufferLow.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this.vertexTextureCoordBuffer),n.vertexAttribPointer(a.aTextureCoord,2,n.UNSIGNED_SHORT,!0,0,0),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this._indexBuffer),n.drawElements(h.drawMode,this._indexBuffer.numItems,n.UNSIGNED_INT,0))}heightPickingRendering(e,t){const i=this.handler.gl,r=e.attributes,s=e.uniforms;let n;t&&t.length?n=t[0]._height:n=0,i.uniform1f(s.height,n),i.bindBuffer(i.ARRAY_BUFFER,this.vertexPositionBufferHigh),i.vertexAttribPointer(r.aVertexPositionHigh,this.vertexPositionBufferHigh.itemSize,i.FLOAT,!1,0,0),i.bindBuffer(i.ARRAY_BUFFER,this.vertexPositionBufferLow),i.vertexAttribPointer(r.aVertexPositionLow,this.vertexPositionBufferLow.itemSize,i.FLOAT,!1,0,0),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,this._indexBuffer),i.drawElements(i.TRIANGLE_STRIP,this._indexBuffer.numItems,i.UNSIGNED_INT,0)}colorPickingRendering(e,t,i,r,s=!1){const n=this.handler.gl,a=e.attributes,o=e.uniforms;let l=this.materials,h=this.planet,d;t&&t.length?d=t[0]._height:d=0;let f=!1,u=this._slices[i],g=u.layers.length;for(let _=0;_<g;_++){f=!0;let m=u.layers[_],v=_*4;h._pickingColorArr[v]=m._pickingColor.x/255,h._pickingColorArr[v+1]=m._pickingColor.y/255,h._pickingColorArr[v+2]=m._pickingColor.z/255,h._pickingColorArr[v+3]=Number(m._pickingEnabled),h._samplerArr[_]=_,n.activeTexture(n.TEXTURE0+_),n.bindTexture(n.TEXTURE_2D,l[m.__id].texture||this.planet.transparentTexture),h._pickingMaskArr[_]=_+h.SLICE_SIZE,n.activeTexture(n.TEXTURE0+_+h.SLICE_SIZE),n.bindTexture(n.TEXTURE_2D,l[m.__id].pickingMask||this.planet.transparentTexture)}(f||!s)&&(n.uniform1i(o.samplerCount,g),n.uniform1f(o.height,d),n.uniform1iv(o.samplerArr,h._samplerArr),n.uniform1iv(o.pickingMaskArr,h._pickingMaskArr),n.uniform4fv(o.pickingColorArr,h._pickingColorArr),n.uniform4fv(o.tileOffsetArr,u.tileOffsetArr),n.uniform1fv(o.layerOpacityArr,u.layerOpacityArr),n.bindBuffer(n.ARRAY_BUFFER,this.vertexPositionBufferHigh),n.vertexAttribPointer(a.aVertexPositionHigh,this.vertexPositionBufferHigh.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this.vertexPositionBufferLow),n.vertexAttribPointer(a.aVertexPositionLow,this.vertexPositionBufferLow.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this.vertexTextureCoordBuffer),n.vertexAttribPointer(a.aTextureCoord,2,n.UNSIGNED_SHORT,!0,0,0),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this._indexBuffer),n.drawElements(n.TRIANGLE_STRIP,this._indexBuffer.numItems,n.UNSIGNED_INT,0))}depthRendering(e,t){const i=this.handler.gl,r=e.attributes,s=e.uniforms;var n;t&&t.length?n=t[0]._height:n=0,i.uniform1f(s.height,n),i.bindBuffer(i.ARRAY_BUFFER,this.vertexPositionBufferHigh),i.vertexAttribPointer(r.aVertexPositionHigh,this.vertexPositionBufferHigh.itemSize,i.FLOAT,!1,0,0),i.bindBuffer(i.ARRAY_BUFFER,this.vertexPositionBufferLow),i.vertexAttribPointer(r.aVertexPositionLow,this.vertexPositionBufferLow.itemSize,i.FLOAT,!1,0,0),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,this._indexBuffer),i.drawElements(i.TRIANGLE_STRIP,this._indexBuffer.numItems,i.UNSIGNED_INT,0)}_getIndexBuffer(){const e=this.node.sideSizeLog2;let t=this.planet._indexesCache[Math.log2(this.gridSize)][e[0]][e[1]][e[2]][e[3]];if(!t.buffer){let i=Bi().createSegmentIndexes(Math.log2(this.gridSize),[e[0],e[1],e[2],e[3]]);t.buffer=this.planet.renderer.handler.createElementArrayBuffer(i,1),this.planet._indexesCacheToRemoveCounter++}return t.buffer}_collectVisibleNodes(){this.planet._visibleNodes[this.node.nodeId]=this.node}layerOverlap(e){return this._extent.overlaps(e._extentMerc)}getDefaultTexture(){return this.planet.solidTextureOne}getExtentLonLat(){return this._extentLonLat}getExtentMerc(){return this._extentMerc}getExtent(){return this._extent}getNodeState(){let e=this.planet._visibleNodes[this.node.nodeId];return e&&e.state||De}getNeighborSide(e){if(this.tileY===e.tileY){if(this.tileX===e.tileXE)return ie;if(this.tileX===e.tileXW)return te}else if(this.tileX===e.tileX){if(this.tileY===e.tileYS)return K;if(this.tileY===e.tileYN)return Q}return-1}}let zi=new p,Fi=new p;const bt=[new V(0,0),new V(1,0),new V(0,1),new V(1,1)],Sl=Math.sqrt(bt.length)-1;let q={xmin:0,ymin:0,zmin:0,xmax:0,ymax:0,zmax:0},wr=class li{constructor(e,t,i,r,s,n,a){t._createdNodesCount++,this.SegmentPrototype=e,this.planet=t,this.parentNode=r,this.partId=i,this.nodeId=i+s,this.state=null,this.appliedTerrainNodeId=-1,this.sideSizeLog2=[0,0,0,0],this.ready=!1,this.neighbors=[[],[],[],[]],this.equalizedSideWithNodeId=[this.nodeId,this.nodeId,this.nodeId,this.nodeId],this.nodes=[],this.segment=new e(this,t,n,a),this._cameraInside=!1,this.inFrustum=0,this.createBounds()}createChildrenNodes(){this.ready=!0;const e=this.planet,t=this.segment,i=t._extent,r=t.tileZoom+1,s=i.getWidth()*.5,n=i.getHeight()*.5,a=i.northEast,o=i.southWest,l=this.nodeId*4+1,h=new B(o.lon+s,o.lat+n),d=this.nodes;d[$]=new li(this.SegmentPrototype,e,$,this,l,r,new U(new B(o.lon,o.lat+n),new B(o.lon+s,a.lat))),d[ue]=new li(this.SegmentPrototype,e,ue,this,l,r,new U(h,new B(a.lon,a.lat))),d[_e]=new li(this.SegmentPrototype,e,_e,this,l,r,new U(new B(o.lon,o.lat),h)),d[ge]=new li(this.SegmentPrototype,e,ge,this,l,r,new U(new B(o.lon+s,o.lat),new B(a.lon,o.lat+n)))}createBounds(){let e=this.segment;e._setExtentLonLat(),e.tileZoom===0?e.setBoundingSphere(0,0,0,new p(0,0,e.planet.ellipsoid.equatorialSize)):e.tileZoom<e.planet.terrain.minZoom?e.createBoundsByExtent():e.createBoundsByParent();let t=e.bsphere.center.x,i=e.bsphere.center.y,r=e.bsphere.center.z,s=1/Math.sqrt(t*t+i*i+r*r);e.centerNormal.x=t*s,e.centerNormal.y=i*s,e.centerNormal.z=r*s}getState(){if(this.state===-1)return this.state;let e=this.parentNode;for(;e;){if(e.state!==es)return De;e=e.parentNode}return this.state}getEqualNeighbor(e){let t=this,i=ts[e][t.partId];if(i!==-1)return t.parentNode.nodes[i];{let r=[];for(;t.parentNode;)if(r.push(t.partId),i=ts[e][t.partId],t=t.parentNode,i!==-1){let s=r.length;for(e=Vt[e];t&&s--;)i=Ea[e][r[s]],t=t.nodes[i];return t}}}renderTree(e,t,i,r){if(this.planet._renderedNodes.length>=Aa)return;this.state=es,this.neighbors[0]=null,this.neighbors[1]=null,this.neighbors[2]=null,this.neighbors[3]=null,this.neighbors[0]=[],this.neighbors[1]=[],this.neighbors[2]=[],this.neighbors[3]=[];let s=this.segment,n=this.planet;if(this._cameraInside=!1,!this.parentNode||this.parentNode._cameraInside){let l;Math.abs(e._lonLat.lat)<=ce&&s._projection.id===Ri.id?l=s._extent.isInside(e._lonLatMerc):s._projection.id===xr.id&&(l=s._extent.isInside(e._lonLat)),l&&(e._insideSegment=s,this._cameraInside=!0)}this.inFrustum=0;let a=e.frustums,o=a.length;if(s.tileZoom<6)for(let l=0;l<o;l++)a[l].containsSphere(s.bsphere)&&(this.inFrustum|=1<<l);else{let l=1<<o-1-1;for(let h=0;l&&h<o;h++)s.terrainReady?a[h].containsBox(s.bbox)&&(l>>=1,this.inFrustum|=1<<h):a[h].containsSphere(s.bsphere)&&(l>>=1,this.inFrustum|=1<<h)}if(this.inFrustum||this._cameraInside||s.tileZoom<3){let l=Math.abs(e._lonLat.height),h=e.eye,d=h.length2()-this.planet.ellipsoid.polarSizeSqr,f=s.tileZoom>19||s.tileZoom<5&&!s.terrainReady||s.tileZoom<2;l>21e3?f=f||h.distance2(s._sw)<d||h.distance2(s._nw)<d||h.distance2(s._ne)<d||h.distance2(s._se)<d:f=f||e.eye.distance(s.bsphere.center)-s.bsphere.radius<Jr*Math.sqrt(l),(this.inFrustum&&(f||l>1e4)||this._cameraInside)&&s._collectVisibleNodes(),s.tileZoom<2?this.traverseNodes(e,t,i,r):s.terrainReady&&(!t&&e.projectedSize(s.bsphere.center,s._plainRadius)<n.lodSize||t&&(s.tileZoom===t||!f))?f?(s.passReady=!0,this.renderNode(this.inFrustum,!this.inFrustum,i,r)):this.state=De:s.terrainReady&&s.checkZoom()&&(!t||e.projectedSize(s.bsphere.center,s.bsphere.radius)>this.planet._maxLodSize)?this.traverseNodes(e,t,s,r):f?(s.passReady=t?s.terrainReady:!1,this.renderNode(this.inFrustum,!this.inFrustum,i,r)):this.state=De}else this.state=De}traverseNodes(e,t,i,r){this.ready||this.createChildrenNodes();let s=this.nodes;s[0].renderTree(e,t,i,r),s[1].renderTree(e,t,i,r),s[2].renderTree(e,t,i,r),s[3].renderTree(e,t,i,r)}renderNode(e,t,i,r){let s=this.segment;if(s.terrainReady||(s.initialized||s.initialize(),this.whileTerrainLoading(i),s.plainProcessing||s.createPlainSegmentAsync(),s.plainReady&&!r&&s.loadTerrain()),s.planet.lightEnabled&&!s.normalMapReady&&this.whileNormalMapCreating(),t){this.state=-1;return}!this._cameraInside&&s.tileZoom>this.planet.maxCurrZoom&&(this.planet.maxCurrZoom=s.tileZoom),s.tileZoom<this.planet.minCurrZoom&&(this.planet.minCurrZoom=s.tileZoom),s._addViewExtent(),this.addToRender(e)}addToRender(e){this.state=$e;let t=this.planet._renderedNodes;for(let s=t.length-1;s>=0;--s){const n=t[s],a=this.getCommonSide(n);if(a!==-1){const o=Vt[a];if(this.neighbors[a].length===0||n.neighbors[o].length===0){const l=this.segment,h=n.segment,d=l.gridSize/(h.gridSize*Math.pow(2,h.tileZoom-l.tileZoom));let f=l.gridSize,u=h.gridSize;d>1?(f=Math.ceil(l.gridSize/d),u=h.gridSize):d<1&&(f=l.gridSize,u=Math.ceil(h.gridSize*d)),this.sideSizeLog2[a]=Math.log2(f),n.sideSizeLog2[o]=Math.log2(u)}this.neighbors[a].push(n),n.neighbors[o].push(this)}}t.push(this),this.segment.terrainReady||(this.planet._renderCompleted=!1,this.planet._terrainCompleted=!1);let i=0,r=this.planet._renderedNodesInFrustum;for(;e;)e&1&&r[i].push(this),i++,e>>=1}getCommonSide(e){const t=this.segment,i=e.segment;if(t.tileZoom===i.tileZoom&&t._tileGroup===i._tileGroup)return t.getNeighborSide(i);{const r=t._extentLonLat,s=i._extentLonLat;let n=r.northEast,a=r.southWest,o=s.northEast,l=s.southWest,h=n.lon,d=n.lat,f=a.lon,u=a.lat,g=o.lon,_=o.lat,m=l.lon,v=l.lat;if(t._tileGroup===i._tileGroup){if(h===m&&(d<=_&&u>=v||d>=_&&u<=v))return te;if(f===g&&(d<=_&&u>=v||d>=_&&u<=v))return ie;if(d===v&&(f>=m&&h<=g||f<=m&&h>=g))return K;if(u===_&&(f>=m&&h<=g||f<=m&&h>=g))return Q;if(i.tileX===0&&t.tileX===Math.pow(2,t.tileZoom)-1&&(d<=_&&u>=v||d>=_&&u<=v))return te;if(t.tileX===0&&i.tileX===Math.pow(2,i.tileZoom)-1&&(d<=_&&u>=v||d>=_&&u<=v))return ie}if(t._tileGroup===St&&i._tileGroup===Si&&t.tileY===0&&i.tileY===Math.pow(2,i.tileZoom)-1&&(f>=m&&h<=g||f<=m&&h>=g))return K;if(t._tileGroup===_n&&i._tileGroup===St&&t.tileY===0&&i.tileY===Math.pow(2,i.tileZoom)-1&&(f>=m&&h<=g||f<=m&&h>=g))return K;if(i._tileGroup===Si&&t._tileGroup===St&&t.tileY===Math.pow(2,t.tileZoom)-1&&i.tileY===0&&(f>=m&&h<=g||f<=m&&h>=g))return Q;if(t._tileGroup===Si&&i._tileGroup===St&&t.tileY===Math.pow(2,t.tileZoom)-1&&i.tileY===0&&(f>=m&&h<=g||f<=m&&h>=g))return Q}return-1}whileNormalMapCreating(){const e=this.segment;!e.terrainIsLoading&&e.terrainExists&&!e._inTheQueue&&e.planet._normalMapCreator.queue(e);let t=this;for(;t.parentNode&&!t.segment.normalMapReady;)t=t.parentNode;const i=2<<e.tileZoom-t.segment.tileZoom-1;e.normalMapTexture=t.segment.normalMapTexture,e.normalMapTextureBias[0]=e.tileX-t.segment.tileX*i,e.normalMapTextureBias[1]=e.tileY-t.segment.tileY*i,e.normalMapTextureBias[2]=1/i}whileTerrainLoading(e){const t=this.segment;let i=this;if(e&&e.terrainReady)i=e.node;else for(;i.parentNode&&!i.segment.terrainReady;)i=i.parentNode;if(i.segment.terrainReady&&this.appliedTerrainNodeId!==i.nodeId){let r=2<<t.tileZoom-i.segment.tileZoom-1,s=t.tileX-i.segment.tileX*r,n=t.tileY-i.segment.tileY*r;const a=i.segment;let o,l,h,d;this.appliedTerrainNodeId=i.nodeId,this.equalizedSideWithNodeId[K]=this.equalizedSideWithNodeId[te]=this.equalizedSideWithNodeId[Q]=this.equalizedSideWithNodeId[ie]=this.appliedTerrainNodeId;let f=i.segment.gridSize/r,u=i.segment.fileGridSize/r;if(q.xmin=fe,q.xmax=pe,q.ymin=fe,q.ymax=pe,q.zmin=fe,q.zmax=pe,f>=1){t.gridSize=f;let g=(f+1)*(f+1)*3;o=new Float64Array(g),l=new Float32Array(g),h=new Float32Array(g),a.noDataVertices&&(d=new Uint8Array(g/3)),Wr(a.terrainVertices,a.terrainVerticesHigh,a.terrainVerticesLow,a.noDataVertices,a.gridSize,f*n,f*s,f,o,l,h,q,d)}else if(u>=1&&i.segment.terrainExists){t.gridSize=u;let g=(u+1)*(u+1)*3;o=new Float64Array(g),l=new Float32Array(g),h=new Float32Array(g),a.noDataVertices&&(d=new Uint8Array(g/3)),Wr(a.normalMapVertices,a.normalMapVerticesHigh,a.normalMapVerticesLow,a.noDataVertices,i.segment.fileGridSize,u*n,u*s,u,o,l,h,q,d)}else{t.gridSize=Sl;let g=Math.floor(f*n),_=Math.floor(f*s),m;a.gridSize===1?m=a.terrainVertices:m=qr(a.terrainVertices,a.gridSize,g,_,1);let v=1/f,b=n-v*g,y=s-v*_,w=new p(m[0],m[1],m[2]),x=new p(m[9],m[10],m[11]),T=new p(m[3]-m[0],m[4]-m[1],m[5]-m[2]),A=new p(m[6]-m[0],m[7]-m[1],m[8]-m[2]),E=new p(m[3]-m[9],m[4]-m[10],m[5]-m[11]),C=new p(m[6]-m[9],m[7]-m[10],m[8]-m[11]),P=new p;o=new Float64Array(3*bt.length),l=new Float32Array(3*bt.length),h=new Float32Array(3*bt.length);for(let I=0;I<bt.length;I++){let k=bt[I].y+b,z=bt[I].x+y,L=z*f,S=k*f;k+z<v?P=T.scaleTo(L).addA(A.scaleTo(S)).addA(w):P=C.scaleTo(1-L).addA(E.scaleTo(1-S)).addA(x),p.doubleToTwoFloats(P,zi,Fi);let F=I*3;o[F]=P.x,o[F+1]=P.y,o[F+2]=P.z,l[F]=zi.x,l[F+1]=zi.y,l[F+2]=zi.z,h[F]=Fi.x,h[F+1]=Fi.y,h[F+2]=Fi.z,P.x<q.xmin&&(q.xmin=P.x),P.x>q.xmax&&(q.xmax=P.x),P.y<q.ymin&&(q.ymin=P.y),P.y>q.ymax&&(q.ymax=P.y),P.z<q.zmin&&(q.zmin=P.z),P.z>q.zmax&&(q.zmax=P.z)}}if(t.readyToEngage=!0,t.terrainVertices=o,t.terrainVerticesHigh=l,t.terrainVerticesLow=h,t.tempVertices=o,t.tempVerticesHigh=l,t.tempVerticesLow=h,t.noDataVertices=d,t.setBoundingVolume(q.xmin,q.ymin,q.zmin,q.xmax,q.ymax,q.zmax),t.tileZoom>t.planet.terrain.maxZoom&&i.segment.tileZoom>=t.planet.terrain.maxZoom&&(t._plainRadius=i.segment._plainRadius/r,t.terrainReady=!0,t.terrainIsLoading=!1,t.terrainVertices=o,t.terrainVerticesHigh=l,t.terrainVerticesLow=h,t.passReady=!0,this.appliedTerrainNodeId=this.nodeId,this.equalizedSideWithNodeId[K]=this.equalizedSideWithNodeId[te]=this.equalizedSideWithNodeId[Q]=this.equalizedSideWithNodeId[ie]=this.appliedTerrainNodeId,i.segment.terrainExists)){t.normalMapVertices=o,t.fileGridSize=Math.sqrt(o.length/3)-1;let g=Math.sqrt(a.normalMapNormals.length/3)-1,_=g/r;g>1?t.normalMapNormals=ra(a.normalMapNormals,g,_*n,_*s,_):t.normalMapNormals=a.normalMapNormals}}}destroy(){this.state=De,this.segment.destroySegment();let e=this.neighbors;for(let t=0;t<e.length;t++){let i=e[t];if(i)for(let r=0;r<i.length;r++){let s=i[r];s&&s.neighbors&&(s.neighbors[K]=null,s.neighbors[te]=null,s.neighbors[Q]=null,s.neighbors[ie]=null)}}this.neighbors=null,this.parentNode=null,this.sideSizeLog2=null,this.segment=null}clearTree(){const e=this.getState();if(e===De||e===$e)this.destroyBranches();else for(let t=0;t<this.nodes.length;t++)this.nodes[t]&&this.nodes[t].clearTree()}clearBranches(){for(let e=0;e<this.nodes.length;e++)this.nodes[e].clearBranches(),this.nodes[e].segment.deleteMaterials()}destroyBranches(){if(this.ready){let e=[],t;for(t=0;t<this.nodes.length;t++)e[t]=this.nodes[t];for(this.ready=!1,this.nodes=[],t=0;t<e.length;t++)e[t].destroyBranches(),e[t].destroy(),e[t]=null;e.length=0,e=null}}traverseTree(e){if(e(this),this.ready)for(let t=0;t<this.nodes.length;t++)this.nodes[t].traverseTree(e)}getOffsetOppositeNeighbourSide(e,t){let i=this,r=e.segment.tileZoom,s=0;for(;i.segment.tileZoom>r;)s+=Ca[i.partId][t]/(1<<i.segment.tileZoom-r),i=i.parentNode;return s}};class Il{constructor(e,t="",i=Ri){this.name=t,this.projection=i,this._planet=e,this._quadTreeList=[]}destroyBranches(){for(let e=0,t=this._quadTreeList.length;e<t;e++)this._quadTreeList[e].destroyBranches()}clearLayerMaterial(e){let t=e.__id;for(let i=0,r=this._quadTreeList.length;i<r;i++)this._quadTreeList[i].traverseTree(function(s){let n=s.segment.materials;n[t]&&(n[t].clear(),n[t]=null)})}get planet(){return this._planet}init(){}preRender(){for(let e=0;e<this._quadTreeList.length;e++){let t=this._quadTreeList[e];t.createChildrenNodes(),t.segment.createPlainSegment();for(let i=0;i<t.nodes.length;i++)t.nodes[i].segment.createPlainSegment()}}preLoad(){for(let e=0;e<this._quadTreeList.length;e++){let t=this._quadTreeList[e];t.segment.passReady=!0,t.renderNode(1),this._planet.normalMapCreator.drawSingle(t.segment);for(let i=0;i<t.nodes.length;i++)t.nodes[i].segment.passReady=!0,t.nodes[i].renderNode(1),this._planet._normalMapCreator.drawSingle(t.nodes[i].segment)}}collectRenderNodes(){for(let e=0;e<this._quadTreeList.length;e++)this._quadTreeList[e].renderTree(this._planet.camera,0,null)}clear(){for(let e=0;e<this._quadTreeList.length;e++)this._quadTreeList[e].clearTree()}get quadTreeList(){return this._quadTreeList}}const zl=7,mn=(90-ce)/Math.pow(2,zl);let wt=new p,Tt=new p;class pn extends gn{constructor(e,t,i,r){super(e,t,i,r),this._projection=xr,this._extentLonLat=this._extent,this._extentMerc=new U(r.southWest.forwardMercatorEPS01(),r.northEast.forwardMercatorEPS01()),this._isNorth=this._extent.northEast.lat>0,this.isPole=!0}_setExtentLonLat(){this._extentLonLat=this._extent}projectNative(e){return e}getInsideLonLat(e){return e._lonLat}_getMaxZoom(){let e=0;if(this._isNorth){let t=Math.floor((90-this._extent.northEast.lat)/mn);e=Math.floor(t/16)+7}else{let t=Math.floor((Re-this._extent.northEast.lat)/mn);e=12-Math.floor(t/16)}return e}checkZoom(){return super.checkZoom()&&this.tileZoom<=this._getMaxZoom()}_assignTileIndexes(){this._assignTileXIndexes(this._extent),this._assignTileYIndexes(this._extent),this.tileIndex=Oe.getTileIndex(this.tileX,this.tileY,this.tileZoom)}_assignTileXIndexes(e){this.tileX=Math.round(Math.abs(-180-e.southWest.lon)/(e.northEast.lon-e.southWest.lon));let t=1<<this.tileZoom;this.tileXE=(this.tileX+1)%t,this.tileXW=(t+this.tileX-1)%t}_assignTileYIndexes(e){const t=e.northEast.lat;t>0?(this._tileGroup=Si,this.tileY=Math.round((90-t)/(e.northEast.lat-e.southWest.lat))):(this._tileGroup=_n,this.tileY=Math.round((Re-t)/(e.northEast.lat-e.southWest.lat))),this.tileYN=this.tileY-1,this.tileYS=this.tileY+1}_createPlainVertices(){const e=this.planet.terrain.gridSizeByZoom[this.tileZoom],t=this._extent,i=this.planet.terrain.plainGridSize,r=t.getWidth(),s=t.getHeight(),n=r/Math.max(i,e),a=s/e,o=t.southWest.lon,l=t.northEast.lat,h=Math.max(i/e,1),d=Math.max(i,e)+1,f=this.planet.ellipsoid._invRadii2;let u=0,g=0;const _=d*d,m=(e+1)*(e+1)*3;this.plainNormals=new Float32Array(m),this.plainVertices=new Float64Array(m),this.plainVerticesHigh=new Float32Array(m),this.plainVerticesLow=new Float32Array(m),this.normalMapNormals=new Float32Array(_*3),this.normalMapVertices=new Float64Array(_*3),this.normalMapVerticesHigh=new Float32Array(_*3),this.normalMapVerticesLow=new Float32Array(_*3);let v=549755748352,b=-549755748352,y=549755748352,w=-549755748352,x=549755748352,T=-549755748352,A=this.plainVertices,E=this.plainVerticesHigh,C=this.plainVerticesLow,P=this.plainNormals,I=this.normalMapVertices,k=this.normalMapVerticesHigh,z=this.normalMapVerticesLow,L=this.normalMapNormals;for(let M=0;M<_;M++){let j=M%d,st=~~(M/d);const W=this.planet.ellipsoid.lonLatToCartesian(new B(o+j*n,l-st*a));let Pr=W.x*f.x,Lr=W.y*f.y,Br=W.z*f.z,Mr=1/Math.sqrt(Pr*Pr+Lr*Lr+Br*Br),kn=Pr*Mr,Dn=Lr*Mr,Nn=Br*Mr;p.doubleToTwoFloats(W,wt,Tt),I[g]=W.x,k[g]=wt.x,z[g]=Tt.x,L[g++]=kn,I[g]=W.y,k[g]=wt.y,z[g]=Tt.y,L[g++]=Dn,I[g]=W.z,k[g]=wt.z,z[g]=Tt.z,L[g++]=Nn,st%h===0&&j%h===0&&(A[u]=W.x,E[u]=wt.x,C[u]=Tt.x,P[u++]=kn,A[u]=W.y,E[u]=wt.y,C[u]=Tt.y,P[u++]=Dn,A[u]=W.z,E[u]=wt.z,C[u]=Tt.z,P[u++]=Nn,W.x<v&&(v=W.x),W.x>b&&(b=W.x),W.y<y&&(y=W.y),W.y>w&&(w=W.y),W.z<x&&(x=W.z),W.z>T&&(T=W.z))}this.terrainVertices=A,this.terrainVerticesHigh=E,this.terrainVerticesLow=C;let S=(b-v)*.5,F=(w-y)*.5,R=(T-x)*.5;this._plainRadius=Math.sqrt(S*S+F*F+R*R),this.plainReady=!0}_assignGlobalTextureCoordinates(){const e=this._extent;this._globalTextureCoordinates[0]=(e.southWest.lon+180)/360,this._globalTextureCoordinates[1]=(90-e.northEast.lat)/180,this._globalTextureCoordinates[2]=(e.northEast.lon+180)/360,this._globalTextureCoordinates[3]=(90-e.southWest.lat)/180}_collectVisibleNodes(){this._isNorth?this.planet._visibleNodesNorth[this.node.nodeId]=this.node:this.planet._visibleNodesSouth[this.node.nodeId]=this.node}_getLayerExtentOffset(e){const t=e._extent,i=this._extent,r=t.northEast.lon-t.southWest.lon,s=t.northEast.lat-t.southWest.lat,n=(i.southWest.lon-t.southWest.lon)/r,a=(t.northEast.lat-i.northEast.lat)/s,o=(i.northEast.lon-i.southWest.lon)/r,l=(i.northEast.lat-i.southWest.lat)/s;return[n,a,o,l]}layerOverlap(e){return this._extent.overlaps(e._extent)}getDefaultTexture(){return this._isNorth?this.planet.solidTextureOne:this.planet.solidTextureTwo}getExtentLonLat(){return this._extent}getNodeState(){let e;return this._isNorth?e=this.planet._visibleNodesNorth[this.node.nodeId]:e=this.planet._visibleNodesSouth[this.node.nodeId],e&&e.state||De}}class Fl extends Il{constructor(e){super(e,"Earth")}init(){this._quadTreeList=[new wr(gn,this.planet,$,null,0,0,U.createFromArray([-2003750834e-2,-2003750834e-2,2003750834e-2,2003750834e-2])),new wr(pn,this.planet,$,null,0,0,U.createFromArray([-180,ce,180,90])),new wr(pn,this.planet,$,null,0,0,U.createFromArray([-180,-90,180,Re]))]}}/* This file is mostly a straight translation of
|
|
2828
|
+
}`})}const fn={DEGREES:"degrees",FEET:"ft",METERS:"m",KILOMETERS:"km"};let Ml=0;class un{constructor(e){this.id=Ml++,this.code=e.code,this.units=e.units}equal(e){return e.id===this.id}}const Ri=new un({code:"epsg:3857",units:fn.METERS}),xr=new un({code:"epsg:4326",units:fn.DEGREES});class Rl{constructor(e){this.segment=e,this.layers=[],this.tileOffsetArr=new Float32Array(e.planet.SLICE_SIZE_4),this.layerOpacityArr=new Float32Array(e.planet.SLICE_SIZE)}clear(){this.layers=null,this.tileOffsetArr=null,this.layerOpacityArr=null}append(e,t){let i=this.layers.length;this.layers.push(e),this.layerOpacityArr[i]=e.screenOpacity;let r=i*4,s=e.applyMaterial(t);this.tileOffsetArr[r]=s[0],this.tileOffsetArr[r+1]=s[1],this.tileOffsetArr[r+2]=s[2],this.tileOffsetArr[r+3]=s[3]}}const St=0,Si=1,_n=2;let xt=new p,yt=new p,yr=new p,Kt=new p,Qt=new p,br=new p,Jt=new se,Ii=new se;const ei=new Array(4);ei[K]=0,ei[te]=1,ei[Q]=1,ei[ie]=0;const ti=new Array(4);ti[K]=!1,ti[te]=!0,ti[Q]=!1,ti[ie]=!0;class gn{constructor(e,t,i,r){this.isPole=!1,this._tileGroup=St,this._projection=Ri,this.node=e,this.planet=t,this.handler=t.renderer.handler,this.bsphere=new Ze,this._plainRadius=0,this.bbox=new ga,this._sw=new p,this._nw=new p,this._se=new p,this._ne=new p,this.centerNormal=new p,this._extent=this._extentMerc=r,this._extentLonLat=new U,this.gridSize=t.terrain.gridSizeByZoom[i],this.fileGridSize=0,this.tileZoom=i,this.tileX=0,this.tileXE=0,this.tileXW=0,this.tileYN=0,this.tileYS=0,this.tileY=0,this.tileIndex="",this._assignTileIndexes(),this.materials=[],this.plainReady=!1,this.initialized=!1,this.normalMapReady=!1,this.terrainReady=!1,this.terrainIsLoading=!1,this.terrainExists=!1,this.passReady=!1,this.plainVertices=null,this.plainVerticesHigh=null,this.plainVerticesLow=null,this.plainNormals=null,this.terrainVertices=null,this.terrainVerticesHigh=null,this.terrainVerticesLow=null,this.noDataVertices=null,this.tempVertices=null,this.tempVerticesHigh=null,this.tempVerticesLow=null,this.normalMapTexture=null,this.normalMapTextureBias=new Float32Array(3),this.normalMapVertices=null,this.normalMapVerticesHigh=null,this.normalMapVerticesLow=null,this.normalMapNormals=null,this.vertexNormalBuffer=null,this.vertexPositionBuffer=null,this.vertexPositionBufferHigh=null,this.vertexPositionBufferLow=null,this.vertexTextureCoordBuffer=null,this._globalTextureCoordinates=new Float32Array(4),this._inTheQueue=!1,this._appliedNeighborsZoom=[0,0,0,0],this._slices=[],this._indexBuffer=null,this.readyToEngage=!1,this.plainProcessing=!1,this.normalMapTexturePtr=null}checkZoom(){return this.tileZoom<this.planet.terrain._maxNodeZoom}getEntityTerrainPoint(e,t){return this.getTerrainPoint(e._cartesian,this.getInsideLonLat(e),t)}getInsideLonLat(e){return e._lonLatMerc}isEntityInside(e){return this._extentLonLat.isInside(e._lonLat)}getTerrainPoint(e,t,i){let r=this.tempVertices;if(r&&r.length){let s=this.planet.ellipsoid.getSurfaceNormal3v(e);Jt.set(e,s.negateTo());let n=this._extent.northEast,a=this._extent.southWest,o=Math.sqrt(r.length/3)-1,l=n.lon,h=n.lat,d=a.lon,f=a.lat,u=t.lon,g=t.lat,_=l-d,m=h-f,v=_/o,b=m/o,y=u-d,w=g-f,x=Math.floor(y/v),T=Math.floor(o-w/b),A=((o+1)*T+x)*3,E=((o+1)*(T+1)+x)*3;yr.set(r[A],r[A+1],r[A+2]),Kt.set(r[A+3],r[A+4],r[A+5]),Qt.set(r[E],r[E+1],r[E+2]);let C=Jt.hitTriangle(yr,Kt,Qt,i);return C===se.INSIDE?e.distance(i):C===se.AWAY&&(Ii.set(e,s),Ii.hitTriangle(yr,Kt,Qt,i)===se.INSIDE)?-e.distance(i):(br.set(r[E+3],r[E+4],r[E+5]),C=Jt.hitTriangle(Kt,br,Qt,i),C===se.INSIDE?e.distance(i):C===se.AWAY&&(Ii.set(e,s),Ii.hitTriangle(Kt,br,Qt,i)===se.INSIDE)||C===se.AWAY?-e.distance(i):e.distance(i))}else return e.distance(this.planet.ellipsoid.hitRay(Jt.origin,Jt.direction))}projectNative(e){return e.forwardMercator()}loadTerrain(e=!1){this.tileZoom<this.planet.terrain.minZoom||this.planet.terrain.isEmpty?(this.terrainIsLoading=!0,this.elevationsNotExists(),this._inTheQueue||this.planet._normalMapCreator.queue(this)):this.tileZoom>this.planet.terrain.maxZoom?this.elevationsNotExists():!this.terrainIsLoading&&!this.terrainReady&&this.planet.terrain.loadTerrain(this,e)}elevationsExists(e){if(this.plainReady&&this.terrainIsLoading){let t=new Float32Array(e.length);t.set(e),this.planet._terrainWorker.make({segment:this,elevations:t}),this.plainVerticesHigh=null,this.plainVerticesLow=null,this.normalMapVerticesHigh=null,this.normalMapVerticesLow=null,this.planet.terrain.equalizeVertices||(this.tempVerticesHigh=null,this.tempVerticesLow=null)}}elevationsNotExists(){if(this.planet&&this.tileZoom<=this.planet.terrain.maxNativeZoom){if(this.plainReady&&this.terrainIsLoading){this.terrainIsLoading=!1;let e=this.node;e.appliedTerrainNodeId=this.node.nodeId,e.equalizedSideWithNodeId[K]=e.equalizedSideWithNodeId[te]=e.equalizedSideWithNodeId[Q]=e.equalizedSideWithNodeId[ie]=e.appliedTerrainNodeId,this.planet.lightEnabled&&!this._inTheQueue&&this.planet._normalMapCreator.queue(this),this.readyToEngage=!0}this.terrainVertices=this.plainVertices,this.terrainVerticesHigh=this.plainVerticesHigh,this.terrainVerticesLow=this.plainVerticesLow,this.tempVertices=this.terrainVertices,this.tempVerticesHigh=this.terrainVerticesHigh,this.tempVerticesLow=this.terrainVerticesLow,this.noDataVertices=null,this.fileGridSize=Math.sqrt(this.terrainVertices.length/3)-1,this.gridSize=this.fileGridSize,this.terrainReady=!0,this.terrainExists=!1}else if(this.plainReady&&this.terrainIsLoading){this.terrainIsLoading=!1;let e=this.node;e.appliedTerrainNodeId=this.node.nodeId,e.equalizedSideWithNodeId[K]=e.equalizedSideWithNodeId[te]=e.equalizedSideWithNodeId[Q]=e.equalizedSideWithNodeId[ie]=e.appliedTerrainNodeId,this.readyToEngage=!0,this.terrainReady=!0,this.passReady=!0,this.terrainExists=!1}}_checkEqualization(e,t){return t&&this.tileZoom>=t.segment.tileZoom&&this.node.equalizedSideWithNodeId[e]!==t.equalizedSideWithNodeId[Ot[e]]}equalize(){if(this.tileZoom<8||this.gridSize<2)return;this.readyToEngage=!0;let e=this.node.neighbors,t=this.tempVertices,i=this.tempVerticesHigh,r=this.tempVerticesLow,s=this.gridSize,n=s+1,a=e[K][0];if(this._checkEqualization(K,a)){this.node.equalizedSideWithNodeId[K]=a.equalizedSideWithNodeId[Q],this.readyToEngage=!0;let o=this.node.getOffsetOppositeNeighbourSide(a,K),l=a.segment.tempVertices,h=a.segment.tempVerticesHigh,d=a.segment.tempVerticesLow,f=a.segment.gridSize,u=f+1,g=1/(1<<this.tileZoom-a.segment.tileZoom),_=Math.max(s/(f*g),1),m=Math.max(f*g/s,1),v=o*f;for(let b=0,y=v;b<n;b+=_,y+=m){const w=b*3,x=(u*f+y)*3;t[w]=l[x],t[w+1]=l[x+1],t[w+2]=l[x+2],i[w]=h[x],i[w+1]=h[x+1],i[w+2]=h[x+2],r[w]=d[x],r[w+1]=d[x+1],r[w+2]=d[x+2]}}if(a=e[te][0],this._checkEqualization(te,a)){this.node.equalizedSideWithNodeId[te]=a.equalizedSideWithNodeId[ie],this.readyToEngage=!0;let o=this.node.getOffsetOppositeNeighbourSide(a,te),l=a.segment.tempVertices,h=a.segment.tempVerticesHigh,d=a.segment.tempVerticesLow,f=a.segment.gridSize,u=f+1,g=1/(1<<this.tileZoom-a.segment.tileZoom),_=Math.max(s/(f*g),1),m=Math.max(f*g/s,1),v=o*f;for(let b=0,y=v;b<n;b+=_,y+=m){const w=(n*b+s)*3,x=u*y*3;t[w]=l[x],t[w+1]=l[x+1],t[w+2]=l[x+2],i[w]=h[x],i[w+1]=h[x+1],i[w+2]=h[x+2],r[w]=d[x],r[w+1]=d[x+1],r[w+2]=d[x+2]}}if(a=e[Q][0],this._checkEqualization(Q,a)){this.node.equalizedSideWithNodeId[Q]=a.equalizedSideWithNodeId[K],this.readyToEngage=!0;let o=this.node.getOffsetOppositeNeighbourSide(a,Q),l=a.segment.tempVertices,h=a.segment.tempVerticesHigh,d=a.segment.tempVerticesLow,f=a.segment.gridSize,u=1/(1<<this.tileZoom-a.segment.tileZoom),g=Math.max(s/(f*u),1),_=Math.max(f*u/s,1),m=o*f;for(let v=0,b=m;v<n;v+=g,b+=_){const y=(n*s+v)*3,w=b*3;t[y]=l[w],t[y+1]=l[w+1],t[y+2]=l[w+2],i[y]=h[w],i[y+1]=h[w+1],i[y+2]=h[w+2],r[y]=d[w],r[y+1]=d[w+1],r[y+2]=d[w+2]}}if(a=e[ie][0],this._checkEqualization(ie,a)){this.node.equalizedSideWithNodeId[ie]=a.equalizedSideWithNodeId[te],this.readyToEngage=!0;let o=this.node.getOffsetOppositeNeighbourSide(a,ie),l=a.segment.tempVertices,h=a.segment.tempVerticesHigh,d=a.segment.tempVerticesLow,f=a.segment.gridSize,u=f+1,g=1/(1<<this.tileZoom-a.segment.tileZoom),_=Math.max(s/(f*g),1),m=Math.max(f*g/s,1),v=o*f;for(let b=0,y=v;b<n;b+=_,y+=m){const w=n*b*3,x=(u*y+f)*3;t[w]=l[x],t[w+1]=l[x+1],t[w+2]=l[x+2],i[w]=h[x],i[w+1]=h[x+1],i[w+2]=h[x+2],r[w]=d[x],r[w+1]=d[x+1],r[w+2]=d[x+2]}}}engage(){this.readyToEngage=!1,this.createCoordsBuffers(this.tempVerticesHigh,this.tempVerticesLow,this.gridSize)}_terrainWorkerCallback(e){if(this.plainReady){this.readyToEngage=!0,this.normalMapNormals=null,this.normalMapVertices=null,this.normalMapVerticesHigh=null,this.normalMapVerticesLow=null,this.terrainVertices=null,this.terrainVerticesHigh=null,this.terrainVerticesLow=null,this.noDataVertices=null,this.tempVertices=null,this.tempVerticesHigh=null,this.tempVerticesLow=null,this.normalMapNormals=e.normalMapNormals,this.normalMapVertices=e.normalMapVertices,this.normalMapVerticesHigh=e.normalMapVerticesHigh,this.normalMapVerticesLow=e.normalMapVerticesLow,this.terrainVertices=e.terrainVertices,this.terrainVerticesHigh=e.terrainVerticesHigh,this.terrainVerticesLow=e.terrainVerticesLow,this.noDataVertices=e.noDataVertices,this.tempVertices=this.terrainVertices,this.tempVerticesHigh=this.terrainVerticesHigh,this.tempVerticesLow=this.terrainVerticesLow,this.setBoundingVolumeArr(e.bounds),this.gridSize=Math.sqrt(this.terrainVertices.length/3)-1;let t=this.node;if(t.appliedTerrainNodeId=t.nodeId,t.equalizedSideWithNodeId[K]=t.equalizedSideWithNodeId[te]=t.equalizedSideWithNodeId[Q]=t.equalizedSideWithNodeId[ie]=t.appliedTerrainNodeId,this.terrainReady=!0,this.terrainIsLoading=!1,this.terrainExists=!0,!this.normalMapTexturePtr){const i=this.planet._normalMapCreator;this.normalMapTexturePtr=this.planet.renderer.handler.createEmptyTexture_l(i.width,i.height)}this.planet.lightEnabled&&this.planet._normalMapCreator.queue(this)}}_normalMapEdgeEqualize(e){let t=this.node.neighbors,i=t[e][0],r=this.planet.terrain.maxZoom;this.tileZoom===r&&(t[0].length||t[1].length||t[2].length||t[3].length||(i=this.node.getEqualNeighbor(e)));let s=i&&i.segment,n=this;if(i&&s&&s.terrainReady&&s.terrainExists&&s.tileZoom<=r&&n._appliedNeighborsZoom[e]!==s.tileZoom){n._appliedNeighborsZoom[e]=s.tileZoom;let a=n.normalMapNormals,o=s.normalMapNormals;if(!(a&&o))return;let l=n.normalMapNormals,h=s.normalMapNormals,d=Math.sqrt(a.length/3),f=d-1;const u=f*ei[e];let g,_,m,v;if(n.tileZoom===s.tileZoom){const b=f-u;if(ti[e])for(let y=0;y<d;y++){let w=(y*d+u)*3,x=(y*d+b)*3;g=l[w]+h[x],_=l[w+1]+h[x+1],m=l[w+2]+h[x+2],v=1/Math.sqrt(g*g+_*_+m*m),o[x]=a[w]=g*v,o[x+1]=a[w+1]=_*v,o[x+2]=a[w+2]=m*v}else for(let y=0;y<d;y++){let w=(u*d+y)*3,x=(b*d+y)*3;g=l[w]+h[x],_=l[w+1]+h[x+1],m=l[w+2]+h[x+2],v=1/Math.sqrt(g*g+_*_+m*m),o[x]=a[w]=g*v,o[x+1]=a[w+1]=_*v,o[x+2]=a[w+2]=m*v}!s._inTheQueue&&s._appliedNeighborsZoom[Ot[e]]!==n.tileZoom&&(s._appliedNeighborsZoom[Ot[e]]=n.tileZoom,n.planet._normalMapCreator.queue(s))}}}applyTerrain(e){e?this.elevationsExists(e):this.elevationsNotExists()}deleteBuffers(){const e=this.handler.gl;e.deleteBuffer(this.vertexNormalBuffer),e.deleteBuffer(this.vertexPositionBuffer),e.deleteBuffer(this.vertexPositionBufferHigh),e.deleteBuffer(this.vertexPositionBufferLow),this.vertexNormalBuffer=null,this.vertexPositionBuffer=null,this.vertexPositionBufferHigh=null,this.vertexPositionBufferLow=null,this.vertexTextureCoordBuffer=null}deleteMaterials(){let e=this.materials;for(let t=0;t<e.length;t++){let i=e[t];i&&i.clear()}this.materials.length=0}deleteElevations(){this.terrainExists=!1,this.terrainReady=!1,this.terrainIsLoading=!1,this.normalMapVertices=null,this.normalMapVerticesHigh=null,this.normalMapVerticesLow=null,this.normalMapNormals=null,this.tempVertices=null,this.tempVerticesHigh=null,this.tempVerticesLow=null,this.terrainVertices=null,this.terrainVerticesHigh=null,this.terrainVerticesLow=null,this.noDataVertices=null,this.plainVertices=null,this.plainVerticesHigh=null,this.plainVerticesLow=null,this.plainNormals=null,this.normalMapReady&&(this.handler.gl.deleteTexture(this.normalMapTexture),this.normalMapReady=!1),this._appliedNeighborsZoom=[0,0,0,0],this.normalMapTextureBias[0]=0,this.normalMapTextureBias[1]=0,this.normalMapTextureBias[2]=1,this._inTheQueue=!1}clearSegment(){this.plainReady=!1,this.initialized=!1,this.deleteBuffers(),this.deleteMaterials(),this.deleteElevations()}destroySegment(){this.clearSegment();let e=this._slices.length;for(;e--;)this._slices[e].clear();this._slices=null,this.node=null,this.planet=null,this.handler=null,this.bbox=null,this.bsphere=null,this._extent=null,this.materials=null,this.plainVertices=null,this.plainVerticesHigh=null,this.plainVerticesLow=null,this.plainNormals=null,this.terrainVertices=null,this.terrainVerticesHigh=null,this.terrainVerticesLow=null,this.noDataVertices=null,this.tempVertices=null,this.tempVerticesHigh=null,this.tempVerticesLow=null,this.normalMapTextureBias=null,this.normalMapTexture=null,this.normalMapVertices=null,this.normalMapVerticesHigh=null,this.normalMapVerticesLow=null,this.normalMapNormals=null,this.vertexNormalBuffer=null,this.vertexPositionBuffer=null,this.vertexPositionBufferHigh=null,this.vertexPositionBufferLow=null,this.vertexTextureCoordBuffer=null,this._projection=null,this._appliedNeighborsZoom=null,this._globalTextureCoordinates=null}_setExtentLonLat(){this._extentLonLat=this._extent.inverseMercator()}createBoundsByExtent(){const e=this.planet.ellipsoid,t=this._extentLonLat,i=e.geodeticToCartesian(t.southWest.lon,t.southWest.lat),r=e.geodeticToCartesian(t.northEast.lon,t.northEast.lat),s=e.geodeticToCartesian(t.southWest.lon,t.northEast.lat),n=e.geodeticToCartesian(t.northEast.lon,t.southWest.lat);this._sw.copy(i),this._nw.copy(s),this._ne.copy(r),this._se.copy(n),this.setBoundingVolume3v(i,r)}createBoundsByParent(){let e=this.node;for(;e.parentNode&&!e.segment.terrainReady;)e=e.parentNode;let t=1<<this.tileZoom-e.segment.tileZoom,i=this.tileX-e.segment.tileX*t,r=this.tileY-e.segment.tileY*t;if(e.segment.terrainReady&&e.segment.tileZoom>=this.planet.terrain.minZoom){let s=e.segment.gridSize/t;if(s>=1){this.bsphere.center.x=e.segment.bsphere.center.x,this.bsphere.center.y=e.segment.bsphere.center.y,this.bsphere.center.z=e.segment.bsphere.center.z,this.bsphere.radius=e.segment.bsphere.radius;let n=s*r,a=s*i,o=e.segment.gridSize+1,l=3*((n+s)*o+a),h=3*(n*o+a),d=3*(n*o+a+s),f=3*((n+s)*o+a+s),u=e.segment.tempVertices,g=new p(u[l],u[l+1],u[l+2]),_=new p(u[d],u[d+1],u[d+2]),m=new p(u[h],u[h+1],u[h+2]),v=new p(u[f],u[f+1],u[f+2]);this._sw.copy(g),this._nw.copy(m),this._ne.copy(_),this._se.copy(v)}else{let n=e.segment,a=Math.floor(s*r),o=Math.floor(s*i),l=1/s,h=r-l*a,d=i-l*o,f;n.gridSize===1?f=n.tempVertices:f=qr(n.tempVertices,n.gridSize,a,o,1);let u=new p(f[0],f[1],f[2]),g=new p(f[9],f[10],f[11]),_=new p(f[3]-f[0],f[4]-f[1],f[5]-f[2]),m=new p(f[6]-f[0],f[7]-f[1],f[8]-f[2]),v=new p(f[3]-f[9],f[4]-f[10],f[5]-f[11]),b=new p(f[6]-f[9],f[7]-f[10],f[8]-f[11]),y=h,w=d,x,T;y+w<l?x=p.add(_.scaleTo(w/l),m.scaleTo(y/l)).addA(u):x=p.add(b.scaleTo(1-w/l),v.scaleTo(1-y/l)).addA(g),y=h+1,w=d+1,y+w<l?T=p.add(_.scaleTo(w/l),m.scaleTo(y/l)).addA(u):T=p.add(b.scaleTo(1-w/l),v.scaleTo(1-y/l)).addA(g),this.setBoundingVolume3v(x,T)}}else this.createBoundsByExtent()}setBoundingSphere(e,t,i,r){this.bsphere.center.x=e,this.bsphere.center.y=t,this.bsphere.center.z=i,this.bsphere.radius=this.bsphere.center.distance(r)}setBoundingVolume(e,t,i,r,s,n){this.bbox.setFromBoundsArr([e,t,i,r,s,n]);let a=e+(r-e)*.5,o=t+(s-t)*.5,l=i+(n-i)*.5;this.bsphere.center.set(a,o,l),this.bsphere.radius=this.bsphere.center.distance(new p(e,t,i))}setBoundingVolume3v(e,t){this.bbox.setFromBoundsArr([e.x,e.y,e.z,t.x,t.y,t.z]);let i=e.x+(t.x-e.x)*.5,r=e.y+(t.y-e.y)*.5,s=e.z+(t.z-e.z)*.5;this.bsphere.center.set(i,r,s),this.bsphere.radius=this.bsphere.center.distance(new p(e.x,e.y,e.z))}setBoundingVolumeArr(e){this.bbox.setFromBoundsArr(e);let t=e[0]+(e[3]-e[0])*.5,i=e[1]+(e[4]-e[1])*.5,r=e[2]+(e[5]-e[2])*.5;this.bsphere.center.set(t,i,r),this.bsphere.radius=this.bsphere.center.distance(new p(e[0],e[1],e[2]))}createCoordsBuffers(e,t,i){const r=(i+1)*(i+1),s=this.handler;this.vertexPositionBufferHigh&&this.vertexPositionBufferHigh.numItems===r?(s.setStreamArrayBuffer(this.vertexPositionBufferHigh,e),s.setStreamArrayBuffer(this.vertexPositionBufferLow,t)):(s.gl.deleteBuffer(this.vertexPositionBufferHigh),s.gl.deleteBuffer(this.vertexPositionBufferLow),this.vertexTextureCoordBuffer=this.planet._textureCoordsBufferCache[Math.log2(i)],this.vertexPositionBufferHigh=s.createArrayBuffer(e,3,r),this.vertexPositionBufferLow=s.createArrayBuffer(t,3,r))}_addViewExtent(){const e=this._extentLonLat;let t=this.planet._viewExtent;e.southWest.lon<t.southWest.lon&&(t.southWest.lon=e.southWest.lon),e.northEast.lon>t.northEast.lon&&(t.northEast.lon=e.northEast.lon),e.southWest.lat<t.southWest.lat&&(t.southWest.lat=e.southWest.lat),e.northEast.lat>t.northEast.lat&&(t.northEast.lat=e.northEast.lat)}_assignTileIndexes(){this._tileGroup=St;const e=this.tileZoom,t=this._extent,i=re;this.tileX=Math.round(Math.abs(-i-t.southWest.lon)/(t.northEast.lon-t.southWest.lon)),this.tileY=Math.round(Math.abs(i-t.northEast.lat)/(t.northEast.lat-t.southWest.lat));const r=Math.pow(2,e);this.tileXE=(this.tileX+1)%r,this.tileXW=(r+this.tileX-1)%r,this.tileYN=this.tileY-1,this.tileYS=this.tileY+1,this.tileIndex=Oe.getTileIndex(this.tileX,this.tileY,e)}initialize(){const e=this.planet,t=this.node;if(this.gridSize=e.terrain.gridSizeByZoom[this.tileZoom]||e.terrain.plainGridSize,t.sideSizeLog2[0]=t.sideSizeLog2[1]=t.sideSizeLog2[2]=t.sideSizeLog2[3]=Math.log2(this.gridSize),this.tileZoom<=e.terrain.maxZoom){const i=this.planet._normalMapCreator;this.normalMapTexturePtr=e.renderer.handler.createEmptyTexture_l(i.width,i.height)}this.normalMapTexture=this.planet.transparentTexture,this._assignGlobalTextureCoordinates(),this.initialized=!0}_assignGlobalTextureCoordinates(){const e=this._extent;this._globalTextureCoordinates[0]=(e.southWest.lon+re)*di,this._globalTextureCoordinates[1]=(re-e.northEast.lat)*di,this._globalTextureCoordinates[2]=(e.northEast.lon+re)*di,this._globalTextureCoordinates[3]=(re-e.southWest.lat)*di}createPlainSegmentAsync(){let e=this.planet,t=e.terrain;t.isReady()&&!this.plainReady&&this.tileZoom<=t.maxZoom&&(this.plainProcessing=!0,e._plainSegmentWorker.make(this))}_plainSegmentWorkerCallback(e){this.plainProcessing=!1,this.initialized&&!this.terrainReady&&(this.plainReady=!0,this.plainVertices=e.plainVertices,this.plainVerticesHigh=e.plainVerticesHigh,this.plainVerticesLow=e.plainVerticesLow,this.plainNormals=e.plainNormals,this._plainRadius=e.plainRadius,this.normalMapNormals=e.normalMapNormals,this.normalMapVertices=e.normalMapVertices,this.normalMapVerticesHigh=e.normalMapVerticesHigh,this.normalMapVerticesLow=e.normalMapVerticesLow,this.fileGridSize=Math.sqrt(e.normalMapVertices.length/3)-1)}createPlainSegment(){this.initialize(),this._createPlainVertices(),this.readyToEngage=!0}_createPlainVertices(){const e=this.planet.terrain.gridSizeByZoom[this.tileZoom],t=this._extent,i=this.planet.terrain.plainGridSize,s=t.getWidth()/Math.max(i,e),n=t.southWest.lon,a=t.northEast.lat,o=Math.max(i/e,1),l=Math.max(i,e)+1,h=this.planet.ellipsoid._invRadii2,d=l*l,f=(e+1)*(e+1)*3;let u=0,g=0;this.plainNormals=new Float32Array(f),this.plainVertices=new Float64Array(f),this.plainVerticesHigh=new Float32Array(f),this.plainVerticesLow=new Float32Array(f),this.normalMapNormals=new Float32Array(d*3),this.normalMapVertices=new Float64Array(d*3),this.normalMapVerticesHigh=new Float32Array(d*3),this.normalMapVerticesLow=new Float32Array(d*3);let _=this.plainVertices,m=this.plainVerticesHigh,v=this.plainVerticesLow,b=this.plainNormals,y=this.normalMapVertices,w=this.normalMapVerticesHigh,x=this.normalMapVerticesLow,T=this.normalMapNormals;for(let A=0;A<d;A++){let E=A%l,C=~~(A/l),P=this.planet.ellipsoid.lonLatToCartesian(B.inverseMercator(n+E*s,a-C*s)),I=P.x*h.x,k=P.y*h.y,z=P.z*h.z,L=1/Math.sqrt(I*I+k*k+z*z),S=I*L,F=k*L,R=z*L;p.doubleToTwoFloats(P,xt,yt),y[g]=P.x,w[g]=xt.x,x[g]=yt.x,T[g++]=S,y[g]=P.y,w[g]=xt.y,x[g]=yt.y,T[g++]=F,y[g]=P.z,w[g]=xt.z,x[g]=yt.z,T[g++]=R,C%o===0&&E%o===0&&(_[u]=P.x,m[u]=xt.x,v[u]=yt.x,b[u++]=S,_[u]=P.y,m[u]=xt.y,v[u]=yt.y,b[u++]=F,_[u]=P.z,m[u]=xt.z,v[u]=yt.z,b[u++]=R)}this.terrainVertices=_,this.terrainVerticesHigh=m,this.terrainVerticesLow=v,this.plainReady=!0}getMaterialByLayer(e){return this.materials[e.__id]}_getLayerExtentOffset(e){const t=e._extentMerc,i=this._extent,r=t.northEast.lon-t.southWest.lon,s=t.northEast.lat-t.southWest.lat,n=(i.southWest.lon-t.southWest.lon)/r,a=(t.northEast.lat-i.northEast.lat)/s,o=(i.northEast.lon-i.southWest.lon)/r,l=(i.northEast.lat-i.southWest.lat)/s;return[n,a,o,l]}screenRendering(e,t,i,r,s=!1){const n=this.handler.gl,a=e.attributes,o=e.uniforms,l=this.materials,h=this.planet;let d,f;t&&t.length?(f=t[0],d=f._height):d=0,n.activeTexture(n.TEXTURE0+h.SLICE_SIZE+2),n.bindTexture(n.TEXTURE_2D,r||this.getDefaultTexture()),n.uniform1i(o.defaultTexture,h.SLICE_SIZE+2);let u=0,g=0,_=!1,m=this._slices[i];for(m?m.layers=[]:m=this._slices[i]=new Rl(this),this._indexBuffer=this._getIndexBuffer();f;){if(this.layerOverlap(f)&&(f._fading&&f._fadingOpacity>0||(f.minZoom>=h.minCurrZoom||f.maxZoom>=h.minCurrZoom)&&(f.minZoom<=h.maxCurrZoom||f.maxZoom<=h.maxCurrZoom))){_=!0;let v=l[f.__id];v||(v=l[f.__id]=f.createMaterial(this)),v.isReady||(this.planet._renderCompleted=!1),m.append(f,v),h._samplerArr[u]=u,n.activeTexture(n.TEXTURE0+u),n.bindTexture(n.TEXTURE_2D,v.texture||h.transparentTexture),u++}g++,f=t[g]}(_||!s)&&(n.uniform1i(o.samplerCount,u),n.uniform1f(o.height,d),n.uniform1iv(o.samplerArr,h._samplerArr),n.uniform4fv(o.tileOffsetArr,m.tileOffsetArr),n.uniform1fv(o.layerOpacityArr,m.layerOpacityArr),h.lightEnabled&&(n.activeTexture(n.TEXTURE0+h.SLICE_SIZE+3),n.bindTexture(n.TEXTURE_2D,this.normalMapTexture||h.transparentTexture),n.uniform1i(o.uNormalMap,h.SLICE_SIZE+3),n.uniform3fv(o.uNormalMapBias,this.normalMapTextureBias),n.uniform4fv(o.uGlobalTextureCoord,this._globalTextureCoordinates)),n.bindBuffer(n.ARRAY_BUFFER,this.vertexPositionBufferHigh),n.vertexAttribPointer(a.aVertexPositionHigh,this.vertexPositionBufferHigh.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this.vertexPositionBufferLow),n.vertexAttribPointer(a.aVertexPositionLow,this.vertexPositionBufferLow.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this.vertexTextureCoordBuffer),n.vertexAttribPointer(a.aTextureCoord,2,n.UNSIGNED_SHORT,!0,0,0),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this._indexBuffer),n.drawElements(h.drawMode,this._indexBuffer.numItems,n.UNSIGNED_INT,0))}heightPickingRendering(e,t){const i=this.handler.gl,r=e.attributes,s=e.uniforms;let n;t&&t.length?n=t[0]._height:n=0,i.uniform1f(s.height,n),i.bindBuffer(i.ARRAY_BUFFER,this.vertexPositionBufferHigh),i.vertexAttribPointer(r.aVertexPositionHigh,this.vertexPositionBufferHigh.itemSize,i.FLOAT,!1,0,0),i.bindBuffer(i.ARRAY_BUFFER,this.vertexPositionBufferLow),i.vertexAttribPointer(r.aVertexPositionLow,this.vertexPositionBufferLow.itemSize,i.FLOAT,!1,0,0),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,this._indexBuffer),i.drawElements(i.TRIANGLE_STRIP,this._indexBuffer.numItems,i.UNSIGNED_INT,0)}colorPickingRendering(e,t,i,r,s=!1){const n=this.handler.gl,a=e.attributes,o=e.uniforms;let l=this.materials,h=this.planet,d;t&&t.length?d=t[0]._height:d=0;let f=!1,u=this._slices[i],g=u.layers.length;for(let _=0;_<g;_++){f=!0;let m=u.layers[_],v=_*4;h._pickingColorArr[v]=m._pickingColor.x/255,h._pickingColorArr[v+1]=m._pickingColor.y/255,h._pickingColorArr[v+2]=m._pickingColor.z/255,h._pickingColorArr[v+3]=Number(m._pickingEnabled),h._samplerArr[_]=_,n.activeTexture(n.TEXTURE0+_),n.bindTexture(n.TEXTURE_2D,l[m.__id].texture||this.planet.transparentTexture),h._pickingMaskArr[_]=_+h.SLICE_SIZE,n.activeTexture(n.TEXTURE0+_+h.SLICE_SIZE),n.bindTexture(n.TEXTURE_2D,l[m.__id].pickingMask||this.planet.transparentTexture)}(f||!s)&&(n.uniform1i(o.samplerCount,g),n.uniform1f(o.height,d),n.uniform1iv(o.samplerArr,h._samplerArr),n.uniform1iv(o.pickingMaskArr,h._pickingMaskArr),n.uniform4fv(o.pickingColorArr,h._pickingColorArr),n.uniform4fv(o.tileOffsetArr,u.tileOffsetArr),n.uniform1fv(o.layerOpacityArr,u.layerOpacityArr),n.bindBuffer(n.ARRAY_BUFFER,this.vertexPositionBufferHigh),n.vertexAttribPointer(a.aVertexPositionHigh,this.vertexPositionBufferHigh.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this.vertexPositionBufferLow),n.vertexAttribPointer(a.aVertexPositionLow,this.vertexPositionBufferLow.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this.vertexTextureCoordBuffer),n.vertexAttribPointer(a.aTextureCoord,2,n.UNSIGNED_SHORT,!0,0,0),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this._indexBuffer),n.drawElements(n.TRIANGLE_STRIP,this._indexBuffer.numItems,n.UNSIGNED_INT,0))}depthRendering(e,t){const i=this.handler.gl,r=e.attributes,s=e.uniforms;var n;t&&t.length?n=t[0]._height:n=0,i.uniform1f(s.height,n),i.bindBuffer(i.ARRAY_BUFFER,this.vertexPositionBufferHigh),i.vertexAttribPointer(r.aVertexPositionHigh,this.vertexPositionBufferHigh.itemSize,i.FLOAT,!1,0,0),i.bindBuffer(i.ARRAY_BUFFER,this.vertexPositionBufferLow),i.vertexAttribPointer(r.aVertexPositionLow,this.vertexPositionBufferLow.itemSize,i.FLOAT,!1,0,0),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,this._indexBuffer),i.drawElements(i.TRIANGLE_STRIP,this._indexBuffer.numItems,i.UNSIGNED_INT,0)}_getIndexBuffer(){const e=this.node.sideSizeLog2;let t=this.planet._indexesCache[Math.log2(this.gridSize)][e[0]][e[1]][e[2]][e[3]];if(!t.buffer){let i=Bi().createSegmentIndexes(Math.log2(this.gridSize),[e[0],e[1],e[2],e[3]]);t.buffer=this.planet.renderer.handler.createElementArrayBuffer(i,1),this.planet._indexesCacheToRemoveCounter++}return t.buffer}_collectVisibleNodes(){this.planet._visibleNodes[this.node.nodeId]=this.node}layerOverlap(e){return this._extent.overlaps(e._extentMerc)}getDefaultTexture(){return this.planet.solidTextureOne}getExtentLonLat(){return this._extentLonLat}getExtentMerc(){return this._extentMerc}getExtent(){return this._extent}getNodeState(){let e=this.planet._visibleNodes[this.node.nodeId];return e&&e.state||De}getNeighborSide(e){if(this.tileY===e.tileY){if(this.tileX===e.tileXE)return ie;if(this.tileX===e.tileXW)return te}else if(this.tileX===e.tileX){if(this.tileY===e.tileYS)return K;if(this.tileY===e.tileYN)return Q}return-1}}let zi=new p,Fi=new p;const bt=[new V(0,0),new V(1,0),new V(0,1),new V(1,1)],Sl=Math.sqrt(bt.length)-1;let q={xmin:0,ymin:0,zmin:0,xmax:0,ymax:0,zmax:0},wr=class li{constructor(e,t,i,r,s,n,a){t._createdNodesCount++,this.SegmentPrototype=e,this.planet=t,this.parentNode=r,this.partId=i,this.nodeId=i+s,this.state=null,this.appliedTerrainNodeId=-1,this.sideSizeLog2=[0,0,0,0],this.ready=!1,this.neighbors=[[],[],[],[]],this.equalizedSideWithNodeId=[this.nodeId,this.nodeId,this.nodeId,this.nodeId],this.nodes=[],this.segment=new e(this,t,n,a),this._cameraInside=!1,this.inFrustum=0,this.createBounds()}createChildrenNodes(){this.ready=!0;const e=this.planet,t=this.segment,i=t._extent,r=t.tileZoom+1,s=i.getWidth()*.5,n=i.getHeight()*.5,a=i.northEast,o=i.southWest,l=this.nodeId*4+1,h=new B(o.lon+s,o.lat+n),d=this.nodes;d[$]=new li(this.SegmentPrototype,e,$,this,l,r,new U(new B(o.lon,o.lat+n),new B(o.lon+s,a.lat))),d[ue]=new li(this.SegmentPrototype,e,ue,this,l,r,new U(h,new B(a.lon,a.lat))),d[_e]=new li(this.SegmentPrototype,e,_e,this,l,r,new U(new B(o.lon,o.lat),h)),d[ge]=new li(this.SegmentPrototype,e,ge,this,l,r,new U(new B(o.lon+s,o.lat),new B(a.lon,o.lat+n)))}createBounds(){let e=this.segment;e._setExtentLonLat(),e.tileZoom===0?e.setBoundingSphere(0,0,0,new p(0,0,e.planet.ellipsoid.equatorialSize)):e.tileZoom<e.planet.terrain.minZoom?e.createBoundsByExtent():e.createBoundsByParent();let t=e.bsphere.center.x,i=e.bsphere.center.y,r=e.bsphere.center.z,s=1/Math.sqrt(t*t+i*i+r*r);e.centerNormal.x=t*s,e.centerNormal.y=i*s,e.centerNormal.z=r*s}getState(){if(this.state===-1)return this.state;let e=this.parentNode;for(;e;){if(e.state!==es)return De;e=e.parentNode}return this.state}getEqualNeighbor(e){let t=this,i=ts[e][t.partId];if(i!==-1)return t.parentNode.nodes[i];{let r=[];for(;t.parentNode;)if(r.push(t.partId),i=ts[e][t.partId],t=t.parentNode,i!==-1){let s=r.length;for(e=Ot[e];t&&s--;)i=Ea[e][r[s]],t=t.nodes[i];return t}}}renderTree(e,t,i,r){if(this.planet._renderedNodes.length>=Aa)return;this.state=es,this.neighbors[0]=null,this.neighbors[1]=null,this.neighbors[2]=null,this.neighbors[3]=null,this.neighbors[0]=[],this.neighbors[1]=[],this.neighbors[2]=[],this.neighbors[3]=[];let s=this.segment,n=this.planet;if(this._cameraInside=!1,!this.parentNode||this.parentNode._cameraInside){let l;Math.abs(e._lonLat.lat)<=ce&&s._projection.id===Ri.id?l=s._extent.isInside(e._lonLatMerc):s._projection.id===xr.id&&(l=s._extent.isInside(e._lonLat)),l&&(e._insideSegment=s,this._cameraInside=!0)}this.inFrustum=0;let a=e.frustums,o=a.length;if(s.tileZoom<6)for(let l=0;l<o;l++)a[l].containsSphere(s.bsphere)&&(this.inFrustum|=1<<l);else{let l=1<<o-1-1;for(let h=0;l&&h<o;h++)s.terrainReady?a[h].containsBox(s.bbox)&&(l>>=1,this.inFrustum|=1<<h):a[h].containsSphere(s.bsphere)&&(l>>=1,this.inFrustum|=1<<h)}if(this.inFrustum||this._cameraInside||s.tileZoom<3){let l=Math.abs(e._lonLat.height),h=e.eye,d=h.length2()-this.planet.ellipsoid.polarSizeSqr,f=s.tileZoom>19||s.tileZoom<5&&!s.terrainReady||s.tileZoom<2;l>21e3?f=f||h.distance2(s._sw)<d||h.distance2(s._nw)<d||h.distance2(s._ne)<d||h.distance2(s._se)<d:f=f||e.eye.distance(s.bsphere.center)-s.bsphere.radius<Jr*Math.sqrt(l),(this.inFrustum&&(f||l>1e4)||this._cameraInside)&&s._collectVisibleNodes(),s.tileZoom<2?this.traverseNodes(e,t,i,r):s.terrainReady&&(!t&&e.projectedSize(s.bsphere.center,s._plainRadius)<n.lodSize||t&&(s.tileZoom===t||!f))?f?(s.passReady=!0,this.renderNode(this.inFrustum,!this.inFrustum,i,r)):this.state=De:s.terrainReady&&s.checkZoom()&&(!t||e.projectedSize(s.bsphere.center,s.bsphere.radius)>this.planet._maxLodSize)?this.traverseNodes(e,t,s,r):f?(s.passReady=t?s.terrainReady:!1,this.renderNode(this.inFrustum,!this.inFrustum,i,r)):this.state=De}else this.state=De}traverseNodes(e,t,i,r){this.ready||this.createChildrenNodes();let s=this.nodes;s[0].renderTree(e,t,i,r),s[1].renderTree(e,t,i,r),s[2].renderTree(e,t,i,r),s[3].renderTree(e,t,i,r)}renderNode(e,t,i,r){let s=this.segment;if(s.terrainReady||(s.initialized||s.initialize(),this.whileTerrainLoading(i),s.plainProcessing||s.createPlainSegmentAsync(),s.plainReady&&!r&&s.loadTerrain()),s.planet.lightEnabled&&!s.normalMapReady&&this.whileNormalMapCreating(),t){this.state=-1;return}!this._cameraInside&&s.tileZoom>this.planet.maxCurrZoom&&(this.planet.maxCurrZoom=s.tileZoom),s.tileZoom<this.planet.minCurrZoom&&(this.planet.minCurrZoom=s.tileZoom),s._addViewExtent(),this.addToRender(e)}addToRender(e){this.state=$e;let t=this.planet._renderedNodes;for(let s=t.length-1;s>=0;--s){const n=t[s],a=this.getCommonSide(n);if(a!==-1){const o=Ot[a];if(this.neighbors[a].length===0||n.neighbors[o].length===0){const l=this.segment,h=n.segment,d=l.gridSize/(h.gridSize*Math.pow(2,h.tileZoom-l.tileZoom));let f=l.gridSize,u=h.gridSize;d>1?(f=Math.ceil(l.gridSize/d),u=h.gridSize):d<1&&(f=l.gridSize,u=Math.ceil(h.gridSize*d)),this.sideSizeLog2[a]=Math.log2(f),n.sideSizeLog2[o]=Math.log2(u)}this.neighbors[a].push(n),n.neighbors[o].push(this)}}t.push(this),this.segment.terrainReady||(this.planet._renderCompleted=!1,this.planet._terrainCompleted=!1);let i=0,r=this.planet._renderedNodesInFrustum;for(;e;)e&1&&r[i].push(this),i++,e>>=1}getCommonSide(e){const t=this.segment,i=e.segment;if(t.tileZoom===i.tileZoom&&t._tileGroup===i._tileGroup)return t.getNeighborSide(i);{const r=t._extentLonLat,s=i._extentLonLat;let n=r.northEast,a=r.southWest,o=s.northEast,l=s.southWest,h=n.lon,d=n.lat,f=a.lon,u=a.lat,g=o.lon,_=o.lat,m=l.lon,v=l.lat;if(t._tileGroup===i._tileGroup){if(h===m&&(d<=_&&u>=v||d>=_&&u<=v))return te;if(f===g&&(d<=_&&u>=v||d>=_&&u<=v))return ie;if(d===v&&(f>=m&&h<=g||f<=m&&h>=g))return K;if(u===_&&(f>=m&&h<=g||f<=m&&h>=g))return Q;if(i.tileX===0&&t.tileX===Math.pow(2,t.tileZoom)-1&&(d<=_&&u>=v||d>=_&&u<=v))return te;if(t.tileX===0&&i.tileX===Math.pow(2,i.tileZoom)-1&&(d<=_&&u>=v||d>=_&&u<=v))return ie}if(t._tileGroup===St&&i._tileGroup===Si&&t.tileY===0&&i.tileY===Math.pow(2,i.tileZoom)-1&&(f>=m&&h<=g||f<=m&&h>=g))return K;if(t._tileGroup===_n&&i._tileGroup===St&&t.tileY===0&&i.tileY===Math.pow(2,i.tileZoom)-1&&(f>=m&&h<=g||f<=m&&h>=g))return K;if(i._tileGroup===Si&&t._tileGroup===St&&t.tileY===Math.pow(2,t.tileZoom)-1&&i.tileY===0&&(f>=m&&h<=g||f<=m&&h>=g))return Q;if(t._tileGroup===Si&&i._tileGroup===St&&t.tileY===Math.pow(2,t.tileZoom)-1&&i.tileY===0&&(f>=m&&h<=g||f<=m&&h>=g))return Q}return-1}whileNormalMapCreating(){const e=this.segment;!e.terrainIsLoading&&e.terrainExists&&!e._inTheQueue&&e.planet._normalMapCreator.queue(e);let t=this;for(;t.parentNode&&!t.segment.normalMapReady;)t=t.parentNode;const i=2<<e.tileZoom-t.segment.tileZoom-1;e.normalMapTexture=t.segment.normalMapTexture,e.normalMapTextureBias[0]=e.tileX-t.segment.tileX*i,e.normalMapTextureBias[1]=e.tileY-t.segment.tileY*i,e.normalMapTextureBias[2]=1/i}whileTerrainLoading(e){const t=this.segment;let i=this;if(e&&e.terrainReady)i=e.node;else for(;i.parentNode&&!i.segment.terrainReady;)i=i.parentNode;if(i.segment.terrainReady&&this.appliedTerrainNodeId!==i.nodeId){let r=2<<t.tileZoom-i.segment.tileZoom-1,s=t.tileX-i.segment.tileX*r,n=t.tileY-i.segment.tileY*r;const a=i.segment;let o,l,h,d;this.appliedTerrainNodeId=i.nodeId,this.equalizedSideWithNodeId[K]=this.equalizedSideWithNodeId[te]=this.equalizedSideWithNodeId[Q]=this.equalizedSideWithNodeId[ie]=this.appliedTerrainNodeId;let f=i.segment.gridSize/r,u=i.segment.fileGridSize/r;if(q.xmin=fe,q.xmax=pe,q.ymin=fe,q.ymax=pe,q.zmin=fe,q.zmax=pe,f>=1){t.gridSize=f;let g=(f+1)*(f+1)*3;o=new Float64Array(g),l=new Float32Array(g),h=new Float32Array(g),a.noDataVertices&&(d=new Uint8Array(g/3)),Wr(a.terrainVertices,a.terrainVerticesHigh,a.terrainVerticesLow,a.noDataVertices,a.gridSize,f*n,f*s,f,o,l,h,q,d)}else if(u>=1&&i.segment.terrainExists){t.gridSize=u;let g=(u+1)*(u+1)*3;o=new Float64Array(g),l=new Float32Array(g),h=new Float32Array(g),a.noDataVertices&&(d=new Uint8Array(g/3)),Wr(a.normalMapVertices,a.normalMapVerticesHigh,a.normalMapVerticesLow,a.noDataVertices,i.segment.fileGridSize,u*n,u*s,u,o,l,h,q,d)}else{t.gridSize=Sl;let g=Math.floor(f*n),_=Math.floor(f*s),m;a.gridSize===1?m=a.terrainVertices:m=qr(a.terrainVertices,a.gridSize,g,_,1);let v=1/f,b=n-v*g,y=s-v*_,w=new p(m[0],m[1],m[2]),x=new p(m[9],m[10],m[11]),T=new p(m[3]-m[0],m[4]-m[1],m[5]-m[2]),A=new p(m[6]-m[0],m[7]-m[1],m[8]-m[2]),E=new p(m[3]-m[9],m[4]-m[10],m[5]-m[11]),C=new p(m[6]-m[9],m[7]-m[10],m[8]-m[11]),P=new p;o=new Float64Array(3*bt.length),l=new Float32Array(3*bt.length),h=new Float32Array(3*bt.length);for(let I=0;I<bt.length;I++){let k=bt[I].y+b,z=bt[I].x+y,L=z*f,S=k*f;k+z<v?P=T.scaleTo(L).addA(A.scaleTo(S)).addA(w):P=C.scaleTo(1-L).addA(E.scaleTo(1-S)).addA(x),p.doubleToTwoFloats(P,zi,Fi);let F=I*3;o[F]=P.x,o[F+1]=P.y,o[F+2]=P.z,l[F]=zi.x,l[F+1]=zi.y,l[F+2]=zi.z,h[F]=Fi.x,h[F+1]=Fi.y,h[F+2]=Fi.z,P.x<q.xmin&&(q.xmin=P.x),P.x>q.xmax&&(q.xmax=P.x),P.y<q.ymin&&(q.ymin=P.y),P.y>q.ymax&&(q.ymax=P.y),P.z<q.zmin&&(q.zmin=P.z),P.z>q.zmax&&(q.zmax=P.z)}}if(t.readyToEngage=!0,t.terrainVertices=o,t.terrainVerticesHigh=l,t.terrainVerticesLow=h,t.tempVertices=o,t.tempVerticesHigh=l,t.tempVerticesLow=h,t.noDataVertices=d,t.setBoundingVolume(q.xmin,q.ymin,q.zmin,q.xmax,q.ymax,q.zmax),t.tileZoom>t.planet.terrain.maxZoom&&i.segment.tileZoom>=t.planet.terrain.maxZoom&&(t._plainRadius=i.segment._plainRadius/r,t.terrainReady=!0,t.terrainIsLoading=!1,t.terrainVertices=o,t.terrainVerticesHigh=l,t.terrainVerticesLow=h,t.passReady=!0,this.appliedTerrainNodeId=this.nodeId,this.equalizedSideWithNodeId[K]=this.equalizedSideWithNodeId[te]=this.equalizedSideWithNodeId[Q]=this.equalizedSideWithNodeId[ie]=this.appliedTerrainNodeId,i.segment.terrainExists)){t.normalMapVertices=o,t.fileGridSize=Math.sqrt(o.length/3)-1;let g=Math.sqrt(a.normalMapNormals.length/3)-1,_=g/r;g>1?t.normalMapNormals=ra(a.normalMapNormals,g,_*n,_*s,_):t.normalMapNormals=a.normalMapNormals}}}destroy(){this.state=De,this.segment.destroySegment();let e=this.neighbors;for(let t=0;t<e.length;t++){let i=e[t];if(i)for(let r=0;r<i.length;r++){let s=i[r];s&&s.neighbors&&(s.neighbors[K]=null,s.neighbors[te]=null,s.neighbors[Q]=null,s.neighbors[ie]=null)}}this.neighbors=null,this.parentNode=null,this.sideSizeLog2=null,this.segment=null}clearTree(){const e=this.getState();if(e===De||e===$e)this.destroyBranches();else for(let t=0;t<this.nodes.length;t++)this.nodes[t]&&this.nodes[t].clearTree()}clearBranches(){for(let e=0;e<this.nodes.length;e++)this.nodes[e].clearBranches(),this.nodes[e].segment.deleteMaterials()}destroyBranches(){if(this.ready){let e=[],t;for(t=0;t<this.nodes.length;t++)e[t]=this.nodes[t];for(this.ready=!1,this.nodes=[],t=0;t<e.length;t++)e[t].destroyBranches(),e[t].destroy(),e[t]=null;e.length=0,e=null}}traverseTree(e){if(e(this),this.ready)for(let t=0;t<this.nodes.length;t++)this.nodes[t].traverseTree(e)}getOffsetOppositeNeighbourSide(e,t){let i=this,r=e.segment.tileZoom,s=0;for(;i.segment.tileZoom>r;)s+=Ca[i.partId][t]/(1<<i.segment.tileZoom-r),i=i.parentNode;return s}};class Il{constructor(e,t="",i=Ri){this.name=t,this.projection=i,this._planet=e,this._quadTreeList=[]}destroyBranches(){for(let e=0,t=this._quadTreeList.length;e<t;e++)this._quadTreeList[e].destroyBranches()}clearLayerMaterial(e){let t=e.__id;for(let i=0,r=this._quadTreeList.length;i<r;i++)this._quadTreeList[i].traverseTree(function(s){let n=s.segment.materials;n[t]&&(n[t].clear(),n[t]=null)})}get planet(){return this._planet}init(){}preRender(){for(let e=0;e<this._quadTreeList.length;e++){let t=this._quadTreeList[e];t.createChildrenNodes(),t.segment.createPlainSegment();for(let i=0;i<t.nodes.length;i++)t.nodes[i].segment.createPlainSegment()}}preLoad(){for(let e=0;e<this._quadTreeList.length;e++){let t=this._quadTreeList[e];t.segment.passReady=!0,t.renderNode(1),this._planet.normalMapCreator.drawSingle(t.segment);for(let i=0;i<t.nodes.length;i++)t.nodes[i].segment.passReady=!0,t.nodes[i].renderNode(1),this._planet._normalMapCreator.drawSingle(t.nodes[i].segment)}}collectRenderNodes(){for(let e=0;e<this._quadTreeList.length;e++)this._quadTreeList[e].renderTree(this._planet.camera,0,null)}clear(){for(let e=0;e<this._quadTreeList.length;e++)this._quadTreeList[e].clearTree()}get quadTreeList(){return this._quadTreeList}}const zl=7,mn=(90-ce)/Math.pow(2,zl);let wt=new p,Tt=new p;class pn extends gn{constructor(e,t,i,r){super(e,t,i,r),this._projection=xr,this._extentLonLat=this._extent,this._extentMerc=new U(r.southWest.forwardMercatorEPS01(),r.northEast.forwardMercatorEPS01()),this._isNorth=this._extent.northEast.lat>0,this.isPole=!0}_setExtentLonLat(){this._extentLonLat=this._extent}projectNative(e){return e}getInsideLonLat(e){return e._lonLat}_getMaxZoom(){let e=0;if(this._isNorth){let t=Math.floor((90-this._extent.northEast.lat)/mn);e=Math.floor(t/16)+7}else{let t=Math.floor((Re-this._extent.northEast.lat)/mn);e=12-Math.floor(t/16)}return e}checkZoom(){return super.checkZoom()&&this.tileZoom<=this._getMaxZoom()}_assignTileIndexes(){this._assignTileXIndexes(this._extent),this._assignTileYIndexes(this._extent),this.tileIndex=Oe.getTileIndex(this.tileX,this.tileY,this.tileZoom)}_assignTileXIndexes(e){this.tileX=Math.round(Math.abs(-180-e.southWest.lon)/(e.northEast.lon-e.southWest.lon));let t=1<<this.tileZoom;this.tileXE=(this.tileX+1)%t,this.tileXW=(t+this.tileX-1)%t}_assignTileYIndexes(e){const t=e.northEast.lat;t>0?(this._tileGroup=Si,this.tileY=Math.round((90-t)/(e.northEast.lat-e.southWest.lat))):(this._tileGroup=_n,this.tileY=Math.round((Re-t)/(e.northEast.lat-e.southWest.lat))),this.tileYN=this.tileY-1,this.tileYS=this.tileY+1}_createPlainVertices(){const e=this.planet.terrain.gridSizeByZoom[this.tileZoom],t=this._extent,i=this.planet.terrain.plainGridSize,r=t.getWidth(),s=t.getHeight(),n=r/Math.max(i,e),a=s/e,o=t.southWest.lon,l=t.northEast.lat,h=Math.max(i/e,1),d=Math.max(i,e)+1,f=this.planet.ellipsoid._invRadii2;let u=0,g=0;const _=d*d,m=(e+1)*(e+1)*3;this.plainNormals=new Float32Array(m),this.plainVertices=new Float64Array(m),this.plainVerticesHigh=new Float32Array(m),this.plainVerticesLow=new Float32Array(m),this.normalMapNormals=new Float32Array(_*3),this.normalMapVertices=new Float64Array(_*3),this.normalMapVerticesHigh=new Float32Array(_*3),this.normalMapVerticesLow=new Float32Array(_*3);let v=549755748352,b=-549755748352,y=549755748352,w=-549755748352,x=549755748352,T=-549755748352,A=this.plainVertices,E=this.plainVerticesHigh,C=this.plainVerticesLow,P=this.plainNormals,I=this.normalMapVertices,k=this.normalMapVerticesHigh,z=this.normalMapVerticesLow,L=this.normalMapNormals;for(let M=0;M<_;M++){let j=M%d,st=~~(M/d);const W=this.planet.ellipsoid.lonLatToCartesian(new B(o+j*n,l-st*a));let Pr=W.x*f.x,Lr=W.y*f.y,Br=W.z*f.z,Mr=1/Math.sqrt(Pr*Pr+Lr*Lr+Br*Br),kn=Pr*Mr,Dn=Lr*Mr,Nn=Br*Mr;p.doubleToTwoFloats(W,wt,Tt),I[g]=W.x,k[g]=wt.x,z[g]=Tt.x,L[g++]=kn,I[g]=W.y,k[g]=wt.y,z[g]=Tt.y,L[g++]=Dn,I[g]=W.z,k[g]=wt.z,z[g]=Tt.z,L[g++]=Nn,st%h===0&&j%h===0&&(A[u]=W.x,E[u]=wt.x,C[u]=Tt.x,P[u++]=kn,A[u]=W.y,E[u]=wt.y,C[u]=Tt.y,P[u++]=Dn,A[u]=W.z,E[u]=wt.z,C[u]=Tt.z,P[u++]=Nn,W.x<v&&(v=W.x),W.x>b&&(b=W.x),W.y<y&&(y=W.y),W.y>w&&(w=W.y),W.z<x&&(x=W.z),W.z>T&&(T=W.z))}this.terrainVertices=A,this.terrainVerticesHigh=E,this.terrainVerticesLow=C;let S=(b-v)*.5,F=(w-y)*.5,R=(T-x)*.5;this._plainRadius=Math.sqrt(S*S+F*F+R*R),this.plainReady=!0}_assignGlobalTextureCoordinates(){const e=this._extent;this._globalTextureCoordinates[0]=(e.southWest.lon+180)/360,this._globalTextureCoordinates[1]=(90-e.northEast.lat)/180,this._globalTextureCoordinates[2]=(e.northEast.lon+180)/360,this._globalTextureCoordinates[3]=(90-e.southWest.lat)/180}_collectVisibleNodes(){this._isNorth?this.planet._visibleNodesNorth[this.node.nodeId]=this.node:this.planet._visibleNodesSouth[this.node.nodeId]=this.node}_getLayerExtentOffset(e){const t=e._extent,i=this._extent,r=t.northEast.lon-t.southWest.lon,s=t.northEast.lat-t.southWest.lat,n=(i.southWest.lon-t.southWest.lon)/r,a=(t.northEast.lat-i.northEast.lat)/s,o=(i.northEast.lon-i.southWest.lon)/r,l=(i.northEast.lat-i.southWest.lat)/s;return[n,a,o,l]}layerOverlap(e){return this._extent.overlaps(e._extent)}getDefaultTexture(){return this._isNorth?this.planet.solidTextureOne:this.planet.solidTextureTwo}getExtentLonLat(){return this._extent}getNodeState(){let e;return this._isNorth?e=this.planet._visibleNodesNorth[this.node.nodeId]:e=this.planet._visibleNodesSouth[this.node.nodeId],e&&e.state||De}}class Fl extends Il{constructor(e){super(e,"Earth")}init(){this._quadTreeList=[new wr(gn,this.planet,$,null,0,0,U.createFromArray([-2003750834e-2,-2003750834e-2,2003750834e-2,2003750834e-2])),new wr(pn,this.planet,$,null,0,0,U.createFromArray([-180,ce,180,90])),new wr(pn,this.planet,$,null,0,0,U.createFromArray([-180,-90,180,Re]))]}}/* This file is mostly a straight translation of
|
|
2829
2829
|
* GeographicLib/src/Geoid.cpp from C++ to JavaScript
|
|
2830
2830
|
* by Kim Vandry <vandry@TZoNE.ORG>
|
|
2831
2831
|
*
|
|
@@ -3806,7 +3806,7 @@
|
|
|
3806
3806
|
varying vec4 color;
|
|
3807
3807
|
void main () {
|
|
3808
3808
|
gl_FragColor = color;
|
|
3809
|
-
}`})),this._framebuffer=new Be(this._handler,{width:this._width,height:this._height,useDepth:!1}),this._framebuffer.init()}frame(){if(this._planet.layerLock.isFree()&&this._queue.length){let e=this._handler,t=e.gl;t.disable(t.CULL_FACE),t.disable(t.DEPTH_TEST);let i=e.programs.vectorTileLineRasterization,r=e.programs.vectorTilePolygonRasterization,s=this._width,n=this._height,a=s,o=n,l=a<<1,h=o<<1,d=new Float32Array(4),f=new Float32Array(4),u=this._framebuffer.activate(),g=0,_=window.performance.now();for(;this._queue.length&&g<Yl;){let m=this._queue.shift();if(m.isLoading&&m.segment.node.getState()===$e){let v=m.layer._pickingEnabled;m.segment.tileZoom<4?(a=l,o=h):(a=s,o=n);let b=m._updateTexture||e.createEmptyTexture_l(a,o),y=v?m._updatePickingMask||e.createEmptyTexture_n(a,o):null;m.applyTexture(b,y),u.setSize(a,o),u.bindOutputTexture(b),t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT);let w=m.segment.getExtentMerc();Lt(w.southWest.lon,zt),d[0]=zt[0],f[0]=zt[1],Lt(w.southWest.lat,zt),d[1]=zt[0],f[1]=zt[1],d[2]=2/w.getWidth(),d[3]=2/w.getHeight(),r.activate();let x=r._program,T=x.attributes,A=x.uniforms,E=m.layer._geometryHandler;t.uniform4fv(A.extentParamsHigh,d),t.uniform4fv(A.extentParamsLow,f),t.bindBuffer(t.ARRAY_BUFFER,E._polyVerticesHighBufferMerc),t.vertexAttribPointer(T.coordinatesHigh,E._polyVerticesHighBufferMerc.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,E._polyVerticesLowBufferMerc),t.vertexAttribPointer(T.coordinatesLow,E._polyVerticesLowBufferMerc.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,E._polyColorsBuffer),t.vertexAttribPointer(T.colors,E._polyColorsBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,E._polyIndexesBuffer),t.drawElements(t.TRIANGLES,E._polyIndexesBuffer.numItems,t.UNSIGNED_INT,0),v&&(u.bindOutputTexture(y),t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),t.bindBuffer(t.ARRAY_BUFFER,E._polyPickingColorsBuffer),t.vertexAttribPointer(T.colors,E._polyPickingColorsBuffer.itemSize,t.FLOAT,!1,0,0),t.drawElements(t.TRIANGLES,E._polyIndexesBuffer.numItems,t.UNSIGNED_INT,0)),u.bindOutputTexture(b),i.activate(),x=i._program,T=x.attributes,A=x.uniforms,t.uniform2fv(A.viewport,[a,o]),t.uniform4fv(A.extentParamsHigh,d),t.uniform4fv(A.extentParamsLow,f);let C=E._lineVerticesHighBufferMerc;t.bindBuffer(t.ARRAY_BUFFER,C),t.vertexAttribPointer(T.prevHigh,C.itemSize,t.FLOAT,!1,8,0),t.vertexAttribPointer(T.currentHigh,C.itemSize,t.FLOAT,!1,8,32),t.vertexAttribPointer(T.nextHigh,C.itemSize,t.FLOAT,!1,8,64),C=E._lineVerticesLowBufferMerc,t.bindBuffer(t.ARRAY_BUFFER,C),t.vertexAttribPointer(T.prevLow,C.itemSize,t.FLOAT,!1,8,0),t.vertexAttribPointer(T.currentLow,C.itemSize,t.FLOAT,!1,8,32),t.vertexAttribPointer(T.nextLow,C.itemSize,t.FLOAT,!1,8,64),t.bindBuffer(t.ARRAY_BUFFER,E._lineOrdersBuffer),t.vertexAttribPointer(T.order,E._lineOrdersBuffer.itemSize,t.FLOAT,!1,4,0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,E._lineIndexesBuffer),t.bindBuffer(t.ARRAY_BUFFER,E._lineStrokesBuffer),t.vertexAttribPointer(T.thickness,E._lineStrokesBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,E._lineStrokeColorsBuffer),t.vertexAttribPointer(T.color,E._lineStrokeColorsBuffer.itemSize,t.FLOAT,!1,0,0),t.uniform1f(A.thicknessOutline,2),t.uniform1f(A.alpha,.54),t.drawElements(t.TRIANGLE_STRIP,E._lineIndexesBuffer.numItems,t.UNSIGNED_INT,0),t.uniform1f(A.thicknessOutline,1),t.uniform1f(A.alpha,1),t.drawElements(t.TRIANGLE_STRIP,E._lineIndexesBuffer.numItems,t.UNSIGNED_INT,0),t.bindBuffer(t.ARRAY_BUFFER,E._lineThicknessBuffer),t.vertexAttribPointer(T.thickness,E._lineThicknessBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,E._lineColorsBuffer),t.vertexAttribPointer(T.color,E._lineColorsBuffer.itemSize,t.FLOAT,!1,0,0),t.uniform1f(A.thicknessOutline,2),t.uniform1f(A.alpha,.54),t.drawElements(t.TRIANGLE_STRIP,E._lineIndexesBuffer.numItems,t.UNSIGNED_INT,0),t.uniform1f(A.thicknessOutline,1),t.uniform1f(A.alpha,1),t.drawElements(t.TRIANGLE_STRIP,E._lineIndexesBuffer.numItems,t.UNSIGNED_INT,0),v&&(u.bindOutputTexture(y),t.uniform1f(A.thicknessOutline,8),t.bindBuffer(t.ARRAY_BUFFER,E._linePickingColorsBuffer),t.vertexAttribPointer(T.color,E._linePickingColorsBuffer.itemSize,t.FLOAT,!1,0,0),t.drawElements(t.TRIANGLE_STRIP,E._lineIndexesBuffer.numItems,t.UNSIGNED_INT,0))}else m.isLoading=!1;g=window.performance.now()-_}t.enable(t.DEPTH_TEST),t.enable(t.CULL_FACE),u.deactivate()}}add(e){this._queue.push(e)}remove(e){}get queueSize(){return this._queue.length}}class Wl{constructor(e=1,t=1){this._a=e,this._b=t,this._flattening=(e-t)/e,this._f=1/this._flattening,this._a2=e*e,this._b2=t*t;const i=Math.sqrt(this._a2-this._b2);this._e=i/e,this._e2=this._e*this._e,this._e22=this._e2*this._e2,this._k=i/t,this._k2=this._k*this._k,this._radii=new p(e,e,t),this._radii2=new p(this._a2,this._a2,this._b2),this._invRadii=new p(1/e,1/e,1/t),this._invRadii2=new p(1/this._a2,1/this._a2,1/this._b2)}rhumbDistanceTo(e,t){const i=e.lat*O,r=t.lat*O,s=r-i;let n=Math.abs(t.lon-e.lon)*O;Math.abs(n)>Math.PI&&(n=n>0?-(2*Math.PI-n):2*Math.PI+n);const a=Math.log(Math.tan(r/2+Math.PI/4)/Math.tan(i/2+Math.PI/4)),o=Math.abs(a)>1e-11?s/a:Math.cos(i);return Math.sqrt(s*s+o*o*n*n)*this._a}getIntermediatePointOnGreatCircle(e,t,i){if(i==0)return e.clone();if(i==1)return t.clone();const r=this.inverse(e,t),s=r.distance,n=r.initialAzimuth;return isNaN(n)?e:this.getGreatCircleDestination(e,n,s*i)}static getBearing(e,t){let i=e.lat*O,r=e.lon*O,s=t.lat*O,n=t.lon*O,a=Math.sin(n-r)*Math.cos(s),o=Math.cos(i)*Math.sin(s)-Math.sin(i)*Math.cos(s)*Math.cos(n-r);return Math.atan2(a,o)*we}getFlattening(){return this._flattening}getEquatorialSize(){return this._a}get equatorialSize(){return this._a}get equatorialSizeSqr(){return this._a2}getPolarSize(){return this._b}get polarSize(){return this._b}get polarSizeSqr(){return this._b2}lonLatToCartesian(e){return this.geodeticToCartesian(e.lon,e.lat,e.height)}lonLatToCartesianRes(e,t){return this.geodeticToCartesian(e.lon,e.lat,e.height,t)}geodeticToCartesian(e,t,i=0,r=new p){let s=O*t,n=O*e,a=Math.sin(s),o=this._a/Math.sqrt(1-this._e2*a*a),l=(o+i)*Math.cos(s);return r.x=l*Math.cos(n),r.y=l*Math.sin(n),r.z=(o*(1-this._e2)+i)*a,r}projToSurface(e){let t=e.x||0,i=e.y||0,r=e.z||0,s=Math.sqrt(t*t+i*i+r*r);if(s===0)return this.lonLatToCartesian(new B);let n=this._invRadii2.x,a=this._invRadii2.y,o=this._invRadii2.z,l=t*t*n,h=i*i*a,d=r*r*o,f=l+h+d,u=Math.sqrt(1/f),g=e.scaleTo(u);if(f<On)return Number.isFinite(u)?g:new p;let _=(1-u)*s/g.mulA(this._invRadii2).length(),m=0,v=0,b=0;do{m=1/(1+_*n),v=1/(1+_*a),b=1/(1+_*o);let y=m*m,w=v*v,x=b*b,T=l*y+h*w+d*x-1;if(Math.abs(T)<Rr)break;let A=y*m,E=w*v,C=x*b;_+=.5*T/(l*A*n+h*E*a+d*C*o)}while(!0);return new p(t*m,i*v,r*b)}cartesianToLonLat(e){return this.cartesianToLonLatRes(e)}cartesianToLonLatRes(e,t=new B){let i=this.projToSurface(e),r=this.getSurfaceNormal3v(i),s=e.sub(i);return t.lon=Math.atan2(r.y,r.x)*we,t.lat=Math.asin(r.z)*we,t.height=Math.sign(s.dot(e))*s.length(),t}getSurfaceNormal3v(e){let t=this._invRadii2,i=e.x*t.x,r=e.y*t.y,s=e.z*t.z,n=1/Math.sqrt(i*i+r*r+s*s);return new p(i*n,r*n,s*n)}getGreatCircleDistance(e,t){return this.inverse(e,t).distance}getGreatCircleDestination(e,t,i){return this.direct(e,t,i).destination}inverse(e,t){let i=this._a,r=this._b,s=this._flattening;const n=e.lat*O,a=e.lon*O,o=t.lat*O,h=t.lon*O-a,d=(1-s)*Math.tan(n),f=1/Math.sqrt(1+d*d),u=d*f,g=(1-s)*Math.tan(o),_=1/Math.sqrt(1+g*g),m=g*_,v=Math.abs(h)>Math.PI/2||Math.abs(o-n)>Math.PI/2;let b=h,y=null,w=null,x=v?Math.PI:0,T=0,A=v?-1:1,E=null,C=1,P=1,I=null,k=0;do{if(y=Math.sin(b),w=Math.cos(b),E=(_*y)**2+(f*m-u*_*w)**2,Math.abs(E)<1e-24)break;T=Math.sqrt(E),A=u*m+f*_*w,x=Math.atan2(T,A);const st=f*_*y/T;P=1-st*st,C=P!=0?A-2*u*m/P:0;const W=s/16*P*(4+s*(4-3*P));I=b,b=h+(1-W)*s*st*(x+W*T*(C+W*A*(-1+2*C*C)))}while(Math.abs(b-I)>Rr&&++k<1e3);const z=P*(i*i-r*r)/(r*r),L=1+z/16384*(4096+z*(-768+z*(320-175*z))),S=z/1024*(256+z*(-128+z*(74-47*z))),F=S*T*(C+S/4*(A*(-1+2*C*C)-S/6*C*(-3+4*T*T)*(-3+4*C*C))),R=r*L*(x-F),M=Math.abs(E)<Number.EPSILON?0:Math.atan2(_*y,f*m-u*_*w),j=Math.abs(E)<Number.EPSILON?Math.PI:Math.atan2(f*y,-u*_+f*m*w);return{distance:R,initialAzimuth:Math.abs(R)<Number.EPSILON?NaN:Ir(M)*we,finalAzimuth:Math.abs(R)<Number.EPSILON?NaN:Ir(j)*we}}direct(e,t,i){let r=e.lon,s=e.lat,n=this._a,a=this._b,o=this._flattening,l=i,h=t*O,d=Math.sin(h),f=Math.cos(h),u=(1-o)*Math.tan(s*O),g=1/Math.sqrt(1+u*u),_=u*g,m=Math.atan2(u,f),v=g*d,b=1-v*v,y=b*(n*n-a*a)/(a*a),w=1+y/16384*(4096+y*(-768+y*(320-175*y))),x=y/1024*(256+y*(-128+y*(74-47*y))),T=l/(a*w),A=2*Math.PI,E=0,C=0,P=0,I=0;for(;Math.abs(T-A)>1e-12;)E=Math.cos(2*m+T),C=Math.sin(T),P=Math.cos(T),I=x*C*(E+x/4*(P*(-1+2*E*E)-x/6*E*(-3+4*C*C)*(-3+4*E*E))),A=T,T=l/(a*w)+I;let k=_*C-g*P*f,z=Math.atan2(_*P+g*C*f,(1-o)*Math.sqrt(v*v+k*k)),L=Math.atan2(C*d,g*P-_*C*f),S=o/16*b*(4+o*(4-3*b)),F=L-(1-S)*o*v*(T+S*C*(E+S*P*(-1+2*E*E))),R=Math.atan2(v,-k);return{destination:new B(r+F*we,z*we),finalAzimuth:R*we}}hitRay(e,t){let i=this._invRadii.mul(e),r=this._invRadii.mul(t),s=i.dot(i),n=i.dot(r),a,o,l,h,d;if(s>1){if(n>=0)return;var f=n*n;if(a=s-1,o=r.dot(r),l=o*a,Math.abs(f-l)>Vn&&f<l)return;if(f>l){h=n*n-l,d=-n+Math.sqrt(h);var u=d/o,g=a/d;return u<g?e.add(t.scaleTo(u)):e.add(t.scaleTo(g))}else{var _=Math.sqrt(a/o);return e.add(t.scaleTo(_))}}else{if(s<1)return a=s-1,o=r.dot(r),l=o*a,h=n*n-l,d=-n+Math.sqrt(h),e.add(t.scaleTo(d/o));if(n<0)return o=r.dot(r),e.add(t.scaleTo(-n/o))}}getNorthFrameRotation(e){let t=this.getSurfaceNormal3v(e),i=p.proj_b_to_plane(p.NORTH,t);return D.getLookRotation(i,t)}getBearingDestination(e,t=0,i=0){t=t*O;var r=(e.lon+540)%360-180,s=e.lat*O,n=r*O,a=i/this._a,o=Math.asin(Math.sin(s)*Math.cos(a)+Math.cos(s)*Math.sin(a)*Math.cos(t));return new B((n+Math.atan2(Math.sin(t)*Math.sin(a)*Math.cos(s),Math.cos(a)-Math.sin(s)*Math.sin(o)))*we,o*we)}static getIntermediatePointOnGreatCircle(e,t,i){var r=e.lat*O,s=e.lon*O,n=t.lat*O,a=t.lon*O,o=Math.sin(r),l=Math.cos(r),h=Math.sin(s),d=Math.cos(s),f=Math.sin(n),u=Math.cos(n),g=Math.sin(a),_=Math.cos(a),m=n-r,v=a-s,b=Math.sin(m/2)*Math.sin(m/2)+Math.cos(r)*Math.cos(n)*Math.sin(v/2)*Math.sin(v/2),y=2*Math.atan2(Math.sqrt(b),Math.sqrt(1-b)),w=Math.sin((1-i)*y)/Math.sin(y),x=Math.sin(i*y)/Math.sin(y),T=w*l*d+x*u*_,A=w*l*h+x*u*g,E=w*o+x*f,C=Math.atan2(E,Math.sqrt(T*T+A*A)),P=Math.atan2(A,T);return new B((P*we+540)%360-180,C*we)}static getRhumbBearing(e,t){var i=(t.lon-e.lon)*O,r=Math.log(Math.tan(t.lat*O/2+Math.PI/4)/Math.tan(e.lat*O/2+Math.PI/4));return Math.abs(i)>Math.PI&&(i>0?i=(2*Math.PI-i)*-1:i=2*Math.PI+i),(Math.atan2(i,r)*we+360)%360}}const Xl=new Wl(6378137,6356752314245179e-9),wn=250,Zl=312,$l=190;let it=new Uint8Array(4),Tn=new Uint8Array(4);const Kl=11,Ql=200,Jl=.81;class eh extends Oa{constructor(e={}){super(e.name),this.ellipsoid=e.ellipsoid||Xl,this.lightEnabled=!0,this._planetRadius2=this.ellipsoid.getPolarSize()*this.ellipsoid.getPolarSize(),this._layers=[],this._updateLayer=!1,this.visibleTileLayers=[],this.visibleVectorLayers=[],this._visibleTileLayerSlices=[],this._frustumEntityCollections=[],this.baseLayer=null,this.terrain=null,this.camera=new Ul(this,{frustums:e.frustums,eye:new p(25e6,0,0),look:p.ZERO,up:p.NORTH,minAltitude:e.minAltitude,maxAltitude:e.maxAltitude}),this.maxEqualZoomAltitude=e.maxEqualZoomAltitude||15e6,this.minEqualZoomAltitude=e.minEqualZoomAltitude||1e4,this.minEqualZoomCameraSlope=e.minEqualZoomCameraSlope||.8,this.mousePositionOnEarth=new p,this.emptyTexture=null,this.transparentTexture=null,this.defaultTexture=null,this.minCurrZoom=fe,this.maxCurrZoom=pe,this._viewExtent=new U(new B(180,180),new B(-180,-180)),this._skipPreRender=!1,this._initialViewExtent=null,this._createdNodesCount=0,this._renderedNodes=[],this._renderedNodesInFrustum=[],this._visibleNodes={},this._visibleNodesNorth={},this._visibleNodesSouth={},this.layerLock=new dr,this.terrainLock=new dr,this._heightFactor=1,this._indexesCache=[],this._indexesCacheToRemove=[],this._indexesCacheToRemoveCounter=0,this._textureCoordsBufferCache=[],this.quadTreeStrategy=e.quadTreeStrategyPrototype?new e.quadTreeStrategyPrototype(this):new Fl(this),this._nightTexture=null,this._specularTexture=null;let t=Se(e.ambient,new p(.2,.2,.3)),i=Se(e.diffuse,new p(1,1,1)),r=Se(e.specular,new p(63e-5,55e-5,32e-5)),s=e.shininess||18;this._ambient=new Float32Array([t.x,t.y,t.z]),this._diffuse=new Float32Array([i.x,i.y,i.z]),this._specular=new Float32Array([r.x,r.y,r.z,s]),this._maxGridSize=Math.log2(e.maxGridSize||256),this.SLICE_SIZE=4,this.SLICE_SIZE_4=this.SLICE_SIZE*4,this.SLICE_SIZE_3=this.SLICE_SIZE*3,this._lodSize=wn,this._curLodSize=wn,this._minLodSize=Zl,this._maxLodSize=$l,this._pickingColorArr=new Float32Array(this.SLICE_SIZE_4),this._samplerArr=new Int32Array(this.SLICE_SIZE),this._pickingMaskArr=new Int32Array(this.SLICE_SIZE),this._geoImageCreator=new kl(this),this._vectorTileCreator=new ql(this),this._normalMapCreator=new Nl(this),this._terrainWorker=new Gl(3),this._plainSegmentWorker=new Hl(3),this._tileLoader=new xn(e.maxLoadingRequests||12),this._memKey=new tt,this.events=We(th),this._distBeforeMemClear=0,this._prevCamEye=new p,this._initialized=!1,this.always=[],this._renderCompleted=!1,this._renderCompletedActivated=!1,this._terrainCompleted=!1,this._terrainCompletedActivated=!1,this._collectRenderNodesIsActive=!0,this.nightTextureCoefficient=2,this._renderScreenNodesPASS=this._renderScreenNodesPASSNoAtmos,this._atmosphereEnabled=e.atmosphereEnabled||!1,this._atmosphereMaxMinOpacity=new Float32Array([1,.41]),this.solidTextureOne=null,this.solidTextureTwo=null,this._nightTextureSrc=e.nightTextureSrc||null,this._specularTextureSrc=e.specularTextureSrc||null}get terrainReady(){return this._terrainCompleted&&this._terrainCompletedActivated}get maxGridSize(){return this._maxGridSize}getNorthFrameRotation(e){return this.ellipsoid.getNorthFrameRotation(e)}set atmosphereMaxOpacity(e){this._atmosphereMaxMinOpacity[0]=e}get atmosphereMaxOpacity(){return this._atmosphereMaxMinOpacity[0]}set atmosphereMinOpacity(e){this._atmosphereMaxMinOpacity[1]=e}get atmosphereMinOpacity(){return this._atmosphereMaxMinOpacity[1]}set atmosphereEnabled(e){e!=this._atmosphereEnabled&&(this._atmosphereEnabled=e,this._initializeAtmosphere())}get atmosphereEnabled(){return this._atmosphereEnabled}set diffuse(e){let t=Se(e);this._diffuse=new Float32Array(t.toArray())}set ambient(e){let t=Se(e);this._ambient=new Float32Array(t.toArray())}set specular(e){let t=Se(e);this._specular=new Float32Array([t.x,t.y,t.y,this._specular[3]])}set shininess(e){this._specular[3]=e}get normalMapCreator(){return this._normalMapCreator}get layers(){return[...this._layers]}getLayers(){return this.layers}get sunPos(){return this.renderer.controls.sun.sunlight.getPosition()}addControl(e){e.planet=this,e.addTo(this.renderer)}get lodSize(){return this._lodSize}setLodSize(e,t,i){this._maxLodSize=i||this._maxLodSize,this._minLodSize=t||this._minLodSize,this._curLodSize=e,this._renderCompletedActivated=!1,this._terrainCompletedActivated=!1}addControls(e){for(let t=0;t<e.length;t++)this.addControl(e[t])}getLayerByName(e){for(let t=0,i=this._layers.length;t<i;t++)if(e===this._layers[t].name)return this._layers[t]}addLayer(e){e.addTo(this)}_onLayerVisibilityChanged(e){this.events.dispatch(this.events.layervisibilitychange,e)}addLayers(e){for(let t=0,i=e.length;t<i;t++)this.addLayer(e[t])}removeLayer(e){e.remove()}_clearLayerMaterial(e){this.quadTreeStrategy.clearLayerMaterial(e)}setBaseLayer(e){this.baseLayer?this.baseLayer.isEqual(e)||(this.baseLayer.setVisibility(!1),this.baseLayer=e,e.setVisibility(!0),this.events.dispatch(this.events.baselayerchange,e)):(this.baseLayer=e,this.baseLayer.setVisibility(!0),this.events.dispatch(this.events.baselayerchange,e))}setHeightFactor(e){this._renderCompletedActivated=!1,this._terrainCompletedActivated=!1,this._heightFactor!==e&&(this._heightFactor=e,this.quadTreeStrategy.destroyBranches(),this._clearRenderedNodeList(),this._clearRenderNodesInFrustum())}getHeightFactor(){return this._heightFactor}setTerrain(e){this._renderCompletedActivated=!1,this._terrainCompletedActivated=!1,this._initialized&&this.memClear(),this.terrain&&(this.terrain.abortLoading(),this.terrain.clearCache(),this.terrain._planet=null),this.terrain=e,this.terrain._planet=this,this.quadTreeStrategy.destroyBranches(),e._geoid.model?(this._plainSegmentWorker.setGeoid(e.getGeoid()),e._isReady=!0):vn.loadModel(e.geoid.src).then(t=>{e.geoid.setModel(t),this._plainSegmentWorker.setGeoid(e.getGeoid()),e._isReady=!0}).catch(t=>{console.warn(t)})}_initializeAtmosphere(){let e=this.renderer.handler;e.removeProgram("drawnode_screen_wl"),this._atmosphereEnabled?(this._renderScreenNodesPASS=this._renderScreenNodesPASSAtmos,e.isWebGl2()?e.addProgram(Al(),!0):e.addProgram(cn(),!0),this.renderer.controls.Atmosphere?this.renderer.controls.Atmosphere.activate():this.addControl(new Ll),this.renderer.controls.SimpleSkyBackground&&this.renderer.controls.SimpleSkyBackground.deactivate()):(this._renderScreenNodesPASS=this._renderScreenNodesPASSNoAtmos,this.renderer.controls.Atmosphere&&this.renderer.controls.Atmosphere.deactivate(),this.renderer.controls.SimpleSkyBackground?this.renderer.controls.SimpleSkyBackground.activate():this.addControl(new rl),e.isWebGl2()?e.addProgram(Tl(),!0):e.addProgram(cn(),!0))}_initializeShaders(){let e=this.renderer.handler;e.addProgram(wl(),!0),e.addProgram(El(),!0),e.addProgram(Pl(),!0),e.addProgram(Cl(),!0),this.renderer.addPickingCallback(this,this._renderColorPickingFramebufferPASS),this.renderer.addDepthCallback(this,this._renderDepthFramebufferPASS),this.renderer.addDistanceCallback(this,this._renderDistanceFramebufferPASS)}_onLayerLoadend(e){this.events.dispatch(this.events.layerloadend,e)}init(){this._tileLoader.events.on("layerloadend",this._onLayerLoadend,this),Bi().setMaxGridSize(this._maxGridSize);const e=this._maxGridSize;let t=0;for(let r=0;r<=e;r++){!this._indexesCache[r]&&(this._indexesCache[r]=new Array(e));for(let s=0;s<=e;s++){!this._indexesCache[r][s]&&(this._indexesCache[r][s]=new Array(e));for(let n=0;n<=e;n++){!this._indexesCache[r][s][n]&&(this._indexesCache[r][s][n]=new Array(e));for(let a=0;a<=e;a++){!this._indexesCache[r][s][n][a]&&(this._indexesCache[r][s][n][a]=new Array(e));for(let o=0;o<=e;o++){let l={buffer:null};if(r>=1&&r===s&&r===n&&r===a&&r===o){let h=Bi().createSegmentIndexes(r,[s,n,a,o]);l.buffer=this.renderer.handler.createElementArrayBuffer(h,1)}else this._indexesCacheToRemove[t++]=l;this._indexesCache[r][s][n][a][o]=l}}}}}this.renderer.events.on("resize",()=>{this._renderCompletedActivated=!1,this._terrainCompletedActivated=!1}),this._textureCoordsBufferCache=[];let i=Bi().initTextureCoordsTable(e+1);for(let r=0;r<=e;r++)this._textureCoordsBufferCache[r]=this.renderer.handler.createArrayBuffer(i[r],2,((1<<r)+1)*((1<<r)+1));this.renderer.handler.createDefaultTexture(null,r=>{this.solidTextureOne=r,this.solidTextureTwo=r}),this.transparentTexture=this.renderer.handler.transparentTexture,this._renderedNodesInFrustum=new Array(this.camera.frustums.length);for(let r=0,s=this._renderedNodesInFrustum.length;r<s;r++)this._renderedNodesInFrustum[r]=[];if(this.quadTreeStrategy.init(),this.drawMode=this.renderer.handler.gl.TRIANGLE_STRIP,this._initializeShaders(),this._initializeAtmosphere(),this._updateVisibleLayers(),this.renderer.addPickingCallback(this,this._frustumEntityCollectionPickingCallback),this._nightTextureSrc){let r=new Image;r.crossOrigin="Anonymous",r.onload=()=>{this._nightTexture=this.renderer.handler.createTextureDefault(r),this._nightTexture.default=!0},r.src=this._nightTextureSrc}if(this._specularTextureSrc){let r=new Image;r.crossOrigin="Anonymous",r.onload=()=>{this._specularTexture=this.renderer.handler.createTextureDefault(r),this._specularTexture.default=!0},r.src=this._specularTextureSrc}this._geoImageCreator.init(),this._vectorTileCreator.init(),this._normalMapCreator.init(),this.renderer.events.on("draw",this._globalPreDraw,this,-100),this._preRender(),this.renderer.events.on("postdraw",()=>{this._checkRendercompleted()}),this.initLayers(),this._initialized=!0,this._initialViewExtent&&this.viewExtent(this._initialViewExtent),this.renderer.activeCamera=this.camera,this.camera.bindRenderer(this.renderer),this.camera.update()}initLayers(){let e=[...this._layers];for(let t=0;t<e.length;t++)this.removeLayer(e[t]),this.addLayer(e[t])}_clearIndexesCache(){this._indexesCacheToRemoveCounter=0;let e=this._indexesCacheToRemove,t=this.renderer.handler.gl;for(let i=0,r=e.length;i<r;i++){let s=e[i];t.deleteBuffer(s.buffer),s.buffer=null}}_preRender(){this.quadTreeStrategy.preRender(),this._preLoad()}_preLoad(){this._clearRenderedNodeList(),this._skipPreRender=!1,this.quadTreeStrategy.preLoad()}createDefaultTextures(e,t){this.renderer.handler.gl.deleteTexture(this.solidTextureOne),this.renderer.handler.gl.deleteTexture(this.solidTextureTwo),this.renderer.handler.createDefaultTexture(e,i=>{this.solidTextureOne=i}),this.renderer.handler.createDefaultTexture(t,i=>{this.solidTextureTwo=i})}_getLayerAttributionHTML(e){return`<div class="og-attribution__layer">${e.getAttribution()}</div>`}updateAttributionsList(){let e="";for(let t=0,i=this._layers.length;t<i;t++){let r=this._layers[t];r.getVisibility()&&r.getAttribution().length&&(e+=this._getLayerAttributionHTML(r))}this._applyAttribution(e)}updateVisibleLayers(){this._updateLayer=!0}_updateVisibleLayers(){this.visibleTileLayers=[],this.visibleTileLayers.length=0,this.visibleVectorLayers=[],this.visibleVectorLayers.length=0;let e="";for(let t=0,i=this._layers.length;t<i;t++){let r=this._layers[t];r.getVisibility()?(r.isBaseLayer()&&(this.createDefaultTextures(r._defaultTextures[0],r._defaultTextures[1]),this.baseLayer=r),r.hasImageryTiles()&&this.visibleTileLayers.push(r),r.isVector&&this.visibleVectorLayers.push(r),r.getAttribution().length&&(e+=this._getLayerAttributionHTML(r))):r._fading&&r._fadingOpacity>0&&(r.hasImageryTiles()&&this.visibleTileLayers.push(r),r.isVector&&this.visibleVectorLayers.push(r))}this._applyAttribution(e),this._sortLayers()}_applyAttribution(e){this.renderer&&this.renderer.div&&(e.length?this.renderer.div.attributions.innerHTML!==e&&(this.renderer.div.attributions.innerHTML=e):this.renderer.div.attributions.innerHTML="")}_sortLayers(){if(this.visibleVectorLayers.sort((e,t)=>e.getZIndex()-t.getZIndex()||e.getHeight()-t.getHeight()),this._visibleTileLayerSlices=[],this._visibleTileLayerSlices.length=0,this.visibleTileLayers.length){this.visibleTileLayers.sort((i,r)=>i.getHeight()-r.getHeight()||i.getZIndex()-r.getZIndex());let e=-1,t=this.visibleTileLayers[0].getHeight();for(let i=0,r=this.visibleTileLayers.length;i<r;i++)(i%this.SLICE_SIZE===0||this.visibleTileLayers[i].getHeight()!==t)&&(e++,this._visibleTileLayerSlices[e]=[],t=this.visibleTileLayers[i].getHeight()),this._visibleTileLayerSlices[e].push(this.visibleTileLayers[i])}}_clearRenderedNodeList(){this._renderedNodes.length=0,this._renderedNodes=[]}_clearRenderNodesInFrustum(){for(let e=0,t=this._renderedNodesInFrustum.length;e<t;e++)this._renderedNodesInFrustum[e].length=0,this._renderedNodesInFrustum[e]=[]}_collectRenderNodes(){let e=this.camera;if(this._lodSize=Gn(e.slope<0?0:e.slope,this._curLodSize,this._minLodSize),e._insideSegment=null,this._clearRenderedNodeList(),this._clearRenderNodesInFrustum(),this._viewExtent.southWest.set(180,180),this._viewExtent.northEast.set(-180,-180),this._visibleNodes={},this._visibleNodesNorth={},this._visibleNodesSouth={},this.minCurrZoom=fe,this.maxCurrZoom=pe,this.quadTreeStrategy.collectRenderNodes(),e.slope>this.minEqualZoomCameraSlope&&e._lonLat.height<this.maxEqualZoomAltitude&&e._lonLat.height>this.minEqualZoomAltitude){this.minCurrZoom=this.maxCurrZoom;let t=this._renderedNodes,i=this._renderedNodesInFrustum,r=[];this._clearRenderNodesInFrustum(),this._renderedNodes=[];for(let s=0,n=t.length;s<n;s++){let a=t[s],o=a.segment.centerNormal.dot(e._b);if(a.segment.tileZoom===this.maxCurrZoom||o<Jl){this._renderedNodes.push(a);let l=0,h=a.inFrustum;for(;h;)h&1&&i[l].push(a),l++,h>>=1}else r.push(a)}for(let s=0,n=r.length;s<n;s++)r[s].renderTree(e,this.maxCurrZoom,null)}}_globalPreDraw(){let e=this.camera;this.renderer.__useDistanceFramebuffer__=!this.terrain.isEmpty,this._distBeforeMemClear+=this._prevCamEye.distance(e.eye),this._prevCamEye.copy(e.eye),e.checkFly(),this._createdNodesCount>Ql&&this._distBeforeMemClear>1e3&&(this.terrain.clearCache(),this.memClear()),this._indexesCacheToRemoveCounter>600&&this._clearIndexesCache()}preFrame(){this._updateLayer&&(this._updateLayer=!1,this._updateVisibleLayers()),this.camera.isFirstPass&&(this.camera.update(),this._skipPreRender&&this._collectRenderNodesIsActive&&this._collectRenderNodes(),this._skipPreRender=!0,this.transformLights(),this._normalMapCreator.frame(),this._geoImageCreator.frame(),this._vectorTileCreator.frame(),this.camera.checkTerrainCollision(),this.camera.update(),this.events.dispatch(this.events.draw,this),this._collectVectorLayerCollections()),this.drawEntityCollections(this._frustumEntityCollections)}frame(){this._renderScreenNodesPASS()}_checkRendercompleted(){this._renderCompleted?this._renderCompletedActivated||(this._renderCompletedActivated=!0,this.events.dispatch(this.events.rendercompleted,!0)):this._renderCompletedActivated=!1,this._renderCompleted=!0,this._terrainCompleted?this._terrainCompletedActivated||(this._terrainCompletedActivated=!0,this.events.dispatch(this.events.terraincompleted,!0)):this._terrainCompletedActivated=!1,this._terrainCompleted=!0}lockQuadTree(){this._collectRenderNodesIsActive=!1,this.camera.setTerrainCollisionActivity(!1)}unlockQuadTree(){this._collectRenderNodesIsActive=!0,this.camera.setTerrainCollisionActivity(!0)}_renderScreenNodesPASSNoAtmos(){let e,t,i=this.renderer,r=i.handler,s=r.gl,n=i.activeCamera,a=n.isFirstPass,o=n.currentFrustumIndex;s.enable(s.CULL_FACE),i.enableBlendOneSrcAlpha(),this.lightEnabled?(r.programs.drawnode_screen_wl.activate(),e=r.programs.drawnode_screen_wl._program,t=e.uniforms,s.uniform3fv(t.lightsPositions,this._lightsPositions),s.uniformMatrix4fv(t.viewMatrix,!1,n.getViewMatrix()),s.uniformMatrix4fv(t.projectionMatrix,!1,n.getProjectionMatrix()),this.baseLayer?(s.uniform3fv(t.diffuse,this.baseLayer._diffuse||this._diffuse),s.uniform3fv(t.ambient,this.baseLayer._ambient||this._ambient),s.uniform4fv(t.specular,this.baseLayer._specular||this._specular),s.uniform1f(t.nightTextureCoefficient,this.baseLayer.nightTextureCoefficient||this.nightTextureCoefficient)):(s.uniform3fv(t.diffuse,this._diffuse),s.uniform3fv(t.ambient,this._ambient),s.uniform4fv(t.specular,this._specular),s.uniform1f(t.nightTextureCoefficient,this.nightTextureCoefficient)),s.activeTexture(s.TEXTURE0+this.SLICE_SIZE),s.bindTexture(s.TEXTURE_2D,this._nightTexture||this.transparentTexture),s.uniform1i(t.nightTexture,this.SLICE_SIZE),s.activeTexture(s.TEXTURE0+this.SLICE_SIZE+1),s.bindTexture(s.TEXTURE_2D,this._specularTexture||this.transparentTexture),s.uniform1i(t.specularTexture,this.SLICE_SIZE+1),s.uniform1f(t.camHeight,n.getHeight())):(r.programs.drawnode_screen_nl.activate(),e=r.programs.drawnode_screen_nl._program,t=e.uniforms,s.uniformMatrix4fv(t.viewMatrix,!1,n.getViewMatrix()),s.uniformMatrix4fv(t.projectionMatrix,!1,n.getProjectionMatrix())),s.uniform3fv(t.eyePositionHigh,n.eyeHigh),s.uniform3fv(t.eyePositionLow,n.eyeLow);let l=this._renderedNodesInFrustum[o],h=this._visibleTileLayerSlices;if(h.length){let u=h[0];for(let g=u.length-1;g>=0;--g){let _=u[g];_._fading&&a&&_._refreshFadingOpacity()&&u.splice(g,1)}}let d=this.terrain.equalizeVertices,f=l.length;for(;f--;){let u=l[f].segment;d&&u.equalize(),u.readyToEngage&&u.engage(),u.screenRendering(e,h[0],0)}s.enable(s.POLYGON_OFFSET_FILL);for(let u=1,g=h.length;u<g;u++){let _=h[u];for(f=_.length-1;f>=0;--f){let m=_[f];m._fading&&a&&m._refreshFadingOpacity()&&_.splice(f,1)}for(s.polygonOffset(0,-u),f=l.length;f--;)l[f].segment.screenRendering(e,h[u],u,this.transparentTexture,!0)}s.disable(s.POLYGON_OFFSET_FILL)}_renderScreenNodesPASSAtmos(){let e,t,i=this.renderer,r=i.handler,s=r.gl,n=i.activeCamera,a=n.isFirstPass,o=n.currentFrustumIndex;s.enable(s.CULL_FACE),i.enableBlendOneSrcAlpha(),this.lightEnabled?(r.programs.drawnode_screen_wl.activate(),e=r.programs.drawnode_screen_wl._program,t=e.uniforms,s.uniform3fv(t.lightsPositions,this._lightsPositions),s.uniformMatrix4fv(t.viewMatrix,!1,n.getViewMatrix()),s.uniformMatrix4fv(t.projectionMatrix,!1,n.getProjectionMatrix()),this.baseLayer?(s.uniform3fv(t.diffuse,this.baseLayer._diffuse||this._diffuse),s.uniform3fv(t.ambient,this.baseLayer._ambient||this._ambient),s.uniform4fv(t.specular,this.baseLayer._specular||this._specular),s.uniform1f(t.nightTextureCoefficient,this.baseLayer.nightTextureCoefficient||this.nightTextureCoefficient)):(s.uniform3fv(t.diffuse,this._diffuse),s.uniform3fv(t.ambient,this._ambient),s.uniform4fv(t.specular,this._specular),s.uniform1f(t.nightTextureCoefficient,this.nightTextureCoefficient)),s.uniform2fv(t.maxMinOpacity,this._atmosphereMaxMinOpacity),s.activeTexture(s.TEXTURE0+this.SLICE_SIZE),s.bindTexture(s.TEXTURE_2D,this._nightTexture||this.transparentTexture),s.uniform1i(t.nightTexture,this.SLICE_SIZE),s.activeTexture(s.TEXTURE0+this.SLICE_SIZE+1),s.bindTexture(s.TEXTURE_2D,this._specularTexture||this.transparentTexture),s.uniform1i(t.specularTexture,this.SLICE_SIZE+1),s.activeTexture(s.TEXTURE0+this.SLICE_SIZE+4),s.bindTexture(s.TEXTURE_2D,i.controls.Atmosphere._transmittanceBuffer.textures[0]),s.uniform1i(t.transmittanceTexture,this.SLICE_SIZE+4),s.activeTexture(s.TEXTURE0+this.SLICE_SIZE+5),s.bindTexture(s.TEXTURE_2D,i.controls.Atmosphere._scatteringBuffer.textures[0]),s.uniform1i(t.scatteringTexture,this.SLICE_SIZE+5),s.uniform1f(t.camHeight,n.getHeight())):(r.programs.drawnode_screen_nl.activate(),e=r.programs.drawnode_screen_nl._program,t=e.uniforms,s.uniformMatrix4fv(t.viewMatrix,!1,n.getViewMatrix()),s.uniformMatrix4fv(t.projectionMatrix,!1,n.getProjectionMatrix())),s.uniform3fv(t.eyePositionHigh,n.eyeHigh),s.uniform3fv(t.eyePositionLow,n.eyeLow);let l=this._renderedNodesInFrustum[o],h=this._visibleTileLayerSlices;if(h.length){let u=h[0];for(let g=u.length-1;g>=0;--g){let _=u[g];_._fading&&a&&_._refreshFadingOpacity()&&u.splice(g,1)}}let d=this.terrain.equalizeVertices,f=l.length;for(;f--;){let u=l[f].segment;d&&u.equalize(),u.readyToEngage&&u.engage(),u.screenRendering(e,h[0],0)}s.enable(s.POLYGON_OFFSET_FILL);for(let u=1,g=h.length;u<g;u++){let _=h[u];for(f=_.length-1;f>=0;--f){let m=_[f];m._fading&&a&&m._refreshFadingOpacity()&&_.splice(f,1)}for(s.polygonOffset(0,-u),f=l.length;f--;)l[f].segment.screenRendering(e,h[u],u,this.transparentTexture,!0)}s.disable(s.POLYGON_OFFSET_FILL)}_renderDistanceFramebufferPASS(){if(!this.terrain.isEmpty){let e,t=this.renderer,i=t.handler,r=i.gl,s=t.activeCamera;i.programs.drawnode_heightPicking.activate(),e=i.programs.drawnode_heightPicking._program;let n=e.uniforms;r.uniformMatrix4fv(n.viewMatrix,!1,s.getViewMatrix()),r.uniformMatrix4fv(n.projectionMatrix,!1,s.getProjectionMatrix()),r.uniform3fv(n.eyePositionHigh,s.eyeHigh),r.uniform3fv(n.eyePositionLow,s.eyeLow);let a=this._renderedNodesInFrustum[s.currentFrustumIndex],o=this._visibleTileLayerSlices,l=a.length;for(;l--;)a[l].segment.heightPickingRendering(e,o[0])}}_renderColorPickingFramebufferPASS(){let e,t=this.renderer,i=t.handler,r=i.gl;i.programs.drawnode_colorPicking.activate(),e=i.programs.drawnode_colorPicking._program;let s=e.uniforms,n=t.activeCamera;r.enable(r.CULL_FACE),r.uniformMatrix4fv(s.viewMatrix,!1,n.getViewMatrix()),r.uniformMatrix4fv(s.projectionMatrix,!1,n.getProjectionMatrix()),r.uniform3fv(s.eyePositionHigh,n.eyeHigh),r.uniform3fv(s.eyePositionLow,n.eyeLow);let a=this._renderedNodesInFrustum[n.getCurrentFrustum()],o=this._visibleTileLayerSlices,l=a.length;for(;l--;)a[l].segment.colorPickingRendering(e,o[0],0);r.enable(r.POLYGON_OFFSET_FILL);for(let h=1,d=o.length;h<d;h++)for(l=a.length,r.polygonOffset(0,-h);l--;)a[l].segment.colorPickingRendering(e,o[h],h,this.transparentTexture,!0);r.disable(r.POLYGON_OFFSET_FILL)}_renderDepthFramebufferPASS(){let e,t=this.renderer,i=t.handler,r=i.gl;i.programs.drawnode_depth.activate(),e=i.programs.drawnode_depth._program;let s=e.uniforms,n=t.activeCamera;r.disable(r.BLEND),r.disable(r.POLYGON_OFFSET_FILL),r.uniformMatrix4fv(s.viewMatrix,!1,n.getViewMatrix()),r.uniformMatrix4fv(s.projectionMatrix,!1,n.getProjectionMatrix()),r.uniform3fv(s.eyePositionHigh,n.eyeHigh),r.uniform3fv(s.eyePositionLow,n.eyeLow),r.uniform3fv(s.frustumPickingColor,n.frustum._pickingColorU);let a=this._renderedNodesInFrustum[n.getCurrentFrustum()],o=this._visibleTileLayerSlices,l=a.length;for(;l--;)a[l].segment.depthRendering(e,o[0]);r.enable(r.BLEND)}_collectVectorLayerCollections(){this._frustumEntityCollections.length=0,this._frustumEntityCollections=[];let e=this.visibleVectorLayers.length;for(;e--;){let t=this.visibleVectorLayers[e];t._fading&&t._refreshFadingOpacity()&&this.visibleVectorLayers.splice(e,1),t.collectVisibleCollections(this._frustumEntityCollections),t.update()}}_frustumEntityCollectionPickingCallback(){this.drawPickingEntityCollections(this._frustumEntityCollections)}memClear(){this._distBeforeMemClear=0,this.camera._insideSegment=null,this.layerLock.lock(this._memKey),this.terrainLock.lock(this._memKey),this._normalMapCreator.lock(this._memKey),this._normalMapCreator.clear(),this.terrain.abortLoading(),this._tileLoader.abortAll(),this.quadTreeStrategy.clear(),this.layerLock.free(this._memKey),this.terrainLock.free(this._memKey),this._normalMapCreator.free(this._memKey),this._createdNodesCount=0}getRayIntersectionEllipsoid(e){return this.ellipsoid.hitRay(e.origin,e.direction)}getCartesianFromPixelEllipsoid(e){let t=this.renderer.activeCamera;return this.ellipsoid.hitRay(t.eye,t.unproject(e.x,e.y))}getLonLatFromPixelEllipsoid(e){let t=this.getCartesianFromPixelEllipsoid(e);if(t)return this.ellipsoid.cartesianToLonLat(t)}getCartesianFromMouseTerrain(){let e=this.renderer.events.mouseState,t=this.getDistanceFromPixel(e);if(t)return e.direction.scaleTo(t).addA(this.renderer.activeCamera.eye)}getCartesianFromPixelTerrain(e){let t=this.getDistanceFromPixel(e);if(t)return(e.direction||this.renderer.activeCamera.unproject(e.x,e.y)).scaleTo(t).addA(this.renderer.activeCamera.eye)}getLonLatFromPixelTerrain(e){let t=this.getCartesianFromPixelTerrain(e);if(t)return this.ellipsoid.cartesianToLonLat(t)}getPixelFromCartesian(e){return this.renderer.activeCamera.project(e)}getPixelFromLonLat(e){let t=this.ellipsoid.lonLatToCartesian(e);if(t)return this.renderer.activeCamera.project(t)}getDistanceFromPixelEllipsoid(e){let t=this.getCartesianFromPixelEllipsoid(e);if(t)return t.distance(this.renderer.activeCamera.eye)}getDistanceFromPixel(e){if(this.terrain.isEmpty)return this.getDistanceFromPixelEllipsoid(e)||0;{let t=this.renderer,i=t.handler.canvas,r=e.x/i.width,s=(i.height-e.y)/i.height;it[0]=it[1]=it[2]=0;let n=0;if(t.readDistanceColor(r,s,it),n=vo(it),!(it[0]||it[1]||it[2]))n=this.getDistanceFromPixelEllipsoid(e)||0;else if(n<Kl){t.screenDepthFramebuffer.activate(),t.screenDepthFramebuffer.readPixels(Tn,r,s);let a=new J(r*2-1,s*2-1,Tn[0]/255*2-1,1*2-1),o=this.camera.frustums[0].inverseProjectionMatrix.mulVec4(a),l=e.direction||t.activeCamera.unproject(e.x,e.y);n=-(o.z/o.w)/l.dot(t.activeCamera.getForward()),t.screenDepthFramebuffer.deactivate()}return n}}viewExtent(e){this.camera?this.camera.viewExtent(e):this._initialViewExtent=e}viewExtentArr(e){this.viewExtent(new U(new B(e[0],e[1]),new B(e[2],e[3])))}getViewExtent(){return this._viewExtent}viewLonLat(e,t,i){this.camera.setLonLat(e,t,i)}flyExtent(e,t,i,r,s,n){this.camera.flyExtent(e,t,i,r,s,n)}flyCartesian(e,t,i,r,s,n,a){this.camera.flyCartesian(e,t,i,r,s,n,a)}flyLonLat(e,t,i,r,s,n,a){this.camera.flyLonLat(e,t,i,r,s,n,a)}stopFlying(){this.camera.stopFlying()}updateBillboardsTexCoords(){for(let t=0;t<this.entityCollections.length;t++)this.entityCollections[t].billboardHandler.refreshTexCoordsArr();let e={};for(let t=0;t<this._layers.length;t++){let i=this._layers[t];i instanceof Ho&&i.each(function(r){r._entityCollection&&!e[r._entityCollection.id]&&(r._entityCollection.billboardHandler.refreshTexCoordsArr(),e[r._entityCollection.id]=!0)})}}getEntityTerrainPoint(e,t){let i=this._renderedNodes,r=i.length;for(;r--;)if(i[r].segment.isEntityInside(e))return i[r].segment.getEntityTerrainPoint(e,t)}async getHeightDefault(e){return new Promise(t=>{this.terrain?this.terrain.getHeightAsync(e.clone(),i=>{t(i)}):t(0)})}async getHeightAboveELL(e){return new Promise(t=>{this.terrain?this.terrain.getHeightAsync(e.clone(),i=>{t(i+this.terrain.geoid.getHeightLonLat(e))}):t(0)})}onremove(){this.memClear(),this.quadTreeStrategy.destroyBranches(),this._renderedNodes=[]}}const th=["draw","layeradd","baselayerchange","layerremove","layervisibilitychange","rendercompleted","terraincompleted","layerloadend"];class ri{constructor(e={}){this.__id=ri.__counter__++,this.equalizeVertices=e.equalizeVertices||!1,this.equalizeNormals=!1,this.isEmpty=!0,this.name=e.name||"empty",this.minZoom=e.minZoom||2,this.maxZoom=e.maxZoom||19,this.maxNativeZoom=e.maxNativeZoom||this.maxZoom,this.gridSizeByZoom=e.gridSizeByZoom||[64,32,16,8,4,4,4,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2],this._maxNodeZoom=this.gridSizeByZoom.length-1,this.plainGridSize=2,this.noDataValues=[],this._planet=null,this._geoid=e.geoid||new vn({src:e.geoidSrc||null}),this._isReady=!1}get isIdle(){return!0}isEqual(e){return e.__id===this.__id}static checkNoDataValue(e,t){return ea(e,t)!==-1}isBlur(e){return!1}set maxNodeZoom(e){e>this.gridSizeByZoom.length-1&&(e=this.gridSizeByZoom.length-1),this._maxNodeZoom=e}get maxNodeZoom(){return this._maxNodeZoom}set geoid(e){this._geoid=e}get geoid(){return this._geoid}getGeoid(){return this._geoid}handleSegmentTerrain(e){e.terrainIsLoading=!1,e.terrainReady=!0,e.terrainExists=!0}isReady(){return this._isReady}abortLoading(){}clearCache(){}getHeightAsync(e,t){return t(0),!0}loadTerrain(e,t=!1){}}ri.__counter__=0;class ih extends ri{constructor(e="",t={}){super({geoidSrc:"https://openglobus.org/geoid/egm84-30.pgm",maxNativeZoom:t.maxNativeZoom||14,...t}),this._s=t.subdomains||["a","b","c"],this.events=We(rh,this),this._requestCount=0,this._requestsPeerSubdomain=4,this.isEmpty=!1,this.equalizeNormals=!0,this.name=e||"openglobus",this.url=t.url||"https://{s}.srtm3.openglobus.org/{z}/{y}/{x}.ddm",this.gridSizeByZoom=t.gridSizeByZoom||[64,32,32,16,16,8,8,8,8,16,16,16,16,32,32,16,8,4,2,2,2,2,2,2],this._heightFactor=t.heightFactor!=null?t.heightFactor:1,this.noDataValues=t.noDataValues||[];for(let i=0;i<this.noDataValues.length;i++)this.noDataValues[i]*=this._heightFactor;this.plainGridSize=t.plainGridSize||32,this._extent=jr(t.extent,new U(new B(-180,-90),new B(180,90))),this._dataType="arrayBuffer",this._maxNodeZoom=this.gridSizeByZoom.length-1,this._elevationCache={},this._fetchCache={},this._loader=new xn,this._urlRewriteCallback=t.urlRewrite||null}get loader(){return this._loader}clearCache(){for(let e in this._elevationCache)this._elevationCache[e].heights=null,this._elevationCache[e].extent=null,delete this._elevationCache[e];this._elevationCache=null,this._elevationCache={};for(let e in this._fetchCache)this._fetchCache[e]=null,delete this._fetchCache[e];this._fetchCache=null,this._fetchCache={}}isBlur(e){return e.tileZoom>=6}getHeightAsync(e,t,i,r){if(!e||e.lat>ce||e.lat<Re)return t(0),!0;r=r??!0;let s=i||this.maxZoom,n=Math.pow(2,s),a=Ui/n,o=Hr(e),l=Math.floor((re+o.lon)/a),h=Math.floor((re-o.lat)/a),d=Oe.getTileIndex(l,h,s),f=this._elevationCache[d];if(f)return f.heights?t(this._getGroundHeightMerc(o,f)):t(0),!0;if(!this._fetchCache[d]){let u=this._buildURL(l,h,s);this._fetchCache[d]=this._loader.fetch({src:u,type:this._dataType})}return this._fetchCache[d].then(u=>{let g=Kn(l,h,s);if(u.status==="ready"){let _={heights:this._createHeights(u.data,d,l,h,s,g),extent:g};this._elevationCache[d]=_,t(this._getGroundHeightMerc(o,_))}else if(u.status==="error"){if(r&&s>this.maxNativeZoom){r=!1,this.getHeightAsync(e,t,this.maxNativeZoom,!1);return}this._elevationCache[d]={heights:null,extent:g},t(0)}else this._fetchCache[d]=null,delete this._fetchCache[d]}),!1}getTileCache(e,t){if(!e||e.lat>ce||e.lat<Re)return;let i=Math.pow(2,t),r=Ui/i,s=Hr(e),n=Math.floor((re+s.lon)/r),a=Math.floor((re-s.lat)/r),o=Oe.getTileIndex(n,a,t);return this._elevationCache[o]}_getGroundHeightMerc(e,t){if(!(t.extent&&t.heights))return 0;let i=t.extent.getWidth(),r=Math.sqrt(t.heights.length),s=i/(r-1),n=r-Math.ceil((e.lat-t.extent.southWest.lat)/s)-1,a=Math.floor((e.lon-t.extent.southWest.lon)/s),o=(n+1)*r+a,l=o+1,h=n*r+a,d=h+1,f=t.heights[o],u=t.heights[l],g=t.heights[h],_=t.heights[d],m=new p(t.extent.southWest.lon+s*a,f,t.extent.northEast.lat-s*n-s),v=new p(m.x+s,u,m.z),b=new p(m.x,g,m.z+s),y=new p(m.x+s,_,m.z+s),w=new p(e.lon,1e5,e.lat),x=new se(w,new p(0,-1,0)),T=new p,A=x.hitTriangle(m,v,b,T);return A===se.INSIDE||(A=x.hitTriangle(v,y,b,T),A===se.INSIDE)?T.y:0}abortLoading(){this._loader.abortAll()}setUrl(e){this.url=e}setName(e){this.name=e}isReadyToLoad(e){return e._projection.equal(Ri)&&this._extent.overlaps(e.getExtentLonLat())}loadTerrain(e,t=!1){if(this._planet.terrainLock.isFree())if(e.terrainReady=!1,e.terrainIsLoading=!0,this.isReadyToLoad(e)){let i=this._elevationCache[e.tileIndex];i?this._applyElevationsData(e,i.heights):this._loader.load({sender:this,src:this._getHTTPRequestString(e),segment:e,type:this._dataType,filter:()=>e.plainReady&&e.node.getState()!==De||t},r=>{if(r.status==="ready"){let s=this._createHeights(r.data,e.tileIndex,e.tileX,e.tileY,e.tileZoom,e.getExtent(),e.tileZoom===this.maxZoom);this._elevationCache[e.tileIndex]={heights:s,extent:e.getExtent()},this._applyElevationsData(e,s)}else r.status==="abort"?e.terrainIsLoading=!1:r.status==="error"?this._applyElevationsData(e,null):e.terrainIsLoading=!1})}else e.elevationsNotExists();else e.terrainIsLoading=!1}_getSubdomain(){return this._requestCount++,this._s[Math.floor(this._requestCount%(this._requestsPeerSubdomain*this._s.length)/this._requestsPeerSubdomain)]}_buildURL(e,t,i){return Et(this.url,{s:this._getSubdomain(),x:e.toString(),y:t.toString(),z:i.toString()})}_createUrl(e){return this._buildURL(e.tileX,e.tileY,e.tileZoom)}_getHTTPRequestString(e){return this._urlRewriteCallback?this._urlRewriteCallback(e,this.url):this._createUrl(e)}setUrlRewriteCallback(e){this._urlRewriteCallback=e}_createHeights(e,t,i,r,s,n,a){if(this._heightFactor!==1){let o=new Float32Array(e);for(let l=0,h=o.length;l<h;l++)o[l]=o[l]*this._heightFactor;return o}return new Float32Array(e)}_applyElevationsData(e,t){if(e){let i=this.events.load;i.handlers.length&&this.events.dispatch(i,{elevations:t,segment:e}),e.applyTerrain(t)}}}const rh=["load","loadend"];class An extends Oe{constructor(e,t={}){super(e,t),this.events=this.events.registerNames(sh),this.url=t.url||"",this._s=t.subdomains||["a","b","c"],this.minNativeZoom=t.minNativeZoom||0,this.maxNativeZoom=t.maxNativeZoom||19,this._urlRewriteCallback=t.urlRewrite||null,this._requestsPeerSubdomains=4,this._requestCount=0}get isIdle(){return super.isIdle&&this._planet._tileLoader.getRequestCounter(this)===0}get instanceName(){return"XYZ"}abortLoading(){this._planet&&this._planet._tileLoader.abort(this)}setVisibility(e){e!==this._visibility&&(super.setVisibility(e),e||this.abortLoading())}remove(){return this.abortLoading(),super.remove(),this}setUrl(e){this.url=e}_checkSegment(e){return e._projection.id===this._planet.quadTreeStrategy.projection.id}loadMaterial(e,t=!1){let i=e.segment;this._isBaseLayer?e.texture=i.getDefaultTexture():e.texture=i.planet.transparentTexture,(this._planet.layerLock.isFree()||e.segment.tileZoom<2)&&(e.isReady=!1,e.isLoading=!0,this._checkSegment(i)?(e.loadingAttempts++,this._planet._tileLoader.load({sender:this,src:this._getHTTPRequestString(e.segment),type:"imageBitmap",filter:()=>i.initialized&&i.node.getState()===$e||t,options:{}},r=>{if(r.status==="ready"){if(e.isLoading){let s=this.events.load;s.handlers.length&&this.events.dispatch(s,e),e.applyImage(r.data),r.data=null}}else r.status==="abort"?e.isLoading=!1:r.status==="error"&&e.isLoading&&e.textureNotExists()})):e.textureNotExists())}_createUrl(e){return Et(this.url,{s:this._getSubdomain(),x:e.tileX.toString(),y:e.tileY.toString(),z:e.tileZoom.toString()})}_getSubdomain(){return this._requestCount++,this._s[Math.floor(this._requestCount%(this._requestsPeerSubdomains*this._s.length)/this._requestsPeerSubdomains)]}_getHTTPRequestString(e){return this._urlRewriteCallback?this._urlRewriteCallback(e,this.url):this._createUrl(e)}setUrlRewriteCallback(e){this._urlRewriteCallback=e}applyMaterial(e,t=!1){if(e.isReady)return e.texOffset;if(e.segment.tileZoom<this.minNativeZoom)e.textureNotExists();else{let i=e.segment,r=i.node,s=!1,n=this.__id,a=e;for(;r.parentNode;)if(r=r.parentNode,a=r.segment.materials[n],a&&a.textureExists){s=!0;break}if(i.passReady){let o=e.layer.maxNativeZoom;if(r.segment.tileZoom===o)e.textureNotExists();else if(e.segment.tileZoom<=o)!e.isLoading&&!e.isReady&&this.loadMaterial(e,t);else{let l=i.node;for(;l.segment.tileZoom>e.layer.maxNativeZoom;)l=l.parentNode;let h=l.segment.materials[e.layer.__id];h?!h.isLoading&&!h.isReady&&this.loadMaterial(h,!0):(h=l.segment.materials[e.layer.__id]=e.layer.createMaterial(l.segment),this.loadMaterial(h,!0))}}if(s){e.appliedNode=r,e.appliedNodeId=r.nodeId,e.texture=a.texture;let o=1/(2<<i.tileZoom-r.segment.tileZoom-1);e.texOffset[0]=i.tileX*o-r.segment.tileX,e.texOffset[1]=i.tileY*o-r.segment.tileY,e.texOffset[2]=o,e.texOffset[3]=o}else e.texture=i.planet.transparentTexture,e.texOffset[0]=0,e.texOffset[1]=0,e.texOffset[2]=1,e.texOffset[3]=1}return e.texOffset}clearMaterial(e){e.isReady&&e.textureExists&&(!e.texture.default&&e.segment.handler.gl.deleteTexture(e.texture),e.texture=null),e.isReady=!1,e.textureExists=!1,e.isLoading=!1}_correctFullExtent(){let e=this._extent,t=this._extentMerc,i=re+5e4,r=re+5e4;e.northEast.lat===90&&(t.northEast.lat=r),e.northEast.lon===180&&(t.northEast.lon=i),e.southWest.lat===-90&&(t.southWest.lat=-r),e.southWest.lon===-180&&(t.southWest.lon=-i),e.northEast.lat>=ce&&(e.northEast.lat=ce),e.northEast.lat<=Re&&(e.northEast.lat=Re)}}const sh=["load","loadend"],nh=["tick","end","start","stop"];class ki{constructor(e={}){this.__handler=null,this.active=!0,this.__id=ki.__counter__++,this.events=We(nh,this),this.name=e.name||"",this.startDate=e.startDate||0,this.endDate=e.endDate||0;let t=e.currentDate||Qr(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*$r,this._intervalCallback=t}setDate(e){let t=Qr(e);this.startDate&&t<this.startDate&&(t=this.startDate),this.endDate&&t>this.endDate&&(t=this.endDate),this.currentDate=t}getDate(){return fa(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=ua(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))}}ki.__counter__=0;class ah{constructor(e,t){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}}class En{constructor(){this.next=null,this.prev=null,this.data=null}}class Tr{constructor(e=256){this._current=new En,this._head=this._current;for(let t=0;t<e;t++){let i=new En;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 Cn=["","WEBKIT_","MOZ_"],Ar=["webgl2","webgl"],Pn=2;class Di{constructor(e,t={}){this.framebufferStack=new Tr,this._requestAnimationFrameId=0,this.events=We(["visibilitychange","resize"]),this.defaultClock=new ki,this._clocks=[],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:na("og_dpi")||t.pixelRatio||1,extensions:t.extensions||[],context:t.context||{}},this._oneByHeight=1/(this._params.height*this._params.pixelRatio),this.extensions={},this._canvasTarget=e,this._lastAnimationFrameTime=0,this._initialized=!1,this._frameCallback=function(){},this.transparentTexture=null,this.defaultTexture=null,this.framebufferStack=new Tr,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||At(t.autoActivate))&&this.initialize()}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 Cn)if(r=e.getExtension(Cn[i]+t),r)return r}static getContext(e,t){let i=null;try{let s=new URLSearchParams(location.search).get("og_ver");if(s)i=e.getContext(s,t),i&&(i.type=s);else for(let n=0;n<Ar.length;n++)if(i=e.getContext(Ar[n],t),i){i.type=Ar[n];break}}catch{He.logErr("exception during the GL context initialization")}return i||He.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=0){let o=this.gl,l=o.createTexture();return o.bindTexture(o.TEXTURE_2D,l),o.texImage2D(o.TEXTURE_2D,a,o[r.toUpperCase()],e,t,0,o[s.toUpperCase()],o[n.toUpperCase()],null),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_MIN_FILTER,o[i.toUpperCase()]),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_MAG_FILTER,o[i.toUpperCase()]),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_WRAP_S,o.CLAMP_TO_EDGE),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_WRAP_T,o.CLAMP_TO_EDGE),o.bindTexture(o.TEXTURE_2D,null),l}createEmptyTexture_n(e,t,i){let r=this.gl,s=r.createTexture();return r.bindTexture(r.TEXTURE_2D,s),r.texImage2D(r.TEXTURE_2D,0,i||r.RGBA,e,t,0,r.RGBA,r.UNSIGNED_BYTE,null),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.NEAREST),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,r.NEAREST),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.bindTexture(r.TEXTURE_2D,null),s}createEmptyTexture_l(e,t,i){let r=this.gl,s=r.createTexture();return r.bindTexture(r.TEXTURE_2D,s),r.texImage2D(r.TEXTURE_2D,0,i||r.RGBA,e,t,0,r.RGBA,r.UNSIGNED_BYTE,null),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,r.LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.bindTexture(r.TEXTURE_2D,null),s}createTexture_n_webgl1(e,t,i=null){let r=this.gl;return i=i||r.createTexture(),r.bindTexture(r.TEXTURE_2D,i),r.texImage2D(r.TEXTURE_2D,0,t||r.RGBA,r.RGBA,r.UNSIGNED_BYTE,e),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.NEAREST),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,r.NEAREST),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.bindTexture(r.TEXTURE_2D,null),i}createTexture_l_webgl1(e,t,i=null){let r=this.gl;return i=i||r.createTexture(),r.bindTexture(r.TEXTURE_2D,i),r.texImage2D(r.TEXTURE_2D,0,t||r.RGBA,r.RGBA,r.UNSIGNED_BYTE,e),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,r.LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.bindTexture(r.TEXTURE_2D,null),i}createTexture_mm_webgl1(e,t,i=null){let r=this.gl;return i=i||r.createTexture(),r.bindTexture(r.TEXTURE_2D,i),r.texImage2D(r.TEXTURE_2D,0,t||r.RGBA,r.RGBA,r.UNSIGNED_BYTE,e),r.generateMipmap(r.TEXTURE_2D),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.LINEAR_MIPMAP_LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.bindTexture(r.TEXTURE_2D,null),i}createTexture_a_webgl1(e,t,i=null){let r=this.gl;return i=i||r.createTexture(),r.bindTexture(r.TEXTURE_2D,i),r.texImage2D(r.TEXTURE_2D,0,t||r.RGBA,r.RGBA,r.UNSIGNED_BYTE,e),r.generateMipmap(r.TEXTURE_2D),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.LINEAR_MIPMAP_LINEAR),r.texParameterf(r.TEXTURE_2D,this.extensions.EXT_texture_filter_anisotropic.TEXTURE_MAX_ANISOTROPY_EXT,this._params.anisotropy),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.bindTexture(r.TEXTURE_2D,null),i}createTexture_n_webgl2(e,t,i=null){let r=this.gl;return i=i||r.createTexture(),r.bindTexture(r.TEXTURE_2D,i),r.texStorage2D(r.TEXTURE_2D,1,t||r.RGBA8,e.width,e.height),r.texSubImage2D(r.TEXTURE_2D,0,0,0,e.width,e.height,r.RGBA,r.UNSIGNED_BYTE,e),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.NEAREST),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,r.NEAREST),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.bindTexture(r.TEXTURE_2D,null),i}createTexture_l_webgl2(e,t,i=null){let r=this.gl;return i=i||r.createTexture(),r.bindTexture(r.TEXTURE_2D,i),r.texStorage2D(r.TEXTURE_2D,1,t||r.RGBA8,e.width,e.height),r.texSubImage2D(r.TEXTURE_2D,0,0,0,e.width,e.height,r.RGBA,r.UNSIGNED_BYTE,e),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,r.LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.bindTexture(r.TEXTURE_2D,null),i}createTexture_mm_webgl2(e,t,i=null){let r=this.gl;return i=i||r.createTexture(),r.bindTexture(r.TEXTURE_2D,i),r.texStorage2D(r.TEXTURE_2D,Pn,t||r.RGBA8,e.width,e.height),r.texSubImage2D(r.TEXTURE_2D,0,0,0,e.width,e.height,r.RGBA,r.UNSIGNED_BYTE,e),r.generateMipmap(r.TEXTURE_2D),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.LINEAR_MIPMAP_LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.bindTexture(r.TEXTURE_2D,null),i}createTexture_a_webgl2(e,t,i=null){let r=this.gl;return i=i||r.createTexture(),r.bindTexture(r.TEXTURE_2D,i),r.texStorage2D(r.TEXTURE_2D,Pn,t||r.RGBA8,e.width,e.height),r.texSubImage2D(r.TEXTURE_2D,0,0,0,e.width,e.height,r.RGBA,r.UNSIGNED_BYTE,e),r.generateMipmap(r.TEXTURE_2D),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.LINEAR_MIPMAP_LINEAR),r.texParameterf(r.TEXTURE_2D,this.extensions.EXT_texture_filter_anisotropic.TEXTURE_MAX_ANISOTROPY_EXT,this._params.anisotropy),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.bindTexture(r.TEXTURE_2D,null),i}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 Kt;s.fillEmpty();let n=s.getImage();for(let a=0;a<r.length;a++){let o=r[a][1];t.bindTexture(t.TEXTURE_CUBE_MAP,i),t.texImage2D(o,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,n)}for(let a=0;a<r.length;a++){let o=r[a][1],l=new Image;l.crossOrigin="",l.onload=function(h,d,f){return function(){t&&h&&(t.bindTexture(t.TEXTURE_CUBE_MAP,h),t.texImage2D(d,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,f))}}(i,o,l),l.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 ah(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=Di.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=Di.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[0].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,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._oneByHeight=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 V(Math.round(e.width*.5),Math.round(e.height*.5)):new V}drawFrame(){let e=window.performance.now();this.deltaTime=e-this._lastAnimationFrameTime,this._lastAnimationFrameTime=e,this.defaultClock.tick(this.deltaTime);for(let i=0;i<this._clocks.length;i++)this._clocks[i].tick(this.deltaTime);let t=this.canvas;(Math.floor(t.clientWidth*this._params.pixelRatio)!==t.width||Math.floor(t.clientHeight*this._params.pixelRatio)!==t.height)&&(t.clientWidth===0||t.clientHeight===0?this.stop():document.hidden||(this.start(),this.setSize(t.clientWidth,t.clientHeight))),this._frameCallback()}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":!1}_animationFrameCallback(){this._requestAnimationFrameId=window.requestAnimationFrame(()=>{this.drawFrame(),this._requestAnimationFrameId&&this._animationFrameCallback()})}createDefaultTexture(e,t){let i,r;if(e&&e.color)i=new Kt(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 Kt(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 t,i;(t=this.resizeObserver)==null||t.disconnect(),(i=this.intersectionObserver)==null||i.disconnect(),this.stop();for(let r in this.programs)this.removeProgram(r);let e=this.gl;if(e){e.deleteTexture(this.transparentTexture),this.transparentTexture=null,e.deleteTexture(this.defaultTexture),this.defaultTexture=null,this.framebufferStack=new Tr;let r=e.getParameter(e.MAX_VERTEX_ATTRIBS),s=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,s);for(let a=0;a<r;++a)e.disableVertexAttribArray(a),e.vertexAttribPointer(a,4,e.FLOAT,!1,0,0),e.vertexAttrib1f(a,0);e.deleteBuffer(s);let n=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS);for(let a=0;a<n;++a)e.activeTexture(e.TEXTURE0+a),e.bindTexture(e.TEXTURE_CUBE_MAP,null),e.bindTexture(e.TEXTURE_2D,null);e.activeTexture(e.TEXTURE0),e.useProgram(null),e.bindBuffer(e.ARRAY_BUFFER,null),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.bindRenderbuffer(e.RENDERBUFFER,null),e.disable(e.BLEND),e.disable(e.CULL_FACE),e.disable(e.DEPTH_TEST),e.disable(e.DITHER),e.disable(e.SCISSOR_TEST),e.blendColor(0,0,0,0),e.blendEquation(e.FUNC_ADD),e.blendFunc(e.ONE,e.ZERO),e.clearColor(0,0,0,0),e.clearDepth(1),e.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 oh extends dn{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)}}const Ln="_",Er=function(c,e){return+(c.priority<e.priority)};class lh{constructor(){this._currentlyPressedKeys={},this._pressedKeysCallbacks={},this._unpressedKeysCallbacks={},this._charkeysCallbacks={},this._anykeyCallback=null,this._event=null,this._active=!0,this._stampCache={},document.onkeydown=e=>{this._event=e,this._active&&this.handleKeyDown()},document.onkeyup=e=>{this._event=e,this._active&&this.handleKeyUp()}}getcurrentlyPressedKeys(){return this._currentlyPressedKeys}getPressedKeysCallbacks(){return this._pressedKeysCallbacks}getUnpressedKeysCallbacks(){return this._unpressedKeysCallbacks}getCharkeysCallbacks(){return this._charkeysCallbacks}removeEvent(e,t,i){let r=this._getStamp(e,t,i._openglobus_id);i._openglobus_id&&this._stampCache[r]&&(delete this._stampCache[r],e==="keypress"?this._removeCallback(this._pressedKeysCallbacks[t],i):e==="keyfree"?this._removeCallback(this._unpressedKeysCallbacks[t],i):e==="charkeypress"&&this._removeCallback(this._charkeysCallbacks[t],i))}_removeCallback(e,t){for(let i=0;i<e.length;i++)e[i].callback._openglobus_id===t._openglobus_id&&e.splice(i,1)}_getStamp(e,t,i){return`${e}${Ln}${t}${Ln}${i}`}_stamp(e,t,i){const r=Vr(i),s=this._getStamp(e,t,r);return this._stampCache[s]?!1:(this._stampCache[s]=r,!0)}setActivity(e){this._active=e}releaseKeys(){this._currentlyPressedKeys={}}addEvent(e,t,i,r,s){if(this._stamp(e,t,i))switch(s===void 0&&(s=1600),e){case"keyfree":this._unpressedKeysCallbacks[t]||(this._unpressedKeysCallbacks[t]=[]),this._unpressedKeysCallbacks[t].push({callback:i,sender:r,priority:s}),this._unpressedKeysCallbacks[t].sort(Er);break;case"keypress":t==null?this._anykeyCallback={callback:i,sender:r||this}:(this._pressedKeysCallbacks[t]||(this._pressedKeysCallbacks[t]=[]),this._pressedKeysCallbacks[t].push({callback:i,sender:r,priority:s}),this._pressedKeysCallbacks[t].sort(Er));break;case"charkeypress":this._charkeysCallbacks[t]||(this._charkeysCallbacks[t]=[]),this._charkeysCallbacks[t].push({callback:i,sender:r,priority:s}),this._charkeysCallbacks[t].sort(Er);break}}isKeyPressed(e){return this._currentlyPressedKeys[e]}handleKeyDown(){this._anykeyCallback&&this._anykeyCallback.callback.call(this._anykeyCallback.sender,this._event),this._currentlyPressedKeys[this._event.keyCode]=!0;for(let e in this._charkeysCallbacks)if(String.fromCharCode(this._event.keyCode)===String.fromCharCode(Number(e))){let t=this._charkeysCallbacks[e];for(let i=0;i<t.length;i++)t[i].callback.call(t[i].sender,this._event)}(this._event.keyCode==be.KEY_ALT||this._event.keyCode==be.KEY_SHIFT)&&this._event.preventDefault()}handleKeyUp(){if(this._currentlyPressedKeys[this._event.keyCode]||this._event.keyCode===be.KEY_PRINTSCREEN){for(let e in this._unpressedKeysCallbacks)if(this._currentlyPressedKeys[e]||this._event.keyCode===be.KEY_PRINTSCREEN&&Number(e)===be.KEY_PRINTSCREEN){let t=this._unpressedKeysCallbacks[e];for(let i=0;i<t.length;i++)t[i].callback.call(t[i].sender,this._event)}}this._currentlyPressedKeys[this._event.keyCode]=!1}handleEvents(){for(let e in this._pressedKeysCallbacks)if(this._currentlyPressedKeys[e]){let t=this._pressedKeysCallbacks[e];for(let i=0;i<t.length;i++)t[i].callback.call(t[i].sender,this._event)}}}class hh{constructor(e){this._htmlObject=e}setEvent(e,t,i){switch(e){case"mousewheel":this._htmlObject.addEventListener("wheel",function(r){let s=r.deltaY||r.detail||r.wheelDelta||0;r.wheelDelta==null&&(r.wheelDelta=s*-120),i.call(t,r),r.preventDefault()},!1);break;case"mousedown":this._htmlObject.addEventListener("mousedown",function(r){let s=this.getBoundingClientRect();i.call(t,r,{button:r.button,clientX:r.clientX-s.left,clientY:r.clientY-s.top})}),this._htmlObject.addEventListener("contextmenu",function(r){return r.preventDefault(),!1});break;case"mouseup":this._htmlObject.addEventListener("mouseup",function(r){let s=this.getBoundingClientRect();i.call(t,r,{button:r.button,clientX:r.clientX-s.left,clientY:r.clientY-s.top})});break;case"mousemove":this._htmlObject.addEventListener("mousemove",function(r){let s=this.getBoundingClientRect();i.call(t,r,{clientX:r.clientX-s.left,clientY:r.clientY-s.top})});break;case"mouseleave":this._htmlObject.addEventListener("mouseleave",function(r){i.call(t,r)});break;case"mouseout":this._htmlObject.addEventListener("mouseout",function(r){i.call(t,r)});break;case"mouseover":this._htmlObject.addEventListener("mouseover",function(r){i.call(t,r)});break;case"mouseenter":this._htmlObject.addEventListener("mouseenter",function(r){i.call(t,r)});break}}}class ch{constructor(e){this._htmlObject=e}setEvent(e,t,i){switch(e){case"touchcancel":this._htmlObject.addEventListener("touchcancel",function(r){r.preventDefault();const s=this.getBoundingClientRect(),n=Object.assign(r,{offsetLeft:s.left,offsetTop:s.top});i.call(t,n)});break;case"touchstart":this._htmlObject.addEventListener("touchstart",function(r){r.preventDefault();const s=this.getBoundingClientRect(),n=Object.assign(r,{offsetLeft:s.left,offsetTop:s.top});i.call(t,n)});break;case"touchend":this._htmlObject.addEventListener("touchend",function(r){r.preventDefault();const s=this.getBoundingClientRect(),n=Object.assign(r,{offsetLeft:s.left,offsetTop:s.top});i.call(t,n)});break;case"touchmove":this._htmlObject.addEventListener("touchmove",function(r){r.preventDefault();const s=this.getBoundingClientRect(),n=Object.assign(r,{offsetLeft:s.left,offsetTop:s.top});i.call(t,n)});break}}}function dh(c){return new ph(c)}const fh=1,uh=2,_h=4,gh=c=>!(c[0]||c[1]||c[2]),mh=c=>!!(c[0]||c[1]||c[2]);let rt=new Uint8Array(4),si=new Uint8Array(4),ni=new Uint8Array(4);class ph extends Ot{constructor(e){super(vh),this.renderer=e,this._touchHandler=new ch(e.handler.canvas),this._mouseHandler=new hh(e.handler.canvas),this._keyboardHandler=new lh,this._active=!0,this.clickRadius=15,this.mouseState={clientX:0,clientY:0,pos:new V,x:0,y:0,nx:0,ny:0,prev_x:0,prev_y:0,direction:new p,leftButtonUp:!1,rightButtonUp:!1,middleButtonUp:!1,leftButtonDown:!1,rightButtonDown:!1,middleButtonDown:!1,leftButtonHold:!1,rightButtonHold:!1,middleButtonHold:!1,leftButtonDoubleClick:!1,rightButtonDoubleClick:!1,middleButtonDoubleClick:!1,leftButtonClick:!1,rightButtonClick:!1,middleButtonClick:!1,moving:!1,justStopped:!1,doubleClickDelay:500,clickDelay:200,wheelDelta:0,sys:null,pickingObject:null,renderer:e},this.touchState={moving:!1,touchEnd:!1,touchStart:!1,touchCancel:!1,doubleTouch:!1,doubleTouchDelay:550,doubleTouchRadius:10,clientX:0,clientY:0,pos:new V,x:0,y:0,nx:0,ny:0,prev_x:0,prev_y:0,direction:new p,sys:null,pickingObject:null,renderer:e},this._isMouseInside=!1,this._entityPickingEventsActive=!0,this._dblTchCoords=new V,this._oneTouchStart=!1,this._dblTchBegins=0,this._mousestopThread=null,this._ldblClkBegins=0,this._rdblClkBegins=0,this._mdblClkBegins=0,this._lClkBegins=0,this._rClkBegins=0,this._mClkBegins=0,this._lclickX=0,this._lclickY=0,this._rclickX=0,this._rclickY=0,this._mclickX=0,this._mclickY=0}pointerEvent(){let e=this.mouseState,t=this.touchState;return e.moving||e.justStopped||t.moving||t.touchStart||t.touchEnd||e.wheelDelta!==0}get active(){return this._active}set active(e){this._active=e,this._keyboardHandler.setActivity(e)}handleEvents(){this._active&&(this.mouseState.direction=this.renderer.activeCamera.unproject(this.mouseState.x,this.mouseState.y),this.touchState.direction=this.renderer.activeCamera.unproject(this.touchState.x,this.touchState.y),this._keyboardHandler.handleEvents(),this.handleMouseEvents(),this.handleTouchEvents(),this.entityPickingEvents())}on(e,t,i,r,s){e==="keypress"||e==="charkeypress"||e==="keyfree"?this._keyboardHandler.addEvent(e,t,i,r,s):super.on(e,t,i,r)}off(e,t,i){e==="keypress"||e==="charkeypress"||e==="keyfree"?this._keyboardHandler.removeEvent(e,t,i):super.off(e,t)}isKeyPressed(e){return this._keyboardHandler.isKeyPressed(e)}releaseKeys(){this._keyboardHandler.releaseKeys()}initialize(){this._mouseHandler.setEvent("mouseup",this,this.onMouseUp),this._mouseHandler.setEvent("mousemove",this,this.onMouseMove),this._mouseHandler.setEvent("mousedown",this,this.onMouseDown),this._mouseHandler.setEvent("mousewheel",this,this.onMouseWheel),this._mouseHandler.setEvent("mouseleave",this,this.onMouseLeave),this._mouseHandler.setEvent("mouseenter",this,this.onMouseEnter),this._touchHandler.setEvent("touchstart",this,this.onTouchStart),this._touchHandler.setEvent("touchend",this,this.onTouchEnd),this._touchHandler.setEvent("touchcancel",this,this.onTouchCancel),this._touchHandler.setEvent("touchmove",this,this.onTouchMove)}onMouseWheel(e){this.mouseState.sys=e,this.mouseState.wheelDelta=e.wheelDelta||0}updateButtonsStates(e){let t=this.mouseState;e&fh&&t.leftButtonDown?t.leftButtonDown=!0:(t.leftButtonHold=!1,t.leftButtonDown=!1),e&uh&&t.rightButtonDown?t.rightButtonDown=!0:(t.rightButtonHold=!1,t.rightButtonDown=!1),e&_h&&t.middleButtonDown?t.middleButtonDown=!0:(t.middleButtonHold=!1,t.middleButtonDown=!1)}onMouseMove(e,t){let i=this.mouseState;this.updateButtonsStates(e.buttons),i.sys=e;let r=t.clientX,s=t.clientY,n=this.clickRadius;if(Math.abs(this._lclickX-r)>=n&&Math.abs(this._lclickY-s)>=n&&(this._ldblClkBegins=0,this._lClkBegins=0),Math.abs(this._rclickX-r)>=n&&Math.abs(this._rclickY-s)>=n&&(this._rdblClkBegins=0,this._rClkBegins=0),Math.abs(this._mclickX-r)>=n&&Math.abs(this._mclickY-s)>=n&&(this._mdblClkBegins=0,this._mClkBegins=0),i.clientX===t.clientX&&i.clientY===t.clientY)return;i.clientX=t.clientX,i.clientY=t.clientY;let a=this.renderer.handler;i.pos.x=i.x=t.clientX*a.pixelRatio,i.pos.y=i.y=t.clientY*a.pixelRatio,i.nx=i.x/a.canvas.width,i.ny=i.y/a.canvas.height,i.moving=!0,clearTimeout(this._mousestopThread),this._mousestopThread=setTimeout(function(){i.justStopped=!0},100)}onMouseLeave(e){this._isMouseInside=!1,this.mouseState.sys=e,this.dispatch(this.mouseleave,this.mouseState)}onMouseEnter(e){this._isMouseInside=!0,this.mouseState.sys=e,this.dispatch(this.mouseenter,this.mouseState)}onMouseDown(e,t){t.button===be.MB_LEFT?(this._lClkBegins=window.performance.now(),this._lclickX=t.clientX,this._lclickY=t.clientY,this.mouseState.sys=e,this.mouseState.leftButtonDown=!0):t.button===be.MB_RIGHT?(this._rClkBegins=window.performance.now(),this._rclickX=t.clientX,this._rclickY=t.clientY,this.mouseState.sys=e,this.mouseState.rightButtonDown=!0):t.button===be.MB_MIDDLE&&(this._mClkBegins=window.performance.now(),this._mclickX=t.clientX,this._mclickY=t.clientY,this.mouseState.sys=e,this.mouseState.middleButtonDown=!0)}onMouseUp(e,t){let i=this.mouseState;i.sys=e;let r=window.performance.now();t.button===be.MB_LEFT?(i.leftButtonDown=!1,i.leftButtonUp=!0,Math.abs(this._lclickX-t.clientX)<this.clickRadius&&Math.abs(this._lclickY-t.clientY)<this.clickRadius&&r-this._lClkBegins<=i.clickDelay&&(this._ldblClkBegins?(window.performance.now()-this._ldblClkBegins<=i.doubleClickDelay&&(i.leftButtonDoubleClick=!0),this._ldblClkBegins=0):this._ldblClkBegins=window.performance.now(),i.leftButtonClick=!0,this._lClkBegins=0)):t.button===be.MB_RIGHT?(i.rightButtonDown=!1,i.rightButtonUp=!0,Math.abs(this._rclickX-t.clientX)<this.clickRadius&&Math.abs(this._rclickY-t.clientY)<this.clickRadius&&r-this._rClkBegins<=i.clickDelay&&(this._rdblClkBegins?(window.performance.now()-this._rdblClkBegins<=i.doubleClickDelay&&(i.rightButtonDoubleClick=!0),this._rdblClkBegins=0):this._rdblClkBegins=window.performance.now(),i.rightButtonClick=!0,this._rClkBegins=0)):t.button===be.MB_MIDDLE&&(i.middleButtonDown=!1,i.middleButtonUp=!0,Math.abs(this._mclickX-t.clientX)<this.clickRadius&&Math.abs(this._mclickY-t.clientY)<this.clickRadius&&r-this._mClkBegins<=i.clickDelay&&(this._mdblClkBegins?(window.performance.now()-this._mdblClkBegins<=i.doubleClickDelay&&(i.middleButtonDoubleClick=!0),this._mdblClkBegins=0):this._mdblClkBegins=window.performance.now(),i.middleButtonClick=!0,this._mClkBegins=0))}onTouchStart(e){let t=this.touchState;t.sys=e,t.clientX=e.touches.item(0).clientX-e.offsetLeft,t.clientY=e.touches.item(0).clientY-e.offsetTop;let i=this.renderer.handler;t.pos.x=t.x=t.clientX*i.pixelRatio,t.pos.y=t.y=t.clientY*i.pixelRatio,t.nx=t.x/i.canvas.width,t.ny=t.y/i.canvas.height,t.prev_x=t.x,t.prev_y=t.y,t.touchStart=!0,e.touches.length===1?(this._dblTchCoords.x=t.x,this._dblTchCoords.y=t.y,this._oneTouchStart=!0):this._oneTouchStart=!1}onTouchEnd(e){let t=this.touchState;t.sys=e,t.touchEnd=!0,e.touches.length===0&&(t.prev_x=t.x,t.prev_y=t.y,this._oneTouchStart&&(this._dblTchBegins&&(window.performance.now()-this._dblTchBegins<=t.doubleTouchDelay&&(t.doubleTouch=!0),this._dblTchBegins=0),this._dblTchBegins=window.performance.now(),this._oneTouchStart=!1))}onTouchCancel(e){let t=this.touchState;t.sys=e,t.touchCancel=!0}onTouchMove(e){let t=this.touchState;t.clientX=e.touches.item(0).clientX-e.offsetLeft,t.clientY=e.touches.item(0).clientY-e.offsetTop;let i=this.renderer.handler;t.x=t.clientX*i.pixelRatio,t.y=t.clientY*i.pixelRatio,t.nx=t.x/i.canvas.width,t.ny=t.y/i.canvas.height,t.sys=e,t.moving=!0;let r=t.x-t.prev_x,s=t.y-t.prev_y;(Math.abs(r)>9||Math.abs(s)>9)&&(this._dblTchBegins=0,this._oneTouchStart=!1)}entityPickingEvents(){let e=this.touchState,t=this.mouseState;if(this._isMouseInside!==this._entityPickingEventsActive&&(this._entityPickingEventsActive=this._isMouseInside,!this._entityPickingEventsActive)){let i=this.renderer,r=rt,s=i.getPickingObjectArr(r);if(s){let n=s.rendererEvents;t.pickingObject=s,n&&n.dispatch(n.mouseleave,t),e.pickingObject=s,n&&n.dispatch(n.touchleave,e)}rt[0]=rt[1]=rt[2]=rt[3]=ni[0]=ni[1]=ni[2]=ni[3]=si[0]=si[1]=si[2]=si[3]=0}if(this._isMouseInside&&!(t.leftButtonHold||t.rightButtonHold||t.middleButtonHold)){let i=this.renderer,r=rt,s=ni,n=si;e.x||e.y?i.readPickingColor(e.nx,1-e.ny,n):i.readPickingColor(t.nx,1-t.ny,n),s[0]=r[0],s[1]=r[1],s[2]=r[2],r[0]=n[0],r[1]=n[1],r[2]=n[2],t.pickingObject=null,e.pickingObject=null;let a=i.getPickingObjectArr(r);if(t.pickingObject=a,e.pickingObject=a,r[0]!==s[0]||r[1]!==s[1]||r[2]!==s[2])if(gh(r)){let o=i.getPickingObjectArr(s);if(o){let l=o.rendererEvents;t.pickingObject=o,l&&l.dispatch(l.mouseleave,t),e.pickingObject=o,l&&l.dispatch(l.touchleave,e)}}else{if(mh(s)){let o=i.getPickingObjectArr(s);if(o){let l=o.rendererEvents;t.pickingObject=o,l&&l.dispatch(l.mouseleave,t),e.pickingObject=o,l&&l.dispatch(l.touchleave,e)}}if(a){let o=a.rendererEvents;t.pickingObject=a,o&&o.dispatch(o.mouseenter,t),e.pickingObject=a,o&&o.dispatch(o.touchenter,e)}}}}handleMouseEvents(){let e=this,t=this.mouseState,i=t.pickingObject,r=null;t.leftButtonClick&&(i&&(r=i.rendererEvents,r&&r.dispatch(r.lclick,t)),this.dispatch(e.lclick,t),t.leftButtonClick=!1),t.rightButtonClick&&(i&&(r=i.rendererEvents,r&&r.dispatch(r.rclick,t)),this.dispatch(e.rclick,t),t.rightButtonClick=!1),t.middleButtonClick&&(i&&(r=i.rendererEvents,r&&r.dispatch(r.mclick,t)),this.dispatch(e.mclick,t),t.middleButtonClick=!1),t.leftButtonDown&&(t.leftButtonHold?(i&&(r=i.rendererEvents,r&&r.dispatch(r.lhold,t)),this.dispatch(e.lhold,t)):(t.leftButtonHold=!0,i&&(r=i.rendererEvents,r&&r.dispatch(r.ldown,t)),this.dispatch(e.ldown,t))),t.rightButtonDown&&(t.rightButtonHold?(i&&(r=i.rendererEvents,r&&r.dispatch(r.rhold,t)),this.dispatch(e.rhold,t)):(t.rightButtonHold=!0,i&&(r=i.rendererEvents,r&&r.dispatch(r.rdown,t)),this.dispatch(e.rdown,t))),t.middleButtonDown&&(t.middleButtonHold?(i&&(r=i.rendererEvents,r&&r.dispatch(r.mhold,t)),this.dispatch(e.mhold,t)):(t.middleButtonHold=!0,i&&(r=i.rendererEvents,r&&r.dispatch(r.mdown,t)),this.dispatch(e.mdown,t))),t.leftButtonUp&&(i&&(r=i.rendererEvents,r&&r.dispatch(r.lup,t)),this.dispatch(e.lup,t),t.leftButtonUp=!1,t.leftButtonHold=!1),t.rightButtonUp&&(i&&(r=i.rendererEvents,r&&r.dispatch(r.rup,t)),this.dispatch(e.rup,t),t.rightButtonUp=!1,t.rightButtonHold=!1),t.middleButtonUp&&(i&&(r=i.rendererEvents,r&&r.dispatch(r.mup,t)),this.dispatch(e.mup,t),t.middleButtonUp=!1,t.middleButtonHold=!1),t.leftButtonDoubleClick&&(i&&(r=i.rendererEvents,r&&r.dispatch(r.ldblclick,t)),this.dispatch(e.ldblclick,t),t.leftButtonDoubleClick=!1),t.rightButtonDoubleClick&&(i&&(r=i.rendererEvents,r&&r.dispatch(r.rdblclick,t)),this.dispatch(e.rdblclick,t),t.rightButtonDoubleClick=!1),t.middleButtonDoubleClick&&(i&&(r=i.rendererEvents,r&&r.dispatch(r.mdblclick,t)),this.dispatch(e.mdblclick,t),t.middleButtonDoubleClick=!1),t.wheelDelta&&(i&&(r=i.rendererEvents,r&&r.dispatch(r.mousewheel,t)),this.dispatch(e.mousewheel,t)),t.moving&&(i&&(r=i.rendererEvents,r&&r.dispatch(r.mousemove,t)),this.dispatch(e.mousemove,t),t.prev_x=t.x,t.prev_y=t.y),t.justStopped&&this.dispatch(e.mousestop,t)}handleTouchEvents(){let e=this,t=this.touchState,i=t.pickingObject,r=null;if(t.touchCancel&&(this.dispatch(e.touchcancel,t),t.touchCancel=!1),t.touchStart){let s=this.renderer;s.pickingFramebuffer.activate(),s.pickingFramebuffer.readPixels(rt,t.nx,1-t.ny,1),s.pickingFramebuffer.deactivate();let n=s.getPickingObjectArr(rt);i=t.pickingObject=n,i&&(r=i.rendererEvents,r&&r.dispatch(r.touchstart,t)),this.dispatch(e.touchstart,t),t.touchStart=!1}t.doubleTouch&&(i&&(r=i.rendererEvents,r&&r.dispatch(r.doubletouch,t)),this.dispatch(e.doubletouch,t),t.doubleTouch=!1),t.touchEnd&&(i&&(r=i.rendererEvents,r&&r.dispatch(r.touchend,t)),this.dispatch(e.touchend,t),t.x=0,t.y=0,t.touchEnd=!1),t.moving&&(i&&(r=i.rendererEvents,r&&r.dispatch(r.touchmove,t)),this.dispatch(e.touchmove,t),t.prev_x=t.x,t.prev_y=t.y)}}const vh=["draw","postdraw","resize","resizeend","mouseenter","mouseleave","mousemove","mousestop","lclick","rclick","mclick","ldblclick","rdblclick","mdblclick","lup","rup","mup","ldown","rdown","mdown","lhold","rhold","mhold","mousewheel","touchstart","touchend","touchcancel","touchmove","doubletouch","touchleave","touchenter"];function xh(){return new G("depth",{uniforms:{depthTexture:"sampler2d"},attributes:{corners:"vec2"},vertexShader:`#version 300 es
|
|
3809
|
+
}`})),this._framebuffer=new Be(this._handler,{width:this._width,height:this._height,useDepth:!1}),this._framebuffer.init()}frame(){if(this._planet.layerLock.isFree()&&this._queue.length){let e=this._handler,t=e.gl;t.disable(t.CULL_FACE),t.disable(t.DEPTH_TEST);let i=e.programs.vectorTileLineRasterization,r=e.programs.vectorTilePolygonRasterization,s=this._width,n=this._height,a=s,o=n,l=a<<1,h=o<<1,d=new Float32Array(4),f=new Float32Array(4),u=this._framebuffer.activate(),g=0,_=window.performance.now();for(;this._queue.length&&g<Yl;){let m=this._queue.shift();if(m.isLoading&&m.segment.node.getState()===$e){let v=m.layer._pickingEnabled;m.segment.tileZoom<4?(a=l,o=h):(a=s,o=n);let b=m._updateTexture||e.createEmptyTexture_l(a,o),y=v?m._updatePickingMask||e.createEmptyTexture_n(a,o):null;m.applyTexture(b,y),u.setSize(a,o),u.bindOutputTexture(b),t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT);let w=m.segment.getExtentMerc();Lt(w.southWest.lon,zt),d[0]=zt[0],f[0]=zt[1],Lt(w.southWest.lat,zt),d[1]=zt[0],f[1]=zt[1],d[2]=2/w.getWidth(),d[3]=2/w.getHeight(),r.activate();let x=r._program,T=x.attributes,A=x.uniforms,E=m.layer._geometryHandler;t.uniform4fv(A.extentParamsHigh,d),t.uniform4fv(A.extentParamsLow,f),t.bindBuffer(t.ARRAY_BUFFER,E._polyVerticesHighBufferMerc),t.vertexAttribPointer(T.coordinatesHigh,E._polyVerticesHighBufferMerc.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,E._polyVerticesLowBufferMerc),t.vertexAttribPointer(T.coordinatesLow,E._polyVerticesLowBufferMerc.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,E._polyColorsBuffer),t.vertexAttribPointer(T.colors,E._polyColorsBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,E._polyIndexesBuffer),t.drawElements(t.TRIANGLES,E._polyIndexesBuffer.numItems,t.UNSIGNED_INT,0),v&&(u.bindOutputTexture(y),t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),t.bindBuffer(t.ARRAY_BUFFER,E._polyPickingColorsBuffer),t.vertexAttribPointer(T.colors,E._polyPickingColorsBuffer.itemSize,t.FLOAT,!1,0,0),t.drawElements(t.TRIANGLES,E._polyIndexesBuffer.numItems,t.UNSIGNED_INT,0)),u.bindOutputTexture(b),i.activate(),x=i._program,T=x.attributes,A=x.uniforms,t.uniform2fv(A.viewport,[a,o]),t.uniform4fv(A.extentParamsHigh,d),t.uniform4fv(A.extentParamsLow,f);let C=E._lineVerticesHighBufferMerc;t.bindBuffer(t.ARRAY_BUFFER,C),t.vertexAttribPointer(T.prevHigh,C.itemSize,t.FLOAT,!1,8,0),t.vertexAttribPointer(T.currentHigh,C.itemSize,t.FLOAT,!1,8,32),t.vertexAttribPointer(T.nextHigh,C.itemSize,t.FLOAT,!1,8,64),C=E._lineVerticesLowBufferMerc,t.bindBuffer(t.ARRAY_BUFFER,C),t.vertexAttribPointer(T.prevLow,C.itemSize,t.FLOAT,!1,8,0),t.vertexAttribPointer(T.currentLow,C.itemSize,t.FLOAT,!1,8,32),t.vertexAttribPointer(T.nextLow,C.itemSize,t.FLOAT,!1,8,64),t.bindBuffer(t.ARRAY_BUFFER,E._lineOrdersBuffer),t.vertexAttribPointer(T.order,E._lineOrdersBuffer.itemSize,t.FLOAT,!1,4,0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,E._lineIndexesBuffer),t.bindBuffer(t.ARRAY_BUFFER,E._lineStrokesBuffer),t.vertexAttribPointer(T.thickness,E._lineStrokesBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,E._lineStrokeColorsBuffer),t.vertexAttribPointer(T.color,E._lineStrokeColorsBuffer.itemSize,t.FLOAT,!1,0,0),t.uniform1f(A.thicknessOutline,2),t.uniform1f(A.alpha,.54),t.drawElements(t.TRIANGLE_STRIP,E._lineIndexesBuffer.numItems,t.UNSIGNED_INT,0),t.uniform1f(A.thicknessOutline,1),t.uniform1f(A.alpha,1),t.drawElements(t.TRIANGLE_STRIP,E._lineIndexesBuffer.numItems,t.UNSIGNED_INT,0),t.bindBuffer(t.ARRAY_BUFFER,E._lineThicknessBuffer),t.vertexAttribPointer(T.thickness,E._lineThicknessBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,E._lineColorsBuffer),t.vertexAttribPointer(T.color,E._lineColorsBuffer.itemSize,t.FLOAT,!1,0,0),t.uniform1f(A.thicknessOutline,2),t.uniform1f(A.alpha,.54),t.drawElements(t.TRIANGLE_STRIP,E._lineIndexesBuffer.numItems,t.UNSIGNED_INT,0),t.uniform1f(A.thicknessOutline,1),t.uniform1f(A.alpha,1),t.drawElements(t.TRIANGLE_STRIP,E._lineIndexesBuffer.numItems,t.UNSIGNED_INT,0),v&&(u.bindOutputTexture(y),t.uniform1f(A.thicknessOutline,8),t.bindBuffer(t.ARRAY_BUFFER,E._linePickingColorsBuffer),t.vertexAttribPointer(T.color,E._linePickingColorsBuffer.itemSize,t.FLOAT,!1,0,0),t.drawElements(t.TRIANGLE_STRIP,E._lineIndexesBuffer.numItems,t.UNSIGNED_INT,0))}else m.isLoading=!1;g=window.performance.now()-_}t.enable(t.DEPTH_TEST),t.enable(t.CULL_FACE),u.deactivate()}}add(e){this._queue.push(e)}remove(e){}get queueSize(){return this._queue.length}}class Wl{constructor(e=1,t=1){this._a=e,this._b=t,this._flattening=(e-t)/e,this._f=1/this._flattening,this._a2=e*e,this._b2=t*t;const i=Math.sqrt(this._a2-this._b2);this._e=i/e,this._e2=this._e*this._e,this._e22=this._e2*this._e2,this._k=i/t,this._k2=this._k*this._k,this._radii=new p(e,e,t),this._radii2=new p(this._a2,this._a2,this._b2),this._invRadii=new p(1/e,1/e,1/t),this._invRadii2=new p(1/this._a2,1/this._a2,1/this._b2)}rhumbDistanceTo(e,t){const i=e.lat*O,r=t.lat*O,s=r-i;let n=Math.abs(t.lon-e.lon)*O;Math.abs(n)>Math.PI&&(n=n>0?-(2*Math.PI-n):2*Math.PI+n);const a=Math.log(Math.tan(r/2+Math.PI/4)/Math.tan(i/2+Math.PI/4)),o=Math.abs(a)>1e-11?s/a:Math.cos(i);return Math.sqrt(s*s+o*o*n*n)*this._a}getIntermediatePointOnGreatCircle(e,t,i){if(i==0)return e.clone();if(i==1)return t.clone();const r=this.inverse(e,t),s=r.distance,n=r.initialAzimuth;return isNaN(n)?e:this.getGreatCircleDestination(e,n,s*i)}static getBearing(e,t){let i=e.lat*O,r=e.lon*O,s=t.lat*O,n=t.lon*O,a=Math.sin(n-r)*Math.cos(s),o=Math.cos(i)*Math.sin(s)-Math.sin(i)*Math.cos(s)*Math.cos(n-r);return Math.atan2(a,o)*we}getFlattening(){return this._flattening}getEquatorialSize(){return this._a}get equatorialSize(){return this._a}get equatorialSizeSqr(){return this._a2}getPolarSize(){return this._b}get polarSize(){return this._b}get polarSizeSqr(){return this._b2}lonLatToCartesian(e){return this.geodeticToCartesian(e.lon,e.lat,e.height)}lonLatToCartesianRes(e,t){return this.geodeticToCartesian(e.lon,e.lat,e.height,t)}geodeticToCartesian(e,t,i=0,r=new p){let s=O*t,n=O*e,a=Math.sin(s),o=this._a/Math.sqrt(1-this._e2*a*a),l=(o+i)*Math.cos(s);return r.x=l*Math.cos(n),r.y=l*Math.sin(n),r.z=(o*(1-this._e2)+i)*a,r}projToSurface(e){let t=e.x||0,i=e.y||0,r=e.z||0,s=Math.sqrt(t*t+i*i+r*r);if(s===0)return this.lonLatToCartesian(new B);let n=this._invRadii2.x,a=this._invRadii2.y,o=this._invRadii2.z,l=t*t*n,h=i*i*a,d=r*r*o,f=l+h+d,u=Math.sqrt(1/f),g=e.scaleTo(u);if(f<On)return Number.isFinite(u)?g:new p;let _=(1-u)*s/g.mulA(this._invRadii2).length(),m=0,v=0,b=0;do{m=1/(1+_*n),v=1/(1+_*a),b=1/(1+_*o);let y=m*m,w=v*v,x=b*b,T=l*y+h*w+d*x-1;if(Math.abs(T)<Rr)break;let A=y*m,E=w*v,C=x*b;_+=.5*T/(l*A*n+h*E*a+d*C*o)}while(!0);return new p(t*m,i*v,r*b)}cartesianToLonLat(e){return this.cartesianToLonLatRes(e)}cartesianToLonLatRes(e,t=new B){let i=this.projToSurface(e),r=this.getSurfaceNormal3v(i),s=e.sub(i);return t.lon=Math.atan2(r.y,r.x)*we,t.lat=Math.asin(r.z)*we,t.height=Math.sign(s.dot(e))*s.length(),t}getSurfaceNormal3v(e){let t=this._invRadii2,i=e.x*t.x,r=e.y*t.y,s=e.z*t.z,n=1/Math.sqrt(i*i+r*r+s*s);return new p(i*n,r*n,s*n)}getGreatCircleDistance(e,t){return this.inverse(e,t).distance}getGreatCircleDestination(e,t,i){return this.direct(e,t,i).destination}inverse(e,t){let i=this._a,r=this._b,s=this._flattening;const n=e.lat*O,a=e.lon*O,o=t.lat*O,h=t.lon*O-a,d=(1-s)*Math.tan(n),f=1/Math.sqrt(1+d*d),u=d*f,g=(1-s)*Math.tan(o),_=1/Math.sqrt(1+g*g),m=g*_,v=Math.abs(h)>Math.PI/2||Math.abs(o-n)>Math.PI/2;let b=h,y=null,w=null,x=v?Math.PI:0,T=0,A=v?-1:1,E=null,C=1,P=1,I=null,k=0;do{if(y=Math.sin(b),w=Math.cos(b),E=(_*y)**2+(f*m-u*_*w)**2,Math.abs(E)<1e-24)break;T=Math.sqrt(E),A=u*m+f*_*w,x=Math.atan2(T,A);const st=f*_*y/T;P=1-st*st,C=P!=0?A-2*u*m/P:0;const W=s/16*P*(4+s*(4-3*P));I=b,b=h+(1-W)*s*st*(x+W*T*(C+W*A*(-1+2*C*C)))}while(Math.abs(b-I)>Rr&&++k<1e3);const z=P*(i*i-r*r)/(r*r),L=1+z/16384*(4096+z*(-768+z*(320-175*z))),S=z/1024*(256+z*(-128+z*(74-47*z))),F=S*T*(C+S/4*(A*(-1+2*C*C)-S/6*C*(-3+4*T*T)*(-3+4*C*C))),R=r*L*(x-F),M=Math.abs(E)<Number.EPSILON?0:Math.atan2(_*y,f*m-u*_*w),j=Math.abs(E)<Number.EPSILON?Math.PI:Math.atan2(f*y,-u*_+f*m*w);return{distance:R,initialAzimuth:Math.abs(R)<Number.EPSILON?NaN:Ir(M)*we,finalAzimuth:Math.abs(R)<Number.EPSILON?NaN:Ir(j)*we}}direct(e,t,i){let r=e.lon,s=e.lat,n=this._a,a=this._b,o=this._flattening,l=i,h=t*O,d=Math.sin(h),f=Math.cos(h),u=(1-o)*Math.tan(s*O),g=1/Math.sqrt(1+u*u),_=u*g,m=Math.atan2(u,f),v=g*d,b=1-v*v,y=b*(n*n-a*a)/(a*a),w=1+y/16384*(4096+y*(-768+y*(320-175*y))),x=y/1024*(256+y*(-128+y*(74-47*y))),T=l/(a*w),A=2*Math.PI,E=0,C=0,P=0,I=0;for(;Math.abs(T-A)>1e-12;)E=Math.cos(2*m+T),C=Math.sin(T),P=Math.cos(T),I=x*C*(E+x/4*(P*(-1+2*E*E)-x/6*E*(-3+4*C*C)*(-3+4*E*E))),A=T,T=l/(a*w)+I;let k=_*C-g*P*f,z=Math.atan2(_*P+g*C*f,(1-o)*Math.sqrt(v*v+k*k)),L=Math.atan2(C*d,g*P-_*C*f),S=o/16*b*(4+o*(4-3*b)),F=L-(1-S)*o*v*(T+S*C*(E+S*P*(-1+2*E*E))),R=Math.atan2(v,-k);return{destination:new B(r+F*we,z*we),finalAzimuth:R*we}}hitRay(e,t){let i=this._invRadii.mul(e),r=this._invRadii.mul(t),s=i.dot(i),n=i.dot(r),a,o,l,h,d;if(s>1){if(n>=0)return;var f=n*n;if(a=s-1,o=r.dot(r),l=o*a,Math.abs(f-l)>Vn&&f<l)return;if(f>l){h=n*n-l,d=-n+Math.sqrt(h);var u=d/o,g=a/d;return u<g?e.add(t.scaleTo(u)):e.add(t.scaleTo(g))}else{var _=Math.sqrt(a/o);return e.add(t.scaleTo(_))}}else{if(s<1)return a=s-1,o=r.dot(r),l=o*a,h=n*n-l,d=-n+Math.sqrt(h),e.add(t.scaleTo(d/o));if(n<0)return o=r.dot(r),e.add(t.scaleTo(-n/o))}}getNorthFrameRotation(e){let t=this.getSurfaceNormal3v(e),i=p.proj_b_to_plane(p.NORTH,t);return D.getLookRotation(i,t)}getBearingDestination(e,t=0,i=0){t=t*O;var r=(e.lon+540)%360-180,s=e.lat*O,n=r*O,a=i/this._a,o=Math.asin(Math.sin(s)*Math.cos(a)+Math.cos(s)*Math.sin(a)*Math.cos(t));return new B((n+Math.atan2(Math.sin(t)*Math.sin(a)*Math.cos(s),Math.cos(a)-Math.sin(s)*Math.sin(o)))*we,o*we)}static getIntermediatePointOnGreatCircle(e,t,i){var r=e.lat*O,s=e.lon*O,n=t.lat*O,a=t.lon*O,o=Math.sin(r),l=Math.cos(r),h=Math.sin(s),d=Math.cos(s),f=Math.sin(n),u=Math.cos(n),g=Math.sin(a),_=Math.cos(a),m=n-r,v=a-s,b=Math.sin(m/2)*Math.sin(m/2)+Math.cos(r)*Math.cos(n)*Math.sin(v/2)*Math.sin(v/2),y=2*Math.atan2(Math.sqrt(b),Math.sqrt(1-b)),w=Math.sin((1-i)*y)/Math.sin(y),x=Math.sin(i*y)/Math.sin(y),T=w*l*d+x*u*_,A=w*l*h+x*u*g,E=w*o+x*f,C=Math.atan2(E,Math.sqrt(T*T+A*A)),P=Math.atan2(A,T);return new B((P*we+540)%360-180,C*we)}static getRhumbBearing(e,t){var i=(t.lon-e.lon)*O,r=Math.log(Math.tan(t.lat*O/2+Math.PI/4)/Math.tan(e.lat*O/2+Math.PI/4));return Math.abs(i)>Math.PI&&(i>0?i=(2*Math.PI-i)*-1:i=2*Math.PI+i),(Math.atan2(i,r)*we+360)%360}}const Xl=new Wl(6378137,6356752314245179e-9),wn=250,Zl=312,$l=190;let it=new Uint8Array(4),Tn=new Uint8Array(4);const Kl=11,Ql=200,Jl=.81;class eh extends Oa{constructor(e={}){super(e.name),this.ellipsoid=e.ellipsoid||Xl,this.lightEnabled=!0,this._planetRadius2=this.ellipsoid.getPolarSize()*this.ellipsoid.getPolarSize(),this._layers=[],this._updateLayer=!1,this.visibleTileLayers=[],this.visibleVectorLayers=[],this._visibleTileLayerSlices=[],this._frustumEntityCollections=[],this.baseLayer=null,this.terrain=null,this.camera=new Ul(this,{frustums:e.frustums,eye:new p(25e6,0,0),look:p.ZERO,up:p.NORTH,minAltitude:e.minAltitude,maxAltitude:e.maxAltitude}),this.maxEqualZoomAltitude=e.maxEqualZoomAltitude||15e6,this.minEqualZoomAltitude=e.minEqualZoomAltitude||1e4,this.minEqualZoomCameraSlope=e.minEqualZoomCameraSlope||.8,this.mousePositionOnEarth=new p,this.emptyTexture=null,this.transparentTexture=null,this.defaultTexture=null,this.minCurrZoom=fe,this.maxCurrZoom=pe,this._viewExtent=new U(new B(180,180),new B(-180,-180)),this._skipPreRender=!1,this._initialViewExtent=null,this._createdNodesCount=0,this._renderedNodes=[],this._renderedNodesInFrustum=[],this._visibleNodes={},this._visibleNodesNorth={},this._visibleNodesSouth={},this.layerLock=new dr,this.terrainLock=new dr,this._heightFactor=1,this._indexesCache=[],this._indexesCacheToRemove=[],this._indexesCacheToRemoveCounter=0,this._textureCoordsBufferCache=[],this.quadTreeStrategy=e.quadTreeStrategyPrototype?new e.quadTreeStrategyPrototype(this):new Fl(this),this._nightTexture=null,this._specularTexture=null;let t=Se(e.ambient,new p(.2,.2,.3)),i=Se(e.diffuse,new p(1,1,1)),r=Se(e.specular,new p(63e-5,55e-5,32e-5)),s=e.shininess||18;this._ambient=new Float32Array([t.x,t.y,t.z]),this._diffuse=new Float32Array([i.x,i.y,i.z]),this._specular=new Float32Array([r.x,r.y,r.z,s]),this._maxGridSize=Math.log2(e.maxGridSize||256),this.SLICE_SIZE=4,this.SLICE_SIZE_4=this.SLICE_SIZE*4,this.SLICE_SIZE_3=this.SLICE_SIZE*3,this._lodSize=wn,this._curLodSize=wn,this._minLodSize=Zl,this._maxLodSize=$l,this._pickingColorArr=new Float32Array(this.SLICE_SIZE_4),this._samplerArr=new Int32Array(this.SLICE_SIZE),this._pickingMaskArr=new Int32Array(this.SLICE_SIZE),this._geoImageCreator=new kl(this),this._vectorTileCreator=new ql(this),this._normalMapCreator=new Nl(this),this._terrainWorker=new Gl(3),this._plainSegmentWorker=new Hl(3),this._tileLoader=new xn(e.maxLoadingRequests||12),this._memKey=new tt,this.events=We(th),this._distBeforeMemClear=0,this._prevCamEye=new p,this._initialized=!1,this.always=[],this._renderCompleted=!1,this._renderCompletedActivated=!1,this._terrainCompleted=!1,this._terrainCompletedActivated=!1,this._collectRenderNodesIsActive=!0,this.nightTextureCoefficient=2,this._renderScreenNodesPASS=this._renderScreenNodesPASSNoAtmos,this._atmosphereEnabled=e.atmosphereEnabled||!1,this._atmosphereMaxMinOpacity=new Float32Array([1,.41]),this.solidTextureOne=null,this.solidTextureTwo=null,this._nightTextureSrc=e.nightTextureSrc||null,this._specularTextureSrc=e.specularTextureSrc||null}get terrainReady(){return this._terrainCompleted&&this._terrainCompletedActivated}get maxGridSize(){return this._maxGridSize}getNorthFrameRotation(e){return this.ellipsoid.getNorthFrameRotation(e)}set atmosphereMaxOpacity(e){this._atmosphereMaxMinOpacity[0]=e}get atmosphereMaxOpacity(){return this._atmosphereMaxMinOpacity[0]}set atmosphereMinOpacity(e){this._atmosphereMaxMinOpacity[1]=e}get atmosphereMinOpacity(){return this._atmosphereMaxMinOpacity[1]}set atmosphereEnabled(e){e!=this._atmosphereEnabled&&(this._atmosphereEnabled=e,this._initializeAtmosphere())}get atmosphereEnabled(){return this._atmosphereEnabled}set diffuse(e){let t=Se(e);this._diffuse=new Float32Array(t.toArray())}set ambient(e){let t=Se(e);this._ambient=new Float32Array(t.toArray())}set specular(e){let t=Se(e);this._specular=new Float32Array([t.x,t.y,t.y,this._specular[3]])}set shininess(e){this._specular[3]=e}get normalMapCreator(){return this._normalMapCreator}get layers(){return[...this._layers]}getLayers(){return this.layers}get sunPos(){return this.renderer.controls.sun.sunlight.getPosition()}addControl(e){e.planet=this,e.addTo(this.renderer)}get lodSize(){return this._lodSize}setLodSize(e,t,i){this._maxLodSize=i||this._maxLodSize,this._minLodSize=t||this._minLodSize,this._curLodSize=e,this._renderCompletedActivated=!1,this._terrainCompletedActivated=!1}addControls(e){for(let t=0;t<e.length;t++)this.addControl(e[t])}getLayerByName(e){for(let t=0,i=this._layers.length;t<i;t++)if(e===this._layers[t].name)return this._layers[t]}addLayer(e){e.addTo(this)}_onLayerVisibilityChanged(e){this.events.dispatch(this.events.layervisibilitychange,e)}addLayers(e){for(let t=0,i=e.length;t<i;t++)this.addLayer(e[t])}removeLayer(e){e.remove()}_clearLayerMaterial(e){this.quadTreeStrategy.clearLayerMaterial(e)}setBaseLayer(e){this.baseLayer?this.baseLayer.isEqual(e)||(this.baseLayer.setVisibility(!1),this.baseLayer=e,e.setVisibility(!0),this.events.dispatch(this.events.baselayerchange,e)):(this.baseLayer=e,this.baseLayer.setVisibility(!0),this.events.dispatch(this.events.baselayerchange,e))}setHeightFactor(e){this._renderCompletedActivated=!1,this._terrainCompletedActivated=!1,this._heightFactor!==e&&(this._heightFactor=e,this.quadTreeStrategy.destroyBranches(),this._clearRenderedNodeList(),this._clearRenderNodesInFrustum())}getHeightFactor(){return this._heightFactor}setTerrain(e){this._renderCompletedActivated=!1,this._terrainCompletedActivated=!1,this._initialized&&this.memClear(),this.terrain&&(this.terrain.abortLoading(),this.terrain.clearCache(),this.terrain._planet=null),this.terrain=e,this.terrain._planet=this,this.quadTreeStrategy.destroyBranches(),e._geoid.model?(this._plainSegmentWorker.setGeoid(e.getGeoid()),e._isReady=!0):vn.loadModel(e.geoid.src).then(t=>{e.geoid.setModel(t),this._plainSegmentWorker.setGeoid(e.getGeoid()),e._isReady=!0}).catch(t=>{console.warn(t)})}_initializeAtmosphere(){let e=this.renderer.handler;e.removeProgram("drawnode_screen_wl"),this._atmosphereEnabled?(this._renderScreenNodesPASS=this._renderScreenNodesPASSAtmos,e.isWebGl2()?e.addProgram(Al(),!0):e.addProgram(cn(),!0),this.renderer.controls.Atmosphere?this.renderer.controls.Atmosphere.activate():this.addControl(new Ll),this.renderer.controls.SimpleSkyBackground&&this.renderer.controls.SimpleSkyBackground.deactivate()):(this._renderScreenNodesPASS=this._renderScreenNodesPASSNoAtmos,this.renderer.controls.Atmosphere&&this.renderer.controls.Atmosphere.deactivate(),this.renderer.controls.SimpleSkyBackground?this.renderer.controls.SimpleSkyBackground.activate():this.addControl(new rl),e.isWebGl2()?e.addProgram(Tl(),!0):e.addProgram(cn(),!0))}_initializeShaders(){let e=this.renderer.handler;e.addProgram(wl(),!0),e.addProgram(El(),!0),e.addProgram(Pl(),!0),e.addProgram(Cl(),!0),this.renderer.addPickingCallback(this,this._renderColorPickingFramebufferPASS),this.renderer.addDepthCallback(this,this._renderDepthFramebufferPASS),this.renderer.addDistanceCallback(this,this._renderDistanceFramebufferPASS)}_onLayerLoadend(e){this.events.dispatch(this.events.layerloadend,e)}init(){this._tileLoader.events.on("layerloadend",this._onLayerLoadend,this),Bi().setMaxGridSize(this._maxGridSize);const e=this._maxGridSize;let t=0;for(let r=0;r<=e;r++){!this._indexesCache[r]&&(this._indexesCache[r]=new Array(e));for(let s=0;s<=e;s++){!this._indexesCache[r][s]&&(this._indexesCache[r][s]=new Array(e));for(let n=0;n<=e;n++){!this._indexesCache[r][s][n]&&(this._indexesCache[r][s][n]=new Array(e));for(let a=0;a<=e;a++){!this._indexesCache[r][s][n][a]&&(this._indexesCache[r][s][n][a]=new Array(e));for(let o=0;o<=e;o++){let l={buffer:null};if(r>=1&&r===s&&r===n&&r===a&&r===o){let h=Bi().createSegmentIndexes(r,[s,n,a,o]);l.buffer=this.renderer.handler.createElementArrayBuffer(h,1)}else this._indexesCacheToRemove[t++]=l;this._indexesCache[r][s][n][a][o]=l}}}}}this.renderer.events.on("resize",()=>{this._renderCompletedActivated=!1,this._terrainCompletedActivated=!1}),this._textureCoordsBufferCache=[];let i=Bi().initTextureCoordsTable(e+1);for(let r=0;r<=e;r++)this._textureCoordsBufferCache[r]=this.renderer.handler.createArrayBuffer(i[r],2,((1<<r)+1)*((1<<r)+1));this.renderer.handler.createDefaultTexture(null,r=>{this.solidTextureOne=r,this.solidTextureTwo=r}),this.transparentTexture=this.renderer.handler.transparentTexture,this._renderedNodesInFrustum=new Array(this.camera.frustums.length);for(let r=0,s=this._renderedNodesInFrustum.length;r<s;r++)this._renderedNodesInFrustum[r]=[];if(this.quadTreeStrategy.init(),this.drawMode=this.renderer.handler.gl.TRIANGLE_STRIP,this._initializeShaders(),this._initializeAtmosphere(),this._updateVisibleLayers(),this.renderer.addPickingCallback(this,this._frustumEntityCollectionPickingCallback),this._nightTextureSrc){let r=new Image;r.crossOrigin="Anonymous",r.onload=()=>{this._nightTexture=this.renderer.handler.createTextureDefault(r),this._nightTexture.default=!0},r.src=this._nightTextureSrc}if(this._specularTextureSrc){let r=new Image;r.crossOrigin="Anonymous",r.onload=()=>{this._specularTexture=this.renderer.handler.createTextureDefault(r),this._specularTexture.default=!0},r.src=this._specularTextureSrc}this._geoImageCreator.init(),this._vectorTileCreator.init(),this._normalMapCreator.init(),this.renderer.events.on("draw",this._globalPreDraw,this,-100),this._preRender(),this.renderer.events.on("postdraw",()=>{this._checkRendercompleted()}),this.initLayers(),this._initialized=!0,this._initialViewExtent&&this.viewExtent(this._initialViewExtent),this.renderer.activeCamera=this.camera,this.camera.bindRenderer(this.renderer),this.camera.update()}initLayers(){let e=[...this._layers];for(let t=0;t<e.length;t++)this.removeLayer(e[t]),this.addLayer(e[t])}_clearIndexesCache(){this._indexesCacheToRemoveCounter=0;let e=this._indexesCacheToRemove,t=this.renderer.handler.gl;for(let i=0,r=e.length;i<r;i++){let s=e[i];t.deleteBuffer(s.buffer),s.buffer=null}}_preRender(){this.quadTreeStrategy.preRender(),this._preLoad()}_preLoad(){this._clearRenderedNodeList(),this._skipPreRender=!1,this.quadTreeStrategy.preLoad()}createDefaultTextures(e,t){this.renderer.handler.gl.deleteTexture(this.solidTextureOne),this.renderer.handler.gl.deleteTexture(this.solidTextureTwo),this.renderer.handler.createDefaultTexture(e,i=>{this.solidTextureOne=i}),this.renderer.handler.createDefaultTexture(t,i=>{this.solidTextureTwo=i})}_getLayerAttributionHTML(e){return`<div class="og-attribution__layer">${e.getAttribution()}</div>`}updateAttributionsList(){let e="";for(let t=0,i=this._layers.length;t<i;t++){let r=this._layers[t];r.getVisibility()&&r.getAttribution().length&&(e+=this._getLayerAttributionHTML(r))}this._applyAttribution(e)}updateVisibleLayers(){this._updateLayer=!0}_updateVisibleLayers(){this.visibleTileLayers=[],this.visibleTileLayers.length=0,this.visibleVectorLayers=[],this.visibleVectorLayers.length=0;let e="";for(let t=0,i=this._layers.length;t<i;t++){let r=this._layers[t];r.getVisibility()?(r.isBaseLayer()&&(this.createDefaultTextures(r._defaultTextures[0],r._defaultTextures[1]),this.baseLayer=r),r.hasImageryTiles()&&this.visibleTileLayers.push(r),r.isVector&&this.visibleVectorLayers.push(r),r.getAttribution().length&&(e+=this._getLayerAttributionHTML(r))):r._fading&&r._fadingOpacity>0&&(r.hasImageryTiles()&&this.visibleTileLayers.push(r),r.isVector&&this.visibleVectorLayers.push(r))}this._applyAttribution(e),this._sortLayers()}_applyAttribution(e){this.renderer&&this.renderer.div&&(e.length?this.renderer.div.attributions.innerHTML!==e&&(this.renderer.div.attributions.innerHTML=e):this.renderer.div.attributions.innerHTML="")}_sortLayers(){if(this.visibleVectorLayers.sort((e,t)=>e.getZIndex()-t.getZIndex()||e.getHeight()-t.getHeight()),this._visibleTileLayerSlices=[],this._visibleTileLayerSlices.length=0,this.visibleTileLayers.length){this.visibleTileLayers.sort((i,r)=>i.getHeight()-r.getHeight()||i.getZIndex()-r.getZIndex());let e=-1,t=this.visibleTileLayers[0].getHeight();for(let i=0,r=this.visibleTileLayers.length;i<r;i++)(i%this.SLICE_SIZE===0||this.visibleTileLayers[i].getHeight()!==t)&&(e++,this._visibleTileLayerSlices[e]=[],t=this.visibleTileLayers[i].getHeight()),this._visibleTileLayerSlices[e].push(this.visibleTileLayers[i])}}_clearRenderedNodeList(){this._renderedNodes.length=0,this._renderedNodes=[]}_clearRenderNodesInFrustum(){for(let e=0,t=this._renderedNodesInFrustum.length;e<t;e++)this._renderedNodesInFrustum[e].length=0,this._renderedNodesInFrustum[e]=[]}_collectRenderNodes(){let e=this.camera;if(this._lodSize=Gn(e.slope<0?0:e.slope,this._curLodSize,this._minLodSize),e._insideSegment=null,this._clearRenderedNodeList(),this._clearRenderNodesInFrustum(),this._viewExtent.southWest.set(180,180),this._viewExtent.northEast.set(-180,-180),this._visibleNodes={},this._visibleNodesNorth={},this._visibleNodesSouth={},this.minCurrZoom=fe,this.maxCurrZoom=pe,this.quadTreeStrategy.collectRenderNodes(),e.slope>this.minEqualZoomCameraSlope&&e._lonLat.height<this.maxEqualZoomAltitude&&e._lonLat.height>this.minEqualZoomAltitude){this.minCurrZoom=this.maxCurrZoom;let t=this._renderedNodes,i=this._renderedNodesInFrustum,r=[];this._clearRenderNodesInFrustum(),this._renderedNodes=[];for(let s=0,n=t.length;s<n;s++){let a=t[s],o=a.segment.centerNormal.dot(e._b);if(a.segment.tileZoom===this.maxCurrZoom||o<Jl){this._renderedNodes.push(a);let l=0,h=a.inFrustum;for(;h;)h&1&&i[l].push(a),l++,h>>=1}else r.push(a)}for(let s=0,n=r.length;s<n;s++)r[s].renderTree(e,this.maxCurrZoom,null)}}_globalPreDraw(){let e=this.camera;this.renderer.__useDistanceFramebuffer__=!this.terrain.isEmpty,this._distBeforeMemClear+=this._prevCamEye.distance(e.eye),this._prevCamEye.copy(e.eye),e.checkFly(),this._createdNodesCount>Ql&&this._distBeforeMemClear>1e3&&(this.terrain.clearCache(),this.memClear()),this._indexesCacheToRemoveCounter>600&&this._clearIndexesCache()}preFrame(){this._updateLayer&&(this._updateLayer=!1,this._updateVisibleLayers()),this.camera.isFirstPass&&(this.camera.update(),this._skipPreRender&&this._collectRenderNodesIsActive&&this._collectRenderNodes(),this._skipPreRender=!0,this.transformLights(),this._normalMapCreator.frame(),this._geoImageCreator.frame(),this._vectorTileCreator.frame(),this.camera.checkTerrainCollision(),this.camera.update(),this.events.dispatch(this.events.draw,this),this._collectVectorLayerCollections()),this.drawEntityCollections(this._frustumEntityCollections)}frame(){this._renderScreenNodesPASS()}_checkRendercompleted(){this._renderCompleted?this._renderCompletedActivated||(this._renderCompletedActivated=!0,this.events.dispatch(this.events.rendercompleted,!0)):this._renderCompletedActivated=!1,this._renderCompleted=!0,this._terrainCompleted?this._terrainCompletedActivated||(this._terrainCompletedActivated=!0,this.events.dispatch(this.events.terraincompleted,!0)):this._terrainCompletedActivated=!1,this._terrainCompleted=!0}lockQuadTree(){this._collectRenderNodesIsActive=!1,this.camera.setTerrainCollisionActivity(!1)}unlockQuadTree(){this._collectRenderNodesIsActive=!0,this.camera.setTerrainCollisionActivity(!0)}_renderScreenNodesPASSNoAtmos(){let e,t,i=this.renderer,r=i.handler,s=r.gl,n=i.activeCamera,a=n.isFirstPass,o=n.currentFrustumIndex;s.enable(s.CULL_FACE),i.enableBlendOneSrcAlpha(),this.lightEnabled?(r.programs.drawnode_screen_wl.activate(),e=r.programs.drawnode_screen_wl._program,t=e.uniforms,s.uniform3fv(t.lightsPositions,this._lightsPositions),s.uniformMatrix4fv(t.viewMatrix,!1,n.getViewMatrix()),s.uniformMatrix4fv(t.projectionMatrix,!1,n.getProjectionMatrix()),this.baseLayer?(s.uniform3fv(t.diffuse,this.baseLayer._diffuse||this._diffuse),s.uniform3fv(t.ambient,this.baseLayer._ambient||this._ambient),s.uniform4fv(t.specular,this.baseLayer._specular||this._specular),s.uniform1f(t.nightTextureCoefficient,this.baseLayer.nightTextureCoefficient||this.nightTextureCoefficient)):(s.uniform3fv(t.diffuse,this._diffuse),s.uniform3fv(t.ambient,this._ambient),s.uniform4fv(t.specular,this._specular),s.uniform1f(t.nightTextureCoefficient,this.nightTextureCoefficient)),s.activeTexture(s.TEXTURE0+this.SLICE_SIZE),s.bindTexture(s.TEXTURE_2D,this._nightTexture||this.transparentTexture),s.uniform1i(t.nightTexture,this.SLICE_SIZE),s.activeTexture(s.TEXTURE0+this.SLICE_SIZE+1),s.bindTexture(s.TEXTURE_2D,this._specularTexture||this.transparentTexture),s.uniform1i(t.specularTexture,this.SLICE_SIZE+1),s.uniform1f(t.camHeight,n.getHeight())):(r.programs.drawnode_screen_nl.activate(),e=r.programs.drawnode_screen_nl._program,t=e.uniforms,s.uniformMatrix4fv(t.viewMatrix,!1,n.getViewMatrix()),s.uniformMatrix4fv(t.projectionMatrix,!1,n.getProjectionMatrix())),s.uniform3fv(t.eyePositionHigh,n.eyeHigh),s.uniform3fv(t.eyePositionLow,n.eyeLow);let l=this._renderedNodesInFrustum[o],h=this._visibleTileLayerSlices;if(h.length){let u=h[0];for(let g=u.length-1;g>=0;--g){let _=u[g];_._fading&&a&&_._refreshFadingOpacity()&&u.splice(g,1)}}let d=this.terrain.equalizeVertices,f=l.length;for(;f--;){let u=l[f].segment;d&&u.equalize(),u.readyToEngage&&u.engage(),u.screenRendering(e,h[0],0)}s.enable(s.POLYGON_OFFSET_FILL);for(let u=1,g=h.length;u<g;u++){let _=h[u];for(f=_.length-1;f>=0;--f){let m=_[f];m._fading&&a&&m._refreshFadingOpacity()&&_.splice(f,1)}for(s.polygonOffset(0,-u),f=l.length;f--;)l[f].segment.screenRendering(e,h[u],u,this.transparentTexture,!0)}s.disable(s.POLYGON_OFFSET_FILL)}_renderScreenNodesPASSAtmos(){let e,t,i=this.renderer,r=i.handler,s=r.gl,n=i.activeCamera,a=n.isFirstPass,o=n.currentFrustumIndex;s.enable(s.CULL_FACE),i.enableBlendOneSrcAlpha(),this.lightEnabled?(r.programs.drawnode_screen_wl.activate(),e=r.programs.drawnode_screen_wl._program,t=e.uniforms,s.uniform3fv(t.lightsPositions,this._lightsPositions),s.uniformMatrix4fv(t.viewMatrix,!1,n.getViewMatrix()),s.uniformMatrix4fv(t.projectionMatrix,!1,n.getProjectionMatrix()),this.baseLayer?(s.uniform3fv(t.diffuse,this.baseLayer._diffuse||this._diffuse),s.uniform3fv(t.ambient,this.baseLayer._ambient||this._ambient),s.uniform4fv(t.specular,this.baseLayer._specular||this._specular),s.uniform1f(t.nightTextureCoefficient,this.baseLayer.nightTextureCoefficient||this.nightTextureCoefficient)):(s.uniform3fv(t.diffuse,this._diffuse),s.uniform3fv(t.ambient,this._ambient),s.uniform4fv(t.specular,this._specular),s.uniform1f(t.nightTextureCoefficient,this.nightTextureCoefficient)),s.uniform2fv(t.maxMinOpacity,this._atmosphereMaxMinOpacity),s.activeTexture(s.TEXTURE0+this.SLICE_SIZE),s.bindTexture(s.TEXTURE_2D,this._nightTexture||this.transparentTexture),s.uniform1i(t.nightTexture,this.SLICE_SIZE),s.activeTexture(s.TEXTURE0+this.SLICE_SIZE+1),s.bindTexture(s.TEXTURE_2D,this._specularTexture||this.transparentTexture),s.uniform1i(t.specularTexture,this.SLICE_SIZE+1),s.activeTexture(s.TEXTURE0+this.SLICE_SIZE+4),s.bindTexture(s.TEXTURE_2D,i.controls.Atmosphere._transmittanceBuffer.textures[0]),s.uniform1i(t.transmittanceTexture,this.SLICE_SIZE+4),s.activeTexture(s.TEXTURE0+this.SLICE_SIZE+5),s.bindTexture(s.TEXTURE_2D,i.controls.Atmosphere._scatteringBuffer.textures[0]),s.uniform1i(t.scatteringTexture,this.SLICE_SIZE+5),s.uniform1f(t.camHeight,n.getHeight())):(r.programs.drawnode_screen_nl.activate(),e=r.programs.drawnode_screen_nl._program,t=e.uniforms,s.uniformMatrix4fv(t.viewMatrix,!1,n.getViewMatrix()),s.uniformMatrix4fv(t.projectionMatrix,!1,n.getProjectionMatrix())),s.uniform3fv(t.eyePositionHigh,n.eyeHigh),s.uniform3fv(t.eyePositionLow,n.eyeLow);let l=this._renderedNodesInFrustum[o],h=this._visibleTileLayerSlices;if(h.length){let u=h[0];for(let g=u.length-1;g>=0;--g){let _=u[g];_._fading&&a&&_._refreshFadingOpacity()&&u.splice(g,1)}}let d=this.terrain.equalizeVertices,f=l.length;for(;f--;){let u=l[f].segment;d&&u.equalize(),u.readyToEngage&&u.engage(),u.screenRendering(e,h[0],0)}s.enable(s.POLYGON_OFFSET_FILL);for(let u=1,g=h.length;u<g;u++){let _=h[u];for(f=_.length-1;f>=0;--f){let m=_[f];m._fading&&a&&m._refreshFadingOpacity()&&_.splice(f,1)}for(s.polygonOffset(0,-u),f=l.length;f--;)l[f].segment.screenRendering(e,h[u],u,this.transparentTexture,!0)}s.disable(s.POLYGON_OFFSET_FILL)}_renderDistanceFramebufferPASS(){if(!this.terrain.isEmpty){let e,t=this.renderer,i=t.handler,r=i.gl,s=t.activeCamera;i.programs.drawnode_heightPicking.activate(),e=i.programs.drawnode_heightPicking._program;let n=e.uniforms;r.uniformMatrix4fv(n.viewMatrix,!1,s.getViewMatrix()),r.uniformMatrix4fv(n.projectionMatrix,!1,s.getProjectionMatrix()),r.uniform3fv(n.eyePositionHigh,s.eyeHigh),r.uniform3fv(n.eyePositionLow,s.eyeLow);let a=this._renderedNodesInFrustum[s.currentFrustumIndex],o=this._visibleTileLayerSlices,l=a.length;for(;l--;)a[l].segment.heightPickingRendering(e,o[0])}}_renderColorPickingFramebufferPASS(){let e,t=this.renderer,i=t.handler,r=i.gl;i.programs.drawnode_colorPicking.activate(),e=i.programs.drawnode_colorPicking._program;let s=e.uniforms,n=t.activeCamera;r.enable(r.CULL_FACE),r.uniformMatrix4fv(s.viewMatrix,!1,n.getViewMatrix()),r.uniformMatrix4fv(s.projectionMatrix,!1,n.getProjectionMatrix()),r.uniform3fv(s.eyePositionHigh,n.eyeHigh),r.uniform3fv(s.eyePositionLow,n.eyeLow);let a=this._renderedNodesInFrustum[n.getCurrentFrustum()],o=this._visibleTileLayerSlices,l=a.length;for(;l--;)a[l].segment.colorPickingRendering(e,o[0],0);r.enable(r.POLYGON_OFFSET_FILL);for(let h=1,d=o.length;h<d;h++)for(l=a.length,r.polygonOffset(0,-h);l--;)a[l].segment.colorPickingRendering(e,o[h],h,this.transparentTexture,!0);r.disable(r.POLYGON_OFFSET_FILL)}_renderDepthFramebufferPASS(){let e,t=this.renderer,i=t.handler,r=i.gl;i.programs.drawnode_depth.activate(),e=i.programs.drawnode_depth._program;let s=e.uniforms,n=t.activeCamera;r.disable(r.BLEND),r.disable(r.POLYGON_OFFSET_FILL),r.uniformMatrix4fv(s.viewMatrix,!1,n.getViewMatrix()),r.uniformMatrix4fv(s.projectionMatrix,!1,n.getProjectionMatrix()),r.uniform3fv(s.eyePositionHigh,n.eyeHigh),r.uniform3fv(s.eyePositionLow,n.eyeLow),r.uniform3fv(s.frustumPickingColor,n.frustum._pickingColorU);let a=this._renderedNodesInFrustum[n.getCurrentFrustum()],o=this._visibleTileLayerSlices,l=a.length;for(;l--;)a[l].segment.depthRendering(e,o[0]);r.enable(r.BLEND)}_collectVectorLayerCollections(){this._frustumEntityCollections.length=0,this._frustumEntityCollections=[];let e=this.visibleVectorLayers.length;for(;e--;){let t=this.visibleVectorLayers[e];t._fading&&t._refreshFadingOpacity()&&this.visibleVectorLayers.splice(e,1),t.collectVisibleCollections(this._frustumEntityCollections),t.update()}}_frustumEntityCollectionPickingCallback(){this.drawPickingEntityCollections(this._frustumEntityCollections)}memClear(){this._distBeforeMemClear=0,this.camera._insideSegment=null,this.layerLock.lock(this._memKey),this.terrainLock.lock(this._memKey),this._normalMapCreator.lock(this._memKey),this._normalMapCreator.clear(),this.terrain.abortLoading(),this._tileLoader.abortAll(),this.quadTreeStrategy.clear(),this.layerLock.free(this._memKey),this.terrainLock.free(this._memKey),this._normalMapCreator.free(this._memKey),this._createdNodesCount=0}getRayIntersectionEllipsoid(e){return this.ellipsoid.hitRay(e.origin,e.direction)}getCartesianFromPixelEllipsoid(e){let t=this.renderer.activeCamera;return this.ellipsoid.hitRay(t.eye,t.unproject(e.x,e.y))}getLonLatFromPixelEllipsoid(e){let t=this.getCartesianFromPixelEllipsoid(e);if(t)return this.ellipsoid.cartesianToLonLat(t)}getCartesianFromMouseTerrain(){let e=this.renderer.events.mouseState,t=this.getDistanceFromPixel(e);if(t)return e.direction.scaleTo(t).addA(this.renderer.activeCamera.eye)}getCartesianFromPixelTerrain(e){let t=this.getDistanceFromPixel(e);if(t)return(e.direction||this.renderer.activeCamera.unproject(e.x,e.y)).scaleTo(t).addA(this.renderer.activeCamera.eye)}getLonLatFromPixelTerrain(e){let t=this.getCartesianFromPixelTerrain(e);if(t)return this.ellipsoid.cartesianToLonLat(t)}getPixelFromCartesian(e){return this.renderer.activeCamera.project(e)}getPixelFromLonLat(e){let t=this.ellipsoid.lonLatToCartesian(e);if(t)return this.renderer.activeCamera.project(t)}getDistanceFromPixelEllipsoid(e){let t=this.getCartesianFromPixelEllipsoid(e);if(t)return t.distance(this.renderer.activeCamera.eye)}getDistanceFromPixel(e){if(this.terrain.isEmpty)return this.getDistanceFromPixelEllipsoid(e)||0;{let t=this.renderer,i=t.handler.canvas,r=e.x/i.width,s=(i.height-e.y)/i.height;it[0]=it[1]=it[2]=0;let n=0;if(t.readDistanceColor(r,s,it),n=vo(it),!(it[0]||it[1]||it[2]))n=this.getDistanceFromPixelEllipsoid(e)||0;else if(n<Kl){t.screenDepthFramebuffer.activate(),t.screenDepthFramebuffer.readPixels(Tn,r,s);let a=new J(r*2-1,s*2-1,Tn[0]/255*2-1,1*2-1),o=this.camera.frustums[0].inverseProjectionMatrix.mulVec4(a),l=e.direction||t.activeCamera.unproject(e.x,e.y);n=-(o.z/o.w)/l.dot(t.activeCamera.getForward()),t.screenDepthFramebuffer.deactivate()}return n}}viewExtent(e){this.camera?this.camera.viewExtent(e):this._initialViewExtent=e}viewExtentArr(e){this.viewExtent(new U(new B(e[0],e[1]),new B(e[2],e[3])))}getViewExtent(){return this._viewExtent}viewLonLat(e,t,i){this.camera.setLonLat(e,t,i)}flyExtent(e,t,i,r,s,n){this.camera.flyExtent(e,t,i,r,s,n)}flyCartesian(e,t,i,r,s,n,a){this.camera.flyCartesian(e,t,i,r,s,n,a)}flyLonLat(e,t,i,r,s,n,a){this.camera.flyLonLat(e,t,i,r,s,n,a)}stopFlying(){this.camera.stopFlying()}updateBillboardsTexCoords(){for(let t=0;t<this.entityCollections.length;t++)this.entityCollections[t].billboardHandler.refreshTexCoordsArr();let e={};for(let t=0;t<this._layers.length;t++){let i=this._layers[t];i instanceof Ho&&i.each(function(r){r._entityCollection&&!e[r._entityCollection.id]&&(r._entityCollection.billboardHandler.refreshTexCoordsArr(),e[r._entityCollection.id]=!0)})}}getEntityTerrainPoint(e,t){let i=this._renderedNodes,r=i.length;for(;r--;)if(i[r].segment.isEntityInside(e))return i[r].segment.getEntityTerrainPoint(e,t)}async getHeightDefault(e){return new Promise(t=>{this.terrain?this.terrain.getHeightAsync(e.clone(),i=>{t(i)}):t(0)})}async getHeightAboveELL(e){return new Promise(t=>{this.terrain?this.terrain.getHeightAsync(e.clone(),i=>{t(i+this.terrain.geoid.getHeightLonLat(e))}):t(0)})}onremove(){this.memClear(),this.quadTreeStrategy.destroyBranches(),this._renderedNodes=[]}}const th=["draw","layeradd","baselayerchange","layerremove","layervisibilitychange","rendercompleted","terraincompleted","layerloadend"];class ii{constructor(e={}){this.__id=ii.__counter__++,this.equalizeVertices=e.equalizeVertices||!1,this.equalizeNormals=!1,this.isEmpty=!0,this.name=e.name||"empty",this.minZoom=e.minZoom||2,this.maxZoom=e.maxZoom||19,this.maxNativeZoom=e.maxNativeZoom||this.maxZoom,this.gridSizeByZoom=e.gridSizeByZoom||[64,32,16,8,4,4,4,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2],this._maxNodeZoom=this.gridSizeByZoom.length-1,this.plainGridSize=2,this.noDataValues=[],this._planet=null,this._geoid=e.geoid||new vn({src:e.geoidSrc||null}),this._isReady=!1}get isIdle(){return!0}isEqual(e){return e.__id===this.__id}static checkNoDataValue(e,t){return ea(e,t)!==-1}isBlur(e){return!1}set maxNodeZoom(e){e>this.gridSizeByZoom.length-1&&(e=this.gridSizeByZoom.length-1),this._maxNodeZoom=e}get maxNodeZoom(){return this._maxNodeZoom}set geoid(e){this._geoid=e}get geoid(){return this._geoid}getGeoid(){return this._geoid}handleSegmentTerrain(e){e.terrainIsLoading=!1,e.terrainReady=!0,e.terrainExists=!0}isReady(){return this._isReady}abortLoading(){}clearCache(){}getHeightAsync(e,t){return t(0),!0}loadTerrain(e,t=!1){}}ii.__counter__=0;class ih extends ii{constructor(e="",t={}){super({geoidSrc:"https://openglobus.org/geoid/egm84-30.pgm",maxNativeZoom:t.maxNativeZoom||14,...t}),this._s=t.subdomains||["a","b","c"],this.events=We(rh,this),this._requestCount=0,this._requestsPeerSubdomain=4,this.isEmpty=!1,this.equalizeNormals=!0,this.name=e||"openglobus",this.url=t.url||"https://{s}.srtm3.openglobus.org/{z}/{y}/{x}.ddm",this.gridSizeByZoom=t.gridSizeByZoom||[64,32,32,16,16,8,8,8,8,16,16,16,16,32,32,16,8,4,2,2,2,2,2,2],this._heightFactor=t.heightFactor!=null?t.heightFactor:1,this.noDataValues=t.noDataValues||[];for(let i=0;i<this.noDataValues.length;i++)this.noDataValues[i]*=this._heightFactor;this.plainGridSize=t.plainGridSize||32,this._extent=jr(t.extent,new U(new B(-180,-90),new B(180,90))),this._dataType="arrayBuffer",this._maxNodeZoom=this.gridSizeByZoom.length-1,this._elevationCache={},this._fetchCache={},this._loader=new xn,this._urlRewriteCallback=t.urlRewrite||null}get loader(){return this._loader}clearCache(){for(let e in this._elevationCache)this._elevationCache[e].heights=null,this._elevationCache[e].extent=null,delete this._elevationCache[e];this._elevationCache=null,this._elevationCache={};for(let e in this._fetchCache)this._fetchCache[e]=null,delete this._fetchCache[e];this._fetchCache=null,this._fetchCache={}}isBlur(e){return e.tileZoom>=6}getHeightAsync(e,t,i,r){if(!e||e.lat>ce||e.lat<Re)return t(0),!0;r=r??!0;let s=i||this.maxZoom,n=Math.pow(2,s),a=Ui/n,o=Hr(e),l=Math.floor((re+o.lon)/a),h=Math.floor((re-o.lat)/a),d=Oe.getTileIndex(l,h,s),f=this._elevationCache[d];if(f)return f.heights?t(this._getGroundHeightMerc(o,f)):t(0),!0;if(!this._fetchCache[d]){let u=this._buildURL(l,h,s);this._fetchCache[d]=this._loader.fetch({src:u,type:this._dataType})}return this._fetchCache[d].then(u=>{let g=Kn(l,h,s);if(u.status==="ready"){let _={heights:this._createHeights(u.data,d,l,h,s,g),extent:g};this._elevationCache[d]=_,t(this._getGroundHeightMerc(o,_))}else if(u.status==="error"){if(r&&s>this.maxNativeZoom){r=!1,this.getHeightAsync(e,t,this.maxNativeZoom,!1);return}this._elevationCache[d]={heights:null,extent:g},t(0)}else this._fetchCache[d]=null,delete this._fetchCache[d]}),!1}getTileCache(e,t){if(!e||e.lat>ce||e.lat<Re)return;let i=Math.pow(2,t),r=Ui/i,s=Hr(e),n=Math.floor((re+s.lon)/r),a=Math.floor((re-s.lat)/r),o=Oe.getTileIndex(n,a,t);return this._elevationCache[o]}_getGroundHeightMerc(e,t){if(!(t.extent&&t.heights))return 0;let i=t.extent.getWidth(),r=Math.sqrt(t.heights.length),s=i/(r-1),n=r-Math.ceil((e.lat-t.extent.southWest.lat)/s)-1,a=Math.floor((e.lon-t.extent.southWest.lon)/s),o=(n+1)*r+a,l=o+1,h=n*r+a,d=h+1,f=t.heights[o],u=t.heights[l],g=t.heights[h],_=t.heights[d],m=new p(t.extent.southWest.lon+s*a,f,t.extent.northEast.lat-s*n-s),v=new p(m.x+s,u,m.z),b=new p(m.x,g,m.z+s),y=new p(m.x+s,_,m.z+s),w=new p(e.lon,1e5,e.lat),x=new se(w,new p(0,-1,0)),T=new p,A=x.hitTriangle(m,v,b,T);return A===se.INSIDE||(A=x.hitTriangle(v,y,b,T),A===se.INSIDE)?T.y:0}abortLoading(){this._loader.abortAll()}setUrl(e){this.url=e}setName(e){this.name=e}isReadyToLoad(e){return e._projection.equal(Ri)&&this._extent.overlaps(e.getExtentLonLat())}loadTerrain(e,t=!1){if(this._planet.terrainLock.isFree())if(e.terrainReady=!1,e.terrainIsLoading=!0,this.isReadyToLoad(e)){let i=this._elevationCache[e.tileIndex];i?this._applyElevationsData(e,i.heights):this._loader.load({sender:this,src:this._getHTTPRequestString(e),segment:e,type:this._dataType,filter:()=>e.plainReady&&e.node.getState()!==De||t},r=>{if(r.status==="ready"){let s=this._createHeights(r.data,e.tileIndex,e.tileX,e.tileY,e.tileZoom,e.getExtent(),e.tileZoom===this.maxZoom);this._elevationCache[e.tileIndex]={heights:s,extent:e.getExtent()},this._applyElevationsData(e,s)}else r.status==="abort"?e.terrainIsLoading=!1:r.status==="error"?this._applyElevationsData(e,null):e.terrainIsLoading=!1})}else e.elevationsNotExists();else e.terrainIsLoading=!1}_getSubdomain(){return this._requestCount++,this._s[Math.floor(this._requestCount%(this._requestsPeerSubdomain*this._s.length)/this._requestsPeerSubdomain)]}_buildURL(e,t,i){return Et(this.url,{s:this._getSubdomain(),x:e.toString(),y:t.toString(),z:i.toString()})}_createUrl(e){return this._buildURL(e.tileX,e.tileY,e.tileZoom)}_getHTTPRequestString(e){return this._urlRewriteCallback?this._urlRewriteCallback(e,this.url):this._createUrl(e)}setUrlRewriteCallback(e){this._urlRewriteCallback=e}_createHeights(e,t,i,r,s,n,a){if(this._heightFactor!==1){let o=new Float32Array(e);for(let l=0,h=o.length;l<h;l++)o[l]=o[l]*this._heightFactor;return o}return new Float32Array(e)}_applyElevationsData(e,t){if(e){let i=this.events.load;i.handlers.length&&this.events.dispatch(i,{elevations:t,segment:e}),e.applyTerrain(t)}}}const rh=["load","loadend"];class An extends Oe{constructor(e,t={}){super(e,t),this.events=this.events.registerNames(sh),this.url=t.url||"",this._s=t.subdomains||["a","b","c"],this.minNativeZoom=t.minNativeZoom||0,this.maxNativeZoom=t.maxNativeZoom||19,this._urlRewriteCallback=t.urlRewrite||null,this._requestsPeerSubdomains=4,this._requestCount=0}get isIdle(){return super.isIdle&&this._planet._tileLoader.getRequestCounter(this)===0}get instanceName(){return"XYZ"}abortLoading(){this._planet&&this._planet._tileLoader.abort(this)}setVisibility(e){e!==this._visibility&&(super.setVisibility(e),e||this.abortLoading())}remove(){return this.abortLoading(),super.remove(),this}setUrl(e){this.url=e}_checkSegment(e){return e._projection.id===this._planet.quadTreeStrategy.projection.id}loadMaterial(e,t=!1){let i=e.segment;this._isBaseLayer?e.texture=i.getDefaultTexture():e.texture=i.planet.transparentTexture,(this._planet.layerLock.isFree()||e.segment.tileZoom<2)&&(e.isReady=!1,e.isLoading=!0,this._checkSegment(i)?(e.loadingAttempts++,this._planet._tileLoader.load({sender:this,src:this._getHTTPRequestString(e.segment),type:"imageBitmap",filter:()=>i.initialized&&i.node.getState()===$e||t,options:{}},r=>{if(r.status==="ready"){if(e.isLoading){let s=this.events.load;s.handlers.length&&this.events.dispatch(s,e),e.applyImage(r.data),r.data=null}}else r.status==="abort"?e.isLoading=!1:r.status==="error"&&e.isLoading&&e.textureNotExists()})):e.textureNotExists())}_createUrl(e){return Et(this.url,{s:this._getSubdomain(),x:e.tileX.toString(),y:e.tileY.toString(),z:e.tileZoom.toString()})}_getSubdomain(){return this._requestCount++,this._s[Math.floor(this._requestCount%(this._requestsPeerSubdomains*this._s.length)/this._requestsPeerSubdomains)]}_getHTTPRequestString(e){return this._urlRewriteCallback?this._urlRewriteCallback(e,this.url):this._createUrl(e)}setUrlRewriteCallback(e){this._urlRewriteCallback=e}applyMaterial(e,t=!1){if(e.isReady)return e.texOffset;if(e.segment.tileZoom<this.minNativeZoom)e.textureNotExists();else{let i=e.segment,r=i.node,s=!1,n=this.__id,a=e;for(;r.parentNode;)if(r=r.parentNode,a=r.segment.materials[n],a&&a.textureExists){s=!0;break}if(i.passReady){let o=e.layer.maxNativeZoom;if(r.segment.tileZoom===o)e.textureNotExists();else if(e.segment.tileZoom<=o)!e.isLoading&&!e.isReady&&this.loadMaterial(e,t);else{let l=i.node;for(;l.segment.tileZoom>e.layer.maxNativeZoom;)l=l.parentNode;let h=l.segment.materials[e.layer.__id];h?!h.isLoading&&!h.isReady&&this.loadMaterial(h,!0):(h=l.segment.materials[e.layer.__id]=e.layer.createMaterial(l.segment),this.loadMaterial(h,!0))}}if(s){e.appliedNode=r,e.appliedNodeId=r.nodeId,e.texture=a.texture;let o=1/(2<<i.tileZoom-r.segment.tileZoom-1);e.texOffset[0]=i.tileX*o-r.segment.tileX,e.texOffset[1]=i.tileY*o-r.segment.tileY,e.texOffset[2]=o,e.texOffset[3]=o}else e.texture=i.planet.transparentTexture,e.texOffset[0]=0,e.texOffset[1]=0,e.texOffset[2]=1,e.texOffset[3]=1}return e.texOffset}clearMaterial(e){e.isReady&&e.textureExists&&(!e.texture.default&&e.segment.handler.gl.deleteTexture(e.texture),e.texture=null),e.isReady=!1,e.textureExists=!1,e.isLoading=!1}_correctFullExtent(){let e=this._extent,t=this._extentMerc,i=re+5e4,r=re+5e4;e.northEast.lat===90&&(t.northEast.lat=r),e.northEast.lon===180&&(t.northEast.lon=i),e.southWest.lat===-90&&(t.southWest.lat=-r),e.southWest.lon===-180&&(t.southWest.lon=-i),e.northEast.lat>=ce&&(e.northEast.lat=ce),e.northEast.lat<=Re&&(e.northEast.lat=Re)}}const sh=["load","loadend"],nh=["tick","end","start","stop"];class ki{constructor(e={}){this.__handler=null,this.active=!0,this.__id=ki.__counter__++,this.events=We(nh,this),this.name=e.name||"",this.startDate=e.startDate||0,this.endDate=e.endDate||0;let t=e.currentDate||Qr(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*$r,this._intervalCallback=t}setDate(e){let t=Qr(e);this.startDate&&t<this.startDate&&(t=this.startDate),this.endDate&&t>this.endDate&&(t=this.endDate),this.currentDate=t}getDate(){return fa(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=ua(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))}}ki.__counter__=0;class ah{constructor(e,t){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}}class En{constructor(){this.next=null,this.prev=null,this.data=null}}class Tr{constructor(e=256){this._current=new En,this._head=this._current;for(let t=0;t<e;t++){let i=new En;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 Cn=["","WEBKIT_","MOZ_"],Ar=["webgl2","webgl"],Pn=2;class Di{constructor(e,t={}){this.framebufferStack=new Tr,this._requestAnimationFrameId=0,this.events=We(["visibilitychange","resize"]),this.defaultClock=new ki,this._clocks=[],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:na("og_dpi")||t.pixelRatio||1,extensions:t.extensions||[],context:t.context||{}},this._oneByHeight=1/(this._params.height*this._params.pixelRatio),this.extensions={},this._canvasTarget=e,this._lastAnimationFrameTime=0,this._initialized=!1,this._frameCallback=function(){},this.transparentTexture=null,this.defaultTexture=null,this.framebufferStack=new Tr,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||At(t.autoActivate))&&this.initialize()}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 Cn)if(r=e.getExtension(Cn[i]+t),r)return r}static getContext(e,t){let i=null;try{let s=new URLSearchParams(location.search).get("og_ver");if(s)i=e.getContext(s,t),i&&(i.type=s);else for(let n=0;n<Ar.length;n++)if(i=e.getContext(Ar[n],t),i){i.type=Ar[n];break}}catch{He.logErr("exception during the GL context initialization")}return i||He.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=0){let o=this.gl,l=o.createTexture();return o.bindTexture(o.TEXTURE_2D,l),o.texImage2D(o.TEXTURE_2D,a,o[r.toUpperCase()],e,t,0,o[s.toUpperCase()],o[n.toUpperCase()],null),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_MIN_FILTER,o[i.toUpperCase()]),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_MAG_FILTER,o[i.toUpperCase()]),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_WRAP_S,o.CLAMP_TO_EDGE),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_WRAP_T,o.CLAMP_TO_EDGE),o.bindTexture(o.TEXTURE_2D,null),l}createEmptyTexture_n(e,t,i){let r=this.gl,s=r.createTexture();return r.bindTexture(r.TEXTURE_2D,s),r.texImage2D(r.TEXTURE_2D,0,i||r.RGBA,e,t,0,r.RGBA,r.UNSIGNED_BYTE,null),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.NEAREST),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,r.NEAREST),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.bindTexture(r.TEXTURE_2D,null),s}createEmptyTexture_l(e,t,i){let r=this.gl,s=r.createTexture();return r.bindTexture(r.TEXTURE_2D,s),r.texImage2D(r.TEXTURE_2D,0,i||r.RGBA,e,t,0,r.RGBA,r.UNSIGNED_BYTE,null),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,r.LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.bindTexture(r.TEXTURE_2D,null),s}createTexture_n_webgl1(e,t,i=null){let r=this.gl;return i=i||r.createTexture(),r.bindTexture(r.TEXTURE_2D,i),r.texImage2D(r.TEXTURE_2D,0,t||r.RGBA,r.RGBA,r.UNSIGNED_BYTE,e),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.NEAREST),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,r.NEAREST),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.bindTexture(r.TEXTURE_2D,null),i}createTexture_l_webgl1(e,t,i=null){let r=this.gl;return i=i||r.createTexture(),r.bindTexture(r.TEXTURE_2D,i),r.texImage2D(r.TEXTURE_2D,0,t||r.RGBA,r.RGBA,r.UNSIGNED_BYTE,e),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,r.LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.bindTexture(r.TEXTURE_2D,null),i}createTexture_mm_webgl1(e,t,i=null){let r=this.gl;return i=i||r.createTexture(),r.bindTexture(r.TEXTURE_2D,i),r.texImage2D(r.TEXTURE_2D,0,t||r.RGBA,r.RGBA,r.UNSIGNED_BYTE,e),r.generateMipmap(r.TEXTURE_2D),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.LINEAR_MIPMAP_LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.bindTexture(r.TEXTURE_2D,null),i}createTexture_a_webgl1(e,t,i=null){let r=this.gl;return i=i||r.createTexture(),r.bindTexture(r.TEXTURE_2D,i),r.texImage2D(r.TEXTURE_2D,0,t||r.RGBA,r.RGBA,r.UNSIGNED_BYTE,e),r.generateMipmap(r.TEXTURE_2D),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.LINEAR_MIPMAP_LINEAR),r.texParameterf(r.TEXTURE_2D,this.extensions.EXT_texture_filter_anisotropic.TEXTURE_MAX_ANISOTROPY_EXT,this._params.anisotropy),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.bindTexture(r.TEXTURE_2D,null),i}createTexture_n_webgl2(e,t,i=null){let r=this.gl;return i=i||r.createTexture(),r.bindTexture(r.TEXTURE_2D,i),r.texStorage2D(r.TEXTURE_2D,1,t||r.RGBA8,e.width,e.height),r.texSubImage2D(r.TEXTURE_2D,0,0,0,e.width,e.height,r.RGBA,r.UNSIGNED_BYTE,e),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.NEAREST),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,r.NEAREST),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.bindTexture(r.TEXTURE_2D,null),i}createTexture_l_webgl2(e,t,i=null){let r=this.gl;return i=i||r.createTexture(),r.bindTexture(r.TEXTURE_2D,i),r.texStorage2D(r.TEXTURE_2D,1,t||r.RGBA8,e.width,e.height),r.texSubImage2D(r.TEXTURE_2D,0,0,0,e.width,e.height,r.RGBA,r.UNSIGNED_BYTE,e),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,r.LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.bindTexture(r.TEXTURE_2D,null),i}createTexture_mm_webgl2(e,t,i=null){let r=this.gl;return i=i||r.createTexture(),r.bindTexture(r.TEXTURE_2D,i),r.texStorage2D(r.TEXTURE_2D,Pn,t||r.RGBA8,e.width,e.height),r.texSubImage2D(r.TEXTURE_2D,0,0,0,e.width,e.height,r.RGBA,r.UNSIGNED_BYTE,e),r.generateMipmap(r.TEXTURE_2D),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.LINEAR_MIPMAP_LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.bindTexture(r.TEXTURE_2D,null),i}createTexture_a_webgl2(e,t,i=null){let r=this.gl;return i=i||r.createTexture(),r.bindTexture(r.TEXTURE_2D,i),r.texStorage2D(r.TEXTURE_2D,Pn,t||r.RGBA8,e.width,e.height),r.texSubImage2D(r.TEXTURE_2D,0,0,0,e.width,e.height,r.RGBA,r.UNSIGNED_BYTE,e),r.generateMipmap(r.TEXTURE_2D),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.LINEAR_MIPMAP_LINEAR),r.texParameterf(r.TEXTURE_2D,this.extensions.EXT_texture_filter_anisotropic.TEXTURE_MAX_ANISOTROPY_EXT,this._params.anisotropy),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.bindTexture(r.TEXTURE_2D,null),i}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 $t;s.fillEmpty();let n=s.getImage();for(let a=0;a<r.length;a++){let o=r[a][1];t.bindTexture(t.TEXTURE_CUBE_MAP,i),t.texImage2D(o,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,n)}for(let a=0;a<r.length;a++){let o=r[a][1],l=new Image;l.crossOrigin="",l.onload=function(h,d,f){return function(){t&&h&&(t.bindTexture(t.TEXTURE_CUBE_MAP,h),t.texImage2D(d,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,f))}}(i,o,l),l.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 ah(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=Di.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=Di.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[0].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,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._oneByHeight=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 V(Math.round(e.width*.5),Math.round(e.height*.5)):new V}drawFrame(){let e=window.performance.now();this.deltaTime=e-this._lastAnimationFrameTime,this._lastAnimationFrameTime=e,this.defaultClock.tick(this.deltaTime);for(let i=0;i<this._clocks.length;i++)this._clocks[i].tick(this.deltaTime);let t=this.canvas;(Math.floor(t.clientWidth*this._params.pixelRatio)!==t.width||Math.floor(t.clientHeight*this._params.pixelRatio)!==t.height)&&(t.clientWidth===0||t.clientHeight===0?this.stop():document.hidden||(this.start(),this.setSize(t.clientWidth,t.clientHeight))),this._frameCallback()}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":!1}_animationFrameCallback(){this._requestAnimationFrameId=window.requestAnimationFrame(()=>{this.drawFrame(),this._requestAnimationFrameId&&this._animationFrameCallback()})}createDefaultTexture(e,t){let i,r;if(e&&e.color)i=new $t(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 $t(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 t,i;(t=this.resizeObserver)==null||t.disconnect(),(i=this.intersectionObserver)==null||i.disconnect(),this.stop();for(let r in this.programs)this.removeProgram(r);let e=this.gl;if(e){e.deleteTexture(this.transparentTexture),this.transparentTexture=null,e.deleteTexture(this.defaultTexture),this.defaultTexture=null,this.framebufferStack=new Tr;let r=e.getParameter(e.MAX_VERTEX_ATTRIBS),s=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,s);for(let a=0;a<r;++a)e.disableVertexAttribArray(a),e.vertexAttribPointer(a,4,e.FLOAT,!1,0,0),e.vertexAttrib1f(a,0);e.deleteBuffer(s);let n=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS);for(let a=0;a<n;++a)e.activeTexture(e.TEXTURE0+a),e.bindTexture(e.TEXTURE_CUBE_MAP,null),e.bindTexture(e.TEXTURE_2D,null);e.activeTexture(e.TEXTURE0),e.useProgram(null),e.bindBuffer(e.ARRAY_BUFFER,null),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.bindRenderbuffer(e.RENDERBUFFER,null),e.disable(e.BLEND),e.disable(e.CULL_FACE),e.disable(e.DEPTH_TEST),e.disable(e.DITHER),e.disable(e.SCISSOR_TEST),e.blendColor(0,0,0,0),e.blendEquation(e.FUNC_ADD),e.blendFunc(e.ONE,e.ZERO),e.clearColor(0,0,0,0),e.clearDepth(1),e.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 oh extends dn{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)}}const Ln="_",Er=function(c,e){return+(c.priority<e.priority)};class lh{constructor(){this._currentlyPressedKeys={},this._pressedKeysCallbacks={},this._unpressedKeysCallbacks={},this._charkeysCallbacks={},this._anykeyCallback=null,this._event=null,this._active=!0,this._stampCache={},document.onkeydown=e=>{this._event=e,this._active&&this.handleKeyDown()},document.onkeyup=e=>{this._event=e,this._active&&this.handleKeyUp()}}getcurrentlyPressedKeys(){return this._currentlyPressedKeys}getPressedKeysCallbacks(){return this._pressedKeysCallbacks}getUnpressedKeysCallbacks(){return this._unpressedKeysCallbacks}getCharkeysCallbacks(){return this._charkeysCallbacks}removeEvent(e,t,i){let r=this._getStamp(e,t,i._openglobus_id);i._openglobus_id&&this._stampCache[r]&&(delete this._stampCache[r],e==="keypress"?this._removeCallback(this._pressedKeysCallbacks[t],i):e==="keyfree"?this._removeCallback(this._unpressedKeysCallbacks[t],i):e==="charkeypress"&&this._removeCallback(this._charkeysCallbacks[t],i))}_removeCallback(e,t){for(let i=0;i<e.length;i++)e[i].callback._openglobus_id===t._openglobus_id&&e.splice(i,1)}_getStamp(e,t,i){return`${e}${Ln}${t}${Ln}${i}`}_stamp(e,t,i){const r=Vr(i),s=this._getStamp(e,t,r);return this._stampCache[s]?!1:(this._stampCache[s]=r,!0)}setActivity(e){this._active=e}releaseKeys(){this._currentlyPressedKeys={}}addEvent(e,t,i,r,s){if(this._stamp(e,t,i))switch(s===void 0&&(s=1600),e){case"keyfree":this._unpressedKeysCallbacks[t]||(this._unpressedKeysCallbacks[t]=[]),this._unpressedKeysCallbacks[t].push({callback:i,sender:r,priority:s}),this._unpressedKeysCallbacks[t].sort(Er);break;case"keypress":t==null?this._anykeyCallback={callback:i,sender:r||this}:(this._pressedKeysCallbacks[t]||(this._pressedKeysCallbacks[t]=[]),this._pressedKeysCallbacks[t].push({callback:i,sender:r,priority:s}),this._pressedKeysCallbacks[t].sort(Er));break;case"charkeypress":this._charkeysCallbacks[t]||(this._charkeysCallbacks[t]=[]),this._charkeysCallbacks[t].push({callback:i,sender:r,priority:s}),this._charkeysCallbacks[t].sort(Er);break}}isKeyPressed(e){return this._currentlyPressedKeys[e]}handleKeyDown(){this._anykeyCallback&&this._anykeyCallback.callback.call(this._anykeyCallback.sender,this._event),this._currentlyPressedKeys[this._event.keyCode]=!0;for(let e in this._charkeysCallbacks)if(String.fromCharCode(this._event.keyCode)===String.fromCharCode(Number(e))){let t=this._charkeysCallbacks[e];for(let i=0;i<t.length;i++)t[i].callback.call(t[i].sender,this._event)}(this._event.keyCode==be.KEY_ALT||this._event.keyCode==be.KEY_SHIFT)&&this._event.preventDefault()}handleKeyUp(){if(this._currentlyPressedKeys[this._event.keyCode]||this._event.keyCode===be.KEY_PRINTSCREEN){for(let e in this._unpressedKeysCallbacks)if(this._currentlyPressedKeys[e]||this._event.keyCode===be.KEY_PRINTSCREEN&&Number(e)===be.KEY_PRINTSCREEN){let t=this._unpressedKeysCallbacks[e];for(let i=0;i<t.length;i++)t[i].callback.call(t[i].sender,this._event)}}this._currentlyPressedKeys[this._event.keyCode]=!1}handleEvents(){for(let e in this._pressedKeysCallbacks)if(this._currentlyPressedKeys[e]){let t=this._pressedKeysCallbacks[e];for(let i=0;i<t.length;i++)t[i].callback.call(t[i].sender,this._event)}}}class hh{constructor(e){this._htmlObject=e}setEvent(e,t,i){switch(e){case"mousewheel":this._htmlObject.addEventListener("wheel",function(r){let s=r.deltaY||r.detail||r.wheelDelta||0;r.wheelDelta==null&&(r.wheelDelta=s*-120),i.call(t,r),r.preventDefault()},!1);break;case"mousedown":this._htmlObject.addEventListener("mousedown",function(r){let s=this.getBoundingClientRect();i.call(t,r,{button:r.button,clientX:r.clientX-s.left,clientY:r.clientY-s.top})}),this._htmlObject.addEventListener("contextmenu",function(r){return r.preventDefault(),!1});break;case"mouseup":this._htmlObject.addEventListener("mouseup",function(r){let s=this.getBoundingClientRect();i.call(t,r,{button:r.button,clientX:r.clientX-s.left,clientY:r.clientY-s.top})});break;case"mousemove":this._htmlObject.addEventListener("mousemove",function(r){let s=this.getBoundingClientRect();i.call(t,r,{clientX:r.clientX-s.left,clientY:r.clientY-s.top})});break;case"mouseleave":this._htmlObject.addEventListener("mouseleave",function(r){i.call(t,r)});break;case"mouseout":this._htmlObject.addEventListener("mouseout",function(r){i.call(t,r)});break;case"mouseover":this._htmlObject.addEventListener("mouseover",function(r){i.call(t,r)});break;case"mouseenter":this._htmlObject.addEventListener("mouseenter",function(r){i.call(t,r)});break}}}class ch{constructor(e){this._htmlObject=e}setEvent(e,t,i){switch(e){case"touchcancel":this._htmlObject.addEventListener("touchcancel",function(r){r.preventDefault();const s=this.getBoundingClientRect(),n=Object.assign(r,{offsetLeft:s.left,offsetTop:s.top});i.call(t,n)});break;case"touchstart":this._htmlObject.addEventListener("touchstart",function(r){r.preventDefault();const s=this.getBoundingClientRect(),n=Object.assign(r,{offsetLeft:s.left,offsetTop:s.top});i.call(t,n)});break;case"touchend":this._htmlObject.addEventListener("touchend",function(r){r.preventDefault();const s=this.getBoundingClientRect(),n=Object.assign(r,{offsetLeft:s.left,offsetTop:s.top});i.call(t,n)});break;case"touchmove":this._htmlObject.addEventListener("touchmove",function(r){r.preventDefault();const s=this.getBoundingClientRect(),n=Object.assign(r,{offsetLeft:s.left,offsetTop:s.top});i.call(t,n)});break}}}function dh(c){return new ph(c)}const fh=1,uh=2,_h=4,gh=c=>!(c[0]||c[1]||c[2]),mh=c=>!!(c[0]||c[1]||c[2]);let rt=new Uint8Array(4),ri=new Uint8Array(4),si=new Uint8Array(4);class ph extends Ht{constructor(e){super(vh),this.renderer=e,this._touchHandler=new ch(e.handler.canvas),this._mouseHandler=new hh(e.handler.canvas),this._keyboardHandler=new lh,this._active=!0,this.clickRadius=15,this.mouseState={clientX:0,clientY:0,pos:new V,x:0,y:0,nx:0,ny:0,prev_x:0,prev_y:0,direction:new p,leftButtonUp:!1,rightButtonUp:!1,middleButtonUp:!1,leftButtonDown:!1,rightButtonDown:!1,middleButtonDown:!1,leftButtonHold:!1,rightButtonHold:!1,middleButtonHold:!1,leftButtonDoubleClick:!1,rightButtonDoubleClick:!1,middleButtonDoubleClick:!1,leftButtonClick:!1,rightButtonClick:!1,middleButtonClick:!1,moving:!1,justStopped:!1,doubleClickDelay:500,clickDelay:200,wheelDelta:0,sys:null,pickingObject:null,renderer:e},this.touchState={moving:!1,touchEnd:!1,touchStart:!1,touchCancel:!1,doubleTouch:!1,doubleTouchDelay:550,doubleTouchRadius:10,clientX:0,clientY:0,pos:new V,x:0,y:0,nx:0,ny:0,prev_x:0,prev_y:0,direction:new p,sys:null,pickingObject:null,renderer:e},this._isMouseInside=!1,this._entityPickingEventsActive=!0,this._dblTchCoords=new V,this._oneTouchStart=!1,this._dblTchBegins=0,this._mousestopThread=null,this._ldblClkBegins=0,this._rdblClkBegins=0,this._mdblClkBegins=0,this._lClkBegins=0,this._rClkBegins=0,this._mClkBegins=0,this._lclickX=0,this._lclickY=0,this._rclickX=0,this._rclickY=0,this._mclickX=0,this._mclickY=0}pointerEvent(){let e=this.mouseState,t=this.touchState;return e.moving||e.justStopped||t.moving||t.touchStart||t.touchEnd||e.wheelDelta!==0}get active(){return this._active}set active(e){this._active=e,this._keyboardHandler.setActivity(e)}handleEvents(){this._active&&(this.mouseState.direction=this.renderer.activeCamera.unproject(this.mouseState.x,this.mouseState.y),this.touchState.direction=this.renderer.activeCamera.unproject(this.touchState.x,this.touchState.y),this._keyboardHandler.handleEvents(),this.handleMouseEvents(),this.handleTouchEvents(),this.entityPickingEvents())}on(e,t,i,r,s){e==="keypress"||e==="charkeypress"||e==="keyfree"?this._keyboardHandler.addEvent(e,t,i,r,s):super.on(e,t,i,r)}off(e,t,i){e==="keypress"||e==="charkeypress"||e==="keyfree"?this._keyboardHandler.removeEvent(e,t,i):super.off(e,t)}isKeyPressed(e){return this._keyboardHandler.isKeyPressed(e)}releaseKeys(){this._keyboardHandler.releaseKeys()}initialize(){this._mouseHandler.setEvent("mouseup",this,this.onMouseUp),this._mouseHandler.setEvent("mousemove",this,this.onMouseMove),this._mouseHandler.setEvent("mousedown",this,this.onMouseDown),this._mouseHandler.setEvent("mousewheel",this,this.onMouseWheel),this._mouseHandler.setEvent("mouseleave",this,this.onMouseLeave),this._mouseHandler.setEvent("mouseenter",this,this.onMouseEnter),this._touchHandler.setEvent("touchstart",this,this.onTouchStart),this._touchHandler.setEvent("touchend",this,this.onTouchEnd),this._touchHandler.setEvent("touchcancel",this,this.onTouchCancel),this._touchHandler.setEvent("touchmove",this,this.onTouchMove)}onMouseWheel(e){this.mouseState.sys=e,this.mouseState.wheelDelta=e.wheelDelta||0}updateButtonsStates(e){let t=this.mouseState;e&fh&&t.leftButtonDown?t.leftButtonDown=!0:(t.leftButtonHold=!1,t.leftButtonDown=!1),e&uh&&t.rightButtonDown?t.rightButtonDown=!0:(t.rightButtonHold=!1,t.rightButtonDown=!1),e&_h&&t.middleButtonDown?t.middleButtonDown=!0:(t.middleButtonHold=!1,t.middleButtonDown=!1)}onMouseMove(e,t){let i=this.mouseState;this.updateButtonsStates(e.buttons),i.sys=e;let r=t.clientX,s=t.clientY,n=this.clickRadius;if(Math.abs(this._lclickX-r)>=n&&Math.abs(this._lclickY-s)>=n&&(this._ldblClkBegins=0,this._lClkBegins=0),Math.abs(this._rclickX-r)>=n&&Math.abs(this._rclickY-s)>=n&&(this._rdblClkBegins=0,this._rClkBegins=0),Math.abs(this._mclickX-r)>=n&&Math.abs(this._mclickY-s)>=n&&(this._mdblClkBegins=0,this._mClkBegins=0),i.clientX===t.clientX&&i.clientY===t.clientY)return;i.clientX=t.clientX,i.clientY=t.clientY;let a=this.renderer.handler;i.pos.x=i.x=t.clientX*a.pixelRatio,i.pos.y=i.y=t.clientY*a.pixelRatio,i.nx=i.x/a.canvas.width,i.ny=i.y/a.canvas.height,i.moving=!0,clearTimeout(this._mousestopThread),this._mousestopThread=setTimeout(function(){i.justStopped=!0},100)}onMouseLeave(e){this._isMouseInside=!1,this.mouseState.sys=e,this.dispatch(this.mouseleave,this.mouseState)}onMouseEnter(e){this._isMouseInside=!0,this.mouseState.sys=e,this.dispatch(this.mouseenter,this.mouseState)}onMouseDown(e,t){t.button===be.MB_LEFT?(this._lClkBegins=window.performance.now(),this._lclickX=t.clientX,this._lclickY=t.clientY,this.mouseState.sys=e,this.mouseState.leftButtonDown=!0):t.button===be.MB_RIGHT?(this._rClkBegins=window.performance.now(),this._rclickX=t.clientX,this._rclickY=t.clientY,this.mouseState.sys=e,this.mouseState.rightButtonDown=!0):t.button===be.MB_MIDDLE&&(this._mClkBegins=window.performance.now(),this._mclickX=t.clientX,this._mclickY=t.clientY,this.mouseState.sys=e,this.mouseState.middleButtonDown=!0)}onMouseUp(e,t){let i=this.mouseState;i.sys=e;let r=window.performance.now();t.button===be.MB_LEFT?(i.leftButtonDown=!1,i.leftButtonUp=!0,Math.abs(this._lclickX-t.clientX)<this.clickRadius&&Math.abs(this._lclickY-t.clientY)<this.clickRadius&&r-this._lClkBegins<=i.clickDelay&&(this._ldblClkBegins?(window.performance.now()-this._ldblClkBegins<=i.doubleClickDelay&&(i.leftButtonDoubleClick=!0),this._ldblClkBegins=0):this._ldblClkBegins=window.performance.now(),i.leftButtonClick=!0,this._lClkBegins=0)):t.button===be.MB_RIGHT?(i.rightButtonDown=!1,i.rightButtonUp=!0,Math.abs(this._rclickX-t.clientX)<this.clickRadius&&Math.abs(this._rclickY-t.clientY)<this.clickRadius&&r-this._rClkBegins<=i.clickDelay&&(this._rdblClkBegins?(window.performance.now()-this._rdblClkBegins<=i.doubleClickDelay&&(i.rightButtonDoubleClick=!0),this._rdblClkBegins=0):this._rdblClkBegins=window.performance.now(),i.rightButtonClick=!0,this._rClkBegins=0)):t.button===be.MB_MIDDLE&&(i.middleButtonDown=!1,i.middleButtonUp=!0,Math.abs(this._mclickX-t.clientX)<this.clickRadius&&Math.abs(this._mclickY-t.clientY)<this.clickRadius&&r-this._mClkBegins<=i.clickDelay&&(this._mdblClkBegins?(window.performance.now()-this._mdblClkBegins<=i.doubleClickDelay&&(i.middleButtonDoubleClick=!0),this._mdblClkBegins=0):this._mdblClkBegins=window.performance.now(),i.middleButtonClick=!0,this._mClkBegins=0))}onTouchStart(e){let t=this.touchState;t.sys=e,t.clientX=e.touches.item(0).clientX-e.offsetLeft,t.clientY=e.touches.item(0).clientY-e.offsetTop;let i=this.renderer.handler;t.pos.x=t.x=t.clientX*i.pixelRatio,t.pos.y=t.y=t.clientY*i.pixelRatio,t.nx=t.x/i.canvas.width,t.ny=t.y/i.canvas.height,t.prev_x=t.x,t.prev_y=t.y,t.touchStart=!0,e.touches.length===1?(this._dblTchCoords.x=t.x,this._dblTchCoords.y=t.y,this._oneTouchStart=!0):this._oneTouchStart=!1}onTouchEnd(e){let t=this.touchState;t.sys=e,t.touchEnd=!0,e.touches.length===0&&(t.prev_x=t.x,t.prev_y=t.y,this._oneTouchStart&&(this._dblTchBegins&&(window.performance.now()-this._dblTchBegins<=t.doubleTouchDelay&&(t.doubleTouch=!0),this._dblTchBegins=0),this._dblTchBegins=window.performance.now(),this._oneTouchStart=!1))}onTouchCancel(e){let t=this.touchState;t.sys=e,t.touchCancel=!0}onTouchMove(e){let t=this.touchState;t.clientX=e.touches.item(0).clientX-e.offsetLeft,t.clientY=e.touches.item(0).clientY-e.offsetTop;let i=this.renderer.handler;t.x=t.clientX*i.pixelRatio,t.y=t.clientY*i.pixelRatio,t.nx=t.x/i.canvas.width,t.ny=t.y/i.canvas.height,t.sys=e,t.moving=!0;let r=t.x-t.prev_x,s=t.y-t.prev_y;(Math.abs(r)>9||Math.abs(s)>9)&&(this._dblTchBegins=0,this._oneTouchStart=!1)}entityPickingEvents(){let e=this.touchState,t=this.mouseState;if(this._isMouseInside!==this._entityPickingEventsActive&&(this._entityPickingEventsActive=this._isMouseInside,!this._entityPickingEventsActive)){let i=this.renderer,r=rt,s=i.getPickingObjectArr(r);if(s){let n=s.rendererEvents;t.pickingObject=s,n&&n.dispatch(n.mouseleave,t),e.pickingObject=s,n&&n.dispatch(n.touchleave,e)}rt[0]=rt[1]=rt[2]=rt[3]=si[0]=si[1]=si[2]=si[3]=ri[0]=ri[1]=ri[2]=ri[3]=0}if(this._isMouseInside&&!(t.leftButtonHold||t.rightButtonHold||t.middleButtonHold)){let i=this.renderer,r=rt,s=si,n=ri;e.x||e.y?i.readPickingColor(e.nx,1-e.ny,n):i.readPickingColor(t.nx,1-t.ny,n),s[0]=r[0],s[1]=r[1],s[2]=r[2],r[0]=n[0],r[1]=n[1],r[2]=n[2],t.pickingObject=null,e.pickingObject=null;let a=i.getPickingObjectArr(r);if(t.pickingObject=a,e.pickingObject=a,r[0]!==s[0]||r[1]!==s[1]||r[2]!==s[2])if(gh(r)){let o=i.getPickingObjectArr(s);if(o){let l=o.rendererEvents;t.pickingObject=o,l&&l.dispatch(l.mouseleave,t),e.pickingObject=o,l&&l.dispatch(l.touchleave,e)}}else{if(mh(s)){let o=i.getPickingObjectArr(s);if(o){let l=o.rendererEvents;t.pickingObject=o,l&&l.dispatch(l.mouseleave,t),e.pickingObject=o,l&&l.dispatch(l.touchleave,e)}}if(a){let o=a.rendererEvents;t.pickingObject=a,o&&o.dispatch(o.mouseenter,t),e.pickingObject=a,o&&o.dispatch(o.touchenter,e)}}}}handleMouseEvents(){let e=this,t=this.mouseState,i=t.pickingObject,r=null;t.leftButtonClick&&(i&&(r=i.rendererEvents,r&&r.dispatch(r.lclick,t)),this.dispatch(e.lclick,t),t.leftButtonClick=!1),t.rightButtonClick&&(i&&(r=i.rendererEvents,r&&r.dispatch(r.rclick,t)),this.dispatch(e.rclick,t),t.rightButtonClick=!1),t.middleButtonClick&&(i&&(r=i.rendererEvents,r&&r.dispatch(r.mclick,t)),this.dispatch(e.mclick,t),t.middleButtonClick=!1),t.leftButtonDown&&(t.leftButtonHold?(i&&(r=i.rendererEvents,r&&r.dispatch(r.lhold,t)),this.dispatch(e.lhold,t)):(t.leftButtonHold=!0,i&&(r=i.rendererEvents,r&&r.dispatch(r.ldown,t)),this.dispatch(e.ldown,t))),t.rightButtonDown&&(t.rightButtonHold?(i&&(r=i.rendererEvents,r&&r.dispatch(r.rhold,t)),this.dispatch(e.rhold,t)):(t.rightButtonHold=!0,i&&(r=i.rendererEvents,r&&r.dispatch(r.rdown,t)),this.dispatch(e.rdown,t))),t.middleButtonDown&&(t.middleButtonHold?(i&&(r=i.rendererEvents,r&&r.dispatch(r.mhold,t)),this.dispatch(e.mhold,t)):(t.middleButtonHold=!0,i&&(r=i.rendererEvents,r&&r.dispatch(r.mdown,t)),this.dispatch(e.mdown,t))),t.leftButtonUp&&(i&&(r=i.rendererEvents,r&&r.dispatch(r.lup,t)),this.dispatch(e.lup,t),t.leftButtonUp=!1,t.leftButtonHold=!1),t.rightButtonUp&&(i&&(r=i.rendererEvents,r&&r.dispatch(r.rup,t)),this.dispatch(e.rup,t),t.rightButtonUp=!1,t.rightButtonHold=!1),t.middleButtonUp&&(i&&(r=i.rendererEvents,r&&r.dispatch(r.mup,t)),this.dispatch(e.mup,t),t.middleButtonUp=!1,t.middleButtonHold=!1),t.leftButtonDoubleClick&&(i&&(r=i.rendererEvents,r&&r.dispatch(r.ldblclick,t)),this.dispatch(e.ldblclick,t),t.leftButtonDoubleClick=!1),t.rightButtonDoubleClick&&(i&&(r=i.rendererEvents,r&&r.dispatch(r.rdblclick,t)),this.dispatch(e.rdblclick,t),t.rightButtonDoubleClick=!1),t.middleButtonDoubleClick&&(i&&(r=i.rendererEvents,r&&r.dispatch(r.mdblclick,t)),this.dispatch(e.mdblclick,t),t.middleButtonDoubleClick=!1),t.wheelDelta&&(i&&(r=i.rendererEvents,r&&r.dispatch(r.mousewheel,t)),this.dispatch(e.mousewheel,t)),t.moving&&(i&&(r=i.rendererEvents,r&&r.dispatch(r.mousemove,t)),this.dispatch(e.mousemove,t),t.prev_x=t.x,t.prev_y=t.y),t.justStopped&&this.dispatch(e.mousestop,t)}handleTouchEvents(){let e=this,t=this.touchState,i=t.pickingObject,r=null;if(t.touchCancel&&(this.dispatch(e.touchcancel,t),t.touchCancel=!1),t.touchStart){let s=this.renderer;s.pickingFramebuffer.activate(),s.pickingFramebuffer.readPixels(rt,t.nx,1-t.ny,1),s.pickingFramebuffer.deactivate();let n=s.getPickingObjectArr(rt);i=t.pickingObject=n,i&&(r=i.rendererEvents,r&&r.dispatch(r.touchstart,t)),this.dispatch(e.touchstart,t),t.touchStart=!1}t.doubleTouch&&(i&&(r=i.rendererEvents,r&&r.dispatch(r.doubletouch,t)),this.dispatch(e.doubletouch,t),t.doubleTouch=!1),t.touchEnd&&(i&&(r=i.rendererEvents,r&&r.dispatch(r.touchend,t)),this.dispatch(e.touchend,t),t.x=0,t.y=0,t.touchEnd=!1),t.moving&&(i&&(r=i.rendererEvents,r&&r.dispatch(r.touchmove,t)),this.dispatch(e.touchmove,t),t.prev_x=t.x,t.prev_y=t.y)}}const vh=["draw","postdraw","resize","resizeend","mouseenter","mouseleave","mousemove","mousestop","lclick","rclick","mclick","ldblclick","rdblclick","mdblclick","lup","rup","mup","ldown","rdown","mdown","lhold","rhold","mhold","mousewheel","touchstart","touchend","touchcancel","touchmove","doubletouch","touchleave","touchenter"];function xh(){return new G("depth",{uniforms:{depthTexture:"sampler2d"},attributes:{corners:"vec2"},vertexShader:`#version 300 es
|
|
3810
3810
|
|
|
3811
3811
|
in vec2 corners;
|
|
3812
3812
|
|
|
@@ -3836,7 +3836,7 @@
|
|
|
3836
3836
|
void main(void) {
|
|
3837
3837
|
float c = LinearizeDepth(tc);
|
|
3838
3838
|
fragColor = vec4(c, c, c, 1.0);
|
|
3839
|
-
}`})}class
|
|
3839
|
+
}`})}class ni{constructor(e=0,t=0,i=0,r=0){this.left=e,this.right=i,this.top=t,this.bottom=r}set(e=0,t=0,i=0,r=0){this.left=e,this.right=i,this.top=t,this.bottom=r}clone(){return new ni(this.left,this.top,this.right,this.bottom)}getWidth(){return Math.abs(this.right-this.left)}getHeight(){return Math.abs(this.bottom-this.top)}getSquare(){return this.getHeight()*this.getWidth()}getDiagonal(){let e=this.getWidth(),t=this.getHeight();return Math.sqrt(t*t+e*e)}fit(e,t){return this.getWidth()===e&&this.getHeight()===t}isInside(e,t){return e>=this.left&&e<=this.right&&t>=this.top&&t<=this.bottom}}class yh{constructor(){this.imagesCache={},this._counter=0,this._pendingsQueue=new lr,this._imageIndexCounter=0}load(e,t){if(this.imagesCache[e])t(this.imagesCache[e]);else{let i={src:e,success:t};this._counter>=1?this._pendingsQueue.unshift(i):this._exec(i)}}_exec(e){this._counter++;const t=this;let i=new Image;i.crossOrigin="",i.onload=function(){t.imagesCache[e.src]=i,i.__nodeIndex=t._imageIndexCounter++,e.success(i),t._dequeueRequest()},i.onerror=function(){t._dequeueRequest()},i.src=e.src}_dequeueRequest(){if(this._counter--,this._pendingsQueue.length&&this._counter<1)for(;this._pendingsQueue.length;){let e=this._pendingsQueue.pop();if(e)if(this.imagesCache[e.src])this._counter<=0?this._counter=0:this._counter--,e.success(this.imagesCache[e.src]);else{this._exec(e);break}}}}class Cr{constructor(e=1024,t=1024){this.nodes=new Map,this.texture=null,this.canvas=new $t(e,t),this.clearCanvas(),this._handler=null,this._images=[],this._btree=null,this._imagesCacheManager=new yh,this.borderSize=4}getImage(){return this.canvas.getImage()}getCanvas(){return this.canvas.getCanvas()}clearCanvas(){this.canvas.fillEmpty()}assignHandler(e){this._handler=e,this.createTexture()}getDiagonal(e){let t=e.atlasWidth||e.width,i=e.atlasHeight||e.height;return Math.sqrt(t*t+i*i)}addImage(e,t=!1){if(e.width&&e.height&&(this._images.push(e),this._makeAtlas(t),e.__nodeIndex!=null))return this.get(e.__nodeIndex)}_completeNode(e,t){if(t){let i=this.canvas.getWidth(),r=this.canvas.getHeight(),s=t.image,n=t.rect,a=Math.round(this.borderSize*.5);this.canvas.drawImage(s,n.left+a,n.top+a,s.atlasWidth||0,s.atlasHeight||0);let o=t.texCoords;o[0]=(n.left+a)/i,o[1]=(n.top+a)/r,o[2]=(n.left+a)/i,o[3]=(n.bottom-a)/r,o[4]=(n.right-a)/i,o[5]=(n.bottom-a)/r,o[6]=(n.right-a)/i,o[7]=(n.bottom-a)/r,o[8]=(n.right-a)/i,o[9]=(n.top+a)/r,o[10]=(n.left+a)/i,o[11]=(n.top+a)/r,e.set(s.__nodeIndex,t)}}_makeAtlas(e=!1){if(e&&this._btree){let t=this._images[this._images.length-1];this._completeNode(this.nodes,this._btree.insert(t))}else{let t=this._images.slice(0);t.sort(function(r,s){return(s.atlasWidth||s.width)-(r.atlasWidth||r.width)||(s.atlasHeight||s.height)-(r.atlasHeight||r.height)}),this._btree=new ai(new ni(0,0,this.canvas.getWidth(),this.canvas.getHeight())),this._btree.atlas=this,this.clearCanvas();let i=new Map;for(let r=0;r<t.length;r++)this._completeNode(i,this._btree.insert(t[r]));this.nodes=null,this.nodes=i}}get(e){return this.nodes.get(e)}set(e,t){this.nodes.set(e,t)}createTexture(e,t){this._handler&&(this._handler.gl.deleteTexture(this.texture),e&&(this.canvas.resize(e.width,e.height),this.canvas.drawImage(e,0,0,e.width,e.height)),this.texture=this._handler.createTexture_l(this.canvas.getCanvas(),t))}loadImage(e,t){this._imagesCacheManager.load(e,t)}getImageTexCoordinates(e){if(e.__nodeIndex!=null){let t=this.get(e.__nodeIndex);if(t)return t.texCoords}}}class ai{constructor(e,t){this.childNodes=null,this.image=null,this.rect=e||new ni,this.texCoords=t||[],this.atlas=null}insert(e){if(this.childNodes){let t=this.childNodes[0].insert(e);return t||this.childNodes[1].insert(e)}else{if(this.image!=null)return;let t=this.rect;const i=(e.atlasWidth||e.width)+this.atlas.borderSize,r=(e.atlasHeight||e.height)+this.atlas.borderSize;if(i>t.getWidth()||r>t.getHeight())return;if(t.fit(i,r))return this.image=e,this;this.childNodes=new Array(2),this.childNodes[0]=new ai,this.childNodes[0].atlas=this.atlas,this.childNodes[1]=new ai,this.childNodes[1].atlas=this.atlas;const s=t.getWidth()-i,n=t.getHeight()-r;return s>n?(this.childNodes[0].rect.set(t.left,t.top,t.left+i,t.bottom),this.childNodes[1].rect.set(t.left+i,t.top,t.right,t.bottom)):(this.childNodes[0].rect.set(t.left,t.top,t.right,t.top+r),this.childNodes[1].rect.set(t.left,t.top+r,t.right,t.bottom)),this.childNodes[0].insert(e)}}}const Bn=11;class Mn extends Cr{constructor(e,t){super(e,t),this.width=0,this.height=0,this.gliphSize=0,this.distanceRange=0,this.nodes=new Map,this.kernings={}}get(e){return this.nodes.get(e)}}class bh extends ai{constructor(e,t){super(e,t),this.emptySize=1,this.metrics={id:0,char:"",width:0,height:0,x:0,y:0,chnl:0,index:0,page:0,xadvance:0,xoffset:0,yoffset:0,nChar:"",nCode:0,nWidth:0,nHeight:0,nAdvance:0,nXOffset:0,nYOffset:0}}}class wh{constructor(e){this.atlasesArr=[],this.atlasIndexes={},this.atlasIndexesDeferred={},this.tokenImageSize=64,this.samplerArr=new Uint32Array(Bn),this.sdfParamsArr=new Float32Array(Bn*4),this._handler=null,this.catalogSrc=e||"./"}assignHandler(e){this._handler=e}getFontIndex(e){let t=this.getFullIndex(e);return this.atlasIndexes[t]||this.loadFont(e,this.catalogSrc,`${e}.json`),this.atlasIndexesDeferred[t]||(this.atlasIndexesDeferred[t]=new mr),this.atlasIndexesDeferred[t].promise}getFullIndex(e){return e.trim().toLowerCase()}_applyFontDataToAtlas(e,t,i=0){let r=t.chars;e.height=t.common.scaleH,e.width=t.common.scaleW,e.gliphSize=t.info.size,e.distanceRange=t.distanceField.distanceRange;let s=e.width,n=e.height,a=e.gliphSize;this.sdfParamsArr[i*4]=s,this.sdfParamsArr[i*4+1]=n,this.sdfParamsArr[i*4+2]=a,this.sdfParamsArr[i*4+3]=e.distanceRange;let o={};for(let l=0;l<r.length;l++){let h=r[l],d=h.char;o[h.id]=d;let f=new ni(h.x,h.y,h.x+h.width,h.y+h.height),u=new Array(12);u[0]=f.left/s,u[1]=f.top/n,u[2]=f.left/s,u[3]=f.bottom/n,u[4]=f.right/s,u[5]=f.bottom/n,u[6]=f.right/s,u[7]=f.bottom/n,u[8]=f.right/s,u[9]=f.top/n,u[10]=f.left/s,u[11]=f.top/n;let g=new bh(f,u),_=h.char.normalize("NFKC"),m=_.charCodeAt(0),v=g.metrics;v.id=h.id,v.char=h.char,v.width=h.width,v.height=h.height,v.x=h.x,v.y=h.y,v.chnl=h.chnl,v.index=h.index,v.page=h.page,v.xadvance=h.xadvance,v.xoffset=h.xoffset,v.yoffset=h.yoffset,v.nChar=_,v.nCode=m,v.nWidth=g.metrics.width/a,v.nHeight=g.metrics.height/a,v.nAdvance=g.metrics.xadvance/a,v.nXOffset=g.metrics.xoffset/a,v.nYOffset=1-g.metrics.yoffset/a,g.emptySize=1,e.nodes.set(_.charCodeAt(0),g)}e.kernings={};for(let l=0;l<t.kernings.length;l++){let h=t.kernings[l],d=h.first,f=h.second;e.kernings[d]||(e.kernings[d]={}),e.kernings[d][f]=h.amount/a}}initFont(e,t,i){let r=this.atlasesArr.length,s=this.getFullIndex(e);this.atlasIndexes[s]=r;let n=this.atlasIndexesDeferred[s];n||(n=this.atlasIndexesDeferred[s]=new mr),this.samplerArr[this.atlasesArr.length]=r;let a=new Mn;a.height=0,a.width=0,a.gliphSize=0,a.distanceRange=0,a.kernings={},a.assignHandler(this._handler),this.atlasesArr[r]=a,this._applyFontDataToAtlas(a,t,r);let o=new Image;o.onload=()=>{this._createTexture(a,o),n.resolve(r)},o.src=i}_createTexture(e,t){e.createTexture(t)}loadFont(e,t,i){let r=this.atlasesArr.length,s=this.getFullIndex(e);this.atlasIndexes[s]=r;let n=this.atlasIndexesDeferred[s];n||(n=this.atlasIndexesDeferred[s]=new mr),this.samplerArr[this.atlasesArr.length]=r;let a=new Mn;a.height=0,a.width=0,a.gliphSize=0,a.distanceRange=0,a.kernings={},a.assignHandler(this._handler),this.atlasesArr[r]=a,fetch(`${t}/${i}`).then(o=>{if(!o.ok)throw Error(`Unable to load "${t}/${i}"`);return o.json()}).then(o=>{this._applyFontDataToAtlas(a,o,r);let l=new Image;l.onload=()=>{this._createTexture(a,l),n.resolve(r)},l.src=`${t}/${o.pages[0]}`,l.crossOrigin="Anonymous"}).catch(o=>(n.reject(),{status:"error",msg:o.toString()}))}}function Th(){return new G("screenFrame",{uniforms:{texture:"sampler2d"},attributes:{corners:"vec3"},vertexShader:`attribute vec2 corners;
|
|
3840
3840
|
|
|
3841
3841
|
varying vec2 tc;
|
|
3842
3842
|
void main(void) {
|
|
@@ -3918,4 +3918,4 @@
|
|
|
3918
3918
|
mapped = pow(mapped, vec3(1.0 / gamma));
|
|
3919
3919
|
|
|
3920
3920
|
fragColor = vec4(mapped, hdrColor.a);
|
|
3921
|
-
}`})}const Eh=0;let Ch=0,Ph=0,Lh=0;function Rn(c,e,t){return new Promise((i,r)=>{function s(){const n=c.clientWaitSync(e,t,0);n==c.WAIT_FAILED?r():n==c.TIMEOUT_EXPIRED?requestAnimationFrame(s):i()}s()})}class Bh{constructor(e,t={}){if(this._readPickingBuffer_webgl1=()=>{this.pickingFramebuffer.activate(),this.pickingFramebuffer.readAllPixels(this._tempPickingPix_),this.pickingFramebuffer.deactivate()},this._readPickingBuffer_webgl2=()=>{const s=this.handler.gl,n=this._pickingPixelBuffer;if(!this._skipPickingFrame){this._skipPickingFrame=!0;let a=this._tempPickingPix_,o=this.pickingFramebuffer.width,l=this.pickingFramebuffer.height;this.pickingFramebuffer.activate(),s.bindBuffer(s.PIXEL_PACK_BUFFER,n),s.bufferData(s.PIXEL_PACK_BUFFER,a.byteLength,s.STREAM_READ),s.readPixels(0,0,o,l,s.RGBA,s.UNSIGNED_BYTE,0),s.bindBuffer(s.PIXEL_PACK_BUFFER,null),this.pickingFramebuffer.deactivate();const h=s.fenceSync(s.SYNC_GPU_COMMANDS_COMPLETE,0);s.flush(),Rn(s,h,0).then(()=>{this._skipPickingFrame=!1,s.deleteSync(h),s.bindBuffer(s.PIXEL_PACK_BUFFER,n),s.getBufferSubData(s.PIXEL_PACK_BUFFER,0,a),s.bindBuffer(s.PIXEL_PACK_BUFFER,null)})}},this._readDistanceBuffer_webgl1=()=>{this.distanceFramebuffer.activate(),this.distanceFramebuffer.readAllPixels(this._tempDistancePix_),this.distanceFramebuffer.deactivate()},this._readDistanceBuffer_webgl2=()=>{const s=this.handler.gl,n=this._distancePixelBuffer;if(!this._skipDistanceFrame){this._skipDistanceFrame=!0;let a=this._tempDistancePix_,o=this.distanceFramebuffer.width,l=this.distanceFramebuffer.height;this.distanceFramebuffer.activate(),s.bindBuffer(s.PIXEL_PACK_BUFFER,n),s.bufferData(s.PIXEL_PACK_BUFFER,a.byteLength,s.STREAM_READ),s.readPixels(0,0,o,l,s.RGBA,s.UNSIGNED_BYTE,0),s.bindBuffer(s.PIXEL_PACK_BUFFER,null),this.distanceFramebuffer.deactivate();const h=s.fenceSync(s.SYNC_GPU_COMMANDS_COMPLETE,0);s.flush(),Rn(s,h,0).then(()=>{this._skipDistanceFrame=!1,s.deleteSync(h),s.bindBuffer(s.PIXEL_PACK_BUFFER,n),s.getBufferSubData(s.PIXEL_PACK_BUFFER,0,a),s.bindBuffer(s.PIXEL_PACK_BUFFER,null)})}},this.div=null,this.handler=e,this.exposure=3.01,this.gamma=.47,this.whitepoint=1,this.brightThreshold=.9,this._renderNodesArr=[],this.renderNodes={},this.activeCamera=null,this.events=dh(this),this.controls={},t.controls)for(let s in t.controls)this.controls[t.controls[s].name]=t.controls[s];this.controlsBag={},this.colorObjects=new Map,this._pickingCallbacks=[],this.pickingFramebuffer=null,this._tempPickingPix_=new Uint8Array([]),this.distanceFramebuffer=null,this._distanceCallbacks=[],this._tempDistancePix_=new Uint8Array([]),this._depthCallbacks=[],this.depthFramebuffer=null;let i=new URLSearchParams(location.search);i.get("og_msaa")?this._msaa=Number(i.get("og_msaa")):this._msaa=t.msaa!=null?t.msaa:Eh,this._internalFormat="RGBA16F",this._format="RGBA",this._type="FLOAT",this.sceneFramebuffer=null,this.blitFramebuffer=null,this.toneMappingFramebuffer=null,this._initialized=!1,this.billboardsTextureAtlas=new Cr,this.geoObjectsTextureAtlas=new Cr,this.fontAtlas=new wh(t.fontsSrc),this._entityCollections=[],this._currentOutput="screen",this._fnScreenFrame=null,this.labelWorker=new Ma(4),this.__useDistanceFramebuffer__=!0,this.screenDepthFramebuffer=null,this.screenFramePositionBuffer=null,this.screenTexture={},this.outputTexture=null,this._skipDistanceFrame=!1,this._distancePixelBuffer=null,this._skipPickingFrame=!1,this._pickingPixelBuffer=null,this._readDistanceBuffer=this._readDistanceBuffer_webgl2,this._readPickingBuffer=this._readPickingBuffer_webgl2,(t.autoActivate||At(t.autoActivate))&&this.start()}enableBlendOneSrcAlpha(){let e=this.handler.gl;e.enable(e.BLEND),e.blendEquation(e.FUNC_ADD),e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA)}enableBlendDefault(){let e=this.handler.gl;e.enable(e.BLEND),e.blendEquation(e.FUNC_ADD),e.blendFuncSeparate(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA,e.ONE,e.ONE)}setEventsActivity(e){this.events.active=e}addDepthCallback(e,t){let i=Ph++;return this._depthCallbacks.push({id:i,callback:t,sender:e}),i}removeDepthCallback(e){for(let t=0;t<this._depthCallbacks.length;t++)if(e===this._depthCallbacks[t].id){this._depthCallbacks.splice(t,1);break}}addDistanceCallback(e,t){let i=Lh++;return this._distanceCallbacks.push({id:i,callback:t,sender:e}),i}removeDistanceCallback(e){for(let t=0;t<this._distanceCallbacks.length;t++)if(e===this._distanceCallbacks[t].id){this._distanceCallbacks.splice(t,1);break}}addPickingCallback(e,t){let i=Ch++;return this._pickingCallbacks.push({id:i,callback:t,sender:e}),i}removePickingCallback(e){for(let t=0;t<this._pickingCallbacks.length;t++)if(e===this._pickingCallbacks[t].id){this._pickingCallbacks.splice(t,1);break}}getPickingObject(e,t,i){return this.colorObjects.get(`${e}_${t}_${i}`)}getPickingObjectArr(e){return this.colorObjects.get(`${e[0]}_${e[1]}_${e[2]}`)}getPickingObject3v(e){return this.colorObjects.get(`${e.x}_${e.y}_${e.z}`)}assignPickingColor(e){if(!e._pickingColor||e._pickingColor.isZero()){let t=0,i=0,r=0,s="0_0_0";for(;!(t||i||r)||this.colorObjects.has(s);)t=Hi(1,255),i=Hi(1,255),r=Hi(1,255),s=`${t}_${i}_${r}`;e._pickingColor?e._pickingColor.set(t,i,r):e._pickingColor=new p(t,i,r),e._pickingColorU=new Float32Array([t/255,i/255,r/255]),this.colorObjects.set(s,e)}}clearPickingColor(e){if(e._pickingColor&&!e._pickingColor.isZero()){let t=e._pickingColor;t.isZero()||(this.colorObjects.delete(`${t.x}_${t.y}_${t.z}`),t.x=t.y=t.z=0)}}getWidth(){return this.handler.canvas.clientWidth}getHeight(){return this.handler.canvas.clientHeight}getCenter(){let e=this.handler.canvas;return new V(Math.round(e.width*.5),Math.round(e.height*.5))}getClientCenter(){let e=this.handler.canvas;return new V(Math.round(e.clientWidth*.5),Math.round(e.clientHeight*.5))}addControl(e){e.addTo(this)}addControls(e){for(let t=0;t<e.length;t++)e[t].addTo(this)}removeControl(e){e.remove()}isInitialized(){return this._initialized}initialize(){if(!this._initialized){if(this._initialized=!0,this.handler.initialize(),this.billboardsTextureAtlas.assignHandler(this.handler),this.geoObjectsTextureAtlas.assignHandler(this.handler),this.fontAtlas.assignHandler(this.handler),this.handler.setFrameCallback(()=>{this.draw()}),this.activeCamera=new bn(this,{eye:new p(0,0,0),look:new p(0,0,-1),up:new p(0,1,0)}),this.events.initialize(),this.events.on("charkeypress",be.KEY_APOSTROPHE,function(){He.setVisibility(!He.getVisibility())}),this.handler.addProgram(Th()),this.pickingFramebuffer=new Be(this.handler,{width:640,height:480}),this.pickingFramebuffer.init(),this._tempPickingPix_=new Uint8Array(this.pickingFramebuffer.width*this.pickingFramebuffer.height*4),this.distanceFramebuffer=new Be(this.handler,{width:320,height:240}),this.distanceFramebuffer.init(),this._tempDistancePix_=new Uint8Array(this.distanceFramebuffer.width*this.distanceFramebuffer.height*4),this.depthFramebuffer=new Be(this.handler,{size:2,internalFormat:["RGBA","DEPTH_COMPONENT24"],format:["RGBA","DEPTH_COMPONENT"],type:["UNSIGNED_BYTE","UNSIGNED_INT"],attachment:["COLOR_ATTACHMENT","DEPTH_ATTACHMENT"],useDepth:!1}),this.depthFramebuffer.init(),this.screenDepthFramebuffer=new Be(this.handler,{useDepth:!1}),this.screenDepthFramebuffer.init(),this.handler.gl.type==="webgl")this._readDistanceBuffer=this._readDistanceBuffer_webgl1,this._readPickingBuffer=this._readPickingBuffer_webgl1,this.sceneFramebuffer=new Be(this.handler),this.sceneFramebuffer.init(),this._fnScreenFrame=this._screenFrameNoMSAA,this.screenTexture={screen:this.sceneFramebuffer.textures[0],picking:this.pickingFramebuffer.textures[0],distance:this.distanceFramebuffer.textures[0],depth:this.screenDepthFramebuffer.textures[0]};else{let e=this.getMaxMSAA(this._internalFormat);this._msaa>e&&(this._msaa=e),this.handler.addPrograms([Ah()]),this.handler.addPrograms([xh()]),this.sceneFramebuffer=new oh(this.handler,{size:1,msaa:this._msaa,internalFormat:this._internalFormat,filter:"LINEAR"}),this.sceneFramebuffer.init(),this.blitFramebuffer=new Be(this.handler,{size:1,useDepth:!1,internalFormat:this._internalFormat,format:this._format,type:this._type,filter:"NEAREST"}),this.blitFramebuffer.init(),this.toneMappingFramebuffer=new Be(this.handler,{useDepth:!1}),this.toneMappingFramebuffer.init(),this._fnScreenFrame=this._screenFrameMSAA,this.screenTexture={screen:this.toneMappingFramebuffer.textures[0],picking:this.pickingFramebuffer.textures[0],distance:this.distanceFramebuffer.textures[0],depth:this.screenDepthFramebuffer.textures[0],frustum:this.depthFramebuffer.textures[0]},this._initReadPixelsBuffers()}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()}}_initReadPixelsBuffers(){let e=this.handler.gl;this._distancePixelBuffer=e.createBuffer(),e.bindBuffer(e.PIXEL_PACK_BUFFER,this._distancePixelBuffer),e.bufferData(e.PIXEL_PACK_BUFFER,this.distanceFramebuffer.width*this.distanceFramebuffer.height*4,e.STREAM_READ),e.bindBuffer(e.PIXEL_PACK_BUFFER,null),this._pickingPixelBuffer=e.createBuffer(),e.bindBuffer(e.PIXEL_PACK_BUFFER,this._pickingPixelBuffer),e.bufferData(e.PIXEL_PACK_BUFFER,this.pickingFramebuffer.width*this.pickingFramebuffer.height*4,e.STREAM_READ),e.bindBuffer(e.PIXEL_PACK_BUFFER,null)}_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.setAspectRatio(e.width/e.height),this.sceneFramebuffer.setSize(e.width*.5,e.height*.5),this.blitFramebuffer&&this.blitFramebuffer.setSize(e.width*.5,e.height*.5,!0)}_resizeEnd(){let e=this.handler.canvas;this.activeCamera.setAspectRatio(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.depthFramebuffer&&this.depthFramebuffer.setSize(e.clientWidth,e.clientHeight,!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.distance=this.distanceFramebuffer.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.distance=this.distanceFramebuffer.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]?He.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])He.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){this._entityCollections.push.apply(this._entityCollections,e)}_drawOpaqueEntityCollections(){let e=this._entityCollections;if(e.length){this.enableBlendDefault();let t=e.length;for(;t--;){let i=e[t];e[t]._fadingOpacity&&(i.events.dispatch(i.events.draw,i),e[t].geoObjectHandler.draw())}for(t=e.length;t--;)e[t]._fadingOpacity&&e[t].pointCloudHandler.draw()}}_drawTransparentEntityCollections(){let e=this._entityCollections;if(e.length){let t=this.handler.gl;this.enableBlendDefault(),t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,this.billboardsTextureAtlas.texture);let i=e.length;for(;i--;){let s=e[i];s._fadingOpacity&&s.billboardHandler.draw()}let r=this.fontAtlas.atlasesArr;for(i=0;i<r.length;i++)t.activeTexture(t.TEXTURE0+i),t.bindTexture(t.TEXTURE_2D,r[i].texture);for(i=e.length;i--;)e[i]._fadingOpacity&&e[i].labelHandler.draw();for(i=e.length;i--;)e[i]._fadingOpacity&&e[i].rayHandler.draw();for(i=e.length;i--;)e[i]._fadingOpacity&&e[i].polylineHandler.draw();for(i=e.length;i--;)e[i]._fadingOpacity&&e[i].stripHandler.draw()}}_clearEntityCollectionQueue(){this._entityCollections.length=0,this._entityCollections=[]}draw(){this.activeCamera.checkMoveEnd();let e=this.events;e.handleEvents();let t=this.sceneFramebuffer;t.activate();let i=this.handler,r=i.gl;r.clearColor(0,0,0,1),r.clear(r.COLOR_BUFFER_BIT|r.DEPTH_BUFFER_BIT),e.dispatch(e.draw,this);let s=this.activeCamera.frustums,n=e.pointerEvent()||this.activeCamera.isMoving,a=this._renderNodesArr,o=s.length;for(;o--;){this.activeCamera.setCurrentFrustum(o),r.clear(r.DEPTH_BUFFER_BIT);let l=a.length;for(;l--;)a[l].preDrawNode();for(this._drawOpaqueEntityCollections(),l=a.length;l--;)this.enableBlendDefault(),a[l].drawNode();this._drawTransparentEntityCollections(),this._clearEntityCollectionQueue(),n&&(this._drawPickingBuffer(),this.__useDistanceFramebuffer__&&this._drawDistanceBuffer())}t.deactivate(),this.blitFramebuffer&&t.blitTo(this.blitFramebuffer,0),n&&(i.isWebGl2()&&this._drawDepthBuffer(),this._readPickingBuffer(),this.__useDistanceFramebuffer__&&this._readDistanceBuffer()),this._fnScreenFrame(),e.dispatch(e.postdraw,this),e.mouseState.wheelDelta=0,e.mouseState.justStopped=!1,e.mouseState.moving=!1,e.touchState.moving=!1}_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(),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(){this.pickingFramebuffer.activate();let t=this.handler.gl;this.activeCamera.isFirstPass?(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);let i=this._pickingCallbacks;for(let r=0,s=i.length;r<s;r++)i[r].callback.call(i[r].sender);t.enable(t.BLEND),this.pickingFramebuffer.deactivate()}_drawDistanceBuffer(){this.distanceFramebuffer.activate();let t=this.handler.gl;this.activeCamera.isFirstPass?(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);let i=this._distanceCallbacks,r=i.length;for(;r--;)i[r].callback.call(i[r].sender);t.enable(t.BLEND),this.distanceFramebuffer.deactivate()}_drawDepthBuffer(){this.depthFramebuffer.activate();let e=this.handler,t=e.gl;t.clearColor(0,0,0,1),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT),t.enable(t.DEPTH_TEST);let i=this._depthCallbacks,r=i.length;for(;r--;)i[r].callback.call(i[r].sender);this.depthFramebuffer.deactivate(),this.screenDepthFramebuffer.activate();let s=e.programs.depth,n=s._program;t.bindBuffer(t.ARRAY_BUFFER,this.screenFramePositionBuffer),t.vertexAttribPointer(n.attributes.corners,2,t.FLOAT,!1,0,0),s.activate(),t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,this.depthFramebuffer.textures[1]),t.uniform1i(n.uniforms.depthTexture,0),t.drawArrays(t.TRIANGLE_STRIP,0,4),this.screenDepthFramebuffer.deactivate()}readPickingColor(e,t,i){let r=this.pickingFramebuffer.width,s=this.pickingFramebuffer.height;e=Math.round(e*r),t=Math.round(t*s);let n=(t*r+e)*4;i[0]=this._tempPickingPix_[n],i[1]=this._tempPickingPix_[n+1],i[2]=this._tempPickingPix_[n+2]}readDistanceColor(e,t,i){let r=this.distanceFramebuffer.width,s=this.distanceFramebuffer.height;e=Math.round(e*r),t=Math.round(t*s);let n=(t*r+e)*4;i[0]=this._tempDistancePix_[n],i[1]=this._tempDistancePix_[n+1],i[2]=this._tempDistancePix_[n+2]}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.distanceFramebuffer=null,this._distanceCallbacks=[],this._tempDistancePix_=null,this._depthCallbacks=[],this.depthFramebuffer=null,this.sceneFramebuffer=null,this.blitFramebuffer=null,this.toneMappingFramebuffer=null,this._entityCollections=[],this.handler.destroy(),this.handler=null,this._initialized=!1}}const Mh="/night.png",Rh="/spec.png",Sn="/res",Sh="globus_planet_";class Ft{constructor(e){this.$target=null,this._instanceID=`__globus${Ft.__counter__++?Ft.__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 Bh(new Di(this._canvas,{autoActivate:!1,pixelRatio:e.dpi||window.devicePixelRatio+.15,context:{antialias:!1,premultipliedAlpha:!1}}),{autoActivate:!1,msaa:e.msaa,fontsSrc:e.fontsSrc}),this.renderer.div=this.$inner,e.skybox&&this.renderer.addNode(e.skybox),this._planetName=e.name?e.name:Sh+Ft.__counter__,this.planet=new eh({name:this._planetName,frustums:e.frustums,ellipsoid:e.ellipsoid,maxGridSize:e.maxGridSize,nightTextureSrc:e.nightTextureSrc===null?null:`${e.resourcesSrc||Sn}${Mh}`,specularTextureSrc:e.specularTextureSrc===null?null:`${e.resourcesSrc||Sn}${Rh}`,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}),e.terrain?Array.isArray(e.terrain)?this.planet.setTerrain(e.terrain[0]):this.planet.setTerrain(e.terrain):this.planet.setTerrain(new ri),this.renderer.addNode(this.planet),e.controls?this.planet.addControls(e.controls):this.planet.addControls([new hl,e.useEarthNavigation?new el:new fr({minSlope:e.minSlope}),new al,new Jo,new il,new ya]);const i=this.renderer.controls;let r;for(let n in i)if(i[n]instanceof sn){r=i[n];break}r?this.sun=r:(this.sun=new sn,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||At(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){this.detach();let t;e instanceof HTMLElement?t=e:t=document.getElementById(e)||document.querySelector(e),t&&(this.$target=t,t.appendChild(this.$inner))}detach(){this.$target&&this.$target.removeChild(this.$inner)}destroy(){this.detach(),this.renderer.destroy()}}Ft.__counter__=0;let kt;const In=Me.createContext({globe:null,setGlobe:()=>{}}),zn=({children:c})=>{const[e,t]=Me.useState(kt);return Me.createElement(In.Provider,{value:{globe:e,setGlobe:t}},c)},Fn=()=>Me.useContext(In),Ih=({children:c})=>{const e=Me.useRef(null),{setGlobe:t}=Fn();return Me.useEffect(()=>{if(kt)e.current=kt.$target;else{let i=function(n,a,o){for(var l="",h=o;h>0;h--){var d=0,f=1<<h-1;n&f&&d++,a&f&&(d+=2),l+=d.toString()}return l};const r=new An("OpenStreetMap",{isBaseLayer:!0,url:"//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",visibility:!0,attribution:"Data @ OpenStreetMap contributors, ODbL"}),s=new An("sat",{isBaseLayer:!0,subdomains:["t0","t1","t2","t3"],url:"https://ecn.{s}.tiles.virtualearth.net/tiles/a{quad}.jpeg?n=z&g=7146",visibility:!0,attribution:'<a href="http://www.bing.com" target="_blank"><img title="Bing Imagery" src="https://sandcastle.cesium.com/CesiumUnminified/Assets/Images/bing_maps_credit.png" alt="Bing"></a> © 2021 Microsoft Corporation',maxNativeZoom:19,defaultTextures:[{color:"#001522"},{color:"#E4E6F3"}],shininess:18,specular:[63e-5,55e-5,32e-5],ambient:"rgb(100,100,140)",diffuse:"rgb(450,450,450)",nightTextureCoefficient:2.7,urlRewrite:function(n,a){return Et(a,{s:this._getSubdomain(),quad:i(n.tileX,n.tileY,n.tileZoom)})}});return kt=new Ft({target:e.current,name:"Earth",terrain:new ih,layers:[r,s],autoActivate:!0}),kt.planet.atmosphereEnabled=!0,()=>{}}t(kt)},[]),Me.createElement(zn,null,Me.createElement("div",{style:{width:"100%",height:"100%"},id:"globus",ref:e},c))};je.GlobeContextProvider=zn,je.default=Ih,je.useGlobusContext=Fn,Object.defineProperties(je,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
|
3921
|
+
}`})}const Eh=0;let Ch=0,Ph=0,Lh=0;function Rn(c,e,t){return new Promise((i,r)=>{function s(){const n=c.clientWaitSync(e,t,0);n==c.WAIT_FAILED?r():n==c.TIMEOUT_EXPIRED?requestAnimationFrame(s):i()}s()})}class Bh{constructor(e,t={}){if(this._readPickingBuffer_webgl1=()=>{this.pickingFramebuffer.activate(),this.pickingFramebuffer.readAllPixels(this._tempPickingPix_),this.pickingFramebuffer.deactivate()},this._readPickingBuffer_webgl2=()=>{const s=this.handler.gl,n=this._pickingPixelBuffer;if(!this._skipPickingFrame){this._skipPickingFrame=!0;let a=this._tempPickingPix_,o=this.pickingFramebuffer.width,l=this.pickingFramebuffer.height;this.pickingFramebuffer.activate(),s.bindBuffer(s.PIXEL_PACK_BUFFER,n),s.bufferData(s.PIXEL_PACK_BUFFER,a.byteLength,s.STREAM_READ),s.readPixels(0,0,o,l,s.RGBA,s.UNSIGNED_BYTE,0),s.bindBuffer(s.PIXEL_PACK_BUFFER,null),this.pickingFramebuffer.deactivate();const h=s.fenceSync(s.SYNC_GPU_COMMANDS_COMPLETE,0);s.flush(),Rn(s,h,0).then(()=>{this._skipPickingFrame=!1,s.deleteSync(h),s.bindBuffer(s.PIXEL_PACK_BUFFER,n),s.getBufferSubData(s.PIXEL_PACK_BUFFER,0,a),s.bindBuffer(s.PIXEL_PACK_BUFFER,null)})}},this._readDistanceBuffer_webgl1=()=>{this.distanceFramebuffer.activate(),this.distanceFramebuffer.readAllPixels(this._tempDistancePix_),this.distanceFramebuffer.deactivate()},this._readDistanceBuffer_webgl2=()=>{const s=this.handler.gl,n=this._distancePixelBuffer;if(!this._skipDistanceFrame){this._skipDistanceFrame=!0;let a=this._tempDistancePix_,o=this.distanceFramebuffer.width,l=this.distanceFramebuffer.height;this.distanceFramebuffer.activate(),s.bindBuffer(s.PIXEL_PACK_BUFFER,n),s.bufferData(s.PIXEL_PACK_BUFFER,a.byteLength,s.STREAM_READ),s.readPixels(0,0,o,l,s.RGBA,s.UNSIGNED_BYTE,0),s.bindBuffer(s.PIXEL_PACK_BUFFER,null),this.distanceFramebuffer.deactivate();const h=s.fenceSync(s.SYNC_GPU_COMMANDS_COMPLETE,0);s.flush(),Rn(s,h,0).then(()=>{this._skipDistanceFrame=!1,s.deleteSync(h),s.bindBuffer(s.PIXEL_PACK_BUFFER,n),s.getBufferSubData(s.PIXEL_PACK_BUFFER,0,a),s.bindBuffer(s.PIXEL_PACK_BUFFER,null)})}},this.div=null,this.handler=e,this.exposure=3.01,this.gamma=.47,this.whitepoint=1,this.brightThreshold=.9,this._renderNodesArr=[],this.renderNodes={},this.activeCamera=null,this.events=dh(this),this.controls={},t.controls)for(let s in t.controls)this.controls[t.controls[s].name]=t.controls[s];this.controlsBag={},this.colorObjects=new Map,this._pickingCallbacks=[],this.pickingFramebuffer=null,this._tempPickingPix_=new Uint8Array([]),this.distanceFramebuffer=null,this._distanceCallbacks=[],this._tempDistancePix_=new Uint8Array([]),this._depthCallbacks=[],this.depthFramebuffer=null;let i=new URLSearchParams(location.search);i.get("og_msaa")?this._msaa=Number(i.get("og_msaa")):this._msaa=t.msaa!=null?t.msaa:Eh,this._internalFormat="RGBA16F",this._format="RGBA",this._type="FLOAT",this.sceneFramebuffer=null,this.blitFramebuffer=null,this.toneMappingFramebuffer=null,this._initialized=!1,this.billboardsTextureAtlas=new Cr,this.geoObjectsTextureAtlas=new Cr,this.fontAtlas=new wh(t.fontsSrc),this._entityCollections=[],this._currentOutput="screen",this._fnScreenFrame=null,this.labelWorker=new Ma(4),this.__useDistanceFramebuffer__=!0,this.screenDepthFramebuffer=null,this.screenFramePositionBuffer=null,this.screenTexture={},this.outputTexture=null,this._skipDistanceFrame=!1,this._distancePixelBuffer=null,this._skipPickingFrame=!1,this._pickingPixelBuffer=null,this._readDistanceBuffer=this._readDistanceBuffer_webgl2,this._readPickingBuffer=this._readPickingBuffer_webgl2,(t.autoActivate||At(t.autoActivate))&&this.start()}enableBlendOneSrcAlpha(){let e=this.handler.gl;e.enable(e.BLEND),e.blendEquation(e.FUNC_ADD),e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA)}enableBlendDefault(){let e=this.handler.gl;e.enable(e.BLEND),e.blendEquation(e.FUNC_ADD),e.blendFuncSeparate(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA,e.ONE,e.ONE)}setEventsActivity(e){this.events.active=e}addDepthCallback(e,t){let i=Ph++;return this._depthCallbacks.push({id:i,callback:t,sender:e}),i}removeDepthCallback(e){for(let t=0;t<this._depthCallbacks.length;t++)if(e===this._depthCallbacks[t].id){this._depthCallbacks.splice(t,1);break}}addDistanceCallback(e,t){let i=Lh++;return this._distanceCallbacks.push({id:i,callback:t,sender:e}),i}removeDistanceCallback(e){for(let t=0;t<this._distanceCallbacks.length;t++)if(e===this._distanceCallbacks[t].id){this._distanceCallbacks.splice(t,1);break}}addPickingCallback(e,t){let i=Ch++;return this._pickingCallbacks.push({id:i,callback:t,sender:e}),i}removePickingCallback(e){for(let t=0;t<this._pickingCallbacks.length;t++)if(e===this._pickingCallbacks[t].id){this._pickingCallbacks.splice(t,1);break}}getPickingObject(e,t,i){return this.colorObjects.get(`${e}_${t}_${i}`)}getPickingObjectArr(e){return this.colorObjects.get(`${e[0]}_${e[1]}_${e[2]}`)}getPickingObject3v(e){return this.colorObjects.get(`${e.x}_${e.y}_${e.z}`)}assignPickingColor(e){if(!e._pickingColor||e._pickingColor.isZero()){let t=0,i=0,r=0,s="0_0_0";for(;!(t||i||r)||this.colorObjects.has(s);)t=Hi(1,255),i=Hi(1,255),r=Hi(1,255),s=`${t}_${i}_${r}`;e._pickingColor?e._pickingColor.set(t,i,r):e._pickingColor=new p(t,i,r),e._pickingColorU=new Float32Array([t/255,i/255,r/255]),this.colorObjects.set(s,e)}}clearPickingColor(e){if(e._pickingColor&&!e._pickingColor.isZero()){let t=e._pickingColor;t.isZero()||(this.colorObjects.delete(`${t.x}_${t.y}_${t.z}`),t.x=t.y=t.z=0)}}getWidth(){return this.handler.canvas.clientWidth}getHeight(){return this.handler.canvas.clientHeight}getCenter(){let e=this.handler.canvas;return new V(Math.round(e.width*.5),Math.round(e.height*.5))}getClientCenter(){let e=this.handler.canvas;return new V(Math.round(e.clientWidth*.5),Math.round(e.clientHeight*.5))}addControl(e){e.addTo(this)}addControls(e){for(let t=0;t<e.length;t++)e[t].addTo(this)}removeControl(e){e.remove()}isInitialized(){return this._initialized}initialize(){if(!this._initialized){if(this._initialized=!0,this.handler.initialize(),this.billboardsTextureAtlas.assignHandler(this.handler),this.geoObjectsTextureAtlas.assignHandler(this.handler),this.fontAtlas.assignHandler(this.handler),this.handler.setFrameCallback(()=>{this.draw()}),this.activeCamera=new bn(this,{eye:new p(0,0,0),look:new p(0,0,-1),up:new p(0,1,0)}),this.events.initialize(),this.events.on("charkeypress",be.KEY_APOSTROPHE,function(){He.setVisibility(!He.getVisibility())}),this.handler.addProgram(Th()),this.pickingFramebuffer=new Be(this.handler,{width:640,height:480}),this.pickingFramebuffer.init(),this._tempPickingPix_=new Uint8Array(this.pickingFramebuffer.width*this.pickingFramebuffer.height*4),this.distanceFramebuffer=new Be(this.handler,{width:320,height:240}),this.distanceFramebuffer.init(),this._tempDistancePix_=new Uint8Array(this.distanceFramebuffer.width*this.distanceFramebuffer.height*4),this.depthFramebuffer=new Be(this.handler,{size:2,internalFormat:["RGBA","DEPTH_COMPONENT24"],format:["RGBA","DEPTH_COMPONENT"],type:["UNSIGNED_BYTE","UNSIGNED_INT"],attachment:["COLOR_ATTACHMENT","DEPTH_ATTACHMENT"],useDepth:!1}),this.depthFramebuffer.init(),this.screenDepthFramebuffer=new Be(this.handler,{useDepth:!1}),this.screenDepthFramebuffer.init(),this.handler.gl.type==="webgl")this._readDistanceBuffer=this._readDistanceBuffer_webgl1,this._readPickingBuffer=this._readPickingBuffer_webgl1,this.sceneFramebuffer=new Be(this.handler),this.sceneFramebuffer.init(),this._fnScreenFrame=this._screenFrameNoMSAA,this.screenTexture={screen:this.sceneFramebuffer.textures[0],picking:this.pickingFramebuffer.textures[0],distance:this.distanceFramebuffer.textures[0],depth:this.screenDepthFramebuffer.textures[0]};else{let e=this.getMaxMSAA(this._internalFormat);this._msaa>e&&(this._msaa=e),this.handler.addPrograms([Ah()]),this.handler.addPrograms([xh()]),this.sceneFramebuffer=new oh(this.handler,{size:1,msaa:this._msaa,internalFormat:this._internalFormat,filter:"LINEAR"}),this.sceneFramebuffer.init(),this.blitFramebuffer=new Be(this.handler,{size:1,useDepth:!1,internalFormat:this._internalFormat,format:this._format,type:this._type,filter:"NEAREST"}),this.blitFramebuffer.init(),this.toneMappingFramebuffer=new Be(this.handler,{useDepth:!1}),this.toneMappingFramebuffer.init(),this._fnScreenFrame=this._screenFrameMSAA,this.screenTexture={screen:this.toneMappingFramebuffer.textures[0],picking:this.pickingFramebuffer.textures[0],distance:this.distanceFramebuffer.textures[0],depth:this.screenDepthFramebuffer.textures[0],frustum:this.depthFramebuffer.textures[0]},this._initReadPixelsBuffers()}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()}}_initReadPixelsBuffers(){let e=this.handler.gl;this._distancePixelBuffer=e.createBuffer(),e.bindBuffer(e.PIXEL_PACK_BUFFER,this._distancePixelBuffer),e.bufferData(e.PIXEL_PACK_BUFFER,this.distanceFramebuffer.width*this.distanceFramebuffer.height*4,e.STREAM_READ),e.bindBuffer(e.PIXEL_PACK_BUFFER,null),this._pickingPixelBuffer=e.createBuffer(),e.bindBuffer(e.PIXEL_PACK_BUFFER,this._pickingPixelBuffer),e.bufferData(e.PIXEL_PACK_BUFFER,this.pickingFramebuffer.width*this.pickingFramebuffer.height*4,e.STREAM_READ),e.bindBuffer(e.PIXEL_PACK_BUFFER,null)}_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.setAspectRatio(e.width/e.height),this.sceneFramebuffer.setSize(e.width*.5,e.height*.5),this.blitFramebuffer&&this.blitFramebuffer.setSize(e.width*.5,e.height*.5,!0)}_resizeEnd(){let e=this.handler.canvas;this.activeCamera.setAspectRatio(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.depthFramebuffer&&this.depthFramebuffer.setSize(e.clientWidth,e.clientHeight,!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.distance=this.distanceFramebuffer.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.distance=this.distanceFramebuffer.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]?He.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])He.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){this._entityCollections.push.apply(this._entityCollections,e)}_drawOpaqueEntityCollections(){let e=this._entityCollections;if(e.length){this.enableBlendDefault();let t=e.length;for(;t--;){let i=e[t];e[t]._fadingOpacity&&(i.events.dispatch(i.events.draw,i),e[t].geoObjectHandler.draw())}for(t=e.length;t--;)e[t]._fadingOpacity&&e[t].pointCloudHandler.draw()}}_drawTransparentEntityCollections(){let e=this._entityCollections;if(e.length){let t=this.handler.gl;this.enableBlendDefault(),t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,this.billboardsTextureAtlas.texture);let i=e.length;for(;i--;){let s=e[i];s._fadingOpacity&&s.billboardHandler.draw()}let r=this.fontAtlas.atlasesArr;for(i=0;i<r.length;i++)t.activeTexture(t.TEXTURE0+i),t.bindTexture(t.TEXTURE_2D,r[i].texture);for(i=e.length;i--;)e[i]._fadingOpacity&&e[i].labelHandler.draw();for(i=e.length;i--;)e[i]._fadingOpacity&&e[i].rayHandler.draw();for(i=e.length;i--;)e[i]._fadingOpacity&&e[i].polylineHandler.draw();for(i=e.length;i--;)e[i]._fadingOpacity&&e[i].stripHandler.draw()}}_clearEntityCollectionQueue(){this._entityCollections.length=0,this._entityCollections=[]}draw(){this.activeCamera.checkMoveEnd();let e=this.events;e.handleEvents();let t=this.sceneFramebuffer;t.activate();let i=this.handler,r=i.gl;r.clearColor(0,0,0,1),r.clear(r.COLOR_BUFFER_BIT|r.DEPTH_BUFFER_BIT),e.dispatch(e.draw,this);let s=this.activeCamera.frustums,n=e.pointerEvent()||this.activeCamera.isMoving,a=this._renderNodesArr,o=s.length;for(;o--;){this.activeCamera.setCurrentFrustum(o),r.clear(r.DEPTH_BUFFER_BIT);let l=a.length;for(;l--;)a[l].preDrawNode();for(this._drawOpaqueEntityCollections(),l=a.length;l--;)this.enableBlendDefault(),a[l].drawNode();this._drawTransparentEntityCollections(),this._clearEntityCollectionQueue(),n&&(this._drawPickingBuffer(),this.__useDistanceFramebuffer__&&this._drawDistanceBuffer())}t.deactivate(),this.blitFramebuffer&&t.blitTo(this.blitFramebuffer,0),n&&(i.isWebGl2()&&this._drawDepthBuffer(),this._readPickingBuffer(),this.__useDistanceFramebuffer__&&this._readDistanceBuffer()),this._fnScreenFrame(),e.dispatch(e.postdraw,this),e.mouseState.wheelDelta=0,e.mouseState.justStopped=!1,e.mouseState.moving=!1,e.touchState.moving=!1}_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(),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(){this.pickingFramebuffer.activate();let t=this.handler.gl;this.activeCamera.isFirstPass?(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);let i=this._pickingCallbacks;for(let r=0,s=i.length;r<s;r++)i[r].callback.call(i[r].sender);t.enable(t.BLEND),this.pickingFramebuffer.deactivate()}_drawDistanceBuffer(){this.distanceFramebuffer.activate();let t=this.handler.gl;this.activeCamera.isFirstPass?(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);let i=this._distanceCallbacks,r=i.length;for(;r--;)i[r].callback.call(i[r].sender);t.enable(t.BLEND),this.distanceFramebuffer.deactivate()}_drawDepthBuffer(){this.depthFramebuffer.activate();let e=this.handler,t=e.gl;t.clearColor(0,0,0,1),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT),t.enable(t.DEPTH_TEST);let i=this._depthCallbacks,r=i.length;for(;r--;)i[r].callback.call(i[r].sender);this.depthFramebuffer.deactivate(),this.screenDepthFramebuffer.activate();let s=e.programs.depth,n=s._program;t.bindBuffer(t.ARRAY_BUFFER,this.screenFramePositionBuffer),t.vertexAttribPointer(n.attributes.corners,2,t.FLOAT,!1,0,0),s.activate(),t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,this.depthFramebuffer.textures[1]),t.uniform1i(n.uniforms.depthTexture,0),t.drawArrays(t.TRIANGLE_STRIP,0,4),this.screenDepthFramebuffer.deactivate()}readPickingColor(e,t,i){let r=this.pickingFramebuffer.width,s=this.pickingFramebuffer.height;e=Math.round(e*r),t=Math.round(t*s);let n=(t*r+e)*4;i[0]=this._tempPickingPix_[n],i[1]=this._tempPickingPix_[n+1],i[2]=this._tempPickingPix_[n+2]}readDistanceColor(e,t,i){let r=this.distanceFramebuffer.width,s=this.distanceFramebuffer.height;e=Math.round(e*r),t=Math.round(t*s);let n=(t*r+e)*4;i[0]=this._tempDistancePix_[n],i[1]=this._tempDistancePix_[n+1],i[2]=this._tempDistancePix_[n+2]}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.distanceFramebuffer=null,this._distanceCallbacks=[],this._tempDistancePix_=null,this._depthCallbacks=[],this.depthFramebuffer=null,this.sceneFramebuffer=null,this.blitFramebuffer=null,this.toneMappingFramebuffer=null,this._entityCollections=[],this.handler.destroy(),this.handler=null,this._initialized=!1}}const Mh="/night.png",Rh="/spec.png",Sn="/res",Sh="globus_planet_";class Ft{constructor(e){this.$target=null,this._instanceID=`__globus${Ft.__counter__++?Ft.__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 Bh(new Di(this._canvas,{autoActivate:!1,pixelRatio:e.dpi||window.devicePixelRatio+.15,context:{antialias:!1,premultipliedAlpha:!1}}),{autoActivate:!1,msaa:e.msaa,fontsSrc:e.fontsSrc}),this.renderer.div=this.$inner,e.skybox&&this.renderer.addNode(e.skybox),this._planetName=e.name?e.name:Sh+Ft.__counter__,this.planet=new eh({name:this._planetName,frustums:e.frustums,ellipsoid:e.ellipsoid,maxGridSize:e.maxGridSize,nightTextureSrc:e.nightTextureSrc===null?null:`${e.resourcesSrc||Sn}${Mh}`,specularTextureSrc:e.specularTextureSrc===null?null:`${e.resourcesSrc||Sn}${Rh}`,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}),e.terrain?Array.isArray(e.terrain)?this.planet.setTerrain(e.terrain[0]):this.planet.setTerrain(e.terrain):this.planet.setTerrain(new ii),this.renderer.addNode(this.planet),e.controls?this.planet.addControls(e.controls):this.planet.addControls([new hl,e.useEarthNavigation?new el:new fr({minSlope:e.minSlope}),new al,new Jo,new il,new ya]);const i=this.renderer.controls;let r;for(let n in i)if(i[n]instanceof sn){r=i[n];break}r?this.sun=r:(this.sun=new sn,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||At(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){this.detach();let t;e instanceof HTMLElement?t=e:t=document.getElementById(e)||document.querySelector(e),t&&(this.$target=t,t.appendChild(this.$inner))}detach(){this.$target&&this.$target.removeChild(this.$inner)}destroy(){this.detach(),this.renderer.destroy()}}Ft.__counter__=0;let oi=null;const In=Me.createContext({globus:null,setGlobus:()=>{}}),zn=({children:c})=>{const[e,t]=Me.useState(oi);return Me.createElement(In.Provider,{value:{globus:e,setGlobus:t}},c)},Fn=()=>Me.useContext(In),Ih=({options:c,children:e})=>{const t=Me.useRef(null),{setGlobus:i}=Fn();return Me.useEffect(()=>{if(oi)t.current=oi.$target;else{let r=function(a,o,l){for(var h="",d=l;d>0;d--){var f=0,u=1<<d-1;a&u&&f++,o&u&&(f+=2),h+=f.toString()}return h};const s=new An("OpenStreetMap",{isBaseLayer:!0,url:"//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",visibility:!0,attribution:"Data @ OpenStreetMap contributors, ODbL"}),n=new An("sat",{isBaseLayer:!0,subdomains:["t0","t1","t2","t3"],url:"https://ecn.{s}.tiles.virtualearth.net/tiles/a{quad}.jpeg?n=z&g=7146",visibility:!0,attribution:'<a href="http://www.bing.com" target="_blank"><img title="Bing Imagery" src="https://sandcastle.cesium.com/CesiumUnminified/Assets/Images/bing_maps_credit.png" alt="Bing"></a> © 2021 Microsoft Corporation',maxNativeZoom:19,defaultTextures:[{color:"#001522"},{color:"#E4E6F3"}],shininess:18,specular:[63e-5,55e-5,32e-5],ambient:"rgb(100,100,140)",diffuse:"rgb(450,450,450)",nightTextureCoefficient:2.7,urlRewrite:function(a,o){return Et(o,{s:this._getSubdomain(),quad:r(a.tileX,a.tileY,a.tileZoom)})}});oi=new Ft({target:t.current,name:"Earth",terrain:new ih,layers:[s,n],autoActivate:!0,atmosphereEnabled:!0,...c})}return i(oi),()=>{}},[]),Me.createElement(zn,null,Me.createElement("div",{style:{width:"100%",height:"100%"},id:"globus",ref:t},e))};je.GlobusContextProvider=zn,je.default=Ih,je.useGlobusContext=Fn,Object.defineProperties(je,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|