UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 4.09 kB
import{MaterialKeyBase as e}from"./materialKey/MaterialKey.js";function t(e,t,n,...o){t<e.length?e.splice(t,n,...o):e.push(...o)}class n{constructor(){this.symbolLevels=[]}replay(t,n,o){for(const i of this.symbolLevels)for(const r of i.zLevels){const i=r.geometryDPInfo.unified;if(i)for(const r of i){const{geometryType:i,materialKey:l,indexFrom:s,indexCount:m}=r,y=e.load(l).symbologyType,d=t.painter.getBrush(i,y),u={geometryType:i,materialKey:l,indexFrom:s,indexCount:m,target:n.getGeometry(i)};d.prepareState(t),d.drawGeometry(t,n,u,o)}}}get empty(){return!this.symbolLevels||0===this.symbolLevels.length}clear(){this.symbolLevels.length=0}addToList(e,t){if(Array.isArray(e))for(const n of e)this._addToList(n,t);else this._addToList(e,t)}removeFromList(e){Array.isArray(e)||(e=[e]);let t=null;for(const n of e)t=this._removeFromList(n);return t}clone(){const e=new n;for(const t of this.symbolLevels)e.symbolLevels.push(t.clone());return e}splitAfter(e){const t=this._getDisplayList(e.symbolLevel,e.zOrder),n=t.length,i=e.indexFrom+e.indexCount;for(let r=0;r<n;++r){const n=t[r];if(n.geometryType===e.geometryType&&i>n.indexFrom&&i<=n.indexFrom+n.indexCount){if(i<n.indexFrom+n.indexCount){const e=new o;e.geometryType=n.geometryType,e.materialKey=n.materialKey,e.indexFrom=i,e.indexCount=n.indexFrom+n.indexCount-i,t.splice(r+1,0,e),n.indexCount=i-n.indexFrom}return r}}}_addToList(e,n){const i=e.symbolLevel,r=e.zOrder,l=this._getDisplayList(i,r),s=null!=n?n:l.length-1,m=s>=0&&s<l.length?l[s]:null;if(null!==m&&m.materialKey===e.materialKey&&m.indexFrom+m.indexCount===e.indexFrom&&m.geometryType===e.geometryType)m.indexCount+=e.indexCount;else{const n=new o;n.indexFrom=e.indexFrom,n.indexCount=e.indexCount,n.materialKey=e.materialKey,n.geometryType=e.geometryType,t(l,s+1,0,n)}}_removeFromList(e){const n=e.symbolLevel,i=e.zOrder,r=this._getDisplayList(n,i),l=r.length;let s;for(let t=0;t<l;++t){const n=r[t];if(e.indexFrom+e.indexCount>n.indexFrom&&e.indexFrom<n.indexFrom+n.indexCount&&n.geometryType===e.geometryType){s=t;break}}if(void 0!==s){const n=r[s];if(e.indexFrom===n.indexFrom)return n.indexCount-=e.indexCount,n.indexFrom+=e.indexCount,0===n.indexCount&&t(r,s,1),s-1;if(e.indexFrom+e.indexCount===n.indexFrom+n.indexCount)return n.indexCount-=e.indexCount,0===n.indexCount?(t(r,s,1),s-1):s;{const i=n.indexFrom,l=e.indexFrom-n.indexFrom,m=e.indexCount,y=n.indexFrom+n.indexCount-(e.indexFrom+e.indexCount);n.indexCount=l;const d=new o;return d.geometryType=n.geometryType,d.materialKey=n.materialKey,d.indexFrom=i+l+m,d.indexCount=y,t(r,s+1,0,d),s}}return null}_getDisplayList(e,t){let n;const o=this.symbolLevels.length;for(let i=0;i<o;i++)if(this.symbolLevels[i].symbolLevel===e){n=this.symbolLevels[i];break}let s;n||(n=new l,n.symbolLevel=e,this.symbolLevels.push(n));const m=n.zLevels.length;for(let i=0;i<m;i++)if(n.zLevels[i].zLevel===t){s=n.zLevels[i];break}return s||(s=new r,s.geometryDPInfo=new i,s.zLevel=t,n.zLevels.push(s)),s.geometryDPInfo.unified||(s.geometryDPInfo.unified=[]),s.geometryDPInfo.unified}getDPInfoType(){return"unified"}}class o{constructor(){this.materialKey=null,this.indexFrom=0,this.indexCount=0}clone(){const e=new o;return e.geometryType=this.geometryType,e.materialKey=this.materialKey,e.indexFrom=this.indexFrom,e.indexCount=this.indexCount,e}}class i{constructor(){this.fill=null,this.line=null,this.marker=null,this.text=null,this.label=null,this.unified=null}clone(){const e=new i;return e.fill=this.fill&&this.fill.map((e=>e.clone())),e.line=this.line&&this.line.map((e=>e.clone())),e.marker=this.marker&&this.marker.map((e=>e.clone())),e.text=this.text&&this.text.map((e=>e.clone())),e.label=this.label&&this.label.map((e=>e.clone())),e.unified=this.unified&&this.unified.map((e=>e.clone())),e}}class r{constructor(){this.geometryDPInfo=new i}clone(){const e=new r;return e.zLevel=this.zLevel,e.geometryDPInfo=this.geometryDPInfo.clone(),e}}class l{constructor(){this.zLevels=[]}clone(){const e=new l;e.symbolLevel=this.symbolLevel;for(const t of this.zLevels)e.zLevels.push(t.clone());return e}}export{n as default};