const U=Object.freeze(["_cad_edge_barycentric","_CAD_EDGE_BARYCENTRIC"]),P=Object.freeze(["_cad_edge_class","_CAD_EDGE_CLASS"]),W=Object.freeze([.72,.72,.72,1]),Y=1e-6;function G(){return{min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]}}function F(r,e,n,t){[e,n,t].every(Number.isFinite)&&(r.min[0]=Math.min(r.min[0],e),r.min[1]=Math.min(r.min[1],n),r.min[2]=Math.min(r.min[2],t),r.max[0]=Math.max(r.max[0],e),r.max[1]=Math.max(r.max[1],n),r.max[2]=Math.max(r.max[2],t))}function T(r){return!r?.min?.every(Number.isFinite)||!r?.max?.every(Number.isFinite)?{min:[0,0,0],max:[0,0,0]}:{min:[...r.min],max:[...r.max]}}function L(r){const e=r?.pbrMetallicRoughness?.baseColorFactor;return Array.isArray(e)?e:null}function $(r,e){return!Array.isArray(r)||!Array.isArray(e)?!1:e.every((n,t)=>Math.abs(Number(r[t]??(t===3?1:0))-n)<=Y)}function R(r){const e=r?.extras?.cadSourceColor;return e===!0||e===!1?e:null}function X(r){const e=r?.userData?.cadSourceColor;return e===!0||e===!1?e:null}function Z(r,e){return $(L(r),W)&&e?.color?.getHexString?.()==="dddddd"}function k(r,e,{rawMaterial:n=null,stepTopology:t=!1}={}){if(!e||!r?.color)return null;const a=X(r)??R(n);return a===!1||t&&a!==!0&&Z(n,r)?null:{rgb:[r.color.r,r.color.g,r.color.b],hex:`#${r.color.getHexString()}`,opacity:H(r,n)}}function H(r,e=null){const n=Number(r?.opacity);if(Number.isFinite(n))return Math.min(Math.max(n,0),1);const t=L(e)?.[3],a=Number(t);return Number.isFinite(a)?Math.min(Math.max(a,0),1):1}function j(r,e){if(Array.isArray(r)){const n=Number.isInteger(e?.materialIndex)?e.materialIndex:0;return r[n]||r[0]||null}return r||null}function q(r){return Number.isInteger(r?.materialIndex)?r.materialIndex:0}function J(r,e){return!Array.isArray(r)||r.length<=0?null:r[q(e)]||r[0]||null}function K(r){const e=r?.elements;return!Array.isArray(e)&&!(e instanceof Float32Array)?!1:[1,0,0,0,0,0,-1,0,0,1,0,0,0,0,0,1].every((t,a)=>Math.abs(Number(e[a])-t)<1e-6)}function Q(r,e){e?.updateWorldMatrix?.(!0,!0);const n=Array.isArray(e?.children)?e.children:[];return n.length!==1||!K(n[0]?.matrixWorld)?null:new r.Matrix4().copy(n[0].matrixWorld).invert()}function z(r){let e=r||null;for(;e;){const t=String(e.userData?.cadOccurrenceId||"").trim();if(t)return t;e=e.parent||null}const n=String(r?.name||"").trim();return/^o\d+(?:\.\d+)*$/.test(n)?n:""}function ee(r){let e=!1;return r?.traverse?.(n=>{e||(e=!!String(n?.userData?.cadOccurrenceId||"").trim())}),e}function re(r,e){const n=r.x*1e3,t=r.y*1e3,a=r.z*1e3;return e?{x:n,y:-a,z:t}:{x:n,y:t,z:a}}function D(r,e){return r?r.getX(e):e}function p(r,e){for(const n of e){const t=r?.getAttribute?.(n);if(t)return t}return null}function V(r,e,n){for(let t=0;t<3;t+=1){const a=D(e,n+t);if(a<0||a>=r.count)return!1}return!0}function ne(r,e,n,t){let a=0;for(let s=0;s0,t=Array.isArray(e?.parser?.json?.materials)?e.parser.json.materials:[],a=Q(r,e?.scene),s=!!e?.parser?.json?.extensions?.STEP_topology,g=!s&&!ee(e?.scene)&&!a,C=[],A=new Set;let l=0,I=0,f=!1;const u=new Map;e?.scene?.traverse?.(c=>{if(!c?.isMesh||!c.geometry)return;const h=z(c)||String(c?.name||`glb:${C.length}`).trim(),B=u.get(h)||0,v=Array.isArray(c.geometry.groups)&&c.geometry.groups.length?c.geometry.groups:[null];v.forEach((b,w)=>{const d=te(r,c,b,j(c.material,b),n,a,g,B+w,C.length,{rawMaterial:J(t,b),stepTopology:s});d&&(C.push(d),l+=d.vertexCount,I+=d.triangleCount*3,f||=!!(d.surfaceEdgeBarycentric&&d.surfaceEdgeClass),d.color&&A.add(d.color.toLowerCase()))}),u.set(h,B+v.length)});const y=new Float32Array(l*3),_=new Uint32Array(I),o=new Float32Array(l*3),M=f?new Float32Array(l*3):null,i=f?new Uint8Array(l*3):null,x=[],m={vertices:y,indices:_,normals:o,surfaceEdgeBarycentric:M,surfaceEdgeClass:i,bounds:G()},E={vertexOffset:0,indexOffset:0};for(const c of C)x.push(ae(r,c,m,E));const S=new Float32Array(0);return{vertices:y,indices:_,normals:o,surfaceEdgeBarycentric:M||new Float32Array(0),surfaceEdgeClass:i||new Uint8Array(0),colors:S,edge_indices:new Uint32Array(0),bounds:T(m.bounds),parts:x,has_source_colors:A.size>0,sourceColor:A.size===1?[...A][0]:""}}function ce(r,e){const n=new r;return new Promise((t,a)=>{n.parse(e,"",t,a)})}async function ie(r){const[e,{GLTFLoader:n}]=await Promise.all([import("./three.module-DJHaYUcg.js"),import("./GLTFLoader-B3ztFMBW.js")]),t=await ce(n,r);return oe(e,t)}function se(r){const e=[r?.vertices?.buffer,r?.indices?.buffer,r?.normals?.buffer,r?.colors?.buffer,r?.edge_indices?.buffer,r?.surfaceEdgeBarycentric?.buffer,r?.surfaceEdgeClass?.buffer,r?.guide_line_segments?.buffer].filter(n=>n instanceof ArrayBuffer&&n.byteLength>0);return[...new Set(e)]}const N=new Map;function le(r,e){return new Error(`Failed to fetch ${r}: ${e.status} ${e.statusText}`)}async function ue(r,e){const n=await fetch(r,{signal:e});if(!n.ok)throw le(r,n);return n.arrayBuffer()}self.addEventListener("message",async r=>{const e=r.data||{},n=e.id;if(!n)return;if(e.type==="cancel"){N.get(n)?.abort(),N.delete(n);return}if(e.type!=="loadGlb")return;const t=new AbortController;N.set(n,t);try{const a=await ue(e.url,t.signal),s=await ie(a);if(t.signal.aborted)return;self.postMessage({id:n,ok:!0,meshData:s},se(s))}catch(a){t.signal.aborted||self.postMessage({id:n,ok:!1,error:{name:a?.name||"Error",message:a instanceof Error?a.message:String(a)}})}finally{N.delete(n)}}); //# sourceMappingURL=glbMeshWorker-MCreI3ZZ.js.map