UNPKG

@arcgis/core

Version:

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

6 lines (5 loc) 4.75 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.32/esri/copyright.txt for details. */ import e from"../../Color.js";import{forEach as t}from"../../core/asyncUtils.js";import"../../core/has.js";import{px2pt as o}from"../../core/screenUtils.js";import{ONES as r}from"../../core/libs/gl-matrix-2/factories/vec3f64.js";import{effectFunctionsFromJSON as n}from"../../layers/effects/jsonUtils.js";import{getCIMSymbolColor as l}from"./cimSymbolUtils.js";import{getStroke as i}from"./gfxUtils.js";import{Symbol3DMaterial as c}from"./Symbol3DMaterial.js";import{isSymbol3D as s,isSymbol2D as u}from"./typeUtils.js";const a=new e("white");function f(e){const t=e.symbolLayers?.at(-1);if(t&&"outline"in t)return t?.outline?.size}function m(e){if(!e)return 0;if(s(e)){const t=f(e);return null!=t?t:0}return o(i(e)?.width)}function y(e){if(null==e||!("symbolLayers"in e)||null==e.symbolLayers)return!1;switch(e.type){case"point-3d":return e.symbolLayers.some((e=>"object"===e.type));case"line-3d":return e.symbolLayers.some((e=>"path"===e.type));case"polygon-3d":return e.symbolLayers.some((e=>"object"===e.type||"extrude"===e.type));default:return!1}}function p(e){return e.resource?.href??""}function h(t,o){if(!t)return null;let r=null;return s(t)?r=b(t):u(t)&&(r="cim"===t.type?l(t):t.color?new e(t.color):null),r?w(r,o):null}function b(t){const o=t.symbolLayers;if(!o)return null;let r=null;return o.forEach((e=>{"object"===e.type&&e.resource?.href||(r="water"===e.type?e.color:e.material?e.material.color:null)})),r?new e(r):null}function w(t,o){if(null==o||null==t)return t;const r=t.toRgba();return r[3]=r[3]*o,new e(r)}function d(e,t,o){const r=e.symbolLayers;if(!r)return;const n=e=>w(t=t??e??(null!=o?a:null),o);r.forEach((e=>{if("object"!==e.type||!e.resource?.href||t)if("water"===e.type)e.color=n(e.color);else{const t=null!=e.material?e.material.color:null,r=n(t);null==e.material?e.material=new c({color:r}):e.material.color=r,null!=o&&"outline"in e&&null!=e.outline?.color&&(e.outline.color=w(e.outline.color,o))}}))}function j(e,t,o){(t=t??e.color)&&(e.color=w(t,o)),null!=o&&"outline"in e&&e.outline?.color&&(e.outline.color=w(e.outline.color,o))}function g(t,o,r){t&&(o||null!=r)&&(o&&(o=new e(o)),s(t)?d(t,o,r):u(t)&&j(t,o,r))}async function k(e,o){const r=e.symbolLayers;r&&await t(r,(async e=>L(e,o)))}async function L(e,t){switch(e.type){case"extrude":S(e,t);break;case"icon":case"line":case"text":z(e,t);break;case"path":v(e,t);break;case"object":await U(e,t)}}function z(e,t){const o=x(t);null!=o&&(e.size=o)}function x(e){for(const t of e)if("number"==typeof t)return t;return null}function S(e,t){e.size="number"==typeof t[2]?t[2]:0}async function U(e,t){const{resourceSize:o,symbolSize:r}=await O(e),n=E(t,o,r);e.width=R(t[0],r[0],o[0],n),e.depth=R(t[1],r[1],o[1],n),e.height=R(t[2],r[2],o[2],n)}function v(e,t){const o=E(t,r,[e.width,void 0,e.height]);e.width=R(t[0],e.width,1,o),e.height=R(t[2],e.height,1,o)}function E(e,t,o){for(let r=0;r<3;r++){const n=e[r];switch(n){case"symbol-value":{const e=o[r];return null!=e?e/t[r]:1}case"proportional":break;default:if(n&&t[r])return n/t[r]}}return 1}async function O(e){const{computeObjectLayerResourceSize:t}=await import("./symbolLayerUtils.js"),o=await t(e,10),{width:r,height:n,depth:l}=e,i=[r,l,n];let c=1;for(let s=0;s<3;s++){const e=i[s];if(null!=e){c=e/o[s];break}}for(let s=0;s<3;s++)null==i[s]&&(i[s]=o[s]*c);return{resourceSize:o,symbolSize:i}}function R(e,t,o,r){switch(e){case"proportional":return o*r;case"symbol-value":return null!=t?t:o;default:return e}}function C(e,t){const o=x(t);if(null!=o)switch(e.type){case"simple-marker":e.size=o;break;case"picture-marker":{const t=e.width/e.height;t>1?(e.width=o,e.height=o*t):(e.width=o*t,e.height=o);break}case"simple-line":e.width=o;break;case"text":e.font.size=o}}async function D(e,t){if(e&&t)return s(e)?k(e,t):void(u(e)&&C(e,t))}function J(e,t,o){if(e&&null!=t)if(s(e)){const r=e.symbolLayers;r&&r.forEach((e=>{if("object"===e.type)switch(o){case"tilt":e.tilt=(e.tilt??0)+t;break;case"roll":e.roll=(e.roll??0)+t;break;default:e.heading=(e.heading??0)+t}"icon"===e.type&&(e.angle+=t)}))}else u(e)&&("simple-marker"!==e.type&&"picture-marker"!==e.type&&"text"!==e.type||(e.angle+=t))}function M(e){if(!e)return null;const t=e.effects.filter((e=>"bloom"!==e.type)).map((e=>e.toJSON()));return n(t)}function N(e){return null!=e&&"polygon-3d"===e.type&&e.symbolLayers.some((e=>"extrude"===e.type))}export{g as applyColorToSymbol,w as applyOpacityToColor,J as applyRotationToSymbol,D as applySizesToSymbol,M as getCSSFilterFromEffectList,h as getColorFromSymbol,p as getIconHref,m as getSymbolOutlineSize,y as isVolumetricSymbol,N as symbolHasExtrudeSymbolLayer};