SegmentDrawAction.js 7.1 KB

12345
  1. /*
  2. All material copyright ESRI, All Rights Reserved, unless otherwise specified.
  3. See https://js.arcgis.com/4.25/esri/copyright.txt for details.
  4. */
  5. import{_ as e}from"../../chunks/tslib.es6.js";import"../../geometry.js";import{isSome as t,isNone as i,destroyMaybe as r}from"../../core/maybe.js";import{property as s}from"../../core/accessorSupport/decorators/property.js";import"../../core/arrayUtils.js";import"../../core/accessorSupport/ensureType.js";import{subclass as o}from"../../core/accessorSupport/decorators/subclass.js";import{ViewingMode as n}from"../ViewingMode.js";import a from"./DrawAction.js";import{DrawTool as h}from"./DrawTool.js";import{VertexAddEvent as d,CursorUpdateEvent as p,DrawCompleteEvent as l}from"./input/DrawEvents.js";import{createViewAlignedCoordinateSystem as _}from"./support/surfaceCoordinateSystems.js";import{ViewEventPriorities as c}from"../input/InputManager.js";import{SKETCH_KEYS as m}from"../interactive/keybindings.js";import{EditGeometry as v,Component as g}from"../interactive/editGeometry/EditGeometry.js";import{EditGeometryOperations as w}from"../interactive/editGeometry/EditGeometryOperations.js";import{createScreenPointFromEvent as u}from"../support/screenUtils.js";import y from"../../geometry/Point.js";const T=["freehand","click"];let O=class extends a{constructor(e){super(e),this._isDragging=!1,this._panEnabled=!1,this._addVertexOnPointerUp=!1,this.viewAlignedCoordinateSystem=null,this.mode="freehand"}initialize(){"2d"===this.view.type?this._addViewHandles():this._addDrawTool()}destroy(){"2d"===this.view.type?this._removeViewHandles():this._removeDrawTool(),this.emit("destroy")}complete(){"2d"===this.view.type?this._completeDrawing():this._drawTool.completeCreateOperation()}_getGeometryZValue(){return this.hasZ&&this.vertices.length>0?this.vertices[0][2]:this.defaultZ}_addViewHandles(){this._removeViewHandles(),"click"===this.mode?this._handles.add(this._getClickModeViewHandles(),this._viewHandlesKey):this._handles.add(this._getDragModeViewHandles(),this._viewHandlesKey)}_getDragModeViewHandles(){return[this.view.on("immediate-click",(e=>{if(e.stopPropagation(),e.mapPoint&&!this._panEnabled){const i=this.getCoordsFromScreenPoint(u(e));t(i)&&(this._vertexAddHandler(e),this._drawCompleteHandler(e))}}),c.TOOL),this.view.on("pointer-down",(e=>{this._shouldHandlePointerEvent(e)&&(this._abortSnapping(),this._panEnabled||(this._resetGeometry(),this._addVertexOnPointerUp=!0,this._cursorScreenPoint=u(e),this._activePointerId=e.pointerId,this._vertexAddHandler(e),this._isDragging=!1,"touch"===e.pointerType&&this._updateCursor(e.native)))}),c.TOOL),this.view.on("pointer-move",(e=>{this._abortSnapping(),i(this._activePointerId)&&"touch"!==e.pointerType&&(this._cursorScreenPoint=u(e),this._updateCursor(e.native))}),c.TOOL),this.view.on("pointer-drag",(e=>{this._shouldHandlePointerEvent(e)&&(this._abortSnapping(),this._isDragging=!0,this._cursorScreenPoint=u(e),this._updateCursor(e.native))}),c.TOOL),this.view.on("pointer-up",(e=>{this._shouldHandlePointerEvent(e)&&this._addVertexOnPointerUp&&(this._abortSnapping(),this._activePointerId=null,this._isDragging&&this._vertexAddHandler(e),2===this._committedVertices.length&&this._drawCompleteHandler(e),this._isDragging=!1)}),c.TOOL),this.view.on("key-down",(e=>{e.key===m.complete&&this._cursorScreenPoint?(this._abortSnapping(),this._vertexAddHandler(e),this._drawCompleteHandler(e)):e.key===m.pan&&(this._panEnabled=!0)}),c.TOOL),this.view.on("key-up",(e=>{e.key===m.pan&&(this._panEnabled=!1)}),c.TOOL),this.view.on("drag",(e=>{t(this._activePointerId)&&e.stopPropagation()}),c.TOOL),this.view.on("drag",["Shift"],(e=>{e.stopPropagation()}),c.TOOL)]}_getClickModeViewHandles(){return[this.view.on("pointer-down",(e=>{this._abortSnapping(),this._cursorScreenPoint=u(e),this._activePointerId=e.pointerId,this._isDragging=!1,"touch"===e.pointerType&&this._updateCursor(e.native)}),c.TOOL),this.view.on("pointer-move",(e=>{this._abortSnapping(),this._cursorScreenPoint=u(e),i(this._activePointerId)&&"touch"!==e.pointerType&&this._updateCursor(e.native)}),c.TOOL),this.view.on("pointer-drag",(e=>{this._shouldHandlePointerEvent(e)&&(this._abortSnapping(),this._isDragging=!0)}),c.TOOL),this.view.on("pointer-up",(e=>{this._shouldHandlePointerEvent(e)&&(this._abortSnapping(),this._activePointerId=null,e.stopPropagation(),this._isDragging||this._vertexAddHandler(e),2!==this.vertices.length||this._isDragging||this._drawCompleteHandler(e),this._isDragging=!1)}),c.TOOL),this.view.on("key-down",(e=>{e.key===m.vertexAdd&&this._cursorScreenPoint&&(this._vertexAddHandler(e),2===this.vertices.length&&this._drawCompleteHandler(e)),e.key===m.complete&&this._cursorScreenPoint&&2===this.vertices.length&&(this._vertexAddHandler(e),this._drawCompleteHandler(e))}),c.TOOL)]}_removeViewHandles(){this._handles.remove(this._viewHandlesKey)}_addDrawTool(){this._drawTool=new h({view:this.view,elevationInfo:this.elevationInfo,hasZ:this.hasZ,geometryType:"segment",mode:this.mode}),this.view.addAndActivateTool(this._drawTool),this._handles.add([this._drawTool.on("vertex-add",(e=>{1===e.vertices.length&&this.emit("vertex-add",new d(this.view,null,e.vertices[0].vertexIndex,this._drawTool.getVertexCoords()))})),this._drawTool.on("cursor-update",(e=>{1===e.vertices.length&&this.emit("cursor-update",new p(this.view,null,e.vertices[0].vertexIndex,this._drawTool.getVertexCoords()))})),this._drawTool.on("complete",(e=>{this.emit("draw-complete",new l(null,this._drawTool.getVertexCoords())),this._removeDrawTool()}))],this._drawToolHandlesKey)}_removeDrawTool(){this._handles.remove(this._drawToolHandlesKey),this.view.tools.remove(this._drawTool),this._drawTool=r(this._drawTool)}_addVertex(e,t){const i=this._coordinateHelper.arrayToVector(e);if(this._isDuplicateOfLastVertex(i))return;this._lastVertexUnsnapped=this._stagedVertexUnsnapped,this._popCursorVertex(),this._editGeometryOperations.appendVertex(i),1===this._committedVertices.length&&(this.viewAlignedCoordinateSystem=_(this.view,this._committedVertices[0]));const r=this._committedVertices.length-1,s=new d(this.view,t,r,this.vertices);this.emit("vertex-add",s)}_updateCursor(e){if(this._popCursorVertex(),!this._cursorScreenPoint)return;const i=this.getCoordsAndPointFromScreenPoint(this._cursorScreenPoint);t(i)&&this._pushCursorVertex(i.vertex,(()=>this.emit("cursor-update",new p(this.view,e,this._activeComponent.vertices.length,this.vertices,t(this._stagedVertex)?new y(this._stagedVertex):null))))}_completeDrawing(e){if(this._activePointerId=null,this._popCursorVertex(),this._cursorScreenPoint=null,this._isDragging=!1,this._abortSnapping(),t(this._snappingManager)&&this._snappingManager.doneSnapping(),this.vertices.length<1)return;const i=new l(e,this.vertices);this.emit("draw-complete",i),i.defaultPrevented||this._removeViewHandles()}_resetGeometry(){this._editGeometryOperations.destroy(),this._editGeometryOperations=new w(new v("polygon",this._coordinateHelper)),this._activeComponent=new g(this._coordinateHelper.spatialReference,n.Local),this._editGeometryOperations.data.components.push(this._activeComponent)}};e([s({type:T})],O.prototype,"mode",void 0),O=e([o("esri/views/2d/engine/markup/SegmentDrawAction")],O);export{O as SegmentDrawAction};