@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 6.59 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.33/esri/copyright.txt for details.
*/
import"../core/has.js";import s from"../core/Logger.js";import{acosClamped as t}from"../core/mathUtils.js";import{ObjectStack as i}from"../core/ObjectStack.js";import{invert as n,transpose as r,fromRotation as o}from"../core/libs/gl-matrix-2/math/mat4.js";import{create as e}from"../core/libs/gl-matrix-2/factories/mat4f64.js";import{c as a,g as c,f as u,i as g,j as b,l as f,E as p,e as l,d as m,q as d,t as h,k as j,n as y}from"./vec32.js";import{fromValues as I,clone as P,create as v}from"../core/libs/gl-matrix-2/factories/vec3f64.js";import{fromValues as N}from"../geometry/support/aaBoundingRect.js";import{Axis as w}from"../geometry/support/Axis.js";import{projectPointClamp as x,distance2 as M,create as S}from"../geometry/support/lineSegment.js";import{create as T,wrap as V,copy as A,fromVectorsAndPoint as E,fromValues as _,intersectRay as O,intersectLineSegment as k,intersectLineSegmentClamp as q,isPointInside as B,projectPoint as C,getNormal as F,setOffsetFromPoint as R}from"../geometry/support/plane.js";import{distance2 as Y}from"../geometry/support/ray.js";import{projectPointSignedLength as L}from"../geometry/support/vector.js";import{sv3d as U}from"../geometry/support/vectorStacks.js";const z=()=>s.getLogger("esri.views.3d.support.geometryUtils.boundedPlane");class D{constructor(){this.plane=T(),this.origin=v(),this.basis1=v(),this.basis2=v()}}const G=D;function W(s=Ms){return{plane:T(s.plane),origin:P(s.origin),basis1:P(s.basis1),basis2:P(s.basis2)}}function X(s,t,i){const n=As.get();return n.origin=s,n.basis1=t,n.basis2=i,n.plane=V(0,0,0,0),K(n),n}function Z(s,t=W()){return J(s.origin,s.basis1,s.basis2,t)}function H(s,t){a(t.origin,s.origin),a(t.basis1,s.basis1),a(t.basis2,s.basis2),A(t.plane,s.plane)}function J(s,t,i,n=W()){return a(n.origin,s),a(n.basis1,t),a(n.basis2,i),K(n),ws(n,"fromValues()"),n}function K(s){E(s.basis2,s.basis1,s.origin,s.plane)}function Q(s,t,i){s!==i&&Z(s,i);const n=c(U.get(),ys(s),t);return u(i.origin,i.origin,n),i.plane[3]-=t,i}function $(s,t,i){return ts(t,i),Q(i,ls(s,s.origin),i),i}function ss(s,t){const i=s.basis1[0],n=s.basis2[1],[r,o]=s.origin;return N(r-i,o-n,r+i,o+n,t)}function ts(s,t=W()){const i=(s[2]-s[0])/2,n=(s[3]-s[1])/2;return g(t.origin,s[0]+i,s[1]+n,0),g(t.basis1,i,0,0),g(t.basis2,0,n,0),_(0,0,1,0,t.plane),t}function is(s,t,i){return!!O(s.plane,t,i)&&Ps(s,i)}function ns(s,t,i){if(is(s,t,i))return i;const n=rs(s,t,U.get());return u(i,t.origin,c(U.get(),t.direction,b(t.origin,n)/f(t.direction))),i}function rs(s,i,n){const r=Ss.get();xs(s,i,r,Ss.get());let o=Number.POSITIVE_INFINITY;for(const e of Es){const c=Ns(s,e,Ts.get()),u=U.get();if(k(r,c,u)){const s=p(U.get(),i.origin,u),r=Math.abs(t(l(i.direction,s)));r<o&&(o=r,a(n,u))}}return o===Number.POSITIVE_INFINITY?es(s,i,n):n}function os(s,t){return(t-s)/t}function es(s,t,i){if(is(s,t,i))return i;const n=Ss.get(),r=Ss.get();xs(s,t,n,r);let o=Number.POSITIVE_INFINITY;for(const e of Es){const c=Ns(s,e,Ts.get()),u=U.get();if(q(n,c,u)){const s=Y(t,u);if(!B(r,u))continue;s<o&&(o=s,a(i,u))}}return us(s,t.origin)<o&&as(s,t.origin,i),i}function as(s,t,i){const n=C(s.plane,t,U.get()),r=x(vs(s,s.basis1),n,-1,1,U.get()),o=x(vs(s,s.basis2),n,-1,1,U.get());return m(i,u(U.get(),r,o),s.origin),i}function cs(s,t,i){const{origin:n,basis1:r,basis2:o}=s,e=m(U.get(),t,n),a=L(r,e),c=L(o,e),u=L(ys(s),e);return g(i,a,c,u)}function us(s,t){const i=cs(s,t,U.get()),{basis1:n,basis2:r}=s,o=f(n),e=f(r),a=Math.max(Math.abs(i[0])-o,0),c=Math.max(Math.abs(i[1])-e,0),u=i[2];return a*a+c*c+u*u}function gs(s,t){return Math.sqrt(us(s,t))}function bs(s,t){let i=Number.NEGATIVE_INFINITY;for(const n of Es){const r=Ns(s,n,Ts.get()),o=M(r,t);o>i&&(i=o)}return Math.sqrt(i)}function fs(s,t){return B(s.plane,t)&&Ps(s,t)}function ps(s,t,i,n){return Is(s,i,n)}function ls(s,t){const i=-s.plane[3];return L(ys(s),t)-i}function ms(s,t,i,n){const r=ls(s,t),o=c(Vs,ys(s),i-r);return u(n,t,o),n}function ds(s,t){return d(s.basis1,t.basis1)&&d(s.basis2,t.basis2)&&d(s.origin,t.origin)}function hs(s,t,i){return s!==i&&Z(s,i),n(_s,t),r(_s,_s),h(i.basis1,s.basis1,_s),h(i.basis2,s.basis2,_s),h(F(i.plane),F(s.plane),_s),h(i.origin,s.origin,t),R(i.plane,i.plane,i.origin),i}function js(s,t,i,n){return s!==n&&Z(s,n),o(Os,t,i),h(n.basis1,s.basis1,Os),h(n.basis2,s.basis2,Os),K(n),n}function ys(s){return F(s.plane)}function Is(s,t,i){switch(t){case w.X:a(i,s.basis1),y(i,i);break;case w.Y:a(i,s.basis2),y(i,i);break;case w.Z:a(i,ys(s))}return i}function Ps(s,t){const i=m(U.get(),t,s.origin),n=j(s.basis1),r=j(s.basis2),o=l(s.basis1,i),e=l(s.basis2,i);return-o-n<0&&o-n<0&&-e-r<0&&e-r<0}function vs(s,t){const i=Ts.get();return a(i.origin,s.origin),a(i.vector,t),i}function Ns(s,t,i){const{basis1:n,basis2:r,origin:o}=s,e=c(U.get(),n,t.origin[0]),a=c(U.get(),r,t.origin[1]);u(i.origin,e,a),u(i.origin,i.origin,o);const g=c(U.get(),n,t.direction[0]),b=c(U.get(),r,t.direction[1]);return c(i.vector,u(g,g,b),2),i}function ws(s,t){Math.abs(l(s.basis1,s.basis2)/(f(s.basis1)*f(s.basis2)))>1e-6&&z().warn(t,"Provided basis vectors are not perpendicular"),Math.abs(l(s.basis1,ys(s)))>1e-6&&z().warn(t,"Basis vectors and plane normal are not perpendicular"),Math.abs(-l(ys(s),s.origin)-s.plane[3])>1e-6&&z().warn(t,"Plane offset is not consistent with plane origin")}function xs(s,t,i,n){const r=ys(s);E(r,t.direction,t.origin,i),E(F(i),r,t.origin,n)}const Ms={plane:T(),origin:I(0,0,0),basis1:I(1,0,0),basis2:I(0,1,0)},Ss=new i(T),Ts=new i(S),Vs=v(),As=new i((()=>W())),Es=[{origin:[-1,-1],direction:[1,0]},{origin:[1,-1],direction:[0,1]},{origin:[1,1],direction:[-1,0]},{origin:[-1,1],direction:[0,-1]}],_s=e(),Os=e(),ks=Object.freeze(Object.defineProperty({__proto__:null,BoundedPlaneClass:G,altitudeAt:ls,axisAt:ps,cameraFrustumCoverage:os,closestPoint:es,closestPointOnSilhouette:rs,copy:Z,copyWithoutVerify:H,create:W,distance:gs,distance2:us,distanceToSilhouette:bs,elevate:Q,equals:ds,extrusionContainsPoint:fs,fromAABoundingRect:ts,fromValues:J,getExtent:ss,intersectRay:is,intersectRayClosestSilhouette:ns,normal:ys,projectPoint:as,projectPointLocal:cs,rotate:js,setAltitudeAt:ms,setExtent:$,transform:hs,up:Ms,updateUnboundedPlane:K,wrap:X},Symbol.toStringTag,{value:"Module"}));export{ps as A,G as B,ls as C,ms as D,Ms as E,Z as a,ks as b,os as c,W as d,fs as e,J as f,ds as g,ts as h,is as i,gs as j,H as k,Q as l,ss as m,ys as n,ns as o,rs as p,es as q,js as r,$ as s,hs as t,K as u,as as v,X as w,cs as x,us as y,bs as z};