forgecad 0.9.13 → 0.9.15
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/LICENSE +6 -4
- package/README.md +8 -4
- package/dist/assets/{AdminPage-DramHHDf.js → AdminPage-CDyGUinA.js} +2 -2
- package/dist/assets/{BenchmarkPage-Bjgkh5m9.js → BenchmarkPage-DfPMY_-d.js} +4 -15
- package/dist/assets/{BlogPage-n_HGP3Qm.js → BlogPage-kF0fkdJT.js} +2 -2
- package/dist/assets/{DocsPage-WCIkPmzC.js → DocsPage-B954L3YN.js} +9 -3
- package/dist/assets/EditorApp-Beb-IZ0y.js +14014 -0
- package/dist/assets/{EditorApp-BAnckbsk.css → EditorApp-CuDLxKqL.css} +698 -0
- package/dist/assets/{EmbedViewer-DEZKqdfW.js → EmbedViewer-C77B-TrF.js} +3 -3
- package/dist/assets/{LandingPageProofDriven-CeRIctuj.js → LandingPageProofDriven-Cr6fXMDj.js} +35 -37
- package/dist/assets/LegalPage-BRlScr9A.css +91 -0
- package/dist/assets/LegalPage-Dzklqmmg.js +39 -0
- package/dist/assets/{PricingPage-BMedqFef.css → PricingPage-BPF6HKyO.css} +25 -0
- package/dist/assets/{PricingPage-rIRa8p4Y.js → PricingPage-zWXkvlwl.js} +19 -19
- package/dist/assets/{SettingsPage-BqCUvEXM.js → SettingsPage-Bz0of4KQ.js} +2 -2
- package/dist/assets/app-CE3sYcV7.css +3890 -0
- package/dist/assets/{app-BUZqJvSO.js → app-D3kDkggg.js} +2305 -960
- package/dist/assets/cli/{render-lhGxj50Y.js → render-DSY3mMQa.js} +423 -30
- package/dist/assets/{constructionHistoryWorker-ipD1jcIv.js → constructionHistoryWorker-gpDo-uH2.js} +927 -243
- package/dist/assets/{evalWorker-CHXSe_-u.js → evalWorker-CU0Ke6DP.js} +7799 -4163
- package/dist/assets/{forgecad_geometry-BVnIeXMG.js → forgecad_geometry-Dgceylq9.js} +43 -1
- package/dist/assets/{forgecad_geometry_bg-DufhhCBV.wasm → forgecad_geometry_bg-dD4RNQF1.wasm} +0 -0
- package/dist/assets/{inspectWorker-DeRnMVv1.js → inspectWorker-COyp8XXA.js} +927 -243
- package/dist/assets/{javascript-70-4uGcz.js → javascript-1kQXfVaz.js} +1 -1
- package/dist/assets/landing-proof-driven-DiGqdtWa.js +18 -0
- package/dist/assets/{landing-proof-driven-oFYW6mjz.css → landing-proof-driven-ORyigZ6p.css} +13 -7
- package/dist/assets/legalContent-ZfFGMmi4.js +251 -0
- package/dist/assets/{manifold-D1LZIHqn.js → manifold-BRI5prcH.js} +1 -1
- package/dist/assets/{manifold-C2fwoTgd.js → manifold-C-3h2M7p.js} +2 -2
- package/dist/assets/{manifold-BTkzxi9V.js → manifold-DNkrUWpA.js} +1 -1
- package/dist/assets/{reportWorker-Cq1qGmg0.js → reportWorker-CdBz5bNg.js} +7537 -10856
- package/dist/assets/{scalar-sampling-budget-D9Qv_UlJ.js → scalar-sampling-budget-wJF98aY9.js} +6943 -4345
- package/dist/assets/{scanProxyWorker-Bs2TDgLw.js → scanProxyWorker-B-9VbLIs.js} +32 -1
- package/dist/assets/{renderSceneState-Dr0xPq1A.js → targets-B9sGB5nB.js} +27 -1
- package/dist/assets/{vendor-react-Da3A2QmU.js → vendor-react-6j1Kke-Y.js} +6 -5
- package/dist/cli/render.html +1 -1
- package/dist/docs/index.html +2 -2
- package/dist/docs-raw/AI/ai-native-cad.md +50 -0
- package/dist/docs-raw/AI/usage.md +9 -17
- package/dist/docs-raw/CLI.md +71 -21
- package/dist/docs-raw/component-model.md +27 -11
- package/dist/docs-raw/generated/assembly.md +301 -212
- package/dist/docs-raw/generated/concepts.md +238 -240
- package/dist/docs-raw/generated/core.md +283 -6
- package/dist/docs-raw/generated/curves.md +274 -361
- package/dist/docs-raw/generated/lib.md +7 -1
- package/dist/docs-raw/generated/output.md +19 -4
- package/dist/docs-raw/generated/runtime-names.md +41 -0
- package/dist/docs-raw/generated/sdf.md +31 -0
- package/dist/docs-raw/generated/sheet-metal.md +9 -0
- package/dist/docs-raw/generated/sketch.md +44 -1
- package/dist/docs-raw/generated/viewport.md +14 -6
- package/dist/docs-raw/guides/coordinate-system.md +20 -16
- package/dist/docs-raw/guides/geometry-conventions.md +2 -2
- package/dist/docs-raw/guides/inspection-bundles.md +2 -1
- package/dist/docs-raw/guides/joint-design.md +24 -0
- package/dist/docs-raw/guides/positioning.md +13 -3
- package/dist/docs-raw/legal/privacy.md +63 -0
- package/dist/docs-raw/legal/software-license.md +55 -0
- package/dist/docs-raw/legal/terms.md +87 -0
- package/dist/docs-raw/skills/forgecad-3d-reconstruction.md +3 -3
- package/dist/docs-raw/skills/forgecad-blockout-model.md +1 -1
- package/dist/docs-raw/skills/forgecad-component-model.md +11 -2
- package/dist/docs-raw/skills/forgecad-high-level-spec.md +1 -1
- package/dist/docs-raw/skills/forgecad-image-replicator.md +8 -8
- package/dist/docs-raw/skills/forgecad-lld.md +1 -1
- package/dist/docs-raw/skills/forgecad-make-a-model.md +4 -4
- package/dist/docs-raw/skills/forgecad-model-grader.md +2 -2
- package/dist/docs-raw/skills/forgecad-prepare-prompt.md +2 -2
- package/dist/docs-raw/skills/forgecad-project.md +1 -1
- package/dist/docs-raw/skills/forgecad-reconstruction-benchmark.md +4 -4
- package/dist/docs-raw/skills/forgecad-render-inspect.md +4 -2
- package/dist/docs-raw/skills/forgecad-visual-spec.md +1 -1
- package/dist/docs-raw/skills/forgecad.md +4 -3
- package/dist/index.html +40 -12
- package/dist/llms.txt +8 -0
- package/dist/site.webmanifest +1 -1
- package/dist/sitemap.xml +49 -13
- package/dist-cli/{check-compiler-LOXCPEOI.js → check-compiler-SDX5QIXI.js} +1 -2
- package/dist-cli/{check-query-propagation-BAKNVWXR.js → check-query-propagation-EAYEFT77.js} +1 -2
- package/dist-cli/{chunk-RY43WF46.js → chunk-N4O47JLF.js} +13772 -9938
- package/dist-cli/forgecad.js +2387 -899
- package/dist-cli/{forgecad_geometry-GYVNKPIE.js → forgecad_geometry-QOQIIP53.js} +42 -1
- package/dist-cli/forgecad_geometry_bg.wasm +0 -0
- package/dist-cli/{solver-46FFSK2U.js → solver-OK4HECRH.js} +0 -1
- package/dist-skill/CONTEXT.md +1120 -724
- package/dist-skill/SKILL.md +3 -2
- package/dist-skill/docs/API/core/concepts.md +64 -1
- package/dist-skill/docs/CLI.md +71 -21
- package/dist-skill/docs/generated/assembly.md +277 -229
- package/dist-skill/docs/generated/core.md +283 -6
- package/dist-skill/docs/generated/curves.md +272 -362
- package/dist-skill/docs/generated/lib.md +7 -1
- package/dist-skill/docs/generated/output.md +19 -4
- package/dist-skill/docs/generated/runtime-names.md +41 -0
- package/dist-skill/docs/generated/sdf.md +31 -0
- package/dist-skill/docs/generated/sheet-metal.md +9 -0
- package/dist-skill/docs/generated/sketch.md +44 -2
- package/dist-skill/docs/generated/viewport.md +5 -90
- package/dist-skill/docs/guides/coordinate-system.md +20 -16
- package/dist-skill/docs/guides/geometry-conventions.md +2 -2
- package/dist-skill/docs/guides/inspection-bundles.md +2 -1
- package/dist-skill/docs/guides/joint-design.md +24 -0
- package/dist-skill/docs/guides/positioning.md +13 -3
- package/dist-skill/library/forgecad-3d-reconstruction/SKILL.md +2 -2
- package/dist-skill/library/forgecad-component-model/SKILL.md +10 -1
- package/dist-skill/library/forgecad-image-replicator/SKILL.md +6 -6
- package/dist-skill/library/forgecad-image-replicator/scripts/compare_images.py +166 -0
- package/dist-skill/library/forgecad-make-a-model/SKILL.md +3 -3
- package/dist-skill/library/forgecad-model-grader/SKILL.md +1 -1
- package/dist-skill/library/forgecad-prepare-prompt/SKILL.md +1 -1
- package/dist-skill/library/forgecad-reconstruction-benchmark/SKILL.md +3 -3
- package/dist-skill/library/forgecad-render-inspect/SKILL.md +3 -1
- package/examples/api/assembly-kinematics-foundation.forge.js +65 -0
- package/examples/api/assembly-kinematics-four-bar.forge.js +115 -0
- package/examples/api/assembly-kinematics-limb.forge.js +116 -0
- package/examples/api/connector-frame-rig-chain.forge.js +102 -0
- package/examples/api/exact-sheet-shell-assembly.forge.js +0 -2
- package/examples/api/exact-surface-studio.forge.js +6 -8
- package/examples/api/helix-basics.forge.js +6 -6
- package/examples/api/lean-foundations/README.md +12 -0
- package/examples/api/lean-foundations/curve-blend-exact.forge.js +22 -0
- package/examples/api/lean-foundations/curve-fit-interpolation.forge.js +18 -0
- package/examples/api/lean-foundations/curve-helix-canonicalization.forge.js +27 -0
- package/examples/api/lean-foundations/curve-route-canonicalization.forge.js +16 -0
- package/examples/api/lean-foundations/curve-trim-reverse.forge.js +24 -0
- package/examples/api/lean-foundations/exact-curve-arc.forge.js +36 -0
- package/examples/api/mixed-edge-finishes-proof.forge.js +8 -11
- package/examples/api/route3d-elbow.forge.js +68 -0
- package/examples/api/transition-curves.forge.js +44 -15
- package/examples/api/y-blend-corner-showcase.forge.js +0 -2
- package/examples/generative/coral-vase.forge.js +1 -1
- package/examples/nurbs-tube.forge.js +1 -1
- package/package.json +14 -18
- package/dist/assets/EditorApp-CP9Za6tm.js +0 -13630
- package/dist/assets/app-CsHnaBWt.css +0 -1789
- package/dist/docs-raw/API/README.md +0 -16
- package/dist/docs-raw/API/core/concepts.md +0 -118
- package/dist/docs-raw/INDEX.md +0 -138
- package/dist/docs-raw/RELEASING.md +0 -87
- package/dist/docs-raw/agent-native-api.md +0 -27
- package/dist/docs-raw/beta-deployment.md +0 -304
- package/dist/docs-raw/beta-operations.md +0 -325
- package/dist/docs-raw/blueprint-first.md +0 -145
- package/dist/docs-raw/cli-monetization.md +0 -112
- package/dist/docs-raw/coding-best-practices.md +0 -120
- package/dist/docs-raw/coding.md +0 -340
- package/dist/docs-raw/deployment.md +0 -374
- package/dist/docs-raw/guides/skill-maintenance.md +0 -161
- package/dist/docs-raw/guides/surface-members.md +0 -82
- package/dist/docs-raw/internals/backend-vocabulary.md +0 -35
- package/dist/docs-raw/internals/compiler.md +0 -307
- package/dist/docs-raw/internals/constraint-solver-quality.md +0 -161
- package/dist/docs-raw/internals/constraint-solver.md +0 -176
- package/dist/docs-raw/internals/shape-from-slices.md +0 -152
- package/dist/docs-raw/internals/sketch-2d-pipeline.md +0 -108
- package/dist/docs-raw/platform/admin.md +0 -45
- package/dist/docs-raw/platform/architecture.md +0 -82
- package/dist/docs-raw/platform/auth.md +0 -139
- package/dist/docs-raw/platform/email.md +0 -67
- package/dist/docs-raw/platform/google-oauth-setup.md +0 -88
- package/dist/docs-raw/platform/observability.md +0 -197
- package/dist/docs-raw/platform/projects.md +0 -111
- package/dist/docs-raw/platform/sharing.md +0 -90
- package/dist/docs-raw/product/README.md +0 -39
- package/dist/docs-raw/product/api-as-product-language.md +0 -13
- package/dist/docs-raw/product/business-model.md +0 -15
- package/dist/docs-raw/product/competitive-positioning.md +0 -17
- package/dist/docs-raw/product/creative-manufacturing.md +0 -15
- package/dist/docs-raw/product/founder-story.md +0 -11
- package/dist/docs-raw/product/manufacturing-workflows.md +0 -15
- package/dist/docs-raw/product/onboarding-first-experience.md +0 -256
- package/dist/docs-raw/product/product-loop.md +0 -17
- package/dist/docs-raw/product/strategic-decisions.md +0 -22
- package/dist/docs-raw/product/user-outreach-email-templates.md +0 -161
- package/dist/docs-raw/product/user-segments.md +0 -15
- package/dist/docs-raw/product/vision.md +0 -26
- package/dist/docs-raw/rl-environments.md +0 -508
- package/dist/docs-raw/runbook.md +0 -611
- package/dist-cli/check-compiler-LOXCPEOI.js.map +0 -1
- package/dist-cli/check-query-propagation-BAKNVWXR.js.map +0 -1
- package/dist-cli/chunk-RY43WF46.js.map +0 -1
- package/dist-cli/forgecad.js.map +0 -1
- package/dist-cli/forgecad_geometry-GYVNKPIE.js.map +0 -1
- package/dist-cli/solver-46FFSK2U.js.map +0 -1
- package/dist-skill/SKILL-dev.md +0 -145
- package/dist-skill/docs-dev/API/core/concepts.md +0 -118
- package/dist-skill/docs-dev/CLI.md +0 -647
- package/dist-skill/docs-dev/agent-native-api.md +0 -27
- package/dist-skill/docs-dev/blueprint-first.md +0 -145
- package/dist-skill/docs-dev/coding-best-practices.md +0 -120
- package/dist-skill/docs-dev/coding.md +0 -340
- package/dist-skill/docs-dev/component-model.md +0 -164
- package/dist-skill/docs-dev/generated/assembly.md +0 -794
- package/dist-skill/docs-dev/generated/core.md +0 -2117
- package/dist-skill/docs-dev/generated/curves.md +0 -2583
- package/dist-skill/docs-dev/generated/lib.md +0 -169
- package/dist-skill/docs-dev/generated/output.md +0 -247
- package/dist-skill/docs-dev/generated/sdf.md +0 -446
- package/dist-skill/docs-dev/generated/sheet-metal.md +0 -504
- package/dist-skill/docs-dev/generated/sketch.md +0 -1811
- package/dist-skill/docs-dev/generated/viewport.md +0 -585
- package/dist-skill/docs-dev/generated/wood.md +0 -108
- package/dist-skill/docs-dev/guides/coordinate-system.md +0 -46
- package/dist-skill/docs-dev/guides/geometry-conventions.md +0 -52
- package/dist-skill/docs-dev/guides/inspection-bundles.md +0 -485
- package/dist-skill/docs-dev/guides/joint-design.md +0 -78
- package/dist-skill/docs-dev/guides/modeling-recipes.md +0 -78
- package/dist-skill/docs-dev/guides/positioning.md +0 -161
- package/dist-skill/docs-dev/guides/skill-maintenance.md +0 -161
- package/dist-skill/docs-dev/internals/backend-vocabulary.md +0 -35
- package/dist-skill/docs-dev/internals/compiler.md +0 -307
- package/dist-skill/docs-dev/internals/constraint-solver-quality.md +0 -161
- package/dist-skill/docs-dev/internals/constraint-solver.md +0 -176
- package/dist-skill/docs-dev/internals/sketch-2d-pipeline.md +0 -108
- package/dist-skill/library/forgecad-image-replicator/scripts/compare_images.mjs +0 -289
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# AI-Native CAD Workflow
|
|
2
|
+
|
|
3
|
+
ForgeCAD is an AI-native CAD workflow for turning product ideas into editable, manufacturable parametric models. The core loop is simple: describe the goal, let an AI agent edit `.forge.js` source, validate the model with the CLI, inspect visual and manufacturing evidence, then revise or fork the next iteration.
|
|
4
|
+
|
|
5
|
+
The important distinction is that ForgeCAD does not stop at a pretty mesh. The model remains code. A hole can move, a wall can thicken, a fastener can change, and a product variant can branch from the same source instead of starting over.
|
|
6
|
+
|
|
7
|
+
## What AI-Driven CAD Means Here
|
|
8
|
+
|
|
9
|
+
AI-driven CAD should produce a model that can survive feedback. In ForgeCAD, the agent works with normal files, not a hidden binary state:
|
|
10
|
+
|
|
11
|
+
- `.forge.js` files express dimensions, parameters, assemblies, connectors, materials, and export intent.
|
|
12
|
+
- `forgecad run` catches syntax errors, import problems, invalid geometry, collisions, and verification failures.
|
|
13
|
+
- `forgecad render` and `forgecad inspect` create visual evidence for design review, fit checks, wall thickness, sections, masks, depth, and normals.
|
|
14
|
+
- `forgecad export` sends the same source toward STL, 3MF, STEP, reports, cutting layouts, robot packages, or G-code depending on the job.
|
|
15
|
+
|
|
16
|
+
This makes the AI useful after the first answer. You can ask for changes in natural language, but the artifact being changed is still an editable engineering object.
|
|
17
|
+
|
|
18
|
+
## Manufacturing Feedback Loop
|
|
19
|
+
|
|
20
|
+
A manufacturable model needs feedback before fabrication. ForgeCAD gives agents a concrete loop:
|
|
21
|
+
|
|
22
|
+
```text
|
|
23
|
+
prompt -> edit source -> run -> render -> inspect -> fix -> export
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
That loop is where quality improves. The agent can inspect collision reports, check thin walls, render multiple camera views, test parameter ranges, and produce evidence for the user instead of relying on a single screenshot.
|
|
27
|
+
|
|
28
|
+
## Parallel Product Idea Iterations
|
|
29
|
+
|
|
30
|
+
Because ForgeCAD models are source files, parallel product exploration is cheap. An agent can create several variants in separate files or branches:
|
|
31
|
+
|
|
32
|
+
- one concept optimized for 3D printing
|
|
33
|
+
- one concept aimed at sheet metal or laser cutting
|
|
34
|
+
- one concept with purchased hardware and service access
|
|
35
|
+
- one simplified blockout for proportion and motion review
|
|
36
|
+
- one production-facing version with clearer tolerances and export targets
|
|
37
|
+
|
|
38
|
+
Each variant can keep the same validation contract: run it, render it, inspect it, compare it, and decide whether it deserves more detail.
|
|
39
|
+
|
|
40
|
+
## Where ForgeCAD Fits
|
|
41
|
+
|
|
42
|
+
ForgeCAD is useful when you want AI-assisted CAD that remains inspectable and editable:
|
|
43
|
+
|
|
44
|
+
- founders exploring physical product ideas
|
|
45
|
+
- makers iterating 3D printed parts and fixtures
|
|
46
|
+
- engineers prototyping mechanisms, enclosures, brackets, and assemblies
|
|
47
|
+
- teams that want version-controlled CAD source and reproducible exports
|
|
48
|
+
- AI agents that need a deterministic toolchain instead of a purely visual prompt-to-mesh path
|
|
49
|
+
|
|
50
|
+
The goal is not to hide CAD behind a chatbot. The goal is to let AI do more of the modeling work while ForgeCAD keeps the result grounded in readable source, validation evidence, and manufacturing outputs.
|
|
@@ -103,15 +103,6 @@ If you only want the core modeling skill without companion workflows:
|
|
|
103
103
|
forgecad skill install --core-only
|
|
104
104
|
```
|
|
105
105
|
|
|
106
|
-
ForgeCAD developers can install the internal/development variant of the core skill:
|
|
107
|
-
|
|
108
|
-
```bash
|
|
109
|
-
forgecad skill install --dev
|
|
110
|
-
forgecad skill install --dev --target claude
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
Use `--dev` only for work on ForgeCAD itself. It includes compiler internals, solver architecture, coding standards, release process, and skill maintenance notes.
|
|
114
|
-
|
|
115
106
|
## Recommended Agent Prompts
|
|
116
107
|
|
|
117
108
|
Start the agent inside the initialized project folder. Do not ask it to create a model in a random empty folder or to work from one loose file on the desktop.
|
|
@@ -139,7 +130,7 @@ push when the result is ready for the browser.
|
|
|
139
130
|
```text
|
|
140
131
|
Use forgecad-component-model and forgecad. Parts must build at origin. The
|
|
141
132
|
assembly positions parts with connectors or explicit assembly-level placement.
|
|
142
|
-
Validate with forgecad run
|
|
133
|
+
Validate with forgecad run, inspect physical components, inspect fit interference and visual objects,
|
|
143
134
|
and run parameter checks before calling it done.
|
|
144
135
|
```
|
|
145
136
|
|
|
@@ -174,7 +165,7 @@ Do not accept a model just because it renders. CAD quality comes from command ev
|
|
|
174
165
|
|
|
175
166
|
- `forgecad run` confirms the script executes and reports the fast inner-loop build summary.
|
|
176
167
|
- `forgecad render 3d` gives visual views from deterministic cameras.
|
|
177
|
-
- `forgecad inspect <family> <mode>` checks focused geometry evidence such as fit interference, manufacture thickness, visual objects, surface zebra, physical components, and precise or dense section slices.
|
|
168
|
+
- `forgecad inspect <family> <mode>` checks focused geometry evidence such as fit interference, manufacture thickness, visual objects, visual rig, surface zebra, physical components, and precise or dense section slices.
|
|
178
169
|
- `forgecad inspect section` runs an agent-native one-off section probe with exact ray ruler measurements and a replay recipe.
|
|
179
170
|
- `forgecad inspect mechanical-integrity` checks assembly-level verification intent and optional collision evidence.
|
|
180
171
|
- `forgecad run -p "Name=Value"` validates important parameter values without editing source.
|
|
@@ -186,18 +177,19 @@ The CLI is not just a launcher. It gives the agent a measurable feedback loop.
|
|
|
186
177
|
|
|
187
178
|
| Need | Command | What it gives the agent |
|
|
188
179
|
|---|---|---|
|
|
189
|
-
| Execute and validate a model | `forgecad run model.forge.js` | Fast red/green execution feedback:
|
|
190
|
-
|
|
|
180
|
+
| Execute and validate a model | `forgecad run model.forge.js` | Fast red/green execution feedback: build count, parameters, verification results, script logs, and timing. |
|
|
181
|
+
| List targetable objects | `forgecad ls model.forge.js --tree` | Exact object paths, ids, groups, tags, and optional geometry metrics for focused renders or inspections. |
|
|
182
|
+
| Inspect run diagnostics | `forgecad run model.forge.js --history --features` | Construction history and feature tallies when those details are worth the extra work. |
|
|
191
183
|
| Debug imports | `forgecad run model.forge.js --debug-imports` | Import resolution and module-loading diagnostics for multi-file projects. |
|
|
192
184
|
| Compare geometry backends | `forgecad run model.forge.js --backend occt` | Runs against a specific backend when exact geometry or backend parity matters. |
|
|
193
185
|
| Test physical connectivity | `forgecad run model.forge.js --connectivity` | Connected-component reporting for assemblies and printable parts. |
|
|
194
|
-
| Check spatial relationships | `forgecad run model.forge.js --spatial bounded` | Opt-in directional relationships and bounded collision intersections during a run. |
|
|
195
186
|
| Override parameters | `forgecad run model.forge.js -p "Width=120"` | Checks a model at a specific parameter value without editing source. |
|
|
196
187
|
| Inspect mechanical integrity | `forgecad inspect mechanical-integrity model.forge.js --collisions` | Assembly-level verification, expected component counts, and collision evidence for acceptance gates. |
|
|
188
|
+
| Inspect physical gaps | `forgecad inspect physical gaps model.forge.js --camera iso` | Evidence bundle for spatial gaps between physical components. |
|
|
197
189
|
| Produce visual evidence | `forgecad render 3d model.forge.js --camera iso` | PNG viewport renders from deterministic camera angles. |
|
|
198
190
|
| Measure a targeted section | `forgecad inspect section model.forge.js --plane yz --ray bore:-20,0:20,0` | A unique probe directory with `result.json`, `section.svg`, `section.png`, exact solid/gap intervals along each ray, and a `replaySpec` for candidate comparisons. Use `--offset` only when the cut should move away from the zero plane. |
|
|
199
191
|
| Replay a targeted section | `forgecad inspect replay outputs/inspect/<probe>/result.json --source candidate.forge.js` | Reruns the same plane and ray rulers against another source and reports measurement deltas. |
|
|
200
|
-
| Inspect targeted geometry evidence | `forgecad inspect fit interference model.forge.js --camera iso` | A bundle with manifest plus the requested evidence PNGs. Visual inspection evidence uses the light technical `inspection` style by default. Use `inspect visual cutaway`, `inspect visual objects`, `inspect manufacture thickness`, `inspect sections at|stack|sample`, `inspect visual depth`, `inspect visual normals`, `inspect physical components`, or `inspect physical gaps` for other questions. |
|
|
192
|
+
| Inspect targeted geometry evidence | `forgecad inspect fit interference model.forge.js --camera iso` | A bundle with manifest plus the requested evidence PNGs. Visual inspection evidence uses the light technical `inspection` style by default. Use `inspect visual cutaway`, `inspect visual objects`, `inspect visual rig`, `inspect manufacture thickness`, `inspect sections at|stack|sample`, `inspect visual depth`, `inspect visual normals`, `inspect physical components`, or `inspect physical gaps` for other questions. |
|
|
201
193
|
| Export manufacturing files | `forgecad export stl model.forge.js` and `forgecad export 3mf model.forge.js` | Mesh exports for 3D printing. |
|
|
202
194
|
| Export exact or advanced outputs | `forgecad export step`, `forgecad export brep`, `forgecad export report`, `forgecad export cutting-layout` | Production outputs for CAD interchange, reports, and sheet workflows. |
|
|
203
195
|
| Sync hosted projects | `forgecad project pull`, `forgecad project push`, `forgecad project publish` | Local-agent workflow connected to forgecad.io projects and shares. |
|
|
@@ -222,7 +214,7 @@ For the full command reference, see [ForgeCAD CLI](../CLI.md).
|
|
|
222
214
|
| `forgecad-visual-spec` | Producing builder-honest image prompts from a concrete model, HLD, LLD, or build brief. |
|
|
223
215
|
| `forgecad-project` | Managing forgecad.io projects from the CLI: init, clone, pull, push, file commands, members, publish, and shares. |
|
|
224
216
|
|
|
225
|
-
The source prompts live in the repository under `
|
|
217
|
+
The source prompts for CLI-shipped companion skills live in the repository under `agent-skill-library/`. Public export is controlled by `forgecad-public: true` in each skill's `SKILL.md` frontmatter. Repo-local operational skills live under `.agents/skills/` and are not shipped through the CLI. To list the current public set from a source checkout:
|
|
226
218
|
|
|
227
219
|
```bash
|
|
228
220
|
npm run sync:public-skills -- --list
|
|
@@ -267,7 +259,7 @@ forgecad check print model.forge.js --json
|
|
|
267
259
|
For mechanisms, dense assemblies, printable parts, or anything safety-adjacent:
|
|
268
260
|
|
|
269
261
|
```bash
|
|
270
|
-
forgecad
|
|
262
|
+
forgecad inspect physical components model.forge.js --camera iso
|
|
271
263
|
forgecad inspect mechanical-integrity model.forge.js --collisions
|
|
272
264
|
forgecad inspect fit interference model.forge.js --camera iso
|
|
273
265
|
forgecad inspect manufacture thickness model.forge.js --min 1.6 --warn 2.4 --camera iso
|
package/dist/docs-raw/CLI.md
CHANGED
|
@@ -32,7 +32,7 @@ forgecad project push
|
|
|
32
32
|
forgecad project open
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
Local modeling, inspection, export, and skill-install commands do not require a ForgeCAD account. Hosted project sync, publishing, token management, and license activation require sign-in. Run `forgecad login` and choose email/password or API token when prompted. Use `FORGECAD_TOKEN=fc_pat_... forgecad <hosted-command>` only for CI/CD and one-off automation. `forgecad studio` always requires an explicit project path; use `.` for the current project.
|
|
36
36
|
|
|
37
37
|
You can also start from the hosted starter project with `forgecad project clone start-here`, then `cd start-here` and `forgecad studio .`.
|
|
38
38
|
|
|
@@ -66,13 +66,13 @@ Execute scripts and produce images headless — no browser window. Renders use C
|
|
|
66
66
|
|
|
67
67
|
### `forgecad run`
|
|
68
68
|
|
|
69
|
-
Execute a Forge script quickly and print the inner-loop build summary:
|
|
69
|
+
Execute a Forge script quickly and print the inner-loop build summary: build count, verification results, parameters, and timing.
|
|
70
70
|
|
|
71
|
-
The fast validation command. Runs your script with the real geometry kernel (no browser needed) and reports whether it built,
|
|
71
|
+
The fast validation command. Runs your script with the real geometry kernel (no browser needed) and reports whether it built, how many objects came back, any `verify.*` results, parameter values, script logs, and elapsed script time. This is the command agents should run frequently while editing a model.
|
|
72
72
|
|
|
73
|
-
**Fast by default** — a bare `forgecad run model.forge.js` does not compute per-object volumes, bounding boxes, construction history, feature tallies,
|
|
73
|
+
**Fast by default** — a bare `forgecad run model.forge.js` does not compute per-object volumes, bounding boxes, construction history, feature tallies, or solver profiles. Those run diagnostics are useful, but they are no longer part of the hot path.
|
|
74
74
|
|
|
75
|
-
**Opt-in diagnostics** — use `--details` for volume/bounding-box/object geometry summaries, `--history` for the construction tree, `--features` for feature tallies, or `--solver-profile` for constraint solver timing. Use
|
|
75
|
+
**Opt-in diagnostics** — use `--details` for volume/bounding-box/object geometry summaries, `--history` for the construction tree, `--features` for feature tallies, or `--solver-profile` for constraint solver timing. Use `inspect fit interference`, `inspect physical gaps`, or `inspect mechanical-integrity --collisions` for spatial and collision evidence.
|
|
76
76
|
|
|
77
77
|
**Verification results** — runs any `verify.*` checks in the script and reports pass/fail with expected vs actual values. Verification failures remain non-fatal so the model can still render and be inspected.
|
|
78
78
|
|
|
@@ -90,7 +90,6 @@ forgecad run examples/api/static-assembly-connectors.forge.js --focus
|
|
|
90
90
|
forgecad run examples/api/static-assembly-connectors.forge.js --focus "Bench.Slat*"
|
|
91
91
|
forgecad run examples/api/static-assembly-connectors.forge.js --hide "Bench.Slat0,Bench.Slat1"
|
|
92
92
|
forgecad run examples/api/static-assembly-connectors.forge.js --details --history
|
|
93
|
-
forgecad run examples/api/static-assembly-connectors.forge.js --spatial bounded
|
|
94
93
|
forgecad run examples/products/cup.forge.js --connectivity
|
|
95
94
|
forgecad run examples/products/cup.forge.js --journeys
|
|
96
95
|
forgecad run examples/products/cup.forge.js --backend occt
|
|
@@ -100,14 +99,45 @@ forgecad run examples/products/cup.forge.js -p "Wall Thickness=3" -p "Body Heigh
|
|
|
100
99
|
forgecad run examples/constraints/06-complex-spectrogram.forge.js --solver-debug-out tmp/spectrogram-debug
|
|
101
100
|
```
|
|
102
101
|
|
|
102
|
+
### `forgecad ls`
|
|
103
|
+
|
|
104
|
+
List targetable scene objects for a model.
|
|
105
|
+
|
|
106
|
+
Runs the model headlessly and prints the exact object paths that CLI tools can target. Use this before focused renders or inspections when object names, groups, or assembly paths are not obvious.
|
|
107
|
+
|
|
108
|
+
The default output is a compact line-oriented list. Use `--tree` for an indented hierarchy, `--long` for geometry metrics, or `--json` for automation.
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
forgecad ls examples/api/static-assembly-connectors.forge.js
|
|
112
|
+
forgecad ls examples/api/static-assembly-connectors.forge.js --tree
|
|
113
|
+
forgecad ls examples/api/static-assembly-connectors.forge.js Bench
|
|
114
|
+
forgecad ls examples/api/static-assembly-connectors.forge.js "Bench/Slat0" --long
|
|
115
|
+
forgecad ls examples/api/static-assembly-connectors.forge.js --json
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### `forgecad show`
|
|
119
|
+
|
|
120
|
+
Render a quick target-focused viewport PNG.
|
|
121
|
+
|
|
122
|
+
The main quick visual path for agents. Pass a model and, optionally, a target path from `forgecad ls`; ForgeCAD resolves the target and renders that object or group through the existing viewport renderer. Use `--from` for fast camera directions, or pass the lower-level render camera flags when you need exact reproducibility.
|
|
123
|
+
|
|
124
|
+
Without a target, `show` renders the whole scene and behaves like a shorter, intent-first wrapper around `render 3d`.
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
forgecad show examples/api/static-assembly-connectors.forge.js
|
|
128
|
+
forgecad show examples/api/static-assembly-connectors.forge.js Bench
|
|
129
|
+
forgecad show examples/api/static-assembly-connectors.forge.js "Bench/Slat0" --from front --out slat-front.png
|
|
130
|
+
forgecad show model.forge.js --camera "proj=perspective;pos=200,-160,120;target=0,0,20;up=0,0,1;fov=38"
|
|
131
|
+
```
|
|
132
|
+
|
|
103
133
|
### Object Filtering: `--focus` and `--hide`
|
|
104
134
|
|
|
105
|
-
Several CLI commands can filter the visible object set without changing model code: `
|
|
135
|
+
Several CLI commands can filter the visible object set without changing model code: `render 3d`, `render wireframe`, `inspect <family> <mode>`, `capture`, and `check print`.
|
|
106
136
|
|
|
107
|
-
Use `forgecad
|
|
137
|
+
Use `forgecad ls model.forge.js` to list exact object paths quickly, then pass those names or globs to `--focus` or `--hide` on render and inspection commands.
|
|
108
138
|
|
|
109
139
|
```bash
|
|
110
|
-
forgecad
|
|
140
|
+
forgecad ls examples/api/static-assembly-connectors.forge.js --tree
|
|
111
141
|
forgecad render 3d examples/api/static-assembly-connectors.forge.js bench.png --focus "Bench.*"
|
|
112
142
|
forgecad render 3d examples/api/static-assembly-connectors.forge.js slats.png --focus "Bench.Slat*"
|
|
113
143
|
forgecad inspect fit interference examples/api/static-assembly-connectors.forge.js --focus "Bench.*"
|
|
@@ -132,11 +162,12 @@ Inspect a model by asking for one explicit kind of evidence.
|
|
|
132
162
|
|
|
133
163
|
`forgecad inspect` is the evidence-first inspection surface. Pick the job you want to verify, then choose the view like you would with `render 3d`.
|
|
134
164
|
|
|
165
|
+
- `inspect sketch` — returned sketch/profile regions, selector dry-runs, and extrusion compatibility
|
|
135
166
|
- `inspect history` — final-object feature recipes and feedback anchors
|
|
136
167
|
- `inspect design-trace` — raw construction DAG, source spans, and cache diagnostics
|
|
137
168
|
- `inspect section` — agent-native one-off section probe with optional ray rulers and replay JSON
|
|
138
169
|
- `inspect replay` — rerun a saved section probe on the same or another source
|
|
139
|
-
- `inspect visual image|cutaway|depth|normals|objects` — visual context, clipped 3D cutaways, depth, normals, and identity evidence
|
|
170
|
+
- `inspect visual image|cutaway|depth|normals|rig|objects` — visual context, clipped 3D cutaways, depth, normals, rig skeletons, and identity evidence
|
|
140
171
|
- `inspect surface zebra|roughness` — surface continuity and roughness evidence
|
|
141
172
|
- `inspect physical components|floating|gaps` — physical component graph evidence
|
|
142
173
|
- `inspect fit interference` — positive-volume overlap evidence
|
|
@@ -159,8 +190,27 @@ forgecad inspect sections stack main.forge.js --plane yz --every 1
|
|
|
159
190
|
forgecad inspect compare overlay candidate.forge.js --with reference.3mf
|
|
160
191
|
```
|
|
161
192
|
|
|
193
|
+
### `forgecad inspect sketch`
|
|
194
|
+
|
|
195
|
+
Inspect returned sketches and profile regions used by returned shapes.
|
|
196
|
+
|
|
197
|
+
Runs a model and reports inspectable 2D sketch/profile regions without requiring model code to register inspection hooks. The command inspects returned Sketch objects and profile-bearing shape compile plans such as extrude, cut, and revolve. Use `--seed x,y` to dry-run which region a point selector would consume, and `--operation extrude` to check extrusion compatibility.
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
forgecad inspect sketch examples/api/sketch-regions.forge.js
|
|
201
|
+
forgecad inspect sketch model.forge.js --object "Profile" --seed 45,15
|
|
202
|
+
forgecad inspect sketch model.forge.js --json --object "Body" --seed 45,15 --operation extrude
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
`inspect sketch` is external inspection: it runs the script, then reads returned scene objects and shape compile plans. Model code should not call an inspection API. It reports selectable 2D `regions` from returned `Sketch` / `ConstraintSketch` objects and from profile-bearing returned shapes (`extrude.profile`, `cut.profile`, `revolve.profile`).
|
|
206
|
+
|
|
207
|
+
JSON contract: `targets[]` are inspectable sketches/profile uses; `regions[]` are filled selectable areas sorted largest-first with run-local ids like `R0`; `holes[]` are excluded interiors; `selection` is present only with `--seed`; `profileTree` is compile-plan provenance, not JavaScript variable names. Stable selection v1 is `--seed x,y`, not region id.
|
|
208
|
+
|
|
209
|
+
Seed failures are explicit and exit nonzero when no target matches: outside every region, on a boundary, inside a hole, ambiguous, no regions, or incompatible operation. `--operation extrude` only checks whether the selected filled region can be consumed by extrusion; open path/rail selection is intentionally unsupported in v1.
|
|
210
|
+
|
|
162
211
|
| Command | Description |
|
|
163
212
|
|---------|-------------|
|
|
213
|
+
| `inspect sketch` | Inspect returned sketches and profile regions used by returned shapes. |
|
|
164
214
|
| `inspect visual image` | Capture standard shaded viewport evidence. |
|
|
165
215
|
| `inspect visual objects` | Capture object identity evidence. |
|
|
166
216
|
| `inspect section` | Run one exact section probe with optional ray rulers. |
|
|
@@ -199,7 +249,7 @@ forgecad render hq examples/products/cup.forge.js --preset dramatic
|
|
|
199
249
|
|
|
200
250
|
Render a Forge scene to PNG using the real viewport renderer.
|
|
201
251
|
|
|
202
|
-
Launches a headless Chrome instance, renders the scene with the same WebGL viewport as the editor, and saves a PNG. The output path defaults to `<script-name>.png` next to the input file.
|
|
252
|
+
Launches a headless Chrome instance, renders the scene with the same WebGL viewport as the editor, and saves a PNG. The output path defaults to `<script-name>.png` next to the input file. Each render uses a private renderer server by default, so parallel renders do not compete for the same Vite port.
|
|
203
253
|
|
|
204
254
|
The input can be a `.forge.js` script or a direct `.stl`, `.obj`, `.3mf`, `.step`, or `.stp` asset. Direct STEP/STP rendering auto-selects OCCT unless you pass `--backend`.
|
|
205
255
|
|
|
@@ -269,9 +319,9 @@ forgecad render hq examples/products/cup.forge.js --transparent --preset glass
|
|
|
269
319
|
|
|
270
320
|
### `forgecad capture gif|mp4` **\[Pro\]**
|
|
271
321
|
|
|
272
|
-
Animated orbit or joint playback.
|
|
322
|
+
Animated orbit, section sweep, or named joint playback.
|
|
273
323
|
|
|
274
|
-
Renders an animated sequence by either orbiting the camera around the model or playing back a
|
|
324
|
+
Renders an animated sequence by either orbiting the camera around the model or playing back a named joint animation. Use `--capture orbit` (default) for a turntable rotation, `--capture animation --animation <name>` to play a named joint clip, or `--capture section-sweep` to move a clipping plane through the model. Supports `--cut-plane` to animate with a static cross-section visible. Use `--view`, `--camera`, `--camera-json`, or `--scene <file>` to choose the orbit base camera or the fixed camera for animations and section sweeps.
|
|
275
325
|
|
|
276
326
|
```bash
|
|
277
327
|
forgecad capture gif examples/products/cup.forge.js
|
|
@@ -281,7 +331,7 @@ forgecad capture gif model.forge.js out/front.gif --camera front
|
|
|
281
331
|
forgecad capture gif model.forge.js out/hero.gif --view hero
|
|
282
332
|
forgecad capture gif examples/3d-printer.forge.js out/sweep.gif --capture section-sweep --sweep-plane YZ
|
|
283
333
|
forgecad capture mp4 examples/products/cup.forge.js
|
|
284
|
-
forgecad capture mp4 examples/api/
|
|
334
|
+
forgecad capture mp4 examples/api/assembly-kinematics-four-bar.forge.js out/four-bar.mp4 --view iso
|
|
285
335
|
forgecad capture mp4 model.forge.js out/raw.mp4 --param "Output=raw-sdf"
|
|
286
336
|
forgecad capture mp4 model.forge.js out/front.mp4 --camera front
|
|
287
337
|
forgecad capture mp4 model.forge.js out/hero.mp4 --view hero
|
|
@@ -326,9 +376,9 @@ forgecad render section examples/furniture/01-table.forge.js out/bold.svg --edge
|
|
|
326
376
|
| `--background <color>` | Canvas background override |
|
|
327
377
|
| `--render-mode <solid\|wireframe>` | Shaded solid (default) or wireframe only |
|
|
328
378
|
| `--edges <off\|thin\|bold>` | Edge overlay preset in solid mode (default: off) |
|
|
329
|
-
| `--render-style <classic\|studio\|fast\|glass\|inspection\|
|
|
330
|
-
| `--scan-granularity <12-
|
|
331
|
-
| `--port <n>` |
|
|
379
|
+
| `--render-style <classic\|studio\|fast\|glass\|inspection\|contour\|scan>` | Visual render style (render default: classic; inspect default: inspection) |
|
|
380
|
+
| `--scan-granularity <12-144>` | Scan cells across the scene longest axis |
|
|
381
|
+
| `--port <n>` | Renderer server port |
|
|
332
382
|
| `--fresh-server` | Start a fresh renderer instead of reusing an existing one |
|
|
333
383
|
| `--chrome-path <path>` | Chrome or Chromium executable path |
|
|
334
384
|
| `--output <path>` | Output file path |
|
|
@@ -349,7 +399,7 @@ forgecad render section examples/furniture/01-table.forge.js out/bold.svg --edge
|
|
|
349
399
|
| `--pitch <deg>` | Camera pitch angle in degrees |
|
|
350
400
|
| `--format <gif\|mp4>` | Output format |
|
|
351
401
|
| `--capture <orbit\|animation\|section-sweep>` | Capture preset |
|
|
352
|
-
| `--animation <name>` | Named
|
|
402
|
+
| `--animation <name>` | Named joint animation clip |
|
|
353
403
|
| `--animation-loops <n>` | Repeat the selected animation clip |
|
|
354
404
|
| `--cut-plane <name>` | Enable a named cut plane |
|
|
355
405
|
| `--sweep-plane <XY\|XZ\|YZ>` | Moving plane for section-sweep |
|
|
@@ -419,8 +469,8 @@ forgecad export sdf rover.forge.js --output out/forge_scout
|
|
|
419
469
|
| Option | Description |
|
|
420
470
|
|--------|-------------|
|
|
421
471
|
| `--output <path>` | Output STEP path |
|
|
472
|
+
| `--backend <occt\|truck>` | Exact BREP exporter: occt (default) or truck (native analytic kernel) |
|
|
422
473
|
| `--quality <default\|live\|high>` | Forge quality preset |
|
|
423
|
-
| `--backend <manifold\|occt\|truck>` | Geometry backend (default: manifold) |
|
|
424
474
|
| `-o <path>` | Shorthand for --output |
|
|
425
475
|
| `--dim-angle-tol <deg>` | Dimension routing tolerance in degrees |
|
|
426
476
|
| `--format <pdf\|dxf>` | Output format |
|
|
@@ -454,7 +504,7 @@ cd start-here
|
|
|
454
504
|
forgecad studio .
|
|
455
505
|
```
|
|
456
506
|
|
|
457
|
-
`forgecad login` asks how you want to sign in, then prompts for either email/password or an API token. If your account was created through GitHub or Google, create an API token in Settings > API Tokens, run `forgecad login`, and choose API token. Use `FORGECAD_TOKEN=fc_pat_...` only for CI/CD and one-off automation.
|
|
507
|
+
`forgecad login` asks how you want to sign in, then prompts for either email/password or an API token. If your account was created through GitHub or Google, create an API token in Settings > API Tokens, run `forgecad login`, and choose API token. Use `FORGECAD_TOKEN=fc_pat_...` only for CI/CD and one-off automation.
|
|
458
508
|
|
|
459
509
|
`forgecad project init` creates the remote project, writes `forgecad.json`, pushes any existing local source files, and records server file IDs. `forgecad project push` syncs an already initialized project; it does not create a remote project from an arbitrary folder.
|
|
460
510
|
|
|
@@ -641,7 +691,7 @@ The CLI is free for personal non-commercial use. Pro covers human-operated comme
|
|
|
641
691
|
| `run`, `dev`, `studio`, `render 3d`, `export stl`, `export 3mf`, `export svg`, `compare 3d`, `check print`, `inspect fit interference`, `inspect mechanical-integrity` for personal non-commercial use | `cut-list`, `export sketch-pdf`, `export step`, `export brep`, `export gcode`, `export sdf`, `export urdf`, `export report`, `export cutting-layout` are free to run for personal non-commercial use; Pro covers human-operated commercial CAD work | `render hq`, `capture gif`, `capture mp4` plus commercial coverage for client/customer work | Backend, hosted, embedded, or application workflows that call ForgeCAD automatically |
|
|
642
692
|
|
|
643
693
|
```bash
|
|
644
|
-
forgecad license # Check
|
|
694
|
+
forgecad license # Check local license status
|
|
645
695
|
forgecad license activate # Activate Pro for the signed-in account
|
|
646
696
|
forgecad license deactivate # Remove license
|
|
647
697
|
```
|
|
@@ -35,18 +35,27 @@ return rack.withConnectors({
|
|
|
35
35
|
|
|
36
36
|
### Rule 2: Connectors Are the Interface
|
|
37
37
|
|
|
38
|
-
Every part that participates in an assembly declares connectors. A connector says: "here's where I connect, and
|
|
38
|
+
Every part that participates in an assembly declares connectors. A connector says: "here's where I connect, what direction I face, and what roll I consider upright." It's the part's public interface — the only thing the assembly needs to know.
|
|
39
39
|
|
|
40
40
|
```js
|
|
41
41
|
return mount.withConnectors({
|
|
42
42
|
flange: connector("bolt-face", {
|
|
43
43
|
origin: [0, 0, 0], // where the mating surface is
|
|
44
44
|
axis: [0, 0, 1], // direction it faces (outward from part)
|
|
45
|
+
up: [1, 0, 0], // roll reference when orientation matters
|
|
45
46
|
}),
|
|
46
47
|
});
|
|
47
48
|
```
|
|
48
49
|
|
|
49
|
-
|
|
50
|
+
A connector is a small local frame:
|
|
51
|
+
|
|
52
|
+
- `origin` is the pivot, contact point, socket center, or mating-face point.
|
|
53
|
+
- `axis` is the primary direction: face normal, hinge line, or slide direction.
|
|
54
|
+
- `up` is the secondary direction that fixes roll around `axis`.
|
|
55
|
+
|
|
56
|
+
`up` is not world up. It is the connector's local roll reference and must not be parallel to `axis`. If `up` is omitted, ForgeCAD picks a deterministic perpendicular vector. That is fine when roll does not matter, but hinges, wheels, levers, and keyed parts should author `up` explicitly.
|
|
57
|
+
|
|
58
|
+
Connectors meet **face-to-face**. Both axes point outward from their respective parts. The system brings them together from opposite sides, then uses `up` to pin the rest orientation — like plugging in a keyed connector instead of a round peg.
|
|
50
59
|
|
|
51
60
|
### Rule 3: The Assembly Is Pure Composition
|
|
52
61
|
|
|
@@ -117,22 +126,29 @@ Change the servo model → the mount rebuilds with new cavity dimensions → its
|
|
|
117
126
|
|
|
118
127
|
## The Connector Convention
|
|
119
128
|
|
|
120
|
-
Connectors follow one convention: **face-to-face**.
|
|
129
|
+
Connectors follow one convention: **face-to-face connector frames**.
|
|
121
130
|
|
|
122
|
-
Each connector's axis points **outward** from its part — the direction the connection faces. When two connectors mate, the system negates one axis so they approach from opposite sides.
|
|
131
|
+
Each connector's axis points **outward** from its part — the direction the connection faces. When two connectors mate, the system makes their origins coincide and, for fixed/revolute joints, negates one axis so they approach from opposite sides. The `up` vectors define the roll reference that makes the rest pose deterministic.
|
|
123
132
|
|
|
124
133
|
- **Fixed joints** (bolt flange): both faces point outward, system brings them together
|
|
125
|
-
- **Revolute joints** (hinge): both parts point outward along the hinge line, system opposes them
|
|
126
|
-
- **Prismatic joints** (slider): both connectors point along the slide direction (co-directional exception — the slide axis IS the shared direction)
|
|
134
|
+
- **Revolute joints** (hinge): both parts point outward along the hinge line, system opposes them, and `up` pins zero angle
|
|
135
|
+
- **Prismatic joints** (slider): both connectors point along the slide direction (co-directional exception — the slide axis IS the shared direction), while `up` still pins roll around the rail
|
|
136
|
+
|
|
137
|
+
Revolute joint values are still signed by the physical hinge axis. If a bilateral
|
|
138
|
+
mechanism mirrors a hinge axis, the mirrored pose uses the negated physical value
|
|
139
|
+
(`Right: +theta`, `Left: -theta`), and physical limits mirror as
|
|
140
|
+
`[min, max] -> [-max, -min]`. Prismatic joints do not have this angle-handedness
|
|
141
|
+
flip. Use a side-neutral link graph or explicit state mapping when equal semantic
|
|
142
|
+
pose values should drive both sides.
|
|
127
143
|
|
|
128
144
|
```js
|
|
129
145
|
// Base bottom face points down, mount flange points up → meet in the middle
|
|
130
|
-
base.withConnectors({ mount_face: connector("bolt-face", { origin: [0,0,0], axis: [0,0,-1] }) });
|
|
131
|
-
mount.withConnectors({ flange: connector("bolt-face", { origin: [0,0,0], axis: [0,0,1] }) });
|
|
146
|
+
base.withConnectors({ mount_face: connector("bolt-face", { origin: [0,0,0], axis: [0,0,-1], up: [1,0,0] }) });
|
|
147
|
+
mount.withConnectors({ flange: connector("bolt-face", { origin: [0,0,0], axis: [0,0,1], up: [1,0,0] }) });
|
|
132
148
|
|
|
133
|
-
// Hinge:
|
|
134
|
-
frame.withConnectors({ hinge: connector("hinge", { origin: [0,0,40], axis: [0,0,1] }) });
|
|
135
|
-
door.withConnectors({ hinge: connector("hinge", { origin: [0,0,40], axis: [0,0,-1] }) });
|
|
149
|
+
// Hinge: axes oppose along the pin, up pins the closed/rest roll
|
|
150
|
+
frame.withConnectors({ hinge: connector("hinge", { origin: [0,0,40], axis: [0,0,1], up: [1,0,0] }) });
|
|
151
|
+
door.withConnectors({ hinge: connector("hinge", { origin: [0,0,40], axis: [0,0,-1], up: [1,0,0] }) });
|
|
136
152
|
```
|
|
137
153
|
|
|
138
154
|
## One File vs. Many Files
|