Record ownership transfers in the timeline so earlier Join/Cut membership, world placement, machining data and styles survive component moves, edits, independent copying, undo and reopening. Preserve pending positions in history snapshots and keep constructor transfers ordered during feature redefinition. Retain shallow sheet pockets and exact planar intersection islands through unfold/refold, with depth-aware flat previews and DXF export. Store explicit 3D wire coordinate spaces and migrate known legacy provenance without moving saved points or analytic fits. Infer unique eligible cylindrical Emboss targets, align Revolve manipulators with actual extent geometry, and discard obsolete preview errors after input correction. Certify constructed and immutable imported face styles using exact source metadata while preserving legacy face names. Upgrade designs to format10 with bounded validation and geometry-preserving legacy migration.
128 lines
7.7 KiB
Markdown
128 lines
7.7 KiB
Markdown
# SolveCraft
|
||
|
||
**Parametric 3D CAD; an open-source, [clean-room](CLAUDE.md) reimplementation of Autodesk
|
||
Fusion 360, built in pure Rust.**
|
||
|
||
Sketch, constrain, and build solids with a parametric feature timeline. Change a dimension
|
||
and watch your model rebuild. Run it on your desktop, in your browser, or let AI agents
|
||
model through the built-in MCP server. Part of the storytold "craft" family.
|
||
|
||

|
||
|
||
*An agent builds an electronics enclosure over MCP: sketches on faces, shell, a port cut, one screw boss patterned to four, then width 80 → 100 mm in the Parameters dialog and the timeline rebuilds. 3× speed; [full video](https://github.com/bherbruck/solvecraft/releases/download/v0.1.0/enclosure-demo-v3.mp4), script in [examples/demo](examples/demo).*
|
||
|
||
**Documentation:** the [SolveCraft book](https://bherbruck.github.io/solvecraft/) (user guide,
|
||
developer guide and command reference; sources in [docs/book](docs/book)), and the
|
||
[web app](https://bherbruck.github.io/solvecraft/app/) to try it in the browser.
|
||
|
||
**Status: early but usable for simple parts.** 76 of 76 reference parts built in Fusion
|
||
rebuild in SolveCraft with the same volume, area and topology ([docs/oracle.md](docs/oracle.md));
|
||
command parity with Fusion's Design workspace is tracked in [docs/parity.md](docs/parity.md).
|
||
Open work and known bugs are in [GitHub issues](https://github.com/bherbruck/solvecraft/issues),
|
||
and help is welcome: see [CONTRIBUTING.md](CONTRIBUTING.md).
|
||
|
||
## What works
|
||
|
||
- **Sketches** on origin planes, offset planes or planar faces: lines, rectangles, circles,
|
||
arcs, polygons, slots, ellipses, fit/control splines, conics and text; construction geometry,
|
||
projection, trimming, fillets and chamfers, including corners at the origin.
|
||
- **Constraints and dimensions** solved by our own solver (damped Gauss–Newton with
|
||
degree-of-freedom analysis): coincident, horizontal/vertical, parallel, perpendicular, tangent,
|
||
equal, concentric, collinear, midpoint, symmetry, fix; linear, aligned, horizontal, vertical,
|
||
radius, diameter and angle dimensions driven by parameters. Over-constraining edits are
|
||
rejected; fully constrained geometry turns black.
|
||
- **Profiles** found automatically, including regions split by lines and holes inside outlines.
|
||
- **Features** on a parametric timeline: extrude, revolve, sweep, loft, fillet/chamfer,
|
||
shell, draft, holes, threads, patterns, mirror, split, combine, move and construction geometry.
|
||
The timeline rebuilds incrementally; features can be edited, suppressed, renamed, reordered
|
||
and deleted. Supported geometry and current limitations are described in [ROADMAP.md](ROADMAP.md).
|
||
- **Parameters and configurations** with unit-aware expressions (`2 * width + 5 mm`,
|
||
`angle / 2`), ordered rules, feature suppression and per-row body materials/appearances.
|
||
- **Assemblies** with nested components and occurrences, joints, motion studies, contact sets,
|
||
interference and material-aware mass properties. Recorded body transfers preserve modelling
|
||
history and world placement; 3D sketch wires retain their coordinate frames through edits.
|
||
- **Sheet metal** with flanges, hems, fold/unfold/refold, material cutouts, flat patterns,
|
||
retained shallow prismatic pockets, exact line/arc/circle DXF outlines and bend tables;
|
||
plastic enclosure features and rules. Pocket depth and side survive unfold/refold and appear
|
||
separately from through-hole outlines in the flat preview and DXF.
|
||
- **Files**: designs as JSON (`.solvecraft`), export to STEP (AP242 with body names, colours and
|
||
components as assemblies; revolved faces as native planes, cylinders, cones, spheres and tori),
|
||
IGES 5.3 (manifold solid B-reps with names and colours), 3MF, STL (binary/ASCII) and OBJ;
|
||
3MF, STL and OBJ import as mesh bodies (they render, measure, move and export; solid features
|
||
need B-rep bodies);
|
||
STEP import (AP203/AP214/AP242 solids, assemblies, units, names, colours) and IGES import
|
||
(manifold solid B-reps, or trimmed and bounded surfaces sewn into solids) as a base feature
|
||
that later features build on — open a `.step`/`.stp`/`.igs`/`.iges` file, insert one into a
|
||
design, or drop it on the window ([docs/step-import.md](docs/step-import.md)).
|
||
- **Desktop app** (egui + wgpu): toolbar with workspace tabs, browser, timeline, 3D viewport with
|
||
view cube and navigation bar, sketch tools, feature dialogs, command palette, and a JSON-lines
|
||
control channel so agents and tests can drive it.
|
||
- **Headless CLI** `solvecraft-cli`: run command scripts, measure (volume, area, centre of mass,
|
||
face/edge/vertex counts), export, render PNG snapshots, replay Fusion oracle recipes.
|
||
- **MCP server** `solvecraft-cli mcp`: AI agents model, measure and look at parts headless or
|
||
in the running app (see below).
|
||
|
||
## Build and run
|
||
|
||
```sh
|
||
cargo run --release -p solvecraft -- --sample # desktop app with a sample part
|
||
cargo run --release -p solvecraft-cli -- commands # the command registry
|
||
cargo run --release -p solvecraft-cli -- run examples/bracket.json --out bracket.step
|
||
cargo run --release -p solvecraft-cli -- snapshot examples/bracket.json --out bracket.png
|
||
cargo run --release -p solvecraft -- part.step # open a STEP file as a new design
|
||
cargo run --release -p solvecraft-cli -- eval part.step # measure an imported STEP file
|
||
cargo xtask ci # fmt, clippy, tests, assets, layers, wasm
|
||
```
|
||
|
||
Windows builds: `cargo xwin build --release --target x86_64-pc-windows-msvc -p solvecraft`.
|
||
|
||
In the browser: `cd apps/solvecraft-web && trunk build --release --public-url ./` (WebGPU, or
|
||
WebGL2 with `?webgl`; `?sample` opens the sample part).
|
||
|
||
## Scripts
|
||
|
||
A script is a JSON list of commands, the same ones the UI runs:
|
||
|
||
```json
|
||
{"commands": [
|
||
{"command": "sketch.create", "params": {"plane": "XY"}},
|
||
{"command": "sketch.rectangle.two_point", "params": {"p0": [0, 0], "p1": [40, 30]}},
|
||
{"command": "solid.extrude", "params": {"distance": 20}},
|
||
{"command": "solid.fillet", "params": {"edges": [[0, 0, 10]], "radius": 3}}
|
||
]}
|
||
```
|
||
|
||
## AI agents (MCP)
|
||
|
||
`solvecraft-cli mcp` is a [Model Context Protocol](https://modelcontextprotocol.io) server on
|
||
stdio. Headless it runs its own design session; with `--connect 127.0.0.1:PORT` it drives the app
|
||
started with `solvecraft --control PORT`, so you can watch the agent model. Tools:
|
||
`list_commands`, `execute`, `batch`, `inspect_design`, `measure`, `body_topology`,
|
||
`set_parameter`, `screenshot` (returns the image), `export`, `undo`, `redo`, `new_design`, `open`,
|
||
`save`. Claude Code: `claude mcp add solvecraft -- solvecraft-cli mcp`. Details, client
|
||
configuration and an example session: [docs/mcp.md](docs/mcp.md).
|
||
|
||
## Architecture
|
||
|
||
<!-- ANCHOR: architecture -->
|
||
| Layer | Crates | Role |
|
||
|---|---|---|
|
||
| L0 | `geom` | vectors, planes, profiles, meshes and their measures |
|
||
| L1 | `sketch`, `kernel`, `render` | constraint solver and profiles; the B-rep kernel boundary (truck); view math and CPU rasterizer |
|
||
| L2 | `doc` | parameters, expressions, the feature timeline and its incremental evaluation |
|
||
| L3 | `io` | design files, STL/OBJ/STEP/3MF export, STEP and 3MF/STL import features |
|
||
| L4 | `engine` | the session and the command registry (everything is a command) |
|
||
| L5 | `ui-egui`, `mcp` | the swappable desktop front end; the MCP server (headless or bridged to the app) |
|
||
| apps | `solvecraft`, `solvecraft-cli` | desktop app, headless CLI |
|
||
<!-- ANCHOR_END: architecture -->
|
||
|
||
## Contributing
|
||
|
||
See [CONTRIBUTING.md](CONTRIBUTING.md): how to build and test, the code map, the clean-room
|
||
and licence rules, and where help is wanted most.
|
||
|
||
## Licence
|
||
|
||
MIT OR Apache-2.0, at your option. SolveCraft is not affiliated with Autodesk; Fusion is a
|
||
trademark of Autodesk, Inc.
|