@ridp/threejs 1.5.1 → 1.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,24 @@
1
+ "use strict";const cn=require("./PredictiveLoader-c5o_CMyI.cjs"),O=require("three");/*!
2
+ fflate - fast JavaScript compression/decompression
3
+ <https://101arrowz.github.io/fflate>
4
+ Licensed under MIT. https://github.com/101arrowz/fflate/blob/master/LICENSE
5
+ version 0.8.2
6
+ */var se=Uint8Array,De=Uint16Array,$n=Int32Array,an=new se([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),un=new se([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Vn=new se([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),hn=function(i,h){for(var p=new De(31),S=0;S<31;++S)p[S]=h+=1<<i[S-1];for(var y=new $n(p[30]),S=1;S<30;++S)for(var k=p[S];k<p[S+1];++k)y[k]=k-p[S]<<5|S;return{b:p,r:y}},pn=hn(an,2),fn=pn.b,Jn=pn.r;fn[28]=258,Jn[258]=28;var Qn=hn(un,0),jn=Qn.b,je=new De(32768);for(var G=0;G<32768;++G){var Ue=(G&43690)>>1|(G&21845)<<1;Ue=(Ue&52428)>>2|(Ue&13107)<<2,Ue=(Ue&61680)>>4|(Ue&3855)<<4,je[G]=((Ue&65280)>>8|(Ue&255)<<8)>>1}var He=function(i,h,p){for(var S=i.length,y=0,k=new De(h);y<S;++y)i[y]&&++k[i[y]-1];var T=new De(h);for(y=1;y<h;++y)T[y]=T[y-1]+k[y-1]<<1;var J;if(p){J=new De(1<<h);var ye=15-h;for(y=0;y<S;++y)if(i[y])for(var Ae=y<<4|i[y],ce=h-i[y],b=T[i[y]-1]++<<ce,P=b|(1<<ce)-1;b<=P;++b)J[je[b]>>ye]=Ae}else for(J=new De(S),y=0;y<S;++y)i[y]&&(J[y]=je[T[i[y]-1]++]>>15-i[y]);return J},Ze=new se(288);for(var G=0;G<144;++G)Ze[G]=8;for(var G=144;G<256;++G)Ze[G]=9;for(var G=256;G<280;++G)Ze[G]=7;for(var G=280;G<288;++G)Ze[G]=8;var mn=new se(32);for(var G=0;G<32;++G)mn[G]=5;var et=He(Ze,9,1),nt=He(mn,5,1),Ve=function(i){for(var h=i[0],p=1;p<i.length;++p)i[p]>h&&(h=i[p]);return h},ue=function(i,h,p){var S=h/8|0;return(i[S]|i[S+1]<<8)>>(h&7)&p},Je=function(i,h){var p=h/8|0;return(i[p]|i[p+1]<<8|i[p+2]<<16)>>(h&7)},tt=function(i){return(i+7)/8|0},rt=function(i,h,p){return(p==null||p>i.length)&&(p=i.length),new se(i.subarray(h,p))},ot=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],he=function(i,h,p){var S=new Error(h||ot[i]);if(S.code=i,Error.captureStackTrace&&Error.captureStackTrace(S,he),!p)throw S;return S},lt=function(i,h,p,S){var y=i.length,k=0;if(!y||h.f&&!h.l)return p||new se(0);var T=!p,J=T||h.i!=2,ye=h.i;T&&(p=new se(y*3));var Ae=function(ke){var Ge=p.length;if(ke>Ge){var Le=new se(Math.max(Ge*2,ke));Le.set(p),p=Le}},ce=h.f||0,b=h.p||0,P=h.b||0,pe=h.l,Ne=h.d,Ie=h.m,ae=h.n,fe=y*8;do{if(!pe){ce=ue(i,b,1);var Me=ue(i,b+1,3);if(b+=3,Me)if(Me==1)pe=et,Ne=nt,Ie=9,ae=5;else if(Me==2){var Te=ue(i,b,31)+257,me=ue(i,b+10,15)+4,C=Te+ue(i,b+5,31)+1;b+=14;for(var A=new se(C),x=new se(19),U=0;U<me;++U)x[Vn[U]]=ue(i,b+U*3,7);b+=me*3;for(var F=Ve(x),Z=(1<<F)-1,R=He(x,F,1),U=0;U<C;){var Y=R[ue(i,b,Z)];b+=Y&15;var ee=Y>>4;if(ee<16)A[U++]=ee;else{var N=0,ne=0;for(ee==16?(ne=3+ue(i,b,3),b+=2,N=A[U-1]):ee==17?(ne=3+ue(i,b,7),b+=3):ee==18&&(ne=11+ue(i,b,127),b+=7);ne--;)A[U++]=N}}var de=A.subarray(0,Te),Q=A.subarray(Te);Ie=Ve(de),ae=Ve(Q),pe=He(de,Ie,1),Ne=He(Q,ae,1)}else he(1);else{var ee=tt(b)+4,ge=i[ee-4]|i[ee-3]<<8,Ce=ee+ge;if(Ce>y){ye&&he(0);break}J&&Ae(P+ge),p.set(i.subarray(ee,Ce),P),h.b=P+=ge,h.p=b=Ce*8,h.f=ce;continue}if(b>fe){ye&&he(0);break}}J&&Ae(P+131072);for(var q=(1<<Ie)-1,Oe=(1<<ae)-1,X=b;;X=b){var N=pe[Je(i,b)&q],K=N>>4;if(b+=N&15,b>fe){ye&&he(0);break}if(N||he(2),K<256)p[P++]=K;else if(K==256){X=b,pe=null;break}else{var ve=K-254;if(K>264){var U=K-257,be=an[U];ve=ue(i,b,(1<<be)-1)+fn[U],b+=be}var L=Ne[Je(i,b)&Oe],Ee=L>>4;L||he(3),b+=L&15;var Q=jn[Ee];if(Ee>3){var be=un[Ee];Q+=Je(i,b)&(1<<be)-1,b+=be}if(b>fe){ye&&he(0);break}J&&Ae(P+131072);var Se=P+ve;if(P<Q){var ze=k-Q,qe=Math.min(Q,Se);for(ze+P<0&&he(3);P<qe;++P)p[P]=S[ze+P]}for(;P<Se;++P)p[P]=p[P-Q]}}h.l=pe,h.p=X,h.b=P,h.f=ce,pe&&(ce=1,h.m=Ie,h.d=Ne,h.n=ae)}while(!ce);return P!=p.length&&T?rt(p,0,P):p.subarray(0,P)},it=new se(0),st=function(i,h){return((i[0]&15)!=8||i[0]>>4>7||(i[0]<<8|i[1])%31)&&he(6,"invalid zlib data"),(i[1]>>5&1)==1&&he(6,"invalid zlib data: "+(i[1]&32?"need":"unexpected")+" dictionary"),(i[1]>>3&4)+2};function Xe(i,h){return lt(i.subarray(st(i),-4),{i:2},h,h)}var ct=typeof TextDecoder<"u"&&new TextDecoder,at=0;try{ct.decode(it,{stream:!0}),at=1}catch{}class ut extends O.DataTextureLoader{constructor(h){super(h),this.type=O.HalfFloatType}parse(h){const A=Math.pow(2.7182818,2.2);function x(e,n){let t=0;for(let l=0;l<65536;++l)(l==0||e[l>>3]&1<<(l&7))&&(n[t++]=l);const r=t-1;for(;t<65536;)n[t++]=0;return r}function U(e){for(let n=0;n<16384;n++)e[n]={},e[n].len=0,e[n].lit=0,e[n].p=null}const F={l:0,c:0,lc:0};function Z(e,n,t,r,l){for(;t<e;)n=n<<8|rn(r,l),t+=8;t-=e,F.l=n>>t&(1<<e)-1,F.c=n,F.lc=t}const R=new Array(59);function Y(e){for(let t=0;t<=58;++t)R[t]=0;for(let t=0;t<65537;++t)R[e[t]]+=1;let n=0;for(let t=58;t>0;--t){const r=n+R[t]>>1;R[t]=n,n=r}for(let t=0;t<65537;++t){const r=e[t];r>0&&(e[t]=r|R[r]++<<6)}}function N(e,n,t,r,l,o){const a=n;let f=0,u=0;for(;r<=l;r++){if(a.value-n.value>t)return!1;Z(6,f,u,e,a);const c=F.l;if(f=F.c,u=F.lc,o[r]=c,c==63){if(a.value-n.value>t)throw new Error("Something wrong with hufUnpackEncTable");Z(8,f,u,e,a);let s=F.l+6;if(f=F.c,u=F.lc,r+s>l+1)throw new Error("Something wrong with hufUnpackEncTable");for(;s--;)o[r++]=0;r--}else if(c>=59){let s=c-59+2;if(r+s>l+1)throw new Error("Something wrong with hufUnpackEncTable");for(;s--;)o[r++]=0;r--}}Y(o)}function ne(e){return e&63}function de(e){return e>>6}function Q(e,n,t,r){for(;n<=t;n++){const l=de(e[n]),o=ne(e[n]);if(l>>o)throw new Error("Invalid table entry");if(o>14){const a=r[l>>o-14];if(a.len)throw new Error("Invalid table entry");if(a.lit++,a.p){const f=a.p;a.p=new Array(a.lit);for(let u=0;u<a.lit-1;++u)a.p[u]=f[u]}else a.p=new Array(1);a.p[a.lit-1]=n}else if(o){let a=0;for(let f=1<<14-o;f>0;f--){const u=r[(l<<14-o)+a];if(u.len||u.p)throw new Error("Invalid table entry");u.len=o,u.lit=n,a++}}}return!0}const q={c:0,lc:0};function Oe(e,n,t,r){e=e<<8|rn(t,r),n+=8,q.c=e,q.lc=n}const X={c:0,lc:0};function K(e,n,t,r,l,o,a,f,u){if(e==n){r<8&&(Oe(t,r,l,o),t=q.c,r=q.lc),r-=8;let c=t>>r;if(c=new Uint8Array([c])[0],f.value+c>u)return!1;const s=a[f.value-1];for(;c-- >0;)a[f.value++]=s}else if(f.value<u)a[f.value++]=e;else return!1;X.c=t,X.lc=r}function ve(e){return e&65535}function be(e){const n=ve(e);return n>32767?n-65536:n}const L={a:0,b:0};function Ee(e,n){const t=be(e),l=be(n),o=t+(l&1)+(l>>1),a=o,f=o-l;L.a=a,L.b=f}function Se(e,n){const t=ve(e),r=ve(n),l=t-(r>>1)&65535,o=r+l-32768&65535;L.a=o,L.b=l}function ze(e,n,t,r,l,o,a){const f=a<16384,u=t>l?l:t;let c=1,s,m;for(;c<=u;)c<<=1;for(c>>=1,s=c,c>>=1;c>=1;){m=0;const v=m+o*(l-s),E=o*c,I=o*s,w=r*c,_=r*s;let d,B,W,re;for(;m<=v;m+=I){let z=m;const M=m+r*(t-s);for(;z<=M;z+=_){const $=z+w,ie=z+E,V=ie+w;f?(Ee(e[z+n],e[ie+n]),d=L.a,W=L.b,Ee(e[$+n],e[V+n]),B=L.a,re=L.b,Ee(d,B),e[z+n]=L.a,e[$+n]=L.b,Ee(W,re),e[ie+n]=L.a,e[V+n]=L.b):(Se(e[z+n],e[ie+n]),d=L.a,W=L.b,Se(e[$+n],e[V+n]),B=L.a,re=L.b,Se(d,B),e[z+n]=L.a,e[$+n]=L.b,Se(W,re),e[ie+n]=L.a,e[V+n]=L.b)}if(t&c){const $=z+E;f?Ee(e[z+n],e[$+n]):Se(e[z+n],e[$+n]),d=L.a,e[$+n]=L.b,e[z+n]=d}}if(l&c){let z=m;const M=m+r*(t-s);for(;z<=M;z+=_){const $=z+w;f?Ee(e[z+n],e[$+n]):Se(e[z+n],e[$+n]),d=L.a,e[$+n]=L.b,e[z+n]=d}}s=c,c>>=1}return m}function qe(e,n,t,r,l,o,a,f,u){let c=0,s=0;const m=a,v=Math.trunc(r.value+(l+7)/8);for(;r.value<v;)for(Oe(c,s,t,r),c=q.c,s=q.lc;s>=14;){const I=c>>s-14&16383,w=n[I];if(w.len)s-=w.len,K(w.lit,o,c,s,t,r,f,u,m),c=X.c,s=X.lc;else{if(!w.p)throw new Error("hufDecode issues");let _;for(_=0;_<w.lit;_++){const d=ne(e[w.p[_]]);for(;s<d&&r.value<v;)Oe(c,s,t,r),c=q.c,s=q.lc;if(s>=d&&de(e[w.p[_]])==(c>>s-d&(1<<d)-1)){s-=d,K(w.p[_],o,c,s,t,r,f,u,m),c=X.c,s=X.lc;break}}if(_==w.lit)throw new Error("hufDecode issues")}}const E=8-l&7;for(c>>=E,s-=E;s>0;){const I=n[c<<14-s&16383];if(I.len)s-=I.len,K(I.lit,o,c,s,t,r,f,u,m),c=X.c,s=X.lc;else throw new Error("hufDecode issues")}return!0}function ke(e,n,t,r,l,o){const a={value:0},f=t.value,u=le(n,t),c=le(n,t);t.value+=4;const s=le(n,t);if(t.value+=4,u<0||u>=65537||c<0||c>=65537)throw new Error("Something wrong with HUF_ENCSIZE");const m=new Array(65537),v=new Array(16384);U(v);const E=r-(t.value-f);if(N(e,t,E,u,c,m),s>8*(r-(t.value-f)))throw new Error("Something wrong with hufUncompress");Q(m,u,c,v),qe(m,v,e,t,s,c,o,l,a)}function Ge(e,n,t){for(let r=0;r<t;++r)n[r]=e[n[r]]}function Le(e){for(let n=1;n<e.length;n++){const t=e[n-1]+e[n]-128;e[n]=t}}function en(e,n){let t=0,r=Math.floor((e.length+1)/2),l=0;const o=e.length-1;for(;!(l>o||(n[l++]=e[t++],l>o));)n[l++]=e[r++]}function nn(e){let n=e.byteLength;const t=new Array;let r=0;const l=new DataView(e);for(;n>0;){const o=l.getInt8(r++);if(o<0){const a=-o;n-=a+1;for(let f=0;f<a;f++)t.push(l.getUint8(r++))}else{const a=o;n-=2;const f=l.getUint8(r++);for(let u=0;u<a+1;u++)t.push(f)}}return t}function gn(e,n,t,r,l,o){let a=new DataView(o.buffer);const f=t[e.idx[0]].width,u=t[e.idx[0]].height,c=3,s=Math.floor(f/8),m=Math.ceil(f/8),v=Math.ceil(u/8),E=f-(m-1)*8,I=u-(v-1)*8,w={value:0},_=new Array(c),d=new Array(c),B=new Array(c),W=new Array(c),re=new Array(c);for(let M=0;M<c;++M)re[M]=n[e.idx[M]],_[M]=M<1?0:_[M-1]+m*v,d[M]=new Float32Array(64),B[M]=new Uint16Array(64),W[M]=new Uint16Array(m*64);for(let M=0;M<v;++M){let $=8;M==v-1&&($=I);let ie=8;for(let D=0;D<m;++D){D==m-1&&(ie=E);for(let H=0;H<c;++H)B[H].fill(0),B[H][0]=l[_[H]++],vn(w,r,B[H]),Sn(B[H],d[H]),_n(d[H]);yn(d);for(let H=0;H<c;++H)In(d[H],W[H],D*64)}let V=0;for(let D=0;D<c;++D){const H=t[e.idx[D]].type;for(let _e=8*M;_e<8*M+$;++_e){V=re[D][_e];for(let Pe=0;Pe<s;++Pe){const we=Pe*64+(_e&7)*8;a.setUint16(V+0*2*H,W[D][we+0],!0),a.setUint16(V+1*2*H,W[D][we+1],!0),a.setUint16(V+2*2*H,W[D][we+2],!0),a.setUint16(V+3*2*H,W[D][we+3],!0),a.setUint16(V+4*2*H,W[D][we+4],!0),a.setUint16(V+5*2*H,W[D][we+5],!0),a.setUint16(V+6*2*H,W[D][we+6],!0),a.setUint16(V+7*2*H,W[D][we+7],!0),V+=8*2*H}}if(s!=m)for(let _e=8*M;_e<8*M+$;++_e){const Pe=re[D][_e]+8*s*2*H,we=s*64+(_e&7)*8;for(let We=0;We<ie;++We)a.setUint16(Pe+We*2*H,W[D][we+We],!0)}}}const z=new Uint16Array(f);a=new DataView(o.buffer);for(let M=0;M<c;++M){t[e.idx[M]].decoded=!0;const $=t[e.idx[M]].type;if(t[M].type==2)for(let ie=0;ie<u;++ie){const V=re[M][ie];for(let D=0;D<f;++D)z[D]=a.getUint16(V+D*2*$,!0);for(let D=0;D<f;++D)a.setFloat32(V+D*2*$,g(z[D]),!0)}}}function vn(e,n,t){let r,l=1;for(;l<64;)r=n[e.value],r==65280?l=64:r>>8==255?l+=r&255:(t[l]=r,l++),e.value++}function Sn(e,n){n[0]=g(e[0]),n[1]=g(e[1]),n[2]=g(e[5]),n[3]=g(e[6]),n[4]=g(e[14]),n[5]=g(e[15]),n[6]=g(e[27]),n[7]=g(e[28]),n[8]=g(e[2]),n[9]=g(e[4]),n[10]=g(e[7]),n[11]=g(e[13]),n[12]=g(e[16]),n[13]=g(e[26]),n[14]=g(e[29]),n[15]=g(e[42]),n[16]=g(e[3]),n[17]=g(e[8]),n[18]=g(e[12]),n[19]=g(e[17]),n[20]=g(e[25]),n[21]=g(e[30]),n[22]=g(e[41]),n[23]=g(e[43]),n[24]=g(e[9]),n[25]=g(e[11]),n[26]=g(e[18]),n[27]=g(e[24]),n[28]=g(e[31]),n[29]=g(e[40]),n[30]=g(e[44]),n[31]=g(e[53]),n[32]=g(e[10]),n[33]=g(e[19]),n[34]=g(e[23]),n[35]=g(e[32]),n[36]=g(e[39]),n[37]=g(e[45]),n[38]=g(e[52]),n[39]=g(e[54]),n[40]=g(e[20]),n[41]=g(e[22]),n[42]=g(e[33]),n[43]=g(e[38]),n[44]=g(e[46]),n[45]=g(e[51]),n[46]=g(e[55]),n[47]=g(e[60]),n[48]=g(e[21]),n[49]=g(e[34]),n[50]=g(e[37]),n[51]=g(e[47]),n[52]=g(e[50]),n[53]=g(e[56]),n[54]=g(e[59]),n[55]=g(e[61]),n[56]=g(e[35]),n[57]=g(e[36]),n[58]=g(e[48]),n[59]=g(e[49]),n[60]=g(e[57]),n[61]=g(e[58]),n[62]=g(e[62]),n[63]=g(e[63])}function _n(e){const n=.5*Math.cos(.7853975),t=.5*Math.cos(3.14159/16),r=.5*Math.cos(3.14159/8),l=.5*Math.cos(3*3.14159/16),o=.5*Math.cos(5*3.14159/16),a=.5*Math.cos(3*3.14159/8),f=.5*Math.cos(7*3.14159/16),u=new Array(4),c=new Array(4),s=new Array(4),m=new Array(4);for(let v=0;v<8;++v){const E=v*8;u[0]=r*e[E+2],u[1]=a*e[E+2],u[2]=r*e[E+6],u[3]=a*e[E+6],c[0]=t*e[E+1]+l*e[E+3]+o*e[E+5]+f*e[E+7],c[1]=l*e[E+1]-f*e[E+3]-t*e[E+5]-o*e[E+7],c[2]=o*e[E+1]-t*e[E+3]+f*e[E+5]+l*e[E+7],c[3]=f*e[E+1]-o*e[E+3]+l*e[E+5]-t*e[E+7],s[0]=n*(e[E+0]+e[E+4]),s[3]=n*(e[E+0]-e[E+4]),s[1]=u[0]+u[3],s[2]=u[1]-u[2],m[0]=s[0]+s[1],m[1]=s[3]+s[2],m[2]=s[3]-s[2],m[3]=s[0]-s[1],e[E+0]=m[0]+c[0],e[E+1]=m[1]+c[1],e[E+2]=m[2]+c[2],e[E+3]=m[3]+c[3],e[E+4]=m[3]-c[3],e[E+5]=m[2]-c[2],e[E+6]=m[1]-c[1],e[E+7]=m[0]-c[0]}for(let v=0;v<8;++v)u[0]=r*e[16+v],u[1]=a*e[16+v],u[2]=r*e[48+v],u[3]=a*e[48+v],c[0]=t*e[8+v]+l*e[24+v]+o*e[40+v]+f*e[56+v],c[1]=l*e[8+v]-f*e[24+v]-t*e[40+v]-o*e[56+v],c[2]=o*e[8+v]-t*e[24+v]+f*e[40+v]+l*e[56+v],c[3]=f*e[8+v]-o*e[24+v]+l*e[40+v]-t*e[56+v],s[0]=n*(e[v]+e[32+v]),s[3]=n*(e[v]-e[32+v]),s[1]=u[0]+u[3],s[2]=u[1]-u[2],m[0]=s[0]+s[1],m[1]=s[3]+s[2],m[2]=s[3]-s[2],m[3]=s[0]-s[1],e[0+v]=m[0]+c[0],e[8+v]=m[1]+c[1],e[16+v]=m[2]+c[2],e[24+v]=m[3]+c[3],e[32+v]=m[3]-c[3],e[40+v]=m[2]-c[2],e[48+v]=m[1]-c[1],e[56+v]=m[0]-c[0]}function yn(e){for(let n=0;n<64;++n){const t=e[0][n],r=e[1][n],l=e[2][n];e[0][n]=t+1.5747*l,e[1][n]=t-.1873*r-.4682*l,e[2][n]=t+1.8556*r}}function In(e,n,t){for(let r=0;r<64;++r)n[t+r]=O.DataUtils.toHalfFloat(Cn(e[r]))}function Cn(e){return e<=1?Math.sign(e)*Math.pow(Math.abs(e),2.2):Math.sign(e)*Math.pow(A,Math.abs(e)-1)}function Ke(e){return new DataView(e.array.buffer,e.offset.value,e.size)}function Tn(e){const n=e.viewer.buffer.slice(e.offset.value,e.offset.value+e.size),t=new Uint8Array(nn(n)),r=new Uint8Array(t.length);return Le(t),en(t,r),new DataView(r.buffer)}function $e(e){const n=e.array.slice(e.offset.value,e.offset.value+e.size),t=Xe(n),r=new Uint8Array(t.length);return Le(t),en(t,r),new DataView(r.buffer)}function dn(e){const n=e.viewer,t={value:e.offset.value},r=new Uint16Array(e.columns*e.lines*(e.inputChannels.length*e.type)),l=new Uint8Array(8192);let o=0;const a=new Array(e.inputChannels.length);for(let I=0,w=e.inputChannels.length;I<w;I++)a[I]={},a[I].start=o,a[I].end=a[I].start,a[I].nx=e.columns,a[I].ny=e.lines,a[I].size=e.type,o+=a[I].nx*a[I].ny*a[I].size;const f=Be(n,t),u=Be(n,t);if(u>=8192)throw new Error("Something is wrong with PIZ_COMPRESSION BITMAP_SIZE");if(f<=u)for(let I=0;I<u-f+1;I++)l[I+f]=Re(n,t);const c=new Uint16Array(65536),s=x(l,c),m=le(n,t);ke(e.array,n,t,m,r,o);for(let I=0;I<e.inputChannels.length;++I){const w=a[I];for(let _=0;_<a[I].size;++_)ze(r,w.start+_,w.nx,w.size,w.ny,w.nx*w.size,s)}Ge(c,r,o);let v=0;const E=new Uint8Array(r.buffer.byteLength);for(let I=0;I<e.lines;I++)for(let w=0;w<e.inputChannels.length;w++){const _=a[w],d=_.nx*_.size,B=new Uint8Array(r.buffer,_.end*2,d*2);E.set(B,v),v+=d*2,_.end+=d}return new DataView(E.buffer)}function bn(e){const n=e.array.slice(e.offset.value,e.offset.value+e.size),t=Xe(n),r=e.inputChannels.length*e.lines*e.columns*e.totalBytes,l=new ArrayBuffer(r),o=new DataView(l);let a=0,f=0;const u=new Array(4);for(let c=0;c<e.lines;c++)for(let s=0;s<e.inputChannels.length;s++){let m=0;switch(e.inputChannels[s].pixelType){case 1:u[0]=a,u[1]=u[0]+e.columns,a=u[1]+e.columns;for(let E=0;E<e.columns;++E){const I=t[u[0]++]<<8|t[u[1]++];m+=I,o.setUint16(f,m,!0),f+=2}break;case 2:u[0]=a,u[1]=u[0]+e.columns,u[2]=u[1]+e.columns,a=u[2]+e.columns;for(let E=0;E<e.columns;++E){const I=t[u[0]++]<<24|t[u[1]++]<<16|t[u[2]++]<<8;m+=I,o.setUint32(f,m,!0),f+=4}break}}return o}function tn(e){const n=e.viewer,t={value:e.offset.value},r=new Uint8Array(e.columns*e.lines*(e.inputChannels.length*e.type*2)),l={version:te(n,t),unknownUncompressedSize:te(n,t),unknownCompressedSize:te(n,t),acCompressedSize:te(n,t),dcCompressedSize:te(n,t),rleCompressedSize:te(n,t),rleUncompressedSize:te(n,t),rleRawSize:te(n,t),totalAcUncompressedCount:te(n,t),totalDcUncompressedCount:te(n,t),acCompression:te(n,t)};if(l.version<2)throw new Error("EXRLoader.parse: "+Fe.compression+" version "+l.version+" is unsupported");const o=new Array;let a=Be(n,t)-2;for(;a>0;){const w=Ye(n.buffer,t),_=Re(n,t),d=_>>2&3,B=(_>>4)-1,W=new Int8Array([B])[0],re=Re(n,t);o.push({name:w,index:W,type:re,compression:d}),a-=w.length+3}const f=Fe.channels,u=new Array(e.inputChannels.length);for(let w=0;w<e.inputChannels.length;++w){const _=u[w]={},d=f[w];_.name=d.name,_.compression=0,_.decoded=!1,_.type=d.pixelType,_.pLinear=d.pLinear,_.width=e.columns,_.height=e.lines}const c={idx:new Array(3)};for(let w=0;w<e.inputChannels.length;++w){const _=u[w];for(let d=0;d<o.length;++d){const B=o[d];_.name==B.name&&(_.compression=B.compression,B.index>=0&&(c.idx[B.index]=w),_.offset=w)}}let s,m,v;if(l.acCompressedSize>0)switch(l.acCompression){case 0:s=new Uint16Array(l.totalAcUncompressedCount),ke(e.array,n,t,l.acCompressedSize,s,l.totalAcUncompressedCount);break;case 1:const w=e.array.slice(t.value,t.value+l.totalAcUncompressedCount),_=Xe(w);s=new Uint16Array(_.buffer),t.value+=l.totalAcUncompressedCount;break}if(l.dcCompressedSize>0){const w={array:e.array,offset:t,size:l.dcCompressedSize};m=new Uint16Array($e(w).buffer),t.value+=l.dcCompressedSize}if(l.rleRawSize>0){const w=e.array.slice(t.value,t.value+l.rleCompressedSize),_=Xe(w);v=nn(_.buffer),t.value+=l.rleCompressedSize}let E=0;const I=new Array(u.length);for(let w=0;w<I.length;++w)I[w]=new Array;for(let w=0;w<e.lines;++w)for(let _=0;_<u.length;++_)I[_].push(E),E+=u[_].width*e.type*2;gn(c,I,u,s,m,r);for(let w=0;w<u.length;++w){const _=u[w];if(!_.decoded)switch(_.compression){case 2:let d=0,B=0;for(let W=0;W<e.lines;++W){let re=I[w][d];for(let z=0;z<_.width;++z){for(let M=0;M<2*_.type;++M)r[re++]=v[B+M*_.width*_.height];B++}d++}break;case 1:default:throw new Error("EXRLoader.parse: unsupported channel compression")}}return new DataView(r.buffer)}function Ye(e,n){const t=new Uint8Array(e);let r=0;for(;t[n.value+r]!=0;)r+=1;const l=new TextDecoder().decode(t.slice(n.value,n.value+r));return n.value=n.value+r+1,l}function Rn(e,n,t){const r=new TextDecoder().decode(new Uint8Array(e).slice(n.value,n.value+t));return n.value=n.value+t,r}function Un(e,n){const t=oe(e,n),r=le(e,n);return[t,r]}function An(e,n){const t=le(e,n),r=le(e,n);return[t,r]}function oe(e,n){const t=e.getInt32(n.value,!0);return n.value=n.value+4,t}function le(e,n){const t=e.getUint32(n.value,!0);return n.value=n.value+4,t}function rn(e,n){const t=e[n.value];return n.value=n.value+1,t}function Re(e,n){const t=e.getUint8(n.value);return n.value=n.value+1,t}const te=function(e,n){let t;return"getBigInt64"in DataView.prototype?t=Number(e.getBigInt64(n.value,!0)):t=e.getUint32(n.value+4,!0)+Number(e.getUint32(n.value,!0)<<32),n.value+=8,t};function j(e,n){const t=e.getFloat32(n.value,!0);return n.value+=4,t}function Nn(e,n){return O.DataUtils.toHalfFloat(j(e,n))}function g(e){const n=(e&31744)>>10,t=e&1023;return(e>>15?-1:1)*(n?n===31?t?NaN:1/0:Math.pow(2,n-15)*(1+t/1024):6103515625e-14*(t/1024))}function Be(e,n){const t=e.getUint16(n.value,!0);return n.value+=2,t}function Mn(e,n){return g(Be(e,n))}function On(e,n,t,r){const l=t.value,o=[];for(;t.value<l+r-1;){const a=Ye(n,t),f=oe(e,t),u=Re(e,t);t.value+=3;const c=oe(e,t),s=oe(e,t);o.push({name:a,pixelType:f,pLinear:u,xSampling:c,ySampling:s})}return t.value+=1,o}function Fn(e,n){const t=j(e,n),r=j(e,n),l=j(e,n),o=j(e,n),a=j(e,n),f=j(e,n),u=j(e,n),c=j(e,n);return{redX:t,redY:r,greenX:l,greenY:o,blueX:a,blueY:f,whiteX:u,whiteY:c}}function xn(e,n){const t=["NO_COMPRESSION","RLE_COMPRESSION","ZIPS_COMPRESSION","ZIP_COMPRESSION","PIZ_COMPRESSION","PXR24_COMPRESSION","B44_COMPRESSION","B44A_COMPRESSION","DWAA_COMPRESSION","DWAB_COMPRESSION"],r=Re(e,n);return t[r]}function Dn(e,n){const t=oe(e,n),r=oe(e,n),l=oe(e,n),o=oe(e,n);return{xMin:t,yMin:r,xMax:l,yMax:o}}function kn(e,n){const t=["INCREASING_Y","DECREASING_Y","RANDOM_Y"],r=Re(e,n);return t[r]}function Ln(e,n){const t=["ENVMAP_LATLONG","ENVMAP_CUBE"],r=Re(e,n);return t[r]}function Bn(e,n){const t=["ONE_LEVEL","MIPMAP_LEVELS","RIPMAP_LEVELS"],r=["ROUND_DOWN","ROUND_UP"],l=le(e,n),o=le(e,n),a=Re(e,n);return{xSize:l,ySize:o,levelMode:t[a&15],roundingMode:r[a>>4]}}function Pn(e,n){const t=j(e,n),r=j(e,n);return[t,r]}function Hn(e,n){const t=j(e,n),r=j(e,n),l=j(e,n);return[t,r,l]}function Zn(e,n,t,r,l){if(r==="string"||r==="stringvector"||r==="iccProfile")return Rn(n,t,l);if(r==="chlist")return On(e,n,t,l);if(r==="chromaticities")return Fn(e,t);if(r==="compression")return xn(e,t);if(r==="box2i")return Dn(e,t);if(r==="envmap")return Ln(e,t);if(r==="tiledesc")return Bn(e,t);if(r==="lineOrder")return kn(e,t);if(r==="float")return j(e,t);if(r==="v2f")return Pn(e,t);if(r==="v3f")return Hn(e,t);if(r==="int")return oe(e,t);if(r==="rational")return Un(e,t);if(r==="timecode")return An(e,t);if(r==="preview")return t.value+=l,"skipped";t.value+=l}function zn(e,n){const t=Math.log2(e);return n=="ROUND_DOWN"?Math.floor(t):Math.ceil(t)}function Gn(e,n,t){let r=0;switch(e.levelMode){case"ONE_LEVEL":r=1;break;case"MIPMAP_LEVELS":r=zn(Math.max(n,t),e.roundingMode)+1;break;case"RIPMAP_LEVELS":throw new Error("THREE.EXRLoader: RIPMAP_LEVELS tiles currently unsupported.")}return r}function on(e,n,t,r){const l=new Array(e);for(let o=0;o<e;o++){const a=1<<o;let f=n/a|0;r=="ROUND_UP"&&f*a<n&&(f+=1);const u=Math.max(f,1);l[o]=(u+t-1)/t|0}return l}function Yn(){const e=this,n=e.offset,t={value:0};for(let r=0;r<e.tileCount;r++){const l=oe(e.viewer,n),o=oe(e.viewer,n);n.value+=8,e.size=le(e.viewer,n);const a=l*e.blockWidth,f=o*e.blockHeight;e.columns=a+e.blockWidth>e.width?e.width-a:e.blockWidth,e.lines=f+e.blockHeight>e.height?e.height-f:e.blockHeight;const u=e.columns*e.totalBytes,s=e.size<e.lines*u?e.uncompress(e):Ke(e);n.value+=e.size;for(let m=0;m<e.lines;m++){const v=m*e.columns*e.totalBytes;for(let E=0;E<e.inputChannels.length;E++){const I=Fe.channels[E].name,w=e.channelByteOffsets[I]*e.columns,_=e.decodeChannels[I];if(_===void 0)continue;t.value=v+w;const d=(e.height-(1+f+m))*e.outLineWidth;for(let B=0;B<e.columns;B++){const W=d+(B+a)*e.outputChannels+_;e.byteArray[W]=e.getter(s,t)}}}}}function Wn(){const e=this,n=e.offset,t={value:0};for(let r=0;r<e.height/e.blockHeight;r++){const l=oe(e.viewer,n)-Fe.dataWindow.yMin;e.size=le(e.viewer,n),e.lines=l+e.blockHeight>e.height?e.height-l:e.blockHeight;const o=e.columns*e.totalBytes,f=e.size<e.lines*o?e.uncompress(e):Ke(e);n.value+=e.size;for(let u=0;u<e.blockHeight;u++){const c=r*e.blockHeight,s=u+e.scanOrder(c);if(s>=e.height)continue;const m=u*o,v=(e.height-1-s)*e.outLineWidth;for(let E=0;E<e.inputChannels.length;E++){const I=Fe.channels[E].name,w=e.channelByteOffsets[I]*e.columns,_=e.decodeChannels[I];if(_!==void 0){t.value=m+w;for(let d=0;d<e.columns;d++){const B=v+d*e.outputChannels+_;e.byteArray[B]=e.getter(f,t)}}}}}}function Xn(e,n,t){const r={};if(e.getUint32(0,!0)!=20000630)throw new Error("THREE.EXRLoader: Provided file doesn't appear to be in OpenEXR format.");r.version=e.getUint8(4);const l=e.getUint8(5);r.spec={singleTile:!!(l&2),longName:!!(l&4),deepFormat:!!(l&8),multiPart:!!(l&16)},t.value=8;let o=!0;for(;o;){const a=Ye(n,t);if(a==="")o=!1;else{const f=Ye(n,t),u=le(e,t),c=Zn(e,n,t,f,u);c===void 0?console.warn(`THREE.EXRLoader: Skipped unknown header attribute type '${f}'.`):r[a]=c}}if((l&-7)!=0)throw console.error("THREE.EXRHeader:",r),new Error("THREE.EXRLoader: Provided file is currently unsupported.");return r}function qn(e,n,t,r,l){const o={size:0,viewer:n,array:t,offset:r,width:e.dataWindow.xMax-e.dataWindow.xMin+1,height:e.dataWindow.yMax-e.dataWindow.yMin+1,inputChannels:e.channels,channelByteOffsets:{},scanOrder:null,totalBytes:null,columns:null,lines:null,type:null,uncompress:null,getter:null,format:null,colorSpace:O.LinearSRGBColorSpace};switch(e.compression){case"NO_COMPRESSION":o.blockHeight=1,o.uncompress=Ke;break;case"RLE_COMPRESSION":o.blockHeight=1,o.uncompress=Tn;break;case"ZIPS_COMPRESSION":o.blockHeight=1,o.uncompress=$e;break;case"ZIP_COMPRESSION":o.blockHeight=16,o.uncompress=$e;break;case"PIZ_COMPRESSION":o.blockHeight=32,o.uncompress=dn;break;case"PXR24_COMPRESSION":o.blockHeight=16,o.uncompress=bn;break;case"DWAA_COMPRESSION":o.blockHeight=32,o.uncompress=tn;break;case"DWAB_COMPRESSION":o.blockHeight=256,o.uncompress=tn;break;default:throw new Error("EXRLoader.parse: "+e.compression+" is unsupported")}const a={};for(const s of e.channels)switch(s.name){case"Y":case"R":case"G":case"B":case"A":a[s.name]=!0,o.type=s.pixelType}let f=!1;if(a.R&&a.G&&a.B)f=!a.A,o.outputChannels=4,o.decodeChannels={R:0,G:1,B:2,A:3};else if(a.Y)o.outputChannels=1,o.decodeChannels={Y:0};else throw new Error("EXRLoader.parse: file contains unsupported data channels.");if(o.type==1)switch(l){case O.FloatType:o.getter=Mn;break;case O.HalfFloatType:o.getter=Be;break}else if(o.type==2)switch(l){case O.FloatType:o.getter=j;break;case O.HalfFloatType:o.getter=Nn}else throw new Error("EXRLoader.parse: unsupported pixelType "+o.type+" for "+e.compression+".");o.columns=o.width;const u=o.width*o.height*o.outputChannels;switch(l){case O.FloatType:o.byteArray=new Float32Array(u),f&&o.byteArray.fill(1,0,u);break;case O.HalfFloatType:o.byteArray=new Uint16Array(u),f&&o.byteArray.fill(15360,0,u);break;default:console.error("THREE.EXRLoader: unsupported type: ",l);break}let c=0;for(const s of e.channels)o.decodeChannels[s.name]!==void 0&&(o.channelByteOffsets[s.name]=c),c+=s.pixelType*2;if(o.totalBytes=c,o.outLineWidth=o.width*o.outputChannels,e.lineOrder==="INCREASING_Y"?o.scanOrder=s=>s:o.scanOrder=s=>o.height-1-s,o.outputChannels==4?(o.format=O.RGBAFormat,o.colorSpace=O.LinearSRGBColorSpace):(o.format=O.RedFormat,o.colorSpace=O.NoColorSpace),e.spec.singleTile){o.blockHeight=e.tiles.ySize,o.blockWidth=e.tiles.xSize;const s=Gn(e.tiles,o.width,o.height),m=on(s,o.width,e.tiles.xSize,e.tiles.roundingMode),v=on(s,o.height,e.tiles.ySize,e.tiles.roundingMode);o.tileCount=m[0]*v[0];for(let E=0;E<s;E++)for(let I=0;I<v[E];I++)for(let w=0;w<m[E];w++)te(n,r);o.decode=Yn.bind(o)}else{o.blockWidth=o.width;const s=Math.ceil(o.height/o.blockHeight);for(let m=0;m<s;m++)te(n,r);o.decode=Wn.bind(o)}return o}const ln={value:0},sn=new DataView(h),Kn=new Uint8Array(h),Fe=Xn(sn,h,ln),xe=qn(Fe,sn,Kn,ln,this.type);return xe.decode(),{header:Fe,width:xe.width,height:xe.height,data:xe.byteArray,format:xe.format,colorSpace:xe.colorSpace,type:this.type}}setDataType(h){return this.type=h,this}load(h,p,S,y){function k(T,J){T.colorSpace=J.colorSpace,T.minFilter=O.LinearFilter,T.magFilter=O.LinearFilter,T.generateMipmaps=!1,T.flipY=!1,p&&p(T,J)}return super.load(h,k,S,y)}}class ht extends O.DataTextureLoader{constructor(h){super(h),this.type=O.HalfFloatType}parse(h){const T=function(C,A){switch(C){case 1:throw new Error("THREE.RGBELoader: Read Error: "+(A||""));case 2:throw new Error("THREE.RGBELoader: Write Error: "+(A||""));case 3:throw new Error("THREE.RGBELoader: Bad File Format: "+(A||""));default:case 4:throw new Error("THREE.RGBELoader: Memory Error: "+(A||""))}},ce=`
7
+ `,b=function(C,A,x){A=A||1024;let F=C.pos,Z=-1,R=0,Y="",N=String.fromCharCode.apply(null,new Uint16Array(C.subarray(F,F+128)));for(;0>(Z=N.indexOf(ce))&&R<A&&F<C.byteLength;)Y+=N,R+=N.length,F+=128,N+=String.fromCharCode.apply(null,new Uint16Array(C.subarray(F,F+128)));return-1<Z?(C.pos+=R+Z+1,Y+N.slice(0,Z)):!1},P=function(C){const A=/^#\?(\S+)/,x=/^\s*GAMMA\s*=\s*(\d+(\.\d+)?)\s*$/,U=/^\s*EXPOSURE\s*=\s*(\d+(\.\d+)?)\s*$/,F=/^\s*FORMAT=(\S+)\s*$/,Z=/^\s*\-Y\s+(\d+)\s+\+X\s+(\d+)\s*$/,R={valid:0,string:"",comments:"",programtype:"RGBE",format:"",gamma:1,exposure:1,width:0,height:0};let Y,N;for((C.pos>=C.byteLength||!(Y=b(C)))&&T(1,"no header found"),(N=Y.match(A))||T(3,"bad initial token"),R.valid|=1,R.programtype=N[1],R.string+=Y+`
8
+ `;Y=b(C),Y!==!1;){if(R.string+=Y+`
9
+ `,Y.charAt(0)==="#"){R.comments+=Y+`
10
+ `;continue}if((N=Y.match(x))&&(R.gamma=parseFloat(N[1])),(N=Y.match(U))&&(R.exposure=parseFloat(N[1])),(N=Y.match(F))&&(R.valid|=2,R.format=N[1]),(N=Y.match(Z))&&(R.valid|=4,R.height=parseInt(N[1],10),R.width=parseInt(N[2],10)),R.valid&2&&R.valid&4)break}return R.valid&2||T(3,"missing format specifier"),R.valid&4||T(3,"missing image size specifier"),R},pe=function(C,A,x){const U=A;if(U<8||U>32767||C[0]!==2||C[1]!==2||C[2]&128)return new Uint8Array(C);U!==(C[2]<<8|C[3])&&T(3,"wrong scanline width");const F=new Uint8Array(4*A*x);F.length||T(4,"unable to allocate buffer space");let Z=0,R=0;const Y=4*U,N=new Uint8Array(4),ne=new Uint8Array(Y);let de=x;for(;de>0&&R<C.byteLength;){R+4>C.byteLength&&T(1),N[0]=C[R++],N[1]=C[R++],N[2]=C[R++],N[3]=C[R++],(N[0]!=2||N[1]!=2||(N[2]<<8|N[3])!=U)&&T(3,"bad rgbe scanline format");let Q=0,q;for(;Q<Y&&R<C.byteLength;){q=C[R++];const X=q>128;if(X&&(q-=128),(q===0||Q+q>Y)&&T(3,"bad scanline data"),X){const K=C[R++];for(let ve=0;ve<q;ve++)ne[Q++]=K}else ne.set(C.subarray(R,R+q),Q),Q+=q,R+=q}const Oe=U;for(let X=0;X<Oe;X++){let K=0;F[Z]=ne[X+K],K+=U,F[Z+1]=ne[X+K],K+=U,F[Z+2]=ne[X+K],K+=U,F[Z+3]=ne[X+K],Z+=4}de--}return F},Ne=function(C,A,x,U){const F=C[A+3],Z=Math.pow(2,F-128)/255;x[U+0]=C[A+0]*Z,x[U+1]=C[A+1]*Z,x[U+2]=C[A+2]*Z,x[U+3]=1},Ie=function(C,A,x,U){const F=C[A+3],Z=Math.pow(2,F-128)/255;x[U+0]=O.DataUtils.toHalfFloat(Math.min(C[A+0]*Z,65504)),x[U+1]=O.DataUtils.toHalfFloat(Math.min(C[A+1]*Z,65504)),x[U+2]=O.DataUtils.toHalfFloat(Math.min(C[A+2]*Z,65504)),x[U+3]=O.DataUtils.toHalfFloat(1)},ae=new Uint8Array(h);ae.pos=0;const fe=P(ae),Me=fe.width,ee=fe.height,ge=pe(ae.subarray(ae.pos),Me,ee);let Ce,Te,me;switch(this.type){case O.FloatType:me=ge.length/4;const C=new Float32Array(me*4);for(let x=0;x<me;x++)Ne(ge,x*4,C,x*4);Ce=C,Te=O.FloatType;break;case O.HalfFloatType:me=ge.length/4;const A=new Uint16Array(me*4);for(let x=0;x<me;x++)Ie(ge,x*4,A,x*4);Ce=A,Te=O.HalfFloatType;break;default:throw new Error("THREE.RGBELoader: Unsupported type: "+this.type)}return{width:Me,height:ee,data:Ce,header:fe.string,gamma:fe.gamma,exposure:fe.exposure,type:Te}}setDataType(h){return this.type=h,this}load(h,p,S,y){function k(T,J){switch(T.type){case O.FloatType:case O.HalfFloatType:T.colorSpace=O.LinearSRGBColorSpace,T.minFilter=O.LinearFilter,T.magFilter=O.LinearFilter,T.generateMipmaps=!1,T.flipY=!0;break}p&&p(T,J)}return super.load(h,k,S,y)}}function pt(i,h=[.3,.3,.3]){const p=document.querySelector(`#${i}`);if(!p){console.log(" 获取 infoPlane 元素失败 (id) =====> :",i);return}const S=p.cloneNode(!0);S.style.display="block";const y=new cn.CSS3DSprite(S);return y.visible=!1,y.scale.set(...h),y}function ft(i,h){const p=mt(i);p.style.display="block";const S=new cn.CSS3DSprite(p);return S.visible=!1,S.scale.set(h,h,h),S}const mt=i=>{const h=document.createElement("div");h.style.cssText=`
11
+ border-radius: 50px;
12
+ border: 2px solid rgba(255, 255, 255, 0.5);
13
+ background-color: rgba(15, 20, 22, 0.562);
14
+ justify-content: flex-start;
15
+ align-items: center;
16
+ padding: 20px 30px;
17
+ display: flex;
18
+ transform-origin: center 0;`;const p=document.createElement("span");return p.style.cssText=`
19
+ font-size: 40px;
20
+ line-height: 1;
21
+ white-space: nowrap;
22
+ color: #fff;
23
+ font-weight: 700;
24
+ `,p.innerText=i,h.appendChild(p),h},Et=(i,h)=>{const p={};i.forEach(k=>{let T=k.parent;for(;T;)p[T.uuid]?p[T.uuid]++:p[T.uuid]=1,T=T.parent});let S=null,y=0;for(const k in p)p[k]>y&&(y=p[k],S=h.getObjectByProperty("uuid",k));return S},wt=(i,h={timeout:2e3})=>typeof requestIdleCallback<"u"?requestIdleCallback(i,h):setTimeout(i,1),gt=i=>{typeof cancelIdleCallback<"u"?cancelIdleCallback(i):clearTimeout(i)},vt=(i,h=16)=>{let p=!1;return function(...S){p||(i.apply(this,S),p=!0,setTimeout(()=>p=!1,h))}},St=(i,h,p=10)=>new Promise(S=>{let y=0;const k=()=>{const T=Math.min(y+p,i.length);for(;y<T;y++)h(i[y],y);y<i.length?requestAnimationFrame(k):S()};k()}),Qe={};async function _t(i,h){if(!h)return;if(Qe[h]){const S=Qe[h];i.environment=S;return}let p=En(h);return new Promise((S,y)=>{p.load(h,S,void 0,y)}).then(S=>{S.mapping=O.EquirectangularReflectionMapping,i.environment=S,Qe[h]=S}).catch(S=>{console.log(" =====> e:",S)})}async function yt(i){let h=En(i);return new Promise((p,S)=>{h.load(i,p,void 0,S)})}function En(i){return i.split(".").pop()==="exr"?new ut:new ht}const It=(i,h,p)=>{if(i.userData&&i.userData[h]===p)return i;let S=!1,y=null;return i.traverse(k=>{S||k.userData&&k.userData[h]===p&&(y=k,S=!0)}),y},wn=(i,h,p)=>i?i.userData&&i.userData[h]===p?i:wn(i.parent,h,p):null;exports.ImageLoader=yt;exports.cancelIdleTask=gt;exports.createInfoPlane=pt;exports.createTagPlane=ft;exports.getCommonParent=Et;exports.getObjectByUserData=It;exports.getRootObj=wn;exports.initEnvImage=_t;exports.processInChunks=St;exports.runWhenIdle=wt;exports.throttle=vt;
package/dist/threejs.cjs CHANGED
@@ -1,3 +1,3 @@
1
- "use strict";var A=Object.defineProperty;var q=(p,t,e)=>t in p?A(p,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):p[t]=e;var r=(p,t,e)=>q(p,typeof t!="symbol"?t+"":t,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const F=require("./useBatchGLTFLoader-DHJyQcpJ.cjs"),a=require("./PredictiveLoader-Xy5S4HBr.cjs"),g=require("./objectQuery-DNtwsgY8.cjs"),S=require("./modelOptimizer-A0Cs6f9e.cjs"),n=require("three"),B="1.5.0",X=50,Y=20,Z=20,E={TOP:"top",RIGHT:"right",LEFT:"left",ISO:"iso"},G={enableDamping:!0,dampingFactor:.25,screenSpacePanning:!1,minDistance:.1,maxDistance:1e3,maxPolarAngle:n.MathUtils.degToRad(60)};class v{constructor(t,e){r(this,"isReady",!1);r(this,"scene",null);r(this,"camera",null);r(this,"renderer",null);r(this,"control",null);r(this,"css3dRenderer",null);r(this,"el",null);r(this,"renderRequested",!1);r(this,"selector",null);r(this,"eventsListener",{});r(this,"stats",null);r(this,"isDispose",!1);r(this,"version","0.0.0");r(this,"boxHelper",null);r(this,"initOpt",{css3d:!1,stats:!1,renderType:"change",initListener:!0,initialFov:50,control:{init:!0,options:{}}});r(this,"setup",t=>{if(this.isDispose=!1,this.selector=t,this.el=document.querySelector(t),!this.el){console.error(`ThreeIns: 找不到元素 ${t}`);return}const[e,m]=this.getTargetSize();if(this.updateCameraFOV(e,m),this.camera.position.set(0,0,0),this.camera.lookAt(0,0,0),this.camera.updateProjectionMatrix(),this.renderer.setPixelRatio(window.devicePixelRatio),this.renderer.setSize(e,m),this.el.appendChild(this.renderer.domElement),this.initOpt.control&&this.initOpt.control.init){this.control=a.createOrbitControl(this.camera,this.renderer.domElement);const o=Object.assign(G,this.initOpt.control.options||{});Object.keys(o).forEach(M=>{this.control[M]=o[M]})}setTimeout(()=>{this.isReady=!0},Y),this.initOpt.stats&&this.initStats(),this.initOpt.css3d&&this.initCss3dRenderer(),this.initOpt.renderType==="loop"?this.animate():this.initOpt.renderType==="change"&&this.control&&this.control.addEventListener("change",this.requestRenderIfNotRequested),this.initListener()});r(this,"onContextLost",t=>{t.preventDefault(),this.animationFrameId&&cancelAnimationFrame(this.animationFrameId)});r(this,"onContextRestored",t=>{t.preventDefault(),this.dispose(),setTimeout(()=>{this.setup(this.selector)},Z)});r(this,"initListener",()=>{this.initOpt.initListener&&window&&window.addEventListener("resize",this.onResize,!1),this.renderer.domElement.addEventListener("webglcontextlost",this.onContextLost,!1),this.renderer.domElement.addEventListener("webglcontextrestored",this.onContextRestored,!1)});r(this,"removeListener",()=>{window&&window.removeEventListener("resize",this.onResize,!1),this.renderer&&this.renderer.domElement&&(this.renderer.domElement.removeEventListener("webglcontextlost",this.onContextLost,!1),this.renderer.domElement.removeEventListener("webglcontextrestored",this.onContextRestored,!1))});r(this,"animate",()=>{this.isDispose||(this.initOpt.renderType==="loop"&&this.onRender(),this.animationFrameId=requestAnimationFrame(this.animate))});r(this,"onRender",()=>{this.isDispose||(this.renderRequested=!1,this.stats&&this.stats.update(),this.control&&this.control.update(),this.renderer.render(this.scene,this.camera),this.css3dRenderer&&this.css3dRenderer.render(this.scene,this.camera),this.eventsListener.onRender&&this.eventsListener.onRender.length&&this.eventsListener.onRender.forEach(t=>t()))});r(this,"requestRenderIfNotRequested",()=>{this.renderRequested||(this.renderRequested=!0,requestAnimationFrame(()=>{this.onRender()}))});r(this,"onResize",()=>{this.resizeTimer&&clearTimeout(this.resizeTimer),this.resizeTimer=setTimeout(()=>{const[t,e]=this.getTargetSize();this.updateCameraFOV(t,e),this.camera.lookAt(this.scene.position),this.renderer.setSize(t,e),this.css3dRenderer&&this.css3dRenderer.setSize(t,e),this.onRender()},X)});r(this,"frameArea",(t,e)=>(console.warn(`[ThreeIns] frameArea() 已弃用,建议使用 setView() 方法。
1
+ "use strict";var q=Object.defineProperty;var B=(F,e,t)=>e in F?q(F,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):F[e]=t;var i=(F,e,t)=>B(F,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const R=require("./useBatchGLTFLoader-wNkKD723.cjs"),o=require("./PredictiveLoader-c5o_CMyI.cjs"),u=require("./objectQuery-DFqBNl0a.cjs"),I=require("./modelOptimizer-_7Yr0hPn.cjs"),a=require("three"),G="1.5.2",X=50,Y=20,Z=20,z={TOP:"top",RIGHT:"right",LEFT:"left",ISO:"iso"},U={enableDamping:!0,dampingFactor:.25,screenSpacePanning:!1,minDistance:.1,maxDistance:1e3,maxPolarAngle:a.MathUtils.degToRad(60)};class V{constructor(e,t){i(this,"isReady",!1);i(this,"scene",null);i(this,"camera",null);i(this,"renderer",null);i(this,"control",null);i(this,"css3dRenderer",null);i(this,"el",null);i(this,"renderRequested",!1);i(this,"selector",null);i(this,"eventsListener",{});i(this,"stats",null);i(this,"isDispose",!1);i(this,"version","0.0.0");i(this,"boxHelper",null);i(this,"initOpt",{css3d:!1,stats:!1,renderType:"change",initListener:!0,initialFov:50,control:{init:!0,options:{}}});i(this,"setup",e=>{if(this.isDispose=!1,this.selector=e,this.el=document.querySelector(e),!this.el){console.error(`ThreeIns: 找不到元素 ${e}`);return}const[t,l]=this.getTargetSize();if(this.updateCameraFOV(t,l),this.camera.position.set(0,0,0),this.camera.lookAt(0,0,0),this.camera.updateProjectionMatrix(),this.renderer.setPixelRatio(window.devicePixelRatio),this.renderer.setSize(t,l),this.el.appendChild(this.renderer.domElement),this.initOpt.control&&this.initOpt.control.init){this.control=o.createOrbitControl(this.camera,this.renderer.domElement);const s=Object.assign(U,this.initOpt.control.options||{});Object.keys(s).forEach(p=>{this.control[p]=s[p]})}setTimeout(()=>{this.isReady=!0},Y),this.initOpt.stats&&this.initStats(),this.initOpt.css3d&&this.initCss3dRenderer(),this.initOpt.renderType==="loop"?this.animate():this.initOpt.renderType==="change"&&this.control&&this.control.addEventListener("change",this.requestRenderIfNotRequested),this.initListener()});i(this,"onContextLost",e=>{e.preventDefault(),this.animationFrameId&&cancelAnimationFrame(this.animationFrameId)});i(this,"onContextRestored",e=>{e.preventDefault(),this.dispose(),setTimeout(()=>{this.setup(this.selector)},Z)});i(this,"initListener",()=>{this.initOpt.initListener&&window&&window.addEventListener("resize",this.onResize,!1),this.renderer.domElement.addEventListener("webglcontextlost",this.onContextLost,!1),this.renderer.domElement.addEventListener("webglcontextrestored",this.onContextRestored,!1)});i(this,"removeListener",()=>{window&&window.removeEventListener("resize",this.onResize,!1),this.renderer&&this.renderer.domElement&&(this.renderer.domElement.removeEventListener("webglcontextlost",this.onContextLost,!1),this.renderer.domElement.removeEventListener("webglcontextrestored",this.onContextRestored,!1))});i(this,"animate",()=>{this.isDispose||(this.initOpt.renderType==="loop"&&this.onRender(),this.animationFrameId=requestAnimationFrame(this.animate))});i(this,"onRender",()=>{if(this.isDispose)return;const e=this.debug?performance.now():0;this.renderRequested=!1,this.stats&&this.stats.update(),this.control&&this.control.update(),this.renderer.render(this.scene,this.camera),this.css3dRenderer&&this.css3dRenderer.render(this.scene,this.camera);const t=this.eventsListener.onRender;if(t&&t.length){const l=t.length;for(let s=0;s<l;s++)try{t[s]()}catch(p){console.error("[ThreeIns] 渲染回调执行错误:",p)}}if(this.debug){const l=performance.now()-e;l>50&&console.warn(`[ThreeIns] 帧耗时 ${l.toFixed(1)}ms,可能存在性能问题`)}});i(this,"requestRenderIfNotRequested",()=>{this.renderRequested||(this.renderRequested=!0,requestAnimationFrame(()=>{this.onRender()}))});i(this,"onResize",()=>{this.resizeTimer&&clearTimeout(this.resizeTimer),this.resizeTimer=setTimeout(()=>{const[e,t]=this.getTargetSize();this.updateCameraFOV(e,t),this.camera.lookAt(this.scene.position),this.renderer.setSize(e,t),this.css3dRenderer&&this.css3dRenderer.setSize(e,t),this.onRender()},X)});i(this,"frameArea",(e,t)=>(console.warn(`[ThreeIns] frameArea() 已弃用,建议使用 setView() 方法。
2
2
  旧用法: threeIns.frameArea(model, scale)
3
- 新用法: threeIns.setView(model, ViewType.ISO, { scale })`),this.setView(t,E.ISO,{scale:e,animate:!1,showBox:!1})));r(this,"setView",(t,e,m={})=>{let o=m.scale||.8,M=m.offset||null,z=m.position||"center",O=m.showBox||!1,H=m.boxColor||16776960,T=m.animate!==void 0?m.animate:!0,y=m.duration||1e3;const R=new n.Box3().setFromObject(t);let h=R.getCenter(new n.Vector3);if(typeof z=="string"){const i=R.getSize(new n.Vector3),l={center:new n.Vector3(0,0,0),"top-left":new n.Vector3(-i.x*.3,i.y*.3,i.z*.3),"top-right":new n.Vector3(i.x*.3,i.y*.3,i.z*.3),"bottom-left":new n.Vector3(-i.x*.3,-i.y*.3,i.z*.3),"bottom-right":new n.Vector3(i.x*.3,-i.y*.3,i.z*.3)},d=l[z]||l.center;typeof e=="string"?e==="top"?h.add(new n.Vector3(d.x,0,d.z)):e==="right"||e==="left"?h.add(new n.Vector3(d.x,d.y,d.z)):h.add(d):h.add(d)}else z instanceof n.Vector3&&h.add(z);M&&h.add(M);const s=R.getSize(new n.Vector3);let b;if(e instanceof n.Vector3)b=e.clone().normalize();else{const i={top:new n.Vector3(0,1,0),right:new n.Vector3(1,1,1).normalize(),left:new n.Vector3(-1,1,1).normalize(),iso:new n.Vector3(0,1,1).normalize()};b=i[e]||i.iso}const C=this.camera.aspect,c=n.MathUtils.degToRad(this.camera.fov*.5),I=n.MathUtils.degToRad(80),x=Math.min(Math.atan(Math.tan(c)*C),I);let f;if(e instanceof n.Vector3){const i=s.x*.5/(Math.tan(x)*o),l=s.y*.5/(Math.tan(c)*o),d=s.z*.5/(Math.tan(c)*o);f=Math.max(i,l,d)}else if(e==="top"){const i=s.x*.5/(Math.tan(x)*o),l=s.z*.5/(Math.tan(c)*o);f=Math.max(i,l)}else if(e==="right"||e==="left"){const i=s.y*.5/(Math.tan(c)*o),l=s.z*.5/(Math.tan(c)*o);f=Math.max(i,l)}else{const i=s.x*.5/(Math.tan(x)*o),l=s.y*.5/(Math.tan(c)*o),d=s.z*.5/(Math.tan(c)*o);f=Math.max(i,l,d)}const u=b.clone().multiplyScalar(f).add(h);if(O&&(console.log("📍 相机位置验证:"),console.log(" - 方向向量:",b),console.log(" - 距离:",f.toFixed(2)),console.log(" - 包围盒中心:",h),console.log(" - 计算公式: direction * distance + boxCenter"),console.log(" - 目标位置:",u),console.log(" - 实际相机与中心的距离:",u.clone().sub(h).length().toFixed(2))),O?(this.boxHelper&&(this.scene.remove(this.boxHelper),this.boxHelper=null),this.boxHelper=new n.Box3Helper(R,H),this.scene.add(this.boxHelper)):this.boxHelper&&(this.scene.remove(this.boxHelper),this.boxHelper=null),T){const i=this.camera.position.clone(),l=this.control?this.control.target.clone():new n.Vector3(0,0,0),d=h,j=Date.now(),w=()=>{const P=Date.now()-j,D=Math.min(P/y,1),V=1-Math.pow(1-D,3);if(this.camera.position.lerpVectors(i,u,V),this.control){const L=new n.Vector3;L.lerpVectors(l,d,V),this.control.target.copy(L),this.camera.lookAt(L)}else this.camera.lookAt(h);this.camera.updateProjectionMatrix(),D<1?requestAnimationFrame(w):(this.camera.position.copy(u),this.camera.lookAt(h),this.camera.updateProjectionMatrix(),this.control&&(this.control.target.copy(h),this.control.update()),this.onRender())};w()}else this.camera.position.copy(u),this.camera.lookAt(h),this.camera.updateProjectionMatrix(),this.control&&(this.control.target.copy(h),this.control.update()),this.onRender();if(O){if(console.log("🎥 视角切换信息:"),console.log(" - 视角类型:",e instanceof n.Vector3?`自定义 Vector3(${e.x.toFixed(2)}, ${e.y.toFixed(2)}, ${e.z.toFixed(2)})`:e),console.log(" - 相机位置:",u),console.log(" - 观察目标:",h),console.log(" - 方向向量:",b),console.log(" - 包围盒尺寸:",s),console.log(" - 包围盒中心:",R.getCenter(new n.Vector3)),console.log(" - 水平 FOV:",n.MathUtils.radToDeg(x*2).toFixed(2)+"°"),console.log(" - 垂直 FOV:",n.MathUtils.radToDeg(c*2).toFixed(2)+"°"),console.log(" - 宽高比:",C.toFixed(4)),console.log(" - 模型宽度:",s.x.toFixed(2)),console.log(" - 模型高度:",s.y.toFixed(2)),console.log(" - 模型深度:",s.z.toFixed(2)),console.log(" - 传入的 scale 参数:",o),e instanceof n.Vector3){const i=s.x*.5/(Math.tan(x)*o),l=s.y*.5/(Math.tan(c)*o),d=s.z*.5/(Math.tan(c)*o);console.log(" - 模型 X 尺寸 (宽度):",s.x.toFixed(2)),console.log(" - 模型 Y 尺寸 (高度):",s.y.toFixed(2)),console.log(" - 模型 Z 尺寸 (深度):",s.z.toFixed(2)),console.log(" - tan(halfFovX):",Math.tan(x).toFixed(4)),console.log(" - tan(halfFovY):",Math.tan(c).toFixed(4)),console.log(" - X方向距离计算: (",(s.x*.5).toFixed(2),") / (",Math.tan(x).toFixed(4)," *",o,") =",i.toFixed(2)),console.log(" - Y方向距离计算: (",(s.y*.5).toFixed(2),") / (",Math.tan(c).toFixed(4)," *",o,") =",l.toFixed(2)),console.log(" - Z方向距离计算: (",(s.z*.5).toFixed(2),") / (",Math.tan(c).toFixed(4)," *",o,") =",d.toFixed(2)),console.log(" - X方向距离 (scale="+o+"):",i.toFixed(2)),console.log(" - Y方向距离 (scale="+o+"):",l.toFixed(2)),console.log(" - Z方向距离 (scale="+o+"):",d.toFixed(2)),console.log(" - 最大距离 (Max):",Math.max(i,l,d).toFixed(2))}else if(e==="top"){const i=s.x*.5/(Math.tan(x)*o),l=s.z*.5/(Math.tan(c)*o);console.log(" - 模型 X 尺寸 (宽度):",s.x.toFixed(2)),console.log(" - 模型 Z 尺寸 (深度):",s.z.toFixed(2)),console.log(" - tan(halfFovX):",Math.tan(x).toFixed(4)),console.log(" - tan(halfFovY):",Math.tan(c).toFixed(4)),console.log(" - X方向距离计算: (",(s.x*.5).toFixed(2),") / (",Math.tan(x).toFixed(4)," *",o,") =",i.toFixed(2)),console.log(" - Z方向距离计算: (",(s.z*.5).toFixed(2),") / (",Math.tan(c).toFixed(4)," *",o,") =",l.toFixed(2)),console.log(" - X方向距离 (scale="+o+"):",i.toFixed(2)),console.log(" - Z方向距离 (scale="+o+"):",l.toFixed(2))}else if(e==="right"||e==="left"){const i=s.y*.5/(Math.tan(c)*o),l=s.z*.5/(Math.tan(c)*o);console.log(" - Y方向距离 (scale="+o+"):",i.toFixed(2)),console.log(" - Z方向距离 (scale="+o+"):",l.toFixed(2))}else{const i=s.x*.5/(Math.tan(x)*o),l=s.y*.5/(Math.tan(c)*o),d=s.z*.5/(Math.tan(c)*o);console.log(" - 模型 X 尺寸 (宽度):",s.x.toFixed(2)),console.log(" - 模型 Y 尺寸 (高度):",s.y.toFixed(2)),console.log(" - 模型 Z 尺寸 (深度):",s.z.toFixed(2)),console.log(" - tan(halfFovX):",Math.tan(x).toFixed(4)),console.log(" - tan(halfFovY):",Math.tan(c).toFixed(4)),console.log(" - X方向距离计算: (",(s.x*.5).toFixed(2),") / (",Math.tan(x).toFixed(4)," *",o,") =",i.toFixed(2)),console.log(" - Y方向距离计算: (",(s.y*.5).toFixed(2),") / (",Math.tan(c).toFixed(4)," *",o,") =",l.toFixed(2)),console.log(" - Z方向距离计算: (",(s.z*.5).toFixed(2),") / (",Math.tan(c).toFixed(4)," *",o,") =",d.toFixed(2)),console.log(" - X方向距离 (scale="+o+"):",i.toFixed(2)),console.log(" - Y方向距离 (scale="+o+"):",l.toFixed(2)),console.log(" - Z方向距离 (scale="+o+"):",d.toFixed(2)),console.log(" - 最大距离 (Max):",Math.max(i,l,d).toFixed(2))}console.log(" - 最终距离:",f.toFixed(2)),console.log(" - 缩放比例:",o),console.log(" - 动画:",T?"是 ("+y+"ms)":"否")}return{position:u,target:h,distance:f,viewType:e}});r(this,"on",(t,e)=>!t||!e||typeof e!="function"?(console.warn("ThreeIns.on: 无效的参数"),()=>{}):(this.eventsListener[t]||(this.eventsListener[t]=[]),this.eventsListener[t].push(e),()=>this.off(t,e)));this.isReady=!1,this.scene=new n.Scene({}),this.camera=new n.PerspectiveCamera(50,1,.1,2e3),this.renderer=new n.WebGLRenderer({antialias:!0,alpha:!0,precision:"mediump",logarithmicDepthBuffer:!0}),this.version=B,this.onContextLost=this.onContextLost.bind(this),this.onContextRestored=this.onContextRestored.bind(this),this.onResize=this.onResize.bind(this),this.animate=this.animate.bind(this),this.resizeTimer=null,this.animationFrameId=null,e&&(this.initOpt=Object.assign(this.initOpt,e)),t&&this.setup(t)}updateCameraFOV(t,e){const m=this.initOpt.initialFov||50,o=Math.tan(Math.PI/180*m/2);this.camera.aspect=t/e,this.camera.fov=360/Math.PI*Math.atan(o*(e/t)),this.camera.updateProjectionMatrix()}initStats(){this.stats=new a.Stats,this.stats.dom.style.cssText="position:absolute;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000",this.el.appendChild(this.stats.dom)}initCss3dRenderer(){this.css3dRenderer=new a.CSS3DRenderer;const[t,e]=this.getTargetSize();this.css3dRenderer.setSize(t,e),this.css3dRenderer.domElement.style.position="absolute",this.css3dRenderer.domElement.style.pointerEvents="none",this.css3dRenderer.domElement.style.top=0,this.css3dRenderer.domElement.style.left=0,this.el.appendChild(this.css3dRenderer.domElement)}getTargetSize(){return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement?[window.innerWidth,window.innerHeight]:this.el?!document.body.contains(this.el)&&(console.warn(`ThreeIns: 缓存的元素已失效,重新查询 ${this.selector}`),this.el=document.querySelector(this.selector),!this.el)?[0,0]:[this.el.clientWidth,this.el.clientHeight]:[0,0]}off(t,e){if(!t){this.eventsListener={};return}this.eventsListener[t]&&(e?this.eventsListener[t]=this.eventsListener[t].filter(m=>m!==e):this.eventsListener[t]=[])}dispose(){this.isDispose||(this.isDispose=!0,this.animationFrameId&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.resizeTimer&&(clearTimeout(this.resizeTimer),this.resizeTimer=null),this.removeListener(),this.eventsListener={},this.stats&&this.stats.dom&&(this.stats.dom.remove(),this.stats=null),this.css3dRenderer&&(this.css3dRenderer.domElement.remove(),this.css3dRenderer=null),this.boxHelper&&(this.scene.remove(this.boxHelper),this.boxHelper=null),this.scene&&(a.disposeThreeObject(this.scene),this.scene=null),this.renderer&&(this.renderer.dispose(),this.renderer.domElement&&this.renderer.domElement.remove(),this.renderer=null),this.control&&(this.control.dispose(),this.control=null),this.camera=null,this.el=null,this.selector=null,console.log("ThreeIns: 资源已清理完成"))}}r(v,"ViewType",E);exports.intersectColor=F.intersectColor;exports.obbObjects=F.obbObjects;exports.useBatchGLTFLoader=F.useBatchGLTFLoader;exports.useObb=F.useObb;exports.useRaycaster=F.useRaycaster;exports.useThreeJs=F.useThreeJs;exports.CacheMonitor=a.CacheMonitor;exports.ErrorType=a.ErrorType;exports.IDBCache=a.IDBCache;exports.ModelLoadError=a.ModelLoadError;exports.PredictiveLoader=a.PredictiveLoader;exports.ProgressiveSceneBuilder=a.ProgressiveSceneBuilder;exports.RetryHelper=a.RetryHelper;exports.cacheMonitor=a.cacheMonitor;exports.createArrowHelper=a.createArrowHelper;exports.createAxesHelper=a.createAxesHelper;exports.createBox3Helper=a.createBox3Helper;exports.createCameraHelper=a.createCameraHelper;exports.createGridHelper=a.createGridHelper;exports.createMapControls=a.createMapControls;exports.createOrbitControl=a.createOrbitControl;exports.createRaycaster=a.createRaycaster;exports.createStats=a.createStats;exports.dataToObject3D=a.dataToObject3D;exports.dataToObject3DSync=a.dataToObject3DSync;exports.disposeThreeObject=a.disposeThreeObject;exports.object3DToData=a.object3DToData;exports.object3DToDataSync=a.object3DToDataSync;exports.predictiveLoader=a.predictiveLoader;exports.rebuildScene=a.rebuildScene;exports.useGLTFLoader=a.useGLTFLoader;exports.ImageLoader=g.ImageLoader;exports.createInfoPlane=g.createInfoPlane;exports.createTagPlane=g.createTagPlane;exports.getCommonParent=g.getCommonParent;exports.getObjectByUserData=g.getObjectByUserData;exports.getRootObj=g.getRootObj;exports.initEnvImage=g.initEnvImage;exports.ModelOptimizer=S.ModelOptimizer;exports.modelOptimizer=S.modelOptimizer;exports.ThreeIns=v;exports.ViewType=E;
3
+ 新用法: threeIns.setView(model, ViewType.ISO, { scale })`),this.setView(e,z.ISO,{scale:t,animate:!1,showBox:!1})));i(this,"setView",(e,t,l={})=>{let s=l.scale||.8,p=l.offset||null,T=l.position||"center",M=l.showBox||!1,H=l.boxColor||16776960,w=l.animate!==void 0?l.animate:!0,C=l.duration||1e3;const b=new a.Box3().setFromObject(e);let d=b.getCenter(new a.Vector3);if(typeof T=="string"){const n=b.getSize(new a.Vector3),c={center:new a.Vector3(0,0,0),"top-left":new a.Vector3(-n.x*.3,n.y*.3,n.z*.3),"top-right":new a.Vector3(n.x*.3,n.y*.3,n.z*.3),"bottom-left":new a.Vector3(-n.x*.3,-n.y*.3,n.z*.3),"bottom-right":new a.Vector3(n.x*.3,-n.y*.3,n.z*.3)},m=c[T]||c.center;t==="top"?d.add(new a.Vector3(m.x,0,m.z)):t==="right"||t==="left"?d.add(new a.Vector3(0,m.y,m.z)):d.add(m)}else T instanceof a.Vector3&&d.add(T);p&&d.add(p);const r=b.getSize(new a.Vector3),y={top:new a.Vector3(0,1,0),right:new a.Vector3(1,1,1).normalize(),left:new a.Vector3(-1,1,1).normalize(),iso:new a.Vector3(0,1,1).normalize()},O=y[t]||y.iso,E=this.camera.aspect,h=a.MathUtils.degToRad(this.camera.fov*.5),j=a.MathUtils.degToRad(80),f=Math.min(Math.atan(Math.tan(h)*E),j);let g;if(t==="top"){const n=r.x*.5/(Math.tan(f)*s),c=r.z*.5/(Math.tan(h)*s);g=Math.max(n,c)}else if(t==="right"||t==="left"){const n=r.y*.5/(Math.tan(h)*s),c=r.z*.5/(Math.tan(h)*s);g=Math.max(n,c)}else{const n=r.x*.5/(Math.tan(f)*s),c=r.y*.5/(Math.tan(h)*s),m=r.z*.5/(Math.tan(h)*s);g=Math.max(n,c,m)}const x=O.clone().multiplyScalar(g).add(d);if(M&&(console.log("📍 相机位置验证:"),console.log(" - 方向向量:",O),console.log(" - 距离:",g.toFixed(2)),console.log(" - 包围盒中心:",d),console.log(" - 计算公式: direction * distance + boxCenter"),console.log(" - 目标位置:",x),console.log(" - 实际相机与中心的距离:",x.clone().sub(d).length().toFixed(2))),M?(this.boxHelper&&(this.scene.remove(this.boxHelper),this.boxHelper=null),this.boxHelper=new a.Box3Helper(b,H),this.scene.add(this.boxHelper)):this.boxHelper&&(this.scene.remove(this.boxHelper),this.boxHelper=null),w){const n=this.camera.position.clone(),c=this.control?this.control.target.clone():new a.Vector3(0,0,0),m=d,A=Date.now(),v=()=>{const P=Date.now()-A,S=Math.min(P/C,1),D=1-Math.pow(1-S,3);if(this.camera.position.lerpVectors(n,x,D),this.control){const L=new a.Vector3;L.lerpVectors(c,m,D),this.control.target.copy(L),this.camera.lookAt(L)}else this.camera.lookAt(d);this.camera.updateProjectionMatrix(),S<1?requestAnimationFrame(v):(this.camera.position.copy(x),this.camera.lookAt(d),this.camera.updateProjectionMatrix(),this.control&&(this.control.target.copy(d),this.control.update()),this.onRender())};v()}else this.camera.position.copy(x),this.camera.lookAt(d),this.camera.updateProjectionMatrix(),this.control&&(this.control.target.copy(d),this.control.update()),this.onRender();if(M){if(console.log("🎥 视角切换信息:"),console.log(" - 视角类型:",t),console.log(" - 相机位置:",x),console.log(" - 观察目标:",d),console.log(" - 方向向量:",O),console.log(" - 包围盒尺寸:",r),console.log(" - 包围盒中心:",b.getCenter(new a.Vector3)),console.log(" - 水平 FOV:",a.MathUtils.radToDeg(f*2).toFixed(2)+"°"),console.log(" - 垂直 FOV:",a.MathUtils.radToDeg(h*2).toFixed(2)+"°"),console.log(" - 宽高比:",E.toFixed(4)),console.log(" - 模型宽度:",r.x.toFixed(2)),console.log(" - 模型高度:",r.y.toFixed(2)),console.log(" - 模型深度:",r.z.toFixed(2)),console.log(" - 传入的 scale 参数:",s),t==="top"){const n=r.x*.5/(Math.tan(f)*s),c=r.z*.5/(Math.tan(h)*s);console.log(" - 模型 X 尺寸 (宽度):",r.x.toFixed(2)),console.log(" - 模型 Z 尺寸 (深度):",r.z.toFixed(2)),console.log(" - tan(halfFovX):",Math.tan(f).toFixed(4)),console.log(" - tan(halfFovY):",Math.tan(h).toFixed(4)),console.log(" - X方向距离计算: (",(r.x*.5).toFixed(2),") / (",Math.tan(f).toFixed(4)," *",s,") =",n.toFixed(2)),console.log(" - Z方向距离计算: (",(r.z*.5).toFixed(2),") / (",Math.tan(h).toFixed(4)," *",s,") =",c.toFixed(2)),console.log(" - X方向距离 (scale="+s+"):",n.toFixed(2)),console.log(" - Z方向距离 (scale="+s+"):",c.toFixed(2))}else if(t==="right"||t==="left"){const n=r.y*.5/(Math.tan(h)*s),c=r.z*.5/(Math.tan(h)*s);console.log(" - Y方向距离 (scale="+s+"):",n.toFixed(2)),console.log(" - Z方向距离 (scale="+s+"):",c.toFixed(2))}else{const n=r.x*.5/(Math.tan(f)*s),c=r.y*.5/(Math.tan(h)*s),m=r.z*.5/(Math.tan(h)*s);console.log(" - 模型 X 尺寸 (宽度):",r.x.toFixed(2)),console.log(" - 模型 Y 尺寸 (高度):",r.y.toFixed(2)),console.log(" - 模型 Z 尺寸 (深度):",r.z.toFixed(2)),console.log(" - tan(halfFovX):",Math.tan(f).toFixed(4)),console.log(" - tan(halfFovY):",Math.tan(h).toFixed(4)),console.log(" - X方向距离计算: (",(r.x*.5).toFixed(2),") / (",Math.tan(f).toFixed(4)," *",s,") =",n.toFixed(2)),console.log(" - Y方向距离计算: (",(r.y*.5).toFixed(2),") / (",Math.tan(h).toFixed(4)," *",s,") =",c.toFixed(2)),console.log(" - Z方向距离计算: (",(r.z*.5).toFixed(2),") / (",Math.tan(h).toFixed(4)," *",s,") =",m.toFixed(2)),console.log(" - X方向距离 (scale="+s+"):",n.toFixed(2)),console.log(" - Y方向距离 (scale="+s+"):",c.toFixed(2)),console.log(" - Z方向距离 (scale="+s+"):",m.toFixed(2)),console.log(" - 最大距离 (Max):",Math.max(n,c,m).toFixed(2))}console.log(" - 最终距离:",g.toFixed(2)),console.log(" - 缩放比例:",s),console.log(" - 动画:",w?"是 ("+C+"ms)":"否")}return{position:x,target:d,distance:g,viewType:t}});i(this,"on",(e,t)=>!e||!t||typeof t!="function"?(console.warn("ThreeIns.on: 无效的参数"),()=>{}):(this.eventsListener[e]||(this.eventsListener[e]=[]),this.eventsListener[e].push(t),()=>this.off(e,t)));i(this,"addAnimate",e=>!e||typeof e!="function"?(console.warn("ThreeIns.addAnimate: 无效的回调函数"),()=>{}):(this.eventsListener.onRender||(this.eventsListener.onRender=[]),this.eventsListener.onRender.push(e),()=>this.removeAnimate(e)));i(this,"removeAnimate",e=>{if(!e)return;const t=this.eventsListener.onRender;if(!t)return;const l=t.indexOf(e);l>-1&&t.splice(l,1)});this.isReady=!1,this.scene=new a.Scene({}),this.camera=new a.PerspectiveCamera(50,1,.1,2e3),this.renderer=new a.WebGLRenderer({antialias:!0,alpha:!0,precision:"mediump",logarithmicDepthBuffer:!0}),this.version=G,this.onContextLost=this.onContextLost.bind(this),this.onContextRestored=this.onContextRestored.bind(this),this.onResize=this.onResize.bind(this),this.animate=this.animate.bind(this),this.resizeTimer=null,this.animationFrameId=null,t&&(this.initOpt=Object.assign(this.initOpt,t)),e&&this.setup(e)}updateCameraFOV(e,t){const l=this.initOpt.initialFov||50,s=Math.tan(Math.PI/180*l/2);this.camera.aspect=e/t,this.camera.fov=360/Math.PI*Math.atan(s*(t/e)),this.camera.updateProjectionMatrix()}initStats(){this.stats=new o.Stats,this.stats.dom.style.cssText="position:absolute;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000",this.el.appendChild(this.stats.dom)}initCss3dRenderer(){this.css3dRenderer=new o.CSS3DRenderer;const[e,t]=this.getTargetSize();this.css3dRenderer.setSize(e,t),this.css3dRenderer.domElement.style.position="absolute",this.css3dRenderer.domElement.style.pointerEvents="none",this.css3dRenderer.domElement.style.top=0,this.css3dRenderer.domElement.style.left=0,this.el.appendChild(this.css3dRenderer.domElement)}getTargetSize(){return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement?[window.innerWidth,window.innerHeight]:this.el?!document.body.contains(this.el)&&(console.warn(`ThreeIns: 缓存的元素已失效,重新查询 ${this.selector}`),this.el=document.querySelector(this.selector),!this.el)?[0,0]:[this.el.clientWidth,this.el.clientHeight]:[0,0]}off(e,t){if(!e){this.eventsListener={};return}this.eventsListener[e]&&(t?this.eventsListener[e]=this.eventsListener[e].filter(l=>l!==t):this.eventsListener[e]=[])}dispose(){this.isDispose||(this.isDispose=!0,this.animationFrameId&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.resizeTimer&&(clearTimeout(this.resizeTimer),this.resizeTimer=null),this.removeListener(),this.eventsListener={},this.stats&&this.stats.dom&&(this.stats.dom.remove(),this.stats=null),this.css3dRenderer&&(this.css3dRenderer.domElement.remove(),this.css3dRenderer=null),this.boxHelper&&(this.scene.remove(this.boxHelper),this.boxHelper=null),this.scene&&(o.disposeThreeObject(this.scene),this.scene=null),this.renderer&&(this.renderer.dispose(),this.renderer.domElement&&this.renderer.domElement.remove(),this.renderer=null),this.control&&(this.control.dispose(),this.control=null),this.camera=null,this.el=null,this.selector=null,console.log("ThreeIns: 资源已清理完成"))}}i(V,"ViewType",z);exports.intersectColor=R.intersectColor;exports.obbObjects=R.obbObjects;exports.useBatchGLTFLoader=R.useBatchGLTFLoader;exports.useObb=R.useObb;exports.useRaycaster=R.useRaycaster;exports.useThreeJs=R.useThreeJs;exports.CacheMonitor=o.CacheMonitor;exports.ErrorType=o.ErrorType;exports.IDBCache=o.IDBCache;exports.ModelLoadError=o.ModelLoadError;exports.PredictiveLoader=o.PredictiveLoader;exports.ProgressiveSceneBuilder=o.ProgressiveSceneBuilder;exports.RetryHelper=o.RetryHelper;exports.cacheMonitor=o.cacheMonitor;exports.clearGeometryCache=o.clearGeometryCache;exports.clearMaterialCache=o.clearMaterialCache;exports.createArrowHelper=o.createArrowHelper;exports.createAxesHelper=o.createAxesHelper;exports.createBox3Helper=o.createBox3Helper;exports.createCameraHelper=o.createCameraHelper;exports.createGridHelper=o.createGridHelper;exports.createMapControls=o.createMapControls;exports.createOrbitControl=o.createOrbitControl;exports.createRaycaster=o.createRaycaster;exports.createStats=o.createStats;exports.dataToObject3D=o.dataToObject3D;exports.dataToObject3DSync=o.dataToObject3DSync;exports.disposeThreeObject=o.disposeThreeObject;exports.getGeometryCacheStats=o.getGeometryCacheStats;exports.getMaterialCacheStats=o.getMaterialCacheStats;exports.object3DToData=o.object3DToData;exports.object3DToDataSync=o.object3DToDataSync;exports.object3DToTransferable=o.object3DToTransferable;exports.predictiveLoader=o.predictiveLoader;exports.rebuildScene=o.rebuildScene;exports.useGLTFLoader=o.useGLTFLoader;exports.ImageLoader=u.ImageLoader;exports.cancelIdleTask=u.cancelIdleTask;exports.createInfoPlane=u.createInfoPlane;exports.createTagPlane=u.createTagPlane;exports.getCommonParent=u.getCommonParent;exports.getObjectByUserData=u.getObjectByUserData;exports.getRootObj=u.getRootObj;exports.initEnvImage=u.initEnvImage;exports.processInChunks=u.processInChunks;exports.runWhenIdle=u.runWhenIdle;exports.throttle=u.throttle;exports.ModelOptimizer=I.ModelOptimizer;exports.modelOptimizer=I.modelOptimizer;exports.ThreeIns=V;exports.ViewType=z;