UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 8.49 kB
import e from"../../../Color.js";import a from"../../../Graphic.js";import{neverReached as r}from"../../../core/compilerUtils.js";import i from"../../../core/Logger.js";import{isNone as n,isSome as t}from"../../../core/maybe.js";import{meterIn as s}from"../../support/lengthUtils.js";import{isSizeVariable as l,isValidNumber as o,TransformationType as c,InputValueType as u}from"./sizeVariableUtils.js";const f=i.getLogger("esri.renderers.visualVariables.support.visualVariableUtils"),p=new a,d=Math.PI,v=/^\s*(return\s+)?\$view\.scale\s*(;)?\s*$/i;function b(a,r,i){const s="visualVariables"in a&&a.visualVariables?a.visualVariables.find((e=>"color"===e.type)):a;if(!s)return;if("esri.renderers.visualVariables.ColorVariable"!==s.declaredClass)return void f.warn("The visualVariable should be an instance of esri.renderers.visualVariables.ColorVariable");const l="number"==typeof r,o=l?null:r,c=o&&o.attributes;let u=l?r:null;const p=s.field,{ipData:d,hasExpression:v}=s.cache;let b=s.cache.compiledFunc;if(!p&&!v){const e=s.stops;return e&&e[0]&&e[0].color}if("number"!=typeof u)if(v){if(n(i)||n(i.arcade))return void f.error("Use of arcade expressions requires an arcade context");const e={viewingMode:i.viewingMode,scale:i.scale,spatialReference:i.spatialReference},a=i.arcade.arcadeUtils,r=a.getViewInfo(e),t=a.createExecContext(o,r);if(!b){const e=a.createSyntaxTree(s.valueExpression);b=a.createFunction(e),s.cache.compiledFunc=b}u=a.executeFunction(b,t)}else c&&(u=c[p]);const h=s.normalizationField,m=null!=c&&null!=h?parseFloat(c[h]):void 0;if(null!=u&&(!h||l||!isNaN(m)&&0!==m)){isNaN(m)||l||(u/=m);const a=R(u,d);if(a){const r=a[0],n=a[1],l=r===n?s.stops[r].color:e.blendColors(s.stops[r].color,s.stops[n].color,a[2],t(i)?i.color:void 0);return new e(l)}}}function h(e,a,r){const i="visualVariables"in e&&e.visualVariables?e.visualVariables.find((e=>"opacity"===e.type)):e;if(!i)return;if("esri.renderers.visualVariables.OpacityVariable"!==i.declaredClass)return void f.warn("The visualVariable should be an instance of esri.renderers.visualVariables.OpacityVariable");const t="number"==typeof a,s=t?null:a,l=s&&s.attributes;let o=t?a:null;const c=i.field,{ipData:u,hasExpression:p}=i.cache;let d=i.cache.compiledFunc;if(!c&&!p){const e=i.stops;return e&&e[0]&&e[0].opacity}if("number"!=typeof o)if(p){if(n(r)||n(r.arcade))return void f.error("Use of arcade expressions requires an arcade context");const e={viewingMode:r.viewingMode,scale:r.scale,spatialReference:r.spatialReference},a=r.arcade.arcadeUtils,t=a.getViewInfo(e),l=a.createExecContext(s,t);if(!d){const e=a.createSyntaxTree(i.valueExpression);d=a.createFunction(e),i.cache.compiledFunc=d}o=a.executeFunction(d,l)}else l&&(o=l[c]);const v=i.normalizationField,b=null!=l&&null!=v?parseFloat(l[v]):void 0;if(null!=o&&(!v||t||!isNaN(b)&&0!==b)){isNaN(b)||t||(o/=b);const e=R(o,u);if(e){const a=e[0],r=e[1];if(a===r)return i.stops[a].opacity;{const n=i.stops[a].opacity;return n+(i.stops[r].opacity-n)*e[2]}}}}function m(e,a,r){const i="visualVariables"in e&&e.visualVariables?e.visualVariables.find((e=>"rotation"===e.type)):e;if(!i)return;if("esri.renderers.visualVariables.RotationVariable"!==i.declaredClass)return void f.warn("The visualVariable should be an instance of esri.renderers.visualVariables.RotationVariable");const t=i.axis||"heading",s="heading"===t&&"arithmetic"===i.rotationType?90:0,l="heading"===t&&"arithmetic"===i.rotationType?-1:1,o="number"==typeof a?null:a,c=o&&o.attributes,u=i.field,{hasExpression:p}=i.cache;let d=i.cache.compiledFunc,v=0;if(!u&&!p)return v;if(p){if(n(r)||n(r.arcade))return void f.error("Use of arcade expressions requires an arcade context");const e={viewingMode:r.viewingMode,scale:r.scale,spatialReference:r.spatialReference},a=r.arcade.arcadeUtils,t=a.getViewInfo(e),s=a.createExecContext(o,t);if(!d){const e=a.createSyntaxTree(i.valueExpression);d=a.createFunction(e),i.cache.compiledFunc=d}v=a.executeFunction(d,s)}else c&&(v=c[u]||0);return v="number"!=typeof v||isNaN(v)?null:s+l*v,v}function V(e,a,r){const i="number"==typeof a,s=i?null:a,l=s&&s.attributes;let c=i?a:null;const{isScaleDriven:p}=e.cache;let d=e.cache.compiledFunc;if(p){const a=t(r)?r.scale:void 0,i=t(r)?r.view:void 0;c=null==a||"3d"===i?x(e):a}else if(!i)switch(e.inputValueType){case u.Expression:{if(n(r)||n(r.arcade))return void f.error("Use of arcade expressions requires an arcade context");const a={viewingMode:r.viewingMode,scale:r.scale,spatialReference:r.spatialReference},i=r.arcade.arcadeUtils,t=i.getViewInfo(a),l=i.createExecContext(s,t);if(!d){const a=i.createSyntaxTree(e.valueExpression);d=i.createFunction(a),e.cache.compiledFunc=d}c=i.executeFunction(d,l);break}case u.Field:l&&(c=l[e.field]);break;case u.Unknown:c=null}if(!o(c))return null;if(i||!e.normalizationField)return c;const v=l?parseFloat(l[e.normalizationField]):null;return o(v)&&0!==v?c/v:null}function x(e){let a=null,r=null;const i=e.stops;return i?(a=i[0].value,r=i[i.length-1].value):(a=e.minDataValue||0,r=e.maxDataValue||0),(a+r)/2}function y(e,a,r){const i="visualVariables"in e&&e.visualVariables?e.visualVariables.find((e=>"size"===e.type)):e;if(!i)return;if("esri.renderers.visualVariables.SizeVariable"!==i.declaredClass)return void f.warn("The visualVariable should be an instance of esri.renderers.visualVariables.SizeVariable");const n=M(V(i,a,r),i,a,r,i.cache.ipData);return null==n||isNaN(n)?0:n}function w(e,a,r){return null==e?null:l(e)?y(e,a,r):o(e)?e:null}function g(e,a,r){return o(r)&&e>r?r:o(a)&&e<a?a:e}function z(e,a,r,i){return e+((w(a.minSize,r,i)||a.minDataValue)??0)}function F(e,a,r){const i=e.stops;let n=i&&i.length&&i[0].size;return null==n&&(n=e.minSize),w(n,a,r)}function S(e,a,r,i){const n=(e-a.minDataValue)/(a.maxDataValue-a.minDataValue),s=w(a.minSize,r,i),l=w(a.maxSize,r,i),o=t(i)?i.shape:void 0;if(e<=a.minDataValue)return s;if(e>=a.maxDataValue)return l;if(null==s||null==l)return null;if("area"===a.scaleBy&&o){const e="circle"===o,a=e?d*(s/2)**2:s*s,r=a+n*((e?d*(l/2)**2:l*l)-a);return e?2*Math.sqrt(r/d):Math.sqrt(r)}return s+n*(l-s)}function E(e,a,r,i){const n=t(i)?i.shape:void 0,s=e/a.minDataValue,l=w(a.minSize,r,i),o=w(a.maxSize,r,i);let c=null;return c="circle"===n?2*Math.sqrt(s*(l/2)**2):"square"===n||"diamond"===n||"image"===n?Math.sqrt(s*l**2):s*l,g(c,l,o)}function U(e,a,r,i,n){const[t,s,l]=R(e,n);if(t===s)return w(a.stops?.[t].size,r,i);{const e=w(a.stops?.[t].size,r,i);return e+(w(a.stops?.[s].size,r,i)-e)*l}}function C(e,a,r,i){const n=(t(i)&&i.resolution?i.resolution:1)*s[a.valueUnit],l=w(a.minSize,r,i),o=w(a.maxSize,r,i),{valueRepresentation:c}=a;let u=null;return u="area"===c?2*Math.sqrt(e/d)/n:"radius"===c||"distance"===c?2*e/n:e/n,g(u,l,o)}function D(e){return e}function M(e,a,r,i,n){switch(a.transformationType){case c.Additive:return z(e,a,r,i);case c.Constant:return F(a,r,i);case c.ClampedLinear:return S(e,a,r,i);case c.Proportional:return E(e,a,r,i);case c.Stops:return U(e,a,r,i,n);case c.RealWorldSize:return C(e,a,r,i);case c.Identity:return D(e);case c.Unknown:return null}}function k(e,a,r){const{isScaleDriven:i}=e.cache;if(!(i&&"3d"===r||a))return null;const n={scale:a,view:r};let t=w(e.minSize,p,n),s=w(e.maxSize,p,n);if(null!=t||null!=s){if(t>s){const e=s;s=t,t=e}return{minSize:t,maxSize:s}}}function N(e,a,r){if(!e.visualVariables)return;const i=[],n=[],t=[],s=[],l=[];for(const o of e.visualVariables)switch(o.type){case"color":n.push(o);break;case"opacity":t.push(o);break;case"rotation":l.push(o);break;case"size":s.push(o)}return n.forEach((e=>{const n=b(e,a,r);i.push({variable:e,value:n})})),t.forEach((e=>{const n=h(e,a,r);i.push({variable:e,value:n})})),l.forEach((e=>{const n=m(e,a,r);i.push({variable:e,value:n})})),s.forEach((e=>{const n=y(e,a,r);i.push({variable:e,value:n})})),i.filter((e=>null!=e.value))}function R(e,a){if(!a)return;let r=0,i=a.length-1;return a.some(((a,n)=>e<a?(i=n,!0):(r=n,!1))),[r,i,(e-a[r])/(a[i]-a[r])]}function T(e,a,i){const n=["proportional","proportional","proportional"];for(const t of e){const e=t.useSymbolValue?"symbol-value":y(t,a,i);switch(t.axis){case"width":n[0]=e;break;case"depth":n[1]=e;break;case"height":n[2]=e;break;case"width-and-depth":n[0]=e,n[1]=e;break;case"all":case void 0:case null:n[0]=e,n[1]=e,n[2]=e;break;default:r(t.axis)}}return n}export{T as getAllSizes,b as getColor,h as getOpacity,m as getRotationAngle,y as getSize,M as getSizeForValue,w as getSizeFromNumberOrVariable,k as getSizeRangeAtScale,N as getVisualVariableValues,v as viewScaleRE};