UNPKG

@arcgis/core

Version:

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

6 lines (5 loc) • 8.07 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.33/esri/copyright.txt for details. */ import{valueInUnit as e,zeroSquareMeters as t,zeroMeters as o,createLength as n,zeroDegreesGeographic as i}from"../../../core/quantityUtils.js";import{getMetersPerVerticalUnitForSR as r}from"../../../core/unitUtils.js";import{ensureType as a}from"../../../core/accessorSupport/ensureType.js";import c from"../../../geometry/Point.js";import{absoluteHeightElevationInfo as l,getConvertedElevationFromXYZ as s}from"../../../support/elevationInfoUtils.js";import{getDrawHelpMessage as p}from"./helpMessageUtils.js";import{getDrawMeshHelpMessage as u}from"./helpMessageUtils3d.js";import{getConstraintContext as m}from"../../interactive/sketch/constraintUtils.js";import{updateTooltipInfoFromMeshTransform as d}from"../../interactive/tooltip/tooltipCommonUtils.js";import{DrawCircleTooltipInfo as f}from"../../interactive/tooltip/infos/DrawCircleTooltipInfo.js";import{DrawMeshTooltipInfo as y}from"../../interactive/tooltip/infos/DrawMeshTooltipInfo.js";import{DrawMultipointTooltipInfo as g}from"../../interactive/tooltip/infos/DrawMultipointTooltipInfo.js";import{DrawPointTooltipInfo as w}from"../../interactive/tooltip/infos/DrawPointTooltipInfo.js";import{DrawPolygonTooltipInfo as h}from"../../interactive/tooltip/infos/DrawPolygonTooltipInfo.js";import{DrawPolylineTooltipInfo as v}from"../../interactive/tooltip/infos/DrawPolylineTooltipInfo.js";import{DrawRectangleTooltipInfo as O}from"../../interactive/tooltip/infos/DrawRectangleTooltipInfo.js";import{directionForVertices as k}from"../../support/angularMeasurementUtils.js";import{elevationFromZ as M,elevationFromPoint as x}from"../../support/euclideanLengthMeasurementUtils.js";function D(e,t){return{point:new w({sketchOptions:t,viewType:e}),multipoint:new g({sketchOptions:t,viewType:e}),polyline:new v({sketchOptions:t,viewType:e}),polygon:new h({sketchOptions:t,viewType:e}),mesh:new y({sketchOptions:t,viewType:e}),rectangle:new O({sketchOptions:t}),circle:new f({sketchOptions:t})}}function T(e){const{directionOptions:t,geometryType:o,sketchOptions:n,tooltipInfos:i}=e,r=t=>{const o=N(e).mode,n=i[t].elevation;"relative-to-ground"===o||"relative-to-scene"===o||"on-the-ground"===o?n.lock(W(e)):n.unlock()},a=e=>{if(t){const o=i[e].direction;o.committed=t.angle,o.unlockOnVertexPlacement=!1,n.values.directionMode=t.mode}};switch(o){case"polygon":case"polyline":r(o),a(o);break;case"point":case"mesh":r(o)}}function j(e,t){const{drawOperation:o,view:n}=t,i=b(t),r=N(t);if("2d"===n.type||!e||"absolute-height"!==r.mode||1!==o?.numCommittedVertices||!i||"draw-polyline"!==i.type&&"draw-polygon"!==i.type||i.elevation.locked)return;const[a,c,l]=e,s=K(a,c,l,r,t);null!=s&&i.elevation.lock(s)}function U(e){b(e)?.allFields.forEach((e=>{e.unlockOnVertexPlacement&&e.unlock()}))}function b({geometryType:e,graphic:t,tooltipInfos:o}){return t?.geometry?.type!==P[e]?"circle"===e||"rectangle"===e?o[e]:null:o[e]}const P={point:"point",multipoint:"multipoint",mesh:"mesh",polyline:"polyline",polygon:"polygon",circle:"polygon",rectangle:"polygon",freehandPolygon:"polygon",freehandPolyline:"polyline"};function I(e,t){switch(e?.type){case"draw-point":L(e,t);break;case"draw-multipoint":V(e,t);break;case"draw-polyline":z(e,t);break;case"draw-polygon":A(e,t);break;case"draw-rectangle":F(e,t);break;case"draw-circle":H(e,t);break;case"draw-mesh":G(e,t)}}function L(e,t){const o=t.graphic?.geometry;"point"===o?.type&&(S(e,o,t),e.helpMessage=p("point",o,t.drawOperation.drawingMode))}function V(e,t){const o=t.graphic?.geometry;"multipoint"===o?.type&&(S(e,o,t),e.helpMessage=p("multipoint",o,t.drawOperation.drawingMode))}function G(e,t){const{graphic:o,view:n}=t,i=o?.geometry;"3d"!==n.type||i&&"mesh"!==i.type||(S(e,i?.origin,t),i&&d(e,i),e.helpMessage=u(o,n))}function S(e,t,o){const{drawOperation:n,view:i,sketchOptions:r}=o,{cursorVertex:a}=n;e.sketchOptions=r,e.viewType=i.type;const c="multipoint"===t?.type?t.getPoint(t.points.length-1):t;if(e.setLocationFromPoint(c,Q(o)),R(e.elevation,o),!a)return void(n.constraints=void 0);const l=a;n.constraints={context:$(l,o),x:e.x.committed,y:e.y.committed,longitude:e.longitude.committed,latitude:e.latitude.committed,elevation:e.elevation.committed,distance:null,direction:null}}function z(e,t){const{createOperationGeometry:n,drawOperation:i,automaticLengthMeasurementUtils:r}=t,a=null!=n?n.full:null;a&&"polyline"!==a.type||(Z(e,t),e.totalLength.actual=i.lastVertex?(a?r.autoLength2D(a):null)??o:null,e.helpMessage=p("polyline",a,t.drawOperation.drawingMode))}function A(e,o){const{createOperationGeometry:n,drawOperation:i}=o,r=null!=n?n.full:null;r&&"polygon"!==r.type||(Z(e,o),e.area.actual=i.lastVertex?(r?o.automaticAreaMeasurementUtils.autoArea2D(r):null)??t:null,e.helpMessage=p("polygon",r,o.drawOperation.drawingMode))}const B=a(c);function Z(e,t){const{drawOperation:n,sketchOptions:r,view:a,automaticLengthMeasurementUtils:c}=t,{cursorVertex:l,lastVertex:s,secondToLastVertex:p}=n,u=r.values.effectiveDirectionMode;e.sketchOptions=r,e.viewType=a.type;const m=s&&l?c.autoDistanceBetweenPoints2D(B(s),B(l))??o:null;if(e.distance.actual=m,e.distance.readOnly=null==s,e.direction.actual=null,e.direction.readOnly=!0,s&&l&&("absolute"===u||p)){const t=k(p,s,l,u);e.direction.actual=t??i,e.direction.readOnly=!1}e.setLocationFromPoint(l,Q(t)),R(e.elevation,t);const d=C(s,t);e.xyMode=d,e.direction.visible="direction-distance"===d,e.distance.visible="direction-distance"===d,e.effectiveX.visible="coordinates"===d,e.effectiveY.visible="coordinates"===d;const f=l??s;n.constraints=f?{context:$(f,t),x:e.x.committed,y:e.y.committed,longitude:e.longitude.committed,latitude:e.latitude.committed,elevation:e.elevation.committed,distance:e.distance.committed,direction:e.direction.committed}:void 0}function C(e,{sketchOptions:t}){const o=t.tooltips.xyMode;return"auto"===o?e?"direction-distance":"coordinates":o}function F(e,t){e.sketchOptions=t.sketchOptions,e.xSize=E(t),e.ySize=X(t),e.area=q(t),e.helpMessage=p("rectangle",t.graphic?.geometry,t.drawOperation.drawingMode)}function H(e,t){const{forceUniformSize:o,sketchOptions:n}=t;e.sketchOptions=n,e.radius=o?Y(t):null,e.xSize=o?null:E(t),e.ySize=o?null:X(t),e.area=q(t),e.helpMessage=p("circle",t.graphic?.geometry,t.drawOperation.drawingMode)}function R(e,t){const{drawOperation:o}=t,n=o?.cursorVertex??o?.lastVertex;e.actual=x(n)??W(t),e.visible=o.hasZ,e.readOnly=!1,e.showAsZ=!0}function q(e){const o=e.createOperationGeometry?.full;return"polygon"!==o?.type?t:e.automaticAreaMeasurementUtils.autoArea2D(o)??t}function E({createOperationGeometry:e,automaticLengthMeasurementUtils:t}){const n=e?.rectangle?.midpoints;return(null!=n?t.autoDistanceBetweenPoints2D(n.left,n.right):null)??o}function X({createOperationGeometry:e,automaticLengthMeasurementUtils:t}){const n=e?.rectangle?.midpoints;return(null!=n?t.autoDistanceBetweenPoints2D(n.top,n.bottom):null)??o}function Y({createOperationGeometry:e,automaticLengthMeasurementUtils:t}){return(null!=e?.circle?.center&&null!=e.circle.edge?t.autoDistanceBetweenPoints2D(e.circle.center,e.circle.edge):null)??o}function J(t){const{geometryType:o,tooltipInfos:n}=t;switch(o){case"point":case"multipoint":case"mesh":case"polyline":case"polygon":{const i=n[o].elevation.committed;if(!i)return;return e(i,"meters")/r(Q(t))}default:return}}function K(e,t,o,n,i){const{view:r,drawOperation:a}=i;if("3d"!==r.type||!a)return;o??=0;const c=Q(i),l=N(i),p=s(r,e,t,o,c,l,n);return M(p,c)??W(i)}function N(e){return e.drawOperation.elevationInfo??l}function Q(e){return e.drawOperation.coordinateHelper.spatialReference}function W(e){const t=r(Q(e));return n(e.defaultZ*t,"meters")}function $(e,t){return m(e,t.view,Q(t),N(t),t.drawOperation.coordinateHelper.hasZ(),t.sketchOptions.values.effectiveDirectionMode)}export{D as createTooltipInfos,b as getActiveTooltipInfo,J as getConstraintZ,T as initializeConstraints,j as lockElevationOnVertexAdd,U as unlockConstraintsOnVertexAddOrRemove,I as updateTooltipInfo};