@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 1.46 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.32/esri/copyright.txt for details.
*/
import{equals as I}from"../../core/libs/gl-matrix-2/math/vec2.js";import{clone as t,create as T}from"../../core/libs/gl-matrix-2/factories/vec2f64.js";function n(I,t){const T=[],n=[];return r(T,I,t,o.LEFT),r(n,T,t,o.BOTTOM),r(T,n,t,o.RIGHT),r(n,T,t,o.TOP),n}function r(I,T,n,r){const c=O(n,r);if(I.length=0,T.length){c(D,T[0],T[0])===e.INSIDE&&E(I,T[0]);for(let n=0;n<T.length;n++){const r=T[n===T.length-1?0:n+1];switch(c(D,T[n],r)){case e.INSIDE:E(I,r);break;case e.INSIDE_OUT:E(I,t(D));break;case e.OUTSIDE_IN:E(I,t(D)),E(I,r);case e.OUTSIDE:}}}}function E(t,T){0!==t.length&&I(t.at(-1),T)||t.push(T)}function O(I,t){const T=t===o.LEFT||t===o.RIGHT?0:1,n=I[t],r=t===o.LEFT||t===o.BOTTOM?c.MIN:c.MAX,E=0===T?1:0;return(I,t,O)=>{if(t[T]<n&&O[T]<n)return r===c.MIN?e.OUTSIDE:e.INSIDE;if(t[T]>n&&O[T]>n)return r===c.MIN?e.INSIDE:e.OUTSIDE;const o=(O[E]-t[E])/(O[T]-t[T]),D=t[E]+o*(n-t[T]);return I[T]=n,I[E]=D,(t[T]<n?1:-1)*r>0?e.OUTSIDE_IN:e.INSIDE_OUT}}var c,e,o;!function(I){I[I.MIN=1]="MIN",I[I.MAX=-1]="MAX"}(c||(c={})),function(I){I[I.OUTSIDE=0]="OUTSIDE",I[I.INSIDE=1]="INSIDE",I[I.OUTSIDE_IN=2]="OUTSIDE_IN",I[I.INSIDE_OUT=3]="INSIDE_OUT"}(e||(e={})),function(I){I[I.LEFT=0]="LEFT",I[I.BOTTOM=1]="BOTTOM",I[I.RIGHT=2]="RIGHT",I[I.TOP=3]="TOP"}(o||(o={}));const D=T();export{n as clipPolygonToExtent};