@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 8.19 kB
JavaScript
import{_ as t}from"../../../../../chunks/tslib.es6.js";import e from"../../../../../core/Handles.js";import{isSome as i,unwrapOr as a,destroyMaybe as n,isNone as s}from"../../../../../core/maybe.js";import{memoize as o}from"../../../../../core/memoize.js";import{ignoreAbortErrors as r}from"../../../../../core/promiseUtils.js";import{syncAndInitial as p,watch as l}from"../../../../../core/reactiveUtils.js";import{property as h}from"../../../../../core/accessorSupport/decorators/property.js";import"../../../../../core/accessorSupport/ensureType.js";import"../../../../../core/arrayUtils.js";import{subclass as g}from"../../../../../core/accessorSupport/decorators/subclass.js";import{WatchUpdatingTracking as m}from"../../../../../core/support/WatchUpdatingTracking.js";import d from"../../../../../geometry/Point.js";import{clonePoint as u}from"../../../../../layers/graphics/hydratedFeatures.js";import{isPrimaryPointerAction as c}from"../../../analysis/support/measurementUtils.js";import{SnappingVisualizer3D as y}from"../../SnappingVisualizer3D.js";import{screenToMap3D as _,hideManipulatorWhileDragging as w}from"../../editingTools/dragEventPipeline3D.js";import f from"./AreaMeasurement3DView.js";import{PickRequest as v}from"../support/PickRequest.js";import{AnalysisToolBase as S}from"../../../../interactive/AnalysisToolBase.js";import{createCoordinateHelper as P}from"../../../../interactive/coordinateHelper.js";import{createManipulatorDragEventPipeline as V}from"../../../../interactive/dragEventPipeline.js";import{ManipulatorCollection as j}from"../../../../interactive/ManipulatorCollection.js";import{EditGeometry as M}from"../../../../interactive/editGeometry/EditGeometry.js";import{EditGeometryOperations as D}from"../../../../interactive/editGeometry/EditGeometryOperations.js";import{acquire as x}from"../../../../interactive/snapping/SceneSnappingManagerPool.js";import{SnappingContext as k}from"../../../../interactive/snapping/SnappingContext.js";import{createSnapDragEventPipelineStep as b}from"../../../../interactive/snapping/SnappingDragPipelineStep.js";import{SnappingOperation as O}from"../../../../interactive/snapping/SnappingOperation.js";import{setupSnappingToggleHandles as C}from"../../../../interactive/snapping/snappingUtils.js";import{createScreenPointFromEvent as H}from"../../../../support/screenUtils.js";let A=class extends S{constructor(t){super(t),this._handles=new e,this._updatingHandles=new m,this.polygonState="initial",this.manipulators=new j,this._getSnappingContext=o((t=>new k({elevationInfo:{mode:"absolute-height",offset:0},pointer:t,editGeometryOperations:new D(new M("point",P(!0,!1,this.view.spatialReference))),visualizer:new y})))}initialize(){const{view:t,analysisViewData:e,manipulators:n,visible:s}=this;this.measurementView=new f({view:t,analysisViewData:e,toolState:this,manipulators:n,visible:s});const o=x(t);this._snappingManagerResult=o,this._handles.add(o),this._snappingOperation=new O({view:t}),this._updatingHandles.add((()=>this.stagedPoint),(t=>{this.analysisViewData.cursorPoint=i(t)?u(t,new d):null}),p),C(this,(()=>{const t=a(this.view.inputManager.latestPointerType,"mouse"),e=this._getSnappingContext(t);this._updatingHandles.addPromise(r(this._snappingOperation.resnap(this._snappingManager,e)))})),this._setupManipulators(),this._handles.add(l((()=>this.state),(t=>{"measured"===t&&this.finishToolCreation()}),p))}destroy(){this.measurementView.destroy(),this._set("measurementView",null),this._handles=n(this._handles),this._updatingHandles=n(this._updatingHandles)}get _snappingManager(){return this._snappingManagerResult.snappingManager}get state(){return 0===this.analysisViewData.path.numVertices?"ready":this.analysisViewData.validMeasurement&&"editing"!==this.polygonState?"measured":"measuring"}get cursor(){return"ready"===this.state||"drawing"===this.polygonState?"crosshair":null}get updating(){return this._updatingHandles.updating||this._snappingManager.updating}get stagedPoint(){return this._snappingOperation.stagedPoint}set stagedPoint(t){this._snappingOperation.stagedPoint=t}get snappingOptions(){return this._snappingManager.options}finishMeasurement(){const{path:t}=this.analysisViewData;t.numVertices<3?(t.clear(),this.polygonState="initial"):(t.close(),this.polygonState="measured"),this._resetSnappingState()}onShow(){this.measurementView.show()}onHide(){this.measurementView.hide()}onDeactivate(){this._resetSnappingState()}onInputEvent(t){switch(t.type){case"immediate-double-click":this._handleImmediateDoubleClick(t);break;case"immediate-click":this._handleImmediateClick(t);break;case"pointer-move":this._handlePointerMove(t);break;case"drag":this._handleDrag(t);break;case"key-down":this._handleKeyDown(t)}}_setupManipulators(){const t=t=>t.events.on("grab-changed",(()=>{if(this.analysisViewData.validMeasurement){const t=this.manipulators.some((t=>t.manipulator.grabbing));this.polygonState=t?"editing":"measured"}})),e=e=>{this._handles.add([V(e,((t,e,i,a)=>{const n=w(t),s=t.metadata,o=this._snappingManager,r=this._getSnappingContext(a),p=this._updatingHandles,{snappingStep:l,cancelSnapping:h}=b({snappingManager:o,snappingContext:r,updatingHandles:p});i=i.next(n).next((e=>(this.analysisViewData.lastDraggedVertex=null,this.analysisViewData.path.setVertexPosition(s,g),t.location=g,e))).next(h),e.next(n).next(_(this.view)).next(...l).next((e=>{t.location=e.mapEnd,this.analysisViewData.lastDraggedVertex="end"===e.action?null:s,this.analysisViewData.path.setVertexPosition(s,u(e.mapEnd))}));const g=u(this.analysisViewData.path.getVertexPositionAsPoint(s))})),t(e)],e)};this.manipulators.forEach((({manipulator:t})=>{e(t)})),this._handles.add([this.manipulators.on("after-add",(({item:{manipulator:t}})=>{e(t)})),this.manipulators.on("after-remove",(({item:{manipulator:t}})=>this._handles.remove(t)))])}_handleImmediateDoubleClick(t){c(t)&&("drawing"===this.polygonState&&this.finishMeasurement(),t.stopPropagation())}_handleDrag(t){"editing"===this.polygonState&&t.stopPropagation()}_handleImmediateClick(t){if(!c(t))return;const e=H(t),{pointerType:i}=t;if(this.active)switch(this.polygonState){case"initial":if(this._addVertexAt(e,i))return this.stagedPoint=null,this.polygonState="drawing",void t.stopPropagation();break;case"drawing":{const a=this.measurementView.vertexHandleAt(e,i);if(s(a)){if(this._addVertexAt(e,i))return this.stagedPoint=null,void t.stopPropagation()}else 0===a.index&&(this.finishMeasurement(),t.stopPropagation());break}}"mouse"===t.pointerType&&this._hoverAt(e)}_handlePointerMove(t){if("mouse"===t.pointerType){const e=H(t);this._hoverAt(e)}}_handleKeyDown(t){"Enter"===t.key&&"drawing"===this.polygonState&&(this.finishMeasurement(),t.stopPropagation())}_hoverAt(t){const{polygonState:e}=this;if(this.active&&("initial"===e||"drawing"===e)){const e=this._pick(t);if(i(e)&&i(e.mapPoint)){const t=this._getSnappingContext("mouse");this._updatingHandles.addPromise(r(this._snappingOperation.snap({point:e.mapPoint},this._snappingManager,t)))}}else this.stagedPoint=null}_addVertexAt(t,e){const a=this._pick(t);if(i(a)&&i(a.mapPoint)){const{mapPoint:t}=a,i=this._getSnappingContext(e),n=this._snappingOperation.update({point:t},this._snappingManager,i),s=u(n,new d);return this.analysisViewData.path.add(s),!0}return!1}_pick(t){const e=new v(t);return this.measurementView.pick(e)}_resetSnappingState(){this._snappingManager.doneSnapping(),this._snappingOperation.abort(),this._snappingOperation.stagedPoint=null}get test(){return{snappingManager:this._snappingManager}}};t([h({readOnly:!0})],A.prototype,"state",null),t([h()],A.prototype,"polygonState",void 0),t([h({readOnly:!0})],A.prototype,"cursor",null),t([h()],A.prototype,"measurementView",void 0),t([h({constructOnly:!0})],A.prototype,"view",void 0),t([h({constructOnly:!0})],A.prototype,"analysis",void 0),t([h({constructOnly:!0})],A.prototype,"analysisViewData",void 0),t([h({readOnly:!0})],A.prototype,"manipulators",void 0),t([h()],A.prototype,"updating",null),t([h()],A.prototype,"stagedPoint",null),t([h()],A.prototype,"snappingOptions",null),A=t([g("esri.views.3d.interactive.measurementTools.areaMeasurement3D.AreaMeasurement3DTool")],A);const T=A;export{T as default};