forgecad 0.9.15 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/dist/assets/{AdminPage-CDyGUinA.js → AdminPage-DwYHz72L.js} +1 -1
  2. package/dist/assets/{BenchmarkPage-DfPMY_-d.js → BenchmarkPage-a9_f-1US.js} +1 -1
  3. package/dist/assets/{BlogPage-kF0fkdJT.js → BlogPage-DodHpvmf.js} +1 -1
  4. package/dist/assets/{DocsPage-B954L3YN.js → DocsPage-B5LePEuj.js} +8 -858
  5. package/dist/assets/{EditorApp-CuDLxKqL.css → EditorApp-BpjZgzk0.css} +148 -0
  6. package/dist/assets/EditorApp-QXsAISLR.js +16307 -0
  7. package/dist/assets/{EmbedViewer-C77B-TrF.js → EmbedViewer-DdEHGUMU.js} +2 -2
  8. package/dist/assets/{LandingPageProofDriven-Cr6fXMDj.js → LandingPageProofDriven-yhhOodbf.js} +2 -2
  9. package/dist/assets/{LegalPage-Dzklqmmg.js → LegalPage-5RbKRGYK.js} +1 -1
  10. package/dist/assets/{PricingPage-zWXkvlwl.js → PricingPage-E3Rma7aV.js} +1 -1
  11. package/dist/assets/{SettingsPage-Bz0of4KQ.js → SettingsPage-BJZcM97j.js} +1 -1
  12. package/dist/assets/{app-D3kDkggg.js → app-DSYrDg0V.js} +1846 -352
  13. package/dist/assets/cli/{render-DSY3mMQa.js → render-ZMHR9HkV.js} +161 -70
  14. package/dist/assets/{constructionHistoryWorker-gpDo-uH2.js → constructionHistoryWorker-AwMMWSxg.js} +1104 -349
  15. package/dist/assets/{evalWorker-CU0Ke6DP.js → evalWorker-DbNs7Dkp.js} +5155 -3772
  16. package/dist/assets/{inspectWorker-COyp8XXA.js → inspectWorker-CZsCFtQT.js} +1415 -439
  17. package/dist/assets/{targets-B9sGB5nB.js → jointPose-DO6mnXn_.js} +71 -3
  18. package/dist/assets/{manifold-DNkrUWpA.js → manifold-BGlQBBH9.js} +1 -1
  19. package/dist/assets/{manifold-BRI5prcH.js → manifold-BU-tJwQh.js} +1 -1
  20. package/dist/assets/{manifold-C-3h2M7p.js → manifold-fy2MV7K1.js} +2 -2
  21. package/dist/assets/{reportWorker-CdBz5bNg.js → reportWorker-DO6hcQbh.js} +8474 -4549
  22. package/dist/assets/{scalar-sampling-budget-wJF98aY9.js → scalar-sampling-budget-o90NSNmF.js} +5347 -3906
  23. package/dist/assets/{scanProxyWorker-B-9VbLIs.js → scanProxyWorker-2GtDLk-R.js} +19 -6
  24. package/dist/assets/{javascript-1kQXfVaz.js → typescript-DBQ6RN5l.js} +874 -22
  25. package/dist/cli/render.html +1 -1
  26. package/dist/docs/index.html +3 -3
  27. package/dist/docs-raw/AI/usage.md +3 -1
  28. package/dist/docs-raw/CLI.md +65 -239
  29. package/dist/docs-raw/README.md +6 -0
  30. package/dist/docs-raw/component-model.md +17 -150
  31. package/dist/docs-raw/generated/assembly.md +159 -520
  32. package/dist/docs-raw/generated/concepts.md +245 -3491
  33. package/dist/docs-raw/generated/core.md +277 -1251
  34. package/dist/docs-raw/generated/curves.md +387 -1608
  35. package/dist/docs-raw/generated/legacy.md +162 -0
  36. package/dist/docs-raw/generated/lib.md +238 -112
  37. package/dist/docs-raw/generated/output.md +51 -76
  38. package/dist/docs-raw/generated/runtime-names.md +30 -22
  39. package/dist/docs-raw/generated/sdf.md +68 -284
  40. package/dist/docs-raw/generated/sheet-metal.md +68 -335
  41. package/dist/docs-raw/generated/sketch.md +240 -1161
  42. package/dist/docs-raw/generated/viewport.md +75 -316
  43. package/dist/docs-raw/generated/wood.md +21 -49
  44. package/dist/docs-raw/guides/coordinate-system.md +4 -42
  45. package/dist/docs-raw/guides/inspection-bundles.md +44 -442
  46. package/dist/docs-raw/guides/joint-design.md +18 -79
  47. package/dist/docs-raw/guides/positioning.md +21 -143
  48. package/dist/docs-raw/guides/scene-presentation.md +89 -0
  49. package/dist/docs-raw/skills/forgecad-3d-reconstruction.md +25 -111
  50. package/dist/docs-raw/skills/forgecad-blockout-model.md +20 -117
  51. package/dist/docs-raw/skills/forgecad-component-model.md +23 -107
  52. package/dist/docs-raw/skills/forgecad-high-level-spec.md +47 -155
  53. package/dist/docs-raw/skills/forgecad-image-replicator.md +26 -143
  54. package/dist/docs-raw/skills/forgecad-lld.md +19 -113
  55. package/dist/docs-raw/skills/forgecad-make-a-model.md +113 -532
  56. package/dist/docs-raw/skills/forgecad-model-grader.md +38 -108
  57. package/dist/docs-raw/skills/forgecad-prepare-prompt.md +24 -211
  58. package/dist/docs-raw/skills/forgecad-project.md +13 -129
  59. package/dist/docs-raw/skills/forgecad-reconstruction-benchmark.md +42 -134
  60. package/dist/docs-raw/skills/forgecad-render-inspect.md +27 -174
  61. package/dist/docs-raw/skills/forgecad-visual-spec.md +32 -112
  62. package/dist/docs-raw/skills/forgecad.md +19 -18
  63. package/dist/docs-raw/skills/index.md +2 -0
  64. package/dist/docs-raw/welcome.md +4 -2
  65. package/dist/index.html +1 -1
  66. package/dist/llms.txt +1 -2
  67. package/dist/sitemap.xml +13 -13
  68. package/dist-cli/{check-compiler-SDX5QIXI.js → check-compiler-JTVBITCR.js} +1 -1
  69. package/dist-cli/{check-query-propagation-EAYEFT77.js → check-query-propagation-3FFLSMVN.js} +1 -1
  70. package/dist-cli/{chunk-N4O47JLF.js → chunk-OAN5T4XD.js} +5722 -4287
  71. package/dist-cli/forgecad.js +2195 -656
  72. package/dist-skill/CONTEXT.md +1778 -7912
  73. package/dist-skill/SKILL.md +15 -15
  74. package/dist-skill/docs/API/core/concepts.md +27 -157
  75. package/dist-skill/docs/CLI.md +65 -239
  76. package/dist-skill/docs/generated/assembly.md +160 -493
  77. package/dist-skill/docs/generated/core.md +277 -1251
  78. package/dist-skill/docs/generated/curves.md +387 -1609
  79. package/dist-skill/docs/generated/lib.md +238 -112
  80. package/dist-skill/docs/generated/output.md +51 -76
  81. package/dist-skill/docs/generated/runtime-names.md +16 -22
  82. package/dist-skill/docs/generated/sdf.md +68 -284
  83. package/dist-skill/docs/generated/sheet-metal.md +68 -335
  84. package/dist-skill/docs/generated/sketch.md +240 -1160
  85. package/dist-skill/docs/generated/viewport.md +75 -223
  86. package/dist-skill/docs/generated/wood.md +21 -49
  87. package/dist-skill/docs/guides/coordinate-system.md +4 -42
  88. package/dist-skill/docs/guides/inspection-bundles.md +44 -442
  89. package/dist-skill/docs/guides/joint-design.md +18 -79
  90. package/dist-skill/docs/guides/positioning.md +21 -143
  91. package/dist-skill/docs/guides/scene-presentation.md +89 -0
  92. package/dist-skill/docs/guides/surface-members.md +26 -0
  93. package/dist-skill/library/forgecad-3d-reconstruction/SKILL.md +23 -111
  94. package/dist-skill/library/forgecad-blockout-model/SKILL.md +18 -117
  95. package/dist-skill/library/forgecad-component-model/SKILL.md +21 -107
  96. package/dist-skill/library/forgecad-high-level-spec/SKILL.md +45 -155
  97. package/dist-skill/library/forgecad-image-replicator/SKILL.md +24 -143
  98. package/dist-skill/library/forgecad-lld/SKILL.md +17 -113
  99. package/dist-skill/library/forgecad-make-a-model/SKILL.md +111 -532
  100. package/dist-skill/library/forgecad-model-grader/SKILL.md +36 -108
  101. package/dist-skill/library/forgecad-prepare-prompt/SKILL.md +35 -224
  102. package/dist-skill/library/forgecad-prepare-prompt/references/default-profiles.md +43 -271
  103. package/dist-skill/library/forgecad-prepare-prompt/references/master-prompt.md +30 -99
  104. package/dist-skill/library/forgecad-project/SKILL.md +13 -131
  105. package/dist-skill/library/forgecad-reconstruction-benchmark/SKILL.md +29 -123
  106. package/dist-skill/library/forgecad-render-inspect/SKILL.md +25 -174
  107. package/dist-skill/library/forgecad-visual-spec/SKILL.md +30 -111
  108. package/dist-skill/website/skills/forgecad-3d-reconstruction.md +58 -0
  109. package/dist-skill/website/skills/forgecad-blockout-model.md +49 -0
  110. package/dist-skill/website/skills/forgecad-component-model.md +53 -0
  111. package/dist-skill/website/skills/forgecad-high-level-spec.md +101 -0
  112. package/dist-skill/website/skills/forgecad-image-replicator.md +63 -0
  113. package/dist-skill/website/skills/forgecad-lld.md +41 -0
  114. package/dist-skill/website/skills/forgecad-make-a-model.md +186 -0
  115. package/dist-skill/website/skills/forgecad-model-grader.md +82 -0
  116. package/dist-skill/website/skills/forgecad-prepare-prompt.md +63 -0
  117. package/dist-skill/website/skills/forgecad-project.md +26 -0
  118. package/dist-skill/website/skills/forgecad-reconstruction-benchmark.md +60 -0
  119. package/dist-skill/website/skills/forgecad-render-inspect.md +80 -0
  120. package/dist-skill/website/skills/forgecad-visual-spec.md +71 -0
  121. package/dist-skill/website/skills/forgecad.md +122 -0
  122. package/dist-skill/website/skills/index.md +26 -0
  123. package/examples/api/comparison-imported-sphere-candidate.forge.js +1 -1
  124. package/examples/api/conformal-product-ribbon.forge.js +1 -1
  125. package/examples/api/exact-sheet-shell-assembly.forge.js +1 -1
  126. package/examples/api/extrude-options.forge.js +4 -2
  127. package/examples/api/field-loft-drive-tip.forge.js +40 -0
  128. package/examples/api/guided-loft-olive-oil-bottle.forge.js +1 -1
  129. package/examples/api/helix-basics.forge.js +2 -2
  130. package/examples/api/highlight-debug.forge.js +10 -10
  131. package/examples/api/mesh-import-slats.forge.js +1 -1
  132. package/examples/api/real-product-curves.forge.js +1 -1
  133. package/examples/api/route3d-elbow.forge.js +3 -0
  134. package/examples/api/sculpt-box-circle-booleans.forge.js +1 -1
  135. package/examples/api/sdf-shapes.forge.js +2 -5
  136. package/examples/api/sketch-rounding-strategies.forge.js +6 -6
  137. package/examples/api/surface-member-bottle-cage.forge.js +3 -3
  138. package/examples/api/surface-member-conformal-product-ribbon.forge.js +3 -3
  139. package/examples/api/surface-member-razor-inlay.forge.js +1 -1
  140. package/examples/api/variable-sweep-test.forge.js +4 -2
  141. package/examples/mechanical/airplane-propeller.forge.js +74 -39
  142. package/examples/nurbs-surface.forge.js +1 -1
  143. package/examples/products/iphone.forge.js +1 -1
  144. package/package.json +4 -1
  145. package/dist/assets/EditorApp-Beb-IZ0y.js +0 -14014
  146. package/dist/docs-raw/guides/geometry-conventions.md +0 -52
  147. package/dist/docs-raw/guides/modeling-recipes.md +0 -78
  148. package/dist-skill/docs/guides/geometry-conventions.md +0 -52
  149. package/dist-skill/docs/guides/modeling-recipes.md +0 -78
  150. package/dist-skill/library/forgecad-visual-spec/references/prompt-template.md +0 -79
  151. package/examples/api/bolted-service-cover.forge.js +0 -17
  152. package/examples/api/cable-gland-anchor.forge.js +0 -14
  153. package/examples/api/captured-cartridge-guide.forge.js +0 -14
  154. package/examples/api/captured-linear-slide.forge.js +0 -13
  155. package/examples/api/clevis-pin-joint.forge.js +0 -13
  156. package/examples/api/datum-enclosure.forge.js +0 -16
  157. package/examples/api/hose-barb-port.forge.js +0 -14
  158. package/examples/api/knuckled-hinge-assembly.forge.js +0 -15
  159. package/examples/api/living-hinge-cover.forge.js +0 -14
  160. package/examples/api/pcb-terminal-block.forge.js +0 -22
  161. package/examples/api/pinned-lever-pivot-stack.forge.js +0 -14
  162. package/examples/api/retained-shaft-knob-stack.forge.js +0 -15
  163. package/examples/api/routed-tube-clip.forge.js +0 -15
  164. package/examples/api/seated-bearing-stack.forge.js +0 -30
  165. package/examples/api/snap-latch-cover.forge.js +0 -14
  166. package/examples/api/thumb-screw-clamp.forge.js +0 -15
@@ -9,14 +9,14 @@ Dimensions, BOM entries, verification checks, and sketch export.
9
9
 
10
10
  ## Contents
11
11
 
12
- - [Annotations & Output](#annotations-output) — `bom`, `robotExport`, `dim`, `dimLine`
13
- - [Sketch Export](#sketch-export) — `sketchToDxf`, `sketchToSvg`
12
+ - [Annotations & Output](#annotations-output)
13
+ - [Sketch Export](#sketch-export)
14
14
 
15
15
  ## Functions
16
16
 
17
17
  ### Annotations & Output
18
18
 
19
- #### `bom()` — Register a Bill of Materials entry for report export.
19
+ #### `bom(quantity: number, description: string, opts?: BomOpts): void` — Register a Bill of Materials entry for report export.
20
20
 
21
21
  BOM entries are accumulated during script execution and exported alongside the model in report views. Rows are grouped by normalized `description + unit`. Pass an explicit `key` to force multiple descriptions to collapse into a single line item.
22
22
 
@@ -42,10 +42,6 @@ bom(tubeLen, "rectangular steel tube", {
42
42
  });
43
43
  ```
44
44
 
45
- ```ts
46
- bom(quantity: number, description: string, opts?: BomOpts): void
47
- ```
48
-
49
45
  **`BomOpts`**
50
46
 
51
47
  | Option | Type | Description |
@@ -62,9 +58,9 @@ bom(quantity: number, description: string, opts?: BomOpts): void
62
58
  | `notes?` | `string` | Free-form notes |
63
59
  | `grain?` | `string` | Wood grain direction, e.g. "long", "cross" |
64
60
 
65
- #### `robotExport()` — Declare that this script should export the assembly as a SDF/URDF robot package.
61
+ #### `robotExport(options: RobotExportOptions): CollectedRobotExport` — Declare that this script should export the assembly as a SDF/URDF robot package.
66
62
 
67
- Call `robotExport()` alongside your assembly definition. The CLI commands `forgecad export sdf` and `forgecad export urdf` pick up the declaration and produce a robot package with:
63
+ Call `robotExport()` alongside your assembly definition. `forgecad export sdf` / `forgecad export urdf` pick up the declaration (see the CLI docs for flags) and produce a robot package with:
68
64
 
69
65
  - Mesh-based inertia tensors (full 6-component, not bounding-box approximations)
70
66
  - Separate collision meshes (convex hull by default — ~50–80% smaller)
@@ -87,22 +83,10 @@ Call `robotExport()` alongside your assembly definition. The CLI commands `forge
87
83
  - Compatibility coupling metadata, when present, maps only the primary term (largest ratio) to `<mimic>` — SDF/URDF support single-leader mimic only. Dropped terms emit a warning.
88
84
 
89
85
  ```ts
90
- const rover = assembly("Scout")
91
- .addPart("Chassis", box(300, 220, 50).translate(0, 0, -25))
92
- .addPart("Left Wheel", cylinder(30, 60, undefined, 48).translate(0, 0, -15))
93
- .addRevolute("leftWheel", "Chassis", "Left Wheel", {
94
- axis: [0, 1, 0],
95
- frame: Transform.identity().translate(90, 140, 60),
96
- effort: 20, velocity: 1080,
97
- });
98
-
99
86
  robotExport({
100
- assembly: rover,
87
+ assembly: rover, // assembly() with parts + revolute wheel joints
101
88
  modelName: "Scout",
102
- links: {
103
- Chassis: { massKg: 10 },
104
- "Left Wheel": { massKg: 0.8 },
105
- },
89
+ links: { Chassis: { massKg: 10 }, "Left Wheel": { massKg: 0.8 } },
106
90
  plugins: {
107
91
  diffDrive: {
108
92
  leftJoints: ["leftWheel"], rightJoints: ["rightWheel"],
@@ -113,17 +97,6 @@ robotExport({
113
97
  });
114
98
  ```
115
99
 
116
- **CLI usage**
117
-
118
- ```bash
119
- forgecad export sdf model.forge.js # SDF package (Gazebo/Ignition)
120
- forgecad export urdf model.forge.js # URDF package (ROS/PyBullet/MuJoCo)
121
- ```
122
-
123
- ```ts
124
- robotExport(options: RobotExportOptions): CollectedRobotExport
125
- ```
126
-
127
100
  **`RobotExportOptions`**: `assembly: Assembly`, `modelName?: string`, `state?: JointState`, `static?: boolean`, `selfCollide?: boolean`, `allowAutoDisable?: boolean`, `links?: Record<string, RobotLinkExportOptions>`, `joints?: Record<string, RobotJointExportOptions>`, `plugins?: { diffDrive?: RobotDiffDrivePluginOptions; jointStatePublisher?: RobotJointStatePublisherOptions; }`, `world?: RobotWorldOptions`
128
101
 
129
102
  `RobotLinkExportOptions`: `{ massKg?: number, densityKgM3?: number, collision?: "visual" | "convex" | "box" | "none" }`
@@ -140,46 +113,58 @@ robotExport(options: RobotExportOptions): CollectedRobotExport
140
113
 
141
114
  **`CollectedRobotExport`**: `modelName: string`, `assembly: AssemblyDefinition`, `state: JointState`, `static: boolean`, `selfCollide: boolean`, `allowAutoDisable: boolean`, `links: Record<string, RobotLinkExportOptions>`, `joints: Record<string, RobotJointExportOptions>`, `plugins: { diffDrive?: RobotDiffDrivePluginOptions; jointStatePublisher?: RobotJointStatePublisherOptions; }`, `world: RobotWorldOptions | null`
142
115
 
143
- **`AssemblyDefinition`**: `name: string`, `parts: AssemblyPartDef[]`, `joints: AssemblyJointDef[]`, `jointCouplings: AssemblyJointCouplingDef[]`, `kinematics: AssemblyKinematicGraphDef`
116
+ **`AssemblyDefinition`**: `name: string`, `parts: AssemblyPartDef[]`, `joints: AssemblyJointDef[]`, `jointCouplings: AssemblyJointCouplingDef[]`, `kinematics: AssemblyKinematicGraphDef`, `frames: AssemblyFrameDef[]`, `frameJoints: AssemblyFrameJointDef[]`, `frameEdges: AssemblyFrameEdgeDef[]`
144
117
 
145
- `AssemblyPartDef`: `{ name: string, part: AssemblyPart, base: Transform, metadata?: PartMetadata, mates: AssemblyPartMateInput[] }`
118
+ **`AssemblyPartDef`**: `name: string`, `part: AssemblyPart`, `base: Transform`, `metadata?: PartMetadata`, `mates: AssemblyPartMateInput[]`, `bindToFrame?: string`
146
119
 
147
- **`PartMetadata`**
120
+ `PartMetadata` — defined in [assembly](/docs/assembly).
148
121
 
149
- | Option | Type | Description |
150
- |--------|------|-------------|
151
- | `tags?` | `string \| readonly string[]` | Viewport organization tags applied to scene objects produced from this part. |
152
- | `material?`, `process?`, `tolerance?`, `qty?`, `notes?`, `densityKgM3?`, `massKg?` | | — |
153
-
154
- **`AssemblyPartMateInput`**
155
- - `connector: string` — Name of a connector declared on the part (via `withConnectors()`).
156
- - `toLink: string` — Name of the link this connector's origin is pinned to.
157
- - `aimLink?: string` — Optional second link to orient toward. When set, the part is rotated so the connector's **axis** aims from `toLink` toward `aimLink`, posing an oriented bone instead of only translating it. For full pose without relying on a connector axis, declare a second mate (two connectors → two links).
122
+ `AssemblyPartMateInput` defined in [assembly](/docs/assembly).
158
123
 
159
124
  **`AssemblyJointDef`**: `name: string`, `type: JointType`, `parent: string`, `child: string`, `frame: Transform`, `axis: Vec3`, `min?: number`, `max?: number`, `defaultValue: number`, `unit?: string`, `effort?: number`, `velocity?: number`, `damping?: number`, `friction?: number`, `connectorRefs?: JointConnectorRefs`
160
125
 
161
- `JointConnectorRefs`: `{ parent: string, child: string, parentAlign?: PortAlign, childAlign?: PortAlign }`
126
+ `JointConnectorRefs` defined in [assembly](/docs/assembly).
162
127
 
163
128
  `AssemblyJointCouplingDef`: `{ joint: string, terms: JointCouplingTermRecord[], offset: number }`
164
129
 
165
130
  `JointCouplingTermRecord`: `{ joint: string, ratio: number }`
166
131
 
167
- `AssemblyKinematicGraphDef`: `{ links: AssemblyLinkDef[], edges: AssemblyEdgeBetweenLinksDef[], angles: AssemblyAngleBetweenLinksDef[] }`
132
+ **`AssemblyKinematicGraphDef`**: `links: AssemblyLinkDef[]`, `edges: AssemblyEdgeBetweenLinksDef[]`, `angles: AssemblyAngleBetweenLinksDef[]`, `derivedLinks: AssemblyDerivedLinkDef[]`
168
133
 
169
134
  `AssemblyLinkDef`: `{ name: string, at: Vec3, fixed: boolean, metadata?: Record<string, unknown> }`
170
135
 
171
136
  **`AssemblyEdgeBetweenLinksDef`**: `name: string`, `a: string`, `b: string`, `length: number | null`, `min?: number`, `max?: number`, `visualOnly: boolean`, `control?: AssemblyKinematicControlOptions`, `metadata?: Record<string, unknown>`
172
137
 
173
- `AssemblyKinematicControlOptions`: `{ min?: number, max?: number, default?: number, unit?: string }`
138
+ `AssemblyKinematicControlOptions` defined in [assembly](/docs/assembly).
139
+
140
+ **`AssemblyAngleBetweenLinksDef`**: `name: string`, `a?: string`, `b: string`, `c: string`, `reference?: AssemblyAngleReferenceDef`, `target?: number`, `min?: number`, `max?: number`, `control?: AssemblyKinematicControlOptions`, `metadata?: Record<string, unknown>`
141
+
142
+ `AssemblyAngleReferenceDef`: `{ kind: "worldDirection", direction: Vec3 }`
143
+
144
+ **`AssemblyDerivedLinkDef`**
145
+ - `distance: number` — Signed: positive moves from `fromLink` toward `towardLink`, negative moves away.
146
+ - Also: `name: string`, `fromLink: string`, `towardLink: string`.
147
+
148
+ `AssemblyFrameDef`: `{ name: string, origin: Vec3, axis: Vec3, up: Vec3, fixed: boolean, metadata?: Record<string, unknown> }`
149
+
150
+ **`AssemblyFrameJointDef`**: `name: string`, `type: AssemblyFrameJointType`, `parent: string`, `child: string`, `rest: Transform`, `min?: number`, `max?: number`, `defaultValue: number`, `unit?: string`, `control: boolean`, `metadata?: Record<string, unknown>`
151
+
152
+ `AssemblyFrameEdgeDef`: `{ name: string, a: string, b: string, metadata?: Record<string, unknown> }`
174
153
 
175
- **`AssemblyAngleBetweenLinksDef`**: `name: string`, `a: string`, `b: string`, `c: string`, `target?: number`, `min?: number`, `max?: number`, `control?: AssemblyKinematicControlOptions`, `metadata?: Record<string, unknown>`
154
+ #### `dim()` Add a dimension annotation between two points, or along an entity.
176
155
 
177
- #### `dim()` — Add a dimension annotation between two points.
156
+ Overloads:
157
+
158
+ - `dim(line: Line2D, opts?: DimOpts): void`
159
+ - `dim(edge: EdgeRef, opts?: DimOpts): void`
160
+ - `dim(from: PointArg, to: PointArg, opts?: DimOpts): void`
178
161
 
179
162
  Dimension annotations are purely visual callouts rendered in the viewport and report export. They do not affect geometry or constrain the model.
180
163
 
181
164
  Point arguments accept 2D tuples `[x, y]`, 3D tuples `[x, y, z]`, or [`Point2D`](/docs/sketch#point2d) objects (Z is treated as 0 for 2D inputs).
182
165
 
166
+ Entity arguments: pass a single [`Line2D`](/docs/sketch#line2d) (from a constrained sketch) or an `EdgeRef` (from `shape.edge('left')`) as the first argument to dimension along that entity directly — no manual endpoint extraction needed.
167
+
183
168
  **Ownership Rules (Report Pages)**
184
169
 
185
170
  - `currentComponent: true` — deterministic ownership by the calling import instance. Use when authoring reusable imported parts.
@@ -191,33 +176,31 @@ Point arguments accept 2D tuples `[x, y]`, 3D tuples `[x, y, z]`, or [`Point2D`]
191
176
  dim([-w / 2, 0, 0], [w / 2, 0, 0], { label: "Width" });
192
177
  dim([0, 0, -h / 2], [0, 0, h / 2], { label: "Height", offset: 14 });
193
178
  dim([0, 0, 0], [100, 0, 0], { component: "Base", color: "#00AAFF" });
179
+ dim(sk.line(a, b), { label: "Span", offset: -8 }); // Line2D entity
180
+ dim(myBox.edge("top-right"), { label: "Depth" }); // EdgeRef entity
194
181
  ```
195
182
 
196
- `component` (string or string[] report ownership), `currentComponent` (boolean)
183
+ [`Line2D`](/docs/sketch#line2d) / `EdgeRef` entity (then pass `opts` as the second argument)
197
184
 
198
- ```ts
199
- dim(from: PointArg, to: PointArg, opts?: DimOpts): void
200
- ```
185
+ `component` (string or string[] — report ownership), `currentComponent` (boolean)
201
186
 
202
187
  `DimOpts`: `{ offset?: number, label?: string, color?: string, component?: string | string[], currentComponent?: boolean }`
203
188
 
204
- #### `dimLine()` — Add a dimension annotation along a [`Line2D`](/docs/sketch#line2d).
205
-
206
- Convenience wrapper around { points from a constrained-sketch [`Line2D`](/docs/sketch#line2d) entity. All `opts` are forwarded unchanged.
189
+ **`EdgeRef`**
207
190
 
208
- ```ts
209
- const a = point(0, 0);
210
- const b = point(100, 0);
211
- dimLine(line(a, b), { label: "Span", offset: -8 });
212
- ```
191
+ | Option | Type | Description |
192
+ |--------|------|-------------|
193
+ | `start` | `Vec3` | Start point |
194
+ | `end` | `Vec3` | End point |
195
+ | `query?` | `EdgeQueryRef` | Compiler-owned edge query when available. |
196
+ | `curve?` | `EdgeCurve` | Exact or parametric curve family when the backend/source can identify one. |
197
+ | `faceName?` | `string` | Owning face name when the edge is associated with one face in a larger topology. |
213
198
 
214
- ```ts
215
- dimLine(l: Line2D, opts?: DimOpts): void
216
- ```
199
+ Also: `name: EdgeName`.
217
200
 
218
201
  ### Sketch Export
219
202
 
220
- #### `sketchToDxf()` — Export a 2D sketch as a DXF string (R12/AC1009 — maximally compatible).
203
+ #### `sketchToDxf(sketch: Sketch, options?: SketchDxfOptions): string` — Export a 2D sketch as a DXF string (R12/AC1009 — maximally compatible).
221
204
 
222
205
  For regular sketches, each polygon loop becomes a closed `LWPOLYLINE`. For constrained sketches, exports raw `LINE`, `CIRCLE`, and `ARC` entities from the constraint edge geometry, which preserves internal/shared edges that `toPolygons()` would merge away.
223
206
 
@@ -228,15 +211,11 @@ const s = rect(100, 60);
228
211
  const dxf = sketchToDxf(s, { layer: 'cut' });
229
212
  ```
230
213
 
231
- ```ts
232
- sketchToDxf(sketch: Sketch, options?: SketchDxfOptions): string
233
- ```
234
-
235
214
  **`SketchDxfOptions`**
236
215
  - `layer?: string` — DXF layer name. Default: "0"
237
216
  - `colorIndex?: number` — DXF color index (1–255, AutoCAD ACI). Default: 7 (white/black)
238
217
 
239
- #### `sketchToSvg()` — Export a 2D sketch as an SVG string.
218
+ #### `sketchToSvg(sketch: Sketch, options?: SketchSvgOptions): string` — Export a 2D sketch as an SVG string.
240
219
 
241
220
  For regular sketches, exports filled polygon regions. For constrained sketches, exports raw edge geometry (LINE, ARC, CIRCLE) which preserves internal/shared edges that `toPolygons()` would merge away.
242
221
 
@@ -247,10 +226,6 @@ const s = rect(100, 60);
247
226
  const svg = sketchToSvg(s, { stroke: '#333', strokeWidth: 0.8 });
248
227
  ```
249
228
 
250
- ```ts
251
- sketchToSvg(sketch: Sketch, options?: SketchSvgOptions): string
252
- ```
253
-
254
229
  **`SketchSvgOptions`**
255
230
 
256
231
  | Option | Type | Description |
@@ -14,28 +14,22 @@ Agents should avoid declaring these names with top-level `const`, `let`, destruc
14
14
  These collision-reserved names are case-sensitive:
15
15
 
16
16
  ```text
17
- activateBackend, Analysis, arcSlot, assembly, Assembly, assemblyInstructions, assemblyPreview, Blend
18
- bom, bomToCsv, boolParam, box, cameraTrajectory, Carrier, chamfer, chamferTrackedEdge
19
- choiceParam, circle, circle2d, Circle2D, circularLayout, circularPattern, circularPattern2d, coalesceEdges
20
- combine, COMMON_KERFS, compareWith, composeChain, connectEdges, connector, console, constrainedSketch
21
- Constraint, Counterbore, Curve, Curve3D, cutPlane, cylinder, degrees, difference
22
- difference2d, dim, dimLine, draft, ellipse, explodeView, faceProfile, fillet
23
- filletCorners, filletTrackedEdge, fingerJoint, flatPanel, flatPart, formatInstructions, Function, gcode
24
- GCodeBuilder, getActiveBackend, global, globalThis, group, Helix, HelixCurve, hermiteTransitionG2
25
- highlight, Import, ImportedAssembly, importMesh, importStep, importSvgSketch, initKernel, intersection
26
- intersection2d, intersectWithPlane, joint, jointsView, laserKit, lib, line, Line2D
27
- linearPattern, linearPattern2d, listParam, loadFont, loft, Loft, loftAlongSpine, lookupKerf
28
- mirrorCopy, mock, ngon, nurbs3d, NurbsCurve3D, nurbsSurface, NurbsSurface, offsetSolid
29
- param, Param, path, point, Point2D, Points, polygon, polygonVertices
30
- port, Product, ProductHandleBuilder, ProductHandleFeature, ProductPanelBuilder, ProductRibbonBuilder, ProductSkin, ProductSkinBuilder
31
- ProductSpoutBuilder, ProductStationBuilder, ProductSurfaceBuilder, ProductSurfaceRef, projectToPlane, queueMicrotask, radians, rect
32
- Rectangle2D, Ribs, robotExport, roundedRect, Route3D, scene, Sculpt, sdf
33
- SdfShape, selectEdge, selectEdges, self, setActiveBackend, setImmediate, setInterval, setTimeout
34
- Shape, ShapeGroup, sheetMetal, SheetMetalPart, sheetStock, Sketch, sketchToDxf, sketchToSvg
35
- slot, Slot, SolvedAssembly, spec, sphere, spline2d, spline3d, star
36
- stroke, Surface, SurfaceBody, SurfaceMembers, surfacePatch, sweep, tabSlot, text2d
37
- textWidth, torus, toShape, Transform, transitionCurve, transitionSurface, union, union2d
38
- variableSweep, verify, viewConfig, Viewport, window, Wood
17
+ activateBackend, Analysis, arcSlot, assembly, Assembly, Blend, bom, box
18
+ cameraTrajectory, Carrier, chamfer, circle2d, Circle2D, circularLayout, circularPattern, circularPattern2d
19
+ coalesceEdges, compareWith, connector, console, constrainedSketch, Curve, Curve3D, cutPlane
20
+ cylinder, difference, difference2d, dim, draft, ellipse, explodeView, faceProfile
21
+ fillet, Function, gcode, GCodeBuilder, getActiveBackend, global, globalThis, group
22
+ Import, ImportedAssembly, initKernel, intersection, intersection2d, intersectWithPlane, joint, Laser
23
+ lib, Line2D, linearPattern, linearPattern2d, loadFont, loft, Loft, mirrorCopy
24
+ mock, ngon, NurbsCurve3D, NurbsSurface, offsetSolid, param, Param, path
25
+ Point2D, Points, polygon, polygonVertices, port, Product, ProductPanelBuilder, ProductRibbonBuilder
26
+ ProductSkin, ProductSkinBuilder, ProductStationBuilder, ProductSurfaceBuilder, ProductSurfaceRef, projectToPlane, queueMicrotask, rect
27
+ Rectangle2D, robotExport, roundedRect, Route3D, scene, Sculpt, sdf, SdfShape
28
+ selectEdge, selectEdges, self, setActiveBackend, setImmediate, setInterval, setTimeout, Shape
29
+ ShapeGroup, sheetMetal, SheetMetalPart, sheetStock, Sketch, sketchToDxf, sketchToSvg, slot
30
+ SolvedAssembly, spec, sphere, spline2d, stroke, Surface, SurfaceBody, SurfaceMembers
31
+ sweep, text2d, textWidth, torus, toShape, Transform, union, union2d
32
+ variableSweep, verify, Viewport, window, Wood
39
33
  ```
40
34
 
41
35
  `showLabels` is also a runtime global, but it is not part of the top-level collision check. Avoid reusing it unless you intentionally want a local value with that name.