@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 5.22 kB
JavaScript
import{_ as t}from"../../../chunks/tslib.es6.js";import i from"../../../core/Accessor.js";import{deg2rad as a,rad2deg as e}from"../../../core/mathUtils.js";import{isNone as s}from"../../../core/maybe.js";import{watch as r,sync as n,initial as o}from"../../../core/reactiveUtils.js";import{property as c}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/accessorSupport/ensureType.js";import"../../../core/arrayUtils.js";import{subclass as l}from"../../../core/accessorSupport/decorators/subclass.js";import{ViewingMode as u}from"../../ViewingMode.js";import{applyAll as p}from"../camera/constraintUtils.js";import{surfaceElevationBelowRenderLocation as d}from"../camera/intersectionUtils.js";import{ConstraintTypes as h}from"../camera/constraintUtils/ConstraintTypes.js";import{InteractionType as m}from"../camera/constraintUtils/InteractionType.js";import{TiltMode as v}from"../camera/constraintUtils/TiltMode.js";import{createNearFarHeuristic as w}from"./NearFarHeuristic.js";import{SurfaceCollisionConstraint as _}from"./SurfaceCollisionConstraint.js";let C=class extends i{constructor(t){super(t),this.nearFarHeuristic=w(t.view.state.viewingMode,t.view.basemapTerrain,t.view.renderCoordsHelper.spatialReference)}initialize(){this.addHandles([r((()=>[this.view.constraints?.clipDistance?.near,this.view.constraints?.clipDistance?.far]),(()=>this._clipDistanceNearFarChanged())),r((()=>this.view.constraints?.clipDistance?.mode),(()=>this._updateNearFar())),this.view.state.events.on("before-camera-change",(t=>this._updateCameraNearFar(t))),r((()=>this.view.renderDataExtent),(()=>this._updateNearFar()),n),r((()=>[this.view.constraints?.altitude?.min,this.view.constraints?.altitude?.max]),(()=>this._updateAltitude()),n),r((()=>this.view.constraints?.tilt?.max),(()=>this._updateTiltMax()),n),r((()=>this.view.constraints?.tilt?.mode),(()=>this._updateTilt()),n),r((()=>this.view.state?.camera),(()=>this._updateTiltAutoMax()),n),r((()=>[this.view.map?.ground?.navigationConstraint?.type,this.view.state?.constraints?.collision?.enabled]),(()=>this._updateCollision()),n)]),this.view.state.isLocal&&this.addHandles(r((()=>this.view.renderDataExtent),(t=>this._updateLocalSurfaceDistance(t)),o)),this._updateNearFar(),this.view.state.viewingMode!==u.Local&&this._updateAltitude(),this._updateTilt(),this._updateCollision(),this._set("surfaceCollisionConstraint",new _({view:this.view}))}destroy(){this.surfaceCollisionConstraint&&(this.surfaceCollisionConstraint.destroy(),this._set("surfaceCollisionConstraint",null))}_clipDistanceNearFarChanged(){const t=this.view.constraints?.clipDistance;t&&"auto"!==t.mode&&this.view.state.updateCamera((i=>this._updateCameraNearFarManual(i,t)))}_updateNearFar(){this.view.state.updateCamera((t=>this._updateCameraNearFar(t)))}_updateCameraNearFar(t){const i=this.view.constraints&&this.view.constraints.clipDistance;"manual"===(i?i.mode:"auto")?this._updateCameraNearFarManual(t,i):this._updateCameraNearFarAuto(t,i)}_updateCameraNearFarAuto(t,i){this.nearFarHeuristic.compute(t.eye,t.center,this.view.renderDataExtent,d(this.view,t.eye),t),i&&i.autoUpdate(t.near,t.far)}_updateCameraNearFarManual(t,i){i&&(t.near=i.near,t.far=i.far)}_updateCollision(){const t=this.view.map?.ground?.navigationConstraint?.type,i=!t||"stay-above"===t,a=this.view.state.constraints.collision;if(i!==a.enabled){a.enabled=i,i&&this._reapplyConstraints(h.COLLISION);const t=this.view.constraints&&this.view.constraints.tilt;t&&"auto"!==t.mode||this._updateTiltAuto()}}_updateAltitude(){const t=this.view.constraints&&this.view.constraints.altitude;t&&this.view.state.viewingMode!==u.Local?this.view.state.constraints.altitude={min:t.min,max:t.max}:this.view.state.constraints.altitude=null,this._reapplyConstraints()}_updateTiltMax(){const t=this.view.constraints&&this.view.constraints.tilt;t&&"auto"!==t.mode&&(this._updateTiltManual(t),this._reapplyConstraints())}_updateTilt(){const t=this.view.constraints&&this.view.constraints.tilt;"manual"===(t?t.mode:"auto")?this._updateTiltManual(t):this._updateTiltAuto(),this._reapplyConstraints()}_updateTiltManual(t){const i=this.view.state.constraints;i.tilt=i.createConstantMaxTilt(a(t.max))}_updateTiltAuto(){const t=this.view.state.constraints;t.tilt=t.createDefaultTilt(),this._updateTiltAutoMax()}_updateTiltAutoMax(){const t=this.view.constraints&&this.view.constraints.tilt;if(!t||"auto"!==t.mode)return;const i=this.view.state.constraints;if(i.tilt){const a=i.tilt(this.view.state.camera.distance).max;t.autoUpdate(e(a))}}_updateLocalSurfaceDistance(t){if(s(t))return;let i=Math.max(t.width,t.height);if(i<=0)return;null!=t.zmax&&null!=t.zmin&&(i=Math.max(i,t.zmax-t.zmin));const a=this.view.state,e=3*i/Math.atan(a.camera.fov/2);e!==a.constraints.distance&&(a.constraints.distance=e)}_reapplyConstraints(t=h.ALL){this.view.state.updateCamera((i=>p(this.view,i,{selection:t,interactionType:m.NONE,interactionFactor:null,interactionStartCamera:null,interactionDirection:null,tiltMode:v.TUMBLE})))}};t([c({constructOnly:!0})],C.prototype,"view",void 0),t([c({readOnly:!0})],C.prototype,"surfaceCollisionConstraint",void 0),C=t([l("esri.views.3d.state.ConstraintsManager")],C);export{C as ConstraintsManager};