UNPKG

@arcgis/core

Version:

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

6 lines (5 loc) 3.4 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.32/esri/copyright.txt for details. */ import{_ as t}from"../../../../chunks/tslib.es6.js";import{clamp as i}from"../../../../core/mathUtils.js";import{Milliseconds as e}from"../../../../core/time.js";import"../../../../core/Logger.js";import"../../../../core/has.js";import"../../../../core/RandomLCG.js";import"../../../../core/Error.js";import{subclass as s}from"../../../../core/accessorSupport/decorators/subclass.js";import{c as r,d as o,n as a,f as m,l as n,g as c,h,m as p}from"../../../../chunks/vec32.js";import{create as _,fromValues as l}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{applyAll as C}from"../../camera/constraintUtils.js";import{ConstraintOptions as f}from"../../camera/constraintUtils/ConstraintOptions.js";import{ConstraintTypes as g}from"../../camera/constraintUtils/ConstraintTypes.js";import{InteractionType as y}from"../../camera/constraintUtils/InteractionType.js";import{getVoxelWasm as j}from"../../layers/VoxelWasm.js";import{PointToPointAnimationController as u}from"./PointToPointAnimationController.js";import{contentIntersectorOptions as w,zoomMaxDistanceModifier as b,zoomMinDistanceModifier as L,zoomDistanceModifier as d}from"../utils/navigationUtils.js";import v from"../../webgl/RenderCamera.js";import{newIntersector as z}from"../../webgl-engine/lib/Intersector.js";import{outExpo as R}from"../../../animation/easing.js";const M=.6,D=4,F=60;let U=class extends u{constructor(){super(...arguments),this._zoomLocation=_(),this._tmpCamera=new v,this._tmpRayDir=_(),this._tmpCenter=_(),this._beginCamera=new v,this._constraintOptions=new f(g.ALL,y.ZOOM,null,this._beginCamera)}step(t,e){if(!this.running)return;const s=this.view.state;this.animation.finished?this._beginCamera.copyFrom(s.camera):this.animation.cameraAt(1,this._beginCamera),this._tmpCamera.copyFrom(s.camera);const p=z(this.view.state.viewingMode);let l=!1;t>0?(l=this._intersectionHelper.intersectScreenFreePointFallback(e,this._zoomLocation,0===this.view.map.ground.opacity?w:{}),this._intersectionHelper.intersectRay(this._tmpCamera.ray,p,this._tmpCenter)&&(this._tmpCamera.center=this._tmpCenter)):this._intersectionHelper.intersectRay(this._tmpCamera.ray,p,this._zoomLocation)?this._tmpCamera.center=this._zoomLocation:r(this._zoomLocation,this._tmpCamera.center);const C=M**t;let f=this.view._stage.renderView.getMinimalDepthForArea(j(this.view),e[0],e[1],this.view.state.camera,F);o(A,this._tmpCamera.eye,this._zoomLocation),a(A,A);const g=i(Math.min(d,1/Math.abs(m(O,A)))*Math.abs(this.view.camera.position.z),L,b);if(f=null!=f?f:g,f){const t=_();o(t,this._zoomLocation,this._tmpCamera.eye),(f<n(t)||!l)&&(a(t,t),c(this._zoomLocation,this._tmpCamera.eye,h(t,t,f)))}this._updateCamera(this._tmpCamera,C,this._zoomLocation),this.begin(this._tmpCamera)}animationSettings(){return{duration:e(600),easing:R}}_updateCamera(t,i,e){o(this._tmpRayDir,e,t.eye);const s=n(this._tmpRayDir);let r=s*i;const a=i<=1,m=Math.max(D,1.01*t.nearFar[0]);0!==r&&(a&&r<m&&(r=m,i=r/s),Math.abs(s-r)<1e-6||(h(this._tmpRayDir,this._tmpRayDir,i),t.eye=o(x,e,this._tmpRayDir),t.center=p(x,t.center,e,1-i),C(this.view,t,this._constraintOptions)))}};U=t([s("esri.views.3d.state.controllers.ZoomStepControllerLocal")],U);const x=_(),O=l(0,0,1),A=_();export{U as ZoomStepControllerLocal};