@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 2.5 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.33/esri/copyright.txt for details.
*/
import{toRadian as t}from"../../../../core/libs/gl-matrix-2/math/common.js";import{identity as e,multiply as r,translate as o,scale as i,rotate as s}from"../../../../core/libs/gl-matrix-2/math/mat3.js";import{create as a}from"../../../../core/libs/gl-matrix-2/factories/mat3f32.js";import{fromValues as n}from"../../../../core/libs/gl-matrix-2/factories/vec2f32.js";import{fromValues as l}from"../../../../core/libs/gl-matrix-2/factories/vec3f32.js";import{normalizeMapX as c}from"../../../../geometry/support/normalizeUtils.js";import{getInfo as h}from"../../../../geometry/support/spatialReferenceUtils.js";import{getWorldWidth as m}from"../../viewpointUtils.js";import{WGLDrawPhase as d}from"./enums.js";import p from"./WGLContainer.js";import{OverlayTechnique as f}from"./shaderGraph/techniques/overlay/OverlayTechnique.js";class u extends p{constructor(){super(...arguments),this._viewStateId=-1,this._dvsMat3=a(),this._overlayTechnique=new f}get dvsMat3(){return this._dvsMat3}beforeRender(t){this._updateMatrices(t),this._updateOverlays(t,this.children);for(const e of this.children)e.beforeRender(t)}doRender(t){if(t.drawPhase!==d.MAP||!this.visible)return;super.doRender(t);const e=this._overlayTechnique;for(const r of this.children)r.draw(t,e)}onDetach(){this._overlayTechnique.shutdown()}_updateMatrices(a){const{state:h}=a,{id:m,size:d,pixelRatio:p,resolution:f,rotation:u,viewpoint:v,displayMat3:_}=h;if(this._viewStateId===m)return;const M=t(u),g=p*d[0],y=p*d[1];this._localOrigin=v.targetGeometry.clone();const{x:w,y:x}=this._localOrigin,b=c(w,h.spatialReference);this._localOrigin.x=b,this._localOrigin.y=x;const j=f*g,O=f*y,R=e(this._dvsMat3);r(R,R,_),o(R,R,n(g/2,y/2)),i(R,R,l(g/j,-y/O,1)),s(R,R,-M),this._viewStateId=m}_updateOverlays(e,r){const{state:o}=e,{rotation:i,spatialReference:s,worldScreenWidth:a,size:n,viewpoint:l}=o,c=this._localOrigin;let d,p=0;const f=h(s);if(f&&s.isWrappable){const e=n[0],r=n[1],c=t(i),h=Math.abs(Math.cos(c)),u=Math.abs(Math.sin(c)),v=Math.round(e*h+r*u),[_,M]=f.valid,g=m(s),{x:y,y:w}=l.targetGeometry,x=[y,w],b=[0,0];o.toScreen(b,x);const j=[0,0];let O;O=v>a?.5*a:.5*v;const R=Math.floor((y+.5*g)/g),q=_+R*g,S=M+R*g,G=[b[0]+O,0];o.toMap(j,G),j[0]>S&&(p=g),G[0]=b[0]-O,o.toMap(j,G),j[0]<q&&(p=-g),d={worldWidth:g,xBounds:[_,M]}}for(const t of r)t.updateDrawCoords(c,p,o,d)}}export{u as default};