UNPKG

@arcgis/core

Version:

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

6 lines (5 loc) 2.82 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.32/esri/copyright.txt for details. */ import{isSome as t}from"../../../../core/arrayUtils.js";import e from"../../../../core/Collection.js";import{JSONMap as i}from"../../../../core/jsonMap.js";import{isGraphic as n}from"../../../../support/guards.js";import r from"../../engine/webgl/effects/highlight/HighlightGradient.js";import{MultiHighlightGradient as s}from"../../engine/webgl/effects/highlight/MultiHighlightGradient.js";import{getFeaturePipelineState as o}from"../../engine/webgl/shaderGraph/techniques/featureTechniqueUtils.js";const l=new i({esriGeometryPoint:"point",esriGeometryMultipoint:"multipoint",esriGeometryPolyline:"polyline",esriGeometryPolygon:"polygon",esriGeometryMultiPatch:"multipatch",mesh:"mesh"});function a(t){return l.toJSON(t)}function h(t,e,i){const n=[],r=[];let s=0,o=0;for(const l of t){const t=o;let a=l[0][0],h=l[0][1];n[o++]=a,n[o++]=h;let p=0;for(let e=1;e<l.length;++e){const t=a,i=h;a=l[e][0],h=l[e][1],p+=h*t-a*i,n[o++]=a,n[o++]=h}e(p/2),p>0?(t-s>0&&(i(s,t,n,r),s=t),r.length=0):p<0&&t-s>0?r.push(.5*(t-s)):o=t}o-s>0&&i(s,o,n,r)}function p(t){const{bandCount:e,attributeTable:i,colormap:n,pixelType:r}=t.raster.rasterInfo;return 1===e&&(null!=i||null!=n||"u8"===r||"s8"===r)}function c(t,e){return null==e?(t?.destroy(),null):("single"===t?.type&&Array.isArray(e)&&(t.destroy(),t=null),"multi"!==t?.type||Array.isArray(e)||(t.destroy(),t=null),t||(t=Array.isArray(e)?new s:new r),Array.isArray(e)?"multi"===t.type&&t.setHighlightOptions(e):"single"===t.type&&t.setHighlightOptions(e),t)}function g(t,e,i,n){const{painter:r,highlightGradient:s}=t,{highlight:l}=r.effects;if(!s)return;const a=t.passOptions,h=s.getReasonsWithGradients();for(let p=0;p<h.length;p++){const s={...t,passOptions:{type:"highlight",activeGradient:null!=n?h[n].activeGradient:h[p].activeGradient,activeReasons:h[p].activeReasons,stepType:"burn",highlightAll:e}};if(l.bind(s),i(s),p<h.length-1){let r=0;for(let t=p+1;t<h.length;t++)r|=h[t].activeReasons;i({...t,passOptions:{type:"highlight",activeGradient:null!=n?h[n].activeGradient:h[p].activeGradient,activeReasons:r,stepType:"clear",highlightAll:e}})}const a={...t,passOptions:{type:"highlight",activeGradient:null!=n?h[n].activeGradient:h[p].activeGradient,activeReasons:h[p].activeReasons,stepType:"draw",highlightAll:e}};r.setPipelineState(o(t)),r.updatePipelineState(t.context),l.draw(a),l.unbind()}t.passOptions=a}function u(i){if(!i)return[];let r=n(i)?[i]:e.isCollection(i)?i.toArray():Array.isArray(i)?i:[];return r=r?.filter(t),0===(r?.length??0)?[]:r}export{h as analyzeRings,p as canUseMajorityInterpolationOnDataSource,c as createOrReuseHighlightGradient,u as getHighlightGraphics,g as renderHighlight,a as toJSONGeometryType};