UNPKG

@arcgis/core

Version:

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

6 lines (5 loc) 2.23 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.33/esri/copyright.txt for details. */ import e from"../../../../../core/Error.js";import o from"../../../../../core/Logger.js";import{toPt as r}from"../../../../../core/screenUtils.js";import{getWebGLCapabilities as t}from"../../../../webgl/capabilities.js";const l=8,s=l-2,n=()=>o.getLogger("esri.views.2d.layers.features.support.rendererUtils");function u(e){return e.map((e=>a(e)?i(e.clone()):e))}function a(e){return("size"===e.type||"color"===e.type||"opacity"===e.type)&&null!=e.stops}function i(e){return e.stops=b(e.type,e.stops??[]),e}function p(e,o,r){return(1-r)*e+r*o}function c(e,o){const[t,...l]=o,n=l.pop(),u=l[0].value,a=l[l.length-1].value,i=(a-u)/s,c=[];for(let s=u;s<a;s+=i){let t=0;for(;s>=l[t].value;)t++;const n=l[t],u=o[t-1],a=s-u.value,i=n.value===u.value?1:a/(n.value-u.value);if("color"===e){const e=l[t],r=o[t-1],n=e.color.clone();n.r=p(r.color.r,n.r,i),n.g=p(r.color.g,n.g,i),n.b=p(r.color.b,n.b,i),n.a=p(r.color.a,n.a,i),c.push({value:s,color:n,label:e.label})}else if("size"===e){const e=l[t],n=o[t-1],u=r(e.size),a=p(r(n.size),u,i);c.push({value:s,size:a,label:e.label})}else{const e=l[t],r=p(o[t-1].opacity,e.opacity,i);c.push({value:s,opacity:r,label:e.label})}}return[t,...c,n]}function f(e){const[o,...r]=e,t=r.pop();for(;r.length>s;){let e=0,o=0;for(let t=1;t<r.length;t++){const l=r[t-1],s=r[t],n=Math.abs(s.value-l.value);n>o&&(o=n,e=t)}r.splice(e,1)}return[o,...r,t]}function b(e,o){return o.length<=l?o:(n().warn(`Found ${o.length} Visual Variable stops, but MapView only supports ${l}. Displayed stops will be simplified.`),o.length>2*l?c(e,o):f(o))}function g(){const{supportsColorBufferFloat:e,supportsColorBufferFloatBlend:o,supportsColorBufferHalfFloat:r}=t();return e&&o||r}function m(o){if(!o)return!0;switch(o.type){case"dot-density":break;case"heatmap":if(!g()){const o=t(),r=["supportsColorBufferFloat","supportsColorBufferFloatBlend","supportsColorBufferHalfFloat"].filter((e=>!o[e])).join(", ");return n().errorOnce(new e("webgl-missing-extension",`Missing WebGL2 requirements for Heatmap: ${r}`)),!1}}return!0}export{m as isRendererSupported,u as simplifyVisualVariables};