@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
3 lines (2 loc) • 10.3 kB
JavaScript
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */
import{clamp as t}from"../../../../core/mathUtils.js";import{fromMat4 as o}from"../../../../core/libs/gl-matrix-2/math/mat3.js";import{create as e}from"../../../../core/libs/gl-matrix-2/factories/mat3f64.js";import{identity as s,copy as i,set as r,multiply as n,scale as l,translate as a,rotateZ as c,rotateX as u,rotateY as f}from"../../../../core/libs/gl-matrix-2/math/mat4.js";import{create as p}from"../../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{set as m,copy as z}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{ones as v,zeros as h,create as y}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{copy as d}from"../../../../core/libs/gl-matrix-2/math/vec4.js";import{ones as S}from"../../../../core/libs/gl-matrix-2/factories/vec4f64.js";import{meterIn as b}from"../../../../renderers/support/lengthUtils.js";import{isStringOrNull as x,isNumber as g}from"../../../../support/guards.js";import{debugFlags as C}from"../../support/debugFlags.js";import{olidEnabled as k}from"../../webgl-engine/effects/geometry/olidUtils.js";import{NoParameters as V}from"../../../webgl/NoParameters.js";class w{constructor(t){this.source=t}}class j extends w{constructor(t){super(t),this.minSize=[0,0,0],this.maxSize=[0,0,0],this.offset=[0,0,0],this.factor=[0,0,0],this.type=[0,0,0],this.fallback=[0,0,0]}}class M extends w{constructor(t){super(t),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],this.fallback=[0,0,0,0]}}class I extends w{constructor(t,o=0){super(t),this.fallback=o,this.values=[0,0,0,0,0,0,0,0],this.opacityValues=[0,0,0,0,0,0,0,0]}}class E extends w{constructor(t){super(t),this.offset=[0,0,0],this.factor=[1,1,1],this.type=[0,0,0]}}class N{}function P(t){return null!=t}function T(t,o){t&&t.push(o)}function U(t,o,e,s=p()){const i=t||0,r=o||0,n=e||0;return 0!==i&&c(s,s,-i/180*Math.PI),0!==r&&u(s,s,r/180*Math.PI),0!==n&&f(s,s,n/180*Math.PI),s}function D(t,o,e,s,i){const r=t.minSize,n=t.maxSize;if(t.useSymbolValue){const t=s.symbolSize[e];return o.minSize[e]=t,o.maxSize[e]=t,o.offset[e]=o.minSize[e],o.factor[e]=0,o.type[e]=1,!0}return P(t.field)||P(t.valueExpression)?P(t.stops)?2===t.stops.length&&g(t.stops[0].size)&&g(t.stops[1].size)?(F(t.stops[0].size,t.stops[1].size,t.stops[0].value,t.stops[1].value,o,e),o.type[e]=1,!0):(T(i,"Could not convert size info: stops only supported with 2 elements"),!1):g(r)&&g(n)&&P(t.minDataValue)&&P(t.maxDataValue)?(F(r,n,t.minDataValue,t.maxDataValue,o,e),o.type[e]=1,!0):"unknown"===t.valueUnit?(T(i,"Could not convert size info: proportional size not supported"),!1):null!=b[t.valueUnit]?(o.minSize[e]=-1/0,o.maxSize[e]=1/0,o.offset[e]=0,o.factor[e]=1/b[t.valueUnit],o.type[e]=1,!0):(T(i,"Could not convert size info: scale-dependent size not supported"),!1):t.stops?.[0]&&g(t.stops[0].size)?(o.minSize[e]=t.stops[0].size,o.maxSize[e]=t.stops[0].size,o.offset[e]=o.minSize[e],o.factor[e]=0,o.type[e]=1,!0):g(r)?(o.minSize[e]=r,o.maxSize[e]=r,o.offset[e]=r,o.factor[e]=0,o.type[e]=1,!0):(T(i,"Could not convert size info: unsupported variant of sizeInfo"),!1)}function F(t,o,e,s,i,r){const n=Math.abs(s-e)>0?(o-t)/(s-e):0;i.minSize[r]=n>0?t:o,i.maxSize[r]=n>0?o:t,i.offset[r]=t-e*n,i.factor[r]=n}function A(t,o,e,s){if(t.normalizationField||t.valueRepresentation)return T(s,"Could not convert size info: unsupported property"),null;if(!x(t.field)&&!x(t.valueExpression))return T(s,"Could not convert size info: field is not a string"),null;const i=B(t);if(o.size){if(i)if(o.size.source){if(i!==o.size.source)return T(s,"Could not convert size info: multiple fields in use"),null}else o.size.source=i}else o.size=new j(i),z(o.size.fallback,e.fallbackSize);let r;switch(t.axis){case"width":return r=D(t,o.size,0,e,s),r?o:null;case"height":return r=D(t,o.size,2,e,s),r?o:null;case"depth":return r=D(t,o.size,1,e,s),r?o:null;case"width-and-depth":return r=D(t,o.size,0,e,s),r&&D(t,o.size,1,e,s),r?o:null;case null:case void 0:case"all":return r=D(t,o.size,0,e,s),r=r&&D(t,o.size,1,e,s),r=r&&D(t,o.size,2,e,s),r?o:null;default:return T(s,`Could not convert size info: unknown axis "${t.axis}""`),null}}function R(t,o,e){for(let i=0;i<3;++i){let e=o.unitInMeters;1===t.type[i]&&(e*=o.modelSize[i],t.type[i]=2),t.minSize[i]=t.minSize[i]/e,t.maxSize[i]=t.maxSize[i]/e,t.offset[i]=t.offset[i]/e,t.factor[i]=t.factor[i]/e}let s;if(0!==t.type[0])s=0;else if(0!==t.type[1])s=1;else{if(0===t.type[2])return T(e,"No size axis contains a valid size or scale"),!1;s=2}for(let i=0;i<3;++i)0===t.type[i]&&(t.minSize[i]=t.minSize[s],t.maxSize[i]=t.maxSize[s],t.offset[i]=t.offset[s],t.factor[i]=t.factor[s],t.type[i]=t.type[s]);return!0}function O(t,o,e){t[4*o]=e.r/255,t[4*o+1]=e.g/255,t[4*o+2]=e.b/255,t[4*o+3]=e.a}function _(t,o,e,s){if(t.normalizationField)return T(s,"Could not convert color info: unsupported property"),null;const i=B(t);if(i){if(!t.stops)return T(s,"Could not convert color info: missing stops or colors"),null;{if(t.stops.length>8)return T(s,"Could not convert color info: too many color stops"),null;o.color=new M(i);const r=t.stops;for(let t=0;t<8;++t){const e=r[Math.min(t,r.length-1)];o.color.values[t]=e.value,O(o.color.colors,t,e.color)}d(o.color.fallback,e.fallbackColor)}}else{if(!(t.stops&&t.stops.length>=0))return T(s,"Could not convert color info: no field and no colors/stops"),null;{const s=t.stops&&t.stops.length>=0&&t.stops[0].color;o.color=new M(null);for(let t=0;t<8;t++)o.color.values[t]=1/0,O(o.color.colors,t,s);d(o.color.fallback,e.fallbackColor)}}return o}function q(t,o,e,s){if(t.normalizationField)return T(s,"Could not convert opacity info: unsupported property"),null;const i=B(t);if(i){if(!t.stops)return T(s,"Could not convert opacity info: missing stops or opacities"),null;{if(t.stops.length>8)return T(s,"Could not convert opacity info: too many opacity stops"),null;o.opacity=new I(i,e.fallbackColor[3]);const r=t.stops;for(let t=0;t<8;++t){const e=r[Math.min(t,r.length-1)];o.opacity.values[t]=e.value,o.opacity.opacityValues[t]=e.opacity}}}else{if(!(t.stops&&t.stops.length>=0))return T(s,"Could not convert opacity info: no field and no opacities/stops"),null;{const s=t.stops&&t.stops.length>=0?t.stops[0].opacity:0;o.opacity={source:"",values:[0,0,0,0,0,0,0,0],opacityValues:[0,0,0,0,0,0,0,0],fallback:e.fallbackColor[3]};for(let t=0;t<8;t++)o.opacity.values[t]=1/0,o.opacity.opacityValues[t]=s}}return o}function $(t,o,e){const s=2===e&&"arithmetic"===t.rotationType;o.offset[e]=s?90:0,o.factor[e]=s?-1:1,o.type[e]=1}function B(t){return(t.cache.hasExpression?t.valueExpression:t.field)||""}function L(t,o,e){const s=B(t);if(o.rotation){if(s)if(o.rotation.source){if(s!==o.rotation.source)return T(e,"Could not convert rotation info: multiple fields in use"),null}else o.rotation.source=s}else o.rotation={source:s,offset:[0,0,0],factor:[1,1,1],type:[0,0,0]};switch(t.axis){case"tilt":return $(t,o.rotation,0),o;case"roll":return $(t,o.rotation,1),o;case null:case void 0:case"heading":return $(t,o.rotation,2),o;default:return T(e,`Could not convert rotation info: unknown axis "${t.axis}""`),null}}class G{constructor({supports:t,modelSize:o,symbolSize:e,unitInMeters:s,anchor:i,scale:r,rotation:n,fallbackColor:l,fallbackSize:a}){this.supports=t,this.modelSize=o??v(),this.symbolSize=e??v(),this.unitInMeters=s??1,this.anchor=i??h(),this.scale=r??v(),this.rotation=n??h(),this.fallbackColor=l??S(),this.fallbackSize=a??v()}}function H(t,o,e){if(!t)return null;const s=t.reduce((t,s)=>{if(!t)return t;switch(s.type){case"size":return o.supports.size?A(s,t,o,e):t;case"color":return o.supports.color?_(s,t,o,e):t;case"opacity":return o.supports.opacity?q(s,t,o,e):null;case"rotation":return o.supports.rotation?L(s,t,e):t;default:return null}},new N);return!(t.length>0&&s)||s.size||s.color||s.opacity||s.rotation?s?.size&&!R(s.size,o,e)?null:s:null}class J{constructor(t,o,e){this.visualVariables=t,this.materialParameters=o,this.requiresShaderTransformation=e}}function K(t,o){if(!t)return null;if(k())return null;if(C.TESTS_DISABLE_FAST_UPDATES)return null;const e=H(t.visualVariables,o);return e?new J(e,Y(e,o),!!e.size):null}function Q(t,o,e){if(!o||!t)return!1;const s=t.visualVariables,i=H(o.visualVariables,e);return!!i&&(!!(W(s.size,i.size,"size")&&W(s.color,i.color,"color")&&W(s.rotation,i.rotation,"rotation")&&W(s.opacity,i.opacity,"opacity"))&&(t.visualVariables=i,t.materialParameters=Y(i,e),t.requiresShaderTransformation=!!i.size,!0))}function W(t,o,e){if(!!t!=!!o)return!1;if(t&&t.source!==o?.source)return!1;if(t&&"rotation"===e){const e=t,s=o;for(let t=0;t<3;t++)if(e.type[t]!==s.type[t]||e.offset[t]!==s.offset[t]||e.factor[t]!==s.factor[t])return!1}return!0}class X extends V{constructor(t){super(),this.vvSize=t?.size??null,this.vvColor=t?.color??null,this.vvOpacity=t?.opacity??null}get hasVVSize(){return!!this.vvSize}get hasVVColor(){return!!this.vvColor}get hasVVOpacity(){return!!this.vvOpacity}}function Y(t,i){const r=new X(t);return r.vvSize&&(r.vvSymbolAnchor=i.anchor,s(nt),U(i.rotation[2],i.rotation[0],i.rotation[1],nt),r.vvSymbolRotationMatrix=r.vvSymbolRotationMatrix||e(),o(r.vvSymbolRotationMatrix,nt)),r}function Z(t,o,e){if(!t.vvSize)return e;i(it,e);const s=t.vvSymbolRotationMatrix;return r(nt,s[0],s[1],s[2],0,s[3],s[4],s[5],0,s[6],s[7],s[8],0,0,0,0,1),n(it,it,nt),tt(rt,t,o),l(it,it,rt),a(it,it,t.vvSymbolAnchor),it}function tt(o,e,s){if(!e.vvSize)return m(o,1,1,1),o;if(Number.isNaN(s[0]))return z(o,e.vvSize.fallback);for(let i=0;i<3;++i){const r=e.vvSize.offset[i]+s[0]*e.vvSize.factor[i];o[i]=t(r,e.vvSize.minSize[i],e.vvSize.maxSize[i])}return o}function ot(t,o){return t?.source?st(o?.input):0}function et(t,o){if(!t?.source)return 0;for(let e=0;e<3;e++)if(null!=o?.input[e])return st(o.input[e]);return st(void 0)}function st(t){return"number"==typeof t&&isFinite(t)?t:NaN}const it=p(),rt=y(),nt=p();export{G as ConvertOptions,M as FastColorInfo,I as FastOpacityInfo,E as FastRotationInfo,j as FastSizeInfo,J as FastSymbolUpdatesState,N as FastVisualVariables,X as VisualVariablesParameters,H as convertVisualVariables,Z as evaluateModelTransform,tt as evaluateModelTransformScale,ot as getAttributeValue,Y as getMaterialParameters,et as getSizeAttributeValue,K as initFastSymbolUpdatesState,Q as updateFastSymbolUpdatesState};