UNPKG

@arcgis/core

Version:

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

6 lines (5 loc) • 6.25 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.32/esri/copyright.txt for details. */ import{a as n,i as t,c as o,e as i,n as e}from"../../../../chunks/vec32.js";import{create as c}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{create as s,setMin as r,setMax as f}from"../../../../geometry/support/aaBoundingBox.js";import{ContentObjectType as u}from"./ContentObjectType.js";import{assert as a}from"./Util.js";import{VertexAttribute as l}from"./VertexAttribute.js";class h{constructor(n=!1,t=!0){this.isVerticalRay=n,this.normalRequired=t}}const m=s();function p(t,o,i,e,c,s){if(!t.visible)return;const r=n(U,e,i),f=(n,t,o)=>{s(n,o,t,!1)},m=new h(!1,o.options.normalRequired);if(t.boundingInfo){a(t.type===u.Mesh);const n=o.tolerance;b(t.boundingInfo,i,r,n,c,m,f)}else{const n=t.attributes.get(l.POSITION),o=n.indices;j(i,r,0,o.length/3,o,n.data,n.stride,c,m,f)}}const M=c();function b(n,t,o,i,e,c,s){if(null==n)return;const u=k(o,M);if(r(m,n.bbMin),f(m,n.bbMax),null!=e&&e.applyToAabb(m),w(m,t,u,i)){const{primitiveIndices:r,position:f}=n,u=r?r.length:f.indices.length/3;if(u>P){const r=n.getChildren();if(void 0!==r){for(const n of r)b(n,t,o,i,e,c,s);return}}V(t,o,0,u,f.indices,f.data,f.stride,r,e,c,s)}}const d=c();function x(t,o,i,e,c,s,r,f,u){const{data:a,stride:l}=s;j(t,n(U,o,t),i,e,c,a,l,r,f,u)}function g(n,t,o,i,e,c,s,r,f,u=null,a=0){const l=n[0],h=n[1],m=n[2],p=t[0],M=t[1],b=t[2];for(let x=o;x<i;++x){const n=a+(u?u[x]:x),t=3*n,o=s*e[t],i=c[o],g=c[o+1],y=c[o+2],T=s*e[t+1],V=c[T],j=c[T+1],q=c[T+2],v=s*e[t+2],I=V-i,O=j-g,A=q-y,B=c[v]-i,C=c[v+1]-g,k=c[v+2]-y,w=M*k-C*b,N=b*B-k*p,P=p*C-B*M,U=I*w+O*N+A*P;if(Math.abs(U)<=S)continue;const z=l-i,D=h-g,E=m-y,F=z*w+D*N+E*P;if(U>0){if(F<0||F>U)continue}else if(F>0||F<U)continue;const G=D*A-O*E,H=E*I-A*z,J=z*O-I*D,K=p*G+M*H+b*J;if(U>0){if(K<0||F+K>U)continue}else if(K>0||F+K<U)continue;const L=(B*G+C*H+k*J)/U;if(L>=0){f(L,n,r?R(I,O,A,B,C,k,d):null)}}}function y(n,t,o,i,e,c,s,r){const f=n[0],u=n[1],a=n[2],l=t[0],h=t[1],m=t[2];for(let p=o;p<i;++p){const n=3*p,t=n+1,o=n+2,i=c*n,M=e[i],b=e[i+1],x=e[i+2],g=c*t,y=c*o,T=e[g]-M,V=e[g+1]-b,j=e[g+2]-x,q=e[y]-M,v=e[y+1]-b,I=e[y+2]-x,O=h*I-v*m,A=m*q-I*l,B=l*v-q*h,C=T*O+V*A+j*B;if(Math.abs(C)<=S)continue;const k=f-M,w=u-b,N=a-x,P=k*O+w*A+N*B;if(C>0){if(P<0||P>C)continue}else if(P>0||P<C)continue;const U=w*j-V*N,z=N*T-j*k,D=k*V-T*w,E=l*U+h*z+m*D;if(C>0){if(E<0||P+E>C)continue}else if(E>0||P+E<C)continue;const F=(q*U+v*z+I*D)/C;if(F>=0){r(F,p,s?R(T,V,j,q,v,I,d):null)}}}function T(n,t,o,i,e,c,s,r,f,u,a,l=null,h=0){const m=n[0],p=n[1],M=n[2],b=t[0],x=t[1],g=t[2];for(let y=o;y<i;++y){const n=h+(l?l[y]:y),t=3*n,o=s*e[t],i=c[o],T=c[o+1],V=c[o+2],j=s*e[t+1],q=c[j],v=c[j+1],I=c[j+2],O=s*e[t+2],A=c[O],B=c[O+1],C=c[O+2],k=V-f,w=r/Math.sqrt(i*i+T*T+k*k),N=i+i*w,P=T+T*w,U=V+k*w,z=I-f,D=r/Math.sqrt(q*q+v*v+z*z),E=q+q*D,F=v+v*D,G=I+z*D,H=C-f,J=r/Math.sqrt(A*A+B*B+H*H),K=E-N,L=F-P,Q=G-U,W=A+A*J-N,X=B+B*J-P,Y=C+H*J-U,Z=x*Y-X*g,$=g*W-Y*b,_=b*X-W*x,nn=K*Z+L*$+Q*_;if(Math.abs(nn)<=S)continue;const tn=m-N,on=p-P,en=M-U,cn=tn*Z+on*$+en*_;if(nn>0){if(cn<0||cn>nn)continue}else if(cn>0||cn<nn)continue;const sn=on*Q-L*en,rn=en*K-Q*tn,fn=tn*L-K*on,un=b*sn+x*rn+g*fn;if(nn>0){if(un<0||cn+un>nn)continue}else if(un>0||cn+un<nn)continue;const an=(W*sn+X*rn+Y*fn)/nn;if(an>=0){a(an,n,u?R(K,L,Q,W,X,Y,d):null)}}}function V(n,t,o,i,e,c,s,r,f,u,a){const l=n[0],h=n[1],m=n[2],p=t[0],M=t[1],b=t[2],{normalRequired:x}=u;for(let g=o;g<i;++g){const n=r[g],t=3*n,o=s*e[t];let i=c[o],u=c[o+1],y=c[o+2];const T=s*e[t+1];let V=c[T],j=c[T+1],q=c[T+2];const v=s*e[t+2];let I=c[v],O=c[v+1],A=c[v+2];null!=f&&([i,u,y]=f.applyToVertex(i,u,y,g),[V,j,q]=f.applyToVertex(V,j,q,g),[I,O,A]=f.applyToVertex(I,O,A,g));const B=V-i,C=j-u,k=q-y,w=I-i,N=O-u,P=A-y,U=M*P-N*b,z=b*w-P*p,D=p*N-w*M,E=B*U+C*z+k*D;if(Math.abs(E)<=S)continue;const F=l-i,G=h-u,H=m-y,J=F*U+G*z+H*D;if(E>0){if(J<0||J>E)continue}else if(J>0||J<E)continue;const K=G*k-C*H,L=H*B-k*F,Q=F*C-B*G,W=p*K+M*L+b*Q;if(E>0){if(W<0||J+W>E)continue}else if(W>0||J+W<E)continue;const X=(w*K+N*L+P*Q)/E;if(X>=0){a(X,n,x?R(B,C,k,w,N,P,d):null)}}}function j(i,e,c,s,r,f,u,a,l,h){const m=e,p=z,M=Math.abs(m[0]),b=Math.abs(m[1]),d=Math.abs(m[2]),x=M>=b?M>=d?0:2:b>=d?1:2,g=x,y=m[g]<0?2:1,T=(x+y)%3,V=(x+(3-y))%3,j=m[T]/m[g],R=m[V]/m[g],A=1/m[g],B=q,C=v,k=I,{normalRequired:w}=l;for(let q=c;q<s;++q){const e=3*q,c=u*r[e];t(p[0],f[c+0],f[c+1],f[c+2]);const s=u*r[e+1];t(p[1],f[s+0],f[s+1],f[s+2]);const l=u*r[e+2];t(p[2],f[l+0],f[l+1],f[l+2]),a&&(o(p[0],a.applyToVertex(p[0][0],p[0][1],p[0][2],q)),o(p[1],a.applyToVertex(p[1][0],p[1][1],p[1][2],q)),o(p[2],a.applyToVertex(p[2][0],p[2][1],p[2][2],q))),n(B,p[0],i),n(C,p[1],i),n(k,p[2],i);const m=B[T]-j*B[g],M=B[V]-R*B[g],b=C[T]-j*C[g],d=C[V]-R*C[g],x=k[T]-j*k[g],y=k[V]-R*k[g],v=x*d-y*b,I=m*y-M*x,N=b*M-d*m;if((v<0||I<0||N<0)&&(v>0||I>0||N>0))continue;const P=v+I+N;if(0===P)continue;const S=v*(A*B[g])+I*(A*C[g])+N*(A*k[g]);if(S*Math.sign(P)<0)continue;const U=S/P;if(U>=0){h(U,q,w?O(p):null)}}}const q=c(),v=c(),I=c();function R(n,o,c,s,r,f,u){return t(A,n,o,c),t(B,s,r,f),i(u,A,B),e(u,u),u}function O(t){return n(A,t[1],t[0]),n(B,t[2],t[0]),i(d,A,B),e(d,d),d}const A=c(),B=c();function C(n,o,i){return t(i,1/(o[0]-n[0]),1/(o[1]-n[1]),1/(o[2]-n[2]))}function k(n,o){return t(o,1/n[0],1/n[1],1/n[2])}function w(n,t,o,i){return N(n,t,o,i,1/0)}function N(n,t,o,i,e){const c=(n[0]-i-t[0])*o[0],s=(n[3]+i-t[0])*o[0];let r=Math.min(c,s),f=Math.max(c,s);const u=(n[1]-i-t[1])*o[1],a=(n[4]+i-t[1])*o[1];if(f=Math.min(f,Math.max(u,a)),f<0)return!1;if(r=Math.max(r,Math.min(u,a)),r>f)return!1;const l=(n[2]-i-t[2])*o[2],h=(n[5]+i-t[2])*o[2];return f=Math.min(f,Math.max(l,h)),!(f<0)&&(r=Math.max(r,Math.min(l,h)),!(r>f)&&r<e)}const P=1e3,S=1e-7,U=c(),z=[c(),c(),c()];export{h as MeshIntersectionOptions,C as computeInvDir,k as computeInvDirFromDirection,R as computeNormalFromBarycentric,w as intersectAabbInvDir,N as intersectAabbInvDirBefore,g as intersectRayTriangles,j as intersectRayTrianglesWithDisplacementWatertight,T as intersectRayTrianglesWithVerticalOffsetENUGlobal,y as intersectRenderGeometryTriangles,p as intersectTriangleGeometry,x as intersectTriangles,S as triangleRayParallelTolerance};