UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 2.85 kB
import e from"../../../../core/Evented.js";import t from"../../../../core/Handles.js";import{isSome as s,isNone as r,destroyMaybe as i}from"../../../../core/maybe.js";import o from"../../../../core/PooledArray.js";import{ContentObject as a}from"./ContentObject.js";import{ContentObjectType as d}from"./ContentObjectType.js";import{DirtyEventNames as h}from"./DirtyEvents.js";import c from"./Octree.js";import{UpdatePolicy as n}from"./UpdatePolicy.js";class l extends a{get objects(){return this._objects}constructor(s,r=""){super(),this.apiLayerUid=r,this.type=d.Layer,this.events=new e,this.sliceable=!1,this._objects=new o,this._objectsAdded=new o,this._stageHandles=new t,this.apiLayerUid=r,this.visible=s?.visible??!0,this.pickable=s?.pickable??!0,this.updatePolicy=s?.updatePolicy??n.ASYNC,this._disableOctree=s?.disableOctree??!1}destroy(){this.detachStage(),this._stage=null}attachStage(e){this.detachStage(),this._stage=e;for(const t of h)this._stageHandles.add(this.events.on(t,(s=>e.handleEvent(t,s))))}detachStage(){this._stageHandles.removeAll(),this.invalidateSpatialQueryAccelerator()}add(e){this._objects.push(e),e.parentLayer=this,this.events.emit("layerObjectAdded",{layer:this,object:e}),s(this._octree)&&this._objectsAdded.push(e)}remove(e){this._objects.removeUnordered(e)&&(e.parentLayer=null,this.events.emit("layerObjectRemoved",{layer:this,object:e}),s(this._octree)&&(this._objectsAdded.removeUnordered(e)||this._octree.remove([e])))}addMany(e){this._objects.pushArray(e);for(const t of e)t.parentLayer=this;this.events.emit("layerObjectsAdded",{layer:this,objects:e}),s(this._octree)&&this._objectsAdded.pushArray(e)}removeMany(e){const t=new Array;if(this._objects.removeUnorderedMany(e,e.length,t),0!==t.length){for(const e of t)e.parentLayer=null;if(this.events.emit("layerObjectsRemoved",{layer:this,objects:t}),s(this._octree)){for(let e=0;e<t.length;)this._objectsAdded.removeUnordered(t[e])?(t[e]=t[t.length-1],t.length-=1):++e;this._octree.remove(t)}}}sync(){s(this._stage)&&this.updatePolicy!==n.SYNC&&this._stage.syncLayer(this.id)}notifyObjectBBChanged(e,t){s(this._octree)&&!this._objectsAdded.includes(e)&&this._octree.update(e,t)}getSpatialQueryAccelerator(){return r(this._octree)&&this._objects.length>50&&!this._disableOctree?(this._octree=new c((e=>e.boundingVolumeWorldSpace.bounds)),this._octree.add(this._objects.data,this._objects.length)):s(this._octree)&&this._objectsAdded.length>0&&(this._octree.add(this._objectsAdded.data,this._objectsAdded.length),this._objectsAdded.clear()),this._octree}shaderTransformationChanged(){this.invalidateSpatialQueryAccelerator(),this.events.emit("shaderTransformationChanged",this)}invalidateSpatialQueryAccelerator(){this._octree=i(this._octree),this._objectsAdded.clear()}}function _(e){return s(e)&&e.type===d.Layer}export{l as WebGLLayer,_ as isWebGLLayer};