@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 1.99 kB
JavaScript
import{unwrapOr as t,isNone as e,isSome as n}from"../../../../core/maybe.js";import{getMetersPerUnit as s,supportsUnit as i}from"../../../../symbols/support/unitConversionUtils.js";import{execute as r,clone as o,setContextFeature as f,createFeature as u}from"./featureExpressionInfoUtils.js";class h{constructor(){this._meterUnitOffset=0,this._renderUnitOffset=0,this._unit="meters",this._metersPerElevationInfoUnit=1,this._featureExpressionInfoContext=null,this.centerPointInElevationSR=null,this.mode=null}get featureExpressionInfoContext(){return this._featureExpressionInfoContext}get meterUnitOffset(){return this._meterUnitOffset}get unit(){return this._unit}set unit(t){this._unit=t,this._metersPerElevationInfoUnit=s(t)}get requiresSampledElevationInfo(){return"absolute-height"!==this.mode}reset(){this.mode=null,this._meterUnitOffset=0,this._renderUnitOffset=0,this._featureExpressionInfoContext=null,this.unit="meters"}set offsetMeters(t){this._meterUnitOffset=t,this._renderUnitOffset=0}set offsetElevationInfoUnits(t){this._meterUnitOffset=t*this._metersPerElevationInfoUnit,this._renderUnitOffset=0}addOffsetRenderUnits(t){this._renderUnitOffset+=t}geometryZWithOffset(t,e){const n=this.calculateOffsetRenderUnits(e);return null!=this.featureExpressionInfoContext?n:t+n}calculateOffsetRenderUnits(t){let e=this._meterUnitOffset;const n=this.featureExpressionInfoContext;return null!=n&&(e+=r(n)*this._metersPerElevationInfoUnit),e/t.unitInMeters+this._renderUnitOffset}setFromElevationInfo(e){this.mode=e.mode,this.unit=i(e.unit)?e.unit:"meters",this.offsetElevationInfoUnits=t(e.offset,0)}updateFeatureExpressionInfoContext(t,s,i){if(e(t))return void(this._featureExpressionInfoContext=null);const r=t&&t.arcade;r&&n(s)&&n(i)?(this._featureExpressionInfoContext=o(t),f(this._featureExpressionInfoContext,u(r.modules,s,i))):this._featureExpressionInfoContext=t}static fromElevationInfo(t){const e=new h;return n(t)&&e.setFromElevationInfo(t),e}}export{h as ElevationContext};