UNPKG

@arcgis/core

Version:

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

6 lines (5 loc) 6.62 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{toCIMSymbolJSON as t,isCIMMarker as o,isCIMStroke as r,isCIMFill as s,isCIMMarkerStrokePlacement as n,normalizeAlpha as a}from"../cim/utils.js";function i(e){const n=t(e);if("CIMTextSymbol"===n?.type)return n.height??0;let a=0;if(n?.symbolLayers)for(const t of n.symbolLayers)o(t)&&null!=t.size&&t.size>a?a=t.size:r(t)&&null!=t.width&&t.width>a?a=t.width:s(t);return a}function c(e,o,r){if(!e)return;const s=t(e),n=i(e);if(0===n)return void f(s,o);l(s,o/n,!1,r)}function f(e,t){if(e)if("CIMTextSymbol"!==e.type){if(e.symbolLayers)for(const o of e.symbolLayers)switch(o.type){case"CIMPictureMarker":case"CIMVectorMarker":o.size=t;break;case"CIMPictureStroke":case"CIMSolidStroke":case"CIMGradientStroke":o.width=t}}else e.height=t}function l(e,t,o,r){if(e)if("CIMTextSymbol"!==e.type){if(o&&e.effects)for(const o of e.effects)y(o,t);if(e.symbolLayers)for(const o of e.symbolLayers){switch(o.type){case"CIMPictureMarker":case"CIMVectorMarker":m(o,t,r);break;case"CIMPictureStroke":case"CIMSolidStroke":case"CIMGradientStroke":!r?.preserveOutlineWidth&&o.width&&(o.width*=t);break;case"CIMPictureFill":o.height&&(o.height*=t),o.offsetX&&(o.offsetX*=t),o.offsetY&&(o.offsetY*=t);break;case"CIMHatchFill":l(o.lineSymbol,t,!0,{...r,preserveOutlineWidth:!1}),o.offsetX&&(o.offsetX*=t),o.offsetY&&(o.offsetY*=t),o.separation&&(o.separation*=t)}if(o.effects)for(const e of o.effects)y(e,t)}}else null!=e.height&&(e.height*=t)}function m(e,t,o){if(e&&(e.markerPlacement&&M(e.markerPlacement,t),e.offsetX&&(e.offsetX*=t),e.offsetY&&(e.offsetY*=t),e.anchorPoint&&"Absolute"===e.anchorPointUnits&&(e.anchorPoint={x:e.anchorPoint.x*t,y:e.anchorPoint.y*t}),e.size=null!=e.size?e.size*t:0,"CIMVectorMarker"===e.type&&e.markerGraphics))for(const r of e.markerGraphics)e.scaleSymbolsProportionally||l(r.symbol,t,!0,o)}function M(e,t){switch(n(e)&&e.offset&&(e.offset*=t),e.type){case"CIMMarkerPlacementAlongLineRandomSize":case"CIMMarkerPlacementAlongLineSameSize":if(e.customEndingOffset&&(e.customEndingOffset*=t),e.offsetAlongLine&&(e.offsetAlongLine*=t),e.placementTemplate&&e.placementTemplate.length){const o=e.placementTemplate.map((e=>e*t));e.placementTemplate=o}break;case"CIMMarkerPlacementAlongLineVariableSize":if(e.maxRandomOffset&&(e.maxRandomOffset*=t),e.placementTemplate&&e.placementTemplate.length){const o=e.placementTemplate.map((e=>e*t));e.placementTemplate=o}break;case"CIMMarkerPlacementOnLine":e.startPointOffset&&(e.startPointOffset*=t);break;case"CIMMarkerPlacementAtExtremities":e.offsetAlongLine&&(e.offsetAlongLine*=t);break;case"CIMMarkerPlacementAtMeasuredUnits":case"CIMMarkerPlacementOnVertices":break;case"CIMMarkerPlacementAtRatioPositions":e.beginPosition&&(e.beginPosition*=t),e.endPosition&&(e.endPosition*=t);break;case"CIMMarkerPlacementPolygonCenter":e.offsetX&&(e.offsetX*=t),e.offsetY&&(e.offsetY*=t);break;case"CIMMarkerPlacementInsidePolygon":e.offsetX&&(e.offsetX*=t),e.offsetY&&(e.offsetY*=t),e.stepX&&(e.stepX*=t),e.stepY&&(e.stepY*=t)}}function y(e,t){switch(e.type){case"CIMGeometricEffectArrow":case"CIMGeometricEffectDonut":e.width&&(e.width*=t);break;case"CIMGeometricEffectBuffer":e.size&&(e.size*=t);break;case"CIMGeometricEffectCut":e.beginCut&&(e.beginCut*=t),e.endCut&&(e.endCut*=t),e.middleCut&&(e.middleCut*=t);break;case"CIMGeometricEffectDashes":if(e.customEndingOffset&&(e.customEndingOffset*=t),e.offsetAlongLine&&(e.offsetAlongLine*=t),e.dashTemplate&&e.dashTemplate.length){const o=e.dashTemplate.map((e=>e*t));e.dashTemplate=o}break;case"CIMGeometricEffectExtension":case"CIMGeometricEffectJog":case"CIMGeometricEffectRadial":e.length&&(e.length*=t);break;case"CIMGeometricEffectMove":e.offsetX&&(e.offsetX*=t),e.offsetY&&(e.offsetY*=t);break;case"CIMGeometricEffectOffset":case"CIMGeometricEffectOffsetTangent":e.offset&&(e.offset*=t);break;case"CIMGeometricEffectRegularPolygon":e.radius&&(e.radius*=t);break;case"CIMGeometricEffectTaperedPolygon":e.fromWidth&&(e.fromWidth*=t),e.length&&(e.length*=t),e.toWidth&&(e.toWidth*=t);break;case"CIMGeometricEffectWave":e.amplitude&&(e.amplitude*=t),e.period&&(e.period*=t)}}function C(o){const r=[];return u(t(o),r),r.length?new e(a(r[0])):null}function u(e,t){if(!e)return;let s;s="CIMTextSymbol"===e.type?e.symbol:e;const a="CIMPolygonSymbol"===e.type;if(s?.symbolLayers)for(const i of s.symbolLayers)if(!(i.colorLocked||a&&(r(i)||o(i)&&i.markerPlacement&&n(i.markerPlacement))))switch(i.type){case"CIMPictureMarker":case"CIMPictureStroke":case"CIMPictureFill":i.tintColor&&b(t,i.tintColor);break;case"CIMVectorMarker":i.markerGraphics?.forEach((e=>{u(e.symbol,t)}));break;case"CIMSolidStroke":case"CIMSolidFill":b(t,i.color);break;case"CIMHatchFill":u(i.lineSymbol,t)}}function b(e,t){for(const o of e)if(o.join(".")===t.join("."))return;e.push(t)}function I(o,r,s){r instanceof e||(r=new e(r));const n=t(o);n&&k(n,r,s)}function k(e,t,a){if(!e)return;let i;i="CIMTextSymbol"===e.type?e.symbol:e;const c="CIMPolygonSymbol"===i?.type;if(i?.symbolLayers)for(const f of i.symbolLayers){if(f.colorLocked)continue;if(c)if(a){const{layersToColor:e}=a;if((r(f)||o(f)&&f.markerPlacement&&n(f.markerPlacement))&&"fill"===e||s(f)&&"outline"===e)continue}else if(r(f)||o(f)&&f.markerPlacement&&n(f.markerPlacement))continue;const e=t.toArray();switch(f.type){case"CIMPictureMarker":case"CIMPictureStroke":case"CIMPictureFill":f.tintColor=e;break;case"CIMVectorMarker":f.markerGraphics?.forEach((e=>{k(e.symbol,t,a)}));break;case"CIMSolidStroke":case"CIMSolidFill":f.color=e;break;case"CIMHatchFill":k(f.lineSymbol,t,a)}}}function p(e,o=!1){const r=t(e);if("CIMTextSymbol"===r?.type||"CIMPointSymbol"===r?.type){const e=r.angle;return null!=e&&o?360-e:e??0}return 0}function h(e,r,s=!1){const n=t(e);if(s&&(r=360-r),"CIMTextSymbol"!==n?.type){if("CIMPointSymbol"===n?.type&&n.symbolLayers){const e=r-(n.angle||0);for(const t of n.symbolLayers)if(o(t)){let o=t.rotation||0;t.rotateClockwise?o-=e:o+=e,t.rotation=o}n.angle=r}}else n.angle=r}function d(e){const o=t(e);if(!o)return null;switch(o.type){case"CIMPointSymbol":return"CIMPointSymbol";case"CIMLineSymbol":return"CIMLineSymbol";case"CIMPolygonSymbol":return"CIMPolygonSymbol";case"CIMTextSymbol":return"CIMTextSymbol";case"CIMMeshSymbol":return"CIMMeshSymbol";default:return null}}export{I as applyCIMSymbolColor,h as applyCIMSymbolRotation,C as getCIMSymbolColor,p as getCIMSymbolRotation,i as getCIMSymbolSize,d as getCIMSymbolType,m as scaleCIMMarker,l as scaleCIMSymbol,c as scaleCIMSymbolTo};