UNPKG

@arcgis/core

Version:

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

6 lines (5 loc) 4.7 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.33/esri/copyright.txt for details. */ import e from"../../../Color.js";import{clone as o}from"../../../core/lang.js";import{px2pt as t}from"../../../core/screenUtils.js";import r from"../../../symbols/CIMSymbol.js";import{Simple3DLineStyle as i,LineJoinStyle as l,LineCapStyle as n}from"../../../symbols/cim/enums.js";const a="spike-height-override",s=t(8),c=t(20),f="triangle-solid-fill-open-outline";function u(e){const{field:o,normalizationField:t,sizeStops:r}=e,{value:i,size:l}=r[0],{value:n,size:s}=r[1];let c,f=0;o&&(f=`$feature["${o}"]`,c=`\n if(!HasValue($feature, "${o}")){\n return 0;\n }\n $feature["${o}"];\n `),t&&(f=`$feature["${o}"] / $feature["${t}"]`,c=`if(!HasValue($feature, "${o}") || !HasValue($feature, "${t}") || $feature["${t}"] <= 0){\n return 0;\n }\n $feature["${o}"];\n $feature["${t}"];`);return[{type:"CIMPrimitiveOverride",primitiveName:a,propertyName:"Length",valueExpressionInfo:{type:"CIMExpressionInfo",title:"Custom",expression:`\n ${c}\n var value = ${f};\n\n var maxSize = ${s};\n var minSize = ${l};\n\n var minDataValue = ${i};\n var maxDataValue = ${n};\n\n var ratio = Constrain(( value - minDataValue ) / ( maxDataValue - minDataValue ), 0, 1);\n\n var size = Constrain(maxSize * ratio, minSize, maxSize);\n return size;\n `,returnType:"Default"}}]}function m(e){const{primitiveOverrides:o,baseWidth:t,defaultHeight:i}=e,l=p(e);return new r({data:{type:"CIMSymbolReference",symbol:{type:"CIMPointSymbol",effects:[{type:"CIMGeometricEffectRadial",primitiveName:a,angle:90,length:i??c},{type:"CIMGeometricEffectTaperedPolygon",fromWidth:t??s,toWidth:1,length:5}],symbolLayers:l,haloSize:1,scaleX:1,angleAlignment:"Display"},primitiveOverrides:o}})}function p(e){const o=[d(e)],t=C(e);return t&&o.push(t),o}function d(e){const{strokeColor:o,strokeWidth:r,symbolStyle:a}=e,s=a?.includes("solid-fill")||a?.includes("gradient-fill");let c=o?.toArray(),f=!1;return a?.includes("outline")&&s?f=!0:c=e.color?.toArray(),{type:"CIMSolidStroke",effects:y(a),enable:!0,colorLocked:f,capStyle:n.Round,joinStyle:l.Round,lineStyle3D:i.Strip,miterLimit:4,width:r??t(1),color:c}}function y(e){if(!e?.includes("closed"))return[{type:"CIMGeometricEffectAddControlPoints",angleTolerance:90,primitiveName:"spike-control-points"},{type:"CIMGeometricEffectSuppress",suppress:!0,invert:!0,primitiveName:"spike-stroke-suppress"}]}function C(e){const{color:o,symbolStyle:t}=e,r=t?.includes("solid-fill"),i=t?.includes("gradient-fill");if(!r&&!i||!o)return;if(r)return{type:"CIMSolidFill",enable:!0,colorLocked:!1,color:o?.toArray()};const l=o.clone();return l.a=0,{type:"CIMGradientFill",enable:!0,angle:90,colorRamp:{type:"CIMMultipartColorRamp",colorRamps:[{type:"CIMLinearContinuousColorRamp",fromColor:o.toArray(),toColor:l.toArray()}],weights:[1]},gradientMethod:"Linear",gradientSize:70,gradientSizeUnits:"Relative",gradientType:"Continuous"}}function v(t,r){const{defaultHeight:i,baseWidth:l,color:n,strokeColor:s,primitiveOverrides:c,symbolStyle:f,strokeWidth:u}=r,m="CIMPointSymbol"===t.data.symbol?.type?t.data.symbol:null,p=m?.symbolLayers;if(!p)return t;const y=m.effects,v=y?.find((e=>"CIMGeometricEffectTaperedPolygon"===e.type)),$=y?.find((e=>"CIMGeometricEffectRadial"===e.type&&e.primitiveName===a));null!=l&&v&&(v.fromWidth=l),null!=i&&$&&($.length=i);const h=p?.find((e=>"CIMSolidStroke"===e.type)),M=p?.find((e=>"CIMSolidFill"===e.type)),g=p?.find((e=>"CIMGradientFill"===e.type)),I="CIMMultipartColorRamp"===g?.colorRamp?.type&&"CIMLinearContinuousColorRamp"===g.colorRamp.colorRamps[0]?.type?g.colorRamp.colorRamps[0]:null;if(f){const o=M?.color??I?.fromColor??h?.color,t=n??(o?new e(o):void 0),i=h?.color??o,l=s??(i?new e(i):void 0),a=f.includes("solid-fill"),c=f.includes("gradient-fill");if(a||c||S(p,M??g),t)if(a)S(p,g),M?M.color=t?.toArray():p.push(C({...r,color:t}));else if(c)if(S(p,M),g){if(I&&n){const e=t.clone();e.a=0,I.fromColor=t.toArray(),I.toColor=e.toArray()}}else p.push(C({...r,color:t}));if(h){const e=d({...r,strokeColor:l,color:t});h.effects=e.effects,h.color=e.color,h.width=e.width,h.colorLocked=e.colorLocked}}else if(h&&(s&&(h.color=s.toArray()),null!=u&&(h.width=u)),M&&n&&(M.color=n.toArray()),I&&n){const e=n.clone();e.a=0,I.fromColor=n.toArray(),I.toColor=e.toArray()}return void 0!==c&&(t.data.primitiveOverrides=o(c)),t}function S(e,o){if(!o)return;const t=e.indexOf(o);-1!==t&&e.splice(t,1)}export{u as createPrimitiveOverrides,m as createSpikeSymbol,f as defaultSpikeSymbolStyle,v as updateSpikeSymbol};