brepjs-cad 0.110.0 → 0.112.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 +86 -0
- package/package.json +5 -5
- package/viewer/dist/assets/{brepjs-P26RleUV.js → brepjs-BLx47Epg.js} +1 -1
- package/viewer/dist/assets/{index-BNHFpm0l.js → index-DyuDSs3t.js} +1 -1
- package/viewer/dist/assets/{kernelWorker-DdISCcle.js → kernelWorker-N7aAQ5N0.js} +1 -1
- package/viewer/dist/index.html +1 -1
- package/viewer/dist/wasm/occt-wasm.wasm +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,91 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.112.0](https://github.com/andymai/brepjs/compare/brepjs-cad-v0.111.1...brepjs-cad-v0.112.0) (2026-08-04)
|
|
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:** 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))
|
|
11
|
+
* **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))
|
|
12
|
+
* **brepjs-cad:** grade judge quality against a reference exemplar ([#1731](https://github.com/andymai/brepjs/issues/1731)) ([9d4aaeb](https://github.com/andymai/brepjs/commit/9d4aaeb8e4830c6be78668854730367194b6a9e5))
|
|
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:** 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))
|
|
16
|
+
* **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))
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### Bug Fixes
|
|
20
|
+
|
|
21
|
+
* **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))
|
|
22
|
+
* **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))
|
|
23
|
+
* **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))
|
|
24
|
+
* **brepjs-cad:** close gear-teeth edge cases found by /eval-skill (ring, worm tip relief, GT2) ([#1548](https://github.com/andymai/brepjs/issues/1548)) ([4bd0494](https://github.com/andymai/brepjs/commit/4bd049401f3affcc3f38e3a31bb9520653a3e89c))
|
|
25
|
+
* **brepjs-cad:** code + hint the degenerate-edge (duplicate-vertex) verify failure ([#1550](https://github.com/andymai/brepjs/issues/1550)) ([502dffc](https://github.com/andymai/brepjs/commit/502dffc4a2ae495ae5c98b0c7966721abe0d5f48))
|
|
26
|
+
* **brepjs-cad:** correct spur-gear example flanks + add root fillet ([#1528](https://github.com/andymai/brepjs/issues/1528)) ([6971c6b](https://github.com/andymai/brepjs/commit/6971c6befa1fea36a8c2f3ee89c4aa20946020c7))
|
|
27
|
+
* **brepjs-cad:** exploded-joint legibility + disjoint-compound caveat (basics eval) ([#1565](https://github.com/andymai/brepjs/issues/1565)) ([9d06121](https://github.com/andymai/brepjs/commit/9d0612111a595e57fcfca6fd191ed9169fc2c062))
|
|
28
|
+
* **brepjs-cad:** handle brepjs/playground refs + summarize body relations in the digest ([#1547](https://github.com/andymai/brepjs/issues/1547)) ([b0acef0](https://github.com/andymai/brepjs/commit/b0acef0ad80cdd61f0d2683f1e6d0ece0cae028e))
|
|
29
|
+
* **brepjs-cad:** heal 6 implement-skill findings from the full-flywheel re-run ([#1568](https://github.com/andymai/brepjs/issues/1568)) ([f63bf3d](https://github.com/andymai/brepjs/commit/f63bf3d5a0aa638d06e11dd7e2c27e84dbf74746))
|
|
30
|
+
* **brepjs-cad:** heal implement + polish skills from clean-room eval ([#1526](https://github.com/andymai/brepjs/issues/1526)) ([0645e16](https://github.com/andymai/brepjs/commit/0645e163e1d8759c95406d0f9526d0aa3b5dd480))
|
|
31
|
+
* **brepjs-cad:** heal implement skill — deep-stack bounds extremes aren't datums ([#1529](https://github.com/andymai/brepjs/issues/1529)) ([5ed366f](https://github.com/andymai/brepjs/commit/5ed366f266b3e6e50ae4b54d5779aa05453e894a))
|
|
32
|
+
* **brepjs-cad:** heal implement skill from the eval flywheel (3 findings) ([#1552](https://github.com/andymai/brepjs/issues/1552)) ([51def82](https://github.com/andymai/brepjs/commit/51def82db4e0600e85f45e4dd828cc9caee58d15))
|
|
33
|
+
* **brepjs-cad:** heal implement skill from the full-corpus eval flywheel (4 findings) ([#1554](https://github.com/andymai/brepjs/issues/1554)) ([3cfc28e](https://github.com/andymai/brepjs/commit/3cfc28ed8b82c46330f1d75f1e98c13fd4d65a06))
|
|
34
|
+
* **brepjs-cad:** 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))
|
|
35
|
+
* **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))
|
|
36
|
+
* **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))
|
|
37
|
+
* **core:** bump occt-wasm to 3.7.0 with borrowed adjacency handles ([#1821](https://github.com/andymai/brepjs/issues/1821)) ([4b76974](https://github.com/andymai/brepjs/commit/4b76974833f2d9900740fffcec2dd589de952ff9))
|
|
38
|
+
* **deps:** clear all remaining OSV findings to get main green ([#1917](https://github.com/andymai/brepjs/issues/1917)) ([2456ef4](https://github.com/andymai/brepjs/commit/2456ef40860129a59027d055978c002004104925))
|
|
39
|
+
* **release:** unbreak Vercel — repin brepjs-cad to brepjs >=18.0.0 ([#1711](https://github.com/andymai/brepjs/issues/1711)) ([78c780a](https://github.com/andymai/brepjs/commit/78c780a3ab2fcc78f26b32029df72795582e145c))
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
### Reverts
|
|
43
|
+
|
|
44
|
+
* restore brepjs-cad brepjs dep floor — "*" did not fix the release churn ([#1854](https://github.com/andymai/brepjs/issues/1854)) ([194caba](https://github.com/andymai/brepjs/commit/194cabaa6c7196ee38a3b3ddaa68a881909ae263))
|
|
45
|
+
|
|
46
|
+
## [0.111.0](https://github.com/andymai/brepjs/compare/brepjs-cad-v0.110.0...brepjs-cad-v0.111.0) (2026-08-02)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
### Features
|
|
50
|
+
|
|
51
|
+
* **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))
|
|
52
|
+
* **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))
|
|
53
|
+
* **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))
|
|
54
|
+
* **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))
|
|
55
|
+
* **brepjs-cad:** grade judge quality against a reference exemplar ([#1731](https://github.com/andymai/brepjs/issues/1731)) ([9d4aaeb](https://github.com/andymai/brepjs/commit/9d4aaeb8e4830c6be78668854730367194b6a9e5))
|
|
56
|
+
* **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))
|
|
57
|
+
* **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))
|
|
58
|
+
* **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))
|
|
59
|
+
* **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))
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
### Bug Fixes
|
|
63
|
+
|
|
64
|
+
* **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))
|
|
65
|
+
* **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))
|
|
66
|
+
* **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))
|
|
67
|
+
* **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))
|
|
68
|
+
* **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))
|
|
69
|
+
* **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))
|
|
70
|
+
* **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))
|
|
71
|
+
* **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))
|
|
72
|
+
* **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))
|
|
73
|
+
* **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))
|
|
74
|
+
* **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))
|
|
75
|
+
* **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))
|
|
76
|
+
* **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))
|
|
77
|
+
* **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))
|
|
78
|
+
* **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))
|
|
79
|
+
* **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))
|
|
80
|
+
* **core:** bump occt-wasm to 3.7.0 with borrowed adjacency handles ([#1821](https://github.com/andymai/brepjs/issues/1821)) ([4b76974](https://github.com/andymai/brepjs/commit/4b76974833f2d9900740fffcec2dd589de952ff9))
|
|
81
|
+
* **deps:** clear all remaining OSV findings to get main green ([#1917](https://github.com/andymai/brepjs/issues/1917)) ([2456ef4](https://github.com/andymai/brepjs/commit/2456ef40860129a59027d055978c002004104925))
|
|
82
|
+
* **release:** unbreak Vercel — repin brepjs-cad to brepjs >=18.0.0 ([#1711](https://github.com/andymai/brepjs/issues/1711)) ([78c780a](https://github.com/andymai/brepjs/commit/78c780a3ab2fcc78f26b32029df72795582e145c))
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
### Reverts
|
|
86
|
+
|
|
87
|
+
* restore brepjs-cad brepjs dep floor — "*" did not fix the release churn ([#1854](https://github.com/andymai/brepjs/issues/1854)) ([194caba](https://github.com/andymai/brepjs/commit/194cabaa6c7196ee38a3b3ddaa68a881909ae263))
|
|
88
|
+
|
|
3
89
|
## [0.110.0](https://github.com/andymai/brepjs/compare/brepjs-cad-v0.109.2...brepjs-cad-v0.110.0) (2026-08-02)
|
|
4
90
|
|
|
5
91
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "brepjs-cad",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.112.0",
|
|
4
4
|
"description": "Brainstorm → design → author → verify → polish pipeline for parametric brepjs CAD, with the brep CLI",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -66,18 +66,18 @@
|
|
|
66
66
|
"puppeteer": "^25.0.4"
|
|
67
67
|
},
|
|
68
68
|
"devDependencies": {
|
|
69
|
-
"@anthropic-ai/sdk": "0.
|
|
69
|
+
"@anthropic-ai/sdk": "0.115.0",
|
|
70
70
|
"@langfuse/client": "5.9.1",
|
|
71
71
|
"@langfuse/otel": "5.9.1",
|
|
72
72
|
"@langfuse/tracing": "5.9.1",
|
|
73
|
-
"@opentelemetry/sdk-node": "0.
|
|
73
|
+
"@opentelemetry/sdk-node": "0.221.0",
|
|
74
74
|
"@react-three/drei": "^10.7.7",
|
|
75
75
|
"@react-three/fiber": "^9.6.1",
|
|
76
|
-
"@types/node": "26.1.
|
|
76
|
+
"@types/node": "26.1.2",
|
|
77
77
|
"@types/react": "^19.2.15",
|
|
78
78
|
"@types/react-dom": "^19.2.3",
|
|
79
79
|
"@types/three": "0.185.1",
|
|
80
|
-
"@vitejs/plugin-react": "6.0.
|
|
80
|
+
"@vitejs/plugin-react": "6.0.4",
|
|
81
81
|
"brepjs-viewer": "*",
|
|
82
82
|
"eslint": "^10.4.0",
|
|
83
83
|
"react": "19.2.8",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
var e=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports);function t(e,t){return e[t]}function n(e,t=0){return[e[t],e[t+1],e[t+2]]}var r=class extends Error{location;constructor(e,t){super(`Bug in ${e}: ${t}`),this.name=`BrepBugError`,this.location=e}};function i(e,t){throw new r(e,t)}var a={exact:!0,brepExport:!0,exactMeasurement:!0,tessellationModel:`extract-time`},o={exact:!0,brepExport:!0,exactMeasurement:!0,tessellationModel:`none`},s=Symbol.for(`brepjs.kernel.unsupportedOperation`),c=class extends Error{constructor(e){super(e),this.name=`UnsupportedKernelOperationError`,Object.defineProperty(this,s,{value:!0})}};function l(e){return e instanceof Error&&Reflect.get(e,s)===!0}function u(e,t){return{x:e.x-t.x,y:e.y-t.y,z:e.z-t.z}}function d(e,t){return{x:e.y*t.z-e.z*t.y,y:e.z*t.x-e.x*t.z,z:e.x*t.y-e.y*t.x}}function f(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function p(e){return Math.sqrt(e.x*e.x+e.y*e.y+e.z*e.z)}function m(e,t){let n=e.x-t.x,r=e.y-t.y,i=e.z-t.z;return n*n+r*r+i*i}function h(e,t){let n=e[t];if(n===void 0)throw Error(`Index ${t} out of bounds`);return n}function g(e,t){let n=e[t];if(n===void 0)throw Error(`Index ${t} out of bounds`);return n}function _(e,t,n,r){let i=d(u(h(e,n),h(e,t)),u(h(e,r),h(e,t))),a=p(i),o=a>1e-14?{x:i.x/a,y:i.y/a,z:i.z/a}:i;return{a:t,b:n,c:r,normal:o,offset:f(o,h(e,t)),alive:!0,outsidePoints:[]}}function v(e,t){return f(e.normal,t)-e.offset}function y(e,t){let n=t*t,r=[];for(let t of e){let e=!1;for(let i of r)if(m(t,i)<n){e=!0;break}e||r.push(t)}return r}function b(e){let t=e.length;if(t<4)return null;let n=0,r=1,i=m(h(e,0),h(e,1));for(let a=0;a<t;a++)for(let o=a+1;o<t;o++){let t=m(h(e,a),h(e,o));t>i&&(i=t,n=a,r=o)}if(i<1e-20)return null;let a=u(h(e,r),h(e,n)),o=-1,s=-1;for(let i=0;i<t;i++){if(i===n||i===r)continue;let t=d(a,u(h(e,i),h(e,n))),c=f(t,t);c>s&&(s=c,o=i)}if(o===-1||s<1e-20)return null;let c=d(u(h(e,r),h(e,n)),u(h(e,o),h(e,n))),l=p(c);if(l<1e-14)return null;let g={x:c.x/l,y:c.y/l,z:c.z/l},_=f(g,h(e,n)),v=-1,y=-1;for(let i=0;i<t;i++){if(i===n||i===r||i===o)continue;let t=Math.abs(f(g,h(e,i))-_);t>y&&(y=t,v=i)}return v===-1||y<1e-14?null:f(g,h(e,v))-_>0?[n,o,r,v]:[n,r,o,v]}function x(e,t){let n=y(e,t);if(n.length<4)throw Error(n.length===0?`No points provided for convex hull`:`Fewer than 4 non-coincident points; cannot form a 3D convex hull`);let r=b(n);if(r===null)throw Error(`All points are coplanar; cannot form a 3D convex hull`);let[i,a,o,s]=r,c={x:(h(n,i).x+h(n,a).x+h(n,o).x+h(n,s).x)/4,y:(h(n,i).y+h(n,a).y+h(n,o).y+h(n,s).y)/4,z:(h(n,i).z+h(n,a).z+h(n,o).z+h(n,s).z)/4};function l(e,t,r){let i=_(n,e,t,r),a={x:(h(n,e).x+h(n,t).x+h(n,r).x)/3,y:(h(n,e).y+h(n,t).y+h(n,r).y)/3,z:(h(n,e).z+h(n,t).z+h(n,r).z)/3},o=u(c,a);return f(i.normal,o)>0?_(n,e,r,t):i}let d=[l(i,a,o),l(i,o,s),l(i,s,a),l(a,s,o)],p=new Set([i,a,o,s]),m=1e-10;for(let e=0;e<n.length;e++)if(!p.has(e)){for(let t of d)if(v(t,h(n,e))>m){t.outsidePoints.push(e);break}}for(let e=0;e<n.length*4;e++){let e=null;for(let t of d)if(t.alive&&t.outsidePoints.length>0){e=t;break}if(e===null)break;let t=g(e.outsidePoints,0),r=v(e,h(n,t));for(let i=1;i<e.outsidePoints.length;i++){let a=g(e.outsidePoints,i),o=v(e,h(n,a));o>r&&(r=o,t=a)}let i=[];for(let e of d)e.alive&&v(e,h(n,t))>m&&i.push(e);let a=new Map;for(let e of i){let t=[[e.a,e.b],[e.b,e.c],[e.c,e.a]];for(let[e,n]of t){let t=e<n?`${e}-${n}`:`${n}-${e}`,r=a.get(t);r?r.count++:a.set(t,{a:e,b:n,count:1})}}let o=[];for(let e of a.values())e.count===1&&o.push({a:e.a,b:e.b});let s=[];for(let e of i){for(let n of e.outsidePoints)n!==t&&s.push(n);e.alive=!1,e.outsidePoints=[]}let c=[];for(let e of o){let r=_(n,e.a,e.b,t);c.push(r),d.push(r)}for(let e of s)for(let t of c)if(v(t,h(n,e))>m){t.outsidePoints.push(e);break}}let x=[];for(let e of d)e.alive&&x.push([e.a,e.b,e.c]);return{faces:x,points:n}}function S(e,t){switch(e.__bk2d){case`line`:return[e.ox+e.dx*t,e.oy+e.dy*t];case`circle`:{let n=e.sense?t:-t;return[e.cx+e.radius*Math.cos(n),e.cy+e.radius*Math.sin(n)]}case`ellipse`:{let n=e.sense?t:-t,r=Math.cos(e.xDirAngle),i=Math.sin(e.xDirAngle),a=e.majorRadius*Math.cos(n),o=e.minorRadius*Math.sin(n);return[e.cx+a*r-o*i,e.cy+a*i+o*r]}case`bezier`:return Te(e.poles,t);case`bspline`:return Ee(e,t);case`trimmed`:{let n=e.tStart+t*(e.tEnd-e.tStart);return S(e.basis,n)}}}function C(e,t){switch(e.__bk2d){case`line`:return[e.dx,e.dy];case`circle`:{let n=e.sense?t:-t,r=e.sense?1:-1;return[-e.radius*Math.sin(n)*r,e.radius*Math.cos(n)*r]}case`ellipse`:{let n=e.sense?t:-t,r=e.sense?1:-1,i=Math.cos(e.xDirAngle),a=Math.sin(e.xDirAngle),o=-e.majorRadius*Math.sin(n)*r,s=e.minorRadius*Math.cos(n)*r;return[o*i-s*a,o*a+s*i]}case`bezier`:{let n=1e-8,r=Te(e.poles,Math.max(0,t-n)),i=Te(e.poles,Math.min(1,t+n)),a=Math.min(1,t+n)-Math.max(0,t-n);return[(i[0]-r[0])/a,(i[1]-r[1])/a]}case`bspline`:{let n=1e-8,r=e.knots[0],i=e.knots[e.knots.length-1],a=Ee(e,Math.max(r,t-n)),o=Ee(e,Math.min(i,t+n)),s=Math.min(i,t+n)-Math.max(r,t-n);return[(o[0]-a[0])/s,(o[1]-a[1])/s]}case`trimmed`:{let n=e.tStart+t*(e.tEnd-e.tStart),r=C(e.basis,n),i=e.tEnd-e.tStart;return[r[0]*i,r[1]*i]}}}function w(e){switch(e.__bk2d){case`line`:return{first:0,last:e.len};case`circle`:case`ellipse`:return{first:0,last:2*Math.PI};case`bezier`:return{first:0,last:1};case`bspline`:return{first:e.knots[0],last:e.knots[e.knots.length-1]};case`trimmed`:return{first:0,last:1}}}function ee(e){switch(e.__bk2d){case`line`:return`LINE`;case`circle`:return`CIRCLE`;case`ellipse`:return`ELLIPSE`;case`bezier`:return`BEZIER_CURVE`;case`bspline`:return`BSPLINE_CURVE`;case`trimmed`:return`TRIMMED_`+ee(e.basis)}}function te(e,t,n,r){let i=n-e,a=r-t,o=Math.sqrt(i*i+a*a);return{__bk2d:`line`,ox:e,oy:t,dx:o>0?i/o:1,dy:o>0?a/o:0,len:o}}function ne(e,t,n,r=!0){return{__bk2d:`circle`,cx:e,cy:t,radius:n,sense:r}}function re(e,t,n,r,i,a){let o=2*(e*(r-a)+n*(a-t)+i*(t-r));if(Math.abs(o)<1e-12)return te(e,t,i,a);let s=((e*e+t*t)*(r-a)+(n*n+r*r)*(a-t)+(i*i+a*a)*(t-r))/o,c=((e*e+t*t)*(i-n)+(n*n+r*r)*(e-i)+(i*i+a*a)*(n-e))/o,l=Math.sqrt((e-s)**2+(t-c)**2),u=Math.atan2(t-c,e-s),d=Math.atan2(r-c,n-s),f=Math.atan2(a-c,i-s),p=d-u;p<0&&(p+=2*Math.PI);let m=f-u;m<0&&(m+=2*Math.PI);let h=p<m,g=ne(s,c,l,h);if(!h){let e=-u,t=-f;return t<e-1e-9&&(t+=2*Math.PI),{__bk2d:`trimmed`,basis:g,tStart:e,tEnd:t}}let _=f;return _<u-1e-9&&(_+=2*Math.PI),{__bk2d:`trimmed`,basis:g,tStart:u,tEnd:_}}function ie(e,t,n,r,i,a){let o=Math.sqrt(n*n+r*r),s=o>0?n/o:0,c=o>0?r/o:0,l=e-i,u=t-a,d=2*(u*s-l*c);if(Math.abs(d)<1e-12)return te(e,t,i,a);let f=-(l*l+u*u)/d,p=e-f*c,m=t+f*s,h=Math.abs(f),g=Math.atan2(t-m,e-p),_=Math.atan2(a-m,i-p),v=-(t-m)/h,y=(e-p)/h,b=s*v+c*y,x;if(b>0){let e=_-g;e<=0&&(e+=2*Math.PI),x=g+e/2}else{let e=_-g;e>=0&&(e-=2*Math.PI),x=g+e/2}return re(e,t,p+h*Math.cos(x),m+h*Math.sin(x),i,a)}function ae(e,t,n,r,i=1,a=0,o=!0){return{__bk2d:`ellipse`,cx:e,cy:t,majorRadius:n,minorRadius:r,xDirAngle:Math.atan2(a,i),sense:o}}function oe(e){return{__bk2d:`bezier`,poles:[...e]}}function se(e,t,n){switch(e.__bk2d){case`line`:return{...e,ox:e.ox+t,oy:e.oy+n};case`circle`:return{...e,cx:e.cx+t,cy:e.cy+n};case`ellipse`:return{...e,cx:e.cx+t,cy:e.cy+n};case`bezier`:return{...e,poles:e.poles.map(([e,r])=>[e+t,r+n])};case`bspline`:return{...e,poles:e.poles.map(([e,r])=>[e+t,r+n])};case`trimmed`:return{...e,basis:se(e.basis,t,n)}}}function ce(e,t,n,r){let i=Math.cos(t),a=Math.sin(t),o=(e,t)=>{let o=e-n,s=t-r;return[n+o*i-s*a,r+o*a+s*i]};switch(e.__bk2d){case`line`:{let[t,n]=o(e.ox,e.oy),r=e.dx*i-e.dy*a,s=e.dx*a+e.dy*i;return{...e,ox:t,oy:n,dx:r,dy:s}}case`circle`:{let[t,n]=o(e.cx,e.cy);return{...e,cx:t,cy:n}}case`ellipse`:{let[n,r]=o(e.cx,e.cy);return{...e,cx:n,cy:r,xDirAngle:e.xDirAngle+t}}case`bezier`:return{...e,poles:e.poles.map(([e,t])=>o(e,t))};case`bspline`:return{...e,poles:e.poles.map(([e,t])=>o(e,t))};case`trimmed`:return{...e,basis:ce(e.basis,t,n,r)}}}function le(e,t,n,r){let i=(e,i)=>[n+(e-n)*t,r+(i-r)*t];switch(e.__bk2d){case`line`:{let[t,n]=i(e.ox,e.oy),[r,a]=i(e.ox+e.dx*e.len,e.oy+e.dy*e.len),o=r-t,s=a-n,c=Math.sqrt(o*o+s*s);return{...e,ox:t,oy:n,dx:c>0?o/c:e.dx,dy:c>0?s/c:e.dy,len:c}}case`circle`:{let[n,r]=i(e.cx,e.cy);return{...e,cx:n,cy:r,radius:e.radius*Math.abs(t)}}case`ellipse`:{let[n,r]=i(e.cx,e.cy);return{...e,cx:n,cy:r,majorRadius:e.majorRadius*Math.abs(t),minorRadius:e.minorRadius*Math.abs(t)}}case`bezier`:return{...e,poles:e.poles.map(([e,t])=>i(e,t))};case`bspline`:return{...e,poles:e.poles.map(([e,t])=>i(e,t))};case`trimmed`:return{...e,basis:le(e.basis,t,n,r)}}}function ue(e,t,n){return le(e,-1,t,n)}function de(e,t,n,r,i){let a=Math.sqrt(r*r+i*i),o=r/a,s=i/a,c=(e,r)=>{let i=e-t,a=r-n,c=i*o+a*s;return[t+2*c*o-i,n+2*c*s-a]};switch(e.__bk2d){case`line`:{let[t,n]=c(e.ox,e.oy),r=2*(e.dx*o+e.dy*s)*o-e.dx,i=2*(e.dx*o+e.dy*s)*s-e.dy;return{...e,ox:t,oy:n,dx:r,dy:i}}case`circle`:{let[t,n]=c(e.cx,e.cy);return{...e,cx:t,cy:n,sense:!e.sense}}case`ellipse`:{let[t,n]=c(e.cx,e.cy),r=o*o-s*s,i=2*o*s,a=Math.atan2(i*Math.cos(e.xDirAngle)-r*Math.sin(e.xDirAngle),r*Math.cos(e.xDirAngle)+i*Math.sin(e.xDirAngle));return{...e,cx:t,cy:n,xDirAngle:a,sense:!e.sense}}case`bezier`:return{...e,poles:e.poles.map(([e,t])=>c(e,t))};case`bspline`:return{...e,poles:e.poles.map(([e,t])=>c(e,t))};case`trimmed`:return{...e,basis:de(e.basis,t,n,r,i)}}}function fe(e,t,n){let r=pe(e),i=pe(t);return r.__bk2d===`line`&&i.__bk2d===`line`?ge(e,r,t,i,n):r.__bk2d===`line`&&i.__bk2d===`circle`?{points:_e(e,r,t,i,n),segments:[]}:r.__bk2d===`circle`&&i.__bk2d===`line`?{points:_e(t,i,e,r,n),segments:[]}:r.__bk2d===`circle`&&i.__bk2d===`circle`?{points:ye(e,r,t,i,n),segments:[]}:be(e,t,n,e===t)}function pe(e){let t=e;for(;t.__bk2d===`trimmed`;)t=t.basis;return t}function me(e,t,n){let r=w(e);return t>=r.first-n&&t<=r.last+n}function he(e,t,n){let r=w(e);if(!isFinite(r.first)||!isFinite(r.last))return null;let i=(r.last-r.first)/80,a=r.first,o=1/0;for(let s=0;s<=80;s++){let c=r.first+s*i,[l,u]=S(e,c),d=(l-t)**2+(u-n)**2;d<o&&(o=d,a=c)}let[s,c]=S(e,r.first),[l,u]=S(e,r.last),[d,f]=S(e,(r.first+r.last)/2),p=Math.max(Math.sqrt((l-s)**2+(u-c)**2),Math.sqrt((d-s)**2+(f-c)**2),1e-6)*.1;return o<p*p?a:null}function ge(e,t,n,r,i){let a=t.dx*r.dy-t.dy*r.dx;if(Math.abs(a)>=1e-14){let o=r.ox-t.ox,s=r.oy-t.oy,c=(o*r.dy-s*r.dx)/a,l=(o*t.dy-s*t.dx)/a;return!me(e,c,i)||!me(n,l,i)?{points:[],segments:[]}:{points:[[t.ox+c*t.dx,t.oy+c*t.dy]],segments:[]}}let o=r.ox-t.ox,s=r.oy-t.oy,c=o*t.dy-s*t.dx;if(Math.abs(c)>i)return{points:[],segments:[]};let l=w(e),u=w(n),d=S(n,u.first),f=S(n,u.last),p=(d[0]-t.ox)*t.dx+(d[1]-t.oy)*t.dy,m=(f[0]-t.ox)*t.dx+(f[1]-t.oy)*t.dy,h=Math.max(l.first,Math.min(p,m)),g=Math.min(l.last,Math.max(p,m));return g-h<i?{points:[],segments:[]}:{points:[],segments:[te(t.ox+h*t.dx,t.oy+h*t.dy,t.ox+g*t.dx,t.oy+g*t.dy)]}}function _e(e,t,n,r,i){let a=t.ox-r.cx,o=t.oy-r.cy,s=t.dx*t.dx+t.dy*t.dy,c=2*(a*t.dx+o*t.dy),l=a*a+o*o-r.radius*r.radius,u=c*c-4*s*l;if(u<-i)return[];let d=[],f=Math.sqrt(Math.max(0,u)),p=(-c-f)/(2*s),m=(-c+f)/(2*s);for(let r of u<i*i?[p]:[p,m]){if(!me(e,r,i))continue;let a=t.ox+r*t.dx,o=t.oy+r*t.dy,s=he(n,a,o);if(s===null)continue;let[c,l]=S(n,s);(c-a)**2+(l-o)**2>i*i*1e6||d.push([a,o])}return d}function ve(e,t,n){let r=w(e),i=w(t),a=Math.abs(r.last-r.first-2*Math.PI)<1e-10,o=Math.abs(i.last-i.first-2*Math.PI)<1e-10;if(a&&o)return[];if(a)return[S(t,i.first),S(t,i.last)];if(o)return[S(e,r.first),S(e,r.last)];let s=[],c=[[t,S(e,r.first)],[t,S(e,r.last)],[e,S(t,i.first)],[e,S(t,i.last)]];for(let[e,t]of c){let r=he(e,t[0],t[1]);if(r!==null){let[i,a]=S(e,r);(i-t[0])**2+(a-t[1])**2<n*n*100&&s.push(t)}}let l=[];for(let e of s)l.some(([t,r])=>(t-e[0])**2+(r-e[1])**2<n*n*100)||l.push(e);return l}function ye(e,t,n,r,i){let a=r.cx-t.cx,o=r.cy-t.cy,s=Math.sqrt(a*a+o*o);if(s>t.radius+r.radius+i||s<Math.abs(t.radius-r.radius)-i)return[];if(s<1e-14)return Math.abs(t.radius-r.radius)>i?[]:ve(e,n,i);let c=(t.radius*t.radius-r.radius*r.radius+s*s)/(2*s),l=t.radius*t.radius-c*c,u=Math.sqrt(Math.max(0,l)),d=t.cx+c*a/s,f=t.cy+c*o/s,p=u<i?[[d,f]]:[[d+u*o/s,f-u*a/s],[d-u*o/s,f+u*a/s]],m=[];for(let[t,r]of p){let a=he(e,t,r),o=he(n,t,r);if(a===null||o===null)continue;let[s,c]=S(e,a),[l,u]=S(n,o),d=(i*10)**2;(s-t)**2+(c-r)**2>d||(l-t)**2+(u-r)**2>d||m.push([t,r])}return m}function be(e,t,n,r=!1){let i=w(e),a=w(t);if(!isFinite(i.first)||!isFinite(i.last)||!isFinite(a.first)||!isFinite(a.last))return{points:[],segments:[]};let o=[],s=[];for(let n=0;n<=100;n++){let r=i.first+(i.last-i.first)*n/100,[c,l]=S(e,r);o.push({t:r,x:c,y:l});let u=a.first+(a.last-a.first)*n/100,[d,f]=S(t,u);s.push({t:u,x:d,y:f})}let c=Math.max(n*100,.5),l=new Float64Array(600);for(let e=0;e<100;e++){let t=s[e],n=s[e+1],r=e*6;l[r]=Math.min(t.x,n.x),l[r+1]=Math.max(t.x,n.x),l[r+2]=Math.min(t.y,n.y),l[r+3]=Math.max(t.y,n.y),l[r+4]=(t.t+n.t)/2}let u=[],d=(i.last-i.first)/5;for(let e=0;e<100;e++){let t=o[e],n=o[e+1],i=Math.min(t.x,n.x)-c,a=Math.max(t.x,n.x)+c,s=Math.min(t.y,n.y)-c,f=Math.max(t.y,n.y)+c,p=(t.t+n.t)/2;for(let e=0;e<100;e++){let t=e*6;if(a<l[t]||l[t+1]<i||f<l[t+2]||l[t+3]<s)continue;let n=l[t+4];r&&Math.abs(p-n)<d||u.push({t1:p,t2:n})}}let f=n*n,p=[];for(let{t1:o,t2:s}of u){let c=o,l=s;for(let n=0;n<20;n++){let[n,r]=S(e,c),[o,s]=S(t,l),u=n-o,d=r-s;if(u*u+d*d<f)break;let p=C(e,c),m=C(t,l),h=p[0]*-m[1]- -m[0]*p[1];if(Math.abs(h)<1e-14)break;let g=(-u*-m[1]- -d*-m[0])/h,_=(p[0]*-d-p[1]*-u)/h;c+=g,l+=_,c=Math.max(i.first,Math.min(i.last,c)),l=Math.max(a.first,Math.min(a.last,l))}let[u,d]=S(e,c),[m,h]=S(t,l);if(!(r&&Math.abs(c-l)<(i.last-i.first)*.05)&&(u-m)**2+(d-h)**2<n*n*1e6){let e=(u+m)/2,t=(d+h)/2,r=!1;for(let[i,a]of p)if((i-e)**2+(a-t)**2<n*n*1e4){r=!0;break}r||p.push([e,t])}}return{points:p,segments:[]}}function xe(e){return JSON.stringify(e)}function Se(e){return JSON.parse(e)}function Ce(){return{__bk2d_bbox:!0,xMin:1/0,yMin:1/0,xMax:-1/0,yMax:-1/0}}function we(e,t,n){let r=t.__bk2d===`trimmed`?t.basis:t;if(r.__bk2d===`line`){let n=w(t);if(!isFinite(n.first)||!isFinite(n.last))return;let[r,i]=S(t,n.first),[a,o]=S(t,n.last);e.xMin=Math.min(e.xMin,r,a),e.yMin=Math.min(e.yMin,i,o),e.xMax=Math.max(e.xMax,r,a),e.yMax=Math.max(e.yMax,i,o);return}if(r.__bk2d===`circle`){let n=w(t);if(!isFinite(n.first)||!isFinite(n.last))return;let{cx:i,cy:a,radius:o,sense:s}=r,[c,l]=S(t,n.first),[u,d]=S(t,n.last),f=Math.min(c,u),p=Math.max(c,u),m=Math.min(l,d),h=Math.max(l,d),g=t.__bk2d===`trimmed`?t.tStart:n.first,_=t.__bk2d===`trimmed`?t.tEnd:n.last;for(let e=0;e<4;e++){let t=e*Math.PI/2,n=s?t:-t;for(let e=0;e<=1;e++){let r=n+e*2*Math.PI;if(r>=g-1e-10&&r<=_+1e-10){let e=i+o*Math.cos(t),n=a+o*Math.sin(t);f=Math.min(f,e),p=Math.max(p,e),m=Math.min(m,n),h=Math.max(h,n);break}}}e.xMin=Math.min(e.xMin,f),e.yMin=Math.min(e.yMin,m),e.xMax=Math.max(e.xMax,p),e.yMax=Math.max(e.yMax,h);return}let i=w(t);if(!isFinite(i.first)||!isFinite(i.last))return;let a=(i.last-i.first)/20;for(let n=0;n<=20;n++){let[r,o]=S(t,i.first+n*a);r<e.xMin&&(e.xMin=r),o<e.yMin&&(e.yMin=o),r>e.xMax&&(e.xMax=r),o>e.yMax&&(e.yMax=o)}}function Te(e,t){let n=e.length,r=e.map(([e,t])=>[e,t]);for(let e=1;e<n;e++)for(let i=0;i<n-e;i++){let e=r[i],n=r[i+1];e[0]=(1-t)*e[0]+t*n[0],e[1]=(1-t)*e[1]+t*n[1]}return r[0]}function Ee(e,t){let n=[];for(let t=0;t<e.knots.length;t++){let r=e.multiplicities[t]??1;for(let i=0;i<r;i++)n.push(e.knots[t])}let r=e.degree,i=e.poles.length,a=n.length,o=Math.max(n[r],Math.min(n[a-r-1],t)),s=r;for(let e=r;e<a-r-1;e++)if(o>=n[e]&&o<n[e+1]){s=e;break}o>=n[a-r-1]&&(s=a-r-2);let c=[];for(let t=0;t<=r;t++){let n=Math.min(s-r+t,i-1),a=e.poles[Math.max(0,n)];c.push([a[0],a[1]])}for(let e=1;e<=r;e++)for(let t=r;t>=e;t--){let i=s-r+t,a=n[i]??0,l=(n[i+r-e+1]??1)-a,u=l>1e-15?(o-a)/l:0,d=c[t],f=c[t-1];d[0]=(1-u)*f[0]+u*d[0],d[1]=(1-u)*f[1]+u*d[1]}return c[r]}var De=.001,Oe=.1,ke={nx:0,ny:0,nz:0,ax:0,ay:0,az:0,bx:0,by:0,bz:0,cx:0,cy:0,cz:0};function Ae(e,t,n){let r=(t[n*3]??0)*3,i=(t[n*3+1]??0)*3,a=(t[n*3+2]??0)*3,o=e[r]??0,s=e[r+1]??0,c=e[r+2]??0,l=e[i]??0,u=e[i+1]??0,d=e[i+2]??0,f=e[a]??0,p=e[a+1]??0,m=e[a+2]??0,h=l-o,g=u-s,_=d-c,v=f-o,y=p-s,b=m-c,x=g*b-_*y,S=_*v-h*b,C=h*y-g*v,w=Math.hypot(x,S,C)||1;return x/=w,S/=w,C/=w,ke.nx=x,ke.ny=S,ke.nz=C,ke.ax=o,ke.ay=s,ke.az=c,ke.bx=l,ke.by=u,ke.bz=d,ke.cx=f,ke.cy=p,ke.cz=m,ke}function je(e,t){let n=Math.floor(t.length/3),r=new ArrayBuffer(84+n*50),i=new DataView(r);i.setUint32(80,n,!0);let a=84;for(let r=0;r<n;r++){let n=Ae(e,t,r);i.setFloat32(a,n.nx,!0),i.setFloat32(a+4,n.ny,!0),i.setFloat32(a+8,n.nz,!0),i.setFloat32(a+12,n.ax,!0),i.setFloat32(a+16,n.ay,!0),i.setFloat32(a+20,n.az,!0),i.setFloat32(a+24,n.bx,!0),i.setFloat32(a+28,n.by,!0),i.setFloat32(a+32,n.bz,!0),i.setFloat32(a+36,n.cx,!0),i.setFloat32(a+40,n.cy,!0),i.setFloat32(a+44,n.cz,!0),i.setUint16(a+48,0,!0),a+=50}return r}function Me(e,t){let n=Math.floor(t.length/3),r=[`solid brepjs`];for(let i=0;i<n;i++){let n=Ae(e,t,i);r.push(`facet normal ${n.nx} ${n.ny} ${n.nz}`),r.push(`outer loop`),r.push(`vertex ${n.ax} ${n.ay} ${n.az}`),r.push(`vertex ${n.bx} ${n.by} ${n.bz}`),r.push(`vertex ${n.cx} ${n.cy} ${n.cz}`),r.push(`endloop`),r.push(`endfacet`)}return r.push(`endsolid brepjs`),r.join(`
|
|
2
2
|
`)+`
|
|
3
|
-
`}var Ne=()=>{};function T(e,t){return{__occtWasm:!0,type:e,id:t,delete:Ne,HashCode(e){return t%e},IsNull(){return!1}}}function Pe(e){return typeof e==`object`&&!!e&&e.__occtWasm}function E(e){if(Pe(e))return e.id;if(typeof e==`number`)return e;throw Error(`occt-wasm: expected an OcctWasmHandle or number, got `+typeof e)}function Fe(e){switch(e.toLowerCase()){case`vertex`:return`vertex`;case`edge`:return`edge`;case`wire`:return`wire`;case`face`:return`face`;case`shell`:return`shell`;case`solid`:return`solid`;case`compsolid`:return`compsolid`;case`compound`:return`compound`;default:return`compound`}}function D(e,t){return T(Fe(e.getShapeType(t)),t)}function Ie(e,t){let n=new e.VectorUint32;for(let e of t)n.push_back(e);return n}function Le(e,t){let n=new e.VectorInt;for(let e of t)n.push_back(e);return n}function Re(e,t){let n=new e.VectorDouble;for(let e of t)n.push_back(e);return n}function ze(e){let t=[],n=e.size();for(let r=0;r<n;r++)t.push(e.get(r));return t}function Be(e,t){let n=Array(16).fill(0);for(let r=0;r<4;r++)for(let i=0;i<4;i++)for(let a=0;a<4;a++)n[r*4+i]=n[r*4+i]+e[r*4+a]*t[a*4+i];return n}function Ve(e,t){if(typeof t==`number`)return t;if(Array.isArray(t))return t[0];if(e.length===0)throw Error(`occt-wasm: no edges provided`);let n=t(e[0]);return typeof n==`number`?n:n[0]}function He(e,t,n){let[r,i,a]=n,o=Math.sqrt(r*r+i*i+a*a);if(o<1e-10)return t;let s=r/o,c=i/o,l=a/o;if(Math.abs(l-1)<1e-10)return t;if(Math.abs(l+1)<1e-10)return e.rotate(t,0,0,0,1,0,0,Math.PI);let u=-c,d=s,f=Math.sqrt(u*u+d*d);if(f<1e-10)return t;let p=Math.acos(Math.max(-1,Math.min(1,l)));return e.rotate(t,0,0,0,u/f,d/f,0,p)}function Ue(e,t){return new Proxy(e,{get(e,n,r){let i=Reflect.get(e,n,r);return typeof i==`function`?function(...n){try{return i.apply(e,n)}catch(e){let n=WebAssembly.Exception;if(n&&e instanceof n)try{let[,n]=t.getExceptionMessage(e);throw Error(n,{cause:e})}catch(e){if(e instanceof Error&&!(e instanceof n))throw e}throw e}}:i}})}function We(e,t){let n=function(){return T(`compound`,t.makeNullShape())};return Object.assign(Object.create(e),{TopoDS_Solid:n,TopoDS_Face:n,TopoDS_Shape:n,TopoDS_Wire:n,TopoDS_Edge:n,TopoDS_Vertex:n,TopoDS_Shell:n,TopoDS_Compound:n,gp_Pnt_3:function(e,n,r){return T(`vertex`,t.makeVertex(e,n,r))},BRepBuilderAPI_MakeEdge_3:function(e,n){let r=e,i=n,a=t.vertexPosition(r.id),o=t.vertexPosition(i.id),s=t.makeLineEdge(a.get(0),a.get(1),a.get(2),o.get(0),o.get(1),o.get(2));return a.delete(),o.delete(),{Edge:()=>T(`edge`,s),delete(){}}}})}function Ge(e,t){let n=E(t),r=e.getSubShapes(n,`solid`);try{if(r.size()>1){let t=e.fuseAll(r);return{id:t,dispose:()=>{e.release(t)}}}return{id:n,dispose:()=>{}}}finally{for(let t=0,i=r.size();t<i;t++){let i=r.get(t);i!==n&&e.release(i)}r.delete()}}function Ke(e,t,n,r){return D(e,e.fuse(E(t),E(n)))}function qe(e,t,n,r){let i=Ge(e,n);try{return D(e,e.cut(E(t),i.id))}finally{i.dispose()}}function Je(e,t,n,r){let i=Ge(e,n);try{return D(e,e.intersect(E(t),i.id))}finally{i.dispose()}}function Ye(e,t,n,r){return D(e,e.section(E(t),E(n)))}function Xe(e,t,n,r){let i=Ie(t,n.map(E));try{return D(e,e.fuseAll(i))}finally{i.delete()}}function Ze(e,t,n,r,i){let a=Ie(t,r.map(E));try{return D(e,e.cutAll(E(n),a))}finally{a.delete()}}function Qe(e,t,n,r){let i=Ie(t,r.map(E));try{return D(e,e.split(E(n),i))}finally{i.delete()}}function $e(e,t,n,r){let i=[];return e.isNull(E(t))&&i.push({operand:`base`,issue:`null-shape`,message:`Base shape is null`}),e.isNull(E(n))&&i.push({operand:`tool`,issue:`null-shape`,message:`Tool shape is null`}),i.length===0&&!e.isValid(E(t))&&i.push({operand:`base`,issue:`not-valid`,message:`Base shape is not valid`}),i.length===0&&!e.isValid(E(n))&&i.push({operand:`tool`,issue:`not-valid`,message:`Tool shape is not valid`}),{valid:i.length===0,issues:i}}function et(e,t,n,r,i,a){throw Error(`occt-wasm: meshBoolean is not supported (use brepkit for mesh booleans)`)}function tt(e,t,n){return n!==t&&e.release(t),n}function nt(e,t,n,r){return T(`solid`,e.makeBox(t,n,r))}function rt(e,t,n,r,i){let a=e.makeCylinder(t,n);return i&&(a=tt(e,a,He(e,a,i))),r&&(r[0]!==0||r[1]!==0||r[2]!==0)&&(a=tt(e,a,e.translate(a,r[0],r[1],r[2]))),T(`solid`,a)}function it(e,t,n){let r=e.makeSphere(t);return n&&(n[0]!==0||n[1]!==0||n[2]!==0)&&(r=tt(e,r,e.translate(r,n[0],n[1],n[2]))),T(`solid`,r)}function at(e,t,n,r,i,a){let o=e.makeCone(t,n,r);return a&&(o=tt(e,o,He(e,o,a))),i&&(i[0]!==0||i[1]!==0||i[2]!==0)&&(o=tt(e,o,e.translate(o,i[0],i[1],i[2]))),T(`solid`,o)}function ot(e,t,n,r,i){let a=e.makeTorus(t,n);return i&&(a=tt(e,a,He(e,a,i))),r&&(r[0]!==0||r[1]!==0||r[2]!==0)&&(a=tt(e,a,e.translate(a,r[0],r[1],r[2]))),T(`solid`,a)}function st(e,t,n,r){return T(`solid`,e.makeEllipsoid(t,n,r))}function ct(e,t,n){return T(`solid`,e.makeBoxFromCorners(t[0],t[1],t[2],n[0],n[1],n[2]))}function lt(e,t,n){return T(`face`,e.makeRectangle(t,n))}function ut(e,t,n){let r=e.getSubShapes(E(t),n),i=[];try{let e=r.size();for(let t=0;t<e;t++)i.push(T(n,r.get(t)))}finally{r.delete()}return i}function dt(e,t){return Pe(t)?t.type:Fe(e.getShapeType(E(t)))}function ft(e,t,n){return e.isSame(E(t),E(n))}function pt(e,t,n){return e.isEqual(E(t),E(n))}function mt(e,t,n){return n?T(n,e.downcast(E(t),n)):t}function ht(e,t){return D(e,e.copy(E(t)))}function gt(e,t,n){return e.hashCode(E(t),n)}function _t(e,t){return e.isNull(E(t))}function vt(e,t){return e.shapeOrientation(E(t)).toLowerCase()}function yt(e,n){let r=e.edgeToFaceMap(E(n),1e6),i;try{i=ze(r)}finally{r.delete()}let a={};for(let e=0;e+1<i.length;e+=2){let n=t(i,e),r=t(i,e+1);a[n]||(a[n]=[]),a[n].push(r)}return JSON.stringify(a)}function bt(e,t,n){return e.subShapeCount(E(t),n)}function xt(e,t,n,r){let i=e.subShapeHashes(E(t),n,r);try{return ze(i)}finally{i.delete()}}function St(e,t,n){let r=e.sharedEdges(E(t),E(n)),i=[];try{let e=r.size();for(let t=0;t<e;t++)i.push(T(`edge`,r.get(t)))}finally{r.delete()}return i}function Ct(e,t,n){let r=e.adjacentFaces(E(t),E(n)),i=[];try{let e=r.size();for(let t=0;t<e;t++)i.push(T(`face`,r.get(t)))}finally{r.delete()}return i}function wt(e,t,n,r){let i=Ie(t,n.map(E));try{return D(e,e.sew(i,r??1e-6))}finally{i.delete()}}var Tt=1e-6;function Et(e,t){return e.isValid(E(t))}function Dt(e,t){let n=e.healSolid(E(t),Tt);return n===0?null:D(e,n)}function Ot(e,t){return D(e,e.healFace(E(t),Tt))}function kt(e,t,n){return D(e,e.healWire(E(t),Tt))}function At(e,t,n){return 0}function jt(e,t,n){return e.removeDegenerateEdges(E(t)),0}function Mt(e,t){return e.fixFaceOrientations(E(t)),0}function Nt(e,t){return D(e,e.fixShape(E(t)))}function Pt(e,t,n,r){let i=e.tessellate(E(n),r.tolerance,r.angularTolerance);try{let e=i.positionCount,n=i.normalCount,a=i.indexCount,o=i.getPositionsPtr()>>2,s=i.getNormalsPtr()>>2,c=i.getIndicesPtr()>>2,l=new Float32Array(e);for(let n=0;n<e;n++)l[n]=t.HEAPF32[o+n]??0;let u=new Float32Array(n);if(!r.skipNormals)for(let e=0;e<n;e++)u[e]=t.HEAPF32[s+e]??0;let d=i.uvCount,f=new Float32Array(r.includeUVs?d:0);if(r.includeUVs&&d>0){let e=i.getUvsPtr()>>2;for(let n=0;n<d;n++)f[n]=t.HEAPF32[e+n]??0}let p=new Uint32Array(a);for(let e=0;e<a;e++)p[e]=t.HEAPU32[c+e]??0;let m=[],h=i.faceGroupCount;if(h>0){let e=i.getFaceGroupsPtr()>>2;for(let n=0;n<h;n+=3)m.push({start:t.HEAP32[e+n]??0,count:t.HEAP32[e+n+1]??0,faceHash:t.HEAP32[e+n+2]??0})}return{vertices:l,normals:r.skipNormals?new Float32Array:u,triangles:p,uvs:f,faceGroups:m}}finally{i.delete()}}function Ft(e,t,n,r){for(let i=0;i+1<n;i++){let n=t+i*3,a=e[n]??0,o=e[n+1]??0,s=e[n+2]??0,c=e[n+3]??0,l=e[n+4]??0,u=e[n+5]??0;a===c&&o===l&&s===u||r.push(a,o,s,c,l,u)}}function It(e,t,n,r,i){let a=e.wireframe(E(n),r);try{let e=t.HEAPF32,n=a.getPointsPtr()>>2,r=[],i=[],o=a.edgeGroupCount,s=o>0?a.getEdgeGroupsPtr()>>2:0;for(let a=0;a<o;a+=3){let o=n+(t.HEAP32[s+a]??0),c=Math.floor((t.HEAP32[s+a+1]??0)/3),l=r.length/3;Ft(e,o,c,r),i.push({start:l,count:r.length/3-l,edgeHash:t.HEAP32[s+a+2]??0})}return{lines:new Float32Array(r),edgeGroups:i}}finally{a.delete()}}function Lt(e,t){return e.hasTriangulation(E(t))}function Rt(e,t,n,r){e.meshShape(E(t),n,r).delete()}var zt={line:`LINE`,circle:`CIRCLE`,ellipse:`ELLIPSE`,hyperbola:`HYPERBOLA`,parabola:`PARABOLA`,bezier:`BEZIER_CURVE`,bspline:`BSPLINE_CURVE`,offset:`OFFSET_CURVE`,other:`OTHER_CURVE`};function Bt(e,t){let n=e.curveType(E(t));return zt[n]??n.toUpperCase()}function Vt(e,t){let n=e.curveParameters(E(t));try{return[n.get(0),n.get(1)]}finally{n.delete()}}function Ht(e,t,n){let r=e.curvePointAtParam(E(t),n);try{return[r.get(0),r.get(1),r.get(2)]}finally{r.delete()}}function Ut(e,t,n){let r=e.curveTangent(E(t),n);try{let i=e.curvePointAtParam(E(t),n);try{return{point:[i.get(0),i.get(1),i.get(2)],tangent:[r.get(0),r.get(1),r.get(2)]}}finally{i.delete()}}finally{r.delete()}}function Wt(e,t){return e.curveIsClosed(E(t))}function Gt(e,t){return e.curveIsPeriodic(E(t))}function Kt(e,t){return 2*Math.PI}function qt(e,t,n,r){let i=[];for(let e of n)i.push(e[0],e[1],e[2]);let a=Re(t,i);try{return T(`edge`,e.interpolatePoints(a,r?.periodic??!1))}finally{a.delete()}}function Jt(e,t,n,r){let i=[];for(let e of n)i.push(e[0],e[1],e[2]);let a=Re(t,i);try{return T(`edge`,e.approximatePoints(a,r?.tolerance??.001))}finally{a.delete()}}function Yt(e,t,n){return T(`edge`,e.curveDegreeElevate(E(t),n))}function Xt(e,t,n,r){return T(`edge`,e.curveKnotInsert(E(t),n,r))}function Zt(e,t,n,r){return T(`edge`,e.curveKnotRemove(E(t),n,r))}function Qt(e,t,n){let r=e.curveSplit(E(t),n);try{return[T(`edge`,r.get(0)),T(`edge`,r.get(1))]}finally{r.delete()}}function $t(e,t){let n=en(e,t);if(!n||n.poles.length<2)return null;let r=n.poles[n.poles.length-2];return r?[r[0],r[1],r[2]]:null}function en(e,t){try{let n=e.getNurbsCurveData(E(t));try{let e=n.poles.size()/3,t=[];for(let r=0;r<e;r++)t.push([n.poles.get(r*3),n.poles.get(r*3+1),n.poles.get(r*3+2)]);let r=[];for(let e=0;e<n.knots.size();e++)r.push(n.knots.get(e));let i=[];for(let e=0;e<n.multiplicities.size();e++)i.push(n.multiplicities.get(e));let a=[];if(n.rational)for(let e=0;e<n.weights.size();e++)a.push(n.weights.get(e));else for(let t=0;t<e;t++)a.push(1);return{degree:n.degree,poles:t,weights:a,knots:r,multiplicities:i,isPeriodic:n.periodic,isRational:n.rational}}finally{n.delete()}}catch{return null}}function tn(e,t){let n=e.vertexPosition(E(t));try{return[n.get(0),n.get(1),n.get(2)]}finally{n.delete()}}function nn(e,t){return e.surfaceType(E(t)).toLowerCase()}function rn(e,t){let n=e.uvBounds(E(t));try{return{uMin:n.get(0),uMax:n.get(1),vMin:n.get(2),vMax:n.get(3)}}finally{n.delete()}}function an(e,t){return T(`wire`,e.outerWire(E(t)))}function on(e,t){return T(`face`,e.reverseSurfaceU(E(t)))}function sn(e,t,n,r){let i=e.surfaceNormal(E(t),n,r);try{return[i.get(0),i.get(1),i.get(2)]}finally{i.delete()}}function cn(e,t,n,r){let i=e.pointOnSurface(E(t),n,r);try{return[i.get(0),i.get(1),i.get(2)]}finally{i.delete()}}var ln=(e,t)=>[e[0]-t[0],e[1]-t[1],e[2]-t[2]],un=(e,t)=>e[0]*t[0]+e[1]*t[1]+e[2]*t[2],dn=e=>Math.hypot(e[0],e[1],e[2]),fn=(e,t)=>[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 pn(e,t){if(nn(e,t)!==`cylinder`)return null;let n=rn(e,t),r=.5*(n.vMin+n.vMax),i=n.uMin+.25*(n.uMax-n.uMin),a=n.uMin+.5*(n.uMax-n.uMin),o=sn(e,t,i,r),s=sn(e,t,a,r),c=cn(e,t,i,r),l=cn(e,t,a,r),u=fn(o,s),d=dn(u),f=dn(ln(o,s));if(d<1e-9||f<1e-9)return null;let p=[u[0]/d,u[1]/d,u[2]/d],m=dn(ln(c,l))/f,h=[c[0]-m*o[0],c[1]-m*o[1],c[2]-m*o[2]],g=dn(ln(h,[l[0]-m*s[0],l[1]-m*s[1],l[2]-m*s[2]]))<1e-6?h:[c[0]+m*o[0],c[1]+m*o[1],c[2]+m*o[2]];return{origin:g,direction:p,radius:m,isDirect:(vt(e,t)===`reversed`?-1:1)*un(o,ln(c,g))>0}}function mn(e,t,n){let r=ln(t,e),i=ln(n,e),a=fn(r,i),o=un(a,a);if(o<1e-18)return null;let s=un(r,r),c=un(i,i),l=fn([s*i[0]-c*r[0],s*i[1]-c*r[1],s*i[2]-c*r[2]],a),u=1/(2*o);return[e[0]+l[0]*u,e[1]+l[1]*u,e[2]+l[2]*u]}function hn(e,t,n,r,i){return mn(cn(e,t,n+.1*(r-n),i),cn(e,t,n+.45*(r-n),i),cn(e,t,n+.8*(r-n),i))}function gn(e,t){let n=rn(e,t),r=[.2,.5,.8].map(r=>hn(e,t,n.uMin,n.uMax,n.vMin+r*(n.vMax-n.vMin))).filter(e=>e!==null);if(r.length<2)return null;let i=null,a=1e-9;for(let e=0;e<r.length;e++)for(let t=e+1;t<r.length;t++){let n=r[e],o=r[t];if(!n||!o)continue;let s=ln(o,n),c=dn(s);c>a&&(a=c,i={origin:n,direction:[s[0]/c,s[1]/c,s[2]/c]})}return i}function _n(e,t){let n=nn(e,t);if(n===`cylinder`){let n=pn(e,t);return n?{origin:n.origin,direction:n.direction}:null}return n===`cone`||n===`torus`||n===`revolution`?gn(e,t):null}function vn(e,t){let n=e.getFaceCylinderData(E(t));try{return n.size()<2?null:{radius:n.get(0),isDirect:n.get(1)===1}}finally{n.delete()}}function yn(e,t,n){let r=e.uvFromPoint(E(t),n[0],n[1],n[2]);try{return r.size()<2?null:[r.get(0),r.get(1)]}finally{r.delete()}}function bn(e,t,n){let r=e.projectPointOnFace(E(t),n[0],n[1],n[2]);try{return[r.get(0),r.get(1),r.get(2)]}finally{r.delete()}}function xn(e,t,n,r,i){return e.classifyPointOnFace(E(t),n,r).toLowerCase()}function Sn(e,t,n,r,i,a){let[o,s,c]=r,[l,u,d]=i,f=!!a,[p,m,h]=a??[1,0,0],g=e.projectEdges(E(n),o,s,c,l,u,d,p,m,h,f),_=n=>n===0?T(`compound`,e.makeCompound(new t.VectorUint32)):T(`compound`,n);return{visible:{outline:_(g.visibleOutline),smooth:_(g.visibleSmooth),sharp:_(g.visibleSharp)},hidden:{outline:_(g.hiddenOutline),smooth:_(g.hiddenSmooth),sharp:_(g.hiddenSharp)}}}function Cn(e,t){return e.getVolume(E(t))}function wn(e,t){return e.getSurfaceArea(E(t))}function Tn(e,t){return e.getLength(E(t))}function En(e,t){let n=e.getCenterOfMass(E(t));try{return[n.get(0),n.get(1),n.get(2)]}finally{n.delete()}}function Dn(e,t){let n=e.getLinearCenterOfMass(E(t));try{return[n.get(0),n.get(1),n.get(2)]}finally{n.delete()}}function On(e,t){let n=e.getBoundingBox(E(t),!0);return{min:[n.xmin,n.ymin,n.zmin],max:[n.xmax,n.ymax,n.zmax]}}function kn(e,t){try{let n=e.getSurfaceCenterOfMass(E(t));try{return[n.get(0),n.get(1),n.get(2)]}finally{n.delete()}}catch{return[0,0,0]}}function An(e,t,n){return{volume:Cn(e,t),area:wn(e,t),length:n?Tn(e,t):0,centerOfMass:En(e,t),boundingBox:On(e,t)}}function jn(e,t){let n=E(t);return{distanceTo(t){return{value:e.distanceBetween(n,E(t)),point1:[0,0,0],point2:[0,0,0]}},dispose:Ne}}var Mn=256;function Nn(e,t,n){let r=[],i=e.getSubShapes(n,`vertex`);try{let t=i.size();for(let n=0;n<t;n++){let t=e.vertexPosition(i.get(n));r.push([t.get(0),t.get(1),t.get(2)]),t.delete()}}finally{i.delete()}let a=e.getBoundingBox(n,!0),o=Math.sqrt((a.xmax-a.xmin)**2+(a.ymax-a.ymin)**2+(a.zmax-a.zmin)**2),s=Math.max(o*.01,1e-4),c;try{c=e.tessellate(n,s,.5)}catch{return r}try{let e=c.positionCount;if(e>0){let n=c.getPositionsPtr()>>2,i=t.HEAPF32,a=Math.floor(e/3),o=(a>Mn?Math.ceil(a/Mn):1)*3;for(let t=0;t<e;t+=o)r.push([i[n+t]??0,i[n+t+1]??0,i[n+t+2]??0])}}finally{c.delete()}return r}function Pn(e,t,n,r){let i=E(n),a=E(r),o=e.distanceBetween(i,a),s=Nn(e,t,i),c=Nn(e,t,a);if(s.length===0||c.length===0)return{value:o,point1:[0,0,0],point2:[0,0,0]};let l=1/0,u=s[0]??[0,0,0],d=c[0]??[0,0,0];for(let e of s)for(let t of c){let n=t[0]-e[0],r=t[1]-e[1],i=t[2]-e[2],a=n*n+r*r+i*i;a<l&&(l=a,u=e,d=t)}return{value:o,point1:u,point2:d}}function Fn(e,t,n,r){let i=e.pointOnSurface(t,n,r),a=[i.get(0),i.get(1),i.get(2)];return i.delete(),a}function In(e,t,n,r){let i=e.uvBounds(t),a=i.get(0),o=i.get(1),s=i.get(2),c=i.get(3);i.delete();let l=Math.max(Math.max(o-a,1e-12)*.001,1e-6),u=Math.max(Math.max(c-s,1e-12)*.001,1e-6),d=Math.min(Math.max(n,a+l),o-l),f=Math.min(Math.max(r,s+u),c-u),p=Fn(e,t,d,f),m=Fn(e,t,d+l,f),h=Fn(e,t,d-l,f),g=Fn(e,t,d,f+u),_=Fn(e,t,d,f-u),v=Fn(e,t,d+l,f+u),y=Fn(e,t,d+l,f-u),b=Fn(e,t,d-l,f+u),x=Fn(e,t,d-l,f-u),S=l*l,C=u*u,w=4*l*u;return{Pu:[(m[0]-h[0])/(2*l),(m[1]-h[1])/(2*l),(m[2]-h[2])/(2*l)],Pv:[(g[0]-_[0])/(2*u),(g[1]-_[1])/(2*u),(g[2]-_[2])/(2*u)],Puu:[(m[0]-2*p[0]+h[0])/S,(m[1]-2*p[1]+h[1])/S,(m[2]-2*p[2]+h[2])/S],Pvv:[(g[0]-2*p[0]+_[0])/C,(g[1]-2*p[1]+_[1])/C,(g[2]-2*p[2]+_[2])/C],Puv:[(v[0]-y[0]-b[0]+x[0])/w,(v[1]-y[1]-b[1]+x[1])/w,(v[2]-y[2]-b[2]+x[2])/w]}}function Ln(e,t,n,r){return Math.abs(e)+Math.abs(t)>=Math.abs(n)+Math.abs(r)?Math.abs(e)+Math.abs(t)<1e-12?[1,0]:[-t,e]:Math.abs(n)+Math.abs(r)<1e-12?[0,1]:[-r,n]}function Rn(e,t,n){let r=e[0]*t[0]+e[1]*n[0],i=e[0]*t[1]+e[1]*n[1],a=e[0]*t[2]+e[1]*n[2],o=Math.sqrt(r*r+i*i+a*a);return o<1e-12?[1,0,0]:[r/o,i/o,a/o]}function zn(e,t){let n=Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]);if(n<1e-12)return{maxDirection:[1,0,0],minDirection:[0,1,0]};let r=e[0]/n,i=e[1]/n,a=e[2]/n,o=r*t[0]+i*t[1]+a*t[2],s=t[0]-o*r,c=t[1]-o*i,l=t[2]-o*a,u=Math.sqrt(s*s+c*c+l*l);if(u<1e-12){let e=Math.abs(r)<.9?[1,0,0]:[0,1,0],t=i*e[2]-a*e[1],n=a*e[0]-r*e[2],o=r*e[1]-i*e[0],s=Math.sqrt(t*t+n*n+o*o)||1;return{maxDirection:[r,i,a],minDirection:[t/s,n/s,o/s]}}return{maxDirection:[r,i,a],minDirection:[s/u,c/u,l/u]}}function Bn(e,t,n,r,i,a){let{Pu:o,Pv:s,Puu:c,Pvv:l,Puv:u}=In(e,t,n,r),d=o[1]*s[2]-o[2]*s[1],f=o[2]*s[0]-o[0]*s[2],p=o[0]*s[1]-o[1]*s[0],m=Math.sqrt(d*d+f*f+p*p),h=o[0]*o[0]+o[1]*o[1]+o[2]*o[2],g=o[0]*s[0]+o[1]*s[1]+o[2]*s[2],_=s[0]*s[0]+s[1]*s[1]+s[2]*s[2];if(m<1e-12||h*_-g*g<1e-24)return zn(o,s);let v=(c[0]*d+c[1]*f+c[2]*p)/m,y=(u[0]*d+u[1]*f+u[2]*p)/m,b=(l[0]*d+l[1]*f+l[2]*p)/m,x=h*_-g*g,S=(v*_-y*g)/x,C=(y*_-b*g)/x,w=(y*h-v*g)/x,ee=(b*h-y*g)/x;if(Math.abs(i-a)<1e-9*(Math.abs(i)+Math.abs(a)+1))return zn(o,s);let te=Ln(S-i,C,w,ee-i),ne=Ln(S-a,C,w,ee-a);return{maxDirection:Rn(te,o,s),minDirection:Rn(ne,o,s)}}function Vn(e,t,n,r){let i=E(t),a=e.surfaceCurvature(i,n,r),o=a.get(0),s=a.get(1),c=a.get(2),l=a.get(3);a.delete();let{maxDirection:u,minDirection:d}=Bn(e,i,n,r,c,l);return{gaussian:s,mean:o,max:c,min:l,maxDirection:u,minDirection:d}}var Hn=2147483647;function Un(e,t,n,r,i){let a=Ve(r,i),o=Ie(t,r.map(E));try{return D(e,e.fillet(E(n),o,a))}finally{o.delete()}}function Wn(e,t,n,r,i){let a=Ve(r,i),o=Ie(t,r.map(E));try{return D(e,e.chamfer(E(n),o,a))}finally{o.delete()}}function Gn(e,t,n,r,i,a){let o=Ie(t,r.map(E));try{return D(e,e.chamferDistAngle(E(n),o,i,a))}finally{o.delete()}}function Kn(e,t,n,r,i,a){let o=Ie(t,r.map(E));try{return D(e,e.shell(E(n),o,i,a??.001))}finally{o.delete()}}function qn(e,t,n){return D(e,e.thicken(E(t),n,.001))}function Jn(e,t,n,r){return D(e,e.offset(E(t),n,r??1e-6))}function Yn(e,t,n,r,i){let a=e.filletVariable(t,n,r,i),o=!0;try{let t=e.getSubShapes(a,`solid`);try{let n=t.size()===1?t.get(0):-1;for(let r=0,i=t.size();r<i;r++){let i=t.get(r);i!==n&&e.release(i)}return n===-1?(o=!1,D(e,a)):D(e,n)}finally{t.delete()}}finally{o&&e.release(a)}}function Xn(e,t,n){let r=JSON.parse(n);if(r.edgeId!==void 0&&r.startRadius!==void 0&&r.endRadius!==void 0)return Yn(e,E(t),r.edgeId,r.startRadius,r.endRadius);if(r.edge!==void 0&&Array.isArray(r.radii)&&r.radii.length>0){let n=r.radii;if(n.length>2)throw new c(`occt-wasm: filletVariable supports only a linear (<=2-point) radius profile; a multi-point variable radius requires the brepkit kernel`);let i=n[0].radius,a=n[n.length-1].radius,o=E(t),s=e.getSubShapes(o,`edge`),l=-1;try{for(let t=0,n=s.size();t<n;t++){let n=s.get(t);if(e.hashCode(n,Hn)===r.edge){l=n;break}}}finally{for(let t=0,n=s.size();t<n;t++){let n=s.get(t);n!==l&&e.release(n)}s.delete()}if(l===-1)throw new c(`occt-wasm: filletVariable: target edge not found on the shape`);try{return Yn(e,o,l,i,a)}finally{e.release(l)}}throw new c(`occt-wasm: filletVariable: unrecognized spec`)}function Zn(e,t,n,r,i,a){let o=E(t);for(let t of n){let n=(typeof a==`function`?a(t):a)*Math.PI/180;o=e.draft(o,E(t),n,r[0],r[1],r[2])}return D(e,o)}function Qn(e,t,n,r){let i=Ie(t,r.map(E));try{return D(e,e.defeature(E(n),i,.001))}finally{i.delete()}}function $n(e,t,n,r){let i=0;return r===`intersection`||r===1?i=1:r===`tangent`||r===2?i=2:typeof r==`number`&&(i=r),D(e,e.offsetWire2D(E(t),n,i))}function er(e,t){return D(e,e.simplify(E(t)))}function tr(e,t){return D(e,e.reverseShape(E(t)))}function nr(e,t,n,r){let i=n[0]*r,a=n[1]*r,o=n[2]*r;return D(e,e.extrude(E(t),i,a,o))}function rr(e,t,n,r){let i=n.origin,a=n.direction;return D(e,e.revolve(E(t),i.x,i.y,i.z,a.x,a.y,a.z,r))}function ir(e,t,n,r,i,a){let o=i?E(i):0,s=a?E(a):0,c=Ie(t,n.map(E));try{return o||s?D(e,e.loftWithVertices(c,!0,r??!1,o,s)):D(e,e.loft(c,!0,r??!1))}finally{c.delete()}}function ar(e,t,n,r){let i=r?.transitionMode??0;return D(e,e.sweep(E(t),E(n),i))}function or(e,t,n){return D(e,e.simplePipe(E(t),E(n)))}function sr(e,t,n,r){let i=r?.frenet??!1,a=r?.transitionMode===`round`,o=r?.shellMode??!1,s=D(e,e.sweepPipeShell(E(t),E(n),i,a));if(o){let t=e.getSubShapes(E(s),`wire`);try{return{shape:s,firstShape:t.size()>0?D(e,t.get(0)):s,lastShape:t.size()>1?D(e,t.get(t.size()-1)):s}}finally{t.delete()}}return s}function cr(e,t,n,r){let i=r?.solid??!0,a=r?.ruled??!1,o=r?.startVertex?E(r.startVertex):0,s=r?.endVertex?E(r.endVertex):0,c=Ie(t,n.map(E));try{return o||s?D(e,e.loftWithVertices(c,i,a,o,s)):D(e,e.loft(c,i,a))}finally{c.delete()}}function lr(e,t,n,r){let i={__occtWasmLaw:!0,profile:t,length:n,endFactor:r,Trim(e,t,n){return{...i,trimFirst:e,trimLast:t}},delete(){}};return i}function ur(e,t,n,r,i){return D(e,e.revolveVec(E(t),n[0],n[1],n[2],r[0],r[1],r[2],i))}function dr(e,t,n,r,i,a,o){let s=i??10;return D(e,e.draftPrism(E(t),0,0,s,a))}function fr(e){let t=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];for(let n of e)if(n.type===`translate`)t=Be([1,0,0,n.x,0,1,0,n.y,0,0,1,n.z,0,0,0,1],t);else{let e=n.axis??[0,0,1],r=n.center??[0,0,0],i=n.angle*Math.PI/180,a=Math.cos(i),o=Math.sin(i),s=1-a,c=Math.sqrt(e[0]**2+e[1]**2+e[2]**2),[l,u,d]=[e[0]/c,e[1]/c,e[2]/c],f=s*l*l+a,p=s*l*u-o*d,m=s*l*d+o*u,h=s*u*l+o*d,g=s*u*u+a,_=s*u*d-o*l,v=s*d*l-o*u,y=s*d*u+o*l,b=s*d*d+a;t=Be([f,p,m,r[0]-(f*r[0]+p*r[1]+m*r[2]),h,g,_,r[1]-(h*r[0]+g*r[1]+_*r[2]),v,y,b,r[2]-(v*r[0]+y*r[1]+b*r[2]),0,0,0,1],t)}return{handle:{__type:`transform_matrix`,matrix:t,delete:Ne},dispose:Ne}}function pr(e){let t=e,n;return Array.isArray(t)?n=t:typeof t==`object`&&t&&(Array.isArray(t.matrix)?n=t.matrix:Array.isArray(t.elements)&&(n=t.elements)),n&&n.length===16&&(n=n.slice(0,12)),n&&n.length>=12?n:void 0}function mr(e,t,n,r){let i=pr(r);if(i){let r=Re(t,i);try{return D(e,e.transform(E(n),r))}finally{r.delete()}}return T(e.getShapeType(E(n)),e.copy(E(n)))}function hr(e,t,n,r){if(typeof e.located==`function`){let i=pr(r);if(i){let r=Re(t,i);try{return D(e,e.located(E(n),r))}finally{r.delete()}}}return mr(e,t,n,r)}function gr(e,t,n,r,i){return D(e,e.translate(E(t),n,r,i))}function _r(e,t,n,r,i){let a=r??[0,0,1],o=i??[0,0,0];return D(e,e.rotate(E(t),o[0],o[1],o[2],a[0],a[1],a[2],n))}function vr(e,t,n,r){return D(e,e.mirror(E(t),n[0],n[1],n[2],r[0],r[1],r[2]))}function yr(e,t,n,r){return D(e,e.scale(E(t),n[0],n[1],n[2],r))}function br(e,t,n,r,i,a){let o=Re(t,[r[0],r[1],r[2],i[0],r[3],r[4],r[5],i[1],r[6],r[7],r[8],i[2]]);try{return D(e,e.generalTransform(E(n),o))}finally{o.delete()}}function xr(e,t,n,r,i){let a=e.curvePointAtParam(E(r),i),[o,s,c]=(()=>{try{return[a.get(0),a.get(1),a.get(2)]}finally{a.delete()}})(),l=e.curveTangent(E(r),i),[u,d,f]=(()=>{try{return[l.get(0),l.get(1),l.get(2)]}finally{l.delete()}})(),p,m,h;Math.abs(u)<.9?(p=0,m=f,h=-d):(p=-f,m=0,h=u);let g=Math.sqrt(p*p+m*m+h*h);p/=g,m/=g,h/=g;let _=d*h-f*m,v=f*p-u*h,y=u*m-d*p,b=new t.VectorDouble;b.push_back(p),b.push_back(_),b.push_back(u),b.push_back(o),b.push_back(m),b.push_back(v),b.push_back(d),b.push_back(s),b.push_back(h),b.push_back(y),b.push_back(f),b.push_back(c);try{return D(e,e.transform(E(n),b))}finally{b.delete()}}function Sr(e,t,n,r,i){let a=e.linearPattern(E(t),n[0],n[1],n[2],r,i),o=e.getSubShapes(a,`solid`),s=[];try{let e=o.size();for(let t=0;t<e;t++)s.push(T(`solid`,o.get(t)))}finally{o.delete()}if(s.length===0){let t=e.iterShapes(a);try{let n=t.size();for(let r=0;r<n;r++)s.push(D(e,t.get(r)))}finally{t.delete()}}return e.release(a),s}function Cr(e,t,n,r,i,a){let o=e.circularPattern(E(t),n[0],n[1],n[2],r[0],r[1],r[2],i,a),s=e.getSubShapes(o,`solid`),c=[];try{let e=s.size();for(let t=0;t<e;t++)c.push(T(`solid`,s.get(t)))}finally{s.delete()}if(c.length===0){let t=e.iterShapes(o);try{let n=t.size();for(let r=0;r<n;r++)c.push(D(e,t.get(r)))}finally{t.delete()}}return e.release(o),c}function wr(e,t){return t.map(t=>{switch(t.type){case`translate`:return gr(e,t.shape,t.x,t.y,t.z);case`rotate`:return _r(e,t.shape,t.angle,t.axis,t.center);case`scale`:return yr(e,t.shape,t.center,t.factor);case`mirror`:return vr(e,t.shape,t.origin,t.normal);default:throw Error(`occt-wasm: transformBatch unknown type`)}})}function Tr(e,t){if(t===0)return{min:[0,0,0],max:[0,0,0]};let n=1/0,r=1/0,i=1/0,a=-1/0,o=-1/0,s=-1/0;for(let c=0;c<t;c++){let t=c*3,l=e[t]??0,u=e[t+1]??0,d=e[t+2]??0;l<n&&(n=l),u<r&&(r=u),d<i&&(i=d),l>a&&(a=l),u>o&&(o=u),d>s&&(s=d)}return{min:[n,r,i],max:[a,o,s]}}function Er(e,t,n,r,i,a,o,s){return{asset:{version:`2.0`,generator:`brepjs occt-wasm`},scene:0,scenes:[{nodes:[0]}],nodes:[{mesh:0}],meshes:[{primitives:[{attributes:{POSITION:0,NORMAL:1},indices:2,mode:4}]}],buffers:[{byteLength:o}],bufferViews:[{buffer:0,byteOffset:0,byteLength:r,target:34962},{buffer:0,byteOffset:r,byteLength:i,target:34962},{buffer:0,byteOffset:r+i,byteLength:a,target:34963}],accessors:[{bufferView:0,componentType:5126,count:e,type:`VEC3`,min:s.min,max:s.max},{bufferView:1,componentType:5126,count:t,type:`VEC3`},{bufferView:2,componentType:5125,count:n,type:`SCALAR`}]}}function Dr(e,t,n){if(n.length===1)return e.exportStep(E(n[0]));let r=t(n);return e.exportStep(E(r))}function Or(e,t,n,r=De,i=Oe){let{vertices:a,triangles:o}=e(t,{tolerance:r,angularTolerance:i,skipNormals:!0});return n?je(a,o):Me(a,o)}function kr(e,t){let n=typeof t==`string`?t:new TextDecoder().decode(t);return[D(e,e.importStep(n))]}function Ar(e,t,n){let r=typeof n==`string`?new TextEncoder().encode(n):new Uint8Array(n),i=t;if(i.FS)i.FS.writeFile(`/tmp/import.stl`,r);else{let t=Array.from(r,e=>String.fromCharCode(e)).join(``);return D(e,e.importStl(t))}return D(e,e.importStl(``))}function jr(e,t,n){if(n.length===1)return e.exportIges(E(n[0]));let r=t(n);return e.exportIges(E(r))}function Mr(e,t){let n=typeof t==`string`?t:new TextDecoder().decode(t);return[D(e,e.importIges(n))]}function Nr(e,t,n,r){if(n.length===0)return``;let i=zr(e,t,n);try{return Br(e,i)}finally{i.delete()}}function Pr(e,t,n){let r=e(t,{tolerance:n,angularTolerance:.5,skipNormals:!1}),i=r.vertices,a=r.normals,o=r.triangles,s=i.length/3,c=a.length/3,l=o.length,u=i.byteLength,d=a.byteLength,f=o.byteLength,p=u+d+f,m=p+(4-p%4)%4,h=Er(s,c,l,u,d,f,m,Tr(i,s)),g=new TextEncoder().encode(JSON.stringify(h)),_=g.byteLength+(4-g.byteLength%4)%4,v=20+_+8+m,y=new ArrayBuffer(v),b=new DataView(y);b.setUint32(0,1179937895,!0),b.setUint32(4,2,!0),b.setUint32(8,v,!0),b.setUint32(12,_,!0),b.setUint32(16,1313821514,!0);let x=new Uint8Array(y,20,_);x.set(g);for(let e=g.byteLength;e<_;e++)x[e]=32;let S=20+_;b.setUint32(S,m,!0),b.setUint32(S+4,5130562,!0);let C=S+8;return new Uint8Array(y,C,u).set(new Uint8Array(i.buffer,i.byteOffset,u)),new Uint8Array(y,C+u,d).set(new Uint8Array(a.buffer,a.byteOffset,d)),new Uint8Array(y,C+u+d,f).set(new Uint8Array(o.buffer,o.byteOffset,f)),y}function Fr(e,t,n){let r=e(t,{tolerance:n,angularTolerance:.5,skipNormals:!1}),i=r.vertices,a=r.normals,o=r.triangles,s=[`# brepjs OBJ export`],c=i.length/3;for(let e=0;e<c;e++){let t=e*3;s.push(`v ${i[t]??0} ${i[t+1]??0} ${i[t+2]??0}`)}let l=a.length/3;for(let e=0;e<l;e++){let t=e*3;s.push(`vn ${a[t]??0} ${a[t+1]??0} ${a[t+2]??0}`)}let u=e=>{let t=(o[e]??0)+1,n=(o[e+1]??0)+1,r=(o[e+2]??0)+1;s.push(`f ${t}//${t} ${n}//${n} ${r}//${r}`)};if(r.faceGroups.length>0)for(let e of r.faceGroups){s.push(`g face_${e.faceHash}`);let t=e.count/3;for(let n=0;n<t;n++)u(e.start+n*3)}else{let e=o.length/3;for(let t=0;t<e;t++)u(t*3)}return new TextEncoder().encode(s.join(`
|
|
3
|
+
`}var Ne=()=>{};function T(e,t){return{__occtWasm:!0,type:e,id:t,delete:Ne,HashCode(e){return t%e},IsNull(){return!1}}}function Pe(e){return typeof e==`object`&&!!e&&e.__occtWasm}function E(e){if(Pe(e))return e.id;if(typeof e==`number`)return e;throw Error(`occt-wasm: expected an OcctWasmHandle or number, got `+typeof e)}function Fe(e){switch(e.toLowerCase()){case`vertex`:return`vertex`;case`edge`:return`edge`;case`wire`:return`wire`;case`face`:return`face`;case`shell`:return`shell`;case`solid`:return`solid`;case`compsolid`:return`compsolid`;case`compound`:return`compound`;default:return`compound`}}function D(e,t){return T(Fe(e.getShapeType(t)),t)}function Ie(e,t){let n=new e.VectorUint32;for(let e of t)n.push_back(e);return n}function Le(e,t){let n=new e.VectorInt;for(let e of t)n.push_back(e);return n}function Re(e,t){let n=new e.VectorDouble;for(let e of t)n.push_back(e);return n}function ze(e){let t=[],n=e.size();for(let r=0;r<n;r++)t.push(e.get(r));return t}function Be(e,t){let n=Array(16).fill(0);for(let r=0;r<4;r++)for(let i=0;i<4;i++)for(let a=0;a<4;a++)n[r*4+i]=n[r*4+i]+e[r*4+a]*t[a*4+i];return n}function Ve(e,t){if(typeof t==`number`)return t;if(Array.isArray(t))return t[0];if(e.length===0)throw Error(`occt-wasm: no edges provided`);let n=t(e[0]);return typeof n==`number`?n:n[0]}function He(e,t,n){let[r,i,a]=n,o=Math.sqrt(r*r+i*i+a*a);if(o<1e-10)return t;let s=r/o,c=i/o,l=a/o;if(Math.abs(l-1)<1e-10)return t;if(Math.abs(l+1)<1e-10)return e.rotate(t,0,0,0,1,0,0,Math.PI);let u=-c,d=s,f=Math.sqrt(u*u+d*d);if(f<1e-10)return t;let p=Math.acos(Math.max(-1,Math.min(1,l)));return e.rotate(t,0,0,0,u/f,d/f,0,p)}function Ue(e,t){return new Proxy(e,{get(e,n,r){let i=Reflect.get(e,n,r);return typeof i==`function`?function(...n){try{return i.apply(e,n)}catch(e){let n=WebAssembly.Exception;if(n&&e instanceof n)try{let[,n]=t.getExceptionMessage(e);throw Error(n,{cause:e})}catch(e){if(e instanceof Error&&!(e instanceof n))throw e}throw e}}:i}})}function We(e,t){let n=function(){return T(`compound`,t.makeNullShape())};return Object.assign(Object.create(e),{TopoDS_Solid:n,TopoDS_Face:n,TopoDS_Shape:n,TopoDS_Wire:n,TopoDS_Edge:n,TopoDS_Vertex:n,TopoDS_Shell:n,TopoDS_Compound:n,gp_Pnt_3:function(e,n,r){return T(`vertex`,t.makeVertex(e,n,r))},BRepBuilderAPI_MakeEdge_3:function(e,n){let r=e,i=n,a=t.vertexPosition(r.id),o=t.vertexPosition(i.id),s=t.makeLineEdge(a.get(0),a.get(1),a.get(2),o.get(0),o.get(1),o.get(2));return a.delete(),o.delete(),{Edge:()=>T(`edge`,s),delete(){}}}})}function Ge(e,t){let n=E(t),r=e.getSubShapes(n,`solid`);try{if(r.size()>1){let t=e.fuseAll(r);return{id:t,dispose:()=>{e.release(t)}}}return{id:n,dispose:()=>{}}}finally{for(let t=0,i=r.size();t<i;t++){let i=r.get(t);i!==n&&e.release(i)}r.delete()}}function Ke(e,t,n,r){return D(e,e.fuse(E(t),E(n)))}function qe(e,t,n,r){let i=Ge(e,n);try{return D(e,e.cut(E(t),i.id))}finally{i.dispose()}}function Je(e,t,n,r){let i=Ge(e,n);try{return D(e,e.intersect(E(t),i.id))}finally{i.dispose()}}function Ye(e,t,n,r){return D(e,e.section(E(t),E(n)))}function Xe(e,t,n,r){let i=Ie(t,n.map(E));try{return D(e,e.fuseAll(i))}finally{i.delete()}}function Ze(e,t,n,r,i){let a=Ie(t,r.map(E));try{return D(e,e.cutAll(E(n),a))}finally{a.delete()}}function Qe(e,t,n,r){let i=Ie(t,r.map(E));try{return D(e,e.split(E(n),i))}finally{i.delete()}}function $e(e,t,n,r){let i=[];return e.isNull(E(t))&&i.push({operand:`base`,issue:`null-shape`,message:`Base shape is null`}),e.isNull(E(n))&&i.push({operand:`tool`,issue:`null-shape`,message:`Tool shape is null`}),i.length===0&&!e.isValid(E(t))&&i.push({operand:`base`,issue:`not-valid`,message:`Base shape is not valid`}),i.length===0&&!e.isValid(E(n))&&i.push({operand:`tool`,issue:`not-valid`,message:`Tool shape is not valid`}),{valid:i.length===0,issues:i}}function et(e,t,n,r,i,a){throw Error(`occt-wasm: meshBoolean is not supported (use brepkit for mesh booleans)`)}function tt(e,t,n){return n!==t&&e.release(t),n}function nt(e,t,n,r){return T(`solid`,e.makeBox(t,n,r))}function rt(e,t,n,r,i){let a=e.makeCylinder(t,n);return i&&(a=tt(e,a,He(e,a,i))),r&&(r[0]!==0||r[1]!==0||r[2]!==0)&&(a=tt(e,a,e.translate(a,r[0],r[1],r[2]))),T(`solid`,a)}function it(e,t,n){let r=e.makeSphere(t);return n&&(n[0]!==0||n[1]!==0||n[2]!==0)&&(r=tt(e,r,e.translate(r,n[0],n[1],n[2]))),T(`solid`,r)}function at(e,t,n,r,i,a){let o=e.makeCone(t,n,r);return a&&(o=tt(e,o,He(e,o,a))),i&&(i[0]!==0||i[1]!==0||i[2]!==0)&&(o=tt(e,o,e.translate(o,i[0],i[1],i[2]))),T(`solid`,o)}function ot(e,t,n,r,i){let a=e.makeTorus(t,n);return i&&(a=tt(e,a,He(e,a,i))),r&&(r[0]!==0||r[1]!==0||r[2]!==0)&&(a=tt(e,a,e.translate(a,r[0],r[1],r[2]))),T(`solid`,a)}function st(e,t,n,r){return T(`solid`,e.makeEllipsoid(t,n,r))}function ct(e,t,n){return T(`solid`,e.makeBoxFromCorners(t[0],t[1],t[2],n[0],n[1],n[2]))}function lt(e,t,n){return T(`face`,e.makeRectangle(t,n))}function ut(e,t,n){let r=e.getSubShapes(E(t),n),i=[];try{let e=r.size();for(let t=0;t<e;t++)i.push(T(n,r.get(t)))}finally{r.delete()}return i}function dt(e,t){return Pe(t)?t.type:Fe(e.getShapeType(E(t)))}function ft(e,t,n){return e.isSame(E(t),E(n))}function pt(e,t,n){return e.isEqual(E(t),E(n))}function mt(e,t,n){return n?T(n,e.downcast(E(t),n)):t}function ht(e,t){return D(e,e.copy(E(t)))}function gt(e,t,n){return e.hashCode(E(t),n)}function _t(e,t){return e.isNull(E(t))}function vt(e,t){return e.shapeOrientation(E(t)).toLowerCase()}function yt(e,n){let r=e.edgeToFaceMap(E(n),1e6),i;try{i=ze(r)}finally{r.delete()}let a={};for(let e=0;e+1<i.length;e+=2){let n=t(i,e),r=t(i,e+1);a[n]||(a[n]=[]),a[n].push(r)}return JSON.stringify(a)}function bt(e,t,n){return e.subShapeCount(E(t),n)}function xt(e,t,n,r){let i=e.subShapeHashes(E(t),n,r);try{return ze(i)}finally{i.delete()}}function St(e,t,n){let r=e.sharedEdges(E(t),E(n)),i=[];try{let e=r.size();for(let t=0;t<e;t++)i.push(T(`edge`,r.get(t)))}finally{r.delete()}return i}function Ct(e,t,n){let r=e.adjacentFaces(E(t),E(n)),i=[];try{let e=r.size();for(let t=0;t<e;t++)i.push(T(`face`,r.get(t)))}finally{r.delete()}return i}function wt(e,t,n,r){let i=Ie(t,n.map(E));try{return D(e,e.sew(i,r??1e-6))}finally{i.delete()}}var Tt=1e-6;function Et(e,t){return e.isValid(E(t))}function Dt(e,t){let n=e.healSolid(E(t),Tt);return n===0?null:D(e,n)}function Ot(e,t){return D(e,e.healFace(E(t),Tt))}function kt(e,t,n){return D(e,e.healWire(E(t),Tt))}function At(e,t,n){return 0}function jt(e,t,n){return e.removeDegenerateEdges(E(t)),0}function Mt(e,t){return e.fixFaceOrientations(E(t)),0}function Nt(e,t){return D(e,e.fixShape(E(t)))}function Pt(e,t,n,r){let i=e.tessellate(E(n),r.tolerance,r.angularTolerance);try{let e=i.positionCount,n=i.normalCount,a=i.indexCount,o=i.getPositionsPtr()>>2,s=i.getNormalsPtr()>>2,c=i.getIndicesPtr()>>2,l=new Float32Array(e);for(let n=0;n<e;n++)l[n]=t.HEAPF32[o+n]??0;let u=new Float32Array(n);if(!r.skipNormals)for(let e=0;e<n;e++)u[e]=t.HEAPF32[s+e]??0;let d=i.uvCount,f=new Float32Array(r.includeUVs?d:0);if(r.includeUVs&&d>0){let e=i.getUvsPtr()>>2;for(let n=0;n<d;n++)f[n]=t.HEAPF32[e+n]??0}let p=new Uint32Array(a);for(let e=0;e<a;e++)p[e]=t.HEAPU32[c+e]??0;let m=[],h=i.faceGroupCount;if(h>0){let e=i.getFaceGroupsPtr()>>2;for(let n=0;n<h;n+=3)m.push({start:t.HEAP32[e+n]??0,count:t.HEAP32[e+n+1]??0,faceHash:t.HEAP32[e+n+2]??0})}return{vertices:l,normals:r.skipNormals?new Float32Array:u,triangles:p,uvs:f,faceGroups:m}}finally{i.delete()}}function Ft(e,t,n,r){for(let i=0;i+1<n;i++){let n=t+i*3,a=e[n]??0,o=e[n+1]??0,s=e[n+2]??0,c=e[n+3]??0,l=e[n+4]??0,u=e[n+5]??0;a===c&&o===l&&s===u||r.push(a,o,s,c,l,u)}}function It(e,t,n,r,i){let a=e.wireframe(E(n),r);try{let e=t.HEAPF32,n=a.getPointsPtr()>>2,r=[],i=[],o=a.edgeGroupCount,s=o>0?a.getEdgeGroupsPtr()>>2:0;for(let a=0;a<o;a+=3){let o=n+(t.HEAP32[s+a]??0),c=Math.floor((t.HEAP32[s+a+1]??0)/3),l=r.length/3;Ft(e,o,c,r),i.push({start:l,count:r.length/3-l,edgeHash:t.HEAP32[s+a+2]??0})}return{lines:new Float32Array(r),edgeGroups:i}}finally{a.delete()}}function Lt(e,t){return e.hasTriangulation(E(t))}function Rt(e,t,n,r){e.meshShape(E(t),n,r).delete()}var zt={line:`LINE`,circle:`CIRCLE`,ellipse:`ELLIPSE`,hyperbola:`HYPERBOLA`,parabola:`PARABOLA`,bezier:`BEZIER_CURVE`,bspline:`BSPLINE_CURVE`,offset:`OFFSET_CURVE`,other:`OTHER_CURVE`};function Bt(e,t){let n=e.curveType(E(t));return zt[n]??n.toUpperCase()}function Vt(e,t){let n=e.curveParameters(E(t));try{return[n.get(0),n.get(1)]}finally{n.delete()}}function Ht(e,t,n){let r=e.curvePointAtParam(E(t),n);try{return[r.get(0),r.get(1),r.get(2)]}finally{r.delete()}}function Ut(e,t,n){let r=e.curveTangent(E(t),n);try{let i=e.curvePointAtParam(E(t),n);try{return{point:[i.get(0),i.get(1),i.get(2)],tangent:[r.get(0),r.get(1),r.get(2)]}}finally{i.delete()}}finally{r.delete()}}function Wt(e,t){return e.curveIsClosed(E(t))}function Gt(e,t){return e.curveIsPeriodic(E(t))}function Kt(e,t){return 2*Math.PI}function qt(e,t,n,r){let i=[];for(let e of n)i.push(e[0],e[1],e[2]);let a=Re(t,i);try{return T(`edge`,e.interpolatePoints(a,r?.periodic??!1))}finally{a.delete()}}function Jt(e,t,n,r){let i=[];for(let e of n)i.push(e[0],e[1],e[2]);let a=Re(t,i);try{return T(`edge`,e.approximatePoints(a,r?.tolerance??.001))}finally{a.delete()}}function Yt(e,t,n){return T(`edge`,e.curveDegreeElevate(E(t),n))}function Xt(e,t,n,r){return T(`edge`,e.curveKnotInsert(E(t),n,r))}function Zt(e,t,n,r){return T(`edge`,e.curveKnotRemove(E(t),n,r))}function Qt(e,t,n){let r=e.curveSplit(E(t),n);try{return[T(`edge`,r.get(0)),T(`edge`,r.get(1))]}finally{r.delete()}}function $t(e,t){let n=en(e,t);if(!n||n.poles.length<2)return null;let r=n.poles[n.poles.length-2];return r?[r[0],r[1],r[2]]:null}function en(e,t){try{let n=e.getNurbsCurveData(E(t));try{let e=n.poles.size()/3,t=[];for(let r=0;r<e;r++)t.push([n.poles.get(r*3),n.poles.get(r*3+1),n.poles.get(r*3+2)]);let r=[];for(let e=0;e<n.knots.size();e++)r.push(n.knots.get(e));let i=[];for(let e=0;e<n.multiplicities.size();e++)i.push(n.multiplicities.get(e));let a=[];if(n.rational)for(let e=0;e<n.weights.size();e++)a.push(n.weights.get(e));else for(let t=0;t<e;t++)a.push(1);return{degree:n.degree,poles:t,weights:a,knots:r,multiplicities:i,isPeriodic:n.periodic,isRational:n.rational}}finally{n.delete()}}catch{return null}}function tn(e,t){let n=e.vertexPosition(E(t));try{return[n.get(0),n.get(1),n.get(2)]}finally{n.delete()}}function nn(e,t){return e.surfaceType(E(t)).toLowerCase()}function rn(e,t){let n=e.uvBounds(E(t));try{return{uMin:n.get(0),uMax:n.get(1),vMin:n.get(2),vMax:n.get(3)}}finally{n.delete()}}function an(e,t){return T(`wire`,e.outerWire(E(t)))}function on(e,t){return T(`face`,e.reverseSurfaceU(E(t)))}function sn(e,t,n,r){let i=e.surfaceNormal(E(t),n,r);try{return[i.get(0),i.get(1),i.get(2)]}finally{i.delete()}}function cn(e,t,n,r){let i=e.pointOnSurface(E(t),n,r);try{return[i.get(0),i.get(1),i.get(2)]}finally{i.delete()}}var ln=(e,t)=>[e[0]-t[0],e[1]-t[1],e[2]-t[2]],un=(e,t)=>e[0]*t[0]+e[1]*t[1]+e[2]*t[2],dn=e=>Math.hypot(e[0],e[1],e[2]),fn=(e,t)=>[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 pn(e,t){if(nn(e,t)!==`cylinder`)return null;let n=rn(e,t),r=.5*(n.vMin+n.vMax),i=n.uMin+.25*(n.uMax-n.uMin),a=n.uMin+.5*(n.uMax-n.uMin),o=sn(e,t,i,r),s=sn(e,t,a,r),c=cn(e,t,i,r),l=cn(e,t,a,r),u=fn(o,s),d=dn(u),f=dn(ln(o,s));if(d<1e-9||f<1e-9)return null;let p=[u[0]/d,u[1]/d,u[2]/d],m=dn(ln(c,l))/f,h=[c[0]-m*o[0],c[1]-m*o[1],c[2]-m*o[2]],g=dn(ln(h,[l[0]-m*s[0],l[1]-m*s[1],l[2]-m*s[2]]))<1e-6?h:[c[0]+m*o[0],c[1]+m*o[1],c[2]+m*o[2]];return{origin:g,direction:p,radius:m,isDirect:(vt(e,t)===`reversed`?-1:1)*un(o,ln(c,g))>0}}function mn(e,t,n){let r=ln(t,e),i=ln(n,e),a=fn(r,i),o=un(a,a);if(o<1e-18)return null;let s=un(r,r),c=un(i,i),l=fn([s*i[0]-c*r[0],s*i[1]-c*r[1],s*i[2]-c*r[2]],a),u=1/(2*o);return[e[0]+l[0]*u,e[1]+l[1]*u,e[2]+l[2]*u]}function hn(e,t,n,r,i){return mn(cn(e,t,n+.1*(r-n),i),cn(e,t,n+.45*(r-n),i),cn(e,t,n+.8*(r-n),i))}function gn(e,t){let n=rn(e,t),r=[.2,.5,.8].map(r=>hn(e,t,n.uMin,n.uMax,n.vMin+r*(n.vMax-n.vMin))).filter(e=>e!==null);if(r.length<2)return null;let i=null,a=1e-9;for(let e=0;e<r.length;e++)for(let t=e+1;t<r.length;t++){let n=r[e],o=r[t];if(!n||!o)continue;let s=ln(o,n),c=dn(s);c>a&&(a=c,i={origin:n,direction:[s[0]/c,s[1]/c,s[2]/c]})}return i}function _n(e,t){let n=nn(e,t);if(n===`cylinder`){let n=pn(e,t);return n?{origin:n.origin,direction:n.direction}:null}return n===`cone`||n===`torus`||n===`revolution`?gn(e,t):null}function vn(e,t){let n=e.getFaceCylinderData(E(t));try{return n.size()<2?null:{radius:n.get(0),isDirect:n.get(1)===1}}finally{n.delete()}}function yn(e,t,n){let r=e.uvFromPoint(E(t),n[0],n[1],n[2]);try{return r.size()<2?null:[r.get(0),r.get(1)]}finally{r.delete()}}function bn(e,t,n){let r=e.projectPointOnFace(E(t),n[0],n[1],n[2]);try{return[r.get(0),r.get(1),r.get(2)]}finally{r.delete()}}function xn(e,t,n,r,i){return e.classifyPointOnFace(E(t),n,r).toLowerCase()}function Sn(e,t,n,r,i,a){let[o,s,c]=r,[l,u,d]=i,f=!!a,[p,m,h]=a??[1,0,0],g=e.projectEdges(E(n),o,s,c,l,u,d,p,m,h,f),_=n=>n===0?T(`compound`,e.makeCompound(new t.VectorUint32)):T(`compound`,n);return{visible:{outline:_(g.visibleOutline),smooth:_(g.visibleSmooth),sharp:_(g.visibleSharp)},hidden:{outline:_(g.hiddenOutline),smooth:_(g.hiddenSmooth),sharp:_(g.hiddenSharp)}}}function Cn(e,t){return e.getVolume(E(t))}function wn(e,t){return e.getSurfaceArea(E(t))}function Tn(e,t){return e.getLength(E(t))}function En(e,t){let n=e.getCenterOfMass(E(t));try{return[n.get(0),n.get(1),n.get(2)]}finally{n.delete()}}function Dn(e,t){let n=e.getLinearCenterOfMass(E(t));try{return[n.get(0),n.get(1),n.get(2)]}finally{n.delete()}}function On(e,t){let n=e.getBoundingBox(E(t),!0);return{min:[n.xmin,n.ymin,n.zmin],max:[n.xmax,n.ymax,n.zmax]}}function kn(e,t){try{let n=e.getSurfaceCenterOfMass(E(t));try{return[n.get(0),n.get(1),n.get(2)]}finally{n.delete()}}catch{return[0,0,0]}}function An(e,t,n){return{volume:Cn(e,t),area:wn(e,t),length:n?Tn(e,t):0,centerOfMass:En(e,t),boundingBox:On(e,t)}}function jn(e,t){let n=E(t);return{distanceTo(t){return{value:e.distanceBetween(n,E(t)),point1:[0,0,0],point2:[0,0,0]}},dispose:Ne}}var Mn=256;function Nn(e,t,n){let r=[],i=e.getSubShapes(n,`vertex`);try{let t=i.size();for(let n=0;n<t;n++){let t=e.vertexPosition(i.get(n));r.push([t.get(0),t.get(1),t.get(2)]),t.delete()}}finally{i.delete()}let a=e.getBoundingBox(n,!0),o=Math.sqrt((a.xmax-a.xmin)**2+(a.ymax-a.ymin)**2+(a.zmax-a.zmin)**2),s=Math.max(o*.01,1e-4),c;try{c=e.tessellate(n,s,.5)}catch{return r}try{let e=c.positionCount;if(e>0){let n=c.getPositionsPtr()>>2,i=t.HEAPF32,a=Math.floor(e/3),o=(a>Mn?Math.ceil(a/Mn):1)*3;for(let t=0;t<e;t+=o)r.push([i[n+t]??0,i[n+t+1]??0,i[n+t+2]??0])}}finally{c.delete()}return r}function Pn(e,t,n,r){let i=E(n),a=E(r),o=e.distanceBetween(i,a),s=Nn(e,t,i),c=Nn(e,t,a);if(s.length===0||c.length===0)return{value:o,point1:[0,0,0],point2:[0,0,0]};let l=1/0,u=s[0]??[0,0,0],d=c[0]??[0,0,0];for(let e of s)for(let t of c){let n=t[0]-e[0],r=t[1]-e[1],i=t[2]-e[2],a=n*n+r*r+i*i;a<l&&(l=a,u=e,d=t)}return{value:o,point1:u,point2:d}}function Fn(e,t,n,r){let i=e.pointOnSurface(t,n,r),a=[i.get(0),i.get(1),i.get(2)];return i.delete(),a}function In(e,t,n,r){let i=e.uvBounds(t),a=i.get(0),o=i.get(1),s=i.get(2),c=i.get(3);i.delete();let l=Math.max(Math.max(o-a,1e-12)*.001,1e-6),u=Math.max(Math.max(c-s,1e-12)*.001,1e-6),d=Math.min(Math.max(n,a+l),o-l),f=Math.min(Math.max(r,s+u),c-u),p=Fn(e,t,d,f),m=Fn(e,t,d+l,f),h=Fn(e,t,d-l,f),g=Fn(e,t,d,f+u),_=Fn(e,t,d,f-u),v=Fn(e,t,d+l,f+u),y=Fn(e,t,d+l,f-u),b=Fn(e,t,d-l,f+u),x=Fn(e,t,d-l,f-u),S=l*l,C=u*u,w=4*l*u;return{Pu:[(m[0]-h[0])/(2*l),(m[1]-h[1])/(2*l),(m[2]-h[2])/(2*l)],Pv:[(g[0]-_[0])/(2*u),(g[1]-_[1])/(2*u),(g[2]-_[2])/(2*u)],Puu:[(m[0]-2*p[0]+h[0])/S,(m[1]-2*p[1]+h[1])/S,(m[2]-2*p[2]+h[2])/S],Pvv:[(g[0]-2*p[0]+_[0])/C,(g[1]-2*p[1]+_[1])/C,(g[2]-2*p[2]+_[2])/C],Puv:[(v[0]-y[0]-b[0]+x[0])/w,(v[1]-y[1]-b[1]+x[1])/w,(v[2]-y[2]-b[2]+x[2])/w]}}function Ln(e,t,n,r){return Math.abs(e)+Math.abs(t)>=Math.abs(n)+Math.abs(r)?Math.abs(e)+Math.abs(t)<1e-12?[1,0]:[-t,e]:Math.abs(n)+Math.abs(r)<1e-12?[0,1]:[-r,n]}function Rn(e,t,n){let r=e[0]*t[0]+e[1]*n[0],i=e[0]*t[1]+e[1]*n[1],a=e[0]*t[2]+e[1]*n[2],o=Math.sqrt(r*r+i*i+a*a);return o<1e-12?[1,0,0]:[r/o,i/o,a/o]}function zn(e,t){let n=Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]);if(n<1e-12)return{maxDirection:[1,0,0],minDirection:[0,1,0]};let r=e[0]/n,i=e[1]/n,a=e[2]/n,o=r*t[0]+i*t[1]+a*t[2],s=t[0]-o*r,c=t[1]-o*i,l=t[2]-o*a,u=Math.sqrt(s*s+c*c+l*l);if(u<1e-12){let e=Math.abs(r)<.9?[1,0,0]:[0,1,0],t=i*e[2]-a*e[1],n=a*e[0]-r*e[2],o=r*e[1]-i*e[0],s=Math.sqrt(t*t+n*n+o*o)||1;return{maxDirection:[r,i,a],minDirection:[t/s,n/s,o/s]}}return{maxDirection:[r,i,a],minDirection:[s/u,c/u,l/u]}}function Bn(e,t,n,r,i,a){let{Pu:o,Pv:s,Puu:c,Pvv:l,Puv:u}=In(e,t,n,r),d=o[1]*s[2]-o[2]*s[1],f=o[2]*s[0]-o[0]*s[2],p=o[0]*s[1]-o[1]*s[0],m=Math.sqrt(d*d+f*f+p*p),h=o[0]*o[0]+o[1]*o[1]+o[2]*o[2],g=o[0]*s[0]+o[1]*s[1]+o[2]*s[2],_=s[0]*s[0]+s[1]*s[1]+s[2]*s[2];if(m<1e-12||h*_-g*g<1e-24)return zn(o,s);let v=(c[0]*d+c[1]*f+c[2]*p)/m,y=(u[0]*d+u[1]*f+u[2]*p)/m,b=(l[0]*d+l[1]*f+l[2]*p)/m,x=h*_-g*g,S=(v*_-y*g)/x,C=(y*_-b*g)/x,w=(y*h-v*g)/x,ee=(b*h-y*g)/x;if(Math.abs(i-a)<1e-9*(Math.abs(i)+Math.abs(a)+1))return zn(o,s);let te=Ln(S-i,C,w,ee-i),ne=Ln(S-a,C,w,ee-a);return{maxDirection:Rn(te,o,s),minDirection:Rn(ne,o,s)}}function Vn(e,t,n,r){let i=E(t),a=e.surfaceCurvature(i,n,r),o=a.get(0),s=a.get(1),c=a.get(2),l=a.get(3);a.delete();let{maxDirection:u,minDirection:d}=Bn(e,i,n,r,c,l);return{gaussian:s,mean:o,max:c,min:l,maxDirection:u,minDirection:d}}var Hn=2147483647;function Un(e,t,n,r,i){let a=Ve(r,i),o=Ie(t,r.map(E));try{return D(e,e.fillet(E(n),o,a))}finally{o.delete()}}function Wn(e,t,n,r,i){let a=Ve(r,i),o=Ie(t,r.map(E));try{return D(e,e.chamfer(E(n),o,a))}finally{o.delete()}}function Gn(e,t,n,r,i,a){let o=Ie(t,r.map(E));try{return D(e,e.chamferDistAngle(E(n),o,i,a))}finally{o.delete()}}function Kn(e,t,n,r,i,a){let o=Ie(t,r.map(E));try{return D(e,e.shell(E(n),o,i,a??.001))}finally{o.delete()}}function qn(e,t,n){return D(e,e.thicken(E(t),n,.001))}function Jn(e,t,n,r){return D(e,e.offset(E(t),n,r??1e-6))}function Yn(e,t,n,r,i){let a=e.filletVariable(t,n,r,i),o=!0;try{let t=e.getSubShapes(a,`solid`);try{let n=t.size()===1?t.get(0):-1;for(let r=0,i=t.size();r<i;r++){let i=t.get(r);i!==n&&e.release(i)}return n===-1?(o=!1,D(e,a)):D(e,n)}finally{t.delete()}}finally{o&&e.release(a)}}function Xn(e,t,n){let r=JSON.parse(n);if(r.edgeId!==void 0&&r.startRadius!==void 0&&r.endRadius!==void 0)return Yn(e,E(t),r.edgeId,r.startRadius,r.endRadius);if(r.edge!==void 0&&Array.isArray(r.radii)&&r.radii.length>0){let n=r.radii;if(n.length>2)throw new c(`occt-wasm: filletVariable supports only a linear (<=2-point) radius profile; a multi-point variable radius requires the brepkit kernel`);let i=n[0].radius,a=n[n.length-1].radius,o=E(t),s=e.getSubShapes(o,`edge`),l=-1;try{for(let t=0,n=s.size();t<n;t++){let n=s.get(t);if(e.hashCode(n,Hn)===r.edge){l=n;break}}}finally{for(let t=0,n=s.size();t<n;t++){let n=s.get(t);n!==l&&e.release(n)}s.delete()}if(l===-1)throw new c(`occt-wasm: filletVariable: target edge not found on the shape`);try{return Yn(e,o,l,i,a)}finally{e.release(l)}}throw new c(`occt-wasm: filletVariable: unrecognized spec`)}function Zn(e,t,n,r,i,a){let o=E(t);for(let t of n){let n=(typeof a==`function`?a(t):a)*Math.PI/180;o=e.draft(o,E(t),n,r[0],r[1],r[2])}return D(e,o)}function Qn(e,t,n,r){let i=Ie(t,r.map(E));try{return D(e,e.defeature(E(n),i,0))}finally{i.delete()}}function $n(e,t,n,r){let i=0;return r===`intersection`||r===1?i=1:r===`tangent`||r===2?i=2:typeof r==`number`&&(i=r),D(e,e.offsetWire2D(E(t),n,i))}function er(e,t){return D(e,e.simplify(E(t)))}function tr(e,t){return D(e,e.reverseShape(E(t)))}function nr(e,t,n,r){let i=n[0]*r,a=n[1]*r,o=n[2]*r;return D(e,e.extrude(E(t),i,a,o))}function rr(e,t,n,r){let i=n.origin,a=n.direction;return D(e,e.revolve(E(t),i.x,i.y,i.z,a.x,a.y,a.z,r))}function ir(e,t,n,r,i,a){let o=i?E(i):0,s=a?E(a):0,c=Ie(t,n.map(E));try{return o||s?D(e,e.loftWithVertices(c,!0,r??!1,o,s)):D(e,e.loft(c,!0,r??!1))}finally{c.delete()}}function ar(e,t,n,r){let i=r?.transitionMode??0;return D(e,e.sweep(E(t),E(n),i))}function or(e,t,n){return D(e,e.simplePipe(E(t),E(n)))}function sr(e,t,n,r){let i=r?.frenet??!1,a=r?.transitionMode===`round`,o=r?.shellMode??!1,s=D(e,e.sweepPipeShell(E(t),E(n),i,a));if(o){let t=e.getSubShapes(E(s),`wire`);try{return{shape:s,firstShape:t.size()>0?D(e,t.get(0)):s,lastShape:t.size()>1?D(e,t.get(t.size()-1)):s}}finally{t.delete()}}return s}function cr(e,t,n,r){let i=r?.solid??!0,a=r?.ruled??!1,o=r?.startVertex?E(r.startVertex):0,s=r?.endVertex?E(r.endVertex):0,c=Ie(t,n.map(E));try{return o||s?D(e,e.loftWithVertices(c,i,a,o,s)):D(e,e.loft(c,i,a))}finally{c.delete()}}function lr(e,t,n,r){let i={__occtWasmLaw:!0,profile:t,length:n,endFactor:r,Trim(e,t,n){return{...i,trimFirst:e,trimLast:t}},delete(){}};return i}function ur(e,t,n,r,i){return D(e,e.revolveVec(E(t),n[0],n[1],n[2],r[0],r[1],r[2],i))}function dr(e,t,n,r,i,a,o){let s=i??10;return D(e,e.draftPrism(E(t),0,0,s,a))}function fr(e){let t=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];for(let n of e)if(n.type===`translate`)t=Be([1,0,0,n.x,0,1,0,n.y,0,0,1,n.z,0,0,0,1],t);else{let e=n.axis??[0,0,1],r=n.center??[0,0,0],i=n.angle*Math.PI/180,a=Math.cos(i),o=Math.sin(i),s=1-a,c=Math.sqrt(e[0]**2+e[1]**2+e[2]**2),[l,u,d]=[e[0]/c,e[1]/c,e[2]/c],f=s*l*l+a,p=s*l*u-o*d,m=s*l*d+o*u,h=s*u*l+o*d,g=s*u*u+a,_=s*u*d-o*l,v=s*d*l-o*u,y=s*d*u+o*l,b=s*d*d+a;t=Be([f,p,m,r[0]-(f*r[0]+p*r[1]+m*r[2]),h,g,_,r[1]-(h*r[0]+g*r[1]+_*r[2]),v,y,b,r[2]-(v*r[0]+y*r[1]+b*r[2]),0,0,0,1],t)}return{handle:{__type:`transform_matrix`,matrix:t,delete:Ne},dispose:Ne}}function pr(e){let t=e,n;return Array.isArray(t)?n=t:typeof t==`object`&&t&&(Array.isArray(t.matrix)?n=t.matrix:Array.isArray(t.elements)&&(n=t.elements)),n&&n.length===16&&(n=n.slice(0,12)),n&&n.length>=12?n:void 0}function mr(e,t,n,r){let i=pr(r);if(i){let r=Re(t,i);try{return D(e,e.transform(E(n),r))}finally{r.delete()}}return T(e.getShapeType(E(n)),e.copy(E(n)))}function hr(e,t,n,r){if(typeof e.located==`function`){let i=pr(r);if(i){let r=Re(t,i);try{return D(e,e.located(E(n),r))}finally{r.delete()}}}return mr(e,t,n,r)}function gr(e,t,n,r,i){return D(e,e.translate(E(t),n,r,i))}function _r(e,t,n,r,i){let a=r??[0,0,1],o=i??[0,0,0];return D(e,e.rotate(E(t),o[0],o[1],o[2],a[0],a[1],a[2],n))}function vr(e,t,n,r){return D(e,e.mirror(E(t),n[0],n[1],n[2],r[0],r[1],r[2]))}function yr(e,t,n,r){return D(e,e.scale(E(t),n[0],n[1],n[2],r))}function br(e,t,n,r,i,a){let o=Re(t,[r[0],r[1],r[2],i[0],r[3],r[4],r[5],i[1],r[6],r[7],r[8],i[2]]);try{return D(e,e.generalTransform(E(n),o))}finally{o.delete()}}function xr(e,t,n,r,i){let a=e.curvePointAtParam(E(r),i),[o,s,c]=(()=>{try{return[a.get(0),a.get(1),a.get(2)]}finally{a.delete()}})(),l=e.curveTangent(E(r),i),[u,d,f]=(()=>{try{return[l.get(0),l.get(1),l.get(2)]}finally{l.delete()}})(),p,m,h;Math.abs(u)<.9?(p=0,m=f,h=-d):(p=-f,m=0,h=u);let g=Math.sqrt(p*p+m*m+h*h);p/=g,m/=g,h/=g;let _=d*h-f*m,v=f*p-u*h,y=u*m-d*p,b=new t.VectorDouble;b.push_back(p),b.push_back(_),b.push_back(u),b.push_back(o),b.push_back(m),b.push_back(v),b.push_back(d),b.push_back(s),b.push_back(h),b.push_back(y),b.push_back(f),b.push_back(c);try{return D(e,e.transform(E(n),b))}finally{b.delete()}}function Sr(e,t,n,r,i){let a=e.linearPattern(E(t),n[0],n[1],n[2],r,i),o=e.getSubShapes(a,`solid`),s=[];try{let e=o.size();for(let t=0;t<e;t++)s.push(T(`solid`,o.get(t)))}finally{o.delete()}if(s.length===0){let t=e.iterShapes(a);try{let n=t.size();for(let r=0;r<n;r++)s.push(D(e,t.get(r)))}finally{t.delete()}}return e.release(a),s}function Cr(e,t,n,r,i,a){let o=e.circularPattern(E(t),n[0],n[1],n[2],r[0],r[1],r[2],i,a),s=e.getSubShapes(o,`solid`),c=[];try{let e=s.size();for(let t=0;t<e;t++)c.push(T(`solid`,s.get(t)))}finally{s.delete()}if(c.length===0){let t=e.iterShapes(o);try{let n=t.size();for(let r=0;r<n;r++)c.push(D(e,t.get(r)))}finally{t.delete()}}return e.release(o),c}function wr(e,t){return t.map(t=>{switch(t.type){case`translate`:return gr(e,t.shape,t.x,t.y,t.z);case`rotate`:return _r(e,t.shape,t.angle,t.axis,t.center);case`scale`:return yr(e,t.shape,t.center,t.factor);case`mirror`:return vr(e,t.shape,t.origin,t.normal);default:throw Error(`occt-wasm: transformBatch unknown type`)}})}function Tr(e,t){if(t===0)return{min:[0,0,0],max:[0,0,0]};let n=1/0,r=1/0,i=1/0,a=-1/0,o=-1/0,s=-1/0;for(let c=0;c<t;c++){let t=c*3,l=e[t]??0,u=e[t+1]??0,d=e[t+2]??0;l<n&&(n=l),u<r&&(r=u),d<i&&(i=d),l>a&&(a=l),u>o&&(o=u),d>s&&(s=d)}return{min:[n,r,i],max:[a,o,s]}}function Er(e,t,n,r,i,a,o,s){return{asset:{version:`2.0`,generator:`brepjs occt-wasm`},scene:0,scenes:[{nodes:[0]}],nodes:[{mesh:0}],meshes:[{primitives:[{attributes:{POSITION:0,NORMAL:1},indices:2,mode:4}]}],buffers:[{byteLength:o}],bufferViews:[{buffer:0,byteOffset:0,byteLength:r,target:34962},{buffer:0,byteOffset:r,byteLength:i,target:34962},{buffer:0,byteOffset:r+i,byteLength:a,target:34963}],accessors:[{bufferView:0,componentType:5126,count:e,type:`VEC3`,min:s.min,max:s.max},{bufferView:1,componentType:5126,count:t,type:`VEC3`},{bufferView:2,componentType:5125,count:n,type:`SCALAR`}]}}function Dr(e,t,n){if(n.length===1)return e.exportStep(E(n[0]));let r=t(n);return e.exportStep(E(r))}function Or(e,t,n,r=De,i=Oe){let{vertices:a,triangles:o}=e(t,{tolerance:r,angularTolerance:i,skipNormals:!0});return n?je(a,o):Me(a,o)}function kr(e,t){let n=typeof t==`string`?t:new TextDecoder().decode(t);return[D(e,e.importStep(n))]}function Ar(e,t,n){let r=typeof n==`string`?new TextEncoder().encode(n):new Uint8Array(n),i=t;if(i.FS)i.FS.writeFile(`/tmp/import.stl`,r);else{let t=Array.from(r,e=>String.fromCharCode(e)).join(``);return D(e,e.importStl(t))}return D(e,e.importStl(``))}function jr(e,t,n){if(n.length===1)return e.exportIges(E(n[0]));let r=t(n);return e.exportIges(E(r))}function Mr(e,t){let n=typeof t==`string`?t:new TextDecoder().decode(t);return[D(e,e.importIges(n))]}function Nr(e,t,n,r){if(n.length===0)return``;let i=zr(e,t,n);try{return Br(e,i)}finally{i.delete()}}function Pr(e,t,n){let r=e(t,{tolerance:n,angularTolerance:.5,skipNormals:!1}),i=r.vertices,a=r.normals,o=r.triangles,s=i.length/3,c=a.length/3,l=o.length,u=i.byteLength,d=a.byteLength,f=o.byteLength,p=u+d+f,m=p+(4-p%4)%4,h=Er(s,c,l,u,d,f,m,Tr(i,s)),g=new TextEncoder().encode(JSON.stringify(h)),_=g.byteLength+(4-g.byteLength%4)%4,v=20+_+8+m,y=new ArrayBuffer(v),b=new DataView(y);b.setUint32(0,1179937895,!0),b.setUint32(4,2,!0),b.setUint32(8,v,!0),b.setUint32(12,_,!0),b.setUint32(16,1313821514,!0);let x=new Uint8Array(y,20,_);x.set(g);for(let e=g.byteLength;e<_;e++)x[e]=32;let S=20+_;b.setUint32(S,m,!0),b.setUint32(S+4,5130562,!0);let C=S+8;return new Uint8Array(y,C,u).set(new Uint8Array(i.buffer,i.byteOffset,u)),new Uint8Array(y,C+u,d).set(new Uint8Array(a.buffer,a.byteOffset,d)),new Uint8Array(y,C+u+d,f).set(new Uint8Array(o.buffer,o.byteOffset,f)),y}function Fr(e,t,n){let r=e(t,{tolerance:n,angularTolerance:.5,skipNormals:!1}),i=r.vertices,a=r.normals,o=r.triangles,s=[`# brepjs OBJ export`],c=i.length/3;for(let e=0;e<c;e++){let t=e*3;s.push(`v ${i[t]??0} ${i[t+1]??0} ${i[t+2]??0}`)}let l=a.length/3;for(let e=0;e<l;e++){let t=e*3;s.push(`vn ${a[t]??0} ${a[t+1]??0} ${a[t+2]??0}`)}let u=e=>{let t=(o[e]??0)+1,n=(o[e+1]??0)+1,r=(o[e+2]??0)+1;s.push(`f ${t}//${t} ${n}//${n} ${r}//${r}`)};if(r.faceGroups.length>0)for(let e of r.faceGroups){s.push(`g face_${e.faceHash}`);let t=e.count/3;for(let n=0;n<t;n++)u(e.start+n*3)}else{let e=o.length/3;for(let t=0;t<e;t++)u(t*3)}return new TextEncoder().encode(s.join(`
|
|
4
4
|
`)+`
|
|
5
5
|
`).buffer}function Ir(e,t,n){let r=e(t,{tolerance:n,angularTolerance:.5,skipNormals:!1}),i=r.vertices,a=r.normals,o=r.triangles,s=i.length/3,c=o.length/3,l=a.length===i.length,u=[`ply`,`format ascii 1.0`,`comment brepjs PLY export`,`element vertex ${s}`,`property float x`,`property float y`,`property float z`];l&&u.push(`property float nx`,`property float ny`,`property float nz`),u.push(`element face ${c}`,`property list uchar int vertex_index`,`end_header`);for(let e=0;e<s;e++){let t=e*3,n=i[t]??0,r=i[t+1]??0,o=i[t+2]??0;if(l){let e=a[t]??0,i=a[t+1]??0,s=a[t+2]??0;u.push(`${n} ${r} ${o} ${e} ${i} ${s}`)}else u.push(`${n} ${r} ${o}`)}for(let e=0;e<c;e++){let t=o[e*3]??0,n=o[e*3+1]??0,r=o[e*3+2]??0;u.push(`3 ${t} ${n} ${r}`)}return new TextEncoder().encode(u.join(`
|
|
6
6
|
`)+`
|
|
@@ -4205,4 +4205,4 @@ No matching component was found for:
|
|
|
4205
4205
|
|
|
4206
4206
|
gl_FragColor = vec4(lineColor, alpha);
|
|
4207
4207
|
}
|
|
4208
|
-
`;function ib({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,$.jsxs)(`mesh`,{rotation:[-Math.PI/2,0,0],position:[0,-.01,0],children:[(0,$.jsx)(`planeGeometry`,{args:[o,o]}),(0,$.jsx)(`shaderMaterial`,{ref:a,vertexShader:nb,fragmentShader:rb,uniforms:{cellSize:{value:e},lineColor:{value:new q(t)},lineOpacity:{value:n},fadeStart:{value:r},fadeEnd:{value:i}},transparent:!0,depthWrite:!1,side:2,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1})]})}function ab(){return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`hemisphereLight`,{args:[`#ffffff`,`#1a1a2e`,.65]}),(0,$.jsx)(`directionalLight`,{position:[-50,60,80],intensity:.85,color:`#fff8f0`}),(0,$.jsx)(`directionalLight`,{position:[40,-40,30],intensity:.15,color:`#e0e8ff`})]})}function ob({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,$.jsxs)($.Fragment,{children:[(0,$.jsx)(ab,{}),(0,$.jsx)(tb,{}),(0,$.jsx)(Ay,{makeDefault:!0,autoRotate:e,autoRotateSpeed:1.5,...s,...i}),n&&(0,$.jsx)(ib,{...r})]})}var sb={iso:new G(.6,.5,.6),front:new G(0,.3,1),top:new G(0,1,-.01),right:new G(1,.3,0)};function cb({data:e,view:t,fitSignal:n,projection:r,onFirstFrame:i}){let a=k_(e=>e.camera),o=k_(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 zi(new G,1),r={center:n.center.clone(),radius:n.radius||1};return t.dispose(),r},[e]);return(0,v.useEffect)(()=>{let e=sb[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 lb(){let e=k_(e=>e.camera);return(0,$.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 ub(){let e=k_(e=>e.gl);return(0,v.useEffect)(()=>(e.localClippingEnabled=!0,()=>{e.localClippingEnabled=!1}),[e]),null}function db({data:e,view:t=`iso`,fitSignal:n,autoRotate:r=!1,gridVisible:i=!0,projection:a=`perspective`,onFirstFrame:o,onError:s,errorFallback:c,children:l}){return(0,$.jsx)(By,{onError:s,fallback:c,children:(0,$.jsxs)(Qv,{frameloop:r?`always`:`demand`,gl:{preserveDrawingBuffer:!0},children:[(0,$.jsx)(ub,{}),a===`orthographic`&&(0,$.jsx)(lb,{}),(0,$.jsx)(ob,{autoRotate:r,gridVisible:i}),(0,$.jsx)(cb,{data:e,view:t,fitSignal:n,projection:a,onFirstFrame:o}),l]})})}var fb=[`iso`,`front`,`top`,`right`],pb={solid:`Solid`,wireframe:`Wire`,xray:`X-ray`},mb={iso:`Iso`,front:`Front`,top:`Top`,right:`Right`};function hb({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,$.jsxs)(`div`,{className:h,style:h?void 0:{...vb,gap:m?8:6},children:[(f||p)&&(0,$.jsxs)(gb,{touch:m,children:[f&&(0,$.jsx)(_b,{label:`Fit`,onClick:f,touch:m}),p&&(0,$.jsx)(_b,{label:`Snap`,onClick:p,touch:m})]}),e&&t&&(0,$.jsx)(gb,{touch:m,children:Object.keys(pb).map(n=>(0,$.jsx)(_b,{label:pb[n],active:e===n,touch:m,onClick:()=>{t(n)}},n))}),(r||a||s||l)&&(0,$.jsxs)(gb,{touch:m,children:[r&&(0,$.jsx)(_b,{label:`Edges`,active:n,onClick:r,touch:m}),a&&(0,$.jsx)(_b,{label:`Grid`,active:i,onClick:a,touch:m}),s&&(0,$.jsx)(_b,{label:`Spin`,active:o,onClick:s,touch:m}),l&&(0,$.jsx)(_b,{label:c===`orthographic`?`Ortho`:`Persp`,active:c===`orthographic`,touch:m,onClick:l})]}),d&&(0,$.jsx)(gb,{touch:m,children:fb.map(e=>(0,$.jsx)(_b,{label:mb[e],active:u===e,touch:m,onClick:()=>{d(e)}},e))})]})}function gb({children:e,touch:t}){return(0,$.jsx)(`div`,{style:t?Sb:yb,children:e})}function _b({label:e,active:t,onClick:n,touch:r}){return(0,$.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...r?Cb:bb,...t?xb:null},children:e})}var vb={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`},yb={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)`},bb={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`},xb={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`},Sb={...yb,gap:6,padding:6},Cb={...bb,padding:`9px 14px`,fontSize:13,borderRadius:6};function wb({dims:e,volume:t,area:n,triangles:r,valid:i,unit:a,className:o}){let s=a?` ${a}`:``,c=[];return e&&c.push((0,$.jsx)(Tb,{label:`Size`,value:`${Eb(e[0])} × ${Eb(e[1])} × ${Eb(e[2])}${s}`},`size`)),t!==void 0&&c.push((0,$.jsx)(Tb,{label:`Volume`,value:`${Eb(t)}${a?` ${a}³`:``}`},`vol`)),n!==void 0&&c.push((0,$.jsx)(Tb,{label:`Area`,value:`${Eb(n)}${a?` ${a}²`:``}`},`area`)),r!==void 0&&c.push((0,$.jsx)(Tb,{label:`Triangles`,value:r.toLocaleString()},`tris`)),i!==void 0&&c.push((0,$.jsx)(Tb,{label:`Validity`,value:i?`valid`:`invalid`,valueColor:i?`#6ee7d7`:`#f0a0a0`},`valid`)),c.length===0?null:(0,$.jsx)(`div`,{className:o,style:o?void 0:Db,children:c})}function Tb({label:e,value:t,valueColor:n}){return(0,$.jsxs)(`div`,{style:Ob,children:[(0,$.jsx)(`span`,{style:kb,children:e}),(0,$.jsx)(`span`,{style:{...Ab,...n?{color:n}:null},children:t})]})}function Eb(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}var Db={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`},Ob={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},kb={color:`#7b8591`},Ab={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},jb={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 Mb(e){return jb[e]??`Surface`}function Nb(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}function Pb({face:e,onClear:t,unit:n,className:r}){if(!e)return null;let[i,a,o]=e.normal;return(0,$.jsxs)(`div`,{className:r,style:r?void 0:Ib,children:[(0,$.jsxs)(`div`,{style:Lb,children:[(0,$.jsxs)(`span`,{style:Rb,children:[Mb(e.surfaceType),` face`]}),t&&(0,$.jsx)(`button`,{type:`button`,onClick:t,"aria-label":`Clear selection`,style:zb,children:`✕`})]}),(0,$.jsx)(Fb,{label:`Area`,value:`${Nb(e.area)}${n?` ${n}²`:``}`}),(0,$.jsx)(Fb,{label:`Normal`,value:`${Nb(i)}, ${Nb(a)}, ${Nb(o)}`})]})}function Fb({label:e,value:t}){return(0,$.jsxs)(`div`,{style:Bb,children:[(0,$.jsx)(`span`,{style:Vb,children:e}),(0,$.jsx)(`span`,{style:Hb,children:t})]})}var Ib={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`},Lb={display:`flex`,justifyContent:`space-between`,alignItems:`center`,gap:12,marginBottom:2},Rb={color:`#6ee7d7`,fontSize:12,fontWeight:600},zb={cursor:`pointer`,border:`none`,background:`transparent`,color:`#7b8591`,fontSize:12,lineHeight:1,padding:0},Bb={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},Vb={color:`#7b8591`},Hb={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},Ub=[`x`,`y`,`z`];function Wb({enabled:e,onToggle:t,axis:n,onAxisChange:r,position:i,min:a,max:o,onPositionChange:s,flip:c,onToggleFlip:l,className:u}){return(0,$.jsxs)(`div`,{className:u,style:u?void 0:Kb,children:[(0,$.jsx)(Gb,{label:`Section`,active:e,onClick:t}),e&&(0,$.jsxs)($.Fragment,{children:[Ub.map(e=>(0,$.jsx)(Gb,{label:e.toUpperCase(),active:n===e,onClick:()=>{r(e)}},e)),(0,$.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:{...Yb,...a===o?{opacity:.4}:null}}),(0,$.jsx)(Gb,{label:`Flip`,active:c,onClick:l})]})]})}function Gb({label:e,active:t,onClick:n}){return(0,$.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...qb,...t?Jb:null},children:e})}var Kb={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`},qb={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`},Jb={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`},Yb={width:160,accentColor:`#4ACECC`,margin:`0 4px`};function Xb(e){let t=new URLSearchParams(e),n=t.get(`file`);return n?{dir:t.get(`dir`),file:n}:null}function Zb(e){let t=e.lastIndexOf(`.`);return t===-1?``:e.slice(t).toLowerCase()}function Qb({inspect:e=!1}={}){let[t,n]=(0,v.useState)({status:`idle`});return(0,v.useEffect)(()=>{let t=Xb(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-DdISCcle.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:Zb(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 $b=[`iso`,`front`,`top`,`right`],ex=new Set;function tx(e){return $b.includes(e)}function nx(e){return ex.add(e),()=>ex.delete(e)}function rx(e){for(let t of ex)t(e)}function ix(){globalThis.__ready=!0}function ax(){let e=globalThis;e.__ready=!1,e.__renderView=e=>{tx(e)&&rx({view:e})},e.__setScene=e=>{e&&tx(e.view)&&rx(e)}}function ox({marks:e}){return(0,$.jsx)($.Fragment,{children:e.map((e,t)=>(0,$.jsx)(my,{position:[e.pos[0],e.pos[1],e.pos[2]],center:!0,children:(0,$.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 sx=new URLSearchParams(window.location.search),cx=sx.get(`ui`)!==`0`,lx=sx.get(`dims`)===`1`;function ux(){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 dx(){let e=Qb({inspect:cx}),[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)(()=>nx(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,$.jsxs)(`div`,{style:{color:`#e88`,padding:16,fontFamily:`monospace`},children:[`error: `,e.error]}):e.status===`ready`?(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(db,{data:e.data,view:t,fitSignal:p,autoRotate:l,gridVisible:s,projection:d,onFirstFrame:ix,children:[(0,$.jsx)(zy,{data:e.data,viewMode:r,...ie?{clippingPlanes:ie}:{},...cx?{onFacePick:ee,onFaceHover:j}:{}}),a&&r!==`wireframe`&&e.data.edges.length>0&&(0,$.jsx)(Uy,{edges:e.data.edges,...ie?{clippingPlanes:ie}:{}}),cx&&(0,$.jsx)(Zy,{data:e.data,selectedFaceIds:h?[h.faceId]:[],hoverFaceId:_}),O.length>0&&(0,$.jsx)(ox,{marks:O})]}),cx&&(0,$.jsx)(Pb,{face:h,onClear:()=>{g(null)}}),cx&&(0,$.jsx)(Wb,{enabled:b,onToggle:ne,axis:S,onAxisChange:re,position:w,min:N,max:P,onPositionChange:T,flip:E,onToggleFlip:()=>{D(e=>!e)}}),cx&&(0,$.jsx)(wb,{dims:Ny(e.data),volume:e.measurements.volume,area:e.measurements.area,triangles:e.data.index.length/3,valid:e.measurements.valid}),!cx&&lx&&(0,$.jsx)(wb,{dims:Ny(e.data)}),cx&&(0,$.jsx)(hb,{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:ux})]}):(0,$.jsx)(`div`,{style:{color:`#9aa`,padding:16,fontFamily:`monospace`},children:`loading model…`})}ax();var fx=document.getElementById(`root`);fx&&(0,y.createRoot)(fx).render((0,$.jsx)(v.StrictMode,{children:(0,$.jsx)(dx,{})}));
|
|
4208
|
+
`;function ib({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,$.jsxs)(`mesh`,{rotation:[-Math.PI/2,0,0],position:[0,-.01,0],children:[(0,$.jsx)(`planeGeometry`,{args:[o,o]}),(0,$.jsx)(`shaderMaterial`,{ref:a,vertexShader:nb,fragmentShader:rb,uniforms:{cellSize:{value:e},lineColor:{value:new q(t)},lineOpacity:{value:n},fadeStart:{value:r},fadeEnd:{value:i}},transparent:!0,depthWrite:!1,side:2,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1})]})}function ab(){return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`hemisphereLight`,{args:[`#ffffff`,`#1a1a2e`,.65]}),(0,$.jsx)(`directionalLight`,{position:[-50,60,80],intensity:.85,color:`#fff8f0`}),(0,$.jsx)(`directionalLight`,{position:[40,-40,30],intensity:.15,color:`#e0e8ff`})]})}function ob({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,$.jsxs)($.Fragment,{children:[(0,$.jsx)(ab,{}),(0,$.jsx)(tb,{}),(0,$.jsx)(Ay,{makeDefault:!0,autoRotate:e,autoRotateSpeed:1.5,...s,...i}),n&&(0,$.jsx)(ib,{...r})]})}var sb={iso:new G(.6,.5,.6),front:new G(0,.3,1),top:new G(0,1,-.01),right:new G(1,.3,0)};function cb({data:e,view:t,fitSignal:n,projection:r,onFirstFrame:i}){let a=k_(e=>e.camera),o=k_(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 zi(new G,1),r={center:n.center.clone(),radius:n.radius||1};return t.dispose(),r},[e]);return(0,v.useEffect)(()=>{let e=sb[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 lb(){let e=k_(e=>e.camera);return(0,$.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 ub(){let e=k_(e=>e.gl);return(0,v.useEffect)(()=>(e.localClippingEnabled=!0,()=>{e.localClippingEnabled=!1}),[e]),null}function db({data:e,view:t=`iso`,fitSignal:n,autoRotate:r=!1,gridVisible:i=!0,projection:a=`perspective`,onFirstFrame:o,onError:s,errorFallback:c,children:l}){return(0,$.jsx)(By,{onError:s,fallback:c,children:(0,$.jsxs)(Qv,{frameloop:r?`always`:`demand`,gl:{preserveDrawingBuffer:!0},children:[(0,$.jsx)(ub,{}),a===`orthographic`&&(0,$.jsx)(lb,{}),(0,$.jsx)(ob,{autoRotate:r,gridVisible:i}),(0,$.jsx)(cb,{data:e,view:t,fitSignal:n,projection:a,onFirstFrame:o}),l]})})}var fb=[`iso`,`front`,`top`,`right`],pb={solid:`Solid`,wireframe:`Wire`,xray:`X-ray`},mb={iso:`Iso`,front:`Front`,top:`Top`,right:`Right`};function hb({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,$.jsxs)(`div`,{className:h,style:h?void 0:{...vb,gap:m?8:6},children:[(f||p)&&(0,$.jsxs)(gb,{touch:m,children:[f&&(0,$.jsx)(_b,{label:`Fit`,onClick:f,touch:m}),p&&(0,$.jsx)(_b,{label:`Snap`,onClick:p,touch:m})]}),e&&t&&(0,$.jsx)(gb,{touch:m,children:Object.keys(pb).map(n=>(0,$.jsx)(_b,{label:pb[n],active:e===n,touch:m,onClick:()=>{t(n)}},n))}),(r||a||s||l)&&(0,$.jsxs)(gb,{touch:m,children:[r&&(0,$.jsx)(_b,{label:`Edges`,active:n,onClick:r,touch:m}),a&&(0,$.jsx)(_b,{label:`Grid`,active:i,onClick:a,touch:m}),s&&(0,$.jsx)(_b,{label:`Spin`,active:o,onClick:s,touch:m}),l&&(0,$.jsx)(_b,{label:c===`orthographic`?`Ortho`:`Persp`,active:c===`orthographic`,touch:m,onClick:l})]}),d&&(0,$.jsx)(gb,{touch:m,children:fb.map(e=>(0,$.jsx)(_b,{label:mb[e],active:u===e,touch:m,onClick:()=>{d(e)}},e))})]})}function gb({children:e,touch:t}){return(0,$.jsx)(`div`,{style:t?Sb:yb,children:e})}function _b({label:e,active:t,onClick:n,touch:r}){return(0,$.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...r?Cb:bb,...t?xb:null},children:e})}var vb={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`},yb={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)`},bb={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`},xb={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`},Sb={...yb,gap:6,padding:6},Cb={...bb,padding:`9px 14px`,fontSize:13,borderRadius:6};function wb({dims:e,volume:t,area:n,triangles:r,valid:i,unit:a,className:o}){let s=a?` ${a}`:``,c=[];return e&&c.push((0,$.jsx)(Tb,{label:`Size`,value:`${Eb(e[0])} × ${Eb(e[1])} × ${Eb(e[2])}${s}`},`size`)),t!==void 0&&c.push((0,$.jsx)(Tb,{label:`Volume`,value:`${Eb(t)}${a?` ${a}³`:``}`},`vol`)),n!==void 0&&c.push((0,$.jsx)(Tb,{label:`Area`,value:`${Eb(n)}${a?` ${a}²`:``}`},`area`)),r!==void 0&&c.push((0,$.jsx)(Tb,{label:`Triangles`,value:r.toLocaleString()},`tris`)),i!==void 0&&c.push((0,$.jsx)(Tb,{label:`Validity`,value:i?`valid`:`invalid`,valueColor:i?`#6ee7d7`:`#f0a0a0`},`valid`)),c.length===0?null:(0,$.jsx)(`div`,{className:o,style:o?void 0:Db,children:c})}function Tb({label:e,value:t,valueColor:n}){return(0,$.jsxs)(`div`,{style:Ob,children:[(0,$.jsx)(`span`,{style:kb,children:e}),(0,$.jsx)(`span`,{style:{...Ab,...n?{color:n}:null},children:t})]})}function Eb(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}var Db={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`},Ob={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},kb={color:`#7b8591`},Ab={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},jb={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 Mb(e){return jb[e]??`Surface`}function Nb(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}function Pb({face:e,onClear:t,unit:n,className:r}){if(!e)return null;let[i,a,o]=e.normal;return(0,$.jsxs)(`div`,{className:r,style:r?void 0:Ib,children:[(0,$.jsxs)(`div`,{style:Lb,children:[(0,$.jsxs)(`span`,{style:Rb,children:[Mb(e.surfaceType),` face`]}),t&&(0,$.jsx)(`button`,{type:`button`,onClick:t,"aria-label":`Clear selection`,style:zb,children:`✕`})]}),(0,$.jsx)(Fb,{label:`Area`,value:`${Nb(e.area)}${n?` ${n}²`:``}`}),(0,$.jsx)(Fb,{label:`Normal`,value:`${Nb(i)}, ${Nb(a)}, ${Nb(o)}`})]})}function Fb({label:e,value:t}){return(0,$.jsxs)(`div`,{style:Bb,children:[(0,$.jsx)(`span`,{style:Vb,children:e}),(0,$.jsx)(`span`,{style:Hb,children:t})]})}var Ib={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`},Lb={display:`flex`,justifyContent:`space-between`,alignItems:`center`,gap:12,marginBottom:2},Rb={color:`#6ee7d7`,fontSize:12,fontWeight:600},zb={cursor:`pointer`,border:`none`,background:`transparent`,color:`#7b8591`,fontSize:12,lineHeight:1,padding:0},Bb={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},Vb={color:`#7b8591`},Hb={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},Ub=[`x`,`y`,`z`];function Wb({enabled:e,onToggle:t,axis:n,onAxisChange:r,position:i,min:a,max:o,onPositionChange:s,flip:c,onToggleFlip:l,className:u}){return(0,$.jsxs)(`div`,{className:u,style:u?void 0:Kb,children:[(0,$.jsx)(Gb,{label:`Section`,active:e,onClick:t}),e&&(0,$.jsxs)($.Fragment,{children:[Ub.map(e=>(0,$.jsx)(Gb,{label:e.toUpperCase(),active:n===e,onClick:()=>{r(e)}},e)),(0,$.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:{...Yb,...a===o?{opacity:.4}:null}}),(0,$.jsx)(Gb,{label:`Flip`,active:c,onClick:l})]})]})}function Gb({label:e,active:t,onClick:n}){return(0,$.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...qb,...t?Jb:null},children:e})}var Kb={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`},qb={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`},Jb={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`},Yb={width:160,accentColor:`#4ACECC`,margin:`0 4px`};function Xb(e){let t=new URLSearchParams(e),n=t.get(`file`);return n?{dir:t.get(`dir`),file:n}:null}function Zb(e){let t=e.lastIndexOf(`.`);return t===-1?``:e.slice(t).toLowerCase()}function Qb({inspect:e=!1}={}){let[t,n]=(0,v.useState)({status:`idle`});return(0,v.useEffect)(()=>{let t=Xb(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-N7aAQ5N0.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:Zb(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 $b=[`iso`,`front`,`top`,`right`],ex=new Set;function tx(e){return $b.includes(e)}function nx(e){return ex.add(e),()=>ex.delete(e)}function rx(e){for(let t of ex)t(e)}function ix(){globalThis.__ready=!0}function ax(){let e=globalThis;e.__ready=!1,e.__renderView=e=>{tx(e)&&rx({view:e})},e.__setScene=e=>{e&&tx(e.view)&&rx(e)}}function ox({marks:e}){return(0,$.jsx)($.Fragment,{children:e.map((e,t)=>(0,$.jsx)(my,{position:[e.pos[0],e.pos[1],e.pos[2]],center:!0,children:(0,$.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 sx=new URLSearchParams(window.location.search),cx=sx.get(`ui`)!==`0`,lx=sx.get(`dims`)===`1`;function ux(){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 dx(){let e=Qb({inspect:cx}),[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)(()=>nx(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,$.jsxs)(`div`,{style:{color:`#e88`,padding:16,fontFamily:`monospace`},children:[`error: `,e.error]}):e.status===`ready`?(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(db,{data:e.data,view:t,fitSignal:p,autoRotate:l,gridVisible:s,projection:d,onFirstFrame:ix,children:[(0,$.jsx)(zy,{data:e.data,viewMode:r,...ie?{clippingPlanes:ie}:{},...cx?{onFacePick:ee,onFaceHover:j}:{}}),a&&r!==`wireframe`&&e.data.edges.length>0&&(0,$.jsx)(Uy,{edges:e.data.edges,...ie?{clippingPlanes:ie}:{}}),cx&&(0,$.jsx)(Zy,{data:e.data,selectedFaceIds:h?[h.faceId]:[],hoverFaceId:_}),O.length>0&&(0,$.jsx)(ox,{marks:O})]}),cx&&(0,$.jsx)(Pb,{face:h,onClear:()=>{g(null)}}),cx&&(0,$.jsx)(Wb,{enabled:b,onToggle:ne,axis:S,onAxisChange:re,position:w,min:N,max:P,onPositionChange:T,flip:E,onToggleFlip:()=>{D(e=>!e)}}),cx&&(0,$.jsx)(wb,{dims:Ny(e.data),volume:e.measurements.volume,area:e.measurements.area,triangles:e.data.index.length/3,valid:e.measurements.valid}),!cx&&lx&&(0,$.jsx)(wb,{dims:Ny(e.data)}),cx&&(0,$.jsx)(hb,{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:ux})]}):(0,$.jsx)(`div`,{style:{color:`#9aa`,padding:16,fontFamily:`monospace`},children:`loading model…`})}ax();var fx=document.getElementById(`root`);fx&&(0,y.createRoot)(fx).render((0,$.jsx)(v.StrictMode,{children:(0,$.jsx)(dx,{})}));
|
|
@@ -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-BLx47Epg.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
|
Binary file
|