UNPKG

@arcgis/core

Version:

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

3 lines (2 loc) 2.29 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.19/LICENSE.txt */ import{copy as e,squaredDistance as r,scale as t,subtract as n,add as i,length as o,dot as s,distance as a}from"../../../core/libs/gl-matrix-2/math/vec3.js";import{create as c}from"../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{getReferenceEllipsoid as l}from"../../../geometry/ellipsoidUtils.js";import{containsPoint as u}from"../../../geometry/support/aaBoundingRect.js";import{Intersector as d}from"../webgl-engine/lib/Intersector.js";function g(e,r,t,n){return null!=e.renderCoordsHelper.fromRenderCoords(r.eye,H,n)&&u(t,H)}function f(e,r){return e.elevationProvider?e.elevationProvider.getElevation(r[0],r[1],r[2],e.renderCoordsHelper.spatialReference,"ground")??0:0}function m(o,s,a,c){const l=o.state.camera.clone();s&&a&&c&&(l.eye=s,l.center=a,l.up=c),v(o,l.ray,R)||e(R,l.center);const u=o.state.constraints,d=u.minimumPoiDistance;if(r(l.eye,R)<d){const r=u.collision.enabled;e(j,l.viewForward),t(j,j,d),r?l.eye=n(H,R,j):i(R,l.eye,j);const s=o.renderCoordsHelper,a=s.getAltitude(l.eye),c=u.collision.elevationMargin;r&&a<c&&(n(j,R,l.eye),l.eye=s.setAltitude(H,c,l.eye),i(R,l.eye,j))}return l.center=R,l}function p(e,r,t){const{origin:n,direction:i}=r;if(o(n)<e)return!0;const c=-s(i,n)/o(i);return c<0||c>=a(t,n)}function y(e,t,n){if(!e.state.isGlobal||!e.stateManager.constraintsManager)return!1;const i=f(e,t),o=e.stateManager.constraintsManager.nearFarHeuristic.computeFarDistance(t,i,e.stage.renderer.sceneDepthRange.value.far),s=o*o;return r(t,n)>s}function v(e,r,t){let n=M[e.viewingMode];n||(n=new d(e.state.viewingMode),n.options.backfacesTerrain=!e.state.isGlobal,n.options.invisibleTerrain=!0,M[e.viewingMode]=n);const{isGlobal:i}=e.state,o=i?l(e.spatialReference).radius:0;return!(!e.sceneIntersectionHelper.intersectRay(r,n,t)||y(e,r.origin,t)||i&&!p(o,n.ray,t))||(!(!e.renderCoordsHelper.intersectManifold(r,0,t)||y(e,r.origin,t)||i&&!p(o,n.ray,t))||!!i&&b(r,t,o))}function b(e,r,n){const a=s(e.origin,e.origin)-n*n,c=a>0?Math.sqrt(a)/3:1;return t(r,e.direction,c/o(e.direction)),i(r,r,e.origin),!0}let M={};function w(){M={}}const H=c(),R=c(),j=c();export{m as cameraOnContentAlongViewDirection,w as cleanupIntersectionUtils,g as eyeWithinExtent,f as surfaceElevationBelowRenderLocation};