@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 9.16 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 t from"../../Color.js";import i from"../../core/Accessor.js";import{isSome as r}from"../../core/arrayUtils.js";import{createTask as s}from"../../core/asyncUtils.js";import"../../core/has.js";import{abortMaybe as o,destroyMaybe as n}from"../../core/maybe.js";import{after as a,throwIfAborted as l}from"../../core/promiseUtils.js";import{watch as p,syncAndInitial as u}from"../../core/reactiveUtils.js";import{createScreenPointArray as d,createRenderScreenPointArray as c}from"../../core/screenUtils.js";import{convertTime as h,offsetDateUTC as m}from"../../core/timeUtils.js";import{property as f}from"../../core/accessorSupport/decorators/property.js";import"../../core/Logger.js";import{subclass as _}from"../../core/accessorSupport/decorators/subclass.js";import{create as y}from"../../core/libs/gl-matrix-2/factories/vec3f64.js";import{longitudeToTimezone as g}from"../../views/3d/support/earthUtils.js";import{computeDirectionsOverTime as v}from"../../views/3d/support/sunUtils.js";import{ShadowCastVisualization as w}from"../../views/3d/webgl-engine/shaders/ShadowCastVisualizeTechniqueConfiguration.js";import T from"./DiscreteOptions.js";import{DurationMode as D}from"./DurationMode.js";import b from"./DurationOptions.js";import{ShadowCastState as O}from"./ShadowCastState.js";import{ShadowTooltipViewModel as P}from"./ShadowTooltipViewModel.js";import{ShadowVisualizationType as j}from"./ShadowVisualizationType.js";import z from"./ThresholdOptions.js";import{breadthFirstBinaryPartitioning as U}from"../support/traversalUtils.js";const C=[],V=y(),E=[],R=255,S=h(1,"hours","milliseconds"),A=500;let x=class extends i{constructor(e){super(e),this.view=null,this.tooltip=new P({getDuration:(e,t)=>this.getDuration(e,t)}),this.startTimeOfDay=h(10,"hours","milliseconds"),this.endTimeOfDay=h(16,"hours","milliseconds"),this.visualizationType=j.Threshold,this.thresholdOptions=new z,this.durationOptions=new b,this.discreteOptions=new T,this._running=!0,this._stopPreviewingTask=null,this._forcePreview=!1,this._autoRestoreForcePreviewEnabled=!0,this._utcOffset=null,this.date=new Date}initialize(){this.addHandles([p((()=>({view:this.view,tooltipEnabled:this._tooltipEnabled})),(({view:e,tooltipEnabled:t})=>{this.tooltip.view=e,this.tooltip.enabled=t}),u),p((()=>this._forcePreviewDependencies),(()=>{o(this._stopPreviewingTask),this._forcePreview=!0,this._autoRestoreForcePreviewEnabled&&(this._stopPreviewingTask=s((async e=>{await a(A,e),l(e),this._forcePreview=!1})))}),u),p((()=>({renderer:this.renderer,parameters:this._visualizationParameters})),(e=>N(e.renderer,e.parameters)),u),p((()=>({renderer:this.renderer,parameters:{lightDirections:this._lightDirections}})),(e=>N(e.renderer,e.parameters)),u),p((()=>({renderer:this.renderer,parameters:{enabled:this._running}})),(e=>N(e.renderer,e.parameters)),u),p((()=>({renderer:this.renderer,parameters:{previewing:this._previewing}})),(e=>N(e.renderer,e.parameters)),u)])}destroy(){this.stop(),N(this.renderer,{enabled:!1}),n(this.tooltip)}get state(){return null!=this.view&&this.view.ready&&null!=this._referencePosition?O.Ready:O.Disabled}set date(e){const t=new Date(e);t.setHours(0,0,0,0),this._set("date",t)}get utcOffset(){return this._utcOffset??this._utcOffsetAuto}set utcOffset(e){this._utcOffset=e}get testData(){}get _previewing(){const{view:e}=this;return null==e?.allLayerViews||(this._forcePreview||!e.stationary||e.allLayerViews.some((e=>M(e)&&e.updating)))}get _utcOffsetAuto(){const e=this._referencePosition;return null!=e?g(e[0],!1):0}get _dateUTCOffset(){let e=this.date;return e=m(e,-e.getTimezoneOffset(),"minutes"),e=m(e,-this.utcOffset,"hours"),e}get _startDateTimeUTC(){return m(this._dateUTCOffset,this.startTimeOfDay)}get _endDateTimeUTC(){return m(this._dateUTCOffset,this.endTimeOfDay)}get _referencePosition(){return this.view?.environmentManager?.referencePositionGeographic}get _interval(){const e=this._duration>0?Math.floor(this._duration/R):R,t=this.discreteOptions.interval;switch(this.visualizationType){case j.Threshold:case j.Duration:return e;case j.Discrete:return t>0?t:e}}get _sampleCount(){return this._lightDirections.length}get _duration(){return this.endTimeOfDay-this.startTimeOfDay}get _lightDirections(){const{view:e}=this;if(null==e)return C;const t="global"===e.viewingMode?V:this._referencePosition;if(null==t)return C;const i=this._interval,r=v(this._startDateTimeUTC,this._endDateTimeUTC,i,t,e.state.viewingMode),s=r.length;E.length=0;const o=U(0,s,E),n=new Array(s);for(let a=0;a<s;++a)n[a]=r[o[a]];return n}get _tooltipEnabled(){return this.state===O.Ready&&this.visualizationType!==j.Discrete&&this._running&&!this._previewing}get _visualizationParameters(){if(!this._running)return null;switch(this.visualizationType){case j.Threshold:return this._thresholdVisualizationParameters;case j.Duration:return this._durationVisualizationParameters;case j.Discrete:return this._discreteVisualizationParameters}}get _thresholdVisualizationParameters(){const{value:e,color:i}=this.thresholdOptions,r=this._duration;return{visualization:w.Threshold,color:t.toUnitRGBA(i),threshold:r>0?e/this._duration:0}}get _durationVisualizationParameters(){const{color:e,mode:i}=this.durationOptions,r=this._duration,s=r>0&&i===D.Hourly?S/r:0;return{color:t.toUnitRGBA(e),visualization:w.Gradient,bandsEnabled:s>0,bandSize:s}}get _discreteVisualizationParameters(){return{color:t.toUnitRGBA(this.discreteOptions.color),visualization:w.Gradient,bandsEnabled:!1,bandSize:0}}get _forcePreviewDependencies(){const{view:e}=this;if(null==e)return null;const t=e.slicePlane,i=e.allLayerViews.toArray().filter(M),s=i.map((e=>e.layer)).filter(r),o=i.map((e=>e.visible)),n=s.map((e=>e.visible)),a=s.map((e=>e.opacity)),l=s.filter((e=>"definitionExpression"in e)).map((e=>e.definitionExpression)),p=i.filter((e=>"filter"in e)).map((e=>e.filter));return{slicePlane:t,startDateUTC:this._startDateTimeUTC,endDateUTC:this._endDateTimeUTC,layerViewVisibilities:o,layerVisibilities:n,layerOpacities:a,filters:p,definitionExpressions:l}}get renderer(){const{view:e}=this;if(null==e)return null;const t=e._stage;return null==t?null:t.renderer}start(){this.setRunning(!0)}stop(){this.setRunning(!1)}setRunning(e){this._running=e}async getDuration(e,t){const{view:i,renderer:r,_sampleCount:s}=this;if(null==i||null==r||0===s)return 0;const o=i.state.camera.screenToRender(d(e.x,e.y),c());return r.readAccumulatedShadow(o)*this._duration}};function N(e,t){null!=e&&null!=t&&e.setParameters({shadowCast:t})}function M(e){if(e.suspended)return!1;switch(e.type){case"building-scene-3d":case"csv-3d":case"elevation-3d":case"feature-3d":case"geojson-3d":case"graphics-3d":case"integrated-mesh-3d":case"integrated-mesh-3dtiles":case"ogc-feature-3d":case"route-3d":case"scene-layer-3d":case"scene-layer-graphics-3d":case"stream-3d":case"wms-3d":return!0;case"base-dynamic-3d":case"catalog-3d":case"catalog-footprint-3d":case"catalog-dynamic-group-3d":case"dimension-3d":case"imagery-3d":case"imagery-tile-3d":case"line-of-sight-3d":case"map-image-3d":case"point-cloud-3d":case"tile-3d":case"vector-tile-3d":case"viewshed-3d":case"voxel-3d":case"wfs-3d":case"wmts-3d":case"media-3d":default:return!1;case"group":return e.layerViews.toArray().some((e=>M(e)))}}e([f()],x.prototype,"state",null),e([f()],x.prototype,"view",void 0),e([f()],x.prototype,"tooltip",void 0),e([f({type:Date,nonNullable:!0})],x.prototype,"date",null),e([f({nonNullable:!0})],x.prototype,"utcOffset",null),e([f({nonNullable:!0})],x.prototype,"startTimeOfDay",void 0),e([f({nonNullable:!0})],x.prototype,"endTimeOfDay",void 0),e([f({nonNullable:!0})],x.prototype,"visualizationType",void 0),e([f({type:z,nonNullable:!0})],x.prototype,"thresholdOptions",void 0),e([f({type:b,nonNullable:!0})],x.prototype,"durationOptions",void 0),e([f({type:T,nonNullable:!0})],x.prototype,"discreteOptions",void 0),e([f()],x.prototype,"_running",void 0),e([f()],x.prototype,"_stopPreviewingTask",void 0),e([f()],x.prototype,"_forcePreview",void 0),e([f()],x.prototype,"_autoRestoreForcePreviewEnabled",void 0),e([f()],x.prototype,"_previewing",null),e([f()],x.prototype,"_utcOffset",void 0),e([f()],x.prototype,"_utcOffsetAuto",null),e([f()],x.prototype,"_dateUTCOffset",null),e([f()],x.prototype,"_startDateTimeUTC",null),e([f()],x.prototype,"_endDateTimeUTC",null),e([f()],x.prototype,"_referencePosition",null),e([f()],x.prototype,"_interval",null),e([f()],x.prototype,"_sampleCount",null),e([f()],x.prototype,"_duration",null),e([f()],x.prototype,"_lightDirections",null),e([f()],x.prototype,"_tooltipEnabled",null),e([f()],x.prototype,"_visualizationParameters",null),e([f()],x.prototype,"_thresholdVisualizationParameters",null),e([f()],x.prototype,"_durationVisualizationParameters",null),e([f()],x.prototype,"_discreteVisualizationParameters",null),e([f()],x.prototype,"_forcePreviewDependencies",null),e([f()],x.prototype,"renderer",null),x=e([_("esri.widgets.ShadowCast.ShadowCastViewModel")],x);const G=x;export{G as default};