@thatopen/components 2.3.12 → 2.3.13

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.
package/dist/index.cjs CHANGED
@@ -1,13 +1,13 @@
1
- "use strict";var Bo=Object.defineProperty;var Vo=(c,i,t)=>i in c?Bo(c,i,{enumerable:!0,configurable:!0,writable:!0,value:t}):c[i]=t;var C=(c,i,t)=>(Vo(c,typeof i!="symbol"?i+"":i,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const L=require("three"),Dn=require("@thatopen/fragments"),Yo=require("web-ifc");function bn(c){const i=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(c){for(const t in c)if(t!=="default"){const e=Object.getOwnPropertyDescriptor(c,t);Object.defineProperty(i,t,e.get?e:{enumerable:!0,get:()=>c[t]})}}return i.default=c,Object.freeze(i)}const b=bn(L),jt=bn(Dn),k=bn(Yo),Ur=0,Go=1,zo=2,Xn=2,Ws=1.25,$n=1,cs=6*4+4+4,xs=65535,ko=Math.pow(2,-24),Xs=Symbol("SKIP_GENERATION");function Ho(c){return c.index?c.index.count:c.attributes.position.count}function ei(c){return Ho(c)/3}function Wo(c,i=ArrayBuffer){return c>65535?new Uint32Array(new i(4*c)):new Uint16Array(new i(2*c))}function Xo(c,i){if(!c.index){const t=c.attributes.position.count,e=i.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer,s=Wo(t,e);c.setIndex(new L.BufferAttribute(s,1));for(let n=0;n<t;n++)s[n]=n}}function xr(c){const i=ei(c),t=c.drawRange,e=t.start/3,s=(t.start+t.count)/3,n=Math.max(0,e),r=Math.min(i,s)-n;return[{offset:Math.floor(n),count:Math.floor(r)}]}function Br(c){if(!c.groups||!c.groups.length)return xr(c);const i=[],t=new Set,e=c.drawRange,s=e.start/3,n=(e.start+e.count)/3;for(const o of c.groups){const a=o.start/3,l=(o.start+o.count)/3;t.add(Math.max(s,a)),t.add(Math.min(n,l))}const r=Array.from(t.values()).sort((o,a)=>o-a);for(let o=0;o<r.length-1;o++){const a=r[o],l=r[o+1];i.push({offset:Math.floor(a),count:Math.floor(l-a)})}return i}function $o(c){if(c.groups.length===0)return!1;const i=ei(c),t=Br(c).sort((n,r)=>n.offset-r.offset),e=t[t.length-1];e.count=Math.min(i-e.offset,e.count);let s=0;return t.forEach(({count:n})=>s+=n),i!==s}function Ot(c,i,t){return t.min.x=i[c],t.min.y=i[c+1],t.min.z=i[c+2],t.max.x=i[c+3],t.max.y=i[c+4],t.max.z=i[c+5],t}function Zo(c){c[0]=c[1]=c[2]=1/0,c[3]=c[4]=c[5]=-1/0}function Zn(c){let i=-1,t=-1/0;for(let e=0;e<3;e++){const s=c[e+3]-c[e];s>t&&(t=s,i=e)}return i}function jn(c,i){i.set(c)}function qn(c,i,t){let e,s;for(let n=0;n<3;n++){const r=n+3;e=c[n],s=i[n],t[n]=e<s?e:s,e=c[r],s=i[r],t[r]=e>s?e:s}}function xi(c,i,t){for(let e=0;e<3;e++){const s=i[c+2*e],n=i[c+2*e+1],r=s-n,o=s+n;r<t[e]&&(t[e]=r),o>t[e+3]&&(t[e+3]=o)}}function ri(c){const i=c[3]-c[0],t=c[4]-c[1],e=c[5]-c[2];return 2*(i*t+t*e+e*i)}function $s(c,i,t,e,s=null){let n=1/0,r=1/0,o=1/0,a=-1/0,l=-1/0,h=-1/0,f=1/0,I=1/0,u=1/0,d=-1/0,E=-1/0,T=-1/0;const p=s!==null;for(let m=i*6,F=(i+t)*6;m<F;m+=6){const R=c[m+0],S=c[m+1],O=R-S,y=R+S;O<n&&(n=O),y>a&&(a=y),p&&R<f&&(f=R),p&&R>d&&(d=R);const w=c[m+2],P=c[m+3],v=w-P,G=w+P;v<r&&(r=v),G>l&&(l=G),p&&w<I&&(I=w),p&&w>E&&(E=w);const N=c[m+4],D=c[m+5],g=N-D,U=N+D;g<o&&(o=g),U>h&&(h=U),p&&N<u&&(u=N),p&&N>T&&(T=N)}e[0]=n,e[1]=r,e[2]=o,e[3]=a,e[4]=l,e[5]=h,p&&(s[0]=f,s[1]=I,s[2]=u,s[3]=d,s[4]=E,s[5]=T)}function jo(c,i,t,e){let s=1/0,n=1/0,r=1/0,o=-1/0,a=-1/0,l=-1/0;for(let h=i*6,f=(i+t)*6;h<f;h+=6){const I=c[h+0];I<s&&(s=I),I>o&&(o=I);const u=c[h+2];u<n&&(n=u),u>a&&(a=u);const d=c[h+4];d<r&&(r=d),d>l&&(l=d)}e[0]=s,e[1]=n,e[2]=r,e[3]=o,e[4]=a,e[5]=l}function qo(c,i){Zo(i);const t=c.attributes.position,e=c.index?c.index.array:null,s=ei(c),n=new Float32Array(s*6),r=t.normalized,o=t.array,a=t.offset||0;let l=3;t.isInterleavedBufferAttribute&&(l=t.data.stride);const h=["getX","getY","getZ"];for(let f=0;f<s;f++){const I=f*3,u=f*6;let d=I+0,E=I+1,T=I+2;e&&(d=e[d],E=e[E],T=e[T]),r||(d=d*l+a,E=E*l+a,T=T*l+a);for(let p=0;p<3;p++){let m,F,R;r?(m=t[h[p]](d),F=t[h[p]](E),R=t[h[p]](T)):(m=o[d+p],F=o[E+p],R=o[T+p]);let S=m;F<S&&(S=F),R<S&&(S=R);let O=m;F>O&&(O=F),R>O&&(O=R);const y=(O-S)/2,w=p*2;n[u+w+0]=S+y,n[u+w+1]=y+(Math.abs(S)+y)*ko,S<i[p]&&(i[p]=S),O>i[p+3]&&(i[p+3]=O)}}return n}const ue=32,Qo=(c,i)=>c.candidate-i.candidate,Te=new Array(ue).fill().map(()=>({count:0,bounds:new Float32Array(6),rightCacheBounds:new Float32Array(6),leftCacheBounds:new Float32Array(6),candidate:0})),Bi=new Float32Array(6);function Ko(c,i,t,e,s,n){let r=-1,o=0;if(n===Ur)r=Zn(i),r!==-1&&(o=(i[r]+i[r+3])/2);else if(n===Go)r=Zn(c),r!==-1&&(o=Jo(t,e,s,r));else if(n===zo){const a=ri(c);let l=Ws*s;const h=e*6,f=(e+s)*6;for(let I=0;I<3;I++){const u=i[I],T=(i[I+3]-u)/ue;if(s<ue/4){const p=[...Te];p.length=s;let m=0;for(let R=h;R<f;R+=6,m++){const S=p[m];S.candidate=t[R+2*I],S.count=0;const{bounds:O,leftCacheBounds:y,rightCacheBounds:w}=S;for(let P=0;P<3;P++)w[P]=1/0,w[P+3]=-1/0,y[P]=1/0,y[P+3]=-1/0,O[P]=1/0,O[P+3]=-1/0;xi(R,t,O)}p.sort(Qo);let F=s;for(let R=0;R<F;R++){const S=p[R];for(;R+1<F&&p[R+1].candidate===S.candidate;)p.splice(R+1,1),F--}for(let R=h;R<f;R+=6){const S=t[R+2*I];for(let O=0;O<F;O++){const y=p[O];S>=y.candidate?xi(R,t,y.rightCacheBounds):(xi(R,t,y.leftCacheBounds),y.count++)}}for(let R=0;R<F;R++){const S=p[R],O=S.count,y=s-S.count,w=S.leftCacheBounds,P=S.rightCacheBounds;let v=0;O!==0&&(v=ri(w)/a);let G=0;y!==0&&(G=ri(P)/a);const N=$n+Ws*(v*O+G*y);N<l&&(r=I,l=N,o=S.candidate)}}else{for(let F=0;F<ue;F++){const R=Te[F];R.count=0,R.candidate=u+T+F*T;const S=R.bounds;for(let O=0;O<3;O++)S[O]=1/0,S[O+3]=-1/0}for(let F=h;F<f;F+=6){let O=~~((t[F+2*I]-u)/T);O>=ue&&(O=ue-1);const y=Te[O];y.count++,xi(F,t,y.bounds)}const p=Te[ue-1];jn(p.bounds,p.rightCacheBounds);for(let F=ue-2;F>=0;F--){const R=Te[F],S=Te[F+1];qn(R.bounds,S.rightCacheBounds,R.rightCacheBounds)}let m=0;for(let F=0;F<ue-1;F++){const R=Te[F],S=R.count,O=R.bounds,w=Te[F+1].rightCacheBounds;S!==0&&(m===0?jn(O,Bi):qn(O,Bi,Bi)),m+=S;let P=0,v=0;m!==0&&(P=ri(Bi)/a);const G=s-m;G!==0&&(v=ri(w)/a);const N=$n+Ws*(P*m+v*G);N<l&&(r=I,l=N,o=R.candidate)}}}}else console.warn(`MeshBVH: Invalid build strategy value ${n} used.`);return{axis:r,pos:o}}function Jo(c,i,t,e){let s=0;for(let n=i,r=i+t;n<r;n++)s+=c[n*6+e*2];return s/t}class Vi{constructor(){}}function ta(c,i,t,e,s,n){let r=e,o=e+s-1;const a=n.pos,l=n.axis*2;for(;;){for(;r<=o&&t[r*6+l]<a;)r++;for(;r<=o&&t[o*6+l]>=a;)o--;if(r<o){for(let h=0;h<3;h++){let f=i[r*3+h];i[r*3+h]=i[o*3+h],i[o*3+h]=f}for(let h=0;h<6;h++){let f=t[r*6+h];t[r*6+h]=t[o*6+h],t[o*6+h]=f}r++,o--}else return r}}function ea(c,i,t,e,s,n){let r=e,o=e+s-1;const a=n.pos,l=n.axis*2;for(;;){for(;r<=o&&t[r*6+l]<a;)r++;for(;r<=o&&t[o*6+l]>=a;)o--;if(r<o){let h=c[r];c[r]=c[o],c[o]=h;for(let f=0;f<6;f++){let I=t[r*6+f];t[r*6+f]=t[o*6+f],t[o*6+f]=I}r++,o--}else return r}}function ia(c,i){const t=(c.index?c.index.count:c.attributes.position.count)/3,e=t>2**16,s=e?4:2,n=i?new SharedArrayBuffer(t*s):new ArrayBuffer(t*s),r=e?new Uint32Array(n):new Uint16Array(n);for(let o=0,a=r.length;o<a;o++)r[o]=o;return r}function sa(c,i){const t=c.geometry,e=t.index?t.index.array:null,s=i.maxDepth,n=i.verbose,r=i.maxLeafTris,o=i.strategy,a=i.onProgress,l=ei(t),h=c._indirectBuffer;let f=!1;const I=new Float32Array(6),u=new Float32Array(6),d=qo(t,I),E=i.indirect?ea:ta,T=[],p=i.indirect?xr(t):Br(t);if(p.length===1){const R=p[0],S=new Vi;S.boundingData=I,jo(d,R.offset,R.count,u),F(S,R.offset,R.count,u),T.push(S)}else for(let R of p){const S=new Vi;S.boundingData=new Float32Array(6),$s(d,R.offset,R.count,S.boundingData,u),F(S,R.offset,R.count,u),T.push(S)}return T;function m(R){a&&a(R/l)}function F(R,S,O,y=null,w=0){if(!f&&w>=s&&(f=!0,n&&(console.warn(`MeshBVH: Max depth of ${s} reached when generating BVH. Consider increasing maxDepth.`),console.warn(t))),O<=r||w>=s)return m(S+O),R.offset=S,R.count=O,R;const P=Ko(R.boundingData,y,d,S,O,o);if(P.axis===-1)return m(S+O),R.offset=S,R.count=O,R;const v=E(h,e,d,S,O,P);if(v===S||v===S+O)m(S+O),R.offset=S,R.count=O;else{R.splitAxis=P.axis;const G=new Vi,N=S,D=v-S;R.left=G,G.boundingData=new Float32Array(6),$s(d,N,D,G.boundingData,u),F(G,N,D,u,w+1);const g=new Vi,U=v,Q=O-D;R.right=g,g.boundingData=new Float32Array(6),$s(d,U,Q,g.boundingData,u),F(g,U,Q,u,w+1)}return R}}function na(c,i){const t=c.geometry;i.indirect&&(c._indirectBuffer=ia(t,i.useSharedArrayBuffer),$o(t)&&!i.verbose&&console.warn('MeshBVH: Provided geometry contains groups that do not fully span the vertex contents while using the "indirect" option. BVH may incorrectly report intersections on unrendered portions of the geometry.')),c._indirectBuffer||Xo(t,i);const e=sa(c,i);let s,n,r;const o=[],a=i.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer;for(let f=0;f<e.length;f++){const I=e[f];let u=l(I);const d=new a(cs*u);s=new Float32Array(d),n=new Uint32Array(d),r=new Uint16Array(d),h(0,I),o.push(d)}c._roots=o;return;function l(f){return f.count?1:1+l(f.left)+l(f.right)}function h(f,I){const u=f/4,d=f/2,E=!!I.count,T=I.boundingData;for(let p=0;p<6;p++)s[u+p]=T[p];if(E){const p=I.offset,m=I.count;return n[u+6]=p,r[d+14]=m,r[d+15]=xs,f+cs}else{const p=I.left,m=I.right,F=I.splitAxis;let R;if(R=h(f+cs,p),R/4>Math.pow(2,32))throw new Error("MeshBVH: Cannot store child pointer greater than 32 bits.");return n[u+6]=R/4,R=h(R,m),n[u+7]=F,R}}}class pe{constructor(){this.min=1/0,this.max=-1/0}setFromPointsField(i,t){let e=1/0,s=-1/0;for(let n=0,r=i.length;n<r;n++){const a=i[n][t];e=a<e?a:e,s=a>s?a:s}this.min=e,this.max=s}setFromPoints(i,t){let e=1/0,s=-1/0;for(let n=0,r=t.length;n<r;n++){const o=t[n],a=i.dot(o);e=a<e?a:e,s=a>s?a:s}this.min=e,this.max=s}isSeparated(i){return this.min>i.max||i.min>this.max}}pe.prototype.setFromBox=function(){const c=new L.Vector3;return function(t,e){const s=e.min,n=e.max;let r=1/0,o=-1/0;for(let a=0;a<=1;a++)for(let l=0;l<=1;l++)for(let h=0;h<=1;h++){c.x=s.x*a+n.x*(1-a),c.y=s.y*l+n.y*(1-l),c.z=s.z*h+n.z*(1-h);const f=t.dot(c);r=Math.min(f,r),o=Math.max(f,o)}this.min=r,this.max=o}}();const ra=function(){const c=new L.Vector3,i=new L.Vector3,t=new L.Vector3;return function(s,n,r){const o=s.start,a=c,l=n.start,h=i;t.subVectors(o,l),c.subVectors(s.end,s.start),i.subVectors(n.end,n.start);const f=t.dot(h),I=h.dot(a),u=h.dot(h),d=t.dot(a),T=a.dot(a)*u-I*I;let p,m;T!==0?p=(f*I-d*u)/T:p=0,m=(f+p*I)/u,r.x=p,r.y=m}}(),vn=function(){const c=new L.Vector2,i=new L.Vector3,t=new L.Vector3;return function(s,n,r,o){ra(s,n,c);let a=c.x,l=c.y;if(a>=0&&a<=1&&l>=0&&l<=1){s.at(a,r),n.at(l,o);return}else if(a>=0&&a<=1){l<0?n.at(0,o):n.at(1,o),s.closestPointToPoint(o,!0,r);return}else if(l>=0&&l<=1){a<0?s.at(0,r):s.at(1,r),n.closestPointToPoint(r,!0,o);return}else{let h;a<0?h=s.start:h=s.end;let f;l<0?f=n.start:f=n.end;const I=i,u=t;if(s.closestPointToPoint(f,!0,i),n.closestPointToPoint(h,!0,t),I.distanceToSquared(f)<=u.distanceToSquared(h)){r.copy(I),o.copy(f);return}else{r.copy(h),o.copy(u);return}}}}(),oa=function(){const c=new L.Vector3,i=new L.Vector3,t=new L.Plane,e=new L.Line3;return function(n,r){const{radius:o,center:a}=n,{a:l,b:h,c:f}=r;if(e.start=l,e.end=h,e.closestPointToPoint(a,!0,c).distanceTo(a)<=o||(e.start=l,e.end=f,e.closestPointToPoint(a,!0,c).distanceTo(a)<=o)||(e.start=h,e.end=f,e.closestPointToPoint(a,!0,c).distanceTo(a)<=o))return!0;const E=r.getPlane(t);if(Math.abs(E.distanceToPoint(a))<=o){const p=E.projectPoint(a,i);if(r.containsPoint(p))return!0}return!1}}(),aa=1e-15;function Zs(c){return Math.abs(c)<aa}class se extends L.Triangle{constructor(...i){super(...i),this.isExtendedTriangle=!0,this.satAxes=new Array(4).fill().map(()=>new L.Vector3),this.satBounds=new Array(4).fill().map(()=>new pe),this.points=[this.a,this.b,this.c],this.sphere=new L.Sphere,this.plane=new L.Plane,this.needsUpdate=!0}intersectsSphere(i){return oa(i,this)}update(){const i=this.a,t=this.b,e=this.c,s=this.points,n=this.satAxes,r=this.satBounds,o=n[0],a=r[0];this.getNormal(o),a.setFromPoints(o,s);const l=n[1],h=r[1];l.subVectors(i,t),h.setFromPoints(l,s);const f=n[2],I=r[2];f.subVectors(t,e),I.setFromPoints(f,s);const u=n[3],d=r[3];u.subVectors(e,i),d.setFromPoints(u,s),this.sphere.setFromPoints(this.points),this.plane.setFromNormalAndCoplanarPoint(o,i),this.needsUpdate=!1}}se.prototype.closestPointToSegment=function(){const c=new L.Vector3,i=new L.Vector3,t=new L.Line3;return function(s,n=null,r=null){const{start:o,end:a}=s,l=this.points;let h,f=1/0;for(let I=0;I<3;I++){const u=(I+1)%3;t.start.copy(l[I]),t.end.copy(l[u]),vn(t,s,c,i),h=c.distanceToSquared(i),h<f&&(f=h,n&&n.copy(c),r&&r.copy(i))}return this.closestPointToPoint(o,c),h=o.distanceToSquared(c),h<f&&(f=h,n&&n.copy(c),r&&r.copy(o)),this.closestPointToPoint(a,c),h=a.distanceToSquared(c),h<f&&(f=h,n&&n.copy(c),r&&r.copy(a)),Math.sqrt(f)}}();se.prototype.intersectsTriangle=function(){const c=new se,i=new Array(3),t=new Array(3),e=new pe,s=new pe,n=new L.Vector3,r=new L.Vector3,o=new L.Vector3,a=new L.Vector3,l=new L.Vector3,h=new L.Line3,f=new L.Line3,I=new L.Line3,u=new L.Vector3;function d(E,T,p){const m=E.points;let F=0,R=-1;for(let S=0;S<3;S++){const{start:O,end:y}=h;O.copy(m[S]),y.copy(m[(S+1)%3]),h.delta(r);const w=Zs(T.distanceToPoint(O));if(Zs(T.normal.dot(r))&&w){p.copy(h),F=2;break}const P=T.intersectLine(h,u);if(!P&&w&&u.copy(O),(P||w)&&!Zs(u.distanceTo(y))){if(F<=1)(F===1?p.start:p.end).copy(u),w&&(R=F);else if(F>=2){(R===1?p.start:p.end).copy(u),F=2;break}if(F++,F===2&&R===-1)break}}return F}return function(T,p=null,m=!1){this.needsUpdate&&this.update(),T.isExtendedTriangle?T.needsUpdate&&T.update():(c.copy(T),c.update(),T=c);const F=this.plane,R=T.plane;if(Math.abs(F.normal.dot(R.normal))>1-1e-10){const S=this.satBounds,O=this.satAxes;t[0]=T.a,t[1]=T.b,t[2]=T.c;for(let P=0;P<4;P++){const v=S[P],G=O[P];if(e.setFromPoints(G,t),v.isSeparated(e))return!1}const y=T.satBounds,w=T.satAxes;i[0]=this.a,i[1]=this.b,i[2]=this.c;for(let P=0;P<4;P++){const v=y[P],G=w[P];if(e.setFromPoints(G,i),v.isSeparated(e))return!1}for(let P=0;P<4;P++){const v=O[P];for(let G=0;G<4;G++){const N=w[G];if(n.crossVectors(v,N),e.setFromPoints(n,i),s.setFromPoints(n,t),e.isSeparated(s))return!1}}return p&&(m||console.warn("ExtendedTriangle.intersectsTriangle: Triangles are coplanar which does not support an output edge. Setting edge to 0, 0, 0."),p.start.set(0,0,0),p.end.set(0,0,0)),!0}else{const S=d(this,R,f);if(S===1&&T.containsPoint(f.end))return p&&(p.start.copy(f.end),p.end.copy(f.end)),!0;if(S!==2)return!1;const O=d(T,F,I);if(O===1&&this.containsPoint(I.end))return p&&(p.start.copy(I.end),p.end.copy(I.end)),!0;if(O!==2)return!1;if(f.delta(o),I.delta(a),o.dot(a)<0){let D=I.start;I.start=I.end,I.end=D}const y=f.start.dot(o),w=f.end.dot(o),P=I.start.dot(o),v=I.end.dot(o),G=w<P,N=y<v;return y!==v&&P!==w&&G===N?!1:(p&&(l.subVectors(f.start,I.start),l.dot(o)>0?p.start.copy(f.start):p.start.copy(I.start),l.subVectors(f.end,I.end),l.dot(o)<0?p.end.copy(f.end):p.end.copy(I.end)),!0)}}}();se.prototype.distanceToPoint=function(){const c=new L.Vector3;return function(t){return this.closestPointToPoint(t,c),t.distanceTo(c)}}();se.prototype.distanceToTriangle=function(){const c=new L.Vector3,i=new L.Vector3,t=["a","b","c"],e=new L.Line3,s=new L.Line3;return function(r,o=null,a=null){const l=o||a?e:null;if(this.intersectsTriangle(r,l))return(o||a)&&(o&&l.getCenter(o),a&&l.getCenter(a)),0;let h=1/0;for(let f=0;f<3;f++){let I;const u=t[f],d=r[u];this.closestPointToPoint(d,c),I=d.distanceToSquared(c),I<h&&(h=I,o&&o.copy(c),a&&a.copy(d));const E=this[u];r.closestPointToPoint(E,c),I=E.distanceToSquared(c),I<h&&(h=I,o&&o.copy(E),a&&a.copy(c))}for(let f=0;f<3;f++){const I=t[f],u=t[(f+1)%3];e.set(this[I],this[u]);for(let d=0;d<3;d++){const E=t[d],T=t[(d+1)%3];s.set(r[E],r[T]),vn(e,s,c,i);const p=c.distanceToSquared(i);p<h&&(h=p,o&&o.copy(c),a&&a.copy(i))}}return Math.sqrt(h)}}();class Ut{constructor(i,t,e){this.isOrientedBox=!0,this.min=new L.Vector3,this.max=new L.Vector3,this.matrix=new L.Matrix4,this.invMatrix=new L.Matrix4,this.points=new Array(8).fill().map(()=>new L.Vector3),this.satAxes=new Array(3).fill().map(()=>new L.Vector3),this.satBounds=new Array(3).fill().map(()=>new pe),this.alignedSatBounds=new Array(3).fill().map(()=>new pe),this.needsUpdate=!1,i&&this.min.copy(i),t&&this.max.copy(t),e&&this.matrix.copy(e)}set(i,t,e){this.min.copy(i),this.max.copy(t),this.matrix.copy(e),this.needsUpdate=!0}copy(i){this.min.copy(i.min),this.max.copy(i.max),this.matrix.copy(i.matrix),this.needsUpdate=!0}}Ut.prototype.update=function(){return function(){const i=this.matrix,t=this.min,e=this.max,s=this.points;for(let l=0;l<=1;l++)for(let h=0;h<=1;h++)for(let f=0;f<=1;f++){const I=1*l|2*h|4*f,u=s[I];u.x=l?e.x:t.x,u.y=h?e.y:t.y,u.z=f?e.z:t.z,u.applyMatrix4(i)}const n=this.satBounds,r=this.satAxes,o=s[0];for(let l=0;l<3;l++){const h=r[l],f=n[l],I=1<<l,u=s[I];h.subVectors(o,u),f.setFromPoints(h,s)}const a=this.alignedSatBounds;a[0].setFromPointsField(s,"x"),a[1].setFromPointsField(s,"y"),a[2].setFromPointsField(s,"z"),this.invMatrix.copy(this.matrix).invert(),this.needsUpdate=!1}}();Ut.prototype.intersectsBox=function(){const c=new pe;return function(t){this.needsUpdate&&this.update();const e=t.min,s=t.max,n=this.satBounds,r=this.satAxes,o=this.alignedSatBounds;if(c.min=e.x,c.max=s.x,o[0].isSeparated(c)||(c.min=e.y,c.max=s.y,o[1].isSeparated(c))||(c.min=e.z,c.max=s.z,o[2].isSeparated(c)))return!1;for(let a=0;a<3;a++){const l=r[a],h=n[a];if(c.setFromBox(l,t),h.isSeparated(c))return!1}return!0}}();Ut.prototype.intersectsTriangle=function(){const c=new se,i=new Array(3),t=new pe,e=new pe,s=new L.Vector3;return function(r){this.needsUpdate&&this.update(),r.isExtendedTriangle?r.needsUpdate&&r.update():(c.copy(r),c.update(),r=c);const o=this.satBounds,a=this.satAxes;i[0]=r.a,i[1]=r.b,i[2]=r.c;for(let I=0;I<3;I++){const u=o[I],d=a[I];if(t.setFromPoints(d,i),u.isSeparated(t))return!1}const l=r.satBounds,h=r.satAxes,f=this.points;for(let I=0;I<3;I++){const u=l[I],d=h[I];if(t.setFromPoints(d,f),u.isSeparated(t))return!1}for(let I=0;I<3;I++){const u=a[I];for(let d=0;d<4;d++){const E=h[d];if(s.crossVectors(u,E),t.setFromPoints(s,i),e.setFromPoints(s,f),t.isSeparated(e))return!1}}return!0}}();Ut.prototype.closestPointToPoint=function(){return function(i,t){return this.needsUpdate&&this.update(),t.copy(i).applyMatrix4(this.invMatrix).clamp(this.min,this.max).applyMatrix4(this.matrix),t}}();Ut.prototype.distanceToPoint=function(){const c=new L.Vector3;return function(t){return this.closestPointToPoint(t,c),t.distanceTo(c)}}();Ut.prototype.distanceToBox=function(){const c=["x","y","z"],i=new Array(12).fill().map(()=>new L.Line3),t=new Array(12).fill().map(()=>new L.Line3),e=new L.Vector3,s=new L.Vector3;return function(r,o=0,a=null,l=null){if(this.needsUpdate&&this.update(),this.intersectsBox(r))return(a||l)&&(r.getCenter(s),this.closestPointToPoint(s,e),r.closestPointToPoint(e,s),a&&a.copy(e),l&&l.copy(s)),0;const h=o*o,f=r.min,I=r.max,u=this.points;let d=1/0;for(let T=0;T<8;T++){const p=u[T];s.copy(p).clamp(f,I);const m=p.distanceToSquared(s);if(m<d&&(d=m,a&&a.copy(p),l&&l.copy(s),m<h))return Math.sqrt(m)}let E=0;for(let T=0;T<3;T++)for(let p=0;p<=1;p++)for(let m=0;m<=1;m++){const F=(T+1)%3,R=(T+2)%3,S=p<<F|m<<R,O=1<<T|p<<F|m<<R,y=u[S],w=u[O];i[E].set(y,w);const v=c[T],G=c[F],N=c[R],D=t[E],g=D.start,U=D.end;g[v]=f[v],g[G]=p?f[G]:I[G],g[N]=m?f[N]:I[G],U[v]=I[v],U[G]=p?f[G]:I[G],U[N]=m?f[N]:I[G],E++}for(let T=0;T<=1;T++)for(let p=0;p<=1;p++)for(let m=0;m<=1;m++){s.x=T?I.x:f.x,s.y=p?I.y:f.y,s.z=m?I.z:f.z,this.closestPointToPoint(s,e);const F=s.distanceToSquared(e);if(F<d&&(d=F,a&&a.copy(e),l&&l.copy(s),F<h))return Math.sqrt(F)}for(let T=0;T<12;T++){const p=i[T];for(let m=0;m<12;m++){const F=t[m];vn(p,F,e,s);const R=e.distanceToSquared(s);if(R<d&&(d=R,a&&a.copy(e),l&&l.copy(s),R<h))return Math.sqrt(R)}}return Math.sqrt(d)}}();class Un{constructor(i){this._getNewPrimitive=i,this._primitives=[]}getPrimitive(){const i=this._primitives;return i.length===0?this._getNewPrimitive():i.pop()}releasePrimitive(i){this._primitives.push(i)}}class ca extends Un{constructor(){super(()=>new se)}}const Ht=new ca;function Vt(c,i){return i[c+15]===65535}function Yt(c,i){return i[c+6]}function Wt(c,i){return i[c+14]}function Xt(c){return c+8}function $t(c,i){return i[c+6]}function Vr(c,i){return i[c+7]}class la{constructor(){this.float32Array=null,this.uint16Array=null,this.uint32Array=null;const i=[];let t=null;this.setBuffer=e=>{t&&i.push(t),t=e,this.float32Array=new Float32Array(e),this.uint16Array=new Uint16Array(e),this.uint32Array=new Uint32Array(e)},this.clearBuffer=()=>{t=null,this.float32Array=null,this.uint16Array=null,this.uint32Array=null,i.length!==0&&this.setBuffer(i.pop())}}}const At=new la;let Se,qe;const Ue=[],Yi=new Un(()=>new L.Box3);function ha(c,i,t,e,s,n){Se=Yi.getPrimitive(),qe=Yi.getPrimitive(),Ue.push(Se,qe),At.setBuffer(c._roots[i]);const r=In(0,c.geometry,t,e,s,n);At.clearBuffer(),Yi.releasePrimitive(Se),Yi.releasePrimitive(qe),Ue.pop(),Ue.pop();const o=Ue.length;return o>0&&(qe=Ue[o-1],Se=Ue[o-2]),r}function In(c,i,t,e,s=null,n=0,r=0){const{float32Array:o,uint16Array:a,uint32Array:l}=At;let h=c*2;if(Vt(h,a)){const I=Yt(c,l),u=Wt(h,a);return Ot(c,o,Se),e(I,u,!1,r,n+c,Se)}else{let v=function(N){const{uint16Array:D,uint32Array:g}=At;let U=N*2;for(;!Vt(U,D);)N=Xt(N),U=N*2;return Yt(N,g)},G=function(N){const{uint16Array:D,uint32Array:g}=At;let U=N*2;for(;!Vt(U,D);)N=$t(N,g),U=N*2;return Yt(N,g)+Wt(U,D)};const I=Xt(c),u=$t(c,l);let d=I,E=u,T,p,m,F;if(s&&(m=Se,F=qe,Ot(d,o,m),Ot(E,o,F),T=s(m),p=s(F),p<T)){d=u,E=I;const N=T;T=p,p=N,m=F}m||(m=Se,Ot(d,o,m));const R=Vt(d*2,a),S=t(m,R,T,r+1,n+d);let O;if(S===Xn){const N=v(d),g=G(d)-N;O=e(N,g,!0,r+1,n+d,m)}else O=S&&In(d,i,t,e,s,n,r+1);if(O)return!0;F=qe,Ot(E,o,F);const y=Vt(E*2,a),w=t(F,y,p,r+1,n+E);let P;if(w===Xn){const N=v(E),g=G(E)-N;P=e(N,g,!0,r+1,n+E,F)}else P=w&&In(E,i,t,e,s,n,r+1);return!!P}}const oi=new L.Vector3,js=new L.Vector3;function ua(c,i,t={},e=0,s=1/0){const n=e*e,r=s*s;let o=1/0,a=null;if(c.shapecast({boundsTraverseOrder:h=>(oi.copy(i).clamp(h.min,h.max),oi.distanceToSquared(i)),intersectsBounds:(h,f,I)=>I<o&&I<r,intersectsTriangle:(h,f)=>{h.closestPointToPoint(i,oi);const I=i.distanceToSquared(oi);return I<o&&(js.copy(oi),o=I,a=f),I<n}}),o===1/0)return null;const l=Math.sqrt(o);return t.point?t.point.copy(js):t.point=js.clone(),t.distance=l,t.faceIndex=a,t}const xe=new L.Vector3,Be=new L.Vector3,Ve=new L.Vector3,Gi=new L.Vector2,zi=new L.Vector2,ki=new L.Vector2,Qn=new L.Vector3,Kn=new L.Vector3,Jn=new L.Vector3,Hi=new L.Vector3;function fa(c,i,t,e,s,n){let r;return n===L.BackSide?r=c.intersectTriangle(e,t,i,!0,s):r=c.intersectTriangle(i,t,e,n!==L.DoubleSide,s),r===null?null:{distance:c.origin.distanceTo(s),point:s.clone()}}function Ia(c,i,t,e,s,n,r,o,a){xe.fromBufferAttribute(i,n),Be.fromBufferAttribute(i,r),Ve.fromBufferAttribute(i,o);const l=fa(c,xe,Be,Ve,Hi,a);if(l){e&&(Gi.fromBufferAttribute(e,n),zi.fromBufferAttribute(e,r),ki.fromBufferAttribute(e,o),l.uv=L.Triangle.getInterpolation(Hi,xe,Be,Ve,Gi,zi,ki,new L.Vector2)),s&&(Gi.fromBufferAttribute(s,n),zi.fromBufferAttribute(s,r),ki.fromBufferAttribute(s,o),l.uv1=L.Triangle.getInterpolation(Hi,xe,Be,Ve,Gi,zi,ki,new L.Vector2)),t&&(Qn.fromBufferAttribute(t,n),Kn.fromBufferAttribute(t,r),Jn.fromBufferAttribute(t,o),l.normal=L.Triangle.getInterpolation(Hi,xe,Be,Ve,Qn,Kn,Jn,new L.Vector3),l.normal.dot(c.direction)>0&&l.normal.multiplyScalar(-1));const h={a:n,b:r,c:o,normal:new L.Vector3,materialIndex:0};L.Triangle.getNormal(xe,Be,Ve,h.normal),l.face=h,l.faceIndex=n}return l}function Bs(c,i,t,e,s){const n=e*3;let r=n+0,o=n+1,a=n+2;const l=c.index;c.index&&(r=l.getX(r),o=l.getX(o),a=l.getX(a));const{position:h,normal:f,uv:I,uv1:u}=c.attributes,d=Ia(t,h,f,I,u,r,o,a,i);return d?(d.faceIndex=e,s&&s.push(d),d):null}function _t(c,i,t,e){const s=c.a,n=c.b,r=c.c;let o=i,a=i+1,l=i+2;t&&(o=t.getX(o),a=t.getX(a),l=t.getX(l)),s.x=e.getX(o),s.y=e.getY(o),s.z=e.getZ(o),n.x=e.getX(a),n.y=e.getY(a),n.z=e.getZ(a),r.x=e.getX(l),r.y=e.getY(l),r.z=e.getZ(l)}function da(c,i,t,e,s,n){const{geometry:r,_indirectBuffer:o}=c;for(let a=e,l=e+s;a<l;a++)Bs(r,i,t,a,n)}function Ea(c,i,t,e,s){const{geometry:n,_indirectBuffer:r}=c;let o=1/0,a=null;for(let l=e,h=e+s;l<h;l++){let f;f=Bs(n,i,t,l),f&&f.distance<o&&(a=f,o=f.distance)}return a}function pa(c,i,t,e,s,n,r){const{geometry:o}=t,{index:a}=o,l=o.attributes.position;for(let h=c,f=i+c;h<f;h++){let I;if(I=h,_t(r,I*3,a,l),r.needsUpdate=!0,e(r,I,s,n))return!0}return!1}function Ca(c,i=null){i&&Array.isArray(i)&&(i=new Set(i));const t=c.geometry,e=t.index?t.index.array:null,s=t.attributes.position;let n,r,o,a,l=0;const h=c._roots;for(let I=0,u=h.length;I<u;I++)n=h[I],r=new Uint32Array(n),o=new Uint16Array(n),a=new Float32Array(n),f(0,l),l+=n.byteLength;function f(I,u,d=!1){const E=I*2;if(o[E+15]===xs){const p=r[I+6],m=o[E+14];let F=1/0,R=1/0,S=1/0,O=-1/0,y=-1/0,w=-1/0;for(let P=3*p,v=3*(p+m);P<v;P++){let G=e[P];const N=s.getX(G),D=s.getY(G),g=s.getZ(G);N<F&&(F=N),N>O&&(O=N),D<R&&(R=D),D>y&&(y=D),g<S&&(S=g),g>w&&(w=g)}return a[I+0]!==F||a[I+1]!==R||a[I+2]!==S||a[I+3]!==O||a[I+4]!==y||a[I+5]!==w?(a[I+0]=F,a[I+1]=R,a[I+2]=S,a[I+3]=O,a[I+4]=y,a[I+5]=w,!0):!1}else{const p=I+8,m=r[I+6],F=p+u,R=m+u;let S=d,O=!1,y=!1;i?S||(O=i.has(F),y=i.has(R),S=!O&&!y):(O=!0,y=!0);const w=S||O,P=S||y;let v=!1;w&&(v=f(p,u,S));let G=!1;P&&(G=f(m,u,S));const N=v||G;if(N)for(let D=0;D<3;D++){const g=p+D,U=m+D,Q=a[g],z=a[g+3],et=a[U],X=a[U+3];a[I+D]=Q<et?Q:et,a[I+D+3]=z>X?z:X}return N}}}const tr=new L.Box3;function Oe(c,i,t,e){return Ot(c,i,tr),t.intersectBox(tr,e)}function Ta(c,i,t,e,s,n){const{geometry:r,_indirectBuffer:o}=c;for(let a=e,l=e+s;a<l;a++){let h=o?o[a]:a;Bs(r,i,t,h,n)}}function ma(c,i,t,e,s){const{geometry:n,_indirectBuffer:r}=c;let o=1/0,a=null;for(let l=e,h=e+s;l<h;l++){let f;f=Bs(n,i,t,r?r[l]:l),f&&f.distance<o&&(a=f,o=f.distance)}return a}function Ra(c,i,t,e,s,n,r){const{geometry:o}=t,{index:a}=o,l=o.attributes.position;for(let h=c,f=i+c;h<f;h++){let I;if(I=t.resolveTriangleIndex(h),_t(r,I*3,a,l),r.needsUpdate=!0,e(r,I,s,n))return!0}return!1}const er=new L.Vector3;function ga(c,i,t,e,s){At.setBuffer(c._roots[i]),dn(0,c,t,e,s),At.clearBuffer()}function dn(c,i,t,e,s){const{float32Array:n,uint16Array:r,uint32Array:o}=At,a=c*2;if(Vt(a,r)){const h=Yt(c,o),f=Wt(a,r);da(i,t,e,h,f,s)}else{const h=Xt(c);Oe(h,n,e,er)&&dn(h,i,t,e,s);const f=$t(c,o);Oe(f,n,e,er)&&dn(f,i,t,e,s)}}const ir=new L.Vector3,Aa=["x","y","z"];function Fa(c,i,t,e){At.setBuffer(c._roots[i]);const s=En(0,c,t,e);return At.clearBuffer(),s}function En(c,i,t,e){const{float32Array:s,uint16Array:n,uint32Array:r}=At;let o=c*2;if(Vt(o,n)){const l=Yt(c,r),h=Wt(o,n);return Ea(i,t,e,l,h)}else{const l=Vr(c,r),h=Aa[l],I=e.direction[h]>=0;let u,d;I?(u=Xt(c),d=$t(c,r)):(u=$t(c,r),d=Xt(c));const T=Oe(u,s,e,ir)?En(u,i,t,e):null;if(T){const F=T.point[h];if(I?F<=s[d+l]:F>=s[d+l+3])return T}const m=Oe(d,s,e,ir)?En(d,i,t,e):null;return T&&m?T.distance<=m.distance?T:m:T||m||null}}const Wi=new L.Box3,Ye=new se,Ge=new se,ai=new L.Matrix4,sr=new Ut,Xi=new Ut;function Sa(c,i,t,e){At.setBuffer(c._roots[i]);const s=pn(0,c,t,e);return At.clearBuffer(),s}function pn(c,i,t,e,s=null){const{float32Array:n,uint16Array:r,uint32Array:o}=At;let a=c*2;if(s===null&&(t.boundingBox||t.computeBoundingBox(),sr.set(t.boundingBox.min,t.boundingBox.max,e),s=sr),Vt(a,r)){const h=i.geometry,f=h.index,I=h.attributes.position,u=t.index,d=t.attributes.position,E=Yt(c,o),T=Wt(a,r);if(ai.copy(e).invert(),t.boundsTree)return Ot(c,n,Xi),Xi.matrix.copy(ai),Xi.needsUpdate=!0,t.boundsTree.shapecast({intersectsBounds:m=>Xi.intersectsBox(m),intersectsTriangle:m=>{m.a.applyMatrix4(e),m.b.applyMatrix4(e),m.c.applyMatrix4(e),m.needsUpdate=!0;for(let F=E*3,R=(T+E)*3;F<R;F+=3)if(_t(Ge,F,f,I),Ge.needsUpdate=!0,m.intersectsTriangle(Ge))return!0;return!1}});for(let p=E*3,m=(T+E)*3;p<m;p+=3){_t(Ye,p,f,I),Ye.a.applyMatrix4(ai),Ye.b.applyMatrix4(ai),Ye.c.applyMatrix4(ai),Ye.needsUpdate=!0;for(let F=0,R=u.count;F<R;F+=3)if(_t(Ge,F,u,d),Ge.needsUpdate=!0,Ye.intersectsTriangle(Ge))return!0}}else{const h=c+8,f=o[c+6];return Ot(h,n,Wi),!!(s.intersectsBox(Wi)&&pn(h,i,t,e,s)||(Ot(f,n,Wi),s.intersectsBox(Wi)&&pn(f,i,t,e,s)))}}const $i=new L.Matrix4,qs=new Ut,ci=new Ut,Oa=new L.Vector3,Na=new L.Vector3,ya=new L.Vector3,La=new L.Vector3;function Pa(c,i,t,e={},s={},n=0,r=1/0){i.boundingBox||i.computeBoundingBox(),qs.set(i.boundingBox.min,i.boundingBox.max,t),qs.needsUpdate=!0;const o=c.geometry,a=o.attributes.position,l=o.index,h=i.attributes.position,f=i.index,I=Ht.getPrimitive(),u=Ht.getPrimitive();let d=Oa,E=Na,T=null,p=null;s&&(T=ya,p=La);let m=1/0,F=null,R=null;return $i.copy(t).invert(),ci.matrix.copy($i),c.shapecast({boundsTraverseOrder:S=>qs.distanceToBox(S),intersectsBounds:(S,O,y)=>y<m&&y<r?(O&&(ci.min.copy(S.min),ci.max.copy(S.max),ci.needsUpdate=!0),!0):!1,intersectsRange:(S,O)=>{if(i.boundsTree)return i.boundsTree.shapecast({boundsTraverseOrder:w=>ci.distanceToBox(w),intersectsBounds:(w,P,v)=>v<m&&v<r,intersectsRange:(w,P)=>{for(let v=w,G=w+P;v<G;v++){_t(u,3*v,f,h),u.a.applyMatrix4(t),u.b.applyMatrix4(t),u.c.applyMatrix4(t),u.needsUpdate=!0;for(let N=S,D=S+O;N<D;N++){_t(I,3*N,l,a),I.needsUpdate=!0;const g=I.distanceToTriangle(u,d,T);if(g<m&&(E.copy(d),p&&p.copy(T),m=g,F=N,R=v),g<n)return!0}}}});{const y=ei(i);for(let w=0,P=y;w<P;w++){_t(u,3*w,f,h),u.a.applyMatrix4(t),u.b.applyMatrix4(t),u.c.applyMatrix4(t),u.needsUpdate=!0;for(let v=S,G=S+O;v<G;v++){_t(I,3*v,l,a),I.needsUpdate=!0;const N=I.distanceToTriangle(u,d,T);if(N<m&&(E.copy(d),p&&p.copy(T),m=N,F=v,R=w),N<n)return!0}}}}}),Ht.releasePrimitive(I),Ht.releasePrimitive(u),m===1/0?null:(e.point?e.point.copy(E):e.point=E.clone(),e.distance=m,e.faceIndex=F,s&&(s.point?s.point.copy(p):s.point=p.clone(),s.point.applyMatrix4($i),E.applyMatrix4($i),s.distance=E.sub(s.point).length(),s.faceIndex=R),e)}function _a(c,i=null){i&&Array.isArray(i)&&(i=new Set(i));const t=c.geometry,e=t.index?t.index.array:null,s=t.attributes.position;let n,r,o,a,l=0;const h=c._roots;for(let I=0,u=h.length;I<u;I++)n=h[I],r=new Uint32Array(n),o=new Uint16Array(n),a=new Float32Array(n),f(0,l),l+=n.byteLength;function f(I,u,d=!1){const E=I*2;if(o[E+15]===xs){const p=r[I+6],m=o[E+14];let F=1/0,R=1/0,S=1/0,O=-1/0,y=-1/0,w=-1/0;for(let P=p,v=p+m;P<v;P++){const G=3*c.resolveTriangleIndex(P);for(let N=0;N<3;N++){let D=G+N;D=e?e[D]:D;const g=s.getX(D),U=s.getY(D),Q=s.getZ(D);g<F&&(F=g),g>O&&(O=g),U<R&&(R=U),U>y&&(y=U),Q<S&&(S=Q),Q>w&&(w=Q)}}return a[I+0]!==F||a[I+1]!==R||a[I+2]!==S||a[I+3]!==O||a[I+4]!==y||a[I+5]!==w?(a[I+0]=F,a[I+1]=R,a[I+2]=S,a[I+3]=O,a[I+4]=y,a[I+5]=w,!0):!1}else{const p=I+8,m=r[I+6],F=p+u,R=m+u;let S=d,O=!1,y=!1;i?S||(O=i.has(F),y=i.has(R),S=!O&&!y):(O=!0,y=!0);const w=S||O,P=S||y;let v=!1;w&&(v=f(p,u,S));let G=!1;P&&(G=f(m,u,S));const N=v||G;if(N)for(let D=0;D<3;D++){const g=p+D,U=m+D,Q=a[g],z=a[g+3],et=a[U],X=a[U+3];a[I+D]=Q<et?Q:et,a[I+D+3]=z>X?z:X}return N}}}const nr=new L.Vector3;function Ma(c,i,t,e,s){At.setBuffer(c._roots[i]),Cn(0,c,t,e,s),At.clearBuffer()}function Cn(c,i,t,e,s){const{float32Array:n,uint16Array:r,uint32Array:o}=At,a=c*2;if(Vt(a,r)){const h=Yt(c,o),f=Wt(a,r);Ta(i,t,e,h,f,s)}else{const h=Xt(c);Oe(h,n,e,nr)&&Cn(h,i,t,e,s);const f=$t(c,o);Oe(f,n,e,nr)&&Cn(f,i,t,e,s)}}const rr=new L.Vector3,wa=["x","y","z"];function Da(c,i,t,e){At.setBuffer(c._roots[i]);const s=Tn(0,c,t,e);return At.clearBuffer(),s}function Tn(c,i,t,e){const{float32Array:s,uint16Array:n,uint32Array:r}=At;let o=c*2;if(Vt(o,n)){const l=Yt(c,r),h=Wt(o,n);return ma(i,t,e,l,h)}else{const l=Vr(c,r),h=wa[l],I=e.direction[h]>=0;let u,d;I?(u=Xt(c),d=$t(c,r)):(u=$t(c,r),d=Xt(c));const T=Oe(u,s,e,rr)?Tn(u,i,t,e):null;if(T){const F=T.point[h];if(I?F<=s[d+l]:F>=s[d+l+3])return T}const m=Oe(d,s,e,rr)?Tn(d,i,t,e):null;return T&&m?T.distance<=m.distance?T:m:T||m||null}}const Zi=new L.Box3,ze=new se,ke=new se,li=new L.Matrix4,or=new Ut,ji=new Ut;function ba(c,i,t,e){At.setBuffer(c._roots[i]);const s=mn(0,c,t,e);return At.clearBuffer(),s}function mn(c,i,t,e,s=null){const{float32Array:n,uint16Array:r,uint32Array:o}=At;let a=c*2;if(s===null&&(t.boundingBox||t.computeBoundingBox(),or.set(t.boundingBox.min,t.boundingBox.max,e),s=or),Vt(a,r)){const h=i.geometry,f=h.index,I=h.attributes.position,u=t.index,d=t.attributes.position,E=Yt(c,o),T=Wt(a,r);if(li.copy(e).invert(),t.boundsTree)return Ot(c,n,ji),ji.matrix.copy(li),ji.needsUpdate=!0,t.boundsTree.shapecast({intersectsBounds:m=>ji.intersectsBox(m),intersectsTriangle:m=>{m.a.applyMatrix4(e),m.b.applyMatrix4(e),m.c.applyMatrix4(e),m.needsUpdate=!0;for(let F=E,R=T+E;F<R;F++)if(_t(ke,3*i.resolveTriangleIndex(F),f,I),ke.needsUpdate=!0,m.intersectsTriangle(ke))return!0;return!1}});for(let p=E,m=T+E;p<m;p++){const F=i.resolveTriangleIndex(p);_t(ze,3*F,f,I),ze.a.applyMatrix4(li),ze.b.applyMatrix4(li),ze.c.applyMatrix4(li),ze.needsUpdate=!0;for(let R=0,S=u.count;R<S;R+=3)if(_t(ke,R,u,d),ke.needsUpdate=!0,ze.intersectsTriangle(ke))return!0}}else{const h=c+8,f=o[c+6];return Ot(h,n,Zi),!!(s.intersectsBox(Zi)&&mn(h,i,t,e,s)||(Ot(f,n,Zi),s.intersectsBox(Zi)&&mn(f,i,t,e,s)))}}const qi=new L.Matrix4,Qs=new Ut,hi=new Ut,va=new L.Vector3,Ua=new L.Vector3,xa=new L.Vector3,Ba=new L.Vector3;function Va(c,i,t,e={},s={},n=0,r=1/0){i.boundingBox||i.computeBoundingBox(),Qs.set(i.boundingBox.min,i.boundingBox.max,t),Qs.needsUpdate=!0;const o=c.geometry,a=o.attributes.position,l=o.index,h=i.attributes.position,f=i.index,I=Ht.getPrimitive(),u=Ht.getPrimitive();let d=va,E=Ua,T=null,p=null;s&&(T=xa,p=Ba);let m=1/0,F=null,R=null;return qi.copy(t).invert(),hi.matrix.copy(qi),c.shapecast({boundsTraverseOrder:S=>Qs.distanceToBox(S),intersectsBounds:(S,O,y)=>y<m&&y<r?(O&&(hi.min.copy(S.min),hi.max.copy(S.max),hi.needsUpdate=!0),!0):!1,intersectsRange:(S,O)=>{if(i.boundsTree){const y=i.boundsTree;return y.shapecast({boundsTraverseOrder:w=>hi.distanceToBox(w),intersectsBounds:(w,P,v)=>v<m&&v<r,intersectsRange:(w,P)=>{for(let v=w,G=w+P;v<G;v++){const N=y.resolveTriangleIndex(v);_t(u,3*N,f,h),u.a.applyMatrix4(t),u.b.applyMatrix4(t),u.c.applyMatrix4(t),u.needsUpdate=!0;for(let D=S,g=S+O;D<g;D++){const U=c.resolveTriangleIndex(D);_t(I,3*U,l,a),I.needsUpdate=!0;const Q=I.distanceToTriangle(u,d,T);if(Q<m&&(E.copy(d),p&&p.copy(T),m=Q,F=D,R=v),Q<n)return!0}}}})}else{const y=ei(i);for(let w=0,P=y;w<P;w++){_t(u,3*w,f,h),u.a.applyMatrix4(t),u.b.applyMatrix4(t),u.c.applyMatrix4(t),u.needsUpdate=!0;for(let v=S,G=S+O;v<G;v++){const N=c.resolveTriangleIndex(v);_t(I,3*N,l,a),I.needsUpdate=!0;const D=I.distanceToTriangle(u,d,T);if(D<m&&(E.copy(d),p&&p.copy(T),m=D,F=v,R=w),D<n)return!0}}}}}),Ht.releasePrimitive(I),Ht.releasePrimitive(u),m===1/0?null:(e.point?e.point.copy(E):e.point=E.clone(),e.distance=m,e.faceIndex=F,s&&(s.point?s.point.copy(p):s.point=p.clone(),s.point.applyMatrix4(qi),E.applyMatrix4(qi),s.distance=E.sub(s.point).length(),s.faceIndex=R),e)}function Ya(){return typeof SharedArrayBuffer<"u"}const Ai=new At.constructor,us=new At.constructor,ge=new Un(()=>new L.Box3),He=new L.Box3,We=new L.Box3,Ks=new L.Box3,Js=new L.Box3;let tn=!1;function Ga(c,i,t,e){if(tn)throw new Error("MeshBVH: Recursive calls to bvhcast not supported.");tn=!0;const s=c._roots,n=i._roots;let r,o=0,a=0;const l=new L.Matrix4().copy(t).invert();for(let h=0,f=s.length;h<f;h++){Ai.setBuffer(s[h]),a=0;const I=ge.getPrimitive();Ot(0,Ai.float32Array,I),I.applyMatrix4(l);for(let u=0,d=n.length;u<d&&(us.setBuffer(n[h]),r=Jt(0,0,t,l,e,o,a,0,0,I),us.clearBuffer(),a+=n[u].length,!r);u++);if(ge.releasePrimitive(I),Ai.clearBuffer(),o+=s[h].length,r)break}return tn=!1,r}function Jt(c,i,t,e,s,n=0,r=0,o=0,a=0,l=null,h=!1){let f,I;h?(f=us,I=Ai):(f=Ai,I=us);const u=f.float32Array,d=f.uint32Array,E=f.uint16Array,T=I.float32Array,p=I.uint32Array,m=I.uint16Array,F=c*2,R=i*2,S=Vt(F,E),O=Vt(R,m);let y=!1;if(O&&S)h?y=s(Yt(i,p),Wt(i*2,m),Yt(c,d),Wt(c*2,E),a,r+i,o,n+c):y=s(Yt(c,d),Wt(c*2,E),Yt(i,p),Wt(i*2,m),o,n+c,a,r+i);else if(O){const w=ge.getPrimitive();Ot(i,T,w),w.applyMatrix4(t);const P=Xt(c),v=$t(c,d);Ot(P,u,He),Ot(v,u,We);const G=w.intersectsBox(He),N=w.intersectsBox(We);y=G&&Jt(i,P,e,t,s,r,n,a,o+1,w,!h)||N&&Jt(i,v,e,t,s,r,n,a,o+1,w,!h),ge.releasePrimitive(w)}else{const w=Xt(i),P=$t(i,p);Ot(w,T,Ks),Ot(P,T,Js);const v=l.intersectsBox(Ks),G=l.intersectsBox(Js);if(v&&G)y=Jt(c,w,t,e,s,n,r,o,a+1,l,h)||Jt(c,P,t,e,s,n,r,o,a+1,l,h);else if(v)if(S)y=Jt(c,w,t,e,s,n,r,o,a+1,l,h);else{const N=ge.getPrimitive();N.copy(Ks).applyMatrix4(t);const D=Xt(c),g=$t(c,d);Ot(D,u,He),Ot(g,u,We);const U=N.intersectsBox(He),Q=N.intersectsBox(We);y=U&&Jt(w,D,e,t,s,r,n,a,o+1,N,!h)||Q&&Jt(w,g,e,t,s,r,n,a,o+1,N,!h),ge.releasePrimitive(N)}else if(G)if(S)y=Jt(c,P,t,e,s,n,r,o,a+1,l,h);else{const N=ge.getPrimitive();N.copy(Js).applyMatrix4(t);const D=Xt(c),g=$t(c,d);Ot(D,u,He),Ot(g,u,We);const U=N.intersectsBox(He),Q=N.intersectsBox(We);y=U&&Jt(P,D,e,t,s,r,n,a,o+1,N,!h)||Q&&Jt(P,g,e,t,s,r,n,a,o+1,N,!h),ge.releasePrimitive(N)}}return y}const Qi=new Ut,ar=new L.Box3;class xn{static serialize(i,t={}){t={cloneBuffers:!0,...t};const e=i.geometry,s=i._roots,n=i._indirectBuffer,r=e.getIndex();let o;return t.cloneBuffers?o={roots:s.map(a=>a.slice()),index:r.array.slice(),indirectBuffer:n?n.slice():null}:o={roots:s,index:r.array,indirectBuffer:n},o}static deserialize(i,t,e={}){e={setIndex:!0,indirect:!!i.indirectBuffer,...e};const{index:s,roots:n,indirectBuffer:r}=i,o=new xn(t,{...e,[Xs]:!0});if(o._roots=n,o._indirectBuffer=r||null,e.setIndex){const a=t.getIndex();if(a===null){const l=new L.BufferAttribute(i.index,1,!1);t.setIndex(l)}else a.array!==s&&(a.array.set(s),a.needsUpdate=!0)}return o}get indirect(){return!!this._indirectBuffer}constructor(i,t={}){if(i.isBufferGeometry){if(i.index&&i.index.isInterleavedBufferAttribute)throw new Error("MeshBVH: InterleavedBufferAttribute is not supported for the index attribute.")}else throw new Error("MeshBVH: Only BufferGeometries are supported.");if(t=Object.assign({strategy:Ur,maxDepth:40,maxLeafTris:10,verbose:!0,useSharedArrayBuffer:!1,setBoundingBox:!0,onProgress:null,indirect:!1,[Xs]:!1},t),t.useSharedArrayBuffer&&!Ya())throw new Error("MeshBVH: SharedArrayBuffer is not available.");this.geometry=i,this._roots=null,this._indirectBuffer=null,t[Xs]||(na(this,t),!i.boundingBox&&t.setBoundingBox&&(i.boundingBox=this.getBoundingBox(new L.Box3)));const{_indirectBuffer:e}=this;this.resolveTriangleIndex=t.indirect?s=>e[s]:s=>s}refit(i=null){return(this.indirect?_a:Ca)(this,i)}traverse(i,t=0){const e=this._roots[t],s=new Uint32Array(e),n=new Uint16Array(e);r(0);function r(o,a=0){const l=o*2,h=n[l+15]===xs;if(h){const f=s[o+6],I=n[l+14];i(a,h,new Float32Array(e,o*4,6),f,I)}else{const f=o+cs/4,I=s[o+6],u=s[o+7];i(a,h,new Float32Array(e,o*4,6),u)||(r(f,a+1),r(I,a+1))}}}raycast(i,t=L.FrontSide){const e=this._roots,s=this.geometry,n=[],r=t.isMaterial,o=Array.isArray(t),a=s.groups,l=r?t.side:t,h=this.indirect?Ma:ga;for(let f=0,I=e.length;f<I;f++){const u=o?t[a[f].materialIndex].side:l,d=n.length;if(h(this,f,u,i,n),o){const E=a[f].materialIndex;for(let T=d,p=n.length;T<p;T++)n[T].face.materialIndex=E}}return n}raycastFirst(i,t=L.FrontSide){const e=this._roots,s=this.geometry,n=t.isMaterial,r=Array.isArray(t);let o=null;const a=s.groups,l=n?t.side:t,h=this.indirect?Da:Fa;for(let f=0,I=e.length;f<I;f++){const u=r?t[a[f].materialIndex].side:l,d=h(this,f,u,i);d!=null&&(o==null||d.distance<o.distance)&&(o=d,r&&(d.face.materialIndex=a[f].materialIndex))}return o}intersectsGeometry(i,t){let e=!1;const s=this._roots,n=this.indirect?ba:Sa;for(let r=0,o=s.length;r<o&&(e=n(this,r,i,t),!e);r++);return e}shapecast(i){const t=Ht.getPrimitive(),e=this.indirect?Ra:pa;let{boundsTraverseOrder:s,intersectsBounds:n,intersectsRange:r,intersectsTriangle:o}=i;if(r&&o){const f=r;r=(I,u,d,E,T)=>f(I,u,d,E,T)?!0:e(I,u,this,o,d,E,t)}else r||(o?r=(f,I,u,d)=>e(f,I,this,o,u,d,t):r=(f,I,u)=>u);let a=!1,l=0;const h=this._roots;for(let f=0,I=h.length;f<I;f++){const u=h[f];if(a=ha(this,f,n,r,s,l),a)break;l+=u.byteLength}return Ht.releasePrimitive(t),a}bvhcast(i,t,e){let{intersectsRanges:s,intersectsTriangles:n}=e;const r=Ht.getPrimitive(),o=this.geometry.index,a=this.geometry.attributes.position,l=this.indirect?d=>{const E=this.resolveTriangleIndex(d);_t(r,E*3,o,a)}:d=>{_t(r,d*3,o,a)},h=Ht.getPrimitive(),f=i.geometry.index,I=i.geometry.attributes.position,u=i.indirect?d=>{const E=i.resolveTriangleIndex(d);_t(h,E*3,f,I)}:d=>{_t(h,d*3,f,I)};if(n){const d=(E,T,p,m,F,R,S,O)=>{for(let y=p,w=p+m;y<w;y++){u(y),h.a.applyMatrix4(t),h.b.applyMatrix4(t),h.c.applyMatrix4(t),h.needsUpdate=!0;for(let P=E,v=E+T;P<v;P++)if(l(P),r.needsUpdate=!0,n(r,h,P,y,F,R,S,O))return!0}return!1};if(s){const E=s;s=function(T,p,m,F,R,S,O,y){return E(T,p,m,F,R,S,O,y)?!0:d(T,p,m,F,R,S,O,y)}}else s=d}return Ga(this,i,t,s)}intersectsBox(i,t){return Qi.set(i.min,i.max,t),Qi.needsUpdate=!0,this.shapecast({intersectsBounds:e=>Qi.intersectsBox(e),intersectsTriangle:e=>Qi.intersectsTriangle(e)})}intersectsSphere(i){return this.shapecast({intersectsBounds:t=>i.intersectsBox(t),intersectsTriangle:t=>t.intersectsSphere(i)})}closestPointToGeometry(i,t,e={},s={},n=0,r=1/0){return(this.indirect?Va:Pa)(this,i,t,e,s,n,r)}closestPointToPoint(i,t={},e=0,s=1/0){return ua(this,i,t,e,s)}getBoundingBox(i){return i.makeEmpty(),this._roots.forEach(e=>{Ot(0,new Float32Array(e),ar),i.union(ar)}),i}}function cr(c,i,t){return c===null||(c.point.applyMatrix4(i.matrixWorld),c.distance=c.point.distanceTo(t.ray.origin),c.object=i,c.distance<t.near||c.distance>t.far)?null:c}const en=new L.Ray,lr=new L.Matrix4,za=L.Mesh.prototype.raycast;function ka(c,i){if(this.geometry.boundsTree){if(this.material===void 0)return;lr.copy(this.matrixWorld).invert(),en.copy(c.ray).applyMatrix4(lr);const t=this.geometry.boundsTree;if(c.firstHitOnly===!0){const e=cr(t.raycastFirst(en,this.material),this,c);e&&i.push(e)}else{const e=t.raycast(en,this.material);for(let s=0,n=e.length;s<n;s++){const r=cr(e[s],this,c);r&&i.push(r)}}}else za.call(this,c,i)}function Ha(c){return this.boundsTree=new xn(this,c),this.boundsTree}function Wa(){this.boundsTree=null}class q{constructor(){C(this,"trigger",i=>{const t=this.handlers.slice(0);for(const e of t)e(i)});C(this,"handlers",[])}add(i){this.handlers.push(i)}remove(i){this.handlers=this.handlers.filter(t=>t!==i)}reset(){this.handlers.length=0}}class fe{constructor(){C(this,"trigger",async i=>{const t=this.handlers.slice(0);for(const e of t)await e(i)});C(this,"handlers",[])}add(i){this.handlers.push(i)}remove(i){this.handlers=this.handlers.filter(t=>t!==i)}reset(){this.handlers.length=0}}class Vs{constructor(i){C(this,"isDisposeable",()=>"dispose"in this&&"onDisposed"in this);C(this,"isResizeable",()=>"resize"in this&&"getSize"in this);C(this,"isUpdateable",()=>"onAfterUpdate"in this&&"onBeforeUpdate"in this&&"update"in this);C(this,"isHideable",()=>"visible"in this);C(this,"isConfigurable",()=>"setup"in this&&"config"in this&&"onSetup"in this);this.components=i}}class mt extends Vs{}class Ys extends Vs{constructor(t){super(t);C(this,"worlds",new Map);C(this,"onWorldChanged",new q);C(this,"currentWorld",null);this.onWorldChanged.add(({world:e,action:s})=>{s==="removed"&&this.worlds.delete(e.uuid)})}}class Yr extends Ys{constructor(){super(...arguments);C(this,"hasCameraControls",()=>"controls"in this)}}class Gr extends Ys{constructor(){super(...arguments);C(this,"onAfterUpdate",new q);C(this,"onBeforeUpdate",new q);C(this,"onDisposed",new q);C(this,"onResize",new q);C(this,"onClippingPlanesUpdated",new q);C(this,"clippingPlanes",[])}updateClippingPlanes(){this.onClippingPlanesUpdated.trigger()}setPlane(t,e,s){e.isLocal=s;const n=this.clippingPlanes.indexOf(e);t&&n===-1?this.clippingPlanes.push(e):!t&&n>-1&&this.clippingPlanes.splice(n,1),this.three.clippingPlanes=this.clippingPlanes.filter(r=>!r.isLocal)}}const Fi=class Fi extends mt{constructor(t){super(t);C(this,"_disposedComponents",new Set);C(this,"enabled",!0);t.add(Fi.uuid,this)}get(){return this._disposedComponents}destroy(t,e=!0,s=!0){t.removeFromParent();const n=t;n.dispose&&n.dispose(),this.disposeGeometryAndMaterials(t,e),s&&n.children&&n.children.length&&this.disposeChildren(n),t.children.length=0}disposeGeometry(t){t.boundsTree&&t.disposeBoundsTree&&t.disposeBoundsTree(),t.dispose()}disposeGeometryAndMaterials(t,e){const s=t;s.geometry&&this.disposeGeometry(s.geometry),e&&s.material&&Fi.disposeMaterial(s),s.material=[],s.geometry=null}disposeChildren(t){for(const e of t.children)this.destroy(e)}static disposeMaterial(t){if(t.material)if(Array.isArray(t.material))for(const e of t.material)e.dispose();else t.material.dispose()}};C(Fi,"uuid","76e9cd8e-ad8f-4753-9ef6-cbc60f7247fe");let Ce=Fi;class zr extends Ys{constructor(t){super(t);C(this,"onDisposed",new q);C(this,"directionalLights",new Map);C(this,"ambientLights",new Map)}dispose(){const t=this.components.get(Ce);for(const e of this.three.children){const s=e;s.geometry&&t.destroy(s)}this.deleteAllLights(),this.three.children=[],this.onDisposed.trigger(),this.onDisposed.reset()}deleteAllLights(){for(const[,t]of this.directionalLights)t.removeFromParent(),t.target.removeFromParent(),t.dispose();this.directionalLights.clear();for(const[,t]of this.ambientLights)t.removeFromParent(),t.dispose();this.ambientLights.clear()}}class Ie extends Set{constructor(t){super(t);C(this,"onItemAdded",new q);C(this,"onItemDeleted",new q);C(this,"onCleared",new q);C(this,"guard",()=>!0)}clear(){super.clear(),this.onCleared.trigger()}add(...t){for(const e of t)this.has(e)||!this.guard(e)||(super.add(e),this.onItemAdded||(this.onItemAdded=new q),this.onItemAdded.trigger(e));return this}delete(t){const e=super.delete(t);return e&&this.onItemDeleted.trigger(),e}dispose(){this.clear(),this.onItemAdded.reset(),this.onItemDeleted.reset(),this.onCleared.reset()}}class Qt extends Map{constructor(t){super(t);C(this,"onItemSet",new q);C(this,"onItemUpdated",new q);C(this,"onItemDeleted",new q);C(this,"onCleared",new q);C(this,"guard",()=>!0)}clear(){super.clear(),this.onCleared.trigger()}set(t,e){const s=this.has(t);if(!(this.guard??(()=>!0))(t,e))return this;const o=super.set(t,e);return s?(this.onItemUpdated||(this.onItemUpdated=new q),this.onItemUpdated.trigger({key:t,value:e})):(this.onItemSet||(this.onItemSet=new q),this.onItemSet.trigger({key:t,value:e})),o}delete(t){const e=super.delete(t);return e&&this.onItemDeleted.trigger(t),e}dispose(){this.clear(),this.onItemSet.reset(),this.onItemDeleted.reset(),this.onCleared.reset()}}class Xa extends mt{}const ls=0,$a=1,Za=new L.Vector3,hr=new L.Line3,sn=new L.Plane,ur=new L.Vector3,Ki=new L.Triangle;class ja{constructor(){this.tolerance=-1,this.faces=[],this.newFaces=[],this.assigned=new fr,this.unassigned=new fr,this.vertices=[]}setFromPoints(i){if(i.length>=4){this.makeEmpty();for(let t=0,e=i.length;t<e;t++)this.vertices.push(new qa(i[t]));this.compute()}return this}setFromObject(i){const t=[];return i.updateMatrixWorld(!0),i.traverse(function(e){const s=e.geometry;if(s!==void 0){const n=s.attributes.position;if(n!==void 0)for(let r=0,o=n.count;r<o;r++){const a=new L.Vector3;a.fromBufferAttribute(n,r).applyMatrix4(e.matrixWorld),t.push(a)}}}),this.setFromPoints(t)}containsPoint(i){const t=this.faces;for(let e=0,s=t.length;e<s;e++)if(t[e].distanceToPoint(i)>this.tolerance)return!1;return!0}intersectRay(i,t){const e=this.faces;let s=-1/0,n=1/0;for(let r=0,o=e.length;r<o;r++){const a=e[r],l=a.distanceToPoint(i.origin),h=a.normal.dot(i.direction);if(l>0&&h>=0)return null;const f=h!==0?-l/h:0;if(!(f<=0)&&(h>0?n=Math.min(f,n):s=Math.max(f,s),s>n))return null}return s!==-1/0?i.at(s,t):i.at(n,t),t}intersectsRay(i){return this.intersectRay(i,Za)!==null}makeEmpty(){return this.faces=[],this.vertices=[],this}addVertexToFace(i,t){return i.face=t,t.outside===null?this.assigned.append(i):this.assigned.insertBefore(t.outside,i),t.outside=i,this}removeVertexFromFace(i,t){return i===t.outside&&(i.next!==null&&i.next.face===t?t.outside=i.next:t.outside=null),this.assigned.remove(i),this}removeAllVerticesFromFace(i){if(i.outside!==null){const t=i.outside;let e=i.outside;for(;e.next!==null&&e.next.face===i;)e=e.next;return this.assigned.removeSubList(t,e),t.prev=e.next=null,i.outside=null,t}}deleteFaceVertices(i,t){const e=this.removeAllVerticesFromFace(i);if(e!==void 0)if(t===void 0)this.unassigned.appendChain(e);else{let s=e;do{const n=s.next;t.distanceToPoint(s.point)>this.tolerance?this.addVertexToFace(s,t):this.unassigned.append(s),s=n}while(s!==null)}return this}resolveUnassignedPoints(i){if(this.unassigned.isEmpty()===!1){let t=this.unassigned.first();do{const e=t.next;let s=this.tolerance,n=null;for(let r=0;r<i.length;r++){const o=i[r];if(o.mark===ls){const a=o.distanceToPoint(t.point);if(a>s&&(s=a,n=o),s>1e3*this.tolerance)break}}n!==null&&this.addVertexToFace(t,n),t=e}while(t!==null)}return this}computeExtremes(){const i=new L.Vector3,t=new L.Vector3,e=[],s=[];for(let n=0;n<3;n++)e[n]=s[n]=this.vertices[0];i.copy(this.vertices[0].point),t.copy(this.vertices[0].point);for(let n=0,r=this.vertices.length;n<r;n++){const o=this.vertices[n],a=o.point;for(let l=0;l<3;l++)a.getComponent(l)<i.getComponent(l)&&(i.setComponent(l,a.getComponent(l)),e[l]=o);for(let l=0;l<3;l++)a.getComponent(l)>t.getComponent(l)&&(t.setComponent(l,a.getComponent(l)),s[l]=o)}return this.tolerance=3*Number.EPSILON*(Math.max(Math.abs(i.x),Math.abs(t.x))+Math.max(Math.abs(i.y),Math.abs(t.y))+Math.max(Math.abs(i.z),Math.abs(t.z))),{min:e,max:s}}computeInitialHull(){const i=this.vertices,t=this.computeExtremes(),e=t.min,s=t.max;let n=0,r=0;for(let I=0;I<3;I++){const u=s[I].point.getComponent(I)-e[I].point.getComponent(I);u>n&&(n=u,r=I)}const o=e[r],a=s[r];let l,h;n=0,hr.set(o.point,a.point);for(let I=0,u=this.vertices.length;I<u;I++){const d=i[I];if(d!==o&&d!==a){hr.closestPointToPoint(d.point,!0,ur);const E=ur.distanceToSquared(d.point);E>n&&(n=E,l=d)}}n=-1,sn.setFromCoplanarPoints(o.point,a.point,l.point);for(let I=0,u=this.vertices.length;I<u;I++){const d=i[I];if(d!==o&&d!==a&&d!==l){const E=Math.abs(sn.distanceToPoint(d.point));E>n&&(n=E,h=d)}}const f=[];if(sn.distanceToPoint(h.point)<0){f.push(ee.create(o,a,l),ee.create(h,a,o),ee.create(h,l,a),ee.create(h,o,l));for(let I=0;I<3;I++){const u=(I+1)%3;f[I+1].getEdge(2).setTwin(f[0].getEdge(u)),f[I+1].getEdge(1).setTwin(f[u+1].getEdge(0))}}else{f.push(ee.create(o,l,a),ee.create(h,o,a),ee.create(h,a,l),ee.create(h,l,o));for(let I=0;I<3;I++){const u=(I+1)%3;f[I+1].getEdge(2).setTwin(f[0].getEdge((3-I)%3)),f[I+1].getEdge(0).setTwin(f[u+1].getEdge(1))}}for(let I=0;I<4;I++)this.faces.push(f[I]);for(let I=0,u=i.length;I<u;I++){const d=i[I];if(d!==o&&d!==a&&d!==l&&d!==h){n=this.tolerance;let E=null;for(let T=0;T<4;T++){const p=this.faces[T].distanceToPoint(d.point);p>n&&(n=p,E=this.faces[T])}E!==null&&this.addVertexToFace(d,E)}}return this}reindexFaces(){const i=[];for(let t=0;t<this.faces.length;t++){const e=this.faces[t];e.mark===ls&&i.push(e)}return this.faces=i,this}nextVertexToAdd(){if(this.assigned.isEmpty()===!1){let i,t=0;const e=this.assigned.first().face;let s=e.outside;do{const n=e.distanceToPoint(s.point);n>t&&(t=n,i=s),s=s.next}while(s!==null&&s.face===e);return i}}computeHorizon(i,t,e,s){this.deleteFaceVertices(e),e.mark=$a;let n;t===null?n=t=e.getEdge(0):n=t.next;do{const r=n.twin,o=r.face;o.mark===ls&&(o.distanceToPoint(i)>this.tolerance?this.computeHorizon(i,r,o,s):s.push(n)),n=n.next}while(n!==t);return this}addAdjoiningFace(i,t){const e=ee.create(i,t.tail(),t.head());return this.faces.push(e),e.getEdge(-1).setTwin(t.twin),e.getEdge(0)}addNewFaces(i,t){this.newFaces=[];let e=null,s=null;for(let n=0;n<t.length;n++){const r=t[n],o=this.addAdjoiningFace(i,r);e===null?e=o:o.next.setTwin(s),this.newFaces.push(o.face),s=o}return e.next.setTwin(s),this}addVertexToHull(i){const t=[];return this.unassigned.clear(),this.removeVertexFromFace(i,i.face),this.computeHorizon(i.point,null,i.face,t),this.addNewFaces(i,t),this.resolveUnassignedPoints(this.newFaces),this}cleanup(){return this.assigned.clear(),this.unassigned.clear(),this.newFaces=[],this}compute(){let i;for(this.computeInitialHull();(i=this.nextVertexToAdd())!==void 0;)this.addVertexToHull(i);return this.reindexFaces(),this.cleanup(),this}}class ee{constructor(){this.normal=new L.Vector3,this.midpoint=new L.Vector3,this.area=0,this.constant=0,this.outside=null,this.mark=ls,this.edge=null}static create(i,t,e){const s=new ee,n=new nn(i,s),r=new nn(t,s),o=new nn(e,s);return n.next=o.prev=r,r.next=n.prev=o,o.next=r.prev=n,s.edge=n,s.compute()}getEdge(i){let t=this.edge;for(;i>0;)t=t.next,i--;for(;i<0;)t=t.prev,i++;return t}compute(){const i=this.edge.tail(),t=this.edge.head(),e=this.edge.next.head();return Ki.set(i.point,t.point,e.point),Ki.getNormal(this.normal),Ki.getMidpoint(this.midpoint),this.area=Ki.getArea(),this.constant=this.normal.dot(this.midpoint),this}distanceToPoint(i){return this.normal.dot(i)-this.constant}}class nn{constructor(i,t){this.vertex=i,this.prev=null,this.next=null,this.twin=null,this.face=t}head(){return this.vertex}tail(){return this.prev?this.prev.vertex:null}length(){const i=this.head(),t=this.tail();return t!==null?t.point.distanceTo(i.point):-1}lengthSquared(){const i=this.head(),t=this.tail();return t!==null?t.point.distanceToSquared(i.point):-1}setTwin(i){return this.twin=i,i.twin=this,this}}class qa{constructor(i){this.point=i,this.prev=null,this.next=null,this.face=null}}class fr{constructor(){this.head=null,this.tail=null}first(){return this.head}last(){return this.tail}clear(){return this.head=this.tail=null,this}insertBefore(i,t){return t.prev=i.prev,t.next=i,t.prev===null?this.head=t:t.prev.next=t,i.prev=t,this}insertAfter(i,t){return t.prev=i,t.next=i.next,t.next===null?this.tail=t:t.next.prev=t,i.next=t,this}append(i){return this.head===null?this.head=i:this.tail.next=i,i.prev=this.tail,i.next=null,this.tail=i,this}appendChain(i){for(this.head===null?this.head=i:this.tail.next=i,i.prev=this.tail;i.next!==null;)i=i.next;return this.tail=i,this}remove(i){return i.prev===null?this.head=i.next:i.prev.next=i.next,i.next===null?this.tail=i.prev:i.next.prev=i.prev,this}removeSubList(i,t){return i.prev===null?this.head=t.next:i.prev.next=t.next,t.next===null?this.tail=i.prev:t.next.prev=i.prev,this}isEmpty(){return this.head===null}}const Rn=[2,2,1],gn=[1,0,0];function ce(c,i){return c*3+i}function Qa(c){const i=c.elements;let t=0;for(let e=0;e<9;e++)t+=i[e]*i[e];return Math.sqrt(t)}function Ka(c){const i=c.elements;let t=0;for(let e=0;e<3;e++){const s=i[ce(Rn[e],gn[e])];t+=2*s*s}return Math.sqrt(t)}function Ja(c,i){let t=0,e=1;const s=c.elements;for(let l=0;l<3;l++){const h=Math.abs(s[ce(Rn[l],gn[l])]);h>t&&(t=h,e=l)}let n=1,r=0;const o=gn[e],a=Rn[e];if(Math.abs(s[ce(a,o)])>Number.EPSILON){const l=s[ce(a,a)],h=s[ce(o,o)],f=s[ce(a,o)],I=(l-h)/2/f;let u;I<0?u=-1/(-I+Math.sqrt(1+I*I)):u=1/(I+Math.sqrt(1+I*I)),n=1/Math.sqrt(1+u*u),r=u*n}return i.identity(),i.elements[ce(o,o)]=n,i.elements[ce(a,a)]=n,i.elements[ce(a,o)]=r,i.elements[ce(o,a)]=-r,i}function tc(c,i){let t=0,e=0;const s=10;i.unitary.identity(),i.diagonal.copy(c);const n=i.unitary,r=i.diagonal,o=new b.Matrix3,a=new b.Matrix3,l=Number.EPSILON*Qa(r);for(;e<s&&Ka(r)>l;)Ja(r,o),a.copy(o).transpose(),r.multiply(o),r.premultiply(a),n.multiply(o),++t>2&&(e++,t=0);return i}function kr(c){const i=[];for(let ot=0;ot<c.length-2;ot+=3){const ft=c[ot],ut=c[ot+1],Ct=c[ot+2];i.push(new b.Vector3(ft,ut,Ct))}const t=new ja;t.setFromPoints(i);const e={unitary:new b.Matrix3,diagonal:new b.Matrix3},s=t.faces,n=[],r=[];for(let ot=0,ft=s.length;ot<ft;ot++){const ut=s[ot];let Ct=ut.edge;n.length=0;do n.push(Ct),Ct=Ct.next;while(Ct!==ut.edge);const Gt=n.length-2;for(let wt=1,A=Gt;wt<=A;wt++){const $=n[0].vertex,H=n[wt+0].vertex,M=n[wt+1].vertex;r.push($.point.x,$.point.y,$.point.z),r.push(H.point.x,H.point.y,H.point.z),r.push(M.point.x,M.point.y,M.point.z)}}const o=new b.Vector3,a=new b.Vector3,l=new b.Vector3,h=new b.Vector3,f=new b.Vector3,I=new b.Vector3,u=new b.Vector3,d=new b.Vector3;let E=0,T=0,p=0,m=0,F=0,R=0,S=0;for(let ot=0,ft=r.length;ot<ft;ot+=9){o.fromArray(r,ot),a.fromArray(r,ot+3),l.fromArray(r,ot+6),u.set(0,0,0),u.add(o).add(a).add(l).divideScalar(3),h.subVectors(a,o),f.subVectors(l,o);const ut=I.crossVectors(h,f).length()/2;d.add(I.copy(u).multiplyScalar(ut)),E+=ut,T+=(9*u.x*u.x+o.x*o.x+a.x*a.x+l.x*l.x)*(ut/12),p+=(9*u.x*u.y+o.x*o.y+a.x*a.y+l.x*l.y)*(ut/12),m+=(9*u.x*u.z+o.x*o.z+a.x*a.z+l.x*l.z)*(ut/12),F+=(9*u.y*u.y+o.y*o.y+a.y*a.y+l.y*l.y)*(ut/12),R+=(9*u.y*u.z+o.y*o.z+a.y*a.z+l.y*l.z)*(ut/12),S+=(9*u.z*u.z+o.z*o.z+a.z*a.z+l.z*l.z)*(ut/12)}d.divideScalar(E),T/=E,p/=E,m/=E,F/=E,R/=E,S/=E,T-=d.x*d.x,p-=d.x*d.y,m-=d.x*d.z,F-=d.y*d.y,R-=d.y*d.z,S-=d.z*d.z;const O=new b.Matrix3;O.elements[0]=T,O.elements[1]=p,O.elements[2]=m,O.elements[3]=p,O.elements[4]=F,O.elements[5]=R,O.elements[6]=m,O.elements[7]=R,O.elements[8]=S,tc(O,e);const y=e.unitary,w=new b.Vector3,P=new b.Vector3,v=new b.Vector3;y.extractBasis(w,P,v);let G=-1/0,N=-1/0,D=-1/0,g=1/0,U=1/0,Q=1/0;for(let ot=0,ft=i.length;ot<ft;ot++){const ut=i[ot];G=Math.max(w.dot(ut),G),N=Math.max(P.dot(ut),N),D=Math.max(v.dot(ut),D),g=Math.min(w.dot(ut),g),U=Math.min(P.dot(ut),U),Q=Math.min(v.dot(ut),Q)}w.multiplyScalar(.5*(g+G)),P.multiplyScalar(.5*(U+N)),v.multiplyScalar(.5*(Q+D));const z=new b.Vector3,et=new b.Vector3,X=new b.Matrix3;z.add(w).add(P).add(v),et.x=G-g,et.y=N-U,et.z=D-Q,et.multiplyScalar(.5),X.copy(y);const{x:nt,y:Y,z:B}=et,rt=new b.Matrix4;rt.makeScale(nt*2,Y*2,B*2);const it=new b.Matrix4;it.makeTranslation(-nt,-Y,-B);const tt=new b.Matrix4;tt.makeTranslation(z.x,z.y,z.z);const Ft=new b.Matrix4;Ft.setFromMatrix3(X);const Nt=new b.Matrix4;return Nt.multiply(tt),Nt.multiply(Ft),Nt.multiply(it),Nt.multiply(rt),{center:z,halfSizes:et,rotation:X,transformation:Nt}}function ec(c,i,t){const e=[c[0]-i[0],c[1]-i[1],c[2]-i[2]];return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]>0}class An{static isTransparent(i){return i.transparent&&i.opacity<1}}const Lt=class Lt{static create(){const i=Math.random()*4294967295|0,t=Math.random()*4294967295|0,e=Math.random()*4294967295|0,s=Math.random()*4294967295|0;return`${Lt._lut[i&255]+Lt._lut[i>>8&255]+Lt._lut[i>>16&255]+Lt._lut[i>>24&255]}-${Lt._lut[t&255]}${Lt._lut[t>>8&255]}-${Lt._lut[t>>16&15|64]}${Lt._lut[t>>24&255]}-${Lt._lut[e&63|128]}${Lt._lut[e>>8&255]}-${Lt._lut[e>>16&255]}${Lt._lut[e>>24&255]}${Lt._lut[s&255]}${Lt._lut[s>>8&255]}${Lt._lut[s>>16&255]}${Lt._lut[s>>24&255]}`.toLowerCase()}static validate(i){if(!Lt._pattern.test(i))throw new Error(`${i} is not a valid UUID v4.
1
+ "use strict";var Bo=Object.defineProperty;var Vo=(c,i,t)=>i in c?Bo(c,i,{enumerable:!0,configurable:!0,writable:!0,value:t}):c[i]=t;var C=(c,i,t)=>(Vo(c,typeof i!="symbol"?i+"":i,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const L=require("three"),Dn=require("@thatopen/fragments"),Yo=require("web-ifc");function bn(c){const i=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(c){for(const t in c)if(t!=="default"){const e=Object.getOwnPropertyDescriptor(c,t);Object.defineProperty(i,t,e.get?e:{enumerable:!0,get:()=>c[t]})}}return i.default=c,Object.freeze(i)}const b=bn(L),jt=bn(Dn),k=bn(Yo),Ur=0,Go=1,zo=2,Xn=2,Ws=1.25,$n=1,cs=6*4+4+4,xs=65535,ko=Math.pow(2,-24),Xs=Symbol("SKIP_GENERATION");function Ho(c){return c.index?c.index.count:c.attributes.position.count}function ei(c){return Ho(c)/3}function Wo(c,i=ArrayBuffer){return c>65535?new Uint32Array(new i(4*c)):new Uint16Array(new i(2*c))}function Xo(c,i){if(!c.index){const t=c.attributes.position.count,e=i.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer,s=Wo(t,e);c.setIndex(new L.BufferAttribute(s,1));for(let n=0;n<t;n++)s[n]=n}}function xr(c){const i=ei(c),t=c.drawRange,e=t.start/3,s=(t.start+t.count)/3,n=Math.max(0,e),r=Math.min(i,s)-n;return[{offset:Math.floor(n),count:Math.floor(r)}]}function Br(c){if(!c.groups||!c.groups.length)return xr(c);const i=[],t=new Set,e=c.drawRange,s=e.start/3,n=(e.start+e.count)/3;for(const o of c.groups){const a=o.start/3,l=(o.start+o.count)/3;t.add(Math.max(s,a)),t.add(Math.min(n,l))}const r=Array.from(t.values()).sort((o,a)=>o-a);for(let o=0;o<r.length-1;o++){const a=r[o],l=r[o+1];i.push({offset:Math.floor(a),count:Math.floor(l-a)})}return i}function $o(c){if(c.groups.length===0)return!1;const i=ei(c),t=Br(c).sort((n,r)=>n.offset-r.offset),e=t[t.length-1];e.count=Math.min(i-e.offset,e.count);let s=0;return t.forEach(({count:n})=>s+=n),i!==s}function Ot(c,i,t){return t.min.x=i[c],t.min.y=i[c+1],t.min.z=i[c+2],t.max.x=i[c+3],t.max.y=i[c+4],t.max.z=i[c+5],t}function Zo(c){c[0]=c[1]=c[2]=1/0,c[3]=c[4]=c[5]=-1/0}function Zn(c){let i=-1,t=-1/0;for(let e=0;e<3;e++){const s=c[e+3]-c[e];s>t&&(t=s,i=e)}return i}function jn(c,i){i.set(c)}function qn(c,i,t){let e,s;for(let n=0;n<3;n++){const r=n+3;e=c[n],s=i[n],t[n]=e<s?e:s,e=c[r],s=i[r],t[r]=e>s?e:s}}function xi(c,i,t){for(let e=0;e<3;e++){const s=i[c+2*e],n=i[c+2*e+1],r=s-n,o=s+n;r<t[e]&&(t[e]=r),o>t[e+3]&&(t[e+3]=o)}}function ri(c){const i=c[3]-c[0],t=c[4]-c[1],e=c[5]-c[2];return 2*(i*t+t*e+e*i)}function $s(c,i,t,e,s=null){let n=1/0,r=1/0,o=1/0,a=-1/0,l=-1/0,h=-1/0,f=1/0,I=1/0,u=1/0,d=-1/0,E=-1/0,T=-1/0;const p=s!==null;for(let m=i*6,F=(i+t)*6;m<F;m+=6){const R=c[m+0],S=c[m+1],O=R-S,y=R+S;O<n&&(n=O),y>a&&(a=y),p&&R<f&&(f=R),p&&R>d&&(d=R);const w=c[m+2],P=c[m+3],v=w-P,G=w+P;v<r&&(r=v),G>l&&(l=G),p&&w<I&&(I=w),p&&w>E&&(E=w);const N=c[m+4],D=c[m+5],g=N-D,U=N+D;g<o&&(o=g),U>h&&(h=U),p&&N<u&&(u=N),p&&N>T&&(T=N)}e[0]=n,e[1]=r,e[2]=o,e[3]=a,e[4]=l,e[5]=h,p&&(s[0]=f,s[1]=I,s[2]=u,s[3]=d,s[4]=E,s[5]=T)}function jo(c,i,t,e){let s=1/0,n=1/0,r=1/0,o=-1/0,a=-1/0,l=-1/0;for(let h=i*6,f=(i+t)*6;h<f;h+=6){const I=c[h+0];I<s&&(s=I),I>o&&(o=I);const u=c[h+2];u<n&&(n=u),u>a&&(a=u);const d=c[h+4];d<r&&(r=d),d>l&&(l=d)}e[0]=s,e[1]=n,e[2]=r,e[3]=o,e[4]=a,e[5]=l}function qo(c,i){Zo(i);const t=c.attributes.position,e=c.index?c.index.array:null,s=ei(c),n=new Float32Array(s*6),r=t.normalized,o=t.array,a=t.offset||0;let l=3;t.isInterleavedBufferAttribute&&(l=t.data.stride);const h=["getX","getY","getZ"];for(let f=0;f<s;f++){const I=f*3,u=f*6;let d=I+0,E=I+1,T=I+2;e&&(d=e[d],E=e[E],T=e[T]),r||(d=d*l+a,E=E*l+a,T=T*l+a);for(let p=0;p<3;p++){let m,F,R;r?(m=t[h[p]](d),F=t[h[p]](E),R=t[h[p]](T)):(m=o[d+p],F=o[E+p],R=o[T+p]);let S=m;F<S&&(S=F),R<S&&(S=R);let O=m;F>O&&(O=F),R>O&&(O=R);const y=(O-S)/2,w=p*2;n[u+w+0]=S+y,n[u+w+1]=y+(Math.abs(S)+y)*ko,S<i[p]&&(i[p]=S),O>i[p+3]&&(i[p+3]=O)}}return n}const ue=32,Qo=(c,i)=>c.candidate-i.candidate,Te=new Array(ue).fill().map(()=>({count:0,bounds:new Float32Array(6),rightCacheBounds:new Float32Array(6),leftCacheBounds:new Float32Array(6),candidate:0})),Bi=new Float32Array(6);function Ko(c,i,t,e,s,n){let r=-1,o=0;if(n===Ur)r=Zn(i),r!==-1&&(o=(i[r]+i[r+3])/2);else if(n===Go)r=Zn(c),r!==-1&&(o=Jo(t,e,s,r));else if(n===zo){const a=ri(c);let l=Ws*s;const h=e*6,f=(e+s)*6;for(let I=0;I<3;I++){const u=i[I],T=(i[I+3]-u)/ue;if(s<ue/4){const p=[...Te];p.length=s;let m=0;for(let R=h;R<f;R+=6,m++){const S=p[m];S.candidate=t[R+2*I],S.count=0;const{bounds:O,leftCacheBounds:y,rightCacheBounds:w}=S;for(let P=0;P<3;P++)w[P]=1/0,w[P+3]=-1/0,y[P]=1/0,y[P+3]=-1/0,O[P]=1/0,O[P+3]=-1/0;xi(R,t,O)}p.sort(Qo);let F=s;for(let R=0;R<F;R++){const S=p[R];for(;R+1<F&&p[R+1].candidate===S.candidate;)p.splice(R+1,1),F--}for(let R=h;R<f;R+=6){const S=t[R+2*I];for(let O=0;O<F;O++){const y=p[O];S>=y.candidate?xi(R,t,y.rightCacheBounds):(xi(R,t,y.leftCacheBounds),y.count++)}}for(let R=0;R<F;R++){const S=p[R],O=S.count,y=s-S.count,w=S.leftCacheBounds,P=S.rightCacheBounds;let v=0;O!==0&&(v=ri(w)/a);let G=0;y!==0&&(G=ri(P)/a);const N=$n+Ws*(v*O+G*y);N<l&&(r=I,l=N,o=S.candidate)}}else{for(let F=0;F<ue;F++){const R=Te[F];R.count=0,R.candidate=u+T+F*T;const S=R.bounds;for(let O=0;O<3;O++)S[O]=1/0,S[O+3]=-1/0}for(let F=h;F<f;F+=6){let O=~~((t[F+2*I]-u)/T);O>=ue&&(O=ue-1);const y=Te[O];y.count++,xi(F,t,y.bounds)}const p=Te[ue-1];jn(p.bounds,p.rightCacheBounds);for(let F=ue-2;F>=0;F--){const R=Te[F],S=Te[F+1];qn(R.bounds,S.rightCacheBounds,R.rightCacheBounds)}let m=0;for(let F=0;F<ue-1;F++){const R=Te[F],S=R.count,O=R.bounds,w=Te[F+1].rightCacheBounds;S!==0&&(m===0?jn(O,Bi):qn(O,Bi,Bi)),m+=S;let P=0,v=0;m!==0&&(P=ri(Bi)/a);const G=s-m;G!==0&&(v=ri(w)/a);const N=$n+Ws*(P*m+v*G);N<l&&(r=I,l=N,o=R.candidate)}}}}else console.warn(`MeshBVH: Invalid build strategy value ${n} used.`);return{axis:r,pos:o}}function Jo(c,i,t,e){let s=0;for(let n=i,r=i+t;n<r;n++)s+=c[n*6+e*2];return s/t}class Vi{constructor(){}}function ta(c,i,t,e,s,n){let r=e,o=e+s-1;const a=n.pos,l=n.axis*2;for(;;){for(;r<=o&&t[r*6+l]<a;)r++;for(;r<=o&&t[o*6+l]>=a;)o--;if(r<o){for(let h=0;h<3;h++){let f=i[r*3+h];i[r*3+h]=i[o*3+h],i[o*3+h]=f}for(let h=0;h<6;h++){let f=t[r*6+h];t[r*6+h]=t[o*6+h],t[o*6+h]=f}r++,o--}else return r}}function ea(c,i,t,e,s,n){let r=e,o=e+s-1;const a=n.pos,l=n.axis*2;for(;;){for(;r<=o&&t[r*6+l]<a;)r++;for(;r<=o&&t[o*6+l]>=a;)o--;if(r<o){let h=c[r];c[r]=c[o],c[o]=h;for(let f=0;f<6;f++){let I=t[r*6+f];t[r*6+f]=t[o*6+f],t[o*6+f]=I}r++,o--}else return r}}function ia(c,i){const t=(c.index?c.index.count:c.attributes.position.count)/3,e=t>2**16,s=e?4:2,n=i?new SharedArrayBuffer(t*s):new ArrayBuffer(t*s),r=e?new Uint32Array(n):new Uint16Array(n);for(let o=0,a=r.length;o<a;o++)r[o]=o;return r}function sa(c,i){const t=c.geometry,e=t.index?t.index.array:null,s=i.maxDepth,n=i.verbose,r=i.maxLeafTris,o=i.strategy,a=i.onProgress,l=ei(t),h=c._indirectBuffer;let f=!1;const I=new Float32Array(6),u=new Float32Array(6),d=qo(t,I),E=i.indirect?ea:ta,T=[],p=i.indirect?xr(t):Br(t);if(p.length===1){const R=p[0],S=new Vi;S.boundingData=I,jo(d,R.offset,R.count,u),F(S,R.offset,R.count,u),T.push(S)}else for(let R of p){const S=new Vi;S.boundingData=new Float32Array(6),$s(d,R.offset,R.count,S.boundingData,u),F(S,R.offset,R.count,u),T.push(S)}return T;function m(R){a&&a(R/l)}function F(R,S,O,y=null,w=0){if(!f&&w>=s&&(f=!0,n&&(console.warn(`MeshBVH: Max depth of ${s} reached when generating BVH. Consider increasing maxDepth.`),console.warn(t))),O<=r||w>=s)return m(S+O),R.offset=S,R.count=O,R;const P=Ko(R.boundingData,y,d,S,O,o);if(P.axis===-1)return m(S+O),R.offset=S,R.count=O,R;const v=E(h,e,d,S,O,P);if(v===S||v===S+O)m(S+O),R.offset=S,R.count=O;else{R.splitAxis=P.axis;const G=new Vi,N=S,D=v-S;R.left=G,G.boundingData=new Float32Array(6),$s(d,N,D,G.boundingData,u),F(G,N,D,u,w+1);const g=new Vi,U=v,Q=O-D;R.right=g,g.boundingData=new Float32Array(6),$s(d,U,Q,g.boundingData,u),F(g,U,Q,u,w+1)}return R}}function na(c,i){const t=c.geometry;i.indirect&&(c._indirectBuffer=ia(t,i.useSharedArrayBuffer),$o(t)&&!i.verbose&&console.warn('MeshBVH: Provided geometry contains groups that do not fully span the vertex contents while using the "indirect" option. BVH may incorrectly report intersections on unrendered portions of the geometry.')),c._indirectBuffer||Xo(t,i);const e=sa(c,i);let s,n,r;const o=[],a=i.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer;for(let f=0;f<e.length;f++){const I=e[f];let u=l(I);const d=new a(cs*u);s=new Float32Array(d),n=new Uint32Array(d),r=new Uint16Array(d),h(0,I),o.push(d)}c._roots=o;return;function l(f){return f.count?1:1+l(f.left)+l(f.right)}function h(f,I){const u=f/4,d=f/2,E=!!I.count,T=I.boundingData;for(let p=0;p<6;p++)s[u+p]=T[p];if(E){const p=I.offset,m=I.count;return n[u+6]=p,r[d+14]=m,r[d+15]=xs,f+cs}else{const p=I.left,m=I.right,F=I.splitAxis;let R;if(R=h(f+cs,p),R/4>Math.pow(2,32))throw new Error("MeshBVH: Cannot store child pointer greater than 32 bits.");return n[u+6]=R/4,R=h(R,m),n[u+7]=F,R}}}class pe{constructor(){this.min=1/0,this.max=-1/0}setFromPointsField(i,t){let e=1/0,s=-1/0;for(let n=0,r=i.length;n<r;n++){const a=i[n][t];e=a<e?a:e,s=a>s?a:s}this.min=e,this.max=s}setFromPoints(i,t){let e=1/0,s=-1/0;for(let n=0,r=t.length;n<r;n++){const o=t[n],a=i.dot(o);e=a<e?a:e,s=a>s?a:s}this.min=e,this.max=s}isSeparated(i){return this.min>i.max||i.min>this.max}}pe.prototype.setFromBox=function(){const c=new L.Vector3;return function(t,e){const s=e.min,n=e.max;let r=1/0,o=-1/0;for(let a=0;a<=1;a++)for(let l=0;l<=1;l++)for(let h=0;h<=1;h++){c.x=s.x*a+n.x*(1-a),c.y=s.y*l+n.y*(1-l),c.z=s.z*h+n.z*(1-h);const f=t.dot(c);r=Math.min(f,r),o=Math.max(f,o)}this.min=r,this.max=o}}();const ra=function(){const c=new L.Vector3,i=new L.Vector3,t=new L.Vector3;return function(s,n,r){const o=s.start,a=c,l=n.start,h=i;t.subVectors(o,l),c.subVectors(s.end,s.start),i.subVectors(n.end,n.start);const f=t.dot(h),I=h.dot(a),u=h.dot(h),d=t.dot(a),T=a.dot(a)*u-I*I;let p,m;T!==0?p=(f*I-d*u)/T:p=0,m=(f+p*I)/u,r.x=p,r.y=m}}(),vn=function(){const c=new L.Vector2,i=new L.Vector3,t=new L.Vector3;return function(s,n,r,o){ra(s,n,c);let a=c.x,l=c.y;if(a>=0&&a<=1&&l>=0&&l<=1){s.at(a,r),n.at(l,o);return}else if(a>=0&&a<=1){l<0?n.at(0,o):n.at(1,o),s.closestPointToPoint(o,!0,r);return}else if(l>=0&&l<=1){a<0?s.at(0,r):s.at(1,r),n.closestPointToPoint(r,!0,o);return}else{let h;a<0?h=s.start:h=s.end;let f;l<0?f=n.start:f=n.end;const I=i,u=t;if(s.closestPointToPoint(f,!0,i),n.closestPointToPoint(h,!0,t),I.distanceToSquared(f)<=u.distanceToSquared(h)){r.copy(I),o.copy(f);return}else{r.copy(h),o.copy(u);return}}}}(),oa=function(){const c=new L.Vector3,i=new L.Vector3,t=new L.Plane,e=new L.Line3;return function(n,r){const{radius:o,center:a}=n,{a:l,b:h,c:f}=r;if(e.start=l,e.end=h,e.closestPointToPoint(a,!0,c).distanceTo(a)<=o||(e.start=l,e.end=f,e.closestPointToPoint(a,!0,c).distanceTo(a)<=o)||(e.start=h,e.end=f,e.closestPointToPoint(a,!0,c).distanceTo(a)<=o))return!0;const E=r.getPlane(t);if(Math.abs(E.distanceToPoint(a))<=o){const p=E.projectPoint(a,i);if(r.containsPoint(p))return!0}return!1}}(),aa=1e-15;function Zs(c){return Math.abs(c)<aa}class se extends L.Triangle{constructor(...i){super(...i),this.isExtendedTriangle=!0,this.satAxes=new Array(4).fill().map(()=>new L.Vector3),this.satBounds=new Array(4).fill().map(()=>new pe),this.points=[this.a,this.b,this.c],this.sphere=new L.Sphere,this.plane=new L.Plane,this.needsUpdate=!0}intersectsSphere(i){return oa(i,this)}update(){const i=this.a,t=this.b,e=this.c,s=this.points,n=this.satAxes,r=this.satBounds,o=n[0],a=r[0];this.getNormal(o),a.setFromPoints(o,s);const l=n[1],h=r[1];l.subVectors(i,t),h.setFromPoints(l,s);const f=n[2],I=r[2];f.subVectors(t,e),I.setFromPoints(f,s);const u=n[3],d=r[3];u.subVectors(e,i),d.setFromPoints(u,s),this.sphere.setFromPoints(this.points),this.plane.setFromNormalAndCoplanarPoint(o,i),this.needsUpdate=!1}}se.prototype.closestPointToSegment=function(){const c=new L.Vector3,i=new L.Vector3,t=new L.Line3;return function(s,n=null,r=null){const{start:o,end:a}=s,l=this.points;let h,f=1/0;for(let I=0;I<3;I++){const u=(I+1)%3;t.start.copy(l[I]),t.end.copy(l[u]),vn(t,s,c,i),h=c.distanceToSquared(i),h<f&&(f=h,n&&n.copy(c),r&&r.copy(i))}return this.closestPointToPoint(o,c),h=o.distanceToSquared(c),h<f&&(f=h,n&&n.copy(c),r&&r.copy(o)),this.closestPointToPoint(a,c),h=a.distanceToSquared(c),h<f&&(f=h,n&&n.copy(c),r&&r.copy(a)),Math.sqrt(f)}}();se.prototype.intersectsTriangle=function(){const c=new se,i=new Array(3),t=new Array(3),e=new pe,s=new pe,n=new L.Vector3,r=new L.Vector3,o=new L.Vector3,a=new L.Vector3,l=new L.Vector3,h=new L.Line3,f=new L.Line3,I=new L.Line3,u=new L.Vector3;function d(E,T,p){const m=E.points;let F=0,R=-1;for(let S=0;S<3;S++){const{start:O,end:y}=h;O.copy(m[S]),y.copy(m[(S+1)%3]),h.delta(r);const w=Zs(T.distanceToPoint(O));if(Zs(T.normal.dot(r))&&w){p.copy(h),F=2;break}const P=T.intersectLine(h,u);if(!P&&w&&u.copy(O),(P||w)&&!Zs(u.distanceTo(y))){if(F<=1)(F===1?p.start:p.end).copy(u),w&&(R=F);else if(F>=2){(R===1?p.start:p.end).copy(u),F=2;break}if(F++,F===2&&R===-1)break}}return F}return function(T,p=null,m=!1){this.needsUpdate&&this.update(),T.isExtendedTriangle?T.needsUpdate&&T.update():(c.copy(T),c.update(),T=c);const F=this.plane,R=T.plane;if(Math.abs(F.normal.dot(R.normal))>1-1e-10){const S=this.satBounds,O=this.satAxes;t[0]=T.a,t[1]=T.b,t[2]=T.c;for(let P=0;P<4;P++){const v=S[P],G=O[P];if(e.setFromPoints(G,t),v.isSeparated(e))return!1}const y=T.satBounds,w=T.satAxes;i[0]=this.a,i[1]=this.b,i[2]=this.c;for(let P=0;P<4;P++){const v=y[P],G=w[P];if(e.setFromPoints(G,i),v.isSeparated(e))return!1}for(let P=0;P<4;P++){const v=O[P];for(let G=0;G<4;G++){const N=w[G];if(n.crossVectors(v,N),e.setFromPoints(n,i),s.setFromPoints(n,t),e.isSeparated(s))return!1}}return p&&(m||console.warn("ExtendedTriangle.intersectsTriangle: Triangles are coplanar which does not support an output edge. Setting edge to 0, 0, 0."),p.start.set(0,0,0),p.end.set(0,0,0)),!0}else{const S=d(this,R,f);if(S===1&&T.containsPoint(f.end))return p&&(p.start.copy(f.end),p.end.copy(f.end)),!0;if(S!==2)return!1;const O=d(T,F,I);if(O===1&&this.containsPoint(I.end))return p&&(p.start.copy(I.end),p.end.copy(I.end)),!0;if(O!==2)return!1;if(f.delta(o),I.delta(a),o.dot(a)<0){let D=I.start;I.start=I.end,I.end=D}const y=f.start.dot(o),w=f.end.dot(o),P=I.start.dot(o),v=I.end.dot(o),G=w<P,N=y<v;return y!==v&&P!==w&&G===N?!1:(p&&(l.subVectors(f.start,I.start),l.dot(o)>0?p.start.copy(f.start):p.start.copy(I.start),l.subVectors(f.end,I.end),l.dot(o)<0?p.end.copy(f.end):p.end.copy(I.end)),!0)}}}();se.prototype.distanceToPoint=function(){const c=new L.Vector3;return function(t){return this.closestPointToPoint(t,c),t.distanceTo(c)}}();se.prototype.distanceToTriangle=function(){const c=new L.Vector3,i=new L.Vector3,t=["a","b","c"],e=new L.Line3,s=new L.Line3;return function(r,o=null,a=null){const l=o||a?e:null;if(this.intersectsTriangle(r,l))return(o||a)&&(o&&l.getCenter(o),a&&l.getCenter(a)),0;let h=1/0;for(let f=0;f<3;f++){let I;const u=t[f],d=r[u];this.closestPointToPoint(d,c),I=d.distanceToSquared(c),I<h&&(h=I,o&&o.copy(c),a&&a.copy(d));const E=this[u];r.closestPointToPoint(E,c),I=E.distanceToSquared(c),I<h&&(h=I,o&&o.copy(E),a&&a.copy(c))}for(let f=0;f<3;f++){const I=t[f],u=t[(f+1)%3];e.set(this[I],this[u]);for(let d=0;d<3;d++){const E=t[d],T=t[(d+1)%3];s.set(r[E],r[T]),vn(e,s,c,i);const p=c.distanceToSquared(i);p<h&&(h=p,o&&o.copy(c),a&&a.copy(i))}}return Math.sqrt(h)}}();class xt{constructor(i,t,e){this.isOrientedBox=!0,this.min=new L.Vector3,this.max=new L.Vector3,this.matrix=new L.Matrix4,this.invMatrix=new L.Matrix4,this.points=new Array(8).fill().map(()=>new L.Vector3),this.satAxes=new Array(3).fill().map(()=>new L.Vector3),this.satBounds=new Array(3).fill().map(()=>new pe),this.alignedSatBounds=new Array(3).fill().map(()=>new pe),this.needsUpdate=!1,i&&this.min.copy(i),t&&this.max.copy(t),e&&this.matrix.copy(e)}set(i,t,e){this.min.copy(i),this.max.copy(t),this.matrix.copy(e),this.needsUpdate=!0}copy(i){this.min.copy(i.min),this.max.copy(i.max),this.matrix.copy(i.matrix),this.needsUpdate=!0}}xt.prototype.update=function(){return function(){const i=this.matrix,t=this.min,e=this.max,s=this.points;for(let l=0;l<=1;l++)for(let h=0;h<=1;h++)for(let f=0;f<=1;f++){const I=1*l|2*h|4*f,u=s[I];u.x=l?e.x:t.x,u.y=h?e.y:t.y,u.z=f?e.z:t.z,u.applyMatrix4(i)}const n=this.satBounds,r=this.satAxes,o=s[0];for(let l=0;l<3;l++){const h=r[l],f=n[l],I=1<<l,u=s[I];h.subVectors(o,u),f.setFromPoints(h,s)}const a=this.alignedSatBounds;a[0].setFromPointsField(s,"x"),a[1].setFromPointsField(s,"y"),a[2].setFromPointsField(s,"z"),this.invMatrix.copy(this.matrix).invert(),this.needsUpdate=!1}}();xt.prototype.intersectsBox=function(){const c=new pe;return function(t){this.needsUpdate&&this.update();const e=t.min,s=t.max,n=this.satBounds,r=this.satAxes,o=this.alignedSatBounds;if(c.min=e.x,c.max=s.x,o[0].isSeparated(c)||(c.min=e.y,c.max=s.y,o[1].isSeparated(c))||(c.min=e.z,c.max=s.z,o[2].isSeparated(c)))return!1;for(let a=0;a<3;a++){const l=r[a],h=n[a];if(c.setFromBox(l,t),h.isSeparated(c))return!1}return!0}}();xt.prototype.intersectsTriangle=function(){const c=new se,i=new Array(3),t=new pe,e=new pe,s=new L.Vector3;return function(r){this.needsUpdate&&this.update(),r.isExtendedTriangle?r.needsUpdate&&r.update():(c.copy(r),c.update(),r=c);const o=this.satBounds,a=this.satAxes;i[0]=r.a,i[1]=r.b,i[2]=r.c;for(let I=0;I<3;I++){const u=o[I],d=a[I];if(t.setFromPoints(d,i),u.isSeparated(t))return!1}const l=r.satBounds,h=r.satAxes,f=this.points;for(let I=0;I<3;I++){const u=l[I],d=h[I];if(t.setFromPoints(d,f),u.isSeparated(t))return!1}for(let I=0;I<3;I++){const u=a[I];for(let d=0;d<4;d++){const E=h[d];if(s.crossVectors(u,E),t.setFromPoints(s,i),e.setFromPoints(s,f),t.isSeparated(e))return!1}}return!0}}();xt.prototype.closestPointToPoint=function(){return function(i,t){return this.needsUpdate&&this.update(),t.copy(i).applyMatrix4(this.invMatrix).clamp(this.min,this.max).applyMatrix4(this.matrix),t}}();xt.prototype.distanceToPoint=function(){const c=new L.Vector3;return function(t){return this.closestPointToPoint(t,c),t.distanceTo(c)}}();xt.prototype.distanceToBox=function(){const c=["x","y","z"],i=new Array(12).fill().map(()=>new L.Line3),t=new Array(12).fill().map(()=>new L.Line3),e=new L.Vector3,s=new L.Vector3;return function(r,o=0,a=null,l=null){if(this.needsUpdate&&this.update(),this.intersectsBox(r))return(a||l)&&(r.getCenter(s),this.closestPointToPoint(s,e),r.closestPointToPoint(e,s),a&&a.copy(e),l&&l.copy(s)),0;const h=o*o,f=r.min,I=r.max,u=this.points;let d=1/0;for(let T=0;T<8;T++){const p=u[T];s.copy(p).clamp(f,I);const m=p.distanceToSquared(s);if(m<d&&(d=m,a&&a.copy(p),l&&l.copy(s),m<h))return Math.sqrt(m)}let E=0;for(let T=0;T<3;T++)for(let p=0;p<=1;p++)for(let m=0;m<=1;m++){const F=(T+1)%3,R=(T+2)%3,S=p<<F|m<<R,O=1<<T|p<<F|m<<R,y=u[S],w=u[O];i[E].set(y,w);const v=c[T],G=c[F],N=c[R],D=t[E],g=D.start,U=D.end;g[v]=f[v],g[G]=p?f[G]:I[G],g[N]=m?f[N]:I[G],U[v]=I[v],U[G]=p?f[G]:I[G],U[N]=m?f[N]:I[G],E++}for(let T=0;T<=1;T++)for(let p=0;p<=1;p++)for(let m=0;m<=1;m++){s.x=T?I.x:f.x,s.y=p?I.y:f.y,s.z=m?I.z:f.z,this.closestPointToPoint(s,e);const F=s.distanceToSquared(e);if(F<d&&(d=F,a&&a.copy(e),l&&l.copy(s),F<h))return Math.sqrt(F)}for(let T=0;T<12;T++){const p=i[T];for(let m=0;m<12;m++){const F=t[m];vn(p,F,e,s);const R=e.distanceToSquared(s);if(R<d&&(d=R,a&&a.copy(e),l&&l.copy(s),R<h))return Math.sqrt(R)}}return Math.sqrt(d)}}();class Un{constructor(i){this._getNewPrimitive=i,this._primitives=[]}getPrimitive(){const i=this._primitives;return i.length===0?this._getNewPrimitive():i.pop()}releasePrimitive(i){this._primitives.push(i)}}class ca extends Un{constructor(){super(()=>new se)}}const Ht=new ca;function Vt(c,i){return i[c+15]===65535}function Yt(c,i){return i[c+6]}function Wt(c,i){return i[c+14]}function Xt(c){return c+8}function $t(c,i){return i[c+6]}function Vr(c,i){return i[c+7]}class la{constructor(){this.float32Array=null,this.uint16Array=null,this.uint32Array=null;const i=[];let t=null;this.setBuffer=e=>{t&&i.push(t),t=e,this.float32Array=new Float32Array(e),this.uint16Array=new Uint16Array(e),this.uint32Array=new Uint32Array(e)},this.clearBuffer=()=>{t=null,this.float32Array=null,this.uint16Array=null,this.uint32Array=null,i.length!==0&&this.setBuffer(i.pop())}}}const At=new la;let Se,qe;const Ue=[],Yi=new Un(()=>new L.Box3);function ha(c,i,t,e,s,n){Se=Yi.getPrimitive(),qe=Yi.getPrimitive(),Ue.push(Se,qe),At.setBuffer(c._roots[i]);const r=In(0,c.geometry,t,e,s,n);At.clearBuffer(),Yi.releasePrimitive(Se),Yi.releasePrimitive(qe),Ue.pop(),Ue.pop();const o=Ue.length;return o>0&&(qe=Ue[o-1],Se=Ue[o-2]),r}function In(c,i,t,e,s=null,n=0,r=0){const{float32Array:o,uint16Array:a,uint32Array:l}=At;let h=c*2;if(Vt(h,a)){const I=Yt(c,l),u=Wt(h,a);return Ot(c,o,Se),e(I,u,!1,r,n+c,Se)}else{let v=function(N){const{uint16Array:D,uint32Array:g}=At;let U=N*2;for(;!Vt(U,D);)N=Xt(N),U=N*2;return Yt(N,g)},G=function(N){const{uint16Array:D,uint32Array:g}=At;let U=N*2;for(;!Vt(U,D);)N=$t(N,g),U=N*2;return Yt(N,g)+Wt(U,D)};const I=Xt(c),u=$t(c,l);let d=I,E=u,T,p,m,F;if(s&&(m=Se,F=qe,Ot(d,o,m),Ot(E,o,F),T=s(m),p=s(F),p<T)){d=u,E=I;const N=T;T=p,p=N,m=F}m||(m=Se,Ot(d,o,m));const R=Vt(d*2,a),S=t(m,R,T,r+1,n+d);let O;if(S===Xn){const N=v(d),g=G(d)-N;O=e(N,g,!0,r+1,n+d,m)}else O=S&&In(d,i,t,e,s,n,r+1);if(O)return!0;F=qe,Ot(E,o,F);const y=Vt(E*2,a),w=t(F,y,p,r+1,n+E);let P;if(w===Xn){const N=v(E),g=G(E)-N;P=e(N,g,!0,r+1,n+E,F)}else P=w&&In(E,i,t,e,s,n,r+1);return!!P}}const oi=new L.Vector3,js=new L.Vector3;function ua(c,i,t={},e=0,s=1/0){const n=e*e,r=s*s;let o=1/0,a=null;if(c.shapecast({boundsTraverseOrder:h=>(oi.copy(i).clamp(h.min,h.max),oi.distanceToSquared(i)),intersectsBounds:(h,f,I)=>I<o&&I<r,intersectsTriangle:(h,f)=>{h.closestPointToPoint(i,oi);const I=i.distanceToSquared(oi);return I<o&&(js.copy(oi),o=I,a=f),I<n}}),o===1/0)return null;const l=Math.sqrt(o);return t.point?t.point.copy(js):t.point=js.clone(),t.distance=l,t.faceIndex=a,t}const xe=new L.Vector3,Be=new L.Vector3,Ve=new L.Vector3,Gi=new L.Vector2,zi=new L.Vector2,ki=new L.Vector2,Qn=new L.Vector3,Kn=new L.Vector3,Jn=new L.Vector3,Hi=new L.Vector3;function fa(c,i,t,e,s,n){let r;return n===L.BackSide?r=c.intersectTriangle(e,t,i,!0,s):r=c.intersectTriangle(i,t,e,n!==L.DoubleSide,s),r===null?null:{distance:c.origin.distanceTo(s),point:s.clone()}}function Ia(c,i,t,e,s,n,r,o,a){xe.fromBufferAttribute(i,n),Be.fromBufferAttribute(i,r),Ve.fromBufferAttribute(i,o);const l=fa(c,xe,Be,Ve,Hi,a);if(l){e&&(Gi.fromBufferAttribute(e,n),zi.fromBufferAttribute(e,r),ki.fromBufferAttribute(e,o),l.uv=L.Triangle.getInterpolation(Hi,xe,Be,Ve,Gi,zi,ki,new L.Vector2)),s&&(Gi.fromBufferAttribute(s,n),zi.fromBufferAttribute(s,r),ki.fromBufferAttribute(s,o),l.uv1=L.Triangle.getInterpolation(Hi,xe,Be,Ve,Gi,zi,ki,new L.Vector2)),t&&(Qn.fromBufferAttribute(t,n),Kn.fromBufferAttribute(t,r),Jn.fromBufferAttribute(t,o),l.normal=L.Triangle.getInterpolation(Hi,xe,Be,Ve,Qn,Kn,Jn,new L.Vector3),l.normal.dot(c.direction)>0&&l.normal.multiplyScalar(-1));const h={a:n,b:r,c:o,normal:new L.Vector3,materialIndex:0};L.Triangle.getNormal(xe,Be,Ve,h.normal),l.face=h,l.faceIndex=n}return l}function Bs(c,i,t,e,s){const n=e*3;let r=n+0,o=n+1,a=n+2;const l=c.index;c.index&&(r=l.getX(r),o=l.getX(o),a=l.getX(a));const{position:h,normal:f,uv:I,uv1:u}=c.attributes,d=Ia(t,h,f,I,u,r,o,a,i);return d?(d.faceIndex=e,s&&s.push(d),d):null}function _t(c,i,t,e){const s=c.a,n=c.b,r=c.c;let o=i,a=i+1,l=i+2;t&&(o=t.getX(o),a=t.getX(a),l=t.getX(l)),s.x=e.getX(o),s.y=e.getY(o),s.z=e.getZ(o),n.x=e.getX(a),n.y=e.getY(a),n.z=e.getZ(a),r.x=e.getX(l),r.y=e.getY(l),r.z=e.getZ(l)}function da(c,i,t,e,s,n){const{geometry:r,_indirectBuffer:o}=c;for(let a=e,l=e+s;a<l;a++)Bs(r,i,t,a,n)}function Ea(c,i,t,e,s){const{geometry:n,_indirectBuffer:r}=c;let o=1/0,a=null;for(let l=e,h=e+s;l<h;l++){let f;f=Bs(n,i,t,l),f&&f.distance<o&&(a=f,o=f.distance)}return a}function pa(c,i,t,e,s,n,r){const{geometry:o}=t,{index:a}=o,l=o.attributes.position;for(let h=c,f=i+c;h<f;h++){let I;if(I=h,_t(r,I*3,a,l),r.needsUpdate=!0,e(r,I,s,n))return!0}return!1}function Ca(c,i=null){i&&Array.isArray(i)&&(i=new Set(i));const t=c.geometry,e=t.index?t.index.array:null,s=t.attributes.position;let n,r,o,a,l=0;const h=c._roots;for(let I=0,u=h.length;I<u;I++)n=h[I],r=new Uint32Array(n),o=new Uint16Array(n),a=new Float32Array(n),f(0,l),l+=n.byteLength;function f(I,u,d=!1){const E=I*2;if(o[E+15]===xs){const p=r[I+6],m=o[E+14];let F=1/0,R=1/0,S=1/0,O=-1/0,y=-1/0,w=-1/0;for(let P=3*p,v=3*(p+m);P<v;P++){let G=e[P];const N=s.getX(G),D=s.getY(G),g=s.getZ(G);N<F&&(F=N),N>O&&(O=N),D<R&&(R=D),D>y&&(y=D),g<S&&(S=g),g>w&&(w=g)}return a[I+0]!==F||a[I+1]!==R||a[I+2]!==S||a[I+3]!==O||a[I+4]!==y||a[I+5]!==w?(a[I+0]=F,a[I+1]=R,a[I+2]=S,a[I+3]=O,a[I+4]=y,a[I+5]=w,!0):!1}else{const p=I+8,m=r[I+6],F=p+u,R=m+u;let S=d,O=!1,y=!1;i?S||(O=i.has(F),y=i.has(R),S=!O&&!y):(O=!0,y=!0);const w=S||O,P=S||y;let v=!1;w&&(v=f(p,u,S));let G=!1;P&&(G=f(m,u,S));const N=v||G;if(N)for(let D=0;D<3;D++){const g=p+D,U=m+D,Q=a[g],z=a[g+3],et=a[U],X=a[U+3];a[I+D]=Q<et?Q:et,a[I+D+3]=z>X?z:X}return N}}}const tr=new L.Box3;function Oe(c,i,t,e){return Ot(c,i,tr),t.intersectBox(tr,e)}function Ta(c,i,t,e,s,n){const{geometry:r,_indirectBuffer:o}=c;for(let a=e,l=e+s;a<l;a++){let h=o?o[a]:a;Bs(r,i,t,h,n)}}function ma(c,i,t,e,s){const{geometry:n,_indirectBuffer:r}=c;let o=1/0,a=null;for(let l=e,h=e+s;l<h;l++){let f;f=Bs(n,i,t,r?r[l]:l),f&&f.distance<o&&(a=f,o=f.distance)}return a}function Ra(c,i,t,e,s,n,r){const{geometry:o}=t,{index:a}=o,l=o.attributes.position;for(let h=c,f=i+c;h<f;h++){let I;if(I=t.resolveTriangleIndex(h),_t(r,I*3,a,l),r.needsUpdate=!0,e(r,I,s,n))return!0}return!1}const er=new L.Vector3;function ga(c,i,t,e,s){At.setBuffer(c._roots[i]),dn(0,c,t,e,s),At.clearBuffer()}function dn(c,i,t,e,s){const{float32Array:n,uint16Array:r,uint32Array:o}=At,a=c*2;if(Vt(a,r)){const h=Yt(c,o),f=Wt(a,r);da(i,t,e,h,f,s)}else{const h=Xt(c);Oe(h,n,e,er)&&dn(h,i,t,e,s);const f=$t(c,o);Oe(f,n,e,er)&&dn(f,i,t,e,s)}}const ir=new L.Vector3,Aa=["x","y","z"];function Fa(c,i,t,e){At.setBuffer(c._roots[i]);const s=En(0,c,t,e);return At.clearBuffer(),s}function En(c,i,t,e){const{float32Array:s,uint16Array:n,uint32Array:r}=At;let o=c*2;if(Vt(o,n)){const l=Yt(c,r),h=Wt(o,n);return Ea(i,t,e,l,h)}else{const l=Vr(c,r),h=Aa[l],I=e.direction[h]>=0;let u,d;I?(u=Xt(c),d=$t(c,r)):(u=$t(c,r),d=Xt(c));const T=Oe(u,s,e,ir)?En(u,i,t,e):null;if(T){const F=T.point[h];if(I?F<=s[d+l]:F>=s[d+l+3])return T}const m=Oe(d,s,e,ir)?En(d,i,t,e):null;return T&&m?T.distance<=m.distance?T:m:T||m||null}}const Wi=new L.Box3,Ye=new se,Ge=new se,ai=new L.Matrix4,sr=new xt,Xi=new xt;function Sa(c,i,t,e){At.setBuffer(c._roots[i]);const s=pn(0,c,t,e);return At.clearBuffer(),s}function pn(c,i,t,e,s=null){const{float32Array:n,uint16Array:r,uint32Array:o}=At;let a=c*2;if(s===null&&(t.boundingBox||t.computeBoundingBox(),sr.set(t.boundingBox.min,t.boundingBox.max,e),s=sr),Vt(a,r)){const h=i.geometry,f=h.index,I=h.attributes.position,u=t.index,d=t.attributes.position,E=Yt(c,o),T=Wt(a,r);if(ai.copy(e).invert(),t.boundsTree)return Ot(c,n,Xi),Xi.matrix.copy(ai),Xi.needsUpdate=!0,t.boundsTree.shapecast({intersectsBounds:m=>Xi.intersectsBox(m),intersectsTriangle:m=>{m.a.applyMatrix4(e),m.b.applyMatrix4(e),m.c.applyMatrix4(e),m.needsUpdate=!0;for(let F=E*3,R=(T+E)*3;F<R;F+=3)if(_t(Ge,F,f,I),Ge.needsUpdate=!0,m.intersectsTriangle(Ge))return!0;return!1}});for(let p=E*3,m=(T+E)*3;p<m;p+=3){_t(Ye,p,f,I),Ye.a.applyMatrix4(ai),Ye.b.applyMatrix4(ai),Ye.c.applyMatrix4(ai),Ye.needsUpdate=!0;for(let F=0,R=u.count;F<R;F+=3)if(_t(Ge,F,u,d),Ge.needsUpdate=!0,Ye.intersectsTriangle(Ge))return!0}}else{const h=c+8,f=o[c+6];return Ot(h,n,Wi),!!(s.intersectsBox(Wi)&&pn(h,i,t,e,s)||(Ot(f,n,Wi),s.intersectsBox(Wi)&&pn(f,i,t,e,s)))}}const $i=new L.Matrix4,qs=new xt,ci=new xt,Oa=new L.Vector3,Na=new L.Vector3,ya=new L.Vector3,La=new L.Vector3;function Pa(c,i,t,e={},s={},n=0,r=1/0){i.boundingBox||i.computeBoundingBox(),qs.set(i.boundingBox.min,i.boundingBox.max,t),qs.needsUpdate=!0;const o=c.geometry,a=o.attributes.position,l=o.index,h=i.attributes.position,f=i.index,I=Ht.getPrimitive(),u=Ht.getPrimitive();let d=Oa,E=Na,T=null,p=null;s&&(T=ya,p=La);let m=1/0,F=null,R=null;return $i.copy(t).invert(),ci.matrix.copy($i),c.shapecast({boundsTraverseOrder:S=>qs.distanceToBox(S),intersectsBounds:(S,O,y)=>y<m&&y<r?(O&&(ci.min.copy(S.min),ci.max.copy(S.max),ci.needsUpdate=!0),!0):!1,intersectsRange:(S,O)=>{if(i.boundsTree)return i.boundsTree.shapecast({boundsTraverseOrder:w=>ci.distanceToBox(w),intersectsBounds:(w,P,v)=>v<m&&v<r,intersectsRange:(w,P)=>{for(let v=w,G=w+P;v<G;v++){_t(u,3*v,f,h),u.a.applyMatrix4(t),u.b.applyMatrix4(t),u.c.applyMatrix4(t),u.needsUpdate=!0;for(let N=S,D=S+O;N<D;N++){_t(I,3*N,l,a),I.needsUpdate=!0;const g=I.distanceToTriangle(u,d,T);if(g<m&&(E.copy(d),p&&p.copy(T),m=g,F=N,R=v),g<n)return!0}}}});{const y=ei(i);for(let w=0,P=y;w<P;w++){_t(u,3*w,f,h),u.a.applyMatrix4(t),u.b.applyMatrix4(t),u.c.applyMatrix4(t),u.needsUpdate=!0;for(let v=S,G=S+O;v<G;v++){_t(I,3*v,l,a),I.needsUpdate=!0;const N=I.distanceToTriangle(u,d,T);if(N<m&&(E.copy(d),p&&p.copy(T),m=N,F=v,R=w),N<n)return!0}}}}}),Ht.releasePrimitive(I),Ht.releasePrimitive(u),m===1/0?null:(e.point?e.point.copy(E):e.point=E.clone(),e.distance=m,e.faceIndex=F,s&&(s.point?s.point.copy(p):s.point=p.clone(),s.point.applyMatrix4($i),E.applyMatrix4($i),s.distance=E.sub(s.point).length(),s.faceIndex=R),e)}function _a(c,i=null){i&&Array.isArray(i)&&(i=new Set(i));const t=c.geometry,e=t.index?t.index.array:null,s=t.attributes.position;let n,r,o,a,l=0;const h=c._roots;for(let I=0,u=h.length;I<u;I++)n=h[I],r=new Uint32Array(n),o=new Uint16Array(n),a=new Float32Array(n),f(0,l),l+=n.byteLength;function f(I,u,d=!1){const E=I*2;if(o[E+15]===xs){const p=r[I+6],m=o[E+14];let F=1/0,R=1/0,S=1/0,O=-1/0,y=-1/0,w=-1/0;for(let P=p,v=p+m;P<v;P++){const G=3*c.resolveTriangleIndex(P);for(let N=0;N<3;N++){let D=G+N;D=e?e[D]:D;const g=s.getX(D),U=s.getY(D),Q=s.getZ(D);g<F&&(F=g),g>O&&(O=g),U<R&&(R=U),U>y&&(y=U),Q<S&&(S=Q),Q>w&&(w=Q)}}return a[I+0]!==F||a[I+1]!==R||a[I+2]!==S||a[I+3]!==O||a[I+4]!==y||a[I+5]!==w?(a[I+0]=F,a[I+1]=R,a[I+2]=S,a[I+3]=O,a[I+4]=y,a[I+5]=w,!0):!1}else{const p=I+8,m=r[I+6],F=p+u,R=m+u;let S=d,O=!1,y=!1;i?S||(O=i.has(F),y=i.has(R),S=!O&&!y):(O=!0,y=!0);const w=S||O,P=S||y;let v=!1;w&&(v=f(p,u,S));let G=!1;P&&(G=f(m,u,S));const N=v||G;if(N)for(let D=0;D<3;D++){const g=p+D,U=m+D,Q=a[g],z=a[g+3],et=a[U],X=a[U+3];a[I+D]=Q<et?Q:et,a[I+D+3]=z>X?z:X}return N}}}const nr=new L.Vector3;function Ma(c,i,t,e,s){At.setBuffer(c._roots[i]),Cn(0,c,t,e,s),At.clearBuffer()}function Cn(c,i,t,e,s){const{float32Array:n,uint16Array:r,uint32Array:o}=At,a=c*2;if(Vt(a,r)){const h=Yt(c,o),f=Wt(a,r);Ta(i,t,e,h,f,s)}else{const h=Xt(c);Oe(h,n,e,nr)&&Cn(h,i,t,e,s);const f=$t(c,o);Oe(f,n,e,nr)&&Cn(f,i,t,e,s)}}const rr=new L.Vector3,wa=["x","y","z"];function Da(c,i,t,e){At.setBuffer(c._roots[i]);const s=Tn(0,c,t,e);return At.clearBuffer(),s}function Tn(c,i,t,e){const{float32Array:s,uint16Array:n,uint32Array:r}=At;let o=c*2;if(Vt(o,n)){const l=Yt(c,r),h=Wt(o,n);return ma(i,t,e,l,h)}else{const l=Vr(c,r),h=wa[l],I=e.direction[h]>=0;let u,d;I?(u=Xt(c),d=$t(c,r)):(u=$t(c,r),d=Xt(c));const T=Oe(u,s,e,rr)?Tn(u,i,t,e):null;if(T){const F=T.point[h];if(I?F<=s[d+l]:F>=s[d+l+3])return T}const m=Oe(d,s,e,rr)?Tn(d,i,t,e):null;return T&&m?T.distance<=m.distance?T:m:T||m||null}}const Zi=new L.Box3,ze=new se,ke=new se,li=new L.Matrix4,or=new xt,ji=new xt;function ba(c,i,t,e){At.setBuffer(c._roots[i]);const s=mn(0,c,t,e);return At.clearBuffer(),s}function mn(c,i,t,e,s=null){const{float32Array:n,uint16Array:r,uint32Array:o}=At;let a=c*2;if(s===null&&(t.boundingBox||t.computeBoundingBox(),or.set(t.boundingBox.min,t.boundingBox.max,e),s=or),Vt(a,r)){const h=i.geometry,f=h.index,I=h.attributes.position,u=t.index,d=t.attributes.position,E=Yt(c,o),T=Wt(a,r);if(li.copy(e).invert(),t.boundsTree)return Ot(c,n,ji),ji.matrix.copy(li),ji.needsUpdate=!0,t.boundsTree.shapecast({intersectsBounds:m=>ji.intersectsBox(m),intersectsTriangle:m=>{m.a.applyMatrix4(e),m.b.applyMatrix4(e),m.c.applyMatrix4(e),m.needsUpdate=!0;for(let F=E,R=T+E;F<R;F++)if(_t(ke,3*i.resolveTriangleIndex(F),f,I),ke.needsUpdate=!0,m.intersectsTriangle(ke))return!0;return!1}});for(let p=E,m=T+E;p<m;p++){const F=i.resolveTriangleIndex(p);_t(ze,3*F,f,I),ze.a.applyMatrix4(li),ze.b.applyMatrix4(li),ze.c.applyMatrix4(li),ze.needsUpdate=!0;for(let R=0,S=u.count;R<S;R+=3)if(_t(ke,R,u,d),ke.needsUpdate=!0,ze.intersectsTriangle(ke))return!0}}else{const h=c+8,f=o[c+6];return Ot(h,n,Zi),!!(s.intersectsBox(Zi)&&mn(h,i,t,e,s)||(Ot(f,n,Zi),s.intersectsBox(Zi)&&mn(f,i,t,e,s)))}}const qi=new L.Matrix4,Qs=new xt,hi=new xt,va=new L.Vector3,Ua=new L.Vector3,xa=new L.Vector3,Ba=new L.Vector3;function Va(c,i,t,e={},s={},n=0,r=1/0){i.boundingBox||i.computeBoundingBox(),Qs.set(i.boundingBox.min,i.boundingBox.max,t),Qs.needsUpdate=!0;const o=c.geometry,a=o.attributes.position,l=o.index,h=i.attributes.position,f=i.index,I=Ht.getPrimitive(),u=Ht.getPrimitive();let d=va,E=Ua,T=null,p=null;s&&(T=xa,p=Ba);let m=1/0,F=null,R=null;return qi.copy(t).invert(),hi.matrix.copy(qi),c.shapecast({boundsTraverseOrder:S=>Qs.distanceToBox(S),intersectsBounds:(S,O,y)=>y<m&&y<r?(O&&(hi.min.copy(S.min),hi.max.copy(S.max),hi.needsUpdate=!0),!0):!1,intersectsRange:(S,O)=>{if(i.boundsTree){const y=i.boundsTree;return y.shapecast({boundsTraverseOrder:w=>hi.distanceToBox(w),intersectsBounds:(w,P,v)=>v<m&&v<r,intersectsRange:(w,P)=>{for(let v=w,G=w+P;v<G;v++){const N=y.resolveTriangleIndex(v);_t(u,3*N,f,h),u.a.applyMatrix4(t),u.b.applyMatrix4(t),u.c.applyMatrix4(t),u.needsUpdate=!0;for(let D=S,g=S+O;D<g;D++){const U=c.resolveTriangleIndex(D);_t(I,3*U,l,a),I.needsUpdate=!0;const Q=I.distanceToTriangle(u,d,T);if(Q<m&&(E.copy(d),p&&p.copy(T),m=Q,F=D,R=v),Q<n)return!0}}}})}else{const y=ei(i);for(let w=0,P=y;w<P;w++){_t(u,3*w,f,h),u.a.applyMatrix4(t),u.b.applyMatrix4(t),u.c.applyMatrix4(t),u.needsUpdate=!0;for(let v=S,G=S+O;v<G;v++){const N=c.resolveTriangleIndex(v);_t(I,3*N,l,a),I.needsUpdate=!0;const D=I.distanceToTriangle(u,d,T);if(D<m&&(E.copy(d),p&&p.copy(T),m=D,F=v,R=w),D<n)return!0}}}}}),Ht.releasePrimitive(I),Ht.releasePrimitive(u),m===1/0?null:(e.point?e.point.copy(E):e.point=E.clone(),e.distance=m,e.faceIndex=F,s&&(s.point?s.point.copy(p):s.point=p.clone(),s.point.applyMatrix4(qi),E.applyMatrix4(qi),s.distance=E.sub(s.point).length(),s.faceIndex=R),e)}function Ya(){return typeof SharedArrayBuffer<"u"}const Ai=new At.constructor,us=new At.constructor,ge=new Un(()=>new L.Box3),He=new L.Box3,We=new L.Box3,Ks=new L.Box3,Js=new L.Box3;let tn=!1;function Ga(c,i,t,e){if(tn)throw new Error("MeshBVH: Recursive calls to bvhcast not supported.");tn=!0;const s=c._roots,n=i._roots;let r,o=0,a=0;const l=new L.Matrix4().copy(t).invert();for(let h=0,f=s.length;h<f;h++){Ai.setBuffer(s[h]),a=0;const I=ge.getPrimitive();Ot(0,Ai.float32Array,I),I.applyMatrix4(l);for(let u=0,d=n.length;u<d&&(us.setBuffer(n[h]),r=Jt(0,0,t,l,e,o,a,0,0,I),us.clearBuffer(),a+=n[u].length,!r);u++);if(ge.releasePrimitive(I),Ai.clearBuffer(),o+=s[h].length,r)break}return tn=!1,r}function Jt(c,i,t,e,s,n=0,r=0,o=0,a=0,l=null,h=!1){let f,I;h?(f=us,I=Ai):(f=Ai,I=us);const u=f.float32Array,d=f.uint32Array,E=f.uint16Array,T=I.float32Array,p=I.uint32Array,m=I.uint16Array,F=c*2,R=i*2,S=Vt(F,E),O=Vt(R,m);let y=!1;if(O&&S)h?y=s(Yt(i,p),Wt(i*2,m),Yt(c,d),Wt(c*2,E),a,r+i,o,n+c):y=s(Yt(c,d),Wt(c*2,E),Yt(i,p),Wt(i*2,m),o,n+c,a,r+i);else if(O){const w=ge.getPrimitive();Ot(i,T,w),w.applyMatrix4(t);const P=Xt(c),v=$t(c,d);Ot(P,u,He),Ot(v,u,We);const G=w.intersectsBox(He),N=w.intersectsBox(We);y=G&&Jt(i,P,e,t,s,r,n,a,o+1,w,!h)||N&&Jt(i,v,e,t,s,r,n,a,o+1,w,!h),ge.releasePrimitive(w)}else{const w=Xt(i),P=$t(i,p);Ot(w,T,Ks),Ot(P,T,Js);const v=l.intersectsBox(Ks),G=l.intersectsBox(Js);if(v&&G)y=Jt(c,w,t,e,s,n,r,o,a+1,l,h)||Jt(c,P,t,e,s,n,r,o,a+1,l,h);else if(v)if(S)y=Jt(c,w,t,e,s,n,r,o,a+1,l,h);else{const N=ge.getPrimitive();N.copy(Ks).applyMatrix4(t);const D=Xt(c),g=$t(c,d);Ot(D,u,He),Ot(g,u,We);const U=N.intersectsBox(He),Q=N.intersectsBox(We);y=U&&Jt(w,D,e,t,s,r,n,a,o+1,N,!h)||Q&&Jt(w,g,e,t,s,r,n,a,o+1,N,!h),ge.releasePrimitive(N)}else if(G)if(S)y=Jt(c,P,t,e,s,n,r,o,a+1,l,h);else{const N=ge.getPrimitive();N.copy(Js).applyMatrix4(t);const D=Xt(c),g=$t(c,d);Ot(D,u,He),Ot(g,u,We);const U=N.intersectsBox(He),Q=N.intersectsBox(We);y=U&&Jt(P,D,e,t,s,r,n,a,o+1,N,!h)||Q&&Jt(P,g,e,t,s,r,n,a,o+1,N,!h),ge.releasePrimitive(N)}}return y}const Qi=new xt,ar=new L.Box3;class xn{static serialize(i,t={}){t={cloneBuffers:!0,...t};const e=i.geometry,s=i._roots,n=i._indirectBuffer,r=e.getIndex();let o;return t.cloneBuffers?o={roots:s.map(a=>a.slice()),index:r.array.slice(),indirectBuffer:n?n.slice():null}:o={roots:s,index:r.array,indirectBuffer:n},o}static deserialize(i,t,e={}){e={setIndex:!0,indirect:!!i.indirectBuffer,...e};const{index:s,roots:n,indirectBuffer:r}=i,o=new xn(t,{...e,[Xs]:!0});if(o._roots=n,o._indirectBuffer=r||null,e.setIndex){const a=t.getIndex();if(a===null){const l=new L.BufferAttribute(i.index,1,!1);t.setIndex(l)}else a.array!==s&&(a.array.set(s),a.needsUpdate=!0)}return o}get indirect(){return!!this._indirectBuffer}constructor(i,t={}){if(i.isBufferGeometry){if(i.index&&i.index.isInterleavedBufferAttribute)throw new Error("MeshBVH: InterleavedBufferAttribute is not supported for the index attribute.")}else throw new Error("MeshBVH: Only BufferGeometries are supported.");if(t=Object.assign({strategy:Ur,maxDepth:40,maxLeafTris:10,verbose:!0,useSharedArrayBuffer:!1,setBoundingBox:!0,onProgress:null,indirect:!1,[Xs]:!1},t),t.useSharedArrayBuffer&&!Ya())throw new Error("MeshBVH: SharedArrayBuffer is not available.");this.geometry=i,this._roots=null,this._indirectBuffer=null,t[Xs]||(na(this,t),!i.boundingBox&&t.setBoundingBox&&(i.boundingBox=this.getBoundingBox(new L.Box3)));const{_indirectBuffer:e}=this;this.resolveTriangleIndex=t.indirect?s=>e[s]:s=>s}refit(i=null){return(this.indirect?_a:Ca)(this,i)}traverse(i,t=0){const e=this._roots[t],s=new Uint32Array(e),n=new Uint16Array(e);r(0);function r(o,a=0){const l=o*2,h=n[l+15]===xs;if(h){const f=s[o+6],I=n[l+14];i(a,h,new Float32Array(e,o*4,6),f,I)}else{const f=o+cs/4,I=s[o+6],u=s[o+7];i(a,h,new Float32Array(e,o*4,6),u)||(r(f,a+1),r(I,a+1))}}}raycast(i,t=L.FrontSide){const e=this._roots,s=this.geometry,n=[],r=t.isMaterial,o=Array.isArray(t),a=s.groups,l=r?t.side:t,h=this.indirect?Ma:ga;for(let f=0,I=e.length;f<I;f++){const u=o?t[a[f].materialIndex].side:l,d=n.length;if(h(this,f,u,i,n),o){const E=a[f].materialIndex;for(let T=d,p=n.length;T<p;T++)n[T].face.materialIndex=E}}return n}raycastFirst(i,t=L.FrontSide){const e=this._roots,s=this.geometry,n=t.isMaterial,r=Array.isArray(t);let o=null;const a=s.groups,l=n?t.side:t,h=this.indirect?Da:Fa;for(let f=0,I=e.length;f<I;f++){const u=r?t[a[f].materialIndex].side:l,d=h(this,f,u,i);d!=null&&(o==null||d.distance<o.distance)&&(o=d,r&&(d.face.materialIndex=a[f].materialIndex))}return o}intersectsGeometry(i,t){let e=!1;const s=this._roots,n=this.indirect?ba:Sa;for(let r=0,o=s.length;r<o&&(e=n(this,r,i,t),!e);r++);return e}shapecast(i){const t=Ht.getPrimitive(),e=this.indirect?Ra:pa;let{boundsTraverseOrder:s,intersectsBounds:n,intersectsRange:r,intersectsTriangle:o}=i;if(r&&o){const f=r;r=(I,u,d,E,T)=>f(I,u,d,E,T)?!0:e(I,u,this,o,d,E,t)}else r||(o?r=(f,I,u,d)=>e(f,I,this,o,u,d,t):r=(f,I,u)=>u);let a=!1,l=0;const h=this._roots;for(let f=0,I=h.length;f<I;f++){const u=h[f];if(a=ha(this,f,n,r,s,l),a)break;l+=u.byteLength}return Ht.releasePrimitive(t),a}bvhcast(i,t,e){let{intersectsRanges:s,intersectsTriangles:n}=e;const r=Ht.getPrimitive(),o=this.geometry.index,a=this.geometry.attributes.position,l=this.indirect?d=>{const E=this.resolveTriangleIndex(d);_t(r,E*3,o,a)}:d=>{_t(r,d*3,o,a)},h=Ht.getPrimitive(),f=i.geometry.index,I=i.geometry.attributes.position,u=i.indirect?d=>{const E=i.resolveTriangleIndex(d);_t(h,E*3,f,I)}:d=>{_t(h,d*3,f,I)};if(n){const d=(E,T,p,m,F,R,S,O)=>{for(let y=p,w=p+m;y<w;y++){u(y),h.a.applyMatrix4(t),h.b.applyMatrix4(t),h.c.applyMatrix4(t),h.needsUpdate=!0;for(let P=E,v=E+T;P<v;P++)if(l(P),r.needsUpdate=!0,n(r,h,P,y,F,R,S,O))return!0}return!1};if(s){const E=s;s=function(T,p,m,F,R,S,O,y){return E(T,p,m,F,R,S,O,y)?!0:d(T,p,m,F,R,S,O,y)}}else s=d}return Ga(this,i,t,s)}intersectsBox(i,t){return Qi.set(i.min,i.max,t),Qi.needsUpdate=!0,this.shapecast({intersectsBounds:e=>Qi.intersectsBox(e),intersectsTriangle:e=>Qi.intersectsTriangle(e)})}intersectsSphere(i){return this.shapecast({intersectsBounds:t=>i.intersectsBox(t),intersectsTriangle:t=>t.intersectsSphere(i)})}closestPointToGeometry(i,t,e={},s={},n=0,r=1/0){return(this.indirect?Va:Pa)(this,i,t,e,s,n,r)}closestPointToPoint(i,t={},e=0,s=1/0){return ua(this,i,t,e,s)}getBoundingBox(i){return i.makeEmpty(),this._roots.forEach(e=>{Ot(0,new Float32Array(e),ar),i.union(ar)}),i}}function cr(c,i,t){return c===null||(c.point.applyMatrix4(i.matrixWorld),c.distance=c.point.distanceTo(t.ray.origin),c.object=i,c.distance<t.near||c.distance>t.far)?null:c}const en=new L.Ray,lr=new L.Matrix4,za=L.Mesh.prototype.raycast;function ka(c,i){if(this.geometry.boundsTree){if(this.material===void 0)return;lr.copy(this.matrixWorld).invert(),en.copy(c.ray).applyMatrix4(lr);const t=this.geometry.boundsTree;if(c.firstHitOnly===!0){const e=cr(t.raycastFirst(en,this.material),this,c);e&&i.push(e)}else{const e=t.raycast(en,this.material);for(let s=0,n=e.length;s<n;s++){const r=cr(e[s],this,c);r&&i.push(r)}}}else za.call(this,c,i)}function Ha(c){return this.boundsTree=new xn(this,c),this.boundsTree}function Wa(){this.boundsTree=null}class q{constructor(){C(this,"trigger",i=>{const t=this.handlers.slice(0);for(const e of t)e(i)});C(this,"handlers",[])}add(i){this.handlers.push(i)}remove(i){this.handlers=this.handlers.filter(t=>t!==i)}reset(){this.handlers.length=0}}class fe{constructor(){C(this,"trigger",async i=>{const t=this.handlers.slice(0);for(const e of t)await e(i)});C(this,"handlers",[])}add(i){this.handlers.push(i)}remove(i){this.handlers=this.handlers.filter(t=>t!==i)}reset(){this.handlers.length=0}}class Vs{constructor(i){C(this,"isDisposeable",()=>"dispose"in this&&"onDisposed"in this);C(this,"isResizeable",()=>"resize"in this&&"getSize"in this);C(this,"isUpdateable",()=>"onAfterUpdate"in this&&"onBeforeUpdate"in this&&"update"in this);C(this,"isHideable",()=>"visible"in this);C(this,"isConfigurable",()=>"setup"in this&&"config"in this&&"onSetup"in this);this.components=i}}class mt extends Vs{}class Ys extends Vs{constructor(t){super(t);C(this,"worlds",new Map);C(this,"onWorldChanged",new q);C(this,"currentWorld",null);this.onWorldChanged.add(({world:e,action:s})=>{s==="removed"&&this.worlds.delete(e.uuid)})}}class Yr extends Ys{constructor(){super(...arguments);C(this,"hasCameraControls",()=>"controls"in this)}}class Gr extends Ys{constructor(){super(...arguments);C(this,"onAfterUpdate",new q);C(this,"onBeforeUpdate",new q);C(this,"onDisposed",new q);C(this,"onResize",new q);C(this,"onClippingPlanesUpdated",new q);C(this,"clippingPlanes",[])}updateClippingPlanes(){this.onClippingPlanesUpdated.trigger()}setPlane(t,e,s){e.isLocal=s;const n=this.clippingPlanes.indexOf(e);t&&n===-1?this.clippingPlanes.push(e):!t&&n>-1&&this.clippingPlanes.splice(n,1),this.three.clippingPlanes=this.clippingPlanes.filter(r=>!r.isLocal)}}const Fi=class Fi extends mt{constructor(t){super(t);C(this,"_disposedComponents",new Set);C(this,"enabled",!0);t.add(Fi.uuid,this)}get(){return this._disposedComponents}destroy(t,e=!0,s=!0){t.removeFromParent();const n=t;n.dispose&&n.dispose(),this.disposeGeometryAndMaterials(t,e),s&&n.children&&n.children.length&&this.disposeChildren(n),t.children.length=0}disposeGeometry(t){t.boundsTree&&t.disposeBoundsTree&&t.disposeBoundsTree(),t.dispose()}disposeGeometryAndMaterials(t,e){const s=t;s.geometry&&this.disposeGeometry(s.geometry),e&&s.material&&Fi.disposeMaterial(s),s.material=[],s.geometry=null}disposeChildren(t){for(const e of t.children)this.destroy(e)}static disposeMaterial(t){if(t.material)if(Array.isArray(t.material))for(const e of t.material)e.dispose();else t.material.dispose()}};C(Fi,"uuid","76e9cd8e-ad8f-4753-9ef6-cbc60f7247fe");let Ce=Fi;class zr extends Ys{constructor(t){super(t);C(this,"onDisposed",new q);C(this,"directionalLights",new Map);C(this,"ambientLights",new Map)}dispose(){const t=this.components.get(Ce);for(const e of this.three.children){const s=e;s.geometry&&t.destroy(s)}this.deleteAllLights(),this.three.children=[],this.onDisposed.trigger(),this.onDisposed.reset()}deleteAllLights(){for(const[,t]of this.directionalLights)t.removeFromParent(),t.target.removeFromParent(),t.dispose();this.directionalLights.clear();for(const[,t]of this.ambientLights)t.removeFromParent(),t.dispose();this.ambientLights.clear()}}class Ie extends Set{constructor(t){super(t);C(this,"onItemAdded",new q);C(this,"onItemDeleted",new q);C(this,"onCleared",new q);C(this,"guard",()=>!0)}clear(){super.clear(),this.onCleared.trigger()}add(...t){for(const e of t)this.has(e)||!this.guard(e)||(super.add(e),this.onItemAdded||(this.onItemAdded=new q),this.onItemAdded.trigger(e));return this}delete(t){const e=super.delete(t);return e&&this.onItemDeleted.trigger(),e}dispose(){this.clear(),this.onItemAdded.reset(),this.onItemDeleted.reset(),this.onCleared.reset()}}class Qt extends Map{constructor(t){super(t);C(this,"onItemSet",new q);C(this,"onItemUpdated",new q);C(this,"onItemDeleted",new q);C(this,"onCleared",new q);C(this,"guard",()=>!0)}clear(){super.clear(),this.onCleared.trigger()}set(t,e){const s=this.has(t);if(!(this.guard??(()=>!0))(t,e))return this;const o=super.set(t,e);return s?(this.onItemUpdated||(this.onItemUpdated=new q),this.onItemUpdated.trigger({key:t,value:e})):(this.onItemSet||(this.onItemSet=new q),this.onItemSet.trigger({key:t,value:e})),o}delete(t){const e=super.delete(t);return e&&this.onItemDeleted.trigger(t),e}dispose(){this.clear(),this.onItemSet.reset(),this.onItemDeleted.reset(),this.onCleared.reset()}}class Xa extends mt{}const ls=0,$a=1,Za=new L.Vector3,hr=new L.Line3,sn=new L.Plane,ur=new L.Vector3,Ki=new L.Triangle;class ja{constructor(){this.tolerance=-1,this.faces=[],this.newFaces=[],this.assigned=new fr,this.unassigned=new fr,this.vertices=[]}setFromPoints(i){if(i.length>=4){this.makeEmpty();for(let t=0,e=i.length;t<e;t++)this.vertices.push(new qa(i[t]));this.compute()}return this}setFromObject(i){const t=[];return i.updateMatrixWorld(!0),i.traverse(function(e){const s=e.geometry;if(s!==void 0){const n=s.attributes.position;if(n!==void 0)for(let r=0,o=n.count;r<o;r++){const a=new L.Vector3;a.fromBufferAttribute(n,r).applyMatrix4(e.matrixWorld),t.push(a)}}}),this.setFromPoints(t)}containsPoint(i){const t=this.faces;for(let e=0,s=t.length;e<s;e++)if(t[e].distanceToPoint(i)>this.tolerance)return!1;return!0}intersectRay(i,t){const e=this.faces;let s=-1/0,n=1/0;for(let r=0,o=e.length;r<o;r++){const a=e[r],l=a.distanceToPoint(i.origin),h=a.normal.dot(i.direction);if(l>0&&h>=0)return null;const f=h!==0?-l/h:0;if(!(f<=0)&&(h>0?n=Math.min(f,n):s=Math.max(f,s),s>n))return null}return s!==-1/0?i.at(s,t):i.at(n,t),t}intersectsRay(i){return this.intersectRay(i,Za)!==null}makeEmpty(){return this.faces=[],this.vertices=[],this}addVertexToFace(i,t){return i.face=t,t.outside===null?this.assigned.append(i):this.assigned.insertBefore(t.outside,i),t.outside=i,this}removeVertexFromFace(i,t){return i===t.outside&&(i.next!==null&&i.next.face===t?t.outside=i.next:t.outside=null),this.assigned.remove(i),this}removeAllVerticesFromFace(i){if(i.outside!==null){const t=i.outside;let e=i.outside;for(;e.next!==null&&e.next.face===i;)e=e.next;return this.assigned.removeSubList(t,e),t.prev=e.next=null,i.outside=null,t}}deleteFaceVertices(i,t){const e=this.removeAllVerticesFromFace(i);if(e!==void 0)if(t===void 0)this.unassigned.appendChain(e);else{let s=e;do{const n=s.next;t.distanceToPoint(s.point)>this.tolerance?this.addVertexToFace(s,t):this.unassigned.append(s),s=n}while(s!==null)}return this}resolveUnassignedPoints(i){if(this.unassigned.isEmpty()===!1){let t=this.unassigned.first();do{const e=t.next;let s=this.tolerance,n=null;for(let r=0;r<i.length;r++){const o=i[r];if(o.mark===ls){const a=o.distanceToPoint(t.point);if(a>s&&(s=a,n=o),s>1e3*this.tolerance)break}}n!==null&&this.addVertexToFace(t,n),t=e}while(t!==null)}return this}computeExtremes(){const i=new L.Vector3,t=new L.Vector3,e=[],s=[];for(let n=0;n<3;n++)e[n]=s[n]=this.vertices[0];i.copy(this.vertices[0].point),t.copy(this.vertices[0].point);for(let n=0,r=this.vertices.length;n<r;n++){const o=this.vertices[n],a=o.point;for(let l=0;l<3;l++)a.getComponent(l)<i.getComponent(l)&&(i.setComponent(l,a.getComponent(l)),e[l]=o);for(let l=0;l<3;l++)a.getComponent(l)>t.getComponent(l)&&(t.setComponent(l,a.getComponent(l)),s[l]=o)}return this.tolerance=3*Number.EPSILON*(Math.max(Math.abs(i.x),Math.abs(t.x))+Math.max(Math.abs(i.y),Math.abs(t.y))+Math.max(Math.abs(i.z),Math.abs(t.z))),{min:e,max:s}}computeInitialHull(){const i=this.vertices,t=this.computeExtremes(),e=t.min,s=t.max;let n=0,r=0;for(let I=0;I<3;I++){const u=s[I].point.getComponent(I)-e[I].point.getComponent(I);u>n&&(n=u,r=I)}const o=e[r],a=s[r];let l,h;n=0,hr.set(o.point,a.point);for(let I=0,u=this.vertices.length;I<u;I++){const d=i[I];if(d!==o&&d!==a){hr.closestPointToPoint(d.point,!0,ur);const E=ur.distanceToSquared(d.point);E>n&&(n=E,l=d)}}n=-1,sn.setFromCoplanarPoints(o.point,a.point,l.point);for(let I=0,u=this.vertices.length;I<u;I++){const d=i[I];if(d!==o&&d!==a&&d!==l){const E=Math.abs(sn.distanceToPoint(d.point));E>n&&(n=E,h=d)}}const f=[];if(sn.distanceToPoint(h.point)<0){f.push(ee.create(o,a,l),ee.create(h,a,o),ee.create(h,l,a),ee.create(h,o,l));for(let I=0;I<3;I++){const u=(I+1)%3;f[I+1].getEdge(2).setTwin(f[0].getEdge(u)),f[I+1].getEdge(1).setTwin(f[u+1].getEdge(0))}}else{f.push(ee.create(o,l,a),ee.create(h,o,a),ee.create(h,a,l),ee.create(h,l,o));for(let I=0;I<3;I++){const u=(I+1)%3;f[I+1].getEdge(2).setTwin(f[0].getEdge((3-I)%3)),f[I+1].getEdge(0).setTwin(f[u+1].getEdge(1))}}for(let I=0;I<4;I++)this.faces.push(f[I]);for(let I=0,u=i.length;I<u;I++){const d=i[I];if(d!==o&&d!==a&&d!==l&&d!==h){n=this.tolerance;let E=null;for(let T=0;T<4;T++){const p=this.faces[T].distanceToPoint(d.point);p>n&&(n=p,E=this.faces[T])}E!==null&&this.addVertexToFace(d,E)}}return this}reindexFaces(){const i=[];for(let t=0;t<this.faces.length;t++){const e=this.faces[t];e.mark===ls&&i.push(e)}return this.faces=i,this}nextVertexToAdd(){if(this.assigned.isEmpty()===!1){let i,t=0;const e=this.assigned.first().face;let s=e.outside;do{const n=e.distanceToPoint(s.point);n>t&&(t=n,i=s),s=s.next}while(s!==null&&s.face===e);return i}}computeHorizon(i,t,e,s){this.deleteFaceVertices(e),e.mark=$a;let n;t===null?n=t=e.getEdge(0):n=t.next;do{const r=n.twin,o=r.face;o.mark===ls&&(o.distanceToPoint(i)>this.tolerance?this.computeHorizon(i,r,o,s):s.push(n)),n=n.next}while(n!==t);return this}addAdjoiningFace(i,t){const e=ee.create(i,t.tail(),t.head());return this.faces.push(e),e.getEdge(-1).setTwin(t.twin),e.getEdge(0)}addNewFaces(i,t){this.newFaces=[];let e=null,s=null;for(let n=0;n<t.length;n++){const r=t[n],o=this.addAdjoiningFace(i,r);e===null?e=o:o.next.setTwin(s),this.newFaces.push(o.face),s=o}return e.next.setTwin(s),this}addVertexToHull(i){const t=[];return this.unassigned.clear(),this.removeVertexFromFace(i,i.face),this.computeHorizon(i.point,null,i.face,t),this.addNewFaces(i,t),this.resolveUnassignedPoints(this.newFaces),this}cleanup(){return this.assigned.clear(),this.unassigned.clear(),this.newFaces=[],this}compute(){let i;for(this.computeInitialHull();(i=this.nextVertexToAdd())!==void 0;)this.addVertexToHull(i);return this.reindexFaces(),this.cleanup(),this}}class ee{constructor(){this.normal=new L.Vector3,this.midpoint=new L.Vector3,this.area=0,this.constant=0,this.outside=null,this.mark=ls,this.edge=null}static create(i,t,e){const s=new ee,n=new nn(i,s),r=new nn(t,s),o=new nn(e,s);return n.next=o.prev=r,r.next=n.prev=o,o.next=r.prev=n,s.edge=n,s.compute()}getEdge(i){let t=this.edge;for(;i>0;)t=t.next,i--;for(;i<0;)t=t.prev,i++;return t}compute(){const i=this.edge.tail(),t=this.edge.head(),e=this.edge.next.head();return Ki.set(i.point,t.point,e.point),Ki.getNormal(this.normal),Ki.getMidpoint(this.midpoint),this.area=Ki.getArea(),this.constant=this.normal.dot(this.midpoint),this}distanceToPoint(i){return this.normal.dot(i)-this.constant}}class nn{constructor(i,t){this.vertex=i,this.prev=null,this.next=null,this.twin=null,this.face=t}head(){return this.vertex}tail(){return this.prev?this.prev.vertex:null}length(){const i=this.head(),t=this.tail();return t!==null?t.point.distanceTo(i.point):-1}lengthSquared(){const i=this.head(),t=this.tail();return t!==null?t.point.distanceToSquared(i.point):-1}setTwin(i){return this.twin=i,i.twin=this,this}}class qa{constructor(i){this.point=i,this.prev=null,this.next=null,this.face=null}}class fr{constructor(){this.head=null,this.tail=null}first(){return this.head}last(){return this.tail}clear(){return this.head=this.tail=null,this}insertBefore(i,t){return t.prev=i.prev,t.next=i,t.prev===null?this.head=t:t.prev.next=t,i.prev=t,this}insertAfter(i,t){return t.prev=i,t.next=i.next,t.next===null?this.tail=t:t.next.prev=t,i.next=t,this}append(i){return this.head===null?this.head=i:this.tail.next=i,i.prev=this.tail,i.next=null,this.tail=i,this}appendChain(i){for(this.head===null?this.head=i:this.tail.next=i,i.prev=this.tail;i.next!==null;)i=i.next;return this.tail=i,this}remove(i){return i.prev===null?this.head=i.next:i.prev.next=i.next,i.next===null?this.tail=i.prev:i.next.prev=i.prev,this}removeSubList(i,t){return i.prev===null?this.head=t.next:i.prev.next=t.next,t.next===null?this.tail=i.prev:t.next.prev=i.prev,this}isEmpty(){return this.head===null}}const Rn=[2,2,1],gn=[1,0,0];function ce(c,i){return c*3+i}function Qa(c){const i=c.elements;let t=0;for(let e=0;e<9;e++)t+=i[e]*i[e];return Math.sqrt(t)}function Ka(c){const i=c.elements;let t=0;for(let e=0;e<3;e++){const s=i[ce(Rn[e],gn[e])];t+=2*s*s}return Math.sqrt(t)}function Ja(c,i){let t=0,e=1;const s=c.elements;for(let l=0;l<3;l++){const h=Math.abs(s[ce(Rn[l],gn[l])]);h>t&&(t=h,e=l)}let n=1,r=0;const o=gn[e],a=Rn[e];if(Math.abs(s[ce(a,o)])>Number.EPSILON){const l=s[ce(a,a)],h=s[ce(o,o)],f=s[ce(a,o)],I=(l-h)/2/f;let u;I<0?u=-1/(-I+Math.sqrt(1+I*I)):u=1/(I+Math.sqrt(1+I*I)),n=1/Math.sqrt(1+u*u),r=u*n}return i.identity(),i.elements[ce(o,o)]=n,i.elements[ce(a,a)]=n,i.elements[ce(a,o)]=r,i.elements[ce(o,a)]=-r,i}function tc(c,i){let t=0,e=0;const s=10;i.unitary.identity(),i.diagonal.copy(c);const n=i.unitary,r=i.diagonal,o=new b.Matrix3,a=new b.Matrix3,l=Number.EPSILON*Qa(r);for(;e<s&&Ka(r)>l;)Ja(r,o),a.copy(o).transpose(),r.multiply(o),r.premultiply(a),n.multiply(o),++t>2&&(e++,t=0);return i}function kr(c){const i=[];for(let ot=0;ot<c.length-2;ot+=3){const ft=c[ot],ut=c[ot+1],Ct=c[ot+2];i.push(new b.Vector3(ft,ut,Ct))}const t=new ja;t.setFromPoints(i);const e={unitary:new b.Matrix3,diagonal:new b.Matrix3},s=t.faces,n=[],r=[];for(let ot=0,ft=s.length;ot<ft;ot++){const ut=s[ot];let Ct=ut.edge;n.length=0;do n.push(Ct),Ct=Ct.next;while(Ct!==ut.edge);const Gt=n.length-2;for(let wt=1,A=Gt;wt<=A;wt++){const $=n[0].vertex,H=n[wt+0].vertex,M=n[wt+1].vertex;r.push($.point.x,$.point.y,$.point.z),r.push(H.point.x,H.point.y,H.point.z),r.push(M.point.x,M.point.y,M.point.z)}}const o=new b.Vector3,a=new b.Vector3,l=new b.Vector3,h=new b.Vector3,f=new b.Vector3,I=new b.Vector3,u=new b.Vector3,d=new b.Vector3;let E=0,T=0,p=0,m=0,F=0,R=0,S=0;for(let ot=0,ft=r.length;ot<ft;ot+=9){o.fromArray(r,ot),a.fromArray(r,ot+3),l.fromArray(r,ot+6),u.set(0,0,0),u.add(o).add(a).add(l).divideScalar(3),h.subVectors(a,o),f.subVectors(l,o);const ut=I.crossVectors(h,f).length()/2;d.add(I.copy(u).multiplyScalar(ut)),E+=ut,T+=(9*u.x*u.x+o.x*o.x+a.x*a.x+l.x*l.x)*(ut/12),p+=(9*u.x*u.y+o.x*o.y+a.x*a.y+l.x*l.y)*(ut/12),m+=(9*u.x*u.z+o.x*o.z+a.x*a.z+l.x*l.z)*(ut/12),F+=(9*u.y*u.y+o.y*o.y+a.y*a.y+l.y*l.y)*(ut/12),R+=(9*u.y*u.z+o.y*o.z+a.y*a.z+l.y*l.z)*(ut/12),S+=(9*u.z*u.z+o.z*o.z+a.z*a.z+l.z*l.z)*(ut/12)}d.divideScalar(E),T/=E,p/=E,m/=E,F/=E,R/=E,S/=E,T-=d.x*d.x,p-=d.x*d.y,m-=d.x*d.z,F-=d.y*d.y,R-=d.y*d.z,S-=d.z*d.z;const O=new b.Matrix3;O.elements[0]=T,O.elements[1]=p,O.elements[2]=m,O.elements[3]=p,O.elements[4]=F,O.elements[5]=R,O.elements[6]=m,O.elements[7]=R,O.elements[8]=S,tc(O,e);const y=e.unitary,w=new b.Vector3,P=new b.Vector3,v=new b.Vector3;y.extractBasis(w,P,v);let G=-1/0,N=-1/0,D=-1/0,g=1/0,U=1/0,Q=1/0;for(let ot=0,ft=i.length;ot<ft;ot++){const ut=i[ot];G=Math.max(w.dot(ut),G),N=Math.max(P.dot(ut),N),D=Math.max(v.dot(ut),D),g=Math.min(w.dot(ut),g),U=Math.min(P.dot(ut),U),Q=Math.min(v.dot(ut),Q)}w.multiplyScalar(.5*(g+G)),P.multiplyScalar(.5*(U+N)),v.multiplyScalar(.5*(Q+D));const z=new b.Vector3,et=new b.Vector3,X=new b.Matrix3;z.add(w).add(P).add(v),et.x=G-g,et.y=N-U,et.z=D-Q,et.multiplyScalar(.5),X.copy(y);const{x:nt,y:Y,z:B}=et,rt=new b.Matrix4;rt.makeScale(nt*2,Y*2,B*2);const it=new b.Matrix4;it.makeTranslation(-nt,-Y,-B);const tt=new b.Matrix4;tt.makeTranslation(z.x,z.y,z.z);const Ft=new b.Matrix4;Ft.setFromMatrix3(X);const Nt=new b.Matrix4;return Nt.multiply(tt),Nt.multiply(Ft),Nt.multiply(it),Nt.multiply(rt),{center:z,halfSizes:et,rotation:X,transformation:Nt}}function ec(c,i,t){const e=[c[0]-i[0],c[1]-i[1],c[2]-i[2]];return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]>0}class An{static isTransparent(i){return i.transparent&&i.opacity<1}}const Lt=class Lt{static create(){const i=Math.random()*4294967295|0,t=Math.random()*4294967295|0,e=Math.random()*4294967295|0,s=Math.random()*4294967295|0;return`${Lt._lut[i&255]+Lt._lut[i>>8&255]+Lt._lut[i>>16&255]+Lt._lut[i>>24&255]}-${Lt._lut[t&255]}${Lt._lut[t>>8&255]}-${Lt._lut[t>>16&15|64]}${Lt._lut[t>>24&255]}-${Lt._lut[e&63|128]}${Lt._lut[e>>8&255]}-${Lt._lut[e>>16&255]}${Lt._lut[e>>24&255]}${Lt._lut[s&255]}${Lt._lut[s>>8&255]}${Lt._lut[s>>16&255]}${Lt._lut[s>>24&255]}`.toLowerCase()}static validate(i){if(!Lt._pattern.test(i))throw new Error(`${i} is not a valid UUID v4.
2
2
 
3
3
  - If you're the tool creator, you can take one from https://www.uuidgenerator.net/.
4
4
 
5
- - If you're using a platform tool, verify the uuid isn't misspelled or contact the tool creator.`)}};C(Lt,"_pattern",/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/),C(Lt,"_lut",["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"]);let Kt=Lt;class ic extends mt{constructor(t,e){super(t);C(this,"onDisposed",new q);C(this,"onVertexFound",new q);C(this,"onVertexLost",new q);C(this,"onEnabled",new q);C(this,"components");C(this,"workingPlane",null);C(this,"_pickedPoint",null);C(this,"_config");C(this,"_enabled",!1);this.components=t,this.config={snapDistance:.25,showOnlyVertex:!1,...e},this.enabled=!1}set enabled(t){this._enabled=t,t||(this._pickedPoint=null),this.onEnabled.trigger(t)}get enabled(){return this._enabled}set config(t){this._config={...this._config,...t}}get config(){return this._config}dispose(){this.onVertexFound.reset(),this.onVertexLost.reset(),this.components=null,this.onDisposed.trigger(),this.onDisposed.reset()}get(t){if(!this.enabled)return this._pickedPoint;const n=this.components.get(ve).get(t).castRay();if(!n)return this._pickedPoint!==null&&(this.onVertexLost.trigger(),this._pickedPoint=null),this._pickedPoint;const r=this.getClosestVertex(n);return r?(this.workingPlane?Math.abs(this.workingPlane.distanceToPoint(r))<.001:!0)?((this._pickedPoint===null||!this._pickedPoint.equals(r))&&(this._pickedPoint=r.clone(),this.onVertexFound.trigger(this._pickedPoint)),this._pickedPoint):(this._pickedPoint=null,this._pickedPoint):(this._pickedPoint!==null&&(this.onVertexLost.trigger(),this._pickedPoint=null),this._pickedPoint)}getClosestVertex(t){let e=new b.Vector3,s=!1,n=Number.MAX_SAFE_INTEGER;const r=this.getVertices(t);if(r===null)return null;for(const o of r){if(!o)continue;const a=t.point.distanceTo(o);a>n||a>this._config.snapDistance||(s=!0,e=o,n=t.point.distanceTo(o))}return s?e:this.config.showOnlyVertex?null:t.point}getVertices(t){const e=t.object;if(!t.face||!e)return null;const s=e.geometry,n=new b.Matrix4,{instanceId:r}=t,o=r!==void 0,a=e instanceof b.InstancedMesh;return a&&o&&e.getMatrixAt(r,n),[this.getVertex(t.face.a,s),this.getVertex(t.face.b,s),this.getVertex(t.face.c,s)].map(l=>(l&&(a&&o&&l.applyMatrix4(n),l.applyMatrix4(e.matrixWorld)),l))}getVertex(t,e){if(t===void 0)return null;const s=e.attributes.position;return new b.Vector3(s.getX(t),s.getY(t),s.getZ(t))}}const Rs=class Rs{constructor(){C(this,"onDisposed",new q);C(this,"list",new Map);C(this,"enabled",!1);C(this,"_clock");C(this,"onInit",new q);C(this,"update",()=>{if(!this.enabled)return;const i=this._clock.getDelta();for(const[t,e]of this.list)e.enabled&&e.isUpdateable()&&e.update(i);requestAnimationFrame(this.update)});this._clock=new b.Clock,Rs.setupBVH()}add(i,t){if(this.list.has(i))throw new Error("You're trying to add a component that already exists in the components instance. Use Components.get() instead.");Kt.validate(i),this.list.set(i,t)}get(i){const t=i.uuid;if(!this.list.has(t)){const e=new i(this);return this.list.has(t)||this.add(t,e),e}return this.list.get(t)}init(){this.enabled=!0,this._clock.start(),this.update(),this.onInit.trigger()}dispose(){this.enabled=!1;for(const[i,t]of this.list)t.enabled=!1,t.isDisposeable()&&t.dispose();this._clock.stop(),this.onDisposed.trigger(),this.onDisposed.reset()}static setupBVH(){b.BufferGeometry.prototype.computeBoundsTree=Ha,b.BufferGeometry.prototype.disposeBoundsTree=Wa,b.Mesh.prototype.raycast=ka}};C(Rs,"release","2.3.12");let Li=Rs;class Hr extends Vs{constructor(){super(...arguments);C(this,"meshes",new Set);C(this,"onAfterUpdate",new q);C(this,"onBeforeUpdate",new q);C(this,"onDisposed",new q);C(this,"isDisposing",!1);C(this,"enabled",!0);C(this,"uuid",Kt.create());C(this,"name");C(this,"_scene");C(this,"_camera");C(this,"_renderer",null)}get scene(){if(!this._scene)throw new Error("No scene initialized!");return this._scene}set scene(t){this._scene=t,t.worlds.set(this.uuid,this),t.currentWorld=this,t.onWorldChanged.trigger({world:this,action:"added"})}get camera(){if(!this._camera)throw new Error("No camera initialized!");return this._camera}set camera(t){this._camera=t,t.worlds.set(this.uuid,this),t.currentWorld=this,t.onWorldChanged.trigger({world:this,action:"added"})}get renderer(){return this._renderer}set renderer(t){this._renderer=t,t&&(t.worlds.set(this.uuid,this),t.currentWorld=this,t.onWorldChanged.trigger({world:this,action:"added"}))}update(t){this.enabled&&(!this._scene||!this._camera||(this.scene.currentWorld=this,this.camera.currentWorld=this,this.renderer&&(this.renderer.currentWorld=this),this.onBeforeUpdate.trigger(),this.scene.isUpdateable()&&this.scene.update(t),this.camera.isUpdateable()&&this.camera.update(t),this.renderer&&this.renderer.update(t),this.onAfterUpdate.trigger()))}dispose(t=!0){if(this.enabled=!1,this.isDisposing=!0,this.scene.onWorldChanged.trigger({world:this,action:"removed"}),this.camera.onWorldChanged.trigger({world:this,action:"removed"}),this.renderer&&this.renderer.onWorldChanged.trigger({world:this,action:"removed"}),t){const s=this.components.get(Ce);this.scene.dispose(),this.camera.isDisposeable()&&this.camera.dispose(),this.renderer&&this.renderer.dispose();for(const n of this.meshes)s.destroy(n);this.meshes.clear()}this._scene=null,this._camera=null,this._renderer=null,this.components.get(Pi).list.delete(this.uuid),this.onDisposed.trigger(),this.onDisposed.reset()}}class ye{constructor(i,t,e,s){C(this,"_component");C(this,"name");C(this,"uuid");this._component=i,this.name=e,this.uuid=s??Kt.create(),t.get(Ne).list.set(this.uuid,this)}get controls(){const i={};for(const t in this._config){const e=this._config[t];i[t]=this.copyEntry(e)}return i}copyEntry(i){if(i.type==="Boolean"){const t=i;return{type:t.type,value:t.value}}if(i.type==="Color"){const t=i;return{type:t.type,value:t.value.clone()}}if(i.type==="Text"){const t=i;return{type:t.type,value:t.value}}if(i.type==="Number"){const t=i;return{type:t.type,value:t.value,min:t.min,max:t.max,interpolable:t.interpolable}}if(i.type==="Select"){const t=i;return{type:t.type,value:t.value,multiple:t.multiple,options:new Set(t.options)}}if(i.type==="Vector3"){const t=i;return{type:t.type,value:t.value.clone()}}if(i.type==="TextSet"){const t=i;return{type:t.type,value:new Set(t.value)}}if(i.type==="None"){const t=i;return{type:t.type,value:t.value}}throw new Error("Invalid entry!")}}const gs=class gs extends mt{constructor(t){super(t);C(this,"list",new Qt);C(this,"enabled",!0);t.add(gs.uuid,this)}};C(gs,"uuid","b8c764e0-6b24-4e77-9a32-35fa728ee5b4");let Ne=gs;class sc{constructor(i,t){C(this,"_list");C(this,"_scene");this._list=i,this._scene=t}get color(){return this._list.directionalLight.color.value}set color(i){this._list.directionalLight.color.value=i;for(const[,t]of this._scene.directionalLights)t.color.copy(i)}get intensity(){return this._list.directionalLight.intensity.value}set intensity(i){this._list.directionalLight.intensity.value=i;for(const[,t]of this._scene.directionalLights)t.intensity=i}get position(){return this._list.directionalLight.position.value.clone()}set position(i){this._list.directionalLight.position.value=i;for(const[,t]of this._scene.directionalLights)t.position.copy(i)}}class nc{constructor(i,t){C(this,"_list");C(this,"_scene");this._list=i,this._scene=t}get color(){return this._list.ambientLight.color.value}set color(i){this._list.ambientLight.color.value=i;for(const[,t]of this._scene.ambientLights)t.color.copy(i)}get intensity(){return this._list.ambientLight.intensity.value}set intensity(i){this._list.ambientLight.intensity.value=i;for(const[,t]of this._scene.ambientLights)t.intensity=i}}class Wr extends ye{constructor(){super(...arguments);C(this,"_config",{backgroundColor:{value:new b.Color,type:"Color"},ambientLight:{color:{type:"Color",value:new b.Color},intensity:{type:"Number",interpolable:!0,min:0,max:10,value:2}},directionalLight:{color:{type:"Color",value:new b.Color},intensity:{type:"Number",interpolable:!0,min:0,max:10,value:2},position:{type:"Vector3",value:new b.Vector3}}});C(this,"ambientLight",new nc(this._config,this._component));C(this,"directionalLight",new sc(this._config,this._component))}get backgroundColor(){return this._config.backgroundColor.value}set backgroundColor(t){this._config.backgroundColor.value=t,this._component.three.background=t}}class Xr extends zr{constructor(t){super(t);C(this,"onSetup",new q);C(this,"isSetup",!1);C(this,"three");C(this,"config",new Wr(this,this.components,"Scene"));C(this,"_defaultConfig",{backgroundColor:new b.Color(2107698),directionalLight:{color:new b.Color("white"),intensity:1.5,position:new b.Vector3(5,10,3)},ambientLight:{color:new b.Color("white"),intensity:1}});this.three=new b.Scene,this.three.background=new b.Color(2107698)}setup(t){const e={...this._defaultConfig,...t};this.config.backgroundColor=e.backgroundColor;const s=e.ambientLight;this.config.ambientLight.color=s.color,this.config.ambientLight.intensity=s.intensity;const n=e.directionalLight;this.config.directionalLight.color=n.color,this.config.directionalLight.intensity=n.intensity,this.config.directionalLight.position=n.position,this.deleteAllLights();const{color:r,intensity:o}=this.config.directionalLight,a=new b.DirectionalLight(r,o);a.position.copy(n.position);const{color:l,intensity:h}=this.config.directionalLight,f=new b.AmbientLight(l,h);this.three.add(a,f),this.directionalLights.set(a.uuid,a),this.ambientLights.set(f.uuid,f),this.isSetup=!0,this.onSetup.trigger()}dispose(){super.dispose(),this.components.get(Ne).list.delete(this.config.uuid)}}class rc extends Gr{constructor(t,e,s){super(t);C(this,"enabled",!0);C(this,"container");C(this,"three");C(this,"_canvas");C(this,"_parameters");C(this,"_resizeObserver",null);C(this,"onContainerUpdated",new q);C(this,"_resizing",!1);C(this,"resize",t=>{if(this._resizing)return;this._resizing=!0,this.onContainerUpdated.trigger();const e=t?t.x:this.container.clientWidth,s=t?t.y:this.container.clientHeight;this.three.setSize(e,s),this.onResize.trigger(new b.Vector2(e,s)),this._resizing=!1});C(this,"resizeEvent",()=>{this.resize()});C(this,"onContextLost",t=>{t.preventDefault(),this.enabled=!1});C(this,"onContextBack",()=>{this.three.setRenderTarget(null),this.three.dispose(),this.three=new b.WebGLRenderer({canvas:this._canvas,antialias:!0,alpha:!0,...this._parameters}),this.enabled=!0});this.container=e,this._parameters=s,this.three=new b.WebGLRenderer({antialias:!0,alpha:!0,...s}),this.three.setPixelRatio(Math.min(window.devicePixelRatio,2)),this.setupRenderer(),this.setupEvents(!0),this.resize(),this._canvas=this.three.domElement;const n=this.three.getContext(),{canvas:r}=n;r.addEventListener("webglcontextlost",this.onContextLost,!1),r.addEventListener("webglcontextrestored",this.onContextBack,!1)}update(){if(!this.enabled||!this.currentWorld)return;this.onBeforeUpdate.trigger(this);const t=this.currentWorld.scene.three,e=this.currentWorld.camera.three;this.three.render(t,e),this.onAfterUpdate.trigger(this)}dispose(){this.enabled=!1,this.setupEvents(!1),this.three.domElement.remove(),this.three.forceContextLoss(),this.three.dispose(),this.onResize.reset(),this.onAfterUpdate.reset(),this.onBeforeUpdate.reset(),this.onDisposed.trigger(),this.onDisposed.reset()}getSize(){return new b.Vector2(this.three.domElement.clientWidth,this.three.domElement.clientHeight)}setupEvents(t){const e=this.three.domElement.parentElement;if(!e)throw new Error("This renderer needs to have an HTML container!");this._resizeObserver&&(this._resizeObserver.disconnect(),this._resizeObserver=null),window.removeEventListener("resize",this.resizeEvent),t&&(this._resizeObserver=new ResizeObserver(this.resizeEvent),this._resizeObserver.observe(e),window.addEventListener("resize",this.resizeEvent))}setupRenderer(){this.three.localClippingEnabled=!0,this.container&&this.container.appendChild(this.three.domElement),this.onContainerUpdated.trigger()}}/*!
5
+ - If you're using a platform tool, verify the uuid isn't misspelled or contact the tool creator.`)}};C(Lt,"_pattern",/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/),C(Lt,"_lut",["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"]);let Kt=Lt;class ic extends mt{constructor(t,e){super(t);C(this,"onDisposed",new q);C(this,"onVertexFound",new q);C(this,"onVertexLost",new q);C(this,"onEnabled",new q);C(this,"components");C(this,"workingPlane",null);C(this,"_pickedPoint",null);C(this,"_config");C(this,"_enabled",!1);this.components=t,this.config={snapDistance:.25,showOnlyVertex:!1,...e},this.enabled=!1}set enabled(t){this._enabled=t,t||(this._pickedPoint=null),this.onEnabled.trigger(t)}get enabled(){return this._enabled}set config(t){this._config={...this._config,...t}}get config(){return this._config}dispose(){this.onVertexFound.reset(),this.onVertexLost.reset(),this.components=null,this.onDisposed.trigger(),this.onDisposed.reset()}get(t){if(!this.enabled)return this._pickedPoint;const n=this.components.get(ve).get(t).castRay();if(!n)return this._pickedPoint!==null&&(this.onVertexLost.trigger(),this._pickedPoint=null),this._pickedPoint;const r=this.getClosestVertex(n);return r?(this.workingPlane?Math.abs(this.workingPlane.distanceToPoint(r))<.001:!0)?((this._pickedPoint===null||!this._pickedPoint.equals(r))&&(this._pickedPoint=r.clone(),this.onVertexFound.trigger(this._pickedPoint)),this._pickedPoint):(this._pickedPoint=null,this._pickedPoint):(this._pickedPoint!==null&&(this.onVertexLost.trigger(),this._pickedPoint=null),this._pickedPoint)}getClosestVertex(t){let e=new b.Vector3,s=!1,n=Number.MAX_SAFE_INTEGER;const r=this.getVertices(t);if(r===null)return null;for(const o of r){if(!o)continue;const a=t.point.distanceTo(o);a>n||a>this._config.snapDistance||(s=!0,e=o,n=t.point.distanceTo(o))}return s?e:this.config.showOnlyVertex?null:t.point}getVertices(t){const e=t.object;if(!t.face||!e)return null;const s=e.geometry,n=new b.Matrix4,{instanceId:r}=t,o=r!==void 0,a=e instanceof b.InstancedMesh;return a&&o&&e.getMatrixAt(r,n),[this.getVertex(t.face.a,s),this.getVertex(t.face.b,s),this.getVertex(t.face.c,s)].map(l=>(l&&(a&&o&&l.applyMatrix4(n),l.applyMatrix4(e.matrixWorld)),l))}getVertex(t,e){if(t===void 0)return null;const s=e.attributes.position;return new b.Vector3(s.getX(t),s.getY(t),s.getZ(t))}}const Rs=class Rs{constructor(){C(this,"onDisposed",new q);C(this,"list",new Map);C(this,"enabled",!1);C(this,"_clock");C(this,"onInit",new q);C(this,"update",()=>{if(!this.enabled)return;const i=this._clock.getDelta();for(const[t,e]of this.list)e.enabled&&e.isUpdateable()&&e.update(i);requestAnimationFrame(this.update)});this._clock=new b.Clock,Rs.setupBVH()}add(i,t){if(this.list.has(i))throw new Error("You're trying to add a component that already exists in the components instance. Use Components.get() instead.");Kt.validate(i),this.list.set(i,t)}get(i){const t=i.uuid;if(!this.list.has(t)){const e=new i(this);return this.list.has(t)||this.add(t,e),e}return this.list.get(t)}init(){this.enabled=!0,this._clock.start(),this.update(),this.onInit.trigger()}dispose(){this.enabled=!1;for(const[i,t]of this.list)t.enabled=!1,t.isDisposeable()&&t.dispose();this._clock.stop(),this.onDisposed.trigger(),this.onDisposed.reset()}static setupBVH(){b.BufferGeometry.prototype.computeBoundsTree=Ha,b.BufferGeometry.prototype.disposeBoundsTree=Wa,b.Mesh.prototype.raycast=ka}};C(Rs,"release","2.3.13");let Li=Rs;class Hr extends Vs{constructor(){super(...arguments);C(this,"meshes",new Set);C(this,"onAfterUpdate",new q);C(this,"onBeforeUpdate",new q);C(this,"onDisposed",new q);C(this,"isDisposing",!1);C(this,"enabled",!0);C(this,"uuid",Kt.create());C(this,"name");C(this,"_scene");C(this,"_camera");C(this,"_renderer",null)}get scene(){if(!this._scene)throw new Error("No scene initialized!");return this._scene}set scene(t){this._scene=t,t.worlds.set(this.uuid,this),t.currentWorld=this,t.onWorldChanged.trigger({world:this,action:"added"})}get camera(){if(!this._camera)throw new Error("No camera initialized!");return this._camera}set camera(t){this._camera=t,t.worlds.set(this.uuid,this),t.currentWorld=this,t.onWorldChanged.trigger({world:this,action:"added"})}get renderer(){return this._renderer}set renderer(t){this._renderer=t,t&&(t.worlds.set(this.uuid,this),t.currentWorld=this,t.onWorldChanged.trigger({world:this,action:"added"}))}update(t){this.enabled&&(!this._scene||!this._camera||(this.scene.currentWorld=this,this.camera.currentWorld=this,this.renderer&&(this.renderer.currentWorld=this),this.onBeforeUpdate.trigger(),this.scene.isUpdateable()&&this.scene.update(t),this.camera.isUpdateable()&&this.camera.update(t),this.renderer&&this.renderer.update(t),this.onAfterUpdate.trigger()))}dispose(t=!0){if(this.enabled=!1,this.isDisposing=!0,this.scene.onWorldChanged.trigger({world:this,action:"removed"}),this.camera.onWorldChanged.trigger({world:this,action:"removed"}),this.renderer&&this.renderer.onWorldChanged.trigger({world:this,action:"removed"}),t){const s=this.components.get(Ce);this.scene.dispose(),this.camera.isDisposeable()&&this.camera.dispose(),this.renderer&&this.renderer.dispose();for(const n of this.meshes)s.destroy(n);this.meshes.clear()}this._scene=null,this._camera=null,this._renderer=null,this.components.get(Pi).list.delete(this.uuid),this.onDisposed.trigger(),this.onDisposed.reset()}}class ye{constructor(i,t,e,s){C(this,"_component");C(this,"name");C(this,"uuid");this._component=i,this.name=e,this.uuid=s??Kt.create(),t.get(Ne).list.set(this.uuid,this)}get controls(){const i={};for(const t in this._config){const e=this._config[t];i[t]=this.copyEntry(e)}return i}copyEntry(i){if(i.type==="Boolean"){const t=i;return{type:t.type,value:t.value}}if(i.type==="Color"){const t=i;return{type:t.type,value:t.value.clone()}}if(i.type==="Text"){const t=i;return{type:t.type,value:t.value}}if(i.type==="Number"){const t=i;return{type:t.type,value:t.value,min:t.min,max:t.max,interpolable:t.interpolable}}if(i.type==="Select"){const t=i;return{type:t.type,value:t.value,multiple:t.multiple,options:new Set(t.options)}}if(i.type==="Vector3"){const t=i;return{type:t.type,value:t.value.clone()}}if(i.type==="TextSet"){const t=i;return{type:t.type,value:new Set(t.value)}}if(i.type==="None"){const t=i;return{type:t.type,value:t.value}}throw new Error("Invalid entry!")}}const gs=class gs extends mt{constructor(t){super(t);C(this,"list",new Qt);C(this,"enabled",!0);t.add(gs.uuid,this)}};C(gs,"uuid","b8c764e0-6b24-4e77-9a32-35fa728ee5b4");let Ne=gs;class sc{constructor(i,t){C(this,"_list");C(this,"_scene");this._list=i,this._scene=t}get color(){return this._list.directionalLight.color.value}set color(i){this._list.directionalLight.color.value=i;for(const[,t]of this._scene.directionalLights)t.color.copy(i)}get intensity(){return this._list.directionalLight.intensity.value}set intensity(i){this._list.directionalLight.intensity.value=i;for(const[,t]of this._scene.directionalLights)t.intensity=i}get position(){return this._list.directionalLight.position.value.clone()}set position(i){this._list.directionalLight.position.value=i;for(const[,t]of this._scene.directionalLights)t.position.copy(i)}}class nc{constructor(i,t){C(this,"_list");C(this,"_scene");this._list=i,this._scene=t}get color(){return this._list.ambientLight.color.value}set color(i){this._list.ambientLight.color.value=i;for(const[,t]of this._scene.ambientLights)t.color.copy(i)}get intensity(){return this._list.ambientLight.intensity.value}set intensity(i){this._list.ambientLight.intensity.value=i;for(const[,t]of this._scene.ambientLights)t.intensity=i}}class Wr extends ye{constructor(){super(...arguments);C(this,"_config",{backgroundColor:{value:new b.Color,type:"Color"},ambientLight:{color:{type:"Color",value:new b.Color},intensity:{type:"Number",interpolable:!0,min:0,max:10,value:2}},directionalLight:{color:{type:"Color",value:new b.Color},intensity:{type:"Number",interpolable:!0,min:0,max:10,value:2},position:{type:"Vector3",value:new b.Vector3}}});C(this,"ambientLight",new nc(this._config,this._component));C(this,"directionalLight",new sc(this._config,this._component))}get backgroundColor(){return this._config.backgroundColor.value}set backgroundColor(t){this._config.backgroundColor.value=t,this._component.three.background=t}}class Xr extends zr{constructor(t){super(t);C(this,"onSetup",new q);C(this,"isSetup",!1);C(this,"three");C(this,"config",new Wr(this,this.components,"Scene"));C(this,"_defaultConfig",{backgroundColor:new b.Color(2107698),directionalLight:{color:new b.Color("white"),intensity:1.5,position:new b.Vector3(5,10,3)},ambientLight:{color:new b.Color("white"),intensity:1}});this.three=new b.Scene,this.three.background=new b.Color(2107698)}setup(t){const e={...this._defaultConfig,...t};this.config.backgroundColor=e.backgroundColor;const s=e.ambientLight;this.config.ambientLight.color=s.color,this.config.ambientLight.intensity=s.intensity;const n=e.directionalLight;this.config.directionalLight.color=n.color,this.config.directionalLight.intensity=n.intensity,this.config.directionalLight.position=n.position,this.deleteAllLights();const{color:r,intensity:o}=this.config.directionalLight,a=new b.DirectionalLight(r,o);a.position.copy(n.position);const{color:l,intensity:h}=this.config.directionalLight,f=new b.AmbientLight(l,h);this.three.add(a,f),this.directionalLights.set(a.uuid,a),this.ambientLights.set(f.uuid,f),this.isSetup=!0,this.onSetup.trigger()}dispose(){super.dispose(),this.components.get(Ne).list.delete(this.config.uuid)}}class rc extends Gr{constructor(t,e,s){super(t);C(this,"enabled",!0);C(this,"container");C(this,"three");C(this,"_canvas");C(this,"_parameters");C(this,"_resizeObserver",null);C(this,"onContainerUpdated",new q);C(this,"_resizing",!1);C(this,"resize",t=>{if(this._resizing)return;this._resizing=!0,this.onContainerUpdated.trigger();const e=t?t.x:this.container.clientWidth,s=t?t.y:this.container.clientHeight;this.three.setSize(e,s),this.onResize.trigger(new b.Vector2(e,s)),this._resizing=!1});C(this,"resizeEvent",()=>{this.resize()});C(this,"onContextLost",t=>{t.preventDefault(),this.enabled=!1});C(this,"onContextBack",()=>{this.three.setRenderTarget(null),this.three.dispose(),this.three=new b.WebGLRenderer({canvas:this._canvas,antialias:!0,alpha:!0,...this._parameters}),this.enabled=!0});this.container=e,this._parameters=s,this.three=new b.WebGLRenderer({antialias:!0,alpha:!0,...s}),this.three.setPixelRatio(Math.min(window.devicePixelRatio,2)),this.setupRenderer(),this.setupEvents(!0),this.resize(),this._canvas=this.three.domElement;const n=this.three.getContext(),{canvas:r}=n;r.addEventListener("webglcontextlost",this.onContextLost,!1),r.addEventListener("webglcontextrestored",this.onContextBack,!1)}update(){if(!this.enabled||!this.currentWorld)return;this.onBeforeUpdate.trigger(this);const t=this.currentWorld.scene.three,e=this.currentWorld.camera.three;this.three.render(t,e),this.onAfterUpdate.trigger(this)}dispose(){this.enabled=!1,this.setupEvents(!1),this.three.domElement.remove(),this.three.forceContextLoss(),this.three.dispose(),this.onResize.reset(),this.onAfterUpdate.reset(),this.onBeforeUpdate.reset(),this.onDisposed.trigger(),this.onDisposed.reset()}getSize(){return new b.Vector2(this.three.domElement.clientWidth,this.three.domElement.clientHeight)}setupEvents(t){const e=this.three.domElement.parentElement;if(!e)throw new Error("This renderer needs to have an HTML container!");this._resizeObserver&&(this._resizeObserver.disconnect(),this._resizeObserver=null),window.removeEventListener("resize",this.resizeEvent),t&&(this._resizeObserver=new ResizeObserver(this.resizeEvent),this._resizeObserver.observe(e),window.addEventListener("resize",this.resizeEvent))}setupRenderer(){this.three.localClippingEnabled=!0,this.container&&this.container.appendChild(this.three.domElement),this.onContainerUpdated.trigger()}}/*!
6
6
  * camera-controls
7
7
  * https://github.com/yomotsu/camera-controls
8
8
  * (c) 2017 @yomotsu
9
9
  * Released under the MIT License.
10
- */const lt={LEFT:1,RIGHT:2,MIDDLE:4},W=Object.freeze({NONE:0,ROTATE:1,TRUCK:2,OFFSET:4,DOLLY:8,ZOOM:16,TOUCH_ROTATE:32,TOUCH_TRUCK:64,TOUCH_OFFSET:128,TOUCH_DOLLY:256,TOUCH_ZOOM:512,TOUCH_DOLLY_TRUCK:1024,TOUCH_DOLLY_OFFSET:2048,TOUCH_DOLLY_ROTATE:4096,TOUCH_ZOOM_TRUCK:8192,TOUCH_ZOOM_OFFSET:16384,TOUCH_ZOOM_ROTATE:32768}),Xe={NONE:0,IN:1,OUT:-1};function Pe(c){return c.isPerspectiveCamera}function Re(c){return c.isOrthographicCamera}const $e=Math.PI*2,Ir=Math.PI/2,$r=1e-5,ui=Math.PI/180;function te(c,i,t){return Math.max(i,Math.min(t,c))}function gt(c,i=$r){return Math.abs(c)<i}function Et(c,i,t=$r){return gt(c-i,t)}function dr(c,i){return Math.round(c/i)*i}function fi(c){return isFinite(c)?c:c<0?-Number.MAX_VALUE:Number.MAX_VALUE}function Ii(c){return Math.abs(c)<Number.MAX_VALUE?c:c*(1/0)}function Ji(c,i,t,e,s=1/0,n){e=Math.max(1e-4,e);const r=2/e,o=r*n,a=1/(1+o+.48*o*o+.235*o*o*o);let l=c-i;const h=i,f=s*e;l=te(l,-f,f),i=c-l;const I=(t.value+r*l)*n;t.value=(t.value-r*I)*a;let u=i+(l+I)*a;return h-c>0==u>h&&(u=h,t.value=(u-h)/n),u}function Er(c,i,t,e,s=1/0,n,r){e=Math.max(1e-4,e);const o=2/e,a=o*n,l=1/(1+a+.48*a*a+.235*a*a*a);let h=i.x,f=i.y,I=i.z,u=c.x-h,d=c.y-f,E=c.z-I;const T=h,p=f,m=I,F=s*e,R=F*F,S=u*u+d*d+E*E;if(S>R){const U=Math.sqrt(S);u=u/U*F,d=d/U*F,E=E/U*F}h=c.x-u,f=c.y-d,I=c.z-E;const O=(t.x+o*u)*n,y=(t.y+o*d)*n,w=(t.z+o*E)*n;t.x=(t.x-o*O)*l,t.y=(t.y-o*y)*l,t.z=(t.z-o*w)*l,r.x=h+(u+O)*l,r.y=f+(d+y)*l,r.z=I+(E+w)*l;const P=T-c.x,v=p-c.y,G=m-c.z,N=r.x-T,D=r.y-p,g=r.z-m;return P*N+v*D+G*g>0&&(r.x=T,r.y=p,r.z=m,t.x=(r.x-T)/n,t.y=(r.y-p)/n,t.z=(r.z-m)/n),r}function rn(c,i){i.set(0,0),c.forEach(t=>{i.x+=t.clientX,i.y+=t.clientY}),i.x/=c.length,i.y/=c.length}function on(c,i){return Re(c)?(console.warn(`${i} is not supported in OrthographicCamera`),!0):!1}class oc{constructor(){this._listeners={}}addEventListener(i,t){const e=this._listeners;e[i]===void 0&&(e[i]=[]),e[i].indexOf(t)===-1&&e[i].push(t)}hasEventListener(i,t){const e=this._listeners;return e[i]!==void 0&&e[i].indexOf(t)!==-1}removeEventListener(i,t){const s=this._listeners[i];if(s!==void 0){const n=s.indexOf(t);n!==-1&&s.splice(n,1)}}removeAllEventListeners(i){if(!i){this._listeners={};return}Array.isArray(this._listeners[i])&&(this._listeners[i].length=0)}dispatchEvent(i){const e=this._listeners[i.type];if(e!==void 0){i.target=this;const s=e.slice(0);for(let n=0,r=s.length;n<r;n++)s[n].call(this,i)}}}const ac="2.7.3",ts=1/8,Zr=typeof window<"u",cc=Zr&&/Mac/.test(navigator.platform),lc=!(Zr&&"PointerEvent"in window);let ct,pr,es,an,xt,ht,dt,Ze,di,re,oe,_e,Cr,Tr,kt,Ei,je,mr,cn,Rr,ln,hn,is;class bt extends oc{static install(i){ct=i.THREE,pr=Object.freeze(new ct.Vector3(0,0,0)),es=Object.freeze(new ct.Vector3(0,1,0)),an=Object.freeze(new ct.Vector3(0,0,1)),xt=new ct.Vector2,ht=new ct.Vector3,dt=new ct.Vector3,Ze=new ct.Vector3,di=new ct.Vector3,re=new ct.Vector3,oe=new ct.Vector3,_e=new ct.Vector3,Cr=new ct.Vector3,Tr=new ct.Vector3,kt=new ct.Spherical,Ei=new ct.Spherical,je=new ct.Box3,mr=new ct.Box3,cn=new ct.Sphere,Rr=new ct.Quaternion,ln=new ct.Quaternion,hn=new ct.Matrix4,is=new ct.Raycaster}static get ACTION(){return W}constructor(i,t){super(),this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.minDistance=Number.EPSILON,this.maxDistance=1/0,this.infinityDolly=!1,this.minZoom=.01,this.maxZoom=1/0,this.smoothTime=.25,this.draggingSmoothTime=.125,this.maxSpeed=1/0,this.azimuthRotateSpeed=1,this.polarRotateSpeed=1,this.dollySpeed=1,this.dollyDragInverted=!1,this.truckSpeed=2,this.dollyToCursor=!1,this.dragToOffset=!1,this.verticalDragToForward=!1,this.boundaryFriction=0,this.restThreshold=.01,this.colliderMeshes=[],this.cancel=()=>{},this._enabled=!0,this._state=W.NONE,this._viewport=null,this._changedDolly=0,this._changedZoom=0,this._hasRested=!0,this._boundaryEnclosesCamera=!1,this._needsUpdate=!0,this._updatedLastTime=!1,this._elementRect=new DOMRect,this._isDragging=!1,this._dragNeedsUpdate=!0,this._activePointers=[],this._lockedPointer=null,this._interactiveArea=new DOMRect(0,0,1,1),this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._isUserControllingOffset=!1,this._isUserControllingZoom=!1,this._lastDollyDirection=Xe.NONE,this._thetaVelocity={value:0},this._phiVelocity={value:0},this._radiusVelocity={value:0},this._targetVelocity=new ct.Vector3,this._focalOffsetVelocity=new ct.Vector3,this._zoomVelocity={value:0},this._truckInternal=(R,S,O)=>{let y,w;if(Pe(this._camera)){const P=ht.copy(this._camera.position).sub(this._target),v=this._camera.getEffectiveFOV()*ui,G=P.length()*Math.tan(v*.5);y=this.truckSpeed*R*G/this._elementRect.height,w=this.truckSpeed*S*G/this._elementRect.height}else if(Re(this._camera)){const P=this._camera;y=R*(P.right-P.left)/P.zoom/this._elementRect.width,w=S*(P.top-P.bottom)/P.zoom/this._elementRect.height}else return;this.verticalDragToForward?(O?this.setFocalOffset(this._focalOffsetEnd.x+y,this._focalOffsetEnd.y,this._focalOffsetEnd.z,!0):this.truck(y,0,!0),this.forward(-w,!0)):O?this.setFocalOffset(this._focalOffsetEnd.x+y,this._focalOffsetEnd.y+w,this._focalOffsetEnd.z,!0):this.truck(y,w,!0)},this._rotateInternal=(R,S)=>{const O=$e*this.azimuthRotateSpeed*R/this._elementRect.height,y=$e*this.polarRotateSpeed*S/this._elementRect.height;this.rotate(O,y,!0)},this._dollyInternal=(R,S,O)=>{const y=Math.pow(.95,-R*this.dollySpeed),w=this._sphericalEnd.radius,P=this._sphericalEnd.radius*y,v=te(P,this.minDistance,this.maxDistance),G=v-P;this.infinityDolly&&this.dollyToCursor?this._dollyToNoClamp(P,!0):this.infinityDolly&&!this.dollyToCursor?(this.dollyInFixed(G,!0),this._dollyToNoClamp(v,!0)):this._dollyToNoClamp(v,!0),this.dollyToCursor&&(this._changedDolly+=(this.infinityDolly?P:v)-w,this._dollyControlCoord.set(S,O)),this._lastDollyDirection=Math.sign(-R)},this._zoomInternal=(R,S,O)=>{const y=Math.pow(.95,R*this.dollySpeed),w=this._zoom,P=this._zoom*y;this.zoomTo(P,!0),this.dollyToCursor&&(this._changedZoom+=P-w,this._dollyControlCoord.set(S,O))},typeof ct>"u"&&console.error("camera-controls: `THREE` is undefined. You must first run `CameraControls.install( { THREE: THREE } )`. Check the docs for further information."),this._camera=i,this._yAxisUpSpace=new ct.Quaternion().setFromUnitVectors(this._camera.up,es),this._yAxisUpSpaceInverse=this._yAxisUpSpace.clone().invert(),this._state=W.NONE,this._target=new ct.Vector3,this._targetEnd=this._target.clone(),this._focalOffset=new ct.Vector3,this._focalOffsetEnd=this._focalOffset.clone(),this._spherical=new ct.Spherical().setFromVector3(ht.copy(this._camera.position).applyQuaternion(this._yAxisUpSpace)),this._sphericalEnd=this._spherical.clone(),this._lastDistance=this._spherical.radius,this._zoom=this._camera.zoom,this._zoomEnd=this._zoom,this._lastZoom=this._zoom,this._nearPlaneCorners=[new ct.Vector3,new ct.Vector3,new ct.Vector3,new ct.Vector3],this._updateNearPlaneCorners(),this._boundary=new ct.Box3(new ct.Vector3(-1/0,-1/0,-1/0),new ct.Vector3(1/0,1/0,1/0)),this._cameraUp0=this._camera.up.clone(),this._target0=this._target.clone(),this._position0=this._camera.position.clone(),this._zoom0=this._zoom,this._focalOffset0=this._focalOffset.clone(),this._dollyControlCoord=new ct.Vector2,this.mouseButtons={left:W.ROTATE,middle:W.DOLLY,right:W.TRUCK,wheel:Pe(this._camera)?W.DOLLY:Re(this._camera)?W.ZOOM:W.NONE},this.touches={one:W.TOUCH_ROTATE,two:Pe(this._camera)?W.TOUCH_DOLLY_TRUCK:Re(this._camera)?W.TOUCH_ZOOM_TRUCK:W.NONE,three:W.TOUCH_TRUCK};const e=new ct.Vector2,s=new ct.Vector2,n=new ct.Vector2,r=R=>{if(!this._enabled||!this._domElement)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const y=this._domElement.getBoundingClientRect(),w=R.clientX/y.width,P=R.clientY/y.height;if(w<this._interactiveArea.left||w>this._interactiveArea.right||P<this._interactiveArea.top||P>this._interactiveArea.bottom)return}const S=R.pointerType!=="mouse"?null:(R.buttons&lt.LEFT)===lt.LEFT?lt.LEFT:(R.buttons&lt.MIDDLE)===lt.MIDDLE?lt.MIDDLE:(R.buttons&lt.RIGHT)===lt.RIGHT?lt.RIGHT:null;if(S!==null){const y=this._findPointerByMouseButton(S);y&&this._disposePointer(y)}if((R.buttons&lt.LEFT)===lt.LEFT&&this._lockedPointer)return;const O={pointerId:R.pointerId,clientX:R.clientX,clientY:R.clientY,deltaX:0,deltaY:0,mouseButton:S};this._activePointers.push(O),this._domElement.ownerDocument.removeEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h),this._domElement.ownerDocument.addEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",h),this._isDragging=!0,E(R)},o=R=>{if(!this._enabled||!this._domElement||this._lockedPointer)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const y=this._domElement.getBoundingClientRect(),w=R.clientX/y.width,P=R.clientY/y.height;if(w<this._interactiveArea.left||w>this._interactiveArea.right||P<this._interactiveArea.top||P>this._interactiveArea.bottom)return}const S=(R.buttons&lt.LEFT)===lt.LEFT?lt.LEFT:(R.buttons&lt.MIDDLE)===lt.MIDDLE?lt.MIDDLE:(R.buttons&lt.RIGHT)===lt.RIGHT?lt.RIGHT:null;if(S!==null){const y=this._findPointerByMouseButton(S);y&&this._disposePointer(y)}const O={pointerId:1,clientX:R.clientX,clientY:R.clientY,deltaX:0,deltaY:0,mouseButton:(R.buttons&lt.LEFT)===lt.LEFT?lt.LEFT:(R.buttons&lt.MIDDLE)===lt.LEFT?lt.MIDDLE:(R.buttons&lt.RIGHT)===lt.LEFT?lt.RIGHT:null};this._activePointers.push(O),this._domElement.ownerDocument.removeEventListener("mousemove",l),this._domElement.ownerDocument.removeEventListener("mouseup",f),this._domElement.ownerDocument.addEventListener("mousemove",l),this._domElement.ownerDocument.addEventListener("mouseup",f),this._isDragging=!0,E(R)},a=R=>{R.cancelable&&R.preventDefault();const S=R.pointerId,O=this._lockedPointer||this._findPointerById(S);if(O){if(O.clientX=R.clientX,O.clientY=R.clientY,O.deltaX=R.movementX,O.deltaY=R.movementY,this._state=0,R.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else(!this._isDragging&&this._lockedPointer||this._isDragging&&(R.buttons&lt.LEFT)===lt.LEFT)&&(this._state=this._state|this.mouseButtons.left),this._isDragging&&(R.buttons&lt.MIDDLE)===lt.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),this._isDragging&&(R.buttons&lt.RIGHT)===lt.RIGHT&&(this._state=this._state|this.mouseButtons.right);T()}},l=R=>{const S=this._lockedPointer||this._findPointerById(1);S&&(S.clientX=R.clientX,S.clientY=R.clientY,S.deltaX=R.movementX,S.deltaY=R.movementY,this._state=0,(this._lockedPointer||(R.buttons&lt.LEFT)===lt.LEFT)&&(this._state=this._state|this.mouseButtons.left),(R.buttons&lt.MIDDLE)===lt.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),(R.buttons&lt.RIGHT)===lt.RIGHT&&(this._state=this._state|this.mouseButtons.right),T())},h=R=>{const S=this._findPointerById(R.pointerId);if(!(S&&S===this._lockedPointer)){if(S&&this._disposePointer(S),R.pointerType==="touch")switch(this._activePointers.length){case 0:this._state=W.NONE;break;case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else this._state=W.NONE;p()}},f=()=>{const R=this._findPointerById(1);R&&R===this._lockedPointer||(R&&this._disposePointer(R),this._state=W.NONE,p())};let I=-1;const u=R=>{if(!this._domElement||!this._enabled||this.mouseButtons.wheel===W.NONE)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const P=this._domElement.getBoundingClientRect(),v=R.clientX/P.width,G=R.clientY/P.height;if(v<this._interactiveArea.left||v>this._interactiveArea.right||G<this._interactiveArea.top||G>this._interactiveArea.bottom)return}if(R.preventDefault(),this.dollyToCursor||this.mouseButtons.wheel===W.ROTATE||this.mouseButtons.wheel===W.TRUCK){const P=performance.now();I-P<1e3&&this._getClientRect(this._elementRect),I=P}const S=cc?-1:-3,O=R.deltaMode===1?R.deltaY/S:R.deltaY/(S*10),y=this.dollyToCursor?(R.clientX-this._elementRect.x)/this._elementRect.width*2-1:0,w=this.dollyToCursor?(R.clientY-this._elementRect.y)/this._elementRect.height*-2+1:0;switch(this.mouseButtons.wheel){case W.ROTATE:{this._rotateInternal(R.deltaX,R.deltaY),this._isUserControllingRotate=!0;break}case W.TRUCK:{this._truckInternal(R.deltaX,R.deltaY,!1),this._isUserControllingTruck=!0;break}case W.OFFSET:{this._truckInternal(R.deltaX,R.deltaY,!0),this._isUserControllingOffset=!0;break}case W.DOLLY:{this._dollyInternal(-O,y,w),this._isUserControllingDolly=!0;break}case W.ZOOM:{this._zoomInternal(-O,y,w),this._isUserControllingZoom=!0;break}}this.dispatchEvent({type:"control"})},d=R=>{if(!(!this._domElement||!this._enabled)){if(this.mouseButtons.right===bt.ACTION.NONE){const S=R instanceof PointerEvent?R.pointerId:(R instanceof MouseEvent,0),O=this._findPointerById(S);O&&this._disposePointer(O),this._domElement.ownerDocument.removeEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h),this._domElement.ownerDocument.removeEventListener("mousemove",l),this._domElement.ownerDocument.removeEventListener("mouseup",f);return}R.preventDefault()}},E=R=>{if(!this._enabled)return;if(rn(this._activePointers,xt),this._getClientRect(this._elementRect),e.copy(xt),s.copy(xt),this._activePointers.length>=2){const O=xt.x-this._activePointers[1].clientX,y=xt.y-this._activePointers[1].clientY,w=Math.sqrt(O*O+y*y);n.set(0,w);const P=(this._activePointers[0].clientX+this._activePointers[1].clientX)*.5,v=(this._activePointers[0].clientY+this._activePointers[1].clientY)*.5;s.set(P,v)}if(this._state=0,!R)this._lockedPointer&&(this._state=this._state|this.mouseButtons.left);else if("pointerType"in R&&R.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else!this._lockedPointer&&(R.buttons&lt.LEFT)===lt.LEFT&&(this._state=this._state|this.mouseButtons.left),(R.buttons&lt.MIDDLE)===lt.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),(R.buttons&lt.RIGHT)===lt.RIGHT&&(this._state=this._state|this.mouseButtons.right);((this._state&W.ROTATE)===W.ROTATE||(this._state&W.TOUCH_ROTATE)===W.TOUCH_ROTATE||(this._state&W.TOUCH_DOLLY_ROTATE)===W.TOUCH_DOLLY_ROTATE||(this._state&W.TOUCH_ZOOM_ROTATE)===W.TOUCH_ZOOM_ROTATE)&&(this._sphericalEnd.theta=this._spherical.theta,this._sphericalEnd.phi=this._spherical.phi,this._thetaVelocity.value=0,this._phiVelocity.value=0),((this._state&W.TRUCK)===W.TRUCK||(this._state&W.TOUCH_TRUCK)===W.TOUCH_TRUCK||(this._state&W.TOUCH_DOLLY_TRUCK)===W.TOUCH_DOLLY_TRUCK||(this._state&W.TOUCH_ZOOM_TRUCK)===W.TOUCH_ZOOM_TRUCK)&&(this._targetEnd.copy(this._target),this._targetVelocity.set(0,0,0)),((this._state&W.DOLLY)===W.DOLLY||(this._state&W.TOUCH_DOLLY)===W.TOUCH_DOLLY||(this._state&W.TOUCH_DOLLY_TRUCK)===W.TOUCH_DOLLY_TRUCK||(this._state&W.TOUCH_DOLLY_OFFSET)===W.TOUCH_DOLLY_OFFSET||(this._state&W.TOUCH_DOLLY_ROTATE)===W.TOUCH_DOLLY_ROTATE)&&(this._sphericalEnd.radius=this._spherical.radius,this._radiusVelocity.value=0),((this._state&W.ZOOM)===W.ZOOM||(this._state&W.TOUCH_ZOOM)===W.TOUCH_ZOOM||(this._state&W.TOUCH_ZOOM_TRUCK)===W.TOUCH_ZOOM_TRUCK||(this._state&W.TOUCH_ZOOM_OFFSET)===W.TOUCH_ZOOM_OFFSET||(this._state&W.TOUCH_ZOOM_ROTATE)===W.TOUCH_ZOOM_ROTATE)&&(this._zoomEnd=this._zoom,this._zoomVelocity.value=0),((this._state&W.OFFSET)===W.OFFSET||(this._state&W.TOUCH_OFFSET)===W.TOUCH_OFFSET||(this._state&W.TOUCH_DOLLY_OFFSET)===W.TOUCH_DOLLY_OFFSET||(this._state&W.TOUCH_ZOOM_OFFSET)===W.TOUCH_ZOOM_OFFSET)&&(this._focalOffsetEnd.copy(this._focalOffset),this._focalOffsetVelocity.set(0,0,0)),this.dispatchEvent({type:"controlstart"})},T=()=>{if(!this._enabled||!this._dragNeedsUpdate)return;this._dragNeedsUpdate=!1,rn(this._activePointers,xt);const S=this._domElement&&document.pointerLockElement===this._domElement?this._lockedPointer||this._activePointers[0]:null,O=S?-S.deltaX:s.x-xt.x,y=S?-S.deltaY:s.y-xt.y;if(s.copy(xt),((this._state&W.ROTATE)===W.ROTATE||(this._state&W.TOUCH_ROTATE)===W.TOUCH_ROTATE||(this._state&W.TOUCH_DOLLY_ROTATE)===W.TOUCH_DOLLY_ROTATE||(this._state&W.TOUCH_ZOOM_ROTATE)===W.TOUCH_ZOOM_ROTATE)&&(this._rotateInternal(O,y),this._isUserControllingRotate=!0),(this._state&W.DOLLY)===W.DOLLY||(this._state&W.ZOOM)===W.ZOOM){const w=this.dollyToCursor?(e.x-this._elementRect.x)/this._elementRect.width*2-1:0,P=this.dollyToCursor?(e.y-this._elementRect.y)/this._elementRect.height*-2+1:0,v=this.dollyDragInverted?-1:1;(this._state&W.DOLLY)===W.DOLLY?(this._dollyInternal(v*y*ts,w,P),this._isUserControllingDolly=!0):(this._zoomInternal(v*y*ts,w,P),this._isUserControllingZoom=!0)}if((this._state&W.TOUCH_DOLLY)===W.TOUCH_DOLLY||(this._state&W.TOUCH_ZOOM)===W.TOUCH_ZOOM||(this._state&W.TOUCH_DOLLY_TRUCK)===W.TOUCH_DOLLY_TRUCK||(this._state&W.TOUCH_ZOOM_TRUCK)===W.TOUCH_ZOOM_TRUCK||(this._state&W.TOUCH_DOLLY_OFFSET)===W.TOUCH_DOLLY_OFFSET||(this._state&W.TOUCH_ZOOM_OFFSET)===W.TOUCH_ZOOM_OFFSET||(this._state&W.TOUCH_DOLLY_ROTATE)===W.TOUCH_DOLLY_ROTATE||(this._state&W.TOUCH_ZOOM_ROTATE)===W.TOUCH_ZOOM_ROTATE){const w=xt.x-this._activePointers[1].clientX,P=xt.y-this._activePointers[1].clientY,v=Math.sqrt(w*w+P*P),G=n.y-v;n.set(0,v);const N=this.dollyToCursor?(s.x-this._elementRect.x)/this._elementRect.width*2-1:0,D=this.dollyToCursor?(s.y-this._elementRect.y)/this._elementRect.height*-2+1:0;(this._state&W.TOUCH_DOLLY)===W.TOUCH_DOLLY||(this._state&W.TOUCH_DOLLY_ROTATE)===W.TOUCH_DOLLY_ROTATE||(this._state&W.TOUCH_DOLLY_TRUCK)===W.TOUCH_DOLLY_TRUCK||(this._state&W.TOUCH_DOLLY_OFFSET)===W.TOUCH_DOLLY_OFFSET?(this._dollyInternal(G*ts,N,D),this._isUserControllingDolly=!0):(this._zoomInternal(G*ts,N,D),this._isUserControllingZoom=!0)}((this._state&W.TRUCK)===W.TRUCK||(this._state&W.TOUCH_TRUCK)===W.TOUCH_TRUCK||(this._state&W.TOUCH_DOLLY_TRUCK)===W.TOUCH_DOLLY_TRUCK||(this._state&W.TOUCH_ZOOM_TRUCK)===W.TOUCH_ZOOM_TRUCK)&&(this._truckInternal(O,y,!1),this._isUserControllingTruck=!0),((this._state&W.OFFSET)===W.OFFSET||(this._state&W.TOUCH_OFFSET)===W.TOUCH_OFFSET||(this._state&W.TOUCH_DOLLY_OFFSET)===W.TOUCH_DOLLY_OFFSET||(this._state&W.TOUCH_ZOOM_OFFSET)===W.TOUCH_ZOOM_OFFSET)&&(this._truckInternal(O,y,!0),this._isUserControllingOffset=!0),this.dispatchEvent({type:"control"})},p=()=>{rn(this._activePointers,xt),s.copy(xt),this._dragNeedsUpdate=!1,(this._activePointers.length===0||this._activePointers.length===1&&this._activePointers[0]===this._lockedPointer)&&(this._isDragging=!1),this._activePointers.length===0&&this._domElement&&(this._domElement.ownerDocument.removeEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.removeEventListener("mousemove",l),this._domElement.ownerDocument.removeEventListener("pointerup",h),this._domElement.ownerDocument.removeEventListener("mouseup",f),this.dispatchEvent({type:"controlend"}))};this.lockPointer=()=>{!this._enabled||!this._domElement||(this.cancel(),this._lockedPointer={pointerId:-1,clientX:0,clientY:0,deltaX:0,deltaY:0,mouseButton:null},this._activePointers.push(this._lockedPointer),this._domElement.ownerDocument.removeEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h),this._domElement.requestPointerLock(),this._domElement.ownerDocument.addEventListener("pointerlockchange",m),this._domElement.ownerDocument.addEventListener("pointerlockerror",F),this._domElement.ownerDocument.addEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",h),E())},this.unlockPointer=()=>{this._lockedPointer!==null&&(this._disposePointer(this._lockedPointer),this._lockedPointer=null),document.exitPointerLock(),this.cancel(),this._domElement&&(this._domElement.ownerDocument.removeEventListener("pointerlockchange",m),this._domElement.ownerDocument.removeEventListener("pointerlockerror",F))};const m=()=>{this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement||this.unlockPointer()},F=()=>{this.unlockPointer()};this._addAllEventListeners=R=>{this._domElement=R,this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none",this._domElement.addEventListener("pointerdown",r),lc&&this._domElement.addEventListener("mousedown",o),this._domElement.addEventListener("pointercancel",h),this._domElement.addEventListener("wheel",u,{passive:!1}),this._domElement.addEventListener("contextmenu",d)},this._removeAllEventListeners=()=>{this._domElement&&(this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect="",this._domElement.removeEventListener("pointerdown",r),this._domElement.removeEventListener("mousedown",o),this._domElement.removeEventListener("pointercancel",h),this._domElement.removeEventListener("wheel",u,{passive:!1}),this._domElement.removeEventListener("contextmenu",d),this._domElement.ownerDocument.removeEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.removeEventListener("mousemove",l),this._domElement.ownerDocument.removeEventListener("pointerup",h),this._domElement.ownerDocument.removeEventListener("mouseup",f),this._domElement.ownerDocument.removeEventListener("pointerlockchange",m),this._domElement.ownerDocument.removeEventListener("pointerlockerror",F))},this.cancel=()=>{this._state!==W.NONE&&(this._state=W.NONE,this._activePointers.length=0,p())},t&&this.connect(t),this.update(0)}get camera(){return this._camera}set camera(i){this._camera=i,this.updateCameraUp(),this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0}get enabled(){return this._enabled}set enabled(i){this._enabled=i,this._domElement&&(i?(this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none"):(this.cancel(),this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect=""))}get active(){return!this._hasRested}get currentAction(){return this._state}get distance(){return this._spherical.radius}set distance(i){this._spherical.radius===i&&this._sphericalEnd.radius===i||(this._spherical.radius=i,this._sphericalEnd.radius=i,this._needsUpdate=!0)}get azimuthAngle(){return this._spherical.theta}set azimuthAngle(i){this._spherical.theta===i&&this._sphericalEnd.theta===i||(this._spherical.theta=i,this._sphericalEnd.theta=i,this._needsUpdate=!0)}get polarAngle(){return this._spherical.phi}set polarAngle(i){this._spherical.phi===i&&this._sphericalEnd.phi===i||(this._spherical.phi=i,this._sphericalEnd.phi=i,this._needsUpdate=!0)}get boundaryEnclosesCamera(){return this._boundaryEnclosesCamera}set boundaryEnclosesCamera(i){this._boundaryEnclosesCamera=i,this._needsUpdate=!0}set interactiveArea(i){this._interactiveArea.width=te(i.width,0,1),this._interactiveArea.height=te(i.height,0,1),this._interactiveArea.x=te(i.x,0,1-this._interactiveArea.width),this._interactiveArea.y=te(i.y,0,1-this._interactiveArea.height)}addEventListener(i,t){super.addEventListener(i,t)}removeEventListener(i,t){super.removeEventListener(i,t)}rotate(i,t,e=!1){return this.rotateTo(this._sphericalEnd.theta+i,this._sphericalEnd.phi+t,e)}rotateAzimuthTo(i,t=!1){return this.rotateTo(i,this._sphericalEnd.phi,t)}rotatePolarTo(i,t=!1){return this.rotateTo(this._sphericalEnd.theta,i,t)}rotateTo(i,t,e=!1){this._isUserControllingRotate=!1;const s=te(i,this.minAzimuthAngle,this.maxAzimuthAngle),n=te(t,this.minPolarAngle,this.maxPolarAngle);this._sphericalEnd.theta=s,this._sphericalEnd.phi=n,this._sphericalEnd.makeSafe(),this._needsUpdate=!0,e||(this._spherical.theta=this._sphericalEnd.theta,this._spherical.phi=this._sphericalEnd.phi);const r=!e||Et(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&Et(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold);return this._createOnRestPromise(r)}dolly(i,t=!1){return this.dollyTo(this._sphericalEnd.radius-i,t)}dollyTo(i,t=!1){return this._isUserControllingDolly=!1,this._lastDollyDirection=Xe.NONE,this._changedDolly=0,this._dollyToNoClamp(te(i,this.minDistance,this.maxDistance),t)}_dollyToNoClamp(i,t=!1){const e=this._sphericalEnd.radius;if(this.colliderMeshes.length>=1){const r=this._collisionTest(),o=Et(r,this._spherical.radius);if(!(e>i)&&o)return Promise.resolve();this._sphericalEnd.radius=Math.min(i,r)}else this._sphericalEnd.radius=i;this._needsUpdate=!0,t||(this._spherical.radius=this._sphericalEnd.radius);const n=!t||Et(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(n)}dollyInFixed(i,t=!1){this._targetEnd.add(this._getCameraDirection(di).multiplyScalar(i)),t||this._target.copy(this._targetEnd);const e=!t||Et(this._target.x,this._targetEnd.x,this.restThreshold)&&Et(this._target.y,this._targetEnd.y,this.restThreshold)&&Et(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(e)}zoom(i,t=!1){return this.zoomTo(this._zoomEnd+i,t)}zoomTo(i,t=!1){this._isUserControllingZoom=!1,this._zoomEnd=te(i,this.minZoom,this.maxZoom),this._needsUpdate=!0,t||(this._zoom=this._zoomEnd);const e=!t||Et(this._zoom,this._zoomEnd,this.restThreshold);return this._changedZoom=0,this._createOnRestPromise(e)}pan(i,t,e=!1){return console.warn("`pan` has been renamed to `truck`"),this.truck(i,t,e)}truck(i,t,e=!1){this._camera.updateMatrix(),re.setFromMatrixColumn(this._camera.matrix,0),oe.setFromMatrixColumn(this._camera.matrix,1),re.multiplyScalar(i),oe.multiplyScalar(-t);const s=ht.copy(re).add(oe),n=dt.copy(this._targetEnd).add(s);return this.moveTo(n.x,n.y,n.z,e)}forward(i,t=!1){ht.setFromMatrixColumn(this._camera.matrix,0),ht.crossVectors(this._camera.up,ht),ht.multiplyScalar(i);const e=dt.copy(this._targetEnd).add(ht);return this.moveTo(e.x,e.y,e.z,t)}elevate(i,t=!1){return ht.copy(this._camera.up).multiplyScalar(i),this.moveTo(this._targetEnd.x+ht.x,this._targetEnd.y+ht.y,this._targetEnd.z+ht.z,t)}moveTo(i,t,e,s=!1){this._isUserControllingTruck=!1;const n=ht.set(i,t,e).sub(this._targetEnd);this._encloseToBoundary(this._targetEnd,n,this.boundaryFriction),this._needsUpdate=!0,s||this._target.copy(this._targetEnd);const r=!s||Et(this._target.x,this._targetEnd.x,this.restThreshold)&&Et(this._target.y,this._targetEnd.y,this.restThreshold)&&Et(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(r)}lookInDirectionOf(i,t,e,s=!1){const o=ht.set(i,t,e).sub(this._targetEnd).normalize().multiplyScalar(-this._sphericalEnd.radius);return this.setPosition(o.x,o.y,o.z,s)}fitToBox(i,t,{cover:e=!1,paddingLeft:s=0,paddingRight:n=0,paddingBottom:r=0,paddingTop:o=0}={}){const a=[],l=i.isBox3?je.copy(i):je.setFromObject(i);l.isEmpty()&&(console.warn("camera-controls: fitTo() cannot be used with an empty box. Aborting"),Promise.resolve());const h=dr(this._sphericalEnd.theta,Ir),f=dr(this._sphericalEnd.phi,Ir);a.push(this.rotateTo(h,f,t));const I=ht.setFromSpherical(this._sphericalEnd).normalize(),u=Rr.setFromUnitVectors(I,an),d=Et(Math.abs(I.y),1);d&&u.multiply(ln.setFromAxisAngle(es,h)),u.multiply(this._yAxisUpSpaceInverse);const E=mr.makeEmpty();dt.copy(l.min).applyQuaternion(u),E.expandByPoint(dt),dt.copy(l.min).setX(l.max.x).applyQuaternion(u),E.expandByPoint(dt),dt.copy(l.min).setY(l.max.y).applyQuaternion(u),E.expandByPoint(dt),dt.copy(l.max).setZ(l.min.z).applyQuaternion(u),E.expandByPoint(dt),dt.copy(l.min).setZ(l.max.z).applyQuaternion(u),E.expandByPoint(dt),dt.copy(l.max).setY(l.min.y).applyQuaternion(u),E.expandByPoint(dt),dt.copy(l.max).setX(l.min.x).applyQuaternion(u),E.expandByPoint(dt),dt.copy(l.max).applyQuaternion(u),E.expandByPoint(dt),E.min.x-=s,E.min.y-=r,E.max.x+=n,E.max.y+=o,u.setFromUnitVectors(an,I),d&&u.premultiply(ln.invert()),u.premultiply(this._yAxisUpSpace);const T=E.getSize(ht),p=E.getCenter(dt).applyQuaternion(u);if(Pe(this._camera)){const m=this.getDistanceToFitBox(T.x,T.y,T.z,e);a.push(this.moveTo(p.x,p.y,p.z,t)),a.push(this.dollyTo(m,t)),a.push(this.setFocalOffset(0,0,0,t))}else if(Re(this._camera)){const m=this._camera,F=m.right-m.left,R=m.top-m.bottom,S=e?Math.max(F/T.x,R/T.y):Math.min(F/T.x,R/T.y);a.push(this.moveTo(p.x,p.y,p.z,t)),a.push(this.zoomTo(S,t)),a.push(this.setFocalOffset(0,0,0,t))}return Promise.all(a)}fitToSphere(i,t){const e=[],n=i instanceof ct.Sphere?cn.copy(i):bt.createBoundingSphere(i,cn);if(e.push(this.moveTo(n.center.x,n.center.y,n.center.z,t)),Pe(this._camera)){const r=this.getDistanceToFitSphere(n.radius);e.push(this.dollyTo(r,t))}else if(Re(this._camera)){const r=this._camera.right-this._camera.left,o=this._camera.top-this._camera.bottom,a=2*n.radius,l=Math.min(r/a,o/a);e.push(this.zoomTo(l,t))}return e.push(this.setFocalOffset(0,0,0,t)),Promise.all(e)}setLookAt(i,t,e,s,n,r,o=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Xe.NONE,this._changedDolly=0;const a=dt.set(s,n,r),l=ht.set(i,t,e);this._targetEnd.copy(a),this._sphericalEnd.setFromVector3(l.sub(a).applyQuaternion(this._yAxisUpSpace)),this.normalizeRotations(),this._needsUpdate=!0,o||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const h=!o||Et(this._target.x,this._targetEnd.x,this.restThreshold)&&Et(this._target.y,this._targetEnd.y,this.restThreshold)&&Et(this._target.z,this._targetEnd.z,this.restThreshold)&&Et(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&Et(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&Et(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(h)}lerpLookAt(i,t,e,s,n,r,o,a,l,h,f,I,u,d=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Xe.NONE,this._changedDolly=0;const E=ht.set(s,n,r),T=dt.set(i,t,e);kt.setFromVector3(T.sub(E).applyQuaternion(this._yAxisUpSpace));const p=Ze.set(h,f,I),m=dt.set(o,a,l);Ei.setFromVector3(m.sub(p).applyQuaternion(this._yAxisUpSpace)),this._targetEnd.copy(E.lerp(p,u));const F=Ei.theta-kt.theta,R=Ei.phi-kt.phi,S=Ei.radius-kt.radius;this._sphericalEnd.set(kt.radius+S*u,kt.phi+R*u,kt.theta+F*u),this.normalizeRotations(),this._needsUpdate=!0,d||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const O=!d||Et(this._target.x,this._targetEnd.x,this.restThreshold)&&Et(this._target.y,this._targetEnd.y,this.restThreshold)&&Et(this._target.z,this._targetEnd.z,this.restThreshold)&&Et(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&Et(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&Et(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(O)}setPosition(i,t,e,s=!1){return this.setLookAt(i,t,e,this._targetEnd.x,this._targetEnd.y,this._targetEnd.z,s)}setTarget(i,t,e,s=!1){const n=this.getPosition(ht),r=this.setLookAt(n.x,n.y,n.z,i,t,e,s);return this._sphericalEnd.phi=te(this._sphericalEnd.phi,this.minPolarAngle,this.maxPolarAngle),r}setFocalOffset(i,t,e,s=!1){this._isUserControllingOffset=!1,this._focalOffsetEnd.set(i,t,e),this._needsUpdate=!0,s||this._focalOffset.copy(this._focalOffsetEnd);const n=!s||Et(this._focalOffset.x,this._focalOffsetEnd.x,this.restThreshold)&&Et(this._focalOffset.y,this._focalOffsetEnd.y,this.restThreshold)&&Et(this._focalOffset.z,this._focalOffsetEnd.z,this.restThreshold);return this._createOnRestPromise(n)}setOrbitPoint(i,t,e){this._camera.updateMatrixWorld(),re.setFromMatrixColumn(this._camera.matrixWorldInverse,0),oe.setFromMatrixColumn(this._camera.matrixWorldInverse,1),_e.setFromMatrixColumn(this._camera.matrixWorldInverse,2);const s=ht.set(i,t,e),n=s.distanceTo(this._camera.position),r=s.sub(this._camera.position);re.multiplyScalar(r.x),oe.multiplyScalar(r.y),_e.multiplyScalar(r.z),ht.copy(re).add(oe).add(_e),ht.z=ht.z+n,this.dollyTo(n,!1),this.setFocalOffset(-ht.x,ht.y,-ht.z,!1),this.moveTo(i,t,e,!1)}setBoundary(i){if(!i){this._boundary.min.set(-1/0,-1/0,-1/0),this._boundary.max.set(1/0,1/0,1/0),this._needsUpdate=!0;return}this._boundary.copy(i),this._boundary.clampPoint(this._targetEnd,this._targetEnd),this._needsUpdate=!0}setViewport(i,t,e,s){if(i===null){this._viewport=null;return}this._viewport=this._viewport||new ct.Vector4,typeof i=="number"?this._viewport.set(i,t,e,s):this._viewport.copy(i)}getDistanceToFitBox(i,t,e,s=!1){if(on(this._camera,"getDistanceToFitBox"))return this._spherical.radius;const n=i/t,r=this._camera.getEffectiveFOV()*ui,o=this._camera.aspect;return((s?n>o:n<o)?t:i/o)*.5/Math.tan(r*.5)+e*.5}getDistanceToFitSphere(i){if(on(this._camera,"getDistanceToFitSphere"))return this._spherical.radius;const t=this._camera.getEffectiveFOV()*ui,e=Math.atan(Math.tan(t*.5)*this._camera.aspect)*2,s=1<this._camera.aspect?t:e;return i/Math.sin(s*.5)}getTarget(i,t=!0){return(i&&i.isVector3?i:new ct.Vector3).copy(t?this._targetEnd:this._target)}getPosition(i,t=!0){return(i&&i.isVector3?i:new ct.Vector3).setFromSpherical(t?this._sphericalEnd:this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(t?this._targetEnd:this._target)}getSpherical(i,t=!0){return(i&&i instanceof ct.Spherical?i:new ct.Spherical).copy(t?this._sphericalEnd:this._spherical)}getFocalOffset(i,t=!0){return(i&&i.isVector3?i:new ct.Vector3).copy(t?this._focalOffsetEnd:this._focalOffset)}normalizeRotations(){this._sphericalEnd.theta=this._sphericalEnd.theta%$e,this._sphericalEnd.theta<0&&(this._sphericalEnd.theta+=$e),this._spherical.theta+=$e*Math.round((this._sphericalEnd.theta-this._spherical.theta)/$e)}reset(i=!1){if(!Et(this._camera.up.x,this._cameraUp0.x)||!Et(this._camera.up.y,this._cameraUp0.y)||!Et(this._camera.up.z,this._cameraUp0.z)){this._camera.up.copy(this._cameraUp0);const e=this.getPosition(ht);this.updateCameraUp(),this.setPosition(e.x,e.y,e.z)}const t=[this.setLookAt(this._position0.x,this._position0.y,this._position0.z,this._target0.x,this._target0.y,this._target0.z,i),this.setFocalOffset(this._focalOffset0.x,this._focalOffset0.y,this._focalOffset0.z,i),this.zoomTo(this._zoom0,i)];return Promise.all(t)}saveState(){this._cameraUp0.copy(this._camera.up),this.getTarget(this._target0),this.getPosition(this._position0),this._zoom0=this._zoom,this._focalOffset0.copy(this._focalOffset)}updateCameraUp(){this._yAxisUpSpace.setFromUnitVectors(this._camera.up,es),this._yAxisUpSpaceInverse.copy(this._yAxisUpSpace).invert()}applyCameraUp(){const i=ht.subVectors(this._target,this._camera.position).normalize(),t=dt.crossVectors(i,this._camera.up);this._camera.up.crossVectors(t,i).normalize(),this._camera.updateMatrixWorld();const e=this.getPosition(ht);this.updateCameraUp(),this.setPosition(e.x,e.y,e.z)}update(i){const t=this._sphericalEnd.theta-this._spherical.theta,e=this._sphericalEnd.phi-this._spherical.phi,s=this._sphericalEnd.radius-this._spherical.radius,n=Cr.subVectors(this._targetEnd,this._target),r=Tr.subVectors(this._focalOffsetEnd,this._focalOffset),o=this._zoomEnd-this._zoom;if(gt(t))this._thetaVelocity.value=0,this._spherical.theta=this._sphericalEnd.theta;else{const f=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.theta=Ji(this._spherical.theta,this._sphericalEnd.theta,this._thetaVelocity,f,1/0,i),this._needsUpdate=!0}if(gt(e))this._phiVelocity.value=0,this._spherical.phi=this._sphericalEnd.phi;else{const f=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.phi=Ji(this._spherical.phi,this._sphericalEnd.phi,this._phiVelocity,f,1/0,i),this._needsUpdate=!0}if(gt(s))this._radiusVelocity.value=0,this._spherical.radius=this._sphericalEnd.radius;else{const f=this._isUserControllingDolly?this.draggingSmoothTime:this.smoothTime;this._spherical.radius=Ji(this._spherical.radius,this._sphericalEnd.radius,this._radiusVelocity,f,this.maxSpeed,i),this._needsUpdate=!0}if(gt(n.x)&&gt(n.y)&&gt(n.z))this._targetVelocity.set(0,0,0),this._target.copy(this._targetEnd);else{const f=this._isUserControllingTruck?this.draggingSmoothTime:this.smoothTime;Er(this._target,this._targetEnd,this._targetVelocity,f,this.maxSpeed,i,this._target),this._needsUpdate=!0}if(gt(r.x)&&gt(r.y)&&gt(r.z))this._focalOffsetVelocity.set(0,0,0),this._focalOffset.copy(this._focalOffsetEnd);else{const f=this._isUserControllingOffset?this.draggingSmoothTime:this.smoothTime;Er(this._focalOffset,this._focalOffsetEnd,this._focalOffsetVelocity,f,this.maxSpeed,i,this._focalOffset),this._needsUpdate=!0}if(gt(o))this._zoomVelocity.value=0,this._zoom=this._zoomEnd;else{const f=this._isUserControllingZoom?this.draggingSmoothTime:this.smoothTime;this._zoom=Ji(this._zoom,this._zoomEnd,this._zoomVelocity,f,1/0,i)}if(this.dollyToCursor){if(Pe(this._camera)&&this._changedDolly!==0){const f=this._spherical.radius-this._lastDistance,I=this._camera,u=this._getCameraDirection(di),d=ht.copy(u).cross(I.up).normalize();d.lengthSq()===0&&(d.x=1);const E=dt.crossVectors(d,u),T=this._sphericalEnd.radius*Math.tan(I.getEffectiveFOV()*ui*.5),m=(this._sphericalEnd.radius-f-this._sphericalEnd.radius)/this._sphericalEnd.radius,F=Ze.copy(this._targetEnd).add(d.multiplyScalar(this._dollyControlCoord.x*T*I.aspect)).add(E.multiplyScalar(this._dollyControlCoord.y*T)),R=ht.copy(this._targetEnd).lerp(F,m),S=this._lastDollyDirection===Xe.IN&&this._spherical.radius<=this.minDistance,O=this._lastDollyDirection===Xe.OUT&&this.maxDistance<=this._spherical.radius;if(this.infinityDolly&&(S||O)){this._sphericalEnd.radius-=f,this._spherical.radius-=f;const w=dt.copy(u).multiplyScalar(-f);R.add(w)}this._boundary.clampPoint(R,R);const y=dt.subVectors(R,this._targetEnd);this._targetEnd.copy(R),this._target.add(y),this._changedDolly-=f,gt(this._changedDolly)&&(this._changedDolly=0)}else if(Re(this._camera)&&this._changedZoom!==0){const f=this._zoom-this._lastZoom,I=this._camera,u=ht.set(this._dollyControlCoord.x,this._dollyControlCoord.y,(I.near+I.far)/(I.near-I.far)).unproject(I),d=dt.set(0,0,-1).applyQuaternion(I.quaternion),E=Ze.copy(u).add(d.multiplyScalar(-u.dot(I.up))),p=-(this._zoom-f-this._zoom)/this._zoom,m=this._getCameraDirection(di),F=this._targetEnd.dot(m),R=ht.copy(this._targetEnd).lerp(E,p),S=R.dot(m),O=m.multiplyScalar(S-F);R.sub(O),this._boundary.clampPoint(R,R);const y=dt.subVectors(R,this._targetEnd);this._targetEnd.copy(R),this._target.add(y),this._changedZoom-=f,gt(this._changedZoom)&&(this._changedZoom=0)}}this._camera.zoom!==this._zoom&&(this._camera.zoom=this._zoom,this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0),this._dragNeedsUpdate=!0;const a=this._collisionTest();this._spherical.radius=Math.min(this._spherical.radius,a),this._spherical.makeSafe(),this._camera.position.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(this._target),this._camera.lookAt(this._target),(!gt(this._focalOffset.x)||!gt(this._focalOffset.y)||!gt(this._focalOffset.z))&&(this._camera.updateMatrixWorld(),re.setFromMatrixColumn(this._camera.matrix,0),oe.setFromMatrixColumn(this._camera.matrix,1),_e.setFromMatrixColumn(this._camera.matrix,2),re.multiplyScalar(this._focalOffset.x),oe.multiplyScalar(-this._focalOffset.y),_e.multiplyScalar(this._focalOffset.z),ht.copy(re).add(oe).add(_e),this._camera.position.add(ht)),this._boundaryEnclosesCamera&&this._encloseToBoundary(this._camera.position.copy(this._target),ht.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse),1);const h=this._needsUpdate;return h&&!this._updatedLastTime?(this._hasRested=!1,this.dispatchEvent({type:"wake"}),this.dispatchEvent({type:"update"})):h?(this.dispatchEvent({type:"update"}),gt(t,this.restThreshold)&&gt(e,this.restThreshold)&&gt(s,this.restThreshold)&&gt(n.x,this.restThreshold)&&gt(n.y,this.restThreshold)&&gt(n.z,this.restThreshold)&&gt(r.x,this.restThreshold)&&gt(r.y,this.restThreshold)&&gt(r.z,this.restThreshold)&&gt(o,this.restThreshold)&&!this._hasRested&&(this._hasRested=!0,this.dispatchEvent({type:"rest"}))):!h&&this._updatedLastTime&&this.dispatchEvent({type:"sleep"}),this._lastDistance=this._spherical.radius,this._lastZoom=this._zoom,this._updatedLastTime=h,this._needsUpdate=!1,h}toJSON(){return JSON.stringify({enabled:this._enabled,minDistance:this.minDistance,maxDistance:fi(this.maxDistance),minZoom:this.minZoom,maxZoom:fi(this.maxZoom),minPolarAngle:this.minPolarAngle,maxPolarAngle:fi(this.maxPolarAngle),minAzimuthAngle:fi(this.minAzimuthAngle),maxAzimuthAngle:fi(this.maxAzimuthAngle),smoothTime:this.smoothTime,draggingSmoothTime:this.draggingSmoothTime,dollySpeed:this.dollySpeed,truckSpeed:this.truckSpeed,dollyToCursor:this.dollyToCursor,verticalDragToForward:this.verticalDragToForward,target:this._targetEnd.toArray(),position:ht.setFromSpherical(this._sphericalEnd).add(this._targetEnd).toArray(),zoom:this._zoomEnd,focalOffset:this._focalOffsetEnd.toArray(),target0:this._target0.toArray(),position0:this._position0.toArray(),zoom0:this._zoom0,focalOffset0:this._focalOffset0.toArray()})}fromJSON(i,t=!1){const e=JSON.parse(i);this.enabled=e.enabled,this.minDistance=e.minDistance,this.maxDistance=Ii(e.maxDistance),this.minZoom=e.minZoom,this.maxZoom=Ii(e.maxZoom),this.minPolarAngle=e.minPolarAngle,this.maxPolarAngle=Ii(e.maxPolarAngle),this.minAzimuthAngle=Ii(e.minAzimuthAngle),this.maxAzimuthAngle=Ii(e.maxAzimuthAngle),this.smoothTime=e.smoothTime,this.draggingSmoothTime=e.draggingSmoothTime,this.dollySpeed=e.dollySpeed,this.truckSpeed=e.truckSpeed,this.dollyToCursor=e.dollyToCursor,this.verticalDragToForward=e.verticalDragToForward,this._target0.fromArray(e.target0),this._position0.fromArray(e.position0),this._zoom0=e.zoom0,this._focalOffset0.fromArray(e.focalOffset0),this.moveTo(e.target[0],e.target[1],e.target[2],t),kt.setFromVector3(ht.fromArray(e.position).sub(this._targetEnd).applyQuaternion(this._yAxisUpSpace)),this.rotateTo(kt.theta,kt.phi,t),this.dollyTo(kt.radius,t),this.zoomTo(e.zoom,t),this.setFocalOffset(e.focalOffset[0],e.focalOffset[1],e.focalOffset[2],t),this._needsUpdate=!0}connect(i){if(this._domElement){console.warn("camera-controls is already connected.");return}i.setAttribute("data-camera-controls-version",ac),this._addAllEventListeners(i),this._getClientRect(this._elementRect)}disconnect(){this.cancel(),this._removeAllEventListeners(),this._domElement&&(this._domElement.removeAttribute("data-camera-controls-version"),this._domElement=void 0)}dispose(){this.removeAllEventListeners(),this.disconnect()}_getTargetDirection(i){return i.setFromSpherical(this._spherical).divideScalar(this._spherical.radius).applyQuaternion(this._yAxisUpSpaceInverse)}_getCameraDirection(i){return this._getTargetDirection(i).negate()}_findPointerById(i){return this._activePointers.find(t=>t.pointerId===i)}_findPointerByMouseButton(i){return this._activePointers.find(t=>t.mouseButton===i)}_disposePointer(i){this._activePointers.splice(this._activePointers.indexOf(i),1)}_encloseToBoundary(i,t,e){const s=t.lengthSq();if(s===0)return i;const n=dt.copy(t).add(i),o=this._boundary.clampPoint(n,Ze).sub(n),a=o.lengthSq();if(a===0)return i.add(t);if(a===s)return i;if(e===0)return i.add(t).add(o);{const l=1+e*a/t.dot(o);return i.add(dt.copy(t).multiplyScalar(l)).add(o.multiplyScalar(1-e))}}_updateNearPlaneCorners(){if(Pe(this._camera)){const i=this._camera,t=i.near,e=i.getEffectiveFOV()*ui,s=Math.tan(e*.5)*t,n=s*i.aspect;this._nearPlaneCorners[0].set(-n,-s,0),this._nearPlaneCorners[1].set(n,-s,0),this._nearPlaneCorners[2].set(n,s,0),this._nearPlaneCorners[3].set(-n,s,0)}else if(Re(this._camera)){const i=this._camera,t=1/i.zoom,e=i.left*t,s=i.right*t,n=i.top*t,r=i.bottom*t;this._nearPlaneCorners[0].set(e,n,0),this._nearPlaneCorners[1].set(s,n,0),this._nearPlaneCorners[2].set(s,r,0),this._nearPlaneCorners[3].set(e,r,0)}}_collisionTest(){let i=1/0;if(!(this.colliderMeshes.length>=1)||on(this._camera,"_collisionTest"))return i;const e=this._getTargetDirection(di);hn.lookAt(pr,e,this._camera.up);for(let s=0;s<4;s++){const n=dt.copy(this._nearPlaneCorners[s]);n.applyMatrix4(hn);const r=Ze.addVectors(this._target,n);is.set(r,e),is.far=this._spherical.radius+1;const o=is.intersectObjects(this.colliderMeshes);o.length!==0&&o[0].distance<i&&(i=o[0].distance)}return i}_getClientRect(i){if(!this._domElement)return;const t=this._domElement.getBoundingClientRect();return i.x=t.left,i.y=t.top,this._viewport?(i.x+=this._viewport.x,i.y+=t.height-this._viewport.w-this._viewport.y,i.width=this._viewport.z,i.height=this._viewport.w):(i.width=t.width,i.height=t.height),i}_createOnRestPromise(i){return i?Promise.resolve():(this._hasRested=!1,this.dispatchEvent({type:"transitionstart"}),new Promise(t=>{const e=()=>{this.removeEventListener("rest",e),t()};this.addEventListener("rest",e)}))}_addAllEventListeners(i){}_removeAllEventListeners(){}get dampingFactor(){return console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead."),0}set dampingFactor(i){console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead.")}get draggingDampingFactor(){return console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead."),0}set draggingDampingFactor(i){console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead.")}static createBoundingSphere(i,t=new ct.Sphere){const e=t,s=e.center;je.makeEmpty(),i.traverseVisible(r=>{r.isMesh&&je.expandByObject(r)}),je.getCenter(s);let n=0;return i.traverseVisible(r=>{if(!r.isMesh)return;const o=r,a=o.geometry.clone();a.applyMatrix4(o.matrixWorld);const h=a.attributes.position;for(let f=0,I=h.count;f<I;f++)ht.fromBufferAttribute(h,f),n=Math.max(n,s.distanceToSquared(ht))}),e.radius=Math.sqrt(n),e}}class Je extends Yr{constructor(t){super(t);C(this,"onBeforeUpdate",new q);C(this,"onAfterUpdate",new q);C(this,"onAspectUpdated",new q);C(this,"onDisposed",new q);C(this,"three");C(this,"_allControls",new Map);C(this,"updateAspect",()=>{var t;if(!(!this.currentWorld||!this.currentWorld.renderer)){if(this.three instanceof b.OrthographicCamera){this.onAspectUpdated.trigger();return}if((t=this.currentWorld.renderer)!=null&&t.isResizeable()){const e=this.currentWorld.renderer.getSize();this.three.aspect=e.width/e.height,this.three.updateProjectionMatrix(),this.onAspectUpdated.trigger()}}});this.three=this.setupCamera(),this.setupEvents(!0),this.onWorldChanged.add(({action:e,world:s})=>{if(e==="added"){const n=this.newCameraControls();this._allControls.set(s.uuid,n)}if(e==="removed"){const n=this._allControls.get(s.uuid);n&&(n.dispose(),this._allControls.delete(s.uuid))}})}get controls(){if(!this.currentWorld)throw new Error("This camera needs a world to work!");const t=this._allControls.get(this.currentWorld.uuid);if(!t)throw new Error("Controls not found!");return t}get enabled(){return this.currentWorld===null?!1:this.controls.enabled}set enabled(t){this.currentWorld!==null&&(this.controls.enabled=t)}dispose(){this.setupEvents(!1),this.onAspectUpdated.reset(),this.onBeforeUpdate.reset(),this.onAfterUpdate.reset(),this.three.removeFromParent(),this.onDisposed.trigger(),this.onDisposed.reset();for(const[t,e]of this._allControls)e.dispose()}update(t){this.enabled&&(this.onBeforeUpdate.trigger(this),this.controls.update(t),this.onAfterUpdate.trigger(this))}setupCamera(){const t=window.innerWidth/window.innerHeight,e=new b.PerspectiveCamera(60,t,1,1e3);return e.position.set(50,50,50),e.lookAt(new b.Vector3(0,0,0)),e}newCameraControls(){if(!this.currentWorld)throw new Error("This camera needs a world to work!");if(!this.currentWorld.renderer)throw new Error("This camera needs a renderer to work!");bt.install({THREE:Je.getSubsetOfThree()});const{domElement:t}=this.currentWorld.renderer.three,e=new bt(this.three,t);return e.smoothTime=.2,e.dollyToCursor=!0,e.infinityDolly=!0,e.minDistance=6,e}setupEvents(t){t?window.addEventListener("resize",this.updateAspect):window.removeEventListener("resize",this.updateAspect)}static getSubsetOfThree(){return{MOUSE:b.MOUSE,Vector2:b.Vector2,Vector3:b.Vector3,Vector4:b.Vector4,Quaternion:b.Quaternion,Matrix4:b.Matrix4,Spherical:b.Spherical,Box3:b.Box3,Sphere:b.Sphere,Raycaster:b.Raycaster,MathUtils:b.MathUtils}}}const As=class As extends mt{constructor(t){super(t);C(this,"onAfterUpdate",new q);C(this,"onBeforeUpdate",new q);C(this,"onDisposed",new q);C(this,"list",new Qt);C(this,"enabled",!0);t.add(As.uuid,this)}create(){const t=new Hr(this.components),e=t.uuid;if(this.list.has(e))throw new Error("There is already a world with this name!");return this.list.set(e,t),t}delete(t){if(!this.list.has(t.uuid))throw new Error("The provided world is not found in the list!");this.list.delete(t.uuid),t.dispose()}dispose(){this.enabled=!1;for(const[t,e]of this.list)e.dispose();this.list.clear(),this.onDisposed.trigger()}update(t){if(this.enabled)for(const[e,s]of this.list)s.update(t)}};C(As,"uuid","fdb61dc4-2ec1-4966-b83d-54ea795fad4a");let Pi=As;function hc(c,i,t,e){return new Promise((s,n)=>{function r(){const o=c.clientWaitSync(i,t,0);if(o===c.WAIT_FAILED){n();return}if(o===c.TIMEOUT_EXPIRED){setTimeout(r,e);return}s()}r()})}async function uc(c,i,t,e,s,n,r){const o=c.fenceSync(c.SYNC_GPU_COMMANDS_COMPLETE,0);c.flush(),await hc(c,o,0,10),c.deleteSync(o),c.bindBuffer(i,t),c.getBufferSubData(i,e,s,n,r),c.bindBuffer(i,null)}async function Bn(c,i,t,e,s,n,r,o){const a=c.createBuffer();return c.bindBuffer(c.PIXEL_PACK_BUFFER,a),c.bufferData(c.PIXEL_PACK_BUFFER,o.byteLength,c.STREAM_READ),c.readPixels(i,t,e,s,n,r,0),c.bindBuffer(c.PIXEL_PACK_BUFFER,null),await uc(c,c.PIXEL_PACK_BUFFER,a,0,o),c.deleteBuffer(a),o}class fc extends ye{constructor(){super(...arguments);C(this,"_config",{enabled:{value:!0,type:"Boolean"},width:{type:"Number",interpolable:!0,value:512,min:32,max:1024},height:{type:"Number",interpolable:!0,value:512,min:32,max:1024},autoUpdate:{value:!0,type:"Boolean"},renderDebugFrame:{value:!1,type:"Boolean"},updateInterval:{type:"Number",interpolable:!0,value:1,min:0,max:1},threshold:{type:"Number",interpolable:!0,value:100,min:1,max:512}});C(this,"_interval",null)}get enabled(){return this._config.enabled.value}set enabled(t){this._config.enabled.value=t,this._component.enabled=t}get width(){return this._config.width.value}set width(t){this.setWidthHeight(t,this.height)}get height(){return this._config.height.value}set height(t){this.setWidthHeight(this.width,t)}get autoUpdate(){return this._config.autoUpdate.value}set autoUpdate(t){this.setAutoAndInterval(t,this.updateInterval)}get updateInterval(){return this._config.updateInterval.value}set updateInterval(t){this.setAutoAndInterval(this.autoUpdate,t)}get renderDebugFrame(){return this._config.renderDebugFrame.value}set renderDebugFrame(t){this._config.renderDebugFrame.value=t}get threshold(){return this._config.threshold.value}set threshold(t){this._config.threshold.value=t}setWidthHeight(t,e){if(t<=0||e<=0)throw new Error("The width and height of the culler renderer must be more than 0!");this._config.width.value=t,this._config.height.value=e,this.resetRenderTarget()}setAutoAndInterval(t,e){if(e<=0)throw new Error("The updateInterval of the culler renderer must be more than 0!");this._config.autoUpdate.value=t,this._config.updateInterval.value=e,this.resetInterval(t)}resetRenderTarget(){this._component.renderTarget.dispose(),this._component.renderTarget=new b.WebGLRenderTarget(this.width,this.height),this._component.bufferSize=this.width*this.height*4,this._component.buffer=new Uint8Array(this._component.bufferSize)}resetInterval(t){this._interval!==null&&window.clearInterval(this._interval),t&&(this._interval=window.setInterval(async()=>{this._component.preventUpdate||await this._component.updateVisibility()},this.updateInterval))}}class jr{constructor(i,t){C(this,"onSetup",new q);C(this,"onDisposed",new q);C(this,"onViewUpdated",new fe);C(this,"enabled",!0);C(this,"needsUpdate",!1);C(this,"components");C(this,"renderTarget",new b.WebGLRenderTarget);C(this,"bufferSize",1);C(this,"buffer",new Uint8Array);C(this,"preventUpdate",!1);C(this,"config");C(this,"isSetup",!1);C(this,"world");C(this,"renderer");C(this,"_defaultConfig",{enabled:!0,height:512,width:512,updateInterval:1e3,autoUpdate:!0,renderDebugFrame:!1,threshold:100});C(this,"worker");C(this,"scene",new b.Scene);C(this,"_availableColor",1);C(this,"_isWorkerBusy",!1);C(this,"updateVisibility",async i=>{if(!this.enabled||!this.needsUpdate&&!i||this._isWorkerBusy)return;this._isWorkerBusy=!0;const t=this.world.camera.three;t.updateMatrix();const{width:e,height:s}=this.config;this.renderer.setSize(e,s),this.renderer.setRenderTarget(this.renderTarget),this.renderer.render(this.scene,t);const n=this.renderer.getContext();await Bn(n,0,0,e,s,n.RGBA,n.UNSIGNED_BYTE,this.buffer),this.renderer.setRenderTarget(null),this.config.renderDebugFrame&&this.renderer.render(this.scene,t),this.worker.postMessage({buffer:this.buffer}),this.needsUpdate=!1});if(!t.renderer)throw new Error("The given world must have a renderer!");this.components=i,this.config=new fc(this,this.components,"Culler renderer"),this.world=t,this.renderer=new b.WebGLRenderer,this.renderer.clippingPlanes=t.renderer.clippingPlanes;const e=`
10
+ */const lt={LEFT:1,RIGHT:2,MIDDLE:4},W=Object.freeze({NONE:0,ROTATE:1,TRUCK:2,OFFSET:4,DOLLY:8,ZOOM:16,TOUCH_ROTATE:32,TOUCH_TRUCK:64,TOUCH_OFFSET:128,TOUCH_DOLLY:256,TOUCH_ZOOM:512,TOUCH_DOLLY_TRUCK:1024,TOUCH_DOLLY_OFFSET:2048,TOUCH_DOLLY_ROTATE:4096,TOUCH_ZOOM_TRUCK:8192,TOUCH_ZOOM_OFFSET:16384,TOUCH_ZOOM_ROTATE:32768}),Xe={NONE:0,IN:1,OUT:-1};function Pe(c){return c.isPerspectiveCamera}function Re(c){return c.isOrthographicCamera}const $e=Math.PI*2,Ir=Math.PI/2,$r=1e-5,ui=Math.PI/180;function te(c,i,t){return Math.max(i,Math.min(t,c))}function gt(c,i=$r){return Math.abs(c)<i}function Et(c,i,t=$r){return gt(c-i,t)}function dr(c,i){return Math.round(c/i)*i}function fi(c){return isFinite(c)?c:c<0?-Number.MAX_VALUE:Number.MAX_VALUE}function Ii(c){return Math.abs(c)<Number.MAX_VALUE?c:c*(1/0)}function Ji(c,i,t,e,s=1/0,n){e=Math.max(1e-4,e);const r=2/e,o=r*n,a=1/(1+o+.48*o*o+.235*o*o*o);let l=c-i;const h=i,f=s*e;l=te(l,-f,f),i=c-l;const I=(t.value+r*l)*n;t.value=(t.value-r*I)*a;let u=i+(l+I)*a;return h-c>0==u>h&&(u=h,t.value=(u-h)/n),u}function Er(c,i,t,e,s=1/0,n,r){e=Math.max(1e-4,e);const o=2/e,a=o*n,l=1/(1+a+.48*a*a+.235*a*a*a);let h=i.x,f=i.y,I=i.z,u=c.x-h,d=c.y-f,E=c.z-I;const T=h,p=f,m=I,F=s*e,R=F*F,S=u*u+d*d+E*E;if(S>R){const U=Math.sqrt(S);u=u/U*F,d=d/U*F,E=E/U*F}h=c.x-u,f=c.y-d,I=c.z-E;const O=(t.x+o*u)*n,y=(t.y+o*d)*n,w=(t.z+o*E)*n;t.x=(t.x-o*O)*l,t.y=(t.y-o*y)*l,t.z=(t.z-o*w)*l,r.x=h+(u+O)*l,r.y=f+(d+y)*l,r.z=I+(E+w)*l;const P=T-c.x,v=p-c.y,G=m-c.z,N=r.x-T,D=r.y-p,g=r.z-m;return P*N+v*D+G*g>0&&(r.x=T,r.y=p,r.z=m,t.x=(r.x-T)/n,t.y=(r.y-p)/n,t.z=(r.z-m)/n),r}function rn(c,i){i.set(0,0),c.forEach(t=>{i.x+=t.clientX,i.y+=t.clientY}),i.x/=c.length,i.y/=c.length}function on(c,i){return Re(c)?(console.warn(`${i} is not supported in OrthographicCamera`),!0):!1}class oc{constructor(){this._listeners={}}addEventListener(i,t){const e=this._listeners;e[i]===void 0&&(e[i]=[]),e[i].indexOf(t)===-1&&e[i].push(t)}hasEventListener(i,t){const e=this._listeners;return e[i]!==void 0&&e[i].indexOf(t)!==-1}removeEventListener(i,t){const s=this._listeners[i];if(s!==void 0){const n=s.indexOf(t);n!==-1&&s.splice(n,1)}}removeAllEventListeners(i){if(!i){this._listeners={};return}Array.isArray(this._listeners[i])&&(this._listeners[i].length=0)}dispatchEvent(i){const e=this._listeners[i.type];if(e!==void 0){i.target=this;const s=e.slice(0);for(let n=0,r=s.length;n<r;n++)s[n].call(this,i)}}}const ac="2.7.3",ts=1/8,Zr=typeof window<"u",cc=Zr&&/Mac/.test(navigator.platform),lc=!(Zr&&"PointerEvent"in window);let ct,pr,es,an,Bt,ht,dt,Ze,di,re,oe,_e,Cr,Tr,kt,Ei,je,mr,cn,Rr,ln,hn,is;class bt extends oc{static install(i){ct=i.THREE,pr=Object.freeze(new ct.Vector3(0,0,0)),es=Object.freeze(new ct.Vector3(0,1,0)),an=Object.freeze(new ct.Vector3(0,0,1)),Bt=new ct.Vector2,ht=new ct.Vector3,dt=new ct.Vector3,Ze=new ct.Vector3,di=new ct.Vector3,re=new ct.Vector3,oe=new ct.Vector3,_e=new ct.Vector3,Cr=new ct.Vector3,Tr=new ct.Vector3,kt=new ct.Spherical,Ei=new ct.Spherical,je=new ct.Box3,mr=new ct.Box3,cn=new ct.Sphere,Rr=new ct.Quaternion,ln=new ct.Quaternion,hn=new ct.Matrix4,is=new ct.Raycaster}static get ACTION(){return W}constructor(i,t){super(),this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.minDistance=Number.EPSILON,this.maxDistance=1/0,this.infinityDolly=!1,this.minZoom=.01,this.maxZoom=1/0,this.smoothTime=.25,this.draggingSmoothTime=.125,this.maxSpeed=1/0,this.azimuthRotateSpeed=1,this.polarRotateSpeed=1,this.dollySpeed=1,this.dollyDragInverted=!1,this.truckSpeed=2,this.dollyToCursor=!1,this.dragToOffset=!1,this.verticalDragToForward=!1,this.boundaryFriction=0,this.restThreshold=.01,this.colliderMeshes=[],this.cancel=()=>{},this._enabled=!0,this._state=W.NONE,this._viewport=null,this._changedDolly=0,this._changedZoom=0,this._hasRested=!0,this._boundaryEnclosesCamera=!1,this._needsUpdate=!0,this._updatedLastTime=!1,this._elementRect=new DOMRect,this._isDragging=!1,this._dragNeedsUpdate=!0,this._activePointers=[],this._lockedPointer=null,this._interactiveArea=new DOMRect(0,0,1,1),this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._isUserControllingOffset=!1,this._isUserControllingZoom=!1,this._lastDollyDirection=Xe.NONE,this._thetaVelocity={value:0},this._phiVelocity={value:0},this._radiusVelocity={value:0},this._targetVelocity=new ct.Vector3,this._focalOffsetVelocity=new ct.Vector3,this._zoomVelocity={value:0},this._truckInternal=(R,S,O)=>{let y,w;if(Pe(this._camera)){const P=ht.copy(this._camera.position).sub(this._target),v=this._camera.getEffectiveFOV()*ui,G=P.length()*Math.tan(v*.5);y=this.truckSpeed*R*G/this._elementRect.height,w=this.truckSpeed*S*G/this._elementRect.height}else if(Re(this._camera)){const P=this._camera;y=R*(P.right-P.left)/P.zoom/this._elementRect.width,w=S*(P.top-P.bottom)/P.zoom/this._elementRect.height}else return;this.verticalDragToForward?(O?this.setFocalOffset(this._focalOffsetEnd.x+y,this._focalOffsetEnd.y,this._focalOffsetEnd.z,!0):this.truck(y,0,!0),this.forward(-w,!0)):O?this.setFocalOffset(this._focalOffsetEnd.x+y,this._focalOffsetEnd.y+w,this._focalOffsetEnd.z,!0):this.truck(y,w,!0)},this._rotateInternal=(R,S)=>{const O=$e*this.azimuthRotateSpeed*R/this._elementRect.height,y=$e*this.polarRotateSpeed*S/this._elementRect.height;this.rotate(O,y,!0)},this._dollyInternal=(R,S,O)=>{const y=Math.pow(.95,-R*this.dollySpeed),w=this._sphericalEnd.radius,P=this._sphericalEnd.radius*y,v=te(P,this.minDistance,this.maxDistance),G=v-P;this.infinityDolly&&this.dollyToCursor?this._dollyToNoClamp(P,!0):this.infinityDolly&&!this.dollyToCursor?(this.dollyInFixed(G,!0),this._dollyToNoClamp(v,!0)):this._dollyToNoClamp(v,!0),this.dollyToCursor&&(this._changedDolly+=(this.infinityDolly?P:v)-w,this._dollyControlCoord.set(S,O)),this._lastDollyDirection=Math.sign(-R)},this._zoomInternal=(R,S,O)=>{const y=Math.pow(.95,R*this.dollySpeed),w=this._zoom,P=this._zoom*y;this.zoomTo(P,!0),this.dollyToCursor&&(this._changedZoom+=P-w,this._dollyControlCoord.set(S,O))},typeof ct>"u"&&console.error("camera-controls: `THREE` is undefined. You must first run `CameraControls.install( { THREE: THREE } )`. Check the docs for further information."),this._camera=i,this._yAxisUpSpace=new ct.Quaternion().setFromUnitVectors(this._camera.up,es),this._yAxisUpSpaceInverse=this._yAxisUpSpace.clone().invert(),this._state=W.NONE,this._target=new ct.Vector3,this._targetEnd=this._target.clone(),this._focalOffset=new ct.Vector3,this._focalOffsetEnd=this._focalOffset.clone(),this._spherical=new ct.Spherical().setFromVector3(ht.copy(this._camera.position).applyQuaternion(this._yAxisUpSpace)),this._sphericalEnd=this._spherical.clone(),this._lastDistance=this._spherical.radius,this._zoom=this._camera.zoom,this._zoomEnd=this._zoom,this._lastZoom=this._zoom,this._nearPlaneCorners=[new ct.Vector3,new ct.Vector3,new ct.Vector3,new ct.Vector3],this._updateNearPlaneCorners(),this._boundary=new ct.Box3(new ct.Vector3(-1/0,-1/0,-1/0),new ct.Vector3(1/0,1/0,1/0)),this._cameraUp0=this._camera.up.clone(),this._target0=this._target.clone(),this._position0=this._camera.position.clone(),this._zoom0=this._zoom,this._focalOffset0=this._focalOffset.clone(),this._dollyControlCoord=new ct.Vector2,this.mouseButtons={left:W.ROTATE,middle:W.DOLLY,right:W.TRUCK,wheel:Pe(this._camera)?W.DOLLY:Re(this._camera)?W.ZOOM:W.NONE},this.touches={one:W.TOUCH_ROTATE,two:Pe(this._camera)?W.TOUCH_DOLLY_TRUCK:Re(this._camera)?W.TOUCH_ZOOM_TRUCK:W.NONE,three:W.TOUCH_TRUCK};const e=new ct.Vector2,s=new ct.Vector2,n=new ct.Vector2,r=R=>{if(!this._enabled||!this._domElement)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const y=this._domElement.getBoundingClientRect(),w=R.clientX/y.width,P=R.clientY/y.height;if(w<this._interactiveArea.left||w>this._interactiveArea.right||P<this._interactiveArea.top||P>this._interactiveArea.bottom)return}const S=R.pointerType!=="mouse"?null:(R.buttons&lt.LEFT)===lt.LEFT?lt.LEFT:(R.buttons&lt.MIDDLE)===lt.MIDDLE?lt.MIDDLE:(R.buttons&lt.RIGHT)===lt.RIGHT?lt.RIGHT:null;if(S!==null){const y=this._findPointerByMouseButton(S);y&&this._disposePointer(y)}if((R.buttons&lt.LEFT)===lt.LEFT&&this._lockedPointer)return;const O={pointerId:R.pointerId,clientX:R.clientX,clientY:R.clientY,deltaX:0,deltaY:0,mouseButton:S};this._activePointers.push(O),this._domElement.ownerDocument.removeEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h),this._domElement.ownerDocument.addEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",h),this._isDragging=!0,E(R)},o=R=>{if(!this._enabled||!this._domElement||this._lockedPointer)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const y=this._domElement.getBoundingClientRect(),w=R.clientX/y.width,P=R.clientY/y.height;if(w<this._interactiveArea.left||w>this._interactiveArea.right||P<this._interactiveArea.top||P>this._interactiveArea.bottom)return}const S=(R.buttons&lt.LEFT)===lt.LEFT?lt.LEFT:(R.buttons&lt.MIDDLE)===lt.MIDDLE?lt.MIDDLE:(R.buttons&lt.RIGHT)===lt.RIGHT?lt.RIGHT:null;if(S!==null){const y=this._findPointerByMouseButton(S);y&&this._disposePointer(y)}const O={pointerId:1,clientX:R.clientX,clientY:R.clientY,deltaX:0,deltaY:0,mouseButton:(R.buttons&lt.LEFT)===lt.LEFT?lt.LEFT:(R.buttons&lt.MIDDLE)===lt.LEFT?lt.MIDDLE:(R.buttons&lt.RIGHT)===lt.LEFT?lt.RIGHT:null};this._activePointers.push(O),this._domElement.ownerDocument.removeEventListener("mousemove",l),this._domElement.ownerDocument.removeEventListener("mouseup",f),this._domElement.ownerDocument.addEventListener("mousemove",l),this._domElement.ownerDocument.addEventListener("mouseup",f),this._isDragging=!0,E(R)},a=R=>{R.cancelable&&R.preventDefault();const S=R.pointerId,O=this._lockedPointer||this._findPointerById(S);if(O){if(O.clientX=R.clientX,O.clientY=R.clientY,O.deltaX=R.movementX,O.deltaY=R.movementY,this._state=0,R.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else(!this._isDragging&&this._lockedPointer||this._isDragging&&(R.buttons&lt.LEFT)===lt.LEFT)&&(this._state=this._state|this.mouseButtons.left),this._isDragging&&(R.buttons&lt.MIDDLE)===lt.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),this._isDragging&&(R.buttons&lt.RIGHT)===lt.RIGHT&&(this._state=this._state|this.mouseButtons.right);T()}},l=R=>{const S=this._lockedPointer||this._findPointerById(1);S&&(S.clientX=R.clientX,S.clientY=R.clientY,S.deltaX=R.movementX,S.deltaY=R.movementY,this._state=0,(this._lockedPointer||(R.buttons&lt.LEFT)===lt.LEFT)&&(this._state=this._state|this.mouseButtons.left),(R.buttons&lt.MIDDLE)===lt.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),(R.buttons&lt.RIGHT)===lt.RIGHT&&(this._state=this._state|this.mouseButtons.right),T())},h=R=>{const S=this._findPointerById(R.pointerId);if(!(S&&S===this._lockedPointer)){if(S&&this._disposePointer(S),R.pointerType==="touch")switch(this._activePointers.length){case 0:this._state=W.NONE;break;case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else this._state=W.NONE;p()}},f=()=>{const R=this._findPointerById(1);R&&R===this._lockedPointer||(R&&this._disposePointer(R),this._state=W.NONE,p())};let I=-1;const u=R=>{if(!this._domElement||!this._enabled||this.mouseButtons.wheel===W.NONE)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const P=this._domElement.getBoundingClientRect(),v=R.clientX/P.width,G=R.clientY/P.height;if(v<this._interactiveArea.left||v>this._interactiveArea.right||G<this._interactiveArea.top||G>this._interactiveArea.bottom)return}if(R.preventDefault(),this.dollyToCursor||this.mouseButtons.wheel===W.ROTATE||this.mouseButtons.wheel===W.TRUCK){const P=performance.now();I-P<1e3&&this._getClientRect(this._elementRect),I=P}const S=cc?-1:-3,O=R.deltaMode===1?R.deltaY/S:R.deltaY/(S*10),y=this.dollyToCursor?(R.clientX-this._elementRect.x)/this._elementRect.width*2-1:0,w=this.dollyToCursor?(R.clientY-this._elementRect.y)/this._elementRect.height*-2+1:0;switch(this.mouseButtons.wheel){case W.ROTATE:{this._rotateInternal(R.deltaX,R.deltaY),this._isUserControllingRotate=!0;break}case W.TRUCK:{this._truckInternal(R.deltaX,R.deltaY,!1),this._isUserControllingTruck=!0;break}case W.OFFSET:{this._truckInternal(R.deltaX,R.deltaY,!0),this._isUserControllingOffset=!0;break}case W.DOLLY:{this._dollyInternal(-O,y,w),this._isUserControllingDolly=!0;break}case W.ZOOM:{this._zoomInternal(-O,y,w),this._isUserControllingZoom=!0;break}}this.dispatchEvent({type:"control"})},d=R=>{if(!(!this._domElement||!this._enabled)){if(this.mouseButtons.right===bt.ACTION.NONE){const S=R instanceof PointerEvent?R.pointerId:(R instanceof MouseEvent,0),O=this._findPointerById(S);O&&this._disposePointer(O),this._domElement.ownerDocument.removeEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h),this._domElement.ownerDocument.removeEventListener("mousemove",l),this._domElement.ownerDocument.removeEventListener("mouseup",f);return}R.preventDefault()}},E=R=>{if(!this._enabled)return;if(rn(this._activePointers,Bt),this._getClientRect(this._elementRect),e.copy(Bt),s.copy(Bt),this._activePointers.length>=2){const O=Bt.x-this._activePointers[1].clientX,y=Bt.y-this._activePointers[1].clientY,w=Math.sqrt(O*O+y*y);n.set(0,w);const P=(this._activePointers[0].clientX+this._activePointers[1].clientX)*.5,v=(this._activePointers[0].clientY+this._activePointers[1].clientY)*.5;s.set(P,v)}if(this._state=0,!R)this._lockedPointer&&(this._state=this._state|this.mouseButtons.left);else if("pointerType"in R&&R.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else!this._lockedPointer&&(R.buttons&lt.LEFT)===lt.LEFT&&(this._state=this._state|this.mouseButtons.left),(R.buttons&lt.MIDDLE)===lt.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),(R.buttons&lt.RIGHT)===lt.RIGHT&&(this._state=this._state|this.mouseButtons.right);((this._state&W.ROTATE)===W.ROTATE||(this._state&W.TOUCH_ROTATE)===W.TOUCH_ROTATE||(this._state&W.TOUCH_DOLLY_ROTATE)===W.TOUCH_DOLLY_ROTATE||(this._state&W.TOUCH_ZOOM_ROTATE)===W.TOUCH_ZOOM_ROTATE)&&(this._sphericalEnd.theta=this._spherical.theta,this._sphericalEnd.phi=this._spherical.phi,this._thetaVelocity.value=0,this._phiVelocity.value=0),((this._state&W.TRUCK)===W.TRUCK||(this._state&W.TOUCH_TRUCK)===W.TOUCH_TRUCK||(this._state&W.TOUCH_DOLLY_TRUCK)===W.TOUCH_DOLLY_TRUCK||(this._state&W.TOUCH_ZOOM_TRUCK)===W.TOUCH_ZOOM_TRUCK)&&(this._targetEnd.copy(this._target),this._targetVelocity.set(0,0,0)),((this._state&W.DOLLY)===W.DOLLY||(this._state&W.TOUCH_DOLLY)===W.TOUCH_DOLLY||(this._state&W.TOUCH_DOLLY_TRUCK)===W.TOUCH_DOLLY_TRUCK||(this._state&W.TOUCH_DOLLY_OFFSET)===W.TOUCH_DOLLY_OFFSET||(this._state&W.TOUCH_DOLLY_ROTATE)===W.TOUCH_DOLLY_ROTATE)&&(this._sphericalEnd.radius=this._spherical.radius,this._radiusVelocity.value=0),((this._state&W.ZOOM)===W.ZOOM||(this._state&W.TOUCH_ZOOM)===W.TOUCH_ZOOM||(this._state&W.TOUCH_ZOOM_TRUCK)===W.TOUCH_ZOOM_TRUCK||(this._state&W.TOUCH_ZOOM_OFFSET)===W.TOUCH_ZOOM_OFFSET||(this._state&W.TOUCH_ZOOM_ROTATE)===W.TOUCH_ZOOM_ROTATE)&&(this._zoomEnd=this._zoom,this._zoomVelocity.value=0),((this._state&W.OFFSET)===W.OFFSET||(this._state&W.TOUCH_OFFSET)===W.TOUCH_OFFSET||(this._state&W.TOUCH_DOLLY_OFFSET)===W.TOUCH_DOLLY_OFFSET||(this._state&W.TOUCH_ZOOM_OFFSET)===W.TOUCH_ZOOM_OFFSET)&&(this._focalOffsetEnd.copy(this._focalOffset),this._focalOffsetVelocity.set(0,0,0)),this.dispatchEvent({type:"controlstart"})},T=()=>{if(!this._enabled||!this._dragNeedsUpdate)return;this._dragNeedsUpdate=!1,rn(this._activePointers,Bt);const S=this._domElement&&document.pointerLockElement===this._domElement?this._lockedPointer||this._activePointers[0]:null,O=S?-S.deltaX:s.x-Bt.x,y=S?-S.deltaY:s.y-Bt.y;if(s.copy(Bt),((this._state&W.ROTATE)===W.ROTATE||(this._state&W.TOUCH_ROTATE)===W.TOUCH_ROTATE||(this._state&W.TOUCH_DOLLY_ROTATE)===W.TOUCH_DOLLY_ROTATE||(this._state&W.TOUCH_ZOOM_ROTATE)===W.TOUCH_ZOOM_ROTATE)&&(this._rotateInternal(O,y),this._isUserControllingRotate=!0),(this._state&W.DOLLY)===W.DOLLY||(this._state&W.ZOOM)===W.ZOOM){const w=this.dollyToCursor?(e.x-this._elementRect.x)/this._elementRect.width*2-1:0,P=this.dollyToCursor?(e.y-this._elementRect.y)/this._elementRect.height*-2+1:0,v=this.dollyDragInverted?-1:1;(this._state&W.DOLLY)===W.DOLLY?(this._dollyInternal(v*y*ts,w,P),this._isUserControllingDolly=!0):(this._zoomInternal(v*y*ts,w,P),this._isUserControllingZoom=!0)}if((this._state&W.TOUCH_DOLLY)===W.TOUCH_DOLLY||(this._state&W.TOUCH_ZOOM)===W.TOUCH_ZOOM||(this._state&W.TOUCH_DOLLY_TRUCK)===W.TOUCH_DOLLY_TRUCK||(this._state&W.TOUCH_ZOOM_TRUCK)===W.TOUCH_ZOOM_TRUCK||(this._state&W.TOUCH_DOLLY_OFFSET)===W.TOUCH_DOLLY_OFFSET||(this._state&W.TOUCH_ZOOM_OFFSET)===W.TOUCH_ZOOM_OFFSET||(this._state&W.TOUCH_DOLLY_ROTATE)===W.TOUCH_DOLLY_ROTATE||(this._state&W.TOUCH_ZOOM_ROTATE)===W.TOUCH_ZOOM_ROTATE){const w=Bt.x-this._activePointers[1].clientX,P=Bt.y-this._activePointers[1].clientY,v=Math.sqrt(w*w+P*P),G=n.y-v;n.set(0,v);const N=this.dollyToCursor?(s.x-this._elementRect.x)/this._elementRect.width*2-1:0,D=this.dollyToCursor?(s.y-this._elementRect.y)/this._elementRect.height*-2+1:0;(this._state&W.TOUCH_DOLLY)===W.TOUCH_DOLLY||(this._state&W.TOUCH_DOLLY_ROTATE)===W.TOUCH_DOLLY_ROTATE||(this._state&W.TOUCH_DOLLY_TRUCK)===W.TOUCH_DOLLY_TRUCK||(this._state&W.TOUCH_DOLLY_OFFSET)===W.TOUCH_DOLLY_OFFSET?(this._dollyInternal(G*ts,N,D),this._isUserControllingDolly=!0):(this._zoomInternal(G*ts,N,D),this._isUserControllingZoom=!0)}((this._state&W.TRUCK)===W.TRUCK||(this._state&W.TOUCH_TRUCK)===W.TOUCH_TRUCK||(this._state&W.TOUCH_DOLLY_TRUCK)===W.TOUCH_DOLLY_TRUCK||(this._state&W.TOUCH_ZOOM_TRUCK)===W.TOUCH_ZOOM_TRUCK)&&(this._truckInternal(O,y,!1),this._isUserControllingTruck=!0),((this._state&W.OFFSET)===W.OFFSET||(this._state&W.TOUCH_OFFSET)===W.TOUCH_OFFSET||(this._state&W.TOUCH_DOLLY_OFFSET)===W.TOUCH_DOLLY_OFFSET||(this._state&W.TOUCH_ZOOM_OFFSET)===W.TOUCH_ZOOM_OFFSET)&&(this._truckInternal(O,y,!0),this._isUserControllingOffset=!0),this.dispatchEvent({type:"control"})},p=()=>{rn(this._activePointers,Bt),s.copy(Bt),this._dragNeedsUpdate=!1,(this._activePointers.length===0||this._activePointers.length===1&&this._activePointers[0]===this._lockedPointer)&&(this._isDragging=!1),this._activePointers.length===0&&this._domElement&&(this._domElement.ownerDocument.removeEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.removeEventListener("mousemove",l),this._domElement.ownerDocument.removeEventListener("pointerup",h),this._domElement.ownerDocument.removeEventListener("mouseup",f),this.dispatchEvent({type:"controlend"}))};this.lockPointer=()=>{!this._enabled||!this._domElement||(this.cancel(),this._lockedPointer={pointerId:-1,clientX:0,clientY:0,deltaX:0,deltaY:0,mouseButton:null},this._activePointers.push(this._lockedPointer),this._domElement.ownerDocument.removeEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h),this._domElement.requestPointerLock(),this._domElement.ownerDocument.addEventListener("pointerlockchange",m),this._domElement.ownerDocument.addEventListener("pointerlockerror",F),this._domElement.ownerDocument.addEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",h),E())},this.unlockPointer=()=>{this._lockedPointer!==null&&(this._disposePointer(this._lockedPointer),this._lockedPointer=null),document.exitPointerLock(),this.cancel(),this._domElement&&(this._domElement.ownerDocument.removeEventListener("pointerlockchange",m),this._domElement.ownerDocument.removeEventListener("pointerlockerror",F))};const m=()=>{this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement||this.unlockPointer()},F=()=>{this.unlockPointer()};this._addAllEventListeners=R=>{this._domElement=R,this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none",this._domElement.addEventListener("pointerdown",r),lc&&this._domElement.addEventListener("mousedown",o),this._domElement.addEventListener("pointercancel",h),this._domElement.addEventListener("wheel",u,{passive:!1}),this._domElement.addEventListener("contextmenu",d)},this._removeAllEventListeners=()=>{this._domElement&&(this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect="",this._domElement.removeEventListener("pointerdown",r),this._domElement.removeEventListener("mousedown",o),this._domElement.removeEventListener("pointercancel",h),this._domElement.removeEventListener("wheel",u,{passive:!1}),this._domElement.removeEventListener("contextmenu",d),this._domElement.ownerDocument.removeEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.removeEventListener("mousemove",l),this._domElement.ownerDocument.removeEventListener("pointerup",h),this._domElement.ownerDocument.removeEventListener("mouseup",f),this._domElement.ownerDocument.removeEventListener("pointerlockchange",m),this._domElement.ownerDocument.removeEventListener("pointerlockerror",F))},this.cancel=()=>{this._state!==W.NONE&&(this._state=W.NONE,this._activePointers.length=0,p())},t&&this.connect(t),this.update(0)}get camera(){return this._camera}set camera(i){this._camera=i,this.updateCameraUp(),this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0}get enabled(){return this._enabled}set enabled(i){this._enabled=i,this._domElement&&(i?(this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none"):(this.cancel(),this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect=""))}get active(){return!this._hasRested}get currentAction(){return this._state}get distance(){return this._spherical.radius}set distance(i){this._spherical.radius===i&&this._sphericalEnd.radius===i||(this._spherical.radius=i,this._sphericalEnd.radius=i,this._needsUpdate=!0)}get azimuthAngle(){return this._spherical.theta}set azimuthAngle(i){this._spherical.theta===i&&this._sphericalEnd.theta===i||(this._spherical.theta=i,this._sphericalEnd.theta=i,this._needsUpdate=!0)}get polarAngle(){return this._spherical.phi}set polarAngle(i){this._spherical.phi===i&&this._sphericalEnd.phi===i||(this._spherical.phi=i,this._sphericalEnd.phi=i,this._needsUpdate=!0)}get boundaryEnclosesCamera(){return this._boundaryEnclosesCamera}set boundaryEnclosesCamera(i){this._boundaryEnclosesCamera=i,this._needsUpdate=!0}set interactiveArea(i){this._interactiveArea.width=te(i.width,0,1),this._interactiveArea.height=te(i.height,0,1),this._interactiveArea.x=te(i.x,0,1-this._interactiveArea.width),this._interactiveArea.y=te(i.y,0,1-this._interactiveArea.height)}addEventListener(i,t){super.addEventListener(i,t)}removeEventListener(i,t){super.removeEventListener(i,t)}rotate(i,t,e=!1){return this.rotateTo(this._sphericalEnd.theta+i,this._sphericalEnd.phi+t,e)}rotateAzimuthTo(i,t=!1){return this.rotateTo(i,this._sphericalEnd.phi,t)}rotatePolarTo(i,t=!1){return this.rotateTo(this._sphericalEnd.theta,i,t)}rotateTo(i,t,e=!1){this._isUserControllingRotate=!1;const s=te(i,this.minAzimuthAngle,this.maxAzimuthAngle),n=te(t,this.minPolarAngle,this.maxPolarAngle);this._sphericalEnd.theta=s,this._sphericalEnd.phi=n,this._sphericalEnd.makeSafe(),this._needsUpdate=!0,e||(this._spherical.theta=this._sphericalEnd.theta,this._spherical.phi=this._sphericalEnd.phi);const r=!e||Et(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&Et(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold);return this._createOnRestPromise(r)}dolly(i,t=!1){return this.dollyTo(this._sphericalEnd.radius-i,t)}dollyTo(i,t=!1){return this._isUserControllingDolly=!1,this._lastDollyDirection=Xe.NONE,this._changedDolly=0,this._dollyToNoClamp(te(i,this.minDistance,this.maxDistance),t)}_dollyToNoClamp(i,t=!1){const e=this._sphericalEnd.radius;if(this.colliderMeshes.length>=1){const r=this._collisionTest(),o=Et(r,this._spherical.radius);if(!(e>i)&&o)return Promise.resolve();this._sphericalEnd.radius=Math.min(i,r)}else this._sphericalEnd.radius=i;this._needsUpdate=!0,t||(this._spherical.radius=this._sphericalEnd.radius);const n=!t||Et(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(n)}dollyInFixed(i,t=!1){this._targetEnd.add(this._getCameraDirection(di).multiplyScalar(i)),t||this._target.copy(this._targetEnd);const e=!t||Et(this._target.x,this._targetEnd.x,this.restThreshold)&&Et(this._target.y,this._targetEnd.y,this.restThreshold)&&Et(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(e)}zoom(i,t=!1){return this.zoomTo(this._zoomEnd+i,t)}zoomTo(i,t=!1){this._isUserControllingZoom=!1,this._zoomEnd=te(i,this.minZoom,this.maxZoom),this._needsUpdate=!0,t||(this._zoom=this._zoomEnd);const e=!t||Et(this._zoom,this._zoomEnd,this.restThreshold);return this._changedZoom=0,this._createOnRestPromise(e)}pan(i,t,e=!1){return console.warn("`pan` has been renamed to `truck`"),this.truck(i,t,e)}truck(i,t,e=!1){this._camera.updateMatrix(),re.setFromMatrixColumn(this._camera.matrix,0),oe.setFromMatrixColumn(this._camera.matrix,1),re.multiplyScalar(i),oe.multiplyScalar(-t);const s=ht.copy(re).add(oe),n=dt.copy(this._targetEnd).add(s);return this.moveTo(n.x,n.y,n.z,e)}forward(i,t=!1){ht.setFromMatrixColumn(this._camera.matrix,0),ht.crossVectors(this._camera.up,ht),ht.multiplyScalar(i);const e=dt.copy(this._targetEnd).add(ht);return this.moveTo(e.x,e.y,e.z,t)}elevate(i,t=!1){return ht.copy(this._camera.up).multiplyScalar(i),this.moveTo(this._targetEnd.x+ht.x,this._targetEnd.y+ht.y,this._targetEnd.z+ht.z,t)}moveTo(i,t,e,s=!1){this._isUserControllingTruck=!1;const n=ht.set(i,t,e).sub(this._targetEnd);this._encloseToBoundary(this._targetEnd,n,this.boundaryFriction),this._needsUpdate=!0,s||this._target.copy(this._targetEnd);const r=!s||Et(this._target.x,this._targetEnd.x,this.restThreshold)&&Et(this._target.y,this._targetEnd.y,this.restThreshold)&&Et(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(r)}lookInDirectionOf(i,t,e,s=!1){const o=ht.set(i,t,e).sub(this._targetEnd).normalize().multiplyScalar(-this._sphericalEnd.radius);return this.setPosition(o.x,o.y,o.z,s)}fitToBox(i,t,{cover:e=!1,paddingLeft:s=0,paddingRight:n=0,paddingBottom:r=0,paddingTop:o=0}={}){const a=[],l=i.isBox3?je.copy(i):je.setFromObject(i);l.isEmpty()&&(console.warn("camera-controls: fitTo() cannot be used with an empty box. Aborting"),Promise.resolve());const h=dr(this._sphericalEnd.theta,Ir),f=dr(this._sphericalEnd.phi,Ir);a.push(this.rotateTo(h,f,t));const I=ht.setFromSpherical(this._sphericalEnd).normalize(),u=Rr.setFromUnitVectors(I,an),d=Et(Math.abs(I.y),1);d&&u.multiply(ln.setFromAxisAngle(es,h)),u.multiply(this._yAxisUpSpaceInverse);const E=mr.makeEmpty();dt.copy(l.min).applyQuaternion(u),E.expandByPoint(dt),dt.copy(l.min).setX(l.max.x).applyQuaternion(u),E.expandByPoint(dt),dt.copy(l.min).setY(l.max.y).applyQuaternion(u),E.expandByPoint(dt),dt.copy(l.max).setZ(l.min.z).applyQuaternion(u),E.expandByPoint(dt),dt.copy(l.min).setZ(l.max.z).applyQuaternion(u),E.expandByPoint(dt),dt.copy(l.max).setY(l.min.y).applyQuaternion(u),E.expandByPoint(dt),dt.copy(l.max).setX(l.min.x).applyQuaternion(u),E.expandByPoint(dt),dt.copy(l.max).applyQuaternion(u),E.expandByPoint(dt),E.min.x-=s,E.min.y-=r,E.max.x+=n,E.max.y+=o,u.setFromUnitVectors(an,I),d&&u.premultiply(ln.invert()),u.premultiply(this._yAxisUpSpace);const T=E.getSize(ht),p=E.getCenter(dt).applyQuaternion(u);if(Pe(this._camera)){const m=this.getDistanceToFitBox(T.x,T.y,T.z,e);a.push(this.moveTo(p.x,p.y,p.z,t)),a.push(this.dollyTo(m,t)),a.push(this.setFocalOffset(0,0,0,t))}else if(Re(this._camera)){const m=this._camera,F=m.right-m.left,R=m.top-m.bottom,S=e?Math.max(F/T.x,R/T.y):Math.min(F/T.x,R/T.y);a.push(this.moveTo(p.x,p.y,p.z,t)),a.push(this.zoomTo(S,t)),a.push(this.setFocalOffset(0,0,0,t))}return Promise.all(a)}fitToSphere(i,t){const e=[],n=i instanceof ct.Sphere?cn.copy(i):bt.createBoundingSphere(i,cn);if(e.push(this.moveTo(n.center.x,n.center.y,n.center.z,t)),Pe(this._camera)){const r=this.getDistanceToFitSphere(n.radius);e.push(this.dollyTo(r,t))}else if(Re(this._camera)){const r=this._camera.right-this._camera.left,o=this._camera.top-this._camera.bottom,a=2*n.radius,l=Math.min(r/a,o/a);e.push(this.zoomTo(l,t))}return e.push(this.setFocalOffset(0,0,0,t)),Promise.all(e)}setLookAt(i,t,e,s,n,r,o=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Xe.NONE,this._changedDolly=0;const a=dt.set(s,n,r),l=ht.set(i,t,e);this._targetEnd.copy(a),this._sphericalEnd.setFromVector3(l.sub(a).applyQuaternion(this._yAxisUpSpace)),this.normalizeRotations(),this._needsUpdate=!0,o||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const h=!o||Et(this._target.x,this._targetEnd.x,this.restThreshold)&&Et(this._target.y,this._targetEnd.y,this.restThreshold)&&Et(this._target.z,this._targetEnd.z,this.restThreshold)&&Et(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&Et(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&Et(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(h)}lerpLookAt(i,t,e,s,n,r,o,a,l,h,f,I,u,d=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Xe.NONE,this._changedDolly=0;const E=ht.set(s,n,r),T=dt.set(i,t,e);kt.setFromVector3(T.sub(E).applyQuaternion(this._yAxisUpSpace));const p=Ze.set(h,f,I),m=dt.set(o,a,l);Ei.setFromVector3(m.sub(p).applyQuaternion(this._yAxisUpSpace)),this._targetEnd.copy(E.lerp(p,u));const F=Ei.theta-kt.theta,R=Ei.phi-kt.phi,S=Ei.radius-kt.radius;this._sphericalEnd.set(kt.radius+S*u,kt.phi+R*u,kt.theta+F*u),this.normalizeRotations(),this._needsUpdate=!0,d||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const O=!d||Et(this._target.x,this._targetEnd.x,this.restThreshold)&&Et(this._target.y,this._targetEnd.y,this.restThreshold)&&Et(this._target.z,this._targetEnd.z,this.restThreshold)&&Et(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&Et(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&Et(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(O)}setPosition(i,t,e,s=!1){return this.setLookAt(i,t,e,this._targetEnd.x,this._targetEnd.y,this._targetEnd.z,s)}setTarget(i,t,e,s=!1){const n=this.getPosition(ht),r=this.setLookAt(n.x,n.y,n.z,i,t,e,s);return this._sphericalEnd.phi=te(this._sphericalEnd.phi,this.minPolarAngle,this.maxPolarAngle),r}setFocalOffset(i,t,e,s=!1){this._isUserControllingOffset=!1,this._focalOffsetEnd.set(i,t,e),this._needsUpdate=!0,s||this._focalOffset.copy(this._focalOffsetEnd);const n=!s||Et(this._focalOffset.x,this._focalOffsetEnd.x,this.restThreshold)&&Et(this._focalOffset.y,this._focalOffsetEnd.y,this.restThreshold)&&Et(this._focalOffset.z,this._focalOffsetEnd.z,this.restThreshold);return this._createOnRestPromise(n)}setOrbitPoint(i,t,e){this._camera.updateMatrixWorld(),re.setFromMatrixColumn(this._camera.matrixWorldInverse,0),oe.setFromMatrixColumn(this._camera.matrixWorldInverse,1),_e.setFromMatrixColumn(this._camera.matrixWorldInverse,2);const s=ht.set(i,t,e),n=s.distanceTo(this._camera.position),r=s.sub(this._camera.position);re.multiplyScalar(r.x),oe.multiplyScalar(r.y),_e.multiplyScalar(r.z),ht.copy(re).add(oe).add(_e),ht.z=ht.z+n,this.dollyTo(n,!1),this.setFocalOffset(-ht.x,ht.y,-ht.z,!1),this.moveTo(i,t,e,!1)}setBoundary(i){if(!i){this._boundary.min.set(-1/0,-1/0,-1/0),this._boundary.max.set(1/0,1/0,1/0),this._needsUpdate=!0;return}this._boundary.copy(i),this._boundary.clampPoint(this._targetEnd,this._targetEnd),this._needsUpdate=!0}setViewport(i,t,e,s){if(i===null){this._viewport=null;return}this._viewport=this._viewport||new ct.Vector4,typeof i=="number"?this._viewport.set(i,t,e,s):this._viewport.copy(i)}getDistanceToFitBox(i,t,e,s=!1){if(on(this._camera,"getDistanceToFitBox"))return this._spherical.radius;const n=i/t,r=this._camera.getEffectiveFOV()*ui,o=this._camera.aspect;return((s?n>o:n<o)?t:i/o)*.5/Math.tan(r*.5)+e*.5}getDistanceToFitSphere(i){if(on(this._camera,"getDistanceToFitSphere"))return this._spherical.radius;const t=this._camera.getEffectiveFOV()*ui,e=Math.atan(Math.tan(t*.5)*this._camera.aspect)*2,s=1<this._camera.aspect?t:e;return i/Math.sin(s*.5)}getTarget(i,t=!0){return(i&&i.isVector3?i:new ct.Vector3).copy(t?this._targetEnd:this._target)}getPosition(i,t=!0){return(i&&i.isVector3?i:new ct.Vector3).setFromSpherical(t?this._sphericalEnd:this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(t?this._targetEnd:this._target)}getSpherical(i,t=!0){return(i&&i instanceof ct.Spherical?i:new ct.Spherical).copy(t?this._sphericalEnd:this._spherical)}getFocalOffset(i,t=!0){return(i&&i.isVector3?i:new ct.Vector3).copy(t?this._focalOffsetEnd:this._focalOffset)}normalizeRotations(){this._sphericalEnd.theta=this._sphericalEnd.theta%$e,this._sphericalEnd.theta<0&&(this._sphericalEnd.theta+=$e),this._spherical.theta+=$e*Math.round((this._sphericalEnd.theta-this._spherical.theta)/$e)}reset(i=!1){if(!Et(this._camera.up.x,this._cameraUp0.x)||!Et(this._camera.up.y,this._cameraUp0.y)||!Et(this._camera.up.z,this._cameraUp0.z)){this._camera.up.copy(this._cameraUp0);const e=this.getPosition(ht);this.updateCameraUp(),this.setPosition(e.x,e.y,e.z)}const t=[this.setLookAt(this._position0.x,this._position0.y,this._position0.z,this._target0.x,this._target0.y,this._target0.z,i),this.setFocalOffset(this._focalOffset0.x,this._focalOffset0.y,this._focalOffset0.z,i),this.zoomTo(this._zoom0,i)];return Promise.all(t)}saveState(){this._cameraUp0.copy(this._camera.up),this.getTarget(this._target0),this.getPosition(this._position0),this._zoom0=this._zoom,this._focalOffset0.copy(this._focalOffset)}updateCameraUp(){this._yAxisUpSpace.setFromUnitVectors(this._camera.up,es),this._yAxisUpSpaceInverse.copy(this._yAxisUpSpace).invert()}applyCameraUp(){const i=ht.subVectors(this._target,this._camera.position).normalize(),t=dt.crossVectors(i,this._camera.up);this._camera.up.crossVectors(t,i).normalize(),this._camera.updateMatrixWorld();const e=this.getPosition(ht);this.updateCameraUp(),this.setPosition(e.x,e.y,e.z)}update(i){const t=this._sphericalEnd.theta-this._spherical.theta,e=this._sphericalEnd.phi-this._spherical.phi,s=this._sphericalEnd.radius-this._spherical.radius,n=Cr.subVectors(this._targetEnd,this._target),r=Tr.subVectors(this._focalOffsetEnd,this._focalOffset),o=this._zoomEnd-this._zoom;if(gt(t))this._thetaVelocity.value=0,this._spherical.theta=this._sphericalEnd.theta;else{const f=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.theta=Ji(this._spherical.theta,this._sphericalEnd.theta,this._thetaVelocity,f,1/0,i),this._needsUpdate=!0}if(gt(e))this._phiVelocity.value=0,this._spherical.phi=this._sphericalEnd.phi;else{const f=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.phi=Ji(this._spherical.phi,this._sphericalEnd.phi,this._phiVelocity,f,1/0,i),this._needsUpdate=!0}if(gt(s))this._radiusVelocity.value=0,this._spherical.radius=this._sphericalEnd.radius;else{const f=this._isUserControllingDolly?this.draggingSmoothTime:this.smoothTime;this._spherical.radius=Ji(this._spherical.radius,this._sphericalEnd.radius,this._radiusVelocity,f,this.maxSpeed,i),this._needsUpdate=!0}if(gt(n.x)&&gt(n.y)&&gt(n.z))this._targetVelocity.set(0,0,0),this._target.copy(this._targetEnd);else{const f=this._isUserControllingTruck?this.draggingSmoothTime:this.smoothTime;Er(this._target,this._targetEnd,this._targetVelocity,f,this.maxSpeed,i,this._target),this._needsUpdate=!0}if(gt(r.x)&&gt(r.y)&&gt(r.z))this._focalOffsetVelocity.set(0,0,0),this._focalOffset.copy(this._focalOffsetEnd);else{const f=this._isUserControllingOffset?this.draggingSmoothTime:this.smoothTime;Er(this._focalOffset,this._focalOffsetEnd,this._focalOffsetVelocity,f,this.maxSpeed,i,this._focalOffset),this._needsUpdate=!0}if(gt(o))this._zoomVelocity.value=0,this._zoom=this._zoomEnd;else{const f=this._isUserControllingZoom?this.draggingSmoothTime:this.smoothTime;this._zoom=Ji(this._zoom,this._zoomEnd,this._zoomVelocity,f,1/0,i)}if(this.dollyToCursor){if(Pe(this._camera)&&this._changedDolly!==0){const f=this._spherical.radius-this._lastDistance,I=this._camera,u=this._getCameraDirection(di),d=ht.copy(u).cross(I.up).normalize();d.lengthSq()===0&&(d.x=1);const E=dt.crossVectors(d,u),T=this._sphericalEnd.radius*Math.tan(I.getEffectiveFOV()*ui*.5),m=(this._sphericalEnd.radius-f-this._sphericalEnd.radius)/this._sphericalEnd.radius,F=Ze.copy(this._targetEnd).add(d.multiplyScalar(this._dollyControlCoord.x*T*I.aspect)).add(E.multiplyScalar(this._dollyControlCoord.y*T)),R=ht.copy(this._targetEnd).lerp(F,m),S=this._lastDollyDirection===Xe.IN&&this._spherical.radius<=this.minDistance,O=this._lastDollyDirection===Xe.OUT&&this.maxDistance<=this._spherical.radius;if(this.infinityDolly&&(S||O)){this._sphericalEnd.radius-=f,this._spherical.radius-=f;const w=dt.copy(u).multiplyScalar(-f);R.add(w)}this._boundary.clampPoint(R,R);const y=dt.subVectors(R,this._targetEnd);this._targetEnd.copy(R),this._target.add(y),this._changedDolly-=f,gt(this._changedDolly)&&(this._changedDolly=0)}else if(Re(this._camera)&&this._changedZoom!==0){const f=this._zoom-this._lastZoom,I=this._camera,u=ht.set(this._dollyControlCoord.x,this._dollyControlCoord.y,(I.near+I.far)/(I.near-I.far)).unproject(I),d=dt.set(0,0,-1).applyQuaternion(I.quaternion),E=Ze.copy(u).add(d.multiplyScalar(-u.dot(I.up))),p=-(this._zoom-f-this._zoom)/this._zoom,m=this._getCameraDirection(di),F=this._targetEnd.dot(m),R=ht.copy(this._targetEnd).lerp(E,p),S=R.dot(m),O=m.multiplyScalar(S-F);R.sub(O),this._boundary.clampPoint(R,R);const y=dt.subVectors(R,this._targetEnd);this._targetEnd.copy(R),this._target.add(y),this._changedZoom-=f,gt(this._changedZoom)&&(this._changedZoom=0)}}this._camera.zoom!==this._zoom&&(this._camera.zoom=this._zoom,this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0),this._dragNeedsUpdate=!0;const a=this._collisionTest();this._spherical.radius=Math.min(this._spherical.radius,a),this._spherical.makeSafe(),this._camera.position.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(this._target),this._camera.lookAt(this._target),(!gt(this._focalOffset.x)||!gt(this._focalOffset.y)||!gt(this._focalOffset.z))&&(this._camera.updateMatrixWorld(),re.setFromMatrixColumn(this._camera.matrix,0),oe.setFromMatrixColumn(this._camera.matrix,1),_e.setFromMatrixColumn(this._camera.matrix,2),re.multiplyScalar(this._focalOffset.x),oe.multiplyScalar(-this._focalOffset.y),_e.multiplyScalar(this._focalOffset.z),ht.copy(re).add(oe).add(_e),this._camera.position.add(ht)),this._boundaryEnclosesCamera&&this._encloseToBoundary(this._camera.position.copy(this._target),ht.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse),1);const h=this._needsUpdate;return h&&!this._updatedLastTime?(this._hasRested=!1,this.dispatchEvent({type:"wake"}),this.dispatchEvent({type:"update"})):h?(this.dispatchEvent({type:"update"}),gt(t,this.restThreshold)&&gt(e,this.restThreshold)&&gt(s,this.restThreshold)&&gt(n.x,this.restThreshold)&&gt(n.y,this.restThreshold)&&gt(n.z,this.restThreshold)&&gt(r.x,this.restThreshold)&&gt(r.y,this.restThreshold)&&gt(r.z,this.restThreshold)&&gt(o,this.restThreshold)&&!this._hasRested&&(this._hasRested=!0,this.dispatchEvent({type:"rest"}))):!h&&this._updatedLastTime&&this.dispatchEvent({type:"sleep"}),this._lastDistance=this._spherical.radius,this._lastZoom=this._zoom,this._updatedLastTime=h,this._needsUpdate=!1,h}toJSON(){return JSON.stringify({enabled:this._enabled,minDistance:this.minDistance,maxDistance:fi(this.maxDistance),minZoom:this.minZoom,maxZoom:fi(this.maxZoom),minPolarAngle:this.minPolarAngle,maxPolarAngle:fi(this.maxPolarAngle),minAzimuthAngle:fi(this.minAzimuthAngle),maxAzimuthAngle:fi(this.maxAzimuthAngle),smoothTime:this.smoothTime,draggingSmoothTime:this.draggingSmoothTime,dollySpeed:this.dollySpeed,truckSpeed:this.truckSpeed,dollyToCursor:this.dollyToCursor,verticalDragToForward:this.verticalDragToForward,target:this._targetEnd.toArray(),position:ht.setFromSpherical(this._sphericalEnd).add(this._targetEnd).toArray(),zoom:this._zoomEnd,focalOffset:this._focalOffsetEnd.toArray(),target0:this._target0.toArray(),position0:this._position0.toArray(),zoom0:this._zoom0,focalOffset0:this._focalOffset0.toArray()})}fromJSON(i,t=!1){const e=JSON.parse(i);this.enabled=e.enabled,this.minDistance=e.minDistance,this.maxDistance=Ii(e.maxDistance),this.minZoom=e.minZoom,this.maxZoom=Ii(e.maxZoom),this.minPolarAngle=e.minPolarAngle,this.maxPolarAngle=Ii(e.maxPolarAngle),this.minAzimuthAngle=Ii(e.minAzimuthAngle),this.maxAzimuthAngle=Ii(e.maxAzimuthAngle),this.smoothTime=e.smoothTime,this.draggingSmoothTime=e.draggingSmoothTime,this.dollySpeed=e.dollySpeed,this.truckSpeed=e.truckSpeed,this.dollyToCursor=e.dollyToCursor,this.verticalDragToForward=e.verticalDragToForward,this._target0.fromArray(e.target0),this._position0.fromArray(e.position0),this._zoom0=e.zoom0,this._focalOffset0.fromArray(e.focalOffset0),this.moveTo(e.target[0],e.target[1],e.target[2],t),kt.setFromVector3(ht.fromArray(e.position).sub(this._targetEnd).applyQuaternion(this._yAxisUpSpace)),this.rotateTo(kt.theta,kt.phi,t),this.dollyTo(kt.radius,t),this.zoomTo(e.zoom,t),this.setFocalOffset(e.focalOffset[0],e.focalOffset[1],e.focalOffset[2],t),this._needsUpdate=!0}connect(i){if(this._domElement){console.warn("camera-controls is already connected.");return}i.setAttribute("data-camera-controls-version",ac),this._addAllEventListeners(i),this._getClientRect(this._elementRect)}disconnect(){this.cancel(),this._removeAllEventListeners(),this._domElement&&(this._domElement.removeAttribute("data-camera-controls-version"),this._domElement=void 0)}dispose(){this.removeAllEventListeners(),this.disconnect()}_getTargetDirection(i){return i.setFromSpherical(this._spherical).divideScalar(this._spherical.radius).applyQuaternion(this._yAxisUpSpaceInverse)}_getCameraDirection(i){return this._getTargetDirection(i).negate()}_findPointerById(i){return this._activePointers.find(t=>t.pointerId===i)}_findPointerByMouseButton(i){return this._activePointers.find(t=>t.mouseButton===i)}_disposePointer(i){this._activePointers.splice(this._activePointers.indexOf(i),1)}_encloseToBoundary(i,t,e){const s=t.lengthSq();if(s===0)return i;const n=dt.copy(t).add(i),o=this._boundary.clampPoint(n,Ze).sub(n),a=o.lengthSq();if(a===0)return i.add(t);if(a===s)return i;if(e===0)return i.add(t).add(o);{const l=1+e*a/t.dot(o);return i.add(dt.copy(t).multiplyScalar(l)).add(o.multiplyScalar(1-e))}}_updateNearPlaneCorners(){if(Pe(this._camera)){const i=this._camera,t=i.near,e=i.getEffectiveFOV()*ui,s=Math.tan(e*.5)*t,n=s*i.aspect;this._nearPlaneCorners[0].set(-n,-s,0),this._nearPlaneCorners[1].set(n,-s,0),this._nearPlaneCorners[2].set(n,s,0),this._nearPlaneCorners[3].set(-n,s,0)}else if(Re(this._camera)){const i=this._camera,t=1/i.zoom,e=i.left*t,s=i.right*t,n=i.top*t,r=i.bottom*t;this._nearPlaneCorners[0].set(e,n,0),this._nearPlaneCorners[1].set(s,n,0),this._nearPlaneCorners[2].set(s,r,0),this._nearPlaneCorners[3].set(e,r,0)}}_collisionTest(){let i=1/0;if(!(this.colliderMeshes.length>=1)||on(this._camera,"_collisionTest"))return i;const e=this._getTargetDirection(di);hn.lookAt(pr,e,this._camera.up);for(let s=0;s<4;s++){const n=dt.copy(this._nearPlaneCorners[s]);n.applyMatrix4(hn);const r=Ze.addVectors(this._target,n);is.set(r,e),is.far=this._spherical.radius+1;const o=is.intersectObjects(this.colliderMeshes);o.length!==0&&o[0].distance<i&&(i=o[0].distance)}return i}_getClientRect(i){if(!this._domElement)return;const t=this._domElement.getBoundingClientRect();return i.x=t.left,i.y=t.top,this._viewport?(i.x+=this._viewport.x,i.y+=t.height-this._viewport.w-this._viewport.y,i.width=this._viewport.z,i.height=this._viewport.w):(i.width=t.width,i.height=t.height),i}_createOnRestPromise(i){return i?Promise.resolve():(this._hasRested=!1,this.dispatchEvent({type:"transitionstart"}),new Promise(t=>{const e=()=>{this.removeEventListener("rest",e),t()};this.addEventListener("rest",e)}))}_addAllEventListeners(i){}_removeAllEventListeners(){}get dampingFactor(){return console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead."),0}set dampingFactor(i){console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead.")}get draggingDampingFactor(){return console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead."),0}set draggingDampingFactor(i){console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead.")}static createBoundingSphere(i,t=new ct.Sphere){const e=t,s=e.center;je.makeEmpty(),i.traverseVisible(r=>{r.isMesh&&je.expandByObject(r)}),je.getCenter(s);let n=0;return i.traverseVisible(r=>{if(!r.isMesh)return;const o=r,a=o.geometry.clone();a.applyMatrix4(o.matrixWorld);const h=a.attributes.position;for(let f=0,I=h.count;f<I;f++)ht.fromBufferAttribute(h,f),n=Math.max(n,s.distanceToSquared(ht))}),e.radius=Math.sqrt(n),e}}class Je extends Yr{constructor(t){super(t);C(this,"onBeforeUpdate",new q);C(this,"onAfterUpdate",new q);C(this,"onAspectUpdated",new q);C(this,"onDisposed",new q);C(this,"three");C(this,"_allControls",new Map);C(this,"updateAspect",()=>{var t;if(!(!this.currentWorld||!this.currentWorld.renderer)){if(this.three instanceof b.OrthographicCamera){this.onAspectUpdated.trigger();return}if((t=this.currentWorld.renderer)!=null&&t.isResizeable()){const e=this.currentWorld.renderer.getSize();this.three.aspect=e.width/e.height,this.three.updateProjectionMatrix(),this.onAspectUpdated.trigger()}}});this.three=this.setupCamera(),this.setupEvents(!0),this.onWorldChanged.add(({action:e,world:s})=>{if(e==="added"){const n=this.newCameraControls();this._allControls.set(s.uuid,n)}if(e==="removed"){const n=this._allControls.get(s.uuid);n&&(n.dispose(),this._allControls.delete(s.uuid))}})}get controls(){if(!this.currentWorld)throw new Error("This camera needs a world to work!");const t=this._allControls.get(this.currentWorld.uuid);if(!t)throw new Error("Controls not found!");return t}get enabled(){return this.currentWorld===null?!1:this.controls.enabled}set enabled(t){this.currentWorld!==null&&(this.controls.enabled=t)}dispose(){this.setupEvents(!1),this.onAspectUpdated.reset(),this.onBeforeUpdate.reset(),this.onAfterUpdate.reset(),this.three.removeFromParent(),this.onDisposed.trigger(),this.onDisposed.reset();for(const[t,e]of this._allControls)e.dispose()}update(t){this.enabled&&(this.onBeforeUpdate.trigger(this),this.controls.update(t),this.onAfterUpdate.trigger(this))}setupCamera(){const t=window.innerWidth/window.innerHeight,e=new b.PerspectiveCamera(60,t,1,1e3);return e.position.set(50,50,50),e.lookAt(new b.Vector3(0,0,0)),e}newCameraControls(){if(!this.currentWorld)throw new Error("This camera needs a world to work!");if(!this.currentWorld.renderer)throw new Error("This camera needs a renderer to work!");bt.install({THREE:Je.getSubsetOfThree()});const{domElement:t}=this.currentWorld.renderer.three,e=new bt(this.three,t);return e.smoothTime=.2,e.dollyToCursor=!0,e.infinityDolly=!0,e.minDistance=6,e}setupEvents(t){t?window.addEventListener("resize",this.updateAspect):window.removeEventListener("resize",this.updateAspect)}static getSubsetOfThree(){return{MOUSE:b.MOUSE,Vector2:b.Vector2,Vector3:b.Vector3,Vector4:b.Vector4,Quaternion:b.Quaternion,Matrix4:b.Matrix4,Spherical:b.Spherical,Box3:b.Box3,Sphere:b.Sphere,Raycaster:b.Raycaster,MathUtils:b.MathUtils}}}const As=class As extends mt{constructor(t){super(t);C(this,"onAfterUpdate",new q);C(this,"onBeforeUpdate",new q);C(this,"onDisposed",new q);C(this,"list",new Qt);C(this,"enabled",!0);t.add(As.uuid,this)}create(){const t=new Hr(this.components),e=t.uuid;if(this.list.has(e))throw new Error("There is already a world with this name!");return this.list.set(e,t),t}delete(t){if(!this.list.has(t.uuid))throw new Error("The provided world is not found in the list!");this.list.delete(t.uuid),t.dispose()}dispose(){this.enabled=!1;for(const[t,e]of this.list)e.dispose();this.list.clear(),this.onDisposed.trigger()}update(t){if(this.enabled)for(const[e,s]of this.list)s.update(t)}};C(As,"uuid","fdb61dc4-2ec1-4966-b83d-54ea795fad4a");let Pi=As;function hc(c,i,t,e){return new Promise((s,n)=>{function r(){const o=c.clientWaitSync(i,t,0);if(o===c.WAIT_FAILED){n();return}if(o===c.TIMEOUT_EXPIRED){setTimeout(r,e);return}s()}r()})}async function uc(c,i,t,e,s,n,r){const o=c.fenceSync(c.SYNC_GPU_COMMANDS_COMPLETE,0);c.flush(),await hc(c,o,0,10),c.deleteSync(o),c.bindBuffer(i,t),c.getBufferSubData(i,e,s,n,r),c.bindBuffer(i,null)}async function Bn(c,i,t,e,s,n,r,o){const a=c.createBuffer();return c.bindBuffer(c.PIXEL_PACK_BUFFER,a),c.bufferData(c.PIXEL_PACK_BUFFER,o.byteLength,c.STREAM_READ),c.readPixels(i,t,e,s,n,r,0),c.bindBuffer(c.PIXEL_PACK_BUFFER,null),await uc(c,c.PIXEL_PACK_BUFFER,a,0,o),c.deleteBuffer(a),o}class fc extends ye{constructor(){super(...arguments);C(this,"_config",{enabled:{value:!0,type:"Boolean"},width:{type:"Number",interpolable:!0,value:512,min:32,max:1024},height:{type:"Number",interpolable:!0,value:512,min:32,max:1024},autoUpdate:{value:!0,type:"Boolean"},renderDebugFrame:{value:!1,type:"Boolean"},updateInterval:{type:"Number",interpolable:!0,value:1,min:0,max:1},threshold:{type:"Number",interpolable:!0,value:100,min:1,max:512}});C(this,"_interval",null)}get enabled(){return this._config.enabled.value}set enabled(t){this._config.enabled.value=t,this._component.enabled=t}get width(){return this._config.width.value}set width(t){this.setWidthHeight(t,this.height)}get height(){return this._config.height.value}set height(t){this.setWidthHeight(this.width,t)}get autoUpdate(){return this._config.autoUpdate.value}set autoUpdate(t){this.setAutoAndInterval(t,this.updateInterval)}get updateInterval(){return this._config.updateInterval.value}set updateInterval(t){this.setAutoAndInterval(this.autoUpdate,t)}get renderDebugFrame(){return this._config.renderDebugFrame.value}set renderDebugFrame(t){this._config.renderDebugFrame.value=t}get threshold(){return this._config.threshold.value}set threshold(t){this._config.threshold.value=t}setWidthHeight(t,e){if(t<=0||e<=0)throw new Error("The width and height of the culler renderer must be more than 0!");this._config.width.value=t,this._config.height.value=e,this.resetRenderTarget()}setAutoAndInterval(t,e){if(e<=0)throw new Error("The updateInterval of the culler renderer must be more than 0!");this._config.autoUpdate.value=t,this._config.updateInterval.value=e,this.resetInterval(t)}resetRenderTarget(){this._component.renderTarget.dispose(),this._component.renderTarget=new b.WebGLRenderTarget(this.width,this.height),this._component.bufferSize=this.width*this.height*4,this._component.buffer=new Uint8Array(this._component.bufferSize)}resetInterval(t){this._interval!==null&&window.clearInterval(this._interval),t&&(this._interval=window.setInterval(async()=>{this._component.preventUpdate||await this._component.updateVisibility()},this.updateInterval))}}class jr{constructor(i,t){C(this,"onSetup",new q);C(this,"onDisposed",new q);C(this,"onViewUpdated",new fe);C(this,"enabled",!0);C(this,"needsUpdate",!1);C(this,"components");C(this,"renderTarget",new b.WebGLRenderTarget);C(this,"bufferSize",1);C(this,"buffer",new Uint8Array);C(this,"preventUpdate",!1);C(this,"config");C(this,"isSetup",!1);C(this,"world");C(this,"renderer");C(this,"_defaultConfig",{enabled:!0,height:512,width:512,updateInterval:1e3,autoUpdate:!0,renderDebugFrame:!1,threshold:100});C(this,"worker");C(this,"scene",new b.Scene);C(this,"_availableColor",1);C(this,"_isWorkerBusy",!1);C(this,"updateVisibility",async i=>{if(!this.enabled||!this.needsUpdate&&!i||this._isWorkerBusy)return;this._isWorkerBusy=!0;const t=this.world.camera.three;t.updateMatrix();const{width:e,height:s}=this.config;this.renderer.setSize(e,s),this.renderer.setRenderTarget(this.renderTarget),this.renderer.render(this.scene,t);const n=this.renderer.getContext();await Bn(n,0,0,e,s,n.RGBA,n.UNSIGNED_BYTE,this.buffer),this.renderer.setRenderTarget(null),this.config.renderDebugFrame&&this.renderer.render(this.scene,t),this.worker.postMessage({buffer:this.buffer}),this.needsUpdate=!1});if(!t.renderer)throw new Error("The given world must have a renderer!");this.components=i,this.config=new fc(this,this.components,"Culler renderer"),this.world=t,this.renderer=new b.WebGLRenderer,this.renderer.clippingPlanes=t.renderer.clippingPlanes;const e=`
11
11
  addEventListener("message", (event) => {
12
12
  const { buffer } = event.data;
13
13
  const colors = new Map();
@@ -125,7 +125,7 @@ void main() {
125
125
 
126
126
  }
127
127
 
128
- `,extensions:{derivatives:!0}});this.three=new b.Mesh(o,a),this.three.frustumCulled=!1,t.scene.three.add(this.three),this.setupEvents(!0)}get visible(){return this.three.visible}set visible(i){i?this.world.scene.three.add(this.three):this.three.removeFromParent()}get material(){return this.three.material}get fade(){return this._fade===3}set fade(i){this._fade=i?3:0,this.material.uniforms.uFade.value=this._fade}setup(i){const t={...this._defaultConfig,...i};this.config.visible=!0,this.config.color=t.color,this.config.primarySize=t.primarySize,this.config.secondarySize=t.secondarySize,this.config.distance=t.distance,this.isSetup=!0,this.onSetup.trigger()}dispose(){this.setupEvents(!1),this.components.get(Ne).list.delete(this.config.uuid),this.components.get(Ce).destroy(this.three),this.onDisposed.trigger(),this.onDisposed.reset(),this.world=null,this.components=null}setupEvents(i){if(this.world.isDisposing||!(this.world.camera instanceof Je))return;const t=this.world.camera.controls;i?t.addEventListener("update",this.updateZoom):t.removeEventListener("update",this.updateZoom)}}const Ss=class Ss extends mt{constructor(t){super(t);C(this,"list",new Map);C(this,"onDisposed",new q);C(this,"enabled",!0);t.add(Ss.uuid,this)}create(t){if(this.list.has(t.uuid))throw new Error("This world already has a grid!");const e=new to(this.components,t);return this.list.set(t.uuid,e),t.onDisposed.add(()=>{this.delete(t)}),e}delete(t){const e=this.list.get(t.uuid);e&&e.dispose(),this.list.delete(t.uuid)}dispose(){for(const[t,e]of this.list)e.dispose();this.list.clear(),this.onDisposed.trigger(),this.onDisposed.reset()}};C(Ss,"uuid","d1e814d5-b81c-4452-87a2-f039375e0489");let Fn=Ss;const Me=new L.Raycaster,Dt=new L.Vector3,me=new L.Vector3,St=new L.Quaternion,gr={X:new L.Vector3(1,0,0),Y:new L.Vector3(0,1,0),Z:new L.Vector3(0,0,1)},un={type:"change"},Ar={type:"mouseDown"},Fr={type:"mouseUp",mode:null},Sr={type:"objectChange"};class Ec extends L.Object3D{constructor(i,t){super(),t===void 0&&(console.warn('THREE.TransformControls: The second parameter "domElement" is now mandatory.'),t=document),this.isTransformControls=!0,this.visible=!1,this.domElement=t,this.domElement.style.touchAction="none";const e=new gc;this._gizmo=e,this.add(e);const s=new Ac;this._plane=s,this.add(s);const n=this;function r(m,F){let R=F;Object.defineProperty(n,m,{get:function(){return R!==void 0?R:F},set:function(S){R!==S&&(R=S,s[m]=S,e[m]=S,n.dispatchEvent({type:m+"-changed",value:S}),n.dispatchEvent(un))}}),n[m]=F,s[m]=F,e[m]=F}r("camera",i),r("object",void 0),r("enabled",!0),r("axis",null),r("mode","translate"),r("translationSnap",null),r("rotationSnap",null),r("scaleSnap",null),r("space","world"),r("size",1),r("dragging",!1),r("showX",!0),r("showY",!0),r("showZ",!0);const o=new L.Vector3,a=new L.Vector3,l=new L.Quaternion,h=new L.Quaternion,f=new L.Vector3,I=new L.Quaternion,u=new L.Vector3,d=new L.Vector3,E=new L.Vector3,T=0,p=new L.Vector3;r("worldPosition",o),r("worldPositionStart",a),r("worldQuaternion",l),r("worldQuaternionStart",h),r("cameraPosition",f),r("cameraQuaternion",I),r("pointStart",u),r("pointEnd",d),r("rotationAxis",E),r("rotationAngle",T),r("eye",p),this._offset=new L.Vector3,this._startNorm=new L.Vector3,this._endNorm=new L.Vector3,this._cameraScale=new L.Vector3,this._parentPosition=new L.Vector3,this._parentQuaternion=new L.Quaternion,this._parentQuaternionInv=new L.Quaternion,this._parentScale=new L.Vector3,this._worldScaleStart=new L.Vector3,this._worldQuaternionInv=new L.Quaternion,this._worldScale=new L.Vector3,this._positionStart=new L.Vector3,this._quaternionStart=new L.Quaternion,this._scaleStart=new L.Vector3,this._getPointer=pc.bind(this),this._onPointerDown=Tc.bind(this),this._onPointerHover=Cc.bind(this),this._onPointerMove=mc.bind(this),this._onPointerUp=Rc.bind(this),this.domElement.addEventListener("pointerdown",this._onPointerDown),this.domElement.addEventListener("pointermove",this._onPointerHover),this.domElement.addEventListener("pointerup",this._onPointerUp)}updateMatrixWorld(){this.object!==void 0&&(this.object.updateMatrixWorld(),this.object.parent===null?console.error("TransformControls: The attached 3D object must be a part of the scene graph."):this.object.parent.matrixWorld.decompose(this._parentPosition,this._parentQuaternion,this._parentScale),this.object.matrixWorld.decompose(this.worldPosition,this.worldQuaternion,this._worldScale),this._parentQuaternionInv.copy(this._parentQuaternion).invert(),this._worldQuaternionInv.copy(this.worldQuaternion).invert()),this.camera.updateMatrixWorld(),this.camera.matrixWorld.decompose(this.cameraPosition,this.cameraQuaternion,this._cameraScale),this.camera.isOrthographicCamera?this.camera.getWorldDirection(this.eye).negate():this.eye.copy(this.cameraPosition).sub(this.worldPosition).normalize(),super.updateMatrixWorld(this)}pointerHover(i){if(this.object===void 0||this.dragging===!0)return;Me.setFromCamera(i,this.camera);const t=fn(this._gizmo.picker[this.mode],Me);t?this.axis=t.object.name:this.axis=null}pointerDown(i){if(!(this.object===void 0||this.dragging===!0||i.button!==0)&&this.axis!==null){Me.setFromCamera(i,this.camera);const t=fn(this._plane,Me,!0);t&&(this.object.updateMatrixWorld(),this.object.parent.updateMatrixWorld(),this._positionStart.copy(this.object.position),this._quaternionStart.copy(this.object.quaternion),this._scaleStart.copy(this.object.scale),this.object.matrixWorld.decompose(this.worldPositionStart,this.worldQuaternionStart,this._worldScaleStart),this.pointStart.copy(t.point).sub(this.worldPositionStart)),this.dragging=!0,Ar.mode=this.mode,this.dispatchEvent(Ar)}}pointerMove(i){const t=this.axis,e=this.mode,s=this.object;let n=this.space;if(e==="scale"?n="local":(t==="E"||t==="XYZE"||t==="XYZ")&&(n="world"),s===void 0||t===null||this.dragging===!1||i.button!==-1)return;Me.setFromCamera(i,this.camera);const r=fn(this._plane,Me,!0);if(r){if(this.pointEnd.copy(r.point).sub(this.worldPositionStart),e==="translate")this._offset.copy(this.pointEnd).sub(this.pointStart),n==="local"&&t!=="XYZ"&&this._offset.applyQuaternion(this._worldQuaternionInv),t.indexOf("X")===-1&&(this._offset.x=0),t.indexOf("Y")===-1&&(this._offset.y=0),t.indexOf("Z")===-1&&(this._offset.z=0),n==="local"&&t!=="XYZ"?this._offset.applyQuaternion(this._quaternionStart).divide(this._parentScale):this._offset.applyQuaternion(this._parentQuaternionInv).divide(this._parentScale),s.position.copy(this._offset).add(this._positionStart),this.translationSnap&&(n==="local"&&(s.position.applyQuaternion(St.copy(this._quaternionStart).invert()),t.search("X")!==-1&&(s.position.x=Math.round(s.position.x/this.translationSnap)*this.translationSnap),t.search("Y")!==-1&&(s.position.y=Math.round(s.position.y/this.translationSnap)*this.translationSnap),t.search("Z")!==-1&&(s.position.z=Math.round(s.position.z/this.translationSnap)*this.translationSnap),s.position.applyQuaternion(this._quaternionStart)),n==="world"&&(s.parent&&s.position.add(Dt.setFromMatrixPosition(s.parent.matrixWorld)),t.search("X")!==-1&&(s.position.x=Math.round(s.position.x/this.translationSnap)*this.translationSnap),t.search("Y")!==-1&&(s.position.y=Math.round(s.position.y/this.translationSnap)*this.translationSnap),t.search("Z")!==-1&&(s.position.z=Math.round(s.position.z/this.translationSnap)*this.translationSnap),s.parent&&s.position.sub(Dt.setFromMatrixPosition(s.parent.matrixWorld))));else if(e==="scale"){if(t.search("XYZ")!==-1){let o=this.pointEnd.length()/this.pointStart.length();this.pointEnd.dot(this.pointStart)<0&&(o*=-1),me.set(o,o,o)}else Dt.copy(this.pointStart),me.copy(this.pointEnd),Dt.applyQuaternion(this._worldQuaternionInv),me.applyQuaternion(this._worldQuaternionInv),me.divide(Dt),t.search("X")===-1&&(me.x=1),t.search("Y")===-1&&(me.y=1),t.search("Z")===-1&&(me.z=1);s.scale.copy(this._scaleStart).multiply(me),this.scaleSnap&&(t.search("X")!==-1&&(s.scale.x=Math.round(s.scale.x/this.scaleSnap)*this.scaleSnap||this.scaleSnap),t.search("Y")!==-1&&(s.scale.y=Math.round(s.scale.y/this.scaleSnap)*this.scaleSnap||this.scaleSnap),t.search("Z")!==-1&&(s.scale.z=Math.round(s.scale.z/this.scaleSnap)*this.scaleSnap||this.scaleSnap))}else if(e==="rotate"){this._offset.copy(this.pointEnd).sub(this.pointStart);const o=20/this.worldPosition.distanceTo(Dt.setFromMatrixPosition(this.camera.matrixWorld));let a=!1;t==="XYZE"?(this.rotationAxis.copy(this._offset).cross(this.eye).normalize(),this.rotationAngle=this._offset.dot(Dt.copy(this.rotationAxis).cross(this.eye))*o):(t==="X"||t==="Y"||t==="Z")&&(this.rotationAxis.copy(gr[t]),Dt.copy(gr[t]),n==="local"&&Dt.applyQuaternion(this.worldQuaternion),Dt.cross(this.eye),Dt.length()===0?a=!0:this.rotationAngle=this._offset.dot(Dt.normalize())*o),(t==="E"||a)&&(this.rotationAxis.copy(this.eye),this.rotationAngle=this.pointEnd.angleTo(this.pointStart),this._startNorm.copy(this.pointStart).normalize(),this._endNorm.copy(this.pointEnd).normalize(),this.rotationAngle*=this._endNorm.cross(this._startNorm).dot(this.eye)<0?1:-1),this.rotationSnap&&(this.rotationAngle=Math.round(this.rotationAngle/this.rotationSnap)*this.rotationSnap),n==="local"&&t!=="E"&&t!=="XYZE"?(s.quaternion.copy(this._quaternionStart),s.quaternion.multiply(St.setFromAxisAngle(this.rotationAxis,this.rotationAngle)).normalize()):(this.rotationAxis.applyQuaternion(this._parentQuaternionInv),s.quaternion.copy(St.setFromAxisAngle(this.rotationAxis,this.rotationAngle)),s.quaternion.multiply(this._quaternionStart).normalize())}this.dispatchEvent(un),this.dispatchEvent(Sr)}}pointerUp(i){i.button===0&&(this.dragging&&this.axis!==null&&(Fr.mode=this.mode,this.dispatchEvent(Fr)),this.dragging=!1,this.axis=null)}dispose(){this.domElement.removeEventListener("pointerdown",this._onPointerDown),this.domElement.removeEventListener("pointermove",this._onPointerHover),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.domElement.removeEventListener("pointerup",this._onPointerUp),this.traverse(function(i){i.geometry&&i.geometry.dispose(),i.material&&i.material.dispose()})}attach(i){return this.object=i,this.visible=!0,this}detach(){return this.object=void 0,this.visible=!1,this.axis=null,this}reset(){this.enabled&&this.dragging&&(this.object.position.copy(this._positionStart),this.object.quaternion.copy(this._quaternionStart),this.object.scale.copy(this._scaleStart),this.dispatchEvent(un),this.dispatchEvent(Sr),this.pointStart.copy(this.pointEnd))}getRaycaster(){return Me}getMode(){return this.mode}setMode(i){this.mode=i}setTranslationSnap(i){this.translationSnap=i}setRotationSnap(i){this.rotationSnap=i}setScaleSnap(i){this.scaleSnap=i}setSize(i){this.size=i}setSpace(i){this.space=i}}function pc(c){if(this.domElement.ownerDocument.pointerLockElement)return{x:0,y:0,button:c.button};{const i=this.domElement.getBoundingClientRect();return{x:(c.clientX-i.left)/i.width*2-1,y:-(c.clientY-i.top)/i.height*2+1,button:c.button}}}function Cc(c){if(this.enabled)switch(c.pointerType){case"mouse":case"pen":this.pointerHover(this._getPointer(c));break}}function Tc(c){this.enabled&&(document.pointerLockElement||this.domElement.setPointerCapture(c.pointerId),this.domElement.addEventListener("pointermove",this._onPointerMove),this.pointerHover(this._getPointer(c)),this.pointerDown(this._getPointer(c)))}function mc(c){this.enabled&&this.pointerMove(this._getPointer(c))}function Rc(c){this.enabled&&(this.domElement.releasePointerCapture(c.pointerId),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.pointerUp(this._getPointer(c)))}function fn(c,i,t){const e=i.intersectObject(c,!0);for(let s=0;s<e.length;s++)if(e[s].object.visible||t)return e[s];return!1}const ss=new L.Euler,Tt=new L.Vector3(0,1,0),Or=new L.Vector3(0,0,0),Nr=new L.Matrix4,ns=new L.Quaternion,hs=new L.Quaternion,ae=new L.Vector3,yr=new L.Matrix4,Ri=new L.Vector3(1,0,0),we=new L.Vector3(0,1,0),gi=new L.Vector3(0,0,1),rs=new L.Vector3,pi=new L.Vector3,Ci=new L.Vector3;class gc extends L.Object3D{constructor(){super(),this.isTransformControlsGizmo=!0,this.type="TransformControlsGizmo";const i=new L.MeshBasicMaterial({depthTest:!1,depthWrite:!1,fog:!1,toneMapped:!1,transparent:!0}),t=new L.LineBasicMaterial({depthTest:!1,depthWrite:!1,fog:!1,toneMapped:!1,transparent:!0}),e=i.clone();e.opacity=.15;const s=t.clone();s.opacity=.5;const n=i.clone();n.color.setHex(16711680);const r=i.clone();r.color.setHex(65280);const o=i.clone();o.color.setHex(255);const a=i.clone();a.color.setHex(16711680),a.opacity=.5;const l=i.clone();l.color.setHex(65280),l.opacity=.5;const h=i.clone();h.color.setHex(255),h.opacity=.5;const f=i.clone();f.opacity=.25;const I=i.clone();I.color.setHex(16776960),I.opacity=.25,i.clone().color.setHex(16776960);const d=i.clone();d.color.setHex(7895160);const E=new L.CylinderGeometry(0,.04,.1,12);E.translate(0,.05,0);const T=new L.BoxGeometry(.08,.08,.08);T.translate(0,.04,0);const p=new L.BufferGeometry;p.setAttribute("position",new L.Float32BufferAttribute([0,0,0,1,0,0],3));const m=new L.CylinderGeometry(.0075,.0075,.5,3);m.translate(0,.25,0);function F(U,Q){const z=new L.TorusGeometry(U,.0075,3,64,Q*Math.PI*2);return z.rotateY(Math.PI/2),z.rotateX(Math.PI/2),z}function R(){const U=new L.BufferGeometry;return U.setAttribute("position",new L.Float32BufferAttribute([0,0,0,1,1,1],3)),U}const S={X:[[new L.Mesh(E,n),[.5,0,0],[0,0,-Math.PI/2]],[new L.Mesh(E,n),[-.5,0,0],[0,0,Math.PI/2]],[new L.Mesh(m,n),[0,0,0],[0,0,-Math.PI/2]]],Y:[[new L.Mesh(E,r),[0,.5,0]],[new L.Mesh(E,r),[0,-.5,0],[Math.PI,0,0]],[new L.Mesh(m,r)]],Z:[[new L.Mesh(E,o),[0,0,.5],[Math.PI/2,0,0]],[new L.Mesh(E,o),[0,0,-.5],[-Math.PI/2,0,0]],[new L.Mesh(m,o),null,[Math.PI/2,0,0]]],XYZ:[[new L.Mesh(new L.OctahedronGeometry(.1,0),f.clone()),[0,0,0]]],XY:[[new L.Mesh(new L.BoxGeometry(.15,.15,.01),h.clone()),[.15,.15,0]]],YZ:[[new L.Mesh(new L.BoxGeometry(.15,.15,.01),a.clone()),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new L.Mesh(new L.BoxGeometry(.15,.15,.01),l.clone()),[.15,0,.15],[-Math.PI/2,0,0]]]},O={X:[[new L.Mesh(new L.CylinderGeometry(.2,0,.6,4),e),[.3,0,0],[0,0,-Math.PI/2]],[new L.Mesh(new L.CylinderGeometry(.2,0,.6,4),e),[-.3,0,0],[0,0,Math.PI/2]]],Y:[[new L.Mesh(new L.CylinderGeometry(.2,0,.6,4),e),[0,.3,0]],[new L.Mesh(new L.CylinderGeometry(.2,0,.6,4),e),[0,-.3,0],[0,0,Math.PI]]],Z:[[new L.Mesh(new L.CylinderGeometry(.2,0,.6,4),e),[0,0,.3],[Math.PI/2,0,0]],[new L.Mesh(new L.CylinderGeometry(.2,0,.6,4),e),[0,0,-.3],[-Math.PI/2,0,0]]],XYZ:[[new L.Mesh(new L.OctahedronGeometry(.2,0),e)]],XY:[[new L.Mesh(new L.BoxGeometry(.2,.2,.01),e),[.15,.15,0]]],YZ:[[new L.Mesh(new L.BoxGeometry(.2,.2,.01),e),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new L.Mesh(new L.BoxGeometry(.2,.2,.01),e),[.15,0,.15],[-Math.PI/2,0,0]]]},y={START:[[new L.Mesh(new L.OctahedronGeometry(.01,2),s),null,null,null,"helper"]],END:[[new L.Mesh(new L.OctahedronGeometry(.01,2),s),null,null,null,"helper"]],DELTA:[[new L.Line(R(),s),null,null,null,"helper"]],X:[[new L.Line(p,s.clone()),[-1e3,0,0],null,[1e6,1,1],"helper"]],Y:[[new L.Line(p,s.clone()),[0,-1e3,0],[0,0,Math.PI/2],[1e6,1,1],"helper"]],Z:[[new L.Line(p,s.clone()),[0,0,-1e3],[0,-Math.PI/2,0],[1e6,1,1],"helper"]]},w={XYZE:[[new L.Mesh(F(.5,1),d),null,[0,Math.PI/2,0]]],X:[[new L.Mesh(F(.5,.5),n)]],Y:[[new L.Mesh(F(.5,.5),r),null,[0,0,-Math.PI/2]]],Z:[[new L.Mesh(F(.5,.5),o),null,[0,Math.PI/2,0]]],E:[[new L.Mesh(F(.75,1),I),null,[0,Math.PI/2,0]]]},P={AXIS:[[new L.Line(p,s.clone()),[-1e3,0,0],null,[1e6,1,1],"helper"]]},v={XYZE:[[new L.Mesh(new L.SphereGeometry(.25,10,8),e)]],X:[[new L.Mesh(new L.TorusGeometry(.5,.1,4,24),e),[0,0,0],[0,-Math.PI/2,-Math.PI/2]]],Y:[[new L.Mesh(new L.TorusGeometry(.5,.1,4,24),e),[0,0,0],[Math.PI/2,0,0]]],Z:[[new L.Mesh(new L.TorusGeometry(.5,.1,4,24),e),[0,0,0],[0,0,-Math.PI/2]]],E:[[new L.Mesh(new L.TorusGeometry(.75,.1,2,24),e)]]},G={X:[[new L.Mesh(T,n),[.5,0,0],[0,0,-Math.PI/2]],[new L.Mesh(m,n),[0,0,0],[0,0,-Math.PI/2]],[new L.Mesh(T,n),[-.5,0,0],[0,0,Math.PI/2]]],Y:[[new L.Mesh(T,r),[0,.5,0]],[new L.Mesh(m,r)],[new L.Mesh(T,r),[0,-.5,0],[0,0,Math.PI]]],Z:[[new L.Mesh(T,o),[0,0,.5],[Math.PI/2,0,0]],[new L.Mesh(m,o),[0,0,0],[Math.PI/2,0,0]],[new L.Mesh(T,o),[0,0,-.5],[-Math.PI/2,0,0]]],XY:[[new L.Mesh(new L.BoxGeometry(.15,.15,.01),h),[.15,.15,0]]],YZ:[[new L.Mesh(new L.BoxGeometry(.15,.15,.01),a),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new L.Mesh(new L.BoxGeometry(.15,.15,.01),l),[.15,0,.15],[-Math.PI/2,0,0]]],XYZ:[[new L.Mesh(new L.BoxGeometry(.1,.1,.1),f.clone())]]},N={X:[[new L.Mesh(new L.CylinderGeometry(.2,0,.6,4),e),[.3,0,0],[0,0,-Math.PI/2]],[new L.Mesh(new L.CylinderGeometry(.2,0,.6,4),e),[-.3,0,0],[0,0,Math.PI/2]]],Y:[[new L.Mesh(new L.CylinderGeometry(.2,0,.6,4),e),[0,.3,0]],[new L.Mesh(new L.CylinderGeometry(.2,0,.6,4),e),[0,-.3,0],[0,0,Math.PI]]],Z:[[new L.Mesh(new L.CylinderGeometry(.2,0,.6,4),e),[0,0,.3],[Math.PI/2,0,0]],[new L.Mesh(new L.CylinderGeometry(.2,0,.6,4),e),[0,0,-.3],[-Math.PI/2,0,0]]],XY:[[new L.Mesh(new L.BoxGeometry(.2,.2,.01),e),[.15,.15,0]]],YZ:[[new L.Mesh(new L.BoxGeometry(.2,.2,.01),e),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new L.Mesh(new L.BoxGeometry(.2,.2,.01),e),[.15,0,.15],[-Math.PI/2,0,0]]],XYZ:[[new L.Mesh(new L.BoxGeometry(.2,.2,.2),e),[0,0,0]]]},D={X:[[new L.Line(p,s.clone()),[-1e3,0,0],null,[1e6,1,1],"helper"]],Y:[[new L.Line(p,s.clone()),[0,-1e3,0],[0,0,Math.PI/2],[1e6,1,1],"helper"]],Z:[[new L.Line(p,s.clone()),[0,0,-1e3],[0,-Math.PI/2,0],[1e6,1,1],"helper"]]};function g(U){const Q=new L.Object3D;for(const z in U)for(let et=U[z].length;et--;){const X=U[z][et][0].clone(),nt=U[z][et][1],Y=U[z][et][2],B=U[z][et][3],rt=U[z][et][4];X.name=z,X.tag=rt,nt&&X.position.set(nt[0],nt[1],nt[2]),Y&&X.rotation.set(Y[0],Y[1],Y[2]),B&&X.scale.set(B[0],B[1],B[2]),X.updateMatrix();const it=X.geometry.clone();it.applyMatrix4(X.matrix),X.geometry=it,X.renderOrder=1/0,X.position.set(0,0,0),X.rotation.set(0,0,0),X.scale.set(1,1,1),Q.add(X)}return Q}this.gizmo={},this.picker={},this.helper={},this.add(this.gizmo.translate=g(S)),this.add(this.gizmo.rotate=g(w)),this.add(this.gizmo.scale=g(G)),this.add(this.picker.translate=g(O)),this.add(this.picker.rotate=g(v)),this.add(this.picker.scale=g(N)),this.add(this.helper.translate=g(y)),this.add(this.helper.rotate=g(P)),this.add(this.helper.scale=g(D)),this.picker.translate.visible=!1,this.picker.rotate.visible=!1,this.picker.scale.visible=!1}updateMatrixWorld(i){const e=(this.mode==="scale"?"local":this.space)==="local"?this.worldQuaternion:hs;this.gizmo.translate.visible=this.mode==="translate",this.gizmo.rotate.visible=this.mode==="rotate",this.gizmo.scale.visible=this.mode==="scale",this.helper.translate.visible=this.mode==="translate",this.helper.rotate.visible=this.mode==="rotate",this.helper.scale.visible=this.mode==="scale";let s=[];s=s.concat(this.picker[this.mode].children),s=s.concat(this.gizmo[this.mode].children),s=s.concat(this.helper[this.mode].children);for(let n=0;n<s.length;n++){const r=s[n];r.visible=!0,r.rotation.set(0,0,0),r.position.copy(this.worldPosition);let o;if(this.camera.isOrthographicCamera?o=(this.camera.top-this.camera.bottom)/this.camera.zoom:o=this.worldPosition.distanceTo(this.cameraPosition)*Math.min(1.9*Math.tan(Math.PI*this.camera.fov/360)/this.camera.zoom,7),r.scale.set(1,1,1).multiplyScalar(o*this.size/4),r.tag==="helper"){r.visible=!1,r.name==="AXIS"?(r.visible=!!this.axis,this.axis==="X"&&(St.setFromEuler(ss.set(0,0,0)),r.quaternion.copy(e).multiply(St),Math.abs(Tt.copy(Ri).applyQuaternion(e).dot(this.eye))>.9&&(r.visible=!1)),this.axis==="Y"&&(St.setFromEuler(ss.set(0,0,Math.PI/2)),r.quaternion.copy(e).multiply(St),Math.abs(Tt.copy(we).applyQuaternion(e).dot(this.eye))>.9&&(r.visible=!1)),this.axis==="Z"&&(St.setFromEuler(ss.set(0,Math.PI/2,0)),r.quaternion.copy(e).multiply(St),Math.abs(Tt.copy(gi).applyQuaternion(e).dot(this.eye))>.9&&(r.visible=!1)),this.axis==="XYZE"&&(St.setFromEuler(ss.set(0,Math.PI/2,0)),Tt.copy(this.rotationAxis),r.quaternion.setFromRotationMatrix(Nr.lookAt(Or,Tt,we)),r.quaternion.multiply(St),r.visible=this.dragging),this.axis==="E"&&(r.visible=!1)):r.name==="START"?(r.position.copy(this.worldPositionStart),r.visible=this.dragging):r.name==="END"?(r.position.copy(this.worldPosition),r.visible=this.dragging):r.name==="DELTA"?(r.position.copy(this.worldPositionStart),r.quaternion.copy(this.worldQuaternionStart),Dt.set(1e-10,1e-10,1e-10).add(this.worldPositionStart).sub(this.worldPosition).multiplyScalar(-1),Dt.applyQuaternion(this.worldQuaternionStart.clone().invert()),r.scale.copy(Dt),r.visible=this.dragging):(r.quaternion.copy(e),this.dragging?r.position.copy(this.worldPositionStart):r.position.copy(this.worldPosition),this.axis&&(r.visible=this.axis.search(r.name)!==-1));continue}r.quaternion.copy(e),this.mode==="translate"||this.mode==="scale"?(r.name==="X"&&Math.abs(Tt.copy(Ri).applyQuaternion(e).dot(this.eye))>.99&&(r.scale.set(1e-10,1e-10,1e-10),r.visible=!1),r.name==="Y"&&Math.abs(Tt.copy(we).applyQuaternion(e).dot(this.eye))>.99&&(r.scale.set(1e-10,1e-10,1e-10),r.visible=!1),r.name==="Z"&&Math.abs(Tt.copy(gi).applyQuaternion(e).dot(this.eye))>.99&&(r.scale.set(1e-10,1e-10,1e-10),r.visible=!1),r.name==="XY"&&Math.abs(Tt.copy(gi).applyQuaternion(e).dot(this.eye))<.2&&(r.scale.set(1e-10,1e-10,1e-10),r.visible=!1),r.name==="YZ"&&Math.abs(Tt.copy(Ri).applyQuaternion(e).dot(this.eye))<.2&&(r.scale.set(1e-10,1e-10,1e-10),r.visible=!1),r.name==="XZ"&&Math.abs(Tt.copy(we).applyQuaternion(e).dot(this.eye))<.2&&(r.scale.set(1e-10,1e-10,1e-10),r.visible=!1)):this.mode==="rotate"&&(ns.copy(e),Tt.copy(this.eye).applyQuaternion(St.copy(e).invert()),r.name.search("E")!==-1&&r.quaternion.setFromRotationMatrix(Nr.lookAt(this.eye,Or,we)),r.name==="X"&&(St.setFromAxisAngle(Ri,Math.atan2(-Tt.y,Tt.z)),St.multiplyQuaternions(ns,St),r.quaternion.copy(St)),r.name==="Y"&&(St.setFromAxisAngle(we,Math.atan2(Tt.x,Tt.z)),St.multiplyQuaternions(ns,St),r.quaternion.copy(St)),r.name==="Z"&&(St.setFromAxisAngle(gi,Math.atan2(Tt.y,Tt.x)),St.multiplyQuaternions(ns,St),r.quaternion.copy(St))),r.visible=r.visible&&(r.name.indexOf("X")===-1||this.showX),r.visible=r.visible&&(r.name.indexOf("Y")===-1||this.showY),r.visible=r.visible&&(r.name.indexOf("Z")===-1||this.showZ),r.visible=r.visible&&(r.name.indexOf("E")===-1||this.showX&&this.showY&&this.showZ),r.material._color=r.material._color||r.material.color.clone(),r.material._opacity=r.material._opacity||r.material.opacity,r.material.color.copy(r.material._color),r.material.opacity=r.material._opacity,this.enabled&&this.axis&&(r.name===this.axis||this.axis.split("").some(function(a){return r.name===a}))&&(r.material.color.setHex(16776960),r.material.opacity=1)}super.updateMatrixWorld(i)}}class Ac extends L.Mesh{constructor(){super(new L.PlaneGeometry(1e5,1e5,2,2),new L.MeshBasicMaterial({visible:!1,wireframe:!0,side:L.DoubleSide,transparent:!0,opacity:.1,toneMapped:!1})),this.isTransformControlsPlane=!0,this.type="TransformControlsPlane"}updateMatrixWorld(i){let t=this.space;switch(this.position.copy(this.worldPosition),this.mode==="scale"&&(t="local"),rs.copy(Ri).applyQuaternion(t==="local"?this.worldQuaternion:hs),pi.copy(we).applyQuaternion(t==="local"?this.worldQuaternion:hs),Ci.copy(gi).applyQuaternion(t==="local"?this.worldQuaternion:hs),Tt.copy(pi),this.mode){case"translate":case"scale":switch(this.axis){case"X":Tt.copy(this.eye).cross(rs),ae.copy(rs).cross(Tt);break;case"Y":Tt.copy(this.eye).cross(pi),ae.copy(pi).cross(Tt);break;case"Z":Tt.copy(this.eye).cross(Ci),ae.copy(Ci).cross(Tt);break;case"XY":ae.copy(Ci);break;case"YZ":ae.copy(rs);break;case"XZ":Tt.copy(Ci),ae.copy(pi);break;case"XYZ":case"E":ae.set(0,0,0);break}break;case"rotate":default:ae.set(0,0,0)}ae.length()===0?this.quaternion.copy(this.cameraQuaternion):(yr.lookAt(Dt.set(0,0,0),ae,Tt),this.quaternion.setFromRotationMatrix(yr)),super.updateMatrixWorld(i)}}class Gs{constructor(i,t,e,s,n,r=5,o=!0){C(this,"onDraggingStarted",new q);C(this,"onDraggingEnded",new q);C(this,"onDisposed",new q);C(this,"normal");C(this,"origin");C(this,"three",new b.Plane);C(this,"components");C(this,"world");C(this,"type","default");C(this,"_helper");C(this,"_visible",!0);C(this,"_enabled",!0);C(this,"_controlsActive",!1);C(this,"_arrowBoundBox",new b.Mesh);C(this,"_planeMesh");C(this,"_controls");C(this,"_hiddenMaterial",new b.MeshBasicMaterial({visible:!1}));C(this,"update",()=>{this._enabled&&this.three.setFromNormalAndCoplanarPoint(this.normal,this._helper.position)});C(this,"changeDrag",i=>{this._visible=!i.value,this.preventCameraMovement(),this.notifyDraggingChanged(i)});if(this.components=i,this.world=t,!t.renderer)throw new Error("The given world must have a renderer!");this.normal=s,this.origin=e,t.renderer.setPlane(!0,this.three),this._planeMesh=Gs.newPlaneMesh(r,n),this._helper=this.newHelper(),this._controls=this.newTransformControls(),this.three.setFromNormalAndCoplanarPoint(s,e),o&&this.toggleControls(!0)}get enabled(){return this._enabled}set enabled(i){if(!this.world.isDisposing){if(!this.world.renderer)throw new Error("No renderer found for clipping plane!");this._enabled=i,this.world.renderer.setPlane(i,this.three)}}get visible(){return this._visible}set visible(i){this._visible=i,this._controls.visible=i,this._helper.visible=i,this.toggleControls(i)}get meshes(){return[this._planeMesh,this._arrowBoundBox]}get planeMaterial(){return this._planeMesh.material}set planeMaterial(i){this._planeMesh.material=i}get size(){return this._planeMesh.scale.x}set size(i){this._planeMesh.scale.set(i,i,i)}get helper(){return this._helper}setFromNormalAndCoplanarPoint(i,t){this.reset(),this.normal.equals(i)||(this.normal.copy(i),this._helper.lookAt(i)),this.origin.copy(t),this._helper.position.copy(t),this._helper.updateMatrix(),this.update()}dispose(){this._enabled=!1,this.onDraggingStarted.reset(),this.onDraggingEnded.reset(),this._helper.removeFromParent(),this.world.renderer&&this.world.renderer.setPlane(!1,this.three),this._arrowBoundBox.removeFromParent(),this._arrowBoundBox.geometry.dispose(),this._planeMesh.geometry.dispose(),this._controls.removeFromParent(),this._controls.dispose(),this.onDisposed.trigger(),this.onDisposed.reset()}reset(){const i=new b.Vector3(1,0,0),t=new b.Vector3;this.normal.equals(i)||(this.normal.copy(i),this._helper.lookAt(i)),this.origin.copy(t),this._helper.position.copy(t),this._helper.updateMatrix()}toggleControls(i){if(i){if(this._controlsActive)return;this._controls.addEventListener("change",this.update),this._controls.addEventListener("dragging-changed",this.changeDrag)}else this._controls.removeEventListener("change",this.update),this._controls.removeEventListener("dragging-changed",this.changeDrag);this._controlsActive=i}newTransformControls(){if(!this.world.renderer)throw new Error("No renderer found for clipping plane!");const i=this.world.camera.three,t=this.world.renderer.three.domElement,e=new Ec(i,t);return this.initializeControls(e),this.world.scene.three.add(e),e}initializeControls(i){i.attach(this._helper),i.showX=!1,i.showY=!1,i.setSpace("local"),this.createArrowBoundingBox(),i.children[0].children[0].add(this._arrowBoundBox)}createArrowBoundingBox(){this._arrowBoundBox.geometry=new b.CylinderGeometry(.18,.18,1.2),this._arrowBoundBox.material=this._hiddenMaterial,this._arrowBoundBox.rotateX(Math.PI/2),this._arrowBoundBox.updateMatrix(),this._arrowBoundBox.geometry.applyMatrix4(this._arrowBoundBox.matrix)}notifyDraggingChanged(i){i.value?this.onDraggingStarted.trigger():this.onDraggingEnded.trigger()}preventCameraMovement(){this.world.camera.enabled=this._visible}newHelper(){const i=new b.Object3D;return i.lookAt(this.normal),i.position.copy(this.origin),this._planeMesh.position.z+=.01,i.add(this._planeMesh),this.world.scene.three.add(i),i}static newPlaneMesh(i,t){const e=new b.PlaneGeometry(1),s=new b.Mesh(e,t);return s.scale.set(i,i,i),s}}class Fc extends ye{constructor(){super(...arguments);C(this,"_config",{enabled:{value:!0,type:"Boolean"},visible:{value:!0,type:"Boolean"},color:{value:new b.Color,type:"Color"},opacity:{type:"Number",interpolable:!0,value:1,min:0,max:1},size:{type:"Number",interpolable:!0,value:2,min:0,max:100}})}get enabled(){return this._config.enabled.value}set enabled(t){this._config.enabled.value=t,this._component.enabled=t}get visible(){return this._config.visible.value}set visible(t){this._config.visible.value=t,this._component.visible=t}get color(){return this._config.color.value}set color(t){this._config.color.value=t,this._component.material.color.copy(t)}get opacity(){return this._config.opacity.value}set opacity(t){this._config.opacity.value=t,this._component.material.opacity=t}get size(){return this._config.size.value}set size(t){this._config.size.value=t,this._component.size=t}}const Qe=class Qe extends mt{constructor(t){super(t);C(this,"onSetup",new q);C(this,"onBeforeDrag",new q);C(this,"onAfterDrag",new q);C(this,"onBeforeCreate",new q);C(this,"onBeforeCancel",new q);C(this,"onAfterCancel",new q);C(this,"onBeforeDelete",new q);C(this,"onAfterCreate",new q);C(this,"onAfterDelete",new q);C(this,"onDisposed",new q);C(this,"isSetup",!1);C(this,"orthogonalY",!1);C(this,"toleranceOrthogonalY",.7);C(this,"Type",Gs);C(this,"list",[]);C(this,"config",new Fc(this,this.components,"Clipper",Qe.uuid));C(this,"_defaultConfig",{color:new b.Color(12255487),opacity:.2,size:2});C(this,"_material",new b.MeshBasicMaterial({color:12255487,side:b.DoubleSide,transparent:!0,opacity:.2}));C(this,"_size",5);C(this,"_enabled",!1);C(this,"_visible",!0);C(this,"_onStartDragging",()=>{this.onBeforeDrag.trigger()});C(this,"_onEndDragging",()=>{this.onAfterDrag.trigger()});this.components.add(Qe.uuid,this)}get enabled(){return this._enabled}set enabled(t){this._enabled=t;for(const e of this.list)e.enabled=t;this.updateMaterialsAndPlanes()}get visible(){return this._visible}set visible(t){this._visible=t;for(const e of this.list)e.visible=t}get material(){return this._material}set material(t){this._material=t;for(const e of this.list)e.planeMaterial=t}get size(){return this._size}set size(t){this._size=t;for(const e of this.list)e.size=t}dispose(){this._enabled=!1,this.components.get(Ne).list.delete(this.config.uuid);for(const e of this.list)e.dispose();this.list.length=0,this._material.dispose(),this.onBeforeCreate.reset(),this.onBeforeCancel.reset(),this.onBeforeDelete.reset(),this.onBeforeDrag.reset(),this.onAfterCreate.reset(),this.onAfterCancel.reset(),this.onAfterDelete.reset(),this.onAfterDrag.reset(),this.onDisposed.trigger(Qe.uuid),this.onDisposed.reset()}create(t){const n=this.components.get(ve).get(t).castRay();return n?this.createPlaneFromIntersection(t,n):null}createFromNormalAndCoplanarPoint(t,e,s){const n=this.newPlane(t,s,e);return this.updateMaterialsAndPlanes(),n}delete(t,e){e||(e=this.pickPlane(t)),e&&this.deletePlane(e)}deleteAll(t){const e=[...this.list];for(const s of e)if(!t||t.has(s.type)){this.delete(s.world,s);const n=this.list.indexOf(s);n!==-1&&this.list.splice(n,1)}}setup(t){const e={...this._defaultConfig,...t};this.config.color=e.color,this.config.opacity=e.opacity,this.config.size=e.size,this.isSetup=!0,this.onSetup.trigger()}deletePlane(t){const e=this.list.indexOf(t);if(e!==-1){if(this.list.splice(e,1),!t.world.renderer)throw new Error("Renderer not found for this plane's world!");t.world.renderer.setPlane(!1,t.three),t.dispose(),this.updateMaterialsAndPlanes(),this.onAfterDelete.trigger(t)}}pickPlane(t){const s=this.components.get(ve).get(t),n=this.getAllPlaneMeshes(),r=s.castRay(n);if(r){const o=r.object;return this.list.find(a=>a.meshes.includes(o))}}getAllPlaneMeshes(){const t=[];for(const e of this.list)t.push(...e.meshes);return t}createPlaneFromIntersection(t,e){var a;if(!t.renderer)throw new Error("The given world must have a renderer!");const s=e.point.distanceTo(new b.Vector3(0,0,0)),n=(a=e.face)==null?void 0:a.normal;if(!s||!n)return null;const r=this.getWorldNormal(e,n),o=this.newPlane(t,e.point,r.negate());return o.visible=this._visible,o.size=this._size,t.renderer.setPlane(!0,o.three),this.updateMaterialsAndPlanes(),o}getWorldNormal(t,e){const s=t.object;let n=t.object.matrixWorld.clone();if(s instanceof b.InstancedMesh&&t.instanceId!==void 0){const l=new b.Matrix4;s.getMatrixAt(t.instanceId,l),n=l.multiply(n)}const o=new b.Matrix3().getNormalMatrix(n),a=e.clone().applyMatrix3(o).normalize();return this.normalizePlaneDirectionY(a),a}normalizePlaneDirectionY(t){this.orthogonalY&&(t.y>this.toleranceOrthogonalY&&(t.x=0,t.y=1,t.z=0),t.y<-this.toleranceOrthogonalY&&(t.x=0,t.y=-1,t.z=0))}newPlane(t,e,s){const n=new this.Type(this.components,t,e,s,this._material);return n.onDraggingStarted.add(this._onStartDragging),n.onDraggingEnded.add(this._onEndDragging),this.list.push(n),this.onAfterCreate.trigger(n),n}updateMaterialsAndPlanes(){const t=this.components.get(Pi);for(const[e,s]of t.list){if(!s.renderer)continue;s.renderer.updateClippingPlanes();const{clippingPlanes:n}=s.renderer;for(const r of s.meshes)if(r.material)if(Array.isArray(r.material))for(const o of r.material)o.clippingPlanes=n;else r.material.clippingPlanes=n}}};C(Qe,"uuid","66290bc5-18c4-4cd1-9379-2e17a0617611");let Is=Qe;class eo{constructor(i){C(this,"enabled",!1);C(this,"id","FirstPerson");this.camera=i}set(i){if(this.enabled=i,i){if(this.camera.projection.current!=="Perspective"){this.camera.set("Orbit");return}this.setupFirstPersonCamera()}}setupFirstPersonCamera(){const i=this.camera.controls,t=new b.Vector3;i.distance--,i.getPosition(t),i.minDistance=1,i.maxDistance=1,i.distance=1,i.moveTo(t.x,t.y,t.z),i.truckSpeed=50,i.mouseButtons.wheel=bt.ACTION.DOLLY,i.touches.two=bt.ACTION.TOUCH_ZOOM_TRUCK}}class io{constructor(i){C(this,"enabled",!0);C(this,"id","Orbit");this.camera=i,this.activateOrbitControls()}set(i){this.enabled=i,i&&this.activateOrbitControls()}activateOrbitControls(){const i=this.camera.controls;i.minDistance=1,i.maxDistance=300;const t=new b.Vector3;i.getPosition(t);const e=t.length();i.distance=e,i.truckSpeed=2;const{rotation:s}=this.camera.three,n=new b.Vector3(0,0,-1).applyEuler(s),r=t.addScaledVector(n,e);i.moveTo(r.x,r.y,r.z)}}class so{constructor(i){C(this,"enabled",!1);C(this,"id","Plan");C(this,"mouseAction1");C(this,"mouseAction2");C(this,"mouseInitialized",!1);C(this,"defaultAzimuthSpeed");C(this,"defaultPolarSpeed");this.camera=i,this.defaultAzimuthSpeed=i.controls.azimuthRotateSpeed,this.defaultPolarSpeed=i.controls.polarRotateSpeed}set(i){this.enabled=i;const t=this.camera.controls;t.azimuthRotateSpeed=i?0:this.defaultAzimuthSpeed,t.polarRotateSpeed=i?0:this.defaultPolarSpeed,this.mouseInitialized||(this.mouseAction1=t.touches.one,this.mouseAction2=t.touches.two,this.mouseInitialized=!0),i?(t.mouseButtons.left=bt.ACTION.TRUCK,t.touches.one=bt.ACTION.TOUCH_TRUCK,t.touches.two=bt.ACTION.TOUCH_ZOOM):(t.mouseButtons.left=bt.ACTION.ROTATE,t.touches.one=this.mouseAction1,t.touches.two=this.mouseAction2)}}class no{constructor(i){C(this,"onChanged",new q);C(this,"current","Perspective");C(this,"camera");C(this,"matchOrthoDistanceEnabled",!1);C(this,"_component");C(this,"_previousDistance",-1);this._component=i,this.camera=i.three}async set(i){this.current!==i&&(i==="Orthographic"?this.setOrthoCamera():await this.setPerspectiveCamera(),this.onChanged.trigger(this.camera))}async toggle(){const t=this.current==="Perspective"?"Orthographic":"Perspective";await this.set(t)}setOrthoCamera(){if(this._component.mode===null||this._component.mode.id==="FirstPerson")return;this._previousDistance=this._component.controls.distance,this._component.controls.distance=200;const i=this.getPerspectiveDims();if(!i)return;const{width:t,height:e}=i;this.setupOrthoCamera(e,t),this.camera=this._component.threeOrtho,this.current="Orthographic"}getPerspectiveDims(){const i=this._component.currentWorld;if(!i||!i.renderer)return null;const t=new b.Vector3;this._component.threePersp.getWorldDirection(t);const e=new b.Vector3;this._component.controls.getTarget(e);const n=e.clone().sub(this._component.threePersp.position).dot(t),r=i.renderer.getSize(),o=r.x/r.y,a=this._component.threePersp,l=n*2*Math.atan(a.fov*(Math.PI/180)/2);return{width:l*o,height:l}}setupOrthoCamera(i,t){this._component.controls.mouseButtons.wheel=bt.ACTION.ZOOM,this._component.controls.mouseButtons.middle=bt.ACTION.ZOOM;const e=this._component.threePersp,s=this._component.threeOrtho;s.zoom=1,s.left=t/-2,s.right=t/2,s.top=i/2,s.bottom=i/-2,s.updateProjectionMatrix(),s.position.copy(e.position),s.quaternion.copy(e.quaternion),this._component.controls.camera=s}getDistance(){const i=this._component.threePersp,t=this._component.threeOrtho;return(t.top-t.bottom)/t.zoom/(2*Math.atan(i.fov*(Math.PI/180)/2))}async setPerspectiveCamera(){this._component.controls.mouseButtons.wheel=bt.ACTION.DOLLY,this._component.controls.mouseButtons.middle=bt.ACTION.DOLLY;const i=this._component.threePersp,t=this._component.threeOrtho;i.position.copy(t.position),i.quaternion.copy(t.quaternion),this._component.controls.mouseButtons.wheel=bt.ACTION.DOLLY,this.matchOrthoDistanceEnabled?this._component.controls.distance=this.getDistance():this._component.controls.distance=this._previousDistance,await this._component.controls.zoomTo(1),i.updateProjectionMatrix(),this._component.controls.camera=i,this.camera=i,this.current="Perspective"}}class ro extends Je{constructor(t){super(t);C(this,"projection");C(this,"threeOrtho");C(this,"threePersp");C(this,"_userInputButtons",{});C(this,"_frustumSize",50);C(this,"_navigationModes",new Map);C(this,"_mode",null);C(this,"previousSize",null);this.threePersp=this.three,this.threeOrtho=this.newOrthoCamera(),this.projection=new no(this),this.onAspectUpdated.add(()=>{this.setOrthoPerspCameraAspect()}),this.projection.onChanged.add(e=>{this.three=e,this.updateAspect()}),this.onWorldChanged.add(({action:e})=>{e==="added"&&(this._navigationModes.clear(),this._navigationModes.set("Orbit",new io(this)),this._navigationModes.set("FirstPerson",new eo(this)),this._navigationModes.set("Plan",new so(this)),this._mode=this._navigationModes.get("Orbit"),this.mode.set(!0,{preventTargetAdjustment:!0}),this.currentWorld&&this.currentWorld.renderer&&(this.previousSize=this.currentWorld.renderer.getSize().clone()))})}get mode(){if(!this._mode)throw new Error("Mode not found, camera not initialized");return this._mode}dispose(){super.dispose(),this.threeOrtho.removeFromParent()}set(t){if(this.mode!==null&&this.mode.id!==t){if(this.mode.set(!1),!this._navigationModes.has(t))throw new Error("The specified mode does not exist!");this._mode=this._navigationModes.get(t),this.mode.set(!0)}}async fit(t,e=1.5){if(!this.enabled)return;const s=Number.MAX_VALUE,n=Number.MIN_VALUE,r=new b.Vector3(s,s,s),o=new b.Vector3(n,n,n);for(const u of t){const d=new b.Box3().setFromObject(u);d.min.x<r.x&&(r.x=d.min.x),d.min.y<r.y&&(r.y=d.min.y),d.min.z<r.z&&(r.z=d.min.z),d.max.x>o.x&&(o.x=d.max.x),d.max.y>o.y&&(o.y=d.max.y),d.max.z>o.z&&(o.z=d.max.z)}const a=new b.Box3(r,o),l=new b.Vector3;a.getSize(l);const h=new b.Vector3;a.getCenter(h);const f=Math.max(l.x,l.y,l.z)*e,I=new b.Sphere(h,f);await this.controls.fitToSphere(I,!0)}setUserInput(t){t?this.enableUserInput():this.disableUserInput()}disableUserInput(){this._userInputButtons.left=this.controls.mouseButtons.left,this._userInputButtons.right=this.controls.mouseButtons.right,this._userInputButtons.middle=this.controls.mouseButtons.middle,this._userInputButtons.wheel=this.controls.mouseButtons.wheel,this.controls.mouseButtons.left=0,this.controls.mouseButtons.right=0,this.controls.mouseButtons.middle=0,this.controls.mouseButtons.wheel=0}enableUserInput(){Object.keys(this._userInputButtons).length!==0&&(this.controls.mouseButtons.left=this._userInputButtons.left,this.controls.mouseButtons.right=this._userInputButtons.right,this.controls.mouseButtons.middle=this._userInputButtons.middle,this.controls.mouseButtons.wheel=this._userInputButtons.wheel)}newOrthoCamera(){const t=window.innerWidth/window.innerHeight;return new b.OrthographicCamera(this._frustumSize*t/-2,this._frustumSize*t/2,this._frustumSize/2,this._frustumSize/-2,.1,1e3)}setOrthoPerspCameraAspect(){if(!this.currentWorld||!this.currentWorld.renderer||!this.previousSize)return;const t=this.currentWorld.renderer.getSize(),e=this.threeOrtho.top,s=this.threeOrtho.right,n=t.y/this.previousSize.y,r=t.x/this.previousSize.x,o=e*n,a=s*r;this.threeOrtho.left=-a,this.threeOrtho.right=a,this.threeOrtho.top=o,this.threeOrtho.bottom=-o,this.threeOrtho.updateProjectionMatrix(),this.previousSize.copy(t)}}const Sn=new Map([[k.IFCRELAGGREGATES,{forRelated:"Decomposes",forRelating:"IsDecomposedBy"}],[k.IFCRELASSOCIATESMATERIAL,{forRelated:"HasAssociations",forRelating:"AssociatedTo"}],[k.IFCRELASSOCIATESCLASSIFICATION,{forRelated:"HasAssociations",forRelating:"ClassificationForObjects"}],[k.IFCRELASSIGNSTOGROUP,{forRelated:"HasAssignments",forRelating:"IsGroupedBy"}],[k.IFCRELDEFINESBYPROPERTIES,{forRelated:"IsDefinedBy",forRelating:"DefinesOcurrence"}],[k.IFCRELDEFINESBYTYPE,{forRelated:"IsTypedBy",forRelating:"Types"}],[k.IFCRELDEFINESBYTEMPLATE,{forRelated:"IsDefinedBy",forRelating:"Defines"}],[k.IFCRELCONTAINEDINSPATIALSTRUCTURE,{forRelated:"ContainedInStructure",forRelating:"ContainsElements"}],[k.IFCRELFLOWCONTROLELEMENTS,{forRelated:"AssignedToFlowElement",forRelating:"HasControlElements"}],[k.IFCRELCONNECTSELEMENTS,{forRelated:"ConnectedFrom",forRelating:"ConnectedTo"}],[k.IFCRELASSIGNSTOPRODUCT,{forRelated:"HasAssignments",forRelating:"ReferencedBy"}],[k.IFCRELDECLARES,{forRelated:"HasContext",forRelating:"Declares"}],[k.IFCRELASSIGNSTOCONTROL,{forRelated:"HasAssignments",forRelating:"Controls"}],[k.IFCRELNESTS,{forRelated:"Nests",forRelating:"IsNestedBy"}],[k.IFCRELASSOCIATESDOCUMENT,{forRelated:"HasAssociations",forRelating:"DocumentRefForObjects"}]]),oo={103090709:"IFCPROJECT",4097777520:"IFCSITE",4031249490:"IFCBUILDING",3124254112:"IFCBUILDINGSTOREY",3856911033:"IFCSPACE",1674181508:"IFCANNOTATION",25142252:"IFCCONTROLLER",32344328:"IFCBOILER",76236018:"IFCLAMP",90941305:"IFCPUMP",177149247:"IFCAIRTERMINALBOX",182646315:"IFCFLOWINSTRUMENT",263784265:"IFCFURNISHINGELEMENT",264262732:"IFCELECTRICGENERATOR",277319702:"IFCAUDIOVISUALAPPLIANCE",310824031:"IFCPIPEFITTING",331165859:"IFCSTAIR",342316401:"IFCDUCTFITTING",377706215:"IFCMECHANICALFASTENER",395920057:"IFCDOOR",402227799:"IFCELECTRICMOTOR",413509423:"IFCSYSTEMFURNITUREELEMENT",484807127:"IFCEVAPORATOR",486154966:"IFCWINDOWSTANDARDCASE",629592764:"IFCLIGHTFIXTURE",630975310:"IFCUNITARYCONTROLELEMENT",635142910:"IFCCABLECARRIERFITTING",639361253:"IFCCOIL",647756555:"IFCFASTENER",707683696:"IFCFLOWSTORAGEDEVICE",738039164:"IFCPROTECTIVEDEVICE",753842376:"IFCBEAM",812556717:"IFCTANK",819412036:"IFCFILTER",843113511:"IFCCOLUMN",862014818:"IFCELECTRICDISTRIBUTIONBOARD",900683007:"IFCFOOTING",905975707:"IFCCOLUMNSTANDARDCASE",926996030:"IFCVOIDINGFEATURE",979691226:"IFCREINFORCINGBAR",987401354:"IFCFLOWSEGMENT",1003880860:"IFCELECTRICTIMECONTROL",1051757585:"IFCCABLEFITTING",1052013943:"IFCDISTRIBUTIONCHAMBERELEMENT",1062813311:"IFCDISTRIBUTIONCONTROLELEMENT",1073191201:"IFCMEMBER",1095909175:"IFCBUILDINGELEMENTPROXY",1156407060:"IFCPLATESTANDARDCASE",1162798199:"IFCSWITCHINGDEVICE",1329646415:"IFCSHADINGDEVICE",1335981549:"IFCDISCRETEACCESSORY",1360408905:"IFCDUCTSILENCER",1404847402:"IFCSTACKTERMINAL",1426591983:"IFCFIRESUPPRESSIONTERMINAL",1437502449:"IFCMEDICALDEVICE",1509553395:"IFCFURNITURE",1529196076:"IFCSLAB",1620046519:"IFCTRANSPORTELEMENT",1634111441:"IFCAIRTERMINAL",1658829314:"IFCENERGYCONVERSIONDEVICE",1677625105:"IFCCIVILELEMENT",1687234759:"IFCPILE",1904799276:"IFCELECTRICAPPLIANCE",1911478936:"IFCMEMBERSTANDARDCASE",1945004755:"IFCDISTRIBUTIONELEMENT",1973544240:"IFCCOVERING",1999602285:"IFCSPACEHEATER",2016517767:"IFCROOF",2056796094:"IFCAIRTOAIRHEATRECOVERY",2058353004:"IFCFLOWCONTROLLER",2068733104:"IFCHUMIDIFIER",2176052936:"IFCJUNCTIONBOX",2188021234:"IFCFLOWMETER",2223149337:"IFCFLOWTERMINAL",2262370178:"IFCRAILING",2272882330:"IFCCONDENSER",2295281155:"IFCPROTECTIVEDEVICETRIPPINGUNIT",2320036040:"IFCREINFORCINGMESH",2347447852:"IFCTENDONANCHOR",2391383451:"IFCVIBRATIONISOLATOR",2391406946:"IFCWALL",2474470126:"IFCMOTORCONNECTION",2769231204:"IFCVIRTUALELEMENT",2814081492:"IFCENGINE",2906023776:"IFCBEAMSTANDARDCASE",2938176219:"IFCBURNER",2979338954:"IFCBUILDINGELEMENTPART",3024970846:"IFCRAMP",3026737570:"IFCTUBEBUNDLE",3027962421:"IFCSLABSTANDARDCASE",3040386961:"IFCDISTRIBUTIONFLOWELEMENT",3053780830:"IFCSANITARYTERMINAL",3079942009:"IFCOPENINGSTANDARDCASE",3087945054:"IFCALARM",3101698114:"IFCSURFACEFEATURE",3127900445:"IFCSLABELEMENTEDCASE",3132237377:"IFCFLOWMOVINGDEVICE",3171933400:"IFCPLATE",3221913625:"IFCCOMMUNICATIONSAPPLIANCE",3242481149:"IFCDOORSTANDARDCASE",3283111854:"IFCRAMPFLIGHT",3296154744:"IFCCHIMNEY",3304561284:"IFCWINDOW",3310460725:"IFCELECTRICFLOWSTORAGEDEVICE",3319311131:"IFCHEATEXCHANGER",3415622556:"IFCFAN",3420628829:"IFCSOLARDEVICE",3493046030:"IFCGEOGRAPHICELEMENT",3495092785:"IFCCURTAINWALL",3508470533:"IFCFLOWTREATMENTDEVICE",3512223829:"IFCWALLSTANDARDCASE",3518393246:"IFCDUCTSEGMENT",3571504051:"IFCCOMPRESSOR",3588315303:"IFCOPENINGELEMENT",3612865200:"IFCPIPESEGMENT",3640358203:"IFCCOOLINGTOWER",3651124850:"IFCPROJECTIONELEMENT",3694346114:"IFCOUTLET",3747195512:"IFCEVAPORATIVECOOLER",3758799889:"IFCCABLECARRIERSEGMENT",3824725483:"IFCTENDON",3825984169:"IFCTRANSFORMER",3902619387:"IFCCHILLER",4074379575:"IFCDAMPER",4086658281:"IFCSENSOR",4123344466:"IFCELEMENTASSEMBLY",4136498852:"IFCCOOLEDBEAM",4156078855:"IFCWALLELEMENTEDCASE",4175244083:"IFCINTERCEPTOR",4207607924:"IFCVALVE",4217484030:"IFCCABLESEGMENT",4237592921:"IFCWASTETERMINAL",4252922144:"IFCSTAIRFLIGHT",4278956645:"IFCFLOWFITTING",4288193352:"IFCACTUATOR",4292641817:"IFCUNITARYEQUIPMENT",3009204131:"IFCGRID"};class Sc{getAll(i,t){const e={},s=Object.keys(oo).map(n=>parseInt(n,10));for(let n=0;n<s.length;n++){const r=s[n],o=i.GetLineIDsWithType(t,r),a=o.size();for(let l=0;l<a;l++)e[o.get(l)]=r}return e}}const _i={950732822:"IFCURIREFERENCE",4075327185:"IFCTIME",1209108979:"IFCTEMPERATURERATEOFCHANGEMEASURE",3457685358:"IFCSOUNDPRESSURELEVELMEASURE",4157543285:"IFCSOUNDPOWERLEVELMEASURE",2798247006:"IFCPROPERTYSETDEFINITIONSET",1790229001:"IFCPOSITIVEINTEGER",525895558:"IFCNONNEGATIVELENGTHMEASURE",1774176899:"IFCLINEINDEX",1275358634:"IFCLANGUAGEID",2541165894:"IFCDURATION",3701338814:"IFCDAYINWEEKNUMBER",2195413836:"IFCDATETIME",937566702:"IFCDATE",1683019596:"IFCCARDINALPOINTREFERENCE",2314439260:"IFCBINARY",1500781891:"IFCAREADENSITYMEASURE",3683503648:"IFCARCINDEX",4065007721:"IFCYEARNUMBER",1718600412:"IFCWARPINGMOMENTMEASURE",51269191:"IFCWARPINGCONSTANTMEASURE",2593997549:"IFCVOLUMETRICFLOWRATEMEASURE",3458127941:"IFCVOLUMEMEASURE",3345633955:"IFCVAPORPERMEABILITYMEASURE",1278329552:"IFCTORQUEMEASURE",2591213694:"IFCTIMESTAMP",2726807636:"IFCTIMEMEASURE",743184107:"IFCTHERMODYNAMICTEMPERATUREMEASURE",2016195849:"IFCTHERMALTRANSMITTANCEMEASURE",857959152:"IFCTHERMALRESISTANCEMEASURE",2281867870:"IFCTHERMALEXPANSIONCOEFFICIENTMEASURE",2645777649:"IFCTHERMALCONDUCTIVITYMEASURE",232962298:"IFCTHERMALADMITTANCEMEASURE",296282323:"IFCTEXTTRANSFORMATION",603696268:"IFCTEXTFONTNAME",3490877962:"IFCTEXTDECORATION",1460886941:"IFCTEXTALIGNMENT",2801250643:"IFCTEXT",58845555:"IFCTEMPERATUREGRADIENTMEASURE",361837227:"IFCSPECULARROUGHNESS",2757832317:"IFCSPECULAREXPONENT",3477203348:"IFCSPECIFICHEATCAPACITYMEASURE",993287707:"IFCSOUNDPRESSUREMEASURE",846465480:"IFCSOUNDPOWERMEASURE",3471399674:"IFCSOLIDANGLEMEASURE",408310005:"IFCSHEARMODULUSMEASURE",2190458107:"IFCSECTIONALAREAINTEGRALMEASURE",3467162246:"IFCSECTIONMODULUSMEASURE",2766185779:"IFCSECONDINMINUTE",3211557302:"IFCROTATIONALSTIFFNESSMEASURE",1755127002:"IFCROTATIONALMASSMEASURE",2133746277:"IFCROTATIONALFREQUENCYMEASURE",200335297:"IFCREAL",96294661:"IFCRATIOMEASURE",3972513137:"IFCRADIOACTIVITYMEASURE",3665567075:"IFCPRESSUREMEASURE",2169031380:"IFCPRESENTABLETEXT",1364037233:"IFCPOWERMEASURE",1245737093:"IFCPOSITIVERATIOMEASURE",3054510233:"IFCPOSITIVEPLANEANGLEMEASURE",2815919920:"IFCPOSITIVELENGTHMEASURE",4042175685:"IFCPLANEANGLEMEASURE",2642773653:"IFCPLANARFORCEMEASURE",2260317790:"IFCPARAMETERVALUE",929793134:"IFCPHMEASURE",2395907400:"IFCNUMERICMEASURE",2095195183:"IFCNORMALISEDRATIOMEASURE",765770214:"IFCMONTHINYEARNUMBER",2615040989:"IFCMONETARYMEASURE",3114022597:"IFCMOMENTOFINERTIAMEASURE",1648970520:"IFCMOLECULARWEIGHTMEASURE",3177669450:"IFCMOISTUREDIFFUSIVITYMEASURE",1753493141:"IFCMODULUSOFSUBGRADEREACTIONMEASURE",1052454078:"IFCMODULUSOFROTATIONALSUBGRADEREACTIONMEASURE",2173214787:"IFCMODULUSOFLINEARSUBGRADEREACTIONMEASURE",3341486342:"IFCMODULUSOFELASTICITYMEASURE",102610177:"IFCMINUTEINHOUR",3531705166:"IFCMASSPERLENGTHMEASURE",3124614049:"IFCMASSMEASURE",4017473158:"IFCMASSFLOWRATEMEASURE",1477762836:"IFCMASSDENSITYMEASURE",2486716878:"IFCMAGNETICFLUXMEASURE",286949696:"IFCMAGNETICFLUXDENSITYMEASURE",151039812:"IFCLUMINOUSINTENSITYMEASURE",2755797622:"IFCLUMINOUSINTENSITYDISTRIBUTIONMEASURE",2095003142:"IFCLUMINOUSFLUXMEASURE",503418787:"IFCLOGICAL",3086160713:"IFCLINEARVELOCITYMEASURE",1307019551:"IFCLINEARSTIFFNESSMEASURE",2128979029:"IFCLINEARMOMENTMEASURE",191860431:"IFCLINEARFORCEMEASURE",1243674935:"IFCLENGTHMEASURE",3258342251:"IFCLABEL",2054016361:"IFCKINEMATICVISCOSITYMEASURE",3192672207:"IFCISOTHERMALMOISTURECAPACITYMEASURE",3686016028:"IFCIONCONCENTRATIONMEASURE",3809634241:"IFCINTEGERCOUNTRATEMEASURE",1939436016:"IFCINTEGER",2679005408:"IFCINDUCTANCEMEASURE",3358199106:"IFCILLUMINANCEMEASURE",983778844:"IFCIDENTIFIER",2589826445:"IFCHOURINDAY",1158859006:"IFCHEATINGVALUEMEASURE",3113092358:"IFCHEATFLUXDENSITYMEASURE",3064340077:"IFCGLOBALLYUNIQUEID",3044325142:"IFCFREQUENCYMEASURE",1361398929:"IFCFORCEMEASURE",2590844177:"IFCFONTWEIGHT",2715512545:"IFCFONTVARIANT",1102727119:"IFCFONTSTYLE",2078135608:"IFCENERGYMEASURE",2506197118:"IFCELECTRICVOLTAGEMEASURE",2951915441:"IFCELECTRICRESISTANCEMEASURE",3790457270:"IFCELECTRICCURRENTMEASURE",2093906313:"IFCELECTRICCONDUCTANCEMEASURE",3818826038:"IFCELECTRICCHARGEMEASURE",1827137117:"IFCELECTRICCAPACITANCEMEASURE",69416015:"IFCDYNAMICVISCOSITYMEASURE",524656162:"IFCDOSEEQUIVALENTMEASURE",4134073009:"IFCDIMENSIONCOUNT",1514641115:"IFCDESCRIPTIVEMEASURE",300323983:"IFCDAYLIGHTSAVINGHOUR",86635668:"IFCDAYINMONTHNUMBER",94842927:"IFCCURVATUREMEASURE",1778710042:"IFCCOUNTMEASURE",3238673880:"IFCCONTEXTDEPENDENTMEASURE",3812528620:"IFCCOMPOUNDPLANEANGLEMEASURE",2991860651:"IFCCOMPLEXNUMBER",1867003952:"IFCBOXALIGNMENT",2735952531:"IFCBOOLEAN",2650437152:"IFCAREAMEASURE",632304761:"IFCANGULARVELOCITYMEASURE",360377573:"IFCAMOUNTOFSUBSTANCEMEASURE",4182062534:"IFCACCELERATIONMEASURE",3699917729:"IFCABSORBEDDOSEMEASURE",1971632696:"IFCGEOSLICE",2680139844:"IFCGEOMODEL",24726584:"IFCELECTRICFLOWTREATMENTDEVICE",3693000487:"IFCDISTRIBUTIONBOARD",3460952963:"IFCCONVEYORSEGMENT",3999819293:"IFCCAISSONFOUNDATION",3314249567:"IFCBOREHOLE",4196446775:"IFCBEARING",325726236:"IFCALIGNMENT",3425753595:"IFCTRACKELEMENT",991950508:"IFCSIGNAL",3798194928:"IFCREINFORCEDSOIL",3290496277:"IFCRAIL",1383356374:"IFCPAVEMENT",2182337498:"IFCNAVIGATIONELEMENT",234836483:"IFCMOORINGDEVICE",2078563270:"IFCMOBILETELECOMMUNICATIONSAPPLIANCE",1638804497:"IFCLIQUIDTERMINAL",1154579445:"IFCLINEARPOSITIONINGELEMENT",2696325953:"IFCKERB",2713699986:"IFCGEOTECHNICALASSEMBLY",2142170206:"IFCELECTRICFLOWTREATMENTDEVICETYPE",3376911765:"IFCEARTHWORKSFILL",1077100507:"IFCEARTHWORKSELEMENT",3071239417:"IFCEARTHWORKSCUT",479945903:"IFCDISTRIBUTIONBOARDTYPE",3426335179:"IFCDEEPFOUNDATION",1502416096:"IFCCOURSE",2940368186:"IFCCONVEYORSEGMENTTYPE",3203706013:"IFCCAISSONFOUNDATIONTYPE",3862327254:"IFCBUILTSYSTEM",1876633798:"IFCBUILTELEMENT",963979645:"IFCBRIDGEPART",644574406:"IFCBRIDGE",3649138523:"IFCBEARINGTYPE",1662888072:"IFCALIGNMENTVERTICAL",317615605:"IFCALIGNMENTSEGMENT",1545765605:"IFCALIGNMENTHORIZONTAL",4266260250:"IFCALIGNMENTCANT",3956297820:"IFCVIBRATIONDAMPERTYPE",1530820697:"IFCVIBRATIONDAMPER",840318589:"IFCVEHICLE",1953115116:"IFCTRANSPORTATIONDEVICE",618700268:"IFCTRACKELEMENTTYPE",2281632017:"IFCTENDONCONDUITTYPE",3663046924:"IFCTENDONCONDUIT",42703149:"IFCSINESPIRAL",1894708472:"IFCSIGNALTYPE",3599934289:"IFCSIGNTYPE",33720170:"IFCSIGN",1027922057:"IFCSEVENTHORDERPOLYNOMIALSPIRAL",544395925:"IFCSEGMENTEDREFERENCECURVE",3649235739:"IFCSECONDORDERPOLYNOMIALSPIRAL",550521510:"IFCROADPART",146592293:"IFCROAD",3818125796:"IFCRELADHERESTOELEMENT",4021432810:"IFCREFERENT",1891881377:"IFCRAILWAYPART",3992365140:"IFCRAILWAY",1763565496:"IFCRAILTYPE",1946335990:"IFCPOSITIONINGELEMENT",514975943:"IFCPAVEMENTTYPE",506776471:"IFCNAVIGATIONELEMENTTYPE",710110818:"IFCMOORINGDEVICETYPE",1950438474:"IFCMOBILETELECOMMUNICATIONSAPPLIANCETYPE",976884017:"IFCMARINEPART",525669439:"IFCMARINEFACILITY",1770583370:"IFCLIQUIDTERMINALTYPE",2176059722:"IFCLINEARELEMENT",679976338:"IFCKERBTYPE",3948183225:"IFCIMPACTPROTECTIONDEVICETYPE",2568555532:"IFCIMPACTPROTECTIONDEVICE",2898700619:"IFCGRADIENTCURVE",1594536857:"IFCGEOTECHNICALSTRATUM",4230923436:"IFCGEOTECHNICALELEMENT",4228831410:"IFCFACILITYPARTCOMMON",1310830890:"IFCFACILITYPART",24185140:"IFCFACILITY",4234616927:"IFCDIRECTRIXDERIVEDREFERENCESWEPTAREASOLID",1306400036:"IFCDEEPFOUNDATIONTYPE",4189326743:"IFCCOURSETYPE",2000195564:"IFCCOSINESPIRAL",3497074424:"IFCCLOTHOID",1626504194:"IFCBUILTELEMENTTYPE",3651464721:"IFCVEHICLETYPE",1229763772:"IFCTRIANGULATEDIRREGULARNETWORK",3665877780:"IFCTRANSPORTATIONDEVICETYPE",782932809:"IFCTHIRDORDERPOLYNOMIALSPIRAL",2735484536:"IFCSPIRAL",1356537516:"IFCSECTIONEDSURFACE",1290935644:"IFCSECTIONEDSOLIDHORIZONTAL",1862484736:"IFCSECTIONEDSOLID",1441486842:"IFCRELPOSITIONS",1033248425:"IFCRELASSOCIATESPROFILEDEF",3381221214:"IFCPOLYNOMIALCURVE",2485787929:"IFCOFFSETCURVEBYDISTANCES",590820931:"IFCOFFSETCURVE",3465909080:"IFCINDEXEDPOLYGONALTEXTUREMAP",593015953:"IFCDIRECTRIXCURVESWEPTAREASOLID",4212018352:"IFCCURVESEGMENT",3425423356:"IFCAXIS2PLACEMENTLINEAR",823603102:"IFCSEGMENT",2165702409:"IFCPOINTBYDISTANCEEXPRESSION",182550632:"IFCOPENCROSSPROFILEDEF",388784114:"IFCLINEARPLACEMENT",536804194:"IFCALIGNMENTHORIZONTALSEGMENT",3752311538:"IFCALIGNMENTCANTSEGMENT",1010789467:"IFCTEXTURECOORDINATEINDICESWITHVOIDS",222769930:"IFCTEXTURECOORDINATEINDICES",2691318326:"IFCQUANTITYNUMBER",3633395639:"IFCALIGNMENTVERTICALSEGMENT",2879124712:"IFCALIGNMENTPARAMETERSEGMENT",25142252:"IFCCONTROLLER",3087945054:"IFCALARM",4288193352:"IFCACTUATOR",630975310:"IFCUNITARYCONTROLELEMENT",4086658281:"IFCSENSOR",2295281155:"IFCPROTECTIVEDEVICETRIPPINGUNIT",182646315:"IFCFLOWINSTRUMENT",1426591983:"IFCFIRESUPPRESSIONTERMINAL",819412036:"IFCFILTER",3415622556:"IFCFAN",1003880860:"IFCELECTRICTIMECONTROL",402227799:"IFCELECTRICMOTOR",264262732:"IFCELECTRICGENERATOR",3310460725:"IFCELECTRICFLOWSTORAGEDEVICE",862014818:"IFCELECTRICDISTRIBUTIONBOARD",1904799276:"IFCELECTRICAPPLIANCE",1360408905:"IFCDUCTSILENCER",3518393246:"IFCDUCTSEGMENT",342316401:"IFCDUCTFITTING",562808652:"IFCDISTRIBUTIONCIRCUIT",4074379575:"IFCDAMPER",3640358203:"IFCCOOLINGTOWER",4136498852:"IFCCOOLEDBEAM",2272882330:"IFCCONDENSER",3571504051:"IFCCOMPRESSOR",3221913625:"IFCCOMMUNICATIONSAPPLIANCE",639361253:"IFCCOIL",3902619387:"IFCCHILLER",4217484030:"IFCCABLESEGMENT",1051757585:"IFCCABLEFITTING",3758799889:"IFCCABLECARRIERSEGMENT",635142910:"IFCCABLECARRIERFITTING",2938176219:"IFCBURNER",32344328:"IFCBOILER",2906023776:"IFCBEAMSTANDARDCASE",277319702:"IFCAUDIOVISUALAPPLIANCE",2056796094:"IFCAIRTOAIRHEATRECOVERY",177149247:"IFCAIRTERMINALBOX",1634111441:"IFCAIRTERMINAL",486154966:"IFCWINDOWSTANDARDCASE",4237592921:"IFCWASTETERMINAL",4156078855:"IFCWALLELEMENTEDCASE",4207607924:"IFCVALVE",4292641817:"IFCUNITARYEQUIPMENT",3179687236:"IFCUNITARYCONTROLELEMENTTYPE",3026737570:"IFCTUBEBUNDLE",3825984169:"IFCTRANSFORMER",812556717:"IFCTANK",1162798199:"IFCSWITCHINGDEVICE",385403989:"IFCSTRUCTURALLOADCASE",1404847402:"IFCSTACKTERMINAL",1999602285:"IFCSPACEHEATER",3420628829:"IFCSOLARDEVICE",3027962421:"IFCSLABSTANDARDCASE",3127900445:"IFCSLABELEMENTEDCASE",1329646415:"IFCSHADINGDEVICE",3053780830:"IFCSANITARYTERMINAL",2572171363:"IFCREINFORCINGBARTYPE",1232101972:"IFCRATIONALBSPLINECURVEWITHKNOTS",90941305:"IFCPUMP",655969474:"IFCPROTECTIVEDEVICETRIPPINGUNITTYPE",738039164:"IFCPROTECTIVEDEVICE",1156407060:"IFCPLATESTANDARDCASE",3612865200:"IFCPIPESEGMENT",310824031:"IFCPIPEFITTING",3694346114:"IFCOUTLET",144952367:"IFCOUTERBOUNDARYCURVE",2474470126:"IFCMOTORCONNECTION",1911478936:"IFCMEMBERSTANDARDCASE",1437502449:"IFCMEDICALDEVICE",629592764:"IFCLIGHTFIXTURE",76236018:"IFCLAMP",2176052936:"IFCJUNCTIONBOX",4175244083:"IFCINTERCEPTOR",2068733104:"IFCHUMIDIFIER",3319311131:"IFCHEATEXCHANGER",2188021234:"IFCFLOWMETER",1209101575:"IFCEXTERNALSPATIALELEMENT",484807127:"IFCEVAPORATOR",3747195512:"IFCEVAPORATIVECOOLER",2814081492:"IFCENGINE",2417008758:"IFCELECTRICDISTRIBUTIONBOARDTYPE",3242481149:"IFCDOORSTANDARDCASE",3205830791:"IFCDISTRIBUTIONSYSTEM",400855858:"IFCCOMMUNICATIONSAPPLIANCETYPE",905975707:"IFCCOLUMNSTANDARDCASE",1677625105:"IFCCIVILELEMENT",3296154744:"IFCCHIMNEY",2674252688:"IFCCABLEFITTINGTYPE",2188180465:"IFCBURNERTYPE",1177604601:"IFCBUILDINGSYSTEM",39481116:"IFCBUILDINGELEMENTPARTTYPE",1136057603:"IFCBOUNDARYCURVE",2461110595:"IFCBSPLINECURVEWITHKNOTS",1532957894:"IFCAUDIOVISUALAPPLIANCETYPE",4088093105:"IFCWORKCALENDAR",4009809668:"IFCWINDOWTYPE",926996030:"IFCVOIDINGFEATURE",2391383451:"IFCVIBRATIONISOLATOR",2415094496:"IFCTENDONTYPE",3081323446:"IFCTENDONANCHORTYPE",413509423:"IFCSYSTEMFURNITUREELEMENT",3101698114:"IFCSURFACEFEATURE",3657597509:"IFCSTRUCTURALSURFACEACTION",2757150158:"IFCSTRUCTURALCURVEREACTION",1004757350:"IFCSTRUCTURALCURVEACTION",338393293:"IFCSTAIRTYPE",1072016465:"IFCSOLARDEVICETYPE",4074543187:"IFCSHADINGDEVICETYPE",2157484638:"IFCSEAMCURVE",2781568857:"IFCROOFTYPE",2310774935:"IFCREINFORCINGMESHTYPE",964333572:"IFCREINFORCINGELEMENTTYPE",683857671:"IFCRATIONALBSPLINESURFACEWITHKNOTS",1469900589:"IFCRAMPTYPE",2839578677:"IFCPOLYGONALFACESET",1158309216:"IFCPILETYPE",3079942009:"IFCOPENINGSTANDARDCASE",1114901282:"IFCMEDICALDEVICETYPE",3113134337:"IFCINTERSECTIONCURVE",3946677679:"IFCINTERCEPTORTYPE",2571569899:"IFCINDEXEDPOLYCURVE",3493046030:"IFCGEOGRAPHICELEMENT",1509553395:"IFCFURNITURE",1893162501:"IFCFOOTINGTYPE",2853485674:"IFCEXTERNALSPATIALSTRUCTUREELEMENT",4148101412:"IFCEVENT",132023988:"IFCENGINETYPE",2397081782:"IFCELEMENTASSEMBLYTYPE",2323601079:"IFCDOORTYPE",1213902940:"IFCCYLINDRICALSURFACE",1525564444:"IFCCONSTRUCTIONPRODUCTRESOURCETYPE",4105962743:"IFCCONSTRUCTIONMATERIALRESOURCETYPE",2185764099:"IFCCONSTRUCTIONEQUIPMENTRESOURCETYPE",15328376:"IFCCOMPOSITECURVEONSURFACE",3875453745:"IFCCOMPLEXPROPERTYTEMPLATE",3893394355:"IFCCIVILELEMENTTYPE",2197970202:"IFCCHIMNEYTYPE",167062518:"IFCBSPLINESURFACEWITHKNOTS",2887950389:"IFCBSPLINESURFACE",2603310189:"IFCADVANCEDBREPWITHVOIDS",1635779807:"IFCADVANCEDBREP",2916149573:"IFCTRIANGULATEDFACESET",1935646853:"IFCTOROIDALSURFACE",2387106220:"IFCTESSELLATEDFACESET",3206491090:"IFCTASKTYPE",699246055:"IFCSURFACECURVE",4095615324:"IFCSUBCONTRACTRESOURCETYPE",603775116:"IFCSTRUCTURALSURFACEREACTION",4015995234:"IFCSPHERICALSURFACE",2481509218:"IFCSPATIALZONETYPE",463610769:"IFCSPATIALZONE",710998568:"IFCSPATIALELEMENTTYPE",1412071761:"IFCSPATIALELEMENT",3663146110:"IFCSIMPLEPROPERTYTEMPLATE",3243963512:"IFCREVOLVEDAREASOLIDTAPERED",816062949:"IFCREPARAMETRISEDCOMPOSITECURVESEGMENT",1521410863:"IFCRELSPACEBOUNDARY2NDLEVEL",3523091289:"IFCRELSPACEBOUNDARY1STLEVEL",427948657:"IFCRELINTERFERESELEMENTS",307848117:"IFCRELDEFINESBYTEMPLATE",1462361463:"IFCRELDEFINESBYOBJECT",2565941209:"IFCRELDECLARES",1027710054:"IFCRELASSIGNSTOGROUPBYFACTOR",3521284610:"IFCPROPERTYTEMPLATE",492091185:"IFCPROPERTYSETTEMPLATE",653396225:"IFCPROJECTLIBRARY",569719735:"IFCPROCEDURETYPE",3967405729:"IFCPREDEFINEDPROPERTYSET",1682466193:"IFCPCURVE",428585644:"IFCLABORRESOURCETYPE",2294589976:"IFCINDEXEDPOLYGONALFACEWITHVOIDS",178912537:"IFCINDEXEDPOLYGONALFACE",4095422895:"IFCGEOGRAPHICELEMENTTYPE",2652556860:"IFCFIXEDREFERENCESWEPTAREASOLID",2804161546:"IFCEXTRUDEDAREASOLIDTAPERED",4024345920:"IFCEVENTTYPE",2629017746:"IFCCURVEBOUNDEDSURFACE",1815067380:"IFCCREWRESOURCETYPE",3419103109:"IFCCONTEXT",2574617495:"IFCCONSTRUCTIONRESOURCETYPE",2059837836:"IFCCARTESIANPOINTLIST3D",1675464909:"IFCCARTESIANPOINTLIST2D",574549367:"IFCCARTESIANPOINTLIST",3406155212:"IFCADVANCEDFACE",3698973494:"IFCTYPERESOURCE",3736923433:"IFCTYPEPROCESS",901063453:"IFCTESSELLATEDITEM",1096409881:"IFCSWEPTDISKSOLIDPOLYGONAL",1042787934:"IFCRESOURCETIME",1608871552:"IFCRESOURCECONSTRAINTRELATIONSHIP",2943643501:"IFCRESOURCEAPPROVALRELATIONSHIP",2090586900:"IFCQUANTITYSET",1482703590:"IFCPROPERTYTEMPLATEDEFINITION",3778827333:"IFCPREDEFINEDPROPERTIES",2998442950:"IFCMIRROREDPROFILEDEF",853536259:"IFCMATERIALRELATIONSHIP",3404854881:"IFCMATERIALPROFILESETUSAGETAPERING",3079605661:"IFCMATERIALPROFILESETUSAGE",2852063980:"IFCMATERIALCONSTITUENTSET",3708119e3:"IFCMATERIALCONSTITUENT",1585845231:"IFCLAGTIME",2133299955:"IFCINDEXEDTRIANGLETEXTUREMAP",1437953363:"IFCINDEXEDTEXTUREMAP",3570813810:"IFCINDEXEDCOLOURMAP",1437805879:"IFCEXTERNALREFERENCERELATIONSHIP",297599258:"IFCEXTENDEDPROPERTIES",211053100:"IFCEVENTTIME",2713554722:"IFCCONVERSIONBASEDUNITWITHOFFSET",3285139300:"IFCCOLOURRGBLIST",1236880293:"IFCWORKTIME",1199560280:"IFCTIMEPERIOD",3611470254:"IFCTEXTUREVERTEXLIST",2771591690:"IFCTASKTIMERECURRING",1549132990:"IFCTASKTIME",2043862942:"IFCTABLECOLUMN",2934153892:"IFCSURFACEREINFORCEMENTAREA",609421318:"IFCSTRUCTURALLOADORRESULT",3478079324:"IFCSTRUCTURALLOADCONFIGURATION",1054537805:"IFCSCHEDULINGTIME",2439245199:"IFCRESOURCELEVELRELATIONSHIP",2433181523:"IFCREFERENCE",3915482550:"IFCRECURRENCEPATTERN",986844984:"IFCPROPERTYABSTRACTION",3843373140:"IFCPROJECTEDCRS",677532197:"IFCPRESENTATIONITEM",1507914824:"IFCMATERIALUSAGEDEFINITION",552965576:"IFCMATERIALPROFILEWITHOFFSETS",164193824:"IFCMATERIALPROFILESET",2235152071:"IFCMATERIALPROFILE",1847252529:"IFCMATERIALLAYERWITHOFFSETS",760658860:"IFCMATERIALDEFINITION",3057273783:"IFCMAPCONVERSION",4294318154:"IFCEXTERNALINFORMATION",1466758467:"IFCCOORDINATEREFERENCESYSTEM",1785450214:"IFCCOORDINATEOPERATION",775493141:"IFCCONNECTIONVOLUMEGEOMETRY",979691226:"IFCREINFORCINGBAR",3700593921:"IFCELECTRICDISTRIBUTIONPOINT",1062813311:"IFCDISTRIBUTIONCONTROLELEMENT",1052013943:"IFCDISTRIBUTIONCHAMBERELEMENT",578613899:"IFCCONTROLLERTYPE",2454782716:"IFCCHAMFEREDGEFEATURE",753842376:"IFCBEAM",3001207471:"IFCALARMTYPE",2874132201:"IFCACTUATORTYPE",3304561284:"IFCWINDOW",3512223829:"IFCWALLSTANDARDCASE",2391406946:"IFCWALL",3313531582:"IFCVIBRATIONISOLATORTYPE",2347447852:"IFCTENDONANCHOR",3824725483:"IFCTENDON",2515109513:"IFCSTRUCTURALANALYSISMODEL",4252922144:"IFCSTAIRFLIGHT",331165859:"IFCSTAIR",1529196076:"IFCSLAB",1783015770:"IFCSENSORTYPE",1376911519:"IFCROUNDEDEDGEFEATURE",2016517767:"IFCROOF",2320036040:"IFCREINFORCINGMESH",3027567501:"IFCREINFORCINGELEMENT",3055160366:"IFCRATIONALBEZIERCURVE",3283111854:"IFCRAMPFLIGHT",3024970846:"IFCRAMP",2262370178:"IFCRAILING",3171933400:"IFCPLATE",1687234759:"IFCPILE",1073191201:"IFCMEMBER",900683007:"IFCFOOTING",3508470533:"IFCFLOWTREATMENTDEVICE",2223149337:"IFCFLOWTERMINAL",707683696:"IFCFLOWSTORAGEDEVICE",987401354:"IFCFLOWSEGMENT",3132237377:"IFCFLOWMOVINGDEVICE",4037862832:"IFCFLOWINSTRUMENTTYPE",4278956645:"IFCFLOWFITTING",2058353004:"IFCFLOWCONTROLLER",4222183408:"IFCFIRESUPPRESSIONTERMINALTYPE",1810631287:"IFCFILTERTYPE",346874300:"IFCFANTYPE",1658829314:"IFCENERGYCONVERSIONDEVICE",857184966:"IFCELECTRICALELEMENT",1634875225:"IFCELECTRICALCIRCUIT",712377611:"IFCELECTRICTIMECONTROLTYPE",1217240411:"IFCELECTRICMOTORTYPE",1365060375:"IFCELECTRICHEATERTYPE",1534661035:"IFCELECTRICGENERATORTYPE",3277789161:"IFCELECTRICFLOWSTORAGEDEVICETYPE",663422040:"IFCELECTRICAPPLIANCETYPE",855621170:"IFCEDGEFEATURE",2030761528:"IFCDUCTSILENCERTYPE",3760055223:"IFCDUCTSEGMENTTYPE",869906466:"IFCDUCTFITTINGTYPE",395920057:"IFCDOOR",3041715199:"IFCDISTRIBUTIONPORT",3040386961:"IFCDISTRIBUTIONFLOWELEMENT",1945004755:"IFCDISTRIBUTIONELEMENT",2063403501:"IFCDISTRIBUTIONCONTROLELEMENTTYPE",1599208980:"IFCDISTRIBUTIONCHAMBERELEMENTTYPE",2635815018:"IFCDISCRETEACCESSORYTYPE",1335981549:"IFCDISCRETEACCESSORY",4147604152:"IFCDIAMETERDIMENSION",3961806047:"IFCDAMPERTYPE",3495092785:"IFCCURTAINWALL",1973544240:"IFCCOVERING",2954562838:"IFCCOOLINGTOWERTYPE",335055490:"IFCCOOLEDBEAMTYPE",488727124:"IFCCONSTRUCTIONPRODUCTRESOURCE",1060000209:"IFCCONSTRUCTIONMATERIALRESOURCE",3898045240:"IFCCONSTRUCTIONEQUIPMENTRESOURCE",1163958913:"IFCCONDITIONCRITERION",2188551683:"IFCCONDITION",2816379211:"IFCCONDENSERTYPE",3850581409:"IFCCOMPRESSORTYPE",843113511:"IFCCOLUMN",2301859152:"IFCCOILTYPE",2611217952:"IFCCIRCLE",2951183804:"IFCCHILLERTYPE",1285652485:"IFCCABLESEGMENTTYPE",3293546465:"IFCCABLECARRIERSEGMENTTYPE",395041908:"IFCCABLECARRIERFITTINGTYPE",1909888760:"IFCBUILDINGELEMENTPROXYTYPE",1095909175:"IFCBUILDINGELEMENTPROXY",2979338954:"IFCBUILDINGELEMENTPART",52481810:"IFCBUILDINGELEMENTCOMPONENT",3299480353:"IFCBUILDINGELEMENT",231477066:"IFCBOILERTYPE",1916977116:"IFCBEZIERCURVE",819618141:"IFCBEAMTYPE",1967976161:"IFCBSPLINECURVE",3460190687:"IFCASSET",2470393545:"IFCANGULARDIMENSION",1871374353:"IFCAIRTOAIRHEATRECOVERYTYPE",3352864051:"IFCAIRTERMINALTYPE",1411407467:"IFCAIRTERMINALBOXTYPE",3821786052:"IFCACTIONREQUEST",1213861670:"IFC2DCOMPOSITECURVE",1033361043:"IFCZONE",3342526732:"IFCWORKSCHEDULE",4218914973:"IFCWORKPLAN",1028945134:"IFCWORKCONTROL",1133259667:"IFCWASTETERMINALTYPE",1898987631:"IFCWALLTYPE",2769231204:"IFCVIRTUALELEMENT",728799441:"IFCVALVETYPE",1911125066:"IFCUNITARYEQUIPMENTTYPE",1600972822:"IFCTUBEBUNDLETYPE",3593883385:"IFCTRIMMEDCURVE",1620046519:"IFCTRANSPORTELEMENT",1692211062:"IFCTRANSFORMERTYPE",1637806684:"IFCTIMESERIESSCHEDULE",5716631:"IFCTANKTYPE",2254336722:"IFCSYSTEM",2315554128:"IFCSWITCHINGDEVICETYPE",148013059:"IFCSUBCONTRACTRESOURCE",1975003073:"IFCSTRUCTURALSURFACECONNECTION",2986769608:"IFCSTRUCTURALRESULTGROUP",1235345126:"IFCSTRUCTURALPOINTREACTION",734778138:"IFCSTRUCTURALPOINTCONNECTION",2082059205:"IFCSTRUCTURALPOINTACTION",3987759626:"IFCSTRUCTURALPLANARACTIONVARYING",1621171031:"IFCSTRUCTURALPLANARACTION",1252848954:"IFCSTRUCTURALLOADGROUP",1721250024:"IFCSTRUCTURALLINEARACTIONVARYING",1807405624:"IFCSTRUCTURALLINEARACTION",2445595289:"IFCSTRUCTURALCURVEMEMBERVARYING",214636428:"IFCSTRUCTURALCURVEMEMBER",4243806635:"IFCSTRUCTURALCURVECONNECTION",1179482911:"IFCSTRUCTURALCONNECTION",682877961:"IFCSTRUCTURALACTION",1039846685:"IFCSTAIRFLIGHTTYPE",3112655638:"IFCSTACKTERMINALTYPE",3812236995:"IFCSPACETYPE",652456506:"IFCSPACEPROGRAM",1305183839:"IFCSPACEHEATERTYPE",3856911033:"IFCSPACE",2533589738:"IFCSLABTYPE",4097777520:"IFCSITE",4105383287:"IFCSERVICELIFE",3517283431:"IFCSCHEDULETIMECONTROL",1768891740:"IFCSANITARYTERMINALTYPE",2863920197:"IFCRELASSIGNSTASKS",160246688:"IFCRELAGGREGATES",2324767716:"IFCRAMPFLIGHTTYPE",2893384427:"IFCRAILINGTYPE",3248260540:"IFCRADIUSDIMENSION",2250791053:"IFCPUMPTYPE",1842657554:"IFCPROTECTIVEDEVICETYPE",3651124850:"IFCPROJECTIONELEMENT",3642467123:"IFCPROJECTORDERRECORD",2904328755:"IFCPROJECTORDER",2744685151:"IFCPROCEDURE",3740093272:"IFCPORT",3724593414:"IFCPOLYLINE",4017108033:"IFCPLATETYPE",4231323485:"IFCPIPESEGMENTTYPE",804291784:"IFCPIPEFITTINGTYPE",3327091369:"IFCPERMIT",2382730787:"IFCPERFORMANCEHISTORY",2837617999:"IFCOUTLETTYPE",3425660407:"IFCORDERACTION",3588315303:"IFCOPENINGELEMENT",4143007308:"IFCOCCUPANT",1916936684:"IFCMOVE",977012517:"IFCMOTORCONNECTIONTYPE",3181161470:"IFCMEMBERTYPE",2108223431:"IFCMECHANICALFASTENERTYPE",377706215:"IFCMECHANICALFASTENER",2506943328:"IFCLINEARDIMENSION",1161773419:"IFCLIGHTFIXTURETYPE",1051575348:"IFCLAMPTYPE",3827777499:"IFCLABORRESOURCE",4288270099:"IFCJUNCTIONBOXTYPE",2391368822:"IFCINVENTORY",1806887404:"IFCHUMIDIFIERTYPE",1251058090:"IFCHEATEXCHANGERTYPE",2706460486:"IFCGROUP",3009204131:"IFCGRID",200128114:"IFCGASTERMINALTYPE",814719939:"IFCFURNITURESTANDARD",263784265:"IFCFURNISHINGELEMENT",3009222698:"IFCFLOWTREATMENTDEVICETYPE",2297155007:"IFCFLOWTERMINALTYPE",1339347760:"IFCFLOWSTORAGEDEVICETYPE",1834744321:"IFCFLOWSEGMENTTYPE",1482959167:"IFCFLOWMOVINGDEVICETYPE",3815607619:"IFCFLOWMETERTYPE",3198132628:"IFCFLOWFITTINGTYPE",3907093117:"IFCFLOWCONTROLLERTYPE",1287392070:"IFCFEATUREELEMENTSUBTRACTION",2143335405:"IFCFEATUREELEMENTADDITION",2827207264:"IFCFEATUREELEMENT",2489546625:"IFCFASTENERTYPE",647756555:"IFCFASTENER",3737207727:"IFCFACETEDBREPWITHVOIDS",807026263:"IFCFACETEDBREP",3390157468:"IFCEVAPORATORTYPE",3174744832:"IFCEVAPORATIVECOOLERTYPE",3272907226:"IFCEQUIPMENTSTANDARD",1962604670:"IFCEQUIPMENTELEMENT",2107101300:"IFCENERGYCONVERSIONDEVICETYPE",1704287377:"IFCELLIPSE",2590856083:"IFCELEMENTCOMPONENTTYPE",1623761950:"IFCELEMENTCOMPONENT",4123344466:"IFCELEMENTASSEMBLY",1758889154:"IFCELEMENT",360485395:"IFCELECTRICALBASEPROPERTIES",3849074793:"IFCDISTRIBUTIONFLOWELEMENTTYPE",3256556792:"IFCDISTRIBUTIONELEMENTTYPE",681481545:"IFCDIMENSIONCURVEDIRECTEDCALLOUT",1457835157:"IFCCURTAINWALLTYPE",3295246426:"IFCCREWRESOURCE",1916426348:"IFCCOVERINGTYPE",1419761937:"IFCCOSTSCHEDULE",3895139033:"IFCCOSTITEM",3293443760:"IFCCONTROL",2559216714:"IFCCONSTRUCTIONRESOURCE",2510884976:"IFCCONIC",3732776249:"IFCCOMPOSITECURVE",300633059:"IFCCOLUMNTYPE",2937912522:"IFCCIRCLEHOLLOWPROFILEDEF",3124254112:"IFCBUILDINGSTOREY",1950629157:"IFCBUILDINGELEMENTTYPE",4031249490:"IFCBUILDING",1260505505:"IFCBOUNDEDCURVE",3649129432:"IFCBOOLEANCLIPPINGRESULT",1334484129:"IFCBLOCK",3207858831:"IFCASYMMETRICISHAPEPROFILEDEF",1674181508:"IFCANNOTATION",2296667514:"IFCACTOR",2097647324:"IFCTRANSPORTELEMENTTYPE",3473067441:"IFCTASK",1580310250:"IFCSYSTEMFURNITUREELEMENTTYPE",4124788165:"IFCSURFACEOFREVOLUTION",2809605785:"IFCSURFACEOFLINEAREXTRUSION",2028607225:"IFCSURFACECURVESWEPTAREASOLID",4070609034:"IFCSTRUCTUREDDIMENSIONCALLOUT",2218152070:"IFCSTRUCTURALSURFACEMEMBERVARYING",3979015343:"IFCSTRUCTURALSURFACEMEMBER",3689010777:"IFCSTRUCTURALREACTION",530289379:"IFCSTRUCTURALMEMBER",3136571912:"IFCSTRUCTURALITEM",3544373492:"IFCSTRUCTURALACTIVITY",451544542:"IFCSPHERE",3893378262:"IFCSPATIALSTRUCTUREELEMENTTYPE",2706606064:"IFCSPATIALSTRUCTUREELEMENT",3626867408:"IFCRIGHTCIRCULARCYLINDER",4158566097:"IFCRIGHTCIRCULARCONE",1856042241:"IFCREVOLVEDAREASOLID",2914609552:"IFCRESOURCE",1401173127:"IFCRELVOIDSELEMENT",3451746338:"IFCRELSPACEBOUNDARY",366585022:"IFCRELSERVICESBUILDINGS",4122056220:"IFCRELSEQUENCE",1058617721:"IFCRELSCHEDULESCOSTITEMS",1245217292:"IFCRELREFERENCEDINSPATIALSTRUCTURE",750771296:"IFCRELPROJECTSELEMENT",202636808:"IFCRELOVERRIDESPROPERTIES",2051452291:"IFCRELOCCUPIESSPACES",3268803585:"IFCRELNESTS",4189434867:"IFCRELINTERACTIONREQUIREMENTS",279856033:"IFCRELFLOWCONTROLELEMENTS",3940055652:"IFCRELFILLSELEMENT",781010003:"IFCRELDEFINESBYTYPE",4186316022:"IFCRELDEFINESBYPROPERTIES",693640335:"IFCRELDEFINES",2551354335:"IFCRELDECOMPOSES",2802773753:"IFCRELCOVERSSPACES",886880790:"IFCRELCOVERSBLDGELEMENTS",3242617779:"IFCRELCONTAINEDINSPATIALSTRUCTURE",3678494232:"IFCRELCONNECTSWITHREALIZINGELEMENTS",504942748:"IFCRELCONNECTSWITHECCENTRICITY",1638771189:"IFCRELCONNECTSSTRUCTURALMEMBER",3912681535:"IFCRELCONNECTSSTRUCTURALELEMENT",2127690289:"IFCRELCONNECTSSTRUCTURALACTIVITY",3190031847:"IFCRELCONNECTSPORTS",4201705270:"IFCRELCONNECTSPORTTOELEMENT",3945020480:"IFCRELCONNECTSPATHELEMENTS",1204542856:"IFCRELCONNECTSELEMENTS",826625072:"IFCRELCONNECTS",2851387026:"IFCRELASSOCIATESPROFILEPROPERTIES",2655215786:"IFCRELASSOCIATESMATERIAL",3840914261:"IFCRELASSOCIATESLIBRARY",982818633:"IFCRELASSOCIATESDOCUMENT",2728634034:"IFCRELASSOCIATESCONSTRAINT",919958153:"IFCRELASSOCIATESCLASSIFICATION",4095574036:"IFCRELASSOCIATESAPPROVAL",1327628568:"IFCRELASSOCIATESAPPLIEDVALUE",1865459582:"IFCRELASSOCIATES",205026976:"IFCRELASSIGNSTORESOURCE",3372526763:"IFCRELASSIGNSTOPROJECTORDER",2857406711:"IFCRELASSIGNSTOPRODUCT",4278684876:"IFCRELASSIGNSTOPROCESS",1307041759:"IFCRELASSIGNSTOGROUP",2495723537:"IFCRELASSIGNSTOCONTROL",1683148259:"IFCRELASSIGNSTOACTOR",3939117080:"IFCRELASSIGNS",3454111270:"IFCRECTANGULARTRIMMEDSURFACE",2798486643:"IFCRECTANGULARPYRAMID",2770003689:"IFCRECTANGLEHOLLOWPROFILEDEF",3219374653:"IFCPROXY",1451395588:"IFCPROPERTYSET",4194566429:"IFCPROJECTIONCURVE",103090709:"IFCPROJECT",4208778838:"IFCPRODUCT",2945172077:"IFCPROCESS",220341763:"IFCPLANE",603570806:"IFCPLANARBOX",3566463478:"IFCPERMEABLECOVERINGPROPERTIES",3505215534:"IFCOFFSETCURVE3D",3388369263:"IFCOFFSETCURVE2D",3888040117:"IFCOBJECT",1425443689:"IFCMANIFOLDSOLIDBREP",1281925730:"IFCLINE",572779678:"IFCLSHAPEPROFILEDEF",1484403080:"IFCISHAPEPROFILEDEF",987898635:"IFCGEOMETRICCURVESET",1268542332:"IFCFURNITURETYPE",4238390223:"IFCFURNISHINGELEMENTTYPE",3455213021:"IFCFLUIDFLOWPROPERTIES",315944413:"IFCFILLAREASTYLETILES",4203026998:"IFCFILLAREASTYLETILESYMBOLWITHSTYLE",374418227:"IFCFILLAREASTYLEHATCHING",2047409740:"IFCFACEBASEDSURFACEMODEL",477187591:"IFCEXTRUDEDAREASOLID",80994333:"IFCENERGYPROPERTIES",2835456948:"IFCELLIPSEPROFILEDEF",2777663545:"IFCELEMENTARYSURFACE",339256511:"IFCELEMENTTYPE",1883228015:"IFCELEMENTQUANTITY",1472233963:"IFCEDGELOOP",4006246654:"IFCDRAUGHTINGPREDEFINEDCURVEFONT",445594917:"IFCDRAUGHTINGPREDEFINEDCOLOUR",3073041342:"IFCDRAUGHTINGCALLOUT",526551008:"IFCDOORSTYLE",1714330368:"IFCDOORPANELPROPERTIES",2963535650:"IFCDOORLININGPROPERTIES",32440307:"IFCDIRECTION",4054601972:"IFCDIMENSIONCURVETERMINATOR",606661476:"IFCDIMENSIONCURVE",693772133:"IFCDEFINEDSYMBOL",2827736869:"IFCCURVEBOUNDEDPLANE",2601014836:"IFCCURVE",2147822146:"IFCCSGSOLID",2506170314:"IFCCSGPRIMITIVE3D",194851669:"IFCCRANERAILFSHAPEPROFILEDEF",4133800736:"IFCCRANERAILASHAPEPROFILEDEF",2485617015:"IFCCOMPOSITECURVESEGMENT",2205249479:"IFCCLOSEDSHELL",1383045692:"IFCCIRCLEPROFILEDEF",1416205885:"IFCCARTESIANTRANSFORMATIONOPERATOR3DNONUNIFORM",3331915920:"IFCCARTESIANTRANSFORMATIONOPERATOR3D",3486308946:"IFCCARTESIANTRANSFORMATIONOPERATOR2DNONUNIFORM",3749851601:"IFCCARTESIANTRANSFORMATIONOPERATOR2D",59481748:"IFCCARTESIANTRANSFORMATIONOPERATOR",1123145078:"IFCCARTESIANPOINT",2898889636:"IFCCSHAPEPROFILEDEF",2713105998:"IFCBOXEDHALFSPACE",2581212453:"IFCBOUNDINGBOX",4182860854:"IFCBOUNDEDSURFACE",2736907675:"IFCBOOLEANRESULT",2740243338:"IFCAXIS2PLACEMENT3D",3125803723:"IFCAXIS2PLACEMENT2D",4261334040:"IFCAXIS1PLACEMENT",1302238472:"IFCANNOTATIONSURFACE",2265737646:"IFCANNOTATIONFILLAREAOCCURRENCE",669184980:"IFCANNOTATIONFILLAREA",3288037868:"IFCANNOTATIONCURVEOCCURRENCE",2543172580:"IFCZSHAPEPROFILEDEF",1299126871:"IFCWINDOWSTYLE",512836454:"IFCWINDOWPANELPROPERTIES",336235671:"IFCWINDOWLININGPROPERTIES",2759199220:"IFCVERTEXLOOP",1417489154:"IFCVECTOR",427810014:"IFCUSHAPEPROFILEDEF",2347495698:"IFCTYPEPRODUCT",1628702193:"IFCTYPEOBJECT",1345879162:"IFCTWODIRECTIONREPEATFACTOR",2715220739:"IFCTRAPEZIUMPROFILEDEF",3124975700:"IFCTEXTLITERALWITHEXTENT",4282788508:"IFCTEXTLITERAL",3028897424:"IFCTERMINATORSYMBOL",3071757647:"IFCTSHAPEPROFILEDEF",230924584:"IFCSWEPTSURFACE",1260650574:"IFCSWEPTDISKSOLID",2247615214:"IFCSWEPTAREASOLID",1878645084:"IFCSURFACESTYLERENDERING",2513912981:"IFCSURFACE",2233826070:"IFCSUBEDGE",3653947884:"IFCSTRUCTURALSTEELPROFILEPROPERTIES",3843319758:"IFCSTRUCTURALPROFILEPROPERTIES",1190533807:"IFCSTRUCTURALLOADSINGLEFORCEWARPING",1597423693:"IFCSTRUCTURALLOADSINGLEFORCE",1973038258:"IFCSTRUCTURALLOADSINGLEDISPLACEMENTDISTORTION",2473145415:"IFCSTRUCTURALLOADSINGLEDISPLACEMENT",2668620305:"IFCSTRUCTURALLOADPLANARFORCE",1595516126:"IFCSTRUCTURALLOADLINEARFORCE",390701378:"IFCSPACETHERMALLOADPROPERTIES",1202362311:"IFCSOUNDVALUE",2485662743:"IFCSOUNDPROPERTIES",723233188:"IFCSOLIDMODEL",2609359061:"IFCSLIPPAGECONNECTIONCONDITION",4124623270:"IFCSHELLBASEDSURFACEMODEL",2411513650:"IFCSERVICELIFEFACTOR",1509187699:"IFCSECTIONEDSPINE",2778083089:"IFCROUNDEDRECTANGLEPROFILEDEF",478536968:"IFCRELATIONSHIP",3765753017:"IFCREINFORCEMENTDEFINITIONPROPERTIES",3413951693:"IFCREGULARTIMESERIES",3615266464:"IFCRECTANGLEPROFILEDEF",110355661:"IFCPROPERTYTABLEVALUE",3650150729:"IFCPROPERTYSINGLEVALUE",3357820518:"IFCPROPERTYSETDEFINITION",941946838:"IFCPROPERTYREFERENCEVALUE",2752243245:"IFCPROPERTYLISTVALUE",4166981789:"IFCPROPERTYENUMERATEDVALUE",1680319473:"IFCPROPERTYDEFINITION",871118103:"IFCPROPERTYBOUNDEDVALUE",673634403:"IFCPRODUCTDEFINITIONSHAPE",179317114:"IFCPREDEFINEDPOINTMARKERSYMBOL",433424934:"IFCPREDEFINEDDIMENSIONSYMBOL",2559016684:"IFCPREDEFINEDCURVEFONT",759155922:"IFCPREDEFINEDCOLOUR",2775532180:"IFCPOLYGONALBOUNDEDHALFSPACE",2924175390:"IFCPOLYLOOP",1423911732:"IFCPOINTONSURFACE",4022376103:"IFCPOINTONCURVE",2067069095:"IFCPOINT",1663979128:"IFCPLANAREXTENT",2004835150:"IFCPLACEMENT",597895409:"IFCPIXELTEXTURE",3021840470:"IFCPHYSICALCOMPLEXQUANTITY",2519244187:"IFCPATH",2529465313:"IFCPARAMETERIZEDPROFILEDEF",1029017970:"IFCORIENTEDEDGE",2665983363:"IFCOPENSHELL",2833995503:"IFCONEDIRECTIONREPEATFACTOR",219451334:"IFCOBJECTDEFINITION",1430189142:"IFCMECHANICALCONCRETEMATERIALPROPERTIES",2022407955:"IFCMATERIALDEFINITIONREPRESENTATION",2347385850:"IFCMAPPEDITEM",1008929658:"IFCLOOP",2624227202:"IFCLOCALPLACEMENT",3422422726:"IFCLIGHTSOURCESPOT",1520743889:"IFCLIGHTSOURCEPOSITIONAL",4266656042:"IFCLIGHTSOURCEGONIOMETRIC",2604431987:"IFCLIGHTSOURCEDIRECTIONAL",125510826:"IFCLIGHTSOURCEAMBIENT",1402838566:"IFCLIGHTSOURCE",3741457305:"IFCIRREGULARTIMESERIES",3905492369:"IFCIMAGETEXTURE",2445078500:"IFCHYGROSCOPICMATERIALPROPERTIES",812098782:"IFCHALFSPACESOLID",178086475:"IFCGRIDPLACEMENT",3590301190:"IFCGEOMETRICSET",4142052618:"IFCGEOMETRICREPRESENTATIONSUBCONTEXT",2453401579:"IFCGEOMETRICREPRESENTATIONITEM",3448662350:"IFCGEOMETRICREPRESENTATIONCONTEXT",1446786286:"IFCGENERALPROFILEPROPERTIES",803998398:"IFCGENERALMATERIALPROPERTIES",3857492461:"IFCFUELPROPERTIES",738692330:"IFCFILLAREASTYLE",4219587988:"IFCFAILURECONNECTIONCONDITION",3008276851:"IFCFACESURFACE",803316827:"IFCFACEOUTERBOUND",1809719519:"IFCFACEBOUND",2556980723:"IFCFACE",1860660968:"IFCEXTENDEDMATERIALPROPERTIES",476780140:"IFCEDGECURVE",3900360178:"IFCEDGE",4170525392:"IFCDRAUGHTINGPREDEFINEDTEXTFONT",3732053477:"IFCDOCUMENTREFERENCE",1694125774:"IFCDIMENSIONPAIR",2273265877:"IFCDIMENSIONCALLOUTRELATIONSHIP",3632507154:"IFCDERIVEDPROFILEDEF",3800577675:"IFCCURVESTYLE",2889183280:"IFCCONVERSIONBASEDUNIT",3050246964:"IFCCONTEXTDEPENDENTUNIT",45288368:"IFCCONNECTIONPOINTECCENTRICITY",1981873012:"IFCCONNECTIONCURVEGEOMETRY",370225590:"IFCCONNECTEDFACESET",1485152156:"IFCCOMPOSITEPROFILEDEF",2542286263:"IFCCOMPLEXPROPERTY",776857604:"IFCCOLOURRGB",647927063:"IFCCLASSIFICATIONREFERENCE",3150382593:"IFCCENTERLINEPROFILEDEF",616511568:"IFCBLOBTEXTURE",2705031697:"IFCARBITRARYPROFILEDEFWITHVOIDS",1310608509:"IFCARBITRARYOPENPROFILEDEF",3798115385:"IFCARBITRARYCLOSEDPROFILEDEF",2297822566:"IFCANNOTATIONTEXTOCCURRENCE",3612888222:"IFCANNOTATIONSYMBOLOCCURRENCE",962685235:"IFCANNOTATIONSURFACEOCCURRENCE",2442683028:"IFCANNOTATIONOCCURRENCE",1065908215:"IFCWATERPROPERTIES",891718957:"IFCVIRTUALGRIDINTERSECTION",1907098498:"IFCVERTEXPOINT",3304826586:"IFCVERTEXBASEDTEXTUREMAP",2799835756:"IFCVERTEX",180925521:"IFCUNITASSIGNMENT",1735638870:"IFCTOPOLOGYREPRESENTATION",1377556343:"IFCTOPOLOGICALREPRESENTATIONITEM",581633288:"IFCTIMESERIESVALUE",1718945513:"IFCTIMESERIESREFERENCERELATIONSHIP",3101149627:"IFCTIMESERIES",3317419933:"IFCTHERMALMATERIALPROPERTIES",1210645708:"IFCTEXTUREVERTEX",2552916305:"IFCTEXTUREMAP",1742049831:"IFCTEXTURECOORDINATEGENERATOR",280115917:"IFCTEXTURECOORDINATE",1484833681:"IFCTEXTSTYLEWITHBOXCHARACTERISTICS",1640371178:"IFCTEXTSTYLETEXTMODEL",2636378356:"IFCTEXTSTYLEFORDEFINEDFONT",1983826977:"IFCTEXTSTYLEFONTMODEL",1447204868:"IFCTEXTSTYLE",912023232:"IFCTELECOMADDRESS",531007025:"IFCTABLEROW",985171141:"IFCTABLE",1290481447:"IFCSYMBOLSTYLE",626085974:"IFCSURFACETEXTURE",1351298697:"IFCSURFACESTYLEWITHTEXTURES",846575682:"IFCSURFACESTYLESHADING",1607154358:"IFCSURFACESTYLEREFRACTION",3303107099:"IFCSURFACESTYLELIGHTING",1300840506:"IFCSURFACESTYLE",3049322572:"IFCSTYLEDREPRESENTATION",3958052878:"IFCSTYLEDITEM",2830218821:"IFCSTYLEMODEL",3408363356:"IFCSTRUCTURALLOADTEMPERATURE",2525727697:"IFCSTRUCTURALLOADSTATIC",2162789131:"IFCSTRUCTURALLOAD",2273995522:"IFCSTRUCTURALCONNECTIONCONDITION",3692461612:"IFCSIMPLEPROPERTY",4240577450:"IFCSHAPEREPRESENTATION",3982875396:"IFCSHAPEMODEL",867548509:"IFCSHAPEASPECT",4165799628:"IFCSECTIONREINFORCEMENTPROPERTIES",2042790032:"IFCSECTIONPROPERTIES",448429030:"IFCSIUNIT",2341007311:"IFCROOT",3679540991:"IFCRIBPLATEPROFILEPROPERTIES",1660063152:"IFCREPRESENTATIONMAP",3008791417:"IFCREPRESENTATIONITEM",3377609919:"IFCREPRESENTATIONCONTEXT",1076942058:"IFCREPRESENTATION",1222501353:"IFCRELAXATION",1580146022:"IFCREINFORCEMENTBARPROPERTIES",2692823254:"IFCREFERENCESVALUEDOCUMENT",825690147:"IFCQUANTITYWEIGHT",2405470396:"IFCQUANTITYVOLUME",3252649465:"IFCQUANTITYTIME",931644368:"IFCQUANTITYLENGTH",2093928680:"IFCQUANTITYCOUNT",2044713172:"IFCQUANTITYAREA",3710013099:"IFCPROPERTYENUMERATION",148025276:"IFCPROPERTYDEPENDENCYRELATIONSHIP",3896028662:"IFCPROPERTYCONSTRAINTRELATIONSHIP",2598011224:"IFCPROPERTY",2802850158:"IFCPROFILEPROPERTIES",3958567839:"IFCPROFILEDEF",2267347899:"IFCPRODUCTSOFCOMBUSTIONPROPERTIES",2095639259:"IFCPRODUCTREPRESENTATION",2417041796:"IFCPRESENTATIONSTYLEASSIGNMENT",3119450353:"IFCPRESENTATIONSTYLE",1304840413:"IFCPRESENTATIONLAYERWITHSTYLE",2022622350:"IFCPRESENTATIONLAYERASSIGNMENT",1775413392:"IFCPREDEFINEDTEXTFONT",3213052703:"IFCPREDEFINEDTERMINATORSYMBOL",990879717:"IFCPREDEFINEDSYMBOL",3727388367:"IFCPREDEFINEDITEM",3355820592:"IFCPOSTALADDRESS",2226359599:"IFCPHYSICALSIMPLEQUANTITY",2483315170:"IFCPHYSICALQUANTITY",101040310:"IFCPERSONANDORGANIZATION",2077209135:"IFCPERSON",1207048766:"IFCOWNERHISTORY",1411181986:"IFCORGANIZATIONRELATIONSHIP",4251960020:"IFCORGANIZATION",1227763645:"IFCOPTICALMATERIALPROPERTIES",2251480897:"IFCOBJECTIVE",3701648758:"IFCOBJECTPLACEMENT",1918398963:"IFCNAMEDUNIT",2706619895:"IFCMONETARYUNIT",3368373690:"IFCMETRIC",677618848:"IFCMECHANICALSTEELMATERIALPROPERTIES",4256014907:"IFCMECHANICALMATERIALPROPERTIES",2597039031:"IFCMEASUREWITHUNIT",3265635763:"IFCMATERIALPROPERTIES",2199411900:"IFCMATERIALLIST",1303795690:"IFCMATERIALLAYERSETUSAGE",3303938423:"IFCMATERIALLAYERSET",248100487:"IFCMATERIALLAYER",1847130766:"IFCMATERIALCLASSIFICATIONRELATIONSHIP",1838606355:"IFCMATERIAL",30780891:"IFCLOCALTIME",1566485204:"IFCLIGHTINTENSITYDISTRIBUTION",4162380809:"IFCLIGHTDISTRIBUTIONDATA",3452421091:"IFCLIBRARYREFERENCE",2655187982:"IFCLIBRARYINFORMATION",3020489413:"IFCIRREGULARTIMESERIESVALUE",852622518:"IFCGRIDAXIS",3548104201:"IFCEXTERNALLYDEFINEDTEXTFONT",3207319532:"IFCEXTERNALLYDEFINEDSYMBOL",1040185647:"IFCEXTERNALLYDEFINEDSURFACESTYLE",2242383968:"IFCEXTERNALLYDEFINEDHATCHSTYLE",3200245327:"IFCEXTERNALREFERENCE",1648886627:"IFCENVIRONMENTALIMPACTVALUE",3796139169:"IFCDRAUGHTINGCALLOUTRELATIONSHIP",770865208:"IFCDOCUMENTINFORMATIONRELATIONSHIP",1154170062:"IFCDOCUMENTINFORMATION",1376555844:"IFCDOCUMENTELECTRONICFORMAT",2949456006:"IFCDIMENSIONALEXPONENTS",1045800335:"IFCDERIVEDUNITELEMENT",1765591967:"IFCDERIVEDUNIT",1072939445:"IFCDATEANDTIME",3510044353:"IFCCURVESTYLEFONTPATTERN",2367409068:"IFCCURVESTYLEFONTANDSCALING",1105321065:"IFCCURVESTYLEFONT",539742890:"IFCCURRENCYRELATIONSHIP",602808272:"IFCCOSTVALUE",1065062679:"IFCCOORDINATEDUNIVERSALTIMEOFFSET",347226245:"IFCCONSTRAINTRELATIONSHIP",613356794:"IFCCONSTRAINTCLASSIFICATIONRELATIONSHIP",1658513725:"IFCCONSTRAINTAGGREGATIONRELATIONSHIP",1959218052:"IFCCONSTRAINT",2732653382:"IFCCONNECTIONSURFACEGEOMETRY",4257277454:"IFCCONNECTIONPORTGEOMETRY",2614616156:"IFCCONNECTIONPOINTGEOMETRY",2859738748:"IFCCONNECTIONGEOMETRY",3264961684:"IFCCOLOURSPECIFICATION",3639012971:"IFCCLASSIFICATIONNOTATIONFACET",938368621:"IFCCLASSIFICATIONNOTATION",1098599126:"IFCCLASSIFICATIONITEMRELATIONSHIP",1767535486:"IFCCLASSIFICATIONITEM",747523909:"IFCCLASSIFICATION",622194075:"IFCCALENDARDATE",2069777674:"IFCBOUNDARYNODECONDITIONWARPING",1387855156:"IFCBOUNDARYNODECONDITION",3367102660:"IFCBOUNDARYFACECONDITION",1560379544:"IFCBOUNDARYEDGECONDITION",4037036970:"IFCBOUNDARYCONDITION",3869604511:"IFCAPPROVALRELATIONSHIP",390851274:"IFCAPPROVALPROPERTYRELATIONSHIP",2080292479:"IFCAPPROVALACTORRELATIONSHIP",130549933:"IFCAPPROVAL",1110488051:"IFCAPPLIEDVALUERELATIONSHIP",411424972:"IFCAPPLIEDVALUE",639542469:"IFCAPPLICATION",618182010:"IFCADDRESS",3630933823:"IFCACTORROLE",599546466:"FILE_DESCRIPTION",1390159747:"FILE_NAME",1109904537:"FILE_SCHEMA"};class be{static async getUnits(i){var r,o,a;const{IFCUNITASSIGNMENT:t}=k,e=await i.getAllPropertiesOfType(t);if(!e)return 1;const s=Object.keys(e),n=e[parseInt(s[0],10)];for(const l of n.Units){if(l.value===void 0||l.value===null)continue;const h=await i.getProperties(l.value);if(!h||!h.UnitType||!h.UnitType.value||h.UnitType.value!=="LENGTHUNIT")continue;let I=1,u=1;return h.Name.value==="METRE"&&(u=1),h.Name.value==="FOOT"&&(u=.3048),((r=h.Prefix)==null?void 0:r.value)==="MILLI"?I=.001:((o=h.Prefix)==null?void 0:o.value)==="CENTI"?I=.01:((a=h.Prefix)==null?void 0:a.value)==="DECI"&&(I=.1),u*I}return 1}static async findItemByGuid(i,t){var s;const e=i.getAllPropertiesIDs();for(const n of e){const r=await i.getProperties(n);if(r&&((s=r.GlobalId)==null?void 0:s.value)===t)return r}return null}static async getRelationMap(i,t,e){var a;const n=e??(async()=>{}),r={},o=i.getAllPropertiesIDs();for(const l of o){const h=await i.getProperties(l);if(!h)continue;const f=h.type===t,I=Object.keys(h).find(p=>p.startsWith("Relating")),u=Object.keys(h).find(p=>p.startsWith("Related"));if(!(f&&I&&u))continue;const d=await i.getProperties((a=h[I])==null?void 0:a.value),E=h[u];if(!d||!E||!(E&&Array.isArray(E)))continue;const T=E.map(p=>p.value);await n(d.expressID,T),r[d.expressID]=T}return r}static async getQsetQuantities(i,t,e){const n=e??(()=>{}),r=await i.getProperties(t);return!r||r.type!==k.IFCELEMENTQUANTITY?null:(r.Quantities??[{}]).map(l=>(l.value&&n(l.value),l.value)).filter(l=>l!==null)}static async getPsetProps(i,t,e){const n=e??(()=>{}),r=await i.getProperties(t);return!r||r.type!==k.IFCPROPERTYSET?null:(r.HasProperties??[{}]).map(l=>(l.value&&n(l.value),l.value)).filter(l=>l!==null)}static async getPsetRel(i,t){var o;if(!await i.getProperties(t))return null;const s=await i.getAllPropertiesOfType(k.IFCRELDEFINESBYPROPERTIES);if(!s)return null;const n=Object.values(s);let r=null;for(const a of n)((o=a.RelatingPropertyDefinition)==null?void 0:o.value)===t&&(r=a.expressID);return r}static async getQsetRel(i,t){return be.getPsetRel(i,t)}static async getEntityName(i,t){var r;const e=await i.getProperties(t);if(!e)return{key:null,name:null};const s=Object.keys(e).find(o=>o.endsWith("Name"))??null,n=s?(r=e[s])==null?void 0:r.value:null;return{key:s,name:n}}static async getQuantityValue(i,t){const e=await i.getProperties(t);if(!e)return{key:null,value:null};const s=Object.keys(e).find(r=>r.endsWith("Value"))??null;let n;return s===null||e[s]===void 0||e[s]===null?n=null:n=e[s].value,{key:s,value:n}}static isRel(i){return _i[i].startsWith("IFCREL")}static async attributeExists(i,t,e){const s=await i.getProperties(t);return s?Object.keys(s).includes(e):!1}static async groupEntitiesByType(i,t){var s;const e=new Map;for(const n of t){const r=await i.getProperties(n);if(!r)continue;const o=r.type;e.get(o)||e.set(o,new Set),(s=e.get(o))==null||s.add(n)}return e}}const ao={IFCURIREFERENCE:"IfcUriReference",IFCTIME:"IfcTime",IFCTEMPERATURERATEOFCHANGEMEASURE:"IfcTemperatureRateOfChangeMeasure",IFCSOUNDPRESSURELEVELMEASURE:"IfcSoundPressureLevelMeasure",IFCSOUNDPOWERLEVELMEASURE:"IfcSoundPowerLevelMeasure",IFCPROPERTYSETDEFINITIONSET:"IfcPropertySetDefinitionSet",IFCPOSITIVEINTEGER:"IfcPositiveInteger",IFCNONNEGATIVELENGTHMEASURE:"IfcNonNegativeLengthMeasure",IFCLINEINDEX:"IfcLineIndex",IFCLANGUAGEID:"IfcLanguageId",IFCDURATION:"IfcDuration",IFCDAYINWEEKNUMBER:"IfcDayInWeekNumber",IFCDATETIME:"IfcDateTime",IFCDATE:"IfcDate",IFCCARDINALPOINTREFERENCE:"IfcCardinalPointReference",IFCBINARY:"IfcBinary",IFCAREADENSITYMEASURE:"IfcAreaDensityMeasure",IFCARCINDEX:"IfcArcIndex",IFCYEARNUMBER:"IfcYearNumber",IFCWARPINGMOMENTMEASURE:"IfcWarpingMomentMeasure",IFCWARPINGCONSTANTMEASURE:"IfcWarpingConstantMeasure",IFCVOLUMETRICFLOWRATEMEASURE:"IfcVolumetricFlowRateMeasure",IFCVOLUMEMEASURE:"IfcVolumeMeasure",IFCVAPORPERMEABILITYMEASURE:"IfcVaporPermeabilityMeasure",IFCTORQUEMEASURE:"IfcTorqueMeasure",IFCTIMESTAMP:"IfcTimestamp",IFCTIMEMEASURE:"IfcTimeMeasure",IFCTHERMODYNAMICTEMPERATUREMEASURE:"IfcThermodynamicTemperatureMeasure",IFCTHERMALTRANSMITTANCEMEASURE:"IfcThermalTransmittanceMeasure",IFCTHERMALRESISTANCEMEASURE:"IfcThermalResistanceMeasure",IFCTHERMALEXPANSIONCOEFFICIENTMEASURE:"IfcThermalExpansionCoefficientMeasure",IFCTHERMALCONDUCTIVITYMEASURE:"IfcThermalConductivityMeasure",IFCTHERMALADMITTANCEMEASURE:"IfcThermalAdmittanceMeasure",IFCTEXTTRANSFORMATION:"IfcTextTransformation",IFCTEXTFONTNAME:"IfcTextFontName",IFCTEXTDECORATION:"IfcTextDecoration",IFCTEXTALIGNMENT:"IfcTextAlignment",IFCTEXT:"IfcText",IFCTEMPERATUREGRADIENTMEASURE:"IfcTemperatureGradientMeasure",IFCSPECULARROUGHNESS:"IfcSpecularRoughness",IFCSPECULAREXPONENT:"IfcSpecularExponent",IFCSPECIFICHEATCAPACITYMEASURE:"IfcSpecificHeatCapacityMeasure",IFCSOUNDPRESSUREMEASURE:"IfcSoundPressureMeasure",IFCSOUNDPOWERMEASURE:"IfcSoundPowerMeasure",IFCSOLIDANGLEMEASURE:"IfcSolidAngleMeasure",IFCSHEARMODULUSMEASURE:"IfcShearModulusMeasure",IFCSECTIONALAREAINTEGRALMEASURE:"IfcSectionalAreaIntegralMeasure",IFCSECTIONMODULUSMEASURE:"IfcSectionModulusMeasure",IFCSECONDINMINUTE:"IfcSecondInMinute",IFCROTATIONALSTIFFNESSMEASURE:"IfcRotationalStiffnessMeasure",IFCROTATIONALMASSMEASURE:"IfcRotationalMassMeasure",IFCROTATIONALFREQUENCYMEASURE:"IfcRotationalFrequencyMeasure",IFCREAL:"IfcReal",IFCRATIOMEASURE:"IfcRatioMeasure",IFCRADIOACTIVITYMEASURE:"IfcRadioactivityMeasure",IFCPRESSUREMEASURE:"IfcPressureMeasure",IFCPRESENTABLETEXT:"IfcPresentableText",IFCPOWERMEASURE:"IfcPowerMeasure",IFCPOSITIVERATIOMEASURE:"IfcPositiveRatioMeasure",IFCPOSITIVEPLANEANGLEMEASURE:"IfcPositivePlaneAngleMeasure",IFCPOSITIVELENGTHMEASURE:"IfcPositiveLengthMeasure",IFCPLANEANGLEMEASURE:"IfcPlaneAngleMeasure",IFCPLANARFORCEMEASURE:"IfcPlanarForceMeasure",IFCPARAMETERVALUE:"IfcParameterValue",IFCPHMEASURE:"IfcPhMeasure",IFCNUMERICMEASURE:"IfcNumericMeasure",IFCNORMALISEDRATIOMEASURE:"IfcNormalisedRatioMeasure",IFCMONTHINYEARNUMBER:"IfcMonthInYearNumber",IFCMONETARYMEASURE:"IfcMonetaryMeasure",IFCMOMENTOFINERTIAMEASURE:"IfcMomentOfInertiaMeasure",IFCMOLECULARWEIGHTMEASURE:"IfcMolecularWeightMeasure",IFCMOISTUREDIFFUSIVITYMEASURE:"IfcMoistureDiffusivityMeasure",IFCMODULUSOFSUBGRADEREACTIONMEASURE:"IfcModulusOfSubgradeReactionMeasure",IFCMODULUSOFROTATIONALSUBGRADEREACTIONMEASURE:"IfcModulusOfRotationalSubgradeReactionMeasure",IFCMODULUSOFLINEARSUBGRADEREACTIONMEASURE:"IfcModulusOfLinearSubgradeReactionMeasure",IFCMODULUSOFELASTICITYMEASURE:"IfcModulusOfElasticityMeasure",IFCMINUTEINHOUR:"IfcMinuteInHour",IFCMASSPERLENGTHMEASURE:"IfcMassPerLengthMeasure",IFCMASSMEASURE:"IfcMassMeasure",IFCMASSFLOWRATEMEASURE:"IfcMassFlowRateMeasure",IFCMASSDENSITYMEASURE:"IfcMassDensityMeasure",IFCMAGNETICFLUXMEASURE:"IfcMagneticFluxMeasure",IFCMAGNETICFLUXDENSITYMEASURE:"IfcMagneticFluxDensityMeasure",IFCLUMINOUSINTENSITYMEASURE:"IfcLuminousIntensityMeasure",IFCLUMINOUSINTENSITYDISTRIBUTIONMEASURE:"IfcLuminousIntensityDistributionMeasure",IFCLUMINOUSFLUXMEASURE:"IfcLuminousFluxMeasure",IFCLOGICAL:"IfcLogical",IFCLINEARVELOCITYMEASURE:"IfcLinearVelocityMeasure",IFCLINEARSTIFFNESSMEASURE:"IfcLinearStiffnessMeasure",IFCLINEARMOMENTMEASURE:"IfcLinearMomentMeasure",IFCLINEARFORCEMEASURE:"IfcLinearForceMeasure",IFCLENGTHMEASURE:"IfcLengthMeasure",IFCLABEL:"IfcLabel",IFCKINEMATICVISCOSITYMEASURE:"IfcKinematicViscosityMeasure",IFCISOTHERMALMOISTURECAPACITYMEASURE:"IfcIsothermalMoistureCapacityMeasure",IFCIONCONCENTRATIONMEASURE:"IfcIonConcentrationMeasure",IFCINTEGERCOUNTRATEMEASURE:"IfcIntegerCountRateMeasure",IFCINTEGER:"IfcInteger",IFCINDUCTANCEMEASURE:"IfcInductanceMeasure",IFCILLUMINANCEMEASURE:"IfcIlluminanceMeasure",IFCIDENTIFIER:"IfcIdentifier",IFCHOURINDAY:"IfcHourInDay",IFCHEATINGVALUEMEASURE:"IfcHeatingValueMeasure",IFCHEATFLUXDENSITYMEASURE:"IfcHeatFluxDensityMeasure",IFCGLOBALLYUNIQUEID:"IfcGloballyUniqueId",IFCFREQUENCYMEASURE:"IfcFrequencyMeasure",IFCFORCEMEASURE:"IfcForceMeasure",IFCFONTWEIGHT:"IfcFontWeight",IFCFONTVARIANT:"IfcFontVariant",IFCFONTSTYLE:"IfcFontStyle",IFCENERGYMEASURE:"IfcEnergyMeasure",IFCELECTRICVOLTAGEMEASURE:"IfcElectricVoltageMeasure",IFCELECTRICRESISTANCEMEASURE:"IfcElectricResistanceMeasure",IFCELECTRICCURRENTMEASURE:"IfcElectricCurrentMeasure",IFCELECTRICCONDUCTANCEMEASURE:"IfcElectricConductanceMeasure",IFCELECTRICCHARGEMEASURE:"IfcElectricChargeMeasure",IFCELECTRICCAPACITANCEMEASURE:"IfcElectricCapacitanceMeasure",IFCDYNAMICVISCOSITYMEASURE:"IfcDynamicViscosityMeasure",IFCDOSEEQUIVALENTMEASURE:"IfcDoseEquivalentMeasure",IFCDIMENSIONCOUNT:"IfcDimensionCount",IFCDESCRIPTIVEMEASURE:"IfcDescriptiveMeasure",IFCDAYLIGHTSAVINGHOUR:"IfcDaylightSavingHour",IFCDAYINMONTHNUMBER:"IfcDayInMonthNumber",IFCCURVATUREMEASURE:"IfcCurvatureMeasure",IFCCOUNTMEASURE:"IfcCountMeasure",IFCCONTEXTDEPENDENTMEASURE:"IfcContextDependentMeasure",IFCCOMPOUNDPLANEANGLEMEASURE:"IfcCompoundPlaneAngleMeasure",IFCCOMPLEXNUMBER:"IfcComplexNumber",IFCBOXALIGNMENT:"IfcBoxAlignment",IFCBOOLEAN:"IfcBoolean",IFCAREAMEASURE:"IfcAreaMeasure",IFCANGULARVELOCITYMEASURE:"IfcAngularVelocityMeasure",IFCAMOUNTOFSUBSTANCEMEASURE:"IfcAmountOfSubstanceMeasure",IFCACCELERATIONMEASURE:"IfcAccelerationMeasure",IFCABSORBEDDOSEMEASURE:"IfcAbsorbedDoseMeasure",IFCGEOSLICE:"IfcGeoSlice",IFCGEOMODEL:"IfcGeoModel",IFCELECTRICFLOWTREATMENTDEVICE:"IfcElectricFlowTreatmentDevice",IFCDISTRIBUTIONBOARD:"IfcDistributionBoard",IFCCONVEYORSEGMENT:"IfcConveyorSegment",IFCCAISSONFOUNDATION:"IfcCaissonFoundation",IFCBOREHOLE:"IfcBorehole",IFCBEARING:"IfcBearing",IFCALIGNMENT:"IfcAlignment",IFCTRACKELEMENT:"IfcTrackElement",IFCSIGNAL:"IfcSignal",IFCREINFORCEDSOIL:"IfcReinforcedSoil",IFCRAIL:"IfcRail",IFCPAVEMENT:"IfcPavement",IFCNAVIGATIONELEMENT:"IfcNavigationElement",IFCMOORINGDEVICE:"IfcMooringDevice",IFCMOBILETELECOMMUNICATIONSAPPLIANCE:"IfcMobileTelecommunicationsAppliance",IFCLIQUIDTERMINAL:"IfcLiquidTerminal",IFCLINEARPOSITIONINGELEMENT:"IfcLinearPositioningElement",IFCKERB:"IfcKerb",IFCGEOTECHNICALASSEMBLY:"IfcGeotechnicalAssembly",IFCELECTRICFLOWTREATMENTDEVICETYPE:"IfcElectricFlowTreatmentDeviceType",IFCEARTHWORKSFILL:"IfcEarthworksFill",IFCEARTHWORKSELEMENT:"IfcEarthworksElement",IFCEARTHWORKSCUT:"IfcEarthworksCut",IFCDISTRIBUTIONBOARDTYPE:"IfcDistributionBoardType",IFCDEEPFOUNDATION:"IfcDeepFoundation",IFCCOURSE:"IfcCourse",IFCCONVEYORSEGMENTTYPE:"IfcConveyorSegmentType",IFCCAISSONFOUNDATIONTYPE:"IfcCaissonFoundationType",IFCBUILTSYSTEM:"IfcBuiltSystem",IFCBUILTELEMENT:"IfcBuiltElement",IFCBRIDGEPART:"IfcBridgePart",IFCBRIDGE:"IfcBridge",IFCBEARINGTYPE:"IfcBearingType",IFCALIGNMENTVERTICAL:"IfcAlignmentVertical",IFCALIGNMENTSEGMENT:"IfcAlignmentSegment",IFCALIGNMENTHORIZONTAL:"IfcAlignmentHorizontal",IFCALIGNMENTCANT:"IfcAlignmentCant",IFCVIBRATIONDAMPERTYPE:"IfcVibrationDamperType",IFCVIBRATIONDAMPER:"IfcVibrationDamper",IFCVEHICLE:"IfcVehicle",IFCTRANSPORTATIONDEVICE:"IfcTransportationDevice",IFCTRACKELEMENTTYPE:"IfcTrackElementType",IFCTENDONCONDUITTYPE:"IfcTendonConduitType",IFCTENDONCONDUIT:"IfcTendonConduit",IFCSINESPIRAL:"IfcSineSpiral",IFCSIGNALTYPE:"IfcSignalType",IFCSIGNTYPE:"IfcSignType",IFCSIGN:"IfcSign",IFCSEVENTHORDERPOLYNOMIALSPIRAL:"IfcSeventhOrderPolynomialSpiral",IFCSEGMENTEDREFERENCECURVE:"IfcSegmentedReferenceCurve",IFCSECONDORDERPOLYNOMIALSPIRAL:"IfcSecondOrderPolynomialSpiral",IFCROADPART:"IfcRoadPart",IFCROAD:"IfcRoad",IFCRELADHERESTOELEMENT:"IfcRelAdheresToElement",IFCREFERENT:"IfcReferent",IFCRAILWAYPART:"IfcRailwayPart",IFCRAILWAY:"IfcRailway",IFCRAILTYPE:"IfcRailType",IFCPOSITIONINGELEMENT:"IfcPositioningElement",IFCPAVEMENTTYPE:"IfcPavementType",IFCNAVIGATIONELEMENTTYPE:"IfcNavigationElementType",IFCMOORINGDEVICETYPE:"IfcMooringDeviceType",IFCMOBILETELECOMMUNICATIONSAPPLIANCETYPE:"IfcMobileTelecommunicationsApplianceType",IFCMARINEPART:"IfcMarinePart",IFCMARINEFACILITY:"IfcMarineFacility",IFCLIQUIDTERMINALTYPE:"IfcLiquidTerminalType",IFCLINEARELEMENT:"IfcLinearElement",IFCKERBTYPE:"IfcKerbType",IFCIMPACTPROTECTIONDEVICETYPE:"IfcImpactProtectionDeviceType",IFCIMPACTPROTECTIONDEVICE:"IfcImpactProtectionDevice",IFCGRADIENTCURVE:"IfcGradientCurve",IFCGEOTECHNICALSTRATUM:"IfcGeotechnicalStratum",IFCGEOTECHNICALELEMENT:"IfcGeotechnicalElement",IFCFACILITYPARTCOMMON:"IfcFacilityPartCommon",IFCFACILITYPART:"IfcFacilityPart",IFCFACILITY:"IfcFacility",IFCDIRECTRIXDERIVEDREFERENCESWEPTAREASOLID:"IfcDirectrixDerivedReferenceSweptAreaSolid",IFCDEEPFOUNDATIONTYPE:"IfcDeepFoundationType",IFCCOURSETYPE:"IfcCourseType",IFCCOSINESPIRAL:"IfcCosineSpiral",IFCCLOTHOID:"IfcClothoid",IFCBUILTELEMENTTYPE:"IfcBuiltElementType",IFCVEHICLETYPE:"IfcVehicleType",IFCTRIANGULATEDIRREGULARNETWORK:"IfcTriangulatedIrregularNetwork",IFCTRANSPORTATIONDEVICETYPE:"IfcTransportationDeviceType",IFCTHIRDORDERPOLYNOMIALSPIRAL:"IfcThirdOrderPolynomialSpiral",IFCSPIRAL:"IfcSpiral",IFCSECTIONEDSURFACE:"IfcSectionedSurface",IFCSECTIONEDSOLIDHORIZONTAL:"IfcSectionedSolidHorizontal",IFCSECTIONEDSOLID:"IfcSectionedSolid",IFCRELPOSITIONS:"IfcRelPositions",IFCRELASSOCIATESPROFILEDEF:"IfcRelAssociatesProfileDef",IFCPOLYNOMIALCURVE:"IfcPolynomialCurve",IFCOFFSETCURVEBYDISTANCES:"IfcOffsetCurveByDistances",IFCOFFSETCURVE:"IfcOffsetCurve",IFCINDEXEDPOLYGONALTEXTUREMAP:"IfcIndexedPolygonalTextureMap",IFCDIRECTRIXCURVESWEPTAREASOLID:"IfcDirectrixCurveSweptAreaSolid",IFCCURVESEGMENT:"IfcCurveSegment",IFCAXIS2PLACEMENTLINEAR:"IfcAxis2PlacementLinear",IFCSEGMENT:"IfcSegment",IFCPOINTBYDISTANCEEXPRESSION:"IfcPointByDistanceExpression",IFCOPENCROSSPROFILEDEF:"IfcOpenCrossProfileDef",IFCLINEARPLACEMENT:"IfcLinearPlacement",IFCALIGNMENTHORIZONTALSEGMENT:"IfcAlignmentHorizontalSegment",IFCALIGNMENTCANTSEGMENT:"IfcAlignmentCantSegment",IFCTEXTURECOORDINATEINDICESWITHVOIDS:"IfcTextureCoordinateIndicesWithVoids",IFCTEXTURECOORDINATEINDICES:"IfcTextureCoordinateIndices",IFCQUANTITYNUMBER:"IfcQuantityNumber",IFCALIGNMENTVERTICALSEGMENT:"IfcAlignmentVerticalSegment",IFCALIGNMENTPARAMETERSEGMENT:"IfcAlignmentParameterSegment",IFCCONTROLLER:"IfcController",IFCALARM:"IfcAlarm",IFCACTUATOR:"IfcActuator",IFCUNITARYCONTROLELEMENT:"IfcUnitaryControlElement",IFCSENSOR:"IfcSensor",IFCPROTECTIVEDEVICETRIPPINGUNIT:"IfcProtectiveDeviceTrippingUnit",IFCFLOWINSTRUMENT:"IfcFlowInstrument",IFCFIRESUPPRESSIONTERMINAL:"IfcFireSuppressionTerminal",IFCFILTER:"IfcFilter",IFCFAN:"IfcFan",IFCELECTRICTIMECONTROL:"IfcElectricTimeControl",IFCELECTRICMOTOR:"IfcElectricMotor",IFCELECTRICGENERATOR:"IfcElectricGenerator",IFCELECTRICFLOWSTORAGEDEVICE:"IfcElectricFlowStorageDevice",IFCELECTRICDISTRIBUTIONBOARD:"IfcElectricDistributionBoard",IFCELECTRICAPPLIANCE:"IfcElectricAppliance",IFCDUCTSILENCER:"IfcDuctSilencer",IFCDUCTSEGMENT:"IfcDuctSegment",IFCDUCTFITTING:"IfcDuctFitting",IFCDISTRIBUTIONCIRCUIT:"IfcDistributionCircuit",IFCDAMPER:"IfcDamper",IFCCOOLINGTOWER:"IfcCoolingTower",IFCCOOLEDBEAM:"IfcCooledBeam",IFCCONDENSER:"IfcCondenser",IFCCOMPRESSOR:"IfcCompressor",IFCCOMMUNICATIONSAPPLIANCE:"IfcCommunicationsAppliance",IFCCOIL:"IfcCoil",IFCCHILLER:"IfcChiller",IFCCABLESEGMENT:"IfcCableSegment",IFCCABLEFITTING:"IfcCableFitting",IFCCABLECARRIERSEGMENT:"IfcCableCarrierSegment",IFCCABLECARRIERFITTING:"IfcCableCarrierFitting",IFCBURNER:"IfcBurner",IFCBOILER:"IfcBoiler",IFCBEAMSTANDARDCASE:"IfcBeamStandardCase",IFCAUDIOVISUALAPPLIANCE:"IfcAudioVisualAppliance",IFCAIRTOAIRHEATRECOVERY:"IfcAirToAirHeatRecovery",IFCAIRTERMINALBOX:"IfcAirTerminalBox",IFCAIRTERMINAL:"IfcAirTerminal",IFCWINDOWSTANDARDCASE:"IfcWindowStandardCase",IFCWASTETERMINAL:"IfcWasteTerminal",IFCWALLELEMENTEDCASE:"IfcWallElementedCase",IFCVALVE:"IfcValve",IFCUNITARYEQUIPMENT:"IfcUnitaryEquipment",IFCUNITARYCONTROLELEMENTTYPE:"IfcUnitaryControlElementType",IFCTUBEBUNDLE:"IfcTubeBundle",IFCTRANSFORMER:"IfcTransformer",IFCTANK:"IfcTank",IFCSWITCHINGDEVICE:"IfcSwitchingDevice",IFCSTRUCTURALLOADCASE:"IfcStructuralLoadCase",IFCSTACKTERMINAL:"IfcStackTerminal",IFCSPACEHEATER:"IfcSpaceHeater",IFCSOLARDEVICE:"IfcSolarDevice",IFCSLABSTANDARDCASE:"IfcSlabStandardCase",IFCSLABELEMENTEDCASE:"IfcSlabElementedCase",IFCSHADINGDEVICE:"IfcShadingDevice",IFCSANITARYTERMINAL:"IfcSanitaryTerminal",IFCREINFORCINGBARTYPE:"IfcReinforcingBarType",IFCRATIONALBSPLINECURVEWITHKNOTS:"IfcRationalBSplineCurveWithKnots",IFCPUMP:"IfcPump",IFCPROTECTIVEDEVICETRIPPINGUNITTYPE:"IfcProtectiveDeviceTrippingUnitType",IFCPROTECTIVEDEVICE:"IfcProtectiveDevice",IFCPLATESTANDARDCASE:"IfcPlateStandardCase",IFCPIPESEGMENT:"IfcPipeSegment",IFCPIPEFITTING:"IfcPipeFitting",IFCOUTLET:"IfcOutlet",IFCOUTERBOUNDARYCURVE:"IfcOuterBoundaryCurve",IFCMOTORCONNECTION:"IfcMotorConnection",IFCMEMBERSTANDARDCASE:"IfcMemberStandardCase",IFCMEDICALDEVICE:"IfcMedicalDevice",IFCLIGHTFIXTURE:"IfcLightFixture",IFCLAMP:"IfcLamp",IFCJUNCTIONBOX:"IfcJunctionBox",IFCINTERCEPTOR:"IfcInterceptor",IFCHUMIDIFIER:"IfcHumidifier",IFCHEATEXCHANGER:"IfcHeatExchanger",IFCFLOWMETER:"IfcFlowMeter",IFCEXTERNALSPATIALELEMENT:"IfcExternalSpatialElement",IFCEVAPORATOR:"IfcEvaporator",IFCEVAPORATIVECOOLER:"IfcEvaporativeCooler",IFCENGINE:"IfcEngine",IFCELECTRICDISTRIBUTIONBOARDTYPE:"IfcElectricDistributionBoardType",IFCDOORSTANDARDCASE:"IfcDoorStandardCase",IFCDISTRIBUTIONSYSTEM:"IfcDistributionSystem",IFCCOMMUNICATIONSAPPLIANCETYPE:"IfcCommunicationsApplianceType",IFCCOLUMNSTANDARDCASE:"IfcColumnStandardCase",IFCCIVILELEMENT:"IfcCivilElement",IFCCHIMNEY:"IfcChimney",IFCCABLEFITTINGTYPE:"IfcCableFittingType",IFCBURNERTYPE:"IfcBurnerType",IFCBUILDINGSYSTEM:"IfcBuildingSystem",IFCBUILDINGELEMENTPARTTYPE:"IfcBuildingElementPartType",IFCBOUNDARYCURVE:"IfcBoundaryCurve",IFCBSPLINECURVEWITHKNOTS:"IfcBSplineCurveWithKnots",IFCAUDIOVISUALAPPLIANCETYPE:"IfcAudioVisualApplianceType",IFCWORKCALENDAR:"IfcWorkCalendar",IFCWINDOWTYPE:"IfcWindowType",IFCVOIDINGFEATURE:"IfcVoidingFeature",IFCVIBRATIONISOLATOR:"IfcVibrationIsolator",IFCTENDONTYPE:"IfcTendonType",IFCTENDONANCHORTYPE:"IfcTendonAnchorType",IFCSYSTEMFURNITUREELEMENT:"IfcSystemFurnitureElement",IFCSURFACEFEATURE:"IfcSurfaceFeature",IFCSTRUCTURALSURFACEACTION:"IfcStructuralSurfaceAction",IFCSTRUCTURALCURVEREACTION:"IfcStructuralCurveReaction",IFCSTRUCTURALCURVEACTION:"IfcStructuralCurveAction",IFCSTAIRTYPE:"IfcStairType",IFCSOLARDEVICETYPE:"IfcSolarDeviceType",IFCSHADINGDEVICETYPE:"IfcShadingDeviceType",IFCSEAMCURVE:"IfcSeamCurve",IFCROOFTYPE:"IfcRoofType",IFCREINFORCINGMESHTYPE:"IfcReinforcingMeshType",IFCREINFORCINGELEMENTTYPE:"IfcReinforcingElementType",IFCRATIONALBSPLINESURFACEWITHKNOTS:"IfcRationalBSplineSurfaceWithKnots",IFCRAMPTYPE:"IfcRampType",IFCPOLYGONALFACESET:"IfcPolygonalFaceSet",IFCPILETYPE:"IfcPileType",IFCOPENINGSTANDARDCASE:"IfcOpeningStandardCase",IFCMEDICALDEVICETYPE:"IfcMedicalDeviceType",IFCINTERSECTIONCURVE:"IfcIntersectionCurve",IFCINTERCEPTORTYPE:"IfcInterceptorType",IFCINDEXEDPOLYCURVE:"IfcIndexedPolyCurve",IFCGEOGRAPHICELEMENT:"IfcGeographicElement",IFCFURNITURE:"IfcFurniture",IFCFOOTINGTYPE:"IfcFootingType",IFCEXTERNALSPATIALSTRUCTUREELEMENT:"IfcExternalSpatialStructureElement",IFCEVENT:"IfcEvent",IFCENGINETYPE:"IfcEngineType",IFCELEMENTASSEMBLYTYPE:"IfcElementAssemblyType",IFCDOORTYPE:"IfcDoorType",IFCCYLINDRICALSURFACE:"IfcCylindricalSurface",IFCCONSTRUCTIONPRODUCTRESOURCETYPE:"IfcConstructionProductResourceType",IFCCONSTRUCTIONMATERIALRESOURCETYPE:"IfcConstructionMaterialResourceType",IFCCONSTRUCTIONEQUIPMENTRESOURCETYPE:"IfcConstructionEquipmentResourceType",IFCCOMPOSITECURVEONSURFACE:"IfcCompositeCurveOnSurface",IFCCOMPLEXPROPERTYTEMPLATE:"IfcComplexPropertyTemplate",IFCCIVILELEMENTTYPE:"IfcCivilElementType",IFCCHIMNEYTYPE:"IfcChimneyType",IFCBSPLINESURFACEWITHKNOTS:"IfcBSplineSurfaceWithKnots",IFCBSPLINESURFACE:"IfcBSplineSurface",IFCADVANCEDBREPWITHVOIDS:"IfcAdvancedBrepWithVoids",IFCADVANCEDBREP:"IfcAdvancedBrep",IFCTRIANGULATEDFACESET:"IfcTriangulatedFaceSet",IFCTOROIDALSURFACE:"IfcToroidalSurface",IFCTESSELLATEDFACESET:"IfcTessellatedFaceSet",IFCTASKTYPE:"IfcTaskType",IFCSURFACECURVE:"IfcSurfaceCurve",IFCSUBCONTRACTRESOURCETYPE:"IfcSubContractResourceType",IFCSTRUCTURALSURFACEREACTION:"IfcStructuralSurfaceReaction",IFCSPHERICALSURFACE:"IfcSphericalSurface",IFCSPATIALZONETYPE:"IfcSpatialZoneType",IFCSPATIALZONE:"IfcSpatialZone",IFCSPATIALELEMENTTYPE:"IfcSpatialElementType",IFCSPATIALELEMENT:"IfcSpatialElement",IFCSIMPLEPROPERTYTEMPLATE:"IfcSimplePropertyTemplate",IFCREVOLVEDAREASOLIDTAPERED:"IfcRevolvedAreaSolidTapered",IFCREPARAMETRISEDCOMPOSITECURVESEGMENT:"IfcReparametrisedCompositeCurveSegment",IFCRELSPACEBOUNDARY2NDLEVEL:"IfcRelSpaceBoundary2ndLevel",IFCRELSPACEBOUNDARY1STLEVEL:"IfcRelSpaceBoundary1stLevel",IFCRELINTERFERESELEMENTS:"IfcRelInterferesElements",IFCRELDEFINESBYTEMPLATE:"IfcRelDefinesByTemplate",IFCRELDEFINESBYOBJECT:"IfcRelDefinesByObject",IFCRELDECLARES:"IfcRelDeclares",IFCRELASSIGNSTOGROUPBYFACTOR:"IfcRelAssignsToGroupByFactor",IFCPROPERTYTEMPLATE:"IfcPropertyTemplate",IFCPROPERTYSETTEMPLATE:"IfcPropertySetTemplate",IFCPROJECTLIBRARY:"IfcProjectLibrary",IFCPROCEDURETYPE:"IfcProcedureType",IFCPREDEFINEDPROPERTYSET:"IfcPredefinedPropertySet",IFCPCURVE:"IfcPCurve",IFCLABORRESOURCETYPE:"IfcLaborResourceType",IFCINDEXEDPOLYGONALFACEWITHVOIDS:"IfcIndexedPolygonalFaceWithVoids",IFCINDEXEDPOLYGONALFACE:"IfcIndexedPolygonalFace",IFCGEOGRAPHICELEMENTTYPE:"IfcGeographicElementType",IFCFIXEDREFERENCESWEPTAREASOLID:"IfcFixedReferenceSweptAreaSolid",IFCEXTRUDEDAREASOLIDTAPERED:"IfcExtrudedAreaSolidTapered",IFCEVENTTYPE:"IfcEventType",IFCCURVEBOUNDEDSURFACE:"IfcCurveBoundedSurface",IFCCREWRESOURCETYPE:"IfcCrewResourceType",IFCCONTEXT:"IfcContext",IFCCONSTRUCTIONRESOURCETYPE:"IfcConstructionResourceType",IFCCARTESIANPOINTLIST3D:"IfcCartesianPointList3D",IFCCARTESIANPOINTLIST2D:"IfcCartesianPointList2D",IFCCARTESIANPOINTLIST:"IfcCartesianPointList",IFCADVANCEDFACE:"IfcAdvancedFace",IFCTYPERESOURCE:"IfcTypeResource",IFCTYPEPROCESS:"IfcTypeProcess",IFCTESSELLATEDITEM:"IfcTessellatedItem",IFCSWEPTDISKSOLIDPOLYGONAL:"IfcSweptDiskSolidPolygonal",IFCRESOURCETIME:"IfcResourceTime",IFCRESOURCECONSTRAINTRELATIONSHIP:"IfcResourceConstraintRelationship",IFCRESOURCEAPPROVALRELATIONSHIP:"IfcResourceApprovalRelationship",IFCQUANTITYSET:"IfcQuantitySet",IFCPROPERTYTEMPLATEDEFINITION:"IfcPropertyTemplateDefinition",IFCPREDEFINEDPROPERTIES:"IfcPredefinedProperties",IFCMIRROREDPROFILEDEF:"IfcMirroredProfileDef",IFCMATERIALRELATIONSHIP:"IfcMaterialRelationship",IFCMATERIALPROFILESETUSAGETAPERING:"IfcMaterialProfileSetUsageTapering",IFCMATERIALPROFILESETUSAGE:"IfcMaterialProfileSetUsage",IFCMATERIALCONSTITUENTSET:"IfcMaterialConstituentSet",IFCMATERIALCONSTITUENT:"IfcMaterialConstituent",IFCLAGTIME:"IfcLagTime",IFCINDEXEDTRIANGLETEXTUREMAP:"IfcIndexedTriangleTextureMap",IFCINDEXEDTEXTUREMAP:"IfcIndexedTextureMap",IFCINDEXEDCOLOURMAP:"IfcIndexedColourMap",IFCEXTERNALREFERENCERELATIONSHIP:"IfcExternalReferenceRelationship",IFCEXTENDEDPROPERTIES:"IfcExtendedProperties",IFCEVENTTIME:"IfcEventTime",IFCCONVERSIONBASEDUNITWITHOFFSET:"IfcConversionBasedUnitWithOffset",IFCCOLOURRGBLIST:"IfcColourRgbList",IFCWORKTIME:"IfcWorkTime",IFCTIMEPERIOD:"IfcTimePeriod",IFCTEXTUREVERTEXLIST:"IfcTextureVertexList",IFCTASKTIMERECURRING:"IfcTaskTimeRecurring",IFCTASKTIME:"IfcTaskTime",IFCTABLECOLUMN:"IfcTableColumn",IFCSURFACEREINFORCEMENTAREA:"IfcSurfaceReinforcementArea",IFCSTRUCTURALLOADORRESULT:"IfcStructuralLoadOrResult",IFCSTRUCTURALLOADCONFIGURATION:"IfcStructuralLoadConfiguration",IFCSCHEDULINGTIME:"IfcSchedulingTime",IFCRESOURCELEVELRELATIONSHIP:"IfcResourceLevelRelationship",IFCREFERENCE:"IfcReference",IFCRECURRENCEPATTERN:"IfcRecurrencePattern",IFCPROPERTYABSTRACTION:"IfcPropertyAbstraction",IFCPROJECTEDCRS:"IfcProjectedCrs",IFCPRESENTATIONITEM:"IfcPresentationItem",IFCMATERIALUSAGEDEFINITION:"IfcMaterialUsageDefinition",IFCMATERIALPROFILEWITHOFFSETS:"IfcMaterialProfileWithOffsets",IFCMATERIALPROFILESET:"IfcMaterialProfileSet",IFCMATERIALPROFILE:"IfcMaterialProfile",IFCMATERIALLAYERWITHOFFSETS:"IfcMaterialLayerWithOffsets",IFCMATERIALDEFINITION:"IfcMaterialDefinition",IFCMAPCONVERSION:"IfcMapConversion",IFCEXTERNALINFORMATION:"IfcExternalInformation",IFCCOORDINATEREFERENCESYSTEM:"IfcCoordinateReferenceSystem",IFCCOORDINATEOPERATION:"IfcCoordinateOperation",IFCCONNECTIONVOLUMEGEOMETRY:"IfcConnectionVolumeGeometry",IFCREINFORCINGBAR:"IfcReinforcingBar",IFCELECTRICDISTRIBUTIONPOINT:"IfcElectricDistributionPoint",IFCDISTRIBUTIONCONTROLELEMENT:"IfcDistributionControlElement",IFCDISTRIBUTIONCHAMBERELEMENT:"IfcDistributionChamberElement",IFCCONTROLLERTYPE:"IfcControllerType",IFCCHAMFEREDGEFEATURE:"IfcChamferEdgeFeature",IFCBEAM:"IfcBeam",IFCALARMTYPE:"IfcAlarmType",IFCACTUATORTYPE:"IfcActuatorType",IFCWINDOW:"IfcWindow",IFCWALLSTANDARDCASE:"IfcWallStandardCase",IFCWALL:"IfcWall",IFCVIBRATIONISOLATORTYPE:"IfcVibrationIsolatorType",IFCTENDONANCHOR:"IfcTendonAnchor",IFCTENDON:"IfcTendon",IFCSTRUCTURALANALYSISMODEL:"IfcStructuralAnalysisModel",IFCSTAIRFLIGHT:"IfcStairFlight",IFCSTAIR:"IfcStair",IFCSLAB:"IfcSlab",IFCSENSORTYPE:"IfcSensorType",IFCROUNDEDEDGEFEATURE:"IfcRoundedEdgeFeature",IFCROOF:"IfcRoof",IFCREINFORCINGMESH:"IfcReinforcingMesh",IFCREINFORCINGELEMENT:"IfcReinforcingElement",IFCRATIONALBEZIERCURVE:"IfcRationalBezierCurve",IFCRAMPFLIGHT:"IfcRampFlight",IFCRAMP:"IfcRamp",IFCRAILING:"IfcRailing",IFCPLATE:"IfcPlate",IFCPILE:"IfcPile",IFCMEMBER:"IfcMember",IFCFOOTING:"IfcFooting",IFCFLOWTREATMENTDEVICE:"IfcFlowTreatmentDevice",IFCFLOWTERMINAL:"IfcFlowTerminal",IFCFLOWSTORAGEDEVICE:"IfcFlowStorageDevice",IFCFLOWSEGMENT:"IfcFlowSegment",IFCFLOWMOVINGDEVICE:"IfcFlowMovingDevice",IFCFLOWINSTRUMENTTYPE:"IfcFlowInstrumentType",IFCFLOWFITTING:"IfcFlowFitting",IFCFLOWCONTROLLER:"IfcFlowController",IFCFIRESUPPRESSIONTERMINALTYPE:"IfcFireSuppressionTerminalType",IFCFILTERTYPE:"IfcFilterType",IFCFANTYPE:"IfcFanType",IFCENERGYCONVERSIONDEVICE:"IfcEnergyConversionDevice",IFCELECTRICALELEMENT:"IfcElectricalElement",IFCELECTRICALCIRCUIT:"IfcElectricalCircuit",IFCELECTRICTIMECONTROLTYPE:"IfcElectricTimeControlType",IFCELECTRICMOTORTYPE:"IfcElectricMotorType",IFCELECTRICHEATERTYPE:"IfcElectricHeaterType",IFCELECTRICGENERATORTYPE:"IfcElectricGeneratorType",IFCELECTRICFLOWSTORAGEDEVICETYPE:"IfcElectricFlowStorageDeviceType",IFCELECTRICAPPLIANCETYPE:"IfcElectricApplianceType",IFCEDGEFEATURE:"IfcEdgeFeature",IFCDUCTSILENCERTYPE:"IfcDuctSilencerType",IFCDUCTSEGMENTTYPE:"IfcDuctSegmentType",IFCDUCTFITTINGTYPE:"IfcDuctFittingType",IFCDOOR:"IfcDoor",IFCDISTRIBUTIONPORT:"IfcDistributionPort",IFCDISTRIBUTIONFLOWELEMENT:"IfcDistributionFlowElement",IFCDISTRIBUTIONELEMENT:"IfcDistributionElement",IFCDISTRIBUTIONCONTROLELEMENTTYPE:"IfcDistributionControlElementType",IFCDISTRIBUTIONCHAMBERELEMENTTYPE:"IfcDistributionChamberElementType",IFCDISCRETEACCESSORYTYPE:"IfcDiscreteAccessoryType",IFCDISCRETEACCESSORY:"IfcDiscreteAccessory",IFCDIAMETERDIMENSION:"IfcDiameterDimension",IFCDAMPERTYPE:"IfcDamperType",IFCCURTAINWALL:"IfcCurtainWall",IFCCOVERING:"IfcCovering",IFCCOOLINGTOWERTYPE:"IfcCoolingTowerType",IFCCOOLEDBEAMTYPE:"IfcCooledBeamType",IFCCONSTRUCTIONPRODUCTRESOURCE:"IfcConstructionProductResource",IFCCONSTRUCTIONMATERIALRESOURCE:"IfcConstructionMaterialResource",IFCCONSTRUCTIONEQUIPMENTRESOURCE:"IfcConstructionEquipmentResource",IFCCONDITIONCRITERION:"IfcConditionCriterion",IFCCONDITION:"IfcCondition",IFCCONDENSERTYPE:"IfcCondenserType",IFCCOMPRESSORTYPE:"IfcCompressorType",IFCCOLUMN:"IfcColumn",IFCCOILTYPE:"IfcCoilType",IFCCIRCLE:"IfcCircle",IFCCHILLERTYPE:"IfcChillerType",IFCCABLESEGMENTTYPE:"IfcCableSegmentType",IFCCABLECARRIERSEGMENTTYPE:"IfcCableCarrierSegmentType",IFCCABLECARRIERFITTINGTYPE:"IfcCableCarrierFittingType",IFCBUILDINGELEMENTPROXYTYPE:"IfcBuildingElementProxyType",IFCBUILDINGELEMENTPROXY:"IfcBuildingElementProxy",IFCBUILDINGELEMENTPART:"IfcBuildingElementPart",IFCBUILDINGELEMENTCOMPONENT:"IfcBuildingElementComponent",IFCBUILDINGELEMENT:"IfcBuildingElement",IFCBOILERTYPE:"IfcBoilerType",IFCBEZIERCURVE:"IfcBezierCurve",IFCBEAMTYPE:"IfcBeamType",IFCBSPLINECURVE:"IfcBSplineCurve",IFCASSET:"IfcAsset",IFCANGULARDIMENSION:"IfcAngularDimension",IFCAIRTOAIRHEATRECOVERYTYPE:"IfcAirToAirHeatRecoveryType",IFCAIRTERMINALTYPE:"IfcAirTerminalType",IFCAIRTERMINALBOXTYPE:"IfcAirTerminalBoxType",IFCACTIONREQUEST:"IfcActionRequest",IFC2DCOMPOSITECURVE:"Ifc2DCompositeCurve",IFCZONE:"IfcZone",IFCWORKSCHEDULE:"IfcWorkSchedule",IFCWORKPLAN:"IfcWorkPlan",IFCWORKCONTROL:"IfcWorkControl",IFCWASTETERMINALTYPE:"IfcWasteTerminalType",IFCWALLTYPE:"IfcWallType",IFCVIRTUALELEMENT:"IfcVirtualElement",IFCVALVETYPE:"IfcValveType",IFCUNITARYEQUIPMENTTYPE:"IfcUnitaryEquipmentType",IFCTUBEBUNDLETYPE:"IfcTubeBundleType",IFCTRIMMEDCURVE:"IfcTrimmedCurve",IFCTRANSPORTELEMENT:"IfcTransportElement",IFCTRANSFORMERTYPE:"IfcTransformerType",IFCTIMESERIESSCHEDULE:"IfcTimeSeriesSchedule",IFCTANKTYPE:"IfcTankType",IFCSYSTEM:"IfcSystem",IFCSWITCHINGDEVICETYPE:"IfcSwitchingDeviceType",IFCSUBCONTRACTRESOURCE:"IfcSubContractResource",IFCSTRUCTURALSURFACECONNECTION:"IfcStructuralSurfaceConnection",IFCSTRUCTURALRESULTGROUP:"IfcStructuralResultGroup",IFCSTRUCTURALPOINTREACTION:"IfcStructuralPointReaction",IFCSTRUCTURALPOINTCONNECTION:"IfcStructuralPointConnection",IFCSTRUCTURALPOINTACTION:"IfcStructuralPointAction",IFCSTRUCTURALPLANARACTIONVARYING:"IfcStructuralPlanarActionVarying",IFCSTRUCTURALPLANARACTION:"IfcStructuralPlanarAction",IFCSTRUCTURALLOADGROUP:"IfcStructuralLoadGroup",IFCSTRUCTURALLINEARACTIONVARYING:"IfcStructuralLinearActionVarying",IFCSTRUCTURALLINEARACTION:"IfcStructuralLinearAction",IFCSTRUCTURALCURVEMEMBERVARYING:"IfcStructuralCurveMemberVarying",IFCSTRUCTURALCURVEMEMBER:"IfcStructuralCurveMember",IFCSTRUCTURALCURVECONNECTION:"IfcStructuralCurveConnection",IFCSTRUCTURALCONNECTION:"IfcStructuralConnection",IFCSTRUCTURALACTION:"IfcStructuralAction",IFCSTAIRFLIGHTTYPE:"IfcStairFlightType",IFCSTACKTERMINALTYPE:"IfcStackTerminalType",IFCSPACETYPE:"IfcSpaceType",IFCSPACEPROGRAM:"IfcSpaceProgram",IFCSPACEHEATERTYPE:"IfcSpaceHeaterType",IFCSPACE:"IfcSpace",IFCSLABTYPE:"IfcSlabType",IFCSITE:"IfcSite",IFCSERVICELIFE:"IfcServiceLife",IFCSCHEDULETIMECONTROL:"IfcScheduleTimeControl",IFCSANITARYTERMINALTYPE:"IfcSanitaryTerminalType",IFCRELASSIGNSTASKS:"IfcRelAssignsTasks",IFCRELAGGREGATES:"IfcRelAggregates",IFCRAMPFLIGHTTYPE:"IfcRampFlightType",IFCRAILINGTYPE:"IfcRailingType",IFCRADIUSDIMENSION:"IfcRadiusDimension",IFCPUMPTYPE:"IfcPumpType",IFCPROTECTIVEDEVICETYPE:"IfcProtectiveDeviceType",IFCPROJECTIONELEMENT:"IfcProjectionElement",IFCPROJECTORDERRECORD:"IfcProjectOrderRecord",IFCPROJECTORDER:"IfcProjectOrder",IFCPROCEDURE:"IfcProcedure",IFCPORT:"IfcPort",IFCPOLYLINE:"IfcPolyline",IFCPLATETYPE:"IfcPlateType",IFCPIPESEGMENTTYPE:"IfcPipeSegmentType",IFCPIPEFITTINGTYPE:"IfcPipeFittingType",IFCPERMIT:"IfcPermit",IFCPERFORMANCEHISTORY:"IfcPerformanceHistory",IFCOUTLETTYPE:"IfcOutletType",IFCORDERACTION:"IfcOrderAction",IFCOPENINGELEMENT:"IfcOpeningElement",IFCOCCUPANT:"IfcOccupant",IFCMOVE:"IfcMove",IFCMOTORCONNECTIONTYPE:"IfcMotorConnectionType",IFCMEMBERTYPE:"IfcMemberType",IFCMECHANICALFASTENERTYPE:"IfcMechanicalFastenerType",IFCMECHANICALFASTENER:"IfcMechanicalFastener",IFCLINEARDIMENSION:"IfcLinearDimension",IFCLIGHTFIXTURETYPE:"IfcLightFixtureType",IFCLAMPTYPE:"IfcLampType",IFCLABORRESOURCE:"IfcLaborResource",IFCJUNCTIONBOXTYPE:"IfcJunctionBoxType",IFCINVENTORY:"IfcInventory",IFCHUMIDIFIERTYPE:"IfcHumidifierType",IFCHEATEXCHANGERTYPE:"IfcHeatExchangerType",IFCGROUP:"IfcGroup",IFCGRID:"IfcGrid",IFCGASTERMINALTYPE:"IfcGasTerminalType",IFCFURNITURESTANDARD:"IfcFurnitureStandard",IFCFURNISHINGELEMENT:"IfcFurnishingElement",IFCFLOWTREATMENTDEVICETYPE:"IfcFlowTreatmentDeviceType",IFCFLOWTERMINALTYPE:"IfcFlowTerminalType",IFCFLOWSTORAGEDEVICETYPE:"IfcFlowStorageDeviceType",IFCFLOWSEGMENTTYPE:"IfcFlowSegmentType",IFCFLOWMOVINGDEVICETYPE:"IfcFlowMovingDeviceType",IFCFLOWMETERTYPE:"IfcFlowMeterType",IFCFLOWFITTINGTYPE:"IfcFlowFittingType",IFCFLOWCONTROLLERTYPE:"IfcFlowControllerType",IFCFEATUREELEMENTSUBTRACTION:"IfcFeatureElementSubtraction",IFCFEATUREELEMENTADDITION:"IfcFeatureElementAddition",IFCFEATUREELEMENT:"IfcFeatureElement",IFCFASTENERTYPE:"IfcFastenerType",IFCFASTENER:"IfcFastener",IFCFACETEDBREPWITHVOIDS:"IfcFacetedBrepWithVoids",IFCFACETEDBREP:"IfcFacetedBrep",IFCEVAPORATORTYPE:"IfcEvaporatorType",IFCEVAPORATIVECOOLERTYPE:"IfcEvaporativeCoolerType",IFCEQUIPMENTSTANDARD:"IfcEquipmentStandard",IFCEQUIPMENTELEMENT:"IfcEquipmentElement",IFCENERGYCONVERSIONDEVICETYPE:"IfcEnergyConversionDeviceType",IFCELLIPSE:"IfcEllipse",IFCELEMENTCOMPONENTTYPE:"IfcElementComponentType",IFCELEMENTCOMPONENT:"IfcElementComponent",IFCELEMENTASSEMBLY:"IfcElementAssembly",IFCELEMENT:"IfcElement",IFCELECTRICALBASEPROPERTIES:"IfcElectricalBaseProperties",IFCDISTRIBUTIONFLOWELEMENTTYPE:"IfcDistributionFlowElementType",IFCDISTRIBUTIONELEMENTTYPE:"IfcDistributionElementType",IFCDIMENSIONCURVEDIRECTEDCALLOUT:"IfcDimensionCurveDirectedCallout",IFCCURTAINWALLTYPE:"IfcCurtainWallType",IFCCREWRESOURCE:"IfcCrewResource",IFCCOVERINGTYPE:"IfcCoveringType",IFCCOSTSCHEDULE:"IfcCostSchedule",IFCCOSTITEM:"IfcCostItem",IFCCONTROL:"IfcControl",IFCCONSTRUCTIONRESOURCE:"IfcConstructionResource",IFCCONIC:"IfcConic",IFCCOMPOSITECURVE:"IfcCompositeCurve",IFCCOLUMNTYPE:"IfcColumnType",IFCCIRCLEHOLLOWPROFILEDEF:"IfcCircleHollowProfileDef",IFCBUILDINGSTOREY:"IfcBuildingStorey",IFCBUILDINGELEMENTTYPE:"IfcBuildingElementType",IFCBUILDING:"IfcBuilding",IFCBOUNDEDCURVE:"IfcBoundedCurve",IFCBOOLEANCLIPPINGRESULT:"IfcBooleanClippingResult",IFCBLOCK:"IfcBlock",IFCASYMMETRICISHAPEPROFILEDEF:"IfcAsymmetricIShapeProfileDef",IFCANNOTATION:"IfcAnnotation",IFCACTOR:"IfcActor",IFCTRANSPORTELEMENTTYPE:"IfcTransportElementType",IFCTASK:"IfcTask",IFCSYSTEMFURNITUREELEMENTTYPE:"IfcSystemFurnitureElementType",IFCSURFACEOFREVOLUTION:"IfcSurfaceOfRevolution",IFCSURFACEOFLINEAREXTRUSION:"IfcSurfaceOfLinearExtrusion",IFCSURFACECURVESWEPTAREASOLID:"IfcSurfaceCurveSweptAreaSolid",IFCSTRUCTUREDDIMENSIONCALLOUT:"IfcStructuredDimensionCallout",IFCSTRUCTURALSURFACEMEMBERVARYING:"IfcStructuralSurfaceMemberVarying",IFCSTRUCTURALSURFACEMEMBER:"IfcStructuralSurfaceMember",IFCSTRUCTURALREACTION:"IfcStructuralReaction",IFCSTRUCTURALMEMBER:"IfcStructuralMember",IFCSTRUCTURALITEM:"IfcStructuralItem",IFCSTRUCTURALACTIVITY:"IfcStructuralActivity",IFCSPHERE:"IfcSphere",IFCSPATIALSTRUCTUREELEMENTTYPE:"IfcSpatialStructureElementType",IFCSPATIALSTRUCTUREELEMENT:"IfcSpatialStructureElement",IFCRIGHTCIRCULARCYLINDER:"IfcRightCircularCylinder",IFCRIGHTCIRCULARCONE:"IfcRightCircularCone",IFCREVOLVEDAREASOLID:"IfcRevolvedAreaSolid",IFCRESOURCE:"IfcResource",IFCRELVOIDSELEMENT:"IfcRelVoidsElement",IFCRELSPACEBOUNDARY:"IfcRelSpaceBoundary",IFCRELSERVICESBUILDINGS:"IfcRelServicesBuildings",IFCRELSEQUENCE:"IfcRelSequence",IFCRELSCHEDULESCOSTITEMS:"IfcRelSchedulesCostItems",IFCRELREFERENCEDINSPATIALSTRUCTURE:"IfcRelReferencedInSpatialStructure",IFCRELPROJECTSELEMENT:"IfcRelProjectsElement",IFCRELOVERRIDESPROPERTIES:"IfcRelOverridesProperties",IFCRELOCCUPIESSPACES:"IfcRelOccupiesSpaces",IFCRELNESTS:"IfcRelNests",IFCRELINTERACTIONREQUIREMENTS:"IfcRelInteractionRequirements",IFCRELFLOWCONTROLELEMENTS:"IfcRelFlowControlElements",IFCRELFILLSELEMENT:"IfcRelFillsElement",IFCRELDEFINESBYTYPE:"IfcRelDefinesByType",IFCRELDEFINESBYPROPERTIES:"IfcRelDefinesByProperties",IFCRELDEFINES:"IfcRelDefines",IFCRELDECOMPOSES:"IfcRelDecomposes",IFCRELCOVERSSPACES:"IfcRelCoversSpaces",IFCRELCOVERSBLDGELEMENTS:"IfcRelCoversBldgElements",IFCRELCONTAINEDINSPATIALSTRUCTURE:"IfcRelContainedInSpatialStructure",IFCRELCONNECTSWITHREALIZINGELEMENTS:"IfcRelConnectsWithRealizingElements",IFCRELCONNECTSWITHECCENTRICITY:"IfcRelConnectsWithEccentricity",IFCRELCONNECTSSTRUCTURALMEMBER:"IfcRelConnectsStructuralMember",IFCRELCONNECTSSTRUCTURALELEMENT:"IfcRelConnectsStructuralElement",IFCRELCONNECTSSTRUCTURALACTIVITY:"IfcRelConnectsStructuralActivity",IFCRELCONNECTSPORTS:"IfcRelConnectsPorts",IFCRELCONNECTSPORTTOELEMENT:"IfcRelConnectsPortToElement",IFCRELCONNECTSPATHELEMENTS:"IfcRelConnectsPathElements",IFCRELCONNECTSELEMENTS:"IfcRelConnectsElements",IFCRELCONNECTS:"IfcRelConnects",IFCRELASSOCIATESPROFILEPROPERTIES:"IfcRelAssociatesProfileProperties",IFCRELASSOCIATESMATERIAL:"IfcRelAssociatesMaterial",IFCRELASSOCIATESLIBRARY:"IfcRelAssociatesLibrary",IFCRELASSOCIATESDOCUMENT:"IfcRelAssociatesDocument",IFCRELASSOCIATESCONSTRAINT:"IfcRelAssociatesConstraint",IFCRELASSOCIATESCLASSIFICATION:"IfcRelAssociatesClassification",IFCRELASSOCIATESAPPROVAL:"IfcRelAssociatesApproval",IFCRELASSOCIATESAPPLIEDVALUE:"IfcRelAssociatesAppliedValue",IFCRELASSOCIATES:"IfcRelAssociates",IFCRELASSIGNSTORESOURCE:"IfcRelAssignsToResource",IFCRELASSIGNSTOPROJECTORDER:"IfcRelAssignsToProjectOrder",IFCRELASSIGNSTOPRODUCT:"IfcRelAssignsToProduct",IFCRELASSIGNSTOPROCESS:"IfcRelAssignsToProcess",IFCRELASSIGNSTOGROUP:"IfcRelAssignsToGroup",IFCRELASSIGNSTOCONTROL:"IfcRelAssignsToControl",IFCRELASSIGNSTOACTOR:"IfcRelAssignsToActor",IFCRELASSIGNS:"IfcRelAssigns",IFCRECTANGULARTRIMMEDSURFACE:"IfcRectangularTrimmedSurface",IFCRECTANGULARPYRAMID:"IfcRectangularPyramid",IFCRECTANGLEHOLLOWPROFILEDEF:"IfcRectangleHollowProfileDef",IFCPROXY:"IfcProxy",IFCPROPERTYSET:"IfcPropertySet",IFCPROJECTIONCURVE:"IfcProjectionCurve",IFCPROJECT:"IfcProject",IFCPRODUCT:"IfcProduct",IFCPROCESS:"IfcProcess",IFCPLANE:"IfcPlane",IFCPLANARBOX:"IfcPlanarBox",IFCPERMEABLECOVERINGPROPERTIES:"IfcPermeableCoveringProperties",IFCOFFSETCURVE3D:"IfcOffsetCurve3D",IFCOFFSETCURVE2D:"IfcOffsetCurve2D",IFCOBJECT:"IfcObject",IFCMANIFOLDSOLIDBREP:"IfcManifoldSolidBrep",IFCLINE:"IfcLine",IFCLSHAPEPROFILEDEF:"IfcLShapeProfileDef",IFCISHAPEPROFILEDEF:"IfcIShapeProfileDef",IFCGEOMETRICCURVESET:"IfcGeometricCurveSet",IFCFURNITURETYPE:"IfcFurnitureType",IFCFURNISHINGELEMENTTYPE:"IfcFurnishingElementType",IFCFLUIDFLOWPROPERTIES:"IfcFluidFlowProperties",IFCFILLAREASTYLETILES:"IfcFillAreaStyleTiles",IFCFILLAREASTYLETILESYMBOLWITHSTYLE:"IfcFillAreaStyleTileSymbolWithStyle",IFCFILLAREASTYLEHATCHING:"IfcFillAreaStyleHatching",IFCFACEBASEDSURFACEMODEL:"IfcFaceBasedSurfaceModel",IFCEXTRUDEDAREASOLID:"IfcExtrudedAreaSolid",IFCENERGYPROPERTIES:"IfcEnergyProperties",IFCELLIPSEPROFILEDEF:"IfcEllipseProfileDef",IFCELEMENTARYSURFACE:"IfcElementarySurface",IFCELEMENTTYPE:"IfcElementType",IFCELEMENTQUANTITY:"IfcElementQuantity",IFCEDGELOOP:"IfcEdgeLoop",IFCDRAUGHTINGPREDEFINEDCURVEFONT:"IfcDraughtingPredefinedCurveFont",IFCDRAUGHTINGPREDEFINEDCOLOUR:"IfcDraughtingPredefinedColour",IFCDRAUGHTINGCALLOUT:"IfcDraughtingCallout",IFCDOORSTYLE:"IfcDoorStyle",IFCDOORPANELPROPERTIES:"IfcDoorPanelProperties",IFCDOORLININGPROPERTIES:"IfcDoorLiningProperties",IFCDIRECTION:"IfcDirection",IFCDIMENSIONCURVETERMINATOR:"IfcDimensionCurveTerminator",IFCDIMENSIONCURVE:"IfcDimensionCurve",IFCDEFINEDSYMBOL:"IfcDefinedSymbol",IFCCURVEBOUNDEDPLANE:"IfcCurveBoundedPlane",IFCCURVE:"IfcCurve",IFCCSGSOLID:"IfcCsgSolid",IFCCSGPRIMITIVE3D:"IfcCsgPrimitive3D",IFCCRANERAILFSHAPEPROFILEDEF:"IfcCraneRailFShapeProfileDef",IFCCRANERAILASHAPEPROFILEDEF:"IfcCraneRailAShapeProfileDef",IFCCOMPOSITECURVESEGMENT:"IfcCompositeCurveSegment",IFCCLOSEDSHELL:"IfcClosedShell",IFCCIRCLEPROFILEDEF:"IfcCircleProfileDef",IFCCARTESIANTRANSFORMATIONOPERATOR3DNONUNIFORM:"IfcCartesianTransformationOperator3DNonUniform",IFCCARTESIANTRANSFORMATIONOPERATOR3D:"IfcCartesianTransformationOperator3D",IFCCARTESIANTRANSFORMATIONOPERATOR2DNONUNIFORM:"IfcCartesianTransformationOperator2DNonUniform",IFCCARTESIANTRANSFORMATIONOPERATOR2D:"IfcCartesianTransformationOperator2D",IFCCARTESIANTRANSFORMATIONOPERATOR:"IfcCartesianTransformationOperator",IFCCARTESIANPOINT:"IfcCartesianPoint",IFCCSHAPEPROFILEDEF:"IfcCShapeProfileDef",IFCBOXEDHALFSPACE:"IfcBoxedHalfSpace",IFCBOUNDINGBOX:"IfcBoundingBox",IFCBOUNDEDSURFACE:"IfcBoundedSurface",IFCBOOLEANRESULT:"IfcBooleanResult",IFCAXIS2PLACEMENT3D:"IfcAxis2Placement3D",IFCAXIS2PLACEMENT2D:"IfcAxis2Placement2D",IFCAXIS1PLACEMENT:"IfcAxis1Placement",IFCANNOTATIONSURFACE:"IfcAnnotationSurface",IFCANNOTATIONFILLAREAOCCURRENCE:"IfcAnnotationFillAreaOccurrence",IFCANNOTATIONFILLAREA:"IfcAnnotationFillArea",IFCANNOTATIONCURVEOCCURRENCE:"IfcAnnotationCurveOccurrence",IFCZSHAPEPROFILEDEF:"IfcZShapeProfileDef",IFCWINDOWSTYLE:"IfcWindowStyle",IFCWINDOWPANELPROPERTIES:"IfcWindowPanelProperties",IFCWINDOWLININGPROPERTIES:"IfcWindowLiningProperties",IFCVERTEXLOOP:"IfcVertexLoop",IFCVECTOR:"IfcVector",IFCUSHAPEPROFILEDEF:"IfcUShapeProfileDef",IFCTYPEPRODUCT:"IfcTypeProduct",IFCTYPEOBJECT:"IfcTypeObject",IFCTWODIRECTIONREPEATFACTOR:"IfcTwoDirectionRepeatFactor",IFCTRAPEZIUMPROFILEDEF:"IfcTrapeziumProfileDef",IFCTEXTLITERALWITHEXTENT:"IfcTextLiteralWithExtent",IFCTEXTLITERAL:"IfcTextLiteral",IFCTERMINATORSYMBOL:"IfcTerminatorSymbol",IFCTSHAPEPROFILEDEF:"IfcTShapeProfileDef",IFCSWEPTSURFACE:"IfcSweptSurface",IFCSWEPTDISKSOLID:"IfcSweptDiskSolid",IFCSWEPTAREASOLID:"IfcSweptAreaSolid",IFCSURFACESTYLERENDERING:"IfcSurfaceStyleRendering",IFCSURFACE:"IfcSurface",IFCSUBEDGE:"IfcSubedge",IFCSTRUCTURALSTEELPROFILEPROPERTIES:"IfcStructuralSteelProfileProperties",IFCSTRUCTURALPROFILEPROPERTIES:"IfcStructuralProfileProperties",IFCSTRUCTURALLOADSINGLEFORCEWARPING:"IfcStructuralLoadSingleForceWarping",IFCSTRUCTURALLOADSINGLEFORCE:"IfcStructuralLoadSingleForce",IFCSTRUCTURALLOADSINGLEDISPLACEMENTDISTORTION:"IfcStructuralLoadSingleDisplacementDistortion",IFCSTRUCTURALLOADSINGLEDISPLACEMENT:"IfcStructuralLoadSingleDisplacement",IFCSTRUCTURALLOADPLANARFORCE:"IfcStructuralLoadPlanarForce",IFCSTRUCTURALLOADLINEARFORCE:"IfcStructuralLoadLinearForce",IFCSPACETHERMALLOADPROPERTIES:"IfcSpaceThermalLoadProperties",IFCSOUNDVALUE:"IfcSoundValue",IFCSOUNDPROPERTIES:"IfcSoundProperties",IFCSOLIDMODEL:"IfcSolidModel",IFCSLIPPAGECONNECTIONCONDITION:"IfcSlippageConnectionCondition",IFCSHELLBASEDSURFACEMODEL:"IfcShellBasedSurfaceModel",IFCSERVICELIFEFACTOR:"IfcServiceLifeFactor",IFCSECTIONEDSPINE:"IfcSectionedSpine",IFCROUNDEDRECTANGLEPROFILEDEF:"IfcRoundedRectangleProfileDef",IFCRELATIONSHIP:"IfcRelationship",IFCREINFORCEMENTDEFINITIONPROPERTIES:"IfcReinforcementDefinitionProperties",IFCREGULARTIMESERIES:"IfcRegularTimeSeries",IFCRECTANGLEPROFILEDEF:"IfcRectangleProfileDef",IFCPROPERTYTABLEVALUE:"IfcPropertyTableValue",IFCPROPERTYSINGLEVALUE:"IfcPropertySingleValue",IFCPROPERTYSETDEFINITION:"IfcPropertySetDefinition",IFCPROPERTYREFERENCEVALUE:"IfcPropertyReferenceValue",IFCPROPERTYLISTVALUE:"IfcPropertyListValue",IFCPROPERTYENUMERATEDVALUE:"IfcPropertyEnumeratedValue",IFCPROPERTYDEFINITION:"IfcPropertyDefinition",IFCPROPERTYBOUNDEDVALUE:"IfcPropertyBoundedValue",IFCPRODUCTDEFINITIONSHAPE:"IfcProductDefinitionShape",IFCPREDEFINEDPOINTMARKERSYMBOL:"IfcPredefinedPointMarkerSymbol",IFCPREDEFINEDDIMENSIONSYMBOL:"IfcPredefinedDimensionSymbol",IFCPREDEFINEDCURVEFONT:"IfcPredefinedCurveFont",IFCPREDEFINEDCOLOUR:"IfcPredefinedColour",IFCPOLYGONALBOUNDEDHALFSPACE:"IfcPolygonalBoundedHalfSpace",IFCPOLYLOOP:"IfcPolyLoop",IFCPOINTONSURFACE:"IfcPointOnSurface",IFCPOINTONCURVE:"IfcPointOnCurve",IFCPOINT:"IfcPoint",IFCPLANAREXTENT:"IfcPlanarExtent",IFCPLACEMENT:"IfcPlacement",IFCPIXELTEXTURE:"IfcPixelTexture",IFCPHYSICALCOMPLEXQUANTITY:"IfcPhysicalComplexQuantity",IFCPATH:"IfcPath",IFCPARAMETERIZEDPROFILEDEF:"IfcParameterizedProfileDef",IFCORIENTEDEDGE:"IfcOrientedEdge",IFCOPENSHELL:"IfcOpenShell",IFCONEDIRECTIONREPEATFACTOR:"IfcOneDirectionRepeatFactor",IFCOBJECTDEFINITION:"IfcObjectDefinition",IFCMECHANICALCONCRETEMATERIALPROPERTIES:"IfcMechanicalConcreteMaterialProperties",IFCMATERIALDEFINITIONREPRESENTATION:"IfcMaterialDefinitionRepresentation",IFCMAPPEDITEM:"IfcMappedItem",IFCLOOP:"IfcLoop",IFCLOCALPLACEMENT:"IfcLocalPlacement",IFCLIGHTSOURCESPOT:"IfcLightSourceSpot",IFCLIGHTSOURCEPOSITIONAL:"IfcLightSourcePositional",IFCLIGHTSOURCEGONIOMETRIC:"IfcLightSourceGoniometric",IFCLIGHTSOURCEDIRECTIONAL:"IfcLightSourceDirectional",IFCLIGHTSOURCEAMBIENT:"IfcLightSourceAmbient",IFCLIGHTSOURCE:"IfcLightSource",IFCIRREGULARTIMESERIES:"IfcIrregularTimeSeries",IFCIMAGETEXTURE:"IfcImageTexture",IFCHYGROSCOPICMATERIALPROPERTIES:"IfcHygroscopicMaterialProperties",IFCHALFSPACESOLID:"IfcHalfSpaceSolid",IFCGRIDPLACEMENT:"IfcGridPlacement",IFCGEOMETRICSET:"IfcGeometricSet",IFCGEOMETRICREPRESENTATIONSUBCONTEXT:"IfcGeometricRepresentationSubContext",IFCGEOMETRICREPRESENTATIONITEM:"IfcGeometricRepresentationItem",IFCGEOMETRICREPRESENTATIONCONTEXT:"IfcGeometricRepresentationContext",IFCGENERALPROFILEPROPERTIES:"IfcGeneralProfileProperties",IFCGENERALMATERIALPROPERTIES:"IfcGeneralMaterialProperties",IFCFUELPROPERTIES:"IfcFuelProperties",IFCFILLAREASTYLE:"IfcFillAreaStyle",IFCFAILURECONNECTIONCONDITION:"IfcFailureConnectionCondition",IFCFACESURFACE:"IfcFaceSurface",IFCFACEOUTERBOUND:"IfcFaceOuterBound",IFCFACEBOUND:"IfcFaceBound",IFCFACE:"IfcFace",IFCEXTENDEDMATERIALPROPERTIES:"IfcExtendedMaterialProperties",IFCEDGECURVE:"IfcEdgeCurve",IFCEDGE:"IfcEdge",IFCDRAUGHTINGPREDEFINEDTEXTFONT:"IfcDraughtingPredefinedTextFont",IFCDOCUMENTREFERENCE:"IfcDocumentReference",IFCDIMENSIONPAIR:"IfcDimensionPair",IFCDIMENSIONCALLOUTRELATIONSHIP:"IfcDimensionCalloutRelationship",IFCDERIVEDPROFILEDEF:"IfcDerivedProfileDef",IFCCURVESTYLE:"IfcCurveStyle",IFCCONVERSIONBASEDUNIT:"IfcConversionBasedUnit",IFCCONTEXTDEPENDENTUNIT:"IfcContextDependentUnit",IFCCONNECTIONPOINTECCENTRICITY:"IfcConnectionPointEccentricity",IFCCONNECTIONCURVEGEOMETRY:"IfcConnectionCurveGeometry",IFCCONNECTEDFACESET:"IfcConnectedFaceSet",IFCCOMPOSITEPROFILEDEF:"IfcCompositeProfileDef",IFCCOMPLEXPROPERTY:"IfcComplexProperty",IFCCOLOURRGB:"IfcColourRgb",IFCCLASSIFICATIONREFERENCE:"IfcClassificationReference",IFCCENTERLINEPROFILEDEF:"IfcCenterLineProfileDef",IFCBLOBTEXTURE:"IfcBlobTexture",IFCARBITRARYPROFILEDEFWITHVOIDS:"IfcArbitraryProfileDefWithVoids",IFCARBITRARYOPENPROFILEDEF:"IfcArbitraryOpenProfileDef",IFCARBITRARYCLOSEDPROFILEDEF:"IfcArbitraryClosedProfileDef",IFCANNOTATIONTEXTOCCURRENCE:"IfcAnnotationTextOccurrence",IFCANNOTATIONSYMBOLOCCURRENCE:"IfcAnnotationSymbolOccurrence",IFCANNOTATIONSURFACEOCCURRENCE:"IfcAnnotationSurfaceOccurrence",IFCANNOTATIONOCCURRENCE:"IfcAnnotationOccurrence",IFCWATERPROPERTIES:"IfcWaterProperties",IFCVIRTUALGRIDINTERSECTION:"IfcVirtualGridIntersection",IFCVERTEXPOINT:"IfcVertexPoint",IFCVERTEXBASEDTEXTUREMAP:"IfcVertexBasedTextureMap",IFCVERTEX:"IfcVertex",IFCUNITASSIGNMENT:"IfcUnitAssignment",IFCTOPOLOGYREPRESENTATION:"IfcTopologyRepresentation",IFCTOPOLOGICALREPRESENTATIONITEM:"IfcTopologicalRepresentationItem",IFCTIMESERIESVALUE:"IfcTimeSeriesValue",IFCTIMESERIESREFERENCERELATIONSHIP:"IfcTimeSeriesReferenceRelationship",IFCTIMESERIES:"IfcTimeSeries",IFCTHERMALMATERIALPROPERTIES:"IfcThermalMaterialProperties",IFCTEXTUREVERTEX:"IfcTextureVertex",IFCTEXTUREMAP:"IfcTextureMap",IFCTEXTURECOORDINATEGENERATOR:"IfcTextureCoordinateGenerator",IFCTEXTURECOORDINATE:"IfcTextureCoordinate",IFCTEXTSTYLEWITHBOXCHARACTERISTICS:"IfcTextStyleWithBoxCharacteristics",IFCTEXTSTYLETEXTMODEL:"IfcTextStyleTextModel",IFCTEXTSTYLEFORDEFINEDFONT:"IfcTextStyleForDefinedFont",IFCTEXTSTYLEFONTMODEL:"IfcTextStyleFontModel",IFCTEXTSTYLE:"IfcTextStyle",IFCTELECOMADDRESS:"IfcTelecomAddress",IFCTABLEROW:"IfcTableRow",IFCTABLE:"IfcTable",IFCSYMBOLSTYLE:"IfcSymbolStyle",IFCSURFACETEXTURE:"IfcSurfaceTexture",IFCSURFACESTYLEWITHTEXTURES:"IfcSurfaceStyleWithTextures",IFCSURFACESTYLESHADING:"IfcSurfaceStyleShading",IFCSURFACESTYLEREFRACTION:"IfcSurfaceStyleRefraction",IFCSURFACESTYLELIGHTING:"IfcSurfaceStyleLighting",IFCSURFACESTYLE:"IfcSurfaceStyle",IFCSTYLEDREPRESENTATION:"IfcStyledRepresentation",IFCSTYLEDITEM:"IfcStyledItem",IFCSTYLEMODEL:"IfcStyleModel",IFCSTRUCTURALLOADTEMPERATURE:"IfcStructuralLoadTemperature",IFCSTRUCTURALLOADSTATIC:"IfcStructuralLoadStatic",IFCSTRUCTURALLOAD:"IfcStructuralLoad",IFCSTRUCTURALCONNECTIONCONDITION:"IfcStructuralConnectionCondition",IFCSIMPLEPROPERTY:"IfcSimpleProperty",IFCSHAPEREPRESENTATION:"IfcShapeRepresentation",IFCSHAPEMODEL:"IfcShapeModel",IFCSHAPEASPECT:"IfcShapeAspect",IFCSECTIONREINFORCEMENTPROPERTIES:"IfcSectionReinforcementProperties",IFCSECTIONPROPERTIES:"IfcSectionProperties",IFCSIUNIT:"IfcSIUnit",IFCROOT:"IfcRoot",IFCRIBPLATEPROFILEPROPERTIES:"IfcRibPlateProfileProperties",IFCREPRESENTATIONMAP:"IfcRepresentationMap",IFCREPRESENTATIONITEM:"IfcRepresentationItem",IFCREPRESENTATIONCONTEXT:"IfcRepresentationContext",IFCREPRESENTATION:"IfcRepresentation",IFCRELAXATION:"IfcRelaxation",IFCREINFORCEMENTBARPROPERTIES:"IfcReinforcementBarProperties",IFCREFERENCESVALUEDOCUMENT:"IfcReferencesValueDocument",IFCQUANTITYWEIGHT:"IfcQuantityWeight",IFCQUANTITYVOLUME:"IfcQuantityVolume",IFCQUANTITYTIME:"IfcQuantityTime",IFCQUANTITYLENGTH:"IfcQuantityLength",IFCQUANTITYCOUNT:"IfcQuantityCount",IFCQUANTITYAREA:"IfcQuantityArea",IFCPROPERTYENUMERATION:"IfcPropertyEnumeration",IFCPROPERTYDEPENDENCYRELATIONSHIP:"IfcPropertyDependencyRelationship",IFCPROPERTYCONSTRAINTRELATIONSHIP:"IfcPropertyConstraintRelationship",IFCPROPERTY:"IfcProperty",IFCPROFILEPROPERTIES:"IfcProfileProperties",IFCPROFILEDEF:"IfcProfileDef",IFCPRODUCTSOFCOMBUSTIONPROPERTIES:"IfcProductsOfCombustionProperties",IFCPRODUCTREPRESENTATION:"IfcProductRepresentation",IFCPRESENTATIONSTYLEASSIGNMENT:"IfcPresentationStyleAssignment",IFCPRESENTATIONSTYLE:"IfcPresentationStyle",IFCPRESENTATIONLAYERWITHSTYLE:"IfcPresentationLayerWithStyle",IFCPRESENTATIONLAYERASSIGNMENT:"IfcPresentationLayerAssignment",IFCPREDEFINEDTEXTFONT:"IfcPredefinedTextFont",IFCPREDEFINEDTERMINATORSYMBOL:"IfcPredefinedTerminatorSymbol",IFCPREDEFINEDSYMBOL:"IfcPredefinedSymbol",IFCPREDEFINEDITEM:"IfcPredefinedItem",IFCPOSTALADDRESS:"IfcPostalAddress",IFCPHYSICALSIMPLEQUANTITY:"IfcPhysicalSimpleQuantity",IFCPHYSICALQUANTITY:"IfcPhysicalQuantity",IFCPERSONANDORGANIZATION:"IfcPersonAndOrganization",IFCPERSON:"IfcPerson",IFCOWNERHISTORY:"IfcOwnerHistory",IFCORGANIZATIONRELATIONSHIP:"IfcOrganizationRelationship",IFCORGANIZATION:"IfcOrganization",IFCOPTICALMATERIALPROPERTIES:"IfcOpticalMaterialProperties",IFCOBJECTIVE:"IfcObjective",IFCOBJECTPLACEMENT:"IfcObjectPlacement",IFCNAMEDUNIT:"IfcNamedUnit",IFCMONETARYUNIT:"IfcMonetaryUnit",IFCMETRIC:"IfcMetric",IFCMECHANICALSTEELMATERIALPROPERTIES:"IfcMechanicalSteelMaterialProperties",IFCMECHANICALMATERIALPROPERTIES:"IfcMechanicalMaterialProperties",IFCMEASUREWITHUNIT:"IfcMeasureWithUnit",IFCMATERIALPROPERTIES:"IfcMaterialProperties",IFCMATERIALLIST:"IfcMaterialList",IFCMATERIALLAYERSETUSAGE:"IfcMaterialLayerSetUsage",IFCMATERIALLAYERSET:"IfcMaterialLayerSet",IFCMATERIALLAYER:"IfcMaterialLayer",IFCMATERIALCLASSIFICATIONRELATIONSHIP:"IfcMaterialClassificationRelationship",IFCMATERIAL:"IfcMaterial",IFCLOCALTIME:"IfcLocalTime",IFCLIGHTINTENSITYDISTRIBUTION:"IfcLightIntensityDistribution",IFCLIGHTDISTRIBUTIONDATA:"IfcLightDistributionData",IFCLIBRARYREFERENCE:"IfcLibraryReference",IFCLIBRARYINFORMATION:"IfcLibraryInformation",IFCIRREGULARTIMESERIESVALUE:"IfcIrregularTimeSeriesValue",IFCGRIDAXIS:"IfcGridAxis",IFCEXTERNALLYDEFINEDTEXTFONT:"IfcExternallyDefinedTextFont",IFCEXTERNALLYDEFINEDSYMBOL:"IfcExternallyDefinedSymbol",IFCEXTERNALLYDEFINEDSURFACESTYLE:"IfcExternallyDefinedSurfaceStyle",IFCEXTERNALLYDEFINEDHATCHSTYLE:"IfcExternallyDefinedHatchStyle",IFCEXTERNALREFERENCE:"IfcExternalReference",IFCENVIRONMENTALIMPACTVALUE:"IfcEnvironmentalImpactValue",IFCDRAUGHTINGCALLOUTRELATIONSHIP:"IfcDraughtingCalloutRelationship",IFCDOCUMENTINFORMATIONRELATIONSHIP:"IfcDocumentInformationRelationship",IFCDOCUMENTINFORMATION:"IfcDocumentInformation",IFCDOCUMENTELECTRONICFORMAT:"IfcDocumentElectronicFormat",IFCDIMENSIONALEXPONENTS:"IfcDimensionalExponents",IFCDERIVEDUNITELEMENT:"IfcDerivedUnitElement",IFCDERIVEDUNIT:"IfcDerivedUnit",IFCDATEANDTIME:"IfcDateAndTime",IFCCURVESTYLEFONTPATTERN:"IfcCurveStyleFontPattern",IFCCURVESTYLEFONTANDSCALING:"IfcCurveStyleFontAndScaling",IFCCURVESTYLEFONT:"IfcCurveStyleFont",IFCCURRENCYRELATIONSHIP:"IfcCurrencyRelationship",IFCCOSTVALUE:"IfcCostValue",IFCCOORDINATEDUNIVERSALTIMEOFFSET:"IfcCoordinatedUniversalTimeOffset",IFCCONSTRAINTRELATIONSHIP:"IfcConstraintRelationship",IFCCONSTRAINTCLASSIFICATIONRELATIONSHIP:"IfcConstraintClassificationRelationship",IFCCONSTRAINTAGGREGATIONRELATIONSHIP:"IfcConstraintAggregationRelationship",IFCCONSTRAINT:"IfcConstraint",IFCCONNECTIONSURFACEGEOMETRY:"IfcConnectionSurfaceGeometry",IFCCONNECTIONPORTGEOMETRY:"IfcConnectionPortGeometry",IFCCONNECTIONPOINTGEOMETRY:"IfcConnectionPointGeometry",IFCCONNECTIONGEOMETRY:"IfcConnectionGeometry",IFCCOLOURSPECIFICATION:"IfcColourSpecification",IFCCLASSIFICATIONNOTATIONFACET:"IfcClassificationNotationFacet",IFCCLASSIFICATIONNOTATION:"IfcClassificationNotation",IFCCLASSIFICATIONITEMRELATIONSHIP:"IfcClassificationItemRelationship",IFCCLASSIFICATIONITEM:"IfcClassificationItem",IFCCLASSIFICATION:"IfcClassification",IFCCALENDARDATE:"IfcCalendarDate",IFCBOUNDARYNODECONDITIONWARPING:"IfcBoundaryNodeConditionWarping",IFCBOUNDARYNODECONDITION:"IfcBoundaryNodeCondition",IFCBOUNDARYFACECONDITION:"IfcBoundaryFaceCondition",IFCBOUNDARYEDGECONDITION:"IfcBoundaryEdgeCondition",IFCBOUNDARYCONDITION:"IfcBoundaryCondition",IFCAPPROVALRELATIONSHIP:"IfcApprovalRelationship",IFCAPPROVALPROPERTYRELATIONSHIP:"IfcApprovalPropertyRelationship",IFCAPPROVALACTORRELATIONSHIP:"IfcApprovalActorRelationship",IFCAPPROVAL:"IfcApproval",IFCAPPLIEDVALUERELATIONSHIP:"IfcAppliedValueRelationship",IFCAPPLIEDVALUE:"IfcAppliedValue",IFCAPPLICATION:"IfcApplication",IFCADDRESS:"IfcAddress",IFCACTORROLE:"IfcActorRole"};class Oc{constructor(){C(this,"factor",1);C(this,"complement",1)}apply(i){const e=this.getScaleMatrix().multiply(i);i.copy(e)}setUp(i){var n,r,o;this.factor=1;const t=this.getLengthUnits(i);if(!t)return;const e=t==null,s=t.Name===void 0||t.Name===null;e||s||(t.Name.value==="FOOT"&&(this.factor=.3048),((n=t.Prefix)==null?void 0:n.value)==="MILLI"?this.complement=.001:((r=t.Prefix)==null?void 0:r.value)==="CENTI"?this.complement=.01:((o=t.Prefix)==null?void 0:o.value)==="DECI"&&(this.complement=.01))}getLengthUnits(i){try{const e=i.GetLineIDsWithType(0,k.IFCUNITASSIGNMENT).get(0),s=i.GetLine(0,e);for(const n of s.Units){if(!n||n.value===null||n.value===void 0)continue;const r=i.GetLine(0,n.value);if(r.UnitType&&r.UnitType.value==="LENGTHUNIT")return r}return null}catch{return console.log("Could not get units"),null}}getScaleMatrix(){const i=this.factor;return new b.Matrix4().fromArray([i,0,0,0,0,i,0,0,0,0,i,0,0,0,0,1])}}class co{constructor(){C(this,"itemsByFloor",{});C(this,"_units",new Oc)}setUp(i){this._units.setUp(i),this.cleanUp();try{const t=i.GetLineIDsWithType(0,k.IFCRELCONTAINEDINSPATIALSTRUCTURE),e=new Set,s=i.GetLineIDsWithType(0,k.IFCSPACE);for(let l=0;l<s.size();l++)e.add(s.get(l));const n=i.GetLineIDsWithType(0,k.IFCRELAGGREGATES),r=n.size();for(let l=0;l<r;l++){const h=n.get(l),f=i.GetLine(0,h);if(!f||!f.RelatingObject||!f.RelatedObjects)continue;const I=f.RelatingObject.value,u=f.RelatedObjects;for(const d of u){const E=d.value;e.has(E)&&(this.itemsByFloor[E]=I)}}const o={},a=t.size();for(let l=0;l<a;l++){const h=t.get(l),f=i.GetLine(0,h);if(!f||!f.RelatingStructure||!f.RelatedElements)continue;const I=f.RelatingStructure.value,u=f.RelatedElements;if(e.has(I))for(const d of u){o[I]||(o[I]=[]);const E=d.value;o[I].push(E)}else for(const d of u){const E=d.value;this.itemsByFloor[E]=I}}for(const l in o){const h=this.itemsByFloor[l];if(h!==void 0){const f=o[l];for(const I of f)this.itemsByFloor[I]=h}}for(let l=0;l<r;l++){const h=n.get(l),f=i.GetLine(0,h);if(!f||!f.RelatingObject||!f.RelatedObjects)continue;const I=f.RelatingObject.value,u=f.RelatedObjects;for(const d of u){const E=d.value,T=this.itemsByFloor[I];T!==void 0&&(this.itemsByFloor[E]=T)}}}catch{console.log("Could not get floors.")}}cleanUp(){this.itemsByFloor={}}}class zs{constructor(){C(this,"includeProperties",!0);C(this,"optionalCategories",[k.IFCSPACE]);C(this,"wasm",{path:"",absolute:!1,logLevel:k.LogLevel.LOG_LEVEL_OFF});C(this,"excludedCategories",new Set);C(this,"includedCategories",new Set);C(this,"saveLocations",!1);C(this,"webIfc",{COORDINATE_TO_ORIGIN:!0});C(this,"autoSetWasm",!0);C(this,"customLocateFileHandler",null)}}class lo{constructor(){C(this,"defLineMat",new b.LineBasicMaterial({color:16777215}))}read(i){const t=i.GetAllAlignments(0),e=i.GetAllCrossSections2D(0),s=i.GetAllCrossSections3D(0),n={IfcAlignment:t,IfcCrossSection2D:e,IfcCrossSection3D:s};return this.get(n)}get(i){if(i.IfcAlignment){const t=new Map;for(const e of i.IfcAlignment){const s=new jt.Alignment;s.absolute=this.getCurves(e.curve3D,s),s.horizontal=this.getCurves(e.horizontal,s),s.vertical=this.getCurves(e.vertical,s),t.set(t.size,s)}return{alignments:t,coordinationMatrix:new b.Matrix4}}}getCurves(i,t){const e=[];let s=0;for(const n of i){const r={};if(n.data)for(const I of n.data){const[u,d]=I.split(": "),E=parseFloat(d);r[u]=E||d}const{points:o}=n,a=new Float32Array(o.length*3);for(let I=0;I<o.length;I++){const{x:u,y:d,z:E}=o[I];a[I*3]=u,a[I*3+1]=d,a[I*3+2]=E||0}const l=new b.BufferAttribute(a,3),h=new b.EdgesGeometry;h.setAttribute("position",l);const f=new jt.CurveMesh(s,r,t,h,this.defLineMat);e.push(f.curve),s++}return e}}class ho{getNameInfo(i){var f;const t={},{arguments:e}=i.GetHeaderLine(0,k.FILE_NAME)||{};if(!e)return t;const[s,n,r,o,a,l,h]=e;if(s!=null&&s.value&&(t.name=s.value),n!=null&&n.value&&(t.creationDate=new Date(n.value)),r){t.author={};const[I,u]=r;I!=null&&I.value&&(t.author.name=I.value),u!=null&&u.value&&(t.author.email=u.value)}return o&&((f=o[0])!=null&&f.value)&&(t.organization=o[0].value),a!=null&&a.value&&(t.preprocessorVersion=a==null?void 0:a.value),l!=null&&l.value&&(t.originatingSystem=l==null?void 0:l.value),h!=null&&h.value&&(t.authorization=h==null?void 0:h.value),t}getDescriptionInfo(i){var r;const t={},{arguments:e}=i.GetHeaderLine(0,k.FILE_DESCRIPTION)||{};if(!e)return t;const[s,n]=e;if(Array.isArray(s)&&((r=s[0])!=null&&r.value)){const o=s[0].value.match(/\[([^\]]+)\]/);o&&o[1]&&(t.viewDefinition=o[1])}return n!=null&&n.value&&(t.implementationLevel=n.value),t}}class uo{static get(i,t){const e=[k.IFCPROJECT,k.IFCSITE,k.IFCBUILDING,k.IFCBUILDINGSTOREY,k.IFCSPACE,k.IFCROAD,k.IFCFACILITY,k.IFCFACILITYPART,k.IFCBRIDGE],s=i.data;for(const n of e){const r=t.GetLineIDsWithType(0,n),o=r.size();for(let a=0;a<o;a++){const l=r.get(a);s.has(l)||s.set(l,[[],[0,n]])}}}}const Vn=new Set([1123145078,574549367,1675464909,2059837836,3798115385,32440307,3125803723,3207858831,2740243338,2624227202,4240577450,3615266464,3724593414,220341763,477187591,1878645084,1300840506,3303107099,1607154358,1878645084,846575682,1351298697,2417041796,3049322572,3331915920,1416205885,776857604,3285139300,3958052878,2827736869,2732653382,673634403,3448662350,4142052618,2924175390,803316827,2556980723,1809719519,2205249479,807026263,3737207727,1660063152,2347385850,2705031697,3732776249,2485617015,2611217952,1704287377,2937912522,2770003689,1281925730,1484403080,3448662350,4142052618,3800577675,4006246654,3590301190,1383045692,2775532180,2047409740,370225590,3593883385,2665983363,4124623270,812098782,3649129432,987898635,1105321065,3510044353,1635779807,2603310189,3406155212,1310608509,4261334040,2736907675,3649129432,1136057603,1260505505,4182860854,2713105998,2898889636,59481748,3749851601,3486308946,3150382593,1062206242,3264961684,15328376,1485152156,370225590,1981873012,2859738748,45288368,2614616156,2732653382,775493141,2147822146,2601014836,2629017746,1186437898,2367409068,1213902940,3632507154,3900360178,476780140,1472233963,2804161546,3008276851,738692330,374418227,315944413,3905492369,3570813810,2571569899,178912537,2294589976,1437953363,2133299955,572779678,3092502836,388784114,2624227202,1425443689,3057273783,2347385850,1682466193,2519244187,2839578677,3958567839,2513912981,2830218821,427810014]),Os=class Os extends mt{constructor(t){super(t);C(this,"enabled",!0);t.add(Os.uuid,this)}async export(t,e,s=!1,n=!0){const r={},o=new Set(t.GetIfcEntityList(e)),a=new Set([k.IFCPROJECT,k.IFCSITE,k.IFCBUILDING,k.IFCBUILDINGSTOREY,k.IFCSPACE]);for(const l of a)o.add(l);for(const l of o){if(Vn.has(l))continue;const h=a.has(l)&&n,f=t.GetLineIDsWithType(e,l);for(const I of f)try{const u=t.GetLine(0,I,h,s);r[u.expressID]=u}catch{console.log(`Could not get property ${I}, with recursive ${h} and indirect ${s}.`)}}return r}};C(Os,"uuid","b32c4332-cd67-436e-ba7f-196646c7a635");let ds=Os;const Oi=class Oi extends mt{constructor(t){super(t);C(this,"onDisposed",new q);C(this,"onIfcStartedLoading",new q);C(this,"onSetup",new q);C(this,"settings",new zs);C(this,"webIfc",new k.IfcAPI);C(this,"enabled",!0);C(this,"_material",new b.MeshLambertMaterial);C(this,"_spatialTree",new co);C(this,"_metaData",new ho);C(this,"_fragmentInstances",new Map);C(this,"_civil",new lo);C(this,"_visitedFragments",new Map);C(this,"_materialT",new b.MeshLambertMaterial({transparent:!0,opacity:.5}));this.components.add(Oi.uuid,this),this.settings.excludedCategories.add(k.IFCOPENINGELEMENT)}dispose(){this.webIfc=null,this.onDisposed.trigger(Oi.uuid),this.onDisposed.reset()}async setup(t){this.settings={...this.settings,...t},this.settings.autoSetWasm&&await this.autoSetWasm(),this.onSetup.trigger()}async load(t,e=!0,s=""){const n=performance.now();this.onIfcStartedLoading.trigger(),await this.readIfcFile(t);const r=await this.getAllGeometries();r.name=s;const a=await this.components.get(ds).export(this.webIfc,0);r.setLocalProperties(a);const l=this.components.get(pt);l.groups.set(r.uuid,r);for(const h of r.items)l.list.set(h.id,h),h.mesh.uuid=h.id,h.group=r;l.onFragmentsLoaded.trigger(r),e&&l.coordinate([r]);for(const[h]of r.data){const f=a[h];if(!f||!f.GlobalId)continue;const I=f.GlobalId.value||f.GlobalId;r.globalToExpressIDs.set(I,h)}return uo.get(r,this.webIfc),this.cleanUp(),console.log(`Streaming the IFC took ${performance.now()-n} ms!`),r}async readIfcFile(t){const{path:e,absolute:s,logLevel:n}=this.settings.wasm;return this.webIfc.SetWasmPath(e,s),await this.webIfc.Init(this.settings.customLocateFileHandler||void 0),n&&this.webIfc.SetLogLevel(n),this.webIfc.OpenModel(t,this.settings.webIfc)}cleanUp(){try{this.webIfc.Dispose()}catch{console.log("Web-ifc wasn't disposed.")}this.webIfc=null,this.webIfc=new k.IfcAPI,this._visitedFragments.clear(),this._fragmentInstances.clear()}async getAllGeometries(){this._spatialTree.setUp(this.webIfc);const t=this.webIfc.GetIfcEntityList(0),e=new jt.FragmentsGroup;e.ifcMetadata={name:"",description:"",...this._metaData.getNameInfo(this.webIfc),...this._metaData.getDescriptionInfo(this.webIfc),schema:this.webIfc.GetModelSchema(0)||"IFC2X3",maxExpressID:this.webIfc.GetMaxExpressID(0)};const s=[];for(const r of t){if(!this.webIfc.IsIfcElement(r)&&r!==k.IFCSPACE)continue;const o=this.settings.includedCategories;if(o.size>0&&!o.has(r))continue;if(this.settings.excludedCategories.has(r))continue;const a=this.webIfc.GetLineIDsWithType(0,r),l=a.size();for(let h=0;h<l;h++){const f=a.get(h);s.push(f);const I=this._spatialTree.itemsByFloor[f]||0;e.data.set(f,[[],[I,r]])}}this._spatialTree.cleanUp(),this.webIfc.StreamMeshes(0,s,r=>{this.getMesh(r,e)});for(const r of this._visitedFragments){const{index:o,fragment:a}=r[1];e.keyFragments.set(o,a.id)}for(const r of e.items){const o=this._fragmentInstances.get(r.id);if(!o)throw new Error("Fragment not found!");const a=[];for(const[l,h]of o)a.push(h);r.add(a)}const n=this.webIfc.GetCoordinationMatrix(0);return e.coordinationMatrix.fromArray(n),e.civilData=this._civil.read(this.webIfc),e}getMesh(t,e){const s=t.geometries.size(),n=t.expressID;for(let r=0;r<s;r++){const o=t.geometries.get(r),{x:a,y:l,z:h,w:f}=o.color,I=f!==1,{geometryExpressID:u}=o,d=`${u}-${I}`;if(!this._visitedFragments.has(d)){const S=this.getGeometry(this.webIfc,u),O=I?this._materialT:this._material,y=new jt.Fragment(S,O,1);e.add(y.mesh),e.items.push(y);const w=this._visitedFragments.size;this._visitedFragments.set(d,{index:w,fragment:y})}const E=new b.Color().setRGB(a,l,h,"srgb"),T=new b.Matrix4;T.fromArray(o.flatTransformation);const p=this._visitedFragments.get(d);if(p===void 0)throw new Error("Error getting geometry data for streaming!");const m=e.data.get(n);if(!m)throw new Error("Data not found!");m[0].push(p.index);const{fragment:F}=p;this._fragmentInstances.has(F.id)||this._fragmentInstances.set(F.id,new Map);const R=this._fragmentInstances.get(F.id);if(!R)throw new Error("Instances not found!");if(R.has(n)){const S=R.get(n);if(!S)throw new Error("Instance not found!");S.transforms.push(T),S.colors&&S.colors.push(E)}else R.set(n,{id:n,transforms:[T],colors:[E]})}}getGeometry(t,e){const s=t.GetGeometry(0,e),n=t.GetIndexArray(s.GetIndexData(),s.GetIndexDataSize()),r=t.GetVertexArray(s.GetVertexData(),s.GetVertexDataSize()),o=new Float32Array(r.length/2),a=new Float32Array(r.length/2);for(let I=0;I<r.length;I+=6)o[I/2]=r[I],o[I/2+1]=r[I+1],o[I/2+2]=r[I+2],a[I/2]=r[I+3],a[I/2+1]=r[I+4],a[I/2+2]=r[I+5];const l=new b.BufferGeometry,h=new b.BufferAttribute(o,3),f=new b.BufferAttribute(a,3);return l.setAttribute("position",h),l.setAttribute("normal",f),l.setIndex(Array.from(n)),s.delete(),l}async autoSetWasm(){const t=await fetch(`https://unpkg.com/@thatopen/components@${Li.release}/package.json`);if(!t.ok){console.warn("Couldn't get openbim-components package.json. Set wasm settings manually.");return}const e=await t.json();if(!("web-ifc"in e.peerDependencies))console.warn("Couldn't get web-ifc from peer dependencies in openbim-components. Set wasm settings manually.");else{const s=e.peerDependencies["web-ifc"];this.settings.wasm.path=`https://unpkg.com/web-ifc@${s}/`,this.settings.wasm.absolute=!0}}};C(Oi,"uuid","a659add7-1418-4771-a0d6-7d4d438e4624");let Es=Oi;const fo={IfcRelAssignsToControl:{related:5,relating:7},IfcRelAssignsToGroup:{related:5,relating:7},IfcRelAssignsToProduct:{related:5,relating:7},IfcRelAssociatesClassification:{related:5,relating:6},IfcRelAssociatesMaterial:{related:5,relating:6},IfcRelAssociatesDocument:{related:5,relating:6},IfcRelContainedInSpatialStructure:{related:5,relating:6},IfcRelFlowControlElements:{related:5,relating:6},IfcRelConnectsElements:{related:7,relating:6},IfcRelDeclares:{related:6,relating:5},IfcRelAggregates:{related:6,relating:5},IfcRelNests:{related:6,relating:5},IfcRelDefinesByProperties:{related:5,relating:6},IfcRelDefinesByType:{related:5,relating:6},IfcRelDefinesByTemplate:{related:5,relating:6}},Io={[k.IFCRELASSIGNSTOCONTROL]:"IfcRelAssignsToControl",[k.IFCRELASSIGNSTOGROUP]:"IfcRelAssignsToGroup",[k.IFCRELASSIGNSTOPRODUCT]:"IfcRelAssignsToProduct",[k.IFCRELASSOCIATESCLASSIFICATION]:"IfcRelAssociatesClassification",[k.IFCRELASSOCIATESMATERIAL]:"IfcRelAssociatesMaterial",[k.IFCRELASSOCIATESDOCUMENT]:"IfcRelAssociatesDocument",[k.IFCRELCONTAINEDINSPATIALSTRUCTURE]:"IfcRelContainedInSpatialStructure",[k.IFCRELCONNECTSELEMENTS]:"IfcRelConnectsElements",[k.IFCRELFLOWCONTROLELEMENTS]:"IfcRelFlowControlElements",[k.IFCRELDECLARES]:"IfcRelDeclares",[k.IFCRELAGGREGATES]:"IfcRelAggregates",[k.IFCRELNESTS]:"IfcRelNests",[k.IFCRELDEFINESBYPROPERTIES]:"IfcRelDefinesByProperties",[k.IFCRELDEFINESBYTYPE]:"IfcRelDefinesByType",[k.IFCRELDEFINESBYTEMPLATE]:"IfcRelDefinesByTemplate"},Ae=class Ae extends mt{constructor(t){super(t);C(this,"onDisposed",new q);C(this,"onRequestFile",new q);C(this,"ifcToExport",null);C(this,"onElementToPset",new q);C(this,"onPropToPset",new q);C(this,"onPsetRemoved",new q);C(this,"onDataChanged",new q);C(this,"wasm",{path:"/",absolute:!1});C(this,"enabled",!0);C(this,"attributeListeners",{});C(this,"selectedModel");C(this,"changeMap",{});this.components.add(Ae.uuid,this)}dispose(){this.selectedModel=void 0,this.attributeListeners={},this.changeMap={},this.onElementToPset.reset(),this.onPropToPset.reset(),this.onPsetRemoved.reset(),this.onDataChanged.reset(),this.onDisposed.trigger(Ae.uuid),this.onDisposed.reset()}static getIFCSchema(t){const e=t.ifcMetadata.schema;if(!e)throw new Error("IFC Schema not found");return e.startsWith("IFC2X3")?"IFC2X3":e.startsWith("IFC4")&&e.replace("IFC4","")===""?"IFC4":e.startsWith("IFC4X3")?"IFC4X3":e}async setData(t,...e){for(const s of e){const{expressID:n}=s;(!n||n===-1)&&(s.expressID=this.getNewExpressID(t)),await t.setProperties(s.expressID,s),this.registerChange(t,s.expressID)}}async newPset(t,e,s){const n=Ae.getIFCSchema(t),{ownerHistoryHandle:r}=await this.getOwnerHistory(t),o=this.newGUID(t),a=new k[n].IfcLabel(e),l=s?new k[n].IfcText(s):null,h=new k[n].IfcPropertySet(o,r,a,l,[]);h.expressID=this.getNewExpressID(t);const f=this.newGUID(t),I=new k[n].IfcRelDefinesByProperties(f,r,null,null,[],new k.Handle(h.expressID));return I.expressID=this.getNewExpressID(t),await this.setData(t,h,I),{pset:h,rel:I}}async removePset(t,...e){for(const s of e){const n=await t.getProperties(s);if((n==null?void 0:n.type)!==k.IFCPROPERTYSET)continue;const r=await be.getPsetRel(t,s);if(r&&(await t.setProperties(r,null),this.registerChange(t,r)),n){for(const o of n.HasProperties)await t.setProperties(o.value,null);await t.setProperties(s,null),this.onPsetRemoved.trigger({model:t,psetID:s}),this.registerChange(t,s)}}}newSingleStringProperty(t,e,s,n){return this.newSingleProperty(t,e,s,n)}newSingleNumericProperty(t,e,s,n){return this.newSingleProperty(t,e,s,n)}newSingleBooleanProperty(t,e,s,n){return this.newSingleProperty(t,e,s,n)}async removePsetProp(t,e,s){const n=await t.getProperties(e),r=await t.getProperties(s);!n||!r||n.type===k.IFCPROPERTYSET&&r&&(n.HasProperties=n.HasProperties.filter(o=>o.value!==s),await t.setProperties(s,null),this.registerChange(t,e,s))}addElementToPset(t,e,...s){this.components.get(Bt).addEntitiesRelation(t,e,{type:k.IFCRELDEFINESBYPROPERTIES,inv:"IsDefinedBy"},...s)}async addPropToPset(t,e,...s){const n=await t.getProperties(e);if(n){for(const r of s){if(n.HasProperties.includes(r))continue;const o=new k.Handle(r);n.HasProperties.push(o),this.onPropToPset.trigger({model:t,psetID:e,propID:r})}this.registerChange(t,e)}}async createIfcRel(t,e,s,n){const r=Io[e];if(!r)throw new Error(`IfcPropertiesManager: ${r} is unsoported.`);const o=t.ifcMetadata.schema,a=fo[r],l=k[o][r];if(!(a&&l))throw new Error(`IfcPropertiesManager: ${r} is unsoported.`);const h=[new k[o].IfcGloballyUniqueId(Kt.create())],{related:f,relating:I}=a,d=[...new Set(n)].map(p=>new k.Handle(p)),E=(p,m)=>{for(let F=p;F<m-1;F++)h.push(null)};f<I?(E(1,f),h.push(d),E(f,I),h.push(new k.Handle(s))):(E(1,I),E(I,f),h.push(new k.Handle(s)),h.push(d));const T=new l(...h);return await this.setData(t,T),T}async saveToIfc(t,e){const s=this.components.get(Es),n=s.webIfc,r=await s.readIfcFile(e);await this.components.get(Bt).applyRelationChanges();const a=this.changeMap[t.uuid]??[];for(const h of a){const f=await t.getProperties(h);f?n.WriteLine(r,f):n.DeleteLine(r,h)}const l=n.SaveModel(r);return s.webIfc.CloseModel(r),s.cleanUp(),l}async getEntityRef(t,e){const s=await t.getAllPropertiesOfType(e);if(!s)return null;const n=[];for(const r in s){const o=new k.Handle(Number(r));n.push(o)}return n}async setAttributeListener(t,e,s){this.attributeListeners[t.uuid]||(this.attributeListeners[t.uuid]={});const n=this.attributeListeners[t.uuid][e]?this.attributeListeners[t.uuid][e][s]:null;if(n)return n;const r=await t.getProperties(e);if(!r)throw new Error(`Entity with expressID ${e} doesn't exists.`);const o=r[s];if(Array.isArray(o)||!o)throw new Error(`Attribute ${s} is array or null, and it can't have a listener.`);const a=o.value;if(a===void 0||a==null)throw new Error(`Attribute ${s} has a badly defined handle.`);const l=new q;return Object.defineProperty(r[s],"value",{get(){return this._value},async set(h){this._value=h,l.trigger(h)}}),r[s].value=a,this.attributeListeners[t.uuid][e]||(this.attributeListeners[t.uuid][e]={}),this.attributeListeners[t.uuid][e][s]=l,l}getNewExpressID(t){return t.ifcMetadata.maxExpressID++,t.ifcMetadata.maxExpressID}newGUID(t){const e=Ae.getIFCSchema(t);return new k[e].IfcGloballyUniqueId(Kt.create())}async getOwnerHistory(t){const e=await t.getAllPropertiesOfType(k.IFCOWNERHISTORY);if(!e)throw new Error("No OwnerHistory was found.");const s=Object.keys(e).map(o=>parseInt(o,10)),n=e[s[0]],r=new k.Handle(n.expressID);return{ownerHistory:n,ownerHistoryHandle:r}}registerChange(t,...e){this.changeMap[t.uuid]||(this.changeMap[t.uuid]=new Set);for(const s of e)this.changeMap[t.uuid].add(s),this.onDataChanged.trigger({model:t,expressID:s})}async newSingleProperty(t,e,s,n){const r=Ae.getIFCSchema(t),o=new k[r].IfcIdentifier(s),a=new k[r][e](n),l=new k[r].IfcPropertySingleValue(o,null,a,null);return l.expressID=this.getNewExpressID(t),await this.setData(t,l),l}};C(Ae,"uuid","58c2d9f0-183c-48d6-a402-dfcf5b9a34df");let ps=Ae;const Ni=class Ni extends mt{constructor(t){super(t);C(this,"onDisposed",new q);C(this,"onRelationsIndexed",new q);C(this,"relationMaps",{});C(this,"enabled",!0);C(this,"_relToAttributesMap",Sn);C(this,"_inverseAttributes",["IsDecomposedBy","Decomposes","AssociatedTo","HasAssociations","ClassificationForObjects","IsGroupedBy","HasAssignments","IsDefinedBy","DefinesOcurrence","IsTypedBy","Types","Defines","ContainedInStructure","ContainsElements","HasControlElements","AssignedToFlowElement","ConnectedTo","ConnectedFrom","ReferencedBy","Declares","HasContext","Controls","IsNestedBy","Nests","DocumentRefForObjects"]);C(this,"_ifcRels",[k.IFCRELAGGREGATES,k.IFCRELASSOCIATESMATERIAL,k.IFCRELASSOCIATESCLASSIFICATION,k.IFCRELASSIGNSTOGROUP,k.IFCRELDEFINESBYPROPERTIES,k.IFCRELDEFINESBYTYPE,k.IFCRELDEFINESBYTEMPLATE,k.IFCRELCONTAINEDINSPATIALSTRUCTURE,k.IFCRELFLOWCONTROLELEMENTS,k.IFCRELCONNECTSELEMENTS,k.IFCRELASSIGNSTOPRODUCT,k.IFCRELDECLARES,k.IFCRELASSIGNSTOCONTROL,k.IFCRELNESTS,k.IFCRELASSOCIATESDOCUMENT]);C(this,"onFragmentsDisposed",t=>{delete this.relationMaps[t.groupID]});C(this,"_changeMap",{});C(this,"onEntitiesRelated",new q);this.components.add(Ni.uuid,this),t.get(pt).onFragmentsDisposed.add(this.onFragmentsDisposed)}indexRelations(t,e,s,n){const r=Object.keys(e).find(f=>f.startsWith("Relating")),o=Object.keys(e).find(f=>f.startsWith("Related"));if(!(r&&o))return;const a=e[r].value,l=e[o].map(f=>f.value),h=this.getAttributeIndex(n);if(h!==null){let f=t.get(a);f||(f=new Map,t.set(a,f));let I=f.get(h);I||(I=[],f.set(h,I));for(const u of l)I.push(u)}for(const f of l){const I=this.getAttributeIndex(s);if(I===null)continue;let u=t.get(f);u||(u=new Map,t.set(f,u));let d=u.get(I);d||(d=[],u.set(I,d)),d.push(a)}}getAttributeIndex(t){const e=this._inverseAttributes.indexOf(t);return e===-1?null:e}setRelationMap(t,e){this.relationMaps[t.uuid]=e,this.onRelationsIndexed.trigger({modelID:t.uuid,relationsMap:e})}async process(t){if(!t.hasProperties)throw new Error("FragmentsGroup properties not found");let e=this.relationMaps[t.uuid];if(e)return e;e=new Map;for(const s of this._ifcRels){const n=await t.getAllPropertiesOfType(s);if(!n)continue;const r=this._relToAttributesMap.get(s);if(!r)continue;const{forRelated:o,forRelating:a}=r;for(const l in n){const h=n[l];this.indexRelations(e,h,o,a)}}return this.setRelationMap(t,e),e}async processFromWebIfc(t,e){const s=new Map;for(const n of this._ifcRels){const r=this._relToAttributesMap.get(n);if(!r)continue;const{forRelated:o,forRelating:a}=r,l=t.GetLineIDsWithType(e,n);for(let h=0;h<l.size();h++){const f=await t.properties.getItemProperties(e,l.get(h));this.indexRelations(s,f,o,a)}}return this.onRelationsIndexed.trigger({modelID:e.toString(),relationsMap:s}),s}getEntityRelations(t,e,s){const n=t instanceof Dn.FragmentsGroup?t.uuid:t,r=this.relationMaps[n];if(!r)throw new Error(`IfcRelationsIndexer: model ${n} has no relations indexed.`);const o=r.get(e),a=this.getAttributeIndex(s);if(o===void 0||a===null)return null;const l=o.get(a);return l||null}serializeRelations(t){const e={};for(const[s,n]of t.entries()){e[s]||(e[s]={});for(const[r,o]of n.entries())e[s][r]=o}return JSON.stringify(e)}serializeModelRelations(t){const e=this.relationMaps[t.uuid];return e?this.serializeRelations(e):null}serializeAllRelations(){const t={};for(const e in this.relationMaps){const s=this.relationMaps[e],n={};for(const[r,o]of s.entries()){n[r]||(n[r]={});for(const[a,l]of o.entries())n[r][a]=l}t[e]=n}return JSON.stringify(t)}getRelationsMapFromJSON(t){const e=JSON.parse(t),s=new Map;for(const n in e){const r=e[n],o=new Map;for(const a in r)o.set(Number(a),r[a]);s.set(Number(n),o)}return s}dispose(){this.relationMaps={},this.components.get(pt).onFragmentsDisposed.remove(this.onFragmentsDisposed),this.onDisposed.trigger(Ni.uuid),this.onDisposed.reset()}getEntitiesWithRelation(t,e,s){const n=this.relationMaps[t.uuid];if(!n)throw new Error("IfcRelationsIndexer: the model relations are not indexed!");const r=new Set;for(const[o,a]of n){const l=this.getAttributeIndex(e);if(l===null)throw new Error("IfcRelationsIndexer: invalid inverse attribute name");const h=a.get(l);h&&h.includes(s)&&r.add(o)}return r}addEntityRelations(t,e,s,...n){const r=this.getEntityRelations(t,e,s);if(r)r.push(...n);else{const o=this.getAttributeIndex(s);if(!o)throw new Error(`IfcRelationsIndexer: ${s} is not a valid relation name.`);const a=this.relationMaps[t.uuid].get(e);a==null||a.set(o,n)}}async applyRelationChanges(){const t=this.components.get(pt),e=this.components.get(ps);for(const s in this._changeMap){const n=t.groups.get(s);if(!n)continue;const r=this._changeMap[s];for(const[o,a]of r)for(const[l,h]of a){const{related:f,relID:I}=h;if(I){const u=await n.getProperties(I);if(!u)continue;const d=Object.keys(u),E=d.find(p=>p.startsWith("Related")),T=d.find(p=>p.startsWith("Relating"));if(!(E&&T))continue;u[E]=[...f].map(p=>new k.Handle(p)),u[T]=new k.Handle(l),await e.setData(n,u)}else{const u=await e.createIfcRel(n,o,l,[...f]);if(!u)continue;h.relID=u.expressID}}}}addEntitiesRelation(t,e,s,...n){const{type:r,inv:o}=s,a=this.relationMaps[t.uuid];if(!a||!this._ifcRels.includes(r))return;const l=Sn.get(r);if(!l)return;const{forRelated:h,forRelating:f}=l;if(!(h===o||f===o))return;let I=this._changeMap[t.uuid];I||(I=new Qt,this._changeMap[t.uuid]=I);const u=f===o?[e]:n,d=h===o?[e]:n;let E=I.get(r);E||(E=new Qt,E.onItemSet.add(()=>this.onEntitiesRelated.trigger({invAttribute:o,relType:r,relatingIDs:u,relatedIDs:d})),E.onItemUpdated.add(()=>this.onEntitiesRelated.trigger({invAttribute:o,relType:r,relatingIDs:u,relatedIDs:d})),I.set(r,E));for(const T of u){let p=E.get(T);p||(p={related:new Ie},E.set(T,p)),p.related.add(...d)}for(const T of u){let p=a.get(T);p||(p=new Map,a.set(T,p));const m=this.getAttributeIndex(f);if(m!==null){let F=p.get(m);F||(F=[],p.set(m,F)),F.push(...d)}}for(const T of d){let p=a.get(T);p||(p=new Map,a.set(T,p));const m=this.getAttributeIndex(h);if(m===null)continue;let F=p.get(m);F||(F=[],p.set(m,F)),F.push(...u)}}getEntityChildren(t,e,s=new Set){if(s.add(e),this.relationMaps[t.uuid]===void 0)throw new Error("The provided model has no indices. You have to generate them first.");const r=this.getEntityRelations(t,e,"IsDecomposedBy");if(r)for(const a of r)this.getEntityChildren(t,a,s);const o=this.getEntityRelations(t,e,"ContainsElements");if(o)for(const a of o)this.getEntityChildren(t,a,s);return s}};C(Ni,"uuid","23a889ab-83b3-44a4-8bee-ead83438370b");let Bt=Ni;const Ns=class Ns extends mt{constructor(t){super(t);C(this,"onDisposed",new q);C(this,"onFragmentsLoaded",new q);C(this,"onFragmentsDisposed",new q);C(this,"list",new Qt);C(this,"groups",new Qt);C(this,"baseCoordinationModel","");C(this,"baseCoordinationMatrix",new b.Matrix4);C(this,"enabled",!0);C(this,"_loader",new Dn.Serializer);this.components.add(Ns.uuid,this)}get meshes(){const t=[];for(const[e,s]of this.list)t.push(s.mesh);return t}dispose(){for(const[t,e]of this.groups)e.dispose(!0);this.baseCoordinationModel="",this.groups.clear(),this.list.clear(),this.onFragmentsLoaded.reset(),this.onFragmentsDisposed.reset(),this.onDisposed.trigger(),this.onDisposed.reset()}disposeGroup(t){const{uuid:e}=t,s=[];for(const n of t.items)s.push(n.id),this.list.delete(n.id);t.dispose(!0),this.groups.delete(t.uuid),this.groups.size===0&&(this.baseCoordinationModel="",this.baseCoordinationMatrix=new b.Matrix4),this.onFragmentsDisposed.trigger({groupID:e,fragmentIDs:s})}load(t,e){const n={...{coordinate:!0},...e},{coordinate:r,name:o,properties:a,relationsMap:l}=n,h=this._loader.import(t);e&&(h.isStreamed=e.isStreamed||!1),o&&(h.name=o);for(const f of h.items)f.group=h,this.list.set(f.id,f);return r&&this.coordinate([h]),this.groups.set(h.uuid,h),a&&h.setLocalProperties(a),l&&this.components.get(Bt).setRelationMap(h,l),this.onFragmentsLoaded.trigger(h),h}export(t){return this._loader.export(t)}getModelIdMap(t){const e={};for(const s in t){const n=this.list.get(s);if(!(n&&n.group))continue;const r=n.group;r.uuid in e||(e[r.uuid]=new Set);const o=t[s];for(const a of o)e[r.uuid].add(a)}return e}modelIdToFragmentIdMap(t){let e={};for(const s in t){const n=this.groups.get(s);if(!n)continue;const r=t[s],o=n.getFragmentMap(r);e={...e,...o}}return e}guidToFragmentIdMap(t){const e={};for(const[n,r]of this.groups){n in e||(e[n]=new Set);for(const o of t){const a=r.globalToExpressIDs.get(o);a&&e[n].add(a)}}return this.modelIdToFragmentIdMap(e)}fragmentIdMapToGuids(t){const e=[],s=this.getModelIdMap(t);for(const n in s){const r=this.groups.get(n);if(!r)continue;const o=s[n];for(const a of o)for(const[l,h]of r.globalToExpressIDs.entries())if(h===a){e.push(l);break}}return e}coordinate(t=Array.from(this.groups.values())){if(this.baseCoordinationModel.length===0){const s=t.pop();if(!s)return;this.baseCoordinationModel=s.uuid,this.baseCoordinationMatrix=s.coordinationMatrix.clone()}if(t.length)for(const s of t)s.coordinationMatrix.equals(this.baseCoordinationMatrix)||(s.position.set(0,0,0),s.rotation.set(0,0,0),s.scale.set(1,1,1),s.updateMatrix(),this.applyBaseCoordinateSystem(s,s.coordinationMatrix))}applyBaseCoordinateSystem(t,e){e&&t.applyMatrix4(e.clone().invert()),t.applyMatrix4(this.baseCoordinationMatrix)}clone(t,e){const s=t.cloneGroup(e);this.groups.set(s.uuid,s);for(const n of s.items)this.list.set(n.id,n);return s}};C(Ns,"uuid","fef46874-46a3-461b-8c44-2922ab77c806");let pt=Ns;var os=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Nc(c){return c&&c.__esModule&&Object.prototype.hasOwnProperty.call(c,"default")?c.default:c}function as(c){throw new Error('Could not dynamically require "'+c+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var Eo={exports:{}};/*!
128
+ `,extensions:{derivatives:!0}});this.three=new b.Mesh(o,a),this.three.frustumCulled=!1,t.scene.three.add(this.three),this.setupEvents(!0)}get visible(){return this.three.visible}set visible(i){i?this.world.scene.three.add(this.three):this.three.removeFromParent()}get material(){return this.three.material}get fade(){return this._fade===3}set fade(i){this._fade=i?3:0,this.material.uniforms.uFade.value=this._fade}setup(i){const t={...this._defaultConfig,...i};this.config.visible=!0,this.config.color=t.color,this.config.primarySize=t.primarySize,this.config.secondarySize=t.secondarySize,this.config.distance=t.distance,this.isSetup=!0,this.onSetup.trigger()}dispose(){this.setupEvents(!1),this.components.get(Ne).list.delete(this.config.uuid),this.components.get(Ce).destroy(this.three),this.onDisposed.trigger(),this.onDisposed.reset(),this.world=null,this.components=null}setupEvents(i){if(this.world.isDisposing||!(this.world.camera instanceof Je))return;const t=this.world.camera.controls;i?t.addEventListener("update",this.updateZoom):t.removeEventListener("update",this.updateZoom)}}const Ss=class Ss extends mt{constructor(t){super(t);C(this,"list",new Map);C(this,"onDisposed",new q);C(this,"enabled",!0);t.add(Ss.uuid,this)}create(t){if(this.list.has(t.uuid))throw new Error("This world already has a grid!");const e=new to(this.components,t);return this.list.set(t.uuid,e),t.onDisposed.add(()=>{this.delete(t)}),e}delete(t){const e=this.list.get(t.uuid);e&&e.dispose(),this.list.delete(t.uuid)}dispose(){for(const[t,e]of this.list)e.dispose();this.list.clear(),this.onDisposed.trigger(),this.onDisposed.reset()}};C(Ss,"uuid","d1e814d5-b81c-4452-87a2-f039375e0489");let Fn=Ss;const Me=new L.Raycaster,Dt=new L.Vector3,me=new L.Vector3,St=new L.Quaternion,gr={X:new L.Vector3(1,0,0),Y:new L.Vector3(0,1,0),Z:new L.Vector3(0,0,1)},un={type:"change"},Ar={type:"mouseDown"},Fr={type:"mouseUp",mode:null},Sr={type:"objectChange"};class Ec extends L.Object3D{constructor(i,t){super(),t===void 0&&(console.warn('THREE.TransformControls: The second parameter "domElement" is now mandatory.'),t=document),this.isTransformControls=!0,this.visible=!1,this.domElement=t,this.domElement.style.touchAction="none";const e=new gc;this._gizmo=e,this.add(e);const s=new Ac;this._plane=s,this.add(s);const n=this;function r(m,F){let R=F;Object.defineProperty(n,m,{get:function(){return R!==void 0?R:F},set:function(S){R!==S&&(R=S,s[m]=S,e[m]=S,n.dispatchEvent({type:m+"-changed",value:S}),n.dispatchEvent(un))}}),n[m]=F,s[m]=F,e[m]=F}r("camera",i),r("object",void 0),r("enabled",!0),r("axis",null),r("mode","translate"),r("translationSnap",null),r("rotationSnap",null),r("scaleSnap",null),r("space","world"),r("size",1),r("dragging",!1),r("showX",!0),r("showY",!0),r("showZ",!0);const o=new L.Vector3,a=new L.Vector3,l=new L.Quaternion,h=new L.Quaternion,f=new L.Vector3,I=new L.Quaternion,u=new L.Vector3,d=new L.Vector3,E=new L.Vector3,T=0,p=new L.Vector3;r("worldPosition",o),r("worldPositionStart",a),r("worldQuaternion",l),r("worldQuaternionStart",h),r("cameraPosition",f),r("cameraQuaternion",I),r("pointStart",u),r("pointEnd",d),r("rotationAxis",E),r("rotationAngle",T),r("eye",p),this._offset=new L.Vector3,this._startNorm=new L.Vector3,this._endNorm=new L.Vector3,this._cameraScale=new L.Vector3,this._parentPosition=new L.Vector3,this._parentQuaternion=new L.Quaternion,this._parentQuaternionInv=new L.Quaternion,this._parentScale=new L.Vector3,this._worldScaleStart=new L.Vector3,this._worldQuaternionInv=new L.Quaternion,this._worldScale=new L.Vector3,this._positionStart=new L.Vector3,this._quaternionStart=new L.Quaternion,this._scaleStart=new L.Vector3,this._getPointer=pc.bind(this),this._onPointerDown=Tc.bind(this),this._onPointerHover=Cc.bind(this),this._onPointerMove=mc.bind(this),this._onPointerUp=Rc.bind(this),this.domElement.addEventListener("pointerdown",this._onPointerDown),this.domElement.addEventListener("pointermove",this._onPointerHover),this.domElement.addEventListener("pointerup",this._onPointerUp)}updateMatrixWorld(){this.object!==void 0&&(this.object.updateMatrixWorld(),this.object.parent===null?console.error("TransformControls: The attached 3D object must be a part of the scene graph."):this.object.parent.matrixWorld.decompose(this._parentPosition,this._parentQuaternion,this._parentScale),this.object.matrixWorld.decompose(this.worldPosition,this.worldQuaternion,this._worldScale),this._parentQuaternionInv.copy(this._parentQuaternion).invert(),this._worldQuaternionInv.copy(this.worldQuaternion).invert()),this.camera.updateMatrixWorld(),this.camera.matrixWorld.decompose(this.cameraPosition,this.cameraQuaternion,this._cameraScale),this.camera.isOrthographicCamera?this.camera.getWorldDirection(this.eye).negate():this.eye.copy(this.cameraPosition).sub(this.worldPosition).normalize(),super.updateMatrixWorld(this)}pointerHover(i){if(this.object===void 0||this.dragging===!0)return;Me.setFromCamera(i,this.camera);const t=fn(this._gizmo.picker[this.mode],Me);t?this.axis=t.object.name:this.axis=null}pointerDown(i){if(!(this.object===void 0||this.dragging===!0||i.button!==0)&&this.axis!==null){Me.setFromCamera(i,this.camera);const t=fn(this._plane,Me,!0);t&&(this.object.updateMatrixWorld(),this.object.parent.updateMatrixWorld(),this._positionStart.copy(this.object.position),this._quaternionStart.copy(this.object.quaternion),this._scaleStart.copy(this.object.scale),this.object.matrixWorld.decompose(this.worldPositionStart,this.worldQuaternionStart,this._worldScaleStart),this.pointStart.copy(t.point).sub(this.worldPositionStart)),this.dragging=!0,Ar.mode=this.mode,this.dispatchEvent(Ar)}}pointerMove(i){const t=this.axis,e=this.mode,s=this.object;let n=this.space;if(e==="scale"?n="local":(t==="E"||t==="XYZE"||t==="XYZ")&&(n="world"),s===void 0||t===null||this.dragging===!1||i.button!==-1)return;Me.setFromCamera(i,this.camera);const r=fn(this._plane,Me,!0);if(r){if(this.pointEnd.copy(r.point).sub(this.worldPositionStart),e==="translate")this._offset.copy(this.pointEnd).sub(this.pointStart),n==="local"&&t!=="XYZ"&&this._offset.applyQuaternion(this._worldQuaternionInv),t.indexOf("X")===-1&&(this._offset.x=0),t.indexOf("Y")===-1&&(this._offset.y=0),t.indexOf("Z")===-1&&(this._offset.z=0),n==="local"&&t!=="XYZ"?this._offset.applyQuaternion(this._quaternionStart).divide(this._parentScale):this._offset.applyQuaternion(this._parentQuaternionInv).divide(this._parentScale),s.position.copy(this._offset).add(this._positionStart),this.translationSnap&&(n==="local"&&(s.position.applyQuaternion(St.copy(this._quaternionStart).invert()),t.search("X")!==-1&&(s.position.x=Math.round(s.position.x/this.translationSnap)*this.translationSnap),t.search("Y")!==-1&&(s.position.y=Math.round(s.position.y/this.translationSnap)*this.translationSnap),t.search("Z")!==-1&&(s.position.z=Math.round(s.position.z/this.translationSnap)*this.translationSnap),s.position.applyQuaternion(this._quaternionStart)),n==="world"&&(s.parent&&s.position.add(Dt.setFromMatrixPosition(s.parent.matrixWorld)),t.search("X")!==-1&&(s.position.x=Math.round(s.position.x/this.translationSnap)*this.translationSnap),t.search("Y")!==-1&&(s.position.y=Math.round(s.position.y/this.translationSnap)*this.translationSnap),t.search("Z")!==-1&&(s.position.z=Math.round(s.position.z/this.translationSnap)*this.translationSnap),s.parent&&s.position.sub(Dt.setFromMatrixPosition(s.parent.matrixWorld))));else if(e==="scale"){if(t.search("XYZ")!==-1){let o=this.pointEnd.length()/this.pointStart.length();this.pointEnd.dot(this.pointStart)<0&&(o*=-1),me.set(o,o,o)}else Dt.copy(this.pointStart),me.copy(this.pointEnd),Dt.applyQuaternion(this._worldQuaternionInv),me.applyQuaternion(this._worldQuaternionInv),me.divide(Dt),t.search("X")===-1&&(me.x=1),t.search("Y")===-1&&(me.y=1),t.search("Z")===-1&&(me.z=1);s.scale.copy(this._scaleStart).multiply(me),this.scaleSnap&&(t.search("X")!==-1&&(s.scale.x=Math.round(s.scale.x/this.scaleSnap)*this.scaleSnap||this.scaleSnap),t.search("Y")!==-1&&(s.scale.y=Math.round(s.scale.y/this.scaleSnap)*this.scaleSnap||this.scaleSnap),t.search("Z")!==-1&&(s.scale.z=Math.round(s.scale.z/this.scaleSnap)*this.scaleSnap||this.scaleSnap))}else if(e==="rotate"){this._offset.copy(this.pointEnd).sub(this.pointStart);const o=20/this.worldPosition.distanceTo(Dt.setFromMatrixPosition(this.camera.matrixWorld));let a=!1;t==="XYZE"?(this.rotationAxis.copy(this._offset).cross(this.eye).normalize(),this.rotationAngle=this._offset.dot(Dt.copy(this.rotationAxis).cross(this.eye))*o):(t==="X"||t==="Y"||t==="Z")&&(this.rotationAxis.copy(gr[t]),Dt.copy(gr[t]),n==="local"&&Dt.applyQuaternion(this.worldQuaternion),Dt.cross(this.eye),Dt.length()===0?a=!0:this.rotationAngle=this._offset.dot(Dt.normalize())*o),(t==="E"||a)&&(this.rotationAxis.copy(this.eye),this.rotationAngle=this.pointEnd.angleTo(this.pointStart),this._startNorm.copy(this.pointStart).normalize(),this._endNorm.copy(this.pointEnd).normalize(),this.rotationAngle*=this._endNorm.cross(this._startNorm).dot(this.eye)<0?1:-1),this.rotationSnap&&(this.rotationAngle=Math.round(this.rotationAngle/this.rotationSnap)*this.rotationSnap),n==="local"&&t!=="E"&&t!=="XYZE"?(s.quaternion.copy(this._quaternionStart),s.quaternion.multiply(St.setFromAxisAngle(this.rotationAxis,this.rotationAngle)).normalize()):(this.rotationAxis.applyQuaternion(this._parentQuaternionInv),s.quaternion.copy(St.setFromAxisAngle(this.rotationAxis,this.rotationAngle)),s.quaternion.multiply(this._quaternionStart).normalize())}this.dispatchEvent(un),this.dispatchEvent(Sr)}}pointerUp(i){i.button===0&&(this.dragging&&this.axis!==null&&(Fr.mode=this.mode,this.dispatchEvent(Fr)),this.dragging=!1,this.axis=null)}dispose(){this.domElement.removeEventListener("pointerdown",this._onPointerDown),this.domElement.removeEventListener("pointermove",this._onPointerHover),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.domElement.removeEventListener("pointerup",this._onPointerUp),this.traverse(function(i){i.geometry&&i.geometry.dispose(),i.material&&i.material.dispose()})}attach(i){return this.object=i,this.visible=!0,this}detach(){return this.object=void 0,this.visible=!1,this.axis=null,this}reset(){this.enabled&&this.dragging&&(this.object.position.copy(this._positionStart),this.object.quaternion.copy(this._quaternionStart),this.object.scale.copy(this._scaleStart),this.dispatchEvent(un),this.dispatchEvent(Sr),this.pointStart.copy(this.pointEnd))}getRaycaster(){return Me}getMode(){return this.mode}setMode(i){this.mode=i}setTranslationSnap(i){this.translationSnap=i}setRotationSnap(i){this.rotationSnap=i}setScaleSnap(i){this.scaleSnap=i}setSize(i){this.size=i}setSpace(i){this.space=i}}function pc(c){if(this.domElement.ownerDocument.pointerLockElement)return{x:0,y:0,button:c.button};{const i=this.domElement.getBoundingClientRect();return{x:(c.clientX-i.left)/i.width*2-1,y:-(c.clientY-i.top)/i.height*2+1,button:c.button}}}function Cc(c){if(this.enabled)switch(c.pointerType){case"mouse":case"pen":this.pointerHover(this._getPointer(c));break}}function Tc(c){this.enabled&&(document.pointerLockElement||this.domElement.setPointerCapture(c.pointerId),this.domElement.addEventListener("pointermove",this._onPointerMove),this.pointerHover(this._getPointer(c)),this.pointerDown(this._getPointer(c)))}function mc(c){this.enabled&&this.pointerMove(this._getPointer(c))}function Rc(c){this.enabled&&(this.domElement.releasePointerCapture(c.pointerId),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.pointerUp(this._getPointer(c)))}function fn(c,i,t){const e=i.intersectObject(c,!0);for(let s=0;s<e.length;s++)if(e[s].object.visible||t)return e[s];return!1}const ss=new L.Euler,Tt=new L.Vector3(0,1,0),Or=new L.Vector3(0,0,0),Nr=new L.Matrix4,ns=new L.Quaternion,hs=new L.Quaternion,ae=new L.Vector3,yr=new L.Matrix4,Ri=new L.Vector3(1,0,0),we=new L.Vector3(0,1,0),gi=new L.Vector3(0,0,1),rs=new L.Vector3,pi=new L.Vector3,Ci=new L.Vector3;class gc extends L.Object3D{constructor(){super(),this.isTransformControlsGizmo=!0,this.type="TransformControlsGizmo";const i=new L.MeshBasicMaterial({depthTest:!1,depthWrite:!1,fog:!1,toneMapped:!1,transparent:!0}),t=new L.LineBasicMaterial({depthTest:!1,depthWrite:!1,fog:!1,toneMapped:!1,transparent:!0}),e=i.clone();e.opacity=.15;const s=t.clone();s.opacity=.5;const n=i.clone();n.color.setHex(16711680);const r=i.clone();r.color.setHex(65280);const o=i.clone();o.color.setHex(255);const a=i.clone();a.color.setHex(16711680),a.opacity=.5;const l=i.clone();l.color.setHex(65280),l.opacity=.5;const h=i.clone();h.color.setHex(255),h.opacity=.5;const f=i.clone();f.opacity=.25;const I=i.clone();I.color.setHex(16776960),I.opacity=.25,i.clone().color.setHex(16776960);const d=i.clone();d.color.setHex(7895160);const E=new L.CylinderGeometry(0,.04,.1,12);E.translate(0,.05,0);const T=new L.BoxGeometry(.08,.08,.08);T.translate(0,.04,0);const p=new L.BufferGeometry;p.setAttribute("position",new L.Float32BufferAttribute([0,0,0,1,0,0],3));const m=new L.CylinderGeometry(.0075,.0075,.5,3);m.translate(0,.25,0);function F(U,Q){const z=new L.TorusGeometry(U,.0075,3,64,Q*Math.PI*2);return z.rotateY(Math.PI/2),z.rotateX(Math.PI/2),z}function R(){const U=new L.BufferGeometry;return U.setAttribute("position",new L.Float32BufferAttribute([0,0,0,1,1,1],3)),U}const S={X:[[new L.Mesh(E,n),[.5,0,0],[0,0,-Math.PI/2]],[new L.Mesh(E,n),[-.5,0,0],[0,0,Math.PI/2]],[new L.Mesh(m,n),[0,0,0],[0,0,-Math.PI/2]]],Y:[[new L.Mesh(E,r),[0,.5,0]],[new L.Mesh(E,r),[0,-.5,0],[Math.PI,0,0]],[new L.Mesh(m,r)]],Z:[[new L.Mesh(E,o),[0,0,.5],[Math.PI/2,0,0]],[new L.Mesh(E,o),[0,0,-.5],[-Math.PI/2,0,0]],[new L.Mesh(m,o),null,[Math.PI/2,0,0]]],XYZ:[[new L.Mesh(new L.OctahedronGeometry(.1,0),f.clone()),[0,0,0]]],XY:[[new L.Mesh(new L.BoxGeometry(.15,.15,.01),h.clone()),[.15,.15,0]]],YZ:[[new L.Mesh(new L.BoxGeometry(.15,.15,.01),a.clone()),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new L.Mesh(new L.BoxGeometry(.15,.15,.01),l.clone()),[.15,0,.15],[-Math.PI/2,0,0]]]},O={X:[[new L.Mesh(new L.CylinderGeometry(.2,0,.6,4),e),[.3,0,0],[0,0,-Math.PI/2]],[new L.Mesh(new L.CylinderGeometry(.2,0,.6,4),e),[-.3,0,0],[0,0,Math.PI/2]]],Y:[[new L.Mesh(new L.CylinderGeometry(.2,0,.6,4),e),[0,.3,0]],[new L.Mesh(new L.CylinderGeometry(.2,0,.6,4),e),[0,-.3,0],[0,0,Math.PI]]],Z:[[new L.Mesh(new L.CylinderGeometry(.2,0,.6,4),e),[0,0,.3],[Math.PI/2,0,0]],[new L.Mesh(new L.CylinderGeometry(.2,0,.6,4),e),[0,0,-.3],[-Math.PI/2,0,0]]],XYZ:[[new L.Mesh(new L.OctahedronGeometry(.2,0),e)]],XY:[[new L.Mesh(new L.BoxGeometry(.2,.2,.01),e),[.15,.15,0]]],YZ:[[new L.Mesh(new L.BoxGeometry(.2,.2,.01),e),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new L.Mesh(new L.BoxGeometry(.2,.2,.01),e),[.15,0,.15],[-Math.PI/2,0,0]]]},y={START:[[new L.Mesh(new L.OctahedronGeometry(.01,2),s),null,null,null,"helper"]],END:[[new L.Mesh(new L.OctahedronGeometry(.01,2),s),null,null,null,"helper"]],DELTA:[[new L.Line(R(),s),null,null,null,"helper"]],X:[[new L.Line(p,s.clone()),[-1e3,0,0],null,[1e6,1,1],"helper"]],Y:[[new L.Line(p,s.clone()),[0,-1e3,0],[0,0,Math.PI/2],[1e6,1,1],"helper"]],Z:[[new L.Line(p,s.clone()),[0,0,-1e3],[0,-Math.PI/2,0],[1e6,1,1],"helper"]]},w={XYZE:[[new L.Mesh(F(.5,1),d),null,[0,Math.PI/2,0]]],X:[[new L.Mesh(F(.5,.5),n)]],Y:[[new L.Mesh(F(.5,.5),r),null,[0,0,-Math.PI/2]]],Z:[[new L.Mesh(F(.5,.5),o),null,[0,Math.PI/2,0]]],E:[[new L.Mesh(F(.75,1),I),null,[0,Math.PI/2,0]]]},P={AXIS:[[new L.Line(p,s.clone()),[-1e3,0,0],null,[1e6,1,1],"helper"]]},v={XYZE:[[new L.Mesh(new L.SphereGeometry(.25,10,8),e)]],X:[[new L.Mesh(new L.TorusGeometry(.5,.1,4,24),e),[0,0,0],[0,-Math.PI/2,-Math.PI/2]]],Y:[[new L.Mesh(new L.TorusGeometry(.5,.1,4,24),e),[0,0,0],[Math.PI/2,0,0]]],Z:[[new L.Mesh(new L.TorusGeometry(.5,.1,4,24),e),[0,0,0],[0,0,-Math.PI/2]]],E:[[new L.Mesh(new L.TorusGeometry(.75,.1,2,24),e)]]},G={X:[[new L.Mesh(T,n),[.5,0,0],[0,0,-Math.PI/2]],[new L.Mesh(m,n),[0,0,0],[0,0,-Math.PI/2]],[new L.Mesh(T,n),[-.5,0,0],[0,0,Math.PI/2]]],Y:[[new L.Mesh(T,r),[0,.5,0]],[new L.Mesh(m,r)],[new L.Mesh(T,r),[0,-.5,0],[0,0,Math.PI]]],Z:[[new L.Mesh(T,o),[0,0,.5],[Math.PI/2,0,0]],[new L.Mesh(m,o),[0,0,0],[Math.PI/2,0,0]],[new L.Mesh(T,o),[0,0,-.5],[-Math.PI/2,0,0]]],XY:[[new L.Mesh(new L.BoxGeometry(.15,.15,.01),h),[.15,.15,0]]],YZ:[[new L.Mesh(new L.BoxGeometry(.15,.15,.01),a),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new L.Mesh(new L.BoxGeometry(.15,.15,.01),l),[.15,0,.15],[-Math.PI/2,0,0]]],XYZ:[[new L.Mesh(new L.BoxGeometry(.1,.1,.1),f.clone())]]},N={X:[[new L.Mesh(new L.CylinderGeometry(.2,0,.6,4),e),[.3,0,0],[0,0,-Math.PI/2]],[new L.Mesh(new L.CylinderGeometry(.2,0,.6,4),e),[-.3,0,0],[0,0,Math.PI/2]]],Y:[[new L.Mesh(new L.CylinderGeometry(.2,0,.6,4),e),[0,.3,0]],[new L.Mesh(new L.CylinderGeometry(.2,0,.6,4),e),[0,-.3,0],[0,0,Math.PI]]],Z:[[new L.Mesh(new L.CylinderGeometry(.2,0,.6,4),e),[0,0,.3],[Math.PI/2,0,0]],[new L.Mesh(new L.CylinderGeometry(.2,0,.6,4),e),[0,0,-.3],[-Math.PI/2,0,0]]],XY:[[new L.Mesh(new L.BoxGeometry(.2,.2,.01),e),[.15,.15,0]]],YZ:[[new L.Mesh(new L.BoxGeometry(.2,.2,.01),e),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new L.Mesh(new L.BoxGeometry(.2,.2,.01),e),[.15,0,.15],[-Math.PI/2,0,0]]],XYZ:[[new L.Mesh(new L.BoxGeometry(.2,.2,.2),e),[0,0,0]]]},D={X:[[new L.Line(p,s.clone()),[-1e3,0,0],null,[1e6,1,1],"helper"]],Y:[[new L.Line(p,s.clone()),[0,-1e3,0],[0,0,Math.PI/2],[1e6,1,1],"helper"]],Z:[[new L.Line(p,s.clone()),[0,0,-1e3],[0,-Math.PI/2,0],[1e6,1,1],"helper"]]};function g(U){const Q=new L.Object3D;for(const z in U)for(let et=U[z].length;et--;){const X=U[z][et][0].clone(),nt=U[z][et][1],Y=U[z][et][2],B=U[z][et][3],rt=U[z][et][4];X.name=z,X.tag=rt,nt&&X.position.set(nt[0],nt[1],nt[2]),Y&&X.rotation.set(Y[0],Y[1],Y[2]),B&&X.scale.set(B[0],B[1],B[2]),X.updateMatrix();const it=X.geometry.clone();it.applyMatrix4(X.matrix),X.geometry=it,X.renderOrder=1/0,X.position.set(0,0,0),X.rotation.set(0,0,0),X.scale.set(1,1,1),Q.add(X)}return Q}this.gizmo={},this.picker={},this.helper={},this.add(this.gizmo.translate=g(S)),this.add(this.gizmo.rotate=g(w)),this.add(this.gizmo.scale=g(G)),this.add(this.picker.translate=g(O)),this.add(this.picker.rotate=g(v)),this.add(this.picker.scale=g(N)),this.add(this.helper.translate=g(y)),this.add(this.helper.rotate=g(P)),this.add(this.helper.scale=g(D)),this.picker.translate.visible=!1,this.picker.rotate.visible=!1,this.picker.scale.visible=!1}updateMatrixWorld(i){const e=(this.mode==="scale"?"local":this.space)==="local"?this.worldQuaternion:hs;this.gizmo.translate.visible=this.mode==="translate",this.gizmo.rotate.visible=this.mode==="rotate",this.gizmo.scale.visible=this.mode==="scale",this.helper.translate.visible=this.mode==="translate",this.helper.rotate.visible=this.mode==="rotate",this.helper.scale.visible=this.mode==="scale";let s=[];s=s.concat(this.picker[this.mode].children),s=s.concat(this.gizmo[this.mode].children),s=s.concat(this.helper[this.mode].children);for(let n=0;n<s.length;n++){const r=s[n];r.visible=!0,r.rotation.set(0,0,0),r.position.copy(this.worldPosition);let o;if(this.camera.isOrthographicCamera?o=(this.camera.top-this.camera.bottom)/this.camera.zoom:o=this.worldPosition.distanceTo(this.cameraPosition)*Math.min(1.9*Math.tan(Math.PI*this.camera.fov/360)/this.camera.zoom,7),r.scale.set(1,1,1).multiplyScalar(o*this.size/4),r.tag==="helper"){r.visible=!1,r.name==="AXIS"?(r.visible=!!this.axis,this.axis==="X"&&(St.setFromEuler(ss.set(0,0,0)),r.quaternion.copy(e).multiply(St),Math.abs(Tt.copy(Ri).applyQuaternion(e).dot(this.eye))>.9&&(r.visible=!1)),this.axis==="Y"&&(St.setFromEuler(ss.set(0,0,Math.PI/2)),r.quaternion.copy(e).multiply(St),Math.abs(Tt.copy(we).applyQuaternion(e).dot(this.eye))>.9&&(r.visible=!1)),this.axis==="Z"&&(St.setFromEuler(ss.set(0,Math.PI/2,0)),r.quaternion.copy(e).multiply(St),Math.abs(Tt.copy(gi).applyQuaternion(e).dot(this.eye))>.9&&(r.visible=!1)),this.axis==="XYZE"&&(St.setFromEuler(ss.set(0,Math.PI/2,0)),Tt.copy(this.rotationAxis),r.quaternion.setFromRotationMatrix(Nr.lookAt(Or,Tt,we)),r.quaternion.multiply(St),r.visible=this.dragging),this.axis==="E"&&(r.visible=!1)):r.name==="START"?(r.position.copy(this.worldPositionStart),r.visible=this.dragging):r.name==="END"?(r.position.copy(this.worldPosition),r.visible=this.dragging):r.name==="DELTA"?(r.position.copy(this.worldPositionStart),r.quaternion.copy(this.worldQuaternionStart),Dt.set(1e-10,1e-10,1e-10).add(this.worldPositionStart).sub(this.worldPosition).multiplyScalar(-1),Dt.applyQuaternion(this.worldQuaternionStart.clone().invert()),r.scale.copy(Dt),r.visible=this.dragging):(r.quaternion.copy(e),this.dragging?r.position.copy(this.worldPositionStart):r.position.copy(this.worldPosition),this.axis&&(r.visible=this.axis.search(r.name)!==-1));continue}r.quaternion.copy(e),this.mode==="translate"||this.mode==="scale"?(r.name==="X"&&Math.abs(Tt.copy(Ri).applyQuaternion(e).dot(this.eye))>.99&&(r.scale.set(1e-10,1e-10,1e-10),r.visible=!1),r.name==="Y"&&Math.abs(Tt.copy(we).applyQuaternion(e).dot(this.eye))>.99&&(r.scale.set(1e-10,1e-10,1e-10),r.visible=!1),r.name==="Z"&&Math.abs(Tt.copy(gi).applyQuaternion(e).dot(this.eye))>.99&&(r.scale.set(1e-10,1e-10,1e-10),r.visible=!1),r.name==="XY"&&Math.abs(Tt.copy(gi).applyQuaternion(e).dot(this.eye))<.2&&(r.scale.set(1e-10,1e-10,1e-10),r.visible=!1),r.name==="YZ"&&Math.abs(Tt.copy(Ri).applyQuaternion(e).dot(this.eye))<.2&&(r.scale.set(1e-10,1e-10,1e-10),r.visible=!1),r.name==="XZ"&&Math.abs(Tt.copy(we).applyQuaternion(e).dot(this.eye))<.2&&(r.scale.set(1e-10,1e-10,1e-10),r.visible=!1)):this.mode==="rotate"&&(ns.copy(e),Tt.copy(this.eye).applyQuaternion(St.copy(e).invert()),r.name.search("E")!==-1&&r.quaternion.setFromRotationMatrix(Nr.lookAt(this.eye,Or,we)),r.name==="X"&&(St.setFromAxisAngle(Ri,Math.atan2(-Tt.y,Tt.z)),St.multiplyQuaternions(ns,St),r.quaternion.copy(St)),r.name==="Y"&&(St.setFromAxisAngle(we,Math.atan2(Tt.x,Tt.z)),St.multiplyQuaternions(ns,St),r.quaternion.copy(St)),r.name==="Z"&&(St.setFromAxisAngle(gi,Math.atan2(Tt.y,Tt.x)),St.multiplyQuaternions(ns,St),r.quaternion.copy(St))),r.visible=r.visible&&(r.name.indexOf("X")===-1||this.showX),r.visible=r.visible&&(r.name.indexOf("Y")===-1||this.showY),r.visible=r.visible&&(r.name.indexOf("Z")===-1||this.showZ),r.visible=r.visible&&(r.name.indexOf("E")===-1||this.showX&&this.showY&&this.showZ),r.material._color=r.material._color||r.material.color.clone(),r.material._opacity=r.material._opacity||r.material.opacity,r.material.color.copy(r.material._color),r.material.opacity=r.material._opacity,this.enabled&&this.axis&&(r.name===this.axis||this.axis.split("").some(function(a){return r.name===a}))&&(r.material.color.setHex(16776960),r.material.opacity=1)}super.updateMatrixWorld(i)}}class Ac extends L.Mesh{constructor(){super(new L.PlaneGeometry(1e5,1e5,2,2),new L.MeshBasicMaterial({visible:!1,wireframe:!0,side:L.DoubleSide,transparent:!0,opacity:.1,toneMapped:!1})),this.isTransformControlsPlane=!0,this.type="TransformControlsPlane"}updateMatrixWorld(i){let t=this.space;switch(this.position.copy(this.worldPosition),this.mode==="scale"&&(t="local"),rs.copy(Ri).applyQuaternion(t==="local"?this.worldQuaternion:hs),pi.copy(we).applyQuaternion(t==="local"?this.worldQuaternion:hs),Ci.copy(gi).applyQuaternion(t==="local"?this.worldQuaternion:hs),Tt.copy(pi),this.mode){case"translate":case"scale":switch(this.axis){case"X":Tt.copy(this.eye).cross(rs),ae.copy(rs).cross(Tt);break;case"Y":Tt.copy(this.eye).cross(pi),ae.copy(pi).cross(Tt);break;case"Z":Tt.copy(this.eye).cross(Ci),ae.copy(Ci).cross(Tt);break;case"XY":ae.copy(Ci);break;case"YZ":ae.copy(rs);break;case"XZ":Tt.copy(Ci),ae.copy(pi);break;case"XYZ":case"E":ae.set(0,0,0);break}break;case"rotate":default:ae.set(0,0,0)}ae.length()===0?this.quaternion.copy(this.cameraQuaternion):(yr.lookAt(Dt.set(0,0,0),ae,Tt),this.quaternion.setFromRotationMatrix(yr)),super.updateMatrixWorld(i)}}class Gs{constructor(i,t,e,s,n,r=5,o=!0){C(this,"onDraggingStarted",new q);C(this,"onDraggingEnded",new q);C(this,"onDisposed",new q);C(this,"normal");C(this,"origin");C(this,"three",new b.Plane);C(this,"components");C(this,"world");C(this,"type","default");C(this,"_helper");C(this,"_visible",!0);C(this,"_enabled",!0);C(this,"_controlsActive",!1);C(this,"_arrowBoundBox",new b.Mesh);C(this,"_planeMesh");C(this,"_controls");C(this,"_hiddenMaterial",new b.MeshBasicMaterial({visible:!1}));C(this,"update",()=>{this._enabled&&this.three.setFromNormalAndCoplanarPoint(this.normal,this._helper.position)});C(this,"changeDrag",i=>{this._visible=!i.value,this.preventCameraMovement(),this.notifyDraggingChanged(i)});if(this.components=i,this.world=t,!t.renderer)throw new Error("The given world must have a renderer!");this.normal=s,this.origin=e,t.renderer.setPlane(!0,this.three),this._planeMesh=Gs.newPlaneMesh(r,n),this._helper=this.newHelper(),this._controls=this.newTransformControls(),this.three.setFromNormalAndCoplanarPoint(s,e),o&&this.toggleControls(!0)}get enabled(){return this._enabled}set enabled(i){if(!this.world.isDisposing){if(!this.world.renderer)throw new Error("No renderer found for clipping plane!");this._enabled=i,this.world.renderer.setPlane(i,this.three)}}get visible(){return this._visible}set visible(i){this._visible=i,this._controls.visible=i,this._helper.visible=i,this.toggleControls(i)}get meshes(){return[this._planeMesh,this._arrowBoundBox]}get planeMaterial(){return this._planeMesh.material}set planeMaterial(i){this._planeMesh.material=i}get size(){return this._planeMesh.scale.x}set size(i){this._planeMesh.scale.set(i,i,i)}get helper(){return this._helper}setFromNormalAndCoplanarPoint(i,t){this.reset(),this.normal.equals(i)||(this.normal.copy(i),this._helper.lookAt(i)),this.origin.copy(t),this._helper.position.copy(t),this._helper.updateMatrix(),this.update()}dispose(){this._enabled=!1,this.onDraggingStarted.reset(),this.onDraggingEnded.reset(),this._helper.removeFromParent(),this.world.renderer&&this.world.renderer.setPlane(!1,this.three),this._arrowBoundBox.removeFromParent(),this._arrowBoundBox.geometry.dispose(),this._planeMesh.geometry.dispose(),this._controls.removeFromParent(),this._controls.dispose(),this.onDisposed.trigger(),this.onDisposed.reset()}reset(){const i=new b.Vector3(1,0,0),t=new b.Vector3;this.normal.equals(i)||(this.normal.copy(i),this._helper.lookAt(i)),this.origin.copy(t),this._helper.position.copy(t),this._helper.updateMatrix()}toggleControls(i){if(i){if(this._controlsActive)return;this._controls.addEventListener("change",this.update),this._controls.addEventListener("dragging-changed",this.changeDrag)}else this._controls.removeEventListener("change",this.update),this._controls.removeEventListener("dragging-changed",this.changeDrag);this._controlsActive=i}newTransformControls(){if(!this.world.renderer)throw new Error("No renderer found for clipping plane!");const i=this.world.camera.three,t=this.world.renderer.three.domElement,e=new Ec(i,t);return this.initializeControls(e),this.world.scene.three.add(e),e}initializeControls(i){i.attach(this._helper),i.showX=!1,i.showY=!1,i.setSpace("local"),this.createArrowBoundingBox(),i.children[0].children[0].add(this._arrowBoundBox)}createArrowBoundingBox(){this._arrowBoundBox.geometry=new b.CylinderGeometry(.18,.18,1.2),this._arrowBoundBox.material=this._hiddenMaterial,this._arrowBoundBox.rotateX(Math.PI/2),this._arrowBoundBox.updateMatrix(),this._arrowBoundBox.geometry.applyMatrix4(this._arrowBoundBox.matrix)}notifyDraggingChanged(i){i.value?this.onDraggingStarted.trigger():this.onDraggingEnded.trigger()}preventCameraMovement(){this.world.camera.enabled=this._visible}newHelper(){const i=new b.Object3D;return i.lookAt(this.normal),i.position.copy(this.origin),this._planeMesh.position.z+=.01,i.add(this._planeMesh),this.world.scene.three.add(i),i}static newPlaneMesh(i,t){const e=new b.PlaneGeometry(1),s=new b.Mesh(e,t);return s.scale.set(i,i,i),s}}class Fc extends ye{constructor(){super(...arguments);C(this,"_config",{enabled:{value:!0,type:"Boolean"},visible:{value:!0,type:"Boolean"},color:{value:new b.Color,type:"Color"},opacity:{type:"Number",interpolable:!0,value:1,min:0,max:1},size:{type:"Number",interpolable:!0,value:2,min:0,max:100}})}get enabled(){return this._config.enabled.value}set enabled(t){this._config.enabled.value=t,this._component.enabled=t}get visible(){return this._config.visible.value}set visible(t){this._config.visible.value=t,this._component.visible=t}get color(){return this._config.color.value}set color(t){this._config.color.value=t,this._component.material.color.copy(t)}get opacity(){return this._config.opacity.value}set opacity(t){this._config.opacity.value=t,this._component.material.opacity=t}get size(){return this._config.size.value}set size(t){this._config.size.value=t,this._component.size=t}}const Qe=class Qe extends mt{constructor(t){super(t);C(this,"onSetup",new q);C(this,"onBeforeDrag",new q);C(this,"onAfterDrag",new q);C(this,"onBeforeCreate",new q);C(this,"onBeforeCancel",new q);C(this,"onAfterCancel",new q);C(this,"onBeforeDelete",new q);C(this,"onAfterCreate",new q);C(this,"onAfterDelete",new q);C(this,"onDisposed",new q);C(this,"isSetup",!1);C(this,"orthogonalY",!1);C(this,"toleranceOrthogonalY",.7);C(this,"Type",Gs);C(this,"list",[]);C(this,"config",new Fc(this,this.components,"Clipper",Qe.uuid));C(this,"_defaultConfig",{color:new b.Color(12255487),opacity:.2,size:2});C(this,"_material",new b.MeshBasicMaterial({color:12255487,side:b.DoubleSide,transparent:!0,opacity:.2}));C(this,"_size",5);C(this,"_enabled",!1);C(this,"_visible",!0);C(this,"_onStartDragging",()=>{this.onBeforeDrag.trigger()});C(this,"_onEndDragging",()=>{this.onAfterDrag.trigger()});this.components.add(Qe.uuid,this)}get enabled(){return this._enabled}set enabled(t){this._enabled=t;for(const e of this.list)e.enabled=t;this.updateMaterialsAndPlanes()}get visible(){return this._visible}set visible(t){this._visible=t;for(const e of this.list)e.visible=t}get material(){return this._material}set material(t){this._material=t;for(const e of this.list)e.planeMaterial=t}get size(){return this._size}set size(t){this._size=t;for(const e of this.list)e.size=t}dispose(){this._enabled=!1,this.components.get(Ne).list.delete(this.config.uuid);for(const e of this.list)e.dispose();this.list.length=0,this._material.dispose(),this.onBeforeCreate.reset(),this.onBeforeCancel.reset(),this.onBeforeDelete.reset(),this.onBeforeDrag.reset(),this.onAfterCreate.reset(),this.onAfterCancel.reset(),this.onAfterDelete.reset(),this.onAfterDrag.reset(),this.onDisposed.trigger(Qe.uuid),this.onDisposed.reset()}create(t){const n=this.components.get(ve).get(t).castRay();return n?this.createPlaneFromIntersection(t,n):null}createFromNormalAndCoplanarPoint(t,e,s){const n=this.newPlane(t,s,e);return this.updateMaterialsAndPlanes(),n}delete(t,e){e||(e=this.pickPlane(t)),e&&this.deletePlane(e)}deleteAll(t){const e=[...this.list];for(const s of e)if(!t||t.has(s.type)){this.delete(s.world,s);const n=this.list.indexOf(s);n!==-1&&this.list.splice(n,1)}}setup(t){const e={...this._defaultConfig,...t};this.config.color=e.color,this.config.opacity=e.opacity,this.config.size=e.size,this.isSetup=!0,this.onSetup.trigger()}deletePlane(t){const e=this.list.indexOf(t);if(e!==-1){if(this.list.splice(e,1),!t.world.renderer)throw new Error("Renderer not found for this plane's world!");t.world.renderer.setPlane(!1,t.three),t.dispose(),this.updateMaterialsAndPlanes(),this.onAfterDelete.trigger(t)}}pickPlane(t){const s=this.components.get(ve).get(t),n=this.getAllPlaneMeshes(),r=s.castRay(n);if(r){const o=r.object;return this.list.find(a=>a.meshes.includes(o))}}getAllPlaneMeshes(){const t=[];for(const e of this.list)t.push(...e.meshes);return t}createPlaneFromIntersection(t,e){var a;if(!t.renderer)throw new Error("The given world must have a renderer!");const s=e.point.distanceTo(new b.Vector3(0,0,0)),n=(a=e.face)==null?void 0:a.normal;if(!s||!n)return null;const r=this.getWorldNormal(e,n),o=this.newPlane(t,e.point,r.negate());return o.visible=this._visible,o.size=this._size,t.renderer.setPlane(!0,o.three),this.updateMaterialsAndPlanes(),o}getWorldNormal(t,e){const s=t.object;let n=t.object.matrixWorld.clone();if(s instanceof b.InstancedMesh&&t.instanceId!==void 0){const l=new b.Matrix4;s.getMatrixAt(t.instanceId,l),n=l.multiply(n)}const o=new b.Matrix3().getNormalMatrix(n),a=e.clone().applyMatrix3(o).normalize();return this.normalizePlaneDirectionY(a),a}normalizePlaneDirectionY(t){this.orthogonalY&&(t.y>this.toleranceOrthogonalY&&(t.x=0,t.y=1,t.z=0),t.y<-this.toleranceOrthogonalY&&(t.x=0,t.y=-1,t.z=0))}newPlane(t,e,s){const n=new this.Type(this.components,t,e,s,this._material);return n.onDraggingStarted.add(this._onStartDragging),n.onDraggingEnded.add(this._onEndDragging),this.list.push(n),this.onAfterCreate.trigger(n),n}updateMaterialsAndPlanes(){const t=this.components.get(Pi);for(const[e,s]of t.list){if(!s.renderer)continue;s.renderer.updateClippingPlanes();const{clippingPlanes:n}=s.renderer;for(const r of s.meshes)if(r.material)if(Array.isArray(r.material))for(const o of r.material)o.clippingPlanes=n;else r.material.clippingPlanes=n}}};C(Qe,"uuid","66290bc5-18c4-4cd1-9379-2e17a0617611");let Is=Qe;class eo{constructor(i){C(this,"enabled",!1);C(this,"id","FirstPerson");this.camera=i}set(i){if(this.enabled=i,i){if(this.camera.projection.current!=="Perspective"){this.camera.set("Orbit");return}this.setupFirstPersonCamera()}}setupFirstPersonCamera(){const i=this.camera.controls,t=new b.Vector3;i.distance--,i.getPosition(t),i.minDistance=1,i.maxDistance=1,i.distance=1,i.moveTo(t.x,t.y,t.z),i.truckSpeed=50,i.mouseButtons.wheel=bt.ACTION.DOLLY,i.touches.two=bt.ACTION.TOUCH_ZOOM_TRUCK}}class io{constructor(i){C(this,"enabled",!0);C(this,"id","Orbit");this.camera=i,this.activateOrbitControls()}set(i){this.enabled=i,i&&this.activateOrbitControls()}activateOrbitControls(){const i=this.camera.controls;i.minDistance=1,i.maxDistance=300;const t=new b.Vector3;i.getPosition(t);const e=t.length();i.distance=e,i.truckSpeed=2;const{rotation:s}=this.camera.three,n=new b.Vector3(0,0,-1).applyEuler(s),r=t.addScaledVector(n,e);i.moveTo(r.x,r.y,r.z)}}class so{constructor(i){C(this,"enabled",!1);C(this,"id","Plan");C(this,"mouseAction1");C(this,"mouseAction2");C(this,"mouseInitialized",!1);C(this,"defaultAzimuthSpeed");C(this,"defaultPolarSpeed");this.camera=i,this.defaultAzimuthSpeed=i.controls.azimuthRotateSpeed,this.defaultPolarSpeed=i.controls.polarRotateSpeed}set(i){this.enabled=i;const t=this.camera.controls;t.azimuthRotateSpeed=i?0:this.defaultAzimuthSpeed,t.polarRotateSpeed=i?0:this.defaultPolarSpeed,this.mouseInitialized||(this.mouseAction1=t.touches.one,this.mouseAction2=t.touches.two,this.mouseInitialized=!0),i?(t.mouseButtons.left=bt.ACTION.TRUCK,t.touches.one=bt.ACTION.TOUCH_TRUCK,t.touches.two=bt.ACTION.TOUCH_ZOOM):(t.mouseButtons.left=bt.ACTION.ROTATE,t.touches.one=this.mouseAction1,t.touches.two=this.mouseAction2)}}class no{constructor(i){C(this,"onChanged",new q);C(this,"current","Perspective");C(this,"camera");C(this,"matchOrthoDistanceEnabled",!1);C(this,"_component");C(this,"_previousDistance",-1);this._component=i,this.camera=i.three}async set(i){this.current!==i&&(i==="Orthographic"?this.setOrthoCamera():await this.setPerspectiveCamera(),this.onChanged.trigger(this.camera))}async toggle(){const t=this.current==="Perspective"?"Orthographic":"Perspective";await this.set(t)}setOrthoCamera(){if(this._component.mode===null||this._component.mode.id==="FirstPerson")return;this._previousDistance=this._component.controls.distance,this._component.controls.distance=200;const i=this.getPerspectiveDims();if(!i)return;const{width:t,height:e}=i;this.setupOrthoCamera(e,t),this.camera=this._component.threeOrtho,this.current="Orthographic"}getPerspectiveDims(){const i=this._component.currentWorld;if(!i||!i.renderer)return null;const t=new b.Vector3;this._component.threePersp.getWorldDirection(t);const e=new b.Vector3;this._component.controls.getTarget(e);const n=e.clone().sub(this._component.threePersp.position).dot(t),r=i.renderer.getSize(),o=r.x/r.y,a=this._component.threePersp,l=n*2*Math.atan(a.fov*(Math.PI/180)/2);return{width:l*o,height:l}}setupOrthoCamera(i,t){this._component.controls.mouseButtons.wheel=bt.ACTION.ZOOM,this._component.controls.mouseButtons.middle=bt.ACTION.ZOOM;const e=this._component.threePersp,s=this._component.threeOrtho;s.zoom=1,s.left=t/-2,s.right=t/2,s.top=i/2,s.bottom=i/-2,s.updateProjectionMatrix(),s.position.copy(e.position),s.quaternion.copy(e.quaternion),this._component.controls.camera=s}getDistance(){const i=this._component.threePersp,t=this._component.threeOrtho;return(t.top-t.bottom)/t.zoom/(2*Math.atan(i.fov*(Math.PI/180)/2))}async setPerspectiveCamera(){this._component.controls.mouseButtons.wheel=bt.ACTION.DOLLY,this._component.controls.mouseButtons.middle=bt.ACTION.DOLLY;const i=this._component.threePersp,t=this._component.threeOrtho;i.position.copy(t.position),i.quaternion.copy(t.quaternion),this._component.controls.mouseButtons.wheel=bt.ACTION.DOLLY,this.matchOrthoDistanceEnabled?this._component.controls.distance=this.getDistance():this._component.controls.distance=this._previousDistance,await this._component.controls.zoomTo(1),i.updateProjectionMatrix(),this._component.controls.camera=i,this.camera=i,this.current="Perspective"}}class ro extends Je{constructor(t){super(t);C(this,"projection");C(this,"threeOrtho");C(this,"threePersp");C(this,"_userInputButtons",{});C(this,"_frustumSize",50);C(this,"_navigationModes",new Map);C(this,"_mode",null);C(this,"previousSize",null);this.threePersp=this.three,this.threeOrtho=this.newOrthoCamera(),this.projection=new no(this),this.onAspectUpdated.add(()=>{this.setOrthoPerspCameraAspect()}),this.projection.onChanged.add(e=>{this.three=e,this.updateAspect()}),this.onWorldChanged.add(({action:e})=>{e==="added"&&(this._navigationModes.clear(),this._navigationModes.set("Orbit",new io(this)),this._navigationModes.set("FirstPerson",new eo(this)),this._navigationModes.set("Plan",new so(this)),this._mode=this._navigationModes.get("Orbit"),this.mode.set(!0,{preventTargetAdjustment:!0}),this.currentWorld&&this.currentWorld.renderer&&(this.previousSize=this.currentWorld.renderer.getSize().clone()))})}get mode(){if(!this._mode)throw new Error("Mode not found, camera not initialized");return this._mode}dispose(){super.dispose(),this.threeOrtho.removeFromParent()}set(t){if(this.mode!==null&&this.mode.id!==t){if(this.mode.set(!1),!this._navigationModes.has(t))throw new Error("The specified mode does not exist!");this._mode=this._navigationModes.get(t),this.mode.set(!0)}}async fit(t,e=1.5){if(!this.enabled)return;const s=Number.MAX_VALUE,n=Number.MIN_VALUE,r=new b.Vector3(s,s,s),o=new b.Vector3(n,n,n);for(const u of t){const d=new b.Box3().setFromObject(u);d.min.x<r.x&&(r.x=d.min.x),d.min.y<r.y&&(r.y=d.min.y),d.min.z<r.z&&(r.z=d.min.z),d.max.x>o.x&&(o.x=d.max.x),d.max.y>o.y&&(o.y=d.max.y),d.max.z>o.z&&(o.z=d.max.z)}const a=new b.Box3(r,o),l=new b.Vector3;a.getSize(l);const h=new b.Vector3;a.getCenter(h);const f=Math.max(l.x,l.y,l.z)*e,I=new b.Sphere(h,f);await this.controls.fitToSphere(I,!0)}setUserInput(t){t?this.enableUserInput():this.disableUserInput()}disableUserInput(){this._userInputButtons.left=this.controls.mouseButtons.left,this._userInputButtons.right=this.controls.mouseButtons.right,this._userInputButtons.middle=this.controls.mouseButtons.middle,this._userInputButtons.wheel=this.controls.mouseButtons.wheel,this.controls.mouseButtons.left=0,this.controls.mouseButtons.right=0,this.controls.mouseButtons.middle=0,this.controls.mouseButtons.wheel=0}enableUserInput(){Object.keys(this._userInputButtons).length!==0&&(this.controls.mouseButtons.left=this._userInputButtons.left,this.controls.mouseButtons.right=this._userInputButtons.right,this.controls.mouseButtons.middle=this._userInputButtons.middle,this.controls.mouseButtons.wheel=this._userInputButtons.wheel)}newOrthoCamera(){const t=window.innerWidth/window.innerHeight;return new b.OrthographicCamera(this._frustumSize*t/-2,this._frustumSize*t/2,this._frustumSize/2,this._frustumSize/-2,.1,1e3)}setOrthoPerspCameraAspect(){if(!this.currentWorld||!this.currentWorld.renderer||!this.previousSize)return;const t=this.currentWorld.renderer.getSize(),e=this.threeOrtho.top,s=this.threeOrtho.right,n=t.y/this.previousSize.y,r=t.x/this.previousSize.x,o=e*n,a=s*r;this.threeOrtho.left=-a,this.threeOrtho.right=a,this.threeOrtho.top=o,this.threeOrtho.bottom=-o,this.threeOrtho.updateProjectionMatrix(),this.previousSize.copy(t)}}const Sn=new Map([[k.IFCRELAGGREGATES,{forRelated:"Decomposes",forRelating:"IsDecomposedBy"}],[k.IFCRELASSOCIATESMATERIAL,{forRelated:"HasAssociations",forRelating:"AssociatedTo"}],[k.IFCRELASSOCIATESCLASSIFICATION,{forRelated:"HasAssociations",forRelating:"ClassificationForObjects"}],[k.IFCRELASSIGNSTOGROUP,{forRelated:"HasAssignments",forRelating:"IsGroupedBy"}],[k.IFCRELDEFINESBYPROPERTIES,{forRelated:"IsDefinedBy",forRelating:"DefinesOcurrence"}],[k.IFCRELDEFINESBYTYPE,{forRelated:"IsTypedBy",forRelating:"Types"}],[k.IFCRELDEFINESBYTEMPLATE,{forRelated:"IsDefinedBy",forRelating:"Defines"}],[k.IFCRELCONTAINEDINSPATIALSTRUCTURE,{forRelated:"ContainedInStructure",forRelating:"ContainsElements"}],[k.IFCRELFLOWCONTROLELEMENTS,{forRelated:"AssignedToFlowElement",forRelating:"HasControlElements"}],[k.IFCRELCONNECTSELEMENTS,{forRelated:"ConnectedFrom",forRelating:"ConnectedTo"}],[k.IFCRELASSIGNSTOPRODUCT,{forRelated:"HasAssignments",forRelating:"ReferencedBy"}],[k.IFCRELDECLARES,{forRelated:"HasContext",forRelating:"Declares"}],[k.IFCRELASSIGNSTOCONTROL,{forRelated:"HasAssignments",forRelating:"Controls"}],[k.IFCRELNESTS,{forRelated:"Nests",forRelating:"IsNestedBy"}],[k.IFCRELASSOCIATESDOCUMENT,{forRelated:"HasAssociations",forRelating:"DocumentRefForObjects"}]]),oo={103090709:"IFCPROJECT",4097777520:"IFCSITE",4031249490:"IFCBUILDING",3124254112:"IFCBUILDINGSTOREY",3856911033:"IFCSPACE",1674181508:"IFCANNOTATION",25142252:"IFCCONTROLLER",32344328:"IFCBOILER",76236018:"IFCLAMP",90941305:"IFCPUMP",177149247:"IFCAIRTERMINALBOX",182646315:"IFCFLOWINSTRUMENT",263784265:"IFCFURNISHINGELEMENT",264262732:"IFCELECTRICGENERATOR",277319702:"IFCAUDIOVISUALAPPLIANCE",310824031:"IFCPIPEFITTING",331165859:"IFCSTAIR",342316401:"IFCDUCTFITTING",377706215:"IFCMECHANICALFASTENER",395920057:"IFCDOOR",402227799:"IFCELECTRICMOTOR",413509423:"IFCSYSTEMFURNITUREELEMENT",484807127:"IFCEVAPORATOR",486154966:"IFCWINDOWSTANDARDCASE",629592764:"IFCLIGHTFIXTURE",630975310:"IFCUNITARYCONTROLELEMENT",635142910:"IFCCABLECARRIERFITTING",639361253:"IFCCOIL",647756555:"IFCFASTENER",707683696:"IFCFLOWSTORAGEDEVICE",738039164:"IFCPROTECTIVEDEVICE",753842376:"IFCBEAM",812556717:"IFCTANK",819412036:"IFCFILTER",843113511:"IFCCOLUMN",862014818:"IFCELECTRICDISTRIBUTIONBOARD",900683007:"IFCFOOTING",905975707:"IFCCOLUMNSTANDARDCASE",926996030:"IFCVOIDINGFEATURE",979691226:"IFCREINFORCINGBAR",987401354:"IFCFLOWSEGMENT",1003880860:"IFCELECTRICTIMECONTROL",1051757585:"IFCCABLEFITTING",1052013943:"IFCDISTRIBUTIONCHAMBERELEMENT",1062813311:"IFCDISTRIBUTIONCONTROLELEMENT",1073191201:"IFCMEMBER",1095909175:"IFCBUILDINGELEMENTPROXY",1156407060:"IFCPLATESTANDARDCASE",1162798199:"IFCSWITCHINGDEVICE",1329646415:"IFCSHADINGDEVICE",1335981549:"IFCDISCRETEACCESSORY",1360408905:"IFCDUCTSILENCER",1404847402:"IFCSTACKTERMINAL",1426591983:"IFCFIRESUPPRESSIONTERMINAL",1437502449:"IFCMEDICALDEVICE",1509553395:"IFCFURNITURE",1529196076:"IFCSLAB",1620046519:"IFCTRANSPORTELEMENT",1634111441:"IFCAIRTERMINAL",1658829314:"IFCENERGYCONVERSIONDEVICE",1677625105:"IFCCIVILELEMENT",1687234759:"IFCPILE",1904799276:"IFCELECTRICAPPLIANCE",1911478936:"IFCMEMBERSTANDARDCASE",1945004755:"IFCDISTRIBUTIONELEMENT",1973544240:"IFCCOVERING",1999602285:"IFCSPACEHEATER",2016517767:"IFCROOF",2056796094:"IFCAIRTOAIRHEATRECOVERY",2058353004:"IFCFLOWCONTROLLER",2068733104:"IFCHUMIDIFIER",2176052936:"IFCJUNCTIONBOX",2188021234:"IFCFLOWMETER",2223149337:"IFCFLOWTERMINAL",2262370178:"IFCRAILING",2272882330:"IFCCONDENSER",2295281155:"IFCPROTECTIVEDEVICETRIPPINGUNIT",2320036040:"IFCREINFORCINGMESH",2347447852:"IFCTENDONANCHOR",2391383451:"IFCVIBRATIONISOLATOR",2391406946:"IFCWALL",2474470126:"IFCMOTORCONNECTION",2769231204:"IFCVIRTUALELEMENT",2814081492:"IFCENGINE",2906023776:"IFCBEAMSTANDARDCASE",2938176219:"IFCBURNER",2979338954:"IFCBUILDINGELEMENTPART",3024970846:"IFCRAMP",3026737570:"IFCTUBEBUNDLE",3027962421:"IFCSLABSTANDARDCASE",3040386961:"IFCDISTRIBUTIONFLOWELEMENT",3053780830:"IFCSANITARYTERMINAL",3079942009:"IFCOPENINGSTANDARDCASE",3087945054:"IFCALARM",3101698114:"IFCSURFACEFEATURE",3127900445:"IFCSLABELEMENTEDCASE",3132237377:"IFCFLOWMOVINGDEVICE",3171933400:"IFCPLATE",3221913625:"IFCCOMMUNICATIONSAPPLIANCE",3242481149:"IFCDOORSTANDARDCASE",3283111854:"IFCRAMPFLIGHT",3296154744:"IFCCHIMNEY",3304561284:"IFCWINDOW",3310460725:"IFCELECTRICFLOWSTORAGEDEVICE",3319311131:"IFCHEATEXCHANGER",3415622556:"IFCFAN",3420628829:"IFCSOLARDEVICE",3493046030:"IFCGEOGRAPHICELEMENT",3495092785:"IFCCURTAINWALL",3508470533:"IFCFLOWTREATMENTDEVICE",3512223829:"IFCWALLSTANDARDCASE",3518393246:"IFCDUCTSEGMENT",3571504051:"IFCCOMPRESSOR",3588315303:"IFCOPENINGELEMENT",3612865200:"IFCPIPESEGMENT",3640358203:"IFCCOOLINGTOWER",3651124850:"IFCPROJECTIONELEMENT",3694346114:"IFCOUTLET",3747195512:"IFCEVAPORATIVECOOLER",3758799889:"IFCCABLECARRIERSEGMENT",3824725483:"IFCTENDON",3825984169:"IFCTRANSFORMER",3902619387:"IFCCHILLER",4074379575:"IFCDAMPER",4086658281:"IFCSENSOR",4123344466:"IFCELEMENTASSEMBLY",4136498852:"IFCCOOLEDBEAM",4156078855:"IFCWALLELEMENTEDCASE",4175244083:"IFCINTERCEPTOR",4207607924:"IFCVALVE",4217484030:"IFCCABLESEGMENT",4237592921:"IFCWASTETERMINAL",4252922144:"IFCSTAIRFLIGHT",4278956645:"IFCFLOWFITTING",4288193352:"IFCACTUATOR",4292641817:"IFCUNITARYEQUIPMENT",3009204131:"IFCGRID"};class Sc{getAll(i,t){const e={},s=Object.keys(oo).map(n=>parseInt(n,10));for(let n=0;n<s.length;n++){const r=s[n],o=i.GetLineIDsWithType(t,r),a=o.size();for(let l=0;l<a;l++)e[o.get(l)]=r}return e}}const _i={950732822:"IFCURIREFERENCE",4075327185:"IFCTIME",1209108979:"IFCTEMPERATURERATEOFCHANGEMEASURE",3457685358:"IFCSOUNDPRESSURELEVELMEASURE",4157543285:"IFCSOUNDPOWERLEVELMEASURE",2798247006:"IFCPROPERTYSETDEFINITIONSET",1790229001:"IFCPOSITIVEINTEGER",525895558:"IFCNONNEGATIVELENGTHMEASURE",1774176899:"IFCLINEINDEX",1275358634:"IFCLANGUAGEID",2541165894:"IFCDURATION",3701338814:"IFCDAYINWEEKNUMBER",2195413836:"IFCDATETIME",937566702:"IFCDATE",1683019596:"IFCCARDINALPOINTREFERENCE",2314439260:"IFCBINARY",1500781891:"IFCAREADENSITYMEASURE",3683503648:"IFCARCINDEX",4065007721:"IFCYEARNUMBER",1718600412:"IFCWARPINGMOMENTMEASURE",51269191:"IFCWARPINGCONSTANTMEASURE",2593997549:"IFCVOLUMETRICFLOWRATEMEASURE",3458127941:"IFCVOLUMEMEASURE",3345633955:"IFCVAPORPERMEABILITYMEASURE",1278329552:"IFCTORQUEMEASURE",2591213694:"IFCTIMESTAMP",2726807636:"IFCTIMEMEASURE",743184107:"IFCTHERMODYNAMICTEMPERATUREMEASURE",2016195849:"IFCTHERMALTRANSMITTANCEMEASURE",857959152:"IFCTHERMALRESISTANCEMEASURE",2281867870:"IFCTHERMALEXPANSIONCOEFFICIENTMEASURE",2645777649:"IFCTHERMALCONDUCTIVITYMEASURE",232962298:"IFCTHERMALADMITTANCEMEASURE",296282323:"IFCTEXTTRANSFORMATION",603696268:"IFCTEXTFONTNAME",3490877962:"IFCTEXTDECORATION",1460886941:"IFCTEXTALIGNMENT",2801250643:"IFCTEXT",58845555:"IFCTEMPERATUREGRADIENTMEASURE",361837227:"IFCSPECULARROUGHNESS",2757832317:"IFCSPECULAREXPONENT",3477203348:"IFCSPECIFICHEATCAPACITYMEASURE",993287707:"IFCSOUNDPRESSUREMEASURE",846465480:"IFCSOUNDPOWERMEASURE",3471399674:"IFCSOLIDANGLEMEASURE",408310005:"IFCSHEARMODULUSMEASURE",2190458107:"IFCSECTIONALAREAINTEGRALMEASURE",3467162246:"IFCSECTIONMODULUSMEASURE",2766185779:"IFCSECONDINMINUTE",3211557302:"IFCROTATIONALSTIFFNESSMEASURE",1755127002:"IFCROTATIONALMASSMEASURE",2133746277:"IFCROTATIONALFREQUENCYMEASURE",200335297:"IFCREAL",96294661:"IFCRATIOMEASURE",3972513137:"IFCRADIOACTIVITYMEASURE",3665567075:"IFCPRESSUREMEASURE",2169031380:"IFCPRESENTABLETEXT",1364037233:"IFCPOWERMEASURE",1245737093:"IFCPOSITIVERATIOMEASURE",3054510233:"IFCPOSITIVEPLANEANGLEMEASURE",2815919920:"IFCPOSITIVELENGTHMEASURE",4042175685:"IFCPLANEANGLEMEASURE",2642773653:"IFCPLANARFORCEMEASURE",2260317790:"IFCPARAMETERVALUE",929793134:"IFCPHMEASURE",2395907400:"IFCNUMERICMEASURE",2095195183:"IFCNORMALISEDRATIOMEASURE",765770214:"IFCMONTHINYEARNUMBER",2615040989:"IFCMONETARYMEASURE",3114022597:"IFCMOMENTOFINERTIAMEASURE",1648970520:"IFCMOLECULARWEIGHTMEASURE",3177669450:"IFCMOISTUREDIFFUSIVITYMEASURE",1753493141:"IFCMODULUSOFSUBGRADEREACTIONMEASURE",1052454078:"IFCMODULUSOFROTATIONALSUBGRADEREACTIONMEASURE",2173214787:"IFCMODULUSOFLINEARSUBGRADEREACTIONMEASURE",3341486342:"IFCMODULUSOFELASTICITYMEASURE",102610177:"IFCMINUTEINHOUR",3531705166:"IFCMASSPERLENGTHMEASURE",3124614049:"IFCMASSMEASURE",4017473158:"IFCMASSFLOWRATEMEASURE",1477762836:"IFCMASSDENSITYMEASURE",2486716878:"IFCMAGNETICFLUXMEASURE",286949696:"IFCMAGNETICFLUXDENSITYMEASURE",151039812:"IFCLUMINOUSINTENSITYMEASURE",2755797622:"IFCLUMINOUSINTENSITYDISTRIBUTIONMEASURE",2095003142:"IFCLUMINOUSFLUXMEASURE",503418787:"IFCLOGICAL",3086160713:"IFCLINEARVELOCITYMEASURE",1307019551:"IFCLINEARSTIFFNESSMEASURE",2128979029:"IFCLINEARMOMENTMEASURE",191860431:"IFCLINEARFORCEMEASURE",1243674935:"IFCLENGTHMEASURE",3258342251:"IFCLABEL",2054016361:"IFCKINEMATICVISCOSITYMEASURE",3192672207:"IFCISOTHERMALMOISTURECAPACITYMEASURE",3686016028:"IFCIONCONCENTRATIONMEASURE",3809634241:"IFCINTEGERCOUNTRATEMEASURE",1939436016:"IFCINTEGER",2679005408:"IFCINDUCTANCEMEASURE",3358199106:"IFCILLUMINANCEMEASURE",983778844:"IFCIDENTIFIER",2589826445:"IFCHOURINDAY",1158859006:"IFCHEATINGVALUEMEASURE",3113092358:"IFCHEATFLUXDENSITYMEASURE",3064340077:"IFCGLOBALLYUNIQUEID",3044325142:"IFCFREQUENCYMEASURE",1361398929:"IFCFORCEMEASURE",2590844177:"IFCFONTWEIGHT",2715512545:"IFCFONTVARIANT",1102727119:"IFCFONTSTYLE",2078135608:"IFCENERGYMEASURE",2506197118:"IFCELECTRICVOLTAGEMEASURE",2951915441:"IFCELECTRICRESISTANCEMEASURE",3790457270:"IFCELECTRICCURRENTMEASURE",2093906313:"IFCELECTRICCONDUCTANCEMEASURE",3818826038:"IFCELECTRICCHARGEMEASURE",1827137117:"IFCELECTRICCAPACITANCEMEASURE",69416015:"IFCDYNAMICVISCOSITYMEASURE",524656162:"IFCDOSEEQUIVALENTMEASURE",4134073009:"IFCDIMENSIONCOUNT",1514641115:"IFCDESCRIPTIVEMEASURE",300323983:"IFCDAYLIGHTSAVINGHOUR",86635668:"IFCDAYINMONTHNUMBER",94842927:"IFCCURVATUREMEASURE",1778710042:"IFCCOUNTMEASURE",3238673880:"IFCCONTEXTDEPENDENTMEASURE",3812528620:"IFCCOMPOUNDPLANEANGLEMEASURE",2991860651:"IFCCOMPLEXNUMBER",1867003952:"IFCBOXALIGNMENT",2735952531:"IFCBOOLEAN",2650437152:"IFCAREAMEASURE",632304761:"IFCANGULARVELOCITYMEASURE",360377573:"IFCAMOUNTOFSUBSTANCEMEASURE",4182062534:"IFCACCELERATIONMEASURE",3699917729:"IFCABSORBEDDOSEMEASURE",1971632696:"IFCGEOSLICE",2680139844:"IFCGEOMODEL",24726584:"IFCELECTRICFLOWTREATMENTDEVICE",3693000487:"IFCDISTRIBUTIONBOARD",3460952963:"IFCCONVEYORSEGMENT",3999819293:"IFCCAISSONFOUNDATION",3314249567:"IFCBOREHOLE",4196446775:"IFCBEARING",325726236:"IFCALIGNMENT",3425753595:"IFCTRACKELEMENT",991950508:"IFCSIGNAL",3798194928:"IFCREINFORCEDSOIL",3290496277:"IFCRAIL",1383356374:"IFCPAVEMENT",2182337498:"IFCNAVIGATIONELEMENT",234836483:"IFCMOORINGDEVICE",2078563270:"IFCMOBILETELECOMMUNICATIONSAPPLIANCE",1638804497:"IFCLIQUIDTERMINAL",1154579445:"IFCLINEARPOSITIONINGELEMENT",2696325953:"IFCKERB",2713699986:"IFCGEOTECHNICALASSEMBLY",2142170206:"IFCELECTRICFLOWTREATMENTDEVICETYPE",3376911765:"IFCEARTHWORKSFILL",1077100507:"IFCEARTHWORKSELEMENT",3071239417:"IFCEARTHWORKSCUT",479945903:"IFCDISTRIBUTIONBOARDTYPE",3426335179:"IFCDEEPFOUNDATION",1502416096:"IFCCOURSE",2940368186:"IFCCONVEYORSEGMENTTYPE",3203706013:"IFCCAISSONFOUNDATIONTYPE",3862327254:"IFCBUILTSYSTEM",1876633798:"IFCBUILTELEMENT",963979645:"IFCBRIDGEPART",644574406:"IFCBRIDGE",3649138523:"IFCBEARINGTYPE",1662888072:"IFCALIGNMENTVERTICAL",317615605:"IFCALIGNMENTSEGMENT",1545765605:"IFCALIGNMENTHORIZONTAL",4266260250:"IFCALIGNMENTCANT",3956297820:"IFCVIBRATIONDAMPERTYPE",1530820697:"IFCVIBRATIONDAMPER",840318589:"IFCVEHICLE",1953115116:"IFCTRANSPORTATIONDEVICE",618700268:"IFCTRACKELEMENTTYPE",2281632017:"IFCTENDONCONDUITTYPE",3663046924:"IFCTENDONCONDUIT",42703149:"IFCSINESPIRAL",1894708472:"IFCSIGNALTYPE",3599934289:"IFCSIGNTYPE",33720170:"IFCSIGN",1027922057:"IFCSEVENTHORDERPOLYNOMIALSPIRAL",544395925:"IFCSEGMENTEDREFERENCECURVE",3649235739:"IFCSECONDORDERPOLYNOMIALSPIRAL",550521510:"IFCROADPART",146592293:"IFCROAD",3818125796:"IFCRELADHERESTOELEMENT",4021432810:"IFCREFERENT",1891881377:"IFCRAILWAYPART",3992365140:"IFCRAILWAY",1763565496:"IFCRAILTYPE",1946335990:"IFCPOSITIONINGELEMENT",514975943:"IFCPAVEMENTTYPE",506776471:"IFCNAVIGATIONELEMENTTYPE",710110818:"IFCMOORINGDEVICETYPE",1950438474:"IFCMOBILETELECOMMUNICATIONSAPPLIANCETYPE",976884017:"IFCMARINEPART",525669439:"IFCMARINEFACILITY",1770583370:"IFCLIQUIDTERMINALTYPE",2176059722:"IFCLINEARELEMENT",679976338:"IFCKERBTYPE",3948183225:"IFCIMPACTPROTECTIONDEVICETYPE",2568555532:"IFCIMPACTPROTECTIONDEVICE",2898700619:"IFCGRADIENTCURVE",1594536857:"IFCGEOTECHNICALSTRATUM",4230923436:"IFCGEOTECHNICALELEMENT",4228831410:"IFCFACILITYPARTCOMMON",1310830890:"IFCFACILITYPART",24185140:"IFCFACILITY",4234616927:"IFCDIRECTRIXDERIVEDREFERENCESWEPTAREASOLID",1306400036:"IFCDEEPFOUNDATIONTYPE",4189326743:"IFCCOURSETYPE",2000195564:"IFCCOSINESPIRAL",3497074424:"IFCCLOTHOID",1626504194:"IFCBUILTELEMENTTYPE",3651464721:"IFCVEHICLETYPE",1229763772:"IFCTRIANGULATEDIRREGULARNETWORK",3665877780:"IFCTRANSPORTATIONDEVICETYPE",782932809:"IFCTHIRDORDERPOLYNOMIALSPIRAL",2735484536:"IFCSPIRAL",1356537516:"IFCSECTIONEDSURFACE",1290935644:"IFCSECTIONEDSOLIDHORIZONTAL",1862484736:"IFCSECTIONEDSOLID",1441486842:"IFCRELPOSITIONS",1033248425:"IFCRELASSOCIATESPROFILEDEF",3381221214:"IFCPOLYNOMIALCURVE",2485787929:"IFCOFFSETCURVEBYDISTANCES",590820931:"IFCOFFSETCURVE",3465909080:"IFCINDEXEDPOLYGONALTEXTUREMAP",593015953:"IFCDIRECTRIXCURVESWEPTAREASOLID",4212018352:"IFCCURVESEGMENT",3425423356:"IFCAXIS2PLACEMENTLINEAR",823603102:"IFCSEGMENT",2165702409:"IFCPOINTBYDISTANCEEXPRESSION",182550632:"IFCOPENCROSSPROFILEDEF",388784114:"IFCLINEARPLACEMENT",536804194:"IFCALIGNMENTHORIZONTALSEGMENT",3752311538:"IFCALIGNMENTCANTSEGMENT",1010789467:"IFCTEXTURECOORDINATEINDICESWITHVOIDS",222769930:"IFCTEXTURECOORDINATEINDICES",2691318326:"IFCQUANTITYNUMBER",3633395639:"IFCALIGNMENTVERTICALSEGMENT",2879124712:"IFCALIGNMENTPARAMETERSEGMENT",25142252:"IFCCONTROLLER",3087945054:"IFCALARM",4288193352:"IFCACTUATOR",630975310:"IFCUNITARYCONTROLELEMENT",4086658281:"IFCSENSOR",2295281155:"IFCPROTECTIVEDEVICETRIPPINGUNIT",182646315:"IFCFLOWINSTRUMENT",1426591983:"IFCFIRESUPPRESSIONTERMINAL",819412036:"IFCFILTER",3415622556:"IFCFAN",1003880860:"IFCELECTRICTIMECONTROL",402227799:"IFCELECTRICMOTOR",264262732:"IFCELECTRICGENERATOR",3310460725:"IFCELECTRICFLOWSTORAGEDEVICE",862014818:"IFCELECTRICDISTRIBUTIONBOARD",1904799276:"IFCELECTRICAPPLIANCE",1360408905:"IFCDUCTSILENCER",3518393246:"IFCDUCTSEGMENT",342316401:"IFCDUCTFITTING",562808652:"IFCDISTRIBUTIONCIRCUIT",4074379575:"IFCDAMPER",3640358203:"IFCCOOLINGTOWER",4136498852:"IFCCOOLEDBEAM",2272882330:"IFCCONDENSER",3571504051:"IFCCOMPRESSOR",3221913625:"IFCCOMMUNICATIONSAPPLIANCE",639361253:"IFCCOIL",3902619387:"IFCCHILLER",4217484030:"IFCCABLESEGMENT",1051757585:"IFCCABLEFITTING",3758799889:"IFCCABLECARRIERSEGMENT",635142910:"IFCCABLECARRIERFITTING",2938176219:"IFCBURNER",32344328:"IFCBOILER",2906023776:"IFCBEAMSTANDARDCASE",277319702:"IFCAUDIOVISUALAPPLIANCE",2056796094:"IFCAIRTOAIRHEATRECOVERY",177149247:"IFCAIRTERMINALBOX",1634111441:"IFCAIRTERMINAL",486154966:"IFCWINDOWSTANDARDCASE",4237592921:"IFCWASTETERMINAL",4156078855:"IFCWALLELEMENTEDCASE",4207607924:"IFCVALVE",4292641817:"IFCUNITARYEQUIPMENT",3179687236:"IFCUNITARYCONTROLELEMENTTYPE",3026737570:"IFCTUBEBUNDLE",3825984169:"IFCTRANSFORMER",812556717:"IFCTANK",1162798199:"IFCSWITCHINGDEVICE",385403989:"IFCSTRUCTURALLOADCASE",1404847402:"IFCSTACKTERMINAL",1999602285:"IFCSPACEHEATER",3420628829:"IFCSOLARDEVICE",3027962421:"IFCSLABSTANDARDCASE",3127900445:"IFCSLABELEMENTEDCASE",1329646415:"IFCSHADINGDEVICE",3053780830:"IFCSANITARYTERMINAL",2572171363:"IFCREINFORCINGBARTYPE",1232101972:"IFCRATIONALBSPLINECURVEWITHKNOTS",90941305:"IFCPUMP",655969474:"IFCPROTECTIVEDEVICETRIPPINGUNITTYPE",738039164:"IFCPROTECTIVEDEVICE",1156407060:"IFCPLATESTANDARDCASE",3612865200:"IFCPIPESEGMENT",310824031:"IFCPIPEFITTING",3694346114:"IFCOUTLET",144952367:"IFCOUTERBOUNDARYCURVE",2474470126:"IFCMOTORCONNECTION",1911478936:"IFCMEMBERSTANDARDCASE",1437502449:"IFCMEDICALDEVICE",629592764:"IFCLIGHTFIXTURE",76236018:"IFCLAMP",2176052936:"IFCJUNCTIONBOX",4175244083:"IFCINTERCEPTOR",2068733104:"IFCHUMIDIFIER",3319311131:"IFCHEATEXCHANGER",2188021234:"IFCFLOWMETER",1209101575:"IFCEXTERNALSPATIALELEMENT",484807127:"IFCEVAPORATOR",3747195512:"IFCEVAPORATIVECOOLER",2814081492:"IFCENGINE",2417008758:"IFCELECTRICDISTRIBUTIONBOARDTYPE",3242481149:"IFCDOORSTANDARDCASE",3205830791:"IFCDISTRIBUTIONSYSTEM",400855858:"IFCCOMMUNICATIONSAPPLIANCETYPE",905975707:"IFCCOLUMNSTANDARDCASE",1677625105:"IFCCIVILELEMENT",3296154744:"IFCCHIMNEY",2674252688:"IFCCABLEFITTINGTYPE",2188180465:"IFCBURNERTYPE",1177604601:"IFCBUILDINGSYSTEM",39481116:"IFCBUILDINGELEMENTPARTTYPE",1136057603:"IFCBOUNDARYCURVE",2461110595:"IFCBSPLINECURVEWITHKNOTS",1532957894:"IFCAUDIOVISUALAPPLIANCETYPE",4088093105:"IFCWORKCALENDAR",4009809668:"IFCWINDOWTYPE",926996030:"IFCVOIDINGFEATURE",2391383451:"IFCVIBRATIONISOLATOR",2415094496:"IFCTENDONTYPE",3081323446:"IFCTENDONANCHORTYPE",413509423:"IFCSYSTEMFURNITUREELEMENT",3101698114:"IFCSURFACEFEATURE",3657597509:"IFCSTRUCTURALSURFACEACTION",2757150158:"IFCSTRUCTURALCURVEREACTION",1004757350:"IFCSTRUCTURALCURVEACTION",338393293:"IFCSTAIRTYPE",1072016465:"IFCSOLARDEVICETYPE",4074543187:"IFCSHADINGDEVICETYPE",2157484638:"IFCSEAMCURVE",2781568857:"IFCROOFTYPE",2310774935:"IFCREINFORCINGMESHTYPE",964333572:"IFCREINFORCINGELEMENTTYPE",683857671:"IFCRATIONALBSPLINESURFACEWITHKNOTS",1469900589:"IFCRAMPTYPE",2839578677:"IFCPOLYGONALFACESET",1158309216:"IFCPILETYPE",3079942009:"IFCOPENINGSTANDARDCASE",1114901282:"IFCMEDICALDEVICETYPE",3113134337:"IFCINTERSECTIONCURVE",3946677679:"IFCINTERCEPTORTYPE",2571569899:"IFCINDEXEDPOLYCURVE",3493046030:"IFCGEOGRAPHICELEMENT",1509553395:"IFCFURNITURE",1893162501:"IFCFOOTINGTYPE",2853485674:"IFCEXTERNALSPATIALSTRUCTUREELEMENT",4148101412:"IFCEVENT",132023988:"IFCENGINETYPE",2397081782:"IFCELEMENTASSEMBLYTYPE",2323601079:"IFCDOORTYPE",1213902940:"IFCCYLINDRICALSURFACE",1525564444:"IFCCONSTRUCTIONPRODUCTRESOURCETYPE",4105962743:"IFCCONSTRUCTIONMATERIALRESOURCETYPE",2185764099:"IFCCONSTRUCTIONEQUIPMENTRESOURCETYPE",15328376:"IFCCOMPOSITECURVEONSURFACE",3875453745:"IFCCOMPLEXPROPERTYTEMPLATE",3893394355:"IFCCIVILELEMENTTYPE",2197970202:"IFCCHIMNEYTYPE",167062518:"IFCBSPLINESURFACEWITHKNOTS",2887950389:"IFCBSPLINESURFACE",2603310189:"IFCADVANCEDBREPWITHVOIDS",1635779807:"IFCADVANCEDBREP",2916149573:"IFCTRIANGULATEDFACESET",1935646853:"IFCTOROIDALSURFACE",2387106220:"IFCTESSELLATEDFACESET",3206491090:"IFCTASKTYPE",699246055:"IFCSURFACECURVE",4095615324:"IFCSUBCONTRACTRESOURCETYPE",603775116:"IFCSTRUCTURALSURFACEREACTION",4015995234:"IFCSPHERICALSURFACE",2481509218:"IFCSPATIALZONETYPE",463610769:"IFCSPATIALZONE",710998568:"IFCSPATIALELEMENTTYPE",1412071761:"IFCSPATIALELEMENT",3663146110:"IFCSIMPLEPROPERTYTEMPLATE",3243963512:"IFCREVOLVEDAREASOLIDTAPERED",816062949:"IFCREPARAMETRISEDCOMPOSITECURVESEGMENT",1521410863:"IFCRELSPACEBOUNDARY2NDLEVEL",3523091289:"IFCRELSPACEBOUNDARY1STLEVEL",427948657:"IFCRELINTERFERESELEMENTS",307848117:"IFCRELDEFINESBYTEMPLATE",1462361463:"IFCRELDEFINESBYOBJECT",2565941209:"IFCRELDECLARES",1027710054:"IFCRELASSIGNSTOGROUPBYFACTOR",3521284610:"IFCPROPERTYTEMPLATE",492091185:"IFCPROPERTYSETTEMPLATE",653396225:"IFCPROJECTLIBRARY",569719735:"IFCPROCEDURETYPE",3967405729:"IFCPREDEFINEDPROPERTYSET",1682466193:"IFCPCURVE",428585644:"IFCLABORRESOURCETYPE",2294589976:"IFCINDEXEDPOLYGONALFACEWITHVOIDS",178912537:"IFCINDEXEDPOLYGONALFACE",4095422895:"IFCGEOGRAPHICELEMENTTYPE",2652556860:"IFCFIXEDREFERENCESWEPTAREASOLID",2804161546:"IFCEXTRUDEDAREASOLIDTAPERED",4024345920:"IFCEVENTTYPE",2629017746:"IFCCURVEBOUNDEDSURFACE",1815067380:"IFCCREWRESOURCETYPE",3419103109:"IFCCONTEXT",2574617495:"IFCCONSTRUCTIONRESOURCETYPE",2059837836:"IFCCARTESIANPOINTLIST3D",1675464909:"IFCCARTESIANPOINTLIST2D",574549367:"IFCCARTESIANPOINTLIST",3406155212:"IFCADVANCEDFACE",3698973494:"IFCTYPERESOURCE",3736923433:"IFCTYPEPROCESS",901063453:"IFCTESSELLATEDITEM",1096409881:"IFCSWEPTDISKSOLIDPOLYGONAL",1042787934:"IFCRESOURCETIME",1608871552:"IFCRESOURCECONSTRAINTRELATIONSHIP",2943643501:"IFCRESOURCEAPPROVALRELATIONSHIP",2090586900:"IFCQUANTITYSET",1482703590:"IFCPROPERTYTEMPLATEDEFINITION",3778827333:"IFCPREDEFINEDPROPERTIES",2998442950:"IFCMIRROREDPROFILEDEF",853536259:"IFCMATERIALRELATIONSHIP",3404854881:"IFCMATERIALPROFILESETUSAGETAPERING",3079605661:"IFCMATERIALPROFILESETUSAGE",2852063980:"IFCMATERIALCONSTITUENTSET",3708119e3:"IFCMATERIALCONSTITUENT",1585845231:"IFCLAGTIME",2133299955:"IFCINDEXEDTRIANGLETEXTUREMAP",1437953363:"IFCINDEXEDTEXTUREMAP",3570813810:"IFCINDEXEDCOLOURMAP",1437805879:"IFCEXTERNALREFERENCERELATIONSHIP",297599258:"IFCEXTENDEDPROPERTIES",211053100:"IFCEVENTTIME",2713554722:"IFCCONVERSIONBASEDUNITWITHOFFSET",3285139300:"IFCCOLOURRGBLIST",1236880293:"IFCWORKTIME",1199560280:"IFCTIMEPERIOD",3611470254:"IFCTEXTUREVERTEXLIST",2771591690:"IFCTASKTIMERECURRING",1549132990:"IFCTASKTIME",2043862942:"IFCTABLECOLUMN",2934153892:"IFCSURFACEREINFORCEMENTAREA",609421318:"IFCSTRUCTURALLOADORRESULT",3478079324:"IFCSTRUCTURALLOADCONFIGURATION",1054537805:"IFCSCHEDULINGTIME",2439245199:"IFCRESOURCELEVELRELATIONSHIP",2433181523:"IFCREFERENCE",3915482550:"IFCRECURRENCEPATTERN",986844984:"IFCPROPERTYABSTRACTION",3843373140:"IFCPROJECTEDCRS",677532197:"IFCPRESENTATIONITEM",1507914824:"IFCMATERIALUSAGEDEFINITION",552965576:"IFCMATERIALPROFILEWITHOFFSETS",164193824:"IFCMATERIALPROFILESET",2235152071:"IFCMATERIALPROFILE",1847252529:"IFCMATERIALLAYERWITHOFFSETS",760658860:"IFCMATERIALDEFINITION",3057273783:"IFCMAPCONVERSION",4294318154:"IFCEXTERNALINFORMATION",1466758467:"IFCCOORDINATEREFERENCESYSTEM",1785450214:"IFCCOORDINATEOPERATION",775493141:"IFCCONNECTIONVOLUMEGEOMETRY",979691226:"IFCREINFORCINGBAR",3700593921:"IFCELECTRICDISTRIBUTIONPOINT",1062813311:"IFCDISTRIBUTIONCONTROLELEMENT",1052013943:"IFCDISTRIBUTIONCHAMBERELEMENT",578613899:"IFCCONTROLLERTYPE",2454782716:"IFCCHAMFEREDGEFEATURE",753842376:"IFCBEAM",3001207471:"IFCALARMTYPE",2874132201:"IFCACTUATORTYPE",3304561284:"IFCWINDOW",3512223829:"IFCWALLSTANDARDCASE",2391406946:"IFCWALL",3313531582:"IFCVIBRATIONISOLATORTYPE",2347447852:"IFCTENDONANCHOR",3824725483:"IFCTENDON",2515109513:"IFCSTRUCTURALANALYSISMODEL",4252922144:"IFCSTAIRFLIGHT",331165859:"IFCSTAIR",1529196076:"IFCSLAB",1783015770:"IFCSENSORTYPE",1376911519:"IFCROUNDEDEDGEFEATURE",2016517767:"IFCROOF",2320036040:"IFCREINFORCINGMESH",3027567501:"IFCREINFORCINGELEMENT",3055160366:"IFCRATIONALBEZIERCURVE",3283111854:"IFCRAMPFLIGHT",3024970846:"IFCRAMP",2262370178:"IFCRAILING",3171933400:"IFCPLATE",1687234759:"IFCPILE",1073191201:"IFCMEMBER",900683007:"IFCFOOTING",3508470533:"IFCFLOWTREATMENTDEVICE",2223149337:"IFCFLOWTERMINAL",707683696:"IFCFLOWSTORAGEDEVICE",987401354:"IFCFLOWSEGMENT",3132237377:"IFCFLOWMOVINGDEVICE",4037862832:"IFCFLOWINSTRUMENTTYPE",4278956645:"IFCFLOWFITTING",2058353004:"IFCFLOWCONTROLLER",4222183408:"IFCFIRESUPPRESSIONTERMINALTYPE",1810631287:"IFCFILTERTYPE",346874300:"IFCFANTYPE",1658829314:"IFCENERGYCONVERSIONDEVICE",857184966:"IFCELECTRICALELEMENT",1634875225:"IFCELECTRICALCIRCUIT",712377611:"IFCELECTRICTIMECONTROLTYPE",1217240411:"IFCELECTRICMOTORTYPE",1365060375:"IFCELECTRICHEATERTYPE",1534661035:"IFCELECTRICGENERATORTYPE",3277789161:"IFCELECTRICFLOWSTORAGEDEVICETYPE",663422040:"IFCELECTRICAPPLIANCETYPE",855621170:"IFCEDGEFEATURE",2030761528:"IFCDUCTSILENCERTYPE",3760055223:"IFCDUCTSEGMENTTYPE",869906466:"IFCDUCTFITTINGTYPE",395920057:"IFCDOOR",3041715199:"IFCDISTRIBUTIONPORT",3040386961:"IFCDISTRIBUTIONFLOWELEMENT",1945004755:"IFCDISTRIBUTIONELEMENT",2063403501:"IFCDISTRIBUTIONCONTROLELEMENTTYPE",1599208980:"IFCDISTRIBUTIONCHAMBERELEMENTTYPE",2635815018:"IFCDISCRETEACCESSORYTYPE",1335981549:"IFCDISCRETEACCESSORY",4147604152:"IFCDIAMETERDIMENSION",3961806047:"IFCDAMPERTYPE",3495092785:"IFCCURTAINWALL",1973544240:"IFCCOVERING",2954562838:"IFCCOOLINGTOWERTYPE",335055490:"IFCCOOLEDBEAMTYPE",488727124:"IFCCONSTRUCTIONPRODUCTRESOURCE",1060000209:"IFCCONSTRUCTIONMATERIALRESOURCE",3898045240:"IFCCONSTRUCTIONEQUIPMENTRESOURCE",1163958913:"IFCCONDITIONCRITERION",2188551683:"IFCCONDITION",2816379211:"IFCCONDENSERTYPE",3850581409:"IFCCOMPRESSORTYPE",843113511:"IFCCOLUMN",2301859152:"IFCCOILTYPE",2611217952:"IFCCIRCLE",2951183804:"IFCCHILLERTYPE",1285652485:"IFCCABLESEGMENTTYPE",3293546465:"IFCCABLECARRIERSEGMENTTYPE",395041908:"IFCCABLECARRIERFITTINGTYPE",1909888760:"IFCBUILDINGELEMENTPROXYTYPE",1095909175:"IFCBUILDINGELEMENTPROXY",2979338954:"IFCBUILDINGELEMENTPART",52481810:"IFCBUILDINGELEMENTCOMPONENT",3299480353:"IFCBUILDINGELEMENT",231477066:"IFCBOILERTYPE",1916977116:"IFCBEZIERCURVE",819618141:"IFCBEAMTYPE",1967976161:"IFCBSPLINECURVE",3460190687:"IFCASSET",2470393545:"IFCANGULARDIMENSION",1871374353:"IFCAIRTOAIRHEATRECOVERYTYPE",3352864051:"IFCAIRTERMINALTYPE",1411407467:"IFCAIRTERMINALBOXTYPE",3821786052:"IFCACTIONREQUEST",1213861670:"IFC2DCOMPOSITECURVE",1033361043:"IFCZONE",3342526732:"IFCWORKSCHEDULE",4218914973:"IFCWORKPLAN",1028945134:"IFCWORKCONTROL",1133259667:"IFCWASTETERMINALTYPE",1898987631:"IFCWALLTYPE",2769231204:"IFCVIRTUALELEMENT",728799441:"IFCVALVETYPE",1911125066:"IFCUNITARYEQUIPMENTTYPE",1600972822:"IFCTUBEBUNDLETYPE",3593883385:"IFCTRIMMEDCURVE",1620046519:"IFCTRANSPORTELEMENT",1692211062:"IFCTRANSFORMERTYPE",1637806684:"IFCTIMESERIESSCHEDULE",5716631:"IFCTANKTYPE",2254336722:"IFCSYSTEM",2315554128:"IFCSWITCHINGDEVICETYPE",148013059:"IFCSUBCONTRACTRESOURCE",1975003073:"IFCSTRUCTURALSURFACECONNECTION",2986769608:"IFCSTRUCTURALRESULTGROUP",1235345126:"IFCSTRUCTURALPOINTREACTION",734778138:"IFCSTRUCTURALPOINTCONNECTION",2082059205:"IFCSTRUCTURALPOINTACTION",3987759626:"IFCSTRUCTURALPLANARACTIONVARYING",1621171031:"IFCSTRUCTURALPLANARACTION",1252848954:"IFCSTRUCTURALLOADGROUP",1721250024:"IFCSTRUCTURALLINEARACTIONVARYING",1807405624:"IFCSTRUCTURALLINEARACTION",2445595289:"IFCSTRUCTURALCURVEMEMBERVARYING",214636428:"IFCSTRUCTURALCURVEMEMBER",4243806635:"IFCSTRUCTURALCURVECONNECTION",1179482911:"IFCSTRUCTURALCONNECTION",682877961:"IFCSTRUCTURALACTION",1039846685:"IFCSTAIRFLIGHTTYPE",3112655638:"IFCSTACKTERMINALTYPE",3812236995:"IFCSPACETYPE",652456506:"IFCSPACEPROGRAM",1305183839:"IFCSPACEHEATERTYPE",3856911033:"IFCSPACE",2533589738:"IFCSLABTYPE",4097777520:"IFCSITE",4105383287:"IFCSERVICELIFE",3517283431:"IFCSCHEDULETIMECONTROL",1768891740:"IFCSANITARYTERMINALTYPE",2863920197:"IFCRELASSIGNSTASKS",160246688:"IFCRELAGGREGATES",2324767716:"IFCRAMPFLIGHTTYPE",2893384427:"IFCRAILINGTYPE",3248260540:"IFCRADIUSDIMENSION",2250791053:"IFCPUMPTYPE",1842657554:"IFCPROTECTIVEDEVICETYPE",3651124850:"IFCPROJECTIONELEMENT",3642467123:"IFCPROJECTORDERRECORD",2904328755:"IFCPROJECTORDER",2744685151:"IFCPROCEDURE",3740093272:"IFCPORT",3724593414:"IFCPOLYLINE",4017108033:"IFCPLATETYPE",4231323485:"IFCPIPESEGMENTTYPE",804291784:"IFCPIPEFITTINGTYPE",3327091369:"IFCPERMIT",2382730787:"IFCPERFORMANCEHISTORY",2837617999:"IFCOUTLETTYPE",3425660407:"IFCORDERACTION",3588315303:"IFCOPENINGELEMENT",4143007308:"IFCOCCUPANT",1916936684:"IFCMOVE",977012517:"IFCMOTORCONNECTIONTYPE",3181161470:"IFCMEMBERTYPE",2108223431:"IFCMECHANICALFASTENERTYPE",377706215:"IFCMECHANICALFASTENER",2506943328:"IFCLINEARDIMENSION",1161773419:"IFCLIGHTFIXTURETYPE",1051575348:"IFCLAMPTYPE",3827777499:"IFCLABORRESOURCE",4288270099:"IFCJUNCTIONBOXTYPE",2391368822:"IFCINVENTORY",1806887404:"IFCHUMIDIFIERTYPE",1251058090:"IFCHEATEXCHANGERTYPE",2706460486:"IFCGROUP",3009204131:"IFCGRID",200128114:"IFCGASTERMINALTYPE",814719939:"IFCFURNITURESTANDARD",263784265:"IFCFURNISHINGELEMENT",3009222698:"IFCFLOWTREATMENTDEVICETYPE",2297155007:"IFCFLOWTERMINALTYPE",1339347760:"IFCFLOWSTORAGEDEVICETYPE",1834744321:"IFCFLOWSEGMENTTYPE",1482959167:"IFCFLOWMOVINGDEVICETYPE",3815607619:"IFCFLOWMETERTYPE",3198132628:"IFCFLOWFITTINGTYPE",3907093117:"IFCFLOWCONTROLLERTYPE",1287392070:"IFCFEATUREELEMENTSUBTRACTION",2143335405:"IFCFEATUREELEMENTADDITION",2827207264:"IFCFEATUREELEMENT",2489546625:"IFCFASTENERTYPE",647756555:"IFCFASTENER",3737207727:"IFCFACETEDBREPWITHVOIDS",807026263:"IFCFACETEDBREP",3390157468:"IFCEVAPORATORTYPE",3174744832:"IFCEVAPORATIVECOOLERTYPE",3272907226:"IFCEQUIPMENTSTANDARD",1962604670:"IFCEQUIPMENTELEMENT",2107101300:"IFCENERGYCONVERSIONDEVICETYPE",1704287377:"IFCELLIPSE",2590856083:"IFCELEMENTCOMPONENTTYPE",1623761950:"IFCELEMENTCOMPONENT",4123344466:"IFCELEMENTASSEMBLY",1758889154:"IFCELEMENT",360485395:"IFCELECTRICALBASEPROPERTIES",3849074793:"IFCDISTRIBUTIONFLOWELEMENTTYPE",3256556792:"IFCDISTRIBUTIONELEMENTTYPE",681481545:"IFCDIMENSIONCURVEDIRECTEDCALLOUT",1457835157:"IFCCURTAINWALLTYPE",3295246426:"IFCCREWRESOURCE",1916426348:"IFCCOVERINGTYPE",1419761937:"IFCCOSTSCHEDULE",3895139033:"IFCCOSTITEM",3293443760:"IFCCONTROL",2559216714:"IFCCONSTRUCTIONRESOURCE",2510884976:"IFCCONIC",3732776249:"IFCCOMPOSITECURVE",300633059:"IFCCOLUMNTYPE",2937912522:"IFCCIRCLEHOLLOWPROFILEDEF",3124254112:"IFCBUILDINGSTOREY",1950629157:"IFCBUILDINGELEMENTTYPE",4031249490:"IFCBUILDING",1260505505:"IFCBOUNDEDCURVE",3649129432:"IFCBOOLEANCLIPPINGRESULT",1334484129:"IFCBLOCK",3207858831:"IFCASYMMETRICISHAPEPROFILEDEF",1674181508:"IFCANNOTATION",2296667514:"IFCACTOR",2097647324:"IFCTRANSPORTELEMENTTYPE",3473067441:"IFCTASK",1580310250:"IFCSYSTEMFURNITUREELEMENTTYPE",4124788165:"IFCSURFACEOFREVOLUTION",2809605785:"IFCSURFACEOFLINEAREXTRUSION",2028607225:"IFCSURFACECURVESWEPTAREASOLID",4070609034:"IFCSTRUCTUREDDIMENSIONCALLOUT",2218152070:"IFCSTRUCTURALSURFACEMEMBERVARYING",3979015343:"IFCSTRUCTURALSURFACEMEMBER",3689010777:"IFCSTRUCTURALREACTION",530289379:"IFCSTRUCTURALMEMBER",3136571912:"IFCSTRUCTURALITEM",3544373492:"IFCSTRUCTURALACTIVITY",451544542:"IFCSPHERE",3893378262:"IFCSPATIALSTRUCTUREELEMENTTYPE",2706606064:"IFCSPATIALSTRUCTUREELEMENT",3626867408:"IFCRIGHTCIRCULARCYLINDER",4158566097:"IFCRIGHTCIRCULARCONE",1856042241:"IFCREVOLVEDAREASOLID",2914609552:"IFCRESOURCE",1401173127:"IFCRELVOIDSELEMENT",3451746338:"IFCRELSPACEBOUNDARY",366585022:"IFCRELSERVICESBUILDINGS",4122056220:"IFCRELSEQUENCE",1058617721:"IFCRELSCHEDULESCOSTITEMS",1245217292:"IFCRELREFERENCEDINSPATIALSTRUCTURE",750771296:"IFCRELPROJECTSELEMENT",202636808:"IFCRELOVERRIDESPROPERTIES",2051452291:"IFCRELOCCUPIESSPACES",3268803585:"IFCRELNESTS",4189434867:"IFCRELINTERACTIONREQUIREMENTS",279856033:"IFCRELFLOWCONTROLELEMENTS",3940055652:"IFCRELFILLSELEMENT",781010003:"IFCRELDEFINESBYTYPE",4186316022:"IFCRELDEFINESBYPROPERTIES",693640335:"IFCRELDEFINES",2551354335:"IFCRELDECOMPOSES",2802773753:"IFCRELCOVERSSPACES",886880790:"IFCRELCOVERSBLDGELEMENTS",3242617779:"IFCRELCONTAINEDINSPATIALSTRUCTURE",3678494232:"IFCRELCONNECTSWITHREALIZINGELEMENTS",504942748:"IFCRELCONNECTSWITHECCENTRICITY",1638771189:"IFCRELCONNECTSSTRUCTURALMEMBER",3912681535:"IFCRELCONNECTSSTRUCTURALELEMENT",2127690289:"IFCRELCONNECTSSTRUCTURALACTIVITY",3190031847:"IFCRELCONNECTSPORTS",4201705270:"IFCRELCONNECTSPORTTOELEMENT",3945020480:"IFCRELCONNECTSPATHELEMENTS",1204542856:"IFCRELCONNECTSELEMENTS",826625072:"IFCRELCONNECTS",2851387026:"IFCRELASSOCIATESPROFILEPROPERTIES",2655215786:"IFCRELASSOCIATESMATERIAL",3840914261:"IFCRELASSOCIATESLIBRARY",982818633:"IFCRELASSOCIATESDOCUMENT",2728634034:"IFCRELASSOCIATESCONSTRAINT",919958153:"IFCRELASSOCIATESCLASSIFICATION",4095574036:"IFCRELASSOCIATESAPPROVAL",1327628568:"IFCRELASSOCIATESAPPLIEDVALUE",1865459582:"IFCRELASSOCIATES",205026976:"IFCRELASSIGNSTORESOURCE",3372526763:"IFCRELASSIGNSTOPROJECTORDER",2857406711:"IFCRELASSIGNSTOPRODUCT",4278684876:"IFCRELASSIGNSTOPROCESS",1307041759:"IFCRELASSIGNSTOGROUP",2495723537:"IFCRELASSIGNSTOCONTROL",1683148259:"IFCRELASSIGNSTOACTOR",3939117080:"IFCRELASSIGNS",3454111270:"IFCRECTANGULARTRIMMEDSURFACE",2798486643:"IFCRECTANGULARPYRAMID",2770003689:"IFCRECTANGLEHOLLOWPROFILEDEF",3219374653:"IFCPROXY",1451395588:"IFCPROPERTYSET",4194566429:"IFCPROJECTIONCURVE",103090709:"IFCPROJECT",4208778838:"IFCPRODUCT",2945172077:"IFCPROCESS",220341763:"IFCPLANE",603570806:"IFCPLANARBOX",3566463478:"IFCPERMEABLECOVERINGPROPERTIES",3505215534:"IFCOFFSETCURVE3D",3388369263:"IFCOFFSETCURVE2D",3888040117:"IFCOBJECT",1425443689:"IFCMANIFOLDSOLIDBREP",1281925730:"IFCLINE",572779678:"IFCLSHAPEPROFILEDEF",1484403080:"IFCISHAPEPROFILEDEF",987898635:"IFCGEOMETRICCURVESET",1268542332:"IFCFURNITURETYPE",4238390223:"IFCFURNISHINGELEMENTTYPE",3455213021:"IFCFLUIDFLOWPROPERTIES",315944413:"IFCFILLAREASTYLETILES",4203026998:"IFCFILLAREASTYLETILESYMBOLWITHSTYLE",374418227:"IFCFILLAREASTYLEHATCHING",2047409740:"IFCFACEBASEDSURFACEMODEL",477187591:"IFCEXTRUDEDAREASOLID",80994333:"IFCENERGYPROPERTIES",2835456948:"IFCELLIPSEPROFILEDEF",2777663545:"IFCELEMENTARYSURFACE",339256511:"IFCELEMENTTYPE",1883228015:"IFCELEMENTQUANTITY",1472233963:"IFCEDGELOOP",4006246654:"IFCDRAUGHTINGPREDEFINEDCURVEFONT",445594917:"IFCDRAUGHTINGPREDEFINEDCOLOUR",3073041342:"IFCDRAUGHTINGCALLOUT",526551008:"IFCDOORSTYLE",1714330368:"IFCDOORPANELPROPERTIES",2963535650:"IFCDOORLININGPROPERTIES",32440307:"IFCDIRECTION",4054601972:"IFCDIMENSIONCURVETERMINATOR",606661476:"IFCDIMENSIONCURVE",693772133:"IFCDEFINEDSYMBOL",2827736869:"IFCCURVEBOUNDEDPLANE",2601014836:"IFCCURVE",2147822146:"IFCCSGSOLID",2506170314:"IFCCSGPRIMITIVE3D",194851669:"IFCCRANERAILFSHAPEPROFILEDEF",4133800736:"IFCCRANERAILASHAPEPROFILEDEF",2485617015:"IFCCOMPOSITECURVESEGMENT",2205249479:"IFCCLOSEDSHELL",1383045692:"IFCCIRCLEPROFILEDEF",1416205885:"IFCCARTESIANTRANSFORMATIONOPERATOR3DNONUNIFORM",3331915920:"IFCCARTESIANTRANSFORMATIONOPERATOR3D",3486308946:"IFCCARTESIANTRANSFORMATIONOPERATOR2DNONUNIFORM",3749851601:"IFCCARTESIANTRANSFORMATIONOPERATOR2D",59481748:"IFCCARTESIANTRANSFORMATIONOPERATOR",1123145078:"IFCCARTESIANPOINT",2898889636:"IFCCSHAPEPROFILEDEF",2713105998:"IFCBOXEDHALFSPACE",2581212453:"IFCBOUNDINGBOX",4182860854:"IFCBOUNDEDSURFACE",2736907675:"IFCBOOLEANRESULT",2740243338:"IFCAXIS2PLACEMENT3D",3125803723:"IFCAXIS2PLACEMENT2D",4261334040:"IFCAXIS1PLACEMENT",1302238472:"IFCANNOTATIONSURFACE",2265737646:"IFCANNOTATIONFILLAREAOCCURRENCE",669184980:"IFCANNOTATIONFILLAREA",3288037868:"IFCANNOTATIONCURVEOCCURRENCE",2543172580:"IFCZSHAPEPROFILEDEF",1299126871:"IFCWINDOWSTYLE",512836454:"IFCWINDOWPANELPROPERTIES",336235671:"IFCWINDOWLININGPROPERTIES",2759199220:"IFCVERTEXLOOP",1417489154:"IFCVECTOR",427810014:"IFCUSHAPEPROFILEDEF",2347495698:"IFCTYPEPRODUCT",1628702193:"IFCTYPEOBJECT",1345879162:"IFCTWODIRECTIONREPEATFACTOR",2715220739:"IFCTRAPEZIUMPROFILEDEF",3124975700:"IFCTEXTLITERALWITHEXTENT",4282788508:"IFCTEXTLITERAL",3028897424:"IFCTERMINATORSYMBOL",3071757647:"IFCTSHAPEPROFILEDEF",230924584:"IFCSWEPTSURFACE",1260650574:"IFCSWEPTDISKSOLID",2247615214:"IFCSWEPTAREASOLID",1878645084:"IFCSURFACESTYLERENDERING",2513912981:"IFCSURFACE",2233826070:"IFCSUBEDGE",3653947884:"IFCSTRUCTURALSTEELPROFILEPROPERTIES",3843319758:"IFCSTRUCTURALPROFILEPROPERTIES",1190533807:"IFCSTRUCTURALLOADSINGLEFORCEWARPING",1597423693:"IFCSTRUCTURALLOADSINGLEFORCE",1973038258:"IFCSTRUCTURALLOADSINGLEDISPLACEMENTDISTORTION",2473145415:"IFCSTRUCTURALLOADSINGLEDISPLACEMENT",2668620305:"IFCSTRUCTURALLOADPLANARFORCE",1595516126:"IFCSTRUCTURALLOADLINEARFORCE",390701378:"IFCSPACETHERMALLOADPROPERTIES",1202362311:"IFCSOUNDVALUE",2485662743:"IFCSOUNDPROPERTIES",723233188:"IFCSOLIDMODEL",2609359061:"IFCSLIPPAGECONNECTIONCONDITION",4124623270:"IFCSHELLBASEDSURFACEMODEL",2411513650:"IFCSERVICELIFEFACTOR",1509187699:"IFCSECTIONEDSPINE",2778083089:"IFCROUNDEDRECTANGLEPROFILEDEF",478536968:"IFCRELATIONSHIP",3765753017:"IFCREINFORCEMENTDEFINITIONPROPERTIES",3413951693:"IFCREGULARTIMESERIES",3615266464:"IFCRECTANGLEPROFILEDEF",110355661:"IFCPROPERTYTABLEVALUE",3650150729:"IFCPROPERTYSINGLEVALUE",3357820518:"IFCPROPERTYSETDEFINITION",941946838:"IFCPROPERTYREFERENCEVALUE",2752243245:"IFCPROPERTYLISTVALUE",4166981789:"IFCPROPERTYENUMERATEDVALUE",1680319473:"IFCPROPERTYDEFINITION",871118103:"IFCPROPERTYBOUNDEDVALUE",673634403:"IFCPRODUCTDEFINITIONSHAPE",179317114:"IFCPREDEFINEDPOINTMARKERSYMBOL",433424934:"IFCPREDEFINEDDIMENSIONSYMBOL",2559016684:"IFCPREDEFINEDCURVEFONT",759155922:"IFCPREDEFINEDCOLOUR",2775532180:"IFCPOLYGONALBOUNDEDHALFSPACE",2924175390:"IFCPOLYLOOP",1423911732:"IFCPOINTONSURFACE",4022376103:"IFCPOINTONCURVE",2067069095:"IFCPOINT",1663979128:"IFCPLANAREXTENT",2004835150:"IFCPLACEMENT",597895409:"IFCPIXELTEXTURE",3021840470:"IFCPHYSICALCOMPLEXQUANTITY",2519244187:"IFCPATH",2529465313:"IFCPARAMETERIZEDPROFILEDEF",1029017970:"IFCORIENTEDEDGE",2665983363:"IFCOPENSHELL",2833995503:"IFCONEDIRECTIONREPEATFACTOR",219451334:"IFCOBJECTDEFINITION",1430189142:"IFCMECHANICALCONCRETEMATERIALPROPERTIES",2022407955:"IFCMATERIALDEFINITIONREPRESENTATION",2347385850:"IFCMAPPEDITEM",1008929658:"IFCLOOP",2624227202:"IFCLOCALPLACEMENT",3422422726:"IFCLIGHTSOURCESPOT",1520743889:"IFCLIGHTSOURCEPOSITIONAL",4266656042:"IFCLIGHTSOURCEGONIOMETRIC",2604431987:"IFCLIGHTSOURCEDIRECTIONAL",125510826:"IFCLIGHTSOURCEAMBIENT",1402838566:"IFCLIGHTSOURCE",3741457305:"IFCIRREGULARTIMESERIES",3905492369:"IFCIMAGETEXTURE",2445078500:"IFCHYGROSCOPICMATERIALPROPERTIES",812098782:"IFCHALFSPACESOLID",178086475:"IFCGRIDPLACEMENT",3590301190:"IFCGEOMETRICSET",4142052618:"IFCGEOMETRICREPRESENTATIONSUBCONTEXT",2453401579:"IFCGEOMETRICREPRESENTATIONITEM",3448662350:"IFCGEOMETRICREPRESENTATIONCONTEXT",1446786286:"IFCGENERALPROFILEPROPERTIES",803998398:"IFCGENERALMATERIALPROPERTIES",3857492461:"IFCFUELPROPERTIES",738692330:"IFCFILLAREASTYLE",4219587988:"IFCFAILURECONNECTIONCONDITION",3008276851:"IFCFACESURFACE",803316827:"IFCFACEOUTERBOUND",1809719519:"IFCFACEBOUND",2556980723:"IFCFACE",1860660968:"IFCEXTENDEDMATERIALPROPERTIES",476780140:"IFCEDGECURVE",3900360178:"IFCEDGE",4170525392:"IFCDRAUGHTINGPREDEFINEDTEXTFONT",3732053477:"IFCDOCUMENTREFERENCE",1694125774:"IFCDIMENSIONPAIR",2273265877:"IFCDIMENSIONCALLOUTRELATIONSHIP",3632507154:"IFCDERIVEDPROFILEDEF",3800577675:"IFCCURVESTYLE",2889183280:"IFCCONVERSIONBASEDUNIT",3050246964:"IFCCONTEXTDEPENDENTUNIT",45288368:"IFCCONNECTIONPOINTECCENTRICITY",1981873012:"IFCCONNECTIONCURVEGEOMETRY",370225590:"IFCCONNECTEDFACESET",1485152156:"IFCCOMPOSITEPROFILEDEF",2542286263:"IFCCOMPLEXPROPERTY",776857604:"IFCCOLOURRGB",647927063:"IFCCLASSIFICATIONREFERENCE",3150382593:"IFCCENTERLINEPROFILEDEF",616511568:"IFCBLOBTEXTURE",2705031697:"IFCARBITRARYPROFILEDEFWITHVOIDS",1310608509:"IFCARBITRARYOPENPROFILEDEF",3798115385:"IFCARBITRARYCLOSEDPROFILEDEF",2297822566:"IFCANNOTATIONTEXTOCCURRENCE",3612888222:"IFCANNOTATIONSYMBOLOCCURRENCE",962685235:"IFCANNOTATIONSURFACEOCCURRENCE",2442683028:"IFCANNOTATIONOCCURRENCE",1065908215:"IFCWATERPROPERTIES",891718957:"IFCVIRTUALGRIDINTERSECTION",1907098498:"IFCVERTEXPOINT",3304826586:"IFCVERTEXBASEDTEXTUREMAP",2799835756:"IFCVERTEX",180925521:"IFCUNITASSIGNMENT",1735638870:"IFCTOPOLOGYREPRESENTATION",1377556343:"IFCTOPOLOGICALREPRESENTATIONITEM",581633288:"IFCTIMESERIESVALUE",1718945513:"IFCTIMESERIESREFERENCERELATIONSHIP",3101149627:"IFCTIMESERIES",3317419933:"IFCTHERMALMATERIALPROPERTIES",1210645708:"IFCTEXTUREVERTEX",2552916305:"IFCTEXTUREMAP",1742049831:"IFCTEXTURECOORDINATEGENERATOR",280115917:"IFCTEXTURECOORDINATE",1484833681:"IFCTEXTSTYLEWITHBOXCHARACTERISTICS",1640371178:"IFCTEXTSTYLETEXTMODEL",2636378356:"IFCTEXTSTYLEFORDEFINEDFONT",1983826977:"IFCTEXTSTYLEFONTMODEL",1447204868:"IFCTEXTSTYLE",912023232:"IFCTELECOMADDRESS",531007025:"IFCTABLEROW",985171141:"IFCTABLE",1290481447:"IFCSYMBOLSTYLE",626085974:"IFCSURFACETEXTURE",1351298697:"IFCSURFACESTYLEWITHTEXTURES",846575682:"IFCSURFACESTYLESHADING",1607154358:"IFCSURFACESTYLEREFRACTION",3303107099:"IFCSURFACESTYLELIGHTING",1300840506:"IFCSURFACESTYLE",3049322572:"IFCSTYLEDREPRESENTATION",3958052878:"IFCSTYLEDITEM",2830218821:"IFCSTYLEMODEL",3408363356:"IFCSTRUCTURALLOADTEMPERATURE",2525727697:"IFCSTRUCTURALLOADSTATIC",2162789131:"IFCSTRUCTURALLOAD",2273995522:"IFCSTRUCTURALCONNECTIONCONDITION",3692461612:"IFCSIMPLEPROPERTY",4240577450:"IFCSHAPEREPRESENTATION",3982875396:"IFCSHAPEMODEL",867548509:"IFCSHAPEASPECT",4165799628:"IFCSECTIONREINFORCEMENTPROPERTIES",2042790032:"IFCSECTIONPROPERTIES",448429030:"IFCSIUNIT",2341007311:"IFCROOT",3679540991:"IFCRIBPLATEPROFILEPROPERTIES",1660063152:"IFCREPRESENTATIONMAP",3008791417:"IFCREPRESENTATIONITEM",3377609919:"IFCREPRESENTATIONCONTEXT",1076942058:"IFCREPRESENTATION",1222501353:"IFCRELAXATION",1580146022:"IFCREINFORCEMENTBARPROPERTIES",2692823254:"IFCREFERENCESVALUEDOCUMENT",825690147:"IFCQUANTITYWEIGHT",2405470396:"IFCQUANTITYVOLUME",3252649465:"IFCQUANTITYTIME",931644368:"IFCQUANTITYLENGTH",2093928680:"IFCQUANTITYCOUNT",2044713172:"IFCQUANTITYAREA",3710013099:"IFCPROPERTYENUMERATION",148025276:"IFCPROPERTYDEPENDENCYRELATIONSHIP",3896028662:"IFCPROPERTYCONSTRAINTRELATIONSHIP",2598011224:"IFCPROPERTY",2802850158:"IFCPROFILEPROPERTIES",3958567839:"IFCPROFILEDEF",2267347899:"IFCPRODUCTSOFCOMBUSTIONPROPERTIES",2095639259:"IFCPRODUCTREPRESENTATION",2417041796:"IFCPRESENTATIONSTYLEASSIGNMENT",3119450353:"IFCPRESENTATIONSTYLE",1304840413:"IFCPRESENTATIONLAYERWITHSTYLE",2022622350:"IFCPRESENTATIONLAYERASSIGNMENT",1775413392:"IFCPREDEFINEDTEXTFONT",3213052703:"IFCPREDEFINEDTERMINATORSYMBOL",990879717:"IFCPREDEFINEDSYMBOL",3727388367:"IFCPREDEFINEDITEM",3355820592:"IFCPOSTALADDRESS",2226359599:"IFCPHYSICALSIMPLEQUANTITY",2483315170:"IFCPHYSICALQUANTITY",101040310:"IFCPERSONANDORGANIZATION",2077209135:"IFCPERSON",1207048766:"IFCOWNERHISTORY",1411181986:"IFCORGANIZATIONRELATIONSHIP",4251960020:"IFCORGANIZATION",1227763645:"IFCOPTICALMATERIALPROPERTIES",2251480897:"IFCOBJECTIVE",3701648758:"IFCOBJECTPLACEMENT",1918398963:"IFCNAMEDUNIT",2706619895:"IFCMONETARYUNIT",3368373690:"IFCMETRIC",677618848:"IFCMECHANICALSTEELMATERIALPROPERTIES",4256014907:"IFCMECHANICALMATERIALPROPERTIES",2597039031:"IFCMEASUREWITHUNIT",3265635763:"IFCMATERIALPROPERTIES",2199411900:"IFCMATERIALLIST",1303795690:"IFCMATERIALLAYERSETUSAGE",3303938423:"IFCMATERIALLAYERSET",248100487:"IFCMATERIALLAYER",1847130766:"IFCMATERIALCLASSIFICATIONRELATIONSHIP",1838606355:"IFCMATERIAL",30780891:"IFCLOCALTIME",1566485204:"IFCLIGHTINTENSITYDISTRIBUTION",4162380809:"IFCLIGHTDISTRIBUTIONDATA",3452421091:"IFCLIBRARYREFERENCE",2655187982:"IFCLIBRARYINFORMATION",3020489413:"IFCIRREGULARTIMESERIESVALUE",852622518:"IFCGRIDAXIS",3548104201:"IFCEXTERNALLYDEFINEDTEXTFONT",3207319532:"IFCEXTERNALLYDEFINEDSYMBOL",1040185647:"IFCEXTERNALLYDEFINEDSURFACESTYLE",2242383968:"IFCEXTERNALLYDEFINEDHATCHSTYLE",3200245327:"IFCEXTERNALREFERENCE",1648886627:"IFCENVIRONMENTALIMPACTVALUE",3796139169:"IFCDRAUGHTINGCALLOUTRELATIONSHIP",770865208:"IFCDOCUMENTINFORMATIONRELATIONSHIP",1154170062:"IFCDOCUMENTINFORMATION",1376555844:"IFCDOCUMENTELECTRONICFORMAT",2949456006:"IFCDIMENSIONALEXPONENTS",1045800335:"IFCDERIVEDUNITELEMENT",1765591967:"IFCDERIVEDUNIT",1072939445:"IFCDATEANDTIME",3510044353:"IFCCURVESTYLEFONTPATTERN",2367409068:"IFCCURVESTYLEFONTANDSCALING",1105321065:"IFCCURVESTYLEFONT",539742890:"IFCCURRENCYRELATIONSHIP",602808272:"IFCCOSTVALUE",1065062679:"IFCCOORDINATEDUNIVERSALTIMEOFFSET",347226245:"IFCCONSTRAINTRELATIONSHIP",613356794:"IFCCONSTRAINTCLASSIFICATIONRELATIONSHIP",1658513725:"IFCCONSTRAINTAGGREGATIONRELATIONSHIP",1959218052:"IFCCONSTRAINT",2732653382:"IFCCONNECTIONSURFACEGEOMETRY",4257277454:"IFCCONNECTIONPORTGEOMETRY",2614616156:"IFCCONNECTIONPOINTGEOMETRY",2859738748:"IFCCONNECTIONGEOMETRY",3264961684:"IFCCOLOURSPECIFICATION",3639012971:"IFCCLASSIFICATIONNOTATIONFACET",938368621:"IFCCLASSIFICATIONNOTATION",1098599126:"IFCCLASSIFICATIONITEMRELATIONSHIP",1767535486:"IFCCLASSIFICATIONITEM",747523909:"IFCCLASSIFICATION",622194075:"IFCCALENDARDATE",2069777674:"IFCBOUNDARYNODECONDITIONWARPING",1387855156:"IFCBOUNDARYNODECONDITION",3367102660:"IFCBOUNDARYFACECONDITION",1560379544:"IFCBOUNDARYEDGECONDITION",4037036970:"IFCBOUNDARYCONDITION",3869604511:"IFCAPPROVALRELATIONSHIP",390851274:"IFCAPPROVALPROPERTYRELATIONSHIP",2080292479:"IFCAPPROVALACTORRELATIONSHIP",130549933:"IFCAPPROVAL",1110488051:"IFCAPPLIEDVALUERELATIONSHIP",411424972:"IFCAPPLIEDVALUE",639542469:"IFCAPPLICATION",618182010:"IFCADDRESS",3630933823:"IFCACTORROLE",599546466:"FILE_DESCRIPTION",1390159747:"FILE_NAME",1109904537:"FILE_SCHEMA"};class be{static async getUnits(i){var r,o,a;const{IFCUNITASSIGNMENT:t}=k,e=await i.getAllPropertiesOfType(t);if(!e)return 1;const s=Object.keys(e),n=e[parseInt(s[0],10)];for(const l of n.Units){if(l.value===void 0||l.value===null)continue;const h=await i.getProperties(l.value);if(!h||!h.UnitType||!h.UnitType.value||h.UnitType.value!=="LENGTHUNIT")continue;let I=1,u=1;return h.Name.value==="METRE"&&(u=1),h.Name.value==="FOOT"&&(u=.3048),((r=h.Prefix)==null?void 0:r.value)==="MILLI"?I=.001:((o=h.Prefix)==null?void 0:o.value)==="CENTI"?I=.01:((a=h.Prefix)==null?void 0:a.value)==="DECI"&&(I=.1),u*I}return 1}static async findItemByGuid(i,t){var s;const e=i.getAllPropertiesIDs();for(const n of e){const r=await i.getProperties(n);if(r&&((s=r.GlobalId)==null?void 0:s.value)===t)return r}return null}static async getRelationMap(i,t,e){var a;const n=e??(async()=>{}),r={},o=i.getAllPropertiesIDs();for(const l of o){const h=await i.getProperties(l);if(!h)continue;const f=h.type===t,I=Object.keys(h).find(p=>p.startsWith("Relating")),u=Object.keys(h).find(p=>p.startsWith("Related"));if(!(f&&I&&u))continue;const d=await i.getProperties((a=h[I])==null?void 0:a.value),E=h[u];if(!d||!E||!(E&&Array.isArray(E)))continue;const T=E.map(p=>p.value);await n(d.expressID,T),r[d.expressID]=T}return r}static async getQsetQuantities(i,t,e){const n=e??(()=>{}),r=await i.getProperties(t);return!r||r.type!==k.IFCELEMENTQUANTITY?null:(r.Quantities??[{}]).map(l=>(l.value&&n(l.value),l.value)).filter(l=>l!==null)}static async getPsetProps(i,t,e){const n=e??(()=>{}),r=await i.getProperties(t);return!r||r.type!==k.IFCPROPERTYSET?null:(r.HasProperties??[{}]).map(l=>(l.value&&n(l.value),l.value)).filter(l=>l!==null)}static async getPsetRel(i,t){var o;if(!await i.getProperties(t))return null;const s=await i.getAllPropertiesOfType(k.IFCRELDEFINESBYPROPERTIES);if(!s)return null;const n=Object.values(s);let r=null;for(const a of n)((o=a.RelatingPropertyDefinition)==null?void 0:o.value)===t&&(r=a.expressID);return r}static async getQsetRel(i,t){return be.getPsetRel(i,t)}static async getEntityName(i,t){var r;const e=await i.getProperties(t);if(!e)return{key:null,name:null};const s=Object.keys(e).find(o=>o.endsWith("Name"))??null,n=s?(r=e[s])==null?void 0:r.value:null;return{key:s,name:n}}static async getQuantityValue(i,t){const e=await i.getProperties(t);if(!e)return{key:null,value:null};const s=Object.keys(e).find(r=>r.endsWith("Value"))??null;let n;return s===null||e[s]===void 0||e[s]===null?n=null:n=e[s].value,{key:s,value:n}}static isRel(i){return _i[i].startsWith("IFCREL")}static async attributeExists(i,t,e){const s=await i.getProperties(t);return s?Object.keys(s).includes(e):!1}static async groupEntitiesByType(i,t){var s;const e=new Map;for(const n of t){const r=await i.getProperties(n);if(!r)continue;const o=r.type;e.get(o)||e.set(o,new Set),(s=e.get(o))==null||s.add(n)}return e}}const ao={IFCURIREFERENCE:"IfcUriReference",IFCTIME:"IfcTime",IFCTEMPERATURERATEOFCHANGEMEASURE:"IfcTemperatureRateOfChangeMeasure",IFCSOUNDPRESSURELEVELMEASURE:"IfcSoundPressureLevelMeasure",IFCSOUNDPOWERLEVELMEASURE:"IfcSoundPowerLevelMeasure",IFCPROPERTYSETDEFINITIONSET:"IfcPropertySetDefinitionSet",IFCPOSITIVEINTEGER:"IfcPositiveInteger",IFCNONNEGATIVELENGTHMEASURE:"IfcNonNegativeLengthMeasure",IFCLINEINDEX:"IfcLineIndex",IFCLANGUAGEID:"IfcLanguageId",IFCDURATION:"IfcDuration",IFCDAYINWEEKNUMBER:"IfcDayInWeekNumber",IFCDATETIME:"IfcDateTime",IFCDATE:"IfcDate",IFCCARDINALPOINTREFERENCE:"IfcCardinalPointReference",IFCBINARY:"IfcBinary",IFCAREADENSITYMEASURE:"IfcAreaDensityMeasure",IFCARCINDEX:"IfcArcIndex",IFCYEARNUMBER:"IfcYearNumber",IFCWARPINGMOMENTMEASURE:"IfcWarpingMomentMeasure",IFCWARPINGCONSTANTMEASURE:"IfcWarpingConstantMeasure",IFCVOLUMETRICFLOWRATEMEASURE:"IfcVolumetricFlowRateMeasure",IFCVOLUMEMEASURE:"IfcVolumeMeasure",IFCVAPORPERMEABILITYMEASURE:"IfcVaporPermeabilityMeasure",IFCTORQUEMEASURE:"IfcTorqueMeasure",IFCTIMESTAMP:"IfcTimestamp",IFCTIMEMEASURE:"IfcTimeMeasure",IFCTHERMODYNAMICTEMPERATUREMEASURE:"IfcThermodynamicTemperatureMeasure",IFCTHERMALTRANSMITTANCEMEASURE:"IfcThermalTransmittanceMeasure",IFCTHERMALRESISTANCEMEASURE:"IfcThermalResistanceMeasure",IFCTHERMALEXPANSIONCOEFFICIENTMEASURE:"IfcThermalExpansionCoefficientMeasure",IFCTHERMALCONDUCTIVITYMEASURE:"IfcThermalConductivityMeasure",IFCTHERMALADMITTANCEMEASURE:"IfcThermalAdmittanceMeasure",IFCTEXTTRANSFORMATION:"IfcTextTransformation",IFCTEXTFONTNAME:"IfcTextFontName",IFCTEXTDECORATION:"IfcTextDecoration",IFCTEXTALIGNMENT:"IfcTextAlignment",IFCTEXT:"IfcText",IFCTEMPERATUREGRADIENTMEASURE:"IfcTemperatureGradientMeasure",IFCSPECULARROUGHNESS:"IfcSpecularRoughness",IFCSPECULAREXPONENT:"IfcSpecularExponent",IFCSPECIFICHEATCAPACITYMEASURE:"IfcSpecificHeatCapacityMeasure",IFCSOUNDPRESSUREMEASURE:"IfcSoundPressureMeasure",IFCSOUNDPOWERMEASURE:"IfcSoundPowerMeasure",IFCSOLIDANGLEMEASURE:"IfcSolidAngleMeasure",IFCSHEARMODULUSMEASURE:"IfcShearModulusMeasure",IFCSECTIONALAREAINTEGRALMEASURE:"IfcSectionalAreaIntegralMeasure",IFCSECTIONMODULUSMEASURE:"IfcSectionModulusMeasure",IFCSECONDINMINUTE:"IfcSecondInMinute",IFCROTATIONALSTIFFNESSMEASURE:"IfcRotationalStiffnessMeasure",IFCROTATIONALMASSMEASURE:"IfcRotationalMassMeasure",IFCROTATIONALFREQUENCYMEASURE:"IfcRotationalFrequencyMeasure",IFCREAL:"IfcReal",IFCRATIOMEASURE:"IfcRatioMeasure",IFCRADIOACTIVITYMEASURE:"IfcRadioactivityMeasure",IFCPRESSUREMEASURE:"IfcPressureMeasure",IFCPRESENTABLETEXT:"IfcPresentableText",IFCPOWERMEASURE:"IfcPowerMeasure",IFCPOSITIVERATIOMEASURE:"IfcPositiveRatioMeasure",IFCPOSITIVEPLANEANGLEMEASURE:"IfcPositivePlaneAngleMeasure",IFCPOSITIVELENGTHMEASURE:"IfcPositiveLengthMeasure",IFCPLANEANGLEMEASURE:"IfcPlaneAngleMeasure",IFCPLANARFORCEMEASURE:"IfcPlanarForceMeasure",IFCPARAMETERVALUE:"IfcParameterValue",IFCPHMEASURE:"IfcPhMeasure",IFCNUMERICMEASURE:"IfcNumericMeasure",IFCNORMALISEDRATIOMEASURE:"IfcNormalisedRatioMeasure",IFCMONTHINYEARNUMBER:"IfcMonthInYearNumber",IFCMONETARYMEASURE:"IfcMonetaryMeasure",IFCMOMENTOFINERTIAMEASURE:"IfcMomentOfInertiaMeasure",IFCMOLECULARWEIGHTMEASURE:"IfcMolecularWeightMeasure",IFCMOISTUREDIFFUSIVITYMEASURE:"IfcMoistureDiffusivityMeasure",IFCMODULUSOFSUBGRADEREACTIONMEASURE:"IfcModulusOfSubgradeReactionMeasure",IFCMODULUSOFROTATIONALSUBGRADEREACTIONMEASURE:"IfcModulusOfRotationalSubgradeReactionMeasure",IFCMODULUSOFLINEARSUBGRADEREACTIONMEASURE:"IfcModulusOfLinearSubgradeReactionMeasure",IFCMODULUSOFELASTICITYMEASURE:"IfcModulusOfElasticityMeasure",IFCMINUTEINHOUR:"IfcMinuteInHour",IFCMASSPERLENGTHMEASURE:"IfcMassPerLengthMeasure",IFCMASSMEASURE:"IfcMassMeasure",IFCMASSFLOWRATEMEASURE:"IfcMassFlowRateMeasure",IFCMASSDENSITYMEASURE:"IfcMassDensityMeasure",IFCMAGNETICFLUXMEASURE:"IfcMagneticFluxMeasure",IFCMAGNETICFLUXDENSITYMEASURE:"IfcMagneticFluxDensityMeasure",IFCLUMINOUSINTENSITYMEASURE:"IfcLuminousIntensityMeasure",IFCLUMINOUSINTENSITYDISTRIBUTIONMEASURE:"IfcLuminousIntensityDistributionMeasure",IFCLUMINOUSFLUXMEASURE:"IfcLuminousFluxMeasure",IFCLOGICAL:"IfcLogical",IFCLINEARVELOCITYMEASURE:"IfcLinearVelocityMeasure",IFCLINEARSTIFFNESSMEASURE:"IfcLinearStiffnessMeasure",IFCLINEARMOMENTMEASURE:"IfcLinearMomentMeasure",IFCLINEARFORCEMEASURE:"IfcLinearForceMeasure",IFCLENGTHMEASURE:"IfcLengthMeasure",IFCLABEL:"IfcLabel",IFCKINEMATICVISCOSITYMEASURE:"IfcKinematicViscosityMeasure",IFCISOTHERMALMOISTURECAPACITYMEASURE:"IfcIsothermalMoistureCapacityMeasure",IFCIONCONCENTRATIONMEASURE:"IfcIonConcentrationMeasure",IFCINTEGERCOUNTRATEMEASURE:"IfcIntegerCountRateMeasure",IFCINTEGER:"IfcInteger",IFCINDUCTANCEMEASURE:"IfcInductanceMeasure",IFCILLUMINANCEMEASURE:"IfcIlluminanceMeasure",IFCIDENTIFIER:"IfcIdentifier",IFCHOURINDAY:"IfcHourInDay",IFCHEATINGVALUEMEASURE:"IfcHeatingValueMeasure",IFCHEATFLUXDENSITYMEASURE:"IfcHeatFluxDensityMeasure",IFCGLOBALLYUNIQUEID:"IfcGloballyUniqueId",IFCFREQUENCYMEASURE:"IfcFrequencyMeasure",IFCFORCEMEASURE:"IfcForceMeasure",IFCFONTWEIGHT:"IfcFontWeight",IFCFONTVARIANT:"IfcFontVariant",IFCFONTSTYLE:"IfcFontStyle",IFCENERGYMEASURE:"IfcEnergyMeasure",IFCELECTRICVOLTAGEMEASURE:"IfcElectricVoltageMeasure",IFCELECTRICRESISTANCEMEASURE:"IfcElectricResistanceMeasure",IFCELECTRICCURRENTMEASURE:"IfcElectricCurrentMeasure",IFCELECTRICCONDUCTANCEMEASURE:"IfcElectricConductanceMeasure",IFCELECTRICCHARGEMEASURE:"IfcElectricChargeMeasure",IFCELECTRICCAPACITANCEMEASURE:"IfcElectricCapacitanceMeasure",IFCDYNAMICVISCOSITYMEASURE:"IfcDynamicViscosityMeasure",IFCDOSEEQUIVALENTMEASURE:"IfcDoseEquivalentMeasure",IFCDIMENSIONCOUNT:"IfcDimensionCount",IFCDESCRIPTIVEMEASURE:"IfcDescriptiveMeasure",IFCDAYLIGHTSAVINGHOUR:"IfcDaylightSavingHour",IFCDAYINMONTHNUMBER:"IfcDayInMonthNumber",IFCCURVATUREMEASURE:"IfcCurvatureMeasure",IFCCOUNTMEASURE:"IfcCountMeasure",IFCCONTEXTDEPENDENTMEASURE:"IfcContextDependentMeasure",IFCCOMPOUNDPLANEANGLEMEASURE:"IfcCompoundPlaneAngleMeasure",IFCCOMPLEXNUMBER:"IfcComplexNumber",IFCBOXALIGNMENT:"IfcBoxAlignment",IFCBOOLEAN:"IfcBoolean",IFCAREAMEASURE:"IfcAreaMeasure",IFCANGULARVELOCITYMEASURE:"IfcAngularVelocityMeasure",IFCAMOUNTOFSUBSTANCEMEASURE:"IfcAmountOfSubstanceMeasure",IFCACCELERATIONMEASURE:"IfcAccelerationMeasure",IFCABSORBEDDOSEMEASURE:"IfcAbsorbedDoseMeasure",IFCGEOSLICE:"IfcGeoSlice",IFCGEOMODEL:"IfcGeoModel",IFCELECTRICFLOWTREATMENTDEVICE:"IfcElectricFlowTreatmentDevice",IFCDISTRIBUTIONBOARD:"IfcDistributionBoard",IFCCONVEYORSEGMENT:"IfcConveyorSegment",IFCCAISSONFOUNDATION:"IfcCaissonFoundation",IFCBOREHOLE:"IfcBorehole",IFCBEARING:"IfcBearing",IFCALIGNMENT:"IfcAlignment",IFCTRACKELEMENT:"IfcTrackElement",IFCSIGNAL:"IfcSignal",IFCREINFORCEDSOIL:"IfcReinforcedSoil",IFCRAIL:"IfcRail",IFCPAVEMENT:"IfcPavement",IFCNAVIGATIONELEMENT:"IfcNavigationElement",IFCMOORINGDEVICE:"IfcMooringDevice",IFCMOBILETELECOMMUNICATIONSAPPLIANCE:"IfcMobileTelecommunicationsAppliance",IFCLIQUIDTERMINAL:"IfcLiquidTerminal",IFCLINEARPOSITIONINGELEMENT:"IfcLinearPositioningElement",IFCKERB:"IfcKerb",IFCGEOTECHNICALASSEMBLY:"IfcGeotechnicalAssembly",IFCELECTRICFLOWTREATMENTDEVICETYPE:"IfcElectricFlowTreatmentDeviceType",IFCEARTHWORKSFILL:"IfcEarthworksFill",IFCEARTHWORKSELEMENT:"IfcEarthworksElement",IFCEARTHWORKSCUT:"IfcEarthworksCut",IFCDISTRIBUTIONBOARDTYPE:"IfcDistributionBoardType",IFCDEEPFOUNDATION:"IfcDeepFoundation",IFCCOURSE:"IfcCourse",IFCCONVEYORSEGMENTTYPE:"IfcConveyorSegmentType",IFCCAISSONFOUNDATIONTYPE:"IfcCaissonFoundationType",IFCBUILTSYSTEM:"IfcBuiltSystem",IFCBUILTELEMENT:"IfcBuiltElement",IFCBRIDGEPART:"IfcBridgePart",IFCBRIDGE:"IfcBridge",IFCBEARINGTYPE:"IfcBearingType",IFCALIGNMENTVERTICAL:"IfcAlignmentVertical",IFCALIGNMENTSEGMENT:"IfcAlignmentSegment",IFCALIGNMENTHORIZONTAL:"IfcAlignmentHorizontal",IFCALIGNMENTCANT:"IfcAlignmentCant",IFCVIBRATIONDAMPERTYPE:"IfcVibrationDamperType",IFCVIBRATIONDAMPER:"IfcVibrationDamper",IFCVEHICLE:"IfcVehicle",IFCTRANSPORTATIONDEVICE:"IfcTransportationDevice",IFCTRACKELEMENTTYPE:"IfcTrackElementType",IFCTENDONCONDUITTYPE:"IfcTendonConduitType",IFCTENDONCONDUIT:"IfcTendonConduit",IFCSINESPIRAL:"IfcSineSpiral",IFCSIGNALTYPE:"IfcSignalType",IFCSIGNTYPE:"IfcSignType",IFCSIGN:"IfcSign",IFCSEVENTHORDERPOLYNOMIALSPIRAL:"IfcSeventhOrderPolynomialSpiral",IFCSEGMENTEDREFERENCECURVE:"IfcSegmentedReferenceCurve",IFCSECONDORDERPOLYNOMIALSPIRAL:"IfcSecondOrderPolynomialSpiral",IFCROADPART:"IfcRoadPart",IFCROAD:"IfcRoad",IFCRELADHERESTOELEMENT:"IfcRelAdheresToElement",IFCREFERENT:"IfcReferent",IFCRAILWAYPART:"IfcRailwayPart",IFCRAILWAY:"IfcRailway",IFCRAILTYPE:"IfcRailType",IFCPOSITIONINGELEMENT:"IfcPositioningElement",IFCPAVEMENTTYPE:"IfcPavementType",IFCNAVIGATIONELEMENTTYPE:"IfcNavigationElementType",IFCMOORINGDEVICETYPE:"IfcMooringDeviceType",IFCMOBILETELECOMMUNICATIONSAPPLIANCETYPE:"IfcMobileTelecommunicationsApplianceType",IFCMARINEPART:"IfcMarinePart",IFCMARINEFACILITY:"IfcMarineFacility",IFCLIQUIDTERMINALTYPE:"IfcLiquidTerminalType",IFCLINEARELEMENT:"IfcLinearElement",IFCKERBTYPE:"IfcKerbType",IFCIMPACTPROTECTIONDEVICETYPE:"IfcImpactProtectionDeviceType",IFCIMPACTPROTECTIONDEVICE:"IfcImpactProtectionDevice",IFCGRADIENTCURVE:"IfcGradientCurve",IFCGEOTECHNICALSTRATUM:"IfcGeotechnicalStratum",IFCGEOTECHNICALELEMENT:"IfcGeotechnicalElement",IFCFACILITYPARTCOMMON:"IfcFacilityPartCommon",IFCFACILITYPART:"IfcFacilityPart",IFCFACILITY:"IfcFacility",IFCDIRECTRIXDERIVEDREFERENCESWEPTAREASOLID:"IfcDirectrixDerivedReferenceSweptAreaSolid",IFCDEEPFOUNDATIONTYPE:"IfcDeepFoundationType",IFCCOURSETYPE:"IfcCourseType",IFCCOSINESPIRAL:"IfcCosineSpiral",IFCCLOTHOID:"IfcClothoid",IFCBUILTELEMENTTYPE:"IfcBuiltElementType",IFCVEHICLETYPE:"IfcVehicleType",IFCTRIANGULATEDIRREGULARNETWORK:"IfcTriangulatedIrregularNetwork",IFCTRANSPORTATIONDEVICETYPE:"IfcTransportationDeviceType",IFCTHIRDORDERPOLYNOMIALSPIRAL:"IfcThirdOrderPolynomialSpiral",IFCSPIRAL:"IfcSpiral",IFCSECTIONEDSURFACE:"IfcSectionedSurface",IFCSECTIONEDSOLIDHORIZONTAL:"IfcSectionedSolidHorizontal",IFCSECTIONEDSOLID:"IfcSectionedSolid",IFCRELPOSITIONS:"IfcRelPositions",IFCRELASSOCIATESPROFILEDEF:"IfcRelAssociatesProfileDef",IFCPOLYNOMIALCURVE:"IfcPolynomialCurve",IFCOFFSETCURVEBYDISTANCES:"IfcOffsetCurveByDistances",IFCOFFSETCURVE:"IfcOffsetCurve",IFCINDEXEDPOLYGONALTEXTUREMAP:"IfcIndexedPolygonalTextureMap",IFCDIRECTRIXCURVESWEPTAREASOLID:"IfcDirectrixCurveSweptAreaSolid",IFCCURVESEGMENT:"IfcCurveSegment",IFCAXIS2PLACEMENTLINEAR:"IfcAxis2PlacementLinear",IFCSEGMENT:"IfcSegment",IFCPOINTBYDISTANCEEXPRESSION:"IfcPointByDistanceExpression",IFCOPENCROSSPROFILEDEF:"IfcOpenCrossProfileDef",IFCLINEARPLACEMENT:"IfcLinearPlacement",IFCALIGNMENTHORIZONTALSEGMENT:"IfcAlignmentHorizontalSegment",IFCALIGNMENTCANTSEGMENT:"IfcAlignmentCantSegment",IFCTEXTURECOORDINATEINDICESWITHVOIDS:"IfcTextureCoordinateIndicesWithVoids",IFCTEXTURECOORDINATEINDICES:"IfcTextureCoordinateIndices",IFCQUANTITYNUMBER:"IfcQuantityNumber",IFCALIGNMENTVERTICALSEGMENT:"IfcAlignmentVerticalSegment",IFCALIGNMENTPARAMETERSEGMENT:"IfcAlignmentParameterSegment",IFCCONTROLLER:"IfcController",IFCALARM:"IfcAlarm",IFCACTUATOR:"IfcActuator",IFCUNITARYCONTROLELEMENT:"IfcUnitaryControlElement",IFCSENSOR:"IfcSensor",IFCPROTECTIVEDEVICETRIPPINGUNIT:"IfcProtectiveDeviceTrippingUnit",IFCFLOWINSTRUMENT:"IfcFlowInstrument",IFCFIRESUPPRESSIONTERMINAL:"IfcFireSuppressionTerminal",IFCFILTER:"IfcFilter",IFCFAN:"IfcFan",IFCELECTRICTIMECONTROL:"IfcElectricTimeControl",IFCELECTRICMOTOR:"IfcElectricMotor",IFCELECTRICGENERATOR:"IfcElectricGenerator",IFCELECTRICFLOWSTORAGEDEVICE:"IfcElectricFlowStorageDevice",IFCELECTRICDISTRIBUTIONBOARD:"IfcElectricDistributionBoard",IFCELECTRICAPPLIANCE:"IfcElectricAppliance",IFCDUCTSILENCER:"IfcDuctSilencer",IFCDUCTSEGMENT:"IfcDuctSegment",IFCDUCTFITTING:"IfcDuctFitting",IFCDISTRIBUTIONCIRCUIT:"IfcDistributionCircuit",IFCDAMPER:"IfcDamper",IFCCOOLINGTOWER:"IfcCoolingTower",IFCCOOLEDBEAM:"IfcCooledBeam",IFCCONDENSER:"IfcCondenser",IFCCOMPRESSOR:"IfcCompressor",IFCCOMMUNICATIONSAPPLIANCE:"IfcCommunicationsAppliance",IFCCOIL:"IfcCoil",IFCCHILLER:"IfcChiller",IFCCABLESEGMENT:"IfcCableSegment",IFCCABLEFITTING:"IfcCableFitting",IFCCABLECARRIERSEGMENT:"IfcCableCarrierSegment",IFCCABLECARRIERFITTING:"IfcCableCarrierFitting",IFCBURNER:"IfcBurner",IFCBOILER:"IfcBoiler",IFCBEAMSTANDARDCASE:"IfcBeamStandardCase",IFCAUDIOVISUALAPPLIANCE:"IfcAudioVisualAppliance",IFCAIRTOAIRHEATRECOVERY:"IfcAirToAirHeatRecovery",IFCAIRTERMINALBOX:"IfcAirTerminalBox",IFCAIRTERMINAL:"IfcAirTerminal",IFCWINDOWSTANDARDCASE:"IfcWindowStandardCase",IFCWASTETERMINAL:"IfcWasteTerminal",IFCWALLELEMENTEDCASE:"IfcWallElementedCase",IFCVALVE:"IfcValve",IFCUNITARYEQUIPMENT:"IfcUnitaryEquipment",IFCUNITARYCONTROLELEMENTTYPE:"IfcUnitaryControlElementType",IFCTUBEBUNDLE:"IfcTubeBundle",IFCTRANSFORMER:"IfcTransformer",IFCTANK:"IfcTank",IFCSWITCHINGDEVICE:"IfcSwitchingDevice",IFCSTRUCTURALLOADCASE:"IfcStructuralLoadCase",IFCSTACKTERMINAL:"IfcStackTerminal",IFCSPACEHEATER:"IfcSpaceHeater",IFCSOLARDEVICE:"IfcSolarDevice",IFCSLABSTANDARDCASE:"IfcSlabStandardCase",IFCSLABELEMENTEDCASE:"IfcSlabElementedCase",IFCSHADINGDEVICE:"IfcShadingDevice",IFCSANITARYTERMINAL:"IfcSanitaryTerminal",IFCREINFORCINGBARTYPE:"IfcReinforcingBarType",IFCRATIONALBSPLINECURVEWITHKNOTS:"IfcRationalBSplineCurveWithKnots",IFCPUMP:"IfcPump",IFCPROTECTIVEDEVICETRIPPINGUNITTYPE:"IfcProtectiveDeviceTrippingUnitType",IFCPROTECTIVEDEVICE:"IfcProtectiveDevice",IFCPLATESTANDARDCASE:"IfcPlateStandardCase",IFCPIPESEGMENT:"IfcPipeSegment",IFCPIPEFITTING:"IfcPipeFitting",IFCOUTLET:"IfcOutlet",IFCOUTERBOUNDARYCURVE:"IfcOuterBoundaryCurve",IFCMOTORCONNECTION:"IfcMotorConnection",IFCMEMBERSTANDARDCASE:"IfcMemberStandardCase",IFCMEDICALDEVICE:"IfcMedicalDevice",IFCLIGHTFIXTURE:"IfcLightFixture",IFCLAMP:"IfcLamp",IFCJUNCTIONBOX:"IfcJunctionBox",IFCINTERCEPTOR:"IfcInterceptor",IFCHUMIDIFIER:"IfcHumidifier",IFCHEATEXCHANGER:"IfcHeatExchanger",IFCFLOWMETER:"IfcFlowMeter",IFCEXTERNALSPATIALELEMENT:"IfcExternalSpatialElement",IFCEVAPORATOR:"IfcEvaporator",IFCEVAPORATIVECOOLER:"IfcEvaporativeCooler",IFCENGINE:"IfcEngine",IFCELECTRICDISTRIBUTIONBOARDTYPE:"IfcElectricDistributionBoardType",IFCDOORSTANDARDCASE:"IfcDoorStandardCase",IFCDISTRIBUTIONSYSTEM:"IfcDistributionSystem",IFCCOMMUNICATIONSAPPLIANCETYPE:"IfcCommunicationsApplianceType",IFCCOLUMNSTANDARDCASE:"IfcColumnStandardCase",IFCCIVILELEMENT:"IfcCivilElement",IFCCHIMNEY:"IfcChimney",IFCCABLEFITTINGTYPE:"IfcCableFittingType",IFCBURNERTYPE:"IfcBurnerType",IFCBUILDINGSYSTEM:"IfcBuildingSystem",IFCBUILDINGELEMENTPARTTYPE:"IfcBuildingElementPartType",IFCBOUNDARYCURVE:"IfcBoundaryCurve",IFCBSPLINECURVEWITHKNOTS:"IfcBSplineCurveWithKnots",IFCAUDIOVISUALAPPLIANCETYPE:"IfcAudioVisualApplianceType",IFCWORKCALENDAR:"IfcWorkCalendar",IFCWINDOWTYPE:"IfcWindowType",IFCVOIDINGFEATURE:"IfcVoidingFeature",IFCVIBRATIONISOLATOR:"IfcVibrationIsolator",IFCTENDONTYPE:"IfcTendonType",IFCTENDONANCHORTYPE:"IfcTendonAnchorType",IFCSYSTEMFURNITUREELEMENT:"IfcSystemFurnitureElement",IFCSURFACEFEATURE:"IfcSurfaceFeature",IFCSTRUCTURALSURFACEACTION:"IfcStructuralSurfaceAction",IFCSTRUCTURALCURVEREACTION:"IfcStructuralCurveReaction",IFCSTRUCTURALCURVEACTION:"IfcStructuralCurveAction",IFCSTAIRTYPE:"IfcStairType",IFCSOLARDEVICETYPE:"IfcSolarDeviceType",IFCSHADINGDEVICETYPE:"IfcShadingDeviceType",IFCSEAMCURVE:"IfcSeamCurve",IFCROOFTYPE:"IfcRoofType",IFCREINFORCINGMESHTYPE:"IfcReinforcingMeshType",IFCREINFORCINGELEMENTTYPE:"IfcReinforcingElementType",IFCRATIONALBSPLINESURFACEWITHKNOTS:"IfcRationalBSplineSurfaceWithKnots",IFCRAMPTYPE:"IfcRampType",IFCPOLYGONALFACESET:"IfcPolygonalFaceSet",IFCPILETYPE:"IfcPileType",IFCOPENINGSTANDARDCASE:"IfcOpeningStandardCase",IFCMEDICALDEVICETYPE:"IfcMedicalDeviceType",IFCINTERSECTIONCURVE:"IfcIntersectionCurve",IFCINTERCEPTORTYPE:"IfcInterceptorType",IFCINDEXEDPOLYCURVE:"IfcIndexedPolyCurve",IFCGEOGRAPHICELEMENT:"IfcGeographicElement",IFCFURNITURE:"IfcFurniture",IFCFOOTINGTYPE:"IfcFootingType",IFCEXTERNALSPATIALSTRUCTUREELEMENT:"IfcExternalSpatialStructureElement",IFCEVENT:"IfcEvent",IFCENGINETYPE:"IfcEngineType",IFCELEMENTASSEMBLYTYPE:"IfcElementAssemblyType",IFCDOORTYPE:"IfcDoorType",IFCCYLINDRICALSURFACE:"IfcCylindricalSurface",IFCCONSTRUCTIONPRODUCTRESOURCETYPE:"IfcConstructionProductResourceType",IFCCONSTRUCTIONMATERIALRESOURCETYPE:"IfcConstructionMaterialResourceType",IFCCONSTRUCTIONEQUIPMENTRESOURCETYPE:"IfcConstructionEquipmentResourceType",IFCCOMPOSITECURVEONSURFACE:"IfcCompositeCurveOnSurface",IFCCOMPLEXPROPERTYTEMPLATE:"IfcComplexPropertyTemplate",IFCCIVILELEMENTTYPE:"IfcCivilElementType",IFCCHIMNEYTYPE:"IfcChimneyType",IFCBSPLINESURFACEWITHKNOTS:"IfcBSplineSurfaceWithKnots",IFCBSPLINESURFACE:"IfcBSplineSurface",IFCADVANCEDBREPWITHVOIDS:"IfcAdvancedBrepWithVoids",IFCADVANCEDBREP:"IfcAdvancedBrep",IFCTRIANGULATEDFACESET:"IfcTriangulatedFaceSet",IFCTOROIDALSURFACE:"IfcToroidalSurface",IFCTESSELLATEDFACESET:"IfcTessellatedFaceSet",IFCTASKTYPE:"IfcTaskType",IFCSURFACECURVE:"IfcSurfaceCurve",IFCSUBCONTRACTRESOURCETYPE:"IfcSubContractResourceType",IFCSTRUCTURALSURFACEREACTION:"IfcStructuralSurfaceReaction",IFCSPHERICALSURFACE:"IfcSphericalSurface",IFCSPATIALZONETYPE:"IfcSpatialZoneType",IFCSPATIALZONE:"IfcSpatialZone",IFCSPATIALELEMENTTYPE:"IfcSpatialElementType",IFCSPATIALELEMENT:"IfcSpatialElement",IFCSIMPLEPROPERTYTEMPLATE:"IfcSimplePropertyTemplate",IFCREVOLVEDAREASOLIDTAPERED:"IfcRevolvedAreaSolidTapered",IFCREPARAMETRISEDCOMPOSITECURVESEGMENT:"IfcReparametrisedCompositeCurveSegment",IFCRELSPACEBOUNDARY2NDLEVEL:"IfcRelSpaceBoundary2ndLevel",IFCRELSPACEBOUNDARY1STLEVEL:"IfcRelSpaceBoundary1stLevel",IFCRELINTERFERESELEMENTS:"IfcRelInterferesElements",IFCRELDEFINESBYTEMPLATE:"IfcRelDefinesByTemplate",IFCRELDEFINESBYOBJECT:"IfcRelDefinesByObject",IFCRELDECLARES:"IfcRelDeclares",IFCRELASSIGNSTOGROUPBYFACTOR:"IfcRelAssignsToGroupByFactor",IFCPROPERTYTEMPLATE:"IfcPropertyTemplate",IFCPROPERTYSETTEMPLATE:"IfcPropertySetTemplate",IFCPROJECTLIBRARY:"IfcProjectLibrary",IFCPROCEDURETYPE:"IfcProcedureType",IFCPREDEFINEDPROPERTYSET:"IfcPredefinedPropertySet",IFCPCURVE:"IfcPCurve",IFCLABORRESOURCETYPE:"IfcLaborResourceType",IFCINDEXEDPOLYGONALFACEWITHVOIDS:"IfcIndexedPolygonalFaceWithVoids",IFCINDEXEDPOLYGONALFACE:"IfcIndexedPolygonalFace",IFCGEOGRAPHICELEMENTTYPE:"IfcGeographicElementType",IFCFIXEDREFERENCESWEPTAREASOLID:"IfcFixedReferenceSweptAreaSolid",IFCEXTRUDEDAREASOLIDTAPERED:"IfcExtrudedAreaSolidTapered",IFCEVENTTYPE:"IfcEventType",IFCCURVEBOUNDEDSURFACE:"IfcCurveBoundedSurface",IFCCREWRESOURCETYPE:"IfcCrewResourceType",IFCCONTEXT:"IfcContext",IFCCONSTRUCTIONRESOURCETYPE:"IfcConstructionResourceType",IFCCARTESIANPOINTLIST3D:"IfcCartesianPointList3D",IFCCARTESIANPOINTLIST2D:"IfcCartesianPointList2D",IFCCARTESIANPOINTLIST:"IfcCartesianPointList",IFCADVANCEDFACE:"IfcAdvancedFace",IFCTYPERESOURCE:"IfcTypeResource",IFCTYPEPROCESS:"IfcTypeProcess",IFCTESSELLATEDITEM:"IfcTessellatedItem",IFCSWEPTDISKSOLIDPOLYGONAL:"IfcSweptDiskSolidPolygonal",IFCRESOURCETIME:"IfcResourceTime",IFCRESOURCECONSTRAINTRELATIONSHIP:"IfcResourceConstraintRelationship",IFCRESOURCEAPPROVALRELATIONSHIP:"IfcResourceApprovalRelationship",IFCQUANTITYSET:"IfcQuantitySet",IFCPROPERTYTEMPLATEDEFINITION:"IfcPropertyTemplateDefinition",IFCPREDEFINEDPROPERTIES:"IfcPredefinedProperties",IFCMIRROREDPROFILEDEF:"IfcMirroredProfileDef",IFCMATERIALRELATIONSHIP:"IfcMaterialRelationship",IFCMATERIALPROFILESETUSAGETAPERING:"IfcMaterialProfileSetUsageTapering",IFCMATERIALPROFILESETUSAGE:"IfcMaterialProfileSetUsage",IFCMATERIALCONSTITUENTSET:"IfcMaterialConstituentSet",IFCMATERIALCONSTITUENT:"IfcMaterialConstituent",IFCLAGTIME:"IfcLagTime",IFCINDEXEDTRIANGLETEXTUREMAP:"IfcIndexedTriangleTextureMap",IFCINDEXEDTEXTUREMAP:"IfcIndexedTextureMap",IFCINDEXEDCOLOURMAP:"IfcIndexedColourMap",IFCEXTERNALREFERENCERELATIONSHIP:"IfcExternalReferenceRelationship",IFCEXTENDEDPROPERTIES:"IfcExtendedProperties",IFCEVENTTIME:"IfcEventTime",IFCCONVERSIONBASEDUNITWITHOFFSET:"IfcConversionBasedUnitWithOffset",IFCCOLOURRGBLIST:"IfcColourRgbList",IFCWORKTIME:"IfcWorkTime",IFCTIMEPERIOD:"IfcTimePeriod",IFCTEXTUREVERTEXLIST:"IfcTextureVertexList",IFCTASKTIMERECURRING:"IfcTaskTimeRecurring",IFCTASKTIME:"IfcTaskTime",IFCTABLECOLUMN:"IfcTableColumn",IFCSURFACEREINFORCEMENTAREA:"IfcSurfaceReinforcementArea",IFCSTRUCTURALLOADORRESULT:"IfcStructuralLoadOrResult",IFCSTRUCTURALLOADCONFIGURATION:"IfcStructuralLoadConfiguration",IFCSCHEDULINGTIME:"IfcSchedulingTime",IFCRESOURCELEVELRELATIONSHIP:"IfcResourceLevelRelationship",IFCREFERENCE:"IfcReference",IFCRECURRENCEPATTERN:"IfcRecurrencePattern",IFCPROPERTYABSTRACTION:"IfcPropertyAbstraction",IFCPROJECTEDCRS:"IfcProjectedCrs",IFCPRESENTATIONITEM:"IfcPresentationItem",IFCMATERIALUSAGEDEFINITION:"IfcMaterialUsageDefinition",IFCMATERIALPROFILEWITHOFFSETS:"IfcMaterialProfileWithOffsets",IFCMATERIALPROFILESET:"IfcMaterialProfileSet",IFCMATERIALPROFILE:"IfcMaterialProfile",IFCMATERIALLAYERWITHOFFSETS:"IfcMaterialLayerWithOffsets",IFCMATERIALDEFINITION:"IfcMaterialDefinition",IFCMAPCONVERSION:"IfcMapConversion",IFCEXTERNALINFORMATION:"IfcExternalInformation",IFCCOORDINATEREFERENCESYSTEM:"IfcCoordinateReferenceSystem",IFCCOORDINATEOPERATION:"IfcCoordinateOperation",IFCCONNECTIONVOLUMEGEOMETRY:"IfcConnectionVolumeGeometry",IFCREINFORCINGBAR:"IfcReinforcingBar",IFCELECTRICDISTRIBUTIONPOINT:"IfcElectricDistributionPoint",IFCDISTRIBUTIONCONTROLELEMENT:"IfcDistributionControlElement",IFCDISTRIBUTIONCHAMBERELEMENT:"IfcDistributionChamberElement",IFCCONTROLLERTYPE:"IfcControllerType",IFCCHAMFEREDGEFEATURE:"IfcChamferEdgeFeature",IFCBEAM:"IfcBeam",IFCALARMTYPE:"IfcAlarmType",IFCACTUATORTYPE:"IfcActuatorType",IFCWINDOW:"IfcWindow",IFCWALLSTANDARDCASE:"IfcWallStandardCase",IFCWALL:"IfcWall",IFCVIBRATIONISOLATORTYPE:"IfcVibrationIsolatorType",IFCTENDONANCHOR:"IfcTendonAnchor",IFCTENDON:"IfcTendon",IFCSTRUCTURALANALYSISMODEL:"IfcStructuralAnalysisModel",IFCSTAIRFLIGHT:"IfcStairFlight",IFCSTAIR:"IfcStair",IFCSLAB:"IfcSlab",IFCSENSORTYPE:"IfcSensorType",IFCROUNDEDEDGEFEATURE:"IfcRoundedEdgeFeature",IFCROOF:"IfcRoof",IFCREINFORCINGMESH:"IfcReinforcingMesh",IFCREINFORCINGELEMENT:"IfcReinforcingElement",IFCRATIONALBEZIERCURVE:"IfcRationalBezierCurve",IFCRAMPFLIGHT:"IfcRampFlight",IFCRAMP:"IfcRamp",IFCRAILING:"IfcRailing",IFCPLATE:"IfcPlate",IFCPILE:"IfcPile",IFCMEMBER:"IfcMember",IFCFOOTING:"IfcFooting",IFCFLOWTREATMENTDEVICE:"IfcFlowTreatmentDevice",IFCFLOWTERMINAL:"IfcFlowTerminal",IFCFLOWSTORAGEDEVICE:"IfcFlowStorageDevice",IFCFLOWSEGMENT:"IfcFlowSegment",IFCFLOWMOVINGDEVICE:"IfcFlowMovingDevice",IFCFLOWINSTRUMENTTYPE:"IfcFlowInstrumentType",IFCFLOWFITTING:"IfcFlowFitting",IFCFLOWCONTROLLER:"IfcFlowController",IFCFIRESUPPRESSIONTERMINALTYPE:"IfcFireSuppressionTerminalType",IFCFILTERTYPE:"IfcFilterType",IFCFANTYPE:"IfcFanType",IFCENERGYCONVERSIONDEVICE:"IfcEnergyConversionDevice",IFCELECTRICALELEMENT:"IfcElectricalElement",IFCELECTRICALCIRCUIT:"IfcElectricalCircuit",IFCELECTRICTIMECONTROLTYPE:"IfcElectricTimeControlType",IFCELECTRICMOTORTYPE:"IfcElectricMotorType",IFCELECTRICHEATERTYPE:"IfcElectricHeaterType",IFCELECTRICGENERATORTYPE:"IfcElectricGeneratorType",IFCELECTRICFLOWSTORAGEDEVICETYPE:"IfcElectricFlowStorageDeviceType",IFCELECTRICAPPLIANCETYPE:"IfcElectricApplianceType",IFCEDGEFEATURE:"IfcEdgeFeature",IFCDUCTSILENCERTYPE:"IfcDuctSilencerType",IFCDUCTSEGMENTTYPE:"IfcDuctSegmentType",IFCDUCTFITTINGTYPE:"IfcDuctFittingType",IFCDOOR:"IfcDoor",IFCDISTRIBUTIONPORT:"IfcDistributionPort",IFCDISTRIBUTIONFLOWELEMENT:"IfcDistributionFlowElement",IFCDISTRIBUTIONELEMENT:"IfcDistributionElement",IFCDISTRIBUTIONCONTROLELEMENTTYPE:"IfcDistributionControlElementType",IFCDISTRIBUTIONCHAMBERELEMENTTYPE:"IfcDistributionChamberElementType",IFCDISCRETEACCESSORYTYPE:"IfcDiscreteAccessoryType",IFCDISCRETEACCESSORY:"IfcDiscreteAccessory",IFCDIAMETERDIMENSION:"IfcDiameterDimension",IFCDAMPERTYPE:"IfcDamperType",IFCCURTAINWALL:"IfcCurtainWall",IFCCOVERING:"IfcCovering",IFCCOOLINGTOWERTYPE:"IfcCoolingTowerType",IFCCOOLEDBEAMTYPE:"IfcCooledBeamType",IFCCONSTRUCTIONPRODUCTRESOURCE:"IfcConstructionProductResource",IFCCONSTRUCTIONMATERIALRESOURCE:"IfcConstructionMaterialResource",IFCCONSTRUCTIONEQUIPMENTRESOURCE:"IfcConstructionEquipmentResource",IFCCONDITIONCRITERION:"IfcConditionCriterion",IFCCONDITION:"IfcCondition",IFCCONDENSERTYPE:"IfcCondenserType",IFCCOMPRESSORTYPE:"IfcCompressorType",IFCCOLUMN:"IfcColumn",IFCCOILTYPE:"IfcCoilType",IFCCIRCLE:"IfcCircle",IFCCHILLERTYPE:"IfcChillerType",IFCCABLESEGMENTTYPE:"IfcCableSegmentType",IFCCABLECARRIERSEGMENTTYPE:"IfcCableCarrierSegmentType",IFCCABLECARRIERFITTINGTYPE:"IfcCableCarrierFittingType",IFCBUILDINGELEMENTPROXYTYPE:"IfcBuildingElementProxyType",IFCBUILDINGELEMENTPROXY:"IfcBuildingElementProxy",IFCBUILDINGELEMENTPART:"IfcBuildingElementPart",IFCBUILDINGELEMENTCOMPONENT:"IfcBuildingElementComponent",IFCBUILDINGELEMENT:"IfcBuildingElement",IFCBOILERTYPE:"IfcBoilerType",IFCBEZIERCURVE:"IfcBezierCurve",IFCBEAMTYPE:"IfcBeamType",IFCBSPLINECURVE:"IfcBSplineCurve",IFCASSET:"IfcAsset",IFCANGULARDIMENSION:"IfcAngularDimension",IFCAIRTOAIRHEATRECOVERYTYPE:"IfcAirToAirHeatRecoveryType",IFCAIRTERMINALTYPE:"IfcAirTerminalType",IFCAIRTERMINALBOXTYPE:"IfcAirTerminalBoxType",IFCACTIONREQUEST:"IfcActionRequest",IFC2DCOMPOSITECURVE:"Ifc2DCompositeCurve",IFCZONE:"IfcZone",IFCWORKSCHEDULE:"IfcWorkSchedule",IFCWORKPLAN:"IfcWorkPlan",IFCWORKCONTROL:"IfcWorkControl",IFCWASTETERMINALTYPE:"IfcWasteTerminalType",IFCWALLTYPE:"IfcWallType",IFCVIRTUALELEMENT:"IfcVirtualElement",IFCVALVETYPE:"IfcValveType",IFCUNITARYEQUIPMENTTYPE:"IfcUnitaryEquipmentType",IFCTUBEBUNDLETYPE:"IfcTubeBundleType",IFCTRIMMEDCURVE:"IfcTrimmedCurve",IFCTRANSPORTELEMENT:"IfcTransportElement",IFCTRANSFORMERTYPE:"IfcTransformerType",IFCTIMESERIESSCHEDULE:"IfcTimeSeriesSchedule",IFCTANKTYPE:"IfcTankType",IFCSYSTEM:"IfcSystem",IFCSWITCHINGDEVICETYPE:"IfcSwitchingDeviceType",IFCSUBCONTRACTRESOURCE:"IfcSubContractResource",IFCSTRUCTURALSURFACECONNECTION:"IfcStructuralSurfaceConnection",IFCSTRUCTURALRESULTGROUP:"IfcStructuralResultGroup",IFCSTRUCTURALPOINTREACTION:"IfcStructuralPointReaction",IFCSTRUCTURALPOINTCONNECTION:"IfcStructuralPointConnection",IFCSTRUCTURALPOINTACTION:"IfcStructuralPointAction",IFCSTRUCTURALPLANARACTIONVARYING:"IfcStructuralPlanarActionVarying",IFCSTRUCTURALPLANARACTION:"IfcStructuralPlanarAction",IFCSTRUCTURALLOADGROUP:"IfcStructuralLoadGroup",IFCSTRUCTURALLINEARACTIONVARYING:"IfcStructuralLinearActionVarying",IFCSTRUCTURALLINEARACTION:"IfcStructuralLinearAction",IFCSTRUCTURALCURVEMEMBERVARYING:"IfcStructuralCurveMemberVarying",IFCSTRUCTURALCURVEMEMBER:"IfcStructuralCurveMember",IFCSTRUCTURALCURVECONNECTION:"IfcStructuralCurveConnection",IFCSTRUCTURALCONNECTION:"IfcStructuralConnection",IFCSTRUCTURALACTION:"IfcStructuralAction",IFCSTAIRFLIGHTTYPE:"IfcStairFlightType",IFCSTACKTERMINALTYPE:"IfcStackTerminalType",IFCSPACETYPE:"IfcSpaceType",IFCSPACEPROGRAM:"IfcSpaceProgram",IFCSPACEHEATERTYPE:"IfcSpaceHeaterType",IFCSPACE:"IfcSpace",IFCSLABTYPE:"IfcSlabType",IFCSITE:"IfcSite",IFCSERVICELIFE:"IfcServiceLife",IFCSCHEDULETIMECONTROL:"IfcScheduleTimeControl",IFCSANITARYTERMINALTYPE:"IfcSanitaryTerminalType",IFCRELASSIGNSTASKS:"IfcRelAssignsTasks",IFCRELAGGREGATES:"IfcRelAggregates",IFCRAMPFLIGHTTYPE:"IfcRampFlightType",IFCRAILINGTYPE:"IfcRailingType",IFCRADIUSDIMENSION:"IfcRadiusDimension",IFCPUMPTYPE:"IfcPumpType",IFCPROTECTIVEDEVICETYPE:"IfcProtectiveDeviceType",IFCPROJECTIONELEMENT:"IfcProjectionElement",IFCPROJECTORDERRECORD:"IfcProjectOrderRecord",IFCPROJECTORDER:"IfcProjectOrder",IFCPROCEDURE:"IfcProcedure",IFCPORT:"IfcPort",IFCPOLYLINE:"IfcPolyline",IFCPLATETYPE:"IfcPlateType",IFCPIPESEGMENTTYPE:"IfcPipeSegmentType",IFCPIPEFITTINGTYPE:"IfcPipeFittingType",IFCPERMIT:"IfcPermit",IFCPERFORMANCEHISTORY:"IfcPerformanceHistory",IFCOUTLETTYPE:"IfcOutletType",IFCORDERACTION:"IfcOrderAction",IFCOPENINGELEMENT:"IfcOpeningElement",IFCOCCUPANT:"IfcOccupant",IFCMOVE:"IfcMove",IFCMOTORCONNECTIONTYPE:"IfcMotorConnectionType",IFCMEMBERTYPE:"IfcMemberType",IFCMECHANICALFASTENERTYPE:"IfcMechanicalFastenerType",IFCMECHANICALFASTENER:"IfcMechanicalFastener",IFCLINEARDIMENSION:"IfcLinearDimension",IFCLIGHTFIXTURETYPE:"IfcLightFixtureType",IFCLAMPTYPE:"IfcLampType",IFCLABORRESOURCE:"IfcLaborResource",IFCJUNCTIONBOXTYPE:"IfcJunctionBoxType",IFCINVENTORY:"IfcInventory",IFCHUMIDIFIERTYPE:"IfcHumidifierType",IFCHEATEXCHANGERTYPE:"IfcHeatExchangerType",IFCGROUP:"IfcGroup",IFCGRID:"IfcGrid",IFCGASTERMINALTYPE:"IfcGasTerminalType",IFCFURNITURESTANDARD:"IfcFurnitureStandard",IFCFURNISHINGELEMENT:"IfcFurnishingElement",IFCFLOWTREATMENTDEVICETYPE:"IfcFlowTreatmentDeviceType",IFCFLOWTERMINALTYPE:"IfcFlowTerminalType",IFCFLOWSTORAGEDEVICETYPE:"IfcFlowStorageDeviceType",IFCFLOWSEGMENTTYPE:"IfcFlowSegmentType",IFCFLOWMOVINGDEVICETYPE:"IfcFlowMovingDeviceType",IFCFLOWMETERTYPE:"IfcFlowMeterType",IFCFLOWFITTINGTYPE:"IfcFlowFittingType",IFCFLOWCONTROLLERTYPE:"IfcFlowControllerType",IFCFEATUREELEMENTSUBTRACTION:"IfcFeatureElementSubtraction",IFCFEATUREELEMENTADDITION:"IfcFeatureElementAddition",IFCFEATUREELEMENT:"IfcFeatureElement",IFCFASTENERTYPE:"IfcFastenerType",IFCFASTENER:"IfcFastener",IFCFACETEDBREPWITHVOIDS:"IfcFacetedBrepWithVoids",IFCFACETEDBREP:"IfcFacetedBrep",IFCEVAPORATORTYPE:"IfcEvaporatorType",IFCEVAPORATIVECOOLERTYPE:"IfcEvaporativeCoolerType",IFCEQUIPMENTSTANDARD:"IfcEquipmentStandard",IFCEQUIPMENTELEMENT:"IfcEquipmentElement",IFCENERGYCONVERSIONDEVICETYPE:"IfcEnergyConversionDeviceType",IFCELLIPSE:"IfcEllipse",IFCELEMENTCOMPONENTTYPE:"IfcElementComponentType",IFCELEMENTCOMPONENT:"IfcElementComponent",IFCELEMENTASSEMBLY:"IfcElementAssembly",IFCELEMENT:"IfcElement",IFCELECTRICALBASEPROPERTIES:"IfcElectricalBaseProperties",IFCDISTRIBUTIONFLOWELEMENTTYPE:"IfcDistributionFlowElementType",IFCDISTRIBUTIONELEMENTTYPE:"IfcDistributionElementType",IFCDIMENSIONCURVEDIRECTEDCALLOUT:"IfcDimensionCurveDirectedCallout",IFCCURTAINWALLTYPE:"IfcCurtainWallType",IFCCREWRESOURCE:"IfcCrewResource",IFCCOVERINGTYPE:"IfcCoveringType",IFCCOSTSCHEDULE:"IfcCostSchedule",IFCCOSTITEM:"IfcCostItem",IFCCONTROL:"IfcControl",IFCCONSTRUCTIONRESOURCE:"IfcConstructionResource",IFCCONIC:"IfcConic",IFCCOMPOSITECURVE:"IfcCompositeCurve",IFCCOLUMNTYPE:"IfcColumnType",IFCCIRCLEHOLLOWPROFILEDEF:"IfcCircleHollowProfileDef",IFCBUILDINGSTOREY:"IfcBuildingStorey",IFCBUILDINGELEMENTTYPE:"IfcBuildingElementType",IFCBUILDING:"IfcBuilding",IFCBOUNDEDCURVE:"IfcBoundedCurve",IFCBOOLEANCLIPPINGRESULT:"IfcBooleanClippingResult",IFCBLOCK:"IfcBlock",IFCASYMMETRICISHAPEPROFILEDEF:"IfcAsymmetricIShapeProfileDef",IFCANNOTATION:"IfcAnnotation",IFCACTOR:"IfcActor",IFCTRANSPORTELEMENTTYPE:"IfcTransportElementType",IFCTASK:"IfcTask",IFCSYSTEMFURNITUREELEMENTTYPE:"IfcSystemFurnitureElementType",IFCSURFACEOFREVOLUTION:"IfcSurfaceOfRevolution",IFCSURFACEOFLINEAREXTRUSION:"IfcSurfaceOfLinearExtrusion",IFCSURFACECURVESWEPTAREASOLID:"IfcSurfaceCurveSweptAreaSolid",IFCSTRUCTUREDDIMENSIONCALLOUT:"IfcStructuredDimensionCallout",IFCSTRUCTURALSURFACEMEMBERVARYING:"IfcStructuralSurfaceMemberVarying",IFCSTRUCTURALSURFACEMEMBER:"IfcStructuralSurfaceMember",IFCSTRUCTURALREACTION:"IfcStructuralReaction",IFCSTRUCTURALMEMBER:"IfcStructuralMember",IFCSTRUCTURALITEM:"IfcStructuralItem",IFCSTRUCTURALACTIVITY:"IfcStructuralActivity",IFCSPHERE:"IfcSphere",IFCSPATIALSTRUCTUREELEMENTTYPE:"IfcSpatialStructureElementType",IFCSPATIALSTRUCTUREELEMENT:"IfcSpatialStructureElement",IFCRIGHTCIRCULARCYLINDER:"IfcRightCircularCylinder",IFCRIGHTCIRCULARCONE:"IfcRightCircularCone",IFCREVOLVEDAREASOLID:"IfcRevolvedAreaSolid",IFCRESOURCE:"IfcResource",IFCRELVOIDSELEMENT:"IfcRelVoidsElement",IFCRELSPACEBOUNDARY:"IfcRelSpaceBoundary",IFCRELSERVICESBUILDINGS:"IfcRelServicesBuildings",IFCRELSEQUENCE:"IfcRelSequence",IFCRELSCHEDULESCOSTITEMS:"IfcRelSchedulesCostItems",IFCRELREFERENCEDINSPATIALSTRUCTURE:"IfcRelReferencedInSpatialStructure",IFCRELPROJECTSELEMENT:"IfcRelProjectsElement",IFCRELOVERRIDESPROPERTIES:"IfcRelOverridesProperties",IFCRELOCCUPIESSPACES:"IfcRelOccupiesSpaces",IFCRELNESTS:"IfcRelNests",IFCRELINTERACTIONREQUIREMENTS:"IfcRelInteractionRequirements",IFCRELFLOWCONTROLELEMENTS:"IfcRelFlowControlElements",IFCRELFILLSELEMENT:"IfcRelFillsElement",IFCRELDEFINESBYTYPE:"IfcRelDefinesByType",IFCRELDEFINESBYPROPERTIES:"IfcRelDefinesByProperties",IFCRELDEFINES:"IfcRelDefines",IFCRELDECOMPOSES:"IfcRelDecomposes",IFCRELCOVERSSPACES:"IfcRelCoversSpaces",IFCRELCOVERSBLDGELEMENTS:"IfcRelCoversBldgElements",IFCRELCONTAINEDINSPATIALSTRUCTURE:"IfcRelContainedInSpatialStructure",IFCRELCONNECTSWITHREALIZINGELEMENTS:"IfcRelConnectsWithRealizingElements",IFCRELCONNECTSWITHECCENTRICITY:"IfcRelConnectsWithEccentricity",IFCRELCONNECTSSTRUCTURALMEMBER:"IfcRelConnectsStructuralMember",IFCRELCONNECTSSTRUCTURALELEMENT:"IfcRelConnectsStructuralElement",IFCRELCONNECTSSTRUCTURALACTIVITY:"IfcRelConnectsStructuralActivity",IFCRELCONNECTSPORTS:"IfcRelConnectsPorts",IFCRELCONNECTSPORTTOELEMENT:"IfcRelConnectsPortToElement",IFCRELCONNECTSPATHELEMENTS:"IfcRelConnectsPathElements",IFCRELCONNECTSELEMENTS:"IfcRelConnectsElements",IFCRELCONNECTS:"IfcRelConnects",IFCRELASSOCIATESPROFILEPROPERTIES:"IfcRelAssociatesProfileProperties",IFCRELASSOCIATESMATERIAL:"IfcRelAssociatesMaterial",IFCRELASSOCIATESLIBRARY:"IfcRelAssociatesLibrary",IFCRELASSOCIATESDOCUMENT:"IfcRelAssociatesDocument",IFCRELASSOCIATESCONSTRAINT:"IfcRelAssociatesConstraint",IFCRELASSOCIATESCLASSIFICATION:"IfcRelAssociatesClassification",IFCRELASSOCIATESAPPROVAL:"IfcRelAssociatesApproval",IFCRELASSOCIATESAPPLIEDVALUE:"IfcRelAssociatesAppliedValue",IFCRELASSOCIATES:"IfcRelAssociates",IFCRELASSIGNSTORESOURCE:"IfcRelAssignsToResource",IFCRELASSIGNSTOPROJECTORDER:"IfcRelAssignsToProjectOrder",IFCRELASSIGNSTOPRODUCT:"IfcRelAssignsToProduct",IFCRELASSIGNSTOPROCESS:"IfcRelAssignsToProcess",IFCRELASSIGNSTOGROUP:"IfcRelAssignsToGroup",IFCRELASSIGNSTOCONTROL:"IfcRelAssignsToControl",IFCRELASSIGNSTOACTOR:"IfcRelAssignsToActor",IFCRELASSIGNS:"IfcRelAssigns",IFCRECTANGULARTRIMMEDSURFACE:"IfcRectangularTrimmedSurface",IFCRECTANGULARPYRAMID:"IfcRectangularPyramid",IFCRECTANGLEHOLLOWPROFILEDEF:"IfcRectangleHollowProfileDef",IFCPROXY:"IfcProxy",IFCPROPERTYSET:"IfcPropertySet",IFCPROJECTIONCURVE:"IfcProjectionCurve",IFCPROJECT:"IfcProject",IFCPRODUCT:"IfcProduct",IFCPROCESS:"IfcProcess",IFCPLANE:"IfcPlane",IFCPLANARBOX:"IfcPlanarBox",IFCPERMEABLECOVERINGPROPERTIES:"IfcPermeableCoveringProperties",IFCOFFSETCURVE3D:"IfcOffsetCurve3D",IFCOFFSETCURVE2D:"IfcOffsetCurve2D",IFCOBJECT:"IfcObject",IFCMANIFOLDSOLIDBREP:"IfcManifoldSolidBrep",IFCLINE:"IfcLine",IFCLSHAPEPROFILEDEF:"IfcLShapeProfileDef",IFCISHAPEPROFILEDEF:"IfcIShapeProfileDef",IFCGEOMETRICCURVESET:"IfcGeometricCurveSet",IFCFURNITURETYPE:"IfcFurnitureType",IFCFURNISHINGELEMENTTYPE:"IfcFurnishingElementType",IFCFLUIDFLOWPROPERTIES:"IfcFluidFlowProperties",IFCFILLAREASTYLETILES:"IfcFillAreaStyleTiles",IFCFILLAREASTYLETILESYMBOLWITHSTYLE:"IfcFillAreaStyleTileSymbolWithStyle",IFCFILLAREASTYLEHATCHING:"IfcFillAreaStyleHatching",IFCFACEBASEDSURFACEMODEL:"IfcFaceBasedSurfaceModel",IFCEXTRUDEDAREASOLID:"IfcExtrudedAreaSolid",IFCENERGYPROPERTIES:"IfcEnergyProperties",IFCELLIPSEPROFILEDEF:"IfcEllipseProfileDef",IFCELEMENTARYSURFACE:"IfcElementarySurface",IFCELEMENTTYPE:"IfcElementType",IFCELEMENTQUANTITY:"IfcElementQuantity",IFCEDGELOOP:"IfcEdgeLoop",IFCDRAUGHTINGPREDEFINEDCURVEFONT:"IfcDraughtingPredefinedCurveFont",IFCDRAUGHTINGPREDEFINEDCOLOUR:"IfcDraughtingPredefinedColour",IFCDRAUGHTINGCALLOUT:"IfcDraughtingCallout",IFCDOORSTYLE:"IfcDoorStyle",IFCDOORPANELPROPERTIES:"IfcDoorPanelProperties",IFCDOORLININGPROPERTIES:"IfcDoorLiningProperties",IFCDIRECTION:"IfcDirection",IFCDIMENSIONCURVETERMINATOR:"IfcDimensionCurveTerminator",IFCDIMENSIONCURVE:"IfcDimensionCurve",IFCDEFINEDSYMBOL:"IfcDefinedSymbol",IFCCURVEBOUNDEDPLANE:"IfcCurveBoundedPlane",IFCCURVE:"IfcCurve",IFCCSGSOLID:"IfcCsgSolid",IFCCSGPRIMITIVE3D:"IfcCsgPrimitive3D",IFCCRANERAILFSHAPEPROFILEDEF:"IfcCraneRailFShapeProfileDef",IFCCRANERAILASHAPEPROFILEDEF:"IfcCraneRailAShapeProfileDef",IFCCOMPOSITECURVESEGMENT:"IfcCompositeCurveSegment",IFCCLOSEDSHELL:"IfcClosedShell",IFCCIRCLEPROFILEDEF:"IfcCircleProfileDef",IFCCARTESIANTRANSFORMATIONOPERATOR3DNONUNIFORM:"IfcCartesianTransformationOperator3DNonUniform",IFCCARTESIANTRANSFORMATIONOPERATOR3D:"IfcCartesianTransformationOperator3D",IFCCARTESIANTRANSFORMATIONOPERATOR2DNONUNIFORM:"IfcCartesianTransformationOperator2DNonUniform",IFCCARTESIANTRANSFORMATIONOPERATOR2D:"IfcCartesianTransformationOperator2D",IFCCARTESIANTRANSFORMATIONOPERATOR:"IfcCartesianTransformationOperator",IFCCARTESIANPOINT:"IfcCartesianPoint",IFCCSHAPEPROFILEDEF:"IfcCShapeProfileDef",IFCBOXEDHALFSPACE:"IfcBoxedHalfSpace",IFCBOUNDINGBOX:"IfcBoundingBox",IFCBOUNDEDSURFACE:"IfcBoundedSurface",IFCBOOLEANRESULT:"IfcBooleanResult",IFCAXIS2PLACEMENT3D:"IfcAxis2Placement3D",IFCAXIS2PLACEMENT2D:"IfcAxis2Placement2D",IFCAXIS1PLACEMENT:"IfcAxis1Placement",IFCANNOTATIONSURFACE:"IfcAnnotationSurface",IFCANNOTATIONFILLAREAOCCURRENCE:"IfcAnnotationFillAreaOccurrence",IFCANNOTATIONFILLAREA:"IfcAnnotationFillArea",IFCANNOTATIONCURVEOCCURRENCE:"IfcAnnotationCurveOccurrence",IFCZSHAPEPROFILEDEF:"IfcZShapeProfileDef",IFCWINDOWSTYLE:"IfcWindowStyle",IFCWINDOWPANELPROPERTIES:"IfcWindowPanelProperties",IFCWINDOWLININGPROPERTIES:"IfcWindowLiningProperties",IFCVERTEXLOOP:"IfcVertexLoop",IFCVECTOR:"IfcVector",IFCUSHAPEPROFILEDEF:"IfcUShapeProfileDef",IFCTYPEPRODUCT:"IfcTypeProduct",IFCTYPEOBJECT:"IfcTypeObject",IFCTWODIRECTIONREPEATFACTOR:"IfcTwoDirectionRepeatFactor",IFCTRAPEZIUMPROFILEDEF:"IfcTrapeziumProfileDef",IFCTEXTLITERALWITHEXTENT:"IfcTextLiteralWithExtent",IFCTEXTLITERAL:"IfcTextLiteral",IFCTERMINATORSYMBOL:"IfcTerminatorSymbol",IFCTSHAPEPROFILEDEF:"IfcTShapeProfileDef",IFCSWEPTSURFACE:"IfcSweptSurface",IFCSWEPTDISKSOLID:"IfcSweptDiskSolid",IFCSWEPTAREASOLID:"IfcSweptAreaSolid",IFCSURFACESTYLERENDERING:"IfcSurfaceStyleRendering",IFCSURFACE:"IfcSurface",IFCSUBEDGE:"IfcSubedge",IFCSTRUCTURALSTEELPROFILEPROPERTIES:"IfcStructuralSteelProfileProperties",IFCSTRUCTURALPROFILEPROPERTIES:"IfcStructuralProfileProperties",IFCSTRUCTURALLOADSINGLEFORCEWARPING:"IfcStructuralLoadSingleForceWarping",IFCSTRUCTURALLOADSINGLEFORCE:"IfcStructuralLoadSingleForce",IFCSTRUCTURALLOADSINGLEDISPLACEMENTDISTORTION:"IfcStructuralLoadSingleDisplacementDistortion",IFCSTRUCTURALLOADSINGLEDISPLACEMENT:"IfcStructuralLoadSingleDisplacement",IFCSTRUCTURALLOADPLANARFORCE:"IfcStructuralLoadPlanarForce",IFCSTRUCTURALLOADLINEARFORCE:"IfcStructuralLoadLinearForce",IFCSPACETHERMALLOADPROPERTIES:"IfcSpaceThermalLoadProperties",IFCSOUNDVALUE:"IfcSoundValue",IFCSOUNDPROPERTIES:"IfcSoundProperties",IFCSOLIDMODEL:"IfcSolidModel",IFCSLIPPAGECONNECTIONCONDITION:"IfcSlippageConnectionCondition",IFCSHELLBASEDSURFACEMODEL:"IfcShellBasedSurfaceModel",IFCSERVICELIFEFACTOR:"IfcServiceLifeFactor",IFCSECTIONEDSPINE:"IfcSectionedSpine",IFCROUNDEDRECTANGLEPROFILEDEF:"IfcRoundedRectangleProfileDef",IFCRELATIONSHIP:"IfcRelationship",IFCREINFORCEMENTDEFINITIONPROPERTIES:"IfcReinforcementDefinitionProperties",IFCREGULARTIMESERIES:"IfcRegularTimeSeries",IFCRECTANGLEPROFILEDEF:"IfcRectangleProfileDef",IFCPROPERTYTABLEVALUE:"IfcPropertyTableValue",IFCPROPERTYSINGLEVALUE:"IfcPropertySingleValue",IFCPROPERTYSETDEFINITION:"IfcPropertySetDefinition",IFCPROPERTYREFERENCEVALUE:"IfcPropertyReferenceValue",IFCPROPERTYLISTVALUE:"IfcPropertyListValue",IFCPROPERTYENUMERATEDVALUE:"IfcPropertyEnumeratedValue",IFCPROPERTYDEFINITION:"IfcPropertyDefinition",IFCPROPERTYBOUNDEDVALUE:"IfcPropertyBoundedValue",IFCPRODUCTDEFINITIONSHAPE:"IfcProductDefinitionShape",IFCPREDEFINEDPOINTMARKERSYMBOL:"IfcPredefinedPointMarkerSymbol",IFCPREDEFINEDDIMENSIONSYMBOL:"IfcPredefinedDimensionSymbol",IFCPREDEFINEDCURVEFONT:"IfcPredefinedCurveFont",IFCPREDEFINEDCOLOUR:"IfcPredefinedColour",IFCPOLYGONALBOUNDEDHALFSPACE:"IfcPolygonalBoundedHalfSpace",IFCPOLYLOOP:"IfcPolyLoop",IFCPOINTONSURFACE:"IfcPointOnSurface",IFCPOINTONCURVE:"IfcPointOnCurve",IFCPOINT:"IfcPoint",IFCPLANAREXTENT:"IfcPlanarExtent",IFCPLACEMENT:"IfcPlacement",IFCPIXELTEXTURE:"IfcPixelTexture",IFCPHYSICALCOMPLEXQUANTITY:"IfcPhysicalComplexQuantity",IFCPATH:"IfcPath",IFCPARAMETERIZEDPROFILEDEF:"IfcParameterizedProfileDef",IFCORIENTEDEDGE:"IfcOrientedEdge",IFCOPENSHELL:"IfcOpenShell",IFCONEDIRECTIONREPEATFACTOR:"IfcOneDirectionRepeatFactor",IFCOBJECTDEFINITION:"IfcObjectDefinition",IFCMECHANICALCONCRETEMATERIALPROPERTIES:"IfcMechanicalConcreteMaterialProperties",IFCMATERIALDEFINITIONREPRESENTATION:"IfcMaterialDefinitionRepresentation",IFCMAPPEDITEM:"IfcMappedItem",IFCLOOP:"IfcLoop",IFCLOCALPLACEMENT:"IfcLocalPlacement",IFCLIGHTSOURCESPOT:"IfcLightSourceSpot",IFCLIGHTSOURCEPOSITIONAL:"IfcLightSourcePositional",IFCLIGHTSOURCEGONIOMETRIC:"IfcLightSourceGoniometric",IFCLIGHTSOURCEDIRECTIONAL:"IfcLightSourceDirectional",IFCLIGHTSOURCEAMBIENT:"IfcLightSourceAmbient",IFCLIGHTSOURCE:"IfcLightSource",IFCIRREGULARTIMESERIES:"IfcIrregularTimeSeries",IFCIMAGETEXTURE:"IfcImageTexture",IFCHYGROSCOPICMATERIALPROPERTIES:"IfcHygroscopicMaterialProperties",IFCHALFSPACESOLID:"IfcHalfSpaceSolid",IFCGRIDPLACEMENT:"IfcGridPlacement",IFCGEOMETRICSET:"IfcGeometricSet",IFCGEOMETRICREPRESENTATIONSUBCONTEXT:"IfcGeometricRepresentationSubContext",IFCGEOMETRICREPRESENTATIONITEM:"IfcGeometricRepresentationItem",IFCGEOMETRICREPRESENTATIONCONTEXT:"IfcGeometricRepresentationContext",IFCGENERALPROFILEPROPERTIES:"IfcGeneralProfileProperties",IFCGENERALMATERIALPROPERTIES:"IfcGeneralMaterialProperties",IFCFUELPROPERTIES:"IfcFuelProperties",IFCFILLAREASTYLE:"IfcFillAreaStyle",IFCFAILURECONNECTIONCONDITION:"IfcFailureConnectionCondition",IFCFACESURFACE:"IfcFaceSurface",IFCFACEOUTERBOUND:"IfcFaceOuterBound",IFCFACEBOUND:"IfcFaceBound",IFCFACE:"IfcFace",IFCEXTENDEDMATERIALPROPERTIES:"IfcExtendedMaterialProperties",IFCEDGECURVE:"IfcEdgeCurve",IFCEDGE:"IfcEdge",IFCDRAUGHTINGPREDEFINEDTEXTFONT:"IfcDraughtingPredefinedTextFont",IFCDOCUMENTREFERENCE:"IfcDocumentReference",IFCDIMENSIONPAIR:"IfcDimensionPair",IFCDIMENSIONCALLOUTRELATIONSHIP:"IfcDimensionCalloutRelationship",IFCDERIVEDPROFILEDEF:"IfcDerivedProfileDef",IFCCURVESTYLE:"IfcCurveStyle",IFCCONVERSIONBASEDUNIT:"IfcConversionBasedUnit",IFCCONTEXTDEPENDENTUNIT:"IfcContextDependentUnit",IFCCONNECTIONPOINTECCENTRICITY:"IfcConnectionPointEccentricity",IFCCONNECTIONCURVEGEOMETRY:"IfcConnectionCurveGeometry",IFCCONNECTEDFACESET:"IfcConnectedFaceSet",IFCCOMPOSITEPROFILEDEF:"IfcCompositeProfileDef",IFCCOMPLEXPROPERTY:"IfcComplexProperty",IFCCOLOURRGB:"IfcColourRgb",IFCCLASSIFICATIONREFERENCE:"IfcClassificationReference",IFCCENTERLINEPROFILEDEF:"IfcCenterLineProfileDef",IFCBLOBTEXTURE:"IfcBlobTexture",IFCARBITRARYPROFILEDEFWITHVOIDS:"IfcArbitraryProfileDefWithVoids",IFCARBITRARYOPENPROFILEDEF:"IfcArbitraryOpenProfileDef",IFCARBITRARYCLOSEDPROFILEDEF:"IfcArbitraryClosedProfileDef",IFCANNOTATIONTEXTOCCURRENCE:"IfcAnnotationTextOccurrence",IFCANNOTATIONSYMBOLOCCURRENCE:"IfcAnnotationSymbolOccurrence",IFCANNOTATIONSURFACEOCCURRENCE:"IfcAnnotationSurfaceOccurrence",IFCANNOTATIONOCCURRENCE:"IfcAnnotationOccurrence",IFCWATERPROPERTIES:"IfcWaterProperties",IFCVIRTUALGRIDINTERSECTION:"IfcVirtualGridIntersection",IFCVERTEXPOINT:"IfcVertexPoint",IFCVERTEXBASEDTEXTUREMAP:"IfcVertexBasedTextureMap",IFCVERTEX:"IfcVertex",IFCUNITASSIGNMENT:"IfcUnitAssignment",IFCTOPOLOGYREPRESENTATION:"IfcTopologyRepresentation",IFCTOPOLOGICALREPRESENTATIONITEM:"IfcTopologicalRepresentationItem",IFCTIMESERIESVALUE:"IfcTimeSeriesValue",IFCTIMESERIESREFERENCERELATIONSHIP:"IfcTimeSeriesReferenceRelationship",IFCTIMESERIES:"IfcTimeSeries",IFCTHERMALMATERIALPROPERTIES:"IfcThermalMaterialProperties",IFCTEXTUREVERTEX:"IfcTextureVertex",IFCTEXTUREMAP:"IfcTextureMap",IFCTEXTURECOORDINATEGENERATOR:"IfcTextureCoordinateGenerator",IFCTEXTURECOORDINATE:"IfcTextureCoordinate",IFCTEXTSTYLEWITHBOXCHARACTERISTICS:"IfcTextStyleWithBoxCharacteristics",IFCTEXTSTYLETEXTMODEL:"IfcTextStyleTextModel",IFCTEXTSTYLEFORDEFINEDFONT:"IfcTextStyleForDefinedFont",IFCTEXTSTYLEFONTMODEL:"IfcTextStyleFontModel",IFCTEXTSTYLE:"IfcTextStyle",IFCTELECOMADDRESS:"IfcTelecomAddress",IFCTABLEROW:"IfcTableRow",IFCTABLE:"IfcTable",IFCSYMBOLSTYLE:"IfcSymbolStyle",IFCSURFACETEXTURE:"IfcSurfaceTexture",IFCSURFACESTYLEWITHTEXTURES:"IfcSurfaceStyleWithTextures",IFCSURFACESTYLESHADING:"IfcSurfaceStyleShading",IFCSURFACESTYLEREFRACTION:"IfcSurfaceStyleRefraction",IFCSURFACESTYLELIGHTING:"IfcSurfaceStyleLighting",IFCSURFACESTYLE:"IfcSurfaceStyle",IFCSTYLEDREPRESENTATION:"IfcStyledRepresentation",IFCSTYLEDITEM:"IfcStyledItem",IFCSTYLEMODEL:"IfcStyleModel",IFCSTRUCTURALLOADTEMPERATURE:"IfcStructuralLoadTemperature",IFCSTRUCTURALLOADSTATIC:"IfcStructuralLoadStatic",IFCSTRUCTURALLOAD:"IfcStructuralLoad",IFCSTRUCTURALCONNECTIONCONDITION:"IfcStructuralConnectionCondition",IFCSIMPLEPROPERTY:"IfcSimpleProperty",IFCSHAPEREPRESENTATION:"IfcShapeRepresentation",IFCSHAPEMODEL:"IfcShapeModel",IFCSHAPEASPECT:"IfcShapeAspect",IFCSECTIONREINFORCEMENTPROPERTIES:"IfcSectionReinforcementProperties",IFCSECTIONPROPERTIES:"IfcSectionProperties",IFCSIUNIT:"IfcSIUnit",IFCROOT:"IfcRoot",IFCRIBPLATEPROFILEPROPERTIES:"IfcRibPlateProfileProperties",IFCREPRESENTATIONMAP:"IfcRepresentationMap",IFCREPRESENTATIONITEM:"IfcRepresentationItem",IFCREPRESENTATIONCONTEXT:"IfcRepresentationContext",IFCREPRESENTATION:"IfcRepresentation",IFCRELAXATION:"IfcRelaxation",IFCREINFORCEMENTBARPROPERTIES:"IfcReinforcementBarProperties",IFCREFERENCESVALUEDOCUMENT:"IfcReferencesValueDocument",IFCQUANTITYWEIGHT:"IfcQuantityWeight",IFCQUANTITYVOLUME:"IfcQuantityVolume",IFCQUANTITYTIME:"IfcQuantityTime",IFCQUANTITYLENGTH:"IfcQuantityLength",IFCQUANTITYCOUNT:"IfcQuantityCount",IFCQUANTITYAREA:"IfcQuantityArea",IFCPROPERTYENUMERATION:"IfcPropertyEnumeration",IFCPROPERTYDEPENDENCYRELATIONSHIP:"IfcPropertyDependencyRelationship",IFCPROPERTYCONSTRAINTRELATIONSHIP:"IfcPropertyConstraintRelationship",IFCPROPERTY:"IfcProperty",IFCPROFILEPROPERTIES:"IfcProfileProperties",IFCPROFILEDEF:"IfcProfileDef",IFCPRODUCTSOFCOMBUSTIONPROPERTIES:"IfcProductsOfCombustionProperties",IFCPRODUCTREPRESENTATION:"IfcProductRepresentation",IFCPRESENTATIONSTYLEASSIGNMENT:"IfcPresentationStyleAssignment",IFCPRESENTATIONSTYLE:"IfcPresentationStyle",IFCPRESENTATIONLAYERWITHSTYLE:"IfcPresentationLayerWithStyle",IFCPRESENTATIONLAYERASSIGNMENT:"IfcPresentationLayerAssignment",IFCPREDEFINEDTEXTFONT:"IfcPredefinedTextFont",IFCPREDEFINEDTERMINATORSYMBOL:"IfcPredefinedTerminatorSymbol",IFCPREDEFINEDSYMBOL:"IfcPredefinedSymbol",IFCPREDEFINEDITEM:"IfcPredefinedItem",IFCPOSTALADDRESS:"IfcPostalAddress",IFCPHYSICALSIMPLEQUANTITY:"IfcPhysicalSimpleQuantity",IFCPHYSICALQUANTITY:"IfcPhysicalQuantity",IFCPERSONANDORGANIZATION:"IfcPersonAndOrganization",IFCPERSON:"IfcPerson",IFCOWNERHISTORY:"IfcOwnerHistory",IFCORGANIZATIONRELATIONSHIP:"IfcOrganizationRelationship",IFCORGANIZATION:"IfcOrganization",IFCOPTICALMATERIALPROPERTIES:"IfcOpticalMaterialProperties",IFCOBJECTIVE:"IfcObjective",IFCOBJECTPLACEMENT:"IfcObjectPlacement",IFCNAMEDUNIT:"IfcNamedUnit",IFCMONETARYUNIT:"IfcMonetaryUnit",IFCMETRIC:"IfcMetric",IFCMECHANICALSTEELMATERIALPROPERTIES:"IfcMechanicalSteelMaterialProperties",IFCMECHANICALMATERIALPROPERTIES:"IfcMechanicalMaterialProperties",IFCMEASUREWITHUNIT:"IfcMeasureWithUnit",IFCMATERIALPROPERTIES:"IfcMaterialProperties",IFCMATERIALLIST:"IfcMaterialList",IFCMATERIALLAYERSETUSAGE:"IfcMaterialLayerSetUsage",IFCMATERIALLAYERSET:"IfcMaterialLayerSet",IFCMATERIALLAYER:"IfcMaterialLayer",IFCMATERIALCLASSIFICATIONRELATIONSHIP:"IfcMaterialClassificationRelationship",IFCMATERIAL:"IfcMaterial",IFCLOCALTIME:"IfcLocalTime",IFCLIGHTINTENSITYDISTRIBUTION:"IfcLightIntensityDistribution",IFCLIGHTDISTRIBUTIONDATA:"IfcLightDistributionData",IFCLIBRARYREFERENCE:"IfcLibraryReference",IFCLIBRARYINFORMATION:"IfcLibraryInformation",IFCIRREGULARTIMESERIESVALUE:"IfcIrregularTimeSeriesValue",IFCGRIDAXIS:"IfcGridAxis",IFCEXTERNALLYDEFINEDTEXTFONT:"IfcExternallyDefinedTextFont",IFCEXTERNALLYDEFINEDSYMBOL:"IfcExternallyDefinedSymbol",IFCEXTERNALLYDEFINEDSURFACESTYLE:"IfcExternallyDefinedSurfaceStyle",IFCEXTERNALLYDEFINEDHATCHSTYLE:"IfcExternallyDefinedHatchStyle",IFCEXTERNALREFERENCE:"IfcExternalReference",IFCENVIRONMENTALIMPACTVALUE:"IfcEnvironmentalImpactValue",IFCDRAUGHTINGCALLOUTRELATIONSHIP:"IfcDraughtingCalloutRelationship",IFCDOCUMENTINFORMATIONRELATIONSHIP:"IfcDocumentInformationRelationship",IFCDOCUMENTINFORMATION:"IfcDocumentInformation",IFCDOCUMENTELECTRONICFORMAT:"IfcDocumentElectronicFormat",IFCDIMENSIONALEXPONENTS:"IfcDimensionalExponents",IFCDERIVEDUNITELEMENT:"IfcDerivedUnitElement",IFCDERIVEDUNIT:"IfcDerivedUnit",IFCDATEANDTIME:"IfcDateAndTime",IFCCURVESTYLEFONTPATTERN:"IfcCurveStyleFontPattern",IFCCURVESTYLEFONTANDSCALING:"IfcCurveStyleFontAndScaling",IFCCURVESTYLEFONT:"IfcCurveStyleFont",IFCCURRENCYRELATIONSHIP:"IfcCurrencyRelationship",IFCCOSTVALUE:"IfcCostValue",IFCCOORDINATEDUNIVERSALTIMEOFFSET:"IfcCoordinatedUniversalTimeOffset",IFCCONSTRAINTRELATIONSHIP:"IfcConstraintRelationship",IFCCONSTRAINTCLASSIFICATIONRELATIONSHIP:"IfcConstraintClassificationRelationship",IFCCONSTRAINTAGGREGATIONRELATIONSHIP:"IfcConstraintAggregationRelationship",IFCCONSTRAINT:"IfcConstraint",IFCCONNECTIONSURFACEGEOMETRY:"IfcConnectionSurfaceGeometry",IFCCONNECTIONPORTGEOMETRY:"IfcConnectionPortGeometry",IFCCONNECTIONPOINTGEOMETRY:"IfcConnectionPointGeometry",IFCCONNECTIONGEOMETRY:"IfcConnectionGeometry",IFCCOLOURSPECIFICATION:"IfcColourSpecification",IFCCLASSIFICATIONNOTATIONFACET:"IfcClassificationNotationFacet",IFCCLASSIFICATIONNOTATION:"IfcClassificationNotation",IFCCLASSIFICATIONITEMRELATIONSHIP:"IfcClassificationItemRelationship",IFCCLASSIFICATIONITEM:"IfcClassificationItem",IFCCLASSIFICATION:"IfcClassification",IFCCALENDARDATE:"IfcCalendarDate",IFCBOUNDARYNODECONDITIONWARPING:"IfcBoundaryNodeConditionWarping",IFCBOUNDARYNODECONDITION:"IfcBoundaryNodeCondition",IFCBOUNDARYFACECONDITION:"IfcBoundaryFaceCondition",IFCBOUNDARYEDGECONDITION:"IfcBoundaryEdgeCondition",IFCBOUNDARYCONDITION:"IfcBoundaryCondition",IFCAPPROVALRELATIONSHIP:"IfcApprovalRelationship",IFCAPPROVALPROPERTYRELATIONSHIP:"IfcApprovalPropertyRelationship",IFCAPPROVALACTORRELATIONSHIP:"IfcApprovalActorRelationship",IFCAPPROVAL:"IfcApproval",IFCAPPLIEDVALUERELATIONSHIP:"IfcAppliedValueRelationship",IFCAPPLIEDVALUE:"IfcAppliedValue",IFCAPPLICATION:"IfcApplication",IFCADDRESS:"IfcAddress",IFCACTORROLE:"IfcActorRole"};class Oc{constructor(){C(this,"factor",1);C(this,"complement",1)}apply(i){const e=this.getScaleMatrix().multiply(i);i.copy(e)}setUp(i){var n,r,o;this.factor=1;const t=this.getLengthUnits(i);if(!t)return;const e=t==null,s=t.Name===void 0||t.Name===null;e||s||(t.Name.value==="FOOT"&&(this.factor=.3048),((n=t.Prefix)==null?void 0:n.value)==="MILLI"?this.complement=.001:((r=t.Prefix)==null?void 0:r.value)==="CENTI"?this.complement=.01:((o=t.Prefix)==null?void 0:o.value)==="DECI"&&(this.complement=.01))}getLengthUnits(i){try{const e=i.GetLineIDsWithType(0,k.IFCUNITASSIGNMENT).get(0),s=i.GetLine(0,e);for(const n of s.Units){if(!n||n.value===null||n.value===void 0)continue;const r=i.GetLine(0,n.value);if(r.UnitType&&r.UnitType.value==="LENGTHUNIT")return r}return null}catch{return console.log("Could not get units"),null}}getScaleMatrix(){const i=this.factor;return new b.Matrix4().fromArray([i,0,0,0,0,i,0,0,0,0,i,0,0,0,0,1])}}class co{constructor(){C(this,"itemsByFloor",{});C(this,"_units",new Oc)}setUp(i){this._units.setUp(i),this.cleanUp();try{const t=i.GetLineIDsWithType(0,k.IFCRELCONTAINEDINSPATIALSTRUCTURE),e=new Set,s=i.GetLineIDsWithType(0,k.IFCSPACE);for(let l=0;l<s.size();l++)e.add(s.get(l));const n=i.GetLineIDsWithType(0,k.IFCRELAGGREGATES),r=n.size();for(let l=0;l<r;l++){const h=n.get(l),f=i.GetLine(0,h);if(!f||!f.RelatingObject||!f.RelatedObjects)continue;const I=f.RelatingObject.value,u=f.RelatedObjects;for(const d of u){const E=d.value;e.has(E)&&(this.itemsByFloor[E]=I)}}const o={},a=t.size();for(let l=0;l<a;l++){const h=t.get(l),f=i.GetLine(0,h);if(!f||!f.RelatingStructure||!f.RelatedElements)continue;const I=f.RelatingStructure.value,u=f.RelatedElements;if(e.has(I))for(const d of u){o[I]||(o[I]=[]);const E=d.value;o[I].push(E)}else for(const d of u){const E=d.value;this.itemsByFloor[E]=I}}for(const l in o){const h=this.itemsByFloor[l];if(h!==void 0){const f=o[l];for(const I of f)this.itemsByFloor[I]=h}}for(let l=0;l<r;l++){const h=n.get(l),f=i.GetLine(0,h);if(!f||!f.RelatingObject||!f.RelatedObjects)continue;const I=f.RelatingObject.value,u=f.RelatedObjects;for(const d of u){const E=d.value,T=this.itemsByFloor[I];T!==void 0&&(this.itemsByFloor[E]=T)}}}catch{console.log("Could not get floors.")}}cleanUp(){this.itemsByFloor={}}}class zs{constructor(){C(this,"includeProperties",!0);C(this,"optionalCategories",[k.IFCSPACE]);C(this,"wasm",{path:"",absolute:!1,logLevel:k.LogLevel.LOG_LEVEL_OFF});C(this,"excludedCategories",new Set);C(this,"includedCategories",new Set);C(this,"saveLocations",!1);C(this,"webIfc",{COORDINATE_TO_ORIGIN:!0});C(this,"autoSetWasm",!0);C(this,"customLocateFileHandler",null)}}class lo{constructor(){C(this,"defLineMat",new b.LineBasicMaterial({color:16777215}))}read(i){const t=i.GetAllAlignments(0),e=i.GetAllCrossSections2D(0),s=i.GetAllCrossSections3D(0),n={IfcAlignment:t,IfcCrossSection2D:e,IfcCrossSection3D:s};return this.get(n)}get(i){if(i.IfcAlignment){const t=new Map;for(const e of i.IfcAlignment){const s=new jt.Alignment;s.absolute=this.getCurves(e.curve3D,s),s.horizontal=this.getCurves(e.horizontal,s),s.vertical=this.getCurves(e.vertical,s),t.set(t.size,s)}return{alignments:t,coordinationMatrix:new b.Matrix4}}}getCurves(i,t){const e=[];let s=0;for(const n of i){const r={};if(n.data)for(const I of n.data){const[u,d]=I.split(": "),E=parseFloat(d);r[u]=E||d}const{points:o}=n,a=new Float32Array(o.length*3);for(let I=0;I<o.length;I++){const{x:u,y:d,z:E}=o[I];a[I*3]=u,a[I*3+1]=d,a[I*3+2]=E||0}const l=new b.BufferAttribute(a,3),h=new b.EdgesGeometry;h.setAttribute("position",l);const f=new jt.CurveMesh(s,r,t,h,this.defLineMat);e.push(f.curve),s++}return e}}class ho{getNameInfo(i){var f;const t={},{arguments:e}=i.GetHeaderLine(0,k.FILE_NAME)||{};if(!e)return t;const[s,n,r,o,a,l,h]=e;if(s!=null&&s.value&&(t.name=s.value),n!=null&&n.value&&(t.creationDate=new Date(n.value)),r){t.author={};const[I,u]=r;I!=null&&I.value&&(t.author.name=I.value),u!=null&&u.value&&(t.author.email=u.value)}return o&&((f=o[0])!=null&&f.value)&&(t.organization=o[0].value),a!=null&&a.value&&(t.preprocessorVersion=a==null?void 0:a.value),l!=null&&l.value&&(t.originatingSystem=l==null?void 0:l.value),h!=null&&h.value&&(t.authorization=h==null?void 0:h.value),t}getDescriptionInfo(i){var r;const t={},{arguments:e}=i.GetHeaderLine(0,k.FILE_DESCRIPTION)||{};if(!e)return t;const[s,n]=e;if(Array.isArray(s)&&((r=s[0])!=null&&r.value)){const o=s[0].value.match(/\[([^\]]+)\]/);o&&o[1]&&(t.viewDefinition=o[1])}return n!=null&&n.value&&(t.implementationLevel=n.value),t}}class uo{static get(i,t){const e=[k.IFCPROJECT,k.IFCSITE,k.IFCBUILDING,k.IFCBUILDINGSTOREY,k.IFCSPACE,k.IFCROAD,k.IFCFACILITY,k.IFCFACILITYPART,k.IFCBRIDGE],s=i.data;for(const n of e){const r=t.GetLineIDsWithType(0,n),o=r.size();for(let a=0;a<o;a++){const l=r.get(a);s.has(l)||s.set(l,[[],[0,n]])}}}}const Vn=new Set([1123145078,574549367,1675464909,2059837836,3798115385,32440307,3125803723,3207858831,2740243338,2624227202,4240577450,3615266464,3724593414,220341763,477187591,1878645084,1300840506,3303107099,1607154358,1878645084,846575682,1351298697,2417041796,3049322572,3331915920,1416205885,776857604,3285139300,3958052878,2827736869,2732653382,673634403,3448662350,4142052618,2924175390,803316827,2556980723,1809719519,2205249479,807026263,3737207727,1660063152,2347385850,2705031697,3732776249,2485617015,2611217952,1704287377,2937912522,2770003689,1281925730,1484403080,3448662350,4142052618,3800577675,4006246654,3590301190,1383045692,2775532180,2047409740,370225590,3593883385,2665983363,4124623270,812098782,3649129432,987898635,1105321065,3510044353,1635779807,2603310189,3406155212,1310608509,4261334040,2736907675,3649129432,1136057603,1260505505,4182860854,2713105998,2898889636,59481748,3749851601,3486308946,3150382593,1062206242,3264961684,15328376,1485152156,370225590,1981873012,2859738748,45288368,2614616156,2732653382,775493141,2147822146,2601014836,2629017746,1186437898,2367409068,1213902940,3632507154,3900360178,476780140,1472233963,2804161546,3008276851,738692330,374418227,315944413,3905492369,3570813810,2571569899,178912537,2294589976,1437953363,2133299955,572779678,3092502836,388784114,2624227202,1425443689,3057273783,2347385850,1682466193,2519244187,2839578677,3958567839,2513912981,2830218821,427810014]),Os=class Os extends mt{constructor(t){super(t);C(this,"enabled",!0);t.add(Os.uuid,this)}async export(t,e,s=!1,n=!0){const r={},o=new Set(t.GetIfcEntityList(e)),a=new Set([k.IFCPROJECT,k.IFCSITE,k.IFCBUILDING,k.IFCBUILDINGSTOREY,k.IFCSPACE]);for(const l of a)o.add(l);for(const l of o){if(Vn.has(l))continue;const h=a.has(l)&&n,f=t.GetLineIDsWithType(e,l);for(const I of f)try{const u=t.GetLine(0,I,h,s);r[u.expressID]=u}catch{console.log(`Could not get property ${I}, with recursive ${h} and indirect ${s}.`)}}return r}};C(Os,"uuid","b32c4332-cd67-436e-ba7f-196646c7a635");let ds=Os;const Oi=class Oi extends mt{constructor(t){super(t);C(this,"onDisposed",new q);C(this,"onIfcStartedLoading",new q);C(this,"onSetup",new q);C(this,"settings",new zs);C(this,"webIfc",new k.IfcAPI);C(this,"enabled",!0);C(this,"_material",new b.MeshLambertMaterial);C(this,"_spatialTree",new co);C(this,"_metaData",new ho);C(this,"_fragmentInstances",new Map);C(this,"_civil",new lo);C(this,"_visitedFragments",new Map);C(this,"_materialT",new b.MeshLambertMaterial({transparent:!0,opacity:.5}));this.components.add(Oi.uuid,this),this.settings.excludedCategories.add(k.IFCOPENINGELEMENT)}dispose(){this.webIfc=null,this.onDisposed.trigger(Oi.uuid),this.onDisposed.reset()}async setup(t){this.settings={...this.settings,...t},this.settings.autoSetWasm&&await this.autoSetWasm(),this.onSetup.trigger()}async load(t,e=!0,s=""){const n=performance.now();this.onIfcStartedLoading.trigger(),await this.readIfcFile(t);const r=await this.getAllGeometries();r.name=s;const a=await this.components.get(ds).export(this.webIfc,0);r.setLocalProperties(a);const l=this.components.get(pt);l.groups.set(r.uuid,r);for(const h of r.items)l.list.set(h.id,h),h.mesh.uuid=h.id,h.group=r;l.onFragmentsLoaded.trigger(r),e&&l.coordinate([r]);for(const[h]of r.data){const f=a[h];if(!f||!f.GlobalId)continue;const I=f.GlobalId.value||f.GlobalId;r.globalToExpressIDs.set(I,h)}return uo.get(r,this.webIfc),this.cleanUp(),console.log(`Streaming the IFC took ${performance.now()-n} ms!`),r}async readIfcFile(t){const{path:e,absolute:s,logLevel:n}=this.settings.wasm;return this.webIfc.SetWasmPath(e,s),await this.webIfc.Init(this.settings.customLocateFileHandler||void 0),n&&this.webIfc.SetLogLevel(n),this.webIfc.OpenModel(t,this.settings.webIfc)}cleanUp(){try{this.webIfc.Dispose()}catch{console.log("Web-ifc wasn't disposed.")}this.webIfc=null,this.webIfc=new k.IfcAPI,this._visitedFragments.clear(),this._fragmentInstances.clear()}async getAllGeometries(){this._spatialTree.setUp(this.webIfc);const t=this.webIfc.GetIfcEntityList(0),e=new jt.FragmentsGroup;e.ifcMetadata={name:"",description:"",...this._metaData.getNameInfo(this.webIfc),...this._metaData.getDescriptionInfo(this.webIfc),schema:this.webIfc.GetModelSchema(0)||"IFC2X3",maxExpressID:this.webIfc.GetMaxExpressID(0)};const s=[];for(const r of t){if(!this.webIfc.IsIfcElement(r)&&r!==k.IFCSPACE)continue;const o=this.settings.includedCategories;if(o.size>0&&!o.has(r))continue;if(this.settings.excludedCategories.has(r))continue;const a=this.webIfc.GetLineIDsWithType(0,r),l=a.size();for(let h=0;h<l;h++){const f=a.get(h);s.push(f);const I=this._spatialTree.itemsByFloor[f]||0;e.data.set(f,[[],[I,r]])}}this._spatialTree.cleanUp(),this.webIfc.StreamMeshes(0,s,r=>{this.getMesh(r,e)});for(const r of this._visitedFragments){const{index:o,fragment:a}=r[1];e.keyFragments.set(o,a.id)}for(const r of e.items){const o=this._fragmentInstances.get(r.id);if(!o)throw new Error("Fragment not found!");const a=[];for(const[l,h]of o)a.push(h);r.add(a)}const n=this.webIfc.GetCoordinationMatrix(0);return e.coordinationMatrix.fromArray(n),e.civilData=this._civil.read(this.webIfc),e}getMesh(t,e){const s=t.geometries.size(),n=t.expressID;for(let r=0;r<s;r++){const o=t.geometries.get(r),{x:a,y:l,z:h,w:f}=o.color,I=f!==1,{geometryExpressID:u}=o,d=`${u}-${I}`;if(!this._visitedFragments.has(d)){const S=this.getGeometry(this.webIfc,u),O=I?this._materialT:this._material,y=new jt.Fragment(S,O,1);e.add(y.mesh),e.items.push(y);const w=this._visitedFragments.size;this._visitedFragments.set(d,{index:w,fragment:y})}const E=new b.Color().setRGB(a,l,h,"srgb"),T=new b.Matrix4;T.fromArray(o.flatTransformation);const p=this._visitedFragments.get(d);if(p===void 0)throw new Error("Error getting geometry data for streaming!");const m=e.data.get(n);if(!m)throw new Error("Data not found!");m[0].push(p.index);const{fragment:F}=p;this._fragmentInstances.has(F.id)||this._fragmentInstances.set(F.id,new Map);const R=this._fragmentInstances.get(F.id);if(!R)throw new Error("Instances not found!");if(R.has(n)){const S=R.get(n);if(!S)throw new Error("Instance not found!");S.transforms.push(T),S.colors&&S.colors.push(E)}else R.set(n,{id:n,transforms:[T],colors:[E]})}}getGeometry(t,e){const s=t.GetGeometry(0,e),n=t.GetIndexArray(s.GetIndexData(),s.GetIndexDataSize()),r=t.GetVertexArray(s.GetVertexData(),s.GetVertexDataSize()),o=new Float32Array(r.length/2),a=new Float32Array(r.length/2);for(let I=0;I<r.length;I+=6)o[I/2]=r[I],o[I/2+1]=r[I+1],o[I/2+2]=r[I+2],a[I/2]=r[I+3],a[I/2+1]=r[I+4],a[I/2+2]=r[I+5];const l=new b.BufferGeometry,h=new b.BufferAttribute(o,3),f=new b.BufferAttribute(a,3);return l.setAttribute("position",h),l.setAttribute("normal",f),l.setIndex(Array.from(n)),s.delete(),l}async autoSetWasm(){const t=await fetch(`https://unpkg.com/@thatopen/components@${Li.release}/package.json`);if(!t.ok){console.warn("Couldn't get openbim-components package.json. Set wasm settings manually.");return}const e=await t.json();if(!("web-ifc"in e.peerDependencies))console.warn("Couldn't get web-ifc from peer dependencies in openbim-components. Set wasm settings manually.");else{const s=e.peerDependencies["web-ifc"];this.settings.wasm.path=`https://unpkg.com/web-ifc@${s}/`,this.settings.wasm.absolute=!0}}};C(Oi,"uuid","a659add7-1418-4771-a0d6-7d4d438e4624");let Es=Oi;const fo={IfcRelAssignsToControl:{related:5,relating:7},IfcRelAssignsToGroup:{related:5,relating:7},IfcRelAssignsToProduct:{related:5,relating:7},IfcRelAssociatesClassification:{related:5,relating:6},IfcRelAssociatesMaterial:{related:5,relating:6},IfcRelAssociatesDocument:{related:5,relating:6},IfcRelContainedInSpatialStructure:{related:5,relating:6},IfcRelFlowControlElements:{related:5,relating:6},IfcRelConnectsElements:{related:7,relating:6},IfcRelDeclares:{related:6,relating:5},IfcRelAggregates:{related:6,relating:5},IfcRelNests:{related:6,relating:5},IfcRelDefinesByProperties:{related:5,relating:6},IfcRelDefinesByType:{related:5,relating:6},IfcRelDefinesByTemplate:{related:5,relating:6}},Io={[k.IFCRELASSIGNSTOCONTROL]:"IfcRelAssignsToControl",[k.IFCRELASSIGNSTOGROUP]:"IfcRelAssignsToGroup",[k.IFCRELASSIGNSTOPRODUCT]:"IfcRelAssignsToProduct",[k.IFCRELASSOCIATESCLASSIFICATION]:"IfcRelAssociatesClassification",[k.IFCRELASSOCIATESMATERIAL]:"IfcRelAssociatesMaterial",[k.IFCRELASSOCIATESDOCUMENT]:"IfcRelAssociatesDocument",[k.IFCRELCONTAINEDINSPATIALSTRUCTURE]:"IfcRelContainedInSpatialStructure",[k.IFCRELCONNECTSELEMENTS]:"IfcRelConnectsElements",[k.IFCRELFLOWCONTROLELEMENTS]:"IfcRelFlowControlElements",[k.IFCRELDECLARES]:"IfcRelDeclares",[k.IFCRELAGGREGATES]:"IfcRelAggregates",[k.IFCRELNESTS]:"IfcRelNests",[k.IFCRELDEFINESBYPROPERTIES]:"IfcRelDefinesByProperties",[k.IFCRELDEFINESBYTYPE]:"IfcRelDefinesByType",[k.IFCRELDEFINESBYTEMPLATE]:"IfcRelDefinesByTemplate"},Ae=class Ae extends mt{constructor(t){super(t);C(this,"onDisposed",new q);C(this,"onRequestFile",new q);C(this,"ifcToExport",null);C(this,"onElementToPset",new q);C(this,"onPropToPset",new q);C(this,"onPsetRemoved",new q);C(this,"onDataChanged",new q);C(this,"wasm",{path:"/",absolute:!1});C(this,"enabled",!0);C(this,"attributeListeners",{});C(this,"selectedModel");C(this,"changeMap",{});this.components.add(Ae.uuid,this)}dispose(){this.selectedModel=void 0,this.attributeListeners={},this.changeMap={},this.onElementToPset.reset(),this.onPropToPset.reset(),this.onPsetRemoved.reset(),this.onDataChanged.reset(),this.onDisposed.trigger(Ae.uuid),this.onDisposed.reset()}static getIFCSchema(t){const e=t.ifcMetadata.schema;if(!e)throw new Error("IFC Schema not found");return e.startsWith("IFC2X3")?"IFC2X3":e.startsWith("IFC4")&&e.replace("IFC4","")===""?"IFC4":e.startsWith("IFC4X3")?"IFC4X3":e}async setData(t,...e){for(const s of e){const{expressID:n}=s;(!n||n===-1)&&(s.expressID=this.getNewExpressID(t)),await t.setProperties(s.expressID,s),this.registerChange(t,s.expressID)}}async newPset(t,e,s){const n=Ae.getIFCSchema(t),{ownerHistoryHandle:r}=await this.getOwnerHistory(t),o=this.newGUID(t),a=new k[n].IfcLabel(e),l=s?new k[n].IfcText(s):null,h=new k[n].IfcPropertySet(o,r,a,l,[]);h.expressID=this.getNewExpressID(t);const f=this.newGUID(t),I=new k[n].IfcRelDefinesByProperties(f,r,null,null,[],new k.Handle(h.expressID));return I.expressID=this.getNewExpressID(t),await this.setData(t,h,I),{pset:h,rel:I}}async removePset(t,...e){for(const s of e){const n=await t.getProperties(s);if((n==null?void 0:n.type)!==k.IFCPROPERTYSET)continue;const r=await be.getPsetRel(t,s);if(r&&(await t.setProperties(r,null),this.registerChange(t,r)),n){for(const o of n.HasProperties)await t.setProperties(o.value,null);await t.setProperties(s,null),this.onPsetRemoved.trigger({model:t,psetID:s}),this.registerChange(t,s)}}}newSingleStringProperty(t,e,s,n){return this.newSingleProperty(t,e,s,n)}newSingleNumericProperty(t,e,s,n){return this.newSingleProperty(t,e,s,n)}newSingleBooleanProperty(t,e,s,n){return this.newSingleProperty(t,e,s,n)}async removePsetProp(t,e,s){const n=await t.getProperties(e),r=await t.getProperties(s);!n||!r||n.type===k.IFCPROPERTYSET&&r&&(n.HasProperties=n.HasProperties.filter(o=>o.value!==s),await t.setProperties(s,null),this.registerChange(t,e,s))}addElementToPset(t,e,...s){this.components.get(Ut).addEntitiesRelation(t,e,{type:k.IFCRELDEFINESBYPROPERTIES,inv:"IsDefinedBy"},...s)}async addPropToPset(t,e,...s){const n=await t.getProperties(e);if(n){for(const r of s){if(n.HasProperties.includes(r))continue;const o=new k.Handle(r);n.HasProperties.push(o),this.onPropToPset.trigger({model:t,psetID:e,propID:r})}this.registerChange(t,e)}}async createIfcRel(t,e,s,n){const r=Io[e];if(!r)throw new Error(`IfcPropertiesManager: ${r} is unsoported.`);const o=t.ifcMetadata.schema,a=fo[r],l=k[o][r];if(!(a&&l))throw new Error(`IfcPropertiesManager: ${r} is unsoported.`);const h=[new k[o].IfcGloballyUniqueId(Kt.create())],{related:f,relating:I}=a,d=[...new Set(n)].map(p=>new k.Handle(p)),E=(p,m)=>{for(let F=p;F<m-1;F++)h.push(null)};f<I?(E(1,f),h.push(d),E(f,I),h.push(new k.Handle(s))):(E(1,I),E(I,f),h.push(new k.Handle(s)),h.push(d));const T=new l(...h);return await this.setData(t,T),T}async saveToIfc(t,e){const s=this.components.get(Es),n=s.webIfc,r=await s.readIfcFile(e);await this.components.get(Ut).applyRelationChanges();const a=this.changeMap[t.uuid]??[];for(const h of a){const f=await t.getProperties(h);f?n.WriteLine(r,f):n.DeleteLine(r,h)}const l=n.SaveModel(r);return s.webIfc.CloseModel(r),s.cleanUp(),l}async getEntityRef(t,e){const s=await t.getAllPropertiesOfType(e);if(!s)return null;const n=[];for(const r in s){const o=new k.Handle(Number(r));n.push(o)}return n}async setAttributeListener(t,e,s){this.attributeListeners[t.uuid]||(this.attributeListeners[t.uuid]={});const n=this.attributeListeners[t.uuid][e]?this.attributeListeners[t.uuid][e][s]:null;if(n)return n;const r=await t.getProperties(e);if(!r)throw new Error(`Entity with expressID ${e} doesn't exists.`);const o=r[s];if(Array.isArray(o)||!o)throw new Error(`Attribute ${s} is array or null, and it can't have a listener.`);const a=o.value;if(a===void 0||a==null)throw new Error(`Attribute ${s} has a badly defined handle.`);const l=new q;return Object.defineProperty(r[s],"value",{get(){return this._value},async set(h){this._value=h,l.trigger(h)}}),r[s].value=a,this.attributeListeners[t.uuid][e]||(this.attributeListeners[t.uuid][e]={}),this.attributeListeners[t.uuid][e][s]=l,l}getNewExpressID(t){return t.ifcMetadata.maxExpressID++,t.ifcMetadata.maxExpressID}newGUID(t){const e=Ae.getIFCSchema(t);return new k[e].IfcGloballyUniqueId(Kt.create())}async getOwnerHistory(t){const e=await t.getAllPropertiesOfType(k.IFCOWNERHISTORY);if(!e)throw new Error("No OwnerHistory was found.");const s=Object.keys(e).map(o=>parseInt(o,10)),n=e[s[0]],r=new k.Handle(n.expressID);return{ownerHistory:n,ownerHistoryHandle:r}}registerChange(t,...e){this.changeMap[t.uuid]||(this.changeMap[t.uuid]=new Set);for(const s of e)this.changeMap[t.uuid].add(s),this.onDataChanged.trigger({model:t,expressID:s})}async newSingleProperty(t,e,s,n){const r=Ae.getIFCSchema(t),o=new k[r].IfcIdentifier(s),a=new k[r][e](n),l=new k[r].IfcPropertySingleValue(o,null,a,null);return l.expressID=this.getNewExpressID(t),await this.setData(t,l),l}};C(Ae,"uuid","58c2d9f0-183c-48d6-a402-dfcf5b9a34df");let ps=Ae;const Ni=class Ni extends mt{constructor(t){super(t);C(this,"onDisposed",new q);C(this,"onRelationsIndexed",new q);C(this,"relationMaps",{});C(this,"enabled",!0);C(this,"_relToAttributesMap",Sn);C(this,"_inverseAttributes",["IsDecomposedBy","Decomposes","AssociatedTo","HasAssociations","ClassificationForObjects","IsGroupedBy","HasAssignments","IsDefinedBy","DefinesOcurrence","IsTypedBy","Types","Defines","ContainedInStructure","ContainsElements","HasControlElements","AssignedToFlowElement","ConnectedTo","ConnectedFrom","ReferencedBy","Declares","HasContext","Controls","IsNestedBy","Nests","DocumentRefForObjects"]);C(this,"_ifcRels",[k.IFCRELAGGREGATES,k.IFCRELASSOCIATESMATERIAL,k.IFCRELASSOCIATESCLASSIFICATION,k.IFCRELASSIGNSTOGROUP,k.IFCRELDEFINESBYPROPERTIES,k.IFCRELDEFINESBYTYPE,k.IFCRELDEFINESBYTEMPLATE,k.IFCRELCONTAINEDINSPATIALSTRUCTURE,k.IFCRELFLOWCONTROLELEMENTS,k.IFCRELCONNECTSELEMENTS,k.IFCRELASSIGNSTOPRODUCT,k.IFCRELDECLARES,k.IFCRELASSIGNSTOCONTROL,k.IFCRELNESTS,k.IFCRELASSOCIATESDOCUMENT]);C(this,"onFragmentsDisposed",t=>{delete this.relationMaps[t.groupID]});C(this,"_changeMap",{});C(this,"onEntitiesRelated",new q);this.components.add(Ni.uuid,this),t.get(pt).onFragmentsDisposed.add(this.onFragmentsDisposed)}indexRelations(t,e,s,n){const r=Object.keys(e).find(f=>f.startsWith("Relating")),o=Object.keys(e).find(f=>f.startsWith("Related"));if(!(r&&o))return;const a=e[r].value,l=e[o].map(f=>f.value),h=this.getAttributeIndex(n);if(h!==null){let f=t.get(a);f||(f=new Map,t.set(a,f));let I=f.get(h);I||(I=[],f.set(h,I));for(const u of l)I.push(u)}for(const f of l){const I=this.getAttributeIndex(s);if(I===null)continue;let u=t.get(f);u||(u=new Map,t.set(f,u));let d=u.get(I);d||(d=[],u.set(I,d)),d.push(a)}}getAttributeIndex(t){const e=this._inverseAttributes.indexOf(t);return e===-1?null:e}setRelationMap(t,e){this.relationMaps[t.uuid]=e,this.onRelationsIndexed.trigger({modelID:t.uuid,relationsMap:e})}async process(t){if(!t.hasProperties)throw new Error("FragmentsGroup properties not found");let e=this.relationMaps[t.uuid];if(e)return e;e=new Map;for(const s of this._ifcRels){const n=await t.getAllPropertiesOfType(s);if(!n)continue;const r=this._relToAttributesMap.get(s);if(!r)continue;const{forRelated:o,forRelating:a}=r;for(const l in n){const h=n[l];this.indexRelations(e,h,o,a)}}return this.setRelationMap(t,e),e}async processFromWebIfc(t,e){const s=new Map;for(const n of this._ifcRels){const r=this._relToAttributesMap.get(n);if(!r)continue;const{forRelated:o,forRelating:a}=r,l=t.GetLineIDsWithType(e,n);for(let h=0;h<l.size();h++){const f=await t.properties.getItemProperties(e,l.get(h));this.indexRelations(s,f,o,a)}}return this.onRelationsIndexed.trigger({modelID:e.toString(),relationsMap:s}),s}getEntityRelations(t,e,s){const n=t instanceof Dn.FragmentsGroup?t.uuid:t,r=this.relationMaps[n];if(!r)throw new Error(`IfcRelationsIndexer: model ${n} has no relations indexed.`);const o=r.get(e),a=this.getAttributeIndex(s);if(o===void 0||a===null)return null;const l=o.get(a);return l||null}serializeRelations(t){const e={};for(const[s,n]of t.entries()){e[s]||(e[s]={});for(const[r,o]of n.entries())e[s][r]=o}return JSON.stringify(e)}serializeModelRelations(t){const e=this.relationMaps[t.uuid];return e?this.serializeRelations(e):null}serializeAllRelations(){const t={};for(const e in this.relationMaps){const s=this.relationMaps[e],n={};for(const[r,o]of s.entries()){n[r]||(n[r]={});for(const[a,l]of o.entries())n[r][a]=l}t[e]=n}return JSON.stringify(t)}getRelationsMapFromJSON(t){const e=JSON.parse(t),s=new Map;for(const n in e){const r=e[n],o=new Map;for(const a in r)o.set(Number(a),r[a]);s.set(Number(n),o)}return s}dispose(){this.relationMaps={},this.components.get(pt).onFragmentsDisposed.remove(this.onFragmentsDisposed),this.onDisposed.trigger(Ni.uuid),this.onDisposed.reset()}getEntitiesWithRelation(t,e,s){const n=this.relationMaps[t.uuid];if(!n)throw new Error("IfcRelationsIndexer: the model relations are not indexed!");const r=new Set;for(const[o,a]of n){const l=this.getAttributeIndex(e);if(l===null)throw new Error("IfcRelationsIndexer: invalid inverse attribute name");const h=a.get(l);h&&h.includes(s)&&r.add(o)}return r}addEntityRelations(t,e,s,...n){const r=this.getEntityRelations(t,e,s);if(r)r.push(...n);else{const o=this.getAttributeIndex(s);if(!o)throw new Error(`IfcRelationsIndexer: ${s} is not a valid relation name.`);const a=this.relationMaps[t.uuid].get(e);a==null||a.set(o,n)}}async applyRelationChanges(){const t=this.components.get(pt),e=this.components.get(ps);for(const s in this._changeMap){const n=t.groups.get(s);if(!n)continue;const r=this._changeMap[s];for(const[o,a]of r)for(const[l,h]of a){const{related:f,relID:I}=h;if(I){const u=await n.getProperties(I);if(!u)continue;const d=Object.keys(u),E=d.find(p=>p.startsWith("Related")),T=d.find(p=>p.startsWith("Relating"));if(!(E&&T))continue;u[E]=[...f].map(p=>new k.Handle(p)),u[T]=new k.Handle(l),await e.setData(n,u)}else{const u=await e.createIfcRel(n,o,l,[...f]);if(!u)continue;h.relID=u.expressID}}}}addEntitiesRelation(t,e,s,...n){const{type:r,inv:o}=s,a=this.relationMaps[t.uuid];if(!a||!this._ifcRels.includes(r))return;const l=Sn.get(r);if(!l)return;const{forRelated:h,forRelating:f}=l;if(!(h===o||f===o))return;let I=this._changeMap[t.uuid];I||(I=new Qt,this._changeMap[t.uuid]=I);const u=f===o?[e]:n,d=h===o?[e]:n;let E=I.get(r);E||(E=new Qt,E.onItemSet.add(()=>this.onEntitiesRelated.trigger({invAttribute:o,relType:r,relatingIDs:u,relatedIDs:d})),E.onItemUpdated.add(()=>this.onEntitiesRelated.trigger({invAttribute:o,relType:r,relatingIDs:u,relatedIDs:d})),I.set(r,E));for(const T of u){let p=E.get(T);p||(p={related:new Ie},E.set(T,p)),p.related.add(...d)}for(const T of u){let p=a.get(T);p||(p=new Map,a.set(T,p));const m=this.getAttributeIndex(f);if(m!==null){let F=p.get(m);F||(F=[],p.set(m,F)),F.push(...d)}}for(const T of d){let p=a.get(T);p||(p=new Map,a.set(T,p));const m=this.getAttributeIndex(h);if(m===null)continue;let F=p.get(m);F||(F=[],p.set(m,F)),F.push(...u)}}getEntityChildren(t,e,s=new Set){if(s.add(e),this.relationMaps[t.uuid]===void 0)throw new Error("The provided model has no indices. You have to generate them first.");const r=this.getEntityRelations(t,e,"IsDecomposedBy");if(r)for(const a of r)this.getEntityChildren(t,a,s);const o=this.getEntityRelations(t,e,"ContainsElements");if(o)for(const a of o)this.getEntityChildren(t,a,s);return s}};C(Ni,"uuid","23a889ab-83b3-44a4-8bee-ead83438370b");let Ut=Ni;const Ns=class Ns extends mt{constructor(t){super(t);C(this,"onDisposed",new q);C(this,"onFragmentsLoaded",new q);C(this,"onFragmentsDisposed",new q);C(this,"list",new Qt);C(this,"groups",new Qt);C(this,"baseCoordinationModel","");C(this,"baseCoordinationMatrix",new b.Matrix4);C(this,"enabled",!0);C(this,"_loader",new Dn.Serializer);this.components.add(Ns.uuid,this)}get meshes(){const t=[];for(const[e,s]of this.list)t.push(s.mesh);return t}dispose(){for(const[t,e]of this.groups)e.dispose(!0);this.baseCoordinationModel="",this.groups.clear(),this.list.clear(),this.onFragmentsLoaded.reset(),this.onFragmentsDisposed.reset(),this.onDisposed.trigger(),this.onDisposed.reset()}disposeGroup(t){const{uuid:e}=t,s=[];for(const n of t.items)s.push(n.id),this.list.delete(n.id);t.dispose(!0),this.groups.delete(t.uuid),this.groups.size===0&&(this.baseCoordinationModel="",this.baseCoordinationMatrix=new b.Matrix4),this.onFragmentsDisposed.trigger({groupID:e,fragmentIDs:s})}load(t,e){const n={...{coordinate:!0},...e},{coordinate:r,name:o,properties:a,relationsMap:l}=n,h=this._loader.import(t);e&&(h.isStreamed=e.isStreamed||!1),o&&(h.name=o);for(const f of h.items)f.group=h,this.list.set(f.id,f);return r&&this.coordinate([h]),this.groups.set(h.uuid,h),a&&h.setLocalProperties(a),l&&this.components.get(Ut).setRelationMap(h,l),this.onFragmentsLoaded.trigger(h),h}export(t){return this._loader.export(t)}getModelIdMap(t){const e={};for(const s in t){const n=this.list.get(s);if(!(n&&n.group))continue;const r=n.group;r.uuid in e||(e[r.uuid]=new Set);const o=t[s];for(const a of o)e[r.uuid].add(a)}return e}modelIdToFragmentIdMap(t){let e={};for(const s in t){const n=this.groups.get(s);if(!n)continue;const r=t[s],o=n.getFragmentMap(r);e={...e,...o}}return e}guidToFragmentIdMap(t){const e={};for(const[n,r]of this.groups){n in e||(e[n]=new Set);for(const o of t){const a=r.globalToExpressIDs.get(o);a&&e[n].add(a)}}return this.modelIdToFragmentIdMap(e)}fragmentIdMapToGuids(t){const e=[],s=this.getModelIdMap(t);for(const n in s){const r=this.groups.get(n);if(!r)continue;const o=s[n];for(const a of o)for(const[l,h]of r.globalToExpressIDs.entries())if(h===a){e.push(l);break}}return e}coordinate(t=Array.from(this.groups.values())){if(this.baseCoordinationModel.length===0){const s=t.pop();if(!s)return;this.baseCoordinationModel=s.uuid,this.baseCoordinationMatrix=s.coordinationMatrix.clone()}if(t.length)for(const s of t)s.coordinationMatrix.equals(this.baseCoordinationMatrix)||(s.position.set(0,0,0),s.rotation.set(0,0,0),s.scale.set(1,1,1),s.updateMatrix(),this.applyBaseCoordinateSystem(s,s.coordinationMatrix))}applyBaseCoordinateSystem(t,e){e&&t.applyMatrix4(e.clone().invert()),t.applyMatrix4(this.baseCoordinationMatrix)}clone(t,e){const s=t.cloneGroup(e);this.groups.set(s.uuid,s);for(const n of s.items)this.list.set(n.id,n);return s}};C(Ns,"uuid","fef46874-46a3-461b-8c44-2922ab77c806");let pt=Ns;var os=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Nc(c){return c&&c.__esModule&&Object.prototype.hasOwnProperty.call(c,"default")?c.default:c}function as(c){throw new Error('Could not dynamically require "'+c+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var Eo={exports:{}};/*!
129
129
 
130
130
  JSZip v3.10.1 - A JavaScript class for generating and reading zip files
131
131
  <http://stuartk.com/jszip>
@@ -223,7 +223,7 @@ ${r}
223
223
  ${o}
224
224
  </Users>`:""}
225
225
  </Extensions>
226
- `}processMarkupComment(t){const{Guid:e,Date:s,Author:n,Comment:r,Viewpoint:o}=t;if(!(e&&s&&n&&(Cs||o)))return null;const a=this.components.get(Zt),l=new Cs(this.components,r??"");return l.guid=e,l.date=new Date(s),l.author=n,l.viewpoint=o!=null&&o.Guid?a.list.get(o.Guid):void 0,l.modifiedAuthor=t.ModifiedAuthor,l.modifiedDate=t.ModifiedDate?new Date(t.ModifiedDate):void 0,l}getMarkupComments(t,e){var o;let s;if(e==="2.1"&&(s=t.Comment),e==="3"&&(s=(o=t.Topic.Comments)==null?void 0:o.Comment),!s)return[];s=Array.isArray(s)?s:[s];const n=s.map(a=>this.processMarkupComment(a)).filter(a=>a);return Array.isArray(n)?n:[n]}getMarkupLabels(t,e){var r;let s;return e==="2.1"&&(s=t.Topic.Labels),e==="3"&&(s=(r=t.Topic.Labels)==null?void 0:r.Label),s?Array.isArray(s)?s:[s]:[]}getMarkupViewpoints(t,e){var n;let s;return e==="2.1"&&(s=t.Viewpoints),e==="3"&&(s=(n=t.Topic.Viewpoints)==null?void 0:n.ViewPoint),s?(s=Array.isArray(s)?s:[s],s):[]}getMarkupRelatedTopics(t,e){var r;let s;return e==="2.1"&&(s=t.Topic.RelatedTopic),e==="3"&&(s=(r=t.Topic.RelatedTopics)==null?void 0:r.RelatedTopic),s?(Array.isArray(s)?s:[s]).map(o=>o.Guid):[]}async load(t,e){var m;const{fallbackVersionOnImport:s,ignoreIncompleteTopicsOnImport:n,updateExtensionsOnImport:r}=this.config,o=new Lr;await o.loadAsync(t);const a=Object.values(o.files);let l=s;const h=a.find(F=>F.name.endsWith(".version"));if(h){const F=await h.async("string"),R=Fe.xmlParser.parse(F).Version.VersionId;l=String(R)}if(!(l&&(l==="2.1"||l==="3")))throw new Error(`BCFTopics: ${l} is not supported.`);const f=a.find(F=>F.name.endsWith(".extensions"));if(r&&f){const F=await f.async("string");Fo(this,F)}const I=[],u=this.components.get(Zt),d=a.filter(F=>F.name.endsWith(".bcfv"));for(const F of d){const R=await F.async("string"),S=Fe.xmlParser.parse(R).VisualizationInfo;if(!S){console.warn("Missing VisualizationInfo in Viewpoint");continue}const O={},{Guid:y,ClippingPlanes:w,Components:P,OrthogonalCamera:v,PerspectiveCamera:G}=S;if(y&&(O.guid=y),P){const{Selection:D,Visibility:g}=P;if(D&&D.Component){const Q=Array.isArray(D.Component)?D.Component:[D.Component];O.selectionComponents=Q.map(z=>z.IfcGuid).filter(z=>z)}if(g&&"DefaultVisibility"in g&&(O.defaultVisibility=g.DefaultVisibility),g&&g.Exceptions&&"Component"in g.Exceptions){const{Component:Q}=g.Exceptions,z=Array.isArray(Q)?Q:[Q];O.exceptionComponents=z.map(et=>et.IfcGuid).filter(et=>et)}let U;l==="2.1"&&(U=P.ViewSetupHints),l==="3"&&(U=(m=P.Visibility)==null?void 0:m.ViewSetupHints),U&&("OpeningsVisible"in U&&(O.openingsVisible=U.OpeningsVisible),"SpacesVisible"in U&&(O.spacesVisible=U.SpacesVisible),"SpaceBoundariesVisible"in U&&(O.spaceBoundariesVisible=U.SpaceBoundariesVisible))}if(v||G){const D=S.PerspectiveCamera??S.OrthogonalCamera,{CameraViewPoint:g,CameraDirection:U}=D,Q=new b.Vector3(Number(g.X),Number(g.Z),Number(-g.Y)),z=new b.Vector3(Number(U.X),Number(U.Z),Number(-U.Y)),et={position:{x:Q.x,y:Q.y,z:Q.z},direction:{x:z.x,y:z.y,z:z.z},aspectRatio:"AspectRatio"in D?D.AspectRatio:1};"ViewToWorldScale"in D&&(O.camera={...et,viewToWorldScale:D.ViewToWorldScale}),"FieldOfView"in D&&(O.camera={...et,fov:D.FieldOfView})}const N=new kn(this.components,e,{data:O,setCamera:!1});if(P){const{Coloring:D}=P;if(D&&D.Color){const g=Array.isArray(D.Color)?D.Color:[D.Color];for(const U of g){const{Color:Q,Component:z}=U,X=(Array.isArray(z)?z:[z]).map(nt=>nt.IfcGuid);N.componentColors.set(Q,X)}}}if(I.push(N),w){const D=this.components.get(Is),g=Array.isArray(w.ClippingPlane)?w.ClippingPlane:[w.ClippingPlane];for(const U of g){const{Location:Q,Direction:z}=U;if(!(Q&&z))continue;const et=new b.Vector3(Q.X,Q.Z,-Q.Y),X=new b.Vector3(z.X,-z.Z,z.Y),nt=D.createFromNormalAndCoplanarPoint(e,X,et);nt.visible=!1,nt.enabled=!1,N.clippingPlanes.add(nt)}}}const E={},T=[],p=a.filter(F=>F.name.endsWith(".bcf"));for(const F of p){const R=await F.async("string"),S=Fe.xmlParser.parse(R).Markup,O=S.Topic,{Guid:y,TopicType:w,TopicStatus:P,Title:v,CreationDate:G,CreationAuthor:N}=O;if(n&&!(y&&w&&P&&v&&G&&N))continue;const D=new Mi(this.components);D.guid=y??D.guid;const g=this.getMarkupRelatedTopics(S,l);E[D.guid]=new Set(g),D.type=w??D.type,D.status=P??D.status,D.title=v??D.title,D.creationDate=G?new Date(G):D.creationDate,D.creationAuthor=N??D.creationAuthor,D.serverAssignedId=O.ServerAssignedId,D.priority=O.Priority,D.index=O.Index,D.modifiedDate=O.ModifiedDate?new Date(O.ModifiedDate):void 0,D.modifiedAuthor=O.ModifiedAuthor,D.dueDate=O.DueDate?new Date(O.DueDate):void 0,D.assignedTo=O.AssignedTo,D.description=O.Description,D.stage=O.Stage;const U=this.getMarkupLabels(S,l);for(const et of U)D.labels.add(et);const Q=this.getMarkupComments(S,l);for(const et of Q)D.comments.set(et.guid,et);const z=this.getMarkupViewpoints(S,l);for(const et of z){if(!(et&&et.Guid))continue;const X=u.list.get(et.Guid);X&&D.viewpoints.add(X.guid)}this.list.set(D.guid,D),T.push(D)}for(const F in E){const R=this.list.get(F);if(!R)continue;const S=E[F];for(const O of S)R.relatedTopics.add(O)}return this.onBCFImported.trigger(T),{viewpoints:I,topics:T}}};C(Fe,"uuid","de977976-e4f6-4e4f-a01a-204727839802"),C(Fe,"xmlParser",new Ao.XMLParser({allowBooleanAttributes:!0,attributeNamePrefix:"",ignoreAttributes:!1,ignoreDeclaration:!0,ignorePiTags:!0,numberParseOptions:{leadingZeros:!0,hex:!0},parseAttributeValue:!0,preserveOrder:!1,processEntities:!1,removeNSPrefix:!0,trimValues:!0}));let Mt=Fe;const ie=class ie extends mt{constructor(t){super(t);C(this,"enabled",!0);C(this,"onDisposed",new q);C(this,"_absoluteMin");C(this,"_absoluteMax");C(this,"_meshes",[]);this.components.add(ie.uuid,this),this._absoluteMin=ie.newBound(!0),this._absoluteMax=ie.newBound(!1)}static getDimensions(t){const{min:e,max:s}=t,n=Math.abs(s.x-e.x),r=Math.abs(s.y-e.y),o=Math.abs(s.z-e.z),a=new b.Vector3;return a.subVectors(s,e).divideScalar(2).add(e),{width:n,height:r,depth:o,center:a}}static newBound(t){const e=t?1:-1;return new b.Vector3(e*Number.MAX_VALUE,e*Number.MAX_VALUE,e*Number.MAX_VALUE)}static getBounds(t,e,s){const n=s||this.newBound(!1),r=e||this.newBound(!0);for(const o of t)o.x<r.x&&(r.x=o.x),o.y<r.y&&(r.y=o.y),o.z<r.z&&(r.z=o.z),o.x>n.x&&(n.x=o.x),o.y>n.y&&(n.y=o.y),o.z>n.z&&(n.z=o.z);return new b.Box3(e,s)}dispose(){const t=this.components.get(Ce);for(const e of this._meshes)t.destroy(e);this._meshes=[],this.onDisposed.trigger(ie.uuid),this.onDisposed.reset()}get(){const t=this._absoluteMin.clone(),e=this._absoluteMax.clone();return new b.Box3(t,e)}getSphere(){const t=this._absoluteMin.clone(),e=this._absoluteMax.clone(),s=Math.abs((e.x-t.x)/2),n=Math.abs((e.y-t.y)/2),r=Math.abs((e.z-t.z)/2),o=new b.Vector3(t.x+s,t.y+n,t.z+r),a=o.distanceTo(t);return new b.Sphere(o,a)}getMesh(){const t=new b.Box3(this._absoluteMin,this._absoluteMax),e=ie.getDimensions(t),{width:s,height:n,depth:r,center:o}=e,a=new b.BoxGeometry(s,n,r),l=new b.Mesh(a);return this._meshes.push(l),l.position.copy(o),l}reset(){this._absoluteMin=ie.newBound(!0),this._absoluteMax=ie.newBound(!1)}add(t){for(const e of t.items)this.addMesh(e.mesh)}addMesh(t,e){if(!t.geometry.index)return;const s=ie.getFragmentBounds(t);t.updateMatrixWorld();const n=t.matrixWorld,r=new b.Matrix4,o=t instanceof b.InstancedMesh,a=new Set;if(t instanceof jt.FragmentMesh){e||(e=t.fragment.ids);for(const l of e){const h=t.fragment.getInstancesIDs(l);if(h)for(const f of h)a.add(f)}}else a.add(0);for(const l of a){const h=s.min.clone(),f=s.max.clone();o&&(t.getMatrixAt(l,r),h.applyMatrix4(r),f.applyMatrix4(r)),h.applyMatrix4(n),f.applyMatrix4(n),h.x<this._absoluteMin.x&&(this._absoluteMin.x=h.x),h.y<this._absoluteMin.y&&(this._absoluteMin.y=h.y),h.z<this._absoluteMin.z&&(this._absoluteMin.z=h.z),h.x>this._absoluteMax.x&&(this._absoluteMax.x=h.x),h.y>this._absoluteMax.y&&(this._absoluteMax.y=h.y),h.z>this._absoluteMax.z&&(this._absoluteMax.z=h.z),f.x>this._absoluteMax.x&&(this._absoluteMax.x=f.x),f.y>this._absoluteMax.y&&(this._absoluteMax.y=f.y),f.z>this._absoluteMax.z&&(this._absoluteMax.z=f.z),f.x<this._absoluteMin.x&&(this._absoluteMin.x=f.x),f.y<this._absoluteMin.y&&(this._absoluteMin.y=f.y),f.z<this._absoluteMin.z&&(this._absoluteMin.z=f.z)}}addFragmentIdMap(t){const e=this.components.get(pt);for(const s in t){const n=e.list.get(s);if(!n)continue;const r=t[s];this.addMesh(n.mesh,r)}}static getFragmentBounds(t){const e=t.geometry.attributes.position,s=Number.MAX_VALUE,n=-s,r=new b.Vector3(s,s,s),o=new b.Vector3(n,n,n);if(!t.geometry.index)throw new Error("Geometry must be indexed!");const a=Array.from(t.geometry.index.array);for(let l=0;l<a.length;l++){if(l%3===0&&a[l]===0&&a[l+1]===0&&a[l+2]===0){l+=2;continue}const h=a[l],f=e.getX(h),I=e.getY(h),u=e.getZ(h);f<r.x&&(r.x=f),I<r.y&&(r.y=I),u<r.z&&(r.z=u),f>o.x&&(o.x=f),I>o.y&&(o.y=I),u>o.z&&(o.z=u)}return new b.Box3(r,o)}};C(ie,"uuid","d1444724-dba6-4cdd-a0c7-68ee1450d166");let Ts=ie;const ys=class ys{constructor(i){C(this,"onProgress",new q);C(this,"inclusive",!1);C(this,"rules",[]);C(this,"ids",{});C(this,"needsUpdate",new Map);C(this,"components");this.components=i}static import(i,t){const e=ys.importers.get(t.type);return e?e(i,t):(console.warn("Invalid query data:.",t),null)}static importRules(i){const t=[];for(const e of i){const s={};for(const n in e){const r=e[n];r.regexp?s[n]=new RegExp(r.value):s[n]=r}t.push(s)}return t}static importIds(i){const t={};for(const e in i.ids)t[e]=new Set(i.ids[e]);return t}clear(i){if(i===void 0){this.ids={},this.needsUpdate.clear();return}delete this.ids[i],this.needsUpdate.delete(i)}addID(i,t){this.ids[i]||(this.ids[i]=new Set),this.ids[i].add(t)}getData(){const i={};for(const e in this.ids)i[e]=Array.from(this.ids[e]);const t=this.exportRules();return{name:this.name,inclusive:this.inclusive,type:"IfcFinderQuery",ids:i,rules:t}}exportRules(){const i=[];for(const t of this.rules){const e={};for(const s in t){const n=t[s];n instanceof RegExp?e[s]={regexp:!0,value:n.source}:e[s]=n}i.push(e)}return i}findInFile(i,t){return new Promise(e=>{const s=new FileReader,n=new TextDecoder("utf-8"),r=1e4*1024,o=1e3;let a=0;const l=/;/,h=()=>{if(a>=t.size){e();return}const f=Math.min(a+r+o,t.size),I=t.slice(a,f);s.readAsArrayBuffer(I)};s.onload=()=>{if(!(s.result instanceof ArrayBuffer))return;const f=new Uint8Array(s.result),u=n.decode(f).split(l);u.shift(),this.findInLines(i,u),this.onProgress.trigger(a/t.size),a+=r,h()},h()})}getIdFromLine(i){const t=i.slice(i.indexOf("#")+1,i.indexOf("="));return parseInt(t,10)}testRules(i){let t=null,e=null,s=null,n=!1;for(const r of this.rules){if(r.type==="category"){if(t===null&&(t=this.getCategoryFromLine(i),t===null)){if(this.inclusive)continue;break}if(!r.value.test(t)){if(this.inclusive)continue;n=!1;break}n=!0;continue}if(e===null&&(e=this.getAttributesFromLine(i),e===null)){if(this.inclusive)continue;n=!1;break}if(t===null&&(t=this.getCategoryFromLine(i),t===null)){if(this.inclusive)continue;n=!1;break}if(s===null&&(s=Object.keys(new k.IFC4[t]),s=s.slice(2),s===null)){if(this.inclusive)continue;n=!1;break}if(r.type==="property"){const{name:o,value:a}=r;if(!a.test(i)){if(this.inclusive)continue;n=!1;break}let l=!1;for(let h=0;h<e.length;h++){const f=e[h],I=s[h];if(a.test(f)&&o.test(I)){l=!0;break}}if(l)n=!0;else if(!this.inclusive){n=!1;break}}if(r.type==="operator"){const{name:o,value:a,operator:l}=r;let h=!1;for(let f=0;f<e.length;f++){const I=s[f],u=e[f].replace(/IFCLENGTHMEASURE\(|IFCVOLUMEMEASURE\(|\)/g,"");if(o.test(I)){if(l==="="&&parseFloat(u)===a){h=!0;break}else if(l==="<"&&parseFloat(u)<a){h=!0;break}else if(l===">"&&parseFloat(u)>a){h=!0;break}else if(l===">="&&parseFloat(u)>=a){h=!0;break}else if(l==="<="&&parseFloat(u)<=a){h=!0;break}}}if(h)n=!0;else if(!this.inclusive){n=!1;break}}}return n}getCategoryFromLine(i){const t=i.indexOf("=")+1,e=i.indexOf("("),s=i.slice(t,e).trim(),n=ao[s];return n||null}getAttributesFromLine(i){const t=/\((.*)\)/,e=i.match(t);if(!(e&&e[1]))return null;const s=/,(?![^()]*\))/g;return e[1].split(s).map(r=>r.trim())}};C(ys,"importers",new Map);let qt=ys;class br{constructor(i){C(this,"list",new Map);C(this,"id",b.MathUtils.generateUUID());C(this,"mode","intersect");C(this,"_components");this._components=i}get queries(){return new Set(this.list.values())}get items(){const i=[];for(const t of this.queries)i.push(t.items);return this.mode==="combine"?jt.FragmentUtils.combine(i):jt.FragmentUtils.intersect(i)}add(i){if(this.list.has(i.name))throw new Error(`This group already has a query with the name ${i.name}.`);this.list.set(i.name,i)}clear(i){for(const t of this.queries)t.clear(i)}import(i){this.mode=i.mode,this.id=i.id;for(const t in i.queries){const e=qt.import(this._components,i.queries[t]);e&&this.list.set(t,e)}}export(){const i={};for(const[t,e]of this.list)i[t]=e.export();return{mode:this.mode,id:this.id,queries:i}}async update(i,t){for(const e of this.queries){const s=e.needsUpdate.get(i);(s===void 0||s)&&await e.update(i,t)}}}const Ls=class Ls extends qt{constructor(t,e){super(t);C(this,"name");this.name=e.name,this.rules=e.rules,this.inclusive=e.inclusive}get items(){const t=this.components.get(pt),e=[];for(const s in this.ids){const n=this.ids[s],r=t.groups.get(s);if(!r){console.warn(`Model ${s} not found!`);continue}const o=r.getFragmentMap(n);e.push(o)}return jt.FragmentUtils.combine(e)}export(){const t=this.getData();return t.type=Ls.type,t}async update(t,e){this.ids[t]=new Set,await this.findInFile(t,e),this.needsUpdate.set(t,!1)}findInLines(t,e){for(const s of e)if(this.testRules(s)){const r=this.getIdFromLine(s);this.addID(t,r)}}};C(Ls,"type","IfcBasicQuery");let wi=Ls;qt.importers.set(wi.type,(c,i)=>{const t=new wi(c,{name:i.name,rules:qt.importRules(i.rules),inclusive:i.inclusive});return t.ids=qt.importIds(i),t});const Ps=class Ps extends qt{constructor(t,e){super(t);C(this,"name");C(this,"psets",[]);this.name=e.name,this.rules=e.rules,this.inclusive=e.inclusive}get items(){const t=this.components.get(Bt),e=this.components.get(pt),s=[];for(const n in this.ids){const r=e.groups.get(n);if(!r){console.log(`Model not found: ${n}.`);continue}const o=this.ids[n];for(const a of o){const l=t.getEntityRelations(n,a,"DefinesOcurrence");if(l){const h=r.getFragmentMap(l);s.push(h)}}}return jt.FragmentUtils.combine(s)}export(){const t=this.getData();return t.type=Ps.type,t}async update(t,e){await this.findInFile(t,e);const s=new Set;for(const n of this.psets){const r=this.getAttributesFromLine(n);if(r===null)continue;const o=r[4].replace("(","[").replace(")","]").replace(/#/g,""),a=JSON.parse(o);for(const l of a){const h=this.ids[t];if(h&&h.has(l)){const f=this.getIdFromLine(n);s.add(f);break}}}this.ids[t]=s,this.psets=[],this.needsUpdate.set(t,!1)}findInLines(t,e){for(const s of e){const n=this.getCategoryFromLine(s);if(n==="IfcPropertySet"){this.psets.push(s);continue}if(n!=="IfcPropertySingleValue")continue;if(this.testRules(s)){const o=this.getIdFromLine(s);this.addID(t,o)}}}};C(Ps,"type","IfcPropertyQuery");let Di=Ps;qt.importers.set(Di.type,(c,i)=>{const t=new Di(c,{name:i.name,inclusive:i.inclusive,rules:qt.importRules(i.rules)});return t.ids=qt.importIds(i),t});const _s=class _s extends mt{constructor(t){super(t);C(this,"enabled",!0);C(this,"list",new Map);t.add(_s.uuid,this)}get queries(){const t=new Set;for(const[,e]of this.list)for(const s of e.queries)t.add(s);return t}import(t){for(const e in t){const s=new br(this.components);s.import(t[e]),this.list.set(e,s)}}export(){const t={};for(const[e,s]of this.list)t[e]=s.export();return t}create(){const t=new br(this.components);return this.list.set(t.id,t),t}delete(t){this.list.delete(t)}clear(){this.list.clear()}};C(_s,"uuid","0da7ad77-f734-42ca-942f-a074adfd1e3a");let yn=_s;const Ms=class Ms extends mt{constructor(t){super(t);C(this,"enabled",!0);C(this,"list",{});C(this,"onDisposed",new q);C(this,"onFragmentsDisposed",t=>{const{groupID:e,fragmentIDs:s}=t;for(const n in this.list){const r=this.list[n],o=Object.keys(r);if(o.includes(e))delete r[e],Object.values(r).length===0&&delete this.list[n];else for(const a of o){const l=r[a];for(const h of s)delete l.map[h];Object.values(l).length===0&&delete r[a]}}});t.add(Ms.uuid,this),t.get(pt).onFragmentsDisposed.add(this.onFragmentsDisposed)}dispose(){this.list={},this.components.get(pt).onFragmentsDisposed.remove(this.onFragmentsDisposed),this.onDisposed.trigger(),this.onDisposed.reset()}remove(t){for(const e in this.list){const s=this.list[e];for(const n in s){const r=s[n];delete r.map[t]}}}find(t){const e=this.components.get(pt);if(!t){const o={};for(const[a,l]of e.list)o[a]=new Set(l.ids);return o}const s=Object.keys(t).length,n={};for(const o in t){const a=t[o];if(!this.list[o]){console.warn(`Classification ${o} does not exist.`);continue}for(const l of a){const h=this.list[o][l];if(h)for(const f in h.map){n[f]||(n[f]=new Map);for(const I of h.map[f]){const u=n[f].get(I);u===void 0?n[f].set(I,1):n[f].set(I,u+1)}}}}const r={};for(const o in n){const a=n[o];for(const[l,h]of a){if(h===void 0)throw new Error("Malformed fragments map!");h===s&&(r[o]||(r[o]=new Set),r[o].add(l))}}return r}byModel(t,e){this.list.models||(this.list.models={});const s=this.list.models;s[t]||(s[t]={map:{},id:null,name:t});const n=s[t];for(const[r,o]of e.data){const a=o[0];for(const l of a){const h=e.keyFragments.get(l);h&&(n.map[h]||(n.map[h]=new Set),n.map[h].add(r))}}}async byPredefinedType(t){var n;this.list.predefinedTypes||(this.list.predefinedTypes={});const e=this.list.predefinedTypes,s=t.getAllPropertiesIDs();for(const r of s){const o=await t.getProperties(r);if(!o)continue;const a=String((n=o.PredefinedType)==null?void 0:n.value).toUpperCase();e[a]||(e[a]={map:{},id:null,name:a});const l=e[a];for(const[h,f]of t.data){const I=f[0];for(const u of I){const d=t.keyFragments.get(u);if(!d)throw new Error("Fragment ID not found!");l.map[d]||(l.map[d]=new Set),l.map[d].add(o.expressID)}}}}byEntity(t){this.list.entities||(this.list.entities={});for(const[e,s]of t.data){const r=s[1][1],o=_i[r];this.saveItem(t,"entities",o,e)}}async byIfcRel(t,e,s){be.isRel(e)&&await be.getRelationMap(t,e,async(n,r)=>{const{name:o}=await be.getEntityName(t,n);for(const a of r)this.saveItem(t,s,o??"NO REL NAME",a)})}async bySpatialStructure(t,e={}){var l,h;const s=this.components.get(Bt),n=s.relationMaps[t.uuid];if(!n)throw new Error(`Classifier: model relations of ${t.name||t.uuid} have to exists to group by spatial structure.`);const r="spatialStructures",a=e.useProperties===void 0||e.useProperties;for(const[f]of n){if(e.isolate){const E=t.data.get(f);if(!E)continue;const T=E[1][1];if(T===void 0||!e.isolate.has(T))continue}const I=s.getEntityRelations(t,f,"Decomposes");if(I)for(const E of I){let T=E.toString();if(a){const p=await t.getProperties(E);if(!p)continue;T=(l=p.Name)==null?void 0:l.value}this.saveItem(t,r,T,f,E)}const u=s.getEntityRelations(t,f,"ContainsElements");if(!u)continue;let d=f.toString();if(a){const E=await t.getProperties(f);if(!E)continue;d=(h=E.Name)==null?void 0:h.value}for(const E of u){this.saveItem(t,r,d,E,f);const T=s.getEntityRelations(t,Number(E),"IsDecomposedBy");if(T)for(const p of T)this.saveItem(t,r,d,p,f)}}}setColor(t,e,s=!1){const n=this.components.get(pt);for(const r in t){const o=n.list.get(r);if(!o)continue;const a=t[r];o.setColor(e,a,s)}}resetColor(t){const e=this.components.get(pt);for(const s in t){const n=e.list.get(s);if(!n)continue;const r=t[s];n.resetColor(r)}}saveItem(t,e,s,n,r=null){this.list[e]||(this.list[e]={});const o=t.data.get(n);if(o)for(const a of o[0]){const l=t.keyFragments.get(a);if(l){const h=this.list[e];h[s]||(h[s]={map:{},id:r,name:s}),h[s].map[l]||(h[s].map[l]=new Set),h[s].map[l].add(n)}}}};C(Ms,"uuid","e25a7f3c-46c4-4a14-9d3d-5115f24ebeb7");let ti=Ms;const ws=class ws extends mt{constructor(t){super(t);C(this,"onDisposed",new q);C(this,"enabled",!0);C(this,"height",10);C(this,"groupName","spatialStructures");C(this,"list",new Set);t.add(ws.uuid,this)}dispose(){this.list.clear(),this.onDisposed.trigger(),this.onDisposed.reset()}set(t){if(!this.enabled)return;const e=this.components.get(ti),s=this.components.get(pt),n=t?1:-1;let r=0;const o=e.list[this.groupName],a=new b.Matrix4;for(const l in o){a.elements[13]=r*n*this.height;for(const h in o[l].map){const f=s.list.get(h),I=l+h,u=this.list.has(I);if(!f||t&&u||!t&&!u)continue;t?this.list.add(I):this.list.delete(I);const d=o[l].map[h];f.applyTransform(d,a),f.mesh.computeBoundingSphere(),f.mesh.computeBoundingBox()}r++}}};C(ws,"uuid","d260618b-ce88-4c7d-826c-6debb91de3e2");let Ln=ws;const Ds=class Ds extends mt{constructor(t){super(t);C(this,"enabled",!0);this.components.add(Ds.uuid,this)}set(t,e){const s=this.components.get(pt);if(!e){for(const[n,r]of s.list)r&&(r.setVisibility(t),this.updateCulledVisibility(r));return}for(const n in e){const r=e[n],o=s.list.get(n);o&&(o.setVisibility(t,r),this.updateCulledVisibility(o))}}isolate(t){this.set(!1),this.set(!0,t)}updateCulledVisibility(t){const e=this.components.get(fs);for(const[s,n]of e.list){const r=n.colorMeshes.get(t.id);r&&(r.count=t.mesh.count)}}};C(Ds,"uuid","dd9ccf2d-8a21-4821-b7f6-2949add16a29");let ms=Ds;class Oo extends zs{constructor(){super(...arguments);C(this,"minGeometrySize",10);C(this,"minAssetsSize",1e3);C(this,"maxTriangles",null)}}const bs=class bs extends mt{constructor(t){super(t);C(this,"onGeometryStreamed",new fe);C(this,"onAssetStreamed",new fe);C(this,"onProgress",new fe);C(this,"onIfcLoaded",new fe);C(this,"onDisposed",new q);C(this,"settings",new Oo);C(this,"enabled",!0);C(this,"webIfc",new k.IfcAPI);C(this,"_nextAvailableID",0);C(this,"_splittedGeometries",new Map);C(this,"_spatialTree",new co);C(this,"_metaData",new ho);C(this,"_visitedGeometries",new Map);C(this,"_streamSerializer",new jt.StreamSerializer);C(this,"_geometries",new Map);C(this,"_geometryCount",0);C(this,"_civil",new lo);C(this,"_groupSerializer",new jt.Serializer);C(this,"_assets",[]);C(this,"_meshesWithHoles",new Set);this.components.add(bs.uuid,this),this.settings.excludedCategories.add(k.IFCOPENINGELEMENT)}dispose(){this.onIfcLoaded.reset(),this.onGeometryStreamed.reset(),this.onAssetStreamed.reset(),this.webIfc=null,this.onDisposed.trigger(),this.onDisposed.reset()}async streamFromBuffer(t){await this.readIfcFile(t),await this.streamAllGeometries(),this.cleanUp()}async streamFromCallBack(t){await this.streamIfcFile(t),await this.streamAllGeometries(),this.cleanUp()}async readIfcFile(t){const{path:e,absolute:s,logLevel:n}=this.settings.wasm;this.webIfc.SetWasmPath(e,s),await this.webIfc.Init(),n&&this.webIfc.SetLogLevel(n),this.webIfc.OpenModel(t,this.settings.webIfc),this._nextAvailableID=this.webIfc.GetMaxExpressID(0)}async streamIfcFile(t){const{path:e,absolute:s,logLevel:n}=this.settings.wasm;this.webIfc.SetWasmPath(e,s),await this.webIfc.Init(),n&&this.webIfc.SetLogLevel(n),this.webIfc.OpenModelFromCallback(t,this.settings.webIfc)}async streamAllGeometries(){const{minGeometrySize:t,minAssetsSize:e}=this.settings;this._spatialTree.setUp(this.webIfc);const s=this.webIfc.GetIfcEntityList(0),n=[[]],r=new jt.FragmentsGroup;r.ifcMetadata={name:"",description:"",...this._metaData.getNameInfo(this.webIfc),...this._metaData.getDescriptionInfo(this.webIfc),schema:this.webIfc.GetModelSchema(0)||"IFC2X3",maxExpressID:this.webIfc.GetMaxExpressID(0)};let o=0,a=0;for(const E of s){if(!this.webIfc.IsIfcElement(E)&&E!==k.IFCSPACE||this.settings.excludedCategories.has(E))continue;const T=this.webIfc.GetLineIDsWithType(0,E),p=T.size();for(let m=0;m<p;m++){o>t&&(o=0,a++,n.push([]));const F=T.get(m);n[a].push(F);const R=this.webIfc.GetLine(0,F);if(R.GlobalId){const O=(R==null?void 0:R.GlobalId.value)||(R==null?void 0:R.GlobalId);r.globalToExpressIDs.set(O,F)}const S=this._spatialTree.itemsByFloor[F]||0;r.data.set(F,[[],[S,E]]),o++}}this._spatialTree.cleanUp();let l=.01,h=0;for(const E of n){h++,this.webIfc.StreamMeshes(0,E,p=>{this.getMesh(this.webIfc,p,r)}),this._geometryCount>this.settings.minGeometrySize&&await this.streamGeometries(),this._assets.length>e&&await this.streamAssets();const T=h/n.length;T>l&&(l+=.01,l=Math.max(l,T),await this.onProgress.trigger(Math.round(l*100)/100))}this._geometryCount&&await this.streamGeometries(),this._assets.length&&await this.streamAssets();const{opaque:f,transparent:I}=r.geometryIDs;for(const[E,{index:T,uuid:p}]of this._visitedGeometries)r.keyFragments.set(T,p),(E>1?f:I).set(E,T);uo.get(r,this.webIfc);const u=this.webIfc.GetCoordinationMatrix(0);r.coordinationMatrix.fromArray(u),r.civilData=this._civil.read(this.webIfc);const d=this._groupSerializer.export(r);await this.onIfcLoaded.trigger(d),r.dispose(!0)}cleanUp(){try{this.webIfc.Dispose()}catch{}this.webIfc=null,this.webIfc=new k.IfcAPI,this._visitedGeometries.clear(),this._geometries.clear(),this._assets=[],this._meshesWithHoles.clear()}getMesh(t,e,s){const n=e.geometries.size(),r=e.expressID,o={id:r,geometries:[]};for(let a=0;a<n;a++){const l=e.geometries.get(a),h=l.geometryExpressID,I=l.color.w===1?1:-1,u=h*I;this._visitedGeometries.has(u)||this.getGeometry(t,h,u),this.registerGeometryData(s,r,l,o,h,u);const d=this._splittedGeometries.get(h);if(d)for(const E of d)this.registerGeometryData(s,r,l,o,E,E)}this._assets.push(o)}getGeometry(t,e,s){const n=t.GetGeometry(0,e),r=t.GetIndexArray(n.GetIndexData(),n.GetIndexDataSize()),o=t.GetVertexArray(n.GetVertexData(),n.GetVertexDataSize()),a=new Float32Array(o.length/2),l=new Float32Array(o.length/2);for(let u=0;u<o.length;u+=6)a[u/2]=o[u],a[u/2+1]=o[u+1],a[u/2+2]=o[u+2],l[u/2]=o[u+3],l[u/2+1]=o[u+4],l[u/2+2]=o[u+5];if(r.length===0){const u=new Float32Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]);this._geometries.set(e,{position:a,normal:l,index:r,boundingBox:u,hasHoles:!1});const d=this._visitedGeometries.size,E=b.MathUtils.generateUUID();this._visitedGeometries.set(s,{uuid:E,index:d}),this._geometryCount++,n.delete();return}const f=(this.settings.maxTriangles||r.length/3)*3;let I=!0;for(let u=0;u<r.length;u+=f){const d=r.length-u,E=Math.min(d,f),T=u+E,p=[],m=[],F=[];let R=0;for(let g=u;g<T;g++){p.push(R++);const U=r[g];m.push(a[U*3]),m.push(a[U*3+1]),m.push(a[U*3+2]),F.push(l[U*3]),F.push(l[U*3+1]),F.push(l[U*3+2])}const S=new Uint32Array(p),O=new Float32Array(m),y=new Float32Array(F),w=kr(O),P=new Float32Array(w.transformation.elements),v=!1,G=I?e:this._nextAvailableID++;this._geometries.set(G,{position:O,normal:y,index:S,boundingBox:P,hasHoles:v}),I||(this._splittedGeometries.has(e)||this._splittedGeometries.set(e,new Set),this._splittedGeometries.get(e).add(G));const N=this._visitedGeometries.size,D=b.MathUtils.generateUUID();this._visitedGeometries.set(s,{uuid:D,index:N}),this._geometryCount++,I=!1}n.delete()}async streamAssets(){await this.onAssetStreamed.trigger(this._assets),this._assets=null,this._assets=[]}async streamGeometries(){let t=this._streamSerializer.export(this._geometries),e={};for(const[s,{boundingBox:n,hasHoles:r}]of this._geometries)e[s]={boundingBox:n,hasHoles:r};await this.onGeometryStreamed.trigger({data:e,buffer:t}),e=null,t=null,this._geometries.clear(),this._geometryCount=0}registerGeometryData(t,e,s,n,r,o){const a=this._visitedGeometries.get(o);if(a===void 0)throw new Error("Error getting geometry data for streaming!");const l=t.data.get(e);if(!l)throw new Error("Data not found!");l[0].push(a.index);const{x:h,y:f,z:I,w:u}=s.color,d=[h,f,I,u],E=s.flatTransformation;n.geometries.push({color:d,geometryID:r,transformation:E})}};C(bs,"uuid","d9999a00-e1f5-4d3f-8cfe-c56e08609764");let Pn=bs;class No extends zs{constructor(){super(...arguments);C(this,"propertiesSize",100)}}class yo extends mt{constructor(){super(...arguments);C(this,"onPropertiesStreamed",new fe);C(this,"onProgress",new fe);C(this,"onIndicesStreamed",new fe);C(this,"onDisposed",new q);C(this,"enabled",!0);C(this,"settings",new No);C(this,"webIfc",new k.IfcAPI)}async dispose(){this.onIndicesStreamed.reset(),this.onPropertiesStreamed.reset(),this.webIfc=null,this.onDisposed.reset()}async streamFromBuffer(t){await this.readIfcFile(t),await this.streamAllProperties(),this.cleanUp()}async streamFromCallBack(t){await this.streamIfcFile(t),await this.streamAllProperties(),this.cleanUp()}async readIfcFile(t){const{path:e,absolute:s,logLevel:n}=this.settings.wasm;this.webIfc.SetWasmPath(e,s),await this.webIfc.Init(),n&&this.webIfc.SetLogLevel(n),this.webIfc.OpenModel(t,this.settings.webIfc)}async streamIfcFile(t){const{path:e,absolute:s,logLevel:n}=this.settings.wasm;this.webIfc.SetWasmPath(e,s),await this.webIfc.Init(),n&&this.webIfc.SetLogLevel(n),this.webIfc.OpenModelFromCallback(t,this.settings.webIfc)}async streamAllProperties(){const{propertiesSize:t}=this.settings,e=new Set(this.webIfc.GetIfcEntityList(0)),s=new Set([k.IFCPROJECT,k.IFCSITE,k.IFCBUILDING,k.IFCBUILDINGSTOREY,k.IFCSPACE]);for(const l of s)e.add(l);let n=.01,r=0;for(const l of e){if(r++,Vn.has(l))continue;const h=s.has(l),f=this.webIfc.GetLineIDsWithType(0,l),I=f.size();let u=0;for(let E=0;E<I-t;E+=t){const T={};for(let p=0;p<t;p++){u++;const m=f.get(E+p);try{const F=this.webIfc.GetLine(0,m,h);T[F.expressID]=F}catch{console.log(`Could not get property: ${m}`)}}await this.onPropertiesStreamed.trigger({type:l,data:T})}if(u!==I){const E={};for(let T=u;T<I;T++){const p=f.get(T);try{const m=this.webIfc.GetLine(0,p,h);E[m.expressID]=m}catch{console.log(`Could not get property: ${p}`)}}await this.onPropertiesStreamed.trigger({type:l,data:E})}r/e.size>n&&(n=Math.round(n*100)/100,await this.onProgress.trigger(n),n+=.01)}await this.onProgress.trigger(1);const a=await this.components.get(Bt).processFromWebIfc(this.webIfc,0);await this.onIndicesStreamed.trigger(a)}cleanUp(){this.webIfc.Dispose(),this.webIfc=null,this.webIfc=new k.IfcAPI}}C(yo,"uuid","88d2c89c-ce32-47d7-8cb6-d51e4b311a0b");class kn{constructor(i,t,e){C(this,"title");C(this,"guid",Kt.create());C(this,"clippingPlanes",new Ie);C(this,"camera",{aspectRatio:1,fov:60,direction:{x:0,y:0,z:0},position:{x:0,y:0,z:0}});C(this,"exceptionComponents",new Ie);C(this,"selectionComponents",new Ie);C(this,"componentColors",new Qt);C(this,"spacesVisible",!1);C(this,"spaceBoundariesVisible",!1);C(this,"openingsVisible",!1);C(this,"defaultVisibility",!0);C(this,"_components");C(this,"world");const s={setCamera:!0,...e},{data:n,setCamera:r}=s;this._components=i,this.world=t,n&&(this.guid=n.guid??this.guid,this.set(n)),r&&this.updateCamera()}get _selectionModelIdMap(){const i=this._components.get(pt),t={};for(const[e,s]of i.groups){e in t||(t[e]=new Set);for(const n of this.selectionComponents){const r=s.globalToExpressIDs.get(n);r&&t[e].add(r)}}return t}get _exceptionModelIdMap(){const i=this._components.get(pt),t={};for(const[e,s]of i.groups){e in t||(t[e]=new Set);for(const n of this.exceptionComponents){const r=s.globalToExpressIDs.get(n);r&&t[e].add(r)}}return t}get selection(){return this._components.get(pt).modelIdToFragmentIdMap(this._selectionModelIdMap)}get exception(){return this._components.get(pt).modelIdToFragmentIdMap(this._exceptionModelIdMap)}get projection(){return"fov"in this.camera?"Perspective":"Orthographic"}get position(){const i=this._components.get(pt),{position:t}=this.camera,{x:e,y:s,z:n}=t,r=new b.Vector3(e,s,n);return i.applyBaseCoordinateSystem(r,new b.Matrix4),r}get direction(){const{direction:i}=this.camera,{x:t,y:e,z:s}=i;return new b.Vector3(t,e,s)}get _managerVersion(){return this._components.get(Mt).config.version}get topics(){return[...this._components.get(Mt).list.values()].filter(s=>s.viewpoints.has(this.guid))}addComponentsFromMap(i){const e=this._components.get(pt).fragmentIdMapToGuids(i);this.selectionComponents.add(...e),this._components.get(Zt).list.set(this.guid,this)}set(i){const t=i,e=this;for(const n in i){if(n==="guid")continue;const r=t[n];if(n==="selectionComponents"){this.selectionComponents.clear(),this.selectionComponents.add(...r);continue}if(n==="exceptionComponents"){this.exceptionComponents.clear(),this.exceptionComponents.add(...r);continue}n in this&&(e[n]=r)}return this._components.get(Zt).list.set(this.guid,this),this}async go(i=!0){const{camera:t}=this.world;if(!t.hasCameraControls())throw new Error("Viewpoint: the world's camera need controls to set the viewpoint.");t instanceof ro&&t.projection.set(this.projection);const e=new b.Vector3(this.camera.position.x,this.camera.position.y,this.camera.position.z),s=new b.Vector3(this.camera.direction.x,this.camera.direction.y,this.camera.direction.z);if(e.equals(new b.Vector3)&&s.equals(new b.Vector3))return;const n=this.position,r=this.direction;let o={x:n.x+r.x*80,y:n.y+r.y*80,z:n.z+r.z*80};const a=this.selection;if(Object.keys(a).length===0){const f=this._components.get(ve).get(this.world).castRayFromVector(n,this.direction);f&&(o=f.point)}else{const l=this._components.get(Ts);l.reset(),l.addFragmentIdMap(a),o=l.getSphere().center,l.reset()}await t.controls.setLookAt(n.x,n.y,n.z,o.x,o.y,o.z,i)}updateCamera(){const{camera:i,renderer:t}=this.world;if(!t)throw new Error("Viewpoint: the world needs to have a renderer!");if(!i.hasCameraControls())throw new Error("Viewpoint: world's camera need camera controls!");const e=new b.Vector3;i.controls.getPosition(e);const s=i.three,n=new b.Vector3(0,0,-1).applyEuler(s.rotation),{width:r,height:o}=t.getSize();let a=r/o;Number.isNaN(a)&&(a=1);const l=this._components.get(pt);e.applyMatrix4(l.baseCoordinationMatrix.clone().invert());const h={aspectRatio:a,position:{x:e.x,y:e.y,z:e.z},direction:{x:n.x,y:n.y,z:n.z}};s instanceof b.PerspectiveCamera?this.camera={...h,fov:s.fov}:s instanceof b.OrthographicCamera&&(this.camera={...h,viewToWorldScale:s.top-s.bottom}),this._components.get(Zt).list.set(this.guid,this)}applyVisibility(){const i=this._components.get(ms);i.set(this.defaultVisibility),i.set(!this.defaultVisibility,this.exception),i.set(!0,this.selection)}applyColors(){const i=this._components.get(Zt),t=this._components.get(pt),e=this._components.get(ti);for(const[s,n]of this.componentColors){const r=t.guidToFragmentIdMap(n);e.setColor(r,s,i.config.overwriteColors)}}resetColors(){const i=this._components.get(pt),t=this._components.get(ti);for(const[e,s]of this.componentColors){const n=i.guidToFragmentIdMap(s);t.resetColor(n)}}async createComponentTags(i){var n,r;const t=this._components.get(pt),e=this._components.get(Mt);let s="";if(e.config.includeSelectionTag){const o=i==="selection"?this._selectionModelIdMap:this._exceptionModelIdMap;for(const a in o){const l=t.groups.get(a);if(!l)continue;const h=o[a];for(const f of h){const I=await l.getProperties(f);if(!I)continue;const u=(n=I.GlobalId)==null?void 0:n.value;if(!u)continue;const d=(r=I.Tag)==null?void 0:r.value;let E=null;d&&(E=`AuthoringToolId="${d}"`),s+=`
226
+ `}processMarkupComment(t){const{Guid:e,Date:s,Author:n,Comment:r,Viewpoint:o}=t;if(!(e&&s&&n&&(Cs||o)))return null;const a=this.components.get(Zt),l=new Cs(this.components,r??"");return l.guid=e,l.date=new Date(s),l.author=n,l.viewpoint=o!=null&&o.Guid?a.list.get(o.Guid):void 0,l.modifiedAuthor=t.ModifiedAuthor,l.modifiedDate=t.ModifiedDate?new Date(t.ModifiedDate):void 0,l}getMarkupComments(t,e){var o;let s;if(e==="2.1"&&(s=t.Comment),e==="3"&&(s=(o=t.Topic.Comments)==null?void 0:o.Comment),!s)return[];s=Array.isArray(s)?s:[s];const n=s.map(a=>this.processMarkupComment(a)).filter(a=>a);return Array.isArray(n)?n:[n]}getMarkupLabels(t,e){var r;let s;return e==="2.1"&&(s=t.Topic.Labels),e==="3"&&(s=(r=t.Topic.Labels)==null?void 0:r.Label),s?Array.isArray(s)?s:[s]:[]}getMarkupViewpoints(t,e){var n;let s;return e==="2.1"&&(s=t.Viewpoints),e==="3"&&(s=(n=t.Topic.Viewpoints)==null?void 0:n.ViewPoint),s?(s=Array.isArray(s)?s:[s],s):[]}getMarkupRelatedTopics(t,e){var r;let s;return e==="2.1"&&(s=t.Topic.RelatedTopic),e==="3"&&(s=(r=t.Topic.RelatedTopics)==null?void 0:r.RelatedTopic),s?(Array.isArray(s)?s:[s]).map(o=>o.Guid):[]}async load(t,e){var m;const{fallbackVersionOnImport:s,ignoreIncompleteTopicsOnImport:n,updateExtensionsOnImport:r}=this.config,o=new Lr;await o.loadAsync(t);const a=Object.values(o.files);let l=s;const h=a.find(F=>F.name.endsWith(".version"));if(h){const F=await h.async("string"),R=Fe.xmlParser.parse(F).Version.VersionId;l=String(R)}if(!(l&&(l==="2.1"||l==="3")))throw new Error(`BCFTopics: ${l} is not supported.`);const f=a.find(F=>F.name.endsWith(".extensions"));if(r&&f){const F=await f.async("string");Fo(this,F)}const I=[],u=this.components.get(Zt),d=a.filter(F=>F.name.endsWith(".bcfv"));for(const F of d){const R=await F.async("string"),S=Fe.xmlParser.parse(R).VisualizationInfo;if(!S){console.warn("Missing VisualizationInfo in Viewpoint");continue}const O={},{Guid:y,ClippingPlanes:w,Components:P,OrthogonalCamera:v,PerspectiveCamera:G}=S;if(y&&(O.guid=y),P){const{Selection:D,Visibility:g}=P;if(D&&D.Component){const Q=Array.isArray(D.Component)?D.Component:[D.Component];O.selectionComponents=Q.map(z=>z.IfcGuid).filter(z=>z)}if(g&&"DefaultVisibility"in g&&(O.defaultVisibility=g.DefaultVisibility),g&&g.Exceptions&&"Component"in g.Exceptions){const{Component:Q}=g.Exceptions,z=Array.isArray(Q)?Q:[Q];O.exceptionComponents=z.map(et=>et.IfcGuid).filter(et=>et)}let U;l==="2.1"&&(U=P.ViewSetupHints),l==="3"&&(U=(m=P.Visibility)==null?void 0:m.ViewSetupHints),U&&("OpeningsVisible"in U&&(O.openingsVisible=U.OpeningsVisible),"SpacesVisible"in U&&(O.spacesVisible=U.SpacesVisible),"SpaceBoundariesVisible"in U&&(O.spaceBoundariesVisible=U.SpaceBoundariesVisible))}if(v||G){const D=S.PerspectiveCamera??S.OrthogonalCamera,{CameraViewPoint:g,CameraDirection:U}=D,Q=new b.Vector3(Number(g.X),Number(g.Z),Number(-g.Y)),z=new b.Vector3(Number(U.X),Number(U.Z),Number(-U.Y)),et={position:{x:Q.x,y:Q.y,z:Q.z},direction:{x:z.x,y:z.y,z:z.z},aspectRatio:"AspectRatio"in D?D.AspectRatio:1};"ViewToWorldScale"in D&&(O.camera={...et,viewToWorldScale:D.ViewToWorldScale}),"FieldOfView"in D&&(O.camera={...et,fov:D.FieldOfView})}const N=new kn(this.components,e,{data:O,setCamera:!1});if(P){const{Coloring:D}=P;if(D&&D.Color){const g=Array.isArray(D.Color)?D.Color:[D.Color];for(const U of g){const{Color:Q,Component:z}=U,X=(Array.isArray(z)?z:[z]).map(nt=>nt.IfcGuid);N.componentColors.set(Q,X)}}}if(I.push(N),w){const D=this.components.get(Is),g=Array.isArray(w.ClippingPlane)?w.ClippingPlane:[w.ClippingPlane];for(const U of g){const{Location:Q,Direction:z}=U;if(!(Q&&z))continue;const et=new b.Vector3(Q.X,Q.Z,-Q.Y),X=new b.Vector3(z.X,-z.Z,z.Y),nt=D.createFromNormalAndCoplanarPoint(e,X,et);nt.visible=!1,nt.enabled=!1,N.clippingPlanes.add(nt)}}}const E={},T=[],p=a.filter(F=>F.name.endsWith(".bcf"));for(const F of p){const R=await F.async("string"),S=Fe.xmlParser.parse(R).Markup,O=S.Topic,{Guid:y,TopicType:w,TopicStatus:P,Title:v,CreationDate:G,CreationAuthor:N}=O;if(n&&!(y&&w&&P&&v&&G&&N))continue;const D=new Mi(this.components);D.guid=y??D.guid;const g=this.getMarkupRelatedTopics(S,l);E[D.guid]=new Set(g),D.type=w??D.type,D.status=P??D.status,D.title=v??D.title,D.creationDate=G?new Date(G):D.creationDate,D.creationAuthor=N??D.creationAuthor,D.serverAssignedId=O.ServerAssignedId,D.priority=O.Priority,D.index=O.Index,D.modifiedDate=O.ModifiedDate?new Date(O.ModifiedDate):void 0,D.modifiedAuthor=O.ModifiedAuthor,D.dueDate=O.DueDate?new Date(O.DueDate):void 0,D.assignedTo=O.AssignedTo,D.description=O.Description,D.stage=O.Stage;const U=this.getMarkupLabels(S,l);for(const et of U)D.labels.add(et);const Q=this.getMarkupComments(S,l);for(const et of Q)D.comments.set(et.guid,et);const z=this.getMarkupViewpoints(S,l);for(const et of z){if(!(et&&et.Guid))continue;const X=u.list.get(et.Guid);X&&D.viewpoints.add(X.guid)}this.list.set(D.guid,D),T.push(D)}for(const F in E){const R=this.list.get(F);if(!R)continue;const S=E[F];for(const O of S)R.relatedTopics.add(O)}return this.onBCFImported.trigger(T),{viewpoints:I,topics:T}}};C(Fe,"uuid","de977976-e4f6-4e4f-a01a-204727839802"),C(Fe,"xmlParser",new Ao.XMLParser({allowBooleanAttributes:!0,attributeNamePrefix:"",ignoreAttributes:!1,ignoreDeclaration:!0,ignorePiTags:!0,numberParseOptions:{leadingZeros:!0,hex:!0},parseAttributeValue:!0,preserveOrder:!1,processEntities:!1,removeNSPrefix:!0,trimValues:!0}));let Mt=Fe;const ie=class ie extends mt{constructor(t){super(t);C(this,"enabled",!0);C(this,"onDisposed",new q);C(this,"_absoluteMin");C(this,"_absoluteMax");C(this,"_meshes",[]);this.components.add(ie.uuid,this),this._absoluteMin=ie.newBound(!0),this._absoluteMax=ie.newBound(!1)}static getDimensions(t){const{min:e,max:s}=t,n=Math.abs(s.x-e.x),r=Math.abs(s.y-e.y),o=Math.abs(s.z-e.z),a=new b.Vector3;return a.subVectors(s,e).divideScalar(2).add(e),{width:n,height:r,depth:o,center:a}}static newBound(t){const e=t?1:-1;return new b.Vector3(e*Number.MAX_VALUE,e*Number.MAX_VALUE,e*Number.MAX_VALUE)}static getBounds(t,e,s){const n=s||this.newBound(!1),r=e||this.newBound(!0);for(const o of t)o.x<r.x&&(r.x=o.x),o.y<r.y&&(r.y=o.y),o.z<r.z&&(r.z=o.z),o.x>n.x&&(n.x=o.x),o.y>n.y&&(n.y=o.y),o.z>n.z&&(n.z=o.z);return new b.Box3(e,s)}dispose(){const t=this.components.get(Ce);for(const e of this._meshes)t.destroy(e);this._meshes=[],this.onDisposed.trigger(ie.uuid),this.onDisposed.reset()}get(){const t=this._absoluteMin.clone(),e=this._absoluteMax.clone();return new b.Box3(t,e)}getSphere(){const t=this._absoluteMin.clone(),e=this._absoluteMax.clone(),s=Math.abs((e.x-t.x)/2),n=Math.abs((e.y-t.y)/2),r=Math.abs((e.z-t.z)/2),o=new b.Vector3(t.x+s,t.y+n,t.z+r),a=o.distanceTo(t);return new b.Sphere(o,a)}getMesh(){const t=new b.Box3(this._absoluteMin,this._absoluteMax),e=ie.getDimensions(t),{width:s,height:n,depth:r,center:o}=e,a=new b.BoxGeometry(s,n,r),l=new b.Mesh(a);return this._meshes.push(l),l.position.copy(o),l}reset(){this._absoluteMin=ie.newBound(!0),this._absoluteMax=ie.newBound(!1)}add(t){for(const e of t.items)this.addMesh(e.mesh)}addMesh(t,e){if(!t.geometry.index)return;const s=ie.getFragmentBounds(t);t.updateMatrixWorld();const n=t.matrixWorld,r=new b.Matrix4,o=t instanceof b.InstancedMesh,a=new Set;if(t instanceof jt.FragmentMesh){e||(e=t.fragment.ids);for(const l of e){const h=t.fragment.getInstancesIDs(l);if(h)for(const f of h)a.add(f)}}else a.add(0);for(const l of a){const h=s.min.clone(),f=s.max.clone();o&&(t.getMatrixAt(l,r),h.applyMatrix4(r),f.applyMatrix4(r)),h.applyMatrix4(n),f.applyMatrix4(n),h.x<this._absoluteMin.x&&(this._absoluteMin.x=h.x),h.y<this._absoluteMin.y&&(this._absoluteMin.y=h.y),h.z<this._absoluteMin.z&&(this._absoluteMin.z=h.z),h.x>this._absoluteMax.x&&(this._absoluteMax.x=h.x),h.y>this._absoluteMax.y&&(this._absoluteMax.y=h.y),h.z>this._absoluteMax.z&&(this._absoluteMax.z=h.z),f.x>this._absoluteMax.x&&(this._absoluteMax.x=f.x),f.y>this._absoluteMax.y&&(this._absoluteMax.y=f.y),f.z>this._absoluteMax.z&&(this._absoluteMax.z=f.z),f.x<this._absoluteMin.x&&(this._absoluteMin.x=f.x),f.y<this._absoluteMin.y&&(this._absoluteMin.y=f.y),f.z<this._absoluteMin.z&&(this._absoluteMin.z=f.z)}}addFragmentIdMap(t){const e=this.components.get(pt);for(const s in t){const n=e.list.get(s);if(!n)continue;const r=t[s];this.addMesh(n.mesh,r)}}static getFragmentBounds(t){const e=t.geometry.attributes.position,s=Number.MAX_VALUE,n=-s,r=new b.Vector3(s,s,s),o=new b.Vector3(n,n,n);if(!t.geometry.index)throw new Error("Geometry must be indexed!");const a=Array.from(t.geometry.index.array);for(let l=0;l<a.length;l++){if(l%3===0&&a[l]===0&&a[l+1]===0&&a[l+2]===0){l+=2;continue}const h=a[l],f=e.getX(h),I=e.getY(h),u=e.getZ(h);f<r.x&&(r.x=f),I<r.y&&(r.y=I),u<r.z&&(r.z=u),f>o.x&&(o.x=f),I>o.y&&(o.y=I),u>o.z&&(o.z=u)}return new b.Box3(r,o)}};C(ie,"uuid","d1444724-dba6-4cdd-a0c7-68ee1450d166");let Ts=ie;const ys=class ys{constructor(i){C(this,"onProgress",new q);C(this,"inclusive",!1);C(this,"rules",[]);C(this,"ids",{});C(this,"needsUpdate",new Map);C(this,"components");this.components=i}static import(i,t){const e=ys.importers.get(t.type);return e?e(i,t):(console.warn("Invalid query data:.",t),null)}static importRules(i){const t=[];for(const e of i){const s={};for(const n in e){const r=e[n];r.regexp?s[n]=new RegExp(r.value):s[n]=r}t.push(s)}return t}static importIds(i){const t={};for(const e in i.ids)t[e]=new Set(i.ids[e]);return t}clear(i){if(i===void 0){this.ids={},this.needsUpdate.clear();return}delete this.ids[i],this.needsUpdate.delete(i)}addID(i,t){this.ids[i]||(this.ids[i]=new Set),this.ids[i].add(t)}getData(){const i={};for(const e in this.ids)i[e]=Array.from(this.ids[e]);const t=this.exportRules();return{name:this.name,inclusive:this.inclusive,type:"IfcFinderQuery",ids:i,rules:t}}exportRules(){const i=[];for(const t of this.rules){const e={};for(const s in t){const n=t[s];n instanceof RegExp?e[s]={regexp:!0,value:n.source}:e[s]=n}i.push(e)}return i}findInFile(i,t){return new Promise(e=>{const s=new FileReader,n=new TextDecoder("utf-8"),r=1e4*1024,o=1e3;let a=0;const l=/;/,h=()=>{if(a>=t.size){e();return}const f=Math.min(a+r+o,t.size),I=t.slice(a,f);s.readAsArrayBuffer(I)};s.onload=()=>{if(!(s.result instanceof ArrayBuffer))return;const f=new Uint8Array(s.result),u=n.decode(f).split(l);u.shift(),this.findInLines(i,u),this.onProgress.trigger(a/t.size),a+=r,h()},h()})}getIdFromLine(i){const t=i.slice(i.indexOf("#")+1,i.indexOf("="));return parseInt(t,10)}testRules(i){let t=null,e=null,s=null,n=!1;for(const r of this.rules){if(r.type==="category"){if(t===null&&(t=this.getCategoryFromLine(i),t===null)){if(this.inclusive)continue;break}if(!r.value.test(t)){if(this.inclusive)continue;n=!1;break}n=!0;continue}if(e===null&&(e=this.getAttributesFromLine(i),e===null)){if(this.inclusive)continue;n=!1;break}if(t===null&&(t=this.getCategoryFromLine(i),t===null)){if(this.inclusive)continue;n=!1;break}if(s===null&&(s=Object.keys(new k.IFC4[t]),s=s.slice(2),s===null)){if(this.inclusive)continue;n=!1;break}if(r.type==="property"){const{name:o,value:a}=r;if(!a.test(i)){if(this.inclusive)continue;n=!1;break}let l=!1;for(let h=0;h<e.length;h++){const f=e[h],I=s[h];if(a.test(f)&&o.test(I)){l=!0;break}}if(l)n=!0;else if(!this.inclusive){n=!1;break}}if(r.type==="operator"){const{name:o,value:a,operator:l}=r;let h=!1;for(let f=0;f<e.length;f++){const I=s[f],u=e[f].replace(/IFCLENGTHMEASURE\(|IFCVOLUMEMEASURE\(|\)/g,"");if(o.test(I)){if(l==="="&&parseFloat(u)===a){h=!0;break}else if(l==="<"&&parseFloat(u)<a){h=!0;break}else if(l===">"&&parseFloat(u)>a){h=!0;break}else if(l===">="&&parseFloat(u)>=a){h=!0;break}else if(l==="<="&&parseFloat(u)<=a){h=!0;break}}}if(h)n=!0;else if(!this.inclusive){n=!1;break}}}return n}getCategoryFromLine(i){const t=i.indexOf("=")+1,e=i.indexOf("("),s=i.slice(t,e).trim(),n=ao[s];return n||null}getAttributesFromLine(i){const t=/\((.*)\)/,e=i.match(t);if(!(e&&e[1]))return null;const s=/,(?![^()]*\))/g;return e[1].split(s).map(r=>r.trim())}};C(ys,"importers",new Map);let qt=ys;class br{constructor(i){C(this,"list",new Map);C(this,"id",b.MathUtils.generateUUID());C(this,"mode","intersect");C(this,"_components");this._components=i}get queries(){return new Set(this.list.values())}get items(){const i=[];for(const t of this.queries)i.push(t.items);return this.mode==="combine"?jt.FragmentUtils.combine(i):jt.FragmentUtils.intersect(i)}add(i){if(this.list.has(i.name))throw new Error(`This group already has a query with the name ${i.name}.`);this.list.set(i.name,i)}clear(i){for(const t of this.queries)t.clear(i)}import(i){this.mode=i.mode,this.id=i.id;for(const t in i.queries){const e=qt.import(this._components,i.queries[t]);e&&this.list.set(t,e)}}export(){const i={};for(const[t,e]of this.list)i[t]=e.export();return{mode:this.mode,id:this.id,queries:i}}async update(i,t){for(const e of this.queries){const s=e.needsUpdate.get(i);(s===void 0||s)&&await e.update(i,t)}}}const Ls=class Ls extends qt{constructor(t,e){super(t);C(this,"name");this.name=e.name,this.rules=e.rules,this.inclusive=e.inclusive}get items(){const t=this.components.get(pt),e=[];for(const s in this.ids){const n=this.ids[s],r=t.groups.get(s);if(!r){console.warn(`Model ${s} not found!`);continue}const o=r.getFragmentMap(n);e.push(o)}return jt.FragmentUtils.combine(e)}export(){const t=this.getData();return t.type=Ls.type,t}async update(t,e){this.ids[t]=new Set,await this.findInFile(t,e),this.needsUpdate.set(t,!1)}findInLines(t,e){for(const s of e)if(this.testRules(s)){const r=this.getIdFromLine(s);this.addID(t,r)}}};C(Ls,"type","IfcBasicQuery");let wi=Ls;qt.importers.set(wi.type,(c,i)=>{const t=new wi(c,{name:i.name,rules:qt.importRules(i.rules),inclusive:i.inclusive});return t.ids=qt.importIds(i),t});const Ps=class Ps extends qt{constructor(t,e){super(t);C(this,"name");C(this,"psets",[]);this.name=e.name,this.rules=e.rules,this.inclusive=e.inclusive}get items(){const t=this.components.get(Ut),e=this.components.get(pt),s=[];for(const n in this.ids){const r=e.groups.get(n);if(!r){console.log(`Model not found: ${n}.`);continue}const o=this.ids[n];for(const a of o){const l=t.getEntityRelations(n,a,"DefinesOcurrence");if(l){const h=r.getFragmentMap(l);s.push(h)}}}return jt.FragmentUtils.combine(s)}export(){const t=this.getData();return t.type=Ps.type,t}async update(t,e){await this.findInFile(t,e);const s=new Set;for(const n of this.psets){const r=this.getAttributesFromLine(n);if(r===null)continue;const o=r[4].replace("(","[").replace(")","]").replace(/#/g,""),a=JSON.parse(o);for(const l of a){const h=this.ids[t];if(h&&h.has(l)){const f=this.getIdFromLine(n);s.add(f);break}}}this.ids[t]=s,this.psets=[],this.needsUpdate.set(t,!1)}findInLines(t,e){for(const s of e){const n=this.getCategoryFromLine(s);if(n==="IfcPropertySet"){this.psets.push(s);continue}if(n!=="IfcPropertySingleValue")continue;if(this.testRules(s)){const o=this.getIdFromLine(s);this.addID(t,o)}}}};C(Ps,"type","IfcPropertyQuery");let Di=Ps;qt.importers.set(Di.type,(c,i)=>{const t=new Di(c,{name:i.name,inclusive:i.inclusive,rules:qt.importRules(i.rules)});return t.ids=qt.importIds(i),t});const _s=class _s extends mt{constructor(t){super(t);C(this,"enabled",!0);C(this,"list",new Map);t.add(_s.uuid,this)}get queries(){const t=new Set;for(const[,e]of this.list)for(const s of e.queries)t.add(s);return t}import(t){for(const e in t){const s=new br(this.components);s.import(t[e]),this.list.set(e,s)}}export(){const t={};for(const[e,s]of this.list)t[e]=s.export();return t}create(){const t=new br(this.components);return this.list.set(t.id,t),t}delete(t){this.list.delete(t)}clear(){this.list.clear()}};C(_s,"uuid","0da7ad77-f734-42ca-942f-a074adfd1e3a");let yn=_s;const Ms=class Ms extends mt{constructor(t){super(t);C(this,"enabled",!0);C(this,"list",{});C(this,"onDisposed",new q);C(this,"onFragmentsDisposed",t=>{const{groupID:e,fragmentIDs:s}=t;for(const n in this.list){const r=this.list[n],o=Object.keys(r);if(o.includes(e))delete r[e],Object.values(r).length===0&&delete this.list[n];else for(const a of o){const l=r[a];for(const h of s)delete l.map[h];Object.values(l).length===0&&delete r[a]}}});t.add(Ms.uuid,this),t.get(pt).onFragmentsDisposed.add(this.onFragmentsDisposed)}dispose(){this.list={},this.components.get(pt).onFragmentsDisposed.remove(this.onFragmentsDisposed),this.onDisposed.trigger(),this.onDisposed.reset()}remove(t){for(const e in this.list){const s=this.list[e];for(const n in s){const r=s[n];delete r.map[t]}}}find(t){const e=this.components.get(pt);if(!t){const o={};for(const[a,l]of e.list)o[a]=new Set(l.ids);return o}const s=Object.keys(t).length,n={};for(const o in t){const a=t[o];if(!this.list[o]){console.warn(`Classification ${o} does not exist.`);continue}for(const l of a){const h=this.list[o][l];if(h)for(const f in h.map){n[f]||(n[f]=new Map);for(const I of h.map[f]){const u=n[f].get(I);u===void 0?n[f].set(I,1):n[f].set(I,u+1)}}}}const r={};for(const o in n){const a=n[o];for(const[l,h]of a){if(h===void 0)throw new Error("Malformed fragments map!");h===s&&(r[o]||(r[o]=new Set),r[o].add(l))}}return r}byModel(t,e){this.list.models||(this.list.models={});const s=this.list.models;s[t]||(s[t]={map:{},id:null,name:t});const n=s[t];for(const[r,o]of e.data){const a=o[0];for(const l of a){const h=e.keyFragments.get(l);h&&(n.map[h]||(n.map[h]=new Set),n.map[h].add(r))}}}async byPredefinedType(t){var n;this.list.predefinedTypes||(this.list.predefinedTypes={});const e=this.list.predefinedTypes,s=t.getAllPropertiesIDs();for(const r of s){const o=await t.getProperties(r);if(!o)continue;const a=String((n=o.PredefinedType)==null?void 0:n.value).toUpperCase();e[a]||(e[a]={map:{},id:null,name:a});const l=e[a];for(const[h,f]of t.data){const I=f[0];for(const u of I){const d=t.keyFragments.get(u);if(!d)throw new Error("Fragment ID not found!");l.map[d]||(l.map[d]=new Set),l.map[d].add(o.expressID)}}}}byEntity(t){this.list.entities||(this.list.entities={});for(const[e,s]of t.data){const r=s[1][1],o=_i[r];this.saveItem(t,"entities",o,e)}}async byIfcRel(t,e,s){be.isRel(e)&&await be.getRelationMap(t,e,async(n,r)=>{const{name:o}=await be.getEntityName(t,n);for(const a of r)this.saveItem(t,s,o??"NO REL NAME",a)})}async bySpatialStructure(t,e={}){var l,h;const s=this.components.get(Ut),n=s.relationMaps[t.uuid];if(!n)throw new Error(`Classifier: model relations of ${t.name||t.uuid} have to exists to group by spatial structure.`);const r="spatialStructures",a=e.useProperties===void 0||e.useProperties;for(const[f]of n){if(e.isolate){const E=t.data.get(f);if(!E)continue;const T=E[1][1];if(T===void 0||!e.isolate.has(T))continue}const I=s.getEntityRelations(t,f,"Decomposes");if(I)for(const E of I){let T=E.toString();if(a){const p=await t.getProperties(E);if(!p)continue;T=(l=p.Name)==null?void 0:l.value}this.saveItem(t,r,T,f,E)}const u=s.getEntityRelations(t,f,"ContainsElements");if(!u)continue;let d=f.toString();if(a){const E=await t.getProperties(f);if(!E)continue;d=(h=E.Name)==null?void 0:h.value}for(const E of u){this.saveItem(t,r,d,E,f);const T=s.getEntityRelations(t,Number(E),"IsDecomposedBy");if(T)for(const p of T)this.saveItem(t,r,d,p,f)}}}setColor(t,e,s=!1){const n=this.components.get(pt);for(const r in t){const o=n.list.get(r);if(!o)continue;const a=t[r];o.setColor(e,a,s)}}resetColor(t){const e=this.components.get(pt);for(const s in t){const n=e.list.get(s);if(!n)continue;const r=t[s];n.resetColor(r)}}saveItem(t,e,s,n,r=null){this.list[e]||(this.list[e]={});const o=t.data.get(n);if(o)for(const a of o[0]){const l=t.keyFragments.get(a);if(l){const h=this.list[e];h[s]||(h[s]={map:{},id:r,name:s}),h[s].map[l]||(h[s].map[l]=new Set),h[s].map[l].add(n)}}}};C(Ms,"uuid","e25a7f3c-46c4-4a14-9d3d-5115f24ebeb7");let ti=Ms;const ws=class ws extends mt{constructor(t){super(t);C(this,"onDisposed",new q);C(this,"enabled",!0);C(this,"height",10);C(this,"groupName","spatialStructures");C(this,"list",new Set);t.add(ws.uuid,this)}dispose(){this.list.clear(),this.onDisposed.trigger(),this.onDisposed.reset()}set(t){if(!this.enabled)return;const e=this.components.get(ti),s=this.components.get(pt),n=t?1:-1;let r=0;const o=e.list[this.groupName],a=new b.Matrix4;for(const l in o){a.elements[13]=r*n*this.height;for(const h in o[l].map){const f=s.list.get(h),I=l+h,u=this.list.has(I);if(!f||t&&u||!t&&!u)continue;t?this.list.add(I):this.list.delete(I);const d=o[l].map[h];f.applyTransform(d,a),f.mesh.computeBoundingSphere(),f.mesh.computeBoundingBox()}r++}}};C(ws,"uuid","d260618b-ce88-4c7d-826c-6debb91de3e2");let Ln=ws;const Ds=class Ds extends mt{constructor(t){super(t);C(this,"enabled",!0);this.components.add(Ds.uuid,this)}set(t,e){const s=this.components.get(pt);if(!e){for(const[n,r]of s.list)r&&(r.setVisibility(t),this.updateCulledVisibility(r));return}for(const n in e){const r=e[n],o=s.list.get(n);o&&(o.setVisibility(t,r),this.updateCulledVisibility(o))}}isolate(t){this.set(!1),this.set(!0,t)}updateCulledVisibility(t){const e=this.components.get(fs);for(const[s,n]of e.list){const r=n.colorMeshes.get(t.id);r&&(r.count=t.mesh.count)}}};C(Ds,"uuid","dd9ccf2d-8a21-4821-b7f6-2949add16a29");let ms=Ds;class Oo extends zs{constructor(){super(...arguments);C(this,"minGeometrySize",10);C(this,"minAssetsSize",1e3);C(this,"maxTriangles",null)}}const bs=class bs extends mt{constructor(t){super(t);C(this,"onGeometryStreamed",new fe);C(this,"onAssetStreamed",new fe);C(this,"onProgress",new fe);C(this,"onIfcLoaded",new fe);C(this,"onDisposed",new q);C(this,"settings",new Oo);C(this,"enabled",!0);C(this,"webIfc",new k.IfcAPI);C(this,"_nextAvailableID",0);C(this,"_splittedGeometries",new Map);C(this,"_spatialTree",new co);C(this,"_metaData",new ho);C(this,"_visitedGeometries",new Map);C(this,"_streamSerializer",new jt.StreamSerializer);C(this,"_geometries",new Map);C(this,"_geometryCount",0);C(this,"_civil",new lo);C(this,"_groupSerializer",new jt.Serializer);C(this,"_assets",[]);C(this,"_meshesWithHoles",new Set);this.components.add(bs.uuid,this),this.settings.excludedCategories.add(k.IFCOPENINGELEMENT)}dispose(){this.onIfcLoaded.reset(),this.onGeometryStreamed.reset(),this.onAssetStreamed.reset(),this.webIfc=null,this.onDisposed.trigger(),this.onDisposed.reset()}async streamFromBuffer(t){await this.readIfcFile(t),await this.streamAllGeometries(),this.cleanUp()}async streamFromCallBack(t){await this.streamIfcFile(t),await this.streamAllGeometries(),this.cleanUp()}async readIfcFile(t){const{path:e,absolute:s,logLevel:n}=this.settings.wasm;this.webIfc.SetWasmPath(e,s),await this.webIfc.Init(),n&&this.webIfc.SetLogLevel(n),this.webIfc.OpenModel(t,this.settings.webIfc),this._nextAvailableID=this.webIfc.GetMaxExpressID(0)}async streamIfcFile(t){const{path:e,absolute:s,logLevel:n}=this.settings.wasm;this.webIfc.SetWasmPath(e,s),await this.webIfc.Init(),n&&this.webIfc.SetLogLevel(n),this.webIfc.OpenModelFromCallback(t,this.settings.webIfc)}async streamAllGeometries(){const{minGeometrySize:t,minAssetsSize:e}=this.settings;this._spatialTree.setUp(this.webIfc);const s=this.webIfc.GetIfcEntityList(0),n=[[]],r=new jt.FragmentsGroup;r.ifcMetadata={name:"",description:"",...this._metaData.getNameInfo(this.webIfc),...this._metaData.getDescriptionInfo(this.webIfc),schema:this.webIfc.GetModelSchema(0)||"IFC2X3",maxExpressID:this.webIfc.GetMaxExpressID(0)};let o=0,a=0;for(const E of s){if(!this.webIfc.IsIfcElement(E)&&E!==k.IFCSPACE||this.settings.excludedCategories.has(E))continue;const T=this.webIfc.GetLineIDsWithType(0,E),p=T.size();for(let m=0;m<p;m++){o>t&&(o=0,a++,n.push([]));const F=T.get(m);n[a].push(F);const R=this.webIfc.GetLine(0,F);if(R.GlobalId){const O=(R==null?void 0:R.GlobalId.value)||(R==null?void 0:R.GlobalId);r.globalToExpressIDs.set(O,F)}const S=this._spatialTree.itemsByFloor[F]||0;r.data.set(F,[[],[S,E]]),o++}}this._spatialTree.cleanUp();let l=.01,h=0;for(const E of n){h++,this.webIfc.StreamMeshes(0,E,p=>{this.getMesh(this.webIfc,p,r)}),this._geometryCount>this.settings.minGeometrySize&&await this.streamGeometries(),this._assets.length>e&&await this.streamAssets();const T=h/n.length;T>l&&(l+=.01,l=Math.max(l,T),await this.onProgress.trigger(Math.round(l*100)/100))}this._geometryCount&&await this.streamGeometries(),this._assets.length&&await this.streamAssets();const{opaque:f,transparent:I}=r.geometryIDs;for(const[E,{index:T,uuid:p}]of this._visitedGeometries)r.keyFragments.set(T,p),(E>1?f:I).set(E,T);uo.get(r,this.webIfc);const u=this.webIfc.GetCoordinationMatrix(0);r.coordinationMatrix.fromArray(u),r.civilData=this._civil.read(this.webIfc);const d=this._groupSerializer.export(r);await this.onIfcLoaded.trigger(d),r.dispose(!0)}cleanUp(){try{this.webIfc.Dispose()}catch{}this.webIfc=null,this.webIfc=new k.IfcAPI,this._visitedGeometries.clear(),this._geometries.clear(),this._assets=[],this._meshesWithHoles.clear()}getMesh(t,e,s){const n=e.geometries.size(),r=e.expressID,o={id:r,geometries:[]};for(let a=0;a<n;a++){const l=e.geometries.get(a),h=l.geometryExpressID,I=l.color.w===1?1:-1,u=h*I;this._visitedGeometries.has(u)||this.getGeometry(t,h,u),this.registerGeometryData(s,r,l,o,h,u);const d=this._splittedGeometries.get(h);if(d)for(const E of d)this.registerGeometryData(s,r,l,o,E,E)}this._assets.push(o)}getGeometry(t,e,s){const n=t.GetGeometry(0,e),r=t.GetIndexArray(n.GetIndexData(),n.GetIndexDataSize()),o=t.GetVertexArray(n.GetVertexData(),n.GetVertexDataSize()),a=new Float32Array(o.length/2),l=new Float32Array(o.length/2);for(let u=0;u<o.length;u+=6)a[u/2]=o[u],a[u/2+1]=o[u+1],a[u/2+2]=o[u+2],l[u/2]=o[u+3],l[u/2+1]=o[u+4],l[u/2+2]=o[u+5];if(r.length===0){const u=new Float32Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]);this._geometries.set(e,{position:a,normal:l,index:r,boundingBox:u,hasHoles:!1});const d=this._visitedGeometries.size,E=b.MathUtils.generateUUID();this._visitedGeometries.set(s,{uuid:E,index:d}),this._geometryCount++,n.delete();return}const f=(this.settings.maxTriangles||r.length/3)*3;let I=!0;for(let u=0;u<r.length;u+=f){const d=r.length-u,E=Math.min(d,f),T=u+E,p=[],m=[],F=[];let R=0;for(let g=u;g<T;g++){p.push(R++);const U=r[g];m.push(a[U*3]),m.push(a[U*3+1]),m.push(a[U*3+2]),F.push(l[U*3]),F.push(l[U*3+1]),F.push(l[U*3+2])}const S=new Uint32Array(p),O=new Float32Array(m),y=new Float32Array(F),w=kr(O),P=new Float32Array(w.transformation.elements),v=!1,G=I?e:this._nextAvailableID++;this._geometries.set(G,{position:O,normal:y,index:S,boundingBox:P,hasHoles:v}),I||(this._splittedGeometries.has(e)||this._splittedGeometries.set(e,new Set),this._splittedGeometries.get(e).add(G));const N=this._visitedGeometries.size,D=b.MathUtils.generateUUID();this._visitedGeometries.set(s,{uuid:D,index:N}),this._geometryCount++,I=!1}n.delete()}async streamAssets(){await this.onAssetStreamed.trigger(this._assets),this._assets=null,this._assets=[]}async streamGeometries(){let t=this._streamSerializer.export(this._geometries),e={};for(const[s,{boundingBox:n,hasHoles:r}]of this._geometries)e[s]={boundingBox:n,hasHoles:r};await this.onGeometryStreamed.trigger({data:e,buffer:t}),e=null,t=null,this._geometries.clear(),this._geometryCount=0}registerGeometryData(t,e,s,n,r,o){const a=this._visitedGeometries.get(o);if(a===void 0)throw new Error("Error getting geometry data for streaming!");const l=t.data.get(e);if(!l)throw new Error("Data not found!");l[0].push(a.index);const{x:h,y:f,z:I,w:u}=s.color,d=[h,f,I,u],E=s.flatTransformation;n.geometries.push({color:d,geometryID:r,transformation:E})}};C(bs,"uuid","d9999a00-e1f5-4d3f-8cfe-c56e08609764");let Pn=bs;class No extends zs{constructor(){super(...arguments);C(this,"propertiesSize",100)}}class yo extends mt{constructor(){super(...arguments);C(this,"onPropertiesStreamed",new fe);C(this,"onProgress",new fe);C(this,"onIndicesStreamed",new fe);C(this,"onDisposed",new q);C(this,"enabled",!0);C(this,"settings",new No);C(this,"webIfc",new k.IfcAPI)}async dispose(){this.onIndicesStreamed.reset(),this.onPropertiesStreamed.reset(),this.webIfc=null,this.onDisposed.reset()}async streamFromBuffer(t){await this.readIfcFile(t),await this.streamAllProperties(),this.cleanUp()}async streamFromCallBack(t){await this.streamIfcFile(t),await this.streamAllProperties(),this.cleanUp()}async readIfcFile(t){const{path:e,absolute:s,logLevel:n}=this.settings.wasm;this.webIfc.SetWasmPath(e,s),await this.webIfc.Init(),n&&this.webIfc.SetLogLevel(n),this.webIfc.OpenModel(t,this.settings.webIfc)}async streamIfcFile(t){const{path:e,absolute:s,logLevel:n}=this.settings.wasm;this.webIfc.SetWasmPath(e,s),await this.webIfc.Init(),n&&this.webIfc.SetLogLevel(n),this.webIfc.OpenModelFromCallback(t,this.settings.webIfc)}async streamAllProperties(){const{propertiesSize:t}=this.settings,e=new Set(this.webIfc.GetIfcEntityList(0)),s=new Set([k.IFCPROJECT,k.IFCSITE,k.IFCBUILDING,k.IFCBUILDINGSTOREY,k.IFCSPACE]);for(const l of s)e.add(l);let n=.01,r=0;for(const l of e){if(r++,Vn.has(l))continue;const h=s.has(l),f=this.webIfc.GetLineIDsWithType(0,l),I=f.size();let u=0;for(let E=0;E<I-t;E+=t){const T={};for(let p=0;p<t;p++){u++;const m=f.get(E+p);try{const F=this.webIfc.GetLine(0,m,h);T[F.expressID]=F}catch{console.log(`Could not get property: ${m}`)}}await this.onPropertiesStreamed.trigger({type:l,data:T})}if(u!==I){const E={};for(let T=u;T<I;T++){const p=f.get(T);try{const m=this.webIfc.GetLine(0,p,h);E[m.expressID]=m}catch{console.log(`Could not get property: ${p}`)}}await this.onPropertiesStreamed.trigger({type:l,data:E})}r/e.size>n&&(n=Math.round(n*100)/100,await this.onProgress.trigger(n),n+=.01)}await this.onProgress.trigger(1);const a=await this.components.get(Ut).processFromWebIfc(this.webIfc,0);await this.onIndicesStreamed.trigger(a)}cleanUp(){this.webIfc.Dispose(),this.webIfc=null,this.webIfc=new k.IfcAPI}}C(yo,"uuid","88d2c89c-ce32-47d7-8cb6-d51e4b311a0b");class kn{constructor(i,t,e){C(this,"title");C(this,"guid",Kt.create());C(this,"clippingPlanes",new Ie);C(this,"camera",{aspectRatio:1,fov:60,direction:{x:0,y:0,z:0},position:{x:0,y:0,z:0}});C(this,"exceptionComponents",new Ie);C(this,"selectionComponents",new Ie);C(this,"componentColors",new Qt);C(this,"spacesVisible",!1);C(this,"spaceBoundariesVisible",!1);C(this,"openingsVisible",!1);C(this,"defaultVisibility",!0);C(this,"_components");C(this,"world");const s={setCamera:!0,...e},{data:n,setCamera:r}=s;this._components=i,this.world=t,n&&(this.guid=n.guid??this.guid,this.set(n)),r&&this.updateCamera()}get _selectionModelIdMap(){const i=this._components.get(pt),t={};for(const[e,s]of i.groups){e in t||(t[e]=new Set);for(const n of this.selectionComponents){const r=s.globalToExpressIDs.get(n);r&&t[e].add(r)}}return t}get _exceptionModelIdMap(){const i=this._components.get(pt),t={};for(const[e,s]of i.groups){e in t||(t[e]=new Set);for(const n of this.exceptionComponents){const r=s.globalToExpressIDs.get(n);r&&t[e].add(r)}}return t}get selection(){return this._components.get(pt).modelIdToFragmentIdMap(this._selectionModelIdMap)}get exception(){return this._components.get(pt).modelIdToFragmentIdMap(this._exceptionModelIdMap)}get projection(){return"fov"in this.camera?"Perspective":"Orthographic"}get position(){const i=this._components.get(pt),{position:t}=this.camera,{x:e,y:s,z:n}=t,r=new b.Vector3(e,s,n);return i.applyBaseCoordinateSystem(r,new b.Matrix4),r}get direction(){const{direction:i}=this.camera,{x:t,y:e,z:s}=i;return new b.Vector3(t,e,s)}get _managerVersion(){return this._components.get(Mt).config.version}get topics(){return[...this._components.get(Mt).list.values()].filter(s=>s.viewpoints.has(this.guid))}addComponentsFromMap(i){const e=this._components.get(pt).fragmentIdMapToGuids(i);this.selectionComponents.add(...e),this._components.get(Zt).list.set(this.guid,this)}set(i){const t=i,e=this;for(const n in i){if(n==="guid")continue;const r=t[n];if(n==="selectionComponents"){this.selectionComponents.clear(),this.selectionComponents.add(...r);continue}if(n==="exceptionComponents"){this.exceptionComponents.clear(),this.exceptionComponents.add(...r);continue}n in this&&(e[n]=r)}return this._components.get(Zt).list.set(this.guid,this),this}async go(i=!0){const{camera:t}=this.world;if(!t.hasCameraControls())throw new Error("Viewpoint: the world's camera need controls to set the viewpoint.");t instanceof ro&&t.projection.set(this.projection);const e=new b.Vector3(this.camera.position.x,this.camera.position.y,this.camera.position.z),s=new b.Vector3(this.camera.direction.x,this.camera.direction.y,this.camera.direction.z);if(e.equals(new b.Vector3)&&s.equals(new b.Vector3))return;const n=this.position,r=this.direction;let o={x:n.x+r.x*80,y:n.y+r.y*80,z:n.z+r.z*80};const a=this.selection;if(Object.keys(a).length===0){const f=this._components.get(ve).get(this.world).castRayFromVector(n,this.direction);f&&(o=f.point)}else{const l=this._components.get(Ts);l.reset(),l.addFragmentIdMap(a),o=l.getSphere().center,l.reset()}await t.controls.setLookAt(n.x,n.y,n.z,o.x,o.y,o.z,i)}updateCamera(){const{camera:i,renderer:t}=this.world;if(!t)throw new Error("Viewpoint: the world needs to have a renderer!");if(!i.hasCameraControls())throw new Error("Viewpoint: world's camera need camera controls!");const e=new b.Vector3;i.controls.getPosition(e);const s=i.three,n=new b.Vector3(0,0,-1).applyEuler(s.rotation),{width:r,height:o}=t.getSize();let a=r/o;Number.isNaN(a)&&(a=1);const l=this._components.get(pt);e.applyMatrix4(l.baseCoordinationMatrix.clone().invert());const h={aspectRatio:a,position:{x:e.x,y:e.y,z:e.z},direction:{x:n.x,y:n.y,z:n.z}};s instanceof b.PerspectiveCamera?this.camera={...h,fov:s.fov}:s instanceof b.OrthographicCamera&&(this.camera={...h,viewToWorldScale:s.top-s.bottom}),this._components.get(Zt).list.set(this.guid,this)}applyVisibility(){const i=this._components.get(ms);i.set(this.defaultVisibility),i.set(!this.defaultVisibility,this.exception),i.set(!0,this.selection)}applyColors(){const i=this._components.get(Zt),t=this._components.get(pt),e=this._components.get(ti);for(const[s,n]of this.componentColors){const r=t.guidToFragmentIdMap(n);e.setColor(r,s,i.config.overwriteColors)}}resetColors(){const i=this._components.get(pt),t=this._components.get(ti);for(const[e,s]of this.componentColors){const n=i.guidToFragmentIdMap(s);t.resetColor(n)}}async createComponentTags(i){var n,r;const t=this._components.get(pt),e=this._components.get(Mt);let s="";if(e.config.includeSelectionTag){const o=i==="selection"?this._selectionModelIdMap:this._exceptionModelIdMap;for(const a in o){const l=t.groups.get(a);if(!l)continue;const h=o[a];for(const f of h){const I=await l.getProperties(f);if(!I)continue;const u=(n=I.GlobalId)==null?void 0:n.value;if(!u)continue;const d=(r=I.Tag)==null?void 0:r.value;let E=null;d&&(E=`AuthoringToolId="${d}"`),s+=`
227
227
  <Component IfcGuid="${u}" ${E??""} />`}}}else s=[...this.selectionComponents].map(o=>`<Component IfcGuid="${o}" />`).join(`
228
228
  `);return s}createColorTags(){let i="";for(const[t,e]of this.componentColors.entries()){const s=`#${t.getHexString()}`,n=e.map(r=>`
229
229
  <Component IfcGuid="${r}" />`).join(`
@@ -280,14 +280,14 @@ ${i}
280
280
  </ids:attribute>`}async getEntities(){return[]}async test(t){var s;this.testResult=[];for(const n in t){const r=Number(n),o=t[r],a=[],l={guid:(s=o.GlobalId)==null?void 0:s.value,expressID:r,pass:!1,checks:a,cardinality:this.cardinality};this.testResult.push(l);const f=Object.keys(o).filter(u=>{const d=this.evalRequirement(u,this.name,"Name"),E=o[u];return d&&E===null?this.cardinality==="optional"||this.cardinality==="prohibited":d&&(E==null?void 0:E.type)===3&&E.value===2||d&&Array.isArray(E)&&E.length===0||d&&(E==null?void 0:E.type)===1&&E.value.trim()===""?!1:d}),I=f.length>0;if(a.push({parameter:"Name",currentValue:I?f[0]:null,requiredValue:this.name.parameter,pass:this.cardinality==="prohibited"?!I:I}),this.value)if(f[0]){const u=o[f[0]];(u==null?void 0:u.type)===5?a.push({parameter:"Value",currentValue:null,requiredValue:this.value.parameter,pass:this.cardinality==="prohibited"}):this.evalRequirement(u?u.value:null,this.value,"Value",a)}else a.push({parameter:"Value",currentValue:null,requiredValue:this.value.parameter,pass:this.cardinality==="prohibited"});l.pass=a.every(({pass:u})=>u)}const e=[...this.testResult];return this.testResult=[],e}}class Mo extends bi{constructor(t,e){super(t);C(this,"system");C(this,"value");C(this,"uri");this.system=e}serialize(t){const e=de("System",this.system),s=de("Value",this.value);let n="";return t==="requirement"&&(n+=`cardinality="${this.cardinality}"`,n+=this.uri?`uri=${this.uri}`:"",n+=this.instructions?`instructions="${this.instructions}"`:""),`<ids:classification ${n}>
281
281
  ${e}
282
282
  ${s}
283
- </ids:classification>`}async getEntities(t,e={}){var h;const s=[],n=await t.getAllPropertiesOfType(k.IFCCLASSIFICATIONREFERENCE),r=await t.getAllPropertiesOfType(k.IFCCLASSIFICATION),o={...n,...r},a=[];for(const f in o){const I=Number(f),u=await t.getProperties(I);if(!u)continue;const d=(h=u.ReferencedSource)==null?void 0:h.value;if(!d)continue;const E=await t.getProperties(d);!E||!this.evalSystem(E)||!this.evalValue(u)||!this.evalURI(u)||a.push(I)}const l=this.components.get(Bt);for(const f of a){const I=l.getEntitiesWithRelation(t,"HasAssociations",f);for(const u of I){if(u in e)continue;const d=await t.getProperties(u);d&&(e[u]=d,s.push(u))}}return s}async test(t,e){var n;this.testResult=[];for(const r in t){const o=Number(r),a=t[o],l=[],h={guid:(n=a.GlobalId)==null?void 0:n.value,expressID:o,pass:!1,checks:l,cardinality:this.cardinality};this.testResult.push(h);let f=!0;const I=await this.getSystems(e,o),u=I.map(d=>this.getSystemName(d)).filter(d=>d);for(const d of I){if(!this.evalSystem(d,l))continue;if(f=!1,!(this.value&&this.system))break;if(d.type!==k.IFCCLASSIFICATIONREFERENCE)continue;const T=!this.value||this.evalValue(d,l),p=!this.uri||this.evalURI(d,l);if(T&&p)break}f&&this.addCheckResult({parameter:"System",currentValue:u,requiredValue:this.system,pass:this.cardinality==="optional"},l),h.pass=l.every(({pass:d})=>d)}const s=[...this.testResult];return this.testResult=[],s}async processReferencedSource(t,e){var r;const s=(r=e.ReferencedSource)==null?void 0:r.value;if(!s)return null;const n=await t.getProperties(s);return n?(n.type===k.IFCCLASSIFICATIONREFERENCE&&(n.ReferencedSource=await this.processReferencedSource(t,n)),n):null}async getSystems(t,e){var f;const s=[],n=this.components.get(Bt),r=n.getEntityRelations(t,e,"HasAssociations");if(r)for(const I of r){const u=await t.getProperties(I);u&&(u.type===k.IFCCLASSIFICATION&&s.push(u),u.type===k.IFCCLASSIFICATIONREFERENCE&&(u.ReferencedSource=await this.processReferencedSource(t,u),u.ReferencedSource&&s.push(u)))}const o=s.map(I=>{var u,d,E;return I.type===k.IFCCLASSIFICATION?(u=I.Name)==null?void 0:u.value:I.type===k.IFCCLASSIFICATIONREFERENCE?(E=(d=I.ReferencedSource)==null?void 0:d.Name)==null?void 0:E.value:null}).filter(I=>I),a=n.getEntityRelations(t,e,"IsTypedBy");if(!(a&&a[0]))return s;const l=a[0],h=n.getEntityRelations(t,l,"HasAssociations");if(h)for(const I of h){const u=await t.getProperties(I);if(u){if(u.type===k.IFCCLASSIFICATION){if(o.includes((f=u.Name)==null?void 0:f.value))continue;s.push(u)}u.type===k.IFCCLASSIFICATIONREFERENCE&&(u.ReferencedSource=await this.processReferencedSource(t,u),u.ReferencedSource&&s.push(u))}}return s}getSystemName(t){var e,s,n,r;if(t.type===k.IFCCLASSIFICATION)return(e=t.Name)==null?void 0:e.value;if(t.type===k.IFCCLASSIFICATIONREFERENCE){if(((s=t.ReferencedSource)==null?void 0:s.type)===k.IFCCLASSIFICATIONREFERENCE)return this.getSystemName(t.ReferencedSource);if(((n=t.ReferencedSource)==null?void 0:n.type)===k.IFCCLASSIFICATION)return(r=t.ReferencedSource.Name)==null?void 0:r.value}return null}getAllReferenceIdentifications(t){if(t.type!==k.IFCCLASSIFICATIONREFERENCE)return null;const e=[];if(t.Identification&&e.push(t.Identification.value),t.ReferencedSource){const s=this.getAllReferenceIdentifications(t.ReferencedSource);s&&e.push(...s)}return e}evalSystem(t,e){const s=this.getSystemName(t);return this.evalRequirement(s,this.system,"System",e)}evalValue(t,e){if(!this.value)return!0;const s=this.getAllReferenceIdentifications(t);if(!s)return!1;const n=s.find(r=>this.value?this.evalRequirement(r,this.value,"Value"):!1);return e&&this.addCheckResult({parameter:"Value",currentValue:n??null,requiredValue:this.value,pass:!!n},e),!!n}evalURI(t,e){var n;return this.uri?this.evalRequirement((n=t.Location)==null?void 0:n.value,{type:"simple",parameter:this.uri},"URI",e):!0}}class wo extends bi{constructor(t,e){super(t);C(this,"name");C(this,"predefinedType");this.name=e}serialize(t){const e=de("Name",this.name),s=de("Name",this.predefinedType);let n="";return t==="requirement"&&(n+=`cardinality="${this.cardinality}"`,n+=this.instructions?`instructions="${this.instructions}"`:""),`<ids:entity ${n}>
283
+ </ids:classification>`}async getEntities(t,e={}){var h;const s=[],n=await t.getAllPropertiesOfType(k.IFCCLASSIFICATIONREFERENCE),r=await t.getAllPropertiesOfType(k.IFCCLASSIFICATION),o={...n,...r},a=[];for(const f in o){const I=Number(f),u=await t.getProperties(I);if(!u)continue;const d=(h=u.ReferencedSource)==null?void 0:h.value;if(!d)continue;const E=await t.getProperties(d);!E||!this.evalSystem(E)||!this.evalValue(u)||!this.evalURI(u)||a.push(I)}const l=this.components.get(Ut);for(const f of a){const I=l.getEntitiesWithRelation(t,"HasAssociations",f);for(const u of I){if(u in e)continue;const d=await t.getProperties(u);d&&(e[u]=d,s.push(u))}}return s}async test(t,e){var n;this.testResult=[];for(const r in t){const o=Number(r),a=t[o],l=[],h={guid:(n=a.GlobalId)==null?void 0:n.value,expressID:o,pass:!1,checks:l,cardinality:this.cardinality};this.testResult.push(h);let f=!0;const I=await this.getSystems(e,o),u=I.map(d=>this.getSystemName(d)).filter(d=>d);for(const d of I){if(!this.evalSystem(d,l))continue;if(f=!1,!(this.value&&this.system))break;if(d.type!==k.IFCCLASSIFICATIONREFERENCE)continue;const T=!this.value||this.evalValue(d,l),p=!this.uri||this.evalURI(d,l);if(T&&p)break}f&&this.addCheckResult({parameter:"System",currentValue:u,requiredValue:this.system,pass:this.cardinality==="optional"},l),h.pass=l.every(({pass:d})=>d)}const s=[...this.testResult];return this.testResult=[],s}async processReferencedSource(t,e){var r;const s=(r=e.ReferencedSource)==null?void 0:r.value;if(!s)return null;const n=await t.getProperties(s);return n?(n.type===k.IFCCLASSIFICATIONREFERENCE&&(n.ReferencedSource=await this.processReferencedSource(t,n)),n):null}async getSystems(t,e){var f;const s=[],n=this.components.get(Ut),r=n.getEntityRelations(t,e,"HasAssociations");if(r)for(const I of r){const u=await t.getProperties(I);u&&(u.type===k.IFCCLASSIFICATION&&s.push(u),u.type===k.IFCCLASSIFICATIONREFERENCE&&(u.ReferencedSource=await this.processReferencedSource(t,u),u.ReferencedSource&&s.push(u)))}const o=s.map(I=>{var u,d,E;return I.type===k.IFCCLASSIFICATION?(u=I.Name)==null?void 0:u.value:I.type===k.IFCCLASSIFICATIONREFERENCE?(E=(d=I.ReferencedSource)==null?void 0:d.Name)==null?void 0:E.value:null}).filter(I=>I),a=n.getEntityRelations(t,e,"IsTypedBy");if(!(a&&a[0]))return s;const l=a[0],h=n.getEntityRelations(t,l,"HasAssociations");if(h)for(const I of h){const u=await t.getProperties(I);if(u){if(u.type===k.IFCCLASSIFICATION){if(o.includes((f=u.Name)==null?void 0:f.value))continue;s.push(u)}u.type===k.IFCCLASSIFICATIONREFERENCE&&(u.ReferencedSource=await this.processReferencedSource(t,u),u.ReferencedSource&&s.push(u))}}return s}getSystemName(t){var e,s,n,r;if(t.type===k.IFCCLASSIFICATION)return(e=t.Name)==null?void 0:e.value;if(t.type===k.IFCCLASSIFICATIONREFERENCE){if(((s=t.ReferencedSource)==null?void 0:s.type)===k.IFCCLASSIFICATIONREFERENCE)return this.getSystemName(t.ReferencedSource);if(((n=t.ReferencedSource)==null?void 0:n.type)===k.IFCCLASSIFICATION)return(r=t.ReferencedSource.Name)==null?void 0:r.value}return null}getAllReferenceIdentifications(t){if(t.type!==k.IFCCLASSIFICATIONREFERENCE)return null;const e=[];if(t.Identification&&e.push(t.Identification.value),t.ReferencedSource){const s=this.getAllReferenceIdentifications(t.ReferencedSource);s&&e.push(...s)}return e}evalSystem(t,e){const s=this.getSystemName(t);return this.evalRequirement(s,this.system,"System",e)}evalValue(t,e){if(!this.value)return!0;const s=this.getAllReferenceIdentifications(t);if(!s)return!1;const n=s.find(r=>this.value?this.evalRequirement(r,this.value,"Value"):!1);return e&&this.addCheckResult({parameter:"Value",currentValue:n??null,requiredValue:this.value,pass:!!n},e),!!n}evalURI(t,e){var n;return this.uri?this.evalRequirement((n=t.Location)==null?void 0:n.value,{type:"simple",parameter:this.uri},"URI",e):!0}}class wo extends bi{constructor(t,e){super(t);C(this,"name");C(this,"predefinedType");this.name=e}serialize(t){const e=de("Name",this.name),s=de("Name",this.predefinedType);let n="";return t==="requirement"&&(n+=`cardinality="${this.cardinality}"`,n+=this.instructions?`instructions="${this.instructions}"`:""),`<ids:entity ${n}>
284
284
  ${e}
285
285
  ${s}
286
- </ids:entity>`}async getEntities(t,e={}){const s=Object.entries(_i),n=[];for(const[a]of s)await this.evalName({type:a})&&n.push(Number(a));let r={};for(const a of n){const l=await t.getAllPropertiesOfType(a);l&&(r={...r,...l})}if(!this.predefinedType){for(const a in r)a in e||(e[a]=r[a]);return Object.keys(r).map(Number)}const o=[];for(const a in r){const l=Number(a);if(l in e)continue;const h=r[l];await this.evalPredefinedType(t,h)&&(e[l]=h,o.push(l))}return o}async test(t,e){var s;this.testResult=[];for(const n in t){const r=Number(n),o=t[r],a=[],l={guid:(s=o.GlobalId)==null?void 0:s.value,expressID:r,pass:!1,checks:a,cardinality:this.cardinality};this.testResult.push(l),await this.evalName(o,a),await this.evalPredefinedType(e,o,a),l.pass=a.every(({pass:h})=>h)}return this.testResult}async evalName(t,e){const s=_i[t.type];return this.evalRequirement(s,this.name,"Name",e)}async evalPredefinedType(t,e,s){var l,h,f,I;if(!this.predefinedType)return null;const n=this.components.get(Bt),r=typeof this.predefinedType.parameter=="string"&&this.predefinedType.parameter==="USERDEFINED";let o=(l=e.PredefinedType)==null?void 0:l.value;if(o==="USERDEFINED"&&!r){const d=Object.keys(e).find(E=>/^((?!Predefined).)*Type$/.test(E));o=d?(h=e[d])==null?void 0:h.value:"USERDEFINED"}if(!o){const u=n.getEntityRelations(t,e.expressID,"IsTypedBy");if(u&&u[0]){const d=await t.getProperties(u[0]);if(d&&(o=(f=d.PredefinedType)==null?void 0:f.value,o==="USERDEFINED"&&!r)){const T=Object.keys(d).find(p=>/^((?!Predefined).)*Type$/.test(p));o=T?(I=d[T])==null?void 0:I.value:"USERDEFINED"}}}return this.evalRequirement(o,this.predefinedType,"PredefinedType",s)}}class Do extends bi{constructor(t,e,s){super(t);C(this,"propertySet");C(this,"baseName");C(this,"value");C(this,"dataType");C(this,"uri");C(this,"_unsupportedTypes",[k.IFCCOMPLEXPROPERTY,k.IFCPHYSICALCOMPLEXQUANTITY]);this.propertySet=e,this.baseName=s}serialize(t){const e=de("PropertySet",this.propertySet),s=de("BaseName",this.baseName),n=de("Value",this.value),r=this.dataType?`dataType=${this.dataType}`:"";let o="";return t==="requirement"&&(o+=`cardinality="${this.cardinality}"`,o+=this.uri?`uri=${this.uri}`:"",o+=this.instructions?`instructions="${this.instructions}"`:""),`<ids:property ${r} ${o}>
286
+ </ids:entity>`}async getEntities(t,e={}){const s=Object.entries(_i),n=[];for(const[a]of s)await this.evalName({type:a})&&n.push(Number(a));let r={};for(const a of n){const l=await t.getAllPropertiesOfType(a);l&&(r={...r,...l})}if(!this.predefinedType){for(const a in r)a in e||(e[a]=r[a]);return Object.keys(r).map(Number)}const o=[];for(const a in r){const l=Number(a);if(l in e)continue;const h=r[l];await this.evalPredefinedType(t,h)&&(e[l]=h,o.push(l))}return o}async test(t,e){var s;this.testResult=[];for(const n in t){const r=Number(n),o=t[r],a=[],l={guid:(s=o.GlobalId)==null?void 0:s.value,expressID:r,pass:!1,checks:a,cardinality:this.cardinality};this.testResult.push(l),await this.evalName(o,a),await this.evalPredefinedType(e,o,a),l.pass=a.every(({pass:h})=>h)}return this.testResult}async evalName(t,e){const s=_i[t.type];return this.evalRequirement(s,this.name,"Name",e)}async evalPredefinedType(t,e,s){var l,h,f,I;if(!this.predefinedType)return null;const n=this.components.get(Ut),r=typeof this.predefinedType.parameter=="string"&&this.predefinedType.parameter==="USERDEFINED";let o=(l=e.PredefinedType)==null?void 0:l.value;if(o==="USERDEFINED"&&!r){const d=Object.keys(e).find(E=>/^((?!Predefined).)*Type$/.test(E));o=d?(h=e[d])==null?void 0:h.value:"USERDEFINED"}if(!o){const u=n.getEntityRelations(t,e.expressID,"IsTypedBy");if(u&&u[0]){const d=await t.getProperties(u[0]);if(d&&(o=(f=d.PredefinedType)==null?void 0:f.value,o==="USERDEFINED"&&!r)){const T=Object.keys(d).find(p=>/^((?!Predefined).)*Type$/.test(p));o=T?(I=d[T])==null?void 0:I.value:"USERDEFINED"}}}return this.evalRequirement(o,this.predefinedType,"PredefinedType",s)}}class Do extends bi{constructor(t,e,s){super(t);C(this,"propertySet");C(this,"baseName");C(this,"value");C(this,"dataType");C(this,"uri");C(this,"_unsupportedTypes",[k.IFCCOMPLEXPROPERTY,k.IFCPHYSICALCOMPLEXQUANTITY]);this.propertySet=e,this.baseName=s}serialize(t){const e=de("PropertySet",this.propertySet),s=de("BaseName",this.baseName),n=de("Value",this.value),r=this.dataType?`dataType=${this.dataType}`:"";let o="";return t==="requirement"&&(o+=`cardinality="${this.cardinality}"`,o+=this.uri?`uri=${this.uri}`:"",o+=this.instructions?`instructions="${this.instructions}"`:""),`<ids:property ${r} ${o}>
287
287
  ${e}
288
288
  ${s}
289
289
  ${n}
290
- </ids:property>`}async getEntities(t,e={}){var l,h;let s={};const n=await t.getAllPropertiesOfType(k.IFCPROPERTYSET);s={...s,...n};const r=await t.getAllPropertiesOfType(k.IFCELEMENTQUANTITY);if(s={...s,...r},Object.keys(s).length===0)return[];const o=[];for(const f in s){const I=Number(f),u=await t.getProperties(I);if(!u||!(((l=u.Name)==null?void 0:l.value)===this.propertySet.parameter))continue;let E;if(u.type===k.IFCPROPERTYSET&&(E="HasProperties"),u.type===k.IFCELEMENTQUANTITY&&(E="Quantities"),!!E)for(const T of u[E]){const p=await t.getProperties(T.value);if(!(!p||!(((h=p.Name)==null?void 0:h.value)===this.baseName.parameter))){if(this.value){const F=Object.keys(p).find(S=>S.endsWith("Value"));if(!F||!(p[F].value===this.value.parameter))continue}o.push(I)}}}const a=this.components.get(Bt);for(const f of o){const I=a.getEntitiesWithRelation(t,"IsDefinedBy",f);for(const u of I){if(u in e)continue;const d=await t.getProperties(u);d&&(e[u]=d)}}return[]}async test(t,e){var n;this.testResult=[];for(const r in t){const o=Number(r),a=t[o],l=[],h={guid:(n=a.GlobalId)==null?void 0:n.value,expressID:o,pass:!1,checks:l,cardinality:this.cardinality};this.testResult.push(h);const I=(await this.getPsets(e,o)).filter(u=>{var E;return this.evalRequirement(((E=u.Name)==null?void 0:E.value)??null,this.propertySet,"PropertySet")?(l.push({currentValue:u.Name.value,parameter:"PropertySet",pass:!0,requiredValue:this.propertySet.parameter}),!0):!1});if(I.length===0){l.push({currentValue:null,parameter:"PropertySet",pass:!1,requiredValue:this.propertySet.parameter});continue}for(const u of I){const d=this.getItemsAttrName(u.type);if(!d){l.push({currentValue:null,parameter:"BaseName",pass:!1,requiredValue:this.baseName.parameter});continue}const T=u[d].filter(p=>{var F;return this._unsupportedTypes.includes(p.type)||!this.evalRequirement(((F=p.Name)==null?void 0:F.value)??null,this.baseName,"BaseName")?!1:(l.push({currentValue:p.Name.value,parameter:"BaseName",pass:!0,requiredValue:this.baseName.parameter}),!0)});if(T.length===0){l.push({currentValue:null,parameter:"BaseName",pass:!1,requiredValue:this.baseName.parameter});continue}for(const p of T)this.evalValue(p,l),this.evalDataType(p,l),this.evalURI()}h.pass=l.every(({pass:u})=>u)}const s=[...this.testResult];return this.testResult=[],s}getItemsAttrName(t){let e;return t===k.IFCPROPERTYSET&&(e="HasProperties"),t===k.IFCELEMENTQUANTITY&&(e="Quantities"),e}getValueKey(t){return Object.keys(t).find(e=>e.endsWith("Value")||e.endsWith("Values"))}async getPsets(t,e){const s=[],r=this.components.get(Bt).getEntityRelations(t,e,"IsDefinedBy");if(!r)return s;for(const o of r){const a=await t.getProperties(o);if(!a)continue;const l=this.getItemsAttrName(a.type);if(!l)continue;const h=structuredClone(a),f=[];for(const{value:I}of h[l]){const u=await t.getProperties(I);u&&f.push(u)}h[l]=f,s.push(h)}return s}evalValue(t,e){const s=this.getValueKey(t);if(this.value){if(!s)return e==null||e.push({parameter:"Value",currentValue:null,pass:!1,requiredValue:this.value.parameter}),!1;const r=t[s],o=structuredClone(this.value);if(r.name==="IFCLABEL"&&o.type==="simple"&&(o.parameter=String(o.parameter)),(t.type===k.IFCPROPERTYLISTVALUE||t.type===k.IFCPROPERTYENUMERATEDVALUE)&&Array.isArray(r)){const l=r.map(f=>f.value),h=r.find(f=>o?this.evalRequirement(f.value,o,"Value"):!1);return e==null||e.push({currentValue:l,pass:!!h,parameter:"Value",requiredValue:o.parameter}),!!h}return this.evalRequirement(r.value,o,"Value",e)}if(!s)return!0;const n=t[s];return n.type===3&&n.value===2?(e==null||e.push({parameter:"Value",currentValue:null,pass:!1,requiredValue:null}),!1):n.type===1&&n.value.trim()===""?(e==null||e.push({parameter:"Value",currentValue:"",pass:!1,requiredValue:null}),!1):!0}evalDataType(t,e){if(!this.dataType)return!0;const s=this.getValueKey(t),n=t[s];if((t.type===k.IFCPROPERTYLISTVALUE||t.type===k.IFCPROPERTYENUMERATEDVALUE)&&Array.isArray(n)&&n[0]){const o=n[0].name;return this.evalRequirement(o,{type:"simple",parameter:this.dataType},"DataType",e)}return this.evalRequirement(n.name,{type:"simple",parameter:this.dataType},"DataType",e)}evalURI(){return!0}}class bo{constructor(i,t,e){C(this,"name");C(this,"ifcVersion",new Set);C(this,"identifier",Kt.create());C(this,"description");C(this,"instructions");C(this,"requirementsDescription");C(this,"applicability",new Ie);C(this,"requirements",new Ie);C(this,"components");this.components=i,this.name=t;for(const s of e)this.ifcVersion.add(s)}async test(i){let t=[];if(this.requirements.size===0)return t;const e={};for(const n of this.applicability)await n.getEntities(i,e);return t=await[...this.requirements][0].test(e,i),t}serialize(){const i=`name="${this.name}"`,t=this.identifier?`identifier="${this.identifier}"`:"",e=this.description?`description="${this.description}"`:"",s=this.instructions?`instructions="${this.instructions}"`:"";return`<ids:specification ifcVersion="${[...this.ifcVersion].join(" ")}" ${i} ${t} ${e} ${s}>
290
+ </ids:property>`}async getEntities(t,e={}){var l,h;let s={};const n=await t.getAllPropertiesOfType(k.IFCPROPERTYSET);s={...s,...n};const r=await t.getAllPropertiesOfType(k.IFCELEMENTQUANTITY);if(s={...s,...r},Object.keys(s).length===0)return[];const o=[];for(const f in s){const I=Number(f),u=await t.getProperties(I);if(!u||!(((l=u.Name)==null?void 0:l.value)===this.propertySet.parameter))continue;let E;if(u.type===k.IFCPROPERTYSET&&(E="HasProperties"),u.type===k.IFCELEMENTQUANTITY&&(E="Quantities"),!!E)for(const T of u[E]){const p=await t.getProperties(T.value);if(!(!p||!(((h=p.Name)==null?void 0:h.value)===this.baseName.parameter))){if(this.value){const F=Object.keys(p).find(S=>S.endsWith("Value"));if(!F||!(p[F].value===this.value.parameter))continue}o.push(I)}}}const a=this.components.get(Ut);for(const f of o){const I=a.getEntitiesWithRelation(t,"IsDefinedBy",f);for(const u of I){if(u in e)continue;const d=await t.getProperties(u);d&&(e[u]=d)}}return[]}async test(t,e){var n;this.testResult=[];for(const r in t){const o=Number(r),a=t[o],l=[],h={guid:(n=a.GlobalId)==null?void 0:n.value,expressID:o,pass:!1,checks:l,cardinality:this.cardinality};this.testResult.push(h);const I=(await this.getPsets(e,o)).filter(u=>{var E;return this.evalRequirement(((E=u.Name)==null?void 0:E.value)??null,this.propertySet,"PropertySet")?(l.push({currentValue:u.Name.value,parameter:"PropertySet",pass:!0,requiredValue:this.propertySet.parameter}),!0):!1});if(I.length===0){l.push({currentValue:null,parameter:"PropertySet",pass:!1,requiredValue:this.propertySet.parameter});continue}for(const u of I){const d=this.getItemsAttrName(u.type);if(!d){l.push({currentValue:null,parameter:"BaseName",pass:!1,requiredValue:this.baseName.parameter});continue}const T=u[d].filter(p=>{var F;return this._unsupportedTypes.includes(p.type)||!this.evalRequirement(((F=p.Name)==null?void 0:F.value)??null,this.baseName,"BaseName")?!1:(l.push({currentValue:p.Name.value,parameter:"BaseName",pass:!0,requiredValue:this.baseName.parameter}),!0)});if(T.length===0){l.push({currentValue:null,parameter:"BaseName",pass:!1,requiredValue:this.baseName.parameter});continue}for(const p of T)this.evalValue(p,l),this.evalDataType(p,l),this.evalURI()}h.pass=l.every(({pass:u})=>u)}const s=[...this.testResult];return this.testResult=[],s}getItemsAttrName(t){let e;return t===k.IFCPROPERTYSET&&(e="HasProperties"),t===k.IFCELEMENTQUANTITY&&(e="Quantities"),e}getValueKey(t){return Object.keys(t).find(e=>e.endsWith("Value")||e.endsWith("Values"))}async getPsetProps(t,e,s){const n=structuredClone(e),r=[],o=n[s];if(!o)return r;for(const{value:a}of o){const l=await t.getProperties(a);l&&r.push(l)}return n[s]=r,n}async getTypePsets(t,e){const s=[],r=this.components.get(Ut).getEntityRelations(t,e,"IsTypedBy");if(!(r&&r[0]))return s;const o=await t.getProperties(r[0]);if(!(o&&"HasPropertySets"in o&&Array.isArray(o.HasPropertySets)))return s;for(const{value:a}of o.HasPropertySets){const l=await t.getProperties(a);if(!(l&&"HasProperties"in l&&Array.isArray(l.HasProperties)))continue;const h=await this.getPsetProps(t,l,"HasProperties");s.push(h)}return s}async getPsets(t,e){const s=await this.getTypePsets(t,e),r=this.components.get(Ut).getEntityRelations(t,e,"IsDefinedBy");if(!r)return s;for(const o of r){const a=await t.getProperties(o);if(!a)continue;const l=this.getItemsAttrName(a.type);if(!l)continue;const h=await this.getPsetProps(t,a,l);s.push(h)}return s}evalValue(t,e){const s=this.getValueKey(t);if(this.value){if(!s)return e==null||e.push({parameter:"Value",currentValue:null,pass:!1,requiredValue:this.value.parameter}),!1;const r=t[s],o=structuredClone(this.value);if(r.name==="IFCLABEL"&&o.type==="simple"&&(o.parameter=String(o.parameter)),(t.type===k.IFCPROPERTYLISTVALUE||t.type===k.IFCPROPERTYENUMERATEDVALUE)&&Array.isArray(r)){const l=r.map(f=>f.value),h=r.find(f=>o?this.evalRequirement(f.value,o,"Value"):!1);return e==null||e.push({currentValue:l,pass:!!h,parameter:"Value",requiredValue:o.parameter}),!!h}return this.evalRequirement(r.value,o,"Value",e)}if(!s)return!0;const n=t[s];return n.type===3&&n.value===2?(e==null||e.push({parameter:"Value",currentValue:null,pass:!1,requiredValue:null}),!1):n.type===1&&n.value.trim()===""?(e==null||e.push({parameter:"Value",currentValue:"",pass:!1,requiredValue:null}),!1):!0}evalDataType(t,e){if(!this.dataType)return!0;const s=this.getValueKey(t),n=t[s];if((t.type===k.IFCPROPERTYLISTVALUE||t.type===k.IFCPROPERTYENUMERATEDVALUE)&&Array.isArray(n)&&n[0]){const o=n[0].name;return this.evalRequirement(o,{type:"simple",parameter:this.dataType},"DataType",e)}return this.evalRequirement(n.name,{type:"simple",parameter:this.dataType},"DataType",e)}evalURI(){return!0}}class bo{constructor(i,t,e){C(this,"name");C(this,"ifcVersion",new Set);C(this,"identifier",Kt.create());C(this,"description");C(this,"instructions");C(this,"requirementsDescription");C(this,"applicability",new Ie);C(this,"requirements",new Ie);C(this,"components");this.components=i,this.name=t;for(const s of e)this.ifcVersion.add(s)}async test(i){let t=[];if(this.requirements.size===0)return t;const e={};for(const n of this.applicability)await n.getEntities(i,e);return t=await[...this.requirements][0].test(e,i),t}serialize(){const i=`name="${this.name}"`,t=this.identifier?`identifier="${this.identifier}"`:"",e=this.description?`description="${this.description}"`:"",s=this.instructions?`instructions="${this.instructions}"`:"";return`<ids:specification ifcVersion="${[...this.ifcVersion].join(" ")}" ${i} ${t} ${e} ${s}>
291
291
  <ids:applicability minOccurs="1" maxOccurs="unbounded">
292
292
  ${[...this.applicability].map(r=>r.serialize("applicability"))}
293
293
  </ids:applicability>
@@ -310,4 +310,4 @@ ${i}
310
310
  ${[...s].map(r=>r.serialize()).join(`
311
311
  `)}
312
312
  </ids:specifications>
313
- </ids:ids>`}};C(Ke,"uuid","9f0b9f78-9b2e-481a-b766-2fbfd01f342c"),C(Ke,"xmlParser",new Ao.XMLParser({allowBooleanAttributes:!0,attributeNamePrefix:"",ignoreAttributes:!1,ignoreDeclaration:!0,ignorePiTags:!0,numberParseOptions:{leadingZeros:!0,hex:!0},parseAttributeValue:!0,preserveOrder:!1,processEntities:!1,removeNSPrefix:!0,trimValues:!0}));let wn=Ke;exports.AsyncEvent=fe;exports.BCFTopics=Mt;exports.BCFTopicsConfigManager=So;exports.Base=Vs;exports.BaseCamera=Yr;exports.BaseRenderer=Gr;exports.BaseScene=zr;exports.BaseWorldItem=Ys;exports.BoundingBoxer=Ts;exports.Classifier=ti;exports.Clipper=Is;exports.Comment=Cs;exports.Component=mt;exports.ComponentWithUI=Xa;exports.Components=Li;exports.ConfigManager=Ne;exports.Configurator=ye;exports.CullerRenderer=jr;exports.Cullers=fs;exports.DataMap=Qt;exports.DataSet=Ie;exports.Disposer=Ce;exports.Event=q;exports.Exploder=Ln;exports.FirstPersonMode=eo;exports.FragmentsManager=pt;exports.GeometryTypes=Vn;exports.Grids=Fn;exports.Hider=ms;exports.IDSAttribute=_o;exports.IDSClassification=Mo;exports.IDSEntity=wo;exports.IDSFacet=bi;exports.IDSProperty=Do;exports.IDSSpecification=bo;exports.IDSSpecifications=wn;exports.IfcBasicQuery=wi;exports.IfcCategories=Sc;exports.IfcCategoryMap=_i;exports.IfcElements=oo;exports.IfcFinder=yn;exports.IfcFinderQuery=qt;exports.IfcFragmentSettings=zs;exports.IfcGeometryTiler=Pn;exports.IfcJsonExporter=ds;exports.IfcLoader=Es;exports.IfcPropertiesManager=ps;exports.IfcPropertiesTiler=yo;exports.IfcPropertiesUtils=be;exports.IfcPropertyQuery=Di;exports.IfcRelationsIndexer=Bt;exports.IfcStreamingSettings=Oo;exports.MaterialsUtils=An;exports.MeasurementUtils=Mn;exports.MeshCullerRenderer=qr;exports.MiniMap=Po;exports.MiniMapConfigManager=Lo;exports.MiniMaps=_n;exports.Mouse=Qr;exports.OrbitMode=io;exports.OrthoPerspectiveCamera=ro;exports.PlanMode=so;exports.ProjectionManager=no;exports.PropertiesStreamingSettings=No;exports.Raycasters=ve;exports.ShadowedScene=dc;exports.SimpleCamera=Je;exports.SimpleGrid=to;exports.SimpleGridConfigManager=Jr;exports.SimplePlane=Gs;exports.SimpleRaycaster=Kr;exports.SimpleRenderer=rc;exports.SimpleScene=Xr;exports.SimpleSceneConfigManager=Wr;exports.SimpleWorld=Hr;exports.Topic=Mi;exports.UUID=Kt;exports.VertexPicker=ic;exports.Viewpoint=kn;exports.Viewpoints=Zt;exports.Worlds=Pi;exports.extensionsImporter=Fo;exports.ifcCategoryCase=ao;exports.ifcRelAttrsPosition=fo;exports.ifcRelClassNames=Io;exports.isPointInFrontOfPlane=ec;exports.obbFromPoints=kr;exports.readPixelsAsync=Bn;exports.relToAttributesMap=Sn;
313
+ </ids:ids>`}};C(Ke,"uuid","9f0b9f78-9b2e-481a-b766-2fbfd01f342c"),C(Ke,"xmlParser",new Ao.XMLParser({allowBooleanAttributes:!0,attributeNamePrefix:"",ignoreAttributes:!1,ignoreDeclaration:!0,ignorePiTags:!0,numberParseOptions:{leadingZeros:!0,hex:!0},parseAttributeValue:!0,preserveOrder:!1,processEntities:!1,removeNSPrefix:!0,trimValues:!0}));let wn=Ke;exports.AsyncEvent=fe;exports.BCFTopics=Mt;exports.BCFTopicsConfigManager=So;exports.Base=Vs;exports.BaseCamera=Yr;exports.BaseRenderer=Gr;exports.BaseScene=zr;exports.BaseWorldItem=Ys;exports.BoundingBoxer=Ts;exports.Classifier=ti;exports.Clipper=Is;exports.Comment=Cs;exports.Component=mt;exports.ComponentWithUI=Xa;exports.Components=Li;exports.ConfigManager=Ne;exports.Configurator=ye;exports.CullerRenderer=jr;exports.Cullers=fs;exports.DataMap=Qt;exports.DataSet=Ie;exports.Disposer=Ce;exports.Event=q;exports.Exploder=Ln;exports.FirstPersonMode=eo;exports.FragmentsManager=pt;exports.GeometryTypes=Vn;exports.Grids=Fn;exports.Hider=ms;exports.IDSAttribute=_o;exports.IDSClassification=Mo;exports.IDSEntity=wo;exports.IDSFacet=bi;exports.IDSProperty=Do;exports.IDSSpecification=bo;exports.IDSSpecifications=wn;exports.IfcBasicQuery=wi;exports.IfcCategories=Sc;exports.IfcCategoryMap=_i;exports.IfcElements=oo;exports.IfcFinder=yn;exports.IfcFinderQuery=qt;exports.IfcFragmentSettings=zs;exports.IfcGeometryTiler=Pn;exports.IfcJsonExporter=ds;exports.IfcLoader=Es;exports.IfcPropertiesManager=ps;exports.IfcPropertiesTiler=yo;exports.IfcPropertiesUtils=be;exports.IfcPropertyQuery=Di;exports.IfcRelationsIndexer=Ut;exports.IfcStreamingSettings=Oo;exports.MaterialsUtils=An;exports.MeasurementUtils=Mn;exports.MeshCullerRenderer=qr;exports.MiniMap=Po;exports.MiniMapConfigManager=Lo;exports.MiniMaps=_n;exports.Mouse=Qr;exports.OrbitMode=io;exports.OrthoPerspectiveCamera=ro;exports.PlanMode=so;exports.ProjectionManager=no;exports.PropertiesStreamingSettings=No;exports.Raycasters=ve;exports.ShadowedScene=dc;exports.SimpleCamera=Je;exports.SimpleGrid=to;exports.SimpleGridConfigManager=Jr;exports.SimplePlane=Gs;exports.SimpleRaycaster=Kr;exports.SimpleRenderer=rc;exports.SimpleScene=Xr;exports.SimpleSceneConfigManager=Wr;exports.SimpleWorld=Hr;exports.Topic=Mi;exports.UUID=Kt;exports.VertexPicker=ic;exports.Viewpoint=kn;exports.Viewpoints=Zt;exports.Worlds=Pi;exports.extensionsImporter=Fo;exports.ifcCategoryCase=ao;exports.ifcRelAttrsPosition=fo;exports.ifcRelClassNames=Io;exports.isPointInFrontOfPlane=ec;exports.obbFromPoints=kr;exports.readPixelsAsync=Bn;exports.relToAttributesMap=Sn;