UNPKG

@arcgis/core

Version:

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

6 lines (5 loc) 3.75 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.33/esri/copyright.txt for details. */ import{rad2deg as t}from"../../../core/mathUtils.js";import{create as n}from"../../../geometry/support/aaBoundingRect.js";import{getRingsOrPathsBounds as e}from"../../../geometry/support/boundsUtils.js";import{geometryToCoordinates as o}from"../../../geometry/support/coordsUtils.js";function r(t,n,e,r){if(null==r||t.hasZ||(r=void 0),"point"===t.type)return t.x+=n,t.y+=e,t.hasZ&&null!=r&&(t.z+=r),t;if("multipoint"===t.type){const o=t.points;for(let t=0;t<o.length;t++)o[t]=l(o[t],n,e,r);return t}if("extent"===t.type)return t.xmin+=n,t.xmax+=n,t.ymin+=e,t.ymax+=e,null!=r&&(t.zmin??=0,t.zmin+=r,t.zmax??=0,t.zmax+=r),t;const i=o(t),s="polyline"===t.type?t.paths:t.rings;for(let o=0;o<i.length;o++){const t=i[o];for(let o=0;o<t.length;o++)t[o]=l(t[o],n,e,r)}return"paths"in t?t.paths=s:t.rings=s,t}function i(t,n,e,i,s){const a=t.clone(),m=i.resolution;if("point"===a.type){if(s)r(a,n*m,-e*m);else{const t=i.state.transform,o=i.state.inverseTransform,r=t[0]*a.x+t[2]*a.y+t[4],s=t[1]*a.x+t[3]*a.y+t[5];a.x=o[0]*(r+n)+o[2]*(s+e)+o[4],a.y=o[1]*(r+n)+o[3]*(s+e)+o[5]}return a}if("multipoint"===a.type){if(s)r(a,n*m,-e*m);else{const t=a.points,o=i.state.transform,r=i.state.inverseTransform;for(let i=0;i<t.length;i++){const s=t[i],a=o[0]*s[0]+o[2]*s[1]+o[4],m=o[1]*s[0]+o[3]*s[1]+o[5],l=r[0]*(a+n)+r[2]*(m+e)+r[4],p=r[1]*(a+n)+r[3]*(m+e)+r[5];t[i]=x(s,l,p,void 0)}}return a}if("extent"===a.type){if(s)r(a,n*m,-e*m);else{const t=i.state.transform,o=i.state.inverseTransform,r=t[0]*a.xmin+t[2]*a.ymin+t[4],s=t[1]*a.xmin+t[3]*a.ymin+t[5],m=t[0]*a.xmax+t[2]*a.ymax+t[4],l=t[1]*a.xmax+t[3]*a.ymax+t[5];a.xmin=o[0]*(r+n)+o[2]*(s+e)+o[4],a.ymin=o[1]*(r+n)+o[3]*(s+e)+o[5],a.xmax=o[0]*(m+n)+o[2]*(l+e)+o[4],a.ymax=o[1]*(m+n)+o[3]*(l+e)+o[5]}return a}if(s)r(a,n*m,-e*m);else{const t=o(a),r="polyline"===a.type?a.paths:a.rings,s=i.state.transform,m=i.state.inverseTransform;for(let o=0;o<t.length;o++){const r=t[o];for(let t=0;t<r.length;t++){const o=r[t],i=s[0]*o[0]+s[2]*o[1]+s[4],a=s[1]*o[0]+s[3]*o[1]+s[5],l=m[0]*(i+n)+m[2]*(a+e)+m[4],p=m[1]*(i+n)+m[3]*(a+e)+m[5];r[t]=x(o,l,p,void 0)}}"paths"in a?a.paths=r:a.rings=r}return a}function s(t,r,i,s){if("point"===t.type){const{x:n,y:e}=t,o=s?s[0]:n,a=s?s[1]:e,m=t.clone(),l=(n-o)*r+o,x=(e-a)*i+a;return m.x=l,m.y=x,m}if("multipoint"===t.type){const a=o(t),m=n(),[l,p,y,f]=e(m,[a]),u=s?s[0]:(l+y)/2,c=s?s[1]:(f+p)/2,h=t.clone(),g=h.points;for(let t=0;t<g.length;t++){const n=g[t],[e,o]=n,s=(e-u)*r+u,a=(o-c)*i+c;g[t]=x(n,s,a,void 0)}return h}if("extent"===t.type){const{xmin:n,xmax:e,ymin:o,ymax:a}=t,m=s?s[0]:(n+e)/2,l=s?s[1]:(a+o)/2,x=t.clone();if(x.xmin=(n-m)*r+m,x.ymax=(a-l)*i+l,x.xmax=(e-m)*r+m,x.ymin=(o-l)*i+l,x.xmin>x.xmax){const t=x.xmin,n=x.xmax;x.xmin=n,x.xmax=t}if(x.ymin>x.ymax){const t=x.ymin,n=x.ymax;x.ymin=n,x.ymax=t}return x}const a=o(t),m=n(),[l,p,y,f]=e(m,a),u=s?s[0]:(l+y)/2,c=s?s[1]:(f+p)/2,h=t.clone(),g="polyline"===h.type?h.paths:h.rings;for(let n=0;n<a.length;n++){const t=a[n];for(let e=0;e<t.length;e++){const o=t[e],[s,a]=o,m=(s-u)*r+u,l=(a-c)*i+c;g[n][e]=x(o,m,l,void 0)}}return"paths"in h?h.paths=g:h.rings=g,h}function a(t,n,e,o,r,i){const s=Math.sqrt((e-t)*(e-t)+(o-n)*(o-n));return Math.sqrt((r-t)*(r-t)+(i-n)*(i-n))/s}function m(n,e,o,r=!1){const i=Math.atan2(e.y-o.y,e.x-o.x)-Math.atan2(n.y-o.y,n.x-o.x),s=Math.atan2(Math.sin(i),Math.cos(i));return r?s:t(s)}function l(t,n,e,o){return x(t,t[0]+n,t[1]+e,null!=t[2]&&null!=o?t[2]+o:void 0)}function x(t,n,e,o){const r=[n,e];return t.length>2&&r.push(null!=o?o:t[2]),t.length>3&&r.push(t[3]),r}export{i as cloneMove,m as getRotationAngle,a as getScaleRatio,r as move,s as scale};