@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 5.45 kB
JavaScript
import{_ as e}from"../../../../chunks/tslib.es6.js";import t from"../../../../core/Accessor.js";import{someMap as r}from"../../../../core/MapUtils.js";import{isSome as o,unwrapOr as s}from"../../../../core/maybe.js";import{NullUID as d}from"../../../../core/uid.js";import{property as i}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/accessorSupport/ensureType.js";import"../../../../core/arrayUtils.js";import{subclass as c}from"../../../../core/accessorSupport/decorators/subclass.js";import{DirtyOperation as a,DirtyState as n}from"./ModelDirtyTypes.js";import{assert as m}from"./Util.js";class y{constructor(e,t,r){this.operation=e,this.geometry=t,this.states=r}}let h=class extends t{constructor(e){super(e),this._residentGeomRecords=new Map,this._dirtyGeomRecords=new Map,this.dirty=!1}commitLayer(e,t){const r=this._dirtyGeomRecords.get(e);r&&(r.forEach(((r,s)=>{const d=this._ensureGeomRecord(e,s);r.forEach((({geometry:e,operation:r,states:i},c)=>{let y=!1;if(r===a.UPDATE){const r=d.get(c);if(r){if(i&n.TRANSFORMATION){const t=this.model.getObject(s);this.model.updateRenderGeometryTransformation(t,e,r)&&(y=!0)}y||t.updates.push({renderGeometry:r,updateType:i})}else m(!1,"ModelDirtySet.getAddRemoveListFilteredByLayers: invalid update")}if(r===a.REMOVE||y){const e=d.get(c);e?(t.removes.push(e),d.delete(c)):r===a.REMOVE&&m(!1,"ModelDirtySet.getAddRemoveListFilteredByLayers: invalid remove")}if(r===a.ADD||y){const r=this.model.getObject(s);if(o(r)){const o=this.model.getRenderGeometry(r,e);t.adds.push(o),d.set(c,o)}}})),0===d.size&&this._residentGeomRecords.get(e).delete(s)})),0===this._residentGeomRecords.get(e).size&&this._residentGeomRecords.delete(e),this._dirtyGeomRecords.delete(e),this.dirty=this._hasDirtyGeometryRecords)}getResidentRenderGeometries(e,t){const r=this._residentGeomRecords.get(e);r&&r.forEach((e=>e.forEach((e=>t.push(e)))))}_objectStateChanged(e,t){for(const r of t.geometries)this._updateOrCreateDirtyRecord(t,r,null,a.UPDATE,e)}visibilityChanged(e){this._objectStateChanged(n.VISIBILITY,e)}highlightChanged(e){this._objectStateChanged(n.HIGHLIGHT,e)}occlusionChanged(e){this._objectStateChanged(n.OCCLUDEE,e)}objectGeometryUpdated(e){this._updateOrCreateDirtyRecord(e.object,e.geometry,null,a.UPDATE,n.GEOMETRY)}layerAdded(e){e.objects.forAll((t=>this._layerObjectAdded(e,t)))}layerRemoved(e){e.objects.forAll((t=>this._layerObjectRemoved(e,t)))}layerObjectAdded(e){this._layerObjectAdded(e.layer,e.object)}_layerObjectAdded(e,t){const r=e.id;for(const o of t.geometries)this._objectGeometryAdded(t,o,r)}layerObjectRemoved(e){this._layerObjectRemoved(e.layer,e.object)}layerObjectsAdded(e){for(const t of e.objects)this._layerObjectAdded(e.layer,t)}layerObjectsRemoved(e){for(const t of e.objects)this._layerObjectRemoved(e.layer,t)}_layerObjectRemoved(e,t){const r=e.id;for(const o of t.geometries)this._objectGeometryRemoved(t,o,r)}shaderTransformationChanged(e){const t=this._residentGeomRecords.get(e.id);t&&t.forEach(((e,t)=>{const r=this.model.getObject(t);r&&r.hasVolativeTransformation()&&e.forEach((e=>e.shaderTransformationChanged()))}))}objectTransformation(e){const t=this._getParentLayerId(e),r=e.id;this._ensureGeomRecord(t,r).forEach((r=>{this._updateOrCreateDirtyRecord(e,r.geometry,t,a.UPDATE,n.TRANSFORMATION)}))}objectGeometryAdded(e){this._objectGeometryAdded(e.object,e.geometry)}_objectGeometryAdded(e,t,r=null){this._updateOrCreateDirtyRecord(e,t,r,a.ADD)}objectGeometryRemoved(e){this._objectGeometryRemoved(e.object,e.geometry)}_objectGeometryRemoved(e,t,r=null){this._updateOrCreateDirtyRecord(e,t,r,a.REMOVE)}_updateOrCreateDirtyRecord(e,t,r,o,d=n.NONE){r=s(r,this._getParentLayerId(e));const i=e.id,c=t.id,h=this._ensureDirtyRecord(r,i),l=h.get(c);if(l){const e=l.operation;e===a.REMOVE&&o===a.ADD&&l.states!==n.NONE?l.operation=a.UPDATE:e===a.REMOVE&&o===a.ADD||e===a.ADD&&o===a.REMOVE?h.delete(c):e!==a.UPDATE||o!==a.REMOVE&&o!==a.UPDATE?(m((e===a.REMOVE||e===a.ADD)&&o===a.UPDATE,"ModelDirtySet.objectGeometryAdded: inconsistent state"),l.states|=d):(l.operation=o,l.states|=d)}else h.set(c,new y(o,t,d));this.dirty=this._hasDirtyGeometryRecords}_ensureGeomRecord(e,t){let r=this._residentGeomRecords.get(e);r||(r=new Map,this._residentGeomRecords.set(e,r));let o=r.get(t);return o||(o=new Map,r.set(t,o)),o}get _hasDirtyGeometryRecords(){return r(this._dirtyGeomRecords,(e=>r(e,(e=>e&&e.size>0))))}_ensureDirtyRecord(e,t){let r=this._dirtyGeomRecords.get(e);r||(r=new Map,this._dirtyGeomRecords.set(e,r));let o=r.get(t);return o||(o=new Map,r.set(t,o)),o}_getParentLayerId(e){return o(e.parentLayer)?e.parentLayer.id:d}formatDebugInfo(){const e=["ADD","UPD",void 0,"REM"];let t="";return this._dirtyGeomRecords.forEach(((r,o)=>{r.forEach(((r,s)=>{t.length>0&&(t+="\n"),t+=o+"."+s;const d=[];r.forEach((e=>{const t=e.operation;d[t]||(d[t]=[]),d[t].push(e.geometry.id)}));for(let o=0;o<d.length;o++)if(d[o]){t+=" "+e[o-1]+": ";for(let e=0;e<d[o].length;e++)t+=d[o][e]+", "}}))})),t}get test(){const e=this;return{get residentLayerCount(){return e._residentGeomRecords.size},get residentObjectCount(){return Array.from(e._residentGeomRecords.values()).reduce(((e,t)=>e+t.size),0)},commit:t=>e._dirtyGeomRecords.forEach(((r,o)=>e.commitLayer(o,t)))}}};e([i({constructOnly:!0})],h.prototype,"model",void 0),e([i()],h.prototype,"dirty",void 0),h=e([c("esri.views.3d.webgl-engine.lib.ModelDirtySet")],h);const l=h;export{l as default};