@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 4.13 kB
JavaScript
import{unwrapOr as e}from"../../../../core/maybe.js";import{c as t}from"../../../../chunks/mat4.js";import{c as n}from"../../../../chunks/mat4f64.js";import{c as o}from"../../../../chunks/vec3f64.js";import{projectBuffer as r,computeTranslationToOriginAndRotation as i}from"../../../../geometry/projection.js";import{isDehydratedPoint as s}from"../../../../layers/graphics/dehydratedFeatureUtils.js";import{updateVertexAttributeAuxpos1w as a}from"./graphicUtils.js";import{isSamplePosition as l,getElevationAtPoint as u}from"../../support/ElevationProvider.js";function c(e,t,n,o,i,s,a,l,u,c,f){const d=x[f.mode];let m,p,g=0;if(r(e,t,n,o,u.spatialReference,i,l))return d.requiresAlignment(f)?(g=d.applyElevationAlignmentBuffer(o,i,s,a,l,u,c,f),m=s,p=a):(m=o,p=i),r(m,u.spatialReference,p,s,c.spatialReference,a,l)?g:void 0}function f(t,n,o,r,i){const a=(s(t)?t.z:l(t)?t.array[t.offset+2]:t[2])||0;switch(o.mode){case"on-the-ground":{const o=e(u(n,t,"ground"),0);return i.verticalDistanceToGround=0,i.sampledElevation=o,void(i.z=o)}case"relative-to-ground":{const s=e(u(n,t,"ground"),0),l=o.geometryZWithOffset(a,r);return i.verticalDistanceToGround=l,i.sampledElevation=s,void(i.z=l+s)}case"relative-to-scene":{const s=e(u(n,t,"scene"),0),l=o.geometryZWithOffset(a,r);return i.verticalDistanceToGround=l,i.sampledElevation=s,void(i.z=l+s)}case"absolute-height":{const s=o.geometryZWithOffset(a,r),l=e(u(n,t,"ground"),0);return i.verticalDistanceToGround=s-l,i.sampledElevation=l,void(i.z=s)}default:return void(i.z=0)}}function d(e,t,n,o){return f(e,t,n,o,z),z.z}function m(e,t,n){return null==t||null==n?e.definedChanged:"on-the-ground"===t&&"on-the-ground"===n?e.staysOnTheGround:t===n||"on-the-ground"!==t&&"on-the-ground"!==n?j.UPDATE:e.onTheGroundChanged}function p(e){return"relative-to-ground"===e||"relative-to-scene"===e}function g(e){return"absolute-height"!==e}function v(e,n,o,r,s){f(n,o,s,r,z),a(e,z.verticalDistanceToGround);const l=z.sampledElevation,u=t(O,e.transformation);C[0]=n.x,C[1]=n.y,C[2]=z.z;return i(n.spatialReference,C,u,r.spatialReference)?e.transformation=u:console.warn("Could not locate symbol object properly, it might be misplaced"),l}function h(t,n,o,r,i,s){let a=0;const l=s.spatialReference;n*=3,r*=3;for(let u=0;u<i;++u){const i=t[n+0],u=t[n+1],c=t[n+2],f=e(s.getElevation(i,u,c,l,"ground"),0);a+=f,o[r+0]=i,o[r+1]=u,o[r+2]=f,n+=3,r+=3}return a/i}function E(t,n,o,r,i,s,a,l){let u=0;const c=l.calculateOffsetRenderUnits(a),f=l.featureExpressionInfoContext,d=s.spatialReference;n*=3,r*=3;for(let m=0;m<i;++m){const i=t[n+0],a=t[n+1],l=t[n+2],m=e(s.getElevation(i,a,l,d,"ground"),0);u+=m,o[r+0]=i,o[r+1]=a,o[r+2]=null==f?l+m+c:m+c,n+=3,r+=3}return u/i}function y(t,n,o,r,i,s,a,l){let u=0;const c=l.calculateOffsetRenderUnits(a),f=l.featureExpressionInfoContext,d=s.spatialReference;n*=3,r*=3;for(let m=0;m<i;++m){const i=t[n+0],a=t[n+1],l=t[n+2],m=e(s.getElevation(i,a,l,d,"scene"),0);u+=m,o[r+0]=i,o[r+1]=a,o[r+2]=null==f?l+m+c:m+c,n+=3,r+=3}return u/i}function A(e){const t=e.meterUnitOffset,n=e.featureExpressionInfoContext;return 0!==t||null!=n}function R(e,t,n,o,r,i,s,a){const l=a.calculateOffsetRenderUnits(s),u=a.featureExpressionInfoContext;t*=3,o*=3;for(let c=0;c<r;++c){const r=e[t+0],i=e[t+1],s=e[t+2];n[o+0]=r,n[o+1]=i,n[o+2]=null==u?s+l:l,t+=3,o+=3}return 0}class T{constructor(){this.verticalDistanceToGround=0,this.sampledElevation=0,this.z=0}}var j;!function(e){e[e.NONE=0]="NONE",e[e.UPDATE=1]="UPDATE",e[e.RECREATE=2]="RECREATE"}(j||(j={}));const x={"absolute-height":{applyElevationAlignmentBuffer:R,requiresAlignment:A},"on-the-ground":{applyElevationAlignmentBuffer:h,requiresAlignment:()=>!0},"relative-to-ground":{applyElevationAlignmentBuffer:E,requiresAlignment:()=>!0},"relative-to-scene":{applyElevationAlignmentBuffer:y,requiresAlignment:()=>!0}},O=n(),z=new T,C=o();export{T as SampleElevationInfo,j as SymbolUpdateType,v as applyElevationAlignmentForHUD,c as applyPerVertexElevationAlignment,m as elevationModeChangeUpdateType,d as evaluateElevationAlignmentAtPoint,f as evaluateElevationInfoAtPoint,p as needsElevationUpdates2D,g as needsElevationUpdates3D};