brepjs-cad 0.31.1 → 0.32.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 +38 -0
- package/package.json +1 -1
- package/viewer/dist/assets/{brepjs-QgFN5hPv.js → brepjs-Rsj9-_9m.js} +1 -1
- package/viewer/dist/assets/{index-ChbJikMA.js → index-D2DWnBw6.js} +1 -1
- package/viewer/dist/assets/{kernelWorker-B-IJOO73.js → kernelWorker-C8sXP0K0.js} +1 -1
- package/viewer/dist/index.html +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,43 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.32.0](https://github.com/andymai/brepjs/compare/brepjs-cad-v0.31.2...brepjs-cad-v0.32.0) (2026-06-24)
|
|
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:** bore detector misses full-cylinder through-holes ([#1551](https://github.com/andymai/brepjs/issues/1551)) ([#1586](https://github.com/andymai/brepjs/issues/1586)) ([b6d61eb](https://github.com/andymai/brepjs/commit/b6d61eb6d88e2e4a3aa1c55b78dc2e76315ebc02))
|
|
25
|
+
* **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))
|
|
26
|
+
* **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))
|
|
27
|
+
* **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))
|
|
28
|
+
* **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))
|
|
29
|
+
* **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))
|
|
30
|
+
* **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))
|
|
31
|
+
* **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))
|
|
32
|
+
* **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))
|
|
33
|
+
* **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))
|
|
34
|
+
* **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))
|
|
35
|
+
* **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))
|
|
36
|
+
* **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))
|
|
37
|
+
* **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))
|
|
38
|
+
* **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))
|
|
39
|
+
* **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))
|
|
40
|
+
|
|
3
41
|
## [0.31.1](https://github.com/andymai/brepjs/compare/brepjs-cad-v0.31.0...brepjs-cad-v0.31.1) (2026-06-23)
|
|
4
42
|
|
|
5
43
|
|
package/package.json
CHANGED
|
@@ -57,4 +57,4 @@ ${u.join(`
|
|
|
57
57
|
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
|
|
58
58
|
<Relationship Target="/3D/3dmodel.model" Id="rel0" Type="http://schemas.microsoft.com/3dmanufacturing/2013/01/3dmodel" />
|
|
59
59
|
</Relationships>`),c(`3D/3dmodel.model`,s)])}function Wq(e){let t=[],n=/([MmLlHhVvCcSsQqTtAaZz])([^MmLlHhVvCcSsQqTtAaZz]*)/g,r;for(;(r=n.exec(e))!==null;){let e=r[1]??``,n=(r[2]??``).trim(),i=[];if(n){let e=/[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/g,t;for(;(t=e.exec(n))!==null;)i.push(parseFloat(t[0]))}t.push({command:e,args:i})}return t}function Gq(e){return[e[0],-e[1]]}function Kq(e,t,n,r){let i=0;for(;i<e.length;){let a=(n?t.cx:0)+(e[i]??0),o=(n?t.cy:0)+(e[i+1]??0);i===0?(t.sx=a,t.sy=o):r.push(pF(Gq([t.cx,t.cy]),Gq([a,o]))),t.cx=a,t.cy=o,i+=2}}function qq(e,t,n,r){let i=0;for(;i<e.length;){let a=(n?t.cx:0)+(e[i]??0),o=(n?t.cy:0)+(e[i+1]??0);r.push(pF(Gq([t.cx,t.cy]),Gq([a,o]))),t.cx=a,t.cy=o,i+=2}}function Jq(e,t,n,r){for(let i of e){let e=n?t.cx+i:i;r.push(pF(Gq([t.cx,t.cy]),Gq([e,t.cy]))),t.cx=e}}function Yq(e,t,n,r){for(let i of e){let e=n?t.cy+i:i;r.push(pF(Gq([t.cx,t.cy]),Gq([t.cx,e]))),t.cy=e}}function Xq(e,t,n,r){let i=0;for(;i+5<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=a+(e[i]??0),c=o+(e[i+1]??0),l=a+(e[i+2]??0),u=o+(e[i+3]??0),d=a+(e[i+4]??0),f=o+(e[i+5]??0);r.push(yF(Gq([t.cx,t.cy]),[Gq([s,c]),Gq([l,u])],Gq([d,f]))),t.prevControlX=l,t.prevControlY=u,t.cx=d,t.cy=f,i+=6}}function Zq(e,t,n,r){let i=0;for(;i+3<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=t.lastCmd,c=s===`C`||s===`S`?2*t.cx-t.prevControlX:t.cx,l=s===`C`||s===`S`?2*t.cy-t.prevControlY:t.cy,u=a+(e[i]??0),d=o+(e[i+1]??0),f=a+(e[i+2]??0),p=o+(e[i+3]??0);r.push(yF(Gq([t.cx,t.cy]),[Gq([c,l]),Gq([u,d])],Gq([f,p]))),t.prevControlX=u,t.prevControlY=d,t.cx=f,t.cy=p,t.lastCmd=`S`,i+=4}}function Qq(e,t,n,r){let i=0;for(;i+3<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=a+(e[i]??0),c=o+(e[i+1]??0),l=a+(e[i+2]??0),u=o+(e[i+3]??0);r.push(yF(Gq([t.cx,t.cy]),[Gq([s,c])],Gq([l,u]))),t.prevControlX=s,t.prevControlY=c,t.cx=l,t.cy=u,i+=4}}function $q(e,t,n,r){let i=0;for(;i+1<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=t.lastCmd,c=s===`Q`||s===`T`?2*t.cx-t.prevControlX:t.cx,l=s===`Q`||s===`T`?2*t.cy-t.prevControlY:t.cy,u=a+(e[i]??0),d=o+(e[i+1]??0);r.push(yF(Gq([t.cx,t.cy]),[Gq([c,l])],Gq([u,d]))),t.prevControlX=c,t.prevControlY=l,t.cx=u,t.cy=d,t.lastCmd=`T`,i+=2}}function eJ(e,t,n,r,i){let a=Math.max(n,r),o=i?1:-1,s=t+2*o*a,c=[e-o*a,t+o*a],l=[e+o*a,t+o*a];try{return[mF(Gq([e,t]),Gq(c),Gq([e,s])),mF(Gq([e,s]),Gq(l),Gq([e,t]))]}catch{return[]}}function tJ(e,t,n,r,i,a,o,s){let c=.5,l=e+c*(n-e),u=t+c*(r-t),d=n-e,f=r-t,p=Math.sqrt(d*d+f*f),m=Math.max(i,a),h=p/2,g=h<m?m-Math.sqrt(m*m-h*h):m,_=(o===s?-1:1)*(s?1:-1),v=-f/p,y=d/p,b=l+_*g*v,x=u+_*g*y;try{return[mF(Gq([e,t]),Gq([b,x]),Gq([n,r]))]}catch{return[pF(Gq([e,t]),Gq([n,r]))]}}function nJ(e,t,n,r){let i=0;for(;i+6<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=Math.abs(e[i]??0),c=Math.abs(e[i+1]??0),l=(e[i+3]??0)!==0,u=(e[i+4]??0)!==0,d=a+(e[i+5]??0),f=o+(e[i+6]??0);if(s===0||c===0)r.push(pF(Gq([t.cx,t.cy]),Gq([d,f])));else{let e=d-t.cx,n=f-t.cy;Math.sqrt(e*e+n*n)<1e-10?r.push(...eJ(t.cx,t.cy,s,c,u)):r.push(...tJ(t.cx,t.cy,d,f,s,c,l,u))}t.cx=d,t.cy=f,i+=7}}function rJ(e,t){(Math.abs(e.cx-e.sx)>1e-10||Math.abs(e.cy-e.sy)>1e-10)&&t.push(pF(Gq([e.cx,e.cy]),Gq([e.sx,e.sy]))),e.cx=e.sx,e.cy=e.sy}function iJ(e){let t=Wq(e),n=[],r={cx:0,cy:0,sx:0,sy:0,prevControlX:0,prevControlY:0,lastCmd:``};for(let{command:e,args:i}of t){let t=e===e.toLowerCase(),a=e.toUpperCase();switch(a){case`M`:Kq(i,r,t,n);break;case`L`:qq(i,r,t,n);break;case`H`:Jq(i,r,t,n);break;case`V`:Yq(i,r,t,n);break;case`C`:Xq(i,r,t,n);break;case`S`:Zq(i,r,t,n);break;case`Q`:Qq(i,r,t,n);break;case`T`:$q(i,r,t,n);break;case`A`:nJ(i,r,t,n);break;case`Z`:rJ(r,n);break}a!==`S`&&a!==`T`&&(r.lastCmd=a)}return n}function aJ(e){try{let t=iJ(e);return t.length===0?k(ho(`SVG_EMPTY_PATH`,`SVG path produced no curves`)):O(new LF(t))}catch(e){return k(ho(`SVG_PARSE_FAILED`,`Failed to parse SVG path: ${e instanceof Error?e.message:String(e)}`))}}function oJ(e){try{let t=/\bd\s*=\s*(?:"([^"]*)"|'([^']*)')/,n=[],r=e.toLowerCase(),i=0;for(;i<r.length;){let a=r.indexOf(`<path `,i);if(a===-1)break;let o=e.indexOf(`>`,a);if(o===-1)break;let s=e.slice(a,o+1);i=o+1;let c=t.exec(s),l=c?.[1]??c?.[2];if(!l)continue;let u=aJ(l);u.ok&&n.push(u.value)}return n.length===0?k(ho(`SVG_NO_PATHS`,`No <path> elements found in SVG`)):O(n)}catch(e){return k(ho(`SVG_IMPORT_FAILED`,`Failed to import SVG: ${e instanceof Error?e.message:String(e)}`))}}function sJ(e,t){try{let n=U(),r=e.map(e=>({shape:e.shape.wrapped,name:e.name,color:e.color?[...e.color]:void 0}));return O(n.exportSTEPConfigured(r,t))}catch(e){return k(ho(N.STEP_EXPORT_CONFIGURED_FAILED,`Configured STEP export failed`,e))}}async function cJ(e){try{let t=await e.arrayBuffer(),n=U().importSTEP(t);return n.length===0?k(ho(`STEP_IMPORT_FAILED`,`STEP file contains no valid geometry`)):O(W(n[0]))}catch(e){return k(ho(`STEP_IMPORT_FAILED`,`Failed to load STEP file`,e))}}async function lJ(e){try{let t=await e.arrayBuffer(),n=U().importSTL(t);return n.IsNull()?k(ho(`STL_IMPORT_FAILED`,`Failed to create solid from STL mesh`)):O(W(n))}catch(e){return k(ho(`STL_IMPORT_FAILED`,`Failed to load STL file`,e))}}async function uJ(e){try{let t=await e.arrayBuffer(),n=U().importIGES(t);return n.length===0?k(ho(`IGES_IMPORT_FAILED`,`IGES file contains no valid geometry`)):O(W(n[0]))}catch(e){return k(ho(`IGES_IMPORT_FAILED`,`Failed to load IGES file`,e))}}function dJ(e,t,n={}){let r=hG(e,t);return new uG((typeof n.plane==`string`||n.plane===void 0?r.sketchOnPlane(n.plane,n.origin):r.sketchOnPlane(n.plane)).map(e=>Array.isArray(e)?new qW(e.map(JW)):JW(e)))}function fJ(e,t){let n=t?.fontSize??1,r=pG(t?.fontFamily);if(!r)return k(F(N.NO_FONT_LOADED,`No font loaded. Call loadFont() first.`,void 0,void 0,`Load a font with loadFont() before calling textMetrics()`));let i=r.getAdvanceWidth(e,n),a=n/r.unitsPerEm,o=r.ascender*a,s=r.descender*a;return O({width:i,height:o-s,ascender:o,descender:s})}function pJ(e){let t=e?.fontSize??1,n=pG(e?.fontFamily);if(!n)return k(F(N.NO_FONT_LOADED,`No font loaded. Call loadFont() first.`,void 0,void 0,`Load a font with loadFont() before calling fontMetrics()`));let r=t/n.unitsPerEm,i=n.ascender*r,a=n.descender*r,o=(n.tables?.os2?.sTypoLineGap??0)*r;return O({ascender:i,descender:a,unitsPerEm:n.unitsPerEm,lineHeight:i-a+o})}function mJ(e,t){let n=0,r=WD(t);if(e.surfaceType!==void 0)if(r===e.surfaceType)n+=1;else return-1/0;if(e.normal!==void 0){let r=ZD(t),i=e.normal[0]*r[0]+e.normal[1]*r[1]+e.normal[2]*r[2];if(i<.707)return-1/0;n+=i}if(e.centroid!==void 0){let r=QD(t),i=e.centroid[0]-r[0],a=e.centroid[1]-r[1],o=e.centroid[2]-r[2],s=i*i+a*a+o*o;if(s>100)return-1/0;n-=s/100}if(e.area!==void 0&&e.area>0){let r=gP(t);if(r.ok&&r.value>0){let t=Math.abs(Math.log(e.area/r.value));t>1&&(n-=t)}}return n}function hJ(e){let t=WD(e),n=ZD(e),r=QD(e),i=gP(e);return{entityType:`face`,surfaceType:t,normal:n,centroid:r,area:i.ok?i.value:void 0}}var gJ=.9;function _J(e){if(e[2]>gJ)return`box:top`;if(e[2]<-.9)return`box:bottom`;if(e[1]>gJ)return`box:back`;if(e[1]<-.9)return`box:front`;if(e[0]>gJ)return`box:right`;if(e[0]<-.9)return`box:left`}function vJ(e,t){let n=LE(e),r=new Map;if(t===`box`){for(let e of n){let t=_J(ZD(e));t!==void 0&&!r.has(t)&&r.set(t,qO(e))}return r}let i=0;for(let e of n)r.set(`${t}:face_${i}`,qO(e)),i++;return r}function yJ(e,t,n){return{origin:e,role:t,hint:hJ(n)}}function bJ(e,n,r){let i=e.get(n);if(!i)return e;let a=new Map;for(let[e,n]of i){if(r.deleted.has(n))continue;let i=r.modified.get(n);i&&i.length>0?a.set(e,t(i,0)):a.set(e,n)}let o=new Map;for(let[t,r]of e)t===n?o.set(t,a):o.set(t,r);return o}var xJ=.1,SJ=.5;function CJ(e,t,n,r){let i=LE(n),a=r??mJ,o=t.get(e.origin)?.get(e.role);if(o!==void 0){for(let e of i)if(qO(e)===o)return{face:e,confidence:`exact`};return{ref:e,reason:`deleted`}}let s=-1/0,c,l=-1/0,u=[];for(let t of i){let n=a(e.hint,t);n>SJ&&u.push([t,n]),n>s?(l=s,s=n,c=t):n>l&&(l=n)}return c!==void 0&&s>SJ?s-l<xJ&&u.length>1?{ref:e,reason:`ambiguous`,candidates:u.filter(([,e])=>e>=s-xJ).map(([e])=>e)}:{face:c,confidence:`geometric-fallback`}:{ref:e,reason:`not-found`}}function wJ(e){return e.type===`init`}function TJ(e){return e.type===`operation`}function EJ(e){return e.type===`dispose`}function DJ(e){return e.success}function OJ(e){return!e.success}function kJ(){return{pending:new Map}}function AJ(e,t){let n=new Map(e.pending);return n.set(t.id,t),{pending:n}}function jJ(e,t){let n=e.pending.get(t);if(!n)return{queue:e,task:void 0};let r=new Map(e.pending);return r.delete(t),{queue:{pending:r},task:n}}function MJ(e){return e.pending.size}function NJ(e){return e.pending.size===0}function PJ(e,t){for(let n of e.pending.values())n.reject(t);return{pending:new Map}}function FJ(e,t){let n=t.data,r=e.get(n.id);if(r)if(e.delete(n.id),DJ(n)){let e={};n.resultBrep!==void 0&&(e.resultBrep=n.resultBrep),n.resultData!==void 0&&(e.resultData=n.resultData),r.resolve(e)}else r.reject(Error(n.error))}function IJ(e){let{worker:t,wasmUrl:n}=e,r=new Map,i=!1;function a(){return crypto.randomUUID()}function o(e){FJ(r,e)}t.addEventListener(`message`,o);function s(e){return i?Promise.reject(Error(`WorkerClient has been disposed`)):new Promise((n,i)=>{r.set(e.id,{resolve:n,reject:i}),t.postMessage(e)})}return{async init(){await s({id:a(),type:`init`,...n===void 0?{}:{wasmUrl:n}})},async execute(e,t,n){return s({id:a(),type:`operation`,operation:e,shapesBrep:t,parameters:n})},dispose(){i=!0;for(let e of r.values())e.reject(Error(`WorkerClient disposed`));r.clear(),t.removeEventListener(`message`,o);let e={id:a(),type:`dispose`};t.postMessage(e)}}}function LJ(){return{operations:new Map}}function RJ(e,t,n){let r=new Map(e.operations);return r.set(t,n),{operations:r}}function zJ(e,t){let n=globalThis;n.onmessage=async r=>{let i=r.data;if(wJ(i)){try{await t(i.wasmUrl);let e={id:i.id,success:!0};n.postMessage(e)}catch(e){let t={id:i.id,success:!1,error:e instanceof Error?e.message:String(e)};n.postMessage(t)}return}if(TJ(i)){let t=e.operations.get(i.operation);if(!t){let e={id:i.id,success:!1,error:`Unknown operation: ${i.operation}`};n.postMessage(e);return}try{let e=t(i.shapesBrep,i.parameters),r={id:i.id,success:!0,...e.resultBrep===void 0?{}:{resultBrep:e.resultBrep},...e.resultData===void 0?{}:{resultData:e.resultData}};n.postMessage(r)}catch(e){let t={id:i.id,success:!1,error:e instanceof Error?e.message:String(e)};n.postMessage(t)}return}if(EJ(i)){let e={id:i.id,success:!0};n.postMessage(e),n.close?.()}}}var BJ=Object.defineProperty,VJ=(e,t)=>{let n={};for(var r in e)BJ(n,r,{get:e[r],enumerable:!0});return t||BJ(n,Symbol.toStringTag,{value:`Module`}),n},HJ=1,UJ=2;function WJ(e,t){t===`commonFace`&&e.SetGlue(HJ),t===`sameFace`&&e.SetGlue(UJ)}function GJ(e){return typeof e==`number`}function KJ(e){if(typeof e==`number`)return!0;if(typeof e==`object`&&e){let t=e;return`distances`in t&&Array.isArray(t.distances)&&`selectedFace`in t||`distance`in t&&`angle`in t&&`selectedFace`in t}return!1}function qJ(e){return typeof e==`number`?!0:Array.isArray(e)&&e.length===2?e.every(GJ):!1}function JJ(e,t){let n=n=>{let r=e.findAll(n);if(r.length===0)return[];let i=0,a=gD(tD(Nk(r)),t);for(let e=1;e<r.length;e++){let n=gD(tD(Mk(r,e)),t);n<a&&(a=n,i=e)}return[Mk(r,i)]},r=e=>{let t=n(e);return t.length===0?k(go(`FINDER_NOT_UNIQUE`,`Finder expected a unique match but found 0 element(s)`)):O(Nk(t))};return{...e,findAll:n,findUnique:r}}function YJ(e){return VP(`vertex`,e,YJ,(t,n)=>({nearestTo:t=>JJ(YJ(e),t),atPosition:(e,t=1e-4)=>n(n=>gD(tD(n),e)<t),withinBox:(e,t)=>n(n=>{let r=tD(n);return r[0]>=e[0]-1e-6&&r[0]<=t[0]+1e-6&&r[1]>=e[1]-1e-6&&r[1]<=t[1]+1e-6&&r[2]>=e[2]-1e-6&&r[2]<=t[2]+1e-6}),atDistance:(e,t=[0,0,0],r=1e-4)=>n(n=>{let i=tD(n);return Math.abs(gD(i,t)-e)<r})}))}function XJ(){return YJ([])}var ZJ=new Map,QJ=null,$J=null;function eY(e,t){ZJ.set(e,t),QJ||=e,e===QJ&&($J=t)}function tY(e){if(!e&&$J)return $J;let t=e??QJ;if(!t)throw Error(`brepjs voxel engine not initialized. Call initVoxel() (or registerVoxel()) before using voxel operations.`);let n=ZJ.get(t);if(!n)throw Error(`brepjs: voxel engine '${t}' is not registered.`);return n}function nY(){return QJ}function rY(e,t=`voxel`){eY(t,e),QJ=t,$J=e}function iY(e){if(e.vertices.length%3!=0)return F(`VOXEL_INVALID_MESH`,`mesh.vertices length must be a multiple of 3 (flat xyz).`);if(e.triangles.length%3!=0)return F(`VOXEL_INVALID_MESH`,`mesh.triangles length must be a multiple of 3.`);let t=e.vertices.length/3;for(let n=0;n<e.triangles.length;n++){let r=e.triangles[n];if(r===void 0||r>=t)return F(`VOXEL_INVALID_TRIANGLE_INDEX`,`triangle index ${r} at position ${n} is out of range for ${t} vertices.`)}return null}function aY(e,t){return iY(e)||(t.length%3==0?null:F(`VOXEL_INVALID_QUERIES`,`queries length must be a multiple of 3 (flat xyz).`))}function oY(e){try{return O(tY(e))}catch(e){return k(po(`VOXEL_NOT_INITIALIZED`,e instanceof Error?e.message:`voxel engine not initialized`,e))}}function sY(e,t,n){let r=aY(e,t);if(r)return k(r);let i=oY(n);return A(i)?i:O(i.value.winding_numbers(e.vertices,e.triangles,t))}function cY(e,t,n){let r=aY(e,t);if(r)return k(r);let i=oY(n);if(A(i))return i;let a=i.value.points_inside(e.vertices,e.triangles,t);return O(Array.from(a,e=>e===1))}var lY=48,uY=2;function dY(e,t,n){let r=iY(e);if(r)return k(r);if(e.vertices.length===0||e.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`repairMesh requires a non-empty triangle mesh.`));let i=t?.resolution??lY,a=t?.padding??uY;if(!Number.isInteger(i)||i<1)return k(F(`VOXEL_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`));if(!Number.isInteger(a)||a<1)return k(F(`VOXEL_INVALID_PADDING`,`padding must be an integer >= 1.`));let o=oY(n);if(A(o))return o;try{try{var s=xT();let t=s.u(o.value.repair_mesh(e.vertices,e.triangles,i,a)),n=t.positions.length/3;return O({vertices:t.positions,normals:t.normals,triangles:t.indices,uvs:new Float32Array(n*2),faceGroups:[{start:0,count:t.indices.length/3,faceHash:0}]})}catch(e){s.e=e}finally{s.d()}}catch(e){return k(mo(`VOXEL_REPAIR_FAILED`,e instanceof Error?e.message:`voxel repair failed (grid too large?).`,e))}}var fY=.001;function pY(e,t=fY){try{let n=Ck(e,{tolerance:t});return n.vertices.length===0||n.triangles.length===0?k(mo(`VOXEL_SHAPE_MESH_EMPTY`,`shape tessellated to an empty triangle mesh.`)):O({vertices:n.vertices,triangles:n.triangles})}catch(e){return k(mo(`VOXEL_SHAPE_MESH_FAILED`,e instanceof Error?e.message:`failed to mesh shape for voxel op.`,e))}}var mY=48,hY=2,gY={union:0,intersection:1,difference:2};function _Y(e){let t=e?.resolution??mY,n=e?.padding??hY;return!Number.isInteger(t)||t<1?k(F(`VOXEL_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(n)||n<1?k(F(`VOXEL_INVALID_PADDING`,`padding must be an integer >= 1.`)):O({resolution:t,padding:n})}function vY(e){if(e.positions.length===0||e.indices.length===0)return k(mo(`VOXEL_DEGENERATE_RESULT`,`the voxel operation produced an empty mesh (over-shrunk offset or disjoint operands?).`));let t=e.positions.length/3;return O({vertices:e.positions,normals:e.normals,triangles:e.indices,uvs:new Float32Array(t*2),faceGroups:[{start:0,count:e.indices.length/3,faceHash:0}]})}function yY(e,t,n,r){let i=iY(e);if(i)return k(i);if(e.vertices.length===0||e.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`offsetMesh requires a non-empty triangle mesh.`));if(!Number.isFinite(t))return k(F(`VOXEL_INVALID_DISTANCE`,`distance must be a finite number.`));let a=_Y(n);if(A(a))return a;let o=oY(r);if(A(o))return o;try{try{var s=xT();return vY(s.u(o.value.offset_mesh(e.vertices,e.triangles,t,a.value.resolution,a.value.padding)))}catch(e){s.e=e}finally{s.d()}}catch(e){return k(mo(`VOXEL_OFFSET_FAILED`,e instanceof Error?e.message:`voxel offset failed (grid too large?).`,e))}}function bY(e,t,n,r){let i=iY(e);if(i)return k(i);if(e.vertices.length===0||e.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`shellMesh requires a non-empty triangle mesh.`));if(!Number.isFinite(t)||t<=0)return k(F(`VOXEL_INVALID_THICKNESS`,`thickness must be a finite number > 0.`));let a=_Y(n);if(A(a))return a;let o=oY(r);if(A(o))return o;try{try{var s=xT();return vY(s.u(o.value.shell_mesh(e.vertices,e.triangles,t,a.value.resolution,a.value.padding)))}catch(e){s.e=e}finally{s.d()}}catch(e){return k(mo(`VOXEL_SHELL_FAILED`,e instanceof Error?e.message:`voxel shell failed (grid too large?).`,e))}}function xY(e,t,n,r,i){let a=iY(e);if(a)return k(a);let o=iY(t);if(o)return k(o);if(e.vertices.length===0||e.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`voxelBoolean requires a non-empty mesh for operand A.`));if(t.vertices.length===0||t.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`voxelBoolean requires a non-empty mesh for operand B.`));let s=gY[n],c=_Y(r);if(A(c))return c;let l=oY(i);if(A(l))return l;try{try{var u=xT();return vY(u.u(l.value.voxel_boolean(e.vertices,e.triangles,t.vertices,t.triangles,s,c.value.resolution,c.value.padding)))}catch(e){u.e=e}finally{u.d()}}catch(e){return k(mo(`VOXEL_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel boolean failed (grid too large?).`,e))}}function SY(e,t,n,r){let i=pY(e);return A(i)?i:yY(i.value,t,n,r)}function CY(e,t,n,r){let i=pY(e);return A(i)?i:bY(i.value,t,n,r)}function wY(e,t,n,r,i){let a=pY(e);if(A(a))return a;let o=pY(t);return A(o)?o:xY(a.value,o.value,n,r,i)}var TY=48,EY=2,DY={union:0,intersection:1,difference:2};function OY(e){let t=e?.resolution??TY,n=e?.padding??EY;return!Number.isInteger(t)||t<1?k(F(`VOXEL_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(n)||n<1?k(F(`VOXEL_INVALID_PADDING`,`padding must be an integer >= 1.`)):O({resolution:t,padding:n})}function kY(e){try{var t=xT();let n=e.contour(),{positions:r,normals:i,indices:a}=t.u({value:n,[Symbol.dispose](){n.free()}}).value;if(r.length===0||a.length===0)return k(mo(`VOXEL_DEGENERATE_RESULT`,`the voxel field contoured to an empty mesh (over-shrunk offset or disjoint operands?).`));let o=r.length/3;return O({vertices:r,normals:i,triangles:a,uvs:new Float32Array(o*2),faceGroups:[{start:0,count:a.length/3,faceHash:0}]})}catch(e){t.e=e}finally{t.d()}}function AY(e){return{raw:e,delete(){e.free()}}}function jY(e){return MY(e)}function MY(e){let t=MT(AY(e)),n={get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()},boolean(e,t){return this.value.boolean(e.value,DY[t]),n},offset(e){return this.value.offset(e),n},shell(e){return this.value.shell(e),n},reinit(){return this.value.reinit(),n},contour(){let e=kY(this.value);if(A(e))throw Error(e.error.message);return e.value}};return n}function NY(e){return!e.disposed}function PY(){return k(F(`VOXEL_FIELD_DISPOSED`,`the voxel field handle has been disposed.`))}function FY(e,t,n){let r=iY(e);if(r)return k(r);if(e.vertices.length===0||e.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`voxelField requires a non-empty triangle mesh.`));let i=OY(t);if(A(i))return i;let a=oY(n);if(A(a))return a;try{return O(MY(new a.value.VoxelField(e.vertices,e.triangles,i.value.resolution,i.value.padding)))}catch(e){return k(mo(`VOXEL_FIELD_VOXELIZE_FAILED`,e instanceof Error?e.message:`voxel field voxelization failed (grid too large or non-dense?).`,e))}}function IY(e,t,n,r,i){let a=iY(e);if(a)return k(a);let o=iY(t);if(o)return k(o);if(e.vertices.length===0||e.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`voxelBooleanField requires a non-empty mesh for operand A.`));if(t.vertices.length===0||t.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`voxelBooleanField requires a non-empty mesh for operand B.`));let s=OY(r);if(A(s))return s;let c=oY(i);if(A(c))return c;try{return O(MY(c.value.VoxelField.boolean_of(e.vertices,e.triangles,t.vertices,t.triangles,DY[n],s.value.resolution,s.value.padding)))}catch(e){return k(mo(`VOXEL_FIELD_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel field boolean failed (grid too large or non-dense?).`,e))}}function LY(e,t,n){if(!NY(e)||!NY(t))return PY();try{return e.value.boolean(t.value,DY[n]),O(e)}catch(e){return k(mo(`VOXEL_FIELD_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel field boolean failed (dim mismatch?).`,e))}}function RY(e,t){if(!NY(e))return PY();if(!Number.isFinite(t))return k(F(`VOXEL_INVALID_DISTANCE`,`distance must be a finite number.`));try{return e.value.offset(t),O(e)}catch(e){return k(mo(`VOXEL_FIELD_OFFSET_FAILED`,e instanceof Error?e.message:`voxel field offset failed.`,e))}}function zY(e,t){if(!NY(e))return PY();if(!Number.isFinite(t)||t<=0)return k(F(`VOXEL_INVALID_THICKNESS`,`thickness must be a finite number > 0.`));try{return e.value.shell(t),O(e)}catch(e){return k(mo(`VOXEL_FIELD_SHELL_FAILED`,e instanceof Error?e.message:`voxel field shell failed.`,e))}}function BY(e){if(!NY(e))return PY();try{return e.value.reinit(),O(e)}catch(e){return k(mo(`VOXEL_FIELD_REINIT_FAILED`,e instanceof Error?e.message:`voxel field reinit failed.`,e))}}function VY(e){if(!NY(e))return PY();try{return kY(e.value)}catch(e){return k(mo(`VOXEL_FIELD_CONTOUR_FAILED`,e instanceof Error?e.message:`voxel field contour failed.`,e))}}function HY(e,t,n){let r=pY(e);return A(r)?r:FY(r.value,t,n)}function UY(e,t,n,r,i){let a=pY(e);if(A(a))return a;let o=pY(t);return A(o)?o:IY(a.value,o.value,n,r,i)}var WY=48,GY=2;function KY(e){try{return O(tY(e))}catch(e){return k(po(`VOXEL_NOT_INITIALIZED`,e instanceof Error?e.message:`voxel engine not initialized`,e))}}function qY(e){let t=e?.resolution??WY,n=e?.padding??GY;return!Number.isInteger(t)||t<1?k(F(`SDF_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(n)||n<1?k(F(`SDF_INVALID_PADDING`,`padding must be an integer >= 1.`)):O({resolution:t,padding:n})}function JY(e){return{raw:e,delete(){e.free()}}}var YY={offsetField(e){return XY(this.value.offset_field(e.value))},roundField(e){return XY(this.value.round_field(e.value))},shellField(e){return XY(this.value.shell_field(e.value))},smoothUnionField(e,t){return XY(this.value.smooth_union_field(e.value,t.value))}};function XY(e){let t=MT(JY(e));return{get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()},union(e){return XY(this.value.union(e.value))},intersection(e){return XY(this.value.intersection(e.value))},difference(e){return XY(this.value.difference(e.value))},smoothUnion(e,t){return XY(this.value.smooth_union(e.value,t))},smoothIntersection(e,t){return XY(this.value.smooth_intersection(e.value,t))},smoothDifference(e,t){return XY(this.value.smooth_difference(e.value,t))},offset(e){return XY(this.value.offset(e))},round(e){return XY(this.value.round(e))},shell(e){return XY(this.value.shell(e))},onion(e){return XY(this.value.onion(e))},...YY,translate(e,t,n){return XY(this.value.translate(e,t,n))},rotate(e,t,n,r){return XY(this.value.rotate(e,t,n,r))},scale(e){return XY(this.value.scale(e))},rasterize(e){return ZY(this.value,e)},rasterizeIn(e,t){return QY(this.value,e,t)}}}function ZY(e,t){let n=qY(t);if(A(n))return n;try{return O(jY(e.rasterize(n.value.resolution,n.value.padding)))}catch(e){return $Y(e)}}function QY(e,t,n){let r=qY(n);if(A(r))return r;let i=eX(t);if(i)return k(i);try{return O(jY(e.rasterize_in(t.min[0],t.min[1],t.min[2],t.max[0],t.max[1],t.max[2],r.value.resolution,r.value.padding)))}catch(e){return $Y(e)}}function $Y(e){return k(mo(`SDF_RASTERIZE_FAILED`,e instanceof Error?e.message:`SDF rasterization failed (grid too large?).`,e))}function eX(e){if(![...e.min,...e.max].every(e=>Number.isFinite(e)))return F(`SDF_INVALID_BOUNDS`,`bounds must be finite numbers.`);for(let t=0;t<3;t++)if(e.max[t]<=e.min[t])return F(`SDF_INVALID_BOUNDS`,`bounds max must exceed min on every axis.`);return null}function tX(e,t){let n=KY(t);if(A(n))return n;try{return O(XY(e(n.value)))}catch(e){return k(mo(`SDF_BUILD_FAILED`,e instanceof Error?e.message:`SDF primitive construction failed.`,e))}}function nX(e,t){return tX(t=>t.Sdf.sphere(e),t)}function rX(e,t,n,r){return tX(r=>r.Sdf.box_(e,t,n),r)}function iX(e,t,n,r,i){return tX(i=>i.Sdf.rounded_box(e,t,n,r),i)}function aX(e,t,n){return tX(n=>n.Sdf.cylinder(e,t),n)}function oX(e,t,n){return tX(n=>n.Sdf.cone(e,t),n)}function sX(e,t,n,r){return tX(r=>r.Sdf.capsule(e[0],e[1],e[2],t[0],t[1],t[2],n),r)}function cX(e,t,n){return tX(n=>n.Sdf.torus(e,t),n)}function lX(e,t,n){return tX(n=>n.Sdf.plane(e[0],e[1],e[2],t),n)}function uX(e){if(e.length<2)return k(F(`SDF_INVALID_SPINE`,`sweep spine needs at least 2 points.`));let t=new Float64Array(e.length*3);for(let n=0;n<e.length;n++){let r=e[n];if(!r.every(e=>Number.isFinite(e)))return k(F(`SDF_INVALID_SPINE`,`sweep spine coordinates must be finite.`));t[n*3]=r[0],t[n*3+1]=r[1],t[n*3+2]=r[2]}return O(t)}function dX(e,t,n,r){let i=uX(e);if(A(i))return i;let a=n?.closed??!1;return tX(e=>e.Sdf.sweep(i.value,t.value,a),r)}var fX={gyroid:0,schwarzP:1,diamond:2};function pX(e,t,n,r){let i=fX[e];return i===void 0?k(F(`SDF_INVALID_LATTICE_KIND`,`unknown lattice kind: ${e}`)):tX(e=>e.Sdf.lattice(i,t.value,n.value),r)}function mX(e,t,n){return tX(n=>n.Sdf.strut_lattice(e,t.value),n)}function hX(e){return{raw:e,delete(){e.free()}}}function gX(e){let t=MT(hX(e));return{get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()}}}function _X(e,t){let n=KY(t);if(A(n))return n;try{return O(gX(e(n.value)))}catch(e){return k(mo(`SDF_FIELD_BUILD_FAILED`,e instanceof Error?e.message:`scalar field construction failed.`,e))}}function vX(e,t){return _X(t=>t.ScalarField.constant(e),t)}function yX(e,t,n,r,i,a){return _X(a=>a.ScalarField.axial_ramp(e,t,n,r,i),a)}function bX(e,t,n,r,i,a,o){return _X(o=>o.ScalarField.radial_ramp(e[0],e[1],e[2],t,n,r,i,a),o)}function xX(e,t,n,r){return _X(r=>r.ScalarField.from_sdf(e.value,t,n),r)}function SX(e,t,n,r){return _X(r=>r.ScalarField.clamp(e.value,t,n),r)}var CX={gyroid:0,schwarzP:1,diamond:2},wX=48,TX=2;function EX(e){let t=CX[e.type];if(t===void 0)return k(F(`LATTICE_INVALID_TYPE`,`lattice type must be one of gyroid, schwarzP, diamond (got '${e.type}').`));if(!(e.period>0))return k(F(`LATTICE_INVALID_PERIOD`,`period must be > 0.`));if(!(e.thickness>0))return k(F(`LATTICE_INVALID_THICKNESS`,`thickness must be > 0.`));let n=e.resolution??wX,r=e.padding??TX;return!Number.isInteger(n)||n<1?k(F(`LATTICE_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(r)||r<1?k(F(`LATTICE_INVALID_PADDING`,`padding must be an integer >= 1.`)):O({tag:t,period:e.period,thickness:e.thickness,resolution:n,padding:r})}function DX(e){let t=e.positions.length/3;return{vertices:e.positions,normals:e.normals,triangles:e.indices,uvs:new Float32Array(t*2),faceGroups:[{start:0,count:e.indices.length/3,faceHash:0}]}}function OX(e,t,n){let r=iY(e);if(r)return k(r);if(e.vertices.length===0||e.triangles.length===0)return k(F(`LATTICE_EMPTY_MESH`,`latticeInfill requires a non-empty triangle mesh.`));let i=EX(t);if(A(i))return i;let a=oY(n);if(A(a))return a;let{tag:o,period:s,thickness:c,resolution:l,padding:u}=i.value;try{try{var d=xT();return O(DX(d.u(a.value.lattice_infill(e.vertices,e.triangles,l,u,o,s,c))))}catch(e){d.e=e}finally{d.d()}}catch(e){return k(mo(`LATTICE_INFILL_FAILED`,e instanceof Error?e.message:`lattice infill failed (grid too large?).`,e))}}function kX(e,t,n){let r=pY(e);return A(r)?r:OX(r.value,t,n)}function AX(e,t,n){for(let t=0;t<3;t++){let n=e.min[t],r=e.max[t];if(n===void 0||r===void 0||!(n<r))return k(F(`LATTICE_INVALID_BOUNDS`,`bounds.min must be strictly less than bounds.max on every axis (axis ${t}).`))}let r=EX(t);if(A(r))return r;let i=oY(n);if(A(i))return i;let{tag:a,period:o,thickness:s,resolution:c,padding:l}=r.value,[u,d,f]=e.min,[p,m,h]=e.max;try{try{var g=xT();return O(DX(g.u(i.value.tpms_box(u,d,f,p,m,h,c,l,a,o,s))))}catch(e){g.e=e}finally{g.d()}}catch(e){return k(mo(`TPMS_LATTICE_FAILED`,e instanceof Error?e.message:`tpms lattice failed (grid too large?).`,e))}}function jX(e){return U().createVector3d(e[0],e[1],e[2])}function MX(e){return U().createPoint3d(e[0],e[1],e[2])}function NX(e){return U().createDirection3d(e[0],e[1],e[2])}function PX(e){return[e.X(),e.Y(),e.Z()]}function FX(e){return[e.X(),e.Y(),e.Z()]}function IX(e){return[e.X(),e.Y(),e.Z()]}function LX(e,t){let n=jX(e);try{return t(n)}finally{n.delete()}}function RX(e,t){let n=MX(e);try{return t(n)}finally{n.delete()}}function zX(e,t){let n=NX(e);try{return t(n)}finally{n.delete()}}var BX=.299,VX=.587,HX=.114;function UX(e,t={}){if(e.length<2)return k(F(N.SURFACE_GRID_TOO_SMALL,`surfaceFromGrid: need at least 2 rows, got ${e.length}`));let n=e.length,r=e[0]?.length??0;if(r<2)return k(F(N.SURFACE_GRID_TOO_SMALL,`surfaceFromGrid: need at least 2 columns, got ${r}`));for(let t=0;t<n;t++){let n=e[t];if(!n||n.length!==r)return k(F(N.SURFACE_GRID_JAGGED,`surfaceFromGrid: row ${t} has ${n?.length??0} columns, expected ${r}`))}let{width:i=r-1,depth:a=n-1,scaleZ:o=1}=t,s=i/(r-1),c=a/(n-1);try{return WX(e,n,r,s,c,o)}catch{}try{return GX(e,n,r,s,c,o)}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.SURFACE_FAILED,`surfaceFromGrid failed: ${t}`,e))}}function WX(e,t,n,r,i,a){let o=[];for(let s=0;s<t;s++)for(let t=0;t<n;t++){let n=e[s],c=(n?n[t]??0:0)*a;o.push([t*r,s*i,c])}let s=W(U().bsplineSurface(o,t,n));return vE(s)?O(s):(s[Symbol.dispose](),k(P(N.SURFACE_FAILED,`B-spline surface did not produce a face`)))}function GX(e,t,n,r,i,a){let o=[];for(let s=0;s<t;s++)for(let t=0;t<n;t++){let n=e[s],c=(n?n[t]??0:0)*a;o.push([t*r,s*i,c])}let s=W(U().triangulatedSurface(o,t,n));return vE(s)||yE(s)?O(s):(s[Symbol.dispose](),k(P(N.SURFACE_FAILED,`surfaceFromGrid: unexpected shape type from sewing`)))}async function KX(e,t={}){let n=t.channel??`luminance`,r=Math.max(1,Math.round(t.downsample??1));if(typeof createImageBitmap!=`function`)return k(ho(N.SURFACE_FAILED,`surfaceFromImage requires createImageBitmap (not available in this environment)`));let i;try{i=await createImageBitmap(e)}catch(e){return k(ho(N.SURFACE_FAILED,`surfaceFromImage: failed to decode image — ${e instanceof Error?e.message:String(e)}`))}let a=i.width,o=i.height;if(a<2||o<2)return i.close(),k(F(N.SURFACE_GRID_TOO_SMALL,`surfaceFromImage: image too small (${a}x${o}), need at least 2x2`));if(typeof OffscreenCanvas!=`function`)return i.close(),k(ho(N.SURFACE_FAILED,`surfaceFromImage requires OffscreenCanvas (not available in this environment)`));let s=new OffscreenCanvas(a,o).getContext(`2d`);if(!s)return i.close(),k(ho(N.SURFACE_FAILED,`surfaceFromImage: could not get 2D canvas context`));s.drawImage(i,0,0),i.close();let c=s.getImageData(0,0,a,o).data,l=[];for(let e=0;e<o;e+=r){let t=[];for(let i=0;i<a;i+=r){let r=(e*a+i)*4,o=c[r]??0,s=c[r+1]??0,l=c[r+2]??0,u;switch(n){case`r`:u=o/255;break;case`g`:u=s/255;break;case`b`:u=l/255;break;default:u=(BX*o+VX*s+HX*l)/255;break}t.push(u)}l.push(t)}let u={};return t.width!==void 0&&(u.width=t.width),t.depth!==void 0&&(u.depth=t.depth),t.scaleZ!==void 0&&(u.scaleZ=t.scaleZ),UX(l,u)}function qX(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function JX(e,t={}){if(e.length===0)return k(F(N.HULL_EMPTY_INPUT,`hull: at least one shape is required`,void 0,void 0,`Provide one or more shapes to compute a convex hull`));for(let[t,n]of e.entries()){let e=qX(n,`hull: shapes[${t}]`);if(A(e))return e}let n=t.tolerance??.1;try{let t=U(),r=e.map(e=>e.wrapped),i=W(t.hull(r,n));return bE(i)?O(i):k(P(N.HULL_NOT_3D,`Hull result is not a solid; input may be degenerate`))}catch(e){let t=e instanceof Error?e.message:String(e);return t.includes(`coplanar`)||t.includes(`fewer than`)||t.includes(`degenerate`)?k(P(N.HULL_DEGENERATE,`Hull degenerate: ${t}`,e)):k(P(N.HULL_FAILED,`Hull operation failed: ${t}`,e))}}function YX(e){if(e.length<4)return k(F(N.HULL_EMPTY_INPUT,`convexHull: at least 4 points required, got ${e.length}`,void 0,void 0,`Provide 4 or more non-coplanar 3D points`));try{let t=U(),n=e.map(e=>({x:e[0],y:e[1],z:e[2]})),r=W(t.hullFromPoints(n,.1));return bE(r)?O(r):k(P(N.HULL_NOT_3D,`convexHull result is not a solid; points may be coplanar`))}catch(e){let t=e instanceof Error?e.message:String(e);return t.includes(`coplanar`)||t.includes(`fewer than`)||t.includes(`degenerate`)?k(P(N.HULL_DEGENERATE,`convexHull degenerate: ${t}`,e)):k(P(N.HULL_FAILED,`convexHull failed: ${t}`,e))}}function XX(e){let n=LE(e);if(n.length!==1)return null;let r=t(n,0);if(QE(r)!==`sphere`)return null;let i=U().area(r.wrapped);return Math.sqrt(i/(4*Math.PI))}function ZX(e,t,n){try{let r=W(U().offset(e.wrapped,t,n));return SE(r)?O(r):(r[Symbol.dispose](),k(uo(N.MINKOWSKI_NOT_3D,`Minkowski sphere offset did not produce a 3D shape`)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.MINKOWSKI_FAILED,`Minkowski sphere offset failed: ${t}`,e,{operation:`minkowski`,fastPath:`sphere`}))}}function QX(e,t,n){let r=U();try{let i=zE(e),a=zE(t);if(i.length===0||a.length===0)return k(P(N.MINKOWSKI_FAILED,`Minkowski sum: one or both shapes have no vertices`,void 0,{operation:`minkowski`}));let o=[];for(let e of i){let[t,n,i]=r.vertexPosition(e.wrapped);for(let e of a){let[a,s,c]=r.vertexPosition(e.wrapped);o.push({x:t+a,y:n+s,z:i+c})}}let s=W(r.hullFromPoints(o,n));return SE(s)?O(s):(s[Symbol.dispose](),k(uo(N.MINKOWSKI_NOT_3D,`Minkowski hull did not produce a 3D shape`)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.MINKOWSKI_FAILED,`Minkowski general path failed: ${t}`,e,{operation:`minkowski`}))}}function $X(e,t,n={}){let{tolerance:r=1e-6}=n;if(U().isNull(e.wrapped))return k(F(N.NULL_SHAPE_INPUT,`minkowski: shape is a null shape`));if(U().isNull(t.wrapped))return k(F(N.MINKOWSKI_NULL_TOOL,`minkowski: tool is a null shape`));if(!SE(e)||!SE(t))return k(F(N.MINKOWSKI_NOT_3D,`minkowski: both shape and tool must be 3D`));let i=XX(t);return i===null?QX(e,t,r):ZX(e,i,r)}function eZ(e,t,n={}){let{tolerance:r=1e-6}=n;if(e.length<4)return k(F(N.POLYHEDRON_INSUFFICIENT_POINTS,`polyhedron: need at least 4 points, got ${e.length}`));if(t.length<4)return k(F(N.POLYHEDRON_INSUFFICIENT_FACES,`polyhedron: need at least 4 faces, got ${t.length}`));let i=[];for(let[n,r]of t.entries()){for(let t of r)if(t<0||t>=e.length)return k(F(N.POLYHEDRON_INVALID_INDEX,`polyhedron: face ${n} has out-of-range index ${t} (${e.length} points)`));if(r.length<3)continue;let t=r[0];for(let e=1;e<r.length-1;e++)i.push([t,r[e],r[e+1]])}try{let t=U(),n=e.map(([e,t,n])=>({x:e,y:t,z:n})),a=W(t.buildSolidFromFaces(n,i,r));return bE(a)?O(a):(a[Symbol.dispose](),k(P(N.POLYHEDRON_FAILED,`Polyhedron did not produce a solid`)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.POLYHEDRON_FAILED,`Polyhedron failed: ${t}`,e))}}var tZ=1e-10;function nZ(e,t,n,r){return e*r-t*n}function rZ(e,t,n,r){return e*n+t*r}function iZ(e,t){return Math.sqrt(e*e+t*t)}function aZ(e,t){let n=e[(t%e.length+e.length)%e.length];if(!n)throw Error(`Invalid polygon index ${t} for length ${e.length}`);return n}function oZ(e){let t=0;for(let n=0;n<e.length;n++){let r=aZ(e,n),i=aZ(e,n+1);t+=r.x*i.y-i.x*r.y}return t<0?[...e].reverse():e}function sZ(e,t){let n=aZ(e,t-1),r=aZ(e,t),i=aZ(e,t+1),a=r.x-n.x,o=r.y-n.y,s=iZ(a,o),c=i.x-r.x,l=i.y-r.y,u=iZ(c,l);if(s<tZ||u<tZ)return{dx:0,dy:0};let d=-o/s,f=a/s,p=-l/u,m=c/u,h=d+p,g=f+m,_=iZ(h,g);if(_<tZ)return{dx:d,dy:f};h/=_,g/=_;let v=rZ(h,g,d,f),y=Math.abs(v)>tZ?1/v:1;return{dx:h*y,dy:g*y}}function cZ(e){return!e.prev||!e.next?!1:nZ(e.x-e.prev.x,e.y-e.prev.y,e.next.x-e.x,e.next.y-e.y)<-1e-10}function lZ(e){let t=e.map((t,n)=>{let r=sZ(e,n);return{x:t.x,y:t.y,bx:r.dx,by:r.dy,origIdx:n,prev:null,next:null,active:!0}});for(let e=0;e<t.length;e++){let n=t[e],r=t[(e-1+t.length)%t.length],i=t[(e+1)%t.length];n&&r&&i&&(n.prev=r,n.next=i)}return t}function uZ(e,t){let n=e;for(let e=0;e<t&&n;e++)n.active=!1,n=n.next}function dZ(e){let t=1,n=e.next;for(;n!==e&&(t++,n=n.next,!(t>1e4)););return t}function fZ(e,t){let n=e.bx-t.bx,r=e.by-t.by,i=t.x-e.x,a=t.y-e.y;if(Math.abs(n)<tZ&&Math.abs(r)<tZ)return null;let o;if(o=Math.abs(n)>Math.abs(r)?i/n:a/r,o<tZ)return null;let s=Math.abs(n)>Math.abs(r)?r:n,c=Math.abs(n)>Math.abs(r)?a:i;if(Math.abs(s)>tZ){let e=c/s;if(Math.abs(o-e)>1e-4*Math.max(1,Math.abs(o)))return null}return o}function pZ(e,t,n){let r=n.x-t.x,i=n.y-t.y,a=iZ(r,i);if(a<tZ)return null;let o=-i/a,s=r/a,c=(e.x-t.x)*o+(e.y-t.y)*s,l=e.bx-(t.bx+n.bx)/2,u=e.by-(t.by+n.by)/2,d=l*o+u*s;if(Math.abs(d)<tZ)return null;let f=-c/d;if(f<tZ)return null;let p=e.x+f*e.bx,m=e.y+f*e.by,h=t.x+f*t.bx,g=t.y+f*t.by,_=n.x+f*n.bx,v=n.y+f*n.by,y=_-h,b=v-g,x=iZ(y,b);if(x<tZ)return f;let S=rZ(p-h,m-g,y,b)/(x*x);return S<-.01||S>1.01?null:f}function mZ(e){let t=[];for(let n of e){if(!n.active||!n.next)continue;let e=fZ(n,n.next);if(e!==null&&e>tZ){let r=n.x+e*n.bx,i=n.y+e*n.by;t.push({time:e,x:r,y:i,nodeA:n,nodeB:n.next,type:`edge`})}if(cZ(n)){let e=n.next.next,r=0;for(;e!==n.prev&&e!==n&&r<1e3;){let i=pZ(n,e,e.next);if(i!==null&&i>tZ){let r=n.x+i*n.bx,a=n.y+i*n.by;t.push({time:i,x:r,y:a,nodeA:n,nodeB:e,type:`split`})}e=e.next,r++}}}return t.sort((e,t)=>e.time-t.time),t}function hZ(e){if(e.length<3)return O({nodes:[],faces:[]});try{return O(gZ(e))}catch(e){return k(mo(N.STRAIGHT_SKELETON_FAILED,e instanceof Error?e.message:String(e),e))}}function gZ(e){let t=oZ(e),n=t.length,r=[],i=Array.from({length:n},()=>[]),a=lZ(t),o=0,s=n*n*2;for(;o<s;){o++;let e=a.find(e=>e.active);if(!e)break;let t=dZ(e);if(t<=3){if(t===3){let t=e,n=t.next,a=n.next,o=fZ(t,n),s=o!==null&&o>tZ?o:0,c=(t.x+n.x+a.x)/3+s*(t.bx+n.bx+a.bx)/3,l=(t.y+n.y+a.y)/3+s*(t.by+n.by+a.by)/3,u=r.length;r.push({x:c,y:l,height:s});let d=i[t.origIdx],f=i[n.origIdx],p=i[a.origIdx];d&&d.push(u),f&&f.push(u),p&&p.push(u),t.active=!1,n.active=!1,a.active=!1}else uZ(e,t);continue}let n=a.filter(e=>e.active),s=mZ(n);if(s.length===0){for(let e of n)e.active=!1;break}let c=s[0];if(!c)break;if(c.type===`edge`){let e=c.nodeA,t=c.nodeB;if(!e.active||!t.active)continue;let n=r.length;r.push({x:c.x,y:c.y,height:c.time});let a=i[e.origIdx],o=i[t.origIdx];a&&a.push(n),o&&o.push(n),e.x=c.x,e.y=c.y,e.next=t.next,t.next.prev=e,t.active=!1;let s=[],l=e;do s.push({x:l.x,y:l.y}),l=l.next;while(l!==e);let u=sZ(s,0);e.bx=u.dx,e.by=u.dy}else{let e=c.nodeA,t=c.nodeB;if(!e.active||!t.active)continue;let n=r.length;r.push({x:c.x,y:c.y,height:c.time});let o=i[e.origIdx];o&&o.push(n);let s=i[t.origIdx];s&&s.push(n);let l={x:c.x,y:c.y,bx:0,by:0,origIdx:e.origIdx,prev:null,next:null,active:!0};a.push(l),e.x=c.x,e.y=c.y;let u=e.next,d=t.next;e.next=d,d.prev=e,l.next=u,u.prev=l,l.prev=t,t.next=l;let f=e=>{let t=[],n=e;do t.push({x:n.x,y:n.y}),n=n.next;while(n!==e);return t},p=sZ(f(e),0);e.bx=p.dx,e.by=p.dy;let m=sZ(f(l),0);l.bx=m.dx,l.by=m.dy}}let c=[];for(let e=0;e<n;e++){let a=(e+1)%n,o=[aZ(t,e),aZ(t,a)],s=[0,0],l=i[a],u=i[e];if(l)for(let e of l){let t=r[e];t&&(o.push({x:t.x,y:t.y}),s.push(t.height))}if(u)for(let e=u.length-1;e>=0;e--){let t=u[e];if(t===void 0)continue;let n=r[t];if(!n)continue;let i=o[o.length-1];i&&iZ(n.x-i.x,n.y-i.y)>tZ&&(o.push({x:n.x,y:n.y}),s.push(n.height))}o.length>=3&&c.push({vertices:o,heights:s})}let l=[];for(let e of r)l.some(t=>Math.abs(t.x-e.x)<.01&&Math.abs(t.y-e.y)<.01)||l.push(e);return{nodes:l,faces:c}}function _Z(e){let t=IE(e).map(e=>{let t=$O(e);return{x:t[0],y:t[1]}}),n=t[0],r=t[t.length-1];return t.length>1&&n&&r&&Math.abs(n.x-r.x)<1e-10&&Math.abs(n.y-r.y)<1e-10&&t.pop(),t}function vZ(e){let t=[];for(let n=1;n<e-1;n++)t.push([0,n,n+1]);return t}function yZ(e,t,n,r,i,a){return(n-e)*(a-t)-(r-t)*(i-e)}function bZ(e,t,n,r,i,a,o,s){let c=yZ(n,r,i,a,e,t),l=yZ(i,a,o,s,e,t),u=yZ(o,s,n,r,e,t);return!((c<0||l<0||u<0)&&(c>0||l>0||u>0))}function xZ(e){let t=e.length;if(t<3)return[];if(t===3)return[[0,1,2]];let n=0;for(let r=0;r<t;r++){let i=e[r],a=e[(r+1)%t];i&&a&&(n+=i.x*a.y-a.x*i.y)}let r=[],i=Array.from({length:t},(e,t)=>t);n<0&&i.reverse();let a=(t,n,r)=>{let a=e[t],o=e[n],s=e[r];if(!a||!o||!s||yZ(a.x,a.y,o.x,o.y,s.x,s.y)<=0)return!1;for(let c of i){if(c===t||c===n||c===r)continue;let i=e[c];if(i&&bZ(i.x,i.y,a.x,a.y,o.x,o.y,s.x,s.y))return!1}return!0};for(;i.length>3;){let e=!1;for(let t=0;t<i.length;t++){let n=i[(t-1+i.length)%i.length],o=i[t],s=i[(t+1)%i.length];if(!(n===void 0||o===void 0||s===void 0)&&a(n,o,s)){r.push([n,o,s]),i.splice(t,1),e=!0;break}}if(!e)break}if(i.length===3){let[e,t,n]=i;e!==void 0&&t!==void 0&&n!==void 0&&r.push([e,t,n])}return r}function SZ(e,t,n){let r=[];for(let i of e.faces){let e=i.vertices.map((e,n)=>[e.x,e.y,(i.heights[n]??0)*t]),a=vZ(e.length);for(let[t,i,o]of a){let a=e[t],s=e[i],c=e[o];if(!a||!s||!c)continue;let l=s[0]-a[0],u=s[1]-a[1],d=s[2]-a[2],f=c[0]-a[0],p=c[1]-a[1],m=c[2]-a[2],h=u*m-d*p,g=d*f-l*m,_=l*p-u*f;if(h*h+g*g+_*_<1e-20)continue;let v=n.buildTriFace(a,s,c);v!==null&&r.push(v)}}return r}function CZ(e,t){let n=(t?.angle??45)*nD,r=Math.tan(n);try{let t=_Z(e);if(t.length<3)return k(P(N.ROOF_FAILED,`Wire must have at least 3 edges for roof generation`));let n=hZ(t);if(!n.ok)return n;let i=n.value;if(i.faces.length===0)return k(P(N.ROOF_FAILED,`Straight skeleton computation produced no faces`));let a=U(),o=SZ(i,r,a);for(let[e,n,r]of xZ(t)){let i=t[e],s=t[n],c=t[r];if(!i||!s||!c)continue;let l=[i.x,i.y,0],u=[s.x,s.y,0],d=[c.x,c.y,0],f=a.buildTriFace(l,d,u);f!==null&&o.push(f)}if(o.length===0)return k(P(N.ROOF_FAILED,`No valid triangular faces could be built`));try{let e=a.sewAndSolidify(o,1e-6);return O(fE(a.fixShape(e)))}catch(e){try{let t=fE(a.sew(o,1e-6));return ZT(t)?O(t):k(P(N.ROOF_FAILED,`Sew fallback produced invalid solid`,e))}catch(e){return k(P(N.ROOF_FAILED,`Failed to sew roof faces`,e))}}}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.ROOF_FAILED,`Roof generation failed: ${t}`,e))}}var wZ={coincident:3,concentric:4,distance:1,angle:1},TZ=[1,0,0,0];function EZ(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function DZ(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function OZ(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function kZ(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 AZ(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function jZ(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function MZ(e){return jZ(kZ(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function NZ(e,t){let n=EZ(GM(t.rotation,e.origin),t.position);return{type:e.type,origin:n,...e.normal?{normal:GM(t.rotation,e.normal)}:{},...e.direction?{direction:GM(t.rotation,e.direction)}:{}}}function PZ(e,t,n){let r=e.normal??[0,0,1];return{position:AZ(r,OZ(r,DZ(e.origin,t.origin))+n),rotation:TZ}}function FZ(e,t){let n=e.direction??[0,0,1],r=qM(t.direction??[0,0,1],n),i=GM(r,t.origin);return{position:DZ(e.origin,i),rotation:r}}function IZ(e,t,n){let r=jZ(e.normal??[0,0,1]),i=jZ(t.normal??[0,0,1]),a=Math.acos(Math.max(-1,Math.min(1,OZ(i,r)))),o=kZ(i,r);return{position:[0,0,0],rotation:KM(Math.hypot(o[0],o[1],o[2])<1e-9?MZ(i):o,a-n)}}function LZ(e,t,n){let r=DZ(t,e),i=Math.hypot(r[0],r[1],r[2]);return{position:DZ(EZ(e,AZ(i<1e-9?[1,0,0]:AZ(r,1/i),n)),t),rotation:TZ}}function RZ(e,t,n,r){let i=jZ(e);return{position:AZ(i,OZ(i,DZ(t,n))-r),rotation:TZ}}function zZ(e,t,n){let r=jZ(e.direction??[0,0,1]),i=EZ(e.origin,AZ(r,OZ(r,DZ(t,e.origin))));if(n===0)return{position:DZ(i,t),rotation:TZ};let a=DZ(t,i),o=Math.hypot(a[0],a[1],a[2]);return{position:DZ(EZ(i,AZ(o<1e-9?MZ(r):AZ(a,1/o),n)),t),rotation:TZ}}function BZ(e,t,n){let r=jZ(t.direction??[0,0,1]),i=DZ(t.origin,e),a=DZ(i,AZ(r,OZ(r,i))),o=Math.hypot(a[0],a[1],a[2]);return n===0?{position:AZ(a,-1),rotation:TZ}:{position:DZ(AZ(o<1e-9?MZ(r):AZ(a,1/o),n),a),rotation:TZ}}function VZ(e,t,n){let r=jZ(e.direction??[0,0,1]),i=qM(jZ(t.direction??[0,0,1]),r),a=DZ(GM(i,t.origin),e.origin),o=DZ(a,AZ(r,OZ(r,a))),s=Math.hypot(o[0],o[1],o[2]);return{position:DZ(AZ(s<1e-9?MZ(r):AZ(o,1/s),n),o),rotation:i}}var HZ=new Set([`plane-plane`,`plane-point`,`point-plane`,`point-point`,`axis-axis`,`axis-point`,`point-axis`]),UZ={angle:`plane`,concentric:`axis`},WZ=new Set([`coincident`,`distance`,`angle`,`concentric`]);function GZ(e,t,n){let r=UZ[e];return r?t===r&&n===r:HZ.has(`${t}-${n}`)}function KZ(e,t,n){switch(`${e.type}-${t.type}`){case`plane-plane`:case`plane-point`:return PZ(e,t,n);case`point-plane`:return RZ(t.normal??[0,0,1],e.origin,t.origin,n);case`point-point`:return LZ(e.origin,t.origin,n);case`axis-axis`:return n===0?FZ(e,t):VZ(e,t,n);case`axis-point`:return zZ(e,t.origin,n);case`point-axis`:return BZ(e.origin,t,n);default:return null}}function qZ(e,t,n){switch(e.type){case`concentric`:return FZ(t,n);case`angle`:return IZ(t,n,(e.value??0)*Math.PI/180);default:{let r=KZ(t,n,e.type===`distance`?e.value??0:0);if(!r)throw Error(`solveMate: unsupported entity pair escaped filter: ${t.type}-${n.type}`);return r}}}function JZ(e,t){let n=new Map;for(let t of e)n.set(t,{position:[0,0,0],rotation:TZ});let r=[],i=t.filter(e=>WZ.has(e.type)&&e.entityA&&e.entityB),a=new Set;for(let e of i)e.entityB&&a.add(e.entityB.node);let o=new Set;for(let t of e)a.has(t)||o.add(t);for(let e of t)e.type===`fixed`&&e.entityA&&o.add(e.entityA.node);let s=[];for(let e of i){if(!e.entityA||!e.entityB)continue;let t=e.entityA.entity.type,n=e.entityB.entity.type;if(!GZ(e.type,t,n)){r.push(`${e.type}(${t}-${n})`);continue}s.push(e)}let c=!0;for(;c&&s.length>0;){c=!1;for(let e=s.length-1;e>=0;e--){let t=s[e];if(!t?.entityA||!t.entityB)continue;let r=t.entityA,i=t.entityB;if(!o.has(r.node)||(s.splice(e,1),c=!0,o.has(i.node)))continue;let a=n.get(r.node)??{position:[0,0,0],rotation:TZ},l=NZ(r.entity,a);n.set(i.node,qZ(t,l,i.entity)),o.add(i.node)}}for(let e of s)r.push(`${e.type}(unanchored)`);return{transforms:n,dof:r.reduce((e,t)=>e+(wZ[t]??wZ[t.split(`(`)[0]??``]??0),0),converged:r.length===0,unsupported:r}}function YZ(e){if(e.face){let t=$D(e.face);return t?{type:`axis`,origin:t.origin,direction:t.direction}:{type:`plane`,origin:QD(e.face),normal:ZD(e.face)}}if(e.edge){if(QO(e.edge)===`LINE`)return{type:`axis`,origin:$O(e.edge),direction:nk(e.edge)};let t=ik(e.edge);return t?{type:`axis`,origin:t.origin,direction:t.direction}:null}return e.point?{type:`point`,origin:e.point}:null}function XZ(e,t){let n=YZ(e),r=YZ(t);return!n||!r?k(F(N.ASSEMBLY_MATE_INVALID,`solveAssembly: could not extract geometry from mate entities`)):O({entityA:{node:e.node,entity:n},entityB:{node:t.node,entity:r}})}function ZZ(e){switch(e.type){case`fixed`:return O({type:`fixed`,entityA:{node:e.entity.node,entity:{type:`point`,origin:[0,0,0]}}});case`coincident`:{let t=XZ(e.entityA,e.entityB);return t.ok?O({type:`coincident`,...t.value}):t}case`distance`:{let t=XZ(e.entityA,e.entityB);return t.ok?O({type:`distance`,...t.value,value:e.distance}):t}case`angle`:{let t=XZ(e.entityA,e.entityB);return t.ok?O({type:`angle`,...t.value,value:e.angle}):t}case`concentric`:{let t=XZ(e.axisA,e.axisB);return t.ok?O({type:`concentric`,...t.value}):t}}}function QZ(e,t){let n=e.mates??[];return{...e,mates:[...n,t]}}function $Z(e){let t=e.mates;if(!t||t.length===0)return k(F(N.ASSEMBLY_MATE_INVALID,`solveAssembly: no mates defined`));try{let n=[];RM(e,e=>{n.push(e.name)});let r=[];for(let e of t){let t=ZZ(e);if(!t.ok)return t;r.push(t.value)}let i=JZ(n,r);if(!i.converged){let e=i.unsupported.length>0?`Unsupported constraint types: ${i.unsupported.join(`, `)} (${i.dof} DOF unresolved)`:`Assembly constraint solver did not converge`;return k(P(N.ASSEMBLY_NOT_CONVERGED,e))}return O({transforms:i.transforms,dof:i.dof,converged:i.converged})}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.ASSEMBLY_SOLVE_FAILED,`Assembly solve failed: ${t}`,e))}}function eQ(e,t,n=1e-6){if(U().isNull(e.wrapped))return k(F(N.NULL_SHAPE_INPUT,`checkInterference: first shape is a null shape`));if(U().isNull(t.wrapped))return k(F(N.NULL_SHAPE_INPUT,`checkInterference: second shape is a null shape`));let r=U().distance(e.wrapped,t.wrapped);return O({hasInterference:r.value<=n,minDistance:r.value,pointOnShape1:r.point1,pointOnShape2:r.point2})}function tQ(e,n=1e-6){let r=[],i=e.map(e=>XE(e));return e.forEach((a,o)=>{for(let s=o+1;s<e.length;s++){if(nQ(t(i,o),t(i,s),n))continue;let c=j(eQ(a,t(e,s),n));c.hasInterference&&r.push({i:o,j:s,result:c})}}),r}function nQ(e,t,n){return e.xMax+n<t.xMin||t.xMax+n<e.xMin||e.yMax+n<t.yMin||t.yMax+n<e.yMin||e.zMax+n<t.zMin||t.zMax+n<e.zMin}function rQ(e){let t=e.split(/\r?\n/),n=[],r=!1,i;for(let e=0;e<t.length-1;e+=2){let a=t[e],o=t[e+1];if(a===void 0||o===void 0)continue;let s=parseInt(a.trim(),10),c=o.trim();if(!isNaN(s)){if(s===2&&c===`ENTITIES`){r=!0;continue}if(r){if(s===0){if(c===`ENDSEC`||c===`EOF`){i&&n.push(i);break}i&&n.push(i),i={type:c,layer:`0`,data:new Map};continue}i&&(s===8?i.layer=c:i.data.set(s,c))}}}return n}function iQ(e,t,n=0){let r=e.get(t);if(r===void 0)return n;let i=parseFloat(r);return isNaN(i)?n:i}function aQ(e){let{type:t,data:n}=e,r=U();if(t===`LINE`)return r.makeLineEdge([iQ(n,10),iQ(n,20),iQ(n,30)],[iQ(n,11),iQ(n,21),iQ(n,31)]);if(t===`CIRCLE`)return r.makeCircleEdge([iQ(n,10),iQ(n,20),iQ(n,30)],[0,0,1],iQ(n,40));if(t===`ARC`){let e=iQ(n,50)*Math.PI/180,t=iQ(n,51)*Math.PI/180;return r.makeCircleArc([iQ(n,10),iQ(n,20),iQ(n,30)],[0,0,1],iQ(n,40),e,t)}}async function oQ(e,t){let n;try{n=await e.text()}catch(e){return k(ho(N.DXF_IMPORT_FAILED,`Failed to read DXF blob`,e))}let r=rQ(n),i=t?.layer===void 0?r:r.filter(e=>e.layer===t.layer);if(i.length===0)return O([]);let a=[];try{for(let e of i){let t=aQ(e);t!==void 0&&a.push(t)}return a.length===0?O([]):O([lE(U().makeWire(a))])}catch(e){return k(ho(N.DXF_IMPORT_FAILED,`Failed to convert DXF entities to geometry`,e))}finally{for(let e of a)e.delete()}}function sQ(e,t,n=1e-6){let r=U(),i=[];for(let[t,n,a]of e){let e=r.buildTriFace(t,n,a);e!==null&&i.push(e)}if(i.length===0)return k(ho(t,`No valid triangular faces could be built`));try{return O(W(r.sewAndSolidify(i,n)))}catch{try{return O(W(r.sew(i,n)))}catch(e){return k(ho(t,`Failed to sew triangular faces`,e))}}}function cQ(e){let t=e.split(/\s+/),n=parseFloat(t[1]??``),r=parseFloat(t[2]??``),i=parseFloat(t[3]??``);return isNaN(n)||isNaN(r)||isNaN(i)?null:[n,r,i]}function lQ(e){return e.split(/\s+/).slice(1).map(e=>parseInt(e.split(`/`)[0]??``,10)).filter(e=>!isNaN(e))}async function uQ(e){let t=(await e.text()).split(`
|
|
60
|
-
`),n=[],r=[];for(let e of t){let t=e.trim();if(t.startsWith(`v `)){let e=cQ(t);e&&n.push(e)}else if(t.startsWith(`f `)){let e=lQ(t);e.length>=3&&r.push(e)}}if(n.length===0||r.length===0)return k(ho(N.OBJ_IMPORT_FAILED,`OBJ file contains no valid geometry`));try{return dQ(n,r)}catch(e){let t=e instanceof Error?e.message:String(e);return k(ho(N.OBJ_IMPORT_FAILED,`OBJ import failed: ${t}`,e))}}function dQ(e,t){let n=[];for(let r of t)for(let t=1;t<r.length-1;t++){let i=r[0]??0,a=r[t]??0,o=r[t+1]??0,s=i>0?i-1:e.length+i,c=a>0?a-1:e.length+a,l=o>0?o-1:e.length+o,u=e[s],d=e[c],f=e[l];!u||!d||!f||n.push([u,d,f])}return sQ(n,N.OBJ_IMPORT_FAILED)}function fQ(e,t){let n=-1;for(let t=e.length-22;t>=0;t--)if(e[t]===80&&e[t+1]===75&&e[t+2]===5&&e[t+3]===6){n=t;break}if(n<0)return null;let r=new DataView(e.buffer,e.byteOffset,e.byteLength),i=r.getUint32(n+16,!0),a=i+r.getUint32(n+12,!0),o=i,s=new TextDecoder;for(;o<a&&r.getUint32(o,!0)===33639248;){let n=r.getUint16(o+28,!0),i=r.getUint16(o+30,!0),a=r.getUint16(o+32,!0),c=r.getUint32(o+42,!0);if(s.decode(e.subarray(o+46,o+46+n))===t){if(r.getUint16(c+8,!0)!==0)return null;let t=r.getUint16(c+26,!0),n=r.getUint16(c+28,!0),i=r.getUint32(c+18,!0),a=c+30+t+n;return e.subarray(a,a+i)}o+=46+n+i+a}return null}function pQ(e){return e>=97&&e<=122||e>=65&&e<=90||e>=48&&e<=57||e===95}function mQ(e){let t={},n=0;for(;n<e.length;){let r=e.indexOf(`="`,n);if(r<0)break;let i=r;for(;i>0&&pQ(e.charCodeAt(i-1));)i--;if(i===r){n=r+2;continue}let a=e.slice(i,r),o=r+2,s=e.indexOf(`"`,o);if(s<0)break;t[a]=e.slice(o,s),n=s+1}return t}function hQ(e,t){let n=[],r=`<${t} `,i=0;for(;i<e.length;){let t=e.indexOf(r,i);if(t<0)break;let a=e.indexOf(`>`,t);if(a<0)break;n.push(e.slice(t,a+1)),i=a+1}return n}function gQ(e,t){let n=e.indexOf(`<${t}`);if(n<0)return null;let r=e.indexOf(`</${t}>`,n);return r<0?null:e.slice(n,r+t.length+3)}function _Q(e){let t=e.startsWith(`#`)?e.slice(1):e;return[parseInt(t.slice(0,2),16)/255,parseInt(t.slice(2,4),16)/255,parseInt(t.slice(4,6),16)/255,t.length>=8?parseInt(t.slice(6,8),16)/255:1]}function vQ(e){let t=new Map,n=0;for(;n<e.length;){let r=e.indexOf(`<colorgroup`,n);if(r<0)break;let i=e.indexOf(`</colorgroup>`,r);if(i<0)break;let a=e.slice(r,i+13);n=i+13;let o=e.indexOf(`>`,r);if(o<0)continue;let s=mQ(e.slice(r,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of hQ(a,`color`)){let t=mQ(e).color;t!==void 0&&l.push(_Q(t))}t.set(c,l)}let r=0;for(;r<e.length;){let n=e.indexOf(`<basematerials`,r);if(n<0)break;let i=e.indexOf(`</basematerials>`,n);if(i<0)break;let a=e.slice(n,i+16);r=i+16;let o=e.indexOf(`>`,n);if(o<0)continue;let s=mQ(e.slice(n,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of hQ(a,`base`)){let t=mQ(e).displaycolor;t===void 0?l.push([0,0,0,1]):l.push(_Q(t))}t.set(c,l)}return t}function yQ(e){let t=[],n=[],r=[],i=vQ(e);for(let n of hQ(e,`vertex`)){let e=mQ(n);e.x!==void 0&&e.y!==void 0&&e.z!==void 0&&t.push([parseFloat(e.x),parseFloat(e.y),parseFloat(e.z)])}let a=null,o=null,s=gQ(e,`object`);if(s!==null){let e=s.indexOf(`>`);if(e>=0){let t=mQ(s.slice(0,e+1));t.pid!==void 0&&(a=parseInt(t.pid,10)),t.pindex!==void 0&&(o=parseInt(t.pindex,10))}}for(let t of hQ(e,`triangle`)){let e=mQ(t);if(e.v1!==void 0&&e.v2!==void 0&&e.v3!==void 0){n.push([parseInt(e.v1,10),parseInt(e.v2,10),parseInt(e.v3,10)]);let t=null,s=e.pid??(a===null?void 0:String(a)),c=e.p1??(o===null?void 0:String(o));if(s!==void 0&&c!==void 0){let e=parseInt(s,10),n=parseInt(c,10),r=i.get(e);r!==void 0&&n<r.length&&(t=r[n]??null)}r.push(t)}}return{vertices:t,triangles:n,triangleColors:r}}function bQ(e){let t=new Map;for(let n of e){if(n===null)continue;let e=n.join(`,`),r=t.get(e);r===void 0?t.set(e,{count:1,color:n}):r.count++}let n=null;for(let e of t.values())(n===null||e.count>n.count)&&(n=e);return n===null?null:n.color}function xQ(e){let t=U(),n=e.vertices.map(([e,t,n])=>({x:e,y:t,z:n})),r=e.triangles;try{return O(W(t.buildSolidFromFaces(n,r,1e-6)))}catch{let t=[];for(let[n,r,i]of e.triangles){let a=e.vertices[n],o=e.vertices[r],s=e.vertices[i];!a||!o||!s||t.push([a,o,s])}return sQ(t,N.THREEMF_IMPORT_FAILED)}}async function SQ(e){try{let t=await e.arrayBuffer(),n=fQ(new Uint8Array(t),`3D/3dmodel.model`);if(!n)return k(ho(N.THREEMF_IMPORT_FAILED,`3MF archive does not contain 3D/3dmodel.model (or uses unsupported compression)`));let r=yQ(new TextDecoder().decode(n));if(r.vertices.length===0||r.triangles.length===0)return k(ho(N.THREEMF_IMPORT_FAILED,`3MF model contains no valid geometry`));let i=xQ(r);if(i.ok){let e=bQ(r.triangleColors);e!==null&&EO(i.value,e)}return i}catch(e){let t=e instanceof Error?e.message:String(e);return k(ho(N.THREEMF_IMPORT_FAILED,`3MF import failed: ${t}`,e))}}async function CQ(e){try{let t=await e.arrayBuffer();return O(W(U().importGLB(t)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(ho(N.GLB_IMPORT_FAILED,`Failed to import GLB: ${t}`,e))}}function $(e){return`__wrapped`in e?e.val:e}function wQ(e){return $(e)}function TQ(e,t){return PO($(e),t)}function EQ(e,t,n){let r=n?.at;return FO($(e),t,r,n?.axis)}function DQ(e,t){let n=t?.at;return IO($(e),t?.normal??[1,0,0],n)}function OQ(e,t,n){return LO($(e),t,n?.center)}function kQ(e){return GO($(e))}function AQ(e,t){return HO($(e),t)}function jQ(e,t){return WO($(e),t)}function MQ(e,t,n){return nA($(e),$(t),{...n,unsafe:!0})}function NQ(e,t,n){return rA($(e),$(t),{...n,unsafe:!0})}function PQ(e,t){return oA(e.map(e=>$(e)),{...t,unsafe:!0})}function FQ(e,t,n){return sA($(e),t.map(e=>$(e)),{...n,unsafe:!0})}function IQ(e,t,n){return iA($(e),$(t),{...n,unsafe:!0})}function LQ(e,t,n){return lA($(e),t,n)}function RQ(e,t,n){return hA($(e),t,n)}function zQ(e,t){return gA($(e),t)}function BQ(e,t,n){return _A($(e),t,n)}function VQ(e,t){if(e!==void 0)return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(qP()).findAll(t)}function HQ(e,t){return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(XP()).findAll(t)}function UQ(e){return typeof e==`object`&&!Array.isArray(e)&&typeof e!=`function`?{mode:`distAngle`,distance:e.distance,angle:e.angle}:typeof e==`function`?{mode:`standard`,distance:t=>{let n=e(t);return n===null?null:typeof n==`object`&&!Array.isArray(n)?n.distance:n}}:{mode:`standard`,distance:e}}function WQ(e,t,n){let r=$(e),i,a;return n===void 0?(i=void 0,a=t):(i=VQ(t,r),a=n),Cj(r,i,a)}function GQ(e,t,n){let r=$(e),i,a;n===void 0?(i=void 0,a=t):(i=VQ(t,r),a=n);let o=UQ(a);return o.mode===`distAngle`?FA(r,[...i??IE(r)],o.distance,o.angle):wj(r,i,o.distance)}function KQ(e,t,n,r){let i=$(e);return Tj(i,HQ(t,i),n,r?.tolerance)}function qQ(e,t,n){return Ej($(e),t,n?.tolerance)}function JQ(e,t){return xj($(e),t)}function YQ(e,t,n){let r=$(e);return Oj(r,HQ(t,r),n.pullDirection,n.neutralPlane,n.angle)}function XQ(e){return Pj($(e))}function ZQ(e){return ZO($(e))}function QQ(e,t){return Ck($(e),t)}function $Q(e,t){return wk($(e),t)}function e$(e){return eD($(e))}function t$(e){return KO($(e))}function n$(e){return VD(e)}function r$(e){return Aj($(e))}function i$(e){return JO($(e))}function a$(e,t){return Xj($(e),typeof t==`number`?[0,0,t]:t)}function o$(e,t){let n=t?.at??[0,0,0];return Zj($(e),n,t?.axis??[0,0,1],t?.angle??2*Math.PI)}function s$(e,t){return $j(e.map(e=>$(e)),t)}function c$(e,n){if(n===void 0){let t=LE(e);if(t.length===0)return k(F(N.COMPOUND_NO_FACES,`compoundOps: shape has no faces`));let n=Nk(t),r=QD(n)[2];for(let e=1;e<t.length;e++){let i=Mk(t,e),a=QD(i)[2];a>r&&(n=i,r=a)}return O(n)}if(typeof n==`function`){let r=n(XP()).findAll(e);return r.length===0?k(go(N.COMPOUND_FACE_NOT_FOUND,`compoundOps: face finder matched no faces`)):O(t(r,0))}return O(n)}function l$(e){return`sketchOnPlane`in e&&typeof e.sketchOnPlane==`function`?e.sketchOnPlane(`XY`).wire:e}function u$(e,t){let n=$(e),{at:r,radius:i,axis:a}=t,o=a??[0,0,1];if(i<=0)return k(F(`DRILL_INVALID_RADIUS`,`Drill radius must be positive`));if(yD(o))return k(F(`DRILL_ZERO_AXIS`,`Drill axis cannot be zero`));let s=_D(o),c=r.length===2?[r[0],r[1],0]:[r[0],r[1],r[2]],l;if(t.depth!==void 0)l=SA(i,t.depth,c,s);else{let e=XE(n),t=[[e.xMin,e.yMin,e.zMin],[e.xMax,e.yMin,e.zMin],[e.xMin,e.yMax,e.zMin],[e.xMax,e.yMax,e.zMin],[e.xMin,e.yMin,e.zMax],[e.xMax,e.yMin,e.zMax],[e.xMin,e.yMax,e.zMax],[e.xMax,e.yMax,e.zMax]],r=1/0,a=-1/0;for(let e of t){let t=(e[0]-c[0])*s[0]+(e[1]-c[1])*s[1]+(e[2]-c[2])*s[2];t<r&&(r=t),t>a&&(a=t)}--r,a+=1,l=SA(i,a-r,[c[0]+s[0]*r,c[1]+s[1]*r,c[2]+s[2]*r],s)}return rA(n,l,{unsafe:!0})}function d$(e,t){let n=$(e),{profile:r,depth:i}=t;if(i<=0)return k(F(`POCKET_INVALID_DEPTH`,`Pocket depth must be positive`));let a=c$(n,t.face);if(A(a))return a;let o=a.value,s=ZD(o),c=QD(o),l=Jk(l$(r));if(A(l))return l;let u=Xj(PO(l.value,c),uD(_D(s),-i));return A(u)?u:rA(n,u.value,{unsafe:!0})}function f$(e,t){let n=$(e),{profile:r,height:i}=t;if(i<=0)return k(F(`BOSS_INVALID_HEIGHT`,`Boss height must be positive`));let a=c$(n,t.face);if(A(a))return a;let o=a.value,s=ZD(o),c=QD(o),l=Jk(l$(r));if(A(l))return l;let u=Xj(PO(l.value,c),uD(_D(s),i));return A(u)?u:nA(n,u.value,{unsafe:!0})}function p$(e,t){let n=$(e),r=t?.normal??[1,0,0],i=t?.at;return yD(r)?k(F(`MIRROR_ZERO_NORMAL`,`Mirror plane normal cannot be zero`)):nA(n,IO(n,r,i),{unsafe:!0})}function m$(e,t){let n=$(e),{xDir:r,xCount:i,xSpacing:a,yDir:o,yCount:s,ySpacing:c}=t;if(i<1||s<1)return k(F(`PATTERN_INVALID_COUNT`,`Pattern counts must be at least 1`));if(yD(r))return k(F(`PATTERN_ZERO_DIRECTION`,`X direction cannot be zero`));if(yD(o))return k(F(`PATTERN_ZERO_DIRECTION`,`Y direction cannot be zero`));if(i===1&&s===1)return O(n);let l=_D(r),u=_D(o),d=[n];for(let e=0;e<i;e++)for(let t=0;t<s;t++){if(e===0&&t===0)continue;let r=[l[0]*a*e+u[0]*c*t,l[1]*a*e+u[1]*c*t,l[2]*a*e+u[2]*c*t];d.push(PO(n,r))}return oA(d,{unsafe:!0})}var h$=class extends Error{code;kind;suggestion;metadata;constructor(e){let t=e.suggestion?`${e.message}\nSuggestion: ${e.suggestion}`:e.message;super(t),this.name=`BrepError`,this.code=e.code,this.kind=e.kind,e.suggestion&&(this.suggestion=e.suggestion),e.metadata&&(this.metadata=e.metadata)}};function g$(e){if(A(e))throw new h$(e.error);return e.value}function _$(e){return e}function v$(e){return e}function y$(e){return e}function b$(e){return e}function x$(e){return{val:e,__wrapped:!0,translate:t=>j$(TQ(e,t)),rotate:(t,n)=>j$(EQ(e,t,n)),mirror:t=>j$(DQ(e,t)),scale:(t,n)=>j$(OQ(e,t,n)),applyMatrix:t=>j$(g$(AQ(e,t))),moveX:t=>j$(TQ(e,[t,0,0])),moveY:t=>j$(TQ(e,[0,t,0])),moveZ:t=>j$(TQ(e,[0,0,t])),rotateX:t=>j$(EQ(e,t,{axis:[1,0,0]})),rotateY:t=>j$(EQ(e,t,{axis:[0,1,0]})),rotateZ:t=>j$(EQ(e,t,{axis:[0,0,1]})),bounds:()=>XE(e),describe:()=>e$(e),clone:()=>j$(g$(kQ(e))),mesh:t=>QQ(e,t),meshEdges:t=>$Q(e,t),isValid:()=>r$(e),isEmpty:()=>i$(e),heal:()=>j$(g$(XQ(e))),simplify:()=>j$(g$(ZQ(e))),toBREP:()=>g$(t$(e)),apply:t=>j$(t(e)),applyResult:t=>j$(g$(t(e))),done:()=>e}}function S$(e){return{fuse:(t,n)=>M$(g$(MQ(e,$(t),{...n,unsafe:!0}))),cut:(t,n)=>M$(g$(NQ(e,$(t),{...n,unsafe:!0}))),intersect:(t,n)=>M$(g$(IQ(e,$(t),{...n,unsafe:!0}))),fuseAll:(t,n)=>M$(b$(g$(oA([e,...t.map($)],{...n,unsafe:!0})))),cutAll:(t,n)=>M$(b$(g$(sA(e,t,{...n,unsafe:!0})))),section:(t,n)=>j$(g$(LQ(e,t,n))),split:t=>j$(g$(zQ(e,t))),slice:(t,n)=>g$(BQ(e,t,n))}}function C$(e){return{fillet(...t){return t.length===1?M$(b$(g$(WQ(_$(e),t[0])))):M$(b$(g$(WQ(_$(e),t[0],t[1]))))},chamfer(...t){return t.length===1?M$(b$(g$(GQ(_$(e),t[0])))):M$(b$(g$(GQ(_$(e),t[0],t[1]))))},shell:(t,n,r)=>M$(b$(g$(KQ(_$(e),t,n,r)))),offset:(t,n)=>M$(b$(g$(qQ(_$(e),t,n)))),draft:(t,n)=>M$(b$(g$(YQ(_$(e),t,n))))}}function w$(e){return{drill:t=>M$(g$(u$(e,t))),pocket:t=>M$(g$(d$(e,t))),boss:t=>M$(g$(f$(e,t))),mirrorJoin:t=>M$(g$(p$(e,t))),rectangularPattern:t=>M$(g$(m$(e,t)))}}function T$(e){return{volume:()=>g$(hP(e)),area:()=>g$(gP(e)),volumeProps:()=>g$(fP(e)),surfaceProps:()=>g$(pP(e))}}function E$(e){return{edges:()=>IE(e),faces:()=>LE(e),wires:()=>RE(e),vertices:()=>zE(e)}}function D$(e){return{linearPattern:(t,n,r)=>M$(b$(g$(jM(e,t,n,r)))),circularPattern:(t,n,r)=>M$(b$(g$(MM(e,t,n,r))))}}function O$(e){return{...x$(e),...S$(e),...C$(e),...w$(e),...T$(e),...E$(e),...D$(e)}}function k$(e){return{...x$(e),length:()=>rk(e),startPoint:()=>$O(e),endPoint:()=>ek(e),pointAt:t=>tk(e,t),tangentAt:t=>nk(e,t),isClosed:()=>ak(e),sweep(t,n){if(!_E(e))throw Error(`sweep requires a Wire`);let r=g$(Hj(y$(e),$(t),n));return M$(Array.isArray(r)?r[0]:r)}}}function A$(e){return{...x$(e),area:()=>g$(gP(e)),normalAt:t=>ZD(e,t),center:()=>QD(e),surfaceType:()=>g$(UD(e)),outerWire:()=>tO(e),innerWires:()=>rO(e),extrude:t=>M$(g$(a$(v$(e),t))),revolve:t=>M$(g$(o$(v$(e),t)))}}function j$(e){return SE(e)?O$(e):vE(e)?A$(e):gE(e)||_E(e)?k$(e):x$(e)}function M$(e){return O$(e)}function N$(e){if(e&&typeof e==`object`&&`face`in e&&typeof e.face==`function`&&`_defaultOrigin`in e)return A$(e.face());if(e&&typeof e==`object`&&`wrapped`in e)return vE(e)?A$(e):SE(e)?O$(e):gE(e)||_E(e)?k$(e):x$(e);throw Error(`shape() requires a Sketch or branded shape type`)}var P$=.25,F$=e=>Math.tan(e)-e;function I$(e,t,n,r){let i=e/Math.cos(t),a=n+r*(Math.tan(t)-t);return[i*Math.cos(a),i*Math.sin(a),0]}function L$(e,t,n,r,i){let a=[];for(let o=0;o<=r;o++){let s=.5-.5*Math.cos(o/r*Math.PI);a.push(I$(e,s*t,n,i))}return a}function R$(e){return Math.max(16,Math.round(8*Math.sqrt(e)))}function z$(e,t,n,r,i,a,o){let s=e*t/2,c=s*Math.cos(n),l=t*(1+r),u=t*(1+i-r),d=o?s-t*(1-r):s+l,f=o?s+t*(1+i+r):s-u,p=a/s,m=(Math.PI/2+2*r*Math.tan(n))/e+(o?p:-p),h=o?f:d;return{rPitch:s,rb:c,rTip:d,rRoot:f,alphaPitch:n,halfToothAngle:m,alphaTip:h<=c?0:Math.acos(Math.min(1,c/h)),toothPitch:2*Math.PI/e,isInternal:o}}function B$(e,t,n){if(t===0)return O(e);let r=F$(e)+2*t*Math.tan(e)/n,i,a;if(r>F$(e)?(i=e,a=Math.PI/2-1e-6):(i=1e-4,a=e),r>F$(a)||r<F$(i))return k(F(`GEAR_PA_OUT_OF_RANGE`,`working pressure angle out of range — target inv(αw)=${r.toFixed(4)} not in [${F$(i).toFixed(4)}, ${F$(a).toFixed(4)}]`,void 0,{target:r,invLo:F$(i),invHi:F$(a)}));for(let e=0;e<50;e++){let e=.5*(i+a);F$(e)<r?i=e:a=e}return O(.5*(i+a))}function V$(e,t,n,r,i){return B$(e,t+n,r+i)}function H$(e,t,n,r,i){return B$(e,n-t,i-r)}function U$(e,t,n,r,i){return(e+t)*n*Math.cos(r)/(2*Math.cos(i))}function W$(e,t,n,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(n))return k(F(`GEAR_NON_INTEGER_TEETH`,`tooth counts and planet count must be integers`));if(e<4||t<4||n<2)return k(F(`GEAR_TEETH_TOO_FEW`,`zs ≥ 4, zp ≥ 4, N ≥ 2 required`));if((2*e+2*t)%n!=0)return k(F(`GEAR_ASSEMBLY`,`(2·zs + 2·zp) must be divisible by N — got ${2*e+2*t} mod ${n} = ${(2*e+2*t)%n}`));let i=t+2+2*r,a=(e+t)*Math.sin(Math.PI/n);return a<=i?k(F(`GEAR_PLANET_COLLISION`,`planet tips would collide: (zs+zp)·sin(π/N) = ${a.toFixed(3)} ≤ planet tip = ${i.toFixed(3)}`)):O(void 0)}function G$(e,t,n,r,i,a,o,s){return(Math.sqrt(Math.max(0,e*e-t*t))+Math.sqrt(Math.max(0,n*n-r*r))-i*Math.sin(s))/(Math.PI*a*Math.cos(o))}function K$(e,t,n,r,i,a,o,s){return(Math.sqrt(Math.max(0,e*e-t*t))-Math.sqrt(Math.max(0,n*n-r*r))+i*Math.sin(s))/(Math.PI*a*Math.cos(o))}function q$(e,t){return 1-e*Math.sin(t)*Math.sin(t)/2}function J$(e,t,n){return Math.max(0,q$(e,t)-n)}function Y$(e){return e<8?.2:.485-2.88/e}function X$(e,t,n,r){let i=e*1e3,a=Y$(r);return a<=0||n<=0||t<=0?1/0:2*i/(r*t*t*n*a)}function Z$(e,t,n=!1){let r=(1.4+6.5/e)*(20/(t*180/Math.PI))**.15;return n?r*.85:r}function Q$(e,t,n,r,i,a=!1){return X$(e,t,n,r)*Z$(r,i,a)}function $$(e){return e/2}function e1(e,t){return e+2*t}function t1(e){return e%2==0?Math.PI/e:0}function n1(e,t,n){return e*(1+t/n)+t1(n)}function r1(e={}){let t=e.moduleSize??3,n=e.sunTeeth??15,r=e.planetTeeth??12,i=e.numPlanets??3,a=(e.pressureAngleDeg??20)*Math.PI/180,o=e.sunShift??0,s=e.planetShift??0,c=W$(n,r,i,s);if(A(c))return c;let l=V$(a,o,s,n,r);if(A(l))return l;let u=U$(n,r,t,a,l.value),d=[];for(let e=0;e<i;e++){let t=e*2*Math.PI/i,a=n1(t,n,r);d.push({rotationDeg:a*180/Math.PI,position:[u*Math.cos(t),u*Math.sin(t),0]})}return O(d)}function i1(e,t,n,r,i){let a=t*e.toothPitch,o=(t+1)%n*e.toothPitch,s=F$(e.alphaPitch),c=a-e.halfToothAngle-s,l=a+e.halfToothAngle+s,u=L$(e.rb,e.alphaTip,c,r,1),d=L$(e.rb,e.alphaTip,l,r,-1).reverse(),f=Nk(u),p=Pk(u),m=Nk(d),h=Pk(d),g=[],_=e=>{i.register(e),g.push(e)},v=e.isInternal?e.rb<e.rRoot:e.rb>e.rRoot;v&&_(Lk([e.rRoot*Math.cos(c),e.rRoot*Math.sin(c),0],f));let y=e.rPitch*1e-5,b=Wk(u,{tolerance:y});if(A(b))return b;_(b.value),_(Vk(p,[e.rTip*Math.cos(a),e.rTip*Math.sin(a),0],m));let x=Wk(d,{tolerance:y});if(A(x))return x;_(x.value),v&&_(Lk(h,[e.rRoot*Math.cos(l),e.rRoot*Math.sin(l),0]));let S=o-e.halfToothAngle-s,C=.5*(l+S);return S<l&&(C+=Math.PI),_(Vk(v?[e.rRoot*Math.cos(l),e.rRoot*Math.sin(l),0]:h,[e.rRoot*Math.cos(C),e.rRoot*Math.sin(C),0],v?[e.rRoot*Math.cos(S),e.rRoot*Math.sin(S),0]:[e.rb*Math.cos(S),e.rb*Math.sin(S),0])),O(g)}function a1(e){return s1(e,!1)}function o1(e){return s1(e,!0)}function s1(e,t){try{var n=xT();let{teeth:r,moduleSize:i,pressureAngle:a,shift:o,clearance:s,flankThinning:c,samples:l=R$(i)}=e;if(r<4)return k(F(`GEAR_TEETH_TOO_FEW`,`gear needs ≥ 4 teeth, got ${r}`));if(i<=0)return k(F(`GEAR_MODULE_NONPOSITIVE`,`module must be > 0, got ${i}`));let u=z$(r,i,a,o,s,c,t),d=n.u(new NT),f=[];for(let e=0;e<r;e++){let t=i1(u,e,r,l,d);if(A(t))return t;f.push(...t.value)}let p=qk(f);return A(p)?p:O(p.value)}catch(e){n.e=e}finally{n.d()}}function c1(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=P$,flankThinning:s=0,bore:c=0,samples:l}=e;if(r<=0)return k(F(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));if(l!==void 0&&(!Number.isInteger(l)||l<1))return k(F(`GEAR_SAMPLES_INVALID`,`samples must be a positive integer; got ${String(l)}`));let u=i*Math.PI/180,d=z$(t,n,u,a,o,s,!1);if(c>0&&c>=2*d.rRoot)return k(F(`GEAR_BORE_TOO_LARGE`,`bore diameter ${c.toFixed(2)} ≥ root diameter ${(2*d.rRoot).toFixed(2)} — would erase the gear teeth`));let f=a1({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(A(f))return f;let p=u1(t,u,a);return h1(f.value,r,c,d,p)}function l1(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=P$,flankThinning:s=0,ringWallThickness:c=2*e.moduleSize,samples:l}=e;if(r<=0)return k(F(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));if(c<=0)return k(F(`GEAR_WALL_NONPOSITIVE`,`ringWallThickness must be > 0`));if(l!==void 0&&(!Number.isInteger(l)||l<1))return k(F(`GEAR_SAMPLES_INVALID`,`samples must be a positive integer; got ${String(l)}`));let u=i*Math.PI/180,d=o1({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(A(d))return d;let f=z$(t,n,u,a,o,s,!0),p=m1(f.rPitch+c);return A(p)?p:_1(p.value,d.value,r,f,[])}function u1(e,t,n){let r=J$(e,t,n);return r<=0?[]:[{code:`UNDERCUT_RISK`,severity:`warning`,message:`gear is undercut: increase shift by ${r.toFixed(3)} to avoid (z=${e})`,context:{deficit:r,teeth:e}}]}function d1(e){let t=p1(e);if(A(t))return t;let n=t.value,r=f1(n);if(A(r))return r;let{sun:i,planet:a,ring:o}=r.value,s=x1(n,i,a,o),c=y1(a.solid,n);a.solid.delete();let l=b1(o.solid,n.zr),u=S1(n,s);return O({sun:i.solid,planets:c,ring:l,ringTeeth:n.zr,workingPressureAngle:n.alphaW_sp,centerDistance:n.centerDistance,contactRatio:{sunPlanet:s.crSunPlanet,planetRing:s.crPlanetRing},undercutDeficit:{sun:s.undercutSun,planet:s.undercutPlanet},...s.lewisStress?{lewisStress:s.lewisStress}:{},...s.stressConcentrationFactor?{stressConcentrationFactor:s.stressConcentrationFactor}:{},diagnostics:u})}function f1(e){let t=e.samples===void 0?{}:{samples:e.samples},n={moduleSize:e.moduleSize,thickness:e.thickness,pressureAngleDeg:e.pressureAngleDeg,clearance:e.clearance,flankThinning:e.bHalf,...t},r=c1({...n,teeth:e.sunTeeth,shift:e.sunShift,bore:e.sunBore});if(A(r))return r;let i=c1({...n,teeth:e.planetTeeth,shift:e.planetShift,bore:e.planetBore});if(A(i))return r.value.solid.delete(),i;let a=l1({...n,teeth:e.zr,shift:e.ringShift,ringWallThickness:e.ringWallThickness});return A(a)?(r.value.solid.delete(),i.value.solid.delete(),a):O({sun:r.value,planet:i.value,ring:a.value})}function p1(e){let t=e.moduleSize??3,n=e.sunTeeth??15,r=e.planetTeeth??12,i=e.numPlanets??3,a=e.pressureAngleDeg??20,o=a*Math.PI/180,s=e.sunShift??0,c=e.planetShift??0,l=e.ringShift??0;if(e.thickness<=0)return k(F(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));let u=W$(n,r,i,c);if(A(u))return u;let d=e1(n,r),f=V$(o,s,c,n,r);if(A(f))return f;let p=H$(o,c,l,r,d);if(A(p))return p;let m=U$(n,r,t,o,f.value);return O({moduleSize:t,sunTeeth:n,planetTeeth:r,numPlanets:i,pressureAngleDeg:a,alpha:o,alphaW_sp:f.value,alphaW_pr:p.value,clearance:e.clearance??.25,bHalf:$$(e.backlash??0),sunShift:s,planetShift:c,ringShift:l,ringWallThickness:e.ringWallThickness??2*t,thickness:e.thickness,sunBore:e.sunBore??0,planetBore:e.planetBore??0,...e.appliedTorque===void 0?{}:{appliedTorque:e.appliedTorque},...e.samples===void 0?{}:{samples:e.samples},zr:d,centerDistance:m})}function m1(e){try{var t=xT();let n=qk([t.u(new NT).register(Rk(e,[0,0,0],[0,0,1]))]);return A(n)?n:O(n.value)}catch(e){t.e=e}finally{t.d()}}function h1(e,t,n,r,i){try{var a=xT();let o=Jk(e);if(A(o))return o;let s=Xj(o.value,[0,0,t]);if(A(s))return s;if(n<=0)return O(v1(s.value,r,i));let c=a.u(new NT),l=g1(n/2);if(A(l))return l;c.register(l.value);let u=Xj(l.value,[0,0,t+1]);if(A(u))return u;c.register(u.value);let d=c.register(PO(u.value,[0,0,-.5])),f=rA(s.value,d);return A(f)?f:O(v1(f.value,r,i))}catch(e){a.e=e}finally{a.d()}}function g1(e){let t=m1(e);return A(t)?t:Jk(t.value)}function _1(e,t,n,r,i){let a=Jk(e,[t]);if(A(a))return a;let o=Xj(a.value,[0,0,n]);return A(o)?o:O(v1(o.value,r,i))}function v1(e,t,n=[]){return{solid:e,diagnostics:n,pitchDiameter:2*t.rPitch,baseDiameter:2*t.rb,tipDiameter:2*t.rTip,rootDiameter:2*t.rRoot}}function y1(e,t){let n=[];try{for(let r=0;r<t.numPlanets;r++){let i=r*2*Math.PI/t.numPlanets,a=FO(e,n1(i,t.sunTeeth,t.planetTeeth)*180/Math.PI);try{let e=[t.centerDistance*Math.cos(i),t.centerDistance*Math.sin(i),0];n.push(PO(a,e))}finally{a.delete()}}return n}catch(e){for(let e of n)e.delete();throw e}}function b1(e,t){let n=t1(t);if(n===0)return e;let r=FO(e,n*180/Math.PI);return e.delete(),r}function x1(e,t,n,r){let i={crSunPlanet:G$(t.tipDiameter/2,t.baseDiameter/2,n.tipDiameter/2,n.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_sp),crPlanetRing:K$(n.tipDiameter/2,n.baseDiameter/2,r.tipDiameter/2,r.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_pr),undercutSun:J$(e.sunTeeth,e.alpha,e.sunShift),undercutPlanet:J$(e.planetTeeth,e.alpha,e.planetShift)};if(e.appliedTorque!==void 0){let t=e.appliedTorque;i.lewisStress={sun:Q$(t,e.moduleSize,e.thickness,e.sunTeeth,e.alpha),planet:Q$(t*e.planetTeeth/e.sunTeeth,e.moduleSize,e.thickness,e.planetTeeth,e.alpha),ring:Q$(t*e.zr/e.sunTeeth,e.moduleSize,e.thickness,e.zr,e.alpha,!0)},i.stressConcentrationFactor={sun:Z$(e.sunTeeth,e.alpha),planet:Z$(e.planetTeeth,e.alpha),ring:Z$(e.zr,e.alpha,!0)}}return i}function S1(e,t){let n=[];t.crSunPlanet<1.2&&n.push({code:`CONTACT_RATIO_LOW_SUN_PLANET`,severity:`warning`,message:`sun-planet contact ratio ${t.crSunPlanet.toFixed(2)} is below 1.2 — may run unevenly`,context:{value:t.crSunPlanet}}),t.crPlanetRing<1.2&&n.push({code:`CONTACT_RATIO_LOW_PLANET_RING`,severity:`warning`,message:`planet-ring contact ratio ${t.crPlanetRing.toFixed(2)} is below 1.2 — may run unevenly`,context:{value:t.crPlanetRing}}),t.undercutSun>0&&n.push({code:`UNDERCUT_RISK_SUN`,severity:`warning`,message:`sun gear is undercut: increase sunShift by ${t.undercutSun.toFixed(3)} to avoid`,context:{deficit:t.undercutSun,sunTeeth:e.sunTeeth}}),t.undercutPlanet>0&&n.push({code:`UNDERCUT_RISK_PLANET`,severity:`warning`,message:`planet gear is undercut: increase planetShift by ${t.undercutPlanet.toFixed(3)} to avoid`,context:{deficit:t.undercutPlanet,planetTeeth:e.planetTeeth}});let r=Math.abs(e.sunShift)+Math.abs(e.planetShift)+Math.abs(e.ringShift);e.appliedTorque!==void 0&&r>.05&&n.push({code:`LEWIS_Y_SHIFT_UNCORRECTED`,severity:`info`,message:`Lewis stress uses unshifted Y(z) and K_f approximations; expect ±5% per 0.1 of profile shift`});let i=e.ringShift-(e.sunShift+2*e.planetShift);return Math.abs(i)>1e-6&&n.push({code:`PLANETARY_SHIFT_KINEMATIC_MISMATCH`,severity:`warning`,message:`ringShift should equal sunShift + 2·planetShift for both meshes to share working PA; off by ${i.toFixed(3)}`,context:{kinematicError:i,sunShift:e.sunShift,planetShift:e.planetShift,ringShift:e.ringShift}}),n}var C1=VJ({addHoles:()=>DM,bezier:()=>mM,box:()=>tM,bsplineApprox:()=>pM,circle:()=>cM,compound:()=>CM,cone:()=>iM,cylinder:()=>nM,ellipse:()=>lM,ellipseArc:()=>fM,ellipsoid:()=>oM,face:()=>vM,fill:()=>Yk,filledFace:()=>yM,helix:()=>uM,line:()=>sM,offsetFace:()=>TM,polygon:()=>xM,polyhedron:()=>eZ,sewShells:()=>EM,solid:()=>wM,sphere:()=>rM,subFace:()=>bM,tangentArc:()=>hM,threePointArc:()=>dM,torus:()=>aM,vertex:()=>SM,wire:()=>gM,wireLoop:()=>_M}),w1=VJ({checkBoolean:()=>ij,convexHull:()=>YX,cut:()=>NQ,cutAll:()=>sA,cutAllBisect:()=>YA,fuse:()=>MQ,fuseAll:()=>oA,fuseAllBisect:()=>$A,hull:()=>JX,intersect:()=>IQ,minkowski:()=>$X,section:()=>LQ,sectionToFace:()=>RQ,slice:()=>BQ,split:()=>zQ}),T1=VJ({chamfer:()=>GQ,draft:()=>YQ,fillet:()=>WQ,heal:()=>XQ,offset:()=>qQ,shell:()=>KQ,simplify:()=>ZQ,thicken:()=>JQ,variableFillet:()=>kj}),E1=VJ({applyMatrix:()=>AQ,clone:()=>kQ,composeTransforms:()=>UO,mirror:()=>DQ,rotate:()=>EQ,scale:()=>OQ,transformCopy:()=>jQ,translate:()=>TQ}),D1=VJ({checkAllInterferences:()=>tQ,checkInterference:()=>eQ,createDistanceQuery:()=>bP,measureArea:()=>gP,measureCurvatureAt:()=>xP,measureCurvatureAtMid:()=>SP,measureDistance:()=>vP,measureDistanceProps:()=>yP,measureLength:()=>_P,measureLinearProps:()=>mP,measureSurfaceProps:()=>pP,measureVolume:()=>hP,measureVolumeProps:()=>fP}),O1=VJ({blueprintToDXF:()=>wq,exportAssemblySTEP:()=>AM,exportDXF:()=>Cq,exportGlb:()=>uq,exportGltf:()=>lq,exportIGES:()=>Ak,exportOBJ:()=>$K,exportSTEP:()=>Ok,exportSTEPConfigured:()=>sJ,exportSTL:()=>kk,exportThreeMF:()=>Uq,importDXF:()=>oQ,importGLB:()=>CQ,importIGES:()=>uJ,importOBJ:()=>uQ,importSTEP:()=>cJ,importSTL:()=>lJ,importSVG:()=>oJ,importSVGPathD:()=>aJ,importThreeMF:()=>SQ}),k1=VJ({cornerFinder:()=>CI,edgeFinder:()=>qP,faceFinder:()=>XP,getSingleFace:()=>$P,vertexFinder:()=>XJ,wireFinder:()=>QP}),A1=VJ({complexExtrude:()=>Wj,extrude:()=>a$,guidedSweep:()=>Yj,loft:()=>s$,multiSectionSweep:()=>Jj,revolve:()=>o$,roof:()=>CZ,supportExtrude:()=>Uj,surfaceFromGrid:()=>UX,surfaceFromImage:()=>KX,sweep:()=>Hj,twistExtrude:()=>Gj}),j1=VJ({circularPattern:()=>MM,linearPattern:()=>jM}),M1=14695981039346656037n,N1=1099511628211n,P1=18446744073709551615n;function F1(){return M1}function I1(e,t){return(e^BigInt(t&255))*N1&P1}function L1(e,t){let n=e;for(let e=0;e<t.length;e++)n=I1(n,t[e]??0);return n}var R1=new TextEncoder;function z1(e,t){return L1(e,R1.encode(t))}var B1=new ArrayBuffer(8),V1=new DataView(B1),H1=new Uint8Array(B1);function U1(e,t){return V1.setFloat64(0,Object.is(t,-0)?0:t),L1(e,H1)}function W1(e,t){let n=e,r=t&P1;for(let e=0;e<8;e++)n=I1(n,Number(r&255n)),r>>=8n;return n}function G1(e,t){let n=e,r=t|0;for(let e=0;e<4;e++)n=I1(n,r&255),r>>>=8;return n}function K1(e,t){return I1(e,+!!t)}function q1(e){return(e&P1).toString(16).padStart(16,`0`)}var J1=new Set;function Y1(e){return z1(F1(),e)}function X1(e){return{kind:`NumLit`,value:e,structuralHash:U1(Y1(`NumLit`),e),freeParams:J1}}function Z1(e){let t=Y1(`Vec3Lit`);for(let n of e)t=U1(t,n);return{kind:`Vec3Lit`,value:e,structuralHash:t,freeParams:J1}}function Q1(e){let t=Y1(`Vec2Lit`);for(let n of e)t=U1(t,n);return{kind:`Vec2Lit`,value:e,structuralHash:t,freeParams:J1}}function $1(e){return{kind:`Param`,name:e,structuralHash:z1(Y1(`Param`),e),freeParams:new Set([e])}}function e0(e,t,n){let r=z1(Y1(`BinOp`),e);return r=W1(r,t.structuralHash),r=W1(r,n.structuralHash),{kind:`BinOp`,op:e,a:t,b:n,structuralHash:r,freeParams:u0(t.freeParams,n.freeParams)}}function t0(e,t){let n=z1(Y1(`UnaryOp`),e);return n=W1(n,t.structuralHash),{kind:`UnaryOp`,op:e,arg:t,structuralHash:n,freeParams:t.freeParams}}function n0(e,t){let n=G1(Y1(`Component`),t);return n=W1(n,e.structuralHash),{kind:`Component`,vec:e,index:t,structuralHash:n,freeParams:e.freeParams}}function r0(e,t){let n=G1(Y1(`BuildVec`),e),r=new Set;for(let e of t){n=W1(n,e.structuralHash);for(let t of e.freeParams)r.add(t)}return{kind:`BuildVec`,dim:e,components:t,structuralHash:n,freeParams:r}}var i0=(e,t)=>e0(`+`,e,t),a0=(e,t)=>e0(`*`,e,t);function o0(e){return typeof e==`number`?X1(e):e}function s0(e,t){if(!Array.isArray(e))return e;let n=e;return n.every(e=>typeof e==`number`)?t===3?Z1([n[0],n[1],n[2]]):Q1([n[0],n[1]]):r0(t,n.map(o0))}function c0(e){return s0(e,3)}function l0(e){return s0(e,2)}function u0(e,t){if(e.size===0)return t;if(t.size===0)return e;let n=new Set(e);for(let e of t)n.add(e);return n}function d0(e){return typeof e==`number`}function f0(e,t){return d0(e)?O(e):k(F(N.NULL_SHAPE_INPUT,`${t}: expected number, got ${Array.isArray(e)?`vector(${e.length})`:typeof e}`))}function p0(e,t,n){return Array.isArray(e)&&e.length===t?O(e):k(F(N.NULL_SHAPE_INPUT,`${n}: expected Vec${t}, got ${d0(e)?`number`:`vector(${e.length})`}`))}function m0(e,t){switch(e.kind){case`NumLit`:return O(e.value);case`Vec3Lit`:return O(e.value);case`Vec2Lit`:return O(e.value);case`Param`:{let n=t[e.name];return n===void 0?k(F(N.NULL_SHAPE_INPUT,`unbound param: ${e.name}`)):O(n)}case`BinOp`:return h0(e,t);case`UnaryOp`:return g0(e,t);case`Component`:return _0(e,t);case`BuildVec`:return v0(e,t)}}function h0(e,t){let n=m0(e.a,t);if(!n.ok)return n;let r=m0(e.b,t);if(!r.ok)return r;let i=f0(n.value,`BinOp(${e.op}).a`);if(!i.ok)return i;let a=f0(r.value,`BinOp(${e.op}).b`);if(!a.ok)return a;switch(e.op){case`+`:return O(i.value+a.value);case`-`:return O(i.value-a.value);case`*`:return O(i.value*a.value);case`/`:return a.value===0?k(F(N.NULL_SHAPE_INPUT,`BinOp(/): division by zero`)):O(i.value/a.value)}}function g0(e,t){let n=m0(e.arg,t);if(!n.ok)return n;let r=f0(n.value,`UnaryOp(${e.op})`);if(!r.ok)return r;let i=r.value;switch(e.op){case`neg`:return O(-i);case`sin`:return O(Math.sin(i));case`cos`:return O(Math.cos(i));case`sqrt`:return O(Math.sqrt(i));case`abs`:return O(Math.abs(i))}}function _0(e,t){let n=m0(e.vec,t);if(!n.ok)return n;if(d0(n.value))return k(F(N.NULL_SHAPE_INPUT,`Component: cannot index a scalar`));let r=n.value,i=r[e.index];return i===void 0?k(F(N.NULL_SHAPE_INPUT,`Component: index ${e.index} out of range for Vec${r.length}`)):O(i)}function v0(e,t){if(e.components.length!==e.dim)return k(F(N.NULL_SHAPE_INPUT,`BuildVec(${e.dim}): expected ${e.dim} components, got ${e.components.length}`));let n=[];for(let r of e.components){let e=m0(r,t);if(!e.ok)return e;let i=f0(e.value,`BuildVec.component`);if(!i.ok)return i;n.push(i.value)}return O(e.dim===2?[n[0],n[1]]:[n[0],n[1],n[2]])}function y0(e,t,n){let r=m0(e,t);return r.ok?f0(r.value,n):r}function b0(e,t,n){let r=m0(e,t);if(!r.ok)return r;let i=p0(r.value,3,n);if(!i.ok)return i;let[a,o,s]=i.value;return O([a,o,s])}function x0(e,t){if(t.size===0)return Object.freeze({});let n={};for(let r of t){let t=e[r];t!==void 0&&(n[r]=t)}return Object.freeze(n)}var S0=new Set;function C0(e){return z1(F1(),e)}function w0(e,t){return W1(e,t.structuralHash)}function T0(e,t){return t===void 0?K1(e,!1):w0(K1(e,!0),t)}function E0(e,t){return t===void 0?K1(e,!1):U1(K1(e,!0),t)}function D0(...e){let t=new Set;for(let n of e)if(n)for(let e of n.freeParams)t.add(e);return t.size===0?S0:t}function O0(e,t,n){let r=o0(e),i=o0(t),a=o0(n),o=C0(`Box`);return o=w0(w0(w0(o,r),i),a),{kind:`Box`,x:r,y:i,z:a,structuralHash:o,freeParams:D0(r,i,a)}}function k0(e){let t=o0(e);return{kind:`Sphere`,radius:t,structuralHash:w0(C0(`Sphere`),t),freeParams:t.freeParams}}function A0(e,t){let n=o0(e),r=o0(t);return{kind:`Cylinder`,radius:n,height:r,structuralHash:w0(w0(C0(`Cylinder`),n),r),freeParams:D0(n,r)}}function j0(e,t,n){let r=o0(e),i=o0(t),a=o0(n),o=C0(`Cone`);return o=w0(w0(w0(o,r),i),a),{kind:`Cone`,radius1:r,radius2:i,height:a,structuralHash:o,freeParams:D0(r,i,a)}}function M0(e,t){let n=o0(e),r=o0(t);return{kind:`Torus`,majorRadius:n,minorRadius:r,structuralHash:w0(w0(C0(`Torus`),n),r),freeParams:D0(n,r)}}function N0(e){let t=e.map(c0),n=G1(C0(`Polygon`),t.length);for(let e of t)n=w0(n,e);return{kind:`Polygon`,points:t,structuralHash:n,freeParams:D0(...t)}}function P0(e){let t=o0(e);return{kind:`Circle`,radius:t,structuralHash:w0(C0(`Circle`),t),freeParams:t.freeParams}}function F0(e,t){let n=c0(e),r=c0(t);return{kind:`Line`,from:n,to:r,structuralHash:w0(w0(C0(`Line`),n),r),freeParams:D0(n,r)}}function I0(e){let t=c0(e);return{kind:`Vertex`,point:t,structuralHash:w0(C0(`Vertex`),t),freeParams:t.freeParams}}function L0(e){return{kind:`Empty`,output:e,structuralHash:z1(C0(`Empty`),e),freeParams:S0}}function R0(){return L0(`Solid`)}function z0(){return L0(`Face`)}function B0(){return L0(`Wire`)}function V0(e,t,n,r){return E0(w0(w0(C0(e),t),n),r)}function H0(e,t,n){return{kind:`Fuse`,a:e,b:t,tolerance:n,structuralHash:V0(`Fuse`,e,t,n),freeParams:D0(e,t)}}function U0(e,t,n){return{kind:`Cut`,a:e,b:t,tolerance:n,structuralHash:V0(`Cut`,e,t,n),freeParams:D0(e,t)}}function W0(e,t,n){return{kind:`Intersect`,a:e,b:t,tolerance:n,structuralHash:V0(`Intersect`,e,t,n),freeParams:D0(e,t)}}function G0(e,t){let n=G1(C0(`FuseAll`),e.length);for(let t of e)n=w0(n,t);return n=E0(n,t),{kind:`FuseAll`,shapes:e,tolerance:t,structuralHash:n,freeParams:D0(...e)}}function K0(e,t,n){let r=w0(C0(`CutAll`),e);r=G1(r,t.length);for(let e of t)r=w0(r,e);return r=E0(r,n),{kind:`CutAll`,base:e,tools:t,tolerance:n,structuralHash:r,freeParams:D0(e,...t)}}function q0(e){return e===void 0?void 0:c0(e)}function J0(e,t){let n=c0(t);return{kind:`Translate`,target:e,vector:n,structuralHash:w0(w0(C0(`Translate`),e),n),freeParams:D0(e,n)}}function Y0(e,t,n){let r=o0(t),i=q0(n?.axis),a=q0(n?.at),o=w0(w0(C0(`Rotate`),e),r);return o=T0(o,i),o=T0(o,a),{kind:`Rotate`,target:e,angle:r,axis:i,at:a,structuralHash:o,freeParams:D0(e,r,i,a)}}function X0(e,t,n){let r=o0(t),i=q0(n?.center),a=w0(w0(C0(`Scale`),e),r);return a=T0(a,i),{kind:`Scale`,target:e,factor:r,center:i,structuralHash:a,freeParams:D0(e,r,i)}}function Z0(e,t){let n=q0(t?.normal),r=q0(t?.at),i=w0(C0(`Mirror`),e);return i=T0(i,n),i=T0(i,r),{kind:`Mirror`,target:e,normal:n,at:r,structuralHash:i,freeParams:D0(e,n,r)}}function Q0(e){let t=G1(C0(`Compound`),e.length);for(let n of e)t=w0(t,n);return{kind:`Compound`,children:e,structuralHash:t,freeParams:D0(...e)}}function $0(e){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:return`Solid`;case`Polygon`:return`Face`;case`Circle`:case`Line`:return`Edge`;case`Vertex`:return`Vertex`;case`Empty`:return e.output;case`Fuse`:case`Cut`:case`Intersect`:return $0(e.a);case`FuseAll`:return e.shapes[0]?$0(e.shapes[0]):`Solid`;case`CutAll`:return $0(e.base);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return $0(e.target);case`Compound`:return`Compound`}}function e2(e,t){let n=y0(e.x,t.env,`Box.x`);if(!n.ok)return n;let r=y0(e.y,t.env,`Box.y`);if(!r.ok)return r;let i=y0(e.z,t.env,`Box.z`);return i.ok?O(tM(n.value,r.value,i.value)):i}function t2(e,t){let n=y0(e.radius,t.env,`Sphere.radius`);return n.ok?O(rM(n.value)):n}function n2(e,t){let n=y0(e.radius,t.env,`Cylinder.radius`);if(!n.ok)return n;let r=y0(e.height,t.env,`Cylinder.height`);return r.ok?O(nM(n.value,r.value)):r}function r2(e,t){let n=y0(e.radius1,t.env,`Cone.radius1`);if(!n.ok)return n;let r=y0(e.radius2,t.env,`Cone.radius2`);if(!r.ok)return r;let i=y0(e.height,t.env,`Cone.height`);return i.ok?O(iM(n.value,r.value,i.value)):i}function i2(e,t){let n=y0(e.majorRadius,t.env,`Torus.majorRadius`);if(!n.ok)return n;let r=y0(e.minorRadius,t.env,`Torus.minorRadius`);return r.ok?O(aM(n.value,r.value)):r}function a2(e,t){let n=[];for(let r of e.points){let e=b0(r,t.env,`Polygon.point`);if(!e.ok)return e;n.push(e.value)}return xM(n)}function o2(e,t){let n=y0(e.radius,t.env,`Circle.radius`);return n.ok?O(cM(n.value)):n}function s2(e,t){let n=b0(e.from,t.env,`Line.from`);if(!n.ok)return n;let r=b0(e.to,t.env,`Line.to`);return r.ok?O(sM(n.value,r.value)):r}function c2(e,t){let n=b0(e.point,t.env,`Vertex.point`);return n.ok?O(SM(n.value)):n}function l2(e){return k(mo(N.NULL_SHAPE_INPUT,`${e}: empty result has no kernel representation`))}function u2(e,t,n){let r=e.evalNode(t);return r.ok?SE(r.value)?O(r.value):k(uo(N.CSG_NOT_3D,`${n}: operand did not produce a 3D shape`)):r}function d2(e,t){return{unsafe:!0,fuzzyValue:e.tolerance??t.tolerance}}function f2(e,t){if(e.a.kind===`Empty`)return t.evalNode(e.b);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=u2(t,e.a,`Fuse.a`);if(!n.ok)return n;let r=u2(t,e.b,`Fuse.b`);return r.ok?nA(n.value,r.value,d2(e,t)):r}function p2(e,t){if(e.a.kind===`Empty`)return l2(`Cut`);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=u2(t,e.a,`Cut.a`);if(!n.ok)return n;let r=u2(t,e.b,`Cut.b`);return r.ok?rA(n.value,r.value,d2(e,t)):r}function m2(e,t){if(e.a.kind===`Empty`||e.b.kind===`Empty`)return l2(`Intersect`);let n=u2(t,e.a,`Intersect.a`);if(!n.ok)return n;let r=u2(t,e.b,`Intersect.b`);return r.ok?iA(n.value,r.value,d2(e,t)):r}function h2(e,t,n){let r=[];for(let i of t){let t=u2(e,i,n);if(!t.ok)return t;r.push(t.value)}return O(r)}function g2(e,t){let n=e.shapes.filter(e=>e.kind!==`Empty`);if(n.length===0)return l2(`FuseAll`);if(n.length===1&&n[0])return t.evalNode(n[0]);let r=h2(t,n,`FuseAll.operand`);return r.ok?oA(r.value,d2(e,t)):r}function _2(e,t){if(e.base.kind===`Empty`)return l2(`CutAll`);let n=e.tools.filter(e=>e.kind!==`Empty`);if(n.length===0)return t.evalNode(e.base);let r=u2(t,e.base,`CutAll.base`);if(!r.ok)return r;let i=h2(t,n,`CutAll.tool`);return i.ok?sA(r.value,i.value,d2(e,t)):i}function v2(e){return k(mo(N.NULL_SHAPE_INPUT,`${e}: cannot transform an Empty node`))}function y2(e,t,n,r){return e?b0(e,t,n):O(r)}function b2(e,t){if(e.target.kind===`Empty`)return v2(`Translate`);let n=b0(e.vector,t.env,`Translate.vector`);if(!n.ok)return n;let r=t.evalNode(e.target);return r.ok?O(PO(r.value,n.value)):r}function x2(e,t){if(e.target.kind===`Empty`)return v2(`Rotate`);let n=y0(e.angle,t.env,`Rotate.angle`);if(!n.ok)return n;let r=y2(e.axis,t.env,`Rotate.axis`,[0,0,1]);if(!r.ok)return r;let i=y2(e.at,t.env,`Rotate.at`,[0,0,0]);if(!i.ok)return i;let a=t.evalNode(e.target);return a.ok?O(FO(a.value,n.value,i.value,r.value)):a}function S2(e,t){if(e.target.kind===`Empty`)return v2(`Scale`);let n=y0(e.factor,t.env,`Scale.factor`);if(!n.ok)return n;let r=y2(e.center,t.env,`Scale.center`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?O(LO(i.value,n.value,r.value)):i}function C2(e,t){if(e.target.kind===`Empty`)return v2(`Mirror`);let n=y2(e.normal,t.env,`Mirror.normal`,[1,0,0]);if(!n.ok)return n;let r=y2(e.at,t.env,`Mirror.at`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?O(IO(i.value,n.value,r.value)):i}function w2(e,t){let n=e.children.filter(e=>e.kind!==`Empty`);if(n.length===0)return k(mo(N.NULL_SHAPE_INPUT,`Compound: cannot materialize a compound with zero non-empty children`));let r=[];for(let e of n){let n=t.evalNode(e);if(!n.ok)return n;r.push(n.value)}return O(CM(r))}function T2(){return k(mo(N.NULL_SHAPE_INPUT,`Empty: cannot materialize an Empty node directly — only valid as boolean/transform operand`))}function E2(e,t){switch(e.kind){case`Box`:return e2(e,t);case`Sphere`:return t2(e,t);case`Cylinder`:return n2(e,t);case`Cone`:return r2(e,t);case`Torus`:return i2(e,t);case`Polygon`:return a2(e,t);case`Circle`:return o2(e,t);case`Line`:return s2(e,t);case`Vertex`:return c2(e,t);case`Empty`:return T2();case`Fuse`:return f2(e,t);case`Cut`:return p2(e,t);case`Intersect`:return m2(e,t);case`FuseAll`:return g2(e,t);case`CutAll`:return _2(e,t);case`Translate`:return b2(e,t);case`Rotate`:return x2(e,t);case`Scale`:return S2(e,t);case`Mirror`:return C2(e,t);case`Compound`:return w2(e,t)}}function D2(e,t){if(typeof t==`number`)return U1(K1(e,!1),t);let n=K1(e,!0);n=G1(n,t.length);for(let e of t)n=U1(n,e);return n}function O2(e,t){if(t.size===0)return F1();let n=x0(e,t),r=Object.keys(n).sort(),i=F1();for(let e of r){i=z1(i,e);let t=n[e];t!==void 0&&(i=D2(i,t))}return i}function k2(e,t,n,r){let i=O2(t,e.freeParams),a=r===void 0?`d`:U1(F1(),r).toString(16);return`${q1(e.structuralHash)}:${n}:${q1(i)}:${a}`}var A2=class{scope=new NT;cache=new Map;registered=new WeakSet;kernelId;defaultTolerance;onStep;hits=0;misses=0;constructor(e={}){this.kernelId=e.kernel??uT()??`unregistered`,this.defaultTolerance=e.tolerance,e.onStep&&(this.onStep=e.onStep)}evaluate(e,t={}){return dT(this.kernelId,()=>this.evaluateInner(e,t))}evaluateInner(e,t){let n=k2(e,t,this.kernelId,this.defaultTolerance),r=this.cache.get(n);if(r!==void 0)return this.hits++,this.onStep?.({node:e,cacheKey:n,cacheHit:!0}),O(r);this.misses++;let i=E2(e,{env:t,tolerance:this.defaultTolerance,evalNode:e=>this.evaluateInner(e,t)});return i.ok?(this.registered.has(i.value)||(this.scope.register(i.value),this.registered.add(i.value)),this.cache.set(n,i.value),this.onStep?.({node:e,cacheKey:n,cacheHit:!1}),i):i}cacheStats(){return{hits:this.hits,misses:this.misses,entries:this.cache.size}}resetStats(){this.hits=0,this.misses=0}[Symbol.dispose](){this.scope[Symbol.dispose](),this.cache.clear()}};function j2(e,t){try{var n=xT();let r=t(n.u(new A2(e)));if(r instanceof Promise)throw Error(`withEvaluator() callback returned a Promise. Async code must construct an Evaluator directly and dispose it manually — borrowed shapes would otherwise be freed before the Promise resolves.`);return r}catch(e){n.e=e}finally{n.d()}}function M2(e){return{csgVersion:1,root:R2(e)}}function N2(e){switch(e.kind){case`NumLit`:return{kind:`NumLit`,value:e.value};case`Vec3Lit`:return{kind:`Vec3Lit`,value:[e.value[0],e.value[1],e.value[2]]};case`Vec2Lit`:return{kind:`Vec2Lit`,value:[e.value[0],e.value[1]]};case`Param`:return{kind:`Param`,name:e.name};case`BinOp`:return{kind:`BinOp`,op:e.op,a:N2(e.a),b:N2(e.b)};case`UnaryOp`:return{kind:`UnaryOp`,op:e.op,arg:N2(e.arg)};case`Component`:return{kind:`Component`,vec:N2(e.vec),index:e.index};case`BuildVec`:return{kind:`BuildVec`,dim:e.dim,components:e.components.map(N2)}}}function P2(e){switch(e.kind){case`Box`:return{kind:`Box`,x:N2(e.x),y:N2(e.y),z:N2(e.z)};case`Sphere`:return{kind:`Sphere`,radius:N2(e.radius)};case`Cylinder`:return{kind:`Cylinder`,radius:N2(e.radius),height:N2(e.height)};case`Cone`:return{kind:`Cone`,radius1:N2(e.radius1),radius2:N2(e.radius2),height:N2(e.height)};case`Torus`:return{kind:`Torus`,majorRadius:N2(e.majorRadius),minorRadius:N2(e.minorRadius)};case`Polygon`:return{kind:`Polygon`,points:e.points.map(N2)};case`Circle`:return{kind:`Circle`,radius:N2(e.radius)};case`Line`:return{kind:`Line`,from:N2(e.from),to:N2(e.to)};case`Vertex`:return{kind:`Vertex`,point:N2(e.point)};case`Empty`:return{kind:`Empty`,output:e.output};default:return}}function F2(e){switch(e.kind){case`Fuse`:case`Cut`:case`Intersect`:return{kind:e.kind,a:R2(e.a),b:R2(e.b),tolerance:e.tolerance};case`FuseAll`:return{kind:`FuseAll`,shapes:e.shapes.map(R2),tolerance:e.tolerance};case`CutAll`:return{kind:`CutAll`,base:R2(e.base),tools:e.tools.map(R2),tolerance:e.tolerance};default:return}}function I2(e){return e?N2(e):void 0}function L2(e){switch(e.kind){case`Translate`:return{kind:`Translate`,target:R2(e.target),vector:N2(e.vector)};case`Rotate`:return{kind:`Rotate`,target:R2(e.target),angle:N2(e.angle),axis:I2(e.axis),at:I2(e.at)};case`Scale`:return{kind:`Scale`,target:R2(e.target),factor:N2(e.factor),center:I2(e.center)};case`Mirror`:return{kind:`Mirror`,target:R2(e.target),normal:I2(e.normal),at:I2(e.at)};default:return}}function R2(e){return e.kind===`Compound`?{kind:`Compound`,children:e.children.map(R2)}:P2(e)??F2(e)??L2(e)}function z2(e){return k(F(N.NULL_SHAPE_INPUT,`csg.fromJSON: ${e}`))}function B2(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function V2(e){return typeof e==`number`&&Number.isFinite(e)}function H2(e){return typeof e==`string`}function U2(e,t){if(!Array.isArray(e)||e.length!==3)return z2(`${t}: expected Vec3 array`);let[n,r,i]=e;return!V2(n)||!V2(r)||!V2(i)?z2(`${t}: Vec3 contains non-number`):O([n,r,i])}function W2(e,t){if(!Array.isArray(e)||e.length!==2)return z2(`${t}: expected Vec2 array`);let[n,r]=e;return!V2(n)||!V2(r)?z2(`${t}: Vec2 contains non-number`):O([n,r])}function G2(e){if(!B2(e))return z2(`input is not an object`);let t=e.csgVersion;if(t!==1)return z2(`unsupported csgVersion ${String(t)} (expected 1)`);let n=e.root;return $2(n)}function K2(e){if(!B2(e))return z2(`expression: not an object`);let t=e.kind;switch(t){case`NumLit`:return V2(e.value)?O(X1(e.value)):z2(`NumLit.value`);case`Vec3Lit`:{let t=U2(e.value,`Vec3Lit.value`);return t.ok?O(Z1(t.value)):t}case`Vec2Lit`:{let t=W2(e.value,`Vec2Lit.value`);return t.ok?O(Q1(t.value)):t}case`Param`:return H2(e.name)?O($1(e.name)):z2(`Param.name`);case`BinOp`:return q2(e);case`UnaryOp`:return J2(e);case`Component`:return Y2(e);case`BuildVec`:return X2(e);default:return z2(`unknown expression kind: ${String(t)}`)}}function q2(e){let t=e.op;if(t!==`+`&&t!==`-`&&t!==`*`&&t!==`/`)return z2(`BinOp.op: ${String(t)}`);let n=K2(e.a);if(!n.ok)return n;let r=K2(e.b);return r.ok?O(e0(t,n.value,r.value)):r}function J2(e){let t=e.op;if(!H2(t)||![`neg`,`sin`,`cos`,`sqrt`,`abs`].includes(t))return z2(`UnaryOp.op: ${String(t)}`);let n=K2(e.arg);return n.ok?O(t0(t,n.value)):n}function Y2(e){let t=e.index;if(t!==0&&t!==1&&t!==2)return z2(`Component.index: ${String(t)}`);let n=K2(e.vec);return n.ok?O(n0(n.value,t)):n}function X2(e){let t=e.dim;if(t!==2&&t!==3)return z2(`BuildVec.dim: ${String(t)}`);let n=e.components;if(!Array.isArray(n))return z2(`BuildVec.components: not array`);if(n.length!==t)return z2(`BuildVec.components: expected ${t} components, got ${n.length}`);let r=[];for(let e of n){let t=K2(e);if(!t.ok)return t;r.push(t.value)}return O(r0(t,r))}function Z2(e,t){if(!Array.isArray(e))return z2(`${t}: not array`);let n=[];for(let t of e){let e=$2(t);if(!e.ok)return e;n.push(e.value)}return O(n)}function Q2(e){let t=e.tolerance;return t==null?O(void 0):V2(t)?O(t):z2(`tolerance: not a finite number`)}function $2(e){if(!B2(e))return z2(`node: not an object`);let t=e.kind;switch(t){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:return t4(t,e);case`Fuse`:case`Cut`:case`Intersect`:return l4(t,e);case`FuseAll`:case`CutAll`:return u4(t,e);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return d4(t,e);case`Compound`:return _4(e);default:return z2(`unknown node kind: ${String(t)}`)}}function e4(e,t,n){let r=K2(e[t]);return r.ok?O(n(r.value)):r}function t4(e,t){switch(e){case`Box`:return n4(t);case`Sphere`:return e4(t,`radius`,k0);case`Cylinder`:return r4(t);case`Cone`:return i4(t);case`Torus`:return a4(t);case`Polygon`:return o4(t);case`Circle`:return e4(t,`radius`,P0);case`Line`:return s4(t);case`Vertex`:return e4(t,`point`,I0);case`Empty`:return c4(t)}return z2(`unhandled primitive: ${e}`)}function n4(e){let t=K2(e.x);if(!t.ok)return t;let n=K2(e.y);if(!n.ok)return n;let r=K2(e.z);return r.ok?O(O0(t.value,n.value,r.value)):r}function r4(e){let t=K2(e.radius);if(!t.ok)return t;let n=K2(e.height);return n.ok?O(A0(t.value,n.value)):n}function i4(e){let t=K2(e.radius1);if(!t.ok)return t;let n=K2(e.radius2);if(!n.ok)return n;let r=K2(e.height);return r.ok?O(j0(t.value,n.value,r.value)):r}function a4(e){let t=K2(e.majorRadius);if(!t.ok)return t;let n=K2(e.minorRadius);return n.ok?O(M0(t.value,n.value)):n}function o4(e){let t=e.points;if(!Array.isArray(t))return z2(`Polygon.points: not array`);let n=[];for(let e of t){let t=K2(e);if(!t.ok)return t;n.push(t.value)}return O(N0(n))}function s4(e){let t=K2(e.from);if(!t.ok)return t;let n=K2(e.to);return n.ok?O(F0(t.value,n.value)):n}function c4(e){let t=e.output;switch(t){case`Solid`:return O(R0());case`Face`:return O(z0());case`Wire`:return O(B0());default:return z2(`Empty.output: ${String(t)}`)}}function l4(e,t){let n=$2(t.a);if(!n.ok)return n;let r=$2(t.b);if(!r.ok)return r;let i=Q2(t);if(!i.ok)return i;switch(e){case`Fuse`:return O(H0(n.value,r.value,i.value));case`Cut`:return O(U0(n.value,r.value,i.value));case`Intersect`:return O(W0(n.value,r.value,i.value))}}function u4(e,t){let n=Q2(t);if(!n.ok)return n;if(e===`FuseAll`){let e=Z2(t.shapes,`FuseAll.shapes`);return e.ok?O(G0(e.value,n.value)):e}let r=$2(t.base);if(!r.ok)return r;let i=Z2(t.tools,`CutAll.tools`);return i.ok?O(K0(r.value,i.value,n.value)):i}function d4(e,t){let n=$2(t.target);if(!n.ok)return n;switch(e){case`Translate`:return f4(t,n.value);case`Rotate`:return m4(t,n.value);case`Scale`:return h4(t,n.value);case`Mirror`:return g4(t,n.value)}}function f4(e,t){let n=K2(e.vector);return n.ok?O(J0(t,n.value)):n}function p4(e,t){if(e[t]===void 0)return O(void 0);let n=K2(e[t]);return n.ok?O(n.value):n}function m4(e,t){let n=K2(e.angle);if(!n.ok)return n;let r=p4(e,`axis`);if(!r.ok)return r;let i=p4(e,`at`);return i.ok?O(Y0(t,n.value,{axis:r.value,at:i.value})):i}function h4(e,t){let n=K2(e.factor);if(!n.ok)return n;let r=p4(e,`center`);return r.ok?O(X0(t,n.value,{center:r.value})):r}function g4(e,t){let n=p4(e,`normal`);if(!n.ok)return n;let r=p4(e,`at`);return r.ok?O(Z0(t,{normal:n.value,at:r.value})):r}function _4(e){let t=Z2(e.children,`Compound.children`);return t.ok?O(Q0(t.value)):t}function v4(e){return x4(e)}function y4(e){switch(e.kind){case`NumLit`:case`Vec3Lit`:case`Vec2Lit`:case`Param`:return e;case`BinOp`:{let t=y4(e.a),n=y4(e.b);if(t.kind===`NumLit`&&n.kind===`NumLit`)switch(e.op){case`+`:return X1(t.value+n.value);case`-`:return X1(t.value-n.value);case`*`:return X1(t.value*n.value);case`/`:return X1(t.value/n.value)}return t!==e.a||n!==e.b?e0(e.op,t,n):e}case`UnaryOp`:{let t=y4(e.arg);if(t.kind===`NumLit`){let n=t.value;switch(e.op){case`neg`:return X1(-n);case`sin`:return X1(Math.sin(n));case`cos`:return X1(Math.cos(n));case`sqrt`:return X1(Math.sqrt(n));case`abs`:return X1(Math.abs(n))}}return t===e.arg?e:t0(e.op,t)}case`Component`:{let t=y4(e.vec);return t.kind===`Vec3Lit`||t.kind===`Vec2Lit`&&(e.index===0||e.index===1)?X1(t.value[e.index]):t===e.vec?e:n0(t,e.index)}case`BuildVec`:{let t=e.components.map(y4);return b4(e.dim,t)||(t.some((t,n)=>t!==e.components[n])?r0(e.dim,t):e)}}}function b4(e,t){if(t.length!==e)return;let n=[];for(let e of t){if(e.kind!==`NumLit`)return;n.push(e.value)}return e===2?Q1([n[0],n[1]]):Z1([n[0],n[1],n[2]])}function x4(e){switch(e.kind){case`Box`:return O0(y4(e.x),y4(e.y),y4(e.z));case`Sphere`:return k0(y4(e.radius));case`Cylinder`:return A0(y4(e.radius),y4(e.height));case`Cone`:return j0(y4(e.radius1),y4(e.radius2),y4(e.height));case`Torus`:return M0(y4(e.majorRadius),y4(e.minorRadius));case`Polygon`:return N0(e.points.map(y4));case`Circle`:return P0(y4(e.radius));case`Line`:return F0(y4(e.from),y4(e.to));case`Vertex`:return I0(y4(e.point));case`Empty`:return e;case`Fuse`:return S4(e.a,e.b,e.tolerance);case`Cut`:return C4(e.a,e.b,e.tolerance);case`Intersect`:return w4(e.a,e.b,e.tolerance);case`FuseAll`:return T4(e.shapes,e.tolerance);case`CutAll`:return E4(e.base,e.tools,e.tolerance);case`Translate`:return D4(e.target,e.vector);case`Rotate`:return Y0(x4(e.target),y4(e.angle),{axis:e.axis?y4(e.axis):void 0,at:e.at?y4(e.at):void 0});case`Scale`:return X0(x4(e.target),y4(e.factor),{center:e.center?y4(e.center):void 0});case`Mirror`:return Z0(x4(e.target),{normal:e.normal?y4(e.normal):void 0,at:e.at?y4(e.at):void 0});case`Compound`:return Q0(e.children.map(x4).filter(e=>e.kind!==`Empty`))}}function S4(e,t,n){let r=x4(e),i=x4(t);return r.kind===`Empty`?i:i.kind===`Empty`?r:H0(r,i,n)}function C4(e,t,n){let r=x4(e),i=x4(t);return i.kind===`Empty`||r.kind===`Empty`?r:U0(r,i,n)}function w4(e,t,n){let r=x4(e),i=x4(t);return r.kind===`Empty`?r:i.kind===`Empty`?i:W0(r,i,n)}function T4(e,t){let n=e.map(x4).filter(e=>e.kind!==`Empty`);return n.length===0?R0():n.length===1?n[0]:G0(n,t)}function E4(e,t,n){let r=x4(e);if(r.kind===`Empty`)return r;let i=t.map(x4).filter(e=>e.kind!==`Empty`);return i.length===0?r:K0(r,i,n)}function D4(e,t){let n=x4(e),r=y4(t);if(r.kind!==`Vec3Lit`)return J0(n,r);let[i,a,o]=r.value;if(i===0&&a===0&&o===0)return n;if(n.kind===`Translate`){let e=y4(n.vector);if(e.kind===`Vec3Lit`)return J0(n.target,[e.value[0]+i,e.value[1]+a,e.value[2]+o])}return J0(n,r)}function O4(e,t,n){return k4(e,t,n)}function k4(e,t,n){return t(e)?n:A4(e,t,n)}function A4(e,t,n){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:return e;case`Fuse`:return H0(k4(e.a,t,n),k4(e.b,t,n),e.tolerance);case`Cut`:return U0(k4(e.a,t,n),k4(e.b,t,n),e.tolerance);case`Intersect`:return W0(k4(e.a,t,n),k4(e.b,t,n),e.tolerance);case`FuseAll`:return G0(e.shapes.map(e=>k4(e,t,n)),e.tolerance);case`CutAll`:return K0(k4(e.base,t,n),e.tools.map(e=>k4(e,t,n)),e.tolerance);case`Translate`:return J0(k4(e.target,t,n),e.vector);case`Rotate`:return Y0(k4(e.target,t,n),e.angle,{axis:e.axis,at:e.at});case`Scale`:return X0(k4(e.target,t,n),e.factor,{center:e.center});case`Mirror`:return Z0(k4(e.target,t,n),{normal:e.normal,at:e.at});case`Compound`:return Q0(e.children.map(e=>k4(e,t,n)))}}function j4(e,t){t(e);for(let n of M4(e))j4(n,t)}function M4(e){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:return[];case`Fuse`:case`Cut`:case`Intersect`:return[e.a,e.b];case`FuseAll`:return e.shapes;case`CutAll`:return[e.base,...e.tools];case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return[e.target];case`Compound`:return e.children}}function N4(e){let t=0;return j4(e,()=>{t++}),t}var P4=VJ({CSG_VERSION:()=>1,Evaluator:()=>A2,add:()=>i0,asScalarExpr:()=>o0,asVec2Expr:()=>l0,asVec3Expr:()=>c0,binOp:()=>e0,box:()=>O0,buildVec:()=>r0,circle:()=>P0,component:()=>n0,compound:()=>Q0,cone:()=>j0,cut:()=>U0,cutAll:()=>K0,cylinder:()=>A0,emptyFace:()=>z0,emptySolid:()=>R0,emptyWire:()=>B0,foldExpr:()=>y4,forEachNode:()=>j4,fromJSON:()=>G2,fuse:()=>H0,fuseAll:()=>G0,intersect:()=>W0,line:()=>F0,mirror:()=>Z0,mul:()=>a0,nodeCount:()=>N4,numLit:()=>X1,optimize:()=>v4,outputKindOf:()=>$0,param:()=>$1,polygon:()=>N0,replaceNode:()=>O4,rotate:()=>Y0,scale:()=>X0,sphere:()=>k0,toJSON:()=>M2,torus:()=>M0,translate:()=>J0,unaryOp:()=>t0,vec2Lit:()=>Q1,vec3Lit:()=>Z1,vertex:()=>I0,withEvaluator:()=>j2});export{_I as BaseSketcher2d,vI as BlueprintSketcher,io as BrepBugError,N as BrepErrorCode,h$ as BrepWrapperError,wy as BrepkitAdapter,qW as CompoundSketch,i as DEFAULT_CAPABILITIES,nD as DEG2RAD,NT as DisposalScope,r as EXACT_BREP_CAPABILITIES,EG as FaceSketcher,G as HASH_CODE_MAX,Pa as OK,Na as OcctWasmAdapter,rD as RAD2DEG,lG as Sketch,TG as Sketcher,uG as Sketches,PM as addChild,DM as addHoles,dN as addJoint,QZ as addMate,KN as addStep,UA as adjacentFaces,Ua as all,Ra as andThen,WJ as applyGlue,AQ as applyMatrix,dk as approximateCurve,UT as as2D,HT as as3D,PD as asTopo,vJ as assignRoles,Fj as autoHeal,mM as bezier,wq as blueprintToDXF,vA as booleanPipeline,w1 as booleans,f$ as boss,tM as box,pM as bsplineApprox,M as bug,SG as cameraFromPlane,xG as cameraLookAt,hJ as captureHint,zD as cast,W as castShape,wE as castShape3D,GQ as chamfer,FA as chamferDistAngleShape,pj as chamferWithEvolution,tQ as checkAllInterferences,ij as checkBoolean,eQ as checkInterference,cM as circle,MM as circularPattern,eO as classifyPointOnFace,xk as clearMeshCache,kQ as clone,QT as closedWire,eo as collect,BM as collectShapes,DO as colorFaces,EO as colorShape,Wj as complexExtrude,UO as composeTransforms,CM as compound,oG as compoundSketchExtrude,iG as compoundSketchFace,cG as compoundSketchLoft,sG as compoundSketchRevolve,mo as computationError,hZ as computeStraightSkeleton,iM as cone,A1 as construction,YX as convexHull,CI as cornerFinder,zM as countNodes,kM as createAssembly,NM as createAssemblyNode,RK as createBlueprint,bG as createCamera,mE as createCompound,zK as createCompoundBlueprint,bP as createDistanceQuery,cE as createEdge,uE as createFace,jT as createHandle,GN as createHistory,MT as createKernelHandle,Sk as createMeshCache,DD as createNamedPlane,LJ as createOperationRegistry,TD as createPlane,yJ as createRef,$N as createRegistry,dE as createShell,fE as createSolid,kJ as createTaskQueue,sE as createVertex,lE as createWire,IJ as createWorkerClient,zJ as createWorkerHandler,P4 as csg,xo as currentQuality,AK as curve2dBoundingBox,LK as curve2dDistanceFrom,jK as curve2dFirstPoint,IK as curve2dIsOnCurve,MK as curve2dLastPoint,PK as curve2dParameter,NK as curve2dSplitAt,FK as curve2dTangentAt,ik as curveAxis,ek as curveEndPoint,ak as curveIsClosed,ok as curveIsPeriodic,rk as curveLength,sk as curvePeriod,tk as curvePointAt,$O as curveStartPoint,nk as curveTangentAt,NQ as cut,lL as cut2D,FQ as cutAll,YA as cutAllBisect,QI as cutBlueprints,uj as cutWithEvolution,nM as cylinder,iN as cylindricalJoint,mJ as defaultScorer,jJ as dequeueTask,e$ as describe,rK as deserializeDrawing,aP as deserializeHistory,VD as deserializeShape,RD as downcast,YQ as draft,aK as draw,uK as drawCircle,dK as drawEllipse,vK as drawFaceOutline,hK as drawParametricFunction,mK as drawPointsInterpolation,fK as drawPolysides,_K as drawProjection,sK as drawRectangle,oK as drawRoundedRectangle,cK as drawSingleCircle,lK as drawSingleEllipse,pK as drawText,wK as drawingChamfer,xK as drawingCut,CK as drawingFillet,bK as drawingFuse,SK as drawingIntersect,yK as drawingToSketchOnPlane,u$ as drill,qP as edgeFinder,BA as edgesOfFace,lM as ellipse,fM as ellipseArc,oM as ellipsoid,AJ as enqueueTask,k as err,AM as exportAssemblySTEP,Cq as exportDXF,uq as exportGlb,lq as exportGltf,Ak as exportIGES,$K as exportOBJ,Ok as exportSTEP,sJ as exportSTEPConfigured,kk as exportSTL,Uq as exportThreeMF,BN as exportURDF,a$ as extrude,Qj as extrudeAll,vM as face,$D as faceAxis,QD as faceCenter,XP as faceFinder,WD as faceGeomType,GD as faceOrientation,zA as facesOfEdge,LY as fieldBoolean,VY as fieldContour,RY as fieldOffset,BY as fieldReinit,zY as fieldShell,Yk as fill,yM as filledFace,WQ as fillet,fj as filletWithEvolution,hO as findFacesByTag,LM as findNode,JN as findStep,Rj as fixSelfIntersection,Ij as fixShape,za as flatMap,Ka as flatten,KD as flipFaceOrientation,lk as flipOrientation,pJ as fontMetrics,hN as forwardKinematics,n$ as fromBREP,IX as fromKernelDir,FX as fromKernelPnt,PX as fromKernelVec,Ja as fromNullable,MQ as fuse,sL as fuse2D,PQ as fuseAll,$A as fuseAllBisect,ZI as fuseBlueprints,lj as fuseWithEvolution,z$ as gearGeometry,nY as getActiveVoxelId,XE as getBounds,BK as getBounds2D,HE as getCompSolids,QO as getCurveType,TT as getDisposalStats,IE as getEdges,kO as getFaceColor,aO as getFaceOrigins,gO as getFaceTags,LE as getFaces,pG as getFont,qO as getHashCode,YN as getHistoryShape,U as getKernel,fT as getKernelCapabilities,gT as getKernelTier,GA as getNurbsCurveData,KA as getNurbsSurfaceData,ck as getOrientation,VK as getOrientation2D,Ao as getPerformanceStats,OO as getShapeColor,qT as getShapeKind,VE as getShells,$P as getSingleFace,BE as getSolids,UD as getSurfaceType,vO as getTagMetadata,zE as getVertices,tY as getVoxel,RE as getWires,Yj as guidedSweep,XQ as heal,Mj as healFace,jj as healSolid,Nj as healWire,uM as helix,JX as hull,oQ as importDXF,CQ as importGLB,uJ as importIGES,uQ as importOBJ,cJ as importSTEP,lJ as importSTL,oJ as importSVG,aJ as importSVGPathD,SQ as importThreeMF,WN as importURDF,bT as init,sT as initFromManifold,vT as initFromOC,rY as initVoxel,rO as innerWires,uk as interpolateCurve,IQ as intersect,uL as intersect2D,$I as intersectBlueprints,dj as intersectWithEvolution,FE as invalidateShapeCache,kN as inverseKinematics,O1 as io,ho as ioError,VT as is2D,BT as is3D,KJ as isChamferRadius,JT as isClosedWire,BD as isCompSolid,xE as isCompound,EJ as isDisposeRequest,gE as isEdge,i$ as isEmpty,XO as isEqualShape,A as isErr,OJ as isErrorResponse,vE as isFace,qJ as isFilletRadius,wJ as isInitRequest,HK as isInside2D,zT as isLive,XT as isManifoldShell,GJ as isNumber,Fa as isOk,TJ as isOperationRequest,YT as isOrientedFace,nE as isPlanarFace,rE as isPlanarWire,_G as isProjectionPlane,NJ as isQueueEmpty,YO as isSameShape,CE as isShape1D,SE as isShape3D,yE as isShell,bE as isSolid,DJ as isSuccessResponse,r$ as isValid,ZT as isValidSolid,hE as isVertex,_E as isWire,YE as iterCompSolids,UE as iterEdges,WE as iterFaces,JE as iterShells,qE as iterSolids,ID as iterTopo,KE as iterVertices,GE as iterWires,jN as jointTrajectory,uN as jointTransform,PN as jointsFromDH,OE as kernelCall,kE as kernelCallRaw,AE as kernelCallScoped,P as kernelError,OX as latticeInfill,kX as latticeInfillShape,sM as line,jM as linearPattern,fG as loadFont,s$ as loft,eM as loftAll,IG as makeBaseBox,c1 as makeExternalGear,l1 as makeInternalGear,kD as makePlane,d1 as makePlanetaryGear,yG as makeProjectedEdges,eE as manifoldShell,Ia as map,qa as mapBoth,La as mapErr,$a as match,gP as measureArea,xP as measureCurvatureAt,SP as measureCurvatureAtMid,vP as measureDistance,yP as measureDistanceProps,_P as measureLength,mP as measureLinearProps,pP as measureSurfaceProps,hP as measureVolume,fP as measureVolumeProps,D1 as measurement,gN as mechanismDOF,QQ as mesh,$Q as meshEdges,jk as meshMultiLOD,$X as minkowski,DQ as mirror,qK as mirror2D,OK as mirrorDrawing,p$ as mirrorJoin,T1 as modifiers,rP as modifyStep,po as moduleInitError,Jj as multiSectionSweep,ZD as normalAt,qQ as offset,TM as offsetFace,yY as offsetMesh,SY as offsetShape,fk as offsetWire2D,O as ok,Ba as or,Va as orElse,sI as organiseBlueprints,$T as orientedFace,tO as outerWire,j1 as patterns,MJ as pendingCount,ro as pipeline,MD as pivotPlane,iE as planarFace,aN as planarJoint,aE as planarWire,r1 as planetPlacements,d$ as pocket,JD as pointOnSurface,cY as pointsInside,xM as polygon,eZ as polyhedron,MG as polysideInnerRadius,wI as polysidesBlueprint,hj as positionOnCurve,yT as prewarm,C1 as primitives,rN as prismaticJoint,CG as projectEdges,XD as projectPointOnFace,k1 as query,go as queryError,m$ as rectangularPattern,RJ as registerHandler,cT as registerKernel,hT as registerKernelTier,eP as registerOperation,QN as registerShape,eY as registerVoxel,PJ as rejectAll,FM as removeChild,nO as removeHolesFromFace,dY as repairMesh,nP as replayFrom,tP as replayHistory,ET as resetDisposalStats,jo as resetPerformanceStats,RO as resize,$ as resolve,wQ as resolve3D,sD as resolveDirection,OD as resolvePlane,CJ as resolveRef,kK as reverseCurve,nN as revoluteJoint,o$ as revolve,CZ as roof,EQ as rotate,GK as rotate2D,EK as rotateDrawing,TI as roundedRectangleBlueprint,OQ as scale,KK as scale2D,DK as scaleDrawing,rX as sdfBox,sX as sdfCapsule,oX as sdfCone,aX as sdfCylinder,yX as sdfFieldAxialRamp,SX as sdfFieldClamp,vX as sdfFieldConst,xX as sdfFieldFromSdf,bX as sdfFieldRadialRamp,pX as sdfLattice,lX as sdfPlane,iX as sdfRoundedBox,nX as sdfSphere,mX as sdfStrutLattice,dX as sdfSweep,cX as sdfTorus,LQ as section,RQ as sectionToFace,iP as serializeHistory,cN as setJointValue,sN as setJointValues,iO as setShapeOrigin,_O as setTagMetadata,EM as sewShells,N$ as shape,pY as shapeToMeshInput,LD as shapeType,WA as sharedEdges,KQ as shell,bY as shellMesh,CY as shellShape,mj as shellWithEvolution,ZQ as simplify,DG as sketchCircle,OG as sketchEllipse,eG as sketchExtrude,ZW as sketchFace,NG as sketchFaceOffset,FG as sketchHelix,nG as sketchLoft,XK as sketchOnFace2D,YK as sketchOnPlane2D,PG as sketchParametricFunction,jG as sketchPolysides,kG as sketchRectangle,$W as sketchRevolve,AG as sketchRoundedRectangle,tG as sketchSweep,dJ as sketchText,QW as sketchWires,fo as sketcherStateError,BQ as slice,wM as solid,Lj as solidFromShell,$Z as solveAssembly,rM as sphere,oN as sphericalJoint,zQ as split,XN as stepCount,ZN as stepsFrom,JK as stretch2D,bM as subFace,Uj as supportExtrude,rT as supportsConstraintSketch,nT as supportsProjection,UX as surfaceFromGrid,KX as surfaceFromImage,Hj as sweep,mO as tagFaces,hM as tangentArc,Wa as tap,Ga as tapErr,hG as textBlueprints,fJ as textMetrics,JQ as thicken,oP as thread,dM as threePointArc,t$ as toBREP,jA as toBufferGeometryData,MA as toGroupedBufferGeometryData,jX as toKernelVec,PA as toLODGeometryData,NA as toLineGeometryData,UK as toSVGPathD,aD as toVec2,iD as toVec3,aM as torus,AX as tpmsLattice,jQ as transformCopy,E1 as transforms,TQ as translate,WK as translate2D,TK as translateDrawing,jD as translatePlane,to as tryCatch,no as tryCatchAsync,Gj as twistExtrude,uo as typeCastError,qN as undoLast,_o as unsupportedError,j as unwrap,Qa as unwrapErr,Xa as unwrapOr,Za as unwrapOrElse,IM as updateNode,bJ as updateRoles,qD as uvBounds,YD as uvCoordinates,tE as validSolid,W$ as validatePlanetary,F as validationError,kj as variableFillet,cD as vecAdd,bD as vecAngle,pD as vecCross,gD as vecDistance,fD as vecDot,vD as vecEquals,yD as vecIsZero,mD as vecLength,hD as vecLengthSq,dD as vecNegate,_D as vecNormalize,xD as vecProjectToPlane,wD as vecRepr,SD as vecRotate,uD as vecScale,lD as vecSub,SM as vertex,XJ as vertexFinder,tD as vertexPosition,HA as verticesOfEdge,xY as voxelBoolean,IY as voxelBooleanField,UY as voxelBooleanFieldShapes,wY as voxelBooleanShapes,FY as voxelField,HY as voxelFieldFromShape,RM as walkAssembly,sY as windingNumbers,gM as wire,QP as wireFinder,_M as wireLoop,VA as wiresOfFace,dT as withKernel,zX as withKernelDir,RX as withKernelPnt,LX as withKernelVec,pT as withQuality,PT as withScope,LT as withScopeResult,RT as withScopeResultAsync,_T as withTier,Ha as zipResults};
|
|
60
|
+
`),n=[],r=[];for(let e of t){let t=e.trim();if(t.startsWith(`v `)){let e=cQ(t);e&&n.push(e)}else if(t.startsWith(`f `)){let e=lQ(t);e.length>=3&&r.push(e)}}if(n.length===0||r.length===0)return k(ho(N.OBJ_IMPORT_FAILED,`OBJ file contains no valid geometry`));try{return dQ(n,r)}catch(e){let t=e instanceof Error?e.message:String(e);return k(ho(N.OBJ_IMPORT_FAILED,`OBJ import failed: ${t}`,e))}}function dQ(e,t){let n=[];for(let r of t)for(let t=1;t<r.length-1;t++){let i=r[0]??0,a=r[t]??0,o=r[t+1]??0,s=i>0?i-1:e.length+i,c=a>0?a-1:e.length+a,l=o>0?o-1:e.length+o,u=e[s],d=e[c],f=e[l];!u||!d||!f||n.push([u,d,f])}return sQ(n,N.OBJ_IMPORT_FAILED)}function fQ(e,t){let n=-1;for(let t=e.length-22;t>=0;t--)if(e[t]===80&&e[t+1]===75&&e[t+2]===5&&e[t+3]===6){n=t;break}if(n<0)return null;let r=new DataView(e.buffer,e.byteOffset,e.byteLength),i=r.getUint32(n+16,!0),a=i+r.getUint32(n+12,!0),o=i,s=new TextDecoder;for(;o<a&&r.getUint32(o,!0)===33639248;){let n=r.getUint16(o+28,!0),i=r.getUint16(o+30,!0),a=r.getUint16(o+32,!0),c=r.getUint32(o+42,!0);if(s.decode(e.subarray(o+46,o+46+n))===t){if(r.getUint16(c+8,!0)!==0)return null;let t=r.getUint16(c+26,!0),n=r.getUint16(c+28,!0),i=r.getUint32(c+18,!0),a=c+30+t+n;return e.subarray(a,a+i)}o+=46+n+i+a}return null}function pQ(e){return e>=97&&e<=122||e>=65&&e<=90||e>=48&&e<=57||e===95}function mQ(e){let t={},n=0;for(;n<e.length;){let r=e.indexOf(`="`,n);if(r<0)break;let i=r;for(;i>0&&pQ(e.charCodeAt(i-1));)i--;if(i===r){n=r+2;continue}let a=e.slice(i,r),o=r+2,s=e.indexOf(`"`,o);if(s<0)break;t[a]=e.slice(o,s),n=s+1}return t}function hQ(e,t){let n=[],r=`<${t} `,i=0;for(;i<e.length;){let t=e.indexOf(r,i);if(t<0)break;let a=e.indexOf(`>`,t);if(a<0)break;n.push(e.slice(t,a+1)),i=a+1}return n}function gQ(e,t){let n=e.indexOf(`<${t}`);if(n<0)return null;let r=e.indexOf(`</${t}>`,n);return r<0?null:e.slice(n,r+t.length+3)}function _Q(e){let t=e.startsWith(`#`)?e.slice(1):e;return[parseInt(t.slice(0,2),16)/255,parseInt(t.slice(2,4),16)/255,parseInt(t.slice(4,6),16)/255,t.length>=8?parseInt(t.slice(6,8),16)/255:1]}function vQ(e){let t=new Map,n=0;for(;n<e.length;){let r=e.indexOf(`<colorgroup`,n);if(r<0)break;let i=e.indexOf(`</colorgroup>`,r);if(i<0)break;let a=e.slice(r,i+13);n=i+13;let o=e.indexOf(`>`,r);if(o<0)continue;let s=mQ(e.slice(r,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of hQ(a,`color`)){let t=mQ(e).color;t!==void 0&&l.push(_Q(t))}t.set(c,l)}let r=0;for(;r<e.length;){let n=e.indexOf(`<basematerials`,r);if(n<0)break;let i=e.indexOf(`</basematerials>`,n);if(i<0)break;let a=e.slice(n,i+16);r=i+16;let o=e.indexOf(`>`,n);if(o<0)continue;let s=mQ(e.slice(n,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of hQ(a,`base`)){let t=mQ(e).displaycolor;t===void 0?l.push([0,0,0,1]):l.push(_Q(t))}t.set(c,l)}return t}function yQ(e){let t=[],n=[],r=[],i=vQ(e);for(let n of hQ(e,`vertex`)){let e=mQ(n);e.x!==void 0&&e.y!==void 0&&e.z!==void 0&&t.push([parseFloat(e.x),parseFloat(e.y),parseFloat(e.z)])}let a=null,o=null,s=gQ(e,`object`);if(s!==null){let e=s.indexOf(`>`);if(e>=0){let t=mQ(s.slice(0,e+1));t.pid!==void 0&&(a=parseInt(t.pid,10)),t.pindex!==void 0&&(o=parseInt(t.pindex,10))}}for(let t of hQ(e,`triangle`)){let e=mQ(t);if(e.v1!==void 0&&e.v2!==void 0&&e.v3!==void 0){n.push([parseInt(e.v1,10),parseInt(e.v2,10),parseInt(e.v3,10)]);let t=null,s=e.pid??(a===null?void 0:String(a)),c=e.p1??(o===null?void 0:String(o));if(s!==void 0&&c!==void 0){let e=parseInt(s,10),n=parseInt(c,10),r=i.get(e);r!==void 0&&n<r.length&&(t=r[n]??null)}r.push(t)}}return{vertices:t,triangles:n,triangleColors:r}}function bQ(e){let t=new Map;for(let n of e){if(n===null)continue;let e=n.join(`,`),r=t.get(e);r===void 0?t.set(e,{count:1,color:n}):r.count++}let n=null;for(let e of t.values())(n===null||e.count>n.count)&&(n=e);return n===null?null:n.color}function xQ(e){let t=U(),n=e.vertices.map(([e,t,n])=>({x:e,y:t,z:n})),r=e.triangles;try{return O(W(t.buildSolidFromFaces(n,r,1e-6)))}catch{let t=[];for(let[n,r,i]of e.triangles){let a=e.vertices[n],o=e.vertices[r],s=e.vertices[i];!a||!o||!s||t.push([a,o,s])}return sQ(t,N.THREEMF_IMPORT_FAILED)}}async function SQ(e){try{let t=await e.arrayBuffer(),n=fQ(new Uint8Array(t),`3D/3dmodel.model`);if(!n)return k(ho(N.THREEMF_IMPORT_FAILED,`3MF archive does not contain 3D/3dmodel.model (or uses unsupported compression)`));let r=yQ(new TextDecoder().decode(n));if(r.vertices.length===0||r.triangles.length===0)return k(ho(N.THREEMF_IMPORT_FAILED,`3MF model contains no valid geometry`));let i=xQ(r);if(i.ok){let e=bQ(r.triangleColors);e!==null&&EO(i.value,e)}return i}catch(e){let t=e instanceof Error?e.message:String(e);return k(ho(N.THREEMF_IMPORT_FAILED,`3MF import failed: ${t}`,e))}}async function CQ(e){try{let t=await e.arrayBuffer();return O(W(U().importGLB(t)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(ho(N.GLB_IMPORT_FAILED,`Failed to import GLB: ${t}`,e))}}function $(e){return`__wrapped`in e?e.val:e}function wQ(e){return $(e)}function TQ(e,t){return PO($(e),t)}function EQ(e,t,n){let r=n?.at;return FO($(e),t,r,n?.axis)}function DQ(e,t){let n=t?.at;return IO($(e),t?.normal??[1,0,0],n)}function OQ(e,t,n){return LO($(e),t,n?.center)}function kQ(e){return GO($(e))}function AQ(e,t){return HO($(e),t)}function jQ(e,t){return WO($(e),t)}function MQ(e,t,n){return nA($(e),$(t),{...n,unsafe:!0})}function NQ(e,t,n){return rA($(e),$(t),{...n,unsafe:!0})}function PQ(e,t){return oA(e.map(e=>$(e)),{...t,unsafe:!0})}function FQ(e,t,n){return sA($(e),t.map(e=>$(e)),{...n,unsafe:!0})}function IQ(e,t,n){return iA($(e),$(t),{...n,unsafe:!0})}function LQ(e,t,n){return lA($(e),t,n)}function RQ(e,t,n){return hA($(e),t,n)}function zQ(e,t){return gA($(e),t)}function BQ(e,t,n){return _A($(e),t,n)}function VQ(e,t){if(e!==void 0)return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(qP()).findAll(t)}function HQ(e,t){return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(XP()).findAll(t)}function UQ(e){return typeof e==`object`&&!Array.isArray(e)&&typeof e!=`function`?{mode:`distAngle`,distance:e.distance,angle:e.angle}:typeof e==`function`?{mode:`standard`,distance:t=>{let n=e(t);return n===null?null:typeof n==`object`&&!Array.isArray(n)?n.distance:n}}:{mode:`standard`,distance:e}}function WQ(e,t,n){let r=$(e),i,a;return n===void 0?(i=void 0,a=t):(i=VQ(t,r),a=n),Cj(r,i,a)}function GQ(e,t,n){let r=$(e),i,a;n===void 0?(i=void 0,a=t):(i=VQ(t,r),a=n);let o=UQ(a);return o.mode===`distAngle`?FA(r,[...i??IE(r)],o.distance,o.angle):wj(r,i,o.distance)}function KQ(e,t,n,r){let i=$(e);return Tj(i,HQ(t,i),n,r?.tolerance)}function qQ(e,t,n){return Ej($(e),t,n?.tolerance)}function JQ(e,t){return xj($(e),t)}function YQ(e,t,n){let r=$(e);return Oj(r,HQ(t,r),n.pullDirection,n.neutralPlane,n.angle)}function XQ(e){return Pj($(e))}function ZQ(e){return ZO($(e))}function QQ(e,t){return Ck($(e),t)}function $Q(e,t){return wk($(e),t)}function e$(e){return eD($(e))}function t$(e){return KO($(e))}function n$(e){return VD(e)}function r$(e){return Aj($(e))}function i$(e){return JO($(e))}function a$(e,t){return Xj($(e),typeof t==`number`?[0,0,t]:t)}function o$(e,t){let n=t?.at??[0,0,0];return Zj($(e),n,t?.axis??[0,0,1],t?.angle??2*Math.PI)}function s$(e,t){return $j(e.map(e=>$(e)),t)}function c$(e,n){if(n===void 0){let t=LE(e);if(t.length===0)return k(F(N.COMPOUND_NO_FACES,`compoundOps: shape has no faces`));let n=Nk(t),r=QD(n)[2];for(let e=1;e<t.length;e++){let i=Mk(t,e),a=QD(i)[2];a>r&&(n=i,r=a)}return O(n)}if(typeof n==`function`){let r=n(XP()).findAll(e);return r.length===0?k(go(N.COMPOUND_FACE_NOT_FOUND,`compoundOps: face finder matched no faces`)):O(t(r,0))}return O(n)}function l$(e){return`sketchOnPlane`in e&&typeof e.sketchOnPlane==`function`?e.sketchOnPlane(`XY`).wire:e}function u$(e,t){let n=$(e),{at:r,radius:i,axis:a}=t,o=a??[0,0,1];if(i<=0)return k(F(`DRILL_INVALID_RADIUS`,`Drill radius must be positive`));if(yD(o))return k(F(`DRILL_ZERO_AXIS`,`Drill axis cannot be zero`));let s=_D(o),c=r.length===2?[r[0],r[1],0]:[r[0],r[1],r[2]],l;if(t.depth!==void 0)l=SA(i,t.depth,c,s);else{let e=XE(n),t=[[e.xMin,e.yMin,e.zMin],[e.xMax,e.yMin,e.zMin],[e.xMin,e.yMax,e.zMin],[e.xMax,e.yMax,e.zMin],[e.xMin,e.yMin,e.zMax],[e.xMax,e.yMin,e.zMax],[e.xMin,e.yMax,e.zMax],[e.xMax,e.yMax,e.zMax]],r=1/0,a=-1/0;for(let e of t){let t=(e[0]-c[0])*s[0]+(e[1]-c[1])*s[1]+(e[2]-c[2])*s[2];t<r&&(r=t),t>a&&(a=t)}--r,a+=1,l=SA(i,a-r,[c[0]+s[0]*r,c[1]+s[1]*r,c[2]+s[2]*r],s)}return rA(n,l,{unsafe:!0})}function d$(e,t){let n=$(e),{profile:r,depth:i}=t;if(i<=0)return k(F(`POCKET_INVALID_DEPTH`,`Pocket depth must be positive`));let a=c$(n,t.face);if(A(a))return a;let o=a.value,s=ZD(o),c=QD(o),l=Jk(l$(r));if(A(l))return l;let u=Xj(PO(l.value,c),uD(_D(s),-i));return A(u)?u:rA(n,u.value,{unsafe:!0})}function f$(e,t){let n=$(e),{profile:r,height:i}=t;if(i<=0)return k(F(`BOSS_INVALID_HEIGHT`,`Boss height must be positive`));let a=c$(n,t.face);if(A(a))return a;let o=a.value,s=ZD(o),c=QD(o),l=Jk(l$(r));if(A(l))return l;let u=Xj(PO(l.value,c),uD(_D(s),i));return A(u)?u:nA(n,u.value,{unsafe:!0})}function p$(e,t){let n=$(e),r=t?.normal??[1,0,0],i=t?.at;return yD(r)?k(F(`MIRROR_ZERO_NORMAL`,`Mirror plane normal cannot be zero`)):nA(n,IO(n,r,i),{unsafe:!0})}function m$(e,t){let n=$(e),{xDir:r,xCount:i,xSpacing:a,yDir:o,yCount:s,ySpacing:c}=t;if(i<1||s<1)return k(F(`PATTERN_INVALID_COUNT`,`Pattern counts must be at least 1`));if(yD(r))return k(F(`PATTERN_ZERO_DIRECTION`,`X direction cannot be zero`));if(yD(o))return k(F(`PATTERN_ZERO_DIRECTION`,`Y direction cannot be zero`));if(i===1&&s===1)return O(n);let l=_D(r),u=_D(o),d=[n];for(let e=0;e<i;e++)for(let t=0;t<s;t++){if(e===0&&t===0)continue;let r=[l[0]*a*e+u[0]*c*t,l[1]*a*e+u[1]*c*t,l[2]*a*e+u[2]*c*t];d.push(PO(n,r))}return oA(d,{unsafe:!0})}var h$=class extends Error{code;kind;suggestion;metadata;constructor(e){let t=e.suggestion?`${e.message}\nSuggestion: ${e.suggestion}`:e.message;super(t),this.name=`BrepError`,this.code=e.code,this.kind=e.kind,e.suggestion&&(this.suggestion=e.suggestion),e.metadata&&(this.metadata=e.metadata)}};function g$(e){if(A(e))throw new h$(e.error);return e.value}function _$(e){return e}function v$(e){return e}function y$(e){return e}function b$(e){return e}function x$(e){return{val:e,__wrapped:!0,translate:t=>j$(TQ(e,t)),rotate:(t,n)=>j$(EQ(e,t,n)),mirror:t=>j$(DQ(e,t)),scale:(t,n)=>j$(OQ(e,t,n)),applyMatrix:t=>j$(g$(AQ(e,t))),moveX:t=>j$(TQ(e,[t,0,0])),moveY:t=>j$(TQ(e,[0,t,0])),moveZ:t=>j$(TQ(e,[0,0,t])),rotateX:t=>j$(EQ(e,t,{axis:[1,0,0]})),rotateY:t=>j$(EQ(e,t,{axis:[0,1,0]})),rotateZ:t=>j$(EQ(e,t,{axis:[0,0,1]})),bounds:()=>XE(e),describe:()=>e$(e),clone:()=>j$(g$(kQ(e))),mesh:t=>QQ(e,t),meshEdges:t=>$Q(e,t),isValid:()=>r$(e),isEmpty:()=>i$(e),heal:()=>j$(g$(XQ(e))),simplify:()=>j$(g$(ZQ(e))),toBREP:()=>g$(t$(e)),apply:t=>j$(t(e)),applyResult:t=>j$(g$(t(e))),done:()=>e}}function S$(e){return{fuse:(t,n)=>M$(g$(MQ(e,$(t),{...n,unsafe:!0}))),cut:(t,n)=>M$(g$(NQ(e,$(t),{...n,unsafe:!0}))),intersect:(t,n)=>M$(g$(IQ(e,$(t),{...n,unsafe:!0}))),fuseAll:(t,n)=>M$(b$(g$(oA([e,...t.map($)],{...n,unsafe:!0})))),cutAll:(t,n)=>M$(b$(g$(sA(e,t,{...n,unsafe:!0})))),section:(t,n)=>j$(g$(LQ(e,t,n))),split:t=>j$(g$(zQ(e,t))),slice:(t,n)=>g$(BQ(e,t,n))}}function C$(e){return{fillet(...t){return t.length===1?M$(b$(g$(WQ(_$(e),t[0])))):M$(b$(g$(WQ(_$(e),t[0],t[1]))))},chamfer(...t){return t.length===1?M$(b$(g$(GQ(_$(e),t[0])))):M$(b$(g$(GQ(_$(e),t[0],t[1]))))},shell:(t,n,r)=>M$(b$(g$(KQ(_$(e),t,n,r)))),offset:(t,n)=>M$(b$(g$(qQ(_$(e),t,n)))),draft:(t,n)=>M$(b$(g$(YQ(_$(e),t,n))))}}function w$(e){return{drill:t=>M$(g$(u$(e,t))),pocket:t=>M$(g$(d$(e,t))),boss:t=>M$(g$(f$(e,t))),mirrorJoin:t=>M$(g$(p$(e,t))),rectangularPattern:t=>M$(g$(m$(e,t)))}}function T$(e){return{volume:()=>g$(hP(e)),area:()=>g$(gP(e)),volumeProps:()=>g$(fP(e)),surfaceProps:()=>g$(pP(e))}}function E$(e){return{edges:()=>IE(e),faces:()=>LE(e),wires:()=>RE(e),vertices:()=>zE(e)}}function D$(e){return{linearPattern:(t,n,r)=>M$(b$(g$(jM(e,t,n,r)))),circularPattern:(t,n,r)=>M$(b$(g$(MM(e,t,n,r))))}}function O$(e){return{...x$(e),...S$(e),...C$(e),...w$(e),...T$(e),...E$(e),...D$(e)}}function k$(e){return{...x$(e),length:()=>rk(e),startPoint:()=>$O(e),endPoint:()=>ek(e),pointAt:t=>tk(e,t),tangentAt:t=>nk(e,t),isClosed:()=>ak(e),sweep(t,n){if(!_E(e))throw Error(`sweep requires a Wire`);let r=g$(Hj(y$(e),$(t),n));return M$(Array.isArray(r)?r[0]:r)}}}function A$(e){return{...x$(e),area:()=>g$(gP(e)),normalAt:t=>ZD(e,t),center:()=>QD(e),surfaceType:()=>g$(UD(e)),outerWire:()=>tO(e),innerWires:()=>rO(e),extrude:t=>M$(g$(a$(v$(e),t))),revolve:t=>M$(g$(o$(v$(e),t)))}}function j$(e){return SE(e)?O$(e):vE(e)?A$(e):gE(e)||_E(e)?k$(e):x$(e)}function M$(e){return O$(e)}function N$(e){if(e&&typeof e==`object`&&`face`in e&&typeof e.face==`function`&&`_defaultOrigin`in e)return A$(e.face());if(e&&typeof e==`object`&&`wrapped`in e)return vE(e)?A$(e):SE(e)?O$(e):gE(e)||_E(e)?k$(e):x$(e);throw Error(`shape() requires a Sketch or branded shape type`)}var P$=.25,F$=e=>Math.tan(e)-e;function I$(e,t,n,r){let i=e/Math.cos(t),a=n+r*(Math.tan(t)-t);return[i*Math.cos(a),i*Math.sin(a),0]}function L$(e,t,n,r,i){let a=[];for(let o=0;o<=r;o++){let s=.5-.5*Math.cos(o/r*Math.PI);a.push(I$(e,s*t,n,i))}return a}function R$(e){return Math.max(16,Math.round(8*Math.sqrt(e)))}function z$(e,t,n,r,i,a,o){let s=e*t/2,c=s*Math.cos(n),l=t*(1+r),u=t*(1+i-r),d=o?s-t*(1-r):s+l,f=o?s+t*(1+i+r):s-u,p=a/s,m=(Math.PI/2+2*r*Math.tan(n))/e+(o?p:-p),h=o?f:d;return{rPitch:s,rb:c,rTip:d,rRoot:f,alphaPitch:n,halfToothAngle:m,alphaTip:h<=c?0:Math.acos(Math.min(1,c/h)),toothPitch:2*Math.PI/e,isInternal:o}}function B$(e,t,n){if(t===0)return O(e);let r=F$(e)+2*t*Math.tan(e)/n,i,a;if(r>F$(e)?(i=e,a=Math.PI/2-1e-6):(i=1e-4,a=e),r>F$(a)||r<F$(i))return k(F(`GEAR_PA_OUT_OF_RANGE`,`working pressure angle out of range — target inv(αw)=${r.toFixed(4)} not in [${F$(i).toFixed(4)}, ${F$(a).toFixed(4)}]`,void 0,{target:r,invLo:F$(i),invHi:F$(a)}));for(let e=0;e<50;e++){let e=.5*(i+a);F$(e)<r?i=e:a=e}return O(.5*(i+a))}function V$(e,t,n,r,i){return B$(e,t+n,r+i)}function H$(e,t,n,r,i){return B$(e,n-t,i-r)}function U$(e,t,n,r,i){return(e+t)*n*Math.cos(r)/(2*Math.cos(i))}function W$(e,t,n,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(n))return k(F(`GEAR_NON_INTEGER_TEETH`,`tooth counts and planet count must be integers`));if(e<4||t<4||n<2)return k(F(`GEAR_TEETH_TOO_FEW`,`zs ≥ 4, zp ≥ 4, N ≥ 2 required`));if((2*e+2*t)%n!=0)return k(F(`GEAR_ASSEMBLY`,`(2·zs + 2·zp) must be divisible by N — got ${2*e+2*t} mod ${n} = ${(2*e+2*t)%n}`));let i=t+2+2*r,a=(e+t)*Math.sin(Math.PI/n);return a<=i?k(F(`GEAR_PLANET_COLLISION`,`planet tips would collide: (zs+zp)·sin(π/N) = ${a.toFixed(3)} ≤ planet tip = ${i.toFixed(3)}`)):O(void 0)}function G$(e,t,n,r,i,a,o,s){return(Math.sqrt(Math.max(0,e*e-t*t))+Math.sqrt(Math.max(0,n*n-r*r))-i*Math.sin(s))/(Math.PI*a*Math.cos(o))}function K$(e,t,n,r,i,a,o,s){return(Math.sqrt(Math.max(0,e*e-t*t))-Math.sqrt(Math.max(0,n*n-r*r))+i*Math.sin(s))/(Math.PI*a*Math.cos(o))}function q$(e,t){return 1-e*Math.sin(t)*Math.sin(t)/2}function J$(e,t,n){return Math.max(0,q$(e,t)-n)}function Y$(e){return e<8?.2:.485-2.88/e}function X$(e,t,n,r){let i=e*1e3,a=Y$(r);return a<=0||n<=0||t<=0?1/0:2*i/(r*t*t*n*a)}function Z$(e,t,n=!1){let r=(1.4+6.5/e)*(20/(t*180/Math.PI))**.15;return n?r*.85:r}function Q$(e,t,n,r,i,a=!1){return X$(e,t,n,r)*Z$(r,i,a)}function $$(e){return e/2}function e1(e,t){return e+2*t}function t1(e){return e%2==0?Math.PI/e:0}function n1(e,t,n){return e*(1+t/n)+t1(n)}function r1(e={}){let t=e.moduleSize??3,n=e.sunTeeth??15,r=e.planetTeeth??12,i=e.numPlanets??3,a=(e.pressureAngleDeg??20)*Math.PI/180,o=e.sunShift??0,s=e.planetShift??0,c=W$(n,r,i,s);if(A(c))return c;let l=V$(a,o,s,n,r);if(A(l))return l;let u=U$(n,r,t,a,l.value),d=[];for(let e=0;e<i;e++){let t=e*2*Math.PI/i,a=n1(t,n,r);d.push({rotationDeg:a*180/Math.PI,position:[u*Math.cos(t),u*Math.sin(t),0]})}return O(d)}function i1(e,t,n,r,i){let a=t*e.toothPitch,o=(t+1)%n*e.toothPitch,s=F$(e.alphaPitch),c=a-e.halfToothAngle-s,l=a+e.halfToothAngle+s,u=L$(e.rb,e.alphaTip,c,r,1),d=L$(e.rb,e.alphaTip,l,r,-1).reverse(),f=Nk(u),p=Pk(u),m=Nk(d),h=Pk(d),g=[],_=e=>{i.register(e),g.push(e)},v=e.isInternal?e.rb<e.rRoot:e.rb>e.rRoot;v&&_(Lk([e.rRoot*Math.cos(c),e.rRoot*Math.sin(c),0],f));let y=e.rPitch*1e-5,b=Wk(u,{tolerance:y});if(A(b))return b;_(b.value),_(Vk(p,[e.rTip*Math.cos(a),e.rTip*Math.sin(a),0],m));let x=Wk(d,{tolerance:y});if(A(x))return x;_(x.value),v&&_(Lk(h,[e.rRoot*Math.cos(l),e.rRoot*Math.sin(l),0]));let S=o-e.halfToothAngle-s,C=.5*(l+S);return S<l&&(C+=Math.PI),_(Vk(v?[e.rRoot*Math.cos(l),e.rRoot*Math.sin(l),0]:h,[e.rRoot*Math.cos(C),e.rRoot*Math.sin(C),0],v?[e.rRoot*Math.cos(S),e.rRoot*Math.sin(S),0]:[e.rb*Math.cos(S),e.rb*Math.sin(S),0])),O(g)}function a1(e){return s1(e,!1)}function o1(e){return s1(e,!0)}function s1(e,t){try{var n=xT();let{teeth:r,moduleSize:i,pressureAngle:a,shift:o,clearance:s,flankThinning:c,samples:l=R$(i)}=e;if(r<4)return k(F(`GEAR_TEETH_TOO_FEW`,`gear needs ≥ 4 teeth, got ${r}`));if(i<=0)return k(F(`GEAR_MODULE_NONPOSITIVE`,`module must be > 0, got ${i}`));let u=z$(r,i,a,o,s,c,t),d=n.u(new NT),f=[];for(let e=0;e<r;e++){let t=i1(u,e,r,l,d);if(A(t))return t;f.push(...t.value)}let p=qk(f);return A(p)?p:O(p.value)}catch(e){n.e=e}finally{n.d()}}function c1(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=P$,flankThinning:s=0,bore:c=0,samples:l}=e;if(r<=0)return k(F(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));if(l!==void 0&&(!Number.isInteger(l)||l<1))return k(F(`GEAR_SAMPLES_INVALID`,`samples must be a positive integer; got ${String(l)}`));let u=i*Math.PI/180,d=z$(t,n,u,a,o,s,!1);if(c>0&&c>=2*d.rRoot)return k(F(`GEAR_BORE_TOO_LARGE`,`bore diameter ${c.toFixed(2)} ≥ root diameter ${(2*d.rRoot).toFixed(2)} — would erase the gear teeth`));let f=a1({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(A(f))return f;let p=u1(t,u,a);return h1(f.value,r,c,d,p)}function l1(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=P$,flankThinning:s=0,ringWallThickness:c=2*e.moduleSize,samples:l}=e;if(r<=0)return k(F(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));if(c<=0)return k(F(`GEAR_WALL_NONPOSITIVE`,`ringWallThickness must be > 0`));if(l!==void 0&&(!Number.isInteger(l)||l<1))return k(F(`GEAR_SAMPLES_INVALID`,`samples must be a positive integer; got ${String(l)}`));let u=i*Math.PI/180,d=o1({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(A(d))return d;let f=z$(t,n,u,a,o,s,!0),p=m1(f.rPitch+c);return A(p)?p:_1(p.value,d.value,r,f,[])}function u1(e,t,n){let r=J$(e,t,n);return r<=0?[]:[{code:`UNDERCUT_RISK`,severity:`warning`,message:`gear is undercut: increase shift by ${r.toFixed(3)} to avoid (z=${e})`,context:{deficit:r,teeth:e}}]}function d1(e){let t=p1(e);if(A(t))return t;let n=t.value,r=f1(n);if(A(r))return r;let{sun:i,planet:a,ring:o}=r.value,s=x1(n,i,a,o),c=y1(a.solid,n);a.solid.delete();let l=b1(o.solid,n.zr),u=S1(n,s);return O({sun:i.solid,planets:c,ring:l,ringTeeth:n.zr,workingPressureAngle:n.alphaW_sp,centerDistance:n.centerDistance,contactRatio:{sunPlanet:s.crSunPlanet,planetRing:s.crPlanetRing},undercutDeficit:{sun:s.undercutSun,planet:s.undercutPlanet},...s.lewisStress?{lewisStress:s.lewisStress}:{},...s.stressConcentrationFactor?{stressConcentrationFactor:s.stressConcentrationFactor}:{},diagnostics:u})}function f1(e){let t=e.samples===void 0?{}:{samples:e.samples},n={moduleSize:e.moduleSize,thickness:e.thickness,pressureAngleDeg:e.pressureAngleDeg,clearance:e.clearance,flankThinning:e.bHalf,...t},r=c1({...n,teeth:e.sunTeeth,shift:e.sunShift,bore:e.sunBore});if(A(r))return r;let i=c1({...n,teeth:e.planetTeeth,shift:e.planetShift,bore:e.planetBore});if(A(i))return r.value.solid.delete(),i;let a=l1({...n,teeth:e.zr,shift:e.ringShift,ringWallThickness:e.ringWallThickness});return A(a)?(r.value.solid.delete(),i.value.solid.delete(),a):O({sun:r.value,planet:i.value,ring:a.value})}function p1(e){let t=e.moduleSize??3,n=e.sunTeeth??15,r=e.planetTeeth??12,i=e.numPlanets??3,a=e.pressureAngleDeg??20,o=a*Math.PI/180,s=e.sunShift??0,c=e.planetShift??0,l=e.ringShift??0;if(e.thickness<=0)return k(F(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));let u=W$(n,r,i,c);if(A(u))return u;let d=e1(n,r),f=V$(o,s,c,n,r);if(A(f))return f;let p=H$(o,c,l,r,d);if(A(p))return p;let m=U$(n,r,t,o,f.value);return O({moduleSize:t,sunTeeth:n,planetTeeth:r,numPlanets:i,pressureAngleDeg:a,alpha:o,alphaW_sp:f.value,alphaW_pr:p.value,clearance:e.clearance??.25,bHalf:$$(e.backlash??0),sunShift:s,planetShift:c,ringShift:l,ringWallThickness:e.ringWallThickness??2*t,thickness:e.thickness,sunBore:e.sunBore??0,planetBore:e.planetBore??0,...e.appliedTorque===void 0?{}:{appliedTorque:e.appliedTorque},...e.samples===void 0?{}:{samples:e.samples},zr:d,centerDistance:m})}function m1(e){try{var t=xT();let n=qk([t.u(new NT).register(Rk(e,[0,0,0],[0,0,1]))]);return A(n)?n:O(n.value)}catch(e){t.e=e}finally{t.d()}}function h1(e,t,n,r,i){try{var a=xT();let o=Jk(e);if(A(o))return o;let s=Xj(o.value,[0,0,t]);if(A(s))return s;if(n<=0)return O(v1(s.value,r,i));let c=a.u(new NT),l=g1(n/2);if(A(l))return l;c.register(l.value);let u=Xj(l.value,[0,0,t+1]);if(A(u))return u;c.register(u.value);let d=c.register(PO(u.value,[0,0,-.5])),f=rA(s.value,d);return A(f)?f:O(v1(f.value,r,i))}catch(e){a.e=e}finally{a.d()}}function g1(e){let t=m1(e);return A(t)?t:Jk(t.value)}function _1(e,t,n,r,i){let a=Jk(e,[t]);if(A(a))return a;let o=Xj(a.value,[0,0,n]);return A(o)?o:O(v1(o.value,r,i))}function v1(e,t,n=[]){return{solid:e,diagnostics:n,pitchDiameter:2*t.rPitch,baseDiameter:2*t.rb,tipDiameter:2*t.rTip,rootDiameter:2*t.rRoot}}function y1(e,t){let n=[];try{for(let r=0;r<t.numPlanets;r++){let i=r*2*Math.PI/t.numPlanets,a=FO(e,n1(i,t.sunTeeth,t.planetTeeth)*180/Math.PI);try{let e=[t.centerDistance*Math.cos(i),t.centerDistance*Math.sin(i),0];n.push(PO(a,e))}finally{a.delete()}}return n}catch(e){for(let e of n)e.delete();throw e}}function b1(e,t){let n=t1(t);if(n===0)return e;let r=FO(e,n*180/Math.PI);return e.delete(),r}function x1(e,t,n,r){let i={crSunPlanet:G$(t.tipDiameter/2,t.baseDiameter/2,n.tipDiameter/2,n.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_sp),crPlanetRing:K$(n.tipDiameter/2,n.baseDiameter/2,r.tipDiameter/2,r.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_pr),undercutSun:J$(e.sunTeeth,e.alpha,e.sunShift),undercutPlanet:J$(e.planetTeeth,e.alpha,e.planetShift)};if(e.appliedTorque!==void 0){let t=e.appliedTorque;i.lewisStress={sun:Q$(t,e.moduleSize,e.thickness,e.sunTeeth,e.alpha),planet:Q$(t*e.planetTeeth/e.sunTeeth,e.moduleSize,e.thickness,e.planetTeeth,e.alpha),ring:Q$(t*e.zr/e.sunTeeth,e.moduleSize,e.thickness,e.zr,e.alpha,!0)},i.stressConcentrationFactor={sun:Z$(e.sunTeeth,e.alpha),planet:Z$(e.planetTeeth,e.alpha),ring:Z$(e.zr,e.alpha,!0)}}return i}function S1(e,t){let n=[];t.crSunPlanet<1.2&&n.push({code:`CONTACT_RATIO_LOW_SUN_PLANET`,severity:`warning`,message:`sun-planet contact ratio ${t.crSunPlanet.toFixed(2)} is below 1.2 — may run unevenly`,context:{value:t.crSunPlanet}}),t.crPlanetRing<1.2&&n.push({code:`CONTACT_RATIO_LOW_PLANET_RING`,severity:`warning`,message:`planet-ring contact ratio ${t.crPlanetRing.toFixed(2)} is below 1.2 — may run unevenly`,context:{value:t.crPlanetRing}}),t.undercutSun>0&&n.push({code:`UNDERCUT_RISK_SUN`,severity:`warning`,message:`sun gear is undercut: increase sunShift by ${t.undercutSun.toFixed(3)} to avoid`,context:{deficit:t.undercutSun,sunTeeth:e.sunTeeth}}),t.undercutPlanet>0&&n.push({code:`UNDERCUT_RISK_PLANET`,severity:`warning`,message:`planet gear is undercut: increase planetShift by ${t.undercutPlanet.toFixed(3)} to avoid`,context:{deficit:t.undercutPlanet,planetTeeth:e.planetTeeth}});let r=Math.abs(e.sunShift)+Math.abs(e.planetShift)+Math.abs(e.ringShift);e.appliedTorque!==void 0&&r>.05&&n.push({code:`LEWIS_Y_SHIFT_UNCORRECTED`,severity:`info`,message:`Lewis stress uses unshifted Y(z) and K_f approximations; expect ±5% per 0.1 of profile shift`});let i=e.ringShift-(e.sunShift+2*e.planetShift);return Math.abs(i)>1e-6&&n.push({code:`PLANETARY_SHIFT_KINEMATIC_MISMATCH`,severity:`warning`,message:`ringShift should equal sunShift + 2·planetShift for both meshes to share working PA; off by ${i.toFixed(3)}`,context:{kinematicError:i,sunShift:e.sunShift,planetShift:e.planetShift,ringShift:e.ringShift}}),n}var C1=VJ({addHoles:()=>DM,bezier:()=>mM,box:()=>tM,bsplineApprox:()=>pM,circle:()=>cM,compound:()=>CM,cone:()=>iM,cylinder:()=>nM,ellipse:()=>lM,ellipseArc:()=>fM,ellipsoid:()=>oM,face:()=>vM,fill:()=>Yk,filledFace:()=>yM,helix:()=>uM,line:()=>sM,offsetFace:()=>TM,polygon:()=>xM,polyhedron:()=>eZ,sewShells:()=>EM,solid:()=>wM,sphere:()=>rM,subFace:()=>bM,tangentArc:()=>hM,threePointArc:()=>dM,torus:()=>aM,vertex:()=>SM,wire:()=>gM,wireLoop:()=>_M}),w1=VJ({checkBoolean:()=>ij,convexHull:()=>YX,cut:()=>NQ,cutAll:()=>sA,cutAllBisect:()=>YA,fuse:()=>MQ,fuseAll:()=>oA,fuseAllBisect:()=>$A,hull:()=>JX,intersect:()=>IQ,minkowski:()=>$X,section:()=>LQ,sectionToFace:()=>RQ,slice:()=>BQ,split:()=>zQ}),T1=VJ({chamfer:()=>GQ,draft:()=>YQ,fillet:()=>WQ,heal:()=>XQ,offset:()=>qQ,shell:()=>KQ,simplify:()=>ZQ,thicken:()=>JQ,variableFillet:()=>kj}),E1=VJ({applyMatrix:()=>AQ,clone:()=>kQ,composeTransforms:()=>UO,mirror:()=>DQ,rotate:()=>EQ,scale:()=>OQ,transformCopy:()=>jQ,translate:()=>TQ}),D1=VJ({checkAllInterferences:()=>tQ,checkInterference:()=>eQ,createDistanceQuery:()=>bP,measureArea:()=>gP,measureCurvatureAt:()=>xP,measureCurvatureAtMid:()=>SP,measureDistance:()=>vP,measureDistanceProps:()=>yP,measureLength:()=>_P,measureLinearProps:()=>mP,measureSurfaceProps:()=>pP,measureVolume:()=>hP,measureVolumeProps:()=>fP}),O1=VJ({blueprintToDXF:()=>wq,exportAssemblySTEP:()=>AM,exportDXF:()=>Cq,exportGlb:()=>uq,exportGltf:()=>lq,exportIGES:()=>Ak,exportOBJ:()=>$K,exportSTEP:()=>Ok,exportSTEPConfigured:()=>sJ,exportSTL:()=>kk,exportThreeMF:()=>Uq,importDXF:()=>oQ,importGLB:()=>CQ,importIGES:()=>uJ,importOBJ:()=>uQ,importSTEP:()=>cJ,importSTL:()=>lJ,importSVG:()=>oJ,importSVGPathD:()=>aJ,importThreeMF:()=>SQ}),k1=VJ({cornerFinder:()=>CI,edgeFinder:()=>qP,faceFinder:()=>XP,getSingleFace:()=>$P,vertexFinder:()=>XJ,wireFinder:()=>QP}),A1=VJ({complexExtrude:()=>Wj,extrude:()=>a$,guidedSweep:()=>Yj,loft:()=>s$,multiSectionSweep:()=>Jj,revolve:()=>o$,roof:()=>CZ,supportExtrude:()=>Uj,surfaceFromGrid:()=>UX,surfaceFromImage:()=>KX,sweep:()=>Hj,twistExtrude:()=>Gj}),j1=VJ({circularPattern:()=>MM,linearPattern:()=>jM}),M1=14695981039346656037n,N1=1099511628211n,P1=18446744073709551615n;function F1(){return M1}function I1(e,t){return(e^BigInt(t&255))*N1&P1}function L1(e,t){let n=e;for(let e=0;e<t.length;e++)n=I1(n,t[e]??0);return n}var R1=new TextEncoder;function z1(e,t){return L1(e,R1.encode(t))}var B1=new ArrayBuffer(8),V1=new DataView(B1),H1=new Uint8Array(B1);function U1(e,t){return V1.setFloat64(0,Object.is(t,-0)?0:t),L1(e,H1)}function W1(e,t){let n=e,r=t&P1;for(let e=0;e<8;e++)n=I1(n,Number(r&255n)),r>>=8n;return n}function G1(e,t){let n=e,r=t|0;for(let e=0;e<4;e++)n=I1(n,r&255),r>>>=8;return n}function K1(e,t){return I1(e,+!!t)}function q1(e){return(e&P1).toString(16).padStart(16,`0`)}var J1=new Set;function Y1(e){return z1(F1(),e)}function X1(e){return{kind:`NumLit`,value:e,structuralHash:U1(Y1(`NumLit`),e),freeParams:J1}}function Z1(e){let t=Y1(`Vec3Lit`);for(let n of e)t=U1(t,n);return{kind:`Vec3Lit`,value:e,structuralHash:t,freeParams:J1}}function Q1(e){let t=Y1(`Vec2Lit`);for(let n of e)t=U1(t,n);return{kind:`Vec2Lit`,value:e,structuralHash:t,freeParams:J1}}function $1(e){return{kind:`Param`,name:e,structuralHash:z1(Y1(`Param`),e),freeParams:new Set([e])}}function e0(e,t,n){let r=z1(Y1(`BinOp`),e);return r=W1(r,t.structuralHash),r=W1(r,n.structuralHash),{kind:`BinOp`,op:e,a:t,b:n,structuralHash:r,freeParams:u0(t.freeParams,n.freeParams)}}function t0(e,t){let n=z1(Y1(`UnaryOp`),e);return n=W1(n,t.structuralHash),{kind:`UnaryOp`,op:e,arg:t,structuralHash:n,freeParams:t.freeParams}}function n0(e,t){let n=G1(Y1(`Component`),t);return n=W1(n,e.structuralHash),{kind:`Component`,vec:e,index:t,structuralHash:n,freeParams:e.freeParams}}function r0(e,t){let n=G1(Y1(`BuildVec`),e),r=new Set;for(let e of t){n=W1(n,e.structuralHash);for(let t of e.freeParams)r.add(t)}return{kind:`BuildVec`,dim:e,components:t,structuralHash:n,freeParams:r}}var i0=(e,t)=>e0(`+`,e,t),a0=(e,t)=>e0(`*`,e,t);function o0(e){return typeof e==`number`?X1(e):e}function s0(e,t){if(!Array.isArray(e))return e;let n=e;return n.every(e=>typeof e==`number`)?t===3?Z1([n[0],n[1],n[2]]):Q1([n[0],n[1]]):r0(t,n.map(o0))}function c0(e){return s0(e,3)}function l0(e){return s0(e,2)}function u0(e,t){if(e.size===0)return t;if(t.size===0)return e;let n=new Set(e);for(let e of t)n.add(e);return n}function d0(e){return typeof e==`number`}function f0(e,t){return d0(e)?O(e):k(F(N.NULL_SHAPE_INPUT,`${t}: expected number, got ${Array.isArray(e)?`vector(${e.length})`:typeof e}`))}function p0(e,t,n){return Array.isArray(e)&&e.length===t?O(e):k(F(N.NULL_SHAPE_INPUT,`${n}: expected Vec${t}, got ${d0(e)?`number`:`vector(${e.length})`}`))}function m0(e,t){switch(e.kind){case`NumLit`:return O(e.value);case`Vec3Lit`:return O(e.value);case`Vec2Lit`:return O(e.value);case`Param`:{let n=t[e.name];return n===void 0?k(F(N.NULL_SHAPE_INPUT,`unbound param: ${e.name}`)):O(n)}case`BinOp`:return h0(e,t);case`UnaryOp`:return g0(e,t);case`Component`:return _0(e,t);case`BuildVec`:return v0(e,t)}}function h0(e,t){let n=m0(e.a,t);if(!n.ok)return n;let r=m0(e.b,t);if(!r.ok)return r;let i=f0(n.value,`BinOp(${e.op}).a`);if(!i.ok)return i;let a=f0(r.value,`BinOp(${e.op}).b`);if(!a.ok)return a;switch(e.op){case`+`:return O(i.value+a.value);case`-`:return O(i.value-a.value);case`*`:return O(i.value*a.value);case`/`:return a.value===0?k(F(N.NULL_SHAPE_INPUT,`BinOp(/): division by zero`)):O(i.value/a.value)}}function g0(e,t){let n=m0(e.arg,t);if(!n.ok)return n;let r=f0(n.value,`UnaryOp(${e.op})`);if(!r.ok)return r;let i=r.value;switch(e.op){case`neg`:return O(-i);case`sin`:return O(Math.sin(i));case`cos`:return O(Math.cos(i));case`sqrt`:return O(Math.sqrt(i));case`abs`:return O(Math.abs(i))}}function _0(e,t){let n=m0(e.vec,t);if(!n.ok)return n;if(d0(n.value))return k(F(N.NULL_SHAPE_INPUT,`Component: cannot index a scalar`));let r=n.value,i=r[e.index];return i===void 0?k(F(N.NULL_SHAPE_INPUT,`Component: index ${e.index} out of range for Vec${r.length}`)):O(i)}function v0(e,t){if(e.components.length!==e.dim)return k(F(N.NULL_SHAPE_INPUT,`BuildVec(${e.dim}): expected ${e.dim} components, got ${e.components.length}`));let n=[];for(let r of e.components){let e=m0(r,t);if(!e.ok)return e;let i=f0(e.value,`BuildVec.component`);if(!i.ok)return i;n.push(i.value)}return O(e.dim===2?[n[0],n[1]]:[n[0],n[1],n[2]])}function y0(e,t,n){let r=m0(e,t);return r.ok?f0(r.value,n):r}function b0(e,t,n){let r=m0(e,t);if(!r.ok)return r;let i=p0(r.value,3,n);if(!i.ok)return i;let[a,o,s]=i.value;return O([a,o,s])}function x0(e,t){if(t.size===0)return Object.freeze({});let n={};for(let r of t){let t=e[r];t!==void 0&&(n[r]=t)}return Object.freeze(n)}var S0=new Set;function C0(e){return z1(F1(),e)}function w0(e,t){return W1(e,t.structuralHash)}function T0(e,t){return t===void 0?K1(e,!1):w0(K1(e,!0),t)}function E0(e,t){return t===void 0?K1(e,!1):U1(K1(e,!0),t)}function D0(...e){let t=new Set;for(let n of e)if(n)for(let e of n.freeParams)t.add(e);return t.size===0?S0:t}function O0(e,t,n){let r=o0(e),i=o0(t),a=o0(n),o=C0(`Box`);return o=w0(w0(w0(o,r),i),a),{kind:`Box`,x:r,y:i,z:a,structuralHash:o,freeParams:D0(r,i,a)}}function k0(e){let t=o0(e);return{kind:`Sphere`,radius:t,structuralHash:w0(C0(`Sphere`),t),freeParams:t.freeParams}}function A0(e,t){let n=o0(e),r=o0(t);return{kind:`Cylinder`,radius:n,height:r,structuralHash:w0(w0(C0(`Cylinder`),n),r),freeParams:D0(n,r)}}function j0(e,t,n){let r=o0(e),i=o0(t),a=o0(n),o=C0(`Cone`);return o=w0(w0(w0(o,r),i),a),{kind:`Cone`,radius1:r,radius2:i,height:a,structuralHash:o,freeParams:D0(r,i,a)}}function M0(e,t){let n=o0(e),r=o0(t);return{kind:`Torus`,majorRadius:n,minorRadius:r,structuralHash:w0(w0(C0(`Torus`),n),r),freeParams:D0(n,r)}}function N0(e){let t=e.map(c0),n=G1(C0(`Polygon`),t.length);for(let e of t)n=w0(n,e);return{kind:`Polygon`,points:t,structuralHash:n,freeParams:D0(...t)}}function P0(e){let t=o0(e);return{kind:`Circle`,radius:t,structuralHash:w0(C0(`Circle`),t),freeParams:t.freeParams}}function F0(e,t){let n=c0(e),r=c0(t);return{kind:`Line`,from:n,to:r,structuralHash:w0(w0(C0(`Line`),n),r),freeParams:D0(n,r)}}function I0(e){let t=c0(e);return{kind:`Vertex`,point:t,structuralHash:w0(C0(`Vertex`),t),freeParams:t.freeParams}}function L0(e){return{kind:`Empty`,output:e,structuralHash:z1(C0(`Empty`),e),freeParams:S0}}function R0(){return L0(`Solid`)}function z0(){return L0(`Face`)}function B0(){return L0(`Wire`)}function V0(e,t,n,r){return E0(w0(w0(C0(e),t),n),r)}function H0(e,t,n){return{kind:`Fuse`,a:e,b:t,tolerance:n,structuralHash:V0(`Fuse`,e,t,n),freeParams:D0(e,t)}}function U0(e,t,n){return{kind:`Cut`,a:e,b:t,tolerance:n,structuralHash:V0(`Cut`,e,t,n),freeParams:D0(e,t)}}function W0(e,t,n){return{kind:`Intersect`,a:e,b:t,tolerance:n,structuralHash:V0(`Intersect`,e,t,n),freeParams:D0(e,t)}}function G0(e,t){let n=G1(C0(`FuseAll`),e.length);for(let t of e)n=w0(n,t);return n=E0(n,t),{kind:`FuseAll`,shapes:e,tolerance:t,structuralHash:n,freeParams:D0(...e)}}function K0(e,t,n){let r=w0(C0(`CutAll`),e);r=G1(r,t.length);for(let e of t)r=w0(r,e);return r=E0(r,n),{kind:`CutAll`,base:e,tools:t,tolerance:n,structuralHash:r,freeParams:D0(e,...t)}}function q0(e){return e===void 0?void 0:c0(e)}function J0(e,t){let n=c0(t);return{kind:`Translate`,target:e,vector:n,structuralHash:w0(w0(C0(`Translate`),e),n),freeParams:D0(e,n)}}function Y0(e,t,n){let r=o0(t),i=q0(n?.axis),a=q0(n?.at),o=w0(w0(C0(`Rotate`),e),r);return o=T0(o,i),o=T0(o,a),{kind:`Rotate`,target:e,angle:r,axis:i,at:a,structuralHash:o,freeParams:D0(e,r,i,a)}}function X0(e,t,n){let r=o0(t),i=q0(n?.center),a=w0(w0(C0(`Scale`),e),r);return a=T0(a,i),{kind:`Scale`,target:e,factor:r,center:i,structuralHash:a,freeParams:D0(e,r,i)}}function Z0(e,t){let n=q0(t?.normal),r=q0(t?.at),i=w0(C0(`Mirror`),e);return i=T0(i,n),i=T0(i,r),{kind:`Mirror`,target:e,normal:n,at:r,structuralHash:i,freeParams:D0(e,n,r)}}function Q0(e){let t=G1(C0(`Compound`),e.length);for(let n of e)t=w0(t,n);return{kind:`Compound`,children:e,structuralHash:t,freeParams:D0(...e)}}function $0(e){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:return`Solid`;case`Polygon`:return`Face`;case`Circle`:case`Line`:return`Edge`;case`Vertex`:return`Vertex`;case`Empty`:return e.output;case`Fuse`:case`Cut`:case`Intersect`:return $0(e.a);case`FuseAll`:return e.shapes[0]?$0(e.shapes[0]):`Solid`;case`CutAll`:return $0(e.base);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return $0(e.target);case`Compound`:return`Compound`}}function e2(e,t){let n=y0(e.x,t.env,`Box.x`);if(!n.ok)return n;let r=y0(e.y,t.env,`Box.y`);if(!r.ok)return r;let i=y0(e.z,t.env,`Box.z`);return i.ok?O(tM(n.value,r.value,i.value)):i}function t2(e,t){let n=y0(e.radius,t.env,`Sphere.radius`);return n.ok?O(rM(n.value)):n}function n2(e,t){let n=y0(e.radius,t.env,`Cylinder.radius`);if(!n.ok)return n;let r=y0(e.height,t.env,`Cylinder.height`);return r.ok?O(nM(n.value,r.value)):r}function r2(e,t){let n=y0(e.radius1,t.env,`Cone.radius1`);if(!n.ok)return n;let r=y0(e.radius2,t.env,`Cone.radius2`);if(!r.ok)return r;let i=y0(e.height,t.env,`Cone.height`);return i.ok?O(iM(n.value,r.value,i.value)):i}function i2(e,t){let n=y0(e.majorRadius,t.env,`Torus.majorRadius`);if(!n.ok)return n;let r=y0(e.minorRadius,t.env,`Torus.minorRadius`);return r.ok?O(aM(n.value,r.value)):r}function a2(e,t){let n=[];for(let r of e.points){let e=b0(r,t.env,`Polygon.point`);if(!e.ok)return e;n.push(e.value)}return xM(n)}function o2(e,t){let n=y0(e.radius,t.env,`Circle.radius`);return n.ok?O(cM(n.value)):n}function s2(e,t){let n=b0(e.from,t.env,`Line.from`);if(!n.ok)return n;let r=b0(e.to,t.env,`Line.to`);return r.ok?O(sM(n.value,r.value)):r}function c2(e,t){let n=b0(e.point,t.env,`Vertex.point`);return n.ok?O(SM(n.value)):n}function l2(e){return k(mo(N.NULL_SHAPE_INPUT,`${e}: empty result has no kernel representation`))}function u2(e,t,n){let r=e.evalNode(t);return r.ok?SE(r.value)?O(r.value):k(uo(N.CSG_NOT_3D,`${n}: operand did not produce a 3D shape`)):r}function d2(e,t){return{unsafe:!0,fuzzyValue:e.tolerance??t.tolerance}}function f2(e,t){if(e.a.kind===`Empty`)return t.evalNode(e.b);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=u2(t,e.a,`Fuse.a`);if(!n.ok)return n;let r=u2(t,e.b,`Fuse.b`);return r.ok?nA(n.value,r.value,d2(e,t)):r}function p2(e,t){if(e.a.kind===`Empty`)return l2(`Cut`);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=u2(t,e.a,`Cut.a`);if(!n.ok)return n;let r=u2(t,e.b,`Cut.b`);return r.ok?rA(n.value,r.value,d2(e,t)):r}function m2(e,t){if(e.a.kind===`Empty`||e.b.kind===`Empty`)return l2(`Intersect`);let n=u2(t,e.a,`Intersect.a`);if(!n.ok)return n;let r=u2(t,e.b,`Intersect.b`);return r.ok?iA(n.value,r.value,d2(e,t)):r}function h2(e,t,n){let r=[];for(let i of t){let t=u2(e,i,n);if(!t.ok)return t;r.push(t.value)}return O(r)}function g2(e,t){let n=e.shapes.filter(e=>e.kind!==`Empty`);if(n.length===0)return l2(`FuseAll`);if(n.length===1&&n[0])return t.evalNode(n[0]);let r=h2(t,n,`FuseAll.operand`);return r.ok?oA(r.value,d2(e,t)):r}function _2(e,t){if(e.base.kind===`Empty`)return l2(`CutAll`);let n=e.tools.filter(e=>e.kind!==`Empty`);if(n.length===0)return t.evalNode(e.base);let r=u2(t,e.base,`CutAll.base`);if(!r.ok)return r;let i=h2(t,n,`CutAll.tool`);return i.ok?sA(r.value,i.value,d2(e,t)):i}function v2(e){return k(mo(N.NULL_SHAPE_INPUT,`${e}: cannot transform an Empty node`))}function y2(e,t,n,r){return e?b0(e,t,n):O(r)}function b2(e,t){if(e.target.kind===`Empty`)return v2(`Translate`);let n=b0(e.vector,t.env,`Translate.vector`);if(!n.ok)return n;let r=t.evalNode(e.target);return r.ok?O(PO(r.value,n.value)):r}function x2(e,t){if(e.target.kind===`Empty`)return v2(`Rotate`);let n=y0(e.angle,t.env,`Rotate.angle`);if(!n.ok)return n;let r=y2(e.axis,t.env,`Rotate.axis`,[0,0,1]);if(!r.ok)return r;let i=y2(e.at,t.env,`Rotate.at`,[0,0,0]);if(!i.ok)return i;let a=t.evalNode(e.target);return a.ok?O(FO(a.value,n.value,i.value,r.value)):a}function S2(e,t){if(e.target.kind===`Empty`)return v2(`Scale`);let n=y0(e.factor,t.env,`Scale.factor`);if(!n.ok)return n;let r=y2(e.center,t.env,`Scale.center`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?O(LO(i.value,n.value,r.value)):i}function C2(e,t){if(e.target.kind===`Empty`)return v2(`Mirror`);let n=y2(e.normal,t.env,`Mirror.normal`,[1,0,0]);if(!n.ok)return n;let r=y2(e.at,t.env,`Mirror.at`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?O(IO(i.value,n.value,r.value)):i}function w2(e,t){let n=e.children.filter(e=>e.kind!==`Empty`);if(n.length===0)return k(mo(N.NULL_SHAPE_INPUT,`Compound: cannot materialize a compound with zero non-empty children`));let r=[];for(let e of n){let n=t.evalNode(e);if(!n.ok)return n;r.push(n.value)}return O(CM(r))}function T2(){return k(mo(N.NULL_SHAPE_INPUT,`Empty: cannot materialize an Empty node directly — only valid as boolean/transform operand`))}function E2(e,t){switch(e.kind){case`Box`:return e2(e,t);case`Sphere`:return t2(e,t);case`Cylinder`:return n2(e,t);case`Cone`:return r2(e,t);case`Torus`:return i2(e,t);case`Polygon`:return a2(e,t);case`Circle`:return o2(e,t);case`Line`:return s2(e,t);case`Vertex`:return c2(e,t);case`Empty`:return T2();case`Fuse`:return f2(e,t);case`Cut`:return p2(e,t);case`Intersect`:return m2(e,t);case`FuseAll`:return g2(e,t);case`CutAll`:return _2(e,t);case`Translate`:return b2(e,t);case`Rotate`:return x2(e,t);case`Scale`:return S2(e,t);case`Mirror`:return C2(e,t);case`Compound`:return w2(e,t)}}function D2(e,t){if(typeof t==`number`)return U1(K1(e,!1),t);let n=K1(e,!0);n=G1(n,t.length);for(let e of t)n=U1(n,e);return n}function O2(e,t){if(t.size===0)return F1();let n=x0(e,t),r=Object.keys(n).sort(),i=F1();for(let e of r){i=z1(i,e);let t=n[e];t!==void 0&&(i=D2(i,t))}return i}function k2(e,t,n,r){let i=O2(t,e.freeParams),a=r===void 0?`d`:U1(F1(),r).toString(16);return`${q1(e.structuralHash)}:${n}:${q1(i)}:${a}`}var A2=class{cache=new Map;refCounts=new Map;evaluating=!1;pendingKeys=[];kernelId;defaultTolerance;maxCacheEntries;onStep;hits=0;misses=0;evictions=0;constructor(e={}){this.kernelId=e.kernel??uT()??`unregistered`,this.defaultTolerance=e.tolerance,e.onStep&&(this.onStep=e.onStep);let t=e.maxCacheEntries;if(t!==void 0&&(!Number.isInteger(t)||t<1))throw RangeError(`Evaluator: maxCacheEntries must be a positive integer, got ${String(t)}`);this.maxCacheEntries=t}evaluate(e,t={}){if(this.maxCacheEntries!==void 0&&this.evaluating)throw Error(`Evaluator.evaluate() is not reentrant when maxCacheEntries is set — do not call it from an onStep callback.`);return dT(this.kernelId,()=>{this.evaluating=!0;let n=!1;try{let r=this.evaluateInner(e,t);return this.maxCacheEntries!==void 0&&r.ok&&this.trimCache(this.maxCacheEntries),n=r.ok,r}finally{!n&&this.maxCacheEntries!==void 0&&this.rollbackPending(),this.pendingKeys.length=0,this.evaluating=!1}})}evaluateInner(e,t){let n=k2(e,t,this.kernelId,this.defaultTolerance),r=this.cache.get(n);if(r!==void 0)return this.hits++,this.maxCacheEntries!==void 0&&(this.cache.delete(n),this.cache.set(n,r)),this.onStep?.({node:e,cacheKey:n,cacheHit:!0}),O(r);this.misses++;let i=E2(e,{env:t,tolerance:this.defaultTolerance,evalNode:e=>this.evaluateInner(e,t)});if(!i.ok)return i;let a=i.value;return this.refCounts.set(a,(this.refCounts.get(a)??0)+1),this.cache.set(n,a),this.maxCacheEntries!==void 0&&this.pendingKeys.push(n),this.onStep?.({node:e,cacheKey:n,cacheHit:!1}),i}releaseShape(e){let t=(this.refCounts.get(e)??1)-1;t<=0?(this.refCounts.delete(e),e[Symbol.dispose]()):this.refCounts.set(e,t)}trimCache(e){for(;this.cache.size>e;){let e=this.cache.keys().next();if(e.done)break;let t=e.value,n=this.cache.get(t);this.cache.delete(t),this.evictions++,n!==void 0&&this.releaseShape(n)}}rollbackPending(){for(let e of this.pendingKeys){let t=this.cache.get(e);t!==void 0&&(this.cache.delete(e),this.releaseShape(t))}}cacheStats(){return{hits:this.hits,misses:this.misses,entries:this.cache.size,evictions:this.evictions}}resetStats(){this.hits=0,this.misses=0,this.evictions=0}[Symbol.dispose](){for(let e of this.refCounts.keys())e[Symbol.dispose]();this.refCounts.clear(),this.cache.clear()}};function j2(e,t){try{var n=xT();let r=t(n.u(new A2(e)));if(r instanceof Promise)throw Error(`withEvaluator() callback returned a Promise. Async code must construct an Evaluator directly and dispose it manually — borrowed shapes would otherwise be freed before the Promise resolves.`);return r}catch(e){n.e=e}finally{n.d()}}function M2(e){return{csgVersion:1,root:R2(e)}}function N2(e){switch(e.kind){case`NumLit`:return{kind:`NumLit`,value:e.value};case`Vec3Lit`:return{kind:`Vec3Lit`,value:[e.value[0],e.value[1],e.value[2]]};case`Vec2Lit`:return{kind:`Vec2Lit`,value:[e.value[0],e.value[1]]};case`Param`:return{kind:`Param`,name:e.name};case`BinOp`:return{kind:`BinOp`,op:e.op,a:N2(e.a),b:N2(e.b)};case`UnaryOp`:return{kind:`UnaryOp`,op:e.op,arg:N2(e.arg)};case`Component`:return{kind:`Component`,vec:N2(e.vec),index:e.index};case`BuildVec`:return{kind:`BuildVec`,dim:e.dim,components:e.components.map(N2)}}}function P2(e){switch(e.kind){case`Box`:return{kind:`Box`,x:N2(e.x),y:N2(e.y),z:N2(e.z)};case`Sphere`:return{kind:`Sphere`,radius:N2(e.radius)};case`Cylinder`:return{kind:`Cylinder`,radius:N2(e.radius),height:N2(e.height)};case`Cone`:return{kind:`Cone`,radius1:N2(e.radius1),radius2:N2(e.radius2),height:N2(e.height)};case`Torus`:return{kind:`Torus`,majorRadius:N2(e.majorRadius),minorRadius:N2(e.minorRadius)};case`Polygon`:return{kind:`Polygon`,points:e.points.map(N2)};case`Circle`:return{kind:`Circle`,radius:N2(e.radius)};case`Line`:return{kind:`Line`,from:N2(e.from),to:N2(e.to)};case`Vertex`:return{kind:`Vertex`,point:N2(e.point)};case`Empty`:return{kind:`Empty`,output:e.output};default:return}}function F2(e){switch(e.kind){case`Fuse`:case`Cut`:case`Intersect`:return{kind:e.kind,a:R2(e.a),b:R2(e.b),tolerance:e.tolerance};case`FuseAll`:return{kind:`FuseAll`,shapes:e.shapes.map(R2),tolerance:e.tolerance};case`CutAll`:return{kind:`CutAll`,base:R2(e.base),tools:e.tools.map(R2),tolerance:e.tolerance};default:return}}function I2(e){return e?N2(e):void 0}function L2(e){switch(e.kind){case`Translate`:return{kind:`Translate`,target:R2(e.target),vector:N2(e.vector)};case`Rotate`:return{kind:`Rotate`,target:R2(e.target),angle:N2(e.angle),axis:I2(e.axis),at:I2(e.at)};case`Scale`:return{kind:`Scale`,target:R2(e.target),factor:N2(e.factor),center:I2(e.center)};case`Mirror`:return{kind:`Mirror`,target:R2(e.target),normal:I2(e.normal),at:I2(e.at)};default:return}}function R2(e){return e.kind===`Compound`?{kind:`Compound`,children:e.children.map(R2)}:P2(e)??F2(e)??L2(e)}function z2(e){return k(F(N.NULL_SHAPE_INPUT,`csg.fromJSON: ${e}`))}function B2(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function V2(e){return typeof e==`number`&&Number.isFinite(e)}function H2(e){return typeof e==`string`}function U2(e,t){if(!Array.isArray(e)||e.length!==3)return z2(`${t}: expected Vec3 array`);let[n,r,i]=e;return!V2(n)||!V2(r)||!V2(i)?z2(`${t}: Vec3 contains non-number`):O([n,r,i])}function W2(e,t){if(!Array.isArray(e)||e.length!==2)return z2(`${t}: expected Vec2 array`);let[n,r]=e;return!V2(n)||!V2(r)?z2(`${t}: Vec2 contains non-number`):O([n,r])}function G2(e){if(!B2(e))return z2(`input is not an object`);let t=e.csgVersion;if(t!==1)return z2(`unsupported csgVersion ${String(t)} (expected 1)`);let n=e.root;return $2(n)}function K2(e){if(!B2(e))return z2(`expression: not an object`);let t=e.kind;switch(t){case`NumLit`:return V2(e.value)?O(X1(e.value)):z2(`NumLit.value`);case`Vec3Lit`:{let t=U2(e.value,`Vec3Lit.value`);return t.ok?O(Z1(t.value)):t}case`Vec2Lit`:{let t=W2(e.value,`Vec2Lit.value`);return t.ok?O(Q1(t.value)):t}case`Param`:return H2(e.name)?O($1(e.name)):z2(`Param.name`);case`BinOp`:return q2(e);case`UnaryOp`:return J2(e);case`Component`:return Y2(e);case`BuildVec`:return X2(e);default:return z2(`unknown expression kind: ${String(t)}`)}}function q2(e){let t=e.op;if(t!==`+`&&t!==`-`&&t!==`*`&&t!==`/`)return z2(`BinOp.op: ${String(t)}`);let n=K2(e.a);if(!n.ok)return n;let r=K2(e.b);return r.ok?O(e0(t,n.value,r.value)):r}function J2(e){let t=e.op;if(!H2(t)||![`neg`,`sin`,`cos`,`sqrt`,`abs`].includes(t))return z2(`UnaryOp.op: ${String(t)}`);let n=K2(e.arg);return n.ok?O(t0(t,n.value)):n}function Y2(e){let t=e.index;if(t!==0&&t!==1&&t!==2)return z2(`Component.index: ${String(t)}`);let n=K2(e.vec);return n.ok?O(n0(n.value,t)):n}function X2(e){let t=e.dim;if(t!==2&&t!==3)return z2(`BuildVec.dim: ${String(t)}`);let n=e.components;if(!Array.isArray(n))return z2(`BuildVec.components: not array`);if(n.length!==t)return z2(`BuildVec.components: expected ${t} components, got ${n.length}`);let r=[];for(let e of n){let t=K2(e);if(!t.ok)return t;r.push(t.value)}return O(r0(t,r))}function Z2(e,t){if(!Array.isArray(e))return z2(`${t}: not array`);let n=[];for(let t of e){let e=$2(t);if(!e.ok)return e;n.push(e.value)}return O(n)}function Q2(e){let t=e.tolerance;return t==null?O(void 0):V2(t)?O(t):z2(`tolerance: not a finite number`)}function $2(e){if(!B2(e))return z2(`node: not an object`);let t=e.kind;switch(t){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:return t4(t,e);case`Fuse`:case`Cut`:case`Intersect`:return l4(t,e);case`FuseAll`:case`CutAll`:return u4(t,e);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return d4(t,e);case`Compound`:return _4(e);default:return z2(`unknown node kind: ${String(t)}`)}}function e4(e,t,n){let r=K2(e[t]);return r.ok?O(n(r.value)):r}function t4(e,t){switch(e){case`Box`:return n4(t);case`Sphere`:return e4(t,`radius`,k0);case`Cylinder`:return r4(t);case`Cone`:return i4(t);case`Torus`:return a4(t);case`Polygon`:return o4(t);case`Circle`:return e4(t,`radius`,P0);case`Line`:return s4(t);case`Vertex`:return e4(t,`point`,I0);case`Empty`:return c4(t)}return z2(`unhandled primitive: ${e}`)}function n4(e){let t=K2(e.x);if(!t.ok)return t;let n=K2(e.y);if(!n.ok)return n;let r=K2(e.z);return r.ok?O(O0(t.value,n.value,r.value)):r}function r4(e){let t=K2(e.radius);if(!t.ok)return t;let n=K2(e.height);return n.ok?O(A0(t.value,n.value)):n}function i4(e){let t=K2(e.radius1);if(!t.ok)return t;let n=K2(e.radius2);if(!n.ok)return n;let r=K2(e.height);return r.ok?O(j0(t.value,n.value,r.value)):r}function a4(e){let t=K2(e.majorRadius);if(!t.ok)return t;let n=K2(e.minorRadius);return n.ok?O(M0(t.value,n.value)):n}function o4(e){let t=e.points;if(!Array.isArray(t))return z2(`Polygon.points: not array`);let n=[];for(let e of t){let t=K2(e);if(!t.ok)return t;n.push(t.value)}return O(N0(n))}function s4(e){let t=K2(e.from);if(!t.ok)return t;let n=K2(e.to);return n.ok?O(F0(t.value,n.value)):n}function c4(e){let t=e.output;switch(t){case`Solid`:return O(R0());case`Face`:return O(z0());case`Wire`:return O(B0());default:return z2(`Empty.output: ${String(t)}`)}}function l4(e,t){let n=$2(t.a);if(!n.ok)return n;let r=$2(t.b);if(!r.ok)return r;let i=Q2(t);if(!i.ok)return i;switch(e){case`Fuse`:return O(H0(n.value,r.value,i.value));case`Cut`:return O(U0(n.value,r.value,i.value));case`Intersect`:return O(W0(n.value,r.value,i.value))}}function u4(e,t){let n=Q2(t);if(!n.ok)return n;if(e===`FuseAll`){let e=Z2(t.shapes,`FuseAll.shapes`);return e.ok?O(G0(e.value,n.value)):e}let r=$2(t.base);if(!r.ok)return r;let i=Z2(t.tools,`CutAll.tools`);return i.ok?O(K0(r.value,i.value,n.value)):i}function d4(e,t){let n=$2(t.target);if(!n.ok)return n;switch(e){case`Translate`:return f4(t,n.value);case`Rotate`:return m4(t,n.value);case`Scale`:return h4(t,n.value);case`Mirror`:return g4(t,n.value)}}function f4(e,t){let n=K2(e.vector);return n.ok?O(J0(t,n.value)):n}function p4(e,t){if(e[t]===void 0)return O(void 0);let n=K2(e[t]);return n.ok?O(n.value):n}function m4(e,t){let n=K2(e.angle);if(!n.ok)return n;let r=p4(e,`axis`);if(!r.ok)return r;let i=p4(e,`at`);return i.ok?O(Y0(t,n.value,{axis:r.value,at:i.value})):i}function h4(e,t){let n=K2(e.factor);if(!n.ok)return n;let r=p4(e,`center`);return r.ok?O(X0(t,n.value,{center:r.value})):r}function g4(e,t){let n=p4(e,`normal`);if(!n.ok)return n;let r=p4(e,`at`);return r.ok?O(Z0(t,{normal:n.value,at:r.value})):r}function _4(e){let t=Z2(e.children,`Compound.children`);return t.ok?O(Q0(t.value)):t}function v4(e){return x4(e)}function y4(e){switch(e.kind){case`NumLit`:case`Vec3Lit`:case`Vec2Lit`:case`Param`:return e;case`BinOp`:{let t=y4(e.a),n=y4(e.b);if(t.kind===`NumLit`&&n.kind===`NumLit`)switch(e.op){case`+`:return X1(t.value+n.value);case`-`:return X1(t.value-n.value);case`*`:return X1(t.value*n.value);case`/`:return X1(t.value/n.value)}return t!==e.a||n!==e.b?e0(e.op,t,n):e}case`UnaryOp`:{let t=y4(e.arg);if(t.kind===`NumLit`){let n=t.value;switch(e.op){case`neg`:return X1(-n);case`sin`:return X1(Math.sin(n));case`cos`:return X1(Math.cos(n));case`sqrt`:return X1(Math.sqrt(n));case`abs`:return X1(Math.abs(n))}}return t===e.arg?e:t0(e.op,t)}case`Component`:{let t=y4(e.vec);return t.kind===`Vec3Lit`||t.kind===`Vec2Lit`&&(e.index===0||e.index===1)?X1(t.value[e.index]):t===e.vec?e:n0(t,e.index)}case`BuildVec`:{let t=e.components.map(y4);return b4(e.dim,t)||(t.some((t,n)=>t!==e.components[n])?r0(e.dim,t):e)}}}function b4(e,t){if(t.length!==e)return;let n=[];for(let e of t){if(e.kind!==`NumLit`)return;n.push(e.value)}return e===2?Q1([n[0],n[1]]):Z1([n[0],n[1],n[2]])}function x4(e){switch(e.kind){case`Box`:return O0(y4(e.x),y4(e.y),y4(e.z));case`Sphere`:return k0(y4(e.radius));case`Cylinder`:return A0(y4(e.radius),y4(e.height));case`Cone`:return j0(y4(e.radius1),y4(e.radius2),y4(e.height));case`Torus`:return M0(y4(e.majorRadius),y4(e.minorRadius));case`Polygon`:return N0(e.points.map(y4));case`Circle`:return P0(y4(e.radius));case`Line`:return F0(y4(e.from),y4(e.to));case`Vertex`:return I0(y4(e.point));case`Empty`:return e;case`Fuse`:return S4(e.a,e.b,e.tolerance);case`Cut`:return C4(e.a,e.b,e.tolerance);case`Intersect`:return w4(e.a,e.b,e.tolerance);case`FuseAll`:return T4(e.shapes,e.tolerance);case`CutAll`:return E4(e.base,e.tools,e.tolerance);case`Translate`:return D4(e.target,e.vector);case`Rotate`:return Y0(x4(e.target),y4(e.angle),{axis:e.axis?y4(e.axis):void 0,at:e.at?y4(e.at):void 0});case`Scale`:return X0(x4(e.target),y4(e.factor),{center:e.center?y4(e.center):void 0});case`Mirror`:return Z0(x4(e.target),{normal:e.normal?y4(e.normal):void 0,at:e.at?y4(e.at):void 0});case`Compound`:return Q0(e.children.map(x4).filter(e=>e.kind!==`Empty`))}}function S4(e,t,n){let r=x4(e),i=x4(t);return r.kind===`Empty`?i:i.kind===`Empty`?r:H0(r,i,n)}function C4(e,t,n){let r=x4(e),i=x4(t);return i.kind===`Empty`||r.kind===`Empty`?r:U0(r,i,n)}function w4(e,t,n){let r=x4(e),i=x4(t);return r.kind===`Empty`?r:i.kind===`Empty`?i:W0(r,i,n)}function T4(e,t){let n=e.map(x4).filter(e=>e.kind!==`Empty`);return n.length===0?R0():n.length===1?n[0]:G0(n,t)}function E4(e,t,n){let r=x4(e);if(r.kind===`Empty`)return r;let i=t.map(x4).filter(e=>e.kind!==`Empty`);return i.length===0?r:K0(r,i,n)}function D4(e,t){let n=x4(e),r=y4(t);if(r.kind!==`Vec3Lit`)return J0(n,r);let[i,a,o]=r.value;if(i===0&&a===0&&o===0)return n;if(n.kind===`Translate`){let e=y4(n.vector);if(e.kind===`Vec3Lit`)return J0(n.target,[e.value[0]+i,e.value[1]+a,e.value[2]+o])}return J0(n,r)}function O4(e,t,n){return k4(e,t,n)}function k4(e,t,n){return t(e)?n:A4(e,t,n)}function A4(e,t,n){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:return e;case`Fuse`:return H0(k4(e.a,t,n),k4(e.b,t,n),e.tolerance);case`Cut`:return U0(k4(e.a,t,n),k4(e.b,t,n),e.tolerance);case`Intersect`:return W0(k4(e.a,t,n),k4(e.b,t,n),e.tolerance);case`FuseAll`:return G0(e.shapes.map(e=>k4(e,t,n)),e.tolerance);case`CutAll`:return K0(k4(e.base,t,n),e.tools.map(e=>k4(e,t,n)),e.tolerance);case`Translate`:return J0(k4(e.target,t,n),e.vector);case`Rotate`:return Y0(k4(e.target,t,n),e.angle,{axis:e.axis,at:e.at});case`Scale`:return X0(k4(e.target,t,n),e.factor,{center:e.center});case`Mirror`:return Z0(k4(e.target,t,n),{normal:e.normal,at:e.at});case`Compound`:return Q0(e.children.map(e=>k4(e,t,n)))}}function j4(e,t){t(e);for(let n of M4(e))j4(n,t)}function M4(e){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:return[];case`Fuse`:case`Cut`:case`Intersect`:return[e.a,e.b];case`FuseAll`:return e.shapes;case`CutAll`:return[e.base,...e.tools];case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return[e.target];case`Compound`:return e.children}}function N4(e){let t=0;return j4(e,()=>{t++}),t}var P4=VJ({CSG_VERSION:()=>1,Evaluator:()=>A2,add:()=>i0,asScalarExpr:()=>o0,asVec2Expr:()=>l0,asVec3Expr:()=>c0,binOp:()=>e0,box:()=>O0,buildVec:()=>r0,circle:()=>P0,component:()=>n0,compound:()=>Q0,cone:()=>j0,cut:()=>U0,cutAll:()=>K0,cylinder:()=>A0,emptyFace:()=>z0,emptySolid:()=>R0,emptyWire:()=>B0,foldExpr:()=>y4,forEachNode:()=>j4,fromJSON:()=>G2,fuse:()=>H0,fuseAll:()=>G0,intersect:()=>W0,line:()=>F0,mirror:()=>Z0,mul:()=>a0,nodeCount:()=>N4,numLit:()=>X1,optimize:()=>v4,outputKindOf:()=>$0,param:()=>$1,polygon:()=>N0,replaceNode:()=>O4,rotate:()=>Y0,scale:()=>X0,sphere:()=>k0,toJSON:()=>M2,torus:()=>M0,translate:()=>J0,unaryOp:()=>t0,vec2Lit:()=>Q1,vec3Lit:()=>Z1,vertex:()=>I0,withEvaluator:()=>j2});export{_I as BaseSketcher2d,vI as BlueprintSketcher,io as BrepBugError,N as BrepErrorCode,h$ as BrepWrapperError,wy as BrepkitAdapter,qW as CompoundSketch,i as DEFAULT_CAPABILITIES,nD as DEG2RAD,NT as DisposalScope,r as EXACT_BREP_CAPABILITIES,EG as FaceSketcher,G as HASH_CODE_MAX,Pa as OK,Na as OcctWasmAdapter,rD as RAD2DEG,lG as Sketch,TG as Sketcher,uG as Sketches,PM as addChild,DM as addHoles,dN as addJoint,QZ as addMate,KN as addStep,UA as adjacentFaces,Ua as all,Ra as andThen,WJ as applyGlue,AQ as applyMatrix,dk as approximateCurve,UT as as2D,HT as as3D,PD as asTopo,vJ as assignRoles,Fj as autoHeal,mM as bezier,wq as blueprintToDXF,vA as booleanPipeline,w1 as booleans,f$ as boss,tM as box,pM as bsplineApprox,M as bug,SG as cameraFromPlane,xG as cameraLookAt,hJ as captureHint,zD as cast,W as castShape,wE as castShape3D,GQ as chamfer,FA as chamferDistAngleShape,pj as chamferWithEvolution,tQ as checkAllInterferences,ij as checkBoolean,eQ as checkInterference,cM as circle,MM as circularPattern,eO as classifyPointOnFace,xk as clearMeshCache,kQ as clone,QT as closedWire,eo as collect,BM as collectShapes,DO as colorFaces,EO as colorShape,Wj as complexExtrude,UO as composeTransforms,CM as compound,oG as compoundSketchExtrude,iG as compoundSketchFace,cG as compoundSketchLoft,sG as compoundSketchRevolve,mo as computationError,hZ as computeStraightSkeleton,iM as cone,A1 as construction,YX as convexHull,CI as cornerFinder,zM as countNodes,kM as createAssembly,NM as createAssemblyNode,RK as createBlueprint,bG as createCamera,mE as createCompound,zK as createCompoundBlueprint,bP as createDistanceQuery,cE as createEdge,uE as createFace,jT as createHandle,GN as createHistory,MT as createKernelHandle,Sk as createMeshCache,DD as createNamedPlane,LJ as createOperationRegistry,TD as createPlane,yJ as createRef,$N as createRegistry,dE as createShell,fE as createSolid,kJ as createTaskQueue,sE as createVertex,lE as createWire,IJ as createWorkerClient,zJ as createWorkerHandler,P4 as csg,xo as currentQuality,AK as curve2dBoundingBox,LK as curve2dDistanceFrom,jK as curve2dFirstPoint,IK as curve2dIsOnCurve,MK as curve2dLastPoint,PK as curve2dParameter,NK as curve2dSplitAt,FK as curve2dTangentAt,ik as curveAxis,ek as curveEndPoint,ak as curveIsClosed,ok as curveIsPeriodic,rk as curveLength,sk as curvePeriod,tk as curvePointAt,$O as curveStartPoint,nk as curveTangentAt,NQ as cut,lL as cut2D,FQ as cutAll,YA as cutAllBisect,QI as cutBlueprints,uj as cutWithEvolution,nM as cylinder,iN as cylindricalJoint,mJ as defaultScorer,jJ as dequeueTask,e$ as describe,rK as deserializeDrawing,aP as deserializeHistory,VD as deserializeShape,RD as downcast,YQ as draft,aK as draw,uK as drawCircle,dK as drawEllipse,vK as drawFaceOutline,hK as drawParametricFunction,mK as drawPointsInterpolation,fK as drawPolysides,_K as drawProjection,sK as drawRectangle,oK as drawRoundedRectangle,cK as drawSingleCircle,lK as drawSingleEllipse,pK as drawText,wK as drawingChamfer,xK as drawingCut,CK as drawingFillet,bK as drawingFuse,SK as drawingIntersect,yK as drawingToSketchOnPlane,u$ as drill,qP as edgeFinder,BA as edgesOfFace,lM as ellipse,fM as ellipseArc,oM as ellipsoid,AJ as enqueueTask,k as err,AM as exportAssemblySTEP,Cq as exportDXF,uq as exportGlb,lq as exportGltf,Ak as exportIGES,$K as exportOBJ,Ok as exportSTEP,sJ as exportSTEPConfigured,kk as exportSTL,Uq as exportThreeMF,BN as exportURDF,a$ as extrude,Qj as extrudeAll,vM as face,$D as faceAxis,QD as faceCenter,XP as faceFinder,WD as faceGeomType,GD as faceOrientation,zA as facesOfEdge,LY as fieldBoolean,VY as fieldContour,RY as fieldOffset,BY as fieldReinit,zY as fieldShell,Yk as fill,yM as filledFace,WQ as fillet,fj as filletWithEvolution,hO as findFacesByTag,LM as findNode,JN as findStep,Rj as fixSelfIntersection,Ij as fixShape,za as flatMap,Ka as flatten,KD as flipFaceOrientation,lk as flipOrientation,pJ as fontMetrics,hN as forwardKinematics,n$ as fromBREP,IX as fromKernelDir,FX as fromKernelPnt,PX as fromKernelVec,Ja as fromNullable,MQ as fuse,sL as fuse2D,PQ as fuseAll,$A as fuseAllBisect,ZI as fuseBlueprints,lj as fuseWithEvolution,z$ as gearGeometry,nY as getActiveVoxelId,XE as getBounds,BK as getBounds2D,HE as getCompSolids,QO as getCurveType,TT as getDisposalStats,IE as getEdges,kO as getFaceColor,aO as getFaceOrigins,gO as getFaceTags,LE as getFaces,pG as getFont,qO as getHashCode,YN as getHistoryShape,U as getKernel,fT as getKernelCapabilities,gT as getKernelTier,GA as getNurbsCurveData,KA as getNurbsSurfaceData,ck as getOrientation,VK as getOrientation2D,Ao as getPerformanceStats,OO as getShapeColor,qT as getShapeKind,VE as getShells,$P as getSingleFace,BE as getSolids,UD as getSurfaceType,vO as getTagMetadata,zE as getVertices,tY as getVoxel,RE as getWires,Yj as guidedSweep,XQ as heal,Mj as healFace,jj as healSolid,Nj as healWire,uM as helix,JX as hull,oQ as importDXF,CQ as importGLB,uJ as importIGES,uQ as importOBJ,cJ as importSTEP,lJ as importSTL,oJ as importSVG,aJ as importSVGPathD,SQ as importThreeMF,WN as importURDF,bT as init,sT as initFromManifold,vT as initFromOC,rY as initVoxel,rO as innerWires,uk as interpolateCurve,IQ as intersect,uL as intersect2D,$I as intersectBlueprints,dj as intersectWithEvolution,FE as invalidateShapeCache,kN as inverseKinematics,O1 as io,ho as ioError,VT as is2D,BT as is3D,KJ as isChamferRadius,JT as isClosedWire,BD as isCompSolid,xE as isCompound,EJ as isDisposeRequest,gE as isEdge,i$ as isEmpty,XO as isEqualShape,A as isErr,OJ as isErrorResponse,vE as isFace,qJ as isFilletRadius,wJ as isInitRequest,HK as isInside2D,zT as isLive,XT as isManifoldShell,GJ as isNumber,Fa as isOk,TJ as isOperationRequest,YT as isOrientedFace,nE as isPlanarFace,rE as isPlanarWire,_G as isProjectionPlane,NJ as isQueueEmpty,YO as isSameShape,CE as isShape1D,SE as isShape3D,yE as isShell,bE as isSolid,DJ as isSuccessResponse,r$ as isValid,ZT as isValidSolid,hE as isVertex,_E as isWire,YE as iterCompSolids,UE as iterEdges,WE as iterFaces,JE as iterShells,qE as iterSolids,ID as iterTopo,KE as iterVertices,GE as iterWires,jN as jointTrajectory,uN as jointTransform,PN as jointsFromDH,OE as kernelCall,kE as kernelCallRaw,AE as kernelCallScoped,P as kernelError,OX as latticeInfill,kX as latticeInfillShape,sM as line,jM as linearPattern,fG as loadFont,s$ as loft,eM as loftAll,IG as makeBaseBox,c1 as makeExternalGear,l1 as makeInternalGear,kD as makePlane,d1 as makePlanetaryGear,yG as makeProjectedEdges,eE as manifoldShell,Ia as map,qa as mapBoth,La as mapErr,$a as match,gP as measureArea,xP as measureCurvatureAt,SP as measureCurvatureAtMid,vP as measureDistance,yP as measureDistanceProps,_P as measureLength,mP as measureLinearProps,pP as measureSurfaceProps,hP as measureVolume,fP as measureVolumeProps,D1 as measurement,gN as mechanismDOF,QQ as mesh,$Q as meshEdges,jk as meshMultiLOD,$X as minkowski,DQ as mirror,qK as mirror2D,OK as mirrorDrawing,p$ as mirrorJoin,T1 as modifiers,rP as modifyStep,po as moduleInitError,Jj as multiSectionSweep,ZD as normalAt,qQ as offset,TM as offsetFace,yY as offsetMesh,SY as offsetShape,fk as offsetWire2D,O as ok,Ba as or,Va as orElse,sI as organiseBlueprints,$T as orientedFace,tO as outerWire,j1 as patterns,MJ as pendingCount,ro as pipeline,MD as pivotPlane,iE as planarFace,aN as planarJoint,aE as planarWire,r1 as planetPlacements,d$ as pocket,JD as pointOnSurface,cY as pointsInside,xM as polygon,eZ as polyhedron,MG as polysideInnerRadius,wI as polysidesBlueprint,hj as positionOnCurve,yT as prewarm,C1 as primitives,rN as prismaticJoint,CG as projectEdges,XD as projectPointOnFace,k1 as query,go as queryError,m$ as rectangularPattern,RJ as registerHandler,cT as registerKernel,hT as registerKernelTier,eP as registerOperation,QN as registerShape,eY as registerVoxel,PJ as rejectAll,FM as removeChild,nO as removeHolesFromFace,dY as repairMesh,nP as replayFrom,tP as replayHistory,ET as resetDisposalStats,jo as resetPerformanceStats,RO as resize,$ as resolve,wQ as resolve3D,sD as resolveDirection,OD as resolvePlane,CJ as resolveRef,kK as reverseCurve,nN as revoluteJoint,o$ as revolve,CZ as roof,EQ as rotate,GK as rotate2D,EK as rotateDrawing,TI as roundedRectangleBlueprint,OQ as scale,KK as scale2D,DK as scaleDrawing,rX as sdfBox,sX as sdfCapsule,oX as sdfCone,aX as sdfCylinder,yX as sdfFieldAxialRamp,SX as sdfFieldClamp,vX as sdfFieldConst,xX as sdfFieldFromSdf,bX as sdfFieldRadialRamp,pX as sdfLattice,lX as sdfPlane,iX as sdfRoundedBox,nX as sdfSphere,mX as sdfStrutLattice,dX as sdfSweep,cX as sdfTorus,LQ as section,RQ as sectionToFace,iP as serializeHistory,cN as setJointValue,sN as setJointValues,iO as setShapeOrigin,_O as setTagMetadata,EM as sewShells,N$ as shape,pY as shapeToMeshInput,LD as shapeType,WA as sharedEdges,KQ as shell,bY as shellMesh,CY as shellShape,mj as shellWithEvolution,ZQ as simplify,DG as sketchCircle,OG as sketchEllipse,eG as sketchExtrude,ZW as sketchFace,NG as sketchFaceOffset,FG as sketchHelix,nG as sketchLoft,XK as sketchOnFace2D,YK as sketchOnPlane2D,PG as sketchParametricFunction,jG as sketchPolysides,kG as sketchRectangle,$W as sketchRevolve,AG as sketchRoundedRectangle,tG as sketchSweep,dJ as sketchText,QW as sketchWires,fo as sketcherStateError,BQ as slice,wM as solid,Lj as solidFromShell,$Z as solveAssembly,rM as sphere,oN as sphericalJoint,zQ as split,XN as stepCount,ZN as stepsFrom,JK as stretch2D,bM as subFace,Uj as supportExtrude,rT as supportsConstraintSketch,nT as supportsProjection,UX as surfaceFromGrid,KX as surfaceFromImage,Hj as sweep,mO as tagFaces,hM as tangentArc,Wa as tap,Ga as tapErr,hG as textBlueprints,fJ as textMetrics,JQ as thicken,oP as thread,dM as threePointArc,t$ as toBREP,jA as toBufferGeometryData,MA as toGroupedBufferGeometryData,jX as toKernelVec,PA as toLODGeometryData,NA as toLineGeometryData,UK as toSVGPathD,aD as toVec2,iD as toVec3,aM as torus,AX as tpmsLattice,jQ as transformCopy,E1 as transforms,TQ as translate,WK as translate2D,TK as translateDrawing,jD as translatePlane,to as tryCatch,no as tryCatchAsync,Gj as twistExtrude,uo as typeCastError,qN as undoLast,_o as unsupportedError,j as unwrap,Qa as unwrapErr,Xa as unwrapOr,Za as unwrapOrElse,IM as updateNode,bJ as updateRoles,qD as uvBounds,YD as uvCoordinates,tE as validSolid,W$ as validatePlanetary,F as validationError,kj as variableFillet,cD as vecAdd,bD as vecAngle,pD as vecCross,gD as vecDistance,fD as vecDot,vD as vecEquals,yD as vecIsZero,mD as vecLength,hD as vecLengthSq,dD as vecNegate,_D as vecNormalize,xD as vecProjectToPlane,wD as vecRepr,SD as vecRotate,uD as vecScale,lD as vecSub,SM as vertex,XJ as vertexFinder,tD as vertexPosition,HA as verticesOfEdge,xY as voxelBoolean,IY as voxelBooleanField,UY as voxelBooleanFieldShapes,wY as voxelBooleanShapes,FY as voxelField,HY as voxelFieldFromShape,RM as walkAssembly,sY as windingNumbers,gM as wire,QP as wireFinder,_M as wireLoop,VA as wiresOfFace,dT as withKernel,zX as withKernelDir,RX as withKernelPnt,LX as withKernelVec,pT as withQuality,PT as withScope,LT as withScopeResult,RT as withScopeResultAsync,_T as withTier,Ha as zipResults};
|
|
@@ -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-B-IJOO73.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-C8sXP0K0.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-
|
|
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-Rsj9-_9m.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)});
|
package/viewer/dist/index.html
CHANGED