@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 3.33 kB
JavaScript
import{lerp as t}from"../../../../core/mathUtils.js";import{t as e}from"../../../../chunks/mat3.js";import{c as i}from"../../../../chunks/mat3f64.js";import{l as s,i as a,h as o,c as h,b as r,t as n,g as c,f as p,e as m,a as d,n as w}from"../../../../chunks/vec3.js";import{c as l,a as u,f as y}from"../../../../chunks/vec3f64.js";import{ViewingMode as M}from"../../../ViewingMode.js";import{angle as f,slerp as A}from"../../support/mathUtils.js";const P=l(),g=l(),_=l(),k=l(),v=l(),x=l(),z={upward:y(0,0,1),forward:y(0,1,0),sideway:y(1,0,0)},b=i();class T{constructor(t=M.Global){this.viewingMode=t,this.center=l(),this.pitch=0,this.yaw=0,this.distance=0,this.lookAtDirection=u(z.forward)}pixelsPerPanAtZoom(t){return this.size/2/(this._zoomToPanScale*t)}zoomAtPixelsPerPan(t){return this.size/2/(this._zoomToPanScale*t)}pixelsPerRotateAtZoom(){const t=Math.max(Math.cos(Math.abs(this.pitch)),.5);return this.size/2/t}compareTo(t,e){if(e||(e={pan:0,rotate:0,sourceZoom:0,targetZoom:0}),this.viewingMode===M.Global){const i=(s(this.center)+s(t.center))/2;e.pan=f(this.center,t.center)*i}else e.pan=a(this.center,t.center);let i=Math.abs(t.yaw-this.yaw);i>=Math.PI&&(i=2*Math.PI-i);const o=Math.abs(t.pitch-this.pitch);return e.rotate=Math.max(i,o),e.sourceZoom=this.distance,e.targetZoom=t.distance,e}interpolate(e,i,s){this.viewingMode===M.Global?A(e.center,i.center,s.pan,this.center):o(this.center,e.center,i.center,s.pan),this.distance=isFinite(i.distance)?t(e.distance,i.distance,s.zoom):e.distance,this.pitch=t(e.pitch,i.pitch,s.rotate);let a=e.yaw;const h=i.yaw;Math.abs(h-a)>=Math.PI&&(a+=2*(a<h?1:-1)*Math.PI),this.yaw=t(a,h,s.rotate)}copyFrom(t){h(this.center,t.center),this.pitch=t.pitch,this.yaw=t.yaw,this.distance=t.distance,h(this.lookAtDirection,t.lookAtDirection),this.size=t.size,this.copyFromCommon(t),this.viewingMode=t.viewingMode}copyFromRenderCamera(t){const e=this._lookAtOrientation(t.center,b);h(this.center,t.center),r(k,t.center,t.eye),n(k,k,e),n(v,t.up,e),this.distance=s(k),0!==this.distance&&(k[0]/=this.distance,k[1]/=this.distance,k[2]/=this.distance),this.pitch=this._eyeUpToPitch(k),this.yaw=this._eyeUpToYaw(k,v),this.size=Math.sqrt(t.width*t.width+t.height*t.height),this.copyFromCommon(t)}copyFromCommon(t){this.fov=t.fov,this._zoomToPanScale=Math.atan(.5*this.fov)}copyToRenderCamera(t){const i=this._lookAtOrientation(this.center,b);e(i,i),this._axisAngleVec3(z.sideway,this.pitch-Math.PI/2,z.forward,k),this._axisAngleVec3(z.upward,this.yaw,k),this._axisAngleVec3(z.sideway,this.pitch-Math.PI/2,z.upward,v),this._axisAngleVec3(z.upward,this.yaw,v),c(k,k,this.distance),n(k,k,i),n(v,v,i),t.center=this.center,t.eye=r(k,this.center,k),t.up=v}_axisAngleVec3(t,e,i,s=i){const a=Math.cos(e),o=Math.sin(e);return c(P,i,a),p(g,t,i),c(g,g,o),c(_,t,(1-a)*m(t,i)),d(s,d(s,P,g),_)}_lookAtOrientation(t,e=i()){return this._upAtLookAt(t,_),p(P,this.lookAtDirection,_),w(P,P),0===P[0]&&0===P[1]&&0===P[2]&&h(P,z.sideway),p(g,_,P),w(g,g),e[0]=P[0],e[1]=g[0],e[2]=_[0],e[3]=P[1],e[4]=g[1],e[5]=_[1],e[6]=P[2],e[7]=g[2],e[8]=_[2],e}_upAtLookAt(t,e){return this.viewingMode===M.Local?h(e,z.upward):w(e,t)}_eyeUpToPitch(t){return Math.PI-f(z.upward,t)}_eyeUpToYaw(t,e){const i=x;return Math.abs(e[2])<.5?(h(i,e),t[2]>0&&c(i,i,-1)):h(i,t),p(g,i,z.upward),w(g,g),f(z.sideway,g,z.upward)}}export{T as default};