forgecad 0.10.3 → 0.10.5
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/dist/assets/{AdminPage-CK7ObBz3.js → AdminPage-raksfnNA.js} +1 -1
- package/dist/assets/{BenchmarkPage-Ds7Z2doN.js → BenchmarkPage-DP3RxhPs.js} +2 -2
- package/dist/assets/{BlogPage-DlPbpt6A.js → BlogPage-D7Dos-vl.js} +1 -1
- package/dist/assets/{DocsPage-vZb3b3Y0.js → DocsPage-DO1kvBns.js} +34 -43
- package/dist/assets/{EditorApp-HLoKfe15.js → EditorApp-DQJmcmRT.js} +51 -17
- package/dist/assets/{EmbedViewer--KnqBKrJ.js → EmbedViewer-DFDUhOma.js} +2 -2
- package/dist/assets/{LandingPageProofDriven-C_LssmnA.js → LandingPageProofDriven-DbE_tp8-.js} +54 -36
- package/dist/assets/{LegalPage-DGsyo4n1.js → LegalPage-CominSso.js} +2 -2
- package/dist/assets/{PricingPage-BOE27B-R.js → PricingPage-CcVIN9yj.js} +2 -2
- package/dist/assets/{SettingsPage-f47cnk39.js → SettingsPage-DLWcP289.js} +1 -1
- package/dist/assets/{app-D6ccu2Xx.js → app-xW3hOdq9.js} +1343 -4004
- package/dist/assets/{backendInit-DbTkQN9J.js → backendInit-mDHk97u7.js} +12346 -3803
- package/dist/assets/cli/{render-BsngirjC.js → render--SIU27W_.js} +1909 -146
- package/dist/assets/{constructionHistoryWorker-PCwXrTDB.js → constructionHistoryWorker-uEe_Q7Kg.js} +2362 -835
- package/dist/assets/{evalWorker-CS63PfZu.js → evalWorker-BqyDHDcI.js} +7755 -3127
- package/dist/assets/{forgecad_geometry-CZ_IfuvA.js → forgecad_geometry-D8rWX7nQ.js} +1 -1
- package/dist/assets/{forgecad_geometry_bg-C3rQHfwg.wasm → forgecad_geometry_bg-ObqfqjJT.wasm} +0 -0
- package/dist/assets/{inspectWorker-Y4cOzNyA.js → inspectWorker-UXMxlcR8.js} +6550 -2943
- package/dist/assets/{jointPose-AMvCywzS.js → jointPose-bYMlwU3v.js} +1 -1
- package/dist/assets/{landing-proof-driven-ORyigZ6p.css → landing-proof-driven-_u4v_xQb.css} +71 -11
- package/dist/assets/{manifold-Crd_F2qx.js → manifold-BR7UYI4P.js} +1 -1
- package/dist/assets/{manifold-CBry38ly.js → manifold-CyOV5B9S.js} +2 -2
- package/dist/assets/{manifold-k2kRcc85.js → manifold-D4d5NQst.js} +1 -1
- package/dist/assets/{reportWorker-CWvn0CEv.js → reportWorker-DsaICZsn.js} +7320 -2827
- package/dist/cli/render.html +1 -1
- package/dist/docs/index.html +2 -2
- package/dist/docs-raw/AI/usage.md +17 -15
- package/dist/docs-raw/CLI.md +4 -2
- package/dist/docs-raw/component-model.md +2 -2
- package/dist/docs-raw/generated/assembly.md +76 -3
- package/dist/docs-raw/generated/concepts.md +36 -5
- package/dist/docs-raw/generated/core.md +185 -21
- package/dist/docs-raw/generated/curves.md +344 -6
- package/dist/docs-raw/generated/runtime-names.md +12 -12
- package/dist/docs-raw/generated/sketch.md +16 -3
- package/dist/docs-raw/guides/inspection-bundles.md +5 -3
- package/dist/docs-raw/guides/structural-fea.md +224 -0
- package/dist/docs-raw/simulation-workflow.md +1 -1
- package/dist/docs-raw/skills/{forgecad-make-a-model.md → forgecad-build-model.md} +18 -8
- package/dist/docs-raw/skills/{forgecad-spec-by-walking-through-it.md → forgecad-design-spec.md} +6 -6
- package/dist/docs-raw/skills/{forgecad-model-grader.md → forgecad-grade-model.md} +8 -6
- package/{dist-skill/website/skills/forgecad-visual-spec.md → dist/docs-raw/skills/forgecad-image-prompt.md} +7 -7
- package/dist/docs-raw/skills/{forgecad-render-inspect.md → forgecad-inspect-model.md} +6 -6
- package/{dist-skill/website/skills/forgecad-project.md → dist/docs-raw/skills/forgecad-project-sync.md} +5 -5
- package/dist/docs-raw/skills/{forgecad-3d-reconstruction.md → forgecad-reconstruct-cad-file.md} +7 -7
- package/dist/docs-raw/skills/{forgecad-image-replicator.md → forgecad-reconstruct-from-images.md} +12 -12
- package/dist/docs-raw/skills/{forgecad-mujoco-verify.md → forgecad-verify-mujoco.md} +6 -6
- package/dist/docs-raw/skills/forgecad.md +1 -0
- package/dist/docs-raw/skills/index.md +9 -12
- package/dist/index.html +9 -9
- package/dist/llms.txt +7 -7
- package/dist/sitemap.xml +16 -16
- package/dist-cli/{check-compiler-HPF2T2FS.js → check-compiler-7YAHVXYM.js} +1 -1
- package/dist-cli/{check-query-propagation-HYSLTXAB.js → check-query-propagation-ZRR6IOJW.js} +1 -1
- package/dist-cli/{chunk-WLUKAW3H.js → chunk-VNM67DIV.js} +29671 -24865
- package/dist-cli/forgecad.js +5906 -714
- package/dist-cli/forgecad_geometry_bg.wasm +0 -0
- package/dist-skill/CONTEXT.md +853 -45
- package/dist-skill/SKILL.md +1 -0
- package/dist-skill/docs/CLI.md +4 -2
- package/dist-skill/docs/generated/assembly.md +73 -3
- package/dist-skill/docs/generated/core.md +185 -21
- package/dist-skill/docs/generated/curves.md +343 -6
- package/dist-skill/docs/generated/runtime-names.md +12 -12
- package/dist-skill/docs/generated/sketch.md +16 -3
- package/dist-skill/docs/guides/inspection-bundles.md +5 -3
- package/dist-skill/docs/guides/structural-fea.md +224 -0
- package/dist-skill/library/README.md +9 -12
- package/dist-skill/library/{forgecad-make-a-model → forgecad-build-model}/SKILL.md +16 -6
- package/dist-skill/library/{forgecad-spec-by-walking-through-it → forgecad-design-spec}/SKILL.md +4 -4
- package/dist-skill/library/{forgecad-spec-by-walking-through-it → forgecad-design-spec}/references/master-prompt.md +1 -1
- package/dist-skill/library/{forgecad-model-grader → forgecad-grade-model}/SKILL.md +6 -4
- package/dist-skill/library/forgecad-grade-model/agents/openai.yaml +4 -0
- package/dist-skill/library/{forgecad-visual-spec → forgecad-image-prompt}/SKILL.md +5 -5
- package/dist-skill/library/forgecad-image-prompt/agents/openai.yaml +4 -0
- package/dist-skill/library/{forgecad-render-inspect → forgecad-inspect-model}/SKILL.md +4 -4
- package/dist-skill/library/{forgecad-project → forgecad-project-sync}/SKILL.md +3 -3
- package/dist-skill/library/{forgecad-3d-reconstruction → forgecad-reconstruct-cad-file}/SKILL.md +5 -5
- package/dist-skill/library/forgecad-reconstruct-cad-file/agents/openai.yaml +4 -0
- package/dist-skill/library/{forgecad-image-replicator → forgecad-reconstruct-from-images}/SKILL.md +10 -10
- package/dist-skill/library/forgecad-reconstruct-from-images/agents/openai.yaml +4 -0
- package/dist-skill/library/{forgecad-mujoco-verify → forgecad-verify-mujoco}/SKILL.md +4 -4
- package/dist-skill/website/skills/{forgecad-make-a-model.md → forgecad-build-model.md} +18 -8
- package/dist-skill/website/skills/{forgecad-spec-by-walking-through-it.md → forgecad-design-spec.md} +6 -6
- package/dist-skill/website/skills/{forgecad-model-grader.md → forgecad-grade-model.md} +8 -6
- package/{dist/docs-raw/skills/forgecad-visual-spec.md → dist-skill/website/skills/forgecad-image-prompt.md} +7 -7
- package/dist-skill/website/skills/{forgecad-render-inspect.md → forgecad-inspect-model.md} +6 -6
- package/{dist/docs-raw/skills/forgecad-project.md → dist-skill/website/skills/forgecad-project-sync.md} +5 -5
- package/dist-skill/website/skills/{forgecad-3d-reconstruction.md → forgecad-reconstruct-cad-file.md} +7 -7
- package/dist-skill/website/skills/{forgecad-image-replicator.md → forgecad-reconstruct-from-images.md} +12 -12
- package/dist-skill/website/skills/{forgecad-mujoco-verify.md → forgecad-verify-mujoco.md} +6 -6
- package/dist-skill/website/skills/forgecad.md +1 -0
- package/dist-skill/website/skills/index.md +9 -12
- package/examples/analysis/structural-stress-fea.forge.js +19 -0
- package/examples/api/blend-full-round.forge.js +37 -0
- package/examples/api/blend-variable-radius.forge.js +51 -0
- package/examples/api/curve-project-and-intersect.forge.js +59 -0
- package/examples/api/extrude-up-to-face.forge.js +47 -0
- package/examples/api/spoon-full-tang-handle.forge.js +148 -0
- package/examples/api/surface-boundarynet-dished-bowl.forge.js +63 -0
- package/examples/api/surface-fill-interior-constraints.forge.js +59 -0
- package/examples/api/texture-projection.forge.js +75 -0
- package/examples/assets/uv-grid.png +0 -0
- package/package.json +4 -1
- package/dist/docs-raw/skills/forgecad-blockout-model.md +0 -49
- package/dist/docs-raw/skills/forgecad-component-model.md +0 -53
- package/dist/docs-raw/skills/forgecad-reconstruction-benchmark.md +0 -60
- package/dist-skill/library/forgecad-3d-reconstruction/agents/openai.yaml +0 -4
- package/dist-skill/library/forgecad-blockout-model/SKILL.md +0 -42
- package/dist-skill/library/forgecad-component-model/SKILL.md +0 -46
- package/dist-skill/library/forgecad-image-replicator/agents/openai.yaml +0 -4
- package/dist-skill/library/forgecad-model-grader/agents/openai.yaml +0 -4
- package/dist-skill/library/forgecad-reconstruction-benchmark/SKILL.md +0 -48
- package/dist-skill/library/forgecad-reconstruction-benchmark/agents/openai.yaml +0 -4
- package/dist-skill/library/forgecad-visual-spec/agents/openai.yaml +0 -4
- package/dist-skill/website/skills/forgecad-blockout-model.md +0 -49
- package/dist-skill/website/skills/forgecad-component-model.md +0 -53
- package/dist-skill/website/skills/forgecad-reconstruction-benchmark.md +0 -60
- /package/dist/assets/{landing-proof-driven-DiGqdtWa.js → landing-proof-driven-DNPRKL_p.js} +0 -0
- /package/dist-skill/library/{forgecad-spec-by-walking-through-it → forgecad-design-spec}/references/default-profiles.md +0 -0
- /package/dist-skill/library/{forgecad-render-inspect → forgecad-inspect-model}/summarize_manifest.py +0 -0
- /package/dist-skill/library/{forgecad-image-replicator → forgecad-reconstruct-from-images}/scripts/compare_images.py +0 -0
- /package/dist-skill/library/{forgecad-mujoco-verify → forgecad-verify-mujoco}/scripts/mujoco_verify.py +0 -0
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
---
|
|
2
|
+
skill-group: cli
|
|
3
|
+
skill-order: 3
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Structural FEA Stress Inspection
|
|
7
|
+
|
|
8
|
+
Use structural FEA when you want a ForgeCAD model to answer a load-case question:
|
|
9
|
+
|
|
10
|
+
- Where does this part see the highest stress?
|
|
11
|
+
- How far does it deflect?
|
|
12
|
+
- What is the minimum safety factor against the material yield strength?
|
|
13
|
+
- Did the mesh and solver produce evidence that is good enough to inspect?
|
|
14
|
+
|
|
15
|
+
ForgeCAD owns the authoring contract, solver orchestration, result feedback, and inspection report. The numerical solve is done out of process with Gmsh and CalculiX. Users author a study in the model, run `forgecad fea run`, and inspect a result bundle.
|
|
16
|
+
|
|
17
|
+
## What You Get
|
|
18
|
+
|
|
19
|
+
A solved FEA result bundle can produce:
|
|
20
|
+
|
|
21
|
+
- max von Mises stress
|
|
22
|
+
- max displacement
|
|
23
|
+
- minimum safety factor
|
|
24
|
+
- mesh quality and solver trust flags
|
|
25
|
+
- region-level hot spots
|
|
26
|
+
- `report.html`
|
|
27
|
+
- `summary.json`
|
|
28
|
+
- a safety-factor heatmap PNG
|
|
29
|
+
- a solver stress heatmap PNG
|
|
30
|
+
- a displacement magnitude heatmap PNG
|
|
31
|
+
|
|
32
|
+
The deformed render is display-only. It helps explain the displacement shape; it does not change the stress, displacement, or safety-factor numbers reported by the solver.
|
|
33
|
+
|
|
34
|
+
## What You Need Installed
|
|
35
|
+
|
|
36
|
+
The ForgeCAD CLI creates the package and renders the heatmap. The package runner uses self-contained `uv` Python scripts for Gmsh so every package resolves the same Python dependency set by default.
|
|
37
|
+
|
|
38
|
+
Run `forgecad doctor` to check these optional FEA tools in a separate section. Missing FEA tools do not block core ForgeCAD modeling, export, or render commands.
|
|
39
|
+
|
|
40
|
+
| Tool | Used For | Quick Check |
|
|
41
|
+
| --- | --- | --- |
|
|
42
|
+
| `uv` | Runs the packaged Python scripts with pinned dependencies | `uv --version` |
|
|
43
|
+
| CalculiX `ccx` | Solves the static stress deck | `ccx -v` |
|
|
44
|
+
| Bash | Runs the package script | `bash --version` |
|
|
45
|
+
| Chrome or Chromium | Renders PNG heatmaps from solved evidence | Chrome installed in a standard location, `CHROME_PATH=/path/to/chrome`, or `--chrome-path /path/to/chrome` |
|
|
46
|
+
|
|
47
|
+
If `uv` is not on `PATH`, set `UV=/path/to/uv` when running `forgecad fea run` or `forgecad fea check`.
|
|
48
|
+
|
|
49
|
+
If `ccx` is not on `PATH`, set `CCX=/path/to/ccx` when running `forgecad fea run` or `forgecad fea check`.
|
|
50
|
+
|
|
51
|
+
If you need an offline or pre-provisioned Python environment, set `PYTHON=/path/to/python`. That opt-out Python must be able to `import gmsh`; use `GMSH_PYTHONPATH` / `GMSH_PYTHON_PATH` only for that override path.
|
|
52
|
+
|
|
53
|
+
ForgeCAD does not bundle CalculiX. The generated `uv` scripts pin the Gmsh Python package, and `uv` downloads/caches it from the configured Python package index. If you redistribute solver binaries or Python wheels to customers, handle their licenses as part of your distribution.
|
|
54
|
+
|
|
55
|
+
## Author The Study
|
|
56
|
+
|
|
57
|
+
Structural FEA starts in the `.forge.js` file. The script should return an authored `assembly(...)` with:
|
|
58
|
+
|
|
59
|
+
1. a structural part marked with `Fea.body(...)`
|
|
60
|
+
2. one or more static stress studies from `Fea.study.staticStress(...)`
|
|
61
|
+
3. explicit fixtures and loads
|
|
62
|
+
4. a second-order tetrahedral mesh intent
|
|
63
|
+
|
|
64
|
+
```js
|
|
65
|
+
const aluminum = Fea.material("6061-T6", {
|
|
66
|
+
densityKgM3: 2700,
|
|
67
|
+
youngsModulusMPa: 68900,
|
|
68
|
+
poissonRatio: 0.33,
|
|
69
|
+
yieldStrengthMPa: 276,
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
const beam = box(120, 12, 12);
|
|
73
|
+
|
|
74
|
+
return assembly("Cantilever Stress Study")
|
|
75
|
+
.addPart("Beam", beam, {
|
|
76
|
+
fea: Fea.body({ material: aluminum }),
|
|
77
|
+
})
|
|
78
|
+
.withFeaStudy(
|
|
79
|
+
Fea.study.staticStress("end-load", {
|
|
80
|
+
fixtures: [
|
|
81
|
+
Fea.fix.fixed(Fea.region.face("fixed-end", beam.face("left"))),
|
|
82
|
+
],
|
|
83
|
+
loads: [
|
|
84
|
+
Fea.load.force(Fea.region.face("load-end", beam.face("right")), {
|
|
85
|
+
newtons: 80,
|
|
86
|
+
direction: [0, 0, -1],
|
|
87
|
+
}),
|
|
88
|
+
],
|
|
89
|
+
target: Fea.target.minSafetyFactor(2),
|
|
90
|
+
mesh: Fea.mesh.quadraticTets({ maxSizeMm: 4 }),
|
|
91
|
+
}),
|
|
92
|
+
);
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
The complete API reference is generated from source in [Assembly](../generated/assembly.md). Keep reusable examples in `.forge.js` files; do not duplicate every API signature in handwritten docs.
|
|
96
|
+
|
|
97
|
+
## Choose Stable Regions
|
|
98
|
+
|
|
99
|
+
Fixtures and loads must name real geometric regions. ForgeCAD will not guess them later.
|
|
100
|
+
|
|
101
|
+
Use `Fea.region.face(...)` when you can refer to a compiler-owned exact face, such as a simple box face or a named face from the model API.
|
|
102
|
+
|
|
103
|
+
Use `Fea.region.plane(...)` when the target is a planar face created by profiles, booleans, or imported geometry and the face name is not stable enough. Make the plane specific enough that it matches exactly one STEP/Gmsh surface.
|
|
104
|
+
|
|
105
|
+
During export, ForgeCAD writes a region map and a STEP tag plan. During the package run, the Gmsh preflight matches every authored fixture/load region against the STEP surfaces. Missing or ambiguous matches fail hard. That is intentional: a silent substitute face would make the stress result untrustworthy.
|
|
106
|
+
|
|
107
|
+
## Run The Flow
|
|
108
|
+
|
|
109
|
+
Installed users run the CLI as `forgecad`. Developers running inside this repository can replace `forgecad` with `node dist-cli/forgecad.js`.
|
|
110
|
+
|
|
111
|
+
Run every authored FEA study and save an inspection result bundle:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
forgecad fea run examples/analysis/structural-stress-fea.forge.js
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Run one named study:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
forgecad fea run bracket.forge.js --study side-load
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Open the report:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
forgecad fea open out/bracket-fea
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Render a customer-facing safety view:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
forgecad fea render out/bracket-fea/side-load --field safety
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Render the engineering stress heatmap:
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
forgecad fea render out/bracket-fea/side-load --field stress
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Render the displacement magnitude heatmap:
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
forgecad fea render out/bracket-fea/side-load --field displacement
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Render a deformed stress view only when the displacement shape is useful to inspect:
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
forgecad fea render out/bracket-fea/side-load \
|
|
151
|
+
--field stress \
|
|
152
|
+
--shape deformed \
|
|
153
|
+
--exaggerate 10
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
The deformation scale only affects the render. It does not change the reported stress, displacement, or safety factor.
|
|
157
|
+
|
|
158
|
+
Each solved study result directory includes:
|
|
159
|
+
|
|
160
|
+
- `report.html` for the human inspection report
|
|
161
|
+
- `summary.json` for automation
|
|
162
|
+
- `renders/safety-factor.png` for the customer-facing safety heatmap
|
|
163
|
+
- `renders/stress.png` for the engineering von Mises stress heatmap
|
|
164
|
+
|
|
165
|
+
Displacement and deformed-shape PNGs are explicit render outputs from `forgecad fea render --field displacement` or `--shape deformed`.
|
|
166
|
+
|
|
167
|
+
Compare two solved result bundles:
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
forgecad fea compare out/baseline-fea/side-load out/four-x-fea/side-load
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Comparison renders use one shared camera, image size, and safety-factor legend.
|
|
174
|
+
|
|
175
|
+
Run in CI and fail the process when authored targets fail:
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
forgecad fea check bracket.forge.js --json
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## Read The Results
|
|
182
|
+
|
|
183
|
+
Start with `report.html` or `summary.json` in the result directory. The important fields are the maximum stress, maximum displacement, minimum safety factor, hot spots, and any mesh or solver trust findings.
|
|
184
|
+
|
|
185
|
+
The default user-facing result is safety factor because it answers "is this part okay?" Use stress when you need the raw engineering von Mises field.
|
|
186
|
+
|
|
187
|
+
Advanced users can still run the lower-level package flow:
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
forgecad export fea model.forge.js --output out/beam.feapkg
|
|
191
|
+
forgecad sim fea out/beam.feapkg --json
|
|
192
|
+
forgecad inspect structural stress out/beam.feapkg --camera iso --output out/stress.png
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Those commands are useful for debugging package evidence. Customer docs should prefer `forgecad fea ...`.
|
|
196
|
+
|
|
197
|
+
## Current Scope
|
|
198
|
+
|
|
199
|
+
Structural FEA V1 is intentionally narrow:
|
|
200
|
+
|
|
201
|
+
- linear static stress only
|
|
202
|
+
- one structural body per package
|
|
203
|
+
- exact OCCT STEP export only
|
|
204
|
+
- second-order tetrahedral elements only
|
|
205
|
+
- fixed fixtures and force loads only
|
|
206
|
+
- no contacts, bonded assemblies, thermal loads, buckling, fatigue, plasticity, or certification workflow
|
|
207
|
+
|
|
208
|
+
ForgeCAD refuses mesh or faceted fallback for FEA export. If exact geometry export, region mapping, mesh quality, solver convergence, result parsing, or evidence trust fails, the command should fail with an actionable error instead of inventing a weaker path.
|
|
209
|
+
|
|
210
|
+
## Troubleshooting
|
|
211
|
+
|
|
212
|
+
| Symptom | What It Means | What To Do |
|
|
213
|
+
| --- | --- | --- |
|
|
214
|
+
| `FEA.TOOLCHAIN_UV_MISSING` | The package runner cannot find `uv`. | Install `uv` or run with `UV=/path/to/uv`. |
|
|
215
|
+
| `FEA.TOOLCHAIN_PYTHON_MISSING` | A `PYTHON=...` override points to a missing Python executable. | Install Python 3 or fix the `PYTHON` path. |
|
|
216
|
+
| `FEA.TOOLCHAIN_GMSH_MISSING` | The selected Python process cannot import Gmsh. | Prefer the default `uv` path, or install the Gmsh Python module for the `PYTHON=...` override. |
|
|
217
|
+
| `FEA.TOOLCHAIN_CCX_MISSING` | CalculiX is not available as `ccx`. | Install CalculiX or run with `CCX=/path/to/ccx`. |
|
|
218
|
+
| `FEA.GMSH_FACE_MATCH_NONE` | An authored fixture/load region did not match a STEP surface. | Use a more stable face reference or a more precise planar region. |
|
|
219
|
+
| `FEA.GMSH_FACE_MATCH_AMBIGUOUS` | A region matched more than one STEP surface. | Make the target region more specific or change the model so the load/fixture face is unique. |
|
|
220
|
+
| `FEA.MESH_QUALITY_BELOW_TARGET` | The mesh exists but did not meet the package quality target. | Reduce mesh size, simplify tiny features, or improve the geometry around the hot area. |
|
|
221
|
+
| `FEA.SOLVER_FAILED` | CalculiX did not complete the solve. | Inspect `solver/static_stress.log`, then check fixtures, loads, material values, and over-constraint. |
|
|
222
|
+
| `FEA.FIELD_UNTRUSTED` | The heatmap input is not trusted package evidence. | Run inspection on the `.feapkg` directory after `forgecad sim fea`, not a copied JSON file. |
|
|
223
|
+
|
|
224
|
+
For command flags, use the [CLI reference](../CLI.md). For the public API, use the generated [Assembly reference](../generated/assembly.md).
|
|
@@ -8,15 +8,12 @@ forgecad skill install
|
|
|
8
8
|
|
|
9
9
|
The installed skill names are namespaced to avoid collisions with a user's existing generic skills.
|
|
10
10
|
|
|
11
|
-
- `forgecad-
|
|
12
|
-
- `forgecad-
|
|
13
|
-
- `forgecad-
|
|
14
|
-
- `forgecad-image-
|
|
15
|
-
- `forgecad-
|
|
16
|
-
- `forgecad-
|
|
17
|
-
- `forgecad-
|
|
18
|
-
- `forgecad-
|
|
19
|
-
- `forgecad-
|
|
20
|
-
- `forgecad-render-inspect`
|
|
21
|
-
- `forgecad-spec-by-walking-through-it`
|
|
22
|
-
- `forgecad-visual-spec`
|
|
11
|
+
- `forgecad-build-model`
|
|
12
|
+
- `forgecad-design-spec`
|
|
13
|
+
- `forgecad-grade-model`
|
|
14
|
+
- `forgecad-image-prompt`
|
|
15
|
+
- `forgecad-inspect-model`
|
|
16
|
+
- `forgecad-project-sync`
|
|
17
|
+
- `forgecad-reconstruct-cad-file`
|
|
18
|
+
- `forgecad-reconstruct-from-images`
|
|
19
|
+
- `forgecad-verify-mujoco`
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: forgecad-
|
|
3
|
-
description:
|
|
2
|
+
name: forgecad-build-model
|
|
3
|
+
description: Build or edit a manufacture-realistic `.forge.js` model in a project, then validate it with run, render, inspect, and export evidence.
|
|
4
4
|
forgecad-public: true
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
#
|
|
7
|
+
# Build Model
|
|
8
8
|
|
|
9
9
|
Create new ForgeCAD models in the user's active ForgeCAD project.
|
|
10
10
|
|
|
@@ -79,7 +79,17 @@ For any mechanism (linkage, hinge, slider, suspension, gripper, drawer), the rig
|
|
|
79
79
|
|
|
80
80
|
A mechanical script is not done when it merely looks assembled. Every visible piece needs a physical reason to be where it is: fused material, contact faces, a screw stack, a pin in a bore, a tab in a slot, a gasket on a land, a bearing in a seat, a cable in a channel, or a named intentional ghost.
|
|
81
81
|
|
|
82
|
-
-
|
|
82
|
+
For multi-part assemblies, the component model is mandatory:
|
|
83
|
+
|
|
84
|
+
- Parts build at origin in their own local coordinates. They do not know final assembly-space offsets, sibling dimensions, or world placement.
|
|
85
|
+
- A part's public interface is `shape` plus connectors and metadata, e.g. `return { shape, boltPattern, pinionZ }`. Declare mating faces with `.withConnectors({})`; axes point outward, with prismatic slide axes as the explicit exception.
|
|
86
|
+
- The parent assembly chooses the root and positions every structural part through connectors, `connect()`, `match()`, or `matchTo()`. Final `translate()` calls are not assembly contracts.
|
|
87
|
+
- Data flows down through `require('./part.forge.js', params)` overrides and up through returned metadata. Siblings never import each other; the parent routes shared decisions and measured outputs.
|
|
88
|
+
- Default to one file for a project-specific assembly. Split only for cross-project reuse, independent subassemblies, or when a file grows past roughly 300 lines. Never create `shared-dims.js` just to coordinate siblings.
|
|
89
|
+
|
|
90
|
+
Reject these shortcuts on sight: sibling `require()`, assembly-space coordinates inside a part, `translate()` used to position a structural assembly member, `console.log` + `if` validation instead of `verify.*`, and bare `connector.neutral()` outside a reusable component library with compatibility checks.
|
|
91
|
+
|
|
92
|
+
- Bespoke fixed assemblies: build each part in local coordinates, pick one root, place every touching part with `matchTo()`, verify each mate with `verify.connectorDistance`.
|
|
83
93
|
- Manual joint frames (`addFixed`/`addRevolute`/`addPrismatic` with a hand-built `frame:`) are scaffolding, not contracts. Before delivery, convert mating interfaces to connectors with `connect()`/`match()`, or prove the manual joint with `forgecad debug assembly --fail-on warning` and documented geometry.
|
|
84
94
|
- A named part must not contain unintentional disconnected bodies: boolean-join manufactured features, model fasteners/seals as separate named parts, or add the receiving holes/lands that explain the separation.
|
|
85
95
|
- Screws are not decoration: clearance/counterbore in the cover, receiving boss or through stack in the parent, material around both, axes aligned from one shared bolt pattern.
|
|
@@ -94,7 +104,7 @@ Treat `fillet()`/`chamfer()` as experimental (Manifold can be incorrect, OCCT sl
|
|
|
94
104
|
|
|
95
105
|
## Imported Parts (User-Supplied 3D Files)
|
|
96
106
|
|
|
97
|
-
When the user supplies mesh or CAD files to design around (a motor, an off-the-shelf housing, a scanned part), the import IS a component of the assembly — keep it, don't rebuild it parametrically (rebuilding is `forgecad-
|
|
107
|
+
When the user supplies mesh or CAD files to design around (a motor, an off-the-shelf housing, a scanned part), the import IS a component of the assembly — keep it, don't rebuild it parametrically (rebuilding is `forgecad-reconstruct-cad-file`, a different request).
|
|
98
108
|
|
|
99
109
|
- Wrap each import in its own part file: `Import.mesh()` for STL/OBJ/3MF, `Import.step()` for STEP (OCCT backend), normalize scale and orientation, recenter to a sane local origin, then treat it exactly like a purchased part — connectors at its real mating features, positioned by the assembly via `matchTo()`.
|
|
100
110
|
- Never trust units. Verify against a known dimension before mating anything: bbox via `forgecad run --details`, or `inspect section --ray` across a bore or face pair. For 3MF, account for every build item printed by `forgecad run` before flattening.
|
|
@@ -146,7 +156,7 @@ A manufacture-realistic model must yield a package a shop can consume, not just
|
|
|
146
156
|
|
|
147
157
|
## Render and Inspect Cadence
|
|
148
158
|
|
|
149
|
-
**You are building blind unless you render.** `forgecad run` passing only means the code didn't crash — it cannot tell you a hole is misplaced, a rib pokes through a cover, or a part doesn't fit. Render from angles chosen for the model's actual geometry and read every PNG. For command syntax, evidence selection, and manifest reading, use the `forgecad-
|
|
159
|
+
**You are building blind unless you render.** `forgecad run` passing only means the code didn't crash — it cannot tell you a hole is misplaced, a rib pokes through a cover, or a part doesn't fit. Render from angles chosen for the model's actual geometry and read every PNG. For command syntax, evidence selection, and manifest reading, use the `forgecad-inspect-model` skill and the CLI docs — this skill fixes only the cadence and the gates.
|
|
150
160
|
|
|
151
161
|
Render after every feature addition, boolean cut, symmetric copy placement, and the last feature. Inspect after adding hidden geometry a surface render cannot prove, after adding or moving mating parts, ghosts, connectors, thin walls, or screw holes, and before delivery with thresholds set for the material/process.
|
|
152
162
|
|
package/dist-skill/library/{forgecad-spec-by-walking-through-it → forgecad-design-spec}/SKILL.md
RENAMED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: forgecad-spec
|
|
3
|
-
description:
|
|
2
|
+
name: forgecad-design-spec
|
|
3
|
+
description: Create a ForgeCAD design brief, HLD, or LLD before coding by walking through use, assembly, interfaces, decisions, and verification.
|
|
4
4
|
forgecad-public: true
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# Spec
|
|
7
|
+
# Design Spec
|
|
8
8
|
|
|
9
9
|
The design document — a git-committed, diff-reviewed markdown file — is the source of truth. Not the code, not the chat, not your head. You iterate it by commit-and-review, and the `git diff` is the review artifact.
|
|
10
10
|
|
|
@@ -129,4 +129,4 @@ HLDs and LLDs iterate through git, not conversation:
|
|
|
129
129
|
|-------|--------------------|--------|------|
|
|
130
130
|
| Explore a fuzzy ask | Intake | engineering brief + master prompt | HLD |
|
|
131
131
|
| Decide *what* to build | HLD | `*-hld.md` (Decisions filled) | LLD |
|
|
132
|
-
| Detail *how* to build | LLD | `*-lld.md` | `forgecad-
|
|
132
|
+
| Detail *how* to build | LLD | `*-lld.md` | `forgecad-build-model` + `forgecad` → `.forge.js` |
|
|
@@ -68,6 +68,6 @@ Required outputs:
|
|
|
68
68
|
7. Bill of materials — manufactured, printed (if any), and purchased parts; per line: name, exact spec or part class, quantity, purpose, key dimensions/ratings; mirrored in-model with `bom()` so `forgecad export report` reproduces it.
|
|
69
69
|
8. Assembly package — assembly order, jointing method, insert/bearing/pin usage, fastening notes, failure-prone steps.
|
|
70
70
|
9. Validation package — motion range, likely collisions, stiffness/load risks, manufacturability, tolerance stacks, wear points; check printability only for printed parts; check moving designs through their operating range, not just at rest pose.
|
|
71
|
-
10. ForgeCAD implementation package — the actual file structure; in a writable workspace, write the `.forge.js` files instead of stopping at prose, with `main.forge.js` as the runnable entry point for multi-file projects; `dim()` annotations on the dimensions a builder must hit, and the process-appropriate export proven to run (per the forgecad-
|
|
71
|
+
10. ForgeCAD implementation package — the actual file structure; in a writable workspace, write the `.forge.js` files instead of stopping at prose, with `main.forge.js` as the runnable entry point for multi-file projects; `dim()` annotations on the dimensions a builder must hit, and the process-appropriate export proven to run (per the forgecad-build-model Manufacturing Outputs bar).
|
|
72
72
|
11. Final verdict — end with exactly one of `BUILD-READY` or `BEST-EFFORT BUILD CANDIDATE`.
|
|
73
73
|
```
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: forgecad-model
|
|
3
|
-
description:
|
|
2
|
+
name: forgecad-grade-model
|
|
3
|
+
description: Grade a ForgeCAD or CAD-as-code model against a requirement, brief, prompt, reference, or acceptance criteria with evidence and a 0-10 score.
|
|
4
4
|
forgecad-public: true
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
#
|
|
7
|
+
# Grade Model
|
|
8
8
|
|
|
9
9
|
Grade the delivered model against the requirement, not against what could be fixed later. Never edit the model unless the user explicitly requests repairs — then record the baseline grade first, change, and re-grade.
|
|
10
10
|
|
|
@@ -14,7 +14,7 @@ Grade the delivered model against the requirement, not against what could be fix
|
|
|
14
14
|
2. **Run the model**: `forgecad run <model>.forge.js` (in the ForgeCAD repo use the local build, `node dist-cli/forgecad.js run ...`). If it fails to execute, stop and apply the caps.
|
|
15
15
|
3. **Render** at least `iso`, `front`, `right`, `top` to a scratch dir; add views (back, bottom, close-up, section) when the model is asymmetric, hollow, mechanical, or likely to hide mistakes.
|
|
16
16
|
4. **Open and look at every PNG** — never score from command output alone. Check silhouette, proportions, required features, part boundaries, interfaces, and whether the model reads as the requested artifact from more than one angle.
|
|
17
|
-
5. **Inspect** whenever hidden internals, fit, wall thickness, or assembly behavior are central to the brief — grading without inspecting them caps the score. Delegate evidence choice, commands, and manifest reading to the `forgecad-
|
|
17
|
+
5. **Inspect** whenever hidden internals, fit, wall thickness, or assembly behavior are central to the brief — grading without inspecting them caps the score. Delegate evidence choice, commands, and manifest reading to the `forgecad-inspect-model` skill. Findings (unexpected collisions, thin regions, floating bodies, wrong component counts) are evidence, not warnings to wave away.
|
|
18
18
|
6. **Score**: fill the rubric, apply caps, give a final 0-10 in whole or `.5` increments. Unknowns count against the score.
|
|
19
19
|
|
|
20
20
|
## Rubric
|
|
@@ -40,6 +40,7 @@ Maximum scores, applied after the rubric:
|
|
|
40
40
|
- A must-have requirement is absent: max `6`.
|
|
41
41
|
- Visually recognizable but physically impossible for the requested use: max `6`.
|
|
42
42
|
- Internals, fit, walls, or assembly central to the brief but uninspected: max `7`.
|
|
43
|
+
- Multi-part assembly violates the ForgeCAD component model — sibling imports, assembly-space coordinates inside parts, structural `translate()` placement, missing connector mates, or parent/child data flow confusion: max `7`; max `6` when the violation makes the assembly brittle or mechanically wrong.
|
|
43
44
|
- Inspection finds unexpected collisions, floating bodies, critical thin walls, or wrong connectivity: max `6`; max `5` when the defect invalidates the main function.
|
|
44
45
|
- Delivered as a finished product/prototype but presented with default flat lighting (no `scene()` rig), a generically colorful or material-false palette, or teaching-diagram styling: max `8`. Does not apply when the brief asks for a blockout or bare technical study.
|
|
45
46
|
- Any score relying on an assumption the evidence cannot verify: mark it `Unknown`, never score above `8`.
|
|
@@ -66,5 +67,6 @@ Next fixes: the 2-5 highest-leverage improvements.
|
|
|
66
67
|
- Grade the default returned model unless the user names a parameter set or variant.
|
|
67
68
|
- No points for comments, labels, or intentions absent from the geometry.
|
|
68
69
|
- Decorative screws, floating labels, and teaching-diagram callouts are not real mechanical interfaces.
|
|
70
|
+
- For multi-part assemblies, require the component model: parts build locally at origin, expose connectors/metadata, the parent positions them, and inter-part data flows through parent props and returned metadata.
|
|
69
71
|
- Cite which render or inspection finding drove the grade.
|
|
70
72
|
- When comparing models, use identical checklist, cameras, inspection evidence, and caps for all.
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: forgecad-
|
|
3
|
-
description:
|
|
2
|
+
name: forgecad-image-prompt
|
|
3
|
+
description: Write builder-honest AI image prompts from a concrete ForgeCAD model, build brief, HLD, or LLD without hiding how the artifact is built.
|
|
4
4
|
forgecad-public: true
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
#
|
|
7
|
+
# Image Prompt
|
|
8
8
|
|
|
9
9
|
## Scope
|
|
10
10
|
|
|
11
|
-
Only for artifacts already concrete enough to visualize (a specific `.forge.js` model, build brief, or HLD); route vague briefs to `forgecad-spec
|
|
11
|
+
Only for artifacts already concrete enough to visualize (a specific `.forge.js` model, build brief, or HLD); route vague briefs to `forgecad-design-spec` first. Read minimum context — entry `.forge.js`, one key helper if it delegates geometry, brief/HLD — and capture what must survive the image model: artifact type and scale, major subassemblies, actuation style, visible mechanisms, material and color cues.
|
|
12
12
|
|
|
13
13
|
## Core Rule
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Image prompts, not concept art: show the final artifact clearly, preserve build and subsystem truth, and keep visible the seams, modules, hardware, and mechanical hierarchy that matter.
|
|
16
16
|
|
|
17
17
|
Negatives (the only negatives list — reuse it, never restate variants):
|
|
18
18
|
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: forgecad-
|
|
3
|
-
description:
|
|
2
|
+
name: forgecad-inspect-model
|
|
3
|
+
description: Select, run, and interpret ForgeCAD inspection evidence for collisions, sections, wall thickness, components, masks, depth, normals, surface continuity, and fit.
|
|
4
4
|
forgecad-public: true
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
#
|
|
7
|
+
# Inspect Model
|
|
8
8
|
|
|
9
9
|
Use `forgecad inspect ...` when a shaded render is too ambiguous and you need structured evidence: a bundle directory with evidence PNGs plus a root `manifest.json` (or, for `inspect section`, a probe directory with `result.json`, `section.svg`, `section.png`). Inspection is not a substitute artifact: look inside with sections, masks, `--focus`/`--hide`, and transparency — never edit the model into a cutaway or exploded default to make inspecting easier. Output dirs: let `inspect` allocate its timestamped directory by default (repeated probes never collide); use `/tmp/<model>-inspect` for throwaway bundles, a project directory only for persistent artifacts.
|
|
10
10
|
|
|
11
|
-
Routing: authoring/API questions → `forgecad` skill; creating a new model → `forgecad-
|
|
11
|
+
Routing: authoring/API questions → `forgecad` skill; creating a new model → `forgecad-build-model`.
|
|
12
12
|
|
|
13
13
|
## Workflow
|
|
14
14
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: forgecad-project
|
|
3
|
-
description: ForgeCAD project
|
|
2
|
+
name: forgecad-project-sync
|
|
3
|
+
description: Manage hosted ForgeCAD project sync from the CLI: init, clone, pull, push, file operations, members, publishing, and shares.
|
|
4
4
|
forgecad-public: true
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
#
|
|
7
|
+
# Project Sync
|
|
8
8
|
|
|
9
9
|
forgecad.io is the hosted ForgeCAD platform; a project is a local folder linked to the server by `forgecad.json`. The full command inventory (project, file, member, share, token commands and flags) lives in `forgecad project --help` and the forgecad skill's `docs/CLI.md` — do not relearn it here.
|
|
10
10
|
|
package/dist-skill/library/{forgecad-3d-reconstruction → forgecad-reconstruct-cad-file}/SKILL.md
RENAMED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: forgecad-
|
|
3
|
-
description: Reconstruct a parametric ForgeCAD model from an existing
|
|
2
|
+
name: forgecad-reconstruct-cad-file
|
|
3
|
+
description: Reconstruct a readable parametric ForgeCAD model from an existing CAD or mesh file such as STL, OBJ, 3MF, STEP, or STP.
|
|
4
4
|
forgecad-public: true
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
#
|
|
7
|
+
# Reconstruct CAD File
|
|
8
8
|
|
|
9
9
|
The reference asset is evidence, not the deliverable. The deliverable is a readable, parametric `.forge.js` model that runs, renders, and scores well against the source. Never return `Import.mesh()`/`Import.step()` of the source as the final model unless the user explicitly asks for an import wrapper — imports are for measurement, rendering, and scoring only.
|
|
10
10
|
|
|
11
|
-
Routing: user wants to KEEP the file as a live component and design around it (bracket, enclosure, mating assembly) → `forgecad-
|
|
11
|
+
Routing: user wants to KEEP the file as a live component and design around it (bracket, enclosure, mating assembly) → `forgecad-build-model` (Imported Parts section), not this skill; prepared benchmark/RL episodes → use the task-local benchmark instructions, not the public skill library; inspection-bundle interpretation → `forgecad-inspect-model`; independent grading after reconstruction → `forgecad-grade-model`; API and command reference → `forgecad` skill + CLI.md.
|
|
12
12
|
|
|
13
13
|
## Workflow
|
|
14
14
|
|
|
@@ -43,4 +43,4 @@ Faceted sources: decide whether tessellation itself is evidence. Matching low-po
|
|
|
43
43
|
|
|
44
44
|
## Done Criteria
|
|
45
45
|
|
|
46
|
-
The final model must run, render, re-compare at `--samples 5000`, and pass an `inspect compare overlay`. Add targeted inspects (`forgecad-
|
|
46
|
+
The final model must run, render, re-compare at `--samples 5000`, and pass an `inspect compare overlay`. Add targeted inspects (`forgecad-inspect-model`) when the object is multi-part, hollow, thin-walled, or surface-sensitive. Report: source and candidate paths, score JSON path, final metrics, and every known mismatch classified as intentional simplification or remaining work.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "ForgeCAD Reconstruct CAD File"
|
|
3
|
+
short_description: "Rebuild CAD files as ForgeCAD models"
|
|
4
|
+
default_prompt: "Use $forgecad-reconstruct-cad-file to inspect this 3D file, rebuild it as parametric ForgeCAD, and score the result against the source."
|
package/dist-skill/library/{forgecad-image-replicator → forgecad-reconstruct-from-images}/SKILL.md
RENAMED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: forgecad-
|
|
3
|
-
description:
|
|
2
|
+
name: forgecad-reconstruct-from-images
|
|
3
|
+
description: Reconstruct a real parametric ForgeCAD object from reference images by using images as evidence, not as a one-view facade.
|
|
4
4
|
forgecad-public: true
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
#
|
|
7
|
+
# Reconstruct From Images
|
|
8
8
|
|
|
9
9
|
The reference image is evidence, not the deliverable. The deliverable is a real parametric object that holds up from front, back, side, top, bottom, and reference camera views — a model that matches one image but falls apart from other angles has failed, even if the comparison board looks close. Cutaway, sectioned, exploded, or transparent references are evidence about the complete object: build the closed artifact and recreate explanatory views with viewer/inspection tools (the main `forgecad` skill's closed-artifact rule applies).
|
|
10
10
|
|
|
11
11
|
## Companion Skills
|
|
12
12
|
|
|
13
13
|
- `forgecad` — API docs, model authoring, renderer behavior.
|
|
14
|
-
- `forgecad-spec
|
|
15
|
-
- `forgecad-
|
|
16
|
-
- `forgecad-
|
|
14
|
+
- `forgecad-design-spec` — when the images underdetermine artifact family, process posture, scale, operating story, or validation boundary.
|
|
15
|
+
- `forgecad-build-model` — file placement, project structure, decomposition, definition of done.
|
|
16
|
+
- `forgecad-inspect-model` — pre-delivery inspection for multi-part, internal, mechanical, thin-wall, or fit-sensitive objects.
|
|
17
17
|
|
|
18
18
|
## Core Rule
|
|
19
19
|
|
|
@@ -23,19 +23,19 @@ Infer the real object before matching any camera — identity, manufacture, scal
|
|
|
23
23
|
|
|
24
24
|
1. Stage references in `/tmp/<slug>-replicate/refs`, keeping originals and adding view names where possible (`front`, `side`, `rear-iso`, `top`, `detail`).
|
|
25
25
|
2. Read each image as evidence, recording: visible facts; scale cues; camera cues; unknowns (hidden/occluded geometry); conflicts across images or stylization.
|
|
26
|
-
3. Write a Real Object Brief — a hard gate before modeling: (a) artifact identity + operating story; (b) assumed scale and units; (c) process posture + part/BOM boundary (real geometry vs purchased vs ghost vs omitted); (d) inferred hidden-side geometry + expected canonical front/back/left/right/top/bottom forms; (e) validation views and inspection evidence. Use `forgecad-spec
|
|
27
|
-
4. Build a coarse 3D blockout — model the object, not the image: large volumes, axes, symmetry, side depth, rear form, underside, hidden continuations. Render canonical views before any reference-camera comparison. Follow `forgecad-
|
|
26
|
+
3. Write a Real Object Brief — a hard gate before modeling: (a) artifact identity + operating story; (b) assumed scale and units; (c) process posture + part/BOM boundary (real geometry vs purchased vs ghost vs omitted); (d) inferred hidden-side geometry + expected canonical front/back/left/right/top/bottom forms; (e) validation views and inspection evidence. Use `forgecad-design-spec` when these are underdetermined.
|
|
27
|
+
4. Build a coarse 3D blockout — model the object, not the image: large volumes, axes, symmetry, side depth, rear form, underside, hidden continuations. Render canonical views before any reference-camera comparison. Follow `forgecad-build-model` for project structure.
|
|
28
28
|
5. Calibrate one camera per usable reference, only after the blockout makes sense from canonical views. Use the object center as `target`; estimate azimuth/elevation/distance/FOV from visible faces and perspective cues; use orthographic when parallel edges stay parallel with no perspective convergence.
|
|
29
29
|
6. Render comparison boards: render the model from each calibrated reference camera and place it next to the original. Never compare from memory.
|
|
30
30
|
7. Iterate one class of change at a time, in order: object hypothesis → major proportions → canonical geometry → camera → details → presentation. If improving one reference view makes another view or a canonical render worse, the object hypothesis is wrong — fix the model, not the camera illusion.
|
|
31
31
|
8. Use every image as a constraint. Never pick one target image and ignore the rest: assign each image a camera, evidence list, and confidence; optimize one shared geometry against the whole set; state how distorted or decorative images were weighted.
|
|
32
|
-
9. Validate the final object: `forgecad run`, reference comparison boards, canonical renders, and targeted inspections via `forgecad-
|
|
32
|
+
9. Validate the final object: `forgecad run`, reference comparison boards, canonical renders, and targeted inspections via `forgecad-inspect-model`.
|
|
33
33
|
|
|
34
34
|
## Comparison Boards
|
|
35
35
|
|
|
36
36
|
Render with exact `--camera` specs (see the forgecad CLI doc for supported forms). If exact full camera specs do not render, fix the renderer before continuing — never substitute guesses from default `iso` renders.
|
|
37
37
|
|
|
38
|
-
Build side-by-side boards with the bundled self-contained `uv` helper (installs Pillow on demand). Resolve `scripts/compare_images.py` relative to the installed `forgecad-
|
|
38
|
+
Build side-by-side boards with the bundled self-contained `uv` helper (installs Pillow on demand). Resolve `scripts/compare_images.py` relative to the installed `forgecad-reconstruct-from-images` skill directory:
|
|
39
39
|
|
|
40
40
|
```bash
|
|
41
41
|
uv run <skill-dir>/scripts/compare_images.py refs/front.png render-front.png compare-front.png
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "ForgeCAD Reconstruct From Images"
|
|
3
|
+
short_description: "Build real CAD objects from images"
|
|
4
|
+
default_prompt: "Use $forgecad-reconstruct-from-images to infer the real object from these reference images and build a ForgeCAD model that holds up from all views."
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: forgecad-mujoco
|
|
3
|
-
description: Verify ForgeCAD MJCF
|
|
2
|
+
name: forgecad-verify-mujoco
|
|
3
|
+
description: Verify a ForgeCAD MJCF export in MuJoCo with dynamics, contacts, controls, joint travel, and rendered evidence before calling it simulation-ready.
|
|
4
4
|
forgecad-public: true
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
#
|
|
7
|
+
# Verify MuJoCo
|
|
8
8
|
|
|
9
9
|
Use this when `forgecad export mjcf ...` is part of the deliverable. A model is not sim-ready just because `forgecad check simready` passes or the MJCF file loads: it must be loaded in MuJoCo, stepped under gravity, driven with the intended controls, contact pairs inspected, and rendered from useful views.
|
|
10
10
|
|
|
11
|
-
Routing: geometry-only visual inspection -> `forgecad-
|
|
11
|
+
Routing: geometry-only visual inspection -> `forgecad-inspect-model`; model authoring/API questions -> `forgecad`; building a new model -> `forgecad-build-model`.
|
|
12
12
|
|
|
13
13
|
## Definition Of Done
|
|
14
14
|
|