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
|
@@ -14,27 +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,
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
setInterval, setTimeout, Shape, ShapeGroup, sheetMetal, SheetMetalPart, sheetStock, Sketch
|
|
34
|
-
sketchToDxf, sketchToSvg, slot, Slot, SolvedAssembly, spec, sphere, spline2d
|
|
35
|
-
star, stroke, Surface, SurfaceBody, SurfaceMembers, surfacePatch, sweep, tabSlot
|
|
36
|
-
text2d, textWidth, torus, toShape, Transform, union, union2d, variableSweep
|
|
37
|
-
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, Sim, Sketch, sketchToDxf, sketchToSvg
|
|
30
|
+
slot, SolvedAssembly, spec, sphere, spline2d, stroke, Surface, SurfaceBody
|
|
31
|
+
SurfaceMembers, sweep, text2d, textWidth, torus, toShape, Transform, union
|
|
32
|
+
union2d, variableSweep, verify, Viewport, window, Wood
|
|
38
33
|
```
|
|
39
34
|
|
|
40
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.
|
|
@@ -9,7 +9,7 @@ Signed Distance Field modeling for organic forms, smooth booleans, TPMS lattices
|
|
|
9
9
|
|
|
10
10
|
## Contents
|
|
11
11
|
|
|
12
|
-
- [SDF Materialization](#sdf-materialization)
|
|
12
|
+
- [SDF Materialization](#sdf-materialization)
|
|
13
13
|
- [SdfShape](#sdfshape)
|
|
14
14
|
- [sdf](#sdf)
|
|
15
15
|
- [Sculpt](#sculpt)
|
|
@@ -18,14 +18,10 @@ Signed Distance Field modeling for organic forms, smooth booleans, TPMS lattices
|
|
|
18
18
|
|
|
19
19
|
### SDF Materialization
|
|
20
20
|
|
|
21
|
-
#### `toShape()` — Materialize one SDF leaf or all SDF leaves in a renderable tree.
|
|
21
|
+
#### `toShape(value: unknown, options?: SdfToShapeOptions): ToShapeTreeResult` — Materialize one SDF leaf or all SDF leaves in a renderable tree.
|
|
22
22
|
|
|
23
23
|
Raw `SdfShape` values become mesh-backed [`Shape`](/docs/core#shape)s. Plain objects and arrays preserve their renderable children as a [`ShapeGroup`](/docs/core#shapegroup) when more than one leaf is found. Non-renderable metadata is ignored for materialization and remains available to callers through normal [`require()`](/docs/core#require) return values.
|
|
24
24
|
|
|
25
|
-
```ts
|
|
26
|
-
toShape(value: unknown, options?: SdfToShapeOptions): ToShapeTreeResult
|
|
27
|
-
```
|
|
28
|
-
|
|
29
25
|
**`SdfToShapeOptions`**
|
|
30
26
|
|
|
31
27
|
| Option | Type | Description |
|
|
@@ -36,21 +32,11 @@ toShape(value: unknown, options?: SdfToShapeOptions): ToShapeTreeResult
|
|
|
36
32
|
| `tolerance?` | `number` | Preferred absolute surface tolerance in millimeters. |
|
|
37
33
|
| `minFeatureSize?` | `number` | Smallest feature that should survive meshing, in millimeters. |
|
|
38
34
|
| `simplify?` | `boolean \| "safe"` | Simplification control. `false` disables, `true` and `'safe'` use topology-validated simplification. |
|
|
39
|
-
| `maxTriangles?` | `number` | Optional post-extraction triangle budget. |
|
|
35
|
+
| `maxTriangles?` | `number` | Optional post-extraction triangle budget. Fractional values are floored for compatibility. |
|
|
40
36
|
| `maxGridPoints?` | `number` | Optional pre-extraction grid-point budget. Default is browser-safe. |
|
|
41
37
|
| `minEdgeLength?` | `number` | Lower clamp for resolved edge length. Default: 0.15mm. |
|
|
42
38
|
| `diagnostics?` | `boolean` | Log resolved meshing settings and backend extraction timings. |
|
|
43
39
|
|
|
44
|
-
#### `combine()` — Collapse a tree of SDF leaves into one continuous SDF field.
|
|
45
|
-
|
|
46
|
-
This intentionally discards per-leaf color/material identity because the result is one scalar field. Use plain object returns for multi-material SDF preview, and use `combine(...)` only when you want one implicit body.
|
|
47
|
-
|
|
48
|
-
```ts
|
|
49
|
-
combine(value: unknown, options?: CombineOptions): SdfShape
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
`CombineOptions`: `{ op?: "union" | "intersection" }`
|
|
53
|
-
|
|
54
40
|
---
|
|
55
41
|
|
|
56
42
|
## Classes
|
|
@@ -59,288 +45,107 @@ combine(value: unknown, options?: CombineOptions): SdfShape
|
|
|
59
45
|
|
|
60
46
|
An immutable SDF expression. Supports SDF-specific operations (smooth booleans, domain warps, etc.), can be returned directly for native preview, and converts to a ForgeCAD Shape via `.toShape()` when materialization is needed.
|
|
61
47
|
|
|
62
|
-
#### `colorHex()` — Display color carried by this implicit leaf.
|
|
48
|
+
#### `get colorHex(): string | undefined` — Display color carried by this implicit leaf.
|
|
63
49
|
|
|
64
|
-
|
|
65
|
-
get colorHex(): string | undefined
|
|
66
|
-
```
|
|
50
|
+
#### `get materialProps(): ShapeMaterialProps | undefined` — Display material carried by this implicit leaf.
|
|
67
51
|
|
|
68
|
-
#### `
|
|
52
|
+
#### `get explicitBounds(): SdfBounds | undefined` — Explicit bounds carried by this implicit leaf, if any.
|
|
69
53
|
|
|
70
|
-
|
|
71
|
-
get materialProps(): ShapeMaterialProps | undefined
|
|
72
|
-
```
|
|
54
|
+
#### `clone(): SdfShape` — Clone this SDF expression and its visual metadata.
|
|
73
55
|
|
|
74
|
-
#### `
|
|
56
|
+
#### `toShape(options?: SdfToShapeOptions): Shape` — Mesh this SDF into a ForgeCAD Shape through ForgeCAD's Surface Nets pipeline. Once converted, the result is a regular Shape — booleans, transforms, export all work.
|
|
75
57
|
|
|
76
|
-
|
|
77
|
-
get explicitBounds(): SdfBounds | undefined
|
|
78
|
-
```
|
|
58
|
+
#### `color(value: string | undefined): SdfShape` — Set the display color for this implicit leaf.
|
|
79
59
|
|
|
80
|
-
#### `
|
|
60
|
+
#### `material(props: ShapeMaterialProps): SdfShape` — Set PBR display material properties for this implicit leaf.
|
|
81
61
|
|
|
82
|
-
|
|
83
|
-
clone(): SdfShape
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
#### `toShape()` — Mesh this SDF into a ForgeCAD Shape through ForgeCAD's Surface Nets pipeline. Once converted, the result is a regular Shape — booleans, transforms, export all work.
|
|
87
|
-
|
|
88
|
-
```ts
|
|
89
|
-
toShape(options?: SdfToShapeOptions): Shape
|
|
90
|
-
```
|
|
62
|
+
`ShapeMaterialProps` — defined in [core](/docs/core).
|
|
91
63
|
|
|
92
|
-
#### `
|
|
93
|
-
|
|
94
|
-
```ts
|
|
95
|
-
color(value: string | undefined): SdfShape
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
#### `material()` — Set PBR display material properties for this implicit leaf.
|
|
99
|
-
|
|
100
|
-
```ts
|
|
101
|
-
material(props: ShapeMaterialProps): SdfShape
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
**`ShapeMaterialProps`**
|
|
105
|
-
|
|
106
|
-
| Option | Type | Description |
|
|
107
|
-
|--------|------|-------------|
|
|
108
|
-
| `metalness?` | `number` | Metalness factor (0 = dielectric, 1 = metal). Default: 0.05 |
|
|
109
|
-
| `roughness?` | `number` | Roughness factor (0 = mirror, 1 = fully diffuse). Default: 0.35 |
|
|
110
|
-
| `emissive?` | `string` | Emissive glow color (hex string, e.g. "#ff6b35"). |
|
|
111
|
-
| `emissiveIntensity?` | `number` | Emissive intensity multiplier. Default: 1 |
|
|
112
|
-
| `opacity?` | `number` | Opacity (0 = fully transparent, 1 = fully opaque). Default: 1 |
|
|
113
|
-
| `wireframe?` | `boolean` | Render as wireframe. Default: false |
|
|
114
|
-
| `clearcoat?` | `number` | Clearcoat intensity (0–1). Default: 0.1 |
|
|
115
|
-
| `clearcoatRoughness?` | `number` | Clearcoat roughness (0–1). Default: 0.4 |
|
|
116
|
-
| `transmission?` | `number` | Glass/translucency transmission factor (0–1). Renderer support depends on target. |
|
|
117
|
-
| `ior?` | `number` | Index of refraction for transmissive materials. Typical glass is ~1.45. |
|
|
118
|
-
| `thickness?` | `number` | Approximate transmissive volume thickness in model units. |
|
|
119
|
-
| `specularIntensity?` | `number` | Specular highlight intensity (0–1). |
|
|
120
|
-
| `specularColor?` | `string` | Specular highlight tint. |
|
|
121
|
-
| `reflectivity?` | `number` | Reflection strength for supported renderers (0–1). |
|
|
122
|
-
|
|
123
|
-
#### `bounds()` — Set explicit preview/meshing bounds for this implicit leaf.
|
|
124
|
-
|
|
125
|
-
```ts
|
|
126
|
-
bounds(bounds: SdfBounds | [ Vec3, Vec3 ]): SdfShape
|
|
127
|
-
```
|
|
64
|
+
#### `bounds(bounds: SdfBounds | [ Vec3, Vec3 ]): SdfShape` — Set explicit preview/meshing bounds for this implicit leaf.
|
|
128
65
|
|
|
129
66
|
`SdfBounds`: `{ min: Vec3, max: Vec3 }`
|
|
130
67
|
|
|
131
|
-
#### `at()` — Sculpt-style alias for translate().
|
|
132
|
-
|
|
133
|
-
```ts
|
|
134
|
-
at(x: number, y: number, z: number): SdfShape
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
#### `move()` — Sculpt-style alias for translate().
|
|
138
|
-
|
|
139
|
-
```ts
|
|
140
|
-
move(x: number, y: number, z: number): SdfShape
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
#### `spin()` — Sculpt-style alias for rotateZ().
|
|
144
|
-
|
|
145
|
-
```ts
|
|
146
|
-
spin(angleDeg: number): SdfShape
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
#### `tilt()` — Sculpt-style tilt around X, Y, Z, or a custom axis.
|
|
150
|
-
|
|
151
|
-
```ts
|
|
152
|
-
tilt(angleDeg: number, axis?: "x" | "y" | "z" | Vec3): SdfShape
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
#### `round()` — Sculpt-style rounded-box helper. Currently applies directly to primitive SDF boxes.
|
|
156
|
-
|
|
157
|
-
```ts
|
|
158
|
-
round(radius: number): SdfShape
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
#### `blend()` — Sculpt-style smooth blend with another implicit shape.
|
|
162
|
-
|
|
163
|
-
```ts
|
|
164
|
-
blend(other: SdfShape, options?: number | { radius?: number; }): SdfShape
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
#### `goop()` — Sculpt-style alias for blend().
|
|
168
|
-
|
|
169
|
-
```ts
|
|
170
|
-
goop(other: SdfShape, options?: number | { radius?: number; }): SdfShape
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
#### `carve()` — Sculpt-style smooth carve/subtract.
|
|
174
|
-
|
|
175
|
-
```ts
|
|
176
|
-
carve(other: SdfShape, options?: number | { radius?: number; }): SdfShape
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
#### `keep()` — Sculpt-style smooth intersection/keep operation.
|
|
180
|
-
|
|
181
|
-
```ts
|
|
182
|
-
keep(other: SdfShape, options?: number | { radius?: number; }): SdfShape
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
#### `polish()` — Apply a Sculpt material preset or direct material props.
|
|
186
|
-
|
|
187
|
-
```ts
|
|
188
|
-
polish(input?: SculptPolishInput): SdfShape
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
#### [`union()`](/docs/core#union) — SDF union (sharp).
|
|
192
|
-
|
|
193
|
-
```ts
|
|
194
|
-
union(...others: SdfShape[]): SdfShape
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
#### `subtract()` — SDF difference (sharp) — subtracts others from this.
|
|
198
|
-
|
|
199
|
-
```ts
|
|
200
|
-
subtract(...others: SdfShape[]): SdfShape
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
#### `intersect()` — SDF intersection (sharp).
|
|
68
|
+
#### `at(x: number, y: number, z: number): SdfShape` — Sculpt-style alias for translate().
|
|
204
69
|
|
|
205
|
-
|
|
206
|
-
intersect(...others: SdfShape[]): SdfShape
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
#### `clipBox()` — Clip this SDF to an explicit box-shaped design space.
|
|
70
|
+
#### `spin(angleDeg: number): SdfShape` — Sculpt-style alias for rotateZ().
|
|
210
71
|
|
|
211
|
-
|
|
212
|
-
clipBox(x: number, y: number, z: number): SdfShape
|
|
213
|
-
```
|
|
72
|
+
#### `tilt(angleDeg: number, axis?: "x" | "y" | "z" | Vec3): SdfShape` — Sculpt-style tilt around X, Y, Z, or a custom axis.
|
|
214
73
|
|
|
215
|
-
#### `
|
|
74
|
+
#### `round(radius: number): SdfShape` — Round all edges of a primitive box while preserving its outer dimensions. Sugar over `offset()`: the box is shrunk by `radius` on every side, then dilated back out with `offset(radius)`, which rounds every edge and corner.
|
|
216
75
|
|
|
217
|
-
|
|
218
|
-
fillWith(pattern: SdfShape): SdfShape
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
#### `fillWithGyroid()` — Keep only the gyroid lattice inside this shape.
|
|
222
|
-
|
|
223
|
-
```ts
|
|
224
|
-
fillWithGyroid(options: TpmsOptions): SdfShape
|
|
225
|
-
```
|
|
76
|
+
For any other shape, use `.offset(radius)` directly (note it grows the part by `radius`), or `Sculpt.box(x, y, z, { radius })` for a rounded box.
|
|
226
77
|
|
|
227
|
-
|
|
228
|
-
- `thickness?: number` — Dimensionless field threshold kept for compatibility. Prefer `wallThickness` for approximate millimeter units.
|
|
229
|
-
- `wallThickness?: number` — Approximate physical wall thickness in millimeters.
|
|
230
|
-
- `tpmsThicknessMode?: TpmsThicknessMode` — Override TPMS thickness interpretation. Defaults to metric when `wallThickness` is used, field-threshold when `thickness` is used.
|
|
231
|
-
- Also: `cellSize: number`
|
|
78
|
+
#### `blend(other: SdfShape, options?: number | { radius?: number; }): SdfShape` — Sculpt-style smooth blend with another implicit shape.
|
|
232
79
|
|
|
233
|
-
#### `
|
|
80
|
+
#### `carve(other: SdfShape, options?: number | { radius?: number; }): SdfShape` — Sculpt-style smooth carve/subtract.
|
|
234
81
|
|
|
235
|
-
|
|
236
|
-
fillWithSchwarzP(options: TpmsOptions): SdfShape
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
#### `fillWithDiamond()` — Keep only the diamond TPMS lattice inside this shape.
|
|
240
|
-
|
|
241
|
-
```ts
|
|
242
|
-
fillWithDiamond(options: TpmsOptions): SdfShape
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
#### `fillWithLidinoid()` — Keep only the lidinoid TPMS lattice inside this shape.
|
|
246
|
-
|
|
247
|
-
```ts
|
|
248
|
-
fillWithLidinoid(options: TpmsOptions): SdfShape
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
#### `smoothUnion()` — Smooth union — blends shapes together with a smooth radius.
|
|
252
|
-
|
|
253
|
-
```ts
|
|
254
|
-
smoothUnion(other: SdfShape, radius: number): SdfShape
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
#### `smoothSubtract()` — Smooth difference — smoothly carves other from this.
|
|
258
|
-
|
|
259
|
-
```ts
|
|
260
|
-
smoothSubtract(other: SdfShape, radius: number): SdfShape
|
|
261
|
-
```
|
|
82
|
+
#### `polish(input?: SculptPolishInput): SdfShape` — Apply a Sculpt material preset or direct material props.
|
|
262
83
|
|
|
263
|
-
#### `
|
|
84
|
+
#### `union(...others: SdfShape[]): SdfShape` — SDF union (sharp).
|
|
264
85
|
|
|
265
|
-
```
|
|
266
|
-
|
|
86
|
+
```js
|
|
87
|
+
sdf.box(20, 20, 8).union(sdf.cylinder(16, 6), sdf.sphere(7))
|
|
267
88
|
```
|
|
268
89
|
|
|
269
|
-
#### `
|
|
90
|
+
#### `subtract(...others: SdfShape[]): SdfShape` — SDF difference (sharp) — subtracts others from this.
|
|
270
91
|
|
|
271
|
-
|
|
272
|
-
morph(other: SdfShape, t: number): SdfShape
|
|
273
|
-
```
|
|
92
|
+
#### `intersect(...others: SdfShape[]): SdfShape` — SDF intersection (sharp). Also the canonical way to fill a body with a lattice or clip an infinite field to a design space:
|
|
274
93
|
|
|
275
|
-
|
|
94
|
+
```js
|
|
95
|
+
// Lattice fill — keep only the gyroid inside the body
|
|
96
|
+
sdf.sphere(18).intersect(sdf.gyroid({ cellSize: 6, wallThickness: 0.8 }))
|
|
276
97
|
|
|
277
|
-
|
|
278
|
-
|
|
98
|
+
// Clip an infinite field to a box-shaped design space
|
|
99
|
+
sdf.gyroid({ cellSize: 6, wallThickness: 0.8 }).intersect(sdf.box(40, 25, 16))
|
|
279
100
|
```
|
|
280
101
|
|
|
281
|
-
#### `
|
|
102
|
+
#### `smoothUnion(other: SdfShape, radius: number): SdfShape` — Smooth union — blends shapes together with a smooth radius.
|
|
282
103
|
|
|
283
|
-
|
|
284
|
-
rotate(axis: [ number, number, number ], angleDeg: number): SdfShape
|
|
285
|
-
```
|
|
104
|
+
#### `smoothSubtract(other: SdfShape, radius: number): SdfShape` — Smooth difference — smoothly carves other from this.
|
|
286
105
|
|
|
287
|
-
#### `
|
|
106
|
+
#### `smoothIntersect(other: SdfShape, radius: number): SdfShape` — Smooth intersection — smoothly intersects.
|
|
288
107
|
|
|
289
|
-
|
|
290
|
-
rotateX(angleDeg: number): SdfShape
|
|
291
|
-
```
|
|
108
|
+
#### `morph(other: SdfShape, t: number): SdfShape` — Morph between this shape and another. t=0 → this, t=1 → other.
|
|
292
109
|
|
|
293
|
-
#### `
|
|
110
|
+
#### `translate(x: number, y: number, z: number): SdfShape` — Translate this SDF by the given offsets in millimeters.
|
|
294
111
|
|
|
295
|
-
|
|
296
|
-
rotateY(angleDeg: number): SdfShape
|
|
297
|
-
```
|
|
112
|
+
#### `rotate(axis: Vec3, angleDeg: number): SdfShape` — Rotate around an arbitrary axis through the origin.
|
|
298
113
|
|
|
299
|
-
#### `
|
|
114
|
+
#### `rotateX(angleDeg: number): SdfShape` — Rotate around the X axis by the given angle in degrees.
|
|
300
115
|
|
|
301
|
-
|
|
302
|
-
rotateZ(angleDeg: number): SdfShape
|
|
303
|
-
```
|
|
116
|
+
#### `rotateY(angleDeg: number): SdfShape` — Rotate around the Y axis by the given angle in degrees.
|
|
304
117
|
|
|
305
|
-
#### `
|
|
118
|
+
#### `rotateZ(angleDeg: number): SdfShape` — Rotate around the Z axis by the given angle in degrees.
|
|
306
119
|
|
|
307
|
-
|
|
308
|
-
scale(factor: number): SdfShape
|
|
309
|
-
```
|
|
120
|
+
#### `scale(factor: number): SdfShape` — Uniformly scale this SDF around the origin.
|
|
310
121
|
|
|
311
|
-
#### `twist()` — Twist around the Z axis.
|
|
122
|
+
#### `twist(degreesPerUnit: number): SdfShape` — Twist around the Z axis.
|
|
312
123
|
|
|
313
|
-
|
|
314
|
-
twist(degreesPerUnit: number): SdfShape
|
|
315
|
-
```
|
|
124
|
+
#### `bend(radius: number): SdfShape` — Bend around the Z axis with given radius.
|
|
316
125
|
|
|
317
|
-
#### `
|
|
126
|
+
#### `repeat(spacing: Vec3, count?: Vec3): SdfShape` — Repeat in space. Spacing of 0 on an axis means no repetition. Count of 0 = infinite.
|
|
318
127
|
|
|
319
|
-
|
|
320
|
-
bend(radius: number): SdfShape
|
|
321
|
-
```
|
|
128
|
+
#### `circularArray(count: number, offset?: number): SdfShape` — Arrange this SDF in a circular array around the Z axis.
|
|
322
129
|
|
|
323
|
-
|
|
130
|
+
The source shape is translated by `offset` in +X before arraying. This uses angular domain folding, so evaluation stays O(1): the source SDF is sampled twice no matter how many copies are requested.
|
|
324
131
|
|
|
325
|
-
|
|
326
|
-
repeat(spacing: Vec3, count?: Vec3): SdfShape
|
|
327
|
-
```
|
|
132
|
+
#### `shell(thickness: number): SdfShape` — Hollow out, keeping only a shell of given thickness.
|
|
328
133
|
|
|
329
|
-
#### `
|
|
134
|
+
#### `offset(distance: number): SdfShape` — Offset the distance field by a constant amount in millimeters.
|
|
330
135
|
|
|
331
|
-
|
|
136
|
+
Positive `distance` dilates: every surface moves outward by `distance`, which rounds convex edges and corners — and grows the part by `distance`. Negative `distance` erodes: surfaces move inward, shrinking the part and thinning walls. This is the canonical SDF field offset (`d − distance`) and works on ANY implicit shape — sharp booleans, TPMS lattices, `sdf.fromFunction()` fields — not just primitives.
|
|
332
137
|
|
|
333
|
-
|
|
334
|
-
circularArray(count: number, offset?: number): SdfShape
|
|
335
|
-
```
|
|
138
|
+
Like `shell()`, the result is approximate on fields that are not exact distance fields (for example after `twist()`, `bend()`, or smooth booleans).
|
|
336
139
|
|
|
337
|
-
|
|
140
|
+
```js
|
|
141
|
+
// Round every edge of a sharp union by 2mm (grows the part by 2mm)
|
|
142
|
+
sdf.box(20, 20, 8).union(sdf.cylinder(16, 6)).offset(2)
|
|
338
143
|
|
|
339
|
-
|
|
340
|
-
|
|
144
|
+
// Erode a lattice by 0.2mm to compensate printed over-extrusion
|
|
145
|
+
sdf.sphere(18).intersect(sdf.gyroid({ cellSize: 6, wallThickness: 1.2 })).offset(-0.2)
|
|
341
146
|
```
|
|
342
147
|
|
|
343
|
-
#### `displace()` — Displace the surface by a function of position, or by a pattern SdfShape.
|
|
148
|
+
#### `displace(fn: ((x: number, y: number, z: number) => number) | SdfShape, constants?: Record<string, number>): SdfShape` — Displace the surface by a function of position, or by a pattern SdfShape.
|
|
344
149
|
|
|
345
150
|
```js
|
|
346
151
|
// Function displacement
|
|
@@ -350,11 +155,7 @@ shape.displace((x, y, z) => Math.sin(x) * 0.5)
|
|
|
350
155
|
shape.displace(sdf.knurl({ pitch: 2, depth: 0.3 }))
|
|
351
156
|
```
|
|
352
157
|
|
|
353
|
-
|
|
354
|
-
displace(fn: ((x: number, y: number, z: number) => number) | SdfShape, constants?: Record<string, number>): SdfShape
|
|
355
|
-
```
|
|
356
|
-
|
|
357
|
-
#### `surfaceDisplace()` — Displace the surface using a 2D pattern in surface-local UV coordinates.
|
|
158
|
+
#### `surfaceDisplace(pattern: SurfacePattern | ((u: number, v: number) => number), options?: SurfaceDisplaceOptions): SdfShape` — Displace the surface using a 2D pattern in surface-local UV coordinates.
|
|
358
159
|
|
|
359
160
|
Automatically detects the shape's UV parametrization (sphere, cylinder, torus) from the SDF tree. Falls back to triplanar mapping for arbitrary shapes.
|
|
360
161
|
|
|
@@ -376,19 +177,11 @@ sdf.sphere(27).shell(3)
|
|
|
376
177
|
shape.surfaceDisplace((u, v) => -Math.sin(u * 2) * 0.3)
|
|
377
178
|
```
|
|
378
179
|
|
|
379
|
-
```ts
|
|
380
|
-
surfaceDisplace(pattern: SurfacePattern | ((u: number, v: number) => number), options?: SurfaceDisplaceOptions): SdfShape
|
|
381
|
-
```
|
|
382
|
-
|
|
383
180
|
**`SurfaceDisplaceOptions`**
|
|
384
181
|
- `uv?: "auto" | "sphere" | "cylinder" | "torus" | "triplanar"` — Override auto-detected UV mode. Default: 'auto' (detects from SDF tree).
|
|
385
182
|
- `triplanarSharpness?: number` — Triplanar blend sharpness — higher = crisper transitions. Default: 4. Only used in triplanar mode.
|
|
386
183
|
|
|
387
|
-
#### `onion()` — Create concentric onion layers.
|
|
388
|
-
|
|
389
|
-
```ts
|
|
390
|
-
onion(layers: number, thickness: number): SdfShape
|
|
391
|
-
```
|
|
184
|
+
#### `onion(layers: number, thickness: number): SdfShape` — Create concentric onion layers.
|
|
392
185
|
|
|
393
186
|
---
|
|
394
187
|
|
|
@@ -398,20 +191,13 @@ onion(layers: number, thickness: number): SdfShape
|
|
|
398
191
|
|
|
399
192
|
SDF modeling — signed distance field primitives, smooth booleans, TPMS lattices, domain warps, and surface patterns.
|
|
400
193
|
|
|
401
|
-
Return `SdfShape` values directly from a
|
|
402
|
-
|
|
403
|
-
Call `.toShape()` or `toShape(...)` only when you need a mesh-backed ForgeCAD Shape for export, mesh booleans, or mixed SDF/manifold projects. All shapes live as a lazy expression tree until that materialization boundary.
|
|
404
|
-
|
|
405
|
-
SDF is inherently implicit and sampled, not B-rep/exact geometry. Use it with caution when precision, tolerances, or exact export matter.
|
|
194
|
+
Return `SdfShape` values directly from a script for native raymarch preview; plain objects and arrays of SDF leaves render too (object keys become named preview parts). Shapes live as a lazy expression tree — call `.toShape()` / `toShape(...)` only at the materialization boundary: export, mesh booleans, or mixed SDF/manifold projects.
|
|
406
195
|
|
|
407
|
-
|
|
408
|
-
return sdf.smoothUnion(sdf.sphere(10), sdf.box(15, 15, 15), { radius: 3 })
|
|
409
|
-
.color('#4488cc');
|
|
410
|
-
```
|
|
196
|
+
SDF geometry is implicit and sampled, not B-rep/exact. Use with caution when precision, tolerances, or exact export matter.
|
|
411
197
|
|
|
412
198
|
```js
|
|
413
199
|
return {
|
|
414
|
-
shell: sdf.sphere(
|
|
200
|
+
shell: sdf.smoothUnion(sdf.sphere(10), sdf.box(15, 15, 15), { radius: 3 }).shell(2),
|
|
415
201
|
core: sdf.gyroid({ cellSize: 6, wallThickness: 0.8 })
|
|
416
202
|
.intersect(sdf.sphere(18))
|
|
417
203
|
.color('#ffcf5a'),
|
|
@@ -427,14 +213,11 @@ return {
|
|
|
427
213
|
- `smoothUnion(a: SdfShape, b: SdfShape, options: { radius: number; }): SdfShape` — Smooth union — blends shapes together with a smooth transition radius.
|
|
428
214
|
- `smoothDifference(a: SdfShape, b: SdfShape, options: { radius: number; }): SdfShape` — Smooth difference — smoothly subtracts b from a.
|
|
429
215
|
- `smoothIntersection(a: SdfShape, b: SdfShape, options: { radius: number; }): SdfShape` — Smooth intersection — smoothly intersects a and b.
|
|
430
|
-
- `morph(a: SdfShape, b: SdfShape, t: number): SdfShape` — Morph between two SDF shapes. t=0 → a, t=1 → b.
|
|
431
216
|
- `blend(a: SdfShape, b: SdfShape, fn: (x: number, y: number, z: number) => number, options?: BlendOptions): SdfShape` — Spatially blend between two SDF patterns. The blend function receives (x, y, z) and returns 0..1: 0 = fully pattern `a`, 1 = fully pattern `b`.
|
|
432
217
|
- `gyroid(options: TpmsOptions): SdfShape` — Gyroid TPMS lattice — the most common lattice for additive manufacturing.
|
|
433
218
|
- `schwarzP(options: TpmsOptions): SdfShape` — Schwarz-P TPMS lattice — isotropic pore structure.
|
|
434
219
|
- `diamond(options: TpmsOptions): SdfShape` — Diamond TPMS lattice — stiffest TPMS structure.
|
|
435
220
|
- `lidinoid(options: TpmsOptions): SdfShape` — Lidinoid TPMS lattice — visually distinct from gyroid, popular in research and art.
|
|
436
|
-
- `tpmsBlock(options: TpmsBlockOptions): SdfShape` — TPMS block preset clipped to an explicit design space.
|
|
437
|
-
- `withinBox(shape: SdfShape, options: { size: Vec3; }): SdfShape` — Clip an SDF shape to a box-shaped design space.
|
|
438
221
|
- `noise(options?: NoiseOptions): SdfShape` — 3D Simplex noise field — produces organic, natural-looking displacements.
|
|
439
222
|
- `voronoi(options?: VoronoiOptions): SdfShape` — 3D Voronoi pattern — organic cellular structures like bone, coral, or soap bubbles.
|
|
440
223
|
- `honeycomb(options?: HoneycombOptions): SdfShape` — Honeycomb (hexagonal) lattice pattern. Intersect with your shape to apply.
|
|
@@ -446,13 +229,16 @@ return {
|
|
|
446
229
|
- `weave(options?: WeaveOptions): SdfShape` — Grid lattice pattern — two families of infinite slabs crossing at 90°.
|
|
447
230
|
- `basketWeave(options?: BasketWeaveOptions): SurfacePattern` — Basket weave surface pattern — threads with over-under crossings in UV space. Returns a SurfacePattern for use with `.surfaceDisplace()`.
|
|
448
231
|
- `pattern2d(): Pattern2DBuilder` — Create typed, composable 2D surface patterns for `.surfaceDisplace()`.
|
|
449
|
-
- `twist(shape: SdfShape, degreesPerUnit: number): SdfShape` — Twist an SDF shape around the Z axis.
|
|
450
|
-
- `bend(shape: SdfShape, radius: number): SdfShape` — Bend an SDF shape around the Z axis.
|
|
451
|
-
- `repeat(shape: SdfShape, spacing: Vec3, count?: Vec3): SdfShape` — Repeat an SDF shape in space.
|
|
452
|
-
- `circularArray(shape: SdfShape, count: number, offset?: number): SdfShape` — Arrange an SDF shape in a circular array around the Z axis with O(1) folded-domain evaluation.
|
|
453
232
|
- `SurfacePattern: typeof SurfacePattern` — A 2D surface pattern — a heightmap function for use with `.surfaceDisplace()`.
|
|
454
233
|
- `fromFunction(fn: SdfFunctionSource, options: SdfFunctionOptions): SdfShape` — Create a custom SDF from one expression; shader-safe expressions raymarch directly.
|
|
455
|
-
- `
|
|
234
|
+
- `combine(value: unknown, options?: CombineOptions): SdfShape` — Collapse a plain object/array tree of SDF leaves into one continuous implicit field. Per-leaf color/material identity is intentionally discarded — the result is one scalar field. Use plain object returns for multi-material SDF preview, and `sdf.combine(...)` only when you want one implicit body. Explicit shape lists are covered by `a.union(b, c)`; pass `{ op: 'intersection' }` to intersect instead.
|
|
235
|
+
|
|
236
|
+
```js
|
|
237
|
+
// Built a part as a named tree for preview, now need one field to shell:
|
|
238
|
+
const parts = { body: sdf.box(40, 30, 12), boss: sdf.cylinder(10, 8) };
|
|
239
|
+
return sdf.combine(parts).shell(1.2);
|
|
240
|
+
```
|
|
241
|
+
- `Sculpt: { ... }` — Sculpt-like facade: friendly liquid-modeling verbs backed by the same SDF kernel. See [`Sculpt`](#sculpt).
|
|
456
242
|
|
|
457
243
|
### `Sculpt`
|
|
458
244
|
|
|
@@ -460,13 +246,11 @@ return {
|
|
|
460
246
|
- `box(x: number, y: number, z: number, options?: SculptBoxOptions): SdfShape` — Create a liquid SDF box; pass `{ radius }` for a rounded box.
|
|
461
247
|
- `cylinder(height: number, radius: number): SdfShape` — Create a liquid SDF cylinder centered at the origin, axis along Z.
|
|
462
248
|
- `disk(radius: number, thickness?: number): SdfShape` — Create a thin circular disk centered at the origin, axis along Z. Useful as a circular cutter or insert.
|
|
463
|
-
- `circle(radius: number, thickness?: number): SdfShape` — Alias for `Sculpt.disk()`.
|
|
464
249
|
- `capsule(height: number, radius: number): SdfShape` — Create a liquid SDF capsule centered at the origin, axis along Z.
|
|
465
250
|
- `torus(majorRadius: number, minorRadius: number): SdfShape` — Create a liquid SDF torus lying in the XY plane.
|
|
466
251
|
- `cone(height: number, radius: number): SdfShape` — Create a liquid SDF cone.
|
|
467
252
|
- `tube(points: SculptPointList, options?: SculptTubeOptions): SdfShape` — Create a smooth tube through a list of 3D points.
|
|
468
253
|
- `curve(points: SculptPointList, options?: SculptTubeOptions): SdfShape` — Create a smooth variable-thickness sweep through 3D control points.
|
|
469
|
-
- `path(points: SculptPointList, options?: SculptTubeOptions): SdfShape` — Alias for `Sculpt.tube()`; points may use [x, y, z, radius] for variable thickness.
|
|
470
254
|
- `blend(first?: SculptBlendArg, optionsOrShape?: SculptBlendArg, ...rest: SculptBlendArg[]): SdfShape` — Smoothly blend one or more SDF shapes into a continuous body.
|
|
471
255
|
- `union(first?: SculptBlendInput, ...rest: SculptBlendInput[]): SdfShape` — Sharply union one or more SDF shapes.
|
|
472
256
|
- `carve(base: SdfShape, cutters: SculptBlendInput, options?: SculptBlendOptions): SdfShape` — Smoothly subtract one or more cutter shapes from a base shape.
|