@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 5.57 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.32/esri/copyright.txt for details.
*/
import{_ as e}from"../../../chunks/tslib.es6.js";import{getFeatureId as s,updatePointsFromFeatureReference as t}from"../../../analysis/featureReferenceUtils.js";import i from"../../../core/Accessor.js";import"../../../core/has.js";import r from"../../../core/Logger.js";import{abortMaybe as o,destroyMaybe as a}from"../../../core/maybe.js";import{mapCollection as d,watch as l,when as n,initial as h,syncAndInitial as c}from"../../../core/reactiveUtils.js";import{property as p}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/RandomLCG.js";import{subclass as m}from"../../../core/accessorSupport/decorators/subclass.js";import{c as w,p as u}from"../../../chunks/vec32.js";import{create as v}from"../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{canProjectWithoutEngine as V,isLoaded as f}from"../../../geometry/projection.js";import{AnalysisView3D as y}from"./AnalysisView3D.js";import{logFailedGeometryProjectionError as _}from"./support/projectionUtils.js";import{ViewshedAnalysisVisualization as j}from"./Viewshed/ViewshedAnalysisVisualization.js";import{ViewshedComputedData as b}from"./Viewshed/ViewshedComputedData.js";import g from"./Viewshed/ViewshedTool.js";import{newIntersector as R}from"../webgl-engine/lib/Intersector.js";import{StoreResults as D}from"../webgl-engine/lib/IntersectorInterfaces.js";import{Viewshed as C}from"../webgl-engine/lib/Viewshed.js";import{connectAnalysisViewToTool as F,removeAnalysisViewTool as H,activateAnalysisViewTool as T}from"../../analysis/analysisViewUtils.js";let k=class extends(y(i)){constructor(e){super(e),this.type="viewshed-view-3d",this.analysis=null,this.tool=null,this._selectedViewshed=null,this.viewshedComputedDataHandles=null,this._placementTask=null,this._viewshedRenderer=null,this._intersector=null}get selectedViewshed(){return this._selectedViewshed}set selectedViewshed(e){this._unselectOtherViewsheds(e),this._selectedViewshed=e}get selectedViewshedComputedData(){return this.tool?.selectedViewshedComputedData}initialize(){const e=this.view;this._viewshedRenderer=new C({view:e,selectedViewshed:()=>this.selectedViewshed??this.tool?.stagedViewshed}),this._intersector=R(this.view.state.viewingMode),this._intersector.options.hud=!1,this._intersector.options.store=D.MIN,this.viewshedComputedDataHandles=d((()=>this.analysis.viewsheds),(s=>{const t=new b({renderCoordsHelper:e.renderCoordsHelper,viewshed:s}),i=Symbol();return this.addHandles([l((()=>({valid:t.isValid(),canProject:V(t.observer?.spatialReference,this.view.spatialReference)||f()})),(({valid:e,canProject:s},i)=>{this.visible&&(e&&s?this._addViewshedsToRenderer(t):i?.valid&&i?.canProject&&this._removeViewshedsFromRenderer(t),s||_(this.analysis,t.observer.spatialReference,r.getLogger(this)))}),h),l((()=>[e.state.camera,e.slicePlane,t.viewshed.observer,t.targetRenderSpace,t.verticalFieldOfView,t.horizontalFieldOfView,t.feature]),(()=>{this._updateObserverFromFeature(e,t)}),h)]),{viewshedComputedData:t,remove:()=>{this.removeHandles(i),this._removeViewshedsFromRenderer(t),t.destroy()}}})),this._analysisVisualization=new j({view:e,analysisViewData:this,isDecoration:!this.parent}),this.addHandles([l((()=>this.visible),(e=>{const s=this.viewshedComputedDataHandles;if(null==s)return;e||(this.selectedViewshed=null);const t=s.map((e=>e.viewshedComputedData)).filter((e=>e.isValid())).toArray();e?this._addViewshedsToRenderer(t):this._removeViewshedsFromRenderer(t)})),l((()=>e.renderCoordsHelper),(e=>{this.viewshedComputedDataHandles?.forEach((({viewshedComputedData:s})=>s.renderCoordsHelper=e))})),F(this,g),n((()=>this.interactive),(()=>{this._unselectOtherViewsheds(this.selectedViewshed)}),c)])}destroy(){this._placementTask=o(this._placementTask),H(this),this._analysisVisualization=a(this._analysisVisualization);const e=this.viewshedComputedDataHandles;null!=e&&this._removeViewshedsFromRenderer(e.map((e=>e.viewshedComputedData)).toArray())}async createViewsheds(e){return this._placementTask=o(this._placementTask),this._placementTask=T(this,e),null!=this.tool&&this.tool.createViewsheds(),await this._placementTask.promise}_addViewshedsToRenderer(e){this._viewshedRenderer.updateViewsheds({adds:e})}_removeViewshedsFromRenderer(e){this._viewshedRenderer.updateViewsheds({removes:e})}_updateObserverFromFeature(e,i){const r=i.observerRenderSpace,o=i.targetRenderSpace,a=w(v(),r),d={observer:r,observerSurfaceNormal:null,observerAdjusted:a,observerFeatureId:s(i.feature),target:o,targetSurfaceNormal:null,targetAdjusted:w(v(),o),targetFeatureId:null};t(e,this._intersector,d,(e=>Math.min(e,.05*i.farDistanceRenderSpace))),i.observerRenderSpaceOverride=u(a,r)?null:a}_unselectOtherViewsheds(e){if(null!=e)for(const s of this.view.tools.items)s!==this.tool&&s instanceof g&&(s.analysisViewData.selectedViewshed=null)}get test(){}};e([p({readOnly:!0})],k.prototype,"type",void 0),e([p({constructOnly:!0,nonNullable:!0})],k.prototype,"analysis",void 0),e([p()],k.prototype,"tool",void 0),e([p()],k.prototype,"_selectedViewshed",void 0),e([p()],k.prototype,"selectedViewshed",null),e([p()],k.prototype,"selectedViewshedComputedData",null),e([p()],k.prototype,"viewshedComputedDataHandles",void 0),e([p()],k.prototype,"_analysisVisualization",void 0),e([p()],k.prototype,"_placementTask",void 0),e([p()],k.prototype,"_viewshedRenderer",void 0),k=e([m("esri.views.3d.analysis.ViewshedAnalysisView3D")],k);const O=k;export{O as default};