forgecad 0.9.16 → 0.10.1
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-CXvls4-J.js → AdminPage-DcCnj0qo.js} +1 -1
- package/dist/assets/{BenchmarkPage-B27zk8xL.js → BenchmarkPage-BVEpJSVk.js} +1 -1
- package/dist/assets/{BlogPage-CMAVvgQL.js → BlogPage-DHaGP50_.js} +1 -1
- package/dist/assets/{DocsPage-knf4I4h7.js → DocsPage-CDoxHkz8.js} +40 -859
- package/dist/assets/EditorApp-BJ0Dloyh.js +16446 -0
- package/dist/assets/{EmbedViewer-D7ZGlFjx.js → EmbedViewer-CRKZbY0y.js} +2 -2
- package/dist/assets/{LandingPageProofDriven-CnevhTE8.js → LandingPageProofDriven-BxHkYRE7.js} +1 -1
- package/dist/assets/{LegalPage-BPTUmqeg.js → LegalPage-B-u6FrVv.js} +1 -1
- package/dist/assets/{PricingPage-B0D4goG_.js → PricingPage-CzpZ6-Ce.js} +1 -1
- package/dist/assets/{SettingsPage-CFF-UgjI.js → SettingsPage-CIZSSAd0.js} +1 -1
- package/dist/assets/{app-CE3sYcV7.css → app-CjsbDlb7.css} +143 -0
- package/dist/assets/{app-T0pDcSX4.js → app-DaTMg3nH.js} +1310 -290
- package/dist/assets/cli/{render-C5pcIISc.js → render-DPf4AYJK.js} +55 -60
- package/dist/assets/{constructionHistoryWorker-Ba2Hm58b.js → constructionHistoryWorker-AwMMWSxg.js} +1103 -349
- package/dist/assets/{evalWorker-vkx310U2.js → evalWorker-CjZZWRWW.js} +5209 -2643
- package/dist/assets/{inspectWorker-BuTJDVX6.js → inspectWorker-CZsCFtQT.js} +1163 -409
- package/dist/assets/{jointPose-B_Cgedn9.js → jointPose-DzQOViQH.js} +1 -1
- package/dist/assets/{manifold-BWgsjmAM.js → manifold-BYlzU521.js} +1 -1
- package/dist/assets/{manifold-D6IFSkhH.js → manifold-DgXo0T5P.js} +2 -2
- package/dist/assets/{manifold-rZexZI0G.js → manifold-K1SkarlQ.js} +1 -1
- package/dist/assets/{reportWorker-0AGij1Ru.js → reportWorker-B9nWwSrB.js} +8501 -3393
- package/dist/assets/{scalar-sampling-budget-J5cuzxT1.js → scalar-sampling-budget-prBw_s8t.js} +6067 -3479
- package/dist/assets/{scanProxyWorker-Vl4Wxa1y.js → scanProxyWorker-2GtDLk-R.js} +1 -1
- package/dist/assets/{javascript-1kQXfVaz.js → typescript-DBQ6RN5l.js} +874 -22
- package/dist/cli/render.html +1 -1
- package/dist/docs/index.html +3 -3
- package/dist/docs-raw/AI/usage.md +1 -1
- package/dist/docs-raw/CLI.md +77 -240
- package/dist/docs-raw/README.md +6 -0
- package/dist/docs-raw/component-model.md +17 -150
- package/dist/docs-raw/generated/assembly.md +188 -582
- package/dist/docs-raw/generated/concepts.md +259 -3501
- package/dist/docs-raw/generated/core.md +283 -1250
- package/dist/docs-raw/generated/curves.md +387 -1608
- package/dist/docs-raw/generated/legacy.md +162 -0
- package/dist/docs-raw/generated/lib.md +227 -85
- package/dist/docs-raw/generated/output.md +35 -99
- package/dist/docs-raw/generated/runtime-names.md +23 -23
- package/dist/docs-raw/generated/sdf.md +68 -284
- package/dist/docs-raw/generated/sheet-metal.md +68 -335
- package/dist/docs-raw/generated/sketch.md +240 -1161
- package/dist/docs-raw/generated/viewport.md +75 -316
- package/dist/docs-raw/generated/wood.md +21 -49
- package/dist/docs-raw/guides/coordinate-system.md +4 -42
- package/dist/docs-raw/guides/inspection-bundles.md +44 -442
- package/dist/docs-raw/guides/joint-design.md +18 -79
- package/dist/docs-raw/guides/positioning.md +21 -143
- package/dist/docs-raw/guides/scene-presentation.md +89 -0
- package/dist/docs-raw/guides/simready-quickstart.md +171 -0
- package/dist/docs-raw/simulation-workflow.md +273 -0
- package/dist/docs-raw/skills/forgecad-3d-reconstruction.md +25 -111
- package/dist/docs-raw/skills/forgecad-blockout-model.md +20 -117
- package/dist/docs-raw/skills/forgecad-component-model.md +23 -107
- package/dist/docs-raw/skills/forgecad-high-level-spec.md +47 -155
- package/dist/docs-raw/skills/forgecad-image-replicator.md +26 -143
- package/dist/docs-raw/skills/forgecad-lld.md +19 -113
- package/dist/docs-raw/skills/forgecad-make-a-model.md +112 -532
- package/dist/docs-raw/skills/forgecad-model-grader.md +38 -108
- package/dist/docs-raw/skills/forgecad-prepare-prompt.md +24 -211
- package/dist/docs-raw/skills/forgecad-project.md +13 -131
- package/dist/docs-raw/skills/forgecad-reconstruction-benchmark.md +42 -134
- package/dist/docs-raw/skills/forgecad-render-inspect.md +27 -174
- package/dist/docs-raw/skills/forgecad-visual-spec.md +32 -112
- package/dist/docs-raw/skills/forgecad.md +19 -18
- package/dist/docs-raw/skills/index.md +2 -0
- package/dist/docs-raw/welcome.md +2 -2
- package/dist/index.html +2 -2
- package/dist/llms.txt +1 -2
- package/dist/sitemap.xml +25 -13
- package/dist-cli/{check-compiler-SYQ2PWOB.js → check-compiler-II7NLPAB.js} +1 -1
- package/dist-cli/{check-query-propagation-HIAGV62W.js → check-query-propagation-7462TR3R.js} +1 -1
- package/dist-cli/{chunk-SPZE3DUY.js → chunk-UWTJCGXF.js} +5848 -2915
- package/dist-cli/forgecad.js +3496 -703
- package/dist-skill/CONTEXT.md +1797 -7963
- package/dist-skill/SKILL.md +15 -15
- package/dist-skill/docs/API/core/concepts.md +27 -157
- package/dist-skill/docs/CLI.md +77 -240
- package/dist-skill/docs/generated/assembly.md +182 -532
- package/dist-skill/docs/generated/core.md +283 -1250
- package/dist-skill/docs/generated/curves.md +387 -1609
- package/dist-skill/docs/generated/lib.md +227 -85
- package/dist-skill/docs/generated/output.md +35 -99
- package/dist-skill/docs/generated/runtime-names.md +16 -21
- package/dist-skill/docs/generated/sdf.md +68 -284
- package/dist-skill/docs/generated/sheet-metal.md +68 -335
- package/dist-skill/docs/generated/sketch.md +240 -1160
- package/dist-skill/docs/generated/viewport.md +75 -223
- package/dist-skill/docs/generated/wood.md +21 -49
- package/dist-skill/docs/guides/coordinate-system.md +4 -42
- package/dist-skill/docs/guides/inspection-bundles.md +44 -442
- package/dist-skill/docs/guides/joint-design.md +18 -79
- package/dist-skill/docs/guides/positioning.md +21 -143
- package/dist-skill/docs/guides/scene-presentation.md +89 -0
- package/dist-skill/docs/guides/surface-members.md +26 -0
- package/dist-skill/library/forgecad-3d-reconstruction/SKILL.md +23 -111
- package/dist-skill/library/forgecad-blockout-model/SKILL.md +18 -117
- package/dist-skill/library/forgecad-component-model/SKILL.md +21 -107
- package/dist-skill/library/forgecad-high-level-spec/SKILL.md +45 -155
- package/dist-skill/library/forgecad-image-replicator/SKILL.md +24 -143
- package/dist-skill/library/forgecad-lld/SKILL.md +17 -113
- package/dist-skill/library/forgecad-make-a-model/SKILL.md +110 -532
- package/dist-skill/library/forgecad-model-grader/SKILL.md +36 -108
- package/dist-skill/library/forgecad-prepare-prompt/SKILL.md +35 -224
- package/dist-skill/library/forgecad-prepare-prompt/references/default-profiles.md +43 -271
- package/dist-skill/library/forgecad-prepare-prompt/references/master-prompt.md +30 -99
- package/dist-skill/library/forgecad-project/SKILL.md +13 -133
- package/dist-skill/library/forgecad-reconstruction-benchmark/SKILL.md +29 -123
- package/dist-skill/library/forgecad-render-inspect/SKILL.md +25 -174
- package/dist-skill/library/forgecad-visual-spec/SKILL.md +30 -111
- package/dist-skill/website/skills/forgecad-3d-reconstruction.md +58 -0
- package/dist-skill/website/skills/forgecad-blockout-model.md +49 -0
- package/dist-skill/website/skills/forgecad-component-model.md +53 -0
- package/dist-skill/website/skills/forgecad-high-level-spec.md +101 -0
- package/dist-skill/website/skills/forgecad-image-replicator.md +63 -0
- package/dist-skill/website/skills/forgecad-lld.md +41 -0
- package/dist-skill/website/skills/forgecad-make-a-model.md +186 -0
- package/dist-skill/website/skills/forgecad-model-grader.md +82 -0
- package/dist-skill/website/skills/forgecad-prepare-prompt.md +63 -0
- package/dist-skill/website/skills/forgecad-project.md +26 -0
- package/dist-skill/website/skills/forgecad-reconstruction-benchmark.md +60 -0
- package/dist-skill/website/skills/forgecad-render-inspect.md +80 -0
- package/dist-skill/website/skills/forgecad-visual-spec.md +71 -0
- package/dist-skill/website/skills/forgecad.md +122 -0
- package/dist-skill/website/skills/index.md +26 -0
- package/examples/api/comparison-imported-sphere-candidate.forge.js +1 -1
- package/examples/api/conformal-product-ribbon.forge.js +1 -1
- package/examples/api/exact-sheet-shell-assembly.forge.js +1 -1
- package/examples/api/extrude-options.forge.js +4 -2
- package/examples/api/field-loft-drive-tip.forge.js +40 -0
- package/examples/api/guided-loft-olive-oil-bottle.forge.js +1 -1
- package/examples/api/highlight-debug.forge.js +10 -10
- package/examples/api/mesh-import-slats.forge.js +1 -1
- package/examples/api/real-product-curves.forge.js +1 -1
- package/examples/api/sculpt-box-circle-booleans.forge.js +1 -1
- package/examples/api/sdf-shapes.forge.js +2 -5
- package/examples/api/sketch-rounding-strategies.forge.js +6 -6
- package/examples/api/surface-member-bottle-cage.forge.js +3 -3
- package/examples/api/surface-member-conformal-product-ribbon.forge.js +3 -3
- package/examples/api/surface-member-razor-inlay.forge.js +1 -1
- package/examples/api/variable-sweep-test.forge.js +3 -3
- package/examples/mechanical/airplane-propeller.forge.js +74 -39
- package/examples/nurbs-surface.forge.js +1 -1
- package/examples/products/iphone.forge.js +1 -1
- package/examples/robotics/README.md +46 -0
- package/examples/robotics/scout-cam-rover-simready/README.md +119 -0
- package/examples/robotics/scout-cam-rover-simready/lib/dims.js +140 -0
- package/examples/robotics/scout-cam-rover-simready/main.forge.js +343 -0
- package/examples/robotics/scout-cam-rover-simready/parts/body.forge.js +304 -0
- package/examples/robotics/scout-cam-rover-simready/parts/chassis.forge.js +320 -0
- package/examples/robotics/scout-cam-rover-simready/parts/hardware.forge.js +21 -0
- package/examples/robotics/scout-cam-rover-simready/parts/turret.forge.js +70 -0
- package/examples/robotics/scout-cam-rover-simready/parts/wheel.forge.js +116 -0
- package/examples/robotics/simready-asset-crate.forge.js +79 -0
- package/examples/robotics/simready-diff-drive-rover.forge.js +141 -0
- package/examples/robotics/simready-parallel-gripper.forge.js +102 -0
- package/package.json +1 -1
- package/dist/assets/EditorApp-BHMQlJ-D.js +0 -14686
- package/dist/docs-raw/guides/geometry-conventions.md +0 -52
- package/dist/docs-raw/guides/modeling-recipes.md +0 -78
- package/dist-skill/docs/guides/geometry-conventions.md +0 -52
- package/dist-skill/docs/guides/modeling-recipes.md +0 -78
- package/dist-skill/library/forgecad-visual-spec/references/prompt-template.md +0 -79
|
@@ -3,48 +3,10 @@ skill-group: geometry
|
|
|
3
3
|
skill-order: 1
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Coordinate System
|
|
6
|
+
# Coordinate System
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Z-up right-handed: +X right, +Y back, +Z up. Ground plane is XY at Z = 0; extrusion goes along +Z. Units are millimeters; angles are degrees.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Model fronts (face/nose/camera side) point toward **-Y**; rear is +Y; the forward vector is `[0, -1, 0]`. Anchors follow: `front` resolves to the minimum-Y side, `back` to the maximum-Y side.
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
| Axis | Direction | Positive |
|
|
15
|
-
|------|-----------------|----------|
|
|
16
|
-
| X | Left / Right | Right |
|
|
17
|
-
| Y | Front / Back | Back |
|
|
18
|
-
| Z | Up / Down | Up |
|
|
19
|
-
|
|
20
|
-
## Standard Views
|
|
21
|
-
|
|
22
|
-
The camera position direction says where the camera sits relative to the model. A front view camera sits at `-Y` and looks toward `+Y`, so it sees the model's `-Y` front face.
|
|
23
|
-
|
|
24
|
-
| View | Camera position direction | Sees plane |
|
|
25
|
-
|--------|---------------------------|------------|
|
|
26
|
-
| Front | -Y | XZ |
|
|
27
|
-
| Back | +Y | XZ |
|
|
28
|
-
| Right | +X | YZ |
|
|
29
|
-
| Left | -X | YZ |
|
|
30
|
-
| Top | +Z | XY |
|
|
31
|
-
| Bottom | -Z | XY |
|
|
32
|
-
|
|
33
|
-
## GizmoViewcube Face Mapping
|
|
34
|
-
|
|
35
|
-
Renderer/view-cube internals may have their own material ordering. Map any view-cube labels to the ForgeCAD directions below:
|
|
36
|
-
|
|
37
|
-
| Direction | ForgeCAD label |
|
|
38
|
-
|-----------|----------------|
|
|
39
|
-
| +X | Right |
|
|
40
|
-
| -X | Left |
|
|
41
|
-
| +Y | Back |
|
|
42
|
-
| -Y | Front |
|
|
43
|
-
| +Z | Top |
|
|
44
|
-
| -Z | Bottom |
|
|
45
|
-
|
|
46
|
-
The face/anchor API is the source of truth: `front` resolves to the minimum-Y side and `back` resolves to the maximum-Y side.
|
|
47
|
-
|
|
48
|
-
## Grid
|
|
49
|
-
|
|
50
|
-
The ground plane is XY (Z = 0). Extrusion goes along +Z. Manifold is Y-up internally — if a kernel-facing operation behaves as if axes are swapped, check for Manifold Y-up semantics leaking through.
|
|
12
|
+
A `front` view camera sits on the -Y side looking toward +Y, so it sees the model's front face. The other views follow: back +Y, right +X, left -X, top +Z, bottom -Z.
|
|
@@ -3,484 +3,86 @@ skill-group: cli
|
|
|
3
3
|
skill-order: 2
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Inspection Bundles
|
|
7
|
-
|
|
8
|
-
`forgecad inspect <family> <mode>` writes a deterministic directory bundle for
|
|
9
|
-
agents, tests, and automation. Use it when a single shaded PNG is too ambiguous
|
|
10
|
-
and the consumer needs geometry-aware evidence such as depth, normals, Zebra
|
|
11
|
-
stripes, surface roughness, part identity, physical connected components,
|
|
12
|
-
interference, local thickness, or cross-sections.
|
|
13
|
-
|
|
14
|
-
## When To Use It
|
|
15
|
-
|
|
16
|
-
- Use `forgecad inspect <family> <mode>` for local agent repair loops, model
|
|
17
|
-
debugging, and targeted visual evidence.
|
|
18
|
-
- Use `forgecad render 3d` for a quick human viewport PNG.
|
|
19
|
-
- Use `forgecad render section` when you only need one specific cut plane.
|
|
20
|
-
- Use `forgecad render hq` for presentation-quality output, docs, and marketing
|
|
21
|
-
renders.
|
|
22
|
-
|
|
23
|
-
## Command
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
forgecad inspect fit interference model.forge.js --camera iso
|
|
27
|
-
forgecad inspect visual cutaway model.forge.js --plane yz
|
|
28
|
-
forgecad inspect visual objects model.forge.js --camera front --camera right
|
|
29
|
-
forgecad inspect manufacture thickness model.forge.js --min 1.2 --warn 2.0
|
|
30
|
-
forgecad inspect sections at model.forge.js --plane yz --offset 12.5
|
|
31
|
-
forgecad inspect sections stack model.forge.js --plane yz --every 1
|
|
32
|
-
forgecad inspect sections sample model.forge.js --count 5
|
|
33
|
-
forgecad inspect compare overlay model.forge.js --with reference.3mf
|
|
34
|
-
forgecad inspect evidence
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
The default output directory is a unique, non-colliding run directory under
|
|
38
|
-
`outputs/inspect`, relative to the current working directory:
|
|
39
|
-
|
|
40
|
-
```text
|
|
41
|
-
outputs/inspect/2026-05-28T23-19-14.412Z__visual-objects__ball-bearing__43d0ee/
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
Pass a positional `output-dir` or `--output`/`--out` for a preferred directory.
|
|
45
|
-
If that directory already exists, ForgeCAD writes to a numbered sibling unless
|
|
46
|
-
`--force` is passed. `--force` is the explicit replace path.
|
|
47
|
-
|
|
48
|
-
Non-section inspection commands emit one `iso` view by default, except
|
|
49
|
-
`inspect visual cutaway`, which emits one automatic orthographic cut-side view.
|
|
50
|
-
Pass `--camera` repeatedly, `--view`, `--camera-json`, or `--scene` to use the
|
|
51
|
-
same view strategy as `render 3d`.
|
|
52
|
-
|
|
53
|
-
Inspection visual evidence defaults to the `inspection` render style: a light
|
|
54
|
-
technical background, matte neutral lighting, and thin dark edges for shaded
|
|
55
|
-
image/cutaway evidence. Pass `--background`, `--render-style`, or `--edges` when
|
|
56
|
-
you need a different presentation. Model-authored `scene()` background, lights,
|
|
57
|
-
fog, and exposure are ignored for inspection bundle captures so evidence remains
|
|
58
|
-
stable; named scene views are still available through `--view`.
|
|
59
|
-
|
|
60
|
-
The command tree is intentionally job-shaped:
|
|
61
|
-
|
|
62
|
-
```text
|
|
63
|
-
inspect visual image|cutaway|depth|normals|rig|objects
|
|
64
|
-
inspect surface zebra|roughness
|
|
65
|
-
inspect physical components|floating|gaps
|
|
66
|
-
inspect fit interference
|
|
67
|
-
inspect manufacture thickness
|
|
68
|
-
inspect compare overlay
|
|
69
|
-
inspect sections at|stack|sample
|
|
70
|
-
```
|
|
6
|
+
# Inspection Bundles — Evidence Contract
|
|
71
7
|
|
|
72
|
-
|
|
73
|
-
`forgecad inspect fit interference` writes `manifest.evidence.collisions`, and
|
|
74
|
-
`forgecad inspect physical components` writes `manifest.evidence.connectivity`.
|
|
8
|
+
`forgecad inspect <family> <mode>` writes a deterministic bundle: evidence PNGs under `evidence/<type>/` plus a root `manifest.json`. **The manifest is the authoritative contract** — take file paths, encodings, per-view ranges, thresholds, tolerances, and identity maps from it; never hard-code bundle layout or infer object identity from object order. The PNGs are a visual index for locating findings, not standalone artifacts. Command tree, flags, and `--focus`/`--hide` filtering live in `docs/permanent/CLI.md` and `forgecad inspect evidence`; the inspection workflow lives in the `forgecad-render-inspect` skill. Model-authored `scene()` background, lights, fog, and exposure are ignored for inspection captures so evidence stays stable; named scene views remain available via `--view`.
|
|
75
9
|
|
|
76
|
-
|
|
77
|
-
`forgecad run` and `forgecad render 3d`. A bare `--focus` hides mock objects;
|
|
78
|
-
`--focus name1,name2` emits only matching objects; `--hide name1,name2` removes
|
|
79
|
-
matching objects from an otherwise visible scene. Matching is case-insensitive
|
|
80
|
-
and supports `*` / `?` globs, so grouped child objects are usually best matched
|
|
81
|
-
with patterns such as `Bench.*`.
|
|
10
|
+
Manifest evidence keys are evidence-oriented and stable for bundle readers: e.g. `fit interference` writes `manifest.evidence.collisions`, `physical components` writes `manifest.evidence.connectivity`.
|
|
82
11
|
|
|
83
|
-
##
|
|
12
|
+
## Reading Rules
|
|
84
13
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
14
|
+
- **Identity evidence** (`objects`, `connectivity`, `distance`, `collisions`): colors are bundle-local labels. Resolve every color through the manifest; the same color never carries universal meaning across bundles. Edge pixels may be antialiased blends — match solid interior colors.
|
|
15
|
+
- **Metric evidence** (`depth`, `thickness`, `roughness`, `distance`, `comparison`): read manifest thresholds, ranges, object summaries, and warnings before judging a PNG by eye.
|
|
16
|
+
- Black pixels are background = `null` (in `floating`, black also means ground-reachable geometry).
|
|
17
|
+
- Treat unexpected collisions, critical thin regions, high unresolved thickness, wrong component counts, floating bodies, or surprising gaps as **model bugs to fix and reinspect** — not rendering noise.
|
|
18
|
+
- Use section evidence to inspect hidden internals; never turn the production model into a permanent cutaway.
|
|
88
19
|
|
|
89
|
-
|
|
90
|
-
outputs/inspect/2026-05-28T23-19-14.412Z__visual-objects__model__43d0ee/
|
|
91
|
-
manifest.json
|
|
92
|
-
evidence/
|
|
93
|
-
objects/
|
|
94
|
-
front.png
|
|
95
|
-
right.png
|
|
96
|
-
iso.png
|
|
97
|
-
```
|
|
20
|
+
## The Physical-Contact Model
|
|
98
21
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
```bash
|
|
102
|
-
forgecad inspect visual depth model.forge.js --camera iso
|
|
103
|
-
forgecad inspect visual normals model.forge.js --camera iso
|
|
104
|
-
forgecad inspect visual rig model.forge.js --camera iso
|
|
105
|
-
forgecad inspect surface zebra model.forge.js --camera iso
|
|
106
|
-
forgecad inspect surface roughness model.forge.js --camera iso
|
|
107
|
-
forgecad inspect visual objects model.forge.js --camera iso
|
|
108
|
-
forgecad inspect fit interference model.forge.js --camera iso
|
|
109
|
-
forgecad inspect sections at model.forge.js --plane yz --offset 12.5
|
|
110
|
-
forgecad inspect sections stack model.forge.js --plane yz --every 1
|
|
111
|
-
forgecad inspect sections sample model.forge.js --count 5
|
|
112
|
-
forgecad inspect manufacture thickness model.forge.js --min 1.2 --warn 2.0 --camera iso
|
|
113
|
-
forgecad inspect compare overlay model.forge.js --with reference.3mf
|
|
114
|
-
```
|
|
22
|
+
Connectivity, floating, distance, and thickness all share one contact model:
|
|
115
23
|
|
|
116
|
-
|
|
117
|
-
manifest
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
Read inspection bundles as feedback about the model, not as standalone images.
|
|
122
|
-
Start with `manifest.json`, then use the evidence PNGs to locate and understand
|
|
123
|
-
the finding in the rendered geometry.
|
|
124
|
-
|
|
125
|
-
1. Confirm `bundle.evidenceRequested`, `bundle.evidenceEmitted`, and
|
|
126
|
-
`bundle.filters` so you know what was inspected and what was hidden.
|
|
127
|
-
2. Check `scene.bbox`, `scene.volume`, and `scene.objects` for missing geometry,
|
|
128
|
-
absurd scale, unexpected mocks, or wrong object names.
|
|
129
|
-
3. For identity evidence such as `objects`, `connectivity`, `distance`, and
|
|
130
|
-
`collisions`, resolve colors through the evidence manifest. The same visual
|
|
131
|
-
color does not carry a universal meaning across bundles.
|
|
132
|
-
4. For metric evidence such as `depth`, `roughness`, `thickness`, `distance`, and `comparison`,
|
|
133
|
-
read the thresholds, ranges, object summaries, and warnings before judging a
|
|
134
|
-
PNG by eye.
|
|
135
|
-
5. Inspect image and object evidence first when you need visual context, then
|
|
136
|
-
the risk evidence and any orthographic view that exposes the issue. Use
|
|
137
|
-
section slices only to inspect hidden internals; do not turn the production
|
|
138
|
-
model into a permanent cutaway.
|
|
139
|
-
6. Treat unexpected collisions, critical thin regions, unresolved thickness,
|
|
140
|
-
missing section detail, wrong component counts, floating bodies, or surprising
|
|
141
|
-
distance gaps as model bugs to fix and reinspect.
|
|
142
|
-
|
|
143
|
-
Common color reading rules:
|
|
144
|
-
|
|
145
|
-
- Black is usually background; in `floating`, black also means ground-reachable
|
|
146
|
-
geometry.
|
|
147
|
-
- `objects` and `connectivity` colors are labels. Use the manifest to map colors to
|
|
148
|
-
objects, groups, components, or body entries.
|
|
149
|
-
- `collisions` colors mark solid overlap findings; match them to
|
|
150
|
-
`manifest.evidence.collisions.collisions[].color`.
|
|
151
|
-
- `thickness` uses red/orange for critical or warning-thin regions, green/blue
|
|
152
|
-
for acceptable or thick regions, and gray for unresolved samples.
|
|
153
|
-
- `distance` grades rooted component gaps from green near the root through
|
|
154
|
-
yellow to red farther away.
|
|
155
|
-
- `comparison` uses the same Difference Only overlay as the viewport: faint
|
|
156
|
-
model context, amber candidate mismatch evidence, and cyan reference mismatch
|
|
157
|
-
evidence.
|
|
158
|
-
- `depth` grades visible camera distance from blue near the camera through green
|
|
159
|
-
to red farther away.
|
|
160
|
-
- `roughness` uses orange and magenta for sharp, harsh, boundary, or
|
|
161
|
-
non-manifold edge neighborhoods.
|
|
162
|
-
- `zebra` is read by stripe continuity: smooth flowing bands are healthy, while
|
|
163
|
-
kinks, breaks, and faceting deserve investigation.
|
|
164
|
-
- `normals` is an encoded camera-view normal map. Use it with `image` and `zebra`
|
|
165
|
-
to debug orientation and faceting rather than as a fixed semantic palette.
|
|
24
|
+
- **Bbox is broadphase only.** Bbox overlap or bbox face contact never merges separate scene objects and is never support evidence.
|
|
25
|
+
- Mesh surfaces within the contact tolerance (see manifest) count as **physically connected**.
|
|
26
|
+
- **Positive-volume boolean overlap** above the overlap threshold is a *collision defect* (`collisions` evidence), distinct from connectivity grouping. Face-touching parts are not collisions.
|
|
27
|
+
- A `union()` result with disconnected mesh islands is inspected as **separate bodies** (`Part body 1`, `Part body 2`, …).
|
|
28
|
+
- **Grounded** = a connected component reaches the ground plane (visible model minZ, or lowered by `scene({ ground: { offset } })`) within bed tolerance. Everything else is floating.
|
|
166
29
|
|
|
167
30
|
## Evidence Semantics
|
|
168
31
|
|
|
169
|
-
|
|
170
|
-
are canonical `front`, `right`, `top`, and `iso`.
|
|
32
|
+
**image** — standard solid render with thin edge overlay, `inspection` render style.
|
|
171
33
|
|
|
172
|
-
|
|
173
|
-
distance from the camera position to the visible surface point, normalized per
|
|
174
|
-
view between `minDistance` and `maxDistance` from the manifest:
|
|
34
|
+
**depth** — visible ray-distance heatmap, normalized per view between manifest `minDistance`/`maxDistance`; blue near → green → red far. A visual heatmap, not raw float depth.
|
|
175
35
|
|
|
176
36
|
```text
|
|
177
37
|
rayDistance = distance(cameraPosition, surfacePoint)
|
|
178
38
|
normalized = (rayDistance - minDistance) / (maxDistance - minDistance)
|
|
179
39
|
```
|
|
180
40
|
|
|
181
|
-
|
|
182
|
-
camera. Background pixels are black and should be treated as `null`.
|
|
183
|
-
|
|
184
|
-
`normals` emits camera-view normals packed into RGB:
|
|
41
|
+
**normals** — camera-view normals (not world-space) packed into RGB:
|
|
185
42
|
|
|
186
43
|
```text
|
|
187
44
|
normal = normalize((rgb / 255) * 2 - 1)
|
|
188
45
|
```
|
|
189
46
|
|
|
190
|
-
|
|
47
|
+
**zebra** — reflective stripe render read by **stripe continuity**: smooth flowing bands are healthy; kinks, breaks, and faceting deserve investigation. A shader diagnostic, not a curvature-continuity proof — tessellation quality and available smooth normals limit its fidelity.
|
|
191
48
|
|
|
192
|
-
|
|
193
|
-
surface-continuity inspection. Stripes are generated from the visible
|
|
194
|
-
camera-view normal and simulated reflection direction, so smooth surfaces show
|
|
195
|
-
smooth flowing bands while normal discontinuities, faceting, and unexpected
|
|
196
|
-
creases kink or break the bands.
|
|
49
|
+
**roughness** — mesh-dihedral heatmap: smooth/moderate triangles render as a faint shadow; triangles adjacent to sharp edges render orange; harsh, boundary, or non-manifold edges render magenta (angle thresholds in the manifest). Point colors are local to physical feature edges — smooth tessellation diagonals do not light up, and moderate angles stay in the shadow layer so intentionally curved surfaces don't read as defects. Also writes `evidence/roughness/point-cloud.json` with per-sample object identity, local position, normal, angle, class, color, and represented area.
|
|
197
50
|
|
|
198
|
-
|
|
199
|
-
and skin-like forms. It is a human-readable shader diagnostic, not an exact
|
|
200
|
-
curvature-continuity proof; mesh tessellation quality and available smooth
|
|
201
|
-
normals determine how faithfully it represents the underlying surface.
|
|
51
|
+
**objects** — one object-color image per view; resolve non-black pixels through `manifest.evidence.objects.objects` (index, color, id, name, group, tree path, mock flag).
|
|
202
52
|
|
|
203
|
-
`
|
|
204
|
-
curved triangles render as a faint translucent shadow over black, while
|
|
205
|
-
triangles adjacent to sharp, harsh, boundary, or non-manifold mesh edges render
|
|
206
|
-
in orange or magenta:
|
|
53
|
+
**connectivity** — one physical-component-color image per view; resolve through `manifest.evidence.connectivity.components`; every visible object has a `componentIndex`. Components are the transitive closure over mesh-contact and exact-overlap edges (see contact model). Object-level in the PNG: disconnected kernel bodies are reported in the manifest but not split into per-body colors.
|
|
207
54
|
|
|
208
|
-
|
|
209
|
-
shadow = max adjacent angle < sharpAngleDeg
|
|
210
|
-
orange = sharpAngleDeg <= angle < harshAngleDeg
|
|
211
|
-
magenta = angle >= harshAngleDeg, boundary, or non-manifold
|
|
212
|
-
```
|
|
55
|
+
**floating** — highlights components with no contact path to the ground plane (see contact model for grounding). Use `connectivity`/`distance`/`collisions` for the full graph, rooted gaps, or overlap defects.
|
|
213
56
|
|
|
214
|
-
|
|
215
|
-
`harshAngleDeg=90`. The manifest stores the method, thresholds, palette, object
|
|
216
|
-
list, per-object triangle and edge counts, area percentages by smooth,
|
|
217
|
-
moderate, sharp, and harsh classes, angle percentiles, maximum angle, quality
|
|
218
|
-
score, and warnings. Moderate angles are reported in the manifest but stay in
|
|
219
|
-
the shadow layer by default so intentionally curved surfaces do not light up as
|
|
220
|
-
defects. Use this evidence to spot spiky tessellation, accidental faceting,
|
|
221
|
-
jagged boolean residue, and dense sharp-corner regions without losing the
|
|
222
|
-
silhouette of otherwise smooth surfaces.
|
|
223
|
-
|
|
224
|
-
The evidence also writes `evidence/roughness/point-cloud.json`. Each point sample
|
|
225
|
-
stores object identity, object-local position, normal, dihedral angle, class,
|
|
226
|
-
RGB color, and represented surface area. The PNG renders those samples over
|
|
227
|
-
muted source geometry so the visual evidence stays point-level instead of
|
|
228
|
-
painting a whole object.
|
|
229
|
-
|
|
230
|
-
`objects` emits one object-color image per view. Black is background. Non-black
|
|
231
|
-
pixels resolve through `manifest.evidence.objects.objects`, which includes object
|
|
232
|
-
index, RGB color, object id, name, group, tree path, and mock flag. Edge pixels
|
|
233
|
-
may be antialiased blends; use solid interior colors for exact object lookup.
|
|
234
|
-
|
|
235
|
-
`connectivity` emits one physical-component-color image per view. Black is
|
|
236
|
-
background. Non-black pixels resolve through
|
|
237
|
-
`manifest.evidence.connectivity.components`, and every visible object also has a
|
|
238
|
-
`componentIndex` in `manifest.evidence.connectivity.objects`.
|
|
239
|
-
|
|
240
|
-
Connectivity is computed from visible scene objects:
|
|
57
|
+
**distance** — rooted component-distance heatmap, green at the root through yellow to red. Root = largest component; `rootDistance` = shortest accumulated gap from root. **v1 metric is bbox-gap**, not closest mesh-surface distance — concave components can make reported gaps smaller than reality. The complete gap graph is quadratic, so the manifest stores a compact nearest-gap / root-parent edge subset (`gapEdges`); `gapEdgeCount` reports the logical complete-graph count.
|
|
241
58
|
|
|
242
|
-
|
|
243
|
-
bbox candidate = bbox interiors overlap or bbox contact gap <= 0.05 model units
|
|
244
|
-
mesh contact edge = minimum mesh-surface distance <= contactTolerance
|
|
245
|
-
overlap edge = exact boolean intersection volume > 0.1 model units^3 for positive-volume overlap
|
|
246
|
-
component = transitive closure over mesh contact and exact overlap edges
|
|
247
|
-
```
|
|
59
|
+
**comparison** — reference-vs-candidate overlay (`--compare-with <ref>` or `compareWith('./reference.3mf')` in model code). **Amber = extra candidate surface; cyan = reference surface missing from the candidate.** PNG coverage is screen-space only — hidden/internal mismatches require `evidence/comparison/mismatch-points.json` and the geometric `compare 3d` score in the manifest, which are the source of truth; the PNG is the visual index.
|
|
248
60
|
|
|
249
|
-
|
|
250
|
-
warnings. Component colors group scene objects and mesh body entries. If one
|
|
251
|
-
scene object contains multiple disconnected mesh islands, those islands are
|
|
252
|
-
reported and colored separately as entries such as `Part body 1` and
|
|
253
|
-
`Part body 2`.
|
|
254
|
-
|
|
255
|
-
Connectivity uses bbox only as a broadphase. Bbox contact alone is not enough to
|
|
256
|
-
merge separate scene objects by default, but mesh surfaces within contact
|
|
257
|
-
tolerance count as physically connected. This keeps concave assemblies such as
|
|
258
|
-
cages and captive balls from being falsely colored as one component while still
|
|
259
|
-
allowing stacked or nearly touching parts to share a component. Use the
|
|
260
|
-
`collisions` evidence when you need positive-volume overlap evidence as a defect
|
|
261
|
-
report rather than a component grouping.
|
|
262
|
-
|
|
263
|
-
`floating` emits one disconnected-body highlight image per view. Black is
|
|
264
|
-
background or ground-reachable geometry. The highlight color marks physical
|
|
265
|
-
components that have no contact path to the ground plane.
|
|
266
|
-
|
|
267
|
-
Floating body detection splits visible meshes into disconnected body islands,
|
|
268
|
-
links bodies only when their minimum mesh-surface distance is within contact
|
|
269
|
-
tolerance (or exact positive-volume overlap when only shape evidence is
|
|
270
|
-
available), treats any connected component whose lower Z reaches the viewport
|
|
271
|
-
ground plane plus bed tolerance as grounded, then highlights every ungrounded
|
|
272
|
-
component. The default ground plane is the visible model's minimum Z;
|
|
273
|
-
`scene({ ground: { offset } })` moves it below that by the configured offset.
|
|
61
|
+
**collisions** — ghosted source objects with solid per-finding palette colors on actual boolean intersection volumes; match interiors against `manifest.evidence.collisions.collisions[].color`. Broadphase pruning never changes findings (real intersection volume cannot exceed bbox intersection volume). Respects the same `--focus`/`--hide` visibility set as all evidence.
|
|
274
62
|
|
|
275
|
-
|
|
276
|
-
grounded = component bbox minZ <= groundZ + bedTolerance
|
|
277
|
-
floating body = !grounded
|
|
278
|
-
```
|
|
63
|
+
**thickness** — area-weighted surface point samples cast through the object along their normals; red = below min, orange = below warn, green = acceptable, blue = above max (thresholds in manifest; override via CLI flags). Contact-seam rule: rays crossing into a direct physical-contact neighbor skip hits within contact tolerance and continue to the next surface, so a modeled micro-gap between touching parts doesn't read as a paper-thin wall. **Gray/unresolved area means the heatmap is incomplete, NOT that the model is safe** — open meshes, concave geometry, coarse tessellation, or low sample counts leave unresolved regions. A mesh/raycast approximation, not FEA. Also writes `evidence/thickness/point-cloud.json` with per-sample object identity, local position, normal, thickness, class, color, and represented area.
|
|
279
64
|
|
|
280
|
-
|
|
281
|
-
two separate bodies instead of being treated as one safe object. Bbox overlap or
|
|
282
|
-
bbox face contact alone is not support evidence. Use `connectivity`, `distance`,
|
|
283
|
-
or `collisions` when you need the full physical graph, rooted gap distances, or
|
|
284
|
-
collision defects.
|
|
65
|
+
**sections** — exact 2D contour slices, three explicit modes:
|
|
285
66
|
|
|
286
|
-
`
|
|
287
|
-
|
|
288
|
-
`
|
|
289
|
-
`componentIndex`, `rootDistance`, `nearestGap`, and parent-tree metadata in
|
|
290
|
-
`manifest.evidence.distance.objects`.
|
|
67
|
+
- `sections at` — one exact cut through a localized feature (`--plane yz --offset 12.5`).
|
|
68
|
+
- `sections stack` — periodic physical slices for reconstruction scans (`--every <spacing>`, plus a final max-bound slice when the span isn't an exact multiple).
|
|
69
|
+
- `sections sample` — sparse representative slices (`--count N`; defaults to the principal `xy`/`xz`/`yz` families when no plane is given).
|
|
291
70
|
|
|
292
|
-
|
|
71
|
+
`--angle` rotates a vertical plane family around Z without manual normal math: `0` ≈ YZ, `90` ≈ XZ. The renderer refuses bundles above `--max-slices`. Per-slice and per-family metadata (offsets, areas, ranges, spacing) comes from the manifest.
|
|
293
72
|
|
|
294
|
-
|
|
295
|
-
component = physical connectivity component
|
|
296
|
-
gap edge = Euclidean distance between component bounding boxes
|
|
297
|
-
root = largest component by body count, object count, then bbox volume
|
|
298
|
-
rootDistance = shortest accumulated gap distance from root component
|
|
299
|
-
```
|
|
300
|
-
|
|
301
|
-
For large scenes the manifest does not materialize the complete component gap
|
|
302
|
-
graph, because that graph is quadratic in the number of components. The
|
|
303
|
-
`gapEdgeCount` field reports the logical complete-graph edge count used by the
|
|
304
|
-
analysis. `gapEdges` stores a compact evidence subset containing nearest-gap
|
|
305
|
-
and root-parent edges.
|
|
306
|
-
|
|
307
|
-
The PNG colors components from green at the root/near distances through yellow to
|
|
308
|
-
red at the farthest rooted component. The manifest stores the root component,
|
|
309
|
-
maximum rooted distance, compact gap edge evidence, nearest-gap data, and
|
|
310
|
-
shortest-path parent fields. The current v1 metric is bbox-based: it measures air
|
|
311
|
-
gaps between component bounding boxes, not exact closest mesh-surface distance.
|
|
312
|
-
|
|
313
|
-
`comparison` emits one reference-vs-candidate overlay per view. Pass
|
|
314
|
-
`--compare-with <reference>` or declare the target in model code with
|
|
315
|
-
`compareWith('./reference.3mf')`. The PNG uses the same Difference Only
|
|
316
|
-
comparison overlay as the viewport. Amber marks candidate mismatch evidence,
|
|
317
|
-
cyan marks reference mismatch evidence, and faint candidate/reference context
|
|
318
|
-
keeps the overlay readable while rotating or comparing against the standard RGB
|
|
319
|
-
render.
|
|
320
|
-
|
|
321
|
-
Colored mismatch evidence comes from sampled nearest-surface distances: cyan
|
|
322
|
-
means reference surface missing from the candidate, and amber means extra
|
|
323
|
-
candidate surface. Run `forgecad inspect sections at`, `stack`, or `sample` when
|
|
324
|
-
you also want exact cross-section evidence next to the comparison context views.
|
|
325
|
-
|
|
326
|
-
The manifest stores visual screen-space mismatch counts, the geometric
|
|
327
|
-
`compare 3d` score when the CLI can resolve both inputs, and a
|
|
328
|
-
`evidence/comparison/mismatch-points.json` point cloud with world-space sample
|
|
329
|
-
positions. Use the geometric score and point-cloud summary as the source of
|
|
330
|
-
truth; the PNG is the fast visual index for where to look.
|
|
331
|
-
|
|
332
|
-
`collisions` emits one ghosted-overlap image per view. It uses the same
|
|
333
|
-
`--focus` / `--hide` visibility set as every other inspect evidence: focused
|
|
334
|
-
objects are the only inspected objects. Source objects render as translucent
|
|
335
|
-
ghosts, while actual boolean intersection volumes render as solid per-finding
|
|
336
|
-
palette colors.
|
|
337
|
-
|
|
338
|
-
Collision findings are computed from visible scene objects:
|
|
339
|
-
|
|
340
|
-
```text
|
|
341
|
-
collision = boolean intersection volume > 0.1mm^3
|
|
342
|
-
```
|
|
73
|
+
## `inspect section` Probe Contract
|
|
343
74
|
|
|
344
|
-
|
|
345
|
-
volume, broadphase counters, warnings, render style, and each collision finding's
|
|
346
|
-
`groupIndex`, `color`, and `hex`. Exact interior pixels can be matched against
|
|
347
|
-
`manifest.evidence.collisions.collisions[].color`; antialiased edges may blend
|
|
348
|
-
with the ghosted source geometry. If `--focus PartA,PartB` is used, everything
|
|
349
|
-
except those objects is hidden, `PartA` and `PartB` are ghosted, and their
|
|
350
|
-
overlap volume is highlighted if present.
|
|
75
|
+
`inspect section` writes a one-off probe directory — `result.json`, `section.svg`, `section.png` — instead of a bundle. `result.json` fields:
|
|
351
76
|
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
77
|
+
- `section.frame` — `u`/`v` define the section-local coordinate system for rulers.
|
|
78
|
+
- `section.objects` — per-object areas, bounds, and loop counts; `section.svg` holds the actual outlines.
|
|
79
|
+
- `rulers[].insideSegments` — exact intervals where the ray is inside any sectioned object.
|
|
80
|
+
- `rulers[].gaps` — exact intervals between solid spans along the ray, including end gaps.
|
|
81
|
+
- `replaySpec` — the recipe to rerun the probe against a candidate via `inspect replay`.
|
|
82
|
+
- `comparison.rulers` — replay deltas against the original probe (present in replay results).
|
|
355
83
|
|
|
356
|
-
`
|
|
357
|
-
deterministic area-weighted point samples across visible mesh surfaces, casts
|
|
358
|
-
through the object along each sample normal, and colors each point by the first
|
|
359
|
-
opposite-surface distance:
|
|
360
|
-
|
|
361
|
-
```text
|
|
362
|
-
red = thickness <= minThickness
|
|
363
|
-
orange = thickness <= warnThickness
|
|
364
|
-
green = acceptable thickness
|
|
365
|
-
blue = thickness >= maxThickness
|
|
366
|
-
gray = unresolved sample
|
|
367
|
-
```
|
|
368
|
-
|
|
369
|
-
Thickness uses the same physical-contact edges as `connectivity` and `floating`.
|
|
370
|
-
When a ray crosses from one object to a direct physical-contact neighbor, hits
|
|
371
|
-
within `contactTolerance` are treated as contact seams and the ray continues to
|
|
372
|
-
the next surface. This prevents a tiny modeled gap between touching parts from
|
|
373
|
-
being reported as a paper-thin wall.
|
|
374
|
-
|
|
375
|
-
The default thresholds are `minThickness=1.2`, `warnThickness=2.0`, and
|
|
376
|
-
`maxThickness=6.0` model units. Override them with `--min-thickness`,
|
|
377
|
-
`--warn-thickness`, and `--max-thickness`. Use `--thickness-samples` to raise or
|
|
378
|
-
lower the maximum thickness point samples per object.
|
|
379
|
-
|
|
380
|
-
The manifest stores the method, thresholds, palette, object list, per-object
|
|
381
|
-
triangle counts, sampled-triangle counts, minimum, p05, median, mean, maximum,
|
|
382
|
-
critical-area percentage, warning-area percentage, below-warning percentage, and
|
|
383
|
-
unresolved-area percentage. This makes the PNG useful for visual debugging while
|
|
384
|
-
the manifest remains the machine-readable source of truth.
|
|
385
|
-
|
|
386
|
-
The evidence also writes `evidence/thickness/point-cloud.json`. Each point sample
|
|
387
|
-
stores object identity, object-local position, normal, measured thickness,
|
|
388
|
-
class, RGB color, and represented surface area. The PNG renders those samples
|
|
389
|
-
over muted source geometry, so local evidence survives even when neighboring
|
|
390
|
-
triangles have very different values.
|
|
391
|
-
|
|
392
|
-
`roughness` uses the same area-weighted point placement. Point colors are local
|
|
393
|
-
to nearby physical feature edges: smooth tessellation diagonals do not become
|
|
394
|
-
visible roughness lines. Use `--roughness-samples` to raise or lower the maximum
|
|
395
|
-
roughness point samples per object.
|
|
396
|
-
|
|
397
|
-
`sections` is split into three explicit modes:
|
|
398
|
-
|
|
399
|
-
- `sections at`: one precise section at an exact plane offset.
|
|
400
|
-
- `sections stack`: periodic physical slices for reconstruction scans.
|
|
401
|
-
- `sections sample`: a fixed number of sparse representative slices.
|
|
402
|
-
|
|
403
|
-
Use `at` when an agent has localized a feature and needs the exact cross-section
|
|
404
|
-
through it:
|
|
405
|
-
|
|
406
|
-
```bash
|
|
407
|
-
forgecad inspect sections at model.forge.js --plane yz --offset 12.5
|
|
408
|
-
forgecad inspect sections at model.forge.js --angle 45 --offset 20
|
|
409
|
-
```
|
|
84
|
+
## `inspect sketch` JSON Contract
|
|
410
85
|
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
```bash
|
|
414
|
-
forgecad inspect sections stack model.forge.js --plane yz --every 1
|
|
415
|
-
```
|
|
416
|
-
|
|
417
|
-
This emits a slice from the selected plane-family minimum to maximum at the
|
|
418
|
-
requested spacing, plus a final max-bound slice when the span is not an exact
|
|
419
|
-
multiple. Use `--plane xy|xz|yz` repeatedly or comma-separated to choose
|
|
420
|
-
principal planes.
|
|
421
|
-
|
|
422
|
-
Vertical angled families are available without manual normal math:
|
|
423
|
-
|
|
424
|
-
```bash
|
|
425
|
-
forgecad inspect sections stack model.forge.js --angle 45 --every 1
|
|
426
|
-
```
|
|
427
|
-
|
|
428
|
-
`--angle 0` is equivalent to a YZ-style vertical stack, `90` is
|
|
429
|
-
equivalent to XZ, and other angles rotate the vertical plane family around Z.
|
|
430
|
-
|
|
431
|
-
Use `sample` when you want sparse evidence without choosing exact offsets:
|
|
432
|
-
|
|
433
|
-
```bash
|
|
434
|
-
forgecad inspect sections sample model.forge.js --count 5
|
|
435
|
-
forgecad inspect sections sample model.forge.js --plane yz --count 9
|
|
436
|
-
```
|
|
86
|
+
`inspect sketch` is external inspection: it runs the script, then reads returned scene objects and shape compile plans (model code never calls an inspection API). It reports selectable 2D regions from returned `Sketch`/`ConstraintSketch` objects and profile-bearing returned shapes (`extrude.profile`, `cut.profile`, `revolve.profile`).
|
|
437
87
|
|
|
438
|
-
|
|
439
|
-
and `yz` families. The renderer refuses accidental giant bundles above
|
|
440
|
-
`--max-slices` (default `1000`); raise that limit intentionally for large
|
|
441
|
-
reconstruction scans.
|
|
442
|
-
|
|
443
|
-
Each section slice records its exact offset, fraction when applicable, area,
|
|
444
|
-
path count, size, and contributing object count in the manifest. Each plane
|
|
445
|
-
family records its kind, normal, range, spacing, and slice count.
|
|
446
|
-
|
|
447
|
-
## Manifest
|
|
448
|
-
|
|
449
|
-
`manifest.json` is the authoritative contract for consuming a bundle. It
|
|
450
|
-
contains:
|
|
451
|
-
|
|
452
|
-
- `schemaVersion` and generator metadata.
|
|
453
|
-
- Source entry file and project root paths.
|
|
454
|
-
- Requested evidence, emitted evidence, filters, image size, and quality.
|
|
455
|
-
- Canonical views.
|
|
456
|
-
- Scene metadata: bbox, volume, params, cut planes, animations, verifications,
|
|
457
|
-
and objects.
|
|
458
|
-
- Evidence metadata and relative file paths.
|
|
459
|
-
|
|
460
|
-
A consumer should prefer paths from the manifest over hard-coding bundle layout.
|
|
461
|
-
The layout is intentionally simple, but the manifest is where encoding details,
|
|
462
|
-
per-view depth ranges, and object identity mappings live.
|
|
463
|
-
|
|
464
|
-
## Current Limits
|
|
465
|
-
|
|
466
|
-
- Depth is a visual heatmap, not an EXR or raw float array.
|
|
467
|
-
- Normals are camera-view normals, not world-space normals.
|
|
468
|
-
- Object evidence colors are stable within a bundle and resolved through the manifest; do
|
|
469
|
-
not infer identity from object order alone.
|
|
470
|
-
- Connectivity is object-level. It reports disconnected kernel bodies in the
|
|
471
|
-
manifest, but the PNG does not split a single scene object into per-body colors.
|
|
472
|
-
- Bbox contact is only broadphase evidence and does not merge separate scene
|
|
473
|
-
objects by default. Boolean-overlap edges are exact.
|
|
474
|
-
- Distance is a physical-component bbox-gap metric in v1, not exact nearest
|
|
475
|
-
mesh-surface distance. Concave components and loose bounding boxes can make the
|
|
476
|
-
reported gap smaller than the real closest-surface distance.
|
|
477
|
-
- Comparison PNG coverage is screen-space evidence. Hidden or internal
|
|
478
|
-
mismatches need the sampled point cloud and geometric score in the manifest.
|
|
479
|
-
- Collisions are only positive-volume boolean overlaps. Face-touching parts are
|
|
480
|
-
not collision findings.
|
|
481
|
-
- Thickness is a mesh/raycast approximation, not FEA or a manufacturability
|
|
482
|
-
guarantee. Open meshes, concave geometry, very coarse tessellation, or low
|
|
483
|
-
`--thickness-samples` values can leave gray/unresolved or approximate regions.
|
|
484
|
-
- Section evidence is exact 2D contour slicing. Use `sections at`, `sections
|
|
485
|
-
stack`, or `sections sample`; bare `inspect sections` only explains the modes.
|
|
486
|
-
- Zebra is a shader-based visual continuity aid, not exact curvature analysis.
|
|
88
|
+
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.** Seed failures are explicit and exit nonzero: 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.
|