@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
3 lines (2 loc) • 7.79 kB
JavaScript
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */
import{__decorate as i}from"tslib";import t from"../../../../Graphic.js";import e from"../../../../core/Accessor.js";import{makeHandle as r}from"../../../../core/handleUtils.js";import{destroyMaybe as s}from"../../../../core/maybe.js";import{isAbortError as n}from"../../../../core/promiseUtils.js";import{watch as o,sync as a,syncAndInitial as l}from"../../../../core/reactiveUtils.js";import{property as p,subclass as c}from"../../../../core/accessorSupport/decorators.js";import{diff as h}from"../../../../core/accessorSupport/diffUtils.js";import{UpdatingHandles as u}from"../../../../core/support/UpdatingHandles.js";import d from"../../../../layers/Layer.js";import{hydrateGraphic as y}from"../../../../layers/graphics/hydratedFeatures.js";import{getRenderingInfo as g,getRenderingInfoAsync as m}from"../../../../renderers/support/renderingInfoUtils.js";import{suspendResumeExtentOptimism as f}from"./constants.js";import{Graphics3DCore as b}from"./Graphics3DCore.js";import{Graphics3DElevationAlignment as C}from"./Graphics3DElevationAlignment.js";import{Graphics3DFrustumVisibility as w}from"./Graphics3DFrustumVisibility.js";import{Graphics3DObjectStates as V}from"./Graphics3DObjectStates.js";import{Graphics3DScaleVisibility as v}from"./Graphics3DScaleVisibility.js";import{enlargeExtent as G}from"./graphicUtils.js";import{normalizeHighlightTarget as j}from"../support/highlightUtils.js";import{hasLayerBasedScaleVisibility as E}from"../../../support/layerViewUtils.js";let S=class extends e{constructor(i){super(i),this.drapeSourcePriorityOffset=0,this.type="graphics-3d",this.graphicsCore=null,this.drapeSourceType=1,this.scaleVisibilityEnabled=!1,this.frustumVisibilityEnabled=!1,this._suspendResumeExtent=null,this._updatingHandles=new u}initialize(){const{layer:i}=this,t="effectiveScaleRange"in i?i:null,e=!E()&&this.scaleVisibilityEnabled&&null!=t,r=new b({owner:this,layer:this.owner.layer,preferredUpdatePolicy:1,graphicSymbolSupported:!0,componentFactories:{deconflictor:i=>this.owner.view.deconflictor.addGraphicsOwner(i),elevationAlignment:(i,t)=>new C({graphicsCoreOwner:this,graphicsCore:i,queryGraphicUIDsInExtent:t,elevationProvider:this.view.elevationProvider}),scaleVisibility:e?(i,e)=>new v({graphicsCoreOwner:this,layer:t,queryGraphicUIDsInExtent:e,graphicsCore:i,basemapTerrain:this.owner.view.basemapTerrain}):null,objectStates:i=>new V(i)}});if(this._set("graphicsCore",r),this.frustumVisibilityEnabled&&this._set("frustumVisibility",new w({graphicsCoreOwner:this})),"fullOpacity"in this.owner){const i=this.owner;this._updatingHandles.add(()=>i.fullOpacity,()=>this.graphicsCore.opacityChange())}if("elevationInfo"in i){const t=i;this._updatingHandles.add(()=>t.elevationInfo,(i,t)=>{h(i,t)&&this._updatingHandles.addPromise(this.graphicsCore.elevationInfoChange())})}this._set("initializePromise",this._initializeAsync()),this._updatingHandles.addPromise(this.initializePromise)}async _initializeAsync(){try{await this.graphicsCore.initializePromise}catch(i){if(n(i))return;throw i}this.destroyed||(this.addHandles(o(()=>this.view.clippingArea,()=>this._updateClippingExtent(),a)),this._updateClippingExtent(),this._setupSuspendResumeExtent(),this.graphicsCore.startCreateGraphics())}destroy(){this._updatingHandles.destroy(),this._set("frustumVisibility",s(this.frustumVisibility)),this._set("graphicsCore",s(this.graphicsCore))}get layer(){return this.owner.layer}get layerViewUid(){return this.owner.uid}get view(){return this.owner.view}get scaleVisibility(){return this.graphicsCore?.scaleVisibility}get elevationAlignment(){return this.graphicsCore?.elevationAlignment}get scaleVisibilitySuspended(){return!(null==this.scaleVisibility||!this.scaleVisibility.suspended)}get frustumVisibilitySuspended(){return null!=this.frustumVisibility&&this.frustumVisibility.suspended}get suspended(){return this.owner.suspended??!1}get updating(){return!!(this.graphicsCore?.updating||null!=this.scaleVisibility&&this.scaleVisibility.updating||null!=this.frustumVisibility&&this.frustumVisibility.updating||this._updatingHandles.updating)}get graphics3DGraphics(){return this.graphicsCore?.graphics3DGraphics}get graphics3DGraphicsByObjectID(){return this.graphicsCore?.graphics3DGraphicsByObjectID}get loadedGraphics(){return this.owner.loadedGraphics}get fullOpacity(){return this.owner.fullOpacity??1}get slicePlaneEnabled(){return this.owner.slicePlaneEnabled}get updatePolicy(){return this.owner.updatePolicy}notifyGraphicGeometryChanged(i){this.graphicsCore.notifyGraphicGeometryChanged(i)}notifyGraphicVisibilityChanged(i){this.graphicsCore.notifyGraphicVisibilityChanged(i)}notifyContentGeometryUpdate(){this.owner.notifyContentGeometryUpdate?.()}getRenderingInfo(i,t,e){const r=g(i,{renderer:t,arcade:e});if(r?.color){const i=r.color.output;i[0]=i[0]/255,i[1]=i[1]/255,i[2]=i[2]/255}return r}getRenderingInfoAsync(i,t,e,r){return m(i,{renderer:t,arcade:e,...r})}getHit(i,t){if(this.owner.loadedGraphics){const e=this.owner.loadedGraphics.find(t=>t.uid===i);if(e){const i=this.layer instanceof d?this.layer:null,r=y(e,i,t);return{type:"graphic",graphic:r,layer:r.layer}}}return null}whenGraphicBounds(i,t){return this.graphicsCore?this.graphicsCore.whenGraphicBounds(i,t):Promise.reject()}computeAttachmentOrigin(i,t){return this.graphicsCore?this.graphicsCore.computeAttachmentOrigin(i,t):null}getSymbolLayerSize(i,t){return this.graphicsCore?this.graphicsCore.getSymbolLayerSize(i,t):null}maskOccludee(i){const t=this.graphicsCore?.objectStates;if(!t)return r();const{set:e,handle:s}=t.acquireOccludeeSet(null);return t.setUid(e,i.uid),s}highlight(i,e){const r=this.graphicsCore?.objectStates;if(!r)return O;const s=j(i);if(0===s.length)return O;if(s[0]instanceof t){const i=s.map(i=>i.uid),{set:t,handle:n}=r.acquireHighlightSet(e,null);return r.setUids(t,i),n}if("number"==typeof s[0]){const i=s,{set:t,handle:n}=r.acquireHighlightSet(e,null);return r.setObjectIds(t,i),n}return O}_setupSuspendResumeExtent(){const{scaleVisibility:i,frustumVisibility:t}=this;if(null==i&&null==t)return;const e=({computedExtent:e,extentPadding:r})=>{this._suspendResumeExtent=G(e,this._suspendResumeExtent,f,r),null!=i&&i.setExtent(this._suspendResumeExtent),null!=t&&t.setExtent(this._suspendResumeExtent)};this.addHandles(o(()=>({computedExtent:this.graphicsCore?.computedExtent,extentPadding:this.graphicsCore?.extentPadding}),i=>e(i),l))}_updateClippingExtent(){const i=this.view.clippingArea;this.graphicsCore.setClippingExtent(i,this.view.spatialReference)&&this.graphicsCore.recreateAllGraphics()}};i([p()],S.prototype,"drapeSourcePriorityOffset",void 0),i([p()],S.prototype,"type",void 0),i([p({constructOnly:!0})],S.prototype,"owner",void 0),i([p()],S.prototype,"layer",null),i([p()],S.prototype,"layerViewUid",null),i([p()],S.prototype,"view",null),i([p({constructOnly:!0})],S.prototype,"graphicsCore",void 0),i([p()],S.prototype,"scaleVisibility",null),i([p({constructOnly:!0})],S.prototype,"frustumVisibility",void 0),i([p()],S.prototype,"elevationAlignment",null),i([p()],S.prototype,"scaleVisibilitySuspended",null),i([p({readOnly:!0})],S.prototype,"frustumVisibilitySuspended",null),i([p()],S.prototype,"suspended",null),i([p({readOnly:!0})],S.prototype,"updating",null),i([p()],S.prototype,"loadedGraphics",null),i([p()],S.prototype,"fullOpacity",null),i([p()],S.prototype,"slicePlaneEnabled",null),i([p()],S.prototype,"drapeSourceType",void 0),i([p()],S.prototype,"updatePolicy",null),i([p({constructOnly:!0})],S.prototype,"scaleVisibilityEnabled",void 0),i([p({constructOnly:!0})],S.prototype,"frustumVisibilityEnabled",void 0),i([p()],S.prototype,"initializePromise",void 0),S=i([c("esri.views.3d.layers.graphics.GraphicsProcessor")],S);const O=r();export{S as GraphicsProcessor};