UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

3 lines (2 loc) 3.54 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.19/LICENSE.txt */ import{lerp as t}from"../../../../core/mathUtils.js";import{transpose as i}from"../../../../core/libs/gl-matrix-2/math/mat3.js";import{create as e}from"../../../../core/libs/gl-matrix-2/factories/mat3f64.js";import{length as s,distance as h,lerp as o,copy as a,subtract as n,transformMat3 as r,scale as c,cross as _,dot as m,add as p,normalize as f}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as d,clone as l,UNIT_Y as v,UNIT_X as M,UNIT_Z as g}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{angle as u,slerp as w}from"../../support/mathUtils.js";class y{get pitch(){return this._pitch}get yaw(){return this._yaw}get distance(){return this._distance}get fov(){return this._fov}get size(){return this._size}constructor(t){this.viewingMode=t,this.center=d(),this._pitch=0,this._yaw=0,this._distance=0,this.direction=l(V),this._fov=55,this._size=1}pixelsPerPanAtZoom(t){return this._size/2/(this._zoomToPanScale*t)}zoomAtPixelsPerPan(t){return this._size/2/(this._zoomToPanScale*t)}pixelsPerRotate(){const t=Math.max(Math.cos(Math.abs(this._pitch)),.5);return this._size/2/t}compareTo(t,i){if(1===this.viewingMode){const e=(s(this.center)+s(t.center))/2;i.pan=u(this.center,t.center)*e}else i.pan=h(this.center,t.center);let e=Math.abs(t._yaw-this._yaw);e>=Math.PI&&(e=2*Math.PI-e);const o=Math.abs(t._pitch-this._pitch);i.rotate=Math.max(e,o),i.fov=t.fov-this.fov,i.sourceZoom=this._distance,i.targetZoom=t._distance}interpolate(i,e,s){1===this.viewingMode?w(i.center,e.center,s.pan,this.center):o(this.center,i.center,e.center,s.pan),this._distance=isFinite(e.distance)?t(i.distance,e.distance+s.zoomOffset,s.zoom):i.distance,this._pitch=t(i.pitch,e.pitch,s.rotate);let h=i._yaw;const a=e._yaw;Math.abs(a-h)>=Math.PI&&(h+=2*(h<a?1:-1)*Math.PI),this._yaw=t(h,a,s.rotate),this._fov=t(i.fov,e.fov,s.fov)}copyFrom(t){a(this.center,t.center),this._pitch=t.pitch,this._yaw=t.yaw,this._distance=t.distance,a(this.direction,t.direction),this._size=t.size,this._fov=t.fov,this._zoomToPanScale=Math.atan(.5*this._fov),this.viewingMode=t.viewingMode}copyFromRenderCamera(t){const i=this._lookAtOrientation(t.center,S);a(this.center,t.center),n(I,t.center,t.eye),r(I,I,i),r(j,t.up,i),this._distance=s(I),0!==this._distance&&(I[0]/=this._distance,I[1]/=this._distance,I[2]/=this._distance),this._pitch=P(I),this._yaw=z(I,j),this._size=Math.sqrt(t.width*t.width+t.height*t.height),this._fov=t.fov,this._zoomToPanScale=Math.atan(.5*this._fov)}copyToRenderCamera(t){const e=this._lookAtOrientation(this.center,S);i(e,e),this._axisAngleVec3(O,this._pitch-Math.PI/2,V,I),this._axisAngleVec3(k,this._yaw,I,I),this._axisAngleVec3(O,this._pitch-Math.PI/2,k,j),this._axisAngleVec3(k,this._yaw,j,j),c(I,I,this._distance),r(I,I,e),r(j,j,e),t.center=this.center,t.eye=n(I,this.center,I),t.up=j,t.fov=this._fov}_axisAngleVec3(t,i,e,s){const h=Math.cos(i),o=Math.sin(i);return c(x,e,h),_(A,t,e),c(A,A,o),c(b,t,(1-h)*m(t,e)),p(s,p(s,x,A),b)}_lookAtOrientation(t,i=e()){return this._upAtLookAt(t,b),_(x,this.direction,b),f(x,x),0===x[0]&&0===x[1]&&0===x[2]&&a(x,O),_(A,b,x),f(A,A),i[0]=x[0],i[1]=A[0],i[2]=b[0],i[3]=x[1],i[4]=A[1],i[5]=b[1],i[6]=x[2],i[7]=A[2],i[8]=b[2],i}_upAtLookAt(t,i){return 2===this.viewingMode?a(i,k):f(i,t)}}function P(t){return Math.PI-u(k,t)}function z(t,i){const e=T;return Math.abs(i[2])<.5?(a(e,i),t[2]>0&&c(e,e,-1)):a(e,t),_(A,e,k),f(A,A),u(O,A,k)}const x=d(),A=d(),b=d(),I=d(),j=d(),T=d(),k=g,V=v,O=M,S=e();export{y as Camera};