Files
cad-Integration/text-to-cad-main/skills/cad-viewer/scripts/viewer/dist/assets/glbMeshWorker-MCreI3ZZ.js
T
2026-07-22 13:48:46 +08:00

3 lines
8.1 KiB
JavaScript

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;s<t;s+=3)V(r,e,n+s)&&(a+=3);return a}function te(r,e,n,t,a,s,g,C=0,A=0,{rawMaterial:l=null,stepTopology:I=!1}={}){const f=e?.geometry,u=f?.getAttribute?.("position");if(!u||u.itemSize!==3||u.count<=0)return null;e.updateWorldMatrix?.(!0,!1);const y=e.matrixWorld?s?new r.Matrix4().multiplyMatrices(s,e.matrixWorld):new r.Matrix4().copy(e.matrixWorld):null,_=y?new r.Matrix3().getNormalMatrix(y):null,o=f.getAttribute("normal"),M=p(f,U),i=p(f,P),x=f.getIndex?.(),m=Math.max(0,Math.floor(Number(n?.start||0))),E=x?.count||u.count,S=Math.floor(Number(n?.count||E-m)),c=Math.max(0,Math.min(S,E-m)),h=c-c%3;if(h<=0)return null;const B=ne(u,x,m,h),v=Math.floor(B/3);if(B<=0||v<=0)return null;const b=k(t,a,{rawMaterial:l,stepTopology:I}),w=z(e),d=String(w||e?.name||e?.parent?.name||`glb:${A}`).trim(),O=w||`glb:${A}`;return{mesh:e,positions:u,normals:o,surfaceEdgeBarycentric:M,surfaceEdgeClass:i,indexAttribute:x,sourceStart:m,triangleVertexCount:h,matrixWorld:y,normalMatrix:_,convertYUpToCad:g,id:O,occurrenceId:O,primitiveIndex:Math.max(0,Math.floor(Number(C)||0)),name:d||O,label:d||O,color:b?.hex||"",opacity:b?b.opacity:1,hasSourceColors:!!b,vertexCount:B,triangleCount:v}}function ae(r,e,n,t){const a=G(),s=new r.Vector3,g=new r.Vector3,C=t.vertexOffset,A=Math.floor(t.indexOffset/3);let l=0;for(let u=0;u<e.triangleVertexCount;u+=3)if(V(e.positions,e.indexAttribute,e.sourceStart+u))for(let y=0;y<3;y+=1){const _=e.sourceStart+u+y,o=D(e.indexAttribute,_),M=C+l,i=M*3;s.set(e.positions.getX(o),e.positions.getY(o),e.positions.getZ(o)),e.matrixWorld&&s.applyMatrix4(e.matrixWorld);const x=re(s,e.convertYUpToCad),m=x.x,E=x.y,S=x.z;if(n.vertices[i]=m,n.vertices[i+1]=E,n.vertices[i+2]=S,F(a,m,E,S),F(n.bounds,m,E,S),e.normals?.itemSize===3&&o<e.normals.count){g.set(e.normals.getX(o),e.normals.getY(o),e.normals.getZ(o)),e.normalMatrix&&g.applyMatrix3(e.normalMatrix).normalize();const c=e.convertYUpToCad?{x:g.x,y:-g.z,z:g.y}:g;n.normals[i]=c.x,n.normals[i+1]=c.y,n.normals[i+2]=c.z}n.surfaceEdgeBarycentric&&e.surfaceEdgeBarycentric?.itemSize===3&&o<e.surfaceEdgeBarycentric.count&&(n.surfaceEdgeBarycentric[i]=e.surfaceEdgeBarycentric.getX(o),n.surfaceEdgeBarycentric[i+1]=e.surfaceEdgeBarycentric.getY(o),n.surfaceEdgeBarycentric[i+2]=e.surfaceEdgeBarycentric.getZ(o)),n.surfaceEdgeClass&&e.surfaceEdgeClass?.itemSize===3&&o<e.surfaceEdgeClass.count&&(n.surfaceEdgeClass[i]=e.surfaceEdgeClass.getX(o),n.surfaceEdgeClass[i+1]=e.surfaceEdgeClass.getY(o),n.surfaceEdgeClass[i+2]=e.surfaceEdgeClass.getZ(o)),n.indices[t.indexOffset+l]=M,l+=1}const I=Math.floor(l/3),f={id:e.id,occurrenceId:e.occurrenceId,primitiveIndex:e.primitiveIndex,name:e.name,label:e.label,nodeType:"part",color:e.color,opacity:e.opacity,hasSourceColors:e.hasSourceColors,bounds:T(a),vertexOffset:C,vertexCount:l,triangleOffset:A,triangleCount:I,edgeIndexOffset:0,edgeIndexCount:0};return t.vertexOffset+=l,t.indexOffset+=I*3,f}function oe(r,e){const n=Array.isArray(e?.parser?.json?.materials)&&e.parser.json.materials.length>0,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