@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 3.43 kB
JavaScript
import{_ as t}from"../../../../../chunks/tslib.es6.js";import{clamp as i}from"../../../../../core/mathUtils.js";import{isSome as e}from"../../../../../core/maybe.js";import{Milliseconds as o}from"../../../../../core/time.js";import"../../../../../core/Logger.js";import"../../../../../core/accessorSupport/ensureType.js";import"../../../../../core/arrayUtils.js";import"../../../../../core/Error.js";import"../../../../../core/has.js";import{subclass as r}from"../../../../../core/accessorSupport/decorators/subclass.js";import{c as s,b as a,n,e as m,l as c,a as p,g as h,h as l}from"../../../../../chunks/vec3.js";import{c as _,f as y}from"../../../../../chunks/vec3f64.js";import{applyAll as C}from"../../../camera/constraintUtils.js";import{ConstraintTypes as f}from"../../../camera/constraintUtils/ConstraintTypes.js";import{InteractionType as j}from"../../../camera/constraintUtils/InteractionType.js";import{TiltMode as u}from"../../../camera/constraintUtils/TiltMode.js";import{PointToPointAnimationController as g}from"../PointToPointAnimationController.js";import{contentIntersectorOptions as v,ZOOM_MAX_DISTANCE_MODIFIER as w,ZOOM_MIN_DISTANCE_MODIFIER as b,ZOOM_DISTANCE_MODIFIER as L}from"../../utils/navigationUtils.js";import{Camera as d}from"../../../webgl-engine/lib/Camera.js";import{newIntersector as z}from"../../../webgl-engine/lib/Intersector.js";import{outExpo as M}from"../../../../animation/easing.js";const D=.6,R=4,S=60;let U=class extends g{constructor(){super(...arguments),this._zoomLocation=_(),this._tmpCamera=new d,this._tmpRayDir=_(),this._tmpCenter=_(),this._constraintOptions={selection:f.ALL,interactionType:j.ZOOM,interactionFactor:null,interactionStartCamera:new d,interactionDirection:null,tiltMode:u.TUMBLE}}zoomStep(t,o){if(!this.active)return;const r=this.view.state,{interactionStartCamera:l}=this._constraintOptions;l&&(this.animation.finished?l.copyFrom(r.camera):this.animation.cameraAt(1,l)),this._tmpCamera.copyFrom(r.camera);const y=z(this.view.state.viewingMode);let C=!1;t>0?(C=this.intersectionHelper.intersectScreenFreePointFallback(o,this._zoomLocation,0===this.view.map.ground.opacity?v:{}),this.intersectionHelper.intersectRay(this._tmpCamera.ray,y,this._tmpCenter)&&(this._tmpCamera.center=this._tmpCenter)):this.intersectionHelper.intersectRay(this._tmpCamera.ray,y,this._zoomLocation)?this._tmpCamera.center=this._zoomLocation:s(this._zoomLocation,this._tmpCamera.center);const f=D**t;let j=this.view._stage.renderView.getMinimalDepthForArea(this.view.voxelWasm,o[0],o[1],this.view.state.camera,S);a(O,this._tmpCamera.eye,this._zoomLocation),n(O,O);const u=i(Math.min(L,1/Math.abs(m(T,O)))*Math.abs(this.view.camera.position.z),b,w);if(j=e(j)?j:u,j){const t=_();a(t,this._zoomLocation,this._tmpCamera.eye),(j<c(t)||!C)&&(n(t,t),p(this._zoomLocation,this._tmpCamera.eye,h(t,t,j)))}this._updateCamera(this._tmpCamera,f,this._zoomLocation),this.begin(this._tmpCamera)}animationSettings(){return{duration:o(600),easing:M}}_updateCamera(t,i,e){a(this._tmpRayDir,e,t.eye);const o=c(this._tmpRayDir);let r=o*i;const s=i<=1,n=Math.max(R,1.01*t.nearFar[0]);0!==r&&(s&&r<n&&(r=n,i=r/o),Math.abs(o-r)<1e-6||(h(this._tmpRayDir,this._tmpRayDir,i),t.eye=a(F,e,this._tmpRayDir),t.center=l(F,t.center,e,1-i),C(this.view,t,this._constraintOptions)))}};U=t([r("esri.views.3d.state.controllers.local.ZoomStepController")],U);const F=_(),T=y(0,0,1),O=_();export{U as ZoomStepController};