brepjs-cad 0.34.0 → 0.35.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-D_VANjhG.js → brepjs-Br0mog6-.js} +1 -1
- package/viewer/dist/assets/{index-CrQacwvV.js → index-DWdrtdzp.js} +1 -1
- package/viewer/dist/assets/{kernelWorker-DKiuNx_7.js → kernelWorker-Bl42A0v1.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.35.0](https://github.com/andymai/brepjs/compare/brepjs-cad-v0.34.1...brepjs-cad-v0.35.0) (2026-06-25)
|
|
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.34.0](https://github.com/andymai/brepjs/compare/brepjs-cad-v0.33.1...brepjs-cad-v0.34.0) (2026-06-25)
|
|
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 lY(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 uY(e){return[e[0],-e[1]]}function dY(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(MI(uY([t.cx,t.cy]),uY([a,o]))),t.cx=a,t.cy=o,i+=2}}function fY(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(MI(uY([t.cx,t.cy]),uY([a,o]))),t.cx=a,t.cy=o,i+=2}}function pY(e,t,n,r){for(let i of e){let e=n?t.cx+i:i;r.push(MI(uY([t.cx,t.cy]),uY([e,t.cy]))),t.cx=e}}function mY(e,t,n,r){for(let i of e){let e=n?t.cy+i:i;r.push(MI(uY([t.cx,t.cy]),uY([t.cx,e]))),t.cy=e}}function hY(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(RI(uY([t.cx,t.cy]),[uY([s,c]),uY([l,u])],uY([d,f]))),t.prevControlX=l,t.prevControlY=u,t.cx=d,t.cy=f,i+=6}}function gY(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(RI(uY([t.cx,t.cy]),[uY([c,l]),uY([u,d])],uY([f,p]))),t.prevControlX=u,t.prevControlY=d,t.cx=f,t.cy=p,t.lastCmd=`S`,i+=4}}function _Y(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(RI(uY([t.cx,t.cy]),[uY([s,c])],uY([l,u]))),t.prevControlX=s,t.prevControlY=c,t.cx=l,t.cy=u,i+=4}}function vY(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(RI(uY([t.cx,t.cy]),[uY([c,l])],uY([u,d]))),t.prevControlX=c,t.prevControlY=l,t.cx=u,t.cy=d,t.lastCmd=`T`,i+=2}}function yY(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[NI(uY([e,t]),uY(c),uY([e,s])),NI(uY([e,s]),uY(l),uY([e,t]))]}catch{return[]}}function bY(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[NI(uY([e,t]),uY([b,x]),uY([n,r]))]}catch{return[MI(uY([e,t]),uY([n,r]))]}}function xY(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(MI(uY([t.cx,t.cy]),uY([d,f])));else{let e=d-t.cx,n=f-t.cy;Math.sqrt(e*e+n*n)<1e-10?r.push(...yY(t.cx,t.cy,s,c,u)):r.push(...bY(t.cx,t.cy,d,f,s,c,l,u))}t.cx=d,t.cy=f,i+=7}}function SY(e,t){(Math.abs(e.cx-e.sx)>1e-10||Math.abs(e.cy-e.sy)>1e-10)&&t.push(MI(uY([e.cx,e.cy]),uY([e.sx,e.sy]))),e.cx=e.sx,e.cy=e.sy}function CY(e){let t=lY(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`:dY(i,r,t,n);break;case`L`:fY(i,r,t,n);break;case`H`:pY(i,r,t,n);break;case`V`:mY(i,r,t,n);break;case`C`:hY(i,r,t,n);break;case`S`:gY(i,r,t,n);break;case`Q`:_Y(i,r,t,n);break;case`T`:vY(i,r,t,n);break;case`A`:xY(i,r,t,n);break;case`Z`:SY(r,n);break}a!==`S`&&a!==`T`&&(r.lastCmd=a)}return n}function wY(e){try{let t=CY(e);return t.length===0?k(go(`SVG_EMPTY_PATH`,`SVG path produced no curves`)):O(new nL(t))}catch(e){return k(go(`SVG_PARSE_FAILED`,`Failed to parse SVG path: ${e instanceof Error?e.message:String(e)}`))}}function TY(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=wY(l);u.ok&&n.push(u.value)}return n.length===0?k(go(`SVG_NO_PATHS`,`No <path> elements found in SVG`)):O(n)}catch(e){return k(go(`SVG_IMPORT_FAILED`,`Failed to import SVG: ${e instanceof Error?e.message:String(e)}`))}}function EY(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(go(N.STEP_EXPORT_CONFIGURED_FAILED,`Configured STEP export failed`,e))}}async function DY(e){try{let t=await e.arrayBuffer(),n=U().importSTEP(t);return n.length===0?k(go(`STEP_IMPORT_FAILED`,`STEP file contains no valid geometry`)):O(W(n[0]))}catch(e){return k(go(`STEP_IMPORT_FAILED`,`Failed to load STEP file`,e))}}async function OY(e){try{let t=await e.arrayBuffer(),n=U().importSTL(t);return n.IsNull()?k(go(`STL_IMPORT_FAILED`,`Failed to create solid from STL mesh`)):O(W(n))}catch(e){return k(go(`STL_IMPORT_FAILED`,`Failed to load STL file`,e))}}async function kY(e){try{let t=await e.arrayBuffer(),n=U().importIGES(t);return n.length===0?k(go(`IGES_IMPORT_FAILED`,`IGES file contains no valid geometry`)):O(W(n[0]))}catch(e){return k(go(`IGES_IMPORT_FAILED`,`Failed to load IGES file`,e))}}function AY(e,t,n={}){let r=PK(e,t);return new kK((typeof n.plane==`string`||n.plane===void 0?r.sketchOnPlane(n.plane,n.origin):r.sketchOnPlane(n.plane)).map(e=>Array.isArray(e)?new fK(e.map(pK)):pK(e)))}function jY(e,t){let n=t?.fontSize??1,r=MK(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 MY(e){let t=e?.fontSize??1,n=MK(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 NY(e){return e.type===`init`}function PY(e){return e.type===`operation`}function FY(e){return e.type===`dispose`}function IY(e){return e.type===`batch`}function LY(e){return e.success}function RY(e){return!e.success}function zY(){return{pending:new Map}}function BY(e,t){let n=new Map(e.pending);return n.set(t.id,t),{pending:n}}function VY(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 HY(e){return e.pending.size}function UY(e){return e.pending.size===0}function WY(e,t){for(let n of e.pending.values())n.reject(t);return{pending:new Map}}function GY(e,t){let n=t.data,r=e.get(n.id);if(r)if(e.delete(n.id),LY(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 KY(e){let{worker:t,wasmUrl:n}=e,r=new Map,i=!1;function a(){return crypto.randomUUID()}function o(e){GY(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})},executeBatch(e){let t=e.length;return s({id:a(),type:`batch`,operations:e}).then(e=>{let n=e.resultData;if(!Array.isArray(n)||n.length!==t)throw Error(`Invalid batch response: expected ${t} results`);return 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 qY(){return{operations:new Map}}function JY(e,t,n){let r=new Map(e.operations);return r.set(t,n),{operations:r}}function YY(e){return e instanceof Error?e.message:String(e)}function XY(e,t,n,r){let i=e.operations.get(t);if(!i)return{success:!1,error:`Unknown operation: ${t}`};try{let e=i(n,r);return{success:!0,...e.resultBrep===void 0?{}:{resultBrep:e.resultBrep},...e.resultData===void 0?{}:{resultData:e.resultData}}}catch(e){return{success:!1,error:YY(e)}}}function ZY(e,t){return t.success?{id:e,success:!0,...t.resultBrep===void 0?{}:{resultBrep:t.resultBrep},...t.resultData===void 0?{}:{resultData:t.resultData}}:{id:e,success:!1,error:t.error??`operation failed`}}function QY(e,t){let n=globalThis;n.onmessage=async r=>{let i=r.data;if(NY(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:YY(e)};n.postMessage(t)}return}if(PY(i)){let t=XY(e,i.operation,i.shapesBrep,i.parameters);n.postMessage(ZY(i.id,t));return}if(IY(i)){let t=i.operations.map(t=>XY(e,t.operation,t.shapesBrep,t.params)),r={id:i.id,success:!0,resultData:t};n.postMessage(r);return}if(FY(i)){let e={id:i.id,success:!0};n.postMessage(e),n.close?.()}}}function $Y(e){let{workers:t,wasmUrl:n}=e;if(t.length===0)throw Error(`createWorkerPool requires at least one worker`);let r=t.map(e=>({client:KY({worker:e,...n===void 0?{}:{wasmUrl:n}}),inFlight:0})),i=!1;function a(){return r.reduce((e,t)=>t.inFlight<e.inFlight?t:e)}function o(e,t,n){if(i)return Promise.reject(Error(`WorkerPool has been disposed`));let r=a();return r.inFlight+=1,r.client.execute(e,t,n).finally(()=>{--r.inFlight})}function s(){if(!i){i=!0;for(let e of r)e.client.dispose()}}return{size:r.length,async init(){try{await Promise.all(r.map(e=>e.client.init()))}catch(e){throw s(),e}},execute:o,executeBatch(e){return Promise.all(e.map(e=>o(e.operation,e.shapesBrep,e.params)))},inFlight(){return r.map(e=>e.inFlight)},dispose:s}}var eX=Object.defineProperty,tX=(e,t)=>{let n={};for(var r in e)eX(n,r,{get:e[r],enumerable:!0});return t||eX(n,Symbol.toStringTag,{value:`Module`}),n},nX=1,rX=2;function iX(e,t){t===`commonFace`&&e.SetGlue(nX),t===`sameFace`&&e.SetGlue(rX)}function aX(e){return typeof e==`number`}function oX(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 sX(e){return typeof e==`number`?!0:Array.isArray(e)&&e.length===2?e.every(aX):!1}function cX(e,t){let n=n=>{let r=e.findAll(n);if(r.length===0)return[];let i=0,a=yD(iD(Wk(r)),t);for(let e=1;e<r.length;e++){let n=yD(iD(Uk(r,e)),t);n<a&&(a=n,i=e)}return[Uk(r,i)]},r=e=>{let t=n(e);return t.length===0?k(_o(`FINDER_NOT_UNIQUE`,`Finder expected a unique match but found 0 element(s)`)):O(Wk(t))};return{...e,findAll:n,findUnique:r}}function lX(e){return oI(`vertex`,e,lX,(t,n)=>({nearestTo:t=>cX(lX(e),t),atPosition:(e,t=1e-4)=>n(n=>yD(iD(n),e)<t),withinBox:(e,t)=>n(n=>{let r=iD(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=iD(n);return Math.abs(yD(i,t)-e)<r})}))}function uX(){return lX([])}var dX=new Map,fX=null,pX=null;function mX(e,t){dX.set(e,t),fX||=e,e===fX&&(pX=t)}function hX(e){if(!e&&pX)return pX;let t=e??fX;if(!t)throw Error(`brepjs voxel engine not initialized. Call initVoxel() (or registerVoxel()) before using voxel operations.`);let n=dX.get(t);if(!n)throw Error(`brepjs: voxel engine '${t}' is not registered.`);return n}function gX(){return fX}function _X(e,t=`voxel`){mX(t,e),fX=t,pX=e}function vX(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 yX(e,t){return vX(e)||(t.length%3==0?null:F(`VOXEL_INVALID_QUERIES`,`queries length must be a multiple of 3 (flat xyz).`))}function bX(e){try{return O(hX(e))}catch(e){return k(ho(`VOXEL_NOT_INITIALIZED`,e instanceof Error?e.message:`voxel engine not initialized`,e))}}function xX(e,t,n){let r=yX(e,t);if(r)return k(r);let i=bX(n);return A(i)?i:O(i.value.winding_numbers(e.vertices,e.triangles,t))}function SX(e,t,n){let r=yX(e,t);if(r)return k(r);let i=bX(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 CX=48,wX=2;function TX(e,t,n){let r=vX(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??CX,a=t?.padding??wX;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=bX(n);if(A(o))return o;try{try{var s=wT();let t=s.u(o.value.repair_mesh(e.vertices,e.triangles,i,a)),n=t.positions.length/3;return O({vertices:t.positions,normals:t.normals,triangles:t.indices,uvs:new Float32Array(n*2),faceGroups:[{start:0,count:t.indices.length/3,faceHash:0}]})}catch(e){s.e=e}finally{s.d()}}catch(e){return k(I(`VOXEL_REPAIR_FAILED`,e instanceof Error?e.message:`voxel repair failed (grid too large?).`,e))}}var EX=.001;function DX(e,t=EX){try{let n=Ok(e,{tolerance:t});return n.vertices.length===0||n.triangles.length===0?k(I(`VOXEL_SHAPE_MESH_EMPTY`,`shape tessellated to an empty triangle mesh.`)):O({vertices:n.vertices,triangles:n.triangles})}catch(e){return k(I(`VOXEL_SHAPE_MESH_FAILED`,e instanceof Error?e.message:`failed to mesh shape for voxel op.`,e))}}var OX=48,kX=2,AX={union:0,intersection:1,difference:2};function jX(e){let t=e?.resolution??OX,n=e?.padding??kX;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 MX(e){if(e.positions.length===0||e.indices.length===0)return k(I(`VOXEL_DEGENERATE_RESULT`,`the voxel operation produced an empty mesh (over-shrunk offset or disjoint operands?).`));let t=e.positions.length/3;return O({vertices:e.positions,normals:e.normals,triangles:e.indices,uvs:new Float32Array(t*2),faceGroups:[{start:0,count:e.indices.length/3,faceHash:0}]})}function NX(e,t,n,r){let i=vX(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=jX(n);if(A(a))return a;let o=bX(r);if(A(o))return o;try{try{var s=wT();return MX(s.u(o.value.offset_mesh(e.vertices,e.triangles,t,a.value.resolution,a.value.padding)))}catch(e){s.e=e}finally{s.d()}}catch(e){return k(I(`VOXEL_OFFSET_FAILED`,e instanceof Error?e.message:`voxel offset failed (grid too large?).`,e))}}function PX(e,t,n,r){let i=vX(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=jX(n);if(A(a))return a;let o=bX(r);if(A(o))return o;try{try{var s=wT();return MX(s.u(o.value.shell_mesh(e.vertices,e.triangles,t,a.value.resolution,a.value.padding)))}catch(e){s.e=e}finally{s.d()}}catch(e){return k(I(`VOXEL_SHELL_FAILED`,e instanceof Error?e.message:`voxel shell failed (grid too large?).`,e))}}function FX(e,t,n,r,i){let a=vX(e);if(a)return k(a);let o=vX(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=AX[n],c=jX(r);if(A(c))return c;let l=bX(i);if(A(l))return l;try{try{var u=wT();return MX(u.u(l.value.voxel_boolean(e.vertices,e.triangles,t.vertices,t.triangles,s,c.value.resolution,c.value.padding)))}catch(e){u.e=e}finally{u.d()}}catch(e){return k(I(`VOXEL_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel boolean failed (grid too large?).`,e))}}function IX(e,t,n,r){let i=DX(e);return A(i)?i:NX(i.value,t,n,r)}function LX(e,t,n,r){let i=DX(e);return A(i)?i:PX(i.value,t,n,r)}function RX(e,t,n,r,i){let a=DX(e);if(A(a))return a;let o=DX(t);return A(o)?o:FX(a.value,o.value,n,r,i)}var zX=48,BX=2,VX={union:0,intersection:1,difference:2};function HX(e){let t=e?.resolution??zX,n=e?.padding??BX;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 UX(e){try{var t=wT();let n=e.contour(),{positions:r,normals:i,indices:a}=t.u({value:n,[Symbol.dispose](){n.free()}}).value;if(r.length===0||a.length===0)return k(I(`VOXEL_DEGENERATE_RESULT`,`the voxel field contoured to an empty mesh (over-shrunk offset or disjoint operands?).`));let o=r.length/3;return O({vertices:r,normals:i,triangles:a,uvs:new Float32Array(o*2),faceGroups:[{start:0,count:a.length/3,faceHash:0}]})}catch(e){t.e=e}finally{t.d()}}function WX(e){return{raw:e,delete(){e.free()}}}function GX(e){return KX(e)}function KX(e){let t=FT(WX(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,VX[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=UX(this.value);if(A(e))throw Error(e.error.message);return e.value}};return n}function qX(e){return!e.disposed}function JX(){return k(F(`VOXEL_FIELD_DISPOSED`,`the voxel field handle has been disposed.`))}function YX(e,t,n){let r=vX(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=HX(t);if(A(i))return i;let a=bX(n);if(A(a))return a;try{return O(KX(new a.value.VoxelField(e.vertices,e.triangles,i.value.resolution,i.value.padding)))}catch(e){return k(I(`VOXEL_FIELD_VOXELIZE_FAILED`,e instanceof Error?e.message:`voxel field voxelization failed (grid too large or non-dense?).`,e))}}function XX(e,t,n,r,i){let a=vX(e);if(a)return k(a);let o=vX(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=HX(r);if(A(s))return s;let c=bX(i);if(A(c))return c;try{return O(KX(c.value.VoxelField.boolean_of(e.vertices,e.triangles,t.vertices,t.triangles,VX[n],s.value.resolution,s.value.padding)))}catch(e){return k(I(`VOXEL_FIELD_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel field boolean failed (grid too large or non-dense?).`,e))}}function ZX(e,t,n){if(!qX(e)||!qX(t))return JX();try{return e.value.boolean(t.value,VX[n]),O(e)}catch(e){return k(I(`VOXEL_FIELD_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel field boolean failed (dim mismatch?).`,e))}}function QX(e,t){if(!qX(e))return JX();if(!Number.isFinite(t))return k(F(`VOXEL_INVALID_DISTANCE`,`distance must be a finite number.`));try{return e.value.offset(t),O(e)}catch(e){return k(I(`VOXEL_FIELD_OFFSET_FAILED`,e instanceof Error?e.message:`voxel field offset failed.`,e))}}function $X(e,t){if(!qX(e))return JX();if(!Number.isFinite(t)||t<=0)return k(F(`VOXEL_INVALID_THICKNESS`,`thickness must be a finite number > 0.`));try{return e.value.shell(t),O(e)}catch(e){return k(I(`VOXEL_FIELD_SHELL_FAILED`,e instanceof Error?e.message:`voxel field shell failed.`,e))}}function eZ(e){if(!qX(e))return JX();try{return e.value.reinit(),O(e)}catch(e){return k(I(`VOXEL_FIELD_REINIT_FAILED`,e instanceof Error?e.message:`voxel field reinit failed.`,e))}}function tZ(e){if(!qX(e))return JX();try{return UX(e.value)}catch(e){return k(I(`VOXEL_FIELD_CONTOUR_FAILED`,e instanceof Error?e.message:`voxel field contour failed.`,e))}}function nZ(e,t,n){let r=DX(e);return A(r)?r:YX(r.value,t,n)}function rZ(e,t,n,r,i){let a=DX(e);if(A(a))return a;let o=DX(t);return A(o)?o:XX(a.value,o.value,n,r,i)}var iZ=48,aZ=2;function oZ(e){try{return O(hX(e))}catch(e){return k(ho(`VOXEL_NOT_INITIALIZED`,e instanceof Error?e.message:`voxel engine not initialized`,e))}}function sZ(e){let t=e?.resolution??iZ,n=e?.padding??aZ;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 cZ(e){return{raw:e,delete(){e.free()}}}var lZ={offsetField(e){return uZ(this.value.offset_field(e.value))},roundField(e){return uZ(this.value.round_field(e.value))},shellField(e){return uZ(this.value.shell_field(e.value))},smoothUnionField(e,t){return uZ(this.value.smooth_union_field(e.value,t.value))}};function uZ(e){let t=FT(cZ(e));return{get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()},union(e){return uZ(this.value.union(e.value))},intersection(e){return uZ(this.value.intersection(e.value))},difference(e){return uZ(this.value.difference(e.value))},smoothUnion(e,t){return uZ(this.value.smooth_union(e.value,t))},smoothIntersection(e,t){return uZ(this.value.smooth_intersection(e.value,t))},smoothDifference(e,t){return uZ(this.value.smooth_difference(e.value,t))},offset(e){return uZ(this.value.offset(e))},round(e){return uZ(this.value.round(e))},shell(e){return uZ(this.value.shell(e))},onion(e){return uZ(this.value.onion(e))},...lZ,translate(e,t,n){return uZ(this.value.translate(e,t,n))},rotate(e,t,n,r){return uZ(this.value.rotate(e,t,n,r))},scale(e){return uZ(this.value.scale(e))},rasterize(e){return dZ(this.value,e)},rasterizeIn(e,t){return fZ(this.value,e,t)}}}function dZ(e,t){let n=sZ(t);if(A(n))return n;try{return O(GX(e.rasterize(n.value.resolution,n.value.padding)))}catch(e){return pZ(e)}}function fZ(e,t,n){let r=sZ(n);if(A(r))return r;let i=mZ(t);if(i)return k(i);try{return O(GX(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 pZ(e)}}function pZ(e){return k(I(`SDF_RASTERIZE_FAILED`,e instanceof Error?e.message:`SDF rasterization failed (grid too large?).`,e))}function mZ(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 hZ(e,t){let n=oZ(t);if(A(n))return n;try{return O(uZ(e(n.value)))}catch(e){return k(I(`SDF_BUILD_FAILED`,e instanceof Error?e.message:`SDF primitive construction failed.`,e))}}function gZ(e,t){return hZ(t=>t.Sdf.sphere(e),t)}function _Z(e,t,n,r){return hZ(r=>r.Sdf.box_(e,t,n),r)}function vZ(e,t,n,r,i){return hZ(i=>i.Sdf.rounded_box(e,t,n,r),i)}function yZ(e,t,n){return hZ(n=>n.Sdf.cylinder(e,t),n)}function bZ(e,t,n){return hZ(n=>n.Sdf.cone(e,t),n)}function xZ(e,t,n,r){return hZ(r=>r.Sdf.capsule(e[0],e[1],e[2],t[0],t[1],t[2],n),r)}function SZ(e,t,n){return hZ(n=>n.Sdf.torus(e,t),n)}function CZ(e,t,n){return hZ(n=>n.Sdf.plane(e[0],e[1],e[2],t),n)}function wZ(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 TZ(e,t,n,r){let i=wZ(e);if(A(i))return i;let a=n?.closed??!1;return hZ(e=>e.Sdf.sweep(i.value,t.value,a),r)}var EZ={gyroid:0,schwarzP:1,diamond:2};function DZ(e,t,n,r){let i=EZ[e];return i===void 0?k(F(`SDF_INVALID_LATTICE_KIND`,`unknown lattice kind: ${e}`)):hZ(e=>e.Sdf.lattice(i,t.value,n.value),r)}function OZ(e,t,n){return hZ(n=>n.Sdf.strut_lattice(e,t.value),n)}function kZ(e){return{raw:e,delete(){e.free()}}}function AZ(e){let t=FT(kZ(e));return{get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()}}}function jZ(e,t){let n=oZ(t);if(A(n))return n;try{return O(AZ(e(n.value)))}catch(e){return k(I(`SDF_FIELD_BUILD_FAILED`,e instanceof Error?e.message:`scalar field construction failed.`,e))}}function MZ(e,t){return jZ(t=>t.ScalarField.constant(e),t)}function NZ(e,t,n,r,i,a){return jZ(a=>a.ScalarField.axial_ramp(e,t,n,r,i),a)}function PZ(e,t,n,r,i,a,o){return jZ(o=>o.ScalarField.radial_ramp(e[0],e[1],e[2],t,n,r,i,a),o)}function FZ(e,t,n,r){return jZ(r=>r.ScalarField.from_sdf(e.value,t,n),r)}function IZ(e,t,n,r){return jZ(r=>r.ScalarField.clamp(e.value,t,n),r)}var LZ={gyroid:0,schwarzP:1,diamond:2},RZ=48,zZ=2;function BZ(e){let t=LZ[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??RZ,r=e.padding??zZ;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 VZ(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 HZ(e,t,n){let r=vX(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=BZ(t);if(A(i))return i;let a=bX(n);if(A(a))return a;let{tag:o,period:s,thickness:c,resolution:l,padding:u}=i.value;try{try{var d=wT();return O(VZ(d.u(a.value.lattice_infill(e.vertices,e.triangles,l,u,o,s,c))))}catch(e){d.e=e}finally{d.d()}}catch(e){return k(I(`LATTICE_INFILL_FAILED`,e instanceof Error?e.message:`lattice infill failed (grid too large?).`,e))}}function UZ(e,t,n){let r=DX(e);return A(r)?r:HZ(r.value,t,n)}function WZ(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=BZ(t);if(A(r))return r;let i=bX(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=wT();return O(VZ(g.u(i.value.tpms_box(u,d,f,p,m,h,c,l,a,o,s))))}catch(e){g.e=e}finally{g.d()}}catch(e){return k(I(`TPMS_LATTICE_FAILED`,e instanceof Error?e.message:`tpms lattice failed (grid too large?).`,e))}}function GZ(e){return U().createVector3d(e[0],e[1],e[2])}function KZ(e){return U().createPoint3d(e[0],e[1],e[2])}function qZ(e){return U().createDirection3d(e[0],e[1],e[2])}function JZ(e){return[e.X(),e.Y(),e.Z()]}function YZ(e){return[e.X(),e.Y(),e.Z()]}function XZ(e){return[e.X(),e.Y(),e.Z()]}function ZZ(e,t){let n=GZ(e);try{return t(n)}finally{n.delete()}}function QZ(e,t){let n=KZ(e);try{return t(n)}finally{n.delete()}}function $Z(e,t){let n=qZ(e);try{return t(n)}finally{n.delete()}}var eQ=.299,tQ=.587,nQ=.114;function rQ(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 iQ(e,n,r,s,c,o)}catch{}try{return aQ(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 iQ(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 xE(s)?O(s):(s[Symbol.dispose](),k(P(N.SURFACE_FAILED,`B-spline surface did not produce a face`)))}function aQ(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 xE(s)||SE(s)?O(s):(s[Symbol.dispose](),k(P(N.SURFACE_FAILED,`surfaceFromGrid: unexpected shape type from sewing`)))}async function oQ(e,t={}){let n=t.channel??`luminance`,r=Math.max(1,Math.round(t.downsample??1));if(typeof createImageBitmap!=`function`)return k(go(N.SURFACE_FAILED,`surfaceFromImage requires createImageBitmap (not available in this environment)`));let i;try{i=await createImageBitmap(e)}catch(e){return k(go(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(go(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(go(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=(eQ*o+tQ*s+nQ*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),rQ(l,u)}function sQ(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function cQ(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=sQ(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 CE(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 lQ(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 CE(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 uQ(e){let n=BE(e);if(n.length!==1)return null;let r=t(n,0);if(tD(r)!==`sphere`)return null;let i=U().area(r.wrapped);return Math.sqrt(i/(4*Math.PI))}function dQ(e,t,n){try{let r=W(U().offset(e.wrapped,t,n));return TE(r)?O(r):(r[Symbol.dispose](),k(po(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 fQ(e,t,n){let r=U();try{let i=HE(e),a=HE(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 TE(s)?O(s):(s[Symbol.dispose](),k(po(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 pQ(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(!TE(e)||!TE(t))return k(F(N.MINKOWSKI_NOT_3D,`minkowski: both shape and tool must be 3D`));let i=uQ(t);return i===null?fQ(e,t,r):dQ(e,i,r)}function mQ(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 CE(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 hQ=1e-10;function gQ(e,t,n,r){return e*r-t*n}function _Q(e,t,n,r){return e*n+t*r}function vQ(e,t){return Math.sqrt(e*e+t*t)}function yQ(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 bQ(e){let t=0;for(let n=0;n<e.length;n++){let r=yQ(e,n),i=yQ(e,n+1);t+=r.x*i.y-i.x*r.y}return t<0?[...e].reverse():e}function xQ(e,t){let n=yQ(e,t-1),r=yQ(e,t),i=yQ(e,t+1),a=r.x-n.x,o=r.y-n.y,s=vQ(a,o),c=i.x-r.x,l=i.y-r.y,u=vQ(c,l);if(s<hQ||u<hQ)return{dx:0,dy:0};let d=-o/s,f=a/s,p=-l/u,m=c/u,h=d+p,g=f+m,_=vQ(h,g);if(_<hQ)return{dx:d,dy:f};h/=_,g/=_;let v=_Q(h,g,d,f),y=Math.abs(v)>hQ?1/v:1;return{dx:h*y,dy:g*y}}function SQ(e){return!e.prev||!e.next?!1:gQ(e.x-e.prev.x,e.y-e.prev.y,e.next.x-e.x,e.next.y-e.y)<-1e-10}function CQ(e){let t=e.map((t,n)=>{let r=xQ(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 wQ(e,t){let n=e;for(let e=0;e<t&&n;e++)n.active=!1,n=n.next}function TQ(e){let t=1,n=e.next;for(;n!==e&&(t++,n=n.next,!(t>1e4)););return t}function EQ(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)<hQ&&Math.abs(r)<hQ)return null;let o;if(o=Math.abs(n)>Math.abs(r)?i/n:a/r,o<hQ)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)>hQ){let e=c/s;if(Math.abs(o-e)>1e-4*Math.max(1,Math.abs(o)))return null}return o}function DQ(e,t,n){let r=n.x-t.x,i=n.y-t.y,a=vQ(r,i);if(a<hQ)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)<hQ)return null;let f=-c/d;if(f<hQ)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=vQ(y,b);if(x<hQ)return f;let S=_Q(p-h,m-g,y,b)/(x*x);return S<-.01||S>1.01?null:f}function OQ(e){let t=[];for(let n of e){if(!n.active||!n.next)continue;let e=EQ(n,n.next);if(e!==null&&e>hQ){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(SQ(n)){let e=n.next.next,r=0;for(;e!==n.prev&&e!==n&&r<1e3;){let i=DQ(n,e,e.next);if(i!==null&&i>hQ){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 kQ(e){if(e.length<3)return O({nodes:[],faces:[]});try{return O(AQ(e))}catch(e){return k(I(N.STRAIGHT_SKELETON_FAILED,e instanceof Error?e.message:String(e),e))}}function AQ(e){let t=bQ(e),n=t.length,r=[],i=Array.from({length:n},()=>[]),a=CQ(t),o=0,s=n*n*2;for(;o<s;){o++;let e=a.find(e=>e.active);if(!e)break;let t=TQ(e);if(t<=3){if(t===3){let t=e,n=t.next,a=n.next,o=EQ(t,n),s=o!==null&&o>hQ?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 wQ(e,t);continue}let n=a.filter(e=>e.active),s=OQ(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=xQ(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=xQ(f(e),0);e.bx=p.dx,e.by=p.dy;let m=xQ(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=[yQ(t,e),yQ(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&&vQ(n.x-i.x,n.y-i.y)>hQ&&(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 jQ(e){let t=zE(e).map(e=>{let t=ik(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 MQ(e){let t=[];for(let n=1;n<e-1;n++)t.push([0,n,n+1]);return t}function NQ(e,t,n,r,i,a){return(n-e)*(a-t)-(r-t)*(i-e)}function PQ(e,t,n,r,i,a,o,s){let c=NQ(n,r,i,a,e,t),l=NQ(i,a,o,s,e,t),u=NQ(o,s,n,r,e,t);return!((c<0||l<0||u<0)&&(c>0||l>0||u>0))}function FQ(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||NQ(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&&PQ(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 IQ(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=MQ(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 LQ(e,t){let n=(t?.angle??45)*aD,r=Math.tan(n);try{let t=jQ(e);if(t.length<3)return k(P(N.ROOF_FAILED,`Wire must have at least 3 edges for roof generation`));let n=kQ(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=IQ(i,r,a);for(let[e,n,r]of FQ(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(hE(a.fixShape(e)))}catch(e){try{let t=hE(a.sew(o,1e-6));return eE(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))}}function RQ(e){return[[1,0,0,e[0]],[0,1,0,e[1]],[0,0,1,e[2]],[0,0,0,1]]}function zQ(e){let t=e[0];return t!==void 0&&typeof t[0]==`number`}function BQ(e,t,n){return{__instanced:!0,source:e,placements:t,grid:n,[Symbol.dispose](){e[Symbol.dispose]()}}}function VQ(e){return typeof e==`object`&&!!e&&e.__instanced===!0}function HQ(e,t){return BQ(e,zQ(t)?t.map(RQ):t.map(e=>e.map(e=>[...e])))}function UQ(e,t){let{cols:n,rows:r,pitchX:i,pitchY:a}=t;if(!Number.isInteger(n)||!Number.isInteger(r)||n<1||r<1)throw RangeError(`instanceGrid: cols and rows must be positive integers, got ${n}x${r}`);let o=[];for(let e=0;e<n;e++)for(let t=0;t<r;t++)o.push(RQ([e*i,t*a,0]));return BQ(e,o,{cols:n,rows:r,pitchX:i,pitchY:a})}function WQ(e){return e.placements.length}function GQ(e,t={}){let{source:n,placements:r,grid:i}=e;return r.length===0?k(F(`INSTANCE_EMPTY`,`materialize: instance has no placements`)):t.fuse?TE(n)?i?fP(n,[1,0,0],[0,1,0],i.cols,i.rows,i.pitchX,i.pitchY):KQ(n,r,!0):k(F(`MATERIALIZE_NOT_3D`,`materialize({fuse:true}) requires a 3D source shape`)):KQ(n,r,!1)}function KQ(e,t,n){let r=[];for(let n of t){let t=qO(e,n);if(!t.ok){for(let e of r)e[Symbol.dispose]();return t}r.push(t.value)}let i=n?_A(r,{unsafe:!0}):O(BA(r));for(let e of r)(!i.ok||e!==i.value)&&e[Symbol.dispose]();return i}function qQ(e,t){return{geometry:Ok(e.source,t),instances:e.placements}}var JQ={coincident:3,concentric:4,distance:1,angle:1},YQ=[1,0,0,0];function XQ(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function ZQ(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function QQ(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function $Q(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 e$(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function t$(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function n$(e){return t$($Q(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function r$(e,t){let n=XQ(TP(t.rotation,e.origin),t.position);return{type:e.type,origin:n,...e.normal?{normal:TP(t.rotation,e.normal)}:{},...e.direction?{direction:TP(t.rotation,e.direction)}:{}}}function i$(e,t,n){let r=e.normal??[0,0,1];return{position:e$(r,QQ(r,ZQ(e.origin,t.origin))+n),rotation:YQ}}function a$(e,t){let n=e.direction??[0,0,1],r=DP(t.direction??[0,0,1],n),i=TP(r,t.origin);return{position:ZQ(e.origin,i),rotation:r}}function o$(e,t,n){let r=t$(e.normal??[0,0,1]),i=t$(t.normal??[0,0,1]),a=Math.acos(Math.max(-1,Math.min(1,QQ(i,r)))),o=$Q(i,r);return{position:[0,0,0],rotation:EP(Math.hypot(o[0],o[1],o[2])<1e-9?n$(i):o,a-n)}}function s$(e,t,n){let r=ZQ(t,e),i=Math.hypot(r[0],r[1],r[2]);return{position:ZQ(XQ(e,e$(i<1e-9?[1,0,0]:e$(r,1/i),n)),t),rotation:YQ}}function c$(e,t,n,r){let i=t$(e);return{position:e$(i,QQ(i,ZQ(t,n))-r),rotation:YQ}}function l$(e,t,n){let r=t$(e.direction??[0,0,1]),i=XQ(e.origin,e$(r,QQ(r,ZQ(t,e.origin))));if(n===0)return{position:ZQ(i,t),rotation:YQ};let a=ZQ(t,i),o=Math.hypot(a[0],a[1],a[2]);return{position:ZQ(XQ(i,e$(o<1e-9?n$(r):e$(a,1/o),n)),t),rotation:YQ}}function u$(e,t,n){let r=t$(t.direction??[0,0,1]),i=ZQ(t.origin,e),a=ZQ(i,e$(r,QQ(r,i))),o=Math.hypot(a[0],a[1],a[2]);return n===0?{position:e$(a,-1),rotation:YQ}:{position:ZQ(e$(o<1e-9?n$(r):e$(a,1/o),n),a),rotation:YQ}}function d$(e,t,n){let r=t$(e.direction??[0,0,1]),i=DP(t$(t.direction??[0,0,1]),r),a=ZQ(TP(i,t.origin),e.origin),o=ZQ(a,e$(r,QQ(r,a))),s=Math.hypot(o[0],o[1],o[2]);return{position:ZQ(e$(s<1e-9?n$(r):e$(o,1/s),n),o),rotation:i}}var f$=new Set([`plane-plane`,`plane-point`,`point-plane`,`point-point`,`axis-axis`,`axis-point`,`point-axis`]),p$={angle:`plane`,concentric:`axis`},m$=new Set([`coincident`,`distance`,`angle`,`concentric`]);function h$(e,t,n){let r=p$[e];return r?t===r&&n===r:f$.has(`${t}-${n}`)}function g$(e,t,n){switch(`${e.type}-${t.type}`){case`plane-plane`:case`plane-point`:return i$(e,t,n);case`point-plane`:return c$(t.normal??[0,0,1],e.origin,t.origin,n);case`point-point`:return s$(e.origin,t.origin,n);case`axis-axis`:return n===0?a$(e,t):d$(e,t,n);case`axis-point`:return l$(e,t.origin,n);case`point-axis`:return u$(e.origin,t,n);default:return null}}function _$(e,t,n){switch(e.type){case`concentric`:return a$(t,n);case`angle`:return o$(t,n,(e.value??0)*Math.PI/180);default:{let r=g$(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 v$(e,t){let n=new Map;for(let t of e)n.set(t,{position:[0,0,0],rotation:YQ});let r=[],i=t.filter(e=>m$.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(!h$(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:YQ},l=r$(r.entity,a);n.set(i.node,_$(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+(JQ[t]??JQ[t.split(`(`)[0]??``]??0),0),converged:r.length===0,unsupported:r}}function y$(e){if(e.face){let t=nO(e.face);return t?{type:`axis`,origin:t.origin,direction:t.direction}:{type:`plane`,origin:tO(e.face),normal:eO(e.face)}}if(e.edge){if(rk(e.edge)===`LINE`)return{type:`axis`,origin:ik(e.edge),direction:sk(e.edge)};let t=lk(e.edge);return t?{type:`axis`,origin:t.origin,direction:t.direction}:null}return e.point?{type:`point`,origin:e.point}:null}function b$(e,t){let n=y$(e),r=y$(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 x$(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=b$(e.entityA,e.entityB);return t.ok?O({type:`coincident`,...t.value}):t}case`distance`:{let t=b$(e.entityA,e.entityB);return t.ok?O({type:`distance`,...t.value,value:e.distance}):t}case`angle`:{let t=b$(e.entityA,e.entityB);return t.ok?O({type:`angle`,...t.value,value:e.angle}):t}case`concentric`:{let t=b$(e.axisA,e.axisB);return t.ok?O({type:`concentric`,...t.value}):t}}}function S$(e,t){let n=e.mates??[];return{...e,mates:[...n,t]}}function C$(e){let t=e.mates;if(!t||t.length===0)return k(F(N.ASSEMBLY_MATE_INVALID,`solveAssembly: no mates defined`));try{let n=[];vP(e,e=>{n.push(e.name)});let r=[];for(let e of t){let t=x$(e);if(!t.ok)return t;r.push(t.value)}let i=v$(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 w$(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 T$(e,n=1e-6){let r=[],i=e.map(e=>$E(e));return e.forEach((a,o)=>{for(let s=o+1;s<e.length;s++){if(E$(t(i,o),t(i,s),n))continue;let c=j(w$(a,t(e,s),n));c.hasInterference&&r.push({i:o,j:s,result:c})}}),r}function E$(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 D$(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 O$(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 k$(e){let{type:t,data:n}=e,r=U();if(t===`LINE`)return r.makeLineEdge([O$(n,10),O$(n,20),O$(n,30)],[O$(n,11),O$(n,21),O$(n,31)]);if(t===`CIRCLE`)return r.makeCircleEdge([O$(n,10),O$(n,20),O$(n,30)],[0,0,1],O$(n,40));if(t===`ARC`){let e=O$(n,50)*Math.PI/180,t=O$(n,51)*Math.PI/180;return r.makeCircleArc([O$(n,10),O$(n,20),O$(n,30)],[0,0,1],O$(n,40),e,t)}}async function A$(e,t){let n;try{n=await e.text()}catch(e){return k(go(N.DXF_IMPORT_FAILED,`Failed to read DXF blob`,e))}let r=D$(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=k$(e);t!==void 0&&a.push(t)}return a.length===0?O([]):O([fE(U().makeWire(a))])}catch(e){return k(go(N.DXF_IMPORT_FAILED,`Failed to convert DXF entities to geometry`,e))}finally{for(let e of a)e.delete()}}function j$(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(go(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(go(t,`Failed to sew triangular faces`,e))}}}function M$(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 N$(e){return e.split(/\s+/).slice(1).map(e=>parseInt(e.split(`/`)[0]??``,10)).filter(e=>!isNaN(e))}async function P$(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=M$(t);e&&n.push(e)}else if(t.startsWith(`f `)){let e=N$(t);e.length>=3&&r.push(e)}}if(n.length===0||r.length===0)return k(go(N.OBJ_IMPORT_FAILED,`OBJ file contains no valid geometry`));try{return F$(n,r)}catch(e){let t=e instanceof Error?e.message:String(e);return k(go(N.OBJ_IMPORT_FAILED,`OBJ import failed: ${t}`,e))}}function F$(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 j$(n,N.OBJ_IMPORT_FAILED)}function I$(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 L$(e){return e>=97&&e<=122||e>=65&&e<=90||e>=48&&e<=57||e===95}function R$(e){let t={},n=0;for(;n<e.length;){let r=e.indexOf(`="`,n);if(r<0)break;let i=r;for(;i>0&&L$(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 z$(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 B$(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 V$(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 H$(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=R$(e.slice(r,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of z$(a,`color`)){let t=R$(e).color;t!==void 0&&l.push(V$(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=R$(e.slice(n,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of z$(a,`base`)){let t=R$(e).displaycolor;t===void 0?l.push([0,0,0,1]):l.push(V$(t))}t.set(c,l)}return t}function U$(e){let t=[],n=[],r=[],i=H$(e);for(let n of z$(e,`vertex`)){let e=R$(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=B$(e,`object`);if(s!==null){let e=s.indexOf(`>`);if(e>=0){let t=R$(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 z$(e,`triangle`)){let e=R$(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 W$(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 G$(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 j$(t,N.THREEMF_IMPORT_FAILED)}}async function K$(e){try{let t=await e.arrayBuffer(),n=I$(new Uint8Array(t),`3D/3dmodel.model`);if(!n)return k(go(N.THREEMF_IMPORT_FAILED,`3MF archive does not contain 3D/3dmodel.model (or uses unsupported compression)`));let r=U$(new TextDecoder().decode(n));if(r.vertices.length===0||r.triangles.length===0)return k(go(N.THREEMF_IMPORT_FAILED,`3MF model contains no valid geometry`));let i=G$(r);if(i.ok){let e=W$(r.triangleColors);e!==null&&kO(i.value,e)}return i}catch(e){let t=e instanceof Error?e.message:String(e);return k(go(N.THREEMF_IMPORT_FAILED,`3MF import failed: ${t}`,e))}}async function q$(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(go(N.GLB_IMPORT_FAILED,`Failed to import GLB: ${t}`,e))}}function $(e){return`__wrapped`in e?e.val:e}function J$(e){return $(e)}function Y$(e,t){return zO($(e),t)}function X$(e,t,n){let r=n?.at;return BO($(e),t,r,n?.axis)}function Z$(e,t){let n=t?.at;return VO($(e),t?.normal??[1,0,0],n)}function Q$(e,t,n){return HO($(e),t,n?.center)}function $$(e){return XO($(e))}function e1(e,t){return qO($(e),t)}function t1(e,t){return YO($(e),t)}function n1(e,t,n){return pA($(e),$(t),{...n,unsafe:!0})}function r1(e,t,n){return mA($(e),$(t),{...n,unsafe:!0})}function i1(e,t){return _A(e.map(e=>$(e)),{...t,unsafe:!0})}function a1(e,t,n){return vA($(e),t.map(e=>$(e)),{...n,unsafe:!0})}function o1(e,t,n){return hA($(e),$(t),{...n,unsafe:!0})}function s1(e,t,n){return bA($(e),t,n)}function c1(e,t,n){return EA($(e),t,n)}function l1(e,t){return DA($(e),t)}function u1(e,t,n){return OA($(e),t,n)}function d1(e,t){if(e!==void 0)return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(fI()).findAll(t)}function f1(e,t){return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(hI()).findAll(t)}function p1(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 m1(e,t,n){let r=$(e),i,a;return n===void 0?(i=void 0,a=t):(i=d1(t,r),a=n),Ej(r,i,a)}function h1(e,t,n){let r=$(e),i,a;n===void 0?(i=void 0,a=t):(i=d1(t,r),a=n);let o=p1(a);return o.mode===`distAngle`?qA(r,[...i??zE(r)],o.distance,o.angle):Dj(r,i,o.distance)}function g1(e,t,n,r){let i=$(e);return Oj(i,f1(t,i),n,r?.tolerance)}function _1(e,t,n){return kj($(e),t,n?.tolerance)}function v1(e,t){return wj($(e),t)}function y1(e,t,n){let r=$(e);return jj(r,f1(t,r),n.pullDirection,n.neutralPlane,n.angle)}function b1(e){return Lj($(e))}function x1(e){return nk($(e))}function S1(e,t){return Ok($(e),t)}function C1(e,t){return kk($(e),t)}function w1(e){return rD($(e))}function T1(e){return ZO($(e))}function E1(e){return WD(e)}function D1(e){return Nj($(e))}function O1(e){return $O($(e))}function k1(e,t){return $j($(e),typeof t==`number`?[0,0,t]:t)}function A1(e,t){let n=t?.at??[0,0,0];return eM($(e),n,t?.axis??[0,0,1],t?.angle??2*Math.PI)}function j1(e,t){return nM(e.map(e=>$(e)),t)}function M1(e,n){if(n===void 0){let t=BE(e);if(t.length===0)return k(F(N.COMPOUND_NO_FACES,`compoundOps: shape has no faces`));let n=Wk(t),r=tO(n)[2];for(let e=1;e<t.length;e++){let i=Uk(t,e),a=tO(i)[2];a>r&&(n=i,r=a)}return O(n)}if(typeof n==`function`){let r=n(hI()).findAll(e);return r.length===0?k(_o(N.COMPOUND_FACE_NOT_FOUND,`compoundOps: face finder matched no faces`)):O(t(r,0))}return O(n)}function N1(e){return`sketchOnPlane`in e&&typeof e.sketchOnPlane==`function`?e.sketchOnPlane(`XY`).wire:e}function P1(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(SD(o))return k(F(`DRILL_ZERO_AXIS`,`Drill axis cannot be zero`));let s=bD(o),c=r.length===2?[r[0],r[1],0]:[r[0],r[1],r[2]],l;if(t.depth!==void 0)l=NA(i,t.depth,c,s);else{let e=$E(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=NA(i,a-r,[c[0]+s[0]*r,c[1]+s[1]*r,c[2]+s[2]*r],s)}return mA(n,l,{unsafe:!0})}function F1(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=M1(n,t.face);if(A(a))return a;let o=a.value,s=eO(o),c=tO(o),l=aA(N1(r));if(A(l))return l;let u=$j(zO(l.value,c),pD(bD(s),-i));return A(u)?u:mA(n,u.value,{unsafe:!0})}function I1(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=M1(n,t.face);if(A(a))return a;let o=a.value,s=eO(o),c=tO(o),l=aA(N1(r));if(A(l))return l;let u=$j(zO(l.value,c),pD(bD(s),i));return A(u)?u:pA(n,u.value,{unsafe:!0})}function L1(e,t){let n=$(e),r=t?.normal??[1,0,0],i=t?.at;return SD(r)?k(F(`MIRROR_ZERO_NORMAL`,`Mirror plane normal cannot be zero`)):pA(n,VO(n,r,i),{unsafe:!0})}function R1(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(SD(r))return k(F(`PATTERN_ZERO_DIRECTION`,`X direction cannot be zero`));if(SD(o))return k(F(`PATTERN_ZERO_DIRECTION`,`Y direction cannot be zero`));if(i===1&&s===1)return O(n);let l=bD(r),u=bD(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(zO(n,r))}return _A(d,{unsafe:!0})}var z1=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 B1(e){if(A(e))throw new z1(e.error);return e.value}function V1(e){return e}function H1(e){return e}function U1(e){return e}function W1(e){return e}function G1(e){return{val:e,__wrapped:!0,translate:t=>t0(Y$(e,t)),rotate:(t,n)=>t0(X$(e,t,n)),mirror:t=>t0(Z$(e,t)),scale:(t,n)=>t0(Q$(e,t,n)),applyMatrix:t=>t0(B1(e1(e,t))),moveX:t=>t0(Y$(e,[t,0,0])),moveY:t=>t0(Y$(e,[0,t,0])),moveZ:t=>t0(Y$(e,[0,0,t])),rotateX:t=>t0(X$(e,t,{axis:[1,0,0]})),rotateY:t=>t0(X$(e,t,{axis:[0,1,0]})),rotateZ:t=>t0(X$(e,t,{axis:[0,0,1]})),bounds:()=>$E(e),describe:()=>w1(e),clone:()=>t0(B1($$(e))),mesh:t=>S1(e,t),meshEdges:t=>C1(e,t),isValid:()=>D1(e),isEmpty:()=>O1(e),heal:()=>t0(B1(b1(e))),simplify:()=>t0(B1(x1(e))),toBREP:()=>B1(T1(e)),apply:t=>t0(t(e)),applyResult:t=>t0(B1(t(e))),done:()=>e}}function K1(e){return{fuse:(t,n)=>n0(B1(n1(e,$(t),{...n,unsafe:!0}))),cut:(t,n)=>n0(B1(r1(e,$(t),{...n,unsafe:!0}))),intersect:(t,n)=>n0(B1(o1(e,$(t),{...n,unsafe:!0}))),fuseAll:(t,n)=>n0(W1(B1(_A([e,...t.map($)],{...n,unsafe:!0})))),cutAll:(t,n)=>n0(W1(B1(vA(e,t,{...n,unsafe:!0})))),section:(t,n)=>t0(B1(s1(e,t,n))),split:t=>t0(B1(l1(e,t))),slice:(t,n)=>B1(u1(e,t,n))}}function q1(e){return{fillet(...t){return t.length===1?n0(W1(B1(m1(V1(e),t[0])))):n0(W1(B1(m1(V1(e),t[0],t[1]))))},chamfer(...t){return t.length===1?n0(W1(B1(h1(V1(e),t[0])))):n0(W1(B1(h1(V1(e),t[0],t[1]))))},shell:(t,n,r)=>n0(W1(B1(g1(V1(e),t,n,r)))),offset:(t,n)=>n0(W1(B1(_1(V1(e),t,n)))),draft:(t,n)=>n0(W1(B1(y1(V1(e),t,n))))}}function J1(e){return{drill:t=>n0(B1(P1(e,t))),pocket:t=>n0(B1(F1(e,t))),boss:t=>n0(B1(I1(e,t))),mirrorJoin:t=>n0(B1(L1(e,t))),rectangularPattern:t=>n0(B1(R1(e,t)))}}function Y1(e){return{volume:()=>B1(fM(e)),area:()=>B1(pM(e)),volumeProps:()=>B1(lM(e)),surfaceProps:()=>B1(uM(e))}}function X1(e){return{edges:()=>zE(e),faces:()=>BE(e),wires:()=>VE(e),vertices:()=>HE(e)}}function Z1(e){return{linearPattern:(t,n,r)=>n0(W1(B1(uP(e,t,n,r)))),circularPattern:(t,n,r)=>n0(W1(B1(dP(e,t,n,r))))}}function Q1(e){return{...G1(e),...K1(e),...q1(e),...J1(e),...Y1(e),...X1(e),...Z1(e)}}function $1(e){return{...G1(e),length:()=>ck(e),startPoint:()=>ik(e),endPoint:()=>ak(e),pointAt:t=>ok(e,t),tangentAt:t=>sk(e,t),isClosed:()=>uk(e),sweep(t,n){if(!bE(e))throw Error(`sweep requires a Wire`);let r=B1(Gj(U1(e),$(t),n));return n0(Array.isArray(r)?r[0]:r)}}}function e0(e){return{...G1(e),area:()=>B1(pM(e)),normalAt:t=>eO(e,t),center:()=>tO(e),surfaceType:()=>B1(KD(e)),outerWire:()=>iO(e),innerWires:()=>oO(e),extrude:t=>n0(B1(k1(H1(e),t))),revolve:t=>n0(B1(A1(H1(e),t)))}}function t0(e){return TE(e)?Q1(e):xE(e)?e0(e):yE(e)||bE(e)?$1(e):G1(e)}function n0(e){return Q1(e)}function r0(e){if(e&&typeof e==`object`&&`face`in e&&typeof e.face==`function`&&`_defaultOrigin`in e)return e0(e.face());if(e&&typeof e==`object`&&`wrapped`in e)return xE(e)?e0(e):TE(e)?Q1(e):yE(e)||bE(e)?$1(e):G1(e);throw Error(`shape() requires a Sketch or branded shape type`)}var i0=.25,a0=e=>Math.tan(e)-e;function o0(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 s0(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(o0(e,s*t,n,i))}return a}function c0(e){return Math.max(16,Math.round(8*Math.sqrt(e)))}function l0(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 u0(e,t,n){if(t===0)return O(e);let r=a0(e)+2*t*Math.tan(e)/n,i,a;if(r>a0(e)?(i=e,a=Math.PI/2-1e-6):(i=1e-4,a=e),r>a0(a)||r<a0(i))return k(F(`GEAR_PA_OUT_OF_RANGE`,`working pressure angle out of range — target inv(αw)=${r.toFixed(4)} not in [${a0(i).toFixed(4)}, ${a0(a).toFixed(4)}]`,void 0,{target:r,invLo:a0(i),invHi:a0(a)}));for(let e=0;e<50;e++){let e=.5*(i+a);a0(e)<r?i=e:a=e}return O(.5*(i+a))}function d0(e,t,n,r,i){return u0(e,t+n,r+i)}function f0(e,t,n,r,i){return u0(e,n-t,i-r)}function p0(e,t,n,r,i){return(e+t)*n*Math.cos(r)/(2*Math.cos(i))}function m0(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 h0(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 g0(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 _0(e,t){return 1-e*Math.sin(t)*Math.sin(t)/2}function v0(e,t,n){return Math.max(0,_0(e,t)-n)}function y0(e){return e<8?.2:.485-2.88/e}function b0(e,t,n,r){let i=e*1e3,a=y0(r);return a<=0||n<=0||t<=0?1/0:2*i/(r*t*t*n*a)}function x0(e,t,n=!1){let r=(1.4+6.5/e)*(20/(t*180/Math.PI))**.15;return n?r*.85:r}function S0(e,t,n,r,i,a=!1){return b0(e,t,n,r)*x0(r,i,a)}function C0(e){return e/2}function w0(e,t){return e+2*t}function T0(e){return e%2==0?Math.PI/e:0}function E0(e,t,n){return e*(1+t/n)+T0(n)}function D0(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=m0(n,r,i,s);if(A(c))return c;let l=d0(a,o,s,n,r);if(A(l))return l;let u=p0(n,r,t,a,l.value),d=[];for(let e=0;e<i;e++){let t=e*2*Math.PI/i,a=E0(t,n,r);d.push({rotationDeg:a*180/Math.PI,position:[u*Math.cos(t),u*Math.sin(t),0]})}return O(d)}function O0(e,t,n,r,i){let a=t*e.toothPitch,o=(t+1)%n*e.toothPitch,s=a0(e.alphaPitch),c=a-e.halfToothAngle-s,l=a+e.halfToothAngle+s,u=s0(e.rb,e.alphaTip,c,r,1),d=s0(e.rb,e.alphaTip,l,r,-1).reverse(),f=Wk(u),p=Gk(u),m=Wk(d),h=Gk(d),g=[],_=e=>{i.register(e),g.push(e)},v=e.isInternal?e.rb<e.rRoot:e.rb>e.rRoot;v&&_(Jk([e.rRoot*Math.cos(c),e.rRoot*Math.sin(c),0],f));let y=e.rPitch*1e-5,b=tA(u,{tolerance:y});if(A(b))return b;_(b.value),_(Qk(p,[e.rTip*Math.cos(a),e.rTip*Math.sin(a),0],m));let x=tA(d,{tolerance:y});if(A(x))return x;_(x.value),v&&_(Jk(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),_(Qk(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 k0(e){return j0(e,!1)}function A0(e){return j0(e,!0)}function j0(e,t){try{var n=wT();let{teeth:r,moduleSize:i,pressureAngle:a,shift:o,clearance:s,flankThinning:c,samples:l=c0(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=l0(r,i,a,o,s,c,t),d=n.u(new IT),f=[];for(let e=0;e<r;e++){let t=O0(u,e,r,l,d);if(A(t))return t;f.push(...t.value)}let p=iA(f);return A(p)?p:O(p.value)}catch(e){n.e=e}finally{n.d()}}function M0(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=i0,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=l0(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=k0({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(A(f))return f;let p=P0(t,u,a);return z0(f.value,r,c,d,p)}function N0(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=i0,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=A0({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(A(d))return d;let f=l0(t,n,u,a,o,s,!0),p=R0(f.rPitch+c);return A(p)?p:V0(p.value,d.value,r,f,[])}function P0(e,t,n){let r=v0(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 F0(e){let t=L0(e);if(A(t))return t;let n=t.value,r=I0(n);if(A(r))return r;let{sun:i,planet:a,ring:o}=r.value,s=G0(n,i,a,o),c=U0(a.solid,n);a.solid.delete();let l=W0(o.solid,n.zr),u=K0(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 I0(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=M0({...n,teeth:e.sunTeeth,shift:e.sunShift,bore:e.sunBore});if(A(r))return r;let i=M0({...n,teeth:e.planetTeeth,shift:e.planetShift,bore:e.planetBore});if(A(i))return r.value.solid.delete(),i;let a=N0({...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 L0(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=m0(n,r,i,c);if(A(u))return u;let d=w0(n,r),f=d0(o,s,c,n,r);if(A(f))return f;let p=f0(o,c,l,r,d);if(A(p))return p;let m=p0(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:C0(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 R0(e){try{var t=wT();let n=iA([t.u(new IT).register(Yk(e,[0,0,0],[0,0,1]))]);return A(n)?n:O(n.value)}catch(e){t.e=e}finally{t.d()}}function z0(e,t,n,r,i){try{var a=wT();let o=aA(e);if(A(o))return o;let s=$j(o.value,[0,0,t]);if(A(s))return s;if(n<=0)return O(H0(s.value,r,i));let c=a.u(new IT),l=B0(n/2);if(A(l))return l;c.register(l.value);let u=$j(l.value,[0,0,t+1]);if(A(u))return u;c.register(u.value);let d=c.register(zO(u.value,[0,0,-.5])),f=mA(s.value,d);return A(f)?f:O(H0(f.value,r,i))}catch(e){a.e=e}finally{a.d()}}function B0(e){let t=R0(e);return A(t)?t:aA(t.value)}function V0(e,t,n,r,i){let a=aA(e,[t]);if(A(a))return a;let o=$j(a.value,[0,0,n]);return A(o)?o:O(H0(o.value,r,i))}function H0(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 U0(e,t){let n=[];try{for(let r=0;r<t.numPlanets;r++){let i=r*2*Math.PI/t.numPlanets,a=BO(e,E0(i,t.sunTeeth,t.planetTeeth)*180/Math.PI);try{let e=[t.centerDistance*Math.cos(i),t.centerDistance*Math.sin(i),0];n.push(zO(a,e))}finally{a.delete()}}return n}catch(e){for(let e of n)e.delete();throw e}}function W0(e,t){let n=T0(t);if(n===0)return e;let r=BO(e,n*180/Math.PI);return e.delete(),r}function G0(e,t,n,r){let i={crSunPlanet:h0(t.tipDiameter/2,t.baseDiameter/2,n.tipDiameter/2,n.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_sp),crPlanetRing:g0(n.tipDiameter/2,n.baseDiameter/2,r.tipDiameter/2,r.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_pr),undercutSun:v0(e.sunTeeth,e.alpha,e.sunShift),undercutPlanet:v0(e.planetTeeth,e.alpha,e.planetShift)};if(e.appliedTorque!==void 0){let t=e.appliedTorque;i.lewisStress={sun:S0(t,e.moduleSize,e.thickness,e.sunTeeth,e.alpha),planet:S0(t*e.planetTeeth/e.sunTeeth,e.moduleSize,e.thickness,e.planetTeeth,e.alpha),ring:S0(t*e.zr/e.sunTeeth,e.moduleSize,e.thickness,e.zr,e.alpha,!0)},i.stressConcentrationFactor={sun:x0(e.sunTeeth,e.alpha),planet:x0(e.planetTeeth,e.alpha),ring:x0(e.zr,e.alpha,!0)}}return i}function K0(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 q0=tX({addHoles:()=>oP,bezier:()=>qN,box:()=>PN,bsplineApprox:()=>KN,circle:()=>VN,compound:()=>nP,cone:()=>LN,cylinder:()=>FN,ellipse:()=>HN,ellipseArc:()=>GN,ellipsoid:()=>zN,face:()=>ZN,fill:()=>oA,filledFace:()=>QN,helix:()=>UN,line:()=>BN,offsetFace:()=>iP,polygon:()=>eP,polyhedron:()=>mQ,sewShells:()=>aP,solid:()=>rP,sphere:()=>IN,subFace:()=>$N,tangentArc:()=>JN,threePointArc:()=>WN,torus:()=>RN,vertex:()=>tP,wire:()=>YN,wireLoop:()=>XN}),J0=tX({checkBoolean:()=>sj,convexHull:()=>lQ,cut:()=>r1,cutAll:()=>vA,cutAllBisect:()=>QA,fuse:()=>n1,fuseAll:()=>_A,fuseAllBisect:()=>nj,hull:()=>cQ,intersect:()=>o1,minkowski:()=>pQ,section:()=>s1,sectionToFace:()=>c1,slice:()=>u1,split:()=>l1}),Y0=tX({chamfer:()=>h1,draft:()=>y1,fillet:()=>m1,heal:()=>b1,offset:()=>_1,shell:()=>g1,simplify:()=>x1,thicken:()=>v1,variableFillet:()=>Mj}),X0=tX({applyMatrix:()=>e1,clone:()=>$$,composeTransforms:()=>JO,mirror:()=>Z$,rotate:()=>X$,scale:()=>Q$,transformCopy:()=>t1,translate:()=>Y$}),Z0=tX({checkAllInterferences:()=>T$,checkInterference:()=>w$,createDistanceQuery:()=>_M,measureArea:()=>pM,measureCurvatureAt:()=>vM,measureCurvatureAtMid:()=>yM,measureDistance:()=>hM,measureDistanceProps:()=>gM,measureLength:()=>mM,measureLinearProps:()=>dM,measureSurfaceProps:()=>uM,measureVolume:()=>fM,measureVolumeProps:()=>lM}),Q0=tX({blueprintToDXF:()=>UJ,exportAssemblySTEP:()=>lP,exportDXF:()=>HJ,exportGlb:()=>kJ,exportGltf:()=>OJ,exportIGES:()=>Fk,exportOBJ:()=>vJ,exportSTEP:()=>Nk,exportSTEPConfigured:()=>EY,exportSTL:()=>Pk,exportThreeMF:()=>cY,importDXF:()=>A$,importGLB:()=>q$,importIGES:()=>kY,importOBJ:()=>P$,importSTEP:()=>DY,importSTL:()=>OY,importSVG:()=>TY,importSVGPathD:()=>wY,importThreeMF:()=>K$}),$0=tX({cornerFinder:()=>HL,edgeFinder:()=>fI,faceFinder:()=>hI,getSingleFace:()=>vI,vertexFinder:()=>uX,wireFinder:()=>_I}),e2=tX({complexExtrude:()=>qj,extrude:()=>k1,guidedSweep:()=>Qj,loft:()=>j1,multiSectionSweep:()=>Zj,revolve:()=>A1,roof:()=>LQ,supportExtrude:()=>Kj,surfaceFromGrid:()=>rQ,surfaceFromImage:()=>oQ,sweep:()=>Gj,twistExtrude:()=>Jj}),t2=tX({circularPattern:()=>dP,linearPattern:()=>uP}),n2=14695981039346656037n,r2=1099511628211n,i2=18446744073709551615n;function a2(){return n2}function o2(e,t){return(e^BigInt(t&255))*r2&i2}function s2(e,t){let n=e;for(let e=0;e<t.length;e++)n=o2(n,t[e]??0);return n}var c2=new TextEncoder;function l2(e,t){return s2(e,c2.encode(t))}var u2=new ArrayBuffer(8),d2=new DataView(u2),f2=new Uint8Array(u2);function p2(e,t){return d2.setFloat64(0,Object.is(t,-0)?0:t),s2(e,f2)}function m2(e,t){let n=e,r=t&i2;for(let e=0;e<8;e++)n=o2(n,Number(r&255n)),r>>=8n;return n}function h2(e,t){let n=e,r=t|0;for(let e=0;e<4;e++)n=o2(n,r&255),r>>>=8;return n}function g2(e,t){return o2(e,+!!t)}function _2(e){return(e&i2).toString(16).padStart(16,`0`)}var v2=new Set;function y2(e){return l2(a2(),e)}function b2(e){return{kind:`NumLit`,value:e,structuralHash:p2(y2(`NumLit`),e),freeParams:v2}}function x2(e){let t=y2(`Vec3Lit`);for(let n of e)t=p2(t,n);return{kind:`Vec3Lit`,value:e,structuralHash:t,freeParams:v2}}function S2(e){let t=y2(`Vec2Lit`);for(let n of e)t=p2(t,n);return{kind:`Vec2Lit`,value:e,structuralHash:t,freeParams:v2}}function C2(e){return{kind:`Param`,name:e,structuralHash:l2(y2(`Param`),e),freeParams:new Set([e])}}function w2(e,t,n){let r=l2(y2(`BinOp`),e);return r=m2(r,t.structuralHash),r=m2(r,n.structuralHash),{kind:`BinOp`,op:e,a:t,b:n,structuralHash:r,freeParams:P2(t.freeParams,n.freeParams)}}function T2(e,t){let n=l2(y2(`UnaryOp`),e);return n=m2(n,t.structuralHash),{kind:`UnaryOp`,op:e,arg:t,structuralHash:n,freeParams:t.freeParams}}function E2(e,t){let n=h2(y2(`Component`),t);return n=m2(n,e.structuralHash),{kind:`Component`,vec:e,index:t,structuralHash:n,freeParams:e.freeParams}}function D2(e,t){let n=h2(y2(`BuildVec`),e),r=new Set;for(let e of t){n=m2(n,e.structuralHash);for(let t of e.freeParams)r.add(t)}return{kind:`BuildVec`,dim:e,components:t,structuralHash:n,freeParams:r}}var O2=(e,t)=>w2(`+`,e,t),k2=(e,t)=>w2(`*`,e,t);function A2(e){return typeof e==`number`?b2(e):e}function j2(e,t){if(!Array.isArray(e))return e;let n=e;return n.every(e=>typeof e==`number`)?t===3?x2([n[0],n[1],n[2]]):S2([n[0],n[1]]):D2(t,n.map(A2))}function M2(e){return j2(e,3)}function N2(e){return j2(e,2)}function P2(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 F2(e){return typeof e==`number`}function I2(e,t){return F2(e)?O(e):k(F(N.NULL_SHAPE_INPUT,`${t}: expected number, got ${Array.isArray(e)?`vector(${e.length})`:typeof e}`))}function L2(e,t,n){return Array.isArray(e)&&e.length===t?O(e):k(F(N.NULL_SHAPE_INPUT,`${n}: expected Vec${t}, got ${F2(e)?`number`:`vector(${e.length})`}`))}function R2(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 z2(e,t);case`UnaryOp`:return B2(e,t);case`Component`:return V2(e,t);case`BuildVec`:return H2(e,t)}}function z2(e,t){let n=R2(e.a,t);if(!n.ok)return n;let r=R2(e.b,t);if(!r.ok)return r;let i=I2(n.value,`BinOp(${e.op}).a`);if(!i.ok)return i;let a=I2(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 B2(e,t){let n=R2(e.arg,t);if(!n.ok)return n;let r=I2(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 V2(e,t){let n=R2(e.vec,t);if(!n.ok)return n;if(F2(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 H2(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=R2(r,t);if(!e.ok)return e;let i=I2(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 U2(e,t,n){let r=R2(e,t);return r.ok?I2(r.value,n):r}function W2(e,t,n){let r=R2(e,t);if(!r.ok)return r;let i=L2(r.value,3,n);if(!i.ok)return i;let[a,o,s]=i.value;return O([a,o,s])}function G2(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 K2=new Set;function q2(e){return l2(a2(),e)}function J2(e,t){return m2(e,t.structuralHash)}function Y2(e,t){return t===void 0?g2(e,!1):J2(g2(e,!0),t)}function X2(e,t){return t===void 0?g2(e,!1):p2(g2(e,!0),t)}function Z2(...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?K2:t}function Q2(e,t,n){let r=A2(e),i=A2(t),a=A2(n),o=q2(`Box`);return o=J2(J2(J2(o,r),i),a),{kind:`Box`,x:r,y:i,z:a,structuralHash:o,freeParams:Z2(r,i,a)}}function $2(e){let t=A2(e);return{kind:`Sphere`,radius:t,structuralHash:J2(q2(`Sphere`),t),freeParams:t.freeParams}}function e4(e,t){let n=A2(e),r=A2(t);return{kind:`Cylinder`,radius:n,height:r,structuralHash:J2(J2(q2(`Cylinder`),n),r),freeParams:Z2(n,r)}}function t4(e,t,n){let r=A2(e),i=A2(t),a=A2(n),o=q2(`Cone`);return o=J2(J2(J2(o,r),i),a),{kind:`Cone`,radius1:r,radius2:i,height:a,structuralHash:o,freeParams:Z2(r,i,a)}}function n4(e,t){let n=A2(e),r=A2(t);return{kind:`Torus`,majorRadius:n,minorRadius:r,structuralHash:J2(J2(q2(`Torus`),n),r),freeParams:Z2(n,r)}}function r4(e){let t=e.map(M2),n=h2(q2(`Polygon`),t.length);for(let e of t)n=J2(n,e);return{kind:`Polygon`,points:t,structuralHash:n,freeParams:Z2(...t)}}function i4(e){let t=A2(e);return{kind:`Circle`,radius:t,structuralHash:J2(q2(`Circle`),t),freeParams:t.freeParams}}function a4(e,t){let n=M2(e),r=M2(t);return{kind:`Line`,from:n,to:r,structuralHash:J2(J2(q2(`Line`),n),r),freeParams:Z2(n,r)}}function o4(e){let t=M2(e);return{kind:`Vertex`,point:t,structuralHash:J2(q2(`Vertex`),t),freeParams:t.freeParams}}function s4(e){return{kind:`Empty`,output:e,structuralHash:l2(q2(`Empty`),e),freeParams:K2}}function c4(){return s4(`Solid`)}function l4(){return s4(`Face`)}function u4(){return s4(`Wire`)}function d4(e,t,n,r){return X2(J2(J2(q2(e),t),n),r)}function f4(e,t,n){return{kind:`Fuse`,a:e,b:t,tolerance:n,structuralHash:d4(`Fuse`,e,t,n),freeParams:Z2(e,t)}}function p4(e,t,n){return{kind:`Cut`,a:e,b:t,tolerance:n,structuralHash:d4(`Cut`,e,t,n),freeParams:Z2(e,t)}}function m4(e,t,n){return{kind:`Intersect`,a:e,b:t,tolerance:n,structuralHash:d4(`Intersect`,e,t,n),freeParams:Z2(e,t)}}function h4(e,t){let n=h2(q2(`FuseAll`),e.length);for(let t of e)n=J2(n,t);return n=X2(n,t),{kind:`FuseAll`,shapes:e,tolerance:t,structuralHash:n,freeParams:Z2(...e)}}function g4(e,t,n){let r=J2(q2(`CutAll`),e);r=h2(r,t.length);for(let e of t)r=J2(r,e);return r=X2(r,n),{kind:`CutAll`,base:e,tools:t,tolerance:n,structuralHash:r,freeParams:Z2(e,...t)}}function _4(e){return e===void 0?void 0:M2(e)}function v4(e,t){let n=M2(t);return{kind:`Translate`,target:e,vector:n,structuralHash:J2(J2(q2(`Translate`),e),n),freeParams:Z2(e,n)}}function y4(e,t,n){let r=A2(t),i=_4(n?.axis),a=_4(n?.at),o=J2(J2(q2(`Rotate`),e),r);return o=Y2(o,i),o=Y2(o,a),{kind:`Rotate`,target:e,angle:r,axis:i,at:a,structuralHash:o,freeParams:Z2(e,r,i,a)}}function b4(e,t,n){let r=A2(t),i=_4(n?.center),a=J2(J2(q2(`Scale`),e),r);return a=Y2(a,i),{kind:`Scale`,target:e,factor:r,center:i,structuralHash:a,freeParams:Z2(e,r,i)}}function x4(e,t){let n=_4(t?.normal),r=_4(t?.at),i=J2(q2(`Mirror`),e);return i=Y2(i,n),i=Y2(i,r),{kind:`Mirror`,target:e,normal:n,at:r,structuralHash:i,freeParams:Z2(e,n,r)}}function S4(e){let t=h2(q2(`Compound`),e.length);for(let n of e)t=J2(t,n);return{kind:`Compound`,children:e,structuralHash:t,freeParams:Z2(...e)}}function C4(e,t,n=!1){let r=t.map(e=>e.map(e=>[...e])),i=h2(g2(J2(q2(`Instance`),e),n),r.length);for(let e of r)for(let t of e.flat())i=p2(i,t);return{kind:`Instance`,source:e,placements:r,fuse:n,structuralHash:i,freeParams:Z2(e)}}function w4(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 w4(e.a);case`FuseAll`:return e.shapes[0]?w4(e.shapes[0]):`Solid`;case`CutAll`:return w4(e.base);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return w4(e.target);case`Compound`:return`Compound`;case`Instance`:return e.fuse?`Solid`:`Compound`}}function T4(e,t){let n=U2(e.x,t.env,`Box.x`);if(!n.ok)return n;let r=U2(e.y,t.env,`Box.y`);if(!r.ok)return r;let i=U2(e.z,t.env,`Box.z`);return i.ok?O(PN(n.value,r.value,i.value)):i}function E4(e,t){let n=U2(e.radius,t.env,`Sphere.radius`);return n.ok?O(IN(n.value)):n}function D4(e,t){let n=U2(e.radius,t.env,`Cylinder.radius`);if(!n.ok)return n;let r=U2(e.height,t.env,`Cylinder.height`);return r.ok?O(FN(n.value,r.value)):r}function O4(e,t){let n=U2(e.radius1,t.env,`Cone.radius1`);if(!n.ok)return n;let r=U2(e.radius2,t.env,`Cone.radius2`);if(!r.ok)return r;let i=U2(e.height,t.env,`Cone.height`);return i.ok?O(LN(n.value,r.value,i.value)):i}function k4(e,t){let n=U2(e.majorRadius,t.env,`Torus.majorRadius`);if(!n.ok)return n;let r=U2(e.minorRadius,t.env,`Torus.minorRadius`);return r.ok?O(RN(n.value,r.value)):r}function A4(e,t){let n=[];for(let r of e.points){let e=W2(r,t.env,`Polygon.point`);if(!e.ok)return e;n.push(e.value)}return eP(n)}function j4(e,t){let n=U2(e.radius,t.env,`Circle.radius`);return n.ok?O(VN(n.value)):n}function M4(e,t){let n=W2(e.from,t.env,`Line.from`);if(!n.ok)return n;let r=W2(e.to,t.env,`Line.to`);return r.ok?O(BN(n.value,r.value)):r}function N4(e,t){let n=W2(e.point,t.env,`Vertex.point`);return n.ok?O(tP(n.value)):n}function P4(e){return k(I(N.NULL_SHAPE_INPUT,`${e}: empty result has no kernel representation`))}function F4(e,t,n){let r=e.evalNode(t);return r.ok?TE(r.value)?O(r.value):k(po(N.CSG_NOT_3D,`${n}: operand did not produce a 3D shape`)):r}function I4(e,t){return{unsafe:!0,fuzzyValue:e.tolerance??t.tolerance}}function L4(e,t){if(e.a.kind===`Empty`)return t.evalNode(e.b);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=F4(t,e.a,`Fuse.a`);if(!n.ok)return n;let r=F4(t,e.b,`Fuse.b`);return r.ok?pA(n.value,r.value,I4(e,t)):r}function R4(e,t){if(e.a.kind===`Empty`)return P4(`Cut`);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=F4(t,e.a,`Cut.a`);if(!n.ok)return n;let r=F4(t,e.b,`Cut.b`);return r.ok?mA(n.value,r.value,I4(e,t)):r}function z4(e,t){if(e.a.kind===`Empty`||e.b.kind===`Empty`)return P4(`Intersect`);let n=F4(t,e.a,`Intersect.a`);if(!n.ok)return n;let r=F4(t,e.b,`Intersect.b`);return r.ok?hA(n.value,r.value,I4(e,t)):r}function B4(e,t,n){let r=[];for(let i of t){let t=F4(e,i,n);if(!t.ok)return t;r.push(t.value)}return O(r)}function V4(e,t){let n=e.shapes.filter(e=>e.kind!==`Empty`);if(n.length===0)return P4(`FuseAll`);if(n.length===1&&n[0])return t.evalNode(n[0]);let r=B4(t,n,`FuseAll.operand`);return r.ok?_A(r.value,I4(e,t)):r}function H4(e,t){if(e.base.kind===`Empty`)return P4(`CutAll`);let n=e.tools.filter(e=>e.kind!==`Empty`);if(n.length===0)return t.evalNode(e.base);let r=F4(t,e.base,`CutAll.base`);if(!r.ok)return r;let i=B4(t,n,`CutAll.tool`);return i.ok?vA(r.value,i.value,I4(e,t)):i}function U4(e){return k(I(N.NULL_SHAPE_INPUT,`${e}: cannot transform an Empty node`))}function W4(e,t,n,r){return e?W2(e,t,n):O(r)}function G4(e,t){let n=U(),{handle:r,dispose:i}=n.composeTransform(t),a;try{a=W(n.locate(e.wrapped,r))}finally{i()}return PO(e)&&RO(e,a),a}function K4(e,t){if(e.target.kind===`Empty`)return U4(`Translate`);let n=W2(e.vector,t.env,`Translate.vector`);if(!n.ok)return n;let r=t.evalNode(e.target);return r.ok?O(G4(r.value,[{type:`translate`,x:n.value[0],y:n.value[1],z:n.value[2]}])):r}function q4(e,t){if(e.target.kind===`Empty`)return U4(`Rotate`);let n=U2(e.angle,t.env,`Rotate.angle`);if(!n.ok)return n;let r=W4(e.axis,t.env,`Rotate.axis`,[0,0,1]);if(!r.ok)return r;let i=W4(e.at,t.env,`Rotate.at`,[0,0,0]);if(!i.ok)return i;let a=t.evalNode(e.target);return a.ok?O(G4(a.value,[{type:`rotate`,angle:n.value,axis:r.value,center:i.value}])):a}function J4(e,t){if(e.target.kind===`Empty`)return U4(`Scale`);let n=U2(e.factor,t.env,`Scale.factor`);if(!n.ok)return n;let r=W4(e.center,t.env,`Scale.center`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?O(HO(i.value,n.value,r.value)):i}function Y4(e,t){if(e.target.kind===`Empty`)return U4(`Mirror`);let n=W4(e.normal,t.env,`Mirror.normal`,[1,0,0]);if(!n.ok)return n;let r=W4(e.at,t.env,`Mirror.at`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?O(VO(i.value,n.value,r.value)):i}function X4(e,t){let n=e.children.filter(e=>e.kind!==`Empty`);if(n.length===0)return k(I(N.NULL_SHAPE_INPUT,`Compound: cannot materialize a compound with zero non-empty children`));let r=[];for(let e of n){let n=t.evalNode(e);if(!n.ok)return n;r.push(n.value)}return O(nP(r))}function Z4(){return k(I(N.NULL_SHAPE_INPUT,`Empty: cannot materialize an Empty node directly — only valid as boolean/transform operand`))}function Q4(e,t){let n=t.evalNode(e.source);return n.ok?GQ(HQ(n.value,e.placements),{fuse:e.fuse}):n}function $4(e,t){switch(e.kind){case`Box`:return T4(e,t);case`Sphere`:return E4(e,t);case`Cylinder`:return D4(e,t);case`Cone`:return O4(e,t);case`Torus`:return k4(e,t);case`Polygon`:return A4(e,t);case`Circle`:return j4(e,t);case`Line`:return M4(e,t);case`Vertex`:return N4(e,t);case`Empty`:return Z4();case`Fuse`:return L4(e,t);case`Cut`:return R4(e,t);case`Intersect`:return z4(e,t);case`FuseAll`:return V4(e,t);case`CutAll`:return H4(e,t);case`Translate`:return K4(e,t);case`Rotate`:return q4(e,t);case`Scale`:return J4(e,t);case`Mirror`:return Y4(e,t);case`Compound`:return X4(e,t);case`Instance`:return Q4(e,t)}}function e3(e,t){if(typeof t==`number`)return p2(g2(e,!1),t);let n=g2(e,!0);n=h2(n,t.length);for(let e of t)n=p2(n,e);return n}function t3(e,t){if(t.size===0)return a2();let n=G2(e,t),r=Object.keys(n).sort(),i=a2();for(let e of r){i=l2(i,e);let t=n[e];t!==void 0&&(i=e3(i,t))}return i}function n3(e,t,n,r){let i=t3(t,e.freeParams),a=r===void 0?`d`:p2(a2(),r).toString(16);return`${_2(e.structuralHash)}:${n}:${_2(i)}:${a}`}function r3(e,t){let n=e,r=0,i=0,a=0;for(;n.kind===`Translate`;){let e=W2(n.vector,t,`evaluateMesh.peelTranslate`);if(!e.ok)break;r+=e.value[0],i+=e.value[1],a+=e.value[2],n=n.target}return{inner:n,offset:[r,i,a]}}function i3(e,t){let[n,r,i]=t;if(n===0&&r===0&&i===0)return e;let a=new Float32Array(e.vertices.length);for(let t=0;t<e.vertices.length;t+=3)a[t]=(e.vertices[t]??0)+n,a[t+1]=(e.vertices[t+1]??0)+r,a[t+2]=(e.vertices[t+2]??0)+i;return{...e,vertices:a}}function a3(e,t,n){let r=new Map,i=Math.min(t.length,n.length);for(let e=0;e<i;e++){let i=t[e],a=n[e];i!==void 0&&a!==void 0&&r.set(i,a)}return e.map(e=>({...e,faceId:r.get(e.faceId)??e.faceId}))}var o3=class{cache=new Map;refCounts=new Map;evaluating=!1;pendingKeys=[];kernelId;defaultTolerance;maxCacheEntries;maxMeshCacheEntries;meshCache=new Map;onStep;hits=0;misses=0;evictions=0;constructor(e={}){this.kernelId=e.kernel??pT()??`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;let n=e.maxMeshCacheEntries;if(n!==void 0&&(!Number.isInteger(n)||n<1))throw RangeError(`Evaluator: maxMeshCacheEntries must be a positive integer, got ${String(n)}`);this.maxMeshCacheEntries=n}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 mT(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}})}evaluateMesh(e,t={},n={}){n.signal?.throwIfAborted();let r=n.cache??!0,i=Co(),a=n.tolerance??i.tolerance,o=n.angularTolerance??i.angularTolerance,s=`${n3(e,t,this.kernelId,this.defaultTolerance)}|${vk(a,o,n.skipNormals??!1,n.includeUVs??!1)}`;if(r){let r=this.meshCache.get(s);if(r!==void 0)return this.maxMeshCacheEntries!==void 0&&(this.meshCache.delete(s),this.meshCache.set(s,r)),O(r);let{inner:i,offset:a}=r3(e,t);if(i!==e){let r=this.evaluateMesh(i,t,n);if(!r.ok)return r;let o=this.evaluate(i,t);if(!o.ok)return o;let c=BE(o.value).map(QO),l=this.evaluate(e,t);if(!l.ok)return l;let u=BE(l.value).map(QO),d=i3(r.value,a),f=a3(d.faceGroups,c,u),p=new Set(u);if(f.every(e=>p.has(e.faceId))){let e={...d,faceGroups:f};return this.meshCache.set(s,e),this.maxMeshCacheEntries!==void 0&&this.trimMeshCache(this.maxMeshCacheEntries),O(e)}}}let c=this.evaluate(e,t);if(!c.ok)return c;let l=mT(this.kernelId,()=>Ok(c.value,n));return r&&(this.meshCache.set(s,l),this.maxMeshCacheEntries!==void 0&&this.trimMeshCache(this.maxMeshCacheEntries)),O(l)}evaluateInner(e,t){let n=n3(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=$4(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)}}trimMeshCache(e){for(;this.meshCache.size>e;){let e=this.meshCache.keys().next();if(e.done)break;this.meshCache.delete(e.value)}}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(),this.meshCache.clear()}};function s3(e,t){try{var n=wT();let r=t(n.u(new o3(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 c3(e){return{csgVersion:1,root:m3(e)}}function l3(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:l3(e.a),b:l3(e.b)};case`UnaryOp`:return{kind:`UnaryOp`,op:e.op,arg:l3(e.arg)};case`Component`:return{kind:`Component`,vec:l3(e.vec),index:e.index};case`BuildVec`:return{kind:`BuildVec`,dim:e.dim,components:e.components.map(l3)}}}function u3(e){switch(e.kind){case`Box`:return{kind:`Box`,x:l3(e.x),y:l3(e.y),z:l3(e.z)};case`Sphere`:return{kind:`Sphere`,radius:l3(e.radius)};case`Cylinder`:return{kind:`Cylinder`,radius:l3(e.radius),height:l3(e.height)};case`Cone`:return{kind:`Cone`,radius1:l3(e.radius1),radius2:l3(e.radius2),height:l3(e.height)};case`Torus`:return{kind:`Torus`,majorRadius:l3(e.majorRadius),minorRadius:l3(e.minorRadius)};case`Polygon`:return{kind:`Polygon`,points:e.points.map(l3)};case`Circle`:return{kind:`Circle`,radius:l3(e.radius)};case`Line`:return{kind:`Line`,from:l3(e.from),to:l3(e.to)};case`Vertex`:return{kind:`Vertex`,point:l3(e.point)};case`Empty`:return{kind:`Empty`,output:e.output};default:return}}function d3(e){switch(e.kind){case`Fuse`:case`Cut`:case`Intersect`:return{kind:e.kind,a:m3(e.a),b:m3(e.b),tolerance:e.tolerance};case`FuseAll`:return{kind:`FuseAll`,shapes:e.shapes.map(m3),tolerance:e.tolerance};case`CutAll`:return{kind:`CutAll`,base:m3(e.base),tools:e.tools.map(m3),tolerance:e.tolerance};default:return}}function f3(e){return e?l3(e):void 0}function p3(e){switch(e.kind){case`Translate`:return{kind:`Translate`,target:m3(e.target),vector:l3(e.vector)};case`Rotate`:return{kind:`Rotate`,target:m3(e.target),angle:l3(e.angle),axis:f3(e.axis),at:f3(e.at)};case`Scale`:return{kind:`Scale`,target:m3(e.target),factor:l3(e.factor),center:f3(e.center)};case`Mirror`:return{kind:`Mirror`,target:m3(e.target),normal:f3(e.normal),at:f3(e.at)};default:return}}function m3(e){return e.kind===`Compound`?{kind:`Compound`,children:e.children.map(m3)}:e.kind===`Instance`?{kind:`Instance`,source:m3(e.source),placements:e.placements,fuse:e.fuse}:u3(e)??d3(e)??p3(e)}function h3(e){return k(F(N.NULL_SHAPE_INPUT,`csg.fromJSON: ${e}`))}function g3(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function _3(e){return typeof e==`number`&&Number.isFinite(e)}function v3(e){return typeof e==`string`}function y3(e,t){if(!Array.isArray(e)||e.length!==3)return h3(`${t}: expected Vec3 array`);let[n,r,i]=e;return!_3(n)||!_3(r)||!_3(i)?h3(`${t}: Vec3 contains non-number`):O([n,r,i])}function b3(e,t){if(!Array.isArray(e)||e.length!==2)return h3(`${t}: expected Vec2 array`);let[n,r]=e;return!_3(n)||!_3(r)?h3(`${t}: Vec2 contains non-number`):O([n,r])}function x3(e){if(!g3(e))return h3(`input is not an object`);let t=e.csgVersion;if(t!==1)return h3(`unsupported csgVersion ${String(t)} (expected 1)`);let n=e.root;return k3(n)}function S3(e){if(!g3(e))return h3(`expression: not an object`);let t=e.kind;switch(t){case`NumLit`:return _3(e.value)?O(b2(e.value)):h3(`NumLit.value`);case`Vec3Lit`:{let t=y3(e.value,`Vec3Lit.value`);return t.ok?O(x2(t.value)):t}case`Vec2Lit`:{let t=b3(e.value,`Vec2Lit.value`);return t.ok?O(S2(t.value)):t}case`Param`:return v3(e.name)?O(C2(e.name)):h3(`Param.name`);case`BinOp`:return C3(e);case`UnaryOp`:return w3(e);case`Component`:return T3(e);case`BuildVec`:return E3(e);default:return h3(`unknown expression kind: ${String(t)}`)}}function C3(e){let t=e.op;if(t!==`+`&&t!==`-`&&t!==`*`&&t!==`/`)return h3(`BinOp.op: ${String(t)}`);let n=S3(e.a);if(!n.ok)return n;let r=S3(e.b);return r.ok?O(w2(t,n.value,r.value)):r}function w3(e){let t=e.op;if(!v3(t)||![`neg`,`sin`,`cos`,`sqrt`,`abs`].includes(t))return h3(`UnaryOp.op: ${String(t)}`);let n=S3(e.arg);return n.ok?O(T2(t,n.value)):n}function T3(e){let t=e.index;if(t!==0&&t!==1&&t!==2)return h3(`Component.index: ${String(t)}`);let n=S3(e.vec);return n.ok?O(E2(n.value,t)):n}function E3(e){let t=e.dim;if(t!==2&&t!==3)return h3(`BuildVec.dim: ${String(t)}`);let n=e.components;if(!Array.isArray(n))return h3(`BuildVec.components: not array`);if(n.length!==t)return h3(`BuildVec.components: expected ${t} components, got ${n.length}`);let r=[];for(let e of n){let t=S3(e);if(!t.ok)return t;r.push(t.value)}return O(D2(t,r))}function D3(e,t){if(!Array.isArray(e))return h3(`${t}: not array`);let n=[];for(let t of e){let e=k3(t);if(!e.ok)return e;n.push(e.value)}return O(n)}function O3(e){let t=e.tolerance;return t==null?O(void 0):_3(t)?O(t):h3(`tolerance: not a finite number`)}function k3(e){if(!g3(e))return h3(`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 j3(t,e);case`Fuse`:case`Cut`:case`Intersect`:return z3(t,e);case`FuseAll`:case`CutAll`:return B3(t,e);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return V3(t,e);case`Compound`:return q3(e);case`Instance`:return Y3(e);default:return h3(`unknown node kind: ${String(t)}`)}}function A3(e,t,n){let r=S3(e[t]);return r.ok?O(n(r.value)):r}function j3(e,t){switch(e){case`Box`:return M3(t);case`Sphere`:return A3(t,`radius`,$2);case`Cylinder`:return N3(t);case`Cone`:return P3(t);case`Torus`:return F3(t);case`Polygon`:return I3(t);case`Circle`:return A3(t,`radius`,i4);case`Line`:return L3(t);case`Vertex`:return A3(t,`point`,o4);case`Empty`:return R3(t)}return h3(`unhandled primitive: ${e}`)}function M3(e){let t=S3(e.x);if(!t.ok)return t;let n=S3(e.y);if(!n.ok)return n;let r=S3(e.z);return r.ok?O(Q2(t.value,n.value,r.value)):r}function N3(e){let t=S3(e.radius);if(!t.ok)return t;let n=S3(e.height);return n.ok?O(e4(t.value,n.value)):n}function P3(e){let t=S3(e.radius1);if(!t.ok)return t;let n=S3(e.radius2);if(!n.ok)return n;let r=S3(e.height);return r.ok?O(t4(t.value,n.value,r.value)):r}function F3(e){let t=S3(e.majorRadius);if(!t.ok)return t;let n=S3(e.minorRadius);return n.ok?O(n4(t.value,n.value)):n}function I3(e){let t=e.points;if(!Array.isArray(t))return h3(`Polygon.points: not array`);let n=[];for(let e of t){let t=S3(e);if(!t.ok)return t;n.push(t.value)}return O(r4(n))}function L3(e){let t=S3(e.from);if(!t.ok)return t;let n=S3(e.to);return n.ok?O(a4(t.value,n.value)):n}function R3(e){let t=e.output;switch(t){case`Solid`:return O(c4());case`Face`:return O(l4());case`Wire`:return O(u4());default:return h3(`Empty.output: ${String(t)}`)}}function z3(e,t){let n=k3(t.a);if(!n.ok)return n;let r=k3(t.b);if(!r.ok)return r;let i=O3(t);if(!i.ok)return i;switch(e){case`Fuse`:return O(f4(n.value,r.value,i.value));case`Cut`:return O(p4(n.value,r.value,i.value));case`Intersect`:return O(m4(n.value,r.value,i.value))}}function B3(e,t){let n=O3(t);if(!n.ok)return n;if(e===`FuseAll`){let e=D3(t.shapes,`FuseAll.shapes`);return e.ok?O(h4(e.value,n.value)):e}let r=k3(t.base);if(!r.ok)return r;let i=D3(t.tools,`CutAll.tools`);return i.ok?O(g4(r.value,i.value,n.value)):i}function V3(e,t){let n=k3(t.target);if(!n.ok)return n;switch(e){case`Translate`:return H3(t,n.value);case`Rotate`:return W3(t,n.value);case`Scale`:return G3(t,n.value);case`Mirror`:return K3(t,n.value)}}function H3(e,t){let n=S3(e.vector);return n.ok?O(v4(t,n.value)):n}function U3(e,t){if(e[t]===void 0)return O(void 0);let n=S3(e[t]);return n.ok?O(n.value):n}function W3(e,t){let n=S3(e.angle);if(!n.ok)return n;let r=U3(e,`axis`);if(!r.ok)return r;let i=U3(e,`at`);return i.ok?O(y4(t,n.value,{axis:r.value,at:i.value})):i}function G3(e,t){let n=S3(e.factor);if(!n.ok)return n;let r=U3(e,`center`);return r.ok?O(b4(t,n.value,{center:r.value})):r}function K3(e,t){let n=U3(e,`normal`);if(!n.ok)return n;let r=U3(e,`at`);return r.ok?O(x4(t,{normal:n.value,at:r.value})):r}function q3(e){let t=D3(e.children,`Compound.children`);return t.ok?O(S4(t.value)):t}function J3(e){return Array.isArray(e)&&e.length===4&&e.every(e=>Array.isArray(e)&&e.length===4&&e.every(_3))}function Y3(e){let t=k3(e.source);if(!t.ok)return t;let n=e.placements;return!Array.isArray(n)||!n.every(J3)?h3(`Instance.placements must be an array of 4x4 number matrices`):O(C4(t.value,n,e.fuse===!0))}function X3(e){return $3(e)}function Z3(e){switch(e.kind){case`NumLit`:case`Vec3Lit`:case`Vec2Lit`:case`Param`:return e;case`BinOp`:{let t=Z3(e.a),n=Z3(e.b);if(t.kind===`NumLit`&&n.kind===`NumLit`)switch(e.op){case`+`:return b2(t.value+n.value);case`-`:return b2(t.value-n.value);case`*`:return b2(t.value*n.value);case`/`:return b2(t.value/n.value)}return t!==e.a||n!==e.b?w2(e.op,t,n):e}case`UnaryOp`:{let t=Z3(e.arg);if(t.kind===`NumLit`){let n=t.value;switch(e.op){case`neg`:return b2(-n);case`sin`:return b2(Math.sin(n));case`cos`:return b2(Math.cos(n));case`sqrt`:return b2(Math.sqrt(n));case`abs`:return b2(Math.abs(n))}}return t===e.arg?e:T2(e.op,t)}case`Component`:{let t=Z3(e.vec);return t.kind===`Vec3Lit`||t.kind===`Vec2Lit`&&(e.index===0||e.index===1)?b2(t.value[e.index]):t===e.vec?e:E2(t,e.index)}case`BuildVec`:{let t=e.components.map(Z3);return Q3(e.dim,t)||(t.some((t,n)=>t!==e.components[n])?D2(e.dim,t):e)}}}function Q3(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?S2([n[0],n[1]]):x2([n[0],n[1],n[2]])}function $3(e){switch(e.kind){case`Box`:return Q2(Z3(e.x),Z3(e.y),Z3(e.z));case`Sphere`:return $2(Z3(e.radius));case`Cylinder`:return e4(Z3(e.radius),Z3(e.height));case`Cone`:return t4(Z3(e.radius1),Z3(e.radius2),Z3(e.height));case`Torus`:return n4(Z3(e.majorRadius),Z3(e.minorRadius));case`Polygon`:return r4(e.points.map(Z3));case`Circle`:return i4(Z3(e.radius));case`Line`:return a4(Z3(e.from),Z3(e.to));case`Vertex`:return o4(Z3(e.point));case`Empty`:return e;case`Fuse`:return e6(e.a,e.b,e.tolerance);case`Cut`:return t6(e.a,e.b,e.tolerance);case`Intersect`:return n6(e.a,e.b,e.tolerance);case`FuseAll`:return r6(e.shapes,e.tolerance);case`CutAll`:return i6(e.base,e.tools,e.tolerance);case`Translate`:return a6(e.target,e.vector);case`Rotate`:return y4($3(e.target),Z3(e.angle),{axis:e.axis?Z3(e.axis):void 0,at:e.at?Z3(e.at):void 0});case`Scale`:return b4($3(e.target),Z3(e.factor),{center:e.center?Z3(e.center):void 0});case`Mirror`:return x4($3(e.target),{normal:e.normal?Z3(e.normal):void 0,at:e.at?Z3(e.at):void 0});case`Compound`:return S4(e.children.map($3).filter(e=>e.kind!==`Empty`));case`Instance`:return C4($3(e.source),e.placements,e.fuse)}}function e6(e,t,n){let r=$3(e),i=$3(t);return r.kind===`Empty`?i:i.kind===`Empty`?r:f4(r,i,n)}function t6(e,t,n){let r=$3(e),i=$3(t);return i.kind===`Empty`||r.kind===`Empty`?r:p4(r,i,n)}function n6(e,t,n){let r=$3(e),i=$3(t);return r.kind===`Empty`?r:i.kind===`Empty`?i:m4(r,i,n)}function r6(e,t){let n=e.map($3).filter(e=>e.kind!==`Empty`);return n.length===0?c4():n.length===1?n[0]:h4(n,t)}function i6(e,t,n){let r=$3(e);if(r.kind===`Empty`)return r;let i=t.map($3).filter(e=>e.kind!==`Empty`);return i.length===0?r:g4(r,i,n)}function a6(e,t){let n=$3(e),r=Z3(t);if(r.kind!==`Vec3Lit`)return v4(n,r);let[i,a,o]=r.value;if(i===0&&a===0&&o===0)return n;if(n.kind===`Translate`){let e=Z3(n.vector);if(e.kind===`Vec3Lit`)return v4(n.target,[e.value[0]+i,e.value[1]+a,e.value[2]+o])}return v4(n,r)}function o6(e,t,n){return s6(e,t,n)}function s6(e,t,n){return t(e)?n:c6(e,t,n)}function c6(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 f4(s6(e.a,t,n),s6(e.b,t,n),e.tolerance);case`Cut`:return p4(s6(e.a,t,n),s6(e.b,t,n),e.tolerance);case`Intersect`:return m4(s6(e.a,t,n),s6(e.b,t,n),e.tolerance);case`FuseAll`:return h4(e.shapes.map(e=>s6(e,t,n)),e.tolerance);case`CutAll`:return g4(s6(e.base,t,n),e.tools.map(e=>s6(e,t,n)),e.tolerance);case`Translate`:return v4(s6(e.target,t,n),e.vector);case`Rotate`:return y4(s6(e.target,t,n),e.angle,{axis:e.axis,at:e.at});case`Scale`:return b4(s6(e.target,t,n),e.factor,{center:e.center});case`Mirror`:return x4(s6(e.target,t,n),{normal:e.normal,at:e.at});case`Compound`:return S4(e.children.map(e=>s6(e,t,n)));case`Instance`:return C4(s6(e.source,t,n),e.placements,e.fuse)}}function l6(e,t){t(e);for(let n of u6(e))l6(n,t)}function u6(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;case`Instance`:return[e.source]}}function d6(e){let t=0;return l6(e,()=>{t++}),t}var f6=tX({CSG_VERSION:()=>1,Evaluator:()=>o3,add:()=>O2,asScalarExpr:()=>A2,asVec2Expr:()=>N2,asVec3Expr:()=>M2,binOp:()=>w2,box:()=>Q2,buildVec:()=>D2,circle:()=>i4,component:()=>E2,compound:()=>S4,cone:()=>t4,cut:()=>p4,cutAll:()=>g4,cylinder:()=>e4,emptyFace:()=>l4,emptySolid:()=>c4,emptyWire:()=>u4,foldExpr:()=>Z3,forEachNode:()=>l6,fromJSON:()=>x3,fuse:()=>f4,fuseAll:()=>h4,instance:()=>C4,intersect:()=>m4,line:()=>a4,mirror:()=>x4,mul:()=>k2,nodeCount:()=>d6,numLit:()=>b2,optimize:()=>X3,outputKindOf:()=>w4,param:()=>C2,polygon:()=>r4,replaceNode:()=>o6,rotate:()=>y4,scale:()=>b4,sphere:()=>$2,toJSON:()=>c3,torus:()=>n4,translate:()=>v4,unaryOp:()=>T2,vec2Lit:()=>S2,vec3Lit:()=>x2,vertex:()=>o4,withEvaluator:()=>s3});export{IL as BaseSketcher2d,LL as BlueprintSketcher,oo as BrepBugError,N as BrepErrorCode,z1 as BrepWrapperError,Ey as BrepkitAdapter,fK as CompoundSketch,i as DEFAULT_CAPABILITIES,aD as DEG2RAD,IT as DisposalScope,r as EXACT_BREP_CAPABILITIES,GK as FaceSketcher,G as HASH_CODE_MAX,Ia as OK,Fa as OcctWasmAdapter,oD as RAD2DEG,OK as Sketch,WK as Sketcher,kK as Sketches,mP as addChild,oP as addHoles,GP as addJoint,S$ as addMate,EF as addStep,AM as adjacentFaces,Ga as all,Ba as andThen,iX as applyGlue,e1 as applyMatrix,gk as approximateCurve,KT as as2D,GT as as3D,LD as asTopo,VM as assignRoles,Rj as autoHeal,qN as bezier,UJ as blueprintToDXF,kA as booleanPipeline,J0 as booleans,I1 as boss,PN as box,KN as bsplineApprox,M as bug,VK as cameraFromPlane,BK as cameraLookAt,NM as captureHint,HD as cast,W as castShape,DE as castShape3D,h1 as chamfer,qA as chamferDistAngleShape,gj as chamferWithEvolution,T$ as checkAllInterferences,sj as checkBoolean,w$ as checkInterference,VN as circle,dP as circularPattern,rO as classifyPointOnFace,Ek as clearMeshCache,$$ as clone,tE as closedWire,no as collect,bP as collectShapes,AO as colorFaces,kO as colorShape,qj as complexExtrude,JO as composeTransforms,nP as compound,TK as compoundSketchExtrude,CK as compoundSketchFace,DK as compoundSketchLoft,EK as compoundSketchRevolve,I as computationError,kQ as computeStraightSkeleton,LN as cone,e2 as construction,lQ as convexHull,HL as cornerFinder,yP as countNodes,cP as createAssembly,pP as createAssemblyNode,rJ as createBlueprint,zK as createCamera,_E as createCompound,iJ as createCompoundBlueprint,bN as createDerivedFaceRef,_M as createDistanceQuery,dE as createEdge,rN as createEdgeRef,pE as createFace,PT as createHandle,TF as createHistory,FT as createKernelHandle,Dk as createMeshCache,AD as createNamedPlane,qY as createOperationRegistry,OD as createPlane,HM as createRef,NF as createRegistry,mE as createShell,hE as createSolid,zY as createTaskQueue,uE as createVertex,dN as createVertexRef,fE as createWire,KY as createWorkerClient,QY as createWorkerHandler,$Y as createWorkerPool,f6 as csg,So as currentQuality,Yq as curve2dBoundingBox,nJ as curve2dDistanceFrom,Xq as curve2dFirstPoint,tJ as curve2dIsOnCurve,Zq as curve2dLastPoint,$q as curve2dParameter,Qq as curve2dSplitAt,eJ as curve2dTangentAt,lk as curveAxis,ak as curveEndPoint,uk as curveIsClosed,dk as curveIsPeriodic,ck as curveLength,fk as curvePeriod,ok as curvePointAt,ik as curveStartPoint,sk as curveTangentAt,r1 as cut,OR as cut2D,a1 as cutAll,QA as cutAllBisect,_R as cutBlueprints,pj as cutWithEvolution,FN as cylinder,RP as cylindricalJoint,MM as defaultScorer,VY as dequeueTask,w1 as describe,Sq as deserializeDrawing,BF as deserializeHistory,WD as deserializeShape,VD as downcast,y1 as draft,wq as draw,kq as drawCircle,Aq as drawEllipse,Lq as drawFaceOutline,Pq as drawParametricFunction,Nq as drawPointsInterpolation,jq as drawPolysides,Iq as drawProjection,Eq as drawRectangle,Tq as drawRoundedRectangle,Dq as drawSingleCircle,Oq as drawSingleEllipse,Mq as drawText,Uq as drawingChamfer,Bq as drawingCut,Hq as drawingFillet,zq as drawingFuse,Vq as drawingIntersect,Rq as drawingToSketchOnPlane,P1 as drill,fI as edgeFinder,EM as edgesOfFace,HN as ellipse,GN as ellipseArc,zN as ellipsoid,BY as enqueueTask,k as err,lP as exportAssemblySTEP,HJ as exportDXF,kJ as exportGlb,OJ as exportGltf,Fk as exportIGES,vJ as exportOBJ,Nk as exportSTEP,EY as exportSTEPConfigured,Pk as exportSTL,cY as exportThreeMF,bF as exportURDF,k1 as extrude,tM as extrudeAll,ZN as face,nO as faceAxis,tO as faceCenter,hI as faceFinder,qD as faceGeomType,JD as faceOrientation,wM as facesOfEdge,TM as facesOfVertex,ZX as fieldBoolean,tZ as fieldContour,QX as fieldOffset,eZ as fieldReinit,$X as fieldShell,oA as fill,QN as filledFace,m1 as fillet,hj as filletWithEvolution,vO as findFacesByTag,_P as findNode,OF as findStep,Vj as fixSelfIntersection,zj as fixShape,Va as flatMap,Ja as flatten,YD as flipFaceOrientation,mk as flipOrientation,MY as fontMetrics,YP as forwardKinematics,E1 as fromBREP,XZ as fromKernelDir,YZ as fromKernelPnt,JZ as fromKernelVec,Xa as fromNullable,n1 as fuse,ER as fuse2D,i1 as fuseAll,nj as fuseAllBisect,gR as fuseBlueprints,fj as fuseWithEvolution,l0 as gearGeometry,gX as getActiveVoxelId,$E as getBounds,aJ as getBounds2D,GE as getCompSolids,rk as getCurveType,OT as getDisposalStats,zE as getEdges,MO as getFaceColor,cO as getFaceOrigins,yO as getFaceTags,BE as getFaces,MK as getFont,QO as getHashCode,kF as getHistoryShape,U as getKernel,hT as getKernelCapabilities,yT as getKernelTier,JA as getNurbsCurveData,YA as getNurbsSurfaceData,pk as getOrientation,oJ as getOrientation2D,jo as getPerformanceStats,jO as getShapeColor,XT as getShapeKind,WE as getShells,vI as getSingleFace,UE as getSolids,KD as getSurfaceType,xO as getTagMetadata,HE as getVertices,hX as getVoxel,VE as getWires,fP as gridPattern,Qj as guidedSweep,b1 as heal,Fj as healFace,Pj as healSolid,Ij as healWire,UN as helix,cQ as hull,A$ as importDXF,q$ as importGLB,kY as importIGES,P$ as importOBJ,DY as importSTEP,OY as importSTL,TY as importSVG,wY as importSVGPathD,K$ as importThreeMF,wF as importURDF,CT as init,uT as initFromManifold,xT as initFromOC,_X as initVoxel,oO as innerWires,HQ as instance,WQ as instanceCount,UQ as instanceGrid,qQ as instancedMesh,hk as interpolateCurve,o1 as intersect,kR as intersect2D,vR as intersectBlueprints,mj as intersectWithEvolution,RE as invalidateShapeCache,lF as inverseKinematics,Q0 as io,go as ioError,WT as is2D,UT as is3D,IY as isBatchRequest,oX as isChamferRadius,ZT as isClosedWire,UD as isCompSolid,wE as isCompound,CN as isDerivedFaceRef,FY as isDisposeRequest,yE as isEdge,wN as isEdgeRef,O1 as isEmpty,tk as isEqualShape,A as isErr,RY as isErrorResponse,xE as isFace,EN as isFaceRef,sX as isFilletRadius,NY as isInitRequest,sJ as isInside2D,VQ as isInstanced,DN as isLineageRef,HT as isLive,$T as isManifoldShell,aX as isNumber,La as isOk,PY as isOperationRequest,QT as isOrientedFace,aE as isPlanarFace,oE as isPlanarWire,IK as isProjectionPlane,UY as isQueueEmpty,ek as isSameShape,EE as isShape1D,TE as isShape3D,SE as isShell,CE as isSolid,LY as isSuccessResponse,D1 as isValid,eE as isValidSolid,vE as isVertex,TN as isVertexRef,bE as isWire,QE as iterCompSolids,KE as iterEdges,qE as iterFaces,ZE as iterShells,XE as iterSolids,zD as iterTopo,YE as iterVertices,JE as iterWires,dF as jointTrajectory,WP as jointTransform,mF as jointsFromDH,jE as kernelCall,ME as kernelCallRaw,NE as kernelCallScoped,P as kernelError,HZ as latticeInfill,UZ as latticeInfillShape,BN as line,uP as linearPattern,jK as loadFont,j1 as loft,rM as loftAll,tq as makeBaseBox,M0 as makeExternalGear,N0 as makeInternalGear,MD as makePlane,F0 as makePlanetaryGear,RK as makeProjectedEdges,rE as manifoldShell,Ra as map,Ya as mapBoth,za as mapErr,to as match,GQ as materialize,pM as measureArea,vM as measureCurvatureAt,yM as measureCurvatureAtMid,hM as measureDistance,gM as measureDistanceProps,mM as measureLength,dM as measureLinearProps,uM as measureSurfaceProps,fM as measureVolume,lM as measureVolumeProps,Z0 as measurement,XP as mechanismDOF,S1 as mesh,C1 as meshEdges,Bk as meshLODs,Hk as meshLODsProgressive,Ik as meshMultiLOD,pQ as minkowski,Z$ as mirror,fJ as mirror2D,qq as mirrorDrawing,L1 as mirrorJoin,Y0 as modifiers,RF as modifyStep,ho as moduleInitError,Zj as multiSectionSweep,eO as normalAt,_1 as offset,iP as offsetFace,NX as offsetMesh,IX as offsetShape,_k as offsetWire2D,O as ok,Ha as or,Ua as orElse,EL as organiseBlueprints,nE as orientedFace,iO as outerWire,t2 as patterns,HY as pendingCount,ao as pipeline,FD as pivotPlane,sE as planarFace,zP as planarJoint,cE as planarWire,D0 as planetPlacements,F1 as pocket,ZD as pointOnSurface,SX as pointsInside,eP as polygon,mQ as polyhedron,ZK as polysideInnerRadius,UL as polysidesBlueprint,vj as positionOnCurve,ST as prewarm,q0 as primitives,LP as prismaticJoint,HK as projectEdges,$D as projectPointOnFace,$0 as query,_o as queryError,R1 as rectangularPattern,JY as registerHandler,dT as registerKernel,vT as registerKernelTier,PF as registerOperation,MF as registerShape,mX as registerVoxel,WY as rejectAll,hP as removeChild,aO as removeHolesFromFace,TX as repairMesh,LF as replayFrom,IF as replayHistory,kT as resetDisposalStats,Mo as resetPerformanceStats,UO as resize,$ as resolve,J$ as resolve3D,xN as resolveDerivedFaceRef,uD as resolveDirection,iN as resolveEdgeRef,kN as resolveLineageRef,jD as resolvePlane,JM as resolveRef,jN as resolveRefIn,NN as resolveRefParams,fN as resolveVertexRef,Jq as reverseCurve,IP as revoluteJoint,A1 as revolve,LQ as roof,X$ as rotate,uJ as rotate2D,Gq as rotateDrawing,WL as roundedRectangleBlueprint,Q$ as scale,dJ as scale2D,Kq as scaleDrawing,_Z as sdfBox,xZ as sdfCapsule,bZ as sdfCone,yZ as sdfCylinder,NZ as sdfFieldAxialRamp,IZ as sdfFieldClamp,MZ as sdfFieldConst,FZ as sdfFieldFromSdf,PZ as sdfFieldRadialRamp,DZ as sdfLattice,CZ as sdfPlane,vZ as sdfRoundedBox,gZ as sdfSphere,OZ as sdfStrutLattice,TZ as sdfSweep,SZ as sdfTorus,s1 as section,c1 as sectionToFace,zF as serializeHistory,HP as setJointValue,VP as setJointValues,sO as setShapeOrigin,bO as setTagMetadata,aP as sewShells,r0 as shape,DX as shapeToMeshInput,BD as shapeType,jM as sharedEdges,g1 as shell,PX as shellMesh,LX as shellShape,_j as shellWithEvolution,x1 as simplify,KK as sketchCircle,qK as sketchEllipse,yK as sketchExtrude,gK as sketchFace,QK as sketchFaceOffset,eq as sketchHelix,xK as sketchLoft,hJ as sketchOnFace2D,mJ as sketchOnPlane2D,$K as sketchParametricFunction,XK as sketchPolysides,JK as sketchRectangle,vK as sketchRevolve,YK as sketchRoundedRectangle,bK as sketchSweep,AY as sketchText,_K as sketchWires,mo as sketcherStateError,u1 as slice,rP as solid,Bj as solidFromShell,C$ as solveAssembly,IN as sphere,BP as sphericalJoint,l1 as split,AF as stepCount,jF as stepsFrom,pJ as stretch2D,$N as subFace,Kj as supportExtrude,oT as supportsConstraintSketch,aT as supportsProjection,rQ as surfaceFromGrid,oQ as surfaceFromImage,Gj as sweep,_O as tagFaces,JN as tangentArc,Ka as tap,qa as tapErr,PK as textBlueprints,jY as textMetrics,v1 as thicken,VF as thread,WN as threePointArc,T1 as toBREP,HA as toBufferGeometryData,UA as toGroupedBufferGeometryData,GZ as toKernelVec,GA as toLODGeometryData,KA as toLODGeometryLevels,WA as toLineGeometryData,cJ as toSVGPathD,cD as toVec2,sD as toVec3,RN as torus,WZ as tpmsLattice,t1 as transformCopy,X0 as transforms,Y$ as translate,lJ as translate2D,Wq as translateDrawing,PD as translatePlane,ro as tryCatch,io as tryCatchAsync,Jj as twistExtrude,po as typeCastError,DF as undoLast,vo as unsupportedError,j as unwrap,eo as unwrapErr,Qa as unwrapOr,$a as unwrapOrElse,gP as updateNode,WM as updateRoles,XD as uvBounds,QD as uvCoordinates,iE as validSolid,m0 as validatePlanetary,F as validationError,Mj as variableFillet,dD as vecAdd,CD as vecAngle,gD as vecCross,yD as vecDistance,hD as vecDot,xD as vecEquals,SD as vecIsZero,_D as vecLength,vD as vecLengthSq,mD as vecNegate,bD as vecNormalize,wD as vecProjectToPlane,DD as vecRepr,TD as vecRotate,pD as vecScale,fD as vecSub,tP as vertex,uX as vertexFinder,iD as vertexPosition,kM as verticesOfEdge,DM as verticesOfFace,FX as voxelBoolean,XX as voxelBooleanField,rZ as voxelBooleanFieldShapes,RX as voxelBooleanShapes,YX as voxelField,nZ as voxelFieldFromShape,vP as walkAssembly,xX as windingNumbers,YN as wire,_I as wireFinder,XN as wireLoop,OM as wiresOfFace,mT as withKernel,$Z as withKernelDir,QZ as withKernelPnt,ZZ as withKernelVec,gT as withQuality,LT as withScope,BT as withScopeResult,VT as withScopeResultAsync,bT as withTier,Wa as zipResults};
|
|
60
|
+
`),n=[],r=[];for(let e of t){let t=e.trim();if(t.startsWith(`v `)){let e=M$(t);e&&n.push(e)}else if(t.startsWith(`f `)){let e=N$(t);e.length>=3&&r.push(e)}}if(n.length===0||r.length===0)return k(go(N.OBJ_IMPORT_FAILED,`OBJ file contains no valid geometry`));try{return F$(n,r)}catch(e){let t=e instanceof Error?e.message:String(e);return k(go(N.OBJ_IMPORT_FAILED,`OBJ import failed: ${t}`,e))}}function F$(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 j$(n,N.OBJ_IMPORT_FAILED)}function I$(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 L$(e){return e>=97&&e<=122||e>=65&&e<=90||e>=48&&e<=57||e===95}function R$(e){let t={},n=0;for(;n<e.length;){let r=e.indexOf(`="`,n);if(r<0)break;let i=r;for(;i>0&&L$(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 z$(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 B$(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 V$(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 H$(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=R$(e.slice(r,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of z$(a,`color`)){let t=R$(e).color;t!==void 0&&l.push(V$(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=R$(e.slice(n,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of z$(a,`base`)){let t=R$(e).displaycolor;t===void 0?l.push([0,0,0,1]):l.push(V$(t))}t.set(c,l)}return t}function U$(e){let t=[],n=[],r=[],i=H$(e);for(let n of z$(e,`vertex`)){let e=R$(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=B$(e,`object`);if(s!==null){let e=s.indexOf(`>`);if(e>=0){let t=R$(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 z$(e,`triangle`)){let e=R$(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 W$(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 G$(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 j$(t,N.THREEMF_IMPORT_FAILED)}}async function K$(e){try{let t=await e.arrayBuffer(),n=I$(new Uint8Array(t),`3D/3dmodel.model`);if(!n)return k(go(N.THREEMF_IMPORT_FAILED,`3MF archive does not contain 3D/3dmodel.model (or uses unsupported compression)`));let r=U$(new TextDecoder().decode(n));if(r.vertices.length===0||r.triangles.length===0)return k(go(N.THREEMF_IMPORT_FAILED,`3MF model contains no valid geometry`));let i=G$(r);if(i.ok){let e=W$(r.triangleColors);e!==null&&kO(i.value,e)}return i}catch(e){let t=e instanceof Error?e.message:String(e);return k(go(N.THREEMF_IMPORT_FAILED,`3MF import failed: ${t}`,e))}}async function q$(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(go(N.GLB_IMPORT_FAILED,`Failed to import GLB: ${t}`,e))}}function $(e){return`__wrapped`in e?e.val:e}function J$(e){return $(e)}function Y$(e,t){return zO($(e),t)}function X$(e,t,n){let r=n?.at;return BO($(e),t,r,n?.axis)}function Z$(e,t){let n=t?.at;return VO($(e),t?.normal??[1,0,0],n)}function Q$(e,t,n){return HO($(e),t,n?.center)}function $$(e){return XO($(e))}function e1(e,t){return qO($(e),t)}function t1(e,t){return YO($(e),t)}function n1(e,t,n){return pA($(e),$(t),{...n,unsafe:!0})}function r1(e,t,n){return mA($(e),$(t),{...n,unsafe:!0})}function i1(e,t){return _A(e.map(e=>$(e)),{...t,unsafe:!0})}function a1(e,t,n){return vA($(e),t.map(e=>$(e)),{...n,unsafe:!0})}function o1(e,t,n){return hA($(e),$(t),{...n,unsafe:!0})}function s1(e,t,n){return bA($(e),t,n)}function c1(e,t,n){return EA($(e),t,n)}function l1(e,t){return DA($(e),t)}function u1(e,t,n){return OA($(e),t,n)}function d1(e,t){if(e!==void 0)return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(fI()).findAll(t)}function f1(e,t){return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(hI()).findAll(t)}function p1(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 m1(e,t,n){let r=$(e),i,a;return n===void 0?(i=void 0,a=t):(i=d1(t,r),a=n),Ej(r,i,a)}function h1(e,t,n){let r=$(e),i,a;n===void 0?(i=void 0,a=t):(i=d1(t,r),a=n);let o=p1(a);return o.mode===`distAngle`?qA(r,[...i??zE(r)],o.distance,o.angle):Dj(r,i,o.distance)}function g1(e,t,n,r){let i=$(e);return Oj(i,f1(t,i),n,r?.tolerance)}function _1(e,t,n){return kj($(e),t,n?.tolerance)}function v1(e,t){return wj($(e),t)}function y1(e,t,n){let r=$(e);return jj(r,f1(t,r),n.pullDirection,n.neutralPlane,n.angle)}function b1(e){return Lj($(e))}function x1(e){return nk($(e))}function S1(e,t){return Ok($(e),t)}function C1(e,t){return kk($(e),t)}function w1(e){return rD($(e))}function T1(e){return ZO($(e))}function E1(e){return WD(e)}function D1(e){return Nj($(e))}function O1(e){return $O($(e))}function k1(e,t){return $j($(e),typeof t==`number`?[0,0,t]:t)}function A1(e,t){let n=t?.at??[0,0,0];return eM($(e),n,t?.axis??[0,0,1],t?.angle??2*Math.PI)}function j1(e,t){return nM(e.map(e=>$(e)),t)}function M1(e,n){if(n===void 0){let t=BE(e);if(t.length===0)return k(F(N.COMPOUND_NO_FACES,`compoundOps: shape has no faces`));let n=Wk(t),r=tO(n)[2];for(let e=1;e<t.length;e++){let i=Uk(t,e),a=tO(i)[2];a>r&&(n=i,r=a)}return O(n)}if(typeof n==`function`){let r=n(hI()).findAll(e);return r.length===0?k(_o(N.COMPOUND_FACE_NOT_FOUND,`compoundOps: face finder matched no faces`)):O(t(r,0))}return O(n)}function N1(e){return`sketchOnPlane`in e&&typeof e.sketchOnPlane==`function`?e.sketchOnPlane(`XY`).wire:e}function P1(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(SD(o))return k(F(`DRILL_ZERO_AXIS`,`Drill axis cannot be zero`));let s=bD(o),c=r.length===2?[r[0],r[1],0]:[r[0],r[1],r[2]],l;if(t.depth!==void 0)l=NA(i,t.depth,c,s);else{let e=$E(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=NA(i,a-r,[c[0]+s[0]*r,c[1]+s[1]*r,c[2]+s[2]*r],s)}return mA(n,l,{unsafe:!0})}function F1(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=M1(n,t.face);if(A(a))return a;let o=a.value,s=eO(o),c=tO(o),l=aA(N1(r));if(A(l))return l;let u=$j(zO(l.value,c),pD(bD(s),-i));return A(u)?u:mA(n,u.value,{unsafe:!0})}function I1(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=M1(n,t.face);if(A(a))return a;let o=a.value,s=eO(o),c=tO(o),l=aA(N1(r));if(A(l))return l;let u=$j(zO(l.value,c),pD(bD(s),i));return A(u)?u:pA(n,u.value,{unsafe:!0})}function L1(e,t){let n=$(e),r=t?.normal??[1,0,0],i=t?.at;return SD(r)?k(F(`MIRROR_ZERO_NORMAL`,`Mirror plane normal cannot be zero`)):pA(n,VO(n,r,i),{unsafe:!0})}function R1(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(SD(r))return k(F(`PATTERN_ZERO_DIRECTION`,`X direction cannot be zero`));if(SD(o))return k(F(`PATTERN_ZERO_DIRECTION`,`Y direction cannot be zero`));if(i===1&&s===1)return O(n);let l=bD(r),u=bD(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(zO(n,r))}return _A(d,{unsafe:!0})}var z1=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 B1(e){if(A(e))throw new z1(e.error);return e.value}function V1(e){return e}function H1(e){return e}function U1(e){return e}function W1(e){return e}function G1(e){return{val:e,__wrapped:!0,translate:t=>t0(Y$(e,t)),rotate:(t,n)=>t0(X$(e,t,n)),mirror:t=>t0(Z$(e,t)),scale:(t,n)=>t0(Q$(e,t,n)),applyMatrix:t=>t0(B1(e1(e,t))),moveX:t=>t0(Y$(e,[t,0,0])),moveY:t=>t0(Y$(e,[0,t,0])),moveZ:t=>t0(Y$(e,[0,0,t])),rotateX:t=>t0(X$(e,t,{axis:[1,0,0]})),rotateY:t=>t0(X$(e,t,{axis:[0,1,0]})),rotateZ:t=>t0(X$(e,t,{axis:[0,0,1]})),bounds:()=>$E(e),describe:()=>w1(e),clone:()=>t0(B1($$(e))),mesh:t=>S1(e,t),meshEdges:t=>C1(e,t),isValid:()=>D1(e),isEmpty:()=>O1(e),heal:()=>t0(B1(b1(e))),simplify:()=>t0(B1(x1(e))),toBREP:()=>B1(T1(e)),apply:t=>t0(t(e)),applyResult:t=>t0(B1(t(e))),done:()=>e}}function K1(e){return{fuse:(t,n)=>n0(B1(n1(e,$(t),{...n,unsafe:!0}))),cut:(t,n)=>n0(B1(r1(e,$(t),{...n,unsafe:!0}))),intersect:(t,n)=>n0(B1(o1(e,$(t),{...n,unsafe:!0}))),fuseAll:(t,n)=>n0(W1(B1(_A([e,...t.map($)],{...n,unsafe:!0})))),cutAll:(t,n)=>n0(W1(B1(vA(e,t,{...n,unsafe:!0})))),section:(t,n)=>t0(B1(s1(e,t,n))),split:t=>t0(B1(l1(e,t))),slice:(t,n)=>B1(u1(e,t,n))}}function q1(e){return{fillet(...t){return t.length===1?n0(W1(B1(m1(V1(e),t[0])))):n0(W1(B1(m1(V1(e),t[0],t[1]))))},chamfer(...t){return t.length===1?n0(W1(B1(h1(V1(e),t[0])))):n0(W1(B1(h1(V1(e),t[0],t[1]))))},shell:(t,n,r)=>n0(W1(B1(g1(V1(e),t,n,r)))),offset:(t,n)=>n0(W1(B1(_1(V1(e),t,n)))),draft:(t,n)=>n0(W1(B1(y1(V1(e),t,n))))}}function J1(e){return{drill:t=>n0(B1(P1(e,t))),pocket:t=>n0(B1(F1(e,t))),boss:t=>n0(B1(I1(e,t))),mirrorJoin:t=>n0(B1(L1(e,t))),rectangularPattern:t=>n0(B1(R1(e,t)))}}function Y1(e){return{volume:()=>B1(fM(e)),area:()=>B1(pM(e)),volumeProps:()=>B1(lM(e)),surfaceProps:()=>B1(uM(e))}}function X1(e){return{edges:()=>zE(e),faces:()=>BE(e),wires:()=>VE(e),vertices:()=>HE(e)}}function Z1(e){return{linearPattern:(t,n,r)=>n0(W1(B1(uP(e,t,n,r)))),circularPattern:(t,n,r)=>n0(W1(B1(dP(e,t,n,r))))}}function Q1(e){return{...G1(e),...K1(e),...q1(e),...J1(e),...Y1(e),...X1(e),...Z1(e)}}function $1(e){return{...G1(e),length:()=>ck(e),startPoint:()=>ik(e),endPoint:()=>ak(e),pointAt:t=>ok(e,t),tangentAt:t=>sk(e,t),isClosed:()=>uk(e),sweep(t,n){if(!bE(e))throw Error(`sweep requires a Wire`);let r=B1(Gj(U1(e),$(t),n));return n0(Array.isArray(r)?r[0]:r)}}}function e0(e){return{...G1(e),area:()=>B1(pM(e)),normalAt:t=>eO(e,t),center:()=>tO(e),surfaceType:()=>B1(KD(e)),outerWire:()=>iO(e),innerWires:()=>oO(e),extrude:t=>n0(B1(k1(H1(e),t))),revolve:t=>n0(B1(A1(H1(e),t)))}}function t0(e){return TE(e)?Q1(e):xE(e)?e0(e):yE(e)||bE(e)?$1(e):G1(e)}function n0(e){return Q1(e)}function r0(e){if(e&&typeof e==`object`&&`face`in e&&typeof e.face==`function`&&`_defaultOrigin`in e)return e0(e.face());if(e&&typeof e==`object`&&`wrapped`in e)return xE(e)?e0(e):TE(e)?Q1(e):yE(e)||bE(e)?$1(e):G1(e);throw Error(`shape() requires a Sketch or branded shape type`)}var i0=.25,a0=e=>Math.tan(e)-e;function o0(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 s0(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(o0(e,s*t,n,i))}return a}function c0(e){return Math.max(16,Math.round(8*Math.sqrt(e)))}function l0(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 u0(e,t,n){if(t===0)return O(e);let r=a0(e)+2*t*Math.tan(e)/n,i,a;if(r>a0(e)?(i=e,a=Math.PI/2-1e-6):(i=1e-4,a=e),r>a0(a)||r<a0(i))return k(F(`GEAR_PA_OUT_OF_RANGE`,`working pressure angle out of range — target inv(αw)=${r.toFixed(4)} not in [${a0(i).toFixed(4)}, ${a0(a).toFixed(4)}]`,void 0,{target:r,invLo:a0(i),invHi:a0(a)}));for(let e=0;e<50;e++){let e=.5*(i+a);a0(e)<r?i=e:a=e}return O(.5*(i+a))}function d0(e,t,n,r,i){return u0(e,t+n,r+i)}function f0(e,t,n,r,i){return u0(e,n-t,i-r)}function p0(e,t,n,r,i){return(e+t)*n*Math.cos(r)/(2*Math.cos(i))}function m0(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 h0(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 g0(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 _0(e,t){return 1-e*Math.sin(t)*Math.sin(t)/2}function v0(e,t,n){return Math.max(0,_0(e,t)-n)}function y0(e){return e<8?.2:.485-2.88/e}function b0(e,t,n,r){let i=e*1e3,a=y0(r);return a<=0||n<=0||t<=0?1/0:2*i/(r*t*t*n*a)}function x0(e,t,n=!1){let r=(1.4+6.5/e)*(20/(t*180/Math.PI))**.15;return n?r*.85:r}function S0(e,t,n,r,i,a=!1){return b0(e,t,n,r)*x0(r,i,a)}function C0(e){return e/2}function w0(e,t){return e+2*t}function T0(e){return e%2==0?Math.PI/e:0}function E0(e,t,n){return e*(1+t/n)+T0(n)}function D0(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=m0(n,r,i,s);if(A(c))return c;let l=d0(a,o,s,n,r);if(A(l))return l;let u=p0(n,r,t,a,l.value),d=[];for(let e=0;e<i;e++){let t=e*2*Math.PI/i,a=E0(t,n,r);d.push({rotationDeg:a*180/Math.PI,position:[u*Math.cos(t),u*Math.sin(t),0]})}return O(d)}function O0(e,t,n,r,i){let a=t*e.toothPitch,o=(t+1)%n*e.toothPitch,s=a0(e.alphaPitch),c=a-e.halfToothAngle-s,l=a+e.halfToothAngle+s,u=s0(e.rb,e.alphaTip,c,r,1),d=s0(e.rb,e.alphaTip,l,r,-1).reverse(),f=Wk(u),p=Gk(u),m=Wk(d),h=Gk(d),g=[],_=e=>{i.register(e),g.push(e)},v=e.isInternal?e.rb<e.rRoot:e.rb>e.rRoot;v&&_(Jk([e.rRoot*Math.cos(c),e.rRoot*Math.sin(c),0],f));let y=e.rPitch*1e-5,b=tA(u,{tolerance:y});if(A(b))return b;_(b.value),_(Qk(p,[e.rTip*Math.cos(a),e.rTip*Math.sin(a),0],m));let x=tA(d,{tolerance:y});if(A(x))return x;_(x.value),v&&_(Jk(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),_(Qk(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 k0(e){return j0(e,!1)}function A0(e){return j0(e,!0)}function j0(e,t){try{var n=wT();let{teeth:r,moduleSize:i,pressureAngle:a,shift:o,clearance:s,flankThinning:c,samples:l=c0(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=l0(r,i,a,o,s,c,t),d=n.u(new IT),f=[];for(let e=0;e<r;e++){let t=O0(u,e,r,l,d);if(A(t))return t;f.push(...t.value)}let p=iA(f);return A(p)?p:O(p.value)}catch(e){n.e=e}finally{n.d()}}function M0(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=i0,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=l0(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=k0({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(A(f))return f;let p=P0(t,u,a);return z0(f.value,r,c,d,p)}function N0(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=i0,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=A0({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(A(d))return d;let f=l0(t,n,u,a,o,s,!0),p=R0(f.rPitch+c);return A(p)?p:V0(p.value,d.value,r,f,[])}function P0(e,t,n){let r=v0(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 F0(e){let t=L0(e);if(A(t))return t;let n=t.value,r=I0(n);if(A(r))return r;let{sun:i,planet:a,ring:o}=r.value,s=G0(n,i,a,o),c=U0(a.solid,n);a.solid.delete();let l=W0(o.solid,n.zr),u=K0(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 I0(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=M0({...n,teeth:e.sunTeeth,shift:e.sunShift,bore:e.sunBore});if(A(r))return r;let i=M0({...n,teeth:e.planetTeeth,shift:e.planetShift,bore:e.planetBore});if(A(i))return r.value.solid.delete(),i;let a=N0({...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 L0(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=m0(n,r,i,c);if(A(u))return u;let d=w0(n,r),f=d0(o,s,c,n,r);if(A(f))return f;let p=f0(o,c,l,r,d);if(A(p))return p;let m=p0(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:C0(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 R0(e){try{var t=wT();let n=iA([t.u(new IT).register(Yk(e,[0,0,0],[0,0,1]))]);return A(n)?n:O(n.value)}catch(e){t.e=e}finally{t.d()}}function z0(e,t,n,r,i){try{var a=wT();let o=aA(e);if(A(o))return o;let s=$j(o.value,[0,0,t]);if(A(s))return s;if(n<=0)return O(H0(s.value,r,i));let c=a.u(new IT),l=B0(n/2);if(A(l))return l;c.register(l.value);let u=$j(l.value,[0,0,t+1]);if(A(u))return u;c.register(u.value);let d=c.register(zO(u.value,[0,0,-.5])),f=mA(s.value,d);return A(f)?f:O(H0(f.value,r,i))}catch(e){a.e=e}finally{a.d()}}function B0(e){let t=R0(e);return A(t)?t:aA(t.value)}function V0(e,t,n,r,i){let a=aA(e,[t]);if(A(a))return a;let o=$j(a.value,[0,0,n]);return A(o)?o:O(H0(o.value,r,i))}function H0(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 U0(e,t){let n=[];try{for(let r=0;r<t.numPlanets;r++){let i=r*2*Math.PI/t.numPlanets,a=BO(e,E0(i,t.sunTeeth,t.planetTeeth)*180/Math.PI);try{let e=[t.centerDistance*Math.cos(i),t.centerDistance*Math.sin(i),0];n.push(zO(a,e))}finally{a.delete()}}return n}catch(e){for(let e of n)e.delete();throw e}}function W0(e,t){let n=T0(t);if(n===0)return e;let r=BO(e,n*180/Math.PI);return e.delete(),r}function G0(e,t,n,r){let i={crSunPlanet:h0(t.tipDiameter/2,t.baseDiameter/2,n.tipDiameter/2,n.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_sp),crPlanetRing:g0(n.tipDiameter/2,n.baseDiameter/2,r.tipDiameter/2,r.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_pr),undercutSun:v0(e.sunTeeth,e.alpha,e.sunShift),undercutPlanet:v0(e.planetTeeth,e.alpha,e.planetShift)};if(e.appliedTorque!==void 0){let t=e.appliedTorque;i.lewisStress={sun:S0(t,e.moduleSize,e.thickness,e.sunTeeth,e.alpha),planet:S0(t*e.planetTeeth/e.sunTeeth,e.moduleSize,e.thickness,e.planetTeeth,e.alpha),ring:S0(t*e.zr/e.sunTeeth,e.moduleSize,e.thickness,e.zr,e.alpha,!0)},i.stressConcentrationFactor={sun:x0(e.sunTeeth,e.alpha),planet:x0(e.planetTeeth,e.alpha),ring:x0(e.zr,e.alpha,!0)}}return i}function K0(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 q0=tX({addHoles:()=>oP,bezier:()=>qN,box:()=>PN,bsplineApprox:()=>KN,circle:()=>VN,compound:()=>nP,cone:()=>LN,cylinder:()=>FN,ellipse:()=>HN,ellipseArc:()=>GN,ellipsoid:()=>zN,face:()=>ZN,fill:()=>oA,filledFace:()=>QN,helix:()=>UN,line:()=>BN,offsetFace:()=>iP,polygon:()=>eP,polyhedron:()=>mQ,sewShells:()=>aP,solid:()=>rP,sphere:()=>IN,subFace:()=>$N,tangentArc:()=>JN,threePointArc:()=>WN,torus:()=>RN,vertex:()=>tP,wire:()=>YN,wireLoop:()=>XN}),J0=tX({checkBoolean:()=>sj,convexHull:()=>lQ,cut:()=>r1,cutAll:()=>vA,cutAllBisect:()=>QA,fuse:()=>n1,fuseAll:()=>_A,fuseAllBisect:()=>nj,hull:()=>cQ,intersect:()=>o1,minkowski:()=>pQ,section:()=>s1,sectionToFace:()=>c1,slice:()=>u1,split:()=>l1}),Y0=tX({chamfer:()=>h1,draft:()=>y1,fillet:()=>m1,heal:()=>b1,offset:()=>_1,shell:()=>g1,simplify:()=>x1,thicken:()=>v1,variableFillet:()=>Mj}),X0=tX({applyMatrix:()=>e1,clone:()=>$$,composeTransforms:()=>JO,mirror:()=>Z$,rotate:()=>X$,scale:()=>Q$,transformCopy:()=>t1,translate:()=>Y$}),Z0=tX({checkAllInterferences:()=>T$,checkInterference:()=>w$,createDistanceQuery:()=>_M,measureArea:()=>pM,measureCurvatureAt:()=>vM,measureCurvatureAtMid:()=>yM,measureDistance:()=>hM,measureDistanceProps:()=>gM,measureLength:()=>mM,measureLinearProps:()=>dM,measureSurfaceProps:()=>uM,measureVolume:()=>fM,measureVolumeProps:()=>lM}),Q0=tX({blueprintToDXF:()=>UJ,exportAssemblySTEP:()=>lP,exportDXF:()=>HJ,exportGlb:()=>kJ,exportGltf:()=>OJ,exportIGES:()=>Fk,exportOBJ:()=>vJ,exportSTEP:()=>Nk,exportSTEPConfigured:()=>EY,exportSTL:()=>Pk,exportThreeMF:()=>cY,importDXF:()=>A$,importGLB:()=>q$,importIGES:()=>kY,importOBJ:()=>P$,importSTEP:()=>DY,importSTL:()=>OY,importSVG:()=>TY,importSVGPathD:()=>wY,importThreeMF:()=>K$}),$0=tX({cornerFinder:()=>HL,edgeFinder:()=>fI,faceFinder:()=>hI,getSingleFace:()=>vI,vertexFinder:()=>uX,wireFinder:()=>_I}),e2=tX({complexExtrude:()=>qj,extrude:()=>k1,guidedSweep:()=>Qj,loft:()=>j1,multiSectionSweep:()=>Zj,revolve:()=>A1,roof:()=>LQ,supportExtrude:()=>Kj,surfaceFromGrid:()=>rQ,surfaceFromImage:()=>oQ,sweep:()=>Gj,twistExtrude:()=>Jj}),t2=tX({circularPattern:()=>dP,linearPattern:()=>uP}),n2=14695981039346656037n,r2=1099511628211n,i2=18446744073709551615n;function a2(){return n2}function o2(e,t){return(e^BigInt(t&255))*r2&i2}function s2(e,t){let n=e;for(let e=0;e<t.length;e++)n=o2(n,t[e]??0);return n}var c2=new TextEncoder;function l2(e,t){return s2(e,c2.encode(t))}var u2=new ArrayBuffer(8),d2=new DataView(u2),f2=new Uint8Array(u2);function p2(e,t){return d2.setFloat64(0,Object.is(t,-0)?0:t),s2(e,f2)}function m2(e,t){let n=e,r=t&i2;for(let e=0;e<8;e++)n=o2(n,Number(r&255n)),r>>=8n;return n}function h2(e,t){let n=e,r=t|0;for(let e=0;e<4;e++)n=o2(n,r&255),r>>>=8;return n}function g2(e,t){return o2(e,+!!t)}function _2(e){return(e&i2).toString(16).padStart(16,`0`)}var v2=new Set;function y2(e){return l2(a2(),e)}function b2(e){return{kind:`NumLit`,value:e,structuralHash:p2(y2(`NumLit`),e),freeParams:v2}}function x2(e){let t=y2(`Vec3Lit`);for(let n of e)t=p2(t,n);return{kind:`Vec3Lit`,value:e,structuralHash:t,freeParams:v2}}function S2(e){let t=y2(`Vec2Lit`);for(let n of e)t=p2(t,n);return{kind:`Vec2Lit`,value:e,structuralHash:t,freeParams:v2}}function C2(e){return{kind:`Param`,name:e,structuralHash:l2(y2(`Param`),e),freeParams:new Set([e])}}function w2(e,t,n){let r=l2(y2(`BinOp`),e);return r=m2(r,t.structuralHash),r=m2(r,n.structuralHash),{kind:`BinOp`,op:e,a:t,b:n,structuralHash:r,freeParams:P2(t.freeParams,n.freeParams)}}function T2(e,t){let n=l2(y2(`UnaryOp`),e);return n=m2(n,t.structuralHash),{kind:`UnaryOp`,op:e,arg:t,structuralHash:n,freeParams:t.freeParams}}function E2(e,t){let n=h2(y2(`Component`),t);return n=m2(n,e.structuralHash),{kind:`Component`,vec:e,index:t,structuralHash:n,freeParams:e.freeParams}}function D2(e,t){let n=h2(y2(`BuildVec`),e),r=new Set;for(let e of t){n=m2(n,e.structuralHash);for(let t of e.freeParams)r.add(t)}return{kind:`BuildVec`,dim:e,components:t,structuralHash:n,freeParams:r}}var O2=(e,t)=>w2(`+`,e,t),k2=(e,t)=>w2(`*`,e,t);function A2(e){return typeof e==`number`?b2(e):e}function j2(e,t){if(!Array.isArray(e))return e;let n=e;return n.every(e=>typeof e==`number`)?t===3?x2([n[0],n[1],n[2]]):S2([n[0],n[1]]):D2(t,n.map(A2))}function M2(e){return j2(e,3)}function N2(e){return j2(e,2)}function P2(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 F2(e){return typeof e==`number`}function I2(e,t){return F2(e)?O(e):k(F(N.NULL_SHAPE_INPUT,`${t}: expected number, got ${Array.isArray(e)?`vector(${e.length})`:typeof e}`))}function L2(e,t,n){return Array.isArray(e)&&e.length===t?O(e):k(F(N.NULL_SHAPE_INPUT,`${n}: expected Vec${t}, got ${F2(e)?`number`:`vector(${e.length})`}`))}function R2(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 z2(e,t);case`UnaryOp`:return B2(e,t);case`Component`:return V2(e,t);case`BuildVec`:return H2(e,t)}}function z2(e,t){let n=R2(e.a,t);if(!n.ok)return n;let r=R2(e.b,t);if(!r.ok)return r;let i=I2(n.value,`BinOp(${e.op}).a`);if(!i.ok)return i;let a=I2(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 B2(e,t){let n=R2(e.arg,t);if(!n.ok)return n;let r=I2(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 V2(e,t){let n=R2(e.vec,t);if(!n.ok)return n;if(F2(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 H2(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=R2(r,t);if(!e.ok)return e;let i=I2(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 U2(e,t,n){let r=R2(e,t);return r.ok?I2(r.value,n):r}function W2(e,t,n){let r=R2(e,t);if(!r.ok)return r;let i=L2(r.value,3,n);if(!i.ok)return i;let[a,o,s]=i.value;return O([a,o,s])}function G2(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 K2=new Set;function q2(e){return l2(a2(),e)}function J2(e,t){return m2(e,t.structuralHash)}function Y2(e,t){return t===void 0?g2(e,!1):J2(g2(e,!0),t)}function X2(e,t){return t===void 0?g2(e,!1):p2(g2(e,!0),t)}function Z2(...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?K2:t}function Q2(e,t,n){let r=A2(e),i=A2(t),a=A2(n),o=q2(`Box`);return o=J2(J2(J2(o,r),i),a),{kind:`Box`,x:r,y:i,z:a,structuralHash:o,freeParams:Z2(r,i,a)}}function $2(e){let t=A2(e);return{kind:`Sphere`,radius:t,structuralHash:J2(q2(`Sphere`),t),freeParams:t.freeParams}}function e4(e,t){let n=A2(e),r=A2(t);return{kind:`Cylinder`,radius:n,height:r,structuralHash:J2(J2(q2(`Cylinder`),n),r),freeParams:Z2(n,r)}}function t4(e,t,n){let r=A2(e),i=A2(t),a=A2(n),o=q2(`Cone`);return o=J2(J2(J2(o,r),i),a),{kind:`Cone`,radius1:r,radius2:i,height:a,structuralHash:o,freeParams:Z2(r,i,a)}}function n4(e,t){let n=A2(e),r=A2(t);return{kind:`Torus`,majorRadius:n,minorRadius:r,structuralHash:J2(J2(q2(`Torus`),n),r),freeParams:Z2(n,r)}}function r4(e){let t=e.map(M2),n=h2(q2(`Polygon`),t.length);for(let e of t)n=J2(n,e);return{kind:`Polygon`,points:t,structuralHash:n,freeParams:Z2(...t)}}function i4(e){let t=A2(e);return{kind:`Circle`,radius:t,structuralHash:J2(q2(`Circle`),t),freeParams:t.freeParams}}function a4(e,t){let n=M2(e),r=M2(t);return{kind:`Line`,from:n,to:r,structuralHash:J2(J2(q2(`Line`),n),r),freeParams:Z2(n,r)}}function o4(e){let t=M2(e);return{kind:`Vertex`,point:t,structuralHash:J2(q2(`Vertex`),t),freeParams:t.freeParams}}function s4(e){return{kind:`Empty`,output:e,structuralHash:l2(q2(`Empty`),e),freeParams:K2}}function c4(){return s4(`Solid`)}function l4(){return s4(`Face`)}function u4(){return s4(`Wire`)}function d4(e,t,n,r){return X2(J2(J2(q2(e),t),n),r)}function f4(e,t,n){return{kind:`Fuse`,a:e,b:t,tolerance:n,structuralHash:d4(`Fuse`,e,t,n),freeParams:Z2(e,t)}}function p4(e,t,n){return{kind:`Cut`,a:e,b:t,tolerance:n,structuralHash:d4(`Cut`,e,t,n),freeParams:Z2(e,t)}}function m4(e,t,n){return{kind:`Intersect`,a:e,b:t,tolerance:n,structuralHash:d4(`Intersect`,e,t,n),freeParams:Z2(e,t)}}function h4(e,t){let n=h2(q2(`FuseAll`),e.length);for(let t of e)n=J2(n,t);return n=X2(n,t),{kind:`FuseAll`,shapes:e,tolerance:t,structuralHash:n,freeParams:Z2(...e)}}function g4(e,t,n){let r=J2(q2(`CutAll`),e);r=h2(r,t.length);for(let e of t)r=J2(r,e);return r=X2(r,n),{kind:`CutAll`,base:e,tools:t,tolerance:n,structuralHash:r,freeParams:Z2(e,...t)}}function _4(e){return e===void 0?void 0:M2(e)}function v4(e,t){let n=M2(t);return{kind:`Translate`,target:e,vector:n,structuralHash:J2(J2(q2(`Translate`),e),n),freeParams:Z2(e,n)}}function y4(e,t,n){let r=A2(t),i=_4(n?.axis),a=_4(n?.at),o=J2(J2(q2(`Rotate`),e),r);return o=Y2(o,i),o=Y2(o,a),{kind:`Rotate`,target:e,angle:r,axis:i,at:a,structuralHash:o,freeParams:Z2(e,r,i,a)}}function b4(e,t,n){let r=A2(t),i=_4(n?.center),a=J2(J2(q2(`Scale`),e),r);return a=Y2(a,i),{kind:`Scale`,target:e,factor:r,center:i,structuralHash:a,freeParams:Z2(e,r,i)}}function x4(e,t){let n=_4(t?.normal),r=_4(t?.at),i=J2(q2(`Mirror`),e);return i=Y2(i,n),i=Y2(i,r),{kind:`Mirror`,target:e,normal:n,at:r,structuralHash:i,freeParams:Z2(e,n,r)}}function S4(e){let t=h2(q2(`Compound`),e.length);for(let n of e)t=J2(t,n);return{kind:`Compound`,children:e,structuralHash:t,freeParams:Z2(...e)}}function C4(e,t,n=!1){let r=t.map(e=>e.map(e=>[...e])),i=h2(g2(J2(q2(`Instance`),e),n),r.length);for(let e of r)for(let t of e.flat())i=p2(i,t);return{kind:`Instance`,source:e,placements:r,fuse:n,structuralHash:i,freeParams:Z2(e)}}function w4(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 w4(e.a);case`FuseAll`:return e.shapes[0]?w4(e.shapes[0]):`Solid`;case`CutAll`:return w4(e.base);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return w4(e.target);case`Compound`:return`Compound`;case`Instance`:return e.fuse?`Solid`:`Compound`}}function T4(e,t){let n=U2(e.x,t.env,`Box.x`);if(!n.ok)return n;let r=U2(e.y,t.env,`Box.y`);if(!r.ok)return r;let i=U2(e.z,t.env,`Box.z`);return i.ok?O(PN(n.value,r.value,i.value)):i}function E4(e,t){let n=U2(e.radius,t.env,`Sphere.radius`);return n.ok?O(IN(n.value)):n}function D4(e,t){let n=U2(e.radius,t.env,`Cylinder.radius`);if(!n.ok)return n;let r=U2(e.height,t.env,`Cylinder.height`);return r.ok?O(FN(n.value,r.value)):r}function O4(e,t){let n=U2(e.radius1,t.env,`Cone.radius1`);if(!n.ok)return n;let r=U2(e.radius2,t.env,`Cone.radius2`);if(!r.ok)return r;let i=U2(e.height,t.env,`Cone.height`);return i.ok?O(LN(n.value,r.value,i.value)):i}function k4(e,t){let n=U2(e.majorRadius,t.env,`Torus.majorRadius`);if(!n.ok)return n;let r=U2(e.minorRadius,t.env,`Torus.minorRadius`);return r.ok?O(RN(n.value,r.value)):r}function A4(e,t){let n=[];for(let r of e.points){let e=W2(r,t.env,`Polygon.point`);if(!e.ok)return e;n.push(e.value)}return eP(n)}function j4(e,t){let n=U2(e.radius,t.env,`Circle.radius`);return n.ok?O(VN(n.value)):n}function M4(e,t){let n=W2(e.from,t.env,`Line.from`);if(!n.ok)return n;let r=W2(e.to,t.env,`Line.to`);return r.ok?O(BN(n.value,r.value)):r}function N4(e,t){let n=W2(e.point,t.env,`Vertex.point`);return n.ok?O(tP(n.value)):n}function P4(e){return k(I(N.NULL_SHAPE_INPUT,`${e}: empty result has no kernel representation`))}function F4(e,t,n){let r=e.evalNode(t);return r.ok?TE(r.value)?O(r.value):k(po(N.CSG_NOT_3D,`${n}: operand did not produce a 3D shape`)):r}function I4(e,t){return{unsafe:!0,fuzzyValue:e.tolerance??t.tolerance}}function L4(e,t){if(e.a.kind===`Empty`)return t.evalNode(e.b);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=F4(t,e.a,`Fuse.a`);if(!n.ok)return n;let r=F4(t,e.b,`Fuse.b`);return r.ok?pA(n.value,r.value,I4(e,t)):r}function R4(e,t){if(e.a.kind===`Empty`)return P4(`Cut`);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=F4(t,e.a,`Cut.a`);if(!n.ok)return n;let r=F4(t,e.b,`Cut.b`);return r.ok?mA(n.value,r.value,I4(e,t)):r}function z4(e,t){if(e.a.kind===`Empty`||e.b.kind===`Empty`)return P4(`Intersect`);let n=F4(t,e.a,`Intersect.a`);if(!n.ok)return n;let r=F4(t,e.b,`Intersect.b`);return r.ok?hA(n.value,r.value,I4(e,t)):r}function B4(e,t,n){let r=[];for(let i of t){let t=F4(e,i,n);if(!t.ok)return t;r.push(t.value)}return O(r)}function V4(e,t){let n=e.shapes.filter(e=>e.kind!==`Empty`);if(n.length===0)return P4(`FuseAll`);if(n.length===1&&n[0])return t.evalNode(n[0]);let r=B4(t,n,`FuseAll.operand`);return r.ok?_A(r.value,I4(e,t)):r}function H4(e,t){if(e.base.kind===`Empty`)return P4(`CutAll`);let n=e.tools.filter(e=>e.kind!==`Empty`);if(n.length===0)return t.evalNode(e.base);let r=F4(t,e.base,`CutAll.base`);if(!r.ok)return r;let i=B4(t,n,`CutAll.tool`);return i.ok?vA(r.value,i.value,I4(e,t)):i}function U4(e){return k(I(N.NULL_SHAPE_INPUT,`${e}: cannot transform an Empty node`))}function W4(e,t,n,r){return e?W2(e,t,n):O(r)}function G4(e,t){let n=U(),{handle:r,dispose:i}=n.composeTransform(t),a;try{a=W(n.locate(e.wrapped,r))}finally{i()}return PO(e)&&RO(e,a),a}function K4(e,t){if(e.target.kind===`Empty`)return U4(`Translate`);let n=W2(e.vector,t.env,`Translate.vector`);if(!n.ok)return n;let r=t.evalNode(e.target);return r.ok?O(G4(r.value,[{type:`translate`,x:n.value[0],y:n.value[1],z:n.value[2]}])):r}function q4(e,t){if(e.target.kind===`Empty`)return U4(`Rotate`);let n=U2(e.angle,t.env,`Rotate.angle`);if(!n.ok)return n;let r=W4(e.axis,t.env,`Rotate.axis`,[0,0,1]);if(!r.ok)return r;let i=W4(e.at,t.env,`Rotate.at`,[0,0,0]);if(!i.ok)return i;let a=t.evalNode(e.target);return a.ok?O(G4(a.value,[{type:`rotate`,angle:n.value,axis:r.value,center:i.value}])):a}function J4(e,t){if(e.target.kind===`Empty`)return U4(`Scale`);let n=U2(e.factor,t.env,`Scale.factor`);if(!n.ok)return n;let r=W4(e.center,t.env,`Scale.center`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?O(HO(i.value,n.value,r.value)):i}function Y4(e,t){if(e.target.kind===`Empty`)return U4(`Mirror`);let n=W4(e.normal,t.env,`Mirror.normal`,[1,0,0]);if(!n.ok)return n;let r=W4(e.at,t.env,`Mirror.at`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?O(VO(i.value,n.value,r.value)):i}function X4(e,t){let n=e.children.filter(e=>e.kind!==`Empty`);if(n.length===0)return k(I(N.NULL_SHAPE_INPUT,`Compound: cannot materialize a compound with zero non-empty children`));let r=[];for(let e of n){let n=t.evalNode(e);if(!n.ok)return n;r.push(n.value)}return O(nP(r))}function Z4(){return k(I(N.NULL_SHAPE_INPUT,`Empty: cannot materialize an Empty node directly — only valid as boolean/transform operand`))}function Q4(e,t){let n=t.evalNode(e.source);return n.ok?GQ(HQ(n.value,e.placements),{fuse:e.fuse}):n}function $4(e,t){switch(e.kind){case`Box`:return T4(e,t);case`Sphere`:return E4(e,t);case`Cylinder`:return D4(e,t);case`Cone`:return O4(e,t);case`Torus`:return k4(e,t);case`Polygon`:return A4(e,t);case`Circle`:return j4(e,t);case`Line`:return M4(e,t);case`Vertex`:return N4(e,t);case`Empty`:return Z4();case`Fuse`:return L4(e,t);case`Cut`:return R4(e,t);case`Intersect`:return z4(e,t);case`FuseAll`:return V4(e,t);case`CutAll`:return H4(e,t);case`Translate`:return K4(e,t);case`Rotate`:return q4(e,t);case`Scale`:return J4(e,t);case`Mirror`:return Y4(e,t);case`Compound`:return X4(e,t);case`Instance`:return Q4(e,t)}}function e3(e,t){if(typeof t==`number`)return p2(g2(e,!1),t);let n=g2(e,!0);n=h2(n,t.length);for(let e of t)n=p2(n,e);return n}function t3(e,t){if(t.size===0)return a2();let n=G2(e,t),r=Object.keys(n).sort(),i=a2();for(let e of r){i=l2(i,e);let t=n[e];t!==void 0&&(i=e3(i,t))}return i}function n3(e,t,n,r){let i=t3(t,e.freeParams),a=r===void 0?`d`:p2(a2(),r).toString(16);return`${_2(e.structuralHash)}:${n}:${_2(i)}:${a}`}var r3=[1,0,0,0];function i3(e,t){let n=U2(e.angle,t,`evaluateMesh.peelRigid`);if(!n.ok)return null;let r=e.axis?W2(e.axis,t,`evaluateMesh.peelRigid`):O([0,0,1]);if(!r.ok)return null;let i=e.at?W2(e.at,t,`evaluateMesh.peelRigid`):O([0,0,0]);return i.ok?{angle:n.value,axis:r.value,center:i.value}:null}function a3(e,t){let n=e,r=r3,i=[0,0,0];for(;;)if(n.kind===`Translate`){let e=W2(n.vector,t,`evaluateMesh.peelRigid`);if(!e.ok)break;let a=TP(r,e.value);i=[i[0]+a[0],i[1]+a[1],i[2]+a[2]],n=n.target}else if(n.kind===`Rotate`){let e=i3(n,t);if(!e)break;let a=EP(e.axis,e.angle*Math.PI/180),o=OP(r,a),s=TP(r,e.center),c=TP(o,e.center);i=[i[0]+s[0]-c[0],i[1]+s[1]-c[1],i[2]+s[2]-c[2]],r=o,n=n.target}else break;return{inner:n,rot:r,trans:i}}function o3(e){return e[0]===1&&e[1]===0&&e[2]===0&&e[3]===0}function s3(e,t,n,r,i,a,o,s,c){for(let l=0;l<t.length;l+=3){let u=t[l]??0,d=t[l+1]??0,f=t[l+2]??0,p=2*(i*f-a*d),m=2*(a*u-r*f),h=2*(r*d-i*u);e[l]=u+n*p+(i*h-a*m)+o,e[l+1]=d+n*m+(a*p-r*h)+s,e[l+2]=f+n*h+(r*m-i*p)+c}}function c3(e,t,n){let[r,i,a]=n,o=o3(t);if(o&&r===0&&i===0&&a===0)return e;let s=e.vertices,c=new Float32Array(s.length);if(o){for(let e=0;e<s.length;e+=3)c[e]=(s[e]??0)+r,c[e+1]=(s[e+1]??0)+i,c[e+2]=(s[e+2]??0)+a;return{...e,vertices:c}}let[l,u,d,f]=t;s3(c,s,l,u,d,f,r,i,a);let p=e.normals,m=new Float32Array(p.length);return s3(m,p,l,u,d,f,0,0,0),{...e,vertices:c,normals:m}}function l3(e,t,n){let r=new Map,i=Math.min(t.length,n.length);for(let e=0;e<i;e++){let i=t[e],a=n[e];i!==void 0&&a!==void 0&&r.set(i,a)}return e.map(e=>({...e,faceId:r.get(e.faceId)??e.faceId}))}var u3=class{cache=new Map;refCounts=new Map;evaluating=!1;pendingKeys=[];kernelId;defaultTolerance;maxCacheEntries;maxMeshCacheEntries;meshCache=new Map;onStep;hits=0;misses=0;evictions=0;constructor(e={}){this.kernelId=e.kernel??pT()??`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;let n=e.maxMeshCacheEntries;if(n!==void 0&&(!Number.isInteger(n)||n<1))throw RangeError(`Evaluator: maxMeshCacheEntries must be a positive integer, got ${String(n)}`);this.maxMeshCacheEntries=n}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 mT(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}})}evaluateMesh(e,t={},n={}){n.signal?.throwIfAborted();let r=n.cache??!0,i=Co(),a=n.tolerance??i.tolerance,o=n.angularTolerance??i.angularTolerance,s=`${n3(e,t,this.kernelId,this.defaultTolerance)}|${vk(a,o,n.skipNormals??!1,n.includeUVs??!1)}`;if(r){let r=this.meshCache.get(s);if(r!==void 0)return this.maxMeshCacheEntries!==void 0&&(this.meshCache.delete(s),this.meshCache.set(s,r)),O(r);let{inner:i,rot:a,trans:o}=a3(e,t);if(i!==e){let r=this.evaluateMesh(i,t,n);if(!r.ok)return r;let c=this.evaluate(i,t);if(!c.ok)return c;let l=BE(c.value).map(QO),u=this.evaluate(e,t);if(!u.ok)return u;let d=BE(u.value).map(QO),f=c3(r.value,a,o),p=l3(f.faceGroups,l,d),m=new Set(d);if(p.every(e=>m.has(e.faceId))){let e={...f,faceGroups:p};return this.meshCache.set(s,e),this.maxMeshCacheEntries!==void 0&&this.trimMeshCache(this.maxMeshCacheEntries),O(e)}}}let c=this.evaluate(e,t);if(!c.ok)return c;let l=mT(this.kernelId,()=>Ok(c.value,n));return r&&(this.meshCache.set(s,l),this.maxMeshCacheEntries!==void 0&&this.trimMeshCache(this.maxMeshCacheEntries)),O(l)}evaluateInner(e,t){let n=n3(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=$4(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)}}trimMeshCache(e){for(;this.meshCache.size>e;){let e=this.meshCache.keys().next();if(e.done)break;this.meshCache.delete(e.value)}}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(),this.meshCache.clear()}};function d3(e,t){try{var n=wT();let r=t(n.u(new u3(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 f3(e){return{csgVersion:1,root:v3(e)}}function p3(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:p3(e.a),b:p3(e.b)};case`UnaryOp`:return{kind:`UnaryOp`,op:e.op,arg:p3(e.arg)};case`Component`:return{kind:`Component`,vec:p3(e.vec),index:e.index};case`BuildVec`:return{kind:`BuildVec`,dim:e.dim,components:e.components.map(p3)}}}function m3(e){switch(e.kind){case`Box`:return{kind:`Box`,x:p3(e.x),y:p3(e.y),z:p3(e.z)};case`Sphere`:return{kind:`Sphere`,radius:p3(e.radius)};case`Cylinder`:return{kind:`Cylinder`,radius:p3(e.radius),height:p3(e.height)};case`Cone`:return{kind:`Cone`,radius1:p3(e.radius1),radius2:p3(e.radius2),height:p3(e.height)};case`Torus`:return{kind:`Torus`,majorRadius:p3(e.majorRadius),minorRadius:p3(e.minorRadius)};case`Polygon`:return{kind:`Polygon`,points:e.points.map(p3)};case`Circle`:return{kind:`Circle`,radius:p3(e.radius)};case`Line`:return{kind:`Line`,from:p3(e.from),to:p3(e.to)};case`Vertex`:return{kind:`Vertex`,point:p3(e.point)};case`Empty`:return{kind:`Empty`,output:e.output};default:return}}function h3(e){switch(e.kind){case`Fuse`:case`Cut`:case`Intersect`:return{kind:e.kind,a:v3(e.a),b:v3(e.b),tolerance:e.tolerance};case`FuseAll`:return{kind:`FuseAll`,shapes:e.shapes.map(v3),tolerance:e.tolerance};case`CutAll`:return{kind:`CutAll`,base:v3(e.base),tools:e.tools.map(v3),tolerance:e.tolerance};default:return}}function g3(e){return e?p3(e):void 0}function _3(e){switch(e.kind){case`Translate`:return{kind:`Translate`,target:v3(e.target),vector:p3(e.vector)};case`Rotate`:return{kind:`Rotate`,target:v3(e.target),angle:p3(e.angle),axis:g3(e.axis),at:g3(e.at)};case`Scale`:return{kind:`Scale`,target:v3(e.target),factor:p3(e.factor),center:g3(e.center)};case`Mirror`:return{kind:`Mirror`,target:v3(e.target),normal:g3(e.normal),at:g3(e.at)};default:return}}function v3(e){return e.kind===`Compound`?{kind:`Compound`,children:e.children.map(v3)}:e.kind===`Instance`?{kind:`Instance`,source:v3(e.source),placements:e.placements,fuse:e.fuse}:m3(e)??h3(e)??_3(e)}function y3(e){return k(F(N.NULL_SHAPE_INPUT,`csg.fromJSON: ${e}`))}function b3(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function x3(e){return typeof e==`number`&&Number.isFinite(e)}function S3(e){return typeof e==`string`}function C3(e,t){if(!Array.isArray(e)||e.length!==3)return y3(`${t}: expected Vec3 array`);let[n,r,i]=e;return!x3(n)||!x3(r)||!x3(i)?y3(`${t}: Vec3 contains non-number`):O([n,r,i])}function w3(e,t){if(!Array.isArray(e)||e.length!==2)return y3(`${t}: expected Vec2 array`);let[n,r]=e;return!x3(n)||!x3(r)?y3(`${t}: Vec2 contains non-number`):O([n,r])}function T3(e){if(!b3(e))return y3(`input is not an object`);let t=e.csgVersion;if(t!==1)return y3(`unsupported csgVersion ${String(t)} (expected 1)`);let n=e.root;return N3(n)}function E3(e){if(!b3(e))return y3(`expression: not an object`);let t=e.kind;switch(t){case`NumLit`:return x3(e.value)?O(b2(e.value)):y3(`NumLit.value`);case`Vec3Lit`:{let t=C3(e.value,`Vec3Lit.value`);return t.ok?O(x2(t.value)):t}case`Vec2Lit`:{let t=w3(e.value,`Vec2Lit.value`);return t.ok?O(S2(t.value)):t}case`Param`:return S3(e.name)?O(C2(e.name)):y3(`Param.name`);case`BinOp`:return D3(e);case`UnaryOp`:return O3(e);case`Component`:return k3(e);case`BuildVec`:return A3(e);default:return y3(`unknown expression kind: ${String(t)}`)}}function D3(e){let t=e.op;if(t!==`+`&&t!==`-`&&t!==`*`&&t!==`/`)return y3(`BinOp.op: ${String(t)}`);let n=E3(e.a);if(!n.ok)return n;let r=E3(e.b);return r.ok?O(w2(t,n.value,r.value)):r}function O3(e){let t=e.op;if(!S3(t)||![`neg`,`sin`,`cos`,`sqrt`,`abs`].includes(t))return y3(`UnaryOp.op: ${String(t)}`);let n=E3(e.arg);return n.ok?O(T2(t,n.value)):n}function k3(e){let t=e.index;if(t!==0&&t!==1&&t!==2)return y3(`Component.index: ${String(t)}`);let n=E3(e.vec);return n.ok?O(E2(n.value,t)):n}function A3(e){let t=e.dim;if(t!==2&&t!==3)return y3(`BuildVec.dim: ${String(t)}`);let n=e.components;if(!Array.isArray(n))return y3(`BuildVec.components: not array`);if(n.length!==t)return y3(`BuildVec.components: expected ${t} components, got ${n.length}`);let r=[];for(let e of n){let t=E3(e);if(!t.ok)return t;r.push(t.value)}return O(D2(t,r))}function j3(e,t){if(!Array.isArray(e))return y3(`${t}: not array`);let n=[];for(let t of e){let e=N3(t);if(!e.ok)return e;n.push(e.value)}return O(n)}function M3(e){let t=e.tolerance;return t==null?O(void 0):x3(t)?O(t):y3(`tolerance: not a finite number`)}function N3(e){if(!b3(e))return y3(`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 F3(t,e);case`Fuse`:case`Cut`:case`Intersect`:return U3(t,e);case`FuseAll`:case`CutAll`:return W3(t,e);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return G3(t,e);case`Compound`:return Z3(e);case`Instance`:return $3(e);default:return y3(`unknown node kind: ${String(t)}`)}}function P3(e,t,n){let r=E3(e[t]);return r.ok?O(n(r.value)):r}function F3(e,t){switch(e){case`Box`:return I3(t);case`Sphere`:return P3(t,`radius`,$2);case`Cylinder`:return L3(t);case`Cone`:return R3(t);case`Torus`:return z3(t);case`Polygon`:return B3(t);case`Circle`:return P3(t,`radius`,i4);case`Line`:return V3(t);case`Vertex`:return P3(t,`point`,o4);case`Empty`:return H3(t)}return y3(`unhandled primitive: ${e}`)}function I3(e){let t=E3(e.x);if(!t.ok)return t;let n=E3(e.y);if(!n.ok)return n;let r=E3(e.z);return r.ok?O(Q2(t.value,n.value,r.value)):r}function L3(e){let t=E3(e.radius);if(!t.ok)return t;let n=E3(e.height);return n.ok?O(e4(t.value,n.value)):n}function R3(e){let t=E3(e.radius1);if(!t.ok)return t;let n=E3(e.radius2);if(!n.ok)return n;let r=E3(e.height);return r.ok?O(t4(t.value,n.value,r.value)):r}function z3(e){let t=E3(e.majorRadius);if(!t.ok)return t;let n=E3(e.minorRadius);return n.ok?O(n4(t.value,n.value)):n}function B3(e){let t=e.points;if(!Array.isArray(t))return y3(`Polygon.points: not array`);let n=[];for(let e of t){let t=E3(e);if(!t.ok)return t;n.push(t.value)}return O(r4(n))}function V3(e){let t=E3(e.from);if(!t.ok)return t;let n=E3(e.to);return n.ok?O(a4(t.value,n.value)):n}function H3(e){let t=e.output;switch(t){case`Solid`:return O(c4());case`Face`:return O(l4());case`Wire`:return O(u4());default:return y3(`Empty.output: ${String(t)}`)}}function U3(e,t){let n=N3(t.a);if(!n.ok)return n;let r=N3(t.b);if(!r.ok)return r;let i=M3(t);if(!i.ok)return i;switch(e){case`Fuse`:return O(f4(n.value,r.value,i.value));case`Cut`:return O(p4(n.value,r.value,i.value));case`Intersect`:return O(m4(n.value,r.value,i.value))}}function W3(e,t){let n=M3(t);if(!n.ok)return n;if(e===`FuseAll`){let e=j3(t.shapes,`FuseAll.shapes`);return e.ok?O(h4(e.value,n.value)):e}let r=N3(t.base);if(!r.ok)return r;let i=j3(t.tools,`CutAll.tools`);return i.ok?O(g4(r.value,i.value,n.value)):i}function G3(e,t){let n=N3(t.target);if(!n.ok)return n;switch(e){case`Translate`:return K3(t,n.value);case`Rotate`:return J3(t,n.value);case`Scale`:return Y3(t,n.value);case`Mirror`:return X3(t,n.value)}}function K3(e,t){let n=E3(e.vector);return n.ok?O(v4(t,n.value)):n}function q3(e,t){if(e[t]===void 0)return O(void 0);let n=E3(e[t]);return n.ok?O(n.value):n}function J3(e,t){let n=E3(e.angle);if(!n.ok)return n;let r=q3(e,`axis`);if(!r.ok)return r;let i=q3(e,`at`);return i.ok?O(y4(t,n.value,{axis:r.value,at:i.value})):i}function Y3(e,t){let n=E3(e.factor);if(!n.ok)return n;let r=q3(e,`center`);return r.ok?O(b4(t,n.value,{center:r.value})):r}function X3(e,t){let n=q3(e,`normal`);if(!n.ok)return n;let r=q3(e,`at`);return r.ok?O(x4(t,{normal:n.value,at:r.value})):r}function Z3(e){let t=j3(e.children,`Compound.children`);return t.ok?O(S4(t.value)):t}function Q3(e){return Array.isArray(e)&&e.length===4&&e.every(e=>Array.isArray(e)&&e.length===4&&e.every(x3))}function $3(e){let t=N3(e.source);if(!t.ok)return t;let n=e.placements;return!Array.isArray(n)||!n.every(Q3)?y3(`Instance.placements must be an array of 4x4 number matrices`):O(C4(t.value,n,e.fuse===!0))}function e6(e){return r6(e)}function t6(e){switch(e.kind){case`NumLit`:case`Vec3Lit`:case`Vec2Lit`:case`Param`:return e;case`BinOp`:{let t=t6(e.a),n=t6(e.b);if(t.kind===`NumLit`&&n.kind===`NumLit`)switch(e.op){case`+`:return b2(t.value+n.value);case`-`:return b2(t.value-n.value);case`*`:return b2(t.value*n.value);case`/`:return b2(t.value/n.value)}return t!==e.a||n!==e.b?w2(e.op,t,n):e}case`UnaryOp`:{let t=t6(e.arg);if(t.kind===`NumLit`){let n=t.value;switch(e.op){case`neg`:return b2(-n);case`sin`:return b2(Math.sin(n));case`cos`:return b2(Math.cos(n));case`sqrt`:return b2(Math.sqrt(n));case`abs`:return b2(Math.abs(n))}}return t===e.arg?e:T2(e.op,t)}case`Component`:{let t=t6(e.vec);return t.kind===`Vec3Lit`||t.kind===`Vec2Lit`&&(e.index===0||e.index===1)?b2(t.value[e.index]):t===e.vec?e:E2(t,e.index)}case`BuildVec`:{let t=e.components.map(t6);return n6(e.dim,t)||(t.some((t,n)=>t!==e.components[n])?D2(e.dim,t):e)}}}function n6(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?S2([n[0],n[1]]):x2([n[0],n[1],n[2]])}function r6(e){switch(e.kind){case`Box`:return Q2(t6(e.x),t6(e.y),t6(e.z));case`Sphere`:return $2(t6(e.radius));case`Cylinder`:return e4(t6(e.radius),t6(e.height));case`Cone`:return t4(t6(e.radius1),t6(e.radius2),t6(e.height));case`Torus`:return n4(t6(e.majorRadius),t6(e.minorRadius));case`Polygon`:return r4(e.points.map(t6));case`Circle`:return i4(t6(e.radius));case`Line`:return a4(t6(e.from),t6(e.to));case`Vertex`:return o4(t6(e.point));case`Empty`:return e;case`Fuse`:return i6(e.a,e.b,e.tolerance);case`Cut`:return a6(e.a,e.b,e.tolerance);case`Intersect`:return o6(e.a,e.b,e.tolerance);case`FuseAll`:return s6(e.shapes,e.tolerance);case`CutAll`:return c6(e.base,e.tools,e.tolerance);case`Translate`:return l6(e.target,e.vector);case`Rotate`:return y4(r6(e.target),t6(e.angle),{axis:e.axis?t6(e.axis):void 0,at:e.at?t6(e.at):void 0});case`Scale`:return b4(r6(e.target),t6(e.factor),{center:e.center?t6(e.center):void 0});case`Mirror`:return x4(r6(e.target),{normal:e.normal?t6(e.normal):void 0,at:e.at?t6(e.at):void 0});case`Compound`:return S4(e.children.map(r6).filter(e=>e.kind!==`Empty`));case`Instance`:return C4(r6(e.source),e.placements,e.fuse)}}function i6(e,t,n){let r=r6(e),i=r6(t);return r.kind===`Empty`?i:i.kind===`Empty`?r:f4(r,i,n)}function a6(e,t,n){let r=r6(e),i=r6(t);return i.kind===`Empty`||r.kind===`Empty`?r:p4(r,i,n)}function o6(e,t,n){let r=r6(e),i=r6(t);return r.kind===`Empty`?r:i.kind===`Empty`?i:m4(r,i,n)}function s6(e,t){let n=e.map(r6).filter(e=>e.kind!==`Empty`);return n.length===0?c4():n.length===1?n[0]:h4(n,t)}function c6(e,t,n){let r=r6(e);if(r.kind===`Empty`)return r;let i=t.map(r6).filter(e=>e.kind!==`Empty`);return i.length===0?r:g4(r,i,n)}function l6(e,t){let n=r6(e),r=t6(t);if(r.kind!==`Vec3Lit`)return v4(n,r);let[i,a,o]=r.value;if(i===0&&a===0&&o===0)return n;if(n.kind===`Translate`){let e=t6(n.vector);if(e.kind===`Vec3Lit`)return v4(n.target,[e.value[0]+i,e.value[1]+a,e.value[2]+o])}return v4(n,r)}function u6(e,t,n){return d6(e,t,n)}function d6(e,t,n){return t(e)?n:f6(e,t,n)}function f6(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 f4(d6(e.a,t,n),d6(e.b,t,n),e.tolerance);case`Cut`:return p4(d6(e.a,t,n),d6(e.b,t,n),e.tolerance);case`Intersect`:return m4(d6(e.a,t,n),d6(e.b,t,n),e.tolerance);case`FuseAll`:return h4(e.shapes.map(e=>d6(e,t,n)),e.tolerance);case`CutAll`:return g4(d6(e.base,t,n),e.tools.map(e=>d6(e,t,n)),e.tolerance);case`Translate`:return v4(d6(e.target,t,n),e.vector);case`Rotate`:return y4(d6(e.target,t,n),e.angle,{axis:e.axis,at:e.at});case`Scale`:return b4(d6(e.target,t,n),e.factor,{center:e.center});case`Mirror`:return x4(d6(e.target,t,n),{normal:e.normal,at:e.at});case`Compound`:return S4(e.children.map(e=>d6(e,t,n)));case`Instance`:return C4(d6(e.source,t,n),e.placements,e.fuse)}}function p6(e,t){t(e);for(let n of m6(e))p6(n,t)}function m6(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;case`Instance`:return[e.source]}}function h6(e){let t=0;return p6(e,()=>{t++}),t}var g6=tX({CSG_VERSION:()=>1,Evaluator:()=>u3,add:()=>O2,asScalarExpr:()=>A2,asVec2Expr:()=>N2,asVec3Expr:()=>M2,binOp:()=>w2,box:()=>Q2,buildVec:()=>D2,circle:()=>i4,component:()=>E2,compound:()=>S4,cone:()=>t4,cut:()=>p4,cutAll:()=>g4,cylinder:()=>e4,emptyFace:()=>l4,emptySolid:()=>c4,emptyWire:()=>u4,foldExpr:()=>t6,forEachNode:()=>p6,fromJSON:()=>T3,fuse:()=>f4,fuseAll:()=>h4,instance:()=>C4,intersect:()=>m4,line:()=>a4,mirror:()=>x4,mul:()=>k2,nodeCount:()=>h6,numLit:()=>b2,optimize:()=>e6,outputKindOf:()=>w4,param:()=>C2,polygon:()=>r4,replaceNode:()=>u6,rotate:()=>y4,scale:()=>b4,sphere:()=>$2,toJSON:()=>f3,torus:()=>n4,translate:()=>v4,unaryOp:()=>T2,vec2Lit:()=>S2,vec3Lit:()=>x2,vertex:()=>o4,withEvaluator:()=>d3});export{IL as BaseSketcher2d,LL as BlueprintSketcher,oo as BrepBugError,N as BrepErrorCode,z1 as BrepWrapperError,Ey as BrepkitAdapter,fK as CompoundSketch,i as DEFAULT_CAPABILITIES,aD as DEG2RAD,IT as DisposalScope,r as EXACT_BREP_CAPABILITIES,GK as FaceSketcher,G as HASH_CODE_MAX,Ia as OK,Fa as OcctWasmAdapter,oD as RAD2DEG,OK as Sketch,WK as Sketcher,kK as Sketches,mP as addChild,oP as addHoles,GP as addJoint,S$ as addMate,EF as addStep,AM as adjacentFaces,Ga as all,Ba as andThen,iX as applyGlue,e1 as applyMatrix,gk as approximateCurve,KT as as2D,GT as as3D,LD as asTopo,VM as assignRoles,Rj as autoHeal,qN as bezier,UJ as blueprintToDXF,kA as booleanPipeline,J0 as booleans,I1 as boss,PN as box,KN as bsplineApprox,M as bug,VK as cameraFromPlane,BK as cameraLookAt,NM as captureHint,HD as cast,W as castShape,DE as castShape3D,h1 as chamfer,qA as chamferDistAngleShape,gj as chamferWithEvolution,T$ as checkAllInterferences,sj as checkBoolean,w$ as checkInterference,VN as circle,dP as circularPattern,rO as classifyPointOnFace,Ek as clearMeshCache,$$ as clone,tE as closedWire,no as collect,bP as collectShapes,AO as colorFaces,kO as colorShape,qj as complexExtrude,JO as composeTransforms,nP as compound,TK as compoundSketchExtrude,CK as compoundSketchFace,DK as compoundSketchLoft,EK as compoundSketchRevolve,I as computationError,kQ as computeStraightSkeleton,LN as cone,e2 as construction,lQ as convexHull,HL as cornerFinder,yP as countNodes,cP as createAssembly,pP as createAssemblyNode,rJ as createBlueprint,zK as createCamera,_E as createCompound,iJ as createCompoundBlueprint,bN as createDerivedFaceRef,_M as createDistanceQuery,dE as createEdge,rN as createEdgeRef,pE as createFace,PT as createHandle,TF as createHistory,FT as createKernelHandle,Dk as createMeshCache,AD as createNamedPlane,qY as createOperationRegistry,OD as createPlane,HM as createRef,NF as createRegistry,mE as createShell,hE as createSolid,zY as createTaskQueue,uE as createVertex,dN as createVertexRef,fE as createWire,KY as createWorkerClient,QY as createWorkerHandler,$Y as createWorkerPool,g6 as csg,So as currentQuality,Yq as curve2dBoundingBox,nJ as curve2dDistanceFrom,Xq as curve2dFirstPoint,tJ as curve2dIsOnCurve,Zq as curve2dLastPoint,$q as curve2dParameter,Qq as curve2dSplitAt,eJ as curve2dTangentAt,lk as curveAxis,ak as curveEndPoint,uk as curveIsClosed,dk as curveIsPeriodic,ck as curveLength,fk as curvePeriod,ok as curvePointAt,ik as curveStartPoint,sk as curveTangentAt,r1 as cut,OR as cut2D,a1 as cutAll,QA as cutAllBisect,_R as cutBlueprints,pj as cutWithEvolution,FN as cylinder,RP as cylindricalJoint,MM as defaultScorer,VY as dequeueTask,w1 as describe,Sq as deserializeDrawing,BF as deserializeHistory,WD as deserializeShape,VD as downcast,y1 as draft,wq as draw,kq as drawCircle,Aq as drawEllipse,Lq as drawFaceOutline,Pq as drawParametricFunction,Nq as drawPointsInterpolation,jq as drawPolysides,Iq as drawProjection,Eq as drawRectangle,Tq as drawRoundedRectangle,Dq as drawSingleCircle,Oq as drawSingleEllipse,Mq as drawText,Uq as drawingChamfer,Bq as drawingCut,Hq as drawingFillet,zq as drawingFuse,Vq as drawingIntersect,Rq as drawingToSketchOnPlane,P1 as drill,fI as edgeFinder,EM as edgesOfFace,HN as ellipse,GN as ellipseArc,zN as ellipsoid,BY as enqueueTask,k as err,lP as exportAssemblySTEP,HJ as exportDXF,kJ as exportGlb,OJ as exportGltf,Fk as exportIGES,vJ as exportOBJ,Nk as exportSTEP,EY as exportSTEPConfigured,Pk as exportSTL,cY as exportThreeMF,bF as exportURDF,k1 as extrude,tM as extrudeAll,ZN as face,nO as faceAxis,tO as faceCenter,hI as faceFinder,qD as faceGeomType,JD as faceOrientation,wM as facesOfEdge,TM as facesOfVertex,ZX as fieldBoolean,tZ as fieldContour,QX as fieldOffset,eZ as fieldReinit,$X as fieldShell,oA as fill,QN as filledFace,m1 as fillet,hj as filletWithEvolution,vO as findFacesByTag,_P as findNode,OF as findStep,Vj as fixSelfIntersection,zj as fixShape,Va as flatMap,Ja as flatten,YD as flipFaceOrientation,mk as flipOrientation,MY as fontMetrics,YP as forwardKinematics,E1 as fromBREP,XZ as fromKernelDir,YZ as fromKernelPnt,JZ as fromKernelVec,Xa as fromNullable,n1 as fuse,ER as fuse2D,i1 as fuseAll,nj as fuseAllBisect,gR as fuseBlueprints,fj as fuseWithEvolution,l0 as gearGeometry,gX as getActiveVoxelId,$E as getBounds,aJ as getBounds2D,GE as getCompSolids,rk as getCurveType,OT as getDisposalStats,zE as getEdges,MO as getFaceColor,cO as getFaceOrigins,yO as getFaceTags,BE as getFaces,MK as getFont,QO as getHashCode,kF as getHistoryShape,U as getKernel,hT as getKernelCapabilities,yT as getKernelTier,JA as getNurbsCurveData,YA as getNurbsSurfaceData,pk as getOrientation,oJ as getOrientation2D,jo as getPerformanceStats,jO as getShapeColor,XT as getShapeKind,WE as getShells,vI as getSingleFace,UE as getSolids,KD as getSurfaceType,xO as getTagMetadata,HE as getVertices,hX as getVoxel,VE as getWires,fP as gridPattern,Qj as guidedSweep,b1 as heal,Fj as healFace,Pj as healSolid,Ij as healWire,UN as helix,cQ as hull,A$ as importDXF,q$ as importGLB,kY as importIGES,P$ as importOBJ,DY as importSTEP,OY as importSTL,TY as importSVG,wY as importSVGPathD,K$ as importThreeMF,wF as importURDF,CT as init,uT as initFromManifold,xT as initFromOC,_X as initVoxel,oO as innerWires,HQ as instance,WQ as instanceCount,UQ as instanceGrid,qQ as instancedMesh,hk as interpolateCurve,o1 as intersect,kR as intersect2D,vR as intersectBlueprints,mj as intersectWithEvolution,RE as invalidateShapeCache,lF as inverseKinematics,Q0 as io,go as ioError,WT as is2D,UT as is3D,IY as isBatchRequest,oX as isChamferRadius,ZT as isClosedWire,UD as isCompSolid,wE as isCompound,CN as isDerivedFaceRef,FY as isDisposeRequest,yE as isEdge,wN as isEdgeRef,O1 as isEmpty,tk as isEqualShape,A as isErr,RY as isErrorResponse,xE as isFace,EN as isFaceRef,sX as isFilletRadius,NY as isInitRequest,sJ as isInside2D,VQ as isInstanced,DN as isLineageRef,HT as isLive,$T as isManifoldShell,aX as isNumber,La as isOk,PY as isOperationRequest,QT as isOrientedFace,aE as isPlanarFace,oE as isPlanarWire,IK as isProjectionPlane,UY as isQueueEmpty,ek as isSameShape,EE as isShape1D,TE as isShape3D,SE as isShell,CE as isSolid,LY as isSuccessResponse,D1 as isValid,eE as isValidSolid,vE as isVertex,TN as isVertexRef,bE as isWire,QE as iterCompSolids,KE as iterEdges,qE as iterFaces,ZE as iterShells,XE as iterSolids,zD as iterTopo,YE as iterVertices,JE as iterWires,dF as jointTrajectory,WP as jointTransform,mF as jointsFromDH,jE as kernelCall,ME as kernelCallRaw,NE as kernelCallScoped,P as kernelError,HZ as latticeInfill,UZ as latticeInfillShape,BN as line,uP as linearPattern,jK as loadFont,j1 as loft,rM as loftAll,tq as makeBaseBox,M0 as makeExternalGear,N0 as makeInternalGear,MD as makePlane,F0 as makePlanetaryGear,RK as makeProjectedEdges,rE as manifoldShell,Ra as map,Ya as mapBoth,za as mapErr,to as match,GQ as materialize,pM as measureArea,vM as measureCurvatureAt,yM as measureCurvatureAtMid,hM as measureDistance,gM as measureDistanceProps,mM as measureLength,dM as measureLinearProps,uM as measureSurfaceProps,fM as measureVolume,lM as measureVolumeProps,Z0 as measurement,XP as mechanismDOF,S1 as mesh,C1 as meshEdges,Bk as meshLODs,Hk as meshLODsProgressive,Ik as meshMultiLOD,pQ as minkowski,Z$ as mirror,fJ as mirror2D,qq as mirrorDrawing,L1 as mirrorJoin,Y0 as modifiers,RF as modifyStep,ho as moduleInitError,Zj as multiSectionSweep,eO as normalAt,_1 as offset,iP as offsetFace,NX as offsetMesh,IX as offsetShape,_k as offsetWire2D,O as ok,Ha as or,Ua as orElse,EL as organiseBlueprints,nE as orientedFace,iO as outerWire,t2 as patterns,HY as pendingCount,ao as pipeline,FD as pivotPlane,sE as planarFace,zP as planarJoint,cE as planarWire,D0 as planetPlacements,F1 as pocket,ZD as pointOnSurface,SX as pointsInside,eP as polygon,mQ as polyhedron,ZK as polysideInnerRadius,UL as polysidesBlueprint,vj as positionOnCurve,ST as prewarm,q0 as primitives,LP as prismaticJoint,HK as projectEdges,$D as projectPointOnFace,$0 as query,_o as queryError,R1 as rectangularPattern,JY as registerHandler,dT as registerKernel,vT as registerKernelTier,PF as registerOperation,MF as registerShape,mX as registerVoxel,WY as rejectAll,hP as removeChild,aO as removeHolesFromFace,TX as repairMesh,LF as replayFrom,IF as replayHistory,kT as resetDisposalStats,Mo as resetPerformanceStats,UO as resize,$ as resolve,J$ as resolve3D,xN as resolveDerivedFaceRef,uD as resolveDirection,iN as resolveEdgeRef,kN as resolveLineageRef,jD as resolvePlane,JM as resolveRef,jN as resolveRefIn,NN as resolveRefParams,fN as resolveVertexRef,Jq as reverseCurve,IP as revoluteJoint,A1 as revolve,LQ as roof,X$ as rotate,uJ as rotate2D,Gq as rotateDrawing,WL as roundedRectangleBlueprint,Q$ as scale,dJ as scale2D,Kq as scaleDrawing,_Z as sdfBox,xZ as sdfCapsule,bZ as sdfCone,yZ as sdfCylinder,NZ as sdfFieldAxialRamp,IZ as sdfFieldClamp,MZ as sdfFieldConst,FZ as sdfFieldFromSdf,PZ as sdfFieldRadialRamp,DZ as sdfLattice,CZ as sdfPlane,vZ as sdfRoundedBox,gZ as sdfSphere,OZ as sdfStrutLattice,TZ as sdfSweep,SZ as sdfTorus,s1 as section,c1 as sectionToFace,zF as serializeHistory,HP as setJointValue,VP as setJointValues,sO as setShapeOrigin,bO as setTagMetadata,aP as sewShells,r0 as shape,DX as shapeToMeshInput,BD as shapeType,jM as sharedEdges,g1 as shell,PX as shellMesh,LX as shellShape,_j as shellWithEvolution,x1 as simplify,KK as sketchCircle,qK as sketchEllipse,yK as sketchExtrude,gK as sketchFace,QK as sketchFaceOffset,eq as sketchHelix,xK as sketchLoft,hJ as sketchOnFace2D,mJ as sketchOnPlane2D,$K as sketchParametricFunction,XK as sketchPolysides,JK as sketchRectangle,vK as sketchRevolve,YK as sketchRoundedRectangle,bK as sketchSweep,AY as sketchText,_K as sketchWires,mo as sketcherStateError,u1 as slice,rP as solid,Bj as solidFromShell,C$ as solveAssembly,IN as sphere,BP as sphericalJoint,l1 as split,AF as stepCount,jF as stepsFrom,pJ as stretch2D,$N as subFace,Kj as supportExtrude,oT as supportsConstraintSketch,aT as supportsProjection,rQ as surfaceFromGrid,oQ as surfaceFromImage,Gj as sweep,_O as tagFaces,JN as tangentArc,Ka as tap,qa as tapErr,PK as textBlueprints,jY as textMetrics,v1 as thicken,VF as thread,WN as threePointArc,T1 as toBREP,HA as toBufferGeometryData,UA as toGroupedBufferGeometryData,GZ as toKernelVec,GA as toLODGeometryData,KA as toLODGeometryLevels,WA as toLineGeometryData,cJ as toSVGPathD,cD as toVec2,sD as toVec3,RN as torus,WZ as tpmsLattice,t1 as transformCopy,X0 as transforms,Y$ as translate,lJ as translate2D,Wq as translateDrawing,PD as translatePlane,ro as tryCatch,io as tryCatchAsync,Jj as twistExtrude,po as typeCastError,DF as undoLast,vo as unsupportedError,j as unwrap,eo as unwrapErr,Qa as unwrapOr,$a as unwrapOrElse,gP as updateNode,WM as updateRoles,XD as uvBounds,QD as uvCoordinates,iE as validSolid,m0 as validatePlanetary,F as validationError,Mj as variableFillet,dD as vecAdd,CD as vecAngle,gD as vecCross,yD as vecDistance,hD as vecDot,xD as vecEquals,SD as vecIsZero,_D as vecLength,vD as vecLengthSq,mD as vecNegate,bD as vecNormalize,wD as vecProjectToPlane,DD as vecRepr,TD as vecRotate,pD as vecScale,fD as vecSub,tP as vertex,uX as vertexFinder,iD as vertexPosition,kM as verticesOfEdge,DM as verticesOfFace,FX as voxelBoolean,XX as voxelBooleanField,rZ as voxelBooleanFieldShapes,RX as voxelBooleanShapes,YX as voxelField,nZ as voxelFieldFromShape,vP as walkAssembly,xX as windingNumbers,YN as wire,_I as wireFinder,XN as wireLoop,OM as wiresOfFace,mT as withKernel,$Z as withKernelDir,QZ as withKernelPnt,ZZ as withKernelVec,gT as withQuality,LT as withScope,BT as withScopeResult,VT as withScopeResultAsync,bT as withTier,Wa 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-DKiuNx_7.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-Bl42A0v1.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-Br0mog6-.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