UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

6 lines (5 loc) 7 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.32/esri/copyright.txt for details. */ import{_ as e}from"../../../chunks/tslib.es6.js";import t from"../../../core/Accessor.js";import{filterInPlace as r}from"../../../core/arrayUtils.js";import"../../../core/has.js";import{equalsShallow as o}from"../../../core/lang.js";import{floatEqualUlp as i}from"../../../core/mathUtils.js";import{destroyMaybe as s}from"../../../core/maybe.js";import{watch as a}from"../../../core/reactiveUtils.js";import{generateUID as n}from"../../../core/uid.js";import{property as p}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/Logger.js";import{subclass as c}from"../../../core/accessorSupport/decorators/subclass.js";import{diff as h}from"../../../core/accessorSupport/diffUtils.js";import{projectBuffer as l}from"../../../geometry/projection/projectBuffer.js";import{create as d,fromBuffer as u}from"../../../geometry/support/aaBoundingBox.js";import{newDoubleArray as m}from"../../../geometry/support/DoubleArray.js";import{makeDehydratedPoint as f}from"../../../layers/graphics/dehydratedPoint.js";import{RenderingInfo as g}from"../../../renderers/support/RenderingInfo.js";import y from"../../../symbols/PointSymbol3D.js";import{Graphics3DCore as b}from"./graphics/Graphics3DCore.js";import{Graphics3DScaleVisibility as I}from"./graphics/Graphics3DScaleVisibility.js";import{boundingBoxCornersPointsStride as _,boundingBoxCornerPoints as v}from"./i3s/I3SGeometryUtil.js";import{LimitGraphicsMap as M}from"../support/LimitGraphicsMap.js";import{UpdatePolicy as E}from"../webgl-engine/lib/UpdatePolicy.js";class j{constructor(e,t){this.meta=e,this.index=t}}class G{constructor(e,t){this.graphic=e,this.geometry=t,this.components=[],this.overridesDirty=!1}}let w=class extends t{get updating(){return this._graphicsCore?.updating??!1}constructor(e){super(e),this.loadedGraphics=new M(5e4),this.slicePlaneEnabled=!1,this._renderingInfo=new g(null,new y),this._featuresMap=new Map}initialize(){const e=this.view.basemapTerrain;this._graphicsCore=new b({owner:this,layer:this.layer,preferredUpdatePolicy:E.ASYNC,elevationFeatureExpressionEnabled:!1,graphicSymbolSupported:!1,getRenderingInfoWithoutRenderer:!0,hasZ:!0,hasM:!1,componentFactories:{deconflictor:e=>this.view.deconflictor.addGraphicsOwner(e),labeler:(e,t)=>this.view.labeler.addGraphicsOwner(e,t,{emptySymbolLabelSupported:!0,elevationInfoOverride:{mode:"absolute-height",offset:0},disablePlacement:{logEntityDescription:"3D Object Scene Layer features"}}),scaleVisibility:(t,r)=>new I({graphicsCoreOwner:this,layer:this.layer,queryGraphicUIDsInExtent:r,graphicsCore:t,basemapTerrain:e,layerScaleEnabled:!1})}}),this._graphicsCore.initializePromise.then((()=>this._graphicsCore.startCreateGraphics())).catch((()=>{})),this.addHandles(a((()=>this.layer.labelingInfo),((e,t)=>{h(e,t)&&this._graphicsCore.updateLabelingInfo()})))}destroy(){this._graphicsCore=s(this._graphicsCore),this.loadedGraphics=s(this.loadedGraphics),this.view=null}addNodeMeta(e,t){let r=0;const o=e.filteredIds,i=this.view.spatialReference,s=[];for(let a=0;a<e.featureIds.length;a++){const p=e.featureIds[a];let c=null==o;if(o&&r<o.length&&p===o[r]&&(c=!0,r++),!this._enabledForFeatureInNode(e,a))continue;const h=this._featuresMap.get(p);if(h){h.components.push(new j(e,a)),this._updateLabelPosition(p);continue}const l=t(a,e),d=f(0,0,0,i),u={objectId:p,uid:n(),attributes:l,visible:c,geometry:d},m=new G(u,d);m.components.push(new j(e,a)),this._featuresMap.set(p,m),this._updateLabelGeometry(p),s.push(u)}this.loadedGraphics.addMany(s)}updateLabelPositions(e){const t=this.view.renderCoordsHelper;this._forEachGraphic(e,((r,o,i)=>{const s=this._graphicsCore.getGraphics3DGraphicById(o.uid);null!=s&&this._updateLabelGeometry(e.featureIds[r])&&s.alignWithAbsoluteElevation(i.z??0,t,!1)}))}setNodeMetaAttributes(e,t){const r=new Array;this._forEachGraphic(e,((i,s)=>{const a=t(i,e);o(s.attributes,a)||(s.attributes=a,r.push(s.uid))})),this._graphicsCore.updateLabelingInfo(r)}applyFilterChange(e){this._forEachFeature(e,((t,r,o)=>{if(!this._enabledForFeatureInNode(e,t)){const o=e.featureIds[t];switch(this._removeFeature(r,e,t)){case C.REMOVED:this.loadedGraphics.removeManyByObjectId([o]);break;case C.MODIFIED:this._updateLabelPosition(o)}return}const i=r.graphic,s=i.visible;s!==o&&(i.visible=o,D.graphic=i,D.property="visible",D.oldValue=s,D.newValue=o,this._graphicsCore.graphicUpdateHandler(D))}))}removeNodeMeta(e){const t=[];this._forEachGraphic(e,(r=>{const o=e.featureIds[r],i=this._featuresMap.get(o);if(!i)return;switch(this._removeFeature(i,e,r)){case C.MODIFIED:this._updateLabelPosition(o);break;case C.REMOVED:t.push(o)}})),this.loadedGraphics.removeManyByObjectId(t)}_removeFeature(e,t,o){const i=e.components.length;return r(e.components,(e=>!(e.meta===t&&e.index===o))),0===e.components.length?(this._featuresMap.delete(t.featureIds[o]),C.REMOVED):i!==e.components.length?C.MODIFIED:C.UNMODIFIED}getRenderingInfo(){return this._renderingInfo}notifyGraphicGeometryChanged(){}notifyGraphicVisibilityChanged(){}_updateLabelPosition(e){const t=this._featuresMap.get(e);t&&this._updateLabelGeometry(e)&&(this.loadedGraphics.removeManyByObjectId([e]),this.loadedGraphics.addMany([t.graphic]))}_updateLabelGeometry(e){const t=this._featuresMap.get(e);if(!t)return!1;const r=t.geometry,o=this.view.spatialReference,s=this.view.renderCoordsHelper,a=r.x,n=r.y,p=r.z??0,c=t.components.length,h=m(c*_);let d=0;for(const{meta:i,index:l}of t.components)v(l,this.collection,i.objectHandle,h,d),d+=_;return l(h,s.spatialReference,0,h,o,0),u(h,F),r.x=(F[0]+F[3])/2,r.y=(F[1]+F[4])/2,r.z=F[5],!i(r.x,a)||!i(r.y,n)||!i(r.z,p)}_forEachGraphic(e,t){this._forEachFeature(e,((r,{graphic:o,geometry:i},s)=>{this._enabledForFeatureInNode(e,r)&&t(r,o,i,s)}))}_forEachFeature(e,t){let r=0;for(let o=0;o<e.featureIds.length;o++){const i=this._featuresMap.get(e.featureIds[o]);let s=null==e.filteredIds;e.filteredIds&&e.filteredIds[r]===e.featureIds[o]&&(s=!0,r++),i&&t(o,i,s)}}_enabledForFeatureInNode(e,t){return e.node.index<0||!this.overrides?.featureHasGeometryChanges(e.featureIds[t])}get updatePolicy(){return this._graphicsCore.effectiveUpdatePolicy}get usedMemory(){return this._graphicsCore.usedMemory}get unloadedMemoryEstimate(){return this._graphicsCore.unprocessedMemoryEstimate}get test(){}};e([p()],w.prototype,"view",void 0),e([p()],w.prototype,"layer",void 0),e([p()],w.prototype,"collection",void 0),e([p()],w.prototype,"loadedGraphics",void 0),e([p()],w.prototype,"overrides",void 0),e([p()],w.prototype,"updating",null),e([p()],w.prototype,"slicePlaneEnabled",void 0),e([p()],w.prototype,"_graphicsCore",void 0),w=e([c("esri.views.3d.layers.I3SMeshViewLabeler")],w);const D={graphic:null,property:null,oldValue:null,newValue:null};var C;!function(e){e[e.UNMODIFIED=0]="UNMODIFIED",e[e.MODIFIED=1]="MODIFIED",e[e.REMOVED=2]="REMOVED"}(C||(C={}));const F=d(),O=w;export{O as default};