@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
3 lines (2 loc) • 8.2 kB
JavaScript
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */
import{debounce as e}from"../../../core/promiseUtils.js";import{valueInUnit as t,zeroMeters as o,createLength as n,zeroDegreesGeographic as i,zeroSquareMeters as r}from"../../../core/quantity.js";import{getMetersPerVerticalUnitForSR as a}from"../../../core/units.js";import{ensureType as c}from"../../../core/accessorSupport/ensureType.js";import s from"../../../geometry/Point.js";import{absoluteHeightElevationInfo as l,getConvertedElevationFromXYZ as p}from"../../../support/elevationInfoUtils.js";import{getDrawHelpMessage as u}from"./helpMessageUtils.js";import{getDrawMeshHelpMessage as m}from"./helpMessageUtils3d.js";import{getConstraintContext as d}from"../../interactive/sketch/constraintUtils.js";import{updateTooltipInfoFromMeshTransform as f}from"../../interactive/tooltip/tooltipCommonUtils.js";import{DrawCircleTooltipInfo as y}from"../../interactive/tooltip/infos/DrawCircleTooltipInfo.js";import{DrawMeshTooltipInfo as g}from"../../interactive/tooltip/infos/DrawMeshTooltipInfo.js";import{DrawMultipointTooltipInfo as w}from"../../interactive/tooltip/infos/DrawMultipointTooltipInfo.js";import{DrawPointTooltipInfo as h}from"../../interactive/tooltip/infos/DrawPointTooltipInfo.js";import{DrawPolygonTooltipInfo as v}from"../../interactive/tooltip/infos/DrawPolygonTooltipInfo.js";import{DrawPolylineTooltipInfo as O}from"../../interactive/tooltip/infos/DrawPolylineTooltipInfo.js";import{DrawRectangleTooltipInfo as k}from"../../interactive/tooltip/infos/DrawRectangleTooltipInfo.js";import{directionForVertices as M}from"../../support/angularMeasurementUtils.js";import{elevationFromZ as x}from"../../support/euclideanLengthMeasurementUtils.js";function D(e,t){return{point:new h({sketchOptions:t,viewType:e}),multipoint:new w({sketchOptions:t,viewType:e}),polyline:new O({sketchOptions:t,viewType:e}),polygon:new v({sketchOptions:t,viewType:e}),mesh:new g({sketchOptions:t,viewType:e}),rectangle:new k({sketchOptions:t}),circle:new y({sketchOptions:t})}}function j(e){const{directionOptions:t,geometryType:o,sketchOptions:n,tooltipInfos:i}=e,r=t=>{const o=$(e).mode,n=i[t].elevation;"relative-to-ground"===o||"relative-to-scene"===o||"on-the-ground"===o?n.lock(ee(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 T(e,t){const{drawOperation:o,view:n}=t,i=U(t),r=$(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,s]=e,l=W(a,c,s,r,t);null!=l&&i.elevation.lock(l)}function P(e){U(e)?.allFields.forEach(e=>{e.unlockOnVertexPlacement&&e.unlock()})}function U({geometryType:e,graphic:t,tooltipInfos:o}){return t?.geometry?.type!==b[e]?"circle"===e||"rectangle"===e?o[e]:null:o[e]}const b={point:"point",multipoint:"multipoint",mesh:"mesh",polyline:"polyline",polygon:"polygon",circle:"polygon",rectangle:"polygon",freehandPolygon:"polygon",freehandPolyline:"polyline",text:"point"};function I(e,t,o){switch(e?.type){case"draw-point":V(e,t);break;case"draw-multipoint":G(e,t);break;case"draw-polyline":z(e,t);break;case"draw-polygon":F(e,t);break;case"draw-rectangle":H(e,t);break;case"draw-circle":q(e,t);break;case"draw-mesh":S(e,t)}o.addPromise(L(e,t)).catch(()=>{})}const L=e(async(e,t)=>{switch(e?.type){case"draw-polygon":return await A(e,t);case"draw-rectangle":return await R(e,t);case"draw-circle":return await X(e,t)}});function V(e,t){const o=t.graphic?.geometry;"point"===o?.type&&(Z(e,t),e.helpMessage=u("point",o,t.drawOperation.drawingMode))}function G(e,t){const o=t.graphic?.geometry;"multipoint"===o?.type&&(Z(e,t),e.helpMessage=u("multipoint",o,t.drawOperation.drawingMode))}function S(e,t){const{graphic:o,view:n}=t,i=o?.geometry;"3d"!==n.type||i&&"mesh"!==i.type||(Z(e,t),i&&f(e,i),e.helpMessage=m(o,n))}function Z(e,t){const{drawOperation:o,view:n,sketchOptions:i}=t,{cursorVertex:r,hasZ:a}=o;e.sketchOptions=i,e.viewType=n.type,e.setLocationFromPoint(r,_(t)),e.setElevationFromPoint(r,{hasZ:a}),o.constraints=r?{context:te(r,t),x:e.x.committed,y:e.y.committed,longitude:e.longitude.committed,latitude:e.latitude.committed,elevation:e.elevation.committed,distance:null,direction:null}:void 0}function z(e,t){const{createOperationGeometry:n,drawOperation:i,automaticLengthMeasurementUtils:r}=t,a=null!=n?n.full:null;a&&"polyline"!==a.type||(C(e,t),e.totalLength.actual=i.lastVertex?(a?r.autoLength2D(a):null)??o:null,e.helpMessage=u("polyline",a,t.drawOperation.drawingMode))}function F(e,t){const{createOperationGeometry:o}=t,n=null!=o?o.full:null;n&&"polygon"!==n.type||(C(e,t),e.helpMessage=u("polygon",n,t.drawOperation.drawingMode))}async function A(e,t){const{createOperationGeometry:o,drawOperation:n}=t,i=null!=o?o.full:null;i&&"polygon"!==i.type||(n.lastVertex?e.area.actual=i?await t.automaticAreaMeasurementUtils.autoArea2D(i)??r:r:e.area.actual=null)}const B=c(s);function C(e,t){const{drawOperation:n,sketchOptions:r,view:a,automaticLengthMeasurementUtils:c}=t,{cursorVertex:s,lastVertex:l,secondToLastVertex:p,hasZ:u}=n,m=r.values.effectiveDirectionMode;e.sketchOptions=r,e.viewType=a.type;const d=l&&s?c.autoDistanceBetweenPoints2D(B(l),B(s))??o:null;e.distance.actual=d,e.distance.readOnly=null==l;const f=null!==l&&("absolute"===m||p);if(e.direction.actual=null,e.direction.readOnly=!f,f&&s){const t=M(p,l,s,m);e.direction.actual=t??i}e.setLocationFromPoint(s,_(t)),e.setElevationFromPoint(s,{hasZ:u});const y=E(l,t);e.xyMode=y,e.direction.visible="direction-distance"===y,e.distance.visible="direction-distance"===y,e.effectiveX.visible="coordinates"===y,e.effectiveY.visible="coordinates"===y;const g=s??l;n.constraints=g?{context:te(g,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 E(e,{sketchOptions:t}){const o=t.tooltips.xyMode;return"auto"===o?e?"direction-distance":"coordinates":o}function H(e,t){e.sketchOptions=t.sketchOptions,e.xSize=J(t),e.ySize=K(t),e.helpMessage=u("rectangle",t.graphic?.geometry,t.drawOperation.drawingMode)}async function R(e,t){e.area=await Y(t)}function q(e,t){const{forceUniformSize:o,sketchOptions:n}=t;e.sketchOptions=n,e.radius=o?N(t):null,e.xSize=o?null:J(t),e.ySize=o?null:K(t),e.helpMessage=u("circle",t.graphic?.geometry,t.drawOperation.drawingMode)}async function X(e,t){e.area=await Y(t)}async function Y({createOperationGeometry:e,automaticAreaMeasurementUtils:t}){const o=e?.full;return"polygon"!==o?.type?r:await t.autoArea2D(o)??r}function J({createOperationGeometry:e,automaticLengthMeasurementUtils:t}){const n=e?.rectangle?.midpoints;return(null!=n?t.autoDistanceBetweenPoints2D(n.left,n.right):null)??o}function K({createOperationGeometry:e,automaticLengthMeasurementUtils:t}){const n=e?.rectangle?.midpoints;return(null!=n?t.autoDistanceBetweenPoints2D(n.top,n.bottom):null)??o}function N({createOperationGeometry:e,automaticLengthMeasurementUtils:t}){return(null!=e?.circle?.center&&null!=e.circle.edge?t.autoDistanceBetweenPoints2D(e.circle.center,e.circle.edge):null)??o}function Q(e){const{geometryType:o,tooltipInfos:n}=e;switch(o){case"point":case"multipoint":case"mesh":case"polyline":case"polygon":{const i=n[o].elevation.committed;if(!i)return;return t(i,"meters")/a(_(e))}default:return}}function W(e,t,o,n,i){const{view:r,drawOperation:a}=i;if("3d"!==r.type||!a)return;o??=0;const c=_(i),s=$(i),l=p(r,e,t,o,c,s,n);return x(l,c)??ee(i)}function $(e){return e.drawOperation.elevationInfo??l}function _(e){return e.drawOperation.coordinateHelper.spatialReference}function ee(e){const t=a(_(e));return n(e.defaultZ*t,"meters")}function te(e,t){return d(e,t.view,_(t),$(t),t.drawOperation.coordinateHelper.hasZ(),t.sketchOptions.values.effectiveDirectionMode)}export{D as createTooltipInfos,U as getActiveTooltipInfo,Q as getConstraintZ,j as initializeConstraints,T as lockElevationOnVertexAdd,P as unlockConstraintsOnVertexAddOrRemove,I as updateTooltipInfo};