brepjs-cad 0.30.0 → 0.31.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 CHANGED
@@ -1,5 +1,42 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.31.0](https://github.com/andymai/brepjs/compare/brepjs-cad-v0.30.1...brepjs-cad-v0.31.0) (2026-06-22)
4
+
5
+
6
+ ### Features
7
+
8
+ * **brepjs-cad:** add airfoils.md feature recipe (swept fans/props/impellers) ([#1566](https://github.com/andymai/brepjs/issues/1566)) ([8c786db](https://github.com/andymai/brepjs/commit/8c786db69ead59edcdc9d0f8525e43324552e4db))
9
+ * **brepjs-cad:** aimed section cut for the design judge (Phase 3) ([#1543](https://github.com/andymai/brepjs/issues/1543)) ([40e5acd](https://github.com/andymai/brepjs/commit/40e5acd54318d768dc5a620403d17d43e358e698))
10
+ * **brepjs-cad:** CLI subcommands + verify hints + gridfinity examples + eval harness ([#1204](https://github.com/andymai/brepjs/issues/1204)) ([4d57198](https://github.com/andymai/brepjs/commit/4d5719874b5f5e685a4f909fd2d2363c0331770b))
11
+ * **brepjs-cad:** decomposed, cross-checked design-judge rubric (Phase 1.5) ([#1539](https://github.com/andymai/brepjs/issues/1539)) ([8059b6d](https://github.com/andymai/brepjs/commit/8059b6d701ae5980e6bb11f51695aa102fe2bb43))
12
+ * **brepjs-cad:** deterministic body/interference metrics for the design judge (Phase 1) ([#1531](https://github.com/andymai/brepjs/issues/1531)) ([d296b54](https://github.com/andymai/brepjs/commit/d296b545f2d7084b861683d61b626ace4747a371))
13
+ * **brepjs-cad:** kernel-anchored Set-of-Marks for the design judge ([#1545](https://github.com/andymai/brepjs/issues/1545)) ([2b6f5b4](https://github.com/andymai/brepjs/commit/2b6f5b436f2a73c96747cc71f83afc8715765cd0))
14
+ * **brepjs-cad:** reliable internal-bore detection for the design judge (keystone) ([#1542](https://github.com/andymai/brepjs/issues/1542)) ([0d780c3](https://github.com/andymai/brepjs/commit/0d780c3b73c2551dab2f04a6ff31bf9ec8cae2ab))
15
+ * **brepjs-cad:** rename from brepjs-agent + make npm-publishable (publish held) ([#1201](https://github.com/andymai/brepjs/issues/1201)) ([630bbba](https://github.com/andymai/brepjs/commit/630bbbab4885604bd4d5fb2148584a6572c8d99c))
16
+ * **brepjs-cad:** surface fragmentation in verify --check (the [#1](https://github.com/andymai/brepjs/issues/1) design defect) ([#1560](https://github.com/andymai/brepjs/issues/1560)) ([45a4f6e](https://github.com/andymai/brepjs/commit/45a4f6e268331b7816cd9957fbdab4c0893b2000))
17
+ * **brepjs-cad:** xray internal-reveal shot for the design judge (Phase 2a) ([#1540](https://github.com/andymai/brepjs/issues/1540)) ([eca5bc9](https://github.com/andymai/brepjs/commit/eca5bc9ad20fc7947132d647952245cfe466a7f4))
18
+
19
+
20
+ ### Bug Fixes
21
+
22
+ * **brepjs-cad:** add a triangular-gusset recipe to the implement skill (bracket/enclosure eval) ([#1571](https://github.com/andymai/brepjs/issues/1571)) ([346d042](https://github.com/andymai/brepjs/commit/346d0423fefa3bd163f4075f69bf96d478543bf5))
23
+ * **brepjs-cad:** add the "realize the designed object" bar to the implement skill ([#1563](https://github.com/andymai/brepjs/issues/1563)) ([e150357](https://github.com/andymai/brepjs/commit/e1503570aaf271ebef1e39d48be9c70a5ffe8f03))
24
+ * **brepjs-cad:** close gear-teeth edge cases found by /eval-skill (ring, worm tip relief, GT2) ([#1548](https://github.com/andymai/brepjs/issues/1548)) ([4bd0494](https://github.com/andymai/brepjs/commit/4bd049401f3affcc3f38e3a31bb9520653a3e89c))
25
+ * **brepjs-cad:** code + hint the degenerate-edge (duplicate-vertex) verify failure ([#1550](https://github.com/andymai/brepjs/issues/1550)) ([502dffc](https://github.com/andymai/brepjs/commit/502dffc4a2ae495ae5c98b0c7966721abe0d5f48))
26
+ * **brepjs-cad:** correct spur-gear example flanks + add root fillet ([#1528](https://github.com/andymai/brepjs/issues/1528)) ([6971c6b](https://github.com/andymai/brepjs/commit/6971c6befa1fea36a8c2f3ee89c4aa20946020c7))
27
+ * **brepjs-cad:** exploded-joint legibility + disjoint-compound caveat (basics eval) ([#1565](https://github.com/andymai/brepjs/issues/1565)) ([9d06121](https://github.com/andymai/brepjs/commit/9d0612111a595e57fcfca6fd191ed9169fc2c062))
28
+ * **brepjs-cad:** handle brepjs/playground refs + summarize body relations in the digest ([#1547](https://github.com/andymai/brepjs/issues/1547)) ([b0acef0](https://github.com/andymai/brepjs/commit/b0acef0ad80cdd61f0d2683f1e6d0ece0cae028e))
29
+ * **brepjs-cad:** heal 6 implement-skill findings from the full-flywheel re-run ([#1568](https://github.com/andymai/brepjs/issues/1568)) ([f63bf3d](https://github.com/andymai/brepjs/commit/f63bf3d5a0aa638d06e11dd7e2c27e84dbf74746))
30
+ * **brepjs-cad:** heal implement + polish skills from clean-room eval ([#1526](https://github.com/andymai/brepjs/issues/1526)) ([0645e16](https://github.com/andymai/brepjs/commit/0645e163e1d8759c95406d0f9526d0aa3b5dd480))
31
+ * **brepjs-cad:** heal implement skill — deep-stack bounds extremes aren't datums ([#1529](https://github.com/andymai/brepjs/issues/1529)) ([5ed366f](https://github.com/andymai/brepjs/commit/5ed366f266b3e6e50ae4b54d5779aa05453e894a))
32
+ * **brepjs-cad:** heal implement skill from the eval flywheel (3 findings) ([#1552](https://github.com/andymai/brepjs/issues/1552)) ([51def82](https://github.com/andymai/brepjs/commit/51def82db4e0600e85f45e4dd828cc9caee58d15))
33
+ * **brepjs-cad:** heal implement skill from the full-corpus eval flywheel (4 findings) ([#1554](https://github.com/andymai/brepjs/issues/1554)) ([3cfc28e](https://github.com/andymai/brepjs/commit/3cfc28ed8b82c46330f1d75f1e98c13fd4d65a06))
34
+ * **brepjs-cad:** load .ts parts via native type-stripping ([#1207](https://github.com/andymai/brepjs/issues/1207)) ([198078b](https://github.com/andymai/brepjs/commit/198078becf570614c0cbf61537714fc94c2de43a))
35
+ * **brepjs-cad:** make blind-judge reference adaptation render multi-body parts at scale ([#1530](https://github.com/andymai/brepjs/issues/1530)) ([18d4523](https://github.com/andymai/brepjs/commit/18d4523c85e1b22496bb5c0b8fb382a1146429c6))
36
+ * **brepjs-cad:** polish skill — bosses on shells must fuse, or they float (eval finding) ([#1553](https://github.com/andymai/brepjs/issues/1553)) ([07cbf93](https://github.com/andymai/brepjs/commit/07cbf93e47fbf880df53bc2a1cee05bf0d17e2d5))
37
+ * **brepjs-cad:** run CLI via bin symlink + quality pass ([#1206](https://github.com/andymai/brepjs/issues/1206)) ([ac5b1fe](https://github.com/andymai/brepjs/commit/ac5b1feee3c5b424c37716ca06c397f7898838f1))
38
+ * **brepjs-cad:** teach worm-wheel and rack tooth recipes; fix gear-build contradiction ([#1544](https://github.com/andymai/brepjs/issues/1544)) ([b0da85f](https://github.com/andymai/brepjs/commit/b0da85f218d463e0f1ef0ca8760cec54b4814b02))
39
+
3
40
  ## [0.30.0](https://github.com/andymai/brepjs/compare/brepjs-cad-v0.29.0...brepjs-cad-v0.30.0) (2026-06-22)
4
41
 
5
42
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "brepjs-cad",
3
- "version": "0.30.0",
3
+ "version": "0.31.0",
4
4
  "description": "Brainstorm → design → author → verify → polish pipeline for parametric brepjs CAD, with the brep CLI",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -4,7 +4,7 @@ var e=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports);function
4
4
  `)+`
5
5
  `).buffer}function br(e,t,n){let r=e(t,{tolerance:n,angularTolerance:.5,skipNormals:!1}),i=r.vertices,a=r.normals,o=r.triangles,s=i.length/3,c=o.length/3,l=a.length===i.length,u=[`ply`,`format ascii 1.0`,`comment brepjs PLY export`,`element vertex ${s}`,`property float x`,`property float y`,`property float z`];l&&u.push(`property float nx`,`property float ny`,`property float nz`),u.push(`element face ${c}`,`property list uchar int vertex_index`,`end_header`);for(let e=0;e<s;e++){let t=e*3,n=i[t]??0,r=i[t+1]??0,o=i[t+2]??0;if(l){let e=a[t]??0,i=a[t+1]??0,s=a[t+2]??0;u.push(`${n} ${r} ${o} ${e} ${i} ${s}`)}else u.push(`${n} ${r} ${o}`)}for(let e=0;e<c;e++){let t=o[e*3]??0,n=o[e*3+1]??0,r=o[e*3+2]??0;u.push(`3 ${t} ${n} ${r}`)}return new TextEncoder().encode(u.join(`
6
6
  `)+`
7
- `).buffer}function xr(e,t){return e.toBREP(E(t))}function Sr(e,t){return D(e,e.fromBREP(t))}function Cr(e,t,n){let r=e.xcafNewDocument();for(let t of n){let n=e.xcafAddShape(r,E(t.shape));if(t.name&&e.xcafSetName(r,n,t.name),t.color){let[i,a,o]=t.color;e.xcafSetColor(r,n,i/255,a/255,o/255)}}return T(`compound`,r)}function wr(e,t,n){let r=E(t),i=e.xcafGetRootLabels(r),a=(()=>{try{return i.size()>0}finally{i.delete()}})();try{return a?e.xcafExportSTEP(r):``}finally{e.xcafClose(r)}}function Tr(e,t,n,r){if(n.length===0)return``;let i=Cr(e,t,n.map(e=>({shape:e.shape,name:e.name??``,color:e.color})));try{return wr(e,i)}finally{i.delete()}}function Er(e,t,n,r){return T(`vertex`,e.makeVertex(t,n,r))}function Dr(e,t){throw De(t)?Error(`occt-wasm: makeEdge from curve handle is not implemented`):Error(`occt-wasm: makeEdge is not implemented`)}function Or(e,t,n){let r=ke(t,n.map(E));try{return T(`wire`,e.makeWire(r))}finally{r.delete()}}function kr(e,t,n){let r=[];for(let t of n){let n=e.getSubShapes(E(t),`edge`);try{let e=n.size();for(let t=0;t<e;t++)r.push(n.get(t))}finally{n.delete()}}let i=ke(t,r);try{return T(`wire`,e.makeWire(i))}finally{i.delete()}}function Ar(e,t,n){return T(`face`,e.makeFace(E(t)))}function jr(e,t,n){return T(`edge`,e.makeLineEdge(t[0],t[1],t[2],n[0],n[1],n[2]))}function Mr(e,t,n,r){return T(`edge`,e.makeCircleEdge(t[0],t[1],t[2],n[0],n[1],n[2],r))}function Nr(e,t,n,r,i,a){return T(`edge`,e.makeCircleArc(t[0],t[1],t[2],n[0],n[1],n[2],r,i,a))}function Pr(e,t,n,r){return T(`edge`,e.makeArcEdge(t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]))}function Fr(e,t,n,r,i){return T(`edge`,e.makeEllipseEdge(t[0],t[1],t[2],n[0],n[1],n[2],r,i))}function Ir(e,t,n,r,i,a,o){return T(`edge`,e.makeEllipseArc(t[0],t[1],t[2],n[0],n[1],n[2],r,i,a,o))}function Lr(e,t,n){let r=[];for(let e of n)r.push(e[0],e[1],e[2]);let i=je(t,r);try{return T(`edge`,e.makeBezierEdge(i))}finally{i.delete()}}function Rr(e,t,n,r){let[i,a,o]=t,[s,c,l]=n,[u,d,f]=r;return T(`edge`,e.makeTangentArc(i,a,o,s,c,l,u,d,f))}function zr(e,t,n,r,i,a){let o=i?i[0]:0,s=i?i[1]:0,c=i?i[2]:0,l=a?a[0]:0,u=a?a[1]:0,d=a?a[2]:1,f=e.makeHelixWire(o,s,c,l,u,d,t,n,r);return e.buildCurves3d(f),T(`wire`,f)}function Br(e,t,n){let r=ke(t,n.map(E));try{return T(`compound`,e.makeCompound(r))}finally{r.delete()}}function Vr(e,t){return T(`solid`,e.solidFromShell(E(t)))}function Hr(e,t,n,r,i){let a=[];for(let[t,i,o]of r){let r=n[t],s=n[i],c=n[o];!r||!s||!c||a.push(e.buildTriFace(r.x,r.y,r.z,s.x,s.y,s.z,c.x,c.y,c.z))}let o=ke(t,a);try{let t=e.sewAndSolidify(o,i);return t=e.fixFaceOrientations(t),D(e,t)}finally{o.delete()}}function Ur(e,t){return T(`face`,e.makeNonPlanarFace(E(t)))}function Wr(e,t,n,r){let i=ke(t,r.map(E));try{return T(`face`,e.addHolesInFace(E(n),i))}finally{i.delete()}}function Gr(e,t,n){let r=e.getSubShapes(E(n),`wire`),i=(()=>{try{return r.size()-1}finally{r.delete()}})(),a=[];for(let e=0;e<i;e++)a.push(e);let o=Ae(t,a);try{return T(`face`,e.removeHolesFromFace(E(n),o))}finally{o.delete()}}function Kr(e,t,n){let r=E(t);return T(`face`,e.makeFaceOnSurface(r,E(n)))}function qr(e,t,n,r,i){let a=new t.VectorDouble;for(let[e,t,r]of n)a.push_back(e),a.push_back(t),a.push_back(r);try{return T(`face`,e.bsplineSurface(a,r,i))}finally{a.delete()}}function Jr(e,t,n,r,i){let a=[];for(let t=0;t<r-1;t++)for(let r=0;r<i-1;r++){let o=t*i+r,s=(t+1)*i+r,c=t*i+(r+1),l=(t+1)*i+(r+1),u=n[o],d=n[s],f=n[c],p=n[l];u&&d&&f&&a.push(e.buildTriFace(u[0],u[1],u[2],d[0],d[1],d[2],f[0],f[1],f[2])),d&&p&&f&&a.push(e.buildTriFace(d[0],d[1],d[2],p[0],p[1],p[2],f[0],f[1],f[2]))}let o=ke(t,a);try{return D(e,e.sewAndSolidify(o,.001))}finally{o.delete()}}function Yr(e,t,n,r){let i=e.buildTriFace(t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]);return i===0?null:T(`face`,i)}function Xr(e,t,n,r){let i=ke(t,n.map(E));try{let t=e.sewAndSolidify(i,r);return t=e.fixFaceOrientations(t),T(`solid`,t)}finally{i.delete()}}function Zr(e,t,n){return{x:e,y:t,z:n,__type:`point3d`,delete:Ee}}function Qr(e,t,n){return{x:e,y:t,z:n,__type:`direction3d`,delete:Ee}}function $r(e,t,n){return{x:e,y:t,z:n,__type:`vector3d`,delete:Ee}}function ei(e,t,n,r,i,a){return{origin:{x:e,y:t,z:n},direction:{x:r,y:i,z:a},__type:`axis1`,delete:Ee}}function ti(e,t,n,r,i,a,o,s,c){return{origin:{x:e,y:t,z:n},zDir:{x:r,y:i,z:a},xDir:o===void 0?void 0:{x:o,y:s,z:c},__type:`axis2`,delete:Ee}}function ni(e,t,n,r,i,a,o,s,c){return{origin:{x:e,y:t,z:n},zDir:{x:r,y:i,z:a},xDir:o===void 0?void 0:{x:o,y:s,z:c},__type:`axis3`,delete:Ee}}function ri(e){return e}function ii(e){return e}function ai(e,t){return{x:e,y:t}}function oi(e,t){let n=Math.sqrt(e*e+t*t);if(n<1e-15)throw Error(`occt-wasm: createDirection2d called with zero-length vector`);return{x:e/n,y:t/n}}function si(e,t){return{x:e,y:t}}function ci(e,t,n,r){return{px:e,py:t,dx:n,dy:r,delete(){}}}function li(e){return e}function ui(e,t,n,r){return ii(x(e,t,n,r))}function di(e,t,n,r){return ii(S(e,t,n,r))}function fi(e,t,n,r,i,a){let o=2*(e*(r-a)+n*(a-t)+i*(t-r));if(Math.abs(o)<1e-12)return ii(x(e,t,i,a));let s=((e*e+t*t)*(r-a)+(n*n+r*r)*(a-t)+(i*i+a*a)*(t-r))/o,c=((e*e+t*t)*(i-n)+(n*n+r*r)*(e-i)+(i*i+a*a)*(n-e))/o,l=Math.sqrt((e-s)**2+(t-c)**2),u=Math.atan2(t-c,e-s),d=Math.atan2(r-c,n-s),f=Math.atan2(a-c,i-s),p=d-u;p<0&&(p+=2*Math.PI);let m=f-u;m<0&&(m+=2*Math.PI);let h=p<m,g=S(s,c,l,h);if(!h){let e=-u,t=-f;return t<e-1e-9&&(t+=2*Math.PI),ii({__bk2d:`trimmed`,basis:g,tStart:e,tEnd:t})}let _=f;return _<u-1e-9&&(_+=2*Math.PI),ii({__bk2d:`trimmed`,basis:g,tStart:u,tEnd:_})}function pi(e,t,n,r,i,a){let o=Math.sqrt(n*n+r*r),s=o>0?n/o:0,c=o>0?r/o:0,l=e-i,u=t-a,d=2*(u*s-l*c);if(Math.abs(d)<1e-12)return ii(x(e,t,i,a));let f=-(l*l+u*u)/d,p=e-f*c,m=t+f*s,h=Math.abs(f),g=Math.atan2(t-m,e-p),_=Math.atan2(a-m,i-p),v=-(t-m)/h,y=(e-p)/h,b=v*s+y*c>0,C=S(p,m,h,b);if(!b){let e=-g,t=-_;return t<e-1e-9&&(t+=2*Math.PI),ii({__bk2d:`trimmed`,basis:C,tStart:e,tEnd:t})}let w=_;return w<g-1e-9&&(w+=2*Math.PI),ii({__bk2d:`trimmed`,basis:C,tStart:g,tEnd:w})}function mi(e,t,n,r,i,a,o){return ii(C(e,t,n,r,i??1,a??0,o??!0))}function hi(e,t,n,r,i,a,o,s,c){return ii({...C(e,t,n,r,o??1,s??0,c??!0),__bk2d:`ellipse`,startAngle:i,endAngle:a})}function gi(e){return ii(w(e))}function _i(e,t){let n=e,r=n.length,i=Math.max(1,Math.min(t?.degMax??3,r-1)),a=[0],o=[i+1],s=r-i-1;for(let e=1;e<=s;e++)a.push(e/(s+1)),o.push(1);return a.push(1),o.push(i+1),ii({__bk2d:`bspline`,poles:n,knots:a,multiplicities:o,degree:i,isPeriodic:!1})}function vi(e,t){return _(ri(e),t)}function yi(e,t){return{point:_(ri(e),t),tangent:v(ri(e),t)}}function bi(e){return y(ri(e))}function xi(e){let t=ri(e);for(;t.__bk2d===`trimmed`&&t.basis;)t=t.basis;return b(t)}function Si(e,t,n){return ii({__bk2d:`trimmed`,basis:ri(e),tStart:t,tEnd:n})}function Ci(e){return ii(JSON.parse(JSON.stringify(ri(e))))}function wi(e,t){let n=ri(e),r=y(n),i=[];for(let e=0;e<=20;e++){let a=r.first+(r.last-r.first)*e/20,[o,s]=_(n,a),[c,l]=v(n,a),u=Math.sqrt(c*c+l*l)||1;i.push([o-l/u*t,s+c/u*t])}return ii(w(i.length<=25?i:i.filter((e,t)=>t%2==0||t===i.length-1)))}function Ti(e,t,n){return ii(ee(ri(e),t,n))}function Ei(e,t,n,r){return ii(te(ri(e),t,n,r))}function Di(e,t,n,r){return ii(ne(ri(e),t,n,r))}function Oi(e,t,n){return ii(re(ri(e),t,n))}function ki(e,t,n,r,i){return ii(ie(ri(e),t,n,r,i))}function Ai(e,t,n,r,i,a){let o=Math.sqrt(r*r+i*i);if(o<1e-15)return e;let s=-i/o,c=r/o,l=a-1,u=1+l*s*s,d=l*s*c,f=l*c*s,p=1+l*c*c,m=t-u*t-d*n,h=n-f*t-p*n,g=ri(e),v=y(g),b=[];for(let e=0;e<=20;e++){let[t,n]=_(g,v.first+(v.last-v.first)*e/20);b.push([u*t+d*n+m,f*t+p*n+h])}return ii(w(b))}function ji(e,t,n,r,i,a){return Ai(e,t,n,r,i,a)}function Mi(){return{type:`identity2d`,delete(){}}}function Ni(e,t,n,r,i){return{type:`affinity2d`,axOriginX:e,axOriginY:t,axDirX:n,axDirY:r,ratio:i,delete(){}}}function Pi(e,t){return{type:`translate2d`,dx:e,dy:t,delete(){}}}function Fi(e,t,n,r,i,a,o){return{type:`mirror2d`,cx:e,cy:t,mode:n,originX:r,originY:i,dirX:a,dirY:o,delete(){}}}function Ii(e,t,n){return{type:`rotate2d`,angle:e,cx:t,cy:n,delete(){}}}function Li(e,t,n){return{type:`scale2d`,sx:e,sy:e,cx:t,cy:n,delete(){}}}function Ri(e,t,n){let r=e;r.dx=(Number(r.dx)||0)+t,r.dy=(Number(r.dy)||0)+n}function zi(e,t){let n=e,r=t;n.dx=(Number(n.dx)||0)+(Number(r.dx)||0),n.dy=(Number(n.dy)||0)+(Number(r.dy)||0),r.type===`scale2d`&&(n.type=`scale2d`,n.sx=r.sx,n.sy=r.sy)}function Bi(e,t){let n=t;return n.type===`translate2d`?Ti(e,Number(n.dx)||0,Number(n.dy)||0):n.type===`rotate2d`?Ei(e,Number(n.angle)||0,Number(n.cx)||0,Number(n.cy)||0):n.type===`scale2d`?Di(e,Number(n.sx)||1,Number(n.cx)||0,Number(n.cy)||0):n.type===`mirror2d`?Oi(e,Number(n.ox)||0,Number(n.oy)||0):n.type===`affinity2d`?Ai(e,Number(n.axOriginX)||0,Number(n.axOriginY)||0,Number(n.axDirX)||0,Number(n.axDirY)||0,Number(n.ratio)||1):Number(n.dx)||Number(n.dy)?Ti(e,Number(n.dx)||0,Number(n.dy)||0):e}function Vi(e,t,n){let r=ae(ri(e),ri(t),n);return{points:r.points,segments:r.segments.map(e=>ii(e))}}function Hi(e,t,n){let r=ri(e),i=y(r),a=(e,r,i)=>{if(e.__bk2d===`line`){let a=(t-e.ox)*e.dx+(n-e.oy)*e.dy,o=Math.max(r,Math.min(i,a)),[s,c]=_(e,o);return{param:o,distance:Math.sqrt((s-t)**2+(c-n)**2)}}let a=r,o=1/0;for(let s=0;s<=200;s++){let c=r+(i-r)*s/200,[l,u]=_(e,c),d=(l-t)**2+(u-n)**2;d<o&&(o=d,a=c)}return{param:a,distance:Math.sqrt(o)}};if(r.__bk2d===`trimmed`&&r.basis){let e=r.tStart,t=r.tEnd,n=a(r.basis,e,t);if(!n)return null;let i=t-e,o=i>1e-15?(n.param-e)/i:0;return{param:Math.max(0,Math.min(1,o)),distance:n.distance}}return a(r,i.first,i.last)}function Ui(e,t,n,r,i,a){let o=1/0;for(let s=0;s<=20;s++){let c=n+(r-n)*(s/20),[l,u]=_(ri(e),c);for(let e=0;e<=20;e++){let n=i+(a-i)*(e/20),[r,s]=_(ri(t),n),c=Math.sqrt((r-l)**2+(s-u)**2);c<o&&(o=c)}}return o}function Wi(e,t){let n=ri(e),r=y(n),i=Math.min(Math.max(t+1,10),100),a=[];for(let e=0;e<i;e++){let t=r.first+(r.last-r.first)*e/(i-1);a.push(_(n,t))}let o=Math.min(3,i-1),s=a.length,c=[],l=[],u=s-o-1;c.push(0),l.push(o+1);for(let e=1;e<=u;e++)c.push(e/(u+1)),l.push(1);return c.push(1),l.push(o+1),ii({__bk2d:`bspline`,poles:a,knots:c,multiplicities:l,degree:o,isPeriodic:!1})}function Gi(e){let t=ri(e);for(;t.__bk2d===`trimmed`&&t.basis;)t=t.basis;if(t.__bk2d!==`bspline`)return[e];let n=t.poles,r=t.degree,i=[];for(let e=0;e<t.knots.length;e++)for(let n=0;n<t.multiplicities[e];n++)i.push(t.knots[e]);let a=n.length-1+r+1;if(r<1||i.length!==a+1)return[ii(w(n))];let o=e=>[e[0],e[1]],s=[],c=r,l=r+1,u=[];for(let e=0;e<=r;e++)u[e]=o(n[e]);let d=[];for(;l<a;){let e=l;for(;l<a&&i[l+1]===i[l];)l++;let t=l-e+1;if(t<r){let e=i[l]-i[c],n=[];for(let a=r;a>t;a--)n[a-t-1]=e/(i[c+a]-i[c]);let s=r-t;for(let e=1;e<=s;e++){let i=s-e,c=t+e;for(let e=r;e>=c;e--){let t=n[e-c],r=u[e],i=u[e-1];u[e]=[t*r[0]+(1-t)*i[0],t*r[1]+(1-t)*i[1]]}l<a&&(d[i]=o(u[r]))}}if(s.push(u),l<a){for(let e=r-t;e<=r;e++)d[e]=o(n[l-r+e]);u=d,d=[],c=l,l++}}return s.map(e=>ii(w(e)))}function Ki(){return ge()}function qi(e,t,n){_e(e,ri(t),n)}function Ji(e){return{xMin:e.xMin,yMin:e.yMin,xMax:e.xMax,yMax:e.yMax}}function Yi(e,t){e.xMin=Math.min(e.xMin,t.xMin),e.yMin=Math.min(e.yMin,t.yMin),e.xMax=Math.max(e.xMax,t.xMax),e.yMax=Math.max(e.yMax,t.yMax)}function Xi(e,t){return e.xMax<t.xMin||e.xMin>t.xMax||e.yMax<t.yMin||e.yMin>t.yMax}function Zi(e,t,n){return t<e.xMin||t>e.xMax||n<e.yMin||n>e.yMax}function Qi(e){let t=ri(e);for(;t.__bk2d===`trimmed`&&t.basis;)t=t.basis;return t.__bk2d===`circle`?{cx:t.cx,cy:t.cy,radius:t.radius,isDirect:t.sense!==!1}:null}function $i(e){let t=ri(e);for(;t.__bk2d===`trimmed`&&t.basis;)t=t.basis;return t.__bk2d===`ellipse`?{majorRadius:t.majorRadius,minorRadius:t.minorRadius,xAxisAngle:t.xDirAngle??0,isDirect:t.sense!==!1}:null}function ea(e){let t=ri(e);for(;t.__bk2d===`trimmed`&&t.basis;)t=t.basis;return t.__bk2d===`bezier`&&Array.isArray(t.poles)?t.poles:null}function ta(e){let t=ri(e);for(;t.__bk2d===`trimmed`&&t.basis;)t=t.basis;return t.__bk2d===`bezier`&&Array.isArray(t.poles)?t.poles.length-1:null}function na(e){return me(ri(e))}function ra(e){return ii(he(e))}function ia(e,t){let n=y(ri(e)),r=[n.first,...t.sort((e,t)=>e-t),n.last],i=[];for(let t=0;t<r.length-1;t++){let a=r[t]??n.first,o=r[t+1]??n.last;i.push(Si(e,a,o))}return i}function aa(e,t,n,r,i,a){let o=ri(n),[s,c,l]=r,[u,d,f]=i,[p,m,h]=a,g=d*h-f*m,v=f*p-u*h,b=u*m-d*p,x=(e,t)=>[s+e*p+t*g,c+e*m+t*v,l+e*h+t*b],S=o.__bk2d;if(S===`line`){let t=y(o),[n,r]=_(o,t.first),[i,a]=_(o,t.last),s=x(n,r),c=x(i,a);return T(`edge`,e.makeLineEdge(s[0],s[1],s[2],c[0],c[1],c[2]))}if(S===`trimmed`){let t=o;if(t.basis&&t.basis.__bk2d===`line`){let[t,n]=_(o,0),[r,i]=_(o,1),a=x(t,n),s=x(r,i);return T(`edge`,e.makeLineEdge(a[0],a[1],a[2],s[0],s[1],s[2]))}if(t.basis&&t.basis.__bk2d===`circle`){let t=y(o),[n,r]=_(o,t.first),[i,a]=_(o,(t.first+t.last)/2),[s,c]=_(o,t.last),l=x(n,r),u=x(i,a),d=x(s,c);return T(`edge`,e.makeArcEdge(l[0],l[1],l[2],u[0],u[1],u[2],d[0],d[1],d[2]))}}if(S===`circle`){let t=o;if(t.cx!==void 0&&t.radius!==void 0){let[n,r,i]=x(t.cx,t.cy);return T(`edge`,e.makeCircleEdge(n,r,i,u,d,f,t.radius))}let n=y(o),[r,i]=_(o,n.first),[a,s]=_(o,(n.first+n.last)/2),[c,l]=_(o,n.last),p=x(r,i),m=x(a,s),h=x(c,l);return T(`edge`,e.makeArcEdge(p[0],p[1],p[2],m[0],m[1],m[2],h[0],h[1],h[2]))}let C=y(o),w=(C.last-C.first)/24,ee=[];for(let e=0;e<=24;e++){let[t,n]=_(o,C.first+e*w),[r,i,a]=x(t,n);ee.push(r,i,a)}let te=new t.VectorDouble;for(let e of ee)te.push_back(e);try{return T(`edge`,e.interpolatePoints(te,!1))}finally{te.delete()}}function oa(e,t,n,r){let i=ri(n),a=y(i),o=E(r),s=new t.VectorDouble;for(let t=0;t<=30;t++){let[n,r]=_(i,a.first+(a.last-a.first)*t/30),c=e.pointOnSurface(o,n,r);try{s.push_back(c.get(0)),s.push_back(c.get(1)),s.push_back(c.get(2))}finally{c.delete()}}try{return T(`edge`,e.interpolatePoints(s,!1))}finally{s.delete()}}function sa(e){return e}function ca(){return ii(x(0,0,1,0))}function la(e,t){e.buildCurves3d(E(t))}function ua(e,t,n,r){return T(`wire`,e.fixWireOnFace(E(t),E(n),r))}function da(e){try{let t=Me(e.modified),n=Me(e.generated),r=Me(e.deleted),i=e=>{let t=new Map,n=0;for(;n+1<e.length;){let r=e[n]??0,i=e[n+1]??0;n+=2;let a=[];for(let t=0;t<i&&n<e.length;t++,n++)a.push(e[n]??0);t.set(r,a)}return t};return{id:e.resultId,evolution:{modified:i(t),generated:i(n),deleted:new Set(r)}}}finally{e.delete()}}function fa(e,t,n,r,i,a,o,s){let c=Ae(t,o);try{let{id:t,evolution:o}=da(e.translateWithHistory(E(n),r,i,a,c,s));return{shape:D(e,t),evolution:o}}finally{c.delete()}}function pa(e,t,n,r,i,a,o,s){let c=o??[0,0,1],l=s??[0,0,0],u=Ae(t,i);try{let{id:t,evolution:i}=da(e.rotateWithHistory(E(n),l[0],l[1],l[2],c[0],c[1],c[2],r,u,a));return{shape:D(e,t),evolution:i}}finally{u.delete()}}function ma(e,t,n,r,i,a,o){let s=Ae(t,a);try{let{id:t,evolution:a}=da(e.mirrorWithHistory(E(n),r[0],r[1],r[2],i[0],i[1],i[2],s,o));return{shape:D(e,t),evolution:a}}finally{s.delete()}}function ha(e,t,n,r,i,a,o){let s=Ae(t,a);try{let{id:t,evolution:a}=da(e.scaleWithHistory(E(n),r[0],r[1],r[2],i,s,o));return{shape:D(e,t),evolution:a}}finally{s.delete()}}function ga(e,t,n,r,i,a){let o=e(t,n,r,i),s=new Map;for(let e of a)s.set(e,[e]);return{shape:o,evolution:{modified:s,generated:new Map,deleted:new Set}}}function _a(e,t,n,r,i,a,o){let s=Ae(t,i);try{let{id:t,evolution:i}=da(e.fuseWithHistory(E(n),E(r),s,a));return{shape:D(e,t),evolution:i,diagnostics:{hasErrors:!1,hasWarnings:!1,messages:[]}}}finally{s.delete()}}function va(e,t,n,r,i,a,o){let s=Ae(t,i);try{let{id:t,evolution:i}=da(e.cutWithHistory(E(n),Re(e,r),s,a));return{shape:D(e,t),evolution:i,diagnostics:{hasErrors:!1,hasWarnings:!1,messages:[]}}}finally{s.delete()}}function ya(e,t,n,r,i,a,o){let s=Ae(t,i);try{let{id:t,evolution:i}=da(e.intersectWithHistory(E(n),Re(e,r),s,a));return{shape:D(e,t),evolution:i,diagnostics:{hasErrors:!1,hasWarnings:!1,messages:[]}}}finally{s.delete()}}function ba(e,t,n,r,i,a,o){let s=Pe(r,i),c=ke(t,r.map(E)),l=Ae(t,a);try{let{id:t,evolution:r}=da(e.filletWithHistory(E(n),c,s,l,o));return{shape:D(e,t),evolution:r}}finally{c.delete(),l.delete()}}function xa(e,t,n,r,i,a,o){let s=Pe(r,i),c=ke(t,r.map(E)),l=Ae(t,a);try{let{id:t,evolution:r}=da(e.chamferWithHistory(E(n),c,s,l,o));return{shape:D(e,t),evolution:r}}finally{c.delete(),l.delete()}}function Sa(e,t,n,r,i,a,o,s){let c=ke(t,r.map(E)),l=Ae(t,a);try{let{id:t,evolution:r}=da(e.shellWithHistory(E(n),c,i,s??.001,l,o));return{shape:D(e,t),evolution:r}}finally{c.delete(),l.delete()}}function Ca(e,t,n,r,i,a){let o=Ae(t,i);try{let{id:t,evolution:i}=da(e.thickenWithHistory(E(n),r,.001,o,a));return{shape:D(e,t),evolution:i}}finally{o.delete()}}function wa(e,t,n,r,i,a,o){let s=Ae(t,i);try{let{id:t,evolution:i}=da(e.offsetWithHistory(E(n),r,o??1e-6,s,a));return{shape:D(e,t),evolution:i}}finally{s.delete()}}function Ta(e,t,n,r,i){let[a,o,s]=r,c=E(t);for(let t of n){let n=(typeof i==`number`?i:i(t))*Math.PI/180;c=e.draft(c,E(t),n,a,o,s)}return{shape:D(e,c),evolution:{modified:new Map,generated:new Map,deleted:new Set}}}function Ea(e,t,n,r,i,a,o){let s=e(r,i),c=t(s,`face`),l=new Map,u=Math.min(a.length,c.length);for(let e=0;e<u;e++){let t=c[e],r=a[e];t!==void 0&&r!==void 0&&l.set(r,[n(t,o)])}return{shape:s,evolution:{modified:l,generated:new Map,deleted:new Set}}}function Da(e,t,n,r){if(n.length<4)throw Error(`hullFromPoints: need at least 4 points`);let{points:i,faces:a}=g(n,r);if(a.length<4)throw Error(`hullFromPoints: degenerate hull (fewer than 4 faces)`);return Hr(e,t,[...i],[...a],r)}function Oa(e,t,n,r){let i=Math.max(r,1),a=[];for(let r of n){let n=e.tessellate(E(r),i,i*.5);try{let e=n.positionCount,r=n.getPositionsPtr()>>2;for(let n=0;n<e;n+=3)a.push({x:t.HEAPF32[r+n]??0,y:t.HEAPF32[r+n+1]??0,z:t.HEAPF32[r+n+2]??0})}finally{n.delete()}}return a}function ka(e,t,n,r){if(n.length===0)throw Error(`hull: no shapes provided`);let i=Oa(e,t,n,r);if(i.length<4)throw Error(`hull: fewer than 4 vertices extracted from input shapes`);return Da(e,t,i,r)}function Aa(e){throw Error(`occt-wasm: ${e} is not yet implemented`)}var ja=class e{oc;kernelId=`occt-wasm`;capabilities=r;Module;k;owner;constructor(e,t,n){this.Module=e,this.k=Ie(t,e),this.oc=Le(e,this.k),this.owner=n}static fromKernel(t){return new e(t.getRawModule(),t.getRawKernel(),t)}get retainedKernelOwner(){return this.owner}dispose(e){De(e)?this.k.release(e.id):typeof e.delete==`function`&&e.delete()}executeBatch(e){Aa(`executeBatch`)}checkpoint(){Aa(`checkpoint`)}checkpointCount(){Aa(`checkpointCount`)}restoreCheckpoint(e){Aa(`restoreCheckpoint`)}discardCheckpoint(e){Aa(`discardCheckpoint`)}makeBox(e,t,n){return Je(this.k,e,t,n)}makeCylinder(e,t,n,r){return Ye(this.k,e,t,n,r)}makeSphere(e,t){return Xe(this.k,e,t)}makeCone(e,t,n,r,i){return Ze(this.k,e,t,n,r,i)}makeTorus(e,t,n,r){return Qe(this.k,e,t,n,r)}makeEllipsoid(e,t,n){return $e(this.k,e,t,n)}makeBoxFromCorners(e,t){return et(this.k,e,t)}makeRectangle(e,t){return tt(this.k,e,t)}fuse(e,t,n){return ze(this.k,e,t,n)}cut(e,t,n){return Be(this.k,e,t,n)}intersect(e,t,n){return Ve(this.k,e,t,n)}section(e,t,n){return He(this.k,e,t,n)}fuseAll(e,t){return Ue(this.k,this.Module,e,t)}cutAll(e,t,n){return We(this.k,this.Module,e,t,n)}split(e,t){return Ge(this.k,this.Module,e,t)}checkBoolean(e,t,n){return Ke(this.k,e,t,n)}meshBoolean(e,t,n,r,i,a){return qe(e,t,n,r,i,a)}makeVertex(e,t,n){return Er(this.k,e,t,n)}makeEdge(e,t,n){return Dr(this.k,e)}makeWire(e){return Or(this.k,this.Module,e)}makeFace(e,t){return Ar(this.k,e,t)}makeLineEdge(e,t){return jr(this.k,e,t)}makeCircleEdge(e,t,n){return Mr(this.k,e,t,n)}makeCircleArc(e,t,n,r,i){return Nr(this.k,e,t,n,r,i)}makeArcEdge(e,t,n){return Pr(this.k,e,t,n)}makeEllipseEdge(e,t,n,r,i){return Fr(this.k,e,t,n,r)}makeEllipseArc(e,t,n,r,i,a,o){return Ir(this.k,e,t,n,r,i,a)}makeBezierEdge(e){return Lr(this.k,this.Module,e)}makeTangentArc(e,t,n){return Rr(this.k,e,t,n)}makeHelixWire(e,t,n,r,i,a){return zr(this.k,e,t,n,r,i)}makeWireFromMixed(e){return kr(this.k,this.Module,e)}makeCompound(e){return Br(this.k,this.Module,e)}solidFromShell(e){return Vr(this.k,e)}hull(e,t){return ka(this.k,this.Module,e,t)}hullFromPoints(e,t){return Da(this.k,this.Module,e,t)}buildSolidFromFaces(e,t,n){return Hr(this.k,this.Module,e,t,n)}makeNonPlanarFace(e){return Ur(this.k,e)}addHolesInFace(e,t){return Wr(this.k,this.Module,e,t)}removeHolesFromFace(e){return Gr(this.k,this.Module,e)}makeFaceOnSurface(e,t){return Kr(this.k,e,t)}bsplineSurface(e,t,n){return qr(this.k,this.Module,e,t,n)}triangulatedSurface(e,t,n){return Jr(this.k,this.Module,e,t,n)}buildTriFace(e,t,n){return Yr(this.k,e,t,n)}sewAndSolidify(e,t){return Xr(this.k,this.Module,e,t)}createPoint3d(e,t,n){return Zr(e,t,n)}createDirection3d(e,t,n){return Qr(e,t,n)}createVector3d(e,t,n){return $r(e,t,n)}createAxis1(e,t,n,r,i,a){return ei(e,t,n,r,i,a)}createAxis2(e,t,n,r,i,a,o,s,c){return ti(e,t,n,r,i,a,o,s,c)}createAxis3(e,t,n,r,i,a,o,s,c){return ni(e,t,n,r,i,a,o,s,c)}extrude(e,t,n){return Hn(this.k,e,t,n)}revolve(e,t,n){return Un(this.k,e,t,n)}loft(e,t,n,r){return Wn(this.k,this.Module,e,t,n,r)}sweep(e,t,n){return Gn(this.k,e,t,n)}simplePipe(e,t){return Kn(this.k,e,t)}helicalSweep(e,t,n,r,i,a){throw Error(`helicalSweep on occt-wasm requires profile positioning+orientation logic not yet implemented; brepkit has a native implementation`)}sweepWithOptions(e,t,n,r,i){Aa(`sweepWithOptions`)}sweepPipeShell(e,t,n){return qn(this.k,e,t,n)}loftAdvanced(e,t){return Jn(this.k,this.Module,e,t)}buildExtrusionLaw(e,t,n){return Yn(this.k,e,t,n)}revolveVec(e,t,n,r){return Xn(this.k,e,t,n,r)}draftPrism(e,t,n,r,i,a){return Zn(this.k,e,t,n,r,i,a)}fillet(e,t,n){return An(this.k,this.Module,e,t,n)}chamfer(e,t,n){return jn(this.k,this.Module,e,t,n)}chamferDistAngle(e,t,n,r){return Mn(this.k,this.Module,e,t,n,r)}shell(e,t,n,r){return Nn(this.k,this.Module,e,t,n,r)}thicken(e,t){return Pn(this.k,e,t)}offset(e,t,n){return Fn(this.k,e,t,n)}filletVariable(e,t){return In(this.k,e,t)}draft(e,t,n,r,i){return Ln(this.k,e,t,n,r,i)}defeature(e,t){return Rn(this.k,this.Module,e,t)}offsetWire2D(e,t,n){return zn(this.k,e,t,n)}simplify(e){return Bn(this.k,e)}reverseShape(e){return Vn(this.k,e)}composeTransform(e){return Qn(e)}transform(e,t){return $n(this.k,this.Module,e,t)}translate(e,t,n,r){return er(this.k,e,t,n,r)}rotate(e,t,n,r){return tr(this.k,e,t,n,r)}mirror(e,t,n){return nr(this.k,e,t,n)}scale(e,t,n){return rr(this.k,e,t,n)}generalTransform(e,t,n,r){return ir(this.k,this.Module,e,t,n,r)}generalTransformNonOrthogonal(e,t,n){return ir(this.k,this.Module,e,t,n,!1)}positionOnCurve(e,t,n){return ar(this.k,this.Module,e,t,n)}linearPattern(e,t,n,r){return or(this.k,e,t,n,r)}circularPattern(e,t,n,r,i){return sr(this.k,e,t,n,r,i)}transformBatch(e){return cr(this.k,e)}translateWithHistory(e,t,n,r,i,a){return fa(this.k,this.Module,e,t,n,r,i,a)}rotateWithHistory(e,t,n,r,i,a){return pa(this.k,this.Module,e,t,n,r,i,a)}mirrorWithHistory(e,t,n,r,i){return ma(this.k,this.Module,e,t,n,r,i)}scaleWithHistory(e,t,n,r,i){return ha(this.k,this.Module,e,t,n,r,i)}generalTransformWithHistory(e,t,n,r,i,a){return ga((e,t,n,r)=>this.generalTransform(e,t,n,r),e,t,n,r,i)}fuseWithHistory(e,t,n,r,i){return _a(this.k,this.Module,e,t,n,r,i)}cutWithHistory(e,t,n,r,i){return va(this.k,this.Module,e,t,n,r,i)}intersectWithHistory(e,t,n,r,i){return ya(this.k,this.Module,e,t,n,r,i)}filletWithHistory(e,t,n,r,i){return ba(this.k,this.Module,e,t,n,r,i)}chamferWithHistory(e,t,n,r,i){return xa(this.k,this.Module,e,t,n,r,i)}shellWithHistory(e,t,n,r,i,a){return Sa(this.k,this.Module,e,t,n,r,i,a)}thickenWithHistory(e,t,n,r){return Ca(this.k,this.Module,e,t,n,r)}offsetWithHistory(e,t,n,r,i){return wa(this.k,this.Module,e,t,n,r,i)}draftWithHistory(e,t,n,r,i,a,o){return Ta(this.k,e,t,n,i)}applyComposedTransformWithHistory(e,t,n,r){return Ea((e,t)=>this.transform(e,t),(e,t)=>this.iterShapes(e,t),(e,t)=>this.hashCode(e,t),e,t,n,r)}mesh(e,t){return Ct(this.k,this.Module,e,t)}meshEdges(e,t,n){return Tt(this.k,this.Module,e,t,n)}hasTriangulation(e){return Et(this.k,e)}meshShape(e,t,n){Dt(this.k,e,t,n)}exportSTEP(e){return dr(this.k,this.makeCompound.bind(this),e)}exportSTL(e,t,n,r){return fr(this.mesh.bind(this),e,t,n,r)}importSTEP(e){return pr(this.k,e)}importSTL(e){return mr(this.k,this.Module,e)}exportIGES(e){return hr(this.k,this.makeCompound.bind(this),e)}importIGES(e){return gr(this.k,e)}exportSTEPAssembly(e,t){return _r(this.k,this.Module,e,t)}export3MF(e,t){throw Error(`export3MF is only available with the brepkit kernel`)}exportGLB(e,t){return vr(this.mesh.bind(this),e,t)}exportOBJ(e,t){return yr(this.mesh.bind(this),e,t)}exportPLY(e,t){return br(this.mesh.bind(this),e,t)}import3MF(e){throw Error(`import3MF is only available with the brepkit kernel`)}importOBJ(e){throw Error(`importOBJ is only available with the brepkit kernel`)}importGLB(e){throw Error(`importGLB is only available with the brepkit kernel`)}toBREP(e){return xr(this.k,e)}fromBREP(e){return Sr(this.k,e)}createXCAFDocument(e){return Cr(this.k,this.Module,e)}writeXCAFToSTEP(e,t){return wr(this.k,e,t)}exportSTEPConfigured(e,t){return Tr(this.k,this.Module,e,t)}volume(e){return dn(this.k,e)}area(e){return fn(this.k,e)}length(e){return pn(this.k,e)}centerOfMass(e){return mn(this.k,e)}linearCenterOfMass(e){return hn(this.k,e)}boundingBox(e){return gn(this.k,e)}distance(e,t){return Sn(this.k,this.Module,e,t)}surfaceCurvature(e,t,n){return kn(this.k,e,t,n)}surfaceCenterOfMass(e){return _n(this.k,e)}measureBulk(e,t){return vn(this.k,e,t)}createDistanceQuery(e){return yn(this.k,e)}iterShapes(e,t){return nt(this.k,e,t)}iterShapeList(e,t){throw Error(`iterShapeList is not applicable to occt-wasm: the arena model has no TopTools_ListOfShape handles`)}shapeType(e){return rt(this.k,e)}isSame(e,t){return it(this.k,e,t)}isEqual(e,t){return at(this.k,e,t)}downcast(e,t){return ot(this.k,e,t)}hashCode(e,t){return st(this.k,e,t)}isNull(e){return ct(this.k,e)}shapeOrientation(e){return lt(this.k,e)}edgeToFaceMap(e){return ut(this.k,e)}sharedEdges(e,t){return dt(this.k,e,t)}adjacentFaces(e,t){return ft(this.k,e,t)}sew(e,t){return pt(this.k,this.Module,e,t)}curveType(e){return kt(this.k,e)}curveParameters(e){return At(this.k,e)}curvePointAtParam(e,t){return jt(this.k,e,t)}curveTangent(e,t){return Mt(this.k,e,t)}curveIsClosed(e){return Nt(this.k,e)}curveIsPeriodic(e){return Pt(this.k,e)}curvePeriod(e){return Ft(this.k,e)}interpolatePoints(e,t){return It(this.k,this.Module,e,t)}approximatePoints(e,t){return Lt(this.k,this.Module,e,t)}curveDegreeElevate(e,t){return Rt(this.k,e,t)}curveKnotInsert(e,t,n){return zt(this.k,e,t,n)}curveKnotRemove(e,t,n){return Bt(this.k,e,t,n)}curveSplit(e,t){return Vt(this.k,e,t)}getBezierPenultimatePole(e){return Ht(this.k,e)}createCurveAdaptor(e){Aa(`createCurveAdaptor`)}vertexPosition(e){return Wt(this.k,e)}surfaceType(e){return Gt(this.k,e)}uvBounds(e){return Kt(this.k,e)}outerWire(e){return qt(this.k,e)}surfaceNormal(e,t,n){return Jt(this.k,e,t,n)}pointOnSurface(e,t,n){return Yt(this.k,e,t,n)}uvFromPoint(e,t){return sn(this.k,e,t)}projectPointOnFace(e,t){return cn(this.k,e,t)}classifyPointOnFace(e,t,n,r){return ln(this.k,e,t,n,r)}classifyPointRobust(e,t,n){Aa(`classifyPointRobust`)}classifyPointWinding(e,t,n){Aa(`classifyPointWinding`)}approximateSurfaceLspia(e,t,n,r,i,a,o,s,c){Aa(`approximateSurfaceLspia`)}untrimFace(e,t,n){Aa(`untrimFace`)}getSurfaceCylinderData(e){return on(this.k,e)}getSurfaceAxis(e){return an(this.k,e)}reverseSurfaceU(e){Aa(`reverseSurfaceU`)}detectSmallFeatures(e,t,n){Aa(`detectSmallFeatures`)}recognizeFeatures(e,t){Aa(`recognizeFeatures`)}projectEdges(e,t,n,r){return un(this.k,this.Module,e,t,n,r)}isValid(e){return ht(this.k,e)}healSolid(e){return gt(this.k,e)}healFace(e){return _t(this.k,e)}healWire(e,t){return vt(this.k,e,t)}mergeCoincidentVertices(e,t){return yt(this.k,e,t)}removeDegenerateEdges(e,t){return bt(this.k,e,t)}fixFaceOrientations(e){return xt(this.k,e)}fixShape(e){return St(this.k,e)}fixSelfIntersection(e){Aa(`fixSelfIntersection`)}createPoint2d(e,t){return ai(e,t)}createDirection2d(e,t){return oi(e,t)}createVector2d(e,t){return si(e,t)}createAxis2d(e,t,n,r){return ci(e,t,n,r)}wrapCurve2dHandle(e){return li(e)}createCurve2dAdaptor(e){Aa(`createCurve2dAdaptor`)}makeLine2d(e,t,n,r){return ui(e,t,n,r)}makeCircle2d(e,t,n,r){return di(e,t,n,r)}makeArc2dThreePoints(e,t,n,r,i,a){return fi(e,t,n,r,i,a)}makeArc2dTangent(e,t,n,r,i,a){return pi(e,t,n,r,i,a)}makeEllipse2d(e,t,n,r,i,a,o){return mi(e,t,n,r,i,a,o)}makeEllipseArc2d(e,t,n,r,i,a,o,s,c){return hi(e,t,n,r,i,a,o,s,c)}makeBezier2d(e){return gi(e)}makeBSpline2d(e,t){return _i(e)}evaluateCurve2d(e,t){return vi(e,t)}evaluateCurve2dD1(e,t){return yi(e,t)}getCurve2dBounds(e){return bi(e)}getCurve2dType(e){return xi(e)}trimCurve2d(e,t,n){return Si(e,t,n)}reverseCurve2d(e){}copyCurve2d(e){return Ci(e)}offsetCurve2d(e,t){return wi(e,t)}translateCurve2d(e,t,n){return Ti(e,t,n)}rotateCurve2d(e,t,n,r){return Ei(e,t,n,r)}scaleCurve2d(e,t,n,r){return Di(e,t,n,r)}mirrorCurve2dAtPoint(e,t,n){return Oi(e,t,n)}mirrorCurve2dAcrossAxis(e,t,n,r,i){return ki(e,t,n,r,i)}affinityTransform2d(e,t,n,r,i,a){return ji(e,t,n,r,i,a)}createIdentityGTrsf2d(){return Mi()}createAffinityGTrsf2d(e,t,n,r,i){return Ni(e,t,n,r,i)}createTranslationGTrsf2d(e,t){return Pi(e,t)}createMirrorGTrsf2d(e,t,n,r,i,a,o){return Fi(e,t,n,r,i,a,o)}createRotationGTrsf2d(e,t,n){return Ii(e,t,n)}createScaleGTrsf2d(e,t,n){return Li(e,t,n)}setGTrsf2dTranslationPart(e,t,n){Ri(e,t,n)}multiplyGTrsf2d(e,t){zi(e,t)}transformCurve2dGeneral(e,t){return Bi(e,t)}intersectCurves2d(e,t,n){return Vi(e,t,n)}projectPointOnCurve2d(e,t,n){return Hi(e,t,n)}distanceBetweenCurves2d(e,t,n,r,i,a){return Ui(e,t,n,r,i,a)}approximateCurve2dAsBSpline(e,t,n,r){return Wi(e,r)}decomposeBSpline2dToBeziers(e){return Gi(e)}createBoundingBox2d(){return Ki()}addCurveToBBox2d(e,t,n){qi(e,t,n)}getBBox2dBounds(e){return Ji(e)}mergeBBox2d(e,t){Yi(e,t)}isBBox2dOut(e,t){return Xi(e,t)}isBBox2dOutPoint(e,t,n){return Zi(e,t,n)}getCurve2dCircleData(e){return Qi(e)}getCurve2dEllipseData(e){return $i(e)}getCurve2dBezierPoles(e){return ea(e)}getCurve2dBezierDegree(e){return ta(e)}getCurve2dBSplineData(e){Aa(`getCurve2dBSplineData`)}serializeCurve2d(e){return na(e)}deserializeCurve2d(e){return ra(e)}splitCurve2d(e,t){return ia(e,t)}liftCurve2dToPlane(e,t,n,r){return aa(this.k,this.Module,e,t,n,r)}buildEdgeOnSurface(e,t){return oa(this.k,this.Module,e,t)}extractSurfaceFromFace(e){return sa(e)}extractCurve2dFromEdge(e,t){return ca()}buildCurves3d(e){la(this.k,e)}fixWireOnFace(e,t,n){return ua(this.k,e,t,n)}fillSurface(e,t){Aa(`fillSurface`)}getNurbsCurveData(e){return Ut(this.k,e)}};function O(e){return{ok:!0,value:e}}function k(e){return{ok:!1,error:e}}var Ma=O(void 0);function Na(e){return e.ok}function A(e){return!e.ok}function Pa(e,t){return e.ok?O(t(e.value)):e}function Fa(e,t){return e.ok?e:k(t(e.error))}function Ia(e,t){return e.ok?t(e.value):e}var La=Ia;function Ra(e,t){return e.ok?e:t}function za(e,t){return e.ok?e:t(e.error)}function Ba(e,t){return e.ok?t.ok?O([e.value,t.value]):t:e}var Va=Qa;function Ha(e,t){return e.ok&&t(e.value),e}function Ua(e,t){return e.ok||t(e.error),e}function Wa(e){return e.ok?e.value:e}function Ga(e,t,n){return e.ok?O(t(e.value)):k(n(e.error))}function Ka(e,t){return e==null?k(t()):O(e)}function qa(e){if(typeof e==`object`&&e&&`kind`in e&&`code`in e&&`message`in e){let t=e;return`[${t.kind}] ${t.code}: ${t.message}`}return String(e)}function j(e){if(e.ok)return e.value;throw Error(`Called unwrap() on an Err: ${qa(e.error)}`)}function Ja(e,t){return e.ok?e.value:t}function Ya(e,t){return e.ok?e.value:t(e.error)}function Xa(e){if(!e.ok)return e.error;throw Error(`Called unwrapErr() on an Ok: ${String(e.value)}`)}function Za(e,t){return e.ok?t.ok(e.value):t.err(e.error)}function Qa(e){let t=[];for(let n of e){if(!n.ok)return n;t.push(n.value)}return O(t)}function $a(e,t){try{return O(e())}catch(e){return k(t(e))}}async function eo(e,t){try{return O(await e())}catch(e){return k(t(e))}}function to(e){function t(e){return typeof e==`object`&&!!e&&`ok`in e&&typeof e.ok==`boolean`}let n=t(e)?e:O(e);function r(e){return{then(t){return e.ok?r(t(e.value)):r(e)},get result(){return e}}}return r(n)}var no=class extends Error{location;constructor(e,t){super(`Bug in ${e}: ${t}`),this.name=`BrepBugError`,this.location=e}};function M(e,t){throw new no(e,t)}var ro=[{pattern:/invalid edge configuration|edges?.*(not|fail|invalid)/i,translation:`The edges may not form a continuous loop. Check that edges connect end-to-end without gaps.`},{pattern:/BRepAlgoAPI.*failed|boolean.*operation.*failed/i,translation:`Boolean operation failed. Common causes: overlapping faces, zero-thickness geometry, or degenerate shapes. Try healing input shapes first.`},{pattern:/fillet.*radius.*too.*large|fillet.*failed/i,translation:`Fillet operation failed. The radius may be too large for the selected edges. Try reducing the radius or check that edges have enough room.`},{pattern:/chamfer.*failed|chamfer.*distance.*too.*large/i,translation:`Chamfer operation failed. The distance may be too large for the selected edges. Try reducing the distance or check edge geometry.`},{pattern:/shell.*failed|offset.*failed/i,translation:`Shell/offset operation failed. The thickness may be too large, or the shape may have complex geometry. Try reducing thickness.`},{pattern:/sweep.*failed|pipe.*failed/i,translation:`Sweep operation failed. Check that the profile and spine are compatible, and that the spine has no sharp twists or self-intersections.`},{pattern:/loft.*failed/i,translation:`Loft operation failed. Profiles may be incompatible or have different orientations. Ensure profiles are ordered consistently.`},{pattern:/extrude.*failed|prism.*failed/i,translation:`Extrusion failed. The profile may be invalid or self-intersecting. Check that the profile forms a valid closed wire.`},{pattern:/revolve.*failed|revolution.*failed/i,translation:`Revolution operation failed. The profile may intersect the axis of revolution, or the angle may be invalid.`},{pattern:/self.*intersect|self-intersect/i,translation:`Shape has self-intersections. The operation resulted in overlapping geometry. Simplify the input or adjust parameters.`},{pattern:/degener|degenerat/i,translation:`Degenerate geometry detected. The shape has edges or faces with zero length/area. Check input geometry for collapsed elements.`},{pattern:/BRepCheck.*fail|shape.*invalid|shape.*not.*valid/i,translation:`Shape validation failed. The resulting shape has invalid topology. Try healing the shape or checking input geometry.`}],io={FUSE_FAILED:`Try autoHeal() on both operands before the boolean operation. Check for overlapping faces or zero-thickness geometry.`,CUT_FAILED:`Try autoHeal() on both operands before the boolean operation. Check for overlapping faces or zero-thickness geometry.`,FUSE_NOT_3D:`The boolean result was not a 3D solid. Ensure both input shapes are valid 3D solids, not shells or open surfaces.`,CUT_NOT_3D:`The boolean result was not a 3D solid. Ensure both input shapes are valid 3D solids, not shells or open surfaces.`,INTERSECT_NOT_3D:`The boolean result was not a 3D solid. Ensure both input shapes are valid 3D solids, not shells or open surfaces.`,SWEEP_FAILED:`Ensure the spine curve has no sharp corners or self-intersections. Try simplifying the profile or using a smoother path.`,LOFT_FAILED:`Check that all profiles have the same number of edges and consistent orientation. Try reordering profiles.`,FILLET_NOT_3D:`The fillet radius may be too large for the selected edges. Try a smaller radius or check that adjacent faces have enough room.`,CHAMFER_NOT_3D:`The chamfer distance may be too large. Try a smaller distance or check edge geometry.`,SHELL_NOT_3D:`The shell thickness may be too large for the shape. Try reducing thickness or removing problematic faces.`,OFFSET_NOT_3D:`The offset distance may be too large for the shape geometry. Try a smaller distance.`,DRAFT_FAILED:`The draft angle may be too large or the selected faces incompatible. Try a smaller angle or different faces.`};function ao(e){return io[e]}function oo(e){for(let{pattern:t,translation:n}of ro)if(t.test(e))return`${n} (kernel: ${e})`;return e}var N={BSPLINE_FAILED:`BSPLINE_FAILED`,FACE_BUILD_FAILED:`FACE_BUILD_FAILED`,SWEEP_FAILED:`SWEEP_FAILED`,LOFT_FAILED:`LOFT_FAILED`,FUSE_FAILED:`FUSE_FAILED`,CUT_FAILED:`CUT_FAILED`,HEAL_NO_EFFECT:`HEAL_NO_EFFECT`,BOOLEAN_HAS_ERRORS:`BOOLEAN_HAS_ERRORS`,VARIABLE_FILLET_FAILED:`VARIABLE_FILLET_FAILED`,POSITION_ON_CURVE_FAILED:`POSITION_ON_CURVE_FAILED`,FIX_SHAPE_FAILED:`FIX_SHAPE_FAILED`,SOLID_FROM_SHELL_FAILED:`SOLID_FROM_SHELL_FAILED`,FIX_SELF_INTERSECTION_FAILED:`FIX_SELF_INTERSECTION_FAILED`,ELLIPSE_RADII:`ELLIPSE_RADII`,FUSE_ALL_EMPTY:`FUSE_ALL_EMPTY`,FILLET_NO_EDGES:`FILLET_NO_EDGES`,CHAMFER_NO_EDGES:`CHAMFER_NO_EDGES`,CHAMFER_ANGLE_NO_EDGES:`CHAMFER_ANGLE_NO_EDGES`,CHAMFER_ANGLE_BAD_DISTANCE:`CHAMFER_ANGLE_BAD_DISTANCE`,CHAMFER_ANGLE_BAD_ANGLE:`CHAMFER_ANGLE_BAD_ANGLE`,BEZIER_MIN_POINTS:`BEZIER_MIN_POINTS`,POLYGON_MIN_POINTS:`POLYGON_MIN_POINTS`,ZERO_LENGTH_EXTRUSION:`ZERO_LENGTH_EXTRUSION`,ZERO_TWIST_ANGLE:`ZERO_TWIST_ANGLE`,LOFT_EMPTY:`LOFT_EMPTY`,UNSUPPORTED_PROFILE:`UNSUPPORTED_PROFILE`,UNKNOWN_PLANE:`UNKNOWN_PLANE`,NULL_SHAPE_INPUT:`NULL_SHAPE_INPUT`,INVALID_FILLET_RADIUS:`INVALID_FILLET_RADIUS`,INVALID_CHAMFER_DISTANCE:`INVALID_CHAMFER_DISTANCE`,INVALID_THICKNESS:`INVALID_THICKNESS`,ZERO_OFFSET:`ZERO_OFFSET`,NO_EDGES:`NO_EDGES`,NO_FACES:`NO_FACES`,DRAFT_NO_FACES:`DRAFT_NO_FACES`,DRAFT_INVALID_ANGLE:`DRAFT_INVALID_ANGLE`,DRAFT_NOT_3D:`DRAFT_NOT_3D`,DRAFT_FAILED:`DRAFT_FAILED`,FUSE_NOT_3D:`FUSE_NOT_3D`,CUT_NOT_3D:`CUT_NOT_3D`,INTERSECT_NOT_3D:`INTERSECT_NOT_3D`,FUSE_ALL_NOT_3D:`FUSE_ALL_NOT_3D`,CUT_ALL_NOT_3D:`CUT_ALL_NOT_3D`,LOFT_NOT_3D:`LOFT_NOT_3D`,SWEEP_NOT_3D:`SWEEP_NOT_3D`,REVOLUTION_NOT_3D:`REVOLUTION_NOT_3D`,FILLET_NOT_3D:`FILLET_NOT_3D`,CHAMFER_NOT_3D:`CHAMFER_NOT_3D`,CHAMFER_ANGLE_NOT_3D:`CHAMFER_ANGLE_NOT_3D`,CHAMFER_ANGLE_FAILED:`CHAMFER_ANGLE_FAILED`,CSG_NOT_3D:`CSG_NOT_3D`,SHELL_NOT_3D:`SHELL_NOT_3D`,OFFSET_NOT_3D:`OFFSET_NOT_3D`,NULL_SHAPE:`NULL_SHAPE`,NO_WRAPPER:`NO_WRAPPER`,WELD_NOT_SHELL:`WELD_NOT_SHELL`,SOLID_BUILD_FAILED:`SOLID_BUILD_FAILED`,OFFSET_NOT_WIRE:`OFFSET_NOT_WIRE`,UNKNOWN_SURFACE_TYPE:`UNKNOWN_SURFACE_TYPE`,UNKNOWN_CURVE_TYPE:`UNKNOWN_CURVE_TYPE`,SWEEP_START_NOT_WIRE:`SWEEP_START_NOT_WIRE`,SWEEP_END_NOT_WIRE:`SWEEP_END_NOT_WIRE`,STEP_EXPORT_FAILED:`STEP_EXPORT_FAILED`,STEP_EXPORT_CONFIGURED_FAILED:`STEP_EXPORT_CONFIGURED_FAILED`,STEP_FILE_READ_ERROR:`STEP_FILE_READ_ERROR`,STEP_EXPORT_CRASHED:`STEP_EXPORT_CRASHED`,STEP_EXPORT_UNSERIALIZABLE:`STEP_EXPORT_UNSERIALIZABLE`,STL_EXPORT_FAILED:`STL_EXPORT_FAILED`,STL_FILE_READ_ERROR:`STL_FILE_READ_ERROR`,STL_EXPORT_CRASHED:`STL_EXPORT_CRASHED`,STL_EXPORT_UNSERIALIZABLE:`STL_EXPORT_UNSERIALIZABLE`,STEP_IMPORT_FAILED:`STEP_IMPORT_FAILED`,STL_IMPORT_FAILED:`STL_IMPORT_FAILED`,IGES_EXPORT_FAILED:`IGES_EXPORT_FAILED`,IGES_IMPORT_FAILED:`IGES_IMPORT_FAILED`,DXF_IMPORT_FAILED:`DXF_IMPORT_FAILED`,OBJ_IMPORT_FAILED:`OBJ_IMPORT_FAILED`,THREEMF_IMPORT_FAILED:`THREEMF_IMPORT_FAILED`,PARAMETER_NOT_FOUND:`PARAMETER_NOT_FOUND`,INTERSECTION_FAILED:`INTERSECTION_FAILED`,SELF_INTERSECTION_FAILED:`SELF_INTERSECTION_FAILED`,STRAIGHT_SKELETON_FAILED:`STRAIGHT_SKELETON_FAILED`,CENTER_OF_MASS_FAILED:`CENTER_OF_MASS_FAILED`,COMPOUND_NO_FACES:`COMPOUND_NO_FACES`,COMPOUND_FACE_NOT_FOUND:`COMPOUND_FACE_NOT_FOUND`,FINDER_NOT_UNIQUE:`FINDER_NOT_UNIQUE`,HULL_EMPTY_INPUT:`HULL_EMPTY_INPUT`,HULL_FAILED:`HULL_FAILED`,HULL_DEGENERATE:`HULL_DEGENERATE`,HULL_NOT_3D:`HULL_NOT_3D`,MINKOWSKI_FAILED:`MINKOWSKI_FAILED`,MINKOWSKI_NULL_TOOL:`MINKOWSKI_NULL_TOOL`,MINKOWSKI_NOT_3D:`MINKOWSKI_NOT_3D`,POLYHEDRON_INSUFFICIENT_POINTS:`POLYHEDRON_INSUFFICIENT_POINTS`,POLYHEDRON_INSUFFICIENT_FACES:`POLYHEDRON_INSUFFICIENT_FACES`,POLYHEDRON_INVALID_INDEX:`POLYHEDRON_INVALID_INDEX`,POLYHEDRON_FAILED:`POLYHEDRON_FAILED`,VALIDATION_FAILED:`VALIDATION_FAILED`,ROOF_FAILED:`ROOF_FAILED`,MULTI_SWEEP_INSUFFICIENT_SECTIONS:`MULTI_SWEEP_INSUFFICIENT_SECTIONS`,MULTI_SWEEP_FAILED:`MULTI_SWEEP_FAILED`,GUIDED_SWEEP_FAILED:`GUIDED_SWEEP_FAILED`,SURFACE_GRID_TOO_SMALL:`SURFACE_GRID_TOO_SMALL`,SURFACE_GRID_JAGGED:`SURFACE_GRID_JAGGED`,SURFACE_FAILED:`SURFACE_FAILED`,ASSEMBLY_MATE_INVALID:`ASSEMBLY_MATE_INVALID`,ASSEMBLY_SOLVE_FAILED:`ASSEMBLY_SOLVE_FAILED`,ASSEMBLY_NOT_CONVERGED:`ASSEMBLY_NOT_CONVERGED`,BLUEPRINT_EMPTY_CURVES:`BLUEPRINT_EMPTY_CURVES`,COMPOUND_BLUEPRINT_EMPTY:`COMPOUND_BLUEPRINT_EMPTY`,GLB_IMPORT_FAILED:`GLB_IMPORT_FAILED`,FONT_FETCH_FAILED:`FONT_FETCH_FAILED`,FONT_PARSE_FAILED:`FONT_PARSE_FAILED`,NO_FONT_LOADED:`NO_FONT_LOADED`,CURVE2D_CONSTRUCTION_FAILED:`CURVE2D_CONSTRUCTION_FAILED`,CURVE2D_INVALID_RADIUS:`CURVE2D_INVALID_RADIUS`,CURVE2D_TRANSFORM_FAILED:`CURVE2D_TRANSFORM_FAILED`,CURVE2D_QUERY_FAILED:`CURVE2D_QUERY_FAILED`,CURVE2D_INTERSECTION_FAILED:`CURVE2D_INTERSECTION_FAILED`,CURVE2D_BRIDGE_FAILED:`CURVE2D_BRIDGE_FAILED`,CLONE_FAILED:`CLONE_FAILED`,SIMPLIFY_FAILED:`SIMPLIFY_FAILED`,TO_BREP_FAILED:`TO_BREP_FAILED`,UNSUPPORTED_CAPABILITY:`UNSUPPORTED_CAPABILITY`};function so(e,t,n,r,i,a){let o={kind:e,code:t,message:n,cause:r};if(a){let e={...o,suggestion:a};return i?{...e,metadata:i}:e}return i?{...o,metadata:i}:o}function P(e,t,n,r,i){return so(`KERNEL_OPERATION`,e,t,n,r,i)}function F(e,t,n,r,i){return so(`VALIDATION`,e,t,n,r,i)}function co(e,t,n,r,i){return so(`TYPE_CAST`,e,t,n,r,i)}function lo(e,t,n,r,i){return so(`SKETCHER_STATE`,e,t,n,r,i)}function uo(e,t,n,r,i){return so(`MODULE_INIT`,e,t,n,r,i)}function I(e,t,n,r,i){return so(`COMPUTATION`,e,t,n,r,i)}function fo(e,t,n,r,i){return so(`IO`,e,t,n,r,i)}function po(e,t,n,r,i){return so(`QUERY`,e,t,n,r,i)}function mo(e,t,n,r,i){return so(`UNSUPPORTED`,e,t,n,r,i)}function ho(e,n,r){return(n<0||n>=e.length)&&M(r??`safeIndex`,`Index ${n} is out of bounds (array length ${e.length})`),t(e,n)}var go={draft:{tolerance:.01,angularTolerance:.5},standard:{tolerance:.001,angularTolerance:.1},fine:{tolerance:1e-4,angularTolerance:.05}},_o=`standard`;function vo(){return _o}function yo(e=_o){return go[e]}function bo(e){_o=e}function xo(e){return`makeLine2d`in e}var So=[`boolean`,`loft`,`extrude`,`shell`,`fillet`,`mesh`,`edgeMesh`,`transform`],Co=Object.create(null),wo=Object.create(null);function To(){for(let e of So)Co[e]=0,wo[e]=0}To();function Eo(e){let t=performance.now();return()=>{Co[e]=(Co[e]??0)+(performance.now()-t),wo[e]=(wo[e]??0)+1}}function Do(){let e={};for(let t of So)e[t]={totalMs:Co[t]??0,count:wo[t]??0};return e}function Oo(){To()}var ko;function Ao(){ko=void 0}function jo(e){return ko??=typeof e.BooleanBatch==`function`,ko}function Mo(e){return e===`commonFace`?1:e===`sameFace`?2:0}function No(e,t,n={}){if(!jo(e))return null;let r=Eo(`boolean`),i=new e.BooleanBatch;try{for(let e of t)i.addShape(e);return i.fuseAll(Mo(n.optimisation),!!n.simplify,n.fuzzyValue??0)}finally{i.delete(),r()}}function Po(e,t,n,r={}){if(!jo(e))return null;if(n.length===0)return t;let i=Eo(`boolean`),a=new e.BooleanBatch;try{for(let e of n)a.addShape(e);return a.cutAll(t,Mo(r.optimisation),!!r.simplify,r.fuzzyValue??0)}finally{a.delete(),i()}}var Fo=2147483647,Io;function Lo(){Io=void 0}function Ro(e){return Io??=typeof e.MeasurementExtractor?.extract==`function`,Io}function zo(e,t,n=!1){if(Ro(e)){let r=e.MeasurementExtractor.extract(t,n);try{let t=r.getDataPtr()/8,n=r.getDataSize(),i=e.HEAPF64.slice(t,t+n);return{volume:i[0]??0,area:i[1]??0,length:i[2]??0,centerOfMass:[i[3]??0,i[4]??0,i[5]??0],boundingBox:{min:[i[6]??0,i[7]??0,i[8]??0],max:[i[9]??0,i[10]??0,i[11]??0]}}}finally{r.delete()}}return{volume:Bo(e,t),area:Vo(e,t),length:n?Ho(e,t):0,centerOfMass:Uo(e,t),boundingBox:Go(e,t)}}function Bo(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.VolumeProperties_1(t,n,!0,!1,!1);let r=n.Mass();return n.delete(),r}function Vo(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.SurfaceProperties_2(t,n,1e-7,!0);let r=n.Mass();return n.delete(),r}function Ho(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.LinearProperties(t,n,!0,!1);let r=n.Mass();return n.delete(),r}function Uo(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.VolumeProperties_1(t,n,!0,!1,!1);let r=n.CentreOfMass(),i=[r.X(),r.Y(),r.Z()];return r.delete(),n.delete(),i}function Wo(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.LinearProperties(t,n,!0,!1);let r=n.CentreOfMass(),i=[r.X(),r.Y(),r.Z()];return r.delete(),n.delete(),i}function Go(e,t){let n=new e.Bnd_Box;e.BRepBndLib.Add(t,n,!0);let r={min:[n.GetXMin(),n.GetYMin(),n.GetZMin()],max:[n.GetXMax(),n.GetYMax(),n.GetZMax()]};return n.delete(),r}function Ko(e,t,n){let r=new e.BRepExtrema_DistShapeShape_1;r.LoadS1(t),r.LoadS2(n);let i=new e.Message_ProgressRange_1;if(r.Perform(i),!r.IsDone())throw i.delete(),r.delete(),Error(`BRepExtrema_DistShapeShape failed`);let a=r.Value(),o=r.PointOnShape1(1),s=r.PointOnShape2(1),c={value:a,point1:[o.X(),o.Y(),o.Z()],point2:[s.X(),s.Y(),s.Z()]};return o.delete(),s.delete(),i.delete(),r.delete(),c}function qo(e,t,n,r,i=1e-6){if(!e.BRepClass_FaceClassifier)throw Error(`BRepClass_FaceClassifier not available in this WASM build`);let a=new e.gp_Pnt2d_3(n,r),o=new e.BRepClass_FaceClassifier_3(t,a,i),s=o.State();a.delete(),o.delete();let c=e.TopAbs_State;return s===c.TopAbs_IN?`in`:s===c.TopAbs_ON?`on`:`out`}function Jo(e){return{volume:t=>Bo(e,t),area:t=>Vo(e,t),length:t=>Ho(e,t),centerOfMass:t=>Uo(e,t),linearCenterOfMass:t=>Wo(e,t),boundingBox:t=>Go(e,t),distance:(t,n)=>Ko(e,t,n),classifyPointOnFace:(t,n,r,i)=>qo(e,t,n,r,i),measureBulk:(t,n)=>zo(e,t,n)}}var Yo={vertex:7,edge:6,wire:5,face:4,shell:3,solid:2,compsolid:1,compound:0};function Xo(e,t,n){let r=e.TopologyExtractor.extract(t,Yo[n]),i=r.getShapesCount(),a=[];for(let e=0;e<i;e++)a.push(r.getShape(e));return r.delete(),a}var Zo=new WeakMap;function Qo(e,t,n){let r=Zo.get(e);if(!r){let t=e.TopAbs_ShapeEnum;r={vertex:t.TopAbs_VERTEX,edge:t.TopAbs_EDGE,wire:t.TopAbs_WIRE,face:t.TopAbs_FACE,shell:t.TopAbs_SHELL,solid:t.TopAbs_SOLID,compsolid:t.TopAbs_COMPSOLID,compound:t.TopAbs_COMPOUND},Zo.set(e,r)}let i=new e.TopExp_Explorer_2(t,r[n],e.TopAbs_ShapeEnum.TopAbs_SHAPE),a=[],o=new Map;for(;i.More();){let t=i.Current(),n=e.shapeHashCode(t,Fo),r=o.get(n);r?r.some(e=>e.IsSame(t))||(r.push(t),a.push(t)):(o.set(n,[t]),a.push(t)),i.Next()}return i.delete(),a}function $o(e,t,n){return e.TopologyExtractor?Xo(e,t,n):Qo(e,t,n)}var es=new WeakMap;function ts(e){let t=es.get(e);if(!t){let n=e.TopAbs_ShapeEnum;t=new Map([[n.TopAbs_VERTEX,`vertex`],[n.TopAbs_EDGE,`edge`],[n.TopAbs_WIRE,`wire`],[n.TopAbs_FACE,`face`],[n.TopAbs_SHELL,`shell`],[n.TopAbs_SOLID,`solid`],[n.TopAbs_COMPSOLID,`compsolid`],[n.TopAbs_COMPOUND,`compound`]]),es.set(e,t)}return t}function ns(e,t){if(t.IsNull())throw Error(`Cannot determine shape type: shape is null`);let n=ts(e).get(t.ShapeType());if(!n)throw Error(`Unknown shape type enum value`);return n}function rs(e,t){let n=new e.BRepCheck_Analyzer(t,!0,!1,!1),r=n.IsValid_2();return n.delete(),r}function is(e,t,n=1e-6){let r=new e.BRepBuilderAPI_Sewing(n,!0,!0,!0,!1);for(let e of t)r.Add(e);let i=new e.Message_ProgressRange_1;r.Perform(i);let a=r.SewedShape();return i.delete(),r.delete(),a}function as(e,t,n){if(e.TopTools_ListIteratorOfListOfShape){let r=new e.TopTools_ListIteratorOfListOfShape(t);for(;r.More();)n(r.Value()),r.Next();r.delete()}else{let r=new e.TopTools_ListOfShape_3(t);for(;r.Size()>0;)n(r.First_1()),r.RemoveFirst();r.delete()}}function os(e,t){return e.IsSame(t)}function ss(e,t){return e.IsEqual(t)}function cs(e){return{iterShapes:(t,n)=>$o(e,t,n),iterShapeList:(t,n)=>{as(e,t,n)},shapeType:t=>ns(e,t),isSame:(e,t)=>os(e,t),isEqual:(e,t)=>ss(e,t),isValid:t=>rs(e,t),sew:(t,n)=>is(e,t,n)}}var ls=.001;function us(e,t,n){n===`commonFace`&&t.SetGlue(e.BOPAlgo_GlueEnum.BOPAlgo_GlueShift),n===`sameFace`&&t.SetGlue(e.BOPAlgo_GlueEnum.BOPAlgo_GlueFull)}function ds(e,t){e.SetRunParallel(!0),e.SetUseOBB?.(!0),t!==void 0&&t>0&&e.SetFuzzyValue?.(t)}function fs(e,t){if(t.length<3)return 0;let n=t[0];if(!n)return 0;let r=new e.Bnd_Box;if(e.BRepBndLib.Add(n,r,!0),r.IsVoid())return r.delete(),0;let i=r.CornerMin(),a=r.CornerMax(),o=a.X()-i.X(),s=a.Y()-i.Y(),c=a.Z()-i.Z();return i.delete(),a.delete(),r.delete(),Math.sqrt(o*o+s*s+c*c)>1?1e-5:0}function ps(e,t){let n=new e.TopoDS_Builder,r=new e.TopoDS_Compound;n.MakeCompound(r);for(let e of t)n.Add(r,e);return n.delete(),r}function ms(e,t,n,r={}){let i=Eo(`boolean`);try{let{optimisation:i,simplify:a=!1,fuzzyValue:o}=r,s=new e.Message_ProgressRange_1,c=new e.BRepAlgoAPI_Fuse_3(t,n,s);us(e,c,i),ds(c,o),c.Build(s),a&&c.SimplifyResult(!0,!0,ls);let l=c.Shape();return c.delete(),s.delete(),l}finally{i()}}function hs(e,t,n,r={}){let i=Eo(`boolean`);try{let{optimisation:i,simplify:a=!1,fuzzyValue:o}=r,s=new e.Message_ProgressRange_1,c=new e.BRepAlgoAPI_Cut_3(t,n,s);us(e,c,i),ds(c,o),c.Build(s),a&&c.SimplifyResult(!0,!0,ls);let l=c.Shape();return c.delete(),s.delete(),l}finally{i()}}function gs(e,t,n,r={}){let i=Eo(`boolean`);try{let{optimisation:i,simplify:a=!1,fuzzyValue:o}=r,s=new e.Message_ProgressRange_1,c=new e.BRepAlgoAPI_Common_3(t,n,s);us(e,c,i),ds(c,o),c.Build(s),a&&c.SimplifyResult(!0,!0,ls);let l=c.Shape();return c.delete(),s.delete(),l}finally{i()}}function _s(e,t,n,r=!0){let i=new e.Message_ProgressRange_1,a=new e.BRepAlgoAPI_Section_3(t,n,!1);if(a.Approximation(r),ds(a),a.Build(i),!a.IsDone())throw a.delete(),i.delete(),Error(`BRepAlgoAPI_Section build failed`);let o=a.Shape();return a.delete(),i.delete(),o}function vs(e,t,n={}){let r=No(e,t,n);if(r!==null)return r;let i=Eo(`boolean`);try{let{optimisation:r,simplify:i=!1}=n,a=n.fuzzyValue??fs(e,t),o=new e.TopTools_ListOfShape_1;for(let e of t)o.Append_1(e);let s=new e.BRepAlgoAPI_BuilderAlgo_1;s.SetArguments(o),us(e,s,r),ds(s,a);let c=new e.Message_ProgressRange_1;s.Build(c);let l=s.Shape();if(i){let t=new e.ShapeUpgrade_UnifySameDomain_2(l,!0,!0,!1);t.Build(),l=t.Shape(),t.delete()}return o.delete(),s.delete(),c.delete(),l}finally{i()}}function ys(e,n,r,i,a){a.signal?.throwIfAborted();let o=i-r;if(o===1)return t(n,r);if(o===2)return ms(e,n[r],n[r+1],{...a,simplify:!1});let s=r+Math.ceil(o/2);return ms(e,ys(e,n,r,s,a),ys(e,n,s,i,a),{...a,simplify:!1})}function bs(e,t,n={}){let r=ys(e,t,0,t.length,n);if(n.simplify){let t=new e.ShapeUpgrade_UnifySameDomain_2(r,!0,!0,!1);t.Build();let n=t.Shape();return t.delete(),n}return r}function xs(e,n,r={}){if(n.length===0)throw Error(`fuseAll requires at least one shape`);if(n.length===1)return t(n,0);let{strategy:i=`native`}=r;return i===`pairwise`?bs(e,n,r):vs(e,n,r)}function Ss(e,t,n){if(!e.BRepAlgoAPI_Splitter)throw Error(`BRepAlgoAPI_Splitter not available in this WASM build`);let r=new e.TopTools_ListOfShape_1;r.Append_1(t);let i=new e.TopTools_ListOfShape_1;for(let e of n)i.Append_1(e);let a=new e.BRepAlgoAPI_Splitter;a.SetArguments(r),a.SetTools(i),ds(a);let o=new e.Message_ProgressRange_1;a.Build(o);let s=a.Shape();return a.delete(),o.delete(),r.delete(),i.delete(),s}function Cs(e,t,n,r={}){if(n.length===0)return t;let i=Po(e,t,n,r);if(i!==null)return i;let a=ps(e,n),o=hs(e,t,a,r);return a.delete(),o}function ws(e,t,n,r,i){let a=[];return t.IsNull()&&a.push({operand:`base`,issue:`null-shape`,message:`Base shape is null`}),n.IsNull()&&a.push({operand:`tool`,issue:`null-shape`,message:`Tool shape is null`}),a.length>0?{valid:!1,issues:a}:(i(t)||a.push({operand:`base`,issue:`not-valid`,message:`Base shape fails BRepCheck validation. Try autoHeal() first.`}),i(n)||a.push({operand:`tool`,issue:`not-valid`,message:`Tool shape fails BRepCheck validation. Try autoHeal() first.`}),{valid:a.length===0,issues:a})}function Ts(e){return{fuse:(t,n,r)=>ms(e,t,n,r),cut:(t,n,r)=>hs(e,t,n,r),intersect:(t,n,r)=>gs(e,t,n,r),section:(t,n,r)=>_s(e,t,n,r),fuseAll:(t,n)=>xs(e,t,n),cutAll:(t,n,r)=>Cs(e,t,n,r),split:(t,n)=>Ss(e,t,n),checkBoolean:(t,n,r)=>ws(e,t,n,r,t=>rs(e,t))}}var Es={fuse:0,cut:1,intersect:2};function Ds(e,t,n,r={}){let{glueMode:i=0,fuzzyValue:a=0}=r;if(typeof e.BooleanPipeline==`function`){let r=new e.BooleanPipeline;try{for(let e of n)r.addStep(Es[e.op],e.tool);let e=r.execute(t,i,a);return e.IsNull()?null:e}finally{r.delete()}}}function Os(e){return{booleanPipeline:(t,n,r)=>Ds(e,t,n,r)??null}}function ks(e,t,n,r){let i=new e.gp_Pnt_3(t,n,r),a=new e.BRepBuilderAPI_MakeVertex(i),o=a.Vertex();return a.delete(),i.delete(),o}function As(e,t,n,r){let i=n!==void 0&&r!==void 0?new e.BRepBuilderAPI_MakeEdge_24(t,n,r):new e.BRepBuilderAPI_MakeEdge_24(t),a=i.Edge();return i.delete(),a}function js(e,t){let n=new e.BRepBuilderAPI_MakeWire_1;for(let e of t)n.Add_1(e);let r=new e.Message_ProgressRange_1;n.Build(r);let i=n.Wire();return n.delete(),r.delete(),i}function Ms(e,t,n=!0){if(n){let n=new e.BRepBuilderAPI_MakeFace_15(t,!1),r=n.Face();return n.delete(),r}let r=new e.BRepOffsetAPI_MakeFilling(3,15,2,!1,1e-5,1e-4,.01,.1,8,9),i=$o(e,t,`edge`);for(let t of i)r.Add_1(t,e.GeomAbs_Shape.GeomAbs_C0,!0);let a=new e.Message_ProgressRange_1;r.Build(a);let o=r.Shape();return r.delete(),a.delete(),o}function Ns(e,t,n,r){let i=new e.BRepPrimAPI_MakeBox_2(t,n,r),a=i.Solid();return i.delete(),a}function Ps(e,t,n,r=[0,0,0],i=[0,0,1]){let a=new e.gp_Pnt_3(...r),o=new e.gp_Dir_5(...i),s=new e.gp_Ax2_4(a,o),c=new e.BRepPrimAPI_MakeCylinder_3(s,t,n),l=c.Shape();return c.delete(),s.delete(),a.delete(),o.delete(),l}function Fs(e,t,n=[0,0,0]){if(n[0]===0&&n[1]===0&&n[2]===0){let n=new e.BRepPrimAPI_MakeSphere_1(t),r=n.Shape();return n.delete(),r}let r=new e.gp_Pnt_3(...n),i=new e.BRepPrimAPI_MakeSphere_2(r,t),a=i.Shape();return i.delete(),r.delete(),a}function Is(e,t,n,r,i=[0,0,0],a=[0,0,1]){let o=new e.gp_Pnt_3(...i),s=new e.gp_Dir_5(...a),c=new e.gp_Ax2_4(o,s),l=new e.BRepPrimAPI_MakeCone_3(c,t,n,r),u=l.Shape();return l.delete(),c.delete(),o.delete(),s.delete(),u}function Ls(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.BRepBuilderAPI_MakeEdge_3(i,a),c=new e.BRepBuilderAPI_MakeEdge_3(a,o),l=new e.BRepBuilderAPI_MakeEdge_3(o,i),u=new e.BRepBuilderAPI_MakeWire_1;u.Add_1(s.Edge()),u.Add_1(c.Edge()),u.Add_1(l.Edge());let d=null;if(u.IsDone()){let t=new e.BRepBuilderAPI_MakeFace_15(u.Wire(),!1);t.IsDone()&&(d=t.Face()),t.delete()}return u.delete(),s.delete(),c.delete(),l.delete(),i.delete(),a.delete(),o.delete(),d}function Rs(e,t){let n=new e.BRepBuilderAPI_MakeWire_1;for(let r of t){let t=r.ShapeType();t===e.TopAbs_ShapeEnum.TopAbs_EDGE?n.Add_1(r):t===e.TopAbs_ShapeEnum.TopAbs_WIRE&&n.Add_2(r)}let r=new e.Message_ProgressRange_1;n.Build(r);let i=n.Wire();return n.delete(),r.delete(),i}function zs(e,t,n,r=[0,0,0],i=[0,0,1]){let a=new e.gp_Pnt_3(...r),o=new e.gp_Dir_5(...i),s=new e.gp_Ax2_4(a,o),c=new e.BRepPrimAPI_MakeTorus_5(s,t,n),l=c.Shape();return c.delete(),s.delete(),a.delete(),o.delete(),l}function Bs(e){return{makeVertex:(t,n,r)=>ks(e,t,n,r),makeEdge:(t,n,r)=>As(e,t,n,r),makeWire:t=>js(e,t),makeWireFromMixed:t=>Rs(e,t),makeFace:(t,n)=>Ms(e,t,n),makeBox:(t,n,r)=>Ns(e,t,n,r),makeCylinder:(t,n,r,i)=>Ps(e,t,n,r,i),makeSphere:(t,n)=>Fs(e,t,n),makeCone:(t,n,r,i,a)=>Is(e,t,n,r,i,a),makeTorus:(t,n,r,i)=>zs(e,t,n,r,i),buildTriFace:(t,n,r)=>Ls(e,t,n,r)}}function Vs(e,t){let n=e[t];if(n===void 0)throw Error(`Index ${t} out of bounds`);return n}function Hs(e,t,n){let r=[],i=Math.max(n,1);for(let n of t){new e.BRepMesh_IncrementalMeshWrapper(n,i,!1,i*.5,!1).delete();let t=new e.TopExp_Explorer_2(n,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;t.More();){let n=e.TopoDS_Cast.Face(t.Current()),i=new e.TopLoc_Location_1,a=e.BRep_Tool_Triangulation(n,i,0);if(!a.IsNull()){let e=i.Transformation(),t=a.get().NbNodes();for(let n=1;n<=t;n++){let t=a.get().Node(n),i=t.Transformed(e);r.push({x:i.X(),y:i.Y(),z:i.Z()}),i.delete(),t.delete()}e.delete()}i.delete(),t.Next()}t.delete()}return r}function Us(e,t,n){let{faces:r,points:i}=t,a=[];for(let[t,n,o]of r){let r=Vs(i,t),s=Vs(i,n),c=Vs(i,o),l=Ls(e,[r.x,r.y,r.z],[s.x,s.y,s.z],[c.x,c.y,c.z]);l!==null&&a.push(l)}if(a.length<4)throw Error(`hull: only ${a.length} faces built, need at least 4 for a solid`);let o=Math.max(n,1e-4),s=new e.BRepBuilderAPI_Sewing(o,!0,!0,!0,!1);for(let e of a)s.Add(e);let c=new e.Message_ProgressRange_1;s.Perform(c),c.delete();let l=s.SewedShape();s.delete();let u=new e.TopExp_Explorer_2(l,e.TopAbs_ShapeEnum.TopAbs_SHELL,e.TopAbs_ShapeEnum.TopAbs_SHAPE);if(u.More()){let t=e.TopoDS_Cast.Shell(u.Current());u.delete();let n=new e.BRepBuilderAPI_MakeSolid_1;n.Add(t);let r=new e.Message_ProgressRange_1;if(n.Build(r),r.delete(),n.IsDone()){let r=n.Solid();n.delete(),t.delete();let i=new e.GProp_GProps_1;e.BRepGProp.VolumeProperties_1(r,i,!1,!1,!1);let a=i.Mass();return i.delete(),a<0&&r.Complement(),r}return t.delete(),n.delete(),l}return u.delete(),l}function Ws(e,t,n){if(t.length===0)throw Error(`hull: no shapes provided`);let r=Hs(e,t,n);if(r.length<4)throw Error(`hull: fewer than 4 vertices extracted from input shapes`);let i=g(r,n);if(i.faces.length<4)throw Error(`hull: degenerate hull (fewer than 4 faces)`);return Us(e,i,n)}function Gs(e,t,n,r){return Us(e,{points:t,faces:n},r)}function Ks(e,t,n){if(t.length<4)throw Error(`hullFromPoints: fewer than 4 points`);let r=g(t,n);if(r.faces.length<4)throw Error(`hullFromPoints: degenerate hull (fewer than 4 faces)`);return Us(e,r,n)}function qs(e){return{hull:(t,n)=>Ws(e,t,n),hullFromPoints:(t,n)=>Ks(e,t,n),buildSolidFromFaces:(t,n,r)=>Gs(e,t,n,r)}}function Js(e,t,n){let r=new e.gp_Pnt_3(t[0],t[1],t[2]),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.BRepBuilderAPI_MakeEdge_3(r,i),o=a.Edge();return a.delete(),r.delete(),i.delete(),o}function Ys(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Dir_5(n[0],n[1],n[2]),o=new e.gp_Ax2_4(i,a),s=new e.gp_Circ_2(o,r),c=new e.BRepBuilderAPI_MakeEdge_8(s),l=c.Edge();return c.delete(),s.delete(),o.delete(),a.delete(),i.delete(),l}function Xs(e,t,n,r,i,a){let o=new e.gp_Pnt_3(t[0],t[1],t[2]),s=new e.gp_Dir_5(n[0],n[1],n[2]),c=new e.gp_Ax2_4(o,s),l=new e.gp_Circ_2(c,r),u=new e.BRepBuilderAPI_MakeEdge_9(l,i,a),d=u.Edge();return u.delete(),l.delete(),c.delete(),s.delete(),o.delete(),d}function Zs(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.GC_MakeArcOfCircle_4(i,a,o).Value().get(),c=new e.Handle_Geom_Curve_2(s),l=new e.BRepBuilderAPI_MakeEdge_24(c),u=l.Edge();return l.delete(),c.delete(),i.delete(),a.delete(),o.delete(),u}function Qs(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Vec_4(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.GC_MakeArcOfCircle_5(i,a,o).Value().get(),c=new e.Handle_Geom_Curve_2(s),l=new e.BRepBuilderAPI_MakeEdge_24(c),u=l.Edge();return l.delete(),c.delete(),i.delete(),a.delete(),o.delete(),u}function $s(e,t,n,r,i,a){let o=new e.gp_Pnt_3(t[0],t[1],t[2]),s=new e.gp_Dir_5(n[0],n[1],n[2]),c;if(a){let t=new e.gp_Dir_5(a[0],a[1],a[2]);c=new e.gp_Ax2_2(o,s,t),t.delete()}else c=new e.gp_Ax2_4(o,s);let l=new e.gp_Elips_2(c,r,i),u=new e.BRepBuilderAPI_MakeEdge_12(l),d=u.Edge();return u.delete(),l.delete(),c.delete(),s.delete(),o.delete(),d}function ec(e,t,n,r,i,a,o,s){let c=new e.gp_Pnt_3(t[0],t[1],t[2]),l=new e.gp_Dir_5(n[0],n[1],n[2]),u;if(s){let t=new e.gp_Dir_5(s[0],s[1],s[2]);u=new e.gp_Ax2_2(c,l,t),t.delete()}else u=new e.gp_Ax2_4(c,l);let d=new e.gp_Elips_2(u,r,i),f=new e.BRepBuilderAPI_MakeEdge_13(d,a,o),p=f.Edge();return f.delete(),d.delete(),u.delete(),l.delete(),c.delete(),p}function tc(e,n){let r=new e.TColgp_Array1OfPnt_2(1,n.length);for(let i=0;i<n.length;i++){let a=t(n,i),o=new e.gp_Pnt_3(a[0],a[1],a[2]);r.SetValue_1(i+1,o),o.delete()}let i=new e.Geom_BezierCurve_1(r),a=new e.Handle_Geom_Curve_2(i),o=new e.BRepBuilderAPI_MakeEdge_24(a),s=o.Edge();return o.delete(),a.delete(),r.delete(),s}function nc(e,t,n,r,i=[0,0,0],a=[0,0,1],o=!1){let s=e.HelixWireBuilder;if(typeof s?.build==`function`){let e=s.build(r,t,n,i[0],i[1],i[2],a[0],a[1],a[2],o);if(!e.IsNull())return e}let c=n/t,l=o?-2*Math.PI:2*Math.PI,u=new e.gp_Pnt_3(i[0],i[1],i[2]),d=new e.gp_Dir_5(a[0],a[1],a[2]),f=new e.gp_Ax3_5(u,d),p=new e.Geom_CylindricalSurface_1(f,r);f.delete();let m=new e.gp_Pnt2d_3(0,0),h=new e.gp_Dir2d_5(l,t),g=new e.Geom2d_Line_3(m,h),_=g.Value(0),v=g.Value(c*Math.sqrt((2*Math.PI)**2+t**2)),y=new e.GCE2d_MakeSegment_1(_,v),b=new e.Handle_Geom2d_Curve_2(y.Value().get()),x=new e.Handle_Geom_Surface_2(p),S=new e.BRepBuilderAPI_MakeEdge_30(b,x),C=S.Edge();e.BRepLib.BuildCurves3d_2(C);let w=new e.BRepBuilderAPI_MakeWire_2(C),ee=w.Wire();return w.delete(),S.delete(),b.delete(),x.delete(),_.delete(),v.delete(),g.delete(),m.delete(),h.delete(),d.delete(),u.delete(),ee}function rc(e,t,n,r){let i=Math.sqrt(t*n/r),a=t/i,o=n/i,s=new e.gp_Pnt_3(0,0,0),c=new e.gp_Dir_5(0,1,0),l=new e.gp_Ax1_2(s,c),u=new e.gp_Dir_5(0,0,1),d=new e.gp_Ax1_2(s,u),f=new e.gp_Dir_5(1,0,0),p=new e.gp_Ax1_2(s,f),m=new e.gp_GTrsf_1;m.SetAffinity_1(l,a);let h=new e.gp_GTrsf_1;h.SetAffinity_1(d,i);let g=new e.gp_GTrsf_1;return g.SetAffinity_1(p,o),m.Multiply(h),m.Multiply(g),h.delete(),g.delete(),l.delete(),d.delete(),p.delete(),c.delete(),u.delete(),f.delete(),s.delete(),{transform:m,applyToPoint(t){let n=t.XYZ();m.Transforms_1(n);let r=new e.gp_Pnt_2(n);return n.delete(),r}}}function ic(e,t,n,r){let i=new e.gp_Sphere_1;i.SetRadius(1);let a=new e.Geom_SphericalSurface_2(i),o=e.GeomConvert.SurfaceToBSplineSurface(a.UReversed()).get();i.delete(),a.delete();try{let i=rc(e,t,n,r),a=o.NbUPoles(),s=o.NbVPoles();for(let t=1;t<=a;t++)for(let n=1;n<=s;n++){let r=e.bsplineSurfacePole(o,t,n),a=i.applyToPoint(r);o.SetPole_1(t,n,a),r.delete(),a.delete()}i.transform.delete();let c=new e.BRepBuilderAPI_MakeShell_2(o.UReversed(),!1),l=c.Shell();c.delete();let u=new e.ShapeFix_Solid_1,d=u.SolidFromShell(l);return u.delete(),d}finally{o.delete()}}function ac(e,t){let n=new e.TopoDS_Builder,r=new e.TopoDS_Compound;n.MakeCompound(r);for(let e of t)n.Add(r,e);return n.delete(),r}function oc(e,t,n){let r=new e.gp_Pnt_3(t[0],t[1],t[2]),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.BRepPrimAPI_MakeBox_4(r,i),o=a.Solid();return a.delete(),r.delete(),i.delete(),o}function sc(e,t){let n=new e.ShapeFix_Solid_1,r=n.SolidFromShell(e.TopoDS_Cast.Shell(t));return n.delete(),r}function cc(e,t){return e.BRepToolsWrapper.Write(t)}function lc(e,t){return e.BRepToolsWrapper.Read(t)}function uc(e,t,n={}){let r=n.unit??`MM`;e.Interface_Static.SetCVal(`xstep.cascade.unit`,r),e.Interface_Static.SetCVal(`write.step.unit`,r),e.Interface_Static.SetIVal(`write.surfacecurve.mode`,0),e.Interface_Static.SetIVal(`write.precision.mode`,0),e.Interface_Static.SetIVal(`write.step.assembly`,2),e.Interface_Static.SetIVal(`write.step.schema`,5),new e.STEPCAFControl_Writer_1().delete();let i=new e.TCollection_ExtendedString_2(`XmlOcaf`,!0),a=new e.TDocStd_Document(i);i.delete();let o=a.Main(),s=e.XCAFDoc_DocumentTool.ShapeTool(o).get(),c=e.XCAFDoc_DocumentTool.ColorTool(o).get();e.XCAFDoc_ShapeTool.SetAutoNaming(!1);for(let n of t){let t=s.AddShape(n.shape,!1,!0),r=new e.TCollection_ExtendedString_2(n.name,!0);if(e.TDataStd_Name.Set_1(t,r),r.delete(),n.color){let[r,i,a,o]=n.color,s=new e.Quantity_ColorRGBA_5(r/255,i/255,a/255,o/255);c.SetColor_6(t,s,e.XCAFDoc_ColorType.XCAFDoc_ColorSurf),s.delete()}}let l=new e.XSControl_WorkSession,u=new e.Handle_XSControl_WorkSession_2(l),d=new e.STEPCAFControl_Writer_2(u,!1),f=new e.Handle_TDocStd_Document_2(a),p=new e.Message_ProgressRange_1;d.Transfer_1(f,e.STEPControl_StepModelType.STEPControl_AsIs,null,p),p.delete();let m=`assembly_export_${Date.now()}.step`,h=d.Write_1(m),g=``;if(h===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+m);g=new TextDecoder().decode(t),e.FS.unlink(`/`+m)}return d.delete(),u.delete(),f.delete(),a.delete(),g}function dc(e,t){try{t.delete()}catch{}}function fc(e,t,n){let r=Js(e,[0,0,0],[t,0,0]),i=Js(e,[t,0,0],[t,n,0]),a=Js(e,[t,n,0],[0,n,0]),o=Js(e,[0,n,0],[0,0,0]),s=new e.BRepBuilderAPI_MakeWire_1;s.Add_1(r),s.Add_1(i),s.Add_1(a),s.Add_1(o);let c=s.Wire();s.delete(),r.delete(),i.delete(),a.delete(),o.delete();let l=new e.BRepBuilderAPI_MakeFace_15(c,!1),u=l.Face();return l.delete(),u}function pc(e,t,n,r){return new e.gp_Pnt_3(t,n,r)}function mc(e,t,n,r){return new e.gp_Dir_5(t,n,r)}function hc(e,t,n,r){return new e.gp_Vec_4(t,n,r)}function gc(e,t,n,r,i,a,o){let s=new e.gp_Pnt_3(t,n,r),c=new e.gp_Dir_5(i,a,o),l=new e.gp_Ax1_2(s,c);return s.delete(),c.delete(),l}function _c(e,t,n,r,i,a,o,s,c,l){let u=new e.gp_Pnt_3(t,n,r),d=new e.gp_Dir_5(i,a,o),f;if(s!==void 0&&c!==void 0&&l!==void 0){let t=new e.gp_Dir_5(s,c,l);f=new e.gp_Ax2_2(u,d,t),t.delete()}else f=new e.gp_Ax2_4(u,d);return u.delete(),d.delete(),f}function vc(e,t,n,r,i,a,o,s,c,l){let u=new e.gp_Pnt_3(t,n,r),d=new e.gp_Dir_5(i,a,o),f;if(s!==void 0&&c!==void 0&&l!==void 0){let t=new e.gp_Dir_5(s,c,l);f=new e.gp_Ax3_3(u,d,t),t.delete()}else f=new e.gp_Ax3_5(u,d);return u.delete(),d.delete(),f}function yc(e){return{makeLineEdge:(t,n)=>Js(e,t,n),makeCircleEdge:(t,n,r)=>Ys(e,t,n,r),makeCircleArc:(t,n,r,i,a)=>Xs(e,t,n,r,i,a),makeArcEdge:(t,n,r)=>Zs(e,t,n,r),makeEllipseEdge:(t,n,r,i,a)=>$s(e,t,n,r,i,a),makeEllipseArc:(t,n,r,i,a,o,s)=>ec(e,t,n,r,i,a,o,s),makeBezierEdge:t=>tc(e,t),makeTangentArc:(t,n,r)=>Qs(e,t,n,r),makeHelixWire:(t,n,r,i,a,o)=>nc(e,t,n,r,i,a,o),makeCompound:t=>ac(e,t),makeBoxFromCorners:(t,n)=>oc(e,t,n),makeRectangle:(t,n)=>fc(e,t,n),solidFromShell:t=>sc(e,t),makeEllipsoid:(t,n,r)=>ic(e,t,n,r),toBREP:t=>cc(e,t),fromBREP:t=>lc(e,t),exportSTEPAssembly:(t,n)=>uc(e,t,n??{}),dispose:t=>{dc(e,t)},createPoint3d:(t,n,r)=>pc(e,t,n,r),createDirection3d:(t,n,r)=>mc(e,t,n,r),createVector3d:(t,n,r)=>hc(e,t,n,r),createAxis1:(t,n,r,i,a,o)=>gc(e,t,n,r,i,a,o),createAxis2:(t,n,r,i,a,o,s,c,l)=>_c(e,t,n,r,i,a,o,s,c,l),createAxis3:(t,n,r,i,a,o,s,c,l)=>vc(e,t,n,r,i,a,o,s,c,l)}}function bc(e,t,n,r){let i=Eo(`extrude`);try{let i=new e.gp_Vec_4(n[0]*r,n[1]*r,n[2]*r),a=new e.BRepPrimAPI_MakePrism_1(t,i,!1,!0),o=a.Shape();return a.delete(),i.delete(),o}finally{i()}}function xc(e,t,n,r){let i=new e.BRepPrimAPI_MakeRevol_1(t,n,r,!1),a=i.Shape();return i.delete(),a}function Sc(e,t,n=!1,r,i){let a=Eo(`loft`);try{let a=new e.BRepOffsetAPI_ThruSections(!0,n,1e-6);r&&a.AddVertex(r);for(let e of t)a.AddWire(e);i&&a.AddVertex(i);let o=new e.Message_ProgressRange_1;a.Build(o);let s=a.Shape();return a.delete(),o.delete(),s}finally{a()}}function Cc(e,t,n,r={}){let{transitionMode:i}=r,a=new e.BRepOffsetAPI_MakePipeShell(n);typeof a.SetIsBuildHistory==`function`&&a.SetIsBuildHistory(!1),i!==void 0&&a.SetTransitionMode(i),a.Add_1(t,!1,!1);let o=new e.Message_ProgressRange_1;if(a.Build(o),o.delete(),!a.IsDone())throw a.delete(),Error(`Sweep build failed (IsDone=false)`);a.MakeSolid();let s=a.Shape();return a.delete(),s}function wc(e,t,n){let r=new e.BRepOffsetAPI_MakePipe_1(n,t),i=new e.Message_ProgressRange_1;r.Build(i),i.delete();let a=r.Shape();if(a.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_SHELL){let t=new e.BRepBuilderAPI_MakeSolid_1,n=e.TopoDS_Cast.Shell(a);t.Add(n);let i=new e.Message_ProgressRange_1;t.Build(i),i.delete();let o=a;if(t.IsDone()){let n=t.Solid(),r=new e.BRepCheck_Analyzer(n,!0,!1,!1);r.IsValid_2()?o=n:n.delete(),r.delete()}return n.delete(),t.delete(),r.delete(),o}return r.delete(),a}var Tc,Ec;function Dc(){Tc=void 0}function Oc(){Ec=void 0}function kc(e){return Tc??=typeof e.LoftBatch==`function`,Tc}function Ac(e){return Ec??=typeof e.ExtrudeBatch==`function`,Ec}function jc(e,t){if(t.length===0)return[];if(kc(e)){let n=Eo(`loft`),r=new e.LoftBatch;try{for(let e of t){let t=r.beginLoft(e.solid??!0,e.ruled??!1,e.tolerance??1e-6);e.startVertex&&r.setStartVertex(t,e.startVertex);for(let n of e.wires)r.addWire(t,n);e.endVertex&&r.setEndVertex(t,e.endVertex)}let e=r.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{r.delete(),n()}}return t.map(t=>Sc(e,t.wires,t.ruled??!1,t.startVertex,t.endVertex))}function Mc(e,t){if(t.length===0)return[];if(Ac(e)){let n=Eo(`extrude`),r=new e.ExtrudeBatch;try{for(let e of t)r.addExtrude(e.face,e.direction[0]*e.length,e.direction[1]*e.length,e.direction[2]*e.length);let e=r.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{r.delete(),n()}}return t.map(t=>bc(e,t.face,t.direction,t.length))}function Nc(e){return{extrude:(t,n,r)=>bc(e,t,n,r),revolve:(t,n,r)=>xc(e,t,n,r),loft:(t,n,r,i)=>Sc(e,t,n,r,i),sweep:(t,n,r)=>Cc(e,t,n,r??{}),simplePipe:(t,n)=>wc(e,t,n),loftBatch:t=>jc(e,t),extrudeBatch:t=>Mc(e,t)}}function Pc(e,t,n,r){let i=Eo(`fillet`);try{let i=new e.BRepFilletAPI_MakeFillet(t,e.ChFi3d_FilletShape.ChFi3d_Rational);for(let t of n){let n=typeof r==`function`?r(t):r,a=e.TopoDS_Cast.Edge(t);if(typeof n==`number`)n>0&&i.Add_2(n,a);else{let[e,t]=n;e>0&&t>0&&i.Add_3(e,t,a)}}let a=i.Shape();return i.delete(),a}finally{i()}}function Fc(e,t,n,r){let i=new e.BRepFilletAPI_MakeChamfer(t),a=null;function o(){if(a)return a;a=new Map;let n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;n.More();){let t=e.TopoDS_Cast.Face(n.Current()),r=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_EDGE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;r.More();){let n=e.shapeHashCode(r.Current(),2147483647);a.has(n)||a.set(n,t),r.Next()}r.delete(),n.Next()}return n.delete(),a}function s(t){return o().get(e.shapeHashCode(t,2147483647))??null}for(let t of n){let n=typeof r==`function`?r(t):r,a=e.TopoDS_Cast.Edge(t);if(typeof n==`number`)n>0&&i.Add_2(n,a);else{let[e,r]=n;if(e>0&&r>0){let n=s(t);n&&i.Add_3(e,r,a,n)}}}let c=i.Shape();return i.delete(),c}function Ic(e,t,n,r,i=.001){let a=Eo(`shell`);try{let a=new e.TopTools_ListOfShape_1;for(let e of n)a.Append_1(e);let o=new e.Message_ProgressRange_1,s=new e.BRepOffsetAPI_MakeThickSolid;s.MakeThickSolidByJoin(t,a,-r,i,e.BRepOffset_Mode.BRepOffset_Skin,!1,!1,e.GeomAbs_JoinType.GeomAbs_Arc,!1,o);let c=s.Shape();return s.delete(),a.delete(),o.delete(),c}finally{a()}}function Lc(e,t,n){let r=new e.BRepOffsetAPI_MakeThickSolid;r.MakeThickSolidBySimple(t,n);let i=new e.Message_ProgressRange_1;r.Build(i);let a=r.Shape();return r.delete(),i.delete(),a}function Rc(e,t,n,r,i){let a=new e.BRepFilletAPI_MakeChamfer(t),o=i*Math.PI/180,s=new Map,c=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;c.More();){let t=e.TopoDS_Cast.Face(c.Current()),n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_EDGE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;n.More();){let r=e.shapeHashCode(n.Current(),2147483647);s.has(r)||s.set(r,t),n.Next()}n.delete(),c.Next()}c.delete();for(let t of n){let n=s.get(e.shapeHashCode(t,2147483647))??null;n&&r>0&&a.AddDA(r,o,e.TopoDS_Cast.Edge(t),n)}let l=a.Shape();return a.delete(),l}function zc(e,t,n,r){let i;i=typeof r==`string`?{arc:e.GeomAbs_JoinType.GeomAbs_Arc,intersection:e.GeomAbs_JoinType.GeomAbs_Intersection,tangent:e.GeomAbs_JoinType.GeomAbs_Tangent}[r]??e.GeomAbs_JoinType.GeomAbs_Arc:r??e.GeomAbs_JoinType.GeomAbs_Arc;let a=new e.BRepOffsetAPI_MakeOffset_3(t,i,!1);a.Perform(n,0);let o=a.Shape();return a.delete(),o}function Bc(e,t,n,r=1e-6){let i=new e.Message_ProgressRange_1,a=new e.BRepOffsetAPI_MakeOffsetShape;a.PerformByJoin(t,n,r,e.BRepOffset_Mode.BRepOffset_Skin,!1,!1,e.GeomAbs_JoinType.GeomAbs_Arc,!1,i);let o=a.Shape();return a.delete(),i.delete(),o}var Vc,Hc;function Uc(){Vc=void 0}function Wc(){Hc=void 0}function Gc(e){return Vc??=typeof e.ShellBatch==`function`,Vc}function Kc(e){return Hc??=typeof e.FilletBatch==`function`,Hc}function qc(e,t){if(t.length===0)return[];if(Gc(e)){let n=Eo(`shell`),r=new e.ShellBatch;try{for(let e of t){let t=r.beginShell(e.shape,e.thickness,e.tolerance??.001);for(let n of e.faces)r.addFaceToRemove(t,n)}let e=r.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{r.delete(),n()}}return t.map(t=>Ic(e,t.shape,t.faces,t.thickness,t.tolerance??.001))}function Jc(e,t){if(t.length===0)return[];if(Kc(e)){let n=Eo(`fillet`),r=new e.FilletBatch;try{for(let e of t){let t=r.beginFillet(e.shape);for(let n of e.edges)n.r2===void 0?r.addEdge(t,n.edge,n.radius):r.addEdgeVariable(t,n.edge,n.radius,n.r2)}let e=r.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{r.delete(),n()}}return t.map(t=>{let n=t.edges.map(e=>e.edge);return Pc(e,t.shape,n,e=>{let n=t.edges.find(t=>t.edge===e);return n?n.r2===void 0?n.radius:[n.radius,n.r2]:0})})}function Yc(e){return{fillet:(t,n,r)=>Pc(e,t,n,r),chamfer:(t,n,r)=>Fc(e,t,n,r),chamferDistAngle:(t,n,r,i)=>Rc(e,t,n,r,i),shell:(t,n,r,i)=>Ic(e,t,n,r,i),thicken:(t,n)=>Lc(e,t,n),offset:(t,n,r)=>Bc(e,t,n,r),offsetWire2D:(t,n,r)=>zc(e,t,n,r),shellBatch:t=>qc(e,t),filletBatch:t=>Jc(e,t)}}var Xc;function Zc(){Xc=void 0}function Qc(e){return Xc??=typeof e.TransformBatch==`function`,Xc}function $c(e,t){if(t.length===0)return[];let n=Eo(`transform`);try{if(Qc(e)){let n=new e.TransformBatch;try{for(let e of t)switch(e.type){case`translate`:n.addTranslate(e.shape,e.x,e.y,e.z);break;case`rotate`:n.addRotate(e.shape,e.angle*Math.PI/180,...e.axis,...e.center);break;case`scale`:n.addScale(e.shape,...e.center,e.factor);break;case`mirror`:n.addMirror(e.shape,...e.origin,...e.normal);break}let e=n.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{n.delete()}}return t.map(t=>{switch(t.type){case`translate`:return tl(e,t.shape,t.x,t.y,t.z);case`rotate`:return nl(e,t.shape,t.angle,[...t.axis],[...t.center]);case`scale`:return il(e,t.shape,[...t.center],t.factor);case`mirror`:return rl(e,t.shape,[...t.origin],[...t.normal])}})}finally{n()}}function el(e,t,n){let r=new e.BRepBuilderAPI_Transform_2(t,n,!0,!1),i=r.ModifiedShape(t);return r.delete(),i}function tl(e,t,n,r,i){let a=new e.gp_Trsf_1,o=new e.gp_Vec_4(n,r,i);a.SetTranslation_1(o);let s=el(e,t,a);return a.delete(),o.delete(),s}function nl(e,t,n,r=[0,0,1],i=[0,0,0]){let a=new e.gp_Trsf_1,o=new e.gp_Pnt_3(...i),s=new e.gp_Dir_5(...r),c=new e.gp_Ax1_2(o,s);a.SetRotation_1(c,n*Math.PI/180);let l=el(e,t,a);return a.delete(),c.delete(),o.delete(),s.delete(),l}function rl(e,t,n,r){let i=new e.gp_Trsf_1,a=new e.gp_Pnt_3(...n),o=new e.gp_Dir_5(...r),s=new e.gp_Ax2_4(a,o);i.SetMirror_3(s);let c=el(e,t,i);return i.delete(),s.delete(),a.delete(),o.delete(),c}function il(e,t,n,r){let i=new e.gp_Trsf_1,a=new e.gp_Pnt_3(...n);i.SetScale(a,r);let o=el(e,t,i);return i.delete(),a.delete(),o}function al(e,t,n,r,i){if(i){let i=new e.gp_Trsf_1;i.SetValues(n[0],n[1],n[2],r[0],n[3],n[4],n[5],r[1],n[6],n[7],n[8],r[2]);let a=new e.BRepBuilderAPI_Transform_2(t,i,!0,!1),o=a.ModifiedShape(t);return a.delete(),i.delete(),o}let a=new e.gp_GTrsf_1;for(let e=0;e<3;e++)for(let t=0;t<3;t++)a.SetValue(e+1,t+1,n[e*3+t]);let o=new e.gp_XYZ_2(r[0],r[1],r[2]);a.SetTranslationPart(o),o.delete();let s=new e.BRepBuilderAPI_GTransform_2(t,a,!0),c=s.ModifiedShape(t);return s.delete(),a.delete(),c}function ol(e,t){let n=new e.ShapeUpgrade_UnifySameDomain_2(t,!0,!0,!1);n.Build();let r=n.Shape();return n.delete(),r}function sl(e){return{transform:(t,n)=>el(e,t,n),translate:(t,n,r,i)=>tl(e,t,n,r,i),rotate:(t,n,r,i)=>nl(e,t,n,r,i),mirror:(t,n,r)=>rl(e,t,n,r),scale:(t,n,r)=>il(e,t,n,r),transformBatch:t=>$c(e,t),generalTransform:(t,n,r,i)=>al(e,t,n,r,i),simplify:t=>ol(e,t)}}function cl(e,t,n){if(n===0)return new Float32Array;let r=t/4;return e.slice(r,r+n)}function ll(e,t,n){let r=Eo(`mesh`);try{let r=e.MeshExtractor.extract(t,n.tolerance,n.angularTolerance,!!n.skipNormals,!!n.includeUVs),i=r.getVerticesSize(),a=r.getNormalsSize(),o=r.getTrianglesSize(),s=r.getFaceGroupsSize(),c=r.getUvsSize(),l=cl(e.HEAPF32,r.getVerticesPtr(),i),u=n.skipNormals||a===0?new Float32Array:cl(e.HEAPF32,r.getNormalsPtr(),a),d=r.getTrianglesPtr()/4,f=e.HEAPU32.slice(d,d+o),p=c>0?cl(e.HEAPF32,r.getUvsPtr(),c):new Float32Array,m=[];if(s>0){let t=r.getFaceGroupsPtr()/4,n=e.HEAP32.slice(t,t+s);for(let e=0;e<n.length;e+=3)m.push({start:n[e],count:n[e+1],faceHash:n[e+2]})}return r.delete(),{vertices:l,normals:u,triangles:f,uvs:p,faceGroups:m}}finally{r()}}function ul(e,t,n,r){let i=Eo(`edgeMesh`);try{let i=e.EdgeMeshExtractor.extract(t,n,r),a=i.getLinesSize(),o=i.getEdgeGroupsSize(),s=cl(e.HEAPF32,i.getLinesPtr(),a),c=[];if(o>0){let t=i.getEdgeGroupsPtr()/4,n=e.HEAP32.slice(t,t+o);for(let e=0;e<n.length;e+=3)c.push({start:n[e],count:n[e+1],edgeHash:n[e+2]})}return i.delete(),{lines:s,edgeGroups:c}}finally{i()}}function dl(e){return{mesh:(t,n)=>ll(e,t,n),meshEdges:(t,n,r)=>ul(e,t,n,r)}}var fl=0;function pl(e,t){return`${e}_${++fl}.${t}`}function ml(e,t){let n=e.StepStreamIO;if(typeof n?.exportSTEP==`function`&&t.length===1)return n.exportSTEP(t[0],5);let r=new e.STEPControl_Writer_1;e.Interface_Static.SetIVal(`write.step.schema`,5),r.Model(!0).delete();let i=new e.Message_ProgressRange_1;for(let n of t)r.Transfer_1(n,e.STEPControl_StepModelType.STEPControl_AsIs,!0,i);let a=pl(`_export`,`step`),o=r.Write(a);if(r.delete(),i.delete(),o===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+a);return e.FS.unlink(`/`+a),new TextDecoder().decode(t)}throw Error(`STEP export failed: writer did not complete successfully`)}function hl(e,t,n=!1){let r=pl(`_export`,`stl`);if(e.StlAPI.Write(t,r,!n)){let t=e.FS.readFile(`/`+r);return e.FS.unlink(`/`+r),n?t.buffer:new TextDecoder().decode(t)}throw Error(`STL export failed: StlAPI.Write returned false`)}function gl(e,t){let n=new e.IGESControl_Writer_1;for(let e of t)n.AddShape(e);n.ComputeModel();let r=pl(`_export`,`iges`),i=n.Write_2(r);if(n.delete(),i){let t=e.FS.readFile(`/`+r);return e.FS.unlink(`/`+r),new TextDecoder().decode(t)}throw Error(`IGES export failed: writer did not complete successfully`)}function _l(e,t){let n=typeof t==`string`?t:new TextDecoder().decode(new Uint8Array(t)),r=e.StepStreamIO;if(typeof r?.importSTEP==`function`){let e=r.importSTEP(n);if(e.IsNull())throw Error(`Failed to import STEP file: stream reader could not parse the input data`);return[e]}let i=pl(`_import`,`step`),a=new TextEncoder().encode(n);e.FS.writeFile(`/`+i,a);let o=new e.STEPControl_Reader_1;if(o.ReadFile(i)){e.FS.unlink(`/`+i);let t=new e.Message_ProgressRange_1;o.TransferRoots(t),t.delete();let n=o.OneShape();return o.delete(),[n]}throw e.FS.unlink(`/`+i),o.delete(),Error(`Failed to import STEP file: reader could not parse the input data`)}function vl(e,t){let n=pl(`_import`,`stl`),r=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);e.FS.writeFile(`/`+n,r);let i=new e.StlAPI_Reader,a=new e.TopoDS_Shape;if(i.Read_1(a,`/`+n)){e.FS.unlink(`/`+n);let t=new e.ShapeUpgrade_UnifySameDomain_2(a,!0,!0,!1);t.Build();let r=t.Shape(),o=new e.BRepBuilderAPI_MakeSolid_1;o.Add(e.TopoDS_Cast.Shell(r));let s=o.Solid();return a.delete(),t.delete(),o.delete(),i.delete(),s}throw e.FS.unlink(`/`+n),a.delete(),i.delete(),Error(`Failed to import STL file: reader could not parse the input data`)}function yl(e,t){let n=pl(`_import`,`iges`),r=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);e.FS.writeFile(`/`+n,r);let i=new e.IGESControl_Reader_1;if(i.ReadFile(n)===e.IFSelect_ReturnStatus.IFSelect_RetDone){e.FS.unlink(`/`+n);let t=new e.Message_ProgressRange_1;i.TransferRoots(t),t.delete();let r=i.OneShape();return i.delete(),[r]}throw e.FS.unlink(`/`+n),i.delete(),Error(`Failed to import IGES file: reader could not parse the input data`)}function bl(e){return{exportSTEP:t=>ml(e,t),exportSTL:(t,n)=>hl(e,t,n),importSTEP:t=>_l(e,t),importSTL:t=>vl(e,t),exportIGES:t=>gl(e,t),importIGES:t=>yl(e,t)}}function xl(e,t){let n=e.BRep_Tool.Pnt(t),r=[n.X(),n.Y(),n.Z()];return n.delete(),r}function Sl(e){let t=e.GeomAbs_SurfaceType;return new Map([[t.GeomAbs_Plane,`plane`],[t.GeomAbs_Cylinder,`cylinder`],[t.GeomAbs_Cone,`cone`],[t.GeomAbs_Sphere,`sphere`],[t.GeomAbs_Torus,`torus`],[t.GeomAbs_BezierSurface,`bezier`],[t.GeomAbs_BSplineSurface,`bspline`],[t.GeomAbs_SurfaceOfRevolution,`revolution`],[t.GeomAbs_SurfaceOfExtrusion,`extrusion`],[t.GeomAbs_OffsetSurface,`offset`],[t.GeomAbs_OtherSurface,`other`]])}var Cl=new WeakMap;function wl(e,t){let n=Cl.get(e);n||(n=Sl(e),Cl.set(e,n));let r=new e.BRepAdaptor_Surface_2(t,!1),i=r.GetType();return r.delete(),n.get(i)??`other`}function Tl(e,t){let n=e.BRepTools.UVBounds_1(t);return{uMin:n.UMin,uMax:n.UMax,vMin:n.VMin,vMax:n.VMax}}function El(e,t){return e.BRepTools.OuterWire(t)}function Dl(e,t,n,r){let i=new e.BRepGProp_Face_2(t,!1),a=new e.gp_Pnt_1,o=new e.gp_Vec_1;i.Normal(n,r,a,o);let s=[o.X(),o.Y(),o.Z()];return i.delete(),a.delete(),o.delete(),s}function Ol(e,t,n,r){let i=new e.BRepAdaptor_Surface_2(t,!1),a=new e.gp_Pnt_1;i.D0(n,r,a);let o=[a.X(),a.Y(),a.Z()];return i.delete(),a.delete(),o}function kl(e,t,n){let r=e.BRep_Tool.Surface_2(t),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.GeomAPI_ProjectPointOnSurf_2(i,r,e.Extrema_ExtAlgo.Extrema_ExtAlgo_Grad),o=null;if(a.NbPoints()>0){let e=a.LowerDistanceParameters();o=[e.U,e.V]}return a.delete(),i.delete(),o}function Al(e,t,n){let r=e.BRep_Tool.Surface_2(t),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.GeomAPI_ProjectPointOnSurf_2(i,r,e.Extrema_ExtAlgo.Extrema_ExtAlgo_Grad),o;if(a.NbPoints()>0){let e=a.NearestPoint();o=[e.X(),e.Y(),e.Z()],e.delete()}else o=n;return a.delete(),i.delete(),o}function jl(e,t,n){let r=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),i=new e.gp_Pnt_1,a=new e.gp_Vec_1;r.D1(n,i,a);let o={point:[i.X(),i.Y(),i.Z()],tangent:[a.X(),a.Y(),a.Z()]};return r.delete(),i.delete(),a.delete(),o}function Ml(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=[n.FirstParameter(),n.LastParameter()];return n.delete(),r}function Nl(e,t,n){let r=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),i=r.Value(n),a=[i.X(),i.Y(),i.Z()];return i.delete(),r.delete(),a}function Pl(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=n.IsClosed();return n.delete(),r}function Fl(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=n.IsPeriodic();return n.delete(),r}function Il(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=n.Period();return n.delete(),r}function Ll(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=n.GetType();return n.delete(),{0:`LINE`,1:`CIRCLE`,2:`ELLIPSE`,3:`HYPERBOLA`,4:`PARABOLA`,5:`BEZIER_CURVE`,6:`BSPLINE_CURVE`,7:`OFFSET_CURVE`,8:`OTHER_CURVE`}[typeof r==`number`?r:Number(r?.value??r)]??`OTHER_CURVE`}function Rl(e,t){let n=t.Orientation_1(),r=e.TopAbs_Orientation;return n===r.TopAbs_FORWARD?`forward`:n===r.TopAbs_REVERSED?`reversed`:n===r.TopAbs_INTERNAL?`internal`:`external`}function zl(e,t,n){switch(n??Bl(e,t)){case`vertex`:return e.TopoDS_Cast.Vertex(t);case`edge`:return e.TopoDS_Cast.Edge(t);case`wire`:return e.TopoDS_Cast.Wire(t);case`face`:return e.TopoDS_Cast.Face(t);case`shell`:return e.TopoDS_Cast.Shell(t);case`solid`:return e.TopoDS_Cast.Solid(t);case`compsolid`:return e.TopoDS_Cast.CompSolid(t);default:return e.TopoDS_Cast.Compound(t)}}function Bl(e,t){let n=t.ShapeType(),r=e.TopAbs_ShapeEnum;return n===r.TopAbs_VERTEX?`vertex`:n===r.TopAbs_EDGE?`edge`:n===r.TopAbs_WIRE?`wire`:n===r.TopAbs_FACE?`face`:n===r.TopAbs_SHELL?`shell`:n===r.TopAbs_SOLID?`solid`:n===r.TopAbs_COMPSOLID?`compsolid`:`compound`}function Vl(e,t,n){return e.shapeHashCode(t,n)}function Hl(e,t){return t.IsNull()}function Ul(e,t){return t.Reversed()}function Wl(e,t){let n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE),r=new e.TopLoc_Location_1,i=!1;for(;n.More();){let t=e.TopoDS_Cast.Face(n.Current());if(!e.BRep_Tool_Triangulation(t,r,0).IsNull()){i=!0;break}n.Next()}return n.delete(),r.delete(),i}function Gl(e,t,n,r){new e.BRepMesh_IncrementalMeshWrapper(t,n,!1,r,!1).delete()}function Kl(e,t){let n=new e.BRepAdaptor_Curve_2(t);try{let e=n.Bezier().get(),t=e.NbPoles();if(t<2)return null;let r=e.Pole(t-1),i=[r.X(),r.Y(),r.Z()];return r.delete(),i}catch{return null}finally{n.delete()}}function ql(e,t){return t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t)}function Jl(e,t){let n=t.get();if(typeof n.Cylinder!=`function`)return null;let r=n.Cylinder(),i={radius:r.Radius(),isDirect:r.Direct()};return r.delete(),i}function Yl(e,t){let n=null;try{if(t===7)return e.AxeOfRevolution();if(t===1)n=e.Cylinder();else if(t===2)n=e.Cone();else if(t===4)n=e.Torus();else return null;let r=n.Axis();return n.delete(),r}catch{return n?.delete?.(),null}}function Xl(e,t){let n=new e.BRepAdaptor_Surface_2(t,!1);try{let e=n.GetType(),t=Yl(n,typeof e==`number`?e:Number(e?.value??e));if(!t)return null;let r=null,i=null;try{return r=t.Location(),i=t.Direction(),{origin:[r.X(),r.Y(),r.Z()],direction:[i.X(),i.Y(),i.Z()]}}finally{r?.delete?.(),i?.delete?.(),t.delete()}}finally{n.delete()}}function Zl(e,t){return t.get().UReversed()}function Ql(e){return{vertexPosition:t=>xl(e,t),surfaceType:t=>wl(e,t),uvBounds:t=>Tl(e,t),outerWire:t=>El(e,t),surfaceNormal:(t,n,r)=>Dl(e,t,n,r),pointOnSurface:(t,n,r)=>Ol(e,t,n,r),uvFromPoint:(t,n)=>kl(e,t,n),projectPointOnFace:(t,n)=>Al(e,t,n),curveTangent:(t,n)=>jl(e,t,n),curveParameters:t=>Ml(e,t),shapeOrientation:t=>Rl(e,t),downcast:(t,n)=>zl(e,t,n),hashCode:(t,n)=>Vl(e,t,n),isNull:t=>Hl(e,t),hasTriangulation:t=>Wl(e,t),meshShape:(t,n,r)=>{Gl(e,t,n,r)},getBezierPenultimatePole:t=>Kl(e,t),createCurveAdaptor:t=>ql(e,t),reverseShape:t=>Ul(e,t),curvePointAtParam:(t,n)=>Nl(e,t,n),curveIsClosed:t=>Pl(e,t),curveIsPeriodic:t=>Fl(e,t),curvePeriod:t=>Il(e,t),curveType:t=>Ll(e,t),getSurfaceCylinderData:t=>Jl(e,t),getSurfaceAxis:t=>Xl(e,t),reverseSurfaceU:t=>Zl(e,t)}}function $l(e,t){let n=new e.BRepAdaptor_Curve_2(t);try{let t=n.GetType(),r=typeof t==`number`?t:Number(t?.value??t),i=e.GeomAbs_CurveType,a=typeof i.GeomAbs_BSplineCurve==`number`?i.GeomAbs_BSplineCurve:Number(i.GeomAbs_BSplineCurve?.value??i.GeomAbs_BSplineCurve),o=typeof i.GeomAbs_BezierCurve==`number`?i.GeomAbs_BezierCurve:Number(i.GeomAbs_BezierCurve?.value??i.GeomAbs_BezierCurve);if(r!==a&&r!==o)return null;let s=n.BSpline(),c=s.get(),l=c.Degree(),u=c.NbPoles(),d=c.NbKnots(),f=c.IsPeriodic(),p=c.IsRational(),m=[];for(let e=1;e<=u;e++){let t=c.Pole(e);m.push([t.X(),t.Y(),t.Z()]),t.delete()}let h=[];for(let e=1;e<=u;e++)h.push(c.Weight(e));let g=[],_=[];for(let e=1;e<=d;e++)g.push(c.Knot(e)),_.push(c.Multiplicity(e));let v={degree:l,poles:m,weights:h,knots:g,multiplicities:_,isPeriodic:f,isRational:p};return s.delete(),v}catch{return null}finally{n.delete()}}function eu(e,t){let n=new e.BRepAdaptor_Surface_2(t,!1);try{let t=n.GetType(),r=typeof t==`number`?t:Number(t?.value??t),i=e.GeomAbs_SurfaceType;if(r!==(typeof i.GeomAbs_BSplineSurface==`number`?i.GeomAbs_BSplineSurface:Number(i.GeomAbs_BSplineSurface?.value??i.GeomAbs_BSplineSurface)))return null;let a=n.BSpline(),o=a.get(),s=o.UDegree(),c=o.VDegree(),l=o.NbUPoles(),u=o.NbVPoles(),d=o.IsUPeriodic(),f=o.IsVPeriodic(),p=o.IsURational()||o.IsVRational(),m=[],h=[];for(let e=1;e<=l;e++){let t=[],n=[];for(let r=1;r<=u;r++){let i=o.Pole(e,r);t.push([i.X(),i.Y(),i.Z()]),i.delete(),n.push(o.Weight(e,r))}m.push(t),h.push(n)}let g=o.NbUKnots(),_=[],v=[];for(let e=1;e<=g;e++)_.push(o.UKnot(e)),v.push(o.UMultiplicity(e));let y=o.NbVKnots(),b=[],x=[];for(let e=1;e<=y;e++)b.push(o.VKnot(e)),x.push(o.VMultiplicity(e));let S={degreeU:s,degreeV:c,nbPolesU:l,nbPolesV:u,poles:m,weights:h,knotsU:_,knotsV:b,multiplicitiesU:v,multiplicitiesV:x,isPeriodicU:d,isPeriodicV:f,isRational:p};return a.delete(),S}catch{return null}finally{n.delete()}}function tu(e){return{getNurbsCurveData:t=>$l(e,t),getNurbsSurfaceData:t=>eu(e,t)}}function nu(e,t,n={}){let{tolerance:r=1e-8}=n,i=new e.TColgp_Array1OfPnt_2(1,t.length),a=new e.gp_Pnt_1,o=1;for(let e of t)a.SetCoord_2(e[0],e[1],e[2]),i.SetValue_1(o++,a);a.delete();let s=new e.GeomAPI_PointsToBSpline_2(i,3,8,e.GeomAbs_Shape.GeomAbs_C2,r);if(i.delete(),!s.IsDone())throw s.delete(),Error(`Interpolation failed — GeomAPI_PointsToBSpline did not converge`);let c=s.Curve(),l=new e.Handle_Geom_Curve_2(c.get()),u=new e.BRepBuilderAPI_MakeEdge_24(l),d=u.Edge();return u.delete(),s.delete(),d}function ru(e,t,n={}){let{tolerance:r=.001,degMin:i=1,degMax:a=6,smoothing:o=null}=n,s=new e.TColgp_Array1OfPnt_2(1,t.length),c=new e.gp_Pnt_1,l=1;for(let e of t)c.SetCoord_2(e[0],e[1],e[2]),s.SetValue_1(l++,c);c.delete();let u;if(u=o?new e.GeomAPI_PointsToBSpline_5(s,o[0],o[1],o[2],a,e.GeomAbs_Shape.GeomAbs_C2,r):new e.GeomAPI_PointsToBSpline_2(s,i,a,e.GeomAbs_Shape.GeomAbs_C2,r),s.delete(),!u.IsDone())throw u.delete(),Error(`Approximation failed — GeomAPI_PointsToBSpline did not converge`);let d=u.Curve(),f=new e.Handle_Geom_Curve_2(d.get()),p=new e.BRepBuilderAPI_MakeEdge_24(f),m=p.Edge();return p.delete(),u.delete(),m}function iu(e){return{interpolatePoints:(t,n)=>nu(e,t,n??{}),approximatePoints:(t,n)=>ru(e,t,n??{})}}function au(e,t){let n=new e.ShapeFix_Solid_2(t),r=new e.Message_ProgressRange_1;n.Perform(r),r.delete();let i=n.Solid();return n.delete(),i.IsNull()?null:i}function ou(e,t){let n=new e.ShapeFix_Face_2(t);n.Perform();let r=n.Face();return n.delete(),r}function su(e,t,n){let r;n?r=new e.ShapeFix_Wire_2(t,n,1e-6):(r=new e.ShapeFix_Wire_1,r.Load_1(t)),r.Perform();let i=r.Wire();return r.delete(),i}function cu(e){return{healSolid:t=>au(e,t),healFace:t=>ou(e,t),healWire:(t,n)=>su(e,t,n)}}var lu={modified:new Map,generated:new Map,deleted:new Set};function uu(e,t,n){let r=new Map;if(n===0)return r;let i=e.slice(t/4,t/4+n),a=0;for(;a+1<i.length;){let e=i[a++],t=i[a++];if(t<0||a+t>i.length)break;let n=[];for(let e=0;e<t;e++)n.push(i[a++]);r.set(e,n)}return r}function du(e,t){try{let n=uu(e.HEAP32,t.getModifiedPtr(),t.getModifiedSize()),r=uu(e.HEAP32,t.getGeneratedPtr(),t.getGeneratedSize()),i=new Set,a=t.getDeletedSize();if(a>0){let n=t.getDeletedPtr()/4,r=e.HEAP32.slice(n,n+a);for(let e=0;e<r.length;e++)i.add(r[e])}return{modified:n,generated:r,deleted:i}}finally{t.delete()}}function fu(e,t,n){let r=[];if(t.Size()===0)return r;if(e.TopTools_ListIteratorOfListOfShape){let i=new e.TopTools_ListIteratorOfListOfShape(t);for(;i.More();)r.push(e.shapeHashCode(i.Value(),n)),i.Next();i.delete()}else{let i=new e.TopTools_ListOfShape_3(t);for(;i.Size()>0;)r.push(e.shapeHashCode(i.First_1(),n)),i.RemoveFirst();i.delete()}return r}function pu(e,t,n,r,i){if(r.length===0)return lu;let a=Array.isArray(n)?n:[n];if(e.EvolutionExtractor){let n,r,o;if(a.length===1)n=a[0];else{r=new e.TopoDS_Builder,o=new e.TopoDS_Compound,r.MakeCompound(o);for(let e of a)r.Add(o,e);n=o}let s;try{s=e.EvolutionExtractor.extract(t,n,i)}catch{}finally{r?.delete(),o?.delete()}if(s!==void 0)return du(e,s)}let o=new Map,s=new Map,c=new Set,l=new Set(r),u=new Map;for(let t of a){let n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;n.More();){let t=n.Current(),r=e.shapeHashCode(t,i);l.has(r)&&u.set(r,t),n.Next()}n.delete()}for(let[n,r]of u){if(t.IsDeleted?.(r)){c.add(n);continue}let a=t.Modified(r);a.Size()>0&&o.set(n,fu(e,a,i));let l=t.Generated(r);l.Size()>0&&s.set(n,fu(e,l,i))}return{modified:o,generated:s,deleted:c}}function mu(e,t,n,r,i){let a=new e.BRepBuilderAPI_Transform_2(t,n,!0,!1),o=a.Shape(),s=r.length===0?lu:pu(e,a,t,r,i);return a.delete(),{shape:o,evolution:s}}function hu(e,t,n,r,i,a,o){return a&&t.SimplifyResult(!0,!0,.001),{shape:t.Shape(),evolution:pu(e,t,n,r,i),diagnostics:o??{hasErrors:!1,hasWarnings:!1,messages:[]}}}function gu(e,t,n,r,i){return{shape:t.Shape(),evolution:pu(e,t,n,r,i)}}function _u(e,t,n,r,i,a,o){let s=new e.gp_Trsf_1,c=new e.gp_Vec_4(n,r,i);s.SetTranslation_1(c),c.delete();let l=mu(e,t,s,a,o);return s.delete(),l}function vu(e,t,n,r,i,a=[0,0,1],o=[0,0,0]){let s=new e.gp_Trsf_1,c=new e.gp_Pnt_3(o[0],o[1],o[2]),l=new e.gp_Dir_5(a[0],a[1],a[2]),u=new e.gp_Ax1_2(c,l);s.SetRotation_1(u,n),c.delete(),l.delete(),u.delete();let d=mu(e,t,s,r,i);return s.delete(),d}function yu(e,t,n,r,i,a){let o=new e.gp_Trsf_1,s=new e.gp_Pnt_3(n[0],n[1],n[2]),c=new e.gp_Dir_5(r[0],r[1],r[2]),l=new e.gp_Ax2_4(s,c);o.SetMirror_3(l),s.delete(),c.delete(),l.delete();let u=mu(e,t,o,i,a);return o.delete(),u}function bu(e,t,n,r,i,a){let o=new e.gp_Trsf_1,s=new e.gp_Pnt_3(n[0],n[1],n[2]);o.SetScale(s,r),s.delete();let c=mu(e,t,o,i,a);return o.delete(),c}function xu(e,t,n,r,i,a,o){let s=new e.gp_Trsf_1;s.SetValues(n[0],n[1],n[2],r[0],n[3],n[4],n[5],r[1],n[6],n[7],n[8],r[2]);let c=mu(e,t,s,a,o);return s.delete(),c}function Su(e){return{hasErrors:e.HasErrors(),hasWarnings:e.HasWarnings(),messages:[]}}function Cu(e,t,n,r,i,a={}){let o=new e.Message_ProgressRange_1,s=new e.BRepAlgoAPI_Fuse_3(t,n,o);us(e,s,a.optimisation),ds(s,a.fuzzyValue),s.Build(o);let c=Su(s),l=hu(e,s,[t,n],r,i,a.simplify??!1,c);return s.delete(),o.delete(),l}function wu(e,t,n,r,i,a={}){let o=new e.Message_ProgressRange_1,s=new e.BRepAlgoAPI_Cut_3(t,n,o);us(e,s,a.optimisation),ds(s,a.fuzzyValue),s.Build(o);let c=Su(s),l=hu(e,s,[t,n],r,i,a.simplify??!1,c);return s.delete(),o.delete(),l}function Tu(e,t,n,r,i,a={}){let o=new e.Message_ProgressRange_1,s=new e.BRepAlgoAPI_Common_3(t,n,o);us(e,s,a.optimisation),ds(s,a.fuzzyValue),s.Build(o);let c=Su(s),l=hu(e,s,[t,n],r,i,a.simplify??!1,c);return s.delete(),o.delete(),l}function Eu(e,t,n,r,i,a){let o=new e.BRepFilletAPI_MakeFillet(t,e.ChFi3d_FilletShape.ChFi3d_Rational);for(let t of n){let n=typeof r==`function`?r(t):r;Array.isArray(n)?o.Add_3(n[0],n[1],e.TopoDS_Cast.Edge(t)):o.Add_2(n,e.TopoDS_Cast.Edge(t))}let s=new e.Message_ProgressRange_1;o.Build(s),s.delete();let c=gu(e,o,t,i,a);return o.delete(),c}function Du(e,t,n,r,i,a){let o=new e.BRepFilletAPI_MakeChamfer(t),s=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE),c=new Map;for(;s.More();){let t=e.TopoDS_Cast.Face(s.Current()),n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_EDGE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;n.More();)c.set(e.shapeHashCode(n.Current(),a),t),n.Next();n.delete(),s.Next()}s.delete();for(let t of n){let n=typeof r==`function`?r(t):r,i=c.get(e.shapeHashCode(t,a));if(Array.isArray(n)&&i)o.Add_3(n[0],n[1],e.TopoDS_Cast.Edge(t),i);else{let r=Array.isArray(n)?n[0]:n;o.Add_2(r,e.TopoDS_Cast.Edge(t))}}let l=new e.Message_ProgressRange_1;o.Build(l),l.delete();let u=gu(e,o,t,i,a);return o.delete(),u}function Ou(e,t,n,r,i,a,o=.001){let s=new e.BRepOffsetAPI_MakeThickSolid,c=new e.TopTools_ListOfShape_1;for(let e of n)c.Append_1(e);let l=new e.Message_ProgressRange_1;s.MakeThickSolidByJoin(t,c,-r,o,e.BRepOffset_Mode.BRepOffset_Skin,!1,!1,e.GeomAbs_JoinType.GeomAbs_Arc,!1,l),l.delete(),c.delete();let u=gu(e,s,t,i,a);return s.delete(),u}function ku(e,t,n,r,i){let a=new e.BRepOffsetAPI_MakeThickSolid;a.MakeThickSolidBySimple(t,n);let o=new e.Message_ProgressRange_1;a.Build(o),o.delete();let s=gu(e,a,t,r,i);return a.delete(),s}function Au(e,t,n,r,i,a=1e-6){let o=new e.BRepOffsetAPI_MakeOffsetShape,s=new e.Message_ProgressRange_1;o.PerformByJoin(t,n,a,e.BRepOffset_Mode.BRepOffset_Skin,!1,!1,e.GeomAbs_JoinType.GeomAbs_Arc,!1,s),s.delete();let c=gu(e,o,t,r,i);return o.delete(),c}function ju(e,t,n,r,i,a,o,s){if(!e.BRepOffsetAPI_DraftAngle)throw Error(`BRepOffsetAPI_DraftAngle not available in this WASM build. Rebuild brepjs-opencascade with the updated build config.`);let[c,l,u]=r,[d,f,p]=i,m=new e.gp_Dir_5(c,l,u),h=new e.gp_Pnt_3(d,f,p),g=new e.gp_Pln_3(h,m),_=new e.BRepOffsetAPI_DraftAngle_2(t);try{for(let t of n){let n=(typeof a==`function`?a(t):a)*Math.PI/180;_.Add(e.TopoDS_Cast.Face(t),m,n,g,!0)}let r=new e.Message_ProgressRange_1;return _.Build(r),r.delete(),gu(e,_,t,o,s)}finally{_.delete(),g.delete(),h.delete(),m.delete()}}function Mu(e){return{translateWithHistory:(t,n,r,i,a,o)=>_u(e,t,n,r,i,a,o),rotateWithHistory:(t,n,r,i,a,o)=>vu(e,t,n,r,i,a,o),mirrorWithHistory:(t,n,r,i,a)=>yu(e,t,n,r,i,a),scaleWithHistory:(t,n,r,i,a)=>bu(e,t,n,r,i,a),generalTransformWithHistory:(t,n,r,i,a,o)=>xu(e,t,n,r,i,a,o),fuseWithHistory:(t,n,r,i,a)=>Cu(e,t,n,r,i,a),cutWithHistory:(t,n,r,i,a)=>wu(e,t,n,r,i,a),intersectWithHistory:(t,n,r,i,a)=>Tu(e,t,n,r,i,a),filletWithHistory:(t,n,r,i,a)=>Eu(e,t,n,r,i,a),chamferWithHistory:(t,n,r,i,a)=>Du(e,t,n,r,i,a),shellWithHistory:(t,n,r,i,a,o)=>Ou(e,t,n,r,i,a,o),thickenWithHistory:(t,n,r,i)=>ku(e,t,n,r,i),offsetWithHistory:(t,n,r,i,a)=>Au(e,t,n,r,i,a),draftWithHistory:(t,n,r,i,a,o,s)=>ju(e,t,n,r,i,a,o,s)}}function Nu(e,t,n,r){let i=new e.gp_GTrsf_1;for(let e=0;e<3;e++)for(let t=0;t<3;t++)i.SetValue(e+1,t+1,n[e*3+t]);let a=new e.gp_XYZ_2(r[0],r[1],r[2]);i.SetTranslationPart(a),a.delete();let o=new e.BRepBuilderAPI_GTransform_2(t,i,!0),s=o.Shape();return o.delete(),i.delete(),s}function Pu(e,t){let n=new e.gp_Trsf_1;for(let r of t){let t=new e.gp_Trsf_1;if(r.type===`translate`){let n=new e.gp_Vec_4(r.x,r.y,r.z);t.SetTranslation_1(n),n.delete()}else{let n=r.axis??[0,0,1],i=r.center??[0,0,0],a=new e.gp_Pnt_3(i[0],i[1],i[2]),o=new e.gp_Dir_5(n[0],n[1],n[2]),s=new e.gp_Ax1_2(a,o);t.SetRotation_1(s,r.angle*Math.PI/180),s.delete(),o.delete(),a.delete()}n.PreMultiply(t),t.delete()}return{handle:n,dispose:()=>n.delete()}}function Fu(e,t,n,r,i){return mu(e,t,n,r,i)}function Iu(e,t){if(!t)return;let n=e.BRepBuilderAPI_TransitionMode;switch(t){case`transformed`:return n.BRepBuilderAPI_Transformed;case`round`:return n.BRepBuilderAPI_RoundCorner;case`right`:return n.BRepBuilderAPI_RightCorner}}function Lu(e,t,n,r={}){let i=new e.BRepOffsetAPI_MakePipeShell(n);typeof i.SetIsBuildHistory==`function`&&i.SetIsBuildHistory(!1),r.tolerance!==void 0&&i.SetTolerance(r.tolerance,r.boundTolerance??r.tolerance,r.angularTolerance??1e-7),r.maxDegree!==void 0&&i.SetMaxDegree(r.maxDegree),r.maxSegments!==void 0&&i.SetMaxSegments(r.maxSegments);let a=Iu(e,r.transitionMode);a!==void 0&&i.SetTransitionMode(a),r.support?i.SetMode_4(r.support):r.frenet&&i.SetMode_1(!0),r.auxiliary&&i.SetMode_5(r.auxiliary,!1,e.BRepFill_TypeOfContact.BRepFill_NoContact);let o=!!r.contact,s=!!r.correction;r.law?i.SetLaw_1(t,r.law,o,s):i.Add_1(t,o,s);let c=new e.Message_ProgressRange_1;if(i.Build(c),c.delete(),!i.IsDone())throw i.delete(),Error(`Sweep pipe shell build failed (IsDone=false)`);if(r.shellMode){let e=i.Shape(),t=i.FirstShape(),n=i.LastShape();return i.delete(),{shape:e,firstShape:t,lastShape:n}}i.MakeSolid();let l=i.Shape();return i.delete(),l}function Ru(e,t,n={}){let r=n.solid??!0,i=n.ruled??!1,a=new e.BRepOffsetAPI_ThruSections(r,i,n.tolerance??1e-6);n.startVertex&&a.AddVertex(n.startVertex);for(let e of t)a.AddWire(e);n.endVertex&&a.AddVertex(n.endVertex);let o=new e.Message_ProgressRange_1;a.Build(o),o.delete();let s=a.Shape();return a.delete(),s}function zu(e,t,n,r){if(t===`linear`){let t=new e.Law_Linear;return t.Set(0,1,n,r),t}let i=new e.Law_S;return i.Set_1(0,1,n,r),i}function Bu(e,t,n,r,i){let a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Dir_5(r[0],r[1],r[2]),s=new e.gp_Ax1_2(a,o),c=new e.BRepPrimAPI_MakeRevol_1(t,s,i,!1),l=c.Shape();return c.delete(),s.delete(),o.delete(),a.delete(),l}function Vu(e,t,n,r,i){let a=[],o=new e.gp_Trsf_1;for(let s=0;s<i;s++){let i=n[0]*r*s,c=n[1]*r*s,l=n[2]*r*s,u=new e.gp_Vec_4(i,c,l);o.SetTranslation_1(u),u.delete();let d=new e.BRepBuilderAPI_Transform_2(t,o,!0,!1);a.push(d.Shape()),d.delete()}return o.delete(),a}function Hu(e,t,n,r,i,a){let o=[],s=new e.gp_Pnt_3(n[0],n[1],n[2]),c=new e.gp_Dir_5(r[0],r[1],r[2]),l=new e.gp_Ax1_2(s,c),u=new e.gp_Trsf_1;for(let n=0;n<a;n++){let r=i*n*Math.PI/180;u.SetRotation_1(l,r);let a=new e.BRepBuilderAPI_Transform_2(t,u,!0,!1);o.push(a.Shape()),a.delete()}return u.delete(),l.delete(),c.delete(),s.delete(),o}function Uu(e,t,n,r){let i=n.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(n,!1):new e.BRepAdaptor_Curve_2(n),a=new e.gp_Pnt_1,o=new e.gp_Vec_1;try{i.D1(r,a,o);let n=new e.gp_Dir_2(o),s=new(e.gp_Ax3_5??e.gp_Ax3_4)(a,n),c=new e.gp_Trsf_1;c.SetTransformation_2(s),c.Invert();let l=new e.BRepBuilderAPI_Transform_2(t,c,!0,!1),u=l.Shape();return l.delete(),c.delete(),s.delete(),n.delete(),u}finally{o.delete(),a.delete(),i.delete()}}function Wu(e,t){let n=new e.BRepOffsetAPI_MakeFilling(3,15,2,!1,1e-5,1e-4,.01,.1,8,9),r=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_EDGE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;r.More();){let t=e.TopoDS_Cast.Edge(r.Current());n.Add_1(t,e.GeomAbs_Shape.GeomAbs_C0,!0),r.Next()}r.delete();let i=new e.Message_ProgressRange_1;n.Build(i),i.delete();let a=n.Shape();return n.delete(),a}function Gu(e,t,n){let r=new e.BRepBuilderAPI_MakeFace_2(t);for(let e of n)r.Add(e);let i=r.Face();r.delete();let a=new e.ShapeFix_Face_2(i);a.FixOrientation_1(),a.Perform();let o=a.Face();return a.delete(),o}function Ku(e,t){let n=e.BRepTools.OuterWire(t),r=e.BRep_Tool.Surface_2(t);try{let t=new e.BRepBuilderAPI_MakeFace_21(r,n,!0),i=t.Face();t.delete();let a=new e.ShapeFix_Face_2(i);a.FixOrientation_1(),a.Perform();let o=a.Face();return a.delete(),o}finally{r.delete(),n.delete()}}function qu(e,t,n){let r=t,i=!1;try{t.ShapeType!==void 0&&(r=e.BRep_Tool.Surface_2(t),i=!0)}catch{}let a=new e.BRepBuilderAPI_MakeFace_21(r,n,!0),o=a.Face();return a.delete(),i&&r.delete(),o}function Ju(e,n,r,i){let a=new e.TColgp_Array2OfPnt_2(1,r,1,i);for(let o=0;o<r;o++)for(let r=0;r<i;r++){let s=t(n,o*i+r),c=new e.gp_Pnt_3(s[0],s[1],s[2]);a.SetValue_1(o+1,r+1,c),c.delete()}let o=new e.GeomAPI_PointsToBSplineSurface_2(a,3,8,e.GeomAbs_Shape.GeomAbs_C2,.001),s=o.Surface();a.delete();let c=new e.BRepBuilderAPI_MakeFace_8(s,1e-6),l=c.Face();return c.delete(),o.delete(),l}function Yu(e,n,r,i){let a=new e.BRepBuilderAPI_Sewing(1e-6,!0,!0,!0,!1);for(let o=0;o<r-1;o++)for(let r=0;r<i-1;r++){let s=o*i+r,c=(o+1)*i+r,l=o*i+(r+1),u=(o+1)*i+(r+1),d=t(n,s),f=t(n,c),p=t(n,l),m=t(n,u),h=Xu(e,d,f,p);a.Add(h);let g=Xu(e,f,m,p);a.Add(g)}let o=new e.Message_ProgressRange_1;a.Perform(o),o.delete();let s=a.SewedShape();return a.delete(),s}function Xu(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.BRepBuilderAPI_MakeEdge_3(i,a),c=new e.BRepBuilderAPI_MakeEdge_3(a,o),l=new e.BRepBuilderAPI_MakeEdge_3(o,i),u=new e.BRepBuilderAPI_MakeWire_4(s.Edge(),c.Edge(),l.Edge()),d=u.Wire(),f=new e.BRepBuilderAPI_MakeFace_15(d,!0),p=f.Face();return f.delete(),u.delete(),l.delete(),c.delete(),s.delete(),o.delete(),a.delete(),i.delete(),p}function Zu(e,t,n){let r=new e.BRepBuilderAPI_Sewing(n,!0,!0,!0,!1);for(let e of t)r.Add(e);let i=new e.Message_ProgressRange_1;r.Perform(i),i.delete();let a=r.SewedShape();r.delete();let o=new e.ShapeFix_Solid_1;try{let t=e.TopoDS_Cast.Shell(a);return o.SolidFromShell(t)}catch{return a}finally{o.delete()}}function Qu(e,t){let n=new e.ShapeFix_Shape_1(t),r=new e.Message_ProgressRange_1;n.Perform(r);let i=n.Shape();return r.delete(),n.delete(),i}function $u(e,t){let n=new e.ShapeFix_Wire_1;n.Load_1(t),n.FixSelfIntersection();let r=n.Wire();return n.delete(),r}function ed(){return{gaussian:0,mean:0,max:0,min:0,maxDirection:[1,0,0],minDirection:[0,1,0]}}function td(e,t,n,r,i,a){let o=e*n-t*t;if(Math.abs(o)<1e-15)return null;let s=(e*a-2*t*i+n*r)/(2*o),c=(r*a-i*i)/o,l=Math.sqrt(Math.max(0,s*s-c)),u=s+l,d=s-l,f=(n*i-t*a)/o,p=(e*i-t*r)/o,m=(n*r-t*i)/o,h,g;return Math.abs(f)>1e-15?(h=f,g=u-m):Math.abs(p)>1e-15?(h=u-(e*a-t*i)/o,g=p):(h=1,g=0),{mean:s,gaussian:c,k1:u,k2:d,du1:h,dv1:g}}function nd(e,t,n,r){let i=new e.BRepAdaptor_Surface_2(t,!1),a=new e.gp_Pnt_1,o=new e.gp_Vec_1,s=new e.gp_Vec_1,c=new e.gp_Vec_1,l=new e.gp_Vec_1,u=new e.gp_Vec_1;i.D2(n,r,a,o,s,c,l,u);let d=o.Dot(o),f=o.Dot(s),p=s.Dot(s),m=o.Crossed(s),h=m.Magnitude(),g=ed();if(h>=1e-15){m.Divide(h);let e=td(d,f,p,c.Dot(m),u.Dot(m),l.Dot(m));e&&(g={gaussian:e.gaussian,mean:e.mean,max:e.k1,min:e.k2,maxDirection:rd(o,s,e.du1,e.dv1),minDirection:rd(o,s,-e.dv1,e.du1)})}return a.delete(),o.delete(),s.delete(),c.delete(),l.delete(),u.delete(),m.delete(),i.delete(),g}function rd(e,t,n,r){let i=n*e.X()+r*t.X(),a=n*e.Y()+r*t.Y(),o=n*e.Z()+r*t.Z(),s=Math.sqrt(i*i+a*a+o*o);return s<1e-15?[1,0,0]:[i/s,a/s,o/s]}function id(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.SurfaceProperties_2(t,n,1e-7,!0);let r=n.CentreOfMass(),i=[r.X(),r.Y(),r.Z()];return r.delete(),n.delete(),i}function ad(e,t){let n=new e.BRepExtrema_DistShapeShape_1;return n.LoadS1(t),{distanceTo(t){n.LoadS2(t);let r=new e.Message_ProgressRange_1;if(n.Perform(r),r.delete(),!n.IsDone())throw Error(`BRepExtrema_DistShapeShape failed`);let i=n.Value(),a=n.PointOnShape1(1),o=n.PointOnShape2(1),s={value:i,point1:[a.X(),a.Y(),a.Z()],point2:[o.X(),o.Y(),o.Z()]};return a.delete(),o.delete(),s},dispose(){n.delete()}}}function od(e,t,n,r,i){let a=new e.HLRBRep_Algo_1;a.Add_2(t,0);let o=new e.gp_Pnt_3(n[0],n[1],n[2]),s=new e.gp_Dir_5(r[0],r[1],r[2]),c;if(i){let t=new e.gp_Dir_5(i[0],i[1],i[2]);c=new e.gp_Ax2_2(o,s,t),t.delete()}else c=new e.gp_Ax2_4(o,s);let l=new e.HLRAlgo_Projector_2(c);a.Projector_1(l),a.Update(),a.Hide_1();let u=new e.Handle_HLRBRep_Algo_2(a),d=new e.HLRBRep_HLRToShape(u),f={visible:{outline:d.OutLineVCompound_1(),smooth:d.Rg1LineVCompound_1(),sharp:d.VCompound_1()},hidden:{outline:d.OutLineHCompound_1(),smooth:d.Rg1LineHCompound_1(),sharp:d.HCompound_1()}};for(let t of[f.visible,f.hidden])for(let n of[t.outline,t.smooth,t.sharp])n.IsNull()||e.BRepLib.BuildCurves3d_2(n);return d.delete(),u.delete(),l.delete(),c.delete(),s.delete(),o.delete(),f}function sd(e,t,n,r,i,a,o){let s=a*Math.PI/180,c=+!!o,l=new e.BRepFeat_MakeDPrism(t,n,r,s,c,!0);if(i!==null){let t=new e.Message_ProgressRange_1;l.Perform_1(i,t),t.delete()}else l.PerformThruAll();let u=l.Shape();return l.delete(),u}function cd(e,t){let n=new e.TCollection_ExtendedString_2(`XmlOcaf`,!0),r=new e.TDocStd_Document(n);n.delete(),e.XCAFDoc_ShapeTool.SetAutoNaming(!1);let i=r.Main(),a=e.XCAFDoc_DocumentTool.ShapeTool(i).get(),o=e.XCAFDoc_DocumentTool.ColorTool(i).get();for(let n of t){let t=a.NewShape();a.SetShape(t,n.shape);let r=new e.TCollection_ExtendedString_2(n.name,!0);if(e.TDataStd_Name.Set_1(t,r),r.delete(),n.color){let[r,i,a,s]=n.color,c=new e.Quantity_ColorRGBA_5(r/255,i/255,a/255,s/255);o.SetColor_3(t,c,e.XCAFDoc_ColorType.XCAFDoc_ColorSurf),c.delete()}}return a.UpdateAssemblies(),r}function ld(e,t,n={}){if(n.unit||n.modelUnit){new e.STEPCAFControl_Writer_1().delete();let t=(n.modelUnit??n.unit??`MM`).toUpperCase(),r=(n.unit??n.modelUnit??`MM`).toUpperCase();e.Interface_Static.SetCVal(`xstep.cascade.unit`,t),e.Interface_Static.SetCVal(`write.step.unit`,r)}let r=new e.XSControl_WorkSession,i=new e.Handle_XSControl_WorkSession_2(r),a=new e.STEPCAFControl_Writer_2(i,!1);a.SetColorMode(!0),a.SetLayerMode(!0),a.SetNameMode(!0),e.Interface_Static.SetIVal(`write.surfacecurve.mode`,!0),e.Interface_Static.SetIVal(`write.precision.mode`,0),e.Interface_Static.SetIVal(`write.step.assembly`,2),e.Interface_Static.SetIVal(`write.step.schema`,5);let o=new e.Handle_TDocStd_Document_2(t),s=new e.Message_ProgressRange_1;a.Transfer_1(o,e.STEPControl_StepModelType.STEPControl_AsIs,null,s),s.delete();let c=pl(`_xcaf_export`,`step`),l=a.Write(c),u=``;if(l===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+c);u=new TextDecoder().decode(t),e.FS.unlink(`/`+c)}return a.delete(),i.delete(),u}function ud(e,t){new e.STEPCAFControl_Writer_1().delete();let n=new e.TCollection_ExtendedString_2(`XmlOcaf`,!0),r=new e.TDocStd_Document(n);n.delete();let i=r.Main(),a=e.XCAFDoc_DocumentTool.ShapeTool(i).get(),o=e.XCAFDoc_DocumentTool.ColorTool(i).get();e.XCAFDoc_ShapeTool.SetAutoNaming(!1);for(let n of t){let t=a.AddShape(n.shape,!1,!0);if(n.name){let r=new e.TCollection_ExtendedString_2(n.name,!0);e.TDataStd_Name.Set_1(t,r),r.delete()}if(n.color){let[r,i,a,s]=n.color,c=new e.Quantity_ColorRGBA_5(r/255,i/255,a/255,s/255);o.SetColor_3(t,c,e.XCAFDoc_ColorType.XCAFDoc_ColorSurf),c.delete()}}let s=new e.XSControl_WorkSession,c=new e.Handle_XSControl_WorkSession_2(s),l=new e.STEPCAFControl_Writer_2(c,!1),u=new e.Handle_TDocStd_Document_2(r),d=new e.Message_ProgressRange_1;l.Transfer_1(u,e.STEPControl_StepModelType.STEPControl_AsIs,null,d),d.delete();let f=pl(`_step_cfg_export`,`step`),p=l.Write(f),m=``;if(p===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+f);m=new TextDecoder().decode(t),e.FS.unlink(`/`+f)}return l.delete(),c.delete(),u.delete(),r.delete(),m}function dd(e,t){let n=new e.STEPControl_Writer_1;n.Model(!0).delete();let r=new e.Message_ProgressRange_1;for(let i of t)n.Transfer(i.shape,e.STEPControl_StepModelType.STEPControl_AsIs,!0,r);let i=pl(`_step_cfg_export`,`step`),a=n.Write(i);if(n.delete(),r.delete(),a===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+i);return e.FS.unlink(`/`+i),new TextDecoder().decode(t)}throw Error(`STEP configured export failed: writer did not complete successfully`)}function fd(e,t,n={}){let r=n.unit??`MM`,i=n.modelUnit??r,a=n.schema??5;return e.Interface_Static.SetCVal(`xstep.cascade.unit`,i),e.Interface_Static.SetCVal(`write.step.unit`,r),e.Interface_Static.SetIVal(`write.surfacecurve.mode`,!0),e.Interface_Static.SetIVal(`write.precision.mode`,0),e.Interface_Static.SetIVal(`write.step.assembly`,2),e.Interface_Static.SetIVal(`write.step.schema`,a),t.some(e=>e.name||e.color)?ud(e,t):dd(e,t)}function pd(e){return{composeTransform:t=>Pu(e,t),applyComposedTransformWithHistory:(t,n,r,i)=>Fu(e,t,n,r,i),sweepPipeShell:(t,n,r)=>Lu(e,t,n,r??{}),loftAdvanced:(t,n)=>Ru(e,t,n??{}),buildExtrusionLaw:(t,n,r)=>zu(e,t,n,r),revolveVec:(t,n,r,i)=>Bu(e,t,n,r,i),positionOnCurve:(t,n,r)=>Uu(e,t,n,r),linearPattern:(t,n,r,i)=>Vu(e,t,n,r,i),circularPattern:(t,n,r,i,a)=>Hu(e,t,n,r,i,a),makeNonPlanarFace:t=>Wu(e,t),addHolesInFace:(t,n)=>Gu(e,t,n),removeHolesFromFace:t=>Ku(e,t),makeFaceOnSurface:(t,n)=>qu(e,t,n),bsplineSurface:(t,n,r)=>Ju(e,t,n,r),triangulatedSurface:(t,n,r)=>Yu(e,t,n,r),sewAndSolidify:(t,n)=>Zu(e,t,n),fixShape:t=>Qu(e,t),fixSelfIntersection:t=>$u(e,t),surfaceCurvature:(t,n,r)=>nd(e,t,n,r),surfaceCenterOfMass:t=>id(e,t),createDistanceQuery:t=>ad(e,t),projectEdges:(t,n,r,i)=>od(e,t,n,r,i),draftPrism:(t,n,r,i,a,o)=>sd(e,t,n,r,i,a,o),generalTransformNonOrthogonal:(t,n,r)=>Nu(e,t,n,r),createXCAFDocument:t=>cd(e,t),writeXCAFToSTEP:(t,n)=>ld(e,t,n??{}),exportSTEPConfigured:(t,n)=>fd(e,t,n??{})}}var md=()=>{};function hd(e){return e}function gd(e){let t=hd(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return t}function _d(e){return e}function vd(e,t){return{x:e,y:t}}function yd(e,t){let n=Math.sqrt(e*e+t*t);if(n<1e-15)throw Error(`occt: createDirection2d called with zero-length vector`);return{x:e/n,y:t/n}}function bd(e,t){return{x:e,y:t}}function xd(e,t,n,r){return{px:e,py:t,dx:n,dy:r,delete:md}}function Sd(e){return e}function Cd(e){return e}function wd(e,t,n,r){return x(e,t,n,r)}function Td(e,t,n,r){return S(e,t,n,r)}function Ed(e,t,n,r,i,a){let o=2*(e*(r-a)+n*(a-t)+i*(t-r));if(Math.abs(o)<1e-12)return x(e,t,i,a);let s=((e*e+t*t)*(r-a)+(n*n+r*r)*(a-t)+(i*i+a*a)*(t-r))/o,c=((e*e+t*t)*(i-n)+(n*n+r*r)*(e-i)+(i*i+a*a)*(n-e))/o,l=Math.sqrt((e-s)**2+(t-c)**2),u=Math.atan2(t-c,e-s),d=Math.atan2(r-c,n-s),f=Math.atan2(a-c,i-s),p=d-u;p<0&&(p+=2*Math.PI);let m=f-u;m<0&&(m+=2*Math.PI);let h=p<m,g=S(s,c,l,h);if(!h){let e=-u,t=-f;return t<e-1e-9&&(t+=2*Math.PI),{__bk2d:`trimmed`,basis:g,tStart:e,tEnd:t}}let _=f;return _<u-1e-9&&(_+=2*Math.PI),{__bk2d:`trimmed`,basis:g,tStart:u,tEnd:_}}function Dd(e,t,n,r,i,a){let o=Math.sqrt(n*n+r*r),s=o>0?n/o:0,c=o>0?r/o:0,l=e-i,u=t-a,d=2*(u*s-l*c);if(Math.abs(d)<1e-12)return x(e,t,i,a);let f=-(l*l+u*u)/d,p=e-f*c,m=t+f*s,h=Math.abs(f),g=Math.atan2(t-m,e-p),_=Math.atan2(a-m,i-p),v=-(t-m)/h,y=(e-p)/h,b=s*v+c*y,S;if(b>0){let e=_-g;e<=0&&(e+=2*Math.PI),S=g+e/2}else{let e=_-g;e>=0&&(e-=2*Math.PI),S=g+e/2}return Ed(e,t,p+h*Math.cos(S),m+h*Math.sin(S),i,a)}function Od(e,t,n,r,i,a,o){return C(e,t,n,r,i,a,o)}function kd(e,t,n,r,i,a,o,s,c){return{__bk2d:`trimmed`,basis:C(e,t,n,r,o,s,c),tStart:i,tEnd:a}}function Ad(e){return w(e)}function jd(e,t){let n=e.length,r=Math.min(3,n-1),i=[],a=[];i.push(0),a.push(r+1);let o=n-r-1;for(let e=1;e<=o;e++)i.push(e/(o+1)),a.push(1);return i.push(1),a.push(r+1),{__bk2d:`bspline`,poles:[...e],knots:i,multiplicities:a,degree:r,isPeriodic:!1}}function Md(e,t){return _(hd(e),t)}function Nd(e,t){return{point:_(hd(e),t),tangent:v(hd(e),t)}}function Pd(e){return y(hd(e))}function Fd(e){return b(gd(e))}function Id(e,t,n){return{__bk2d:`trimmed`,basis:hd(e),tStart:t,tEnd:n}}function Ld(e){return JSON.parse(JSON.stringify(e))}function Rd(e,t){let n=hd(e),r=y(n),i=[];for(let e=0;e<=30;e++){let a=r.first+(r.last-r.first)*e/30,[o,s]=_(n,a),[c,l]=v(n,a),u=Math.sqrt(c*c+l*l);u>1e-12?i.push([o-l/u*t,s+c/u*t]):i.push([o,s])}return jd(i)}function zd(e,t,n){return ee(hd(e),t,n)}function Bd(e,t,n,r){return te(hd(e),t,n,r)}function Vd(e,t,n,r){return ne(hd(e),t,n,r)}function Hd(e,t,n){return re(hd(e),t,n)}function Ud(e,t,n,r,i){return ie(hd(e),t,n,r,i)}function Wd(e,t,n,r,i,a){return ef(e,qd(t,n,r,i,a))}function Gd(e,t,n){return{m:e,tx:t,ty:n,delete:md}}function Kd(){return Gd([1,0,0,0,1,0,0,0,1],0,0)}function qd(e,n,r,i,a){let o=Math.sqrt(r*r+i*i);if(o<1e-15)return Kd();let s=-i/o,c=r/o,l=a-1,u=[1+l*s*s,l*s*c,0,l*c*s,1+l*c*c,0,0,0,1];return Gd(u,e-t(u,0)*e-t(u,1)*n,n-t(u,3)*e-t(u,4)*n)}function Jd(e,t){return Gd([1,0,0,0,1,0,0,0,1],e,t)}function Yd(e,n,r,i,a,o,s){if(r===`axis`&&o!==void 0&&s!==void 0){let r=Math.sqrt(o*o+s*s),c=o/r,l=s/r,u=[2*c*c-1,2*c*l,0,2*c*l,2*l*l-1,0,0,0,1],d=i??e,f=a??n;return Gd(u,d-t(u,0)*d-t(u,1)*f,f-t(u,3)*d-t(u,4)*f)}return Gd([-1,0,0,0,-1,0,0,0,1],2*e,2*n)}function Xd(e,t,n){let r=Math.cos(e),i=Math.sin(e);return Gd([r,-i,0,i,r,0,0,0,1],t-r*t+i*n,n-i*t-r*n)}function Zd(e,t,n){return Gd([e,0,0,0,e,0,0,0,1],t*(1-e),n*(1-e))}function Qd(e,t,n){e.tx=t,e.ty=n}function $d(e,n){let r=e.m,i=n.m,a=e=>t(r,e),o=e=>t(i,e);e.m=[a(0)*o(0)+a(1)*o(3)+a(2)*o(6),a(0)*o(1)+a(1)*o(4)+a(2)*o(7),a(0)*o(2)+a(1)*o(5)+a(2)*o(8),a(3)*o(0)+a(4)*o(3)+a(5)*o(6),a(3)*o(1)+a(4)*o(4)+a(5)*o(7),a(3)*o(2)+a(4)*o(5)+a(5)*o(8),a(6)*o(0)+a(7)*o(3)+a(8)*o(6),a(6)*o(1)+a(7)*o(4)+a(8)*o(7),a(6)*o(2)+a(7)*o(5)+a(8)*o(8)];let s=e.tx,c=e.ty,l=Number(n.tx)||0,u=Number(n.ty)||0;e.tx=a(0)*l+a(1)*u+s,e.ty=a(3)*l+a(4)*u+c}function ef(e,n){let r=hd(e),i=n.m??[1,0,0,0,1,0,0,0,1],a=Number(n.tx)||0,o=Number(n.ty)||0,s=t(i,0),c=t(i,1),l=t(i,3),u=t(i,4);if(Math.abs(s-1)<1e-12&&Math.abs(u-1)<1e-12&&Math.abs(c)<1e-12&&Math.abs(l)<1e-12)return ee(r,a,o);let d=y(r),f=[];for(let e=0;e<=20;e++){let[t,n]=_(r,d.first+(d.last-d.first)*e/20);f.push([s*t+c*n+a,l*t+u*n+o])}return w(f)}function tf(e,t,n){let r=ae(hd(e),hd(t),n),i=r.segments.map(e=>Object.assign(e,{delete(){}}));return{points:r.points,segments:i}}function nf(e,t,n){let r=hd(e),i=y(r);if(r.__bk2d===`line`){let e=t-r.ox,a=n-r.oy,o=Math.max(i.first,Math.min(i.last,e*r.dx+a*r.dy)),[s,c]=_(r,o);return{param:o,distance:Math.sqrt((s-t)**2+(c-n)**2)}}if(r.__bk2d===`circle`){let e=Math.atan2(n-r.cy,t-r.cx),i=r.sense?e:-e;for(;i<0;)i+=2*Math.PI;for(;i>2*Math.PI;)i-=2*Math.PI;let[a,o]=_(r,i);return{param:i,distance:Math.sqrt((a-t)**2+(o-n)**2)}}if(!isFinite(i.first)||!isFinite(i.last))return null;let a=i.first,o=1/0,s=(i.last-i.first)/200;for(let e=0;e<=200;e++){let c=i.first+e*s,[l,u]=_(r,c),d=(l-t)**2+(u-n)**2;d<o&&(o=d,a=c)}for(let e=0;e<10;e++){let[e,o]=_(r,a),[s,c]=v(r,a),l=(e-t)*s+(o-n)*c,u=s*s+c*c;if(u<1e-20)break;let d=l/u,f=Math.max(i.first,Math.min(i.last,a-d));if(Math.abs(f-a)<1e-14)break;a=f}let[c,l]=_(r,a);return{param:a,distance:Math.sqrt((c-t)**2+(l-n)**2)}}function rf(e,t,n,r,i,a){let o=hd(e),s=hd(t),c=n,l=i,u=1/0;for(let e=0;e<=50;e++){let t=n+(r-n)*e/50,[d,f]=_(o,t);for(let e=0;e<=50;e++){let n=i+(a-i)*e/50,[r,o]=_(s,n),p=(r-d)**2+(o-f)**2;p<u&&(u=p,c=t,l=n)}}let d=c,f=l;for(let c=0;c<20;c++){let[c,l]=_(s,f),u=nf(e,c,l);if(u){let e=Math.max(n,Math.min(r,u.param)),t=Math.abs(e-d)<1e-12;if(d=e,t)break}let[p,m]=_(o,d),h=nf(t,p,m);if(h){let e=Math.max(i,Math.min(a,h.param)),t=Math.abs(e-f)<1e-12;if(f=e,t)break}}let[p,m]=_(o,d),[h,g]=_(s,f);return Math.sqrt((h-p)**2+(g-m)**2)}function af(e,n,r,i){let a=hd(e),o=y(a),s=Math.max(3,{C0:1,C1:2,C2:3,C3:4}[r]??4),c=Math.max(100,i*10),l=[],u=1/0;for(let e=0;e<3&&u>n;e++){l=[];for(let e=0;e<=c;e++){let t=o.first+(o.last-o.first)*e/c;l.push(_(a,t))}u=0;for(let e=0;e<c;e++){let[n,r]=_(a,o.first+(o.last-o.first)*(e+.5)/c),i=t(l,e),s=t(l,e+1),d=(i[0]+s[0])/2,f=(i[1]+s[1])/2,p=Math.sqrt((n-d)**2+(r-f)**2);p>u&&(u=p)}u>n&&(c=Math.min(c*2,500))}return jd(l,{degMax:s})}function of(e){let n=gd(e);if(n.__bk2d===`bezier`)return[e];if(n.__bk2d!==`bspline`)return of(af(e,1e-6,`C2`,10));let r=y(hd(e)),i=r.first,a=r.last,o=[];for(let e of n.knots)e>i+1e-12&&e<a-1e-12&&o.push(e);let s=[i,...o,a],c=[];for(let e=0;e<s.length-1;e++){let r=t(s,e),i=t(s,e+1),a=i-r;if(a<1e-15)continue;let o=_(n,r),l=_(n,i),u=v(n,r),d=v(n,i),f=a/3,p={__bk2d:`bezier`,poles:[o,[o[0]+u[0]*f,o[1]+u[1]*f],[l[0]-d[0]*f,l[1]-d[1]*f],l]};c.push(p)}return c.length>0?c:[e]}function sf(){return ge()}function cf(e,t,n){_e(_d(e),hd(t),n)}function lf(e){let t=_d(e);return{xMin:t.xMin,yMin:t.yMin,xMax:t.xMax,yMax:t.yMax}}function uf(e,t){let n=_d(e),r=_d(t);n.xMin=Math.min(n.xMin,r.xMin),n.yMin=Math.min(n.yMin,r.yMin),n.xMax=Math.max(n.xMax,r.xMax),n.yMax=Math.max(n.yMax,r.yMax)}function df(e,t){let n=_d(e),r=_d(t);return n.xMax<r.xMin||r.xMax<n.xMin||n.yMax<r.yMin||r.yMax<n.yMin}function ff(e,t,n){let r=_d(e);return t<r.xMin||t>r.xMax||n<r.yMin||n>r.yMax}function pf(e){let t=gd(e);return t.__bk2d===`circle`?{cx:t.cx,cy:t.cy,radius:t.radius,isDirect:t.sense}:null}function mf(e){let t=gd(e);return t.__bk2d===`ellipse`?{majorRadius:t.majorRadius,minorRadius:t.minorRadius,xAxisAngle:t.xDirAngle,isDirect:t.sense}:null}function hf(e){let t=gd(e);return t.__bk2d===`bezier`?[...t.poles]:null}function gf(e){let t=gd(e);return t.__bk2d===`bezier`?t.poles.length-1:null}function _f(e){let t=gd(e);return t.__bk2d===`bspline`?{poles:[...t.poles],knots:[...t.knots],multiplicities:[...t.multiplicities],degree:t.degree,isPeriodic:t.isPeriodic}:null}function vf(e){return me(hd(e))}function yf(e){return he(e)}function bf(e,t){let n=hd(e),r=y(n),i=[r.first,...[...t].sort((e,t)=>e-t),r.last],a=[];for(let e=0;e<i.length-1;e++)a.push({__bk2d:`trimmed`,basis:n,tStart:i[e],tEnd:i[e+1]});return a}function xf(e,t,n){let r=new e.gp_Pnt_3(t[0],t[1],t[2]),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.BRepBuilderAPI_MakeEdge_3(r,i),o=a.Edge();return a.delete(),r.delete(),i.delete(),o}function Sf(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.GC_MakeArcOfCircle_4(i,a,o).Value().get(),c=new e.Handle_Geom_Curve_2(s),l=new e.BRepBuilderAPI_MakeEdge_24(c),u=l.Edge();return l.delete(),c.delete(),i.delete(),a.delete(),o.delete(),u}function Cf(e,n){let r=new e.TColgp_Array1OfPnt_2(1,n.length),i=new e.gp_Pnt_1;for(let e=0;e<n.length;e++){let a=t(n,e);i.SetCoord_2(a[0],a[1],a[2]),r.SetValue_1(e+1,i)}i.delete();let a=new e.GeomAPI_PointsToBSpline_2(r,3,8,e.GeomAbs_Shape.GeomAbs_C2,1e-6);if(r.delete(),!a.IsDone())throw a.delete(),Error(`Interpolation failed — GeomAPI_PointsToBSpline did not converge`);let o=a.Curve(),s=new e.Handle_Geom_Curve_2(o.get()),c=new e.BRepBuilderAPI_MakeEdge_24(s),l=c.Edge();return c.delete(),a.delete(),l}function wf(e,n,r,i,a){let o=hd(n),s=[i[1]*a[2]-i[2]*a[1],i[2]*a[0]-i[0]*a[2],i[0]*a[1]-i[1]*a[0]],c=(e,t)=>[r[0]+e*a[0]+t*s[0],r[1]+e*a[1]+t*s[1],r[2]+e*a[2]+t*s[2]];if(o.__bk2d===`line`)return xf(e,c(o.ox,o.oy),c(o.ox+o.dx*o.len,o.oy+o.dy*o.len));if(o.__bk2d===`circle`||o.__bk2d===`trimmed`){let t=o;for(;t.__bk2d===`trimmed`;)t=t.basis;if(t.__bk2d===`circle`){let n=t,r=c(n.cx,n.cy),a=n.sense?i:[-i[0],-i[1],-i[2]];if(o.__bk2d===`circle`){let t=new e.gp_Pnt_3(r[0],r[1],r[2]),i=new e.gp_Dir_5(a[0],a[1],a[2]),o=new e.gp_Ax2_4(t,i),s=new e.gp_Circ_2(o,n.radius),c=new e.BRepBuilderAPI_MakeEdge_8(s),l=c.Edge();return c.delete(),s.delete(),o.delete(),i.delete(),t.delete(),l}let s=y(o),[l,u]=_(o,s.first),[d,f]=_(o,(s.first+s.last)/2),[p,m]=_(o,s.last);return Sf(e,c(l,u),c(d,f),c(p,m))}}if(o.__bk2d===`bezier`||o.__bk2d===`bspline`){let n=o.poles.map(([e,t])=>c(e,t));return n.length===2?xf(e,t(n,0),t(n,1)):Cf(e,n)}let l=y(o),u=[];for(let e=0;e<=60;e++){let[t,n]=_(o,l.first+(l.last-l.first)*e/60);u.push(c(t,n))}return Cf(e,u)}function Tf(e,t,n){let r=hd(t),i=y(r),a=[];for(let e=0;e<=60;e++){let[t,o]=_(r,i.first+(i.last-i.first)*e/60),s=n.get().Value(t,o);a.push([s.X(),s.Y(),s.Z()]),s.delete()}return Cf(e,a)}function Ef(e,t){return e.BRep_Tool.Surface_2(t)}function Df(e,t,n){let r=new e.BRepAdaptor_Curve2d_2(t,n),i=Number(r.FirstParameter()),a=Number(r.LastParameter()),o=[];for(let e=0;e<=30;e++){let t=i+(a-i)*e/30,n=r.Value(t);o.push([n.X(),n.Y()]),n.delete()}return r.delete(),jd(o)}function Of(e,t){e.BRepLib.BuildCurves3d_2(t)}function kf(e,t,n,r){let i=new e.ShapeFix_Wire_2(t,n,r);i.FixEdgeCurves();let a=i.Wire();return i.delete(),a}function Af(e,t,n={}){let{order:r=3,nbPtsOnCur:i=15,nbIter:a=2,tol3d:o=1e-5,tol2d:s=1e-4,maxDeg:c=8,maxSeg:l=9}=n,u=new e.BRepOffsetAPI_MakeFilling(r,i,a,!1,o,s,.01,.1,c,l);for(let n=0;n<t.length;n++){let r=$o(e,t[n],`edge`);for(let t of r)u.Add_1(t,e.GeomAbs_Shape.GeomAbs_C0,n===0)}let d=new e.Message_ProgressRange_1;u.Build(d);let f=u.Shape();return u.delete(),d.delete(),f}function jf(e){return{wrapCurve2dHandle:e=>Sd(e),createCurve2dAdaptor:e=>Cd(e),createPoint2d:(e,t)=>vd(e,t),createDirection2d:(e,t)=>yd(e,t),createVector2d:(e,t)=>bd(e,t),createAxis2d:(e,t,n,r)=>xd(e,t,n,r),makeLine2d:(e,t,n,r)=>wd(e,t,n,r),makeCircle2d:(e,t,n,r)=>Td(e,t,n,r),makeArc2dThreePoints:(e,t,n,r,i,a)=>Ed(e,t,n,r,i,a),makeArc2dTangent:(e,t,n,r,i,a)=>Dd(e,t,n,r,i,a),makeEllipse2d:(e,t,n,r,i,a,o)=>Od(e,t,n,r,i,a,o),makeEllipseArc2d:(e,t,n,r,i,a,o,s,c)=>kd(e,t,n,r,i,a,o,s,c),makeBezier2d:e=>Ad(e),makeBSpline2d:(e,t)=>jd(e,t),evaluateCurve2d:(e,t)=>Md(e,t),evaluateCurve2dD1:(e,t)=>Nd(e,t),getCurve2dBounds:e=>Pd(e),getCurve2dType:e=>Fd(e),trimCurve2d:(e,t,n)=>Id(e,t,n),reverseCurve2d:e=>{},copyCurve2d:e=>Ld(e),offsetCurve2d:(e,t)=>Rd(e,t),translateCurve2d:(e,t,n)=>zd(e,t,n),rotateCurve2d:(e,t,n,r)=>Bd(e,t,n,r),scaleCurve2d:(e,t,n,r)=>Vd(e,t,n,r),mirrorCurve2dAtPoint:(e,t,n)=>Hd(e,t,n),mirrorCurve2dAcrossAxis:(e,t,n,r,i)=>Ud(e,t,n,r,i),affinityTransform2d:(e,t,n,r,i,a)=>Wd(e,t,n,r,i,a),createIdentityGTrsf2d:()=>Kd(),createAffinityGTrsf2d:(e,t,n,r,i)=>qd(e,t,n,r,i),createTranslationGTrsf2d:(e,t)=>Jd(e,t),createMirrorGTrsf2d:(e,t,n,r,i,a,o)=>Yd(e,t,n,r,i,a,o),createRotationGTrsf2d:(e,t,n)=>Xd(e,t,n),createScaleGTrsf2d:(e,t,n)=>Zd(e,t,n),setGTrsf2dTranslationPart:(e,t,n)=>{Qd(e,t,n)},multiplyGTrsf2d:(e,t)=>{$d(e,t)},transformCurve2dGeneral:(e,t)=>ef(e,t),intersectCurves2d:(e,t,n)=>tf(e,t,n),projectPointOnCurve2d:(e,t,n)=>nf(e,t,n),distanceBetweenCurves2d:(e,t,n,r,i,a)=>rf(e,t,n,r,i,a),approximateCurve2dAsBSpline:(e,t,n,r)=>af(e,t,n,r),decomposeBSpline2dToBeziers:e=>of(e),createBoundingBox2d:()=>sf(),addCurveToBBox2d:(e,t,n)=>{cf(e,t,n)},getBBox2dBounds:e=>lf(e),mergeBBox2d:(e,t)=>{uf(e,t)},isBBox2dOut:(e,t)=>df(e,t),isBBox2dOutPoint:(e,t,n)=>ff(e,t,n),getCurve2dCircleData:e=>pf(e),getCurve2dEllipseData:e=>mf(e),getCurve2dBezierPoles:e=>hf(e),getCurve2dBezierDegree:e=>gf(e),getCurve2dBSplineData:e=>_f(e),serializeCurve2d:e=>vf(e),deserializeCurve2d:e=>yf(e),splitCurve2d:(e,t)=>bf(e,t),liftCurve2dToPlane:(t,n,r,i)=>wf(e,t,n,r,i),buildEdgeOnSurface:(t,n)=>Tf(e,t,n),extractSurfaceFromFace:t=>Ef(e,t),extractCurve2dFromEdge:(t,n)=>Df(e,t,n),buildCurves3d:t=>{Of(e,t)},fixWireOnFace:(t,n,r)=>kf(e,t,n,r),fillSurface:(t,n)=>Af(e,t,n)}}function Mf(){let e=e=>()=>{throw Error(`${e} is only available with the brepkit kernel`)};return{export3MF:e(`export3MF`),exportGLB:e(`exportGLB`),exportOBJ:e(`exportOBJ`),exportPLY:e(`exportPLY`),import3MF:e(`import3MF`),importOBJ:e(`importOBJ`),importGLB:e(`importGLB`),filletVariable:e(`filletVariable`),helicalSweep:e(`helicalSweep`),sweepWithOptions:e(`sweepWithOptions`),defeature:e(`defeature`),detectSmallFeatures:e(`detectSmallFeatures`),recognizeFeatures:e(`recognizeFeatures`),meshBoolean:(()=>{throw Error(`meshBoolean is only available with the brepkit kernel`)}),edgeToFaceMap:e(`edgeToFaceMap`),sharedEdges:e(`sharedEdges`),adjacentFaces:e(`adjacentFaces`),curveDegreeElevate:e(`curveDegreeElevate`),curveKnotInsert:e(`curveKnotInsert`),curveKnotRemove:e(`curveKnotRemove`),curveSplit:e(`curveSplit`),approximateSurfaceLspia:e(`approximateSurfaceLspia`),untrimFace:e(`untrimFace`),mergeCoincidentVertices:e(`mergeCoincidentVertices`),removeDegenerateEdges:e(`removeDegenerateEdges`),fixFaceOrientations:e(`fixFaceOrientations`),classifyPointRobust:e(`classifyPointRobust`),classifyPointWinding:e(`classifyPointWinding`),executeBatch:e(`executeBatch`),checkpoint:e(`checkpoint`),checkpointCount:e(`checkpointCount`),restoreCheckpoint:e(`restoreCheckpoint`),discardCheckpoint:e(`discardCheckpoint`)}}function Nf(e){return{draft:(t,n,r,i,a)=>ju(e,t,n,r,i,a,[],1).shape}}var Pf=class{oc;kernelId=`occt`;capabilities=r;constructor(e){this.oc=e,Object.assign(this,Ts(e),Os(e),qs(e),Bs(e),yc(e),Nc(e),Yc(e),sl(e),dl(e),bl(e),Jo(e),cs(e),Ql(e),tu(e),iu(e),cu(e),Mu(e),pd(e),jf(e),Nf(e),Mf())}},Ff=()=>{};function If(e){return typeof e==`object`&&!!e&&e.__brepkit}function Lf(e,t){return{__brepkit:!0,type:e,id:t,delete:Ff,HashCode(e){return t%e},IsNull(){return!1}}}function L(e){return Lf(`solid`,e)}function Rf(e){return Lf(`face`,e)}function zf(e){return Lf(`edge`,e)}function Bf(e){return Lf(`wire`,e)}function Vf(e){return Lf(`shell`,e)}function Hf(e){let t=Lf(`compound`,e);return rp.has(e)?{...t,delete:()=>rp.delete(e)}:t}function Uf(e){return Lf(`vertex`,e)}function R(e,t){if(!If(e))throw Error(`brepkit: expected a BrepkitHandle, got `+typeof e);if(t&&e.type!==t)throw Error(`brepkit: expected ${t} handle, got ${e.type}`);return e.id}function z(e){return Array.from(e)}function Wf(e,t){if(!If(e))throw Error(`brepkit: expected a BrepkitHandle, got `+typeof e);if(e.type!==`solid`)throw Error(`brepkit: ${t} requires a solid, got ${e.type}. Consider using makeCompound() to combine shapes first.`);return e.id}function Gf(e,t,n){if(!If(t))throw Error(`brepkit: expected a BrepkitHandle, got `+typeof t);if(t.type===`solid`)return[t.id];if(t.type===`compound`){let r=z(e.getCompoundSolids(t.id));if(r.length>0)return r;throw Error(`brepkit: ${n} received a compound with no solids.`)}throw Error(`brepkit: ${n} requires a solid or compound of solids, got ${t.type}.`)}function Kf(e,t,n,r,i,a){let o=e-r,s=t-i,c=n-a;return Math.sqrt(o*o+s*s+c*c)}function qf(e){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}function Jf(e,t,n){return[1,0,0,e,0,1,0,t,0,0,1,n,0,0,0,1]}function Yf(e,t=[0,0,1],n=[0,0,0]){let r=e*Math.PI/180,i=Math.cos(r),a=Math.sin(r),o=1-i,s=Math.sqrt(t[0]**2+t[1]**2+t[2]**2),[c,l,u]=[t[0]/s,t[1]/s,t[2]/s],d=o*c*c+i,f=o*c*l-a*u,p=o*c*u+a*l,m=o*l*c+a*u,h=o*l*l+i,g=o*l*u-a*c,_=o*u*c-a*l,v=o*u*l+a*c,y=o*u*u+i,[b,x,S]=n;return[d,f,p,b-(d*b+f*x+p*S),m,h,g,x-(m*b+h*x+g*S),_,v,y,S-(_*b+v*x+y*S),0,0,0,1]}function Xf(e,t){let[n,r,i]=e;return[t,0,0,n*(1-t),0,t,0,r*(1-t),0,0,t,i*(1-t),0,0,0,1]}function Zf(e,n){let r=n=>t(e,n);return[r(0),r(1),r(2),n[0],r(3),r(4),r(5),n[1],r(6),r(7),r(8),n[2],0,0,0,1]}function Qf(e,t){let[n,r,i]=e,a=Math.sqrt(t[0]**2+t[1]**2+t[2]**2),o=t[0]/a,s=t[1]/a,c=t[2]/a,l=2*(n*o+r*s+i*c);return[1-2*o*o,-2*o*s,-2*o*c,l*o,-2*s*o,1-2*s*s,-2*s*c,l*s,-2*c*o,-2*c*s,1-2*c*c,l*c,0,0,0,1]}function $f(e,t){let n=Array(16).fill(0);for(let r=0;r<4;r++)for(let i=0;i<4;i++)for(let a=0;a<4;a++)n[r*4+i]=n[r*4+i]+e[r*4+a]*t[a*4+i];return n}var ep=.01,tp=9e5;function np(){return tp++}var rp=new Map,ip=new Set;function ap(e,t){ip.has(e)||(ip.add(e),console.warn(`brepkit: ${t}`))}function op(e){return e.optimisation!==void 0||e.simplify!==void 0||e.strategy!==void 0||e.fuzzyValue!==void 0}function sp(e){return e}function cp(e){let t=e;for(;t.__bk2d===`trimmed`;)t=t.basis;return t}function lp(e){return e}function up(e,t){if(typeof t!=`function`)return t;let n;for(let r of e){let e;try{e=t(r)}catch{throw Error(`brepkit does not support variable draft with multiple distinct angles. Use the OCCT kernel for per-face angle variation, or use a uniform angle.`)}if(n===void 0)n=e;else if(e!==n)throw Error(`brepkit does not support variable draft with multiple distinct angles. Use the OCCT kernel for per-face angle variation, or use a uniform angle.`)}if(n===void 0)throw Error(`draft: no faces provided`);return n}function dp(e,t,n){let r=rp.get(t);return r?r.flatMap(t=>t.type===n?[t]:yp(e,t,n)):n===`solid`?z(e.getCompoundSolids(t)).map(L):n===`face`||n===`edge`||n===`vertex`||n===`wire`?z(e.getCompoundSolids(t)).map(L).flatMap(t=>yp(e,t,n)):[]}function fp(e,t,n,r){switch(r){case`solid`:return[t];case`shell`:return z(e.getSolidShells(n)).map(Vf);case`face`:return z(e.getSolidFaces(n)).map(Rf);case`edge`:return z(e.getSolidEdges(n)).map(zf);case`vertex`:return z(e.getSolidVertices(n)).map(Uf);case`wire`:return z(e.getSolidFaces(n)).flatMap(t=>z(e.getFaceWires(t)).map(Bf));default:return[]}}function pp(e,t,n){let r=z(e.getShellFaces(t)).map(Rf),i=new Set,a=[];for(let t of r)for(let r of yp(e,t,n)){let e=R(r);i.has(e)||(i.add(e),a.push(r))}return a}function mp(e,t,n,r){return r===`shell`?[t]:r===`face`?z(e.getShellFaces(n)).map(Rf):r===`edge`||r===`vertex`?pp(e,n,r):[]}function hp(e,t,n,r){return r===`face`?[t]:r===`edge`?z(e.getFaceEdges(n)).map(zf):r===`vertex`?z(e.getFaceVertices(n)).map(Uf):r===`wire`?z(e.getFaceWires(n)).map(Bf):[]}function gp(e,n){let r=z(e.getWireEdges(n)),i=new Set,a=[];for(let n of r){let r=e.getEdgeVertices(n),o=[[t(r,0),t(r,1),t(r,2)],[t(r,3),t(r,4),t(r,5)]];for(let[t,n,r]of o){let o=`${t},${n},${r}`;i.has(o)||(i.add(o),a.push(Uf(e.makeVertex(t,n,r))))}}return a}function _p(e,t,n,r){return r===`wire`?[t]:r===`edge`?z(e.getWireEdges(n)).map(zf):r===`vertex`?gp(e,n):[]}function vp(e,n,r,i){if(i===`edge`)return[n];if(i===`vertex`){let n=e.getEdgeVertices(r),i=e.makeVertex(t(n,0),t(n,1),t(n,2)),a=e.makeVertex(t(n,3),t(n,4),t(n,5));return[Uf(i),Uf(a)]}return[]}function yp(e,t,n){let r=R(t);switch(t.type){case`compound`:return dp(e,r,n);case`solid`:return fp(e,t,r,n);case`shell`:return mp(e,t,r,n);case`face`:return hp(e,t,r,n);case`wire`:return _p(e,t,r,n);case`edge`:return vp(e,t,r,n);default:return[]}}function bp(e,t,n){if(Array.isArray(t))for(let e of t)n(e)}function xp(e,t){if(If(t))return t.type;throw Error(`brepkit: cannot determine shape type of non-brepkit handle`)}function Sp(e,t,n){return If(t)&&If(n)&&t.id===n.id&&t.type===n.type}function Cp(e,t,n){return Sp(e,t,n)}function wp(e,t,n){return t}function Tp(e,t,n){return If(t)?t.id%n:0}function Ep(e,t){return!t||!If(t)}function Dp(e,t){let n=R(t);return e.getShapeOrientation(n)}function Op(e,t){let n=Wf(t,`edgeToFaceMap`);return e.edgeToFaceMap(n)}function kp(e,t,n){let r=R(t,`face`),i=R(n,`face`);return Array.from(e.sharedEdges(r,i)).map(e=>zf(e))}function Ap(e,t,n){let r=Wf(t,`adjacentFaces`),i=R(n,`face`);return Array.from(e.adjacentFaces(r,i)).map(e=>Rf(e))}function jp(e,t){let n=t;return n.type===`face`?[n.id]:n.type===`solid`?z(e.getSolidFaces(n.id)):n.type===`shell`?z(e.getShellFaces(n.id)):[]}function Mp(e,t,n){let r=t.flatMap(t=>jp(e,t)),i=n??1e-7;try{return Vf(e.weldShellsAndFaces(r,i))}catch(e){console.warn(`brepkit: weldShellsAndFaces failed, falling back to sewFaces:`,e)}return Vf(e.sewFaces(r,i))}function Np(e){return{iterShapes:(t,n)=>yp(e,t,n),iterShapeList:(t,n)=>{bp(e,t,n)},shapeType:t=>xp(e,t),isSame:(t,n)=>Sp(e,t,n),isEqual:(t,n)=>Cp(e,t,n),downcast:(t,n)=>wp(e,t,n),hashCode:(t,n)=>Tp(e,t,n),isNull:t=>Ep(e,t),shapeOrientation:t=>Dp(e,t),edgeToFaceMap:t=>Op(e,t),sharedEdges:(t,n)=>kp(e,t,n),adjacentFaces:(t,n)=>Ap(e,t,n),sew:(t,n)=>Mp(e,t,n)}}function Pp(e,t){return n(e.getVertexPosition(R(t,`vertex`)))}function Fp(e,t){return e.getSurfaceType(R(t,`face`))}function Ip(e,n){let r=e.getSurfaceDomain(R(n,`face`));return{uMin:t(r,0),uMax:t(r,1),vMin:t(r,2),vMax:t(r,3)}}function Lp(e,t){return Bf(e.getFaceOuterWire(R(t,`face`)))}function Rp(e,t,r,i){return n(e.evaluateSurfaceNormal(R(t,`face`),r,i))}function zp(e,t,r,i){return n(e.evaluateSurface(R(t,`face`),r,i))}function Bp(e,n,r){try{let i=e.projectPointOnSurface(R(n,`face`),r[0],r[1],r[2]);return[t(i,0),t(i,1)]}catch(e){return console.warn(`brepkit: uvFromPoint failed:`,e),null}}function Vp(e,t,r){return n(e.projectPointOnSurface(R(t,`face`),r[0],r[1],r[2]),2)}function Hp(e,r,i){let a=r,o,s=i;if(a.type===`wire`){let n=z(e.getWireEdges(a.id));o=t(n,n.length-1);let r=0;for(let a of n){let n=e.getEdgeCurveParameters(a),c=t(n,1)-t(n,0);if(i<=r+c||a===o){o=a,s=Math.min(t(n,0)+(i-r),t(n,1));break}r+=c}}else o=R(r,`edge`);let c=e.evaluateEdgeCurveD1(o,s);return{point:n(c,0),tangent:n(c,3)}}function Up(e,n){let r=n;if(r.type===`wire`){let n=z(e.getWireEdges(r.id));if(n.length===0)return[0,0];let i=0;for(let r of n){let n=e.getEdgeCurveParameters(r);i+=t(n,1)-t(n,0)}return[0,i]}let i=e.getEdgeCurveParameters(R(n,`edge`));return[t(i,0),t(i,1)]}function Wp(e,r,i){let a=r;if(a.type===`wire`){let r=z(e.getWireEdges(a.id)),o=0;for(let a of r){let s=e.getEdgeCurveParameters(a),c=t(s,1)-t(s,0);if(i<=o+c||a===r[r.length-1]){let r=t(s,0)+(i-o);return n(e.evaluateEdgeCurve(a,Math.min(r,t(s,1))))}o+=c}return n(e.evaluateEdgeCurve(t(r,0),i))}return n(e.evaluateEdgeCurve(R(r,`edge`),i))}function Gp(e,r){let i=r;if(i.type===`wire`){let r=z(e.getWireEdges(i.id));if(r.length===0)return!1;if(r.length===1)return Kp(e.getEdgeVertices(t(r,0)));let a=[];for(let t of r){let r=e.getEdgeVertices(t);a.push(n(r,0)),a.push(n(r,3))}let o=[];for(let e of a){let t=o.findIndex(t=>Kf(t[0],t[1],t[2],e[0],e[1],e[2])<1e-7);t>=0?o.splice(t,1):o.push(e)}return o.length===0}return Kp(e.getEdgeVertices(R(r,`edge`)))}function Kp(e){return Kf(t(e,0),t(e,1),t(e,2),t(e,3),t(e,4),t(e,5))<1e-7}function qp(e,t){let n=t;try{if(n.type===`edge`||n.type===`wire`&&z(e.getWireEdges(n.id)).length===1)return Gp(e,t)}catch{}return!1}function Jp(e,t){try{if(qp(e,t)){let n=Up(e,t);return n[1]-n[0]}}catch{}return 0}function Yp(e,t){if(t.type===`wire`){let n=yp(e,t,`edge`)[0];return n?e.getEdgeCurveType(R(n,`edge`)):`LINE`}return e.getEdgeCurveType(R(t,`edge`))}function Xp(e,t,n){let r=R(t,`edge`);return zf(e.curveDegreeElevate(r,n))}function Zp(e,t,n,r){let i=R(t,`edge`);return zf(e.curveKnotInsert(i,n,r))}function Qp(e,t,n,r){let i=R(t,`edge`);return zf(e.curveKnotRemove(i,n,r))}function $p(e,n,r){let i=R(n,`edge`),a=e.curveSplit(i,r);return[zf(t(a,0)),zf(t(a,1))]}function em(e,t,n,r,i,a,o,s,c,l){return Rf(e.approximateSurfaceLspia(t,n,r,i,a,o,s,c,l))}function tm(e,t,n,r){let i=R(t,`face`);return Rf(e.untrimFace(i,n,r))}function nm(e,t){return t}function rm(e,t){let r=Nm(e,t);return!r||r.controlPoints.length<6?null:n(r.controlPoints,r.controlPoints.length-6)}function im(e,t){if(If(t)&&t.type===`face`){let n=t.id,r=JSON.parse(e.getAnalyticSurfaceParams(n));if(r.type===`cylinder`)return{radius:r.radius,isDirect:!0}}return null}function am(e,t){let n=JSON.parse(e.getAnalyticSurfaceParams(R(t,`face`))),r=n.type===`cylinder`?n.origin:n.type===`cone`?n.apex:null;if(!r||!n.axis)return null;let[i,a,o]=r,[s,c,l]=n.axis,u=Math.hypot(s,c,l);return u<1e-12?null:{origin:[i,a,o],direction:[s/u,c/u,l/u]}}function om(e,t){return t}function sm(e,n,r,i,a){a!==void 0&&ap(`classify-tolerance`,`classifyPointOnFace() tolerance parameter is not supported; brepkit uses domain-based classification.`);let o=R(n,`face`),s=e.getSurfaceDomain(o);return r<t(s,0)||r>t(s,1)||i<t(s,2)||i>t(s,3)?`out`:`in`}function cm(e,t,n,r){let i=Wf(t,`classifyPointRobust`);return e.classifyPointRobust(i,n[0],n[1],n[2],r)}function lm(e,t,n,r){let i=Wf(t,`classifyPointWinding`);return e.classifyPointWinding(i,n[0],n[1],n[2],r)}function um(e,t,n,r){let i=Wf(t,`detectSmallFeatures`);return Array.from(e.detectSmallFeatures(i,n,r)).map(e=>Rf(e))}function dm(e,t,n){let r=Wf(t,`recognizeFeatures`);return e.recognizeFeatures(r,n)}function fm(e,t,r,i,a){let o=R(t),[s,c,l]=r,[u,d,f]=i,[p,m,h]=a??[1,0,0],g=.1;try{let t=e.boundingBox(o),[r,i,a]=n(t,0),[s,c,l]=n(t,3),u=Kf(r,i,a,s,c,l);u>0&&(g=Math.max(u*.001,1e-6))}catch{}let _=e.projectEdges(o,s,c,l,u,d,f,p,m,h,!0,g),v;try{v=JSON.parse(_)}catch{v={visible:[],hidden:[]}}let y=t=>{let n=[];for(let r of t)for(let t=0;t+3<r.length;t+=2){let i=r[t],a=r[t+1],o=r[t+2],s=r[t+3];i===void 0||a===void 0||o===void 0||s===void 0||i===o&&a===s||n.push(zf(e.makeLineEdge(i,a,0,o,s,0)))}let r=np();return rp.set(r,n),Hf(r)},b=()=>{let e=np();return rp.set(e,[]),Hf(e)};return{visible:{outline:y(v.visible),smooth:b(),sharp:b()},hidden:{outline:y(v.hidden),smooth:b(),sharp:b()}}}function pm(e,t){let n=R(t,`edge`),r=e.getNurbsCurveData(n);if(!r)return null;let i=JSON.parse(r);return{degree:i.degree,poles:i.controlPoints,weights:i.weights,knots:i.distinctKnots,multiplicities:i.multiplicities,isPeriodic:i.periodic,isRational:i.rational}}function mm(e,t){return JSON.parse(e.getNurbsSurfaceDataParity(R(t,`face`)))}function hm(e){return{vertexPosition:t=>Pp(e,t),surfaceType:t=>Fp(e,t),uvBounds:t=>Ip(e,t),outerWire:t=>Lp(e,t),surfaceNormal:(t,n,r)=>Rp(e,t,n,r),pointOnSurface:(t,n,r)=>zp(e,t,n,r),uvFromPoint:(t,n)=>Bp(e,t,n),projectPointOnFace:(t,n)=>Vp(e,t,n),curveTangent:(t,n)=>Hp(e,t,n),curveParameters:t=>Up(e,t),curvePointAtParam:(t,n)=>Wp(e,t,n),curveIsClosed:t=>Gp(e,t),curveIsPeriodic:t=>qp(e,t),curvePeriod:t=>Jp(e,t),curveType:t=>Yp(e,t),curveDegreeElevate:(t,n)=>Xp(e,t,n),curveKnotInsert:(t,n,r)=>Zp(e,t,n,r),curveKnotRemove:(t,n,r)=>Qp(e,t,n,r),curveSplit:(t,n)=>$p(e,t,n),approximateSurfaceLspia:(t,n,r,i,a,o,s,c,l)=>em(e,t,n,r,i,a,o,s,c,l),untrimFace:(t,n,r)=>tm(e,t,n,r),createCurveAdaptor:t=>nm(e,t),getBezierPenultimatePole:t=>rm(e,t),getSurfaceCylinderData:t=>im(e,t),getSurfaceAxis:t=>am(e,t),reverseSurfaceU:t=>om(e,t),classifyPointOnFace:(t,n,r,i)=>sm(e,t,n,r,i),classifyPointRobust:(t,n,r)=>cm(e,t,n,r),classifyPointWinding:(t,n,r)=>lm(e,t,n,r),detectSmallFeatures:(t,n,r)=>um(e,t,n,r),recognizeFeatures:(t,n)=>dm(e,t,n),projectEdges:(t,n,r,i)=>fm(e,t,n,r,i),getNurbsCurveData:t=>pm(e,t),getNurbsSurfaceData:t=>mm(e,t)}}function gm(e,t,n){if(Array.isArray(n)&&n.length===16)return km(e,t,n);throw Error(`brepkit: transform expects a 16-element matrix array`)}function _m(e,t,n,r,i){return km(e,t,Jf(n,r,i))}function vm(e,t,n,r,i){return km(e,t,Yf(n,r,i))}function ym(e,t,n,r){let i=t;return i.type===`solid`?L(e.mirror(i.id,n[0],n[1],n[2],r[0],r[1],r[2])):km(e,t,Qf(n,r))}function bm(e,t,n,r){return km(e,t,Xf(n,r))}function xm(e,t,n,r,i){return km(e,t,Zf(n,r))}function Sm(e,t,n,r){return km(e,t,Zf(n,r))}function Cm(e,t,n,r){let{point:i,tangent:a}=Hp(e,n,r),[o,s,c]=a,l=Math.sqrt(o*o+s*s+c*c);if(l<1e-12)return _m(e,t,i[0],i[1],i[2]);let u=o/l,d=s/l,f=c/l,p=t;if(Math.abs(f+1)<1e-10)p=vm(e,p,180,[1,0,0]);else if(Math.abs(f-1)>1e-10){let t=[-d,u,0],n=180/Math.PI*Math.acos(Math.max(-1,Math.min(1,f)));p=vm(e,p,n,t)}return _m(e,p,i[0],i[1],i[2])}function wm(e,t,n,r,i){let a=[t];for(let o=1;o<i;o++){let i=r*o;a.push(_m(e,t,n[0]*i,n[1]*i,n[2]*i))}return a}function Tm(e,t,n,r,i,a){let o=[t];for(let s=1;s<a;s++)o.push(vm(e,t,i*s,r,n));return o}function Em(e,t,n,r,i,a,o,s){return Hf(e.gridPattern(Wf(t,`gridPattern`),n[0],n[1],n[2],r[0],r[1],r[2],i,a,o,s))}function Dm(e,t){return t.map(t=>{switch(t.type){case`translate`:return _m(e,t.shape,t.x,t.y,t.z);case`rotate`:return vm(e,t.shape,t.angle,t.axis,t.center);case`scale`:return bm(e,t.shape,t.center,t.factor);case`mirror`:return ym(e,t.shape,t.origin,t.normal)}})}function Om(e){return{transform:(t,n)=>gm(e,t,n),translate:(t,n,r,i)=>_m(e,t,n,r,i),rotate:(t,n,r,i)=>vm(e,t,n,r,i),mirror:(t,n,r)=>ym(e,t,n,r),scale:(t,n,r)=>bm(e,t,n,r),generalTransform:(t,n,r,i)=>xm(e,t,n,r,i),generalTransformNonOrthogonal:(t,n,r)=>Sm(e,t,n,r),positionOnCurve:(t,n,r)=>Cm(e,t,n,r),linearPattern:(t,n,r,i)=>wm(e,t,n,r,i),circularPattern:(t,n,r,i,a)=>Tm(e,t,n,r,i,a),gridPattern:(t,n,r,i,a,o,s)=>Em(e,t,n,r,i,a,o,s),transformBatch:t=>Dm(e,t)}}function km(e,t,n){let r=t;if(!If(t))throw Error(`brepkit: applyMatrix requires a BrepkitHandle`);switch(r.type){case`solid`:{let t=e.copySolid(r.id);return e.transformSolid(t,n),L(t)}case`face`:{if(typeof e.copyFace!=`function`)throw Error(`brepkit: applyMatrix for faces requires copyFace/transformFace WASM exports`);let t=e.copyFace(r.id);return e.transformFace(t,n),Rf(t)}case`wire`:{if(typeof e.copyWire!=`function`||typeof e.transformWire!=`function`)throw Error(`brepkit: applyMatrix for wires requires copyWire/transformWire WASM exports`);let t=e.copyWire(r.id);return e.transformWire(t,n),Bf(t)}case`edge`:{if(typeof e.copyEdge!=`function`||typeof e.transformEdge!=`function`)throw Error(`brepkit: applyMatrix for edges requires copyEdge/transformEdge WASM exports`);let t=e.copyEdge(r.id);return e.transformEdge(t,n),zf(t)}default:throw Error(`brepkit: applyMatrix does not support '${r.type}' shapes`)}}function Am(e,t){return!!(e&&(e[0]!==0||e[1]!==0||e[2]!==0)||t&&(t[0]!==0||t[1]!==0||t[2]!==1))}function jm(e,t,n,r){let i=t;if(r&&(r[0]!==0||r[1]!==0||r[2]!==1)){let[t,n,a]=r,o=Math.sqrt(t*t+n*n+a*a),s=t/o,c=n/o,l=a/o;if(Math.abs(l+1)<1e-10)i=vm(e,i,180,[1,0,0]);else if(Math.abs(l-1)>1e-10){let t=[-c,s,0],n=180/Math.PI*Math.acos(Math.max(-1,Math.min(1,l)));i=vm(e,i,n,t)}}return n&&(n[0]!==0||n[1]!==0||n[2]!==0)&&(i=_m(e,i,n[0],n[1],n[2])),i}function Mm(e,t){let r,i=t;if(i.type===`solid`||i.type===`compound`){let n=yp(e,t,`face`);if(n.length===0)throw Error(`brepkit: extractPlaneFromFace: no faces found`);let i=n[0];if(!i)throw Error(`brepkit: extractPlaneFromFace: no faces found`);let a=R(i,`face`),o=0;for(let t of n){let n=R(t,`face`);try{let t=e.faceArea(n,ep);t>o&&(o=t,a=n)}catch{}}r=a}else r=R(t,`face`);let a=n(e.getFaceNormal(r)),o=e.tessellateFace(r,1).positions;return o.length>=3?{point:n(o),normal:a}:{point:[0,0,0],normal:a}}function Nm(e,n){let r=n;if(r.type!==`edge`)return null;let i=e.getEdgeNurbsData(r.id);if(i){let e=JSON.parse(i);return{degree:e.degree,knots:e.knots,controlPoints:e.controlPoints,weights:e.weights}}let a=e.getEdgeVertices(r.id);return{degree:1,knots:[0,0,1,1],controlPoints:[t(a,0),t(a,1),t(a,2),t(a,3),t(a,4),t(a,5)],weights:[1,1]}}function Pm(e,t){if(!If(t))return!1;if(t.type!==`solid`)return!0;try{return e.validateSolidRelaxed(t.id)===0}catch(e){return console.warn(`brepkit: isValid check failed:`,e),!1}}function Fm(e,t){if(!If(t))return!1;if(t.type!==`solid`)return!0;try{return e.validateSolid(t.id)===0}catch(e){return console.warn(`brepkit: isValidStrict check failed:`,e),!1}}function Im(e,t){let n=t;if(n.type!==`solid`)throw Error(`brepkit: healSolid requires a solid, got ${n.type}. Consider using makeCompound() to combine shapes first.`);try{let n=e.repairSolid(R(t));return n>0&&console.warn(`brepkit: repairSolid left ${n} error(s) on solid.`),t}catch(n){try{return e.healSolid(R(t)),t}catch(e){return console.warn(`brepkit: healSolid failed (repairSolid error:`,n,`, healSolid error:`,e,`)`),null}}}function Lm(e,t){return t}function Rm(e,t,n){return t}function zm(e,t,n){let r=Wf(t,`mergeCoincidentVertices`);return e.mergeCoincidentVertices(r,n)}function Bm(e,t,n){let r=Wf(t,`removeDegenerateEdges`);return e.removeDegenerateEdges(r,n)}function Vm(e,t){let n=Wf(t,`fixFaceOrientations`);return e.fixFaceOrientations(n)}function Hm(e,t){let n=t;return n.type===`solid`&&e.healSolid(n.id),t}function Um(e,t){return t}function Wm(e,t){if(!If(t)||t.type!==`solid`)return null;try{return typeof e.validateSolidDetails==`function`?e.validateSolidDetails(t.id):null}catch{return null}}function Gm(e){return{isValid:t=>Pm(e,t),isValidStrict:t=>Fm(e,t),healSolid:t=>Im(e,t),healFace:t=>Lm(e,t),healWire:(t,n)=>Rm(e,t,n),fixShape:t=>Hm(e,t),fixSelfIntersection:t=>Um(e,t),mergeCoincidentVertices:(t,n)=>zm(e,t,n),removeDegenerateEdges:(t,n)=>Bm(e,t,n),fixFaceOrientations:t=>Vm(e,t),validationDetails:t=>Wm(e,t)}}function Km(e){if(!(e instanceof Error))return!1;let t=e.message;return t.startsWith(`empty result:`)||t.includes(`produced empty result`)||t.includes(`produces empty result`)}function qm(e,t){return t.type===`compound`?z(e.getCompoundSolids(t.id)).length===0:!1}function Jm(e){return Hf(e.makeCompound([]))}function Ym(e,t,n,r){if(r&&op(r)&&ap(`boolean-options`,`BooleanOptions (optimisation, simplify, strategy, fuzzyValue) not supported; ignored.`),qm(e,t))return n;if(qm(e,n))return t;let i=Wf(t,`fuse`),a=n;if(a.type===`compound`){let t=z(e.getCompoundSolids(a.id)),n=i;for(let r of t)n=e.fuse(n,r);return L(n)}return L(e.fuse(i,Wf(n,`fuse`)))}function Xm(e,t,n,r){if(r&&op(r)&&ap(`boolean-options`,`BooleanOptions (optimisation, simplify, strategy, fuzzyValue) not supported; ignored.`),qm(e,t))return Jm(e);if(qm(e,n))return t;let i=Wf(t,`cut`),a=n;if(a.type===`compound`){let t=z(e.getCompoundSolids(a.id)),n=i;for(let r of t)try{n=e.cut(n,r)}catch(t){if(Km(t))return Jm(e);throw t}return L(n)}try{return L(e.cut(i,Wf(n,`cut`)))}catch(t){if(Km(t))return Jm(e);throw t}}function Zm(e,t,n,r){if(r&&op(r)&&ap(`boolean-options`,`BooleanOptions (optimisation, simplify, strategy, fuzzyValue) not supported; ignored.`),qm(e,t)||qm(e,n))return Jm(e);try{return L(e.intersect(Wf(t,`intersect`),Wf(n,`intersect`)))}catch(t){if(Km(t))return Jm(e);throw t}}function Qm(e,n,r,i){let{point:a,normal:o}=Mm(e,r),s=If(n)&&n.type===`solid`?n.id:R(n,`solid`),c=z(e.section(s,a[0],a[1],a[2],o[0],o[1],o[2]));if(c.length===0)return Hf(e.makeCompound([]));let l=[];for(let n=0;n<c.length;n++){let r=z(e.getFaceWires(t(c,n)));for(let e=0;e<r.length;e++)l.push(Bf(t(r,e)))}let[u]=l;if(l.length===1&&u!==void 0)return u;let d=np();return rp.set(d,l),Hf(d)}function $m(e,n,r){if(n.length===0)throw Error(`brepkit: fuseAll requires at least one shape`);if(n.length===1)return t(n,0);if(e.compoundFuse){let t=[];for(let r of n){let n=r;n.type===`compound`?t.push(...z(e.getCompoundSolids(n.id))):t.push(Wf(r,`fuseAll`))}if(t.length===0)throw Error(`brepkit: fuseAll resolved to zero solid IDs`);return L(e.compoundFuse(new Uint32Array(t)))}let i=[...n];for(;i.length>1;){let t=[];for(let n=0;n<i.length;n+=2)n+1<i.length?t.push(Ym(e,i[n],i[n+1],r)):t.push(i[n]);i=t}return t(i,0)}function eh(e,t,n,r){if(n.length===0)return t;if(n.length===1)return Xm(e,t,n[0],r);let i=Wf(t,`cutAll`),a=[];for(let t of n){let n=t;n.type===`compound`?a.push(...z(e.getCompoundSolids(n.id))):a.push(Wf(t,`cutAll`))}return a.length===0?t:L(e.compoundCut(i,new Uint32Array(a)))}function th(e,t,n){if(n.length===0)throw Error(`brepkit: split requires at least one tool`);let{point:r,normal:i}=Mm(e,n[0]),a=z(e.split(R(t,`solid`),r[0],r[1],r[2],i[0],i[1],i[2]));return Hf(e.makeCompound(a))}function nh(e,t,n,r,i,a,o){let s=e.meshBoolean(t,n,r,i,a,o);return{vertices:new Float32Array(s.positions),normals:new Float32Array(s.normals),triangles:new Uint32Array(s.indices),uvs:new Float32Array,faceGroups:[{start:0,count:s.indices.length,faceHash:0}]}}function rh(e,t,n,r,i){let a=[];return(!If(t)||t.IsNull())&&a.push({operand:`base`,issue:`null-shape`,message:`Base shape is null`}),(!If(n)||n.IsNull())&&a.push({operand:`tool`,issue:`null-shape`,message:`Tool shape is null`}),a.length>0?{valid:!1,issues:a}:(i(t)||a.push({operand:`base`,issue:`not-valid`,message:`Base shape fails BRepCheck validation. Try autoHeal() first.`}),i(n)||a.push({operand:`tool`,issue:`not-valid`,message:`Tool shape fails BRepCheck validation. Try autoHeal() first.`}),{valid:a.length===0,issues:a})}function ih(e,n,r){let i=[];for(let r of n){let n=r;if(n.type===`solid`){let r=z(e.getSolidVertices(n.id));for(let n of r){let r=e.getVertexPosition(n);i.push(t(r,0),t(r,1),t(r,2))}}else if(n.type===`vertex`){let r=e.getVertexPosition(n.id);i.push(t(r,0),t(r,1),t(r,2))}}if(i.length<12)throw Error(`brepkit: hull requires enough points`);return L(e.convexHull(i))}function ah(e,t,n){if(t.length<4)throw Error(`brepkit: hull needs at least 4 points`);let r=[];for(let e of t)r.push(e.x,e.y,e.z);return L(e.convexHull(r))}function oh(e,n,r,i){let a=new Float64Array(n.length*3);for(let e=0;e<n.length;e++){let r=t(n,e);a[e*3]=r.x,a[e*3+1]=r.y,a[e*3+2]=r.z}let o=new Uint32Array(r.length*3);for(let e=0;e<r.length;e++){let n=t(r,e);o[e*3]=n[0],o[e*3+1]=n[1],o[e*3+2]=n[2]}return L(e.importIndexedMesh(a,o))}function sh(e){return{fuse:(t,n,r)=>Ym(e,t,n,r),cut:(t,n,r)=>Xm(e,t,n,r),intersect:(t,n,r)=>Zm(e,t,n,r),section:(t,n,r)=>Qm(e,t,n,r),fuseAll:(t,n)=>$m(e,t,n),cutAll:(t,n,r)=>eh(e,t,n,r),split:(t,n)=>th(e,t,n),meshBoolean:(t,n,r,i,a,o)=>nh(e,t,n,r,i,a,o),checkBoolean:(t,n,r)=>rh(e,t,n,r,t=>Pm(e,t)),hull:(t,n)=>ih(e,t,n),hullFromPoints:(t,n)=>ah(e,t,n),buildSolidFromFaces:(t,n,r)=>oh(e,t,n,r)}}function ch(e,t,n,r){return Uf(e.makeVertex(t,n,r))}function lh(e,t,n,r){if(t&&typeof t==`object`&&`origin`in t&&`direction`in t){let{origin:i,direction:a}=t,o=n??0,s=r??1;return yh(e,[i[0]+a[0]*o,i[1]+a[1]*o,i[2]+a[2]*o],[i[0]+a[0]*s,i[1]+a[1]*s,i[2]+a[2]*s])}if(If(t)&&t.type===`edge`)return t;throw Error(`brepkit: makeEdge requires a curve with origin/direction, or an edge handle`)}function uh(e,t){let n=[];for(let r of t){let t=r;if(t.type===`wire`)for(let r of z(e.getWireEdges(t.id)))n.push(r);else n.push(R(r,`edge`))}return Bf(e.makeWire(n,!0))}function dh(e,t,n){let r=t,i=r.type===`edge`?e.makeWire([r.id],!0):R(t,`wire`);return Rf(n?e.makePlanarFaceFromWire(i):e.makeFaceFromWire(i))}function fh(e,t,n,r){return L(e.makeBox(t,n,r))}function ph(e,t,n){return Rf(e.makeRectangle(t,n))}function mh(e,t,n,r,i){let a=L(e.makeCylinder(t,n));return Am(r,i)?jm(e,a,r,i):a}function hh(e,t,n){let r=L(e.makeSphere(t,32));return n&&(n[0]!==0||n[1]!==0||n[2]!==0)?_m(e,r,n[0],n[1],n[2]):r}function gh(e,t,n,r,i,a){let o=L(e.makeCone(t,n,r));return Am(i,a)?jm(e,o,i,a):o}function _h(e,t,n,r,i){let a=L(e.makeTorus(t,n,32));return Am(r,i)?jm(e,a,r,i):a}function vh(e,t,n,r){let i=Math.max(t,n,r);return xm(e,hh(e,i),[t/i,0,0,0,n/i,0,0,0,r/i],[0,0,0],!1)}function yh(e,t,n){return zf(e.makeLineEdge(t[0],t[1],t[2],n[0],n[1],n[2]))}function bh(e,t,n,r){let i=Math.sqrt(n[0]**2+n[1]**2+n[2]**2);return zf(e.makeCircleEdge(t[0],t[1],t[2],n[0]/i,n[1]/i,n[2]/i,r))}function xh(e,t,n,r,i,a){let o=a-i,s=1e-9;if(o>s&&o<2*Math.PI-s){let o=Math.hypot(n[0],n[1],n[2]),s=[n[0]/o,n[1]/o,n[2]/o],c=Math.abs(s[0])<.9?[1,0,0]:[0,1,0],l=[s[1]*c[2]-s[2]*c[1],s[2]*c[0]-s[0]*c[2],s[0]*c[1]-s[1]*c[0]],u=Math.hypot(l[0],l[1],l[2]),d=[l[0]/u,l[1]/u,l[2]/u],f=[s[1]*d[2]-s[2]*d[1],s[2]*d[0]-s[0]*d[2],s[0]*d[1]-s[1]*d[0]],p=e=>{let n=Math.cos(e),i=Math.sin(e);return[t[0]+r*(n*d[0]+i*f[0]),t[1]+r*(n*d[1]+i*f[1]),t[2]+r*(n*d[2]+i*f[2])]},m=p(i),h=p(a);return zf(e.makeCircleArc3d(m[0],m[1],m[2],h[0],h[1],h[2],t[0],t[1],t[2],s[0],s[1],s[2]))}return Yh(e,t,n,r,i,a)}function Sh(e,t,n,r,i,a){let o=2*(e*(r-a)+n*(a-t)+i*(t-r));return Math.abs(o)<1e-12?null:[((e**2+t**2)*(r-a)+(n**2+r**2)*(a-t)+(i**2+a**2)*(t-r))/o,((e**2+t**2)*(i-n)+(n**2+r**2)*(e-i)+(i**2+a**2)*(n-e))/o]}function Ch(e,t,n,r){let 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=Math.sqrt(o[0]**2+o[1]**2+o[2]**2);if(s<1e-12)return yh(e,t,r);let c=[o[0]/s,o[1]/s,o[2]/s],l=Math.sqrt(i[0]**2+i[1]**2+i[2]**2),u=[i[0]/l,i[1]/l,i[2]/l],d=[c[1]*u[2]-c[2]*u[1],c[2]*u[0]-c[0]*u[2],c[0]*u[1]-c[1]*u[0]],f=e=>{let n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return[n*u[0]+r*u[1]+i*u[2],n*d[0]+r*d[1]+i*d[2]]},[p,m]=f(t),[h,g]=f(n),[_,v]=f(r),y=Sh(p,m,h,g,_,v);if(!y)return yh(e,t,r);let[b,x]=y,S=[t[0]+b*u[0]+x*d[0],t[1]+b*u[1]+x*d[1],t[2]+b*u[2]+x*d[2]];return zf(e.makeCircleArc3d(t[0],t[1],t[2],r[0],r[1],r[2],S[0],S[1],S[2],c[0],c[1],c[2]))}function wh(e,t,n,r,i,a){let o=Math.sqrt(n[0]**2+n[1]**2+n[2]**2);if(a!==void 0){let s=Math.sqrt(a[0]**2+a[1]**2+a[2]**2);return zf(e.makeEllipseEdgeWithRef(t[0],t[1],t[2],n[0]/o,n[1]/o,n[2]/o,r,i,a[0]/s,a[1]/s,a[2]/s))}return zf(e.makeEllipseEdge(t[0],t[1],t[2],n[0]/o,n[1]/o,n[2]/o,r,i))}function Th(e,t,n,r,i,a,o,s){return Xh(e,t,n,r,i,a,o,s)}function Eh(e,n){if(n.length<2)throw Error(`brepkit: bezier requires at least 2 points`);let r=n.length-1,i=n.length,a=[...Array(r+1).fill(0),...Array(r+1).fill(1)],o=Array(i).fill(1),s=n.flatMap(([e,t,n])=>[e,t,n]),c=t(n,0),l=t(n,i-1);return zf(e.makeNurbsEdge(c[0],c[1],c[2],l[0],l[1],l[2],r,a,s,o))}function Dh(e,t,n,r){return zf(e.makeTangentArc3d(t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]))}function Oh(e,t,n,r,i,a,o){let s=n/t,c=Math.max(4,Math.ceil(s*16)),l=i?.[0]??0,u=i?.[1]??0,d=i?.[2]??0,f=o?-1:1,p=[];for(let e=0;e<=c;e++){let t=e/c,i=f*2*Math.PI*s*t;p.push([l+r*Math.cos(i),u+r*Math.sin(i),d+n*t])}return uh(e,[Vh(e,p)])}function kh(e,t){let n=[];for(let r of t){let t=r;if(t.type===`edge`)n.push(t.id);else if(t.type===`wire`)for(let r of z(e.getWireEdges(t.id)))n.push(r)}if(n.length===0)throw Error(`brepkit: makeWireFromMixed requires at least one edge`);return Bf(e.makeWire(n,!1))}function Ah(e,t){let n=t.filter(If);if(n.length===0)throw Error(`brepkit: makeCompound requires at least one shape`);if(n.every(e=>e.type===`solid`))return Hf(e.makeCompound(n.map(e=>e.id)));let r=np();return rp.set(r,n),Hf(r)}function jh(e,t,n){let r=fh(e,Math.abs(n[0]-t[0]),Math.abs(n[1]-t[1]),Math.abs(n[2]-t[2])),i=Math.min(t[0],n[0]),a=Math.min(t[1],n[1]),o=Math.min(t[2],n[2]);return i!==0||a!==0||o!==0?_m(e,r,i,a,o):r}function Mh(e,t){let n=t;if(n.type===`solid`)return t;if(n.type===`shell`){try{return e.getSolidFaces(n.id),L(n.id)}catch{}return L(e.solidFromShell(n.id))}return L(e.solidFromShell(R(t,`shell`)))}function Nh(e,t){return dh(e,t,!1)}function Ph(e,t,n){let r=n.map(e=>R(e,`wire`));return Rf(e.addHolesToFace(R(t,`face`),r))}function Fh(e,t){return Rf(e.removeHolesFromFace(R(t,`face`)))}function Ih(e,t,n){return dh(e,n,!1)}function Lh(e,t,n,r){let i=[];for(let[e,n,r]of t)i.push(e,n,r);let a=Math.min(3,n-1),o=Math.min(3,r-1);try{return Rf(e.interpolateSurface(i,n,r,a,o))}catch{return Rh(e,t,n,r)}}function Rh(e,n,r,i){let a=[];for(let o=0;o<r-1;o++)for(let r=0;r<i-1;r++){let s=o*i+r,c=(o+1)*i+r,l=o*i+(r+1),u=(o+1)*i+(r+1),d=zh(e,t(n,s),t(n,c),t(n,l));d&&a.push(d);let f=zh(e,t(n,c),t(n,u),t(n,l));f&&a.push(f)}if(a.length===0)throw Error(`brepkit: no valid faces in surface grid`);return Mp(e,a,1e-6)}function zh(e,t,n,r){let i=n[0]-t[0],a=n[1]-t[1],o=n[2]-t[2],s=r[0]-t[0],c=r[1]-t[1],l=r[2]-t[2],u=a*l-o*c,d=o*s-i*l,f=i*c-a*s;if(Math.sqrt(u*u+d*d+f*f)<1e-12)return null;try{return dh(e,uh(e,[yh(e,t,n),yh(e,n,r),yh(e,r,t)]))}catch(e){return console.warn(`brepkit: makeNonPlanarFace failed:`,e),null}}function Bh(e,t,n){let r=t.map(e=>R(e,`face`));return L(e.sewFaces(r,n))}function Vh(e,n,r){if(r?.tolerance!==void 0&&ap(`interpolate-tolerance`,`interpolatePoints() tolerance parameter is not supported; brepkit uses chord-length parameterisation.`),n.length<2)throw Error(`brepkit: need at least 2 points`);if(n.length===2)return yh(e,t(n,0),t(n,1));let i=Math.min(3,n.length-1),a=n.flatMap(([e,t,n])=>[e,t,n]);return zf(e.interpolatePoints(a,i))}function Hh(e,t,n){let r=n?.degMax??3,i=n?.tolerance??1e-6,a=[];for(let e of t)a.push(e[0],e[1],e[2]);let o=Math.max(r+1,Math.min(t.length,Math.ceil(t.length*.7)));return zf(e.approximateCurveLspia(a,r,o,i,100))}function Uh(e,t,n,r){return{x:t,y:n,z:r}}function Wh(e,t,n,r){let i=Math.sqrt(t*t+n*n+r*r);return{x:t/i,y:n/i,z:r/i}}function Gh(e,t,n,r){return{x:t,y:n,z:r}}function Kh(e,t,n,r,i,a,o){return{origin:[t,n,r],direction:[i,a,o]}}function qh(e,t,n,r,i,a,o,s,c,l){return{origin:[t,n,r],z:[i,a,o],x:s===void 0?void 0:[s,c,l]}}function Jh(e,t,n,r,i,a,o,s,c,l){return{origin:[t,n,r],z:[i,a,o],x:s===void 0?void 0:[s,c,l]}}function Yh(e,n,r,i,a,o){let s=Math.sqrt(r[0]**2+r[1]**2+r[2]**2),c=[r[0]/s,r[1]/s,r[2]/s],l=Math.abs(c[0])<.9?[1,0,0]:[0,1,0],u=[c[1]*l[2]-c[2]*l[1],c[2]*l[0]-c[0]*l[2],c[0]*l[1]-c[1]*l[0]],d=Math.sqrt(u[0]**2+u[1]**2+u[2]**2),f=[u[0]/d,u[1]/d,u[2]/d],p=[c[1]*f[2]-c[2]*f[1],c[2]*f[0]-c[0]*f[2],c[0]*f[1]-c[1]*f[0]],m=Math.ceil(Math.abs(o-a)/(Math.PI/2)),h=(o-a)/m,g=[],_=[];for(let e=0;e<=m;e++){let t=a+e*h,r=Math.cos(t),o=Math.sin(t),s=n[0]+i*(r*f[0]+o*p[0]),c=n[1]+i*(r*f[1]+o*p[1]),l=n[2]+i*(r*f[2]+o*p[2]);if(e>0){let t=a+(e-.5)*h,r=Math.cos(t),o=Math.sin(t),s=i/Math.cos(h/2),c=n[0]+s*(r*f[0]+o*p[0]),l=n[1]+s*(r*f[1]+o*p[1]),u=n[2]+s*(r*f[2]+o*p[2]);g.push(c,l,u),_.push(Math.cos(h/2))}g.push(s,c,l),_.push(1)}let v=[,,,].fill(0);for(let e=1;e<m;e++)v.push(e,e);v.push(...[,,,].fill(m));let y=t(v,v.length-1);for(let e=0;e<v.length;e++)v[e]=t(v,e)/y;let b=t(g,0),x=t(g,1),S=t(g,2),C=t(g,g.length-3),w=t(g,g.length-2),ee=t(g,g.length-1);return zf(e.makeNurbsEdge(b,x,S,C,w,ee,2,v,g,_))}function Xh(e,n,r,i,a,o,s,c){let l=Math.sqrt(r[0]**2+r[1]**2+r[2]**2),u=[r[0]/l,r[1]/l,r[2]/l],d;if(c){let e=Math.sqrt(c[0]**2+c[1]**2+c[2]**2);d=[c[0]/e,c[1]/e,c[2]/e]}else{let e=Math.abs(u[0])<.9?[1,0,0]:[0,1,0],t=[u[1]*e[2]-u[2]*e[1],u[2]*e[0]-u[0]*e[2],u[0]*e[1]-u[1]*e[0]],n=Math.sqrt(t[0]**2+t[1]**2+t[2]**2);d=[t[0]/n,t[1]/n,t[2]/n]}let f=[u[1]*d[2]-u[2]*d[1],u[2]*d[0]-u[0]*d[2],u[0]*d[1]-u[1]*d[0]],p=Math.ceil(Math.abs(s-o)/(Math.PI/2)),m=(s-o)/p,h=[],g=[];for(let e=0;e<=p;e++){let t=o+e*m,r=Math.cos(t),s=Math.sin(t),c=n[0]+i*r*d[0]+a*s*f[0],l=n[1]+i*r*d[1]+a*s*f[1],u=n[2]+i*r*d[2]+a*s*f[2];if(e>0){let t=o+(e-.5)*m,r=Math.cos(t),s=Math.sin(t),c=1/Math.cos(m/2),l=n[0]+i*c*r*d[0]+a*c*s*f[0],u=n[1]+i*c*r*d[1]+a*c*s*f[1],p=n[2]+i*c*r*d[2]+a*c*s*f[2];h.push(l,u,p),g.push(Math.cos(m/2))}h.push(c,l,u),g.push(1)}let _=[,,,].fill(0);for(let e=1;e<p;e++)_.push(e,e);_.push(...[,,,].fill(p));let v=t(_,_.length-1);for(let e=0;e<_.length;e++)_[e]=t(_,e)/v;let y=t(h,0),b=t(h,1),x=t(h,2),S=t(h,h.length-3),C=t(h,h.length-2),w=t(h,h.length-1);return zf(e.makeNurbsEdge(y,b,x,S,C,w,2,_,h,g))}function Zh(e){return{makeVertex:(t,n,r)=>ch(e,t,n,r),makeEdge:(t,n,r)=>lh(e,t,n,r),makeWire:t=>uh(e,t),makeWireFromMixed:t=>kh(e,t),makeFace:(t,n)=>dh(e,t,n),makeBox:(t,n,r)=>fh(e,t,n,r),makeRectangle:(t,n)=>ph(e,t,n),makeCylinder:(t,n,r,i)=>mh(e,t,n,r,i),makeSphere:(t,n)=>hh(e,t,n),makeCone:(t,n,r,i,a)=>gh(e,t,n,r,i,a),makeTorus:(t,n,r,i)=>_h(e,t,n,r,i),makeEllipsoid:(t,n,r)=>vh(e,t,n,r),makeLineEdge:(t,n)=>yh(e,t,n),makeCircleEdge:(t,n,r)=>bh(e,t,n,r),makeCircleArc:(t,n,r,i,a)=>xh(e,t,n,r,i,a),makeArcEdge:(t,n,r)=>Ch(e,t,n,r),makeEllipseEdge:(t,n,r,i,a)=>wh(e,t,n,r,i,a),makeEllipseArc:(t,n,r,i,a,o,s)=>Th(e,t,n,r,i,a,o,s),makeBezierEdge:t=>Eh(e,t),makeTangentArc:(t,n,r)=>Dh(e,t,n,r),makeHelixWire:(t,n,r,i,a,o)=>Oh(e,t,n,r,i,a,o),makeCompound:t=>Ah(e,t),makeBoxFromCorners:(t,n)=>jh(e,t,n),solidFromShell:t=>Mh(e,t),makeNonPlanarFace:t=>Nh(e,t),addHolesInFace:(t,n)=>Ph(e,t,n),removeHolesFromFace:t=>Fh(e,t),makeFaceOnSurface:(t,n)=>Ih(e,t,n),bsplineSurface:(t,n,r)=>Lh(e,t,n,r),triangulatedSurface:(t,n,r)=>Rh(e,t,n,r),buildTriFace:(t,n,r)=>zh(e,t,n,r),sewAndSolidify:(t,n)=>Bh(e,t,n),interpolatePoints:(t,n)=>Vh(e,t,n),approximatePoints:(t,n)=>Hh(e,t,n),createPoint3d:(t,n,r)=>Uh(e,t,n,r),createDirection3d:(t,n,r)=>Wh(e,t,n,r),createVector3d:(t,n,r)=>Gh(e,t,n,r),createAxis1:(t,n,r,i,a,o)=>Kh(e,t,n,r,i,a,o),createAxis2:(t,n,r,i,a,o,s,c,l)=>qh(e,t,n,r,i,a,o,s,c,l),createAxis3:(t,n,r,i,a,o,s,c,l)=>Jh(e,t,n,r,i,a,o,s,c,l)}}function Qh(e,t,n,r){let i=Wf(t,`fillet`),a=n.map(e=>R(e,`edge`));if(typeof r==`number`)return L(e.fillet(i,a,r));let o=[];for(let[e,t]of n.entries()){let n=a[e]??0,i;i=typeof r==`function`?r(t):r;let[s,c]=Array.isArray(i)?i:[i,i];o.push({edge:n,startRadius:s,endRadius:c})}return L(e.filletVariable(i,JSON.stringify(o)))}function $h(e,t,n,r){let i=Wf(t,`chamfer`),a=n.map(e=>R(e,`edge`));if(typeof r==`number`)return L(e.chamfer(i,a,r));if(Array.isArray(r)){let[t,n]=r;return typeof e.chamferAsymmetric==`function`?L(e.chamferAsymmetric(i,a,t,n)):(ap(`chamfer-asymmetric`,`chamferAsymmetric not available; using averaged distance.`),L(e.chamfer(i,a,(t+n)/2)))}let o=new Map;for(let[e,t]of n.entries()){let n=r(t),i=a[e];if(i===void 0)continue;let[s,c]=Array.isArray(n)?n:[n,n],l=`${s},${c}`,u=o.get(l);u?u.ids.push(i):o.set(l,{ids:[i],d1:s,d2:c})}let s=i;for(let t of o.values())t.d1===t.d2?s=e.chamfer(s,t.ids,t.d1):typeof e.chamferAsymmetric==`function`?s=e.chamferAsymmetric(s,t.ids,t.d1,t.d2):(ap(`chamfer-callback`,`chamferAsymmetric not available; asymmetric edges use averaged distance.`),s=e.chamfer(s,t.ids,(t.d1+t.d2)/2));return L(s)}function eg(e,t,n,r,i){let a=r*Math.tan(i*Math.PI/180),o=Wf(t,`chamferDistAngle`),s=n.map(e=>R(e,`edge`));return typeof e.chamferAsymmetric==`function`?L(e.chamferAsymmetric(o,s,r,a)):(ap(`chamfer-dist-angle`,`chamferAsymmetric not available; using averaged distance.`),L(e.chamfer(o,s,(r+a)/2)))}function tg(e,n){let r=z(e.getFaceVertices(n));if(r.length<1)return null;let i=0,a=0,o=0;for(let n of r){let r=e.getVertexPosition(n);i+=t(r,0),a+=t(r,1),o+=t(r,2)}let s=r.length;return{x:i/s,y:a/s,z:o/s}}function ng(e,t,n){try{let r=e.getFaceNormal(t),i=-1,a=-2;for(let t of n)try{let n=e.getFaceNormal(t),o=(r[0]??0)*(n[0]??0)+(r[1]??0)*(n[1]??0)+(r[2]??0)*(n[2]??0);o>a&&(a=o,i=t)}catch{}if(i>=0&&a>.99)return i}catch{}return null}function rg(e,t,n){try{let r=tg(e,t);if(r===null)return null;let i=-1,a=1/0;for(let t of n)try{let n=tg(e,t);if(n===null)continue;let o=Math.sqrt((r.x-n.x)**2+(r.y-n.y)**2+(r.z-n.z)**2);o<a&&(a=o,i=t)}catch{}if(i>=0&&a<.001)return i}catch{}return null}function ig(e,t,n,r){if(r.has(t))return t;let i=ng(e,t,n);if(i!==null)return i;let a=rg(e,t,n);return a===null?t:a}function ag(e,t,n,r,i){i!==void 0&&ap(`shell-tolerance`,`shell() tolerance parameter is not supported; brepkit uses its own internal tolerance.`);let a=Wf(t,`shell`),o=z(e.getSolidFaces(a)),s=new Set(o),c=n.map(t=>ig(e,R(t,`face`),o,s));return L(e.shell(a,r,c))}function og(e,t,n){let r=t;if(r.type===`face`)return L(e.thicken(r.id,n));throw Error(`brepkit: thicken() requires a face`)}function sg(e,t,n,r){r!==void 0&&ap(`offset-tolerance`,`offset() tolerance parameter is not supported; brepkit uses its own internal tolerance.`);let i=t;if(i.type===`face`)return L(e.thicken(i.id,n));let a=Wf(t,`offset`);return L(e.offsetSolidV2(a,n))}function cg(e,t,n){let r=Wf(t,`filletVariable`);return L(e.filletVariable(r,n))}function lg(e,t,n,r,i,a){let o=Wf(t,`draft`),s=n.map(e=>R(e,`face`));return L(e.draft(o,s,r[0],r[1],r[2],i[0],i[1],i[2],a))}function ug(e,t,n){let r=Wf(t,`defeature`),i=n.map(e=>R(e,`face`));return L(e.defeature(r,i))}function dg(e){switch(e){case`arc`:case`tangent`:return`arc`;case`intersection`:return`intersection`;default:return`intersection`}}function fg(e,n,r,i){if(typeof e.offsetWire2DWithJoin==`function`)return Bf(e.offsetWire2DWithJoin(R(n,`wire`),r,dg(i)));let a=yp(e,n,`edge`);if(a.length===0)return n;let o=[];for(let n of a){let r=e.getEdgeVertices(R(n,`edge`));o.push(t(r,0),t(r,1))}if(o.length<6)return n;let s=e.offsetPolygon2d(o,r,1e-10),c=[];for(let e=0;e<s.length;e+=2)c.push(t(s,e),t(s,e+1),0);return Bf(e.makePolygonWire(c))}function pg(e,t){if(t.type===`solid`)try{e.healSolid(R(t))}catch(e){console.warn(`brepkit: healing failed in simplify:`,e)}return t}function mg(e,t){let n=t,r=e.reverseShape(n.id);return Lf(n.type,r)}function hg(e){return{fillet:(t,n,r)=>Qh(e,t,n,r),chamfer:(t,n,r)=>$h(e,t,n,r),chamferDistAngle:(t,n,r,i)=>eg(e,t,n,r,i),shell:(t,n,r,i)=>ag(e,t,n,r,i),thicken:(t,n)=>og(e,t,n),offset:(t,n,r)=>sg(e,t,n,r),filletVariable:(t,n)=>cg(e,t,n),draft:(t,n,r,i,a)=>lg(e,t,n,r,i,up(n,a)),defeature:(t,n)=>ug(e,t,n),offsetWire2D:(t,n,r)=>fg(e,t,n,r),simplify:t=>pg(e,t),reverseShape:t=>mg(e,t)}}function gg(e,t){let n=JSON.parse(e),r=n.evolution;if(!r||typeof r.modified!=`object`||typeof r.generated!=`object`)throw Error(`brepkit: invalid evolution JSON structure`);let i=L(n.solid),a=e=>{let n=new Map;for(let[r,i]of Object.entries(e)){let e=Number(r)%t,a=i.map(e=>e%t),o=n.get(e);o?o.push(...a):n.set(e,a)}return n},o=a(r.modified),s=a(r.generated),c=new Set;for(let e of r.deleted)c.add(e%t);return{shape:i,evolution:{modified:o,generated:s,deleted:c}}}function _g(e,t){let n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return n*n+r*r+i*i}function vg(e,n){try{let r=e.tessellateFace(n,1).positions;if(r.length<3)return[0,0,0];let i=0,a=0,o=0,s=r.length/3;for(let e=0;e<r.length;e+=3)i+=t(r,e),a+=t(r,e+1),o+=t(r,e+2);return[i/s,a/s,o/s]}catch{return[0,0,0]}}function yg(e,t,n){try{return{hash:n,normal:e.getFaceNormal(t),centroid:vg(e,t)}}catch{return{hash:n,normal:[0,0,0],centroid:vg(e,t)}}}var bg=.707,xg=100,Sg=.05;function Cg(e,n){let r=-1/0,i=[];for(let a=0;a<n.length;a++){let o=t(n,a),s=(e.normal[0]??0)*(o.normal[0]??0)+(e.normal[1]??0)*(o.normal[1]??0)+(e.normal[2]??0)*(o.normal[2]??0);if(s<bg)continue;let c=_g(e.centroid,o.centroid);if(c>xg)continue;let l=s-c/xg;l>r&&(r=l),i.push({idx:a,score:l})}return{matches:i,bestScore:r}}function wg(e,t){let n=1/0,r;for(let i of t){let t=_g(e.centroid,i.centroid);t<n&&(n=t,r=i)}return r}function Tg(e,n,r,i,a,o,s,c){let l=n;if(l.type!==`solid`)return;let u=z(e.getSolidFaces(l.id)),d=Math.min(u.length,r.length),f=[];for(let n=0;n<d;n++){let i=t(u,n);f.push(yg(e,i,r[n]??i%a))}let p=i.map(t=>yg(e,t,t%a)),m=new Set;for(let e of p){let{matches:n,bestScore:r}=Cg(e,f);if(n.length>0){for(let i of n)if(i.score>=r-Sg){let n=t(f,i.idx),r=o.get(n.hash)??[];r.push(e.hash),o.set(n.hash,r),m.add(i.idx)}}else{let t=wg(e,f);if(t){let n=s.get(t.hash)??[];n.push(e.hash),s.set(t.hash,n)}}}for(let e=0;e<f.length;e++)m.has(e)||c.add(t(f,e).hash)}function Eg(e,t,n,r,i,a,o,s){let c=new Set(s),l=new Map(a);Tg(e,t,n,r,i,a,o,s),s.clear();for(let e of c)s.add(e);for(let e of n){let t=!l.has(e)&&a.has(e)&&(a.get(e)?.length??0)>0,n=o.has(e)&&(o.get(e)?.length??0)>0;!t&&!n&&s.add(e)}}function Dg(e,n,r,i,a,o){let s=n.filter(e=>!r.has(e));s.length>0&&e.length>0&&a.set(t(e,0),s);for(let t of e)i.has(t)||o.add(t)}function Og(e,n,r,i,a,o,s,c,l){let u=new Set(i);if(r.some(e=>u.has(e))){let t=new Set(r);for(let e of r)u.has(e)&&o.set(e,[e]);let d=i.filter(e=>!t.has(e)),f=n.filter(e=>!u.has(e%a));l&&d.length>0&&f.length>0?Eg(e,l,d,f,a,o,s,c):Dg(i,r,u,t,s,c)}else if(l)Tg(e,l,i,n,a,o,s,c);else{for(let e=0;e<i.length&&e<r.length;e++)o.set(t(i,e),[t(r,e)]);r.length>i.length&&i.length>0&&s.set(t(i,0),r.slice(i.length))}}function kg(e,n,r,i,a,o){let s=n,c=new Map,l=new Map,u=new Set;if(s.type===`solid`){let n=z(e.getSolidFaces(s.id)),d=n.map(e=>e%i);if(a)for(let e=0;e<r.length&&e<d.length;e++)c.set(t(r,e),[t(d,e)]);else Og(e,n,d,r,i,c,l,u,o)}return{shape:n,evolution:{modified:c,generated:l,deleted:u}}}function Ag(e,t,n,r,i){for(let[a,o]of e){let s=[];for(let e of o){r.add(e);let i=t.get(e);i?s.push(...i):n.has(e)||s.push(e)}s.length>0?e.set(a,s):(e.delete(a),i?.add(a))}}function jg(e,t){let n=new Set;Ag(t.combinedModified,e.evolution.modified,e.evolution.deleted,n,t.combinedDeleted),Ag(t.combinedGenerated,e.evolution.modified,e.evolution.deleted,n);for(let[r,i]of e.evolution.modified)t.combinedModified.has(r)||n.has(r)||t.combinedModified.set(r,[...i]);for(let[r,i]of e.evolution.generated){if(n.has(r))continue;let e=t.combinedGenerated.get(r)??[];t.combinedGenerated.set(r,[...e,...i])}for(let n of e.evolution.deleted)t.inputFaceHashSet.has(n)&&t.combinedDeleted.add(n)}function Mg(e,t,n,r,i,a){let o=z(e.getCompoundSolids(n)),s=t,c={combinedModified:new Map,combinedGenerated:new Map,combinedDeleted:new Set,inputFaceHashSet:new Set(r)};for(let e of o){let t=s;if(t.type!==`solid`)break;let n=gg(a(t.id,e),i);s=n.shape,jg(n,c)}return{shape:s,accum:c}}function Ng(e,t,n,r,i,a,o,s,c){let l={hasErrors:!1,hasWarnings:!1,messages:[]},u=t,d=n;if(r.length>0&&u.type===`solid`){if(d.type===`solid`)try{return{...gg(o(u.id,d.id),i),diagnostics:l}}catch(e){if(!Km(e))throw e}if(d.type===`compound`){let{shape:n,accum:a}=Mg(e,t,d.id,r,i,o);return{shape:n,evolution:{modified:a.combinedModified,generated:a.combinedGenerated,deleted:a.combinedDeleted},diagnostics:l}}}return{...kg(e,s(t,n,a),r,i,!1,t),diagnostics:l}}function Pg(e,t,n,r,i,a,o){return kg(e,_m(e,t,n,r,i),a,o,!0)}function Fg(e,t,n,r,i,a,o){return kg(e,vm(e,t,n*180/Math.PI,a,o),r,i,!0)}function Ig(e,t,n,r,i,a){return kg(e,ym(e,t,n,r),i,a,!0)}function Lg(e,t,n,r,i,a){return kg(e,bm(e,t,n,r),i,a,!0)}function Rg(e,t,n,r,i,a,o){return kg(e,xm(e,t,n,r,i),a,o,!0)}function zg(e,t,n,r,i,a){return Ng(e,t,n,r,i,a,(t,n)=>e.fuseWithEvolution(t,n),(t,n,r)=>Ym(e,t,n,r),`fuseWithHistory`)}function Bg(e,t,n,r,i,a){return Ng(e,t,n,r,i,a,(t,n)=>e.cutWithEvolution(t,n),(t,n,r)=>Xm(e,t,n,r),`cutWithHistory`)}function Vg(e,t,n,r,i,a){return Ng(e,t,n,r,i,a,(t,n)=>e.intersectWithEvolution(t,n),(t,n,r)=>Zm(e,t,n,r),`intersectWithHistory`)}function Hg(e,t,n,r,i,a){return kg(e,Qh(e,t,n,r),i,a,!1,t)}function Ug(e,t,n,r,i,a){return kg(e,$h(e,t,n,r),i,a,!1,t)}function Wg(e,t,n,r,i,a,o){return kg(e,ag(e,t,n,r,o),i,a,!1,t)}function Gg(e,t,n,r,i){return kg(e,og(e,t,n),r,i,!1,t)}function Kg(e,t,n,r,i,a){return kg(e,sg(e,t,n,a),r,i,!1,t)}function qg(e,t,n,r,i,a,o,s){return kg(e,lg(e,t,n,r,i,a),o,s,!1,t)}function Jg(e,t,n,r,i){return kg(e,km(e,t,n),r,i,!0)}function Yg(e,t){let n=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];for(let e of t)n=$f(e.type===`translate`?Jf(e.x,e.y,e.z):Yf(e.angle,e.axis,e.center),n);return{handle:n,dispose:()=>{}}}function Xg(e){return{translateWithHistory:(t,n,r,i,a,o)=>Pg(e,t,n,r,i,a,o),rotateWithHistory:(t,n,r,i,a,o)=>Fg(e,t,n,r,i,a,o),mirrorWithHistory:(t,n,r,i,a)=>Ig(e,t,n,r,i,a),scaleWithHistory:(t,n,r,i,a)=>Lg(e,t,n,r,i,a),generalTransformWithHistory:(t,n,r,i,a,o)=>Rg(e,t,n,r,i,a,o),fuseWithHistory:(t,n,r,i,a)=>zg(e,t,n,r,i,a),cutWithHistory:(t,n,r,i,a)=>Bg(e,t,n,r,i,a),intersectWithHistory:(t,n,r,i,a)=>Vg(e,t,n,r,i,a),filletWithHistory:(t,n,r,i,a)=>Hg(e,t,n,r,i,a),chamferWithHistory:(t,n,r,i,a)=>Ug(e,t,n,r,i,a),shellWithHistory:(t,n,r,i,a,o)=>Wg(e,t,n,r,i,a,o),thickenWithHistory:(t,n,r,i)=>Gg(e,t,n,r,i),offsetWithHistory:(t,n,r,i,a)=>Kg(e,t,n,r,i,a),draftWithHistory:(t,n,r,i,a,o,s)=>qg(e,t,n,r,i,up(n,a),o,s),applyComposedTransformWithHistory:(t,n,r,i)=>Jg(e,t,n,r,i),composeTransform:t=>Yg(e,t)}}function Zg(e,t,n){let r=R(t),i=t,a=n.tolerance||.01,o=n.angularTolerance>0?n.angularTolerance:void 0,s;if(i.type===`solid`)s=e_(e,r,a,!!n.includeUVs,o);else if(i.type===`face`)s=a_(e,r,a,0,o);else throw Error(`brepkit: cannot mesh shape of type '${i.type}'`);return n.skipNormals&&(s.normals=new Float32Array),n.includeUVs||(s.uvs=new Float32Array),s}function Qg(e,n,r,i){i>0&&ap(`mesh-edges-angular`,`meshEdges angularTolerance is not supported; only linear deflection is used.`);let a=n;if(a.type!==`solid`)return{lines:new Float32Array,edgeGroups:[]};let o=e.meshEdgesAll(a.id,r),s=o.positions,c=o.offsets,l=o.edgeCount,u=[];for(let e=0;e<l;e++){let n=t(c,e),r=((e+1<l?t(c,e+1):s.length)-n)/3;u.push({start:n/3,count:r,edgeHash:e})}return{lines:new Float32Array(s),edgeGroups:u}}function $g(e,t){return!1}function e_(e,t,n,r,i){try{return t_(e,t,n,r,i)}catch(r){return console.warn(`brepkit: tessellateSolidGrouped failed (solidId=${t}), falling back to per-face:`,r),i_(e,t,n,i)}}function t_(e,t,n,r,i){return typeof e.tessellateSolidGroupedBinary==`function`?n_(e,t,n,r,i,e.tessellateSolidGroupedBinary(t,n,i)):r_(e,t,n,r,i)}function n_(e,n,r,i,a,o){let s=o.positions,c=o.normals,l=o.indices,u=o.faceOffsets,d=z(e.getSolidFaces(n)),f=u.length-1;if(f!==d.length)throw Error(`faceOffsets/faceIds length mismatch: ${f} groups vs ${d.length} faces`);let p=[];for(let e=0;e<u.length-1;e++){let n=t(u,e),r=t(u,e+1)-n;r!==0&&p.push({start:n,count:r,faceHash:d[e]??0})}let m=new Float32Array;if(i){let t=s.length/3*2;try{let i=e.tessellateSolidUV(n,r,a),o=JSON.parse(i);m=o.uvs.length===t?new Float32Array(o.uvs):new Float32Array(t)}catch{m=new Float32Array(t)}}return{vertices:s,normals:c,triangles:l,uvs:m,faceGroups:p}}function r_(e,n,r,i,a){let o=e.tessellateSolidGrouped(n,r,a),s=JSON.parse(o),c=z(e.getSolidFaces(n)),l=s.faceOffsets.length-1;if(l!==c.length)throw Error(`faceOffsets/faceIds length mismatch: ${l} groups vs ${c.length} faces`);let u=[];for(let e=0;e<s.faceOffsets.length-1;e++){let n=t(s.faceOffsets,e),r=t(s.faceOffsets,e+1)-n;r!==0&&u.push({start:n,count:r,faceHash:c[e]??0})}let d=new Float32Array;if(i){let t=s.positions.length/3*2;try{let i=e.tessellateSolidUV(n,r,a),o=JSON.parse(i);d=o.uvs.length===t?new Float32Array(o.uvs):new Float32Array(t)}catch{d=new Float32Array(t)}}return{vertices:new Float32Array(s.positions),normals:new Float32Array(s.normals),triangles:new Uint32Array(s.indices),uvs:d,faceGroups:u}}function i_(e,t,n,r){let i=z(e.getSolidFaces(t)),a=[],o=[],s=[],c=[],l=[],u=0;for(let t of i)try{let i=e.tessellateFace(t,n,r),d=i.positions,f=i.normals,p=i.indices,m=d.length/3;if(m===0)continue;let h=s.length;for(let e of d)a.push(e);for(let e of f)o.push(e);for(let e of p)s.push(e+u);for(let e=0;e<m;e++)c.push(0,0);l.push({start:h,count:p.length,faceHash:t}),u+=m}catch(e){console.warn(`brepkit: face tessellation failed (faceId=${t}):`,e)}return{vertices:new Float32Array(a),normals:new Float32Array(o),triangles:new Uint32Array(s),uvs:new Float32Array(c),faceGroups:l}}function a_(e,t,n,r,i){let a=e.tessellateFace(t,n,i),o=a.positions,s=a.normals,c=a.indices,l=o.length/3,u=[];for(let e=0;e<l;e++)u.push(0,0);return{vertices:new Float32Array(o),normals:new Float32Array(s),triangles:new Uint32Array(c),uvs:new Float32Array(u),faceGroups:[{start:0,count:c.length,faceHash:r}]}}function o_(e){return{mesh:(t,n)=>Zg(e,t,n),meshEdges:(t,n,r)=>Qg(e,t,n,r),hasTriangulation:t=>$g(e,t),meshShape:(e,t,n)=>{}}}function s_(e,t){if(t.length===0)return``;let n=[];for(let r of t){let t=Gf(e,r,`exportSTEP`);for(let r of t){let t=e.exportStep(r);n.push(new TextDecoder().decode(t))}}return n.join(`
7
+ `).buffer}function xr(e,t){return e.toBREP(E(t))}function Sr(e,t){return D(e,e.fromBREP(t))}function Cr(e,t,n){let r=e.xcafNewDocument();for(let t of n){let n=e.xcafAddShape(r,E(t.shape));if(t.name&&e.xcafSetName(r,n,t.name),t.color){let[i,a,o]=t.color;e.xcafSetColor(r,n,i/255,a/255,o/255)}}return T(`compound`,r)}function wr(e,t,n){let r=E(t),i=e.xcafGetRootLabels(r),a=(()=>{try{return i.size()>0}finally{i.delete()}})();try{return a?e.xcafExportSTEP(r):``}finally{e.xcafClose(r)}}function Tr(e,t,n,r){if(n.length===0)return``;let i=Cr(e,t,n.map(e=>({shape:e.shape,name:e.name??``,color:e.color})));try{return wr(e,i)}finally{i.delete()}}function Er(e,t,n,r){return T(`vertex`,e.makeVertex(t,n,r))}function Dr(e,t){throw De(t)?Error(`occt-wasm: makeEdge from curve handle is not implemented`):Error(`occt-wasm: makeEdge is not implemented`)}function Or(e,t,n){let r=ke(t,n.map(E));try{return T(`wire`,e.makeWire(r))}finally{r.delete()}}function kr(e,t,n){let r=[];for(let t of n){let n=e.getSubShapes(E(t),`edge`);try{let e=n.size();for(let t=0;t<e;t++)r.push(n.get(t))}finally{n.delete()}}let i=ke(t,r);try{return T(`wire`,e.makeWire(i))}finally{i.delete()}}function Ar(e,t,n){return T(`face`,e.makeFace(E(t)))}function jr(e,t,n){return T(`edge`,e.makeLineEdge(t[0],t[1],t[2],n[0],n[1],n[2]))}function Mr(e,t,n,r){return T(`edge`,e.makeCircleEdge(t[0],t[1],t[2],n[0],n[1],n[2],r))}function Nr(e,t,n,r,i,a){return T(`edge`,e.makeCircleArc(t[0],t[1],t[2],n[0],n[1],n[2],r,i,a))}function Pr(e,t,n,r){return T(`edge`,e.makeArcEdge(t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]))}function Fr(e,t,n,r,i){return T(`edge`,e.makeEllipseEdge(t[0],t[1],t[2],n[0],n[1],n[2],r,i))}function Ir(e,t,n,r,i,a,o){return T(`edge`,e.makeEllipseArc(t[0],t[1],t[2],n[0],n[1],n[2],r,i,a,o))}function Lr(e,t,n){let r=[];for(let e of n)r.push(e[0],e[1],e[2]);let i=je(t,r);try{return T(`edge`,e.makeBezierEdge(i))}finally{i.delete()}}function Rr(e,t,n,r){let[i,a,o]=t,[s,c,l]=n,[u,d,f]=r;return T(`edge`,e.makeTangentArc(i,a,o,s,c,l,u,d,f))}function zr(e,t,n,r,i,a){let o=i?i[0]:0,s=i?i[1]:0,c=i?i[2]:0,l=a?a[0]:0,u=a?a[1]:0,d=a?a[2]:1,f=e.makeHelixWire(o,s,c,l,u,d,t,n,r);return e.buildCurves3d(f),T(`wire`,f)}function Br(e,t,n){let r=ke(t,n.map(E));try{return T(`compound`,e.makeCompound(r))}finally{r.delete()}}function Vr(e,t){return T(`solid`,e.solidFromShell(E(t)))}function Hr(e,t,n,r,i){let a=[];for(let[t,i,o]of r){let r=n[t],s=n[i],c=n[o];!r||!s||!c||a.push(e.buildTriFace(r.x,r.y,r.z,s.x,s.y,s.z,c.x,c.y,c.z))}let o=ke(t,a);try{let t=e.sewAndSolidify(o,i);return t=e.fixFaceOrientations(t),D(e,t)}finally{o.delete()}}function Ur(e,t){return T(`face`,e.makeNonPlanarFace(E(t)))}function Wr(e,t,n,r){let i=ke(t,r.map(E));try{return T(`face`,e.addHolesInFace(E(n),i))}finally{i.delete()}}function Gr(e,t,n){let r=e.getSubShapes(E(n),`wire`),i=(()=>{try{return r.size()-1}finally{r.delete()}})(),a=[];for(let e=0;e<i;e++)a.push(e);let o=Ae(t,a);try{return T(`face`,e.removeHolesFromFace(E(n),o))}finally{o.delete()}}function Kr(e,t,n){let r=E(t);return T(`face`,e.makeFaceOnSurface(r,E(n)))}function qr(e,t,n,r,i){let a=new t.VectorDouble;for(let[e,t,r]of n)a.push_back(e),a.push_back(t),a.push_back(r);try{return T(`face`,e.bsplineSurface(a,r,i))}finally{a.delete()}}function Jr(e,t,n,r,i){let a=[];for(let t=0;t<r-1;t++)for(let r=0;r<i-1;r++){let o=t*i+r,s=(t+1)*i+r,c=t*i+(r+1),l=(t+1)*i+(r+1),u=n[o],d=n[s],f=n[c],p=n[l];u&&d&&f&&a.push(e.buildTriFace(u[0],u[1],u[2],d[0],d[1],d[2],f[0],f[1],f[2])),d&&p&&f&&a.push(e.buildTriFace(d[0],d[1],d[2],p[0],p[1],p[2],f[0],f[1],f[2]))}let o=ke(t,a);try{return D(e,e.sewAndSolidify(o,.001))}finally{o.delete()}}function Yr(e,t,n,r){let i=e.buildTriFace(t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]);return i===0?null:T(`face`,i)}function Xr(e,t,n,r){let i=ke(t,n.map(E));try{let t=e.sewAndSolidify(i,r);return t=e.fixFaceOrientations(t),T(`solid`,t)}finally{i.delete()}}function Zr(e,t,n){return{x:e,y:t,z:n,__type:`point3d`,delete:Ee}}function Qr(e,t,n){return{x:e,y:t,z:n,__type:`direction3d`,delete:Ee}}function $r(e,t,n){return{x:e,y:t,z:n,__type:`vector3d`,delete:Ee}}function ei(e,t,n,r,i,a){return{origin:{x:e,y:t,z:n},direction:{x:r,y:i,z:a},__type:`axis1`,delete:Ee}}function ti(e,t,n,r,i,a,o,s,c){return{origin:{x:e,y:t,z:n},zDir:{x:r,y:i,z:a},xDir:o===void 0?void 0:{x:o,y:s,z:c},__type:`axis2`,delete:Ee}}function ni(e,t,n,r,i,a,o,s,c){return{origin:{x:e,y:t,z:n},zDir:{x:r,y:i,z:a},xDir:o===void 0?void 0:{x:o,y:s,z:c},__type:`axis3`,delete:Ee}}function ri(e){return e}function ii(e){return e}function ai(e,t){return{x:e,y:t}}function oi(e,t){let n=Math.sqrt(e*e+t*t);if(n<1e-15)throw Error(`occt-wasm: createDirection2d called with zero-length vector`);return{x:e/n,y:t/n}}function si(e,t){return{x:e,y:t}}function ci(e,t,n,r){return{px:e,py:t,dx:n,dy:r,delete(){}}}function li(e){return e}function ui(e,t,n,r){return ii(x(e,t,n,r))}function di(e,t,n,r){return ii(S(e,t,n,r))}function fi(e,t,n,r,i,a){let o=2*(e*(r-a)+n*(a-t)+i*(t-r));if(Math.abs(o)<1e-12)return ii(x(e,t,i,a));let s=((e*e+t*t)*(r-a)+(n*n+r*r)*(a-t)+(i*i+a*a)*(t-r))/o,c=((e*e+t*t)*(i-n)+(n*n+r*r)*(e-i)+(i*i+a*a)*(n-e))/o,l=Math.sqrt((e-s)**2+(t-c)**2),u=Math.atan2(t-c,e-s),d=Math.atan2(r-c,n-s),f=Math.atan2(a-c,i-s),p=d-u;p<0&&(p+=2*Math.PI);let m=f-u;m<0&&(m+=2*Math.PI);let h=p<m,g=S(s,c,l,h);if(!h){let e=-u,t=-f;return t<e-1e-9&&(t+=2*Math.PI),ii({__bk2d:`trimmed`,basis:g,tStart:e,tEnd:t})}let _=f;return _<u-1e-9&&(_+=2*Math.PI),ii({__bk2d:`trimmed`,basis:g,tStart:u,tEnd:_})}function pi(e,t,n,r,i,a){let o=Math.sqrt(n*n+r*r),s=o>0?n/o:0,c=o>0?r/o:0,l=e-i,u=t-a,d=2*(u*s-l*c);if(Math.abs(d)<1e-12)return ii(x(e,t,i,a));let f=-(l*l+u*u)/d,p=e-f*c,m=t+f*s,h=Math.abs(f),g=Math.atan2(t-m,e-p),_=Math.atan2(a-m,i-p),v=-(t-m)/h,y=(e-p)/h,b=v*s+y*c>0,C=S(p,m,h,b);if(!b){let e=-g,t=-_;return t<e-1e-9&&(t+=2*Math.PI),ii({__bk2d:`trimmed`,basis:C,tStart:e,tEnd:t})}let w=_;return w<g-1e-9&&(w+=2*Math.PI),ii({__bk2d:`trimmed`,basis:C,tStart:g,tEnd:w})}function mi(e,t,n,r,i,a,o){return ii(C(e,t,n,r,i??1,a??0,o??!0))}function hi(e,t,n,r,i,a,o,s,c){return ii({...C(e,t,n,r,o??1,s??0,c??!0),__bk2d:`ellipse`,startAngle:i,endAngle:a})}function gi(e){return ii(w(e))}function _i(e,t){let n=e,r=n.length,i=Math.max(1,Math.min(t?.degMax??3,r-1)),a=[0],o=[i+1],s=r-i-1;for(let e=1;e<=s;e++)a.push(e/(s+1)),o.push(1);return a.push(1),o.push(i+1),ii({__bk2d:`bspline`,poles:n,knots:a,multiplicities:o,degree:i,isPeriodic:!1})}function vi(e,t){return _(ri(e),t)}function yi(e,t){return{point:_(ri(e),t),tangent:v(ri(e),t)}}function bi(e){return y(ri(e))}function xi(e){let t=ri(e);for(;t.__bk2d===`trimmed`&&t.basis;)t=t.basis;return b(t)}function Si(e,t,n){return ii({__bk2d:`trimmed`,basis:ri(e),tStart:t,tEnd:n})}function Ci(e){return ii(JSON.parse(JSON.stringify(ri(e))))}function wi(e,t){let n=ri(e),r=y(n),i=[];for(let e=0;e<=20;e++){let a=r.first+(r.last-r.first)*e/20,[o,s]=_(n,a),[c,l]=v(n,a),u=Math.sqrt(c*c+l*l)||1;i.push([o-l/u*t,s+c/u*t])}return ii(w(i.length<=25?i:i.filter((e,t)=>t%2==0||t===i.length-1)))}function Ti(e,t,n){return ii(ee(ri(e),t,n))}function Ei(e,t,n,r){return ii(te(ri(e),t,n,r))}function Di(e,t,n,r){return ii(ne(ri(e),t,n,r))}function Oi(e,t,n){return ii(re(ri(e),t,n))}function ki(e,t,n,r,i){return ii(ie(ri(e),t,n,r,i))}function Ai(e,t,n,r,i,a){let o=Math.sqrt(r*r+i*i);if(o<1e-15)return e;let s=-i/o,c=r/o,l=a-1,u=1+l*s*s,d=l*s*c,f=l*c*s,p=1+l*c*c,m=t-u*t-d*n,h=n-f*t-p*n,g=ri(e),v=y(g),b=[];for(let e=0;e<=20;e++){let[t,n]=_(g,v.first+(v.last-v.first)*e/20);b.push([u*t+d*n+m,f*t+p*n+h])}return ii(w(b))}function ji(e,t,n,r,i,a){return Ai(e,t,n,r,i,a)}function Mi(){return{type:`identity2d`,delete(){}}}function Ni(e,t,n,r,i){return{type:`affinity2d`,axOriginX:e,axOriginY:t,axDirX:n,axDirY:r,ratio:i,delete(){}}}function Pi(e,t){return{type:`translate2d`,dx:e,dy:t,delete(){}}}function Fi(e,t,n,r,i,a,o){return{type:`mirror2d`,cx:e,cy:t,mode:n,originX:r,originY:i,dirX:a,dirY:o,delete(){}}}function Ii(e,t,n){return{type:`rotate2d`,angle:e,cx:t,cy:n,delete(){}}}function Li(e,t,n){return{type:`scale2d`,sx:e,sy:e,cx:t,cy:n,delete(){}}}function Ri(e,t,n){let r=e;r.dx=(Number(r.dx)||0)+t,r.dy=(Number(r.dy)||0)+n}function zi(e,t){let n=e,r=t;n.dx=(Number(n.dx)||0)+(Number(r.dx)||0),n.dy=(Number(n.dy)||0)+(Number(r.dy)||0),r.type===`scale2d`&&(n.type=`scale2d`,n.sx=r.sx,n.sy=r.sy)}function Bi(e,t){let n=t;return n.type===`translate2d`?Ti(e,Number(n.dx)||0,Number(n.dy)||0):n.type===`rotate2d`?Ei(e,Number(n.angle)||0,Number(n.cx)||0,Number(n.cy)||0):n.type===`scale2d`?Di(e,Number(n.sx)||1,Number(n.cx)||0,Number(n.cy)||0):n.type===`mirror2d`?Oi(e,Number(n.ox)||0,Number(n.oy)||0):n.type===`affinity2d`?Ai(e,Number(n.axOriginX)||0,Number(n.axOriginY)||0,Number(n.axDirX)||0,Number(n.axDirY)||0,Number(n.ratio)||1):Number(n.dx)||Number(n.dy)?Ti(e,Number(n.dx)||0,Number(n.dy)||0):e}function Vi(e,t,n){let r=ae(ri(e),ri(t),n);return{points:r.points,segments:r.segments.map(e=>ii(e))}}function Hi(e,t,n){let r=ri(e),i=y(r),a=(e,r,i)=>{if(e.__bk2d===`line`){let a=(t-e.ox)*e.dx+(n-e.oy)*e.dy,o=Math.max(r,Math.min(i,a)),[s,c]=_(e,o);return{param:o,distance:Math.sqrt((s-t)**2+(c-n)**2)}}let a=r,o=1/0;for(let s=0;s<=200;s++){let c=r+(i-r)*s/200,[l,u]=_(e,c),d=(l-t)**2+(u-n)**2;d<o&&(o=d,a=c)}return{param:a,distance:Math.sqrt(o)}};if(r.__bk2d===`trimmed`&&r.basis){let e=r.tStart,t=r.tEnd,n=a(r.basis,e,t);if(!n)return null;let i=t-e,o=i>1e-15?(n.param-e)/i:0;return{param:Math.max(0,Math.min(1,o)),distance:n.distance}}return a(r,i.first,i.last)}function Ui(e,t,n,r,i,a){let o=1/0;for(let s=0;s<=20;s++){let c=n+(r-n)*(s/20),[l,u]=_(ri(e),c);for(let e=0;e<=20;e++){let n=i+(a-i)*(e/20),[r,s]=_(ri(t),n),c=Math.sqrt((r-l)**2+(s-u)**2);c<o&&(o=c)}}return o}function Wi(e,t){let n=ri(e),r=y(n),i=Math.min(Math.max(t+1,10),100),a=[];for(let e=0;e<i;e++){let t=r.first+(r.last-r.first)*e/(i-1);a.push(_(n,t))}let o=Math.min(3,i-1),s=a.length,c=[],l=[],u=s-o-1;c.push(0),l.push(o+1);for(let e=1;e<=u;e++)c.push(e/(u+1)),l.push(1);return c.push(1),l.push(o+1),ii({__bk2d:`bspline`,poles:a,knots:c,multiplicities:l,degree:o,isPeriodic:!1})}function Gi(e){let t=ri(e);for(;t.__bk2d===`trimmed`&&t.basis;)t=t.basis;if(t.__bk2d!==`bspline`)return[e];let n=t.poles,r=t.degree,i=[];for(let e=0;e<t.knots.length;e++)for(let n=0;n<t.multiplicities[e];n++)i.push(t.knots[e]);let a=n.length-1+r+1;if(r<1||i.length!==a+1)return[ii(w(n))];let o=e=>[e[0],e[1]],s=[],c=r,l=r+1,u=[];for(let e=0;e<=r;e++)u[e]=o(n[e]);let d=[];for(;l<a;){let e=l;for(;l<a&&i[l+1]===i[l];)l++;let t=l-e+1;if(t<r){let e=i[l]-i[c],n=[];for(let a=r;a>t;a--)n[a-t-1]=e/(i[c+a]-i[c]);let s=r-t;for(let e=1;e<=s;e++){let i=s-e,c=t+e;for(let e=r;e>=c;e--){let t=n[e-c],r=u[e],i=u[e-1];u[e]=[t*r[0]+(1-t)*i[0],t*r[1]+(1-t)*i[1]]}l<a&&(d[i]=o(u[r]))}}if(s.push(u),l<a){for(let e=r-t;e<=r;e++)d[e]=o(n[l-r+e]);u=d,d=[],c=l,l++}}return s.map(e=>ii(w(e)))}function Ki(){return ge()}function qi(e,t,n){_e(e,ri(t),n)}function Ji(e){return{xMin:e.xMin,yMin:e.yMin,xMax:e.xMax,yMax:e.yMax}}function Yi(e,t){e.xMin=Math.min(e.xMin,t.xMin),e.yMin=Math.min(e.yMin,t.yMin),e.xMax=Math.max(e.xMax,t.xMax),e.yMax=Math.max(e.yMax,t.yMax)}function Xi(e,t){return e.xMax<t.xMin||e.xMin>t.xMax||e.yMax<t.yMin||e.yMin>t.yMax}function Zi(e,t,n){return t<e.xMin||t>e.xMax||n<e.yMin||n>e.yMax}function Qi(e){let t=ri(e);for(;t.__bk2d===`trimmed`&&t.basis;)t=t.basis;return t.__bk2d===`circle`?{cx:t.cx,cy:t.cy,radius:t.radius,isDirect:t.sense!==!1}:null}function $i(e){let t=ri(e);for(;t.__bk2d===`trimmed`&&t.basis;)t=t.basis;return t.__bk2d===`ellipse`?{majorRadius:t.majorRadius,minorRadius:t.minorRadius,xAxisAngle:t.xDirAngle??0,isDirect:t.sense!==!1}:null}function ea(e){let t=ri(e);for(;t.__bk2d===`trimmed`&&t.basis;)t=t.basis;return t.__bk2d===`bezier`&&Array.isArray(t.poles)?t.poles:null}function ta(e){let t=ri(e);for(;t.__bk2d===`trimmed`&&t.basis;)t=t.basis;return t.__bk2d===`bezier`&&Array.isArray(t.poles)?t.poles.length-1:null}function na(e){return me(ri(e))}function ra(e){return ii(he(e))}function ia(e,t){let n=y(ri(e)),r=[n.first,...t.sort((e,t)=>e-t),n.last],i=[];for(let t=0;t<r.length-1;t++){let a=r[t]??n.first,o=r[t+1]??n.last;i.push(Si(e,a,o))}return i}function aa(e,t,n,r,i,a){let o=ri(n),[s,c,l]=r,[u,d,f]=i,[p,m,h]=a,g=d*h-f*m,v=f*p-u*h,b=u*m-d*p,x=(e,t)=>[s+e*p+t*g,c+e*m+t*v,l+e*h+t*b],S=o.__bk2d;if(S===`line`){let t=y(o),[n,r]=_(o,t.first),[i,a]=_(o,t.last),s=x(n,r),c=x(i,a);return T(`edge`,e.makeLineEdge(s[0],s[1],s[2],c[0],c[1],c[2]))}if(S===`trimmed`){let t=o;if(t.basis&&t.basis.__bk2d===`line`){let[t,n]=_(o,0),[r,i]=_(o,1),a=x(t,n),s=x(r,i);return T(`edge`,e.makeLineEdge(a[0],a[1],a[2],s[0],s[1],s[2]))}if(t.basis&&t.basis.__bk2d===`circle`){let t=y(o),[n,r]=_(o,t.first),[i,a]=_(o,(t.first+t.last)/2),[s,c]=_(o,t.last),l=x(n,r),u=x(i,a),d=x(s,c);return T(`edge`,e.makeArcEdge(l[0],l[1],l[2],u[0],u[1],u[2],d[0],d[1],d[2]))}}if(S===`circle`){let t=o;if(t.cx!==void 0&&t.radius!==void 0){let[n,r,i]=x(t.cx,t.cy);return T(`edge`,e.makeCircleEdge(n,r,i,u,d,f,t.radius))}let n=y(o),[r,i]=_(o,n.first),[a,s]=_(o,(n.first+n.last)/2),[c,l]=_(o,n.last),p=x(r,i),m=x(a,s),h=x(c,l);return T(`edge`,e.makeArcEdge(p[0],p[1],p[2],m[0],m[1],m[2],h[0],h[1],h[2]))}let C=y(o),w=(C.last-C.first)/24,ee=[];for(let e=0;e<=24;e++){let[t,n]=_(o,C.first+e*w),[r,i,a]=x(t,n);ee.push(r,i,a)}let te=new t.VectorDouble;for(let e of ee)te.push_back(e);try{return T(`edge`,e.interpolatePoints(te,!1))}finally{te.delete()}}function oa(e,t,n,r){let i=ri(n),a=y(i),o=E(r),s=new t.VectorDouble;for(let t=0;t<=30;t++){let[n,r]=_(i,a.first+(a.last-a.first)*t/30),c=e.pointOnSurface(o,n,r);try{s.push_back(c.get(0)),s.push_back(c.get(1)),s.push_back(c.get(2))}finally{c.delete()}}try{return T(`edge`,e.interpolatePoints(s,!1))}finally{s.delete()}}function sa(e){return e}function ca(){return ii(x(0,0,1,0))}function la(e,t){e.buildCurves3d(E(t))}function ua(e,t,n,r){return T(`wire`,e.fixWireOnFace(E(t),E(n),r))}function da(e){try{let t=Me(e.modified),n=Me(e.generated),r=Me(e.deleted),i=e=>{let t=new Map,n=0;for(;n+1<e.length;){let r=e[n]??0,i=e[n+1]??0;n+=2;let a=[];for(let t=0;t<i&&n<e.length;t++,n++)a.push(e[n]??0);t.set(r,a)}return t};return{id:e.resultId,evolution:{modified:i(t),generated:i(n),deleted:new Set(r)}}}finally{e.delete()}}function fa(e,t,n,r,i,a,o,s){let c=Ae(t,o);try{let{id:t,evolution:o}=da(e.translateWithHistory(E(n),r,i,a,c,s));return{shape:D(e,t),evolution:o}}finally{c.delete()}}function pa(e,t,n,r,i,a,o,s){let c=o??[0,0,1],l=s??[0,0,0],u=Ae(t,i);try{let{id:t,evolution:i}=da(e.rotateWithHistory(E(n),l[0],l[1],l[2],c[0],c[1],c[2],r,u,a));return{shape:D(e,t),evolution:i}}finally{u.delete()}}function ma(e,t,n,r,i,a,o){let s=Ae(t,a);try{let{id:t,evolution:a}=da(e.mirrorWithHistory(E(n),r[0],r[1],r[2],i[0],i[1],i[2],s,o));return{shape:D(e,t),evolution:a}}finally{s.delete()}}function ha(e,t,n,r,i,a,o){let s=Ae(t,a);try{let{id:t,evolution:a}=da(e.scaleWithHistory(E(n),r[0],r[1],r[2],i,s,o));return{shape:D(e,t),evolution:a}}finally{s.delete()}}function ga(e,t,n,r,i,a){let o=e(t,n,r,i),s=new Map;for(let e of a)s.set(e,[e]);return{shape:o,evolution:{modified:s,generated:new Map,deleted:new Set}}}function _a(e,t,n,r,i,a,o){let s=Ae(t,i);try{let{id:t,evolution:i}=da(e.fuseWithHistory(E(n),E(r),s,a));return{shape:D(e,t),evolution:i,diagnostics:{hasErrors:!1,hasWarnings:!1,messages:[]}}}finally{s.delete()}}function va(e,t,n,r,i,a,o){let s=Ae(t,i);try{let{id:t,evolution:i}=da(e.cutWithHistory(E(n),Re(e,r),s,a));return{shape:D(e,t),evolution:i,diagnostics:{hasErrors:!1,hasWarnings:!1,messages:[]}}}finally{s.delete()}}function ya(e,t,n,r,i,a,o){let s=Ae(t,i);try{let{id:t,evolution:i}=da(e.intersectWithHistory(E(n),Re(e,r),s,a));return{shape:D(e,t),evolution:i,diagnostics:{hasErrors:!1,hasWarnings:!1,messages:[]}}}finally{s.delete()}}function ba(e,t,n,r,i,a,o){let s=Pe(r,i),c=ke(t,r.map(E)),l=Ae(t,a);try{let{id:t,evolution:r}=da(e.filletWithHistory(E(n),c,s,l,o));return{shape:D(e,t),evolution:r}}finally{c.delete(),l.delete()}}function xa(e,t,n,r,i,a,o){let s=Pe(r,i),c=ke(t,r.map(E)),l=Ae(t,a);try{let{id:t,evolution:r}=da(e.chamferWithHistory(E(n),c,s,l,o));return{shape:D(e,t),evolution:r}}finally{c.delete(),l.delete()}}function Sa(e,t,n,r,i,a,o,s){let c=ke(t,r.map(E)),l=Ae(t,a);try{let{id:t,evolution:r}=da(e.shellWithHistory(E(n),c,i,s??.001,l,o));return{shape:D(e,t),evolution:r}}finally{c.delete(),l.delete()}}function Ca(e,t,n,r,i,a){let o=Ae(t,i);try{let{id:t,evolution:i}=da(e.thickenWithHistory(E(n),r,.001,o,a));return{shape:D(e,t),evolution:i}}finally{o.delete()}}function wa(e,t,n,r,i,a,o){let s=Ae(t,i);try{let{id:t,evolution:i}=da(e.offsetWithHistory(E(n),r,o??1e-6,s,a));return{shape:D(e,t),evolution:i}}finally{s.delete()}}function Ta(e,t,n,r,i){let[a,o,s]=r,c=E(t);for(let t of n){let n=(typeof i==`number`?i:i(t))*Math.PI/180;c=e.draft(c,E(t),n,a,o,s)}return{shape:D(e,c),evolution:{modified:new Map,generated:new Map,deleted:new Set}}}function Ea(e,t,n,r,i,a,o){let s=e(r,i),c=t(s,`face`),l=new Map,u=Math.min(a.length,c.length);for(let e=0;e<u;e++){let t=c[e],r=a[e];t!==void 0&&r!==void 0&&l.set(r,[n(t,o)])}return{shape:s,evolution:{modified:l,generated:new Map,deleted:new Set}}}function Da(e,t,n,r){if(n.length<4)throw Error(`hullFromPoints: need at least 4 points`);let{points:i,faces:a}=g(n,r);if(a.length<4)throw Error(`hullFromPoints: degenerate hull (fewer than 4 faces)`);return Hr(e,t,[...i],[...a],r)}function Oa(e,t,n,r){let i=Math.max(r,1),a=[];for(let r of n){let n=e.tessellate(E(r),i,i*.5);try{let e=n.positionCount,r=n.getPositionsPtr()>>2;for(let n=0;n<e;n+=3)a.push({x:t.HEAPF32[r+n]??0,y:t.HEAPF32[r+n+1]??0,z:t.HEAPF32[r+n+2]??0})}finally{n.delete()}}return a}function ka(e,t,n,r){if(n.length===0)throw Error(`hull: no shapes provided`);let i=Oa(e,t,n,r);if(i.length<4)throw Error(`hull: fewer than 4 vertices extracted from input shapes`);return Da(e,t,i,r)}function Aa(e){throw Error(`occt-wasm: ${e} is not yet implemented`)}var ja=class e{oc;kernelId=`occt-wasm`;capabilities=r;Module;k;owner;constructor(e,t,n){this.Module=e,this.k=Ie(t,e),this.oc=Le(e,this.k),this.owner=n}static fromKernel(t){return new e(t.getRawModule(),t.getRawKernel(),t)}get retainedKernelOwner(){return this.owner}dispose(e){De(e)?this.k.release(e.id):typeof e.delete==`function`&&e.delete()}executeBatch(e){Aa(`executeBatch`)}checkpoint(){Aa(`checkpoint`)}checkpointCount(){Aa(`checkpointCount`)}restoreCheckpoint(e){Aa(`restoreCheckpoint`)}discardCheckpoint(e){Aa(`discardCheckpoint`)}makeBox(e,t,n){return Je(this.k,e,t,n)}makeCylinder(e,t,n,r){return Ye(this.k,e,t,n,r)}makeSphere(e,t){return Xe(this.k,e,t)}makeCone(e,t,n,r,i){return Ze(this.k,e,t,n,r,i)}makeTorus(e,t,n,r){return Qe(this.k,e,t,n,r)}makeEllipsoid(e,t,n){return $e(this.k,e,t,n)}makeBoxFromCorners(e,t){return et(this.k,e,t)}makeRectangle(e,t){return tt(this.k,e,t)}fuse(e,t,n){return ze(this.k,e,t,n)}cut(e,t,n){return Be(this.k,e,t,n)}intersect(e,t,n){return Ve(this.k,e,t,n)}section(e,t,n){return He(this.k,e,t,n)}fuseAll(e,t){return Ue(this.k,this.Module,e,t)}cutAll(e,t,n){return We(this.k,this.Module,e,t,n)}split(e,t){return Ge(this.k,this.Module,e,t)}checkBoolean(e,t,n){return Ke(this.k,e,t,n)}meshBoolean(e,t,n,r,i,a){return qe(e,t,n,r,i,a)}makeVertex(e,t,n){return Er(this.k,e,t,n)}makeEdge(e,t,n){return Dr(this.k,e)}makeWire(e){return Or(this.k,this.Module,e)}makeFace(e,t){return Ar(this.k,e,t)}makeLineEdge(e,t){return jr(this.k,e,t)}makeCircleEdge(e,t,n){return Mr(this.k,e,t,n)}makeCircleArc(e,t,n,r,i){return Nr(this.k,e,t,n,r,i)}makeArcEdge(e,t,n){return Pr(this.k,e,t,n)}makeEllipseEdge(e,t,n,r,i){return Fr(this.k,e,t,n,r)}makeEllipseArc(e,t,n,r,i,a,o){return Ir(this.k,e,t,n,r,i,a)}makeBezierEdge(e){return Lr(this.k,this.Module,e)}makeTangentArc(e,t,n){return Rr(this.k,e,t,n)}makeHelixWire(e,t,n,r,i,a){return zr(this.k,e,t,n,r,i)}makeWireFromMixed(e){return kr(this.k,this.Module,e)}makeCompound(e){return Br(this.k,this.Module,e)}solidFromShell(e){return Vr(this.k,e)}hull(e,t){return ka(this.k,this.Module,e,t)}hullFromPoints(e,t){return Da(this.k,this.Module,e,t)}buildSolidFromFaces(e,t,n){return Hr(this.k,this.Module,e,t,n)}makeNonPlanarFace(e){return Ur(this.k,e)}addHolesInFace(e,t){return Wr(this.k,this.Module,e,t)}removeHolesFromFace(e){return Gr(this.k,this.Module,e)}makeFaceOnSurface(e,t){return Kr(this.k,e,t)}bsplineSurface(e,t,n){return qr(this.k,this.Module,e,t,n)}triangulatedSurface(e,t,n){return Jr(this.k,this.Module,e,t,n)}buildTriFace(e,t,n){return Yr(this.k,e,t,n)}sewAndSolidify(e,t){return Xr(this.k,this.Module,e,t)}createPoint3d(e,t,n){return Zr(e,t,n)}createDirection3d(e,t,n){return Qr(e,t,n)}createVector3d(e,t,n){return $r(e,t,n)}createAxis1(e,t,n,r,i,a){return ei(e,t,n,r,i,a)}createAxis2(e,t,n,r,i,a,o,s,c){return ti(e,t,n,r,i,a,o,s,c)}createAxis3(e,t,n,r,i,a,o,s,c){return ni(e,t,n,r,i,a,o,s,c)}extrude(e,t,n){return Hn(this.k,e,t,n)}revolve(e,t,n){return Un(this.k,e,t,n)}loft(e,t,n,r){return Wn(this.k,this.Module,e,t,n,r)}sweep(e,t,n){return Gn(this.k,e,t,n)}simplePipe(e,t){return Kn(this.k,e,t)}helicalSweep(e,t,n,r,i,a){throw Error(`helicalSweep on occt-wasm requires profile positioning+orientation logic not yet implemented; brepkit has a native implementation`)}sweepWithOptions(e,t,n,r,i){Aa(`sweepWithOptions`)}sweepPipeShell(e,t,n){return qn(this.k,e,t,n)}loftAdvanced(e,t){return Jn(this.k,this.Module,e,t)}buildExtrusionLaw(e,t,n){return Yn(this.k,e,t,n)}revolveVec(e,t,n,r){return Xn(this.k,e,t,n,r)}draftPrism(e,t,n,r,i,a){return Zn(this.k,e,t,n,r,i,a)}fillet(e,t,n){return An(this.k,this.Module,e,t,n)}chamfer(e,t,n){return jn(this.k,this.Module,e,t,n)}chamferDistAngle(e,t,n,r){return Mn(this.k,this.Module,e,t,n,r)}shell(e,t,n,r){return Nn(this.k,this.Module,e,t,n,r)}thicken(e,t){return Pn(this.k,e,t)}offset(e,t,n){return Fn(this.k,e,t,n)}filletVariable(e,t){return In(this.k,e,t)}draft(e,t,n,r,i){return Ln(this.k,e,t,n,r,i)}defeature(e,t){return Rn(this.k,this.Module,e,t)}offsetWire2D(e,t,n){return zn(this.k,e,t,n)}simplify(e){return Bn(this.k,e)}reverseShape(e){return Vn(this.k,e)}composeTransform(e){return Qn(e)}transform(e,t){return $n(this.k,this.Module,e,t)}translate(e,t,n,r){return er(this.k,e,t,n,r)}rotate(e,t,n,r){return tr(this.k,e,t,n,r)}mirror(e,t,n){return nr(this.k,e,t,n)}scale(e,t,n){return rr(this.k,e,t,n)}generalTransform(e,t,n,r){return ir(this.k,this.Module,e,t,n,r)}generalTransformNonOrthogonal(e,t,n){return ir(this.k,this.Module,e,t,n,!1)}positionOnCurve(e,t,n){return ar(this.k,this.Module,e,t,n)}linearPattern(e,t,n,r){return or(this.k,e,t,n,r)}circularPattern(e,t,n,r,i){return sr(this.k,e,t,n,r,i)}transformBatch(e){return cr(this.k,e)}translateWithHistory(e,t,n,r,i,a){return fa(this.k,this.Module,e,t,n,r,i,a)}rotateWithHistory(e,t,n,r,i,a){return pa(this.k,this.Module,e,t,n,r,i,a)}mirrorWithHistory(e,t,n,r,i){return ma(this.k,this.Module,e,t,n,r,i)}scaleWithHistory(e,t,n,r,i){return ha(this.k,this.Module,e,t,n,r,i)}generalTransformWithHistory(e,t,n,r,i,a){return ga((e,t,n,r)=>this.generalTransform(e,t,n,r),e,t,n,r,i)}fuseWithHistory(e,t,n,r,i){return _a(this.k,this.Module,e,t,n,r,i)}cutWithHistory(e,t,n,r,i){return va(this.k,this.Module,e,t,n,r,i)}intersectWithHistory(e,t,n,r,i){return ya(this.k,this.Module,e,t,n,r,i)}filletWithHistory(e,t,n,r,i){return ba(this.k,this.Module,e,t,n,r,i)}chamferWithHistory(e,t,n,r,i){return xa(this.k,this.Module,e,t,n,r,i)}shellWithHistory(e,t,n,r,i,a){return Sa(this.k,this.Module,e,t,n,r,i,a)}thickenWithHistory(e,t,n,r){return Ca(this.k,this.Module,e,t,n,r)}offsetWithHistory(e,t,n,r,i){return wa(this.k,this.Module,e,t,n,r,i)}draftWithHistory(e,t,n,r,i,a,o){return Ta(this.k,e,t,n,i)}applyComposedTransformWithHistory(e,t,n,r){return Ea((e,t)=>this.transform(e,t),(e,t)=>this.iterShapes(e,t),(e,t)=>this.hashCode(e,t),e,t,n,r)}mesh(e,t){return Ct(this.k,this.Module,e,t)}meshEdges(e,t,n){return Tt(this.k,this.Module,e,t,n)}hasTriangulation(e){return Et(this.k,e)}meshShape(e,t,n){Dt(this.k,e,t,n)}exportSTEP(e){return dr(this.k,this.makeCompound.bind(this),e)}exportSTL(e,t,n,r){return fr(this.mesh.bind(this),e,t,n,r)}importSTEP(e){return pr(this.k,e)}importSTL(e){return mr(this.k,this.Module,e)}exportIGES(e){return hr(this.k,this.makeCompound.bind(this),e)}importIGES(e){return gr(this.k,e)}exportSTEPAssembly(e,t){return _r(this.k,this.Module,e,t)}export3MF(e,t){throw Error(`export3MF is only available with the brepkit kernel`)}exportGLB(e,t){return vr(this.mesh.bind(this),e,t)}exportOBJ(e,t){return yr(this.mesh.bind(this),e,t)}exportPLY(e,t){return br(this.mesh.bind(this),e,t)}import3MF(e){throw Error(`import3MF is only available with the brepkit kernel`)}importOBJ(e){throw Error(`importOBJ is only available with the brepkit kernel`)}importGLB(e){throw Error(`importGLB is only available with the brepkit kernel`)}toBREP(e){return xr(this.k,e)}fromBREP(e){return Sr(this.k,e)}createXCAFDocument(e){return Cr(this.k,this.Module,e)}writeXCAFToSTEP(e,t){return wr(this.k,e,t)}exportSTEPConfigured(e,t){return Tr(this.k,this.Module,e,t)}volume(e){return dn(this.k,e)}area(e){return fn(this.k,e)}length(e){return pn(this.k,e)}centerOfMass(e){return mn(this.k,e)}linearCenterOfMass(e){return hn(this.k,e)}boundingBox(e){return gn(this.k,e)}distance(e,t){return Sn(this.k,this.Module,e,t)}surfaceCurvature(e,t,n){return kn(this.k,e,t,n)}surfaceCenterOfMass(e){return _n(this.k,e)}measureBulk(e,t){return vn(this.k,e,t)}createDistanceQuery(e){return yn(this.k,e)}iterShapes(e,t){return nt(this.k,e,t)}iterShapeList(e,t){throw Error(`iterShapeList is not applicable to occt-wasm: the arena model has no TopTools_ListOfShape handles`)}shapeType(e){return rt(this.k,e)}isSame(e,t){return it(this.k,e,t)}isEqual(e,t){return at(this.k,e,t)}downcast(e,t){return ot(this.k,e,t)}hashCode(e,t){return st(this.k,e,t)}isNull(e){return ct(this.k,e)}shapeOrientation(e){return lt(this.k,e)}edgeToFaceMap(e){return ut(this.k,e)}sharedEdges(e,t){return dt(this.k,e,t)}adjacentFaces(e,t){return ft(this.k,e,t)}sew(e,t){return pt(this.k,this.Module,e,t)}curveType(e){return kt(this.k,e)}curveParameters(e){return At(this.k,e)}curvePointAtParam(e,t){return jt(this.k,e,t)}curveTangent(e,t){return Mt(this.k,e,t)}curveIsClosed(e){return Nt(this.k,e)}curveIsPeriodic(e){return Pt(this.k,e)}curvePeriod(e){return Ft(this.k,e)}interpolatePoints(e,t){return It(this.k,this.Module,e,t)}approximatePoints(e,t){return Lt(this.k,this.Module,e,t)}curveDegreeElevate(e,t){return Rt(this.k,e,t)}curveKnotInsert(e,t,n){return zt(this.k,e,t,n)}curveKnotRemove(e,t,n){return Bt(this.k,e,t,n)}curveSplit(e,t){return Vt(this.k,e,t)}getBezierPenultimatePole(e){return Ht(this.k,e)}createCurveAdaptor(e){Aa(`createCurveAdaptor`)}vertexPosition(e){return Wt(this.k,e)}surfaceType(e){return Gt(this.k,e)}uvBounds(e){return Kt(this.k,e)}outerWire(e){return qt(this.k,e)}surfaceNormal(e,t,n){return Jt(this.k,e,t,n)}pointOnSurface(e,t,n){return Yt(this.k,e,t,n)}uvFromPoint(e,t){return sn(this.k,e,t)}projectPointOnFace(e,t){return cn(this.k,e,t)}classifyPointOnFace(e,t,n,r){return ln(this.k,e,t,n,r)}classifyPointRobust(e,t,n){Aa(`classifyPointRobust`)}classifyPointWinding(e,t,n){Aa(`classifyPointWinding`)}approximateSurfaceLspia(e,t,n,r,i,a,o,s,c){Aa(`approximateSurfaceLspia`)}untrimFace(e,t,n){Aa(`untrimFace`)}getSurfaceCylinderData(e){return on(this.k,e)}getSurfaceAxis(e){return an(this.k,e)}reverseSurfaceU(e){Aa(`reverseSurfaceU`)}detectSmallFeatures(e,t,n){Aa(`detectSmallFeatures`)}recognizeFeatures(e,t){Aa(`recognizeFeatures`)}projectEdges(e,t,n,r){return un(this.k,this.Module,e,t,n,r)}isValid(e){return ht(this.k,e)}healSolid(e){return gt(this.k,e)}healFace(e){return _t(this.k,e)}healWire(e,t){return vt(this.k,e,t)}mergeCoincidentVertices(e,t){return yt(this.k,e,t)}removeDegenerateEdges(e,t){return bt(this.k,e,t)}fixFaceOrientations(e){return xt(this.k,e)}fixShape(e){return St(this.k,e)}fixSelfIntersection(e){Aa(`fixSelfIntersection`)}createPoint2d(e,t){return ai(e,t)}createDirection2d(e,t){return oi(e,t)}createVector2d(e,t){return si(e,t)}createAxis2d(e,t,n,r){return ci(e,t,n,r)}wrapCurve2dHandle(e){return li(e)}createCurve2dAdaptor(e){Aa(`createCurve2dAdaptor`)}makeLine2d(e,t,n,r){return ui(e,t,n,r)}makeCircle2d(e,t,n,r){return di(e,t,n,r)}makeArc2dThreePoints(e,t,n,r,i,a){return fi(e,t,n,r,i,a)}makeArc2dTangent(e,t,n,r,i,a){return pi(e,t,n,r,i,a)}makeEllipse2d(e,t,n,r,i,a,o){return mi(e,t,n,r,i,a,o)}makeEllipseArc2d(e,t,n,r,i,a,o,s,c){return hi(e,t,n,r,i,a,o,s,c)}makeBezier2d(e){return gi(e)}makeBSpline2d(e,t){return _i(e)}evaluateCurve2d(e,t){return vi(e,t)}evaluateCurve2dD1(e,t){return yi(e,t)}getCurve2dBounds(e){return bi(e)}getCurve2dType(e){return xi(e)}trimCurve2d(e,t,n){return Si(e,t,n)}reverseCurve2d(e){}copyCurve2d(e){return Ci(e)}offsetCurve2d(e,t){return wi(e,t)}translateCurve2d(e,t,n){return Ti(e,t,n)}rotateCurve2d(e,t,n,r){return Ei(e,t,n,r)}scaleCurve2d(e,t,n,r){return Di(e,t,n,r)}mirrorCurve2dAtPoint(e,t,n){return Oi(e,t,n)}mirrorCurve2dAcrossAxis(e,t,n,r,i){return ki(e,t,n,r,i)}affinityTransform2d(e,t,n,r,i,a){return ji(e,t,n,r,i,a)}createIdentityGTrsf2d(){return Mi()}createAffinityGTrsf2d(e,t,n,r,i){return Ni(e,t,n,r,i)}createTranslationGTrsf2d(e,t){return Pi(e,t)}createMirrorGTrsf2d(e,t,n,r,i,a,o){return Fi(e,t,n,r,i,a,o)}createRotationGTrsf2d(e,t,n){return Ii(e,t,n)}createScaleGTrsf2d(e,t,n){return Li(e,t,n)}setGTrsf2dTranslationPart(e,t,n){Ri(e,t,n)}multiplyGTrsf2d(e,t){zi(e,t)}transformCurve2dGeneral(e,t){return Bi(e,t)}intersectCurves2d(e,t,n){return Vi(e,t,n)}projectPointOnCurve2d(e,t,n){return Hi(e,t,n)}distanceBetweenCurves2d(e,t,n,r,i,a){return Ui(e,t,n,r,i,a)}approximateCurve2dAsBSpline(e,t,n,r){return Wi(e,r)}decomposeBSpline2dToBeziers(e){return Gi(e)}createBoundingBox2d(){return Ki()}addCurveToBBox2d(e,t,n){qi(e,t,n)}getBBox2dBounds(e){return Ji(e)}mergeBBox2d(e,t){Yi(e,t)}isBBox2dOut(e,t){return Xi(e,t)}isBBox2dOutPoint(e,t,n){return Zi(e,t,n)}getCurve2dCircleData(e){return Qi(e)}getCurve2dEllipseData(e){return $i(e)}getCurve2dBezierPoles(e){return ea(e)}getCurve2dBezierDegree(e){return ta(e)}getCurve2dBSplineData(e){Aa(`getCurve2dBSplineData`)}serializeCurve2d(e){return na(e)}deserializeCurve2d(e){return ra(e)}splitCurve2d(e,t){return ia(e,t)}liftCurve2dToPlane(e,t,n,r){return aa(this.k,this.Module,e,t,n,r)}buildEdgeOnSurface(e,t){return oa(this.k,this.Module,e,t)}extractSurfaceFromFace(e){return sa(e)}extractCurve2dFromEdge(e,t){return ca()}buildCurves3d(e){la(this.k,e)}fixWireOnFace(e,t,n){return ua(this.k,e,t,n)}fillSurface(e,t){Aa(`fillSurface`)}getNurbsCurveData(e){return Ut(this.k,e)}};function O(e){return{ok:!0,value:e}}function k(e){return{ok:!1,error:e}}var Ma=O(void 0);function Na(e){return e.ok}function A(e){return!e.ok}function Pa(e,t){return e.ok?O(t(e.value)):e}function Fa(e,t){return e.ok?e:k(t(e.error))}function Ia(e,t){return e.ok?t(e.value):e}var La=Ia;function Ra(e,t){return e.ok?e:t}function za(e,t){return e.ok?e:t(e.error)}function Ba(e,t){return e.ok?t.ok?O([e.value,t.value]):t:e}var Va=Qa;function Ha(e,t){return e.ok&&t(e.value),e}function Ua(e,t){return e.ok||t(e.error),e}function Wa(e){return e.ok?e.value:e}function Ga(e,t,n){return e.ok?O(t(e.value)):k(n(e.error))}function Ka(e,t){return e==null?k(t()):O(e)}function qa(e){if(typeof e==`object`&&e&&`kind`in e&&`code`in e&&`message`in e){let t=e;return`[${t.kind}] ${t.code}: ${t.message}`}return String(e)}function j(e){if(e.ok)return e.value;throw Error(`Called unwrap() on an Err: ${qa(e.error)}`)}function Ja(e,t){return e.ok?e.value:t}function Ya(e,t){return e.ok?e.value:t(e.error)}function Xa(e){if(!e.ok)return e.error;throw Error(`Called unwrapErr() on an Ok: ${String(e.value)}`)}function Za(e,t){return e.ok?t.ok(e.value):t.err(e.error)}function Qa(e){let t=[];for(let n of e){if(!n.ok)return n;t.push(n.value)}return O(t)}function $a(e,t){try{return O(e())}catch(e){return k(t(e))}}async function eo(e,t){try{return O(await e())}catch(e){return k(t(e))}}function to(e){function t(e){return typeof e==`object`&&!!e&&`ok`in e&&typeof e.ok==`boolean`}let n=t(e)?e:O(e);function r(e){return{then(t){return e.ok?r(t(e.value)):r(e)},get result(){return e}}}return r(n)}var no=class extends Error{location;constructor(e,t){super(`Bug in ${e}: ${t}`),this.name=`BrepBugError`,this.location=e}};function M(e,t){throw new no(e,t)}var ro=[{pattern:/invalid edge configuration|edges?.*(not|fail|invalid)/i,translation:`The edges may not form a continuous loop. Check that edges connect end-to-end without gaps.`},{pattern:/BRepAlgoAPI.*failed|boolean.*operation.*failed/i,translation:`Boolean operation failed. Common causes: overlapping faces, zero-thickness geometry, or degenerate shapes. Try healing input shapes first.`},{pattern:/fillet.*radius.*too.*large|fillet.*failed/i,translation:`Fillet operation failed. The radius may be too large for the selected edges. Try reducing the radius or check that edges have enough room.`},{pattern:/chamfer.*failed|chamfer.*distance.*too.*large/i,translation:`Chamfer operation failed. The distance may be too large for the selected edges. Try reducing the distance or check edge geometry.`},{pattern:/shell.*failed|offset.*failed/i,translation:`Shell/offset operation failed. The thickness may be too large, or the shape may have complex geometry. Try reducing thickness.`},{pattern:/sweep.*failed|pipe.*failed/i,translation:`Sweep operation failed. Check that the profile and spine are compatible, and that the spine has no sharp twists or self-intersections.`},{pattern:/loft.*failed/i,translation:`Loft operation failed. Profiles may be incompatible or have different orientations. Ensure profiles are ordered consistently.`},{pattern:/extrude.*failed|prism.*failed/i,translation:`Extrusion failed. The profile may be invalid or self-intersecting. Check that the profile forms a valid closed wire.`},{pattern:/revolve.*failed|revolution.*failed/i,translation:`Revolution operation failed. The profile may intersect the axis of revolution, or the angle may be invalid.`},{pattern:/self.*intersect|self-intersect/i,translation:`Shape has self-intersections. The operation resulted in overlapping geometry. Simplify the input or adjust parameters.`},{pattern:/degener|degenerat/i,translation:`Degenerate geometry detected. The shape has edges or faces with zero length/area. Check input geometry for collapsed elements.`},{pattern:/BRepCheck.*fail|shape.*invalid|shape.*not.*valid/i,translation:`Shape validation failed. The resulting shape has invalid topology. Try healing the shape or checking input geometry.`}],io={FUSE_FAILED:`Try autoHeal() on both operands before the boolean operation. Check for overlapping faces or zero-thickness geometry.`,CUT_FAILED:`Try autoHeal() on both operands before the boolean operation. Check for overlapping faces or zero-thickness geometry.`,FUSE_NOT_3D:`The boolean result was not a 3D solid. Ensure both input shapes are valid 3D solids, not shells or open surfaces.`,CUT_NOT_3D:`The boolean result was not a 3D solid. Ensure both input shapes are valid 3D solids, not shells or open surfaces.`,INTERSECT_NOT_3D:`The boolean result was not a 3D solid. Ensure both input shapes are valid 3D solids, not shells or open surfaces.`,SWEEP_FAILED:`Ensure the spine curve has no sharp corners or self-intersections. Try simplifying the profile or using a smoother path.`,LOFT_FAILED:`Check that all profiles have the same number of edges and consistent orientation. Try reordering profiles.`,FILLET_NOT_3D:`The fillet radius may be too large for the selected edges. Try a smaller radius or check that adjacent faces have enough room.`,CHAMFER_NOT_3D:`The chamfer distance may be too large. Try a smaller distance or check edge geometry.`,SHELL_NOT_3D:`The shell thickness may be too large for the shape. Try reducing thickness or removing problematic faces.`,OFFSET_NOT_3D:`The offset distance may be too large for the shape geometry. Try a smaller distance.`,DRAFT_FAILED:`The draft angle may be too large or the selected faces incompatible. Try a smaller angle or different faces.`};function ao(e){return io[e]}function oo(e){for(let{pattern:t,translation:n}of ro)if(t.test(e))return`${n} (kernel: ${e})`;return e}var N={BSPLINE_FAILED:`BSPLINE_FAILED`,FACE_BUILD_FAILED:`FACE_BUILD_FAILED`,SWEEP_FAILED:`SWEEP_FAILED`,LOFT_FAILED:`LOFT_FAILED`,FUSE_FAILED:`FUSE_FAILED`,CUT_FAILED:`CUT_FAILED`,HEAL_NO_EFFECT:`HEAL_NO_EFFECT`,BOOLEAN_HAS_ERRORS:`BOOLEAN_HAS_ERRORS`,VARIABLE_FILLET_FAILED:`VARIABLE_FILLET_FAILED`,POSITION_ON_CURVE_FAILED:`POSITION_ON_CURVE_FAILED`,FIX_SHAPE_FAILED:`FIX_SHAPE_FAILED`,SOLID_FROM_SHELL_FAILED:`SOLID_FROM_SHELL_FAILED`,FIX_SELF_INTERSECTION_FAILED:`FIX_SELF_INTERSECTION_FAILED`,ELLIPSE_RADII:`ELLIPSE_RADII`,FUSE_ALL_EMPTY:`FUSE_ALL_EMPTY`,FILLET_NO_EDGES:`FILLET_NO_EDGES`,CHAMFER_NO_EDGES:`CHAMFER_NO_EDGES`,CHAMFER_ANGLE_NO_EDGES:`CHAMFER_ANGLE_NO_EDGES`,CHAMFER_ANGLE_BAD_DISTANCE:`CHAMFER_ANGLE_BAD_DISTANCE`,CHAMFER_ANGLE_BAD_ANGLE:`CHAMFER_ANGLE_BAD_ANGLE`,BEZIER_MIN_POINTS:`BEZIER_MIN_POINTS`,POLYGON_MIN_POINTS:`POLYGON_MIN_POINTS`,ZERO_LENGTH_EXTRUSION:`ZERO_LENGTH_EXTRUSION`,ZERO_TWIST_ANGLE:`ZERO_TWIST_ANGLE`,LOFT_EMPTY:`LOFT_EMPTY`,UNSUPPORTED_PROFILE:`UNSUPPORTED_PROFILE`,UNKNOWN_PLANE:`UNKNOWN_PLANE`,NULL_SHAPE_INPUT:`NULL_SHAPE_INPUT`,INVALID_FILLET_RADIUS:`INVALID_FILLET_RADIUS`,INVALID_CHAMFER_DISTANCE:`INVALID_CHAMFER_DISTANCE`,INVALID_THICKNESS:`INVALID_THICKNESS`,ZERO_OFFSET:`ZERO_OFFSET`,NO_EDGES:`NO_EDGES`,NO_FACES:`NO_FACES`,DRAFT_NO_FACES:`DRAFT_NO_FACES`,DRAFT_INVALID_ANGLE:`DRAFT_INVALID_ANGLE`,DRAFT_NOT_3D:`DRAFT_NOT_3D`,DRAFT_FAILED:`DRAFT_FAILED`,FUSE_NOT_3D:`FUSE_NOT_3D`,CUT_NOT_3D:`CUT_NOT_3D`,INTERSECT_NOT_3D:`INTERSECT_NOT_3D`,FUSE_ALL_NOT_3D:`FUSE_ALL_NOT_3D`,CUT_ALL_NOT_3D:`CUT_ALL_NOT_3D`,LOFT_NOT_3D:`LOFT_NOT_3D`,SWEEP_NOT_3D:`SWEEP_NOT_3D`,REVOLUTION_NOT_3D:`REVOLUTION_NOT_3D`,FILLET_NOT_3D:`FILLET_NOT_3D`,CHAMFER_NOT_3D:`CHAMFER_NOT_3D`,CHAMFER_ANGLE_NOT_3D:`CHAMFER_ANGLE_NOT_3D`,CHAMFER_ANGLE_FAILED:`CHAMFER_ANGLE_FAILED`,CSG_NOT_3D:`CSG_NOT_3D`,SHELL_NOT_3D:`SHELL_NOT_3D`,OFFSET_NOT_3D:`OFFSET_NOT_3D`,NULL_SHAPE:`NULL_SHAPE`,NO_WRAPPER:`NO_WRAPPER`,WELD_NOT_SHELL:`WELD_NOT_SHELL`,SOLID_BUILD_FAILED:`SOLID_BUILD_FAILED`,OFFSET_NOT_WIRE:`OFFSET_NOT_WIRE`,UNKNOWN_SURFACE_TYPE:`UNKNOWN_SURFACE_TYPE`,UNKNOWN_CURVE_TYPE:`UNKNOWN_CURVE_TYPE`,SWEEP_START_NOT_WIRE:`SWEEP_START_NOT_WIRE`,SWEEP_END_NOT_WIRE:`SWEEP_END_NOT_WIRE`,STEP_EXPORT_FAILED:`STEP_EXPORT_FAILED`,STEP_EXPORT_CONFIGURED_FAILED:`STEP_EXPORT_CONFIGURED_FAILED`,STEP_FILE_READ_ERROR:`STEP_FILE_READ_ERROR`,STEP_EXPORT_CRASHED:`STEP_EXPORT_CRASHED`,STEP_EXPORT_UNSERIALIZABLE:`STEP_EXPORT_UNSERIALIZABLE`,STL_EXPORT_FAILED:`STL_EXPORT_FAILED`,STL_FILE_READ_ERROR:`STL_FILE_READ_ERROR`,STL_EXPORT_CRASHED:`STL_EXPORT_CRASHED`,STL_EXPORT_UNSERIALIZABLE:`STL_EXPORT_UNSERIALIZABLE`,STEP_IMPORT_FAILED:`STEP_IMPORT_FAILED`,STL_IMPORT_FAILED:`STL_IMPORT_FAILED`,IGES_EXPORT_FAILED:`IGES_EXPORT_FAILED`,IGES_IMPORT_FAILED:`IGES_IMPORT_FAILED`,DXF_IMPORT_FAILED:`DXF_IMPORT_FAILED`,OBJ_IMPORT_FAILED:`OBJ_IMPORT_FAILED`,THREEMF_IMPORT_FAILED:`THREEMF_IMPORT_FAILED`,PARAMETER_NOT_FOUND:`PARAMETER_NOT_FOUND`,INTERSECTION_FAILED:`INTERSECTION_FAILED`,SELF_INTERSECTION_FAILED:`SELF_INTERSECTION_FAILED`,STRAIGHT_SKELETON_FAILED:`STRAIGHT_SKELETON_FAILED`,CENTER_OF_MASS_FAILED:`CENTER_OF_MASS_FAILED`,COMPOUND_NO_FACES:`COMPOUND_NO_FACES`,COMPOUND_FACE_NOT_FOUND:`COMPOUND_FACE_NOT_FOUND`,FINDER_NOT_UNIQUE:`FINDER_NOT_UNIQUE`,HULL_EMPTY_INPUT:`HULL_EMPTY_INPUT`,HULL_FAILED:`HULL_FAILED`,HULL_DEGENERATE:`HULL_DEGENERATE`,HULL_NOT_3D:`HULL_NOT_3D`,MINKOWSKI_FAILED:`MINKOWSKI_FAILED`,MINKOWSKI_NULL_TOOL:`MINKOWSKI_NULL_TOOL`,MINKOWSKI_NOT_3D:`MINKOWSKI_NOT_3D`,POLYHEDRON_INSUFFICIENT_POINTS:`POLYHEDRON_INSUFFICIENT_POINTS`,POLYHEDRON_INSUFFICIENT_FACES:`POLYHEDRON_INSUFFICIENT_FACES`,POLYHEDRON_INVALID_INDEX:`POLYHEDRON_INVALID_INDEX`,POLYHEDRON_FAILED:`POLYHEDRON_FAILED`,VALIDATION_FAILED:`VALIDATION_FAILED`,ROOF_FAILED:`ROOF_FAILED`,MULTI_SWEEP_INSUFFICIENT_SECTIONS:`MULTI_SWEEP_INSUFFICIENT_SECTIONS`,MULTI_SWEEP_FAILED:`MULTI_SWEEP_FAILED`,GUIDED_SWEEP_FAILED:`GUIDED_SWEEP_FAILED`,SURFACE_GRID_TOO_SMALL:`SURFACE_GRID_TOO_SMALL`,SURFACE_GRID_JAGGED:`SURFACE_GRID_JAGGED`,SURFACE_FAILED:`SURFACE_FAILED`,ASSEMBLY_MATE_INVALID:`ASSEMBLY_MATE_INVALID`,ASSEMBLY_SOLVE_FAILED:`ASSEMBLY_SOLVE_FAILED`,ASSEMBLY_NOT_CONVERGED:`ASSEMBLY_NOT_CONVERGED`,BLUEPRINT_EMPTY_CURVES:`BLUEPRINT_EMPTY_CURVES`,COMPOUND_BLUEPRINT_EMPTY:`COMPOUND_BLUEPRINT_EMPTY`,GLB_IMPORT_FAILED:`GLB_IMPORT_FAILED`,FONT_FETCH_FAILED:`FONT_FETCH_FAILED`,FONT_PARSE_FAILED:`FONT_PARSE_FAILED`,NO_FONT_LOADED:`NO_FONT_LOADED`,CURVE2D_CONSTRUCTION_FAILED:`CURVE2D_CONSTRUCTION_FAILED`,CURVE2D_INVALID_RADIUS:`CURVE2D_INVALID_RADIUS`,CURVE2D_TRANSFORM_FAILED:`CURVE2D_TRANSFORM_FAILED`,CURVE2D_QUERY_FAILED:`CURVE2D_QUERY_FAILED`,CURVE2D_INTERSECTION_FAILED:`CURVE2D_INTERSECTION_FAILED`,CURVE2D_BRIDGE_FAILED:`CURVE2D_BRIDGE_FAILED`,CLONE_FAILED:`CLONE_FAILED`,SIMPLIFY_FAILED:`SIMPLIFY_FAILED`,TO_BREP_FAILED:`TO_BREP_FAILED`,UNSUPPORTED_CAPABILITY:`UNSUPPORTED_CAPABILITY`};function so(e,t,n,r,i,a){let o={kind:e,code:t,message:n,cause:r};if(a){let e={...o,suggestion:a};return i?{...e,metadata:i}:e}return i?{...o,metadata:i}:o}function P(e,t,n,r,i){return so(`KERNEL_OPERATION`,e,t,n,r,i)}function F(e,t,n,r,i){return so(`VALIDATION`,e,t,n,r,i)}function co(e,t,n,r,i){return so(`TYPE_CAST`,e,t,n,r,i)}function lo(e,t,n,r,i){return so(`SKETCHER_STATE`,e,t,n,r,i)}function uo(e,t,n,r,i){return so(`MODULE_INIT`,e,t,n,r,i)}function I(e,t,n,r,i){return so(`COMPUTATION`,e,t,n,r,i)}function fo(e,t,n,r,i){return so(`IO`,e,t,n,r,i)}function po(e,t,n,r,i){return so(`QUERY`,e,t,n,r,i)}function mo(e,t,n,r,i){return so(`UNSUPPORTED`,e,t,n,r,i)}function ho(e,n,r){return(n<0||n>=e.length)&&M(r??`safeIndex`,`Index ${n} is out of bounds (array length ${e.length})`),t(e,n)}var go={draft:{tolerance:.01,angularTolerance:.5},standard:{tolerance:.001,angularTolerance:.1},fine:{tolerance:1e-4,angularTolerance:.05}},_o=`standard`;function vo(){return _o}function yo(e=_o){return go[e]}function bo(e){_o=e}function xo(e){return`makeLine2d`in e}var So=[`boolean`,`loft`,`extrude`,`shell`,`fillet`,`mesh`,`edgeMesh`,`transform`],Co=Object.create(null),wo=Object.create(null);function To(){for(let e of So)Co[e]=0,wo[e]=0}To();function Eo(e){let t=performance.now();return()=>{Co[e]=(Co[e]??0)+(performance.now()-t),wo[e]=(wo[e]??0)+1}}function Do(){let e={};for(let t of So)e[t]={totalMs:Co[t]??0,count:wo[t]??0};return e}function Oo(){To()}var ko;function Ao(){ko=void 0}function jo(e){return ko??=typeof e.BooleanBatch==`function`,ko}function Mo(e){return e===`commonFace`?1:e===`sameFace`?2:0}function No(e,t,n={}){if(!jo(e))return null;let r=Eo(`boolean`),i=new e.BooleanBatch;try{for(let e of t)i.addShape(e);return i.fuseAll(Mo(n.optimisation),!!n.simplify,n.fuzzyValue??0)}finally{i.delete(),r()}}function Po(e,t,n,r={}){if(!jo(e))return null;if(n.length===0)return t;let i=Eo(`boolean`),a=new e.BooleanBatch;try{for(let e of n)a.addShape(e);return a.cutAll(t,Mo(r.optimisation),!!r.simplify,r.fuzzyValue??0)}finally{a.delete(),i()}}var Fo=2147483647,Io;function Lo(){Io=void 0}function Ro(e){return Io??=typeof e.MeasurementExtractor?.extract==`function`,Io}function zo(e,t,n=!1){if(Ro(e)){let r=e.MeasurementExtractor.extract(t,n);try{let t=r.getDataPtr()/8,n=r.getDataSize(),i=e.HEAPF64.slice(t,t+n);return{volume:i[0]??0,area:i[1]??0,length:i[2]??0,centerOfMass:[i[3]??0,i[4]??0,i[5]??0],boundingBox:{min:[i[6]??0,i[7]??0,i[8]??0],max:[i[9]??0,i[10]??0,i[11]??0]}}}finally{r.delete()}}return{volume:Bo(e,t),area:Vo(e,t),length:n?Ho(e,t):0,centerOfMass:Uo(e,t),boundingBox:Go(e,t)}}function Bo(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.VolumeProperties_1(t,n,!0,!1,!1);let r=n.Mass();return n.delete(),r}function Vo(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.SurfaceProperties_2(t,n,1e-7,!0);let r=n.Mass();return n.delete(),r}function Ho(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.LinearProperties(t,n,!0,!1);let r=n.Mass();return n.delete(),r}function Uo(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.VolumeProperties_1(t,n,!0,!1,!1);let r=n.CentreOfMass(),i=[r.X(),r.Y(),r.Z()];return r.delete(),n.delete(),i}function Wo(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.LinearProperties(t,n,!0,!1);let r=n.CentreOfMass(),i=[r.X(),r.Y(),r.Z()];return r.delete(),n.delete(),i}function Go(e,t){let n=new e.Bnd_Box;e.BRepBndLib.Add(t,n,!0);let r={min:[n.GetXMin(),n.GetYMin(),n.GetZMin()],max:[n.GetXMax(),n.GetYMax(),n.GetZMax()]};return n.delete(),r}function Ko(e,t,n){let r=new e.BRepExtrema_DistShapeShape_1;r.LoadS1(t),r.LoadS2(n);let i=new e.Message_ProgressRange_1;if(r.Perform(i),!r.IsDone())throw i.delete(),r.delete(),Error(`BRepExtrema_DistShapeShape failed`);let a=r.Value(),o=r.PointOnShape1(1),s=r.PointOnShape2(1),c={value:a,point1:[o.X(),o.Y(),o.Z()],point2:[s.X(),s.Y(),s.Z()]};return o.delete(),s.delete(),i.delete(),r.delete(),c}function qo(e,t,n,r,i=1e-6){if(!e.BRepClass_FaceClassifier)throw Error(`BRepClass_FaceClassifier not available in this WASM build`);let a=new e.gp_Pnt2d_3(n,r),o=new e.BRepClass_FaceClassifier_3(t,a,i),s=o.State();a.delete(),o.delete();let c=e.TopAbs_State;return s===c.TopAbs_IN?`in`:s===c.TopAbs_ON?`on`:`out`}function Jo(e){return{volume:t=>Bo(e,t),area:t=>Vo(e,t),length:t=>Ho(e,t),centerOfMass:t=>Uo(e,t),linearCenterOfMass:t=>Wo(e,t),boundingBox:t=>Go(e,t),distance:(t,n)=>Ko(e,t,n),classifyPointOnFace:(t,n,r,i)=>qo(e,t,n,r,i),measureBulk:(t,n)=>zo(e,t,n)}}var Yo={vertex:7,edge:6,wire:5,face:4,shell:3,solid:2,compsolid:1,compound:0};function Xo(e,t,n){let r=e.TopologyExtractor.extract(t,Yo[n]),i=r.getShapesCount(),a=[];for(let e=0;e<i;e++)a.push(r.getShape(e));return r.delete(),a}var Zo=new WeakMap;function Qo(e,t,n){let r=Zo.get(e);if(!r){let t=e.TopAbs_ShapeEnum;r={vertex:t.TopAbs_VERTEX,edge:t.TopAbs_EDGE,wire:t.TopAbs_WIRE,face:t.TopAbs_FACE,shell:t.TopAbs_SHELL,solid:t.TopAbs_SOLID,compsolid:t.TopAbs_COMPSOLID,compound:t.TopAbs_COMPOUND},Zo.set(e,r)}let i=new e.TopExp_Explorer_2(t,r[n],e.TopAbs_ShapeEnum.TopAbs_SHAPE),a=[],o=new Map;for(;i.More();){let t=i.Current(),n=e.shapeHashCode(t,Fo),r=o.get(n);r?r.some(e=>e.IsSame(t))||(r.push(t),a.push(t)):(o.set(n,[t]),a.push(t)),i.Next()}return i.delete(),a}function $o(e,t,n){return e.TopologyExtractor?Xo(e,t,n):Qo(e,t,n)}var es=new WeakMap;function ts(e){let t=es.get(e);if(!t){let n=e.TopAbs_ShapeEnum;t=new Map([[n.TopAbs_VERTEX,`vertex`],[n.TopAbs_EDGE,`edge`],[n.TopAbs_WIRE,`wire`],[n.TopAbs_FACE,`face`],[n.TopAbs_SHELL,`shell`],[n.TopAbs_SOLID,`solid`],[n.TopAbs_COMPSOLID,`compsolid`],[n.TopAbs_COMPOUND,`compound`]]),es.set(e,t)}return t}function ns(e,t){if(t.IsNull())throw Error(`Cannot determine shape type: shape is null`);let n=ts(e).get(t.ShapeType());if(!n)throw Error(`Unknown shape type enum value`);return n}function rs(e,t){let n=new e.BRepCheck_Analyzer(t,!0,!1,!1),r=n.IsValid_2();return n.delete(),r}function is(e,t,n=1e-6){let r=new e.BRepBuilderAPI_Sewing(n,!0,!0,!0,!1);for(let e of t)r.Add(e);let i=new e.Message_ProgressRange_1;r.Perform(i);let a=r.SewedShape();return i.delete(),r.delete(),a}function as(e,t,n){if(e.TopTools_ListIteratorOfListOfShape){let r=new e.TopTools_ListIteratorOfListOfShape(t);for(;r.More();)n(r.Value()),r.Next();r.delete()}else{let r=new e.TopTools_ListOfShape_3(t);for(;r.Size()>0;)n(r.First_1()),r.RemoveFirst();r.delete()}}function os(e,t){return e.IsSame(t)}function ss(e,t){return e.IsEqual(t)}function cs(e){return{iterShapes:(t,n)=>$o(e,t,n),iterShapeList:(t,n)=>{as(e,t,n)},shapeType:t=>ns(e,t),isSame:(e,t)=>os(e,t),isEqual:(e,t)=>ss(e,t),isValid:t=>rs(e,t),sew:(t,n)=>is(e,t,n)}}var ls=.001;function us(e,t,n){n===`commonFace`&&t.SetGlue(e.BOPAlgo_GlueEnum.BOPAlgo_GlueShift),n===`sameFace`&&t.SetGlue(e.BOPAlgo_GlueEnum.BOPAlgo_GlueFull)}function ds(e,t){e.SetRunParallel(!0),e.SetUseOBB?.(!0),t!==void 0&&t>0&&e.SetFuzzyValue?.(t)}function fs(e,t){if(t.length<3)return 0;let n=t[0];if(!n)return 0;let r=new e.Bnd_Box;if(e.BRepBndLib.Add(n,r,!0),r.IsVoid())return r.delete(),0;let i=r.CornerMin(),a=r.CornerMax(),o=a.X()-i.X(),s=a.Y()-i.Y(),c=a.Z()-i.Z();return i.delete(),a.delete(),r.delete(),Math.sqrt(o*o+s*s+c*c)>1?1e-5:0}function ps(e,t){let n=new e.TopoDS_Builder,r=new e.TopoDS_Compound;n.MakeCompound(r);for(let e of t)n.Add(r,e);return n.delete(),r}function ms(e,t,n,r={}){let i=Eo(`boolean`);try{let{optimisation:i,simplify:a=!1,fuzzyValue:o}=r,s=new e.Message_ProgressRange_1,c=new e.BRepAlgoAPI_Fuse_3(t,n,s);us(e,c,i),ds(c,o),c.Build(s),a&&c.SimplifyResult(!0,!0,ls);let l=c.Shape();return c.delete(),s.delete(),l}finally{i()}}function hs(e,t,n,r={}){let i=Eo(`boolean`);try{let{optimisation:i,simplify:a=!1,fuzzyValue:o}=r,s=new e.Message_ProgressRange_1,c=new e.BRepAlgoAPI_Cut_3(t,n,s);us(e,c,i),ds(c,o),c.Build(s),a&&c.SimplifyResult(!0,!0,ls);let l=c.Shape();return c.delete(),s.delete(),l}finally{i()}}function gs(e,t,n,r={}){let i=Eo(`boolean`);try{let{optimisation:i,simplify:a=!1,fuzzyValue:o}=r,s=new e.Message_ProgressRange_1,c=new e.BRepAlgoAPI_Common_3(t,n,s);us(e,c,i),ds(c,o),c.Build(s),a&&c.SimplifyResult(!0,!0,ls);let l=c.Shape();return c.delete(),s.delete(),l}finally{i()}}function _s(e,t,n,r=!0){let i=new e.Message_ProgressRange_1,a=new e.BRepAlgoAPI_Section_3(t,n,!1);if(a.Approximation(r),ds(a),a.Build(i),!a.IsDone())throw a.delete(),i.delete(),Error(`BRepAlgoAPI_Section build failed`);let o=a.Shape();return a.delete(),i.delete(),o}function vs(e,t,n={}){let r=No(e,t,n);if(r!==null)return r;let i=Eo(`boolean`);try{let{optimisation:r,simplify:i=!1}=n,a=n.fuzzyValue??fs(e,t),o=new e.TopTools_ListOfShape_1;for(let e of t)o.Append_1(e);let s=new e.BRepAlgoAPI_BuilderAlgo_1;s.SetArguments(o),us(e,s,r),ds(s,a);let c=new e.Message_ProgressRange_1;s.Build(c);let l=s.Shape();if(i){let t=new e.ShapeUpgrade_UnifySameDomain_2(l,!0,!0,!1);t.Build(),l=t.Shape(),t.delete()}return o.delete(),s.delete(),c.delete(),l}finally{i()}}function ys(e,n,r,i,a){a.signal?.throwIfAborted();let o=i-r;if(o===1)return t(n,r);if(o===2)return ms(e,n[r],n[r+1],{...a,simplify:!1});let s=r+Math.ceil(o/2);return ms(e,ys(e,n,r,s,a),ys(e,n,s,i,a),{...a,simplify:!1})}function bs(e,t,n={}){let r=ys(e,t,0,t.length,n);if(n.simplify){let t=new e.ShapeUpgrade_UnifySameDomain_2(r,!0,!0,!1);t.Build();let n=t.Shape();return t.delete(),n}return r}function xs(e,n,r={}){if(n.length===0)throw Error(`fuseAll requires at least one shape`);if(n.length===1)return t(n,0);let{strategy:i=`native`}=r;return i===`pairwise`?bs(e,n,r):vs(e,n,r)}function Ss(e,t,n){if(!e.BRepAlgoAPI_Splitter)throw Error(`BRepAlgoAPI_Splitter not available in this WASM build`);let r=new e.TopTools_ListOfShape_1;r.Append_1(t);let i=new e.TopTools_ListOfShape_1;for(let e of n)i.Append_1(e);let a=new e.BRepAlgoAPI_Splitter;a.SetArguments(r),a.SetTools(i),ds(a);let o=new e.Message_ProgressRange_1;a.Build(o);let s=a.Shape();return a.delete(),o.delete(),r.delete(),i.delete(),s}function Cs(e,t,n,r={}){if(n.length===0)return t;let i=Po(e,t,n,r);if(i!==null)return i;let a=ps(e,n),o=hs(e,t,a,r);return a.delete(),o}function ws(e,t,n,r,i){let a=[];return t.IsNull()&&a.push({operand:`base`,issue:`null-shape`,message:`Base shape is null`}),n.IsNull()&&a.push({operand:`tool`,issue:`null-shape`,message:`Tool shape is null`}),a.length>0?{valid:!1,issues:a}:(i(t)||a.push({operand:`base`,issue:`not-valid`,message:`Base shape fails BRepCheck validation. Try autoHeal() first.`}),i(n)||a.push({operand:`tool`,issue:`not-valid`,message:`Tool shape fails BRepCheck validation. Try autoHeal() first.`}),{valid:a.length===0,issues:a})}function Ts(e){return{fuse:(t,n,r)=>ms(e,t,n,r),cut:(t,n,r)=>hs(e,t,n,r),intersect:(t,n,r)=>gs(e,t,n,r),section:(t,n,r)=>_s(e,t,n,r),fuseAll:(t,n)=>xs(e,t,n),cutAll:(t,n,r)=>Cs(e,t,n,r),split:(t,n)=>Ss(e,t,n),checkBoolean:(t,n,r)=>ws(e,t,n,r,t=>rs(e,t))}}var Es={fuse:0,cut:1,intersect:2};function Ds(e,t,n,r={}){let{glueMode:i=0,fuzzyValue:a=0}=r;if(typeof e.BooleanPipeline==`function`){let r=new e.BooleanPipeline;try{for(let e of n)r.addStep(Es[e.op],e.tool);let e=r.execute(t,i,a);return e.IsNull()?null:e}finally{r.delete()}}}function Os(e){return{booleanPipeline:(t,n,r)=>Ds(e,t,n,r)??null}}function ks(e,t,n,r){let i=new e.gp_Pnt_3(t,n,r),a=new e.BRepBuilderAPI_MakeVertex(i),o=a.Vertex();return a.delete(),i.delete(),o}function As(e,t,n,r){let i=n!==void 0&&r!==void 0?new e.BRepBuilderAPI_MakeEdge_24(t,n,r):new e.BRepBuilderAPI_MakeEdge_24(t),a=i.Edge();return i.delete(),a}function js(e,t){let n=new e.BRepBuilderAPI_MakeWire_1;for(let e of t)n.Add_1(e);let r=new e.Message_ProgressRange_1;n.Build(r);let i=n.Wire();return n.delete(),r.delete(),i}function Ms(e,t,n=!0){if(n){let n=new e.BRepBuilderAPI_MakeFace_15(t,!1),r=n.Face();return n.delete(),r}let r=new e.BRepOffsetAPI_MakeFilling(3,15,2,!1,1e-5,1e-4,.01,.1,8,9),i=$o(e,t,`edge`);for(let t of i)r.Add_1(t,e.GeomAbs_Shape.GeomAbs_C0,!0);let a=new e.Message_ProgressRange_1;r.Build(a);let o=r.Shape();return r.delete(),a.delete(),o}function Ns(e,t,n,r){let i=new e.BRepPrimAPI_MakeBox_2(t,n,r),a=i.Solid();return i.delete(),a}function Ps(e,t,n,r=[0,0,0],i=[0,0,1]){let a=new e.gp_Pnt_3(...r),o=new e.gp_Dir_5(...i),s=new e.gp_Ax2_4(a,o),c=new e.BRepPrimAPI_MakeCylinder_3(s,t,n),l=c.Shape();return c.delete(),s.delete(),a.delete(),o.delete(),l}function Fs(e,t,n=[0,0,0]){if(n[0]===0&&n[1]===0&&n[2]===0){let n=new e.BRepPrimAPI_MakeSphere_1(t),r=n.Shape();return n.delete(),r}let r=new e.gp_Pnt_3(...n),i=new e.BRepPrimAPI_MakeSphere_2(r,t),a=i.Shape();return i.delete(),r.delete(),a}function Is(e,t,n,r,i=[0,0,0],a=[0,0,1]){let o=new e.gp_Pnt_3(...i),s=new e.gp_Dir_5(...a),c=new e.gp_Ax2_4(o,s),l=new e.BRepPrimAPI_MakeCone_3(c,t,n,r),u=l.Shape();return l.delete(),c.delete(),o.delete(),s.delete(),u}function Ls(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.BRepBuilderAPI_MakeEdge_3(i,a),c=new e.BRepBuilderAPI_MakeEdge_3(a,o),l=new e.BRepBuilderAPI_MakeEdge_3(o,i),u=new e.BRepBuilderAPI_MakeWire_1;u.Add_1(s.Edge()),u.Add_1(c.Edge()),u.Add_1(l.Edge());let d=null;if(u.IsDone()){let t=new e.BRepBuilderAPI_MakeFace_15(u.Wire(),!1);t.IsDone()&&(d=t.Face()),t.delete()}return u.delete(),s.delete(),c.delete(),l.delete(),i.delete(),a.delete(),o.delete(),d}function Rs(e,t){let n=new e.BRepBuilderAPI_MakeWire_1;for(let r of t){let t=r.ShapeType();t===e.TopAbs_ShapeEnum.TopAbs_EDGE?n.Add_1(r):t===e.TopAbs_ShapeEnum.TopAbs_WIRE&&n.Add_2(r)}let r=new e.Message_ProgressRange_1;n.Build(r);let i=n.Wire();return n.delete(),r.delete(),i}function zs(e,t,n,r=[0,0,0],i=[0,0,1]){let a=new e.gp_Pnt_3(...r),o=new e.gp_Dir_5(...i),s=new e.gp_Ax2_4(a,o),c=new e.BRepPrimAPI_MakeTorus_5(s,t,n),l=c.Shape();return c.delete(),s.delete(),a.delete(),o.delete(),l}function Bs(e){return{makeVertex:(t,n,r)=>ks(e,t,n,r),makeEdge:(t,n,r)=>As(e,t,n,r),makeWire:t=>js(e,t),makeWireFromMixed:t=>Rs(e,t),makeFace:(t,n)=>Ms(e,t,n),makeBox:(t,n,r)=>Ns(e,t,n,r),makeCylinder:(t,n,r,i)=>Ps(e,t,n,r,i),makeSphere:(t,n)=>Fs(e,t,n),makeCone:(t,n,r,i,a)=>Is(e,t,n,r,i,a),makeTorus:(t,n,r,i)=>zs(e,t,n,r,i),buildTriFace:(t,n,r)=>Ls(e,t,n,r)}}function Vs(e,t){let n=e[t];if(n===void 0)throw Error(`Index ${t} out of bounds`);return n}function Hs(e,t,n){let r=[],i=Math.max(n,1);for(let n of t){new e.BRepMesh_IncrementalMeshWrapper(n,i,!1,i*.5,!1).delete();let t=new e.TopExp_Explorer_2(n,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;t.More();){let n=e.TopoDS_Cast.Face(t.Current()),i=new e.TopLoc_Location_1,a=e.BRep_Tool_Triangulation(n,i,0);if(!a.IsNull()){let e=i.Transformation(),t=a.get().NbNodes();for(let n=1;n<=t;n++){let t=a.get().Node(n),i=t.Transformed(e);r.push({x:i.X(),y:i.Y(),z:i.Z()}),i.delete(),t.delete()}e.delete()}i.delete(),t.Next()}t.delete()}return r}function Us(e,t,n){let{faces:r,points:i}=t,a=[];for(let[t,n,o]of r){let r=Vs(i,t),s=Vs(i,n),c=Vs(i,o),l=Ls(e,[r.x,r.y,r.z],[s.x,s.y,s.z],[c.x,c.y,c.z]);l!==null&&a.push(l)}if(a.length<4)throw Error(`hull: only ${a.length} faces built, need at least 4 for a solid`);let o=Math.max(n,1e-4),s=new e.BRepBuilderAPI_Sewing(o,!0,!0,!0,!1);for(let e of a)s.Add(e);let c=new e.Message_ProgressRange_1;s.Perform(c),c.delete();let l=s.SewedShape();s.delete();let u=new e.TopExp_Explorer_2(l,e.TopAbs_ShapeEnum.TopAbs_SHELL,e.TopAbs_ShapeEnum.TopAbs_SHAPE);if(u.More()){let t=e.TopoDS_Cast.Shell(u.Current());u.delete();let n=new e.BRepBuilderAPI_MakeSolid_1;n.Add(t);let r=new e.Message_ProgressRange_1;if(n.Build(r),r.delete(),n.IsDone()){let r=n.Solid();n.delete(),t.delete();let i=new e.GProp_GProps_1;e.BRepGProp.VolumeProperties_1(r,i,!1,!1,!1);let a=i.Mass();return i.delete(),a<0&&r.Complement(),r}return t.delete(),n.delete(),l}return u.delete(),l}function Ws(e,t,n){if(t.length===0)throw Error(`hull: no shapes provided`);let r=Hs(e,t,n);if(r.length<4)throw Error(`hull: fewer than 4 vertices extracted from input shapes`);let i=g(r,n);if(i.faces.length<4)throw Error(`hull: degenerate hull (fewer than 4 faces)`);return Us(e,i,n)}function Gs(e,t,n,r){return Us(e,{points:t,faces:n},r)}function Ks(e,t,n){if(t.length<4)throw Error(`hullFromPoints: fewer than 4 points`);let r=g(t,n);if(r.faces.length<4)throw Error(`hullFromPoints: degenerate hull (fewer than 4 faces)`);return Us(e,r,n)}function qs(e){return{hull:(t,n)=>Ws(e,t,n),hullFromPoints:(t,n)=>Ks(e,t,n),buildSolidFromFaces:(t,n,r)=>Gs(e,t,n,r)}}function Js(e,t,n){let r=new e.gp_Pnt_3(t[0],t[1],t[2]),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.BRepBuilderAPI_MakeEdge_3(r,i),o=a.Edge();return a.delete(),r.delete(),i.delete(),o}function Ys(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Dir_5(n[0],n[1],n[2]),o=new e.gp_Ax2_4(i,a),s=new e.gp_Circ_2(o,r),c=new e.BRepBuilderAPI_MakeEdge_8(s),l=c.Edge();return c.delete(),s.delete(),o.delete(),a.delete(),i.delete(),l}function Xs(e,t,n,r,i,a){let o=new e.gp_Pnt_3(t[0],t[1],t[2]),s=new e.gp_Dir_5(n[0],n[1],n[2]),c=new e.gp_Ax2_4(o,s),l=new e.gp_Circ_2(c,r),u=new e.BRepBuilderAPI_MakeEdge_9(l,i,a),d=u.Edge();return u.delete(),l.delete(),c.delete(),s.delete(),o.delete(),d}function Zs(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.GC_MakeArcOfCircle_4(i,a,o).Value().get(),c=new e.Handle_Geom_Curve_2(s),l=new e.BRepBuilderAPI_MakeEdge_24(c),u=l.Edge();return l.delete(),c.delete(),i.delete(),a.delete(),o.delete(),u}function Qs(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Vec_4(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.GC_MakeArcOfCircle_5(i,a,o).Value().get(),c=new e.Handle_Geom_Curve_2(s),l=new e.BRepBuilderAPI_MakeEdge_24(c),u=l.Edge();return l.delete(),c.delete(),i.delete(),a.delete(),o.delete(),u}function $s(e,t,n,r,i,a){let o=new e.gp_Pnt_3(t[0],t[1],t[2]),s=new e.gp_Dir_5(n[0],n[1],n[2]),c;if(a){let t=new e.gp_Dir_5(a[0],a[1],a[2]);c=new e.gp_Ax2_2(o,s,t),t.delete()}else c=new e.gp_Ax2_4(o,s);let l=new e.gp_Elips_2(c,r,i),u=new e.BRepBuilderAPI_MakeEdge_12(l),d=u.Edge();return u.delete(),l.delete(),c.delete(),s.delete(),o.delete(),d}function ec(e,t,n,r,i,a,o,s){let c=new e.gp_Pnt_3(t[0],t[1],t[2]),l=new e.gp_Dir_5(n[0],n[1],n[2]),u;if(s){let t=new e.gp_Dir_5(s[0],s[1],s[2]);u=new e.gp_Ax2_2(c,l,t),t.delete()}else u=new e.gp_Ax2_4(c,l);let d=new e.gp_Elips_2(u,r,i),f=new e.BRepBuilderAPI_MakeEdge_13(d,a,o),p=f.Edge();return f.delete(),d.delete(),u.delete(),l.delete(),c.delete(),p}function tc(e,n){let r=new e.TColgp_Array1OfPnt_2(1,n.length);for(let i=0;i<n.length;i++){let a=t(n,i),o=new e.gp_Pnt_3(a[0],a[1],a[2]);r.SetValue_1(i+1,o),o.delete()}let i=new e.Geom_BezierCurve_1(r),a=new e.Handle_Geom_Curve_2(i),o=new e.BRepBuilderAPI_MakeEdge_24(a),s=o.Edge();return o.delete(),a.delete(),r.delete(),s}function nc(e,t,n,r,i=[0,0,0],a=[0,0,1],o=!1){let s=e.HelixWireBuilder;if(typeof s?.build==`function`){let e=s.build(r,t,n,i[0],i[1],i[2],a[0],a[1],a[2],o);if(!e.IsNull())return e}let c=n/t,l=o?-2*Math.PI:2*Math.PI,u=new e.gp_Pnt_3(i[0],i[1],i[2]),d=new e.gp_Dir_5(a[0],a[1],a[2]),f=new e.gp_Ax3_5(u,d),p=new e.Geom_CylindricalSurface_1(f,r);f.delete();let m=new e.gp_Pnt2d_3(0,0),h=new e.gp_Dir2d_5(l,t),g=new e.Geom2d_Line_3(m,h),_=g.Value(0),v=g.Value(c*Math.sqrt((2*Math.PI)**2+t**2)),y=new e.GCE2d_MakeSegment_1(_,v),b=new e.Handle_Geom2d_Curve_2(y.Value().get()),x=new e.Handle_Geom_Surface_2(p),S=new e.BRepBuilderAPI_MakeEdge_30(b,x),C=S.Edge();e.BRepLib.BuildCurves3d_2(C);let w=new e.BRepBuilderAPI_MakeWire_2(C),ee=w.Wire();return w.delete(),S.delete(),b.delete(),x.delete(),_.delete(),v.delete(),g.delete(),m.delete(),h.delete(),d.delete(),u.delete(),ee}function rc(e,t,n,r){let i=Math.sqrt(t*n/r),a=t/i,o=n/i,s=new e.gp_Pnt_3(0,0,0),c=new e.gp_Dir_5(0,1,0),l=new e.gp_Ax1_2(s,c),u=new e.gp_Dir_5(0,0,1),d=new e.gp_Ax1_2(s,u),f=new e.gp_Dir_5(1,0,0),p=new e.gp_Ax1_2(s,f),m=new e.gp_GTrsf_1;m.SetAffinity_1(l,a);let h=new e.gp_GTrsf_1;h.SetAffinity_1(d,i);let g=new e.gp_GTrsf_1;return g.SetAffinity_1(p,o),m.Multiply(h),m.Multiply(g),h.delete(),g.delete(),l.delete(),d.delete(),p.delete(),c.delete(),u.delete(),f.delete(),s.delete(),{transform:m,applyToPoint(t){let n=t.XYZ();m.Transforms_1(n);let r=new e.gp_Pnt_2(n);return n.delete(),r}}}function ic(e,t,n,r){let i=new e.gp_Sphere_1;i.SetRadius(1);let a=new e.Geom_SphericalSurface_2(i),o=e.GeomConvert.SurfaceToBSplineSurface(a.UReversed()).get();i.delete(),a.delete();try{let i=rc(e,t,n,r),a=o.NbUPoles(),s=o.NbVPoles();for(let t=1;t<=a;t++)for(let n=1;n<=s;n++){let r=e.bsplineSurfacePole(o,t,n),a=i.applyToPoint(r);o.SetPole_1(t,n,a),r.delete(),a.delete()}i.transform.delete();let c=new e.BRepBuilderAPI_MakeShell_2(o.UReversed(),!1),l=c.Shell();c.delete();let u=new e.ShapeFix_Solid_1,d=u.SolidFromShell(l);return u.delete(),d}finally{o.delete()}}function ac(e,t){let n=new e.TopoDS_Builder,r=new e.TopoDS_Compound;n.MakeCompound(r);for(let e of t)n.Add(r,e);return n.delete(),r}function oc(e,t,n){let r=new e.gp_Pnt_3(t[0],t[1],t[2]),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.BRepPrimAPI_MakeBox_4(r,i),o=a.Solid();return a.delete(),r.delete(),i.delete(),o}function sc(e,t){let n=new e.ShapeFix_Solid_1,r=n.SolidFromShell(e.TopoDS_Cast.Shell(t));return n.delete(),r}function cc(e,t){return e.BRepToolsWrapper.Write(t)}function lc(e,t){return e.BRepToolsWrapper.Read(t)}function uc(e,t,n={}){let r=n.unit??`MM`;e.Interface_Static.SetCVal(`xstep.cascade.unit`,r),e.Interface_Static.SetCVal(`write.step.unit`,r),e.Interface_Static.SetIVal(`write.surfacecurve.mode`,0),e.Interface_Static.SetIVal(`write.precision.mode`,0),e.Interface_Static.SetIVal(`write.step.assembly`,2),e.Interface_Static.SetIVal(`write.step.schema`,5),new e.STEPCAFControl_Writer_1().delete();let i=new e.TCollection_ExtendedString_2(`XmlOcaf`,!0),a=new e.TDocStd_Document(i);i.delete();let o=a.Main(),s=e.XCAFDoc_DocumentTool.ShapeTool(o).get(),c=e.XCAFDoc_DocumentTool.ColorTool(o).get();e.XCAFDoc_ShapeTool.SetAutoNaming(!1);for(let n of t){let t=s.AddShape(n.shape,!1,!0),r=new e.TCollection_ExtendedString_2(n.name,!0);if(e.TDataStd_Name.Set_1(t,r),r.delete(),n.color){let[r,i,a,o]=n.color,s=new e.Quantity_ColorRGBA_5(r/255,i/255,a/255,o/255);c.SetColor_6(t,s,e.XCAFDoc_ColorType.XCAFDoc_ColorSurf),s.delete()}}let l=new e.XSControl_WorkSession,u=new e.Handle_XSControl_WorkSession_2(l),d=new e.STEPCAFControl_Writer_2(u,!1),f=new e.Handle_TDocStd_Document_2(a),p=new e.Message_ProgressRange_1;d.Transfer_1(f,e.STEPControl_StepModelType.STEPControl_AsIs,null,p),p.delete();let m=`assembly_export_${Date.now()}.step`,h=d.Write_1(m),g=``;if(h===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+m);g=new TextDecoder().decode(t),e.FS.unlink(`/`+m)}return d.delete(),u.delete(),f.delete(),a.delete(),g}function dc(e,t){try{t.delete()}catch{}}function fc(e,t,n){let r=Js(e,[0,0,0],[t,0,0]),i=Js(e,[t,0,0],[t,n,0]),a=Js(e,[t,n,0],[0,n,0]),o=Js(e,[0,n,0],[0,0,0]),s=new e.BRepBuilderAPI_MakeWire_1;s.Add_1(r),s.Add_1(i),s.Add_1(a),s.Add_1(o);let c=s.Wire();s.delete(),r.delete(),i.delete(),a.delete(),o.delete();let l=new e.BRepBuilderAPI_MakeFace_15(c,!1),u=l.Face();return l.delete(),u}function pc(e,t,n,r){return new e.gp_Pnt_3(t,n,r)}function mc(e,t,n,r){return new e.gp_Dir_5(t,n,r)}function hc(e,t,n,r){return new e.gp_Vec_4(t,n,r)}function gc(e,t,n,r,i,a,o){let s=new e.gp_Pnt_3(t,n,r),c=new e.gp_Dir_5(i,a,o),l=new e.gp_Ax1_2(s,c);return s.delete(),c.delete(),l}function _c(e,t,n,r,i,a,o,s,c,l){let u=new e.gp_Pnt_3(t,n,r),d=new e.gp_Dir_5(i,a,o),f;if(s!==void 0&&c!==void 0&&l!==void 0){let t=new e.gp_Dir_5(s,c,l);f=new e.gp_Ax2_2(u,d,t),t.delete()}else f=new e.gp_Ax2_4(u,d);return u.delete(),d.delete(),f}function vc(e,t,n,r,i,a,o,s,c,l){let u=new e.gp_Pnt_3(t,n,r),d=new e.gp_Dir_5(i,a,o),f;if(s!==void 0&&c!==void 0&&l!==void 0){let t=new e.gp_Dir_5(s,c,l);f=new e.gp_Ax3_3(u,d,t),t.delete()}else f=new e.gp_Ax3_5(u,d);return u.delete(),d.delete(),f}function yc(e){return{makeLineEdge:(t,n)=>Js(e,t,n),makeCircleEdge:(t,n,r)=>Ys(e,t,n,r),makeCircleArc:(t,n,r,i,a)=>Xs(e,t,n,r,i,a),makeArcEdge:(t,n,r)=>Zs(e,t,n,r),makeEllipseEdge:(t,n,r,i,a)=>$s(e,t,n,r,i,a),makeEllipseArc:(t,n,r,i,a,o,s)=>ec(e,t,n,r,i,a,o,s),makeBezierEdge:t=>tc(e,t),makeTangentArc:(t,n,r)=>Qs(e,t,n,r),makeHelixWire:(t,n,r,i,a,o)=>nc(e,t,n,r,i,a,o),makeCompound:t=>ac(e,t),makeBoxFromCorners:(t,n)=>oc(e,t,n),makeRectangle:(t,n)=>fc(e,t,n),solidFromShell:t=>sc(e,t),makeEllipsoid:(t,n,r)=>ic(e,t,n,r),toBREP:t=>cc(e,t),fromBREP:t=>lc(e,t),exportSTEPAssembly:(t,n)=>uc(e,t,n??{}),dispose:t=>{dc(e,t)},createPoint3d:(t,n,r)=>pc(e,t,n,r),createDirection3d:(t,n,r)=>mc(e,t,n,r),createVector3d:(t,n,r)=>hc(e,t,n,r),createAxis1:(t,n,r,i,a,o)=>gc(e,t,n,r,i,a,o),createAxis2:(t,n,r,i,a,o,s,c,l)=>_c(e,t,n,r,i,a,o,s,c,l),createAxis3:(t,n,r,i,a,o,s,c,l)=>vc(e,t,n,r,i,a,o,s,c,l)}}function bc(e,t,n,r){let i=Eo(`extrude`);try{let i=new e.gp_Vec_4(n[0]*r,n[1]*r,n[2]*r),a=new e.BRepPrimAPI_MakePrism_1(t,i,!1,!0),o=a.Shape();return a.delete(),i.delete(),o}finally{i()}}function xc(e,t,n,r){let i=new e.BRepPrimAPI_MakeRevol_1(t,n,r,!1),a=i.Shape();return i.delete(),a}function Sc(e,t,n=!1,r,i){let a=Eo(`loft`);try{let a=new e.BRepOffsetAPI_ThruSections(!0,n,1e-6);r&&a.AddVertex(r);for(let e of t)a.AddWire(e);i&&a.AddVertex(i);let o=new e.Message_ProgressRange_1;a.Build(o);let s=a.Shape();return a.delete(),o.delete(),s}finally{a()}}function Cc(e,t,n,r={}){let{transitionMode:i}=r,a=new e.BRepOffsetAPI_MakePipeShell(n);typeof a.SetIsBuildHistory==`function`&&a.SetIsBuildHistory(!1),i!==void 0&&a.SetTransitionMode(i),a.Add_1(t,!1,!1);let o=new e.Message_ProgressRange_1;if(a.Build(o),o.delete(),!a.IsDone())throw a.delete(),Error(`Sweep build failed (IsDone=false)`);a.MakeSolid();let s=a.Shape();return a.delete(),s}function wc(e,t,n){let r=new e.BRepOffsetAPI_MakePipe_1(n,t),i=new e.Message_ProgressRange_1;r.Build(i),i.delete();let a=r.Shape();if(a.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_SHELL){let t=new e.BRepBuilderAPI_MakeSolid_1,n=e.TopoDS_Cast.Shell(a);t.Add(n);let i=new e.Message_ProgressRange_1;t.Build(i),i.delete();let o=a;if(t.IsDone()){let n=t.Solid(),r=new e.BRepCheck_Analyzer(n,!0,!1,!1);r.IsValid_2()?o=n:n.delete(),r.delete()}return n.delete(),t.delete(),r.delete(),o}return r.delete(),a}var Tc,Ec;function Dc(){Tc=void 0}function Oc(){Ec=void 0}function kc(e){return Tc??=typeof e.LoftBatch==`function`,Tc}function Ac(e){return Ec??=typeof e.ExtrudeBatch==`function`,Ec}function jc(e,t){if(t.length===0)return[];if(kc(e)){let n=Eo(`loft`),r=new e.LoftBatch;try{for(let e of t){let t=r.beginLoft(e.solid??!0,e.ruled??!1,e.tolerance??1e-6);e.startVertex&&r.setStartVertex(t,e.startVertex);for(let n of e.wires)r.addWire(t,n);e.endVertex&&r.setEndVertex(t,e.endVertex)}let e=r.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{r.delete(),n()}}return t.map(t=>Sc(e,t.wires,t.ruled??!1,t.startVertex,t.endVertex))}function Mc(e,t){if(t.length===0)return[];if(Ac(e)){let n=Eo(`extrude`),r=new e.ExtrudeBatch;try{for(let e of t)r.addExtrude(e.face,e.direction[0]*e.length,e.direction[1]*e.length,e.direction[2]*e.length);let e=r.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{r.delete(),n()}}return t.map(t=>bc(e,t.face,t.direction,t.length))}function Nc(e){return{extrude:(t,n,r)=>bc(e,t,n,r),revolve:(t,n,r)=>xc(e,t,n,r),loft:(t,n,r,i)=>Sc(e,t,n,r,i),sweep:(t,n,r)=>Cc(e,t,n,r??{}),simplePipe:(t,n)=>wc(e,t,n),loftBatch:t=>jc(e,t),extrudeBatch:t=>Mc(e,t)}}function Pc(e,t,n,r){let i=Eo(`fillet`);try{let i=new e.BRepFilletAPI_MakeFillet(t,e.ChFi3d_FilletShape.ChFi3d_Rational);for(let t of n){let n=typeof r==`function`?r(t):r,a=e.TopoDS_Cast.Edge(t);if(typeof n==`number`)n>0&&i.Add_2(n,a);else{let[e,t]=n;e>0&&t>0&&i.Add_3(e,t,a)}}let a=i.Shape();return i.delete(),a}finally{i()}}function Fc(e,t,n,r){let i=new e.BRepFilletAPI_MakeChamfer(t),a=null;function o(){if(a)return a;a=new Map;let n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;n.More();){let t=e.TopoDS_Cast.Face(n.Current()),r=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_EDGE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;r.More();){let n=e.shapeHashCode(r.Current(),2147483647);a.has(n)||a.set(n,t),r.Next()}r.delete(),n.Next()}return n.delete(),a}function s(t){return o().get(e.shapeHashCode(t,2147483647))??null}for(let t of n){let n=typeof r==`function`?r(t):r,a=e.TopoDS_Cast.Edge(t);if(typeof n==`number`)n>0&&i.Add_2(n,a);else{let[e,r]=n;if(e>0&&r>0){let n=s(t);n&&i.Add_3(e,r,a,n)}}}let c=i.Shape();return i.delete(),c}function Ic(e,t,n,r,i=.001){let a=Eo(`shell`);try{let a=new e.TopTools_ListOfShape_1;for(let e of n)a.Append_1(e);let o=new e.Message_ProgressRange_1,s=new e.BRepOffsetAPI_MakeThickSolid;s.MakeThickSolidByJoin(t,a,-r,i,e.BRepOffset_Mode.BRepOffset_Skin,!1,!1,e.GeomAbs_JoinType.GeomAbs_Arc,!1,o);let c=s.Shape();return s.delete(),a.delete(),o.delete(),c}finally{a()}}function Lc(e,t,n){let r=new e.BRepOffsetAPI_MakeThickSolid;r.MakeThickSolidBySimple(t,n);let i=new e.Message_ProgressRange_1;r.Build(i);let a=r.Shape();return r.delete(),i.delete(),a}function Rc(e,t,n,r,i){let a=new e.BRepFilletAPI_MakeChamfer(t),o=i*Math.PI/180,s=new Map,c=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;c.More();){let t=e.TopoDS_Cast.Face(c.Current()),n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_EDGE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;n.More();){let r=e.shapeHashCode(n.Current(),2147483647);s.has(r)||s.set(r,t),n.Next()}n.delete(),c.Next()}c.delete();for(let t of n){let n=s.get(e.shapeHashCode(t,2147483647))??null;n&&r>0&&a.AddDA(r,o,e.TopoDS_Cast.Edge(t),n)}let l=a.Shape();return a.delete(),l}function zc(e,t,n,r){let i;i=typeof r==`string`?{arc:e.GeomAbs_JoinType.GeomAbs_Arc,intersection:e.GeomAbs_JoinType.GeomAbs_Intersection,tangent:e.GeomAbs_JoinType.GeomAbs_Tangent}[r]??e.GeomAbs_JoinType.GeomAbs_Arc:r??e.GeomAbs_JoinType.GeomAbs_Arc;let a=new e.BRepOffsetAPI_MakeOffset_3(t,i,!1);a.Perform(n,0);let o=a.Shape();return a.delete(),o}function Bc(e,t,n,r=1e-6){let i=new e.Message_ProgressRange_1,a=new e.BRepOffsetAPI_MakeOffsetShape;a.PerformByJoin(t,n,r,e.BRepOffset_Mode.BRepOffset_Skin,!1,!1,e.GeomAbs_JoinType.GeomAbs_Arc,!1,i);let o=a.Shape();return a.delete(),i.delete(),o}var Vc,Hc;function Uc(){Vc=void 0}function Wc(){Hc=void 0}function Gc(e){return Vc??=typeof e.ShellBatch==`function`,Vc}function Kc(e){return Hc??=typeof e.FilletBatch==`function`,Hc}function qc(e,t){if(t.length===0)return[];if(Gc(e)){let n=Eo(`shell`),r=new e.ShellBatch;try{for(let e of t){let t=r.beginShell(e.shape,e.thickness,e.tolerance??.001);for(let n of e.faces)r.addFaceToRemove(t,n)}let e=r.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{r.delete(),n()}}return t.map(t=>Ic(e,t.shape,t.faces,t.thickness,t.tolerance??.001))}function Jc(e,t){if(t.length===0)return[];if(Kc(e)){let n=Eo(`fillet`),r=new e.FilletBatch;try{for(let e of t){let t=r.beginFillet(e.shape);for(let n of e.edges)n.r2===void 0?r.addEdge(t,n.edge,n.radius):r.addEdgeVariable(t,n.edge,n.radius,n.r2)}let e=r.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{r.delete(),n()}}return t.map(t=>{let n=t.edges.map(e=>e.edge);return Pc(e,t.shape,n,e=>{let n=t.edges.find(t=>t.edge===e);return n?n.r2===void 0?n.radius:[n.radius,n.r2]:0})})}function Yc(e){return{fillet:(t,n,r)=>Pc(e,t,n,r),chamfer:(t,n,r)=>Fc(e,t,n,r),chamferDistAngle:(t,n,r,i)=>Rc(e,t,n,r,i),shell:(t,n,r,i)=>Ic(e,t,n,r,i),thicken:(t,n)=>Lc(e,t,n),offset:(t,n,r)=>Bc(e,t,n,r),offsetWire2D:(t,n,r)=>zc(e,t,n,r),shellBatch:t=>qc(e,t),filletBatch:t=>Jc(e,t)}}var Xc;function Zc(){Xc=void 0}function Qc(e){return Xc??=typeof e.TransformBatch==`function`,Xc}function $c(e,t){if(t.length===0)return[];let n=Eo(`transform`);try{if(Qc(e)){let n=new e.TransformBatch;try{for(let e of t)switch(e.type){case`translate`:n.addTranslate(e.shape,e.x,e.y,e.z);break;case`rotate`:n.addRotate(e.shape,e.angle*Math.PI/180,...e.axis,...e.center);break;case`scale`:n.addScale(e.shape,...e.center,e.factor);break;case`mirror`:n.addMirror(e.shape,...e.origin,...e.normal);break}let e=n.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{n.delete()}}return t.map(t=>{switch(t.type){case`translate`:return tl(e,t.shape,t.x,t.y,t.z);case`rotate`:return nl(e,t.shape,t.angle,[...t.axis],[...t.center]);case`scale`:return il(e,t.shape,[...t.center],t.factor);case`mirror`:return rl(e,t.shape,[...t.origin],[...t.normal])}})}finally{n()}}function el(e,t,n){let r=new e.BRepBuilderAPI_Transform_2(t,n,!0,!1),i=r.ModifiedShape(t);return r.delete(),i}function tl(e,t,n,r,i){let a=new e.gp_Trsf_1,o=new e.gp_Vec_4(n,r,i);a.SetTranslation_1(o);let s=el(e,t,a);return a.delete(),o.delete(),s}function nl(e,t,n,r=[0,0,1],i=[0,0,0]){let a=new e.gp_Trsf_1,o=new e.gp_Pnt_3(...i),s=new e.gp_Dir_5(...r),c=new e.gp_Ax1_2(o,s);a.SetRotation_1(c,n*Math.PI/180);let l=el(e,t,a);return a.delete(),c.delete(),o.delete(),s.delete(),l}function rl(e,t,n,r){let i=new e.gp_Trsf_1,a=new e.gp_Pnt_3(...n),o=new e.gp_Dir_5(...r),s=new e.gp_Ax2_4(a,o);i.SetMirror_3(s);let c=el(e,t,i);return i.delete(),s.delete(),a.delete(),o.delete(),c}function il(e,t,n,r){let i=new e.gp_Trsf_1,a=new e.gp_Pnt_3(...n);i.SetScale(a,r);let o=el(e,t,i);return i.delete(),a.delete(),o}function al(e,t,n,r,i){if(i){let i=new e.gp_Trsf_1;i.SetValues(n[0],n[1],n[2],r[0],n[3],n[4],n[5],r[1],n[6],n[7],n[8],r[2]);let a=new e.BRepBuilderAPI_Transform_2(t,i,!0,!1),o=a.ModifiedShape(t);return a.delete(),i.delete(),o}let a=new e.gp_GTrsf_1;for(let e=0;e<3;e++)for(let t=0;t<3;t++)a.SetValue(e+1,t+1,n[e*3+t]);let o=new e.gp_XYZ_2(r[0],r[1],r[2]);a.SetTranslationPart(o),o.delete();let s=new e.BRepBuilderAPI_GTransform_2(t,a,!0),c=s.ModifiedShape(t);return s.delete(),a.delete(),c}function ol(e,t){let n=new e.ShapeUpgrade_UnifySameDomain_2(t,!0,!0,!1);n.Build();let r=n.Shape();return n.delete(),r}function sl(e){return{transform:(t,n)=>el(e,t,n),translate:(t,n,r,i)=>tl(e,t,n,r,i),rotate:(t,n,r,i)=>nl(e,t,n,r,i),mirror:(t,n,r)=>rl(e,t,n,r),scale:(t,n,r)=>il(e,t,n,r),transformBatch:t=>$c(e,t),generalTransform:(t,n,r,i)=>al(e,t,n,r,i),simplify:t=>ol(e,t)}}function cl(e,t,n){if(n===0)return new Float32Array;let r=t/4;return e.slice(r,r+n)}function ll(e,t,n){let r=Eo(`mesh`);try{let r=e.MeshExtractor.extract(t,n.tolerance,n.angularTolerance,!!n.skipNormals,!!n.includeUVs),i=r.getVerticesSize(),a=r.getNormalsSize(),o=r.getTrianglesSize(),s=r.getFaceGroupsSize(),c=r.getUvsSize(),l=cl(e.HEAPF32,r.getVerticesPtr(),i),u=n.skipNormals||a===0?new Float32Array:cl(e.HEAPF32,r.getNormalsPtr(),a),d=r.getTrianglesPtr()/4,f=e.HEAPU32.slice(d,d+o),p=c>0?cl(e.HEAPF32,r.getUvsPtr(),c):new Float32Array,m=[];if(s>0){let t=r.getFaceGroupsPtr()/4,n=e.HEAP32.slice(t,t+s);for(let e=0;e<n.length;e+=3)m.push({start:n[e],count:n[e+1],faceHash:n[e+2]})}return r.delete(),{vertices:l,normals:u,triangles:f,uvs:p,faceGroups:m}}finally{r()}}function ul(e,t,n,r){let i=Eo(`edgeMesh`);try{let i=e.EdgeMeshExtractor.extract(t,n,r),a=i.getLinesSize(),o=i.getEdgeGroupsSize(),s=cl(e.HEAPF32,i.getLinesPtr(),a),c=[];if(o>0){let t=i.getEdgeGroupsPtr()/4,n=e.HEAP32.slice(t,t+o);for(let e=0;e<n.length;e+=3)c.push({start:n[e],count:n[e+1],edgeHash:n[e+2]})}return i.delete(),{lines:s,edgeGroups:c}}finally{i()}}function dl(e){return{mesh:(t,n)=>ll(e,t,n),meshEdges:(t,n,r)=>ul(e,t,n,r)}}var fl=0;function pl(e,t){return`${e}_${++fl}.${t}`}function ml(e,t){let n=e.StepStreamIO;if(typeof n?.exportSTEP==`function`&&t.length===1)return n.exportSTEP(t[0],5);let r=new e.STEPControl_Writer_1;e.Interface_Static.SetIVal(`write.step.schema`,5),r.Model(!0).delete();let i=new e.Message_ProgressRange_1;for(let n of t)r.Transfer_1(n,e.STEPControl_StepModelType.STEPControl_AsIs,!0,i);let a=pl(`_export`,`step`),o=r.Write(a);if(r.delete(),i.delete(),o===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+a);return e.FS.unlink(`/`+a),new TextDecoder().decode(t)}throw Error(`STEP export failed: writer did not complete successfully`)}function hl(e,t,n=!1){let r=pl(`_export`,`stl`);if(e.StlAPI.Write(t,r,!n)){let t=e.FS.readFile(`/`+r);return e.FS.unlink(`/`+r),n?t.buffer:new TextDecoder().decode(t)}throw Error(`STL export failed: StlAPI.Write returned false`)}function gl(e,t){let n=new e.IGESControl_Writer_1;for(let e of t)n.AddShape(e);n.ComputeModel();let r=pl(`_export`,`iges`),i=n.Write_2(r);if(n.delete(),i){let t=e.FS.readFile(`/`+r);return e.FS.unlink(`/`+r),new TextDecoder().decode(t)}throw Error(`IGES export failed: writer did not complete successfully`)}function _l(e,t){let n=typeof t==`string`?t:new TextDecoder().decode(new Uint8Array(t)),r=e.StepStreamIO;if(typeof r?.importSTEP==`function`){let e=r.importSTEP(n);if(e.IsNull())throw Error(`Failed to import STEP file: stream reader could not parse the input data`);return[e]}let i=pl(`_import`,`step`),a=new TextEncoder().encode(n);e.FS.writeFile(`/`+i,a);let o=new e.STEPControl_Reader_1;if(o.ReadFile(i)){e.FS.unlink(`/`+i);let t=new e.Message_ProgressRange_1;o.TransferRoots(t),t.delete();let n=o.OneShape();return o.delete(),[n]}throw e.FS.unlink(`/`+i),o.delete(),Error(`Failed to import STEP file: reader could not parse the input data`)}function vl(e,t){let n=pl(`_import`,`stl`),r=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);e.FS.writeFile(`/`+n,r);let i=new e.StlAPI_Reader,a=new e.TopoDS_Shape;if(i.Read_1(a,`/`+n)){e.FS.unlink(`/`+n);let t=new e.ShapeUpgrade_UnifySameDomain_2(a,!0,!0,!1);t.Build();let r=t.Shape(),o=new e.BRepBuilderAPI_MakeSolid_1;o.Add(e.TopoDS_Cast.Shell(r));let s=o.Solid();return a.delete(),t.delete(),o.delete(),i.delete(),s}throw e.FS.unlink(`/`+n),a.delete(),i.delete(),Error(`Failed to import STL file: reader could not parse the input data`)}function yl(e,t){let n=pl(`_import`,`iges`),r=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);e.FS.writeFile(`/`+n,r);let i=new e.IGESControl_Reader_1;if(i.ReadFile(n)===e.IFSelect_ReturnStatus.IFSelect_RetDone){e.FS.unlink(`/`+n);let t=new e.Message_ProgressRange_1;i.TransferRoots(t),t.delete();let r=i.OneShape();return i.delete(),[r]}throw e.FS.unlink(`/`+n),i.delete(),Error(`Failed to import IGES file: reader could not parse the input data`)}function bl(e){return{exportSTEP:t=>ml(e,t),exportSTL:(t,n)=>hl(e,t,n),importSTEP:t=>_l(e,t),importSTL:t=>vl(e,t),exportIGES:t=>gl(e,t),importIGES:t=>yl(e,t)}}function xl(e,t){let n=e.BRep_Tool.Pnt(t),r=[n.X(),n.Y(),n.Z()];return n.delete(),r}function Sl(e){let t=e.GeomAbs_SurfaceType;return new Map([[t.GeomAbs_Plane,`plane`],[t.GeomAbs_Cylinder,`cylinder`],[t.GeomAbs_Cone,`cone`],[t.GeomAbs_Sphere,`sphere`],[t.GeomAbs_Torus,`torus`],[t.GeomAbs_BezierSurface,`bezier`],[t.GeomAbs_BSplineSurface,`bspline`],[t.GeomAbs_SurfaceOfRevolution,`revolution`],[t.GeomAbs_SurfaceOfExtrusion,`extrusion`],[t.GeomAbs_OffsetSurface,`offset`],[t.GeomAbs_OtherSurface,`other`]])}var Cl=new WeakMap;function wl(e,t){let n=Cl.get(e);n||(n=Sl(e),Cl.set(e,n));let r=new e.BRepAdaptor_Surface_2(t,!1),i=r.GetType();return r.delete(),n.get(i)??`other`}function Tl(e,t){let n=e.BRepTools.UVBounds_1(t);return{uMin:n.UMin,uMax:n.UMax,vMin:n.VMin,vMax:n.VMax}}function El(e,t){return e.BRepTools.OuterWire(t)}function Dl(e,t,n,r){let i=new e.BRepGProp_Face_2(t,!1),a=new e.gp_Pnt_1,o=new e.gp_Vec_1;i.Normal(n,r,a,o);let s=[o.X(),o.Y(),o.Z()];return i.delete(),a.delete(),o.delete(),s}function Ol(e,t,n,r){let i=new e.BRepAdaptor_Surface_2(t,!1),a=new e.gp_Pnt_1;i.D0(n,r,a);let o=[a.X(),a.Y(),a.Z()];return i.delete(),a.delete(),o}function kl(e,t,n){let r=e.BRep_Tool.Surface_2(t),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.GeomAPI_ProjectPointOnSurf_2(i,r,e.Extrema_ExtAlgo.Extrema_ExtAlgo_Grad),o=null;if(a.NbPoints()>0){let e=a.LowerDistanceParameters();o=[e.U,e.V]}return a.delete(),i.delete(),o}function Al(e,t,n){let r=e.BRep_Tool.Surface_2(t),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.GeomAPI_ProjectPointOnSurf_2(i,r,e.Extrema_ExtAlgo.Extrema_ExtAlgo_Grad),o;if(a.NbPoints()>0){let e=a.NearestPoint();o=[e.X(),e.Y(),e.Z()],e.delete()}else o=n;return a.delete(),i.delete(),o}function jl(e,t,n){let r=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),i=new e.gp_Pnt_1,a=new e.gp_Vec_1;r.D1(n,i,a);let o={point:[i.X(),i.Y(),i.Z()],tangent:[a.X(),a.Y(),a.Z()]};return r.delete(),i.delete(),a.delete(),o}function Ml(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=[n.FirstParameter(),n.LastParameter()];return n.delete(),r}function Nl(e,t,n){let r=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),i=r.Value(n),a=[i.X(),i.Y(),i.Z()];return i.delete(),r.delete(),a}function Pl(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=n.IsClosed();return n.delete(),r}function Fl(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=n.IsPeriodic();return n.delete(),r}function Il(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=n.Period();return n.delete(),r}function Ll(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=n.GetType();return n.delete(),{0:`LINE`,1:`CIRCLE`,2:`ELLIPSE`,3:`HYPERBOLA`,4:`PARABOLA`,5:`BEZIER_CURVE`,6:`BSPLINE_CURVE`,7:`OFFSET_CURVE`,8:`OTHER_CURVE`}[typeof r==`number`?r:Number(r?.value??r)]??`OTHER_CURVE`}function Rl(e,t){let n=t.Orientation_1(),r=e.TopAbs_Orientation;return n===r.TopAbs_FORWARD?`forward`:n===r.TopAbs_REVERSED?`reversed`:n===r.TopAbs_INTERNAL?`internal`:`external`}function zl(e,t,n){switch(n??Bl(e,t)){case`vertex`:return e.TopoDS_Cast.Vertex(t);case`edge`:return e.TopoDS_Cast.Edge(t);case`wire`:return e.TopoDS_Cast.Wire(t);case`face`:return e.TopoDS_Cast.Face(t);case`shell`:return e.TopoDS_Cast.Shell(t);case`solid`:return e.TopoDS_Cast.Solid(t);case`compsolid`:return e.TopoDS_Cast.CompSolid(t);default:return e.TopoDS_Cast.Compound(t)}}function Bl(e,t){let n=t.ShapeType(),r=e.TopAbs_ShapeEnum;return n===r.TopAbs_VERTEX?`vertex`:n===r.TopAbs_EDGE?`edge`:n===r.TopAbs_WIRE?`wire`:n===r.TopAbs_FACE?`face`:n===r.TopAbs_SHELL?`shell`:n===r.TopAbs_SOLID?`solid`:n===r.TopAbs_COMPSOLID?`compsolid`:`compound`}function Vl(e,t,n){return e.shapeHashCode(t,n)}function Hl(e,t){return t.IsNull()}function Ul(e,t){return t.Reversed()}function Wl(e,t){let n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE),r=new e.TopLoc_Location_1,i=!1;for(;n.More();){let t=e.TopoDS_Cast.Face(n.Current());if(!e.BRep_Tool_Triangulation(t,r,0).IsNull()){i=!0;break}n.Next()}return n.delete(),r.delete(),i}function Gl(e,t,n,r){new e.BRepMesh_IncrementalMeshWrapper(t,n,!1,r,!1).delete()}function Kl(e,t){let n=new e.BRepAdaptor_Curve_2(t);try{let e=n.Bezier().get(),t=e.NbPoles();if(t<2)return null;let r=e.Pole(t-1),i=[r.X(),r.Y(),r.Z()];return r.delete(),i}catch{return null}finally{n.delete()}}function ql(e,t){return t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t)}function Jl(e,t){let n=t.get();if(typeof n.Cylinder!=`function`)return null;let r=n.Cylinder(),i={radius:r.Radius(),isDirect:r.Direct()};return r.delete(),i}function Yl(e,t){let n=null;try{if(t===7)return e.AxeOfRevolution();if(t===1)n=e.Cylinder();else if(t===2)n=e.Cone();else if(t===4)n=e.Torus();else return null;let r=n.Axis();return n.delete(),r}catch{return n?.delete?.(),null}}function Xl(e,t){let n=new e.BRepAdaptor_Surface_2(t,!1);try{let e=n.GetType(),t=Yl(n,typeof e==`number`?e:Number(e?.value??e));if(!t)return null;let r=null,i=null;try{return r=t.Location(),i=t.Direction(),{origin:[r.X(),r.Y(),r.Z()],direction:[i.X(),i.Y(),i.Z()]}}finally{r?.delete?.(),i?.delete?.(),t.delete()}}finally{n.delete()}}function Zl(e,t){return t.get().UReversed()}function Ql(e){return{vertexPosition:t=>xl(e,t),surfaceType:t=>wl(e,t),uvBounds:t=>Tl(e,t),outerWire:t=>El(e,t),surfaceNormal:(t,n,r)=>Dl(e,t,n,r),pointOnSurface:(t,n,r)=>Ol(e,t,n,r),uvFromPoint:(t,n)=>kl(e,t,n),projectPointOnFace:(t,n)=>Al(e,t,n),curveTangent:(t,n)=>jl(e,t,n),curveParameters:t=>Ml(e,t),shapeOrientation:t=>Rl(e,t),downcast:(t,n)=>zl(e,t,n),hashCode:(t,n)=>Vl(e,t,n),isNull:t=>Hl(e,t),hasTriangulation:t=>Wl(e,t),meshShape:(t,n,r)=>{Gl(e,t,n,r)},getBezierPenultimatePole:t=>Kl(e,t),createCurveAdaptor:t=>ql(e,t),reverseShape:t=>Ul(e,t),curvePointAtParam:(t,n)=>Nl(e,t,n),curveIsClosed:t=>Pl(e,t),curveIsPeriodic:t=>Fl(e,t),curvePeriod:t=>Il(e,t),curveType:t=>Ll(e,t),getSurfaceCylinderData:t=>Jl(e,t),getSurfaceAxis:t=>Xl(e,t),reverseSurfaceU:t=>Zl(e,t)}}function $l(e,t){let n=new e.BRepAdaptor_Curve_2(t);try{let t=n.GetType(),r=typeof t==`number`?t:Number(t?.value??t),i=e.GeomAbs_CurveType,a=typeof i.GeomAbs_BSplineCurve==`number`?i.GeomAbs_BSplineCurve:Number(i.GeomAbs_BSplineCurve?.value??i.GeomAbs_BSplineCurve),o=typeof i.GeomAbs_BezierCurve==`number`?i.GeomAbs_BezierCurve:Number(i.GeomAbs_BezierCurve?.value??i.GeomAbs_BezierCurve);if(r!==a&&r!==o)return null;let s=n.BSpline(),c=s.get(),l=c.Degree(),u=c.NbPoles(),d=c.NbKnots(),f=c.IsPeriodic(),p=c.IsRational(),m=[];for(let e=1;e<=u;e++){let t=c.Pole(e);m.push([t.X(),t.Y(),t.Z()]),t.delete()}let h=[];for(let e=1;e<=u;e++)h.push(c.Weight(e));let g=[],_=[];for(let e=1;e<=d;e++)g.push(c.Knot(e)),_.push(c.Multiplicity(e));let v={degree:l,poles:m,weights:h,knots:g,multiplicities:_,isPeriodic:f,isRational:p};return s.delete(),v}catch{return null}finally{n.delete()}}function eu(e,t){let n=new e.BRepAdaptor_Surface_2(t,!1);try{let t=n.GetType(),r=typeof t==`number`?t:Number(t?.value??t),i=e.GeomAbs_SurfaceType;if(r!==(typeof i.GeomAbs_BSplineSurface==`number`?i.GeomAbs_BSplineSurface:Number(i.GeomAbs_BSplineSurface?.value??i.GeomAbs_BSplineSurface)))return null;let a=n.BSpline(),o=a.get(),s=o.UDegree(),c=o.VDegree(),l=o.NbUPoles(),u=o.NbVPoles(),d=o.IsUPeriodic(),f=o.IsVPeriodic(),p=o.IsURational()||o.IsVRational(),m=[],h=[];for(let e=1;e<=l;e++){let t=[],n=[];for(let r=1;r<=u;r++){let i=o.Pole(e,r);t.push([i.X(),i.Y(),i.Z()]),i.delete(),n.push(o.Weight(e,r))}m.push(t),h.push(n)}let g=o.NbUKnots(),_=[],v=[];for(let e=1;e<=g;e++)_.push(o.UKnot(e)),v.push(o.UMultiplicity(e));let y=o.NbVKnots(),b=[],x=[];for(let e=1;e<=y;e++)b.push(o.VKnot(e)),x.push(o.VMultiplicity(e));let S={degreeU:s,degreeV:c,nbPolesU:l,nbPolesV:u,poles:m,weights:h,knotsU:_,knotsV:b,multiplicitiesU:v,multiplicitiesV:x,isPeriodicU:d,isPeriodicV:f,isRational:p};return a.delete(),S}catch{return null}finally{n.delete()}}function tu(e){return{getNurbsCurveData:t=>$l(e,t),getNurbsSurfaceData:t=>eu(e,t)}}function nu(e,t,n={}){let{tolerance:r=1e-8}=n,i=new e.TColgp_Array1OfPnt_2(1,t.length),a=new e.gp_Pnt_1,o=1;for(let e of t)a.SetCoord_2(e[0],e[1],e[2]),i.SetValue_1(o++,a);a.delete();let s=new e.GeomAPI_PointsToBSpline_2(i,3,8,e.GeomAbs_Shape.GeomAbs_C2,r);if(i.delete(),!s.IsDone())throw s.delete(),Error(`Interpolation failed — GeomAPI_PointsToBSpline did not converge`);let c=s.Curve(),l=new e.Handle_Geom_Curve_2(c.get()),u=new e.BRepBuilderAPI_MakeEdge_24(l),d=u.Edge();return u.delete(),s.delete(),d}function ru(e,t,n={}){let{tolerance:r=.001,degMin:i=1,degMax:a=6,smoothing:o=null}=n,s=new e.TColgp_Array1OfPnt_2(1,t.length),c=new e.gp_Pnt_1,l=1;for(let e of t)c.SetCoord_2(e[0],e[1],e[2]),s.SetValue_1(l++,c);c.delete();let u;if(u=o?new e.GeomAPI_PointsToBSpline_5(s,o[0],o[1],o[2],a,e.GeomAbs_Shape.GeomAbs_C2,r):new e.GeomAPI_PointsToBSpline_2(s,i,a,e.GeomAbs_Shape.GeomAbs_C2,r),s.delete(),!u.IsDone())throw u.delete(),Error(`Approximation failed — GeomAPI_PointsToBSpline did not converge`);let d=u.Curve(),f=new e.Handle_Geom_Curve_2(d.get()),p=new e.BRepBuilderAPI_MakeEdge_24(f),m=p.Edge();return p.delete(),u.delete(),m}function iu(e){return{interpolatePoints:(t,n)=>nu(e,t,n??{}),approximatePoints:(t,n)=>ru(e,t,n??{})}}function au(e,t){let n=new e.ShapeFix_Solid_2(t),r=new e.Message_ProgressRange_1;n.Perform(r),r.delete();let i=n.Solid();return n.delete(),i.IsNull()?null:i}function ou(e,t){let n=new e.ShapeFix_Face_2(t);n.Perform();let r=n.Face();return n.delete(),r}function su(e,t,n){let r;n?r=new e.ShapeFix_Wire_2(t,n,1e-6):(r=new e.ShapeFix_Wire_1,r.Load_1(t)),r.Perform();let i=r.Wire();return r.delete(),i}function cu(e){return{healSolid:t=>au(e,t),healFace:t=>ou(e,t),healWire:(t,n)=>su(e,t,n)}}var lu={modified:new Map,generated:new Map,deleted:new Set};function uu(e,t,n){let r=new Map;if(n===0)return r;let i=e.slice(t/4,t/4+n),a=0;for(;a+1<i.length;){let e=i[a++],t=i[a++];if(t<0||a+t>i.length)break;let n=[];for(let e=0;e<t;e++)n.push(i[a++]);r.set(e,n)}return r}function du(e,t){try{let n=uu(e.HEAP32,t.getModifiedPtr(),t.getModifiedSize()),r=uu(e.HEAP32,t.getGeneratedPtr(),t.getGeneratedSize()),i=new Set,a=t.getDeletedSize();if(a>0){let n=t.getDeletedPtr()/4,r=e.HEAP32.slice(n,n+a);for(let e=0;e<r.length;e++)i.add(r[e])}return{modified:n,generated:r,deleted:i}}finally{t.delete()}}function fu(e,t,n){let r=[];if(t.Size()===0)return r;if(e.TopTools_ListIteratorOfListOfShape){let i=new e.TopTools_ListIteratorOfListOfShape(t);for(;i.More();)r.push(e.shapeHashCode(i.Value(),n)),i.Next();i.delete()}else{let i=new e.TopTools_ListOfShape_3(t);for(;i.Size()>0;)r.push(e.shapeHashCode(i.First_1(),n)),i.RemoveFirst();i.delete()}return r}function pu(e,t,n,r,i){if(r.length===0)return lu;let a=Array.isArray(n)?n:[n];if(e.EvolutionExtractor){let n,r,o;if(a.length===1)n=a[0];else{r=new e.TopoDS_Builder,o=new e.TopoDS_Compound,r.MakeCompound(o);for(let e of a)r.Add(o,e);n=o}let s;try{s=e.EvolutionExtractor.extract(t,n,i)}catch{}finally{r?.delete(),o?.delete()}if(s!==void 0)return du(e,s)}let o=new Map,s=new Map,c=new Set,l=new Set(r),u=new Map;for(let t of a){let n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;n.More();){let t=n.Current(),r=e.shapeHashCode(t,i);l.has(r)&&u.set(r,t),n.Next()}n.delete()}for(let[n,r]of u){if(t.IsDeleted?.(r)){c.add(n);continue}let a=t.Modified(r);a.Size()>0&&o.set(n,fu(e,a,i));let l=t.Generated(r);l.Size()>0&&s.set(n,fu(e,l,i))}return{modified:o,generated:s,deleted:c}}function mu(e,t,n,r,i){let a=new e.BRepBuilderAPI_Transform_2(t,n,!0,!1),o=a.Shape(),s=r.length===0?lu:pu(e,a,t,r,i);return a.delete(),{shape:o,evolution:s}}function hu(e,t,n,r,i,a,o){return a&&t.SimplifyResult(!0,!0,.001),{shape:t.Shape(),evolution:pu(e,t,n,r,i),diagnostics:o??{hasErrors:!1,hasWarnings:!1,messages:[]}}}function gu(e,t,n,r,i){return{shape:t.Shape(),evolution:pu(e,t,n,r,i)}}function _u(e,t,n,r,i,a,o){let s=new e.gp_Trsf_1,c=new e.gp_Vec_4(n,r,i);s.SetTranslation_1(c),c.delete();let l=mu(e,t,s,a,o);return s.delete(),l}function vu(e,t,n,r,i,a=[0,0,1],o=[0,0,0]){let s=new e.gp_Trsf_1,c=new e.gp_Pnt_3(o[0],o[1],o[2]),l=new e.gp_Dir_5(a[0],a[1],a[2]),u=new e.gp_Ax1_2(c,l);s.SetRotation_1(u,n),c.delete(),l.delete(),u.delete();let d=mu(e,t,s,r,i);return s.delete(),d}function yu(e,t,n,r,i,a){let o=new e.gp_Trsf_1,s=new e.gp_Pnt_3(n[0],n[1],n[2]),c=new e.gp_Dir_5(r[0],r[1],r[2]),l=new e.gp_Ax2_4(s,c);o.SetMirror_3(l),s.delete(),c.delete(),l.delete();let u=mu(e,t,o,i,a);return o.delete(),u}function bu(e,t,n,r,i,a){let o=new e.gp_Trsf_1,s=new e.gp_Pnt_3(n[0],n[1],n[2]);o.SetScale(s,r),s.delete();let c=mu(e,t,o,i,a);return o.delete(),c}function xu(e,t,n,r,i,a,o){let s=new e.gp_Trsf_1;s.SetValues(n[0],n[1],n[2],r[0],n[3],n[4],n[5],r[1],n[6],n[7],n[8],r[2]);let c=mu(e,t,s,a,o);return s.delete(),c}function Su(e){return{hasErrors:e.HasErrors(),hasWarnings:e.HasWarnings(),messages:[]}}function Cu(e,t,n,r,i,a={}){let o=new e.Message_ProgressRange_1,s=new e.BRepAlgoAPI_Fuse_3(t,n,o);us(e,s,a.optimisation),ds(s,a.fuzzyValue),s.Build(o);let c=Su(s),l=hu(e,s,[t,n],r,i,a.simplify??!1,c);return s.delete(),o.delete(),l}function wu(e,t,n,r,i,a={}){let o=new e.Message_ProgressRange_1,s=new e.BRepAlgoAPI_Cut_3(t,n,o);us(e,s,a.optimisation),ds(s,a.fuzzyValue),s.Build(o);let c=Su(s),l=hu(e,s,[t,n],r,i,a.simplify??!1,c);return s.delete(),o.delete(),l}function Tu(e,t,n,r,i,a={}){let o=new e.Message_ProgressRange_1,s=new e.BRepAlgoAPI_Common_3(t,n,o);us(e,s,a.optimisation),ds(s,a.fuzzyValue),s.Build(o);let c=Su(s),l=hu(e,s,[t,n],r,i,a.simplify??!1,c);return s.delete(),o.delete(),l}function Eu(e,t,n,r,i,a){let o=new e.BRepFilletAPI_MakeFillet(t,e.ChFi3d_FilletShape.ChFi3d_Rational);for(let t of n){let n=typeof r==`function`?r(t):r;Array.isArray(n)?o.Add_3(n[0],n[1],e.TopoDS_Cast.Edge(t)):o.Add_2(n,e.TopoDS_Cast.Edge(t))}let s=new e.Message_ProgressRange_1;o.Build(s),s.delete();let c=gu(e,o,t,i,a);return o.delete(),c}function Du(e,t,n,r,i,a){let o=new e.BRepFilletAPI_MakeChamfer(t),s=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE),c=new Map;for(;s.More();){let t=e.TopoDS_Cast.Face(s.Current()),n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_EDGE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;n.More();)c.set(e.shapeHashCode(n.Current(),a),t),n.Next();n.delete(),s.Next()}s.delete();for(let t of n){let n=typeof r==`function`?r(t):r,i=c.get(e.shapeHashCode(t,a));if(Array.isArray(n)&&i)o.Add_3(n[0],n[1],e.TopoDS_Cast.Edge(t),i);else{let r=Array.isArray(n)?n[0]:n;o.Add_2(r,e.TopoDS_Cast.Edge(t))}}let l=new e.Message_ProgressRange_1;o.Build(l),l.delete();let u=gu(e,o,t,i,a);return o.delete(),u}function Ou(e,t,n,r,i,a,o=.001){let s=new e.BRepOffsetAPI_MakeThickSolid,c=new e.TopTools_ListOfShape_1;for(let e of n)c.Append_1(e);let l=new e.Message_ProgressRange_1;s.MakeThickSolidByJoin(t,c,-r,o,e.BRepOffset_Mode.BRepOffset_Skin,!1,!1,e.GeomAbs_JoinType.GeomAbs_Arc,!1,l),l.delete(),c.delete();let u=gu(e,s,t,i,a);return s.delete(),u}function ku(e,t,n,r,i){let a=new e.BRepOffsetAPI_MakeThickSolid;a.MakeThickSolidBySimple(t,n);let o=new e.Message_ProgressRange_1;a.Build(o),o.delete();let s=gu(e,a,t,r,i);return a.delete(),s}function Au(e,t,n,r,i,a=1e-6){let o=new e.BRepOffsetAPI_MakeOffsetShape,s=new e.Message_ProgressRange_1;o.PerformByJoin(t,n,a,e.BRepOffset_Mode.BRepOffset_Skin,!1,!1,e.GeomAbs_JoinType.GeomAbs_Arc,!1,s),s.delete();let c=gu(e,o,t,r,i);return o.delete(),c}function ju(e,t,n,r,i,a,o,s){if(!e.BRepOffsetAPI_DraftAngle)throw Error(`BRepOffsetAPI_DraftAngle not available in this WASM build. Rebuild brepjs-opencascade with the updated build config.`);let[c,l,u]=r,[d,f,p]=i,m=new e.gp_Dir_5(c,l,u),h=new e.gp_Pnt_3(d,f,p),g=new e.gp_Pln_3(h,m),_=new e.BRepOffsetAPI_DraftAngle_2(t);try{for(let t of n){let n=(typeof a==`function`?a(t):a)*Math.PI/180;_.Add(e.TopoDS_Cast.Face(t),m,n,g,!0)}let r=new e.Message_ProgressRange_1;return _.Build(r),r.delete(),gu(e,_,t,o,s)}finally{_.delete(),g.delete(),h.delete(),m.delete()}}function Mu(e){return{translateWithHistory:(t,n,r,i,a,o)=>_u(e,t,n,r,i,a,o),rotateWithHistory:(t,n,r,i,a,o)=>vu(e,t,n,r,i,a,o),mirrorWithHistory:(t,n,r,i,a)=>yu(e,t,n,r,i,a),scaleWithHistory:(t,n,r,i,a)=>bu(e,t,n,r,i,a),generalTransformWithHistory:(t,n,r,i,a,o)=>xu(e,t,n,r,i,a,o),fuseWithHistory:(t,n,r,i,a)=>Cu(e,t,n,r,i,a),cutWithHistory:(t,n,r,i,a)=>wu(e,t,n,r,i,a),intersectWithHistory:(t,n,r,i,a)=>Tu(e,t,n,r,i,a),filletWithHistory:(t,n,r,i,a)=>Eu(e,t,n,r,i,a),chamferWithHistory:(t,n,r,i,a)=>Du(e,t,n,r,i,a),shellWithHistory:(t,n,r,i,a,o)=>Ou(e,t,n,r,i,a,o),thickenWithHistory:(t,n,r,i)=>ku(e,t,n,r,i),offsetWithHistory:(t,n,r,i,a)=>Au(e,t,n,r,i,a),draftWithHistory:(t,n,r,i,a,o,s)=>ju(e,t,n,r,i,a,o,s)}}function Nu(e,t,n,r){let i=new e.gp_GTrsf_1;for(let e=0;e<3;e++)for(let t=0;t<3;t++)i.SetValue(e+1,t+1,n[e*3+t]);let a=new e.gp_XYZ_2(r[0],r[1],r[2]);i.SetTranslationPart(a),a.delete();let o=new e.BRepBuilderAPI_GTransform_2(t,i,!0),s=o.Shape();return o.delete(),i.delete(),s}function Pu(e,t){let n=new e.gp_Trsf_1;for(let r of t){let t=new e.gp_Trsf_1;if(r.type===`translate`){let n=new e.gp_Vec_4(r.x,r.y,r.z);t.SetTranslation_1(n),n.delete()}else{let n=r.axis??[0,0,1],i=r.center??[0,0,0],a=new e.gp_Pnt_3(i[0],i[1],i[2]),o=new e.gp_Dir_5(n[0],n[1],n[2]),s=new e.gp_Ax1_2(a,o);t.SetRotation_1(s,r.angle*Math.PI/180),s.delete(),o.delete(),a.delete()}n.PreMultiply(t),t.delete()}return{handle:n,dispose:()=>n.delete()}}function Fu(e,t,n,r,i){return mu(e,t,n,r,i)}function Iu(e,t){if(!t)return;let n=e.BRepBuilderAPI_TransitionMode;switch(t){case`transformed`:return n.BRepBuilderAPI_Transformed;case`round`:return n.BRepBuilderAPI_RoundCorner;case`right`:return n.BRepBuilderAPI_RightCorner}}function Lu(e,t,n,r={}){let i=new e.BRepOffsetAPI_MakePipeShell(n);typeof i.SetIsBuildHistory==`function`&&i.SetIsBuildHistory(!1),r.tolerance!==void 0&&i.SetTolerance(r.tolerance,r.boundTolerance??r.tolerance,r.angularTolerance??1e-7),r.maxDegree!==void 0&&i.SetMaxDegree(r.maxDegree),r.maxSegments!==void 0&&i.SetMaxSegments(r.maxSegments);let a=Iu(e,r.transitionMode);a!==void 0&&i.SetTransitionMode(a),r.support?i.SetMode_4(r.support):r.frenet&&i.SetMode_1(!0),r.auxiliary&&i.SetMode_5(r.auxiliary,!1,e.BRepFill_TypeOfContact.BRepFill_NoContact);let o=!!r.contact,s=!!r.correction;r.law?i.SetLaw_1(t,r.law,o,s):i.Add_1(t,o,s);let c=new e.Message_ProgressRange_1;if(i.Build(c),c.delete(),!i.IsDone())throw i.delete(),Error(`Sweep pipe shell build failed (IsDone=false)`);if(r.shellMode){let e=i.Shape(),t=i.FirstShape(),n=i.LastShape();return i.delete(),{shape:e,firstShape:t,lastShape:n}}i.MakeSolid();let l=i.Shape();return i.delete(),l}function Ru(e,t,n={}){let r=n.solid??!0,i=n.ruled??!1,a=new e.BRepOffsetAPI_ThruSections(r,i,n.tolerance??1e-6);n.startVertex&&a.AddVertex(n.startVertex);for(let e of t)a.AddWire(e);n.endVertex&&a.AddVertex(n.endVertex);let o=new e.Message_ProgressRange_1;a.Build(o),o.delete();let s=a.Shape();return a.delete(),s}function zu(e,t,n,r){if(t===`linear`){let t=new e.Law_Linear;return t.Set(0,1,n,r),t}let i=new e.Law_S;return i.Set_1(0,1,n,r),i}function Bu(e,t,n,r,i){let a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Dir_5(r[0],r[1],r[2]),s=new e.gp_Ax1_2(a,o),c=new e.BRepPrimAPI_MakeRevol_1(t,s,i,!1),l=c.Shape();return c.delete(),s.delete(),o.delete(),a.delete(),l}function Vu(e,t,n,r,i){let a=[],o=new e.gp_Trsf_1;for(let s=0;s<i;s++){let i=n[0]*r*s,c=n[1]*r*s,l=n[2]*r*s,u=new e.gp_Vec_4(i,c,l);o.SetTranslation_1(u),u.delete();let d=new e.BRepBuilderAPI_Transform_2(t,o,!0,!1);a.push(d.Shape()),d.delete()}return o.delete(),a}function Hu(e,t,n,r,i,a){let o=[],s=new e.gp_Pnt_3(n[0],n[1],n[2]),c=new e.gp_Dir_5(r[0],r[1],r[2]),l=new e.gp_Ax1_2(s,c),u=new e.gp_Trsf_1;for(let n=0;n<a;n++){let r=i*n*Math.PI/180;u.SetRotation_1(l,r);let a=new e.BRepBuilderAPI_Transform_2(t,u,!0,!1);o.push(a.Shape()),a.delete()}return u.delete(),l.delete(),c.delete(),s.delete(),o}function Uu(e,t,n,r){let i=n.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(n,!1):new e.BRepAdaptor_Curve_2(n),a=new e.gp_Pnt_1,o=new e.gp_Vec_1;try{i.D1(r,a,o);let n=new e.gp_Dir_2(o),s=new(e.gp_Ax3_5??e.gp_Ax3_4)(a,n),c=new e.gp_Trsf_1;c.SetTransformation_2(s),c.Invert();let l=new e.BRepBuilderAPI_Transform_2(t,c,!0,!1),u=l.Shape();return l.delete(),c.delete(),s.delete(),n.delete(),u}finally{o.delete(),a.delete(),i.delete()}}function Wu(e,t){let n=new e.BRepOffsetAPI_MakeFilling(3,15,2,!1,1e-5,1e-4,.01,.1,8,9),r=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_EDGE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;r.More();){let t=e.TopoDS_Cast.Edge(r.Current());n.Add_1(t,e.GeomAbs_Shape.GeomAbs_C0,!0),r.Next()}r.delete();let i=new e.Message_ProgressRange_1;n.Build(i),i.delete();let a=n.Shape();return n.delete(),a}function Gu(e,t,n){let r=new e.BRepBuilderAPI_MakeFace_2(t);for(let e of n)r.Add(e);let i=r.Face();r.delete();let a=new e.ShapeFix_Face_2(i);a.FixOrientation_1(),a.Perform();let o=a.Face();return a.delete(),o}function Ku(e,t){let n=e.BRepTools.OuterWire(t),r=e.BRep_Tool.Surface_2(t);try{let t=new e.BRepBuilderAPI_MakeFace_21(r,n,!0),i=t.Face();t.delete();let a=new e.ShapeFix_Face_2(i);a.FixOrientation_1(),a.Perform();let o=a.Face();return a.delete(),o}finally{r.delete(),n.delete()}}function qu(e,t,n){let r=t,i=!1;try{t.ShapeType!==void 0&&(r=e.BRep_Tool.Surface_2(t),i=!0)}catch{}let a=new e.BRepBuilderAPI_MakeFace_21(r,n,!0),o=a.Face();return a.delete(),i&&r.delete(),o}function Ju(e,n,r,i){let a=new e.TColgp_Array2OfPnt_2(1,r,1,i);for(let o=0;o<r;o++)for(let r=0;r<i;r++){let s=t(n,o*i+r),c=new e.gp_Pnt_3(s[0],s[1],s[2]);a.SetValue_1(o+1,r+1,c),c.delete()}let o=new e.GeomAPI_PointsToBSplineSurface_2(a,3,8,e.GeomAbs_Shape.GeomAbs_C2,.001),s=o.Surface();a.delete();let c=new e.BRepBuilderAPI_MakeFace_8(s,1e-6),l=c.Face();return c.delete(),o.delete(),l}function Yu(e,n,r,i){let a=new e.BRepBuilderAPI_Sewing(1e-6,!0,!0,!0,!1);for(let o=0;o<r-1;o++)for(let r=0;r<i-1;r++){let s=o*i+r,c=(o+1)*i+r,l=o*i+(r+1),u=(o+1)*i+(r+1),d=t(n,s),f=t(n,c),p=t(n,l),m=t(n,u),h=Xu(e,d,f,p);a.Add(h);let g=Xu(e,f,m,p);a.Add(g)}let o=new e.Message_ProgressRange_1;a.Perform(o),o.delete();let s=a.SewedShape();return a.delete(),s}function Xu(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.BRepBuilderAPI_MakeEdge_3(i,a),c=new e.BRepBuilderAPI_MakeEdge_3(a,o),l=new e.BRepBuilderAPI_MakeEdge_3(o,i),u=new e.BRepBuilderAPI_MakeWire_4(s.Edge(),c.Edge(),l.Edge()),d=u.Wire(),f=new e.BRepBuilderAPI_MakeFace_15(d,!0),p=f.Face();return f.delete(),u.delete(),l.delete(),c.delete(),s.delete(),o.delete(),a.delete(),i.delete(),p}function Zu(e,t,n){let r=new e.BRepBuilderAPI_Sewing(n,!0,!0,!0,!1);for(let e of t)r.Add(e);let i=new e.Message_ProgressRange_1;r.Perform(i),i.delete();let a=r.SewedShape();r.delete();let o=new e.ShapeFix_Solid_1;try{let t=e.TopoDS_Cast.Shell(a);return o.SolidFromShell(t)}catch{return a}finally{o.delete()}}function Qu(e,t){let n=new e.ShapeFix_Shape_1(t),r=new e.Message_ProgressRange_1;n.Perform(r);let i=n.Shape();return r.delete(),n.delete(),i}function $u(e,t){let n=new e.ShapeFix_Wire_1;n.Load_1(t),n.FixSelfIntersection();let r=n.Wire();return n.delete(),r}function ed(){return{gaussian:0,mean:0,max:0,min:0,maxDirection:[1,0,0],minDirection:[0,1,0]}}function td(e,t,n,r,i,a){let o=e*n-t*t;if(Math.abs(o)<1e-15)return null;let s=(e*a-2*t*i+n*r)/(2*o),c=(r*a-i*i)/o,l=Math.sqrt(Math.max(0,s*s-c)),u=s+l,d=s-l,f=(n*i-t*a)/o,p=(e*i-t*r)/o,m=(n*r-t*i)/o,h,g;return Math.abs(f)>1e-15?(h=f,g=u-m):Math.abs(p)>1e-15?(h=u-(e*a-t*i)/o,g=p):(h=1,g=0),{mean:s,gaussian:c,k1:u,k2:d,du1:h,dv1:g}}function nd(e,t,n,r){let i=new e.BRepAdaptor_Surface_2(t,!1),a=new e.gp_Pnt_1,o=new e.gp_Vec_1,s=new e.gp_Vec_1,c=new e.gp_Vec_1,l=new e.gp_Vec_1,u=new e.gp_Vec_1;i.D2(n,r,a,o,s,c,l,u);let d=o.Dot(o),f=o.Dot(s),p=s.Dot(s),m=o.Crossed(s),h=m.Magnitude(),g=ed();if(h>=1e-15){m.Divide(h);let e=td(d,f,p,c.Dot(m),u.Dot(m),l.Dot(m));e&&(g={gaussian:e.gaussian,mean:e.mean,max:e.k1,min:e.k2,maxDirection:rd(o,s,e.du1,e.dv1),minDirection:rd(o,s,-e.dv1,e.du1)})}return a.delete(),o.delete(),s.delete(),c.delete(),l.delete(),u.delete(),m.delete(),i.delete(),g}function rd(e,t,n,r){let i=n*e.X()+r*t.X(),a=n*e.Y()+r*t.Y(),o=n*e.Z()+r*t.Z(),s=Math.sqrt(i*i+a*a+o*o);return s<1e-15?[1,0,0]:[i/s,a/s,o/s]}function id(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.SurfaceProperties_2(t,n,1e-7,!0);let r=n.CentreOfMass(),i=[r.X(),r.Y(),r.Z()];return r.delete(),n.delete(),i}function ad(e,t){let n=new e.BRepExtrema_DistShapeShape_1;return n.LoadS1(t),{distanceTo(t){n.LoadS2(t);let r=new e.Message_ProgressRange_1;if(n.Perform(r),r.delete(),!n.IsDone())throw Error(`BRepExtrema_DistShapeShape failed`);let i=n.Value(),a=n.PointOnShape1(1),o=n.PointOnShape2(1),s={value:i,point1:[a.X(),a.Y(),a.Z()],point2:[o.X(),o.Y(),o.Z()]};return a.delete(),o.delete(),s},dispose(){n.delete()}}}function od(e,t,n,r,i){let a=new e.HLRBRep_Algo_1;a.Add_2(t,0);let o=new e.gp_Pnt_3(n[0],n[1],n[2]),s=new e.gp_Dir_5(r[0],r[1],r[2]),c;if(i){let t=new e.gp_Dir_5(i[0],i[1],i[2]);c=new e.gp_Ax2_2(o,s,t),t.delete()}else c=new e.gp_Ax2_4(o,s);let l=new e.HLRAlgo_Projector_2(c);a.Projector_1(l),a.Update(),a.Hide_1();let u=new e.Handle_HLRBRep_Algo_2(a),d=new e.HLRBRep_HLRToShape(u),f={visible:{outline:d.OutLineVCompound_1(),smooth:d.Rg1LineVCompound_1(),sharp:d.VCompound_1()},hidden:{outline:d.OutLineHCompound_1(),smooth:d.Rg1LineHCompound_1(),sharp:d.HCompound_1()}};for(let t of[f.visible,f.hidden])for(let n of[t.outline,t.smooth,t.sharp])n.IsNull()||e.BRepLib.BuildCurves3d_2(n);return d.delete(),u.delete(),l.delete(),c.delete(),s.delete(),o.delete(),f}function sd(e,t,n,r,i,a,o){let s=a*Math.PI/180,c=+!!o,l=new e.BRepFeat_MakeDPrism(t,n,r,s,c,!0);if(i!==null){let t=new e.Message_ProgressRange_1;l.Perform_1(i,t),t.delete()}else l.PerformThruAll();let u=l.Shape();return l.delete(),u}function cd(e,t){let n=new e.TCollection_ExtendedString_2(`XmlOcaf`,!0),r=new e.TDocStd_Document(n);n.delete(),e.XCAFDoc_ShapeTool.SetAutoNaming(!1);let i=r.Main(),a=e.XCAFDoc_DocumentTool.ShapeTool(i).get(),o=e.XCAFDoc_DocumentTool.ColorTool(i).get();for(let n of t){let t=a.NewShape();a.SetShape(t,n.shape);let r=new e.TCollection_ExtendedString_2(n.name,!0);if(e.TDataStd_Name.Set_1(t,r),r.delete(),n.color){let[r,i,a,s]=n.color,c=new e.Quantity_ColorRGBA_5(r/255,i/255,a/255,s/255);o.SetColor_3(t,c,e.XCAFDoc_ColorType.XCAFDoc_ColorSurf),c.delete()}}return a.UpdateAssemblies(),r}function ld(e,t,n={}){if(n.unit||n.modelUnit){new e.STEPCAFControl_Writer_1().delete();let t=(n.modelUnit??n.unit??`MM`).toUpperCase(),r=(n.unit??n.modelUnit??`MM`).toUpperCase();e.Interface_Static.SetCVal(`xstep.cascade.unit`,t),e.Interface_Static.SetCVal(`write.step.unit`,r)}let r=new e.XSControl_WorkSession,i=new e.Handle_XSControl_WorkSession_2(r),a=new e.STEPCAFControl_Writer_2(i,!1);a.SetColorMode(!0),a.SetLayerMode(!0),a.SetNameMode(!0),e.Interface_Static.SetIVal(`write.surfacecurve.mode`,!0),e.Interface_Static.SetIVal(`write.precision.mode`,0),e.Interface_Static.SetIVal(`write.step.assembly`,2),e.Interface_Static.SetIVal(`write.step.schema`,5);let o=new e.Handle_TDocStd_Document_2(t),s=new e.Message_ProgressRange_1;a.Transfer_1(o,e.STEPControl_StepModelType.STEPControl_AsIs,null,s),s.delete();let c=pl(`_xcaf_export`,`step`),l=a.Write(c),u=``;if(l===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+c);u=new TextDecoder().decode(t),e.FS.unlink(`/`+c)}return a.delete(),i.delete(),u}function ud(e,t){new e.STEPCAFControl_Writer_1().delete();let n=new e.TCollection_ExtendedString_2(`XmlOcaf`,!0),r=new e.TDocStd_Document(n);n.delete();let i=r.Main(),a=e.XCAFDoc_DocumentTool.ShapeTool(i).get(),o=e.XCAFDoc_DocumentTool.ColorTool(i).get();e.XCAFDoc_ShapeTool.SetAutoNaming(!1);for(let n of t){let t=a.AddShape(n.shape,!1,!0);if(n.name){let r=new e.TCollection_ExtendedString_2(n.name,!0);e.TDataStd_Name.Set_1(t,r),r.delete()}if(n.color){let[r,i,a,s]=n.color,c=new e.Quantity_ColorRGBA_5(r/255,i/255,a/255,s/255);o.SetColor_3(t,c,e.XCAFDoc_ColorType.XCAFDoc_ColorSurf),c.delete()}}let s=new e.XSControl_WorkSession,c=new e.Handle_XSControl_WorkSession_2(s),l=new e.STEPCAFControl_Writer_2(c,!1),u=new e.Handle_TDocStd_Document_2(r),d=new e.Message_ProgressRange_1;l.Transfer_1(u,e.STEPControl_StepModelType.STEPControl_AsIs,null,d),d.delete();let f=pl(`_step_cfg_export`,`step`),p=l.Write(f),m=``;if(p===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+f);m=new TextDecoder().decode(t),e.FS.unlink(`/`+f)}return l.delete(),c.delete(),u.delete(),r.delete(),m}function dd(e,t){let n=new e.STEPControl_Writer_1;n.Model(!0).delete();let r=new e.Message_ProgressRange_1;for(let i of t)n.Transfer(i.shape,e.STEPControl_StepModelType.STEPControl_AsIs,!0,r);let i=pl(`_step_cfg_export`,`step`),a=n.Write(i);if(n.delete(),r.delete(),a===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+i);return e.FS.unlink(`/`+i),new TextDecoder().decode(t)}throw Error(`STEP configured export failed: writer did not complete successfully`)}function fd(e,t,n={}){let r=n.unit??`MM`,i=n.modelUnit??r,a=n.schema??5;return e.Interface_Static.SetCVal(`xstep.cascade.unit`,i),e.Interface_Static.SetCVal(`write.step.unit`,r),e.Interface_Static.SetIVal(`write.surfacecurve.mode`,!0),e.Interface_Static.SetIVal(`write.precision.mode`,0),e.Interface_Static.SetIVal(`write.step.assembly`,2),e.Interface_Static.SetIVal(`write.step.schema`,a),t.some(e=>e.name||e.color)?ud(e,t):dd(e,t)}function pd(e){return{composeTransform:t=>Pu(e,t),applyComposedTransformWithHistory:(t,n,r,i)=>Fu(e,t,n,r,i),sweepPipeShell:(t,n,r)=>Lu(e,t,n,r??{}),loftAdvanced:(t,n)=>Ru(e,t,n??{}),buildExtrusionLaw:(t,n,r)=>zu(e,t,n,r),revolveVec:(t,n,r,i)=>Bu(e,t,n,r,i),positionOnCurve:(t,n,r)=>Uu(e,t,n,r),linearPattern:(t,n,r,i)=>Vu(e,t,n,r,i),circularPattern:(t,n,r,i,a)=>Hu(e,t,n,r,i,a),makeNonPlanarFace:t=>Wu(e,t),addHolesInFace:(t,n)=>Gu(e,t,n),removeHolesFromFace:t=>Ku(e,t),makeFaceOnSurface:(t,n)=>qu(e,t,n),bsplineSurface:(t,n,r)=>Ju(e,t,n,r),triangulatedSurface:(t,n,r)=>Yu(e,t,n,r),sewAndSolidify:(t,n)=>Zu(e,t,n),fixShape:t=>Qu(e,t),fixSelfIntersection:t=>$u(e,t),surfaceCurvature:(t,n,r)=>nd(e,t,n,r),surfaceCenterOfMass:t=>id(e,t),createDistanceQuery:t=>ad(e,t),projectEdges:(t,n,r,i)=>od(e,t,n,r,i),draftPrism:(t,n,r,i,a,o)=>sd(e,t,n,r,i,a,o),generalTransformNonOrthogonal:(t,n,r)=>Nu(e,t,n,r),createXCAFDocument:t=>cd(e,t),writeXCAFToSTEP:(t,n)=>ld(e,t,n??{}),exportSTEPConfigured:(t,n)=>fd(e,t,n??{})}}var md=()=>{};function hd(e){return e}function gd(e){let t=hd(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return t}function _d(e){return e}function vd(e,t){return{x:e,y:t}}function yd(e,t){let n=Math.sqrt(e*e+t*t);if(n<1e-15)throw Error(`occt: createDirection2d called with zero-length vector`);return{x:e/n,y:t/n}}function bd(e,t){return{x:e,y:t}}function xd(e,t,n,r){return{px:e,py:t,dx:n,dy:r,delete:md}}function Sd(e){return e}function Cd(e){return e}function wd(e,t,n,r){return x(e,t,n,r)}function Td(e,t,n,r){return S(e,t,n,r)}function Ed(e,t,n,r,i,a){let o=2*(e*(r-a)+n*(a-t)+i*(t-r));if(Math.abs(o)<1e-12)return x(e,t,i,a);let s=((e*e+t*t)*(r-a)+(n*n+r*r)*(a-t)+(i*i+a*a)*(t-r))/o,c=((e*e+t*t)*(i-n)+(n*n+r*r)*(e-i)+(i*i+a*a)*(n-e))/o,l=Math.sqrt((e-s)**2+(t-c)**2),u=Math.atan2(t-c,e-s),d=Math.atan2(r-c,n-s),f=Math.atan2(a-c,i-s),p=d-u;p<0&&(p+=2*Math.PI);let m=f-u;m<0&&(m+=2*Math.PI);let h=p<m,g=S(s,c,l,h);if(!h){let e=-u,t=-f;return t<e-1e-9&&(t+=2*Math.PI),{__bk2d:`trimmed`,basis:g,tStart:e,tEnd:t}}let _=f;return _<u-1e-9&&(_+=2*Math.PI),{__bk2d:`trimmed`,basis:g,tStart:u,tEnd:_}}function Dd(e,t,n,r,i,a){let o=Math.sqrt(n*n+r*r),s=o>0?n/o:0,c=o>0?r/o:0,l=e-i,u=t-a,d=2*(u*s-l*c);if(Math.abs(d)<1e-12)return x(e,t,i,a);let f=-(l*l+u*u)/d,p=e-f*c,m=t+f*s,h=Math.abs(f),g=Math.atan2(t-m,e-p),_=Math.atan2(a-m,i-p),v=-(t-m)/h,y=(e-p)/h,b=s*v+c*y,S;if(b>0){let e=_-g;e<=0&&(e+=2*Math.PI),S=g+e/2}else{let e=_-g;e>=0&&(e-=2*Math.PI),S=g+e/2}return Ed(e,t,p+h*Math.cos(S),m+h*Math.sin(S),i,a)}function Od(e,t,n,r,i,a,o){return C(e,t,n,r,i,a,o)}function kd(e,t,n,r,i,a,o,s,c){return{__bk2d:`trimmed`,basis:C(e,t,n,r,o,s,c),tStart:i,tEnd:a}}function Ad(e){return w(e)}function jd(e,t){let n=e.length,r=Math.min(3,n-1),i=[],a=[];i.push(0),a.push(r+1);let o=n-r-1;for(let e=1;e<=o;e++)i.push(e/(o+1)),a.push(1);return i.push(1),a.push(r+1),{__bk2d:`bspline`,poles:[...e],knots:i,multiplicities:a,degree:r,isPeriodic:!1}}function Md(e,t){return _(hd(e),t)}function Nd(e,t){return{point:_(hd(e),t),tangent:v(hd(e),t)}}function Pd(e){return y(hd(e))}function Fd(e){return b(gd(e))}function Id(e,t,n){return{__bk2d:`trimmed`,basis:hd(e),tStart:t,tEnd:n}}function Ld(e){return JSON.parse(JSON.stringify(e))}function Rd(e,t){let n=hd(e),r=y(n),i=[];for(let e=0;e<=30;e++){let a=r.first+(r.last-r.first)*e/30,[o,s]=_(n,a),[c,l]=v(n,a),u=Math.sqrt(c*c+l*l);u>1e-12?i.push([o-l/u*t,s+c/u*t]):i.push([o,s])}return jd(i)}function zd(e,t,n){return ee(hd(e),t,n)}function Bd(e,t,n,r){return te(hd(e),t,n,r)}function Vd(e,t,n,r){return ne(hd(e),t,n,r)}function Hd(e,t,n){return re(hd(e),t,n)}function Ud(e,t,n,r,i){return ie(hd(e),t,n,r,i)}function Wd(e,t,n,r,i,a){return ef(e,qd(t,n,r,i,a))}function Gd(e,t,n){return{m:e,tx:t,ty:n,delete:md}}function Kd(){return Gd([1,0,0,0,1,0,0,0,1],0,0)}function qd(e,n,r,i,a){let o=Math.sqrt(r*r+i*i);if(o<1e-15)return Kd();let s=-i/o,c=r/o,l=a-1,u=[1+l*s*s,l*s*c,0,l*c*s,1+l*c*c,0,0,0,1];return Gd(u,e-t(u,0)*e-t(u,1)*n,n-t(u,3)*e-t(u,4)*n)}function Jd(e,t){return Gd([1,0,0,0,1,0,0,0,1],e,t)}function Yd(e,n,r,i,a,o,s){if(r===`axis`&&o!==void 0&&s!==void 0){let r=Math.sqrt(o*o+s*s),c=o/r,l=s/r,u=[2*c*c-1,2*c*l,0,2*c*l,2*l*l-1,0,0,0,1],d=i??e,f=a??n;return Gd(u,d-t(u,0)*d-t(u,1)*f,f-t(u,3)*d-t(u,4)*f)}return Gd([-1,0,0,0,-1,0,0,0,1],2*e,2*n)}function Xd(e,t,n){let r=Math.cos(e),i=Math.sin(e);return Gd([r,-i,0,i,r,0,0,0,1],t-r*t+i*n,n-i*t-r*n)}function Zd(e,t,n){return Gd([e,0,0,0,e,0,0,0,1],t*(1-e),n*(1-e))}function Qd(e,t,n){e.tx=t,e.ty=n}function $d(e,n){let r=e.m,i=n.m,a=e=>t(r,e),o=e=>t(i,e);e.m=[a(0)*o(0)+a(1)*o(3)+a(2)*o(6),a(0)*o(1)+a(1)*o(4)+a(2)*o(7),a(0)*o(2)+a(1)*o(5)+a(2)*o(8),a(3)*o(0)+a(4)*o(3)+a(5)*o(6),a(3)*o(1)+a(4)*o(4)+a(5)*o(7),a(3)*o(2)+a(4)*o(5)+a(5)*o(8),a(6)*o(0)+a(7)*o(3)+a(8)*o(6),a(6)*o(1)+a(7)*o(4)+a(8)*o(7),a(6)*o(2)+a(7)*o(5)+a(8)*o(8)];let s=e.tx,c=e.ty,l=Number(n.tx)||0,u=Number(n.ty)||0;e.tx=a(0)*l+a(1)*u+s,e.ty=a(3)*l+a(4)*u+c}function ef(e,n){let r=hd(e),i=n.m??[1,0,0,0,1,0,0,0,1],a=Number(n.tx)||0,o=Number(n.ty)||0,s=t(i,0),c=t(i,1),l=t(i,3),u=t(i,4);if(Math.abs(s-1)<1e-12&&Math.abs(u-1)<1e-12&&Math.abs(c)<1e-12&&Math.abs(l)<1e-12)return ee(r,a,o);let d=y(r),f=[];for(let e=0;e<=20;e++){let[t,n]=_(r,d.first+(d.last-d.first)*e/20);f.push([s*t+c*n+a,l*t+u*n+o])}return w(f)}function tf(e,t,n){let r=ae(hd(e),hd(t),n),i=r.segments.map(e=>Object.assign(e,{delete(){}}));return{points:r.points,segments:i}}function nf(e,t,n){let r=hd(e),i=y(r);if(r.__bk2d===`line`){let e=t-r.ox,a=n-r.oy,o=Math.max(i.first,Math.min(i.last,e*r.dx+a*r.dy)),[s,c]=_(r,o);return{param:o,distance:Math.sqrt((s-t)**2+(c-n)**2)}}if(r.__bk2d===`circle`){let e=Math.atan2(n-r.cy,t-r.cx),i=r.sense?e:-e;for(;i<0;)i+=2*Math.PI;for(;i>2*Math.PI;)i-=2*Math.PI;let[a,o]=_(r,i);return{param:i,distance:Math.sqrt((a-t)**2+(o-n)**2)}}if(!isFinite(i.first)||!isFinite(i.last))return null;let a=i.first,o=1/0,s=(i.last-i.first)/200;for(let e=0;e<=200;e++){let c=i.first+e*s,[l,u]=_(r,c),d=(l-t)**2+(u-n)**2;d<o&&(o=d,a=c)}for(let e=0;e<10;e++){let[e,o]=_(r,a),[s,c]=v(r,a),l=(e-t)*s+(o-n)*c,u=s*s+c*c;if(u<1e-20)break;let d=l/u,f=Math.max(i.first,Math.min(i.last,a-d));if(Math.abs(f-a)<1e-14)break;a=f}let[c,l]=_(r,a);return{param:a,distance:Math.sqrt((c-t)**2+(l-n)**2)}}function rf(e,t,n,r,i,a){let o=hd(e),s=hd(t),c=n,l=i,u=1/0;for(let e=0;e<=50;e++){let t=n+(r-n)*e/50,[d,f]=_(o,t);for(let e=0;e<=50;e++){let n=i+(a-i)*e/50,[r,o]=_(s,n),p=(r-d)**2+(o-f)**2;p<u&&(u=p,c=t,l=n)}}let d=c,f=l;for(let c=0;c<20;c++){let[c,l]=_(s,f),u=nf(e,c,l);if(u){let e=Math.max(n,Math.min(r,u.param)),t=Math.abs(e-d)<1e-12;if(d=e,t)break}let[p,m]=_(o,d),h=nf(t,p,m);if(h){let e=Math.max(i,Math.min(a,h.param)),t=Math.abs(e-f)<1e-12;if(f=e,t)break}}let[p,m]=_(o,d),[h,g]=_(s,f);return Math.sqrt((h-p)**2+(g-m)**2)}function af(e,n,r,i){let a=hd(e),o=y(a),s=Math.max(3,{C0:1,C1:2,C2:3,C3:4}[r]??4),c=Math.max(100,i*10),l=[],u=1/0;for(let e=0;e<3&&u>n;e++){l=[];for(let e=0;e<=c;e++){let t=o.first+(o.last-o.first)*e/c;l.push(_(a,t))}u=0;for(let e=0;e<c;e++){let[n,r]=_(a,o.first+(o.last-o.first)*(e+.5)/c),i=t(l,e),s=t(l,e+1),d=(i[0]+s[0])/2,f=(i[1]+s[1])/2,p=Math.sqrt((n-d)**2+(r-f)**2);p>u&&(u=p)}u>n&&(c=Math.min(c*2,500))}return jd(l,{degMax:s})}function of(e){let n=gd(e);if(n.__bk2d===`bezier`)return[e];if(n.__bk2d!==`bspline`)return of(af(e,1e-6,`C2`,10));let r=y(hd(e)),i=r.first,a=r.last,o=[];for(let e of n.knots)e>i+1e-12&&e<a-1e-12&&o.push(e);let s=[i,...o,a],c=[];for(let e=0;e<s.length-1;e++){let r=t(s,e),i=t(s,e+1),a=i-r;if(a<1e-15)continue;let o=_(n,r),l=_(n,i),u=v(n,r),d=v(n,i),f=a/3,p={__bk2d:`bezier`,poles:[o,[o[0]+u[0]*f,o[1]+u[1]*f],[l[0]-d[0]*f,l[1]-d[1]*f],l]};c.push(p)}return c.length>0?c:[e]}function sf(){return ge()}function cf(e,t,n){_e(_d(e),hd(t),n)}function lf(e){let t=_d(e);return{xMin:t.xMin,yMin:t.yMin,xMax:t.xMax,yMax:t.yMax}}function uf(e,t){let n=_d(e),r=_d(t);n.xMin=Math.min(n.xMin,r.xMin),n.yMin=Math.min(n.yMin,r.yMin),n.xMax=Math.max(n.xMax,r.xMax),n.yMax=Math.max(n.yMax,r.yMax)}function df(e,t){let n=_d(e),r=_d(t);return n.xMax<r.xMin||r.xMax<n.xMin||n.yMax<r.yMin||r.yMax<n.yMin}function ff(e,t,n){let r=_d(e);return t<r.xMin||t>r.xMax||n<r.yMin||n>r.yMax}function pf(e){let t=gd(e);return t.__bk2d===`circle`?{cx:t.cx,cy:t.cy,radius:t.radius,isDirect:t.sense}:null}function mf(e){let t=gd(e);return t.__bk2d===`ellipse`?{majorRadius:t.majorRadius,minorRadius:t.minorRadius,xAxisAngle:t.xDirAngle,isDirect:t.sense}:null}function hf(e){let t=gd(e);return t.__bk2d===`bezier`?[...t.poles]:null}function gf(e){let t=gd(e);return t.__bk2d===`bezier`?t.poles.length-1:null}function _f(e){let t=gd(e);return t.__bk2d===`bspline`?{poles:[...t.poles],knots:[...t.knots],multiplicities:[...t.multiplicities],degree:t.degree,isPeriodic:t.isPeriodic}:null}function vf(e){return me(hd(e))}function yf(e){return he(e)}function bf(e,t){let n=hd(e),r=y(n),i=[r.first,...[...t].sort((e,t)=>e-t),r.last],a=[];for(let e=0;e<i.length-1;e++)a.push({__bk2d:`trimmed`,basis:n,tStart:i[e],tEnd:i[e+1]});return a}function xf(e,t,n){let r=new e.gp_Pnt_3(t[0],t[1],t[2]),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.BRepBuilderAPI_MakeEdge_3(r,i),o=a.Edge();return a.delete(),r.delete(),i.delete(),o}function Sf(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.GC_MakeArcOfCircle_4(i,a,o).Value().get(),c=new e.Handle_Geom_Curve_2(s),l=new e.BRepBuilderAPI_MakeEdge_24(c),u=l.Edge();return l.delete(),c.delete(),i.delete(),a.delete(),o.delete(),u}function Cf(e,n){let r=new e.TColgp_Array1OfPnt_2(1,n.length),i=new e.gp_Pnt_1;for(let e=0;e<n.length;e++){let a=t(n,e);i.SetCoord_2(a[0],a[1],a[2]),r.SetValue_1(e+1,i)}i.delete();let a=new e.GeomAPI_PointsToBSpline_2(r,3,8,e.GeomAbs_Shape.GeomAbs_C2,1e-6);if(r.delete(),!a.IsDone())throw a.delete(),Error(`Interpolation failed — GeomAPI_PointsToBSpline did not converge`);let o=a.Curve(),s=new e.Handle_Geom_Curve_2(o.get()),c=new e.BRepBuilderAPI_MakeEdge_24(s),l=c.Edge();return c.delete(),a.delete(),l}function wf(e,n,r,i,a){let o=hd(n),s=[i[1]*a[2]-i[2]*a[1],i[2]*a[0]-i[0]*a[2],i[0]*a[1]-i[1]*a[0]],c=(e,t)=>[r[0]+e*a[0]+t*s[0],r[1]+e*a[1]+t*s[1],r[2]+e*a[2]+t*s[2]];if(o.__bk2d===`line`)return xf(e,c(o.ox,o.oy),c(o.ox+o.dx*o.len,o.oy+o.dy*o.len));if(o.__bk2d===`circle`||o.__bk2d===`trimmed`){let t=o;for(;t.__bk2d===`trimmed`;)t=t.basis;if(t.__bk2d===`circle`){let n=t,r=c(n.cx,n.cy),a=n.sense?i:[-i[0],-i[1],-i[2]];if(o.__bk2d===`circle`){let t=new e.gp_Pnt_3(r[0],r[1],r[2]),i=new e.gp_Dir_5(a[0],a[1],a[2]),o=new e.gp_Ax2_4(t,i),s=new e.gp_Circ_2(o,n.radius),c=new e.BRepBuilderAPI_MakeEdge_8(s),l=c.Edge();return c.delete(),s.delete(),o.delete(),i.delete(),t.delete(),l}let s=y(o),[l,u]=_(o,s.first),[d,f]=_(o,(s.first+s.last)/2),[p,m]=_(o,s.last);return Sf(e,c(l,u),c(d,f),c(p,m))}}if(o.__bk2d===`bezier`||o.__bk2d===`bspline`){let n=o.poles.map(([e,t])=>c(e,t));return n.length===2?xf(e,t(n,0),t(n,1)):Cf(e,n)}let l=y(o),u=[];for(let e=0;e<=60;e++){let[t,n]=_(o,l.first+(l.last-l.first)*e/60);u.push(c(t,n))}return Cf(e,u)}function Tf(e,t,n){let r=hd(t),i=y(r),a=[];for(let e=0;e<=60;e++){let[t,o]=_(r,i.first+(i.last-i.first)*e/60),s=n.get().Value(t,o);a.push([s.X(),s.Y(),s.Z()]),s.delete()}return Cf(e,a)}function Ef(e,t){return e.BRep_Tool.Surface_2(t)}function Df(e,t,n){let r=new e.BRepAdaptor_Curve2d_2(t,n),i=Number(r.FirstParameter()),a=Number(r.LastParameter()),o=[];for(let e=0;e<=30;e++){let t=i+(a-i)*e/30,n=r.Value(t);o.push([n.X(),n.Y()]),n.delete()}return r.delete(),jd(o)}function Of(e,t){e.BRepLib.BuildCurves3d_2(t)}function kf(e,t,n,r){let i=new e.ShapeFix_Wire_2(t,n,r);i.FixEdgeCurves();let a=i.Wire();return i.delete(),a}function Af(e,t,n={}){let{order:r=3,nbPtsOnCur:i=15,nbIter:a=2,tol3d:o=1e-5,tol2d:s=1e-4,maxDeg:c=8,maxSeg:l=9}=n,u=new e.BRepOffsetAPI_MakeFilling(r,i,a,!1,o,s,.01,.1,c,l);for(let n=0;n<t.length;n++){let r=$o(e,t[n],`edge`);for(let t of r)u.Add_1(t,e.GeomAbs_Shape.GeomAbs_C0,n===0)}let d=new e.Message_ProgressRange_1;u.Build(d);let f=u.Shape();return u.delete(),d.delete(),f}function jf(e){return{wrapCurve2dHandle:e=>Sd(e),createCurve2dAdaptor:e=>Cd(e),createPoint2d:(e,t)=>vd(e,t),createDirection2d:(e,t)=>yd(e,t),createVector2d:(e,t)=>bd(e,t),createAxis2d:(e,t,n,r)=>xd(e,t,n,r),makeLine2d:(e,t,n,r)=>wd(e,t,n,r),makeCircle2d:(e,t,n,r)=>Td(e,t,n,r),makeArc2dThreePoints:(e,t,n,r,i,a)=>Ed(e,t,n,r,i,a),makeArc2dTangent:(e,t,n,r,i,a)=>Dd(e,t,n,r,i,a),makeEllipse2d:(e,t,n,r,i,a,o)=>Od(e,t,n,r,i,a,o),makeEllipseArc2d:(e,t,n,r,i,a,o,s,c)=>kd(e,t,n,r,i,a,o,s,c),makeBezier2d:e=>Ad(e),makeBSpline2d:(e,t)=>jd(e,t),evaluateCurve2d:(e,t)=>Md(e,t),evaluateCurve2dD1:(e,t)=>Nd(e,t),getCurve2dBounds:e=>Pd(e),getCurve2dType:e=>Fd(e),trimCurve2d:(e,t,n)=>Id(e,t,n),reverseCurve2d:e=>{},copyCurve2d:e=>Ld(e),offsetCurve2d:(e,t)=>Rd(e,t),translateCurve2d:(e,t,n)=>zd(e,t,n),rotateCurve2d:(e,t,n,r)=>Bd(e,t,n,r),scaleCurve2d:(e,t,n,r)=>Vd(e,t,n,r),mirrorCurve2dAtPoint:(e,t,n)=>Hd(e,t,n),mirrorCurve2dAcrossAxis:(e,t,n,r,i)=>Ud(e,t,n,r,i),affinityTransform2d:(e,t,n,r,i,a)=>Wd(e,t,n,r,i,a),createIdentityGTrsf2d:()=>Kd(),createAffinityGTrsf2d:(e,t,n,r,i)=>qd(e,t,n,r,i),createTranslationGTrsf2d:(e,t)=>Jd(e,t),createMirrorGTrsf2d:(e,t,n,r,i,a,o)=>Yd(e,t,n,r,i,a,o),createRotationGTrsf2d:(e,t,n)=>Xd(e,t,n),createScaleGTrsf2d:(e,t,n)=>Zd(e,t,n),setGTrsf2dTranslationPart:(e,t,n)=>{Qd(e,t,n)},multiplyGTrsf2d:(e,t)=>{$d(e,t)},transformCurve2dGeneral:(e,t)=>ef(e,t),intersectCurves2d:(e,t,n)=>tf(e,t,n),projectPointOnCurve2d:(e,t,n)=>nf(e,t,n),distanceBetweenCurves2d:(e,t,n,r,i,a)=>rf(e,t,n,r,i,a),approximateCurve2dAsBSpline:(e,t,n,r)=>af(e,t,n,r),decomposeBSpline2dToBeziers:e=>of(e),createBoundingBox2d:()=>sf(),addCurveToBBox2d:(e,t,n)=>{cf(e,t,n)},getBBox2dBounds:e=>lf(e),mergeBBox2d:(e,t)=>{uf(e,t)},isBBox2dOut:(e,t)=>df(e,t),isBBox2dOutPoint:(e,t,n)=>ff(e,t,n),getCurve2dCircleData:e=>pf(e),getCurve2dEllipseData:e=>mf(e),getCurve2dBezierPoles:e=>hf(e),getCurve2dBezierDegree:e=>gf(e),getCurve2dBSplineData:e=>_f(e),serializeCurve2d:e=>vf(e),deserializeCurve2d:e=>yf(e),splitCurve2d:(e,t)=>bf(e,t),liftCurve2dToPlane:(t,n,r,i)=>wf(e,t,n,r,i),buildEdgeOnSurface:(t,n)=>Tf(e,t,n),extractSurfaceFromFace:t=>Ef(e,t),extractCurve2dFromEdge:(t,n)=>Df(e,t,n),buildCurves3d:t=>{Of(e,t)},fixWireOnFace:(t,n,r)=>kf(e,t,n,r),fillSurface:(t,n)=>Af(e,t,n)}}function Mf(){let e=e=>()=>{throw Error(`${e} is only available with the brepkit kernel`)};return{export3MF:e(`export3MF`),exportGLB:e(`exportGLB`),exportOBJ:e(`exportOBJ`),exportPLY:e(`exportPLY`),import3MF:e(`import3MF`),importOBJ:e(`importOBJ`),importGLB:e(`importGLB`),filletVariable:e(`filletVariable`),helicalSweep:e(`helicalSweep`),sweepWithOptions:e(`sweepWithOptions`),defeature:e(`defeature`),detectSmallFeatures:e(`detectSmallFeatures`),recognizeFeatures:e(`recognizeFeatures`),meshBoolean:(()=>{throw Error(`meshBoolean is only available with the brepkit kernel`)}),edgeToFaceMap:e(`edgeToFaceMap`),sharedEdges:e(`sharedEdges`),adjacentFaces:e(`adjacentFaces`),curveDegreeElevate:e(`curveDegreeElevate`),curveKnotInsert:e(`curveKnotInsert`),curveKnotRemove:e(`curveKnotRemove`),curveSplit:e(`curveSplit`),approximateSurfaceLspia:e(`approximateSurfaceLspia`),untrimFace:e(`untrimFace`),mergeCoincidentVertices:e(`mergeCoincidentVertices`),removeDegenerateEdges:e(`removeDegenerateEdges`),fixFaceOrientations:e(`fixFaceOrientations`),classifyPointRobust:e(`classifyPointRobust`),classifyPointWinding:e(`classifyPointWinding`),executeBatch:e(`executeBatch`),checkpoint:e(`checkpoint`),checkpointCount:e(`checkpointCount`),restoreCheckpoint:e(`restoreCheckpoint`),discardCheckpoint:e(`discardCheckpoint`)}}function Nf(e){return{draft:(t,n,r,i,a)=>ju(e,t,n,r,i,a,[],1).shape}}var Pf=class{oc;kernelId=`occt`;capabilities=r;constructor(e){this.oc=e,Object.assign(this,Ts(e),Os(e),qs(e),Bs(e),yc(e),Nc(e),Yc(e),sl(e),dl(e),bl(e),Jo(e),cs(e),Ql(e),tu(e),iu(e),cu(e),Mu(e),pd(e),jf(e),Nf(e),Mf())}},Ff=()=>{};function If(e){return typeof e==`object`&&!!e&&e.__brepkit}function Lf(e,t){return{__brepkit:!0,type:e,id:t,delete:Ff,HashCode(e){return t%e},IsNull(){return!1}}}function L(e){return Lf(`solid`,e)}function Rf(e){return Lf(`face`,e)}function zf(e){return Lf(`edge`,e)}function Bf(e){return Lf(`wire`,e)}function Vf(e){return Lf(`shell`,e)}function Hf(e){let t=Lf(`compound`,e);return rp.has(e)?{...t,delete:()=>rp.delete(e)}:t}function Uf(e){return Lf(`vertex`,e)}function R(e,t){if(!If(e))throw Error(`brepkit: expected a BrepkitHandle, got `+typeof e);if(t&&e.type!==t)throw Error(`brepkit: expected ${t} handle, got ${e.type}`);return e.id}function z(e){return Array.from(e)}function Wf(e,t){if(!If(e))throw Error(`brepkit: expected a BrepkitHandle, got `+typeof e);if(e.type!==`solid`)throw Error(`brepkit: ${t} requires a solid, got ${e.type}. Consider using makeCompound() to combine shapes first.`);return e.id}function Gf(e,t,n){if(!If(t))throw Error(`brepkit: expected a BrepkitHandle, got `+typeof t);if(t.type===`solid`)return[t.id];if(t.type===`compound`){let r=z(e.getCompoundSolids(t.id));if(r.length>0)return r;throw Error(`brepkit: ${n} received a compound with no solids.`)}throw Error(`brepkit: ${n} requires a solid or compound of solids, got ${t.type}.`)}function Kf(e,t,n,r,i,a){let o=e-r,s=t-i,c=n-a;return Math.sqrt(o*o+s*s+c*c)}function qf(e){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}function Jf(e,t,n){return[1,0,0,e,0,1,0,t,0,0,1,n,0,0,0,1]}function Yf(e,t=[0,0,1],n=[0,0,0]){let r=e*Math.PI/180,i=Math.cos(r),a=Math.sin(r),o=1-i,s=Math.sqrt(t[0]**2+t[1]**2+t[2]**2),[c,l,u]=[t[0]/s,t[1]/s,t[2]/s],d=o*c*c+i,f=o*c*l-a*u,p=o*c*u+a*l,m=o*l*c+a*u,h=o*l*l+i,g=o*l*u-a*c,_=o*u*c-a*l,v=o*u*l+a*c,y=o*u*u+i,[b,x,S]=n;return[d,f,p,b-(d*b+f*x+p*S),m,h,g,x-(m*b+h*x+g*S),_,v,y,S-(_*b+v*x+y*S),0,0,0,1]}function Xf(e,t){let[n,r,i]=e;return[t,0,0,n*(1-t),0,t,0,r*(1-t),0,0,t,i*(1-t),0,0,0,1]}function Zf(e,n){let r=n=>t(e,n);return[r(0),r(1),r(2),n[0],r(3),r(4),r(5),n[1],r(6),r(7),r(8),n[2],0,0,0,1]}function Qf(e,t){let[n,r,i]=e,a=Math.sqrt(t[0]**2+t[1]**2+t[2]**2),o=t[0]/a,s=t[1]/a,c=t[2]/a,l=2*(n*o+r*s+i*c);return[1-2*o*o,-2*o*s,-2*o*c,l*o,-2*s*o,1-2*s*s,-2*s*c,l*s,-2*c*o,-2*c*s,1-2*c*c,l*c,0,0,0,1]}function $f(e,t){let n=Array(16).fill(0);for(let r=0;r<4;r++)for(let i=0;i<4;i++)for(let a=0;a<4;a++)n[r*4+i]=n[r*4+i]+e[r*4+a]*t[a*4+i];return n}var ep=.01,tp=9e5;function np(){return tp++}var rp=new Map,ip=new Set;function ap(e,t){ip.has(e)||(ip.add(e),console.warn(`brepkit: ${t}`))}function op(e){return e.optimisation!==void 0||e.simplify!==void 0||e.strategy!==void 0||e.fuzzyValue!==void 0}function sp(e){return e}function cp(e){let t=e;for(;t.__bk2d===`trimmed`;)t=t.basis;return t}function lp(e){return e}function up(e,t){if(typeof t!=`function`)return t;let n;for(let r of e){let e;try{e=t(r)}catch{throw Error(`brepkit does not support variable draft with multiple distinct angles. Use the OCCT kernel for per-face angle variation, or use a uniform angle.`)}if(n===void 0)n=e;else if(e!==n)throw Error(`brepkit does not support variable draft with multiple distinct angles. Use the OCCT kernel for per-face angle variation, or use a uniform angle.`)}if(n===void 0)throw Error(`draft: no faces provided`);return n}function dp(e,t,n){let r=rp.get(t);return r?r.flatMap(t=>t.type===n?[t]:yp(e,t,n)):n===`solid`?z(e.getCompoundSolids(t)).map(L):n===`face`||n===`edge`||n===`vertex`||n===`wire`?z(e.getCompoundSolids(t)).map(L).flatMap(t=>yp(e,t,n)):[]}function fp(e,t,n,r){switch(r){case`solid`:return[t];case`shell`:return z(e.getSolidShells(n)).map(Vf);case`face`:return z(e.getSolidFaces(n)).map(Rf);case`edge`:return z(e.getSolidEdges(n)).map(zf);case`vertex`:return z(e.getSolidVertices(n)).map(Uf);case`wire`:return z(e.getSolidFaces(n)).flatMap(t=>z(e.getFaceWires(t)).map(Bf));default:return[]}}function pp(e,t,n){let r=z(e.getShellFaces(t)).map(Rf),i=new Set,a=[];for(let t of r)for(let r of yp(e,t,n)){let e=R(r);i.has(e)||(i.add(e),a.push(r))}return a}function mp(e,t,n,r){return r===`shell`?[t]:r===`face`?z(e.getShellFaces(n)).map(Rf):r===`edge`||r===`vertex`?pp(e,n,r):[]}function hp(e,t,n,r){return r===`face`?[t]:r===`edge`?z(e.getFaceEdges(n)).map(zf):r===`vertex`?z(e.getFaceVertices(n)).map(Uf):r===`wire`?z(e.getFaceWires(n)).map(Bf):[]}function gp(e,n){let r=z(e.getWireEdges(n)),i=new Set,a=[];for(let n of r){let r=e.getEdgeVertices(n),o=[[t(r,0),t(r,1),t(r,2)],[t(r,3),t(r,4),t(r,5)]];for(let[t,n,r]of o){let o=`${t},${n},${r}`;i.has(o)||(i.add(o),a.push(Uf(e.makeVertex(t,n,r))))}}return a}function _p(e,t,n,r){return r===`wire`?[t]:r===`edge`?z(e.getWireEdges(n)).map(zf):r===`vertex`?gp(e,n):[]}function vp(e,n,r,i){if(i===`edge`)return[n];if(i===`vertex`){let n=e.getEdgeVertices(r),i=e.makeVertex(t(n,0),t(n,1),t(n,2)),a=e.makeVertex(t(n,3),t(n,4),t(n,5));return[Uf(i),Uf(a)]}return[]}function yp(e,t,n){let r=R(t);switch(t.type){case`compound`:return dp(e,r,n);case`solid`:return fp(e,t,r,n);case`shell`:return mp(e,t,r,n);case`face`:return hp(e,t,r,n);case`wire`:return _p(e,t,r,n);case`edge`:return vp(e,t,r,n);default:return[]}}function bp(e,t,n){if(Array.isArray(t))for(let e of t)n(e)}function xp(e,t){if(If(t))return t.type;throw Error(`brepkit: cannot determine shape type of non-brepkit handle`)}function Sp(e,t,n){return If(t)&&If(n)&&t.id===n.id&&t.type===n.type}function Cp(e,t,n){return Sp(e,t,n)}function wp(e,t,n){return t}function Tp(e,t,n){return If(t)?t.id%n:0}function Ep(e,t){return!t||!If(t)}function Dp(e,t){let n=R(t);return e.getShapeOrientation(n)}function Op(e,t){let n=Wf(t,`edgeToFaceMap`);return e.edgeToFaceMap(n)}function kp(e,t,n){let r=R(t,`face`),i=R(n,`face`);return Array.from(e.sharedEdges(r,i)).map(e=>zf(e))}function Ap(e,t,n){let r=Wf(t,`adjacentFaces`),i=R(n,`face`);return Array.from(e.adjacentFaces(r,i)).map(e=>Rf(e))}function jp(e,t){let n=t;return n.type===`face`?[n.id]:n.type===`solid`?z(e.getSolidFaces(n.id)):n.type===`shell`?z(e.getShellFaces(n.id)):[]}function Mp(e,t,n){let r=t.flatMap(t=>jp(e,t)),i=n??1e-7;try{return Vf(e.weldShellsAndFaces(r,i))}catch(e){console.warn(`brepkit: weldShellsAndFaces failed, falling back to sewFaces:`,e)}return Vf(e.sewFaces(r,i))}function Np(e){return{iterShapes:(t,n)=>yp(e,t,n),iterShapeList:(t,n)=>{bp(e,t,n)},shapeType:t=>xp(e,t),isSame:(t,n)=>Sp(e,t,n),isEqual:(t,n)=>Cp(e,t,n),downcast:(t,n)=>wp(e,t,n),hashCode:(t,n)=>Tp(e,t,n),isNull:t=>Ep(e,t),shapeOrientation:t=>Dp(e,t),edgeToFaceMap:t=>Op(e,t),sharedEdges:(t,n)=>kp(e,t,n),adjacentFaces:(t,n)=>Ap(e,t,n),sew:(t,n)=>Mp(e,t,n)}}function Pp(e,t){return n(e.getVertexPosition(R(t,`vertex`)))}function Fp(e,t){return e.getSurfaceType(R(t,`face`))}function Ip(e,n){let r=e.getSurfaceDomain(R(n,`face`));return{uMin:t(r,0),uMax:t(r,1),vMin:t(r,2),vMax:t(r,3)}}function Lp(e,t){return Bf(e.getFaceOuterWire(R(t,`face`)))}function Rp(e,t,r,i){return n(e.evaluateSurfaceNormal(R(t,`face`),r,i))}function zp(e,t,r,i){return n(e.evaluateSurface(R(t,`face`),r,i))}function Bp(e,n,r){try{let i=e.projectPointOnSurface(R(n,`face`),r[0],r[1],r[2]);return[t(i,0),t(i,1)]}catch(e){return console.warn(`brepkit: uvFromPoint failed:`,e),null}}function Vp(e,t,r){return n(e.projectPointOnSurface(R(t,`face`),r[0],r[1],r[2]),2)}function Hp(e,r,i){let a=r,o,s=i;if(a.type===`wire`){let n=z(e.getWireEdges(a.id));o=t(n,n.length-1);let r=0;for(let a of n){let n=e.getEdgeCurveParameters(a),c=t(n,1)-t(n,0);if(i<=r+c||a===o){o=a,s=Math.min(t(n,0)+(i-r),t(n,1));break}r+=c}}else o=R(r,`edge`);let c=e.evaluateEdgeCurveD1(o,s);return{point:n(c,0),tangent:n(c,3)}}function Up(e,n){let r=n;if(r.type===`wire`){let n=z(e.getWireEdges(r.id));if(n.length===0)return[0,0];let i=0;for(let r of n){let n=e.getEdgeCurveParameters(r);i+=t(n,1)-t(n,0)}return[0,i]}let i=e.getEdgeCurveParameters(R(n,`edge`));return[t(i,0),t(i,1)]}function Wp(e,r,i){let a=r;if(a.type===`wire`){let r=z(e.getWireEdges(a.id)),o=0;for(let a of r){let s=e.getEdgeCurveParameters(a),c=t(s,1)-t(s,0);if(i<=o+c||a===r[r.length-1]){let r=t(s,0)+(i-o);return n(e.evaluateEdgeCurve(a,Math.min(r,t(s,1))))}o+=c}return n(e.evaluateEdgeCurve(t(r,0),i))}return n(e.evaluateEdgeCurve(R(r,`edge`),i))}function Gp(e,r){let i=r;if(i.type===`wire`){let r=z(e.getWireEdges(i.id));if(r.length===0)return!1;if(r.length===1)return Kp(e.getEdgeVertices(t(r,0)));let a=[];for(let t of r){let r=e.getEdgeVertices(t);a.push(n(r,0)),a.push(n(r,3))}let o=[];for(let e of a){let t=o.findIndex(t=>Kf(t[0],t[1],t[2],e[0],e[1],e[2])<1e-7);t>=0?o.splice(t,1):o.push(e)}return o.length===0}return Kp(e.getEdgeVertices(R(r,`edge`)))}function Kp(e){return Kf(t(e,0),t(e,1),t(e,2),t(e,3),t(e,4),t(e,5))<1e-7}function qp(e,t){let n=t;try{if(n.type===`edge`||n.type===`wire`&&z(e.getWireEdges(n.id)).length===1)return Gp(e,t)}catch{}return!1}function Jp(e,t){try{if(qp(e,t)){let n=Up(e,t);return n[1]-n[0]}}catch{}return 0}function Yp(e,t){if(t.type===`wire`){let n=yp(e,t,`edge`)[0];return n?e.getEdgeCurveType(R(n,`edge`)):`LINE`}return e.getEdgeCurveType(R(t,`edge`))}function Xp(e,t,n){let r=R(t,`edge`);return zf(e.curveDegreeElevate(r,n))}function Zp(e,t,n,r){let i=R(t,`edge`);return zf(e.curveKnotInsert(i,n,r))}function Qp(e,t,n,r){let i=R(t,`edge`);return zf(e.curveKnotRemove(i,n,r))}function $p(e,n,r){let i=R(n,`edge`),a=e.curveSplit(i,r);return[zf(t(a,0)),zf(t(a,1))]}function em(e,t,n,r,i,a,o,s,c,l){return Rf(e.approximateSurfaceLspia(t,n,r,i,a,o,s,c,l))}function tm(e,t,n,r){let i=R(t,`face`);return Rf(e.untrimFace(i,n,r))}function nm(e,t){return t}function rm(e,t){let r=Nm(e,t);return!r||r.controlPoints.length<6?null:n(r.controlPoints,r.controlPoints.length-6)}function im(e,t){if(If(t)&&t.type===`face`){let n=t.id,r=JSON.parse(e.getAnalyticSurfaceParams(n));if(r.type===`cylinder`)return{radius:r.radius,isDirect:!0}}return null}function am(e,t){let n=JSON.parse(e.getAnalyticSurfaceParams(R(t,`face`))),r=n.type===`cylinder`?n.origin:n.type===`cone`?n.apex:null;if(!r||!n.axis)return null;let[i,a,o]=r,[s,c,l]=n.axis,u=Math.hypot(s,c,l);return u<1e-12?null:{origin:[i,a,o],direction:[s/u,c/u,l/u]}}function om(e,t){return t}function sm(e,n,r,i,a){a!==void 0&&ap(`classify-tolerance`,`classifyPointOnFace() tolerance parameter is not supported; brepkit uses domain-based classification.`);let o=R(n,`face`),s=e.getSurfaceDomain(o);return r<t(s,0)||r>t(s,1)||i<t(s,2)||i>t(s,3)?`out`:`in`}function cm(e,t,n,r){let i=Wf(t,`classifyPointRobust`);return e.classifyPointRobust(i,n[0],n[1],n[2],r)}function lm(e,t,n,r){let i=Wf(t,`classifyPointWinding`);return e.classifyPointWinding(i,n[0],n[1],n[2],r)}function um(e,t,n,r){let i=Wf(t,`detectSmallFeatures`);return Array.from(e.detectSmallFeatures(i,n,r)).map(e=>Rf(e))}function dm(e,t,n){let r=Wf(t,`recognizeFeatures`);return e.recognizeFeatures(r,n)}function fm(e,t,r,i,a){let o=R(t),[s,c,l]=r,[u,d,f]=i,[p,m,h]=a??[1,0,0],g=.1;try{let t=e.boundingBox(o),[r,i,a]=n(t,0),[s,c,l]=n(t,3),u=Kf(r,i,a,s,c,l);u>0&&(g=Math.max(u*.001,1e-6))}catch{}let _=e.projectEdges(o,s,c,l,u,d,f,p,m,h,!0,g),v;try{v=JSON.parse(_)}catch{v={visible:[],hidden:[]}}let y=t=>{let n=[];for(let r of t)for(let t=0;t+3<r.length;t+=2){let i=r[t],a=r[t+1],o=r[t+2],s=r[t+3];i===void 0||a===void 0||o===void 0||s===void 0||i===o&&a===s||n.push(zf(e.makeLineEdge(i,a,0,o,s,0)))}let r=np();return rp.set(r,n),Hf(r)},b=()=>{let e=np();return rp.set(e,[]),Hf(e)};return{visible:{outline:y(v.visible),smooth:b(),sharp:b()},hidden:{outline:y(v.hidden),smooth:b(),sharp:b()}}}function pm(e,t){let n=R(t,`edge`),r=e.getNurbsCurveData(n);if(!r)return null;let i=JSON.parse(r);return{degree:i.degree,poles:i.controlPoints,weights:i.weights,knots:i.distinctKnots,multiplicities:i.multiplicities,isPeriodic:i.periodic,isRational:i.rational}}function mm(e,t){return JSON.parse(e.getNurbsSurfaceDataParity(R(t,`face`)))}function hm(e){return{vertexPosition:t=>Pp(e,t),surfaceType:t=>Fp(e,t),uvBounds:t=>Ip(e,t),outerWire:t=>Lp(e,t),surfaceNormal:(t,n,r)=>Rp(e,t,n,r),pointOnSurface:(t,n,r)=>zp(e,t,n,r),uvFromPoint:(t,n)=>Bp(e,t,n),projectPointOnFace:(t,n)=>Vp(e,t,n),curveTangent:(t,n)=>Hp(e,t,n),curveParameters:t=>Up(e,t),curvePointAtParam:(t,n)=>Wp(e,t,n),curveIsClosed:t=>Gp(e,t),curveIsPeriodic:t=>qp(e,t),curvePeriod:t=>Jp(e,t),curveType:t=>Yp(e,t),curveDegreeElevate:(t,n)=>Xp(e,t,n),curveKnotInsert:(t,n,r)=>Zp(e,t,n,r),curveKnotRemove:(t,n,r)=>Qp(e,t,n,r),curveSplit:(t,n)=>$p(e,t,n),approximateSurfaceLspia:(t,n,r,i,a,o,s,c,l)=>em(e,t,n,r,i,a,o,s,c,l),untrimFace:(t,n,r)=>tm(e,t,n,r),createCurveAdaptor:t=>nm(e,t),getBezierPenultimatePole:t=>rm(e,t),getSurfaceCylinderData:t=>im(e,t),getSurfaceAxis:t=>am(e,t),reverseSurfaceU:t=>om(e,t),classifyPointOnFace:(t,n,r,i)=>sm(e,t,n,r,i),classifyPointRobust:(t,n,r)=>cm(e,t,n,r),classifyPointWinding:(t,n,r)=>lm(e,t,n,r),detectSmallFeatures:(t,n,r)=>um(e,t,n,r),recognizeFeatures:(t,n)=>dm(e,t,n),projectEdges:(t,n,r,i)=>fm(e,t,n,r,i),getNurbsCurveData:t=>pm(e,t),getNurbsSurfaceData:t=>mm(e,t)}}function gm(e,t,n){if(Array.isArray(n)&&n.length===16)return km(e,t,n);throw Error(`brepkit: transform expects a 16-element matrix array`)}function _m(e,t,n,r,i){return km(e,t,Jf(n,r,i))}function vm(e,t,n,r,i){return km(e,t,Yf(n,r,i))}function ym(e,t,n,r){let i=t;return i.type===`solid`?L(e.mirror(i.id,n[0],n[1],n[2],r[0],r[1],r[2])):km(e,t,Qf(n,r))}function bm(e,t,n,r){return km(e,t,Xf(n,r))}function xm(e,t,n,r,i){return km(e,t,Zf(n,r))}function Sm(e,t,n,r){return km(e,t,Zf(n,r))}function Cm(e,t,n,r){let{point:i,tangent:a}=Hp(e,n,r),[o,s,c]=a,l=Math.sqrt(o*o+s*s+c*c);if(l<1e-12)return _m(e,t,i[0],i[1],i[2]);let u=o/l,d=s/l,f=c/l,p=t;if(Math.abs(f+1)<1e-10)p=vm(e,p,180,[1,0,0]);else if(Math.abs(f-1)>1e-10){let t=[-d,u,0],n=180/Math.PI*Math.acos(Math.max(-1,Math.min(1,f)));p=vm(e,p,n,t)}return _m(e,p,i[0],i[1],i[2])}function wm(e,t,n,r,i){let a=[t];for(let o=1;o<i;o++){let i=r*o;a.push(_m(e,t,n[0]*i,n[1]*i,n[2]*i))}return a}function Tm(e,t,n,r,i,a){let o=[t];for(let s=1;s<a;s++)o.push(vm(e,t,i*s,r,n));return o}function Em(e,t,n,r,i,a,o,s){return Hf(e.gridPattern(Wf(t,`gridPattern`),n[0],n[1],n[2],r[0],r[1],r[2],i,a,o,s))}function Dm(e,t){return t.map(t=>{switch(t.type){case`translate`:return _m(e,t.shape,t.x,t.y,t.z);case`rotate`:return vm(e,t.shape,t.angle,t.axis,t.center);case`scale`:return bm(e,t.shape,t.center,t.factor);case`mirror`:return ym(e,t.shape,t.origin,t.normal)}})}function Om(e){return{transform:(t,n)=>gm(e,t,n),translate:(t,n,r,i)=>_m(e,t,n,r,i),rotate:(t,n,r,i)=>vm(e,t,n,r,i),mirror:(t,n,r)=>ym(e,t,n,r),scale:(t,n,r)=>bm(e,t,n,r),generalTransform:(t,n,r,i)=>xm(e,t,n,r,i),generalTransformNonOrthogonal:(t,n,r)=>Sm(e,t,n,r),positionOnCurve:(t,n,r)=>Cm(e,t,n,r),linearPattern:(t,n,r,i)=>wm(e,t,n,r,i),circularPattern:(t,n,r,i,a)=>Tm(e,t,n,r,i,a),gridPattern:(t,n,r,i,a,o,s)=>Em(e,t,n,r,i,a,o,s),transformBatch:t=>Dm(e,t)}}function km(e,t,n){let r=t;if(!If(t))throw Error(`brepkit: applyMatrix requires a BrepkitHandle`);switch(r.type){case`solid`:{let t=e.copySolid(r.id);return e.transformSolid(t,n),L(t)}case`face`:{if(typeof e.copyFace!=`function`)throw Error(`brepkit: applyMatrix for faces requires copyFace/transformFace WASM exports`);let t=e.copyFace(r.id);return e.transformFace(t,n),Rf(t)}case`wire`:{if(typeof e.copyWire!=`function`||typeof e.transformWire!=`function`)throw Error(`brepkit: applyMatrix for wires requires copyWire/transformWire WASM exports`);let t=e.copyWire(r.id);return e.transformWire(t,n),Bf(t)}case`edge`:{if(typeof e.copyEdge!=`function`||typeof e.transformEdge!=`function`)throw Error(`brepkit: applyMatrix for edges requires copyEdge/transformEdge WASM exports`);let t=e.copyEdge(r.id);return e.transformEdge(t,n),zf(t)}default:throw Error(`brepkit: applyMatrix does not support '${r.type}' shapes`)}}function Am(e,t){return!!(e&&(e[0]!==0||e[1]!==0||e[2]!==0)||t&&(t[0]!==0||t[1]!==0||t[2]!==1))}function jm(e,t,n,r){let i=t;if(r&&(r[0]!==0||r[1]!==0||r[2]!==1)){let[t,n,a]=r,o=Math.sqrt(t*t+n*n+a*a),s=t/o,c=n/o,l=a/o;if(Math.abs(l+1)<1e-10)i=vm(e,i,180,[1,0,0]);else if(Math.abs(l-1)>1e-10){let t=[-c,s,0],n=180/Math.PI*Math.acos(Math.max(-1,Math.min(1,l)));i=vm(e,i,n,t)}}return n&&(n[0]!==0||n[1]!==0||n[2]!==0)&&(i=_m(e,i,n[0],n[1],n[2])),i}function Mm(e,t){let r,i=t;if(i.type===`solid`||i.type===`compound`){let n=yp(e,t,`face`);if(n.length===0)throw Error(`brepkit: extractPlaneFromFace: no faces found`);let i=n[0];if(!i)throw Error(`brepkit: extractPlaneFromFace: no faces found`);let a=R(i,`face`),o=0;for(let t of n){let n=R(t,`face`);try{let t=e.faceArea(n,ep);t>o&&(o=t,a=n)}catch{}}r=a}else r=R(t,`face`);let a=n(e.getFaceNormal(r)),o=e.tessellateFace(r,1).positions;return o.length>=3?{point:n(o),normal:a}:{point:[0,0,0],normal:a}}function Nm(e,n){let r=n;if(r.type!==`edge`)return null;let i=e.getEdgeNurbsData(r.id);if(i){let e=JSON.parse(i);return{degree:e.degree,knots:e.knots,controlPoints:e.controlPoints,weights:e.weights}}let a=e.getEdgeVertices(r.id);return{degree:1,knots:[0,0,1,1],controlPoints:[t(a,0),t(a,1),t(a,2),t(a,3),t(a,4),t(a,5)],weights:[1,1]}}function Pm(e,t){if(!If(t))return!1;if(t.type!==`solid`)return!0;try{return e.validateSolidRelaxed(t.id)===0}catch(e){return console.warn(`brepkit: isValid check failed:`,e),!1}}function Fm(e,t){if(!If(t))return!1;if(t.type!==`solid`)return!0;try{return e.validateSolid(t.id)===0}catch(e){return console.warn(`brepkit: isValidStrict check failed:`,e),!1}}function Im(e,t){let n=t;if(n.type!==`solid`)throw Error(`brepkit: healSolid requires a solid, got ${n.type}. Consider using makeCompound() to combine shapes first.`);try{let n=e.repairSolid(R(t));return n>0&&console.warn(`brepkit: repairSolid left ${n} error(s) on solid.`),t}catch(n){try{return e.healSolid(R(t)),t}catch(e){return console.warn(`brepkit: healSolid failed (repairSolid error:`,n,`, healSolid error:`,e,`)`),null}}}function Lm(e,t){return t}function Rm(e,t,n){return t}function zm(e,t,n){let r=Wf(t,`mergeCoincidentVertices`);return e.mergeCoincidentVertices(r,n)}function Bm(e,t,n){let r=Wf(t,`removeDegenerateEdges`);return e.removeDegenerateEdges(r,n)}function Vm(e,t){let n=Wf(t,`fixFaceOrientations`);return e.fixFaceOrientations(n)}function Hm(e,t){let n=t;return n.type===`solid`&&e.healSolid(n.id),t}function Um(e,t){return t}function Wm(e,t){if(!If(t)||t.type!==`solid`)return null;try{return typeof e.validateSolidDetails==`function`?e.validateSolidDetails(t.id):null}catch{return null}}function Gm(e){return{isValid:t=>Pm(e,t),isValidStrict:t=>Fm(e,t),healSolid:t=>Im(e,t),healFace:t=>Lm(e,t),healWire:(t,n)=>Rm(e,t,n),fixShape:t=>Hm(e,t),fixSelfIntersection:t=>Um(e,t),mergeCoincidentVertices:(t,n)=>zm(e,t,n),removeDegenerateEdges:(t,n)=>Bm(e,t,n),fixFaceOrientations:t=>Vm(e,t),validationDetails:t=>Wm(e,t)}}function Km(e){if(!(e instanceof Error))return!1;let t=e.message;return t.startsWith(`empty result:`)||t.includes(`produced empty result`)||t.includes(`produces empty result`)}function qm(e,t){return t.type===`compound`?z(e.getCompoundSolids(t.id)).length===0:!1}function Jm(e){return Hf(e.makeCompound([]))}function Ym(e,t,n,r){if(r&&op(r)&&ap(`boolean-options`,`BooleanOptions (optimisation, simplify, strategy, fuzzyValue) not supported; ignored.`),qm(e,t))return n;if(qm(e,n))return t;let i=Wf(t,`fuse`),a=n;if(a.type===`compound`){let t=z(e.getCompoundSolids(a.id)),n=i;for(let r of t)n=e.fuse(n,r);return L(n)}return L(e.fuse(i,Wf(n,`fuse`)))}function Xm(e,t,n,r){if(r&&op(r)&&ap(`boolean-options`,`BooleanOptions (optimisation, simplify, strategy, fuzzyValue) not supported; ignored.`),qm(e,t))return Jm(e);if(qm(e,n))return t;let i=Wf(t,`cut`),a=n;if(a.type===`compound`){let t=z(e.getCompoundSolids(a.id)),n=i;for(let r of t)try{n=e.cut(n,r)}catch(t){if(Km(t))return Jm(e);throw t}return L(n)}try{return L(e.cut(i,Wf(n,`cut`)))}catch(t){if(Km(t))return Jm(e);throw t}}function Zm(e,t,n,r){if(r&&op(r)&&ap(`boolean-options`,`BooleanOptions (optimisation, simplify, strategy, fuzzyValue) not supported; ignored.`),qm(e,t)||qm(e,n))return Jm(e);try{return L(e.intersect(Wf(t,`intersect`),Wf(n,`intersect`)))}catch(t){if(Km(t))return Jm(e);throw t}}function Qm(e,n,r,i){let{point:a,normal:o}=Mm(e,r),s=If(n)&&n.type===`solid`?n.id:R(n,`solid`),c=z(e.section(s,a[0],a[1],a[2],o[0],o[1],o[2]));if(c.length===0)return Hf(e.makeCompound([]));let l=[];for(let n=0;n<c.length;n++){let r=z(e.getFaceWires(t(c,n)));for(let e=0;e<r.length;e++)l.push(Bf(t(r,e)))}let[u]=l;if(l.length===1&&u!==void 0)return u;let d=np();return rp.set(d,l),Hf(d)}function $m(e,n,r){if(n.length===0)throw Error(`brepkit: fuseAll requires at least one shape`);if(n.length===1)return t(n,0);if(e.compoundFuse){let t=[];for(let r of n){let n=r;n.type===`compound`?t.push(...z(e.getCompoundSolids(n.id))):t.push(Wf(r,`fuseAll`))}if(t.length===0)throw Error(`brepkit: fuseAll resolved to zero solid IDs`);return L(e.compoundFuse(new Uint32Array(t)))}let i=[...n];for(;i.length>1;){let t=[];for(let n=0;n<i.length;n+=2)n+1<i.length?t.push(Ym(e,i[n],i[n+1],r)):t.push(i[n]);i=t}return t(i,0)}function eh(e,t,n,r){if(n.length===0)return t;if(n.length===1)return Xm(e,t,n[0],r);let i=Wf(t,`cutAll`),a=[];for(let t of n){let n=t;n.type===`compound`?a.push(...z(e.getCompoundSolids(n.id))):a.push(Wf(t,`cutAll`))}return a.length===0?t:L(e.compoundCut(i,new Uint32Array(a)))}function th(e,t,n){if(n.length===0)throw Error(`brepkit: split requires at least one tool`);let{point:r,normal:i}=Mm(e,n[0]),a=z(e.split(R(t,`solid`),r[0],r[1],r[2],i[0],i[1],i[2]));return Hf(e.makeCompound(a))}function nh(e,t,n,r,i,a,o){let s=e.meshBoolean(t,n,r,i,a,o);return{vertices:new Float32Array(s.positions),normals:new Float32Array(s.normals),triangles:new Uint32Array(s.indices),uvs:new Float32Array,faceGroups:[{start:0,count:s.indices.length,faceHash:0}]}}function rh(e,t,n,r,i){let a=[];return(!If(t)||t.IsNull())&&a.push({operand:`base`,issue:`null-shape`,message:`Base shape is null`}),(!If(n)||n.IsNull())&&a.push({operand:`tool`,issue:`null-shape`,message:`Tool shape is null`}),a.length>0?{valid:!1,issues:a}:(i(t)||a.push({operand:`base`,issue:`not-valid`,message:`Base shape fails BRepCheck validation. Try autoHeal() first.`}),i(n)||a.push({operand:`tool`,issue:`not-valid`,message:`Tool shape fails BRepCheck validation. Try autoHeal() first.`}),{valid:a.length===0,issues:a})}function ih(e,n,r){let i=[];for(let r of n){let n=r;if(n.type===`solid`){let r=z(e.getSolidVertices(n.id));for(let n of r){let r=e.getVertexPosition(n);i.push(t(r,0),t(r,1),t(r,2))}}else if(n.type===`vertex`){let r=e.getVertexPosition(n.id);i.push(t(r,0),t(r,1),t(r,2))}}if(i.length<12)throw Error(`brepkit: hull requires enough points`);return L(e.convexHull(i))}function ah(e,t,n){if(t.length<4)throw Error(`brepkit: hull needs at least 4 points`);let r=[];for(let e of t)r.push(e.x,e.y,e.z);return L(e.convexHull(r))}function oh(e,n,r,i){let a=new Float64Array(n.length*3);for(let e=0;e<n.length;e++){let r=t(n,e);a[e*3]=r.x,a[e*3+1]=r.y,a[e*3+2]=r.z}let o=new Uint32Array(r.length*3);for(let e=0;e<r.length;e++){let n=t(r,e);o[e*3]=n[0],o[e*3+1]=n[1],o[e*3+2]=n[2]}return L(e.importIndexedMesh(a,o))}function sh(e){return{fuse:(t,n,r)=>Ym(e,t,n,r),cut:(t,n,r)=>Xm(e,t,n,r),intersect:(t,n,r)=>Zm(e,t,n,r),section:(t,n,r)=>Qm(e,t,n,r),fuseAll:(t,n)=>$m(e,t,n),cutAll:(t,n,r)=>eh(e,t,n,r),split:(t,n)=>th(e,t,n),meshBoolean:(t,n,r,i,a,o)=>nh(e,t,n,r,i,a,o),checkBoolean:(t,n,r)=>rh(e,t,n,r,t=>Pm(e,t)),hull:(t,n)=>ih(e,t,n),hullFromPoints:(t,n)=>ah(e,t,n),buildSolidFromFaces:(t,n,r)=>oh(e,t,n,r)}}function ch(e,t,n,r){return Uf(e.makeVertex(t,n,r))}function lh(e,t,n,r){if(t&&typeof t==`object`&&`origin`in t&&`direction`in t){let{origin:i,direction:a}=t,o=n??0,s=r??1;return yh(e,[i[0]+a[0]*o,i[1]+a[1]*o,i[2]+a[2]*o],[i[0]+a[0]*s,i[1]+a[1]*s,i[2]+a[2]*s])}if(If(t)&&t.type===`edge`)return t;throw Error(`brepkit: makeEdge requires a curve with origin/direction, or an edge handle`)}function uh(e,t){let n=[];for(let r of t){let t=r;if(t.type===`wire`)for(let r of z(e.getWireEdges(t.id)))n.push(r);else n.push(R(r,`edge`))}return Bf(e.makeWire(n,!0))}function dh(e,t,n){let r=t,i=r.type===`edge`?e.makeWire([r.id],!0):R(t,`wire`);return Rf(n?e.makePlanarFaceFromWire(i):e.makeFaceFromWire(i))}function fh(e,t,n,r){return L(e.makeBox(t,n,r))}function ph(e,t,n){return Rf(e.makeRectangle(t,n))}function mh(e,t,n,r,i){let a=L(e.makeCylinder(t,n));return Am(r,i)?jm(e,a,r,i):a}function hh(e,t,n){let r=L(e.makeSphere(t,32));return n&&(n[0]!==0||n[1]!==0||n[2]!==0)?_m(e,r,n[0],n[1],n[2]):r}function gh(e,t,n,r,i,a){let o=L(e.makeCone(t,n,r));return Am(i,a)?jm(e,o,i,a):o}function _h(e,t,n,r,i){let a=L(e.makeTorus(t,n,32));return Am(r,i)?jm(e,a,r,i):a}function vh(e,t,n,r){let i=Math.max(t,n,r);return xm(e,hh(e,i),[t/i,0,0,0,n/i,0,0,0,r/i],[0,0,0],!1)}function yh(e,t,n){return zf(e.makeLineEdge(t[0],t[1],t[2],n[0],n[1],n[2]))}function bh(e,t,n,r){let i=Math.sqrt(n[0]**2+n[1]**2+n[2]**2);return zf(e.makeCircleEdge(t[0],t[1],t[2],n[0]/i,n[1]/i,n[2]/i,r))}function xh(e,t,n,r,i,a){let o=a-i,s=1e-9;if(o>s&&o<2*Math.PI-s){let o=Math.hypot(n[0],n[1],n[2]),s=[n[0]/o,n[1]/o,n[2]/o],c=Math.abs(s[0])<.9?[1,0,0]:[0,1,0],l=[s[1]*c[2]-s[2]*c[1],s[2]*c[0]-s[0]*c[2],s[0]*c[1]-s[1]*c[0]],u=Math.hypot(l[0],l[1],l[2]),d=[l[0]/u,l[1]/u,l[2]/u],f=[s[1]*d[2]-s[2]*d[1],s[2]*d[0]-s[0]*d[2],s[0]*d[1]-s[1]*d[0]],p=e=>{let n=Math.cos(e),i=Math.sin(e);return[t[0]+r*(n*d[0]+i*f[0]),t[1]+r*(n*d[1]+i*f[1]),t[2]+r*(n*d[2]+i*f[2])]},m=p(i),h=p(a);return zf(e.makeCircleArc3d(m[0],m[1],m[2],h[0],h[1],h[2],t[0],t[1],t[2],s[0],s[1],s[2]))}return Yh(e,t,n,r,i,a)}function Sh(e,t,n,r,i,a){let o=2*(e*(r-a)+n*(a-t)+i*(t-r));return Math.abs(o)<1e-12?null:[((e**2+t**2)*(r-a)+(n**2+r**2)*(a-t)+(i**2+a**2)*(t-r))/o,((e**2+t**2)*(i-n)+(n**2+r**2)*(e-i)+(i**2+a**2)*(n-e))/o]}function Ch(e,t,n,r){let 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=Math.sqrt(o[0]**2+o[1]**2+o[2]**2);if(s<1e-12)return yh(e,t,r);let c=[o[0]/s,o[1]/s,o[2]/s],l=Math.sqrt(i[0]**2+i[1]**2+i[2]**2),u=[i[0]/l,i[1]/l,i[2]/l],d=[c[1]*u[2]-c[2]*u[1],c[2]*u[0]-c[0]*u[2],c[0]*u[1]-c[1]*u[0]],f=e=>{let n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return[n*u[0]+r*u[1]+i*u[2],n*d[0]+r*d[1]+i*d[2]]},[p,m]=f(t),[h,g]=f(n),[_,v]=f(r),y=Sh(p,m,h,g,_,v);if(!y)return yh(e,t,r);let[b,x]=y,S=[t[0]+b*u[0]+x*d[0],t[1]+b*u[1]+x*d[1],t[2]+b*u[2]+x*d[2]];return zf(e.makeCircleArc3d(t[0],t[1],t[2],r[0],r[1],r[2],S[0],S[1],S[2],c[0],c[1],c[2]))}function wh(e,t,n,r,i,a){let o=Math.sqrt(n[0]**2+n[1]**2+n[2]**2);if(a!==void 0){let s=Math.sqrt(a[0]**2+a[1]**2+a[2]**2);return zf(e.makeEllipseEdgeWithRef(t[0],t[1],t[2],n[0]/o,n[1]/o,n[2]/o,r,i,a[0]/s,a[1]/s,a[2]/s))}return zf(e.makeEllipseEdge(t[0],t[1],t[2],n[0]/o,n[1]/o,n[2]/o,r,i))}function Th(e,t,n,r,i,a,o,s){return Xh(e,t,n,r,i,a,o,s)}function Eh(e,n){if(n.length<2)throw Error(`brepkit: bezier requires at least 2 points`);let r=n.length-1,i=n.length,a=[...Array(r+1).fill(0),...Array(r+1).fill(1)],o=Array(i).fill(1),s=n.flatMap(([e,t,n])=>[e,t,n]),c=t(n,0),l=t(n,i-1);return zf(e.makeNurbsEdge(c[0],c[1],c[2],l[0],l[1],l[2],r,a,s,o))}function Dh(e,t,n,r){return zf(e.makeTangentArc3d(t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]))}function Oh(e,t,n,r,i,a,o){let s=n/t,c=Math.max(4,Math.ceil(s*16)),l=i?.[0]??0,u=i?.[1]??0,d=i?.[2]??0,f=o?-1:1,p=[];for(let e=0;e<=c;e++){let t=e/c,i=f*2*Math.PI*s*t;p.push([l+r*Math.cos(i),u+r*Math.sin(i),d+n*t])}return uh(e,[Vh(e,p)])}function kh(e,t){let n=[];for(let r of t){let t=r;if(t.type===`edge`)n.push(t.id);else if(t.type===`wire`)for(let r of z(e.getWireEdges(t.id)))n.push(r)}if(n.length===0)throw Error(`brepkit: makeWireFromMixed requires at least one edge`);return Bf(e.makeWire(n,!1))}function Ah(e,t){let n=t.filter(If);if(n.length===0)throw Error(`brepkit: makeCompound requires at least one shape`);if(n.every(e=>e.type===`solid`))return Hf(e.makeCompound(n.map(e=>e.id)));let r=np();return rp.set(r,n),Hf(r)}function jh(e,t,n){let r=fh(e,Math.abs(n[0]-t[0]),Math.abs(n[1]-t[1]),Math.abs(n[2]-t[2])),i=Math.min(t[0],n[0]),a=Math.min(t[1],n[1]),o=Math.min(t[2],n[2]);return i!==0||a!==0||o!==0?_m(e,r,i,a,o):r}function Mh(e,t){let n=t;if(n.type===`solid`)return t;if(n.type===`shell`){try{return e.getSolidFaces(n.id),L(n.id)}catch{}return L(e.solidFromShell(n.id))}return L(e.solidFromShell(R(t,`shell`)))}function Nh(e,t){return dh(e,t,!1)}function Ph(e,t,n){let r=n.map(e=>R(e,`wire`));return Rf(e.addHolesToFace(R(t,`face`),r))}function Fh(e,t){return Rf(e.removeHolesFromFace(R(t,`face`)))}function Ih(e,t,n){return dh(e,n,!1)}function Lh(e,t,n,r){let i=[];for(let[e,n,r]of t)i.push(e,n,r);let a=Math.min(3,n-1),o=Math.min(3,r-1);try{return Rf(e.interpolateSurface(i,n,r,a,o))}catch{return Rh(e,t,n,r)}}function Rh(e,n,r,i){let a=[];for(let o=0;o<r-1;o++)for(let r=0;r<i-1;r++){let s=o*i+r,c=(o+1)*i+r,l=o*i+(r+1),u=(o+1)*i+(r+1),d=zh(e,t(n,s),t(n,c),t(n,l));d&&a.push(d);let f=zh(e,t(n,c),t(n,u),t(n,l));f&&a.push(f)}if(a.length===0)throw Error(`brepkit: no valid faces in surface grid`);return Mp(e,a,1e-6)}function zh(e,t,n,r){let i=n[0]-t[0],a=n[1]-t[1],o=n[2]-t[2],s=r[0]-t[0],c=r[1]-t[1],l=r[2]-t[2],u=a*l-o*c,d=o*s-i*l,f=i*c-a*s;if(Math.sqrt(u*u+d*d+f*f)<1e-12)return null;try{return dh(e,uh(e,[yh(e,t,n),yh(e,n,r),yh(e,r,t)]))}catch(e){return console.warn(`brepkit: makeNonPlanarFace failed:`,e),null}}function Bh(e,t,n){let r=t.map(e=>R(e,`face`));return L(e.sewFaces(r,n))}function Vh(e,n,r){if(r?.tolerance!==void 0&&ap(`interpolate-tolerance`,`interpolatePoints() tolerance parameter is not supported; brepkit uses chord-length parameterisation.`),n.length<2)throw Error(`brepkit: need at least 2 points`);if(n.length===2)return yh(e,t(n,0),t(n,1));let i=Math.min(3,n.length-1),a=n.flatMap(([e,t,n])=>[e,t,n]);return zf(e.interpolatePoints(a,i))}function Hh(e,t,n){let r=n?.degMax??3,i=n?.tolerance??1e-6,a=[];for(let e of t)a.push(e[0],e[1],e[2]);let o=Math.max(r+1,Math.min(t.length,Math.ceil(t.length*.7)));return zf(e.approximateCurveLspia(a,r,o,i,100))}function Uh(e,t,n,r){return{x:t,y:n,z:r}}function Wh(e,t,n,r){let i=Math.sqrt(t*t+n*n+r*r);return{x:t/i,y:n/i,z:r/i}}function Gh(e,t,n,r){return{x:t,y:n,z:r}}function Kh(e,t,n,r,i,a,o){return{origin:[t,n,r],direction:[i,a,o]}}function qh(e,t,n,r,i,a,o,s,c,l){return{origin:[t,n,r],z:[i,a,o],x:s===void 0?void 0:[s,c,l]}}function Jh(e,t,n,r,i,a,o,s,c,l){return{origin:[t,n,r],z:[i,a,o],x:s===void 0?void 0:[s,c,l]}}function Yh(e,n,r,i,a,o){let s=Math.sqrt(r[0]**2+r[1]**2+r[2]**2),c=[r[0]/s,r[1]/s,r[2]/s],l=Math.abs(c[0])<.9?[1,0,0]:[0,1,0],u=[c[1]*l[2]-c[2]*l[1],c[2]*l[0]-c[0]*l[2],c[0]*l[1]-c[1]*l[0]],d=Math.sqrt(u[0]**2+u[1]**2+u[2]**2),f=[u[0]/d,u[1]/d,u[2]/d],p=[c[1]*f[2]-c[2]*f[1],c[2]*f[0]-c[0]*f[2],c[0]*f[1]-c[1]*f[0]],m=Math.ceil(Math.abs(o-a)/(Math.PI/2)),h=(o-a)/m,g=[],_=[];for(let e=0;e<=m;e++){let t=a+e*h,r=Math.cos(t),o=Math.sin(t),s=n[0]+i*(r*f[0]+o*p[0]),c=n[1]+i*(r*f[1]+o*p[1]),l=n[2]+i*(r*f[2]+o*p[2]);if(e>0){let t=a+(e-.5)*h,r=Math.cos(t),o=Math.sin(t),s=i/Math.cos(h/2),c=n[0]+s*(r*f[0]+o*p[0]),l=n[1]+s*(r*f[1]+o*p[1]),u=n[2]+s*(r*f[2]+o*p[2]);g.push(c,l,u),_.push(Math.cos(h/2))}g.push(s,c,l),_.push(1)}let v=[,,,].fill(0);for(let e=1;e<m;e++)v.push(e,e);v.push(...[,,,].fill(m));let y=t(v,v.length-1);for(let e=0;e<v.length;e++)v[e]=t(v,e)/y;let b=t(g,0),x=t(g,1),S=t(g,2),C=t(g,g.length-3),w=t(g,g.length-2),ee=t(g,g.length-1);return zf(e.makeNurbsEdge(b,x,S,C,w,ee,2,v,g,_))}function Xh(e,n,r,i,a,o,s,c){let l=Math.sqrt(r[0]**2+r[1]**2+r[2]**2),u=[r[0]/l,r[1]/l,r[2]/l],d;if(c){let e=Math.sqrt(c[0]**2+c[1]**2+c[2]**2);d=[c[0]/e,c[1]/e,c[2]/e]}else{let e=Math.abs(u[0])<.9?[1,0,0]:[0,1,0],t=[u[1]*e[2]-u[2]*e[1],u[2]*e[0]-u[0]*e[2],u[0]*e[1]-u[1]*e[0]],n=Math.sqrt(t[0]**2+t[1]**2+t[2]**2);d=[t[0]/n,t[1]/n,t[2]/n]}let f=[u[1]*d[2]-u[2]*d[1],u[2]*d[0]-u[0]*d[2],u[0]*d[1]-u[1]*d[0]],p=Math.ceil(Math.abs(s-o)/(Math.PI/2)),m=(s-o)/p,h=[],g=[];for(let e=0;e<=p;e++){let t=o+e*m,r=Math.cos(t),s=Math.sin(t),c=n[0]+i*r*d[0]+a*s*f[0],l=n[1]+i*r*d[1]+a*s*f[1],u=n[2]+i*r*d[2]+a*s*f[2];if(e>0){let t=o+(e-.5)*m,r=Math.cos(t),s=Math.sin(t),c=1/Math.cos(m/2),l=n[0]+i*c*r*d[0]+a*c*s*f[0],u=n[1]+i*c*r*d[1]+a*c*s*f[1],p=n[2]+i*c*r*d[2]+a*c*s*f[2];h.push(l,u,p),g.push(Math.cos(m/2))}h.push(c,l,u),g.push(1)}let _=[,,,].fill(0);for(let e=1;e<p;e++)_.push(e,e);_.push(...[,,,].fill(p));let v=t(_,_.length-1);for(let e=0;e<_.length;e++)_[e]=t(_,e)/v;let y=t(h,0),b=t(h,1),x=t(h,2),S=t(h,h.length-3),C=t(h,h.length-2),w=t(h,h.length-1);return zf(e.makeNurbsEdge(y,b,x,S,C,w,2,_,h,g))}function Zh(e){return{makeVertex:(t,n,r)=>ch(e,t,n,r),makeEdge:(t,n,r)=>lh(e,t,n,r),makeWire:t=>uh(e,t),makeWireFromMixed:t=>kh(e,t),makeFace:(t,n)=>dh(e,t,n),makeBox:(t,n,r)=>fh(e,t,n,r),makeRectangle:(t,n)=>ph(e,t,n),makeCylinder:(t,n,r,i)=>mh(e,t,n,r,i),makeSphere:(t,n)=>hh(e,t,n),makeCone:(t,n,r,i,a)=>gh(e,t,n,r,i,a),makeTorus:(t,n,r,i)=>_h(e,t,n,r,i),makeEllipsoid:(t,n,r)=>vh(e,t,n,r),makeLineEdge:(t,n)=>yh(e,t,n),makeCircleEdge:(t,n,r)=>bh(e,t,n,r),makeCircleArc:(t,n,r,i,a)=>xh(e,t,n,r,i,a),makeArcEdge:(t,n,r)=>Ch(e,t,n,r),makeEllipseEdge:(t,n,r,i,a)=>wh(e,t,n,r,i,a),makeEllipseArc:(t,n,r,i,a,o,s)=>Th(e,t,n,r,i,a,o,s),makeBezierEdge:t=>Eh(e,t),makeTangentArc:(t,n,r)=>Dh(e,t,n,r),makeHelixWire:(t,n,r,i,a,o)=>Oh(e,t,n,r,i,a,o),makeCompound:t=>Ah(e,t),makeBoxFromCorners:(t,n)=>jh(e,t,n),solidFromShell:t=>Mh(e,t),makeNonPlanarFace:t=>Nh(e,t),addHolesInFace:(t,n)=>Ph(e,t,n),removeHolesFromFace:t=>Fh(e,t),makeFaceOnSurface:(t,n)=>Ih(e,t,n),bsplineSurface:(t,n,r)=>Lh(e,t,n,r),triangulatedSurface:(t,n,r)=>Rh(e,t,n,r),buildTriFace:(t,n,r)=>zh(e,t,n,r),sewAndSolidify:(t,n)=>Bh(e,t,n),interpolatePoints:(t,n)=>Vh(e,t,n),approximatePoints:(t,n)=>Hh(e,t,n),createPoint3d:(t,n,r)=>Uh(e,t,n,r),createDirection3d:(t,n,r)=>Wh(e,t,n,r),createVector3d:(t,n,r)=>Gh(e,t,n,r),createAxis1:(t,n,r,i,a,o)=>Kh(e,t,n,r,i,a,o),createAxis2:(t,n,r,i,a,o,s,c,l)=>qh(e,t,n,r,i,a,o,s,c,l),createAxis3:(t,n,r,i,a,o,s,c,l)=>Jh(e,t,n,r,i,a,o,s,c,l)}}function Qh(e,t,n,r){let i=Wf(t,`fillet`),a=n.map(e=>R(e,`edge`));if(typeof r==`number`)return L(e.fillet(i,a,r));let o=[];for(let[e,t]of n.entries()){let n=a[e]??0,i;i=typeof r==`function`?r(t):r;let[s,c]=Array.isArray(i)?i:[i,i];o.push({edge:n,startRadius:s,endRadius:c})}return L(e.filletVariable(i,JSON.stringify(o)))}function $h(e,t,n,r){let i=Wf(t,`chamfer`),a=n.map(e=>R(e,`edge`));if(typeof r==`number`)return L(e.chamfer(i,a,r));if(Array.isArray(r)){let[t,n]=r;return typeof e.chamferAsymmetric==`function`?L(e.chamferAsymmetric(i,a,t,n)):(ap(`chamfer-asymmetric`,`chamferAsymmetric not available; using averaged distance.`),L(e.chamfer(i,a,(t+n)/2)))}let o=new Map;for(let[e,t]of n.entries()){let n=r(t),i=a[e];if(i===void 0)continue;let[s,c]=Array.isArray(n)?n:[n,n],l=`${s},${c}`,u=o.get(l);u?u.ids.push(i):o.set(l,{ids:[i],d1:s,d2:c})}let s=i;for(let t of o.values())t.d1===t.d2?s=e.chamfer(s,t.ids,t.d1):typeof e.chamferAsymmetric==`function`?s=e.chamferAsymmetric(s,t.ids,t.d1,t.d2):(ap(`chamfer-callback`,`chamferAsymmetric not available; asymmetric edges use averaged distance.`),s=e.chamfer(s,t.ids,(t.d1+t.d2)/2));return L(s)}function eg(e,t,n,r,i){let a=r*Math.tan(i*Math.PI/180),o=Wf(t,`chamferDistAngle`),s=n.map(e=>R(e,`edge`));return typeof e.chamferAsymmetric==`function`?L(e.chamferAsymmetric(o,s,r,a)):(ap(`chamfer-dist-angle`,`chamferAsymmetric not available; using averaged distance.`),L(e.chamfer(o,s,(r+a)/2)))}function tg(e,n){let r=z(e.getFaceVertices(n));if(r.length<1)return null;let i=0,a=0,o=0;for(let n of r){let r=e.getVertexPosition(n);i+=t(r,0),a+=t(r,1),o+=t(r,2)}let s=r.length;return{x:i/s,y:a/s,z:o/s}}function ng(e,t,n){try{let r=e.getFaceNormal(t),i=-1,a=-2;for(let t of n)try{let n=e.getFaceNormal(t),o=(r[0]??0)*(n[0]??0)+(r[1]??0)*(n[1]??0)+(r[2]??0)*(n[2]??0);o>a&&(a=o,i=t)}catch{}if(i>=0&&a>.99)return i}catch{}return null}function rg(e,t,n){try{let r=tg(e,t);if(r===null)return null;let i=-1,a=1/0;for(let t of n)try{let n=tg(e,t);if(n===null)continue;let o=Math.sqrt((r.x-n.x)**2+(r.y-n.y)**2+(r.z-n.z)**2);o<a&&(a=o,i=t)}catch{}if(i>=0&&a<.001)return i}catch{}return null}function ig(e,t,n,r){if(r.has(t))return t;let i=ng(e,t,n);if(i!==null)return i;let a=rg(e,t,n);return a===null?t:a}function ag(e,t,n,r,i){i!==void 0&&ap(`shell-tolerance`,`shell() tolerance parameter is not supported; brepkit uses its own internal tolerance.`);let a=Wf(t,`shell`),o=z(e.getSolidFaces(a)),s=new Set(o),c=n.map(t=>ig(e,R(t,`face`),o,s));return L(e.shell(a,r,c))}function og(e,t,n){let r=t;if(r.type===`face`)return L(e.thicken(r.id,n));throw Error(`brepkit: thicken() requires a face`)}function sg(e,t,n,r){r!==void 0&&ap(`offset-tolerance`,`offset() tolerance parameter is not supported; brepkit uses its own internal tolerance.`);let i=t;if(i.type===`face`)return L(e.thicken(i.id,n));let a=Wf(t,`offset`);return L(e.offsetSolidV2(a,n))}function cg(e,t,n){let r=Wf(t,`filletVariable`);return L(e.filletVariable(r,n))}function lg(e,t,n,r,i,a){let o=Wf(t,`draft`),s=n.map(e=>R(e,`face`));return L(e.draft(o,s,r[0],r[1],r[2],i[0],i[1],i[2],a))}function ug(e,t,n){let r=Wf(t,`defeature`),i=n.map(e=>R(e,`face`));return L(e.defeature(r,i))}function dg(e){switch(e){case`arc`:case`tangent`:return`arc`;case`intersection`:return`intersection`;default:return`intersection`}}function fg(e,n,r,i){if(typeof e.offsetWire2DWithJoin==`function`)return Bf(e.offsetWire2DWithJoin(R(n,`wire`),r,dg(i)));let a=yp(e,n,`edge`);if(a.length===0)return n;let o=[];for(let n of a){let r=e.getEdgeVertices(R(n,`edge`));o.push(t(r,0),t(r,1))}if(o.length<6)return n;let s=e.offsetPolygon2d(o,r,1e-10),c=[];for(let e=0;e<s.length;e+=2)c.push(t(s,e),t(s,e+1),0);return Bf(e.makePolygonWire(c))}function pg(e,t){if(t.type===`solid`)try{e.healSolid(R(t))}catch(e){console.warn(`brepkit: healing failed in simplify:`,e)}return t}function mg(e,t){let n=t,r=e.reverseShape(n.id);return Lf(n.type,r)}function hg(e){return{fillet:(t,n,r)=>Qh(e,t,n,r),chamfer:(t,n,r)=>$h(e,t,n,r),chamferDistAngle:(t,n,r,i)=>eg(e,t,n,r,i),shell:(t,n,r,i)=>ag(e,t,n,r,i),thicken:(t,n)=>og(e,t,n),offset:(t,n,r)=>sg(e,t,n,r),filletVariable:(t,n)=>cg(e,t,n),draft:(t,n,r,i,a)=>lg(e,t,n,r,i,up(n,a)),defeature:(t,n)=>ug(e,t,n),offsetWire2D:(t,n,r)=>fg(e,t,n,r),simplify:t=>pg(e,t),reverseShape:t=>mg(e,t)}}function gg(e,t){let n=JSON.parse(e),r=n.evolution;if(!r||typeof r.modified!=`object`||typeof r.generated!=`object`)throw Error(`brepkit: invalid evolution JSON structure`);let i=L(n.solid),a=e=>{let n=new Map;for(let[r,i]of Object.entries(e)){let e=Number(r)%t,a=i.map(e=>e%t),o=n.get(e);o?o.push(...a):n.set(e,a)}return n},o=a(r.modified),s=a(r.generated),c=new Set;for(let e of r.deleted)c.add(e%t);return{shape:i,evolution:{modified:o,generated:s,deleted:c}}}function _g(e,t){let n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return n*n+r*r+i*i}function vg(e,n){try{let r=e.tessellateFace(n,1).positions;if(r.length<3)return[0,0,0];let i=0,a=0,o=0,s=r.length/3;for(let e=0;e<r.length;e+=3)i+=t(r,e),a+=t(r,e+1),o+=t(r,e+2);return[i/s,a/s,o/s]}catch{return[0,0,0]}}function yg(e,t,n){try{return{hash:n,normal:e.getFaceNormal(t),centroid:vg(e,t)}}catch{return{hash:n,normal:[0,0,0],centroid:vg(e,t)}}}var bg=.707,xg=100,Sg=.05;function Cg(e,n){let r=-1/0,i=[];for(let a=0;a<n.length;a++){let o=t(n,a),s=(e.normal[0]??0)*(o.normal[0]??0)+(e.normal[1]??0)*(o.normal[1]??0)+(e.normal[2]??0)*(o.normal[2]??0);if(s<bg)continue;let c=_g(e.centroid,o.centroid);if(c>xg)continue;let l=s-c/xg;l>r&&(r=l),i.push({idx:a,score:l})}return{matches:i,bestScore:r}}function wg(e,t){let n=1/0,r;for(let i of t){let t=_g(e.centroid,i.centroid);t<n&&(n=t,r=i)}return r}function Tg(e,n,r,i,a,o,s,c){let l=n;if(l.type!==`solid`)return;let u=z(e.getSolidFaces(l.id)),d=Math.min(u.length,r.length),f=[];for(let n=0;n<d;n++){let i=t(u,n);f.push(yg(e,i,r[n]??i%a))}let p=i.map(t=>yg(e,t,t%a)),m=new Set;for(let e of p){let{matches:n,bestScore:r}=Cg(e,f);if(n.length>0){for(let i of n)if(i.score>=r-Sg){let n=t(f,i.idx),r=o.get(n.hash)??[];r.push(e.hash),o.set(n.hash,r),m.add(i.idx)}}else{let t=wg(e,f);if(t){let n=s.get(t.hash)??[];n.push(e.hash),s.set(t.hash,n)}}}for(let e=0;e<f.length;e++)m.has(e)||c.add(t(f,e).hash)}function Eg(e,t,n,r,i,a,o,s){let c=new Set(s),l=new Map(a);Tg(e,t,n,r,i,a,o,s),s.clear();for(let e of c)s.add(e);for(let e of n){let t=!l.has(e)&&a.has(e)&&(a.get(e)?.length??0)>0,n=o.has(e)&&(o.get(e)?.length??0)>0;!t&&!n&&s.add(e)}}function Dg(e,n,r,i,a,o){let s=n.filter(e=>!r.has(e));s.length>0&&e.length>0&&a.set(t(e,0),s);for(let t of e)i.has(t)||o.add(t)}function Og(e,n,r,i,a,o,s,c,l){let u=new Set(i);if(r.some(e=>u.has(e))){let t=new Set(r);for(let e of r)u.has(e)&&o.set(e,[e]);let d=i.filter(e=>!t.has(e)),f=n.filter(e=>!u.has(e%a));l&&d.length>0&&f.length>0?Eg(e,l,d,f,a,o,s,c):Dg(i,r,u,t,s,c)}else if(l)Tg(e,l,i,n,a,o,s,c);else{for(let e=0;e<i.length&&e<r.length;e++)o.set(t(i,e),[t(r,e)]);r.length>i.length&&i.length>0&&s.set(t(i,0),r.slice(i.length))}}function kg(e,n,r,i,a,o){let s=n,c=new Map,l=new Map,u=new Set;if(s.type===`solid`){let n=z(e.getSolidFaces(s.id)),d=n.map(e=>e%i);if(a)for(let e=0;e<r.length&&e<d.length;e++)c.set(t(r,e),[t(d,e)]);else Og(e,n,d,r,i,c,l,u,o)}return{shape:n,evolution:{modified:c,generated:l,deleted:u}}}function Ag(e,t,n,r,i){for(let[a,o]of e){let s=[];for(let e of o){r.add(e);let i=t.get(e);i?s.push(...i):n.has(e)||s.push(e)}s.length>0?e.set(a,s):(e.delete(a),i?.add(a))}}function jg(e,t){let n=new Set;Ag(t.combinedModified,e.evolution.modified,e.evolution.deleted,n,t.combinedDeleted),Ag(t.combinedGenerated,e.evolution.modified,e.evolution.deleted,n);for(let[r,i]of e.evolution.modified)t.combinedModified.has(r)||n.has(r)||t.combinedModified.set(r,[...i]);for(let[r,i]of e.evolution.generated){if(n.has(r))continue;let e=t.combinedGenerated.get(r)??[];t.combinedGenerated.set(r,[...e,...i])}for(let n of e.evolution.deleted)t.inputFaceHashSet.has(n)&&t.combinedDeleted.add(n)}function Mg(e,t,n,r,i,a){let o=z(e.getCompoundSolids(n)),s=t,c={combinedModified:new Map,combinedGenerated:new Map,combinedDeleted:new Set,inputFaceHashSet:new Set(r)};for(let e of o){let t=s;if(t.type!==`solid`)break;let n=gg(a(t.id,e),i);s=n.shape,jg(n,c)}return{shape:s,accum:c}}function Ng(e,t,n,r,i,a,o,s,c){let l={hasErrors:!1,hasWarnings:!1,messages:[]},u=t,d=n;if(r.length>0&&u.type===`solid`){if(d.type===`solid`)try{return{...gg(o(u.id,d.id),i),diagnostics:l}}catch(e){if(!Km(e))throw e}if(d.type===`compound`){let{shape:n,accum:a}=Mg(e,t,d.id,r,i,o);return{shape:n,evolution:{modified:a.combinedModified,generated:a.combinedGenerated,deleted:a.combinedDeleted},diagnostics:l}}}return{...kg(e,s(t,n,a),r,i,!1,t),diagnostics:l}}function Pg(e,t,n,r,i,a,o){return kg(e,_m(e,t,n,r,i),a,o,!0)}function Fg(e,t,n,r,i,a,o){return kg(e,vm(e,t,n*180/Math.PI,a,o),r,i,!0)}function Ig(e,t,n,r,i,a){return kg(e,ym(e,t,n,r),i,a,!0)}function Lg(e,t,n,r,i,a){return kg(e,bm(e,t,n,r),i,a,!0)}function Rg(e,t,n,r,i,a,o){return kg(e,xm(e,t,n,r,i),a,o,!0)}function zg(e,t,n,r,i,a){return Ng(e,t,n,r,i,a,(t,n)=>e.fuseWithEvolution(t,n),(t,n,r)=>Ym(e,t,n,r),`fuseWithHistory`)}function Bg(e,t,n,r,i,a){return Ng(e,t,n,r,i,a,(t,n)=>e.cutWithEvolution(t,n),(t,n,r)=>Xm(e,t,n,r),`cutWithHistory`)}function Vg(e,t,n,r,i,a){return Ng(e,t,n,r,i,a,(t,n)=>e.intersectWithEvolution(t,n),(t,n,r)=>Zm(e,t,n,r),`intersectWithHistory`)}function Hg(e,t,n,r,i,a){return kg(e,Qh(e,t,n,r),i,a,!1,t)}function Ug(e,t,n,r,i,a){return kg(e,$h(e,t,n,r),i,a,!1,t)}function Wg(e,t,n,r,i,a,o){return kg(e,ag(e,t,n,r,o),i,a,!1,t)}function Gg(e,t,n,r,i){return kg(e,og(e,t,n),r,i,!1,t)}function Kg(e,t,n,r,i,a){return kg(e,sg(e,t,n,a),r,i,!1,t)}function qg(e,t,n,r,i,a,o,s){return kg(e,lg(e,t,n,r,i,a),o,s,!1,t)}function Jg(e,t,n,r,i){return kg(e,km(e,t,n),r,i,!0)}function Yg(e,t){let n=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];for(let e of t)n=$f(e.type===`translate`?Jf(e.x,e.y,e.z):Yf(e.angle,e.axis,e.center),n);return{handle:n,dispose:()=>{}}}function Xg(e){return{translateWithHistory:(t,n,r,i,a,o)=>Pg(e,t,n,r,i,a,o),rotateWithHistory:(t,n,r,i,a,o)=>Fg(e,t,n,r,i,a,o),mirrorWithHistory:(t,n,r,i,a)=>Ig(e,t,n,r,i,a),scaleWithHistory:(t,n,r,i,a)=>Lg(e,t,n,r,i,a),generalTransformWithHistory:(t,n,r,i,a,o)=>Rg(e,t,n,r,i,a,o),fuseWithHistory:(t,n,r,i,a)=>zg(e,t,n,r,i,a),cutWithHistory:(t,n,r,i,a)=>Bg(e,t,n,r,i,a),intersectWithHistory:(t,n,r,i,a)=>Vg(e,t,n,r,i,a),filletWithHistory:(t,n,r,i,a)=>Hg(e,t,n,r,i,a),chamferWithHistory:(t,n,r,i,a)=>Ug(e,t,n,r,i,a),shellWithHistory:(t,n,r,i,a,o)=>Wg(e,t,n,r,i,a,o),thickenWithHistory:(t,n,r,i)=>Gg(e,t,n,r,i),offsetWithHistory:(t,n,r,i,a)=>Kg(e,t,n,r,i,a),draftWithHistory:(t,n,r,i,a,o,s)=>qg(e,t,n,r,i,up(n,a),o,s),applyComposedTransformWithHistory:(t,n,r,i)=>Jg(e,t,n,r,i),composeTransform:t=>Yg(e,t)}}function Zg(e,t,n){let r=R(t),i=t,a=n.tolerance||.01,o=n.angularTolerance>0?n.angularTolerance:void 0,s;if(i.type===`solid`)s=e_(e,r,a,!!n.includeUVs,o);else if(i.type===`face`)s=a_(e,r,a,0,o);else throw Error(`brepkit: cannot mesh shape of type '${i.type}'`);return n.skipNormals&&(s.normals=new Float32Array),n.includeUVs||(s.uvs=new Float32Array),s}function Qg(e,n,r,i){let a=n;if(a.type!==`solid`)return{lines:new Float32Array,edgeGroups:[]};let o=i>0?i:void 0,s=e.meshEdgesAll(a.id,r,o),c=s.positions,l=s.offsets,u=s.edgeCount,d=[];for(let e=0;e<u;e++){let n=t(l,e),r=((e+1<u?t(l,e+1):c.length)-n)/3;d.push({start:n/3,count:r,edgeHash:e})}return{lines:new Float32Array(c),edgeGroups:d}}function $g(e,t){return!1}function e_(e,t,n,r,i){try{return t_(e,t,n,r,i)}catch(r){return console.warn(`brepkit: tessellateSolidGrouped failed (solidId=${t}), falling back to per-face:`,r),i_(e,t,n,i)}}function t_(e,t,n,r,i){return typeof e.tessellateSolidGroupedBinary==`function`?n_(e,t,n,r,i,e.tessellateSolidGroupedBinary(t,n,i)):r_(e,t,n,r,i)}function n_(e,n,r,i,a,o){let s=o.positions,c=o.normals,l=o.indices,u=o.faceOffsets,d=z(e.getSolidFaces(n)),f=u.length-1;if(f!==d.length)throw Error(`faceOffsets/faceIds length mismatch: ${f} groups vs ${d.length} faces`);let p=[];for(let e=0;e<u.length-1;e++){let n=t(u,e),r=t(u,e+1)-n;r!==0&&p.push({start:n,count:r,faceHash:d[e]??0})}let m=new Float32Array;if(i){let t=s.length/3*2;try{let i=e.tessellateSolidUV(n,r,a),o=JSON.parse(i);m=o.uvs.length===t?new Float32Array(o.uvs):new Float32Array(t)}catch{m=new Float32Array(t)}}return{vertices:s,normals:c,triangles:l,uvs:m,faceGroups:p}}function r_(e,n,r,i,a){let o=e.tessellateSolidGrouped(n,r,a),s=JSON.parse(o),c=z(e.getSolidFaces(n)),l=s.faceOffsets.length-1;if(l!==c.length)throw Error(`faceOffsets/faceIds length mismatch: ${l} groups vs ${c.length} faces`);let u=[];for(let e=0;e<s.faceOffsets.length-1;e++){let n=t(s.faceOffsets,e),r=t(s.faceOffsets,e+1)-n;r!==0&&u.push({start:n,count:r,faceHash:c[e]??0})}let d=new Float32Array;if(i){let t=s.positions.length/3*2;try{let i=e.tessellateSolidUV(n,r,a),o=JSON.parse(i);d=o.uvs.length===t?new Float32Array(o.uvs):new Float32Array(t)}catch{d=new Float32Array(t)}}return{vertices:new Float32Array(s.positions),normals:new Float32Array(s.normals),triangles:new Uint32Array(s.indices),uvs:d,faceGroups:u}}function i_(e,t,n,r){let i=z(e.getSolidFaces(t)),a=[],o=[],s=[],c=[],l=[],u=0;for(let t of i)try{let i=e.tessellateFace(t,n,r),d=i.positions,f=i.normals,p=i.indices,m=d.length/3;if(m===0)continue;let h=s.length;for(let e of d)a.push(e);for(let e of f)o.push(e);for(let e of p)s.push(e+u);for(let e=0;e<m;e++)c.push(0,0);l.push({start:h,count:p.length,faceHash:t}),u+=m}catch(e){console.warn(`brepkit: face tessellation failed (faceId=${t}):`,e)}return{vertices:new Float32Array(a),normals:new Float32Array(o),triangles:new Uint32Array(s),uvs:new Float32Array(c),faceGroups:l}}function a_(e,t,n,r,i){let a=e.tessellateFace(t,n,i),o=a.positions,s=a.normals,c=a.indices,l=o.length/3,u=[];for(let e=0;e<l;e++)u.push(0,0);return{vertices:new Float32Array(o),normals:new Float32Array(s),triangles:new Uint32Array(c),uvs:new Float32Array(u),faceGroups:[{start:0,count:c.length,faceHash:r}]}}function o_(e){return{mesh:(t,n)=>Zg(e,t,n),meshEdges:(t,n,r)=>Qg(e,t,n,r),hasTriangulation:t=>$g(e,t),meshShape:(e,t,n)=>{}}}function s_(e,t){if(t.length===0)return``;let n=[];for(let r of t){let t=Gf(e,r,`exportSTEP`);for(let r of t){let t=e.exportStep(r);n.push(new TextDecoder().decode(t))}}return n.join(`
8
8
  `)}function c_(e,n,r,i=be,a=xe){let{vertices:o,triangles:s}=Zg(e,L(t(Gf(e,n,`exportSTL`),0)),{tolerance:i,angularTolerance:a,skipNormals:!0});return r?we(o,s):Te(o,s)}function l_(e,t){let n=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);return z(e.importStep(n)).map(L)}function u_(e,t){let n=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);return L(e.importStl(n))}function d_(e,t){if(t.length===0)return``;let n=[];for(let r of t){let t=Gf(e,r,`exportIGES`);for(let r of t){let t=e.exportIges(r);n.push(new TextDecoder().decode(t))}}return n.join(`
9
9
  `)}function f_(e,t){let n=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);return z(e.importIges(n)).map(L)}function p_(e,t,n){return t.length===0?``:s_(e,t.map(e=>e.shape))}function m_(e,t,n){let r=Wf(t,`export3MF`);return qf(e.export3mf(r,n))}function h_(e,t,n){let r=Wf(t,`exportGLB`);return qf(e.exportGlb(r,n))}function g_(e,t,n){let r=Wf(t,`exportOBJ`);return qf(e.exportObj(r,n))}function __(e,t,n){let r=Wf(t,`exportPLY`);return qf(e.exportPly(r,n))}function v_(e,t){return z(e.import3mf(new Uint8Array(t))).map(e=>L(e))}function y_(e,t){return L(e.importObj(new Uint8Array(t)))}function b_(e,t){return L(e.importGlb(new Uint8Array(t)))}function x_(e,t){let n=t;return n.type===`solid`?e.toBREP(n.id):(ap(`brep-non-solid`,`toBREP for non-solid shapes uses STEP format.`),s_(e,[t]))}function S_(e,t){if(typeof e.fromBREP==`function`&&t.trimStart().startsWith(`{`))return L(e.fromBREP(t));let n=l_(e,t)[0];if(!n)throw Error(`brepkit: fromBREP produced no shapes`);return n}function C_(e,t){return{__brepkit_xcaf:!0,shapes:t,delete:Ff}}function w_(e,t,n){return t&&t.__brepkit_xcaf&&Array.isArray(t.shapes)?s_(e,t.shapes.map(e=>e.shape)):``}function T_(e,t,n){return s_(e,t.map(e=>e.shape))}function E_(e){return{exportSTEP:t=>s_(e,t),exportSTL:(t,n,r,i)=>c_(e,t,n,r,i),importSTEP:t=>l_(e,t),importSTL:t=>u_(e,t),exportIGES:t=>d_(e,t),importIGES:t=>f_(e,t),exportSTEPAssembly:(t,n)=>p_(e,t,n),export3MF:(t,n)=>m_(e,t,n),exportGLB:(t,n)=>h_(e,t,n),exportOBJ:(t,n)=>g_(e,t,n),exportPLY:(t,n)=>__(e,t,n),import3MF:t=>v_(e,t),importOBJ:t=>y_(e,t),importGLB:t=>b_(e,t),toBREP:t=>x_(e,t),fromBREP:t=>S_(e,t),createXCAFDocument:t=>C_(e,t),writeXCAFToSTEP:(t,n)=>w_(e,t,n),exportSTEPConfigured:(t,n)=>T_(e,t,n)}}function D_(e,t){return{x:e,y:t}}function O_(e,t){let n=Math.sqrt(e*e+t*t);if(n<1e-15)throw Error(`brepkit: createDirection2d called with zero-length vector`);return{x:e/n,y:t/n}}function k_(e,t){return{x:e,y:t}}function A_(e,t,n,r){return{px:e,py:t,dx:n,dy:r,delete:Ff}}function j_(e){return e}function M_(e){return e}function N_(e,t,n,r){return x(e,t,n,r)}function P_(e,t,n,r){return S(e,t,n,r)}function F_(e,t,n,r,i,a){let o=2*(e*(r-a)+n*(a-t)+i*(t-r));if(Math.abs(o)<1e-12)return x(e,t,i,a);let s=((e*e+t*t)*(r-a)+(n*n+r*r)*(a-t)+(i*i+a*a)*(t-r))/o,c=((e*e+t*t)*(i-n)+(n*n+r*r)*(e-i)+(i*i+a*a)*(n-e))/o,l=Math.sqrt((e-s)**2+(t-c)**2),u=Math.atan2(t-c,e-s),d=Math.atan2(r-c,n-s),f=Math.atan2(a-c,i-s),p=d-u;p<0&&(p+=2*Math.PI);let m=f-u;m<0&&(m+=2*Math.PI);let h=p<m,g=S(s,c,l,h);if(!h){let e=-u,t=-f;return t<e-1e-9&&(t+=2*Math.PI),{__bk2d:`trimmed`,basis:g,tStart:e,tEnd:t}}let _=f;return _<u-1e-9&&(_+=2*Math.PI),{__bk2d:`trimmed`,basis:g,tStart:u,tEnd:_}}function I_(e,t,n,r,i,a){let o=Math.sqrt(n*n+r*r),s=o>0?n/o:0,c=o>0?r/o:0,l=e-i,u=t-a,d=2*(u*s-l*c);if(Math.abs(d)<1e-12)return x(e,t,i,a);let f=-(l*l+u*u)/d,p=e-f*c,m=t+f*s,h=Math.abs(f),g=Math.atan2(t-m,e-p),_=Math.atan2(a-m,i-p),v=-(t-m)/h,y=(e-p)/h,b=s*v+c*y,S;if(b>0){let e=_-g;e<=0&&(e+=2*Math.PI),S=g+e/2}else{let e=_-g;e>=0&&(e-=2*Math.PI),S=g+e/2}return F_(e,t,p+h*Math.cos(S),m+h*Math.sin(S),i,a)}function L_(e,t,n,r,i,a,o){return C(e,t,n,r,i,a,o)}function R_(e,t,n,r,i,a,o,s,c){let l=C(e,t,n,r,o,s,c),u=c!==!1,d=u?i:-i,f=u?a:-a;return f<d-1e-9&&(f+=2*Math.PI),{__bk2d:`trimmed`,basis:l,tStart:d,tEnd:f}}function z_(e){return w(e)}function B_(e,t){let n=e.length,r=Math.min(3,n-1),i=[],a=[];i.push(0),a.push(r+1);let o=n-r-1;for(let e=1;e<=o;e++)i.push(e/(o+1)),a.push(1);return i.push(1),a.push(r+1),{__bk2d:`bspline`,poles:[...e],knots:i,multiplicities:a,degree:r,isPeriodic:!1}}function V_(e,t){return _(sp(e),t)}function H_(e,t){return{point:_(sp(e),t),tangent:v(sp(e),t)}}function U_(e){return y(sp(e))}function W_(e){return b(cp(e))}function G_(e,t,n){return{__bk2d:`trimmed`,basis:sp(e),tStart:t,tEnd:n}}function K_(e){let t=e;switch(t.__bk2d){case`line`:{let e=t;e.ox+=e.dx*e.len,e.oy+=e.dy*e.len,e.dx=-e.dx,e.dy=-e.dy;break}case`circle`:case`ellipse`:{let e=t;e.sense=!e.sense;break}case`trimmed`:{let e=t;[e.tStart,e.tEnd]=[e.tEnd,e.tStart];break}case`bezier`:{let e=t;e.poles=[...e.poles].reverse();break}case`bspline`:{let e=t;e.poles=[...e.poles].reverse();let n=e.knots[0],r=e.knots[e.knots.length-1];n!==void 0&&r!==void 0&&(e.knots=e.knots.map(e=>n+r-e).reverse()),Array.isArray(e.weights)&&(e.weights=[...e.weights].reverse());break}default:break}}function q_(e){return JSON.parse(JSON.stringify(e))}function J_(e,t){let n=sp(e),r=y(n),i=[];for(let e=0;e<=30;e++){let a=r.first+(r.last-r.first)*e/30,[o,s]=_(n,a),[c,l]=v(n,a),u=Math.sqrt(c*c+l*l);u>1e-12?i.push([o-l/u*t,s+c/u*t]):i.push([o,s])}return B_(i)}function Y_(e,t,n){return ee(sp(e),t,n)}function X_(e,t,n,r){return te(sp(e),t,n,r)}function Z_(e,t,n,r){return ne(sp(e),t,n,r)}function Q_(e,t,n){return re(sp(e),t,n)}function $_(e,t,n,r,i){return ie(sp(e),t,n,r,i)}function ev(e,t,n,r,i,a){return uv(e,rv(t,n,r,i,a))}function tv(e,t,n){return{m:e,tx:t,ty:n,delete:Ff}}function nv(){return tv([1,0,0,0,1,0,0,0,1],0,0)}function rv(e,n,r,i,a){let o=Math.sqrt(r*r+i*i);if(o<1e-15)return nv();let s=-i/o,c=r/o,l=a-1,u=[1+l*s*s,l*s*c,0,l*c*s,1+l*c*c,0,0,0,1];return tv(u,e-t(u,0)*e-t(u,1)*n,n-t(u,3)*e-t(u,4)*n)}function iv(e,t){return tv([1,0,0,0,1,0,0,0,1],e,t)}function av(e,n,r,i,a,o,s){if(r===`axis`&&o!==void 0&&s!==void 0){let r=Math.sqrt(o*o+s*s),c=o/r,l=s/r,u=[2*c*c-1,2*c*l,0,2*c*l,2*l*l-1,0,0,0,1],d=i??e,f=a??n;return tv(u,d-t(u,0)*d-t(u,1)*f,f-t(u,3)*d-t(u,4)*f)}return tv([-1,0,0,0,-1,0,0,0,1],2*e,2*n)}function ov(e,t,n){let r=Math.cos(e),i=Math.sin(e);return tv([r,-i,0,i,r,0,0,0,1],t-r*t+i*n,n-i*t-r*n)}function sv(e,t,n){return tv([e,0,0,0,e,0,0,0,1],t*(1-e),n*(1-e))}function cv(e,t,n){e.tx=t,e.ty=n}function lv(e,n){let r=e.m,i=n.m,a=e=>t(r,e),o=e=>t(i,e);e.m=[a(0)*o(0)+a(1)*o(3)+a(2)*o(6),a(0)*o(1)+a(1)*o(4)+a(2)*o(7),a(0)*o(2)+a(1)*o(5)+a(2)*o(8),a(3)*o(0)+a(4)*o(3)+a(5)*o(6),a(3)*o(1)+a(4)*o(4)+a(5)*o(7),a(3)*o(2)+a(4)*o(5)+a(5)*o(8),a(6)*o(0)+a(7)*o(3)+a(8)*o(6),a(6)*o(1)+a(7)*o(4)+a(8)*o(7),a(6)*o(2)+a(7)*o(5)+a(8)*o(8)];let s=e.tx,c=e.ty,l=Number(n.tx)||0,u=Number(n.ty)||0;e.tx=a(0)*l+a(1)*u+s,e.ty=a(3)*l+a(4)*u+c}function uv(e,n){let r=sp(e),i=n.m??[1,0,0,0,1,0,0,0,1],a=Number(n.tx)||0,o=Number(n.ty)||0,s=t(i,0),c=t(i,1),l=t(i,3),u=t(i,4);if(Math.abs(s-1)<1e-12&&Math.abs(u-1)<1e-12&&Math.abs(c)<1e-12&&Math.abs(l)<1e-12)return ee(r,a,o);let d=y(r),f=[];for(let e=0;e<=20;e++){let[t,n]=_(r,d.first+(d.last-d.first)*e/20);f.push([s*t+c*n+a,l*t+u*n+o])}return w(f)}function dv(e,t,n){let r=ae(sp(e),sp(t),n),i=r.segments.map(e=>Object.assign(e,{delete(){}}));return{points:r.points,segments:i}}function fv(e,t,n){let r=sp(e),i=y(r);if(r.__bk2d===`line`){let e=t-r.ox,a=n-r.oy,o=Math.max(i.first,Math.min(i.last,e*r.dx+a*r.dy)),[s,c]=_(r,o);return{param:o,distance:Math.sqrt((s-t)**2+(c-n)**2)}}if(r.__bk2d===`circle`){let e=Math.atan2(n-r.cy,t-r.cx),i=r.sense?e:-e;for(;i<0;)i+=2*Math.PI;for(;i>2*Math.PI;)i-=2*Math.PI;let[a,o]=_(r,i);return{param:i,distance:Math.sqrt((a-t)**2+(o-n)**2)}}if(!isFinite(i.first)||!isFinite(i.last))return null;let a=i.first,o=1/0,s=(i.last-i.first)/200;for(let e=0;e<=200;e++){let c=i.first+e*s,[l,u]=_(r,c),d=(l-t)**2+(u-n)**2;d<o&&(o=d,a=c)}for(let e=0;e<10;e++){let[e,o]=_(r,a),[s,c]=v(r,a),l=(e-t)*s+(o-n)*c,u=s*s+c*c;if(u<1e-20)break;let d=l/u,f=Math.max(i.first,Math.min(i.last,a-d));if(Math.abs(f-a)<1e-14)break;a=f}let[c,l]=_(r,a);return{param:a,distance:Math.sqrt((c-t)**2+(l-n)**2)}}function pv(e,t,n,r,i,a){let o=sp(e),s=sp(t),c=n,l=i,u=1/0;for(let e=0;e<=50;e++){let t=n+(r-n)*e/50,[d,f]=_(o,t);for(let e=0;e<=50;e++){let n=i+(a-i)*e/50,[r,o]=_(s,n),p=(r-d)**2+(o-f)**2;p<u&&(u=p,c=t,l=n)}}let d=c,f=l;for(let c=0;c<20;c++){let[c,l]=_(s,f),u=fv(e,c,l);if(u){let e=Math.max(n,Math.min(r,u.param)),t=Math.abs(e-d)<1e-12;if(d=e,t)break}let[p,m]=_(o,d),h=fv(t,p,m);if(h){let e=Math.max(i,Math.min(a,h.param)),t=Math.abs(e-f)<1e-12;if(f=e,t)break}}let[p,m]=_(o,d),[h,g]=_(s,f);return Math.sqrt((h-p)**2+(g-m)**2)}function mv(e,n,r,i){let a=sp(e),o=y(a),s=Math.max(3,{C0:1,C1:2,C2:3,C3:4}[r]??4),c=Math.max(100,i*10),l=[],u=1/0;for(let e=0;e<3&&u>n;e++){l=[];for(let e=0;e<=c;e++){let t=o.first+(o.last-o.first)*e/c;l.push(_(a,t))}u=0;for(let e=0;e<c;e++){let[n,r]=_(a,o.first+(o.last-o.first)*(e+.5)/c),i=t(l,e),s=t(l,e+1),d=(i[0]+s[0])/2,f=(i[1]+s[1])/2,p=Math.sqrt((n-d)**2+(r-f)**2);p>u&&(u=p)}u>n&&(c=Math.min(c*2,500))}return B_(l,{degMax:s})}function hv(e){let n=cp(e);if(n.__bk2d===`bezier`)return[e];if(n.__bk2d!==`bspline`)return hv(mv(e,1e-6,`C2`,10));let r=y(sp(e)),i=r.first,a=r.last,o=[];for(let e of n.knots)e>i+1e-12&&e<a-1e-12&&o.push(e);let s=[i,...o,a],c=[];for(let e=0;e<s.length-1;e++){let r=t(s,e),i=t(s,e+1),a=i-r;if(a<1e-15)continue;let o=_(n,r),l=_(n,i),u=v(n,r),d=v(n,i),f=a/3,p={__bk2d:`bezier`,poles:[o,[o[0]+u[0]*f,o[1]+u[1]*f],[l[0]-d[0]*f,l[1]-d[1]*f],l]};c.push(p)}return c.length>0?c:[e]}function gv(){return ge()}function _v(e,t,n){_e(lp(e),sp(t),n)}function vv(e){let t=lp(e);return{xMin:t.xMin,yMin:t.yMin,xMax:t.xMax,yMax:t.yMax}}function yv(e,t){let n=lp(e),r=lp(t);n.xMin=Math.min(n.xMin,r.xMin),n.yMin=Math.min(n.yMin,r.yMin),n.xMax=Math.max(n.xMax,r.xMax),n.yMax=Math.max(n.yMax,r.yMax)}function bv(e,t){let n=lp(e),r=lp(t);return n.xMax<r.xMin||r.xMax<n.xMin||n.yMax<r.yMin||r.yMax<n.yMin}function xv(e,t,n){let r=lp(e);return t<r.xMin||t>r.xMax||n<r.yMin||n>r.yMax}function Sv(e){let t=cp(e);return t.__bk2d===`circle`?{cx:t.cx,cy:t.cy,radius:t.radius,isDirect:t.sense}:null}function Cv(e){let t=cp(e);return t.__bk2d===`ellipse`?{majorRadius:t.majorRadius,minorRadius:t.minorRadius,xAxisAngle:t.xDirAngle,isDirect:t.sense}:null}function wv(e){let t=cp(e);return t.__bk2d===`bezier`?[...t.poles]:null}function Tv(e){let t=cp(e);return t.__bk2d===`bezier`?t.poles.length-1:null}function Ev(e){let t=cp(e);return t.__bk2d===`bspline`?{poles:[...t.poles],knots:[...t.knots],multiplicities:[...t.multiplicities],degree:t.degree,isPeriodic:t.isPeriodic}:null}function Dv(e){return me(sp(e))}function Ov(e){return he(e)}function kv(e,t){let n=sp(e),r=y(n),i=[r.first,...[...t].sort((e,t)=>e-t),r.last],a=[];for(let e=0;e<i.length-1;e++)a.push({__bk2d:`trimmed`,basis:n,tStart:i[e],tEnd:i[e+1]});return a}function Av(e,n,r,i,a){let o=sp(n),s=[i[1]*a[2]-i[2]*a[1],i[2]*a[0]-i[0]*a[2],i[0]*a[1]-i[1]*a[0]],c=(e,t)=>[r[0]+e*a[0]+t*s[0],r[1]+e*a[1]+t*s[1],r[2]+e*a[2]+t*s[2]];if(o.__bk2d===`line`)return yh(e,c(o.ox,o.oy),c(o.ox+o.dx*o.len,o.oy+o.dy*o.len));if(o.__bk2d===`circle`||o.__bk2d===`trimmed`){let n=o;for(;n.__bk2d===`trimmed`;)n=n.basis;if(n.__bk2d===`circle`){let r=n,a=c(r.cx,r.cy),s=r.sense?i:[-i[0],-i[1],-i[2]],l=y(o),u;u=o.__bk2d===`trimmed`?Math.abs(o.tEnd-o.tStart):2*Math.PI;let d=u>Math.PI?4:u>Math.PI/2?2:1,f=(l.last-l.first)/d,p=[];for(let t=0;t<d;t++){let[n,r]=_(o,l.first+t*f),[i,u]=_(o,l.first+(t+1)*f);p.push(e.makeCircleArc3d(...c(n,r),...c(i,u),...a,...s))}return p.length===1?zf(t(p,0)):Bf(e.makeWire(p,!1))}}if(o.__bk2d===`bezier`||o.__bk2d===`bspline`){let n=o.poles.map(([e,t])=>c(e,t));if(n.length===2)return yh(e,t(n,0),t(n,1));let r=Math.min(3,n.length-1),i=n.flatMap(([e,t,n])=>[e,t,n]);return zf(e.interpolatePoints(i,r))}let l=y(o),u=[];for(let e=0;e<=100;e++){let[t,n]=_(o,l.first+(l.last-l.first)*e/100);u.push(c(t,n))}return Vh(e,u)}function jv(e,t,r){if(!If(r))throw Error(`brepkit: buildEdgeOnSurface requires a face handle as surface`);let i=R(r,`face`),a=sp(t),o=y(a),s=e.getSurfaceType(i)===`plane`?50:100,c=[];for(let t=0;t<=s;t++){let[r,l]=_(a,o.first+(o.last-o.first)*t/s);c.push(n(e.evaluateSurface(i,r,l)))}return Vh(e,c)}function Mv(e){return e}function Nv(e,n,r,i){let a=0;for(;e.length<r;){let o=[];for(let r=0;r<e.length-1;r++){let a=t(e,r),s=t(e,r+1),c=(a.t+s.t)/2,l=n(c),u=(a.uv[0]+s.uv[0])/2,d=(a.uv[1]+s.uv[1])/2;Math.sqrt((l[0]-u)**2+(l[1]-d)**2)>i&&o.push({index:r+1,t:c,uv:l})}if(o.length===0)break;let s=r-e.length;for(let n=o.length-1;n>=0&&s>0;n--){let r=t(o,n);e.splice(r.index,0,{t:r.t,uv:r.uv}),s--}if(a++,a>3)break}}function Pv(e,n,r){let i=R(n,`edge`),a=R(r,`face`),o=e.getEdgeCurveParameters(i),s=o[0]??0,c=o[1]??1,l=[];for(let e=0;e<=20;e++)l.push(s+(c-s)*e/20);let u=n=>{let r=e.evaluateEdgeCurve(i,n),o=e.projectPointOnSurface(a,t(r,0),t(r,1),t(r,2));return[t(o,0),t(o,1)]},d=l.map(e=>({t:e,uv:u(e)}));Nv(d,u,80,.05);let f=d.map(e=>e.uv);if(f.length>=2)return B_(f);let p=e.getEdgeVertices(i);if(p.length>=6){let n=e.projectPointOnSurface(a,t(p,0),t(p,1),t(p,2)),r=e.projectPointOnSurface(a,t(p,3),t(p,4),t(p,5));return x(t(n,0),t(n,1),t(r,0),t(r,1))}throw Error(`brepkit: extractCurve2dFromEdge: degenerate edge (${p.length} coords)`)}function Fv(e,t,n){return e}function Iv(e,n,r){if(n.length>=1){let r=yp(e,n[0],`edge`);if(r.length===4){let n=[],i=[];for(let a of r){let r=R(a,`edge`),o=e.getEdgeCurveParameters(r),s=t(o,0),c=t(o,1),l=[];for(let n=0;n<=10;n++){let i=s+(c-s)*n/10,a=e.evaluateEdgeCurve(r,i);l.push(t(a,0),t(a,1),t(a,2))}n.push(...l),i.push(11)}try{return Rf(e.fillCoonsPatch(n,i))}catch(e){console.warn(`brepkit: Coons patch failed, falling back:`,e)}}}let i=n[0];if(!i)throw Error(`fillSurface: no wires provided`);return Nh(e,i)}function Lv(e){return{createPoint2d:(e,t)=>D_(e,t),createDirection2d:(e,t)=>O_(e,t),createVector2d:(e,t)=>k_(e,t),createAxis2d:(e,t,n,r)=>A_(e,t,n,r),wrapCurve2dHandle:e=>j_(e),createCurve2dAdaptor:e=>M_(e),makeLine2d:(e,t,n,r)=>N_(e,t,n,r),makeCircle2d:(e,t,n,r)=>P_(e,t,n,r),makeArc2dThreePoints:(e,t,n,r,i,a)=>F_(e,t,n,r,i,a),makeArc2dTangent:(e,t,n,r,i,a)=>I_(e,t,n,r,i,a),makeEllipse2d:(e,t,n,r,i,a,o)=>L_(e,t,n,r,i,a,o),makeEllipseArc2d:(e,t,n,r,i,a,o,s,c)=>R_(e,t,n,r,i,a,o,s,c),makeBezier2d:e=>z_(e),makeBSpline2d:(e,t)=>B_(e,t),evaluateCurve2d:(e,t)=>V_(e,t),evaluateCurve2dD1:(e,t)=>H_(e,t),getCurve2dBounds:e=>U_(e),getCurve2dType:e=>W_(e),trimCurve2d:(e,t,n)=>G_(e,t,n),reverseCurve2d:e=>{K_(e)},copyCurve2d:e=>q_(e),offsetCurve2d:(e,t)=>J_(e,t),translateCurve2d:(e,t,n)=>Y_(e,t,n),rotateCurve2d:(e,t,n,r)=>X_(e,t,n,r),scaleCurve2d:(e,t,n,r)=>Z_(e,t,n,r),mirrorCurve2dAtPoint:(e,t,n)=>Q_(e,t,n),mirrorCurve2dAcrossAxis:(e,t,n,r,i)=>$_(e,t,n,r,i),affinityTransform2d:(e,t,n,r,i,a)=>ev(e,t,n,r,i,a),createIdentityGTrsf2d:()=>nv(),createAffinityGTrsf2d:(e,t,n,r,i)=>rv(e,t,n,r,i),createTranslationGTrsf2d:(e,t)=>iv(e,t),createMirrorGTrsf2d:(e,t,n,r,i,a,o)=>av(e,t,n,r,i,a,o),createRotationGTrsf2d:(e,t,n)=>ov(e,t,n),createScaleGTrsf2d:(e,t,n)=>sv(e,t,n),setGTrsf2dTranslationPart:(e,t,n)=>{cv(e,t,n)},multiplyGTrsf2d:(e,t)=>{lv(e,t)},transformCurve2dGeneral:(e,t)=>uv(e,t),intersectCurves2d:(e,t,n)=>dv(e,t,n),projectPointOnCurve2d:(e,t,n)=>fv(e,t,n),distanceBetweenCurves2d:(e,t,n,r,i,a)=>pv(e,t,n,r,i,a),approximateCurve2dAsBSpline:(e,t,n,r)=>mv(e,t,n,r),decomposeBSpline2dToBeziers:e=>hv(e),createBoundingBox2d:()=>gv(),addCurveToBBox2d:(e,t,n)=>{_v(e,t,n)},getBBox2dBounds:e=>vv(e),mergeBBox2d:(e,t)=>{yv(e,t)},isBBox2dOut:(e,t)=>bv(e,t),isBBox2dOutPoint:(e,t,n)=>xv(e,t,n),getCurve2dCircleData:e=>Sv(e),getCurve2dEllipseData:e=>Cv(e),getCurve2dBezierPoles:e=>wv(e),getCurve2dBezierDegree:e=>Tv(e),getCurve2dBSplineData:e=>Ev(e),serializeCurve2d:e=>Dv(e),deserializeCurve2d:e=>Ov(e),splitCurve2d:(e,t)=>kv(e,t),liftCurve2dToPlane:(t,n,r,i)=>Av(e,t,n,r,i),buildEdgeOnSurface:(t,n)=>jv(e,t,n),extractSurfaceFromFace:e=>Mv(e),extractCurve2dFromEdge:(t,n)=>Pv(e,t,n),buildCurves3d:e=>{},fixWireOnFace:(e,t,n)=>Fv(e,t,n),fillSurface:(t,n)=>Iv(e,t,n)}}function Rv(e,t){let n=t;if(n.type===`solid`)return e.volume(R(t),ep);if(n.type===`compound`){let n=yp(e,t,`solid`),r=0;for(let t of n)r+=e.volume(R(t),ep);return r}return 0}function zv(e,t){let n=t;if(n.type===`face`)return e.faceArea(R(t),ep);if(n.type===`solid`)return e.surfaceArea(R(t),ep);if(n.type===`compound`){let n=yp(e,t,`face`),r=0;for(let t of n)r+=e.faceArea(R(t),ep);return r}return 0}function Bv(e,t){let n=t;if(n.type===`edge`)return e.edgeLength(R(t));if(n.type===`face`)return e.facePerimeter(R(t));if(n.type===`wire`)return e.wireLength(n.id);throw Error(`brepkit: length() requires an edge, wire, or face`)}function Vv(e,n){let r=e.getEdgeVertices(n);return[(t(r,0)+t(r,3))/2,(t(r,1)+t(r,4))/2,(t(r,2)+t(r,5))/2]}function Hv(e,t){let r=t;if(r.type===`solid`)return n(e.centerOfMass(R(t),ep));if(r.type===`face`){let n=Ip(e,t);return zp(e,t,(n.uMin+n.uMax)/2,(n.vMin+n.vMax)/2)}if(r.type===`edge`)return Vv(e,r.id);if(r.type===`vertex`)return Pp(e,t);let i=yp(e,t,`vertex`);if(i.length>0){let t=0,n=0,r=0;for(let a of i){let i=Pp(e,a);t+=i[0],n+=i[1],r+=i[2]}return[t/i.length,n/i.length,r/i.length]}return[0,0,0]}function Uv(e,t){let n=t;return n.type===`edge`?Vv(e,n.id):Hv(e,t)}function Wv(e,t){let r=t;if(r.type===`solid`){let r=e.boundingBox(R(t));return{min:n(r,0),max:n(r,3)}}if(r.type===`vertex`){let n=Pp(e,t);return{min:[...n],max:[...n]}}let i=yp(e,t,`vertex`);if(i.length===0)return{min:[0,0,0],max:[0,0,0]};let a=Pp(e,i[0]),o=a[0],s=a[1],c=a[2],l=a[0],u=a[1],d=a[2];for(let t=1;t<i.length;t++){let n=Pp(e,i[t]);n[0]<o&&(o=n[0]),n[0]>l&&(l=n[0]),n[1]<s&&(s=n[1]),n[1]>u&&(u=n[1]),n[2]<c&&(c=n[2]),n[2]>d&&(d=n[2])}return{min:[o,s,c],max:[l,u,d]}}function Gv(e,r,i){let a=r,o=i;if(a.type===`solid`&&o.type===`solid`){let r=e.solidToSolidDistance(a.id,o.id);return{value:t(r,0),point1:n(r,1),point2:n(r,4)}}if(a.type===`vertex`&&(o.type===`solid`||o.type===`face`||o.type===`edge`)){let r=n(e.getVertexPosition(a.id)),i=o.type===`solid`?e.pointToSolidDistance(r[0],r[1],r[2],o.id):o.type===`face`?e.pointToFaceDistance(r[0],r[1],r[2],o.id):e.pointToEdgeDistance(r[0],r[1],r[2],o.id);return{value:t(i,0),point1:r,point2:n(i,1)}}let s=r=>{if(r.type===`vertex`)return n(e.getVertexPosition(r.id));if(r.type===`solid`){let n=e.boundingBox(r.id);return[(t(n,0)+t(n,3))/2,(t(n,1)+t(n,4))/2,(t(n,2)+t(n,5))/2]}return[0,0,0]},c=s(a),l=s(o),u=l[0]-c[0],d=l[1]-c[1],f=l[2]-c[2];return{value:Math.sqrt(u*u+d*d+f*f),point1:c,point2:l}}function Kv(e,r,i,a){let o=R(r,`face`),s=e.measureCurvatureAtSurface(o,i,a);if(s.length<8)throw Error(`brepkit: measureCurvatureAtSurface returned ${s.length} values, expected 8`);let c=t(s,0),l=t(s,1);return{gaussian:c*l,mean:(c+l)/2,max:Math.max(c,l),min:Math.min(c,l),maxDirection:n(s,2),minDirection:n(s,5)}}function qv(e,n){let r=e.tessellateFace(R(n,`face`),.1),i=r.positions,a=r.indices,o=0,s=0,c=0,l=0;for(let e=0;e<a.length;e+=3){let n=t(a,e)*3,r=t(a,e+1)*3,u=t(a,e+2)*3,d=t(i,n),f=t(i,n+1),p=t(i,n+2),m=t(i,r),h=t(i,r+1),g=t(i,r+2),_=t(i,u),v=t(i,u+1),y=t(i,u+2),b=(d+m+_)/3,x=(f+h+v)/3,S=(p+g+y)/3,C=m-d,w=h-f,ee=g-p,te=_-d,ne=v-f,re=y-p,ie=.5*Math.sqrt((w*re-ee*ne)**2+(ee*te-C*re)**2+(C*ne-w*te)**2);o+=b*ie,s+=x*ie,c+=S*ie,l+=ie}return l<1e-30?[0,0,0]:[o/l,s/l,c/l]}function Jv(e,t){let n=n=>Gv(e,t,n);return{distanceTo(e){return n(e)},dispose(){}}}function Yv(e,t,n=!1){let r=t,i=r.type===`edge`||r.type===`wire`||r.type===`face`;return{volume:Rv(e,t),area:zv(e,t),length:n&&i?Bv(e,t):0,centerOfMass:Hv(e,t),boundingBox:Wv(e,t)}}function Xv(e){return{volume:t=>Rv(e,t),area:t=>zv(e,t),length:t=>Bv(e,t),centerOfMass:t=>Hv(e,t),linearCenterOfMass:t=>Uv(e,t),boundingBox:t=>Wv(e,t),distance:(t,n)=>Gv(e,t,n),surfaceCurvature:(t,n,r)=>Kv(e,t,n,r),surfaceCenterOfMass:t=>qv(e,t),createDistanceQuery:t=>Jv(e,t),measureBulk:(t,n)=>Yv(e,t,n)}}function Zv(e){return e.sketchNew()}function Qv(e,t,n,r,i){return e.sketchAddPoint(t,n,r,i)}function $v(e,t,n){e.sketchAddConstraint(t,n)}function ey(e,t,n,r){return e.sketchSolve(t,n,r)}function ty(e,t,n,r,i){return e.sketchAddArc(t,n,r,i)}function ny(e,t){let n=e.sketchDof(t);return typeof n==`string`?n:String(n)}function ry(e){return{sketchNew:()=>Zv(e),sketchAddPoint:(t,n,r,i)=>Qv(e,t,n,r,i),sketchAddArc:(t,n,r,i)=>ty(e,t,n,r,i),sketchAddConstraint:(t,n)=>{$v(e,t,n)},sketchSolve:(t,n,r)=>ey(e,t,n,r),sketchDof:t=>ny(e,t)}}function iy(e,t,n,r){return L(e.extrude(R(t,`face`),n[0],n[1],n[2],r))}function ay(e,t,n,r){if(n&&typeof n==`object`&&`origin`in n&&`direction`in n){let{origin:i,direction:a}=n,o=180/Math.PI*r;return o>360&&(o=360),L(e.revolve(R(t,`face`),i[0],i[1],i[2],a[0],a[1],a[2],o))}throw Error(`brepkit: revolve requires axis with origin and direction`)}function oy(e,t,n,r,i){let a=180/Math.PI*i;return a>360&&(a=360),L(e.revolve(R(t,`face`),n[0],n[1],n[2],r[0],r[1],r[2],a))}function sy(e,t,n,r,i){(n!==void 0||r!==void 0||i!==void 0)&&ap(`loft-options`,`Loft options (ruled, startShape, endShape) not supported; ignored.`);let a=t.map(t=>{let n=t;return n.type===`wire`?e.makeFaceFromWire(n.id):R(t,`face`)});return L(e.loft(a))}function cy(e){switch(e){case 0:return`rmf`;case 1:return`rightCorner`;case 2:return`roundCorner`;default:return}}function ly(e,t,n,r){let i=r?.transitionMode===void 0?void 0:cy(r.transitionMode),a=t,o=a.type===`wire`?e.makeFaceFromWire(a.id):R(t,`face`);if(n.type===`wire`){let t=yp(e,n,`edge`).map(e=>R(e,`edge`));if(i&&t.length===1){let n=t[0];if(n!==void 0)return L(e.sweepWithOptions(o,n,i,[],0,`transformed`))}return i&&t.length>1&&ap(`sweep-transition-multi-edge`,`Sweep transition mode not supported for multi-edge wires; ignored.`),L(e.sweepAlongEdges(o,t))}if(i){let t=R(n,`edge`);return L(e.sweepWithOptions(o,t,i,[],0,`transformed`))}let s=Nm(e,n);if(!s)throw Error(`brepkit: sweep spine must be an edge or wire`);return L(e.sweep(o,s.degree,s.knots,s.controlPoints,s.weights))}function uy(e,t,n){let r=t,i=r.type===`wire`?e.makeFaceFromWire(r.id):R(t,`face`);if(n.type===`wire`){let t=yp(e,n,`edge`).map(e=>R(e,`edge`));return L(e.sweepAlongEdges(i,t))}let a=Nm(e,n);if(!a)throw Error(`brepkit: pipe spine must be an edge or wire`);return L(e.pipe(i,a.degree,a.knots,a.controlPoints,a.weights))}function dy(e,t,n,r,i,a,o){let s=R(t,`face`);return L(e.helicalSweep(s,n[0],n[1],n[2],r[0],r[1],r[2],i,a,o))}function fy(e,t,n,r,i,a){let o=R(t,`face`),s=R(n,`edge`);return L(e.sweepWithOptions(o,s,r,i,a,`transformed`))}function py(e){switch(e){case`right`:return`rightCorner`;case`round`:return`roundCorner`;case`transformed`:return`rmf`;default:return}}function my(e,t,n){return n?{shape:e,firstShape:t,lastShape:t}:e}function hy(e,t,n,r){try{return L(e.sweepWithOptions(t,n,r,[],0,`transformed`))}catch(e){console.warn(`brepkit: sweepWithOptions failed, falling back to sweepSmooth/simplePipe:`,e);return}}function gy(e,t){try{if(t.type!==`wire`)return{edgeId:R(t,`edge`)};let n=yp(e,t,`edge`);if(n.length===1){let e=n[0];return e?{edgeId:R(e,`edge`)}:void 0}ap(`sweepPipeShell-transition-multi-edge`,`sweepPipeShell transition mode not supported for multi-edge wires; ignored.`);return}catch(e){console.warn(`brepkit: resolveContactModeEdge failed for unexpected spine type, falling through:`,e);return}}function _y(e,t,n,r){let i=gy(e,n);if(i)return hy(e,t,i.edgeId,r)}function vy(e,t,n){let r=Nm(e,n);if(!(!r||r.degree<=1))try{return L(e.sweepSmooth(t,r.degree,r.knots,r.controlPoints,r.weights))}catch(e){console.warn(`brepkit: sweepSmooth failed, falling back to simplePipe:`,e);return}}function yy(e,t,n,r){let i=t,a=i.type===`wire`?e.makeFaceFromWire(i.id):R(t,`face`),o=!!(r&&r.shellMode),s=r?.transitionMode,c=s?py(s):void 0;if(c){let r=_y(e,a,n,c);if(r)return my(r,t,o)}return my(vy(e,a,n)||uy(e,t,n),t,o)}function by(e,t,n){let r=t.map(t=>{let n=t;return n.type===`wire`?e.makeFaceFromWire(n.id):R(t,`face`)});try{let t={};if(n?.ruled!==void 0&&(t.ruled=n.ruled),n?.solid!==void 0&&(t.solid=n.solid),n?.tolerance!==void 0&&(t.tolerance=n.tolerance),n?.startVertex){let r=e.getVertexPosition(R(n.startVertex,`vertex`));t.startPoint=[r[0],r[1],r[2]]}if(n?.endVertex){let r=e.getVertexPosition(R(n.endVertex,`vertex`));t.endPoint=[r[0],r[1],r[2]]}return L(e.loftWithOptions(r,JSON.stringify(t)))}catch(e){console.warn(`brepkit: loftWithOptions failed, falling back to smooth/basic loft:`,e)}if(!n?.ruled)try{return L(e.loftSmooth(r))}catch(e){console.warn(`brepkit: loftSmooth failed, falling back to basic loft:`,e)}return sy(e,t)}function xy(e,t,n,r){let i={type:`extrusionLaw`,profile:t,length:n,endFactor:r,Trim(e,t,n){return i},delete:Ff};return i}function Sy(e,t,n,r,i,a,o){if(i!==null){let r=iy(e,n,Rp(e,n,0,0),i);return o?Ym(e,t,r):r}return t}function Cy(e){return{extrude:(t,n,r)=>iy(e,t,n,r),revolve:(t,n,r)=>ay(e,t,n,r),revolveVec:(t,n,r,i)=>oy(e,t,n,r,i),loft:(t,n,r,i)=>sy(e,t,n,r,i),sweep:(t,n,r)=>ly(e,t,n,r),simplePipe:(t,n)=>uy(e,t,n),helicalSweep:(t,n,r,i,a,o)=>dy(e,t,n,r,i,a,o),sweepWithOptions:(t,n,r,i,a)=>fy(e,t,n,r,i,a),sweepPipeShell:(t,n,r)=>yy(e,t,n,r),loftAdvanced:(t,n)=>by(e,t,n),buildExtrusionLaw:(t,n,r)=>xy(e,t,n,r),draftPrism:(t,n,r,i,a,o)=>Sy(e,t,n,r,i,a,o)}}function wy(e){return{dispose:()=>{},executeBatch:t=>e.executeBatch(t),checkpoint:()=>e.checkpoint(),checkpointCount:()=>e.checkpointCount(),restoreCheckpoint:t=>{e.restore(t)},discardCheckpoint:t=>{e.discardCheckpoint(t)}}}var Ty=class{oc;kernelId=`brepkit`;capabilities=r;bk;constructor(e){this.bk=e,this.oc=e;let t=this.bk;Object.assign(this,sh(t),Zh(t),Cy(t),hg(t),Om(t),o_(t),E_(t),Xv(t),Np(t),hm(t),Gm(t),Xg(t),ry(t),Lv(t),wy(t))}};function Ey(e){throw Error(`manifold: ${e} is not implemented`)}var Dy=new Set(`makeBox.makeBoxWithCorners.makeCylinder.makeSphere.makeCone.makeTorus.makeEllipsoid.makeFuse.makeCut.makeCommon.translateShape.rotateShape.scaleShape.mirrorShape.transformShape.generalTransform.generalTransformNonOrthogonal.gridPattern.extrude.revolve.revolveVec.loft.loftAdvanced.sweep.simplePipe.sweepWithOptions.sweepPipeShell.helicalSweep.draftPrism.fillet.chamfer.chamferDistAngle.shell.thicken.offset.filletVariable.draft.defeature.simplify.reverseShape.hull.hullFromPoints.sewAndSolidify.profileEdge.profileWire.profileFace`.split(`.`));function Oy(e){return Dy.has(e)}function B(e,t,n){return{op:e,params:t,inputs:n,replayable:Oy(e)&&n.every(e=>e.replayable)}}function ky(e,t){return{manifold:e,node:t}}function V(e){return e.manifold}function H(e){return e.node}function Ay(e){if(e&&typeof e==`object`&&`manifold`in e&&`node`in e)return e}var jy=[`occt`,`occt-wasm`];function My(){for(let e of jy)try{return U(e)}catch{}}function Ny(e){let t=My();if(!t)throw Error(`manifold: ${e} requires a registered occt kernel; none is available`);return t}var Py=new WeakMap,Fy=[0,0,0],Iy=[0,0,1];function Ly(e){return Math.hypot(e[0],e[1],e[2])}function Ry(e){let t=Ly(e);return t===0?[...Iy]:[e[0]/t,e[1]/t,e[2]/t]}function zy(e){let[t,n,r]=Ry(e);return[0,180/Math.PI*Math.atan2(Math.hypot(t,n),r),180/Math.PI*Math.atan2(n,t)]}function By(e){let t=e.Manifold;function n(e,t,n){let r=e;return n[0]===0&&n[1]===0&&n[2]>0||(r=r.rotate(zy(n))),(t[0]!==0||t[1]!==0||t[2]!==0)&&(r=r.translate(t)),r}return{makeBox:(e,n,r)=>ky(t.cube([e,n,r],!1),B(`makeBox`,{width:e,height:n,depth:r},[])),makeBoxFromCorners:(e,n)=>{let r=[Math.abs(n[0]-e[0]),Math.abs(n[1]-e[1]),Math.abs(n[2]-e[2])],i=[Math.min(e[0],n[0]),Math.min(e[1],n[1]),Math.min(e[2],n[2])];return ky(t.cube(r,!1).translate(i),B(`makeBoxWithCorners`,{p1:e,p2:n},[]))},makeCylinder:(e,r,i=Fy,a=Iy)=>ky(n(t.cylinder(r,e,e,0,!1),i,a),B(`makeCylinder`,{radius:e,height:r,center:i,direction:a},[])),makeSphere:(e,n=Fy)=>{let r=t.sphere(e,0);return(n[0]!==0||n[1]!==0||n[2]!==0)&&(r=r.translate(n)),ky(r,B(`makeSphere`,{radius:e,center:n},[]))},makeCone:(e,r,i,a=Fy,o=Iy)=>ky(n(t.cylinder(i,e,r,0,!1),a,o),B(`makeCone`,{radius1:e,radius2:r,height:i,center:a,direction:o},[])),makeTorus:(r,i,a=Fy,o=Iy)=>{let s=Math.max(3,e.getCircularSegments(i)),c=[];for(let e=0;e<s;e++){let t=e/s*Math.PI*2;c.push([r+i*Math.cos(t),i*Math.sin(t)])}return ky(n(t.revolve([c],0),a,o),B(`makeTorus`,{majorRadius:r,minorRadius:i,center:a,direction:o},[]))},makeEllipsoid:(e,n,r)=>ky(t.sphere(1,0).scale([e,n,r]),B(`makeEllipsoid`,{aLength:e,bLength:n,cLength:r},[])),makeRectangle:()=>Ey(`makeRectangle`)}}function Vy(e){return e}function Hy(e,t,n){switch(n){case`cut`:case`subtract`:case`difference`:return e.subtract(t);case`intersect`:case`common`:case`intersection`:return e.intersect(t);default:return e.add(t)}}function Uy(e){let t=H(Vy(e)).params,n=t.normal,r=t.origin;if(!n||!r)throw Error(`manifold: section/split plane must carry normal+origin params`);return{normal:n,offset:n[0]*r[0]+n[1]*r[1]+n[2]*r[2]}}function Wy(e){let t=new Uint32Array(e.triVerts),n=e.vertProperties.length/3,r=new Float32Array(n*3);for(let t=0;t<n;t++)r[t*3]=e.vertProperties[t*3]??0,r[t*3+1]=e.vertProperties[t*3+1]??0,r[t*3+2]=e.vertProperties[t*3+2]??0;return{vertices:r,normals:new Float32Array,triangles:t,uvs:new Float32Array,faceGroups:[{start:0,count:t.length,faceHash:0}]}}function Gy(e){let t=e.Manifold;function n(e,t,n){let r=Vy(e),i=Vy(t);return ky(V(r).add(V(i)),B(`makeFuse`,{},[H(r),H(i)]))}function r(e,t,n){let r=Vy(e),i=Vy(t);return ky(V(r).subtract(V(i)),B(`makeCut`,{},[H(r),H(i)]))}function i(e,t,n){let r=Vy(e),i=Vy(t);return ky(V(r).intersect(V(i)),B(`makeCommon`,{},[H(r),H(i)]))}function a(e,n){if(e.length===0)throw Error(`manifold: fuseAll requires at least one shape`);let r=e.map(Vy),[i]=r;if(i===void 0)throw Error(`manifold: fuseAll requires at least one shape`);return r.length===1?i:ky(t.union(r.map(V)),B(`makeFuse`,{},r.map(H)))}function o(e,n,r){let i=Vy(e);if(n.length===0)return i;let a=n.map(Vy);return ky(t.difference([V(i),...a.map(V)]),B(`makeCut`,{},[H(i),...a.map(H)]))}function s(e,t,n){let r=Vy(e),{normal:i,offset:a}=Uy(t),[o]=V(r).splitByPlane(i,a);return ky(o,B(`section`,{normal:i,offset:a},[H(r),H(Vy(t))]))}function c(e,n){let r=Vy(e),[i]=n;if(i===void 0)throw Error(`manifold: split requires at least one tool`);let a=Vy(i),{normal:o,offset:s}=Uy(i),[c,l]=V(r).splitByPlane(o,s);return ky(t.union([c,l]),B(`split`,{normal:o,offset:s},[H(r),H(a)]))}function l(e,t,n){let r=[],i=Vy(e),a=Vy(t);return(V(i)===void 0||V(i).isEmpty())&&r.push({operand:`base`,issue:`null-shape`,message:`Base shape is empty`}),(V(a)===void 0||V(a).isEmpty())&&r.push({operand:`tool`,issue:`null-shape`,message:`Tool shape is empty`}),{valid:r.length===0,issues:r}}function u(n,r,i,a,o,s){let c=new e.Mesh({numProp:3,vertProperties:new Float32Array(n),triVerts:new Uint32Array(r)}),l=new e.Mesh({numProp:3,vertProperties:new Float32Array(i),triVerts:new Uint32Array(a)});return Wy(Hy(t.ofMesh(c),t.ofMesh(l),o).getMesh())}return{fuse:n,cut:r,intersect:i,section:s,fuseAll:a,cutAll:o,split:c,checkBoolean:l,meshBoolean:u}}function Ky(e){return e}function qy(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function Jy(e){let t=Math.hypot(e[0],e[1],e[2]);return t<1e-12?[0,0,1]:[e[0]/t,e[1]/t,e[2]/t]}function Yy(e,t,n){let r=qy();return r[12]=e,r[13]=t,r[14]=n,r}function Xy(e,t,n){let r=e,[i,a,o]=Jy(t),s=Math.cos(r),c=Math.sin(r),l=1-s,u=l*i*i+s,d=l*i*a+c*o,f=l*i*o-c*a,p=l*i*a-c*o,m=l*a*a+s,h=l*a*o+c*i,g=l*i*o+c*a,_=l*a*o-c*i,v=l*o*o+s,y=qy();return y[0]=u,y[1]=d,y[2]=f,y[4]=p,y[5]=m,y[6]=h,y[8]=g,y[9]=_,y[10]=v,y[12]=n[0]-(u*n[0]+p*n[1]+g*n[2]),y[13]=n[1]-(d*n[0]+m*n[1]+_*n[2]),y[14]=n[2]-(f*n[0]+h*n[1]+v*n[2]),y}function Zy(e,t){let n=qy();return n[0]=t,n[5]=t,n[10]=t,n[12]=e[0]*(1-t),n[13]=e[1]*(1-t),n[14]=e[2]*(1-t),n}function Qy(e,t){let[n,r,i]=Jy(t),a=1-2*n*n,o=1-2*r*r,s=1-2*i*i,c=-2*n*r,l=-2*n*i,u=-2*r*i,d=qy();d[0]=a,d[1]=c,d[2]=l,d[4]=c,d[5]=o,d[6]=u,d[8]=l,d[9]=u,d[10]=s;let f=e[0]*n+e[1]*r+e[2]*i;return d[12]=2*f*n,d[13]=2*f*r,d[14]=2*f*i,d}function $y(e,t){let n=qy();return n[0]=e[0],n[1]=e[3],n[2]=e[6],n[4]=e[1],n[5]=e[4],n[6]=e[7],n[8]=e[2],n[9]=e[5],n[10]=e[8],n[12]=t[0],n[13]=t[1],n[14]=t[2],n}function eb(e,t,n,r,i){return ky(e.transform(t),B(n,r,[i]))}function tb(e,t,n,r){let i=Ky(e);return eb(V(i),Yy(t,n,r),`translateShape`,{x:t,y:n,z:r},H(i))}function nb(e,t,n=[0,0,1],r=[0,0,0]){let i=Ky(e);return eb(V(i),Xy(t,n,r),`rotateShape`,{angle:t,axis:n,center:r},H(i))}function rb(e,t,n){let r=Ky(e);return eb(V(r),Qy(t,n),`mirrorShape`,{origin:t,normal:n},H(r))}function ib(e,t,n){let r=Ky(e);return eb(V(r),Zy(t,n),`scaleShape`,{center:t,factor:n},H(r))}function ab(e,t){if(!Array.isArray(t)||t.length!==16)throw Error(`manifold: transform expects a 16-element column-major matrix`);let n=Ky(e);return eb(V(n),t,`transformShape`,{matrix:[...t]},H(n))}function ob(e,t,n,r){let i=Ky(e);return eb(V(i),$y(t,n),`generalTransform`,{linear:t,translation:n,isOrthogonal:r},H(i))}function sb(e,t,n){let r=Ky(e);return eb(V(r),$y(t,n),`generalTransformNonOrthogonal`,{linear:t,translation:n},H(r))}function cb(e){let t=qy();for(let n of e)t=mb(n.type===`translate`?Yy(n.x,n.y,n.z):Xy(n.angle*Math.PI/180,n.axis??[0,0,1],n.center??[0,0,0]),t);return{handle:t,dispose:()=>{}}}function lb(e,t,n,r){let i=[e];for(let a=1;a<r;a++){let r=n*a;i.push(tb(e,t[0]*r,t[1]*r,t[2]*r))}return i}function ub(e,t,n,r,i){let a=[e];for(let o=1;o<i;o++)a.push(nb(e,r*o*Math.PI/180,n,t));return a}function db(e,t,n,r,i,a,o,s){let c=Ky(t),l=[],u=[];for(let e=0;e<o;e++)for(let t=0;t<s;t++){let o=n[0]*i*e+r[0]*a*t,s=n[1]*i*e+r[1]*a*t,d=n[2]*i*e+r[2]*a*t;l.push(V(c).transform(Yy(o,s,d))),u.push(H(c))}return ky(l.length===1?l[0]:e.Manifold.union(l),B(`gridPattern`,{directionX:n,directionY:r,spacingX:i,spacingY:a,countX:o,countY:s},u))}function fb(e){return e.map(e=>{switch(e.type){case`translate`:return tb(e.shape,e.x,e.y,e.z);case`rotate`:return nb(e.shape,e.angle*Math.PI/180,e.axis,e.center);case`scale`:return ib(e.shape,e.center,e.factor);case`mirror`:return rb(e.shape,e.origin,e.normal)}})}function pb(e){return{composeTransform:cb,transform:ab,translate:tb,rotate:nb,mirror:rb,scale:ib,generalTransform:ob,generalTransformNonOrthogonal:sb,positionOnCurve:()=>Ey(`positionOnCurve`),linearPattern:lb,circularPattern:ub,gridPattern:(t,n,r,i,a,o,s)=>db(e,t,n,r,i,a,o,s),transformBatch:fb}}function mb(e,t){let n=qy();for(let r=0;r<4;r++)for(let i=0;i<4;i++){let a=0;for(let n=0;n<4;n++){let o=e[n*4+i]??0,s=t[r*4+n]??0;a+=o*s}n[r*4+i]=a}return n}var hb=2*Math.PI,gb=e=>Math.hypot(e[0],e[1],e[2]),_b=(e,t)=>[e[0]-t[0],e[1]-t[1],e[2]-t[2]];function vb(e){return gb(_b(e.p2,e.p1))}function yb(e,t){let n=e.map(e=>[e[0],e[1],e[2]]);for(let e=1;e<n.length;e++)for(let r=0;r<n.length-e;r++){let e=n[r]??[0,0,0],i=n[r+1]??[0,0,0];n[r]=[e[0]*(1-t)+i[0]*t,e[1]*(1-t)+i[1]*t,e[2]*(1-t)+i[2]*t]}return n[0]??[0,0,0]}function bb(e){return e.k===`line`?`LINE`:e.k===`bezier`?`BEZIER`:e.k===`helix`?`BSPLINE`:Math.abs(e.rx-e.ry)<1e-9*Math.max(1,e.rx)?`CIRCLE`:`ELLIPSE`}function xb(e){return e.k===`line`?{first:0,last:vb(e)}:e.k===`conic`?{first:e.a0,last:e.a1}:e.k===`helix`?{first:0,last:hb*e.turns}:{first:0,last:1}}function Sb(e,t){if(e.k===`line`){let n=t/(vb(e)||1);return[e.p1[0]+(e.p2[0]-e.p1[0])*n,e.p1[1]+(e.p2[1]-e.p1[1])*n,e.p1[2]+(e.p2[2]-e.p1[2])*n]}if(e.k===`bezier`)return yb(e.points,t);if(e.k===`helix`){let n=Math.cos(t),r=Math.sin(t),i=e.pitch*t/hb;return[e.center[0]+e.radius*(n*e.x[0]+r*e.y[0])+i*e.axis[0],e.center[1]+e.radius*(n*e.x[1]+r*e.y[1])+i*e.axis[1],e.center[2]+e.radius*(n*e.x[2]+r*e.y[2])+i*e.axis[2]]}let n=Math.cos(t),r=Math.sin(t);return[e.center[0]+e.rx*n*e.x[0]+e.ry*r*e.y[0],e.center[1]+e.rx*n*e.x[1]+e.ry*r*e.y[1],e.center[2]+e.rx*n*e.x[2]+e.ry*r*e.y[2]]}function Cb(e,t){let n;if(e.k===`line`)n=_b(e.p2,e.p1);else if(e.k===`bezier`){let r=yb(e.points,Math.max(0,t-1e-4));n=_b(yb(e.points,Math.min(1,t+1e-4)),r)}else if(e.k===`helix`){let r=Math.cos(t),i=Math.sin(t),a=e.pitch/hb;n=[e.radius*(-i*e.x[0]+r*e.y[0])+a*e.axis[0],e.radius*(-i*e.x[1]+r*e.y[1])+a*e.axis[1],e.radius*(-i*e.x[2]+r*e.y[2])+a*e.axis[2]]}else{let r=Math.cos(t),i=Math.sin(t);n=[-e.rx*i*e.x[0]+e.ry*r*e.y[0],-e.rx*i*e.x[1]+e.ry*r*e.y[1],-e.rx*i*e.x[2]+e.ry*r*e.y[2]]}let r=gb(n)||1;return[n[0]/r,n[1]/r,n[2]/r]}function wb(e){if(e.k===`line`)return vb(e);if(e.k===`helix`){let t=hb*e.radius;return e.turns*Math.sqrt(t*t+e.pitch*e.pitch)}if(e.k===`conic`){let t=Math.abs(e.a1-e.a0);if(Math.abs(e.rx-e.ry)<1e-9*Math.max(1,e.rx))return e.rx*t;if(Math.abs(t-hb)<1e-9){let t=e.rx,n=e.ry,r=(t-n)*(t-n)/((t+n)*(t+n));return Math.PI*(t+n)*(1+3*r/(10+Math.sqrt(4-3*r)))}return Ob(t=>Sb(e,t),e.a0,e.a1,256)}return Ob(t=>Sb(e,t),0,1,128)}function Tb(e){return e.k===`conic`?Math.abs(Math.abs(e.a1-e.a0)-hb)<1e-9:!1}function Eb(e){return Tb(e)}function Db(e){return e.k===`conic`?hb:0}function Ob(e,t,n,r){let i=0,a=e(t);for(let o=1;o<=r;o++){let s=e(t+(n-t)*o/r);i+=gb(_b(s,a)),a=s}return i}function kb(e){return e}function Ab(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function jb(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 Mb(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function Nb(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function Pb(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function Fb(e){return Math.hypot(e[0],e[1],e[2])}function Ib(e){let t=Fb(e);return t<1e-12?[0,0,1]:[e[0]/t,e[1]/t,e[2]/t]}function Lb(e){return Ib(jb(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function Rb(e){let t=Ib(e),n=Lb(t);return{xAxis:n,yAxis:Ib(jb(t,n))}}function zb(e){let t=0;for(let n=0;n<e.length;n++){let r=e[n]??[0,0],i=e[(n+1)%e.length]??[0,0];t+=r[0]*i[1]-i[0]*r[1]}return t/2}function Bb(e){return zb(e)<0?[...e].reverse():e}function Vb(e){return zb(e)>0?[...e].reverse():e}function Hb(e){return e.node?.params}function Ub(e){let t=kb(e),n=Hb(t),r=n?.outline??n?.polygon??n?.points;if(r&&r.length>=3){let e=n?.origin??[0,0,0],t=Bb(r.map(e=>[e[0],e[1]])),i=(n?.holes)?.filter(e=>e.length>=3).map(e=>Vb(e.map(e=>[e[0],e[1]])));if(n?.xAxis&&n.yAxis)return{outline:t,holes:i,origin:e,xAxis:n.xAxis,yAxis:n.yAxis};let{xAxis:a,yAxis:o}=Rb(n?.normal??[0,0,1]);return{outline:t,holes:i,origin:e,xAxis:a,yAxis:o}}return Wb(t)}function Wb(e){let t=V(e)?.getMesh?.();if(!t)throw Error(`manifold: profile carries no recorded outline and no mesh to derive one`);let n=t.numProp,r=Math.floor(t.vertProperties.length/n),i=[],a=0;for(let e=0;e<r;e++)i.push([t.vertProperties[e*n]??0,t.vertProperties[e*n+1]??0]),a+=t.vertProperties[e*n+2]??0;a/=Math.max(1,r);let o=Gb(i);return{outline:Bb(o.length>=3?o:[[-.5,-.5],[.5,-.5],[0,.5]]),origin:[0,0,a],xAxis:[1,0,0],yAxis:[0,1,0]}}function Gb(e){let t=[...e].sort((e,t)=>e[0]===t[0]?e[1]-t[1]:e[0]-t[0]);if(t.length<3)return[...t];let n=(e,t,n)=>(t[0]-e[0])*(n[1]-e[1])-(t[1]-e[1])*(n[0]-e[0]),r=[];for(let e of t){for(;r.length>=2&&n(r[r.length-2]??e,r[r.length-1]??e,e)<=0;)r.pop();r.push(e)}let i=[];for(let e=t.length-1;e>=0;e--){let r=t[e]??[0,0];for(;i.length>=2&&n(i[i.length-2]??r,i[i.length-1]??r,r)<=0;)i.pop();i.push(r)}return r.pop(),i.pop(),[...r,...i]}function Kb(e){let t=[];for(let n=1;n+1<e;n++)t.push(0,n,n+1);return t}function qb(e,t){let n=e.length;if(n<2||t<=n)return e.map(e=>[e[0],e[1]]);let r=[],i=0;for(let t=0;t<n;t++){let a=e[t]??[0,0],o=e[(t+1)%n]??[0,0],s=Math.hypot(o[0]-a[0],o[1]-a[1]);r.push(s),i+=s}if(i===0)return e.map(e=>[e[0],e[1]]);let a=t-n,o=r.map(e=>a*e/i),s=o.map(e=>Math.floor(e)),c=s.reduce((e,t)=>e+t,0),l=o.map((e,t)=>({i:t,f:e-Math.floor(e)})).sort((e,t)=>t.f-e.f);for(let e=0;c<a;e++,c++){let t=l[e%l.length]?.i??0;s[t]=(s[t]??0)+1}let u=[];for(let t=0;t<n;t++){let r=e[t]??[0,0],i=e[(t+1)%n]??[0,0];u.push([r[0],r[1]]);let a=s[t]??0;for(let e=1;e<=a;e++){let t=e/(a+1);u.push([r[0]+(i[0]-r[0])*t,r[1]+(i[1]-r[1])*t])}}return u}function Jb(e,t,n=1){return e.outline.map(e=>{let r=e[0]*n,i=e[1]*n;return[t.origin[0]+t.xAxis[0]*r+t.yAxis[0]*i,t.origin[1]+t.xAxis[1]*r+t.yAxis[1]*i,t.origin[2]+t.xAxis[2]*r+t.yAxis[2]*i]})}function Yb(e,t){if(t.length<2)throw Error(`manifold: skinning requires at least two rings`);let n=t[0]?.length??0;if(n<3)throw Error(`manifold: skinning requires rings of at least three points`);let r=[];for(let e of t){if(e.length!==n)throw Error(`manifold: skinning requires all rings to share a vertex count`);for(let t of e)r.push(t[0],t[1],t[2])}let i=Zb(t.length,n),a=new e.Mesh({numProp:3,vertProperties:Float32Array.from(r),triVerts:Uint32Array.from(i)});return Xb(e,new e.Manifold(a))}function Xb(e,t){if(typeof t.volume!=`function`||t.volume()>=0)return t;let n=t.getMesh(),r=n.triVerts;for(let e=0;e+2<r.length;e+=3){let t=r[e+1]??0;r[e+1]=r[e+2]??0,r[e+2]=t}let i=new e.Mesh({numProp:n.numProp,vertProperties:n.vertProperties,triVerts:r}),a=new e.Manifold(i);return typeof t.delete==`function`&&t.delete(),a}function Zb(e,t){let n=[];for(let r=0;r+1<e;r++){let e=r*t,i=(r+1)*t;for(let r=0;r<t;r++){let a=(r+1)%t;n.push(e+r,e+a,i+a),n.push(e+r,i+a,i+r)}}let r=Kb(t);for(let e=0;e<r.length;e+=3)n.push(r[e]??0,r[e+2]??0,r[e+1]??0);let i=(e-1)*t,a=Kb(t);for(let e=0;e<a.length;e+=3)n.push(i+(a[e]??0),i+(a[e+1]??0),i+(a[e+2]??0));return n}function Qb(e,t){let n=[];if(e.length===0)return n;let r=t=>{let n=e[Math.max(0,t-1)]??e[t]??[0,0,0];return Ib(Mb(e[Math.min(e.length-1,t+1)]??e[t]??[0,0,0],n))},i=r(0),a=Ib(Mb(t,Pb(i,Ab(t,i))));Fb(a)<1e-9&&(a=Lb(i)),n.push({origin:e[0]??[0,0,0],xAxis:a,yAxis:Ib(jb(i,a)),tangent:i});for(let t=1;t<e.length;t++){let o=e[t-1]??[0,0,0],s=e[t]??[0,0,0],c=Mb(s,o),l=Ab(c,c),u=a;if(l>1e-18){let e=Mb(a,Pb(c,2/l*Ab(c,a))),n=Mb(i,Pb(c,2/l*Ab(c,i))),o=Mb(r(t),n),s=Ab(o,o);u=s>1e-18?Mb(e,Pb(o,2/s*Ab(o,e))):e}let d=r(t),f=Ib(Mb(u,Pb(d,Ab(u,d)))),p=Ib(jb(d,f));n.push({origin:s,xAxis:f,yAxis:p,tangent:d}),i=d,a=f}return n}var $b=24,ex=24,tx=null;function nx(e){let t=tx?tx(Math.max(Math.abs(e),1e-6)):$b;return Math.max($b,t)}var rx=[0,0,0],ix=1e-6,ax={delete:()=>{},isEmpty:()=>!1};function ox(e,t){return e[t]??rx}function sx(e,t=1){return Math.max(2,Math.ceil(Math.abs(e)/(2*Math.PI)*nx(t)))}function cx(e){return Ib(jb(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function lx(e,t,n,r,i,a){let o=Ib(t),s=a?Ib(a):cx(o),c=Ib(jb(o,s)),l=i-r,u=sx(l,n),d=[];for(let t=0;t<=u;t++){let i=r+l*t/u;d.push(Nb(e,Nb(Pb(s,n*Math.cos(i)),Pb(c,n*Math.sin(i)))))}return d}function ux(e,t,n){let r=Mb(t,e),i=Mb(n,e),a=jb(r,i);if(Fb(a)<1e-12)return[e,t,n];let o=Ib(a),s=Ab(r,r),c=Ab(i,i),l=Ab(r,i),u=2*(s*c-l*l);if(Math.abs(u)<1e-18)return[e,t,n];let d=c*(s-l)/u,f=s*(c-l)/u,p=Nb(e,Nb(Pb(r,d),Pb(i,f))),m=Fb(Mb(e,p)),h=Ib(Mb(e,p)),g=Ib(jb(o,h)),_=(e=>Math.atan2(Ab(Mb(e,p),g),Ab(Mb(e,p),h)))(n);return _<0&&(_+=2*Math.PI),lx(p,o,m,0,_,h)}function dx(e){let t=[];for(let n=0;n<=ex;n++){let r=n/ex,i=e.map(e=>[...e]);for(let e=1;e<i.length;e++)for(let t=0;t<i.length-e;t++){let e=ox(i,t),n=ox(i,t+1);i[t]=[e[0]*(1-r)+n[0]*r,e[1]*(1-r)+n[1]*r,e[2]*(1-r)+n[2]*r]}t.push(ox(i,0))}return t}function fx(e){let t=0,n=0,r=0;for(let i=0;i<e.length;i++){let a=ox(e,i),o=ox(e,(i+1)%e.length);t+=(a[1]-o[1])*(a[2]+o[2]),n+=(a[2]-o[2])*(a[0]+o[0]),r+=(a[0]-o[0])*(a[1]+o[1])}let i=[t,n,r];return Fb(i)<1e-12?[0,0,1]:Ib(i)}function px(e,t){return Fb(Mb(e,t))<ix}function mx(e){let t=e[0];if(!t)return[];let n=[...t];for(let t=1;t<e.length;t++){let r=e[t]??[];if(r.length===0)continue;let i=ox(n,n.length-1),a=px(ox(r,0),i),o=px(ox(r,r.length-1),i);!a&&o&&(r=[...r].reverse());let s=px(ox(r,0),i);for(let e=+!!s;e<r.length;e++)n.push(ox(r,e))}return n.length>1&&px(ox(n,0),ox(n,n.length-1))&&n.pop(),n}function hx(e){let t=fx(e),n=ox(e,0),r=e.length>1?Ib(Mb(ox(e,1),n)):cx(t);r=Ib(Mb(r,Pb(t,Ab(r,t)))),Fb(r)<1e-9&&(r=cx(t));let i=Ib(jb(t,r));return{outline:Bb(e.map(e=>{let t=Mb(e,n);return[Ab(t,r),Ab(t,i)]})),origin:n,xAxis:r,yAxis:i}}var gx=12;function _x(e,t){let[n,r]=e.curveParameters(t),i=gx;try{e.curveType(t)===`line`&&(i=1)}catch{}let a=[];for(let o=0;o<=i;o++)a.push(e.curvePointAtParam(t,n+(r-n)*o/i));return a}function vx(e,t){return mx(e.iterShapes(t,`edge`).map(t=>_x(e,t)))}function yx(e){let t=e.getCircularSegments;typeof t==`function`&&(tx=e=>t(e));function n(e,t){return ky(ax,B(`profileEdge`,t?{pts:e,curve:t}:{pts:e},[]))}function r(e,t){let n=Ib(e),r=t?Ib(t):cx(n);return{x:r,y:Ib(jb(n,r))}}function i(e,t,n){let r=Mb(t,e),i=Mb(n,e),a=jb(r,i);if(Fb(a)<1e-12)return;let o=Ib(a),s=Ab(r,r),c=Ab(i,i),l=Ab(r,i),u=2*(s*c-l*l);if(Math.abs(u)<1e-18)return;let d=c*(s-l)/u,f=s*(c-l)/u,p=Nb(e,Nb(Pb(r,d),Pb(i,f))),m=Fb(Mb(e,p)),h=Ib(Mb(e,p)),g=Ib(jb(o,h)),_=Math.atan2(Ab(Mb(n,p),g),Ab(Mb(n,p),h));return _<0&&(_+=2*Math.PI),{k:`conic`,center:p,x:h,y:g,rx:m,ry:m,a0:0,a1:_}}function a(e){let t=Ay(e);if(t){let e=t.node.params;return e?.ring??e?.pts??[]}let n=My();return n?_x(n,e):[]}function o(e){let t=[];for(let n of e){let e=Ay(n);e&&t.push(H(e))}return t}function s(e){let t=mx(e.map(e=>a(e)));return ky(ax,B(`profileWire`,{ring:t,...t.length>=3?hx(t):void 0},o(e)))}function c(e,t){let{outline:n,origin:r,xAxis:i,yAxis:a}=hx(e);return ky(ax,B(`profileFace`,{outline:n,origin:r,xAxis:i,yAxis:a},t?[t]:[]))}function l(e){let t=Ay(e);if(t){let e=t.node.params?.ring??[];if(e.length>=3)return c(e,H(t))}let n=My();return c(n?vx(n,e):[],t?H(t):void 0)}function u(e,t){let n=Ay(e),r=n?.node?.params??{},i=r.origin??rx,a=r.xAxis??[1,0,0],s=r.yAxis??[0,1,0],c=e=>{let t=Mb(e,i);return[Ab(t,a),Ab(t,s)]},l=[];for(let e of t){let t=Ay(e),n;if(t)n=t.node.params?.ring??[];else{let t=My();n=t?vx(t,e):[]}n.length>=3&&l.push(n.map(c))}let u=[...r.holes??[],...l],d=n?[H(n),...o(t)]:o(t);return ky(ax,B(`profileFace`,{outline:r.outline??[],holes:u,origin:i,xAxis:a,yAxis:s},d))}function d(e,t,n,r,i){let a=Ib(t),o=i?Ib(i):cx(a),s=Ib(jb(a,o)),c=[],l=nx(Math.max(n,r));for(let t=0;t<=l;t++){let i=2*Math.PI*t/l;c.push(Nb(e,Nb(Pb(o,n*Math.cos(i)),Pb(s,r*Math.sin(i)))))}return c}return{makeVertex:(e,t,r)=>n([[e,t,r]]),makeLineEdge:(e,t)=>n([e,t],{k:`line`,p1:e,p2:t}),makeCircleEdge:(e,t,i)=>{let{x:a,y:o}=r(t);return n(lx(e,t,i,0,2*Math.PI),{k:`conic`,center:e,x:a,y:o,rx:i,ry:i,a0:0,a1:2*Math.PI})},makeCircleArc:(e,t,i,a,o)=>{let{x:s,y:c}=r(t);return n(lx(e,t,i,a,o),{k:`conic`,center:e,x:s,y:c,rx:i,ry:i,a0:a,a1:o})},makeArcEdge:(e,t,r)=>n(ux(e,t,r),i(e,t,r)),makeEllipseEdge:(e,t,i,a,o)=>{let{x:s,y:c}=r(t,o);return n(d(e,t,i,a,o),{k:`conic`,center:e,x:s,y:c,rx:i,ry:a,a0:0,a1:2*Math.PI})},makeBezierEdge:e=>n(dx(e),{k:`bezier`,points:e.map(e=>[...e])}),makeTangentArc:(e,t,r)=>n([e,r],{k:`line`,p1:e,p2:r}),makeHelixWire:(e,t,r,i=[0,0,0],a=[0,0,1],o=!1)=>{let s=Ib(a),c=cx(s),l=Ib(jb(s,c)),u=o?Pb(l,-1):l,d=e===0?0:t/e,f={k:`helix`,center:i,axis:s,x:c,y:u,radius:r,pitch:e,turns:d},p=Math.max(8,Math.ceil(d*$b)),m=[];for(let e=0;e<=p;e++)m.push(Sb(f,2*Math.PI*d*e/p));return n(m,f)},makeWire:e=>s(e),makeWireFromMixed:e=>s(e),makeFace:l,addHolesInFace:u,makePolygonFace:e=>c(e)}}function bx(e){let t=e.Manifold,n=yx(e);function r(e,n){let r=e.map(e=>[e.x,e.y,e.z]);return ky(t.hull(r),B(`hullFromPoints`,{points:r,tolerance:n},[]))}function i(e,n){let r=e.map(e=>V(e));return ky(t.hull(r),B(`hull`,{tolerance:n},e.map(e=>H(e))))}function a(e){let n=e.map(e=>V(e)),r=n[0];if(!r)throw Error(`manifold: makeCompound requires at least one input shape`);return ky(n.length===1?r:t.union(n),B(`makeCompound`,{},e.map(e=>H(e))))}function o(e,t){let n=e[0];return n||Ey(`sewAndSolidify (no input faces on manifold kernel)`),ky(V(n),B(`sewAndSolidify`,{tolerance:t},e.map(e=>H(e))))}return{makeVertex:(e,t,r)=>n.makeVertex(e,t,r),makeEdge:()=>Ey(`makeEdge`),makeWire:e=>n.makeWire(e),makeFace:(e,t)=>n.makeFace(e,t),makeLineEdge:(e,t)=>n.makeLineEdge(e,t),makeCircleEdge:(e,t,r)=>n.makeCircleEdge(e,t,r),makeCircleArc:(e,t,r,i,a)=>n.makeCircleArc(e,t,r,i,a),makeArcEdge:(e,t,r)=>n.makeArcEdge(e,t,r),makeEllipseEdge:(e,t,r,i,a)=>n.makeEllipseEdge(e,t,r,i,a),makeEllipseArc:()=>Ey(`makeEllipseArc`),makeBezierEdge:e=>n.makeBezierEdge(e),makeTangentArc:(e,t,r)=>n.makeTangentArc(e,t,r),makeHelixWire:(e,t,r,i,a,o)=>n.makeHelixWire(e,t,r,i,a,o),makeWireFromMixed:e=>n.makeWireFromMixed(e),makeCompound:a,solidFromShell:()=>Ey(`solidFromShell`),hull:i,hullFromPoints:r,buildSolidFromFaces:()=>Ey(`buildSolidFromFaces`),makeNonPlanarFace:()=>Ey(`makeNonPlanarFace`),addHolesInFace:(e,t)=>n.addHolesInFace(e,t),removeHolesFromFace:()=>Ey(`removeHolesFromFace`),makeFaceOnSurface:()=>Ey(`makeFaceOnSurface`),bsplineSurface:(e,t,n)=>Ny(`bsplineSurface`).bsplineSurface(e,t,n),triangulatedSurface:(e,t,n)=>Ny(`triangulatedSurface`).triangulatedSurface(e,t,n),buildTriFace:()=>Ey(`buildTriFace`),sewAndSolidify:o,createPoint3d:()=>Ey(`createPoint3d`),createDirection3d:()=>Ey(`createDirection3d`),createVector3d:()=>Ey(`createVector3d`),createAxis1:()=>Ey(`createAxis1`),createAxis2:()=>Ey(`createAxis2`),createAxis3:()=>Ey(`createAxis3`)}}var xx=Math.PI/180;function Sx(e){return e}function Cx(e){let t=180/Math.PI*e;return t>360?360:t}function wx(e){let t=e;if(t&&typeof t.X==`function`&&typeof t.Y==`function`&&typeof t.Z==`function`)return[t.X(),t.Y(),t.Z()]}function Tx(e){if(e&&typeof e==`object`){let t=e;if(`origin`in t&&`direction`in t)return{origin:t.origin,direction:t.direction};let n=e;if(typeof n.Location==`function`&&typeof n.Direction==`function`){let e=wx(n.Location()),t=wx(n.Direction());if(e&&t)return{origin:e,direction:t}}}}function Ex(e){return e.outline.map(e=>[e[0],e[1]])}function Dx(e){return{outline:e.outline,origin:e.origin,xAxis:e.xAxis,yAxis:e.yAxis}}function Ox(e){return{origin:e.origin,xAxis:e.xAxis,yAxis:e.yAxis,tangent:Ib(jb(e.xAxis,e.yAxis))}}function kx(e){let t=0;for(let n of e.outline)t=Math.max(t,Math.hypot(n[0],n[1]));return t||1}function Ax(e){let t=V(e)?.getMesh?.();if(!t)return[];let n=t.numProp,r=Math.floor(t.vertProperties.length/n),i=[];for(let e=0;e<r;e++)i.push([t.vertProperties[e*n]??0,t.vertProperties[e*n+1]??0,t.vertProperties[e*n+2]??0]);return i}function jx(e,t){let n=Sx(e),r=n.node?.params,i=r?.path??r?.points;if(i&&i.length>=2)return i.map(e=>[e[0],e[1],e[2]]);let a=Ax(n);if(a.length>=2)return a;let o=[],s=Math.max(2,t);for(let e=0;e<s;e++)o.push([0,0,e/(s-1)]);return o}function Mx(e){return e?.node??B(`spine`,{},[])}function Nx(e,t,n){let r=t.xAxis,i=t.yAxis,a=t.origin,o=[r[0],r[1],r[2],0,i[0],i[1],i[2],0,n[0],n[1],n[2],0,a[0],a[1],a[2],1];return e.transform(o)}function Px(e,t,n){let r=Ib(n);return e.outline.map(n=>{let i=Mb(Nb(e.origin,Nb(Pb(e.xAxis,n[0]),Pb(e.yAxis,n[1]))),t),a=i[0]*r[0]+i[1]*r[1]+i[2]*r[2];return[Fb(Mb(i,Pb(r,a))),a]})}function Fx(e,t,n){let r=e,i=Ib(n);if(!(Math.abs(i[0])<1e-9&&Math.abs(i[2])<1e-9&&i[1]>0)){let e=Math.acos(Math.max(-1,Math.min(1,i[1])))*(180/Math.PI),t=jb([0,1,0],i);Fb(t)<1e-9&&(t=[1,0,0]),t=Ib(t),r=r.rotate([t[0]*e,t[1]*e,t[2]*e])}return(t[0]!==0||t[1]!==0||t[2]!==0)&&(r=r.translate([t[0],t[1],t[2]])),r}function Ix(e,t,n,r,i){let a=Ib(t),{xAxis:o,yAxis:s}=Rb(a),c=i*2*Math.PI,l=Math.max(8,Math.ceil(Math.abs(i)*24)),u=r*i,d=[];for(let t=0;t<=l;t++){let r=t/l,i=c*r,f=Nb(Pb(o,n*Math.cos(i)),Pb(s,n*Math.sin(i)));d.push(Nb(e,Nb(f,Pb(a,u*r))))}return d}function Lx(e){if(e.length!==0)return t=>{let n=t*(e.length-1),r=Math.floor(n),i=Math.min(e.length-1,r+1),a=n-r;return(e[r]??1)*(1-a)+(e[i]??1)*a}}function Rx(e,t,n,r){let i=Ub(t),a=Ib([n[0],n[1],n[2]]),o=Fb([n[0]*r,n[1]*r,n[2]*r]),s=[Ex(i),...(i.holes??[]).map(e=>e.map(e=>[e[0],e[1]]))];return ky(Nx(Xb(e,e.Manifold.extrude(s,o)),i,a),B(`extrude`,{outline:i.outline,holes:i.holes,origin:i.origin,xAxis:i.xAxis,yAxis:i.yAxis,direction:[n[0],n[1],n[2]],length:r},[H(Sx(t))]))}function zx(e,t,n,r,i,a,o){let s=Ub(t),c=Cx(i),l=Px(s,n,r);return ky(Fx(e.Manifold.revolve([l],0,c),n,r),B(a,o,[H(Sx(t))]))}function Bx(e,t){let n=e.length;if(n===0||t.length!==n)return e;let r=0,i=1/0;for(let a=0;a<n;a++){let o=0;for(let r=0;r<n&&o<i;r++){let i=e[(r+a)%n]??[0,0,0],s=t[r]??[0,0,0],c=i[0]-s[0],l=i[1]-s[1],u=i[2]-s[2];o+=c*c+l*l+u*u}o<i&&(i=o,r=a)}if(r===0)return e;let a=[];for(let t=0;t<n;t++)a.push(e[(t+r)%n]??[0,0,0]);return a}function Vx(e,t,n,r){if(t.length<2)throw Error(`manifold: loft requires at least two profiles`);let i=t.map(Ub),a=i.reduce((e,t)=>Math.max(e,t.outline.length),0),o=i.map(e=>Jb({...e,outline:qb(e.outline,a)},Ox(e)));for(let e=1;e<o.length;e++)o[e]=Bx(o[e]??[],o[e-1]??[]);return ky(Yb(e,o),B(n,{sections:i.map(Dx),...r},t.map(e=>H(Sx(e)))))}function Hx(e,t,n,r,i,a,o){let s=Ub(t),c=Qb(n,s.xAxis),l=c.length;return ky(Yb(e,c.map((e,t)=>Jb(s,e,o?o(l>1?t/(l-1):0):1))),B(i,{section:Dx(s),path:n.map(e=>[e[0],e[1],e[2]]),...a},[H(Sx(t)),r]))}function Ux(e,t,n,r,i,a){if(r===null)return t;let o=Ub(n),s=Ib(jb(o.xAxis,o.yAxis)),c=Math.tan(i*xx),l={origin:Nb(o.origin,Pb(s,r)),xAxis:o.xAxis,yAxis:o.yAxis,tangent:s},u=1+c*r/kx(o),d=Yb(e,[Jb(o,Ox(o),1),Jb(o,l,u)]),f=B(`draftPrism`,{outline:o.outline,origin:o.origin,xAxis:o.xAxis,yAxis:o.yAxis,height:r,angleDeg:i,fuse:a},[H(Sx(n))]);if(a){let e=Sx(t);return ky(V(e).add(d),B(`makeFuse`,{},[H(e),f]))}return ky(d,f)}function Wx(e){return{revolve:(t,n,r)=>{let i=Tx(n);if(!i)throw Error(`manifold: revolve could not read the axis; pass {origin,direction}, a gp_Ax1, or use revolveVec`);let{origin:a,direction:o}=i;return zx(e,t,a,o,r,`revolve`,{...Dx(Ub(t)),axisOrigin:[a[0],a[1],a[2]],axisDirection:[o[0],o[1],o[2]],angleDeg:Cx(r)})},revolveVec:(t,n,r,i)=>zx(e,t,n,r,i,`revolveVec`,{...Dx(Ub(t)),center:[n[0],n[1],n[2]],direction:[r[0],r[1],r[2]],angleDeg:Cx(i)})}}function Gx(e){return{sweep:(t,n,r)=>{let i={};return r?.transitionMode!==void 0&&(i.transitionMode=r.transitionMode),Hx(e,t,jx(n,16),Mx(n),`sweep`,i)},simplePipe:(t,n)=>Hx(e,t,jx(n,16),Mx(n),`simplePipe`,{}),sweepWithOptions:(t,n,r,i,a)=>Hx(e,t,jx(n,Math.max(2,a||16)),Mx(n),`sweepWithOptions`,{contactMode:r,scaleValues:[...i],segments:a},Lx(i)),sweepPipeShell:(t,n,r)=>{let i={};r?.transitionMode!==void 0&&(i.transitionMode=r.transitionMode);let a=Hx(e,t,jx(n,16),Mx(n),`sweepPipeShell`,i);return r?.shellMode?{shape:a,firstShape:t,lastShape:t}:a},helicalSweep:(t,n,r,i,a,o)=>Hx(e,t,Ix(n,r,i,a,o),Mx(t),`helicalSweep`,{axisOrigin:[n[0],n[1],n[2]],axisDirection:[r[0],r[1],r[2]],radius:i,pitch:a,turns:o})}}function Kx(e){return{extrude:(t,n,r)=>Rx(e,t,n,r),...Wx(e),loft:(t,n)=>Vx(e,t,`loft`,{ruled:n??!1}),loftAdvanced:(t,n)=>Vx(e,t,`loftAdvanced`,{solid:n?.solid??!0,ruled:n?.ruled??!1,tolerance:n?.tolerance}),...Gx(e),draftPrism:(t,n,r,i,a,o)=>Ux(e,t,n,i,a,o),buildExtrusionLaw:(e,t,n)=>({type:`extrusionLaw`,profile:e,length:t,endFactor:n}),loftBatch:()=>Ey(`loftBatch`),extrudeBatch:t=>t.map(t=>Rx(e,t.face,t.direction,t.length))}}var qx=16;function Jx(e){return typeof e?.translate==`function`?e.translate([0,0,0]):e}function Yx(e,t,n){if(!(n>0))return Jx(t);let r=Qx(e,n);return r===void 0||typeof t?.minkowskiDifference!=`function`||typeof t?.minkowskiSum!=`function`?Jx(t):t.minkowskiDifference(r).minkowskiSum(r)}function Xx(e,t,n){if(n===0)return Jx(t);let r=Qx(e,Math.abs(n));return r===void 0?Jx(t):n>0?typeof t?.minkowskiSum==`function`?t.minkowskiSum(r):Jx(t):typeof t?.minkowskiDifference==`function`?t.minkowskiDifference(r):Jx(t)}function Zx(e,t,n,r){if(n===0)return Jx(t);if(r)return Xx(e,t,Math.abs(n));let i=Xx(e,t,-Math.abs(n));return typeof t?.subtract==`function`?t.subtract(i):Jx(t)}function Qx(e,t){let n=e?.Manifold;if(typeof n?.sphere==`function`)return n.sphere(t,qx)}function $x(e){return e}function eS(e){let t=e;if(t!=null){if(typeof t.index==`number`)return t.index;if(typeof t.id==`number`)return t.id}}function tS(e){let{min:t,max:n}=e;if(!(t===void 0||n===void 0||t.length<3||n.length<3))return[((t[0]??0)+(n[0]??0))/2,((t[1]??0)+(n[1]??0))/2,((t[2]??0)+(n[2]??0))/2]}function nS(e){let t=e;if(t?.box!==void 0)return tS(t.box);let n=(e?.manifold)?.boundingBox?.();return n===void 0?void 0:tS(n)}function rS(e){let t=e.length;if(t===0)return{kind:`all`,count:t};let n=[];for(let t of e){let e=nS(t);if(e===void 0){n.length=0;break}n.push(e)}if(n.length===t)return{kind:`witness`,count:t,points:n};let r=[];for(let t of e){let e=eS(t);if(e===void 0){r.length=0;break}r.push(e)}return r.length===t?{kind:`index`,count:t,indices:r}:{kind:`all`,count:t}}function iS(e){return typeof e==`function`&&Ey(`fillet (per-edge radius callback)`),e}function aS(e){return typeof e==`number`?e:e[0]}function oS(e){let t=e.match(/[-+]?\d*\.?\d+/);return t?Number(t[0]):0}function sS(e,t,n,r,i){let a=$x(n),o=iS(i),s=rS(r);return ky(Yx(e,V(a),aS(o)),B(t,{radius:o,selection:s},[H(a)]))}function cS(e,t,n,r,i){let a=$x(t),o=rS(n);return ky(Yx(e,V(a),r),B(`chamferDistAngle`,{distance:r,angleDeg:i,selection:o},[H(a)]))}function lS(e,t,n){let r=t.node;if(r?.op!==`extrude`)return;let i=r.params??{},a=i.outline,o=i.origin,s=i.direction,c=i.length;if(!a||a.length<3||!o||!s||typeof c!=`number`)return;let l=Math.abs(n);try{let n=new e.CrossSection([a.map(e=>[e[0],e[1]])]).offset(-l);if(typeof n.isEmpty==`function`&&n.isEmpty())return;let r=e.Manifold.extrude(n,c),i=Math.hypot(s[0],s[1],s[2])||1,u=Math.abs(s[0])<1e-9&&Math.abs(s[1])<1e-9&&s[2]>0,d=r;if(!u){let e=Math.atan2(Math.hypot(s[0],s[1]),s[2])*(180/Math.PI),t=Math.atan2(s[1],s[0])*(180/Math.PI);d=d.rotate([0,e,t])}return d=d.translate([o[0]+s[0]/i*l,o[1]+s[1]/i*l,o[2]+s[2]/i*l]),Xb(e,V(t).subtract(d))}catch{return}}function uS(e,t,n,r,i){let a=$x(t),o=rS(n);return ky(lS(e,a,r)??Zx(e,V(a),r,!1),B(`shell`,i===void 0?{thickness:r,selection:o}:{thickness:r,selection:o,tolerance:i},[H(a)]))}function dS(e,t,n){let r=$x(t);return ky(Zx(e,V(r),n,!0),B(`thicken`,{thickness:n},[H(r)]))}function fS(e,t,n,r){let i=$x(t);return ky(Xx(e,V(i),n),B(`offset`,r===void 0?{distance:n}:{distance:n,tolerance:r},[H(i)]))}function pS(e,t,n){let r=$x(t);return ky(Yx(e,V(r),oS(n)),B(`filletVariable`,{spec:n},[H(r)]))}function mS(e,t,n,r,i){typeof i==`function`&&Ey(`draft (per-face angle callback)`);let a=$x(e),o=rS(t);return ky(Jx(V(a)),B(`draft`,{pullDirection:n,neutralPlane:r,angleDeg:i,selection:o},[H(a)]))}function hS(e,t){let n=$x(e),r=rS(t);return ky(Jx(V(n)),B(`defeature`,{selection:r},[H(n)]))}function gS(e){let t=$x(e),n=V(t);return ky(typeof n?.simplify==`function`?n.simplify():Jx(n),B(`simplify`,{},[H(t)]))}function _S(e){let t=$x(e),n=V(t);return ky(typeof n?.mirror==`function`?n.mirror([1,0,0]):Jx(n),B(`reverseShape`,{},[H(t)]))}function vS(e,t){let n=$x(t.shape),r=rS(t.edges.map(e=>e.edge)),i=t.edges.map(e=>e.r2===void 0?e.radius:[e.radius,e.r2]),a=t.edges[0]?.radius??0;return ky(Yx(e,V(n),a),B(`fillet`,{radii:i,selection:r},[H(n)]))}function yS(e){return{fillet:(t,n,r)=>sS(e,`fillet`,t,n,r),chamfer:(t,n,r)=>sS(e,`chamfer`,t,n,r),chamferDistAngle:(t,n,r,i)=>cS(e,t,n,r,i),shell:(t,n,r,i)=>uS(e,t,n,r,i),thicken:(t,n)=>dS(e,t,n),offset:(t,n,r)=>fS(e,t,n,r),filletVariable:(t,n)=>pS(e,t,n),draft:(e,t,n,r,i)=>mS(e,t,n,r,i),defeature:(e,t)=>hS(e,t),offsetWire2D:()=>Ey(`offsetWire2D`),simplify:e=>gS(e),reverseShape:e=>_S(e),shellBatch:t=>t.map(t=>uS(e,t.shape,t.faces,t.thickness,t.tolerance)),filletBatch:t=>t.map(t=>vS(e,t))}}function bS(e){return V(e).getMesh()}function xS(e){let t=e.numProp,n=e.vertProperties.length/t;if(t===3)return new Float32Array(e.vertProperties);let r=new Float32Array(n*3);for(let i=0;i<n;i++)r[i*3]=e.vertProperties[i*t]??0,r[i*3+1]=e.vertProperties[i*t+1]??0,r[i*3+2]=e.vertProperties[i*t+2]??0;return r}function SS(e,t){let n=new Float32Array(e.length);for(let r=0;r<t.length;r+=3){let i=(t[r]??0)*3,a=(t[r+1]??0)*3,o=(t[r+2]??0)*3,s=e[i]??0,c=e[i+1]??0,l=e[i+2]??0,u=(e[a]??0)-s,d=(e[a+1]??0)-c,f=(e[a+2]??0)-l,p=(e[o]??0)-s,m=(e[o+1]??0)-c,h=(e[o+2]??0)-l,g=d*h-f*m,_=f*p-u*h,v=u*m-d*p;for(let e of[i,a,o])n[e]=(n[e]??0)+g,n[e+1]=(n[e+1]??0)+_,n[e+2]=(n[e+2]??0)+v}for(let e=0;e<n.length;e+=3){let t=n[e]??0,r=n[e+1]??0,i=n[e+2]??0,a=Math.sqrt(t*t+r*r+i*i);a>1e-12&&(n[e]=t/a,n[e+1]=r/a,n[e+2]=i/a)}return n}function CS(e){let t=e.triVerts.length/3,{runIndex:n,runOriginalID:r}=e;if(!n||!r||n.length<2)return[{start:0,count:e.triVerts.length,faceHash:0}];let i=[];for(let e=0;e+1<n.length;e++){let a=n[e]??0,o=(n[e+1]??t*3)-a;o!==0&&i.push({start:a,count:o,faceHash:r[e]??0})}return i}function wS(e,t){let n=bS(e),r=xS(n),i=new Uint32Array(n.triVerts);return{vertices:r,normals:t.skipNormals?new Float32Array:SS(r,i),triangles:i,uvs:t.includeUVs?new Float32Array(r.length/3*2):new Float32Array,faceGroups:CS(n)}}function TS(e,t,n){let r=bS(e),i=xS(r),a=r.triVerts,o=[],s=[],c=new Set,l=i.length/3,u=e=>{o.push(i[e*3]??0,i[e*3+1]??0,i[e*3+2]??0)};for(let e=0;e<a.length;e+=3){let t=a[e]??0,n=a[e+1]??0,r=a[e+2]??0;for(let[e,i]of[[t,n],[n,r],[r,t]]){let t=Math.min(e,i),n=Math.max(e,i),r=t*l+n;if(c.has(r))continue;c.add(r);let a=o.length/3;u(t),u(n),s.push({start:a,count:2,edgeHash:r})}}return{lines:new Float32Array(o),edgeGroups:s}}function ES(e){return!0}function DS(e){return{mesh:(e,t)=>wS(e,t),meshEdges:(e,t,n)=>TS(e,t,n),hasTriangulation:e=>ES(e),meshShape:(e,t,n)=>{}}}function OS(e,t=[0,0,0]){return Array.isArray(e)&&e.length>=3?[Number(e[0]),Number(e[1]),Number(e[2])]:[...t]}function kS(e,t=0){return typeof e==`number`?e:t}function AS(e,t=``){return typeof e==`string`?e:t}function jS(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function MS(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function NS(e,t,n,r){return jS(t,jS(MS(n,e[0]),MS(r,e[1])))}function PS(e,t){let n=t.outline??[];if(n.length<3)throw Error(`manifold replay: profile outline needs at least three points`);let r=OS(t.origin),i=OS(t.xAxis,[1,0,0]),a=OS(t.yAxis,[0,1,0]),o=n.map(e=>NS(e,r,i,a)),s=[];for(let t=0;t<o.length;t++){let n=o[t]??r,i=o[(t+1)%o.length]??r;s.push(e.makeLineEdge([n[0],n[1],n[2]],[i[0],i[1],i[2]]))}let c=e.makeWire(s),l=e.makeFace(c,!0);for(let t of s)e.dispose(t);return l}function FS(e,t){return PS(e,t)}function IS(e,t){let n=e.boundingBox(t);return[(n.min[0]+n.max[0])/2,(n.min[1]+n.max[1])/2,(n.min[2]+n.max[2])/2]}function LS(e,t){let n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return n*n+r*r+i*i}function RS(e,t,n,r){let i=e.iterShapes(t,r);if(!n||n.kind===`all`)return i;if(n.kind===`witness`){let t=n.points??[],r=i.map(t=>IS(e,t)),a=[],o=new Set;for(let e of t){let t=-1,n=1/0;for(let a=0;a<i.length;a++){if(o.has(a))continue;let i=LS(e,r[a]??[0,0,0]);i<n&&(n=i,t=a)}let s=i[t];t>=0&&s!==void 0&&(o.add(t),a.push(s))}return a}if(n.kind===`index`){let e=n.indices??[],t=[];for(let n of e){let e=i[n];e!==void 0&&t.push(e)}return t}let a=n.regions??[],o=e=>a.some(t=>e[0]>=t.min[0]&&e[0]<=t.max[0]&&e[1]>=t.min[1]&&e[1]<=t.max[1]&&e[2]>=t.min[2]&&e[2]<=t.max[2]);return i.filter(t=>o(IS(e,t)))}function zS(e){let t=e.selection;return t===void 0?void 0:t}function BS(e){let t=e[0];if(t===void 0)throw Error(`manifold replay: op requires an input shape`);return t}function VS(e,t,n){return e.createAxis1(t[0],t[1],t[2],n[0],n[1],n[2])}function HS(e,t){return(n,r)=>{let i=PS(n,r),a=OS(r[e]),o=OS(r[t],[0,0,1]),s=kS(r.angleDeg,360);return n.revolve(i,VS(n,a,o),Math.PI/180*s)}}var US={makeBox:(e,t)=>e.makeBox(kS(t.width),kS(t.height),kS(t.depth)),makeBoxWithCorners:(e,t)=>e.makeBoxFromCorners(OS(t.p1),OS(t.p2)),makeCylinder:(e,t)=>e.makeCylinder(kS(t.radius),kS(t.height),OS(t.center),OS(t.direction,[0,0,1])),makeSphere:(e,t)=>e.makeSphere(kS(t.radius),OS(t.center)),makeCone:(e,t)=>e.makeCone(kS(t.radius1),kS(t.radius2),kS(t.height),OS(t.center),OS(t.direction,[0,0,1])),makeTorus:(e,t)=>e.makeTorus(kS(t.majorRadius),kS(t.minorRadius),OS(t.center),OS(t.direction,[0,0,1])),makeEllipsoid:(e,t)=>e.makeEllipsoid(kS(t.aLength),kS(t.bLength),kS(t.cLength)),makeFuse:(e,t,n)=>{if(n.length<2)return BS(n);let r=BS(n);for(let t of n.slice(1))r=e.fuse(r,t);return r},makeCut:(e,t,n)=>{let r=BS(n);return e.cutAll(r,n.slice(1))},makeCommon:(e,t,n)=>{let r=BS(n);for(let t of n.slice(1))r=e.intersect(r,t);return r},translateShape:(e,t,n)=>e.translate(BS(n),kS(t.x),kS(t.y),kS(t.z)),rotateShape:(e,t,n)=>e.rotate(BS(n),kS(t.angle),OS(t.axis,[0,0,1]),OS(t.center)),scaleShape:(e,t,n)=>e.scale(BS(n),OS(t.center),kS(t.factor,1)),mirrorShape:(e,t,n)=>e.mirror(BS(n),OS(t.origin),OS(t.normal,[1,0,0])),transformShape:(e,t,n)=>e.transform(BS(n),t.matrix),generalTransform:(e,t,n)=>e.generalTransform(BS(n),t.linear,OS(t.translation),!!t.isOrthogonal),generalTransformNonOrthogonal:(e,t,n)=>e.generalTransformNonOrthogonal(BS(n),t.linear,OS(t.translation)),gridPattern:(e,t,n)=>{if(typeof e.gridPattern!=`function`)throw Error(`manifold replay: target kernel lacks gridPattern`);return e.gridPattern(BS(n),OS(t.directionX),OS(t.directionY),kS(t.spacingX),kS(t.spacingY),kS(t.countX,1),kS(t.countY,1))},profileEdge:(e,t)=>{let n=t.pts??[],r=n[0]??[0,0,0],i=n.length>1?n[n.length-1]??r:[r[0]+.001,r[1],r[2]];return e.makeLineEdge([r[0],r[1],r[2]],[i[0],i[1],i[2]])},profileWire:(e,t)=>{let n=t.ring??[],r=[];for(let t=0;t<n.length;t++){let i=n[t]??[0,0,0],a=n[(t+1)%n.length]??i;r.push(e.makeLineEdge([i[0],i[1],i[2]],[a[0],a[1],a[2]]))}let i=e.makeWire(r);for(let t of r)e.dispose(t);return i},profileFace:(e,t)=>PS(e,t),extrude:(e,t)=>{let n=PS(e,t);return e.extrude(n,OS(t.direction,[0,0,1]),kS(t.length,1))},revolve:HS(`axisOrigin`,`axisDirection`),revolveVec:HS(`center`,`direction`),loft:(e,t)=>{let n=(t.sections??[]).map(t=>WS(e,t));return e.loft(n,!!t.ruled)},loftAdvanced:(e,t)=>{let n=(t.sections??[]).map(t=>WS(e,t)),r={solid:t.solid!==!1,ruled:!!t.ruled};return typeof t.tolerance==`number`&&(r.tolerance=t.tolerance),e.loftAdvanced(n,r)},sweep:(e,t)=>e.sweep(GS(e,t),KS(e,t)),simplePipe:(e,t)=>e.simplePipe(GS(e,t),KS(e,t)),sweepWithOptions:(e,t)=>e.sweepWithOptions(GS(e,t),KS(e,t),AS(t.contactMode),t.scaleValues??[],kS(t.segments,0)),sweepPipeShell:(e,t)=>{let n=e.sweepPipeShell(GS(e,t),KS(e,t));return qS(n)?n.shape:n},helicalSweep:(e,t)=>e.helicalSweep(GS(e,t),OS(t.axisOrigin),OS(t.axisDirection,[0,0,1]),kS(t.radius),kS(t.pitch),kS(t.turns,1)),draftPrism:(e,t)=>{let n=PS(e,t);return e.draftPrism(n,n,n,kS(t.height),kS(t.angleDeg),!!t.fuse)},fillet:(e,t,n)=>{let r=BS(n),i=RS(e,r,zS(t),`edge`),a=t.radii,o=t.radius;if(a&&a.length>1){let t=new Map;for(let e=0;e<i.length;e++){let n=i[e],r=a[e]??a[a.length-1];n!==void 0&&r!==void 0&&t.set(n,r)}return e.fillet(r,i,e=>t.get(e)??0)}let s=a?.[0]??o;return e.fillet(r,i,s??0)},chamfer:(e,t,n)=>{let r=BS(n),i=RS(e,r,zS(t),`edge`);return e.chamfer(r,i,t.radius)},chamferDistAngle:(e,t,n)=>{let r=BS(n),i=RS(e,r,zS(t),`edge`);return e.chamferDistAngle(r,i,kS(t.distance),kS(t.angleDeg))},shell:(e,t,n)=>{let r=BS(n),i=RS(e,r,zS(t),`face`);return typeof t.tolerance==`number`?e.shell(r,i,kS(t.thickness),t.tolerance):e.shell(r,i,kS(t.thickness))},thicken:(e,t,n)=>e.thicken(BS(n),kS(t.thickness)),offset:(e,t,n)=>typeof t.tolerance==`number`?e.offset(BS(n),kS(t.distance),t.tolerance):e.offset(BS(n),kS(t.distance)),filletVariable:(e,t,n)=>e.filletVariable(BS(n),AS(t.spec)),draft:(e,t,n)=>{let r=BS(n),i=RS(e,r,zS(t),`face`);return e.draft(r,i,OS(t.pullDirection,[0,0,1]),OS(t.neutralPlane),kS(t.angleDeg))},defeature:(e,t,n)=>{let r=BS(n),i=RS(e,r,zS(t),`face`);return e.defeature(r,i)},simplify:(e,t,n)=>e.simplify(BS(n)),reverseShape:(e,t,n)=>e.reverseShape(BS(n)),hull:(e,t,n)=>e.hull([...n],kS(t.tolerance)),hullFromPoints:(e,t)=>{let n=t.points??[];return e.hullFromPoints(n.map(e=>({x:e[0],y:e[1],z:e[2]})),kS(t.tolerance))},sewAndSolidify:(e,t,n)=>e.sewAndSolidify([...n],kS(t.tolerance))};function WS(e,t){let n=FS(e,t);return e.iterShapes(n,`wire`)[0]??n}function GS(e,t){let n=t.section;return n?FS(e,n):PS(e,t)}function KS(e,t){let n=t.path??[];if(n.length<2)throw Error(`manifold replay: sweep spine needs at least two path points`);let r=[];for(let t=0;t+1<n.length;t++){let i=n[t]??[0,0,0],a=n[t+1]??[0,0,0];r.push(e.makeLineEdge([i[0],i[1],i[2]],[a[0],a[1],a[2]]))}let i=e.makeWire(r);for(let t of r)e.dispose(t);return i}function qS(e){return typeof e==`object`&&!!e&&`shape`in e&&`firstShape`in e&&`lastShape`in e}function JS(e,t,n,r){let i=n.get(e);if(i!==void 0)return i;if(!e.replayable)throw Error(`manifold replay: op '${e.op}' is not replayable (raw-mesh origin or unsupported)`);let a=US[e.op];if(!a)throw Error(`manifold replay: no replay handler for op '${e.op}'`);let o=e.inputs.map(e=>JS(e,t,n,r)),s=a(t,e.params,o);return n.set(e,s),r.add(s),s}function YS(e,t,n=new Map){let r=new Set,i=JS(e,t,n,r);for(let e of r)e!==i&&t.dispose(e);return i}function XS(e){return V(e)}function ZS(e){let t=e?.node?.params;if(!t)return;let n=t.pts??t.ring;if(n&&n.length)return n;let r=t.outline;if(r&&r.length){let e=t.origin??[0,0,0],n=t.xAxis??[1,0,0],i=t.yAxis??[0,1,0];return r.map(t=>[e[0]+n[0]*t[0]+i[0]*t[1],e[1]+n[1]*t[0]+i[1]*t[1],e[2]+n[2]*t[0]+i[2]*t[1]])}}function QS(e){let t=[1/0,1/0,1/0],n=[-1/0,-1/0,-1/0];for(let r of e)for(let e=0;e<3;e++){let i=r[e]??0;i<(t[e]??1/0)&&(t[e]=i),i>(n[e]??-1/0)&&(n[e]=i)}return{min:t,max:n}}function $S(e){let t=e;if(t&&t.__manifoldSub&&t.box)return t.box;let n=ZS(e);return n?QS(n):XS(e).boundingBox()}function eC(e){return XS(e)?.getMesh?.()}function tC(e,t){let n=t*e.numProp;return[e.vertProperties[n]??0,e.vertProperties[n+1]??0,e.vertProperties[n+2]??0]}function nC(e,t){let n=t*3;return[e.triVerts[n]??0,e.triVerts[n+1]??0,e.triVerts[n+2]??0]}function rC(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 iC(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function aC(e){let t=$S(e);return[(t.min[0]+t.max[0])/2,(t.min[1]+t.max[1])/2,(t.min[2]+t.max[2])/2]}function oC(e){let t=Math.floor(e.vertProperties.length/e.numProp);if(t===0)return[0,0,0];let n=[0,0,0];for(let r=0;r<t;r++){let t=tC(e,r);n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}return[n[0]/t,n[1]/t,n[2]/t]}function sC(e){let t=eC(e);if(!t)return aC(e);let n=Math.floor(t.triVerts.length/3),r=0,i=[0,0,0];for(let e=0;e<n;e++){let[n,a,o]=nC(t,e),s=tC(t,n),c=tC(t,a),l=tC(t,o),u=iC(s,rC(c,l))/6;r+=u,i[0]+=(s[0]+c[0]+l[0])/4*u,i[1]+=(s[1]+c[1]+l[1])/4*u,i[2]+=(s[2]+c[2]+l[2])/4*u}return Math.abs(r)<1e-12?oC(t):[i[0]/r,i[1]/r,i[2]/r]}function cC(e){let t=eC(e);if(!t)return aC(e);let n=Math.floor(t.triVerts.length/3),r=0,i=[0,0,0];for(let e=0;e<n;e++){let[n,a,o]=nC(t,e),s=tC(t,n),c=tC(t,a),l=tC(t,o),u=rC([c[0]-s[0],c[1]-s[1],c[2]-s[2]],[l[0]-s[0],l[1]-s[1],l[2]-s[2]]),d=Math.hypot(u[0],u[1],u[2])/2;r+=d,i[0]+=(s[0]+c[0]+l[0])/3*d,i[1]+=(s[1]+c[1]+l[1])/3*d,i[2]+=(s[2]+c[2]+l[2])/3*d}return r<1e-12?oC(t):[i[0]/r,i[1]/r,i[2]/r]}function lC(e){return XS(e).volume()}function uC(e){let t=e;return t&&t.__nativeFace&&typeof t.area==`number`?t.area:XS(e).surfaceArea()}function dC(e){let t=e;if(t&&t.__manifoldSub&&t.box)return{min:[...t.box.min],max:[...t.box.max]};let n=$S(e);return{min:[...n.min],max:[...n.max]}}function fC(e){return sC(e)}function pC(e,t){let n=(e,t,n,r)=>{if(t<n)return[t,n];if(r<e)return[e,r];let i=(Math.max(e,n)+Math.min(t,r))/2;return[i,i]},[r,i]=n(e.min[0],e.max[0],t.min[0],t.max[0]),[a,o]=n(e.min[1],e.max[1],t.min[1],t.max[1]),[s,c]=n(e.min[2],e.max[2],t.min[2],t.max[2]),l=i-r,u=o-a,d=c-s;return{value:Math.sqrt(l*l+u*u+d*d),point1:[r,a,s],point2:[i,o,c]}}function mC(e,t){return pC($S(e),$S(t))}function hC(e,t=!1){return{volume:lC(e),area:uC(e),length:0,centerOfMass:fC(e),boundingBox:dC(e)}}function gC(e,t,n){let r=My();if(!r)throw Error(`manifold: surfaceCurvature requires a registered occt kernel; none is available`);let i=Ay(e);if(!i)return r.surfaceCurvature(e,t,n);if(!i.node.replayable)throw Error(`manifold: surfaceCurvature unsupported; shape originates from a non-replayable op (raw mesh import or mesh boolean)`);let a=Py.get(i.node)??(()=>{let e=YS(i.node,r);return Py.set(i.node,e),e})();return r.surfaceCurvature(a,t,n)}function _C(e){return{volume:e=>lC(e),area:e=>uC(e),length:e=>{let t=e;if(t&&t.__nativeEdge&&typeof t.length==`number`)return t.length;let n=Ay(e)?.node;return n?.op===`profileEdge`&&n.params?.curve?wb(n.params.curve):Ey(`length`)},centerOfMass:e=>fC(e),linearCenterOfMass:e=>fC(e),boundingBox:e=>dC(e),distance:(e,t)=>mC(e,t),surfaceCurvature:(e,t,n)=>gC(e,t,n),surfaceCenterOfMass:e=>cC(e),measureBulk:(e,t)=>hC(e,t),createDistanceQuery:e=>({distanceTo:t=>mC(e,t),dispose:()=>{}})}}function vC(e,t){let{runIndex:n,runOriginalID:r}=e;if(!n||!r)return 0;let i=t*3;for(let e=0;e<r.length;e++){let t=n[e]??0,a=n[e+1]??2**53-1;if(i>=t&&i<a)return r[e]??0}return 0}function yC(e){let t=e,n=t.triVerts,r=t.vertProperties,i=t.numProp||3,a=t.faceID,o=n.length/3,s=e=>{let t=e*i;return[r[t]??0,r[t+1]??0,r[t+2]??0]},c=new Map;for(let e=0;e<o;e++){let t=a?a[e]??e:e,n=c.get(t);n||(n=[],c.set(t,n)),n.push(e)}let l=[];for(let[e,r]of c){let i=0,a=0,o=0,c=0,u=0,d=0,f=0,p=1/0,m=1/0,h=1/0,g=-1/0,_=-1/0,v=-1/0,y=new Float32Array(r.length*9),b=0;for(let e of r){let t=s(n[e*3]??0),r=s(n[e*3+1]??0),l=s(n[e*3+2]??0),x=r[0]-t[0],S=r[1]-t[1],C=r[2]-t[2],w=l[0]-t[0],ee=l[1]-t[1],te=l[2]-t[2],ne=S*te-C*ee,re=C*w-x*te,ie=x*ee-S*w;i+=ne,a+=re,o+=ie;let ae=.5*Math.hypot(ne,re,ie);f+=ae;let oe=(t[0]+r[0]+l[0])/3,se=(t[1]+r[1]+l[1])/3,ce=(t[2]+r[2]+l[2])/3;c+=ae*oe,u+=ae*se,d+=ae*ce;for(let e of[t,r,l])e[0]<p&&(p=e[0]),e[1]<m&&(m=e[1]),e[2]<h&&(h=e[2]),e[0]>g&&(g=e[0]),e[1]>_&&(_=e[1]),e[2]>v&&(v=e[2]),y[b++]=e[0],y[b++]=e[1],y[b++]=e[2]}let x=Math.hypot(i,a,o)||1,S=[i/x,a/x,o/x],C=f>0?[c/f,u/f,d/f]:[0,0,0];l.push({__nativeFace:!0,faceId:e,originId:vC(t,r[0]??0),normal:S,center:C,area:f,min:[p,m,h],max:[g,_,v],tris:y})}return l}function bC(e){return!!e&&typeof e==`object`&&e.__nativeFace===!0}var xC=Math.cos(45*Math.PI/180),SC=(e,t)=>e<t?e*1e9+t:t*1e9+e,CC=(e,t)=>e<t?`${e},${t}`:`${t},${e}`;function wC(e){let t=e,n=t.triVerts,r=t.vertProperties,i=t.numProp||3,a=t.faceID,o=n.length/3;if(!a)return[];let s=e=>{let t=e*i;return[r[t]??0,r[t+1]??0,r[t+2]??0]},c=e=>{let t=s(n[e*3]??0),r=s(n[e*3+1]??0),i=s(n[e*3+2]??0),a=r[0]-t[0],o=r[1]-t[1],c=r[2]-t[2],l=i[0]-t[0],u=i[1]-t[1],d=i[2]-t[2],f=o*d-c*u,p=c*l-a*d,m=a*u-o*l,h=Math.hypot(f,p,m)||1;return[f/h,p/h,m/h]},l=new Map;for(let e=0;e<o;e++){let t=n[e*3]??0,r=n[e*3+1]??0,i=n[e*3+2]??0,o=a[e]??e,s=c(e);for(let[e,n]of[[t,r],[r,i],[i,t]]){let t=SC(e,n),r=l.get(t);r||(r={v:[e,n],faces:[],nrm:[]},l.set(t,r)),r.faces.push(o),r.nrm.push(s)}}let u=new Map;for(let{v:e,faces:t,nrm:n}of l.values()){if(t.length!==2)continue;let[r,i]=t;if(r===i)continue;let[a,o]=n;if(a[0]*o[0]+a[1]*o[1]+a[2]*o[2]>xC)continue;let s=CC(r,i),c=u.get(s);c||(c={faces:r<i?[r,i]:[i,r],segs:[]},u.set(s,c)),c.segs.push(e)}let d=[];for(let{faces:e,segs:t}of u.values())for(let n of TC(t))d.push(EC(e,n,s));return d}function TC(e){let t=new Map,n=new Set,r=(e,n)=>{let r=t.get(e);r||(r=[],t.set(e,r)),r.push(n)};e.forEach(([e,t],n)=>{r(e,n),r(t,n)});let i=(t,n)=>{let r=e[t]??[n,n];return r[0]===n?r[1]:r[0]},a=[];for(let r=0;r<e.length;r++){if(n.has(r))continue;n.add(r);let o=e[r]??[0,0],s=[o[0],o[1]];for(let r=0;r<e.length;r++){let e=s[s.length-1]??0,r=(t.get(e)??[]).find(e=>!n.has(e));if(r===void 0)break;n.add(r),s.push(i(r,e))}for(let r=0;r<e.length;r++){let e=s[0]??0,r=(t.get(e)??[]).find(e=>!n.has(e));if(r===void 0)break;n.add(r),s.unshift(i(r,e))}a.push(s)}return a}function EC(e,t,n){let r=t.length,i=new Float32Array(r*3),a=new Float32Array(r),o=1/0,s=1/0,c=1/0,l=-1/0,u=-1/0,d=-1/0,f=0,p=null;for(let e=0;e<r;e++){let r=n(t[e]??0);i[e*3]=r[0],i[e*3+1]=r[1],i[e*3+2]=r[2],p&&(f+=Math.hypot(r[0]-p[0],r[1]-p[1],r[2]-p[2])),a[e]=f,p=r,r[0]<o&&(o=r[0]),r[1]<s&&(s=r[1]),r[2]<c&&(c=r[2]),r[0]>l&&(l=r[0]),r[1]>u&&(u=r[1]),r[2]>d&&(d=r[2])}return{__nativeEdge:!0,faces:e,pts:i,arc:a,length:f,min:[o,s,c],max:[l,u,d],curveType:DC(i)?`LINE`:`CIRCLE`}}function DC(e){let t=e.length/3;if(t<=2)return!0;let n=e[0]??0,r=e[1]??0,i=e[2]??0,a=e[(t-1)*3]??0,o=e[(t-1)*3+1]??0,s=e[(t-1)*3+2]??0,c=a-n,l=o-r,u=s-i,d=Math.hypot(c,l,u)||1;c/=d,l/=d,u/=d;for(let a=1;a<t-1;a++){let t=(e[a*3]??0)-n,o=(e[a*3+1]??0)-r,s=(e[a*3+2]??0)-i,f=t*c+o*l+s*u,p=t-f*c,m=o-f*l,h=s-f*u;if(Math.hypot(p,m,h)>1e-6*Math.max(1,d))return!1}return!0}function OC(e){let t=e,n=t.triVerts,r=t.vertProperties,i=t.numProp||3,a=t.faceID;if(!a)return[];let o=n.length/3,s=new Map;for(let e=0;e<o;e++){let t=a[e]??e;for(let r=0;r<3;r++){let i=n[e*3+r]??0,a=s.get(i);a||(a=new Set,s.set(i,a)),a.add(t)}}let c=[];for(let[e,t]of s){if(t.size<3)continue;let n=e*i;c.push({__nativeVertex:!0,point:[r[n]??0,r[n+1]??0,r[n+2]??0]})}return c}function kC(e){return!!e&&typeof e==`object`&&e.__nativeVertex===!0}function AC(e){return!!e&&typeof e==`object`&&e.__nativeEdge===!0}function jC(e,t){let{pts:n,arc:r}=e,i=r.length;if(i===0)return[0,0,0];if(t<=0)return[n[0]??0,n[1]??0,n[2]??0];if(t>=e.length)return[n[(i-1)*3]??0,n[(i-1)*3+1]??0,n[(i-1)*3+2]??0];let a=1;for(;a<i&&(r[a]??0)<t;)a++;let o=r[a-1]??0,s=r[a]??o,c=s>o?(t-o)/(s-o):0,l=(a-1)*3,u=a*3;return[(n[l]??0)+((n[u]??0)-(n[l]??0))*c,(n[l+1]??0)+((n[u+1]??0)-(n[l+1]??0))*c,(n[l+2]??0)+((n[u+2]??0)-(n[l+2]??0))*c]}function MC(e,t){let{pts:n,arc:r}=e,i=r.length;if(i<2)return[1,0,0];let a=1;for(;a<i-1&&(r[a]??0)<t;)a++;let o=(a-1)*3,s=a*3,c=(n[s]??0)-(n[o]??0),l=(n[s+1]??0)-(n[o+1]??0),u=(n[s+2]??0)-(n[o+2]??0),d=Math.hypot(c,l,u)||1;return[c/d,l/d,u/d]}function NC(e,t){let n=Ay(e);if(!n)throw Error(`manifold: ${t} requires a manifold shape handle`);if(!n.node.replayable)throw Error(`manifold: ${t} unsupported; shape originates from a non-replayable op (raw mesh import or mesh boolean)`);let r=Ny(t),i=Py.get(n.node);if(i!==void 0)return{occt:r,brep:i};let a=YS(n.node,r);return Py.set(n.node,a),{occt:r,brep:a}}function PC(e){if(Ay(e))return`solid`;let{occt:t,brep:n}=NC(e,`shapeType`);return t.shapeType(n)}function FC(e,t){let n=Ay(e),r=Ay(t);return!n||!r?!1:n.manifold===r.manifold}function IC(e,t){if(!Ay(e))return 0;let{occt:n,brep:r}=NC(e,`hashCode`);return n.hashCode(r,t)}function LC(e){let t=Ay(e);return t?!V(t):!0}function RC(e,t){let n=Ay(e);if(!n)return[];if(t===`solid`)return[e];if(t===`vertex`){let e=V(n);return e&&typeof e.getMesh==`function`?OC(e.getMesh()).map((e,t)=>({...e,__manifoldSub:!0,index:t,box:{min:e.point,max:e.point},parent:n.node,subType:`vertex`})):[]}if(t!==`edge`&&t!==`face`)return[];if(t===`face`){let e=V(n);if(e&&typeof e.getMesh==`function`)return yC(e.getMesh()).map((e,t)=>({...e,__manifoldSub:!0,index:t,box:{min:e.min,max:e.max},parent:n.node,subType:`face`}))}if(t===`edge`){let e=V(n);if(e&&typeof e.getMesh==`function`)return wC(e.getMesh()).map((e,t)=>({...e,__manifoldSub:!0,index:t,box:{min:e.min,max:e.max},parent:n.node,subType:`edge`}))}if(!n.node.replayable)return[];let r=My();if(!r)return[];let i=Py.get(n.node)??(()=>{let e=YS(n.node,r);return Py.set(n.node,e),e})();return r.iterShapes(i,t).map((e,i)=>({__manifoldSub:!0,index:i,box:r.boundingBox(e),occt:e,parent:n.node,subType:t}))}function zC(e){let{occt:t,brep:n}=NC(e,`edgeToFaceMap`);return t.edgeToFaceMap(n)}function BC(e,t){let{occt:n,brep:r}=NC(e,`adjacentFaces`);return n.adjacentFaces(r,t)}function VC(e){return{iterShapes:RC,iterShapeList:(e,t)=>{Ny(`iterShapeList`).iterShapeList(e,t)},shapeType:PC,isSame:FC,isEqual:FC,downcast:e=>e,hashCode:IC,isNull:LC,shapeOrientation:e=>`forward`,edgeToFaceMap:zC,sharedEdges:(e,t)=>Ny(`sharedEdges`).sharedEdges(e,t),adjacentFaces:BC,sew:()=>{throw Error(`manifold: sew is unsupported on the mesh kernel; use a B-rep kernel`)}}}function HC(e){return V(e).getMesh()}function UC(e){return e.numProp&&e.numProp>=3?e.numProp:3}function WC(e){return Math.floor(e.vertProperties.length/UC(e))}function GC(e,t){let n=t*UC(e);return[e.vertProperties[n]??0,e.vertProperties[n+1]??0,e.vertProperties[n+2]??0]}function KC(e,t){let n=t*3;return[e.triVerts[n]??0,e.triVerts[n+1]??0,e.triVerts[n+2]??0]}function qC(e,t,n){let r=t[0]-e[0],i=t[1]-e[1],a=t[2]-e[2],o=n[0]-e[0],s=n[1]-e[1],c=n[2]-e[2],l=i*c-a*s,u=a*o-r*c,d=r*s-i*o,f=Math.hypot(l,u,d)||1;return[l/f,u/f,d/f]}function JC(e,t){let n=HC(e),r=Math.floor(n.triVerts.length/3);if(t){let e=new ArrayBuffer(84+r*50),t=new DataView(e);t.setUint32(80,r,!0);let i=84;for(let e=0;e<r;e++){let[r,a,o]=KC(n,e),s=GC(n,r),c=GC(n,a),l=GC(n,o),u=qC(s,c,l);t.setFloat32(i,u[0],!0),t.setFloat32(i+4,u[1],!0),t.setFloat32(i+8,u[2],!0),i+=12;for(let e of[s,c,l])t.setFloat32(i,e[0],!0),t.setFloat32(i+4,e[1],!0),t.setFloat32(i+8,e[2],!0),i+=12;t.setUint16(i,0,!0),i+=2}return e}let i=[`solid manifold`];for(let e=0;e<r;e++){let[t,r,a]=KC(n,e),o=GC(n,t),s=GC(n,r),c=GC(n,a),l=qC(o,s,c);i.push(` facet normal ${l[0]} ${l[1]} ${l[2]}`),i.push(` outer loop`);for(let e of[o,s,c])i.push(` vertex ${e[0]} ${e[1]} ${e[2]}`);i.push(` endloop`),i.push(` endfacet`)}return i.push(`endsolid manifold`),i.join(`
10
10
  `)}function YC(e){let t=HC(e),n=WC(t),r=Math.floor(t.triVerts.length/3),i=[`# exported by brepjs manifold kernel`];for(let e=0;e<n;e++){let n=GC(t,e);i.push(`v ${n[0]} ${n[1]} ${n[2]}`)}for(let e=0;e<r;e++){let[n,r,a]=KC(t,e);i.push(`f ${n+1} ${r+1} ${a+1}`)}return new TextEncoder().encode(i.join(`
@@ -4201,4 +4201,4 @@ No matching component was found for:
4201
4201
 
4202
4202
  gl_FragColor = vec4(lineColor, alpha);
4203
4203
  }
4204
- `;function nb({cellSize:e=10,lineColor:t=`#888898`,lineOpacity:n=.1,fadeStart:r=50,fadeEnd:i=200}){let a=(0,v.useRef)(null),o=i*2.5;return(0,v.useEffect)(()=>()=>{a.current?.dispose()},[]),(0,Q.jsxs)(`mesh`,{rotation:[-Math.PI/2,0,0],position:[0,-.01,0],children:[(0,Q.jsx)(`planeGeometry`,{args:[o,o]}),(0,Q.jsx)(`shaderMaterial`,{ref:a,vertexShader:eb,fragmentShader:tb,uniforms:{cellSize:{value:e},lineColor:{value:new K(t)},lineOpacity:{value:n},fadeStart:{value:r},fadeEnd:{value:i}},transparent:!0,depthWrite:!1,side:2,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1})]})}function rb(){return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`hemisphereLight`,{args:[`#ffffff`,`#1a1a2e`,.65]}),(0,Q.jsx)(`directionalLight`,{position:[-50,60,80],intensity:.85,color:`#fff8f0`}),(0,Q.jsx)(`directionalLight`,{position:[40,-40,30],intensity:.15,color:`#e0e8ff`})]})}function ib({autoRotate:e=!1,target:t,gridVisible:n=!0,gridProps:r,controlsProps:i,controlsRef:a,onControlsStart:o}){let s={...a?{ref:a}:{},...t?{target:t}:{},...o?{onStart:o}:{}};return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(rb,{}),(0,Q.jsx)($y,{}),(0,Q.jsx)(Ay,{makeDefault:!0,autoRotate:e,autoRotateSpeed:1.5,...s,...i}),n&&(0,Q.jsx)(nb,{...r})]})}var ab={iso:new W(.6,.5,.6),front:new W(0,.3,1),top:new W(0,1,-.01),right:new W(1,.3,0)};function ob({data:e,view:t,fitSignal:n,projection:r,onFirstFrame:i}){let a=A_(e=>e.camera),o=A_(e=>e.invalidate),s=(0,v.useRef)(!1),c=(0,v.useRef)(i);c.current=i;let{center:l,radius:u}=(0,v.useMemo)(()=>{let t=jy(e);t.computeBoundingSphere();let n=t.boundingSphere??new Bi(new W,1),r={center:n.center.clone(),radius:n.radius||1};return t.dispose(),r},[e]);return(0,v.useEffect)(()=>{let e=ab[t].clone().normalize();a.position.copy(l).addScaledVector(e,u*3),a.near=u/100,a.far=u*100;let n=a;if(n.isOrthographicCamera){let e=Math.min(n.right-n.left,n.top-n.bottom);e>0&&u>0&&(n.zoom=e/(u*2.4))}a.lookAt(l),a.updateProjectionMatrix(),o(),s.current||(s.current=!0,c.current?.())},[a,o,l,u,t,n,r]),null}function sb(){let e=A_(e=>e.camera);return(0,Q.jsx)(ky,{makeDefault:!0,position:(0,v.useRef)([e.position.x,e.position.y,e.position.z]).current,zoom:20,near:.1,far:2e3})}function cb(){let e=A_(e=>e.gl);return(0,v.useEffect)(()=>(e.localClippingEnabled=!0,()=>{e.localClippingEnabled=!1}),[e]),null}function lb({data:e,view:t=`iso`,fitSignal:n,autoRotate:r=!1,gridVisible:i=!0,projection:a=`perspective`,onFirstFrame:o,children:s}){return(0,Q.jsxs)($v,{frameloop:r?`always`:`demand`,gl:{preserveDrawingBuffer:!0},children:[(0,Q.jsx)(cb,{}),a===`orthographic`&&(0,Q.jsx)(sb,{}),(0,Q.jsx)(ib,{autoRotate:r,gridVisible:i}),(0,Q.jsx)(ob,{data:e,view:t,fitSignal:n,projection:a,onFirstFrame:o}),s]})}var ub=[`iso`,`front`,`top`,`right`],db={solid:`Solid`,wireframe:`Wire`,xray:`X-ray`},fb={iso:`Iso`,front:`Front`,top:`Top`,right:`Right`};function pb({viewMode:e,onViewModeChange:t,showEdges:n,onToggleEdges:r,showGrid:i,onToggleGrid:a,autoRotate:o,onToggleAutoRotate:s,projection:c,onToggleProjection:l,activeView:u,onView:d,onFit:f,onScreenshot:p,touch:m=!1,className:h}){return(0,Q.jsxs)(`div`,{className:h,style:h?void 0:{...gb,gap:m?8:6},children:[(f||p)&&(0,Q.jsxs)(mb,{touch:m,children:[f&&(0,Q.jsx)(hb,{label:`Fit`,onClick:f,touch:m}),p&&(0,Q.jsx)(hb,{label:`Snap`,onClick:p,touch:m})]}),e&&t&&(0,Q.jsx)(mb,{touch:m,children:Object.keys(db).map(n=>(0,Q.jsx)(hb,{label:db[n],active:e===n,touch:m,onClick:()=>{t(n)}},n))}),(r||a||s||l)&&(0,Q.jsxs)(mb,{touch:m,children:[r&&(0,Q.jsx)(hb,{label:`Edges`,active:n,onClick:r,touch:m}),a&&(0,Q.jsx)(hb,{label:`Grid`,active:i,onClick:a,touch:m}),s&&(0,Q.jsx)(hb,{label:`Spin`,active:o,onClick:s,touch:m}),l&&(0,Q.jsx)(hb,{label:c===`orthographic`?`Ortho`:`Persp`,active:c===`orthographic`,touch:m,onClick:l})]}),d&&(0,Q.jsx)(mb,{touch:m,children:ub.map(e=>(0,Q.jsx)(hb,{label:fb[e],active:u===e,touch:m,onClick:()=>{d(e)}},e))})]})}function mb({children:e,touch:t}){return(0,Q.jsx)(`div`,{style:t?bb:_b,children:e})}function hb({label:e,active:t,onClick:n,touch:r}){return(0,Q.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...r?xb:vb,...t?yb:null},children:e})}var gb={position:`absolute`,top:12,right:12,zIndex:10,display:`flex`,flexDirection:`column`,gap:6,pointerEvents:`none`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},_b={display:`flex`,flexDirection:`column`,gap:4,padding:4,borderRadius:8,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(255, 255, 255, 0.08)`},vb={cursor:`pointer`,pointerEvents:`auto`,padding:`4px 10px`,borderRadius:5,fontSize:12,fontWeight:500,lineHeight:1.2,color:`#9aa3ad`,background:`rgba(255, 255, 255, 0.04)`,border:`1px solid transparent`,transition:`color 120ms, background 120ms`},yb={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`},bb={..._b,gap:6,padding:6},xb={...vb,padding:`9px 14px`,fontSize:13,borderRadius:6};function Sb({dims:e,volume:t,area:n,triangles:r,valid:i,unit:a,className:o}){let s=a?` ${a}`:``,c=[];return e&&c.push((0,Q.jsx)(Cb,{label:`Size`,value:`${wb(e[0])} × ${wb(e[1])} × ${wb(e[2])}${s}`},`size`)),t!==void 0&&c.push((0,Q.jsx)(Cb,{label:`Volume`,value:`${wb(t)}${a?` ${a}³`:``}`},`vol`)),n!==void 0&&c.push((0,Q.jsx)(Cb,{label:`Area`,value:`${wb(n)}${a?` ${a}²`:``}`},`area`)),r!==void 0&&c.push((0,Q.jsx)(Cb,{label:`Triangles`,value:r.toLocaleString()},`tris`)),i!==void 0&&c.push((0,Q.jsx)(Cb,{label:`Validity`,value:i?`valid`:`invalid`,valueColor:i?`#6ee7d7`:`#f0a0a0`},`valid`)),c.length===0?null:(0,Q.jsx)(`div`,{className:o,style:o?void 0:Tb,children:c})}function Cb({label:e,value:t,valueColor:n}){return(0,Q.jsxs)(`div`,{style:Eb,children:[(0,Q.jsx)(`span`,{style:Db,children:e}),(0,Q.jsx)(`span`,{style:{...Ob,...n?{color:n}:null},children:t})]})}function wb(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}var Tb={position:`absolute`,left:12,bottom:12,zIndex:10,display:`flex`,flexDirection:`column`,gap:2,padding:`8px 10px`,borderRadius:8,minWidth:150,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(255, 255, 255, 0.08)`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},Eb={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},Db={color:`#7b8591`},Ob={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},kb={PLANE:`Planar`,CYLINDER:`Cylindrical`,CONE:`Conical`,SPHERE:`Spherical`,TORUS:`Toroidal`,BEZIER_SURFACE:`Bézier`,BSPLINE_SURFACE:`B-spline`,REVOLUTION_SURFACE:`Revolved`,EXTRUSION_SURFACE:`Extruded`,OFFSET_SURFACE:`Offset`,OTHER_SURFACE:`Surface`};function Ab(e){return kb[e]??`Surface`}function jb(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}function Mb({face:e,onClear:t,unit:n,className:r}){if(!e)return null;let[i,a,o]=e.normal;return(0,Q.jsxs)(`div`,{className:r,style:r?void 0:Pb,children:[(0,Q.jsxs)(`div`,{style:Fb,children:[(0,Q.jsxs)(`span`,{style:Ib,children:[Ab(e.surfaceType),` face`]}),t&&(0,Q.jsx)(`button`,{type:`button`,onClick:t,"aria-label":`Clear selection`,style:Lb,children:`✕`})]}),(0,Q.jsx)(Nb,{label:`Area`,value:`${jb(e.area)}${n?` ${n}²`:``}`}),(0,Q.jsx)(Nb,{label:`Normal`,value:`${jb(i)}, ${jb(a)}, ${jb(o)}`})]})}function Nb({label:e,value:t}){return(0,Q.jsxs)(`div`,{style:Rb,children:[(0,Q.jsx)(`span`,{style:zb,children:e}),(0,Q.jsx)(`span`,{style:Bb,children:t})]})}var Pb={position:`absolute`,left:12,top:12,zIndex:10,display:`flex`,flexDirection:`column`,gap:2,padding:`8px 10px`,borderRadius:8,minWidth:170,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(74, 206, 204, 0.3)`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},Fb={display:`flex`,justifyContent:`space-between`,alignItems:`center`,gap:12,marginBottom:2},Ib={color:`#6ee7d7`,fontSize:12,fontWeight:600},Lb={cursor:`pointer`,border:`none`,background:`transparent`,color:`#7b8591`,fontSize:12,lineHeight:1,padding:0},Rb={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},zb={color:`#7b8591`},Bb={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},Vb=[`x`,`y`,`z`];function Hb({enabled:e,onToggle:t,axis:n,onAxisChange:r,position:i,min:a,max:o,onPositionChange:s,flip:c,onToggleFlip:l,className:u}){return(0,Q.jsxs)(`div`,{className:u,style:u?void 0:Wb,children:[(0,Q.jsx)(Ub,{label:`Section`,active:e,onClick:t}),e&&(0,Q.jsxs)(Q.Fragment,{children:[Vb.map(e=>(0,Q.jsx)(Ub,{label:e.toUpperCase(),active:n===e,onClick:()=>{r(e)}},e)),(0,Q.jsx)(`input`,{type:`range`,min:a,max:o,step:(o-a)/200||.01,value:i,disabled:a===o,onChange:e=>{s(Number(e.target.value))},"aria-label":`Section position`,style:{...qb,...a===o?{opacity:.4}:null}}),(0,Q.jsx)(Ub,{label:`Flip`,active:c,onClick:l})]})]})}function Ub({label:e,active:t,onClick:n}){return(0,Q.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...Gb,...t?Kb:null},children:e})}var Wb={position:`absolute`,bottom:12,left:`50%`,transform:`translateX(-50%)`,zIndex:10,display:`flex`,alignItems:`center`,gap:4,padding:4,borderRadius:8,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(255, 255, 255, 0.08)`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},Gb={cursor:`pointer`,padding:`4px 10px`,borderRadius:5,fontSize:12,fontWeight:500,lineHeight:1.2,color:`#9aa3ad`,background:`rgba(255, 255, 255, 0.04)`,border:`1px solid transparent`},Kb={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`},qb={width:160,accentColor:`#4ACECC`,margin:`0 4px`};function Jb(e){let t=new URLSearchParams(e),n=t.get(`file`);return n?{dir:t.get(`dir`),file:n}:null}function Yb(e){let t=e.lastIndexOf(`.`);return t===-1?``:e.slice(t).toLowerCase()}function Xb({inspect:e=!1}={}){let[t,n]=(0,v.useState)({status:`idle`});return(0,v.useEffect)(()=>{let t=Jb(window.location.search);if(!t){n({status:`error`,error:`missing ?file= parameter`});return}if(!t.dir){n({status:`error`,error:`missing ?dir= parameter`});return}n({status:`loading`});let r=new Worker(new URL(``+new URL(`kernelWorker-C64yFqcn.js`,import.meta.url).href,``+import.meta.url),{type:`module`}),i=!1;r.addEventListener(`message`,e=>{i||(e.data.type===`loaded`?n({status:`ready`,data:e.data.meshData,measurements:e.data.measurements}):n({status:`error`,error:e.data.error}))});let a=`/__model/${t.file.split(`/`).map(encodeURIComponent).join(`/`)}?dir=${encodeURIComponent(t.dir)}`;return fetch(a).then(e=>{if(!e.ok)throw Error(`fetch ${t.file}: ${e.status}`);return e.arrayBuffer()}).then(n=>{let i={type:`load`,bytes:n,ext:Yb(t.file),inspect:e};r.postMessage(i,[n])}).catch(e=>{i||n({status:`error`,error:e instanceof Error?e.message:String(e)})}),()=>{i=!0,r.terminate()}},[e]),t}var Zb=[`iso`,`front`,`top`,`right`],Qb=new Set;function $b(e){return Zb.includes(e)}function ex(e){return Qb.add(e),()=>Qb.delete(e)}function tx(e){for(let t of Qb)t(e)}function nx(){globalThis.__ready=!0}function rx(){let e=globalThis;e.__ready=!1,e.__renderView=e=>{$b(e)&&tx({view:e})},e.__setScene=e=>{e&&$b(e.view)&&tx(e)}}function ix({marks:e}){return(0,Q.jsx)(Q.Fragment,{children:e.map((e,t)=>(0,Q.jsx)(hy,{position:[e.pos[0],e.pos[1],e.pos[2]],center:!0,children:(0,Q.jsx)(`div`,{style:{background:`#ffcc00`,color:`#000`,font:`700 13px monospace`,padding:`1px 5px`,borderRadius:4,border:`1px solid #000`,whiteSpace:`nowrap`,pointerEvents:`none`},children:e.label})},`${e.label}-${t}`))})}var ax=new URLSearchParams(window.location.search),ox=ax.get(`ui`)!==`0`,sx=ax.get(`dims`)===`1`;function cx(){let e=document.querySelector(`canvas`);if(!e)return;let t=e.toDataURL(`image/png`),n=document.createElement(`a`);n.href=t,n.download=`brepjs-view.png`,n.click()}function lx(){let e=Xb({inspect:ox}),[t,n]=(0,v.useState)(`iso`),[r,i]=(0,v.useState)(`solid`),[a,o]=(0,v.useState)(!0),[s,c]=(0,v.useState)(!0),[l,u]=(0,v.useState)(!1),[d,f]=(0,v.useState)(`perspective`),[p,m]=(0,v.useState)(0),[h,g]=(0,v.useState)(null),[_,y]=(0,v.useState)(null),[b,x]=(0,v.useState)(!1),[S,C]=(0,v.useState)(`x`),[w,T]=(0,v.useState)(0),[E,D]=(0,v.useState)(!1),[O,k]=(0,v.useState)([]),A=(0,v.useCallback)(()=>{m(e=>e+1)},[]),ee=(0,v.useCallback)(e=>{g(e)},[]),j=(0,v.useCallback)(e=>{y(e?e.faceId:null)},[]),M=(0,v.useMemo)(()=>e.status===`ready`?My(e.data):null,[e]);(0,v.useEffect)(()=>ex(e=>{if(n(e.view),i(e.viewMode??`solid`),e.section&&M){let t=e.section.axis===`x`?0:e.section.axis===`y`?1:2;C(e.section.axis),T(M.min[t]+e.section.frac*(M.max[t]-M.min[t])),x(!0)}else x(!1);k(e.marks??[])}),[M]);let te=S===`x`?0:S===`y`?1:2,N=M?M.min[te]:0,P=M?M.max[te]:1,F=(0,v.useCallback)(e=>{if(!M)return 0;let t=e===`x`?0:e===`y`?1:2;return(M.min[t]+M.max[t])/2},[M]),ne=(0,v.useCallback)(()=>{x(e=>(e||T(F(S)),!e))},[F,S]),re=(0,v.useCallback)(e=>{C(e),T(F(e))},[F]),ie=(0,v.useMemo)(()=>b&&M?[Py(S,w,E)]:void 0,[b,M,S,w,E]);return e.status===`error`?(0,Q.jsxs)(`div`,{style:{color:`#e88`,padding:16,fontFamily:`monospace`},children:[`error: `,e.error]}):e.status===`ready`?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(lb,{data:e.data,view:t,fitSignal:p,autoRotate:l,gridVisible:s,projection:d,onFirstFrame:nx,children:[(0,Q.jsx)(zy,{data:e.data,viewMode:r,...ie?{clippingPlanes:ie}:{},...ox?{onFacePick:ee,onFaceHover:j}:{}}),a&&r!==`wireframe`&&e.data.edges.length>0&&(0,Q.jsx)(Vy,{edges:e.data.edges,...ie?{clippingPlanes:ie}:{}}),ox&&(0,Q.jsx)(Yy,{data:e.data,selectedFaceIds:h?[h.faceId]:[],hoverFaceId:_}),O.length>0&&(0,Q.jsx)(ix,{marks:O})]}),ox&&(0,Q.jsx)(Mb,{face:h,onClear:()=>{g(null)}}),ox&&(0,Q.jsx)(Hb,{enabled:b,onToggle:ne,axis:S,onAxisChange:re,position:w,min:N,max:P,onPositionChange:T,flip:E,onToggleFlip:()=>{D(e=>!e)}}),ox&&(0,Q.jsx)(Sb,{dims:Ny(e.data),volume:e.measurements.volume,area:e.measurements.area,triangles:e.data.index.length/3,valid:e.measurements.valid}),!ox&&sx&&(0,Q.jsx)(Sb,{dims:Ny(e.data)}),ox&&(0,Q.jsx)(pb,{viewMode:r,onViewModeChange:i,showEdges:a,onToggleEdges:()=>{o(e=>!e)},showGrid:s,onToggleGrid:()=>{c(e=>!e)},autoRotate:l,onToggleAutoRotate:()=>{u(e=>!e)},projection:d,onToggleProjection:()=>{f(e=>e===`perspective`?`orthographic`:`perspective`)},activeView:t,onView:n,onFit:A,onScreenshot:cx})]}):(0,Q.jsx)(`div`,{style:{color:`#9aa`,padding:16,fontFamily:`monospace`},children:`loading model…`})}rx();var ux=document.getElementById(`root`);ux&&(0,y.createRoot)(ux).render((0,Q.jsx)(v.StrictMode,{children:(0,Q.jsx)(lx,{})}));
4204
+ `;function nb({cellSize:e=10,lineColor:t=`#888898`,lineOpacity:n=.1,fadeStart:r=50,fadeEnd:i=200}){let a=(0,v.useRef)(null),o=i*2.5;return(0,v.useEffect)(()=>()=>{a.current?.dispose()},[]),(0,Q.jsxs)(`mesh`,{rotation:[-Math.PI/2,0,0],position:[0,-.01,0],children:[(0,Q.jsx)(`planeGeometry`,{args:[o,o]}),(0,Q.jsx)(`shaderMaterial`,{ref:a,vertexShader:eb,fragmentShader:tb,uniforms:{cellSize:{value:e},lineColor:{value:new K(t)},lineOpacity:{value:n},fadeStart:{value:r},fadeEnd:{value:i}},transparent:!0,depthWrite:!1,side:2,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1})]})}function rb(){return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`hemisphereLight`,{args:[`#ffffff`,`#1a1a2e`,.65]}),(0,Q.jsx)(`directionalLight`,{position:[-50,60,80],intensity:.85,color:`#fff8f0`}),(0,Q.jsx)(`directionalLight`,{position:[40,-40,30],intensity:.15,color:`#e0e8ff`})]})}function ib({autoRotate:e=!1,target:t,gridVisible:n=!0,gridProps:r,controlsProps:i,controlsRef:a,onControlsStart:o}){let s={...a?{ref:a}:{},...t?{target:t}:{},...o?{onStart:o}:{}};return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(rb,{}),(0,Q.jsx)($y,{}),(0,Q.jsx)(Ay,{makeDefault:!0,autoRotate:e,autoRotateSpeed:1.5,...s,...i}),n&&(0,Q.jsx)(nb,{...r})]})}var ab={iso:new W(.6,.5,.6),front:new W(0,.3,1),top:new W(0,1,-.01),right:new W(1,.3,0)};function ob({data:e,view:t,fitSignal:n,projection:r,onFirstFrame:i}){let a=A_(e=>e.camera),o=A_(e=>e.invalidate),s=(0,v.useRef)(!1),c=(0,v.useRef)(i);c.current=i;let{center:l,radius:u}=(0,v.useMemo)(()=>{let t=jy(e);t.computeBoundingSphere();let n=t.boundingSphere??new Bi(new W,1),r={center:n.center.clone(),radius:n.radius||1};return t.dispose(),r},[e]);return(0,v.useEffect)(()=>{let e=ab[t].clone().normalize();a.position.copy(l).addScaledVector(e,u*3),a.near=u/100,a.far=u*100;let n=a;if(n.isOrthographicCamera){let e=Math.min(n.right-n.left,n.top-n.bottom);e>0&&u>0&&(n.zoom=e/(u*2.4))}a.lookAt(l),a.updateProjectionMatrix(),o(),s.current||(s.current=!0,c.current?.())},[a,o,l,u,t,n,r]),null}function sb(){let e=A_(e=>e.camera);return(0,Q.jsx)(ky,{makeDefault:!0,position:(0,v.useRef)([e.position.x,e.position.y,e.position.z]).current,zoom:20,near:.1,far:2e3})}function cb(){let e=A_(e=>e.gl);return(0,v.useEffect)(()=>(e.localClippingEnabled=!0,()=>{e.localClippingEnabled=!1}),[e]),null}function lb({data:e,view:t=`iso`,fitSignal:n,autoRotate:r=!1,gridVisible:i=!0,projection:a=`perspective`,onFirstFrame:o,children:s}){return(0,Q.jsxs)($v,{frameloop:r?`always`:`demand`,gl:{preserveDrawingBuffer:!0},children:[(0,Q.jsx)(cb,{}),a===`orthographic`&&(0,Q.jsx)(sb,{}),(0,Q.jsx)(ib,{autoRotate:r,gridVisible:i}),(0,Q.jsx)(ob,{data:e,view:t,fitSignal:n,projection:a,onFirstFrame:o}),s]})}var ub=[`iso`,`front`,`top`,`right`],db={solid:`Solid`,wireframe:`Wire`,xray:`X-ray`},fb={iso:`Iso`,front:`Front`,top:`Top`,right:`Right`};function pb({viewMode:e,onViewModeChange:t,showEdges:n,onToggleEdges:r,showGrid:i,onToggleGrid:a,autoRotate:o,onToggleAutoRotate:s,projection:c,onToggleProjection:l,activeView:u,onView:d,onFit:f,onScreenshot:p,touch:m=!1,className:h}){return(0,Q.jsxs)(`div`,{className:h,style:h?void 0:{...gb,gap:m?8:6},children:[(f||p)&&(0,Q.jsxs)(mb,{touch:m,children:[f&&(0,Q.jsx)(hb,{label:`Fit`,onClick:f,touch:m}),p&&(0,Q.jsx)(hb,{label:`Snap`,onClick:p,touch:m})]}),e&&t&&(0,Q.jsx)(mb,{touch:m,children:Object.keys(db).map(n=>(0,Q.jsx)(hb,{label:db[n],active:e===n,touch:m,onClick:()=>{t(n)}},n))}),(r||a||s||l)&&(0,Q.jsxs)(mb,{touch:m,children:[r&&(0,Q.jsx)(hb,{label:`Edges`,active:n,onClick:r,touch:m}),a&&(0,Q.jsx)(hb,{label:`Grid`,active:i,onClick:a,touch:m}),s&&(0,Q.jsx)(hb,{label:`Spin`,active:o,onClick:s,touch:m}),l&&(0,Q.jsx)(hb,{label:c===`orthographic`?`Ortho`:`Persp`,active:c===`orthographic`,touch:m,onClick:l})]}),d&&(0,Q.jsx)(mb,{touch:m,children:ub.map(e=>(0,Q.jsx)(hb,{label:fb[e],active:u===e,touch:m,onClick:()=>{d(e)}},e))})]})}function mb({children:e,touch:t}){return(0,Q.jsx)(`div`,{style:t?bb:_b,children:e})}function hb({label:e,active:t,onClick:n,touch:r}){return(0,Q.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...r?xb:vb,...t?yb:null},children:e})}var gb={position:`absolute`,top:12,right:12,zIndex:10,display:`flex`,flexDirection:`column`,gap:6,pointerEvents:`none`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},_b={display:`flex`,flexDirection:`column`,gap:4,padding:4,borderRadius:8,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(255, 255, 255, 0.08)`},vb={cursor:`pointer`,pointerEvents:`auto`,padding:`4px 10px`,borderRadius:5,fontSize:12,fontWeight:500,lineHeight:1.2,color:`#9aa3ad`,background:`rgba(255, 255, 255, 0.04)`,border:`1px solid transparent`,transition:`color 120ms, background 120ms`},yb={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`},bb={..._b,gap:6,padding:6},xb={...vb,padding:`9px 14px`,fontSize:13,borderRadius:6};function Sb({dims:e,volume:t,area:n,triangles:r,valid:i,unit:a,className:o}){let s=a?` ${a}`:``,c=[];return e&&c.push((0,Q.jsx)(Cb,{label:`Size`,value:`${wb(e[0])} × ${wb(e[1])} × ${wb(e[2])}${s}`},`size`)),t!==void 0&&c.push((0,Q.jsx)(Cb,{label:`Volume`,value:`${wb(t)}${a?` ${a}³`:``}`},`vol`)),n!==void 0&&c.push((0,Q.jsx)(Cb,{label:`Area`,value:`${wb(n)}${a?` ${a}²`:``}`},`area`)),r!==void 0&&c.push((0,Q.jsx)(Cb,{label:`Triangles`,value:r.toLocaleString()},`tris`)),i!==void 0&&c.push((0,Q.jsx)(Cb,{label:`Validity`,value:i?`valid`:`invalid`,valueColor:i?`#6ee7d7`:`#f0a0a0`},`valid`)),c.length===0?null:(0,Q.jsx)(`div`,{className:o,style:o?void 0:Tb,children:c})}function Cb({label:e,value:t,valueColor:n}){return(0,Q.jsxs)(`div`,{style:Eb,children:[(0,Q.jsx)(`span`,{style:Db,children:e}),(0,Q.jsx)(`span`,{style:{...Ob,...n?{color:n}:null},children:t})]})}function wb(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}var Tb={position:`absolute`,left:12,bottom:12,zIndex:10,display:`flex`,flexDirection:`column`,gap:2,padding:`8px 10px`,borderRadius:8,minWidth:150,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(255, 255, 255, 0.08)`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},Eb={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},Db={color:`#7b8591`},Ob={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},kb={PLANE:`Planar`,CYLINDER:`Cylindrical`,CONE:`Conical`,SPHERE:`Spherical`,TORUS:`Toroidal`,BEZIER_SURFACE:`Bézier`,BSPLINE_SURFACE:`B-spline`,REVOLUTION_SURFACE:`Revolved`,EXTRUSION_SURFACE:`Extruded`,OFFSET_SURFACE:`Offset`,OTHER_SURFACE:`Surface`};function Ab(e){return kb[e]??`Surface`}function jb(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}function Mb({face:e,onClear:t,unit:n,className:r}){if(!e)return null;let[i,a,o]=e.normal;return(0,Q.jsxs)(`div`,{className:r,style:r?void 0:Pb,children:[(0,Q.jsxs)(`div`,{style:Fb,children:[(0,Q.jsxs)(`span`,{style:Ib,children:[Ab(e.surfaceType),` face`]}),t&&(0,Q.jsx)(`button`,{type:`button`,onClick:t,"aria-label":`Clear selection`,style:Lb,children:`✕`})]}),(0,Q.jsx)(Nb,{label:`Area`,value:`${jb(e.area)}${n?` ${n}²`:``}`}),(0,Q.jsx)(Nb,{label:`Normal`,value:`${jb(i)}, ${jb(a)}, ${jb(o)}`})]})}function Nb({label:e,value:t}){return(0,Q.jsxs)(`div`,{style:Rb,children:[(0,Q.jsx)(`span`,{style:zb,children:e}),(0,Q.jsx)(`span`,{style:Bb,children:t})]})}var Pb={position:`absolute`,left:12,top:12,zIndex:10,display:`flex`,flexDirection:`column`,gap:2,padding:`8px 10px`,borderRadius:8,minWidth:170,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(74, 206, 204, 0.3)`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},Fb={display:`flex`,justifyContent:`space-between`,alignItems:`center`,gap:12,marginBottom:2},Ib={color:`#6ee7d7`,fontSize:12,fontWeight:600},Lb={cursor:`pointer`,border:`none`,background:`transparent`,color:`#7b8591`,fontSize:12,lineHeight:1,padding:0},Rb={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},zb={color:`#7b8591`},Bb={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},Vb=[`x`,`y`,`z`];function Hb({enabled:e,onToggle:t,axis:n,onAxisChange:r,position:i,min:a,max:o,onPositionChange:s,flip:c,onToggleFlip:l,className:u}){return(0,Q.jsxs)(`div`,{className:u,style:u?void 0:Wb,children:[(0,Q.jsx)(Ub,{label:`Section`,active:e,onClick:t}),e&&(0,Q.jsxs)(Q.Fragment,{children:[Vb.map(e=>(0,Q.jsx)(Ub,{label:e.toUpperCase(),active:n===e,onClick:()=>{r(e)}},e)),(0,Q.jsx)(`input`,{type:`range`,min:a,max:o,step:(o-a)/200||.01,value:i,disabled:a===o,onChange:e=>{s(Number(e.target.value))},"aria-label":`Section position`,style:{...qb,...a===o?{opacity:.4}:null}}),(0,Q.jsx)(Ub,{label:`Flip`,active:c,onClick:l})]})]})}function Ub({label:e,active:t,onClick:n}){return(0,Q.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...Gb,...t?Kb:null},children:e})}var Wb={position:`absolute`,bottom:12,left:`50%`,transform:`translateX(-50%)`,zIndex:10,display:`flex`,alignItems:`center`,gap:4,padding:4,borderRadius:8,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(255, 255, 255, 0.08)`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},Gb={cursor:`pointer`,padding:`4px 10px`,borderRadius:5,fontSize:12,fontWeight:500,lineHeight:1.2,color:`#9aa3ad`,background:`rgba(255, 255, 255, 0.04)`,border:`1px solid transparent`},Kb={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`},qb={width:160,accentColor:`#4ACECC`,margin:`0 4px`};function Jb(e){let t=new URLSearchParams(e),n=t.get(`file`);return n?{dir:t.get(`dir`),file:n}:null}function Yb(e){let t=e.lastIndexOf(`.`);return t===-1?``:e.slice(t).toLowerCase()}function Xb({inspect:e=!1}={}){let[t,n]=(0,v.useState)({status:`idle`});return(0,v.useEffect)(()=>{let t=Jb(window.location.search);if(!t){n({status:`error`,error:`missing ?file= parameter`});return}if(!t.dir){n({status:`error`,error:`missing ?dir= parameter`});return}n({status:`loading`});let r=new Worker(new URL(``+new URL(`kernelWorker-ynmKsxiQ.js`,import.meta.url).href,``+import.meta.url),{type:`module`}),i=!1;r.addEventListener(`message`,e=>{i||(e.data.type===`loaded`?n({status:`ready`,data:e.data.meshData,measurements:e.data.measurements}):n({status:`error`,error:e.data.error}))});let a=`/__model/${t.file.split(`/`).map(encodeURIComponent).join(`/`)}?dir=${encodeURIComponent(t.dir)}`;return fetch(a).then(e=>{if(!e.ok)throw Error(`fetch ${t.file}: ${e.status}`);return e.arrayBuffer()}).then(n=>{let i={type:`load`,bytes:n,ext:Yb(t.file),inspect:e};r.postMessage(i,[n])}).catch(e=>{i||n({status:`error`,error:e instanceof Error?e.message:String(e)})}),()=>{i=!0,r.terminate()}},[e]),t}var Zb=[`iso`,`front`,`top`,`right`],Qb=new Set;function $b(e){return Zb.includes(e)}function ex(e){return Qb.add(e),()=>Qb.delete(e)}function tx(e){for(let t of Qb)t(e)}function nx(){globalThis.__ready=!0}function rx(){let e=globalThis;e.__ready=!1,e.__renderView=e=>{$b(e)&&tx({view:e})},e.__setScene=e=>{e&&$b(e.view)&&tx(e)}}function ix({marks:e}){return(0,Q.jsx)(Q.Fragment,{children:e.map((e,t)=>(0,Q.jsx)(hy,{position:[e.pos[0],e.pos[1],e.pos[2]],center:!0,children:(0,Q.jsx)(`div`,{style:{background:`#ffcc00`,color:`#000`,font:`700 13px monospace`,padding:`1px 5px`,borderRadius:4,border:`1px solid #000`,whiteSpace:`nowrap`,pointerEvents:`none`},children:e.label})},`${e.label}-${t}`))})}var ax=new URLSearchParams(window.location.search),ox=ax.get(`ui`)!==`0`,sx=ax.get(`dims`)===`1`;function cx(){let e=document.querySelector(`canvas`);if(!e)return;let t=e.toDataURL(`image/png`),n=document.createElement(`a`);n.href=t,n.download=`brepjs-view.png`,n.click()}function lx(){let e=Xb({inspect:ox}),[t,n]=(0,v.useState)(`iso`),[r,i]=(0,v.useState)(`solid`),[a,o]=(0,v.useState)(!0),[s,c]=(0,v.useState)(!0),[l,u]=(0,v.useState)(!1),[d,f]=(0,v.useState)(`perspective`),[p,m]=(0,v.useState)(0),[h,g]=(0,v.useState)(null),[_,y]=(0,v.useState)(null),[b,x]=(0,v.useState)(!1),[S,C]=(0,v.useState)(`x`),[w,T]=(0,v.useState)(0),[E,D]=(0,v.useState)(!1),[O,k]=(0,v.useState)([]),A=(0,v.useCallback)(()=>{m(e=>e+1)},[]),ee=(0,v.useCallback)(e=>{g(e)},[]),j=(0,v.useCallback)(e=>{y(e?e.faceId:null)},[]),M=(0,v.useMemo)(()=>e.status===`ready`?My(e.data):null,[e]);(0,v.useEffect)(()=>ex(e=>{if(n(e.view),i(e.viewMode??`solid`),e.section&&M){let t=e.section.axis===`x`?0:e.section.axis===`y`?1:2;C(e.section.axis),T(M.min[t]+e.section.frac*(M.max[t]-M.min[t])),x(!0)}else x(!1);k(e.marks??[])}),[M]);let te=S===`x`?0:S===`y`?1:2,N=M?M.min[te]:0,P=M?M.max[te]:1,F=(0,v.useCallback)(e=>{if(!M)return 0;let t=e===`x`?0:e===`y`?1:2;return(M.min[t]+M.max[t])/2},[M]),ne=(0,v.useCallback)(()=>{x(e=>(e||T(F(S)),!e))},[F,S]),re=(0,v.useCallback)(e=>{C(e),T(F(e))},[F]),ie=(0,v.useMemo)(()=>b&&M?[Py(S,w,E)]:void 0,[b,M,S,w,E]);return e.status===`error`?(0,Q.jsxs)(`div`,{style:{color:`#e88`,padding:16,fontFamily:`monospace`},children:[`error: `,e.error]}):e.status===`ready`?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(lb,{data:e.data,view:t,fitSignal:p,autoRotate:l,gridVisible:s,projection:d,onFirstFrame:nx,children:[(0,Q.jsx)(zy,{data:e.data,viewMode:r,...ie?{clippingPlanes:ie}:{},...ox?{onFacePick:ee,onFaceHover:j}:{}}),a&&r!==`wireframe`&&e.data.edges.length>0&&(0,Q.jsx)(Vy,{edges:e.data.edges,...ie?{clippingPlanes:ie}:{}}),ox&&(0,Q.jsx)(Yy,{data:e.data,selectedFaceIds:h?[h.faceId]:[],hoverFaceId:_}),O.length>0&&(0,Q.jsx)(ix,{marks:O})]}),ox&&(0,Q.jsx)(Mb,{face:h,onClear:()=>{g(null)}}),ox&&(0,Q.jsx)(Hb,{enabled:b,onToggle:ne,axis:S,onAxisChange:re,position:w,min:N,max:P,onPositionChange:T,flip:E,onToggleFlip:()=>{D(e=>!e)}}),ox&&(0,Q.jsx)(Sb,{dims:Ny(e.data),volume:e.measurements.volume,area:e.measurements.area,triangles:e.data.index.length/3,valid:e.measurements.valid}),!ox&&sx&&(0,Q.jsx)(Sb,{dims:Ny(e.data)}),ox&&(0,Q.jsx)(pb,{viewMode:r,onViewModeChange:i,showEdges:a,onToggleEdges:()=>{o(e=>!e)},showGrid:s,onToggleGrid:()=>{c(e=>!e)},autoRotate:l,onToggleAutoRotate:()=>{u(e=>!e)},projection:d,onToggleProjection:()=>{f(e=>e===`perspective`?`orthographic`:`perspective`)},activeView:t,onView:n,onFit:A,onScreenshot:cx})]}):(0,Q.jsx)(`div`,{style:{color:`#9aa`,padding:16,fontFamily:`monospace`},children:`loading model…`})}rx();var ux=document.getElementById(`root`);ux&&(0,y.createRoot)(ux).render((0,Q.jsx)(v.StrictMode,{children:(0,Q.jsx)(lx,{})}));
@@ -1 +1 @@
1
- function e(e,t,n={}){let r={position:e.vertices,normal:e.normals,index:e.triangles,edges:t,faceGroups:e.faceGroups.map(e=>({start:e.start,count:e.count,faceId:e.faceId}))};return n.color&&(r.color=n.color),r}function t(e,t){let r={valid:n(()=>e.isValid(t))??!1},i=n(()=>e.measureVolume(t));i&&e.isOk(i)&&typeof i.value==`number`&&i.value>0&&(r.volume=i.value);let a=n(()=>e.measureArea(t));return a&&e.isOk(a)&&typeof a.value==`number`&&a.value>0&&(r.area=a.value),r}function n(e){try{return e()}catch{return}}function r(e,t){switch(t.replace(/^\./,``).toLowerCase()){case`step`:case`stp`:return e.importSTEP;case`stl`:return e.importSTL;case`iges`:case`igs`:return e.importIGES;case`3mf`:return e.importThreeMF;case`glb`:case`gltf`:return e.importGLB;case`obj`:return e.importOBJ;default:throw Error(`unsupported file extension: ${t}`)}}function i(e,t){let n;try{n=e.getFaces(t)}catch(e){return console.warn(`[brepjs-cad] getFaces threw; faces unselectable`,e),[]}let r=[];for(let t of n)try{let n=e.getSurfaceType(t),i=e.isOk(n)&&n.value?n.value:`OTHER_SURFACE`,a=e.measureArea(t),o=e.isOk(a)&&typeof a.value==`number`?a.value:NaN;r.push({faceId:e.getHashCode(t),surfaceType:i,area:o,normal:e.normalAt(t)})}catch(e){console.warn(`[brepjs-cad] face metadata threw; skipping face`,e)}return r}async function a(n,a,o,s=!1){let c=await r(n,o)(a);if(!n.isOk(c)){let e=c.error;throw Error(`import failed: ${typeof e==`string`?e:JSON.stringify(e)}`)}let l=c.value,u=e(n.mesh(l),n.meshEdges(l).lines);return s&&(u.faceInfos=i(n,l)),{meshData:u,measurements:t(n,l)}}function o(e,t){t?self.postMessage(e,t):self.postMessage(e)}let s=null;function c(){return s||=l().catch(e=>{throw s=null,e}),s}async function l(){let e=new URL(`./`,self.location.origin).href,t=await fetch(`${e}wasm/occt-wasm.js`);if(!t.ok)throw Error(`failed to load occt-wasm.js: ${t.status}`);let n=URL.createObjectURL(new Blob([await t.text()],{type:`application/javascript`})),r=await import(n);URL.revokeObjectURL(n);let i=await r.default({locateFile:t=>t.endsWith(`.wasm`)?`${e}wasm/occt-wasm.wasm`:t}),a=await import(`./brepjs-D4FXZDQp.js`),o=new i.OcctKernel;return a.registerKernel(`occt-wasm`,new a.OcctWasmAdapter(i,o)),a}function u(e){return[e.position.buffer,e.normal.buffer,e.index.buffer,e.edges.buffer]}async function d(e){try{let{meshData:t,measurements:n}=await a(await c(),new Blob([e.bytes]),e.ext,e.inspect??!1);o({type:`loaded`,meshData:t,measurements:n},u(t))}catch(e){o({type:`error`,error:e instanceof Error?e.message:String(e)})}}self.addEventListener(`message`,e=>{e.data.type===`load`&&d(e.data)});
1
+ function e(e,t,n={}){let r={position:e.vertices,normal:e.normals,index:e.triangles,edges:t,faceGroups:e.faceGroups.map(e=>({start:e.start,count:e.count,faceId:e.faceId}))};return n.color&&(r.color=n.color),r}function t(e,t){let r={valid:n(()=>e.isValid(t))??!1},i=n(()=>e.measureVolume(t));i&&e.isOk(i)&&typeof i.value==`number`&&i.value>0&&(r.volume=i.value);let a=n(()=>e.measureArea(t));return a&&e.isOk(a)&&typeof a.value==`number`&&a.value>0&&(r.area=a.value),r}function n(e){try{return e()}catch{return}}function r(e,t){switch(t.replace(/^\./,``).toLowerCase()){case`step`:case`stp`:return e.importSTEP;case`stl`:return e.importSTL;case`iges`:case`igs`:return e.importIGES;case`3mf`:return e.importThreeMF;case`glb`:case`gltf`:return e.importGLB;case`obj`:return e.importOBJ;default:throw Error(`unsupported file extension: ${t}`)}}function i(e,t){let n;try{n=e.getFaces(t)}catch(e){return console.warn(`[brepjs-cad] getFaces threw; faces unselectable`,e),[]}let r=[];for(let t of n)try{let n=e.getSurfaceType(t),i=e.isOk(n)&&n.value?n.value:`OTHER_SURFACE`,a=e.measureArea(t),o=e.isOk(a)&&typeof a.value==`number`?a.value:NaN;r.push({faceId:e.getHashCode(t),surfaceType:i,area:o,normal:e.normalAt(t)})}catch(e){console.warn(`[brepjs-cad] face metadata threw; skipping face`,e)}return r}async function a(n,a,o,s=!1){let c=await r(n,o)(a);if(!n.isOk(c)){let e=c.error;throw Error(`import failed: ${typeof e==`string`?e:JSON.stringify(e)}`)}let l=c.value,u=e(n.mesh(l),n.meshEdges(l).lines);return s&&(u.faceInfos=i(n,l)),{meshData:u,measurements:t(n,l)}}function o(e,t){t?self.postMessage(e,t):self.postMessage(e)}let s=null;function c(){return s||=l().catch(e=>{throw s=null,e}),s}async function l(){let e=new URL(`./`,self.location.origin).href,t=await fetch(`${e}wasm/occt-wasm.js`);if(!t.ok)throw Error(`failed to load occt-wasm.js: ${t.status}`);let n=URL.createObjectURL(new Blob([await t.text()],{type:`application/javascript`})),r=await import(n);URL.revokeObjectURL(n);let i=await r.default({locateFile:t=>t.endsWith(`.wasm`)?`${e}wasm/occt-wasm.wasm`:t}),a=await import(`./brepjs-1Enzw6vj.js`),o=new i.OcctKernel;return a.registerKernel(`occt-wasm`,new a.OcctWasmAdapter(i,o)),a}function u(e){return[e.position.buffer,e.normal.buffer,e.index.buffer,e.edges.buffer]}async function d(e){try{let{meshData:t,measurements:n}=await a(await c(),new Blob([e.bytes]),e.ext,e.inspect??!1);o({type:`loaded`,meshData:t,measurements:n},u(t))}catch(e){o({type:`error`,error:e instanceof Error?e.message:String(e)})}}self.addEventListener(`message`,e=>{e.data.type===`load`&&d(e.data)});
@@ -14,7 +14,7 @@
14
14
  background: #1a1d21;
15
15
  }
16
16
  </style>
17
- <script type="module" crossorigin src="./assets/index-DNI62iOP.js"></script>
17
+ <script type="module" crossorigin src="./assets/index-D00Hjy2q.js"></script>
18
18
  </head>
19
19
  <body>
20
20
  <div id="root"></div>