forgecad 0.6.3 → 0.8.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.
Files changed (234) hide show
  1. package/README.md +3 -12
  2. package/dist/assets/{AdminPage-CeqCUUgu.js → AdminPage-D4bocK4E.js} +250 -151
  3. package/dist/assets/{BlogPage-P_AJP0v9.js → BlogPage-CJEXL_zJ.js} +94 -70
  4. package/dist/assets/{DocsPage-CKRV2iq2.js → DocsPage-D3A_g8V3.js} +329 -163
  5. package/dist/assets/{EditorApp-CnC2k4cW.css → EditorApp-BWYUSpUN.css} +590 -136
  6. package/dist/assets/EditorApp-Cihhqcsq.js +11692 -0
  7. package/dist/assets/{EmbedViewer-DBlzmQ5i.js → EmbedViewer-kWjKaC_t.js} +2 -4
  8. package/dist/assets/LandingPageProofDriven-Bg2IUc3l.css +856 -0
  9. package/dist/assets/LandingPageProofDriven-DXkKlyhI.js +601 -0
  10. package/dist/assets/PricingPage-BsU5vzEx.js +232 -0
  11. package/dist/assets/{SettingsPage-BqCh9JcC.js → SettingsPage-PqvpAKIs.js} +129 -5
  12. package/dist/assets/{evalWorker-Ql-aKwLA.js → evalWorker-C-hzNUMy.js} +8949 -3161
  13. package/dist/assets/{Viewport-CoB46f5R.js → index-Pz321YAt.js} +38382 -7501
  14. package/dist/assets/{index-2hfs_ub0.css → index-ay13WNfa.css} +726 -53
  15. package/dist/assets/{javascript-DCxGoE5Y.js → javascript-DAl8Gmyo.js} +1 -1
  16. package/dist/assets/{manifold-CqNMHHKO.js → manifold-BcbjWLIo.js} +4 -3
  17. package/dist/assets/{manifold-Cce9wRFz.js → manifold-DBckbFgx.js} +1 -1
  18. package/dist/assets/{manifold-D6BeHIOo.js → manifold-O2AAGXyj.js} +1 -1
  19. package/dist/assets/{reportWorker-sFEFonXf.js → reportWorker-Dxr-5A7w.js} +8760 -3559
  20. package/dist/assets/{vendor-react-Dt7-aaJH.js → vendor-react-CG3i_wp0.js} +65 -8
  21. package/dist/docs/index.html +2 -2
  22. package/dist/docs-raw/CLI.md +341 -718
  23. package/dist/docs-raw/generated/assembly.md +699 -112
  24. package/dist/docs-raw/generated/concepts.md +1834 -1346
  25. package/dist/docs-raw/generated/core.md +1012 -1059
  26. package/dist/docs-raw/generated/curves.md +759 -116
  27. package/dist/docs-raw/generated/lib.md +43 -748
  28. package/dist/docs-raw/generated/output.md +139 -245
  29. package/dist/docs-raw/generated/sdf.md +208 -0
  30. package/dist/docs-raw/generated/sheet-metal.md +473 -21
  31. package/dist/docs-raw/generated/sketch.md +1518 -362
  32. package/dist/docs-raw/generated/viewport.md +368 -299
  33. package/dist/docs-raw/generated/wood.md +104 -0
  34. package/dist/index.html +2 -2
  35. package/dist/landing/proof-ams-adapter.png +0 -0
  36. package/dist/landing/proof-bolt-and-nut.png +0 -0
  37. package/dist/landing/proof-fillet-enclosure.png +0 -0
  38. package/dist/landing/proof-glasses.png +0 -0
  39. package/dist/landing/proof-gyroid.png +0 -0
  40. package/dist/sitemap.xml +6 -6
  41. package/dist-cli/forgecad.js +12321 -5700
  42. package/dist-cli/forgecad.js.map +1 -0
  43. package/dist-cli/solver-46FFSK2U.js +363 -0
  44. package/dist-cli/solver-46FFSK2U.js.map +1 -0
  45. package/dist-skill/CONTEXT.md +4890 -6302
  46. package/dist-skill/SKILL-dev.md +22 -66
  47. package/dist-skill/SKILL.md +20 -59
  48. package/dist-skill/docs/API/core/concepts.md +37 -92
  49. package/dist-skill/docs/CLI.md +341 -718
  50. package/dist-skill/docs/generated/assembly.md +699 -112
  51. package/dist-skill/docs/generated/core.md +1012 -1059
  52. package/dist-skill/docs/generated/curves.md +759 -116
  53. package/dist-skill/docs/generated/lib.md +43 -748
  54. package/dist-skill/docs/generated/output.md +139 -245
  55. package/dist-skill/docs/generated/sdf.md +208 -0
  56. package/dist-skill/docs/generated/sheet-metal.md +473 -21
  57. package/dist-skill/docs/generated/sketch.md +1518 -362
  58. package/dist-skill/docs/generated/viewport.md +368 -299
  59. package/dist-skill/docs/generated/wood.md +104 -0
  60. package/dist-skill/docs/guides/coordinate-system.md +11 -17
  61. package/dist-skill/docs/guides/geometry-conventions.md +13 -70
  62. package/dist-skill/docs/guides/joint-design.md +78 -0
  63. package/dist-skill/docs/guides/modeling-recipes.md +22 -195
  64. package/dist-skill/docs/guides/positioning.md +88 -147
  65. package/dist-skill/docs-dev/API/core/concepts.md +78 -0
  66. package/dist-skill/docs-dev/CLI.md +488 -0
  67. package/dist-skill/{docs → docs-dev}/blueprint-first.md +5 -0
  68. package/dist-skill/{docs → docs-dev}/coding-best-practices.md +6 -8
  69. package/dist-skill/{docs → docs-dev}/coding.md +2 -4
  70. package/dist-skill/docs-dev/component-model.md +164 -0
  71. package/dist-skill/docs-dev/generated/assembly.md +779 -0
  72. package/dist-skill/docs-dev/generated/core.md +1676 -0
  73. package/dist-skill/docs-dev/generated/curves.md +855 -0
  74. package/dist-skill/docs-dev/generated/lib.md +55 -0
  75. package/dist-skill/docs-dev/generated/output.md +234 -0
  76. package/dist-skill/docs-dev/generated/sdf.md +208 -0
  77. package/dist-skill/docs-dev/generated/sheet-metal.md +506 -0
  78. package/dist-skill/docs-dev/generated/sketch.md +1753 -0
  79. package/dist-skill/docs-dev/generated/viewport.md +513 -0
  80. package/dist-skill/docs-dev/generated/wood.md +104 -0
  81. package/dist-skill/docs-dev/guides/coordinate-system.md +46 -0
  82. package/dist-skill/docs-dev/guides/geometry-conventions.md +52 -0
  83. package/dist-skill/docs-dev/guides/joint-design.md +78 -0
  84. package/dist-skill/docs-dev/guides/modeling-recipes.md +77 -0
  85. package/dist-skill/docs-dev/guides/positioning.md +151 -0
  86. package/dist-skill/{docs → docs-dev}/guides/skill-maintenance.md +21 -10
  87. package/dist-skill/{docs → docs-dev}/internals/compiler.md +5 -6
  88. package/dist-skill/{docs → docs-dev}/internals/constraint-solver-quality.md +0 -1
  89. package/dist-skill/{docs → docs-dev}/internals/constraint-solver.md +0 -1
  90. package/dist-skill/{docs → docs-dev}/internals/sketch-2d-pipeline.md +2 -3
  91. package/examples/api/attachTo-basics.forge.js +8 -8
  92. package/examples/api/bill-of-materials.forge.js +9 -9
  93. package/examples/api/bolt-pattern.forge.js +5 -5
  94. package/examples/api/boolean-operations.forge.js +5 -5
  95. package/examples/api/bounding-box-visualizer.forge.js +3 -3
  96. package/examples/api/clone-duplicate.forge.js +2 -2
  97. package/examples/api/colors-union-vs-array.forge.js +6 -6
  98. package/examples/api/connector-assembly.forge.js +8 -6
  99. package/examples/api/connector-basics.forge.js +7 -7
  100. package/examples/api/constrained-sketch-mechanical.forge.js +4 -4
  101. package/examples/api/elbow-test.forge.js +3 -3
  102. package/examples/api/extrude-options.forge.js +8 -14
  103. package/examples/api/feature-created-faces.forge.js +6 -10
  104. package/examples/api/fillet-showcase.forge.js +2 -2
  105. package/examples/api/folded-service-panel-cover.forge.js +2 -2
  106. package/examples/api/gears-tier1.forge.js +5 -5
  107. package/examples/api/group-test.forge.js +3 -3
  108. package/examples/api/group-vs-union.forge.js +1 -1
  109. package/examples/api/highlight-debug.forge.js +4 -0
  110. package/examples/api/js-module-pillars.js +1 -1
  111. package/examples/api/js-module-scene.js +2 -2
  112. package/examples/api/mesh-import-slats.forge.js +4 -4
  113. package/examples/api/patterns.forge.js +3 -3
  114. package/examples/api/pointAlong-orientation.forge.js +3 -3
  115. package/examples/api/profile-2020-b-slot6.forge.js +4 -5
  116. package/examples/api/route-perimeter-flange.forge.js +1 -1
  117. package/examples/api/sdf-rover-demo.forge.js +10 -10
  118. package/examples/api/sketch-on-face-demo.forge.js +2 -2
  119. package/examples/api/sketch-regions.forge.js +4 -4
  120. package/examples/api/sketch-rounding-strategies.forge.js +1 -1
  121. package/examples/api/smooth-curve-connections.forge.js +1 -1
  122. package/examples/api/transition-curves.forge.js +4 -4
  123. package/examples/api/variable-sweep-pure-sdf-test.forge.js +162 -0
  124. package/examples/api/variable-sweep-test.forge.js +2 -2
  125. package/examples/api/wood-joinery.forge.js +60 -0
  126. package/examples/compiler-corpus/enclosure-shell-cuts.forge.js +3 -3
  127. package/examples/compiler-corpus/fastener-plate-variants.forge.js +2 -2
  128. package/examples/constraints/01-fully-constrained-rect.forge.js +2 -2
  129. package/examples/constraints/02-underconstrained-triangle.forge.js +1 -1
  130. package/examples/constraints/03-redundant-constraints.forge.js +2 -2
  131. package/examples/constraints/05-parallel-with-linedistance.forge.js +2 -2
  132. package/examples/constraints/06-complex-spectrogram.forge.js +1 -1
  133. package/examples/constraints/07-perpendicular-chain.forge.js +4 -4
  134. package/examples/constraints/08-symmetric-bracket.forge.js +4 -4
  135. package/examples/constraints/09-stress-spiral.forge.js +1 -1
  136. package/examples/constraints/10-stress-honeycomb.forge.js +1 -1
  137. package/examples/constraints/11-surface-grid.forge.js +2 -2
  138. package/examples/constraints/12-surface-nested.forge.js +4 -4
  139. package/examples/constraints/13-surface-complex.forge.js +1 -1
  140. package/examples/exact-arc-housing.forge.js +12 -0
  141. package/examples/experiments/drone-arm.forge.js +53 -0
  142. package/examples/furniture/adjustable-table.forge.js +15 -15
  143. package/examples/furniture/bathroom.forge.js +26 -26
  144. package/examples/furniture/chair.forge.js +13 -13
  145. package/examples/furniture/picture-frame.forge.js +6 -6
  146. package/examples/furniture/shoe-rack-doors.forge.js +8 -8
  147. package/examples/furniture/shoe-rack.forge.js +7 -7
  148. package/examples/furniture/table-lamp.forge.js +8 -8
  149. package/examples/gcode/lissajous-vase.forge.js +4 -4
  150. package/examples/gcode/math-surface.forge.js +3 -3
  151. package/examples/gcode/parametric-vase.forge.js +4 -4
  152. package/examples/gcode/spiral-tower.forge.js +4 -4
  153. package/examples/generative/crystal-growth.forge.js +9 -9
  154. package/examples/generative/frost-spires.forge.js +9 -9
  155. package/examples/generative/golden-spiral-tower.forge.js +11 -11
  156. package/examples/generative/molten-forge.forge.js +6 -6
  157. package/examples/generative/neon-coral.forge.js +7 -7
  158. package/examples/mechanical/3d-printer.forge.js +37 -37
  159. package/examples/mechanical/5-finger-robot-hand.forge.js +19 -19
  160. package/examples/mechanical/airplane-propeller.forge.js +9 -9
  161. package/examples/mechanical/bolt-and-nut.forge.js +10 -10
  162. package/examples/mechanical/door-with-hinges.forge.js +7 -7
  163. package/examples/mechanical/fillet-enclosure.forge.js +15 -11
  164. package/examples/mechanical/headphone-hanger-v2.forge.js +11 -11
  165. package/examples/mechanical/robot_hand.forge.js +24 -24
  166. package/examples/mechanical/robot_hand_2.forge.js +26 -26
  167. package/examples/nurbs-surface.forge.js +8 -0
  168. package/examples/nurbs-tube.forge.js +7 -0
  169. package/examples/products/bottle.forge.js +8 -8
  170. package/examples/products/chess-set.forge.js +25 -25
  171. package/examples/products/classical-piano.forge.js +20 -20
  172. package/examples/products/clock.forge.js +33 -33
  173. package/examples/products/cup.forge.js +5 -5
  174. package/examples/products/iphone.forge.js +20 -20
  175. package/examples/products/laptop.forge.js +24 -24
  176. package/examples/products/laser-cut-box.forge.js +6 -6
  177. package/examples/products/laser-cut-tray.forge.js +6 -6
  178. package/examples/products/liquid-soap-dispenser.forge.js +23 -23
  179. package/examples/products/origami-fish.forge.js +14 -12
  180. package/examples/products/spiderman-cake.forge.js +6 -6
  181. package/examples/shelf/container.forge.js +5 -5
  182. package/examples/shelf/shelf-unit.forge.js +6 -6
  183. package/examples/toolbox/bolted-joint.forge.js +7 -7
  184. package/package.json +9 -4
  185. package/dist/assets/EditorApp-B-vQvgam.js +0 -9888
  186. package/dist/assets/LandingPage-C5n9hDXI.js +0 -322
  187. package/dist/assets/PublishedModelPage-Dt7PCVBj.js +0 -146
  188. package/dist/assets/__vite-browser-external-CURh0WXD.js +0 -8
  189. package/dist/assets/deserializeRunResult-BLAFoiE0.js +0 -19365
  190. package/dist/assets/index-1CYp3zUp.js +0 -1455
  191. package/dist-skill/docs/API/API.md +0 -1666
  192. package/dist-skill/docs/API/README.md +0 -37
  193. package/dist-skill/docs/API/assembly/assembly.md +0 -617
  194. package/dist-skill/docs/API/core/edge-queries.md +0 -130
  195. package/dist-skill/docs/API/core/parameters.md +0 -122
  196. package/dist-skill/docs/API/core/reserved-terms.md +0 -137
  197. package/dist-skill/docs/API/core/sdf.md +0 -326
  198. package/dist-skill/docs/API/core/skill-cli.md +0 -194
  199. package/dist-skill/docs/API/core/skill-guide.md +0 -205
  200. package/dist-skill/docs/API/core/specs.md +0 -186
  201. package/dist-skill/docs/API/core/topology.md +0 -372
  202. package/dist-skill/docs/API/entities.md +0 -268
  203. package/dist-skill/docs/API/output/bom.md +0 -58
  204. package/dist-skill/docs/API/output/brep-export.md +0 -87
  205. package/dist-skill/docs/API/output/dimensions.md +0 -67
  206. package/dist-skill/docs/API/output/export.md +0 -110
  207. package/dist-skill/docs/API/output/gcode.md +0 -195
  208. package/dist-skill/docs/API/runtime/viewport.md +0 -420
  209. package/dist-skill/docs/API/sheet-metal/sheet-metal.md +0 -185
  210. package/dist-skill/docs/API/sketch/anchor.md +0 -37
  211. package/dist-skill/docs/API/sketch/booleans.md +0 -91
  212. package/dist-skill/docs/API/sketch/core.md +0 -73
  213. package/dist-skill/docs/API/sketch/extrude.md +0 -62
  214. package/dist-skill/docs/API/sketch/on-face.md +0 -104
  215. package/dist-skill/docs/API/sketch/operations.md +0 -78
  216. package/dist-skill/docs/API/sketch/path.md +0 -75
  217. package/dist-skill/docs/API/sketch/primitives.md +0 -146
  218. package/dist-skill/docs/API/sketch/regions.md +0 -80
  219. package/dist-skill/docs/API/sketch/text.md +0 -108
  220. package/dist-skill/docs/API/sketch/transforms.md +0 -65
  221. package/dist-skill/docs/API/toolbox/fasteners.md +0 -129
  222. package/dist-skill/docs/INDEX.md +0 -94
  223. package/dist-skill/docs/RELEASING.md +0 -55
  224. package/dist-skill/docs/cli-monetization.md +0 -111
  225. package/dist-skill/docs/deployment.md +0 -281
  226. package/dist-skill/docs/generated/concepts.md +0 -2112
  227. package/dist-skill/docs/internals/shape-from-slices.md +0 -152
  228. package/dist-skill/docs/platform/admin.md +0 -45
  229. package/dist-skill/docs/platform/architecture.md +0 -79
  230. package/dist-skill/docs/platform/auth.md +0 -110
  231. package/dist-skill/docs/platform/email.md +0 -67
  232. package/dist-skill/docs/platform/projects.md +0 -111
  233. package/dist-skill/docs/platform/sharing.md +0 -90
  234. package/dist-skill/docs/runbook.md +0 -345
@@ -1,130 +0,0 @@
1
- ---
2
- skill-group: core
3
- skill-order: 4
4
- ---
5
-
6
- # Edge Queries
7
-
8
- Select and operate on edges of any 3D shape by geometric properties — direction, position, angle, convexity. This is the primary way to apply fillets and chamfers to specific edges without needing tracked topology.
9
-
10
- ## Selecting Edges
11
-
12
- ### `selectEdges(shape, query?)`
13
-
14
- Find all edges that match a geometric query. Edges are extracted from the mesh as sharp features (dihedral angle > 1°).
15
-
16
- **Parameters:**
17
- - `shape` (Shape | TrackedShape) — The solid to query
18
- - `query` (EdgeQuery, optional) — Filters to apply (see below)
19
-
20
- **Returns:** `EdgeSegment[]` — Matching edge segments
21
-
22
- ### `selectEdge(shape, query?)`
23
-
24
- Find the single best-matching edge. When `near` is specified, returns the closest match. Throws if no edges match.
25
-
26
- **Parameters:** Same as `selectEdges()`
27
-
28
- **Returns:** `EdgeSegment` — The best-matching edge
29
-
30
- **Throws:** If no edges match the query
31
-
32
- ### EdgeQuery Filters
33
-
34
- | Filter | Type | Description |
35
- |--------|------|-------------|
36
- | `near` | `[x, y, z]` | Sort by proximity to this point (closest first) |
37
- | `parallel` | `[x, y, z]` | Edge direction ~parallel to this vector |
38
- | `perpendicular` | `[x, y, z]` | Edge direction ~perpendicular to this vector |
39
- | `convex` | `boolean` | Only convex (outside corner) edges |
40
- | `concave` | `boolean` | Only concave (inside corner) edges |
41
- | `minAngle` | `number` | Minimum dihedral angle (degrees) |
42
- | `maxAngle` | `number` | Maximum dihedral angle (degrees) |
43
- | `minLength` | `number` | Minimum edge length |
44
- | `maxLength` | `number` | Maximum edge length |
45
- | `within` | `BoundingRegion` | Edge midpoint must be inside this box |
46
- | `atZ` | `number` | Edge midpoint Z ≈ this value (shorthand for `within`) |
47
- | `tolerance` | `number` | Position tolerance. Default: `1.0` |
48
- | `angleTolerance` | `number` | Angular tolerance in degrees. Default: `10` |
49
-
50
- **BoundingRegion:** `{ xMin?, xMax?, yMin?, yMax?, zMin?, zMax? }` — any combination of axis bounds.
51
-
52
- ```javascript
53
- const part = box(50, 30, 20);
54
-
55
- // All vertical edges
56
- const verticals = selectEdges(part, { parallel: [0, 0, 1] });
57
-
58
- // Top-face edges only
59
- const topEdges = selectEdges(part, { atZ: 20 });
60
-
61
- // Nearest convex edge to a point
62
- const nearest = selectEdge(part, { near: [50, 30, 20], convex: true });
63
- ```
64
-
65
- ### `coalesceEdges(segments, tolerance?)`
66
-
67
- Merge collinear edge segments into longer logical edges. Mesh tessellation often splits a single geometric edge into multiple short segments — this function recombines them.
68
-
69
- **Parameters:**
70
- - `segments` (EdgeSegment[]) — Edge segments to merge
71
- - `tolerance` (number) — Collinearity tolerance. Default: `0.01`
72
-
73
- **Returns:** `EdgeSegment[]` — Merged edge segments
74
-
75
- ```javascript
76
- const edges = selectEdges(shape, { parallel: [0, 0, 1] });
77
- const merged = coalesceEdges(edges);
78
- // merged has fewer, longer edges
79
- ```
80
-
81
- ## Applying Features
82
-
83
- ### `filletEdgeSegment(shape, segment, radius, segments?)`
84
-
85
- Apply a fillet (rounded edge) to a mesh-selected edge. Works on any straight edge — not limited to tracked topology.
86
-
87
- **Parameters:**
88
- - `shape` (Shape | TrackedShape) — The solid to modify
89
- - `segment` (EdgeSegment) — From `selectEdge()` / `selectEdges()`
90
- - `radius` (number) — Fillet radius
91
- - `segments` (number) — Arc segments. Default: `16`
92
-
93
- **Returns:** `Shape` — New shape with fillet applied
94
-
95
- ### `chamferEdgeSegment(shape, segment, size)`
96
-
97
- Apply a chamfer (beveled edge) to a mesh-selected edge.
98
-
99
- **Parameters:**
100
- - `shape` (Shape | TrackedShape) — The solid to modify
101
- - `segment` (EdgeSegment) — From `selectEdge()` / `selectEdges()`
102
- - `size` (number) — Chamfer distance from edge
103
-
104
- **Returns:** `Shape` — New shape with chamfer applied
105
-
106
- ```javascript
107
- const part = box(50, 30, 20);
108
-
109
- // Fillet all top edges
110
- const topEdges = selectEdges(part, { atZ: 20, perpendicular: [0, 0, 1] });
111
- let result = part;
112
- for (const edge of coalesceEdges(topEdges)) {
113
- result = filletEdgeSegment(result, edge, 2);
114
- }
115
-
116
- // Chamfer a single bottom edge
117
- const bottomEdge = selectEdge(part, { near: [25, 0, 0], atZ: 0 });
118
- result = chamferEdgeSegment(result, bottomEdge, 1.5);
119
- ```
120
-
121
- > **Callout:** These functions work alongside the tracked-topology `filletEdge()` and `chamferEdge()` (which take an `EdgeRef` from a `TrackedShape`). Use edge queries when you don't have tracked topology — e.g., after boolean operations that strip topology, or on imported shapes.
122
-
123
- ## Comparison: Edge Queries vs. Tracked Topology
124
-
125
- | Approach | Input | When to use |
126
- |----------|-------|-------------|
127
- | `filletEdge(shape, edge, radius)` | `EdgeRef` from `TrackedShape` | Simple boxes/cylinders, before booleans |
128
- | `filletEdgeSegment(shape, segment, radius)` | `EdgeSegment` from `selectEdge()` | After booleans, complex shapes, imported geometry |
129
-
130
- Both produce the same result — the query-based approach is more flexible but requires describing the edge geometrically instead of by name.
@@ -1,122 +0,0 @@
1
- ---
2
- skill-group: core
3
- skill-order: 2
4
- ---
5
-
6
- # Parameters
7
-
8
- ForgeCAD scripts declare parameters that automatically generate UI controls (sliders, checkboxes, dropdowns). Parameters make models interactive — change a value, see the geometry update.
9
-
10
- ## `param(name, default, options?)`
11
-
12
- Declare a numeric parameter. Creates a slider in the UI.
13
-
14
- **Parameters:**
15
- - `name` (string) — Display name in the parameter panel
16
- - `default` (number) — Initial value
17
- - `options` (object, optional):
18
- - `min` (number) — Minimum slider value. Default: `0`
19
- - `max` (number) — Maximum slider value. Default: `default * 4`
20
- - `step` (number) — Slider increment. Auto-calculated if omitted
21
- - `unit` (string) — Display unit label, e.g. `"mm"`, `"°"`, `"%"`
22
- - `integer` (boolean) — Round to whole numbers; step defaults to `1`. Use for counts, sides, quantities
23
- - `reverse` (boolean) — Invert the slider direction
24
-
25
- **Returns:** `number` — Current parameter value (default or overridden)
26
-
27
- ```javascript
28
- const width = param("Width", 50);
29
- const angle = param("Angle", 45, { min: 0, max: 180, unit: "°" });
30
- const thick = param("Thickness", 2, { min: 0.5, max: 10, step: 0.5, unit: "mm" });
31
- const sides = param("Sides", 6, { min: 3, max: 12, integer: true });
32
- ```
33
-
34
- ## `boolParam(name, default)`
35
-
36
- Declare a boolean parameter. Creates a checkbox in the UI.
37
-
38
- **Parameters:**
39
- - `name` (string) — Display name in the parameter panel
40
- - `default` (boolean) — Initial checkbox state
41
-
42
- **Returns:** `boolean` — Current boolean value
43
-
44
- ```javascript
45
- const showHoles = boolParam("Show Holes", true);
46
- const centerOrigin = boolParam("Center at Origin", false);
47
-
48
- // Conditional geometry
49
- const plate = box(100, 60, 5);
50
- if (showHoles) {
51
- return difference(plate, cylinder(10, 5).translate(50, 30, 0));
52
- }
53
- return plate;
54
- ```
55
-
56
- > **Callout:** `boolParam` was added to complement `param()` for on/off toggles. It renders as a checkbox rather than a slider. Internally the boolean is stored as `0`/`1`.
57
-
58
- ## `choiceParam(name, default, choices)`
59
-
60
- Declare a string choice parameter. Creates a dropdown in the UI.
61
-
62
- **Parameters:**
63
- - `name` (string) — Display name in the parameter panel
64
- - `default` (string) — Initial selected label. Must exactly match one of the entries in `choices`
65
- - `choices` (string[]) — Ordered list of allowed labels shown in the dropdown
66
-
67
- **Returns:** `string` — The currently selected choice label
68
-
69
- ```javascript
70
- const panStyle = choiceParam("Pan Style", "frying-pan", [
71
- "frying-pan",
72
- "saute-pan",
73
- "saucepan",
74
- "wok",
75
- ]);
76
-
77
- const finish = choiceParam("Finish", "stainless", [
78
- "stainless",
79
- "cast-iron",
80
- "copper",
81
- ]);
82
-
83
- if (panStyle === "wok") {
84
- return buildWok();
85
- }
86
- return buildPan();
87
- ```
88
-
89
- Use `choiceParam()` when a numeric slider would hide intent. It keeps scripts readable and makes CLI/import overrides self-describing.
90
-
91
- ## Parameter Overrides
92
-
93
- When importing files with `require()`, you can override their parameters via an optional second argument:
94
-
95
- ```javascript
96
- const bracket = require("./bracket.forge.js", { Width: 80, Thickness: 3 });
97
- const logo = require("./logo.forge.js", { Scale: 0.5 });
98
- const pan = require("./pan.forge.js", { "Pan Style": "wok", "Show Lid": 0 });
99
- ```
100
-
101
- You can also override parameters from the CLI:
102
-
103
- ```bash
104
- forgecad run model.forge.js --param "Wall Thickness=3"
105
- forgecad run model.forge.js --param "Show Lid=0"
106
- forgecad run model.forge.js --param "Pan Style=wok"
107
- ```
108
-
109
- Override keys must match the `name` string passed to `param()`, `boolParam()`, or `choiceParam()` in the script.
110
-
111
- - `param()` expects a number
112
- - `boolParam()` expects `1`/`0` or `true`/`false` semantics via the UI; in CLI/import overrides, use `1` for true and `0` for false
113
- - `choiceParam()` accepts either the string label or a numeric index, but the string label is recommended because it is clearer and more stable
114
-
115
- Use `importSvgSketch()` for SVG files (SVG import does not use param overrides).
116
-
117
- ## Tips
118
-
119
- - **Avoid recomputation**: Parameters trigger a full script re-execution on every change. Keep expensive operations behind boolean guards when possible.
120
- - **Use `integer: true`** for discrete quantities (bolt count, polygon sides, array copies) — it prevents fractional values that would produce invalid geometry.
121
- - **Unit labels are cosmetic**: The `unit` option only affects the UI display; it does not convert values.
122
- - **Prefer `choiceParam()` for presets and named modes**: dropdown labels such as `"wok"` or `"saute-pan"` are easier to understand than numeric style ids.
@@ -1,137 +0,0 @@
1
- ---
2
- skill-group: core
3
- skill-order: 0
4
- skill-tiers: [standard, one-file]
5
- ---
6
-
7
- # Reserved Terms
8
-
9
- Every `.forge.js` script runs in a sandbox with these names pre-defined as globals.
10
- **Do not use any of these as variable, parameter, or function names** — your local
11
- definition will shadow the built-in and silently break things.
12
-
13
- ## Module system
14
-
15
- `exports`, `module`, `require`, `__filename`, `__dirname`
16
-
17
- ## Primitives (3D)
18
-
19
- `box`, `cylinder`, `sphere`, `torus`
20
-
21
- ## Boolean operations (3D)
22
-
23
- `union`, `difference`, `intersection`
24
-
25
- ## Boolean operations (2D)
26
-
27
- `union2d`, `difference2d`, `intersection2d`
28
-
29
- ## Sketch primitives
30
-
31
- `rect`, `arcSlot`, `circle2d`, `roundedRect`, `polygon`, `polygonVertices`, `ngon`, `ellipse`, `slot`, `star`, `path`, `stroke`
32
-
33
- ## 2D geometry classes
34
-
35
- `Point2D`, `Line2D`, `Circle2D`, `Rectangle2D`
36
-
37
- ## Constrained sketch
38
-
39
- `point`, `line`, `circle`, `Constraint`, `constrainedSketch`
40
-
41
- ## Angles and coordinates
42
-
43
- `degrees`, `polar`, `radians`
44
-
45
- ## Patterns and layout
46
-
47
- `linearPattern`, `circularPattern`, `circularLayout`, `linearPattern2d`, `circularPattern2d`, `mirrorCopy`
48
-
49
- ## 2D fillets and chamfers
50
-
51
- `fillet2d`, `filletCorners`, `filletEdge`, `chamfer2d`, `chamferEdge`
52
-
53
- ## Routing
54
-
55
- `route`, `routePerimeter`
56
-
57
- ## Curves and surfaces
58
-
59
- `arcBridgeBetweenRects`, `Curve3D`, `spline2d`, `spline3d`, `loft`, `loftAlongSpine`, `sweep`, `HermiteCurve3D`, `QuinticHermiteCurve3D`, `hermiteTransition`, `hermiteTransitionG2`, `transitionCurve`, `transitionSurface`, `transitionCurveFromPoints`, `connectEdges`, `variableSweep`, `surfacePatch`
60
-
61
- ## Sheet metal
62
-
63
- `sheetMetal`, `SheetMetalPart`
64
-
65
- ## Parameters
66
-
67
- `param`, `boolParam`, `choiceParam`
68
-
69
- ## Core classes
70
-
71
- `sdf`, `Shape`, `Sketch`
72
-
73
- ## Part library
74
-
75
- `lib`
76
-
77
- ## Assembly and joints
78
-
79
- `joint`, `Transform`, `composeChain`, `assembly`, `Assembly`, `port`, `connector`, `Points`, `SolvedAssembly`, `bomToCsv`
80
-
81
- ## Section and projection
82
-
83
- `faceProfile`, `intersectWithPlane`, `projectToPlane`
84
-
85
- ## Edge and face queries
86
-
87
- `selectEdge`, `selectEdges`, `coalesceEdges`, `filletEdgeSegment`, `chamferEdgeSegment`
88
-
89
- ## 3D fillets, chamfers, and edge features
90
-
91
- `fillet`, `chamfer`, `draft`, `offsetSolid`
92
-
93
- ## Import
94
-
95
- `importSvgSketch`, `importMesh`
96
-
97
- ## Text and fonts
98
-
99
- `text2d`, `textWidth`, `loadFont`
100
-
101
- ## Dimensions and annotations
102
-
103
- `dim`, `dimLine`
104
-
105
- ## Visualization
106
-
107
- `highlight`
108
-
109
- ## Export and format
110
-
111
- `sketchToSvg`, `sketchToDxf`, `bom`, `sheetStock`, `robotExport`
112
-
113
- ## Grouping
114
-
115
- `group`, `ShapeGroup`
116
-
117
- ## Viewport and scene
118
-
119
- `console`, `cutPlane`, `explodeView`, `jointsView`, `viewConfig`, `scene`
120
-
121
- ## Verification
122
-
123
- `verify`, `spec`
124
-
125
- ## G-Code
126
-
127
- `gcode`, `GCodeBuilder`
128
-
129
- ## Laser kit
130
-
131
- `flatPanel`, `flatPart`, `fingerJoint`, `tabSlot`, `laserKit`, `assemblyPreview`, `assemblyInstructions`, `formatInstructions`, `fingerJointProfile`, `tabSlotProfile`, `livingHingeProfile`, `snapFitProfile`, `lookupKerf`, `COMMON_KERFS`
132
-
133
- ## Virtual module specifiers
134
-
135
- These strings can be used with `require()` to import all runtime globals as a module (useful in plain `.js` helper files):
136
-
137
- `"forgecad"`, `"@forge/runtime"`, `"@forgecad/runtime"`