@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 10.2 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.32/esri/copyright.txt for details.
*/
import"../../../../core/has.js";import{clamp as e}from"../../../../core/mathUtils.js";import{fromMat4 as t}from"../../../../core/libs/gl-matrix-2/math/mat3.js";import{create as o}from"../../../../core/libs/gl-matrix-2/factories/mat3f64.js";import{identity as i,copy as n,set as s,multiply as r,scale as l,translate as a,rotateZ as f,rotateX as u,rotateY as c}from"../../../../core/libs/gl-matrix-2/math/mat4.js";import{create as p}from"../../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{i as d}from"../../../../chunks/vec32.js";import{create as z}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{meterIn as m}from"../../../../renderers/support/lengthUtils.js";import{isStringOrNull as v,isString as S,isNumber as h}from"../../../../support/guards.js";import{debugFlags as y}from"../../support/debugFlags.js";import{NoParameters as x}from"../../../webgl/NoParameters.js";var g,b;!function(e){e[e.Undefined=0]="Undefined",e[e.DefinedSize=1]="DefinedSize",e[e.DefinedScale=2]="DefinedScale"}(g||(g={})),function(e){e[e.Undefined=0]="Undefined",e[e.DefinedAngle=1]="DefinedAngle"}(b||(b={}));class C{constructor(e){this.field=e}}class D extends C{constructor(e){super(e),this.minSize=[0,0,0],this.maxSize=[0,0,0],this.offset=[0,0,0],this.factor=[0,0,0],this.type=[g.Undefined,g.Undefined,g.Undefined]}}class U extends C{constructor(e){super(e),this.colors=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],this.values=[0,0,0,0,0,0,0,0]}}class w extends C{constructor(e){super(e),this.values=[0,0,0,0,0,0,0,0],this.opacityValues=[0,0,0,0,0,0,0,0]}}class V extends C{constructor(e){super(e),this.offset=[0,0,0],this.factor=[1,1,1],this.type=[0,0,0]}}class j{}function M(e){return null!=e}function A(e,t){e&&e.push(t)}function I(e,t,o,i=p()){const n=e||0,s=t||0,r=o||0;return 0!==n&&f(i,i,-n/180*Math.PI),0!==s&&u(i,i,s/180*Math.PI),0!==r&&c(i,i,r/180*Math.PI),i}function P(e,t,o,i,n){const s=e.minSize,r=e.maxSize;if(e.useSymbolValue){const e=i.symbolSize[o];return t.minSize[o]=e,t.maxSize[o]=e,t.offset[o]=t.minSize[o],t.factor[o]=0,t.type[o]=g.DefinedSize,!0}if(M(e.field))return M(e.stops)?2===e.stops.length&&h(e.stops[0].size)&&h(e.stops[1].size)?(T(e.stops[0].size,e.stops[1].size,e.stops[0].value,e.stops[1].value,t,o),t.type[o]=g.DefinedSize,!0):(A(n,"Could not convert size info: stops only supported with 2 elements"),!1):h(s)&&h(r)&&M(e.minDataValue)&&M(e.maxDataValue)?(T(s,r,e.minDataValue,e.maxDataValue,t,o),t.type[o]=g.DefinedSize,!0):"unknown"===e.valueUnit?(A(n,"Could not convert size info: proportional size not supported"),!1):null!=m[e.valueUnit]?(t.minSize[o]=-1/0,t.maxSize[o]=1/0,t.offset[o]=0,t.factor[o]=1/m[e.valueUnit],t.type[o]=g.DefinedSize,!0):(A(n,"Could not convert size info: scale-dependent size not supported"),!1);if(!M(e.field)){if(e.stops?.[0]&&h(e.stops[0].size))return t.minSize[o]=e.stops[0].size,t.maxSize[o]=e.stops[0].size,t.offset[o]=t.minSize[o],t.factor[o]=0,t.type[o]=g.DefinedSize,!0;if(h(s))return t.minSize[o]=s,t.maxSize[o]=s,t.offset[o]=s,t.factor[o]=0,t.type[o]=g.DefinedSize,!0}return A(n,"Could not convert size info: unsupported variant of sizeInfo"),!1}function T(e,t,o,i,n,s){const r=Math.abs(i-o)>0?(t-e)/(i-o):0;n.minSize[s]=r>0?e:t,n.maxSize[s]=r>0?t:e,n.offset[s]=e-o*r,n.factor[s]=r}function F(e,t,o,i){if(e.normalizationField||e.valueRepresentation)return A(i,"Could not convert size info: unsupported property"),null;if(!v(e.field))return A(i,"Could not convert size info: field is not a string"),null;if(t.size){if(e.field)if(t.size.field){if(e.field!==t.size.field)return A(i,"Could not convert size info: multiple fields in use"),null}else t.size.field=e.field}else t.size=new D(e.field);let n;switch(e.axis){case"width":return n=P(e,t.size,0,o,i),n?t:null;case"height":return n=P(e,t.size,2,o,i),n?t:null;case"depth":return n=P(e,t.size,1,o,i),n?t:null;case"width-and-depth":return n=P(e,t.size,0,o,i),n&&P(e,t.size,1,o,i),n?t:null;case null:case void 0:case"all":return n=P(e,t.size,0,o,i),n=n&&P(e,t.size,1,o,i),n=n&&P(e,t.size,2,o,i),n?t:null;default:return A(i,`Could not convert size info: unknown axis "${e.axis}""`),null}}function R(e,t,o){for(let n=0;n<3;++n){let o=t.unitInMeters;e.type[n]===g.DefinedSize&&(o*=t.modelSize[n],e.type[n]=g.DefinedScale),e.minSize[n]=e.minSize[n]/o,e.maxSize[n]=e.maxSize[n]/o,e.offset[n]=e.offset[n]/o,e.factor[n]=e.factor[n]/o}let i;if(e.type[0]!==g.Undefined)i=0;else if(e.type[1]!==g.Undefined)i=1;else{if(e.type[2]===g.Undefined)return A(o,"No size axis contains a valid size or scale"),!1;i=2}for(let n=0;n<3;++n)e.type[n]===g.Undefined&&(e.minSize[n]=e.minSize[i],e.maxSize[n]=e.maxSize[i],e.offset[n]=e.offset[i],e.factor[n]=e.factor[i],e.type[n]=e.type[i]);return!0}function k(e,t,o){e[4*t]=o.r/255,e[4*t+1]=o.g/255,e[4*t+2]=o.b/255,e[4*t+3]=o.a}function E(e,t,o){if(e.normalizationField)return A(o,"Could not convert color info: unsupported property"),null;if(S(e.field)){if(!e.stops)return A(o,"Could not convert color info: missing stops or colors"),null;{if(e.stops.length>8)return A(o,"Could not convert color info: too many color stops"),null;t.color=new U(e.field);const i=e.stops;for(let e=0;e<8;++e){const o=i[Math.min(e,i.length-1)];t.color.values[e]=o.value,k(t.color.colors,e,o.color)}}}else{if(!(e.stops&&e.stops.length>=0))return A(o,"Could not convert color info: no field and no colors/stops"),null;{const o=e.stops&&e.stops.length>=0&&e.stops[0].color;t.color={field:null,values:[0,0,0,0,0,0,0,0],colors:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]};for(let e=0;e<8;e++)t.color.values[e]=1/0,k(t.color.colors,e,o)}}return t}function _(e,t,o){if(e.normalizationField)return A(o,"Could not convert opacity info: unsupported property"),null;if(S(e.field)){if(!e.stops)return A(o,"Could not convert opacity info: missing stops or opacities"),null;{if(e.stops.length>8)return A(o,"Could not convert opacity info: too many opacity stops"),null;t.opacity=new w(e.field);const i=e.stops;for(let e=0;e<8;++e){const o=i[Math.min(e,i.length-1)];t.opacity.values[e]=o.value,t.opacity.opacityValues[e]=o.opacity}}}else{if(!(e.stops&&e.stops.length>=0))return A(o,"Could not convert opacity info: no field and no opacities/stops"),null;{const o=e.stops&&e.stops.length>=0?e.stops[0].opacity:0;t.opacity={field:null,values:[0,0,0,0,0,0,0,0],opacityValues:[0,0,0,0,0,0,0,0]};for(let e=0;e<8;e++)t.opacity.values[e]=1/0,t.opacity.opacityValues[e]=o}}return t}function q(e,t,o){const i=2===o&&"arithmetic"===e.rotationType;t.offset[o]=i?90:0,t.factor[o]=i?-1:1,t.type[o]=1}function N(e,t,o){if(!S(e.field))return A(o,"Could not convert rotation info: field is not a string"),null;if(t.rotation){if(e.field)if(t.rotation.field){if(e.field!==t.rotation.field)return A(o,"Could not convert rotation info: multiple fields in use"),null}else t.rotation.field=e.field}else t.rotation={field:e.field,offset:[0,0,0],factor:[1,1,1],type:[0,0,0]};switch(e.axis){case"tilt":return q(e,t.rotation,0),t;case"roll":return q(e,t.rotation,1),t;case null:case void 0:case"heading":return q(e,t.rotation,2),t;default:return A(o,`Could not convert rotation info: unknown axis "${e.axis}""`),null}}class ${constructor(e,t=[1,1,1],o=[1,1,1],i=1,n=[0,0,0],s=[1,1,1],r=[0,0,0]){this.supports=e,this.modelSize=t,this.symbolSize=o,this.unitInMeters=i,this.anchor=n,this.scale=s,this.rotation=r}}function B(e,t,o){if(!e)return null;const i=e.reduce(((e,i)=>{if(!e)return e;if(i.valueExpression)return A(o,"Could not convert visual variables: arcade expressions not supported"),null;switch(i.type){case"size":return t.supports.size?F(i,e,t,o):e;case"color":return t.supports.color?E(i,e,o):e;case"opacity":return t.supports.opacity?_(i,e,o):null;case"rotation":return t.supports.rotation?N(i,e,o):e;default:return null}}),new j);return!(e.length>0&&i)||i.size||i.color||i.opacity||i.rotation?i?.size&&!R(i.size,t,o)?null:i:null}class L{constructor(e,t,o){this.visualVariables=e,this.materialParameters=t,this.requiresShaderTransformation=o}}function O(e,t){if(!e)return null;if(y.TESTS_DISABLE_FAST_UPDATES)return null;const o=B(e.visualVariables,t);return o?new L(o,K(o,t),!!o.size):null}function G(e,t,o){if(!t||!e)return!1;const i=e.visualVariables,n=B(t.visualVariables,o);return!!n&&(!!(H(i.size,n.size,"size")&&H(i.color,n.color,"color")&&H(i.rotation,n.rotation,"rotation")&&H(i.opacity,n.opacity,"opacity"))&&(e.visualVariables=n,e.materialParameters=K(n,o),e.requiresShaderTransformation=!!n.size,!0))}function H(e,t,o){if(!!e!=!!t)return!1;if(e&&e.field!==t?.field)return!1;if(e&&"rotation"===o){const o=e,i=t;for(let e=0;e<3;e++)if(o.type[e]!==i.type[e]||o.offset[e]!==i.offset[e]||o.factor[e]!==i.factor[e])return!1}return!0}class J extends x{constructor(e){super(),this.vvSize=e?.size??null,this.vvColor=e?.color??null,this.vvOpacity=e?.opacity??null}}function K(e,n){const s=new J(e);return s.vvSize&&(s.vvSymbolAnchor=n.anchor,i(ee),I(n.rotation[2],n.rotation[0],n.rotation[1],ee),s.vvSymbolRotationMatrix=s.vvSymbolRotationMatrix||o(),t(s.vvSymbolRotationMatrix,ee)),s}function Q(t,o,i){if(!t.vvSize)return i;n(Y,i);const f=t.vvSymbolRotationMatrix;s(ee,f[0],f[1],f[2],0,f[3],f[4],f[5],0,f[6],f[7],f[8],0,0,0,0,1),r(Y,Y,ee);for(let n=0;n<3;++n){const i=t.vvSize.offset[n]+o[0]*t.vvSize.factor[n];Z[n]=e(i,t.vvSize.minSize[n],t.vvSize.maxSize[n])}return l(Y,Y,Z),a(Y,Y,t.vvSymbolAnchor),Y}function W(t,o,i){if(!o.vvSize)return d(t,1,1,1),t;for(let n=0;n<3;++n){const s=o.vvSize.offset[n]+i[0]*o.vvSize.factor[n];t[n]=e(s,o.vvSize.minSize[n],o.vvSize.maxSize[n])}return t}function X(e,t){const o=null==e?0:t.attributes[e];return"number"==typeof o&&isFinite(o)?o:0}const Y=p(),Z=z(),ee=p();export{$ as ConvertOptions,U as FastColorInfo,w as FastOpacityInfo,V as FastRotationInfo,b as FastRotationType,D as FastSizeInfo,g as FastSizeType,L as FastSymbolUpdatesState,j as FastVisualVariables,J as VisualVariablesParameters,B as convertVisualVariables,Q as evaluateModelTransform,W as evaluateModelTransformScale,X as getAttributeValue,K as getMaterialParameters,O as initFastSymbolUpdatesState,G as updateFastSymbolUpdatesState};