@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 1.79 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.33/esri/copyright.txt for details.
*/
import{GeometryCursor as t}from"../../../geometry/GeometryCursor.js";import i from"../../../geometry/SpatialReference.js";import{clipCursorToTileExtent as e}from"../CIMEffects.js";import{GeometricEffectDonutMethod as n}from"../enums.js";class s{static{this.instance=null}static local(){return null===s.instance&&(s.instance=new s),s.instance}execute(t,i,e,n,s,o,h){return new r(t,i,e,n,s,o,h)}}class r{constructor(t,i,e,s,r,o,h){switch(this._preventClipping=h,this._inputGeometries=t,this._tileKey=s,this._geometryEngine=r,this._maxInflateSize=o*e,this._width=(void 0!==i.width?i.width:2)*e,i.method){case n.Mitered:case n.Bevelled:case n.Rounded:case n.TrueBuffer:case n.Square:}this._option=i.option}next(){let n;for(;n=this._inputGeometries.next();){if("esriGeometryEnvelope"===n.geometryType&&this._width>0){const i=n.asJSON();return Math.min(i.xmax-i.xmin,i.ymax-i.ymin)-2*this._width<0?n:t.fromJSONCIM({paths:[[[i.xmin+this._width,i.ymin+this._width],[i.xmax-this._width,i.ymin+this._width],[i.xmax-this._width,i.ymax-this._width],[i.xmin+this._width,i.ymax-this._width],[i.xmin+this._width,i.ymin+this._width]],[[i.xmin,i.ymin],[i.xmin,i.ymax],[i.xmax,i.ymax],[i.xmax,i.ymin],[i.xmin,i.ymin]]]})}if("esriGeometryPolygon"===n.geometryType){if(0===this._width)return n.clone();const t=this._geometryEngine;if(null==t)return null;const s=!this._preventClipping&&this._tileKey?e(n,this._maxInflateSize,!0):n.clone();if(!s)continue;const r=t.buffer(i.WebMercator,s.asJSON(),-this._width,1);if(r)for(const i of r.rings)if(i){s.startPath();for(const t of i.reverse())s.pushXY(t[0],s.yFactor*t[1])}return s}}return null}}export{s as EffectDonut};