@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 2.9 kB
JavaScript
import{isSome as t}from"../../../../../../core/maybe.js";import{pt2px as e}from"../../../../../../core/screenUtils.js";import{premultiplyAlphaRGBA as s}from"../../color.js";import{BITSET_GENERIC_LOCK_COLOR as i,BITSET_FILL_RANDOM_PATTERN_OFFSET as o,BITSET_GENERIC_CONSIDER_ALPHA_ONLY as r,BITSET_FILL_HAS_UNRESOLVED_REPLACEMENT_COLOR as a,SPRITE_PADDING as l,MIN_MAX_ZOOM_PRECISION_FACTOR as n}from"../../definitions.js";import{degToByte as c}from"../../GeometryUtils.js";import{i1616to32 as h,i8888to32 as f}from"../../number.js";import{FillMaterialKey as m}from"../../materialKey/MaterialKey.js";import{isFunction as p,getMinMaxZoom as _}from"./util.js";import y from"./WGLBaseFillTemplate.js";import d from"./WGLDynamicMeshTemplate.js";import{ok as u}from"../../util/Result.js";const M=128;class g extends(y(d)){constructor(l,f,m){if(super(l),this._minMaxZoom=h(Math.round(f*n),Math.round(m*n)),p(l.color)){const t=(t,e,i)=>{const o=l.color(t,e,i);return o&&s(o)||0};this._dynamicPropertyMap.set("fillColor",t)}else{const t=l.color;this.fillColor=t&&s(t)||0}const _="CIMMarkerPlacementInsidePolygon"===l.cim.placement?.type&&l.cim.placement.shiftOddRows?2:1,y=l.height;if(p(y)){const t=(t,e,s)=>y(t,e,s)*_;this._dynamicPropertyMap.set("_height",t)}else this._height=(y||0)*_;const d=l.offsetX;if(p(d)){const t=(t,s,i)=>e(d(t,s,i));this._dynamicPropertyMap.set("_offsetX",t)}else this._offsetX=e(d||0);const u=l.offsetY;if(p(u)){const t=(t,s,i)=>e(-u(t,s,i));this._dynamicPropertyMap.set("_offsetY",t)}else this._offsetY=e(-u||0);const M=l.scaleX;p(M)?this._dynamicPropertyMap.set("_scaleX",M):this._scaleX=M||1;const g=l.angle;if(p(g)){const t=(t,e,s)=>c(g(t,e,s));this._dynamicPropertyMap.set("_angle",t)}else this._angle=c(g)||0;if(t(l.effects)){const t=l.effects;p(t)?this._dynamicPropertyMap.set("_effects",t):this._effects=t}this._cimFillLayer=l,this._bitset=(l.colorLocked?i:0)|(l.applyRandomOffset?o:0)|(l.sampleAlphaOnly?r:0)|(l.hasUnresolvedReplacementColor?a:0),this._fillMaterialKey=l.materialKey}static fromCIMFill(t,e){const[s,i]=_(t.scaleInfo,e);return new g(t,s,i)}bindFeature(t,s,i){const o=t.readLegacyFeature();this._dynamicPropertyMap.forEach(((t,e)=>{this[e]=t(o,s,i)}));const r=m.load(this._fillMaterialKey),a=this._materialCache,n=(0,this._cimFillLayer.materialHash)(o,s,i),c=a.get(n);let p=null;if(c&&u(c.spriteMosaicItem)&&(p=c.spriteMosaicItem),p){const{rect:t,width:s,height:i}=p,o=t.x+l,a=t.y+l,n=o+s,c=a+i;let m=Math.round(e(this._height));m<=0&&(m=c-a);let _=Math.round(e(this._height/i*s||0));_<=0&&(_=n-o);const y=this._scaleX,d=1;this.tl=h(o,a),this.br=h(n,c),this.aux21=h(_,m),this.aux22=h(this._offsetX,this._offsetY),this.aux3=f(y*M,d*M,this._angle,0),r.sdf=p.sdf,r.pattern=!0,r.textureBinding=p.textureBinding}else this.tl=0,this.br=0,this.aux21=0,this.aux22=0,this.aux3=0,r.sdf=!1,r.pattern=!1,r.textureBinding=0;this._materialKey=r.data}}export{g as default};