@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 3.23 kB
JavaScript
import{rad2deg as t}from"../../../core/mathUtils.js";import{isSome as e}from"../../../core/maybe.js";import{getMetersPerUnitForSR as o}from"../../../core/unitUtils.js";import{s as r}from"../../../chunks/mat4.js";import{c as s}from"../../../chunks/vec3.js";import{isVec3 as i}from"../../../core/libs/gl-matrix-2/types/vec3.js";import{projectPointToVector as n,projectVectorToVector as a,projectVectorToDehydratedPoint as m,projectVectorToPoint as c}from"../../../geometry/projection.js";import{Axis as l}from"../../../geometry/support/Axis.js";import{create as p,setExtent as d,altitudeAt as h,setAltitudeAt as u,setAltitudeOfTransformation as f,normalAt as y,axisAt as S,elevate as g,intersectRayClosestSilhouette as _,intersectRay as j,createGlobal as w,createLocal as A,renderSRFromViewSR as R}from"../../../geometry/support/coordinateSystem.js";import{intersectRay as C}from"../../../geometry/support/plane.js";import{angleAroundAxis as M}from"../../../geometry/support/vector.js";import{sv3d as P}from"../../../geometry/support/vectorStacks.js";import{isDehydratedPoint as b}from"../../../layers/graphics/dehydratedFeatureUtils.js";import{ViewingMode as v}from"../../ViewingMode.js";import{isSpatialReferenceSupported as U}from"../../support/spatialReferenceSupport.js";class x{constructor(t,e,o,r){this.viewingMode=t,this.spatialReference=e,this.unitInMeters=o,this._coordinateSystem=r,this._tmpCoordinateSystem=p(r)}set extent(t){t&&d(this._coordinateSystem,t,this._coordinateSystem)}getAltitude(t){return h(this._coordinateSystem,t)}setAltitude(t,e,o=t){return u(this._coordinateSystem,o,e,t)}setAltitudeOfTransformation(t,e){f(this._coordinateSystem,e,t,e)}worldUpAtPosition(t,e){return y(this._coordinateSystem,t,e)}worldBasisAtPosition(t,e,o){return S(this._coordinateSystem,t,e,o)}basisMatrixAtPosition(t,e){const o=this.worldBasisAtPosition(t,l.X,P.get()),s=this.worldBasisAtPosition(t,l.Y,P.get()),i=this.worldBasisAtPosition(t,l.Z,P.get());return r(e,o[0],o[1],o[2],0,s[0],s[1],s[2],0,i[0],i[1],i[2],0,0,0,0,1),e}headingAtPosition(e,o){const r=this.worldUpAtPosition(e,P.get()),s=this.worldBasisAtPosition(e,l.Y,P.get()),i=M(o,s,r);return t(i)}intersectManifoldClosestSilhouette(t,e,o){return g(this._coordinateSystem,e,this._tmpCoordinateSystem),_(this._tmpCoordinateSystem,t,o),o}intersectManifold(t,e,o){g(this._coordinateSystem,e,this._tmpCoordinateSystem);const r=P.get();return j(this._tmpCoordinateSystem,t,r)?s(o,r):null}intersectInfiniteManifold(t,e,o){if(this.viewingMode===v.Global)return this.intersectManifold(t,e,o);g(this._coordinateSystem,e,this._tmpCoordinateSystem);const r=this._tmpCoordinateSystem.value,i=P.get();return C(r.plane,t,i)?s(o,i):null}toRenderCoords(t,e,o){return b(t)?n(t,e,this.spatialReference):a(t,e,o,this.spatialReference)}fromRenderCoords(t,o,r=null){return b(o)?(e(r)&&(o.spatialReference=r),m(t,this.spatialReference,o)):i(o)?a(t,this.spatialReference,o,r)?o:null:c(t,this.spatialReference,o)}static create(t,e){switch(t){case v.Local:return new x(v.Local,e,o(e),A());case v.Global:return new x(v.Global,e,1,w(e))}}static renderUnitScaleFactor(t,e){return B(t)/B(e)}}function B(t){if(U(t,v.Global))return 1;const e=R(!1,t);return o(e)}export{x as RenderCoordsHelper};