@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 1.36 kB
JavaScript
import{isSome as t}from"../../../../../core/maybe.js";import{getZForElevationMode as e}from"../../../../../support/elevationInfoUtils.js";import{EventPipeline as n}from"../../../../interactive/dragEventPipeline.js";class s{constructor(){this._view=null,this._elevationInfo=null,this._lastDragEvent=null,this._next=null,this._enabled=!1}get enabled(){return this._enabled}set enabled(e){if(this._enabled!==e&&t(this._lastDragEvent)&&t(this._next)){const n=this._lastDragEvent.mapEnd,s=this._snap(this._lastDragEvent.screenEnd);if(t(s)){const t={action:"update",mapStart:this._lastDragEvent.mapStart,mapEnd:!0===e?s:n,screenStart:this._lastDragEvent.screenEnd,screenEnd:this._lastDragEvent.screenEnd};this._next.execute(t)}}this._enabled=e}_snap(n){const s=t(this._view)?this._view.toMap(n,{exclude:[]}):null;return t(s)&&t(this._view)&&(s.z=e(s,this._view,this._elevationInfo)),s}createDragEventPipelineStep(e,s){this._view=e,this._elevationInfo=s,this._lastDragEvent=null;const a=new n;this._next=a;return[e=>{if(this._lastDragEvent="end"!==e.action?{...e}:null,this._enabled){const n=this._snap(e.screenEnd);return t(n)?{action:e.action,mapStart:e.mapStart,mapEnd:n,screenStart:e.screenStart,screenEnd:e.screenEnd}:null}return{action:e.action,mapStart:e.mapStart,mapEnd:e.mapEnd,screenStart:e.screenStart,screenEnd:e.screenEnd}},a]}}export{s as SnapToScene};