UNPKG

@arcgis/core

Version:

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

6 lines (5 loc) 4.61 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.33/esri/copyright.txt for details. */ import"../../../../../../core/has.js";import{pt2px as e}from"../../../../../../core/screenUtils.js";import{getMetersPerUnitForSR as a}from"../../../../../../core/unitUtils.js";import{meterIn as i}from"../../../../../../renderers/support/lengthUtils.js";import{nanMagicNumber as l}from"../../../../engine/webgl/definitions.js";import{RotationType as s}from"../../../../engine/webgl/shaderGraph/techniques/shaders/constants.js";import{padStops as t,premultiplyColor as r}from"./schemaUtils.js";import{simplifyVisualVariables as u}from"../../support/rendererUtils.js";const n=1.25,o=128,c=128;function p(e){if(!e.stops?.length)return null;const a=e.stops.sort(((e,a)=>e.value-a.value)),i=t(a,8),l=i.map((({value:e})=>e)),s=i.map((({color:e})=>r(e)));return{values:l,colors:s}}function v(e){if(!e.stops?.length)return null;const a=e.stops.sort(((e,a)=>e.value-a.value)),i=t(a,8);return{opacityValues:i.map((({value:e})=>e)),opacities:i.map((({opacity:e})=>e))}}function V(e){return{rotationType:"geographic"===e.rotationType?s.Geographic:s.Arithmatic}}function f(a){if(!a.stops?.length)return null;if(a.stops.some((e=>e.useMaxValue||e.useMinValue)))return(i,s)=>{const r=i.statisticsByLevel.get(s.key.level),u=a.stops.map((i=>({value:i.useMaxValue?r?.get(a.field)?.maxValue??0:i.useMinValue?r?.get(a.field)?.minValue??0:i.value,size:i.size?e(i.size):l}))).sort(((e,a)=>e.value-a.value)),n=t(u,8);return{values:n.map((({value:e})=>e)),sizes:n.map((({size:e})=>e))}};const i=a.stops.sort(((e,a)=>e.value-a.value)),s=t(i,8);return{values:s.map((({value:e})=>e)),sizes:s.map((({size:a})=>e(a)))}}function m(e){return l=>{const{state:s}=l;return{unitValueToPixelsRatio:a(s.spatialReference)/i[e.valueUnit??"meters"]/s.resolution}}}function S(e,a){const i=a.length;if(e<a[0].value||1===i)return a[0].size;for(let l=1;l<i;l++)if(e<a[l].value){const i=(e-a[l-1].value)/(a[l].value-a[l-1].value);return a[l-1].size+i*(a[l].size-a[l-1].size)}return a[i-1].size}function b(a){const{minDataValue:i,maxDataValue:l,minSize:s,maxSize:t}=a;if("object"==typeof s&&"object"==typeof t)return(a,r)=>{const u=a.state.scale,n=e(S(u,s.stops)),o=e(S(u,t.stops));return{minMaxValueAndSize:[i,l,n,o]}};if("object"==typeof s||"object"==typeof t)throw new Error("InternalError: Found a partial VisualVariableSizeMinMaxValue");return{minMaxValueAndSize:[i,l,e(s),e(t)]}}const z={visualVariableColor:null,visualVariableOpacity:null,visualVariableRotation:null,visualVariableSizeStops:null,visualVariableSizeScaleStops:null,visualVariableSizeOutlineScaleStops:null,visualVariableSizeUnitValue:null,visualVariableSizeMinMaxValue:null};function x(e,a=c,i=n){if(e.visualVariableSizeMinMaxValue)return"function"==typeof e.visualVariableSizeMinMaxValue?o:Math.max(e.visualVariableSizeMinMaxValue.minMaxValueAndSize[3]*i,a);if(e.visualVariableSizeScaleStops){if("function"==typeof e.visualVariableSizeScaleStops)return o;const l=e.visualVariableSizeScaleStops.sizes;return Math.max(l[l.length-1]*i,a)}if(e.visualVariableSizeStops){if("function"==typeof e.visualVariableSizeStops)return o;const l=e.visualVariableSizeStops.sizes;return Math.max(l[l.length-1]*i,a)}return e.visualVariableSizeUnitValue?2*o:0}function y(e){const a={...z};if(!e||!("visualVariables"in e)||!e.visualVariables)return a;for(const i of u(e.visualVariables))switch(i.type){case"color":a.visualVariableColor=p(i);break;case"opacity":a.visualVariableOpacity=v(i);break;case"rotation":a.visualVariableRotation=V(i);break;case"size":switch(h(i)){case"field-stops":a.visualVariableSizeStops=f(i);break;case"scale-stops":"outline"===i.target?a.visualVariableSizeOutlineScaleStops=f(i):a.visualVariableSizeScaleStops=f(i);break;case"min-max":a.visualVariableSizeMinMaxValue=b(i);break;case"unit-value":a.visualVariableSizeUnitValue=m(i)}break}return a}function h(e){return"number"==typeof e.minDataValue&&"number"==typeof e.maxDataValue&&null!=e.minSize&&null!=e.maxSize?"min-max":"$view.scale"===e?.valueExpression&&Array.isArray(e.stops)?"scale-stops":null==e.field&&"$view.scale"===e?.valueExpression||!(Array.isArray(e.stops)||"levels"in e&&e.levels)?null!=e.field||"$view.scale"!==e?.valueExpression?"unit-value":null:"field-stops"}export{p as createVisualVariableColor,v as createVisualVariableOpacity,V as createVisualVariableRotation,b as createVisualVariableSizeMinMaxValue,f as createVisualVariableSizeStops,m as createVisualVariableSizeUnitValue,y as createVisualVariableUniforms,x as getMaxSizeVVSize,z as noVisualVariables};