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
@@ -0,0 +1,162 @@
1
+ <!-- AUTO-GENERATED by scripts/gen-api-docs.mjs. Do not edit by hand. -->
2
+ <!-- BUILD GUARD: no skill-group frontmatter, ever — this file is a lookup table for
3
+ agents editing old models, not taught context. Banned from the skill bundle via
4
+ BUNDLE_BANNED_DOCS in scripts/build-forgecad-skill.mjs. -->
5
+
6
+ # Legacy API Names
7
+
8
+ These names still run but are no longer taught; new code must use the replacement.
9
+ Each emits a one-time deprecation warning per script run.
10
+ They may be removed in a future release.
11
+
12
+ ## core
13
+
14
+ | Old name | Use instead |
15
+ |----------|-------------|
16
+ | `composeChain()` | `Transform.compose(a, b, ...)` |
17
+ | `importSvgSketch()` | `Import.svgSketch(file, options)` |
18
+ | `importMesh()` | `Import.mesh(file, options)` |
19
+ | `importStep()` | `Import.step(file)` |
20
+ | `Constraint.makeParallel()` | `sk.parallel(a, b)` |
21
+ | `Constraint.horizontal()` | `sk.horizontal(line)` |
22
+ | `Constraint.vertical()` | `sk.vertical(line)` |
23
+ | `Constraint.equalLength()` | `sk.equal(a, b)` |
24
+ | `Constraint.distance()` | `sk.distance(a, b, value)` |
25
+ | `Constraint.fix()` | `sk.fix(point, x, y)` |
26
+ | `Constraint.coincident()` | `sk.coincident(a, b)` |
27
+ | `Constraint.perpendicular()` | `sk.perpendicular(a, b)` |
28
+ | `Constraint.length()` | `sk.length(line, value)` |
29
+ | `Slot.rounded()` | `SurfaceMembers.roundedSlot({ length, width }) — same builder, same fluent chain` |
30
+ | `Counterbore.cylindrical()` | `SurfaceMembers.counterbore({ diameter, clearanceDiameter, depth }) — same builder, same fluent chain` |
31
+ | `Ribs.repeated()` | `SurfaceMembers.ribs({ count, height }) — same feature object` |
32
+
33
+ ## sketch
34
+
35
+ | Old name | Use instead |
36
+ |----------|-------------|
37
+ | `point()` | `new Point2D(x, y) — or cs.point(x, y) inside constrainedSketch()` |
38
+ | `line()` | `Line2D.fromCoordinates(x1, y1, x2, y2) — or cs.line(a, b) inside constrainedSketch()` |
39
+ | `circle()` | `Circle2D.fromCenterAndRadius(new Point2D(cx, cy), r) — or circle2d(r) for a sketch profile` |
40
+ | `addRect()` | `sk.rect({ x: 0, y: 0, width: 100, height: 50 }) — same options, called on the constrainedSketch() builder` |
41
+ | `addPolygon()` | `sk.addPolygon({ points: [[0,0],[100,0],[50,80]] }) — same options, called on the constrainedSketch() builder` |
42
+ | `addRegularPolygon()` | `sk.regularPolygon({ sides: 6, radius: 25 }) — same options, called on the constrainedSketch() builder` |
43
+ | `filletTrackedEdge()` | `fillet(shape, radius, shape.edge('vert-br')) — same exact compiler-owned path, no quadrant tuple needed` |
44
+ | `chamferTrackedEdge()` | `chamfer(shape, size, shape.edge('vert-br')) — same exact compiler-owned path, no quadrant tuple needed` |
45
+ | `filletCorners()` | `polygon(points).filletCorner([x, y], radius) — seed-point corner selection; or .filletCorners(radius) for all corners` |
46
+ | `star()` | `polygon(tips.flatMap((tip, i) => [tip, valleys[i]])) with tips = polygonVertices(n, outerR, { startDeg: -90 }) and valleys = polygonVertices(n, innerR, { startDeg: -90 + 180 / n })` |
47
+ | `ConstrainedSketchBuilder.importPoint()` | `sk.point(pt.x, pt.y, fixed) — constraint methods auto-import Point2D values directly` |
48
+ | `ConstrainedSketchBuilder.importLine()` | `sk.line(sk.point(l.start.x, l.start.y, fixed), sk.point(l.end.x, l.end.y, fixed)) — constraint methods auto-import Line2D values directly` |
49
+ | `ConstrainedSketchBuilder.importRectangle()` | `sk.rect({ x, y, width, height }) — returns richer named sides (bottom/right/top/left) and vertices` |
50
+
51
+ ## assembly
52
+
53
+ | Old name | Use instead |
54
+ |----------|-------------|
55
+ | `bomToCsv()` | `solvedAssembly.bomCsv() — the method form covers BOM CSV export` |
56
+ | `SolvedAssembly.mateExplodeHints()` | `explode hints derive automatically from connect()/match() joints — use explodeView()` |
57
+ | `SolvedAssembly.mateDof()` | `diagnostics for the legacy mate() solver — position parts with connect()/match() and inspect kinematics instead` |
58
+ | `SolvedAssembly.mateConverged()` | `diagnostics for the legacy mate() solver — position parts with connect()/match() and inspect kinematics instead` |
59
+ | `SolvedAssembly.toScene()` | `toSceneObjects() — same return shape; or return the SolvedAssembly directly` |
60
+ | `Assembly.usedPortRefs()` | `usedConnectorRefs — same ReadonlySet` |
61
+ | `Assembly.mate()` | `connect("Parent.connectorA", "Child.connectorB") / match("Child.connectorB", "Parent.connectorA") — connector-frame joints replace string-ref mates` |
62
+ | `Assembly.getPort()` | `getConnector(ref) — same "PartName.connectorName" ref; fields are partName/connectorName/connector` |
63
+ | `Assembly.linkToward()` | `linkAlong(name, fromLink, towardLink, distance) — same arguments; positive distance moves toward towardLink, negative moves away` |
64
+ | `Assembly.linkAwayFrom()` | `linkAlong(name, fromLink, awayFromLink, -distance) — negate the distance: negative values extend away from the reference link` |
65
+ | `Assembly.toJointsView()` | `return the Assembly directly (return mech) — solver-backed controls appear automatically; use addAnimation(name, { keyframes }) for animation clips` |
66
+ | `ImportedAssembly.part()` | `getPart(name, state?) — same offset-aware accessor; note that solve(state).getPart(name) does NOT apply the placeReference() offset stored on the imported assembly` |
67
+ | `ImportedAssembly.translate()` | `toGroup().translate(x, y, z) — the explicit toGroup(state?) call shows where kinematics become a static group; or placeReference() to position by a named point` |
68
+ | `ImportedAssembly.rotate()` | `toGroup().rotate(axis, angleDeg, options) — the explicit toGroup(state?) call shows where kinematics become a static group` |
69
+ | `ImportedAssembly.rotateX()` | `toGroup().rotateX(angleDeg, options) — the explicit toGroup(state?) call shows where kinematics become a static group` |
70
+ | `ImportedAssembly.rotateY()` | `toGroup().rotateY(angleDeg, options) — the explicit toGroup(state?) call shows where kinematics become a static group` |
71
+ | `ImportedAssembly.rotateZ()` | `toGroup().rotateZ(angleDeg, options) — the explicit toGroup(state?) call shows where kinematics become a static group` |
72
+ | `ImportedAssembly.scale()` | `toGroup().scale(v) — the explicit toGroup(state?) call shows where kinematics become a static group` |
73
+ | `ImportedAssembly.mirror()` | `toGroup().mirror(normal) — the explicit toGroup(state?) call shows where kinematics become a static group` |
74
+ | `ImportedAssembly.color()` | `toGroup().color(hex) — the explicit toGroup(state?) call shows where kinematics become a static group` |
75
+
76
+ ## curves
77
+
78
+ | Old name | Use instead |
79
+ |----------|-------------|
80
+ | `nurbsSurface()` | `Surface.Nurbs(controlGrid, options) — same arguments and options, including thickness` |
81
+ | `surfacePatch()` | `Surface.Patch(curves, { approximate: true }) — Surface.Patch defaults approximate: false (pass { approximate: true } for sampled Curve3D/Vec3[] boundaries) and returns an open sheet; use .thicken(t) instead of the thickness option` |
82
+ | `Surface.MatchEdge()` | `Surface.Match()` |
83
+ | `Product.ovalProfile()` | `Product.profiles.oval(width, depth, options) — identical arguments` |
84
+ | `Product.roundedRectProfile()` | `Product.profiles.roundedRect(width, depth, radius) — identical arguments` |
85
+ | `Product.circleProfile()` | `Product.profiles.circle(diameter, options) — identical arguments` |
86
+ | `Product.superEllipseProfile()` | `Product.profiles.superEllipse(width, depth, options) — identical arguments` |
87
+ | `Product.spout()` | `Product.place(loft(sectionSketches, heights).as('spout'), ref) — loft the local spout sections at origin, then place the result on the ProductSurfaceRef frame (or ref.attach(...) with offset/inset options)` |
88
+ | `Product.handle()` | `sweep(gripProfile, spinePoints) with spine points derived from ref.frame().point, plus Product.place(padShape, ref) for landing pads — composes loft/sweep with connector frames instead of a fixed handle archetype` |
89
+ | `Curve.Polyline()` | `pass the Vec3[] points array directly — sweep(profile, points) and Curve.Trim/Reverse accept raw point arrays; use Curve.Route.fromPolyline(points) when the centerline needs bend/port metadata` |
90
+ | `Curve.Spline()` | `Curve.Fit(points) — exact NURBS interpolation through the same points (add { closed: true } for loops); unlike the sampled Catmull-Rom spline it works with Curve.Trim/Reverse, sweeps, and exact surface boundaries` |
91
+
92
+ ## sheet-metal
93
+
94
+ | Old name | Use instead |
95
+ |----------|-------------|
96
+ | `kerfCompensateOutline()` | `sketch.offset(-kerf / 2) — or let FlatPart.profile(kerf) / Laser.kit({ kerf }) apply kerf compensation automatically` |
97
+ | `kerfCompensateTabs()` | `sketch.offset(kerf / 2) — or let FlatPart.profile(kerf) / Laser.kit({ kerf }) apply kerf compensation automatically` |
98
+ | `kerfCompensateSlots()` | `sketch.offset(kerf / 2) — or let FlatPart.profile(kerf) / Laser.kit({ kerf }) apply kerf compensation automatically` |
99
+ | `kerfCompensatePart()` | `FlatPart.profile(kerf) / FlatPart.solid(kerf) — or Laser.kit({ kerf }), which compensates every part automatically` |
100
+ | `lookupKerf()` | `Laser.lookupKerf(material, thickness, laserType)` |
101
+ | `flatPanel()` | `Laser.panel(name, width, height, thickness, options) — identical arguments` |
102
+ | `flatPart()` | `Laser.part(name, profile, thickness, edges, options) — identical arguments` |
103
+ | `fingerJoint()` | `Laser.fingerJoint(partA, edgeA, partB, edgeB, options) — identical arguments` |
104
+ | `tabSlot()` | `Laser.tabSlot(partA, edgeA, partB, edgeB, options) — identical arguments` |
105
+ | `assemblyPreview()` | `Laser.kit(...).assemblyPreview(options) — the kit collects joints and applies its kerf (default 0.2 mm; this standalone form defaulted kerf to 0, so use Laser.kit({ kerf: 0 }) for byte-identical preview geometry); Laser.assemblyPreview(parts, joints, options) keeps the standalone form` |
106
+ | `assemblyInstructions()` | `Laser.kit(...).assemblyInstructions(options) — the kit collects joints for you; Laser.instructions(parts, joints, options) keeps the standalone form` |
107
+ | `formatInstructions()` | `Laser.kit(...).formatInstructions(options) — or Laser.formatInstructions(result) for the standalone form` |
108
+ | `laserKit()` | `Laser.kit(options) — identical arguments` |
109
+ | `COMMON_KERFS` | `Laser.COMMON_KERFS` |
110
+
111
+ ## viewport
112
+
113
+ | Old name | Use instead |
114
+ |----------|-------------|
115
+ | `viewConfig()` | `scene({ jointOverlay: { ... } }) — same keys, on the one renderer-config global` |
116
+ | `jointsView()` | `return the Assembly directly (return mech) — solver-backed controls appear automatically; use mech.addAnimation(name, { keyframes }) for animation clips` |
117
+ | `showLabels()` | `Viewport.highlight(shape, { labels: true }) — then return the shape; highlight returns void` |
118
+ | `highlight()` | `Viewport.highlight(target, options) — same arguments, namespaced with the other render-only overlays` |
119
+
120
+ ## output
121
+
122
+ | Old name | Use instead |
123
+ |----------|-------------|
124
+ | `dimLine()` | `dim(line, opts) — dim() accepts a Line2D (or EdgeRef) directly` |
125
+
126
+ ## lib
127
+
128
+ | Old name | Use instead |
129
+ |----------|-------------|
130
+ | `lib.boltHole()` | `shape.hole(face, { diameter, depth }) — face-relative blind/through holes with counterbore/countersink/thread support` |
131
+ | `lib.counterbore()` | `shape.hole(face, { diameter: holeDia, counterbore: { diameter: boreDia, depth: boreDepth } }) — through by default; pass depth for blind holes` |
132
+ | `lib.hexNut()` | `lib.nut(holeDia, { acrossFlats, height, boreDiameter: holeDia }) — exact same geometry` |
133
+ | `lib.sideGear()` | `lib.faceGear(options) — identical arguments` |
134
+ | `lib.sideGearPair()` | `lib.faceGearPair({ face, vertical, ... }) — same options with the side member renamed to face; diagnostics use facegear.* codes` |
135
+ | `lib.gearBodyDisk()` | `lib.gearBodies.disk(options) — identical arguments` |
136
+ | `lib.gearBodyDiskWithHub()` | `lib.gearBodies.diskWithHub(options) — identical arguments` |
137
+ | `lib.gearBodySpoked()` | `lib.gearBodies.spoked(options) — identical arguments` |
138
+ | `lib.gearBodyFromProfile()` | `lib.gearBodies.fromProfile(profile, options) — identical arguments` |
139
+
140
+ ## sdf
141
+
142
+ | Old name | Use instead |
143
+ |----------|-------------|
144
+ | `combine()` | `sdf.combine(value, { op })` |
145
+ | `Sculpt.circle()` | `Sculpt.disk(radius, thickness)` |
146
+ | `Sculpt.path()` | `Sculpt.tube(points, options)` |
147
+ | `sdf.morph()` | `a.morph(b, t)` |
148
+ | `sdf.tpmsBlock()` | `sdf.gyroid({ cellSize, wallThickness }).intersect(sdf.box(x, y, z))` |
149
+ | `sdf.withinBox()` | `shape.intersect(sdf.box(x, y, z))` |
150
+ | `sdf.twist()` | `shape.twist(degreesPerUnit)` |
151
+ | `sdf.bend()` | `shape.bend(radius)` |
152
+ | `sdf.repeat()` | `shape.repeat(spacing, count)` |
153
+ | `sdf.circularArray()` | `shape.circularArray(count, offset)` |
154
+ | `SdfShape.move()` | `.at(x, y, z)` |
155
+ | `SdfShape.goop()` | `.blend(other, { radius })` |
156
+ | `SdfShape.keep()` | `.smoothIntersect(other, radius)` |
157
+ | `SdfShape.clipBox()` | `.intersect(sdf.box(x, y, z))` |
158
+ | `SdfShape.fillWith()` | `.intersect(pattern)` |
159
+ | `SdfShape.fillWithGyroid()` | `.intersect(sdf.gyroid({ cellSize, wallThickness }))` |
160
+ | `SdfShape.fillWithSchwarzP()` | `.intersect(sdf.schwarzP({ cellSize, wallThickness }))` |
161
+ | `SdfShape.fillWithDiamond()` | `.intersect(sdf.diamond({ cellSize, wallThickness }))` |
162
+ | `SdfShape.fillWithLidinoid()` | `.intersect(sdf.lidinoid({ cellSize, wallThickness }))` |