brepjs-verify 0.25.0 → 0.27.0
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/CHANGELOG.md +52 -0
- package/README.md +5 -1
- package/dist/mcp/server.cjs +65 -0
- package/dist/mcp/server.js +65 -0
- package/dist/mcp/telemetry.d.ts +6 -0
- package/dist/sandbox/runProgram.d.ts +21 -0
- package/package.json +7 -1
- package/reference/llms-full.txt +4 -4
- package/viewer/dist/assets/{brepjs--Y77m6Ep.js → brepjs-CTRhaUQW.js} +2 -2
- package/viewer/dist/assets/{index-BryWZEsB.js → index-BfoFDXLd.js} +38 -38
- package/viewer/dist/assets/{kernelWorker-aIBoIbHI.js → kernelWorker-pKJGBWtg.js} +1 -1
- package/viewer/dist/index.html +1 -1
|
@@ -12,7 +12,7 @@ var e=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports);function
|
|
|
12
12
|
`)){let t=e.trim();if(t.startsWith(`v `)){let e=t.slice(2).trim().split(/\s+/);r.push(Number(e[0]),Number(e[1]),Number(e[2]))}else if(t.startsWith(`f `)){let e=t.slice(2).trim().split(/\s+/).map(e=>{let t=e.split(`/`)[0]??``,n=Number(t);return n>0?n-1:r.length/3+n});for(let t=1;t+1<e.length;t++)i.push(e[0]??0,e[t]??0,e[t+1]??0)}}return ZC(e,{vertProperties:Float32Array.from(r),triVerts:Uint32Array.from(i)})}function $C(e,t){let n=new Uint8Array(t),r=new TextDecoder().decode(n.subarray(0,Math.min(n.length,80))).trimStart().toLowerCase().startsWith(`solid`)&&nw(n),i=[];if(r){let e=new TextDecoder().decode(n).match(/vertex\s+(\S+)\s+(\S+)\s+(\S+)/g)??[];for(let t of e){let e=t.trim().split(/\s+/);i.push(Number(e[1]),Number(e[2]),Number(e[3]))}}else{let e=new DataView(t),n=e.getUint32(80,!0),r=84;for(let t=0;t<n;t++){r+=12;for(let t=0;t<3;t++)i.push(e.getFloat32(r,!0),e.getFloat32(r+4,!0),e.getFloat32(r+8,!0)),r+=12;r+=2}}let a=tw(i);return ZC(e,{vertProperties:Float32Array.from(a.vertices),triVerts:Uint32Array.from(a.indices)})}var ew=1e6;function tw(e){let t=[],n=[],r=new Map;for(let i=0;i+2<e.length;i+=3){let a=e[i]??0,o=e[i+1]??0,s=e[i+2]??0,c=`${Math.round(a*ew)},${Math.round(o*ew)},${Math.round(s*ew)}`,l=r.get(c);l===void 0&&(l=t.length/3,r.set(c,l),t.push(a,o,s)),n.push(l)}return{vertices:t,indices:n}}function nw(e){return e.length<84?!0:84+new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(80,!0)*50!==e.length}var rw=1e-6;function iw(e,t){let n=H(t);if(n.replayable)return YS(n,e)}function aw(e,t){let n=HC(t),r=Math.floor(n.triVerts.length/3),i=[];for(let t=0;t<r;t++){let[r,a,o]=KC(n,t),s=e.buildTriFace(GC(n,r),GC(n,a),GC(n,o));s&&i.push(s)}if(i.length===0)throw Error(`manifold: cannot export — shape has no triangles to facet`);return e.sewAndSolidify(i,rw)}function ow(e){let t=Ny(`B-rep export`),n=iw(t,e);return n===void 0?(console.warn(`manifold: exact B-rep unavailable (non-replayable op-graph); exporting faceted approximation`),{occt:t,brep:aw(t,e)}):{occt:t,brep:n}}function sw(e,t,n,r){let i=t.mesh(n,{tolerance:.01,angularTolerance:.5});return ZC(e,{vertProperties:Float32Array.from(i.vertices),triVerts:Uint32Array.from(i.triangles)},r)}var cw=1179937895,lw=2,uw=1313821514,dw=5130562,fw=5126,pw=5125,mw=5123,hw=5121,gw=34962,_w=34963,vw=4;function yw(e){return e+3&-4}function bw(e){let t=HC(e),n=t.numProp&&t.numProp>=3?t.numProp:3,r=Math.floor(t.vertProperties.length/n),i=t.triVerts.length,a=new Float32Array(r*3),o=1/0,s=1/0,c=1/0,l=-1/0,u=-1/0,d=-1/0;for(let e=0;e<r;e++){let r=t.vertProperties[e*n]??0,i=t.vertProperties[e*n+1]??0,f=t.vertProperties[e*n+2]??0;a[e*3]=r,a[e*3+1]=i,a[e*3+2]=f,r<o&&(o=r),i<s&&(s=i),f<c&&(c=f),r>l&&(l=r),i>u&&(u=i),f>d&&(d=f)}r===0&&(o=s=c=l=u=d=0);let f=Uint32Array.from(t.triVerts),p=a.byteLength,m=yw(p),h=m+f.byteLength,g={asset:{version:`2.0`,generator:`brepjs manifold kernel`},scene:0,scenes:[{nodes:[0]}],nodes:[{mesh:0}],meshes:[{primitives:[{attributes:{POSITION:0},indices:1,mode:vw}]}],accessors:[{bufferView:0,componentType:fw,count:r,type:`VEC3`,min:[o,s,c],max:[l,u,d]},{bufferView:1,componentType:pw,count:i,type:`SCALAR`}],bufferViews:[{buffer:0,byteOffset:0,byteLength:p,target:gw},{buffer:0,byteOffset:m,byteLength:f.byteLength,target:_w}],buffers:[{byteLength:h}]},_=new TextEncoder().encode(JSON.stringify(g)),v=yw(_.length),y=yw(h),b=20+v+8+y,x=new ArrayBuffer(b),S=new DataView(x),C=new Uint8Array(x);S.setUint32(0,cw,!0),S.setUint32(4,lw,!0),S.setUint32(8,b,!0);let w=12;S.setUint32(w,v,!0),S.setUint32(w+4,uw,!0),w+=8,C.set(_,w);for(let e=_.length;e<v;e++)C[w+e]=32;return w+=v,S.setUint32(w,y,!0),S.setUint32(w+4,dw,!0),w+=8,C.set(new Uint8Array(a.buffer,a.byteOffset,p),w),C.set(new Uint8Array(f.buffer,f.byteOffset,f.byteLength),w+m),x}function xw(e,t){let n=new DataView(t);if(n.getUint32(0,!0)!==cw)throw Error(`manifold: importGLB — not a binary glTF (bad magic)`);let r=n.getUint32(8,!0),i,a,o=12;for(;o<r;){let e=n.getUint32(o,!0),r=n.getUint32(o+4,!0),s=new Uint8Array(t,o+8,e);r===uw?i=JSON.parse(new TextDecoder().decode(s)):r===dw&&(a=s),o+=8+e}if(!i||typeof i!=`object`||!a)throw Error(`manifold: importGLB — missing JSON or BIN chunk`);let s=i,c=s.meshes?.[0]?.primitives[0],l=s.accessors??[],u=s.bufferViews??[];if(!c||c.attributes.POSITION===void 0)throw Error(`manifold: importGLB — no POSITION attribute`);let d=l[c.attributes.POSITION];if(!d)throw Error(`manifold: importGLB — invalid POSITION accessor`);let f=u[d.bufferView];if(!f)throw Error(`manifold: importGLB — invalid POSITION bufferView`);let p=new Float32Array(a.buffer.slice(a.byteOffset+(f.byteOffset??0),a.byteOffset+(f.byteOffset??0)+d.count*3*4)),m;if(c.indices!==void 0){let e=l[c.indices];if(!e)throw Error(`manifold: importGLB — invalid indices accessor`);let t=u[e.bufferView];if(!t)throw Error(`manifold: importGLB — invalid indices bufferView`);let n=e.componentType===pw?4:e.componentType===mw?2:+(e.componentType===hw);if(n===0)throw Error(`manifold: importGLB — unsupported index component type ${e.componentType}`);let r=a.byteOffset+(t.byteOffset??0),i=new DataView(a.buffer,r,e.count*n);m=new Uint32Array(e.count);for(let t=0;t<e.count;t++){let e=t*n;m[t]=n===4?i.getUint32(e,!0):n===2?i.getUint16(e,!0):i.getUint8(e)}}else m=Uint32Array.from({length:d.count},(e,t)=>t);return ZC(e,{vertProperties:p,triVerts:m},`importGLB`)}function Sw(e){return{exportSTL:(e,t)=>JC(e,t),exportOBJ:e=>YC(e),exportPLY:e=>XC(e),importSTL:t=>$C(e,typeof t==`string`?new TextEncoder().encode(t).buffer:t),importOBJ:t=>QC(e,t),exportSTEP:e=>Ny(`exportSTEP`).exportSTEP(e.map(e=>ow(e).brep)),exportIGES:e=>Ny(`exportIGES`).exportIGES(e.map(e=>ow(e).brep)),toBREP:e=>{let{occt:t,brep:n}=ow(e);return t.toBREP(n)},exportSTEPAssembly:(e,t)=>{let n=Ny(`exportSTEPAssembly`),r=e.map(e=>{let t={shape:ow(e.shape).brep,name:e.name};return e.color===void 0?t:{...t,color:e.color}});return n.exportSTEPAssembly(r,t)},createXCAFDocument:e=>{let t=Ny(`createXCAFDocument`),n=e.map(e=>{let t={shape:ow(e.shape).brep,name:e.name};return e.color===void 0?t:{...t,color:e.color}});return t.createXCAFDocument(n)},writeXCAFToSTEP:(e,t)=>Ny(`writeXCAFToSTEP`).writeXCAFToSTEP(e,t),exportSTEPConfigured:(e,t)=>{let n=Ny(`exportSTEPConfigured`),r=e.map(e=>{let t={shape:ow(e.shape).brep},n=e.name===void 0?t:{...t,name:e.name};return e.color===void 0?n:{...n,color:e.color}});return n.exportSTEPConfigured(r,t)},importSTEP:t=>{let n=Ny(`importSTEP`);return n.importSTEP(t).map(t=>sw(e,n,t,`importSTEP`))},importIGES:t=>{let n=Ny(`importIGES`);return n.importIGES(t).map(t=>sw(e,n,t,`importIGES`))},fromBREP:t=>{let n=Ny(`fromBREP`);return sw(e,n,n.fromBREP(t),`fromBREP`)},exportGLB:e=>bw(e),importGLB:t=>xw(e,t),export3MF:()=>{throw Error(`manifold: 3MF IO is unsupported on the mesh kernel; export GLB/STL/OBJ or use a B-rep kernel`)},import3MF:()=>{throw Error(`manifold: 3MF IO is unsupported on the mesh kernel; export GLB/STL/OBJ or use a B-rep kernel`)}}}function Cw(e){return V(e).getMesh()}function ww(e,t){let n=t*(e.numProp&&e.numProp>=3?e.numProp:3);return[e.vertProperties[n]??0,e.vertProperties[n+1]??0,e.vertProperties[n+2]??0]}function Tw(e,t){let n=e;if(n&&n.__manifoldSub&&n.occt){let e=My();if(!e)throw Error(`manifold: sub-shape geometry query requires a registered occt kernel`);return t(n.occt,e)}let r=Ay(e);if(!r)throw Error(`manifold: exact geometry query requires a manifold shape handle`);let i=My();if(!i)throw Error(`manifold: exact geometry query unsupported on manifold kernel; no B-rep kernel registered`);if(!r.node.replayable)throw Error(`manifold: exact geometry query unsupported; shape originates from a non-replayable op (raw mesh import or mesh boolean)`);let a=Py.get(r.node);return a===void 0&&(a=YS(r.node,i),Py.set(r.node,a)),t(a,i)}function Ew(e){let t=Ay(e);if(!t)return;let n=t.node;return n.op===`profileEdge`?n.params?.curve:void 0}function Dw(e){return{curveType:e=>{let t=Ew(e);return t?bb(t):AC(e)?e.curveType:Tw(e,(e,t)=>t.curveType(e))},curveParameters:e=>{let t=Ew(e);if(t){let e=xb(t);return[e.first,e.last]}return AC(e)?[0,e.length]:Tw(e,(e,t)=>t.curveParameters(e))},curvePointAtParam:(e,t)=>{let n=Ew(e);return n?Sb(n,t):AC(e)?jC(e,t):Tw(e,(e,n)=>n.curvePointAtParam(e,t))},curveTangent:(e,t)=>{let n=Ew(e);return n?{point:Sb(n,t),tangent:Cb(n,t)}:AC(e)?{point:jC(e,t),tangent:MC(e,t)}:Tw(e,(e,n)=>n.curveTangent(e,t))},curveIsClosed:e=>{let t=Ew(e);return t?Tb(t):Tw(e,(e,t)=>t.curveIsClosed(e))},curveIsPeriodic:e=>{let t=Ew(e);return t?Eb(t):Tw(e,(e,t)=>t.curveIsPeriodic(e))},curvePeriod:e=>{let t=Ew(e);return t?Db(t):Tw(e,(e,t)=>t.curvePeriod(e))},interpolatePoints:(e,t)=>Ny(`interpolatePoints`).interpolatePoints(e,t),approximatePoints:(e,t)=>Ny(`approximatePoints`).approximatePoints(e,t),curveDegreeElevate:(e,t)=>Tw(e,(e,n)=>n.curveDegreeElevate(e,t)),curveKnotInsert:(e,t,n)=>Tw(e,(e,r)=>r.curveKnotInsert(e,t,n)),curveKnotRemove:(e,t,n)=>Tw(e,(e,r)=>r.curveKnotRemove(e,t,n)),curveSplit:(e,t)=>Tw(e,(e,n)=>n.curveSplit(e,t)),createCurveAdaptor:e=>Tw(e,(e,t)=>t.createCurveAdaptor(e)),getBezierPenultimatePole:e=>Tw(e,(e,t)=>t.getBezierPenultimatePole(e)),getNurbsCurveData:e=>Tw(e,(e,t)=>t.getNurbsCurveData?.(e)??null),vertexPosition:e=>kC(e)?e.point:Ay(e)?ww(Cw(e),0):Tw(e,(e,t)=>t.vertexPosition(e)),surfaceType:e=>{if(bC(e))return`plane`;let t=Ay(e);return t&&t.node.op===`profileFace`?`plane`:Tw(e,(e,t)=>t.surfaceType(e))},uvBounds:e=>bC(e)?{uMin:0,uMax:1,vMin:0,vMax:1}:Tw(e,(e,t)=>t.uvBounds(e)),outerWire:e=>Tw(e,(e,t)=>t.outerWire(e)),surfaceNormal:(e,t,n)=>bC(e)?e.normal:Tw(e,(e,r)=>r.surfaceNormal(e,t,n)),pointOnSurface:(e,t,n)=>Tw(e,(e,r)=>r.pointOnSurface(e,t,n)),uvFromPoint:(e,t)=>Tw(e,(e,n)=>n.uvFromPoint(e,t)),projectPointOnFace:(e,t)=>Tw(e,(e,n)=>n.projectPointOnFace(e,t)),classifyPointOnFace:(e,t,n,r)=>Tw(e,(e,i)=>i.classifyPointOnFace(e,t,n,r)),classifyPointRobust:(e,t,n)=>Tw(e,(e,r)=>r.classifyPointRobust(e,t,n)),classifyPointWinding:(e,t,n)=>Tw(e,(e,r)=>r.classifyPointWinding(e,t,n)),approximateSurfaceLspia:(e,t,n,r,i,a,o,s,c)=>Ny(`approximateSurfaceLspia`).approximateSurfaceLspia(e,t,n,r,i,a,o,s,c),untrimFace:(e,t,n)=>Tw(e,(e,r)=>r.untrimFace(e,t,n)),getSurfaceCylinderData:e=>Tw(e,(e,t)=>t.getSurfaceCylinderData(e)),getSurfaceAxis:e=>Tw(e,(e,t)=>t.getSurfaceAxis(e)),reverseSurfaceU:e=>Ny(`reverseSurfaceU`).reverseSurfaceU(e),detectSmallFeatures:(e,t,n)=>Tw(e,(e,r)=>r.detectSmallFeatures(e,t,n)),recognizeFeatures:(e,t)=>Tw(e,(e,n)=>n.recognizeFeatures(e,t)),projectEdges:(e,t,n,r)=>Tw(e,(e,i)=>i.projectEdges(e,t,n,r)),getNurbsSurfaceData:e=>Tw(e,(e,t)=>t.getNurbsSurfaceData?.(e)??null)}}var Ow={hasErrors:!1,hasWarnings:!1,messages:[]};function kw(){return{modified:new Map,generated:new Map,deleted:new Set}}function Aw(e){return{shape:e,evolution:kw()}}function jw(e){return{shape:e,evolution:kw(),diagnostics:Ow}}function Mw(e){let t=pb(e),n=Gy(e),r=yS(e);return{translateWithHistory:(e,n,r,i)=>Aw(t.translate(e,n,r,i)),rotateWithHistory:(e,n,r,i,a,o)=>Aw(t.rotate(e,n,a,o)),mirrorWithHistory:(e,n,r)=>Aw(t.mirror(e,n,r)),scaleWithHistory:(e,n,r)=>Aw(t.scale(e,n,r)),generalTransformWithHistory:(e,n,r,i)=>Aw(t.generalTransform(e,n,r,i)),fuseWithHistory:(e,t,r,i,a)=>jw(n.fuse(e,t,a)),cutWithHistory:(e,t,r,i,a)=>jw(n.cut(e,t,a)),intersectWithHistory:(e,t,r,i,a)=>jw(n.intersect(e,t,a)),filletWithHistory:(e,t,n)=>Aw(r.fillet(e,t,n)),chamferWithHistory:(e,t,n)=>Aw(r.chamfer(e,t,n)),shellWithHistory:(e,t,n,i,a,o)=>Aw(r.shell(e,t,n,o)),thickenWithHistory:(e,t)=>Aw(r.thicken(e,t)),offsetWithHistory:(e,t,n,i,a)=>Aw(r.offset(e,t,a)),draftWithHistory:(e,t,n,i,a)=>Aw(r.draft(e,t,n,i,a)),applyComposedTransformWithHistory:(e,n)=>Aw(t.transform(e,n))}}function Nw(e){let t=e?.manifold;if(!t||typeof t.isEmpty==`function`&&t.isEmpty())return!1;if(typeof t.status==`function`){let e=t.status(),n=typeof e==`number`?e:Number(e?.value??e);if(!Number.isNaN(n)&&n!==0)return!1}return!0}function Pw(e){return{isValid:e=>Nw(e),isValidStrict:e=>Nw(e),healSolid:e=>Nw(e)?e:null,healFace:e=>e,healWire:e=>e,mergeCoincidentVertices:()=>0,removeDegenerateEdges:()=>0,fixFaceOrientations:()=>0,fixShape:e=>e,fixSelfIntersection:e=>e}}var Fw=.004;function Iw(e){return!!e&&typeof e==`object`&&e.__nativeC2d===!0}function Lw(e,t){return{__nativeC2d:!0,k:`line`,p1:e,p2:t}}function Rw(e,t,n,r,i){return{__nativeC2d:!0,k:`conic`,c:e,u:t,v:n,a0:r,a1:i}}function zw(e,[t,n]){return[e.a*t+e.b*n+e.tx,e.c*t+e.d*n+e.ty]}function Bw(e,[t,n]){return[e.a*t+e.b*n,e.c*t+e.d*n]}function Vw(e,t){return{a:e.a*t.a+e.b*t.c,b:e.a*t.b+e.b*t.d,c:e.c*t.a+e.d*t.c,d:e.c*t.b+e.d*t.d,tx:e.a*t.tx+e.b*t.ty+e.tx,ty:e.c*t.tx+e.d*t.ty+e.ty}}function Hw(e,t){return e.k===`line`?Lw(zw(t,e.p1),zw(t,e.p2)):e.k===`bezier`?{__nativeC2d:!0,k:`bezier`,pts:e.pts.map(e=>zw(t,e))}:Rw(zw(t,e.c),Bw(t,e.u),Bw(t,e.v),e.a0,e.a1)}function Uw(e,t){let n=e.map(e=>[e[0],e[1]]);for(let e=1;e<n.length;e++)for(let r=0;r<n.length-e;r++){let e=n[r]??[0,0],i=n[r+1]??[0,0];n[r]=[e[0]*(1-t)+i[0]*t,e[1]*(1-t)+i[1]*t]}return n[0]??[0,0]}function Ww(e,t){let n=Math.cos(t),r=Math.sin(t);return[e.c[0]+e.u[0]*n+e.v[0]*r,e.c[1]+e.u[1]*n+e.v[1]*r]}function Gw(e,t){let n=e.length-1;if(n<1)return[0,0];let r=[];for(let t=0;t<n;t++){let i=e[t]??[0,0],a=e[t+1]??[0,0];r.push([n*(a[0]-i[0]),n*(a[1]-i[1])])}return Uw(r,t)}function Kw(e){let t=Math.abs(e.a1-e.a0),n=Math.hypot(e.u[0],e.u[1]),r=Math.hypot(e.v[0],e.v[1]),i=Math.max(n,r);if(i<=Fw)return Math.max(2,Math.ceil(t/(2*Math.PI)*8));let a=2*Math.acos(Math.max(-1,1-Fw/i));return Math.max(2,Math.ceil(t/a))}function qw(e){if(e.k===`line`)return[e.p1,e.p2];if(e.k===`bezier`){let t=[];for(let n=0;n<=24;n++)t.push(Uw(e.pts,n/24));return t}let t=e.a1-e.a0,n=Kw(e),r=[];for(let i=0;i<=n;i++){let a=e.a0+t*i/n,o=Math.cos(a),s=Math.sin(a);r.push([e.c[0]+e.u[0]*o+e.v[0]*s,e.c[1]+e.u[1]*o+e.v[1]*s])}return r}function Jw(e,t,n){let r=e[0],i=e[1],a=t[0],o=t[1],s=n[0],c=n[1],l=2*(r*(o-c)+a*(c-i)+s*(i-o));if(Math.abs(l)<1e-12)return Lw(e,n);let u=((r*r+i*i)*(o-c)+(a*a+o*o)*(c-i)+(s*s+c*c)*(i-o))/l,d=((r*r+i*i)*(s-a)+(a*a+o*o)*(r-s)+(s*s+c*c)*(a-r))/l,f=[u,d],p=Math.hypot(r-u,i-d),m=e=>Math.atan2(e[1]-d,e[0]-u),h=m(e),g=m(t),_=m(n),v=e=>(e%(2*Math.PI)+2*Math.PI)%(2*Math.PI),y=v(g-h),b=v(_-h);return _=y<=b?h+b:h-v(h-_),Rw(f,[p,0],[0,p],h,_)}function Yw(e,t){let n={delete:()=>{},isEmpty:()=>!1};function r(e,...n){let r=t(),i=r?.[e];if(!i)throw Error(`manifold 2D: ${e} needs an OCCT kernel (none registered)`);return i.call(r,...n)}let i=e=>e;function a(e){let n=t();if(!n)throw Error(`manifold 2D: ${e} needs an OCCT kernel (none registered)`);return n}function o(e){if(!Iw(e))return e;let t=a(`toOcct`),n=i(e);if(n.k===`line`)return t.makeLine2d(n.p1[0],n.p1[1],n.p2[0],n.p2[1]);if(n.k===`bezier`)return t.makeBezier2d(n.pts);let r=Math.hypot(n.u[0],n.u[1]),o=Math.hypot(n.v[0],n.v[1]),s=Math.abs(Math.abs(n.a1-n.a0)-2*Math.PI)<1e-9,c=n.u[0]*n.v[1]-n.u[1]*n.v[0]>=0;if(Math.abs(r-o)<1e-9*Math.max(1,r)){if(s)return t.makeCircle2d(n.c[0],n.c[1],r,c);let e=Ww(n,n.a0),i=Ww(n,(n.a0+n.a1)/2),a=Ww(n,n.a1);return t.makeArc2dThreePoints(e[0],e[1],i[0],i[1],a[0],a[1])}let l=n.u[0]*n.v[0]+n.u[1]*n.v[1];if(Math.abs(l)<1e-9*Math.max(1,r*o)){let e=n.u[0]/r,i=n.u[1]/r;return s?t.makeEllipse2d(n.c[0],n.c[1],r,o,e,i,c):t.makeEllipseArc2d(n.c[0],n.c[1],r,o,n.a0,n.a1,e,i,c)}return t.makeBSpline2d(qw(n).map(e=>[e[0],e[1]]))}let s={createPoint2d:(e,t)=>({x:e,y:t}),createDirection2d:(e,t)=>({x:e,y:t}),createVector2d:(e,t)=>({x:e,y:t}),createAxis2d:(e,t,n,r)=>({px:e,py:t,dx:n,dy:r}),wrapCurve2dHandle:e=>e,createCurve2dAdaptor:e=>e,makeLine2d:(e,t,n,r)=>Lw([e,t],[n,r]),makeCircle2d:(e,t,n,r=!0)=>Rw([e,t],[n,0],r?[0,n]:[0,-n],0,2*Math.PI),makeArc2dThreePoints:(e,t,n,r,i,a)=>Jw([e,t],[n,r],[i,a]),makeArc2dTangent:(e,t,n,r,i,a)=>{let o=Math.hypot(n,r)||1,s=-r/o,c=n/o,l=[i-e,a-t],u=s*l[0]+c*l[1];if(Math.abs(u)<1e-12)return Lw([e,t],[i,a]);let d=(l[0]*l[0]+l[1]*l[1])/(2*u),f=e+s*d,p=t+c*d,m=Math.hypot(e-f,t-p),h=Math.atan2(t-p,e-f),g=Math.atan2(a-p,i-f);s*n+c*r;let _=e=>(e%(2*Math.PI)+2*Math.PI)%(2*Math.PI),v=[-(t-p),e-f];return g=v[0]*n+v[1]*r>=0?h+_(g-h):h-_(h-g),Rw([f,p],[m,0],[0,m],h,g)},makeEllipse2d:(e,t,n,r,i=1,a=0,o=!0)=>{let s=Math.hypot(i,a)||1,c=i/s*n,l=a/s*n,u=-a/s*r*(o?1:-1),d=i/s*r*(o?1:-1);return Rw([e,t],[c,l],[u,d],0,2*Math.PI)},makeEllipseArc2d:(e,t,n,r,i,a,o=1,s=0,c=!0)=>{let l=Math.hypot(o,s)||1,u=o/l*n,d=s/l*n,f=-s/l*r*(c?1:-1),p=o/l*r*(c?1:-1);return Rw([e,t],[u,d],[f,p],i,a)},makeBezier2d:e=>({__nativeC2d:!0,k:`bezier`,pts:e.map(e=>[e[0],e[1]])}),evaluateCurve2d:(e,t)=>{let n=i(e);if(n.k===`line`){let e=n.p2[0]-n.p1[0],r=n.p2[1]-n.p1[1],i=Math.hypot(e,r)||1;return[n.p1[0]+e*t/i,n.p1[1]+r*t/i]}return n.k===`bezier`?Uw(n.pts,t):[n.c[0]+n.u[0]*Math.cos(t)+n.v[0]*Math.sin(t),n.c[1]+n.u[1]*Math.cos(t)+n.v[1]*Math.sin(t)]},evaluateCurve2dD1:(e,t)=>{let n=i(e);if(n.k===`line`){let e=n.p2[0]-n.p1[0],r=n.p2[1]-n.p1[1],i=Math.hypot(e,r)||1;return{point:[n.p1[0]+e*t/i,n.p1[1]+r*t/i],tangent:[e/i,r/i]}}if(n.k===`bezier`)return{point:Uw(n.pts,t),tangent:Gw(n.pts,t)};let r=Math.cos(t),a=Math.sin(t);return{point:[n.c[0]+n.u[0]*r+n.v[0]*a,n.c[1]+n.u[1]*r+n.v[1]*a],tangent:[-n.u[0]*a+n.v[0]*r,-n.u[1]*a+n.v[1]*r]}},getCurve2dBounds:e=>{let t=i(e);return t.k===`conic`?{first:t.a0,last:t.a1}:t.k===`line`?{first:0,last:Math.hypot(t.p2[0]-t.p1[0],t.p2[1]-t.p1[1])}:{first:0,last:1}},getCurve2dType:e=>{let t=i(e);return t.k===`line`?`LINE`:t.k===`bezier`?`BEZIER`:`CIRCLE`},reverseCurve2d:e=>{let t=i(e);if(t.k===`line`){let e=t.p1;t.p1=t.p2,t.p2=e}else if(t.k===`bezier`)t.pts.reverse();else{let e=t.a0;t.a0=t.a1,t.a1=e}},copyCurve2d:e=>structuredClone(i(e)),trimCurve2d:(e,t,n)=>{let r=i(e);if(r.k===`conic`)return Rw(r.c,r.u,r.v,t,n);if(r.k===`line`){let e=r.p2[0]-r.p1[0],i=r.p2[1]-r.p1[1],a=Math.hypot(e,i)||1;return Lw([r.p1[0]+e*t/a,r.p1[1]+i*t/a],[r.p1[0]+e*n/a,r.p1[1]+i*n/a])}return structuredClone(r)},createIdentityGTrsf2d:()=>({a:1,b:0,c:0,d:1,tx:0,ty:0}),createTranslationGTrsf2d:(e,t)=>({a:1,b:0,c:0,d:1,tx:e,ty:t}),createRotationGTrsf2d:(e,t,n)=>{let r=Math.cos(e),i=Math.sin(e);return{a:r,b:-i,c:i,d:r,tx:t-(r*t-i*n),ty:n-(i*t+r*n)}},createScaleGTrsf2d:(e,t,n)=>({a:e,b:0,c:0,d:e,tx:t-e*t,ty:n-e*n}),createMirrorGTrsf2d:(e,t,n,r=0,i=0,a=1,o=0)=>{if(n===`point`)return{a:-1,b:0,c:0,d:-1,tx:2*e,ty:2*t};let s=Math.hypot(a,o)||1,c=a/s,l=o/s,u=c*c-l*l,d=2*c*l;return{a:u,b:d,c:d,d:-u,tx:r-(u*r+d*i),ty:i-(d*r-u*i)}},createAffinityGTrsf2d:(e,t,n,r,i)=>{let a=Math.hypot(n,r)||1,o=n/a,s=r/a,c=-s,l=o,u=o*o+i*c*c,d=o*s+i*c*l,f=s*o+i*l*c,p=s*s+i*l*l;return{a:u,b:d,c:f,d:p,tx:e-(u*e+d*t),ty:t-(f*e+p*t)}},setGTrsf2dTranslationPart:(e,t,n)=>{let r=e;r.tx=t,r.ty=n},multiplyGTrsf2d:(e,t)=>{let n=Vw(e,t);Object.assign(e,n)},transformCurve2dGeneral:(e,t)=>Hw(i(e),t),translateCurve2d:(e,t,n)=>Hw(i(e),{a:1,b:0,c:0,d:1,tx:t,ty:n}),rotateCurve2d:(e,t,n,r)=>{let a=Math.cos(t),o=Math.sin(t);return Hw(i(e),{a,b:-o,c:o,d:a,tx:n-(a*n-o*r),ty:r-(o*n+a*r)})},scaleCurve2d:(e,t,n,r)=>Hw(i(e),{a:t,b:0,c:0,d:t,tx:n-t*n,ty:r-t*r}),mirrorCurve2dAtPoint:(e,t,n)=>Hw(i(e),{a:-1,b:0,c:0,d:-1,tx:2*t,ty:2*n}),mirrorCurve2dAcrossAxis:(e,t,n,r,a)=>{let o=Math.hypot(r,a)||1,s=r/o,c=a/o,l=s*s-c*c,u=2*s*c;return Hw(i(e),{a:l,b:u,c:u,d:-l,tx:t-(l*t+u*n),ty:n-(u*t-l*n)})},affinityTransform2d:(e,t,n,r,a,o)=>{let s=Math.hypot(r,a)||1,c=r/s,l=a/s,u=-l,d=c,f=c*c+o*u*u,p=c*l+o*u*d,m=l*c+o*d*u,h=l*l+o*d*d;return Hw(i(e),{a:f,b:p,c:m,d:h,tx:t-(f*t+p*n),ty:n-(m*t+h*n)})},createBoundingBox2d:()=>({min:[1/0,1/0],max:[-1/0,-1/0]}),addCurveToBBox2d:(e,t)=>{let n=e,r;if(Iw(t))r=qw(i(t));else{let e=a(`addCurveToBBox2d`),{first:n,last:i}=e.getCurve2dBounds(t);r=[];for(let a=0;a<=32;a++)r.push(e.evaluateCurve2d(t,n+(i-n)*a/32))}for(let[e,t]of r)e<n.min[0]&&(n.min[0]=e),t<n.min[1]&&(n.min[1]=t),e>n.max[0]&&(n.max[0]=e),t>n.max[1]&&(n.max[1]=t)},getBBox2dBounds:e=>{let t=e;return{xMin:t.min[0],yMin:t.min[1],xMax:t.max[0],yMax:t.max[1]}},mergeBBox2d:(e,t)=>{let n=e,r=t;n.min[0]=Math.min(n.min[0],r.min[0]),n.min[1]=Math.min(n.min[1],r.min[1]),n.max[0]=Math.max(n.max[0],r.max[0]),n.max[1]=Math.max(n.max[1],r.max[1])},isBBox2dOut:(e,t)=>{let n=e,r=t;return n.max[0]<r.min[0]||n.min[0]>r.max[0]||n.max[1]<r.min[1]||n.min[1]>r.max[1]},isBBox2dOutPoint:(e,t,n)=>{let r=e;return t<r.min[0]||t>r.max[0]||n<r.min[1]||n>r.max[1]},getCurve2dCircleData:e=>{let t=i(e);if(t.k!==`conic`)return null;let n=Math.hypot(t.u[0],t.u[1]),r=Math.hypot(t.v[0],t.v[1]);return Math.abs(n-r)>1e-6?null:{cx:t.c[0],cy:t.c[1],radius:n,isDirect:!0}},liftCurve2dToPlane:(e,t,r,a)=>{let o=r[0],s=r[1],c=r[2],l=a[0],u=a[1],d=a[2],f=s*d-c*u,p=c*l-o*d,m=o*u-s*l;return ky(n,B(`profileEdge`,{pts:qw(i(e)).map(([e,n])=>[t[0]+l*e+f*n,t[1]+u*e+p*n,t[2]+d*e+m*n])},[]))},makeBSpline2d:(e,t)=>a(`makeBSpline2d`).makeBSpline2d(e,t),offsetCurve2d:(e,t)=>a(`offsetCurve2d`).offsetCurve2d(o(e),t),intersectCurves2d:(e,t,n)=>a(`intersectCurves2d`).intersectCurves2d(o(e),o(t),n),projectPointOnCurve2d:(e,t,n)=>a(`projectPointOnCurve2d`).projectPointOnCurve2d(o(e),t,n),distanceBetweenCurves2d:(e,t,n,r,i,s)=>a(`distanceBetweenCurves2d`).distanceBetweenCurves2d(o(e),o(t),n,r,i,s),approximateCurve2dAsBSpline:(e,t,n,r)=>a(`approximateCurve2dAsBSpline`).approximateCurve2dAsBSpline(o(e),t,n,r),decomposeBSpline2dToBeziers:e=>a(`decomposeBSpline2dToBeziers`).decomposeBSpline2dToBeziers(o(e)),serializeCurve2d:e=>a(`serializeCurve2d`).serializeCurve2d(o(e)),deserializeCurve2d:e=>a(`deserializeCurve2d`).deserializeCurve2d(e),splitCurve2d:(e,t)=>a(`splitCurve2d`).splitCurve2d(o(e),t),getCurve2dEllipseData:e=>a(`getCurve2dEllipseData`).getCurve2dEllipseData(o(e)),getCurve2dBezierPoles:e=>a(`getCurve2dBezierPoles`).getCurve2dBezierPoles(o(e)),getCurve2dBezierDegree:e=>a(`getCurve2dBezierDegree`).getCurve2dBezierDegree(o(e)),getCurve2dBSplineData:e=>a(`getCurve2dBSplineData`).getCurve2dBSplineData(o(e)),buildEdgeOnSurface:(e,t)=>a(`buildEdgeOnSurface`).buildEdgeOnSurface(o(e),t),extractSurfaceFromFace:e=>a(`extractSurfaceFromFace`).extractSurfaceFromFace(e),extractCurve2dFromEdge:(e,t)=>a(`extractCurve2dFromEdge`).extractCurve2dFromEdge(e,t),buildCurves3d:e=>{a(`buildCurves3d`).buildCurves3d(e)},fixWireOnFace:(e,t,n)=>a(`fixWireOnFace`).fixWireOnFace(e,t,n),fillSurface:(e,t)=>a(`fillSurface`).fillSurface(e,t)};for(let e of[`evaluateCurve2d`,`evaluateCurve2dD1`,`getCurve2dBounds`,`getCurve2dType`,`reverseCurve2d`,`copyCurve2d`,`trimCurve2d`,`transformCurve2dGeneral`,`translateCurve2d`,`rotateCurve2d`,`scaleCurve2d`,`mirrorCurve2dAtPoint`,`mirrorCurve2dAcrossAxis`,`affinityTransform2d`,`getCurve2dCircleData`,`liftCurve2dToPlane`]){let t=s[e];t&&(s[e]=((n,...i)=>Iw(n)?t(n,...i):r(e,n,...i)))}return s}var Xw=`createPoint2d.createDirection2d.createVector2d.createAxis2d.wrapCurve2dHandle.createCurve2dAdaptor.makeLine2d.makeCircle2d.makeArc2dThreePoints.makeArc2dTangent.makeEllipse2d.makeEllipseArc2d.makeBezier2d.makeBSpline2d.evaluateCurve2d.evaluateCurve2dD1.getCurve2dBounds.getCurve2dType.trimCurve2d.reverseCurve2d.copyCurve2d.offsetCurve2d.translateCurve2d.rotateCurve2d.scaleCurve2d.mirrorCurve2dAtPoint.mirrorCurve2dAcrossAxis.affinityTransform2d.createIdentityGTrsf2d.createAffinityGTrsf2d.createTranslationGTrsf2d.createMirrorGTrsf2d.createRotationGTrsf2d.createScaleGTrsf2d.setGTrsf2dTranslationPart.multiplyGTrsf2d.transformCurve2dGeneral.intersectCurves2d.projectPointOnCurve2d.distanceBetweenCurves2d.approximateCurve2dAsBSpline.decomposeBSpline2dToBeziers.createBoundingBox2d.addCurveToBBox2d.getBBox2dBounds.mergeBBox2d.isBBox2dOut.isBBox2dOutPoint.getCurve2dCircleData.getCurve2dEllipseData.getCurve2dBezierPoles.getCurve2dBezierDegree.getCurve2dBSplineData.serializeCurve2d.deserializeCurve2d.splitCurve2d.liftCurve2dToPlane.buildEdgeOnSurface.extractSurfaceFromFace.extractCurve2dFromEdge.buildCurves3d.fixWireOnFace.fillSurface`.split(`.`);function Zw(e){let t=My();if(!t)throw Error(`manifold: ${e} unsupported on manifold kernel; no B-rep kernel registered`);return t}function Qw(e){let t={};for(let e of Xw)t[e]=(...t)=>Zw(e)[e](...t);let n=Yw(e,()=>My());return Object.assign(t,n),t}function $w(e){return{sketchNew:()=>Ey(`sketchNew`),sketchAddPoint:()=>Ey(`sketchAddPoint`),sketchAddArc:()=>Ey(`sketchAddArc`),sketchAddConstraint:()=>Ey(`sketchAddConstraint`),sketchSolve:()=>Ey(`sketchSolve`),sketchDof:()=>Ey(`sketchDof`)}}function eT(e){return{projectEdges:()=>Ey(`projectEdges`)}}function tT(e){return{dispose(e){let t=Ay(e);if(t){let e=Py.get(t.node);e!==void 0&&(My()?.dispose(e),Py.delete(t.node))}(e?.manifold)?.delete?.()},executeBatch:()=>Ey(`executeBatch`),checkpoint:()=>Ey(`checkpoint`),checkpointCount:()=>0,restoreCheckpoint:()=>Ey(`restoreCheckpoint`),discardCheckpoint:()=>Ey(`discardCheckpoint`)}}var nT={draft:30,standard:10,fine:3},rT=class{oc;kernelId=`manifold`;capabilities={exact:!1,brepExport:!1,exactMeasurement:!1,tessellationModel:`build-time`};setQuality(e){let t=this.oc;t.setCircularSegments?.(0),t.setMinCircularEdgeLength?.(0),t.setMinCircularAngle?.(nT[e])}constructor(e){this.oc=e,Object.assign(this,By(e),Gy(e),pb(e),bx(e),Kx(e),yS(e),DS(e),_C(e),VC(e),Sw(e),Dw(e),Mw(e),Pw(e),Qw(e),$w(e),eT(e),tT(e))}};function iT(e){return`projectEdges`in e}function aT(e){return`sketchNew`in e&&`sketchDof`in e}var oT=new Map,sT=null,cT=null;function lT(e){uT(`manifold`,new rT(e))}function uT(e,t){oT.set(e,t),sT||=e,e===sT&&(cT=t)}function U(e){if(!e&&cT)return cT;let t=e??sT;if(!t)throw Error(`brepjs kernel not initialized. Call initFromOC() or registerKernel() before using the library.`);let n=oT.get(t);if(!n)throw Error(`brepjs: kernel '${t}' is not registered.`);return n}function dT(e){let t=U(e);if(!xo(t))throw Error(`brepjs: current kernel does not support 2D operations.`);return t}function fT(){return sT}function pT(e,t){let n=sT;sT=e,cT=oT.get(e)??null;try{let e=t();if(e instanceof Promise)throw Error(`withKernel() callback returned a Promise. Async code must use getKernel(id) directly — the kernel override is restored synchronously in finally.`);return e}finally{sT=n,cT=n?oT.get(n)??null:null}}function mT(e){return U(e).capabilities}function hT(e,t){let n=vo();try{bo(e),U().setQuality?.(e);let n=t();if(n instanceof Promise)throw Error(`withQuality() callback returned a Promise. Async code must read currentQuality()/getKernel() directly.`);return n}finally{bo(n),U().setQuality?.(n)}}var gT=new Map;function _T(e,t){gT.set(e,t)}function vT(e){return gT.get(e)}function yT(e,t){let n=gT.get(e);if(!n)throw Error(`withTier: no tier registered for "${e}". Call registerKernelTier("${e}", { kernel, quality }) first.`);return pT(n.kernel,()=>hT(n.quality,t))}function bT(e){Lo(),Zc(),Ao(),Dc(),Oc(),Uc(),Wc();let t=new Pf(e);uT(`occt`,t),sT=`occt`,cT=t}function xT(){let e=U(),t=e.makeBox(1,1,1);try{e.dispose(t)}catch{}}async function ST(){if(sT)return sT;try{let{OcctKernel:e}=await import(`occt-wasm`),t=await e.init();return uT(`occt-wasm`,ja.fromKernel(t)),`occt-wasm`}catch{}try{return bT(await(await import(`brepjs-opencascade`)).default()),`occt`}catch{}try{let e=await import(`brepkit-wasm`);return typeof e.default==`function`&&await e.default(),uT(`brepkit`,new Ty(new e.BrepKernel)),`brepkit`}catch{}throw Error(`brepjs: no kernel package found. Install one of:
|
|
13
13
|
npm install occt-wasm (recommended, default)
|
|
14
14
|
npm install brepjs-opencascade
|
|
15
|
-
npm install brepkit-wasm`)}function CT(){var e=typeof SuppressedError==`function`?SuppressedError:function(e,t){var n=Error();return n.name=`SuppressedError`,n.error=e,n.suppressed=t,n},t={},n=[];function r(e,t){if(t!=null){if(Object(t)!==t)throw TypeError(`using declarations can only be used with objects, functions, null, or undefined.`);if(e)var r=t[Symbol.asyncDispose||Symbol.for(`Symbol.asyncDispose`)];if(r===void 0&&(r=t[Symbol.dispose||Symbol.for(`Symbol.dispose`)],e))var i=r;if(typeof r!=`function`)throw TypeError(`Object is not disposable.`);i&&(r=function(){try{i.call(t)}catch(e){return Promise.reject(e)}}),n.push({v:t,d:r,a:e})}else e&&n.push({d:t,a:e});return t}return{e:t,u:r.bind(null,!1),a:r.bind(null,!0),d:function(){var r,i=this.e,a=0;function o(){for(;r=n.pop();)try{if(!r.a&&a===1)return a=0,n.push(r),Promise.resolve().then(o);if(r.d){var e=r.d.call(r.v);if(r.a)return a|=2,Promise.resolve(e).then(o,s)}else a|=1}catch(e){return s(e)}if(a===1)return i===t?Promise.resolve():Promise.reject(i);if(i!==t)throw i}function s(n){return i=i===t?n:new e(n,i),o()}return o()}}}var wT=Symbol;wT.dispose??=Symbol.for(`Symbol.dispose`),wT.asyncDispose??=Symbol.for(`Symbol.asyncDispose`);var TT=globalThis;TT.FinalizationRegistry||=(console.warn(`brepjs: FinalizationRegistry unavailable — garbage collection will not work`),class{register(e,t,n){}unregister(e){return!1}});var ET={liveHandles:0,peakHandles:0,gcCollected:0,scopeEnters:0,scopeExits:0};function DT(){return{...ET}}function OT(){ET.liveHandles=0,ET.peakHandles=0,ET.gcCollected=0,ET.scopeEnters=0,ET.scopeExits=0}function kT(){ET.liveHandles++,ET.liveHandles>ET.peakHandles&&(ET.peakHandles=ET.liveHandles)}function AT(){ET.liveHandles--}function jT(){ET.gcCollected++,ET.liveHandles--}var MT=new FinalizationRegistry(e=>{jT();try{e.delete()}catch{}});function NT(e){let t=!1,n=()=>{if(!t){t=!0,AT(),MT.unregister(r);try{e.delete()}catch{}}},r={get wrapped(){if(t)throw Error(`Shape handle has been disposed`);return e},get disposed(){return t},[Symbol.dispose](){n()},delete(){n()}};return kT(),MT.register(r,e,r),r}function PT(e){let t=!1,n={get value(){if(t)throw Error(`kernel handle has been disposed`);return e},get disposed(){return t},[Symbol.dispose](){if(!t){t=!0,AT(),MT.unregister(n);try{e.delete()}catch{}}}};return kT(),MT.register(n,e,n),n}var FT=class{handles=[];constructor(){ET.scopeEnters++}register(e){return this.handles.push(()=>{try{e.delete()}catch{}}),e}track(e){return this.handles.push(()=>{try{e[Symbol.dispose]()}catch{}}),e}[Symbol.dispose](){ET.scopeExits++;for(let e=this.handles.length-1;e>=0;e--)this.handles[e]?.();this.handles.length=0}};function IT(e){try{var t=CT();return e(t.u(new FT))}catch(e){t.e=e}finally{t.d()}}function LT(e,t){MT.register(e,t,t)}function RT(e){MT.unregister(e)}function zT(e){try{var t=CT();return e(t.u(new FT))}catch(e){t.e=e}finally{t.d()}}async function BT(e){try{var t=CT();return await e(t.u(new FT))}catch(e){t.e=e}finally{t.d()}}function VT(e){return!e.disposed}function HT(e){return e.__is2D!==!0}function UT(e){return e.__is2D===!0}function WT(e){if(!HT(e))throw Error(`Expected 3D shape, got 2D`);return e}function GT(e){if(!UT(e))throw Error(`Expected 2D shape, got 3D`);return e}var KT=new WeakMap;function qT(e,t){KT.set(e,t)}function JT(e,t){let n=KT.get(t);if(n!==void 0)return n;let r=e.shapeType(t);return KT.set(t,r),r}function YT(e){return JT(U(),e.wrapped)}function XT(e){return U().curveIsClosed(e.wrapped)}function ZT(e){return U().isValid(e.wrapped)}function QT(e){let t=U();if(!t.isValid(e.wrapped))return!1;let n=t.isValidStrict?.bind(t)??t.isValid.bind(t);try{let r=t.solidFromShell(e.wrapped),i=n(r);try{t.dispose(r)}catch{}return i}catch{return!1}}function $T(e){return U().isValid(e.wrapped)}function eE(e){return XT(e)?O(e):k(`Wire is not closed: start and end points do not coincide`)}function tE(e){return ZT(e)?O(e):k(`Face orientation is inconsistent or face is invalid`)}function nE(e){return QT(e)?O(e):k(`Shell is not manifold: has free edges or is invalid`)}function rE(e){return $T(e)?O(e):k(`Solid failed BRepCheck validation`)}function iE(e){return U().surfaceType(e.wrapped)===`plane`}function aE(e){let t=U(),n=n=>{try{let r=t.makeFace(e.wrapped,n),i=t.surfaceType(r);try{t.dispose(r)}catch{}return i===`plane`}catch{return!1}};return n(!0)?!0:n(!1)}function oE(e){return iE(e)?O(e):k(`Face is not planar: underlying surface is not a geometric plane`)}function sE(e){return aE(e)?O(e):k(`Wire is not planar: edges do not lie in a common plane`)}function cE(e,t){return t===`2D`&&(e.__is2D=!0),e}function lE(e,t){return cE(NT(e),t)}function uE(e,t){return cE(NT(e),t)}function dE(e,t){return cE(NT(e),t)}function fE(e,t){return cE(NT(e),t)}function pE(e){return cE(NT(e))}function mE(e){return cE(NT(e))}function hE(e){return cE(NT(e))}function gE(e,t){return cE(NT(e),t)}function _E(e){return YT(e)===`vertex`}function vE(e){return YT(e)===`edge`}function yE(e){return YT(e)===`wire`}function bE(e){return YT(e)===`face`}function xE(e){return YT(e)===`shell`}function SE(e){return YT(e)===`solid`}function CE(e){return YT(e)===`compound`}function wE(e){let t=YT(e);return t===`shell`||t===`solid`||t===`compsolid`?!0:t===`compound`?HT(e):!1}function TE(e){let t=YT(e);return t===`edge`||t===`wire`}function W(e,t){let n=U(),r=JT(n,e),i=n.downcast(e,r);return r===`vertex`?lE(i,t):r===`edge`?uE(i,t):r===`wire`?dE(i,t):r===`face`?fE(i,t):r===`shell`?pE(i):r===`solid`?mE(i):r===`compsolid`?hE(i):gE(i,t)}function EE(e){return W(e)}function DE(e,t,n){qT(e,t);let r=U().downcast(e,t);return t===`vertex`?lE(r,n):t===`edge`?uE(r,n):t===`wire`?dE(r,n):t===`face`?fE(r,n):t===`shell`?pE(r):t===`solid`?mE(r):t===`compsolid`?hE(r):gE(r,n)}function OE(e,t,n,r,i){let a={kind:e,code:t,message:n,cause:r};return i?{...a,suggestion:i}:a}var kE={KERNEL_OPERATION:(e,t,n,r)=>OE(`KERNEL_OPERATION`,e,t,n,r),VALIDATION:(e,t,n,r)=>OE(`VALIDATION`,e,t,n,r),TYPE_CAST:(e,t,n,r)=>OE(`TYPE_CAST`,e,t,n,r),SKETCHER_STATE:(e,t,n,r)=>OE(`SKETCHER_STATE`,e,t,n,r),MODULE_INIT:(e,t,n,r)=>OE(`MODULE_INIT`,e,t,n,r),COMPUTATION:(e,t,n,r)=>OE(`COMPUTATION`,e,t,n,r),IO:(e,t,n,r)=>OE(`IO`,e,t,n,r),QUERY:(e,t,n,r)=>OE(`QUERY`,e,t,n,r),UNSUPPORTED:(e,t,n,r)=>OE(`UNSUPPORTED`,e,t,n,r)};function AE(e,t,n,r=`KERNEL_OPERATION`){try{return O(W(e()))}catch(e){let i=e instanceof Error?e.message:String(e),a=r===`KERNEL_OPERATION`?oo(i):i,o=ao(t);return k(kE[r](t,`${n}: ${a}`,e,o))}}function jE(e,t,n,r=`KERNEL_OPERATION`){try{return O(e())}catch(e){let i=e instanceof Error?e.message:String(e),a=r===`KERNEL_OPERATION`?oo(i):i,o=ao(t);return k(kE[r](t,`${n}: ${a}`,e,o))}}function ME(e,t,n,r=`KERNEL_OPERATION`){try{var i=CT();let a=i.u(new FT);return AE(()=>e(a),t,n,r)}catch(e){i.e=e}finally{i.d()}}function NE(e,t){let n=U().iterShapes(e,t),r=Array(n.length);for(let e=0;e<n.length;e++)r[e]=DE(n[e],t);return r}var PE=new WeakMap;function FE(e){let t=PE.get(e.wrapped);return t||(t={},PE.set(e.wrapped,t)),t}function IE(e){return PE.get(e.wrapped)}function LE(e){PE.delete(e.wrapped)}function RE(e){let t=FE(e);if(t.edges)return t.edges;let n=NE(e.wrapped,`edge`);return t.edges=n,n}function zE(e){let t=FE(e);if(t.faces)return t.faces;let n=NE(e.wrapped,`face`);return t.faces=n,n}function BE(e){let t=FE(e);if(t.wires)return t.wires;let n=NE(e.wrapped,`wire`);return t.wires=n,n}function VE(e){let t=FE(e);if(t.vertices)return t.vertices;let n=NE(e.wrapped,`vertex`);return t.vertices=n,n}function HE(e){let t=FE(e);if(t.solids)return t.solids;let n=NE(e.wrapped,`solid`);return t.solids=n,n}function UE(e){let t=FE(e);if(t.shells)return t.shells;let n=NE(e.wrapped,`shell`);return t.shells=n,n}function WE(e){let t=FE(e);if(t.compSolids)return t.compSolids;let n=NE(e.wrapped,`compsolid`);return t.compSolids=n,n}function*GE(e){for(let t of U().iterShapes(e.wrapped,`edge`))yield DE(t,`edge`)}function*KE(e){for(let t of U().iterShapes(e.wrapped,`face`))yield DE(t,`face`)}function*qE(e){for(let t of U().iterShapes(e.wrapped,`wire`))yield DE(t,`wire`)}function*JE(e){for(let t of U().iterShapes(e.wrapped,`vertex`))yield DE(t,`vertex`)}function*YE(e){for(let t of U().iterShapes(e.wrapped,`solid`))yield DE(t,`solid`)}function*XE(e){for(let t of U().iterShapes(e.wrapped,`shell`))yield DE(t,`shell`)}function*ZE(e){for(let t of U().iterShapes(e.wrapped,`compsolid`))yield DE(t,`compsolid`)}function QE(e){let t=FE(e);if(t.bounds)return t.bounds;let{min:n,max:r}=U().boundingBox(e.wrapped),i={xMin:n[0],xMax:r[0],yMin:n[1],yMax:r[1],zMin:n[2],zMax:r[2]};return t.bounds=i,i}function $E(e){return JT(U(),e.wrapped)}function eD(e){let t=FE(e);if(t.surfaceType!==void 0)return t.surfaceType;let n=U().surfaceType(e.wrapped);return t.surfaceType=n,n}function tD(e){let t=FE(e);if(t.isValid!==void 0)return t.isValid;let n=U().isValid(e.wrapped);return t.isValid=n,n}function nD(e){return{kind:$E(e),faceCount:zE(e).length,edgeCount:RE(e).length,wireCount:BE(e).length,vertexCount:VE(e).length,valid:tD(e),bounds:QE(e)}}function rD(e){return U().vertexPosition(e.wrapped)}var G=2147483647,iD=Math.PI/180,aD=180/Math.PI;function oD(e){return e.length===2?[e[0],e[1],0]:[e[0],e[1],e[2]]}function sD(e){return[e[0],e[1]]}var cD={X:[1,0,0],Y:[0,1,0],Z:[0,0,1]};function lD(e){if(typeof e==`string`){let t=cD[e];if(!t)throw Error(`Unknown direction: ${e}`);return t}return e}function uD(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function dD(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function fD(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function pD(e){return[-e[0],-e[1],-e[2]]}function mD(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function hD(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function gD(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2])}function _D(e){return e[0]*e[0]+e[1]*e[1]+e[2]*e[2]}function vD(e,t){return gD(dD(e,t))}function yD(e){let t=gD(e);return t<1e-10?[0,0,0]:[e[0]/t,e[1]/t,e[2]/t]}function bD(e,t,n=1e-5){return Math.abs(e[0]-t[0])<n&&Math.abs(e[1]-t[1])<n&&Math.abs(e[2]-t[2])<n}function xD(e,t=1e-10){return _D(e)<t*t}function SD(e,t){let n=mD(e,t),r=gD(e),i=gD(t);if(r<1e-10||i<1e-10)return 0;let a=Math.max(-1,Math.min(1,n/(r*i)));return Math.acos(a)}function CD(e,t,n){let r=dD(e,t),i=_D(n);return i<1e-20?e:dD(e,fD(n,mD(r,n)/i))}function wD(e,t,n){let r=yD(t),i=Math.cos(n),a=Math.sin(n),o=mD(e,r),s=hD(r,e);return[e[0]*i+s[0]*a+r[0]*o*(1-i),e[1]*i+s[1]*a+r[1]*o*(1-i),e[2]*i+s[2]*a+r[2]*o*(1-i)]}var TD=e=>Math.round(e*1e3)/1e3;function ED(e){return`x: ${TD(e[0])}, y: ${TD(e[1])}, z: ${TD(e[2])}`}function DD(e,t=null,n=[0,0,1]){let r=yD(n);if(xD(r))throw Error(`Plane normal must be non-zero`);let i;if(t)i=yD(t);else{let[e,t,n]=r,a=Math.abs(e),o=Math.abs(t),s=Math.abs(n),c;c=a<=o&&a<=s?[1,0,0]:o<=s?[0,1,0]:[0,0,1];let l=c[1]*n-c[2]*t,u=c[2]*e-c[0]*n,d=c[0]*t-c[1]*e;i=Math.sqrt(l*l+u*u+d*d)>1e-12?yD([l,u,d]):[1,0,0]}if(xD(i))throw Error(`Plane xDir must be non-zero`);let a=yD(hD(r,i));return{origin:e,xDir:i,yDir:a,zDir:r}}var OD={XY:{xDir:[1,0,0],normal:[0,0,1]},YZ:{xDir:[0,1,0],normal:[1,0,0]},ZX:{xDir:[0,0,1],normal:[0,1,0]},XZ:{xDir:[1,0,0],normal:[0,-1,0]},YX:{xDir:[0,1,0],normal:[0,0,-1]},ZY:{xDir:[0,0,1],normal:[-1,0,0]},front:{xDir:[1,0,0],normal:[0,0,1]},back:{xDir:[-1,0,0],normal:[0,0,-1]},left:{xDir:[0,0,1],normal:[-1,0,0]},right:{xDir:[0,0,-1],normal:[1,0,0]},top:{xDir:[1,0,0],normal:[0,1,0]},bottom:{xDir:[1,0,0],normal:[0,-1,0]}};function kD(e,t=[0,0,0]){let n=OD[e];if(!n)return k(F(`UNKNOWN_PLANE`,`Could not find plane ${e}`));let r;return r=typeof t==`number`?fD(n.normal,t):oD(t),O(DD(r,n.xDir,n.normal))}function AD(e,t){return typeof e==`string`?kD(e,t):O(e)}function jD(e,t){return e&&typeof e!=`string`?{...e}:j(AD(e??`XY`,t))}function MD(e,t){let[n,r]=t;return uD(uD(e.origin,fD(e.xDir,n)),fD(e.yDir,r))}function ND(e,t){return{...e,origin:uD(e.origin,t)}}function PD(e,t,n=[1,0,0]){let r=t*iD,i=wD(e.zDir,n,r),a=wD(e.xDir,n,r),o=yD(hD(i,a));return{origin:e.origin,xDir:a,yDir:o,zDir:i}}var FD={compound:0,solidCompound:1,solid:2,shell:3,face:4,wire:5,edge:6,vertex:7,shape:8},ID=e=>FD[e],LD={vertex:`vertex`,edge:`edge`,wire:`wire`,face:`face`,shell:`shell`,solid:`solid`,solidCompound:`compsolid`,compound:`compound`,shape:`compound`},RD=function*(e,t){let n=LD[t];if(n){let t=U().iterShapes(e,n);for(let e of t)yield e}},zD=e=>U().isNull(e)?k(co(`NULL_SHAPE`,`This shape has no type, it is null`)):O(e.ShapeType());function BD(e){if(U().isNull(e))return k(co(`NULL_SHAPE`,`This shape has no type, it is null`));try{return O(U().downcast(e))}catch{return k(co(`NO_WRAPPER`,`Could not find a wrapper for this shape type`))}}function VD(e){return U().isNull(e)?k(co(`NULL_SHAPE`,`Cannot cast a null shape`)):O(W(e))}function HD(e){return U().shapeType(e.wrapped)===`compsolid`}function UD(e){return VD(U().fromBREP(e))}var WD={plane:`PLANE`,cylinder:`CYLINDRE`,cone:`CONE`,sphere:`SPHERE`,torus:`TORUS`,bezier:`BEZIER_SURFACE`,bspline:`BSPLINE_SURFACE`,revolution:`REVOLUTION_SURFACE`,extrusion:`EXTRUSION_SURFACE`,offset:`OFFSET_SURFACE`,other:`OTHER_SURFACE`};function GD(e){return O(WD[eD(e)])}function KD(e){return j(GD(e))}function qD(e){return U().shapeOrientation(e.wrapped)===`forward`?`forward`:`backward`}function JD(e){return W(U().reverseShape(e.wrapped))}function YD(e){return U().uvBounds(e.wrapped)}function XD(e,t,n){let r=YD(e),i=t*(r.uMax-r.uMin)+r.uMin,a=n*(r.vMax-r.vMin)+r.vMin;return U().pointOnSurface(e.wrapped,i,a)}function ZD(e,t){let n=oD(t);return U().uvFromPoint(e.wrapped,n)||[0,0]}function QD(e,t){let n=oD(t);try{let t=n,r=U().uvFromPoint(e.wrapped,t);if(!r)return k(co(`PROJECTION_FAILED`,`No projection found on the face`));let i=U().projectPointOnFace(e.wrapped,t),a=n[0]-i[0],o=n[1]-i[1],s=n[2]-i[2];return O({uv:r,point:i,distance:Math.sqrt(a*a+o*o+s*s)})}catch(e){return k(co(`PROJECTION_FAILED`,`Point projection failed: ${e instanceof Error?e.message:String(e)}`))}}function $D(e,t){let n,r;if(t)[n,r]=ZD(e,t);else{let t=YD(e);n=.5*(t.uMin+t.uMax),r=.5*(t.vMin+t.vMax)}return U().surfaceNormal(e.wrapped,n,r)}function eO(e){return U().surfaceCenterOfMass(e.wrapped)}function tO(e){return U().getSurfaceAxis(e.wrapped)}function nO(e,t,n=1e-6){let[r,i]=ZD(e,t);return U().classifyPointOnFace(e.wrapped,r,i,n)}function rO(e){return W(U().outerWire(e.wrapped))}function iO(e){return W(U().removeHolesFromFace(e.wrapped))}function aO(e){let t=rO(e);return Array.from(RD(e.wrapped,`wire`)).map(e=>W(j(BD(e)))).filter(e=>!U().isSame(e.wrapped,t.wrapped))}function oO(e,t){let n=FE(e),r=new Map;for(let n of zE(e))r.set(U().hashCode(n.wrapped,G),t);n.faceOrigins=r}function sO(e){return IE(e)?.faceOrigins}function cO(e,t,n){let r=new Map;for(let e of t){let t=sO(e);if(t)for(let[e,n]of t)r.set(e,n)}if(r.size===0)return;let i=new Map;for(let[t,n]of r){if(e.deleted.has(t))continue;let r=e.modified.get(t);if(r&&r.length>0)for(let e of r)i.set(e,n);else i.set(t,n);let a=e.generated.get(t);if(a)for(let e of a)i.has(e)||i.set(e,0)}if(i.size>0){let e=FE(n);e.faceOrigins=i}}function lO(e,t,n){let r=-1/0,i;for(let a of n){let n=e[0]*a.normal[0]+e[1]*a.normal[1]+e[2]*a.normal[2];if(n<.707)continue;let o=t[0]-a.centroid[0],s=t[1]-a.centroid[1],c=t[2]-a.centroid[2],l=o*o+s*s+c*c;if(l>100)continue;let u=n-l/100;u>r&&(r=u,i=a.origin)}return i}function uO(e,t){let n=new Map;for(let t of e){let e=sO(t);if(e)for(let[t,r]of e)n.set(t,r)}if(n.size===0)return;let r=U(),i=new Map,a=zE(t),o=[];for(let e of a){let t=r.hashCode(e.wrapped,G),a=n.get(t);a===void 0?o.push(e):i.set(t,a)}if(o.length>0){let t=[];for(let n of e){let e=sO(n);if(e)for(let i of zE(n)){let n=r.hashCode(i.wrapped,G),a=e.get(n);if(a!==void 0)try{let e=r.uvBounds(i.wrapped),n=r.surfaceNormal(i.wrapped,.5*(e.uMin+e.uMax),.5*(e.vMin+e.vMax)),o=r.surfaceCenterOfMass(i.wrapped);t.push({origin:a,normal:n,centroid:o})}catch{}}}if(t.length>0)for(let e of o){let n=r.hashCode(e.wrapped,G);try{let a=r.uvBounds(e.wrapped),o=lO(r.surfaceNormal(e.wrapped,.5*(a.uMin+a.uMax),.5*(a.vMin+a.vMax)),r.surfaceCenterOfMass(e.wrapped),t);o!==void 0&&i.set(n,o)}catch{}}}if(i.size>0){let e=FE(t);e.faceOrigins=i}}var dO=new WeakMap,fO=new WeakMap;function pO(e){return dO.has(e.wrapped)}function mO(e){let t=dO.get(e.wrapped);return t||(t=new Map,dO.set(e.wrapped,t)),t}function hO(e){let t=fO.get(e.wrapped);return t||(t=new Map,fO.set(e.wrapped,t)),t}function gO(e,t,n){let r=Array.isArray(t)?t:zE(e).filter(t),i=mO(e),a=i.get(n)??new Set;for(let e of r)a.add(U().hashCode(e.wrapped,G));return i.set(n,a),e}function _O(e,t){let n=dO.get(e.wrapped);if(!n)return[];let r=n.get(t);if(!r||r.size===0)return[];let i=[];for(let t of zE(e)){let e=U().hashCode(t.wrapped,G);r.has(e)&&i.push(t)}return i}function vO(e){let t=new Map,n=dO.get(e.wrapped);if(!n)return t;let r=zE(e),i=new Map;for(let e of r)i.set(U().hashCode(e.wrapped,G),e);for(let[e,r]of n){let n=[];for(let e of r){let t=i.get(e);t&&n.push(t)}n.length>0&&t.set(e,n)}return t}function yO(e,t,n){return hO(e).set(t,n),e}function bO(e,t){return fO.get(e.wrapped)?.get(t)}function xO(e,t,n){let r=e.get(t)??new Set;r.add(n),e.set(t,r)}function SO(e,t,n){let r=mO(n);for(let i of t){let t=dO.get(i.wrapped);if(!t)continue;let a=new Map;for(let[e,n]of t)for(let t of n){let n=a.get(t)??[];n.push(e),a.set(t,n)}for(let[t,n]of a){if(e.deleted.has(t))continue;let i=e.modified.get(t),a=i&&i.length>0?i:[t];for(let e of a)for(let t of n)xO(r,t,e)}let o=fO.get(i.wrapped);if(o){let e=hO(n);for(let[t,n]of o)e.has(t)||e.set(t,n)}}}var CO=new WeakMap,wO=new WeakMap;function TO(e){return CO.has(e.wrapped)||wO.has(e.wrapped)}function EO(e){let t=wO.get(e.wrapped);return t||(t=new Map,wO.set(e.wrapped,t)),t}function DO(e){if(typeof e==`string`){let t=e.startsWith(`#`)?e.slice(1):e;return t.length===3&&(t=t.charAt(0)+t.charAt(0)+t.charAt(1)+t.charAt(1)+t.charAt(2)+t.charAt(2)),[parseInt(t.slice(0,2),16)/255,parseInt(t.slice(2,4),16)/255,parseInt(t.slice(4,6),16)/255,1]}return e.length===3?[e[0],e[1],e[2],1]:[e[0],e[1],e[2],e[3]]}function OO(e,t){return CO.set(e.wrapped,DO(t)),e}function kO(e,t,n){let r=DO(n),i=EO(e);for(let e of t)i.set(U().hashCode(e.wrapped,G),r);return e}function AO(e){return CO.get(e.wrapped)}function jO(e,t){let n=wO.get(e.wrapped);if(n)return n.get(U().hashCode(t.wrapped,G))}function MO(e,t,n){for(let e of t){let t=CO.get(e.wrapped);if(t){CO.set(n.wrapped,t);break}}let r=EO(n);for(let n of t){let t=wO.get(n.wrapped);if(!(!t||t.size===0))for(let[n,i]of t){if(e.deleted.has(n))continue;let t=e.modified.get(n);if(t&&t.length>0)for(let e of t)r.set(e,i);else r.set(n,i)}}}function NO(e){if(!e.some(e=>sO(e)!==void 0||pO(e)||TO(e)))return[];let t=U(),n=[];for(let r of e){let e=t.iterShapes(r.wrapped,`face`);for(let r of e)n.push(t.hashCode(r,G))}return n}function PO(e,t,n){cO(e,t,n),SO(e,t,n),MO(e,t,n)}function FO(e,t){uO(e,t)}function IO(e,t){let n=NO([e]),{shape:r,evolution:i}=U().translateWithHistory(e.wrapped,t[0],t[1],t[2],n,G),a=W(r);return PO(i,[e],a),a}function LO(e,t,n=[0,0,0],r=[0,0,1]){let i=NO([e]),{shape:a,evolution:o}=U().rotateWithHistory(e.wrapped,t*iD,i,G,r,n),s=W(a);return PO(o,[e],s),s}function RO(e,t=[0,1,0],n=[0,0,0]){let r=NO([e]),{shape:i,evolution:a}=U().mirrorWithHistory(e.wrapped,n,t,r,G),o=W(i);return PO(a,[e],o),o}function zO(e,t,n=[0,0,0]){let r=NO([e]),{shape:i,evolution:a}=U().scaleWithHistory(e.wrapped,n,t,r,G),o=W(i);return PO(a,[e],o),o}function BO(e,t,n){let r=U().boundingBox(e.wrapped),i=[r.max[0]-r.min[0],r.max[1]-r.min[1],r.max[2]-r.min[2]],a=n?.auto===!0;function o(e,t,n){return e!==void 0&&t>1e-12?e/t:e===void 0&&a?n:1}let s=1;a&&(t[0]!==void 0&&i[0]>1e-12?s=t[0]/i[0]:t[1]!==void 0&&i[1]>1e-12?s=t[1]/i[1]:t[2]!==void 0&&i[2]>1e-12&&(s=t[2]/i[2]));let c=[o(t[0],i[0],s),o(t[1],i[1],s),o(t[2],i[2],s)];return Math.abs(c[0]-c[1])<1e-6&&Math.abs(c[1]-c[2])<1e-6?O(zO(e,c[0])):k(F(N.VALIDATION_FAILED,`resize: non-uniform scaling is not supported (WASM build lacks BRepBuilderAPI_GTransform).`,void 0,void 0,`Use auto: true to scale proportionally, or set all three dimensions to achieve uniform scaling.`))}function VO(e){if(`linear`in e)return O({linear:e.linear,translation:e.translation});let[t,n,r,i]=e,a=1e-10;return Math.abs(i[0])>a||Math.abs(i[1])>a||Math.abs(i[2])>a||Math.abs(i[3]-1)>a?k(F(N.VALIDATION_FAILED,`applyMatrix: invalid bottom row [${String(i[0])}, ${String(i[1])}, ${String(i[2])}, ${String(i[3])}]. Must be [0, 0, 0, 1] for an affine transform.`)):O({linear:[t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]],translation:[t[3],n[3],r[3]]})}function HO(e){return e[0]*(e[4]*e[8]-e[5]*e[7])-e[1]*(e[3]*e[8]-e[5]*e[6])+e[2]*(e[3]*e[7]-e[4]*e[6])}function UO(e){let t=1e-8,n=e[0]*e[0]+e[3]*e[3]+e[6]*e[6],r=e[1]*e[1]+e[4]*e[4]+e[7]*e[7],i=e[2]*e[2]+e[5]*e[5]+e[8]*e[8],a=e[0]*e[1]+e[3]*e[4]+e[6]*e[7],o=e[0]*e[2]+e[3]*e[5]+e[6]*e[8],s=e[1]*e[2]+e[4]*e[5]+e[7]*e[8];return!(Math.abs(a)>t||Math.abs(o)>t||Math.abs(s)>t||Math.abs(n-r)>t||Math.abs(n-i)>t)}function WO(e,t){let n=VO(t);if(!n.ok)return n;let{linear:r,translation:i}=n.value,a=HO(r);if(Math.abs(a)<1e-12)return k(F(N.VALIDATION_FAILED,`applyMatrix: singular matrix (determinant ≈ 0). Cannot apply a non-invertible transform.`));if(UO(r)){let t=NO([e]),{shape:n,evolution:a}=U().generalTransformWithHistory(e.wrapped,r,i,!0,t,G),o=W(n);return PO(a,[e],o),O(o)}let o=W(U().generalTransformNonOrthogonal(e.wrapped,r,i));return FO([e],o),O(o)}function GO(e){let t=e.map(e=>e.type===`translate`?{type:`translate`,x:e.v[0],y:e.v[1],z:e.v[2]}:{type:`rotate`,angle:e.angle,axis:e.axis,center:e.center}),{handle:n,dispose:r}=U().composeTransform(t);return{trsf:n,cleanup:r}}function KO(e,t){let n=NO([e]),{shape:r,evolution:i}=U().applyComposedTransformWithHistory(e.wrapped,t.trsf,n,G),a=W(r);return PO(i,[e],a),a}function qO(e){return AE(()=>U().downcast(e.wrapped),N.CLONE_FAILED,`Failed to clone shape`)}function JO(e){return jE(()=>U().toBREP(e.wrapped),N.TO_BREP_FAILED,`Failed to serialize shape to BREP`)}function YO(e){return U().hashCode(e.wrapped,G)}function XO(e){return U().isNull(e.wrapped)}function ZO(e,t){return U().isSame(e.wrapped,t.wrapped)}function QO(e,t){return U().isEqual(e.wrapped,t.wrapped)}function $O(e){return AE(()=>U().simplify(e.wrapped),N.SIMPLIFY_FAILED,`Failed to simplify shape`)}function ek(e){return U().curveType(e.wrapped)}function tk(e){let[t]=U().curveParameters(e.wrapped);return U().curvePointAtParam(e.wrapped,t)}function nk(e){let[,t]=U().curveParameters(e.wrapped);return U().curvePointAtParam(e.wrapped,t)}function rk(e,t=.5){let[n,r]=U().curveParameters(e.wrapped),i=n+(r-n)*t;return U().curvePointAtParam(e.wrapped,i)}function ik(e,t=.5){let[n,r]=U().curveParameters(e.wrapped),i=n+(r-n)*t;return U().curveTangent(e.wrapped,i).tangent}function ak(e){return U().length(e.wrapped)}function ok(e){if(ek(e)!==`CIRCLE`)return null;let t=rk(e,0),n=rk(e,1/3),r=rk(e,2/3),i=[n[0]-t[0],n[1]-t[1],n[2]-t[2]],a=[r[0]-t[0],r[1]-t[1],r[2]-t[2]],o=[i[1]*a[2]-i[2]*a[1],i[2]*a[0]-i[0]*a[2],i[0]*a[1]-i[1]*a[0]],s=o[0]*o[0]+o[1]*o[1]+o[2]*o[2];if(s<1e-18)return null;let c=i[0]*i[0]+i[1]*i[1]+i[2]*i[2],l=a[0]*a[0]+a[1]*a[1]+a[2]*a[2],u=[c*a[0]-l*i[0],c*a[1]-l*i[1],c*a[2]-l*i[2]],d=[u[1]*o[2]-u[2]*o[1],u[2]*o[0]-u[0]*o[2],u[0]*o[1]-u[1]*o[0]],f=1/(2*s),p=[t[0]+d[0]*f,t[1]+d[1]*f,t[2]+d[2]*f],m=Math.sqrt(s);return{origin:p,direction:[o[0]/m,o[1]/m,o[2]/m]}}function sk(e){return U().curveIsClosed(e.wrapped)}function ck(e){return U().curveIsPeriodic(e.wrapped)}function lk(e){return U().curvePeriod(e.wrapped)}function uk(e){return U().shapeOrientation(e.wrapped)===`forward`?`forward`:`backward`}function dk(e){return W(U().reverseShape(e.wrapped))}function fk(e,t={}){if(e.length<2)return k(co(`INTERPOLATE_MIN_POINTS`,`Interpolation requires at least 2 points`));try{let n=W(U().interpolatePoints(e,t));return vE(n)?O(n):k(co(`INTERPOLATE_NOT_EDGE`,`Interpolation did not produce an edge`))}catch(e){return k(co(`INTERPOLATE_FAILED`,`Interpolation failed: ${e instanceof Error?e.message:String(e)}`))}}function pk(e,t={}){if(e.length<2)return k(co(`APPROXIMATE_MIN_POINTS`,`Approximation requires at least 2 points`));try{let n=W(U().approximatePoints(e,t));return vE(n)?O(n):k(co(`APPROXIMATE_NOT_EDGE`,`Approximation did not produce an edge`))}catch(e){return k(co(`APPROXIMATE_FAILED`,`Approximation failed: ${e instanceof Error?e.message:String(e)}`))}}function mk(e,t,n=`arc`){let r=W(U().offsetWire2D(e.wrapped,t,{arc:`arc`,intersection:`intersection`,tangent:`tangent`,chamfer:`intersection`}[n]));return yE(r)?O(r):(r[Symbol.dispose](),k(co(`OFFSET_NOT_WIRE`,`Offset did not produce a Wire`)))}function hk(e,t,n,r=!1){return`${e}:${t}:${n}:${r}`}function gk(e,t){return`edge:${e}:${t}`}var _k=new WeakMap,vk=new WeakMap;function yk(e,t){let n=_k.get(e);if(n)return n.get(t)}function bk(e,t,n){let r=_k.get(e);r||(r=new Map,_k.set(e,r)),r.set(t,n)}function xk(e,t){let n=vk.get(e);if(n)return n.get(t)}function Sk(e,t,n){let r=vk.get(e);r||(r=new Map,vk.set(e,r)),r.set(t,n)}function Ck(){_k=new WeakMap,vk=new WeakMap}function wk(){let e=new WeakMap,t=new WeakMap;return{getMesh(t,n){return e.get(t)?.get(n)},setMesh(t,n,r){let i=e.get(t);i||(i=new Map,e.set(t,i)),i.set(n,r)},getEdgeMesh(e,n){return t.get(e)?.get(n)},setEdgeMesh(e,n,r){let i=t.get(e);i||(i=new Map,t.set(e,i)),i.set(n,r)},clear(){e=new WeakMap,t=new WeakMap}}}function Tk(e,t={}){let n=yo(),{tolerance:r=n.tolerance,angularTolerance:i=n.angularTolerance,skipNormals:a=!1,includeUVs:o=!1,cache:s=!0,signal:c}=t;c?.throwIfAborted();let l=hk(r,i,a,o);if(s){let t=yk(e.wrapped,l);if(t)return t}let u=U().mesh(e.wrapped,{tolerance:r,angularTolerance:i,skipNormals:a,includeUVs:o,...c?{signal:c}:{}}),d=sO(e),f={vertices:u.vertices,normals:u.normals,triangles:u.triangles,uvs:u.uvs,faceGroups:u.faceGroups.map(e=>({start:e.start,count:e.count,faceId:e.faceHash,origin:d?.get(e.faceHash)??0}))};return s&&bk(e.wrapped,l,f),f}function Ek(e,t={}){let n=yo(),{tolerance:r=n.tolerance,angularTolerance:i=n.angularTolerance,cache:a=!0}=t,o=gk(r,i);if(a){let t=xk(e.wrapped,o);if(t)return t}let s=U().meshEdges(e.wrapped,r,i),c={lines:s.lines,edgeGroups:s.edgeGroups.map(e=>({start:e.start,count:e.count,edgeId:e.edgeHash}))};return a&&Sk(e.wrapped,o,c),c}function Dk(e,t){return e instanceof Error&&e.message.startsWith(`${t} export failed`)?fo(`${t}_EXPORT_FAILED`,`Failed to write ${t} file`,e):e instanceof WebAssembly.RuntimeError?fo(`${t}_EXPORT_CRASHED`,`${t} export crashed the kernel (${e.message}); the shape likely contains geometry the ${t} writer cannot serialize`,e):fo(`${t}_FILE_READ_ERROR`,`Failed to read exported ${t} file`,e)}function Ok(e){let t;try{t=HE(e)}catch{return``}if(t.length<=1)return``;let n=[];return t.forEach((e,t)=>{try{QE(e)}catch(e){if(e instanceof TypeError)throw e;n.push(t)}}),n.length===0?`; could not localize the offending sub-solid among ${t.length} solids`:`; offending sub-solid${n.length>1?`s`:``} (of ${t.length}): index ${n.join(`, `)}`}function kk(e,t){try{return QE(e),null}catch(n){if(n instanceof TypeError)throw n;return fo(`${t}_EXPORT_UNSERIALIZABLE`,`${t} export aborted: the shape contains degenerate geometry the ${t} writer cannot serialize (bounding-box evaluation failed); export was skipped to avoid crashing the kernel${Ok(e)}`,n)}}function Ak(e){let t=kk(e,`STEP`);if(t)return k(t);try{let t=U().exportSTEP([e.wrapped]);return O(new Blob([t],{type:`application/STEP`}))}catch(e){return k(Dk(e,`STEP`))}}function jk(e,t={}){let n=yo(),{tolerance:r=n.tolerance,angularTolerance:i=n.angularTolerance,binary:a=!1}=t,o=kk(e,`STL`);if(o)return k(o);try{U().hasTriangulation(e.wrapped)||U().meshShape(e.wrapped,r,i);let t=U().exportSTL(e.wrapped,a,r,i);return O(new Blob([t],{type:`application/sla`}))}catch(e){return k(Dk(e,`STL`))}}function Mk(e){try{let t=U().exportIGES([e.wrapped]);return O(new Blob([t],{type:`application/iges`}))}catch(e){return k(fo(`IGES_EXPORT_FAILED`,`Failed to write IGES file`,e))}}function Nk(e,t){let n=t?.coarseTolerance??.5,r=t?.fineTolerance??.05,i=t?.angularTolerance??.5;return{coarse:Tk(e,{tolerance:n,angularTolerance:i}),fine:Tk(e,{tolerance:r,angularTolerance:i*.2})}}function Pk(e,t,n){if(t<0||t>=e.length)throw Error(n??`Index ${t} out of bounds (length ${e.length})`);return e[t]}function Fk(e,t){if(e.length===0)throw Error(t??`Expected non-empty array`);return e[0]}function Ik(e,t){if(e.length===0)throw Error(t??`Expected non-empty array`);return e[e.length-1]}function Lk(e){return Array.from(Array(e).keys())}function Rk(e){return Lk(Math.min(...e.map(e=>e.length))).map(t=>e.map(e=>e[t]))}function zk(e,t){return uE(U().makeLineEdge([...e],[...t]))}function Bk(e,t=[0,0,0],n=[0,0,1]){return uE(U().makeCircleEdge([...t],[...n],e))}function Vk(e,t,n=[0,0,0],r=[0,0,1],i){return t>e?k(F(`ELLIPSE_RADII`,`The minor radius must be smaller than the major one`)):O(uE(U().makeEllipseEdge([...n],[...r],e,t,i?[...i]:void 0)))}function Hk(e,t,n,r=[0,0,0],i=[0,0,1],a=!1){return dE(U().makeHelixWire(e,t,n,[...r],[...i],a))}function Uk(e,t,n){return uE(U().makeArcEdge([...e],[...t],[...n]))}function Wk(e,t,n,r,i=[0,0,0],a=[0,0,1],o){return t>e?k(F(`ELLIPSE_RADII`,`The minor radius must be smaller than the major one`)):O(uE(U().makeEllipseArc([...i],[...a],e,t,n,r,o?[...o]:void 0)))}function Gk(e,{tolerance:t=.001,smoothing:n=null,degMax:r=6,degMin:i=1}={}){try{let a=e.map(e=>[...e]);return O(uE(U().approximatePoints(a,{tolerance:t,degMin:i,degMax:r,smoothing:n})))}catch{return k(P(`BSPLINE_FAILED`,`B-spline approximation failed`))}}function Kk(e,{periodic:t=!1,tolerance:n=1e-7}={}){try{let r=e.map(e=>[...e]);return O(uE(U().interpolatePoints(r,{periodic:t,tolerance:n})))}catch{return k(P(`BSPLINE_INTERP_FAILED`,`B-spline interpolation failed`))}}function qk(e){if(e.length<2)return k(F(`BEZIER_MIN_POINTS`,`Need at least 2 points for a Bezier curve, got ${e.length}`,void 0,{pointCount:e.length}));let t=e.map(e=>[...e]);return O(uE(U().makeBezierEdge(t)))}function Jk(e,t,n){return uE(U().makeTangentArc([...e],[...t],[...n]))}function Yk(e){try{return O(dE(U().makeWireFromMixed(e.map(e=>e.wrapped))))}catch(e){return k(P(`WIRE_BUILD_FAILED`,`Failed to build the wire: ${e instanceof Error?e.message:`unknown error`}`))}}function Xk(e,t){try{let n=U().makeFace(e.wrapped,!0);if(t&&t.length>0){let e=eA(fE(n),t);return iE(e)?O(e):k(F(`FACE_NOT_PLANAR`,`makeFace produced a non-planar face — wire may not be truly planar`))}let r=fE(n);return iE(r)?O(r):k(F(`FACE_NOT_PLANAR`,`makeFace produced a non-planar face — wire may not be truly planar`))}catch{return k(P(`FACE_BUILD_FAILED`,`Failed to build the face. Your wire might be non planar.`))}}function Zk(e){return Xk(rO(e))}function Qk(e,t){return fE(U().makeFaceOnSurface(e.wrapped,t.wrapped))}function $k(e){try{return Ia(VD(U().makeNonPlanarFace(e.wrapped)),e=>bE(e)?O(e):k(P(`FACE_BUILD_FAILED`,`Failed to create a non-planar face`)))}catch{return k(P(`FACE_BUILD_FAILED`,`Failed to create a non-planar face`))}}function eA(e,t){return fE(U().addHolesInFace(e.wrapped,t.map(e=>e.wrapped)))}function tA(e){return e.length<3?k(F(`POLYGON_MIN_POINTS`,`You need at least 3 points to make a polygon`)):Ia(Yk(Rk([e,[...e.slice(1),e[0]]]).map(([e,t])=>zk(e,t))),e=>Xk(e))}function nA(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function rA(e,t,n,r,i){let a=W(e);if(!wE(a)){let o=e.ShapeType(),s=[`COMPOUND`,`COMPSOLID`,`SOLID`,`SHELL`,`FACE`,`WIRE`,`EDGE`,`VERTEX`,`SHAPE`][o]??`UNKNOWN(${o})`;return a[Symbol.dispose](),k(co(t,`${n}. Got ${s} instead.`,void 0,i?{diagnostics:i}:void 0,r))}return O(a)}function iA(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;let c=nA(e,`fuse: first operand`);if(A(c))return c;let l=nA(t,`fuse: second operand`);if(A(l))return l;if(!s)return rA(U().fuse(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`);let u=NO([e,t]),{shape:d,evolution:f,diagnostics:p}=U().fuseWithHistory(e.wrapped,t.wrapped,u,G,{optimisation:n,simplify:r,fuzzyValue:a});if(p.hasErrors){if(U().isNull(d))return U().dispose(d),console.warn(`brepjs: fuse history path produced null result; retrying without evolution tracking.`,p),rA(U().fuse(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`);console.warn(`brepjs: fuse reported OCCT warnings/errors but produced a shape. Continuing with result.`,p)}let m=rA(d,`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`,`Common causes: overlapping coplanar faces, zero-thickness geometry, or non-manifold input. Try autoHeal() on inputs first.`,p);return m.ok&&PO(f,[e,t],m.value),m}function aA(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;let c=nA(e,`cut: base`);if(A(c))return c;let l=nA(t,`cut: tool`);if(A(l))return l;if(!s)return rA(U().cut(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`CUT_NOT_3D`,`Cut did not produce a 3D shape`);let u=NO([e,t]),{shape:d,evolution:f,diagnostics:p}=U().cutWithHistory(e.wrapped,t.wrapped,u,G,{optimisation:n,simplify:r,fuzzyValue:a});if(p.hasErrors){if(U().isNull(d))return U().dispose(d),console.warn(`brepjs: cut history path produced null result; retrying without evolution tracking.`,p),rA(U().cut(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`CUT_NOT_3D`,`Cut did not produce a 3D shape`);console.warn(`brepjs: cut reported OCCT warnings/errors but produced a shape. Continuing with result.`,p)}let m=rA(d,`CUT_NOT_3D`,`Cut did not produce a 3D shape`,`Common causes: tool does not fully intersect the base, or produces a zero-thickness sliver. Ensure the tool extends through the shape.`,p);return m.ok&&PO(f,[e,t],m.value),m}function oA(e,t,{simplify:n=!1,signal:r,fuzzyValue:i,unsafe:a,trackEvolution:o=!0}={}){if(r?.aborted)throw r.reason;let s=nA(e,`intersect: first operand`);if(A(s))return s;let c=nA(t,`intersect: second operand`);if(A(c))return c;if(!o)return rA(U().intersect(e.wrapped,t.wrapped,{simplify:n,fuzzyValue:i}),`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`);let l=NO([e,t]),{shape:u,evolution:d,diagnostics:f}=U().intersectWithHistory(e.wrapped,t.wrapped,l,G,{simplify:n,fuzzyValue:i});if(f.hasErrors){if(U().isNull(u))return U().dispose(u),console.warn(`brepjs: intersect history path produced null result; retrying without evolution tracking.`,f),rA(U().intersect(e.wrapped,t.wrapped,{simplify:n,fuzzyValue:i}),`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`);console.warn(`brepjs: intersect reported OCCT warnings/errors but produced a shape. Continuing with result.`,f)}let p=rA(u,`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`,`Shapes may not overlap. Verify they share a common volume before intersecting.`,f);return p.ok&&PO(d,[e,t],p.value),p}function sA(e,t,n,r,i,a,o,s){if(o?.aborted)throw o.reason;let c=n-t;if(c===1)return O(Pk(e,t));if(c===2)return iA(Pk(e,t),Pk(e,t+1),{optimisation:r,simplify:!1,trackEvolution:a,fuzzyValue:s,unsafe:!0,...o?{signal:o}:{}});let l=t+Math.ceil(c/2),u=sA(e,t,l,r,i,a,o,s);if(A(u))return u;let d=sA(e,l,n,r,i,a,o,s);return A(d)?d:iA(u.value,d.value,{optimisation:r,simplify:i,trackEvolution:a,fuzzyValue:s,unsafe:!0,...o?{signal:o}:{}})}function cA(e,{optimisation:t=`none`,simplify:n=!1,strategy:r=`native`,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;if(e.length===0)return k(F(`FUSE_ALL_EMPTY`,`fuseAll requires at least one shape`));if(e.length===1)return O(Fk(e));for(let t=0;t<e.length;t++){let n=nA(Pk(e,t),`fuseAll: shape at index ${t}`);if(A(n))return n}if(r===`native`){let o=rA(U().fuseAll(e.map(e=>e.wrapped),{optimisation:t,simplify:n,strategy:r,fuzzyValue:a,...i?{signal:i}:{}}),`FUSE_ALL_NOT_3D`,`fuseAll did not produce a 3D shape`);return o.ok&&s&&FO(e,o.value),o}return sA(e,0,e.length,t,n,s,i,a)}function lA(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;if(t.length===0)return O(e);let c=nA(e,`cutAll: base`);if(A(c))return c;for(let e=0;e<t.length;e++){let n=nA(Pk(t,e),`cutAll: tool at index ${e}`);if(A(n))return n}let l=[e,...t],u=rA(U().cutAll(e.wrapped,t.map(e=>e.wrapped),{optimisation:n,simplify:r,fuzzyValue:a}),`CUT_ALL_NOT_3D`,`cutAll did not produce a 3D shape`);return u.ok&&s&&FO(l,u.value),u}function uA(e,t){let n=U(),r=fD(e.xDir,t),i=fD(e.yDir,t),a=fD(e.xDir,-t),o=fD(e.yDir,-t),s=e.origin,c=[...uD(uD(s,a),o)],l=[...uD(uD(s,r),o)],u=[...uD(uD(s,r),i)],d=[...uD(uD(s,a),i)],f=[n.makeLineEdge(c,l),n.makeLineEdge(l,u),n.makeLineEdge(u,d),n.makeLineEdge(d,c)],p=n.makeWire(f),m=n.makeFace(p,!0);for(let e of f)e.delete();return p.delete(),m}function dA(e,t,{approximation:n=!0,planeSize:r=1e4}={}){if(U().isNull(e.wrapped))return k(F(N.NULL_SHAPE_INPUT,`section: shape is a null shape`));let i=uA(typeof t==`string`?j(AD(t)):t,r);try{return O(W(U().section(e.wrapped,i,n)))}catch(e){let n=e instanceof Error?e.message:String(e),r=typeof t==`string`?t:`custom`;return k(P(`SECTION_FAILED`,`Section with ${r} plane failed: ${n}`,e,{operation:`section`,plane:r},`The cutting plane may not intersect the shape. Verify plane position relative to shape bounds.`))}finally{i.delete()}}function fA(e){let t=U(),n=new Map,r=new Map;for(let i of e){let e=VE(i),a=e[0]?t.hashCode(e[0].wrapped,G):-1,o=e.length>1&&e[1]?t.hashCode(e[1].wrapped,G):a;r.set(i,[a,o]);for(let e of[a,o]){let t=n.get(e)??[];t.push(i),n.set(e,t)}}return{vertexToEdges:n,edgeVertexHashes:r}}function pA(e,t,n){let r=t.vertexToEdges.get(e);if(r)for(let i of r){if(n.has(i))continue;let r=t.edgeVertexHashes.get(i);if(r)return n.add(i),{edge:i,nextTip:r[0]===e?r[1]:r[0]}}}function mA(e,t,n){n.add(e);let r=[e],i=t.edgeVertexHashes.get(e);if(!i)return r;let a=[i[1],i[0]];for(let e=0;e<2;e++){let i=a[e];if(i===void 0)continue;let o=pA(i,t,n);for(;o;)e===0?r.push(o.edge):r.unshift(o.edge),i=o.nextTip,o=pA(i,t,n)}return r}function hA(e){let t=U(),n=fA(e),r=new Set,i=[];for(let a of e){if(r.has(a))continue;let e=mA(a,n,r);try{let n=t.makeWire(e.map(e=>e.wrapped));i.push(W(n))}catch{}}return i}function gA(e){let t=U(),n=0,r=-1;for(let i=0;i<e.length;i++){let a=e[i];if(!a)continue;let o=t.boundingBox(a.wrapped),s=o.max[0]-o.min[0],c=o.max[1]-o.min[1],l=o.max[2]-o.min[2],u=s*s+c*c+l*l;u>r&&(r=u,n=i)}return n}function _A(e,t,n={}){let r=dA(e,t,n);if(!r.ok)return r;let i=BE(r.value);if(i.length===0){let e=RE(r.value);if(e.length===0)return k(P(`SECTION_FAILED`,`sectionToFace: section produced no geometry`,void 0,void 0,`The cutting plane may not intersect the shape. Verify plane position relative to shape bounds.`));i.push(...hA(e))}if(i.length===0)return k(P(`SECTION_FAILED`,`sectionToFace: section produced no usable geometry`,void 0,void 0,`The cutting plane may not intersect the shape. Verify plane position relative to shape bounds.`));let a=gA(i),o=Pk(i,a),s=i.filter((e,t)=>t!==a);return Xk(o,s.length>0?s:void 0)}function vA(e,t){if(t.length===0)return O(e);if(U().isNull(e.wrapped))return k(F(N.NULL_SHAPE_INPUT,`split: shape is a null shape`));for(let e=0;e<t.length;e++)if(U().isNull(Pk(t,e).wrapped))return k(F(N.NULL_SHAPE_INPUT,`splitShape: tool at index ${e} is a null shape`));try{return O(W(U().split(e.wrapped,t.map(e=>e.wrapped))))}catch(e){let n=e instanceof Error?e.message:String(e);return k(P(`SPLIT_FAILED`,`Split operation failed on ${t.length} tool(s): ${n}`,e,{operation:`split`,toolCount:t.length},`The splitting tools may not intersect the shape. Ensure tools cross through the shape's interior.`))}}function yA(e,t,n={}){let r=[];for(let i of t){let t=dA(e,i,n);if(A(t))return t;r.push(t.value)}return O(r)}function bA(e,t,n){if(t.length===0)return O(e);let r=n?.optimisation===`commonFace`?1:n?.optimisation===`sameFace`?2:0,i=U(),a=t.map(e=>({op:e.op,tool:e.tool.wrapped}));try{let o=i.booleanPipeline?.(e.wrapped,a,{glueMode:r});if(o===void 0)return xA(e,t,n);if(o===null)return k(P(`BOOLEAN_PIPELINE_FAILED`,`Boolean pipeline returned null shape`));let s=W(o);return wE(s)?O(s):k(co(`BOOLEAN_PIPELINE_NOT_3D`,`Pipeline result is not a 3D shape`))}catch(e){return k(P(`BOOLEAN_PIPELINE_FAILED`,e instanceof Error?e.message:String(e)))}}function xA(e,t,n){let r=e,i={...n?.optimisation?{optimisation:n.optimisation}:{},unsafe:!0};for(let e of t){let t=e.op===`fuse`?iA(r,e.tool,i):e.op===`cut`?aA(r,e.tool,i):oA(r,e.tool,i);if(A(t))return t;r=j(t)}return O(r)}function SA(e){return j(VD(j(BD(U().sew(e.map(e=>e.wrapped))))))}function CA(e,t=!1){let n=SA(e);return!t&&!xE(n)?k(co(`WELD_NOT_SHELL`,`Could not make a shell from faces and shells`)):O(n)}function wA(e,t,n=[0,0,0],r=[0,0,1]){return mE(U().makeCylinder(e,t,[...n],[...r]))}function TA(e){return mE(U().makeSphere(e))}function EA(e,t,n,r=[0,0,0],i=[0,0,1]){return mE(U().makeCone(e,t,n,[...r],[...i]))}function DA(e,t,n=[0,0,0],r=[0,0,1]){return mE(U().makeTorus(e,t,[...n],[...r]))}function OA(e,t,n){return mE(U().makeEllipsoid(e,t,n))}function kA(e){return lE(U().makeVertex(e[0],e[1],e[2]))}function AA(e,t,n=1e-6){return Ia(BD(U().offset(e.wrapped,t,n)),e=>Ia(VD(e),e=>wE(e)?O(e):k(co(`OFFSET_NOT_3D`,`Could not offset to a 3d shape`))))}function jA(e){return gE(U().makeCompound(e.map(e=>e.wrapped)))}function MA(e){let t=SA(e);return Ia(VD(U().solidFromShell(t.wrapped)),e=>SE(e)?O(e):k(co(`SOLID_BUILD_FAILED`,`Could not make a solid of faces and shells`)))}function NA(e){return{position:e.vertices,normal:e.normals,index:e.triangles}}function PA(e){return{position:e.vertices,normal:e.normals,index:e.triangles,groups:e.faceGroups.map((e,t)=>({start:e.start,count:e.count,materialIndex:t,faceId:e.faceId}))}}function FA(e){return{position:e.lines}}function IA(e,t){return{coarse:NA(e.coarse),fine:NA(e.fine),coarseDistance:t?.coarse??50,fineDistance:t?.fine??0}}function LA(e,t,n,r){if(t.length===0)return k(F(`CHAMFER_ANGLE_NO_EDGES`,`chamferDistAngle requires at least one edge`,void 0,{edgeCount:0}));if(n<=0)return k(F(`CHAMFER_ANGLE_BAD_DISTANCE`,`distance must be positive, got ${n}`,void 0,{distance:n}));if(r<=0||r>=90)return k(F(`CHAMFER_ANGLE_BAD_ANGLE`,`angleDeg must be in range (0, 90), got ${r}`,void 0,{angleDeg:r}));let i;try{let a=U(),o=t.map(e=>e.wrapped);i=a.chamferDistAngle(e.wrapped,o,n,r)}catch(e){return k(P(`CHAMFER_ANGLE_FAILED`,`chamferDistAngle kernel call failed: ${e instanceof Error?e.message:String(e)}`,e,{distance:n,angleDeg:r,edgeCount:t.length}))}let a=BD(i);if(A(a))return a;let o=W(a.value);return wE(o)?O(o):(o[Symbol.dispose](),k(co(`CHAMFER_ANGLE_NOT_3D`,`chamferDistAngle did not produce a 3D shape`)))}function RA(e,t){return e.map(e=>DE(e,t))}function zA(e,t){let n=U(),r=n.iterShapes(e,t),i=[],a=new Map;for(let e of r){let t=n.hashCode(e,G),r=a.get(t);r?r.some(t=>n.isSame(t,e))||(r.push(e),i.push(e)):(a.set(t,[e]),i.push(e))}return RA(i,t)}function BA(e){let t=FE(e);if(t.edgeToFaces)return t.edgeToFaces;let n=U(),r=new Map,i=n.iterShapes(e.wrapped,`face`);for(let e of i){let t=n.iterShapes(e,`edge`);for(let i of t){let t=n.hashCode(i,G),a=r.get(t);a||(a=[],r.set(t,a)),a.some(t=>n.isSame(t.edge,i)&&n.isSame(t.face,e))||a.push({edge:i,face:e})}}return t.edgeToFaces=r,r}function VA(e,t){let n=U(),r=BA(e),i=n.hashCode(t.wrapped,G),a=r.get(i)??[],o=[],s=new Map;for(let e of a){if(!n.isSame(e.edge,t.wrapped))continue;let r=n.hashCode(e.face,G),i=s.get(r);i?i.some(t=>n.isSame(t,e.face))||(i.push(e.face),o.push(e.face)):(s.set(r,[e.face]),o.push(e.face))}return RA(o,`face`)}function HA(e){return zA(e.wrapped,`edge`)}function UA(e){return zA(e.wrapped,`wire`)}function WA(e){return zA(e.wrapped,`vertex`)}function GA(e,t){let n=U(),r=BA(e),i=zA(t.wrapped,`edge`),a=[],o=new Map;for(let e of i){let i=n.hashCode(e.wrapped,G),s=r.get(i)??[];for(let e of s){if(n.isSame(e.face,t.wrapped))continue;let r=n.hashCode(e.face,G),i=o.get(r);i?i.some(t=>n.isSame(t,e.face))||(i.push(e.face),a.push(e.face)):(o.set(r,[e.face]),a.push(e.face))}}return RA(a,`face`)}function KA(e,t){let n=U(),r=n.iterShapes(e.wrapped,`edge`),i=n.iterShapes(t.wrapped,`edge`),a=new Map;for(let e of i){let t=n.hashCode(e,G),r=a.get(t);r||(r=[],a.set(t,r)),r.push(e)}let o=[];for(let e of r)a.get(n.hashCode(e,2147483647))?.some(t=>n.isSame(e,t))&&o.push(e);return RA(o,`edge`)}function qA(e){let t=U();return t.getNurbsCurveData?t.getNurbsCurveData(e.wrapped):null}function JA(e){let t=U();return t.getNurbsSurfaceData?t.getNurbsSurfaceData(e.wrapped):null}var YA={cut:aA,cutAll:lA,fuse:iA,fuseAll:cA};function XA(e){return{totalInputs:e.totalInputs,batchAttempts:e.batchAttempts,batchSucceeded:e.batchSucceeded,singletonFallbacks:e.singletonFallbacks,failedInputs:[...e.failedInputs].sort((e,t)=>e-t)}}function ZA(e,t,n={}){return QA(YA,e,t,n)}function QA(e,t,n,r={}){if(r.signal?.aborted)throw r.signal.reason;let i={totalInputs:n.length,batchAttempts:0,batchSucceeded:0,singletonFallbacks:0,failedInputs:new Set},a=$A(e,t,n,0,r,i);return A(a)?a:O({shape:a.value,telemetry:XA(i)})}function $A(e,t,n,r,i,a){if(n.length===0)return O(t);if(n.length===1)return ej(e,t,n,r,i,a);a.batchAttempts++;let o=aj(()=>e.cutAll(t,n,i));if(o&&o.ok)return a.batchSucceeded++,o;if(i.signal?.aborted)throw i.signal.reason;let s=Math.floor(n.length/2),c=$A(e,t,n.slice(0,s),r,i,a);return c.ok?$A(e,c.value,n.slice(s),r+s,i,a):c}function ej(e,t,n,r,i,a){a.singletonFallbacks++;let o=Fk(n),s=aj(()=>e.cut(t,o,i));if(s&&s.ok)return s;if(i.signal?.aborted)throw i.signal.reason;return a.failedInputs.add(r),O(t)}function tj(e,t={}){return nj(YA,e,t)}function nj(e,t,n={}){if(n.signal?.aborted)throw n.signal.reason;if(t.length===0)return k(F(N.FUSE_ALL_EMPTY,`fuseAllBisect requires at least one shape`));let r={totalInputs:t.length,batchAttempts:0,batchSucceeded:0,singletonFallbacks:0,failedInputs:new Set},i=rj(e,t,0,n,r);return A(i)?i:O({shape:i.value,telemetry:XA(r)})}function rj(e,t,n,r,i){if(t.length===1)return O(Fk(t));i.batchAttempts++;let a=aj(()=>e.fuseAll(t,r));if(a&&a.ok)return i.batchSucceeded++,a;if(r.signal?.aborted)throw r.signal.reason;let o=Math.floor(t.length/2);return ij(e,rj(e,t.slice(0,o),n,r,i),rj(e,t.slice(o),n+o,r,i),t,n,o,r,i)}function ij(e,t,n,r,i,a,o,s){if(t.ok&&n.ok){s.singletonFallbacks++;let c=aj(()=>e.fuse(t.value,n.value,o));if(c&&c.ok)return c;for(let e=a;e<r.length;e++)s.failedInputs.add(i+e);return t}if(t.ok){for(let e=a;e<r.length;e++)s.failedInputs.add(i+e);return t}if(n.ok){for(let e=0;e<a;e++)s.failedInputs.add(i+e);return n}return t}function aj(e){try{return e()}catch{return null}}function oj(e,t,n){return U().checkBoolean(e.wrapped,t.wrapped,n)}function sj(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function cj(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function lj(e,t,n,r){let i=W(e);if(!wE(i)){let a=e.ShapeType(),o=[`COMPOUND`,`COMPSOLID`,`SOLID`,`SHELL`,`FACE`,`WIRE`,`EDGE`,`VERTEX`,`SHAPE`][a]??`UNKNOWN(${a})`;return i[Symbol.dispose](),k(co(t,`${n}. Got ${o} instead.`,void 0,void 0,r))}return O(i)}function uj(e,t){let n=[],r=new Map;for(let i of e){let e=t(i)??0;typeof e==`number`&&e<=0||Array.isArray(e)&&(e[0]<=0||e[1]<=0)||(n.push(i),r.set(U().hashCode(i.wrapped,G),e))}return n.length===0?null:{edges:n,kernelParam:e=>r.get(U().hashCode(e,2147483647))??1}}function dj(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a}={}){if(i?.aborted)throw i.reason;let o=sj(e,`fuseWithEvolution: first operand`);if(A(o))return o;let s=sj(t,`fuseWithEvolution: second operand`);if(A(s))return s;let c=NO([e,t]),{shape:l,evolution:u}=U().fuseWithHistory(e.wrapped,t.wrapped,c,G,{optimisation:n,simplify:r,fuzzyValue:a}),d=lj(l,`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`,`Common causes: overlapping coplanar faces, zero-thickness geometry, or non-manifold input. Try autoHeal() on inputs first.`);return d.ok?(PO(u,[e,t],d.value),O({shape:d.value,evolution:u})):d}function fj(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a}={}){if(i?.aborted)throw i.reason;let o=sj(e,`cutWithEvolution: base`);if(A(o))return o;let s=sj(t,`cutWithEvolution: tool`);if(A(s))return s;let c=NO([e,t]),{shape:l,evolution:u}=U().cutWithHistory(e.wrapped,t.wrapped,c,G,{optimisation:n,simplify:r,fuzzyValue:a}),d=lj(l,`CUT_NOT_3D`,`Cut did not produce a 3D shape`,`Common causes: tool does not fully intersect the base, or produces a zero-thickness sliver. Ensure the tool extends through the shape.`);return d.ok?(PO(u,[e,t],d.value),O({shape:d.value,evolution:u})):d}function pj(e,t,{simplify:n=!1,signal:r,fuzzyValue:i}={}){if(r?.aborted)throw r.reason;let a=sj(e,`intersectWithEvolution: first operand`);if(A(a))return a;let o=sj(t,`intersectWithEvolution: second operand`);if(A(o))return o;let s=NO([e,t]),{shape:c,evolution:l}=U().intersectWithHistory(e.wrapped,t.wrapped,s,G,{simplify:n,fuzzyValue:i}),u=lj(c,`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`,`Shapes may not overlap. Verify they share a common volume before intersecting.`);return u.ok?(PO(l,[e,t],u.value),O({shape:u.value,evolution:l})):u}function mj(e,t,n){let r=cj(e,`filletWithEvolution: shape`);if(A(r))return r;if(typeof n==`number`&&n<=0)return k(F(`INVALID_FILLET_RADIUS`,`Fillet radius must be positive`,void 0,void 0,`Provide a positive radius value greater than 0`));if(Array.isArray(n)&&(n[0]<=0||n[1]<=0))return k(F(`INVALID_FILLET_RADIUS`,`Fillet radii must both be positive`,void 0,void 0,`Both radius values must be greater than 0`));let i=t??RE(e);if(i.length===0)return k(F(N.FILLET_NO_EDGES,`No edges found for fillet`,void 0,void 0,`Check that the shape has edges, or adjust your edge finder criteria`));try{let t,r;if(typeof n==`function`){let e=uj(i,n);if(!e)return k(F(N.FILLET_NO_EDGES,`No edges with positive radius for fillet`,void 0,void 0,`Check that the radius callback returns positive values`));t=e.edges,r=e.kernelParam}else t=[...i],r=n;let a=NO([e]),{shape:o,evolution:s}=U().filletWithHistory(e.wrapped,t.map(e=>e.wrapped),r,a,G),c=W(o);return wE(c)?(PO(s,[e],c),O({shape:c,evolution:s})):k(P(N.FILLET_NOT_3D,`Fillet result is not a 3D shape`))}catch(e){return k(P(`FILLET_FAILED`,`Fillet operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`fillet`,edgeCount:i.length,radius:n}))}}function hj(e,t,n){let r=cj(e,`chamferWithEvolution: shape`);if(A(r))return r;if(typeof n==`number`&&n<=0)return k(F(`INVALID_CHAMFER_DISTANCE`,`Chamfer distance must be positive`,void 0,void 0,`Provide a positive distance value greater than 0`));if(Array.isArray(n)&&(n[0]<=0||n[1]<=0))return k(F(`INVALID_CHAMFER_DISTANCE`,`Chamfer distances must both be positive`,void 0,void 0,`Both distance values must be greater than 0`));let i=t??RE(e);if(i.length===0)return k(F(N.CHAMFER_NO_EDGES,`No edges found for chamfer`));try{let t,r;if(typeof n==`function`){let e=uj(i,n);if(!e)return k(F(N.CHAMFER_NO_EDGES,`No edges with positive distance for chamfer`));t=e.edges,r=e.kernelParam}else t=[...i],r=n;let a=NO([e]),{shape:o,evolution:s}=U().chamferWithHistory(e.wrapped,t.map(e=>e.wrapped),r,a,G),c=W(o);return wE(c)?(PO(s,[e],c),O({shape:c,evolution:s})):k(P(N.CHAMFER_NOT_3D,`Chamfer result is not a 3D shape`))}catch(e){return k(P(`CHAMFER_FAILED`,`Chamfer operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`chamfer`,edgeCount:i.length,distance:n}))}}function gj(e,t,n,r=.001){let i=cj(e,`shellWithEvolution: shape`);if(A(i))return i;if(n<=0)return k(F(`INVALID_THICKNESS`,`Shell thickness must be positive`));if(t.length===0)return k(F(`NO_FACES`,`At least one face must be specified for shell`));try{let i=NO([e]),{shape:a,evolution:o}=U().shellWithHistory(e.wrapped,t.map(e=>e.wrapped),n,i,G,r),s=W(a);return wE(s)?(PO(o,[e],s),O({shape:s,evolution:o})):k(P(`SHELL_RESULT_NOT_3D`,`Shell result is not a 3D shape`))}catch(e){return k(P(`SHELL_FAILED`,`Shell operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`shell`,faceCount:t.length,thickness:n}))}}function _j(e,t,n){try{let r=W(U().positionOnCurve(e.wrapped,t.wrapped,n));return wE(r)?O(r):k(P(N.POSITION_ON_CURVE_FAILED,`positionOnCurve did not produce a 3D shape`))}catch(e){return k(P(N.POSITION_ON_CURVE_FAILED,`Failed to position shape on curve at param ${n}`,e))}}function vj(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function yj(e,t){if(typeof e==`number`&&e<=0)return k(F(t.code,t.scalar,void 0,void 0,t.scalarHint));if(Array.isArray(e)&&(e[0]<=0||e[1]<=0))return k(F(t.code,t.pair,void 0,void 0,t.pairHint))}function bj(e,t){let n=[],r=new Map;for(let i of e){let e=t(i)??0;typeof e==`number`&&e<=0||Array.isArray(e)&&(e[0]<=0||e[1]<=0)||(n.push(i),r.set(U().hashCode(i.wrapped,G),e))}return n.length===0?null:{edges:n,kernelParam:e=>{let t=r.get(U().hashCode(e,G));if(t===void 0)throw Error(`fillet/chamfer: edge hash not found — possible hash collision`);return t}}}function xj(e,t,n,r,i){let a=W(t);return wE(a)?(PO(e,n,a),O(a)):k(P(r,i))}function Sj(e,t){if(typeof t!=`function`)return{filteredFaces:[...e],kernelAngle:t};let n=[],r=new Map;for(let i of e){let e=t(i);e===null||e===0||Math.abs(e)>=90||(n.push(i),r.set(U().hashCode(i.wrapped,G),e))}return{filteredFaces:n,kernelAngle:e=>{let t=r.get(U().hashCode(e,G));if(t===void 0)throw Error(`draft: face hash not found — possible hash collision`);return t}}}function Cj(e,t){let n=vj(e,`thicken: shape`);if(A(n))return n;try{let n=NO([e]),{shape:r,evolution:i}=U().thickenWithHistory(e.wrapped,t,n,G),a=W(r);return PO(i,[e],a),O(a)}catch(e){return k(P(`THICKEN_FAILED`,`Thicken operation failed: ${e instanceof Error?e.message:String(e)}`,e))}}function wj(e,t,n){let r=vj(e,`fillet: shape`);if(A(r))return r;let i=yj(n,{code:`INVALID_FILLET_RADIUS`,scalar:`Fillet radius must be positive`,pair:`Fillet radii must both be positive`,scalarHint:`Provide a positive radius value greater than 0`,pairHint:`Both radius values must be greater than 0`});if(i)return i;let a=t??RE(e);if(a.length===0)return k(F(N.FILLET_NO_EDGES,`No edges found for fillet`,void 0,void 0,`Check that the shape has edges, or adjust your edge finder criteria`));if(typeof n==`function`){let e=bj(a,n);return e?O({filteredEdges:e.edges,kernelRadius:e.kernelParam,selectedCount:a.length}):k(F(N.FILLET_NO_EDGES,`No edges with positive radius for fillet`,void 0,void 0,`Check that the radius callback returns positive values`))}return O({filteredEdges:[...a],kernelRadius:n,selectedCount:a.length})}function Tj(e,t,n,{trackEvolution:r=!0}={}){let i=wj(e,t,n);if(A(i))return i;let{filteredEdges:a,kernelRadius:o,selectedCount:s}=i.value;try{let t=a.map(e=>e.wrapped);if(!r){let n=W(U().fillet(e.wrapped,t,o));return wE(n)?O(n):k(P(N.FILLET_NOT_3D,`Fillet result is not a 3D shape`))}let n=NO([e]),{shape:i,evolution:s}=U().filletWithHistory(e.wrapped,t,o,n,G);return xj(s,i,[e],N.FILLET_NOT_3D,`Fillet result is not a 3D shape`)}catch(e){return k(P(`FILLET_FAILED`,`Fillet operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`fillet`,edgeCount:s,radius:n}))}}function Ej(e,t,n){let r=vj(e,`chamfer: shape`);if(A(r))return r;let i=yj(n,{code:`INVALID_CHAMFER_DISTANCE`,scalar:`Chamfer distance must be positive`,pair:`Chamfer distances must both be positive`,scalarHint:`Provide a positive distance value greater than 0`,pairHint:`Both distance values must be greater than 0`});if(i)return i;let a=t??RE(e);if(a.length===0)return k(F(N.CHAMFER_NO_EDGES,`No edges found for chamfer`));try{let t,r;if(typeof n==`function`){let e=bj(a,n);if(!e)return k(F(N.CHAMFER_NO_EDGES,`No edges with positive distance for chamfer`));t=e.edges,r=e.kernelParam}else t=[...a],r=n;let i=NO([e]),{shape:o,evolution:s}=U().chamferWithHistory(e.wrapped,t.map(e=>e.wrapped),r,i,G);return xj(s,o,[e],N.CHAMFER_NOT_3D,`Chamfer result is not a 3D shape`)}catch(e){return k(P(`CHAMFER_FAILED`,`Chamfer operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`chamfer`,edgeCount:a.length,distance:n}))}}function Dj(e,t,n,r=.001,{trackEvolution:i=!0}={}){let a=vj(e,`shell: shape`);if(A(a))return a;if(n<=0)return k(F(`INVALID_THICKNESS`,`Shell thickness must be positive`));if(t.length===0)return k(F(`NO_FACES`,`At least one face must be specified for shell`));try{if(!i){let i=W(U().shell(e.wrapped,t.map(e=>e.wrapped),n,r));return wE(i)?O(i):k(P(`SHELL_RESULT_NOT_3D`,`Shell result is not a 3D shape`))}let a=NO([e]),{shape:o,evolution:s}=U().shellWithHistory(e.wrapped,t.map(e=>e.wrapped),n,a,G,r),c=W(o);return wE(c)?(PO(s,[e],c),O(c)):k(P(`SHELL_RESULT_NOT_3D`,`Shell result is not a 3D shape`))}catch(e){return k(P(`SHELL_FAILED`,`Shell operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`shell`,faceCount:t.length,thickness:n}))}}function Oj(e,t,n=1e-6){let r=vj(e,`offset: shape`);if(A(r))return r;if(Math.abs(t)<1e-10)return k(F(`ZERO_OFFSET`,`Offset distance cannot be zero`));try{let r=NO([e]),{shape:i,evolution:a}=U().offsetWithHistory(e.wrapped,t,r,G,n),o=W(i);return wE(o)?(PO(a,[e],o),O(o)):k(P(`OFFSET_RESULT_NOT_3D`,`Offset result is not a 3D shape`))}catch(e){return k(P(`OFFSET_FAILED`,`Offset operation failed: ${e instanceof Error?e.message:String(e)}`,e))}}function kj(e,t,n){let r=vj(e,`draft: shape`);if(A(r))return r;if(typeof n==`number`){if(Math.abs(n)<1e-10)return k(F(N.DRAFT_INVALID_ANGLE,`Draft angle cannot be zero`,void 0,void 0,`Provide a non-zero angle in degrees`));if(Math.abs(n)>=90)return k(F(N.DRAFT_INVALID_ANGLE,`Draft angle must be between -90 and 90 degrees (exclusive)`,void 0,void 0,`Typical draft angles are 1-5 degrees for injection molding`))}if(t.length===0)return k(F(N.DRAFT_NO_FACES,`No faces specified for draft`,void 0,void 0,`Select at least one face to apply the draft angle to`))}function Aj(e,t,n,r,i){let a=kj(e,t,i);if(a)return a;try{let{filteredFaces:a,kernelAngle:o}=Sj(t,i);if(a.length===0)return k(F(N.DRAFT_NO_FACES,`No faces with valid draft angle`,void 0,void 0,`Check that the angle callback returns non-zero values between -90 and 90 degrees`));let s=NO([e]),{shape:c,evolution:l}=U().draftWithHistory(e.wrapped,a.map(e=>e.wrapped),[n[0],n[1],n[2]],[r[0],r[1],r[2]],o,s,G);return xj(l,c,[e],N.DRAFT_NOT_3D,`Draft result is not a 3D shape`)}catch(e){let n=e instanceof Error?e.message:String(e);return k(P(N.DRAFT_FAILED,`Draft operation failed: ${n}`,e,{operation:`draft`,faceCount:t.length,angle:i}))}}function jj(e,t,n){if(n.length===0)return k(F(N.VARIABLE_FILLET_FAILED,`radii must contain at least one radius spec`));for(let e of n)if(e.radius<=0)return k(F(N.VARIABLE_FILLET_FAILED,`All radius values must be positive`));let r=U();try{let i=JSON.stringify({edge:r.hashCode(t.wrapped,G),radii:n.map(e=>({param:e.param,radius:e.radius}))}),a=W(r.filletVariable(e.wrapped,i));return wE(a)?SE(a)?O(a):(a[Symbol.dispose](),k(P(N.VARIABLE_FILLET_FAILED,`Variable-radius fillet did not produce a solid`))):(a[Symbol.dispose](),k(P(N.VARIABLE_FILLET_FAILED,`Variable-radius fillet did not produce a 3D shape`)))}catch(e){return k(P(N.VARIABLE_FILLET_FAILED,`Variable-radius fillet failed`,e))}}function Mj(e){return tD(e)}function Nj(e){if(!SE(e))return k(F(`NOT_A_SOLID`,`Input shape is not a solid`));let t=Mj(e);try{let n=U().healSolid(e.wrapped);if(!n)return t?O(e):k(P(N.HEAL_NO_EFFECT,`Solid healing had no effect — shape is still invalid`));let r=W(n);return SE(r)?(LE(r),Mj(r)?O(r):k(P(`HEAL_SOLID_INCOMPLETE`,`Healed result is still invalid after ShapeFix_Solid`))):k(P(`HEAL_RESULT_NOT_SOLID`,`Healed result is not a solid`))}catch(e){return k(P(`HEAL_SOLID_FAILED`,`Solid healing failed`,e))}}function Pj(e){if(!bE(e))return k(F(`NOT_A_FACE`,`Input shape is not a face`));try{let t=W(U().healFace(e.wrapped));return bE(t)?O(t):k(P(`HEAL_RESULT_NOT_FACE`,`Healed result is not a face`))}catch(e){return k(P(`HEAL_FACE_FAILED`,`Face healing failed`,e))}}function Fj(e,t){if(!yE(e))return k(F(`NOT_A_WIRE`,`Input shape is not a wire`));try{let n=W(U().healWire(e.wrapped,t?.wrapped));return yE(n)?O(n):k(P(`HEAL_RESULT_NOT_WIRE`,`Healed result is not a wire`))}catch(e){return k(P(`HEAL_WIRE_FAILED`,`Wire healing failed`,e))}}function Ij(e){return SE(e)?Nj(e):bE(e)?Pj(e):yE(e)?Fj(e):O(e)}function Lj(e,t){let n=t?.fixWires!==!1,r=t?.fixFaces!==!1,i=t?.fixSolids!==!1,a=t?.fixSelfIntersection===!0,o=t?.sewTolerance,s=[],c=[];if(Mj(e))return O({shape:e,report:{isValid:!0,alreadyValid:!0,wiresHealed:0,facesHealed:0,solidHealed:!1,steps:[`Shape already valid`],diagnostics:[{name:`validation`,attempted:!0,succeeded:!0}]}});s.push(`Shape invalid — applying shape-level healing`);let l=BE(e).length,u=zE(e).length,d=e,f=!1;if(o!==void 0)try{d=W(U().sew([d.wrapped],o)),s.push(`Applied sewing with tolerance ${o}`),c.push({name:`sew`,attempted:!0,succeeded:!0,detail:`tolerance=${o}`})}catch(e){let t=e instanceof Error?e.message:String(e);s.push(`Sewing failed: ${t}`),c.push({name:`sew`,attempted:!0,succeeded:!1,detail:t})}if(a&&n){let e=BE(d),t=0;for(let n of e)try{U().fixSelfIntersection(n.wrapped),t++}catch{}s.push(`Self-intersection fix: ${t}/${e.length} wires`),c.push({name:`fixSelfIntersection`,attempted:!0,succeeded:t>0,detail:`${t}/${e.length} wires fixed`})}if(SE(d)&&i||bE(d)&&r||yE(d)&&n){let t=Ij(d);Na(t)?(d=t.value,SE(e)?(f=!0,s.push(`Applied ShapeFix_Solid`),c.push({name:`healSolid`,attempted:!0,succeeded:!0})):bE(e)?(s.push(`Applied ShapeFix_Face`),c.push({name:`healFace`,attempted:!0,succeeded:!0})):(s.push(`Applied ShapeFix_Wire`),c.push({name:`healWire`,attempted:!0,succeeded:!0}))):(s.push(`Shape-level healing failed`),c.push({name:`healShape`,attempted:!0,succeeded:!1}))}else c.push({name:`healShape`,attempted:!1,succeeded:!1,detail:`skipped by options`});let p=BE(d).length,m=zE(d).length,h=Math.abs(p-l),g=Math.abs(m-u);h>0&&s.push(`Wire count changed by ${h}`),g>0&&s.push(`Face count changed by ${g}`);let _=Mj(d);return s.push(_?`Final validation: valid`:`Final validation: still invalid`),c.push({name:`finalValidation`,attempted:!0,succeeded:_}),O({shape:d,report:{isValid:_,alreadyValid:!1,wiresHealed:h,facesHealed:g,solidHealed:f,steps:s,diagnostics:c}})}function Rj(e){try{return O(W(U().fixShape(e.wrapped)))}catch(e){return k(P(N.FIX_SHAPE_FAILED,`ShapeFix_Shape failed`,e))}}function zj(e){try{let t=W(U().solidFromShell(e.wrapped));return SE(t)?Mj(t)?O(t):k(P(N.SOLID_FROM_SHELL_FAILED,`solidFromShell produced an invalid solid`)):k(P(N.SOLID_FROM_SHELL_FAILED,`solidFromShell did not produce a solid`))}catch(e){return k(P(N.SOLID_FROM_SHELL_FAILED,`Failed to create solid from shell`,e))}}function Bj(e){try{let t=W(U().fixSelfIntersection(e.wrapped));return yE(t)?O(t):k(P(N.FIX_SELF_INTERSECTION_FAILED,`Result is not a wire`))}catch(e){return k(P(N.FIX_SELF_INTERSECTION_FAILED,`Failed to fix wire self-intersection`,e))}}function Vj(e,{profile:t,endFactor:n=1}){return e<1e-10?k(F(`INVALID_EXTRUSION_LENGTH`,`Extrusion length too small (< 1e-10)`)):t!==`s-curve`&&t!==`linear`?k(F(`UNSUPPORTED_PROFILE`,`Unsupported extrusion profile: ${String(t)}`)):O(U().buildExtrusionLaw(t,e,n).Trim(0,e,1e-6))}function Hj(e,t){let n=U(),r=n.makeLineEdge([...e],[...t]);return W(n.makeWire([r]))}function Uj(e,t,n,r,i,a=!1){return W(U().makeHelixWire(e,t,n,[...r],[...i],a))}function Wj(e,t,n={},r=!1){if(n.mode===`simple`&&!r){let n=W(U().simplePipe(e.wrapped,t.wrapped));return wE(n)?O(n):k(co(`SWEEP_NOT_3D`,`Simple pipe did not produce a 3D shape`))}let{frenet:i=!1,auxiliarySpine:a,law:o=null,transitionMode:s=`right`,withContact:c,support:l,forceProfileSpineOthogonality:u,tolerance:d,boundTolerance:f,angularTolerance:p,maxDegree:m,maxSegments:h}=n,g=U(),_=s===`round`?!0:!!u,v=g.sweepPipeShell(e.wrapped,t.wrapped,{transitionMode:s,contact:!!c,correction:_,frenet:i,shellMode:r,...a?.wrapped?{auxiliary:a.wrapped}:{},...o===null?{}:{law:o},...l===null?{}:{support:l},tolerance:d,boundTolerance:f,angularTolerance:p,maxDegree:m,maxSegments:h});if(r&&typeof v==`object`&&`firstShape`in v){let e=W(v.shape);if(!wE(e))return k(co(`SWEEP_NOT_3D`,`Sweep did not produce a 3D shape`));let t=W(v.firstShape),n=W(v.lastShape);return yE(t)?yE(n)?O([e,t,n]):k(co(`SWEEP_END_NOT_WIRE`,`Sweep did not produce an end Wire`)):k(co(`SWEEP_START_NOT_WIRE`,`Sweep did not produce a start Wire`))}let y=W(v);return wE(y)?O(y):k(co(`SWEEP_NOT_3D`,`Sweep did not produce a 3D shape`))}function Gj(e,t,n,r){return Wj(e,Hj(t,uD(t,n)),{support:r})}function Kj(e,t,n,r,i=!1){let a=gD(n);if(a<1e-10)return k(F(`ZERO_LENGTH_EXTRUSION`,`Extrusion vector cannot have zero length`));let o=Hj(t,uD(t,n)),s=null;if(r){let e=Vj(a,r);if(A(e))return e;s=e.value}return Wj(e,o,{law:s},i)}function qj(e,t,n,r,i,a=!1){if(Math.abs(t)<1e-10)return k(F(`ZERO_TWIST_ANGLE`,`Twist angle cannot be zero`));let o=gD(r);if(o<1e-10)return k(F(`ZERO_LENGTH_EXTRUSION`,`Extrusion vector cannot have zero length`));let s=Hj(n,uD(n,r)),c=t<0,l=Uj(360/Math.abs(t)*o,o,1,n,r,c),u=null;if(i){let e=Vj(o,i);if(A(e))return e;u=e.value}return Wj(e,s,{auxiliarySpine:l,law:u},a)}function Jj(e){let t=e.map(e=>e.location);for(let e=0;e<t.length;e++){let n=t[e];if(n!==void 0&&(n<0||n>1))return F(N.MULTI_SWEEP_FAILED,`Section ${e} location ${n} is out of range [0, 1]`)}let n=t.filter(e=>e!==void 0);for(let e=1;e<n.length;e++)if((n[e]??0)<=(n[e-1]??0))return F(N.MULTI_SWEEP_FAILED,`Section locations must be strictly increasing`)}function Yj(e,t,n){let[r,i]=n.curveParameters(t.wrapped),a=i-r,o=Array(e.length);for(let t=0;t<e.length;t++){let n=e[t]?.location;o[t]=n===void 0?NaN:r+n*a}let s=-1,c=r;for(let t=0;t<=e.length;t++){let n=t===e.length;if(!n&&!Number.isNaN(o[t]??NaN)||n){let e=n?i:o[t]??i,a=t-s-1;for(let t=1;t<=a;t++)o[s+t]=c+t/(a+1)*(e-c);n||(s=t,c=o[t]??r)}}for(let e=1;e<o.length;e++)if((o[e]??0)<=(o[e-1]??0))return k(F(N.MULTI_SWEEP_FAILED,`Computed section parameters are not strictly increasing at index ${e} (${o[e-1]?.toFixed(4)} >= ${o[e]?.toFixed(4)})`));return O(o)}function Xj(e,t,n){if(e.length<2)return k(F(N.MULTI_SWEEP_INSUFFICIENT_SECTIONS,`Multi-section sweep requires at least 2 sections, got ${e.length}`));let{solid:r=!0,ruled:i=!1,tolerance:a=1e-6}=n??{},o=Jj(e);if(o)return k(o);try{let n=U(),o=Yj(e,t,n);if(A(o))return o;let s=o.value,c=[];for(let r=0;r<e.length;r++){let i=s[r],a=e[r];if(i===void 0||a===void 0)continue;let o=n.positionOnCurve(a.wire.wrapped,t.wrapped,i);c.push(n.downcast(o,`wire`))}let l=W(n.loftAdvanced(c,{solid:r,ruled:i,tolerance:a}));return wE(l)?O(l):k(co(`MULTI_SWEEP_NOT_3D`,`Multi-section sweep did not produce a 3D shape`))}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.MULTI_SWEEP_FAILED,`Multi-section sweep failed: ${t}`,e,void 0,`Common causes: profile too large for path curvature, self-intersecting result, or discontinuous path. Try simplifying the profile or path.`))}}function Zj(e,t,n,r={}){let{transition:i=`transformed`,solid:a=!0,tolerance:o}=r;try{let r=U(),s=!a,c=n.length>0?n[0]?.wrapped:void 0,l=r.sweepPipeShell(e.wrapped,t.wrapped,{transitionMode:i,...c?{auxiliary:c}:{},shellMode:s,...o===void 0?{}:{tolerance:o,boundTolerance:o}}),u=W(typeof l==`object`&&`shape`in l?l.shape:l);return wE(u)?O(u):k(co(`GUIDED_SWEEP_NOT_3D`,`Guided sweep did not produce a 3D shape`))}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.GUIDED_SWEEP_FAILED,`Guided sweep failed: ${t}`,e,void 0,`Common causes: profile too large for path curvature, self-intersecting result, or discontinuous path. Try simplifying the profile or path.`))}}function Qj(e,t){if(U().isNull(e.wrapped))return k(F(N.NULL_SHAPE_INPUT,`extrude: face is a null shape`));if(gD(t)<1e-10)return k(F(`EXTRUDE_ZERO_VECTOR`,`extrude: extrusion vector has zero length`));try{let n=U(),r=gD(t),i=yD(t),a=n.extrude(e.wrapped,[...i],r);return O(mE(n.downcast(a,`solid`)))}catch(e){return k(P(`EXTRUDE_FAILED`,`Extrusion operation failed`,e,{operation:`extrude`,vectorLength:gD(t)}))}}function $j(e,t=[0,0,0],n=[0,0,1],r=360){if(U().isNull(e.wrapped))return k(F(N.NULL_SHAPE_INPUT,`revolve: face is a null shape`));try{let i=W(U().revolveVec(e.wrapped,[...t],[...n],r));return wE(i)?O(i):k(co(`REVOLUTION_NOT_3D`,`Revolution did not produce a 3D shape`))}catch(e){return k(P(`REVOLVE_FAILED`,`Revolution operation failed`,e,{operation:`revolve`,angle:r}))}}function eM(e){if(e.length===0)return O([]);let t=U(),n=[];for(let t=0;t<e.length;t++){let r=e[t];if(!r)continue;let i=typeof r.height==`number`?[0,0,r.height]:r.height,a=gD(i);if(a<1e-10)return k(F(`EXTRUDE_ALL_ZERO_VECTOR`,`extrudeAll: entry ${t} has zero-length extrusion vector`));let o=[...yD(i)];n.push({face:r.face.wrapped,direction:o,length:a})}try{return O((t.extrudeBatch?.(n)??n.map(e=>t.extrude(e.face,e.direction,e.length))).map(e=>mE(t.downcast(e,`solid`))))}catch(e){return k(P(`EXTRUDE_ALL_FAILED`,`Batch extrusion operation failed`,e))}}function tM(e,{ruled:t=!0,startPoint:n,endPoint:r,tolerance:i=1e-6}={},a=!1){if(e.length===0&&!n&&!r)return k(F(`LOFT_EMPTY`,`Loft requires at least one wire or start/end point`));let o=U(),s=n?o.makeVertex(...oD(n)):void 0,c=r?o.makeVertex(...oD(r)):void 0;try{let n=W(o.loftAdvanced(e.map(e=>e.wrapped),{solid:!a,ruled:t,tolerance:i,...s?{startVertex:s}:{},...c?{endVertex:c}:{}}));return wE(n)?O(n):k(co(`LOFT_NOT_3D`,`Loft did not produce a 3D shape`))}catch(e){return k(P(`LOFT_FAILED`,`Loft operation failed`,e,void 0,`Common causes: wire profiles with different edge counts, self-intersecting result, or profiles too far apart. Ensure profiles are compatible and ordered.`))}}function nM(e){if(e.length===0)return O([]);let t=U(),n=[],r=e.map(e=>{let r=e.startPoint?t.makeVertex(...oD(e.startPoint)):void 0,i=e.endPoint?t.makeVertex(...oD(e.endPoint)):void 0;return r&&n.push(r),i&&n.push(i),{wires:e.wires.map(e=>e.wrapped),solid:!0,ruled:e.ruled??!0,tolerance:e.tolerance??1e-6,startVertex:r,endVertex:i}});try{let e=t.loftBatch?.(r)??r.map(e=>t.loftAdvanced(e.wires,{solid:e.solid,ruled:e.ruled,tolerance:e.tolerance,startVertex:e.startVertex,endVertex:e.endVertex})),n=[];for(let t of e){let e=W(t);if(!wE(e))return k(co(`LOFT_ALL_NOT_3D`,`Batch loft entry did not produce a 3D shape`));n.push(e)}return O(n)}catch(e){return k(P(`LOFT_ALL_FAILED`,`Batch loft operation failed`,e))}finally{for(let e of n)t.dispose(e)}}function rM(e,t,n,r){let i=mE(U().makeBox(e,t,n)),a=r?.at??(r?.centered?[0,0,0]:void 0);return a?IO(i,[a[0]-e/2,a[1]-t/2,a[2]-n/2]):i}function iM(e,t,n){let r=n?.at??[0,0,0],i=n?.axis??[0,0,1],a=wA(e,t,r,i);if(n?.centered){let e=[-i[0]*t*.5,-i[1]*t*.5,-i[2]*t*.5];a=IO(a,e)}return a}function aM(e,t){let n=TA(e);return t?.at&&(n=IO(n,t.at)),n}function oM(e,t,n,r){let i=r?.at??[0,0,0],a=r?.axis??[0,0,1],o=EA(e,t,n,i,a);if(r?.centered){let e=[-a[0]*n*.5,-a[1]*n*.5,-a[2]*n*.5];o=IO(o,e)}return o}function sM(e,t,n){return DA(e,t,n?.at??[0,0,0],n?.axis??[0,0,1])}function cM(e,t,n,r){let i=OA(e,t,n);return r?.at&&(i=IO(i,r.at)),i}function lM(e,t){return zk(e,t)}function uM(e,t){let n=t?.axis??[0,0,1];return Bk(e,t?.at??[0,0,0],n)}function dM(e,t,n){let r=n?.axis??[0,0,1];return Vk(e,t,n?.at??[0,0,0],r,n?.xDir)}function fM(e,t,n,r){return Hk(e,t,n,r?.at??[0,0,0],r?.axis??[0,0,1],r?.lefthand??!1)}function pM(e,t,n){return Uk(e,t,n)}function mM(e,t,n,r,i){let a=i?.axis??[0,0,1];return Wk(e,t,n*iD,r*iD,i?.at??[0,0,0],a,i?.xDir)}function hM(e,t){return Gk(e,t)}function gM(e){return qk(e)}function _M(e,t,n){return Jk(e,t,n)}function vM(e){return Yk(e)}function yM(e){return Ia(Yk(e),e=>XT(e)?O(e):k(F(`WIRE_NOT_CLOSED`,`Assembled wire is not closed: start and end points do not coincide`)))}function bM(e,t){return Xk(e,t)}function xM(e){return $k(e)}function SM(e,t){return Qk(e,t)}function CM(e){return tA(e)}function wM(e){return kA(e)}function TM(e){return jA(e)}function EM(e){return MA(e)}function DM(e,t,n){return AA(e,t,n)}function OM(e,t){return CA(e,t)}function kM(e,t){return eA(e,t)}function AM(){return`10000000-1000-4000-8000-100000000000`.replace(/[018]/g,e=>(Number(e)^crypto.getRandomValues(new Uint8Array(1))[0]&15>>Number(e)/4).toString(16))}function jM(e=[]){let t=e.map(({shape:e,name:t,color:n,alpha:r})=>{let i=n??`#f00`;i.indexOf(`#`)===0&&(i=i.slice(1)),i.length===3&&(i=i.replace(/([0-9a-f])/gi,`$1$1`));let a=parseInt(i.substring(0,2),16),o=parseInt(i.substring(2,4),16),s=parseInt(i.substring(4,6),16),c=Math.round((r??1)*255);return{shape:e.wrapped,name:t??AM(),color:[a,o,s,c]}});return PT(U().createXCAFDocument(t))}function MM(e=[],{unit:t,modelUnit:n}={}){let r=e=>{let t=e;return t.indexOf(`#`)===0&&(t=t.slice(1)),t.length===3&&(t=t.replace(/([0-9a-f])/gi,`$1$1`)),[parseInt(t.substring(0,2),16),parseInt(t.substring(2,4),16),parseInt(t.substring(4,6),16)]},i=U(),a=e.map(({shape:e,name:t,color:n,alpha:i})=>{let[a,o,s]=r(n??`#f00`);return{shape:e.wrapped,name:t??AM(),color:[a,o,s,Math.round((i??1)*255)]}}),o=i.createXCAFDocument(a);try{let e=i.writeXCAFToSTEP(o,{unit:t,modelUnit:n});return e?O(new Blob([e],{type:`application/STEP`})):k(fo(`STEP_EXPORT_FAILED`,`Failed to write STEP file`))}finally{o.delete()}}function NM(e,t,n,r,i){if(n<1)return k(F(`PATTERN_INVALID_COUNT`,`Pattern count must be at least 1`));if(n===1)return O(e);if(xD(t))return k(F(`PATTERN_ZERO_DIRECTION`,`Pattern direction cannot be zero`));let a=yD(t);return cA(U().linearPattern(e.wrapped,[...a],r,n).map(e=>W(e)),{optimisation:`sameFace`,...i,unsafe:!0})}function PM(e,t,n,r=360,i=[0,0,0],a){if(n<1)return k(F(`PATTERN_INVALID_COUNT`,`Pattern count must be at least 1`));if(n===1)return O(e);if(xD(t))return k(F(`PATTERN_ZERO_AXIS`,`Pattern axis cannot be zero`));let o=r/n;return cA(U().circularPattern(e.wrapped,[...i],[...t],o,n).map(e=>W(e)),{optimisation:`sameFace`,...a,unsafe:!0})}function FM(e,t={}){return{name:e,children:[],...t.shape===void 0?{}:{shape:t.shape},...t.translate===void 0?{}:{translate:t.translate},...t.rotate===void 0?{}:{rotate:t.rotate},...t.metadata===void 0?{}:{metadata:t.metadata}}}function IM(e,t){return{...e,children:[...e.children,t]}}function LM(e,t){let n=e.children.findIndex(e=>e.name===t);if(n===-1)return e;let r=[...e.children];return r.splice(n,1),{...e,children:r}}function RM(e,t){return{...e,...t.shape===void 0?{}:{shape:t.shape},...t.translate===void 0?{}:{translate:t.translate},...t.rotate===void 0?{}:{rotate:t.rotate},...t.metadata===void 0?{}:{metadata:t.metadata}}}function zM(e,t){if(e.name===t)return e;for(let n of e.children){let e=zM(n,t);if(e)return e}}function BM(e,t,n=0){t(e,n);for(let r of e.children)BM(r,t,n+1)}function VM(e){let t=1;for(let n of e.children)t+=VM(n);return t}function HM(e){let t=[];return BM(e,e=>{e.shape&&t.push(e.shape)}),t}function UM(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function WM(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function GM(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function KM(e){return GM(WM(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function qM(e,t){let[n,r,i,a]=e,o=2*(i*t[2]-a*t[1]),s=2*(a*t[0]-r*t[2]),c=2*(r*t[1]-i*t[0]);return[t[0]+n*o+(i*c-a*s),t[1]+n*s+(a*o-r*c),t[2]+n*c+(r*s-i*o)]}function JM(e,t){let n=t/2,r=Math.sin(n),i=GM(e);return[Math.cos(n),i[0]*r,i[1]*r,i[2]*r]}function YM(e,t){let n=GM(e),r=GM(t),i=UM(n,r);if(i>=.999999999)return[1,0,0,0];if(i<=-.999999999)return JM(KM(n),Math.PI);let a=WM(n,r),o=Math.hypot(1+i,a[0],a[1],a[2])||1;return[(1+i)/o,a[0]/o,a[1]/o,a[2]/o]}function XM(e,t){let[n,r,i,a]=e,[o,s,c,l]=t;return[n*o-r*s-i*c-a*l,n*s+r*o+i*l-a*c,n*c-r*l+i*o+a*s,n*l+r*c-i*s+a*o]}var ZM=Math.PI/180;function QM(e,t,n){return Math.min(n,Math.max(t,e))}function $M(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function eN(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function tN(e){return $M(eN(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function nN(e,t,n,r,i){let a=n.min??r,o=n.max??i,s=Math.min(a,o),c=Math.max(a,o);return{kind:e,axis:$M(t),min:s,max:c,value:QM(n.value??0,s,c)}}function rN(e,t,n,r,i){let a=i[0]??{kind:`rotation`,axis:[0,0,1],min:0,max:0,value:0};return{type:e,parent:t,child:n,axis:{origin:r.origin,direction:$M(r.direction)},min:a.min,max:a.max,value:a.value,dofs:i}}function iN(e,t,n,r={}){return rN(`revolute`,e,t,n,[nN(`rotation`,n.direction,r,-180,180)])}function aN(e,t,n,r={}){return rN(`prismatic`,e,t,n,[nN(`translation`,n.direction,r,0,100)])}function oN(e,t,n,r={}){return rN(`cylindrical`,e,t,n,[nN(`rotation`,n.direction,r.rotation??{},-180,180),nN(`translation`,n.direction,r.translation??{},0,100)])}function sN(e,t,n,r={}){let i=$M(n.direction),a;if(r.uDirection){let e=r.uDirection,t=e[0]*i[0]+e[1]*i[1]+e[2]*i[2],n=[e[0]-t*i[0],e[1]-t*i[1],e[2]-t*i[2]];a=Math.hypot(n[0],n[1],n[2])<1e-9?tN(i):$M(n)}else a=tN(i);let o=$M(eN(i,a));return rN(`planar`,e,t,{origin:n.origin,direction:i},[nN(`translation`,a,r.u??{},-100,100),nN(`translation`,o,r.v??{},-100,100),nN(`rotation`,i,r.rotation??{},-180,180)])}function cN(e,t,n,r={}){return rN(`spherical`,e,t,{origin:n,direction:[0,0,1]},[nN(`rotation`,[1,0,0],r.x??{},-180,180),nN(`rotation`,[0,1,0],r.y??{},-180,180),nN(`rotation`,[0,0,1],r.z??{},-180,180)])}function lN(e,t){let n=e.dofs.map((e,n)=>{let r=t[n];return r===void 0?e:{...e,value:QM(r,e.min,e.max)}}),r=n[0];return r?{...e,dofs:n,value:r.value}:{...e,dofs:n}}function uN(e,t){return lN(e,[t])}function dN(e,t,n){if(t.kind===`translation`)return{position:[t.axis[0]*n,t.axis[1]*n,t.axis[2]*n],rotation:[1,0,0,0]};let r=JM(t.axis,n*ZM),i=qM(r,e);return{position:[e[0]-i[0],e[1]-i[1],e[2]-i[2]],rotation:r}}function fN(e,t=e.value){let n=Array.isArray(t)?t:void 0,r=n?void 0:t,i=e.axis.origin,a=mN;for(let t=0;t<e.dofs.length;t++){let o=e.dofs[t];if(!o)continue;let s=n?n[t]??o.value:t===0?r??o.value:o.value;a=hN(a,dN(i,o,QM(s,o.min,o.max)))}return a}function pN(e,t){let n=e.joints??[];return{...e,joints:[...n,t]}}var mN={position:[0,0,0],rotation:[1,0,0,0]};function hN(e,t){let n=qM(e.rotation,t.position);return{position:[e.position[0]+n[0],e.position[1]+n[1],e.position[2]+n[2]],rotation:XM(e.rotation,t.rotation)}}function gN(e){let t=[];return BM(e,e=>{e.joints&&t.push(...e.joints)}),t}function _N(e,t={}){let n=[],r=new Set;BM(e,e=>{r.add(e.name),e.joints&&n.push(...e.joints)});let i=new Map;for(let e of n)i.set(e.child,e),r.add(e.parent),r.add(e.child);let a=new Map;for(let e of r)i.has(e)||a.set(e,mN);let o=[...n],s=!0;for(;s&&o.length>0;){s=!1;for(let e=o.length-1;e>=0;e--){let n=o[e];if(!n)continue;let r=a.get(n.parent);if(!r||(o.splice(e,1),s=!0,a.has(n.child)))continue;let i=t[n.child]??n.value,c=n.offset?hN(fN(n,i),n.offset):fN(n,i);a.set(n.child,hN(r,c))}}for(let e of o)a.has(e.child)||a.set(e.child,mN);return a}function vN(e){return gN(e).reduce((e,t)=>e+t.dofs.length,0)}var yN={position:[0,0,0],rotation:[1,0,0,0]};function bN(e,t){let n=qM(e.rotation,t);return[n[0]+e.position[0],n[1]+e.position[1],n[2]+e.position[2]]}function xN(e){return[e[0],-e[1],-e[2],-e[3]]}function SN(e,t){let[n,r,i,a]=XM(t,xN(e)),o=Math.hypot(n,r,i,a)||1;n/=o,r/=o,i/=o,a/=o,n<0&&(n=-n,r=-r,i=-i,a=-a);let s=Math.hypot(r,i,a);if(s<1e-12)return[0,0,0];let c=2*Math.atan2(s,n)/s;return[r*c,i*c,a*c]}function CN(e,t){let n=[];BM(e,e=>{e.joints&&n.push(...e.joints)});let r=new Map;for(let e of n)r.set(e.child,e);let i=[],a=new Set,o=t;for(;o&&r.has(o)&&!a.has(o);){a.add(o);let e=r.get(o);if(!e)break;i.push(e),o=e.parent}return i.reverse()}function wN(e,t){return e[t]??0}function TN(e,t,n){let r=n+1,i=new Float64Array(n*r);for(let a=0;a<n;a++){for(let t=0;t<n;t++)i[a*r+t]=wN(e,a*n+t);i[a*r+n]=wN(t,a)}for(let e=0;e<n;e++){let t=e;for(let a=e+1;a<n;a++)Math.abs(wN(i,a*r+e))>Math.abs(wN(i,t*r+e))&&(t=a);if(Math.abs(wN(i,t*r+e))<1e-12)return null;if(t!==e)for(let n=e;n<r;n++){let a=wN(i,e*r+n);i[e*r+n]=wN(i,t*r+n),i[t*r+n]=a}let a=wN(i,e*r+e);for(let t=e;t<r;t++)i[e*r+t]=wN(i,e*r+t)/a;for(let t=0;t<n;t++){if(t===e)continue;let n=wN(i,t*r+e);if(n!==0)for(let a=e;a<r;a++)i[t*r+a]=wN(i,t*r+a)-n*wN(i,e*r+a)}}let a=new Float64Array(n);for(let e=0;e<n;e++)a[e]=wN(i,e*r+n);return a}function EN(e,t){let n=[],r=[],i=[],a=[];for(let o of e){let e=t?.[o.child];n.push({child:o.child,count:o.dofs.length}),o.dofs.forEach((t,n)=>{let o=(Array.isArray(e)?e[n]:n===0?e:void 0)??t.value;r.push(Math.min(t.max,Math.max(t.min,o))),i.push(t.min),a.push(t.max)})}return{segments:n,q:Float64Array.from(r),lo:Float64Array.from(i),hi:Float64Array.from(a)}}function DN(e,t){let n={},r=0;for(let i of e){let e=[];for(let n=0;n<i.count;n++)e.push(wN(t,r++));n[i.child]=e}return n}function ON(e,t,n,r,i){let a=bN(t,r);if(e[0]=n.position[0]-a[0],e[1]=n.position[1]-a[1],e[2]=n.position[2]-a[2],i===6&&n.rotation){let r=SN(t.rotation,n.rotation);e[3]=r[0],e[4]=r[1],e[5]=r[2]}let o=0;for(let t=0;t<i;t++)o+=wN(e,t)**2;return Math.sqrt(o)}function kN(e,t,n,r,i,a,o,s,c,l){let u=bN(o,s);for(let d=0;d<n;d++){let f=wN(t,d),p=f+c>wN(a,d)&&f-c>=wN(i,d)?-c:c;t[d]=f+p;let m=l(t);t[d]=f;let h=bN(m,s);if(e[d]=(h[0]-u[0])/p,e[n+d]=(h[1]-u[1])/p,e[2*n+d]=(h[2]-u[2])/p,r===6){let t=SN(o.rotation,m.rotation);e[3*n+d]=t[0]/p,e[4*n+d]=t[1]/p,e[5*n+d]=t[2]/p}}}function AN(e,t,n,r,i){let a=new Float64Array(r*r),o=i*i;for(let t=0;t<r;t++)for(let i=0;i<r;i++){let s=0;for(let r=0;r<n;r++)s+=wN(e,t*n+r)*wN(e,i*n+r);a[t*r+i]=s+(t===i?o:0)}let s=TN(a,t,r);if(!s)return null;let c=new Float64Array(n);for(let t=0;t<n;t++){let i=0;for(let a=0;a<r;a++)i+=wN(e,a*n+t)*wN(s,a);c[t]=i}return c}function jN(e,t,n,r={}){let i=r.maxIterations??200,a=r.tolerance??1e-5,o=r.damping??.05,s=r.tip??[0,0,0],c=n.rotation===void 0?3:6,{segments:l,q:u,lo:d,hi:f}=EN(CN(e,t),r.seed),p=u.length,m=n=>_N(e,DN(l,n)).get(t)??yN,h=new Float64Array(c),g=new Float64Array(c*p),_=m(u),v=ON(h,_,n,s,c),y=0;for(;y<i&&p>0&&v>a;y++){kN(g,u,p,c,d,f,_,s,1e-6,m);let e=AN(g,h,p,c,o);if(!e)break;for(let t=0;t<p;t++){let n=wN(u,t)+wN(e,t);u[t]=Math.min(wN(f,t),Math.max(wN(d,t),n))}_=m(u),v=ON(h,_,n,s,c)}return{values:DN(l,u),converged:v<=a,iterations:y,error:v}}function MN(e,t){return e.dofs.map((e,n)=>{let r=(Array.isArray(t)?t[n]:n===0?t:void 0)??e.value;return Math.min(e.max,Math.max(e.min,r))})}function NN(e,t,n,r){let i=[];BM(e,e=>{e.joints&&i.push(...e.joints)});let a=i.map(e=>({child:e.child,a:MN(e,t[e.child]),b:MN(e,n[e.child])})),o=Math.max(1,Math.floor(r)),s=[];for(let t=0;t<=o;t++){let n=t/o,r={};for(let e of a)r[e.child]=e.a.map((t,r)=>t+((e.b[r]??t)-t)*n);s.push({t:n,values:r,poses:_N(e,r)})}return s}var PN=Math.PI/180;function FN(e,t,n,r){let i=e*PN,a=r*PN,o=XM(JM([0,0,1],i),JM([1,0,0],a));return{position:[n*Math.cos(i),n*Math.sin(i),t],rotation:o}}function IN(e,t={}){let n=t.base??`base`,r=e.map((e,t)=>e.name??`link${t+1}`);return e.map((e,t)=>{let i=t===0?n:r[t-1]??`link${t}`,a=r[t]??`link${t+1}`,o=FN(e.theta,e.d,e.a,e.alpha),s={origin:[0,0,0],direction:[0,0,1]},c={...e.min===void 0?{}:{min:e.min},...e.max===void 0?{}:{max:e.max},...e.value===void 0?{}:{value:e.value}};return{...e.type===`prismatic`?aN(i,a,s,c):iN(i,a,s,c),offset:o}})}var LN=Math.PI/180,RN=180/Math.PI;function zN(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`)}function BN(e){return String(e===0?0:e)}function VN(e){return`${BN(e[0])} ${BN(e[1])} ${BN(e[2])}`}function HN(e,t={}){let n=t.name??`robot`,r=t.effort??0,i=t.velocity??0,a=t.meshes??{},o=[],s=[];BM(e,e=>{o.push(e.name),e.joints&&s.push(...e.joints)});for(let e of s){if(e.type!==`revolute`&&e.type!==`prismatic`)return k(F(N.VALIDATION_FAILED,`exportURDF: joint '${e.parent}->${e.child}' is '${e.type}'; URDF supports only revolute and prismatic joints`));if(e.offset)return k(F(N.VALIDATION_FAILED,`exportURDF: joint '${e.parent}->${e.child}' carries a fixed offset (e.g. a DH link) that URDF cannot represent as a single joint`))}let c=[`<?xml version="1.0"?>`,`<robot name="${zN(n)}">`];for(let e of o){let t=a[e];t?c.push(` <link name="${zN(e)}">`,` <visual><geometry><mesh filename="${zN(t)}"/></geometry></visual>`,` </link>`):c.push(` <link name="${zN(e)}"/>`)}for(let e of s){let t=e.type===`revolute`,n=t?e.min*LN:e.min,a=t?e.max*LN:e.max,o=e.type===`prismatic`?[0,0,0]:e.axis.origin;c.push(` <joint name="${zN(`${e.parent}_to_${e.child}`)}" type="${e.type}">`,` <parent link="${zN(e.parent)}"/>`,` <child link="${zN(e.child)}"/>`,` <origin xyz="${VN(o)}" rpy="0 0 0"/>`,` <axis xyz="${VN(e.axis.direction)}"/>`,` <limit lower="${BN(n)}" upper="${BN(a)}" effort="${BN(r)}" velocity="${BN(i)}"/>`,` </joint>`)}return c.push(`</robot>`,``),O(c.join(`
|
|
15
|
+
npm install brepkit-wasm`)}function CT(){var e=typeof SuppressedError==`function`?SuppressedError:function(e,t){var n=Error();return n.name=`SuppressedError`,n.error=e,n.suppressed=t,n},t={},n=[];function r(e,t){if(t!=null){if(Object(t)!==t)throw TypeError(`using declarations can only be used with objects, functions, null, or undefined.`);if(e)var r=t[Symbol.asyncDispose||Symbol.for(`Symbol.asyncDispose`)];if(r===void 0&&(r=t[Symbol.dispose||Symbol.for(`Symbol.dispose`)],e))var i=r;if(typeof r!=`function`)throw TypeError(`Object is not disposable.`);i&&(r=function(){try{i.call(t)}catch(e){return Promise.reject(e)}}),n.push({v:t,d:r,a:e})}else e&&n.push({d:t,a:e});return t}return{e:t,u:r.bind(null,!1),a:r.bind(null,!0),d:function(){var r,i=this.e,a=0;function o(){for(;r=n.pop();)try{if(!r.a&&a===1)return a=0,n.push(r),Promise.resolve().then(o);if(r.d){var e=r.d.call(r.v);if(r.a)return a|=2,Promise.resolve(e).then(o,s)}else a|=1}catch(e){return s(e)}if(a===1)return i===t?Promise.resolve():Promise.reject(i);if(i!==t)throw i}function s(n){return i=i===t?n:new e(n,i),o()}return o()}}}var wT=Symbol;wT.dispose??=Symbol.for(`Symbol.dispose`),wT.asyncDispose??=Symbol.for(`Symbol.asyncDispose`);var TT=globalThis;TT.FinalizationRegistry||=(console.warn(`brepjs: FinalizationRegistry unavailable — garbage collection will not work`),class{register(e,t,n){}unregister(e){return!1}});var ET={liveHandles:0,peakHandles:0,gcCollected:0,scopeEnters:0,scopeExits:0};function DT(){return{...ET}}function OT(){ET.liveHandles=0,ET.peakHandles=0,ET.gcCollected=0,ET.scopeEnters=0,ET.scopeExits=0}function kT(){ET.liveHandles++,ET.liveHandles>ET.peakHandles&&(ET.peakHandles=ET.liveHandles)}function AT(){ET.liveHandles--}function jT(){ET.gcCollected++,ET.liveHandles--}var MT=new FinalizationRegistry(e=>{jT();try{e.delete()}catch{}});function NT(e){let t=!1,n=()=>{if(!t){t=!0,AT(),MT.unregister(r);try{e.delete()}catch{}}},r={get wrapped(){if(t)throw Error(`Shape handle has been disposed`);return e},get disposed(){return t},[Symbol.dispose](){n()},delete(){n()}};return kT(),MT.register(r,e,r),r}function PT(e){let t=!1,n={get value(){if(t)throw Error(`kernel handle has been disposed`);return e},get disposed(){return t},[Symbol.dispose](){if(!t){t=!0,AT(),MT.unregister(n);try{e.delete()}catch{}}}};return kT(),MT.register(n,e,n),n}var FT=class{handles=[];constructor(){ET.scopeEnters++}register(e){return this.handles.push(()=>{try{e.delete()}catch{}}),e}track(e){return this.handles.push(()=>{try{e[Symbol.dispose]()}catch{}}),e}[Symbol.dispose](){ET.scopeExits++;for(let e=this.handles.length-1;e>=0;e--)this.handles[e]?.();this.handles.length=0}};function IT(e){try{var t=CT();return e(t.u(new FT))}catch(e){t.e=e}finally{t.d()}}function LT(e,t){MT.register(e,t,t)}function RT(e){MT.unregister(e)}function zT(e){try{var t=CT();return e(t.u(new FT))}catch(e){t.e=e}finally{t.d()}}async function BT(e){try{var t=CT();return await e(t.u(new FT))}catch(e){t.e=e}finally{t.d()}}function VT(e){return!e.disposed}function HT(e){return e.__is2D!==!0}function UT(e){return e.__is2D===!0}function WT(e){if(!HT(e))throw Error(`Expected 3D shape, got 2D`);return e}function GT(e){if(!UT(e))throw Error(`Expected 2D shape, got 3D`);return e}var KT=new WeakMap;function qT(e,t){KT.set(e,t)}function JT(e,t){let n=KT.get(t);if(n!==void 0)return n;let r=e.shapeType(t);return KT.set(t,r),r}function YT(e){return JT(U(),e.wrapped)}function XT(e){return U().curveIsClosed(e.wrapped)}function ZT(e){return U().isValid(e.wrapped)}function QT(e){let t=U();if(!t.isValid(e.wrapped))return!1;let n=t.isValidStrict?.bind(t)??t.isValid.bind(t);try{let r=t.solidFromShell(e.wrapped),i=n(r);try{t.dispose(r)}catch{}return i}catch{return!1}}function $T(e){return U().isValid(e.wrapped)}function eE(e){return XT(e)?O(e):k(`Wire is not closed: start and end points do not coincide`)}function tE(e){return ZT(e)?O(e):k(`Face orientation is inconsistent or face is invalid`)}function nE(e){return QT(e)?O(e):k(`Shell is not manifold: has free edges or is invalid`)}function rE(e){return $T(e)?O(e):k(`Solid failed BRepCheck validation`)}function iE(e){return U().surfaceType(e.wrapped)===`plane`}function aE(e){let t=U(),n=n=>{try{let r=t.makeFace(e.wrapped,n),i=t.surfaceType(r);try{t.dispose(r)}catch{}return i===`plane`}catch{return!1}};return n(!0)?!0:n(!1)}function oE(e){return iE(e)?O(e):k(`Face is not planar: underlying surface is not a geometric plane`)}function sE(e){return aE(e)?O(e):k(`Wire is not planar: edges do not lie in a common plane`)}function cE(e,t){return t===`2D`&&(e.__is2D=!0),e}function lE(e,t){return cE(NT(e),t)}function uE(e,t){return cE(NT(e),t)}function dE(e,t){return cE(NT(e),t)}function fE(e,t){return cE(NT(e),t)}function pE(e){return cE(NT(e))}function mE(e){return cE(NT(e))}function hE(e){return cE(NT(e))}function gE(e,t){return cE(NT(e),t)}function _E(e){return YT(e)===`vertex`}function vE(e){return YT(e)===`edge`}function yE(e){return YT(e)===`wire`}function bE(e){return YT(e)===`face`}function xE(e){return YT(e)===`shell`}function SE(e){return YT(e)===`solid`}function CE(e){return YT(e)===`compound`}function wE(e){let t=YT(e);return t===`shell`||t===`solid`||t===`compsolid`?!0:t===`compound`?HT(e):!1}function TE(e){let t=YT(e);return t===`edge`||t===`wire`}function W(e,t){let n=U(),r=JT(n,e),i=n.downcast(e,r);return r===`vertex`?lE(i,t):r===`edge`?uE(i,t):r===`wire`?dE(i,t):r===`face`?fE(i,t):r===`shell`?pE(i):r===`solid`?mE(i):r===`compsolid`?hE(i):gE(i,t)}function EE(e){return W(e)}function DE(e,t,n){qT(e,t);let r=U().downcast(e,t);return t===`vertex`?lE(r,n):t===`edge`?uE(r,n):t===`wire`?dE(r,n):t===`face`?fE(r,n):t===`shell`?pE(r):t===`solid`?mE(r):t===`compsolid`?hE(r):gE(r,n)}function OE(e,t,n,r,i){let a={kind:e,code:t,message:n,cause:r};return i?{...a,suggestion:i}:a}var kE={KERNEL_OPERATION:(e,t,n,r)=>OE(`KERNEL_OPERATION`,e,t,n,r),VALIDATION:(e,t,n,r)=>OE(`VALIDATION`,e,t,n,r),TYPE_CAST:(e,t,n,r)=>OE(`TYPE_CAST`,e,t,n,r),SKETCHER_STATE:(e,t,n,r)=>OE(`SKETCHER_STATE`,e,t,n,r),MODULE_INIT:(e,t,n,r)=>OE(`MODULE_INIT`,e,t,n,r),COMPUTATION:(e,t,n,r)=>OE(`COMPUTATION`,e,t,n,r),IO:(e,t,n,r)=>OE(`IO`,e,t,n,r),QUERY:(e,t,n,r)=>OE(`QUERY`,e,t,n,r),UNSUPPORTED:(e,t,n,r)=>OE(`UNSUPPORTED`,e,t,n,r)};function AE(e,t,n,r=`KERNEL_OPERATION`){try{return O(W(e()))}catch(e){let i=e instanceof Error?e.message:String(e),a=r===`KERNEL_OPERATION`?oo(i):i,o=ao(t);return k(kE[r](t,`${n}: ${a}`,e,o))}}function jE(e,t,n,r=`KERNEL_OPERATION`){try{return O(e())}catch(e){let i=e instanceof Error?e.message:String(e),a=r===`KERNEL_OPERATION`?oo(i):i,o=ao(t);return k(kE[r](t,`${n}: ${a}`,e,o))}}function ME(e,t,n,r=`KERNEL_OPERATION`){try{var i=CT();let a=i.u(new FT);return AE(()=>e(a),t,n,r)}catch(e){i.e=e}finally{i.d()}}function NE(e,t){let n=U().iterShapes(e,t),r=Array(n.length);for(let e=0;e<n.length;e++)r[e]=DE(n[e],t);return r}var PE=new WeakMap;function FE(e){let t=PE.get(e.wrapped);return t||(t={},PE.set(e.wrapped,t)),t}function IE(e){return PE.get(e.wrapped)}function LE(e){PE.delete(e.wrapped)}function RE(e){let t=FE(e);if(t.edges)return t.edges;let n=NE(e.wrapped,`edge`);return t.edges=n,n}function zE(e){let t=FE(e);if(t.faces)return t.faces;let n=NE(e.wrapped,`face`);return t.faces=n,n}function BE(e){let t=FE(e);if(t.wires)return t.wires;let n=NE(e.wrapped,`wire`);return t.wires=n,n}function VE(e){let t=FE(e);if(t.vertices)return t.vertices;let n=NE(e.wrapped,`vertex`);return t.vertices=n,n}function HE(e){let t=FE(e);if(t.solids)return t.solids;let n=NE(e.wrapped,`solid`);return t.solids=n,n}function UE(e){let t=FE(e);if(t.shells)return t.shells;let n=NE(e.wrapped,`shell`);return t.shells=n,n}function WE(e){let t=FE(e);if(t.compSolids)return t.compSolids;let n=NE(e.wrapped,`compsolid`);return t.compSolids=n,n}function*GE(e){for(let t of U().iterShapes(e.wrapped,`edge`))yield DE(t,`edge`)}function*KE(e){for(let t of U().iterShapes(e.wrapped,`face`))yield DE(t,`face`)}function*qE(e){for(let t of U().iterShapes(e.wrapped,`wire`))yield DE(t,`wire`)}function*JE(e){for(let t of U().iterShapes(e.wrapped,`vertex`))yield DE(t,`vertex`)}function*YE(e){for(let t of U().iterShapes(e.wrapped,`solid`))yield DE(t,`solid`)}function*XE(e){for(let t of U().iterShapes(e.wrapped,`shell`))yield DE(t,`shell`)}function*ZE(e){for(let t of U().iterShapes(e.wrapped,`compsolid`))yield DE(t,`compsolid`)}function QE(e){let t=FE(e);if(t.bounds)return t.bounds;let{min:n,max:r}=U().boundingBox(e.wrapped),i={xMin:n[0],xMax:r[0],yMin:n[1],yMax:r[1],zMin:n[2],zMax:r[2]};return t.bounds=i,i}function $E(e){return JT(U(),e.wrapped)}function eD(e){let t=FE(e);if(t.surfaceType!==void 0)return t.surfaceType;let n=U().surfaceType(e.wrapped);return t.surfaceType=n,n}function tD(e){let t=FE(e);if(t.isValid!==void 0)return t.isValid;let n=U().isValid(e.wrapped);return t.isValid=n,n}function nD(e){return{kind:$E(e),faceCount:zE(e).length,edgeCount:RE(e).length,wireCount:BE(e).length,vertexCount:VE(e).length,valid:tD(e),bounds:QE(e)}}function rD(e){return U().vertexPosition(e.wrapped)}var G=2147483647,iD=Math.PI/180,aD=180/Math.PI;function oD(e){return e.length===2?[e[0],e[1],0]:[e[0],e[1],e[2]]}function sD(e){return[e[0],e[1]]}var cD={X:[1,0,0],Y:[0,1,0],Z:[0,0,1]};function lD(e){if(typeof e==`string`){let t=cD[e];if(!t)throw Error(`Unknown direction: ${e}`);return t}return e}function uD(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function dD(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function fD(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function pD(e){return[-e[0],-e[1],-e[2]]}function mD(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function hD(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function gD(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2])}function _D(e){return e[0]*e[0]+e[1]*e[1]+e[2]*e[2]}function vD(e,t){return gD(dD(e,t))}function yD(e){let t=gD(e);return t<1e-10?[0,0,0]:[e[0]/t,e[1]/t,e[2]/t]}function bD(e,t,n=1e-5){return Math.abs(e[0]-t[0])<n&&Math.abs(e[1]-t[1])<n&&Math.abs(e[2]-t[2])<n}function xD(e,t=1e-10){return _D(e)<t*t}function SD(e,t){let n=mD(e,t),r=gD(e),i=gD(t);if(r<1e-10||i<1e-10)return 0;let a=Math.max(-1,Math.min(1,n/(r*i)));return Math.acos(a)}function CD(e,t,n){let r=dD(e,t),i=_D(n);return i<1e-20?e:dD(e,fD(n,mD(r,n)/i))}function wD(e,t,n){let r=yD(t),i=Math.cos(n),a=Math.sin(n),o=mD(e,r),s=hD(r,e);return[e[0]*i+s[0]*a+r[0]*o*(1-i),e[1]*i+s[1]*a+r[1]*o*(1-i),e[2]*i+s[2]*a+r[2]*o*(1-i)]}var TD=e=>Math.round(e*1e3)/1e3;function ED(e){return`x: ${TD(e[0])}, y: ${TD(e[1])}, z: ${TD(e[2])}`}function DD(e,t=null,n=[0,0,1]){let r=yD(n);if(xD(r))throw Error(`Plane normal must be non-zero`);let i;if(t)i=yD(t);else{let[e,t,n]=r,a=Math.abs(e),o=Math.abs(t),s=Math.abs(n),c;c=a<=o&&a<=s?[1,0,0]:o<=s?[0,1,0]:[0,0,1];let l=c[1]*n-c[2]*t,u=c[2]*e-c[0]*n,d=c[0]*t-c[1]*e;i=Math.sqrt(l*l+u*u+d*d)>1e-12?yD([l,u,d]):[1,0,0]}if(xD(i))throw Error(`Plane xDir must be non-zero`);let a=yD(hD(r,i));return{origin:e,xDir:i,yDir:a,zDir:r}}var OD={XY:{xDir:[1,0,0],normal:[0,0,1]},YZ:{xDir:[0,1,0],normal:[1,0,0]},ZX:{xDir:[0,0,1],normal:[0,1,0]},XZ:{xDir:[1,0,0],normal:[0,-1,0]},YX:{xDir:[0,1,0],normal:[0,0,-1]},ZY:{xDir:[0,0,1],normal:[-1,0,0]},front:{xDir:[1,0,0],normal:[0,0,1]},back:{xDir:[-1,0,0],normal:[0,0,-1]},left:{xDir:[0,0,1],normal:[-1,0,0]},right:{xDir:[0,0,-1],normal:[1,0,0]},top:{xDir:[1,0,0],normal:[0,1,0]},bottom:{xDir:[1,0,0],normal:[0,-1,0]}};function kD(e,t=[0,0,0]){let n=OD[e];if(!n)return k(F(`UNKNOWN_PLANE`,`Could not find plane ${e}`));let r;return r=typeof t==`number`?fD(n.normal,t):oD(t),O(DD(r,n.xDir,n.normal))}function AD(e,t){return typeof e==`string`?kD(e,t):O(e)}function jD(e,t){return e&&typeof e!=`string`?{...e}:j(AD(e??`XY`,t))}function MD(e,t){let[n,r]=t;return uD(uD(e.origin,fD(e.xDir,n)),fD(e.yDir,r))}function ND(e,t){return{...e,origin:uD(e.origin,t)}}function PD(e,t,n=[1,0,0]){let r=t*iD,i=wD(e.zDir,n,r),a=wD(e.xDir,n,r),o=yD(hD(i,a));return{origin:e.origin,xDir:a,yDir:o,zDir:i}}var FD={compound:0,solidCompound:1,solid:2,shell:3,face:4,wire:5,edge:6,vertex:7,shape:8},ID=e=>FD[e],LD={vertex:`vertex`,edge:`edge`,wire:`wire`,face:`face`,shell:`shell`,solid:`solid`,solidCompound:`compsolid`,compound:`compound`,shape:`compound`},RD=function*(e,t){let n=LD[t];if(n){let t=U().iterShapes(e,n);for(let e of t)yield e}},zD=e=>U().isNull(e)?k(co(`NULL_SHAPE`,`This shape has no type, it is null`)):O(e.ShapeType());function BD(e){if(U().isNull(e))return k(co(`NULL_SHAPE`,`This shape has no type, it is null`));try{return O(U().downcast(e))}catch{return k(co(`NO_WRAPPER`,`Could not find a wrapper for this shape type`))}}function VD(e){return U().isNull(e)?k(co(`NULL_SHAPE`,`Cannot cast a null shape`)):O(W(e))}function HD(e){return U().shapeType(e.wrapped)===`compsolid`}function UD(e){return VD(U().fromBREP(e))}var WD={plane:`PLANE`,cylinder:`CYLINDRE`,cone:`CONE`,sphere:`SPHERE`,torus:`TORUS`,bezier:`BEZIER_SURFACE`,bspline:`BSPLINE_SURFACE`,revolution:`REVOLUTION_SURFACE`,extrusion:`EXTRUSION_SURFACE`,offset:`OFFSET_SURFACE`,other:`OTHER_SURFACE`};function GD(e){return O(WD[eD(e)])}function KD(e){return j(GD(e))}function qD(e){return U().shapeOrientation(e.wrapped)===`forward`?`forward`:`backward`}function JD(e){return W(U().reverseShape(e.wrapped))}function YD(e){return U().uvBounds(e.wrapped)}function XD(e,t,n){let r=YD(e),i=t*(r.uMax-r.uMin)+r.uMin,a=n*(r.vMax-r.vMin)+r.vMin;return U().pointOnSurface(e.wrapped,i,a)}function ZD(e,t){let n=oD(t);return U().uvFromPoint(e.wrapped,n)||[0,0]}function QD(e,t){let n=oD(t);try{let t=n,r=U().uvFromPoint(e.wrapped,t);if(!r)return k(co(`PROJECTION_FAILED`,`No projection found on the face`));let i=U().projectPointOnFace(e.wrapped,t),a=n[0]-i[0],o=n[1]-i[1],s=n[2]-i[2];return O({uv:r,point:i,distance:Math.sqrt(a*a+o*o+s*s)})}catch(e){return k(co(`PROJECTION_FAILED`,`Point projection failed: ${e instanceof Error?e.message:String(e)}`))}}function $D(e,t){let n,r;if(t)[n,r]=ZD(e,t);else{let t=YD(e);n=.5*(t.uMin+t.uMax),r=.5*(t.vMin+t.vMax)}return U().surfaceNormal(e.wrapped,n,r)}function eO(e){return U().surfaceCenterOfMass(e.wrapped)}function tO(e){return U().getSurfaceAxis(e.wrapped)}function nO(e,t,n=1e-6){let[r,i]=ZD(e,t);return U().classifyPointOnFace(e.wrapped,r,i,n)}function rO(e){return W(U().outerWire(e.wrapped))}function iO(e){return W(U().removeHolesFromFace(e.wrapped))}function aO(e){let t=rO(e);return Array.from(RD(e.wrapped,`wire`)).map(e=>W(j(BD(e)))).filter(e=>!U().isSame(e.wrapped,t.wrapped))}function oO(e,t){let n=FE(e),r=new Map;for(let n of zE(e))r.set(U().hashCode(n.wrapped,G),t);n.faceOrigins=r}function sO(e){return IE(e)?.faceOrigins}function cO(e,t,n){let r=new Map;for(let e of t){let t=sO(e);if(t)for(let[e,n]of t)r.set(e,n)}if(r.size===0)return;let i=new Map;for(let[t,n]of r){if(e.deleted.has(t))continue;let r=e.modified.get(t);if(r&&r.length>0)for(let e of r)i.set(e,n);else i.set(t,n);let a=e.generated.get(t);if(a)for(let e of a)i.has(e)||i.set(e,0)}if(i.size>0){let e=FE(n);e.faceOrigins=i}}function lO(e,t,n){let r=-1/0,i;for(let a of n){let n=e[0]*a.normal[0]+e[1]*a.normal[1]+e[2]*a.normal[2];if(n<.707)continue;let o=t[0]-a.centroid[0],s=t[1]-a.centroid[1],c=t[2]-a.centroid[2],l=o*o+s*s+c*c;if(l>100)continue;let u=n-l/100;u>r&&(r=u,i=a.origin)}return i}function uO(e,t){let n=new Map;for(let t of e){let e=sO(t);if(e)for(let[t,r]of e)n.set(t,r)}if(n.size===0)return;let r=U(),i=new Map,a=zE(t),o=[];for(let e of a){let t=r.hashCode(e.wrapped,G),a=n.get(t);a===void 0?o.push(e):i.set(t,a)}if(o.length>0){let t=[];for(let n of e){let e=sO(n);if(e)for(let i of zE(n)){let n=r.hashCode(i.wrapped,G),a=e.get(n);if(a!==void 0)try{let e=r.uvBounds(i.wrapped),n=r.surfaceNormal(i.wrapped,.5*(e.uMin+e.uMax),.5*(e.vMin+e.vMax)),o=r.surfaceCenterOfMass(i.wrapped);t.push({origin:a,normal:n,centroid:o})}catch{}}}if(t.length>0)for(let e of o){let n=r.hashCode(e.wrapped,G);try{let a=r.uvBounds(e.wrapped),o=lO(r.surfaceNormal(e.wrapped,.5*(a.uMin+a.uMax),.5*(a.vMin+a.vMax)),r.surfaceCenterOfMass(e.wrapped),t);o!==void 0&&i.set(n,o)}catch{}}}if(i.size>0){let e=FE(t);e.faceOrigins=i}}var dO=new WeakMap,fO=new WeakMap;function pO(e){return dO.has(e.wrapped)}function mO(e){let t=dO.get(e.wrapped);return t||(t=new Map,dO.set(e.wrapped,t)),t}function hO(e){let t=fO.get(e.wrapped);return t||(t=new Map,fO.set(e.wrapped,t)),t}function gO(e,t,n){let r=Array.isArray(t)?t:zE(e).filter(t),i=mO(e),a=i.get(n)??new Set;for(let e of r)a.add(U().hashCode(e.wrapped,G));return i.set(n,a),e}function _O(e,t){let n=dO.get(e.wrapped);if(!n)return[];let r=n.get(t);if(!r||r.size===0)return[];let i=[];for(let t of zE(e)){let e=U().hashCode(t.wrapped,G);r.has(e)&&i.push(t)}return i}function vO(e){let t=new Map,n=dO.get(e.wrapped);if(!n)return t;let r=zE(e),i=new Map;for(let e of r)i.set(U().hashCode(e.wrapped,G),e);for(let[e,r]of n){let n=[];for(let e of r){let t=i.get(e);t&&n.push(t)}n.length>0&&t.set(e,n)}return t}function yO(e,t,n){return hO(e).set(t,n),e}function bO(e,t){return fO.get(e.wrapped)?.get(t)}function xO(e,t,n){let r=e.get(t)??new Set;r.add(n),e.set(t,r)}function SO(e,t,n){let r=mO(n);for(let i of t){let t=dO.get(i.wrapped);if(!t)continue;let a=new Map;for(let[e,n]of t)for(let t of n){let n=a.get(t)??[];n.push(e),a.set(t,n)}for(let[t,n]of a){if(e.deleted.has(t))continue;let i=e.modified.get(t),a=i&&i.length>0?i:[t];for(let e of a)for(let t of n)xO(r,t,e)}let o=fO.get(i.wrapped);if(o){let e=hO(n);for(let[t,n]of o)e.has(t)||e.set(t,n)}}}var CO=new WeakMap,wO=new WeakMap;function TO(e){return CO.has(e.wrapped)||wO.has(e.wrapped)}function EO(e){let t=wO.get(e.wrapped);return t||(t=new Map,wO.set(e.wrapped,t)),t}function DO(e){if(typeof e==`string`){let t=e.startsWith(`#`)?e.slice(1):e;return t.length===3&&(t=t.charAt(0)+t.charAt(0)+t.charAt(1)+t.charAt(1)+t.charAt(2)+t.charAt(2)),[parseInt(t.slice(0,2),16)/255,parseInt(t.slice(2,4),16)/255,parseInt(t.slice(4,6),16)/255,1]}return e.length===3?[e[0],e[1],e[2],1]:[e[0],e[1],e[2],e[3]]}function OO(e,t){return CO.set(e.wrapped,DO(t)),e}function kO(e,t,n){let r=DO(n),i=EO(e);for(let e of t)i.set(U().hashCode(e.wrapped,G),r);return e}function AO(e){return CO.get(e.wrapped)}function jO(e,t){let n=wO.get(e.wrapped);if(n)return n.get(U().hashCode(t.wrapped,G))}function MO(e,t,n){for(let e of t){let t=CO.get(e.wrapped);if(t){CO.set(n.wrapped,t);break}}let r=EO(n);for(let n of t){let t=wO.get(n.wrapped);if(!(!t||t.size===0))for(let[n,i]of t){if(e.deleted.has(n))continue;let t=e.modified.get(n);if(t&&t.length>0)for(let e of t)r.set(e,i);else r.set(n,i)}}}function NO(e){if(!e.some(e=>sO(e)!==void 0||pO(e)||TO(e)))return[];let t=U(),n=[];for(let r of e){let e=t.iterShapes(r.wrapped,`face`);for(let r of e)n.push(t.hashCode(r,G))}return n}function PO(e,t,n){cO(e,t,n),SO(e,t,n),MO(e,t,n)}function FO(e,t){uO(e,t)}function IO(e,t){let n=NO([e]),{shape:r,evolution:i}=U().translateWithHistory(e.wrapped,t[0],t[1],t[2],n,G),a=W(r);return PO(i,[e],a),a}function LO(e,t,n=[0,0,0],r=[0,0,1]){let i=NO([e]),{shape:a,evolution:o}=U().rotateWithHistory(e.wrapped,t*iD,i,G,r,n),s=W(a);return PO(o,[e],s),s}function RO(e,t=[0,1,0],n=[0,0,0]){let r=NO([e]),{shape:i,evolution:a}=U().mirrorWithHistory(e.wrapped,n,t,r,G),o=W(i);return PO(a,[e],o),o}function zO(e,t,n=[0,0,0]){let r=NO([e]),{shape:i,evolution:a}=U().scaleWithHistory(e.wrapped,n,t,r,G),o=W(i);return PO(a,[e],o),o}function BO(e,t,n){let r=U().boundingBox(e.wrapped),i=[r.max[0]-r.min[0],r.max[1]-r.min[1],r.max[2]-r.min[2]],a=n?.auto===!0;function o(e,t,n){return e!==void 0&&t>1e-12?e/t:e===void 0&&a?n:1}let s=1;a&&(t[0]!==void 0&&i[0]>1e-12?s=t[0]/i[0]:t[1]!==void 0&&i[1]>1e-12?s=t[1]/i[1]:t[2]!==void 0&&i[2]>1e-12&&(s=t[2]/i[2]));let c=[o(t[0],i[0],s),o(t[1],i[1],s),o(t[2],i[2],s)];return Math.abs(c[0]-c[1])<1e-6&&Math.abs(c[1]-c[2])<1e-6?O(zO(e,c[0])):k(F(N.VALIDATION_FAILED,`resize: non-uniform scaling is not supported (WASM build lacks BRepBuilderAPI_GTransform).`,void 0,void 0,`Use auto: true to scale proportionally, or set all three dimensions to achieve uniform scaling.`))}function VO(e){if(`linear`in e)return O({linear:e.linear,translation:e.translation});let[t,n,r,i]=e,a=1e-10;return Math.abs(i[0])>a||Math.abs(i[1])>a||Math.abs(i[2])>a||Math.abs(i[3]-1)>a?k(F(N.VALIDATION_FAILED,`applyMatrix: invalid bottom row [${String(i[0])}, ${String(i[1])}, ${String(i[2])}, ${String(i[3])}]. Must be [0, 0, 0, 1] for an affine transform.`)):O({linear:[t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]],translation:[t[3],n[3],r[3]]})}function HO(e){return e[0]*(e[4]*e[8]-e[5]*e[7])-e[1]*(e[3]*e[8]-e[5]*e[6])+e[2]*(e[3]*e[7]-e[4]*e[6])}function UO(e){let t=1e-8,n=e[0]*e[0]+e[3]*e[3]+e[6]*e[6],r=e[1]*e[1]+e[4]*e[4]+e[7]*e[7],i=e[2]*e[2]+e[5]*e[5]+e[8]*e[8],a=e[0]*e[1]+e[3]*e[4]+e[6]*e[7],o=e[0]*e[2]+e[3]*e[5]+e[6]*e[8],s=e[1]*e[2]+e[4]*e[5]+e[7]*e[8];return!(Math.abs(a)>t||Math.abs(o)>t||Math.abs(s)>t||Math.abs(n-r)>t||Math.abs(n-i)>t)}function WO(e,t){let n=VO(t);if(!n.ok)return n;let{linear:r,translation:i}=n.value,a=HO(r);if(Math.abs(a)<1e-12)return k(F(N.VALIDATION_FAILED,`applyMatrix: singular matrix (determinant ≈ 0). Cannot apply a non-invertible transform.`));if(UO(r)){let t=NO([e]),{shape:n,evolution:a}=U().generalTransformWithHistory(e.wrapped,r,i,!0,t,G),o=W(n);return PO(a,[e],o),O(o)}let o=W(U().generalTransformNonOrthogonal(e.wrapped,r,i));return FO([e],o),O(o)}function GO(e){let t=e.map(e=>e.type===`translate`?{type:`translate`,x:e.v[0],y:e.v[1],z:e.v[2]}:{type:`rotate`,angle:e.angle,axis:e.axis,center:e.center}),{handle:n,dispose:r}=U().composeTransform(t);return{trsf:n,cleanup:r}}function KO(e,t){let n=NO([e]),{shape:r,evolution:i}=U().applyComposedTransformWithHistory(e.wrapped,t.trsf,n,G),a=W(r);return PO(i,[e],a),a}function qO(e){return AE(()=>U().downcast(e.wrapped),N.CLONE_FAILED,`Failed to clone shape`)}function JO(e){return jE(()=>U().toBREP(e.wrapped),N.TO_BREP_FAILED,`Failed to serialize shape to BREP`)}function YO(e){return U().hashCode(e.wrapped,G)}function XO(e){return U().isNull(e.wrapped)}function ZO(e,t){return U().isSame(e.wrapped,t.wrapped)}function QO(e,t){return U().isEqual(e.wrapped,t.wrapped)}function $O(e){return AE(()=>U().simplify(e.wrapped),N.SIMPLIFY_FAILED,`Failed to simplify shape`)}function ek(e){return U().curveType(e.wrapped)}function tk(e){let[t]=U().curveParameters(e.wrapped);return U().curvePointAtParam(e.wrapped,t)}function nk(e){let[,t]=U().curveParameters(e.wrapped);return U().curvePointAtParam(e.wrapped,t)}function rk(e,t=.5){let[n,r]=U().curveParameters(e.wrapped),i=n+(r-n)*t;return U().curvePointAtParam(e.wrapped,i)}function ik(e,t=.5){let[n,r]=U().curveParameters(e.wrapped),i=n+(r-n)*t;return U().curveTangent(e.wrapped,i).tangent}function ak(e){return U().length(e.wrapped)}function ok(e){if(ek(e)!==`CIRCLE`)return null;let t=rk(e,0),n=rk(e,1/3),r=rk(e,2/3),i=[n[0]-t[0],n[1]-t[1],n[2]-t[2]],a=[r[0]-t[0],r[1]-t[1],r[2]-t[2]],o=[i[1]*a[2]-i[2]*a[1],i[2]*a[0]-i[0]*a[2],i[0]*a[1]-i[1]*a[0]],s=o[0]*o[0]+o[1]*o[1]+o[2]*o[2];if(s<1e-18)return null;let c=i[0]*i[0]+i[1]*i[1]+i[2]*i[2],l=a[0]*a[0]+a[1]*a[1]+a[2]*a[2],u=[c*a[0]-l*i[0],c*a[1]-l*i[1],c*a[2]-l*i[2]],d=[u[1]*o[2]-u[2]*o[1],u[2]*o[0]-u[0]*o[2],u[0]*o[1]-u[1]*o[0]],f=1/(2*s),p=[t[0]+d[0]*f,t[1]+d[1]*f,t[2]+d[2]*f],m=Math.sqrt(s);return{origin:p,direction:[o[0]/m,o[1]/m,o[2]/m]}}function sk(e){return U().curveIsClosed(e.wrapped)}function ck(e){return U().curveIsPeriodic(e.wrapped)}function lk(e){return U().curvePeriod(e.wrapped)}function uk(e){return U().shapeOrientation(e.wrapped)===`forward`?`forward`:`backward`}function dk(e){return W(U().reverseShape(e.wrapped))}function fk(e,t={}){if(e.length<2)return k(co(`INTERPOLATE_MIN_POINTS`,`Interpolation requires at least 2 points`));try{let n=W(U().interpolatePoints(e,t));return vE(n)?O(n):k(co(`INTERPOLATE_NOT_EDGE`,`Interpolation did not produce an edge`))}catch(e){return k(co(`INTERPOLATE_FAILED`,`Interpolation failed: ${e instanceof Error?e.message:String(e)}`))}}function pk(e,t={}){if(e.length<2)return k(co(`APPROXIMATE_MIN_POINTS`,`Approximation requires at least 2 points`));try{let n=W(U().approximatePoints(e,t));return vE(n)?O(n):k(co(`APPROXIMATE_NOT_EDGE`,`Approximation did not produce an edge`))}catch(e){return k(co(`APPROXIMATE_FAILED`,`Approximation failed: ${e instanceof Error?e.message:String(e)}`))}}function mk(e,t,n=`arc`){let r=W(U().offsetWire2D(e.wrapped,t,{arc:`arc`,intersection:`intersection`,tangent:`tangent`,chamfer:`intersection`}[n]));return yE(r)?O(r):(r[Symbol.dispose](),k(co(`OFFSET_NOT_WIRE`,`Offset did not produce a Wire`)))}function hk(e,t,n,r=!1){return`${e}:${t}:${n}:${r}`}function gk(e,t){return`edge:${e}:${t}`}var _k=new WeakMap,vk=new WeakMap;function yk(e,t){let n=_k.get(e);if(n)return n.get(t)}function bk(e,t,n){let r=_k.get(e);r||(r=new Map,_k.set(e,r)),r.set(t,n)}function xk(e,t){let n=vk.get(e);if(n)return n.get(t)}function Sk(e,t,n){let r=vk.get(e);r||(r=new Map,vk.set(e,r)),r.set(t,n)}function Ck(){_k=new WeakMap,vk=new WeakMap}function wk(){let e=new WeakMap,t=new WeakMap;return{getMesh(t,n){return e.get(t)?.get(n)},setMesh(t,n,r){let i=e.get(t);i||(i=new Map,e.set(t,i)),i.set(n,r)},getEdgeMesh(e,n){return t.get(e)?.get(n)},setEdgeMesh(e,n,r){let i=t.get(e);i||(i=new Map,t.set(e,i)),i.set(n,r)},clear(){e=new WeakMap,t=new WeakMap}}}function Tk(e,t={}){let n=yo(),{tolerance:r=n.tolerance,angularTolerance:i=n.angularTolerance,skipNormals:a=!1,includeUVs:o=!1,cache:s=!0,signal:c}=t;c?.throwIfAborted();let l=hk(r,i,a,o);if(s){let t=yk(e.wrapped,l);if(t)return t}let u=U().mesh(e.wrapped,{tolerance:r,angularTolerance:i,skipNormals:a,includeUVs:o,...c?{signal:c}:{}}),d=sO(e),f={vertices:u.vertices,normals:u.normals,triangles:u.triangles,uvs:u.uvs,faceGroups:u.faceGroups.map(e=>({start:e.start,count:e.count,faceId:e.faceHash,origin:d?.get(e.faceHash)??0}))};return s&&bk(e.wrapped,l,f),f}function Ek(e,t={}){let n=yo(),{tolerance:r=n.tolerance,angularTolerance:i=n.angularTolerance,cache:a=!0}=t,o=gk(r,i);if(a){let t=xk(e.wrapped,o);if(t)return t}let s=U().meshEdges(e.wrapped,r,i),c={lines:s.lines,edgeGroups:s.edgeGroups.map(e=>({start:e.start,count:e.count,edgeId:e.edgeHash}))};return a&&Sk(e.wrapped,o,c),c}function Dk(e,t){return e instanceof Error&&e.message.startsWith(`${t} export failed`)?fo(`${t}_EXPORT_FAILED`,`Failed to write ${t} file`,e):e instanceof WebAssembly.RuntimeError?fo(`${t}_EXPORT_CRASHED`,`${t} export crashed the kernel (${e.message}); the shape likely contains geometry the ${t} writer cannot serialize`,e):fo(`${t}_FILE_READ_ERROR`,`Failed to read exported ${t} file`,e)}function Ok(e){let t;try{t=HE(e)}catch{return``}if(t.length<=1)return``;let n=[];return t.forEach((e,t)=>{try{QE(e)}catch(e){if(e instanceof TypeError)throw e;n.push(t)}}),n.length===0?`; could not localize the offending sub-solid among ${t.length} solids`:`; offending sub-solid${n.length>1?`s`:``} (of ${t.length}): index ${n.join(`, `)}`}function kk(e,t){try{return QE(e),null}catch(n){if(n instanceof TypeError)throw n;return fo(`${t}_EXPORT_UNSERIALIZABLE`,`${t} export aborted: the shape contains degenerate geometry the ${t} writer cannot serialize (bounding-box evaluation failed); export was skipped to avoid crashing the kernel${Ok(e)}`,n)}}function Ak(e){let t=kk(e,`STEP`);if(t)return k(t);try{let t=U().exportSTEP([e.wrapped]);return O(new Blob([t],{type:`application/STEP`}))}catch(e){return k(Dk(e,`STEP`))}}function jk(e,t={}){let n=yo(),{tolerance:r=n.tolerance,angularTolerance:i=n.angularTolerance,binary:a=!1}=t,o=kk(e,`STL`);if(o)return k(o);try{U().hasTriangulation(e.wrapped)||U().meshShape(e.wrapped,r,i);let t=U().exportSTL(e.wrapped,a,r,i);return O(new Blob([t],{type:`application/sla`}))}catch(e){return k(Dk(e,`STL`))}}function Mk(e){try{let t=U().exportIGES([e.wrapped]);return O(new Blob([t],{type:`application/iges`}))}catch(e){return k(fo(`IGES_EXPORT_FAILED`,`Failed to write IGES file`,e))}}function Nk(e,t){let n=t?.coarseTolerance??.5,r=t?.fineTolerance??.05,i=t?.angularTolerance??.5;return{coarse:Tk(e,{tolerance:n,angularTolerance:i}),fine:Tk(e,{tolerance:r,angularTolerance:i*.2})}}function Pk(e,t,n){if(t<0||t>=e.length)throw Error(n??`Index ${t} out of bounds (length ${e.length})`);return e[t]}function Fk(e,t){if(e.length===0)throw Error(t??`Expected non-empty array`);return e[0]}function Ik(e,t){if(e.length===0)throw Error(t??`Expected non-empty array`);return e[e.length-1]}function Lk(e){return Array.from(Array(e).keys())}function Rk(e){return Lk(Math.min(...e.map(e=>e.length))).map(t=>e.map(e=>e[t]))}function zk(e,t){return uE(U().makeLineEdge([...e],[...t]))}function Bk(e,t=[0,0,0],n=[0,0,1]){return uE(U().makeCircleEdge([...t],[...n],e))}function Vk(e,t,n=[0,0,0],r=[0,0,1],i){return t>e?k(F(`ELLIPSE_RADII`,`The minor radius must be smaller than the major one`)):O(uE(U().makeEllipseEdge([...n],[...r],e,t,i?[...i]:void 0)))}function Hk(e,t,n,r=[0,0,0],i=[0,0,1],a=!1){return dE(U().makeHelixWire(e,t,n,[...r],[...i],a))}function Uk(e,t,n){return uE(U().makeArcEdge([...e],[...t],[...n]))}function Wk(e,t,n,r,i=[0,0,0],a=[0,0,1],o){return t>e?k(F(`ELLIPSE_RADII`,`The minor radius must be smaller than the major one`)):O(uE(U().makeEllipseArc([...i],[...a],e,t,n,r,o?[...o]:void 0)))}function Gk(e,{tolerance:t=.001,smoothing:n=null,degMax:r=6,degMin:i=1}={}){try{let a=e.map(e=>[...e]);return O(uE(U().approximatePoints(a,{tolerance:t,degMin:i,degMax:r,smoothing:n})))}catch{return k(P(`BSPLINE_FAILED`,`B-spline approximation failed`))}}function Kk(e,{periodic:t=!1,tolerance:n=1e-7}={}){try{let r=e.map(e=>[...e]);return O(uE(U().interpolatePoints(r,{periodic:t,tolerance:n})))}catch{return k(P(`BSPLINE_INTERP_FAILED`,`B-spline interpolation failed`))}}function qk(e){if(e.length<2)return k(F(`BEZIER_MIN_POINTS`,`Need at least 2 points for a Bezier curve, got ${e.length}`,void 0,{pointCount:e.length}));let t=e.map(e=>[...e]);return O(uE(U().makeBezierEdge(t)))}function Jk(e,t,n){return uE(U().makeTangentArc([...e],[...t],[...n]))}function Yk(e){try{return O(dE(U().makeWireFromMixed(e.map(e=>e.wrapped))))}catch(e){return k(P(`WIRE_BUILD_FAILED`,`Failed to build the wire: ${e instanceof Error?e.message:`unknown error`}`))}}function Xk(e,t){try{let n=U().makeFace(e.wrapped,!0);if(t&&t.length>0){let e=eA(fE(n),t);return iE(e)?O(e):k(F(`FACE_NOT_PLANAR`,`makeFace produced a non-planar face — wire may not be truly planar`))}let r=fE(n);return iE(r)?O(r):k(F(`FACE_NOT_PLANAR`,`makeFace produced a non-planar face — wire may not be truly planar`))}catch{return k(P(`FACE_BUILD_FAILED`,`Failed to build the face. Your wire might be non planar.`))}}function Zk(e){return Xk(rO(e))}function Qk(e,t){return fE(U().makeFaceOnSurface(e.wrapped,t.wrapped))}function $k(e){try{return Ia(VD(U().makeNonPlanarFace(e.wrapped)),e=>bE(e)?O(e):k(P(`FACE_BUILD_FAILED`,`Failed to create a non-planar face`)))}catch{return k(P(`FACE_BUILD_FAILED`,`Failed to create a non-planar face`))}}function eA(e,t){return fE(U().addHolesInFace(e.wrapped,t.map(e=>e.wrapped)))}function tA(e){return e.length<3?k(F(`POLYGON_MIN_POINTS`,`You need at least 3 points to make a polygon`)):Ia(Yk(Rk([e,[...e.slice(1),e[0]]]).map(([e,t])=>zk(e,t))),e=>Xk(e))}function nA(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function rA(e,t,n,r,i){let a=W(e);if(!wE(a)){let o=e.ShapeType(),s=[`COMPOUND`,`COMPSOLID`,`SOLID`,`SHELL`,`FACE`,`WIRE`,`EDGE`,`VERTEX`,`SHAPE`][o]??`UNKNOWN(${o})`;return a[Symbol.dispose](),k(co(t,`${n}. Got ${s} instead.`,void 0,i?{diagnostics:i}:void 0,r))}return O(a)}function iA(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;let c=nA(e,`fuse: first operand`);if(A(c))return c;let l=nA(t,`fuse: second operand`);if(A(l))return l;if(!s)return rA(U().fuse(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`);let u=NO([e,t]),{shape:d,evolution:f,diagnostics:p}=U().fuseWithHistory(e.wrapped,t.wrapped,u,G,{optimisation:n,simplify:r,fuzzyValue:a});if(p.hasErrors){if(U().isNull(d))return U().dispose(d),console.warn(`brepjs: fuse history path produced null result; retrying without evolution tracking.`,p),rA(U().fuse(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`);console.warn(`brepjs: fuse reported OCCT warnings/errors but produced a shape. Continuing with result.`,p)}let m=rA(d,`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`,`Common causes: overlapping coplanar faces, zero-thickness geometry, or non-manifold input. Try autoHeal() on inputs first.`,p);return m.ok&&PO(f,[e,t],m.value),m}function aA(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;let c=nA(e,`cut: base`);if(A(c))return c;let l=nA(t,`cut: tool`);if(A(l))return l;if(!s)return rA(U().cut(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`CUT_NOT_3D`,`Cut did not produce a 3D shape`);let u=NO([e,t]),{shape:d,evolution:f,diagnostics:p}=U().cutWithHistory(e.wrapped,t.wrapped,u,G,{optimisation:n,simplify:r,fuzzyValue:a});if(p.hasErrors){if(U().isNull(d))return U().dispose(d),console.warn(`brepjs: cut history path produced null result; retrying without evolution tracking.`,p),rA(U().cut(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`CUT_NOT_3D`,`Cut did not produce a 3D shape`);console.warn(`brepjs: cut reported OCCT warnings/errors but produced a shape. Continuing with result.`,p)}let m=rA(d,`CUT_NOT_3D`,`Cut did not produce a 3D shape`,`Common causes: tool does not fully intersect the base, or produces a zero-thickness sliver. Ensure the tool extends through the shape.`,p);return m.ok&&PO(f,[e,t],m.value),m}function oA(e,t,{simplify:n=!1,signal:r,fuzzyValue:i,unsafe:a,trackEvolution:o=!0}={}){if(r?.aborted)throw r.reason;let s=nA(e,`intersect: first operand`);if(A(s))return s;let c=nA(t,`intersect: second operand`);if(A(c))return c;if(!o)return rA(U().intersect(e.wrapped,t.wrapped,{simplify:n,fuzzyValue:i}),`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`);let l=NO([e,t]),{shape:u,evolution:d,diagnostics:f}=U().intersectWithHistory(e.wrapped,t.wrapped,l,G,{simplify:n,fuzzyValue:i});if(f.hasErrors){if(U().isNull(u))return U().dispose(u),console.warn(`brepjs: intersect history path produced null result; retrying without evolution tracking.`,f),rA(U().intersect(e.wrapped,t.wrapped,{simplify:n,fuzzyValue:i}),`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`);console.warn(`brepjs: intersect reported OCCT warnings/errors but produced a shape. Continuing with result.`,f)}let p=rA(u,`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`,`Shapes may not overlap. Verify they share a common volume before intersecting.`,f);return p.ok&&PO(d,[e,t],p.value),p}function sA(e,t,n,r,i,a,o,s){if(o?.aborted)throw o.reason;let c=n-t;if(c===1)return O(Pk(e,t));if(c===2)return iA(Pk(e,t),Pk(e,t+1),{optimisation:r,simplify:!1,trackEvolution:a,fuzzyValue:s,unsafe:!0,...o?{signal:o}:{}});let l=t+Math.ceil(c/2),u=sA(e,t,l,r,i,a,o,s);if(A(u))return u;let d=sA(e,l,n,r,i,a,o,s);return A(d)?d:iA(u.value,d.value,{optimisation:r,simplify:i,trackEvolution:a,fuzzyValue:s,unsafe:!0,...o?{signal:o}:{}})}function cA(e,{optimisation:t=`none`,simplify:n=!1,strategy:r=`native`,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;if(e.length===0)return k(F(`FUSE_ALL_EMPTY`,`fuseAll requires at least one shape`));if(e.length===1)return O(Fk(e));for(let t=0;t<e.length;t++){let n=nA(Pk(e,t),`fuseAll: shape at index ${t}`);if(A(n))return n}if(r===`native`){let o=rA(U().fuseAll(e.map(e=>e.wrapped),{optimisation:t,simplify:n,strategy:r,fuzzyValue:a,...i?{signal:i}:{}}),`FUSE_ALL_NOT_3D`,`fuseAll did not produce a 3D shape`);return o.ok&&s&&FO(e,o.value),o}return sA(e,0,e.length,t,n,s,i,a)}function lA(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;if(t.length===0)return O(e);let c=nA(e,`cutAll: base`);if(A(c))return c;for(let e=0;e<t.length;e++){let n=nA(Pk(t,e),`cutAll: tool at index ${e}`);if(A(n))return n}let l=[e,...t],u=rA(U().cutAll(e.wrapped,t.map(e=>e.wrapped),{optimisation:n,simplify:r,fuzzyValue:a}),`CUT_ALL_NOT_3D`,`cutAll did not produce a 3D shape`);return u.ok&&s&&FO(l,u.value),u}function uA(e,t){let n=U(),r=fD(e.xDir,t),i=fD(e.yDir,t),a=fD(e.xDir,-t),o=fD(e.yDir,-t),s=e.origin,c=[...uD(uD(s,a),o)],l=[...uD(uD(s,r),o)],u=[...uD(uD(s,r),i)],d=[...uD(uD(s,a),i)],f=[n.makeLineEdge(c,l),n.makeLineEdge(l,u),n.makeLineEdge(u,d),n.makeLineEdge(d,c)],p=n.makeWire(f),m=n.makeFace(p,!0);for(let e of f)e.delete();return p.delete(),m}function dA(e,t,{approximation:n=!0,planeSize:r=1e4}={}){if(U().isNull(e.wrapped))return k(F(N.NULL_SHAPE_INPUT,`section: shape is a null shape`));let i=uA(typeof t==`string`?j(AD(t)):t,r);try{return O(W(U().section(e.wrapped,i,n)))}catch(e){let n=e instanceof Error?e.message:String(e),r=typeof t==`string`?t:`custom`;return k(P(`SECTION_FAILED`,`Section with ${r} plane failed: ${n}`,e,{operation:`section`,plane:r},`The cutting plane may not intersect the shape. Verify plane position relative to shape bounds.`))}finally{i.delete()}}function fA(e){let t=U(),n=new Map,r=new Map;for(let i of e){let e=VE(i),a=e[0]?t.hashCode(e[0].wrapped,G):-1,o=e.length>1&&e[1]?t.hashCode(e[1].wrapped,G):a;r.set(i,[a,o]);for(let e of[a,o]){let t=n.get(e)??[];t.push(i),n.set(e,t)}}return{vertexToEdges:n,edgeVertexHashes:r}}function pA(e,t,n){let r=t.vertexToEdges.get(e);if(r)for(let i of r){if(n.has(i))continue;let r=t.edgeVertexHashes.get(i);if(r)return n.add(i),{edge:i,nextTip:r[0]===e?r[1]:r[0]}}}function mA(e,t,n){n.add(e);let r=[e],i=t.edgeVertexHashes.get(e);if(!i)return r;let a=[i[1],i[0]];for(let e=0;e<2;e++){let i=a[e];if(i===void 0)continue;let o=pA(i,t,n);for(;o;)e===0?r.push(o.edge):r.unshift(o.edge),i=o.nextTip,o=pA(i,t,n)}return r}function hA(e){let t=U(),n=fA(e),r=new Set,i=[];for(let a of e){if(r.has(a))continue;let e=mA(a,n,r);try{let n=t.makeWire(e.map(e=>e.wrapped));i.push(W(n))}catch{}}return i}function gA(e){let t=U(),n=0,r=-1;for(let i=0;i<e.length;i++){let a=e[i];if(!a)continue;let o=t.boundingBox(a.wrapped),s=o.max[0]-o.min[0],c=o.max[1]-o.min[1],l=o.max[2]-o.min[2],u=s*s+c*c+l*l;u>r&&(r=u,n=i)}return n}function _A(e,t,n={}){let r=dA(e,t,n);if(!r.ok)return r;let i=BE(r.value);if(i.length===0){let e=RE(r.value);if(e.length===0)return k(P(`SECTION_FAILED`,`sectionToFace: section produced no geometry`,void 0,void 0,`The cutting plane may not intersect the shape. Verify plane position relative to shape bounds.`));i.push(...hA(e))}if(i.length===0)return k(P(`SECTION_FAILED`,`sectionToFace: section produced no usable geometry`,void 0,void 0,`The cutting plane may not intersect the shape. Verify plane position relative to shape bounds.`));let a=gA(i),o=Pk(i,a),s=i.filter((e,t)=>t!==a);return Xk(o,s.length>0?s:void 0)}function vA(e,t){if(t.length===0)return O(e);if(U().isNull(e.wrapped))return k(F(N.NULL_SHAPE_INPUT,`split: shape is a null shape`));for(let e=0;e<t.length;e++)if(U().isNull(Pk(t,e).wrapped))return k(F(N.NULL_SHAPE_INPUT,`splitShape: tool at index ${e} is a null shape`));try{return O(W(U().split(e.wrapped,t.map(e=>e.wrapped))))}catch(e){let n=e instanceof Error?e.message:String(e);return k(P(`SPLIT_FAILED`,`Split operation failed on ${t.length} tool(s): ${n}`,e,{operation:`split`,toolCount:t.length},`The splitting tools may not intersect the shape. Ensure tools cross through the shape's interior.`))}}function yA(e,t,n={}){let r=[];for(let i of t){let t=dA(e,i,n);if(A(t))return t;r.push(t.value)}return O(r)}function bA(e,t,n){if(t.length===0)return O(e);let r=n?.optimisation===`commonFace`?1:n?.optimisation===`sameFace`?2:0,i=U(),a=t.map(e=>({op:e.op,tool:e.tool.wrapped}));try{let o=i.booleanPipeline?.(e.wrapped,a,{glueMode:r});if(o===void 0)return xA(e,t,n);if(o===null)return k(P(`BOOLEAN_PIPELINE_FAILED`,`Boolean pipeline returned null shape`));let s=W(o);return wE(s)?O(s):k(co(`BOOLEAN_PIPELINE_NOT_3D`,`Pipeline result is not a 3D shape`))}catch(e){return k(P(`BOOLEAN_PIPELINE_FAILED`,e instanceof Error?e.message:String(e)))}}function xA(e,t,n){let r=e,i={...n?.optimisation?{optimisation:n.optimisation}:{},unsafe:!0};for(let e of t){let t=e.op===`fuse`?iA(r,e.tool,i):e.op===`cut`?aA(r,e.tool,i):oA(r,e.tool,i);if(A(t))return t;r=j(t)}return O(r)}function SA(e){return j(VD(j(BD(U().sew(e.map(e=>e.wrapped))))))}function CA(e,t=!1){let n=SA(e);return!t&&!xE(n)?k(co(`WELD_NOT_SHELL`,`Could not make a shell from faces and shells`)):O(n)}function wA(e,t,n=[0,0,0],r=[0,0,1]){return mE(U().makeCylinder(e,t,[...n],[...r]))}function TA(e){return mE(U().makeSphere(e))}function EA(e,t,n,r=[0,0,0],i=[0,0,1]){return mE(U().makeCone(e,t,n,[...r],[...i]))}function DA(e,t,n=[0,0,0],r=[0,0,1]){return mE(U().makeTorus(e,t,[...n],[...r]))}function OA(e,t,n){return mE(U().makeEllipsoid(e,t,n))}function kA(e){return lE(U().makeVertex(e[0],e[1],e[2]))}function AA(e,t,n=1e-6){return Ia(BD(U().offset(e.wrapped,t,n)),e=>Ia(VD(e),e=>wE(e)?O(e):k(co(`OFFSET_NOT_3D`,`Could not offset to a 3d shape`))))}function jA(e){return gE(U().makeCompound(e.map(e=>e.wrapped)))}function MA(e){let t=SA(e);return Ia(VD(U().solidFromShell(t.wrapped)),e=>SE(e)?O(e):k(co(`SOLID_BUILD_FAILED`,`Could not make a solid of faces and shells`)))}function NA(e){return{position:e.vertices,normal:e.normals,index:e.triangles}}function PA(e){return{position:e.vertices,normal:e.normals,index:e.triangles,groups:e.faceGroups.map((e,t)=>({start:e.start,count:e.count,materialIndex:t,faceId:e.faceId}))}}function FA(e){return{position:e.lines}}function IA(e,t){return{coarse:NA(e.coarse),fine:NA(e.fine),coarseDistance:t?.coarse??50,fineDistance:t?.fine??0}}function LA(e,t,n,r){if(t.length===0)return k(F(`CHAMFER_ANGLE_NO_EDGES`,`chamferDistAngle requires at least one edge`,void 0,{edgeCount:0}));if(n<=0)return k(F(`CHAMFER_ANGLE_BAD_DISTANCE`,`distance must be positive, got ${n}`,void 0,{distance:n}));if(r<=0||r>=90)return k(F(`CHAMFER_ANGLE_BAD_ANGLE`,`angleDeg must be in range (0, 90), got ${r}`,void 0,{angleDeg:r}));let i;try{let a=U(),o=t.map(e=>e.wrapped);i=a.chamferDistAngle(e.wrapped,o,n,r)}catch(e){return k(P(`CHAMFER_ANGLE_FAILED`,`chamferDistAngle kernel call failed: ${e instanceof Error?e.message:String(e)}`,e,{distance:n,angleDeg:r,edgeCount:t.length}))}let a=BD(i);if(A(a))return a;let o=W(a.value);return wE(o)?O(o):(o[Symbol.dispose](),k(co(`CHAMFER_ANGLE_NOT_3D`,`chamferDistAngle did not produce a 3D shape`)))}function RA(e,t){return e.map(e=>DE(e,t))}function zA(e,t){let n=U(),r=n.iterShapes(e,t),i=[],a=new Map;for(let e of r){let t=n.hashCode(e,G),r=a.get(t);r?r.some(t=>n.isSame(t,e))||(r.push(e),i.push(e)):(a.set(t,[e]),i.push(e))}return RA(i,t)}function BA(e){let t=FE(e);if(t.edgeToFaces)return t.edgeToFaces;let n=U(),r=new Map,i=n.iterShapes(e.wrapped,`face`);for(let e of i){let t=n.iterShapes(e,`edge`);for(let i of t){let t=n.hashCode(i,G),a=r.get(t);a||(a=[],r.set(t,a)),a.some(t=>n.isSame(t.edge,i)&&n.isSame(t.face,e))||a.push({edge:i,face:e})}}return t.edgeToFaces=r,r}function VA(e,t){let n=U(),r=BA(e),i=n.hashCode(t.wrapped,G),a=r.get(i)??[],o=[],s=new Map;for(let e of a){if(!n.isSame(e.edge,t.wrapped))continue;let r=n.hashCode(e.face,G),i=s.get(r);i?i.some(t=>n.isSame(t,e.face))||(i.push(e.face),o.push(e.face)):(s.set(r,[e.face]),o.push(e.face))}return RA(o,`face`)}function HA(e){return zA(e.wrapped,`edge`)}function UA(e){return zA(e.wrapped,`wire`)}function WA(e){return zA(e.wrapped,`vertex`)}function GA(e,t){let n=U(),r=BA(e),i=zA(t.wrapped,`edge`),a=[],o=new Map;for(let e of i){let i=n.hashCode(e.wrapped,G),s=r.get(i)??[];for(let e of s){if(n.isSame(e.face,t.wrapped))continue;let r=n.hashCode(e.face,G),i=o.get(r);i?i.some(t=>n.isSame(t,e.face))||(i.push(e.face),a.push(e.face)):(o.set(r,[e.face]),a.push(e.face))}}return RA(a,`face`)}function KA(e,t){let n=U(),r=n.iterShapes(e.wrapped,`edge`),i=n.iterShapes(t.wrapped,`edge`),a=new Map;for(let e of i){let t=n.hashCode(e,G),r=a.get(t);r||(r=[],a.set(t,r)),r.push(e)}let o=[];for(let e of r)a.get(n.hashCode(e,2147483647))?.some(t=>n.isSame(e,t))&&o.push(e);return RA(o,`edge`)}function qA(e){let t=U();return t.getNurbsCurveData?t.getNurbsCurveData(e.wrapped):null}function JA(e){let t=U();return t.getNurbsSurfaceData?t.getNurbsSurfaceData(e.wrapped):null}var YA={cut:aA,cutAll:lA,fuse:iA,fuseAll:cA};function XA(e){return{totalInputs:e.totalInputs,batchAttempts:e.batchAttempts,batchSucceeded:e.batchSucceeded,singletonFallbacks:e.singletonFallbacks,failedInputs:[...e.failedInputs].sort((e,t)=>e-t)}}function ZA(e,t,n={}){return QA(YA,e,t,n)}function QA(e,t,n,r={}){if(r.signal?.aborted)throw r.signal.reason;let i={totalInputs:n.length,batchAttempts:0,batchSucceeded:0,singletonFallbacks:0,failedInputs:new Set},a=$A(e,t,n,0,r,i);return A(a)?a:O({shape:a.value,telemetry:XA(i)})}function $A(e,t,n,r,i,a){if(n.length===0)return O(t);if(n.length===1)return ej(e,t,n,r,i,a);a.batchAttempts++;let o=aj(()=>e.cutAll(t,n,i));if(o&&o.ok)return a.batchSucceeded++,o;if(i.signal?.aborted)throw i.signal.reason;let s=Math.floor(n.length/2),c=$A(e,t,n.slice(0,s),r,i,a);return c.ok?$A(e,c.value,n.slice(s),r+s,i,a):c}function ej(e,t,n,r,i,a){a.singletonFallbacks++;let o=Fk(n),s=aj(()=>e.cut(t,o,i));if(s&&s.ok)return s;if(i.signal?.aborted)throw i.signal.reason;return a.failedInputs.add(r),O(t)}function tj(e,t={}){return nj(YA,e,t)}function nj(e,t,n={}){if(n.signal?.aborted)throw n.signal.reason;if(t.length===0)return k(F(N.FUSE_ALL_EMPTY,`fuseAllBisect requires at least one shape`));let r={totalInputs:t.length,batchAttempts:0,batchSucceeded:0,singletonFallbacks:0,failedInputs:new Set},i=rj(e,t,0,n,r);return A(i)?i:O({shape:i.value,telemetry:XA(r)})}function rj(e,t,n,r,i){if(t.length===1)return O(Fk(t));i.batchAttempts++;let a=aj(()=>e.fuseAll(t,r));if(a&&a.ok)return i.batchSucceeded++,a;if(r.signal?.aborted)throw r.signal.reason;let o=Math.floor(t.length/2);return ij(e,rj(e,t.slice(0,o),n,r,i),rj(e,t.slice(o),n+o,r,i),t,n,o,r,i)}function ij(e,t,n,r,i,a,o,s){if(t.ok&&n.ok){s.singletonFallbacks++;let c=aj(()=>e.fuse(t.value,n.value,o));if(c&&c.ok)return c;for(let e=a;e<r.length;e++)s.failedInputs.add(i+e);return t}if(t.ok){for(let e=a;e<r.length;e++)s.failedInputs.add(i+e);return t}if(n.ok){for(let e=0;e<a;e++)s.failedInputs.add(i+e);return n}return t}function aj(e){try{return e()}catch{return null}}function oj(e,t,n){return U().checkBoolean(e.wrapped,t.wrapped,n)}function sj(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function cj(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function lj(e,t,n,r){let i=W(e);if(!wE(i)){let a=e.ShapeType(),o=[`COMPOUND`,`COMPSOLID`,`SOLID`,`SHELL`,`FACE`,`WIRE`,`EDGE`,`VERTEX`,`SHAPE`][a]??`UNKNOWN(${a})`;return i[Symbol.dispose](),k(co(t,`${n}. Got ${o} instead.`,void 0,void 0,r))}return O(i)}function uj(e,t){let n=[],r=new Map;for(let i of e){let e=t(i)??0;typeof e==`number`&&e<=0||Array.isArray(e)&&(e[0]<=0||e[1]<=0)||(n.push(i),r.set(U().hashCode(i.wrapped,G),e))}return n.length===0?null:{edges:n,kernelParam:e=>r.get(U().hashCode(e,2147483647))??1}}function dj(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a}={}){if(i?.aborted)throw i.reason;let o=sj(e,`fuseWithEvolution: first operand`);if(A(o))return o;let s=sj(t,`fuseWithEvolution: second operand`);if(A(s))return s;let c=NO([e,t]),{shape:l,evolution:u}=U().fuseWithHistory(e.wrapped,t.wrapped,c,G,{optimisation:n,simplify:r,fuzzyValue:a}),d=lj(l,`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`,`Common causes: overlapping coplanar faces, zero-thickness geometry, or non-manifold input. Try autoHeal() on inputs first.`);return d.ok?(PO(u,[e,t],d.value),O({shape:d.value,evolution:u})):d}function fj(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a}={}){if(i?.aborted)throw i.reason;let o=sj(e,`cutWithEvolution: base`);if(A(o))return o;let s=sj(t,`cutWithEvolution: tool`);if(A(s))return s;let c=NO([e,t]),{shape:l,evolution:u}=U().cutWithHistory(e.wrapped,t.wrapped,c,G,{optimisation:n,simplify:r,fuzzyValue:a}),d=lj(l,`CUT_NOT_3D`,`Cut did not produce a 3D shape`,`Common causes: tool does not fully intersect the base, or produces a zero-thickness sliver. Ensure the tool extends through the shape.`);return d.ok?(PO(u,[e,t],d.value),O({shape:d.value,evolution:u})):d}function pj(e,t,{simplify:n=!1,signal:r,fuzzyValue:i}={}){if(r?.aborted)throw r.reason;let a=sj(e,`intersectWithEvolution: first operand`);if(A(a))return a;let o=sj(t,`intersectWithEvolution: second operand`);if(A(o))return o;let s=NO([e,t]),{shape:c,evolution:l}=U().intersectWithHistory(e.wrapped,t.wrapped,s,G,{simplify:n,fuzzyValue:i}),u=lj(c,`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`,`Shapes may not overlap. Verify they share a common volume before intersecting.`);return u.ok?(PO(l,[e,t],u.value),O({shape:u.value,evolution:l})):u}function mj(e,t,n){let r=cj(e,`filletWithEvolution: shape`);if(A(r))return r;if(typeof n==`number`&&n<=0)return k(F(`INVALID_FILLET_RADIUS`,`Fillet radius must be positive`,void 0,void 0,`Provide a positive radius value greater than 0`));if(Array.isArray(n)&&(n[0]<=0||n[1]<=0))return k(F(`INVALID_FILLET_RADIUS`,`Fillet radii must both be positive`,void 0,void 0,`Both radius values must be greater than 0`));let i=t??RE(e);if(i.length===0)return k(F(N.FILLET_NO_EDGES,`No edges found for fillet`,void 0,void 0,`Check that the shape has edges, or adjust your edge finder criteria`));try{let t,r;if(typeof n==`function`){let e=uj(i,n);if(!e)return k(F(N.FILLET_NO_EDGES,`No edges with positive radius for fillet`,void 0,void 0,`Check that the radius callback returns positive values`));t=e.edges,r=e.kernelParam}else t=[...i],r=n;let a=NO([e]),{shape:o,evolution:s}=U().filletWithHistory(e.wrapped,t.map(e=>e.wrapped),r,a,G),c=W(o);return wE(c)?(PO(s,[e],c),O({shape:c,evolution:s})):k(P(N.FILLET_NOT_3D,`Fillet result is not a 3D shape`))}catch(e){return k(P(`FILLET_FAILED`,`Fillet operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`fillet`,edgeCount:i.length,radius:n}))}}function hj(e,t,n){let r=cj(e,`chamferWithEvolution: shape`);if(A(r))return r;if(typeof n==`number`&&n<=0)return k(F(`INVALID_CHAMFER_DISTANCE`,`Chamfer distance must be positive`,void 0,void 0,`Provide a positive distance value greater than 0`));if(Array.isArray(n)&&(n[0]<=0||n[1]<=0))return k(F(`INVALID_CHAMFER_DISTANCE`,`Chamfer distances must both be positive`,void 0,void 0,`Both distance values must be greater than 0`));let i=t??RE(e);if(i.length===0)return k(F(N.CHAMFER_NO_EDGES,`No edges found for chamfer`));try{let t,r;if(typeof n==`function`){let e=uj(i,n);if(!e)return k(F(N.CHAMFER_NO_EDGES,`No edges with positive distance for chamfer`));t=e.edges,r=e.kernelParam}else t=[...i],r=n;let a=NO([e]),{shape:o,evolution:s}=U().chamferWithHistory(e.wrapped,t.map(e=>e.wrapped),r,a,G),c=W(o);return wE(c)?(PO(s,[e],c),O({shape:c,evolution:s})):k(P(N.CHAMFER_NOT_3D,`Chamfer result is not a 3D shape`))}catch(e){return k(P(`CHAMFER_FAILED`,`Chamfer operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`chamfer`,edgeCount:i.length,distance:n}))}}function gj(e,t,n,r=.001){let i=cj(e,`shellWithEvolution: shape`);if(A(i))return i;if(n<=0)return k(F(`INVALID_THICKNESS`,`Shell thickness must be positive`));if(t.length===0)return k(F(`NO_FACES`,`At least one face must be specified for shell`));try{let i=NO([e]),{shape:a,evolution:o}=U().shellWithHistory(e.wrapped,t.map(e=>e.wrapped),n,i,G,r),s=W(a);return wE(s)?(PO(o,[e],s),O({shape:s,evolution:o})):k(P(`SHELL_RESULT_NOT_3D`,`Shell result is not a 3D shape`))}catch(e){return k(P(`SHELL_FAILED`,`Shell operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`shell`,faceCount:t.length,thickness:n}))}}function _j(e,t,n){try{let r=W(U().positionOnCurve(e.wrapped,t.wrapped,n));return wE(r)?O(r):k(P(N.POSITION_ON_CURVE_FAILED,`positionOnCurve did not produce a 3D shape`))}catch(e){return k(P(N.POSITION_ON_CURVE_FAILED,`Failed to position shape on curve at param ${n}`,e))}}function vj(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function yj(e,t){if(typeof e==`number`&&e<=0)return k(F(t.code,t.scalar,void 0,void 0,t.scalarHint));if(Array.isArray(e)&&(e[0]<=0||e[1]<=0))return k(F(t.code,t.pair,void 0,void 0,t.pairHint))}function bj(e,t){let n=[],r=new Map;for(let i of e){let e=t(i)??0;typeof e==`number`&&e<=0||Array.isArray(e)&&(e[0]<=0||e[1]<=0)||(n.push(i),r.set(U().hashCode(i.wrapped,G),e))}return n.length===0?null:{edges:n,kernelParam:e=>{let t=r.get(U().hashCode(e,G));if(t===void 0)throw Error(`fillet/chamfer: edge hash not found — possible hash collision`);return t}}}function xj(e,t,n,r,i){let a=W(t);return wE(a)?(PO(e,n,a),O(a)):k(P(r,i))}function Sj(e,t){if(typeof t!=`function`)return{filteredFaces:[...e],kernelAngle:t};let n=[],r=new Map;for(let i of e){let e=t(i);e===null||e===0||Math.abs(e)>=90||(n.push(i),r.set(U().hashCode(i.wrapped,G),e))}return{filteredFaces:n,kernelAngle:e=>{let t=r.get(U().hashCode(e,G));if(t===void 0)throw Error(`draft: face hash not found — possible hash collision`);return t}}}function Cj(e,t){let n=vj(e,`thicken: shape`);if(A(n))return n;try{let n=NO([e]),{shape:r,evolution:i}=U().thickenWithHistory(e.wrapped,t,n,G),a=W(r);return PO(i,[e],a),O(a)}catch(e){return k(P(`THICKEN_FAILED`,`Thicken operation failed: ${e instanceof Error?e.message:String(e)}`,e))}}function wj(e,t,n){let r=vj(e,`fillet: shape`);if(A(r))return r;let i=yj(n,{code:`INVALID_FILLET_RADIUS`,scalar:`Fillet radius must be positive`,pair:`Fillet radii must both be positive`,scalarHint:`Provide a positive radius value greater than 0`,pairHint:`Both radius values must be greater than 0`});if(i)return i;let a=t??RE(e);if(a.length===0)return k(F(N.FILLET_NO_EDGES,`No edges found for fillet`,void 0,void 0,`Check that the shape has edges, or adjust your edge finder criteria`));if(typeof n==`function`){let e=bj(a,n);return e?O({filteredEdges:e.edges,kernelRadius:e.kernelParam,selectedCount:a.length}):k(F(N.FILLET_NO_EDGES,`No edges with positive radius for fillet`,void 0,void 0,`Check that the radius callback returns positive values`))}return O({filteredEdges:[...a],kernelRadius:n,selectedCount:a.length})}function Tj(e,t,n,{trackEvolution:r=!0}={}){let i=wj(e,t,n);if(A(i))return i;let{filteredEdges:a,kernelRadius:o,selectedCount:s}=i.value;try{let t=a.map(e=>e.wrapped);if(!r){let n=W(U().fillet(e.wrapped,t,o));return wE(n)?O(n):k(P(N.FILLET_NOT_3D,`Fillet result is not a 3D shape`))}let n=NO([e]),{shape:i,evolution:s}=U().filletWithHistory(e.wrapped,t,o,n,G);return xj(s,i,[e],N.FILLET_NOT_3D,`Fillet result is not a 3D shape`)}catch(e){return k(P(`FILLET_FAILED`,`Fillet operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`fillet`,edgeCount:s,radius:n}))}}function Ej(e,t,n){let r=vj(e,`chamfer: shape`);if(A(r))return r;let i=yj(n,{code:`INVALID_CHAMFER_DISTANCE`,scalar:`Chamfer distance must be positive`,pair:`Chamfer distances must both be positive`,scalarHint:`Provide a positive distance value greater than 0`,pairHint:`Both distance values must be greater than 0`});if(i)return i;let a=t??RE(e);if(a.length===0)return k(F(N.CHAMFER_NO_EDGES,`No edges found for chamfer`));try{let t,r;if(typeof n==`function`){let e=bj(a,n);if(!e)return k(F(N.CHAMFER_NO_EDGES,`No edges with positive distance for chamfer`));t=e.edges,r=e.kernelParam}else t=[...a],r=n;let i=NO([e]),{shape:o,evolution:s}=U().chamferWithHistory(e.wrapped,t.map(e=>e.wrapped),r,i,G);return xj(s,o,[e],N.CHAMFER_NOT_3D,`Chamfer result is not a 3D shape`)}catch(e){return k(P(`CHAMFER_FAILED`,`Chamfer operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`chamfer`,edgeCount:a.length,distance:n}))}}function Dj(e,t,n,r=.001,{trackEvolution:i=!0}={}){let a=vj(e,`shell: shape`);if(A(a))return a;if(n<=0)return k(F(`INVALID_THICKNESS`,`Shell thickness must be positive`));if(t.length===0)return k(F(`NO_FACES`,`At least one face must be specified for shell`));try{if(!i){let i=W(U().shell(e.wrapped,t.map(e=>e.wrapped),n,r));return wE(i)?O(i):k(P(`SHELL_RESULT_NOT_3D`,`Shell result is not a 3D shape`))}let a=NO([e]),{shape:o,evolution:s}=U().shellWithHistory(e.wrapped,t.map(e=>e.wrapped),n,a,G,r),c=W(o);return wE(c)?(PO(s,[e],c),O(c)):k(P(`SHELL_RESULT_NOT_3D`,`Shell result is not a 3D shape`))}catch(e){return k(P(`SHELL_FAILED`,`Shell operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`shell`,faceCount:t.length,thickness:n}))}}function Oj(e,t,n=1e-6){let r=vj(e,`offset: shape`);if(A(r))return r;if(Math.abs(t)<1e-10)return k(F(`ZERO_OFFSET`,`Offset distance cannot be zero`));try{let r=NO([e]),{shape:i,evolution:a}=U().offsetWithHistory(e.wrapped,t,r,G,n),o=W(i);return wE(o)?(PO(a,[e],o),O(o)):k(P(`OFFSET_RESULT_NOT_3D`,`Offset result is not a 3D shape`))}catch(e){return k(P(`OFFSET_FAILED`,`Offset operation failed: ${e instanceof Error?e.message:String(e)}`,e))}}function kj(e,t,n){let r=vj(e,`draft: shape`);if(A(r))return r;if(typeof n==`number`){if(Math.abs(n)<1e-10)return k(F(N.DRAFT_INVALID_ANGLE,`Draft angle cannot be zero`,void 0,void 0,`Provide a non-zero angle in degrees`));if(Math.abs(n)>=90)return k(F(N.DRAFT_INVALID_ANGLE,`Draft angle must be between -90 and 90 degrees (exclusive)`,void 0,void 0,`Typical draft angles are 1-5 degrees for injection molding`))}if(t.length===0)return k(F(N.DRAFT_NO_FACES,`No faces specified for draft`,void 0,void 0,`Select at least one face to apply the draft angle to`))}function Aj(e,t,n,r,i){let a=kj(e,t,i);if(a)return a;try{let{filteredFaces:a,kernelAngle:o}=Sj(t,i);if(a.length===0)return k(F(N.DRAFT_NO_FACES,`No faces with valid draft angle`,void 0,void 0,`Check that the angle callback returns non-zero values between -90 and 90 degrees`));let s=NO([e]),{shape:c,evolution:l}=U().draftWithHistory(e.wrapped,a.map(e=>e.wrapped),[n[0],n[1],n[2]],[r[0],r[1],r[2]],o,s,G);return xj(l,c,[e],N.DRAFT_NOT_3D,`Draft result is not a 3D shape`)}catch(e){let n=e instanceof Error?e.message:String(e);return k(P(N.DRAFT_FAILED,`Draft operation failed: ${n}`,e,{operation:`draft`,faceCount:t.length,angle:i}))}}function jj(e,t,n){if(n.length===0)return k(F(N.VARIABLE_FILLET_FAILED,`radii must contain at least one radius spec`));for(let e of n)if(e.radius<=0)return k(F(N.VARIABLE_FILLET_FAILED,`All radius values must be positive`));let r=U();try{let i=JSON.stringify({edge:r.hashCode(t.wrapped,G),radii:n.map(e=>({param:e.param,radius:e.radius}))}),a=W(r.filletVariable(e.wrapped,i));return wE(a)?SE(a)?O(a):(a[Symbol.dispose](),k(P(N.VARIABLE_FILLET_FAILED,`Variable-radius fillet did not produce a solid`))):(a[Symbol.dispose](),k(P(N.VARIABLE_FILLET_FAILED,`Variable-radius fillet did not produce a 3D shape`)))}catch(e){return k(P(N.VARIABLE_FILLET_FAILED,`Variable-radius fillet failed`,e))}}function Mj(e){return tD(e)}function Nj(e){if(!SE(e))return k(F(`NOT_A_SOLID`,`Input shape is not a solid`));let t=Mj(e);try{let n=U().healSolid(e.wrapped);if(!n)return t?O(e):k(P(N.HEAL_NO_EFFECT,`Solid healing had no effect — shape is still invalid`));let r=W(n);return SE(r)?(LE(r),Mj(r)?O(r):k(P(`HEAL_SOLID_INCOMPLETE`,`Healed result is still invalid after ShapeFix_Solid`))):k(P(`HEAL_RESULT_NOT_SOLID`,`Healed result is not a solid`))}catch(e){return k(P(`HEAL_SOLID_FAILED`,`Solid healing failed`,e))}}function Pj(e){if(!bE(e))return k(F(`NOT_A_FACE`,`Input shape is not a face`));try{let t=W(U().healFace(e.wrapped));return bE(t)?O(t):k(P(`HEAL_RESULT_NOT_FACE`,`Healed result is not a face`))}catch(e){return k(P(`HEAL_FACE_FAILED`,`Face healing failed`,e))}}function Fj(e,t){if(!yE(e))return k(F(`NOT_A_WIRE`,`Input shape is not a wire`));try{let n=W(U().healWire(e.wrapped,t?.wrapped));return yE(n)?O(n):k(P(`HEAL_RESULT_NOT_WIRE`,`Healed result is not a wire`))}catch(e){return k(P(`HEAL_WIRE_FAILED`,`Wire healing failed`,e))}}function Ij(e){return SE(e)?Nj(e):bE(e)?Pj(e):yE(e)?Fj(e):O(e)}function Lj(e,t){let n=t?.fixWires!==!1,r=t?.fixFaces!==!1,i=t?.fixSolids!==!1,a=t?.fixSelfIntersection===!0,o=t?.sewTolerance,s=[],c=[];if(Mj(e))return O({shape:e,report:{isValid:!0,alreadyValid:!0,wiresHealed:0,facesHealed:0,solidHealed:!1,steps:[`Shape already valid`],diagnostics:[{name:`validation`,attempted:!0,succeeded:!0}]}});s.push(`Shape invalid — applying shape-level healing`);let l=BE(e).length,u=zE(e).length,d=e,f=!1;if(o!==void 0)try{d=W(U().sew([d.wrapped],o)),s.push(`Applied sewing with tolerance ${o}`),c.push({name:`sew`,attempted:!0,succeeded:!0,detail:`tolerance=${o}`})}catch(e){let t=e instanceof Error?e.message:String(e);s.push(`Sewing failed: ${t}`),c.push({name:`sew`,attempted:!0,succeeded:!1,detail:t})}if(a&&n){let e=BE(d),t=0;for(let n of e)try{U().fixSelfIntersection(n.wrapped),t++}catch{}s.push(`Self-intersection fix: ${t}/${e.length} wires`),c.push({name:`fixSelfIntersection`,attempted:!0,succeeded:t>0,detail:`${t}/${e.length} wires fixed`})}if(SE(d)&&i||bE(d)&&r||yE(d)&&n){let t=Ij(d);Na(t)?(d=t.value,SE(e)?(f=!0,s.push(`Applied ShapeFix_Solid`),c.push({name:`healSolid`,attempted:!0,succeeded:!0})):bE(e)?(s.push(`Applied ShapeFix_Face`),c.push({name:`healFace`,attempted:!0,succeeded:!0})):(s.push(`Applied ShapeFix_Wire`),c.push({name:`healWire`,attempted:!0,succeeded:!0}))):(s.push(`Shape-level healing failed`),c.push({name:`healShape`,attempted:!0,succeeded:!1}))}else c.push({name:`healShape`,attempted:!1,succeeded:!1,detail:`skipped by options`});let p=BE(d).length,m=zE(d).length,h=Math.abs(p-l),g=Math.abs(m-u);h>0&&s.push(`Wire count changed by ${h}`),g>0&&s.push(`Face count changed by ${g}`);let _=Mj(d);return s.push(_?`Final validation: valid`:`Final validation: still invalid`),c.push({name:`finalValidation`,attempted:!0,succeeded:_}),O({shape:d,report:{isValid:_,alreadyValid:!1,wiresHealed:h,facesHealed:g,solidHealed:f,steps:s,diagnostics:c}})}function Rj(e){try{return O(W(U().fixShape(e.wrapped)))}catch(e){return k(P(N.FIX_SHAPE_FAILED,`ShapeFix_Shape failed`,e))}}function zj(e){try{let t=W(U().solidFromShell(e.wrapped));return SE(t)?Mj(t)?O(t):k(P(N.SOLID_FROM_SHELL_FAILED,`solidFromShell produced an invalid solid`)):k(P(N.SOLID_FROM_SHELL_FAILED,`solidFromShell did not produce a solid`))}catch(e){return k(P(N.SOLID_FROM_SHELL_FAILED,`Failed to create solid from shell`,e))}}function Bj(e){try{let t=W(U().fixSelfIntersection(e.wrapped));return yE(t)?O(t):k(P(N.FIX_SELF_INTERSECTION_FAILED,`Result is not a wire`))}catch(e){return k(P(N.FIX_SELF_INTERSECTION_FAILED,`Failed to fix wire self-intersection`,e))}}function Vj(e,{profile:t,endFactor:n=1}){return e<1e-10?k(F(`INVALID_EXTRUSION_LENGTH`,`Extrusion length too small (< 1e-10)`)):t!==`s-curve`&&t!==`linear`?k(F(`UNSUPPORTED_PROFILE`,`Unsupported extrusion profile: ${String(t)}`)):O(U().buildExtrusionLaw(t,e,n).Trim(0,e,1e-6))}function Hj(e,t){let n=U(),r=n.makeLineEdge([...e],[...t]);return W(n.makeWire([r]))}function Uj(e,t,n,r,i,a=!1){return W(U().makeHelixWire(e,t,n,[...r],[...i],a))}function Wj(e,t,n={},r=!1){if(n.mode===`simple`&&!r){let n=W(U().simplePipe(e.wrapped,t.wrapped));return wE(n)?O(n):k(co(`SWEEP_NOT_3D`,`Simple pipe did not produce a 3D shape`))}let{frenet:i=!1,auxiliarySpine:a,law:o=null,transitionMode:s=`right`,withContact:c,support:l,forceProfileSpineOthogonality:u,tolerance:d,boundTolerance:f,angularTolerance:p,maxDegree:m,maxSegments:h}=n,g=U(),_=s===`round`?!0:!!u,v=g.sweepPipeShell(e.wrapped,t.wrapped,{transitionMode:s,contact:!!c,correction:_,frenet:i,shellMode:r,...a?.wrapped?{auxiliary:a.wrapped}:{},...o===null?{}:{law:o},...l===null?{}:{support:l},tolerance:d,boundTolerance:f,angularTolerance:p,maxDegree:m,maxSegments:h});if(r&&typeof v==`object`&&`firstShape`in v){let e=W(v.shape);if(!wE(e))return k(co(`SWEEP_NOT_3D`,`Sweep did not produce a 3D shape`));let t=W(v.firstShape),n=W(v.lastShape);return yE(t)?yE(n)?O([e,t,n]):k(co(`SWEEP_END_NOT_WIRE`,`Sweep did not produce an end Wire`)):k(co(`SWEEP_START_NOT_WIRE`,`Sweep did not produce a start Wire`))}let y=W(v);return wE(y)?O(y):k(co(`SWEEP_NOT_3D`,`Sweep did not produce a 3D shape`))}function Gj(e,t,n,r){return Wj(e,Hj(t,uD(t,n)),{support:r})}function Kj(e,t,n,r,i=!1){let a=gD(n);if(a<1e-10)return k(F(`ZERO_LENGTH_EXTRUSION`,`Extrusion vector cannot have zero length`));let o=Hj(t,uD(t,n)),s=null;if(r){let e=Vj(a,r);if(A(e))return e;s=e.value}return Wj(e,o,{law:s},i)}function qj(e,t,n,r,i,a=!1){if(Math.abs(t)<1e-10)return k(F(`ZERO_TWIST_ANGLE`,`Twist angle cannot be zero`));let o=gD(r);if(o<1e-10)return k(F(`ZERO_LENGTH_EXTRUSION`,`Extrusion vector cannot have zero length`));let s=Hj(n,uD(n,r)),c=t<0,l=Uj(360/Math.abs(t)*o,o,1,n,r,c),u=null;if(i){let e=Vj(o,i);if(A(e))return e;u=e.value}return Wj(e,s,{auxiliarySpine:l,law:u},a)}function Jj(e){let t=e.map(e=>e.location);for(let e=0;e<t.length;e++){let n=t[e];if(n!==void 0&&(n<0||n>1))return F(N.MULTI_SWEEP_FAILED,`Section ${e} location ${n} is out of range [0, 1]`)}let n=t.filter(e=>e!==void 0);for(let e=1;e<n.length;e++)if((n[e]??0)<=(n[e-1]??0))return F(N.MULTI_SWEEP_FAILED,`Section locations must be strictly increasing`)}function Yj(e,t,n){let[r,i]=n.curveParameters(t.wrapped),a=i-r,o=Array(e.length);for(let t=0;t<e.length;t++){let n=e[t]?.location;o[t]=n===void 0?NaN:r+n*a}let s=-1,c=r;for(let t=0;t<=e.length;t++){let n=t===e.length;if(!n&&!Number.isNaN(o[t]??NaN)||n){let e=n?i:o[t]??i,a=t-s-1;for(let t=1;t<=a;t++)o[s+t]=c+t/(a+1)*(e-c);n||(s=t,c=o[t]??r)}}for(let e=1;e<o.length;e++)if((o[e]??0)<=(o[e-1]??0))return k(F(N.MULTI_SWEEP_FAILED,`Computed section parameters are not strictly increasing at index ${e} (${o[e-1]?.toFixed(4)} >= ${o[e]?.toFixed(4)})`));return O(o)}function Xj(e,t,n){if(e.length<2)return k(F(N.MULTI_SWEEP_INSUFFICIENT_SECTIONS,`Multi-section sweep requires at least 2 sections, got ${e.length}`));let{solid:r=!0,ruled:i=!1,tolerance:a=1e-6}=n??{},o=Jj(e);if(o)return k(o);try{let n=U(),o=Yj(e,t,n);if(A(o))return o;let s=o.value,c=[];for(let r=0;r<e.length;r++){let i=s[r],a=e[r];if(i===void 0||a===void 0)continue;let o=n.positionOnCurve(a.wire.wrapped,t.wrapped,i);c.push(n.downcast(o,`wire`))}let l=W(n.loftAdvanced(c,{solid:r,ruled:i,tolerance:a}));return wE(l)?O(l):k(co(`MULTI_SWEEP_NOT_3D`,`Multi-section sweep did not produce a 3D shape`))}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.MULTI_SWEEP_FAILED,`Multi-section sweep failed: ${t}`,e,void 0,`Common causes: profile too large for path curvature, self-intersecting result, or discontinuous path. Try simplifying the profile or path.`))}}function Zj(e,t,n,r={}){let{transition:i=`transformed`,solid:a=!0,tolerance:o}=r;try{let r=U(),s=!a,c=n.length>0?n[0]?.wrapped:void 0,l=r.sweepPipeShell(e.wrapped,t.wrapped,{transitionMode:i,...c?{auxiliary:c}:{},shellMode:s,...o===void 0?{}:{tolerance:o,boundTolerance:o}}),u=W(typeof l==`object`&&`shape`in l?l.shape:l);return wE(u)?O(u):k(co(`GUIDED_SWEEP_NOT_3D`,`Guided sweep did not produce a 3D shape`))}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.GUIDED_SWEEP_FAILED,`Guided sweep failed: ${t}`,e,void 0,`Common causes: profile too large for path curvature, self-intersecting result, or discontinuous path. Try simplifying the profile or path.`))}}function Qj(e,t){if(U().isNull(e.wrapped))return k(F(N.NULL_SHAPE_INPUT,`extrude: face is a null shape`));if(gD(t)<1e-10)return k(F(`EXTRUDE_ZERO_VECTOR`,`extrude: extrusion vector has zero length`));try{let n=U(),r=gD(t),i=yD(t),a=n.extrude(e.wrapped,[...i],r);return O(mE(n.downcast(a,`solid`)))}catch(e){return k(P(`EXTRUDE_FAILED`,`Extrusion operation failed`,e,{operation:`extrude`,vectorLength:gD(t)}))}}function $j(e,t=[0,0,0],n=[0,0,1],r=2*Math.PI){if(U().isNull(e.wrapped))return k(F(N.NULL_SHAPE_INPUT,`revolve: face is a null shape`));try{let i=W(U().revolveVec(e.wrapped,[...t],[...n],r));return wE(i)?O(i):k(co(`REVOLUTION_NOT_3D`,`Revolution did not produce a 3D shape`))}catch(e){return k(P(`REVOLVE_FAILED`,`Revolution operation failed`,e,{operation:`revolve`,angle:r}))}}function eM(e){if(e.length===0)return O([]);let t=U(),n=[];for(let t=0;t<e.length;t++){let r=e[t];if(!r)continue;let i=typeof r.height==`number`?[0,0,r.height]:r.height,a=gD(i);if(a<1e-10)return k(F(`EXTRUDE_ALL_ZERO_VECTOR`,`extrudeAll: entry ${t} has zero-length extrusion vector`));let o=[...yD(i)];n.push({face:r.face.wrapped,direction:o,length:a})}try{return O((t.extrudeBatch?.(n)??n.map(e=>t.extrude(e.face,e.direction,e.length))).map(e=>mE(t.downcast(e,`solid`))))}catch(e){return k(P(`EXTRUDE_ALL_FAILED`,`Batch extrusion operation failed`,e))}}function tM(e,{ruled:t=!0,startPoint:n,endPoint:r,tolerance:i=1e-6}={},a=!1){if(e.length===0&&!n&&!r)return k(F(`LOFT_EMPTY`,`Loft requires at least one wire or start/end point`));let o=U(),s=n?o.makeVertex(...oD(n)):void 0,c=r?o.makeVertex(...oD(r)):void 0;try{let n=W(o.loftAdvanced(e.map(e=>e.wrapped),{solid:!a,ruled:t,tolerance:i,...s?{startVertex:s}:{},...c?{endVertex:c}:{}}));return wE(n)?O(n):k(co(`LOFT_NOT_3D`,`Loft did not produce a 3D shape`))}catch(e){return k(P(`LOFT_FAILED`,`Loft operation failed`,e,void 0,`Common causes: wire profiles with different edge counts, self-intersecting result, or profiles too far apart. Ensure profiles are compatible and ordered.`))}}function nM(e){if(e.length===0)return O([]);let t=U(),n=[],r=e.map(e=>{let r=e.startPoint?t.makeVertex(...oD(e.startPoint)):void 0,i=e.endPoint?t.makeVertex(...oD(e.endPoint)):void 0;return r&&n.push(r),i&&n.push(i),{wires:e.wires.map(e=>e.wrapped),solid:!0,ruled:e.ruled??!0,tolerance:e.tolerance??1e-6,startVertex:r,endVertex:i}});try{let e=t.loftBatch?.(r)??r.map(e=>t.loftAdvanced(e.wires,{solid:e.solid,ruled:e.ruled,tolerance:e.tolerance,startVertex:e.startVertex,endVertex:e.endVertex})),n=[];for(let t of e){let e=W(t);if(!wE(e))return k(co(`LOFT_ALL_NOT_3D`,`Batch loft entry did not produce a 3D shape`));n.push(e)}return O(n)}catch(e){return k(P(`LOFT_ALL_FAILED`,`Batch loft operation failed`,e))}finally{for(let e of n)t.dispose(e)}}function rM(e,t,n,r){let i=mE(U().makeBox(e,t,n)),a=r?.at??(r?.centered?[0,0,0]:void 0);return a?IO(i,[a[0]-e/2,a[1]-t/2,a[2]-n/2]):i}function iM(e,t,n){let r=n?.at??[0,0,0],i=n?.axis??[0,0,1],a=wA(e,t,r,i);if(n?.centered){let e=[-i[0]*t*.5,-i[1]*t*.5,-i[2]*t*.5];a=IO(a,e)}return a}function aM(e,t){let n=TA(e);return t?.at&&(n=IO(n,t.at)),n}function oM(e,t,n,r){let i=r?.at??[0,0,0],a=r?.axis??[0,0,1],o=EA(e,t,n,i,a);if(r?.centered){let e=[-a[0]*n*.5,-a[1]*n*.5,-a[2]*n*.5];o=IO(o,e)}return o}function sM(e,t,n){return DA(e,t,n?.at??[0,0,0],n?.axis??[0,0,1])}function cM(e,t,n,r){let i=OA(e,t,n);return r?.at&&(i=IO(i,r.at)),i}function lM(e,t){return zk(e,t)}function uM(e,t){let n=t?.axis??[0,0,1];return Bk(e,t?.at??[0,0,0],n)}function dM(e,t,n){let r=n?.axis??[0,0,1];return Vk(e,t,n?.at??[0,0,0],r,n?.xDir)}function fM(e,t,n,r){return Hk(e,t,n,r?.at??[0,0,0],r?.axis??[0,0,1],r?.lefthand??!1)}function pM(e,t,n){return Uk(e,t,n)}function mM(e,t,n,r,i){let a=i?.axis??[0,0,1];return Wk(e,t,n*iD,r*iD,i?.at??[0,0,0],a,i?.xDir)}function hM(e,t){return Gk(e,t)}function gM(e){return qk(e)}function _M(e,t,n){return Jk(e,t,n)}function vM(e){return Yk(e)}function yM(e){return Ia(Yk(e),e=>XT(e)?O(e):k(F(`WIRE_NOT_CLOSED`,`Assembled wire is not closed: start and end points do not coincide`)))}function bM(e,t){return Xk(e,t)}function xM(e){return $k(e)}function SM(e,t){return Qk(e,t)}function CM(e){return tA(e)}function wM(e){return kA(e)}function TM(e){return jA(e)}function EM(e){return MA(e)}function DM(e,t,n){return AA(e,t,n)}function OM(e,t){return CA(e,t)}function kM(e,t){return eA(e,t)}function AM(){return`10000000-1000-4000-8000-100000000000`.replace(/[018]/g,e=>(Number(e)^crypto.getRandomValues(new Uint8Array(1))[0]&15>>Number(e)/4).toString(16))}function jM(e=[]){let t=e.map(({shape:e,name:t,color:n,alpha:r})=>{let i=n??`#f00`;i.indexOf(`#`)===0&&(i=i.slice(1)),i.length===3&&(i=i.replace(/([0-9a-f])/gi,`$1$1`));let a=parseInt(i.substring(0,2),16),o=parseInt(i.substring(2,4),16),s=parseInt(i.substring(4,6),16),c=Math.round((r??1)*255);return{shape:e.wrapped,name:t??AM(),color:[a,o,s,c]}});return PT(U().createXCAFDocument(t))}function MM(e=[],{unit:t,modelUnit:n}={}){let r=e=>{let t=e;return t.indexOf(`#`)===0&&(t=t.slice(1)),t.length===3&&(t=t.replace(/([0-9a-f])/gi,`$1$1`)),[parseInt(t.substring(0,2),16),parseInt(t.substring(2,4),16),parseInt(t.substring(4,6),16)]},i=U(),a=e.map(({shape:e,name:t,color:n,alpha:i})=>{let[a,o,s]=r(n??`#f00`);return{shape:e.wrapped,name:t??AM(),color:[a,o,s,Math.round((i??1)*255)]}}),o=i.createXCAFDocument(a);try{let e=i.writeXCAFToSTEP(o,{unit:t,modelUnit:n});return e?O(new Blob([e],{type:`application/STEP`})):k(fo(`STEP_EXPORT_FAILED`,`Failed to write STEP file`))}finally{o.delete()}}function NM(e,t,n,r,i){if(n<1)return k(F(`PATTERN_INVALID_COUNT`,`Pattern count must be at least 1`));if(n===1)return O(e);if(xD(t))return k(F(`PATTERN_ZERO_DIRECTION`,`Pattern direction cannot be zero`));let a=yD(t);return cA(U().linearPattern(e.wrapped,[...a],r,n).map(e=>W(e)),{optimisation:`sameFace`,...i,unsafe:!0})}function PM(e,t,n,r=360,i=[0,0,0],a){if(n<1)return k(F(`PATTERN_INVALID_COUNT`,`Pattern count must be at least 1`));if(n===1)return O(e);if(xD(t))return k(F(`PATTERN_ZERO_AXIS`,`Pattern axis cannot be zero`));let o=r/n;return cA(U().circularPattern(e.wrapped,[...i],[...t],o,n).map(e=>W(e)),{optimisation:`sameFace`,...a,unsafe:!0})}function FM(e,t={}){return{name:e,children:[],...t.shape===void 0?{}:{shape:t.shape},...t.translate===void 0?{}:{translate:t.translate},...t.rotate===void 0?{}:{rotate:t.rotate},...t.metadata===void 0?{}:{metadata:t.metadata}}}function IM(e,t){return{...e,children:[...e.children,t]}}function LM(e,t){let n=e.children.findIndex(e=>e.name===t);if(n===-1)return e;let r=[...e.children];return r.splice(n,1),{...e,children:r}}function RM(e,t){return{...e,...t.shape===void 0?{}:{shape:t.shape},...t.translate===void 0?{}:{translate:t.translate},...t.rotate===void 0?{}:{rotate:t.rotate},...t.metadata===void 0?{}:{metadata:t.metadata}}}function zM(e,t){if(e.name===t)return e;for(let n of e.children){let e=zM(n,t);if(e)return e}}function BM(e,t,n=0){t(e,n);for(let r of e.children)BM(r,t,n+1)}function VM(e){let t=1;for(let n of e.children)t+=VM(n);return t}function HM(e){let t=[];return BM(e,e=>{e.shape&&t.push(e.shape)}),t}function UM(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function WM(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function GM(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function KM(e){return GM(WM(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function qM(e,t){let[n,r,i,a]=e,o=2*(i*t[2]-a*t[1]),s=2*(a*t[0]-r*t[2]),c=2*(r*t[1]-i*t[0]);return[t[0]+n*o+(i*c-a*s),t[1]+n*s+(a*o-r*c),t[2]+n*c+(r*s-i*o)]}function JM(e,t){let n=t/2,r=Math.sin(n),i=GM(e);return[Math.cos(n),i[0]*r,i[1]*r,i[2]*r]}function YM(e,t){let n=GM(e),r=GM(t),i=UM(n,r);if(i>=.999999999)return[1,0,0,0];if(i<=-.999999999)return JM(KM(n),Math.PI);let a=WM(n,r),o=Math.hypot(1+i,a[0],a[1],a[2])||1;return[(1+i)/o,a[0]/o,a[1]/o,a[2]/o]}function XM(e,t){let[n,r,i,a]=e,[o,s,c,l]=t;return[n*o-r*s-i*c-a*l,n*s+r*o+i*l-a*c,n*c-r*l+i*o+a*s,n*l+r*c-i*s+a*o]}var ZM=Math.PI/180;function QM(e,t,n){return Math.min(n,Math.max(t,e))}function $M(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function eN(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function tN(e){return $M(eN(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function nN(e,t,n,r,i){let a=n.min??r,o=n.max??i,s=Math.min(a,o),c=Math.max(a,o);return{kind:e,axis:$M(t),min:s,max:c,value:QM(n.value??0,s,c)}}function rN(e,t,n,r,i){let a=i[0]??{kind:`rotation`,axis:[0,0,1],min:0,max:0,value:0};return{type:e,parent:t,child:n,axis:{origin:r.origin,direction:$M(r.direction)},min:a.min,max:a.max,value:a.value,dofs:i}}function iN(e,t,n,r={}){return rN(`revolute`,e,t,n,[nN(`rotation`,n.direction,r,-180,180)])}function aN(e,t,n,r={}){return rN(`prismatic`,e,t,n,[nN(`translation`,n.direction,r,0,100)])}function oN(e,t,n,r={}){return rN(`cylindrical`,e,t,n,[nN(`rotation`,n.direction,r.rotation??{},-180,180),nN(`translation`,n.direction,r.translation??{},0,100)])}function sN(e,t,n,r={}){let i=$M(n.direction),a;if(r.uDirection){let e=r.uDirection,t=e[0]*i[0]+e[1]*i[1]+e[2]*i[2],n=[e[0]-t*i[0],e[1]-t*i[1],e[2]-t*i[2]];a=Math.hypot(n[0],n[1],n[2])<1e-9?tN(i):$M(n)}else a=tN(i);let o=$M(eN(i,a));return rN(`planar`,e,t,{origin:n.origin,direction:i},[nN(`translation`,a,r.u??{},-100,100),nN(`translation`,o,r.v??{},-100,100),nN(`rotation`,i,r.rotation??{},-180,180)])}function cN(e,t,n,r={}){return rN(`spherical`,e,t,{origin:n,direction:[0,0,1]},[nN(`rotation`,[1,0,0],r.x??{},-180,180),nN(`rotation`,[0,1,0],r.y??{},-180,180),nN(`rotation`,[0,0,1],r.z??{},-180,180)])}function lN(e,t){let n=e.dofs.map((e,n)=>{let r=t[n];return r===void 0?e:{...e,value:QM(r,e.min,e.max)}}),r=n[0];return r?{...e,dofs:n,value:r.value}:{...e,dofs:n}}function uN(e,t){return lN(e,[t])}function dN(e,t,n){if(t.kind===`translation`)return{position:[t.axis[0]*n,t.axis[1]*n,t.axis[2]*n],rotation:[1,0,0,0]};let r=JM(t.axis,n*ZM),i=qM(r,e);return{position:[e[0]-i[0],e[1]-i[1],e[2]-i[2]],rotation:r}}function fN(e,t=e.value){let n=Array.isArray(t)?t:void 0,r=n?void 0:t,i=e.axis.origin,a=mN;for(let t=0;t<e.dofs.length;t++){let o=e.dofs[t];if(!o)continue;let s=n?n[t]??o.value:t===0?r??o.value:o.value;a=hN(a,dN(i,o,QM(s,o.min,o.max)))}return a}function pN(e,t){let n=e.joints??[];return{...e,joints:[...n,t]}}var mN={position:[0,0,0],rotation:[1,0,0,0]};function hN(e,t){let n=qM(e.rotation,t.position);return{position:[e.position[0]+n[0],e.position[1]+n[1],e.position[2]+n[2]],rotation:XM(e.rotation,t.rotation)}}function gN(e){let t=[];return BM(e,e=>{e.joints&&t.push(...e.joints)}),t}function _N(e,t={}){let n=[],r=new Set;BM(e,e=>{r.add(e.name),e.joints&&n.push(...e.joints)});let i=new Map;for(let e of n)i.set(e.child,e),r.add(e.parent),r.add(e.child);let a=new Map;for(let e of r)i.has(e)||a.set(e,mN);let o=[...n],s=!0;for(;s&&o.length>0;){s=!1;for(let e=o.length-1;e>=0;e--){let n=o[e];if(!n)continue;let r=a.get(n.parent);if(!r||(o.splice(e,1),s=!0,a.has(n.child)))continue;let i=t[n.child]??n.value,c=n.offset?hN(fN(n,i),n.offset):fN(n,i);a.set(n.child,hN(r,c))}}for(let e of o)a.has(e.child)||a.set(e.child,mN);return a}function vN(e){return gN(e).reduce((e,t)=>e+t.dofs.length,0)}var yN={position:[0,0,0],rotation:[1,0,0,0]};function bN(e,t){let n=qM(e.rotation,t);return[n[0]+e.position[0],n[1]+e.position[1],n[2]+e.position[2]]}function xN(e){return[e[0],-e[1],-e[2],-e[3]]}function SN(e,t){let[n,r,i,a]=XM(t,xN(e)),o=Math.hypot(n,r,i,a)||1;n/=o,r/=o,i/=o,a/=o,n<0&&(n=-n,r=-r,i=-i,a=-a);let s=Math.hypot(r,i,a);if(s<1e-12)return[0,0,0];let c=2*Math.atan2(s,n)/s;return[r*c,i*c,a*c]}function CN(e,t){let n=[];BM(e,e=>{e.joints&&n.push(...e.joints)});let r=new Map;for(let e of n)r.set(e.child,e);let i=[],a=new Set,o=t;for(;o&&r.has(o)&&!a.has(o);){a.add(o);let e=r.get(o);if(!e)break;i.push(e),o=e.parent}return i.reverse()}function wN(e,t){return e[t]??0}function TN(e,t,n){let r=n+1,i=new Float64Array(n*r);for(let a=0;a<n;a++){for(let t=0;t<n;t++)i[a*r+t]=wN(e,a*n+t);i[a*r+n]=wN(t,a)}for(let e=0;e<n;e++){let t=e;for(let a=e+1;a<n;a++)Math.abs(wN(i,a*r+e))>Math.abs(wN(i,t*r+e))&&(t=a);if(Math.abs(wN(i,t*r+e))<1e-12)return null;if(t!==e)for(let n=e;n<r;n++){let a=wN(i,e*r+n);i[e*r+n]=wN(i,t*r+n),i[t*r+n]=a}let a=wN(i,e*r+e);for(let t=e;t<r;t++)i[e*r+t]=wN(i,e*r+t)/a;for(let t=0;t<n;t++){if(t===e)continue;let n=wN(i,t*r+e);if(n!==0)for(let a=e;a<r;a++)i[t*r+a]=wN(i,t*r+a)-n*wN(i,e*r+a)}}let a=new Float64Array(n);for(let e=0;e<n;e++)a[e]=wN(i,e*r+n);return a}function EN(e,t){let n=[],r=[],i=[],a=[];for(let o of e){let e=t?.[o.child];n.push({child:o.child,count:o.dofs.length}),o.dofs.forEach((t,n)=>{let o=(Array.isArray(e)?e[n]:n===0?e:void 0)??t.value;r.push(Math.min(t.max,Math.max(t.min,o))),i.push(t.min),a.push(t.max)})}return{segments:n,q:Float64Array.from(r),lo:Float64Array.from(i),hi:Float64Array.from(a)}}function DN(e,t){let n={},r=0;for(let i of e){let e=[];for(let n=0;n<i.count;n++)e.push(wN(t,r++));n[i.child]=e}return n}function ON(e,t,n,r,i){let a=bN(t,r);if(e[0]=n.position[0]-a[0],e[1]=n.position[1]-a[1],e[2]=n.position[2]-a[2],i===6&&n.rotation){let r=SN(t.rotation,n.rotation);e[3]=r[0],e[4]=r[1],e[5]=r[2]}let o=0;for(let t=0;t<i;t++)o+=wN(e,t)**2;return Math.sqrt(o)}function kN(e,t,n,r,i,a,o,s,c,l){let u=bN(o,s);for(let d=0;d<n;d++){let f=wN(t,d),p=f+c>wN(a,d)&&f-c>=wN(i,d)?-c:c;t[d]=f+p;let m=l(t);t[d]=f;let h=bN(m,s);if(e[d]=(h[0]-u[0])/p,e[n+d]=(h[1]-u[1])/p,e[2*n+d]=(h[2]-u[2])/p,r===6){let t=SN(o.rotation,m.rotation);e[3*n+d]=t[0]/p,e[4*n+d]=t[1]/p,e[5*n+d]=t[2]/p}}}function AN(e,t,n,r,i){let a=new Float64Array(r*r),o=i*i;for(let t=0;t<r;t++)for(let i=0;i<r;i++){let s=0;for(let r=0;r<n;r++)s+=wN(e,t*n+r)*wN(e,i*n+r);a[t*r+i]=s+(t===i?o:0)}let s=TN(a,t,r);if(!s)return null;let c=new Float64Array(n);for(let t=0;t<n;t++){let i=0;for(let a=0;a<r;a++)i+=wN(e,a*n+t)*wN(s,a);c[t]=i}return c}function jN(e,t,n,r={}){let i=r.maxIterations??200,a=r.tolerance??1e-5,o=r.damping??.05,s=r.tip??[0,0,0],c=n.rotation===void 0?3:6,{segments:l,q:u,lo:d,hi:f}=EN(CN(e,t),r.seed),p=u.length,m=n=>_N(e,DN(l,n)).get(t)??yN,h=new Float64Array(c),g=new Float64Array(c*p),_=m(u),v=ON(h,_,n,s,c),y=0;for(;y<i&&p>0&&v>a;y++){kN(g,u,p,c,d,f,_,s,1e-6,m);let e=AN(g,h,p,c,o);if(!e)break;for(let t=0;t<p;t++){let n=wN(u,t)+wN(e,t);u[t]=Math.min(wN(f,t),Math.max(wN(d,t),n))}_=m(u),v=ON(h,_,n,s,c)}return{values:DN(l,u),converged:v<=a,iterations:y,error:v}}function MN(e,t){return e.dofs.map((e,n)=>{let r=(Array.isArray(t)?t[n]:n===0?t:void 0)??e.value;return Math.min(e.max,Math.max(e.min,r))})}function NN(e,t,n,r){let i=[];BM(e,e=>{e.joints&&i.push(...e.joints)});let a=i.map(e=>({child:e.child,a:MN(e,t[e.child]),b:MN(e,n[e.child])})),o=Math.max(1,Math.floor(r)),s=[];for(let t=0;t<=o;t++){let n=t/o,r={};for(let e of a)r[e.child]=e.a.map((t,r)=>t+((e.b[r]??t)-t)*n);s.push({t:n,values:r,poses:_N(e,r)})}return s}var PN=Math.PI/180;function FN(e,t,n,r){let i=e*PN,a=r*PN,o=XM(JM([0,0,1],i),JM([1,0,0],a));return{position:[n*Math.cos(i),n*Math.sin(i),t],rotation:o}}function IN(e,t={}){let n=t.base??`base`,r=e.map((e,t)=>e.name??`link${t+1}`);return e.map((e,t)=>{let i=t===0?n:r[t-1]??`link${t}`,a=r[t]??`link${t+1}`,o=FN(e.theta,e.d,e.a,e.alpha),s={origin:[0,0,0],direction:[0,0,1]},c={...e.min===void 0?{}:{min:e.min},...e.max===void 0?{}:{max:e.max},...e.value===void 0?{}:{value:e.value}};return{...e.type===`prismatic`?aN(i,a,s,c):iN(i,a,s,c),offset:o}})}var LN=Math.PI/180,RN=180/Math.PI;function zN(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`)}function BN(e){return String(e===0?0:e)}function VN(e){return`${BN(e[0])} ${BN(e[1])} ${BN(e[2])}`}function HN(e,t={}){let n=t.name??`robot`,r=t.effort??0,i=t.velocity??0,a=t.meshes??{},o=[],s=[];BM(e,e=>{o.push(e.name),e.joints&&s.push(...e.joints)});for(let e of s){if(e.type!==`revolute`&&e.type!==`prismatic`)return k(F(N.VALIDATION_FAILED,`exportURDF: joint '${e.parent}->${e.child}' is '${e.type}'; URDF supports only revolute and prismatic joints`));if(e.offset)return k(F(N.VALIDATION_FAILED,`exportURDF: joint '${e.parent}->${e.child}' carries a fixed offset (e.g. a DH link) that URDF cannot represent as a single joint`))}let c=[`<?xml version="1.0"?>`,`<robot name="${zN(n)}">`];for(let e of o){let t=a[e];t?c.push(` <link name="${zN(e)}">`,` <visual><geometry><mesh filename="${zN(t)}"/></geometry></visual>`,` </link>`):c.push(` <link name="${zN(e)}"/>`)}for(let e of s){let t=e.type===`revolute`,n=t?e.min*LN:e.min,a=t?e.max*LN:e.max,o=e.type===`prismatic`?[0,0,0]:e.axis.origin;c.push(` <joint name="${zN(`${e.parent}_to_${e.child}`)}" type="${e.type}">`,` <parent link="${zN(e.parent)}"/>`,` <child link="${zN(e.child)}"/>`,` <origin xyz="${VN(o)}" rpy="0 0 0"/>`,` <axis xyz="${VN(e.axis.direction)}"/>`,` <limit lower="${BN(n)}" upper="${BN(a)}" effort="${BN(r)}" velocity="${BN(i)}"/>`,` </joint>`)}return c.push(`</robot>`,``),O(c.join(`
|
|
16
16
|
`))}function UN(e,t){return RegExp(`\\b${t}\\s*=\\s*"([^"]*)"`).exec(e)?.[1]}function WN(e,t){if(!e)return t;let n=e.trim().split(/\s+/).map(Number);return[n[0]??0,n[1]??0,n[2]??0]}function GN(e,t){return qM(XM(XM(JM([0,0,1],t[2]),JM([0,1,0],t[1])),JM([1,0,0],t[0])),e)}function KN(e){let t=/<robot\b([^>]*)>/.exec(e);if(!t)return k(F(N.VALIDATION_FAILED,`importURDF: no <robot> element found`));let n=UN(t[1]??``,`name`)??`robot`,r=[],i=/<link\b([^>]*?)(?:\/>|>)/g;for(let t=i.exec(e);t;t=i.exec(e)){let e=UN(t[1]??``,`name`);e&&r.push(e)}let a=[],o=/<joint\b([^>]*)>([\s\S]*?)<\/joint>/g;for(let t=o.exec(e);t;t=o.exec(e)){let e=t[1]??``,n=t[2]??``,r=UN(e,`type`)??`fixed`;if(r===`fixed`||r===`floating`||r===`planar`)continue;let i=/<parent\b([^>]*?)\/?>/.exec(n),o=/<child\b([^>]*?)\/?>/.exec(n),s=UN(i?.[1]??``,`link`),c=UN(o?.[1]??``,`link`);if(!s||!c)return k(F(N.VALIDATION_FAILED,`importURDF: joint missing parent/child link (${UN(e,`name`)??`unnamed`})`));let l=/<origin\b([^>]*?)\/?>/.exec(n),u=/<axis\b([^>]*?)\/?>/.exec(n),d=/<limit\b([^>]*?)\/?>/.exec(n),f=WN(UN(l?.[1]??``,`xyz`),[0,0,0]),p=WN(UN(l?.[1]??``,`rpy`),[0,0,0]),m=GN(WN(UN(u?.[1]??``,`xyz`),[1,0,0]),p),h=Number(UN(d?.[1]??``,`lower`)??NaN),g=Number(UN(d?.[1]??``,`upper`)??NaN);if(r===`prismatic`){let e=Number.isFinite(h)&&Number.isFinite(g)?{min:h,max:g}:{};a.push(aN(s,c,{origin:f,direction:m},e))}else if(r===`revolute`||r===`continuous`){let e=r===`continuous`||!Number.isFinite(h)||!Number.isFinite(g)?{min:-180,max:180}:{min:h*RN,max:g*RN};a.push(iN(s,c,{origin:f,direction:m},e))}else return k(F(N.VALIDATION_FAILED,`importURDF: joint '${UN(e,`name`)??`unnamed`}' has unrecognized type '${r}'`))}return O({name:n,links:r,joints:a})}function qN(){return{steps:[],shapes:new Map}}function JN(e,t,n){let r={...t,timestamp:Date.now()},i=new Map(e.shapes);return i.set(t.outputId,n),{steps:[...e.steps,r],shapes:i}}function YN(e){if(e.steps.length===0)return e;let t=e.steps.slice(0,-1),n=new Set;for(let e of t){n.add(e.outputId);for(let t of e.inputIds)n.add(t)}let r=new Map;for(let[t,i]of e.shapes)n.has(t)&&r.set(t,i);return{steps:t,shapes:r}}function XN(e,t){return e.steps.find(e=>e.id===t)}function ZN(e,t){return e.shapes.get(t)}function QN(e){return e.steps.length}function $N(e,t){let n=e.steps.findIndex(e=>e.id===t);return n===-1?[]:e.steps.slice(n)}function eP(e,t,n){let r=new Map(e.shapes);return r.set(t,n),{...e,shapes:r}}function tP(){return{operations:new Map}}function nP(e,t,n){let r=new Map(e.operations);return r.set(t,n),{operations:r}}function rP(e,t){let n=new Set(e.steps.map(e=>e.outputId)),r={steps:[],shapes:new Map};for(let[t,i]of e.shapes)n.has(t)||(r=eP(r,t,i));for(let n of e.steps){let e=t.operations.get(n.type);if(!e)return k(I(`REPLAY_UNKNOWN_OP`,`Unknown operation type: ${n.type}`));let i=[];for(let e of n.inputIds){let t=r.shapes.get(e);if(!t)return k(I(`REPLAY_MISSING_INPUT`,`Missing input shape: ${e} for step ${n.id}`));i.push(t)}try{let t=e(i,n.parameters);r=JN(r,{id:n.id,type:n.type,parameters:n.parameters,inputIds:n.inputIds,outputId:n.outputId},t)}catch(e){return k(I(`REPLAY_STEP_FAILED`,`Step ${n.id} (${n.type}) failed: ${e instanceof Error?e.message:String(e)}`))}}return O(r)}function iP(e,t,n){let r=e.steps.findIndex(e=>e.id===t);if(r===-1)return k(I(`REPLAY_STEP_NOT_FOUND`,`Step not found: ${t}`));let i=new Map(e.shapes);for(let t=r;t<e.steps.length;t++){let n=e.steps[t];n&&i.delete(n.outputId)}let a={steps:e.steps.slice(0,r),shapes:i};for(let t=r;t<e.steps.length;t++){let r=e.steps[t];if(!r)continue;let i=n.operations.get(r.type);if(!i)return k(I(`REPLAY_UNKNOWN_OP`,`Unknown operation type: ${r.type}`));let o=[];for(let e of r.inputIds){let t=a.shapes.get(e);if(!t)return k(I(`REPLAY_MISSING_INPUT`,`Missing input shape: ${e} for step ${r.id}`));o.push(t)}try{let e=i(o,r.parameters);a=JN(a,{id:r.id,type:r.type,parameters:r.parameters,inputIds:r.inputIds,outputId:r.outputId},e)}catch(e){return k(I(`REPLAY_STEP_FAILED`,`Step ${r.id} (${r.type}) failed: ${e instanceof Error?e.message:String(e)}`))}}return O(a)}function aP(e,t,n,r){return e.steps.findIndex(e=>e.id===t)===-1?k(I(`MODIFY_STEP_NOT_FOUND`,`Step not found: ${t}`)):iP({steps:e.steps.map(e=>e.id===t?{...e,parameters:n}:e),shapes:e.shapes},t,r)}function oP(e){let t={};for(let[n,r]of e.shapes){let e=JO(r);if(!e.ok)return k(I(`SERIALIZE_SHAPE_FAILED`,`Failed to serialize shape "${n}": ${e.error.message}`));t[n]=e.value}return O({steps:e.steps,shapes:t})}function sP(e){let t=new Map;for(let[n,r]of Object.entries(e.shapes))try{let e=UD(r);if(!e.ok)return k(I(`DESERIALIZE_SHAPE_FAILED`,`Failed to deserialize shape "${n}": ${e.error.message}`));t.set(n,e.value)}catch(e){return k(I(`DESERIALIZE_SHAPE_FAILED`,`Failed to deserialize shape "${n}": ${e instanceof Error?e.message:String(e)}`))}return O({steps:e.steps,shapes:t})}function cP(e){try{var t=CT();let{radius:n,pitch:r,height:i,depth:a=.6*r,toothHalfWidth:o=.42*r,sectionsPerTurn:s=20,lefthand:c=!1,inward:l=!1}=e;if(!(n>0))return k(F(`THREAD_INVALID_RADIUS`,`radius must be > 0`));if(!(r>0))return k(F(`THREAD_INVALID_PITCH`,`pitch must be > 0`));if(!(i>0))return k(F(`THREAD_INVALID_HEIGHT`,`height must be > 0`));if(!(a>0))return k(F(`THREAD_INVALID_DEPTH`,`depth must be > 0`));if(s<3)return k(F(`THREAD_TOO_FEW_SECTIONS`,`sectionsPerTurn must be >= 3`));let u=i/r,d=Math.max(2,Math.round(u*s)),f=c?-1:1,p=l?-a:a,m=l?.3:-.3,h=o,g=t.u(new FT),_=[];for(let e=0;e<=d;e++){let t=f*e*2*Math.PI/s,i=r*Math.abs(t)/(2*Math.PI),a=n*Math.cos(t),o=n*Math.sin(t),c=Math.cos(t),l=Math.sin(t),u=(e,t)=>[a+e*c,o+e*l,i+t],d=u(m,-h),v=u(p,0),y=u(m,h),b=vM([g.register(lM(d,v)),g.register(lM(v,y)),g.register(lM(y,d))]);if(!Na(b))return b;_.push(g.register(b.value))}return tM(_,{ruled:!0})}catch(e){t.e=e}finally{t.d()}}var lP=new WeakMap;function uP(e,t){return lP.get(e)?.get(t)}function dP(e,t,n){let r=lP.get(e);r||(r=new Map,lP.set(e,r)),r.set(t,n)}function fP(e){return U().isNull(e.wrapped)}function pP(e){return k(F(N.NULL_SHAPE_INPUT,`${e}: shape is a null shape`))}function mP(e){let t=uP(e.wrapped,`volume`);if(t)return O(t);if(fP(e))return pP(`measureVolumeProps`);let n=U(),r=n.shapeType(e.wrapped);if(r!==`solid`&&r!==`compsolid`&&r!==`compound`){let t={mass:0,volume:0,centerOfMass:[0,0,0]};return dP(e.wrapped,`volume`,t),O(t)}let i=n.volume(e.wrapped),a=jE(()=>n.centerOfMass(e.wrapped),N.CENTER_OF_MASS_FAILED,`Failed to compute center of mass`);if(!a.ok)return a;let o={mass:i,volume:i,centerOfMass:a.value};return dP(e.wrapped,`volume`,o),O(o)}function hP(e){let t=uP(e.wrapped,`surface`);if(t)return O(t);if(fP(e))return pP(`measureSurfaceProps`);let n=U(),r=n.area(e.wrapped),i=jE(()=>n.centerOfMass(e.wrapped),N.CENTER_OF_MASS_FAILED,`Failed to compute center of mass`);if(!i.ok)return i;let a={mass:r,area:r,centerOfMass:i.value};return dP(e.wrapped,`surface`,a),O(a)}function gP(e){let t=uP(e.wrapped,`linear`);if(t)return O(t);if(fP(e))return pP(`measureLinearProps`);let n=U(),r=n.length(e.wrapped),i={mass:r,length:r,centerOfMass:n.linearCenterOfMass(e.wrapped)};return dP(e.wrapped,`linear`,i),O(i)}function _P(e){let t=mP(e);return t.ok?O(t.value.mass):t}function vP(e){let t=hP(e);return t.ok?O(t.value.mass):t}function yP(e){let t=gP(e);return t.ok?O(t.value.mass):t}function bP(e,t){return fP(e)||fP(t)?pP(`measureDistance`):O(U().distance(e.wrapped,t.wrapped).value)}function xP(e,t){if(fP(e)||fP(t))return pP(`measureDistanceProps`);let n=U().distance(e.wrapped,t.wrapped);return O({distance:n.value,point1:n.point1,point2:n.point2})}function SP(e){if(fP(e))return pP(`createDistanceQuery`);let t=U().createDistanceQuery(e.wrapped);return O({distanceTo(e){return fP(e)?pP(`createDistanceQuery.distanceTo`):O(t.distanceTo(e.wrapped).value)},dispose(){t.dispose()}})}function CP(e,t,n){if(fP(e))return pP(`measureCurvatureAt`);let r=U().surfaceCurvature(e.wrapped,t,n);return O({mean:r.mean,gaussian:r.gaussian,maxCurvature:r.max,minCurvature:r.min,maxDirection:r.maxDirection,minDirection:r.minDirection})}function wP(e){if(fP(e))return pP(`measureCurvatureAtMid`);let t=YD(e),n=(t.uMin+t.uMax)/2,r=(t.vMin+t.vMax)/2,i=U().surfaceCurvature(e.wrapped,n,r);return O({mean:i.mean,gaussian:i.gaussian,maxCurvature:i.max,minCurvature:i.min,maxDirection:i.maxDirection,minDirection:i.minDirection})}var TP=1e-9,EP=1e-8,DP=1e-6,OP=([e,t],[n,r],i=DP)=>Math.abs(e-n)<=i&&Math.abs(t-r)<=i,kP=([e,t],[n,r])=>[e+n,t+r],AP=([e,t],[n,r])=>[e-n,t-r],jP=([e,t],n)=>[e*n,t*n],MP=([e,t],[n,r]=[0,0])=>Math.sqrt((e-n)**2+(t-r)**2),NP=([e,t],[n,r]=[0,0])=>(e-n)**2+(t-r)**2;function PP([e,t],[n,r]){return e*r-t*n}var FP=([e,t],[n,r]=[0,0])=>Math.atan2(r*e-t*n,e*n+t*r),IP=([e,t],[n,r]=[0,0])=>Math.atan2(r-t,n-e),LP=(e,t,n=[0,0])=>{let[r,i]=e,[a,o]=n,s=r-a,c=i-o,l=Math.sin(t),u=Math.cos(t),d=s*u-c*l,f=s*l+c*u;return[d+a,f+o]};function RP([e,t]){let n=Math.sqrt(e*e+t*t);return n<1e-12?[0,0]:[e/n,t/n]}var zP=(e,t)=>[Math.cos(t)*e,Math.sin(t)*e],BP=([e,t])=>[Math.sqrt(e*e+t*t),Math.atan2(t,e)],VP=([e,t])=>{let n=RP([e,t]);return n[0]===0&&n[1]===0&&M(`normalize2d`,`Cannot normalize zero-length vector`),n};function HP(e,t){let n,r=0;for(let i=0;i<e.length;i++){let a=e[i];if(t(a))if(r++,r===1)n=a;else break}return r===1?O(n):k(po(`FINDER_NOT_UNIQUE`,`Finder expected a unique match but found ${r===0?0:`2+`} element(s)`))}function UP(e,t,n,r){let i=e=>n([...t,e]),a=e=>t.every(t=>t(e));function o(t){switch(e){case`edge`:return RE(t);case`face`:return zE(t);case`wire`:return BE(t);case`vertex`:return VE(t)}}let s=e=>{let n=o(e);return t.length===0?n.slice():n.filter(a)},c=()=>UP(e,[],n,r),l={_filters:t,_topoKind:e,when:e=>i(e),inList:e=>{let t=new Map;for(let n of e){let e=YO(n),r=t.get(e);r?r.push(n):t.set(e,[n])}return i(e=>{let n=t.get(YO(e));return!!n&&n.some(t=>ZO(t,e))})},not:e=>{let t=e(c());return i(e=>!t.shouldKeep(e))},either:e=>{let t=e.map(e=>e(c()));return i(e=>t.some(t=>t.shouldKeep(e)))},findAll:e=>s(e),findUnique:e=>HP(o(e),a),shouldKeep:a,and:e=>i(t=>e.shouldKeep(t)),or:e=>{let t=a;return n([n=>t(n)||e.shouldKeep(n)])},negate:()=>{let e=a;return n([t=>!e(t)])}},u=r(l,i);return{...l,...u}}var WP={X:[1,0,0],Y:[0,1,0],Z:[0,0,1]};function GP(e){return typeof e==`string`?WP[e]??[0,0,1]:e}function KP(e,t,n){let r=U(),i=r.makeVertex(t[0],t[1],t[2]);return t=>{let a=r.distance(i,t.wrapped).value;return Math.abs(a-e)<n}}function qP(e,t){let n=yD(GP(e));return e=>{let r=U(),[i,a]=r.curveParameters(e.wrapped),o=(i+a)/2,{tangent:s}=r.curveTangent(e.wrapped,o),c=yD(s),l=Math.acos(Math.min(1,Math.abs(mD(c,n))));return Math.abs(l-iD*t)<1e-6}}function JP(e){return UP(`edge`,e,JP,(t,n)=>({inDirection:(e=`Z`,t=0)=>n(qP(e,t)),ofLength:(e,t=.001)=>n(n=>Math.abs(ak(n)-e)<t),ofCurveType:e=>n(t=>ek(t)===e),parallelTo:(t=`Z`)=>JP(e).inDirection(t,0),atDistance:(e,t=[0,0,0])=>n(KP(e,t,1e-6))}))}function YP(){return JP([])}function XP(e,t){let n=yD(GP(e));return e=>{let r=$D(e),i=Math.acos(Math.min(1,Math.abs(mD(yD(r),n))));return Math.abs(i-iD*t)<1e-6}}function ZP(e){return UP(`face`,e,ZP,(t,n)=>({inDirection:(e=`Z`,t=0)=>n(XP(e,t)),parallelTo:(t=`Z`)=>ZP(e).inDirection(t,0),ofSurfaceType:e=>n(t=>{let n=GD(t);return Na(n)&&n.value===e}),ofArea:(e,t=.001)=>n(n=>{let r=vP(n);return Na(r)&&Math.abs(r.value-e)<t}),atDistance:(e,t=[0,0,0])=>n(KP(e,t,1e-6))}))}function QP(){return ZP([])}function $P(e){return UP(`wire`,e,$P,(e,t)=>({isClosed:()=>t(e=>sk(e)),isOpen:()=>t(e=>!sk(e)),ofEdgeCount:e=>t(t=>RE(t).length===e)}))}function eF(){return $P([])}function tF(e,t){return typeof e==`object`&&`_topoKind`in e?e.findUnique(t):typeof e!=`function`&&bE(e)?O(e):e(QP()).findUnique(t)}function nF(e){return Array.isArray(e)&&e.length===2&&typeof e[0]==`number`&&typeof e[1]==`number`}function rF(e,t){let n=10**t,r=t<0?e:.01/n+e;return Math.round(r*n)/n}function iF(e){return Math.round(e*100)/100}function aF(e){return Math.round(e*1e5)/1e5}var oF=([e,t])=>`(${iF(e)},${iF(t)})`,sF=(e,t=1e-9)=>{let n=e;return Math.abs(e)<t&&(n=0),n.toFixed(-Math.log10(t))},cF=(e,t=1e-9)=>Array.from(new Map(e.map(([e,n])=>[`[${sF(e,t)},${sF(n,t)}]`,[e,n]])).values()),lF=class{_wrapped;_deleted=!1;constructor(e){this._wrapped=e??dT().createBoundingBox2d(),LT(this,this._wrapped)}get wrapped(){if(this._deleted)throw Error(`This object has been deleted`);return this._wrapped}delete(){this._deleted||(this._deleted=!0,RT(this._wrapped),typeof this._wrapped.delete==`function`&&this._wrapped.delete())}[Symbol.dispose](){this.delete()}get repr(){let[e,t]=this.bounds;return`${oF(e)} - ${oF(t)}`}get bounds(){let{xMin:e,yMin:t,xMax:n,yMax:r}=dT().getBBox2dBounds(this.wrapped);return[[e,t],[n,r]]}get center(){let[[e,t],[n,r]]=this.bounds;return[e+(n-e)/2,t+(r-t)/2]}get width(){let[[e],[t]]=this.bounds;return Math.abs(t-e)}get height(){let[[,e],[,t]]=this.bounds;return Math.abs(t-e)}outsidePoint(e=1){let[t,n]=this.bounds,r=n[0]-t[0],i=n[1]-t[1];return[n[0]+r/100*e,n[1]+i/100*e*.9]}add(e){dT().mergeBBox2d(this.wrapped,e.wrapped)}isOut(e){return dT().isBBox2dOut(this.wrapped,e.wrapped)}containsPoint(e){return!dT().isBBox2dOutPoint(this.wrapped,e[0],e[1])}};function uF(e){return new dF(U().deserializeCurve2d(e))}var dF=class e{_wrapped;_deleted=!1;_boundingBox;_firstPoint=null;_lastPoint=null;_firstParameter=null;_lastParameter=null;constructor(e){this._wrapped=U().wrapCurve2dHandle(e),this._boundingBox=null,typeof this._wrapped.delete==`function`&<(this,this._wrapped)}get wrapped(){if(this._deleted)throw Error(`This object has been deleted`);return this._wrapped}delete(){this._deleted||(this._deleted=!0,typeof this._wrapped.delete==`function`&&(RT(this._wrapped),this._wrapped.delete()))}[Symbol.dispose](){this.delete()}get boundingBox(){if(this._boundingBox)return this._boundingBox;let e=U(),t=e.createBoundingBox2d();return e.addCurveToBBox2d(t,this.wrapped,1e-6),this._boundingBox=new lF(t),this._boundingBox}get repr(){return`${this.geomType} ${oF(this.firstPoint)} - ${oF(this.lastPoint)}`}serialize(){return U().serializeCurve2d(this.wrapped)}value(e){return U().evaluateCurve2d(this.wrapped,e)}get firstPoint(){return this._firstPoint===null&&(this._firstPoint=this.value(this.firstParameter)),this._firstPoint}get lastPoint(){return this._lastPoint===null&&(this._lastPoint=this.value(this.lastParameter)),this._lastPoint}get firstParameter(){return this._firstParameter===null&&(this._firstParameter=U().getCurve2dBounds(this.wrapped).first),this._firstParameter}get lastParameter(){return this._lastParameter===null&&(this._lastParameter=U().getCurve2dBounds(this.wrapped).last),this._lastParameter}get geomType(){return U().getCurve2dType(this.wrapped)}clone(){let t=new e(U().copyCurve2d(this.wrapped));return t._firstPoint=this._firstPoint,t._lastPoint=this._lastPoint,t._firstParameter=this._firstParameter,t._lastParameter=this._lastParameter,t}reverse(){U().reverseCurve2d(this.wrapped);let e=this._firstPoint;this._firstPoint=this._lastPoint,this._lastPoint=e;let t=this._firstParameter;this._firstParameter=this._lastParameter,this._lastParameter=t}distanceFromPoint(e){let t=U().projectPointOnCurve2d(this.wrapped,e[0],e[1]),n=t?t.distance:1/0;return Math.min(n,MP(e,this.firstPoint),MP(e,this.lastPoint))}distanceFromCurve(e){let t;try{t=U().distanceBetweenCurves2d(this.wrapped,e.wrapped,this.firstParameter,this.lastParameter,e.firstParameter,e.lastParameter)}catch{t=1/0}return Math.min(t,this.distanceFromPoint(e.firstPoint),this.distanceFromPoint(e.lastPoint),e.distanceFromPoint(this.firstPoint),e.distanceFromPoint(this.lastPoint))}distanceFrom(e){return nF(e)?this.distanceFromPoint(e):this.distanceFromCurve(e)}isOnCurve(e){return this.distanceFromPoint(e)<1e-9}parameter(e,t=1e-9){let n,r,i=!1;try{let t=U().projectPointOnCurve2d(this.wrapped,e[0],e[1]);t?(n=t.distance,r=t.param):i=!0}catch{i=!0}return i?OP(e,this.firstPoint,t)?O(this.firstParameter):OP(e,this.lastPoint,t)?O(this.lastParameter):k(I(`PARAMETER_NOT_FOUND`,`Failed to find parameter`)):n===void 0||r===void 0?k(I(`PARAMETER_NOT_FOUND`,`Failed to find parameter`)):n>t?k(I(`POINT_NOT_ON_CURVE`,`Point ${oF(e)} not on curve ${this.repr}, ${n.toFixed(9)}`)):O(r)}tangentAt(e){let t;if(Array.isArray(e))t=j(this.parameter(e));else{let n=U().getCurve2dBounds(this.wrapped);t=(n.last-n.first)*e+n.first}return U().evaluateCurve2dD1(this.wrapped,t).tangent}splitAt(n,r=1e-9){let i=n.map(e=>nF(e)?j(this.parameter(e,r)):e);i=Array.from(new Map(i.map(e=>[rF(e,-Math.log10(r)),e])).values()).sort((e,t)=>e-t);let a=this.firstParameter,o=this.lastParameter;return a>o&&i.reverse(),Math.abs(t(i,0)-a)<r*100&&(i=i.slice(1)),!i.length||(Math.abs(t(i,i.length-1)-o)<r*100&&(i=i.slice(0,-1)),!i.length)?[this]:U().splitCurve2d(this.wrapped,i).map(t=>new e(t))}},fF=(e,t=1e-4,n=`C0`,r=200)=>new dF(dT().approximateCurve2dAsBSpline(e.wrapped,t,n,r)),pF=e=>(e.geomType!==`BSPLINE_CURVE`&&M(`BSplineToBezier`,`You can only convert a Bspline`),dT().decomposeBSpline2dToBeziers(e.wrapped).map(e=>new dF(e)));function mF(e,t={tolerance:1e-4,continuity:`C0`,maxSegments:300}){let n=dT();return e.flatMap(e=>{let r=e.geomType;if(r===`ELLIPSE`||r===`CIRCLE`&&OP(e.firstPoint,e.lastPoint))return e.splitAt([.5]);if([`LINE`,`ELLIPSE`,`CIRCLE`].includes(r))return e;if(r===`BEZIER_CURVE`){let t=n.getCurve2dBezierDegree(e.wrapped);if(t!==null&&[1,2,3].includes(t))return e}return mF(pF(r===`BSPLINE_CURVE`?e:fF(e,t.tolerance,t.continuity,t.maxSegments)),t)})}var hF=(e,t)=>{let n=new dF(U().makeLine2d(e[0],e[1],t[0],t[1]));return OP(n.firstPoint,e)||n.reverse(),n},gF=(e,t,n)=>{let r=new dF(U().makeArc2dThreePoints(e[0],e[1],t[0],t[1],n[0],n[1]));if(!OP(r.firstPoint,e)){let e=U().trimCurve2d(r.wrapped,r.lastParameter,r.firstParameter);r.delete(),r=new dF(e)}return r},_F=(e,t,n)=>{let r=new dF(U().makeArc2dTangent(e[0],e[1],t[0],t[1],n[0],n[1]));if(!OP(r.firstPoint,e)){let e=U().trimCurve2d(r.wrapped,r.lastParameter,r.firstParameter);r.delete(),r=new dF(e)}return r},vF=(e,t=[0,0])=>new dF(U().makeCircle2d(t[0],t[1],e,!0)),yF=(e,t,n=[1,0],r=[0,0],i=!0)=>new dF(U().makeEllipse2d(r[0],r[1],e,t,n[0],n[1],i)),bF=(e,t,n,r,i=[0,0],a,o=!0)=>new dF(U().makeEllipseArc2d(i[0],i[1],e,t,n,r,a[0],a[1],o)),xF=(e,t,n)=>{let r=[[e[0],e[1]],...t.map(e=>[e[0],e[1]]),[n[0],n[1]]];return new dF(U().makeBezier2d(r))};function SF(e,{tolerance:t=.001,smoothing:n=null,degMax:r=3,degMin:i=1}={}){try{let a=e.map(e=>[e[0],e[1]]);return O(new dF(U().makeBSpline2d(a,{tolerance:t,smoothing:n,degMax:r,degMin:i,continuity:`C2`})))}catch{return k(I(`BSPLINE_2D_FAILED`,`B-spline approximation failed`))}}var CF=(e,t,n,r=!1)=>{let i=jP(kP(e,t),.5),a=MP(n,e)*(r?-1:1);return gF(e,kP(jP(VP(AP(i,n)),a),n),t)},wF=(e,n)=>{let r=dT(),i=e.geomType,[a,o]=n,s=`${aF(a)} ${aF(o)}`;if(i===`LINE`)return`L ${s}`;if(i===`BEZIER_CURVE`){let n=r.getCurve2dBezierPoles(e.wrapped);n||M(`adaptedCurveToPathElem`,`Expected Bezier poles`);let i=n.length-1;if(i===1)return`L ${s}`;if(i===2){let[e,r]=t(n,1);return`Q ${iF(e)} ${iF(r)} ${s}`}if(i===3){let[e,r]=t(n,1),[i,a]=t(n,2);return`C ${iF(e)} ${iF(r)} ${iF(i)} ${iF(a)} ${s}`}}if(i===`CIRCLE`){let t=r.getCurve2dCircleData(e.wrapped);t||M(`adaptedCurveToPathElem`,`Expected circle data`);let{radius:n,isDirect:i}=t,c=r.getCurve2dBounds(e.wrapped),l=(c.last-c.first)*aD,u=l===360?`${aF(a)} ${aF(o+1e-4)}`:s;return`A ${n} ${n} 0 ${Math.abs(l)>180?`1`:`0`} ${i?`1`:`0`} ${u}`}if(i===`ELLIPSE`){let t=r.getCurve2dEllipseData(e.wrapped);t||M(`adaptedCurveToPathElem`,`Expected ellipse data`);let{majorRadius:n,minorRadius:i,xAxisAngle:c,isDirect:l}=t,u=r.getCurve2dBounds(e.wrapped),d=(u.last-u.first)*aD,f=d===360?`${aF(a)} ${aF(o+1e-4)}`:s,p=180-c*aD;return`A ${aF(n)} ${aF(i)} ${aF(p)} ${Math.abs(d)>180?`1`:`0`} ${l?`1`:`0`} ${f}`}M(`adaptedCurveToPathElem`,`Unsupported curve type: ${i}`)},TF=e=>{let t=U(),n=t.createBoundingBox2d();return e.forEach(e=>{t.addCurveToBBox2d(n,e.wrapped,1e-6)}),new lF(n)};function EF(e,t){let n=U();return e.map(e=>uE(n.liftCurve2dToPlane(e.wrapped,[...t.origin],[...t.zDir],[...t.xDir])))}var DF=(e,t)=>{let n=U();return e.map(e=>uE(n.buildEdgeOnSurface(e.wrapped,t)))},OF=(e,t)=>{let n=U();return e.map(e=>t?new dF(n.transformCurve2dGeneral(e.wrapped,t)):e.clone())},kF=(e,t,n=[0,0])=>U().createAffinityGTrsf2d(n[0],n[1],-t[1],t[0],e),AF=e=>U().createTranslationGTrsf2d(e[0],e[1]),jF=(e,t=[0,0],n=`center`)=>n===`center`?U().createMirrorGTrsf2d(e[0],e[1],`point`):U().createMirrorGTrsf2d(0,0,`axis`,t[0],t[1],e[0],e[1]),MF=(e,t=[0,0])=>U().createRotationGTrsf2d(e,t[0],t[1]),NF=(e,t=[0,0])=>U().createScaleGTrsf2d(e,t[0],t[1]);function PF(e,t,n=`original`){let r=U(),i=r.extractSurfaceFromFace(t.wrapped),a=YD(t),o=null;if(n===`original`&&KD(t)!==`PLANE`){if(KD(t)!==`CYLINDRE`)return k(F(`UNSUPPORTED_FACE_TYPE`,`Only planar and cylindrical faces can be unwrapped for sketching`));let e=r.getSurfaceCylinderData(i);if(!e)return k(F(`UNSUPPORTED_FACE_TYPE`,`Could not extract cylinder data from face surface`));e.isDirect||(i=r.reverseSurfaceU(i)),o=kF(1/e.radius,[1,0])}if(n===`bounds`){o=r.createIdentityGTrsf2d();try{r.setGTrsf2dTranslationPart(o,0,0);let e=r.createAffinityGTrsf2d(0,0,0,1,a.uMax-a.uMin);if(r.multiplyGTrsf2d(o,e),e.delete(),a.uMin!==0){let e=r.createIdentityGTrsf2d();r.setGTrsf2dTranslationPart(e,-a.uMin,0),r.multiplyGTrsf2d(o,e),e.delete()}let t=r.createAffinityGTrsf2d(0,0,1,0,a.vMax-a.vMin);if(r.multiplyGTrsf2d(o,t),t.delete(),a.vMin!==0){let e=r.createIdentityGTrsf2d();r.setGTrsf2dTranslationPart(e,0,-a.vMin),r.multiplyGTrsf2d(o,e),e.delete()}}catch(e){throw o.delete(),e}}let s=DF(OF(e,o),i);return o&&o.delete(),O(s)}function FF(e,t){let n=U(),r=new dF(n.extractCurve2dFromEdge(e.wrapped,t.wrapped));return uk(e)===`backward`&&n.reverseCurve2d(r.wrapped),r}var IF=(e,t=1)=>`${e.bounds[0][0]-t} ${-e.bounds[1][1]-t} ${e.width+2*t} ${e.height+2*t}`,LF=(e,t,n=1)=>`<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="${IF(t,n)}" fill="none" stroke="black" stroke-width="0.6%" vector-effect="non-scaling-stroke">
|
|
17
17
|
${e}
|
|
18
18
|
</svg>`;function RF(e){let t=e.map(e=>e.wrapped);return dE(U().makeWire(t))}var zF=class e{curves;_boundingBox;_orientation;_guessedOrientation;constructor(e){e.length===0&&M(`Blueprint`,`requires at least one curve — use createBlueprint() for Result-based validation`),this.curves=e,this._boundingBox=null,this._orientation=null,this._guessedOrientation=null}delete(){this.curves.forEach(e=>{e.delete()}),this._boundingBox&&this._boundingBox.delete()}[Symbol.dispose](){this.delete()}clone(){return new e(this.curves.map(e=>e.clone()))}get repr(){return[`Blueprint`,...this.curves.map(e=>e.repr)].join(`
|
|
@@ -57,4 +57,4 @@ ${u.join(`
|
|
|
57
57
|
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
|
|
58
58
|
<Relationship Target="/3D/3dmodel.model" Id="rel0" Type="http://schemas.microsoft.com/3dmanufacturing/2013/01/3dmodel" />
|
|
59
59
|
</Relationships>`),c(`3D/3dmodel.model`,s)])}function Kq(e){let t=[],n=/([MmLlHhVvCcSsQqTtAaZz])([^MmLlHhVvCcSsQqTtAaZz]*)/g,r;for(;(r=n.exec(e))!==null;){let e=r[1]??``,n=(r[2]??``).trim(),i=[];if(n){let e=/[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/g,t;for(;(t=e.exec(n))!==null;)i.push(parseFloat(t[0]))}t.push({command:e,args:i})}return t}function qq(e){return[e[0],-e[1]]}function Jq(e,t,n,r){let i=0;for(;i<e.length;){let a=(n?t.cx:0)+(e[i]??0),o=(n?t.cy:0)+(e[i+1]??0);i===0?(t.sx=a,t.sy=o):r.push(hF(qq([t.cx,t.cy]),qq([a,o]))),t.cx=a,t.cy=o,i+=2}}function Yq(e,t,n,r){let i=0;for(;i<e.length;){let a=(n?t.cx:0)+(e[i]??0),o=(n?t.cy:0)+(e[i+1]??0);r.push(hF(qq([t.cx,t.cy]),qq([a,o]))),t.cx=a,t.cy=o,i+=2}}function Xq(e,t,n,r){for(let i of e){let e=n?t.cx+i:i;r.push(hF(qq([t.cx,t.cy]),qq([e,t.cy]))),t.cx=e}}function Zq(e,t,n,r){for(let i of e){let e=n?t.cy+i:i;r.push(hF(qq([t.cx,t.cy]),qq([t.cx,e]))),t.cy=e}}function Qq(e,t,n,r){let i=0;for(;i+5<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=a+(e[i]??0),c=o+(e[i+1]??0),l=a+(e[i+2]??0),u=o+(e[i+3]??0),d=a+(e[i+4]??0),f=o+(e[i+5]??0);r.push(xF(qq([t.cx,t.cy]),[qq([s,c]),qq([l,u])],qq([d,f]))),t.prevControlX=l,t.prevControlY=u,t.cx=d,t.cy=f,i+=6}}function $q(e,t,n,r){let i=0;for(;i+3<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=t.lastCmd,c=s===`C`||s===`S`?2*t.cx-t.prevControlX:t.cx,l=s===`C`||s===`S`?2*t.cy-t.prevControlY:t.cy,u=a+(e[i]??0),d=o+(e[i+1]??0),f=a+(e[i+2]??0),p=o+(e[i+3]??0);r.push(xF(qq([t.cx,t.cy]),[qq([c,l]),qq([u,d])],qq([f,p]))),t.prevControlX=u,t.prevControlY=d,t.cx=f,t.cy=p,t.lastCmd=`S`,i+=4}}function eJ(e,t,n,r){let i=0;for(;i+3<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=a+(e[i]??0),c=o+(e[i+1]??0),l=a+(e[i+2]??0),u=o+(e[i+3]??0);r.push(xF(qq([t.cx,t.cy]),[qq([s,c])],qq([l,u]))),t.prevControlX=s,t.prevControlY=c,t.cx=l,t.cy=u,i+=4}}function tJ(e,t,n,r){let i=0;for(;i+1<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=t.lastCmd,c=s===`Q`||s===`T`?2*t.cx-t.prevControlX:t.cx,l=s===`Q`||s===`T`?2*t.cy-t.prevControlY:t.cy,u=a+(e[i]??0),d=o+(e[i+1]??0);r.push(xF(qq([t.cx,t.cy]),[qq([c,l])],qq([u,d]))),t.prevControlX=c,t.prevControlY=l,t.cx=u,t.cy=d,t.lastCmd=`T`,i+=2}}function nJ(e,t,n,r,i){let a=Math.max(n,r),o=i?1:-1,s=t+2*o*a,c=[e-o*a,t+o*a],l=[e+o*a,t+o*a];try{return[gF(qq([e,t]),qq(c),qq([e,s])),gF(qq([e,s]),qq(l),qq([e,t]))]}catch{return[]}}function rJ(e,t,n,r,i,a,o,s){let c=.5,l=e+c*(n-e),u=t+c*(r-t),d=n-e,f=r-t,p=Math.sqrt(d*d+f*f),m=Math.max(i,a),h=p/2,g=h<m?m-Math.sqrt(m*m-h*h):m,_=(o===s?-1:1)*(s?1:-1),v=-f/p,y=d/p,b=l+_*g*v,x=u+_*g*y;try{return[gF(qq([e,t]),qq([b,x]),qq([n,r]))]}catch{return[hF(qq([e,t]),qq([n,r]))]}}function iJ(e,t,n,r){let i=0;for(;i+6<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=Math.abs(e[i]??0),c=Math.abs(e[i+1]??0),l=(e[i+3]??0)!==0,u=(e[i+4]??0)!==0,d=a+(e[i+5]??0),f=o+(e[i+6]??0);if(s===0||c===0)r.push(hF(qq([t.cx,t.cy]),qq([d,f])));else{let e=d-t.cx,n=f-t.cy;Math.sqrt(e*e+n*n)<1e-10?r.push(...nJ(t.cx,t.cy,s,c,u)):r.push(...rJ(t.cx,t.cy,d,f,s,c,l,u))}t.cx=d,t.cy=f,i+=7}}function aJ(e,t){(Math.abs(e.cx-e.sx)>1e-10||Math.abs(e.cy-e.sy)>1e-10)&&t.push(hF(qq([e.cx,e.cy]),qq([e.sx,e.sy]))),e.cx=e.sx,e.cy=e.sy}function oJ(e){let t=Kq(e),n=[],r={cx:0,cy:0,sx:0,sy:0,prevControlX:0,prevControlY:0,lastCmd:``};for(let{command:e,args:i}of t){let t=e===e.toLowerCase(),a=e.toUpperCase();switch(a){case`M`:Jq(i,r,t,n);break;case`L`:Yq(i,r,t,n);break;case`H`:Xq(i,r,t,n);break;case`V`:Zq(i,r,t,n);break;case`C`:Qq(i,r,t,n);break;case`S`:$q(i,r,t,n);break;case`Q`:eJ(i,r,t,n);break;case`T`:tJ(i,r,t,n);break;case`A`:iJ(i,r,t,n);break;case`Z`:aJ(r,n);break}a!==`S`&&a!==`T`&&(r.lastCmd=a)}return n}function sJ(e){try{let t=oJ(e);return t.length===0?k(fo(`SVG_EMPTY_PATH`,`SVG path produced no curves`)):O(new zF(t))}catch(e){return k(fo(`SVG_PARSE_FAILED`,`Failed to parse SVG path: ${e instanceof Error?e.message:String(e)}`))}}function cJ(e){try{let t=/\bd\s*=\s*(?:"([^"]*)"|'([^']*)')/,n=[],r=e.toLowerCase(),i=0;for(;i<r.length;){let a=r.indexOf(`<path `,i);if(a===-1)break;let o=e.indexOf(`>`,a);if(o===-1)break;let s=e.slice(a,o+1);i=o+1;let c=t.exec(s),l=c?.[1]??c?.[2];if(!l)continue;let u=sJ(l);u.ok&&n.push(u.value)}return n.length===0?k(fo(`SVG_NO_PATHS`,`No <path> elements found in SVG`)):O(n)}catch(e){return k(fo(`SVG_IMPORT_FAILED`,`Failed to import SVG: ${e instanceof Error?e.message:String(e)}`))}}function lJ(e,t){try{let n=U(),r=e.map(e=>({shape:e.shape.wrapped,name:e.name,color:e.color?[...e.color]:void 0}));return O(n.exportSTEPConfigured(r,t))}catch(e){return k(fo(N.STEP_EXPORT_CONFIGURED_FAILED,`Configured STEP export failed`,e))}}async function uJ(e){try{let t=await e.arrayBuffer(),n=U().importSTEP(t);return n.length===0?k(fo(`STEP_IMPORT_FAILED`,`STEP file contains no valid geometry`)):O(W(n[0]))}catch{return k(fo(`STEP_IMPORT_FAILED`,`Failed to load STEP file`))}}async function dJ(e){try{let t=await e.arrayBuffer(),n=U().importSTL(t);return n.IsNull()?k(fo(`STL_IMPORT_FAILED`,`Failed to create solid from STL mesh`)):O(W(n))}catch{return k(fo(`STL_IMPORT_FAILED`,`Failed to load STL file`))}}async function fJ(e){try{let t=await e.arrayBuffer(),n=U().importIGES(t);return n.length===0?k(fo(`IGES_IMPORT_FAILED`,`IGES file contains no valid geometry`)):O(W(n[0]))}catch{return k(fo(`IGES_IMPORT_FAILED`,`Failed to load IGES file`))}}function pJ(e,t,n={}){let r=_G(e,t);return new fG((typeof n.plane==`string`||n.plane===void 0?r.sketchOnPlane(n.plane,n.origin):r.sketchOnPlane(n.plane)).map(e=>Array.isArray(e)?new YW(e.map(XW)):XW(e)))}function mJ(e,t){let n=t?.fontSize??1,r=hG(t?.fontFamily);if(!r)return k(F(N.NO_FONT_LOADED,`No font loaded. Call loadFont() first.`,void 0,void 0,`Load a font with loadFont() before calling textMetrics()`));let i=r.getAdvanceWidth(e,n),a=n/r.unitsPerEm,o=r.ascender*a,s=r.descender*a;return O({width:i,height:o-s,ascender:o,descender:s})}function hJ(e){let t=e?.fontSize??1,n=hG(e?.fontFamily);if(!n)return k(F(N.NO_FONT_LOADED,`No font loaded. Call loadFont() first.`,void 0,void 0,`Load a font with loadFont() before calling fontMetrics()`));let r=t/n.unitsPerEm,i=n.ascender*r,a=n.descender*r,o=(n.tables?.os2?.sTypoLineGap??0)*r;return O({ascender:i,descender:a,unitsPerEm:n.unitsPerEm,lineHeight:i-a+o})}function gJ(e,t){let n=0,r=KD(t);if(e.surfaceType!==void 0)if(r===e.surfaceType)n+=1;else return-1/0;if(e.normal!==void 0){let r=$D(t),i=e.normal[0]*r[0]+e.normal[1]*r[1]+e.normal[2]*r[2];if(i<.707)return-1/0;n+=i}if(e.centroid!==void 0){let r=eO(t),i=e.centroid[0]-r[0],a=e.centroid[1]-r[1],o=e.centroid[2]-r[2],s=i*i+a*a+o*o;if(s>100)return-1/0;n-=s/100}if(e.area!==void 0&&e.area>0){let r=vP(t);if(r.ok&&r.value>0){let t=Math.abs(Math.log(e.area/r.value));t>1&&(n-=t)}}return n}function _J(e){let t=KD(e),n=$D(e),r=eO(e),i=vP(e);return{entityType:`face`,surfaceType:t,normal:n,centroid:r,area:i.ok?i.value:void 0}}var vJ=.9;function yJ(e){if(e[2]>vJ)return`box:top`;if(e[2]<-.9)return`box:bottom`;if(e[1]>vJ)return`box:back`;if(e[1]<-.9)return`box:front`;if(e[0]>vJ)return`box:right`;if(e[0]<-.9)return`box:left`}function bJ(e,t){let n=zE(e),r=new Map;if(t===`box`){for(let e of n){let t=yJ($D(e));t!==void 0&&!r.has(t)&&r.set(t,YO(e))}return r}let i=0;for(let e of n)r.set(`${t}:face_${i}`,YO(e)),i++;return r}function xJ(e,t,n){return{origin:e,role:t,hint:_J(n)}}function SJ(e,n,r){let i=e.get(n);if(!i)return e;let a=new Map;for(let[e,n]of i){if(r.deleted.has(n))continue;let i=r.modified.get(n);i&&i.length>0?a.set(e,t(i,0)):a.set(e,n)}let o=new Map;for(let[t,r]of e)t===n?o.set(t,a):o.set(t,r);return o}var CJ=.1,wJ=.5;function TJ(e,t,n,r){let i=zE(n),a=r??gJ,o=t.get(e.origin)?.get(e.role);if(o!==void 0){for(let e of i)if(YO(e)===o)return{face:e,confidence:`exact`};return{ref:e,reason:`deleted`}}let s=-1/0,c,l=-1/0,u=[];for(let t of i){let n=a(e.hint,t);n>wJ&&u.push([t,n]),n>s?(l=s,s=n,c=t):n>l&&(l=n)}return c!==void 0&&s>wJ?s-l<CJ&&u.length>1?{ref:e,reason:`ambiguous`,candidates:u.filter(([,e])=>e>=s-CJ).map(([e])=>e)}:{face:c,confidence:`geometric-fallback`}:{ref:e,reason:`not-found`}}function EJ(e){return e.type===`init`}function DJ(e){return e.type===`operation`}function OJ(e){return e.type===`dispose`}function kJ(e){return e.success}function AJ(e){return!e.success}function jJ(){return{pending:new Map}}function MJ(e,t){let n=new Map(e.pending);return n.set(t.id,t),{pending:n}}function NJ(e,t){let n=e.pending.get(t);if(!n)return{queue:e,task:void 0};let r=new Map(e.pending);return r.delete(t),{queue:{pending:r},task:n}}function PJ(e){return e.pending.size}function FJ(e){return e.pending.size===0}function IJ(e,t){for(let n of e.pending.values())n.reject(t);return{pending:new Map}}function LJ(e,t){let n=t.data,r=e.get(n.id);if(r)if(e.delete(n.id),kJ(n)){let e={};n.resultBrep!==void 0&&(e.resultBrep=n.resultBrep),n.resultData!==void 0&&(e.resultData=n.resultData),r.resolve(e)}else r.reject(Error(n.error))}function RJ(e){let{worker:t,wasmUrl:n}=e,r=new Map,i=!1;function a(){return crypto.randomUUID()}function o(e){LJ(r,e)}t.addEventListener(`message`,o);function s(e){return i?Promise.reject(Error(`WorkerClient has been disposed`)):new Promise((n,i)=>{r.set(e.id,{resolve:n,reject:i}),t.postMessage(e)})}return{async init(){await s({id:a(),type:`init`,...n===void 0?{}:{wasmUrl:n}})},async execute(e,t,n){return s({id:a(),type:`operation`,operation:e,shapesBrep:t,parameters:n})},dispose(){i=!0;for(let e of r.values())e.reject(Error(`WorkerClient disposed`));r.clear(),t.removeEventListener(`message`,o);let e={id:a(),type:`dispose`};t.postMessage(e)}}}function zJ(){return{operations:new Map}}function BJ(e,t,n){let r=new Map(e.operations);return r.set(t,n),{operations:r}}function VJ(e,t){let n=globalThis;n.onmessage=async r=>{let i=r.data;if(EJ(i)){try{await t(i.wasmUrl);let e={id:i.id,success:!0};n.postMessage(e)}catch(e){let t={id:i.id,success:!1,error:e instanceof Error?e.message:String(e)};n.postMessage(t)}return}if(DJ(i)){let t=e.operations.get(i.operation);if(!t){let e={id:i.id,success:!1,error:`Unknown operation: ${i.operation}`};n.postMessage(e);return}try{let e=t(i.shapesBrep,i.parameters),r={id:i.id,success:!0,...e.resultBrep===void 0?{}:{resultBrep:e.resultBrep},...e.resultData===void 0?{}:{resultData:e.resultData}};n.postMessage(r)}catch(e){let t={id:i.id,success:!1,error:e instanceof Error?e.message:String(e)};n.postMessage(t)}return}if(OJ(i)){let e={id:i.id,success:!0};n.postMessage(e),n.close?.()}}}var HJ=Object.defineProperty,UJ=(e,t)=>{let n={};for(var r in e)HJ(n,r,{get:e[r],enumerable:!0});return t||HJ(n,Symbol.toStringTag,{value:`Module`}),n},WJ=1,GJ=2;function KJ(e,t){t===`commonFace`&&e.SetGlue(WJ),t===`sameFace`&&e.SetGlue(GJ)}function qJ(e){return typeof e==`number`}function JJ(e){if(typeof e==`number`)return!0;if(typeof e==`object`&&e){let t=e;return`distances`in t&&Array.isArray(t.distances)&&`selectedFace`in t||`distance`in t&&`angle`in t&&`selectedFace`in t}return!1}function YJ(e){return typeof e==`number`?!0:Array.isArray(e)&&e.length===2?e.every(qJ):!1}function XJ(e,t){let n=n=>{let r=e.findAll(n);if(r.length===0)return[];let i=0,a=vD(rD(Fk(r)),t);for(let e=1;e<r.length;e++){let n=vD(rD(Pk(r,e)),t);n<a&&(a=n,i=e)}return[Pk(r,i)]},r=e=>{let t=n(e);return t.length===0?k(po(`FINDER_NOT_UNIQUE`,`Finder expected a unique match but found 0 element(s)`)):O(Fk(t))};return{...e,findAll:n,findUnique:r}}function ZJ(e){return UP(`vertex`,e,ZJ,(t,n)=>({nearestTo:t=>XJ(ZJ(e),t),atPosition:(e,t=1e-4)=>n(n=>vD(rD(n),e)<t),withinBox:(e,t)=>n(n=>{let r=rD(n);return r[0]>=e[0]-1e-6&&r[0]<=t[0]+1e-6&&r[1]>=e[1]-1e-6&&r[1]<=t[1]+1e-6&&r[2]>=e[2]-1e-6&&r[2]<=t[2]+1e-6}),atDistance:(e,t=[0,0,0],r=1e-4)=>n(n=>{let i=rD(n);return Math.abs(vD(i,t)-e)<r})}))}function QJ(){return ZJ([])}var $J=new Map,eY=null,tY=null;function nY(e,t){$J.set(e,t),eY||=e,e===eY&&(tY=t)}function rY(e){if(!e&&tY)return tY;let t=e??eY;if(!t)throw Error(`brepjs voxel engine not initialized. Call initVoxel() (or registerVoxel()) before using voxel operations.`);let n=$J.get(t);if(!n)throw Error(`brepjs: voxel engine '${t}' is not registered.`);return n}function iY(){return eY}function aY(e,t=`voxel`){nY(t,e),eY=t,tY=e}function oY(e){if(e.vertices.length%3!=0)return F(`VOXEL_INVALID_MESH`,`mesh.vertices length must be a multiple of 3 (flat xyz).`);if(e.triangles.length%3!=0)return F(`VOXEL_INVALID_MESH`,`mesh.triangles length must be a multiple of 3.`);let t=e.vertices.length/3;for(let n=0;n<e.triangles.length;n++){let r=e.triangles[n];if(r===void 0||r>=t)return F(`VOXEL_INVALID_TRIANGLE_INDEX`,`triangle index ${r} at position ${n} is out of range for ${t} vertices.`)}return null}function sY(e,t){return oY(e)||(t.length%3==0?null:F(`VOXEL_INVALID_QUERIES`,`queries length must be a multiple of 3 (flat xyz).`))}function cY(e){try{return O(rY(e))}catch(e){return k(uo(`VOXEL_NOT_INITIALIZED`,e instanceof Error?e.message:`voxel engine not initialized`,e))}}function lY(e,t,n){let r=sY(e,t);if(r)return k(r);let i=cY(n);return A(i)?i:O(i.value.winding_numbers(e.vertices,e.triangles,t))}function uY(e,t,n){let r=sY(e,t);if(r)return k(r);let i=cY(n);if(A(i))return i;let a=i.value.points_inside(e.vertices,e.triangles,t);return O(Array.from(a,e=>e===1))}var dY=48,fY=2;function pY(e,t,n){let r=oY(e);if(r)return k(r);if(e.vertices.length===0||e.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`repairMesh requires a non-empty triangle mesh.`));let i=t?.resolution??dY,a=t?.padding??fY;if(!Number.isInteger(i)||i<1)return k(F(`VOXEL_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`));if(!Number.isInteger(a)||a<1)return k(F(`VOXEL_INVALID_PADDING`,`padding must be an integer >= 1.`));let o=cY(n);if(A(o))return o;try{try{var s=CT();let t=s.u(o.value.repair_mesh(e.vertices,e.triangles,i,a)),n=t.positions.length/3;return O({vertices:t.positions,normals:t.normals,triangles:t.indices,uvs:new Float32Array(n*2),faceGroups:[{start:0,count:t.indices.length/3,faceHash:0}]})}catch(e){s.e=e}finally{s.d()}}catch(e){return k(I(`VOXEL_REPAIR_FAILED`,e instanceof Error?e.message:`voxel repair failed (grid too large?).`,e))}}var mY=.001;function hY(e,t=mY){try{let n=Tk(e,{tolerance:t});return n.vertices.length===0||n.triangles.length===0?k(I(`VOXEL_SHAPE_MESH_EMPTY`,`shape tessellated to an empty triangle mesh.`)):O({vertices:n.vertices,triangles:n.triangles})}catch(e){return k(I(`VOXEL_SHAPE_MESH_FAILED`,e instanceof Error?e.message:`failed to mesh shape for voxel op.`,e))}}var gY=48,_Y=2,vY={union:0,intersection:1,difference:2};function yY(e){let t=e?.resolution??gY,n=e?.padding??_Y;return!Number.isInteger(t)||t<1?k(F(`VOXEL_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(n)||n<1?k(F(`VOXEL_INVALID_PADDING`,`padding must be an integer >= 1.`)):O({resolution:t,padding:n})}function bY(e){if(e.positions.length===0||e.indices.length===0)return k(I(`VOXEL_DEGENERATE_RESULT`,`the voxel operation produced an empty mesh (over-shrunk offset or disjoint operands?).`));let t=e.positions.length/3;return O({vertices:e.positions,normals:e.normals,triangles:e.indices,uvs:new Float32Array(t*2),faceGroups:[{start:0,count:e.indices.length/3,faceHash:0}]})}function xY(e,t,n,r){let i=oY(e);if(i)return k(i);if(e.vertices.length===0||e.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`offsetMesh requires a non-empty triangle mesh.`));if(!Number.isFinite(t))return k(F(`VOXEL_INVALID_DISTANCE`,`distance must be a finite number.`));let a=yY(n);if(A(a))return a;let o=cY(r);if(A(o))return o;try{try{var s=CT();return bY(s.u(o.value.offset_mesh(e.vertices,e.triangles,t,a.value.resolution,a.value.padding)))}catch(e){s.e=e}finally{s.d()}}catch(e){return k(I(`VOXEL_OFFSET_FAILED`,e instanceof Error?e.message:`voxel offset failed (grid too large?).`,e))}}function SY(e,t,n,r){let i=oY(e);if(i)return k(i);if(e.vertices.length===0||e.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`shellMesh requires a non-empty triangle mesh.`));if(!Number.isFinite(t)||t<=0)return k(F(`VOXEL_INVALID_THICKNESS`,`thickness must be a finite number > 0.`));let a=yY(n);if(A(a))return a;let o=cY(r);if(A(o))return o;try{try{var s=CT();return bY(s.u(o.value.shell_mesh(e.vertices,e.triangles,t,a.value.resolution,a.value.padding)))}catch(e){s.e=e}finally{s.d()}}catch(e){return k(I(`VOXEL_SHELL_FAILED`,e instanceof Error?e.message:`voxel shell failed (grid too large?).`,e))}}function CY(e,t,n,r,i){let a=oY(e);if(a)return k(a);let o=oY(t);if(o)return k(o);if(e.vertices.length===0||e.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`voxelBoolean requires a non-empty mesh for operand A.`));if(t.vertices.length===0||t.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`voxelBoolean requires a non-empty mesh for operand B.`));let s=vY[n],c=yY(r);if(A(c))return c;let l=cY(i);if(A(l))return l;try{try{var u=CT();return bY(u.u(l.value.voxel_boolean(e.vertices,e.triangles,t.vertices,t.triangles,s,c.value.resolution,c.value.padding)))}catch(e){u.e=e}finally{u.d()}}catch(e){return k(I(`VOXEL_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel boolean failed (grid too large?).`,e))}}function wY(e,t,n,r){let i=hY(e);return A(i)?i:xY(i.value,t,n,r)}function TY(e,t,n,r){let i=hY(e);return A(i)?i:SY(i.value,t,n,r)}function EY(e,t,n,r,i){let a=hY(e);if(A(a))return a;let o=hY(t);return A(o)?o:CY(a.value,o.value,n,r,i)}var DY=48,OY=2,kY={union:0,intersection:1,difference:2};function AY(e){let t=e?.resolution??DY,n=e?.padding??OY;return!Number.isInteger(t)||t<1?k(F(`VOXEL_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(n)||n<1?k(F(`VOXEL_INVALID_PADDING`,`padding must be an integer >= 1.`)):O({resolution:t,padding:n})}function jY(e){try{var t=CT();let n=e.contour(),{positions:r,normals:i,indices:a}=t.u({value:n,[Symbol.dispose](){n.free()}}).value;if(r.length===0||a.length===0)return k(I(`VOXEL_DEGENERATE_RESULT`,`the voxel field contoured to an empty mesh (over-shrunk offset or disjoint operands?).`));let o=r.length/3;return O({vertices:r,normals:i,triangles:a,uvs:new Float32Array(o*2),faceGroups:[{start:0,count:a.length/3,faceHash:0}]})}catch(e){t.e=e}finally{t.d()}}function MY(e){return{raw:e,delete(){e.free()}}}function NY(e){return PY(e)}function PY(e){let t=PT(MY(e)),n={get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()},boolean(e,t){return this.value.boolean(e.value,kY[t]),n},offset(e){return this.value.offset(e),n},shell(e){return this.value.shell(e),n},reinit(){return this.value.reinit(),n},contour(){let e=jY(this.value);if(A(e))throw Error(e.error.message);return e.value}};return n}function FY(e){return!e.disposed}function IY(){return k(F(`VOXEL_FIELD_DISPOSED`,`the voxel field handle has been disposed.`))}function LY(e,t,n){let r=oY(e);if(r)return k(r);if(e.vertices.length===0||e.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`voxelField requires a non-empty triangle mesh.`));let i=AY(t);if(A(i))return i;let a=cY(n);if(A(a))return a;try{return O(PY(new a.value.VoxelField(e.vertices,e.triangles,i.value.resolution,i.value.padding)))}catch(e){return k(I(`VOXEL_FIELD_VOXELIZE_FAILED`,e instanceof Error?e.message:`voxel field voxelization failed (grid too large or non-dense?).`,e))}}function RY(e,t,n,r,i){let a=oY(e);if(a)return k(a);let o=oY(t);if(o)return k(o);if(e.vertices.length===0||e.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`voxelBooleanField requires a non-empty mesh for operand A.`));if(t.vertices.length===0||t.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`voxelBooleanField requires a non-empty mesh for operand B.`));let s=AY(r);if(A(s))return s;let c=cY(i);if(A(c))return c;try{return O(PY(c.value.VoxelField.boolean_of(e.vertices,e.triangles,t.vertices,t.triangles,kY[n],s.value.resolution,s.value.padding)))}catch(e){return k(I(`VOXEL_FIELD_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel field boolean failed (grid too large or non-dense?).`,e))}}function zY(e,t,n){if(!FY(e)||!FY(t))return IY();try{return e.value.boolean(t.value,kY[n]),O(e)}catch(e){return k(I(`VOXEL_FIELD_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel field boolean failed (dim mismatch?).`,e))}}function BY(e,t){if(!FY(e))return IY();if(!Number.isFinite(t))return k(F(`VOXEL_INVALID_DISTANCE`,`distance must be a finite number.`));try{return e.value.offset(t),O(e)}catch(e){return k(I(`VOXEL_FIELD_OFFSET_FAILED`,e instanceof Error?e.message:`voxel field offset failed.`,e))}}function VY(e,t){if(!FY(e))return IY();if(!Number.isFinite(t)||t<=0)return k(F(`VOXEL_INVALID_THICKNESS`,`thickness must be a finite number > 0.`));try{return e.value.shell(t),O(e)}catch(e){return k(I(`VOXEL_FIELD_SHELL_FAILED`,e instanceof Error?e.message:`voxel field shell failed.`,e))}}function HY(e){if(!FY(e))return IY();try{return e.value.reinit(),O(e)}catch(e){return k(I(`VOXEL_FIELD_REINIT_FAILED`,e instanceof Error?e.message:`voxel field reinit failed.`,e))}}function UY(e){if(!FY(e))return IY();try{return jY(e.value)}catch(e){return k(I(`VOXEL_FIELD_CONTOUR_FAILED`,e instanceof Error?e.message:`voxel field contour failed.`,e))}}function WY(e,t,n){let r=hY(e);return A(r)?r:LY(r.value,t,n)}function GY(e,t,n,r,i){let a=hY(e);if(A(a))return a;let o=hY(t);return A(o)?o:RY(a.value,o.value,n,r,i)}var KY=48,qY=2;function JY(e){try{return O(rY(e))}catch(e){return k(uo(`VOXEL_NOT_INITIALIZED`,e instanceof Error?e.message:`voxel engine not initialized`,e))}}function YY(e){let t=e?.resolution??KY,n=e?.padding??qY;return!Number.isInteger(t)||t<1?k(F(`SDF_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(n)||n<1?k(F(`SDF_INVALID_PADDING`,`padding must be an integer >= 1.`)):O({resolution:t,padding:n})}function XY(e){return{raw:e,delete(){e.free()}}}var ZY={offsetField(e){return QY(this.value.offset_field(e.value))},roundField(e){return QY(this.value.round_field(e.value))},shellField(e){return QY(this.value.shell_field(e.value))},smoothUnionField(e,t){return QY(this.value.smooth_union_field(e.value,t.value))}};function QY(e){let t=PT(XY(e));return{get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()},union(e){return QY(this.value.union(e.value))},intersection(e){return QY(this.value.intersection(e.value))},difference(e){return QY(this.value.difference(e.value))},smoothUnion(e,t){return QY(this.value.smooth_union(e.value,t))},smoothIntersection(e,t){return QY(this.value.smooth_intersection(e.value,t))},smoothDifference(e,t){return QY(this.value.smooth_difference(e.value,t))},offset(e){return QY(this.value.offset(e))},round(e){return QY(this.value.round(e))},shell(e){return QY(this.value.shell(e))},onion(e){return QY(this.value.onion(e))},...ZY,translate(e,t,n){return QY(this.value.translate(e,t,n))},rotate(e,t,n,r){return QY(this.value.rotate(e,t,n,r))},scale(e){return QY(this.value.scale(e))},rasterize(e){return $Y(this.value,e)},rasterizeIn(e,t){return eX(this.value,e,t)}}}function $Y(e,t){let n=YY(t);if(A(n))return n;try{return O(NY(e.rasterize(n.value.resolution,n.value.padding)))}catch(e){return tX(e)}}function eX(e,t,n){let r=YY(n);if(A(r))return r;let i=nX(t);if(i)return k(i);try{return O(NY(e.rasterize_in(t.min[0],t.min[1],t.min[2],t.max[0],t.max[1],t.max[2],r.value.resolution,r.value.padding)))}catch(e){return tX(e)}}function tX(e){return k(I(`SDF_RASTERIZE_FAILED`,e instanceof Error?e.message:`SDF rasterization failed (grid too large?).`,e))}function nX(e){if(![...e.min,...e.max].every(e=>Number.isFinite(e)))return F(`SDF_INVALID_BOUNDS`,`bounds must be finite numbers.`);for(let t=0;t<3;t++)if(e.max[t]<=e.min[t])return F(`SDF_INVALID_BOUNDS`,`bounds max must exceed min on every axis.`);return null}function rX(e,t){let n=JY(t);if(A(n))return n;try{return O(QY(e(n.value)))}catch(e){return k(I(`SDF_BUILD_FAILED`,e instanceof Error?e.message:`SDF primitive construction failed.`,e))}}function iX(e,t){return rX(t=>t.Sdf.sphere(e),t)}function aX(e,t,n,r){return rX(r=>r.Sdf.box_(e,t,n),r)}function oX(e,t,n,r,i){return rX(i=>i.Sdf.rounded_box(e,t,n,r),i)}function sX(e,t,n){return rX(n=>n.Sdf.cylinder(e,t),n)}function cX(e,t,n){return rX(n=>n.Sdf.cone(e,t),n)}function lX(e,t,n,r){return rX(r=>r.Sdf.capsule(e[0],e[1],e[2],t[0],t[1],t[2],n),r)}function uX(e,t,n){return rX(n=>n.Sdf.torus(e,t),n)}function dX(e,t,n){return rX(n=>n.Sdf.plane(e[0],e[1],e[2],t),n)}function fX(e){if(e.length<2)return k(F(`SDF_INVALID_SPINE`,`sweep spine needs at least 2 points.`));let t=new Float64Array(e.length*3);for(let n=0;n<e.length;n++){let r=e[n];if(!r.every(e=>Number.isFinite(e)))return k(F(`SDF_INVALID_SPINE`,`sweep spine coordinates must be finite.`));t[n*3]=r[0],t[n*3+1]=r[1],t[n*3+2]=r[2]}return O(t)}function pX(e,t,n,r){let i=fX(e);if(A(i))return i;let a=n?.closed??!1;return rX(e=>e.Sdf.sweep(i.value,t.value,a),r)}var mX={gyroid:0,schwarzP:1,diamond:2};function hX(e,t,n,r){let i=mX[e];return i===void 0?k(F(`SDF_INVALID_LATTICE_KIND`,`unknown lattice kind: ${e}`)):rX(e=>e.Sdf.lattice(i,t.value,n.value),r)}function gX(e,t,n){return rX(n=>n.Sdf.strut_lattice(e,t.value),n)}function _X(e){return{raw:e,delete(){e.free()}}}function vX(e){let t=PT(_X(e));return{get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()}}}function yX(e,t){let n=JY(t);if(A(n))return n;try{return O(vX(e(n.value)))}catch(e){return k(I(`SDF_FIELD_BUILD_FAILED`,e instanceof Error?e.message:`scalar field construction failed.`,e))}}function bX(e,t){return yX(t=>t.ScalarField.constant(e),t)}function xX(e,t,n,r,i,a){return yX(a=>a.ScalarField.axial_ramp(e,t,n,r,i),a)}function SX(e,t,n,r,i,a,o){return yX(o=>o.ScalarField.radial_ramp(e[0],e[1],e[2],t,n,r,i,a),o)}function CX(e,t,n,r){return yX(r=>r.ScalarField.from_sdf(e.value,t,n),r)}function wX(e,t,n,r){return yX(r=>r.ScalarField.clamp(e.value,t,n),r)}var TX={gyroid:0,schwarzP:1,diamond:2},EX=48,DX=2;function OX(e){let t=TX[e.type];if(t===void 0)return k(F(`LATTICE_INVALID_TYPE`,`lattice type must be one of gyroid, schwarzP, diamond (got '${e.type}').`));if(!(e.period>0))return k(F(`LATTICE_INVALID_PERIOD`,`period must be > 0.`));if(!(e.thickness>0))return k(F(`LATTICE_INVALID_THICKNESS`,`thickness must be > 0.`));let n=e.resolution??EX,r=e.padding??DX;return!Number.isInteger(n)||n<1?k(F(`LATTICE_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(r)||r<1?k(F(`LATTICE_INVALID_PADDING`,`padding must be an integer >= 1.`)):O({tag:t,period:e.period,thickness:e.thickness,resolution:n,padding:r})}function kX(e){let t=e.positions.length/3;return{vertices:e.positions,normals:e.normals,triangles:e.indices,uvs:new Float32Array(t*2),faceGroups:[{start:0,count:e.indices.length/3,faceHash:0}]}}function AX(e,t,n){let r=oY(e);if(r)return k(r);if(e.vertices.length===0||e.triangles.length===0)return k(F(`LATTICE_EMPTY_MESH`,`latticeInfill requires a non-empty triangle mesh.`));let i=OX(t);if(A(i))return i;let a=cY(n);if(A(a))return a;let{tag:o,period:s,thickness:c,resolution:l,padding:u}=i.value;try{try{var d=CT();return O(kX(d.u(a.value.lattice_infill(e.vertices,e.triangles,l,u,o,s,c))))}catch(e){d.e=e}finally{d.d()}}catch(e){return k(I(`LATTICE_INFILL_FAILED`,e instanceof Error?e.message:`lattice infill failed (grid too large?).`,e))}}function jX(e,t,n){let r=hY(e);return A(r)?r:AX(r.value,t,n)}function MX(e,t,n){for(let t=0;t<3;t++){let n=e.min[t],r=e.max[t];if(n===void 0||r===void 0||!(n<r))return k(F(`LATTICE_INVALID_BOUNDS`,`bounds.min must be strictly less than bounds.max on every axis (axis ${t}).`))}let r=OX(t);if(A(r))return r;let i=cY(n);if(A(i))return i;let{tag:a,period:o,thickness:s,resolution:c,padding:l}=r.value,[u,d,f]=e.min,[p,m,h]=e.max;try{try{var g=CT();return O(kX(g.u(i.value.tpms_box(u,d,f,p,m,h,c,l,a,o,s))))}catch(e){g.e=e}finally{g.d()}}catch(e){return k(I(`TPMS_LATTICE_FAILED`,e instanceof Error?e.message:`tpms lattice failed (grid too large?).`,e))}}function NX(e){return U().createVector3d(e[0],e[1],e[2])}function PX(e){return U().createPoint3d(e[0],e[1],e[2])}function FX(e){return U().createDirection3d(e[0],e[1],e[2])}function IX(e){return[e.X(),e.Y(),e.Z()]}function LX(e){return[e.X(),e.Y(),e.Z()]}function RX(e){return[e.X(),e.Y(),e.Z()]}function zX(e,t){let n=NX(e);try{return t(n)}finally{n.delete()}}function BX(e,t){let n=PX(e);try{return t(n)}finally{n.delete()}}function VX(e,t){let n=FX(e);try{return t(n)}finally{n.delete()}}var HX=.299,UX=.587,WX=.114;function GX(e,t={}){if(e.length<2)return k(F(N.SURFACE_GRID_TOO_SMALL,`surfaceFromGrid: need at least 2 rows, got ${e.length}`));let n=e.length,r=e[0]?.length??0;if(r<2)return k(F(N.SURFACE_GRID_TOO_SMALL,`surfaceFromGrid: need at least 2 columns, got ${r}`));for(let t=0;t<n;t++){let n=e[t];if(!n||n.length!==r)return k(F(N.SURFACE_GRID_JAGGED,`surfaceFromGrid: row ${t} has ${n?.length??0} columns, expected ${r}`))}let{width:i=r-1,depth:a=n-1,scaleZ:o=1}=t,s=i/(r-1),c=a/(n-1);try{return KX(e,n,r,s,c,o)}catch{}try{return qX(e,n,r,s,c,o)}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.SURFACE_FAILED,`surfaceFromGrid failed: ${t}`,e))}}function KX(e,t,n,r,i,a){let o=[];for(let s=0;s<t;s++)for(let t=0;t<n;t++){let n=e[s],c=(n?n[t]??0:0)*a;o.push([t*r,s*i,c])}let s=W(U().bsplineSurface(o,t,n));return bE(s)?O(s):(s[Symbol.dispose](),k(P(N.SURFACE_FAILED,`B-spline surface did not produce a face`)))}function qX(e,t,n,r,i,a){let o=[];for(let s=0;s<t;s++)for(let t=0;t<n;t++){let n=e[s],c=(n?n[t]??0:0)*a;o.push([t*r,s*i,c])}let s=W(U().triangulatedSurface(o,t,n));return bE(s)||xE(s)?O(s):(s[Symbol.dispose](),k(P(N.SURFACE_FAILED,`surfaceFromGrid: unexpected shape type from sewing`)))}async function JX(e,t={}){let n=t.channel??`luminance`,r=Math.max(1,Math.round(t.downsample??1));if(typeof createImageBitmap!=`function`)return k(fo(N.SURFACE_FAILED,`surfaceFromImage requires createImageBitmap (not available in this environment)`));let i;try{i=await createImageBitmap(e)}catch(e){return k(fo(N.SURFACE_FAILED,`surfaceFromImage: failed to decode image — ${e instanceof Error?e.message:String(e)}`))}let a=i.width,o=i.height;if(a<2||o<2)return i.close(),k(F(N.SURFACE_GRID_TOO_SMALL,`surfaceFromImage: image too small (${a}x${o}), need at least 2x2`));if(typeof OffscreenCanvas!=`function`)return i.close(),k(fo(N.SURFACE_FAILED,`surfaceFromImage requires OffscreenCanvas (not available in this environment)`));let s=new OffscreenCanvas(a,o).getContext(`2d`);if(!s)return i.close(),k(fo(N.SURFACE_FAILED,`surfaceFromImage: could not get 2D canvas context`));s.drawImage(i,0,0),i.close();let c=s.getImageData(0,0,a,o).data,l=[];for(let e=0;e<o;e+=r){let t=[];for(let i=0;i<a;i+=r){let r=(e*a+i)*4,o=c[r]??0,s=c[r+1]??0,l=c[r+2]??0,u;switch(n){case`r`:u=o/255;break;case`g`:u=s/255;break;case`b`:u=l/255;break;default:u=(HX*o+UX*s+WX*l)/255;break}t.push(u)}l.push(t)}let u={};return t.width!==void 0&&(u.width=t.width),t.depth!==void 0&&(u.depth=t.depth),t.scaleZ!==void 0&&(u.scaleZ=t.scaleZ),GX(l,u)}function YX(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function XX(e,t={}){if(e.length===0)return k(F(N.HULL_EMPTY_INPUT,`hull: at least one shape is required`,void 0,void 0,`Provide one or more shapes to compute a convex hull`));for(let[t,n]of e.entries()){let e=YX(n,`hull: shapes[${t}]`);if(A(e))return e}let n=t.tolerance??.1;try{let t=U(),r=e.map(e=>e.wrapped),i=W(t.hull(r,n));return SE(i)?O(i):k(P(N.HULL_NOT_3D,`Hull result is not a solid; input may be degenerate`))}catch(e){let t=e instanceof Error?e.message:String(e);return t.includes(`coplanar`)||t.includes(`fewer than`)||t.includes(`degenerate`)?k(P(N.HULL_DEGENERATE,`Hull degenerate: ${t}`,e)):k(P(N.HULL_FAILED,`Hull operation failed: ${t}`,e))}}function ZX(e){if(e.length<4)return k(F(N.HULL_EMPTY_INPUT,`convexHull: at least 4 points required, got ${e.length}`,void 0,void 0,`Provide 4 or more non-coplanar 3D points`));try{let t=U(),n=e.map(e=>({x:e[0],y:e[1],z:e[2]})),r=W(t.hullFromPoints(n,.1));return SE(r)?O(r):k(P(N.HULL_NOT_3D,`convexHull result is not a solid; points may be coplanar`))}catch(e){let t=e instanceof Error?e.message:String(e);return t.includes(`coplanar`)||t.includes(`fewer than`)||t.includes(`degenerate`)?k(P(N.HULL_DEGENERATE,`convexHull degenerate: ${t}`,e)):k(P(N.HULL_FAILED,`convexHull failed: ${t}`,e))}}function QX(e){let n=zE(e);if(n.length!==1)return null;let r=t(n,0);if(eD(r)!==`sphere`)return null;let i=U().area(r.wrapped);return Math.sqrt(i/(4*Math.PI))}function $X(e,t,n){try{let r=W(U().offset(e.wrapped,t,n));return wE(r)?O(r):(r[Symbol.dispose](),k(co(N.MINKOWSKI_NOT_3D,`Minkowski sphere offset did not produce a 3D shape`)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.MINKOWSKI_FAILED,`Minkowski sphere offset failed: ${t}`,e,{operation:`minkowski`,fastPath:`sphere`}))}}function eZ(e,t,n){let r=U();try{let i=VE(e),a=VE(t);if(i.length===0||a.length===0)return k(P(N.MINKOWSKI_FAILED,`Minkowski sum: one or both shapes have no vertices`,void 0,{operation:`minkowski`}));let o=[];for(let e of i){let[t,n,i]=r.vertexPosition(e.wrapped);for(let e of a){let[a,s,c]=r.vertexPosition(e.wrapped);o.push({x:t+a,y:n+s,z:i+c})}}let s=W(r.hullFromPoints(o,n));return wE(s)?O(s):(s[Symbol.dispose](),k(co(N.MINKOWSKI_NOT_3D,`Minkowski hull did not produce a 3D shape`)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.MINKOWSKI_FAILED,`Minkowski general path failed: ${t}`,e,{operation:`minkowski`}))}}function tZ(e,t,n={}){let{tolerance:r=1e-6}=n;if(U().isNull(e.wrapped))return k(F(N.NULL_SHAPE_INPUT,`minkowski: shape is a null shape`));if(U().isNull(t.wrapped))return k(F(N.MINKOWSKI_NULL_TOOL,`minkowski: tool is a null shape`));if(!wE(e)||!wE(t))return k(F(N.MINKOWSKI_NOT_3D,`minkowski: both shape and tool must be 3D`));let i=QX(t);return i===null?eZ(e,t,r):$X(e,i,r)}function nZ(e,t,n={}){let{tolerance:r=1e-6}=n;if(e.length<4)return k(F(N.POLYHEDRON_INSUFFICIENT_POINTS,`polyhedron: need at least 4 points, got ${e.length}`));if(t.length<4)return k(F(N.POLYHEDRON_INSUFFICIENT_FACES,`polyhedron: need at least 4 faces, got ${t.length}`));let i=[];for(let[n,r]of t.entries()){for(let t of r)if(t<0||t>=e.length)return k(F(N.POLYHEDRON_INVALID_INDEX,`polyhedron: face ${n} has out-of-range index ${t} (${e.length} points)`));if(r.length<3)continue;let t=r[0];for(let e=1;e<r.length-1;e++)i.push([t,r[e],r[e+1]])}try{let t=U(),n=e.map(([e,t,n])=>({x:e,y:t,z:n})),a=W(t.buildSolidFromFaces(n,i,r));return SE(a)?O(a):(a[Symbol.dispose](),k(P(N.POLYHEDRON_FAILED,`Polyhedron did not produce a solid`)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.POLYHEDRON_FAILED,`Polyhedron failed: ${t}`,e))}}var rZ=1e-10;function iZ(e,t,n,r){return e*r-t*n}function aZ(e,t,n,r){return e*n+t*r}function oZ(e,t){return Math.sqrt(e*e+t*t)}function sZ(e,t){let n=e[(t%e.length+e.length)%e.length];if(!n)throw Error(`Invalid polygon index ${t} for length ${e.length}`);return n}function cZ(e){let t=0;for(let n=0;n<e.length;n++){let r=sZ(e,n),i=sZ(e,n+1);t+=r.x*i.y-i.x*r.y}return t<0?[...e].reverse():e}function lZ(e,t){let n=sZ(e,t-1),r=sZ(e,t),i=sZ(e,t+1),a=r.x-n.x,o=r.y-n.y,s=oZ(a,o),c=i.x-r.x,l=i.y-r.y,u=oZ(c,l);if(s<rZ||u<rZ)return{dx:0,dy:0};let d=-o/s,f=a/s,p=-l/u,m=c/u,h=d+p,g=f+m,_=oZ(h,g);if(_<rZ)return{dx:d,dy:f};h/=_,g/=_;let v=aZ(h,g,d,f),y=Math.abs(v)>rZ?1/v:1;return{dx:h*y,dy:g*y}}function uZ(e){return!e.prev||!e.next?!1:iZ(e.x-e.prev.x,e.y-e.prev.y,e.next.x-e.x,e.next.y-e.y)<-1e-10}function dZ(e){let t=e.map((t,n)=>{let r=lZ(e,n);return{x:t.x,y:t.y,bx:r.dx,by:r.dy,origIdx:n,prev:null,next:null,active:!0}});for(let e=0;e<t.length;e++){let n=t[e],r=t[(e-1+t.length)%t.length],i=t[(e+1)%t.length];n&&r&&i&&(n.prev=r,n.next=i)}return t}function fZ(e,t){let n=e;for(let e=0;e<t&&n;e++)n.active=!1,n=n.next}function pZ(e){let t=1,n=e.next;for(;n!==e&&(t++,n=n.next,!(t>1e4)););return t}function mZ(e,t){let n=e.bx-t.bx,r=e.by-t.by,i=t.x-e.x,a=t.y-e.y;if(Math.abs(n)<rZ&&Math.abs(r)<rZ)return null;let o;if(o=Math.abs(n)>Math.abs(r)?i/n:a/r,o<rZ)return null;let s=Math.abs(n)>Math.abs(r)?r:n,c=Math.abs(n)>Math.abs(r)?a:i;if(Math.abs(s)>rZ){let e=c/s;if(Math.abs(o-e)>1e-4*Math.max(1,Math.abs(o)))return null}return o}function hZ(e,t,n){let r=n.x-t.x,i=n.y-t.y,a=oZ(r,i);if(a<rZ)return null;let o=-i/a,s=r/a,c=(e.x-t.x)*o+(e.y-t.y)*s,l=e.bx-(t.bx+n.bx)/2,u=e.by-(t.by+n.by)/2,d=l*o+u*s;if(Math.abs(d)<rZ)return null;let f=-c/d;if(f<rZ)return null;let p=e.x+f*e.bx,m=e.y+f*e.by,h=t.x+f*t.bx,g=t.y+f*t.by,_=n.x+f*n.bx,v=n.y+f*n.by,y=_-h,b=v-g,x=oZ(y,b);if(x<rZ)return f;let S=aZ(p-h,m-g,y,b)/(x*x);return S<-.01||S>1.01?null:f}function gZ(e){let t=[];for(let n of e){if(!n.active||!n.next)continue;let e=mZ(n,n.next);if(e!==null&&e>rZ){let r=n.x+e*n.bx,i=n.y+e*n.by;t.push({time:e,x:r,y:i,nodeA:n,nodeB:n.next,type:`edge`})}if(uZ(n)){let e=n.next.next,r=0;for(;e!==n.prev&&e!==n&&r<1e3;){let i=hZ(n,e,e.next);if(i!==null&&i>rZ){let r=n.x+i*n.bx,a=n.y+i*n.by;t.push({time:i,x:r,y:a,nodeA:n,nodeB:e,type:`split`})}e=e.next,r++}}}return t.sort((e,t)=>e.time-t.time),t}function _Z(e){if(e.length<3)return O({nodes:[],faces:[]});try{return O(vZ(e))}catch(e){return k(I(N.STRAIGHT_SKELETON_FAILED,e instanceof Error?e.message:String(e),e))}}function vZ(e){let t=cZ(e),n=t.length,r=[],i=Array.from({length:n},()=>[]),a=dZ(t),o=0,s=n*n*2;for(;o<s;){o++;let e=a.find(e=>e.active);if(!e)break;let t=pZ(e);if(t<=3){if(t===3){let t=e,n=t.next,a=n.next,o=mZ(t,n),s=o!==null&&o>rZ?o:0,c=(t.x+n.x+a.x)/3+s*(t.bx+n.bx+a.bx)/3,l=(t.y+n.y+a.y)/3+s*(t.by+n.by+a.by)/3,u=r.length;r.push({x:c,y:l,height:s});let d=i[t.origIdx],f=i[n.origIdx],p=i[a.origIdx];d&&d.push(u),f&&f.push(u),p&&p.push(u),t.active=!1,n.active=!1,a.active=!1}else fZ(e,t);continue}let n=a.filter(e=>e.active),s=gZ(n);if(s.length===0){for(let e of n)e.active=!1;break}let c=s[0];if(!c)break;if(c.type===`edge`){let e=c.nodeA,t=c.nodeB;if(!e.active||!t.active)continue;let n=r.length;r.push({x:c.x,y:c.y,height:c.time});let a=i[e.origIdx],o=i[t.origIdx];a&&a.push(n),o&&o.push(n),e.x=c.x,e.y=c.y,e.next=t.next,t.next.prev=e,t.active=!1;let s=[],l=e;do s.push({x:l.x,y:l.y}),l=l.next;while(l!==e);let u=lZ(s,0);e.bx=u.dx,e.by=u.dy}else{let e=c.nodeA,t=c.nodeB;if(!e.active||!t.active)continue;let n=r.length;r.push({x:c.x,y:c.y,height:c.time});let o=i[e.origIdx];o&&o.push(n);let s=i[t.origIdx];s&&s.push(n);let l={x:c.x,y:c.y,bx:0,by:0,origIdx:e.origIdx,prev:null,next:null,active:!0};a.push(l),e.x=c.x,e.y=c.y;let u=e.next,d=t.next;e.next=d,d.prev=e,l.next=u,u.prev=l,l.prev=t,t.next=l;let f=e=>{let t=[],n=e;do t.push({x:n.x,y:n.y}),n=n.next;while(n!==e);return t},p=lZ(f(e),0);e.bx=p.dx,e.by=p.dy;let m=lZ(f(l),0);l.bx=m.dx,l.by=m.dy}}let c=[];for(let e=0;e<n;e++){let a=(e+1)%n,o=[sZ(t,e),sZ(t,a)],s=[0,0],l=i[a],u=i[e];if(l)for(let e of l){let t=r[e];t&&(o.push({x:t.x,y:t.y}),s.push(t.height))}if(u)for(let e=u.length-1;e>=0;e--){let t=u[e];if(t===void 0)continue;let n=r[t];if(!n)continue;let i=o[o.length-1];i&&oZ(n.x-i.x,n.y-i.y)>rZ&&(o.push({x:n.x,y:n.y}),s.push(n.height))}o.length>=3&&c.push({vertices:o,heights:s})}let l=[];for(let e of r)l.some(t=>Math.abs(t.x-e.x)<.01&&Math.abs(t.y-e.y)<.01)||l.push(e);return{nodes:l,faces:c}}function yZ(e){let t=RE(e).map(e=>{let t=tk(e);return{x:t[0],y:t[1]}}),n=t[0],r=t[t.length-1];return t.length>1&&n&&r&&Math.abs(n.x-r.x)<1e-10&&Math.abs(n.y-r.y)<1e-10&&t.pop(),t}function bZ(e){let t=[];for(let n=1;n<e-1;n++)t.push([0,n,n+1]);return t}function xZ(e,t,n,r,i,a){return(n-e)*(a-t)-(r-t)*(i-e)}function SZ(e,t,n,r,i,a,o,s){let c=xZ(n,r,i,a,e,t),l=xZ(i,a,o,s,e,t),u=xZ(o,s,n,r,e,t);return!((c<0||l<0||u<0)&&(c>0||l>0||u>0))}function CZ(e){let t=e.length;if(t<3)return[];if(t===3)return[[0,1,2]];let n=0;for(let r=0;r<t;r++){let i=e[r],a=e[(r+1)%t];i&&a&&(n+=i.x*a.y-a.x*i.y)}let r=[],i=Array.from({length:t},(e,t)=>t);n<0&&i.reverse();let a=(t,n,r)=>{let a=e[t],o=e[n],s=e[r];if(!a||!o||!s||xZ(a.x,a.y,o.x,o.y,s.x,s.y)<=0)return!1;for(let c of i){if(c===t||c===n||c===r)continue;let i=e[c];if(i&&SZ(i.x,i.y,a.x,a.y,o.x,o.y,s.x,s.y))return!1}return!0};for(;i.length>3;){let e=!1;for(let t=0;t<i.length;t++){let n=i[(t-1+i.length)%i.length],o=i[t],s=i[(t+1)%i.length];if(!(n===void 0||o===void 0||s===void 0)&&a(n,o,s)){r.push([n,o,s]),i.splice(t,1),e=!0;break}}if(!e)break}if(i.length===3){let[e,t,n]=i;e!==void 0&&t!==void 0&&n!==void 0&&r.push([e,t,n])}return r}function wZ(e,t,n){let r=[];for(let i of e.faces){let e=i.vertices.map((e,n)=>[e.x,e.y,(i.heights[n]??0)*t]),a=bZ(e.length);for(let[t,i,o]of a){let a=e[t],s=e[i],c=e[o];if(!a||!s||!c)continue;let l=s[0]-a[0],u=s[1]-a[1],d=s[2]-a[2],f=c[0]-a[0],p=c[1]-a[1],m=c[2]-a[2],h=u*m-d*p,g=d*f-l*m,_=l*p-u*f;if(h*h+g*g+_*_<1e-20)continue;let v=n.buildTriFace(a,s,c);v!==null&&r.push(v)}}return r}function TZ(e,t){let n=(t?.angle??45)*iD,r=Math.tan(n);try{let t=yZ(e);if(t.length<3)return k(P(N.ROOF_FAILED,`Wire must have at least 3 edges for roof generation`));let n=_Z(t);if(!n.ok)return n;let i=n.value;if(i.faces.length===0)return k(P(N.ROOF_FAILED,`Straight skeleton computation produced no faces`));let a=U(),o=wZ(i,r,a);for(let[e,n,r]of CZ(t)){let i=t[e],s=t[n],c=t[r];if(!i||!s||!c)continue;let l=[i.x,i.y,0],u=[s.x,s.y,0],d=[c.x,c.y,0],f=a.buildTriFace(l,d,u);f!==null&&o.push(f)}if(o.length===0)return k(P(N.ROOF_FAILED,`No valid triangular faces could be built`));try{let e=a.sewAndSolidify(o,1e-6);return O(mE(a.fixShape(e)))}catch(e){try{let t=mE(a.sew(o,1e-6));return $T(t)?O(t):k(P(N.ROOF_FAILED,`Sew fallback produced invalid solid`,e))}catch(e){return k(P(N.ROOF_FAILED,`Failed to sew roof faces`,e))}}}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.ROOF_FAILED,`Roof generation failed: ${t}`,e))}}var EZ={coincident:3,concentric:4,distance:1,angle:1},DZ=[1,0,0,0];function OZ(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function kZ(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function AZ(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function jZ(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function MZ(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function NZ(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function PZ(e){return NZ(jZ(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function FZ(e,t){let n=OZ(qM(t.rotation,e.origin),t.position);return{type:e.type,origin:n,...e.normal?{normal:qM(t.rotation,e.normal)}:{},...e.direction?{direction:qM(t.rotation,e.direction)}:{}}}function IZ(e,t,n){let r=e.normal??[0,0,1];return{position:MZ(r,AZ(r,kZ(e.origin,t.origin))+n),rotation:DZ}}function LZ(e,t){let n=e.direction??[0,0,1],r=YM(t.direction??[0,0,1],n),i=qM(r,t.origin);return{position:kZ(e.origin,i),rotation:r}}function RZ(e,t,n){let r=NZ(e.normal??[0,0,1]),i=NZ(t.normal??[0,0,1]),a=Math.acos(Math.max(-1,Math.min(1,AZ(i,r)))),o=jZ(i,r);return{position:[0,0,0],rotation:JM(Math.hypot(o[0],o[1],o[2])<1e-9?PZ(i):o,a-n)}}function zZ(e,t,n){let r=kZ(t,e),i=Math.hypot(r[0],r[1],r[2]);return{position:kZ(OZ(e,MZ(i<1e-9?[1,0,0]:MZ(r,1/i),n)),t),rotation:DZ}}function BZ(e,t,n,r){let i=NZ(e);return{position:MZ(i,AZ(i,kZ(t,n))-r),rotation:DZ}}function VZ(e,t,n){let r=NZ(e.direction??[0,0,1]),i=OZ(e.origin,MZ(r,AZ(r,kZ(t,e.origin))));if(n===0)return{position:kZ(i,t),rotation:DZ};let a=kZ(t,i),o=Math.hypot(a[0],a[1],a[2]);return{position:kZ(OZ(i,MZ(o<1e-9?PZ(r):MZ(a,1/o),n)),t),rotation:DZ}}function HZ(e,t,n){let r=NZ(t.direction??[0,0,1]),i=kZ(t.origin,e),a=kZ(i,MZ(r,AZ(r,i))),o=Math.hypot(a[0],a[1],a[2]);return n===0?{position:MZ(a,-1),rotation:DZ}:{position:kZ(MZ(o<1e-9?PZ(r):MZ(a,1/o),n),a),rotation:DZ}}function UZ(e,t,n){let r=NZ(e.direction??[0,0,1]),i=YM(NZ(t.direction??[0,0,1]),r),a=kZ(qM(i,t.origin),e.origin),o=kZ(a,MZ(r,AZ(r,a))),s=Math.hypot(o[0],o[1],o[2]);return{position:kZ(MZ(s<1e-9?PZ(r):MZ(o,1/s),n),o),rotation:i}}var WZ=new Set([`plane-plane`,`plane-point`,`point-plane`,`point-point`,`axis-axis`,`axis-point`,`point-axis`]),GZ={angle:`plane`,concentric:`axis`},KZ=new Set([`coincident`,`distance`,`angle`,`concentric`]);function qZ(e,t,n){let r=GZ[e];return r?t===r&&n===r:WZ.has(`${t}-${n}`)}function JZ(e,t,n){switch(`${e.type}-${t.type}`){case`plane-plane`:case`plane-point`:return IZ(e,t,n);case`point-plane`:return BZ(t.normal??[0,0,1],e.origin,t.origin,n);case`point-point`:return zZ(e.origin,t.origin,n);case`axis-axis`:return n===0?LZ(e,t):UZ(e,t,n);case`axis-point`:return VZ(e,t.origin,n);case`point-axis`:return HZ(e.origin,t,n);default:return null}}function YZ(e,t,n){switch(e.type){case`concentric`:return LZ(t,n);case`angle`:return RZ(t,n,(e.value??0)*Math.PI/180);default:{let r=JZ(t,n,e.type===`distance`?e.value??0:0);if(!r)throw Error(`solveMate: unsupported entity pair escaped filter: ${t.type}-${n.type}`);return r}}}function XZ(e,t){let n=new Map;for(let t of e)n.set(t,{position:[0,0,0],rotation:DZ});let r=[],i=t.filter(e=>KZ.has(e.type)&&e.entityA&&e.entityB),a=new Set;for(let e of i)e.entityB&&a.add(e.entityB.node);let o=new Set;for(let t of e)a.has(t)||o.add(t);for(let e of t)e.type===`fixed`&&e.entityA&&o.add(e.entityA.node);let s=[];for(let e of i){if(!e.entityA||!e.entityB)continue;let t=e.entityA.entity.type,n=e.entityB.entity.type;if(!qZ(e.type,t,n)){r.push(`${e.type}(${t}-${n})`);continue}s.push(e)}let c=!0;for(;c&&s.length>0;){c=!1;for(let e=s.length-1;e>=0;e--){let t=s[e];if(!t?.entityA||!t.entityB)continue;let r=t.entityA,i=t.entityB;if(!o.has(r.node)||(s.splice(e,1),c=!0,o.has(i.node)))continue;let a=n.get(r.node)??{position:[0,0,0],rotation:DZ},l=FZ(r.entity,a);n.set(i.node,YZ(t,l,i.entity)),o.add(i.node)}}for(let e of s)r.push(`${e.type}(unanchored)`);return{transforms:n,dof:r.reduce((e,t)=>e+(EZ[t]??EZ[t.split(`(`)[0]??``]??0),0),converged:r.length===0,unsupported:r}}function ZZ(e){if(e.face){let t=tO(e.face);return t?{type:`axis`,origin:t.origin,direction:t.direction}:{type:`plane`,origin:eO(e.face),normal:$D(e.face)}}if(e.edge){if(ek(e.edge)===`LINE`)return{type:`axis`,origin:tk(e.edge),direction:ik(e.edge)};let t=ok(e.edge);return t?{type:`axis`,origin:t.origin,direction:t.direction}:null}return e.point?{type:`point`,origin:e.point}:null}function QZ(e,t){let n=ZZ(e),r=ZZ(t);return!n||!r?k(F(N.ASSEMBLY_MATE_INVALID,`solveAssembly: could not extract geometry from mate entities`)):O({entityA:{node:e.node,entity:n},entityB:{node:t.node,entity:r}})}function $Z(e){switch(e.type){case`fixed`:return O({type:`fixed`,entityA:{node:e.entity.node,entity:{type:`point`,origin:[0,0,0]}}});case`coincident`:{let t=QZ(e.entityA,e.entityB);return t.ok?O({type:`coincident`,...t.value}):t}case`distance`:{let t=QZ(e.entityA,e.entityB);return t.ok?O({type:`distance`,...t.value,value:e.distance}):t}case`angle`:{let t=QZ(e.entityA,e.entityB);return t.ok?O({type:`angle`,...t.value,value:e.angle}):t}case`concentric`:{let t=QZ(e.axisA,e.axisB);return t.ok?O({type:`concentric`,...t.value}):t}}}function eQ(e,t){let n=e.mates??[];return{...e,mates:[...n,t]}}function tQ(e){let t=e.mates;if(!t||t.length===0)return k(F(N.ASSEMBLY_MATE_INVALID,`solveAssembly: no mates defined`));try{let n=[];BM(e,e=>{n.push(e.name)});let r=[];for(let e of t){let t=$Z(e);if(!t.ok)return t;r.push(t.value)}let i=XZ(n,r);if(!i.converged){let e=i.unsupported.length>0?`Unsupported constraint types: ${i.unsupported.join(`, `)} (${i.dof} DOF unresolved)`:`Assembly constraint solver did not converge`;return k(P(N.ASSEMBLY_NOT_CONVERGED,e))}return O({transforms:i.transforms,dof:i.dof,converged:i.converged})}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.ASSEMBLY_SOLVE_FAILED,`Assembly solve failed: ${t}`,e))}}function nQ(e,t,n=1e-6){if(U().isNull(e.wrapped))return k(F(N.NULL_SHAPE_INPUT,`checkInterference: first shape is a null shape`));if(U().isNull(t.wrapped))return k(F(N.NULL_SHAPE_INPUT,`checkInterference: second shape is a null shape`));let r=U().distance(e.wrapped,t.wrapped);return O({hasInterference:r.value<=n,minDistance:r.value,pointOnShape1:r.point1,pointOnShape2:r.point2})}function rQ(e,n=1e-6){let r=[],i=e.map(e=>QE(e));return e.forEach((a,o)=>{for(let s=o+1;s<e.length;s++){if(iQ(t(i,o),t(i,s),n))continue;let c=j(nQ(a,t(e,s),n));c.hasInterference&&r.push({i:o,j:s,result:c})}}),r}function iQ(e,t,n){return e.xMax+n<t.xMin||t.xMax+n<e.xMin||e.yMax+n<t.yMin||t.yMax+n<e.yMin||e.zMax+n<t.zMin||t.zMax+n<e.zMin}function aQ(e){let t=e.split(/\r?\n/),n=[],r=!1,i;for(let e=0;e<t.length-1;e+=2){let a=t[e],o=t[e+1];if(a===void 0||o===void 0)continue;let s=parseInt(a.trim(),10),c=o.trim();if(!isNaN(s)){if(s===2&&c===`ENTITIES`){r=!0;continue}if(r){if(s===0){if(c===`ENDSEC`||c===`EOF`){i&&n.push(i);break}i&&n.push(i),i={type:c,layer:`0`,data:new Map};continue}i&&(s===8?i.layer=c:i.data.set(s,c))}}}return n}function oQ(e,t,n=0){let r=e.get(t);if(r===void 0)return n;let i=parseFloat(r);return isNaN(i)?n:i}function sQ(e){let{type:t,data:n}=e,r=U();if(t===`LINE`)return r.makeLineEdge([oQ(n,10),oQ(n,20),oQ(n,30)],[oQ(n,11),oQ(n,21),oQ(n,31)]);if(t===`CIRCLE`)return r.makeCircleEdge([oQ(n,10),oQ(n,20),oQ(n,30)],[0,0,1],oQ(n,40));if(t===`ARC`){let e=oQ(n,50)*Math.PI/180,t=oQ(n,51)*Math.PI/180;return r.makeCircleArc([oQ(n,10),oQ(n,20),oQ(n,30)],[0,0,1],oQ(n,40),e,t)}}async function cQ(e,t){let n;try{n=await e.text()}catch(e){return k(fo(N.DXF_IMPORT_FAILED,`Failed to read DXF blob`,e))}let r=aQ(n),i=t?.layer===void 0?r:r.filter(e=>e.layer===t.layer);if(i.length===0)return O([]);let a=[];try{for(let e of i){let t=sQ(e);t!==void 0&&a.push(t)}return a.length===0?O([]):O([dE(U().makeWire(a))])}catch(e){return k(fo(N.DXF_IMPORT_FAILED,`Failed to convert DXF entities to geometry`,e))}finally{for(let e of a)e.delete()}}function lQ(e,t,n=1e-6){let r=U(),i=[];for(let[t,n,a]of e){let e=r.buildTriFace(t,n,a);e!==null&&i.push(e)}if(i.length===0)return k(fo(t,`No valid triangular faces could be built`));try{return O(W(r.sewAndSolidify(i,n)))}catch{try{return O(W(r.sew(i,n)))}catch{return k(fo(t,`Failed to sew triangular faces`))}}}function uQ(e){let t=e.split(/\s+/),n=parseFloat(t[1]??``),r=parseFloat(t[2]??``),i=parseFloat(t[3]??``);return isNaN(n)||isNaN(r)||isNaN(i)?null:[n,r,i]}function dQ(e){return e.split(/\s+/).slice(1).map(e=>parseInt(e.split(`/`)[0]??``,10)).filter(e=>!isNaN(e))}async function fQ(e){let t=(await e.text()).split(`
|
|
60
|
-
`),n=[],r=[];for(let e of t){let t=e.trim();if(t.startsWith(`v `)){let e=uQ(t);e&&n.push(e)}else if(t.startsWith(`f `)){let e=dQ(t);e.length>=3&&r.push(e)}}if(n.length===0||r.length===0)return k(fo(N.OBJ_IMPORT_FAILED,`OBJ file contains no valid geometry`));try{return pQ(n,r)}catch(e){let t=e instanceof Error?e.message:String(e);return k(fo(N.OBJ_IMPORT_FAILED,`OBJ import failed: ${t}`,e))}}function pQ(e,t){let n=[];for(let r of t)for(let t=1;t<r.length-1;t++){let i=r[0]??0,a=r[t]??0,o=r[t+1]??0,s=i>0?i-1:e.length+i,c=a>0?a-1:e.length+a,l=o>0?o-1:e.length+o,u=e[s],d=e[c],f=e[l];!u||!d||!f||n.push([u,d,f])}return lQ(n,N.OBJ_IMPORT_FAILED)}function mQ(e,t){let n=-1;for(let t=e.length-22;t>=0;t--)if(e[t]===80&&e[t+1]===75&&e[t+2]===5&&e[t+3]===6){n=t;break}if(n<0)return null;let r=new DataView(e.buffer,e.byteOffset,e.byteLength),i=r.getUint32(n+16,!0),a=i+r.getUint32(n+12,!0),o=i,s=new TextDecoder;for(;o<a&&r.getUint32(o,!0)===33639248;){let n=r.getUint16(o+28,!0),i=r.getUint16(o+30,!0),a=r.getUint16(o+32,!0),c=r.getUint32(o+42,!0);if(s.decode(e.subarray(o+46,o+46+n))===t){if(r.getUint16(c+8,!0)!==0)return null;let t=r.getUint16(c+26,!0),n=r.getUint16(c+28,!0),i=r.getUint32(c+18,!0),a=c+30+t+n;return e.subarray(a,a+i)}o+=46+n+i+a}return null}function hQ(e){return e>=97&&e<=122||e>=65&&e<=90||e>=48&&e<=57||e===95}function gQ(e){let t={},n=0;for(;n<e.length;){let r=e.indexOf(`="`,n);if(r<0)break;let i=r;for(;i>0&&hQ(e.charCodeAt(i-1));)i--;if(i===r){n=r+2;continue}let a=e.slice(i,r),o=r+2,s=e.indexOf(`"`,o);if(s<0)break;t[a]=e.slice(o,s),n=s+1}return t}function _Q(e,t){let n=[],r=`<${t} `,i=0;for(;i<e.length;){let t=e.indexOf(r,i);if(t<0)break;let a=e.indexOf(`>`,t);if(a<0)break;n.push(e.slice(t,a+1)),i=a+1}return n}function vQ(e,t){let n=e.indexOf(`<${t}`);if(n<0)return null;let r=e.indexOf(`</${t}>`,n);return r<0?null:e.slice(n,r+t.length+3)}function yQ(e){let t=e.startsWith(`#`)?e.slice(1):e;return[parseInt(t.slice(0,2),16)/255,parseInt(t.slice(2,4),16)/255,parseInt(t.slice(4,6),16)/255,t.length>=8?parseInt(t.slice(6,8),16)/255:1]}function bQ(e){let t=new Map,n=0;for(;n<e.length;){let r=e.indexOf(`<colorgroup`,n);if(r<0)break;let i=e.indexOf(`</colorgroup>`,r);if(i<0)break;let a=e.slice(r,i+13);n=i+13;let o=e.indexOf(`>`,r);if(o<0)continue;let s=gQ(e.slice(r,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of _Q(a,`color`)){let t=gQ(e).color;t!==void 0&&l.push(yQ(t))}t.set(c,l)}let r=0;for(;r<e.length;){let n=e.indexOf(`<basematerials`,r);if(n<0)break;let i=e.indexOf(`</basematerials>`,n);if(i<0)break;let a=e.slice(n,i+16);r=i+16;let o=e.indexOf(`>`,n);if(o<0)continue;let s=gQ(e.slice(n,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of _Q(a,`base`)){let t=gQ(e).displaycolor;t===void 0?l.push([0,0,0,1]):l.push(yQ(t))}t.set(c,l)}return t}function xQ(e){let t=[],n=[],r=[],i=bQ(e);for(let n of _Q(e,`vertex`)){let e=gQ(n);e.x!==void 0&&e.y!==void 0&&e.z!==void 0&&t.push([parseFloat(e.x),parseFloat(e.y),parseFloat(e.z)])}let a=null,o=null,s=vQ(e,`object`);if(s!==null){let e=s.indexOf(`>`);if(e>=0){let t=gQ(s.slice(0,e+1));t.pid!==void 0&&(a=parseInt(t.pid,10)),t.pindex!==void 0&&(o=parseInt(t.pindex,10))}}for(let t of _Q(e,`triangle`)){let e=gQ(t);if(e.v1!==void 0&&e.v2!==void 0&&e.v3!==void 0){n.push([parseInt(e.v1,10),parseInt(e.v2,10),parseInt(e.v3,10)]);let t=null,s=e.pid??(a===null?void 0:String(a)),c=e.p1??(o===null?void 0:String(o));if(s!==void 0&&c!==void 0){let e=parseInt(s,10),n=parseInt(c,10),r=i.get(e);r!==void 0&&n<r.length&&(t=r[n]??null)}r.push(t)}}return{vertices:t,triangles:n,triangleColors:r}}function SQ(e){let t=new Map;for(let n of e){if(n===null)continue;let e=n.join(`,`),r=t.get(e);r===void 0?t.set(e,{count:1,color:n}):r.count++}let n=null;for(let e of t.values())(n===null||e.count>n.count)&&(n=e);return n===null?null:n.color}function CQ(e){let t=U(),n=e.vertices.map(([e,t,n])=>({x:e,y:t,z:n})),r=e.triangles;try{return O(W(t.buildSolidFromFaces(n,r,1e-6)))}catch{let t=[];for(let[n,r,i]of e.triangles){let a=e.vertices[n],o=e.vertices[r],s=e.vertices[i];!a||!o||!s||t.push([a,o,s])}return lQ(t,N.THREEMF_IMPORT_FAILED)}}async function wQ(e){try{let t=await e.arrayBuffer(),n=mQ(new Uint8Array(t),`3D/3dmodel.model`);if(!n)return k(fo(N.THREEMF_IMPORT_FAILED,`3MF archive does not contain 3D/3dmodel.model (or uses unsupported compression)`));let r=xQ(new TextDecoder().decode(n));if(r.vertices.length===0||r.triangles.length===0)return k(fo(N.THREEMF_IMPORT_FAILED,`3MF model contains no valid geometry`));let i=CQ(r);if(i.ok){let e=SQ(r.triangleColors);e!==null&&OO(i.value,e)}return i}catch(e){let t=e instanceof Error?e.message:String(e);return k(fo(N.THREEMF_IMPORT_FAILED,`3MF import failed: ${t}`,e))}}async function TQ(e){try{let t=await e.arrayBuffer();return O(W(U().importGLB(t)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(fo(N.GLB_IMPORT_FAILED,`Failed to import GLB: ${t}`,e))}}function $(e){return`__wrapped`in e?e.val:e}function EQ(e){return $(e)}function DQ(e,t){return IO($(e),t)}function OQ(e,t,n){let r=n?.at;return LO($(e),t,r,n?.axis)}function kQ(e,t){let n=t?.at;return RO($(e),t?.normal??[1,0,0],n)}function AQ(e,t,n){return zO($(e),t,n?.center)}function jQ(e){return qO($(e))}function MQ(e,t){return WO($(e),t)}function NQ(e,t){return KO($(e),t)}function PQ(e,t,n){return iA($(e),$(t),{...n,unsafe:!0})}function FQ(e,t,n){return aA($(e),$(t),{...n,unsafe:!0})}function IQ(e,t){return cA(e.map(e=>$(e)),{...t,unsafe:!0})}function LQ(e,t,n){return lA($(e),t.map(e=>$(e)),{...n,unsafe:!0})}function RQ(e,t,n){return oA($(e),$(t),{...n,unsafe:!0})}function zQ(e,t,n){return dA($(e),t,n)}function BQ(e,t,n){return _A($(e),t,n)}function VQ(e,t){return vA($(e),t)}function HQ(e,t,n){return yA($(e),t,n)}function UQ(e,t){if(e!==void 0)return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(YP()).findAll(t)}function WQ(e,t){return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(QP()).findAll(t)}function GQ(e){return typeof e==`object`&&!Array.isArray(e)&&typeof e!=`function`?{mode:`distAngle`,distance:e.distance,angle:e.angle}:typeof e==`function`?{mode:`standard`,distance:t=>{let n=e(t);return n===null?null:typeof n==`object`&&!Array.isArray(n)?n.distance:n}}:{mode:`standard`,distance:e}}function KQ(e,t,n){let r=$(e),i,a;return n===void 0?(i=void 0,a=t):(i=UQ(t,r),a=n),Tj(r,i,a)}function qQ(e,t,n){let r=$(e),i,a;n===void 0?(i=void 0,a=t):(i=UQ(t,r),a=n);let o=GQ(a);return o.mode===`distAngle`?LA(r,[...i??RE(r)],o.distance,o.angle):Ej(r,i,o.distance)}function JQ(e,t,n,r){let i=$(e);return Dj(i,WQ(t,i),n,r?.tolerance)}function YQ(e,t,n){return Oj($(e),t,n?.tolerance)}function XQ(e,t){return Cj($(e),t)}function ZQ(e,t,n){let r=$(e);return Aj(r,WQ(t,r),n.pullDirection,n.neutralPlane,n.angle)}function QQ(e){return Ij($(e))}function $Q(e){return $O($(e))}function e$(e,t){return Tk($(e),t)}function t$(e,t){return Ek($(e),t)}function n$(e){return nD($(e))}function r$(e){return JO($(e))}function i$(e){return UD(e)}function a$(e){return Mj($(e))}function o$(e){return XO($(e))}function s$(e,t){return Qj($(e),typeof t==`number`?[0,0,t]:t)}function c$(e,t){let n=t?.at??[0,0,0];return $j($(e),n,t?.axis??[0,0,1],t?.angle??360)}function l$(e,t){return tM(e.map(e=>$(e)),t)}function u$(e,n){if(n===void 0){let t=zE(e);if(t.length===0)return k(F(N.COMPOUND_NO_FACES,`compoundOps: shape has no faces`));let n=Fk(t),r=eO(n)[2];for(let e=1;e<t.length;e++){let i=Pk(t,e),a=eO(i)[2];a>r&&(n=i,r=a)}return O(n)}if(typeof n==`function`){let r=n(QP()).findAll(e);return r.length===0?k(po(N.COMPOUND_FACE_NOT_FOUND,`compoundOps: face finder matched no faces`)):O(t(r,0))}return O(n)}function d$(e){return`sketchOnPlane`in e&&typeof e.sketchOnPlane==`function`?e.sketchOnPlane(`XY`).wire:e}function f$(e,t){let n=$(e),{at:r,radius:i,axis:a}=t,o=a??[0,0,1];if(i<=0)return k(F(`DRILL_INVALID_RADIUS`,`Drill radius must be positive`));if(xD(o))return k(F(`DRILL_ZERO_AXIS`,`Drill axis cannot be zero`));let s=yD(o),c=r.length===2?[r[0],r[1],0]:[r[0],r[1],r[2]],l;if(t.depth!==void 0)l=wA(i,t.depth,c,s);else{let e=QE(n),t=[[e.xMin,e.yMin,e.zMin],[e.xMax,e.yMin,e.zMin],[e.xMin,e.yMax,e.zMin],[e.xMax,e.yMax,e.zMin],[e.xMin,e.yMin,e.zMax],[e.xMax,e.yMin,e.zMax],[e.xMin,e.yMax,e.zMax],[e.xMax,e.yMax,e.zMax]],r=1/0,a=-1/0;for(let e of t){let t=(e[0]-c[0])*s[0]+(e[1]-c[1])*s[1]+(e[2]-c[2])*s[2];t<r&&(r=t),t>a&&(a=t)}--r,a+=1,l=wA(i,a-r,[c[0]+s[0]*r,c[1]+s[1]*r,c[2]+s[2]*r],s)}return aA(n,l,{unsafe:!0})}function p$(e,t){let n=$(e),{profile:r,depth:i}=t;if(i<=0)return k(F(`POCKET_INVALID_DEPTH`,`Pocket depth must be positive`));let a=u$(n,t.face);if(A(a))return a;let o=a.value,s=$D(o),c=eO(o),l=Xk(d$(r));if(A(l))return l;let u=Qj(IO(l.value,c),fD(yD(s),-i));return A(u)?u:aA(n,u.value,{unsafe:!0})}function m$(e,t){let n=$(e),{profile:r,height:i}=t;if(i<=0)return k(F(`BOSS_INVALID_HEIGHT`,`Boss height must be positive`));let a=u$(n,t.face);if(A(a))return a;let o=a.value,s=$D(o),c=eO(o),l=Xk(d$(r));if(A(l))return l;let u=Qj(IO(l.value,c),fD(yD(s),i));return A(u)?u:iA(n,u.value,{unsafe:!0})}function h$(e,t){let n=$(e),r=t?.normal??[1,0,0],i=t?.at;return xD(r)?k(F(`MIRROR_ZERO_NORMAL`,`Mirror plane normal cannot be zero`)):iA(n,RO(n,r,i),{unsafe:!0})}function g$(e,t){let n=$(e),{xDir:r,xCount:i,xSpacing:a,yDir:o,yCount:s,ySpacing:c}=t;if(i<1||s<1)return k(F(`PATTERN_INVALID_COUNT`,`Pattern counts must be at least 1`));if(xD(r))return k(F(`PATTERN_ZERO_DIRECTION`,`X direction cannot be zero`));if(xD(o))return k(F(`PATTERN_ZERO_DIRECTION`,`Y direction cannot be zero`));if(i===1&&s===1)return O(n);let l=yD(r),u=yD(o),d=[n];for(let e=0;e<i;e++)for(let t=0;t<s;t++){if(e===0&&t===0)continue;let r=[l[0]*a*e+u[0]*c*t,l[1]*a*e+u[1]*c*t,l[2]*a*e+u[2]*c*t];d.push(IO(n,r))}return cA(d,{unsafe:!0})}var _$=class extends Error{code;kind;suggestion;metadata;constructor(e){let t=e.suggestion?`${e.message}\nSuggestion: ${e.suggestion}`:e.message;super(t),this.name=`BrepError`,this.code=e.code,this.kind=e.kind,e.suggestion&&(this.suggestion=e.suggestion),e.metadata&&(this.metadata=e.metadata)}};function v$(e){if(A(e))throw new _$(e.error);return e.value}function y$(e){return e}function b$(e){return e}function x$(e){return e}function S$(e){return e}function C$(e){return{val:e,__wrapped:!0,translate:t=>N$(DQ(e,t)),rotate:(t,n)=>N$(OQ(e,t,n)),mirror:t=>N$(kQ(e,t)),scale:(t,n)=>N$(AQ(e,t,n)),applyMatrix:t=>N$(v$(MQ(e,t))),moveX:t=>N$(DQ(e,[t,0,0])),moveY:t=>N$(DQ(e,[0,t,0])),moveZ:t=>N$(DQ(e,[0,0,t])),rotateX:t=>N$(OQ(e,t,{axis:[1,0,0]})),rotateY:t=>N$(OQ(e,t,{axis:[0,1,0]})),rotateZ:t=>N$(OQ(e,t,{axis:[0,0,1]})),bounds:()=>QE(e),describe:()=>n$(e),clone:()=>N$(v$(jQ(e))),mesh:t=>e$(e,t),meshEdges:t=>t$(e,t),isValid:()=>a$(e),isEmpty:()=>o$(e),heal:()=>N$(v$(QQ(e))),simplify:()=>N$(v$($Q(e))),toBREP:()=>v$(r$(e)),apply:t=>N$(t(e)),applyResult:t=>N$(v$(t(e))),done:()=>e}}function w$(e){return{fuse:(t,n)=>P$(v$(PQ(e,$(t),{...n,unsafe:!0}))),cut:(t,n)=>P$(v$(FQ(e,$(t),{...n,unsafe:!0}))),intersect:(t,n)=>P$(v$(RQ(e,$(t),{...n,unsafe:!0}))),fuseAll:(t,n)=>P$(S$(v$(cA([e,...t.map($)],{...n,unsafe:!0})))),cutAll:(t,n)=>P$(S$(v$(lA(e,t,{...n,unsafe:!0})))),section:(t,n)=>N$(v$(zQ(e,t,n))),split:t=>N$(v$(VQ(e,t))),slice:(t,n)=>v$(HQ(e,t,n))}}function T$(e){return{fillet(...t){return t.length===1?P$(S$(v$(KQ(y$(e),t[0])))):P$(S$(v$(KQ(y$(e),t[0],t[1]))))},chamfer(...t){return t.length===1?P$(S$(v$(qQ(y$(e),t[0])))):P$(S$(v$(qQ(y$(e),t[0],t[1]))))},shell:(t,n,r)=>P$(S$(v$(JQ(y$(e),t,n,r)))),offset:(t,n)=>P$(S$(v$(YQ(y$(e),t,n)))),draft:(t,n)=>P$(S$(v$(ZQ(y$(e),t,n))))}}function E$(e){return{drill:t=>P$(v$(f$(e,t))),pocket:t=>P$(v$(p$(e,t))),boss:t=>P$(v$(m$(e,t))),mirrorJoin:t=>P$(v$(h$(e,t))),rectangularPattern:t=>P$(v$(g$(e,t)))}}function D$(e){return{volume:()=>v$(_P(e)),area:()=>v$(vP(e)),volumeProps:()=>v$(mP(e)),surfaceProps:()=>v$(hP(e))}}function O$(e){return{edges:()=>RE(e),faces:()=>zE(e),wires:()=>BE(e),vertices:()=>VE(e)}}function k$(e){return{linearPattern:(t,n,r)=>P$(S$(v$(NM(e,t,n,r)))),circularPattern:(t,n,r)=>P$(S$(v$(PM(e,t,n,r))))}}function A$(e){return{...C$(e),...w$(e),...T$(e),...E$(e),...D$(e),...O$(e),...k$(e)}}function j$(e){return{...C$(e),length:()=>ak(e),startPoint:()=>tk(e),endPoint:()=>nk(e),pointAt:t=>rk(e,t),tangentAt:t=>ik(e,t),isClosed:()=>sk(e),sweep(t,n){if(!yE(e))throw Error(`sweep requires a Wire`);let r=v$(Wj(x$(e),$(t),n));return P$(Array.isArray(r)?r[0]:r)}}}function M$(e){return{...C$(e),area:()=>v$(vP(e)),normalAt:t=>$D(e,t),center:()=>eO(e),surfaceType:()=>v$(GD(e)),outerWire:()=>rO(e),innerWires:()=>aO(e),extrude:t=>P$(v$(s$(b$(e),t))),revolve:t=>P$(v$(c$(b$(e),t)))}}function N$(e){return wE(e)?A$(e):bE(e)?M$(e):vE(e)||yE(e)?j$(e):C$(e)}function P$(e){return A$(e)}function F$(e){if(e&&typeof e==`object`&&`face`in e&&typeof e.face==`function`&&`_defaultOrigin`in e)return M$(e.face());if(e&&typeof e==`object`&&`wrapped`in e)return bE(e)?M$(e):wE(e)?A$(e):vE(e)||yE(e)?j$(e):C$(e);throw Error(`shape() requires a Sketch or branded shape type`)}var I$=.25,L$=e=>Math.tan(e)-e;function R$(e,t,n,r){let i=e/Math.cos(t),a=n+r*(Math.tan(t)-t);return[i*Math.cos(a),i*Math.sin(a),0]}function z$(e,t,n,r,i){let a=[];for(let o=0;o<=r;o++){let s=.5-.5*Math.cos(o/r*Math.PI);a.push(R$(e,s*t,n,i))}return a}function B$(e){return Math.max(16,Math.round(8*Math.sqrt(e)))}function V$(e,t,n,r,i,a,o){let s=e*t/2,c=s*Math.cos(n),l=t*(1+r),u=t*(1+i-r),d=o?s-t*(1-r):s+l,f=o?s+t*(1+i+r):s-u,p=a/s,m=(Math.PI/2+2*r*Math.tan(n))/e+(o?p:-p),h=o?f:d;return{rPitch:s,rb:c,rTip:d,rRoot:f,alphaPitch:n,halfToothAngle:m,alphaTip:h<=c?0:Math.acos(Math.min(1,c/h)),toothPitch:2*Math.PI/e,isInternal:o}}function H$(e,t,n){if(t===0)return O(e);let r=L$(e)+2*t*Math.tan(e)/n,i,a;if(r>L$(e)?(i=e,a=Math.PI/2-1e-6):(i=1e-4,a=e),r>L$(a)||r<L$(i))return k(F(`GEAR_PA_OUT_OF_RANGE`,`working pressure angle out of range — target inv(αw)=${r.toFixed(4)} not in [${L$(i).toFixed(4)}, ${L$(a).toFixed(4)}]`,void 0,{target:r,invLo:L$(i),invHi:L$(a)}));for(let e=0;e<50;e++){let e=.5*(i+a);L$(e)<r?i=e:a=e}return O(.5*(i+a))}function U$(e,t,n,r,i){return H$(e,t+n,r+i)}function W$(e,t,n,r,i){return H$(e,n-t,i-r)}function G$(e,t,n,r,i){return(e+t)*n*Math.cos(r)/(2*Math.cos(i))}function K$(e,t,n,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(n))return k(F(`GEAR_NON_INTEGER_TEETH`,`tooth counts and planet count must be integers`));if(e<4||t<4||n<2)return k(F(`GEAR_TEETH_TOO_FEW`,`zs ≥ 4, zp ≥ 4, N ≥ 2 required`));if((2*e+2*t)%n!=0)return k(F(`GEAR_ASSEMBLY`,`(2·zs + 2·zp) must be divisible by N — got ${2*e+2*t} mod ${n} = ${(2*e+2*t)%n}`));let i=t+2+2*r,a=(e+t)*Math.sin(Math.PI/n);return a<=i?k(F(`GEAR_PLANET_COLLISION`,`planet tips would collide: (zs+zp)·sin(π/N) = ${a.toFixed(3)} ≤ planet tip = ${i.toFixed(3)}`)):O(void 0)}function q$(e,t,n,r,i,a,o,s){return(Math.sqrt(Math.max(0,e*e-t*t))+Math.sqrt(Math.max(0,n*n-r*r))-i*Math.sin(s))/(Math.PI*a*Math.cos(o))}function J$(e,t,n,r,i,a,o,s){return(Math.sqrt(Math.max(0,e*e-t*t))-Math.sqrt(Math.max(0,n*n-r*r))+i*Math.sin(s))/(Math.PI*a*Math.cos(o))}function Y$(e,t){return 1-e*Math.sin(t)*Math.sin(t)/2}function X$(e,t,n){return Math.max(0,Y$(e,t)-n)}function Z$(e){return e<8?.2:.485-2.88/e}function Q$(e,t,n,r){let i=e*1e3,a=Z$(r);return a<=0||n<=0||t<=0?1/0:2*i/(r*t*t*n*a)}function $$(e,t,n=!1){let r=(1.4+6.5/e)*(20/(t*180/Math.PI))**.15;return n?r*.85:r}function e1(e,t,n,r,i,a=!1){return Q$(e,t,n,r)*$$(r,i,a)}function t1(e){return e/2}function n1(e,t){return e+2*t}function r1(e){return e%2==0?Math.PI/e:0}function i1(e,t,n){return e*(1+t/n)+r1(n)}function a1(e={}){let t=e.moduleSize??3,n=e.sunTeeth??15,r=e.planetTeeth??12,i=e.numPlanets??3,a=(e.pressureAngleDeg??20)*Math.PI/180,o=e.sunShift??0,s=e.planetShift??0,c=K$(n,r,i,s);if(A(c))return c;let l=U$(a,o,s,n,r);if(A(l))return l;let u=G$(n,r,t,a,l.value),d=[];for(let e=0;e<i;e++){let t=e*2*Math.PI/i,a=i1(t,n,r);d.push({rotationDeg:a*180/Math.PI,position:[u*Math.cos(t),u*Math.sin(t),0]})}return O(d)}function o1(e,t,n,r,i){let a=t*e.toothPitch,o=(t+1)%n*e.toothPitch,s=L$(e.alphaPitch),c=a-e.halfToothAngle-s,l=a+e.halfToothAngle+s,u=z$(e.rb,e.alphaTip,c,r,1),d=z$(e.rb,e.alphaTip,l,r,-1).reverse(),f=Fk(u),p=Ik(u),m=Fk(d),h=Ik(d),g=[],_=e=>{i.register(e),g.push(e)},v=e.isInternal?e.rb<e.rRoot:e.rb>e.rRoot;v&&_(zk([e.rRoot*Math.cos(c),e.rRoot*Math.sin(c),0],f));let y=e.rPitch*1e-5,b=Kk(u,{tolerance:y});if(A(b))return b;_(b.value),_(Uk(p,[e.rTip*Math.cos(a),e.rTip*Math.sin(a),0],m));let x=Kk(d,{tolerance:y});if(A(x))return x;_(x.value),v&&_(zk(h,[e.rRoot*Math.cos(l),e.rRoot*Math.sin(l),0]));let S=o-e.halfToothAngle-s,C=.5*(l+S);return S<l&&(C+=Math.PI),_(Uk(v?[e.rRoot*Math.cos(l),e.rRoot*Math.sin(l),0]:h,[e.rRoot*Math.cos(C),e.rRoot*Math.sin(C),0],v?[e.rRoot*Math.cos(S),e.rRoot*Math.sin(S),0]:[e.rb*Math.cos(S),e.rb*Math.sin(S),0])),O(g)}function s1(e){return l1(e,!1)}function c1(e){return l1(e,!0)}function l1(e,t){try{var n=CT();let{teeth:r,moduleSize:i,pressureAngle:a,shift:o,clearance:s,flankThinning:c,samples:l=B$(i)}=e;if(r<4)return k(F(`GEAR_TEETH_TOO_FEW`,`gear needs ≥ 4 teeth, got ${r}`));if(i<=0)return k(F(`GEAR_MODULE_NONPOSITIVE`,`module must be > 0, got ${i}`));let u=V$(r,i,a,o,s,c,t),d=n.u(new FT),f=[];for(let e=0;e<r;e++){let t=o1(u,e,r,l,d);if(A(t))return t;f.push(...t.value)}let p=Yk(f);return A(p)?p:O(p.value)}catch(e){n.e=e}finally{n.d()}}function u1(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=I$,flankThinning:s=0,bore:c=0,samples:l}=e;if(r<=0)return k(F(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));if(l!==void 0&&(!Number.isInteger(l)||l<1))return k(F(`GEAR_SAMPLES_INVALID`,`samples must be a positive integer; got ${String(l)}`));let u=i*Math.PI/180,d=V$(t,n,u,a,o,s,!1);if(c>0&&c>=2*d.rRoot)return k(F(`GEAR_BORE_TOO_LARGE`,`bore diameter ${c.toFixed(2)} ≥ root diameter ${(2*d.rRoot).toFixed(2)} — would erase the gear teeth`));let f=s1({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(A(f))return f;let p=f1(t,u,a);return _1(f.value,r,c,d,p)}function d1(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=I$,flankThinning:s=0,ringWallThickness:c=2*e.moduleSize,samples:l}=e;if(r<=0)return k(F(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));if(c<=0)return k(F(`GEAR_WALL_NONPOSITIVE`,`ringWallThickness must be > 0`));if(l!==void 0&&(!Number.isInteger(l)||l<1))return k(F(`GEAR_SAMPLES_INVALID`,`samples must be a positive integer; got ${String(l)}`));let u=i*Math.PI/180,d=c1({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(A(d))return d;let f=V$(t,n,u,a,o,s,!0),p=g1(f.rPitch+c);return A(p)?p:y1(p.value,d.value,r,f,[])}function f1(e,t,n){let r=X$(e,t,n);return r<=0?[]:[{code:`UNDERCUT_RISK`,severity:`warning`,message:`gear is undercut: increase shift by ${r.toFixed(3)} to avoid (z=${e})`,context:{deficit:r,teeth:e}}]}function p1(e){let t=h1(e);if(A(t))return t;let n=t.value,r=m1(n);if(A(r))return r;let{sun:i,planet:a,ring:o}=r.value,s=C1(n,i,a,o),c=x1(a.solid,n);a.solid.delete();let l=S1(o.solid,n.zr),u=w1(n,s);return O({sun:i.solid,planets:c,ring:l,ringTeeth:n.zr,workingPressureAngle:n.alphaW_sp,centerDistance:n.centerDistance,contactRatio:{sunPlanet:s.crSunPlanet,planetRing:s.crPlanetRing},undercutDeficit:{sun:s.undercutSun,planet:s.undercutPlanet},...s.lewisStress?{lewisStress:s.lewisStress}:{},...s.stressConcentrationFactor?{stressConcentrationFactor:s.stressConcentrationFactor}:{},diagnostics:u})}function m1(e){let t=e.samples===void 0?{}:{samples:e.samples},n={moduleSize:e.moduleSize,thickness:e.thickness,pressureAngleDeg:e.pressureAngleDeg,clearance:e.clearance,flankThinning:e.bHalf,...t},r=u1({...n,teeth:e.sunTeeth,shift:e.sunShift,bore:e.sunBore});if(A(r))return r;let i=u1({...n,teeth:e.planetTeeth,shift:e.planetShift,bore:e.planetBore});if(A(i))return r.value.solid.delete(),i;let a=d1({...n,teeth:e.zr,shift:e.ringShift,ringWallThickness:e.ringWallThickness});return A(a)?(r.value.solid.delete(),i.value.solid.delete(),a):O({sun:r.value,planet:i.value,ring:a.value})}function h1(e){let t=e.moduleSize??3,n=e.sunTeeth??15,r=e.planetTeeth??12,i=e.numPlanets??3,a=e.pressureAngleDeg??20,o=a*Math.PI/180,s=e.sunShift??0,c=e.planetShift??0,l=e.ringShift??0;if(e.thickness<=0)return k(F(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));let u=K$(n,r,i,c);if(A(u))return u;let d=n1(n,r),f=U$(o,s,c,n,r);if(A(f))return f;let p=W$(o,c,l,r,d);if(A(p))return p;let m=G$(n,r,t,o,f.value);return O({moduleSize:t,sunTeeth:n,planetTeeth:r,numPlanets:i,pressureAngleDeg:a,alpha:o,alphaW_sp:f.value,alphaW_pr:p.value,clearance:e.clearance??.25,bHalf:t1(e.backlash??0),sunShift:s,planetShift:c,ringShift:l,ringWallThickness:e.ringWallThickness??2*t,thickness:e.thickness,sunBore:e.sunBore??0,planetBore:e.planetBore??0,...e.appliedTorque===void 0?{}:{appliedTorque:e.appliedTorque},...e.samples===void 0?{}:{samples:e.samples},zr:d,centerDistance:m})}function g1(e){try{var t=CT();let n=Yk([t.u(new FT).register(Bk(e,[0,0,0],[0,0,1]))]);return A(n)?n:O(n.value)}catch(e){t.e=e}finally{t.d()}}function _1(e,t,n,r,i){try{var a=CT();let o=Xk(e);if(A(o))return o;let s=Qj(o.value,[0,0,t]);if(A(s))return s;if(n<=0)return O(b1(s.value,r,i));let c=a.u(new FT),l=v1(n/2);if(A(l))return l;c.register(l.value);let u=Qj(l.value,[0,0,t+1]);if(A(u))return u;c.register(u.value);let d=c.register(IO(u.value,[0,0,-.5])),f=aA(s.value,d);return A(f)?f:O(b1(f.value,r,i))}catch(e){a.e=e}finally{a.d()}}function v1(e){let t=g1(e);return A(t)?t:Xk(t.value)}function y1(e,t,n,r,i){let a=Xk(e,[t]);if(A(a))return a;let o=Qj(a.value,[0,0,n]);return A(o)?o:O(b1(o.value,r,i))}function b1(e,t,n=[]){return{solid:e,diagnostics:n,pitchDiameter:2*t.rPitch,baseDiameter:2*t.rb,tipDiameter:2*t.rTip,rootDiameter:2*t.rRoot}}function x1(e,t){let n=[];try{for(let r=0;r<t.numPlanets;r++){let i=r*2*Math.PI/t.numPlanets,a=LO(e,i1(i,t.sunTeeth,t.planetTeeth)*180/Math.PI);try{let e=[t.centerDistance*Math.cos(i),t.centerDistance*Math.sin(i),0];n.push(IO(a,e))}finally{a.delete()}}return n}catch(e){for(let e of n)e.delete();throw e}}function S1(e,t){let n=r1(t);if(n===0)return e;let r=LO(e,n*180/Math.PI);return e.delete(),r}function C1(e,t,n,r){let i={crSunPlanet:q$(t.tipDiameter/2,t.baseDiameter/2,n.tipDiameter/2,n.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_sp),crPlanetRing:J$(n.tipDiameter/2,n.baseDiameter/2,r.tipDiameter/2,r.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_pr),undercutSun:X$(e.sunTeeth,e.alpha,e.sunShift),undercutPlanet:X$(e.planetTeeth,e.alpha,e.planetShift)};if(e.appliedTorque!==void 0){let t=e.appliedTorque;i.lewisStress={sun:e1(t,e.moduleSize,e.thickness,e.sunTeeth,e.alpha),planet:e1(t*e.planetTeeth/e.sunTeeth,e.moduleSize,e.thickness,e.planetTeeth,e.alpha),ring:e1(t*e.zr/e.sunTeeth,e.moduleSize,e.thickness,e.zr,e.alpha,!0)},i.stressConcentrationFactor={sun:$$(e.sunTeeth,e.alpha),planet:$$(e.planetTeeth,e.alpha),ring:$$(e.zr,e.alpha,!0)}}return i}function w1(e,t){let n=[];t.crSunPlanet<1.2&&n.push({code:`CONTACT_RATIO_LOW_SUN_PLANET`,severity:`warning`,message:`sun-planet contact ratio ${t.crSunPlanet.toFixed(2)} is below 1.2 — may run unevenly`,context:{value:t.crSunPlanet}}),t.crPlanetRing<1.2&&n.push({code:`CONTACT_RATIO_LOW_PLANET_RING`,severity:`warning`,message:`planet-ring contact ratio ${t.crPlanetRing.toFixed(2)} is below 1.2 — may run unevenly`,context:{value:t.crPlanetRing}}),t.undercutSun>0&&n.push({code:`UNDERCUT_RISK_SUN`,severity:`warning`,message:`sun gear is undercut: increase sunShift by ${t.undercutSun.toFixed(3)} to avoid`,context:{deficit:t.undercutSun,sunTeeth:e.sunTeeth}}),t.undercutPlanet>0&&n.push({code:`UNDERCUT_RISK_PLANET`,severity:`warning`,message:`planet gear is undercut: increase planetShift by ${t.undercutPlanet.toFixed(3)} to avoid`,context:{deficit:t.undercutPlanet,planetTeeth:e.planetTeeth}});let r=Math.abs(e.sunShift)+Math.abs(e.planetShift)+Math.abs(e.ringShift);e.appliedTorque!==void 0&&r>.05&&n.push({code:`LEWIS_Y_SHIFT_UNCORRECTED`,severity:`info`,message:`Lewis stress uses unshifted Y(z) and K_f approximations; expect ±5% per 0.1 of profile shift`});let i=e.ringShift-(e.sunShift+2*e.planetShift);return Math.abs(i)>1e-6&&n.push({code:`PLANETARY_SHIFT_KINEMATIC_MISMATCH`,severity:`warning`,message:`ringShift should equal sunShift + 2·planetShift for both meshes to share working PA; off by ${i.toFixed(3)}`,context:{kinematicError:i,sunShift:e.sunShift,planetShift:e.planetShift,ringShift:e.ringShift}}),n}var T1=UJ({addHoles:()=>kM,bezier:()=>gM,box:()=>rM,bsplineApprox:()=>hM,circle:()=>uM,compound:()=>TM,cone:()=>oM,cylinder:()=>iM,ellipse:()=>dM,ellipseArc:()=>mM,ellipsoid:()=>cM,face:()=>bM,fill:()=>Zk,filledFace:()=>xM,helix:()=>fM,line:()=>lM,offsetFace:()=>DM,polygon:()=>CM,polyhedron:()=>nZ,sewShells:()=>OM,solid:()=>EM,sphere:()=>aM,subFace:()=>SM,tangentArc:()=>_M,threePointArc:()=>pM,torus:()=>sM,vertex:()=>wM,wire:()=>vM,wireLoop:()=>yM}),E1=UJ({checkBoolean:()=>oj,convexHull:()=>ZX,cut:()=>FQ,cutAll:()=>lA,cutAllBisect:()=>ZA,fuse:()=>PQ,fuseAll:()=>cA,fuseAllBisect:()=>tj,hull:()=>XX,intersect:()=>RQ,minkowski:()=>tZ,section:()=>zQ,sectionToFace:()=>BQ,slice:()=>HQ,split:()=>VQ}),D1=UJ({chamfer:()=>qQ,draft:()=>ZQ,fillet:()=>KQ,heal:()=>QQ,offset:()=>YQ,shell:()=>JQ,simplify:()=>$Q,thicken:()=>XQ,variableFillet:()=>jj}),O1=UJ({applyMatrix:()=>MQ,clone:()=>jQ,composeTransforms:()=>GO,mirror:()=>kQ,rotate:()=>OQ,scale:()=>AQ,transformCopy:()=>NQ,translate:()=>DQ}),k1=UJ({checkAllInterferences:()=>rQ,checkInterference:()=>nQ,createDistanceQuery:()=>SP,measureArea:()=>vP,measureCurvatureAt:()=>CP,measureCurvatureAtMid:()=>wP,measureDistance:()=>bP,measureDistanceProps:()=>xP,measureLength:()=>yP,measureLinearProps:()=>gP,measureSurfaceProps:()=>hP,measureVolume:()=>_P,measureVolumeProps:()=>mP}),A1=UJ({blueprintToDXF:()=>Eq,exportAssemblySTEP:()=>MM,exportDXF:()=>Tq,exportGlb:()=>fq,exportGltf:()=>dq,exportIGES:()=>Mk,exportOBJ:()=>tq,exportSTEP:()=>Ak,exportSTEPConfigured:()=>lJ,exportSTL:()=>jk,exportThreeMF:()=>Gq,importDXF:()=>cQ,importGLB:()=>TQ,importIGES:()=>fJ,importOBJ:()=>fQ,importSTEP:()=>uJ,importSTL:()=>dJ,importSVG:()=>cJ,importSVGPathD:()=>sJ,importThreeMF:()=>wQ}),j1=UJ({cornerFinder:()=>TI,edgeFinder:()=>YP,faceFinder:()=>QP,getSingleFace:()=>tF,vertexFinder:()=>QJ,wireFinder:()=>eF}),M1=UJ({complexExtrude:()=>Kj,extrude:()=>s$,guidedSweep:()=>Zj,loft:()=>l$,multiSectionSweep:()=>Xj,revolve:()=>c$,roof:()=>TZ,supportExtrude:()=>Gj,surfaceFromGrid:()=>GX,surfaceFromImage:()=>JX,sweep:()=>Wj,twistExtrude:()=>qj}),N1=UJ({circularPattern:()=>PM,linearPattern:()=>NM}),P1=14695981039346656037n,F1=1099511628211n,I1=18446744073709551615n;function L1(){return P1}function R1(e,t){return(e^BigInt(t&255))*F1&I1}function z1(e,t){let n=e;for(let e=0;e<t.length;e++)n=R1(n,t[e]??0);return n}var B1=new TextEncoder;function V1(e,t){return z1(e,B1.encode(t))}var H1=new ArrayBuffer(8),U1=new DataView(H1),W1=new Uint8Array(H1);function G1(e,t){return U1.setFloat64(0,Object.is(t,-0)?0:t),z1(e,W1)}function K1(e,t){let n=e,r=t&I1;for(let e=0;e<8;e++)n=R1(n,Number(r&255n)),r>>=8n;return n}function q1(e,t){let n=e,r=t|0;for(let e=0;e<4;e++)n=R1(n,r&255),r>>>=8;return n}function J1(e,t){return R1(e,+!!t)}function Y1(e){return(e&I1).toString(16).padStart(16,`0`)}var X1=new Set;function Z1(e){return V1(L1(),e)}function Q1(e){return{kind:`NumLit`,value:e,structuralHash:G1(Z1(`NumLit`),e),freeParams:X1}}function $1(e){let t=Z1(`Vec3Lit`);for(let n of e)t=G1(t,n);return{kind:`Vec3Lit`,value:e,structuralHash:t,freeParams:X1}}function e0(e){let t=Z1(`Vec2Lit`);for(let n of e)t=G1(t,n);return{kind:`Vec2Lit`,value:e,structuralHash:t,freeParams:X1}}function t0(e){return{kind:`Param`,name:e,structuralHash:V1(Z1(`Param`),e),freeParams:new Set([e])}}function n0(e,t,n){let r=V1(Z1(`BinOp`),e);return r=K1(r,t.structuralHash),r=K1(r,n.structuralHash),{kind:`BinOp`,op:e,a:t,b:n,structuralHash:r,freeParams:f0(t.freeParams,n.freeParams)}}function r0(e,t){let n=V1(Z1(`UnaryOp`),e);return n=K1(n,t.structuralHash),{kind:`UnaryOp`,op:e,arg:t,structuralHash:n,freeParams:t.freeParams}}function i0(e,t){let n=q1(Z1(`Component`),t);return n=K1(n,e.structuralHash),{kind:`Component`,vec:e,index:t,structuralHash:n,freeParams:e.freeParams}}function a0(e,t){let n=q1(Z1(`BuildVec`),e),r=new Set;for(let e of t){n=K1(n,e.structuralHash);for(let t of e.freeParams)r.add(t)}return{kind:`BuildVec`,dim:e,components:t,structuralHash:n,freeParams:r}}var o0=(e,t)=>n0(`+`,e,t),s0=(e,t)=>n0(`*`,e,t);function c0(e){return typeof e==`number`?Q1(e):e}function l0(e,t){if(!Array.isArray(e))return e;let n=e;return n.every(e=>typeof e==`number`)?t===3?$1([n[0],n[1],n[2]]):e0([n[0],n[1]]):a0(t,n.map(c0))}function u0(e){return l0(e,3)}function d0(e){return l0(e,2)}function f0(e,t){if(e.size===0)return t;if(t.size===0)return e;let n=new Set(e);for(let e of t)n.add(e);return n}function p0(e){return typeof e==`number`}function m0(e,t){return p0(e)?O(e):k(F(N.NULL_SHAPE_INPUT,`${t}: expected number, got ${Array.isArray(e)?`vector(${e.length})`:typeof e}`))}function h0(e,t,n){return Array.isArray(e)&&e.length===t?O(e):k(F(N.NULL_SHAPE_INPUT,`${n}: expected Vec${t}, got ${p0(e)?`number`:`vector(${e.length})`}`))}function g0(e,t){switch(e.kind){case`NumLit`:return O(e.value);case`Vec3Lit`:return O(e.value);case`Vec2Lit`:return O(e.value);case`Param`:{let n=t[e.name];return n===void 0?k(F(N.NULL_SHAPE_INPUT,`unbound param: ${e.name}`)):O(n)}case`BinOp`:return _0(e,t);case`UnaryOp`:return v0(e,t);case`Component`:return y0(e,t);case`BuildVec`:return b0(e,t)}}function _0(e,t){let n=g0(e.a,t);if(!n.ok)return n;let r=g0(e.b,t);if(!r.ok)return r;let i=m0(n.value,`BinOp(${e.op}).a`);if(!i.ok)return i;let a=m0(r.value,`BinOp(${e.op}).b`);if(!a.ok)return a;switch(e.op){case`+`:return O(i.value+a.value);case`-`:return O(i.value-a.value);case`*`:return O(i.value*a.value);case`/`:return a.value===0?k(F(N.NULL_SHAPE_INPUT,`BinOp(/): division by zero`)):O(i.value/a.value)}}function v0(e,t){let n=g0(e.arg,t);if(!n.ok)return n;let r=m0(n.value,`UnaryOp(${e.op})`);if(!r.ok)return r;let i=r.value;switch(e.op){case`neg`:return O(-i);case`sin`:return O(Math.sin(i));case`cos`:return O(Math.cos(i));case`sqrt`:return O(Math.sqrt(i));case`abs`:return O(Math.abs(i))}}function y0(e,t){let n=g0(e.vec,t);if(!n.ok)return n;if(p0(n.value))return k(F(N.NULL_SHAPE_INPUT,`Component: cannot index a scalar`));let r=n.value,i=r[e.index];return i===void 0?k(F(N.NULL_SHAPE_INPUT,`Component: index ${e.index} out of range for Vec${r.length}`)):O(i)}function b0(e,t){if(e.components.length!==e.dim)return k(F(N.NULL_SHAPE_INPUT,`BuildVec(${e.dim}): expected ${e.dim} components, got ${e.components.length}`));let n=[];for(let r of e.components){let e=g0(r,t);if(!e.ok)return e;let i=m0(e.value,`BuildVec.component`);if(!i.ok)return i;n.push(i.value)}return O(e.dim===2?[n[0],n[1]]:[n[0],n[1],n[2]])}function x0(e,t,n){let r=g0(e,t);return r.ok?m0(r.value,n):r}function S0(e,t,n){let r=g0(e,t);if(!r.ok)return r;let i=h0(r.value,3,n);if(!i.ok)return i;let[a,o,s]=i.value;return O([a,o,s])}function C0(e,t){if(t.size===0)return Object.freeze({});let n={};for(let r of t){let t=e[r];t!==void 0&&(n[r]=t)}return Object.freeze(n)}var w0=new Set;function T0(e){return V1(L1(),e)}function E0(e,t){return K1(e,t.structuralHash)}function D0(e,t){return t===void 0?J1(e,!1):E0(J1(e,!0),t)}function O0(e,t){return t===void 0?J1(e,!1):G1(J1(e,!0),t)}function k0(...e){let t=new Set;for(let n of e)if(n)for(let e of n.freeParams)t.add(e);return t.size===0?w0:t}function A0(e,t,n){let r=c0(e),i=c0(t),a=c0(n),o=T0(`Box`);return o=E0(E0(E0(o,r),i),a),{kind:`Box`,x:r,y:i,z:a,structuralHash:o,freeParams:k0(r,i,a)}}function j0(e){let t=c0(e);return{kind:`Sphere`,radius:t,structuralHash:E0(T0(`Sphere`),t),freeParams:t.freeParams}}function M0(e,t){let n=c0(e),r=c0(t);return{kind:`Cylinder`,radius:n,height:r,structuralHash:E0(E0(T0(`Cylinder`),n),r),freeParams:k0(n,r)}}function N0(e,t,n){let r=c0(e),i=c0(t),a=c0(n),o=T0(`Cone`);return o=E0(E0(E0(o,r),i),a),{kind:`Cone`,radius1:r,radius2:i,height:a,structuralHash:o,freeParams:k0(r,i,a)}}function P0(e,t){let n=c0(e),r=c0(t);return{kind:`Torus`,majorRadius:n,minorRadius:r,structuralHash:E0(E0(T0(`Torus`),n),r),freeParams:k0(n,r)}}function F0(e){let t=e.map(u0),n=q1(T0(`Polygon`),t.length);for(let e of t)n=E0(n,e);return{kind:`Polygon`,points:t,structuralHash:n,freeParams:k0(...t)}}function I0(e){let t=c0(e);return{kind:`Circle`,radius:t,structuralHash:E0(T0(`Circle`),t),freeParams:t.freeParams}}function L0(e,t){let n=u0(e),r=u0(t);return{kind:`Line`,from:n,to:r,structuralHash:E0(E0(T0(`Line`),n),r),freeParams:k0(n,r)}}function R0(e){let t=u0(e);return{kind:`Vertex`,point:t,structuralHash:E0(T0(`Vertex`),t),freeParams:t.freeParams}}function z0(e){return{kind:`Empty`,output:e,structuralHash:V1(T0(`Empty`),e),freeParams:w0}}function B0(){return z0(`Solid`)}function V0(){return z0(`Face`)}function H0(){return z0(`Wire`)}function U0(e,t,n,r){return O0(E0(E0(T0(e),t),n),r)}function W0(e,t,n){return{kind:`Fuse`,a:e,b:t,tolerance:n,structuralHash:U0(`Fuse`,e,t,n),freeParams:k0(e,t)}}function G0(e,t,n){return{kind:`Cut`,a:e,b:t,tolerance:n,structuralHash:U0(`Cut`,e,t,n),freeParams:k0(e,t)}}function K0(e,t,n){return{kind:`Intersect`,a:e,b:t,tolerance:n,structuralHash:U0(`Intersect`,e,t,n),freeParams:k0(e,t)}}function q0(e,t){let n=q1(T0(`FuseAll`),e.length);for(let t of e)n=E0(n,t);return n=O0(n,t),{kind:`FuseAll`,shapes:e,tolerance:t,structuralHash:n,freeParams:k0(...e)}}function J0(e,t,n){let r=E0(T0(`CutAll`),e);r=q1(r,t.length);for(let e of t)r=E0(r,e);return r=O0(r,n),{kind:`CutAll`,base:e,tools:t,tolerance:n,structuralHash:r,freeParams:k0(e,...t)}}function Y0(e){return e===void 0?void 0:u0(e)}function X0(e,t){let n=u0(t);return{kind:`Translate`,target:e,vector:n,structuralHash:E0(E0(T0(`Translate`),e),n),freeParams:k0(e,n)}}function Z0(e,t,n){let r=c0(t),i=Y0(n?.axis),a=Y0(n?.at),o=E0(E0(T0(`Rotate`),e),r);return o=D0(o,i),o=D0(o,a),{kind:`Rotate`,target:e,angle:r,axis:i,at:a,structuralHash:o,freeParams:k0(e,r,i,a)}}function Q0(e,t,n){let r=c0(t),i=Y0(n?.center),a=E0(E0(T0(`Scale`),e),r);return a=D0(a,i),{kind:`Scale`,target:e,factor:r,center:i,structuralHash:a,freeParams:k0(e,r,i)}}function $0(e,t){let n=Y0(t?.normal),r=Y0(t?.at),i=E0(T0(`Mirror`),e);return i=D0(i,n),i=D0(i,r),{kind:`Mirror`,target:e,normal:n,at:r,structuralHash:i,freeParams:k0(e,n,r)}}function e2(e){let t=q1(T0(`Compound`),e.length);for(let n of e)t=E0(t,n);return{kind:`Compound`,children:e,structuralHash:t,freeParams:k0(...e)}}function t2(e){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:return`Solid`;case`Polygon`:return`Face`;case`Circle`:case`Line`:return`Edge`;case`Vertex`:return`Vertex`;case`Empty`:return e.output;case`Fuse`:case`Cut`:case`Intersect`:return t2(e.a);case`FuseAll`:return e.shapes[0]?t2(e.shapes[0]):`Solid`;case`CutAll`:return t2(e.base);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return t2(e.target);case`Compound`:return`Compound`}}function n2(e,t){let n=x0(e.x,t.env,`Box.x`);if(!n.ok)return n;let r=x0(e.y,t.env,`Box.y`);if(!r.ok)return r;let i=x0(e.z,t.env,`Box.z`);return i.ok?O(rM(n.value,r.value,i.value)):i}function r2(e,t){let n=x0(e.radius,t.env,`Sphere.radius`);return n.ok?O(aM(n.value)):n}function i2(e,t){let n=x0(e.radius,t.env,`Cylinder.radius`);if(!n.ok)return n;let r=x0(e.height,t.env,`Cylinder.height`);return r.ok?O(iM(n.value,r.value)):r}function a2(e,t){let n=x0(e.radius1,t.env,`Cone.radius1`);if(!n.ok)return n;let r=x0(e.radius2,t.env,`Cone.radius2`);if(!r.ok)return r;let i=x0(e.height,t.env,`Cone.height`);return i.ok?O(oM(n.value,r.value,i.value)):i}function o2(e,t){let n=x0(e.majorRadius,t.env,`Torus.majorRadius`);if(!n.ok)return n;let r=x0(e.minorRadius,t.env,`Torus.minorRadius`);return r.ok?O(sM(n.value,r.value)):r}function s2(e,t){let n=[];for(let r of e.points){let e=S0(r,t.env,`Polygon.point`);if(!e.ok)return e;n.push(e.value)}return CM(n)}function c2(e,t){let n=x0(e.radius,t.env,`Circle.radius`);return n.ok?O(uM(n.value)):n}function l2(e,t){let n=S0(e.from,t.env,`Line.from`);if(!n.ok)return n;let r=S0(e.to,t.env,`Line.to`);return r.ok?O(lM(n.value,r.value)):r}function u2(e,t){let n=S0(e.point,t.env,`Vertex.point`);return n.ok?O(wM(n.value)):n}function d2(e){return k(I(N.NULL_SHAPE_INPUT,`${e}: empty result has no kernel representation`))}function f2(e,t,n){let r=e.evalNode(t);return r.ok?wE(r.value)?O(r.value):k(co(N.CSG_NOT_3D,`${n}: operand did not produce a 3D shape`)):r}function p2(e,t){return{unsafe:!0,fuzzyValue:e.tolerance??t.tolerance}}function m2(e,t){if(e.a.kind===`Empty`)return t.evalNode(e.b);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=f2(t,e.a,`Fuse.a`);if(!n.ok)return n;let r=f2(t,e.b,`Fuse.b`);return r.ok?iA(n.value,r.value,p2(e,t)):r}function h2(e,t){if(e.a.kind===`Empty`)return d2(`Cut`);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=f2(t,e.a,`Cut.a`);if(!n.ok)return n;let r=f2(t,e.b,`Cut.b`);return r.ok?aA(n.value,r.value,p2(e,t)):r}function g2(e,t){if(e.a.kind===`Empty`||e.b.kind===`Empty`)return d2(`Intersect`);let n=f2(t,e.a,`Intersect.a`);if(!n.ok)return n;let r=f2(t,e.b,`Intersect.b`);return r.ok?oA(n.value,r.value,p2(e,t)):r}function _2(e,t,n){let r=[];for(let i of t){let t=f2(e,i,n);if(!t.ok)return t;r.push(t.value)}return O(r)}function v2(e,t){let n=e.shapes.filter(e=>e.kind!==`Empty`);if(n.length===0)return d2(`FuseAll`);if(n.length===1&&n[0])return t.evalNode(n[0]);let r=_2(t,n,`FuseAll.operand`);return r.ok?cA(r.value,p2(e,t)):r}function y2(e,t){if(e.base.kind===`Empty`)return d2(`CutAll`);let n=e.tools.filter(e=>e.kind!==`Empty`);if(n.length===0)return t.evalNode(e.base);let r=f2(t,e.base,`CutAll.base`);if(!r.ok)return r;let i=_2(t,n,`CutAll.tool`);return i.ok?lA(r.value,i.value,p2(e,t)):i}function b2(e){return k(I(N.NULL_SHAPE_INPUT,`${e}: cannot transform an Empty node`))}function x2(e,t,n,r){return e?S0(e,t,n):O(r)}function S2(e,t){if(e.target.kind===`Empty`)return b2(`Translate`);let n=S0(e.vector,t.env,`Translate.vector`);if(!n.ok)return n;let r=t.evalNode(e.target);return r.ok?O(IO(r.value,n.value)):r}function C2(e,t){if(e.target.kind===`Empty`)return b2(`Rotate`);let n=x0(e.angle,t.env,`Rotate.angle`);if(!n.ok)return n;let r=x2(e.axis,t.env,`Rotate.axis`,[0,0,1]);if(!r.ok)return r;let i=x2(e.at,t.env,`Rotate.at`,[0,0,0]);if(!i.ok)return i;let a=t.evalNode(e.target);return a.ok?O(LO(a.value,n.value,i.value,r.value)):a}function w2(e,t){if(e.target.kind===`Empty`)return b2(`Scale`);let n=x0(e.factor,t.env,`Scale.factor`);if(!n.ok)return n;let r=x2(e.center,t.env,`Scale.center`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?O(zO(i.value,n.value,r.value)):i}function T2(e,t){if(e.target.kind===`Empty`)return b2(`Mirror`);let n=x2(e.normal,t.env,`Mirror.normal`,[1,0,0]);if(!n.ok)return n;let r=x2(e.at,t.env,`Mirror.at`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?O(RO(i.value,n.value,r.value)):i}function E2(e,t){let n=e.children.filter(e=>e.kind!==`Empty`);if(n.length===0)return k(I(N.NULL_SHAPE_INPUT,`Compound: cannot materialize a compound with zero non-empty children`));let r=[];for(let e of n){let n=t.evalNode(e);if(!n.ok)return n;r.push(n.value)}return O(TM(r))}function D2(){return k(I(N.NULL_SHAPE_INPUT,`Empty: cannot materialize an Empty node directly — only valid as boolean/transform operand`))}function O2(e,t){switch(e.kind){case`Box`:return n2(e,t);case`Sphere`:return r2(e,t);case`Cylinder`:return i2(e,t);case`Cone`:return a2(e,t);case`Torus`:return o2(e,t);case`Polygon`:return s2(e,t);case`Circle`:return c2(e,t);case`Line`:return l2(e,t);case`Vertex`:return u2(e,t);case`Empty`:return D2();case`Fuse`:return m2(e,t);case`Cut`:return h2(e,t);case`Intersect`:return g2(e,t);case`FuseAll`:return v2(e,t);case`CutAll`:return y2(e,t);case`Translate`:return S2(e,t);case`Rotate`:return C2(e,t);case`Scale`:return w2(e,t);case`Mirror`:return T2(e,t);case`Compound`:return E2(e,t)}}function k2(e,t){if(typeof t==`number`)return G1(J1(e,!1),t);let n=J1(e,!0);n=q1(n,t.length);for(let e of t)n=G1(n,e);return n}function A2(e,t){if(t.size===0)return L1();let n=C0(e,t),r=Object.keys(n).sort(),i=L1();for(let e of r){i=V1(i,e);let t=n[e];t!==void 0&&(i=k2(i,t))}return i}function j2(e,t,n,r){let i=A2(t,e.freeParams),a=r===void 0?`d`:G1(L1(),r).toString(16);return`${Y1(e.structuralHash)}:${n}:${Y1(i)}:${a}`}var M2=class{scope=new FT;cache=new Map;registered=new WeakSet;kernelId;defaultTolerance;onStep;hits=0;misses=0;constructor(e={}){this.kernelId=e.kernel??fT()??`unregistered`,this.defaultTolerance=e.tolerance,e.onStep&&(this.onStep=e.onStep)}evaluate(e,t={}){return pT(this.kernelId,()=>this.evaluateInner(e,t))}evaluateInner(e,t){let n=j2(e,t,this.kernelId,this.defaultTolerance),r=this.cache.get(n);if(r!==void 0)return this.hits++,this.onStep?.({node:e,cacheKey:n,cacheHit:!0}),O(r);this.misses++;let i=O2(e,{env:t,tolerance:this.defaultTolerance,evalNode:e=>this.evaluateInner(e,t)});return i.ok?(this.registered.has(i.value)||(this.scope.register(i.value),this.registered.add(i.value)),this.cache.set(n,i.value),this.onStep?.({node:e,cacheKey:n,cacheHit:!1}),i):i}cacheStats(){return{hits:this.hits,misses:this.misses,entries:this.cache.size}}resetStats(){this.hits=0,this.misses=0}[Symbol.dispose](){this.scope[Symbol.dispose](),this.cache.clear()}};function N2(e,t){try{var n=CT();let r=t(n.u(new M2(e)));if(r instanceof Promise)throw Error(`withEvaluator() callback returned a Promise. Async code must construct an Evaluator directly and dispose it manually — borrowed shapes would otherwise be freed before the Promise resolves.`);return r}catch(e){n.e=e}finally{n.d()}}function P2(e){return{csgVersion:1,root:B2(e)}}function F2(e){switch(e.kind){case`NumLit`:return{kind:`NumLit`,value:e.value};case`Vec3Lit`:return{kind:`Vec3Lit`,value:[e.value[0],e.value[1],e.value[2]]};case`Vec2Lit`:return{kind:`Vec2Lit`,value:[e.value[0],e.value[1]]};case`Param`:return{kind:`Param`,name:e.name};case`BinOp`:return{kind:`BinOp`,op:e.op,a:F2(e.a),b:F2(e.b)};case`UnaryOp`:return{kind:`UnaryOp`,op:e.op,arg:F2(e.arg)};case`Component`:return{kind:`Component`,vec:F2(e.vec),index:e.index};case`BuildVec`:return{kind:`BuildVec`,dim:e.dim,components:e.components.map(F2)}}}function I2(e){switch(e.kind){case`Box`:return{kind:`Box`,x:F2(e.x),y:F2(e.y),z:F2(e.z)};case`Sphere`:return{kind:`Sphere`,radius:F2(e.radius)};case`Cylinder`:return{kind:`Cylinder`,radius:F2(e.radius),height:F2(e.height)};case`Cone`:return{kind:`Cone`,radius1:F2(e.radius1),radius2:F2(e.radius2),height:F2(e.height)};case`Torus`:return{kind:`Torus`,majorRadius:F2(e.majorRadius),minorRadius:F2(e.minorRadius)};case`Polygon`:return{kind:`Polygon`,points:e.points.map(F2)};case`Circle`:return{kind:`Circle`,radius:F2(e.radius)};case`Line`:return{kind:`Line`,from:F2(e.from),to:F2(e.to)};case`Vertex`:return{kind:`Vertex`,point:F2(e.point)};case`Empty`:return{kind:`Empty`,output:e.output};default:return}}function L2(e){switch(e.kind){case`Fuse`:case`Cut`:case`Intersect`:return{kind:e.kind,a:B2(e.a),b:B2(e.b),tolerance:e.tolerance};case`FuseAll`:return{kind:`FuseAll`,shapes:e.shapes.map(B2),tolerance:e.tolerance};case`CutAll`:return{kind:`CutAll`,base:B2(e.base),tools:e.tools.map(B2),tolerance:e.tolerance};default:return}}function R2(e){return e?F2(e):void 0}function z2(e){switch(e.kind){case`Translate`:return{kind:`Translate`,target:B2(e.target),vector:F2(e.vector)};case`Rotate`:return{kind:`Rotate`,target:B2(e.target),angle:F2(e.angle),axis:R2(e.axis),at:R2(e.at)};case`Scale`:return{kind:`Scale`,target:B2(e.target),factor:F2(e.factor),center:R2(e.center)};case`Mirror`:return{kind:`Mirror`,target:B2(e.target),normal:R2(e.normal),at:R2(e.at)};default:return}}function B2(e){return e.kind===`Compound`?{kind:`Compound`,children:e.children.map(B2)}:I2(e)??L2(e)??z2(e)}function V2(e){return k(F(N.NULL_SHAPE_INPUT,`csg.fromJSON: ${e}`))}function H2(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function U2(e){return typeof e==`number`&&Number.isFinite(e)}function W2(e){return typeof e==`string`}function G2(e,t){if(!Array.isArray(e)||e.length!==3)return V2(`${t}: expected Vec3 array`);let[n,r,i]=e;return!U2(n)||!U2(r)||!U2(i)?V2(`${t}: Vec3 contains non-number`):O([n,r,i])}function K2(e,t){if(!Array.isArray(e)||e.length!==2)return V2(`${t}: expected Vec2 array`);let[n,r]=e;return!U2(n)||!U2(r)?V2(`${t}: Vec2 contains non-number`):O([n,r])}function q2(e){if(!H2(e))return V2(`input is not an object`);let t=e.csgVersion;if(t!==1)return V2(`unsupported csgVersion ${String(t)} (expected 1)`);let n=e.root;return t4(n)}function J2(e){if(!H2(e))return V2(`expression: not an object`);let t=e.kind;switch(t){case`NumLit`:return U2(e.value)?O(Q1(e.value)):V2(`NumLit.value`);case`Vec3Lit`:{let t=G2(e.value,`Vec3Lit.value`);return t.ok?O($1(t.value)):t}case`Vec2Lit`:{let t=K2(e.value,`Vec2Lit.value`);return t.ok?O(e0(t.value)):t}case`Param`:return W2(e.name)?O(t0(e.name)):V2(`Param.name`);case`BinOp`:return Y2(e);case`UnaryOp`:return X2(e);case`Component`:return Z2(e);case`BuildVec`:return Q2(e);default:return V2(`unknown expression kind: ${String(t)}`)}}function Y2(e){let t=e.op;if(t!==`+`&&t!==`-`&&t!==`*`&&t!==`/`)return V2(`BinOp.op: ${String(t)}`);let n=J2(e.a);if(!n.ok)return n;let r=J2(e.b);return r.ok?O(n0(t,n.value,r.value)):r}function X2(e){let t=e.op;if(!W2(t)||![`neg`,`sin`,`cos`,`sqrt`,`abs`].includes(t))return V2(`UnaryOp.op: ${String(t)}`);let n=J2(e.arg);return n.ok?O(r0(t,n.value)):n}function Z2(e){let t=e.index;if(t!==0&&t!==1&&t!==2)return V2(`Component.index: ${String(t)}`);let n=J2(e.vec);return n.ok?O(i0(n.value,t)):n}function Q2(e){let t=e.dim;if(t!==2&&t!==3)return V2(`BuildVec.dim: ${String(t)}`);let n=e.components;if(!Array.isArray(n))return V2(`BuildVec.components: not array`);if(n.length!==t)return V2(`BuildVec.components: expected ${t} components, got ${n.length}`);let r=[];for(let e of n){let t=J2(e);if(!t.ok)return t;r.push(t.value)}return O(a0(t,r))}function $2(e,t){if(!Array.isArray(e))return V2(`${t}: not array`);let n=[];for(let t of e){let e=t4(t);if(!e.ok)return e;n.push(e.value)}return O(n)}function e4(e){let t=e.tolerance;return t==null?O(void 0):U2(t)?O(t):V2(`tolerance: not a finite number`)}function t4(e){if(!H2(e))return V2(`node: not an object`);let t=e.kind;switch(t){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:return r4(t,e);case`Fuse`:case`Cut`:case`Intersect`:return d4(t,e);case`FuseAll`:case`CutAll`:return f4(t,e);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return p4(t,e);case`Compound`:return y4(e);default:return V2(`unknown node kind: ${String(t)}`)}}function n4(e,t,n){let r=J2(e[t]);return r.ok?O(n(r.value)):r}function r4(e,t){switch(e){case`Box`:return i4(t);case`Sphere`:return n4(t,`radius`,j0);case`Cylinder`:return a4(t);case`Cone`:return o4(t);case`Torus`:return s4(t);case`Polygon`:return c4(t);case`Circle`:return n4(t,`radius`,I0);case`Line`:return l4(t);case`Vertex`:return n4(t,`point`,R0);case`Empty`:return u4(t)}return V2(`unhandled primitive: ${e}`)}function i4(e){let t=J2(e.x);if(!t.ok)return t;let n=J2(e.y);if(!n.ok)return n;let r=J2(e.z);return r.ok?O(A0(t.value,n.value,r.value)):r}function a4(e){let t=J2(e.radius);if(!t.ok)return t;let n=J2(e.height);return n.ok?O(M0(t.value,n.value)):n}function o4(e){let t=J2(e.radius1);if(!t.ok)return t;let n=J2(e.radius2);if(!n.ok)return n;let r=J2(e.height);return r.ok?O(N0(t.value,n.value,r.value)):r}function s4(e){let t=J2(e.majorRadius);if(!t.ok)return t;let n=J2(e.minorRadius);return n.ok?O(P0(t.value,n.value)):n}function c4(e){let t=e.points;if(!Array.isArray(t))return V2(`Polygon.points: not array`);let n=[];for(let e of t){let t=J2(e);if(!t.ok)return t;n.push(t.value)}return O(F0(n))}function l4(e){let t=J2(e.from);if(!t.ok)return t;let n=J2(e.to);return n.ok?O(L0(t.value,n.value)):n}function u4(e){let t=e.output;switch(t){case`Solid`:return O(B0());case`Face`:return O(V0());case`Wire`:return O(H0());default:return V2(`Empty.output: ${String(t)}`)}}function d4(e,t){let n=t4(t.a);if(!n.ok)return n;let r=t4(t.b);if(!r.ok)return r;let i=e4(t);if(!i.ok)return i;switch(e){case`Fuse`:return O(W0(n.value,r.value,i.value));case`Cut`:return O(G0(n.value,r.value,i.value));case`Intersect`:return O(K0(n.value,r.value,i.value))}}function f4(e,t){let n=e4(t);if(!n.ok)return n;if(e===`FuseAll`){let e=$2(t.shapes,`FuseAll.shapes`);return e.ok?O(q0(e.value,n.value)):e}let r=t4(t.base);if(!r.ok)return r;let i=$2(t.tools,`CutAll.tools`);return i.ok?O(J0(r.value,i.value,n.value)):i}function p4(e,t){let n=t4(t.target);if(!n.ok)return n;switch(e){case`Translate`:return m4(t,n.value);case`Rotate`:return g4(t,n.value);case`Scale`:return _4(t,n.value);case`Mirror`:return v4(t,n.value)}}function m4(e,t){let n=J2(e.vector);return n.ok?O(X0(t,n.value)):n}function h4(e,t){if(e[t]===void 0)return O(void 0);let n=J2(e[t]);return n.ok?O(n.value):n}function g4(e,t){let n=J2(e.angle);if(!n.ok)return n;let r=h4(e,`axis`);if(!r.ok)return r;let i=h4(e,`at`);return i.ok?O(Z0(t,n.value,{axis:r.value,at:i.value})):i}function _4(e,t){let n=J2(e.factor);if(!n.ok)return n;let r=h4(e,`center`);return r.ok?O(Q0(t,n.value,{center:r.value})):r}function v4(e,t){let n=h4(e,`normal`);if(!n.ok)return n;let r=h4(e,`at`);return r.ok?O($0(t,{normal:n.value,at:r.value})):r}function y4(e){let t=$2(e.children,`Compound.children`);return t.ok?O(e2(t.value)):t}function b4(e){return C4(e)}function x4(e){switch(e.kind){case`NumLit`:case`Vec3Lit`:case`Vec2Lit`:case`Param`:return e;case`BinOp`:{let t=x4(e.a),n=x4(e.b);if(t.kind===`NumLit`&&n.kind===`NumLit`)switch(e.op){case`+`:return Q1(t.value+n.value);case`-`:return Q1(t.value-n.value);case`*`:return Q1(t.value*n.value);case`/`:return Q1(t.value/n.value)}return t!==e.a||n!==e.b?n0(e.op,t,n):e}case`UnaryOp`:{let t=x4(e.arg);if(t.kind===`NumLit`){let n=t.value;switch(e.op){case`neg`:return Q1(-n);case`sin`:return Q1(Math.sin(n));case`cos`:return Q1(Math.cos(n));case`sqrt`:return Q1(Math.sqrt(n));case`abs`:return Q1(Math.abs(n))}}return t===e.arg?e:r0(e.op,t)}case`Component`:{let t=x4(e.vec);return t.kind===`Vec3Lit`||t.kind===`Vec2Lit`&&(e.index===0||e.index===1)?Q1(t.value[e.index]):t===e.vec?e:i0(t,e.index)}case`BuildVec`:{let t=e.components.map(x4);return S4(e.dim,t)||(t.some((t,n)=>t!==e.components[n])?a0(e.dim,t):e)}}}function S4(e,t){if(t.length!==e)return;let n=[];for(let e of t){if(e.kind!==`NumLit`)return;n.push(e.value)}return e===2?e0([n[0],n[1]]):$1([n[0],n[1],n[2]])}function C4(e){switch(e.kind){case`Box`:return A0(x4(e.x),x4(e.y),x4(e.z));case`Sphere`:return j0(x4(e.radius));case`Cylinder`:return M0(x4(e.radius),x4(e.height));case`Cone`:return N0(x4(e.radius1),x4(e.radius2),x4(e.height));case`Torus`:return P0(x4(e.majorRadius),x4(e.minorRadius));case`Polygon`:return F0(e.points.map(x4));case`Circle`:return I0(x4(e.radius));case`Line`:return L0(x4(e.from),x4(e.to));case`Vertex`:return R0(x4(e.point));case`Empty`:return e;case`Fuse`:return w4(e.a,e.b,e.tolerance);case`Cut`:return T4(e.a,e.b,e.tolerance);case`Intersect`:return E4(e.a,e.b,e.tolerance);case`FuseAll`:return D4(e.shapes,e.tolerance);case`CutAll`:return O4(e.base,e.tools,e.tolerance);case`Translate`:return k4(e.target,e.vector);case`Rotate`:return Z0(C4(e.target),x4(e.angle),{axis:e.axis?x4(e.axis):void 0,at:e.at?x4(e.at):void 0});case`Scale`:return Q0(C4(e.target),x4(e.factor),{center:e.center?x4(e.center):void 0});case`Mirror`:return $0(C4(e.target),{normal:e.normal?x4(e.normal):void 0,at:e.at?x4(e.at):void 0});case`Compound`:return e2(e.children.map(C4).filter(e=>e.kind!==`Empty`))}}function w4(e,t,n){let r=C4(e),i=C4(t);return r.kind===`Empty`?i:i.kind===`Empty`?r:W0(r,i,n)}function T4(e,t,n){let r=C4(e),i=C4(t);return i.kind===`Empty`||r.kind===`Empty`?r:G0(r,i,n)}function E4(e,t,n){let r=C4(e),i=C4(t);return r.kind===`Empty`?r:i.kind===`Empty`?i:K0(r,i,n)}function D4(e,t){let n=e.map(C4).filter(e=>e.kind!==`Empty`);return n.length===0?B0():n.length===1?n[0]:q0(n,t)}function O4(e,t,n){let r=C4(e);if(r.kind===`Empty`)return r;let i=t.map(C4).filter(e=>e.kind!==`Empty`);return i.length===0?r:J0(r,i,n)}function k4(e,t){let n=C4(e),r=x4(t);if(r.kind!==`Vec3Lit`)return X0(n,r);let[i,a,o]=r.value;if(i===0&&a===0&&o===0)return n;if(n.kind===`Translate`){let e=x4(n.vector);if(e.kind===`Vec3Lit`)return X0(n.target,[e.value[0]+i,e.value[1]+a,e.value[2]+o])}return X0(n,r)}function A4(e,t,n){return j4(e,t,n)}function j4(e,t,n){return t(e)?n:M4(e,t,n)}function M4(e,t,n){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:return e;case`Fuse`:return W0(j4(e.a,t,n),j4(e.b,t,n),e.tolerance);case`Cut`:return G0(j4(e.a,t,n),j4(e.b,t,n),e.tolerance);case`Intersect`:return K0(j4(e.a,t,n),j4(e.b,t,n),e.tolerance);case`FuseAll`:return q0(e.shapes.map(e=>j4(e,t,n)),e.tolerance);case`CutAll`:return J0(j4(e.base,t,n),e.tools.map(e=>j4(e,t,n)),e.tolerance);case`Translate`:return X0(j4(e.target,t,n),e.vector);case`Rotate`:return Z0(j4(e.target,t,n),e.angle,{axis:e.axis,at:e.at});case`Scale`:return Q0(j4(e.target,t,n),e.factor,{center:e.center});case`Mirror`:return $0(j4(e.target,t,n),{normal:e.normal,at:e.at});case`Compound`:return e2(e.children.map(e=>j4(e,t,n)))}}function N4(e,t){t(e);for(let n of P4(e))N4(n,t)}function P4(e){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:return[];case`Fuse`:case`Cut`:case`Intersect`:return[e.a,e.b];case`FuseAll`:return e.shapes;case`CutAll`:return[e.base,...e.tools];case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return[e.target];case`Compound`:return e.children}}function F4(e){let t=0;return N4(e,()=>{t++}),t}var I4=UJ({CSG_VERSION:()=>1,Evaluator:()=>M2,add:()=>o0,asScalarExpr:()=>c0,asVec2Expr:()=>d0,asVec3Expr:()=>u0,binOp:()=>n0,box:()=>A0,buildVec:()=>a0,circle:()=>I0,component:()=>i0,compound:()=>e2,cone:()=>N0,cut:()=>G0,cutAll:()=>J0,cylinder:()=>M0,emptyFace:()=>V0,emptySolid:()=>B0,emptyWire:()=>H0,foldExpr:()=>x4,forEachNode:()=>N4,fromJSON:()=>q2,fuse:()=>W0,fuseAll:()=>q0,intersect:()=>K0,line:()=>L0,mirror:()=>$0,mul:()=>s0,nodeCount:()=>F4,numLit:()=>Q1,optimize:()=>b4,outputKindOf:()=>t2,param:()=>t0,polygon:()=>F0,replaceNode:()=>A4,rotate:()=>Z0,scale:()=>Q0,sphere:()=>j0,toJSON:()=>P2,torus:()=>P0,translate:()=>X0,unaryOp:()=>r0,vec2Lit:()=>e0,vec3Lit:()=>$1,vertex:()=>R0,withEvaluator:()=>N2});export{yI as BaseSketcher2d,bI as BlueprintSketcher,no as BrepBugError,N as BrepErrorCode,_$ as BrepWrapperError,Ty as BrepkitAdapter,YW as CompoundSketch,i as DEFAULT_CAPABILITIES,iD as DEG2RAD,FT as DisposalScope,r as EXACT_BREP_CAPABILITIES,OG as FaceSketcher,G as HASH_CODE_MAX,Ma as OK,ja as OcctWasmAdapter,aD as RAD2DEG,dG as Sketch,DG as Sketcher,fG as Sketches,IM as addChild,kM as addHoles,pN as addJoint,eQ as addMate,JN as addStep,GA as adjacentFaces,Va as all,Ia as andThen,KJ as applyGlue,MQ as applyMatrix,pk as approximateCurve,GT as as2D,WT as as3D,ID as asTopo,bJ as assignRoles,Lj as autoHeal,gM as bezier,Eq as blueprintToDXF,bA as booleanPipeline,E1 as booleans,m$ as boss,rM as box,hM as bsplineApprox,M as bug,wG as cameraFromPlane,CG as cameraLookAt,_J as captureHint,VD as cast,W as castShape,EE as castShape3D,qQ as chamfer,LA as chamferDistAngleShape,hj as chamferWithEvolution,rQ as checkAllInterferences,oj as checkBoolean,nQ as checkInterference,uM as circle,PM as circularPattern,nO as classifyPointOnFace,Ck as clearMeshCache,jQ as clone,eE as closedWire,Qa as collect,HM as collectShapes,kO as colorFaces,OO as colorShape,Kj as complexExtrude,GO as composeTransforms,TM as compound,cG as compoundSketchExtrude,oG as compoundSketchFace,uG as compoundSketchLoft,lG as compoundSketchRevolve,I as computationError,_Z as computeStraightSkeleton,oM as cone,M1 as construction,ZX as convexHull,TI as cornerFinder,VM as countNodes,jM as createAssembly,FM as createAssemblyNode,BK as createBlueprint,SG as createCamera,gE as createCompound,VK as createCompoundBlueprint,SP as createDistanceQuery,uE as createEdge,fE as createFace,NT as createHandle,qN as createHistory,PT as createKernelHandle,wk as createMeshCache,kD as createNamedPlane,zJ as createOperationRegistry,DD as createPlane,xJ as createRef,tP as createRegistry,pE as createShell,mE as createSolid,jJ as createTaskQueue,lE as createVertex,dE as createWire,RJ as createWorkerClient,VJ as createWorkerHandler,I4 as csg,vo as currentQuality,MK as curve2dBoundingBox,zK as curve2dDistanceFrom,NK as curve2dFirstPoint,RK as curve2dIsOnCurve,PK as curve2dLastPoint,IK as curve2dParameter,FK as curve2dSplitAt,LK as curve2dTangentAt,ok as curveAxis,nk as curveEndPoint,sk as curveIsClosed,ck as curveIsPeriodic,ak as curveLength,lk as curvePeriod,rk as curvePointAt,tk as curveStartPoint,ik as curveTangentAt,FQ as cut,dL as cut2D,LQ as cutAll,ZA as cutAllBisect,eL as cutBlueprints,fj as cutWithEvolution,iM as cylinder,oN as cylindricalJoint,gJ as defaultScorer,NJ as dequeueTask,n$ as describe,aK as deserializeDrawing,sP as deserializeHistory,UD as deserializeShape,BD as downcast,ZQ as draft,sK as draw,fK as drawCircle,pK as drawEllipse,bK as drawFaceOutline,_K as drawParametricFunction,gK as drawPointsInterpolation,mK as drawPolysides,yK as drawProjection,lK as drawRectangle,cK as drawRoundedRectangle,uK as drawSingleCircle,dK as drawSingleEllipse,hK as drawText,EK as drawingChamfer,CK as drawingCut,TK as drawingFillet,SK as drawingFuse,wK as drawingIntersect,xK as drawingToSketchOnPlane,f$ as drill,YP as edgeFinder,HA as edgesOfFace,dM as ellipse,mM as ellipseArc,cM as ellipsoid,MJ as enqueueTask,k as err,MM as exportAssemblySTEP,Tq as exportDXF,fq as exportGlb,dq as exportGltf,Mk as exportIGES,tq as exportOBJ,Ak as exportSTEP,lJ as exportSTEPConfigured,jk as exportSTL,Gq as exportThreeMF,HN as exportURDF,s$ as extrude,eM as extrudeAll,bM as face,tO as faceAxis,eO as faceCenter,QP as faceFinder,KD as faceGeomType,qD as faceOrientation,VA as facesOfEdge,zY as fieldBoolean,UY as fieldContour,BY as fieldOffset,HY as fieldReinit,VY as fieldShell,Zk as fill,xM as filledFace,KQ as fillet,mj as filletWithEvolution,_O as findFacesByTag,zM as findNode,XN as findStep,Bj as fixSelfIntersection,Rj as fixShape,La as flatMap,Wa as flatten,JD as flipFaceOrientation,dk as flipOrientation,hJ as fontMetrics,_N as forwardKinematics,i$ as fromBREP,RX as fromKernelDir,LX as fromKernelPnt,IX as fromKernelVec,Ka as fromNullable,PQ as fuse,lL as fuse2D,IQ as fuseAll,tj as fuseAllBisect,$I as fuseBlueprints,dj as fuseWithEvolution,V$ as gearGeometry,iY as getActiveVoxelId,QE as getBounds,HK as getBounds2D,WE as getCompSolids,ek as getCurveType,DT as getDisposalStats,RE as getEdges,jO as getFaceColor,sO as getFaceOrigins,vO as getFaceTags,zE as getFaces,hG as getFont,YO as getHashCode,ZN as getHistoryShape,U as getKernel,mT as getKernelCapabilities,vT as getKernelTier,qA as getNurbsCurveData,JA as getNurbsSurfaceData,uk as getOrientation,UK as getOrientation2D,Do as getPerformanceStats,AO as getShapeColor,YT as getShapeKind,UE as getShells,tF as getSingleFace,HE as getSolids,GD as getSurfaceType,bO as getTagMetadata,VE as getVertices,rY as getVoxel,BE as getWires,Zj as guidedSweep,QQ as heal,Pj as healFace,Nj as healSolid,Fj as healWire,fM as helix,XX as hull,cQ as importDXF,TQ as importGLB,fJ as importIGES,fQ as importOBJ,uJ as importSTEP,dJ as importSTL,cJ as importSVG,sJ as importSVGPathD,wQ as importThreeMF,KN as importURDF,ST as init,lT as initFromManifold,bT as initFromOC,aY as initVoxel,aO as innerWires,fk as interpolateCurve,RQ as intersect,fL as intersect2D,tL as intersectBlueprints,pj as intersectWithEvolution,LE as invalidateShapeCache,jN as inverseKinematics,A1 as io,fo as ioError,UT as is2D,HT as is3D,JJ as isChamferRadius,XT as isClosedWire,HD as isCompSolid,CE as isCompound,OJ as isDisposeRequest,vE as isEdge,o$ as isEmpty,QO as isEqualShape,A as isErr,AJ as isErrorResponse,bE as isFace,YJ as isFilletRadius,EJ as isInitRequest,WK as isInside2D,VT as isLive,QT as isManifoldShell,qJ as isNumber,Na as isOk,DJ as isOperationRequest,ZT as isOrientedFace,iE as isPlanarFace,aE as isPlanarWire,yG as isProjectionPlane,FJ as isQueueEmpty,ZO as isSameShape,TE as isShape1D,wE as isShape3D,xE as isShell,SE as isSolid,kJ as isSuccessResponse,a$ as isValid,$T as isValidSolid,_E as isVertex,yE as isWire,ZE as iterCompSolids,GE as iterEdges,KE as iterFaces,XE as iterShells,YE as iterSolids,RD as iterTopo,JE as iterVertices,qE as iterWires,NN as jointTrajectory,fN as jointTransform,IN as jointsFromDH,AE as kernelCall,jE as kernelCallRaw,ME as kernelCallScoped,P as kernelError,AX as latticeInfill,jX as latticeInfillShape,lM as line,NM as linearPattern,mG as loadFont,l$ as loft,nM as loftAll,RG as makeBaseBox,u1 as makeExternalGear,d1 as makeInternalGear,jD as makePlane,p1 as makePlanetaryGear,xG as makeProjectedEdges,nE as manifoldShell,Pa as map,Ga as mapBoth,Fa as mapErr,Za as match,vP as measureArea,CP as measureCurvatureAt,wP as measureCurvatureAtMid,bP as measureDistance,xP as measureDistanceProps,yP as measureLength,gP as measureLinearProps,hP as measureSurfaceProps,_P as measureVolume,mP as measureVolumeProps,k1 as measurement,vN as mechanismDOF,e$ as mesh,t$ as meshEdges,Nk as meshMultiLOD,tZ as minkowski,kQ as mirror,YK as mirror2D,AK as mirrorDrawing,h$ as mirrorJoin,D1 as modifiers,aP as modifyStep,uo as moduleInitError,Xj as multiSectionSweep,$D as normalAt,YQ as offset,DM as offsetFace,xY as offsetMesh,wY as offsetShape,mk as offsetWire2D,O as ok,Ra as or,za as orElse,lI as organiseBlueprints,tE as orientedFace,rO as outerWire,N1 as patterns,PJ as pendingCount,to as pipeline,PD as pivotPlane,oE as planarFace,sN as planarJoint,sE as planarWire,a1 as planetPlacements,p$ as pocket,XD as pointOnSurface,uY as pointsInside,CM as polygon,nZ as polyhedron,PG as polysideInnerRadius,EI as polysidesBlueprint,_j as positionOnCurve,xT as prewarm,T1 as primitives,aN as prismaticJoint,TG as projectEdges,QD as projectPointOnFace,j1 as query,po as queryError,g$ as rectangularPattern,BJ as registerHandler,uT as registerKernel,_T as registerKernelTier,nP as registerOperation,eP as registerShape,nY as registerVoxel,IJ as rejectAll,LM as removeChild,iO as removeHolesFromFace,pY as repairMesh,iP as replayFrom,rP as replayHistory,OT as resetDisposalStats,Oo as resetPerformanceStats,BO as resize,$ as resolve,EQ as resolve3D,lD as resolveDirection,AD as resolvePlane,TJ as resolveRef,jK as reverseCurve,iN as revoluteJoint,c$ as revolve,TZ as roof,OQ as rotate,qK as rotate2D,OK as rotateDrawing,DI as roundedRectangleBlueprint,AQ as scale,JK as scale2D,kK as scaleDrawing,aX as sdfBox,lX as sdfCapsule,cX as sdfCone,sX as sdfCylinder,xX as sdfFieldAxialRamp,wX as sdfFieldClamp,bX as sdfFieldConst,CX as sdfFieldFromSdf,SX as sdfFieldRadialRamp,hX as sdfLattice,dX as sdfPlane,oX as sdfRoundedBox,iX as sdfSphere,gX as sdfStrutLattice,pX as sdfSweep,uX as sdfTorus,zQ as section,BQ as sectionToFace,oP as serializeHistory,uN as setJointValue,lN as setJointValues,oO as setShapeOrigin,yO as setTagMetadata,OM as sewShells,F$ as shape,hY as shapeToMeshInput,zD as shapeType,KA as sharedEdges,JQ as shell,SY as shellMesh,TY as shellShape,gj as shellWithEvolution,$Q as simplify,kG as sketchCircle,AG as sketchEllipse,nG as sketchExtrude,$W as sketchFace,FG as sketchFaceOffset,LG as sketchHelix,iG as sketchLoft,QK as sketchOnFace2D,ZK as sketchOnPlane2D,IG as sketchParametricFunction,NG as sketchPolysides,jG as sketchRectangle,tG as sketchRevolve,MG as sketchRoundedRectangle,rG as sketchSweep,pJ as sketchText,eG as sketchWires,lo as sketcherStateError,HQ as slice,EM as solid,zj as solidFromShell,tQ as solveAssembly,aM as sphere,cN as sphericalJoint,VQ as split,QN as stepCount,$N as stepsFrom,XK as stretch2D,SM as subFace,Gj as supportExtrude,aT as supportsConstraintSketch,iT as supportsProjection,GX as surfaceFromGrid,JX as surfaceFromImage,Wj as sweep,gO as tagFaces,_M as tangentArc,Ha as tap,Ua as tapErr,_G as textBlueprints,mJ as textMetrics,XQ as thicken,cP as thread,pM as threePointArc,r$ as toBREP,NA as toBufferGeometryData,PA as toGroupedBufferGeometryData,NX as toKernelVec,IA as toLODGeometryData,FA as toLineGeometryData,GK as toSVGPathD,sD as toVec2,oD as toVec3,sM as torus,MX as tpmsLattice,NQ as transformCopy,O1 as transforms,DQ as translate,KK as translate2D,DK as translateDrawing,ND as translatePlane,$a as tryCatch,eo as tryCatchAsync,qj as twistExtrude,co as typeCastError,YN as undoLast,mo as unsupportedError,j as unwrap,Xa as unwrapErr,Ja as unwrapOr,Ya as unwrapOrElse,RM as updateNode,SJ as updateRoles,YD as uvBounds,ZD as uvCoordinates,rE as validSolid,K$ as validatePlanetary,F as validationError,jj as variableFillet,uD as vecAdd,SD as vecAngle,hD as vecCross,vD as vecDistance,mD as vecDot,bD as vecEquals,xD as vecIsZero,gD as vecLength,_D as vecLengthSq,pD as vecNegate,yD as vecNormalize,CD as vecProjectToPlane,ED as vecRepr,wD as vecRotate,fD as vecScale,dD as vecSub,wM as vertex,QJ as vertexFinder,rD as vertexPosition,WA as verticesOfEdge,CY as voxelBoolean,RY as voxelBooleanField,GY as voxelBooleanFieldShapes,EY as voxelBooleanShapes,LY as voxelField,WY as voxelFieldFromShape,BM as walkAssembly,lY as windingNumbers,vM as wire,eF as wireFinder,yM as wireLoop,UA as wiresOfFace,pT as withKernel,VX as withKernelDir,BX as withKernelPnt,zX as withKernelVec,hT as withQuality,IT as withScope,zT as withScopeResult,BT as withScopeResultAsync,yT as withTier,Ba as zipResults};
|
|
60
|
+
`),n=[],r=[];for(let e of t){let t=e.trim();if(t.startsWith(`v `)){let e=uQ(t);e&&n.push(e)}else if(t.startsWith(`f `)){let e=dQ(t);e.length>=3&&r.push(e)}}if(n.length===0||r.length===0)return k(fo(N.OBJ_IMPORT_FAILED,`OBJ file contains no valid geometry`));try{return pQ(n,r)}catch(e){let t=e instanceof Error?e.message:String(e);return k(fo(N.OBJ_IMPORT_FAILED,`OBJ import failed: ${t}`,e))}}function pQ(e,t){let n=[];for(let r of t)for(let t=1;t<r.length-1;t++){let i=r[0]??0,a=r[t]??0,o=r[t+1]??0,s=i>0?i-1:e.length+i,c=a>0?a-1:e.length+a,l=o>0?o-1:e.length+o,u=e[s],d=e[c],f=e[l];!u||!d||!f||n.push([u,d,f])}return lQ(n,N.OBJ_IMPORT_FAILED)}function mQ(e,t){let n=-1;for(let t=e.length-22;t>=0;t--)if(e[t]===80&&e[t+1]===75&&e[t+2]===5&&e[t+3]===6){n=t;break}if(n<0)return null;let r=new DataView(e.buffer,e.byteOffset,e.byteLength),i=r.getUint32(n+16,!0),a=i+r.getUint32(n+12,!0),o=i,s=new TextDecoder;for(;o<a&&r.getUint32(o,!0)===33639248;){let n=r.getUint16(o+28,!0),i=r.getUint16(o+30,!0),a=r.getUint16(o+32,!0),c=r.getUint32(o+42,!0);if(s.decode(e.subarray(o+46,o+46+n))===t){if(r.getUint16(c+8,!0)!==0)return null;let t=r.getUint16(c+26,!0),n=r.getUint16(c+28,!0),i=r.getUint32(c+18,!0),a=c+30+t+n;return e.subarray(a,a+i)}o+=46+n+i+a}return null}function hQ(e){return e>=97&&e<=122||e>=65&&e<=90||e>=48&&e<=57||e===95}function gQ(e){let t={},n=0;for(;n<e.length;){let r=e.indexOf(`="`,n);if(r<0)break;let i=r;for(;i>0&&hQ(e.charCodeAt(i-1));)i--;if(i===r){n=r+2;continue}let a=e.slice(i,r),o=r+2,s=e.indexOf(`"`,o);if(s<0)break;t[a]=e.slice(o,s),n=s+1}return t}function _Q(e,t){let n=[],r=`<${t} `,i=0;for(;i<e.length;){let t=e.indexOf(r,i);if(t<0)break;let a=e.indexOf(`>`,t);if(a<0)break;n.push(e.slice(t,a+1)),i=a+1}return n}function vQ(e,t){let n=e.indexOf(`<${t}`);if(n<0)return null;let r=e.indexOf(`</${t}>`,n);return r<0?null:e.slice(n,r+t.length+3)}function yQ(e){let t=e.startsWith(`#`)?e.slice(1):e;return[parseInt(t.slice(0,2),16)/255,parseInt(t.slice(2,4),16)/255,parseInt(t.slice(4,6),16)/255,t.length>=8?parseInt(t.slice(6,8),16)/255:1]}function bQ(e){let t=new Map,n=0;for(;n<e.length;){let r=e.indexOf(`<colorgroup`,n);if(r<0)break;let i=e.indexOf(`</colorgroup>`,r);if(i<0)break;let a=e.slice(r,i+13);n=i+13;let o=e.indexOf(`>`,r);if(o<0)continue;let s=gQ(e.slice(r,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of _Q(a,`color`)){let t=gQ(e).color;t!==void 0&&l.push(yQ(t))}t.set(c,l)}let r=0;for(;r<e.length;){let n=e.indexOf(`<basematerials`,r);if(n<0)break;let i=e.indexOf(`</basematerials>`,n);if(i<0)break;let a=e.slice(n,i+16);r=i+16;let o=e.indexOf(`>`,n);if(o<0)continue;let s=gQ(e.slice(n,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of _Q(a,`base`)){let t=gQ(e).displaycolor;t===void 0?l.push([0,0,0,1]):l.push(yQ(t))}t.set(c,l)}return t}function xQ(e){let t=[],n=[],r=[],i=bQ(e);for(let n of _Q(e,`vertex`)){let e=gQ(n);e.x!==void 0&&e.y!==void 0&&e.z!==void 0&&t.push([parseFloat(e.x),parseFloat(e.y),parseFloat(e.z)])}let a=null,o=null,s=vQ(e,`object`);if(s!==null){let e=s.indexOf(`>`);if(e>=0){let t=gQ(s.slice(0,e+1));t.pid!==void 0&&(a=parseInt(t.pid,10)),t.pindex!==void 0&&(o=parseInt(t.pindex,10))}}for(let t of _Q(e,`triangle`)){let e=gQ(t);if(e.v1!==void 0&&e.v2!==void 0&&e.v3!==void 0){n.push([parseInt(e.v1,10),parseInt(e.v2,10),parseInt(e.v3,10)]);let t=null,s=e.pid??(a===null?void 0:String(a)),c=e.p1??(o===null?void 0:String(o));if(s!==void 0&&c!==void 0){let e=parseInt(s,10),n=parseInt(c,10),r=i.get(e);r!==void 0&&n<r.length&&(t=r[n]??null)}r.push(t)}}return{vertices:t,triangles:n,triangleColors:r}}function SQ(e){let t=new Map;for(let n of e){if(n===null)continue;let e=n.join(`,`),r=t.get(e);r===void 0?t.set(e,{count:1,color:n}):r.count++}let n=null;for(let e of t.values())(n===null||e.count>n.count)&&(n=e);return n===null?null:n.color}function CQ(e){let t=U(),n=e.vertices.map(([e,t,n])=>({x:e,y:t,z:n})),r=e.triangles;try{return O(W(t.buildSolidFromFaces(n,r,1e-6)))}catch{let t=[];for(let[n,r,i]of e.triangles){let a=e.vertices[n],o=e.vertices[r],s=e.vertices[i];!a||!o||!s||t.push([a,o,s])}return lQ(t,N.THREEMF_IMPORT_FAILED)}}async function wQ(e){try{let t=await e.arrayBuffer(),n=mQ(new Uint8Array(t),`3D/3dmodel.model`);if(!n)return k(fo(N.THREEMF_IMPORT_FAILED,`3MF archive does not contain 3D/3dmodel.model (or uses unsupported compression)`));let r=xQ(new TextDecoder().decode(n));if(r.vertices.length===0||r.triangles.length===0)return k(fo(N.THREEMF_IMPORT_FAILED,`3MF model contains no valid geometry`));let i=CQ(r);if(i.ok){let e=SQ(r.triangleColors);e!==null&&OO(i.value,e)}return i}catch(e){let t=e instanceof Error?e.message:String(e);return k(fo(N.THREEMF_IMPORT_FAILED,`3MF import failed: ${t}`,e))}}async function TQ(e){try{let t=await e.arrayBuffer();return O(W(U().importGLB(t)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(fo(N.GLB_IMPORT_FAILED,`Failed to import GLB: ${t}`,e))}}function $(e){return`__wrapped`in e?e.val:e}function EQ(e){return $(e)}function DQ(e,t){return IO($(e),t)}function OQ(e,t,n){let r=n?.at;return LO($(e),t,r,n?.axis)}function kQ(e,t){let n=t?.at;return RO($(e),t?.normal??[1,0,0],n)}function AQ(e,t,n){return zO($(e),t,n?.center)}function jQ(e){return qO($(e))}function MQ(e,t){return WO($(e),t)}function NQ(e,t){return KO($(e),t)}function PQ(e,t,n){return iA($(e),$(t),{...n,unsafe:!0})}function FQ(e,t,n){return aA($(e),$(t),{...n,unsafe:!0})}function IQ(e,t){return cA(e.map(e=>$(e)),{...t,unsafe:!0})}function LQ(e,t,n){return lA($(e),t.map(e=>$(e)),{...n,unsafe:!0})}function RQ(e,t,n){return oA($(e),$(t),{...n,unsafe:!0})}function zQ(e,t,n){return dA($(e),t,n)}function BQ(e,t,n){return _A($(e),t,n)}function VQ(e,t){return vA($(e),t)}function HQ(e,t,n){return yA($(e),t,n)}function UQ(e,t){if(e!==void 0)return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(YP()).findAll(t)}function WQ(e,t){return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(QP()).findAll(t)}function GQ(e){return typeof e==`object`&&!Array.isArray(e)&&typeof e!=`function`?{mode:`distAngle`,distance:e.distance,angle:e.angle}:typeof e==`function`?{mode:`standard`,distance:t=>{let n=e(t);return n===null?null:typeof n==`object`&&!Array.isArray(n)?n.distance:n}}:{mode:`standard`,distance:e}}function KQ(e,t,n){let r=$(e),i,a;return n===void 0?(i=void 0,a=t):(i=UQ(t,r),a=n),Tj(r,i,a)}function qQ(e,t,n){let r=$(e),i,a;n===void 0?(i=void 0,a=t):(i=UQ(t,r),a=n);let o=GQ(a);return o.mode===`distAngle`?LA(r,[...i??RE(r)],o.distance,o.angle):Ej(r,i,o.distance)}function JQ(e,t,n,r){let i=$(e);return Dj(i,WQ(t,i),n,r?.tolerance)}function YQ(e,t,n){return Oj($(e),t,n?.tolerance)}function XQ(e,t){return Cj($(e),t)}function ZQ(e,t,n){let r=$(e);return Aj(r,WQ(t,r),n.pullDirection,n.neutralPlane,n.angle)}function QQ(e){return Ij($(e))}function $Q(e){return $O($(e))}function e$(e,t){return Tk($(e),t)}function t$(e,t){return Ek($(e),t)}function n$(e){return nD($(e))}function r$(e){return JO($(e))}function i$(e){return UD(e)}function a$(e){return Mj($(e))}function o$(e){return XO($(e))}function s$(e,t){return Qj($(e),typeof t==`number`?[0,0,t]:t)}function c$(e,t){let n=t?.at??[0,0,0];return $j($(e),n,t?.axis??[0,0,1],t?.angle??2*Math.PI)}function l$(e,t){return tM(e.map(e=>$(e)),t)}function u$(e,n){if(n===void 0){let t=zE(e);if(t.length===0)return k(F(N.COMPOUND_NO_FACES,`compoundOps: shape has no faces`));let n=Fk(t),r=eO(n)[2];for(let e=1;e<t.length;e++){let i=Pk(t,e),a=eO(i)[2];a>r&&(n=i,r=a)}return O(n)}if(typeof n==`function`){let r=n(QP()).findAll(e);return r.length===0?k(po(N.COMPOUND_FACE_NOT_FOUND,`compoundOps: face finder matched no faces`)):O(t(r,0))}return O(n)}function d$(e){return`sketchOnPlane`in e&&typeof e.sketchOnPlane==`function`?e.sketchOnPlane(`XY`).wire:e}function f$(e,t){let n=$(e),{at:r,radius:i,axis:a}=t,o=a??[0,0,1];if(i<=0)return k(F(`DRILL_INVALID_RADIUS`,`Drill radius must be positive`));if(xD(o))return k(F(`DRILL_ZERO_AXIS`,`Drill axis cannot be zero`));let s=yD(o),c=r.length===2?[r[0],r[1],0]:[r[0],r[1],r[2]],l;if(t.depth!==void 0)l=wA(i,t.depth,c,s);else{let e=QE(n),t=[[e.xMin,e.yMin,e.zMin],[e.xMax,e.yMin,e.zMin],[e.xMin,e.yMax,e.zMin],[e.xMax,e.yMax,e.zMin],[e.xMin,e.yMin,e.zMax],[e.xMax,e.yMin,e.zMax],[e.xMin,e.yMax,e.zMax],[e.xMax,e.yMax,e.zMax]],r=1/0,a=-1/0;for(let e of t){let t=(e[0]-c[0])*s[0]+(e[1]-c[1])*s[1]+(e[2]-c[2])*s[2];t<r&&(r=t),t>a&&(a=t)}--r,a+=1,l=wA(i,a-r,[c[0]+s[0]*r,c[1]+s[1]*r,c[2]+s[2]*r],s)}return aA(n,l,{unsafe:!0})}function p$(e,t){let n=$(e),{profile:r,depth:i}=t;if(i<=0)return k(F(`POCKET_INVALID_DEPTH`,`Pocket depth must be positive`));let a=u$(n,t.face);if(A(a))return a;let o=a.value,s=$D(o),c=eO(o),l=Xk(d$(r));if(A(l))return l;let u=Qj(IO(l.value,c),fD(yD(s),-i));return A(u)?u:aA(n,u.value,{unsafe:!0})}function m$(e,t){let n=$(e),{profile:r,height:i}=t;if(i<=0)return k(F(`BOSS_INVALID_HEIGHT`,`Boss height must be positive`));let a=u$(n,t.face);if(A(a))return a;let o=a.value,s=$D(o),c=eO(o),l=Xk(d$(r));if(A(l))return l;let u=Qj(IO(l.value,c),fD(yD(s),i));return A(u)?u:iA(n,u.value,{unsafe:!0})}function h$(e,t){let n=$(e),r=t?.normal??[1,0,0],i=t?.at;return xD(r)?k(F(`MIRROR_ZERO_NORMAL`,`Mirror plane normal cannot be zero`)):iA(n,RO(n,r,i),{unsafe:!0})}function g$(e,t){let n=$(e),{xDir:r,xCount:i,xSpacing:a,yDir:o,yCount:s,ySpacing:c}=t;if(i<1||s<1)return k(F(`PATTERN_INVALID_COUNT`,`Pattern counts must be at least 1`));if(xD(r))return k(F(`PATTERN_ZERO_DIRECTION`,`X direction cannot be zero`));if(xD(o))return k(F(`PATTERN_ZERO_DIRECTION`,`Y direction cannot be zero`));if(i===1&&s===1)return O(n);let l=yD(r),u=yD(o),d=[n];for(let e=0;e<i;e++)for(let t=0;t<s;t++){if(e===0&&t===0)continue;let r=[l[0]*a*e+u[0]*c*t,l[1]*a*e+u[1]*c*t,l[2]*a*e+u[2]*c*t];d.push(IO(n,r))}return cA(d,{unsafe:!0})}var _$=class extends Error{code;kind;suggestion;metadata;constructor(e){let t=e.suggestion?`${e.message}\nSuggestion: ${e.suggestion}`:e.message;super(t),this.name=`BrepError`,this.code=e.code,this.kind=e.kind,e.suggestion&&(this.suggestion=e.suggestion),e.metadata&&(this.metadata=e.metadata)}};function v$(e){if(A(e))throw new _$(e.error);return e.value}function y$(e){return e}function b$(e){return e}function x$(e){return e}function S$(e){return e}function C$(e){return{val:e,__wrapped:!0,translate:t=>N$(DQ(e,t)),rotate:(t,n)=>N$(OQ(e,t,n)),mirror:t=>N$(kQ(e,t)),scale:(t,n)=>N$(AQ(e,t,n)),applyMatrix:t=>N$(v$(MQ(e,t))),moveX:t=>N$(DQ(e,[t,0,0])),moveY:t=>N$(DQ(e,[0,t,0])),moveZ:t=>N$(DQ(e,[0,0,t])),rotateX:t=>N$(OQ(e,t,{axis:[1,0,0]})),rotateY:t=>N$(OQ(e,t,{axis:[0,1,0]})),rotateZ:t=>N$(OQ(e,t,{axis:[0,0,1]})),bounds:()=>QE(e),describe:()=>n$(e),clone:()=>N$(v$(jQ(e))),mesh:t=>e$(e,t),meshEdges:t=>t$(e,t),isValid:()=>a$(e),isEmpty:()=>o$(e),heal:()=>N$(v$(QQ(e))),simplify:()=>N$(v$($Q(e))),toBREP:()=>v$(r$(e)),apply:t=>N$(t(e)),applyResult:t=>N$(v$(t(e))),done:()=>e}}function w$(e){return{fuse:(t,n)=>P$(v$(PQ(e,$(t),{...n,unsafe:!0}))),cut:(t,n)=>P$(v$(FQ(e,$(t),{...n,unsafe:!0}))),intersect:(t,n)=>P$(v$(RQ(e,$(t),{...n,unsafe:!0}))),fuseAll:(t,n)=>P$(S$(v$(cA([e,...t.map($)],{...n,unsafe:!0})))),cutAll:(t,n)=>P$(S$(v$(lA(e,t,{...n,unsafe:!0})))),section:(t,n)=>N$(v$(zQ(e,t,n))),split:t=>N$(v$(VQ(e,t))),slice:(t,n)=>v$(HQ(e,t,n))}}function T$(e){return{fillet(...t){return t.length===1?P$(S$(v$(KQ(y$(e),t[0])))):P$(S$(v$(KQ(y$(e),t[0],t[1]))))},chamfer(...t){return t.length===1?P$(S$(v$(qQ(y$(e),t[0])))):P$(S$(v$(qQ(y$(e),t[0],t[1]))))},shell:(t,n,r)=>P$(S$(v$(JQ(y$(e),t,n,r)))),offset:(t,n)=>P$(S$(v$(YQ(y$(e),t,n)))),draft:(t,n)=>P$(S$(v$(ZQ(y$(e),t,n))))}}function E$(e){return{drill:t=>P$(v$(f$(e,t))),pocket:t=>P$(v$(p$(e,t))),boss:t=>P$(v$(m$(e,t))),mirrorJoin:t=>P$(v$(h$(e,t))),rectangularPattern:t=>P$(v$(g$(e,t)))}}function D$(e){return{volume:()=>v$(_P(e)),area:()=>v$(vP(e)),volumeProps:()=>v$(mP(e)),surfaceProps:()=>v$(hP(e))}}function O$(e){return{edges:()=>RE(e),faces:()=>zE(e),wires:()=>BE(e),vertices:()=>VE(e)}}function k$(e){return{linearPattern:(t,n,r)=>P$(S$(v$(NM(e,t,n,r)))),circularPattern:(t,n,r)=>P$(S$(v$(PM(e,t,n,r))))}}function A$(e){return{...C$(e),...w$(e),...T$(e),...E$(e),...D$(e),...O$(e),...k$(e)}}function j$(e){return{...C$(e),length:()=>ak(e),startPoint:()=>tk(e),endPoint:()=>nk(e),pointAt:t=>rk(e,t),tangentAt:t=>ik(e,t),isClosed:()=>sk(e),sweep(t,n){if(!yE(e))throw Error(`sweep requires a Wire`);let r=v$(Wj(x$(e),$(t),n));return P$(Array.isArray(r)?r[0]:r)}}}function M$(e){return{...C$(e),area:()=>v$(vP(e)),normalAt:t=>$D(e,t),center:()=>eO(e),surfaceType:()=>v$(GD(e)),outerWire:()=>rO(e),innerWires:()=>aO(e),extrude:t=>P$(v$(s$(b$(e),t))),revolve:t=>P$(v$(c$(b$(e),t)))}}function N$(e){return wE(e)?A$(e):bE(e)?M$(e):vE(e)||yE(e)?j$(e):C$(e)}function P$(e){return A$(e)}function F$(e){if(e&&typeof e==`object`&&`face`in e&&typeof e.face==`function`&&`_defaultOrigin`in e)return M$(e.face());if(e&&typeof e==`object`&&`wrapped`in e)return bE(e)?M$(e):wE(e)?A$(e):vE(e)||yE(e)?j$(e):C$(e);throw Error(`shape() requires a Sketch or branded shape type`)}var I$=.25,L$=e=>Math.tan(e)-e;function R$(e,t,n,r){let i=e/Math.cos(t),a=n+r*(Math.tan(t)-t);return[i*Math.cos(a),i*Math.sin(a),0]}function z$(e,t,n,r,i){let a=[];for(let o=0;o<=r;o++){let s=.5-.5*Math.cos(o/r*Math.PI);a.push(R$(e,s*t,n,i))}return a}function B$(e){return Math.max(16,Math.round(8*Math.sqrt(e)))}function V$(e,t,n,r,i,a,o){let s=e*t/2,c=s*Math.cos(n),l=t*(1+r),u=t*(1+i-r),d=o?s-t*(1-r):s+l,f=o?s+t*(1+i+r):s-u,p=a/s,m=(Math.PI/2+2*r*Math.tan(n))/e+(o?p:-p),h=o?f:d;return{rPitch:s,rb:c,rTip:d,rRoot:f,alphaPitch:n,halfToothAngle:m,alphaTip:h<=c?0:Math.acos(Math.min(1,c/h)),toothPitch:2*Math.PI/e,isInternal:o}}function H$(e,t,n){if(t===0)return O(e);let r=L$(e)+2*t*Math.tan(e)/n,i,a;if(r>L$(e)?(i=e,a=Math.PI/2-1e-6):(i=1e-4,a=e),r>L$(a)||r<L$(i))return k(F(`GEAR_PA_OUT_OF_RANGE`,`working pressure angle out of range — target inv(αw)=${r.toFixed(4)} not in [${L$(i).toFixed(4)}, ${L$(a).toFixed(4)}]`,void 0,{target:r,invLo:L$(i),invHi:L$(a)}));for(let e=0;e<50;e++){let e=.5*(i+a);L$(e)<r?i=e:a=e}return O(.5*(i+a))}function U$(e,t,n,r,i){return H$(e,t+n,r+i)}function W$(e,t,n,r,i){return H$(e,n-t,i-r)}function G$(e,t,n,r,i){return(e+t)*n*Math.cos(r)/(2*Math.cos(i))}function K$(e,t,n,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(n))return k(F(`GEAR_NON_INTEGER_TEETH`,`tooth counts and planet count must be integers`));if(e<4||t<4||n<2)return k(F(`GEAR_TEETH_TOO_FEW`,`zs ≥ 4, zp ≥ 4, N ≥ 2 required`));if((2*e+2*t)%n!=0)return k(F(`GEAR_ASSEMBLY`,`(2·zs + 2·zp) must be divisible by N — got ${2*e+2*t} mod ${n} = ${(2*e+2*t)%n}`));let i=t+2+2*r,a=(e+t)*Math.sin(Math.PI/n);return a<=i?k(F(`GEAR_PLANET_COLLISION`,`planet tips would collide: (zs+zp)·sin(π/N) = ${a.toFixed(3)} ≤ planet tip = ${i.toFixed(3)}`)):O(void 0)}function q$(e,t,n,r,i,a,o,s){return(Math.sqrt(Math.max(0,e*e-t*t))+Math.sqrt(Math.max(0,n*n-r*r))-i*Math.sin(s))/(Math.PI*a*Math.cos(o))}function J$(e,t,n,r,i,a,o,s){return(Math.sqrt(Math.max(0,e*e-t*t))-Math.sqrt(Math.max(0,n*n-r*r))+i*Math.sin(s))/(Math.PI*a*Math.cos(o))}function Y$(e,t){return 1-e*Math.sin(t)*Math.sin(t)/2}function X$(e,t,n){return Math.max(0,Y$(e,t)-n)}function Z$(e){return e<8?.2:.485-2.88/e}function Q$(e,t,n,r){let i=e*1e3,a=Z$(r);return a<=0||n<=0||t<=0?1/0:2*i/(r*t*t*n*a)}function $$(e,t,n=!1){let r=(1.4+6.5/e)*(20/(t*180/Math.PI))**.15;return n?r*.85:r}function e1(e,t,n,r,i,a=!1){return Q$(e,t,n,r)*$$(r,i,a)}function t1(e){return e/2}function n1(e,t){return e+2*t}function r1(e){return e%2==0?Math.PI/e:0}function i1(e,t,n){return e*(1+t/n)+r1(n)}function a1(e={}){let t=e.moduleSize??3,n=e.sunTeeth??15,r=e.planetTeeth??12,i=e.numPlanets??3,a=(e.pressureAngleDeg??20)*Math.PI/180,o=e.sunShift??0,s=e.planetShift??0,c=K$(n,r,i,s);if(A(c))return c;let l=U$(a,o,s,n,r);if(A(l))return l;let u=G$(n,r,t,a,l.value),d=[];for(let e=0;e<i;e++){let t=e*2*Math.PI/i,a=i1(t,n,r);d.push({rotationDeg:a*180/Math.PI,position:[u*Math.cos(t),u*Math.sin(t),0]})}return O(d)}function o1(e,t,n,r,i){let a=t*e.toothPitch,o=(t+1)%n*e.toothPitch,s=L$(e.alphaPitch),c=a-e.halfToothAngle-s,l=a+e.halfToothAngle+s,u=z$(e.rb,e.alphaTip,c,r,1),d=z$(e.rb,e.alphaTip,l,r,-1).reverse(),f=Fk(u),p=Ik(u),m=Fk(d),h=Ik(d),g=[],_=e=>{i.register(e),g.push(e)},v=e.isInternal?e.rb<e.rRoot:e.rb>e.rRoot;v&&_(zk([e.rRoot*Math.cos(c),e.rRoot*Math.sin(c),0],f));let y=e.rPitch*1e-5,b=Kk(u,{tolerance:y});if(A(b))return b;_(b.value),_(Uk(p,[e.rTip*Math.cos(a),e.rTip*Math.sin(a),0],m));let x=Kk(d,{tolerance:y});if(A(x))return x;_(x.value),v&&_(zk(h,[e.rRoot*Math.cos(l),e.rRoot*Math.sin(l),0]));let S=o-e.halfToothAngle-s,C=.5*(l+S);return S<l&&(C+=Math.PI),_(Uk(v?[e.rRoot*Math.cos(l),e.rRoot*Math.sin(l),0]:h,[e.rRoot*Math.cos(C),e.rRoot*Math.sin(C),0],v?[e.rRoot*Math.cos(S),e.rRoot*Math.sin(S),0]:[e.rb*Math.cos(S),e.rb*Math.sin(S),0])),O(g)}function s1(e){return l1(e,!1)}function c1(e){return l1(e,!0)}function l1(e,t){try{var n=CT();let{teeth:r,moduleSize:i,pressureAngle:a,shift:o,clearance:s,flankThinning:c,samples:l=B$(i)}=e;if(r<4)return k(F(`GEAR_TEETH_TOO_FEW`,`gear needs ≥ 4 teeth, got ${r}`));if(i<=0)return k(F(`GEAR_MODULE_NONPOSITIVE`,`module must be > 0, got ${i}`));let u=V$(r,i,a,o,s,c,t),d=n.u(new FT),f=[];for(let e=0;e<r;e++){let t=o1(u,e,r,l,d);if(A(t))return t;f.push(...t.value)}let p=Yk(f);return A(p)?p:O(p.value)}catch(e){n.e=e}finally{n.d()}}function u1(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=I$,flankThinning:s=0,bore:c=0,samples:l}=e;if(r<=0)return k(F(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));if(l!==void 0&&(!Number.isInteger(l)||l<1))return k(F(`GEAR_SAMPLES_INVALID`,`samples must be a positive integer; got ${String(l)}`));let u=i*Math.PI/180,d=V$(t,n,u,a,o,s,!1);if(c>0&&c>=2*d.rRoot)return k(F(`GEAR_BORE_TOO_LARGE`,`bore diameter ${c.toFixed(2)} ≥ root diameter ${(2*d.rRoot).toFixed(2)} — would erase the gear teeth`));let f=s1({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(A(f))return f;let p=f1(t,u,a);return _1(f.value,r,c,d,p)}function d1(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=I$,flankThinning:s=0,ringWallThickness:c=2*e.moduleSize,samples:l}=e;if(r<=0)return k(F(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));if(c<=0)return k(F(`GEAR_WALL_NONPOSITIVE`,`ringWallThickness must be > 0`));if(l!==void 0&&(!Number.isInteger(l)||l<1))return k(F(`GEAR_SAMPLES_INVALID`,`samples must be a positive integer; got ${String(l)}`));let u=i*Math.PI/180,d=c1({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(A(d))return d;let f=V$(t,n,u,a,o,s,!0),p=g1(f.rPitch+c);return A(p)?p:y1(p.value,d.value,r,f,[])}function f1(e,t,n){let r=X$(e,t,n);return r<=0?[]:[{code:`UNDERCUT_RISK`,severity:`warning`,message:`gear is undercut: increase shift by ${r.toFixed(3)} to avoid (z=${e})`,context:{deficit:r,teeth:e}}]}function p1(e){let t=h1(e);if(A(t))return t;let n=t.value,r=m1(n);if(A(r))return r;let{sun:i,planet:a,ring:o}=r.value,s=C1(n,i,a,o),c=x1(a.solid,n);a.solid.delete();let l=S1(o.solid,n.zr),u=w1(n,s);return O({sun:i.solid,planets:c,ring:l,ringTeeth:n.zr,workingPressureAngle:n.alphaW_sp,centerDistance:n.centerDistance,contactRatio:{sunPlanet:s.crSunPlanet,planetRing:s.crPlanetRing},undercutDeficit:{sun:s.undercutSun,planet:s.undercutPlanet},...s.lewisStress?{lewisStress:s.lewisStress}:{},...s.stressConcentrationFactor?{stressConcentrationFactor:s.stressConcentrationFactor}:{},diagnostics:u})}function m1(e){let t=e.samples===void 0?{}:{samples:e.samples},n={moduleSize:e.moduleSize,thickness:e.thickness,pressureAngleDeg:e.pressureAngleDeg,clearance:e.clearance,flankThinning:e.bHalf,...t},r=u1({...n,teeth:e.sunTeeth,shift:e.sunShift,bore:e.sunBore});if(A(r))return r;let i=u1({...n,teeth:e.planetTeeth,shift:e.planetShift,bore:e.planetBore});if(A(i))return r.value.solid.delete(),i;let a=d1({...n,teeth:e.zr,shift:e.ringShift,ringWallThickness:e.ringWallThickness});return A(a)?(r.value.solid.delete(),i.value.solid.delete(),a):O({sun:r.value,planet:i.value,ring:a.value})}function h1(e){let t=e.moduleSize??3,n=e.sunTeeth??15,r=e.planetTeeth??12,i=e.numPlanets??3,a=e.pressureAngleDeg??20,o=a*Math.PI/180,s=e.sunShift??0,c=e.planetShift??0,l=e.ringShift??0;if(e.thickness<=0)return k(F(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));let u=K$(n,r,i,c);if(A(u))return u;let d=n1(n,r),f=U$(o,s,c,n,r);if(A(f))return f;let p=W$(o,c,l,r,d);if(A(p))return p;let m=G$(n,r,t,o,f.value);return O({moduleSize:t,sunTeeth:n,planetTeeth:r,numPlanets:i,pressureAngleDeg:a,alpha:o,alphaW_sp:f.value,alphaW_pr:p.value,clearance:e.clearance??.25,bHalf:t1(e.backlash??0),sunShift:s,planetShift:c,ringShift:l,ringWallThickness:e.ringWallThickness??2*t,thickness:e.thickness,sunBore:e.sunBore??0,planetBore:e.planetBore??0,...e.appliedTorque===void 0?{}:{appliedTorque:e.appliedTorque},...e.samples===void 0?{}:{samples:e.samples},zr:d,centerDistance:m})}function g1(e){try{var t=CT();let n=Yk([t.u(new FT).register(Bk(e,[0,0,0],[0,0,1]))]);return A(n)?n:O(n.value)}catch(e){t.e=e}finally{t.d()}}function _1(e,t,n,r,i){try{var a=CT();let o=Xk(e);if(A(o))return o;let s=Qj(o.value,[0,0,t]);if(A(s))return s;if(n<=0)return O(b1(s.value,r,i));let c=a.u(new FT),l=v1(n/2);if(A(l))return l;c.register(l.value);let u=Qj(l.value,[0,0,t+1]);if(A(u))return u;c.register(u.value);let d=c.register(IO(u.value,[0,0,-.5])),f=aA(s.value,d);return A(f)?f:O(b1(f.value,r,i))}catch(e){a.e=e}finally{a.d()}}function v1(e){let t=g1(e);return A(t)?t:Xk(t.value)}function y1(e,t,n,r,i){let a=Xk(e,[t]);if(A(a))return a;let o=Qj(a.value,[0,0,n]);return A(o)?o:O(b1(o.value,r,i))}function b1(e,t,n=[]){return{solid:e,diagnostics:n,pitchDiameter:2*t.rPitch,baseDiameter:2*t.rb,tipDiameter:2*t.rTip,rootDiameter:2*t.rRoot}}function x1(e,t){let n=[];try{for(let r=0;r<t.numPlanets;r++){let i=r*2*Math.PI/t.numPlanets,a=LO(e,i1(i,t.sunTeeth,t.planetTeeth)*180/Math.PI);try{let e=[t.centerDistance*Math.cos(i),t.centerDistance*Math.sin(i),0];n.push(IO(a,e))}finally{a.delete()}}return n}catch(e){for(let e of n)e.delete();throw e}}function S1(e,t){let n=r1(t);if(n===0)return e;let r=LO(e,n*180/Math.PI);return e.delete(),r}function C1(e,t,n,r){let i={crSunPlanet:q$(t.tipDiameter/2,t.baseDiameter/2,n.tipDiameter/2,n.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_sp),crPlanetRing:J$(n.tipDiameter/2,n.baseDiameter/2,r.tipDiameter/2,r.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_pr),undercutSun:X$(e.sunTeeth,e.alpha,e.sunShift),undercutPlanet:X$(e.planetTeeth,e.alpha,e.planetShift)};if(e.appliedTorque!==void 0){let t=e.appliedTorque;i.lewisStress={sun:e1(t,e.moduleSize,e.thickness,e.sunTeeth,e.alpha),planet:e1(t*e.planetTeeth/e.sunTeeth,e.moduleSize,e.thickness,e.planetTeeth,e.alpha),ring:e1(t*e.zr/e.sunTeeth,e.moduleSize,e.thickness,e.zr,e.alpha,!0)},i.stressConcentrationFactor={sun:$$(e.sunTeeth,e.alpha),planet:$$(e.planetTeeth,e.alpha),ring:$$(e.zr,e.alpha,!0)}}return i}function w1(e,t){let n=[];t.crSunPlanet<1.2&&n.push({code:`CONTACT_RATIO_LOW_SUN_PLANET`,severity:`warning`,message:`sun-planet contact ratio ${t.crSunPlanet.toFixed(2)} is below 1.2 — may run unevenly`,context:{value:t.crSunPlanet}}),t.crPlanetRing<1.2&&n.push({code:`CONTACT_RATIO_LOW_PLANET_RING`,severity:`warning`,message:`planet-ring contact ratio ${t.crPlanetRing.toFixed(2)} is below 1.2 — may run unevenly`,context:{value:t.crPlanetRing}}),t.undercutSun>0&&n.push({code:`UNDERCUT_RISK_SUN`,severity:`warning`,message:`sun gear is undercut: increase sunShift by ${t.undercutSun.toFixed(3)} to avoid`,context:{deficit:t.undercutSun,sunTeeth:e.sunTeeth}}),t.undercutPlanet>0&&n.push({code:`UNDERCUT_RISK_PLANET`,severity:`warning`,message:`planet gear is undercut: increase planetShift by ${t.undercutPlanet.toFixed(3)} to avoid`,context:{deficit:t.undercutPlanet,planetTeeth:e.planetTeeth}});let r=Math.abs(e.sunShift)+Math.abs(e.planetShift)+Math.abs(e.ringShift);e.appliedTorque!==void 0&&r>.05&&n.push({code:`LEWIS_Y_SHIFT_UNCORRECTED`,severity:`info`,message:`Lewis stress uses unshifted Y(z) and K_f approximations; expect ±5% per 0.1 of profile shift`});let i=e.ringShift-(e.sunShift+2*e.planetShift);return Math.abs(i)>1e-6&&n.push({code:`PLANETARY_SHIFT_KINEMATIC_MISMATCH`,severity:`warning`,message:`ringShift should equal sunShift + 2·planetShift for both meshes to share working PA; off by ${i.toFixed(3)}`,context:{kinematicError:i,sunShift:e.sunShift,planetShift:e.planetShift,ringShift:e.ringShift}}),n}var T1=UJ({addHoles:()=>kM,bezier:()=>gM,box:()=>rM,bsplineApprox:()=>hM,circle:()=>uM,compound:()=>TM,cone:()=>oM,cylinder:()=>iM,ellipse:()=>dM,ellipseArc:()=>mM,ellipsoid:()=>cM,face:()=>bM,fill:()=>Zk,filledFace:()=>xM,helix:()=>fM,line:()=>lM,offsetFace:()=>DM,polygon:()=>CM,polyhedron:()=>nZ,sewShells:()=>OM,solid:()=>EM,sphere:()=>aM,subFace:()=>SM,tangentArc:()=>_M,threePointArc:()=>pM,torus:()=>sM,vertex:()=>wM,wire:()=>vM,wireLoop:()=>yM}),E1=UJ({checkBoolean:()=>oj,convexHull:()=>ZX,cut:()=>FQ,cutAll:()=>lA,cutAllBisect:()=>ZA,fuse:()=>PQ,fuseAll:()=>cA,fuseAllBisect:()=>tj,hull:()=>XX,intersect:()=>RQ,minkowski:()=>tZ,section:()=>zQ,sectionToFace:()=>BQ,slice:()=>HQ,split:()=>VQ}),D1=UJ({chamfer:()=>qQ,draft:()=>ZQ,fillet:()=>KQ,heal:()=>QQ,offset:()=>YQ,shell:()=>JQ,simplify:()=>$Q,thicken:()=>XQ,variableFillet:()=>jj}),O1=UJ({applyMatrix:()=>MQ,clone:()=>jQ,composeTransforms:()=>GO,mirror:()=>kQ,rotate:()=>OQ,scale:()=>AQ,transformCopy:()=>NQ,translate:()=>DQ}),k1=UJ({checkAllInterferences:()=>rQ,checkInterference:()=>nQ,createDistanceQuery:()=>SP,measureArea:()=>vP,measureCurvatureAt:()=>CP,measureCurvatureAtMid:()=>wP,measureDistance:()=>bP,measureDistanceProps:()=>xP,measureLength:()=>yP,measureLinearProps:()=>gP,measureSurfaceProps:()=>hP,measureVolume:()=>_P,measureVolumeProps:()=>mP}),A1=UJ({blueprintToDXF:()=>Eq,exportAssemblySTEP:()=>MM,exportDXF:()=>Tq,exportGlb:()=>fq,exportGltf:()=>dq,exportIGES:()=>Mk,exportOBJ:()=>tq,exportSTEP:()=>Ak,exportSTEPConfigured:()=>lJ,exportSTL:()=>jk,exportThreeMF:()=>Gq,importDXF:()=>cQ,importGLB:()=>TQ,importIGES:()=>fJ,importOBJ:()=>fQ,importSTEP:()=>uJ,importSTL:()=>dJ,importSVG:()=>cJ,importSVGPathD:()=>sJ,importThreeMF:()=>wQ}),j1=UJ({cornerFinder:()=>TI,edgeFinder:()=>YP,faceFinder:()=>QP,getSingleFace:()=>tF,vertexFinder:()=>QJ,wireFinder:()=>eF}),M1=UJ({complexExtrude:()=>Kj,extrude:()=>s$,guidedSweep:()=>Zj,loft:()=>l$,multiSectionSweep:()=>Xj,revolve:()=>c$,roof:()=>TZ,supportExtrude:()=>Gj,surfaceFromGrid:()=>GX,surfaceFromImage:()=>JX,sweep:()=>Wj,twistExtrude:()=>qj}),N1=UJ({circularPattern:()=>PM,linearPattern:()=>NM}),P1=14695981039346656037n,F1=1099511628211n,I1=18446744073709551615n;function L1(){return P1}function R1(e,t){return(e^BigInt(t&255))*F1&I1}function z1(e,t){let n=e;for(let e=0;e<t.length;e++)n=R1(n,t[e]??0);return n}var B1=new TextEncoder;function V1(e,t){return z1(e,B1.encode(t))}var H1=new ArrayBuffer(8),U1=new DataView(H1),W1=new Uint8Array(H1);function G1(e,t){return U1.setFloat64(0,Object.is(t,-0)?0:t),z1(e,W1)}function K1(e,t){let n=e,r=t&I1;for(let e=0;e<8;e++)n=R1(n,Number(r&255n)),r>>=8n;return n}function q1(e,t){let n=e,r=t|0;for(let e=0;e<4;e++)n=R1(n,r&255),r>>>=8;return n}function J1(e,t){return R1(e,+!!t)}function Y1(e){return(e&I1).toString(16).padStart(16,`0`)}var X1=new Set;function Z1(e){return V1(L1(),e)}function Q1(e){return{kind:`NumLit`,value:e,structuralHash:G1(Z1(`NumLit`),e),freeParams:X1}}function $1(e){let t=Z1(`Vec3Lit`);for(let n of e)t=G1(t,n);return{kind:`Vec3Lit`,value:e,structuralHash:t,freeParams:X1}}function e0(e){let t=Z1(`Vec2Lit`);for(let n of e)t=G1(t,n);return{kind:`Vec2Lit`,value:e,structuralHash:t,freeParams:X1}}function t0(e){return{kind:`Param`,name:e,structuralHash:V1(Z1(`Param`),e),freeParams:new Set([e])}}function n0(e,t,n){let r=V1(Z1(`BinOp`),e);return r=K1(r,t.structuralHash),r=K1(r,n.structuralHash),{kind:`BinOp`,op:e,a:t,b:n,structuralHash:r,freeParams:f0(t.freeParams,n.freeParams)}}function r0(e,t){let n=V1(Z1(`UnaryOp`),e);return n=K1(n,t.structuralHash),{kind:`UnaryOp`,op:e,arg:t,structuralHash:n,freeParams:t.freeParams}}function i0(e,t){let n=q1(Z1(`Component`),t);return n=K1(n,e.structuralHash),{kind:`Component`,vec:e,index:t,structuralHash:n,freeParams:e.freeParams}}function a0(e,t){let n=q1(Z1(`BuildVec`),e),r=new Set;for(let e of t){n=K1(n,e.structuralHash);for(let t of e.freeParams)r.add(t)}return{kind:`BuildVec`,dim:e,components:t,structuralHash:n,freeParams:r}}var o0=(e,t)=>n0(`+`,e,t),s0=(e,t)=>n0(`*`,e,t);function c0(e){return typeof e==`number`?Q1(e):e}function l0(e,t){if(!Array.isArray(e))return e;let n=e;return n.every(e=>typeof e==`number`)?t===3?$1([n[0],n[1],n[2]]):e0([n[0],n[1]]):a0(t,n.map(c0))}function u0(e){return l0(e,3)}function d0(e){return l0(e,2)}function f0(e,t){if(e.size===0)return t;if(t.size===0)return e;let n=new Set(e);for(let e of t)n.add(e);return n}function p0(e){return typeof e==`number`}function m0(e,t){return p0(e)?O(e):k(F(N.NULL_SHAPE_INPUT,`${t}: expected number, got ${Array.isArray(e)?`vector(${e.length})`:typeof e}`))}function h0(e,t,n){return Array.isArray(e)&&e.length===t?O(e):k(F(N.NULL_SHAPE_INPUT,`${n}: expected Vec${t}, got ${p0(e)?`number`:`vector(${e.length})`}`))}function g0(e,t){switch(e.kind){case`NumLit`:return O(e.value);case`Vec3Lit`:return O(e.value);case`Vec2Lit`:return O(e.value);case`Param`:{let n=t[e.name];return n===void 0?k(F(N.NULL_SHAPE_INPUT,`unbound param: ${e.name}`)):O(n)}case`BinOp`:return _0(e,t);case`UnaryOp`:return v0(e,t);case`Component`:return y0(e,t);case`BuildVec`:return b0(e,t)}}function _0(e,t){let n=g0(e.a,t);if(!n.ok)return n;let r=g0(e.b,t);if(!r.ok)return r;let i=m0(n.value,`BinOp(${e.op}).a`);if(!i.ok)return i;let a=m0(r.value,`BinOp(${e.op}).b`);if(!a.ok)return a;switch(e.op){case`+`:return O(i.value+a.value);case`-`:return O(i.value-a.value);case`*`:return O(i.value*a.value);case`/`:return a.value===0?k(F(N.NULL_SHAPE_INPUT,`BinOp(/): division by zero`)):O(i.value/a.value)}}function v0(e,t){let n=g0(e.arg,t);if(!n.ok)return n;let r=m0(n.value,`UnaryOp(${e.op})`);if(!r.ok)return r;let i=r.value;switch(e.op){case`neg`:return O(-i);case`sin`:return O(Math.sin(i));case`cos`:return O(Math.cos(i));case`sqrt`:return O(Math.sqrt(i));case`abs`:return O(Math.abs(i))}}function y0(e,t){let n=g0(e.vec,t);if(!n.ok)return n;if(p0(n.value))return k(F(N.NULL_SHAPE_INPUT,`Component: cannot index a scalar`));let r=n.value,i=r[e.index];return i===void 0?k(F(N.NULL_SHAPE_INPUT,`Component: index ${e.index} out of range for Vec${r.length}`)):O(i)}function b0(e,t){if(e.components.length!==e.dim)return k(F(N.NULL_SHAPE_INPUT,`BuildVec(${e.dim}): expected ${e.dim} components, got ${e.components.length}`));let n=[];for(let r of e.components){let e=g0(r,t);if(!e.ok)return e;let i=m0(e.value,`BuildVec.component`);if(!i.ok)return i;n.push(i.value)}return O(e.dim===2?[n[0],n[1]]:[n[0],n[1],n[2]])}function x0(e,t,n){let r=g0(e,t);return r.ok?m0(r.value,n):r}function S0(e,t,n){let r=g0(e,t);if(!r.ok)return r;let i=h0(r.value,3,n);if(!i.ok)return i;let[a,o,s]=i.value;return O([a,o,s])}function C0(e,t){if(t.size===0)return Object.freeze({});let n={};for(let r of t){let t=e[r];t!==void 0&&(n[r]=t)}return Object.freeze(n)}var w0=new Set;function T0(e){return V1(L1(),e)}function E0(e,t){return K1(e,t.structuralHash)}function D0(e,t){return t===void 0?J1(e,!1):E0(J1(e,!0),t)}function O0(e,t){return t===void 0?J1(e,!1):G1(J1(e,!0),t)}function k0(...e){let t=new Set;for(let n of e)if(n)for(let e of n.freeParams)t.add(e);return t.size===0?w0:t}function A0(e,t,n){let r=c0(e),i=c0(t),a=c0(n),o=T0(`Box`);return o=E0(E0(E0(o,r),i),a),{kind:`Box`,x:r,y:i,z:a,structuralHash:o,freeParams:k0(r,i,a)}}function j0(e){let t=c0(e);return{kind:`Sphere`,radius:t,structuralHash:E0(T0(`Sphere`),t),freeParams:t.freeParams}}function M0(e,t){let n=c0(e),r=c0(t);return{kind:`Cylinder`,radius:n,height:r,structuralHash:E0(E0(T0(`Cylinder`),n),r),freeParams:k0(n,r)}}function N0(e,t,n){let r=c0(e),i=c0(t),a=c0(n),o=T0(`Cone`);return o=E0(E0(E0(o,r),i),a),{kind:`Cone`,radius1:r,radius2:i,height:a,structuralHash:o,freeParams:k0(r,i,a)}}function P0(e,t){let n=c0(e),r=c0(t);return{kind:`Torus`,majorRadius:n,minorRadius:r,structuralHash:E0(E0(T0(`Torus`),n),r),freeParams:k0(n,r)}}function F0(e){let t=e.map(u0),n=q1(T0(`Polygon`),t.length);for(let e of t)n=E0(n,e);return{kind:`Polygon`,points:t,structuralHash:n,freeParams:k0(...t)}}function I0(e){let t=c0(e);return{kind:`Circle`,radius:t,structuralHash:E0(T0(`Circle`),t),freeParams:t.freeParams}}function L0(e,t){let n=u0(e),r=u0(t);return{kind:`Line`,from:n,to:r,structuralHash:E0(E0(T0(`Line`),n),r),freeParams:k0(n,r)}}function R0(e){let t=u0(e);return{kind:`Vertex`,point:t,structuralHash:E0(T0(`Vertex`),t),freeParams:t.freeParams}}function z0(e){return{kind:`Empty`,output:e,structuralHash:V1(T0(`Empty`),e),freeParams:w0}}function B0(){return z0(`Solid`)}function V0(){return z0(`Face`)}function H0(){return z0(`Wire`)}function U0(e,t,n,r){return O0(E0(E0(T0(e),t),n),r)}function W0(e,t,n){return{kind:`Fuse`,a:e,b:t,tolerance:n,structuralHash:U0(`Fuse`,e,t,n),freeParams:k0(e,t)}}function G0(e,t,n){return{kind:`Cut`,a:e,b:t,tolerance:n,structuralHash:U0(`Cut`,e,t,n),freeParams:k0(e,t)}}function K0(e,t,n){return{kind:`Intersect`,a:e,b:t,tolerance:n,structuralHash:U0(`Intersect`,e,t,n),freeParams:k0(e,t)}}function q0(e,t){let n=q1(T0(`FuseAll`),e.length);for(let t of e)n=E0(n,t);return n=O0(n,t),{kind:`FuseAll`,shapes:e,tolerance:t,structuralHash:n,freeParams:k0(...e)}}function J0(e,t,n){let r=E0(T0(`CutAll`),e);r=q1(r,t.length);for(let e of t)r=E0(r,e);return r=O0(r,n),{kind:`CutAll`,base:e,tools:t,tolerance:n,structuralHash:r,freeParams:k0(e,...t)}}function Y0(e){return e===void 0?void 0:u0(e)}function X0(e,t){let n=u0(t);return{kind:`Translate`,target:e,vector:n,structuralHash:E0(E0(T0(`Translate`),e),n),freeParams:k0(e,n)}}function Z0(e,t,n){let r=c0(t),i=Y0(n?.axis),a=Y0(n?.at),o=E0(E0(T0(`Rotate`),e),r);return o=D0(o,i),o=D0(o,a),{kind:`Rotate`,target:e,angle:r,axis:i,at:a,structuralHash:o,freeParams:k0(e,r,i,a)}}function Q0(e,t,n){let r=c0(t),i=Y0(n?.center),a=E0(E0(T0(`Scale`),e),r);return a=D0(a,i),{kind:`Scale`,target:e,factor:r,center:i,structuralHash:a,freeParams:k0(e,r,i)}}function $0(e,t){let n=Y0(t?.normal),r=Y0(t?.at),i=E0(T0(`Mirror`),e);return i=D0(i,n),i=D0(i,r),{kind:`Mirror`,target:e,normal:n,at:r,structuralHash:i,freeParams:k0(e,n,r)}}function e2(e){let t=q1(T0(`Compound`),e.length);for(let n of e)t=E0(t,n);return{kind:`Compound`,children:e,structuralHash:t,freeParams:k0(...e)}}function t2(e){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:return`Solid`;case`Polygon`:return`Face`;case`Circle`:case`Line`:return`Edge`;case`Vertex`:return`Vertex`;case`Empty`:return e.output;case`Fuse`:case`Cut`:case`Intersect`:return t2(e.a);case`FuseAll`:return e.shapes[0]?t2(e.shapes[0]):`Solid`;case`CutAll`:return t2(e.base);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return t2(e.target);case`Compound`:return`Compound`}}function n2(e,t){let n=x0(e.x,t.env,`Box.x`);if(!n.ok)return n;let r=x0(e.y,t.env,`Box.y`);if(!r.ok)return r;let i=x0(e.z,t.env,`Box.z`);return i.ok?O(rM(n.value,r.value,i.value)):i}function r2(e,t){let n=x0(e.radius,t.env,`Sphere.radius`);return n.ok?O(aM(n.value)):n}function i2(e,t){let n=x0(e.radius,t.env,`Cylinder.radius`);if(!n.ok)return n;let r=x0(e.height,t.env,`Cylinder.height`);return r.ok?O(iM(n.value,r.value)):r}function a2(e,t){let n=x0(e.radius1,t.env,`Cone.radius1`);if(!n.ok)return n;let r=x0(e.radius2,t.env,`Cone.radius2`);if(!r.ok)return r;let i=x0(e.height,t.env,`Cone.height`);return i.ok?O(oM(n.value,r.value,i.value)):i}function o2(e,t){let n=x0(e.majorRadius,t.env,`Torus.majorRadius`);if(!n.ok)return n;let r=x0(e.minorRadius,t.env,`Torus.minorRadius`);return r.ok?O(sM(n.value,r.value)):r}function s2(e,t){let n=[];for(let r of e.points){let e=S0(r,t.env,`Polygon.point`);if(!e.ok)return e;n.push(e.value)}return CM(n)}function c2(e,t){let n=x0(e.radius,t.env,`Circle.radius`);return n.ok?O(uM(n.value)):n}function l2(e,t){let n=S0(e.from,t.env,`Line.from`);if(!n.ok)return n;let r=S0(e.to,t.env,`Line.to`);return r.ok?O(lM(n.value,r.value)):r}function u2(e,t){let n=S0(e.point,t.env,`Vertex.point`);return n.ok?O(wM(n.value)):n}function d2(e){return k(I(N.NULL_SHAPE_INPUT,`${e}: empty result has no kernel representation`))}function f2(e,t,n){let r=e.evalNode(t);return r.ok?wE(r.value)?O(r.value):k(co(N.CSG_NOT_3D,`${n}: operand did not produce a 3D shape`)):r}function p2(e,t){return{unsafe:!0,fuzzyValue:e.tolerance??t.tolerance}}function m2(e,t){if(e.a.kind===`Empty`)return t.evalNode(e.b);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=f2(t,e.a,`Fuse.a`);if(!n.ok)return n;let r=f2(t,e.b,`Fuse.b`);return r.ok?iA(n.value,r.value,p2(e,t)):r}function h2(e,t){if(e.a.kind===`Empty`)return d2(`Cut`);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=f2(t,e.a,`Cut.a`);if(!n.ok)return n;let r=f2(t,e.b,`Cut.b`);return r.ok?aA(n.value,r.value,p2(e,t)):r}function g2(e,t){if(e.a.kind===`Empty`||e.b.kind===`Empty`)return d2(`Intersect`);let n=f2(t,e.a,`Intersect.a`);if(!n.ok)return n;let r=f2(t,e.b,`Intersect.b`);return r.ok?oA(n.value,r.value,p2(e,t)):r}function _2(e,t,n){let r=[];for(let i of t){let t=f2(e,i,n);if(!t.ok)return t;r.push(t.value)}return O(r)}function v2(e,t){let n=e.shapes.filter(e=>e.kind!==`Empty`);if(n.length===0)return d2(`FuseAll`);if(n.length===1&&n[0])return t.evalNode(n[0]);let r=_2(t,n,`FuseAll.operand`);return r.ok?cA(r.value,p2(e,t)):r}function y2(e,t){if(e.base.kind===`Empty`)return d2(`CutAll`);let n=e.tools.filter(e=>e.kind!==`Empty`);if(n.length===0)return t.evalNode(e.base);let r=f2(t,e.base,`CutAll.base`);if(!r.ok)return r;let i=_2(t,n,`CutAll.tool`);return i.ok?lA(r.value,i.value,p2(e,t)):i}function b2(e){return k(I(N.NULL_SHAPE_INPUT,`${e}: cannot transform an Empty node`))}function x2(e,t,n,r){return e?S0(e,t,n):O(r)}function S2(e,t){if(e.target.kind===`Empty`)return b2(`Translate`);let n=S0(e.vector,t.env,`Translate.vector`);if(!n.ok)return n;let r=t.evalNode(e.target);return r.ok?O(IO(r.value,n.value)):r}function C2(e,t){if(e.target.kind===`Empty`)return b2(`Rotate`);let n=x0(e.angle,t.env,`Rotate.angle`);if(!n.ok)return n;let r=x2(e.axis,t.env,`Rotate.axis`,[0,0,1]);if(!r.ok)return r;let i=x2(e.at,t.env,`Rotate.at`,[0,0,0]);if(!i.ok)return i;let a=t.evalNode(e.target);return a.ok?O(LO(a.value,n.value,i.value,r.value)):a}function w2(e,t){if(e.target.kind===`Empty`)return b2(`Scale`);let n=x0(e.factor,t.env,`Scale.factor`);if(!n.ok)return n;let r=x2(e.center,t.env,`Scale.center`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?O(zO(i.value,n.value,r.value)):i}function T2(e,t){if(e.target.kind===`Empty`)return b2(`Mirror`);let n=x2(e.normal,t.env,`Mirror.normal`,[1,0,0]);if(!n.ok)return n;let r=x2(e.at,t.env,`Mirror.at`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?O(RO(i.value,n.value,r.value)):i}function E2(e,t){let n=e.children.filter(e=>e.kind!==`Empty`);if(n.length===0)return k(I(N.NULL_SHAPE_INPUT,`Compound: cannot materialize a compound with zero non-empty children`));let r=[];for(let e of n){let n=t.evalNode(e);if(!n.ok)return n;r.push(n.value)}return O(TM(r))}function D2(){return k(I(N.NULL_SHAPE_INPUT,`Empty: cannot materialize an Empty node directly — only valid as boolean/transform operand`))}function O2(e,t){switch(e.kind){case`Box`:return n2(e,t);case`Sphere`:return r2(e,t);case`Cylinder`:return i2(e,t);case`Cone`:return a2(e,t);case`Torus`:return o2(e,t);case`Polygon`:return s2(e,t);case`Circle`:return c2(e,t);case`Line`:return l2(e,t);case`Vertex`:return u2(e,t);case`Empty`:return D2();case`Fuse`:return m2(e,t);case`Cut`:return h2(e,t);case`Intersect`:return g2(e,t);case`FuseAll`:return v2(e,t);case`CutAll`:return y2(e,t);case`Translate`:return S2(e,t);case`Rotate`:return C2(e,t);case`Scale`:return w2(e,t);case`Mirror`:return T2(e,t);case`Compound`:return E2(e,t)}}function k2(e,t){if(typeof t==`number`)return G1(J1(e,!1),t);let n=J1(e,!0);n=q1(n,t.length);for(let e of t)n=G1(n,e);return n}function A2(e,t){if(t.size===0)return L1();let n=C0(e,t),r=Object.keys(n).sort(),i=L1();for(let e of r){i=V1(i,e);let t=n[e];t!==void 0&&(i=k2(i,t))}return i}function j2(e,t,n,r){let i=A2(t,e.freeParams),a=r===void 0?`d`:G1(L1(),r).toString(16);return`${Y1(e.structuralHash)}:${n}:${Y1(i)}:${a}`}var M2=class{scope=new FT;cache=new Map;registered=new WeakSet;kernelId;defaultTolerance;onStep;hits=0;misses=0;constructor(e={}){this.kernelId=e.kernel??fT()??`unregistered`,this.defaultTolerance=e.tolerance,e.onStep&&(this.onStep=e.onStep)}evaluate(e,t={}){return pT(this.kernelId,()=>this.evaluateInner(e,t))}evaluateInner(e,t){let n=j2(e,t,this.kernelId,this.defaultTolerance),r=this.cache.get(n);if(r!==void 0)return this.hits++,this.onStep?.({node:e,cacheKey:n,cacheHit:!0}),O(r);this.misses++;let i=O2(e,{env:t,tolerance:this.defaultTolerance,evalNode:e=>this.evaluateInner(e,t)});return i.ok?(this.registered.has(i.value)||(this.scope.register(i.value),this.registered.add(i.value)),this.cache.set(n,i.value),this.onStep?.({node:e,cacheKey:n,cacheHit:!1}),i):i}cacheStats(){return{hits:this.hits,misses:this.misses,entries:this.cache.size}}resetStats(){this.hits=0,this.misses=0}[Symbol.dispose](){this.scope[Symbol.dispose](),this.cache.clear()}};function N2(e,t){try{var n=CT();let r=t(n.u(new M2(e)));if(r instanceof Promise)throw Error(`withEvaluator() callback returned a Promise. Async code must construct an Evaluator directly and dispose it manually — borrowed shapes would otherwise be freed before the Promise resolves.`);return r}catch(e){n.e=e}finally{n.d()}}function P2(e){return{csgVersion:1,root:B2(e)}}function F2(e){switch(e.kind){case`NumLit`:return{kind:`NumLit`,value:e.value};case`Vec3Lit`:return{kind:`Vec3Lit`,value:[e.value[0],e.value[1],e.value[2]]};case`Vec2Lit`:return{kind:`Vec2Lit`,value:[e.value[0],e.value[1]]};case`Param`:return{kind:`Param`,name:e.name};case`BinOp`:return{kind:`BinOp`,op:e.op,a:F2(e.a),b:F2(e.b)};case`UnaryOp`:return{kind:`UnaryOp`,op:e.op,arg:F2(e.arg)};case`Component`:return{kind:`Component`,vec:F2(e.vec),index:e.index};case`BuildVec`:return{kind:`BuildVec`,dim:e.dim,components:e.components.map(F2)}}}function I2(e){switch(e.kind){case`Box`:return{kind:`Box`,x:F2(e.x),y:F2(e.y),z:F2(e.z)};case`Sphere`:return{kind:`Sphere`,radius:F2(e.radius)};case`Cylinder`:return{kind:`Cylinder`,radius:F2(e.radius),height:F2(e.height)};case`Cone`:return{kind:`Cone`,radius1:F2(e.radius1),radius2:F2(e.radius2),height:F2(e.height)};case`Torus`:return{kind:`Torus`,majorRadius:F2(e.majorRadius),minorRadius:F2(e.minorRadius)};case`Polygon`:return{kind:`Polygon`,points:e.points.map(F2)};case`Circle`:return{kind:`Circle`,radius:F2(e.radius)};case`Line`:return{kind:`Line`,from:F2(e.from),to:F2(e.to)};case`Vertex`:return{kind:`Vertex`,point:F2(e.point)};case`Empty`:return{kind:`Empty`,output:e.output};default:return}}function L2(e){switch(e.kind){case`Fuse`:case`Cut`:case`Intersect`:return{kind:e.kind,a:B2(e.a),b:B2(e.b),tolerance:e.tolerance};case`FuseAll`:return{kind:`FuseAll`,shapes:e.shapes.map(B2),tolerance:e.tolerance};case`CutAll`:return{kind:`CutAll`,base:B2(e.base),tools:e.tools.map(B2),tolerance:e.tolerance};default:return}}function R2(e){return e?F2(e):void 0}function z2(e){switch(e.kind){case`Translate`:return{kind:`Translate`,target:B2(e.target),vector:F2(e.vector)};case`Rotate`:return{kind:`Rotate`,target:B2(e.target),angle:F2(e.angle),axis:R2(e.axis),at:R2(e.at)};case`Scale`:return{kind:`Scale`,target:B2(e.target),factor:F2(e.factor),center:R2(e.center)};case`Mirror`:return{kind:`Mirror`,target:B2(e.target),normal:R2(e.normal),at:R2(e.at)};default:return}}function B2(e){return e.kind===`Compound`?{kind:`Compound`,children:e.children.map(B2)}:I2(e)??L2(e)??z2(e)}function V2(e){return k(F(N.NULL_SHAPE_INPUT,`csg.fromJSON: ${e}`))}function H2(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function U2(e){return typeof e==`number`&&Number.isFinite(e)}function W2(e){return typeof e==`string`}function G2(e,t){if(!Array.isArray(e)||e.length!==3)return V2(`${t}: expected Vec3 array`);let[n,r,i]=e;return!U2(n)||!U2(r)||!U2(i)?V2(`${t}: Vec3 contains non-number`):O([n,r,i])}function K2(e,t){if(!Array.isArray(e)||e.length!==2)return V2(`${t}: expected Vec2 array`);let[n,r]=e;return!U2(n)||!U2(r)?V2(`${t}: Vec2 contains non-number`):O([n,r])}function q2(e){if(!H2(e))return V2(`input is not an object`);let t=e.csgVersion;if(t!==1)return V2(`unsupported csgVersion ${String(t)} (expected 1)`);let n=e.root;return t4(n)}function J2(e){if(!H2(e))return V2(`expression: not an object`);let t=e.kind;switch(t){case`NumLit`:return U2(e.value)?O(Q1(e.value)):V2(`NumLit.value`);case`Vec3Lit`:{let t=G2(e.value,`Vec3Lit.value`);return t.ok?O($1(t.value)):t}case`Vec2Lit`:{let t=K2(e.value,`Vec2Lit.value`);return t.ok?O(e0(t.value)):t}case`Param`:return W2(e.name)?O(t0(e.name)):V2(`Param.name`);case`BinOp`:return Y2(e);case`UnaryOp`:return X2(e);case`Component`:return Z2(e);case`BuildVec`:return Q2(e);default:return V2(`unknown expression kind: ${String(t)}`)}}function Y2(e){let t=e.op;if(t!==`+`&&t!==`-`&&t!==`*`&&t!==`/`)return V2(`BinOp.op: ${String(t)}`);let n=J2(e.a);if(!n.ok)return n;let r=J2(e.b);return r.ok?O(n0(t,n.value,r.value)):r}function X2(e){let t=e.op;if(!W2(t)||![`neg`,`sin`,`cos`,`sqrt`,`abs`].includes(t))return V2(`UnaryOp.op: ${String(t)}`);let n=J2(e.arg);return n.ok?O(r0(t,n.value)):n}function Z2(e){let t=e.index;if(t!==0&&t!==1&&t!==2)return V2(`Component.index: ${String(t)}`);let n=J2(e.vec);return n.ok?O(i0(n.value,t)):n}function Q2(e){let t=e.dim;if(t!==2&&t!==3)return V2(`BuildVec.dim: ${String(t)}`);let n=e.components;if(!Array.isArray(n))return V2(`BuildVec.components: not array`);if(n.length!==t)return V2(`BuildVec.components: expected ${t} components, got ${n.length}`);let r=[];for(let e of n){let t=J2(e);if(!t.ok)return t;r.push(t.value)}return O(a0(t,r))}function $2(e,t){if(!Array.isArray(e))return V2(`${t}: not array`);let n=[];for(let t of e){let e=t4(t);if(!e.ok)return e;n.push(e.value)}return O(n)}function e4(e){let t=e.tolerance;return t==null?O(void 0):U2(t)?O(t):V2(`tolerance: not a finite number`)}function t4(e){if(!H2(e))return V2(`node: not an object`);let t=e.kind;switch(t){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:return r4(t,e);case`Fuse`:case`Cut`:case`Intersect`:return d4(t,e);case`FuseAll`:case`CutAll`:return f4(t,e);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return p4(t,e);case`Compound`:return y4(e);default:return V2(`unknown node kind: ${String(t)}`)}}function n4(e,t,n){let r=J2(e[t]);return r.ok?O(n(r.value)):r}function r4(e,t){switch(e){case`Box`:return i4(t);case`Sphere`:return n4(t,`radius`,j0);case`Cylinder`:return a4(t);case`Cone`:return o4(t);case`Torus`:return s4(t);case`Polygon`:return c4(t);case`Circle`:return n4(t,`radius`,I0);case`Line`:return l4(t);case`Vertex`:return n4(t,`point`,R0);case`Empty`:return u4(t)}return V2(`unhandled primitive: ${e}`)}function i4(e){let t=J2(e.x);if(!t.ok)return t;let n=J2(e.y);if(!n.ok)return n;let r=J2(e.z);return r.ok?O(A0(t.value,n.value,r.value)):r}function a4(e){let t=J2(e.radius);if(!t.ok)return t;let n=J2(e.height);return n.ok?O(M0(t.value,n.value)):n}function o4(e){let t=J2(e.radius1);if(!t.ok)return t;let n=J2(e.radius2);if(!n.ok)return n;let r=J2(e.height);return r.ok?O(N0(t.value,n.value,r.value)):r}function s4(e){let t=J2(e.majorRadius);if(!t.ok)return t;let n=J2(e.minorRadius);return n.ok?O(P0(t.value,n.value)):n}function c4(e){let t=e.points;if(!Array.isArray(t))return V2(`Polygon.points: not array`);let n=[];for(let e of t){let t=J2(e);if(!t.ok)return t;n.push(t.value)}return O(F0(n))}function l4(e){let t=J2(e.from);if(!t.ok)return t;let n=J2(e.to);return n.ok?O(L0(t.value,n.value)):n}function u4(e){let t=e.output;switch(t){case`Solid`:return O(B0());case`Face`:return O(V0());case`Wire`:return O(H0());default:return V2(`Empty.output: ${String(t)}`)}}function d4(e,t){let n=t4(t.a);if(!n.ok)return n;let r=t4(t.b);if(!r.ok)return r;let i=e4(t);if(!i.ok)return i;switch(e){case`Fuse`:return O(W0(n.value,r.value,i.value));case`Cut`:return O(G0(n.value,r.value,i.value));case`Intersect`:return O(K0(n.value,r.value,i.value))}}function f4(e,t){let n=e4(t);if(!n.ok)return n;if(e===`FuseAll`){let e=$2(t.shapes,`FuseAll.shapes`);return e.ok?O(q0(e.value,n.value)):e}let r=t4(t.base);if(!r.ok)return r;let i=$2(t.tools,`CutAll.tools`);return i.ok?O(J0(r.value,i.value,n.value)):i}function p4(e,t){let n=t4(t.target);if(!n.ok)return n;switch(e){case`Translate`:return m4(t,n.value);case`Rotate`:return g4(t,n.value);case`Scale`:return _4(t,n.value);case`Mirror`:return v4(t,n.value)}}function m4(e,t){let n=J2(e.vector);return n.ok?O(X0(t,n.value)):n}function h4(e,t){if(e[t]===void 0)return O(void 0);let n=J2(e[t]);return n.ok?O(n.value):n}function g4(e,t){let n=J2(e.angle);if(!n.ok)return n;let r=h4(e,`axis`);if(!r.ok)return r;let i=h4(e,`at`);return i.ok?O(Z0(t,n.value,{axis:r.value,at:i.value})):i}function _4(e,t){let n=J2(e.factor);if(!n.ok)return n;let r=h4(e,`center`);return r.ok?O(Q0(t,n.value,{center:r.value})):r}function v4(e,t){let n=h4(e,`normal`);if(!n.ok)return n;let r=h4(e,`at`);return r.ok?O($0(t,{normal:n.value,at:r.value})):r}function y4(e){let t=$2(e.children,`Compound.children`);return t.ok?O(e2(t.value)):t}function b4(e){return C4(e)}function x4(e){switch(e.kind){case`NumLit`:case`Vec3Lit`:case`Vec2Lit`:case`Param`:return e;case`BinOp`:{let t=x4(e.a),n=x4(e.b);if(t.kind===`NumLit`&&n.kind===`NumLit`)switch(e.op){case`+`:return Q1(t.value+n.value);case`-`:return Q1(t.value-n.value);case`*`:return Q1(t.value*n.value);case`/`:return Q1(t.value/n.value)}return t!==e.a||n!==e.b?n0(e.op,t,n):e}case`UnaryOp`:{let t=x4(e.arg);if(t.kind===`NumLit`){let n=t.value;switch(e.op){case`neg`:return Q1(-n);case`sin`:return Q1(Math.sin(n));case`cos`:return Q1(Math.cos(n));case`sqrt`:return Q1(Math.sqrt(n));case`abs`:return Q1(Math.abs(n))}}return t===e.arg?e:r0(e.op,t)}case`Component`:{let t=x4(e.vec);return t.kind===`Vec3Lit`||t.kind===`Vec2Lit`&&(e.index===0||e.index===1)?Q1(t.value[e.index]):t===e.vec?e:i0(t,e.index)}case`BuildVec`:{let t=e.components.map(x4);return S4(e.dim,t)||(t.some((t,n)=>t!==e.components[n])?a0(e.dim,t):e)}}}function S4(e,t){if(t.length!==e)return;let n=[];for(let e of t){if(e.kind!==`NumLit`)return;n.push(e.value)}return e===2?e0([n[0],n[1]]):$1([n[0],n[1],n[2]])}function C4(e){switch(e.kind){case`Box`:return A0(x4(e.x),x4(e.y),x4(e.z));case`Sphere`:return j0(x4(e.radius));case`Cylinder`:return M0(x4(e.radius),x4(e.height));case`Cone`:return N0(x4(e.radius1),x4(e.radius2),x4(e.height));case`Torus`:return P0(x4(e.majorRadius),x4(e.minorRadius));case`Polygon`:return F0(e.points.map(x4));case`Circle`:return I0(x4(e.radius));case`Line`:return L0(x4(e.from),x4(e.to));case`Vertex`:return R0(x4(e.point));case`Empty`:return e;case`Fuse`:return w4(e.a,e.b,e.tolerance);case`Cut`:return T4(e.a,e.b,e.tolerance);case`Intersect`:return E4(e.a,e.b,e.tolerance);case`FuseAll`:return D4(e.shapes,e.tolerance);case`CutAll`:return O4(e.base,e.tools,e.tolerance);case`Translate`:return k4(e.target,e.vector);case`Rotate`:return Z0(C4(e.target),x4(e.angle),{axis:e.axis?x4(e.axis):void 0,at:e.at?x4(e.at):void 0});case`Scale`:return Q0(C4(e.target),x4(e.factor),{center:e.center?x4(e.center):void 0});case`Mirror`:return $0(C4(e.target),{normal:e.normal?x4(e.normal):void 0,at:e.at?x4(e.at):void 0});case`Compound`:return e2(e.children.map(C4).filter(e=>e.kind!==`Empty`))}}function w4(e,t,n){let r=C4(e),i=C4(t);return r.kind===`Empty`?i:i.kind===`Empty`?r:W0(r,i,n)}function T4(e,t,n){let r=C4(e),i=C4(t);return i.kind===`Empty`||r.kind===`Empty`?r:G0(r,i,n)}function E4(e,t,n){let r=C4(e),i=C4(t);return r.kind===`Empty`?r:i.kind===`Empty`?i:K0(r,i,n)}function D4(e,t){let n=e.map(C4).filter(e=>e.kind!==`Empty`);return n.length===0?B0():n.length===1?n[0]:q0(n,t)}function O4(e,t,n){let r=C4(e);if(r.kind===`Empty`)return r;let i=t.map(C4).filter(e=>e.kind!==`Empty`);return i.length===0?r:J0(r,i,n)}function k4(e,t){let n=C4(e),r=x4(t);if(r.kind!==`Vec3Lit`)return X0(n,r);let[i,a,o]=r.value;if(i===0&&a===0&&o===0)return n;if(n.kind===`Translate`){let e=x4(n.vector);if(e.kind===`Vec3Lit`)return X0(n.target,[e.value[0]+i,e.value[1]+a,e.value[2]+o])}return X0(n,r)}function A4(e,t,n){return j4(e,t,n)}function j4(e,t,n){return t(e)?n:M4(e,t,n)}function M4(e,t,n){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:return e;case`Fuse`:return W0(j4(e.a,t,n),j4(e.b,t,n),e.tolerance);case`Cut`:return G0(j4(e.a,t,n),j4(e.b,t,n),e.tolerance);case`Intersect`:return K0(j4(e.a,t,n),j4(e.b,t,n),e.tolerance);case`FuseAll`:return q0(e.shapes.map(e=>j4(e,t,n)),e.tolerance);case`CutAll`:return J0(j4(e.base,t,n),e.tools.map(e=>j4(e,t,n)),e.tolerance);case`Translate`:return X0(j4(e.target,t,n),e.vector);case`Rotate`:return Z0(j4(e.target,t,n),e.angle,{axis:e.axis,at:e.at});case`Scale`:return Q0(j4(e.target,t,n),e.factor,{center:e.center});case`Mirror`:return $0(j4(e.target,t,n),{normal:e.normal,at:e.at});case`Compound`:return e2(e.children.map(e=>j4(e,t,n)))}}function N4(e,t){t(e);for(let n of P4(e))N4(n,t)}function P4(e){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:return[];case`Fuse`:case`Cut`:case`Intersect`:return[e.a,e.b];case`FuseAll`:return e.shapes;case`CutAll`:return[e.base,...e.tools];case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return[e.target];case`Compound`:return e.children}}function F4(e){let t=0;return N4(e,()=>{t++}),t}var I4=UJ({CSG_VERSION:()=>1,Evaluator:()=>M2,add:()=>o0,asScalarExpr:()=>c0,asVec2Expr:()=>d0,asVec3Expr:()=>u0,binOp:()=>n0,box:()=>A0,buildVec:()=>a0,circle:()=>I0,component:()=>i0,compound:()=>e2,cone:()=>N0,cut:()=>G0,cutAll:()=>J0,cylinder:()=>M0,emptyFace:()=>V0,emptySolid:()=>B0,emptyWire:()=>H0,foldExpr:()=>x4,forEachNode:()=>N4,fromJSON:()=>q2,fuse:()=>W0,fuseAll:()=>q0,intersect:()=>K0,line:()=>L0,mirror:()=>$0,mul:()=>s0,nodeCount:()=>F4,numLit:()=>Q1,optimize:()=>b4,outputKindOf:()=>t2,param:()=>t0,polygon:()=>F0,replaceNode:()=>A4,rotate:()=>Z0,scale:()=>Q0,sphere:()=>j0,toJSON:()=>P2,torus:()=>P0,translate:()=>X0,unaryOp:()=>r0,vec2Lit:()=>e0,vec3Lit:()=>$1,vertex:()=>R0,withEvaluator:()=>N2});export{yI as BaseSketcher2d,bI as BlueprintSketcher,no as BrepBugError,N as BrepErrorCode,_$ as BrepWrapperError,Ty as BrepkitAdapter,YW as CompoundSketch,i as DEFAULT_CAPABILITIES,iD as DEG2RAD,FT as DisposalScope,r as EXACT_BREP_CAPABILITIES,OG as FaceSketcher,G as HASH_CODE_MAX,Ma as OK,ja as OcctWasmAdapter,aD as RAD2DEG,dG as Sketch,DG as Sketcher,fG as Sketches,IM as addChild,kM as addHoles,pN as addJoint,eQ as addMate,JN as addStep,GA as adjacentFaces,Va as all,Ia as andThen,KJ as applyGlue,MQ as applyMatrix,pk as approximateCurve,GT as as2D,WT as as3D,ID as asTopo,bJ as assignRoles,Lj as autoHeal,gM as bezier,Eq as blueprintToDXF,bA as booleanPipeline,E1 as booleans,m$ as boss,rM as box,hM as bsplineApprox,M as bug,wG as cameraFromPlane,CG as cameraLookAt,_J as captureHint,VD as cast,W as castShape,EE as castShape3D,qQ as chamfer,LA as chamferDistAngleShape,hj as chamferWithEvolution,rQ as checkAllInterferences,oj as checkBoolean,nQ as checkInterference,uM as circle,PM as circularPattern,nO as classifyPointOnFace,Ck as clearMeshCache,jQ as clone,eE as closedWire,Qa as collect,HM as collectShapes,kO as colorFaces,OO as colorShape,Kj as complexExtrude,GO as composeTransforms,TM as compound,cG as compoundSketchExtrude,oG as compoundSketchFace,uG as compoundSketchLoft,lG as compoundSketchRevolve,I as computationError,_Z as computeStraightSkeleton,oM as cone,M1 as construction,ZX as convexHull,TI as cornerFinder,VM as countNodes,jM as createAssembly,FM as createAssemblyNode,BK as createBlueprint,SG as createCamera,gE as createCompound,VK as createCompoundBlueprint,SP as createDistanceQuery,uE as createEdge,fE as createFace,NT as createHandle,qN as createHistory,PT as createKernelHandle,wk as createMeshCache,kD as createNamedPlane,zJ as createOperationRegistry,DD as createPlane,xJ as createRef,tP as createRegistry,pE as createShell,mE as createSolid,jJ as createTaskQueue,lE as createVertex,dE as createWire,RJ as createWorkerClient,VJ as createWorkerHandler,I4 as csg,vo as currentQuality,MK as curve2dBoundingBox,zK as curve2dDistanceFrom,NK as curve2dFirstPoint,RK as curve2dIsOnCurve,PK as curve2dLastPoint,IK as curve2dParameter,FK as curve2dSplitAt,LK as curve2dTangentAt,ok as curveAxis,nk as curveEndPoint,sk as curveIsClosed,ck as curveIsPeriodic,ak as curveLength,lk as curvePeriod,rk as curvePointAt,tk as curveStartPoint,ik as curveTangentAt,FQ as cut,dL as cut2D,LQ as cutAll,ZA as cutAllBisect,eL as cutBlueprints,fj as cutWithEvolution,iM as cylinder,oN as cylindricalJoint,gJ as defaultScorer,NJ as dequeueTask,n$ as describe,aK as deserializeDrawing,sP as deserializeHistory,UD as deserializeShape,BD as downcast,ZQ as draft,sK as draw,fK as drawCircle,pK as drawEllipse,bK as drawFaceOutline,_K as drawParametricFunction,gK as drawPointsInterpolation,mK as drawPolysides,yK as drawProjection,lK as drawRectangle,cK as drawRoundedRectangle,uK as drawSingleCircle,dK as drawSingleEllipse,hK as drawText,EK as drawingChamfer,CK as drawingCut,TK as drawingFillet,SK as drawingFuse,wK as drawingIntersect,xK as drawingToSketchOnPlane,f$ as drill,YP as edgeFinder,HA as edgesOfFace,dM as ellipse,mM as ellipseArc,cM as ellipsoid,MJ as enqueueTask,k as err,MM as exportAssemblySTEP,Tq as exportDXF,fq as exportGlb,dq as exportGltf,Mk as exportIGES,tq as exportOBJ,Ak as exportSTEP,lJ as exportSTEPConfigured,jk as exportSTL,Gq as exportThreeMF,HN as exportURDF,s$ as extrude,eM as extrudeAll,bM as face,tO as faceAxis,eO as faceCenter,QP as faceFinder,KD as faceGeomType,qD as faceOrientation,VA as facesOfEdge,zY as fieldBoolean,UY as fieldContour,BY as fieldOffset,HY as fieldReinit,VY as fieldShell,Zk as fill,xM as filledFace,KQ as fillet,mj as filletWithEvolution,_O as findFacesByTag,zM as findNode,XN as findStep,Bj as fixSelfIntersection,Rj as fixShape,La as flatMap,Wa as flatten,JD as flipFaceOrientation,dk as flipOrientation,hJ as fontMetrics,_N as forwardKinematics,i$ as fromBREP,RX as fromKernelDir,LX as fromKernelPnt,IX as fromKernelVec,Ka as fromNullable,PQ as fuse,lL as fuse2D,IQ as fuseAll,tj as fuseAllBisect,$I as fuseBlueprints,dj as fuseWithEvolution,V$ as gearGeometry,iY as getActiveVoxelId,QE as getBounds,HK as getBounds2D,WE as getCompSolids,ek as getCurveType,DT as getDisposalStats,RE as getEdges,jO as getFaceColor,sO as getFaceOrigins,vO as getFaceTags,zE as getFaces,hG as getFont,YO as getHashCode,ZN as getHistoryShape,U as getKernel,mT as getKernelCapabilities,vT as getKernelTier,qA as getNurbsCurveData,JA as getNurbsSurfaceData,uk as getOrientation,UK as getOrientation2D,Do as getPerformanceStats,AO as getShapeColor,YT as getShapeKind,UE as getShells,tF as getSingleFace,HE as getSolids,GD as getSurfaceType,bO as getTagMetadata,VE as getVertices,rY as getVoxel,BE as getWires,Zj as guidedSweep,QQ as heal,Pj as healFace,Nj as healSolid,Fj as healWire,fM as helix,XX as hull,cQ as importDXF,TQ as importGLB,fJ as importIGES,fQ as importOBJ,uJ as importSTEP,dJ as importSTL,cJ as importSVG,sJ as importSVGPathD,wQ as importThreeMF,KN as importURDF,ST as init,lT as initFromManifold,bT as initFromOC,aY as initVoxel,aO as innerWires,fk as interpolateCurve,RQ as intersect,fL as intersect2D,tL as intersectBlueprints,pj as intersectWithEvolution,LE as invalidateShapeCache,jN as inverseKinematics,A1 as io,fo as ioError,UT as is2D,HT as is3D,JJ as isChamferRadius,XT as isClosedWire,HD as isCompSolid,CE as isCompound,OJ as isDisposeRequest,vE as isEdge,o$ as isEmpty,QO as isEqualShape,A as isErr,AJ as isErrorResponse,bE as isFace,YJ as isFilletRadius,EJ as isInitRequest,WK as isInside2D,VT as isLive,QT as isManifoldShell,qJ as isNumber,Na as isOk,DJ as isOperationRequest,ZT as isOrientedFace,iE as isPlanarFace,aE as isPlanarWire,yG as isProjectionPlane,FJ as isQueueEmpty,ZO as isSameShape,TE as isShape1D,wE as isShape3D,xE as isShell,SE as isSolid,kJ as isSuccessResponse,a$ as isValid,$T as isValidSolid,_E as isVertex,yE as isWire,ZE as iterCompSolids,GE as iterEdges,KE as iterFaces,XE as iterShells,YE as iterSolids,RD as iterTopo,JE as iterVertices,qE as iterWires,NN as jointTrajectory,fN as jointTransform,IN as jointsFromDH,AE as kernelCall,jE as kernelCallRaw,ME as kernelCallScoped,P as kernelError,AX as latticeInfill,jX as latticeInfillShape,lM as line,NM as linearPattern,mG as loadFont,l$ as loft,nM as loftAll,RG as makeBaseBox,u1 as makeExternalGear,d1 as makeInternalGear,jD as makePlane,p1 as makePlanetaryGear,xG as makeProjectedEdges,nE as manifoldShell,Pa as map,Ga as mapBoth,Fa as mapErr,Za as match,vP as measureArea,CP as measureCurvatureAt,wP as measureCurvatureAtMid,bP as measureDistance,xP as measureDistanceProps,yP as measureLength,gP as measureLinearProps,hP as measureSurfaceProps,_P as measureVolume,mP as measureVolumeProps,k1 as measurement,vN as mechanismDOF,e$ as mesh,t$ as meshEdges,Nk as meshMultiLOD,tZ as minkowski,kQ as mirror,YK as mirror2D,AK as mirrorDrawing,h$ as mirrorJoin,D1 as modifiers,aP as modifyStep,uo as moduleInitError,Xj as multiSectionSweep,$D as normalAt,YQ as offset,DM as offsetFace,xY as offsetMesh,wY as offsetShape,mk as offsetWire2D,O as ok,Ra as or,za as orElse,lI as organiseBlueprints,tE as orientedFace,rO as outerWire,N1 as patterns,PJ as pendingCount,to as pipeline,PD as pivotPlane,oE as planarFace,sN as planarJoint,sE as planarWire,a1 as planetPlacements,p$ as pocket,XD as pointOnSurface,uY as pointsInside,CM as polygon,nZ as polyhedron,PG as polysideInnerRadius,EI as polysidesBlueprint,_j as positionOnCurve,xT as prewarm,T1 as primitives,aN as prismaticJoint,TG as projectEdges,QD as projectPointOnFace,j1 as query,po as queryError,g$ as rectangularPattern,BJ as registerHandler,uT as registerKernel,_T as registerKernelTier,nP as registerOperation,eP as registerShape,nY as registerVoxel,IJ as rejectAll,LM as removeChild,iO as removeHolesFromFace,pY as repairMesh,iP as replayFrom,rP as replayHistory,OT as resetDisposalStats,Oo as resetPerformanceStats,BO as resize,$ as resolve,EQ as resolve3D,lD as resolveDirection,AD as resolvePlane,TJ as resolveRef,jK as reverseCurve,iN as revoluteJoint,c$ as revolve,TZ as roof,OQ as rotate,qK as rotate2D,OK as rotateDrawing,DI as roundedRectangleBlueprint,AQ as scale,JK as scale2D,kK as scaleDrawing,aX as sdfBox,lX as sdfCapsule,cX as sdfCone,sX as sdfCylinder,xX as sdfFieldAxialRamp,wX as sdfFieldClamp,bX as sdfFieldConst,CX as sdfFieldFromSdf,SX as sdfFieldRadialRamp,hX as sdfLattice,dX as sdfPlane,oX as sdfRoundedBox,iX as sdfSphere,gX as sdfStrutLattice,pX as sdfSweep,uX as sdfTorus,zQ as section,BQ as sectionToFace,oP as serializeHistory,uN as setJointValue,lN as setJointValues,oO as setShapeOrigin,yO as setTagMetadata,OM as sewShells,F$ as shape,hY as shapeToMeshInput,zD as shapeType,KA as sharedEdges,JQ as shell,SY as shellMesh,TY as shellShape,gj as shellWithEvolution,$Q as simplify,kG as sketchCircle,AG as sketchEllipse,nG as sketchExtrude,$W as sketchFace,FG as sketchFaceOffset,LG as sketchHelix,iG as sketchLoft,QK as sketchOnFace2D,ZK as sketchOnPlane2D,IG as sketchParametricFunction,NG as sketchPolysides,jG as sketchRectangle,tG as sketchRevolve,MG as sketchRoundedRectangle,rG as sketchSweep,pJ as sketchText,eG as sketchWires,lo as sketcherStateError,HQ as slice,EM as solid,zj as solidFromShell,tQ as solveAssembly,aM as sphere,cN as sphericalJoint,VQ as split,QN as stepCount,$N as stepsFrom,XK as stretch2D,SM as subFace,Gj as supportExtrude,aT as supportsConstraintSketch,iT as supportsProjection,GX as surfaceFromGrid,JX as surfaceFromImage,Wj as sweep,gO as tagFaces,_M as tangentArc,Ha as tap,Ua as tapErr,_G as textBlueprints,mJ as textMetrics,XQ as thicken,cP as thread,pM as threePointArc,r$ as toBREP,NA as toBufferGeometryData,PA as toGroupedBufferGeometryData,NX as toKernelVec,IA as toLODGeometryData,FA as toLineGeometryData,GK as toSVGPathD,sD as toVec2,oD as toVec3,sM as torus,MX as tpmsLattice,NQ as transformCopy,O1 as transforms,DQ as translate,KK as translate2D,DK as translateDrawing,ND as translatePlane,$a as tryCatch,eo as tryCatchAsync,qj as twistExtrude,co as typeCastError,YN as undoLast,mo as unsupportedError,j as unwrap,Xa as unwrapErr,Ja as unwrapOr,Ya as unwrapOrElse,RM as updateNode,SJ as updateRoles,YD as uvBounds,ZD as uvCoordinates,rE as validSolid,K$ as validatePlanetary,F as validationError,jj as variableFillet,uD as vecAdd,SD as vecAngle,hD as vecCross,vD as vecDistance,mD as vecDot,bD as vecEquals,xD as vecIsZero,gD as vecLength,_D as vecLengthSq,pD as vecNegate,yD as vecNormalize,CD as vecProjectToPlane,ED as vecRepr,wD as vecRotate,fD as vecScale,dD as vecSub,wM as vertex,QJ as vertexFinder,rD as vertexPosition,WA as verticesOfEdge,CY as voxelBoolean,RY as voxelBooleanField,GY as voxelBooleanFieldShapes,EY as voxelBooleanShapes,LY as voxelField,WY as voxelFieldFromShape,BM as walkAssembly,lY as windingNumbers,vM as wire,eF as wireFinder,yM as wireLoop,UA as wiresOfFace,pT as withKernel,VX as withKernelDir,BX as withKernelPnt,zX as withKernelVec,hT as withQuality,IT as withScope,zT as withScopeResult,BT as withScopeResultAsync,yT as withTier,Ba as zipResults};
|