UNPKG

@arcgis/core

Version:

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

3 lines (2 loc) • 7.94 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */ import e from"../../../Graphic.js";import{equals as t}from"../../../core/arrayUtils.js";import{r as o}from"../../../chunks/rbush.js";import r from"../../../geometry/Multipoint.js";import n from"../../../geometry/Point.js";import i from"../../../geometry/Polygon.js";import s from"../../../geometry/Polyline.js";import{extentContainsCoords2D as c}from"../../../geometry/support/contains.js";import{getMidpoint as l}from"../../../geometry/support/coordsUtils.js";import{isMultipoint as a,isPolygon as p,isPolyline as m}from"../../../geometry/support/typeUtils.js";import{interpolateBezierCurve as u,splitBezierCurve as d}from"../../../geometry/support/curves/bezierCurveUtils.js";import{interpolateCircle as h}from"../../../geometry/support/curves/circleUtils.js";import{deriveCircleFromCircularArc as f,splitCircularArc as y}from"../../../geometry/support/curves/circularArcUtils.js";import{getEndpoint as g,isCoordinate as x,isBezierCurve as v,isEllipticArc4 as b,isCircularArc as w,cloneCurve as z,isEllipticArc as I,isEllipticArc7 as R}from"../../../geometry/support/curves/curveUtils.js";import{deriveCircleFromEllipticArc4 as j,splitEllipticArc4 as P}from"../../../geometry/support/curves/ellipticArc4Utils.js";import{deriveEllipse as S,interpolateEllipse as C,splitEllipticArc7 as M}from"../../../geometry/support/curves/ellipticArc7Utils.js";import Z from"../../../symbols/SimpleLineSymbol.js";import U from"../../../symbols/SimpleMarkerSymbol.js";import{settings as k}from"./settings.js";const T={pathIndex:"pathIndex",pointIndex:"pointIndex",pointIndexStart:"pointIndexStart",pointIndexEnd:"pointIndexEnd",controlPointKind:"kind",relatedGraphicIndices:"relatedGraphicIndices",curveFromStraightEdgeFlag:"curveFromStraightEdgeFlag",tool:"esriSketchTool"},E={bezier:{cp1:"bezier-cp-1",cp2:"bezier-cp-2",line1:"bezier-line-1",line2:"bezier-line-2"},circle:{interior:"circle-interior"}},K="box",A=k.reshapeGraphics,F={vertices:{default:new U({style:"circle",size:A.vertex.size,color:A.vertex.color,outline:{color:A.vertex.outlineColor,width:1}}),hover:new U({style:"circle",size:A.vertex.hoverSize,color:A.vertex.hoverColor,outline:{color:A.vertex.hoverOutlineColor,width:1}}),selected:new U({style:"circle",size:A.selected.size,color:A.selected.color,outline:{color:A.selected.outlineColor,width:1}})},controlPoints:{default:new U({style:"diamond",size:A.vertex.size,color:A.vertex.color,outline:{color:A.vertex.outlineColor,width:1}}),hover:new U({style:"diamond",size:A.vertex.hoverSize,color:A.vertex.hoverColor,outline:{color:A.vertex.hoverOutlineColor,width:1}}),selected:new U({style:"diamond",size:A.selected.size,color:A.selected.color,outline:{color:A.selected.outlineColor,width:1}})},midpoints:{default:new U({style:"circle",size:A.midpoint.size,color:A.midpoint.color,outline:{color:A.midpoint.outlineColor,width:1}}),hover:new U({style:"circle",size:A.midpoint.size,color:A.midpoint.color,outline:{color:A.midpoint.outlineColor,width:1}})},constructionLines:new Z({style:"solid",width:1,color:A.vertex.color})};function G(t,r,n,i,s){const l=[],a=[];for(let e=0;e<t.length;e++){const o=t[e];for(let t=0;t<o.length;t++){const r=g(o[t]);i&&!c(i,r)||a.push({coordinate:r,pathIndex:e,pointIndex:t})}}let p=null;i&&(p=o(a.length,e=>({minX:e.coordinate[0],minY:e.coordinate[1],maxX:e.coordinate[0],maxY:e.coordinate[1]})),p.load(a));let m=null;const u=s*s;for(const o of a){if(m&&s>0){const e=m[0]-o.coordinate[0],t=m[1]-o.coordinate[1];if(e*e+t*t<u)continue}m=o.coordinate,o.graphic=new e({geometry:n.arrayToPoint(o.coordinate),symbol:r?.vertices?.default,attributes:{[T.tool]:K,[T.pathIndex]:o.pathIndex,[T.pointIndex]:o.pointIndex}}),l.push(o.graphic)}return{graphics:l,graphicIndex:p}}function L(t,o,r){const n=[];for(let i=0;i<t.length;i++){const s=t[i];if(!V(t,i))for(let t=1;t<s.length;t++){const c=s[t];if(x(c))continue;const l=g(s[t-1]),a={[T.tool]:K,[T.pathIndex]:i,[T.pointIndex]:t};if(v(c)){const t=c.b.slice(1);n.push(...t.map((t,n)=>new e({geometry:r.arrayToPoint(t),symbol:o?.controlPoints?.default,attributes:{...a,[T.controlPointKind]:0===n?E.bezier.cp1:E.bezier.cp2}})))}const p=w(c),m=b(c);if(p||m){const t=p?f(l,c):j(l,c),i=h(t,.25);n.push(new e({geometry:r.arrayToPoint(i),symbol:o?.controlPoints?.default,attributes:{...a,[T.controlPointKind]:E.circle.interior}}))}}}return n}function X(t,o,r){const n=[],{spatialReference:i}=r;for(let c=0;c<t.length;c++){const r=t[c];for(let t=1;t<r.length;t++){const l=r[t];if(!v(l))continue;const[a,p,m]=l.b,u=g(r[t-1]),d={[T.tool]:K,[T.pathIndex]:c,[T.pointIndex]:t};n.push(new e({geometry:new s({paths:[[[u[0],u[1]],p]],spatialReference:i}),symbol:o?.constructionLines,attributes:{...d,[T.controlPointKind]:E.bezier.line1}}),new e({geometry:new s({paths:[[[a[0],a[1]],m]],spatialReference:i}),symbol:o?.constructionLines,attributes:{...d,[T.controlPointKind]:E.bezier.line2}}))}}return n}function Y(t,o,r,i,s,l){const a=[],p=[];for(let e=0;e<t.length;e++){const o=t[e],n=B(t,e);for(let t=0;t<o.length;t++){const s=(t+1)%o.length;if((!i||n)&&0===s)continue;const c=O(o[t],o[s],r);p.push({geometry:c,partIndex:e,fromIndex:t,toIndex:s})}}let m=null;const u=l*l;for(const d of p)if(!s||c(s,r.pointToArray(d.geometry))){if(m&&l>0){const e=m.x-d.geometry.x,t=m.y-d.geometry.y;if(e*e+t*t<u)continue}m=d.geometry,a.push(new e({geometry:new n(d.geometry),symbol:o.midpoints.default,attributes:{[T.tool]:K,[T.pathIndex]:d.partIndex,[T.pointIndexStart]:d.fromIndex,[T.pointIndexEnd]:d.toIndex}}))}return a}function O(e,t,o){const r=g(e),n=g(t),{spatialReference:i}=o,s=o.arrayToVector(r),c=o.arrayToVector(n),a=o.toXYZ(s),p=o.toXYZ(c),[m,d,y]=l(a,p),z=o.hasM()?0:void 0;if(x(t))return{x:m,y:d,z:y,m:z,spatialReference:i};if(v(t)){const[e,o]=u(r,t,.5);return{x:e,y:o,z:y,m:z,spatialReference:i}}if(w(t)){const e=f(r,t),[o,n]=h(e,.5);return{x:o,y:n,z:y,m:z,spatialReference:i}}if(b(t)){const e=j(r,t),[o,n]=h(e,.5);return{x:o,y:n,z:y,m:z,spatialReference:i}}const I=S(r,t),[R,P]=C(I,.5);return{x:R,y:P,z:y,m:z,spatialReference:i}}function V(e,o){const r=e.at(o);return 2===r?.length&&t(g(r[1]),g(r[0]))&&b(r[1])}function q(e,o){const r=e.at(o);return 2===r?.length&&t(g(r[1]),g(r[0]))&&R(r[1])}function B(e,o){const r=e.at(o);return 2===r?.length&&t(g(r[1]),g(r[0]))&&I(r[1])}function D(e){if(void 0===e)return e;switch(e.type){case"mesh":case"point":return e.clone();case"polygon":return new i({rings:e.rings.map(e=>e.map(e=>e.slice())),spatialReference:e.spatialReference,...e.curveRings?{curveRings:e.curveRings.map(e=>e.map(e=>z(e)))}:{},hasZ:e.hasZ,hasM:e.hasM});case"polyline":return new s({paths:e.paths.map(e=>e.map(e=>e.slice())),spatialReference:e.spatialReference,hasZ:e.hasZ,...e.curvePaths?{curvePaths:e.curvePaths.map(e=>e.map(e=>z(e)))}:{},hasM:e.hasM});case"multipoint":return new r({points:e.points.map(e=>e.slice()),spatialReference:e.spatialReference,hasZ:e.hasZ,hasM:e.hasM})}}function H(e,t){if(a(e))return void(e.points=t.flat());const o=t.some(e=>e.some(e=>!x(e)));p(e)?o?(e.curveRings=t,e.rings=[]):(e.rings=t,e.curveRings=void 0):m(e)&&(o?(e.curvePaths=t,e.paths=[]):(e.curvePaths=void 0,e.paths=t))}function J(e,t,o,r){const n=g(t);let i=[];switch(!0){case v(t):i=d(e,t,o);break;case w(t):{const r=f(e,t);i=y(r,t,o);break}case b(t):{const r=j(e,t);i=P(r,t,o);break}default:{const r=S(e,t);i=M(r,t,o);break}}if(i.length<2)return i;if(r.hasZ()){const t=e.at(2)??0,r=n.at(2)??0,s=t+(r-t)*o;g(i[0])[2]=s,g(i[1])[2]=r}if(r.hasM()){const e=r.hasZ()?3:2;g(i[0])[e]=0,g(i[1])[e]=n.at(-1)??0}return i}export{T as attributeKeys,E as controlPointKinds,X as createCurveConstructionLineGraphics,L as createCurveControlPointGraphics,Y as createMidpointGraphics,G as createVertexGraphics,F as defaultSymbols,D as fastCloneGeometry,O as getMidpoint,V as isSingleSegmentCircle,q as isSingleSegmentEllipse,B as isSingleSegmentPolygon,H as saveUpdatedCurveOrCoordinate,J as splitCurve,K as toolIdAttribute};