@glyphcss/core 0.0.1 → 0.0.3
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/README.md +2 -2
- package/dist/index.cjs +3 -3
- package/dist/index.d.cts +988 -38
- package/dist/index.d.ts +988 -38
- package/dist/index.js +3 -3
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";var zn=Object.defineProperty;var yo=Object.getOwnPropertyDescriptor;var bo=Object.getOwnPropertyNames;var Po=Object.prototype.hasOwnProperty;var Mo=(e,n)=>{for(var r in n)zn(e,r,{get:n[r],enumerable:!0})},vo=(e,n,r,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of bo(n))!Po.call(e,o)&&o!==r&&zn(e,o,{get:()=>n[o],enumerable:!(t=yo(n,o))||t.enumerable});return e};var Ao=e=>vo(zn({},"__esModule",{value:!0}),e);var Ac={};Mo(Ac,{BASE_TILE:()=>Zt,CAMERA_BACKFACE_CULL_EPS:()=>We,DEFAULT_CAMERA_STATE:()=>Ce,DEFAULT_PROJECTION:()=>Et,LoopOnce:()=>Br,LoopPingPong:()=>Xr,LoopRepeat:()=>jr,QUAT_IDENTITY:()=>Bt,VOXEL_CAMERA_CULL_AXIS_EPS:()=>at,VOXEL_CAMERA_CULL_NORMAL_LIMIT:()=>lt,arrowPolygons:()=>xt,axesHelperPolygons:()=>dt,bakeSolidTextureSampledPolygons:()=>lo,bakeSolidTextureSamples:()=>Tn,buildSceneContext:()=>Ut,cameraCullNormalGroups:()=>mt,cameraCullNormalGroupsFromPolygons:()=>zr,cameraCullNormalKey:()=>ft,cameraCullVisibleSignature:()=>Fr,cameraFacingDepth:()=>ut,clampChannel:()=>xe,computeSceneBbox:()=>jn,computeShapeLighting:()=>Nt,coverPlanarPolygons:()=>sn,createGlyphcssAnimationMixer:()=>Yr,createIsometricCamera:()=>qt,cullInteriorPolygons:()=>be,dedupeOverlappingPolygons:()=>tn,eulerXYZFromQuat:()=>Ht,findOverlappingPolygonDuplicates:()=>Hn,formatColor:()=>Ge,inverseRotateVec3:()=>$t,isAxisAlignedSurfaceNormal:()=>gt,isVoxelCameraCullableNormalGroups:()=>Ur,loadMesh:()=>go,mergePolygons:()=>se,normalFacesCamera:()=>bn,normalizeInvertMultiplier:()=>Qt,normalizePolygons:()=>en,octahedronPolygons:()=>Pt,optimizeMeshPolygons:()=>gn,parseColor:()=>Ae,parseGltf:()=>Sn,parseHexColor:()=>Un,parseMtl:()=>vn,parseObj:()=>Mn,parsePureColor:()=>Qe,parseRgbColor:()=>Fn,parseVox:()=>wn,planePolygons:()=>bt,polygonCssSurfaceNormal:()=>yn,polygonFaces:()=>Ft,polygonFacesCamera:()=>Dr,project:()=>po,quatFromAxisAngle:()=>Xt,quatFromEulerXYZ:()=>Yt,quatMultiply:()=>jt,ringPolygons:()=>ht,ringQuadPolygons:()=>yt,rotateVec3:()=>De,shadeColor:()=>_t,trianglesToFeatureEdges:()=>ho});module.exports=Ao(Ac);var Et="cubic";function Un(e){let n=e.replace("#","");if(n.length===3){let r=parseInt(n[0]+n[0],16),t=parseInt(n[1]+n[1],16),o=parseInt(n[2]+n[2],16);return Number.isNaN(r)||Number.isNaN(t)||Number.isNaN(o)?null:{rgb:[r,t,o],alpha:1}}if(n.length===6){let r=parseInt(n.slice(0,2),16),t=parseInt(n.slice(2,4),16),o=parseInt(n.slice(4,6),16);return Number.isNaN(r)||Number.isNaN(t)||Number.isNaN(o)?null:{rgb:[r,t,o],alpha:1}}return null}function Fn(e){let n=e.match(/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*([\d.]+)\s*)?\)/i);return n?{rgb:[Number(n[1]),Number(n[2]),Number(n[3])],alpha:n[4]?Number(n[4]):1}:null}function Qe(e){if(!e)return null;let n=e.trim(),r=Un(n);return r||Fn(n)}function xe(e){return Math.max(0,Math.min(255,Math.round(e)))}function Ge(e){let[n,r,t]=e.rgb.map(xe);return e.alpha<1?`rgba(${n}, ${r}, ${t}, ${e.alpha})`:`rgb(${n}, ${r}, ${t})`}var Bn={rgb:[204,204,204],alpha:1},Ot=new Map;function Ae(e){if(!e)return null;let n=e.trim(),r=Ot.get(n);if(r)return r;let t=Qe(n);return t?(Ot.set(n,t),t):null}function _t(e,n){let r=Ae(e)??Bn,t=[xe(r.rgb[0]+n),xe(r.rgb[1]+n),xe(r.rgb[2]+n)];return Ge({rgb:t,alpha:r.alpha})}var $n={direction:[0,0,-1],color:"#ffffff",intensity:1},Rt={color:"#ffffff",intensity:.4};function Lt(e){let n=Math.hypot(e[0],e[1],e[2]);return n<1e-12?[0,0,0]:[e[0]/n,e[1]/n,e[2]/n]}function kt(e,n,r){let t=Ae(n)??Bn;return e*(t.rgb[r]/255)}function Nt(e,n,r,t){let o=Ae(n)??Bn,s=Lt(r?.direction??$n.direction),i=r?.color??$n.color,l=Math.max(0,r?.intensity??$n.intensity),c=t?.color??Rt.color,a=Math.max(0,t?.intensity??Rt.intensity),u=Lt(e),f=Math.max(0,-(u[0]*s[0]+u[1]*s[1]+u[2]*s[2])),g=l*f,m=[0,0,0];for(let p=0;p<3;p=p+1){let d=o.rgb[p],y=kt(d,c,p)*a,b=kt(d,i,p)*g;m[p]=xe(y+b)}return Ge({rgb:m,alpha:o.alpha})}var Gt="#cccccc",qe=(e,n)=>[e[0]-n[0],e[1]-n[1],e[2]-n[2]],Dt=(e,n)=>[e[1]*n[2]-e[2]*n[1],e[2]*n[0]-e[0]*n[2],e[0]*n[1]-e[1]*n[0]],zt=(e,n)=>e[0]*n[0]+e[1]*n[1]+e[2]*n[2],Je=e=>Math.hypot(e[0],e[1],e[2]);function Co(e){let n=1/0,r=1/0,t=1/0,o=-1/0,s=-1/0,i=-1/0;for(let u of e)u[0]<n&&(n=u[0]),u[0]>o&&(o=u[0]),u[1]<r&&(r=u[1]),u[1]>s&&(s=u[1]),u[2]<t&&(t=u[2]),u[2]>i&&(i=u[2]);let l=o-n,c=s-r,a=i-t;return Math.hypot(l,c,a)}function Vo(){let e=globalThis;if(e.__POLYCSS_DEV__===!0)return!0;if(e.__POLYCSS_DEV__===!1)return!1;let n=e.process?.env?.NODE_ENV;return typeof n=="string"?n!=="production":!1}function en(e){let n=[],r=[];if(!e||e.length===0)return{polygons:n,warnings:r};for(let t=0;t<e.length;t++){let o=e[t];if(!o||!Array.isArray(o.vertices)){r.push(`Polygon ${t}: missing vertices, dropped`);continue}let s=o.vertices;if(s.length<3){r.push(`Polygon ${t}: ${s.length} vertices (need >= 3), dropped`);continue}let i=qe(s[1],s[0]),l=qe(s[2],s[0]),c=Dt(i,l),a=Je(c);if(s.length===3){if(a<1e-12){Je(i)<1e-12||Je(l)<1e-12?r.push(`Polygon ${t}: zero-area triangle (coincident vertices), dropped`):r.push(`Polygon ${t}: vertices collinear, dropped`);continue}}else if(a<1e-12){r.push(`Polygon ${t}: first 3 vertices collinear, dropped`);continue}let u=[{...o,vertices:s.slice()}];if(s.length>=4){let f=[c[0]/a,c[1]/a,c[2]/a],g=zt(f,s[0]),m=Co(s),p=Math.max(1e-6,m*.001),d=0;for(let y=3;y<s.length;y++){let b=Math.abs(zt(f,s[y])-g);b>d&&(d=b)}if(d>p){let y=[],b=o.uvs&&o.uvs.length===s.length?o.uvs:void 0;for(let M=1;M<s.length-1;M++){let v=[s[0].slice(),s[M].slice(),s[M+1].slice()],P=Dt(qe(v[1],v[0]),qe(v[2],v[0]));if(Je(P)<1e-12)continue;let x={...o,vertices:v};b&&(x.uvs=[b[0].slice(),b[M].slice(),b[M+1].slice()]),y.push(x)}if(y.length===0){r.push(`Polygon ${t}: ${s.length} non-coplanar vertices, fan-triangulation produced no valid triangles, dropped`);continue}r.push(`Polygon ${t}: ${s.length} non-coplanar vertices, fan-triangulated to ${y.length} triangles`),u=y}}for(let f of u){let g=So(f,t,r);g&&n.push(g)}}return{polygons:n,warnings:r}}function So(e,n,r){let t={vertices:e.vertices},o=e.texture;if(typeof o=="string"&&o===""&&(o=void 0),e.color!==void 0&&o!==void 0&&Vo()&&r.push(`Polygon ${n}: color and texture both set; texture wins`),e.color!==void 0&&(Ae(e.color)?t.color=e.color:(r.push(`Polygon ${n}: invalid color "${e.color}", replaced with ${Gt}`),t.color=Gt)),o!==void 0&&(t.texture=o),e.uvs!==void 0&&(!Array.isArray(e.uvs)||e.uvs.length!==e.vertices.length?r.push(`Polygon ${n}: uvs length ${Array.isArray(e.uvs)?e.uvs.length:"?"} != vertices length ${e.vertices.length}, uvs stripped`):t.uvs=e.uvs),e.data!==void 0&&e.data!==null&&typeof e.data=="object"){let s={},i=!1;for(let l of Object.keys(e.data)){let c=e.data[l];typeof c=="string"||typeof c=="number"||typeof c=="boolean"?s[l]=c:(i=!0,r.push(`Polygon ${n}: data["${l}"] has non-primitive value, key dropped`))}Object.keys(s).length>0&&(t.data=s)}return t}function jn(e){if(!e||e.length===0)return{min:[0,0,0],max:[0,0,0]};let n=1/0,r=1/0,t=1/0,o=-1/0,s=-1/0,i=-1/0,l=!1;for(let c of e)if(c?.vertices)for(let a of c.vertices)a&&(l=!0,a[0]<n&&(n=a[0]),a[0]>o&&(o=a[0]),a[1]<r&&(r=a[1]),a[1]>s&&(s=a[1]),a[2]<t&&(t=a[2]),a[2]>i&&(i=a[2]));return l?{min:[n,r,t],max:[o,s,i]}:{min:[0,0,0],max:[0,0,0]}}function Ut(e){let n=e.polygons??[],r,t;if(e.skipNormalize)r=n,t=[];else{let l=en(n);r=l.polygons,t=l.warnings}let o=jn(r),s=[o.max[0]-o.min[0],o.max[1]-o.min[1],o.max[2]-o.min[2]];return{context:{polygons:r,sceneBbox:o,warnings:t},dimensions:{sceneBbox:o,size:s},warnings:t}}function Ft(e){return!e.vertices||e.vertices.length<3?[]:[{v:e.vertices.map(n=>[n[0],n[1],n[2]]),color:e.color}]}function De(e,n,r,t){let o=n*Math.PI/180,s=r*Math.PI/180,i=t*Math.PI/180,[l,c,a]=e;if(i!==0){let u=Math.cos(i),f=Math.sin(i);[l,c]=[l*u-c*f,l*f+c*u]}if(s!==0){let u=Math.cos(s),f=Math.sin(s);[l,a]=[l*u+a*f,-l*f+a*u]}if(o!==0){let u=Math.cos(o),f=Math.sin(o);[c,a]=[c*u-a*f,c*f+a*u]}return[l,c,a]}function $t(e,n){let r=-n[0]*Math.PI/180,t=-n[1]*Math.PI/180,o=-n[2]*Math.PI/180,[s,i,l]=e;if(r!==0){let c=Math.cos(r),a=Math.sin(r);[i,l]=[i*c-l*a,i*a+l*c]}if(t!==0){let c=Math.cos(t),a=Math.sin(t);[s,l]=[s*c+l*a,-s*a+l*c]}if(o!==0){let c=Math.cos(o),a=Math.sin(o);[s,i]=[s*c-i*a,s*a+i*c]}return[s,i,l]}var Xn=Math.PI/180,ze=180/Math.PI,Bt=[1,0,0,0];function jt(e,n){let[r,t,o,s]=e,[i,l,c,a]=n;return[r*i-t*l-o*c-s*a,r*l+t*i+o*a-s*c,r*c-t*a+o*i+s*l,r*a+t*c-o*l+s*i]}function Xt(e,n){let r=n*.5,t=Math.sin(r);return[Math.cos(r),e[0]*t,e[1]*t,e[2]*t]}function Yt(e){let n=e[0]*Xn,r=e[1]*Xn,t=e[2]*Xn,o=Math.cos(n*.5),s=Math.sin(n*.5),i=Math.cos(r*.5),l=Math.sin(r*.5),c=Math.cos(t*.5),a=Math.sin(t*.5);return[o*i*c-s*l*a,s*i*c+o*l*a,o*l*c-s*i*a,o*i*a+s*l*c]}function Ht(e){let[n,r,t,o]=e,s=2*(r*o+n*t),i=2*(t*o-n*r),l=1-2*(r*r+t*t),c=2*(r*t-n*o),a=1-2*(t*t+o*o),u=Math.max(-1,Math.min(1,s)),f=Math.asin(u);return Math.abs(u)<.99999?[Math.atan2(-i,l)*ze,f*ze,Math.atan2(-c,a)*ze]:[Math.atan2(2*(t*o+n*r),1-2*(r*r+o*o))*ze,f*ze,0]}var Zt=50;function Qt(e){if(typeof e=="number")return e===0?void 0:e<0?-1:1;if(typeof e=="boolean")return e?-1:1}var Ce={target:[0,0,0],rotX:65,rotY:45,zoom:.65,distance:0},Kt=100,Wt=1e4,Oe=e=>Math.round(e*Kt)/Kt,To=e=>Math.round(e*Wt)/Wt;function qt(e={}){let n={target:e.target??[...Ce.target],rotX:e.rotX??Ce.rotX,rotY:e.rotY??Ce.rotY,zoom:e.zoom??Ce.zoom,distance:e.distance??Ce.distance};function r(o){o.target!==void 0&&(n.target=[Oe(o.target[0]),Oe(o.target[1]),Oe(o.target[2])]),o.rotX!==void 0&&(n.rotX=Oe(o.rotX)),o.rotY!==void 0&&(n.rotY=Oe(o.rotY)),o.zoom!==void 0&&(n.zoom=To(o.zoom)),o.distance!==void 0&&(n.distance=Oe(o.distance))}function t(o={}){let i=(o.cols??0)*50,l=(o.rows??0)*50,[c,a,u]=n.target,f=a*50,g=c*50,m=u*50;return{transform:`${n.distance!==0?` translateZ(${-n.distance}px)`:""}scale(${n.zoom}) rotateX(${n.rotX}deg) rotate(${n.rotY}deg) translate3d(${-f}px, ${-g}px, ${-m}px)`,width:`${i}px`,height:`${l}px`}}return{state:n,update:r,getStyle:t}}var ye=(e,n)=>[e[0]-n[0],e[1]-n[1],e[2]-n[2]],nn=(e,n)=>[e[1]*n[2]-e[2]*n[1],e[2]*n[0]-e[0]*n[2],e[0]*n[1]-e[1]*n[0]],Ue=(e,n)=>e[0]*n[0]+e[1]*n[1]+e[2]*n[2],Yn=e=>Math.hypot(e[0],e[1],e[2]),he=(e,n)=>e[0]===n[0]&&e[1]===n[1]&&e[2]===n[2];function wo(e,n){let r=`${e[0]},${e[1]},${e[2]}`,t=`${n[0]},${n[1]},${n[2]}`;return r<t?`${r}|${t}`:`${t}|${r}`}function er(e){if(e.length<3)return null;let n=ye(e[1],e[0]),r=ye(e[2],e[0]),t=nn(n,r),o=Yn(t);if(o<1e-12)return null;let s=[t[0]/o,t[1]/o,t[2]/o],i=Ue(s,e[0]);return{normal:s,d:i}}function Io(e,n){return Ue(e.normal,n.normal)<1-.001?!1:Math.abs(e.d-n.d)<.05}function Eo(e,n){return Ue(e.normal,n.normal)<1-.001?!1:Math.abs(e.d-n.d)<.001}function Oo(e,n,r,t){let o=e.vertices.findIndex(V=>he(V,r)),s=e.vertices.findIndex(V=>he(V,t)),i=n.vertices.findIndex(V=>he(V,r)),l=n.vertices.findIndex(V=>he(V,t));if(o<0||s<0||i<0||l<0)return null;let c=e.vertices.length,a=n.vertices.length,u=(o+1)%c===s,f=(i+1)%a===l;if(u===f)return null;let g=u?s:o,m=u?o:s,p=f?l:i,d=f?i:l,y=!!(e.uvs&&n.uvs),b=[],M=y?[]:void 0,v=g;for(;b.push(e.vertices[v]),M&&M.push(e.uvs[v]),v!==m;)v=(v+1)%c;for(v=p;b.push(n.vertices[v]),M&&M.push(n.uvs[v]),v!==d;)v=(v+1)%a;let P=[],x=M?[]:void 0;for(let V=0;V<b.length;V++)(P.length===0||!he(b[V],P[P.length-1]))&&(P.push(b[V]),x&&M&&x.push(M[V]));if(P.length>1&&he(P[0],P[P.length-1])&&(P.pop(),x?.pop()),y)return Jt(P,x);let A=[],T=x?[]:void 0;for(let V=0;V<P.length;V++){let w=P[(V-1+P.length)%P.length],O=P[V],L=P[(V+1)%P.length],U=nn(ye(O,w),ye(L,w));Yn(U)>1e-9&&(A.push(O),T&&x&&T.push(x[V]))}return A.length<3?null:Jt(A,T)}function Ro(e,n){let r=e.length,t=0;for(let o=0;o<r;o++){let s=e[o],i=e[(o+1)%r],l=e[(o+2)%r],c=ye(i,s),a=ye(l,i),u=Ue(nn(c,a),n);if(Math.abs(u)<1e-9)continue;let f=u>0?1:-1;if(t===0)t=f;else if(f!==t)return!1}return!0}function Lo(e,n){if(e.length<3)return!1;let r=er(e);if(!r)return!1;for(let t of e)if(Math.abs(Ue(r.normal,t)-r.d)>n)return!1;return!0}function ko(e){return e.map(n=>({vertices:n.vertices.map(r=>[...r]),uvs:n.uvs.map(r=>[...r])}))}function _o(e,n){let r=[];for(let t=1;t<e.length-1;t++)r.push({vertices:[[...e[0]],[...e[t]],[...e[t+1]]],uvs:[[...n[0]],[...n[t]],[...n[t+1]]]});return r}function Jt(e,n){for(let r=0;r<e.length;r++){let t=e[r],o=e[(r+1)%e.length],s=e[(r+2)%e.length];if(!(Yn(nn(ye(o,t),ye(s,t)))<=1e-9))return r===0?{vertices:e,uvs:n}:{vertices:[...e.slice(r),...e.slice(0,r)],uvs:n?[...n.slice(r),...n.slice(0,r)]:void 0}}return{vertices:e,uvs:n}}function se(e){let n=[],r=[];for(let o of e??[]){if(!o||!o.vertices||o.vertices.length<3){o&&n.push(o);continue}let s=o.vertices.map(a=>[a[0],a[1],a[2]]),i=er(s);if(!i){n.push(o);continue}let l=o.texture&&o.uvs&&o.uvs.length===s.length?o.uvs.map(a=>[a[0],a[1]]):void 0,c=o.texture&&l?o.textureTriangles?.length?ko(o.textureTriangles):_o(s,l):void 0;r.push({vertices:s,uvs:l,color:o.color??"#cccccc",texture:o.texture,textureTriangles:c,normal:i.normal,d:i.d,alive:!0,data:o.data})}let t=()=>{let o=new Map;for(let l=0;l<r.length;l++){let c=r[l];if(!c.alive)continue;let a=c.vertices.length;for(let u=0;u<a;u++){let f=c.vertices[u],g=c.vertices[(u+1)%a],m=wo(f,g),p=o.get(m);p||(p=[],o.set(m,p)),p.push(l)}}let s=!1,i=(l,c)=>{for(let a=0;a<l.vertices.length;a++){let u=l.vertices[a],f=l.vertices[(a+1)%l.vertices.length];for(let g=0;g<c.vertices.length;g++){let m=c.vertices[g],p=c.vertices[(g+1)%c.vertices.length];if(he(u,p)&&he(f,m))return[u,f]}}return null};for(let[,l]of o){if(l.length<2)continue;let[c,a]=l;if(c===a)continue;let u=r[c],f=r[a];if(!u.alive||!f.alive||u.color!==f.color||u.texture!==f.texture)continue;let g=!!(u.texture||f.texture);if(g&&(!u.textureTriangles||!f.textureTriangles)||!!u.uvs!=!!f.uvs||(g?!Eo(u,f):!Io(u,f)))continue;let m=i(u,f);if(!m)continue;let[p,d]=m,y=Oo(u,f,p,d);y&&Lo(y.vertices,.001)&&Ro(y.vertices,u.normal)&&(u.vertices=y.vertices,u.uvs=y.uvs,u.textureTriangles=g?[...u.textureTriangles??[],...f.textureTriangles??[]]:void 0,f.alive=!1,s=!0)}return s};for(;t(););for(let o of r){if(!o.alive)continue;let s={vertices:o.vertices,color:o.color};o.texture&&(s.texture=o.texture),o.uvs&&(s.uvs=o.uvs),o.textureTriangles?.length&&(s.textureTriangles=o.textureTriangles),o.data&&(s.data=o.data),n.push(s)}return n}var No=(e,n)=>[e[0]-n[0],e[1]-n[1],e[2]-n[2]],Go=(e,n)=>[e[1]*n[2]-e[2]*n[1],e[2]*n[0]-e[0]*n[2],e[0]*n[1]-e[1]*n[0]],fe=(e,n)=>e[0]*n[0]+e[1]*n[1]+e[2]*n[2];function Do(e,n){let r=e.vertices;if(!r||r.length<3)return null;let t=0,o=0,s=0;for(let d=0;d<r.length;d++){let y=r[d],b=r[(d+1)%r.length];t+=(y[1]-b[1])*(y[2]+b[2]),o+=(y[2]-b[2])*(y[0]+b[0]),s+=(y[0]-b[0])*(y[1]+b[1])}let i=Math.hypot(t,o,s);if(i<1e-12)return null;let l=[t/i,o/i,s/i],c=0,a=0,u=0;for(let d of r)c+=d[0],a+=d[1],u+=d[2];let f=1/r.length,g=[c*f,a*f,u*f],m=fe(l,g),p=i*.5;return{index:n,polygon:e,normal:l,d:m,centroid:g,area:p,local2D:null,bbox2D:null,basis:null}}function zo(e){let n=Math.abs(e[0])<.9?[1,0,0]:[0,1,0],r=n[0]-e[0]*fe(n,e),t=n[1]-e[1]*fe(n,e),o=n[2]-e[2]*fe(n,e),s=Math.hypot(r,t,o);r/=s,t/=s,o/=s;let i=[r,t,o],l=Go(e,i);return{u:i,v:l}}function Uo(e){if(e.local2D)return;let n=zo(e.normal),r=[],t=1/0,o=1/0,s=-1/0,i=-1/0;for(let l of e.polygon.vertices){let c=fe(l,n.u),a=fe(l,n.v);r.push([c,a]),c<t&&(t=c),c>s&&(s=c),a<o&&(o=a),a>i&&(i=a)}e.local2D=r,e.bbox2D={min:[t,o],max:[s,i]},e.basis=n}function Fo(e,n){let r=[],t=1/0,o=1/0,s=-1/0,i=-1/0;for(let l of e.vertices){let c=fe(l,n.u),a=fe(l,n.v);r.push([c,a]),c<t&&(t=c),c>s&&(s=c),a<o&&(o=a),a>i&&(i=a)}return{local2D:r,bbox2D:{min:[t,o],max:[s,i]}}}function $o(e,n){return e.max[0]>=n.min[0]&&e.min[0]<=n.max[0]&&e.max[1]>=n.min[1]&&e.min[1]<=n.max[1]}function nr(e,n){let r=!1;for(let t=0,o=n.length-1;t<n.length;o=t++){let s=n[t],i=n[o];s[1]>e[1]!=i[1]>e[1]&&e[0]<(i[0]-s[0])*(e[1]-s[1])/(i[1]-s[1]+1e-30)+s[0]&&(r=!r)}return r}function tr(e){let n=0,r=0;for(let t of e)n+=t[0],r+=t[1];return[n/e.length,r/e.length]}function Bo(e,n){let r=tr(e),t=tr(n),o=1e-4,s=0;for(let a of e){let u=[a[0]+(r[0]-a[0])*o,a[1]+(r[1]-a[1])*o];nr(u,n)&&s++}let i=0;for(let a of n){let u=[a[0]+(t[0]-a[0])*o,a[1]+(t[1]-a[1])*o];nr(u,e)&&i++}let l=s/e.length,c=i/n.length;return Math.max(l,c)}function jo(e,n){let r=e.normal[0],t=e.normal[1],o=e.normal[2],s=Math.abs(r),i=Math.abs(t),l=Math.abs(o),c=r;i>s&&i>l?c=t:l>s&&l>i&&(c=o),c<0&&(r=-r,t=-t,o=-o);let a=Math.round(r/.05),u=Math.round(t/.05),f=Math.round(o/.05),g=e.d*(e.normal[0]===r&&e.normal[1]===t&&e.normal[2]===o?1:-1),m=Math.round(g/(n*2));return`${a},${u},${f}|${m}`}function Xo(e,n,r,t){let o=fe(e.normal,n.normal);if(Math.abs(o)<1-r)return!1;let s=o>0?1:-1;return Math.abs(e.d-s*n.d)<t}function rr(e,n){let r=No(n,e.centroid);return fe(e.normal,r)>0}function Hn(e,n){if(!e||e.length<2)return new Set;let r=n?.normalTolerance??.001,t=n?.distanceTolerance??.05,o=n?.overlapFraction??.7,s=[];for(let m=0;m<e.length;m++){let p=Do(e[m],m);p&&s.push(p)}if(s.length<2)return new Set;let i=0,l=0,c=0,a=0;for(let m of s)i+=m.centroid[0]*m.area,l+=m.centroid[1]*m.area,c+=m.centroid[2]*m.area,a+=m.area;let u=a>0?[i/a,l/a,c/a]:[0,0,0],f=new Map;for(let m of s){let p=jo(m,t),d=f.get(p);d||(d=[],f.set(p,d)),d.push(m)}let g=new Set;for(let m of f.values())if(!(m.length<2))for(let p=0;p<m.length;p++){let d=m[p];if(!g.has(d.index))for(let y=p+1;y<m.length;y++){let b=m[y];if(g.has(b.index)||!Xo(d,b,r,t))continue;Uo(d);let M=Fo(b.polygon,d.basis);if(!$o(d.bbox2D,M.bbox2D)||Bo(d.local2D,M.local2D)<o)continue;let P=rr(d,u),x=rr(b,u),A;if(P&&!x?A=d:x&&!P?A=b:A=d.area<b.area?d:b,g.add(A.index),A===d)break}}return g}function tn(e,n){if(!e||e.length<2)return e??[];let r=Hn(e,n);if(r.size===0)return e;let t=[];for(let o=0;o<e.length;o++)r.has(o)||t.push(e[o]);return t}var Yo=4,Ho=8,Ko=.001,Wo=1e-9,Zo=1e6,Qo=1e6,Ve=(e,n)=>[e[0]-n[0],e[1]-n[1],e[2]-n[2]],Zn=(e,n)=>[e[0]+n[0],e[1]+n[1],e[2]+n[2]],Be=(e,n)=>[e[0]*n,e[1]*n,e[2]*n],Se=(e,n)=>e[0]*n[0]+e[1]*n[1]+e[2]*n[2],ar=(e,n)=>[e[1]*n[2]-e[2]*n[1],e[2]*n[0]-e[0]*n[2],e[0]*n[1]-e[1]*n[0]],lr=e=>Math.hypot(e[0],e[1],e[2]);function je(e){let n=lr(e);return n<=Wo?null:[e[0]/n,e[1]/n,e[2]/n]}function $e(e,n){return Math.round(e*n)/n}function le(e){return $e(e,Zo)}function Kn(e){return $e(e,Qo)}function Wn(e,n){return Math.abs(e[0]-n[0])<=1e-7&&Math.abs(e[1]-n[1])<=1e-7}function ge(e){return`${le(e[0])},${le(e[1])}`}function qo(e){let n=ge(e.a),r=ge(e.b);return n<r?`${n}|${r}`:`${r}|${n}`}function Re(e){return`${e[0]},${e[1]},${e[2]}`}function ur(e,n){let r=Re(e),t=Re(n);return r<t?`${r}|${t}`:`${t}|${r}`}function Qn(e){return e?Object.keys(e).sort().map(n=>`${n}:${String(e[n])}`).join("|"):""}function or(e){return[e.color??"#cccccc",e.texture??"",e.uvs?"uv":"plain",Qn(e.data)].join("|")}function fr(e){let n=e.vertices;if(!n||n.length<3)return null;let r=n[0],t=[0,0,0];for(let s=1;s<n.length-1;s++)t=Zn(t,ar(Ve(n[s],r),Ve(n[s+1],r)));let o=je(t);return o?{normal:o,d:Se(o,r)}:null}function Jo(e,n,r){return Se(e.normal,n.normal)>1-r&&Math.abs(e.d-n.d)<=r}function es(e){return!e.texture&&!e.uvs&&!e.textureTriangles}function ns(e,n){let r=n[e[0]]?.data,t=Qn(r);for(let o of e)if(Qn(n[o].data)!==t)return;return r?{...r}:void 0}function ts(e,n){let r=e.map(c=>es(c)?fr(c):null),t=r.map(Boolean),o=new Map;for(let c=0;c<e.length;c++){if(!r[c])continue;let a=e[c].vertices;for(let u=0;u<a.length;u++){let f=ur(a[u],a[(u+1)%a.length]),g=o.get(f),m={polygon:c,edge:u};g?g.push(m):o.set(f,[m])}}let s=e.map(()=>new Set);for(let c of o.values())if(!(c.length<2))for(let a=0;a<c.length;a++)for(let u=a+1;u<c.length;u++){let f=c[a].polygon,g=c[u].polygon,m=r[f],p=r[g];!m||!p||or(e[f])===or(e[g])&&Jo(m,p,n)&&(s[f].add(g),s[g].add(f))}let i=new Set,l=[];for(let c=0;c<e.length;c++){if(!t[c]||i.has(c))continue;let a=[],u=[c];for(i.add(c);u.length>0;){let f=u.shift();a.push(f);for(let g of s[f])i.has(g)||(i.add(g),u.push(g))}l.push(a)}return{groups:l}}function rs(e,n){let r=new Set(e),t=new Map;for(let s of e){let i=n[s].vertices;for(let l=0;l<i.length;l++){let c=ur(i[l],i[(l+1)%i.length]),a=t.get(c),u={polygon:s,edge:l};a?a.push(u):t.set(c,[u])}}let o=[];for(let s of t.values()){let i=s.filter(l=>r.has(l.polygon));if(i.length===1){let l=i[0],c=n[l.polygon].vertices;o.push({a:c[l.edge],b:c[(l.edge+1)%c.length]})}else if(i.length!==2)return null}return o}function os(e){let n=new Map;for(let r of e)n.set(Re(r.a),(n.get(Re(r.a))??0)+1),n.set(Re(r.b),(n.get(Re(r.b))??0)+1);for(let r of n.values())if(r%2!==0)return!1;return!0}function mr(e){let n=[e[0],e[1],e[2]],r=Math.abs(n[0])>=Math.abs(n[1])&&Math.abs(n[0])>=Math.abs(n[2])?0:Math.abs(n[1])>=Math.abs(n[2])?1:2;return n[r]<0?[-n[0],-n[1],-n[2]]:n}function ss(e){let n=mr(e);return`${$e(n[0],1e3)},${$e(n[1],1e3)},${$e(n[2],1e3)}`}function is(e){let n=Math.abs(e[0])<.9?[1,0,0]:[0,1,0],r=Ve(n,Be(e,Se(n,e)));return je(r)??[1,0,0]}function cs(e,n,r){let t=new Map;for(let s of e){let i=Ve(s.b,s.a),l=Ve(i,Be(n,Se(i,n))),c=je(l);if(!c)continue;let a=mr(c),u=ss(a),f=lr(l),g=t.get(u);g?g.weight+=f:t.set(u,{axis:a,weight:f})}let o=[...t.values()].sort((s,i)=>i.weight-s.weight).slice(0,r).map(s=>s.axis);return o.length===0&&o.push(is(n)),o}function sr(e,n,r,t){let o=Ve(e,n);return[le(Se(o,r)),le(Se(o,t))]}function as(e){let n=[...e].sort((t,o)=>t-o),r=[];for(let t of n)(r.length===0||Math.abs(t-r[r.length-1])>1e-7)&&r.push(t);return r}function Fe(e,n){let[r,t]=e.a,[o,s]=e.b,i=(n-r)/(o-r);return le(t+(s-t)*i)}function qn(e){let n=[];for(let t of e)(n.length===0||Math.abs(t[0]-n[n.length-1][0])>1e-7||Math.abs(t[1]-n[n.length-1][1])>1e-7)&&n.push(t);n.length>1&&Math.abs(n[0][0]-n[n.length-1][0])<=1e-7&&Math.abs(n[0][1]-n[n.length-1][1])<=1e-7&&n.pop();let r=[];for(let t=0;t<n.length;t++){let o=n[(t-1+n.length)%n.length],s=n[t],i=n[(t+1)%n.length],l=(s[0]-o[0])*(i[1]-s[1])-(s[1]-o[1])*(i[0]-s[0]);Math.abs(l)>1e-8&&r.push(s)}return r}function on(e){let n=0;for(let r=0;r<e.length;r++){let t=e[r],o=e[(r+1)%e.length];n+=t[0]*o[1]-o[0]*t[1]}return n/2}function ir(e){let n=1/0,r=1/0,t=-1/0,o=-1/0;for(let[s,i]of e)n=Math.min(n,s),r=Math.min(r,i),t=Math.max(t,s),o=Math.max(o,i);return{minX:n,minY:r,maxX:t,maxY:o}}function ls(e,n){let r=ir(e),t=ir(n);return!(r.maxX<t.minX-1e-7||t.maxX<r.minX-1e-7||r.maxY<t.minY-1e-7||t.maxY<r.minY-1e-7)}function rn(e){return Math.abs(on(e))}function us(e){if(e.length<3)return!1;let n=0;for(let r=0;r<e.length;r++){let t=e[r],o=e[(r+1)%e.length],s=e[(r+2)%e.length],i=(o[0]-t[0])*(s[1]-o[1])-(o[1]-t[1])*(s[0]-o[0]);if(Math.abs(i)<=1e-8)continue;let l=i>0?1:-1;if(n===0)n=l;else if(n!==l)return!1}return!0}function fs(e,n,r){let t=r[0]-n[0],o=r[1]-n[1],s=e[0]-n[0],i=e[1]-n[1],l=t*i-o*s,c=Math.hypot(t,o);if(c<=1e-9||Math.abs(l)>Math.max(1e-8,c*1e-8))return!1;let a=s*t+i*o;return a>=-1e-8&&a<=t*t+o*o+1e-8}function ms(e,n,r){let t=r[0]-n[0],o=r[1]-n[1],s=t*t+o*o;return s<=1e-12?0:((e[0]-n[0])*t+(e[1]-n[1])*o)/s}function cr(e,n){let r=[];for(let t=0;t<e.length;t++){let o=e[t],s=e[(t+1)%e.length],i=[{t:0,point:o},{t:1,point:s}];for(let c of n)Wn(c,o)||Wn(c,s)||fs(c,o,s)&&i.push({t:ms(c,o,s),point:c});i.sort((c,a)=>c.t-a.t);let l=[];for(let c of i)l.some(a=>Math.abs(a.t-c.t)<=1e-8||Wn(a.point,c.point))||l.push(c);for(let c=0;c<l.length-1;c++){let a=l[c].point,u=l[c+1].point;Math.hypot(u[0]-a[0],u[1]-a[1])<=1e-8||r.push({a:[le(a[0]),le(a[1])],b:[le(u[0]),le(u[1])]})}}return r}function gs(e,n){if(!ls(e,n))return null;let r=[...cr(e,n),...cr(n,e)],t=new Map;for(let d of r){let y=qo(d),b=t.get(y);b?b.push(d):t.set(y,[d])}let o=!1,s=[];for(let d of t.values()){if(d.length===1){s.push(d[0]);continue}o=!0;let y=d.filter(M=>ge(M.a)<ge(M.b)).length,b=d.length-y;if(y!==b)return null}if(!o||s.length<3)return null;let i=new Map;for(let d of s){let y=ge(d.a);if(i.has(y))return null;i.set(y,d)}let l=s[0],c=ge(l.a),a=[],u=new Set,f=c;for(let d=0;d<=s.length;d++){let y=i.get(f);if(!y)return null;let b=`${ge(y.a)}>${ge(y.b)}`;if(u.has(b))return null;if(u.add(b),a.push(y.a),f=ge(y.b),f===c)break}if(f!==c||u.size!==s.length)return null;let g=qn(a);if(g.length<3||!us(g))return null;let m=rn(g),p=rn(e)+rn(n);return Math.abs(m-p)>Math.max(1e-5,p*1e-5)?null:on(g)>=0?g:[...g].reverse()}function ps(e){let n=e.map(qn).filter(t=>t.length>=3&&rn(t)>1e-8),r=!0;for(;r;){r=!1;for(let t=0;t<n.length;t++){for(let o=t+1;o<n.length;o++){let s=gs(n[t],n[o]);if(s){n[t]=s,n.splice(o,1),r=!0;break}}if(r)break}}return n}function ds(e,n,r){let t=new Map;return o=>{let s=le(o[0]),i=le(o[1]),l=`${s},${i}`,c=t.get(l);if(c)return[c[0],c[1],c[2]];let a=Zn(e,Zn(Be(n,s),Be(r,i))),u=[Kn(a[0]),Kn(a[1]),Kn(a[2])];return t.set(l,u),[u[0],u[1],u[2]]}}function xs(e,n,r,t,o){let s=r[0]?.a;if(!s)return null;let i=je(Ve(o,Be(t,Se(o,t))));if(!i)return null;let l=je(ar(t,i));if(!l)return null;let c=[],a=[];for(let y of r){let b=sr(y.a,s,i,l),M=sr(y.b,s,i,l);Math.hypot(b[0]-M[0],b[1]-M[1])<=1e-7||(c.push({a:b,b:M}),a.push(b[0],M[0]))}let u=as(a);if(c.length<3||u.length<2)return null;let f=n[e[0]].color,g=ns(e,n),m=[];for(let y=0;y<u.length-1;y++){let b=u[y],M=u[y+1];if(M-b<=1e-7)continue;let v=(b+M)/2,P=c.filter(x=>{let A=Math.min(x.a[0],x.b[0]),T=Math.max(x.a[0],x.b[0]);return A<v&&v<T&&Math.abs(x.a[0]-x.b[0])>1e-7}).map(x=>({segment:x,yMid:Fe(x,v)})).sort((x,A)=>x.yMid-A.yMid);if(P.length!==0){if(P.length%2!==0)return null;for(let x=0;x<P.length;x+=2){let A=P[x].segment,T=P[x+1].segment,V=Fe(A,b),w=Fe(A,M),O=Fe(T,b),L=Fe(T,M),U=qn([[b,V],[M,w],[M,L],[b,O]]);if(U.length<3||Math.abs(on(U))<=1e-8)continue;let R=on(U)>0?U:[...U].reverse();m.push(R)}}}if(m.length===0)return null;let p=ds(s,i,l),d=ps(m).map(y=>({vertices:y.map(p),...f?{color:f}:{},...g?{data:g}:{}}));return se(d)}function hs(e,n,r){let t=rs(e,n);if(!t||t.length<3||!os(t))return null;let o=fr(n[e[0]]);if(!o)return null;let s=null;for(let i of cs(t,o.normal,r)){let l=xs(e,n,t,o.normal,i);l&&(!s||l.length<s.length)&&(s=l)}return!s||s.length>=e.length?null:s}function sn(e,n={}){let r=n.minGroupPolygons??Yo,t=n.maxCandidateAxes??Ho,o=n.planeEpsilon??Ko,s=e??[];if(s.length<r)return s;let{groups:i}=ts(s,o);if(i.length===0)return s;let l=new Map,c=new Set;for(let u of i){if(u.length<r)continue;let f=hs(u,s,t);if(f){l.set(u[0],f);for(let g of u)c.add(g)}}if(l.size===0)return s;let a=[];for(let u=0;u<s.length;u++){let f=l.get(u);if(f){a.push(...f);continue}c.has(u)||a.push(s[u])}return a}function ys(e){let n=e.vertices;if(!n||n.length<3)return null;let r=0,t=0,o=0;for(let[R,D,k]of n)r+=R,t+=D,o+=k;let s=1/n.length;r*=s,t*=s,o*=s;let i=n[0],l=n[1],c=n[2],a=l[0]-i[0],u=l[1]-i[1],f=l[2]-i[2],g=c[0]-i[0],m=c[1]-i[1],p=c[2]-i[2],d=u*p-f*m,y=f*g-a*p,b=a*m-u*g,M=Math.hypot(d,y,b);if(M<1e-9)return null;d/=M,y/=M,b/=M;let v=n.length-2,P=new Float64Array(v*9),x=0;for(let R=1;R<n.length-1;R++){let D=n[0],k=n[R],_=n[R+1];P[x++]=D[0],P[x++]=D[1],P[x++]=D[2],P[x++]=k[0],P[x++]=k[1],P[x++]=k[2],P[x++]=_[0],P[x++]=_[1],P[x++]=_[2]}let A=0,T=1/0,V=1/0,w=1/0,O=-1/0,L=-1/0,U=-1/0;for(let[R,D,k]of n){let _=R-r,E=D-t,C=k-o,h=_*_+E*E+C*C;h>A&&(A=h),R<T&&(T=R),R>O&&(O=R),D<V&&(V=D),D>L&&(L=D),k<w&&(w=k),k>U&&(U=k)}return{centroid:[r,t,o],normal:[d,y,b],vertices:n,triFlat:P,bcx:r,bcy:t,bcz:o,br2:A,minX:T,minY:V,minZ:w,maxX:O,maxY:L,maxZ:U}}function bs(e,n,r,t,o,s,i,l){let c=i[l],a=i[l+1],u=i[l+2],f=i[l+3]-c,g=i[l+4]-a,m=i[l+5]-u,p=i[l+6]-c,d=i[l+7]-a,y=i[l+8]-u,b=o*y-s*d,M=s*p-t*y,v=t*d-o*p,P=f*b+g*M+m*v;if(P>-1e-9&&P<1e-9)return!1;let x=1/P,A=e-c,T=n-a,V=r-u,w=x*(A*b+T*M+V*v);if(w<0||w>1)return!1;let O=T*m-V*g,L=V*f-A*m,U=A*g-T*f,R=x*(t*O+o*L+s*U);return R<0||w+R>1?!1:x*(p*O+d*L+y*U)>.001}function Ps(e,n,r,t,o,s,i){let l=i.bcx-e,c=i.bcy-n,a=i.bcz-r,u=l*t+c*o+a*s,f=l-u*t,g=c-u*o,m=a-u*s;if(f*f+g*g+m*m>i.br2)return!1;let p=i.triFlat,d=p.length;for(let y=0;y<d;y+=9)if(bs(e,n,r,t,o,s,p,y))return!0;return!1}var Xe=9,Ms=6,ne=12;function Jn(e,n,r,t,o,s){let i=t-e,l=o-n,c=s-r;return i*l+l*c+c*i}function vs(e){let n=[];for(let A=0;A<e.length;A++)e[A]&&n.push(A);let r=n.length,t=new Int32Array(r);for(let A=0;A<r;A++)t[A]=n[A];let o=new Float64Array(r),s=new Float64Array(r),i=new Float64Array(r);for(let A=0;A<r;A++){let T=e[t[A]];o[A]=(T.minX+T.maxX)*.5,s[A]=(T.minY+T.maxY)*.5,i[A]=(T.minZ+T.maxZ)*.5}let l=2*Math.max(1,r)+1,c=new Float64Array(l*Xe),a=0,u=new Float64Array(ne),f=new Float64Array(ne),g=new Float64Array(ne),m=new Float64Array(ne),p=new Float64Array(ne),d=new Float64Array(ne),y=new Int32Array(ne),b=new Float64Array(ne-1),M=new Int32Array(ne-1),v=new Float64Array(ne-1),P=new Int32Array(ne-1);function x(A,T){let V=a++,w=V*Xe,O=T-A,L=1/0,U=1/0,R=1/0,D=-1/0,k=-1/0,_=-1/0;for(let $=A;$<T;$++){let Y=e[t[$]];Y.minX<L&&(L=Y.minX),Y.maxX>D&&(D=Y.maxX),Y.minY<U&&(U=Y.minY),Y.maxY>k&&(k=Y.maxY),Y.minZ<R&&(R=Y.minZ),Y.maxZ>_&&(_=Y.maxZ)}if(c[w]=L,c[w+1]=U,c[w+2]=R,c[w+3]=D,c[w+4]=k,c[w+5]=_,O<=Ms)return c[w+6]=1,c[w+7]=A,c[w+8]=T,V;let E=1/0,C=1/0,h=1/0,S=-1/0,I=-1/0,G=-1/0;for(let $=A;$<T;$++)o[$]<E&&(E=o[$]),o[$]>S&&(S=o[$]),s[$]<C&&(C=s[$]),s[$]>I&&(I=s[$]),i[$]<h&&(h=i[$]),i[$]>G&&(G=i[$]);let N=S-E,F=I-C,z=G-h;if(N===0&&F===0&&z===0)return c[w+6]=1,c[w+7]=A,c[w+8]=T,V;let X=Jn(L,U,R,D,k,_),H=X>0?1/X:0,K=O+1,Z=0,J=0;for(let $=0;$<3;$++){let Y=$===0?E:$===1?C:h,ie=$===0?N:$===1?F:z;if(ie===0)continue;let de=$===0?o:$===1?s:i,ve=ne/ie;u.fill(1/0),f.fill(1/0),g.fill(1/0),m.fill(-1/0),p.fill(-1/0),d.fill(-1/0),y.fill(0);for(let B=A;B<T;B++){let j=(de[B]-Y)*ve|0;j>=ne&&(j=ne-1);let ce=e[t[B]];ce.minX<u[j]&&(u[j]=ce.minX),ce.maxX>m[j]&&(m[j]=ce.maxX),ce.minY<f[j]&&(f[j]=ce.minY),ce.maxY>p[j]&&(p[j]=ce.maxY),ce.minZ<g[j]&&(g[j]=ce.minZ),ce.maxZ>d[j]&&(d[j]=ce.maxZ),y[j]++}let Ie=1/0,Ee=1/0,In=1/0,En=-1/0,On=-1/0,Rn=-1/0,wt=0;for(let B=0;B<ne-1;B++)u[B]<Ie&&(Ie=u[B]),m[B]>En&&(En=m[B]),f[B]<Ee&&(Ee=f[B]),p[B]>On&&(On=p[B]),g[B]<In&&(In=g[B]),d[B]>Rn&&(Rn=d[B]),wt+=y[B],b[B]=Jn(Ie,Ee,In,En,On,Rn),M[B]=wt;let Ln=1/0,kn=1/0,_n=1/0,Nn=-1/0,Gn=-1/0,Dn=-1/0,It=0;for(let B=ne-2;B>=0;B--){let j=B+1;u[j]<Ln&&(Ln=u[j]),m[j]>Nn&&(Nn=m[j]),f[j]<kn&&(kn=f[j]),p[j]>Gn&&(Gn=p[j]),g[j]<_n&&(_n=g[j]),d[j]>Dn&&(Dn=d[j]),It+=y[j],v[B]=Jn(Ln,kn,_n,Nn,Gn,Dn),P[B]=It}for(let B=0;B<ne-1;B++){if(M[B]===0||P[B]===0)continue;let j=.125+(b[B]*M[B]+v[B]*P[B])*H;j<K&&(K=j,Z=$,J=Y+(B+1)/ve)}}let oe=Z===0?o:Z===1?s:i,Q=A,q=T-1;for(;Q<=q;)if(oe[Q]<J)Q++;else{let $=t[Q];t[Q]=t[q],t[q]=$;let Y=o[Q];o[Q]=o[q],o[q]=Y;let ie=s[Q];s[Q]=s[q],s[q]=ie;let de=i[Q];i[Q]=i[q],i[q]=de,q--}let ae=Q;(ae===A||ae===T)&&(ae=A+T>>1),c[w+6]=0;let re=x(A,ae),W=x(ae,T);return c[V*Xe+7]=re,c[V*Xe+8]=W,V}return r>0&&x(0,r),{data:c,nodeCount:a,polyIndices:t,meta:e}}function gr(e,n,r,t,o,s,i,l,c){if(l.nodeCount===0)return!1;let{data:a,polyIndices:u,meta:f}=l,g=t!==0?1/t:t>=0?1/0:-1/0,m=o!==0?1/o:o>=0?1/0:-1/0,p=s!==0?1/s:s>=0?1/0:-1/0,d=0;for(c[d++]=0;d>0;){let b=c[--d]*Xe,M=(a[b]-e)*g,v=(a[b+3]-e)*g,P=M<v?M:v,x=M<v?v:M,A=(a[b+1]-n)*m,T=(a[b+4]-n)*m,V=A<T?A:T,w=A<T?T:A;if(P>w||V>x)continue;V>P&&(P=V),w<x&&(x=w);let O=(a[b+2]-r)*p,L=(a[b+5]-r)*p,U=O<L?O:L,R=O<L?L:O;if(!(P>R||U>x)&&(R<x&&(x=R),!(x<.001)))if(a[b+6]===1){let D=a[b+7]|0,k=a[b+8]|0;for(let _=D;_<k;_++){let E=u[_];if(E===i)continue;let C=f[E];if(C&&Ps(e,n,r,t,o,s,C))return!0}}else c[d++]=a[b+7]|0,c[d++]=a[b+8]|0}return!1}function As(e){let n=(1+Math.sqrt(5))/2,r=new Float64Array(e*3);for(let t=0;t<e;t++){let o=(t+.5)/e,s=Math.sqrt(Math.max(0,1-o*o)),i=2*Math.PI*(t/n);r[t*3]=s*Math.cos(i),r[t*3+1]=s*Math.sin(i),r[t*3+2]=o}return r}function Cs(e){let n=Math.abs(e[0])>.9?0:1,r=Math.abs(e[0])>.9?1:0,t=r*e[2],o=-n*e[2],s=n*e[1]-r*e[0],i=Math.hypot(t,o,s);t/=i,o/=i,s/=i;let l=e[1]*s-e[2]*o,c=e[2]*t-e[0]*s,a=e[0]*o-e[1]*t;return{ux:t,uy:o,uz:s,vx:l,vy:c,vz:a}}function be(e,n){let r=n?.samples??8;if(e.length<4||r<1)return e;let t=e.map(ys),o=As(r),s=[],i=vs(t),l=new Int32Array(Math.max(64,i.nodeCount)),c=192,a=new Float64Array(c);for(let u=0;u<e.length;u++){let f=t[u];if(!f){s.push(e[u]);continue}let g=f.normal[0],m=f.normal[1],p=f.normal[2],d=.001*g,y=.001*m,b=.001*p;{let k=f.centroid[0]+d,_=f.centroid[1]+y,E=f.centroid[2]+b;if(!gr(k,_,E,g,m,p,u,i,l)){s.push(e[u]);continue}}let{ux:M,uy:v,uz:P,vx:x,vy:A,vz:T}=Cs(f.normal),V=f.centroid[0],w=f.centroid[1],O=f.centroid[2],L=f.vertices,U=L.length,R=0;a[R++]=V+d,a[R++]=w+y,a[R++]=O+b;for(let k=0;k<U;k++){let _=L[k];a[R++]=_[0]+(V-_[0])*.08+d,a[R++]=_[1]+(w-_[1])*.08+y,a[R++]=_[2]+(O-_[2])*.08+b}for(let k=0;k<U;k++){let _=L[k],E=L[(k+1)%U],C=(_[0]+E[0])*.5,h=(_[1]+E[1])*.5,S=(_[2]+E[2])*.5;a[R++]=C+(V-C)*.08+d,a[R++]=h+(w-h)*.08+y,a[R++]=S+(O-S)*.08+b}let D=!1;e:for(let k=0;k<o.length;k+=3){let _=o[k],E=o[k+1],C=o[k+2],h=_*M+E*x+C*g,S=_*v+E*A+C*m,I=_*P+E*T+C*p;for(let G=0;G<R;G+=3){let N=a[G],F=a[G+1],z=a[G+2];if(!gr(N,F,z,h,S,I,u,i,l)){D=!0;break e}}}D&&s.push(e[u])}return s}var Vs=3,Ss=.03,Ts=.02,Ye={maxAngleDeg:Vs,maxPlaneDisplacement:Ss,maxBoundaryDisplacement:Ts,isolatedPairs:!1},Le={maxAngleDeg:15,maxPlaneDisplacement:.35,maxBoundaryDisplacement:.0725,isolatedPairs:!0},an=[{maxAngleDeg:15,maxPlaneDisplacement:.35,maxBoundaryDisplacement:.02},{maxAngleDeg:15,maxPlaneDisplacement:.35,maxBoundaryDisplacement:.0725},{maxAngleDeg:45,maxPlaneDisplacement:1,maxBoundaryDisplacement:.0725}],ws=[2,4,6,8,12],Is=300,Es=.3,Os=300,Rs=16,Ls=.015,pr=2.6,ks=3,_s=96,Te={minGroupPolygons:2,maxCandidateAxes:24},Ns={maxGap:0,internalBoundaryLength:0,excessBoundaryLength:0};function gn(e,n={}){let r=n.meshResolution??"lossy",t=et(e,!1),o={baseline:t},s=t,i=te(t),l=(a,u=te(a))=>u>=i?!1:(s=a,i=u,!0),c=cn(t,n.rectCover);if(c!==t&&l(c),r==="lossy"&&n.approximateMerge!==!1){let a=Ks(e),u=[],f=me(a,s,Le.maxBoundaryDisplacement).metrics,g=n.approximateMerge===void 0||n.approximateMerge===!0,m=(M,v=!0)=>!Ys(a,M.metrics,M.tolerance,v?f:null),p=(M,v)=>{l(M,v)},d=(M,v,P=Le.maxBoundaryDisplacement)=>{!g||v>i+br(i)||u.push({polygons:M,cost:v,maxBoundaryDisplacement:P})},y=dr(n.approximateMerge,g?t:void 0);for(let M=0;M<y.length;M++){let v=y[M],P=et(e,v,o),x=te(P),A=null,T=()=>(A??(A=me(a,P,v.maxBoundaryDisplacement)),A),V=!0;if(g||v.guard){let R=T();V=m(R,!!v.allowReferenceCracks)}if(!V&&x<i)continue;V&&(p(P,x),d(P,x,v.maxBoundaryDisplacement));let w=cn(P,n.rectCover),O=te(w),L=null,U=()=>(L??(L=me(a,w,v.maxBoundaryDisplacement)),L);if(w!==P&&O<i){let R=!0;(g||v.guard)&&(R=m(U(),!!v.allowReferenceCracks)),R&&(p(w,O),d(w,O,v.maxBoundaryDisplacement))}}if(g)for(let M of Gs(e)){let v={baseline:se(be(M))},P=te(v.baseline),x=!0,A=null,T=()=>(A??(A=me(a,v.baseline,Le.maxBoundaryDisplacement)),A);P<i&&(x=m(T())),x&&(p(v.baseline,P),d(v.baseline,P));let V=cn(v.baseline,n.rectCover);if(V!==v.baseline){let w=te(V);(w>=i||m(me(a,V,Le.maxBoundaryDisplacement)))&&(p(V,w),d(V,w))}for(let w of dr(n.approximateMerge,v.baseline)){let O=et(M,w,v),L=te(O),U=null,R=()=>(U??(U=me(a,O,w.maxBoundaryDisplacement)),U),D=!0;if(g||w.guard){let h=R();D=m(h,!!w.allowReferenceCracks)}if(!D&&L<i)continue;D&&(p(O,L),d(O,L,w.maxBoundaryDisplacement));let k=cn(O,n.rectCover),_=te(k),E=null,C=()=>(E??(E=me(a,k,w.maxBoundaryDisplacement)),E);if(k!==O&&_<i){let h=!0;(g||w.guard)&&(h=m(C(),!!w.allowReferenceCracks)),h&&(p(k,_),d(k,_,w.maxBoundaryDisplacement))}}}if(g)for(let M of an){let v=Vr({...M,isolatedPairs:!0}),P=ci(s,v);if(P===s)continue;let x=te(P);if(x>=i)continue;let A=me(a,P,v.maxBoundaryDisplacement);m(A)&&(p(P,x),d(P,x,v.maxBoundaryDisplacement))}let b=Bs(u,s,i,M=>(M.metrics??(M.metrics=me(a,M.polygons,M.maxBoundaryDisplacement).metrics),M.metrics),()=>me(a,s,Le.maxBoundaryDisplacement).metrics);b&&(s=b.polygons,i=b.cost)}return s}function Gs(e){let n=Ds(e);if(n.eligiblePolygons<24||n.colorCount<8)return[];let r=[],t=new Set;for(let o of ws){let s=zs(e,o,n.colorCount);if(!s)continue;let i=Fs(s);t.has(i)||(t.add(i),r.push(s))}return r}function Ds(e){let n=new Set,r=0;for(let t of e)t.texture||t.material?.texture||t.uvs||t.textureTriangles?.length||yr(t.color)&&(r+=1,n.add(t.color??"#cccccc"));return{eligiblePolygons:r,colorCount:n.size}}function zs(e,n,r){let t=!1,o=new Set,s=e.map(i=>{if(i.texture||i.material?.texture||i.uvs||i.textureTriangles?.length)return i;let l=yr(i.color);if(!l)return i;let c=Us([Math.round(l[0]/n)*n,Math.round(l[1]/n)*n,Math.round(l[2]/n)*n]);return o.add(c),c===i.color?i:(t=!0,{...i,color:c})});return!t||o.size>=r?null:s}function yr(e){let n=e??"#cccccc",r=/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(n);if(r)return[parseInt(r[1]+r[1],16),parseInt(r[2]+r[2],16),parseInt(r[3]+r[3],16)];let t=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(n);return t?[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]:null}function Us(e){return`#${e.map(n=>Math.max(0,Math.min(255,Math.round(n))).toString(16).padStart(2,"0")).join("")}`}function Fs(e){return e.map(n=>n.color??"").join("|")}function dr(e,n){if(e&&e!==!0)return typeof e.isolatedPairs=="boolean"?[{...e,guard:e.isolatedPairs===!1}]:[{...e,isolatedPairs:!0,guard:!1},{...e,isolatedPairs:!1,guard:!0}];if(n&&$s(n))return[{...an[0],isolatedPairs:!0,guard:!1,allowReferenceCracks:!0}];let r=[],t=new Set,o=n&&n.length>Os?[!0]:[!0,!1];for(let s=0;s<an.length;s++){let i=an[s];for(let l of o){let c={...i,isolatedPairs:l,guard:s>0||l===!1,allowReferenceCracks:!0},a=[c.maxAngleDeg,c.maxPlaneDisplacement,c.maxBoundaryDisplacement,c.isolatedPairs].join("|");t.has(a)||(t.add(a),r.push(c))}}return r.length===0?[{...Le,guard:!1}]:r}function $s(e){return e.length<Is?!1:Ar(e)/e.length<=Es}function te(e){let n=0;for(let r of e){let t=r.vertices.length,o=t<=4?0:Math.min(4,t-4)*.12,s=r.texture||r.material?.texture||r.textureTriangles?.length?.15:0;n+=1+o+s}return n}function br(e){return Math.max(Rs,e*Ls)}function Bs(e,n,r,t,o){if(e.length===0)return null;let s=br(r),i=e.find(u=>u.polygons===n),l=null,c=null,a=null;for(let u of e){if(u.polygons===n||u.cost>r+s)continue;let f=t(u);l??(l=i?t(i):o()),Xs(f,l)&&(!c||!a||js(u,f,c,a)<0)&&(c=u,a=f)}return c}function js(e,n,r,t){return n.maxGap-t.maxGap||n.internalBoundaryLength-t.internalBoundaryLength||n.excessBoundaryLength-t.excessBoundaryLength||e.cost-r.cost}function Xs(e,n){let r=Math.max(5e-4,n.maxGap*.02);if(e.maxGap<n.maxGap-r)return!0;if(e.maxGap>n.maxGap+r)return!1;let t=Math.max(8,n.internalBoundaryLength*.01);if(e.internalBoundaryLength<n.internalBoundaryLength-t)return!0;if(e.internalBoundaryLength>n.internalBoundaryLength+t)return!1;let o=Math.max(8,n.excessBoundaryLength*.01);return e.excessBoundaryLength<n.excessBoundaryLength-o}function Ys(e,n,r,t=null){if(!t)return n.internalBoundaryLength>0||n.excessBoundaryLength>r;let o=Math.max(r*.1,1e-6),s=t.maxGap+o,i=r<=.08?Math.max(s,Math.min(r*.75,.04)):s,l=Math.max(r*2,t.internalBoundaryLength*.15),c=Math.max(r*2,t.excessBoundaryLength*.15);return n.maxGap>i||n.internalBoundaryLength>t.internalBoundaryLength+l||n.excessBoundaryLength>t.excessBoundaryLength+c}function Hs(e,n,r=0,t=tt(e,r)){let o=e.edges,s=Pr(n),i=tt(e,r),l=t>0?Zs(e,t):null,c={...Ns,excessBoundaryLength:Math.max(0,s.boundaryLength-o.boundaryLength)};for(let a of s.boundarySegments){let u=ke(a.a,a.b);if(o.boundaryKeys.has(u))continue;if(o.internalKeys.has(u)){c.internalBoundaryLength+=pe(a.a,a.b);continue}let f=l?Js(a,l,t):null;f!==null&&(c.maxGap=Math.max(c.maxGap,f),c.internalBoundaryLength+=pe(a.a,a.b))}return{metrics:c,tolerance:i}}function me(e,n,r=0){return Hs(e,n,r,Ws(e,r))}function Ks(e){let n=Qs(e),r=n>0?Math.min(.08,Math.max(.001,n*.001)):0;return{edges:Pr(e),baseTolerance:r,polygonCount:e.length,indexes:new Map}}function tt(e,n=0){return Math.max(e.baseTolerance,n*1.05)}function Ws(e,n=0){return Math.max(tt(e,n),e.baseTolerance*pr,n*pr)}function Zs(e,n){let r=n.toFixed(6),t=e.indexes.get(r);if(t)return t;let o=qs(e.edges.internalSegments,n);return e.indexes.set(r,o),o}function Pr(e){let n=new Map;for(let l of e)for(let c=0;c<l.vertices.length;c++){let a=l.vertices[c],u=l.vertices[(c+1)%l.vertices.length],f=ke(a,u),g=n.get(f);g?g.count+=1:n.set(f,{count:1,a,b:u})}let r=new Set,t=new Set,o=[],s=[],i=0;for(let[l,c]of n){let a={a:c.a,b:c.b};c.count===1?(r.add(l),o.push(a),i+=pe(a.a,a.b)):(t.add(l),s.push(a))}return{boundaryKeys:r,internalKeys:t,boundarySegments:o,internalSegments:s,boundaryLength:i}}function Qs(e){let n=1/0,r=1/0,t=1/0,o=-1/0,s=-1/0,i=-1/0;for(let l of e)for(let[c,a,u]of l.vertices)n=Math.min(n,c),r=Math.min(r,a),t=Math.min(t,u),o=Math.max(o,c),s=Math.max(s,a),i=Math.max(i,u);return Number.isFinite(n)?Math.hypot(o-n,s-r,i-t):0}function qs(e,n){let r=Math.max(n*2,1e-6),t=new Map;for(let o of e){let[s,i,l]=Mr(o,r),c=vr(s,i,l),a=t.get(c);a?a.push(o):t.set(c,[o])}return{cellSize:r,cells:t}}function Js(e,n,r){let[t,o,s]=Mr(e,n.cellSize),i=null;for(let l=-1;l<=1;l++)for(let c=-1;c<=1;c++)for(let a=-1;a<=1;a++){let u=n.cells.get(vr(t+l,o+c,s+a));if(u)for(let f of u){let g=ei(e,f);g<=r&&(i=i===null?g:Math.min(i,g))}}return i}function Mr(e,n){return[Math.floor((e.a[0]+e.b[0])/2/n),Math.floor((e.a[1]+e.b[1])/2/n),Math.floor((e.a[2]+e.b[2])/2/n)]}function vr(e,n,r){return`${e},${n},${r}`}function ei(e,n){return Math.min(Math.max(pe(e.a,n.a),pe(e.b,n.b)),Math.max(pe(e.a,n.b),pe(e.b,n.a)))}function cn(e,n){if(n===!1)return e;let r=ni(e,n);if(!r)return e;let t=sn(e,r);return t.length<e.length?t:e}function ni(e,n){if(n&&n!==!0)return n;let r=e.length;return r>2200?null:r>1200?{...Te,maxCandidateAxes:Math.min(Te.maxCandidateAxes??24,2)}:r>300&&Ar(e)<=_s?{...Te,maxCandidateAxes:Math.min(Te.maxCandidateAxes??24,2)}:r>900?{...Te,maxCandidateAxes:Math.min(Te.maxCandidateAxes??24,4)}:Te}function Ar(e){let n=0;for(let r of e)r.vertices.length===3&&(n+=1);return n}function et(e,n,r){let t=tn(e),o=r?.baseline??se(be(t));if(!n)return o;let s=n===!0?Ye:Vr(n);if(s.isolatedPairs){let l=ri(ti(t,r),s),c=se(l);return c.length<o.length?c:o}let i=se(be(hi(t,s,r)));return i.length<o.length?i:o}function Cr(e,n){return n?(n.snapped||(n.snapped=un(e)),n.snapped):un(e)}function ti(e,n){return n?(n.snappedInterior||(n.snappedInterior=be(Cr(e,n))),n.snappedInterior):be(un(e))}function Vr(e){return{maxAngleDeg:e.maxAngleDeg??Ye.maxAngleDeg,maxPlaneDisplacement:e.maxPlaneDisplacement??Ye.maxPlaneDisplacement,maxBoundaryDisplacement:e.maxBoundaryDisplacement??Ye.maxBoundaryDisplacement,isolatedPairs:e.isolatedPairs??Ye.isolatedPairs}}function ri(e,n){let r=e.map(f=>{let g=Ke(f);return g?{polygon:f,normal:g.normal,area:g.area,materialKey:st(f)}:null}),t=new Map;for(let f=0;f<e.length;f++){let g=e[f];if(!(g.vertices.length!==3||!r[f]))for(let m=0;m<g.vertices.length;m++){let p=ke(g.vertices[m],g.vertices[(m+1)%g.vertices.length]),d=t.get(p);d?d.push(f):t.set(p,[f])}}let o=[];for(let f of t.values()){if(f.length!==2)continue;let[g,m]=f,p=xi(g,m,e,r,n);p&&o.push(p)}let s=new Set,i=new Map,l=new Set,c=oi(o),a=pn(c.flatMap(f=>f.vertexMoves));for(let f of c){s.add(f.a),s.add(f.b);let g=Math.min(f.a,f.b);i.set(g,f.polygon),l.add(Math.max(f.a,f.b))}let u=[];for(let f=0;f<e.length;f++){let g=i.get(f);if(g){u.push(g);continue}l.has(f)||u.push(e[f])}return a.size>0?dn(u,a):u}function oi(e){return e.length>3e3?si(e):ii(e)}function si(e){let n=new Map;for(let s of e)n.set(s.a,(n.get(s.a)??0)+1),n.set(s.b,(n.get(s.b)??0)+1);let r=[...e].sort((s,i)=>{let l=(n.get(s.a)??0)+(n.get(s.b)??0),c=(n.get(i.a)??0)+(n.get(i.b)??0);return l-c||s.score-i.score}),t=new Set,o=[];for(let s of r)t.has(s.a)||t.has(s.b)||(t.add(s.a),t.add(s.b),o.push(s));return o}function ii(e){let n=new Map;for(let a=0;a<e.length;a++){let u=e[a],f=n.get(u.a);f?f.push(a):n.set(u.a,[a]);let g=n.get(u.b);g?g.push(a):n.set(u.b,[a])}let r=[],t=new Array(e.length).fill(!0),o=new Map,s=new rt;for(let[a,u]of n)o.set(a,u.length);let i=a=>(o.get(a.a)??0)+(o.get(a.b)??0),l=a=>{let u=e[a];s.push({degree:i(u),score:u.score,index:a})},c=(a,u)=>{if(!t[a])return;t[a]=!1;let f=e[a];for(let g of[f.a,f.b])o.set(g,(o.get(g)??0)-1),u.add(g)};for(let a=0;a<e.length;a++)l(a);for(;s.size()>0;){let a=s.pop();if(!t[a.index])continue;let u=e[a.index];if(i(u)!==a.degree){l(a.index);continue}r.push(u);let g=new Set;for(let m of[u.a,u.b])for(let p of n.get(m)??[])c(p,g);for(let m of g)for(let p of n.get(m)??[])t[p]&&l(p)}return r}var rt=class{constructor(){this.items=[]}size(){return this.items.length}push(n){this.items.push(n);let r=this.items.length-1;for(;r>0;){let t=r-1>>1;if(nt(this.items[t],this.items[r])<=0)break;[this.items[t],this.items[r]]=[this.items[r],this.items[t]],r=t}}pop(){if(this.items.length===0)return null;let n=this.items[0],r=this.items.pop();if(this.items.length>0){this.items[0]=r;let t=0;for(;;){let o=t*2+1,s=o+1,i=t;if(o<this.items.length&&nt(this.items[o],this.items[i])<0&&(i=o),s<this.items.length&&nt(this.items[s],this.items[i])<0&&(i=s),i===t)break;[this.items[t],this.items[i]]=[this.items[i],this.items[t]],t=i}}return n}};function nt(e,n){return e.degree-n.degree||e.score-n.score||e.index-n.index}function ci(e,n){let r=e,t=te(r),o=fi(r);for(let s=0;s<ks;s++){let i=ai(r,n,o);if(!i)break;let l=te(i.polygons);if(l>=t)break;r=i.polygons,t=l,o=i.origins}return r===e?e:r}function ai(e,n,r){let t=e.map(g=>{let m=Ke(g);return m?{polygon:g,normal:m.normal,area:m.area,materialKey:st(g)}:null}),o=new Map;for(let g=0;g<e.length;g++){let m=e[g];if(!(!t[g]||m.vertices.length<3))for(let p=0;p<m.vertices.length;p++){let d=ke(m.vertices[p],m.vertices[(p+1)%m.vertices.length]),y=o.get(d);y?y.push({polygon:g,edge:p}):o.set(d,[{polygon:g,edge:p}])}}let s=[];for(let g of o.values()){if(g.length!==2)continue;let[m,p]=g,d=li(m.polygon,m.edge,p.polygon,p.edge,e,t,n);d&&s.push(d)}if(s.length===0)return null;s.sort((g,m)=>m.score-g.score);let i=new Set,l=[];for(let g of s)i.has(g.a)||i.has(g.b)||(i.add(g.a),i.add(g.b),l.push(g));if(l.length===0)return null;let c=pn(l.flatMap(g=>g.vertexMoves));if(!ui(c,r,n.maxBoundaryDisplacement))return null;let a=dn(e,c),u=mi(e,c,r),f=se(a);return te(f)<te(e)?{polygons:f,origins:gi(f,u)}:null}function li(e,n,r,t,o,s,i){let l=o[e],c=o[r],a=s[e],u=s[r];if(!a||!u||l.vertices.length===3&&c.vertices.length===3||!Rr(l,c,a,u))return null;let f=Math.abs(ue(a.normal,u.normal)),g=Math.cos(i.maxAngleDeg*Math.PI/180);if(f<g)return null;let m=xr(l,c,n)??xr(c,l,t);if(!m||m.length<4||m.length>10)return null;let p=Tr(m);if(!p)return null;let d=0,y=0;for(let V of m){let w=Math.abs(xn(V,p));d=Math.max(d,w),y+=w*w}if(d>Math.min(i.maxPlaneDisplacement,i.maxBoundaryDisplacement))return null;let b=m.map(V=>hn(V,p));if(!wr(b,p.normal))return null;let M=Ke({vertices:b});if(!M||ue(M.normal,a.normal)<.2||ue(M.normal,u.normal)<.2)return null;let v=[...m.map((V,w)=>({key:ee(V),target:b[w]})),...Sr([l,c],p)],P=dn([l,c],pn(v)),x=te([l,c]),A=te(se(P));if(A>=x)return null;let T=x-A-(y/m.length+d*.25+(1-f)*.1);return T<=0?null:{a:e,b:r,vertexMoves:v,score:T}}function xr(e,n,r){let t=e.vertices,o=n.vertices,s=t[r],i=t[(r+1)%t.length],l=-1;for(let u=0;u<o.length;u++)if(Pe(o[u],i)&&Pe(o[(u+1)%o.length],s)){l=u;break}if(l<0)return null;let c=[],a=(r+1)%t.length;for(c.push(t[a]);a!==r;)a=(a+1)%t.length,c.push(t[a]);for(a=(l+2)%o.length;a!==l;){let u=o[a];Pe(u,c[c.length-1])||c.push(u),a=(a+1)%o.length}return c.length>1&&Pe(c[0],c[c.length-1])&&c.pop(),c}function ui(e,n,r){for(let[t,o]of e){let s=pi(t),i=n.get(t)??(s?[s]:[]);if(i.length===0)return!1;for(let l of i)if(pe(l,o)>r+1e-6)return!1}return!0}function fi(e){let n=new Map;for(let r of e){for(let t of r.vertices)ln(n,ee(t),t);for(let t of r.textureTriangles??[])for(let o of t.vertices)ln(n,ee(o),o)}return n}function mi(e,n,r){let t=new Map;for(let o of e){let s=[...o.vertices,...(o.textureTriangles??[]).flatMap(i=>i.vertices)];for(let i of s){let l=ee(i),c=n.get(l)??i,a=ee(c);for(let u of r.get(l)??[i])ln(t,a,u)}}return t}function gi(e,n){let r=new Map;for(let t of e){let o=[...t.vertices,...(t.textureTriangles??[]).flatMap(s=>s.vertices)];for(let s of o){let i=ee(s);for(let l of n.get(i)??[s])ln(r,i,l)}}return r}function ln(e,n,r){let t=e.get(n);if(!t){e.set(n,[r]);return}let o=ee(r);t.some(s=>ee(s)===o)||t.push(r)}function pi(e){let n=e.split(",").map(Number);return n.length===3&&n.every(Number.isFinite)?[n[0],n[1],n[2]]:null}function pn(e){let n=new Map;for(let t of e){let o=n.get(t.key);o?(o.x+=t.target[0],o.y+=t.target[1],o.z+=t.target[2],o.count+=1):n.set(t.key,{x:t.target[0],y:t.target[1],z:t.target[2],count:1})}let r=new Map;for(let[t,o]of n)r.set(t,[o.x/o.count,o.y/o.count,o.z/o.count]);return r}function di(e,n){let r=[];for(let t=0;t<e.length;t++){let o=e[t].vertices,s=n[t]?.vertices;if(!s||s.length!==o.length)continue;for(let c=0;c<o.length;c++)r.push({key:ee(o[c]),target:s[c]});let i=e[t].textureTriangles??[],l=n[t]?.textureTriangles??[];for(let c=0;c<i.length;c++){let a=l[c];if(a)for(let u=0;u<i[c].vertices.length;u++)r.push({key:ee(i[c].vertices[u]),target:a.vertices[u]})}}return r}function Sr(e,n){let r=[];for(let t of e)for(let o of t.textureTriangles??[])for(let s of o.vertices)r.push({key:ee(s),target:hn(s,n)});return r}function dn(e,n){return e.map(r=>{let t=!1,o=l=>{let c=n.get(ee(l));return c?(t=!0,c):l},s=r.vertices.map(o),i=ot(r.textureTriangles,o);return t?{...r,vertices:s,...i?{textureTriangles:i}:{}}:r})}function xi(e,n,r,t,o){let s=r[e],i=r[n],l=t[e],c=t[n];if(!l||!c||s.vertices.length!==3||i.vertices.length!==3||!Rr(s,i,l,c))return null;let a=ct(s,i);if(!a)return null;let[u,f,g,m]=a;if((g+1)%i.vertices.length===m)return null;let d=Math.abs(ue(l.normal,c.normal)),y=Math.cos(o.maxAngleDeg*Math.PI/180);if(d<y)return null;let b=(f+1)%s.vertices.length,M=3-g-m,v=[s.vertices[f],s.vertices[b],s.vertices[u],i.vertices[M]],P=Tr(v);if(!P)return null;let x=0,A=0;for(let O of v){let L=Math.abs(xn(O,P));x=Math.max(x,L),A+=L*L}if(x>Math.min(o.maxPlaneDisplacement,o.maxBoundaryDisplacement))return null;let T=v.map(O=>hn(O,P));if(!wr(T,P.normal))return null;let V=Ke({vertices:T});if(!V||ue(V.normal,l.normal)<.2||ue(V.normal,c.normal)<.2)return null;let w={vertices:v,color:s.color,...s.data?{data:{...s.data}}:{}};if(it(s,i)&&s.uvs&&i.uvs&&s.texture){w.texture=s.texture,w.uvs=[[...s.uvs[f]],[...s.uvs[b]],[...s.uvs[u]],[...i.uvs[M]]];let O=yi([s,i]);O?.length&&(w.textureTriangles=O)}return{a:e,b:n,polygon:w,vertexMoves:[...v.map((O,L)=>({key:ee(O),target:T[L]})),...Sr([s,i],P)],score:A/v.length+x*.25+(1-d)*.1}}function Tr(e){if(e.length<3)return null;let n=0,r=0,t=0,o=0,s=0,i=0;for(let c=0;c<e.length;c++){let a=e[c],u=e[(c+1)%e.length];n+=(a[1]-u[1])*(a[2]+u[2]),r+=(a[2]-u[2])*(a[0]+u[0]),t+=(a[0]-u[0])*(a[1]+u[1]),o+=a[0],s+=a[1],i+=a[2]}let l=Gr([n,r,t]);return l?{normal:l,point:[o/e.length,s/e.length,i/e.length]}:null}function wr(e,n){let r=0;for(let t=0;t<e.length;t++){let o=e[t],s=e[(t+1)%e.length],i=e[(t+2)%e.length],l=ue(Nr(He(s,o),He(i,s)),n);if(Math.abs(l)<=1e-9)continue;let c=l>0?1:-1;if(r===0)r=c;else if(r!==c)return!1}return!0}function hi(e,n,r){let t=Cr(e,r),o=Ci(t,n);if(o<=0)return t;let s=t.map(m=>{let p=Ke(m);return p?{polygon:m,normal:p.normal,area:p.area,materialKey:st(m)}:null}),i=Ti(t,s),l=new Set,c=Array(t.length),a=[],u=(m,p)=>{c[m]=p};for(let m=0;m<t.length;m++){let p=s[m];if(l.has(m))continue;if(!p){u(m,t[m]);continue}let d=Ii(m,s,i,l,o,n);for(let b of d)l.add(b);if(d.length<2){u(m,t[m]);continue}let y=Mi(d,t,s,i,o,n);a.push(...y.vertexMoves);for(let b of d)u(b,y.polygons.get(b)??t[b])}let f=c.flatMap(m=>m?[m]:[]),g=a.length>0?dn(f,pn(a)):f;return un(g)}function un(e){let n=Or(e),r=1e-4;if(n<=0)return e;let t=Vi(n),o=Si(r);return e.map(s=>{let i=f=>t.snap(f),l=s.vertices.map(i),c=s.uvs&&s.uvs.length===s.vertices.length?s.uvs.map(f=>o.snap(f)):void 0,a=ot(s.textureTriangles,i),u={...s,vertices:l,...c?{uvs:c}:{},...a?{textureTriangles:a}:{}};return{...u,...u.texture?{textureTriangles:Ir(u)}:{}}})}function Ir(e){if(e.texture){if(e.textureTriangles?.length)return Pi(e.textureTriangles);if(e.uvs&&e.uvs.length===e.vertices.length)return bi(e.vertices,e.uvs)}}function yi(e){let n=e.flatMap(r=>Ir(r)??[]);return n.length>0?n:void 0}function bi(e,n){let r=[];for(let t=1;t<e.length-1;t++)r.push({vertices:[[...e[0]],[...e[t]],[...e[t+1]]],uvs:[[...n[0]],[...n[t]],[...n[t+1]]]});return r}function Pi(e){return e.map(n=>({vertices:n.vertices.map(r=>[...r]),uvs:n.uvs.map(r=>[...r])}))}function ot(e,n){if(e?.length)return e.map(r=>({vertices:r.vertices.map(n),uvs:r.uvs.map(t=>[...t])}))}function Mi(e,n,r,t,o,s){let i=Er(e,n,r,o,s);return i?Ai(i):vi(e,n,r,t,o,s)}function vi(e,n,r,t,o,s){let i=new Set(e),l=[];for(let f of e)for(let g of t.get(f)??[]){if(f>=g||!i.has(g))continue;let m=Er([f,g],n,r,o,s);m&&l.push(m)}l.sort((f,g)=>g.score-f.score);let c=new Set,a=new Map,u=[];for(let f of l)if(!f.indices.some(g=>c.has(g))){u.push(...f.vertexMoves);for(let g=0;g<f.indices.length;g++){let m=f.indices[g];c.add(m),a.set(m,n[m])}}return{polygons:a,vertexMoves:u}}function Ai(e){let n=new Map;for(let r=0;r<e.indices.length;r++)n.set(e.indices[r],e.source[r]);return{polygons:n,vertexMoves:e.vertexMoves}}function Er(e,n,r,t,o){let s=Lr(e,r);if(!s||!kr(e,r,s,t,o))return null;let i=e.map(u=>n[u]),l=i.map(u=>Ri(u,s)),c=te(se(i)),a=te(se(l));return a>=c?null:{indices:e,source:i,projected:l,vertexMoves:di(i,l),score:c-a}}function Ci(e,n){return Or(e)<=0?0:n.maxPlaneDisplacement}function Or(e){let n=1/0,r=1/0,t=1/0,o=-1/0,s=-1/0,i=-1/0;for(let c of e)for(let[a,u,f]of c.vertices)n=Math.min(n,a),r=Math.min(r,u),t=Math.min(t,f),o=Math.max(o,a),s=Math.max(s,u),i=Math.max(i,f);if(!Number.isFinite(n))return 0;let l=Math.hypot(o-n,s-r,i-t);return l<=0?0:Math.min(.025,Math.max(1e-4,l*25e-5))}function Vi(e){let n=new Map,r=o=>Math.floor(o/e),t=(o,s,i)=>`${o},${s},${i}`;return{snap(o){let s=r(o[0]),i=r(o[1]),l=r(o[2]);for(let f=-1;f<=1;f++)for(let g=-1;g<=1;g++)for(let m=-1;m<=1;m++){let p=n.get(t(s+f,i+g,l+m));if(p){for(let d of p)if(pe(o,d)<=e)return[d[0],d[1],d[2]]}}let c=[o[0],o[1],o[2]],a=t(s,i,l),u=n.get(a);return u?u.push(c):n.set(a,[c]),c}}}function Si(e){let n=new Map,r=o=>Math.floor(o/e),t=(o,s)=>`${o},${s}`;return{snap(o){let s=r(o[0]),i=r(o[1]);for(let u=-1;u<=1;u++)for(let f=-1;f<=1;f++){let g=n.get(t(s+u,i+f));if(g){for(let m of g)if(Math.hypot(o[0]-m[0],o[1]-m[1])<=e)return[m[0],m[1]]}}let l=[o[0],o[1]],c=t(s,i),a=n.get(c);return a?a.push(l):n.set(c,[l]),l}}}function st(e){return`${e.color??"#cccccc"}|${e.texture??""}|${e.uvs?"uv":"plain"}`}function Ke(e){let n=e.vertices;if(!n||n.length<3)return null;let r=0,t=0,o=0,s=n[0];for(let l=1;l<n.length-1;l++){let c=He(n[l],s),a=He(n[l+1],s),u=Nr(c,a);r+=u[0],t+=u[1],o+=u[2]}let i=Math.hypot(r,t,o);return i<=1e-10?null:{normal:[r/i,t/i,o/i],area:i/2}}function Ti(e,n){let r=new Map,t=new Map;for(let o=0;o<e.length;o++){let s=e[o];if(!(!n[o]||s.vertices.length<3))for(let i=0;i<s.vertices.length;i++){let l=ke(s.vertices[i],s.vertices[(i+1)%s.vertices.length]),c=r.get(l);c?c.push(o):r.set(l,[o])}}for(let o of r.values())for(let s=0;s<o.length;s++)for(let i=s+1;i<o.length;i++){let l=o[s],c=o[i];wi(e[l],e[c],n[l],n[c])&&(hr(t,l,c),hr(t,c,l))}return t}function wi(e,n,r,t){if(!r||!t||r.materialKey!==t.materialKey||!!e.uvs!=!!n.uvs)return!1;if(fn(e)||fn(n))return it(e,n);if(!e.uvs||!n.uvs)return!0;let o=ct(e,n);if(!o)return!1;let[s,i,l,c]=o;return mn(e.uvs[s],n.uvs[l])&&mn(e.uvs[i],n.uvs[c])}function Rr(e,n,r,t){return r.materialKey!==t.materialKey?!1:fn(e)||fn(n)?it(e,n):!e.uvs&&!n.uvs&&!e.textureTriangles?.length&&!n.textureTriangles?.length}function fn(e){return!!(e.texture||e.material?.texture||e.textureTriangles?.length)}function it(e,n){if(!e.texture||!n.texture||e.texture!==n.texture||e.material?.texture||n.material?.texture||!e.uvs||!n.uvs||e.uvs.length!==e.vertices.length||n.uvs.length!==n.vertices.length)return!1;let r=ct(e,n);if(!r)return!1;let[t,o,s,i]=r;return mn(e.uvs[t],n.uvs[s])&&mn(e.uvs[o],n.uvs[i])}function hr(e,n,r){let t=e.get(n);t?t.add(r):e.set(n,new Set([r]))}function Ii(e,n,r,t,o,s){let i=[e],l=new Set([e]),c=[e];for(;c.length>0;){let a=c.shift();for(let u of r.get(a)??[]){if(t.has(u)||l.has(u))continue;let f=n[u],g=n[e];!f||!g||f.materialKey===g.materialKey&&Ei([...i,u],n,o,s)&&(i.push(u),l.add(u),c.push(u))}}return i}function Ei(e,n,r,t){let o=Lr(e,n);return!!o&&kr(e,n,o,r,t)}function Lr(e,n){let r=n[e[0]];if(!r)return null;let t=0,o=0,s=0,i=0,l=0,c=0,a=0;for(let m of e){let p=n[m];if(!p)return null;let d=ue(r.normal,p.normal)<0?-1:1,y=Math.max(p.area,1e-6);t+=p.normal[0]*d*y,o+=p.normal[1]*d*y,s+=p.normal[2]*d*y;for(let b of p.polygon.vertices)i+=b[0],l+=b[1],c+=b[2],a+=1}let u=Gr([t,o,s]);if(!u||a===0)return null;let f=_r(e,n),g=Oi(e,n,u,f);if(g){let m=(g.min+g.max)/2;return{normal:u,point:[u[0]*m,u[1]*m,u[2]*m]}}return{normal:u,point:[i/a,l/a,c/a]}}function Oi(e,n,r,t){let o=1/0,s=-1/0;for(let i of e){let l=n[i];if(l)for(let c of l.polygon.vertices){if(!t.has(ee(c)))continue;let a=ue(c,r);o=Math.min(o,a),s=Math.max(s,a)}}return Number.isFinite(o)&&Number.isFinite(s)?{min:o,max:s}:null}function kr(e,n,r,t,o){let s=Math.cos(o.maxAngleDeg*Math.PI/180),i=_r(e,n);for(let l of e){let c=n[l];if(!c||Math.abs(ue(c.normal,r.normal))<s)return!1;for(let a of c.polygon.vertices){let u=i.has(ee(a))?o.maxBoundaryDisplacement:t;if(Math.abs(xn(a,r))>u)return!1}}return!0}function _r(e,n){let r=new Map;for(let o of e){let s=n[o];if(!s)continue;let i=s.polygon.vertices;for(let l=0;l<i.length;l++){let c=i[l],a=i[(l+1)%i.length],u=ke(c,a),f=r.get(u);f?f.count+=1:r.set(u,{count:1,a:c,b:a})}}let t=new Set;for(let o of r.values())o.count===1&&(t.add(ee(o.a)),t.add(ee(o.b)));return t}function Ri(e,n){let r=o=>hn(o,n),t=ot(e.textureTriangles,r);return{...e,vertices:e.vertices.map(r),...t?{textureTriangles:t}:{}}}function ct(e,n){for(let r=0;r<e.vertices.length;r++){let t=(r+1)%e.vertices.length;for(let o=0;o<n.vertices.length;o++){let s=(o+1)%n.vertices.length;if(Pe(e.vertices[r],n.vertices[o])&&Pe(e.vertices[t],n.vertices[s]))return[r,t,o,s];if(Pe(e.vertices[r],n.vertices[s])&&Pe(e.vertices[t],n.vertices[o]))return[r,t,s,o]}}return null}function ke(e,n){let r=ee(e),t=ee(n);return r<t?`${r}|${t}`:`${t}|${r}`}function ee(e){return`${e[0]},${e[1]},${e[2]}`}function Pe(e,n){return e[0]===n[0]&&e[1]===n[1]&&e[2]===n[2]}function mn(e,n){return Math.abs(e[0]-n[0])<=1e-4&&Math.abs(e[1]-n[1])<=1e-4}function He(e,n){return[e[0]-n[0],e[1]-n[1],e[2]-n[2]]}function Nr(e,n){return[e[1]*n[2]-e[2]*n[1],e[2]*n[0]-e[0]*n[2],e[0]*n[1]-e[1]*n[0]]}function ue(e,n){return e[0]*n[0]+e[1]*n[1]+e[2]*n[2]}function pe(e,n){return Math.hypot(e[0]-n[0],e[1]-n[1],e[2]-n[2])}function Gr(e){let n=Math.hypot(e[0],e[1],e[2]);return n<=1e-10?null:[e[0]/n,e[1]/n,e[2]/n]}function xn(e,n){return ue(He(e,n.point),n.normal)}function hn(e,n){let r=xn(e,n);return[e[0]-n.normal[0]*r,e[1]-n.normal[1]*r,e[2]-n.normal[2]*r]}var We=1e-5,at=.001,lt=6;function yn(e){let n=e.vertices;if(n.length<3)return null;let r=n[0],t=0,o=0,s=0;for(let l=1;l+1<n.length;l++){let c=n[l],a=n[l+1],u=c[1]-r[1],f=c[0]-r[0],g=c[2]-r[2],m=a[1]-r[1],p=a[0]-r[0],d=a[2]-r[2];t-=f*d-g*p,o-=g*m-u*d,s-=u*p-f*m}let i=Math.hypot(t,o,s);return i<1e-9?null:[t/i,o/i,s/i]}function ut(e,n){let r=n.meshRotation,t=r?De(e,r[0]??0,r[1]??0,r[2]??0):e;return De(t,n.rotX,0,n.rotY)[2]}function bn(e,n,r=We){return ut(e,n)>r}function Dr(e,n,r=We){let t=yn(e);return t===null||bn(t,n,r)}function ft(e){return`${e[0].toFixed(4)},${e[1].toFixed(4)},${e[2].toFixed(4)}`}function mt(e){let n=new Map;for(let r of e){if(!r)continue;let t=ft(r);n.has(t)||n.set(t,r)}return Array.from(n,([r,t])=>({key:r,normal:t}))}function zr(e){return mt(e.map(yn))}function gt(e,n=at){let r=Math.abs(e[0]),t=Math.abs(e[1]),o=Math.abs(e[2]),s=Math.max(r,t,o);return s>1-n&&r+t+o-s<n}function Ur(e){return e.length<=lt&&e.every(({normal:n})=>gt(n))}function Fr(e,n,r=We){let t=[];for(let{key:o,normal:s}of e)bn(s,n,r)&&t.push(o);return t.sort(),t.join("|")}function pt(e,n,r,t,o){let s=(p,d,y)=>{let b=[0,0,0];return b[e]=p,b[(e+1)%3]=d,b[(e+2)%3]=y,b},i=s(n,-t,-t),l=s(n,t,-t),c=s(n,t,t),a=s(n,-t,t),u=s(r,-t,-t),f=s(r,t,-t),g=s(r,t,t),m=s(r,-t,t);return[{vertices:[i,l,c,a],color:o},{vertices:[u,f,g,m],color:o},{vertices:[i,l,f,u],color:o},{vertices:[l,c,g,f],color:o},{vertices:[c,a,m,g],color:o},{vertices:[a,i,u,m],color:o}]}function dt(e={}){let n=e.size??5,r=e.thickness??.025,t=e.negative??!1,o=e.xColor??"#ff3a3a",s=e.yColor??"#3aff3a",i=e.zColor??"#3a8aff",l=n*r/2,c=t?-n:0;return[...pt(0,c,n,l,o),...pt(1,c,n,l,s),...pt(2,c,n,l,i)]}function $r(e,n,r,t){let o=[0,0,0];return o[e]=n,o[(e+1)%3]=r,o[(e+2)%3]=t,o}function Li(e,n,r,t,o){let s=(p,d,y)=>$r(e,p,d,y),i=s(n,-t,-t),l=s(n,t,-t),c=s(n,t,t),a=s(n,-t,t),u=s(r,-t,-t),f=s(r,t,-t),g=s(r,t,t),m=s(r,-t,t);return[{vertices:[i,l,c,a],color:o},{vertices:[u,f,g,m],color:o},{vertices:[i,l,f,u],color:o},{vertices:[l,c,g,f],color:o},{vertices:[c,a,m,g],color:o},{vertices:[a,i,u,m],color:o}]}function ki(e,n,r,t,o){let s=(f,g,m)=>$r(e,f,g,m),i=s(n,-t,-t),l=s(n,t,-t),c=s(n,t,t),a=s(n,-t,t),u=s(r,0,0);return[{vertices:[i,l,c,a],color:o},{vertices:[i,l,u],color:o},{vertices:[l,c,u],color:o},{vertices:[c,a,u],color:o},{vertices:[a,i,u],color:o}]}function _i(e){return e.map(n=>({...n,vertices:[...n.vertices].reverse()}))}function xt(e){let n=e.axis,r=e.sign??1,t=e.shaftLength??4,o=e.shaftHalfThickness??.05,s=e.headLength??.8,i=e.headHalfThickness??.2,l=e.color??"#ffffff",c=e.shaft??!0,a=t*r,u=Math.min(0,a),f=Math.max(0,a),g=a,m=(t+s)*r,p=ki(n,g,m,i,l),d=r===-1?_i(p):p;return c?[...Li(n,u,f,o,l),...d]:d}function Pn(e,n,r){let t=[0,0,0],o=(e+1)%3,s=(e+2)%3;return t[o]=Math.cos(r)*n,t[s]=Math.sin(r)*n,t}function ht(e){let n=e.axis,r=e.radius,t=e.halfThickness??Math.max(.05,r*.04),o=e.segments??32,s=e.color??"#ffffff",i=r-t,l=r+t,c=[];for(let a=0;a<o;a++){let u=a/o*Math.PI*2,f=(a+1)/o*Math.PI*2,g=Pn(n,i,u),m=Pn(n,i,f),p=Pn(n,l,u),d=Pn(n,l,f);c.push({vertices:[g,p,d,m],color:s})}return c}function yt(e){let n=e.axis,r=e.outerRadius,t=e.color??"#ffffff",o=(n+1)%3,s=(n+2)%3,i=(l,c)=>{let a=[0,0,0];return a[n]=0,a[o]=l,a[s]=c,a};return[{vertices:[i(-r,-r),i(r,-r),i(r,r),i(-r,r)],color:t}]}function bt(e){let n=e.axis,r=e.size??.4,t=e.offset??r*2,o=typeof t=="number"?t:t[0],s=typeof t=="number"?t:t[1],i=e.along??0,l=e.color??"#ffffff",c=(n+1)%3,a=(n+2)%3,u=(f,g)=>{let m=[0,0,0];return m[n]=i,m[c]=o+f,m[a]=s+g,m};return[{vertices:[u(-r,-r),u(r,-r),u(r,r),u(-r,r)],color:l}]}function Pt(e){let{center:n,size:r,color:t="#ffffff"}=e,[o,s,i]=n,l=[[o+r,s,i],[o-r,s,i],[o,s+r,i],[o,s-r,i],[o,s,i+r],[o,s,i-r]];return[[0,2,4],[2,1,4],[1,3,4],[3,0,4],[2,0,5],[1,2,5],[3,1,5],[0,3,5]].map(a=>({vertices:[l[a[0]],l[a[1]],l[a[2]]],color:t}))}var Br=2200,jr=2201,Xr=2202;function Ni(e,n){let r=0,t=1,o=1,s=2201,i=1/0,l=0,c=!1,a=null,u=!0,f=!1,g={clampWhenFinished:!1,get timeScale(){return o},set timeScale(m){o=m},get weight(){return t},set weight(m){t=m},get time(){return r},set time(m){r=m},get isRunning(){return c},get enabled(){return u},set enabled(m){u=m},get paused(){return f},set paused(m){f=m},play(){return c=!0,g},stop(){return c=!1,r=0,l=0,a=null,g},reset(){return r=0,l=0,g},fadeIn(m){return a={from:0,to:1,elapsed:0,duration:m},t=0,g},fadeOut(m){return a={from:t,to:0,elapsed:0,duration:m},g},crossFadeTo(m,p){return g.fadeOut(p),m.fadeIn(p),g},crossFadeFrom(m,p){return m.fadeOut(p),g.fadeIn(p),g},setLoop(m,p){return s=m,i=p,g},setEffectiveTimeScale(m){return o=m,g},setEffectiveWeight(m){return t=m,g}};return g._internal={get clip(){return e},get time(){return r},get weight(){return t},get enabled(){return u},get paused(){return f},get running(){return c},get loopMode(){return s},get repetitions(){return i},get completedReps(){return l},set completedReps(m){l=m},get clampWhenFinished(){return g.clampWhenFinished},get timeScale(){return o},get fade(){return a},advance(m){if(!c)return;if(a){a.elapsed+=m;let d=a.duration>0?Math.min(a.elapsed/a.duration,1):1;if(t=a.from+(a.to-a.from)*d,d>=1&&(t=a.to,a=null,t<=0)){c=!1;return}}if(f)return;let p=e.duration;if(!(p<=0)){if(r+=m*o,s===2200)r>=p&&(r=g.clampWhenFinished?p:0,c=!1);else if(s===2201){if(r>=p){let d=r%p,y=Math.floor(r/p);l+=y,r=d,i!==1/0&&l>=i&&(r=g.clampWhenFinished?p:0,c=!1)}}else if(p>0){let d=p*2,y=r%d;if(r>=d){let b=Math.floor(r/d);l+=b,i!==1/0&&l>=i?(r=g.clampWhenFinished?p:0,c=!1):r=y}}}},sampleTime(){if(s===2202){let m=e.duration,p=m*2,d=r%p;return d<=m?d:p-d}return r}},g}function Gi(e){return e._internal}function Mt(e,n){return typeof n=="number"?e[n]:e.find(r=>r.name===n)}function Yr(e,n){let r=new Map;function t(a){let u=Mt(n.clips,a);if(!u)throw new Error(`GlyphcssAnimationMixer: no clip found for key "${a}". Available: ${n.clips.map(g=>g.name).join(", ")}`);let f=r.get(u.index);return f||(f=Ni(u,n),r.set(u.index,f)),f}function o(a){let u=Mt(n.clips,a);return u?r.get(u.index)??null:null}function s(a){let u=[];for(let d of r.values()){let y=Gi(d);y.advance(a),y.running&&y.enabled&&u.push({internal:y,clip:y.clip})}if(u.length===0)return;if(u.length===1){let{internal:d,clip:y}=u[0],b=n.sample(y.name,d.sampleTime());e.setPolygons(b);return}let f=0;for(let{internal:d}of u)f+=d.weight;if(f<=0)return;let g=u.map(({internal:d,clip:y})=>({polygons:n.sample(y.name,d.sampleTime()),weight:d.weight/f})),m=g[0].polygons;if(m.length===0)return;let p=m.map((d,y)=>{let b=d.vertices.map((M,v)=>{let P=0,x=0,A=0;for(let{polygons:T,weight:V}of g){let w=T[y];if(!w)continue;let O=w.vertices[v];O&&(P+=O[0]*V,x+=O[1]*V,A+=O[2]*V)}return[P,x,A]});return{...d,vertices:b}});e.setPolygons(p)}function i(){for(let a of r.values())a.stop()}function l(a){let u=Mt(n.clips,a);u&&r.delete(u.index)}function c(){r.clear()}return{clipAction:t,existingAction:o,update:s,stopAllAction:i,uncacheClip:l,uncacheRoot:c}}var Di=/^[0-9A-Fa-f]{6}$/,zi=["#3b82f6","#ef4444","#22c55e","#eab308","#a855f7","#06b6d4","#f97316","#ec4899"];function Mn(e,n){let r=n?.targetSize??60,t=n?.gridShift??1,o=n?.defaultColor??"#888888",s=n?.palette??zi,i=n?.materialColors??{},l=n?.materialTextures??{},c=[],a=[],u=[],f=[],g=new Map,m=o,p,d=n?.includeObjects?new Set(n.includeObjects):null,y=n?.excludeObjects?new Set(n.excludeObjects):null,b=null,M=()=>b===null?d===null:!(d&&!d.has(b)||y&&y.has(b)),v=E=>E in i?i[E]:Di.test(E)?`#${E}`:(g.has(E)||(g.set(E,s[f.length%s.length]),f.push(E)),g.get(E)),P=e.split(`
|
|
2
|
-
`);for(let
|
|
3
|
-
`)){let s=o.trim();if(!(s.length===0||s.charCodeAt(0)===35)){if(s.startsWith("newmtl ")){t=s.slice(7).trim();continue}if(t){if(s.startsWith("Kd ")){let i=s.split(/\s+/),l=parseFloat(i[1]),c=parseFloat(i[2]),a=parseFloat(i[3]);Number.isFinite(l)&&Number.isFinite(c)&&Number.isFinite(a)&&(n[t]=`#${vt(l)}${vt(c)}${vt(a)}`)}else if(s.startsWith("map_Kd ")){let i=s.split(/\s+/),l=i[i.length-1]?.replace(/\\+/g,"/");l&&l!=="map_Kd"&&(r[t]=l)}}}}return{colors:n,textures:r}}var Qr={5120:1,5121:1,5122:2,5123:2,5125:4,5126:4},qr={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16};function Jr(e){let n=globalThis.TextDecoder;return new n().decode(e)}function Fi(e){let n=e.indexOf(",");if(n<0)throw new Error("parseGltf: malformed data: URI");let r=e.slice(5,n),t=e.slice(n+1);if(!r.includes(";base64")){let i=decodeURIComponent(t),l=new Uint8Array(i.length);for(let c=0;c<i.length;c++)l[c]=i.charCodeAt(c)&255;return l}let o=globalThis.atob(t),s=new Uint8Array(o.length);for(let i=0;i<o.length;i++)s[i]=o.charCodeAt(i);return s}function $i(e,n){let r=e.buffers?.[0];if(!r)throw new Error("parseGltf: JSON doc has no buffers[0]");let t=r.uri;if(!t)throw new Error("parseGltf: JSON doc buffer has no uri (and there's no GLB BIN chunk)");if(t.startsWith("data:"))return Fi(t);if(n){let o=n(t);if(o instanceof Uint8Array)return o;throw new Error("parseGltf: resolveBuffer returned a Promise; use parseGltf via async if your buffers are external")}throw new Error(`parseGltf: external buffer URI "${t}" \u2014 provide options.resolveBuffer`)}function Bi(e){let n=new DataView(e);if(n.getUint32(0,!0)!==1179937895)throw new Error("parseGltf: not a GLB (bad magic)");let r=n.getUint32(4,!0);if(r!==2)throw new Error(`parseGltf: only glTF v2 supported (got v${r})`);let t=12,o=null,s=null;for(;t<e.byteLength;){let i=n.getUint32(t,!0),l=n.getUint32(t+4,!0),c=t+8;if(l===1313821514){let a=new Uint8Array(e,c,i);o=JSON.parse(Jr(a))}else l===5130562&&(s=new Uint8Array(e,c,i));t=c+i}if(!o)throw new Error("parseGltf: no JSON chunk in GLB");return{doc:o,bin:s}}function At(e,n,r){let t=e.accessors?.[r],o=e.bufferViews?.[t?.bufferView??-1];if(!t||!o)throw new Error(`parseGltf: bad accessor/bufferView ${r}`);let s=Qr[t.componentType],i=qr[t.type];if(!s||!i)throw new Error(`parseGltf: unsupported accessor type ${t.type}/${t.componentType}`);let l=(o.byteOffset??0)+(t.byteOffset??0),c=t.count*i,a=n.buffer.slice(n.byteOffset+l,n.byteOffset+l+c*s),u;switch(t.componentType){case 5126:u=new Float32Array(a);break;case 5123:u=new Uint16Array(a);break;case 5125:u=new Uint32Array(a);break;case 5121:u=new Uint8Array(a);break;default:throw new Error(`parseGltf: unhandled componentType ${t.componentType}`)}return{array:u,count:t.count,componentCount:i}}function ji(e,n,r){switch(r){case 5120:return e.getInt8(n);case 5121:return e.getUint8(n);case 5122:return e.getInt16(n,!0);case 5123:return e.getUint16(n,!0);case 5125:return e.getUint32(n,!0);case 5126:return e.getFloat32(n,!0);default:throw new Error(`parseGltf: unhandled componentType ${r}`)}}function Xi(e,n){switch(n){case 5120:return Math.max(e/127,-1);case 5121:return e/255;case 5122:return Math.max(e/32767,-1);case 5123:return e/65535;default:return e}}function Vn(e,n,r){let t=e.accessors?.[r],o=e.bufferViews?.[t?.bufferView??-1];if(!t||!o)throw new Error(`parseGltf: bad accessor/bufferView ${r}`);let s=Qr[t.componentType],i=qr[t.type];if(!s||!i)throw new Error(`parseGltf: unsupported accessor type ${t.type}/${t.componentType}`);let l=n.byteOffset+(o.byteOffset??0)+(t.byteOffset??0),c=o.byteStride??s*i,a=new DataView(n.buffer),u=new Array(t.count*i),f=0;for(let g=0;g<t.count;g++){let m=l+g*c;for(let p=0;p<i;p++){let d=ji(a,m+p*s,t.componentType);u[f++]=t.normalized?Xi(d,t.componentType):d}}return{values:u,count:t.count,componentCount:i}}function Yi(e,n,r){let t=[],o=[],s=globalThis;for(let i of e.images??[]){if(i.uri){if(r&&!i.uri.startsWith("data:"))try{t.push(new s.URL(i.uri,r).href)}catch{t.push(i.uri)}else t.push(i.uri);continue}if(i.bufferView!==void 0){let l=e.bufferViews?.[i.bufferView];if(!l){t.push("");continue}let c=l.byteOffset??0,a=n.subarray(c,c+l.byteLength),u=i.mimeType??"image/png",f=new s.Blob([a],{type:u}),g=s.URL.createObjectURL(f);t.push(g),o.push(g)}else t.push("")}return{urls:t,objectUrls:o}}function Hi(e,n){let r=new Map,t=e.materials??[];for(let o=0;o<t.length;o++){let s=t[o].pbrMetallicRoughness?.baseColorTexture?.index;if(s===void 0)continue;let i=e.textures?.[s]?.source;if(i===void 0)continue;let l=n[i];l&&r.set(o,l)}return r}function Ki(e,n){let r=e?.pbrMetallicRoughness?.baseColorFactor;if(!r||r.length<3)return n;let t=l=>Math.max(0,Math.min(1,l)),o=l=>Math.round(t(l)*255).toString(16).padStart(2,"0"),s=l=>Math.round(t(l)*255),i=t(r[3]??1);return i<1?`rgba(${s(r[0])}, ${s(r[1])}, ${s(r[2])}, ${Math.round(i*1e3)/1e3})`:`#${o(r[0])}${o(r[1])}${o(r[2])}`}var _e=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function Ct(e,n){let r=new Array(16);for(let t=0;t<4;t++)for(let o=0;o<4;o++)r[o*4+t]=e[0+t]*n[o*4+0]+e[4+t]*n[o*4+1]+e[8+t]*n[o*4+2]+e[12+t]*n[o*4+3];return r}function Cn(e,n){return[e[0]*n[0]+e[4]*n[1]+e[8]*n[2]+e[12],e[1]*n[0]+e[5]*n[1]+e[9]*n[2]+e[13],e[2]*n[0]+e[6]*n[1]+e[10]*n[2]+e[14]]}function eo(e,n,r){let t=e?.[0]??0,o=e?.[1]??0,s=e?.[2]??0,i=n?.[0]??0,l=n?.[1]??0,c=n?.[2]??0,a=n?.[3]??1,u=r?.[0]??1,f=r?.[1]??1,g=r?.[2]??1,m=i+i,p=l+l,d=c+c,y=i*m,b=i*p,M=i*d,v=l*p,P=l*d,x=c*d,A=a*m,T=a*p,V=a*d;return[(1-(v+x))*u,(b+V)*u,(M-T)*u,0,(b-V)*f,(1-(y+x))*f,(P+A)*f,0,(M+T)*g,(P-A)*g,(1-(y+v))*g,0,t,o,s,1]}function Wi(e){return e.matrix&&e.matrix.length===16?e.matrix.slice():eo(e.translation,e.rotation,e.scale)}function Zi(e,n){return[e[0]+n[0],e[1]+n[1],e[2]+n[2]]}function Hr(e,n){return[e[0]*n,e[1]*n,e[2]*n]}function no(e,n,r){let t=new Array(Math.min(e.length,n.length));for(let o=0;o<t.length;o++)t[o]=e[o]+(n[o]-e[o])*r;return t}function Ze(e){let n=Math.hypot(e[0]??0,e[1]??0,e[2]??0,e[3]??1)||1;return[(e[0]??0)/n,(e[1]??0)/n,(e[2]??0)/n,(e[3]??1)/n]}function Qi(e,n,r){let t=Ze(e),o=Ze(n),s=t[0]*o[0]+t[1]*o[1]+t[2]*o[2]+t[3]*o[3];if(s<0&&(s=-s,o=[-o[0],-o[1],-o[2],-o[3]]),s>.9995)return Ze(no(t,o,r));let i=Math.acos(Math.max(-1,Math.min(1,s))),l=Math.sin(i),c=Math.sin((1-r)*i)/l,a=Math.sin(r*i)/l;return Ze([t[0]*c+o[0]*a,t[1]*c+o[1]*a,t[2]*c+o[2]*a,t[3]*c+o[3]*a])}function qi(e){return{translation:e?.translation?.slice()??[0,0,0],rotation:e?.rotation?.slice()??[0,0,0,1],scale:e?.scale?.slice()??[1,1,1],matrix:e?.matrix&&e.matrix.length===16?e.matrix.slice():void 0}}function Kr(e){return e.matrix?e.matrix.slice():eo(e.translation,e.rotation,e.scale)}function Ji(e){let n=e.scene??0,r=e.scenes?.[n]?.nodes;return r&&r.length>0?r:[]}function Wr(e,n){let r=e.nodes??[],t=new Array(r.length),o=new Set,s=(l,c)=>{if(l<0||l>=r.length)return;let a=Ct(c,n[l]??_e);t[l]=a,o.add(l);for(let u of r[l].children??[])s(u,a)},i=Ji(e);if(i.length>0)for(let l of i)s(l,_e);for(let l=0;l<r.length;l++)o.has(l)||s(l,_e);return t}function Zr(e,n,r,t,o){if(r===void 0)return;let{values:s,count:i,componentCount:l}=Vn(e,n,r);if(i!==o||l<1)return;let c=[];for(let a=0;a<i;a++){let u=[];for(let f=0;f<t;f++)u.push(s[a*l+f]??0);c.push(u)}return c}function ec(e,n,r,t){if(r===void 0)return Array.from({length:t},()=>_e.slice());let{values:o,componentCount:s,count:i}=Vn(e,n,r);if(s!==16)throw new Error(`parseGltf: inverseBindMatrices accessor ${r} is not MAT4`);let l=[];for(let c=0;c<t;c++){let a=Math.min(c,i-1);l.push(o.slice(a*16,a*16+16))}return l}function An(e,n){let r=e.componentCount,t=e.interpolation==="CUBICSPLINE"?(n*3+1)*r:n*r;return e.output.slice(t,t+r)}function nc(e,n,r){let t=e.input;if(t.length===0)return[];if(t.length===1||n<=t[0])return An(e,0);let o=t.length-1;if(n>=t[o])return An(e,o);let s=0,i=o;for(;s+1<i;){let g=s+i>>1;t[g]<=n?s=g:i=g}let l=t[s],c=t[s+1],a=c>l?(n-l)/(c-l):0,u=An(e,s),f=An(e,s+1);return e.interpolation==="STEP"?u:r==="rotation"?Qi(u,f,a):no(u,f,a)}function tc(e,n,r,t){let o=e.animations??[];if(o.length===0||r.length===0)return;let s=(e.nodes??[]).map(m=>qi(m)),i=s.map(Kr),l=Wr(e,i),c=(e.skins??[]).map(m=>({joints:m.joints??[],inverseBindMatrices:ec(e,n,m.inverseBindMatrices,m.joints?.length??0)})),a=[];for(let m=0;m<o.length;m++){let p=o[m],d=(p.samplers??[]).map(M=>{let v=Vn(e,n,M.input),P=Vn(e,n,M.output);return{input:v.values,output:P.values,componentCount:P.componentCount,interpolation:M.interpolation??"LINEAR"}}),y=[];for(let M of p.channels??[]){let v=M.target.node,P=M.target.path,x=d[M.sampler];v===void 0||!P||!x||P==="weights"||y.push({sampler:x,targetNode:v,path:P})}let b=y.reduce((M,v)=>{let P=v.sampler.input;return Math.max(M,P[P.length-1]??0)},0);a.push({info:{index:m,name:p.name??`animation_${m}`,duration:b,channelCount:y.length},channels:y})}let u=a.map(m=>m.info);if(u.length===0)return;let f=(m,p,d,y,b,M)=>{let v=t(m),P=t(p),x=t(d);if(v[0]===P[0]&&v[1]===P[1]&&v[2]===P[2]||v[0]===x[0]&&v[1]===x[1]&&v[2]===x[2]||P[0]===x[0]&&P[1]===x[1]&&P[2]===x[2])return null;let A={vertices:[v,P,x],color:y};return b&&(A.texture=b),M&&(A.uvs=M),A};return{clips:u,sample:(m,p)=>{let d=typeof m=="number"?a[m]:a.find(x=>x.info.name===m);if(!d)return[];let y=d.info.duration,b=y>0?(p%y+y)%y:Math.max(0,p),M=s.map(x=>({translation:x.translation.slice(),rotation:x.rotation.slice(),scale:x.scale.slice(),matrix:x.matrix?x.matrix.slice():void 0}));for(let x of d.channels){let A=M[x.targetNode];if(!A)continue;let T=nc(x.sampler,b,x.path);A.matrix=void 0,x.path==="translation"?A.translation=T.slice(0,3):x.path==="rotation"?A.rotation=Ze(T.slice(0,4)):x.path==="scale"&&(A.scale=T.slice(0,3))}let v=Wr(e,M.map(Kr)),P=[];for(let x of r){let A=[];if(x.skinIndex!==void 0&&x.joints&&x.weights&&c[x.skinIndex]){let T=c[x.skinIndex];for(let V=0;V<x.positions.length;V++){let w=x.positions[V],O=[0,0,0],L=0,U=x.joints[V]??[],R=x.weights[V]??[];for(let D=0;D<4;D++){let k=R[D]??0;if(k<=0)continue;let _=Math.round(U[D]??0),E=T.joints[_],C=v[E],h=T.inverseBindMatrices[_];if(!C||!h)continue;let S=Ct(C,h);O=Zi(O,Hr(Cn(S,w),k)),L+=k}A.push(L>0?Hr(O,1/L):Cn(x.meshBindWorld,w))}}else{let T=x.meshNode!==null?v[x.meshNode]??x.meshBindWorld:x.meshBindWorld;for(let V of x.positions)A.push(Cn(T,V))}for(let T=0;T+2<x.indices.length;T+=3){let V=x.indices[T],w=x.indices[T+1],O=x.indices[T+2],L=A[V],U=A[w],R=A[O];if(!L||!U||!R)continue;let D;if(x.uvs&&x.texture){let _=x.uvs[V],E=x.uvs[w],C=x.uvs[O];_&&E&&C&&(D=[_,E,C])}let k=f(L,U,R,x.color,x.texture,D);k&&P.push(k)}}return P}}}function Sn(e,n){let r=n?.targetSize??60,t=n?.gridShift??1,o=n?.defaultColor??"#888888",s=n?.materialColors??{},i=e instanceof Uint8Array?e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength):e,l=i.byteLength,c,a;if(i.byteLength>=4&&new DataView(i).getUint32(0,!0)===1179937895){let h=Bi(i);if(c=h.doc,!h.bin)throw new Error("parseGltf: GLB has no binary chunk");a=h.bin}else c=JSON.parse(Jr(new Uint8Array(i))),a=$i(c,n?.resolveBuffer);let{urls:u,objectUrls:f}=Yi(c,a,n?.baseUrl),g=Hi(c,u),m=[],p=[],d=(c.meshes??[]).map((h,S)=>h.name??`mesh_${S}`),y=(c.materials??[]).map((h,S)=>h.name??`material_${S}`);function b(h,S,I){let G=c.meshes?.[h];if(G)for(let N of G.primitives){if((N.mode??4)!==4)continue;let z=N.material!==void 0?c.materials?.[N.material]?.name:void 0,H=(z?s[z]:void 0)??Ki(N.material!==void 0?c.materials?.[N.material]:void 0,o),K=N.material!==void 0?g.get(N.material):void 0,{array:Z,count:J}=At(c,a,N.attributes.POSITION);if(!(Z instanceof Float32Array))continue;let oe=[],Q=[];for(let W=0;W<J;W++){let $=[Z[W*3],Z[W*3+1],Z[W*3+2]];oe.push($),Q.push(Cn(S,$))}let q=null,ae=N.attributes.TEXCOORD_0;if(K&&ae!==void 0){let{array:W,count:$}=At(c,a,ae);q=[];let Y=1;W instanceof Uint8Array?Y=1/255:W instanceof Uint16Array&&(Y=1/65535);for(let ie=0;ie<$;ie++){let de=W[ie*2]*Y,ve=W[ie*2+1]*Y;q.push([de,1-ve])}}let re;if(N.indices!==void 0){let{array:W,count:$}=At(c,a,N.indices);re=[];for(let Y=0;Y<$;Y++)re.push(Number(W[Y]))}else re=Q.map((W,$)=>$);if((c.animations?.length??0)>0){let W=Zr(c,a,N.attributes.JOINTS_0,4,J),$=Zr(c,a,N.attributes.WEIGHTS_0,4,J);p.push({meshNode:I,meshBindWorld:S,skinIndex:I!==null?c.nodes?.[I]?.skin:void 0,positions:oe,indices:re,color:H,texture:K,uvs:q??void 0,joints:W,weights:$})}for(let W=0;W+2<re.length;W+=3){let $=Q[re[W]],Y=Q[re[W+1]],ie=Q[re[W+2]];if(!$||!Y||!ie)continue;let de;if(q&&K){let ve=q[re[W]],Ie=q[re[W+1]],Ee=q[re[W+2]];ve&&Ie&&Ee&&(de=[ve,Ie,Ee])}m.push({v0:$,v1:Y,v2:ie,color:H,texture:K,uvs:de})}}}function M(h,S){let I=c.nodes?.[h];if(!I)return;let G=Ct(S,Wi(I));typeof I.mesh=="number"&&b(I.mesh,G,h);for(let N of I.children??[])M(N,G)}let v=c.scene??0,P=c.scenes?.[v]?.nodes;if(P&&P.length>0)for(let h of P)M(h,_e);else for(let h=0;h<(c.meshes?.length??0);h++)b(h,_e,null);let x=rc(f);if(m.length===0)return{polygons:[],objectUrls:f,dispose:x,warnings:[],metadata:{triangleCount:0,meshes:d,materials:y,sourceBytes:l}};let A=1/0,T=1/0,V=1/0,w=-1/0,O=-1/0,L=-1/0;for(let h of m)for(let S of[h.v0,h.v1,h.v2])S[0]<A&&(A=S[0]),S[0]>w&&(w=S[0]),S[1]<T&&(T=S[1]),S[1]>O&&(O=S[1]),S[2]<V&&(V=S[2]),S[2]>L&&(L=S[2]);let U=Math.max(w-A,O-T,L-V),R=U>0?r/U:1,D=h=>Math.round(h*1e3)/1e3,_=(n?.upAxis??"y")==="z"?([h,S,I])=>[D((h-A)*R+t),D((S-T)*R+t),D((I-V)*R+t)]:([h,S,I])=>[D((I-V)*R+t),D((h-A)*R+t),D((S-T)*R+t)],E=tc(c,a,p,_),C=[];for(let h of m){let S=_(h.v0),I=_(h.v1),G=_(h.v2);if(S[0]===I[0]&&S[1]===I[1]&&S[2]===I[2]||S[0]===G[0]&&S[1]===G[1]&&S[2]===G[2]||I[0]===G[0]&&I[1]===G[1]&&I[2]===G[2])continue;let N={vertices:[S,I,G],color:h.color};h.texture&&(N.texture=h.texture),h.uvs&&(N.uvs=h.uvs),C.push(N)}return{polygons:C,animation:E,objectUrls:f,dispose:x,warnings:[],metadata:{triangleCount:C.length,meshes:d,materials:y,animations:E?.clips,sourceBytes:l}}}function rc(e){let n=!1;return()=>{if(n)return;n=!0;let r=globalThis.URL;if(r?.revokeObjectURL)for(let t of e)try{r.revokeObjectURL(t)}catch{}}}function Vt(e){return e.material?.texture??e.texture}function oc(){let e=globalThis;return typeof e.Image!="function"||typeof e.document?.createElement!="function"?null:{Image:e.Image,createCanvas(){return e.document.createElement("canvas")}}}function sc(e,n){return new Promise((r,t)=>{let o=new n,s=!1,i=l=>{s||(s=!0,l())};o.decoding="async",o.onload=()=>i(()=>r(o)),o.onerror=()=>i(()=>t(new Error(`texture load failed: ${e}`))),o.src=e,typeof o.decode=="function"&&o.decode().then(()=>i(()=>r(o)),()=>{})})}async function ic(e,n,r){try{let t=await sc(e,n.Image),o=Math.max(0,Math.floor(t.naturalWidth||t.width||0)),s=Math.max(0,Math.floor(t.naturalHeight||t.height||0));if(o<=0||s<=0||o*s>r)return null;let i=n.createCanvas();i.width=o,i.height=s;let l=i.getContext("2d",{willReadFrequently:!0});if(!l)return null;l.drawImage(t,0,0,o,s);let c=l.getImageData(0,0,o,s).data;return{width:o,height:s,data:c,lowDetail:cc(o,s,c)}}catch{return null}}function to(e,n,r,t,o,s){let i=(t*n+r)*4,l=(s*n+o)*4;return Math.max(Math.abs((e[i]??0)-(e[l]??0)),Math.abs((e[i+1]??0)-(e[l+1]??0)),Math.abs((e[i+2]??0)-(e[l+2]??0)))}function cc(e,n,r){let t=Math.max(1,Math.floor(Math.max(e,n)/128)),o=0,s=0,i=0;for(let l=0;l<n;l+=t)for(let c=0;c<e;c+=t){if(c+t<e){let a=to(r,e,c,l,c+t,l);i+=a,o++,a>32&&s++}if(l+t<n){let a=to(r,e,c,l,c,l+t);i+=a,o++,a>32&&s++}}return o>0&&s/o<=.045&&i/o<=10}function ro(e,n,r){return Math.max(n,Math.min(r,e))}function ac(e,n){let r=n[0],t=1-n[1];if(!Number.isFinite(r)||!Number.isFinite(t))return null;let o=ro(Math.floor(r*e.width),0,e.width-1),i=(ro(Math.floor(t*e.height),0,e.height-1)*e.width+o)*4;return{r:e.data[i]??0,g:e.data[i+1]??0,b:e.data[i+2]??0,a:e.data[i+3]??255}}function Me(e,n,r,t,o,s){return[e[0]*t+n[0]*o+r[0]*s,e[1]*t+n[1]*o+r[1]*s]}function lc(e){let[n,r,t]=e;return[Me(n,r,t,1/3,1/3,1/3),Me(n,r,t,.8,.1,.1),Me(n,r,t,.1,.8,.1),Me(n,r,t,.1,.1,.8),Me(n,r,t,.45,.45,.1),Me(n,r,t,.45,.1,.45),Me(n,r,t,.1,.45,.45)]}function uc(e){let[n,r,t]=e,o=lc(e);for(let s=1;s<6;s++)for(let i=1;i<6-s;i++){let l=6-s-i;l<=0||o.push(Me(n,r,t,s/6,i/6,l/6))}return o}function co(e){if(e.textureTriangles?.length)return e.textureTriangles;let n=e.uvs;if(!n||n.length!==e.vertices.length||n.length<3)return[];let r=[];for(let t=1;t+1<n.length;t++)r.push({uvs:[n[0],n[t],n[t+1]]});return r}function oo(e,n,r){return Math.abs(e.r-n.r)<=r&&Math.abs(e.g-n.g)<=r&&Math.abs(e.b-n.b)<=r&&Math.abs(e.a-n.a)<=r}function so(e){let n=t=>Math.round(Math.max(0,Math.min(255,t))).toString(16).padStart(2,"0");if(e.a>=255)return`#${n(e.r)}${n(e.g)}${n(e.b)}`;let r=Math.round(Math.max(0,Math.min(255,e.a))/255*1e3)/1e3;return`rgba(${Math.round(e.r)}, ${Math.round(e.g)}, ${Math.round(e.b)}, ${r})`}function fc(){return{min:{r:255,g:255,b:255,a:255},max:{r:0,g:0,b:0,a:0},sum:{r:0,g:0,b:0,a:0},count:0}}function mc(e,n){e.min.r=Math.min(e.min.r,n.r),e.min.g=Math.min(e.min.g,n.g),e.min.b=Math.min(e.min.b,n.b),e.min.a=Math.min(e.min.a,n.a),e.max.r=Math.max(e.max.r,n.r),e.max.g=Math.max(e.max.g,n.g),e.max.b=Math.max(e.max.b,n.b),e.max.a=Math.max(e.max.a,n.a),e.sum.r+=n.r,e.sum.g+=n.g,e.sum.b+=n.b,e.sum.a+=n.a,e.count++}function io(e){return{r:e.sum.r/e.count,g:e.sum.g/e.count,b:e.sum.b/e.count,a:e.sum.a/e.count}}function gc(e,n,r,t){let o=co(e);if(o.length===0||!t&&!n.lowDetail)return null;let s=fc();for(let i of o)for(let l of uc(i.uvs)){let c=ac(n,l);if(!c)return null;mc(s,c)}return s.count===0?null:oo(s.min,s.max,r)?so(io(s)):t||!oo(s.min,s.max,32)?null:so(io(s))}function pc(e,n){let{texture:r,material:t,uvs:o,textureTriangles:s,...i}=e;return{...i,color:n}}async function ao(e,n={}){if(n.enabled===!1)return null;let r=oc();if(!r)return null;let t=e.filter(c=>Vt(c)&&co(c).length>0);if(t.length===0)return null;let o=n.maxTexturePixels??16777216,s=new Map;await Promise.all(Array.from(new Set(t.map(c=>Vt(c)))).map(async c=>{s.set(c,await ic(c,r,o))}));let i=n.colorTolerance??2,l=n.colorTolerance!==void 0;return{bake(c){let a=!1,u=c.map(f=>{let g=Vt(f);if(!g)return f;let m=s.get(g);if(!m)return f;let p=gc(f,m,i,l);return p?(a=!0,pc(f,p)):f});return{polygons:a?u:c,changed:a}}}}async function lo(e,n={}){let r=await ao(e,n);return r?r.bake(e).polygons:e}async function Tn(e,n={}){let r=await ao(e.polygons,n);if(!r)return e;let t=r.bake(e.polygons);return!t.changed&&!e.animation?e:{...e,polygons:t.polygons,animation:e.animation?{...e.animation,sample(o,s){return r.bake(e.animation.sample(o,s)).polygons}}:e.animation}}var dc=[0,4294967295,4291624959,4288282623,4284940287,4281597951,4278255615,4294954239,4291611903,4288269567,4284927231,4281584895,4278242559,4294941183,4291598847,4288256511,4284914175,4281571839,4278229503,4294928127,4291585791,4288243455,4284901119,4281558783,4278216447,4294915071,4291572735,4288230399,4284888063,4281545727,4278203391,4294902015,4291559679,4288217343,4284875007,4281532671,4278190335,4294967244,4291624908,4288282572,4284940236,4281597900,4278255564,4294954188,4291611852,4288269516,4284927180,4281584844,4278242508,4294941132,4291598796,4288256460,4284914124,4281571788,4278229452,4294928076,4291585740,4288243404,4284901068,4281558732,4278216396,4294915020,4291572684,4288230348,4284888012,4281545676,4278203340,4294901964,4291559628,4288217292,4284874956,4281532620,4278190284,4294967193,4291624857,4288282521,4284940185,4281597849,4278255513,4294954137,4291611801,4288269465,4284927129,4281584793,4278242457,4294941081,4291598745,4288256409,4284914073,4281571737,4278229401,4294928025,4291585689,4288243353,4284901017,4281558681,4278216345,4294914969,4291572633,4288230297,4284887961,4281545625,4278203289,4294901913,4291559577,4288217241,4284874905,4281532569,4278190233,4294967142,4291624806,4288282470,4284940134,4281597798,4278255462,4294954086,4291611750,4288269414,4284927078,4281584742,4278242406,4294941030,4291598694,4288256358,4284914022,4281571686,4278229350,4294927974,4291585638,4288243302,4284900966,4281558630,4278216294,4294914918,4291572582,4288230246,4284887910,4281545574,4278203238,4294901862,4291559526,4288217190,4284874854,4281532518,4278190182,4294967091,4291624755,4288282419,4284940083,4281597747,4278255411,4294954035,4291611699,4288269363,4284927027,4281584691,4278242355,4294940979,4291598643,4288256307,4284913971,4281571635,4278229299,4294927923,4291585587,4288243251,4284900915,4281558579,4278216243,4294914867,4291572531,4288230195,4284887859,4281545523,4278203187,4294901811,4291559475,4288217139,4284874803,4281532467,4278190131,4294967040,4291624704,4288282368,4284940032,4281597696,4278255360,4294953984,4291611648,4288269312,4284926976,4281584640,4278242304,4294940928,4291598592,4288256256,4284913920,4281571584,4278229248,4294927872,4291585536,4288243200,4284900864,4281558528,4278216192,4294914816,4291572480,4288230144,4284887808,4281545472,4278203136,4294901760,4291559424,4288217088,4284874752,4281532416,4278190318,4278190301,4278190267,4278190250,4278190216,4278190199,4278190165,4278190148,4278190114,4278190097,4278251008,4278246656,4278237952,4278233600,4278224896,4278220544,4278211840,4278207488,4278198784,4278194432,4293787648,4292673536,4290445312,4289331200,4287102976,4285988864,4283760640,4282646528,4280418304,4279304192,4293848814,4292730333,4290493371,4289374890,4287137928,4286019447,4283782485,4282664004,4280427042,4279308561];function xc(e){let n=e>>0&255,r=e>>8&255,t=e>>16&255;return[n,r,t]}function St(e){return(e&255).toString(16).padStart(2,"0")}function fo(e,n,r){return`#${St(e)}${St(n)}${St(r)}`}function hc(e,n,r,t){if(t>=255)return fo(e,n,r);let o=Math.round(Math.max(0,Math.min(255,t))/255*1e3)/1e3;return`rgba(${e}, ${n}, ${r}, ${o})`}var yc=542658390;function wn(e,n){let r=n?.targetSize??60,t=n?.gridShift??0,o=e.byteLength;if(e.byteLength<8)return Ne(o,["parseVox: buffer too small to be a valid .vox file"]);let s=new DataView(e);if(s.getUint32(0,!0)!==yc)return Ne(o,["parseVox: not a .vox file (bad magic)"]);if(e.byteLength<20)return Ne(o,["parseVox: buffer too small for MAIN chunk"]);if(uo(s,8)!=="MAIN")return Ne(o,["parseVox: expected MAIN chunk at offset 8"]);let a=20+s.getUint32(12,!0),u=a+s.getUint32(16,!0),f=[],g=[],m=null;for(;a<u&&a+12<=e.byteLength;){let C=uo(s,a),h=s.getUint32(a+4,!0),S=s.getUint32(a+8,!0),I=a+12,G=I+h+S;if(C==="SIZE"){if(h>=12&&I+12<=e.byteLength){let N=s.getUint32(I,!0),F=s.getUint32(I+4,!0),z=s.getUint32(I+8,!0);f.push({sx:N,sy:F,sz:z})}}else if(C==="XYZI"){if(h>=4&&I+4<=e.byteLength){let N=s.getUint32(I,!0),F=[],z=Math.min(N,Math.floor((h-4)/4));for(let X=0;X<z;X++){let H=I+4+X*4;F.push({x:s.getUint8(H),y:s.getUint8(H+1),z:s.getUint8(H+2),colorIndex:s.getUint8(H+3)})}g.push(F)}}else if(C==="RGBA"&&h>=1024&&I+1024<=e.byteLength){m=[];for(let N=0;N<256;N++){let F=I+N*4,z=s.getUint8(F),X=s.getUint8(F+1),H=s.getUint8(F+2),K=s.getUint8(F+3);m.push(hc(z,X,H,K))}}a=G}let p=[],d=new Set;for(let C of g)for(let h of C){if(h.colorIndex===0)continue;let S=`${h.x},${h.y},${h.z}`;d.has(S)||(d.add(S),p.push(h))}if(p.length===0)return Ne(o,[]);let y=C=>{let h=C-1;if(m!==null)return m[h]??"#888888";let S=dc[C]??0,[I,G,N]=xc(S);return fo(I,G,N)},b=(C,h,S)=>d.has(`${C},${h},${S}`),M=new Map,v=(C,h,S,I,G)=>{let N=`${C}:${h}:${G}`,F=M.get(N);F||(F=new Set,M.set(N,F)),F.add(`${S},${I}`)};for(let C of p){let{x:h,y:S,z:I}=C,G=y(C.colorIndex);b(h+1,S,I)||v(0,h+1,S,I,G),b(h-1,S,I)||v(1,h,S,I,G),b(h,S+1,I)||v(2,S+1,h,I,G),b(h,S-1,I)||v(3,S,h,I,G),b(h,S,I+1)||v(4,I+1,h,S,G),b(h,S,I-1)||v(5,I,h,S,G)}function P(C){let h=new Set,S=[],I=1/0,G=-1/0,N=1/0,F=-1/0;for(let z of C){let[X,H]=z.split(","),K=+X,Z=+H;K<I&&(I=K),K>G&&(G=K),Z<N&&(N=Z),Z>F&&(F=Z)}for(let z=N;z<=F;z++)for(let X=I;X<=G;X++){let H=`${X},${z}`;if(!C.has(H)||h.has(H))continue;let K=1;for(;X+K<=G;){let J=`${X+K},${z}`;if(!C.has(J)||h.has(J))break;K++}let Z=1;e:for(;z+Z<=F;){for(let J=0;J<K;J++){let oe=`${X+J},${z+Z}`;if(!C.has(oe)||h.has(oe))break e}Z++}for(let J=0;J<Z;J++)for(let oe=0;oe<K;oe++)h.add(`${X+oe},${z+J}`);S.push({u:X,v:z,w:K,h:Z})}return S}let x=(C,h,S,I,G,N)=>{let F=S+G,z=I+N;switch(C){case 0:return[[h,S,I],[h,F,I],[h,F,z],[h,S,z]];case 1:return[[h,F,I],[h,S,I],[h,S,z],[h,F,z]];case 2:return[[S,h,I],[S,h,z],[F,h,z],[F,h,I]];case 3:return[[F,h,I],[F,h,z],[S,h,z],[S,h,I]];case 4:return[[S,I,h],[F,I,h],[F,z,h],[S,z,h]];default:return[[S,z,h],[F,z,h],[F,I,h],[S,I,h]]}},A=[];for(let[C,h]of M){let S=C.indexOf(":"),I=C.indexOf(":",S+1),G=+C.slice(0,S),N=+C.slice(S+1,I),F=C.slice(I+1);for(let{u:z,v:X,w:H,h:K}of P(h))A.push({vertices:x(G,N,z,X,H,K),color:F})}if(A.length===0)return Ne(o,[]);let T=1/0,V=1/0,w=1/0,O=-1/0,L=-1/0,U=-1/0;for(let C of A)for(let h of C.vertices)h[0]<T&&(T=h[0]),h[0]>O&&(O=h[0]),h[1]<V&&(V=h[1]),h[1]>L&&(L=h[1]),h[2]<w&&(w=h[2]),h[2]>U&&(U=h[2]);let R=Math.max(O-T,L-V,U-w),D=R>0?r/R:1,k=C=>Math.round(C*1e3)/1e3,_=C=>[k((C[0]-T)*D+t),k((C[1]-V)*D+t),k((C[2]-w)*D+t)],E=A.map(({vertices:C,color:h})=>({vertices:C.map(_),color:h}));return{polygons:E,objectUrls:[],dispose:()=>{},warnings:[],metadata:{triangleCount:E.length,sourceBytes:o,voxelCount:p.length}}}function uo(e,n){return String.fromCharCode(e.getUint8(n))+String.fromCharCode(e.getUint8(n+1))+String.fromCharCode(e.getUint8(n+2))+String.fromCharCode(e.getUint8(n+3))}function Ne(e,n){return{polygons:[],objectUrls:[],dispose:()=>{},warnings:n,metadata:{triangleCount:0,sourceBytes:e}}}var we="loadMesh";function Tt(e,n){let r=gn(e.polygons,{meshResolution:n?.meshResolution});return r.length===e.polygons.length?e:{...e,polygons:r}}async function mo(e,n){let r=n?.solidTextureSamples;return r===!1?e:Tn(e,typeof r=="object"?r:void 0)}function bc(e){let n=e.split("?")[0].split("#")[0],r=n.lastIndexOf(".");return r<0?"":n.slice(r+1).toLowerCase()}async function go(e,n){let r=bc(e);if(r==="mtl")throw new Error(`${we}: .mtl is a material file, not a mesh \u2014 use parseMtl directly`);let t=globalThis.fetch;if(!t)throw new Error(`${we}: no fetch() in this environment`);let o=n?.baseUrl??e;if(r==="obj"){let s=await t(e);if(!s.ok)throw new Error(`${we}: ${e} \u2192 ${s.status}`);let i=await s.text(),l=n?.objOptions;if(n?.mtlUrl){let a=await t(n.mtlUrl);if(!a.ok)throw new Error(`${we}: ${n.mtlUrl} \u2192 ${a.status}`);let u=await a.text(),{colors:f,textures:g}=vn(u),m={},p=globalThis.URL,d=globalThis.document?.baseURI,y=n.mtlUrl;if(p&&d)try{y=new p(n.mtlUrl,d).toString()}catch{}for(let[b,M]of Object.entries(g)){if(p)try{m[b]=new p(M,y).toString();continue}catch{}let v=n.mtlUrl.lastIndexOf("/"),P=v>=0?n.mtlUrl.slice(0,v+1):"";m[b]=M.startsWith("/")||/^https?:\/\//.test(M)?M:P+M}l={...l??{},materialColors:{...f,...l?.materialColors??{}},materialTextures:{...m,...l?.materialTextures??{}}}}let c=Mn(i,l);return Tt(await mo(c,n),n)}if(r==="glb"||r==="gltf"){let s=await t(e);if(!s.ok)throw new Error(`${we}: ${e} \u2192 ${s.status}`);let i=await s.arrayBuffer(),l=Sn(i,{baseUrl:o,...n?.gltfOptions??{}});return Tt(await mo(l,n),n)}if(r==="vox"){let s=await t(e);if(!s.ok)throw new Error(`${we}: ${e} \u2192 ${s.status}`);let i=await s.arrayBuffer();return Tt(wn(i,n?.voxOptions),n)}throw new Error(`${we}: unsupported extension ".${r}" (supported: obj, glb, gltf, vox)`)}function po(e,n,r,t,o=.5,s=.5,i=.4){let l=4/(e[2]+3),c=Math.min(n,r)*i,a=n*o+e[0]*c*t*l,u=r*s-e[1]*c*l;return[a,u,e[2]]}function Pc(e){let[n,r,t]=[e.vertices[0],e.vertices[1],e.vertices[2]],o=r[0]-n[0],s=r[1]-n[1],i=r[2]-n[2],l=t[0]-n[0],c=t[1]-n[1],a=t[2]-n[2];return[s*a-i*c,i*l-o*a,o*c-s*l]}function Mc(e,n){let r=Math.hypot(e[0],e[1],e[2]),t=Math.hypot(n[0],n[1],n[2]);return r===0||t===0?1:(e[0]*n[0]+e[1]*n[1]+e[2]*n[2])/(r*t)}function xo(e,n){let r=`${e[0]},${e[1]},${e[2]}`,t=`${n[0]},${n[1]},${n[2]}`;return r<t?`${r}|${t}`:`${t}|${r}`}function vc(e,n=0){if(n<=0){let i=new Set,l=[];for(let c of e){let a=[[0,1],[1,2],[2,0]];for(let[u,f]of a){let g=c.vertices[u],m=c.vertices[f],p=xo(g,m);if(i.has(p))continue;i.add(p);let d={from:g,to:m,weight:2};c.color&&(d.color=c.color),l.push(d)}}return l}let r=Math.cos(n*Math.PI/180),t=new Map,o=[[0,1],[1,2],[2,0]];for(let i of e){let l=Pc(i);for(let[c,a]of o){let u=i.vertices[c],f=i.vertices[a],g=xo(u,f),m=t.get(g);m?m.normals.push(l):t.set(g,{normals:[l],from:u,to:f,color:i.color})}}let s=[];for(let{normals:i,from:l,to:c,color:a}of t.values()){if(i.length<2){let f={from:l,to:c,weight:2};a&&(f.color=a),s.push(f);continue}let u=!1;e:for(let f=0;f<i.length;f++)for(let g=f+1;g<i.length;g++)if(Mc(i[f],i[g])<r){u=!0;break e}if(u){let f={from:l,to:c,weight:2};a&&(f.color=a),s.push(f)}}return s}function ho(e,n=0){return vc(e,n)}0&&(module.exports={BASE_TILE,CAMERA_BACKFACE_CULL_EPS,DEFAULT_CAMERA_STATE,DEFAULT_PROJECTION,LoopOnce,LoopPingPong,LoopRepeat,QUAT_IDENTITY,VOXEL_CAMERA_CULL_AXIS_EPS,VOXEL_CAMERA_CULL_NORMAL_LIMIT,arrowPolygons,axesHelperPolygons,bakeSolidTextureSampledPolygons,bakeSolidTextureSamples,buildSceneContext,cameraCullNormalGroups,cameraCullNormalGroupsFromPolygons,cameraCullNormalKey,cameraCullVisibleSignature,cameraFacingDepth,clampChannel,computeSceneBbox,computeShapeLighting,coverPlanarPolygons,createGlyphcssAnimationMixer,createIsometricCamera,cullInteriorPolygons,dedupeOverlappingPolygons,eulerXYZFromQuat,findOverlappingPolygonDuplicates,formatColor,inverseRotateVec3,isAxisAlignedSurfaceNormal,isVoxelCameraCullableNormalGroups,loadMesh,mergePolygons,normalFacesCamera,normalizeInvertMultiplier,normalizePolygons,octahedronPolygons,optimizeMeshPolygons,parseColor,parseGltf,parseHexColor,parseMtl,parseObj,parsePureColor,parseRgbColor,parseVox,planePolygons,polygonCssSurfaceNormal,polygonFaces,polygonFacesCamera,project,quatFromAxisAngle,quatFromEulerXYZ,quatMultiply,ringPolygons,ringQuadPolygons,rotateVec3,shadeColor,trianglesToFeatureEdges});
|
|
1
|
+
"use strict";var Et=Object.defineProperty;var ps=Object.getOwnPropertyDescriptor;var gs=Object.getOwnPropertyNames;var ys=Object.prototype.hasOwnProperty;var hs=(e,n)=>{for(var o in n)Et(e,o,{get:n[o],enumerable:!0})},bs=(e,n,o,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of gs(n))!ys.call(e,r)&&r!==o&&Et(e,r,{get:()=>n[r],enumerable:!(t=ps(n,r))||t.enumerable});return e};var xs=e=>bs(Et({},"__esModule",{value:!0}),e);var Sa={};hs(Sa,{BASE_TILE:()=>Ho,CAMERA_BACKFACE_CULL_EPS:()=>pn,DEFAULT_CAMERA_STATE:()=>Ie,DEFAULT_PROJECTION:()=>So,LoopOnce:()=>$r,LoopPingPong:()=>Ur,LoopRepeat:()=>Fr,QUAT_IDENTITY:()=>No,VOXEL_CAMERA_CULL_AXIS_EPS:()=>oo,VOXEL_CAMERA_CULL_NORMAL_LIMIT:()=>ro,antiprismPolygons:()=>Sn,arrowPolygons:()=>fo,axesHelperPolygons:()=>uo,bakeSolidTextureSampledPolygons:()=>cs,bakeSolidTextureSamples:()=>Vt,bipyramidPolygons:()=>Tn,buildSceneContext:()=>Lo,cameraCullNormalGroups:()=>io,cameraCullNormalGroupsFromPolygons:()=>Dr,cameraCullNormalKey:()=>co,cameraCullVisibleSignature:()=>_r,cameraFacingDepth:()=>so,clampChannel:()=>Me,computeSceneBbox:()=>Nt,computeShapeLighting:()=>ko,conePolygons:()=>Vn,coverPlanarPolygons:()=>nt,createGlyphAnimationMixer:()=>Br,createIsometricCamera:()=>Yo,cubePolygons:()=>hn,cuboctahedronPolygons:()=>Re,cullInteriorPolygons:()=>Ce,cylinderPolygons:()=>Mn,dedupeOverlappingPolygons:()=>Qn,deltoidalHexecontahedronPolygons:()=>Bn,deltoidalIcositetrahedronPolygons:()=>Un,disdyakisDodecahedronPolygons:()=>$n,disdyakisTriacontahedronPolygons:()=>Fn,dodecahedronPolygons:()=>bn,eulerXYZFromQuat:()=>Bo,findOverlappingPolygonDuplicates:()=>Ut,formatColor:()=>nn,greatDodecahedronPolygons:()=>zn,greatIcosahedronPolygons:()=>kn,greatStellatedDodecahedronPolygons:()=>wn,icosahedronPolygons:()=>xn,icosidodecahedronPolygons:()=>Ee,inverseRotateVec3:()=>Go,isAxisAlignedSurfaceNormal:()=>ao,isVoxelCameraCullableNormalGroups:()=>Lr,loadMesh:()=>us,mergePolygons:()=>ae,normalFacesCamera:()=>pt,normalizeInvertMultiplier:()=>Xo,normalizePolygons:()=>Kn,octahedronPolygons:()=>gn,optimizeMeshPolygons:()=>at,parseColor:()=>Oe,parseGltf:()=>Mt,parseHexColor:()=>Dt,parseMtl:()=>ht,parseObj:()=>yt,parsePureColor:()=>Xn,parseRgbColor:()=>Lt,parseVox:()=>vt,pentagonalHexecontahedronPolygons:()=>qn,pentagonalIcositetrahedronPolygons:()=>jn,pentakisDodecahedronPolygons:()=>Nn,planePolygons:()=>go,polygonCssSurfaceNormal:()=>dt,polygonFaces:()=>_o,polygonFacesCamera:()=>Er,prismPolygons:()=>An,project:()=>fs,pyramidPolygons:()=>Cn,quatFromAxisAngle:()=>Fo,quatFromEulerXYZ:()=>Uo,quatMultiply:()=>$o,resolveGeometry:()=>yo,rhombicDodecahedronPolygons:()=>Rn,rhombicTriacontahedronPolygons:()=>En,rhombicosidodecahedronPolygons:()=>Be,rhombicuboctahedronPolygons:()=>Ue,ringPolygons:()=>mo,ringQuadPolygons:()=>po,rotateVec3:()=>tn,shadeColor:()=>wo,smallStellatedDodecahedronPolygons:()=>In,snubCubePolygons:()=>je,snubDodecahedronPolygons:()=>qe,spherePolygons:()=>Pn,tetrahedronPolygons:()=>yn,tetrakisHexahedronPolygons:()=>_n,torusPolygons:()=>vn,trapezohedronPolygons:()=>On,triakisIcosahedronPolygons:()=>Gn,triakisOctahedronPolygons:()=>Ln,triakisTetrahedronPolygons:()=>Dn,trianglesToFeatureEdges:()=>ds,truncatedCubePolygons:()=>Le,truncatedCuboctahedronPolygons:()=>$e,truncatedDodecahedronPolygons:()=>Ge,truncatedIcosahedronPolygons:()=>Ne,truncatedIcosidodecahedronPolygons:()=>Fe,truncatedOctahedronPolygons:()=>_e,truncatedTetrahedronPolygons:()=>De});module.exports=xs(Sa);var So="cubic";function Dt(e){let n=e.replace("#","");if(n.length===3){let o=parseInt(n[0]+n[0],16),t=parseInt(n[1]+n[1],16),r=parseInt(n[2]+n[2],16);return Number.isNaN(o)||Number.isNaN(t)||Number.isNaN(r)?null:{rgb:[o,t,r],alpha:1}}if(n.length===6){let o=parseInt(n.slice(0,2),16),t=parseInt(n.slice(2,4),16),r=parseInt(n.slice(4,6),16);return Number.isNaN(o)||Number.isNaN(t)||Number.isNaN(r)?null:{rgb:[o,t,r],alpha:1}}return null}function Lt(e){let n=e.match(/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*([\d.]+)\s*)?\)/i);return n?{rgb:[Number(n[1]),Number(n[2]),Number(n[3])],alpha:n[4]?Number(n[4]):1}:null}function Xn(e){if(!e)return null;let n=e.trim(),o=Dt(n);return o||Lt(n)}function Me(e){return Math.max(0,Math.min(255,Math.round(e)))}function nn(e){let[n,o,t]=e.rgb.map(Me);return e.alpha<1?`rgba(${n}, ${o}, ${t}, ${e.alpha})`:`rgb(${n}, ${o}, ${t})`}var Gt={rgb:[204,204,204],alpha:1},To=new Map;function Oe(e){if(!e)return null;let n=e.trim(),o=To.get(n);if(o)return o;let t=Xn(n);return t?(To.set(n,t),t):null}function wo(e,n){let o=Oe(e)??Gt,t=[Me(o.rgb[0]+n),Me(o.rgb[1]+n),Me(o.rgb[2]+n)];return nn({rgb:t,alpha:o.alpha})}var _t={direction:[0,0,-1],color:"#ffffff",intensity:1},Oo={color:"#ffffff",intensity:.4};function Io(e){let n=Math.hypot(e[0],e[1],e[2]);return n<1e-12?[0,0,0]:[e[0]/n,e[1]/n,e[2]/n]}function zo(e,n,o){let t=Oe(n)??Gt;return e*(t.rgb[o]/255)}function ko(e,n,o,t){let r=Oe(n)??Gt,c=Io(o?.direction??_t.direction),a=o?.color??_t.color,s=Math.max(0,o?.intensity??_t.intensity),i=t?.color??Oo.color,l=Math.max(0,t?.intensity??Oo.intensity),u=Io(e),m=Math.max(0,-(u[0]*c[0]+u[1]*c[1]+u[2]*c[2])),d=s*m,f=[0,0,0];for(let p=0;p<3;p=p+1){let g=r.rgb[p],x=zo(g,i,p)*l,V=zo(g,a,p)*d;f[p]=Me(x+V)}return nn({rgb:f,alpha:r.alpha})}var Ro="#cccccc",Yn=(e,n)=>[e[0]-n[0],e[1]-n[1],e[2]-n[2]],Eo=(e,n)=>[e[1]*n[2]-e[2]*n[1],e[2]*n[0]-e[0]*n[2],e[0]*n[1]-e[1]*n[0]],Do=(e,n)=>e[0]*n[0]+e[1]*n[1]+e[2]*n[2],Wn=e=>Math.hypot(e[0],e[1],e[2]);function Ps(e){let n=1/0,o=1/0,t=1/0,r=-1/0,c=-1/0,a=-1/0;for(let u of e)u[0]<n&&(n=u[0]),u[0]>r&&(r=u[0]),u[1]<o&&(o=u[1]),u[1]>c&&(c=u[1]),u[2]<t&&(t=u[2]),u[2]>a&&(a=u[2]);let s=r-n,i=c-o,l=a-t;return Math.hypot(s,i,l)}function Ms(){let e=globalThis;if(e.__GLYPH_DEV__===!0)return!0;if(e.__GLYPH_DEV__===!1)return!1;let n=e.process?.env?.NODE_ENV;return typeof n=="string"?n!=="production":!1}function Kn(e){let n=[],o=[];if(!e||e.length===0)return{polygons:n,warnings:o};for(let t=0;t<e.length;t++){let r=e[t];if(!r||!Array.isArray(r.vertices)){o.push(`Polygon ${t}: missing vertices, dropped`);continue}let c=r.vertices;if(c.length<3){o.push(`Polygon ${t}: ${c.length} vertices (need >= 3), dropped`);continue}let a=Yn(c[1],c[0]),s=Yn(c[2],c[0]),i=Eo(a,s),l=Wn(i);if(c.length===3){if(l<1e-12){Wn(a)<1e-12||Wn(s)<1e-12?o.push(`Polygon ${t}: zero-area triangle (coincident vertices), dropped`):o.push(`Polygon ${t}: vertices collinear, dropped`);continue}}else if(l<1e-12){o.push(`Polygon ${t}: first 3 vertices collinear, dropped`);continue}let u=[{...r,vertices:c.slice()}];if(c.length>=4){let m=[i[0]/l,i[1]/l,i[2]/l],d=Do(m,c[0]),f=Ps(c),p=Math.max(1e-6,f*.001),g=0;for(let x=3;x<c.length;x++){let V=Math.abs(Do(m,c[x])-d);V>g&&(g=V)}if(g>p){let x=[],V=r.uvs&&r.uvs.length===c.length?r.uvs:void 0;for(let C=1;C<c.length-1;C++){let v=[c[0].slice(),c[C].slice(),c[C+1].slice()],M=Eo(Yn(v[1],v[0]),Yn(v[2],v[0]));if(Wn(M)<1e-12)continue;let y={...r,vertices:v};V&&(y.uvs=[V[0].slice(),V[C].slice(),V[C+1].slice()]),x.push(y)}if(x.length===0){o.push(`Polygon ${t}: ${c.length} non-coplanar vertices, fan-triangulation produced no valid triangles, dropped`);continue}o.push(`Polygon ${t}: ${c.length} non-coplanar vertices, fan-triangulated to ${x.length} triangles`),u=x}}for(let m of u){let d=Vs(m,t,o);d&&n.push(d)}}return{polygons:n,warnings:o}}function Vs(e,n,o){let t={vertices:e.vertices},r=e.texture;if(typeof r=="string"&&r===""&&(r=void 0),e.color!==void 0&&r!==void 0&&Ms()&&o.push(`Polygon ${n}: color and texture both set; texture wins`),e.color!==void 0&&(Oe(e.color)?t.color=e.color:(o.push(`Polygon ${n}: invalid color "${e.color}", replaced with ${Ro}`),t.color=Ro)),r!==void 0&&(t.texture=r),e.uvs!==void 0&&(!Array.isArray(e.uvs)||e.uvs.length!==e.vertices.length?o.push(`Polygon ${n}: uvs length ${Array.isArray(e.uvs)?e.uvs.length:"?"} != vertices length ${e.vertices.length}, uvs stripped`):t.uvs=e.uvs),e.data!==void 0&&e.data!==null&&typeof e.data=="object"){let c={},a=!1;for(let s of Object.keys(e.data)){let i=e.data[s];typeof i=="string"||typeof i=="number"||typeof i=="boolean"?c[s]=i:(a=!0,o.push(`Polygon ${n}: data["${s}"] has non-primitive value, key dropped`))}Object.keys(c).length>0&&(t.data=c)}return t}function Nt(e){if(!e||e.length===0)return{min:[0,0,0],max:[0,0,0]};let n=1/0,o=1/0,t=1/0,r=-1/0,c=-1/0,a=-1/0,s=!1;for(let i of e)if(i?.vertices)for(let l of i.vertices)l&&(s=!0,l[0]<n&&(n=l[0]),l[0]>r&&(r=l[0]),l[1]<o&&(o=l[1]),l[1]>c&&(c=l[1]),l[2]<t&&(t=l[2]),l[2]>a&&(a=l[2]));return s?{min:[n,o,t],max:[r,c,a]}:{min:[0,0,0],max:[0,0,0]}}function Lo(e){let n=e.polygons??[],o,t;if(e.skipNormalize)o=n,t=[];else{let s=Kn(n);o=s.polygons,t=s.warnings}let r=Nt(o),c=[r.max[0]-r.min[0],r.max[1]-r.min[1],r.max[2]-r.min[2]];return{context:{polygons:o,sceneBbox:r,warnings:t},dimensions:{sceneBbox:r,size:c},warnings:t}}function _o(e){return!e.vertices||e.vertices.length<3?[]:[{v:e.vertices.map(n=>[n[0],n[1],n[2]]),color:e.color}]}function tn(e,n,o,t){let r=n*Math.PI/180,c=o*Math.PI/180,a=t*Math.PI/180,[s,i,l]=e;if(a!==0){let u=Math.cos(a),m=Math.sin(a);[s,i]=[s*u-i*m,s*m+i*u]}if(c!==0){let u=Math.cos(c),m=Math.sin(c);[s,l]=[s*u+l*m,-s*m+l*u]}if(r!==0){let u=Math.cos(r),m=Math.sin(r);[i,l]=[i*u-l*m,i*m+l*u]}return[s,i,l]}function Go(e,n){let o=-n[0]*Math.PI/180,t=-n[1]*Math.PI/180,r=-n[2]*Math.PI/180,[c,a,s]=e;if(o!==0){let i=Math.cos(o),l=Math.sin(o);[a,s]=[a*i-s*l,a*l+s*i]}if(t!==0){let i=Math.cos(t),l=Math.sin(t);[c,s]=[c*i+s*l,-c*l+s*i]}if(r!==0){let i=Math.cos(r),l=Math.sin(r);[c,a]=[c*i-a*l,c*l+a*i]}return[c,a,s]}var $t=Math.PI/180,on=180/Math.PI,No=[1,0,0,0];function $o(e,n){let[o,t,r,c]=e,[a,s,i,l]=n;return[o*a-t*s-r*i-c*l,o*s+t*a+r*l-c*i,o*i-t*l+r*a+c*s,o*l+t*i-r*s+c*a]}function Fo(e,n){let o=n*.5,t=Math.sin(o);return[Math.cos(o),e[0]*t,e[1]*t,e[2]*t]}function Uo(e){let n=e[0]*$t,o=e[1]*$t,t=e[2]*$t,r=Math.cos(n*.5),c=Math.sin(n*.5),a=Math.cos(o*.5),s=Math.sin(o*.5),i=Math.cos(t*.5),l=Math.sin(t*.5);return[r*a*i-c*s*l,c*a*i+r*s*l,r*s*i-c*a*l,r*a*l+c*s*i]}function Bo(e){let[n,o,t,r]=e,c=2*(o*r+n*t),a=2*(t*r-n*o),s=1-2*(o*o+t*t),i=2*(o*t-n*r),l=1-2*(t*t+r*r),u=Math.max(-1,Math.min(1,c)),m=Math.asin(u);return Math.abs(u)<.99999?[Math.atan2(-a,s)*on,m*on,Math.atan2(-i,l)*on]:[Math.atan2(2*(t*r+n*o),1-2*(o*o+r*r))*on,m*on,0]}var Ho=50;function Xo(e){if(typeof e=="number")return e===0?void 0:e<0?-1:1;if(typeof e=="boolean")return e?-1:1}var Ie={target:[0,0,0],rotX:65,rotY:45,zoom:.65,distance:0},jo=100,qo=1e4,We=e=>Math.round(e*jo)/jo,vs=e=>Math.round(e*qo)/qo;function Yo(e={}){let n={target:e.target??[...Ie.target],rotX:e.rotX??Ie.rotX,rotY:e.rotY??Ie.rotY,zoom:e.zoom??Ie.zoom,distance:e.distance??Ie.distance};function o(r){r.target!==void 0&&(n.target=[We(r.target[0]),We(r.target[1]),We(r.target[2])]),r.rotX!==void 0&&(n.rotX=We(r.rotX)),r.rotY!==void 0&&(n.rotY=We(r.rotY)),r.zoom!==void 0&&(n.zoom=vs(r.zoom)),r.distance!==void 0&&(n.distance=We(r.distance))}function t(r={}){let a=(r.cols??0)*50,s=(r.rows??0)*50,[i,l,u]=n.target,m=l*50,d=i*50,f=u*50;return{transform:`${n.distance!==0?` translateZ(${-n.distance}px)`:""}scale(${n.zoom}) rotateX(${n.rotX}deg) rotate(${n.rotY}deg) translate3d(${-m}px, ${-d}px, ${-f}px)`,width:`${a}px`,height:`${s}px`}}return{state:n,update:o,getStyle:t}}var ve=(e,n)=>[e[0]-n[0],e[1]-n[1],e[2]-n[2]],Zn=(e,n)=>[e[1]*n[2]-e[2]*n[1],e[2]*n[0]-e[0]*n[2],e[0]*n[1]-e[1]*n[0]],rn=(e,n)=>e[0]*n[0]+e[1]*n[1]+e[2]*n[2],Ft=e=>Math.hypot(e[0],e[1],e[2]),Ve=(e,n)=>e[0]===n[0]&&e[1]===n[1]&&e[2]===n[2];function Cs(e,n){let o=`${e[0]},${e[1]},${e[2]}`,t=`${n[0]},${n[1]},${n[2]}`;return o<t?`${o}|${t}`:`${t}|${o}`}function Ko(e){if(e.length<3)return null;let n=ve(e[1],e[0]),o=ve(e[2],e[0]),t=Zn(n,o),r=Ft(t);if(r<1e-12)return null;let c=[t[0]/r,t[1]/r,t[2]/r],a=rn(c,e[0]);return{normal:c,d:a}}function As(e,n){return rn(e.normal,n.normal)<1-.001?!1:Math.abs(e.d-n.d)<.05}function Ss(e,n){return rn(e.normal,n.normal)<1-.001?!1:Math.abs(e.d-n.d)<.001}function Ts(e,n,o,t){let r=e.vertices.findIndex(h=>Ve(h,o)),c=e.vertices.findIndex(h=>Ve(h,t)),a=n.vertices.findIndex(h=>Ve(h,o)),s=n.vertices.findIndex(h=>Ve(h,t));if(r<0||c<0||a<0||s<0)return null;let i=e.vertices.length,l=n.vertices.length,u=(r+1)%i===c,m=(a+1)%l===s;if(u===m)return null;let d=u?c:r,f=u?r:c,p=m?s:a,g=m?a:s,x=!!(e.uvs&&n.uvs),V=[],C=x?[]:void 0,v=d;for(;V.push(e.vertices[v]),C&&C.push(e.uvs[v]),v!==f;)v=(v+1)%i;for(v=p;V.push(n.vertices[v]),C&&C.push(n.uvs[v]),v!==g;)v=(v+1)%l;let M=[],y=C?[]:void 0;for(let h=0;h<V.length;h++)(M.length===0||!Ve(V[h],M[M.length-1]))&&(M.push(V[h]),y&&C&&y.push(C[h]));if(M.length>1&&Ve(M[0],M[M.length-1])&&(M.pop(),y?.pop()),x)return Wo(M,y);let P=[],S=y?[]:void 0;for(let h=0;h<M.length;h++){let b=M[(h-1+M.length)%M.length],A=M[h],I=M[(h+1)%M.length],R=Zn(ve(A,b),ve(I,b));Ft(R)>1e-9&&(P.push(A),S&&y&&S.push(y[h]))}return P.length<3?null:Wo(P,S)}function Os(e,n){let o=e.length,t=0;for(let r=0;r<o;r++){let c=e[r],a=e[(r+1)%o],s=e[(r+2)%o],i=ve(a,c),l=ve(s,a),u=rn(Zn(i,l),n);if(Math.abs(u)<1e-9)continue;let m=u>0?1:-1;if(t===0)t=m;else if(m!==t)return!1}return!0}function Is(e,n){if(e.length<3)return!1;let o=Ko(e);if(!o)return!1;for(let t of e)if(Math.abs(rn(o.normal,t)-o.d)>n)return!1;return!0}function zs(e){return e.map(n=>({vertices:n.vertices.map(o=>[...o]),uvs:n.uvs.map(o=>[...o])}))}function ws(e,n){let o=[];for(let t=1;t<e.length-1;t++)o.push({vertices:[[...e[0]],[...e[t]],[...e[t+1]]],uvs:[[...n[0]],[...n[t]],[...n[t+1]]]});return o}function Wo(e,n){for(let o=0;o<e.length;o++){let t=e[o],r=e[(o+1)%e.length],c=e[(o+2)%e.length];if(!(Ft(Zn(ve(r,t),ve(c,t)))<=1e-9))return o===0?{vertices:e,uvs:n}:{vertices:[...e.slice(o),...e.slice(0,o)],uvs:n?[...n.slice(o),...n.slice(0,o)]:void 0}}return{vertices:e,uvs:n}}function ae(e){let n=[],o=[];for(let r of e??[]){if(!r||!r.vertices||r.vertices.length<3){r&&n.push(r);continue}let c=r.vertices.map(l=>[l[0],l[1],l[2]]),a=Ko(c);if(!a){n.push(r);continue}let s=r.texture&&r.uvs&&r.uvs.length===c.length?r.uvs.map(l=>[l[0],l[1]]):void 0,i=r.texture&&s?r.textureTriangles?.length?zs(r.textureTriangles):ws(c,s):void 0;o.push({vertices:c,uvs:s,color:r.color??"#cccccc",texture:r.texture,textureTriangles:i,normal:a.normal,d:a.d,alive:!0,data:r.data})}let t=()=>{let r=new Map;for(let s=0;s<o.length;s++){let i=o[s];if(!i.alive)continue;let l=i.vertices.length;for(let u=0;u<l;u++){let m=i.vertices[u],d=i.vertices[(u+1)%l],f=Cs(m,d),p=r.get(f);p||(p=[],r.set(f,p)),p.push(s)}}let c=!1,a=(s,i)=>{for(let l=0;l<s.vertices.length;l++){let u=s.vertices[l],m=s.vertices[(l+1)%s.vertices.length];for(let d=0;d<i.vertices.length;d++){let f=i.vertices[d],p=i.vertices[(d+1)%i.vertices.length];if(Ve(u,p)&&Ve(m,f))return[u,m]}}return null};for(let[,s]of r){if(s.length<2)continue;let[i,l]=s;if(i===l)continue;let u=o[i],m=o[l];if(!u.alive||!m.alive||u.color!==m.color||u.texture!==m.texture)continue;let d=!!(u.texture||m.texture);if(d&&(!u.textureTriangles||!m.textureTriangles)||!!u.uvs!=!!m.uvs||(d?!Ss(u,m):!As(u,m)))continue;let f=a(u,m);if(!f)continue;let[p,g]=f,x=Ts(u,m,p,g);x&&Is(x.vertices,.001)&&Os(x.vertices,u.normal)&&(u.vertices=x.vertices,u.uvs=x.uvs,u.textureTriangles=d?[...u.textureTriangles??[],...m.textureTriangles??[]]:void 0,m.alive=!1,c=!0)}return c};for(;t(););for(let r of o){if(!r.alive)continue;let c={vertices:r.vertices,color:r.color};r.texture&&(c.texture=r.texture),r.uvs&&(c.uvs=r.uvs),r.textureTriangles?.length&&(c.textureTriangles=r.textureTriangles),r.data&&(c.data=r.data),n.push(c)}return n}var ks=(e,n)=>[e[0]-n[0],e[1]-n[1],e[2]-n[2]],Rs=(e,n)=>[e[1]*n[2]-e[2]*n[1],e[2]*n[0]-e[0]*n[2],e[0]*n[1]-e[1]*n[0]],ye=(e,n)=>e[0]*n[0]+e[1]*n[1]+e[2]*n[2];function Es(e,n){let o=e.vertices;if(!o||o.length<3)return null;let t=0,r=0,c=0;for(let g=0;g<o.length;g++){let x=o[g],V=o[(g+1)%o.length];t+=(x[1]-V[1])*(x[2]+V[2]),r+=(x[2]-V[2])*(x[0]+V[0]),c+=(x[0]-V[0])*(x[1]+V[1])}let a=Math.hypot(t,r,c);if(a<1e-12)return null;let s=[t/a,r/a,c/a],i=0,l=0,u=0;for(let g of o)i+=g[0],l+=g[1],u+=g[2];let m=1/o.length,d=[i*m,l*m,u*m],f=ye(s,d),p=a*.5;return{index:n,polygon:e,normal:s,d:f,centroid:d,area:p,local2D:null,bbox2D:null,basis:null}}function Ds(e){let n=Math.abs(e[0])<.9?[1,0,0]:[0,1,0],o=n[0]-e[0]*ye(n,e),t=n[1]-e[1]*ye(n,e),r=n[2]-e[2]*ye(n,e),c=Math.hypot(o,t,r);o/=c,t/=c,r/=c;let a=[o,t,r],s=Rs(e,a);return{u:a,v:s}}function Ls(e){if(e.local2D)return;let n=Ds(e.normal),o=[],t=1/0,r=1/0,c=-1/0,a=-1/0;for(let s of e.polygon.vertices){let i=ye(s,n.u),l=ye(s,n.v);o.push([i,l]),i<t&&(t=i),i>c&&(c=i),l<r&&(r=l),l>a&&(a=l)}e.local2D=o,e.bbox2D={min:[t,r],max:[c,a]},e.basis=n}function _s(e,n){let o=[],t=1/0,r=1/0,c=-1/0,a=-1/0;for(let s of e.vertices){let i=ye(s,n.u),l=ye(s,n.v);o.push([i,l]),i<t&&(t=i),i>c&&(c=i),l<r&&(r=l),l>a&&(a=l)}return{local2D:o,bbox2D:{min:[t,r],max:[c,a]}}}function Gs(e,n){return e.max[0]>=n.min[0]&&e.min[0]<=n.max[0]&&e.max[1]>=n.min[1]&&e.min[1]<=n.max[1]}function Zo(e,n){let o=!1;for(let t=0,r=n.length-1;t<n.length;r=t++){let c=n[t],a=n[r];c[1]>e[1]!=a[1]>e[1]&&e[0]<(a[0]-c[0])*(e[1]-c[1])/(a[1]-c[1]+1e-30)+c[0]&&(o=!o)}return o}function Qo(e){let n=0,o=0;for(let t of e)n+=t[0],o+=t[1];return[n/e.length,o/e.length]}function Ns(e,n){let o=Qo(e),t=Qo(n),r=1e-4,c=0;for(let l of e){let u=[l[0]+(o[0]-l[0])*r,l[1]+(o[1]-l[1])*r];Zo(u,n)&&c++}let a=0;for(let l of n){let u=[l[0]+(t[0]-l[0])*r,l[1]+(t[1]-l[1])*r];Zo(u,e)&&a++}let s=c/e.length,i=a/n.length;return Math.max(s,i)}function $s(e,n){let o=e.normal[0],t=e.normal[1],r=e.normal[2],c=Math.abs(o),a=Math.abs(t),s=Math.abs(r),i=o;a>c&&a>s?i=t:s>c&&s>a&&(i=r),i<0&&(o=-o,t=-t,r=-r);let l=Math.round(o/.05),u=Math.round(t/.05),m=Math.round(r/.05),d=e.d*(e.normal[0]===o&&e.normal[1]===t&&e.normal[2]===r?1:-1),f=Math.round(d/(n*2));return`${l},${u},${m}|${f}`}function Fs(e,n,o,t){let r=ye(e.normal,n.normal);if(Math.abs(r)<1-o)return!1;let c=r>0?1:-1;return Math.abs(e.d-c*n.d)<t}function Jo(e,n){let o=ks(n,e.centroid);return ye(e.normal,o)>0}function Ut(e,n){if(!e||e.length<2)return new Set;let o=n?.normalTolerance??.001,t=n?.distanceTolerance??.05,r=n?.overlapFraction??.7,c=[];for(let f=0;f<e.length;f++){let p=Es(e[f],f);p&&c.push(p)}if(c.length<2)return new Set;let a=0,s=0,i=0,l=0;for(let f of c)a+=f.centroid[0]*f.area,s+=f.centroid[1]*f.area,i+=f.centroid[2]*f.area,l+=f.area;let u=l>0?[a/l,s/l,i/l]:[0,0,0],m=new Map;for(let f of c){let p=$s(f,t),g=m.get(p);g||(g=[],m.set(p,g)),g.push(f)}let d=new Set;for(let f of m.values())if(!(f.length<2))for(let p=0;p<f.length;p++){let g=f[p];if(!d.has(g.index))for(let x=p+1;x<f.length;x++){let V=f[x];if(d.has(V.index)||!Fs(g,V,o,t))continue;Ls(g);let C=_s(V.polygon,g.basis);if(!Gs(g.bbox2D,C.bbox2D)||Ns(g.local2D,C.local2D)<r)continue;let M=Jo(g,u),y=Jo(V,u),P;if(M&&!y?P=g:y&&!M?P=V:P=g.area<V.area?g:V,d.add(P.index),P===g)break}}return d}function Qn(e,n){if(!e||e.length<2)return e??[];let o=Ut(e,n);if(o.size===0)return e;let t=[];for(let r=0;r<e.length;r++)o.has(r)||t.push(e[r]);return t}var Us=4,Bs=8,js=.001,qs=1e-9,Hs=1e6,Xs=1e6,ze=(e,n)=>[e[0]-n[0],e[1]-n[1],e[2]-n[2]],qt=(e,n)=>[e[0]+n[0],e[1]+n[1],e[2]+n[2]],an=(e,n)=>[e[0]*n,e[1]*n,e[2]*n],we=(e,n)=>e[0]*n[0]+e[1]*n[1]+e[2]*n[2],rr=(e,n)=>[e[1]*n[2]-e[2]*n[1],e[2]*n[0]-e[0]*n[2],e[0]*n[1]-e[1]*n[0]],sr=e=>Math.hypot(e[0],e[1],e[2]);function ln(e){let n=sr(e);return n<=qs?null:[e[0]/n,e[1]/n,e[2]/n]}function cn(e,n){return Math.round(e*n)/n}function pe(e){return cn(e,Hs)}function Bt(e){return cn(e,Xs)}function jt(e,n){return Math.abs(e[0]-n[0])<=1e-7&&Math.abs(e[1]-n[1])<=1e-7}function be(e){return`${pe(e[0])},${pe(e[1])}`}function Ys(e){let n=be(e.a),o=be(e.b);return n<o?`${n}|${o}`:`${o}|${n}`}function Ke(e){return`${e[0]},${e[1]},${e[2]}`}function cr(e,n){let o=Ke(e),t=Ke(n);return o<t?`${o}|${t}`:`${t}|${o}`}function Ht(e){return e?Object.keys(e).sort().map(n=>`${n}:${String(e[n])}`).join("|"):""}function er(e){return[e.color??"#cccccc",e.texture??"",e.uvs?"uv":"plain",Ht(e.data)].join("|")}function ir(e){let n=e.vertices;if(!n||n.length<3)return null;let o=n[0],t=[0,0,0];for(let c=1;c<n.length-1;c++)t=qt(t,rr(ze(n[c],o),ze(n[c+1],o)));let r=ln(t);return r?{normal:r,d:we(r,o)}:null}function Ws(e,n,o){return we(e.normal,n.normal)>1-o&&Math.abs(e.d-n.d)<=o}function Ks(e){return!e.texture&&!e.uvs&&!e.textureTriangles}function Zs(e,n){let o=n[e[0]]?.data,t=Ht(o);for(let r of e)if(Ht(n[r].data)!==t)return;return o?{...o}:void 0}function Qs(e,n){let o=e.map(i=>Ks(i)?ir(i):null),t=o.map(Boolean),r=new Map;for(let i=0;i<e.length;i++){if(!o[i])continue;let l=e[i].vertices;for(let u=0;u<l.length;u++){let m=cr(l[u],l[(u+1)%l.length]),d=r.get(m),f={polygon:i,edge:u};d?d.push(f):r.set(m,[f])}}let c=e.map(()=>new Set);for(let i of r.values())if(!(i.length<2))for(let l=0;l<i.length;l++)for(let u=l+1;u<i.length;u++){let m=i[l].polygon,d=i[u].polygon,f=o[m],p=o[d];!f||!p||er(e[m])===er(e[d])&&Ws(f,p,n)&&(c[m].add(d),c[d].add(m))}let a=new Set,s=[];for(let i=0;i<e.length;i++){if(!t[i]||a.has(i))continue;let l=[],u=[i];for(a.add(i);u.length>0;){let m=u.shift();l.push(m);for(let d of c[m])a.has(d)||(a.add(d),u.push(d))}s.push(l)}return{groups:s}}function Js(e,n){let o=new Set(e),t=new Map;for(let c of e){let a=n[c].vertices;for(let s=0;s<a.length;s++){let i=cr(a[s],a[(s+1)%a.length]),l=t.get(i),u={polygon:c,edge:s};l?l.push(u):t.set(i,[u])}}let r=[];for(let c of t.values()){let a=c.filter(s=>o.has(s.polygon));if(a.length===1){let s=a[0],i=n[s.polygon].vertices;r.push({a:i[s.edge],b:i[(s.edge+1)%i.length]})}else if(a.length!==2)return null}return r}function ec(e){let n=new Map;for(let o of e)n.set(Ke(o.a),(n.get(Ke(o.a))??0)+1),n.set(Ke(o.b),(n.get(Ke(o.b))??0)+1);for(let o of n.values())if(o%2!==0)return!1;return!0}function ar(e){let n=[e[0],e[1],e[2]],o=Math.abs(n[0])>=Math.abs(n[1])&&Math.abs(n[0])>=Math.abs(n[2])?0:Math.abs(n[1])>=Math.abs(n[2])?1:2;return n[o]<0?[-n[0],-n[1],-n[2]]:n}function nc(e){let n=ar(e);return`${cn(n[0],1e3)},${cn(n[1],1e3)},${cn(n[2],1e3)}`}function tc(e){let n=Math.abs(e[0])<.9?[1,0,0]:[0,1,0],o=ze(n,an(e,we(n,e)));return ln(o)??[1,0,0]}function oc(e,n,o){let t=new Map;for(let c of e){let a=ze(c.b,c.a),s=ze(a,an(n,we(a,n))),i=ln(s);if(!i)continue;let l=ar(i),u=nc(l),m=sr(s),d=t.get(u);d?d.weight+=m:t.set(u,{axis:l,weight:m})}let r=[...t.values()].sort((c,a)=>a.weight-c.weight).slice(0,o).map(c=>c.axis);return r.length===0&&r.push(tc(n)),r}function nr(e,n,o,t){let r=ze(e,n);return[pe(we(r,o)),pe(we(r,t))]}function rc(e){let n=[...e].sort((t,r)=>t-r),o=[];for(let t of n)(o.length===0||Math.abs(t-o[o.length-1])>1e-7)&&o.push(t);return o}function sn(e,n){let[o,t]=e.a,[r,c]=e.b,a=(n-o)/(r-o);return pe(t+(c-t)*a)}function Xt(e){let n=[];for(let t of e)(n.length===0||Math.abs(t[0]-n[n.length-1][0])>1e-7||Math.abs(t[1]-n[n.length-1][1])>1e-7)&&n.push(t);n.length>1&&Math.abs(n[0][0]-n[n.length-1][0])<=1e-7&&Math.abs(n[0][1]-n[n.length-1][1])<=1e-7&&n.pop();let o=[];for(let t=0;t<n.length;t++){let r=n[(t-1+n.length)%n.length],c=n[t],a=n[(t+1)%n.length],s=(c[0]-r[0])*(a[1]-c[1])-(c[1]-r[1])*(a[0]-c[0]);Math.abs(s)>1e-8&&o.push(c)}return o}function et(e){let n=0;for(let o=0;o<e.length;o++){let t=e[o],r=e[(o+1)%e.length];n+=t[0]*r[1]-r[0]*t[1]}return n/2}function tr(e){let n=1/0,o=1/0,t=-1/0,r=-1/0;for(let[c,a]of e)n=Math.min(n,c),o=Math.min(o,a),t=Math.max(t,c),r=Math.max(r,a);return{minX:n,minY:o,maxX:t,maxY:r}}function sc(e,n){let o=tr(e),t=tr(n);return!(o.maxX<t.minX-1e-7||t.maxX<o.minX-1e-7||o.maxY<t.minY-1e-7||t.maxY<o.minY-1e-7)}function Jn(e){return Math.abs(et(e))}function cc(e){if(e.length<3)return!1;let n=0;for(let o=0;o<e.length;o++){let t=e[o],r=e[(o+1)%e.length],c=e[(o+2)%e.length],a=(r[0]-t[0])*(c[1]-r[1])-(r[1]-t[1])*(c[0]-r[0]);if(Math.abs(a)<=1e-8)continue;let s=a>0?1:-1;if(n===0)n=s;else if(n!==s)return!1}return!0}function ic(e,n,o){let t=o[0]-n[0],r=o[1]-n[1],c=e[0]-n[0],a=e[1]-n[1],s=t*a-r*c,i=Math.hypot(t,r);if(i<=1e-9||Math.abs(s)>Math.max(1e-8,i*1e-8))return!1;let l=c*t+a*r;return l>=-1e-8&&l<=t*t+r*r+1e-8}function ac(e,n,o){let t=o[0]-n[0],r=o[1]-n[1],c=t*t+r*r;return c<=1e-12?0:((e[0]-n[0])*t+(e[1]-n[1])*r)/c}function or(e,n){let o=[];for(let t=0;t<e.length;t++){let r=e[t],c=e[(t+1)%e.length],a=[{t:0,point:r},{t:1,point:c}];for(let i of n)jt(i,r)||jt(i,c)||ic(i,r,c)&&a.push({t:ac(i,r,c),point:i});a.sort((i,l)=>i.t-l.t);let s=[];for(let i of a)s.some(l=>Math.abs(l.t-i.t)<=1e-8||jt(l.point,i.point))||s.push(i);for(let i=0;i<s.length-1;i++){let l=s[i].point,u=s[i+1].point;Math.hypot(u[0]-l[0],u[1]-l[1])<=1e-8||o.push({a:[pe(l[0]),pe(l[1])],b:[pe(u[0]),pe(u[1])]})}}return o}function lc(e,n){if(!sc(e,n))return null;let o=[...or(e,n),...or(n,e)],t=new Map;for(let g of o){let x=Ys(g),V=t.get(x);V?V.push(g):t.set(x,[g])}let r=!1,c=[];for(let g of t.values()){if(g.length===1){c.push(g[0]);continue}r=!0;let x=g.filter(C=>be(C.a)<be(C.b)).length,V=g.length-x;if(x!==V)return null}if(!r||c.length<3)return null;let a=new Map;for(let g of c){let x=be(g.a);if(a.has(x))return null;a.set(x,g)}let s=c[0],i=be(s.a),l=[],u=new Set,m=i;for(let g=0;g<=c.length;g++){let x=a.get(m);if(!x)return null;let V=`${be(x.a)}>${be(x.b)}`;if(u.has(V))return null;if(u.add(V),l.push(x.a),m=be(x.b),m===i)break}if(m!==i||u.size!==c.length)return null;let d=Xt(l);if(d.length<3||!cc(d))return null;let f=Jn(d),p=Jn(e)+Jn(n);return Math.abs(f-p)>Math.max(1e-5,p*1e-5)?null:et(d)>=0?d:[...d].reverse()}function uc(e){let n=e.map(Xt).filter(t=>t.length>=3&&Jn(t)>1e-8),o=!0;for(;o;){o=!1;for(let t=0;t<n.length;t++){for(let r=t+1;r<n.length;r++){let c=lc(n[t],n[r]);if(c){n[t]=c,n.splice(r,1),o=!0;break}}if(o)break}}return n}function fc(e,n,o){let t=new Map;return r=>{let c=pe(r[0]),a=pe(r[1]),s=`${c},${a}`,i=t.get(s);if(i)return[i[0],i[1],i[2]];let l=qt(e,qt(an(n,c),an(o,a))),u=[Bt(l[0]),Bt(l[1]),Bt(l[2])];return t.set(s,u),[u[0],u[1],u[2]]}}function mc(e,n,o,t,r){let c=o[0]?.a;if(!c)return null;let a=ln(ze(r,an(t,we(r,t))));if(!a)return null;let s=ln(rr(t,a));if(!s)return null;let i=[],l=[];for(let x of o){let V=nr(x.a,c,a,s),C=nr(x.b,c,a,s);Math.hypot(V[0]-C[0],V[1]-C[1])<=1e-7||(i.push({a:V,b:C}),l.push(V[0],C[0]))}let u=rc(l);if(i.length<3||u.length<2)return null;let m=n[e[0]].color,d=Zs(e,n),f=[];for(let x=0;x<u.length-1;x++){let V=u[x],C=u[x+1];if(C-V<=1e-7)continue;let v=(V+C)/2,M=i.filter(y=>{let P=Math.min(y.a[0],y.b[0]),S=Math.max(y.a[0],y.b[0]);return P<v&&v<S&&Math.abs(y.a[0]-y.b[0])>1e-7}).map(y=>({segment:y,yMid:sn(y,v)})).sort((y,P)=>y.yMid-P.yMid);if(M.length!==0){if(M.length%2!==0)return null;for(let y=0;y<M.length;y+=2){let P=M[y].segment,S=M[y+1].segment,h=sn(P,V),b=sn(P,C),A=sn(S,V),I=sn(S,C),R=Xt([[V,h],[C,b],[C,I],[V,A]]);if(R.length<3||Math.abs(et(R))<=1e-8)continue;let k=et(R)>0?R:[...R].reverse();f.push(k)}}}if(f.length===0)return null;let p=fc(c,a,s),g=uc(f).map(x=>({vertices:x.map(p),...m?{color:m}:{},...d?{data:d}:{}}));return ae(g)}function dc(e,n,o){let t=Js(e,n);if(!t||t.length<3||!ec(t))return null;let r=ir(n[e[0]]);if(!r)return null;let c=null;for(let a of oc(t,r.normal,o)){let s=mc(e,n,t,r.normal,a);s&&(!c||s.length<c.length)&&(c=s)}return!c||c.length>=e.length?null:c}function nt(e,n={}){let o=n.minGroupPolygons??Us,t=n.maxCandidateAxes??Bs,r=n.planeEpsilon??js,c=e??[];if(c.length<o)return c;let{groups:a}=Qs(c,r);if(a.length===0)return c;let s=new Map,i=new Set;for(let u of a){if(u.length<o)continue;let m=dc(u,c,t);if(m){s.set(u[0],m);for(let d of u)i.add(d)}}if(s.size===0)return c;let l=[];for(let u=0;u<c.length;u++){let m=s.get(u);if(m){l.push(...m);continue}i.has(u)||l.push(c[u])}return l}function pc(e){let n=e.vertices;if(!n||n.length<3)return null;let o=0,t=0,r=0;for(let[k,T,z]of n)o+=k,t+=T,r+=z;let c=1/n.length;o*=c,t*=c,r*=c;let a=n[0],s=n[1],i=n[2],l=s[0]-a[0],u=s[1]-a[1],m=s[2]-a[2],d=i[0]-a[0],f=i[1]-a[1],p=i[2]-a[2],g=u*p-m*f,x=m*d-l*p,V=l*f-u*d,C=Math.hypot(g,x,V);if(C<1e-9)return null;g/=C,x/=C,V/=C;let v=n.length-2,M=new Float64Array(v*9),y=0;for(let k=1;k<n.length-1;k++){let T=n[0],z=n[k],D=n[k+1];M[y++]=T[0],M[y++]=T[1],M[y++]=T[2],M[y++]=z[0],M[y++]=z[1],M[y++]=z[2],M[y++]=D[0],M[y++]=D[1],M[y++]=D[2]}let P=0,S=1/0,h=1/0,b=1/0,A=-1/0,I=-1/0,R=-1/0;for(let[k,T,z]of n){let D=k-o,L=T-t,w=z-r,O=D*D+L*L+w*w;O>P&&(P=O),k<S&&(S=k),k>A&&(A=k),T<h&&(h=T),T>I&&(I=T),z<b&&(b=z),z>R&&(R=z)}return{centroid:[o,t,r],normal:[g,x,V],vertices:n,triFlat:M,bcx:o,bcy:t,bcz:r,br2:P,minX:S,minY:h,minZ:b,maxX:A,maxY:I,maxZ:R}}function gc(e,n,o,t,r,c,a,s){let i=a[s],l=a[s+1],u=a[s+2],m=a[s+3]-i,d=a[s+4]-l,f=a[s+5]-u,p=a[s+6]-i,g=a[s+7]-l,x=a[s+8]-u,V=r*x-c*g,C=c*p-t*x,v=t*g-r*p,M=m*V+d*C+f*v;if(M>-1e-9&&M<1e-9)return!1;let y=1/M,P=e-i,S=n-l,h=o-u,b=y*(P*V+S*C+h*v);if(b<0||b>1)return!1;let A=S*f-h*d,I=h*m-P*f,R=P*d-S*m,k=y*(t*A+r*I+c*R);return k<0||b+k>1?!1:y*(p*A+g*I+x*R)>.001}function yc(e,n,o,t,r,c,a){let s=a.bcx-e,i=a.bcy-n,l=a.bcz-o,u=s*t+i*r+l*c,m=s-u*t,d=i-u*r,f=l-u*c;if(m*m+d*d+f*f>a.br2)return!1;let p=a.triFlat,g=p.length;for(let x=0;x<g;x+=9)if(gc(e,n,o,t,r,c,p,x))return!0;return!1}var un=9,hc=6,se=12;function Yt(e,n,o,t,r,c){let a=t-e,s=r-n,i=c-o;return a*s+s*i+i*a}function bc(e){let n=[];for(let P=0;P<e.length;P++)e[P]&&n.push(P);let o=n.length,t=new Int32Array(o);for(let P=0;P<o;P++)t[P]=n[P];let r=new Float64Array(o),c=new Float64Array(o),a=new Float64Array(o);for(let P=0;P<o;P++){let S=e[t[P]];r[P]=(S.minX+S.maxX)*.5,c[P]=(S.minY+S.maxY)*.5,a[P]=(S.minZ+S.maxZ)*.5}let s=2*Math.max(1,o)+1,i=new Float64Array(s*un),l=0,u=new Float64Array(se),m=new Float64Array(se),d=new Float64Array(se),f=new Float64Array(se),p=new Float64Array(se),g=new Float64Array(se),x=new Int32Array(se),V=new Float64Array(se-1),C=new Int32Array(se-1),v=new Float64Array(se-1),M=new Int32Array(se-1);function y(P,S){let h=l++,b=h*un,A=S-P,I=1/0,R=1/0,k=1/0,T=-1/0,z=-1/0,D=-1/0;for(let X=P;X<S;X++){let K=e[t[X]];K.minX<I&&(I=K.minX),K.maxX>T&&(T=K.maxX),K.minY<R&&(R=K.minY),K.maxY>z&&(z=K.maxY),K.minZ<k&&(k=K.minZ),K.maxZ>D&&(D=K.maxZ)}if(i[b]=I,i[b+1]=R,i[b+2]=k,i[b+3]=T,i[b+4]=z,i[b+5]=D,A<=hc)return i[b+6]=1,i[b+7]=P,i[b+8]=S,h;let L=1/0,w=1/0,O=1/0,E=-1/0,_=-1/0,N=-1/0;for(let X=P;X<S;X++)r[X]<L&&(L=r[X]),r[X]>E&&(E=r[X]),c[X]<w&&(w=c[X]),c[X]>_&&(_=c[X]),a[X]<O&&(O=a[X]),a[X]>N&&(N=a[X]);let G=E-L,$=_-w,F=N-O;if(G===0&&$===0&&F===0)return i[b+6]=1,i[b+7]=P,i[b+8]=S,h;let q=Yt(I,R,k,T,z,D),j=q>0?1/q:0,U=A+1,B=0,H=0;for(let X=0;X<3;X++){let K=X===0?L:X===1?w:O,le=X===0?G:X===1?$:F;if(le===0)continue;let Pe=X===0?r:X===1?c:a,Te=se/le;u.fill(1/0),m.fill(1/0),d.fill(1/0),f.fill(-1/0),p.fill(-1/0),g.fill(-1/0),x.fill(0);for(let Y=P;Y<S;Y++){let W=(Pe[Y]-K)*Te|0;W>=se&&(W=se-1);let ue=e[t[Y]];ue.minX<u[W]&&(u[W]=ue.minX),ue.maxX>f[W]&&(f[W]=ue.maxX),ue.minY<m[W]&&(m[W]=ue.minY),ue.maxY>p[W]&&(p[W]=ue.maxY),ue.minZ<d[W]&&(d[W]=ue.minZ),ue.maxZ>g[W]&&(g[W]=ue.maxZ),x[W]++}let Xe=1/0,Ye=1/0,Ct=1/0,At=-1/0,St=-1/0,Tt=-1/0,Co=0;for(let Y=0;Y<se-1;Y++)u[Y]<Xe&&(Xe=u[Y]),f[Y]>At&&(At=f[Y]),m[Y]<Ye&&(Ye=m[Y]),p[Y]>St&&(St=p[Y]),d[Y]<Ct&&(Ct=d[Y]),g[Y]>Tt&&(Tt=g[Y]),Co+=x[Y],V[Y]=Yt(Xe,Ye,Ct,At,St,Tt),C[Y]=Co;let Ot=1/0,It=1/0,zt=1/0,wt=-1/0,kt=-1/0,Rt=-1/0,Ao=0;for(let Y=se-2;Y>=0;Y--){let W=Y+1;u[W]<Ot&&(Ot=u[W]),f[W]>wt&&(wt=f[W]),m[W]<It&&(It=m[W]),p[W]>kt&&(kt=p[W]),d[W]<zt&&(zt=d[W]),g[W]>Rt&&(Rt=g[W]),Ao+=x[W],v[Y]=Yt(Ot,It,zt,wt,kt,Rt),M[Y]=Ao}for(let Y=0;Y<se-1;Y++){if(C[Y]===0||M[Y]===0)continue;let W=.125+(V[Y]*C[Y]+v[Y]*M[Y])*j;W<U&&(U=W,B=X,H=K+(Y+1)/Te)}}let Z=B===0?r:B===1?c:a,J=P,ne=S-1;for(;J<=ne;)if(Z[J]<H)J++;else{let X=t[J];t[J]=t[ne],t[ne]=X;let K=r[J];r[J]=r[ne],r[ne]=K;let le=c[J];c[J]=c[ne],c[ne]=le;let Pe=a[J];a[J]=a[ne],a[ne]=Pe,ne--}let ie=J;(ie===P||ie===S)&&(ie=P+S>>1),i[b+6]=0;let oe=y(P,ie),Q=y(ie,S);return i[h*un+7]=oe,i[h*un+8]=Q,h}return o>0&&y(0,o),{data:i,nodeCount:l,polyIndices:t,meta:e}}function lr(e,n,o,t,r,c,a,s,i){if(s.nodeCount===0)return!1;let{data:l,polyIndices:u,meta:m}=s,d=t!==0?1/t:t>=0?1/0:-1/0,f=r!==0?1/r:r>=0?1/0:-1/0,p=c!==0?1/c:c>=0?1/0:-1/0,g=0;for(i[g++]=0;g>0;){let V=i[--g]*un,C=(l[V]-e)*d,v=(l[V+3]-e)*d,M=C<v?C:v,y=C<v?v:C,P=(l[V+1]-n)*f,S=(l[V+4]-n)*f,h=P<S?P:S,b=P<S?S:P;if(M>b||h>y)continue;h>M&&(M=h),b<y&&(y=b);let A=(l[V+2]-o)*p,I=(l[V+5]-o)*p,R=A<I?A:I,k=A<I?I:A;if(!(M>k||R>y)&&(k<y&&(y=k),!(y<.001)))if(l[V+6]===1){let T=l[V+7]|0,z=l[V+8]|0;for(let D=T;D<z;D++){let L=u[D];if(L===a)continue;let w=m[L];if(w&&yc(e,n,o,t,r,c,w))return!0}}else i[g++]=l[V+7]|0,i[g++]=l[V+8]|0}return!1}function xc(e){let n=(1+Math.sqrt(5))/2,o=new Float64Array(e*3);for(let t=0;t<e;t++){let r=(t+.5)/e,c=Math.sqrt(Math.max(0,1-r*r)),a=2*Math.PI*(t/n);o[t*3]=c*Math.cos(a),o[t*3+1]=c*Math.sin(a),o[t*3+2]=r}return o}function Pc(e){let n=Math.abs(e[0])>.9?0:1,o=Math.abs(e[0])>.9?1:0,t=o*e[2],r=-n*e[2],c=n*e[1]-o*e[0],a=Math.hypot(t,r,c);t/=a,r/=a,c/=a;let s=e[1]*c-e[2]*r,i=e[2]*t-e[0]*c,l=e[0]*r-e[1]*t;return{ux:t,uy:r,uz:c,vx:s,vy:i,vz:l}}function Ce(e,n){let o=n?.samples??8;if(e.length<4||o<1)return e;let t=e.map(pc),r=xc(o),c=[],a=bc(t),s=new Int32Array(Math.max(64,a.nodeCount)),i=192,l=new Float64Array(i);for(let u=0;u<e.length;u++){let m=t[u];if(!m){c.push(e[u]);continue}let d=m.normal[0],f=m.normal[1],p=m.normal[2],g=.001*d,x=.001*f,V=.001*p;{let z=m.centroid[0]+g,D=m.centroid[1]+x,L=m.centroid[2]+V;if(!lr(z,D,L,d,f,p,u,a,s)){c.push(e[u]);continue}}let{ux:C,uy:v,uz:M,vx:y,vy:P,vz:S}=Pc(m.normal),h=m.centroid[0],b=m.centroid[1],A=m.centroid[2],I=m.vertices,R=I.length,k=0;l[k++]=h+g,l[k++]=b+x,l[k++]=A+V;for(let z=0;z<R;z++){let D=I[z];l[k++]=D[0]+(h-D[0])*.08+g,l[k++]=D[1]+(b-D[1])*.08+x,l[k++]=D[2]+(A-D[2])*.08+V}for(let z=0;z<R;z++){let D=I[z],L=I[(z+1)%R],w=(D[0]+L[0])*.5,O=(D[1]+L[1])*.5,E=(D[2]+L[2])*.5;l[k++]=w+(h-w)*.08+g,l[k++]=O+(b-O)*.08+x,l[k++]=E+(A-E)*.08+V}let T=!1;e:for(let z=0;z<r.length;z+=3){let D=r[z],L=r[z+1],w=r[z+2],O=D*C+L*y+w*d,E=D*v+L*P+w*f,_=D*M+L*S+w*p;for(let N=0;N<k;N+=3){let G=l[N],$=l[N+1],F=l[N+2];if(!lr(G,$,F,O,E,_,u,a,s)){T=!0;break e}}}T&&c.push(e[u])}return c}var Mc=3,Vc=.03,vc=.02,fn={maxAngleDeg:Mc,maxPlaneDisplacement:Vc,maxBoundaryDisplacement:vc,isolatedPairs:!1},Ze={maxAngleDeg:15,maxPlaneDisplacement:.35,maxBoundaryDisplacement:.0725,isolatedPairs:!0},ot=[{maxAngleDeg:15,maxPlaneDisplacement:.35,maxBoundaryDisplacement:.02},{maxAngleDeg:15,maxPlaneDisplacement:.35,maxBoundaryDisplacement:.0725},{maxAngleDeg:45,maxPlaneDisplacement:1,maxBoundaryDisplacement:.0725}],Cc=[2,4,6,8,12],Ac=300,Sc=.3,Tc=300,Oc=16,Ic=.015,ur=2.6,zc=3,wc=96,ke={minGroupPolygons:2,maxCandidateAxes:24},kc={maxGap:0,internalBoundaryLength:0,excessBoundaryLength:0};function at(e,n={}){let o=n.meshResolution??"lossy",t=Wt(e,!1),r={baseline:t},c=t,a=ce(t),s=(l,u=ce(l))=>u>=a?!1:(c=l,a=u,!0),i=tt(t,n.rectCover);if(i!==t&&s(i),o==="lossy"&&n.approximateMerge!==!1){let l=jc(e),u=[],m=he(l,c,Ze.maxBoundaryDisplacement).metrics,d=n.approximateMerge===void 0||n.approximateMerge===!0,f=(C,v=!0)=>!Uc(l,C.metrics,C.tolerance,v?m:null),p=(C,v)=>{s(C,v)},g=(C,v,M=Ze.maxBoundaryDisplacement)=>{!d||v>a+gr(a)||u.push({polygons:C,cost:v,maxBoundaryDisplacement:M})},x=fr(n.approximateMerge,d?t:void 0);for(let C=0;C<x.length;C++){let v=x[C],M=Wt(e,v,r),y=ce(M),P=null,S=()=>(P??(P=he(l,M,v.maxBoundaryDisplacement)),P),h=!0;if(d||v.guard){let k=S();h=f(k,!!v.allowReferenceCracks)}if(!h&&y<a)continue;h&&(p(M,y),g(M,y,v.maxBoundaryDisplacement));let b=tt(M,n.rectCover),A=ce(b),I=null,R=()=>(I??(I=he(l,b,v.maxBoundaryDisplacement)),I);if(b!==M&&A<a){let k=!0;(d||v.guard)&&(k=f(R(),!!v.allowReferenceCracks)),k&&(p(b,A),g(b,A,v.maxBoundaryDisplacement))}}if(d)for(let C of Rc(e)){let v={baseline:ae(Ce(C))},M=ce(v.baseline),y=!0,P=null,S=()=>(P??(P=he(l,v.baseline,Ze.maxBoundaryDisplacement)),P);M<a&&(y=f(S())),y&&(p(v.baseline,M),g(v.baseline,M));let h=tt(v.baseline,n.rectCover);if(h!==v.baseline){let b=ce(h);(b>=a||f(he(l,h,Ze.maxBoundaryDisplacement)))&&(p(h,b),g(h,b))}for(let b of fr(n.approximateMerge,v.baseline)){let A=Wt(C,b,v),I=ce(A),R=null,k=()=>(R??(R=he(l,A,b.maxBoundaryDisplacement)),R),T=!0;if(d||b.guard){let O=k();T=f(O,!!b.allowReferenceCracks)}if(!T&&I<a)continue;T&&(p(A,I),g(A,I,b.maxBoundaryDisplacement));let z=tt(A,n.rectCover),D=ce(z),L=null,w=()=>(L??(L=he(l,z,b.maxBoundaryDisplacement)),L);if(z!==A&&D<a){let O=!0;(d||b.guard)&&(O=f(w(),!!b.allowReferenceCracks)),O&&(p(z,D),g(z,D,b.maxBoundaryDisplacement))}}}if(d)for(let C of ot){let v=Mr({...C,isolatedPairs:!0}),M=oi(c,v);if(M===c)continue;let y=ce(M);if(y>=a)continue;let P=he(l,M,v.maxBoundaryDisplacement);f(P)&&(p(M,y),g(M,y,v.maxBoundaryDisplacement))}let V=Nc(u,c,a,C=>(C.metrics??(C.metrics=he(l,C.polygons,C.maxBoundaryDisplacement).metrics),C.metrics),()=>he(l,c,Ze.maxBoundaryDisplacement).metrics);V&&(c=V.polygons,a=V.cost)}return c}function Rc(e){let n=Ec(e);if(n.eligiblePolygons<24||n.colorCount<8)return[];let o=[],t=new Set;for(let r of Cc){let c=Dc(e,r,n.colorCount);if(!c)continue;let a=_c(c);t.has(a)||(t.add(a),o.push(c))}return o}function Ec(e){let n=new Set,o=0;for(let t of e)t.texture||t.material?.texture||t.uvs||t.textureTriangles?.length||pr(t.color)&&(o+=1,n.add(t.color??"#cccccc"));return{eligiblePolygons:o,colorCount:n.size}}function Dc(e,n,o){let t=!1,r=new Set,c=e.map(a=>{if(a.texture||a.material?.texture||a.uvs||a.textureTriangles?.length)return a;let s=pr(a.color);if(!s)return a;let i=Lc([Math.round(s[0]/n)*n,Math.round(s[1]/n)*n,Math.round(s[2]/n)*n]);return r.add(i),i===a.color?a:(t=!0,{...a,color:i})});return!t||r.size>=o?null:c}function pr(e){let n=e??"#cccccc",o=/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(n);if(o)return[parseInt(o[1]+o[1],16),parseInt(o[2]+o[2],16),parseInt(o[3]+o[3],16)];let t=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(n);return t?[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]:null}function Lc(e){return`#${e.map(n=>Math.max(0,Math.min(255,Math.round(n))).toString(16).padStart(2,"0")).join("")}`}function _c(e){return e.map(n=>n.color??"").join("|")}function fr(e,n){if(e&&e!==!0)return typeof e.isolatedPairs=="boolean"?[{...e,guard:e.isolatedPairs===!1}]:[{...e,isolatedPairs:!0,guard:!1},{...e,isolatedPairs:!1,guard:!0}];if(n&&Gc(n))return[{...ot[0],isolatedPairs:!0,guard:!1,allowReferenceCracks:!0}];let o=[],t=new Set,r=n&&n.length>Tc?[!0]:[!0,!1];for(let c=0;c<ot.length;c++){let a=ot[c];for(let s of r){let i={...a,isolatedPairs:s,guard:c>0||s===!1,allowReferenceCracks:!0},l=[i.maxAngleDeg,i.maxPlaneDisplacement,i.maxBoundaryDisplacement,i.isolatedPairs].join("|");t.has(l)||(t.add(l),o.push(i))}}return o.length===0?[{...Ze,guard:!1}]:o}function Gc(e){return e.length<Ac?!1:xr(e)/e.length<=Sc}function ce(e){let n=0;for(let o of e){let t=o.vertices.length,r=t<=4?0:Math.min(4,t-4)*.12,c=o.texture||o.material?.texture||o.textureTriangles?.length?.15:0;n+=1+r+c}return n}function gr(e){return Math.max(Oc,e*Ic)}function Nc(e,n,o,t,r){if(e.length===0)return null;let c=gr(o),a=e.find(u=>u.polygons===n),s=null,i=null,l=null;for(let u of e){if(u.polygons===n||u.cost>o+c)continue;let m=t(u);s??(s=a?t(a):r()),Fc(m,s)&&(!i||!l||$c(u,m,i,l)<0)&&(i=u,l=m)}return i}function $c(e,n,o,t){return n.maxGap-t.maxGap||n.internalBoundaryLength-t.internalBoundaryLength||n.excessBoundaryLength-t.excessBoundaryLength||e.cost-o.cost}function Fc(e,n){let o=Math.max(5e-4,n.maxGap*.02);if(e.maxGap<n.maxGap-o)return!0;if(e.maxGap>n.maxGap+o)return!1;let t=Math.max(8,n.internalBoundaryLength*.01);if(e.internalBoundaryLength<n.internalBoundaryLength-t)return!0;if(e.internalBoundaryLength>n.internalBoundaryLength+t)return!1;let r=Math.max(8,n.excessBoundaryLength*.01);return e.excessBoundaryLength<n.excessBoundaryLength-r}function Uc(e,n,o,t=null){if(!t)return n.internalBoundaryLength>0||n.excessBoundaryLength>o;let r=Math.max(o*.1,1e-6),c=t.maxGap+r,a=o<=.08?Math.max(c,Math.min(o*.75,.04)):c,s=Math.max(o*2,t.internalBoundaryLength*.15),i=Math.max(o*2,t.excessBoundaryLength*.15);return n.maxGap>a||n.internalBoundaryLength>t.internalBoundaryLength+s||n.excessBoundaryLength>t.excessBoundaryLength+i}function Bc(e,n,o=0,t=Zt(e,o)){let r=e.edges,c=yr(n),a=Zt(e,o),s=t>0?Hc(e,t):null,i={...kc,excessBoundaryLength:Math.max(0,c.boundaryLength-r.boundaryLength)};for(let l of c.boundarySegments){let u=Qe(l.a,l.b);if(r.boundaryKeys.has(u))continue;if(r.internalKeys.has(u)){i.internalBoundaryLength+=xe(l.a,l.b);continue}let m=s?Wc(l,s,t):null;m!==null&&(i.maxGap=Math.max(i.maxGap,m),i.internalBoundaryLength+=xe(l.a,l.b))}return{metrics:i,tolerance:a}}function he(e,n,o=0){return Bc(e,n,o,qc(e,o))}function jc(e){let n=Xc(e),o=n>0?Math.min(.08,Math.max(.001,n*.001)):0;return{edges:yr(e),baseTolerance:o,polygonCount:e.length,indexes:new Map}}function Zt(e,n=0){return Math.max(e.baseTolerance,n*1.05)}function qc(e,n=0){return Math.max(Zt(e,n),e.baseTolerance*ur,n*ur)}function Hc(e,n){let o=n.toFixed(6),t=e.indexes.get(o);if(t)return t;let r=Yc(e.edges.internalSegments,n);return e.indexes.set(o,r),r}function yr(e){let n=new Map;for(let s of e)for(let i=0;i<s.vertices.length;i++){let l=s.vertices[i],u=s.vertices[(i+1)%s.vertices.length],m=Qe(l,u),d=n.get(m);d?d.count+=1:n.set(m,{count:1,a:l,b:u})}let o=new Set,t=new Set,r=[],c=[],a=0;for(let[s,i]of n){let l={a:i.a,b:i.b};i.count===1?(o.add(s),r.push(l),a+=xe(l.a,l.b)):(t.add(s),c.push(l))}return{boundaryKeys:o,internalKeys:t,boundarySegments:r,internalSegments:c,boundaryLength:a}}function Xc(e){let n=1/0,o=1/0,t=1/0,r=-1/0,c=-1/0,a=-1/0;for(let s of e)for(let[i,l,u]of s.vertices)n=Math.min(n,i),o=Math.min(o,l),t=Math.min(t,u),r=Math.max(r,i),c=Math.max(c,l),a=Math.max(a,u);return Number.isFinite(n)?Math.hypot(r-n,c-o,a-t):0}function Yc(e,n){let o=Math.max(n*2,1e-6),t=new Map;for(let r of e){let[c,a,s]=hr(r,o),i=br(c,a,s),l=t.get(i);l?l.push(r):t.set(i,[r])}return{cellSize:o,cells:t}}function Wc(e,n,o){let[t,r,c]=hr(e,n.cellSize),a=null;for(let s=-1;s<=1;s++)for(let i=-1;i<=1;i++)for(let l=-1;l<=1;l++){let u=n.cells.get(br(t+s,r+i,c+l));if(u)for(let m of u){let d=Kc(e,m);d<=o&&(a=a===null?d:Math.min(a,d))}}return a}function hr(e,n){return[Math.floor((e.a[0]+e.b[0])/2/n),Math.floor((e.a[1]+e.b[1])/2/n),Math.floor((e.a[2]+e.b[2])/2/n)]}function br(e,n,o){return`${e},${n},${o}`}function Kc(e,n){return Math.min(Math.max(xe(e.a,n.a),xe(e.b,n.b)),Math.max(xe(e.a,n.b),xe(e.b,n.a)))}function tt(e,n){if(n===!1)return e;let o=Zc(e,n);if(!o)return e;let t=nt(e,o);return t.length<e.length?t:e}function Zc(e,n){if(n&&n!==!0)return n;let o=e.length;return o>2200?null:o>1200?{...ke,maxCandidateAxes:Math.min(ke.maxCandidateAxes??24,2)}:o>300&&xr(e)<=wc?{...ke,maxCandidateAxes:Math.min(ke.maxCandidateAxes??24,2)}:o>900?{...ke,maxCandidateAxes:Math.min(ke.maxCandidateAxes??24,4)}:ke}function xr(e){let n=0;for(let o of e)o.vertices.length===3&&(n+=1);return n}function Wt(e,n,o){let t=Qn(e),r=o?.baseline??ae(Ce(t));if(!n)return r;let c=n===!0?fn:Mr(n);if(c.isolatedPairs){let s=Jc(Qc(t,o),c),i=ae(s);return i.length<r.length?i:r}let a=ae(Ce(di(t,c,o)));return a.length<r.length?a:r}function Pr(e,n){return n?(n.snapped||(n.snapped=st(e)),n.snapped):st(e)}function Qc(e,n){return n?(n.snappedInterior||(n.snappedInterior=Ce(Pr(e,n))),n.snappedInterior):Ce(st(e))}function Mr(e){return{maxAngleDeg:e.maxAngleDeg??fn.maxAngleDeg,maxPlaneDisplacement:e.maxPlaneDisplacement??fn.maxPlaneDisplacement,maxBoundaryDisplacement:e.maxBoundaryDisplacement??fn.maxBoundaryDisplacement,isolatedPairs:e.isolatedPairs??fn.isolatedPairs}}function Jc(e,n){let o=e.map(m=>{let d=dn(m);return d?{polygon:m,normal:d.normal,area:d.area,materialKey:eo(m)}:null}),t=new Map;for(let m=0;m<e.length;m++){let d=e[m];if(!(d.vertices.length!==3||!o[m]))for(let f=0;f<d.vertices.length;f++){let p=Qe(d.vertices[f],d.vertices[(f+1)%d.vertices.length]),g=t.get(p);g?g.push(m):t.set(p,[m])}}let r=[];for(let m of t.values()){if(m.length!==2)continue;let[d,f]=m,p=mi(d,f,e,o,n);p&&r.push(p)}let c=new Set,a=new Map,s=new Set,i=ei(r),l=lt(i.flatMap(m=>m.vertexMoves));for(let m of i){c.add(m.a),c.add(m.b);let d=Math.min(m.a,m.b);a.set(d,m.polygon),s.add(Math.max(m.a,m.b))}let u=[];for(let m=0;m<e.length;m++){let d=a.get(m);if(d){u.push(d);continue}s.has(m)||u.push(e[m])}return l.size>0?ut(u,l):u}function ei(e){return e.length>3e3?ni(e):ti(e)}function ni(e){let n=new Map;for(let c of e)n.set(c.a,(n.get(c.a)??0)+1),n.set(c.b,(n.get(c.b)??0)+1);let o=[...e].sort((c,a)=>{let s=(n.get(c.a)??0)+(n.get(c.b)??0),i=(n.get(a.a)??0)+(n.get(a.b)??0);return s-i||c.score-a.score}),t=new Set,r=[];for(let c of o)t.has(c.a)||t.has(c.b)||(t.add(c.a),t.add(c.b),r.push(c));return r}function ti(e){let n=new Map;for(let l=0;l<e.length;l++){let u=e[l],m=n.get(u.a);m?m.push(l):n.set(u.a,[l]);let d=n.get(u.b);d?d.push(l):n.set(u.b,[l])}let o=[],t=new Array(e.length).fill(!0),r=new Map,c=new Qt;for(let[l,u]of n)r.set(l,u.length);let a=l=>(r.get(l.a)??0)+(r.get(l.b)??0),s=l=>{let u=e[l];c.push({degree:a(u),score:u.score,index:l})},i=(l,u)=>{if(!t[l])return;t[l]=!1;let m=e[l];for(let d of[m.a,m.b])r.set(d,(r.get(d)??0)-1),u.add(d)};for(let l=0;l<e.length;l++)s(l);for(;c.size()>0;){let l=c.pop();if(!t[l.index])continue;let u=e[l.index];if(a(u)!==l.degree){s(l.index);continue}o.push(u);let d=new Set;for(let f of[u.a,u.b])for(let p of n.get(f)??[])i(p,d);for(let f of d)for(let p of n.get(f)??[])t[p]&&s(p)}return o}var Qt=class{constructor(){this.items=[]}size(){return this.items.length}push(n){this.items.push(n);let o=this.items.length-1;for(;o>0;){let t=o-1>>1;if(Kt(this.items[t],this.items[o])<=0)break;[this.items[t],this.items[o]]=[this.items[o],this.items[t]],o=t}}pop(){if(this.items.length===0)return null;let n=this.items[0],o=this.items.pop();if(this.items.length>0){this.items[0]=o;let t=0;for(;;){let r=t*2+1,c=r+1,a=t;if(r<this.items.length&&Kt(this.items[r],this.items[a])<0&&(a=r),c<this.items.length&&Kt(this.items[c],this.items[a])<0&&(a=c),a===t)break;[this.items[t],this.items[a]]=[this.items[a],this.items[t]],t=a}}return n}};function Kt(e,n){return e.degree-n.degree||e.score-n.score||e.index-n.index}function oi(e,n){let o=e,t=ce(o),r=ii(o);for(let c=0;c<zc;c++){let a=ri(o,n,r);if(!a)break;let s=ce(a.polygons);if(s>=t)break;o=a.polygons,t=s,r=a.origins}return o===e?e:o}function ri(e,n,o){let t=e.map(d=>{let f=dn(d);return f?{polygon:d,normal:f.normal,area:f.area,materialKey:eo(d)}:null}),r=new Map;for(let d=0;d<e.length;d++){let f=e[d];if(!(!t[d]||f.vertices.length<3))for(let p=0;p<f.vertices.length;p++){let g=Qe(f.vertices[p],f.vertices[(p+1)%f.vertices.length]),x=r.get(g);x?x.push({polygon:d,edge:p}):r.set(g,[{polygon:d,edge:p}])}}let c=[];for(let d of r.values()){if(d.length!==2)continue;let[f,p]=d,g=si(f.polygon,f.edge,p.polygon,p.edge,e,t,n);g&&c.push(g)}if(c.length===0)return null;c.sort((d,f)=>f.score-d.score);let a=new Set,s=[];for(let d of c)a.has(d.a)||a.has(d.b)||(a.add(d.a),a.add(d.b),s.push(d));if(s.length===0)return null;let i=lt(s.flatMap(d=>d.vertexMoves));if(!ci(i,o,n.maxBoundaryDisplacement))return null;let l=ut(e,i),u=ai(e,i,o),m=ae(l);return ce(m)<ce(e)?{polygons:m,origins:li(m,u)}:null}function si(e,n,o,t,r,c,a){let s=r[e],i=r[o],l=c[e],u=c[o];if(!l||!u||s.vertices.length===3&&i.vertices.length===3||!Or(s,i,l,u))return null;let m=Math.abs(ge(l.normal,u.normal)),d=Math.cos(a.maxAngleDeg*Math.PI/180);if(m<d)return null;let f=mr(s,i,n)??mr(i,s,t);if(!f||f.length<4||f.length>10)return null;let p=vr(f);if(!p)return null;let g=0,x=0;for(let h of f){let b=Math.abs(ft(h,p));g=Math.max(g,b),x+=b*b}if(g>Math.min(a.maxPlaneDisplacement,a.maxBoundaryDisplacement))return null;let V=f.map(h=>mt(h,p));if(!Cr(V,p.normal))return null;let C=dn({vertices:V});if(!C||ge(C.normal,l.normal)<.2||ge(C.normal,u.normal)<.2)return null;let v=[...f.map((h,b)=>({key:re(h),target:V[b]})),...Vr([s,i],p)],M=ut([s,i],lt(v)),y=ce([s,i]),P=ce(ae(M));if(P>=y)return null;let S=y-P-(x/f.length+g*.25+(1-m)*.1);return S<=0?null:{a:e,b:o,vertexMoves:v,score:S}}function mr(e,n,o){let t=e.vertices,r=n.vertices,c=t[o],a=t[(o+1)%t.length],s=-1;for(let u=0;u<r.length;u++)if(Ae(r[u],a)&&Ae(r[(u+1)%r.length],c)){s=u;break}if(s<0)return null;let i=[],l=(o+1)%t.length;for(i.push(t[l]);l!==o;)l=(l+1)%t.length,i.push(t[l]);for(l=(s+2)%r.length;l!==s;){let u=r[l];Ae(u,i[i.length-1])||i.push(u),l=(l+1)%r.length}return i.length>1&&Ae(i[0],i[i.length-1])&&i.pop(),i}function ci(e,n,o){for(let[t,r]of e){let c=ui(t),a=n.get(t)??(c?[c]:[]);if(a.length===0)return!1;for(let s of a)if(xe(s,r)>o+1e-6)return!1}return!0}function ii(e){let n=new Map;for(let o of e){for(let t of o.vertices)rt(n,re(t),t);for(let t of o.textureTriangles??[])for(let r of t.vertices)rt(n,re(r),r)}return n}function ai(e,n,o){let t=new Map;for(let r of e){let c=[...r.vertices,...(r.textureTriangles??[]).flatMap(a=>a.vertices)];for(let a of c){let s=re(a),i=n.get(s)??a,l=re(i);for(let u of o.get(s)??[a])rt(t,l,u)}}return t}function li(e,n){let o=new Map;for(let t of e){let r=[...t.vertices,...(t.textureTriangles??[]).flatMap(c=>c.vertices)];for(let c of r){let a=re(c);for(let s of n.get(a)??[c])rt(o,a,s)}}return o}function rt(e,n,o){let t=e.get(n);if(!t){e.set(n,[o]);return}let r=re(o);t.some(c=>re(c)===r)||t.push(o)}function ui(e){let n=e.split(",").map(Number);return n.length===3&&n.every(Number.isFinite)?[n[0],n[1],n[2]]:null}function lt(e){let n=new Map;for(let t of e){let r=n.get(t.key);r?(r.x+=t.target[0],r.y+=t.target[1],r.z+=t.target[2],r.count+=1):n.set(t.key,{x:t.target[0],y:t.target[1],z:t.target[2],count:1})}let o=new Map;for(let[t,r]of n)o.set(t,[r.x/r.count,r.y/r.count,r.z/r.count]);return o}function fi(e,n){let o=[];for(let t=0;t<e.length;t++){let r=e[t].vertices,c=n[t]?.vertices;if(!c||c.length!==r.length)continue;for(let i=0;i<r.length;i++)o.push({key:re(r[i]),target:c[i]});let a=e[t].textureTriangles??[],s=n[t]?.textureTriangles??[];for(let i=0;i<a.length;i++){let l=s[i];if(l)for(let u=0;u<a[i].vertices.length;u++)o.push({key:re(a[i].vertices[u]),target:l.vertices[u]})}}return o}function Vr(e,n){let o=[];for(let t of e)for(let r of t.textureTriangles??[])for(let c of r.vertices)o.push({key:re(c),target:mt(c,n)});return o}function ut(e,n){return e.map(o=>{let t=!1,r=s=>{let i=n.get(re(s));return i?(t=!0,i):s},c=o.vertices.map(r),a=Jt(o.textureTriangles,r);return t?{...o,vertices:c,...a?{textureTriangles:a}:{}}:o})}function mi(e,n,o,t,r){let c=o[e],a=o[n],s=t[e],i=t[n];if(!s||!i||c.vertices.length!==3||a.vertices.length!==3||!Or(c,a,s,i))return null;let l=to(c,a);if(!l)return null;let[u,m,d,f]=l;if((d+1)%a.vertices.length===f)return null;let g=Math.abs(ge(s.normal,i.normal)),x=Math.cos(r.maxAngleDeg*Math.PI/180);if(g<x)return null;let V=(m+1)%c.vertices.length,C=3-d-f,v=[c.vertices[m],c.vertices[V],c.vertices[u],a.vertices[C]],M=vr(v);if(!M)return null;let y=0,P=0;for(let A of v){let I=Math.abs(ft(A,M));y=Math.max(y,I),P+=I*I}if(y>Math.min(r.maxPlaneDisplacement,r.maxBoundaryDisplacement))return null;let S=v.map(A=>mt(A,M));if(!Cr(S,M.normal))return null;let h=dn({vertices:S});if(!h||ge(h.normal,s.normal)<.2||ge(h.normal,i.normal)<.2)return null;let b={vertices:v,color:c.color,...c.data?{data:{...c.data}}:{}};if(no(c,a)&&c.uvs&&a.uvs&&c.texture){b.texture=c.texture,b.uvs=[[...c.uvs[m]],[...c.uvs[V]],[...c.uvs[u]],[...a.uvs[C]]];let A=pi([c,a]);A?.length&&(b.textureTriangles=A)}return{a:e,b:n,polygon:b,vertexMoves:[...v.map((A,I)=>({key:re(A),target:S[I]})),...Vr([c,a],M)],score:P/v.length+y*.25+(1-g)*.1}}function vr(e){if(e.length<3)return null;let n=0,o=0,t=0,r=0,c=0,a=0;for(let i=0;i<e.length;i++){let l=e[i],u=e[(i+1)%e.length];n+=(l[1]-u[1])*(l[2]+u[2]),o+=(l[2]-u[2])*(l[0]+u[0]),t+=(l[0]-u[0])*(l[1]+u[1]),r+=l[0],c+=l[1],a+=l[2]}let s=Rr([n,o,t]);return s?{normal:s,point:[r/e.length,c/e.length,a/e.length]}:null}function Cr(e,n){let o=0;for(let t=0;t<e.length;t++){let r=e[t],c=e[(t+1)%e.length],a=e[(t+2)%e.length],s=ge(kr(mn(c,r),mn(a,c)),n);if(Math.abs(s)<=1e-9)continue;let i=s>0?1:-1;if(o===0)o=i;else if(o!==i)return!1}return!0}function di(e,n,o){let t=Pr(e,o),r=Pi(t,n);if(r<=0)return t;let c=t.map(f=>{let p=dn(f);return p?{polygon:f,normal:p.normal,area:p.area,materialKey:eo(f)}:null}),a=vi(t,c),s=new Set,i=Array(t.length),l=[],u=(f,p)=>{i[f]=p};for(let f=0;f<t.length;f++){let p=c[f];if(s.has(f))continue;if(!p){u(f,t[f]);continue}let g=Ai(f,c,a,s,r,n);for(let V of g)s.add(V);if(g.length<2){u(f,t[f]);continue}let x=hi(g,t,c,a,r,n);l.push(...x.vertexMoves);for(let V of g)u(V,x.polygons.get(V)??t[V])}let m=i.flatMap(f=>f?[f]:[]),d=l.length>0?ut(m,lt(l)):m;return st(d)}function st(e){let n=Tr(e),o=1e-4;if(n<=0)return e;let t=Mi(n),r=Vi(o);return e.map(c=>{let a=m=>t.snap(m),s=c.vertices.map(a),i=c.uvs&&c.uvs.length===c.vertices.length?c.uvs.map(m=>r.snap(m)):void 0,l=Jt(c.textureTriangles,a),u={...c,vertices:s,...i?{uvs:i}:{},...l?{textureTriangles:l}:{}};return{...u,...u.texture?{textureTriangles:Ar(u)}:{}}})}function Ar(e){if(e.texture){if(e.textureTriangles?.length)return yi(e.textureTriangles);if(e.uvs&&e.uvs.length===e.vertices.length)return gi(e.vertices,e.uvs)}}function pi(e){let n=e.flatMap(o=>Ar(o)??[]);return n.length>0?n:void 0}function gi(e,n){let o=[];for(let t=1;t<e.length-1;t++)o.push({vertices:[[...e[0]],[...e[t]],[...e[t+1]]],uvs:[[...n[0]],[...n[t]],[...n[t+1]]]});return o}function yi(e){return e.map(n=>({vertices:n.vertices.map(o=>[...o]),uvs:n.uvs.map(o=>[...o])}))}function Jt(e,n){if(e?.length)return e.map(o=>({vertices:o.vertices.map(n),uvs:o.uvs.map(t=>[...t])}))}function hi(e,n,o,t,r,c){let a=Sr(e,n,o,r,c);return a?xi(a):bi(e,n,o,t,r,c)}function bi(e,n,o,t,r,c){let a=new Set(e),s=[];for(let m of e)for(let d of t.get(m)??[]){if(m>=d||!a.has(d))continue;let f=Sr([m,d],n,o,r,c);f&&s.push(f)}s.sort((m,d)=>d.score-m.score);let i=new Set,l=new Map,u=[];for(let m of s)if(!m.indices.some(d=>i.has(d))){u.push(...m.vertexMoves);for(let d=0;d<m.indices.length;d++){let f=m.indices[d];i.add(f),l.set(f,n[f])}}return{polygons:l,vertexMoves:u}}function xi(e){let n=new Map;for(let o=0;o<e.indices.length;o++)n.set(e.indices[o],e.source[o]);return{polygons:n,vertexMoves:e.vertexMoves}}function Sr(e,n,o,t,r){let c=Ir(e,o);if(!c||!zr(e,o,c,t,r))return null;let a=e.map(u=>n[u]),s=a.map(u=>Oi(u,c)),i=ce(ae(a)),l=ce(ae(s));return l>=i?null:{indices:e,source:a,projected:s,vertexMoves:fi(a,s),score:i-l}}function Pi(e,n){return Tr(e)<=0?0:n.maxPlaneDisplacement}function Tr(e){let n=1/0,o=1/0,t=1/0,r=-1/0,c=-1/0,a=-1/0;for(let i of e)for(let[l,u,m]of i.vertices)n=Math.min(n,l),o=Math.min(o,u),t=Math.min(t,m),r=Math.max(r,l),c=Math.max(c,u),a=Math.max(a,m);if(!Number.isFinite(n))return 0;let s=Math.hypot(r-n,c-o,a-t);return s<=0?0:Math.min(.025,Math.max(1e-4,s*25e-5))}function Mi(e){let n=new Map,o=r=>Math.floor(r/e),t=(r,c,a)=>`${r},${c},${a}`;return{snap(r){let c=o(r[0]),a=o(r[1]),s=o(r[2]);for(let m=-1;m<=1;m++)for(let d=-1;d<=1;d++)for(let f=-1;f<=1;f++){let p=n.get(t(c+m,a+d,s+f));if(p){for(let g of p)if(xe(r,g)<=e)return[g[0],g[1],g[2]]}}let i=[r[0],r[1],r[2]],l=t(c,a,s),u=n.get(l);return u?u.push(i):n.set(l,[i]),i}}}function Vi(e){let n=new Map,o=r=>Math.floor(r/e),t=(r,c)=>`${r},${c}`;return{snap(r){let c=o(r[0]),a=o(r[1]);for(let u=-1;u<=1;u++)for(let m=-1;m<=1;m++){let d=n.get(t(c+u,a+m));if(d){for(let f of d)if(Math.hypot(r[0]-f[0],r[1]-f[1])<=e)return[f[0],f[1]]}}let s=[r[0],r[1]],i=t(c,a),l=n.get(i);return l?l.push(s):n.set(i,[s]),s}}}function eo(e){return`${e.color??"#cccccc"}|${e.texture??""}|${e.uvs?"uv":"plain"}`}function dn(e){let n=e.vertices;if(!n||n.length<3)return null;let o=0,t=0,r=0,c=n[0];for(let s=1;s<n.length-1;s++){let i=mn(n[s],c),l=mn(n[s+1],c),u=kr(i,l);o+=u[0],t+=u[1],r+=u[2]}let a=Math.hypot(o,t,r);return a<=1e-10?null:{normal:[o/a,t/a,r/a],area:a/2}}function vi(e,n){let o=new Map,t=new Map;for(let r=0;r<e.length;r++){let c=e[r];if(!(!n[r]||c.vertices.length<3))for(let a=0;a<c.vertices.length;a++){let s=Qe(c.vertices[a],c.vertices[(a+1)%c.vertices.length]),i=o.get(s);i?i.push(r):o.set(s,[r])}}for(let r of o.values())for(let c=0;c<r.length;c++)for(let a=c+1;a<r.length;a++){let s=r[c],i=r[a];Ci(e[s],e[i],n[s],n[i])&&(dr(t,s,i),dr(t,i,s))}return t}function Ci(e,n,o,t){if(!o||!t||o.materialKey!==t.materialKey||!!e.uvs!=!!n.uvs)return!1;if(ct(e)||ct(n))return no(e,n);if(!e.uvs||!n.uvs)return!0;let r=to(e,n);if(!r)return!1;let[c,a,s,i]=r;return it(e.uvs[c],n.uvs[s])&&it(e.uvs[a],n.uvs[i])}function Or(e,n,o,t){return o.materialKey!==t.materialKey?!1:ct(e)||ct(n)?no(e,n):!e.uvs&&!n.uvs&&!e.textureTriangles?.length&&!n.textureTriangles?.length}function ct(e){return!!(e.texture||e.material?.texture||e.textureTriangles?.length)}function no(e,n){if(!e.texture||!n.texture||e.texture!==n.texture||e.material?.texture||n.material?.texture||!e.uvs||!n.uvs||e.uvs.length!==e.vertices.length||n.uvs.length!==n.vertices.length)return!1;let o=to(e,n);if(!o)return!1;let[t,r,c,a]=o;return it(e.uvs[t],n.uvs[c])&&it(e.uvs[r],n.uvs[a])}function dr(e,n,o){let t=e.get(n);t?t.add(o):e.set(n,new Set([o]))}function Ai(e,n,o,t,r,c){let a=[e],s=new Set([e]),i=[e];for(;i.length>0;){let l=i.shift();for(let u of o.get(l)??[]){if(t.has(u)||s.has(u))continue;let m=n[u],d=n[e];!m||!d||m.materialKey===d.materialKey&&Si([...a,u],n,r,c)&&(a.push(u),s.add(u),i.push(u))}}return a}function Si(e,n,o,t){let r=Ir(e,n);return!!r&&zr(e,n,r,o,t)}function Ir(e,n){let o=n[e[0]];if(!o)return null;let t=0,r=0,c=0,a=0,s=0,i=0,l=0;for(let f of e){let p=n[f];if(!p)return null;let g=ge(o.normal,p.normal)<0?-1:1,x=Math.max(p.area,1e-6);t+=p.normal[0]*g*x,r+=p.normal[1]*g*x,c+=p.normal[2]*g*x;for(let V of p.polygon.vertices)a+=V[0],s+=V[1],i+=V[2],l+=1}let u=Rr([t,r,c]);if(!u||l===0)return null;let m=wr(e,n),d=Ti(e,n,u,m);if(d){let f=(d.min+d.max)/2;return{normal:u,point:[u[0]*f,u[1]*f,u[2]*f]}}return{normal:u,point:[a/l,s/l,i/l]}}function Ti(e,n,o,t){let r=1/0,c=-1/0;for(let a of e){let s=n[a];if(s)for(let i of s.polygon.vertices){if(!t.has(re(i)))continue;let l=ge(i,o);r=Math.min(r,l),c=Math.max(c,l)}}return Number.isFinite(r)&&Number.isFinite(c)?{min:r,max:c}:null}function zr(e,n,o,t,r){let c=Math.cos(r.maxAngleDeg*Math.PI/180),a=wr(e,n);for(let s of e){let i=n[s];if(!i||Math.abs(ge(i.normal,o.normal))<c)return!1;for(let l of i.polygon.vertices){let u=a.has(re(l))?r.maxBoundaryDisplacement:t;if(Math.abs(ft(l,o))>u)return!1}}return!0}function wr(e,n){let o=new Map;for(let r of e){let c=n[r];if(!c)continue;let a=c.polygon.vertices;for(let s=0;s<a.length;s++){let i=a[s],l=a[(s+1)%a.length],u=Qe(i,l),m=o.get(u);m?m.count+=1:o.set(u,{count:1,a:i,b:l})}}let t=new Set;for(let r of o.values())r.count===1&&(t.add(re(r.a)),t.add(re(r.b)));return t}function Oi(e,n){let o=r=>mt(r,n),t=Jt(e.textureTriangles,o);return{...e,vertices:e.vertices.map(o),...t?{textureTriangles:t}:{}}}function to(e,n){for(let o=0;o<e.vertices.length;o++){let t=(o+1)%e.vertices.length;for(let r=0;r<n.vertices.length;r++){let c=(r+1)%n.vertices.length;if(Ae(e.vertices[o],n.vertices[r])&&Ae(e.vertices[t],n.vertices[c]))return[o,t,r,c];if(Ae(e.vertices[o],n.vertices[c])&&Ae(e.vertices[t],n.vertices[r]))return[o,t,c,r]}}return null}function Qe(e,n){let o=re(e),t=re(n);return o<t?`${o}|${t}`:`${t}|${o}`}function re(e){return`${e[0]},${e[1]},${e[2]}`}function Ae(e,n){return e[0]===n[0]&&e[1]===n[1]&&e[2]===n[2]}function it(e,n){return Math.abs(e[0]-n[0])<=1e-4&&Math.abs(e[1]-n[1])<=1e-4}function mn(e,n){return[e[0]-n[0],e[1]-n[1],e[2]-n[2]]}function kr(e,n){return[e[1]*n[2]-e[2]*n[1],e[2]*n[0]-e[0]*n[2],e[0]*n[1]-e[1]*n[0]]}function ge(e,n){return e[0]*n[0]+e[1]*n[1]+e[2]*n[2]}function xe(e,n){return Math.hypot(e[0]-n[0],e[1]-n[1],e[2]-n[2])}function Rr(e){let n=Math.hypot(e[0],e[1],e[2]);return n<=1e-10?null:[e[0]/n,e[1]/n,e[2]/n]}function ft(e,n){return ge(mn(e,n.point),n.normal)}function mt(e,n){let o=ft(e,n);return[e[0]-n.normal[0]*o,e[1]-n.normal[1]*o,e[2]-n.normal[2]*o]}var pn=1e-5,oo=.001,ro=6;function dt(e){let n=e.vertices;if(n.length<3)return null;let o=n[0],t=0,r=0,c=0;for(let s=1;s+1<n.length;s++){let i=n[s],l=n[s+1],u=i[1]-o[1],m=i[0]-o[0],d=i[2]-o[2],f=l[1]-o[1],p=l[0]-o[0],g=l[2]-o[2];t-=m*g-d*p,r-=d*f-u*g,c-=u*p-m*f}let a=Math.hypot(t,r,c);return a<1e-9?null:[t/a,r/a,c/a]}function so(e,n){let o=n.meshRotation,t=o?tn(e,o[0]??0,o[1]??0,o[2]??0):e;return tn(t,n.rotX,0,n.rotY)[2]}function pt(e,n,o=pn){return so(e,n)>o}function Er(e,n,o=pn){let t=dt(e);return t===null||pt(t,n,o)}function co(e){return`${e[0].toFixed(4)},${e[1].toFixed(4)},${e[2].toFixed(4)}`}function io(e){let n=new Map;for(let o of e){if(!o)continue;let t=co(o);n.has(t)||n.set(t,o)}return Array.from(n,([o,t])=>({key:o,normal:t}))}function Dr(e){return io(e.map(dt))}function ao(e,n=oo){let o=Math.abs(e[0]),t=Math.abs(e[1]),r=Math.abs(e[2]),c=Math.max(o,t,r);return c>1-n&&o+t+r-c<n}function Lr(e){return e.length<=ro&&e.every(({normal:n})=>ao(n))}function _r(e,n,o=pn){let t=[];for(let{key:r,normal:c}of e)pt(c,n,o)&&t.push(r);return t.sort(),t.join("|")}function lo(e,n,o,t,r){let c=(p,g,x)=>{let V=[0,0,0];return V[e]=p,V[(e+1)%3]=g,V[(e+2)%3]=x,V},a=c(n,-t,-t),s=c(n,t,-t),i=c(n,t,t),l=c(n,-t,t),u=c(o,-t,-t),m=c(o,t,-t),d=c(o,t,t),f=c(o,-t,t);return[{vertices:[a,s,i,l],color:r},{vertices:[u,m,d,f],color:r},{vertices:[a,s,m,u],color:r},{vertices:[s,i,d,m],color:r},{vertices:[i,l,f,d],color:r},{vertices:[l,a,u,f],color:r}]}function uo(e={}){let n=e.size??5,o=e.thickness??.025,t=e.negative??!1,r=e.xColor??"#ff3a3a",c=e.yColor??"#3aff3a",a=e.zColor??"#3a8aff",s=n*o/2,i=t?-n:0;return[...lo(0,i,n,s,r),...lo(1,i,n,s,c),...lo(2,i,n,s,a)]}function Gr(e,n,o,t){let r=[0,0,0];return r[e]=n,r[(e+1)%3]=o,r[(e+2)%3]=t,r}function Ii(e,n,o,t,r){let c=(p,g,x)=>Gr(e,p,g,x),a=c(n,-t,-t),s=c(n,t,-t),i=c(n,t,t),l=c(n,-t,t),u=c(o,-t,-t),m=c(o,t,-t),d=c(o,t,t),f=c(o,-t,t);return[{vertices:[a,s,i,l],color:r},{vertices:[u,m,d,f],color:r},{vertices:[a,s,m,u],color:r},{vertices:[s,i,d,m],color:r},{vertices:[i,l,f,d],color:r},{vertices:[l,a,u,f],color:r}]}function zi(e,n,o,t,r){let c=(m,d,f)=>Gr(e,m,d,f),a=c(n,-t,-t),s=c(n,t,-t),i=c(n,t,t),l=c(n,-t,t),u=c(o,0,0);return[{vertices:[a,s,i,l],color:r},{vertices:[a,s,u],color:r},{vertices:[s,i,u],color:r},{vertices:[i,l,u],color:r},{vertices:[l,a,u],color:r}]}function wi(e){return e.map(n=>({...n,vertices:[...n.vertices].reverse()}))}function fo(e){let n=e.axis,o=e.sign??1,t=e.shaftLength??4,r=e.shaftHalfThickness??.05,c=e.headLength??.8,a=e.headHalfThickness??.2,s=e.color??"#ffffff",i=e.shaft??!0,l=t*o,u=Math.min(0,l),m=Math.max(0,l),d=l,f=(t+c)*o,p=zi(n,d,f,a,s),g=o===-1?wi(p):p;return i?[...Ii(n,u,m,r,s),...g]:g}function gt(e,n,o){let t=[0,0,0],r=(e+1)%3,c=(e+2)%3;return t[r]=Math.cos(o)*n,t[c]=Math.sin(o)*n,t}function mo(e){let n=e.axis,o=e.radius,t=e.halfThickness??Math.max(.05,o*.04),r=e.segments??32,c=e.color??"#ffffff",a=o-t,s=o+t,i=[];for(let l=0;l<r;l++){let u=l/r*Math.PI*2,m=(l+1)/r*Math.PI*2,d=gt(n,a,u),f=gt(n,a,m),p=gt(n,s,u),g=gt(n,s,m);i.push({vertices:[d,p,g,f],color:c})}return i}function po(e){let n=e.axis,o=e.outerRadius,t=e.color??"#ffffff",r=(n+1)%3,c=(n+2)%3,a=(s,i)=>{let l=[0,0,0];return l[n]=0,l[r]=s,l[c]=i,l};return[{vertices:[a(-o,-o),a(o,-o),a(o,o),a(-o,o)],color:t}]}function go(e){let n=e.axis,o=e.size??.4,t=e.offset??o*2,r=typeof t=="number"?t:t[0],c=typeof t=="number"?t:t[1],a=e.along??0,s=e.color??"#ffffff",i=(n+1)%3,l=(n+2)%3,u=(m,d)=>{let f=[0,0,0];return f[n]=a,f[i]=r+m,f[l]=c+d,f};return[{vertices:[u(-o,-o),u(o,-o),u(o,o),u(-o,o)],color:s}]}function gn(e){let{center:n,size:o,color:t="#ffffff"}=e,[r,c,a]=n,s=[[r+o,c,a],[r-o,c,a],[r,c+o,a],[r,c-o,a],[r,c,a+o],[r,c,a-o]];return[[0,2,4],[2,1,4],[1,3,4],[3,0,4],[2,0,5],[1,2,5],[3,1,5],[0,3,5]].map(l=>({vertices:[s[l[0]],s[l[1]],s[l[2]]],color:t}))}function yn(e){let{center:n,size:o,color:t="#ffffff"}=e,[r,c,a]=n,s=o/Math.sqrt(3),i=[[r+s,c+s,a+s],[r-s,c-s,a+s],[r-s,c+s,a-s],[r+s,c-s,a-s]];return[[0,2,1],[0,1,3],[0,3,2],[1,2,3]].map(u=>({vertices:[i[u[0]],i[u[1]],i[u[2]]],color:t}))}function hn(e){let{center:n,size:o,color:t="#ffffff"}=e,[r,c,a]=n,s=o/2,i=[[r-s,c-s,a-s],[r+s,c-s,a-s],[r+s,c+s,a-s],[r-s,c+s,a-s],[r-s,c-s,a+s],[r+s,c-s,a+s],[r+s,c+s,a+s],[r-s,c+s,a+s]];return[[4,5,6,7],[1,0,3,2],[5,1,2,6],[0,4,7,3],[7,6,2,3],[0,1,5,4]].map(u=>({vertices:[i[u[0]],i[u[1]],i[u[2]],i[u[3]]],color:t}))}function bn(e){let{center:n,size:o,color:t="#ffffff"}=e,[r,c,a]=n,s=(1+Math.sqrt(5))/2,i=1/s,l=o/Math.sqrt(3),m=[[-1,-1,-1],[-1,-1,1],[-1,1,-1],[-1,1,1],[1,-1,-1],[1,-1,1],[1,1,-1],[1,1,1],[0,-s,-i],[0,-s,i],[0,s,-i],[0,s,i],[-i,0,-s],[i,0,-s],[-i,0,s],[i,0,s],[-s,-i,0],[-s,i,0],[s,-i,0],[s,i,0]].map(([f,p,g])=>[r+f*l,c+p*l,a+g*l]);return[[0,8,9,1,16],[0,12,13,4,8],[0,16,17,2,12],[1,9,5,15,14],[1,14,3,17,16],[2,10,6,13,12],[2,17,3,11,10],[3,14,15,7,11],[4,13,6,19,18],[4,18,5,9,8],[5,18,19,7,15],[6,10,11,7,19]].map(f=>({vertices:f.map(p=>m[p]),color:t}))}function xn(e){let{center:n,size:o,color:t="#ffffff"}=e,[r,c,a]=n,s=(1+Math.sqrt(5))/2,i=o/Math.sqrt(1+s*s),u=[[0,-1,-s],[0,-1,s],[0,1,-s],[0,1,s],[-1,-s,0],[-1,s,0],[1,-s,0],[1,s,0],[-s,0,-1],[s,0,-1],[-s,0,1],[s,0,1]].map(([d,f,p])=>[r+d*i,c+f*i,a+p*i]);return[[0,2,9],[0,4,8],[0,6,4],[0,8,2],[0,9,6],[1,3,10],[1,4,6],[1,6,11],[1,10,4],[1,11,3],[2,5,7],[2,7,9],[2,8,5],[3,5,10],[3,7,5],[3,11,7],[4,10,8],[5,8,10],[6,9,11],[7,11,9]].map(d=>({vertices:[u[d[0]],u[d[1]],u[d[2]]],color:t}))}function Nr(e,n){let o=Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]);return[e[0]/o*n,e[1]/o*n,e[2]/o*n]}function Pn(e){let{center:n,size:o,subdivisions:t=1,color:r="#ffffff"}=e,[c,a,s]=n,i=(1+Math.sqrt(5))/2,l=o/Math.sqrt(1+i*i),m=[[0,-1,-i],[0,-1,i],[0,1,-i],[0,1,i],[-1,-i,0],[-1,i,0],[1,-i,0],[1,i,0],[-i,0,-1],[i,0,-1],[-i,0,1],[i,0,1]].map(([f,p,g])=>Nr([f*l,p*l,g*l],o)),d=[[0,2,9],[0,4,8],[0,6,4],[0,8,2],[0,9,6],[1,3,10],[1,4,6],[1,6,11],[1,10,4],[1,11,3],[2,5,7],[2,7,9],[2,8,5],[3,5,10],[3,7,5],[3,11,7],[4,10,8],[5,8,10],[6,9,11],[7,11,9]];for(let f=0;f<t;f++){let p=new Map,g=[],x=(V,C)=>{let v=V<C?`${V}_${C}`:`${C}_${V}`,M=p.get(v);if(M!==void 0)return M;let y=m[V],P=m[C],S=[(y[0]+P[0])/2,(y[1]+P[1])/2,(y[2]+P[2])/2],h=m.length;return m.push(Nr(S,o)),p.set(v,h),h};for(let[V,C,v]of d){let M=x(V,C),y=x(C,v),P=x(v,V);g.push([V,M,P],[M,C,y],[P,y,v],[M,y,P])}d=g}return d.map(([f,p,g])=>({vertices:[[m[f][0]+c,m[f][1]+a,m[f][2]+s],[m[p][0]+c,m[p][1]+a,m[p][2]+s],[m[g][0]+c,m[g][1]+a,m[g][2]+s]],color:r}))}function Mn(e){let{center:n,radius:o,height:t,sides:r=16,color:c="#ffffff"}=e,[a,s,i]=n,l=t/2,u=[],m=[],d=[];for(let f=0;f<r;f++){let p=2*Math.PI*f/r,g=a+o*Math.cos(p),x=i+o*Math.sin(p);m.push([g,s-l,x]),d.push([g,s+l,x])}for(let f=0;f<r;f++){let p=(f+1)%r;u.push({vertices:[d[f],d[p],m[p],m[f]],color:c})}return u.push({vertices:[...d].reverse(),color:c}),u.push({vertices:[...m],color:c}),u}function Vn(e){let{center:n,radius:o,height:t,sides:r=16,color:c="#ffffff"}=e,[a,s,i]=n,l=t/2,u=[],m=[];for(let f=0;f<r;f++){let p=2*Math.PI*f/r;m.push([a+o*Math.cos(p),s-l,i+o*Math.sin(p)])}let d=[a,s+l,i];for(let f=0;f<r;f++){let p=(f+1)%r;u.push({vertices:[d,m[p],m[f]],color:c})}return u.push({vertices:[...m],color:c}),u}function vn(e){let{center:n,majorRadius:o,minorRadius:t,segments:r=24,sides:c=12,color:a="#ffffff"}=e,[s,i,l]=n,u=[];for(let d=0;d<r;d++){let f=2*Math.PI*d/r,p=Math.cos(f),g=Math.sin(f),x=[];for(let V=0;V<c;V++){let C=2*Math.PI*V/c,v=o+t*Math.cos(C);x.push([s+v*p,i+t*Math.sin(C),l+v*g])}u.push(x)}let m=[];for(let d=0;d<r;d++){let f=(d+1)%r;for(let p=0;p<c;p++){let g=(p+1)%c;m.push({vertices:[u[d][p],u[f][p],u[f][g],u[d][g]],color:a})}}return m}function Cn(e){let{center:n,radius:o,height:t,sides:r=4,color:c="#ffffff"}=e,[a,s,i]=n,l=t/2,u=[],m=[];for(let f=0;f<r;f++){let p=2*Math.PI*f/r;m.push([a+o*Math.cos(p),s-l,i+o*Math.sin(p)])}let d=[a,s+l,i];for(let f=0;f<r;f++){let p=(f+1)%r;u.push({vertices:[d,m[p],m[f]],color:c})}return u.push({vertices:[...m],color:c}),u}function An(e){let{center:n,radius:o,height:t,sides:r=6,color:c="#ffffff"}=e,[a,s,i]=n,l=t/2,u=[],m=[],d=[];for(let f=0;f<r;f++){let p=2*Math.PI*f/r,g=a+o*Math.cos(p),x=i+o*Math.sin(p);m.push([g,s-l,x]),d.push([g,s+l,x])}for(let f=0;f<r;f++){let p=(f+1)%r;u.push({vertices:[d[f],d[p],m[p],m[f]],color:c})}return u.push({vertices:[...d].reverse(),color:c}),u.push({vertices:[...m],color:c}),u}function Sn(e){let{center:n,radius:o,height:t,sides:r=6,color:c="#ffffff"}=e,[a,s,i]=n,l=t/2,u=[],m=[],d=[];for(let f=0;f<r;f++){let p=2*Math.PI*f/r,g=p+Math.PI/r;m.push([a+o*Math.cos(p),s-l,i+o*Math.sin(p)]),d.push([a+o*Math.cos(g),s+l,i+o*Math.sin(g)])}for(let f=0;f<r;f++){let p=(f+1)%r;u.push({vertices:[d[f],m[p],m[f]],color:c}),u.push({vertices:[d[f],d[p],m[p]],color:c})}return u.push({vertices:[...d].reverse(),color:c}),u.push({vertices:[...m],color:c}),u}function Tn(e){let{center:n,radius:o,halfHeight:t,sides:r=6,color:c="#ffffff"}=e,[a,s,i]=n,l=[],u=[];for(let f=0;f<r;f++){let p=2*Math.PI*f/r;u.push([a+o*Math.cos(p),s,i+o*Math.sin(p)])}let m=[a,s+t,i],d=[a,s-t,i];for(let f=0;f<r;f++){let p=(f+1)%r;l.push({vertices:[m,u[p],u[f]],color:c})}for(let f=0;f<r;f++){let p=(f+1)%r;l.push({vertices:[d,u[f],u[p]],color:c})}return l}function On(e){let{center:n,radius:o,halfHeight:t,sides:r=5,color:c="#ffffff"}=e,[a,s,i]=n,l=Math.cos(Math.PI/r),u=t*(1-l)/(1+l),m=[],d=[],f=[];for(let x=0;x<r;x++){let V=2*Math.PI*x/r,C=V+Math.PI/r;d.push([a+o*Math.cos(V),s+u,i+o*Math.sin(V)]),f.push([a+o*Math.cos(C),s-u,i+o*Math.sin(C)])}let p=[a,s+t,i],g=[a,s-t,i];for(let x=0;x<r;x++){let V=(x+1)%r;m.push({vertices:[p,d[V],f[x],d[x]],color:c})}for(let x=0;x<r;x++){let V=(x+1)%r;m.push({vertices:[g,f[x],d[V],f[V]],color:c})}return m}function In(e){let{center:n,size:o,color:t="#ffffff"}=e,[r,c,a]=n,s=(1+Math.sqrt(5))/2,i=o/Math.sqrt(1+s*s),l=[[0,-1,-s],[0,-1,s],[0,1,-s],[0,1,s],[-1,-s,0],[-1,s,0],[1,-s,0],[1,s,0],[-s,0,-1],[s,0,-1],[-s,0,1],[s,0,1]],u=l.map(([p,g,x])=>[r+p*i,c+g*i,a+x*i]);function m(p,g){return p[0]*g[0]+p[1]*g[1]+p[2]*g[2]}function d(p){let g=Math.abs(p[0])<.9?[1,0,0]:[0,1,0],x=m(g,p),V=g[0]-x*p[0],C=g[1]-x*p[1],v=g[2]-x*p[2],M=Math.sqrt(V*V+C*C+v*v),y=[V/M,C/M,v/M],P=[p[1]*y[2]-p[2]*y[1],p[2]*y[0]-p[0]*y[2],p[0]*y[1]-p[1]*y[0]];return{u:y,w:P}}let f=[];for(let p=0;p<12;p++){let g=l[p],x=m(g,g),V=-1,C=1/0;for(let T=0;T<12;T++){if(T===p)continue;let z=m(l[T],g);z<C&&(C=z,V=T)}let v=[];for(let T=0;T<12;T++)T===p||T===V||v.push({idx:T,d:m(l[T],g)});v.sort((T,z)=>z.d-T.d);let M=v.slice(0,5).map(T=>T.idx),y=[g[0]/Math.sqrt(x),g[1]/Math.sqrt(x),g[2]/Math.sqrt(x)],{u:P,w:S}=d(y);M.sort((T,z)=>{let D=l[T],L=l[z],w=Math.atan2(m(D,S),m(D,P)),O=Math.atan2(m(L,S),m(L,P));return w-O});let b=[0,2,4,1,3].map(T=>M[T]),A=0,I=0,R=0;for(let T of b)A+=u[T][0],I+=u[T][1],R+=u[T][2];let k=[A/5,I/5,R/5];for(let T=0;T<5;T++){let z=u[b[T]],D=u[b[(T+2)%5]],L=[z[0]-k[0],z[1]-k[1],z[2]-k[2]],w=[D[0]-k[0],D[1]-k[1],D[2]-k[2]],O=L[1]*w[2]-L[2]*w[1],E=L[2]*w[0]-L[0]*w[2],_=L[0]*w[1]-L[1]*w[0],N=k[0]-r,G=k[1]-c,$=k[2]-a,F=O*N+E*G+_*$<0;f.push({vertices:F?[k,D,z]:[k,z,D],color:t})}}return f}function zn(e){let{center:n,size:o,color:t="#ffffff"}=e,[r,c,a]=n,s=(1+Math.sqrt(5))/2,i=o/Math.sqrt(1+s*s),l=[[0,-1,-s],[0,-1,s],[0,1,-s],[0,1,s],[-1,-s,0],[-1,s,0],[1,-s,0],[1,s,0],[-s,0,-1],[s,0,-1],[-s,0,1],[s,0,1]],u=l.map(([p,g,x])=>[r+p*i,c+g*i,a+x*i]);function m(p,g){return p[0]*g[0]+p[1]*g[1]+p[2]*g[2]}function d(p){let g=Math.abs(p[0])<.9?[1,0,0]:[0,1,0],x=m(g,p),V=g[0]-x*p[0],C=g[1]-x*p[1],v=g[2]-x*p[2],M=Math.sqrt(V*V+C*C+v*v),y=[V/M,C/M,v/M],P=[p[1]*y[2]-p[2]*y[1],p[2]*y[0]-p[0]*y[2],p[0]*y[1]-p[1]*y[0]];return{u:y,w:P}}let f=[];for(let p=0;p<12;p++){let g=l[p],x=m(g,g),V=-1,C=1/0;for(let U=0;U<12;U++){if(U===p)continue;let B=m(l[U],g);B<C&&(C=B,V=U)}let v=[];for(let U=0;U<12;U++)U===p||U===V||v.push({idx:U,d:m(l[U],g)});v.sort((U,B)=>B.d-U.d);let M=v.slice(0,5).map(U=>U.idx),y=[g[0]/Math.sqrt(x),g[1]/Math.sqrt(x),g[2]/Math.sqrt(x)],{u:P,w:S}=d(y);M.sort((U,B)=>{let H=l[U],Z=l[B];return Math.atan2(m(H,S),m(H,P))-Math.atan2(m(Z,S),m(Z,P))});let h=0,b=0,A=0;for(let U of M)h+=u[U][0],b+=u[U][1],A+=u[U][2];h/=5,b/=5,A/=5;let I=u[M[0]],R=u[M[1]],k=u[M[2]],T=R[0]-I[0],z=R[1]-I[1],D=R[2]-I[2],L=k[0]-I[0],w=k[1]-I[1],O=k[2]-I[2],E=z*O-D*w,_=D*L-T*O,N=T*w-z*L,G=h-r,$=b-c,F=A-a,j=E*G+_*$+N*F<0?[...M].reverse():M;f.push({vertices:j.map(U=>u[U]),color:t})}return f}function wn(e){let{center:n,size:o,color:t="#ffffff"}=e,[r,c,a]=n,s=(1+Math.sqrt(5))/2,i=1/s,l=o/Math.sqrt(3),m=[[-1,-1,-1],[-1,-1,1],[-1,1,-1],[-1,1,1],[1,-1,-1],[1,-1,1],[1,1,-1],[1,1,1],[0,-s,-i],[0,-s,i],[0,s,-i],[0,s,i],[-i,0,-s],[i,0,-s],[-i,0,s],[i,0,s],[-s,-i,0],[-s,i,0],[s,-i,0],[s,i,0]].map(([g,x,V])=>[r+g*l,c+x*l,a+V*l]),d=[[0,8,9,1,16],[0,12,13,4,8],[0,16,17,2,12],[1,9,5,15,14],[1,14,3,17,16],[2,10,6,13,12],[2,17,3,11,10],[3,14,15,7,11],[4,13,6,19,18],[4,18,5,9,8],[5,18,19,7,15],[6,10,11,7,19]],f=[0,2,4,1,3],p=[];for(let g of d){let x=f.map(y=>g[y]),V=0,C=0,v=0;for(let y of x)V+=m[y][0],C+=m[y][1],v+=m[y][2];let M=[V/5,C/5,v/5];for(let y=0;y<5;y++){let P=m[x[y]],S=m[x[(y+2)%5]],h=[P[0]-M[0],P[1]-M[1],P[2]-M[2]],b=[S[0]-M[0],S[1]-M[1],S[2]-M[2]],A=h[1]*b[2]-h[2]*b[1],I=h[2]*b[0]-h[0]*b[2],R=h[0]*b[1]-h[1]*b[0],k=M[0]-r,T=M[1]-c,z=M[2]-a,D=A*k+I*T+R*z<0;p.push({vertices:D?[M,S,P]:[M,P,S],color:t})}}return p}function kn(e){let{center:n,size:o,color:t="#ffffff"}=e,[r,c,a]=n,s=(1+Math.sqrt(5))/2,i=o/Math.sqrt(1+s*s),l=[[0,-1,-s],[0,-1,s],[0,1,-s],[0,1,s],[-1,-s,0],[-1,s,0],[1,-s,0],[1,s,0],[-s,0,-1],[s,0,-1],[-s,0,1],[s,0,1]],u=l.map(([f,p,g])=>[r+f*i,c+p*i,a+g*i]),m=[[0,2,9],[0,4,8],[0,6,4],[0,8,2],[0,9,6],[1,3,10],[1,4,6],[1,6,11],[1,10,4],[1,11,3],[2,5,7],[2,7,9],[2,8,5],[3,5,10],[3,7,5],[3,11,7],[4,10,8],[5,8,10],[6,9,11],[7,11,9]],d=Array(12).fill(-1);for(let f=0;f<12;f++){let p=1/0;for(let g=0;g<12;g++){if(g===f)continue;let x=l[f][0]*l[g][0]+l[f][1]*l[g][1]+l[f][2]*l[g][2];x<p&&(p=x,d[f]=g)}}return m.map(([f,p,g])=>({vertices:[u[d[f]],u[d[g]],u[d[p]]],color:t}))}function Re(e){let{center:n,size:o,color:t="#ffffff"}=e,[r,c,a]=n,s=o/Math.sqrt(2),l=[[1,1,0],[1,-1,0],[-1,1,0],[-1,-1,0],[1,0,1],[1,0,-1],[-1,0,1],[-1,0,-1],[0,1,1],[0,1,-1],[0,-1,1],[0,-1,-1]].map(([d,f,p])=>[r+d*s,c+f*s,a+p*s]),u=[[0,8,4],[0,5,9],[1,4,10],[1,11,5],[2,6,8],[2,9,7],[3,10,6],[3,7,11]],m=[[8,6,10,4],[9,5,11,7],[0,4,1,5],[2,7,3,6],[0,9,2,8],[1,10,3,11]];return[...u.map(d=>({vertices:[l[d[0]],l[d[1]],l[d[2]]],color:t})),...m.map(d=>({vertices:[l[d[0]],l[d[1]],l[d[2]],l[d[3]]],color:t}))]}function Ee(e){let{center:n,size:o,color:t="#ffffff"}=e,[r,c,a]=n,s=(1+Math.sqrt(5))/2,i=[[0,-1,-s],[0,-1,s],[0,1,-s],[0,1,s],[-1,-s,0],[-1,s,0],[1,-s,0],[1,s,0],[-s,0,-1],[s,0,-1],[-s,0,1],[s,0,1]],l=[[0,2,9],[0,4,8],[0,6,4],[0,8,2],[0,9,6],[1,3,10],[1,4,6],[1,6,11],[1,10,4],[1,11,3],[2,5,7],[2,7,9],[2,8,5],[3,5,10],[3,7,5],[3,11,7],[4,10,8],[5,8,10],[6,9,11],[7,11,9]],u=new Map,m=[];function d(b,A){return b<A?`${b},${A}`:`${A},${b}`}function f(b,A){let I=d(b,A);if(u.has(I))return u.get(I);let[R,k,T]=i[b],[z,D,L]=i[A],w=m.length;return m.push([(R+z)/2,(k+D)/2,(T+L)/2]),u.set(I,w),w}let p=Array.from({length:12},()=>[]),g=l.map(([b,A,I])=>{let R=f(b,A),k=f(A,I),T=f(I,b);return p[b].includes(R)||p[b].push(R),p[b].includes(T)||p[b].push(T),p[A].includes(R)||p[A].push(R),p[A].includes(k)||p[A].push(k),p[I].includes(k)||p[I].push(k),p[I].includes(T)||p[I].push(T),[R,k,T]}),[x,V,C]=m[0],v=Math.sqrt(x*x+V*V+C*C),M=o/v,y=m.map(([b,A,I])=>[r+b*M,c+A*M,a+I*M]);function P(b,A){let I=0,R=0,k=0;for(let H of b)I+=m[H][0],R+=m[H][1],k+=m[H][2];let T=b.length;I/=T,R/=T,k/=T;let[z,D,L]=A,[w,O,E]=m[b[0]],_=w-I,N=O-R,G=E-k,$=_*z+N*D+G*L;_-=$*z,N-=$*D,G-=$*L;let F=Math.sqrt(_*_+N*N+G*G);_/=F,N/=F,G/=F;let q=D*G-L*N,j=L*_-z*G,U=z*N-D*_,B=b.map(H=>{let[Z,J,ne]=m[H],ie=Z-I,oe=J-R,Q=ne-k,X=ie*_+oe*N+Q*G,K=ie*q+oe*j+Q*U;return{i:H,angle:Math.atan2(K,X)}});return B.sort((H,Z)=>H.angle-Z.angle),B.map(H=>H.i)}let S=g.map(([b,A,I])=>{let[R,k,T]=m[b],[z,D,L]=m[A],[w,O,E]=m[I],_=[(R+z+w)/3,(k+D+O)/3,(T+L+E)/3];return{vertices:P([b,A,I],_).map(G=>y[G]),color:t}}),h=i.map((b,A)=>{let I=p[A];return{vertices:P(I,b).map(T=>y[T]),color:t}});return[...S,...h]}function De(e){let{center:n,size:o,color:t="#ffffff"}=e,[r,c,a]=n,s=1/Math.sqrt(3),i=[[1,1,1],[-1,-1,1],[-1,1,-1],[1,-1,-1]],l=Array.from({length:4},()=>new Array(4)),u=[];for(let v=0;v<4;v++)for(let M=0;M<4;M++){if(v===M)continue;let[y,P,S]=i[v],[h,b,A]=i[M],I=[2/3*y+1/3*h,2/3*P+1/3*b,2/3*S+1/3*A];l[v][M]=I,u.push(I)}let m=0;for(let[v,M,y]of u){let P=Math.sqrt(v*v+M*M+y*y);P>m&&(m=P)}let d=o/m,f=(v,M)=>{let[y,P,S]=l[v][M];return[r+y*d,c+P*d,a+S*d]};function p(v){let M=[0,1,2,3].filter(G=>G!==v),[y,P,S]=M,h=f(v,y),b=f(v,P),A=f(v,S),[I,R,k]=i[v],T=b[0]-h[0],z=b[1]-h[1],D=b[2]-h[2],L=A[0]-h[0],w=A[1]-h[1],O=A[2]-h[2],E=z*O-D*w,_=D*L-T*O,N=T*w-z*L;return E*I+_*R+N*k<0?[h,A,b]:[h,b,A]}function g(v,M,y){let P=[f(v,M),f(M,v),f(M,y),f(y,M),f(y,v),f(v,y)],[S,h,b]=i[v],[A,I,R]=i[M],[k,T,z]=i[y],D=(S+A+k)/3,L=(h+I+T)/3,w=(b+R+z)/3,O=P[0],E=P[1],_=P[2],N=E[0]-O[0],G=E[1]-O[1],$=E[2]-O[2],F=_[0]-O[0],q=_[1]-O[1],j=_[2]-O[2],U=G*j-$*q,B=$*F-N*j,H=N*q-G*F;return U*D+B*L+H*w<0&&P.reverse(),P}let x=[0,1,2,3].map(v=>({vertices:p(v),color:t})),C=[[0,2,1],[0,1,3],[0,3,2],[1,2,3]].map(([v,M,y])=>({vertices:g(v,M,y),color:t}));return[...x,...C]}function Le(e){let{center:n,size:o,color:t="#ffffff"}=e,[r,c,a]=n,s=(2-Math.sqrt(2))/2,i=[[-1,-1,-1],[1,-1,-1],[1,1,-1],[-1,1,-1],[-1,-1,1],[1,-1,1],[1,1,1],[-1,1,1]],l=[[0,1],[1,2],[2,3],[3,0],[4,5],[5,6],[6,7],[7,4],[0,4],[1,5],[2,6],[3,7]],u=new Map;function m(y,P){let S=`${y},${P}`;if(u.has(S))return u.get(S);let[h,b,A]=i[y],[I,R,k]=i[P],T=[(1-s)*h+s*I,(1-s)*b+s*R,(1-s)*A+s*k];return u.set(S,T),T}for(let[y,P]of l)m(y,P),m(P,y);let d=0;for(let y of u.values()){let[P,S,h]=y,b=Math.sqrt(P*P+S*S+h*h);b>d&&(d=b)}let f=o/d,p=y=>[r+y[0]*f,c+y[1]*f,a+y[2]*f];function g(y,P){return p(m(y,P))}function x(y,P){let[S,h,b]=P,A=y[0],I=y[1],R=y[2],k=I[0]-A[0],T=I[1]-A[1],z=I[2]-A[2],D=R[0]-A[0],L=R[1]-A[1],w=R[2]-A[2],O=T*w-z*L,E=z*D-k*w,_=k*L-T*D;return O*S+E*h+_*b<0?[...y].reverse():y}let V=[[1,3,4],[0,2,5],[1,3,6],[0,2,7],[0,5,7],[1,4,6],[2,5,7],[3,4,6]],C=i.map(([y,P,S],h)=>{let[b,A,I]=V[h],R=[g(h,b),g(h,A),g(h,I)];return{vertices:x(R,[y,P,S]),color:t}}),M=[{corners:[4,5,6,7],normal:[0,0,1]},{corners:[1,0,3,2],normal:[0,0,-1]},{corners:[5,1,2,6],normal:[1,0,0]},{corners:[0,4,7,3],normal:[-1,0,0]},{corners:[7,6,2,3],normal:[0,1,0]},{corners:[0,1,5,4],normal:[0,-1,0]}].map(({corners:y,normal:P})=>{let[S,h,b,A]=y,I=[g(S,h),g(h,S),g(h,b),g(b,h),g(b,A),g(A,b),g(A,S),g(S,A)];return{vertices:x(I,P),color:t}});return[...C,...M]}function _e(e){let{center:n,size:o,color:t="#ffffff"}=e,[r,c,a]=n,s=o/Math.sqrt(5),i=new Set,l=[];for(let C=0;C<3;C++){let v=(C+1)%3,M=(C+2)%3;for(let y of[-1,1])for(let P of[-1,1])for(let S of[!1,!0]){let h=[0,0,0];h[v]=S?y*2:y*1,h[M]=S?P*1:P*2;let b=`${h[0]},${h[1]},${h[2]}`;i.has(b)||(i.add(b),l.push(h))}}let u=l.map(([C,v,M])=>[r+C*s,c+v*s,a+M*s]),m=new Map;for(let C=0;C<l.length;C++){let[v,M,y]=l[C];m.set(`${v},${M},${y}`,C)}function d(C,v,M){let y=`${C},${v},${M}`,P=m.get(y);if(P===void 0)throw new Error(`Vertex not found: (${C},${v},${M})`);return P}function f(C,v){let M=0,y=0,P=0;for(let G of C)M+=l[G][0],y+=l[G][1],P+=l[G][2];let S=C.length;M/=S,y/=S,P/=S;let[h,b,A]=v,[I,R,k]=l[C[0]],T=I-M,z=R-y,D=k-P,L=T*h+z*b+D*A;T-=L*h,z-=L*b,D-=L*A;let w=Math.sqrt(T*T+z*z+D*D);T/=w,z/=w,D/=w;let O=b*D-A*z,E=A*T-h*D,_=h*z-b*T,N=C.map(G=>{let[$,F,q]=l[G],j=$-M,U=F-y,B=q-P,H=j*T+U*z+B*D,Z=j*O+U*E+B*_;return{i:G,angle:Math.atan2(Z,H)}});return N.sort((G,$)=>G.angle-$.angle),N.map(G=>G.i)}let g=[{indices:[d(2,0,1),d(2,1,0),d(2,0,-1),d(2,-1,0)],normal:[1,0,0]},{indices:[d(-2,0,1),d(-2,1,0),d(-2,0,-1),d(-2,-1,0)],normal:[-1,0,0]},{indices:[d(0,2,1),d(1,2,0),d(0,2,-1),d(-1,2,0)],normal:[0,1,0]},{indices:[d(0,-2,1),d(1,-2,0),d(0,-2,-1),d(-1,-2,0)],normal:[0,-1,0]},{indices:[d(1,0,2),d(0,1,2),d(-1,0,2),d(0,-1,2)],normal:[0,0,1]},{indices:[d(1,0,-2),d(0,1,-2),d(-1,0,-2),d(0,-1,-2)],normal:[0,0,-1]}].map(({indices:C,normal:v})=>({vertices:f(C,v).map(M=>u[M]),color:t})),V=[[1,1,1],[1,1,-1],[1,-1,1],[1,-1,-1],[-1,1,1],[-1,1,-1],[-1,-1,1],[-1,-1,-1]].map(([C,v,M])=>{let y=[];for(let S=0;S<l.length;S++){let[h,b,A]=l[S];Math.abs(C*h+v*b+M*A-3)<1e-9&&y.push(S)}let P=[C/Math.sqrt(3),v/Math.sqrt(3),M/Math.sqrt(3)];return{vertices:f(y,P).map(S=>u[S]),color:t}});return[...g,...V]}function Ge(e){let{center:n,size:o,color:t="#ffffff"}=e,[r,c,a]=n,s=(1+Math.sqrt(5))/2,i=1/s,l=[[-1,-1,-1],[-1,-1,1],[-1,1,-1],[-1,1,1],[1,-1,-1],[1,-1,1],[1,1,-1],[1,1,1],[0,-s,-i],[0,-s,i],[0,s,-i],[0,s,i],[-i,0,-s],[i,0,-s],[-i,0,s],[i,0,s],[-s,-i,0],[-s,i,0],[s,-i,0],[s,i,0]],u=[[0,8,9,1,16],[0,12,13,4,8],[0,16,17,2,12],[1,9,5,15,14],[1,14,3,17,16],[2,10,6,13,12],[2,17,3,11,10],[3,14,15,7,11],[4,13,6,19,18],[4,18,5,9,8],[5,18,19,7,15],[6,10,11,7,19]],m=new Set,d=[];for(let h of u)for(let b=0;b<5;b++){let A=h[b],I=h[(b+1)%5],R=A<I?`${A},${I}`:`${I},${A}`;m.has(R)||(m.add(R),d.push([A,I]))}let f=(3-Math.sqrt(5))/4,p=new Map;function g(h,b){let A=`${h},${b}`;if(p.has(A))return p.get(A);let[I,R,k]=l[h],[T,z,D]=l[b],L=[(1-f)*I+f*T,(1-f)*R+f*z,(1-f)*k+f*D];return p.set(A,L),L}for(let[h,b]of d)g(h,b),g(b,h);let x=0;for(let h of p.values()){let[b,A,I]=h,R=Math.sqrt(b*b+A*A+I*I);R>x&&(x=R)}let V=o/x,C=Array.from({length:20},()=>[]);for(let[h,b]of d)C[h].push(b),C[b].push(h);function v(h,b){let[A,I,R]=g(h,b);return[r+A*V,c+I*V,a+R*V]}function M(h,b){let[A,I,R]=b,k=h[0],T=h[1],z=h[2],D=T[0]-k[0],L=T[1]-k[1],w=T[2]-k[2],O=z[0]-k[0],E=z[1]-k[1],_=z[2]-k[2],N=L*_-w*E,G=w*O-D*_,$=D*E-L*O;return N*A+G*I+$*R<0?[...h].reverse():h}function y(h,b){let A=0,I=0,R=0;for(let[B,H,Z]of h)A+=B,I+=H,R+=Z;let k=h.length;A/=k,I/=k,R/=k;let[T,z,D]=b,[L,w,O]=h[0],E=L-A,_=w-I,N=O-R,G=E*T+_*z+N*D;E-=G*T,_-=G*z,N-=G*D;let $=Math.sqrt(E*E+_*_+N*N);E/=$,_/=$,N/=$;let F=z*N-D*_,q=D*E-T*N,j=T*_-z*E,U=h.map(B=>{let H=B[0]-A,Z=B[1]-I,J=B[2]-R,ne=H*E+Z*_+J*N,ie=H*F+Z*q+J*j;return{pt:B,angle:Math.atan2(ie,ne)}});return U.sort((B,H)=>B.angle-H.angle),U.map(B=>B.pt)}let P=l.map(([h,b,A],I)=>{let[R,k,T]=C[I],z=[g(I,R),g(I,k),g(I,T)],L=y(z,[h,b,A]).map(([w,O,E])=>[r+w*V,c+O*V,a+E*V]);return{vertices:M(L,[h,b,A]),color:t}}),S=u.map(h=>{let[b,A,I,R,k]=h,T=[g(b,A),g(A,b),g(A,I),g(I,A),g(I,R),g(R,I),g(R,k),g(k,R),g(k,b),g(b,k)],[z,D,L,w,O]=h.map(q=>l[q]),E=(z[0]+D[0]+L[0]+w[0]+O[0])/5,_=(z[1]+D[1]+L[1]+w[1]+O[1])/5,N=(z[2]+D[2]+L[2]+w[2]+O[2])/5,G=[E,_,N],F=y(T,G).map(([q,j,U])=>[r+q*V,c+j*V,a+U*V]);return{vertices:M(F,G),color:t}});return[...P,...S]}function Ne(e){let{center:n,size:o,color:t="#ffffff"}=e,[r,c,a]=n,s=(1+Math.sqrt(5))/2,i=[[0,-1,-s],[0,-1,s],[0,1,-s],[0,1,s],[-1,-s,0],[-1,s,0],[1,-s,0],[1,s,0],[-s,0,-1],[s,0,-1],[-s,0,1],[s,0,1]],l=[[0,2,9],[0,4,8],[0,6,4],[0,8,2],[0,9,6],[1,3,10],[1,4,6],[1,6,11],[1,10,4],[1,11,3],[2,5,7],[2,7,9],[2,8,5],[3,5,10],[3,7,5],[3,11,7],[4,10,8],[5,8,10],[6,9,11],[7,11,9]],u=new Set,m=[];for(let[P,S,h]of l)for(let[b,A]of[[P,S],[S,h],[h,P]]){let I=b<A?`${b},${A}`:`${A},${b}`;u.has(I)||(u.add(I),m.push([b,A]))}let d=1/3,f=new Map;function p(P,S){let h=`${P},${S}`;if(f.has(h))return f.get(h);let[b,A,I]=i[P],[R,k,T]=i[S],z=[(1-d)*b+d*R,(1-d)*A+d*k,(1-d)*I+d*T];return f.set(h,z),z}for(let[P,S]of m)p(P,S),p(S,P);let g=0;for(let P of f.values()){let[S,h,b]=P,A=Math.sqrt(S*S+h*h+b*b);A>g&&(g=A)}let x=o/g,V=Array.from({length:12},()=>[]);for(let[P,S]of m)V[P].push(S),V[S].push(P);function C(P,S){let[h,b,A]=S,I=P[0],R=P[1],k=P[2],T=R[0]-I[0],z=R[1]-I[1],D=R[2]-I[2],L=k[0]-I[0],w=k[1]-I[1],O=k[2]-I[2],E=z*O-D*w,_=D*L-T*O,N=T*w-z*L;return E*h+_*b+N*A<0?[...P].reverse():P}function v(P,S){let h=0,b=0,A=0;for(let[j,U,B]of P)h+=j,b+=U,A+=B;let I=P.length;h/=I,b/=I,A/=I;let[R,k,T]=S,[z,D,L]=P[0],w=z-h,O=D-b,E=L-A,_=w*R+O*k+E*T;w-=_*R,O-=_*k,E-=_*T;let N=Math.sqrt(w*w+O*O+E*E);w/=N,O/=N,E/=N;let G=k*E-T*O,$=T*w-R*E,F=R*O-k*w,q=P.map(j=>{let U=j[0]-h,B=j[1]-b,H=j[2]-A,Z=U*w+B*O+H*E,J=U*G+B*$+H*F;return{pt:j,angle:Math.atan2(J,Z)}});return q.sort((j,U)=>j.angle-U.angle),q.map(j=>j.pt)}let M=i.map(([P,S,h],b)=>{let A=V[b].map(k=>p(b,k)),R=v(A,[P,S,h]).map(([k,T,z])=>[r+k*x,c+T*x,a+z*x]);return{vertices:C(R,[P,S,h]),color:t}}),y=l.map(([P,S,h])=>{let b=[p(P,S),p(S,P),p(S,h),p(h,S),p(h,P),p(P,h)],A=i[P],I=i[S],R=i[h],k=[(A[0]+I[0]+R[0])/3,(A[1]+I[1]+R[1])/3,(A[2]+I[2]+R[2])/3],z=v(b,k).map(([D,L,w])=>[r+D*x,c+L*x,a+w*x]);return{vertices:C(z,k),color:t}});return[...M,...y]}function ki(e,n){if(n.length<=3)return!0;let[o,t,r]=e[n[0]],[c,a,s]=e[n[1]],[i,l,u]=e[n[2]],m=c-o,d=a-t,f=s-r,p=i-o,g=l-t,x=u-r,V=d*x-f*g,C=f*p-m*x,v=m*g-d*p,M=Math.sqrt(V*V+C*C+v*v);if(M<1e-10)return!1;let y=1/M,P=(V*o+C*t+v*r)*y;for(let S=3;S<n.length;S++){let[h,b,A]=e[n[S]];if(Math.abs((V*h+C*b+v*A)*y-P)>1e-6)return!1}return!0}function Ri(e,n){let o=0,t=0,r=0;for(let h of n)o+=e[h][0],t+=e[h][1],r+=e[h][2];let c=n.length;o/=c,t/=c,r/=c;let[a,s,i]=e[n[0]],[l,u,m]=e[n[1]],[d,f,p]=e[n[2]],g=l-a,x=u-s,V=m-i,C=d-a,v=f-s,M=p-i,y=x*M-V*v,P=V*C-g*M,S=g*v-x*C;return y*o+P*t+S*r>0}function Ei(e){let n=e.indexOf(Math.min(...e));return[...e.slice(n),...e.slice(0,n)].join(",")}function te(e,n,o){let t=e.length,r=new Set,c=[];function a(s,i){let l=s[s.length-1];if(s.length===o){if(!n[l].includes(i)||!ki(e,s)||!Ri(e,s))return;let u=Ei(s);r.has(u)||(r.add(u),c.push([...s]));return}for(let u of n[l])s.includes(u)||u<=i||a([...s,u],i)}for(let s=0;s<t;s++)a([s],s);return c}function fe(e,n=1e-6){let o=e.length,t=1/0;for(let c=0;c<o;c++)for(let a=c+1;a<o;a++){let s=e[c][0]-e[a][0],i=e[c][1]-e[a][1],l=e[c][2]-e[a][2],u=Math.sqrt(s*s+i*i+l*l);u>1e-10&&u<t&&(t=u)}let r=Array.from({length:o},()=>[]);for(let c=0;c<o;c++)for(let a=c+1;a<o;a++){let s=e[c][0]-e[a][0],i=e[c][1]-e[a][1],l=e[c][2]-e[a][2],u=Math.sqrt(s*s+i*i+l*l);Math.abs(u-t)<n&&(r[c].push(a),r[a].push(c))}return{adj:r,edgeLen:t}}function me(e,n,o){let t=0,r=0,c=0;for(let P of n)t+=e[P][0],r+=e[P][1],c+=e[P][2];let a=n.length;t/=a,r/=a,c/=a;let[s,i,l]=o,[u,m,d]=e[n[0]],f=u-t,p=m-r,g=d-c,x=f*s+p*i+g*l;f-=x*s,p-=x*i,g-=x*l;let V=Math.sqrt(f*f+p*p+g*g);f/=V,p/=V,g/=V;let C=i*g-l*p,v=l*f-s*g,M=s*p-i*f,y=n.map(P=>{let[S,h,b]=e[P],A=S-t,I=h-r,R=b-c,k=A*f+I*p+R*g,T=A*C+I*v+R*M;return{i:P,angle:Math.atan2(T,k)}});return y.sort((P,S)=>P.angle-S.angle),y.map(P=>P.i)}function de(e,n){let o=0,t=0,r=0;for(let s of n)o+=e[s][0],t+=e[s][1],r+=e[s][2];let c=n.length;o/=c,t/=c,r/=c;let a=Math.sqrt(o*o+t*t+r*r);return[o/a,t/a,r/a]}function $e(e){let{center:n,size:o,color:t="#ffffff"}=e,[r,c,a]=n,s=1,i=1+Math.sqrt(2),l=1+2*Math.sqrt(2),u=[[s,i,l],[s,l,i],[i,s,l],[i,l,s],[l,s,i],[l,i,s]],m=[];for(let[b,A,I]of u)for(let R of[-1,1])for(let k of[-1,1])for(let T of[-1,1])m.push([R*b,k*A,T*I]);let d=new Set,f=[];for(let b of m){let A=`${b[0].toFixed(9)},${b[1].toFixed(9)},${b[2].toFixed(9)}`;d.has(A)||(d.add(A),f.push(b))}let[p,g,x]=f[0],V=Math.sqrt(p*p+g*g+x*x),C=o/V,v=f.map(([b,A,I])=>[r+b*C,c+A*C,a+I*C]),{adj:M}=fe(f),y=te(f,M,4),P=te(f,M,6),S=te(f,M,8);function h(b){let A=de(f,b);return{vertices:me(f,b,A).map(R=>v[R]),color:t}}return[...y.map(h),...P.map(h),...S.map(h)]}function Fe(e){let{center:n,size:o,color:t="#ffffff"}=e,[r,c,a]=n,s=(1+Math.sqrt(5))/2,i=[[1/s,1/s,3+s],[2/s,s,1+2*s],[1/s,s*s,-1+3*s],[2*s-1,2,2+s],[s,3,2*s]],l=[];for(let[S,h,b]of i){let A=[[S,h,b],[h,b,S],[b,S,h]];for(let[I,R,k]of A)for(let T of[-1,1])for(let z of[-1,1])for(let D of[-1,1])l.push([T*I,z*R,D*k])}let u=new Set,m=[];for(let S of l){let h=`${S[0].toFixed(8)},${S[1].toFixed(8)},${S[2].toFixed(8)}`;u.has(h)||(u.add(h),m.push(S))}let[d,f,p]=m[0],g=Math.sqrt(d*d+f*f+p*p),x=o/g,V=m.map(([S,h,b])=>[r+S*x,c+h*x,a+b*x]),{adj:C}=fe(m),v=te(m,C,4),M=te(m,C,6),y=te(m,C,10);function P(S){let h=de(m,S);return{vertices:me(m,S,h).map(A=>V[A]),color:t}}return[...v.map(P),...M.map(P),...y.map(P)]}function Ue(e){let{center:n,size:o,color:t="#ffffff"}=e,[r,c,a]=n,s=1+Math.sqrt(2),i=[],l=[[1,1,s],[1,s,1],[s,1,1]];for(let[M,y,P]of l)for(let S of[-1,1])for(let h of[-1,1])for(let b of[-1,1])i.push([S*M,h*y,b*P]);let[u,m,d]=i[0],f=Math.sqrt(u*u+m*m+d*d),p=o/f,g=i.map(([M,y,P])=>[r+M*p,c+y*p,a+P*p]),{adj:x}=fe(i),V=te(i,x,3),C=te(i,x,4);function v(M){let y=de(i,M);return{vertices:me(i,M,y).map(S=>g[S]),color:t}}return[...V.map(v),...C.map(v)]}function Be(e){let{center:n,size:o,color:t="#ffffff"}=e,[r,c,a]=n,s=(1+Math.sqrt(5))/2,i=s*s,l=i*s,u=[];for(let[h,b,A]of[[1,1,l],[1,l,1],[l,1,1]])for(let I of[-1,1])for(let R of[-1,1])for(let k of[-1,1])u.push([I*h,R*b,k*A]);for(let[h,b,A]of[[i,s,2*s],[s,2*s,i],[2*s,i,s]])for(let I of[-1,1])for(let R of[-1,1])for(let k of[-1,1])u.push([I*h,R*b,k*A]);for(let[h,b,A]of[[2+s,0,i],[0,i,2+s],[i,2+s,0]])for(let I of[-1,1])for(let R of[-1,1])for(let k of[-1,1])u.push([I*h,R*b,k*A]);let m=new Set,d=[];for(let h of u){let b=`${h[0].toFixed(8)},${h[1].toFixed(8)},${h[2].toFixed(8)}`;m.has(b)||(m.add(b),d.push(h))}let[f,p,g]=d[0],x=Math.sqrt(f*f+p*p+g*g),V=o/x,C=d.map(([h,b,A])=>[r+h*V,c+b*V,a+A*V]),{adj:v}=fe(d),M=te(d,v,3),y=te(d,v,4),P=te(d,v,5);function S(h){let b=de(d,h);return{vertices:me(d,h,b).map(I=>C[I]),color:t}}return[...M.map(S),...y.map(S),...P.map(S)]}function je(e){let{center:n,size:o,color:t="#ffffff"}=e,[r,c,a]=n,s=(1+Math.cbrt(19+3*Math.sqrt(33))+Math.cbrt(19-3*Math.sqrt(33)))/3,i=1,l=1/s,u=s,m=[[i,l,u],[l,u,i],[u,i,l]],d=[[u,l,i],[l,i,u],[i,u,l]],f=[];for(let[h,b,A]of m)for(let I of[-1,1])for(let R of[-1,1])for(let k of[-1,1])((I===-1?1:0)+(R===-1?1:0)+(k===-1?1:0))%2===0&&f.push([I*h,R*b,k*A]);for(let[h,b,A]of d)for(let I of[-1,1])for(let R of[-1,1])for(let k of[-1,1])((I===-1?1:0)+(R===-1?1:0)+(k===-1?1:0))%2===1&&f.push([I*h,R*b,k*A]);let[p,g,x]=f[0],V=Math.sqrt(p*p+g*g+x*x),C=o/V,v=f.map(([h,b,A])=>[r+h*C,c+b*C,a+A*C]),{adj:M}=fe(f),y=te(f,M,3),P=te(f,M,4);function S(h){let b=de(f,h);return{vertices:me(f,h,b).map(I=>v[I]),color:t}}return[...y.map(S),...P.map(S)]}function qe(e){let{center:n,size:o,color:t="#ffffff"}=e,[r,c,a]=n,s=(1+Math.sqrt(5))/2,i=[[0,-1,-s],[0,-1,s],[0,1,-s],[0,1,s],[-1,-s,0],[-1,s,0],[1,-s,0],[1,s,0],[-s,0,-1],[s,0,-1],[-s,0,1],[s,0,1]],l=Math.sqrt(1+s*s),u=i.map(([T,z,D])=>[T/l,z/l,D/l]),m=[[0,2,9],[0,4,8],[0,6,4],[0,8,2],[0,9,6],[1,3,10],[1,4,6],[1,6,11],[1,10,4],[1,11,3],[2,5,7],[2,7,9],[2,8,5],[3,5,10],[3,7,5],[3,11,7],[4,10,8],[5,8,10],[6,9,11],[7,11,9]];function d(T,z){return[T[1]*z[2]-T[2]*z[1],T[2]*z[0]-T[0]*z[2],T[0]*z[1]-T[1]*z[0]]}function f(T){return Math.sqrt(T[0]*T[0]+T[1]*T[1]+T[2]*T[2])}function p(T){let z=f(T);return[T[0]/z,T[1]/z,T[2]/z]}function g(T,z){return Math.sqrt((T[0]-z[0])**2+(T[1]-z[1])**2+(T[2]-z[2])**2)}function x(T,z,D,L){let[w,O,E]=u[T],[_,N,G]=u[z],$=[(1-D)*w+D*_,(1-D)*O+D*N,(1-D)*E+D*G],F=p(d(u[T],u[z]));return p([$[0]+L*F[0],$[1]+L*F[1],$[2]+L*F[2]])}function V(T,z){let D=x(0,2,T,z),L=x(2,9,T,z),w=x(2,0,T,z);return g(D,L)-g(D,w)}function C(T,z){let D=x(0,2,T,z),L=x(2,9,T,z),w=x(0,9,T,z);return g(D,L)-g(D,w)}let v=.35,M=.13,y=1e-7;for(let T=0;T<80;T++){let z=V(v,M),D=C(v,M);if(Math.abs(z)<1e-13&&Math.abs(D)<1e-13)break;let L=(V(v+y,M)-V(v-y,M))/(2*y),w=(V(v,M+y)-V(v,M-y))/(2*y),O=(C(v+y,M)-C(v-y,M))/(2*y),E=(C(v,M+y)-C(v,M-y))/(2*y),_=L*E-w*O;if(Math.abs(_)<1e-12)break;v-=(z*E-D*w)/_,M-=(D*L-z*O)/_}let P=new Set,S=[];for(let[T,z,D]of m)for(let[L,w]of[[T,z],[z,D],[D,T],[z,T],[D,z],[T,D]]){let O=`${L},${w}`;P.has(O)||(P.add(O),S.push(x(L,w,v,M)))}let h=S,b=h.map(([T,z,D])=>[r+T*o,c+z*o,a+D*o]),{adj:A}=fe(h),I=te(h,A,3),R=te(h,A,5);function k(T){let z=de(h,T);return{vertices:me(h,T,z).map(L=>b[L]),color:t}}return[...I.map(k),...R.map(k)]}function Di(e,n){let o=e[0]-n[0],t=e[1]-n[1],r=e[2]-n[2];return o*o+t*t+r*r}function Li(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2])}function _i(e){let n=Li(e);return[e[0]/n,e[1]/n,e[2]/n]}function Gi(e){let[n,o,t]=e[0],[r,c,a]=e[1],[s,i,l]=e[2],u=r-n,m=c-o,d=a-t,f=s-n,p=i-o,g=l-t,x=m*g-d*p,V=d*f-u*g,C=u*p-m*f,v=e.reduce((h,b)=>h+b[0],0)/e.length,M=e.reduce((h,b)=>h+b[1],0)/e.length,y=e.reduce((h,b)=>h+b[2],0)/e.length,P=x*v+V*M+C*y>0?1:-1,S=Math.sqrt(x*x+V*V+C*C);return[P*x/S,P*V/S,P*C/S]}function ee(e){let o=[],t=[];function r(m){for(let d=0;d<o.length;d++)if(Di(o[d],m)<1e-10)return d;return o.push(m),o.length-1}for(let m of e)t.push(m.vertices.map(d=>r(d)));let c=e.length,a=o.length,s=Math.max(...o.map(m=>m[0]*m[0]+m[1]*m[1]+m[2]*m[2])),i=e.map((m,d)=>{let f=m.vertices,p=Gi(f),g=f[0],x=p[0]*g[0]+p[1]*g[1]+p[2]*g[2],V=s/x;return[p[0]*V,p[1]*V,p[2]*V]}),l=Array.from({length:a},()=>[]);for(let m=0;m<c;m++)for(let d of t[m])l[d].push(m);let u=[];for(let m=0;m<a;m++){let d=l[m];if(d.length<3)continue;let f=o[m],p=_i(f),g=i[d[0]],x=g[0]-f[0],V=g[1]-f[1],C=g[2]-f[2],v=x*p[0]+V*p[1]+C*p[2];x-=v*p[0],V-=v*p[1],C-=v*p[2];let M=Math.sqrt(x*x+V*V+C*C);if(M<1e-12)continue;let y=[x/M,V/M,C/M],P=[p[1]*y[2]-p[2]*y[1],p[2]*y[0]-p[0]*y[2],p[0]*y[1]-p[1]*y[0]],S=d.map(h=>{let b=i[h],A=b[0]-f[0],I=b[1]-f[1],R=b[2]-f[2],k=A*y[0]+I*y[1]+R*y[2],T=A*P[0]+I*P[1]+R*P[2];return{fi:h,angle:Math.atan2(T,k)}});S.sort((h,b)=>h.angle-b.angle),u.push(S.map(h=>h.fi))}return u.map(m=>({vertices:m.map(d=>i[d]),color:"#ffffff"}))}function Rn(e){let{center:n,size:o,color:t="#ffffff"}=e,r=Re({center:[0,0,0],size:o});return ee(r).map(a=>({vertices:a.vertices.map(([s,i,l])=>[s+n[0],i+n[1],l+n[2]]),color:t}))}function En(e){let{center:n,size:o,color:t="#ffffff"}=e,r=Ee({center:[0,0,0],size:o});return ee(r).map(a=>({vertices:a.vertices.map(([s,i,l])=>[s+n[0],i+n[1],l+n[2]]),color:t}))}function Dn(e){let{center:n,size:o,color:t="#ffffff"}=e,r=De({center:[0,0,0],size:o});return ee(r).map(a=>({vertices:a.vertices.map(([s,i,l])=>[s+n[0],i+n[1],l+n[2]]),color:t}))}function Ln(e){let{center:n,size:o,color:t="#ffffff"}=e,r=Le({center:[0,0,0],size:o});return ee(r).map(a=>({vertices:a.vertices.map(([s,i,l])=>[s+n[0],i+n[1],l+n[2]]),color:t}))}function _n(e){let{center:n,size:o,color:t="#ffffff"}=e,r=_e({center:[0,0,0],size:o});return ee(r).map(a=>({vertices:a.vertices.map(([s,i,l])=>[s+n[0],i+n[1],l+n[2]]),color:t}))}function Gn(e){let{center:n,size:o,color:t="#ffffff"}=e,r=Ge({center:[0,0,0],size:o});return ee(r).map(a=>({vertices:a.vertices.map(([s,i,l])=>[s+n[0],i+n[1],l+n[2]]),color:t}))}function Nn(e){let{center:n,size:o,color:t="#ffffff"}=e,r=Ne({center:[0,0,0],size:o});return ee(r).map(a=>({vertices:a.vertices.map(([s,i,l])=>[s+n[0],i+n[1],l+n[2]]),color:t}))}function $n(e){let{center:n,size:o,color:t="#ffffff"}=e,r=$e({center:[0,0,0],size:o});return ee(r).map(a=>({vertices:a.vertices.map(([s,i,l])=>[s+n[0],i+n[1],l+n[2]]),color:t}))}function Fn(e){let{center:n,size:o,color:t="#ffffff"}=e,r=Fe({center:[0,0,0],size:o});return ee(r).map(a=>({vertices:a.vertices.map(([s,i,l])=>[s+n[0],i+n[1],l+n[2]]),color:t}))}function Un(e){let{center:n,size:o,color:t="#ffffff"}=e,r=Ue({center:[0,0,0],size:o});return ee(r).map(a=>({vertices:a.vertices.map(([s,i,l])=>[s+n[0],i+n[1],l+n[2]]),color:t}))}function Bn(e){let{center:n,size:o,color:t="#ffffff"}=e,r=Be({center:[0,0,0],size:o});return ee(r).map(a=>({vertices:a.vertices.map(([s,i,l])=>[s+n[0],i+n[1],l+n[2]]),color:t}))}function jn(e){let{center:n,size:o,color:t="#ffffff"}=e,r=je({center:[0,0,0],size:o});return ee(r).map(a=>({vertices:a.vertices.map(([s,i,l])=>[s+n[0],i+n[1],l+n[2]]),color:t}))}function qn(e){let{center:n,size:o,color:t="#ffffff"}=e,r=qe({center:[0,0,0],size:o});return ee(r).map(a=>({vertices:a.vertices.map(([s,i,l])=>[s+n[0],i+n[1],l+n[2]]),color:t}))}function yo(e,n={}){let{center:o=[0,0,0],size:t=1,color:r}=n;switch(e){case"tetrahedron":return yn({center:o,size:t,color:r});case"cube":return hn({center:o,size:t,color:r});case"octahedron":return gn({center:o,size:t,color:r});case"dodecahedron":return bn({center:o,size:t,color:r});case"icosahedron":return xn({center:o,size:t,color:r});case"smallStellatedDodecahedron":return In({center:o,size:t,color:r});case"greatDodecahedron":return zn({center:o,size:t,color:r});case"greatStellatedDodecahedron":return wn({center:o,size:t,color:r});case"greatIcosahedron":return kn({center:o,size:t,color:r});case"cuboctahedron":return Re({center:o,size:t,color:r});case"icosidodecahedron":return Ee({center:o,size:t,color:r});case"truncatedTetrahedron":return De({center:o,size:t,color:r});case"truncatedCube":return Le({center:o,size:t,color:r});case"truncatedOctahedron":return _e({center:o,size:t,color:r});case"truncatedDodecahedron":return Ge({center:o,size:t,color:r});case"truncatedIcosahedron":return Ne({center:o,size:t,color:r});case"truncatedCuboctahedron":return $e({center:o,size:t,color:r});case"truncatedIcosidodecahedron":return Fe({center:o,size:t,color:r});case"rhombicuboctahedron":return Ue({center:o,size:t,color:r});case"rhombicosidodecahedron":return Be({center:o,size:t,color:r});case"snubCube":return je({center:o,size:t,color:r});case"snubDodecahedron":return qe({center:o,size:t,color:r});case"rhombicDodecahedron":return Rn({center:o,size:t,color:r});case"rhombicTriacontahedron":return En({center:o,size:t,color:r});case"triakisTetrahedron":return Dn({center:o,size:t,color:r});case"triakisOctahedron":return Ln({center:o,size:t,color:r});case"triakisIcosahedron":return Gn({center:o,size:t,color:r});case"tetrakisHexahedron":return _n({center:o,size:t,color:r});case"pentakisDodecahedron":return Nn({center:o,size:t,color:r});case"disdyakisDodecahedron":return $n({center:o,size:t,color:r});case"disdyakisTriacontahedron":return Fn({center:o,size:t,color:r});case"deltoidalIcositetrahedron":return Un({center:o,size:t,color:r});case"deltoidalHexecontahedron":return Bn({center:o,size:t,color:r});case"pentagonalIcositetrahedron":return jn({center:o,size:t,color:r});case"pentagonalHexecontahedron":return qn({center:o,size:t,color:r});case"sphere":return Pn({center:o,size:t,color:r});case"cylinder":return Mn({center:o,radius:t,height:t*2,color:r});case"cone":return Vn({center:o,radius:t,height:t*2,color:r});case"torus":return vn({center:o,majorRadius:t,minorRadius:t*.3,color:r});case"pyramid":return Cn({center:o,radius:t,height:t*2,color:r});case"prism":return An({center:o,radius:t,height:t*2,color:r});case"antiprism":return Sn({center:o,radius:t,height:t*2,color:r});case"bipyramid":return Tn({center:o,radius:t,halfHeight:t,color:r});case"trapezohedron":return On({center:o,radius:t,halfHeight:t,color:r});default:{let c=e;throw new Error(`Unknown geometry: ${String(c)}`)}}}var $r=2200,Fr=2201,Ur=2202;function Ni(e,n){let o=0,t=1,r=1,c=2201,a=1/0,s=0,i=!1,l=null,u=!0,m=!1,d={clampWhenFinished:!1,get timeScale(){return r},set timeScale(f){r=f},get weight(){return t},set weight(f){t=f},get time(){return o},set time(f){o=f},get isRunning(){return i},get enabled(){return u},set enabled(f){u=f},get paused(){return m},set paused(f){m=f},play(){return i=!0,d},stop(){return i=!1,o=0,s=0,l=null,d},reset(){return o=0,s=0,d},fadeIn(f){return l={from:0,to:1,elapsed:0,duration:f},t=0,d},fadeOut(f){return l={from:t,to:0,elapsed:0,duration:f},d},crossFadeTo(f,p){return d.fadeOut(p),f.fadeIn(p),d},crossFadeFrom(f,p){return f.fadeOut(p),d.fadeIn(p),d},setLoop(f,p){return c=f,a=p,d},setEffectiveTimeScale(f){return r=f,d},setEffectiveWeight(f){return t=f,d}};return d._internal={get clip(){return e},get time(){return o},get weight(){return t},get enabled(){return u},get paused(){return m},get running(){return i},get loopMode(){return c},get repetitions(){return a},get completedReps(){return s},set completedReps(f){s=f},get clampWhenFinished(){return d.clampWhenFinished},get timeScale(){return r},get fade(){return l},advance(f){if(!i)return;if(l){l.elapsed+=f;let g=l.duration>0?Math.min(l.elapsed/l.duration,1):1;if(t=l.from+(l.to-l.from)*g,g>=1&&(t=l.to,l=null,t<=0)){i=!1;return}}if(m)return;let p=e.duration;if(!(p<=0)){if(o+=f*r,c===2200)o>=p&&(o=d.clampWhenFinished?p:0,i=!1);else if(c===2201){if(o>=p){let g=o%p,x=Math.floor(o/p);s+=x,o=g,a!==1/0&&s>=a&&(o=d.clampWhenFinished?p:0,i=!1)}}else if(p>0){let g=p*2,x=o%g;if(o>=g){let V=Math.floor(o/g);s+=V,a!==1/0&&s>=a?(o=d.clampWhenFinished?p:0,i=!1):o=x}}}},sampleTime(){if(c===2202){let f=e.duration,p=f*2,g=o%p;return g<=f?g:p-g}return o}},d}function $i(e){return e._internal}function ho(e,n){return typeof n=="number"?e[n]:e.find(o=>o.name===n)}function Br(e,n){let o=new Map;function t(l){let u=ho(n.clips,l);if(!u)throw new Error(`GlyphAnimationMixer: no clip found for key "${l}". Available: ${n.clips.map(d=>d.name).join(", ")}`);let m=o.get(u.index);return m||(m=Ni(u,n),o.set(u.index,m)),m}function r(l){let u=ho(n.clips,l);return u?o.get(u.index)??null:null}function c(l){let u=[];for(let g of o.values()){let x=$i(g);x.advance(l),x.running&&x.enabled&&u.push({internal:x,clip:x.clip})}if(u.length===0)return;if(u.length===1){let{internal:g,clip:x}=u[0],V=n.sample(x.name,g.sampleTime());e.setPolygons(V);return}let m=0;for(let{internal:g}of u)m+=g.weight;if(m<=0)return;let d=u.map(({internal:g,clip:x})=>({polygons:n.sample(x.name,g.sampleTime()),weight:g.weight/m})),f=d[0].polygons;if(f.length===0)return;let p=f.map((g,x)=>{let V=g.vertices.map((C,v)=>{let M=0,y=0,P=0;for(let{polygons:S,weight:h}of d){let b=S[x];if(!b)continue;let A=b.vertices[v];A&&(M+=A[0]*h,y+=A[1]*h,P+=A[2]*h)}return[M,y,P]});return{...g,vertices:V}});e.setPolygons(p)}function a(){for(let l of o.values())l.stop()}function s(l){let u=ho(n.clips,l);u&&o.delete(u.index)}function i(){o.clear()}return{clipAction:t,existingAction:r,update:c,stopAllAction:a,uncacheClip:s,uncacheRoot:i}}var Fi=/^[0-9A-Fa-f]{6}$/,Ui=["#3b82f6","#ef4444","#22c55e","#eab308","#a855f7","#06b6d4","#f97316","#ec4899"];function yt(e,n){let o=n?.targetSize??60,t=n?.gridShift??1,r=n?.defaultColor??"#888888",c=n?.palette??Ui,a=n?.materialColors??{},s=n?.materialTextures??{},i=[],l=[],u=[],m=[],d=new Map,f=r,p,g=n?.includeObjects?new Set(n.includeObjects):null,x=n?.excludeObjects?new Set(n.excludeObjects):null,V=null,C=()=>V===null?g===null:!(g&&!g.has(V)||x&&x.has(V)),v=L=>L in a?a[L]:Fi.test(L)?`#${L}`:(d.has(L)||(d.set(L,c[m.length%c.length]),m.push(L)),d.get(L)),M=e.split(`
|
|
2
|
+
`);for(let L of M)if(!(L.length===0||L.charCodeAt(0)===35)){if(L.startsWith("v ")){let w=L.trim().split(/\s+/);i.push([parseFloat(w[1]),parseFloat(w[2]),parseFloat(w[3])])}else if(L.startsWith("vt ")){let w=L.trim().split(/\s+/);l.push([parseFloat(w[1]),parseFloat(w[2])])}else if(L.startsWith("o "))V=L.trim().slice(2).trim();else if(L.startsWith("usemtl ")){let w=L.trim().split(/\s+/)[1];f=v(w),p=s[w]}else if(L.startsWith("f ")){if(!C())continue;let w=L.trim().split(/\s+/).slice(1),O=[],E=[];for(let _ of w){let N=_.split("/");O.push(parseInt(N[0],10)-1);let G=N[1];if(G&&G.length>0){let $=parseInt(G,10)-1;E.push(Number.isFinite($)?$:null)}else E.push(null)}u.push({idx:O,uvIdx:E,color:f,texture:p})}}if(i.length===0||u.length===0)return Bi(m,e.length);let y=new Set;for(let L of u)for(let w of L.idx)y.add(w);let P=1/0,S=1/0,h=1/0,b=-1/0,A=-1/0,I=-1/0;for(let L of y){let w=i[L];w&&(w[0]<P&&(P=w[0]),w[0]>b&&(b=w[0]),w[1]<S&&(S=w[1]),w[1]>A&&(A=w[1]),w[2]<h&&(h=w[2]),w[2]>I&&(I=w[2]))}let R=Math.max(b-P,A-S,I-h),k=R>0?o/R:1,T=L=>Math.round(L*1e3)/1e3,z=i.map(([L,w,O])=>[T((O-h)*k+t),T((L-P)*k+t),T((w-S)*k+t)]),D=[];for(let{idx:L,uvIdx:w,color:O,texture:E}of u)for(let _=1;_<L.length-1;_++){let N=L[0],G=L[_],$=L[_+1],F=z[N],q=z[G],j=z[$];if(!F||!q||!j||F[0]===q[0]&&F[1]===q[1]&&F[2]===q[2]||F[0]===j[0]&&F[1]===j[1]&&F[2]===j[2]||q[0]===j[0]&&q[1]===j[1]&&q[2]===j[2])continue;let U;if(E){let H=w[0],Z=w[_],J=w[_+1];if(H!=null&&Z!=null&&J!=null){let ne=l[H],ie=l[Z],oe=l[J];ne&&ie&&oe&&(U=[ne,ie,oe])}}let B={vertices:[F,q,j],color:O};E&&(B.texture=E),U&&(B.uvs=U),D.push(B)}return{polygons:D,objectUrls:[],dispose:()=>{},warnings:[],metadata:{triangleCount:D.length,materials:m,sourceBytes:e.length}}}function Bi(e,n){return{polygons:[],objectUrls:[],dispose:()=>{},warnings:[],metadata:{triangleCount:0,materials:e,sourceBytes:n}}}var bo=e=>Math.round(Math.max(0,Math.min(1,e))*255).toString(16).padStart(2,"0");function ht(e){let n={},o={},t=null;for(let r of e.split(`
|
|
3
|
+
`)){let c=r.trim();if(!(c.length===0||c.charCodeAt(0)===35)){if(c.startsWith("newmtl ")){t=c.slice(7).trim();continue}if(t){if(c.startsWith("Kd ")){let a=c.split(/\s+/),s=parseFloat(a[1]),i=parseFloat(a[2]),l=parseFloat(a[3]);Number.isFinite(s)&&Number.isFinite(i)&&Number.isFinite(l)&&(n[t]=`#${bo(s)}${bo(i)}${bo(l)}`)}else if(c.startsWith("map_Kd ")){let a=c.split(/\s+/),s=a[a.length-1]?.replace(/\\+/g,"/");s&&s!=="map_Kd"&&(o[t]=s)}}}}return{colors:n,textures:o}}var Yr={5120:1,5121:1,5122:2,5123:2,5125:4,5126:4},Wr={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16};function Kr(e){let n=globalThis.TextDecoder;return new n().decode(e)}function ji(e){let n=e.indexOf(",");if(n<0)throw new Error("parseGltf: malformed data: URI");let o=e.slice(5,n),t=e.slice(n+1);if(!o.includes(";base64")){let a=decodeURIComponent(t),s=new Uint8Array(a.length);for(let i=0;i<a.length;i++)s[i]=a.charCodeAt(i)&255;return s}let r=globalThis.atob(t),c=new Uint8Array(r.length);for(let a=0;a<r.length;a++)c[a]=r.charCodeAt(a);return c}function qi(e,n){let o=e.buffers?.[0];if(!o)throw new Error("parseGltf: JSON doc has no buffers[0]");let t=o.uri;if(!t)throw new Error("parseGltf: JSON doc buffer has no uri (and there's no GLB BIN chunk)");if(t.startsWith("data:"))return ji(t);if(n){let r=n(t);if(r instanceof Uint8Array)return r;throw new Error("parseGltf: resolveBuffer returned a Promise; use parseGltf via async if your buffers are external")}throw new Error(`parseGltf: external buffer URI "${t}" \u2014 provide options.resolveBuffer`)}function Hi(e){let n=new DataView(e);if(n.getUint32(0,!0)!==1179937895)throw new Error("parseGltf: not a GLB (bad magic)");let o=n.getUint32(4,!0);if(o!==2)throw new Error(`parseGltf: only glTF v2 supported (got v${o})`);let t=12,r=null,c=null;for(;t<e.byteLength;){let a=n.getUint32(t,!0),s=n.getUint32(t+4,!0),i=t+8;if(s===1313821514){let l=new Uint8Array(e,i,a);r=JSON.parse(Kr(l))}else s===5130562&&(c=new Uint8Array(e,i,a));t=i+a}if(!r)throw new Error("parseGltf: no JSON chunk in GLB");return{doc:r,bin:c}}function xo(e,n,o){let t=e.accessors?.[o],r=e.bufferViews?.[t?.bufferView??-1];if(!t||!r)throw new Error(`parseGltf: bad accessor/bufferView ${o}`);let c=Yr[t.componentType],a=Wr[t.type];if(!c||!a)throw new Error(`parseGltf: unsupported accessor type ${t.type}/${t.componentType}`);let s=(r.byteOffset??0)+(t.byteOffset??0),i=t.count*a,l=n.buffer.slice(n.byteOffset+s,n.byteOffset+s+i*c),u;switch(t.componentType){case 5126:u=new Float32Array(l);break;case 5123:u=new Uint16Array(l);break;case 5125:u=new Uint32Array(l);break;case 5121:u=new Uint8Array(l);break;default:throw new Error(`parseGltf: unhandled componentType ${t.componentType}`)}return{array:u,count:t.count,componentCount:a}}function Xi(e,n,o){switch(o){case 5120:return e.getInt8(n);case 5121:return e.getUint8(n);case 5122:return e.getInt16(n,!0);case 5123:return e.getUint16(n,!0);case 5125:return e.getUint32(n,!0);case 5126:return e.getFloat32(n,!0);default:throw new Error(`parseGltf: unhandled componentType ${o}`)}}function Yi(e,n){switch(n){case 5120:return Math.max(e/127,-1);case 5121:return e/255;case 5122:return Math.max(e/32767,-1);case 5123:return e/65535;default:return e}}function Pt(e,n,o){let t=e.accessors?.[o],r=e.bufferViews?.[t?.bufferView??-1];if(!t||!r)throw new Error(`parseGltf: bad accessor/bufferView ${o}`);let c=Yr[t.componentType],a=Wr[t.type];if(!c||!a)throw new Error(`parseGltf: unsupported accessor type ${t.type}/${t.componentType}`);let s=n.byteOffset+(r.byteOffset??0)+(t.byteOffset??0),i=r.byteStride??c*a,l=new DataView(n.buffer),u=new Array(t.count*a),m=0;for(let d=0;d<t.count;d++){let f=s+d*i;for(let p=0;p<a;p++){let g=Xi(l,f+p*c,t.componentType);u[m++]=t.normalized?Yi(g,t.componentType):g}}return{values:u,count:t.count,componentCount:a}}function Wi(e,n,o){let t=[],r=[],c=globalThis;for(let a of e.images??[]){if(a.uri){if(o&&!a.uri.startsWith("data:"))try{t.push(new c.URL(a.uri,o).href)}catch{t.push(a.uri)}else t.push(a.uri);continue}if(a.bufferView!==void 0){let s=e.bufferViews?.[a.bufferView];if(!s){t.push("");continue}let i=s.byteOffset??0,l=n.subarray(i,i+s.byteLength),u=a.mimeType??"image/png",m=new c.Blob([l],{type:u}),d=c.URL.createObjectURL(m);t.push(d),r.push(d)}else t.push("")}return{urls:t,objectUrls:r}}function Ki(e,n){let o=new Map,t=e.materials??[];for(let r=0;r<t.length;r++){let c=t[r].pbrMetallicRoughness?.baseColorTexture?.index;if(c===void 0)continue;let a=e.textures?.[c]?.source;if(a===void 0)continue;let s=n[a];s&&o.set(r,s)}return o}function Zi(e,n){let o=e?.pbrMetallicRoughness?.baseColorFactor;if(!o||o.length<3)return n;let t=s=>Math.max(0,Math.min(1,s)),r=s=>Math.round(t(s)*255).toString(16).padStart(2,"0"),c=s=>Math.round(t(s)*255),a=t(o[3]??1);return a<1?`rgba(${c(o[0])}, ${c(o[1])}, ${c(o[2])}, ${Math.round(a*1e3)/1e3})`:`#${r(o[0])}${r(o[1])}${r(o[2])}`}var Je=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function Po(e,n){let o=new Array(16);for(let t=0;t<4;t++)for(let r=0;r<4;r++)o[r*4+t]=e[0+t]*n[r*4+0]+e[4+t]*n[r*4+1]+e[8+t]*n[r*4+2]+e[12+t]*n[r*4+3];return o}function xt(e,n){return[e[0]*n[0]+e[4]*n[1]+e[8]*n[2]+e[12],e[1]*n[0]+e[5]*n[1]+e[9]*n[2]+e[13],e[2]*n[0]+e[6]*n[1]+e[10]*n[2]+e[14]]}function Zr(e,n,o){let t=e?.[0]??0,r=e?.[1]??0,c=e?.[2]??0,a=n?.[0]??0,s=n?.[1]??0,i=n?.[2]??0,l=n?.[3]??1,u=o?.[0]??1,m=o?.[1]??1,d=o?.[2]??1,f=a+a,p=s+s,g=i+i,x=a*f,V=a*p,C=a*g,v=s*p,M=s*g,y=i*g,P=l*f,S=l*p,h=l*g;return[(1-(v+y))*u,(V+h)*u,(C-S)*u,0,(V-h)*m,(1-(x+y))*m,(M+P)*m,0,(C+S)*d,(M-P)*d,(1-(x+v))*d,0,t,r,c,1]}function Qi(e){return e.matrix&&e.matrix.length===16?e.matrix.slice():Zr(e.translation,e.rotation,e.scale)}function Ji(e,n){return[e[0]+n[0],e[1]+n[1],e[2]+n[2]]}function jr(e,n){return[e[0]*n,e[1]*n,e[2]*n]}function Qr(e,n,o){let t=new Array(Math.min(e.length,n.length));for(let r=0;r<t.length;r++)t[r]=e[r]+(n[r]-e[r])*o;return t}function Hn(e){let n=Math.hypot(e[0]??0,e[1]??0,e[2]??0,e[3]??1)||1;return[(e[0]??0)/n,(e[1]??0)/n,(e[2]??0)/n,(e[3]??1)/n]}function ea(e,n,o){let t=Hn(e),r=Hn(n),c=t[0]*r[0]+t[1]*r[1]+t[2]*r[2]+t[3]*r[3];if(c<0&&(c=-c,r=[-r[0],-r[1],-r[2],-r[3]]),c>.9995)return Hn(Qr(t,r,o));let a=Math.acos(Math.max(-1,Math.min(1,c))),s=Math.sin(a),i=Math.sin((1-o)*a)/s,l=Math.sin(o*a)/s;return Hn([t[0]*i+r[0]*l,t[1]*i+r[1]*l,t[2]*i+r[2]*l,t[3]*i+r[3]*l])}function na(e){return{translation:e?.translation?.slice()??[0,0,0],rotation:e?.rotation?.slice()??[0,0,0,1],scale:e?.scale?.slice()??[1,1,1],matrix:e?.matrix&&e.matrix.length===16?e.matrix.slice():void 0}}function qr(e){return e.matrix?e.matrix.slice():Zr(e.translation,e.rotation,e.scale)}function ta(e){let n=e.scene??0,o=e.scenes?.[n]?.nodes;return o&&o.length>0?o:[]}function Hr(e,n){let o=e.nodes??[],t=new Array(o.length),r=new Set,c=(s,i)=>{if(s<0||s>=o.length)return;let l=Po(i,n[s]??Je);t[s]=l,r.add(s);for(let u of o[s].children??[])c(u,l)},a=ta(e);if(a.length>0)for(let s of a)c(s,Je);for(let s=0;s<o.length;s++)r.has(s)||c(s,Je);return t}function Xr(e,n,o,t,r){if(o===void 0)return;let{values:c,count:a,componentCount:s}=Pt(e,n,o);if(a!==r||s<1)return;let i=[];for(let l=0;l<a;l++){let u=[];for(let m=0;m<t;m++)u.push(c[l*s+m]??0);i.push(u)}return i}function oa(e,n,o,t){if(o===void 0)return Array.from({length:t},()=>Je.slice());let{values:r,componentCount:c,count:a}=Pt(e,n,o);if(c!==16)throw new Error(`parseGltf: inverseBindMatrices accessor ${o} is not MAT4`);let s=[];for(let i=0;i<t;i++){let l=Math.min(i,a-1);s.push(r.slice(l*16,l*16+16))}return s}function bt(e,n){let o=e.componentCount,t=e.interpolation==="CUBICSPLINE"?(n*3+1)*o:n*o;return e.output.slice(t,t+o)}function ra(e,n,o){let t=e.input;if(t.length===0)return[];if(t.length===1||n<=t[0])return bt(e,0);let r=t.length-1;if(n>=t[r])return bt(e,r);let c=0,a=r;for(;c+1<a;){let d=c+a>>1;t[d]<=n?c=d:a=d}let s=t[c],i=t[c+1],l=i>s?(n-s)/(i-s):0,u=bt(e,c),m=bt(e,c+1);return e.interpolation==="STEP"?u:o==="rotation"?ea(u,m,l):Qr(u,m,l)}function sa(e,n,o,t){let r=e.animations??[];if(r.length===0||o.length===0)return;let c=(e.nodes??[]).map(f=>na(f)),a=c.map(qr),s=Hr(e,a),i=(e.skins??[]).map(f=>({joints:f.joints??[],inverseBindMatrices:oa(e,n,f.inverseBindMatrices,f.joints?.length??0)})),l=[];for(let f=0;f<r.length;f++){let p=r[f],g=(p.samplers??[]).map(C=>{let v=Pt(e,n,C.input),M=Pt(e,n,C.output);return{input:v.values,output:M.values,componentCount:M.componentCount,interpolation:C.interpolation??"LINEAR"}}),x=[];for(let C of p.channels??[]){let v=C.target.node,M=C.target.path,y=g[C.sampler];v===void 0||!M||!y||M==="weights"||x.push({sampler:y,targetNode:v,path:M})}let V=x.reduce((C,v)=>{let M=v.sampler.input;return Math.max(C,M[M.length-1]??0)},0);l.push({info:{index:f,name:p.name??`animation_${f}`,duration:V,channelCount:x.length},channels:x})}let u=l.map(f=>f.info);if(u.length===0)return;let m=(f,p,g,x,V,C)=>{let v=t(f),M=t(p),y=t(g);if(v[0]===M[0]&&v[1]===M[1]&&v[2]===M[2]||v[0]===y[0]&&v[1]===y[1]&&v[2]===y[2]||M[0]===y[0]&&M[1]===y[1]&&M[2]===y[2])return null;let P={vertices:[v,M,y],color:x};return V&&(P.texture=V),C&&(P.uvs=C),P};return{clips:u,sample:(f,p)=>{let g=typeof f=="number"?l[f]:l.find(y=>y.info.name===f);if(!g)return[];let x=g.info.duration,V=x>0?(p%x+x)%x:Math.max(0,p),C=c.map(y=>({translation:y.translation.slice(),rotation:y.rotation.slice(),scale:y.scale.slice(),matrix:y.matrix?y.matrix.slice():void 0}));for(let y of g.channels){let P=C[y.targetNode];if(!P)continue;let S=ra(y.sampler,V,y.path);P.matrix=void 0,y.path==="translation"?P.translation=S.slice(0,3):y.path==="rotation"?P.rotation=Hn(S.slice(0,4)):y.path==="scale"&&(P.scale=S.slice(0,3))}let v=Hr(e,C.map(qr)),M=[];for(let y of o){let P=[];if(y.skinIndex!==void 0&&y.joints&&y.weights&&i[y.skinIndex]){let S=i[y.skinIndex];for(let h=0;h<y.positions.length;h++){let b=y.positions[h],A=[0,0,0],I=0,R=y.joints[h]??[],k=y.weights[h]??[];for(let T=0;T<4;T++){let z=k[T]??0;if(z<=0)continue;let D=Math.round(R[T]??0),L=S.joints[D],w=v[L],O=S.inverseBindMatrices[D];if(!w||!O)continue;let E=Po(w,O);A=Ji(A,jr(xt(E,b),z)),I+=z}P.push(I>0?jr(A,1/I):xt(y.meshBindWorld,b))}}else{let S=y.meshNode!==null?v[y.meshNode]??y.meshBindWorld:y.meshBindWorld;for(let h of y.positions)P.push(xt(S,h))}for(let S=0;S+2<y.indices.length;S+=3){let h=y.indices[S],b=y.indices[S+1],A=y.indices[S+2],I=P[h],R=P[b],k=P[A];if(!I||!R||!k)continue;let T;if(y.uvs&&y.texture){let D=y.uvs[h],L=y.uvs[b],w=y.uvs[A];D&&L&&w&&(T=[D,L,w])}let z=m(I,R,k,y.color,y.texture,T);z&&M.push(z)}}return M}}}function Mt(e,n){let o=n?.targetSize??60,t=n?.gridShift??1,r=n?.defaultColor??"#888888",c=n?.materialColors??{},a=e instanceof Uint8Array?e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength):e,s=a.byteLength,i,l;if(a.byteLength>=4&&new DataView(a).getUint32(0,!0)===1179937895){let O=Hi(a);if(i=O.doc,!O.bin)throw new Error("parseGltf: GLB has no binary chunk");l=O.bin}else i=JSON.parse(Kr(new Uint8Array(a))),l=qi(i,n?.resolveBuffer);let{urls:u,objectUrls:m}=Wi(i,l,n?.baseUrl),d=Ki(i,u),f=[],p=[],g=(i.meshes??[]).map((O,E)=>O.name??`mesh_${E}`),x=(i.materials??[]).map((O,E)=>O.name??`material_${E}`);function V(O,E,_){let N=i.meshes?.[O];if(N)for(let G of N.primitives){if((G.mode??4)!==4)continue;let F=G.material!==void 0?i.materials?.[G.material]?.name:void 0,j=(F?c[F]:void 0)??Zi(G.material!==void 0?i.materials?.[G.material]:void 0,r),U=G.material!==void 0?d.get(G.material):void 0,{array:B,count:H}=xo(i,l,G.attributes.POSITION);if(!(B instanceof Float32Array))continue;let Z=[],J=[];for(let Q=0;Q<H;Q++){let X=[B[Q*3],B[Q*3+1],B[Q*3+2]];Z.push(X),J.push(xt(E,X))}let ne=null,ie=G.attributes.TEXCOORD_0;if(U&&ie!==void 0){let{array:Q,count:X}=xo(i,l,ie);ne=[];let K=1;Q instanceof Uint8Array?K=1/255:Q instanceof Uint16Array&&(K=1/65535);for(let le=0;le<X;le++){let Pe=Q[le*2]*K,Te=Q[le*2+1]*K;ne.push([Pe,1-Te])}}let oe;if(G.indices!==void 0){let{array:Q,count:X}=xo(i,l,G.indices);oe=[];for(let K=0;K<X;K++)oe.push(Number(Q[K]))}else oe=J.map((Q,X)=>X);if((i.animations?.length??0)>0){let Q=Xr(i,l,G.attributes.JOINTS_0,4,H),X=Xr(i,l,G.attributes.WEIGHTS_0,4,H);p.push({meshNode:_,meshBindWorld:E,skinIndex:_!==null?i.nodes?.[_]?.skin:void 0,positions:Z,indices:oe,color:j,texture:U,uvs:ne??void 0,joints:Q,weights:X})}for(let Q=0;Q+2<oe.length;Q+=3){let X=J[oe[Q]],K=J[oe[Q+1]],le=J[oe[Q+2]];if(!X||!K||!le)continue;let Pe;if(ne&&U){let Te=ne[oe[Q]],Xe=ne[oe[Q+1]],Ye=ne[oe[Q+2]];Te&&Xe&&Ye&&(Pe=[Te,Xe,Ye])}f.push({v0:X,v1:K,v2:le,color:j,texture:U,uvs:Pe})}}}function C(O,E){let _=i.nodes?.[O];if(!_)return;let N=Po(E,Qi(_));typeof _.mesh=="number"&&V(_.mesh,N,O);for(let G of _.children??[])C(G,N)}let v=i.scene??0,M=i.scenes?.[v]?.nodes;if(M&&M.length>0)for(let O of M)C(O,Je);else for(let O=0;O<(i.meshes?.length??0);O++)V(O,Je,null);let y=ca(m);if(f.length===0)return{polygons:[],objectUrls:m,dispose:y,warnings:[],metadata:{triangleCount:0,meshes:g,materials:x,sourceBytes:s}};let P=1/0,S=1/0,h=1/0,b=-1/0,A=-1/0,I=-1/0;for(let O of f)for(let E of[O.v0,O.v1,O.v2])E[0]<P&&(P=E[0]),E[0]>b&&(b=E[0]),E[1]<S&&(S=E[1]),E[1]>A&&(A=E[1]),E[2]<h&&(h=E[2]),E[2]>I&&(I=E[2]);let R=Math.max(b-P,A-S,I-h),k=R>0?o/R:1,T=O=>Math.round(O*1e3)/1e3,D=(n?.upAxis??"y")==="z"?([O,E,_])=>[T((O-P)*k+t),T((E-S)*k+t),T((_-h)*k+t)]:([O,E,_])=>[T((_-h)*k+t),T((O-P)*k+t),T((E-S)*k+t)],L=sa(i,l,p,D),w=[];for(let O of f){let E=D(O.v0),_=D(O.v1),N=D(O.v2);if(E[0]===_[0]&&E[1]===_[1]&&E[2]===_[2]||E[0]===N[0]&&E[1]===N[1]&&E[2]===N[2]||_[0]===N[0]&&_[1]===N[1]&&_[2]===N[2])continue;let G={vertices:[E,_,N],color:O.color};O.texture&&(G.texture=O.texture),O.uvs&&(G.uvs=O.uvs),w.push(G)}return{polygons:w,animation:L,objectUrls:m,dispose:y,warnings:[],metadata:{triangleCount:w.length,meshes:g,materials:x,animations:L?.clips,sourceBytes:s}}}function ca(e){let n=!1;return()=>{if(n)return;n=!0;let o=globalThis.URL;if(o?.revokeObjectURL)for(let t of e)try{o.revokeObjectURL(t)}catch{}}}function Mo(e){return e.material?.texture??e.texture}function ia(){let e=globalThis;return typeof e.Image!="function"||typeof e.document?.createElement!="function"?null:{Image:e.Image,createCanvas(){return e.document.createElement("canvas")}}}function aa(e,n){return new Promise((o,t)=>{let r=new n,c=!1,a=s=>{c||(c=!0,s())};r.decoding="async",r.onload=()=>a(()=>o(r)),r.onerror=()=>a(()=>t(new Error(`texture load failed: ${e}`))),r.src=e,typeof r.decode=="function"&&r.decode().then(()=>a(()=>o(r)),()=>{})})}async function la(e,n,o){try{let t=await aa(e,n.Image),r=Math.max(0,Math.floor(t.naturalWidth||t.width||0)),c=Math.max(0,Math.floor(t.naturalHeight||t.height||0));if(r<=0||c<=0||r*c>o)return null;let a=n.createCanvas();a.width=r,a.height=c;let s=a.getContext("2d",{willReadFrequently:!0});if(!s)return null;s.drawImage(t,0,0,r,c);let i=s.getImageData(0,0,r,c).data;return{width:r,height:c,data:i,lowDetail:ua(r,c,i)}}catch{return null}}function Jr(e,n,o,t,r,c){let a=(t*n+o)*4,s=(c*n+r)*4;return Math.max(Math.abs((e[a]??0)-(e[s]??0)),Math.abs((e[a+1]??0)-(e[s+1]??0)),Math.abs((e[a+2]??0)-(e[s+2]??0)))}function ua(e,n,o){let t=Math.max(1,Math.floor(Math.max(e,n)/128)),r=0,c=0,a=0;for(let s=0;s<n;s+=t)for(let i=0;i<e;i+=t){if(i+t<e){let l=Jr(o,e,i,s,i+t,s);a+=l,r++,l>32&&c++}if(s+t<n){let l=Jr(o,e,i,s,i,s+t);a+=l,r++,l>32&&c++}}return r>0&&c/r<=.045&&a/r<=10}function es(e,n,o){return Math.max(n,Math.min(o,e))}function fa(e,n){let o=n[0],t=1-n[1];if(!Number.isFinite(o)||!Number.isFinite(t))return null;let r=es(Math.floor(o*e.width),0,e.width-1),a=(es(Math.floor(t*e.height),0,e.height-1)*e.width+r)*4;return{r:e.data[a]??0,g:e.data[a+1]??0,b:e.data[a+2]??0,a:e.data[a+3]??255}}function Se(e,n,o,t,r,c){return[e[0]*t+n[0]*r+o[0]*c,e[1]*t+n[1]*r+o[1]*c]}function ma(e){let[n,o,t]=e;return[Se(n,o,t,1/3,1/3,1/3),Se(n,o,t,.8,.1,.1),Se(n,o,t,.1,.8,.1),Se(n,o,t,.1,.1,.8),Se(n,o,t,.45,.45,.1),Se(n,o,t,.45,.1,.45),Se(n,o,t,.1,.45,.45)]}function da(e){let[n,o,t]=e,r=ma(e);for(let c=1;c<6;c++)for(let a=1;a<6-c;a++){let s=6-c-a;s<=0||r.push(Se(n,o,t,c/6,a/6,s/6))}return r}function rs(e){if(e.textureTriangles?.length)return e.textureTriangles;let n=e.uvs;if(!n||n.length!==e.vertices.length||n.length<3)return[];let o=[];for(let t=1;t+1<n.length;t++)o.push({uvs:[n[0],n[t],n[t+1]]});return o}function ns(e,n,o){return Math.abs(e.r-n.r)<=o&&Math.abs(e.g-n.g)<=o&&Math.abs(e.b-n.b)<=o&&Math.abs(e.a-n.a)<=o}function ts(e){let n=t=>Math.round(Math.max(0,Math.min(255,t))).toString(16).padStart(2,"0");if(e.a>=255)return`#${n(e.r)}${n(e.g)}${n(e.b)}`;let o=Math.round(Math.max(0,Math.min(255,e.a))/255*1e3)/1e3;return`rgba(${Math.round(e.r)}, ${Math.round(e.g)}, ${Math.round(e.b)}, ${o})`}function pa(){return{min:{r:255,g:255,b:255,a:255},max:{r:0,g:0,b:0,a:0},sum:{r:0,g:0,b:0,a:0},count:0}}function ga(e,n){e.min.r=Math.min(e.min.r,n.r),e.min.g=Math.min(e.min.g,n.g),e.min.b=Math.min(e.min.b,n.b),e.min.a=Math.min(e.min.a,n.a),e.max.r=Math.max(e.max.r,n.r),e.max.g=Math.max(e.max.g,n.g),e.max.b=Math.max(e.max.b,n.b),e.max.a=Math.max(e.max.a,n.a),e.sum.r+=n.r,e.sum.g+=n.g,e.sum.b+=n.b,e.sum.a+=n.a,e.count++}function os(e){return{r:e.sum.r/e.count,g:e.sum.g/e.count,b:e.sum.b/e.count,a:e.sum.a/e.count}}function ya(e,n,o,t){let r=rs(e);if(r.length===0||!t&&!n.lowDetail)return null;let c=pa();for(let a of r)for(let s of da(a.uvs)){let i=fa(n,s);if(!i)return null;ga(c,i)}return c.count===0?null:ns(c.min,c.max,o)?ts(os(c)):t||!ns(c.min,c.max,32)?null:ts(os(c))}function ha(e,n){let{texture:o,material:t,uvs:r,textureTriangles:c,...a}=e;return{...a,color:n}}async function ss(e,n={}){if(n.enabled===!1)return null;let o=ia();if(!o)return null;let t=e.filter(i=>Mo(i)&&rs(i).length>0);if(t.length===0)return null;let r=n.maxTexturePixels??16777216,c=new Map;await Promise.all(Array.from(new Set(t.map(i=>Mo(i)))).map(async i=>{c.set(i,await la(i,o,r))}));let a=n.colorTolerance??2,s=n.colorTolerance!==void 0;return{bake(i){let l=!1,u=i.map(m=>{let d=Mo(m);if(!d)return m;let f=c.get(d);if(!f)return m;let p=ya(m,f,a,s);return p?(l=!0,ha(m,p)):m});return{polygons:l?u:i,changed:l}}}}async function cs(e,n={}){let o=await ss(e,n);return o?o.bake(e).polygons:e}async function Vt(e,n={}){let o=await ss(e.polygons,n);if(!o)return e;let t=o.bake(e.polygons);return!t.changed&&!e.animation?e:{...e,polygons:t.polygons,animation:e.animation?{...e.animation,sample(r,c){return o.bake(e.animation.sample(r,c)).polygons}}:e.animation}}var ba=[0,4294967295,4291624959,4288282623,4284940287,4281597951,4278255615,4294954239,4291611903,4288269567,4284927231,4281584895,4278242559,4294941183,4291598847,4288256511,4284914175,4281571839,4278229503,4294928127,4291585791,4288243455,4284901119,4281558783,4278216447,4294915071,4291572735,4288230399,4284888063,4281545727,4278203391,4294902015,4291559679,4288217343,4284875007,4281532671,4278190335,4294967244,4291624908,4288282572,4284940236,4281597900,4278255564,4294954188,4291611852,4288269516,4284927180,4281584844,4278242508,4294941132,4291598796,4288256460,4284914124,4281571788,4278229452,4294928076,4291585740,4288243404,4284901068,4281558732,4278216396,4294915020,4291572684,4288230348,4284888012,4281545676,4278203340,4294901964,4291559628,4288217292,4284874956,4281532620,4278190284,4294967193,4291624857,4288282521,4284940185,4281597849,4278255513,4294954137,4291611801,4288269465,4284927129,4281584793,4278242457,4294941081,4291598745,4288256409,4284914073,4281571737,4278229401,4294928025,4291585689,4288243353,4284901017,4281558681,4278216345,4294914969,4291572633,4288230297,4284887961,4281545625,4278203289,4294901913,4291559577,4288217241,4284874905,4281532569,4278190233,4294967142,4291624806,4288282470,4284940134,4281597798,4278255462,4294954086,4291611750,4288269414,4284927078,4281584742,4278242406,4294941030,4291598694,4288256358,4284914022,4281571686,4278229350,4294927974,4291585638,4288243302,4284900966,4281558630,4278216294,4294914918,4291572582,4288230246,4284887910,4281545574,4278203238,4294901862,4291559526,4288217190,4284874854,4281532518,4278190182,4294967091,4291624755,4288282419,4284940083,4281597747,4278255411,4294954035,4291611699,4288269363,4284927027,4281584691,4278242355,4294940979,4291598643,4288256307,4284913971,4281571635,4278229299,4294927923,4291585587,4288243251,4284900915,4281558579,4278216243,4294914867,4291572531,4288230195,4284887859,4281545523,4278203187,4294901811,4291559475,4288217139,4284874803,4281532467,4278190131,4294967040,4291624704,4288282368,4284940032,4281597696,4278255360,4294953984,4291611648,4288269312,4284926976,4281584640,4278242304,4294940928,4291598592,4288256256,4284913920,4281571584,4278229248,4294927872,4291585536,4288243200,4284900864,4281558528,4278216192,4294914816,4291572480,4288230144,4284887808,4281545472,4278203136,4294901760,4291559424,4288217088,4284874752,4281532416,4278190318,4278190301,4278190267,4278190250,4278190216,4278190199,4278190165,4278190148,4278190114,4278190097,4278251008,4278246656,4278237952,4278233600,4278224896,4278220544,4278211840,4278207488,4278198784,4278194432,4293787648,4292673536,4290445312,4289331200,4287102976,4285988864,4283760640,4282646528,4280418304,4279304192,4293848814,4292730333,4290493371,4289374890,4287137928,4286019447,4283782485,4282664004,4280427042,4279308561];function xa(e){let n=e>>0&255,o=e>>8&255,t=e>>16&255;return[n,o,t]}function Vo(e){return(e&255).toString(16).padStart(2,"0")}function as(e,n,o){return`#${Vo(e)}${Vo(n)}${Vo(o)}`}function Pa(e,n,o,t){if(t>=255)return as(e,n,o);let r=Math.round(Math.max(0,Math.min(255,t))/255*1e3)/1e3;return`rgba(${e}, ${n}, ${o}, ${r})`}var Ma=542658390;function vt(e,n){let o=n?.targetSize??60,t=n?.gridShift??0,r=e.byteLength;if(e.byteLength<8)return en(r,["parseVox: buffer too small to be a valid .vox file"]);let c=new DataView(e);if(c.getUint32(0,!0)!==Ma)return en(r,["parseVox: not a .vox file (bad magic)"]);if(e.byteLength<20)return en(r,["parseVox: buffer too small for MAIN chunk"]);if(is(c,8)!=="MAIN")return en(r,["parseVox: expected MAIN chunk at offset 8"]);let l=20+c.getUint32(12,!0),u=l+c.getUint32(16,!0),m=[],d=[],f=null;for(;l<u&&l+12<=e.byteLength;){let w=is(c,l),O=c.getUint32(l+4,!0),E=c.getUint32(l+8,!0),_=l+12,N=_+O+E;if(w==="SIZE"){if(O>=12&&_+12<=e.byteLength){let G=c.getUint32(_,!0),$=c.getUint32(_+4,!0),F=c.getUint32(_+8,!0);m.push({sx:G,sy:$,sz:F})}}else if(w==="XYZI"){if(O>=4&&_+4<=e.byteLength){let G=c.getUint32(_,!0),$=[],F=Math.min(G,Math.floor((O-4)/4));for(let q=0;q<F;q++){let j=_+4+q*4;$.push({x:c.getUint8(j),y:c.getUint8(j+1),z:c.getUint8(j+2),colorIndex:c.getUint8(j+3)})}d.push($)}}else if(w==="RGBA"&&O>=1024&&_+1024<=e.byteLength){f=[];for(let G=0;G<256;G++){let $=_+G*4,F=c.getUint8($),q=c.getUint8($+1),j=c.getUint8($+2),U=c.getUint8($+3);f.push(Pa(F,q,j,U))}}l=N}let p=[],g=new Set;for(let w of d)for(let O of w){if(O.colorIndex===0)continue;let E=`${O.x},${O.y},${O.z}`;g.has(E)||(g.add(E),p.push(O))}if(p.length===0)return en(r,[]);let x=w=>{let O=w-1;if(f!==null)return f[O]??"#888888";let E=ba[w]??0,[_,N,G]=xa(E);return as(_,N,G)},V=(w,O,E)=>g.has(`${w},${O},${E}`),C=new Map,v=(w,O,E,_,N)=>{let G=`${w}:${O}:${N}`,$=C.get(G);$||($=new Set,C.set(G,$)),$.add(`${E},${_}`)};for(let w of p){let{x:O,y:E,z:_}=w,N=x(w.colorIndex);V(O+1,E,_)||v(0,O+1,E,_,N),V(O-1,E,_)||v(1,O,E,_,N),V(O,E+1,_)||v(2,E+1,O,_,N),V(O,E-1,_)||v(3,E,O,_,N),V(O,E,_+1)||v(4,_+1,O,E,N),V(O,E,_-1)||v(5,_,O,E,N)}function M(w){let O=new Set,E=[],_=1/0,N=-1/0,G=1/0,$=-1/0;for(let F of w){let[q,j]=F.split(","),U=+q,B=+j;U<_&&(_=U),U>N&&(N=U),B<G&&(G=B),B>$&&($=B)}for(let F=G;F<=$;F++)for(let q=_;q<=N;q++){let j=`${q},${F}`;if(!w.has(j)||O.has(j))continue;let U=1;for(;q+U<=N;){let H=`${q+U},${F}`;if(!w.has(H)||O.has(H))break;U++}let B=1;e:for(;F+B<=$;){for(let H=0;H<U;H++){let Z=`${q+H},${F+B}`;if(!w.has(Z)||O.has(Z))break e}B++}for(let H=0;H<B;H++)for(let Z=0;Z<U;Z++)O.add(`${q+Z},${F+H}`);E.push({u:q,v:F,w:U,h:B})}return E}let y=(w,O,E,_,N,G)=>{let $=E+N,F=_+G;switch(w){case 0:return[[O,E,_],[O,$,_],[O,$,F],[O,E,F]];case 1:return[[O,$,_],[O,E,_],[O,E,F],[O,$,F]];case 2:return[[E,O,_],[E,O,F],[$,O,F],[$,O,_]];case 3:return[[$,O,_],[$,O,F],[E,O,F],[E,O,_]];case 4:return[[E,_,O],[$,_,O],[$,F,O],[E,F,O]];default:return[[E,F,O],[$,F,O],[$,_,O],[E,_,O]]}},P=[];for(let[w,O]of C){let E=w.indexOf(":"),_=w.indexOf(":",E+1),N=+w.slice(0,E),G=+w.slice(E+1,_),$=w.slice(_+1);for(let{u:F,v:q,w:j,h:U}of M(O))P.push({vertices:y(N,G,F,q,j,U),color:$})}if(P.length===0)return en(r,[]);let S=1/0,h=1/0,b=1/0,A=-1/0,I=-1/0,R=-1/0;for(let w of P)for(let O of w.vertices)O[0]<S&&(S=O[0]),O[0]>A&&(A=O[0]),O[1]<h&&(h=O[1]),O[1]>I&&(I=O[1]),O[2]<b&&(b=O[2]),O[2]>R&&(R=O[2]);let k=Math.max(A-S,I-h,R-b),T=k>0?o/k:1,z=w=>Math.round(w*1e3)/1e3,D=w=>[z((w[0]-S)*T+t),z((w[1]-h)*T+t),z((w[2]-b)*T+t)],L=P.map(({vertices:w,color:O})=>({vertices:w.map(D),color:O}));return{polygons:L,objectUrls:[],dispose:()=>{},warnings:[],metadata:{triangleCount:L.length,sourceBytes:r,voxelCount:p.length}}}function is(e,n){return String.fromCharCode(e.getUint8(n))+String.fromCharCode(e.getUint8(n+1))+String.fromCharCode(e.getUint8(n+2))+String.fromCharCode(e.getUint8(n+3))}function en(e,n){return{polygons:[],objectUrls:[],dispose:()=>{},warnings:n,metadata:{triangleCount:0,sourceBytes:e}}}var He="loadMesh";function vo(e,n){let o=at(e.polygons,{meshResolution:n?.meshResolution});return o.length===e.polygons.length?e:{...e,polygons:o}}async function ls(e,n){let o=n?.solidTextureSamples;return o===!1?e:Vt(e,typeof o=="object"?o:void 0)}function Va(e){let n=e.split("?")[0].split("#")[0],o=n.lastIndexOf(".");return o<0?"":n.slice(o+1).toLowerCase()}async function us(e,n){let o=Va(e);if(o==="mtl")throw new Error(`${He}: .mtl is a material file, not a mesh \u2014 use parseMtl directly`);let t=globalThis.fetch;if(!t)throw new Error(`${He}: no fetch() in this environment`);let r=n?.baseUrl??e;if(o==="obj"){let c=await t(e);if(!c.ok)throw new Error(`${He}: ${e} \u2192 ${c.status}`);let a=await c.text(),s=n?.objOptions;if(n?.mtlUrl){let l=await t(n.mtlUrl);if(!l.ok)throw new Error(`${He}: ${n.mtlUrl} \u2192 ${l.status}`);let u=await l.text(),{colors:m,textures:d}=ht(u),f={},p=globalThis.URL,g=globalThis.document?.baseURI,x=n.mtlUrl;if(p&&g)try{x=new p(n.mtlUrl,g).toString()}catch{}for(let[V,C]of Object.entries(d)){if(p)try{f[V]=new p(C,x).toString();continue}catch{}let v=n.mtlUrl.lastIndexOf("/"),M=v>=0?n.mtlUrl.slice(0,v+1):"";f[V]=C.startsWith("/")||/^https?:\/\//.test(C)?C:M+C}s={...s??{},materialColors:{...m,...s?.materialColors??{}},materialTextures:{...f,...s?.materialTextures??{}}}}let i=yt(a,s);return vo(await ls(i,n),n)}if(o==="glb"||o==="gltf"){let c=await t(e);if(!c.ok)throw new Error(`${He}: ${e} \u2192 ${c.status}`);let a=await c.arrayBuffer(),s=Mt(a,{baseUrl:r,...n?.gltfOptions??{}});return vo(await ls(s,n),n)}if(o==="vox"){let c=await t(e);if(!c.ok)throw new Error(`${He}: ${e} \u2192 ${c.status}`);let a=await c.arrayBuffer();return vo(vt(a,n?.voxOptions),n)}throw new Error(`${He}: unsupported extension ".${o}" (supported: obj, glb, gltf, vox)`)}function fs(e,n,o,t,r=.5,c=.5,a=.4){let s=4/(e[2]+3),i=Math.min(n,o)*a,l=n*r+e[0]*i*t*s,u=o*c-e[1]*i*s;return[l,u,e[2]]}function va(e){let[n,o,t]=[e.vertices[0],e.vertices[1],e.vertices[2]],r=o[0]-n[0],c=o[1]-n[1],a=o[2]-n[2],s=t[0]-n[0],i=t[1]-n[1],l=t[2]-n[2];return[c*l-a*i,a*s-r*l,r*i-c*s]}function Ca(e,n){let o=Math.hypot(e[0],e[1],e[2]),t=Math.hypot(n[0],n[1],n[2]);return o===0||t===0?1:(e[0]*n[0]+e[1]*n[1]+e[2]*n[2])/(o*t)}function ms(e,n){let o=`${e[0]},${e[1]},${e[2]}`,t=`${n[0]},${n[1]},${n[2]}`;return o<t?`${o}|${t}`:`${t}|${o}`}function Aa(e,n=0){if(n<=0){let a=new Set,s=[];for(let i of e){let l=[[0,1],[1,2],[2,0]];for(let[u,m]of l){let d=i.vertices[u],f=i.vertices[m],p=ms(d,f);if(a.has(p))continue;a.add(p);let g={from:d,to:f,weight:2};i.color&&(g.color=i.color),s.push(g)}}return s}let o=Math.cos(n*Math.PI/180),t=new Map,r=[[0,1],[1,2],[2,0]];for(let a of e){let s=va(a);for(let[i,l]of r){let u=a.vertices[i],m=a.vertices[l],d=ms(u,m),f=t.get(d);f?f.normals.push(s):t.set(d,{normals:[s],from:u,to:m,color:a.color})}}let c=[];for(let{normals:a,from:s,to:i,color:l}of t.values()){if(a.length<2){let m={from:s,to:i,weight:2};l&&(m.color=l),c.push(m);continue}let u=!1;e:for(let m=0;m<a.length;m++)for(let d=m+1;d<a.length;d++)if(Ca(a[m],a[d])<o){u=!0;break e}if(u){let m={from:s,to:i,weight:2};l&&(m.color=l),c.push(m)}}return c}function ds(e,n=0){return Aa(e,n)}0&&(module.exports={BASE_TILE,CAMERA_BACKFACE_CULL_EPS,DEFAULT_CAMERA_STATE,DEFAULT_PROJECTION,LoopOnce,LoopPingPong,LoopRepeat,QUAT_IDENTITY,VOXEL_CAMERA_CULL_AXIS_EPS,VOXEL_CAMERA_CULL_NORMAL_LIMIT,antiprismPolygons,arrowPolygons,axesHelperPolygons,bakeSolidTextureSampledPolygons,bakeSolidTextureSamples,bipyramidPolygons,buildSceneContext,cameraCullNormalGroups,cameraCullNormalGroupsFromPolygons,cameraCullNormalKey,cameraCullVisibleSignature,cameraFacingDepth,clampChannel,computeSceneBbox,computeShapeLighting,conePolygons,coverPlanarPolygons,createGlyphAnimationMixer,createIsometricCamera,cubePolygons,cuboctahedronPolygons,cullInteriorPolygons,cylinderPolygons,dedupeOverlappingPolygons,deltoidalHexecontahedronPolygons,deltoidalIcositetrahedronPolygons,disdyakisDodecahedronPolygons,disdyakisTriacontahedronPolygons,dodecahedronPolygons,eulerXYZFromQuat,findOverlappingPolygonDuplicates,formatColor,greatDodecahedronPolygons,greatIcosahedronPolygons,greatStellatedDodecahedronPolygons,icosahedronPolygons,icosidodecahedronPolygons,inverseRotateVec3,isAxisAlignedSurfaceNormal,isVoxelCameraCullableNormalGroups,loadMesh,mergePolygons,normalFacesCamera,normalizeInvertMultiplier,normalizePolygons,octahedronPolygons,optimizeMeshPolygons,parseColor,parseGltf,parseHexColor,parseMtl,parseObj,parsePureColor,parseRgbColor,parseVox,pentagonalHexecontahedronPolygons,pentagonalIcositetrahedronPolygons,pentakisDodecahedronPolygons,planePolygons,polygonCssSurfaceNormal,polygonFaces,polygonFacesCamera,prismPolygons,project,pyramidPolygons,quatFromAxisAngle,quatFromEulerXYZ,quatMultiply,resolveGeometry,rhombicDodecahedronPolygons,rhombicTriacontahedronPolygons,rhombicosidodecahedronPolygons,rhombicuboctahedronPolygons,ringPolygons,ringQuadPolygons,rotateVec3,shadeColor,smallStellatedDodecahedronPolygons,snubCubePolygons,snubDodecahedronPolygons,spherePolygons,tetrahedronPolygons,tetrakisHexahedronPolygons,torusPolygons,trapezohedronPolygons,triakisIcosahedronPolygons,triakisOctahedronPolygons,triakisTetrahedronPolygons,trianglesToFeatureEdges,truncatedCubePolygons,truncatedCuboctahedronPolygons,truncatedDodecahedronPolygons,truncatedIcosahedronPolygons,truncatedIcosidodecahedronPolygons,truncatedOctahedronPolygons,truncatedTetrahedronPolygons});
|