@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 3.94 kB
JavaScript
import{clamp as n}from"../../core/mathUtils.js";import{isSome as t}from"../../core/maybe.js";import{c as r,s as o,k as c,b as e,n as u,e as i,f as s,g as f,a}from"../../chunks/vec3.js";import{c as I}from"../../chunks/vec3f64.js";import{g as N}from"../../chunks/sphere.js";import{projectPointSignedLength as m}from"./vector.js";import{sv4d as M,sv3d as g}from"./vectorStacks.js";import{tangentFrame as h}from"../../views/3d/support/mathUtils.js";function p(n=Z){return[n[0],n[1],n[2],n[3]]}function E(n=Z[0],t=Z[1],r=Z[2],o=Z[3]){return F(n,t,r,o,M.get())}function A(n,t){return F(t[0],t[1],t[2],t[3],n)}function F(n,t,r,o,c=p()){return c[0]=n,c[1]=t,c[2]=r,c[3]=o,c}function T(n,t,o){return r(o,n),o[3]=t,o}function _(n,t,r){const o=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],c=Math.abs(o-1)>1e-5&&o>1e-12?1/Math.sqrt(o):1;return r[0]=t[0]*c,r[1]=t[1]*c,r[2]=t[2]*c,r[3]=-(r[0]*n[0]+r[1]*n[1]+r[2]*n[2]),r}function j(n,t,r,o=p()){const c=r[0]-t[0],e=r[1]-t[1],u=r[2]-t[2],i=n[0]-t[0],s=n[1]-t[1],f=n[2]-t[2],a=e*f-u*s,I=u*i-c*f,N=c*s-e*i,m=a*a+I*I+N*N,M=Math.abs(m-1)>1e-5&&m>1e-12?1/Math.sqrt(m):1;return o[0]=a*M,o[1]=I*M,o[2]=N*M,o[3]=-(o[0]*n[0]+o[1]*n[1]+o[2]*n[2]),o}function v(n,t){return b(n,t,0,1,2)}function b(n,t,r,s,f){const a=n.length/3;if(a<3)return!1;o(l,n[3*r],n[3*r+1],n[3*r+2]);let I=s,N=!1;for(;I<a-1&&!N;){const t=3*I;o(y,n[t],n[t+1],n[t+2]),I++,N=!c(l,y)}if(!N)return!1;for(I=Math.max(I,f),N=!1;I<a&&!N;){const t=3*I;o(X,n[t],n[t+1],n[t+2]),I++,e(d,l,y),u(d,d),e(C,y,X),u(C,C),N=!c(l,X)&&!c(y,X)&&Math.abs(i(d,C))<k}return N?(j(l,y,X,t),!0):(0!==r||1!==s||2!==f)&&b(n,t,0,1,2)}const k=.99619469809,l=I(),y=I(),X=I(),d=I(),C=I();function L(n,t,r){return t!==n&&A(n,t),n[3]=-i(Y(n),r),n}function P(n,t){return t[0]=-n[0],t[1]=-n[1],t[2]=-n[2],t[3]=-n[3],t}function O(n,t,r,o){return s(X,t,n),_(r,X,o)}function q(n,t,r,o){return W(n,t,e(g.get(),r,t),nn,o)}function x(n,r,o){return!!t(r)&&W(n,r.origin,r.direction,tn,o)}function U(n,t,r){return W(n,t.origin,t.vector,$.NONE,r)}function w(n,t,r){return W(n,t.origin,t.vector,$.CLAMP,r)}function S(n,t){return V(n,N(t))-t[3]>=0}function z(n,t){return V(n,N(t))+t[3]<0}function B(n,t){return V(n,t)>=0}function D(n,t){return V(n,t)<0}function G(n,t){const r=i(Y(n),t.ray.direction),o=-V(n,t.ray.origin);if(o<0&&r>=0)return!1;if(r>-1e-6&&r<1e-6)return o>0;if((o<0||r<0)&&!(o<0&&r<0))return!0;const c=o/r;return r>0?c<t.c1&&(t.c1=c):c>t.c0&&(t.c0=c),t.c0<=t.c1}function H(n,t){const r=i(Y(n),t.ray.direction),o=-V(n,t.ray.origin);if(r>-1e-6&&r<1e-6)return o>0;const c=o/r;return r>0?c<t.c1&&(t.c1=c):c>t.c0&&(t.c0=c),t.c0<=t.c1}function J(n,t,r){const o=f(g.get(),Y(n),-n[3]),c=Q(n,e(g.get(),t,o),g.get());return a(r,c,o),r}function K(n,t,r,c){const u=Y(n),i=g.get(),s=g.get();h(u,i,s);const f=e(g.get(),r,t),a=m(i,f),I=m(s,f),N=m(u,f);return o(c,a,I,N)}function Q(n,t,r){const o=f(g.get(),Y(n),i(Y(n),t));return e(r,t,o),r}function R(n,t){return Math.abs(V(n,t))}function V(n,t){return i(Y(n),t)+n[3]}function W(t,r,o,c,e){const u=i(Y(t),o);if(0===u)return!1;let s=-(i(Y(t),r)+t[3])/u;return c&$.CLAMP&&(s=n(s,0,1)),!(!(c&$.INFINITE_MIN)&&s<0||!(c&$.INFINITE_MAX)&&s>1)&&(a(e,r,f(e,o,s)),!0)}function Y(n){return n}const Z=[0,0,1,0];var $;!function(n){n[n.NONE=0]="NONE",n[n.CLAMP=1]="CLAMP",n[n.INFINITE_MIN=4]="INFINITE_MIN",n[n.INFINITE_MAX=8]="INFINITE_MAX"}($||($={}));const nn=$.INFINITE_MIN|$.INFINITE_MAX,tn=$.INFINITE_MAX;export{Z as UP,G as clip,H as clipInfinite,A as copy,p as create,R as distance,v as fromManyPoints,b as fromManyPointsSampleAt,T as fromNormalAndOffset,j as fromPoints,_ as fromPositionAndNormal,F as fromValues,O as fromVectorsAndPoint,q as intersectLine,U as intersectLineSegment,w as intersectLineSegmentClamp,x as intersectRay,B as isPointInside,D as isPointOutside,S as isSphereFullyInside,z as isSphereFullyOutside,P as negate,Y as normal,J as projectPoint,K as projectPointLocal,Q as projectVector,L as setOffsetFromPoint,V as signedDistance,E as wrap};