@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 3.67 kB
JavaScript
import{isSome as e}from"../../../../core/maybe.js";import{c as t}from"../../../../chunks/mat4f64.js";import{m as i,s as n}from"../../../../chunks/vec3.js";import{c as s}from"../../../../chunks/vec3f64.js";import{empty as a,expandWithVec3 as r,create as o,isPoint as l,center as h,offset as c}from"../../../../geometry/support/aaBoundingBox.js";import{evaluateElevationInfoAtPoint as d}from"./elevationAlignmentUtils.js";import{setContextFeature as g}from"./featureExpressionInfoUtils.js";import{demResolutionForBoundingBox as m}from"./graphicUtils.js";import{Object3DState as f}from"../../webgl-engine/lib/basicInterfaces.js";import{Object3DStateID as p}from"../../webgl-engine/lib/Object3DStateID.js";class u{constructor(e,t,i,n){this.graphics3DSymbolLayer=e,this.instanceIndex=t,this.elevationAligner=i,this.elevationContext=n,this.type="lod-instance",this._highlights=new Set,this.alignedSampledElevation=0,this.isElevationSource=!1,this.needsElevationUpdates=!1}initialize(){}setVisibility(e){const t=this._lodRenderer.instanceData;e!==t.getVisible(this.instanceIndex)&&t.setVisible(this.instanceIndex,e)}destroy(){null!=this.instanceIndex&&(this._lodRenderer.instanceData.removeInstance(this.instanceIndex),this.graphics3DSymbolLayer.notifyDestroyGraphicLayer(this))}alignWithElevation(t,i,n){if(this.elevationAligner){g(this.elevationContext.featureExpressionInfoContext,n);const s=(e,n)=>d(e,t,this.elevationContext,i,n),a=this.elevationAligner(this,this.elevationContext,t.spatialReference,s,i);e(a)&&(this.alignedSampledElevation=a)}}getCenterObjectSpace(e=s()){return this._lodRenderer.instanceData.getCombinedLocalTransform(this.instanceIndex,_),i(e,this._lodRenderer.baseBoundingSphere.center,_)}getBoundingBoxObjectSpace(e=o()){this._lodRenderer.instanceData.getCombinedLocalTransform(this.instanceIndex,_);const t=this._lodRenderer.baseBoundingBox;a(e);for(let s=0;s<8;++s)n(x,0==(1&s)?t[0]:t[3],0==(2&s)?t[1]:t[4],0==(4&s)?t[2]:t[5]),i(x,x,_),r(e,x);return e}computeAttachmentOrigin(e){this._lodRenderer.instanceData.getGlobalTransform(this.instanceIndex,_),e.render.origin[0]+=_[12],e.render.origin[1]+=_[13],e.render.origin[2]+=_[14],e.render.num++}async getProjectedBoundingBox(t,n,s,r,o){const d=this.getBoundingBoxObjectSpace(o),g=I,f=l(d)?1:g.length;this._lodRenderer.instanceData.getGlobalTransform(this.instanceIndex,_);for(let e=0;e<f;e++){const t=g[e];x[0]=d[t[0]],x[1]=d[t[1]],x[2]=d[t[2]],i(x,x,_),v[3*e+0]=x[0],v[3*e+1]=x[1],v[3*e+2]=x[2]}if(!t(v,0,f))return null;a(d);let p=null;this.calculateRelativeScreenBounds&&(p=this.calculateRelativeScreenBounds());for(let e=0;e<3*f;e+=3){for(let t=0;t<3;t++)d[t]=Math.min(d[t],v[e+t]),d[t+3]=Math.max(d[t+3],v[e+t]);p&&s.push({location:v.slice(e,e+3),screenSpaceBoundingRect:p})}if(n&&(h(d,b),"absolute-height"!==this.elevationContext.mode)){let t;const i=m(d,n.service.spatialReference,n);try{t=await n.service.queryElevation(b[0],b[1],r,i,"ground")}catch(u){}e(t)&&c(d,0,0,-this.alignedSampledElevation+t)}return d}addObjectState(e,t){if(e===f.Highlight){const i=new p(e);this._addHighlightId(i),t.addExternal((e=>{this._removeHighlightId(e)}),i)}}removeObjectState(e){this._highlights.forEach((t=>e.remove(t)))}_addHighlightId(e){this._highlights.add(e),this._lodRenderer.instanceData.setHighlight(this.instanceIndex,!0)}_removeHighlightId(e){this._highlights.delete(e),this._lodRenderer.instanceData.setHighlight(this.instanceIndex,this._highlights.size>0)}get _lodRenderer(){return this.graphics3DSymbolLayer.lodRenderer}}const v=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],x=s(),b=s(),I=[[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 default};