UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

3 lines (2 loc) 5.31 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.19/LICENSE.txt */ import{__decorate as e}from"tslib";import{clock as t}from"../../../../core/clock.js";import{destroyHandle as i,makeHandle as o}from"../../../../core/handleUtils.js";import"../../../../core/has.js";import{removeMaybe as s}from"../../../../core/maybe.js";import{when as n,syncAndInitial as r,watch as l}from"../../../../core/reactiveUtils.js";import{property as a,subclass as c}from"../../../../core/accessorSupport/decorators.js";import m from"../../../../geometry/Point.js";import{sv3d as p}from"../../../../geometry/support/vectorStacks.js";import{DidPointerMoveRecentlyFlag as h}from"./lengthDimensionManipulatorUtils.js";import{LengthDimensionSubTool as u}from"./LengthDimensionSubTool.js";import{pointerMoveTimeoutMs as d}from"./settings.js";import{AnalysisToolBase as v}from"../../../interactive/AnalysisToolBase.js";import{sketchKeys as _}from"../../../interactive/keybindings.js";import{newToolIntersector as y}from"../../../interactive/ToolIntersector.js";import{createScreenPointArrayFromEvent as T}from"../../../support/screenUtils.js";let g=class extends v{constructor(e){super(e),this.automaticManipulatorSelection=!1,this.multiTouchEnabled=!1,this.removeIncompleteOnCancel=!1,this._placementMode=D,this._pointerMoveTimerMs=d,this._prevPointerMoveTimeout=null}initialize(){this._intersector=y(this.view.state.viewingMode),this._lengthDimensionSubTool=new u({analysis:this.analysis,analysisViewData:this.analysisViewData,manipulators:this.manipulators,parentTool:this,view:this.view}),this.addHandles([i(this._lengthDimensionSubTool),o(()=>this._clearPointerMoveTimeout()),n(()=>"created"===this.state,()=>this.finishToolCreation(),r),n(()=>this.firstGrabbedManipulator,e=>{this.selectedDimension=e.metadata},r),l(()=>this.selectedDimension,()=>this._resetPointerMoveTimeout(),r)])}get state(){return this.analysis.dimensions.some(e=>"length"===e.type)?null!=this._activeSubTool?"creating":"created":"ready"}get updating(){return this._lengthDimensionSubTool.updating}get cursor(){return this.active?"crosshair":null}get selectedDimension(){return this.analysisViewData.selectedDimension}set selectedDimension(e){this.analysisViewData.selectedDimension=e}place(e){this.selectedDimension=null,this._placementMode=e}onInputEvent(e){switch(e.type){case"immediate-click":this._clickHandler(e);break;case"immediate-double-click":this._doubleClickHandler(e);break;case"pointer-move":this._pointerMoveHandler(e);break;case"key-down":this._keyDownHandler(e)}}onActivate(){this._placementMode=D,this._activeSubTool=this._lengthDimensionSubTool}onDeactivate(){this._activeSubTool?.onDeactivate(),this._activeSubTool=null}onShow(){this._resetPointerMoveTimeout()}onManipulatorSelectionChanged(){this._lengthDimensionSubTool.onManipulatorSelectionChanged()}onHide(){this.selectedDimension=null}_clickHandler(e){if(this.hasFocusedManipulators)return void e.stopPropagation();if(null==this._activeSubTool)return;const t=this._intersectScreen(e);null!=t&&(this.selectedDimension=this._activeSubTool.onClick({mapPoint:t,pointerType:e.pointerType}),this.selectedDimension&&"single"===this._placementMode&&(this.view.activeTool=null),e.stopPropagation())}_doubleClickHandler(e){this.active&&(this.view.activeTool=null,e.stopPropagation())}_pointerMoveHandler(e){if(this._resetPointerMoveTimeout(),null==this._activeSubTool)return;if(this.hasFocusedManipulators)return;const t=this._intersectScreen(e);null!=t&&this._activeSubTool.onPointerMove({mapPoint:t,pointerType:e.pointerType})}_keyDownHandler(e){_.cancel===e.key?(this._activeSubTool?.removeStaged()&&"multiple"===this._placementMode&&e.stopPropagation(),this.active||(this.selectedDimension=null)):_.delete.includes(e.key)&&(this._activeSubTool?.removeStaged(),this._removeSelected())}_intersectScreen(e){const t=T(e);this.view.sceneIntersectionHelper.intersectToolIntersectorScreen(t,this._intersector);const i=this._intersector.results.min,o=p.get();return i.getIntersectionPoint(o)?this.view.renderCoordsHelper.fromRenderCoords(o,new m({spatialReference:this.view.spatialReference})):null}_removeSelected(){null!=this.selectedDimension&&(this.analysis.dimensions.remove(this.selectedDimension),this.selectedDimension=null)}_clearPointerMoveTimeout(){this._prevPointerMoveTimeout=s(this._prevPointerMoveTimeout)}_resetPointerMoveTimeout(){this._clearPointerMoveTimeout(),this.manipulators.forEach(e=>e.manipulator.state|=h),this._prevPointerMoveTimeout=t.setTimeout(()=>{this.manipulators.forEach(e=>e.manipulator.state&=~h)},this._pointerMoveTimerMs)}get test(){}};e([a({constructOnly:!0})],g.prototype,"view",void 0),e([a({constructOnly:!0})],g.prototype,"analysis",void 0),e([a({readOnly:!0})],g.prototype,"state",null),e([a({readOnly:!0})],g.prototype,"updating",null),e([a({readOnly:!0})],g.prototype,"cursor",null),e([a({constructOnly:!0})],g.prototype,"analysisViewData",void 0),e([a()],g.prototype,"selectedDimension",null),e([a()],g.prototype,"automaticManipulatorSelection",void 0),e([a()],g.prototype,"multiTouchEnabled",void 0),e([a()],g.prototype,"_activeSubTool",void 0),e([a()],g.prototype,"_lengthDimensionSubTool",void 0),e([a()],g.prototype,"_placementMode",void 0),g=e([c("esri.views.3d.analysis.Dimension.DimensionTool")],g);const D="multiple";export{g as DimensionTool};