UNPKG

@arcgis/core

Version:

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

3 lines (2 loc) 5.8 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */ import{__decorate as e}from"tslib";import{getFeatureId as t,updatePointsFromFeatureReference as s}from"../../../analysis/featureReferenceUtils.js";import"../../../core/has.js";import i from"../../../core/Logger.js";import{mapCollection as r}from"../../../core/mapCollectionUtils.js";import{abortMaybe as o,destroyMaybe as a}from"../../../core/maybe.js";import{watch as d,initial as n,when as l,syncAndInitial as h}from"../../../core/reactiveUtils.js";import{property as p,subclass as c}from"../../../core/accessorSupport/decorators.js";import{copy as u,exactEquals as v}from"../../../core/libs/gl-matrix-2/math/vec3.js";import{create as m}from"../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{canProjectWithoutEngine as w,isLoaded as V}from"../../../geometry/projectionUtils.js";import f from"./AnalysisView3D.js";import{logFailedGeometryProjectionError as y}from"./support/projectionUtils.js";import{ViewshedComputedData as _}from"./Viewshed/ViewshedComputedData.js";import b from"./Viewshed/ViewshedTool.js";import{ViewshedVisualization as g}from"./Viewshed/ViewshedVisualization.js";import{createElevationUpdateHandle as j}from"../support/elevationUpdateUtils.js";import{Intersector as D}from"../webgl-engine/lib/Intersector.js";import{Viewshed as R}from"../webgl-engine/lib/Viewshed.js";import{connectAnalysisViewToTool as C,removeAnalysisViewTool as F,startPlaceOperation as O}from"../../analysis/analysisViewUtils.js";let H=class extends f{constructor(e){super(e),this.type="viewshed-view-3d",this.analysis=null,this.tool=null,this._selectedViewshed=null,this.viewshedComputedDataHandles=null,this.userOperation=null,this._viewshedRenderNode=null,this._intersector=null}get visible(){return super.visible}set visible(e){super.visible=e}get interactive(){return super.interactive}set interactive(e){super.interactive=e}get selectedViewshed(){return this._selectedViewshed}set selectedViewshed(e){this._unselectOtherViewsheds(e),this._selectedViewshed=e}get selectedViewshedComputedData(){return this.tool?.selectedViewshedComputedData}get _isDecoration(){return!this.parent}initialize(){const e=this.view;this._viewshedRenderNode=new R({view:e,selectedViewshed:()=>this.selectedViewshed??this.tool?.stagedViewshed,isDecoration:this._isDecoration}),this._intersector=new D(this.view.state.viewingMode),this._intersector.options.hud=!1,this._intersector.options.store=0,this.viewshedComputedDataHandles=r(()=>this.analysis.viewsheds,t=>{const s=new _({renderCoordsHelper:e.renderCoordsHelper,viewshed:t}),r=Symbol();return this.addHandles([d(()=>({valid:s.valid,canProject:w(s.observer?.spatialReference,this.view.spatialReference)||V()}),({valid:e,canProject:t},r)=>{this.visible&&(e&&t?this._addViewshedsToRenderer(s):r?.valid&&r?.canProject&&this._removeViewshedsFromRenderer(s),t||y(this.analysis,s.observer.spatialReference,i.getLogger(this)))},n),...this._createFeatureReferenceHandles(s)],r),{viewshedComputedData:s,remove:()=>{this.removeHandles(r),this._removeViewshedsFromRenderer(s),s.destroy()}}}),this._visualization=new g({view:e,analysisViewData:this,isDecoration:this._isDecoration}),this.addHandles([d(()=>this.visible,e=>{const t=this.viewshedComputedDataHandles;if(null==t)return;e||(this.selectedViewshed=null);const s=t.map(e=>e.viewshedComputedData).filter(e=>e.valid).toArray();e?this._addViewshedsToRenderer(s):this._removeViewshedsFromRenderer(s)}),d(()=>e.renderCoordsHelper,e=>{this.viewshedComputedDataHandles?.forEach(({viewshedComputedData:t})=>t.renderCoordsHelper=e)}),C(this,b),l(()=>this.interactive,()=>{this._unselectOtherViewsheds(this.selectedViewshed)},h)])}destroy(){this.userOperation=o(this.userOperation),F(this),this._visualization=a(this._visualization);const e=this.viewshedComputedDataHandles;null!=e&&this._removeViewshedsFromRenderer(e.map(e=>e.viewshedComputedData).toArray())}_createFeatureReferenceHandles(e){const{view:t}=this;return[d(()=>[t.state.camera,t.slice.plane,e.viewshed.observer,e.targetRenderSpace,e.verticalFieldOfView,e.horizontalFieldOfView,e.feature],()=>{this._updateObserverFromFeature(t,e)},n),l(()=>e.needUpdateByFeature,()=>{this._updateObserverFromFeature(t,e),e.needUpdateByFeature=!1}),j({view:t,geometry:e.observer,onElevationChanges:()=>e.needUpdateByFeature=!0})]}async createViewsheds(e){await O(this,{placementOptions:e,onToolActivated:e=>e.place("multiple")})}place(e){return O(this,{placementOptions:e,onToolActivated:e=>e.place("single")})}_addViewshedsToRenderer(e){this._viewshedRenderNode.updateViewsheds({adds:e})}_removeViewshedsFromRenderer(e){this._viewshedRenderNode.updateViewsheds({removes:e})}_updateObserverFromFeature(e,i){const r=i.observerRenderSpace,o=i.targetRenderSpace,a=u(m(),r),d={observer:r,observerSurfaceNormal:null,observerAdjusted:a,observerFeatureId:t(i.feature),target:o,targetSurfaceNormal:null,targetAdjusted:u(m(),o),targetFeatureId:null};s(e,this._intersector,d,e=>Math.min(e,.05*i.farDistanceRenderSpace)),i.observerRenderSpaceOverride=v(a,r)?null:a}_unselectOtherViewsheds(e){if(null!=e)for(const t of this.view.tools.items)t!==this.tool&&t instanceof b&&(t.analysisViewData.selectedViewshed=null)}get test(){}};e([p({readOnly:!0})],H.prototype,"type",void 0),e([p({constructOnly:!0,nonNullable:!0})],H.prototype,"analysis",void 0),e([p()],H.prototype,"tool",void 0),e([p()],H.prototype,"_selectedViewshed",void 0),e([p()],H.prototype,"selectedViewshed",null),e([p()],H.prototype,"selectedViewshedComputedData",null),e([p()],H.prototype,"viewshedComputedDataHandles",void 0),e([p()],H.prototype,"userOperation",void 0),e([p()],H.prototype,"_visualization",void 0),e([p()],H.prototype,"_viewshedRenderNode",void 0),H=e([c("esri.views.3d.analysis.ViewshedAnalysisView3D")],H);const U=H;export{U as default};