@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 4.34 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.33/esri/copyright.txt for details.
*/
import{create as t}from"../../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{t as e,i}from"../../../../chunks/vec32.js";import{create as n}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{create as s,empty as a,expandWithVec3 as h,isPoint as r,center as o,offset as l}from"../../../../geometry/support/aaBoundingBox.js";import{evaluateElevationInfoAtPoint as g}from"./elevationAlignmentUtils.js";import{setContextFeature as c}from"./featureExpressionInfoUtils.js";import{demResolutionForBoundingBox as d}from"./graphicUtils.js";import{Object3DState as m}from"../../webgl-engine/lib/basicInterfaces.js";import{Object3DHighlightStateID as p}from"../../webgl-engine/lib/Object3DStateID.js";class u{constructor(t,e,i,n,s){this.graphics3DSymbolLayer=t,this.instanceIndex=e,this.elevationAligner=i,this.elevationContext=n,this._highlightOrderMap=s,this.type="lod-instance",this._highlights=new Set,this.alignedSampledElevation=0,this.isElevationSource=!1,this.needsElevationUpdates=!1,this._highlightName=null}initialize(){}setVisibility(t){const{instanceData:e}=this;t!==e.getVisible(this.instanceIndex)&&e.setVisible(this.instanceIndex,t)}destroy(){null!=this.instanceIndex&&(this.instanceData.removeInstance(this.instanceIndex),this.graphics3DSymbolLayer.notifyDestroyGraphicLayer(this))}get usedMemory(){return this.graphics3DSymbolLayer.usedMemory}alignWithElevation(t,e,i){if(this.elevationAligner){c(this.elevationContext.featureExpressionInfoContext,i);const n=(i,n)=>g(i,t,this.elevationContext,e,n),s=this.elevationAligner(this,this.elevationContext,t.spatialReference,n,e);null!=s&&(this.alignedSampledElevation=s)}}getCenterObjectSpace(t=n()){return this.instanceData.getCombinedLocalTransform(this.instanceIndex,_),e(t,this._lodRenderer.baseBoundingSphere.center,_)}getBoundingBoxObjectSpace(t=s()){this.instanceData.getCombinedLocalTransform(this.instanceIndex,_);const n=this._lodRenderer.baseBoundingBox;a(t);for(let s=0;s<8;++s)i(b,1&s?n[3]:n[0],2&s?n[4]:n[1],4&s?n[5]:n[2]),e(b,b,_),h(t,b);return t}computeAttachmentOrigin(t){this.instanceData.getGlobalTransform(this.instanceIndex,_),t.render.origin[0]+=_[12],t.render.origin[1]+=_[13],t.render.origin[2]+=_[14],t.render.num++}async getProjectedBoundingBox(t,i,n,s,h){const g=this.getBoundingBoxObjectSpace(h),c=x,m=r(g)?1:c.length;this.instanceData.getGlobalTransform(this.instanceIndex,_);for(let a=0;a<m;a++){const t=c[a];b[0]=g[t[0]],b[1]=g[t[1]],b[2]=g[t[2]],e(b,b,_),f[3*a]=b[0],f[3*a+1]=b[1],f[3*a+2]=b[2]}if(!t(f,0,m))return null;a(g);let p=null;this.calculateRelativeScreenBounds&&(p=this.calculateRelativeScreenBounds());for(let e=0;e<3*m;e+=3){for(let t=0;t<3;t++)g[t]=Math.min(g[t],f[e+t]),g[t+3]=Math.max(g[t+3],f[e+t]);p&&n.push({location:f.slice(e,e+3),screenSpaceBoundingRect:p})}if(i&&(o(g,v),"absolute-height"!==this.elevationContext.mode)){let t;const e=d(g,i.service.spatialReference,i);try{t=await i.service.queryElevation(v[0],v[1],s,e,"ground")}catch(u){}null!=t&&l(g,0,0,-this.alignedSampledElevation+t)}return g}addObjectState(t){t.stateType===m.Highlight&&this.addObjectHighlightState(t)}addObjectHighlightState(t){const e=new p(t.highlightName);this._addHighlightId(e),t.addExternal((t=>{this._removeHighlightId(t)}),e)}removeObjectState(t){this._highlights.forEach((e=>t.remove(e)))}updateHighlights(t){this._highlightOrderMap=t,this._updateHighlightOptions()}_calculateHighlightOptions(){let t=-1,e=null;return this._highlights.forEach((({highlightName:i})=>{const n=this._highlightOrderMap.get(i);void 0!==n&&n>t&&(t=n,e=i)})),e}_addHighlightId(t){this._highlights.add(t),this._updateHighlightOptions()}_removeHighlightId(t){this._highlights.delete(t),this._updateHighlightOptions()}_updateHighlightOptions(){const t=this._calculateHighlightOptions();t!==this._highlightName&&(this._highlightName=t,this.instanceData.setHighlight(this.instanceIndex,t))}get _lodRenderer(){return this.graphics3DSymbolLayer.lodRenderer}get instanceData(){return this._lodRenderer.instanceData}}const f=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],b=n(),v=n(),x=[[0,1,2],[3,1,2],[0,4,2],[3,4,2],[0,1,5],[3,1,5],[0,4,5],[3,4,5]],_=t();export{u as Graphics3DLodInstanceGraphicLayer};