UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 6.04 kB
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{a as n,t as o,d as r}from"./mat4.js";import{c as e}from"./mat4f64.js";import{c as a,g as c,a as u,s as g,i as b,l as f,r as p,e as l,b as m,k 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,fromValues as _,intersectRay as O,intersectLineSegment as k,intersectLineSegmentClamp as E,isPointInside as U,projectPoint as Y,normal 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()}}const G=z;function W(s=Ns){return{plane:T(s.plane),origin:P(s.origin),basis1:P(s.basis1),basis2:P(s.basis2)}}function X(s,t,i){const n=Ts.get();return n.origin=s,n.basis1=t,n.basis2=i,n.plane=A(0,0,0,0),J(n),n}function Z(s,t=W()){return H(s.origin,s.basis1,s.basis2,t)}function D(s,t){a(t.origin,s.origin),a(t.basis1,s.basis1),a(t.basis2,s.basis2),x(t.plane,s.plane)}function H(s,t,i,n=W()){return a(n.origin,s),a(n.basis1,t),a(n.basis2,i),J(n),Ps(n,"fromValues()"),n}function J(s){V(s.basis2,s.basis1,s.origin,s.plane)}function K(s,t,i){s!==i&&Z(s,i);const n=c(C.get(),ds(s),t);return u(i.origin,i.origin,n),i.plane[3]-=t,i}function Q(s,t,i){return $(t,i),K(i,bs(s,s.origin),i),i}function $(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 ss(s,t,i){return!!O(s.plane,t,i)&&js(s,i)}function ts(s,t,i){if(ss(s,t,i))return i;const n=is(s,t,C.get());return u(i,t.origin,c(C.get(),t.direction,b(t.origin,n)/f(t.direction))),i}function is(s,i,n){const o=ws.get();vs(s,i,o,ws.get());let r=Number.POSITIVE_INFINITY;for(const e of As){const c=ys(s,e,Ms.get()),u=C.get();if(k(o,c,u)){const s=p(C.get(),i.origin,u),o=Math.abs(t(l(i.direction,s)));o<r&&(r=o,a(n,u))}}return r===Number.POSITIVE_INFINITY?ns(s,i,n):n}function ns(s,t,i){if(ss(s,t,i))return i;const n=ws.get(),o=ws.get();vs(s,t,n,o);let r=Number.POSITIVE_INFINITY;for(const e of As){const c=ys(s,e,Ms.get()),u=C.get();if(E(n,c,u)){const s=F(t,u);if(!U(o,u))continue;s<r&&(r=s,a(i,u))}}return es(s,t.origin)<r&&os(s,t.origin,i),i}function os(s,t,i){const n=Y(s.plane,t,C.get()),o=M(Is(s,s.basis1),n,-1,1,C.get()),r=M(Is(s,s.basis2),n,-1,1,C.get());return m(i,u(C.get(),o,r),s.origin),i}function rs(s,t,i){const{origin:n,basis1:o,basis2:r}=s,e=m(C.get(),t,n),a=R(o,e),c=R(r,e),u=R(ds(s),e);return g(i,a,c,u)}function es(s,t){const i=rs(s,t,C.get()),{basis1:n,basis2:o}=s,r=f(n),e=f(o),a=Math.max(Math.abs(i[0])-r,0),c=Math.max(Math.abs(i[1])-e,0),u=i[2];return a*a+c*c+u*u}function as(s,t){return Math.sqrt(es(s,t))}function cs(s,t){let i=Number.NEGATIVE_INFINITY;for(const n of As){const o=ys(s,n,Ms.get()),r=S(o,t);r>i&&(i=r)}return Math.sqrt(i)}function us(s,t){return U(s.plane,t)&&js(s,t)}function gs(s,t,i,n){return hs(s,i,n)}function bs(s,t){const i=-s.plane[3];return R(ds(s),t)-i}function fs(s,t,i,n){const o=bs(s,t),r=c(Ss,ds(s),i-o);return u(n,t,r),n}function ps(s,t){return d(s.basis1,t.basis1)&&d(s.basis2,t.basis2)&&d(s.origin,t.origin)}function ls(s,t,i){return s!==i&&Z(s,i),n(xs,t),o(xs,xs),h(i.basis1,s.basis1,xs),h(i.basis2,s.basis2,xs),h(q(i.plane),q(s.plane),xs),h(i.origin,s.origin,t),B(i.plane,i.plane,i.origin),i}function ms(s,t,i,n){return s!==n&&Z(s,n),r(Vs,t,i),h(n.basis1,s.basis1,Vs),h(n.basis2,s.basis2,Vs),J(n),n}function ds(s){return q(s.plane)}function hs(s,t,i){switch(t){case N.X:a(i,s.basis1),j(i,i);break;case N.Y:a(i,s.basis2),j(i,i);break;case N.Z:a(i,ds(s))}return i}function js(s,t){const i=m(C.get(),t,s.origin),n=I(s.basis1),o=I(s.basis2),r=l(s.basis1,i),e=l(s.basis2,i);return-r-n<0&&r-n<0&&-e-o<0&&e-o<0}function Is(s,t){const i=Ms.get();return a(i.origin,s.origin),a(i.vector,t),i}function ys(s,t,i){const{basis1:n,basis2:o,origin:r}=s,e=c(C.get(),n,t.origin[0]),a=c(C.get(),o,t.origin[1]);u(i.origin,e,a),u(i.origin,i.origin,r);const g=c(C.get(),n,t.direction[0]),b=c(C.get(),o,t.direction[1]);return c(i.vector,u(g,g,b),2),i}function Ps(s,t){Math.abs(l(s.basis1,s.basis2)/(f(s.basis1)*f(s.basis2)))>1e-6&&L.warn(t,"Provided basis vectors are not perpendicular"),Math.abs(l(s.basis1,ds(s)))>1e-6&&L.warn(t,"Basis vectors and plane normal are not perpendicular"),Math.abs(-l(ds(s),s.origin)-s.plane[3])>1e-6&&L.warn(t,"Plane offset is not consistent with plane origin")}function vs(s,t,i,n){const o=ds(s);V(o,t.direction,t.origin,i),V(q(i),o,t.origin,n)}const Ns={plane:T(),origin:y(0,0,0),basis1:y(1,0,0),basis2:y(0,1,0)},ws=new i(T),Ms=new i(w),Ss=v(),Ts=new i((()=>W())),As=[{origin:[-1,-1],direction:[1,0]},{origin:[1,-1],direction:[0,1]},{origin:[1,1],direction:[-1,0]},{origin:[-1,1],direction:[0,-1]}],xs=e(),Vs=e(),_s=Object.freeze(Object.defineProperty({__proto__:null,BoundedPlaneClass:G,UP:Ns,altitudeAt:bs,axisAt:gs,closestPoint:ns,closestPointOnSilhouette:is,copy:Z,copyWithoutVerify:D,create:W,distance:as,distance2:es,distanceToSilhouette:cs,elevate:K,equals:ps,extrusionContainsPoint:us,fromAABoundingRect:$,fromValues:H,intersectRay:ss,intersectRayClosestSilhouette:ts,normal:ds,projectPoint:os,projectPointLocal:rs,rotate:ms,setAltitudeAt:fs,setExtent:Q,transform:ls,updateUnboundedPlane:J,wrap:X},Symbol.toStringTag,{value:"Module"}));export{fs as A,G as B,Ns as U,W as a,_s as b,Z as c,ps as d,us as e,H as f,$ as g,as as h,ss as i,D as j,K as k,ts as l,is as m,ds as n,ns as o,os as p,rs as q,ms as r,Q as s,ls as t,J as u,es as v,X as w,cs as x,gs as y,bs as z};