UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 21.4 kB
import e from"../../Color.js";import{getFontFamily as t}from"../../core/fontUtils.js";import{clone as i}from"../../core/lang.js";import o from"../../core/Logger.js";import{isNone as r,isSome as n}from"../../core/maybe.js";import{pt2px as l,px2pt as a}from"../../core/screenUtils.js";import{numericHash as s}from"../../core/string.js";import{createRendererExpression as f,ArcadeExpression as c}from"../../support/arcadeOnDemand.js";import{CIMSymbolHelper as m,OverrideHelper as p}from"./CIMSymbolHelper.js";import{Alignment as u,CapType as y,JoinType as h}from"./enums.js";import{quantizeIfNeeded as g}from"./quantizeTime.js";import{getExtent as d,getSDFMetrics as S}from"./SDFHelper.js";import{fromCIMColor as v,getTintColor as N,getValue as b,fromCIMFontDecoration as O,fromCIMFontStyle as k,getFillColor as C,getStrokeColor as P,getStrokeWidth as M,adjustTextCase as L,createLabelOverrideFunction as I,evaluateValueOrFunction as w,fromCIMHorizontalAlignment as z,fromCIMVerticalAlignment as R}from"./utils.js";import{CIMEffectHelper as X}from"./effects/CIMEffectHelper.js";import A from"../../views/2d/arcade/callExpressionWithFeature.js";import{RANDOM_INSIDE_POLYGON_TEXTURE_SIZE as x}from"../../views/2d/engine/webgl/definitions.js";import{getMaterialGroup as J}from"../../views/2d/engine/webgl/grouping.js";const H=o.getLogger("esri.symbols.cim.cimAnalyzer");function Y(e){switch(e){case"Butt":return y.BUTT;case"Square":return y.SQUARE;default:return y.ROUND}}function T(e){switch(e){case"Bevel":return h.BEVEL;case"Miter":return h.MITER;default:return h.ROUND}}function $(e,t,i,o){let r;e[t]?r=e[t]:(r={},e[t]=r),r[i]=o}function E(e){const t=e.markerPlacement;return t&&t.angleToLine?u.MAP:u.SCREEN}async function j(e,t,i,o,n){const l=o??[];if(!e)return l;let a,s;const c={};if("CIMSymbolReference"!==e.type)return H.error("Expect cim type to be 'CIMSymbolReference'"),l;if(a=e.symbol,s=e.primitiveOverrides,s){const e=[];for(const i of s){const o=i.valueExpressionInfo;if(o&&t){const n=o.expression,l=f(n,t.spatialReference,t.fields).then((e=>{r(e)||$(c,i.primitiveName,i.propertyName,e)}));e.push(l)}else null!=i.value&&$(c,i.primitiveName,i.propertyName,i.value)}e.length>0&&await Promise.all(e)}const p=[];switch(m.fetchResources(a,i,p),p.length>0&&await Promise.all(p),a?.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":F(a,s,c,t,l,i,!!n)}return l}function F(e,t,i,o,r,n,l){if(!e)return;const a=e.symbolLayers;if(!a)return;const s=e.effects;let f=u.SCREEN;const c=m.getSize(e)??0;"CIMPointSymbol"===e.type&&"Map"===e.angleAlignment&&(f=u.MAP);let y=a.length;for(;y--;){const m=a[y];if(!m||!1===m.enable)continue;let u;s&&s.length&&(u=[...s]);const h=m.effects;h&&h.length&&(s?u.push(...h):u=[...h]);const g=[];let d;p.findEffectOverrides(u,t,g),d=g.length>0?se(u,g,i,o):u;const S=[];switch(p.findApplicableOverrides(m,t,S),m.type){case"CIMSolidFill":U(m,d,i,S,o,r);break;case"CIMPictureFill":D(m,d,i,S,o,n,r);break;case"CIMHatchFill":W(m,d,i,S,o,r);break;case"CIMGradientFill":G(m,d,i,S,o,r);break;case"CIMSolidStroke":B(m,d,i,S,o,r,"CIMPolygonSymbol"===e.type,c);break;case"CIMPictureStroke":V(m,d,i,S,o,r,"CIMPolygonSymbol"===e.type,c);break;case"CIMGradientStroke":q(m,d,i,S,o,r,"CIMPolygonSymbol"===e.type,c);break;case"CIMCharacterMarker":if(K(m,d,i,S,o,r))break;break;case"CIMPictureMarker":if(K(m,d,i,S,o,r))break;"CIMLineSymbol"===e.type&&(f=E(m)),Q(m,d,i,S,o,n,r,f,c);break;case"CIMVectorMarker":if(K(m,d,i,S,o,r))break;"CIMLineSymbol"===e.type&&(f=E(m)),_(m,d,i,S,o,r,n,f,c,l);break;default:H.error("Cannot analyze CIM layer",m.type)}}}function U(e,t,i,o,r,n){const l=e.primitiveName,a=v(e.color),[f,c]=ue(o,l,t,null,null),m=s(JSON.stringify(e)+c).toString();n.push({type:"fill",templateHash:m,materialHash:f?()=>m:m,cim:e,materialOverrides:null,colorLocked:!!e.colorLocked,color:le(l,i,"Color",r,a,ne),height:0,angle:0,offsetX:0,offsetY:0,scaleX:1,effects:t,applyRandomOffset:!1,sampleAlphaOnly:!0})}function D(e,t,i,o,r,l,a){const f=e.primitiveName,c=N(e),[m,p]=ue(o,f,t,null,null),u=s(JSON.stringify(e)+p).toString(),y=s(`${e.url}${JSON.stringify(e.colorSubstitutions)}`).toString();let h=b(e.scaleX);if("width"in e&&"number"==typeof e.width){const t=e.width;let i=1;const o=l.getResource(e.url);n(o)&&(i=o.width/o.height),h/=i*(e.height/t)}a.push({type:"fill",templateHash:u,materialHash:m?()=>y:y,cim:e,materialOverrides:null,colorLocked:!!e.colorLocked,effects:t,color:le(f,i,"TintColor",r,c,ne),height:le(f,i,"Height",r,e.height),scaleX:le(f,i,"ScaleX",r,h),angle:le(f,i,"Rotation",r,b(e.rotation)),offsetX:le(f,i,"OffsetX",r,b(e.offsetX)),offsetY:le(f,i,"OffsetY",r,b(e.offsetY)),url:e.url,applyRandomOffset:!1,sampleAlphaOnly:!1})}function W(e,t,i,o,r,n){const l=["Rotation","OffsetX","OffsetY"],a=o.filter((t=>t.primitiveName!==e.primitiveName||!l.includes(t.propertyName))),f=e.primitiveName;let[c,m]=ue(o,f,t,null,null);const p=s(JSON.stringify(e)+m).toString(),u=s(`${e.separation}${JSON.stringify(e.lineSymbol)}`).toString();let y={r:255,g:255,b:255,a:1},h=!1;const g=e.lineSymbol?.symbolLayers?.find((e=>"CIMSolidStroke"===e.type&&null!=i[e.primitiveName]?.Color));if(g){y=v(g.color),y=le(g.primitiveName,i,"Color",r,y,ne);const e="function"==typeof y;c=c||e,h=null!=g.color||e}n.push({type:"fill",templateHash:p,materialHash:c?me(u,i,a,r):u,cim:e,materialOverrides:a,colorLocked:!!e.colorLocked,effects:t,color:y,height:le(f,i,"Separation",r,e.separation),scaleX:1,angle:le(f,i,"Rotation",r,b(e.rotation)),offsetX:le(f,i,"OffsetX",r,b(e.offsetX)),offsetY:le(f,i,"OffsetY",r,b(e.offsetY)),applyRandomOffset:!1,sampleAlphaOnly:!0,hasUnresolvedReplacementColor:!h})}function G(e,t,i,o,r,n){const l=e.primitiveName,[a,f]=ue(o,l,t,null,null),c=s(JSON.stringify(e)+f).toString();n.push({type:"fill",templateHash:c,materialHash:a?me(c,i,o,r):c,cim:e,materialOverrides:null,colorLocked:!!e.colorLocked,effects:t,color:{r:128,g:128,b:128,a:1},height:0,angle:0,offsetX:0,offsetY:0,scaleX:1,applyRandomOffset:!1,sampleAlphaOnly:!1})}function B(e,t,i,o,r,n,l,a){const f=e.primitiveName,c=v(e.color),m=null!=e.width?e.width:4,p=Y(e.capStyle),u=T(e.joinStyle),y=e.miterLimit,[h,g]=ue(o,f,t,null,null),d=s(JSON.stringify(e)+g).toString();let S,N;if(t&&t instanceof Array&&t.length>0){const e=t[t.length-1];if("CIMGeometricEffectDashes"===e.type&&"NoConstraint"===e.lineDashEnding&&null===e.offsetAlongLine){const e=(t=[...t]).pop();S=e.dashTemplate,N=e.scaleDash}}n.push({type:"line",templateHash:d,materialHash:h?()=>d:d,cim:e,materialOverrides:null,isOutline:l,colorLocked:!!e.colorLocked,effects:t,color:le(f,i,"Color",r,c,ne),width:le(f,i,"Width",r,m),cap:le(f,i,"CapStyle",r,p),join:le(f,i,"JoinStyle",r,u),miterLimit:y&&le(f,i,"MiterLimit",r,y),referenceWidth:a,zOrder:re(e.name),dashTemplate:S,scaleDash:N,sampleAlphaOnly:!0})}function V(e,t,i,o,r,n,l,a){const f=s(`${e.url}${JSON.stringify(e.colorSubstitutions)}`).toString(),c=e.primitiveName,m=N(e),p=null!=e.width?e.width:4,u=Y(e.capStyle),y=T(e.joinStyle),h=e.miterLimit,[g,d]=ue(o,c,t,null,null),S=s(JSON.stringify(e)+d).toString();n.push({type:"line",templateHash:S,materialHash:g?()=>f:f,cim:e,materialOverrides:null,isOutline:l,colorLocked:!!e.colorLocked,effects:t,color:le(c,i,"TintColor",r,m,ne),width:le(c,i,"Width",r,p),cap:le(c,i,"CapStyle",r,u),join:le(c,i,"JoinStyle",r,y),miterLimit:h&&le(c,i,"MiterLimit",r,h),referenceWidth:a,zOrder:re(e.name),dashTemplate:null,scaleDash:!1,url:e.url,sampleAlphaOnly:!1})}function q(e,t,i,o,r,n,l,a){const f=e.primitiveName,c=null!=e.width?e.width:4,m=Y(e.capStyle),p=T(e.joinStyle),u=e.miterLimit,[y,h]=ue(o,f,t,null,null),g=s(JSON.stringify(e)+h).toString();n.push({type:"line",templateHash:g,materialHash:y?me(g,i,o,r):g,cim:e,materialOverrides:null,isOutline:l,colorLocked:!!e.colorLocked,effects:t,color:{r:128,g:128,b:128,a:1},width:le(f,i,"Width",r,c),cap:le(f,i,"CapStyle",r,m),join:le(f,i,"JoinStyle",r,p),miterLimit:u&&le(f,i,"MiterLimit",r,u),referenceWidth:a,zOrder:re(e.name),dashTemplate:null,scaleDash:!1,sampleAlphaOnly:!1})}function K(e,t,i,o,r,n){const{markerPlacement:l,type:f}=e;if(!l||"CIMMarkerPlacementInsidePolygon"!==l.type)return!1;if("CIMVectorMarker"===f||"CIMPictureMarker"===f){const i=e.primitiveName;if(i){const[e,r]=ue(o,i,t,null,null);if(e)return!1}const r=l.primitiveName;if(r){const[e,i]=ue(o,r,t,null,null);if(e)return!1}if("CIMVectorMarker"===f){const{markerGraphics:t}=e;if(t)for(const e of t){const{symbol:t}=e;if("CIMPolygonSymbol"===t?.type&&t.symbolLayers){const{symbolLayers:e}=t;for(const t of e)if("CIMSolidStroke"===t.type)return!1}}}else{const{animatedSymbolProperties:t}=e;if(t)return!1}}const c=l,m=Math.abs(c.stepX),p=Math.abs(c.stepY);if(0===m||0===p)return!0;const u=["Rotation","OffsetX","OffsetY"],y=o.filter((t=>t.primitiveName!==e.primitiveName||!u.includes(t.propertyName))),h="url"in e&&"string"==typeof e.url?e.url:void 0,[g,d]=ue(o,c.primitiveName,t,null,null),S=s(JSON.stringify(e)+d).toString();let v,O,k=null;if("Random"===l.gridType){const e=a(x),t=Math.max(Math.floor(e/m),1),i=Math.max(Math.floor(e/p),1);v=p*i,k=e=>e?e*i:0;O=t*m/v}else l.shiftOddRows?(v=2*p,k=e=>e?2*e:0,O=m/p*.5):(v=p,k=null,O=m/p);const C=N(e);return n.push({type:"fill",templateHash:S,materialHash:g?me(S,i,y,r):S,cim:e,materialOverrides:y,colorLocked:!!e.colorLocked,effects:t,color:le(c.primitiveName,i,"TintColor",r,C,ne),height:le(c.primitiveName,i,"StepY",r,v,k),scaleX:O,angle:le(c.primitiveName,i,"GridAngle",r,c.gridAngle),offsetX:le(c.primitiveName,i,"OffsetX",r,b(c.offsetX)),offsetY:le(c.primitiveName,i,"OffsetY",r,b(c.offsetY)),url:h,applyRandomOffset:"Random"===l.gridType,sampleAlphaOnly:!h,hasUnresolvedReplacementColor:!0}),!0}function Q(e,t,i,o,r,l,a,f,c){const m=e.primitiveName,p=b(e.size);let u=b(e.scaleX,1);const y=b(e.rotation),h=b(e.offsetX),g=b(e.offsetY),d=N(e),S=s(`${e.url}${JSON.stringify(e.colorSubstitutions)}${JSON.stringify(e.animatedSymbolProperties)}`).toString(),v=fe(e.markerPlacement,o,i,r),O=ce(e.animatedSymbolProperties,o,i,r),[k,C]=ue(o,m,t,v,O),P=s(JSON.stringify(e)+C).toString(),M=e.anchorPoint??{x:0,y:0};if("width"in e&&"number"==typeof e.width){const t=e.width;let i=1;const o=l.getResource(e.url);n(o)&&(i=o.width/o.height),u/=i*(p/t)}function L(e,t){return n(O)?w(O,e,t):null}const I=e.animatedSymbolProperties&&!0===e.animatedSymbolProperties.randomizeStartTime?(e,t,i,o)=>{const r=J(o??0),n=L(e,t);return S+`-MATERIALGROUP(${r})`+`-ASP(${JSON.stringify(n)})`}:k?(e,t)=>{const i=L(e,t);return S+`-ASP(${JSON.stringify(i)})`}:S;a.push({type:"marker",templateHash:P,materialHash:I,cim:e,materialOverrides:null,colorLocked:!!e.colorLocked,effects:t,scaleSymbolsProportionally:!1,alignment:f,size:le(m,i,"Size",r,p),scaleX:le(m,i,"ScaleX",r,u),rotation:le(m,i,"Rotation",r,y),offsetX:le(m,i,"OffsetX",r,h),offsetY:le(m,i,"OffsetY",r,g),color:le(m,i,"TintColor",r,d,ne),anchorPoint:{x:M.x,y:-M.y},isAbsoluteAnchorPoint:"Relative"!==e.anchorPointUnits,outlineColor:{r:0,g:0,b:0,a:0},outlineWidth:0,frameHeight:0,rotateClockwise:!!e.rotateClockwise,referenceSize:c,sizeRatio:1,markerPlacement:v,url:e.url,animatedSymbolProperties:O})}function _(e,t,i,o,r,n,l,a,s,f){const c=e.markerGraphics;if(!c)return;let m=0;if(e.scaleSymbolsProportionally){const t=e.frame;t&&(m=t.ymax-t.ymin)}const p=fe(e.markerPlacement,o,i,r);for(const u of c)if(u){const c=u.symbol;if(!c)continue;switch(c.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":ee(e,t,p,null,u,o,i,r,n,l,a,s,m,!!f);break;case"CIMTextSymbol":Z(e,t,p,u,i,o,r,n,a,s,m)}}}function Z(e,i,o,r,n,l,a,f,c,m,u){const y=[];p.findApplicableOverrides(r,l,y);const h=r.geometry;if(!("x"in h)||!("y"in h))return;const g=r.symbol,d=O(g),S=k(g.fontStyleName),N=t(g.fontFamilyName);g.font={family:N,decoration:d,...S};const X=e.frame,A=h.x-.5*(X.xmin+X.xmax),x=h.y-.5*(X.ymin+X.ymax),J=e.size/u,H=e.primitiveName,Y=b(g.height)*J,T=b(g.angle),$=b(e.offsetX)+(b(g.offsetX)+A)*J,E=b(e.offsetY)+(b(g.offsetY)+x)*J,j=v(C(g));let F=v(P(g)),U=M(g)??0;U||(F=v(C(g.haloSymbol)),g.haloSize&&(U=g.haloSize*J));let D=null,W=null,G=0;if(g.callout&&"CIMBackgroundCallout"===g.callout.type){const e=g.callout;if(e.backgroundSymbol){const t=e.backgroundSymbol.symbolLayers;if(t)for(const e of t)"CIMSolidFill"===e.type?D=v(e.color):"CIMSolidStroke"===e.type&&(W=v(e.color),G=b(e.width))}}const[B,V]=ue(l,H,i,o,null),q=JSON.stringify(e.effects)+Number(e.colorLocked).toString()+JSON.stringify(e.anchorPoint)+e.anchorPointUnits+JSON.stringify(e.markerPlacement)+e.size.toString(),K=s(JSON.stringify(r)+q+V).toString();let Q=le(r.primitiveName,n,"TextString",a,r.textString??"",L,g.textCase);if(null==Q)return;const{fontStyleName:_}=g,Z=N+(_?"-"+_.toLowerCase():"-regular"),ee=Z;"string"==typeof Q&&Q.includes("[")&&g.fieldMap&&(Q=I(g.fieldMap,Q,g.textCase)),f.push({type:"text",templateHash:K,materialHash:B||"function"==typeof Q||Q.match(/\[(.*?)\]/)?(e,t,i)=>ee+"-"+w(Q,e,t,i):ee+"-"+s(Q),cim:g,materialOverrides:null,colorLocked:!!e.colorLocked,effects:i,alignment:c,anchorPoint:{x:e.anchorPoint?e.anchorPoint.x:0,y:e.anchorPoint?e.anchorPoint.y:0},isAbsoluteAnchorPoint:"Relative"!==e.anchorPointUnits,fontName:Z,decoration:d,weight:le(H,n,"Weight",a,S.weight),style:le(H,n,"Size",a,S.style),size:le(H,n,"Size",a,Y),angle:le(H,n,"Rotation",a,T),offsetX:le(H,n,"OffsetX",a,$),offsetY:le(H,n,"OffsetY",a,E),horizontalAlignment:z(g.horizontalAlignment),verticalAlignment:R(g.verticalAlignment),text:Q,color:j,outlineColor:F,outlineSize:U,backgroundColor:D,borderLineColor:W,borderLineWidth:G,referenceSize:m,sizeRatio:1,markerPlacement:o})}function ee(e,t,i,o,r,l,a,f,c,m,p,u,y,h){const g=r.symbol,N=g.symbolLayers;if(!N)return;if(h)return void ie(e,t,i,o,r,a,l,f,c,m,p,u,y);let O=N.length;if(ye(N))return void te(e,t,i,o,r,N,l,a,f,c,p,u,y);const k=X.applyEffects(g.effects,r.geometry,m.geometryEngine);if(k)for(;O--;){const h=N[O];if(h&&!1!==h.enable)switch(h.type){case"CIMSolidFill":case"CIMSolidStroke":{const g=X.applyEffects(h.effects,k,m.geometryEngine),N=d(g);if(!N)continue;const O="Relative"!==e.anchorPointUnits,[L,I,w]=S(N,e.frame,e.size,e.anchorPoint,O),z="CIMSolidFill"===h.type,R={type:"sdf",geom:g,asFill:z},A=e.primitiveName,x=b(e.size)??10,J=b(e.rotation),H=b(e.offsetX),Y=b(e.offsetY),T=h.path,$=h.primitiveName,E=v(z?C(h):P(h)),j=z?{r:0,g:0,b:0,a:0}:v(P(h)),F=M(h)??0;if(!z&&!F)break;let U=!1,D="";for(const e of l)e.primitiveName!==$&&e.primitiveName!==A||(void 0!==e.value?D+=`-${e.primitiveName}-${e.propertyName}-${JSON.stringify(e.value)}`:e.valueExpressionInfo&&(U=!0));(n(t)&&"function"==typeof t||n(i)&&"function"==typeof i)&&(U=!0);const W=JSON.stringify({...e,markerGraphics:null}),G=s(JSON.stringify(R)+T).toString(),B={type:"marker",templateHash:s(JSON.stringify(r)+JSON.stringify(h)+W+D).toString(),materialHash:U?()=>G:G,cim:R,materialOverrides:null,colorLocked:!!e.colorLocked,effects:t,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:p,anchorPoint:{x:I,y:w},isAbsoluteAnchorPoint:O,size:le(e.primitiveName,a,"Size",f,x),rotation:le(e.primitiveName,a,"Rotation",f,J),offsetX:le(e.primitiveName,a,"OffsetX",f,H),offsetY:le(e.primitiveName,a,"OffsetY",f,Y),scaleX:1,frameHeight:y,rotateClockwise:!!e.rotateClockwise,referenceSize:u,sizeRatio:L,color:le($,a,"Color",f,E,ne),outlineColor:le($,a,"Color",f,j,ne),outlineWidth:le($,a,"Width",f,F),markerPlacement:i,animatedSymbolProperties:o,path:T};c.push(B);break}default:ie(e,t,i,o,r,a,l,f,c,m,p,u,y)}}}function te(e,t,i,o,r,l,a,f,c,m,p,u,y){const h=r.geometry,g=l[0],N=l[1],O=d(h);if(!O)return;const k="Relative"!==e.anchorPointUnits,[L,I,w]=S(O,e.frame,e.size,e.anchorPoint,k),z={type:"sdf",geom:h,asFill:!0},R=e.primitiveName,X=b(e.size),A=b(e.rotation),x=b(e.offsetX),J=b(e.offsetY),H=N.path,Y=N.primitiveName,T=g.primitiveName,$=v(C(N)),E=v(P(g)),j=M(g)??0;let F=!1,U="";for(const n of a)n.primitiveName!==Y&&n.primitiveName!==T&&n.primitiveName!==R||(void 0!==n.value?U+=`-${n.primitiveName}-${n.propertyName}-${JSON.stringify(n.value)}`:n.valueExpressionInfo&&(F=!0));n(i)&&"function"==typeof i&&(F=!0);const D=JSON.stringify({...e,markerGraphics:null}),W=s(JSON.stringify(z)+H).toString(),G={type:"marker",templateHash:s(JSON.stringify(r)+JSON.stringify(N)+JSON.stringify(g)+D+U).toString(),materialHash:F?()=>W:W,cim:z,materialOverrides:null,colorLocked:!!e.colorLocked,effects:t,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:p,anchorPoint:{x:I,y:w},isAbsoluteAnchorPoint:k,size:le(e.primitiveName,f,"Size",c,X),rotation:le(e.primitiveName,f,"Rotation",c,A),offsetX:le(e.primitiveName,f,"OffsetX",c,x),offsetY:le(e.primitiveName,f,"OffsetY",c,J),scaleX:1,frameHeight:y,rotateClockwise:!!e.rotateClockwise,referenceSize:u,sizeRatio:L,color:le(Y,f,"Color",c,$,ne),outlineColor:le(T,f,"Color",c,E,ne),outlineWidth:le(T,f,"Width",c,j),markerPlacement:i,path:H,animatedSymbolProperties:o};m.push(G)}function ie(e,t,i,o,r,a,f,c,p,u,y,h,g){const d=oe(e,r),S=["Rotation","OffsetX","OffsetY"],v=f.filter((t=>t.primitiveName!==e.primitiveName||!S.includes(t.propertyName)));let N="";for(const n of f)void 0!==n.value&&(N+=`-${n.primitiveName}-${n.propertyName}-${JSON.stringify(n.value)}`);const[O,k,C]=m.getTextureAnchor(d,u),P=e.primitiveName,M=b(e.rotation),L=b(e.offsetX),I=b(e.offsetY),w=s(JSON.stringify(d)+N).toString(),z={type:"marker",templateHash:w,materialHash:v.length>0||n(t)&&"function"==typeof t?me(w,a,v,c):w,cim:d,materialOverrides:v,colorLocked:!!e.colorLocked,effects:t,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:y,anchorPoint:{x:O,y:k},isAbsoluteAnchorPoint:!1,size:b(e.size),rotation:le(P,a,"Rotation",c,M),offsetX:le(P,a,"OffsetX",c,L),offsetY:le(P,a,"OffsetY",c,I),color:{r:255,g:255,b:255,a:1},outlineColor:{r:0,g:0,b:0,a:0},outlineWidth:0,scaleX:1,frameHeight:g,rotateClockwise:!!e.rotateClockwise,referenceSize:h,sizeRatio:C/l(e.size),markerPlacement:i,animatedSymbolProperties:o,avoidSDFRasterization:!0};p.push(z)}function oe(e,t){return{type:e.type,enable:!0,name:e.name,colorLocked:e.colorLocked,primitiveName:e.primitiveName,anchorPoint:e.anchorPoint,anchorPointUnits:e.anchorPointUnits,offsetX:0,offsetY:0,rotateClockwise:e.rotateClockwise,rotation:0,size:e.size,billboardMode3D:e.billboardMode3D,depth3D:e.depth3D,frame:e.frame,markerGraphics:[t],scaleSymbolsProportionally:e.scaleSymbolsProportionally,respectFrame:e.respectFrame,clippingPath:e.clippingPath}}function re(e){if(e&&0===e.indexOf("Level_")){const t=parseInt(e.substr(6),10);if(!isNaN(t))return t}return 0}function ne(t){if(!t||0===t.length)return null;const i=new e(t).toRgba();return{r:i[0],g:i[1],b:i[2],a:i[3]}}function le(e,t,i,o,r,n,l){if(null==e)return r;const a=t[e];if(a){const e=a[i];if("string"==typeof e||"number"==typeof e||e instanceof Array)return n?n.call(null,e,l):e;if(null!=e&&e instanceof c&&o?.geometryType)return(t,i,a)=>{let s=A(e,t,{$view:a},o.geometryType,i);return null!==s&&n&&(s=n.call(null,s,l)),null!==s?s:r}}return r}function ae(e){return e?e.charAt(0).toLowerCase()+e.substr(1):e}function se(e,t,o,r){for(const i of t){if(i.valueExpressionInfo&&r?.geometryType){const e=o[i.primitiveName]&&o[i.primitiveName][i.propertyName];e instanceof c&&(i.fn=(t,i,o)=>A(e,t,{$view:o},r.geometryType,i))}}return(o,r,n)=>{for(const e of t)e.fn&&(e.value=e.fn(o,r,n));const l=[];for(let a of e){const e=a?.primitiveName;if(e){let o=!1;for(const r of t)if(r.primitiveName===e){const e=ae(r.propertyName);null!=r.value&&r.value!==a[e]&&(o||(a=i(a),o=!0),a[e]=r.value)}}l.push(a)}return l}}function fe(e,t,o,r){const n=[];if(p.findApplicableOverrides(e,t,n),null==e||0===n.length)return e;for(const i of n){if(i.valueExpressionInfo&&r?.geometryType){const e=o[i.primitiveName]&&o[i.primitiveName][i.propertyName];e instanceof c&&(i.fn=(t,i,o)=>A(e,t,{$view:o},r.geometryType,i))}}return(t,o,r)=>{for(const e of n)e.fn&&(e.value=e.fn(t,o,r));const l=i(e),a=e.primitiveName;for(const e of n)if(e.primitiveName===a){const t=ae(e.propertyName);null!=e.value&&e.value!==l[t]&&(l[t]=e.value)}return l}}function ce(e,t,o,r){const n=[];if(p.findApplicableOverrides(e,t,n),null==e||0===n.length)return e;for(const i of n){if(i.valueExpressionInfo&&r?.geometryType){const e=o[i.primitiveName]&&o[i.primitiveName][i.propertyName];e instanceof c&&(i.fn=(t,i,o)=>A(e,t,{$view:o},r.geometryType,i))}}return(t,o,r)=>{for(const e of n)e.fn&&(e.value=e.fn(t,o,r));const l=i(e),a=e.primitiveName;for(const e of n)if(e.primitiveName===a){const t=ae(e.propertyName);if(null!=e.value){const i=g(e.value,e.propertyName);i!==l[t]&&(l[t]=i)}}return l}}function me(e,t,i,o){for(const r of i){if(r.valueExpressionInfo&&o?.geometryType){const e=t[r.primitiveName]&&t[r.primitiveName][r.propertyName];e instanceof c&&(r.fn=(t,i,r)=>A(e,t,{$view:r},o.geometryType,i))}}return(t,o,r)=>{for(const e of i)e.fn&&(e.value=e.fn(t,o,r));return s(e+p.buildOverrideKey(i)).toString()}}function pe(e,t){if(!t||0===t.length)return e;const o=i(e);return p.applyOverrides(o,t),o}function ue(e,t,i,o,r){let l=!1,a="";for(const n of e)n.primitiveName===t&&(void 0!==n.value?a+=`-${n.primitiveName}-${n.propertyName}-${JSON.stringify(n.value)}`:n.valueExpressionInfo&&(l=!0));return n(i)&&"function"==typeof i&&(l=!0),n(o)&&"function"==typeof o&&(l=!0),n(r)&&"function"==typeof r&&(l=!0),[l,a]}const ye=e=>e&&2===e.length&&e[0].enable&&e[1].enable&&"CIMSolidStroke"===e[0].type&&"CIMSolidFill"===e[1].type&&!e[0].effects&&!e[1].effects;export{pe as analyzeCIMResource,j as analyzeCIMSymbol};