UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

3 lines (2 loc) 2.3 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */ import e from"../../../core/Error.js";import{throwIfAborted as t}from"../../../core/promiseUtils.js";import i from"../../../geometry/Mesh.js";import s from"../../../geometry/SpatialReference.js";import o from"../../../geometry/support/MeshMaterial.js";import r from"../../../geometry/support/MeshTexture.js";import{defaultImageSphereCenter as a}from"../constants.js";import{loadMeshDependencies as c}from"./importUtils.js";class l{constructor(i,l,n,h,m,w,p,u,f,d){this.level=i,this.row=l,this.column=n,this.horizontalFieldOfView=h,this.verticalFieldOfView=m,this.yaw=w,this.pitch=p,this.distance=u,this.horizonAngles=f,this.getPixelBlock=d,this._cache=null,this.loadMesh=async i=>{const{level:l,row:n,column:h,horizontalFieldOfView:m,verticalFieldOfView:w,yaw:p,pitch:u,distance:f}=this,{Mesh:d,MeshComponent:g,MeshVertexAttributes:v,panoramicMeshManager:M}=await c(),{faces:x,...y}=await M.getFacesWithVertexAttributes({distance:f,yaw:p,horizontalFieldOfView:m,pitch:u,verticalFieldOfView:w});t(i);const V=await this.getPixelBlock(l,n,h,i);if(t(i),!V)throw new e("panoramic-viewer:missing-tile-data",`Tile data for level ${l}, row ${n}, column ${h} is missing`,{level:l,row:n,column:h});const A=await M.convertPixelBlockToImageData(V);t(i);const F=new d({vertexAttributes:new v(y),components:[new g({faces:x,trustSourceNormals:!0,material:new o({colorTexture:new r({data:A})})})],spatialReference:s.WebMercator});return F.rotate(...this.horizonAngles,{origin:a}),await F.load(i),this._cache=F,this._cache},this.loadMeshAtDistance=async(e,t)=>{const i=this.distance;return this.distance=e,Math.abs(i-e)>1e-6&&this._cache?this._cache:await this.loadMesh(t)}}get loaded(){return null!==this._cache}get key(){return`${this.level}/${this.row}/${this.column}`}clone(){const{level:e,row:t,column:s,horizontalFieldOfView:o,verticalFieldOfView:r,yaw:a,pitch:c,distance:n,getPixelBlock:h,horizonAngles:m}=this,w=new l(e,t,s,o,r,a,c,n,m,h);if(this._cache){const{vertexAttributes:e,components:t,spatialReference:s}=this._cache,o=t?.map(({material:e,faces:t,trustSourceNormals:i})=>({material:e,faces:t?.slice(),trustSourceNormals:i}));w._cache=new i({components:o,vertexAttributes:e.clone(),spatialReference:s})}return w}}export{l as default};