boundedPlane.js 6.1 KB

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