@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 2.66 kB
JavaScript
import t from"./MeshData.js";import{strideToPackingFactor as e}from"./Utils.js";class s{constructor(t,e,s,i=0,r=0){this.id=t,this.geometryType=e,this.materialKey=s,this.minZoom=i,this.maxZoom=r,this.meshData=null,this.symbolLevel=0,this.zOrder=0,this.vertexFrom=0,this.vertexCount=0,this.indexFrom=0,this.indexCount=0,this._sortKey=null}get sortKey(){return null==this._sortKey&&this._computeSortKey(),this._sortKey}clone(){return this.copy()}copy(){const t=new s(this.id,this.geometryType,this.materialKey);return t.vertexFrom=this.vertexFrom,t.vertexCount=this.vertexCount,t.indexFrom=this.indexFrom,t.indexCount=this.indexCount,t.zOrder=this.zOrder,t.symbolLevel=this.symbolLevel,t.meshData=this.meshData,t.minZoom=this.minZoom,t.maxZoom=this.maxZoom,t}setMeshDataFromBuffers(s,i,r){const o=new t;for(const t in i){const r=i[t].stride,a=i[t].data;if(!a)continue;const h=[],n=e(r);for(let t=0;t<r*s.vertexCount/n;++t)h[t]=a[t+r*s.vertexFrom/n];o.vertexData.set(t,h)}o.indexData.length=0;for(let t=0;t<s.indexCount;++t)o.indexData[t]=r[t+s.indexFrom]-s.vertexFrom;o.vertexCount=s.vertexCount,this.meshData=o}readMeshDataFromBuffers(s,i){this.meshData?this.meshData.clear():this.meshData=new t;for(const t in s){const i=s[t].stride,r=s[t].data,o=[],a=e(i);for(let t=0;t<i*this.vertexCount/a;++t)o[t]=r[t+i*this.vertexFrom/a];this.meshData.vertexData.set(t,o)}this.meshData.indexData.length=0;for(let t=0;t<this.indexCount;++t)this.meshData.indexData[t]=i[t+this.indexFrom]-this.vertexFrom;this.meshData.vertexCount=this.vertexCount}writeMeshDataToBuffers(t,s,i,r){if(this.meshData){for(const i in s){const r=s[i].stride,o=this.meshData.vertexData.get(i),a=s[i].data,h=e(r);for(let e=0;e<r*this.meshData.vertexCount/h;++e)a[e+r*t/h]=o[e]}for(let e=0;e<this.meshData.indexData.length;++e)r[e+i]=this.meshData.indexData[e]+t;this.vertexFrom=t,this.vertexCount=this.meshData.vertexCount,this.indexFrom=i,this.indexCount=this.meshData.indexData.length}}static writeAllMeshDataToBuffers(t,e,s){let i=0,r=0;for(const o of t)o.writeMeshDataToBuffers(i,e,r,s),i+=o.vertexCount,r+=o.indexCount}_computeSortKey(){this._sortKey=(31&this.symbolLevel)<<12|(127&this.zOrder)<<4|7&this.geometryType}serialize(t){return t.push(this.geometryType),t.push(this.materialKey),t.push(this.vertexFrom),t.push(this.vertexCount),t.push(this.indexFrom),t.push(this.indexCount),t.push(this.minZoom),t.push(this.maxZoom),t}static deserialize(t,e){const i=t.readInt32(),r=t.readInt32(),o=new s(e.id,i,r);return o.vertexFrom=t.readInt32(),o.vertexCount=t.readInt32(),o.indexFrom=t.readInt32(),o.indexCount=t.readInt32(),o.minZoom=t.readInt32(),o.maxZoom=t.readInt32(),o}}export{s as default};