@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 8.52 kB
JavaScript
import{_ as t}from"../../../../../chunks/tslib.es6.js";import"../../../../../geometry.js";import e from"../../../../../core/Handles.js";import{destroyMaybe as i,isNone as n,isSome as a,unwrapOr as s,unwrap as r}from"../../../../../core/maybe.js";import{memoize as o}from"../../../../../core/memoize.js";import{watch as l,syncAndInitial as p}from"../../../../../core/reactiveUtils.js";import{property as u}from"../../../../../core/accessorSupport/decorators/property.js";import"../../../../../core/accessorSupport/ensureType.js";import"../../../../../core/arrayUtils.js";import{subclass as c}from"../../../../../core/accessorSupport/decorators/subclass.js";import{WatchUpdatingTracking as d}from"../../../../../core/support/WatchUpdatingTracking.js";import{clonePoint as h}from"../../../../../layers/graphics/hydratedFeatures.js";import{isPrimaryPointerAction as m}from"../../../analysis/support/measurementUtils.js";import{SnappingVisualizer3D as g}from"../../SnappingVisualizer3D.js";import{SurfaceType as v,screenToMap3D as y,hideManipulatorWhileDragging as f}from"../../editingTools/dragEventPipeline3D.js";import{DirectLineMeasurement3DView as P}from"./DirectLineMeasurement3DView.js";import{getElevationAtPoint as _}from"../../../support/ElevationProvider.js";import{AnalysisToolBase as w}from"../../../../interactive/AnalysisToolBase.js";import{createCoordinateHelper as S}from"../../../../interactive/coordinateHelper.js";import{createManipulatorDragEventPipeline as M,resetProperties as j}from"../../../../interactive/dragEventPipeline.js";import{EditGeometry as D}from"../../../../interactive/editGeometry/EditGeometry.js";import{EditGeometryOperations as b}from"../../../../interactive/editGeometry/EditGeometryOperations.js";import{acquire as L}from"../../../../interactive/snapping/SceneSnappingManagerPool.js";import{SnappingContext as x}from"../../../../interactive/snapping/SnappingContext.js";import{createSnapDragEventPipelineStep as V}from"../../../../interactive/snapping/SnappingDragPipelineStep.js";import{setupSnappingToggleHandles as T}from"../../../../interactive/snapping/snappingUtils.js";import{createScreenPointFromEvent as O}from"../../../../support/screenUtils.js";import E from"../../../../../geometry/Point.js";let H=class extends w{constructor(t){super(t),this._handles=new e,this._updatingHandles=new d,this._emulatedDrag=null,this.lineState="initial",this.startPointSurfaceLocation=null,this.endPointSurfaceLocation=null,this.cursorPointSurfaceLocation=null,this.startManipulator=null,this.endManipulator=null,this.cursorManipulator=null,this._getSnappingContext=o((t=>new x({elevationInfo:{mode:"absolute-height",offset:0},pointer:t,editGeometryOperations:new b(new D("point",S(!0,!1,this.view.spatialReference))),visualizer:new g})))}initialize(){const{view:t,analysis:e,analysisViewData:i,visible:n}=this;this.measurementView=new P({toolState:this,view:t,analysis:e,analysisViewData:i,visible:n});const a=L(t);this._snappingManagerResult=a,this._handles.add(a);const{start:s,end:o,cursor:u}=this.measurementView.createManipulators(),c=(t,e,i)=>M(t,((t,n,a,s)=>{const o=f(t),l=this._snappingManager,p=this._getSnappingContext(s),u=this._updatingHandles,{lineState:c}=this;a=a.next(o).next(j(this,[i,e])).next((i=>(t.location=r(this.analysis[e]),i)));const d=y(this.view),m=t=>{const n=d(t);return n||"drawing"!==this.lineState&&"initial"!==this.lineState||(this[e]=null,this[i]=null),n};let g=n.next(o).next(m);if("touch"!==s||"editing"===c){const{snappingStep:t,cancelSnapping:e}=V({snappingManager:l,snappingContext:p,updatingHandles:u});a=a.next(e),g=g.next(...t)}g.next((t=>"start"!==t.action?t:null)).next((n=>{const a=h(n.mapEnd,new E);this[e]=a,t.location=a,this[i]=this._surfaceLocation(a,n.surfaceType)}))})),d=t=>t.events.on("grab-changed",(()=>{const t=s.grabbing||o.grabbing;this.lineState=t?"editing":"measured"}));this._handles.add([c(s,"startPoint","startPointSurfaceLocation"),c(o,"endPoint","endPointSurfaceLocation"),c(u,"cursorPoint","cursorPointSurfaceLocation"),d(s),d(o)]),this.manipulators.add(s),this.manipulators.add(o),this.manipulators.add(u),this.startManipulator=s,this.endManipulator=o,this.cursorManipulator=u,this._handles.add(l((()=>this.state),(t=>{"measured"===t&&this.finishToolCreation()}),p)),T(this)}destroy(){this._handles=i(this._handles),this._updatingHandles=i(this._updatingHandles),this.measurementView=i(this.measurementView)}get _snappingManager(){return this._snappingManagerResult.snappingManager}get state(){const{analysis:t}=this;if(n(t.startPoint)&&n(t.endPoint))return"ready";const{lineState:e}=this;return this.validMeasurement&&"editing"!==e&&"drawing"!==e?"measured":"measuring"}get cursor(){const{lineState:t}=this;return"initial"===t||"drawing"===t?"crosshair":null}get startPoint(){return this.analysis.startPoint}set startPoint(t){this.analysis.startPoint=t}get endPoint(){return this.analysis.endPoint}set endPoint(t){this.analysis.endPoint=t}get cursorPoint(){return this.measurementView.cursorPoint}set cursorPoint(t){this.measurementView.cursorPoint=t}get snappingOptions(){return this._snappingManager.options}get validMeasurement(){return a(this.analysis.startPoint)&&a(this.analysis.endPoint)}get updating(){return this._updatingHandles.updating||this._snappingManager.updating}onShow(){this.measurementView.show(),this._updateManipulatorAvailability()}onHide(){this.measurementView.hide()}onDeactivate(){this._emulatedDrag?.cancel(),this._emulatedDrag=null}onInputEvent(t){switch(t.type){case"immediate-click":this._handleImmediateClick(t);break;case"pointer-move":this._handlePointerMove(t)}this._updateManipulatorAvailability()}_handlePointerMove(t){if(!this.active||this.view.navigating)return;const{pointerType:e}=t;if("mouse"!==e)return;const i=O(t),{lineState:a,cursorManipulator:s,endManipulator:r}=this;let o=!1;n(this.cursorPoint)&&(this._emulatedDrag?.cancel(),this._emulatedDrag=k(s,e,i),o=!0),"initial"===a&&(this._emulatedDrag?.update(i),o=!0),"drawing"===a&&(r.events.emit("drag",{action:"update",start:i,screenPoint:i}),o=!0),o&&t.stopPropagation()}_handleImmediateClick(t){if(!this.active)return;if(!m(t))return;const e=O(t),{pointerType:i}=t,{cursorManipulator:s,startManipulator:r,endManipulator:o,lineState:l}=this;let p=!1;switch(n(this.cursorPoint)&&(this._emulatedDrag?.cancel(),this._emulatedDrag=k(s,i,e)),l){case"initial":if(this._emulatedDrag?.update(e),a(this.cursorPoint)){this._emulatedDrag?.end(e),this._emulatedDrag=null;const{cursorPoint:t}=this;this.startPoint=t,this.startPointSurfaceLocation=this.cursorPointSurfaceLocation,r.location=t,r.interactive=!1,o.interactive=!1,this.lineState="drawing",this._emulatedDrag=k(o,i,e),p=!0}break;case"drawing":this._emulatedDrag?.update(e),a(this.endPoint)&&(this._emulatedDrag?.end(e),this._emulatedDrag=null,r.interactive=!0,o.interactive=!0,this.lineState="measured",p=!0)}p&&t.stopPropagation()}_surfaceLocation(t,e){return e===v.GROUND?"on-the-surface":(t.z??0)>=this._getElevation(t)?"above-the-surface":"below-the-surface"}_updateManipulatorAvailability(){this.startManipulator.available=a(this.analysis.startPoint),this.endManipulator.available=a(this.analysis.endPoint)}_getElevation(t){return this.view.basemapTerrain.ready?s(_(this.view.elevationProvider,t),0):0}get test(){return{snappingManager:this._snappingManager}}};function k(t,e,i){return t.events.emit("drag",{action:"start",pointerType:e,start:i,screenPoint:i}),{update:e=>t.events.emit("drag",{action:"update",start:e,screenPoint:e}),end:e=>t.events.emit("drag",{action:"end",start:e,screenPoint:e}),cancel:()=>t.events.emit("drag",{action:"cancel"})}}t([u({readOnly:!0})],H.prototype,"state",null),t([u()],H.prototype,"lineState",void 0),t([u({readOnly:!0})],H.prototype,"cursor",null),t([u()],H.prototype,"startPoint",null),t([u()],H.prototype,"endPoint",null),t([u()],H.prototype,"cursorPoint",null),t([u({constructOnly:!0})],H.prototype,"analysis",void 0),t([u({constructOnly:!0})],H.prototype,"analysisViewData",void 0),t([u()],H.prototype,"measurementView",void 0),t([u({constructOnly:!0})],H.prototype,"view",void 0),t([u({readOnly:!0})],H.prototype,"validMeasurement",null),t([u({value:null})],H.prototype,"startPointSurfaceLocation",void 0),t([u({value:null})],H.prototype,"endPointSurfaceLocation",void 0),t([u({value:null})],H.prototype,"cursorPointSurfaceLocation",void 0),t([u()],H.prototype,"updating",null),H=t([c("esri.views.3d.interactive.measurementTools.directLineMeasurement3D.DirectLineMeasurement3DTool")],H);const C=H;export{C as default};