UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 9.19 kB
import{_ as e}from"../../../chunks/tslib.es6.js";import"../../../geometry.js";import s from"../../../core/Error.js";import t from"../../../core/Handles.js";import i from"../../../core/Logger.js";import{isSome as r,destroyMaybe as a}from"../../../core/maybe.js";import{watch as o,initial as l}from"../../../core/reactiveUtils.js";import{property as n}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/accessorSupport/ensureType.js";import"../../../core/arrayUtils.js";import{subclass as h}from"../../../core/accessorSupport/decorators/subclass.js";import{f as c,n as d,s as m}from"../../../chunks/vec3.js";import{c as u}from"../../../chunks/vec3f64.js";import{projectVectorToVector as p}from"../../../geometry/projection.js";import{empty as y,expandWithVec3 as b}from"../../../geometry/support/aaBoundingBox.js";import{equals as _}from"../../../geometry/support/spatialReferenceUtils.js";import{LayerView3D as w}from"./LayerView3D.js";import{PopupSceneLayerView as V}from"./support/PopupSceneLayerView.js";import v from"../../layers/LayerView.js";import{ContextType as f}from"../../webgl/context-util.js";import W from"../../../geometry/SpatialReference.js";var g;!function(e){e[e.API=1]="API",e[e.VerboseAPI=2]="VerboseAPI",e[e.Error=3]="Error"}(g||(g={}));const S=u(),x=u();let T=class extends(V(w(v))){constructor(){super(...arguments),this._suspendedHandle=null,this._usedMemory=0,this._futureMemory=0,this.type="voxel-3d",this.slicePlaneEnabled=!1,this._wasmLayerId=-1,this._handles=new t,this._dbgFlags=new Set}get baseUrl(){return this.layer.parsedUrl?.path??""}get wasmLayerId(){return this._wasmLayerId}initialize(){if(this._dbgFlags.add(g.Error),"local"!==this.view.viewingMode)throw new s("voxel:unsupported-viewingMode","Voxel layers support local viewingMode only.",{});if(this.view._stage.renderView.renderingContext.type!==f.WEBGL2)throw new s("voxel:unsupported-context","Voxel layers are supported in WebGL2 rendering contexts only.",{});if(!!!this.view._stage.renderView.renderingContext.capabilities.colorBufferFloat?.textureFloat)throw new s("voxel:missing-color-buffer-float","Voxel layers require the WebGL2 extension EXT_color_buffer_float",{});const e=this.layer.spatialReference;if(!_(e,this.view.spatialReference))throw new s("layerview:spatial-reference-incompatible","The spatial reference of this scene layer is incompatible with the spatial reference of the view",{});const t=this.layer.currentVariableId,i=this.layer.getVolume(t),a=this.layer.getVariable(t);if(r(i)&&r(a)){const e=i.dimensions[0],s=i.dimensions[1],t=i.zDimension;if(t>1){const r=i.dimensions[t],o=e.size*s.size*r.size;let l=1;switch(a.renderingFormat.type){case"Int16":case"UInt16":l=2;break;case"Int32":case"UInt32":case"Float32":l=4}this._futureMemory=l*o}}const n=this.view.addVoxelLayerViewToWasm(this).then((e=>{this._wasmLayerId=e,this._suspendedHandle=o((()=>this.suspended),(e=>{const s=this.view.voxelWasm;r(s)&&s.setEnabled(this,!e)}),l),this._handles.add([o((()=>this.layer.renderMode),(e=>this._pushRenderModeToWasm(e))),o((()=>this.layer.currentVariableId),(e=>this._pushCurrentVariableIdToWasm(e))),o((()=>this.layer.getSections()),(e=>this._pushSectionsToWasm(e))),o((()=>this.layer.getVariableStyles()),(e=>this._pushVariableStylesToWasm(e))),o((()=>this.layer.getVolumeStyles()),(e=>this._pushVolumeStylesToWasm(e))),o((()=>this.layer.enableDynamicSections),(e=>this._pushEnableDynamicSectionsToWasm(e))),o((()=>this.layer.enableIsosurfaces),(e=>this._pushEnableIsosurfacesToWasm(e))),o((()=>this.layer.enableSections),(e=>this._pushEnableSectionsToWasm(e))),o((()=>this.layer.enableSlices),(e=>this._pushEnableSlicesToWasm(e))),o((()=>this.slicePlaneEnabled),(e=>this._pushAnalysisSliceToWasm(e,this.view.slicePlane))),o((()=>this.view.slicePlane),(e=>this._pushAnalysisSliceToWasm(this.slicePlaneEnabled,e)))])})).catch((e=>{if(this.view.removeVoxelLayerViewFromWasm(this),this._wasmLayerId=-1,-1===e)throw new s("voxel:addLayer-failure","The voxel layer description was invalid.",{});if(-2===e)throw new s("voxel:addLayer-failure","The voxel layer web assembly module failed to download.",{})}));this.addResolvingPromise(n)}destroy(){this.view.removeVoxelLayerViewFromWasm(this),this._suspendedHandle&&(this._suspendedHandle.remove(),this._suspendedHandle=null),this._handles=a(this._handles)}isUpdating(){const e=this.view.voxelWasm;return!(this._wasmLayerId<0||!r(e))&&e.isUpdating(this._wasmLayerId)}updatingFlagChanged(){this.notifyChange("updating")}getUsedMemory(){return this._usedMemory}getUnloadedMemory(){return this._futureMemory}ignoresMemoryFactor(){return!0}get performanceInfo(){return{nodes:0,displayedNumberOfFeatures:0,maximumNumberOfFeatures:0,totalNumberOfFeatures:0,core:null}}whenGraphicBounds(e,s){const t=e.attributes["Voxel.WorldPosition"];if(t){const e=y(),s=JSON.parse(t);if(p(s,this.view.renderSpatialReference,x,this.view.spatialReference||W.WGS84))return b(e,x),Promise.resolve({boundingBox:e,screenSpaceObjects:[]})}return Promise.reject()}setUsedMemory(e){this._usedMemory=e,this._futureMemory=0}captureFrustum(){const e=this.view.voxelWasm;r(e)&&e.captureFrustum()}toggleFullVolumeExtentDraw(){const e=this.view.voxelWasm;r(e)&&e.toggleFullVolumeExtentDraw(this)}getLayerTimes(){let e=[];const s=this.view.voxelWasm;return r(s)&&(e=s.getLayerTimes(this)),e}getCurrentLayerTimeIndex(){let e=0;const s=this.view.voxelWasm;return r(s)&&(e=s.getCurrentLayerTimeIndex(this)),e}_pushRenderModeToWasm(e){const s=this.view.voxelWasm;this._dbg(g.VerboseAPI,"VoxelLayerView3D._pushRenderModeToWasm() called, "+(r(s)?"have WASM":"don't have WASM!!!"));!!r(s)&&s.setRenderMode(this,e)||this._dbg(g.Error,"VoxelLayerView3D._pushRenderModeToWasm() failed!")}_pushSectionsToWasm(e){const s=this.view.voxelWasm;this._dbg(g.VerboseAPI,"VoxelLayerView3D._pushSectionsToWasm() called, "+(r(s)?"have WASM":"don't have WASM!!!"));!!r(s)&&s.setStaticSections(this,e)||this._dbg(g.Error,"VoxelLayerView3D._pushSectionsToWasm() failed!")}_pushCurrentVariableIdToWasm(e){const s=this.view.voxelWasm;this._dbg(g.VerboseAPI,"VoxelLayerView3D._pushCurrentVariableIdToWasm() called!, "+(r(s)?"have WASM":"don't have WASM!!!"));!!r(s)&&s.setCurrentVariable(this,e)||this._dbg(g.Error,"VoxelLayerView3D._pushCurrentVariableIdToWasm() failed!")}_pushVariableStylesToWasm(e){const s=this.view.voxelWasm;this._dbg(g.VerboseAPI,"VoxelLayerView3D._pushVariableStylesToWasm() called, "+(r(s)?"have WASM":"don't have WASM!!!"));let t=!1;r(s)&&(t=s.setVariableStyles(this,e),t||this._dbg(g.Error,"VoxelLayerView3D._pushVariableStylesToWasm() failed!"))}_accountForEnableSlices(e,s){const t=r(s)?s:this.layer.enableSlices;for(let i=0;i<e.length;++i){const s=e[i];for(const e of s.slices)e.enabled=e.enabled&&t}}_pushVolumeStylesToWasm(e){const s=this.view.voxelWasm;this._dbg(g.VerboseAPI,"VoxelLayerView3D._pushVolumeStylesToWasm() called, "+(r(s)?"have WASM":"don't have WASM!!!"));let t=!1;r(s)&&(this._accountForEnableSlices(e,null),t=s.setVolumeStyles(this,e),t||this._dbg(g.Error,"VoxelLayerView3D._pushVolumeStylesToWasm() failed!"))}_pushAnalysisSliceToWasm(e,s){const t=this.view.voxelWasm;this._dbg(g.VerboseAPI,"VoxelLayerView3D._pushAnalysisSliceToWasm() called, "+(r(t)?"have WASM":"don't have WASM!!!"));let i=!1;if(r(t)){if(r(s)){const r=s.origin;c(S,s.basis1,s.basis2),d(S,S),i=t.setAnalysisSlice(this,e,r,S)}else m(S,0,0,1),i=t.setAnalysisSlice(this,!1,S,S);i||this._dbg(g.Error,"VoxelLayerView3D._pushAnalysisSliceToWasm() failed!")}}_pushEnableDynamicSectionsToWasm(e){const s=this.view.voxelWasm;this._dbg(g.VerboseAPI,"VoxelLayerView3D._pushEnableDynamicSectionsToWasm() called, "+(r(s)?"have WASM":"don't have WASM!!!"));let t=!1;r(s)&&(t=s.setEnableDynamicSections(this,e),t||this._dbg(g.Error,"VoxelLayerView3D._pushEnableDynamicSectionsToWasm() failed!"))}_pushEnableSlicesToWasm(e){const s=this.view.voxelWasm;this._dbg(g.VerboseAPI,"VoxelLayerView3D._pushEnableSlicesToWasm() called, "+(r(s)?"have WASM":"don't have WASM!!!"));let t=!1;if(r(s)){const i=this.layer.getVolumeStyles();this._accountForEnableSlices(i,e),t=s.setVolumeStyles(this,i),t||this._dbg(g.Error,"VoxelLayerView3D._pushEnableSlicesToWasm() failed!")}}_pushEnableIsosurfacesToWasm(e){const s=this.view.voxelWasm;this._dbg(g.VerboseAPI,"VoxelLayerView3D._pushEnableIsosurfacesToWasm() called, "+(r(s)?"have WASM":"don't have WASM!!!"));let t=!1;r(s)&&(t=s.setEnableIsosurfaces(this,e),t||this._dbg(g.Error,"VoxelLayerView3D._pushEnableIsosurfacesToWasm() failed!"))}_pushEnableSectionsToWasm(e){const s=this.view.voxelWasm;this._dbg(g.VerboseAPI,"VoxelLayerView3D._pushEnableSectionsToWasm() called, "+(r(s)?"have WASM":"don't have WASM!!!"));let t=!1;r(s)&&(t=s.setEnableSections(this,e),t||this._dbg(g.Error,"VoxelLayerView3D._pushEnableSectionsToWasm() failed!"))}async whenGraphicAttributes(e,s){return e}_dbg(e,s){this._dbgFlags.has(e)&&(e===g.Error?i.getLogger(this.declaredClass).error(s):i.getLogger(this.declaredClass).warn(s))}};e([n()],T.prototype,"layer",void 0),e([n()],T.prototype,"baseUrl",null),e([n({type:Boolean})],T.prototype,"slicePlaneEnabled",void 0),T=e([h("esri.views.3d.layers.VoxelLayerView3D")],T);const E=T;export{E as default};