UNPKG

@arcgis/core

Version:

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

3 lines (2 loc) • 6.47 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */ import t from"../core/Logger.js";import{acosClamped as i}from"../core/mathUtils.js";import{ObjectStack as n}from"../core/ObjectStack.js";import{fromRotation as s,invert as r,transpose as e}from"../core/libs/gl-matrix-2/math/mat4.js";import{create as o}from"../core/libs/gl-matrix-2/factories/mat4f64.js";import{copy as a,dot as c,length as u,set as g,subtract as b,squaredLength as f,exactEquals as l,transformMat4 as p,direction as m,scale as d,add as h,distance as j,normalize as y}from"../core/libs/gl-matrix-2/math/vec3.js";import{clone as I,fromValues as v,create as P}from"../core/libs/gl-matrix-2/factories/vec3f64.js";import{fromValues as N}from"../geometry/support/aaBoundingRect.js";import{create as w,distance2 as x,projectPointClamp as M}from"../geometry/support/lineSegment.js";import{create as S,fromVectorsAndPoint as T,getNormal as V,fromValues as A,signedDistance as _,intersectRay as E,intersectLineSegmentClamp as O,isPointInside as k,intersectLineSegment as F,copy as R,projectPoint as q,setOffsetFromPoint as B,wrap as C}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=()=>t.getLogger("esri.views.3d.support.geometryUtils.boundedPlane");function D(t=wt){return{plane:S(t.plane),origin:I(t.origin),basis1:I(t.basis1),basis2:I(t.basis2)}}function G(t,i,n){const s=Tt.get();return s.origin=t,s.basis1=i,s.basis2=n,s.plane=C(0,0,0,0),K(s),s}function W(t,i=D()){return J(t.origin,t.basis1,t.basis2,i)}function H(t,i){a(i.origin,t.origin),a(i.basis1,t.basis1),a(i.basis2,t.basis2),R(i.plane,t.plane)}function J(t,i,n,s=D()){return a(s.origin,t),a(s.basis1,i),a(s.basis2,n),K(s),Pt(s,"fromValues()"),s}function K(t){T(t.basis2,t.basis1,t.origin,t.plane)}function Q(t,i,n){t!==n&&W(t,n);const s=d(U.get(),ht(t),i);return h(n.origin,n.origin,s),n.plane[3]-=i,n}function X(t,i,n){return $(i,n),Q(n,ft(t,t.origin),n),n}function Z(t,i){const n=t.basis1[0],s=t.basis2[1],[r,e]=t.origin;return N(r-n,e-s,r+n,e+s,i)}function $(t,i=D()){const n=(t[2]-t[0])/2,s=(t[3]-t[1])/2;return g(i.origin,t[0]+n,t[1]+s,0),g(i.basis1,n,0,0),g(i.basis2,0,s,0),A(0,0,1,0,i.plane),i}function tt(t,i,n){return!!E(t.plane,i,n)&&yt(t,n)}function it(t,i,n){if(tt(t,i,n))return n;const s=nt(t,i,U.get());return h(n,i.origin,d(U.get(),i.direction,j(i.origin,s)/u(i.direction))),n}function nt(t,n,s){const r=xt.get();Nt(t,n,r,xt.get());let e=Number.POSITIVE_INFINITY;for(const o of Vt){const u=vt(t,o,Mt.get()),g=U.get();if(F(r,u,g)){const t=m(U.get(),n.origin,g),r=Math.abs(i(c(n.direction,t)));r<e&&(e=r,a(s,g))}}return e===Number.POSITIVE_INFINITY?rt(t,n,s):s}function st(t,i){return(i-t)/i}function rt(t,i,n){if(tt(t,i,n))return n;const s=xt.get(),r=xt.get();Nt(t,i,s,r);let e=Number.POSITIVE_INFINITY;for(const o of Vt){const c=vt(t,o,Mt.get()),u=U.get();if(O(s,c,u)){const t=Y(i,u);if(!k(r,u))continue;t<e&&(e=t,a(n,u))}}return at(t,i.origin)<e&&et(t,i.origin,n),n}function et(t,i,n){const s=q(t.plane,i,U.get()),r=M(It(t,t.basis1),s,-1,1,U.get()),e=M(It(t,t.basis2),s,-1,1,U.get());return b(n,h(U.get(),r,e),t.origin),n}function ot(t,i,n){const{origin:s,basis1:r,basis2:e}=t,o=b(U.get(),i,s),a=L(r,o),c=L(e,o),u=L(ht(t),o);return g(n,a,c,u)}function at(t,i){const n=ot(t,i,U.get()),{basis1:s,basis2:r}=t,e=u(s),o=u(r),a=Math.max(Math.abs(n[0])-e,0),c=Math.max(Math.abs(n[1])-o,0),g=n[2];return a*a+c*c+g*g}function ct(t,i){return Math.sqrt(at(t,i))}function ut(t,i){let n=Number.NEGATIVE_INFINITY;for(const s of Vt){const r=vt(t,s,Mt.get()),e=x(r,i);e>n&&(n=e)}return Math.sqrt(n)}function gt(t,i){return _(t.plane,i)>0&&yt(t,i)}function bt(t,i,n,s){return jt(t,n,s)}function ft(t,i){const n=-t.plane[3];return L(ht(t),i)-n}function lt(t,i,n,s){const r=ft(t,i),e=d(St,ht(t),n-r);return h(s,i,e),s}function pt(t,i){return t===i||null==t&&null==i||null!=t&&null!=i&&l(t.basis1,i.basis1)&&l(t.basis2,i.basis2)&&l(t.origin,i.origin)}function mt(t,i,n){return t!==n&&W(t,n),r(At,i),e(At,At),p(n.basis1,t.basis1,At),p(n.basis2,t.basis2,At),p(V(n.plane),V(t.plane),At),p(n.origin,t.origin,i),B(n.plane,n.plane,n.origin),n}function dt(t,i,n,r){return t!==r&&W(t,r),s(_t,i,n),p(r.basis1,t.basis1,_t),p(r.basis2,t.basis2,_t),K(r),r}function ht(t){return V(t.plane)}function jt(t,i,n){switch(i){case 0:a(n,t.basis1),y(n,n);break;case 1:a(n,t.basis2),y(n,n);break;case 2:a(n,ht(t))}return n}function yt(t,i){const n=b(U.get(),i,t.origin),s=f(t.basis1),r=f(t.basis2),e=c(t.basis1,n),o=c(t.basis2,n);return-e-s<0&&e-s<0&&-o-r<0&&o-r<0}function It(t,i){const n=Mt.get();return a(n.origin,t.origin),a(n.vector,i),n}function vt(t,i,n){const{basis1:s,basis2:r,origin:e}=t,o=d(U.get(),s,i.origin[0]),a=d(U.get(),r,i.origin[1]);h(n.origin,o,a),h(n.origin,n.origin,e);const c=d(U.get(),s,i.direction[0]),u=d(U.get(),r,i.direction[1]);return d(n.vector,h(c,c,u),2),n}function Pt(t,i){Math.abs(c(t.basis1,t.basis2)/(u(t.basis1)*u(t.basis2)))>1e-6&&z().warn(i,"Provided basis vectors are not perpendicular"),Math.abs(c(t.basis1,ht(t)))>1e-6&&z().warn(i,"Basis vectors and plane normal are not perpendicular"),Math.abs(-c(ht(t),t.origin)-t.plane[3])>1e-6&&z().warn(i,"Plane offset is not consistent with plane origin")}function Nt(t,i,n,s){const r=ht(t);T(r,i.direction,i.origin,n),T(V(n),r,i.origin,s)}const wt={plane:S(),origin:v(0,0,0),basis1:v(1,0,0),basis2:v(0,1,0)},xt=new n(S),Mt=new n(w),St=P(),Tt=new n(()=>D()),Vt=[{origin:[-1,-1],direction:[1,0]},{origin:[1,-1],direction:[0,1]},{origin:[1,1],direction:[-1,0]},{origin:[-1,1],direction:[0,-1]}],At=o(),_t=o(),Et=Object.freeze(Object.defineProperty({__proto__:null,altitudeAt:ft,axisAt:bt,cameraFrustumCoverage:st,closestPoint:rt,closestPointOnSilhouette:nt,copy:W,copyWithoutVerify:H,create:D,distance:ct,distance2:at,distanceToSilhouette:ut,elevate:Q,equals:pt,extrusionContainsPoint:gt,fromAABoundingRect:$,fromValues:J,getExtent:Z,intersectRay:tt,intersectRayClosestSilhouette:it,normal:ht,projectPoint:et,projectPointLocal:ot,rotate:dt,setAltitudeAt:lt,setExtent:X,transform:mt,up:wt,updateUnboundedPlane:K,wrap:G},Symbol.toStringTag,{value:"Module"}));export{X as A,mt as B,wt as C,G as D,st as a,Et as b,W as c,D as d,gt as e,J as f,pt as g,$ as h,tt as i,ct as j,ft as k,bt as l,rt as m,ht as n,nt as o,H as p,at as q,dt as r,ut as s,Q as t,K as u,Z as v,it as w,et as x,ot as y,lt as z};