forgecad 0.6.3 → 0.7.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 (193) hide show
  1. package/README.md +2 -11
  2. package/dist/assets/{AdminPage-CeqCUUgu.js → AdminPage-DAu1C1ST.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-Gc_BCdqC.js} +269 -143
  5. package/dist/assets/EditorApp-D9bJvtf7.js +11338 -0
  6. package/dist/assets/{EditorApp-CnC2k4cW.css → EditorApp-DG1-oUSV.css} +459 -87
  7. package/dist/assets/{EmbedViewer-DBlzmQ5i.js → EmbedViewer-CEO8XbV8.js} +2 -4
  8. package/dist/assets/LandingPage-CdCuEOdC.js +451 -0
  9. package/dist/assets/PricingPage-BSrxu6d7.js +232 -0
  10. package/dist/assets/{SettingsPage-BqCh9JcC.js → SettingsPage-FUCSIRq6.js} +129 -5
  11. package/dist/assets/{evalWorker-Ql-aKwLA.js → evalWorker-KoR0SNKq.js} +6770 -2914
  12. package/dist/assets/{index-2hfs_ub0.css → index-CyVd1D4D.css} +227 -53
  13. package/dist/assets/{Viewport-CoB46f5R.js → index-wTEK39at.js} +31385 -6439
  14. package/dist/assets/{javascript-DCxGoE5Y.js → javascript-DAl8Gmyo.js} +1 -1
  15. package/dist/assets/{manifold-CqNMHHKO.js → manifold-B1sGWdYk.js} +4 -3
  16. package/dist/assets/{manifold-Cce9wRFz.js → manifold-D7o0N50J.js} +1 -1
  17. package/dist/assets/{manifold-D6BeHIOo.js → manifold-G5sBaXzi.js} +1 -1
  18. package/dist/assets/{reportWorker-sFEFonXf.js → reportWorker-DYcRHhv9.js} +6798 -3341
  19. package/dist/assets/{vendor-react-Dt7-aaJH.js → vendor-react-CG3i_wp0.js} +65 -8
  20. package/dist/docs-raw/generated/assembly.md +691 -112
  21. package/dist/docs-raw/generated/concepts.md +1225 -1400
  22. package/dist/docs-raw/generated/core.md +464 -1412
  23. package/dist/docs-raw/generated/curves.md +593 -117
  24. package/dist/docs-raw/generated/lib.md +38 -748
  25. package/dist/docs-raw/generated/output.md +139 -245
  26. package/dist/docs-raw/generated/sheet-metal.md +473 -21
  27. package/dist/docs-raw/generated/sketch.md +553 -349
  28. package/dist/docs-raw/generated/viewport.md +345 -303
  29. package/dist/docs-raw/generated/wood.md +104 -0
  30. package/dist/index.html +2 -2
  31. package/dist/sitemap.xml +6 -6
  32. package/dist-cli/chunk-PZ5AY32C.js +10 -0
  33. package/dist-cli/chunk-PZ5AY32C.js.map +1 -0
  34. package/dist-cli/forgecad.js +9435 -5407
  35. package/dist-cli/forgecad.js.map +1 -0
  36. package/dist-cli/solver-FV7TJZGI.js +365 -0
  37. package/dist-cli/solver-FV7TJZGI.js.map +1 -0
  38. package/dist-skill/CONTEXT.md +3186 -7145
  39. package/dist-skill/SKILL-dev.md +21 -63
  40. package/dist-skill/SKILL.md +12 -56
  41. package/dist-skill/docs/API/core/concepts.md +16 -98
  42. package/dist-skill/docs/CLI/export.md +91 -0
  43. package/dist-skill/docs/CLI/projects.md +107 -0
  44. package/dist-skill/docs/CLI/studio_publishing.md +52 -0
  45. package/dist-skill/docs/CLI/validation.md +66 -0
  46. package/dist-skill/docs/generated/assembly.md +691 -112
  47. package/dist-skill/docs/generated/core.md +464 -1412
  48. package/dist-skill/docs/generated/curves.md +593 -117
  49. package/dist-skill/docs/generated/lib.md +38 -748
  50. package/dist-skill/docs/generated/output.md +139 -245
  51. package/dist-skill/docs/generated/sheet-metal.md +473 -21
  52. package/dist-skill/docs/generated/sketch.md +553 -349
  53. package/dist-skill/docs/generated/viewport.md +345 -303
  54. package/dist-skill/docs/generated/wood.md +104 -0
  55. package/dist-skill/docs/guides/coordinate-system.md +11 -17
  56. package/dist-skill/docs/guides/geometry-conventions.md +13 -70
  57. package/dist-skill/docs/guides/modeling-recipes.md +22 -195
  58. package/dist-skill/docs/guides/positioning.md +88 -147
  59. package/dist-skill/docs-dev/API/core/concepts.md +51 -0
  60. package/dist-skill/docs-dev/API/core/sdf-advanced.md +92 -0
  61. package/dist-skill/docs-dev/API/core/sdf-primitives.md +58 -0
  62. package/dist-skill/docs-dev/API/core/sdf-workflow.md +42 -0
  63. package/dist-skill/docs-dev/CLI/export.md +91 -0
  64. package/dist-skill/docs-dev/CLI/projects.md +107 -0
  65. package/dist-skill/docs-dev/CLI/studio_publishing.md +52 -0
  66. package/dist-skill/docs-dev/CLI/validation.md +66 -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 +1 -3
  70. package/dist-skill/docs-dev/generated/assembly.md +771 -0
  71. package/dist-skill/docs-dev/generated/core.md +775 -0
  72. package/dist-skill/docs-dev/generated/curves.md +688 -0
  73. package/dist-skill/docs-dev/generated/lib.md +50 -0
  74. package/dist-skill/docs-dev/generated/output.md +234 -0
  75. package/dist-skill/docs-dev/generated/sheet-metal.md +506 -0
  76. package/dist-skill/docs-dev/generated/sketch.md +801 -0
  77. package/dist-skill/docs-dev/generated/viewport.md +486 -0
  78. package/dist-skill/docs-dev/generated/wood.md +104 -0
  79. package/dist-skill/docs-dev/guides/coordinate-system.md +46 -0
  80. package/dist-skill/docs-dev/guides/geometry-conventions.md +52 -0
  81. package/dist-skill/docs-dev/guides/modeling-recipes.md +77 -0
  82. package/dist-skill/docs-dev/guides/positioning.md +151 -0
  83. package/dist-skill/{docs → docs-dev}/guides/skill-maintenance.md +21 -10
  84. package/dist-skill/{docs → docs-dev}/internals/compiler.md +5 -6
  85. package/dist-skill/{docs → docs-dev}/internals/constraint-solver-quality.md +0 -1
  86. package/dist-skill/{docs → docs-dev}/internals/constraint-solver.md +0 -1
  87. package/dist-skill/{docs → docs-dev}/internals/sketch-2d-pipeline.md +2 -3
  88. package/examples/api/attachTo-basics.forge.js +5 -5
  89. package/examples/api/boolean-operations.forge.js +3 -3
  90. package/examples/api/bounding-box-visualizer.forge.js +2 -2
  91. package/examples/api/clone-duplicate.forge.js +1 -1
  92. package/examples/api/colors-union-vs-array.forge.js +6 -6
  93. package/examples/api/connector-assembly.forge.js +4 -4
  94. package/examples/api/connector-basics.forge.js +2 -2
  95. package/examples/api/extrude-options.forge.js +4 -10
  96. package/examples/api/feature-created-faces.forge.js +6 -10
  97. package/examples/api/fillet-showcase.forge.js +1 -1
  98. package/examples/api/folded-service-panel-cover.forge.js +2 -2
  99. package/examples/api/group-test.forge.js +1 -1
  100. package/examples/api/group-vs-union.forge.js +1 -1
  101. package/examples/api/highlight-debug.forge.js +4 -0
  102. package/examples/api/js-module-pillars.js +1 -1
  103. package/examples/api/js-module-scene.js +2 -2
  104. package/examples/api/mesh-import-slats.forge.js +1 -1
  105. package/examples/api/pointAlong-orientation.forge.js +1 -1
  106. package/examples/api/profile-2020-b-slot6.forge.js +0 -1
  107. package/examples/api/route-perimeter-flange.forge.js +1 -1
  108. package/examples/api/sdf-rover-demo.forge.js +10 -10
  109. package/examples/api/sketch-on-face-demo.forge.js +2 -2
  110. package/examples/api/sketch-regions.forge.js +4 -4
  111. package/examples/api/transition-curves.forge.js +1 -1
  112. package/examples/api/variable-sweep-pure-sdf-test.forge.js +162 -0
  113. package/examples/api/variable-sweep-test.forge.js +2 -2
  114. package/examples/api/wood-joinery.forge.js +60 -0
  115. package/examples/compiler-corpus/enclosure-shell-cuts.forge.js +3 -3
  116. package/examples/compiler-corpus/fastener-plate-variants.forge.js +2 -2
  117. package/examples/experiments/drone-arm.forge.js +53 -0
  118. package/examples/furniture/adjustable-table.forge.js +2 -2
  119. package/examples/furniture/bathroom.forge.js +11 -11
  120. package/examples/furniture/chair.forge.js +1 -1
  121. package/examples/generative/crystal-growth.forge.js +2 -2
  122. package/examples/generative/frost-spires.forge.js +3 -3
  123. package/examples/generative/golden-spiral-tower.forge.js +3 -3
  124. package/examples/mechanical/3d-printer.forge.js +28 -28
  125. package/examples/mechanical/5-finger-robot-hand.forge.js +15 -15
  126. package/examples/mechanical/airplane-propeller.forge.js +2 -2
  127. package/examples/mechanical/fillet-enclosure.forge.js +1 -1
  128. package/examples/mechanical/headphone-hanger-v2.forge.js +2 -2
  129. package/examples/mechanical/robot_hand.forge.js +15 -15
  130. package/examples/mechanical/robot_hand_2.forge.js +9 -9
  131. package/examples/products/bottle.forge.js +1 -1
  132. package/examples/products/chess-set.forge.js +19 -19
  133. package/examples/products/classical-piano.forge.js +11 -11
  134. package/examples/products/clock.forge.js +12 -12
  135. package/examples/products/iphone.forge.js +8 -8
  136. package/examples/products/laptop.forge.js +15 -15
  137. package/examples/products/liquid-soap-dispenser.forge.js +18 -18
  138. package/examples/products/origami-fish.forge.js +8 -6
  139. package/examples/products/spiderman-cake.forge.js +4 -4
  140. package/examples/toolbox/bolted-joint.forge.js +2 -2
  141. package/package.json +7 -4
  142. package/dist/assets/EditorApp-B-vQvgam.js +0 -9888
  143. package/dist/assets/LandingPage-C5n9hDXI.js +0 -322
  144. package/dist/assets/PublishedModelPage-Dt7PCVBj.js +0 -146
  145. package/dist/assets/__vite-browser-external-CURh0WXD.js +0 -8
  146. package/dist/assets/deserializeRunResult-BLAFoiE0.js +0 -19365
  147. package/dist/assets/index-1CYp3zUp.js +0 -1455
  148. package/dist/docs-raw/CLI.md +0 -865
  149. package/dist-skill/docs/API/API.md +0 -1666
  150. package/dist-skill/docs/API/README.md +0 -37
  151. package/dist-skill/docs/API/assembly/assembly.md +0 -617
  152. package/dist-skill/docs/API/core/edge-queries.md +0 -130
  153. package/dist-skill/docs/API/core/parameters.md +0 -122
  154. package/dist-skill/docs/API/core/reserved-terms.md +0 -137
  155. package/dist-skill/docs/API/core/sdf.md +0 -326
  156. package/dist-skill/docs/API/core/skill-cli.md +0 -194
  157. package/dist-skill/docs/API/core/skill-guide.md +0 -205
  158. package/dist-skill/docs/API/core/specs.md +0 -186
  159. package/dist-skill/docs/API/core/topology.md +0 -372
  160. package/dist-skill/docs/API/entities.md +0 -268
  161. package/dist-skill/docs/API/output/bom.md +0 -58
  162. package/dist-skill/docs/API/output/brep-export.md +0 -87
  163. package/dist-skill/docs/API/output/dimensions.md +0 -67
  164. package/dist-skill/docs/API/output/export.md +0 -110
  165. package/dist-skill/docs/API/output/gcode.md +0 -195
  166. package/dist-skill/docs/API/runtime/viewport.md +0 -420
  167. package/dist-skill/docs/API/sheet-metal/sheet-metal.md +0 -185
  168. package/dist-skill/docs/API/sketch/anchor.md +0 -37
  169. package/dist-skill/docs/API/sketch/booleans.md +0 -91
  170. package/dist-skill/docs/API/sketch/core.md +0 -73
  171. package/dist-skill/docs/API/sketch/extrude.md +0 -62
  172. package/dist-skill/docs/API/sketch/on-face.md +0 -104
  173. package/dist-skill/docs/API/sketch/operations.md +0 -78
  174. package/dist-skill/docs/API/sketch/path.md +0 -75
  175. package/dist-skill/docs/API/sketch/primitives.md +0 -146
  176. package/dist-skill/docs/API/sketch/regions.md +0 -80
  177. package/dist-skill/docs/API/sketch/text.md +0 -108
  178. package/dist-skill/docs/API/sketch/transforms.md +0 -65
  179. package/dist-skill/docs/API/toolbox/fasteners.md +0 -129
  180. package/dist-skill/docs/CLI.md +0 -865
  181. package/dist-skill/docs/INDEX.md +0 -94
  182. package/dist-skill/docs/RELEASING.md +0 -55
  183. package/dist-skill/docs/cli-monetization.md +0 -111
  184. package/dist-skill/docs/deployment.md +0 -281
  185. package/dist-skill/docs/generated/concepts.md +0 -2112
  186. package/dist-skill/docs/internals/shape-from-slices.md +0 -152
  187. package/dist-skill/docs/platform/admin.md +0 -45
  188. package/dist-skill/docs/platform/architecture.md +0 -79
  189. package/dist-skill/docs/platform/auth.md +0 -110
  190. package/dist-skill/docs/platform/email.md +0 -67
  191. package/dist-skill/docs/platform/projects.md +0 -111
  192. package/dist-skill/docs/platform/sharing.md +0 -90
  193. 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"`