@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 2.28 kB
JavaScript
import{WGLGeometryType as e,WGLSymbologyType as a}from"../../engine/webgl/enums.js";import{createMaterialKey as t,isOutlineFillSymbology as r,hydrateMaterialKey as n}from"../../engine/webgl/materialKey/MaterialKey.js";function l(e){if("line-marker"===e.type){return{type:"line-marker",color:e.color?.toJSON(),placement:e.placement,style:e.style}}return e.constructor.fromJSON(e.toJSON()).toJSON()}function s(e){return n(e)}function o(e,a,t=!1){if(!e)return null;switch(e.type){case"simple-fill":case"picture-fill":return c(e,a,t);case"simple-marker":case"picture-marker":return h(e,a,t);case"simple-line":return m(e,a,t);case"text":return y(e,a,t);case"label":return i(e,a,t);case"cim":return{type:"cim",rendererKey:a.vvFlags,data:e.data,maxVVSize:a.maxVVSize};case"CIMSymbolReference":return{type:"cim",rendererKey:a.vvFlags,data:e,maxVVSize:a.maxVVSize};case"web-style":return{...l(e),type:"web-style",hash:e.hash(),rendererKey:a.vvFlags,maxVVSize:a.maxVVSize};default:throw new Error(`symbol not supported ${e.type}`)}}function i(a,r,n){const l=a.toJSON(),o=t(e.LABEL,{...r,placement:l.labelPlacement});return{materialKey:n?s(o):o,hash:a.hash(),...l,labelPlacement:l.labelPlacement}}function c(a,n,o){const i=t(e.FILL,n),c=o?s(i):i,m=a.clone(),h=m.outline,y=r(n.symbologyType);y||(m.outline=null);const u={materialKey:c,hash:m.hash(),...l(m)};if(y)return u;const p=[];if(p.push(u),h){const a=t(e.LINE,{...n,isOutline:!0}),r={materialKey:o?s(a):a,hash:h.hash(),...l(h)};p.push(r)}return{type:"composite-symbol",layers:p,hash:p.reduce(((e,a)=>a.hash+e),"")}}function m(n,o,i){const c=r(o.symbologyType)?a.DEFAULT:o.symbologyType,m=t(e.LINE,{...o,symbologyType:c}),h=i?s(m):m,y=n.clone(),u=y.marker;y.marker=null;const p=[];if(p.push({materialKey:h,hash:y.hash(),...l(y)}),u){const a=t(e.MARKER,o),r=i?s(a):a;u.color=u.color??y.color,p.push({materialKey:r,hash:u.hash(),lineWidth:y.width,...l(u)})}return{type:"composite-symbol",layers:p,hash:p.reduce(((e,a)=>a.hash+e),"")}}function h(a,r,n){const o=t(e.MARKER,r),i=n?s(o):o,c=l(a);return{materialKey:i,hash:a.hash(),...c,angle:a.angle,maxVVSize:r.maxVVSize}}function y(a,r,n){const o=t(e.TEXT,r),i=n?s(o):o,c=l(a);return{materialKey:i,hash:a.hash(),...c,angle:a.angle,maxVVSize:r.maxVVSize}}export{o as createSymbolSchema};