Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
b156f0a
feat(core): read and subset TrueType fonts, with DejaVu moved into core
havan Nov 13, 2026
b38b33f
feat(core): a dependency-free PDF writer with embedded Unicode text
havan Nov 13, 2026
f4cfeaf
feat(core): lengths as text, metric first with imperial beside it
havan Nov 13, 2026
abbe223
feat(core): a drawing sheet with single-page PDF, SVG and DXF writers
havan Nov 13, 2026
498a48c
feat(core): full-size patterns tiled over ordinary paper
havan Nov 13, 2026
28fad9e
fix(core): closed section loops keep every point and are all reported…
havan Nov 13, 2026
8c03259
feat(core): station moulds with skin thickness deducted
havan Nov 13, 2026
33dbba2
fix(core): slivers in line with a side stay inside the corner's mitre
havan Nov 13, 2026
30f5460
feat(core): profile and transom patterns, and the set a front end exp…
havan Nov 13, 2026
afdcd27
feat(core): the table of offsets as a printable PDF
havan Nov 13, 2026
7829b43
feat(cli): seacraft templates, and offsets --pdf
havan Nov 13, 2026
885306e
feat(gui): export the table of offsets as a PDF, from the File menu a…
havan Nov 13, 2026
8d4cbfa
feat(gui): builder templates window, previewed on a job and exported …
havan Nov 13, 2026
cb269a2
feat(gui): build.templates on the control channel, and ui.set opens t…
havan Nov 13, 2026
f019a8a
feat(gui): model.export's offsets_pdf takes the table's stations, ste…
havan Nov 13, 2026
7a9ea5b
feat(mcp): export_templates and export_offsets_pdf, headless and conn…
havan Nov 13, 2026
6274879
docs(skills): a boatbuilding skill for full-size patterns over MCP
havan Nov 13, 2026
076491c
fix(core): a segment the skin consumes at a corner is dropped, not re…
havan Nov 13, 2026
d4392a3
docs(oracles): moulds, transom, printed size, imperial readings and t…
havan Nov 13, 2026
2a40d96
docs: a builder's guide to the patterns, and the README sections for …
havan Nov 13, 2026
64e40d7
docs: building patterns, their oracles and what has not been checked
havan Nov 13, 2026
443d763
fix(gui): the export dialog no longer shares its id with the Builder …
havan Nov 13, 2026
80b7968
fix(core): a sharp corner keeps its whole mitre when the skin comes off
havan Nov 14, 2026
117084f
fix(core): a section the skin closes to nothing is reported, not cut …
havan Nov 14, 2026
6b00dae
fix(core): the profile numbers each station line as its mould sheet i…
havan Nov 14, 2026
c6b9a25
fix(core): a section narrowing both ways says which mould face to bevel
havan Nov 14, 2026
f70d0d0
fix(core): SVG and DXF patterns make room for the whole of each label
havan Nov 14, 2026
6ce56b2
fix(core): a label prints every tile its letters reach, not only its …
havan Nov 14, 2026
0fce749
fix(cli): offsets --json keeps the standard output to the JSON table
havan Nov 14, 2026
b84a6bf
fix(gui): a station list that does not read stops the templates export
havan Nov 14, 2026
70b11a8
docs: the offsets table matches a pattern's hull line, and the cylind…
havan Nov 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,35 @@

Versions follow [semantic versioning](https://semver.org/), with `0.x` meaning that anything may change.

## Unreleased

- Builder patterns: `seacraft templates hull.fef -o moulds.pdf --skin-mm 6` cuts full-size station moulds from the
refined hull, moved in by the skin thickness along the surface normal, with the mould face that goes on the
station line, the largest bevel, waterlines, the design waterline and optional strongback legs or half moulds.
`--profile` adds the backbone and `--transom X,RAKE` a raked transom drawn true in its own plane. A PDF is tiled
over A4, A3, Letter or any paper size with join marks, a map page and two 100 mm check rules, or put one pattern
on each page (`--single-page`); `.svg` and `.dxf` (millimetres, layered) give one drawing. The patterns are
checked against closed-form shapes (cylinder, cone, box, raked plane) and against poppler's rendering of the
PDF (100 mm drew as 1000 px at 254 dpi). Nobody has printed and measured a set yet, and the PDFs have not been
opened on Windows or macOS. [`docs/building.md`](docs/building.md) is the builder's guide.
- `seacraft offsets --pdf offsets.pdf [--imperial]` prints the table of offsets in millimetres above the keel, and
with `--imperial` the same tables in feet-inches-eighths.
- `seacraft offsets --json` keeps its standard output to the JSON table when it also writes `--pdf`, `--html` or
`--csv`: the "wrote" lines now go to standard error.
- GUI: File ▸ Builder templates… previews the page count on a background job and exports the patterns; File ▸
Export ▸ Offsets table PDF…. The control channel gains `build.templates`, `model.export` format `offsets_pdf`
(with `stations`, `waterline_steps`, `buttock_steps`, `level`, `imperial`) and `ui.set` `templates`.
- MCP: `export_templates` and `export_offsets_pdf`, headless and connected, and a `seacraft-boatbuilding` skill
that has the agent ask for the skin thickness and relay every warning.
- The DejaVu fonts moved into the core crate; PDFs embed a subset of DejaVu Sans. No change to the GUI's text.
- Fix: cutting a hull into sections lost the last point of the first closed loop and could report a later loop as
open. This changes computed numbers where a section has closed loops. On the example hulls: the Wigley hull's
midship section area and midship coefficient rise 9.5 % (Cm 0.6066 to 0.6639; the Wigley form's own value is
2/3) and its prismatic coefficient falls 8.6 % (0.7286 to 0.6656, also 2/3 for the form); the demo hull's
section area at its transom falls 1.0 %, so `seacraft sac` gives Cp 0.7097 instead of 0.7029. Every other
quantity `hydro` and `sac` report for the seven example hulls moved by less than 0.01 %, and the demo-hull
reference numbers checked in CI did not change.

## 0.3.0 (2026-11-13)

0.3.0-beta.1 with one fix:
Expand Down
5 changes: 5 additions & 0 deletions DISCLAIMER.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@ own earlier output to catch changes. [`docs/oracles.md`](docs/oracles.md) says w
from. Passing those tests shows that the code agrees with those cases, not that its results are right
for a real vessel.

Building patterns (station moulds, profile and transom) and the printed table of offsets are geometry the
program computed from the hull. They have not been compared with a built boat, and no printed set has been
measured. A builder must print at 100 %, measure the printed calibration rules, and check dimensions against
the design before cutting anything.

Results can be wrong, including results that look plausible. A qualified person must check them
independently before anyone relies on them for a design, construction, operating or safety decision.

Expand Down
12 changes: 7 additions & 5 deletions NOTICE
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,13 @@ from solidcore's crates/solidcore/src/nurbs/srf_fit.rs, licensed under the Apach
the Apache License, Version 2.0, except where otherwise noted.

Fonts
The desktop GUI embeds DejaVu Sans and DejaVu Sans Mono 2.37, unmodified, from
crates/seacraft-gui/assets/fonts. They are not under the GPL. Bitstream Vera Fonts: Copyright (c)
2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc. Arev
Fonts: Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. DejaVu changes are in the public
domain. The licence is in crates/seacraft-gui/assets/fonts/LICENSE-DejaVu.txt.
The program embeds DejaVu Sans and DejaVu Sans Mono 2.37 from crates/seacraft-core/assets/fonts. The
desktop GUI uses them unmodified. PDF exports embed a subset of DejaVu Sans: the glyphs the document
uses, with the font's own name table and copyright notice. They are not under the GPL. Bitstream
Vera Fonts: Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark
of Bitstream, Inc. Arev Fonts: Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. DejaVu
changes are in the public domain. The licence is in crates/seacraft-core/assets/fonts/LICENSE-
DejaVu.txt.

Dependencies
Dependency licences are in THIRD-PARTY-LICENSES.txt: a list in this repository, and the full texts
Expand Down
32 changes: 30 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -569,6 +569,26 @@ surfaces (entity 128) across the resampled starboard and port station curves,
and `export::threemf` (`-o hull.3mf`) writes a welded, watertight 3MF 1.3
archive in metres.

### Building patterns

`seacraft templates` cuts full-size station moulds from the refined hull, and
optionally the profile (backbone) and a raked transom drawn true in its own
plane. Each section is moved inward by the skin thickness (`--skin-mm`), by
`t / cos α` where the hull meets the plane at α off square, so the outside of
the planking lands on the designed surface; a piece of the section the skin
consumes at a corner is dropped, as an inward offset does. Each sheet names the
face of the mould that goes on the station line, the largest bevel and the
longest straight piece of mesh, and can carry strongback legs, waterlines and
the design waterline. The PDF writer is the project's own (no dependency): it
tiles a pattern over A4, A3 or Letter with join marks, a map page and two
100 mm check rules, or puts one pattern on each page for a plotter; SVG and DXF
(millimetres, `CUT`/`MARK`/`REFERENCE`/`TEXT` layers) are one drawing.
`seacraft offsets --pdf` prints the table of offsets in millimetres, with
feet-inches-eighths beside it on `--imperial`. The desktop app has the same
under File ▸ Builder templates…, and the MCP server as `export_templates` and
`export_offsets_pdf`. [`docs/building.md`](docs/building.md) is the builder's
guide.

---

## 3. Command line
Expand All @@ -583,7 +603,11 @@ seacraft sac hull.fef [--stations N] [--csv out.csv] [--svg sac.svg] [--js
seacraft bonjean hull.fef [--stations N] [--drafts T1,T2,...] [--draft-steps N]
[--csv out.csv] [--svg bonjean.svg] [--json]
seacraft offsets hull.fef [--stations N] [--waterlines h1,h2,...] [--buttocks y1,y2,...]
[--csv out.csv] [--html offsets.html] [--json]
[--csv out.csv] [--html offsets.html] [--pdf offsets.pdf [--imperial]] [--json]
seacraft templates hull.fef -o moulds.pdf|.svg|.dxf [--stations N | --spacing M | --at x1,x2,...]
[--skin-mm MM] [--half] [--strongback Z] [--waterlines h1,h2,...]
[--profile] [--transom X,RAKE] [--paper a4|a3|letter|WxH] [--single-page]
[--margin-mm MM] [--overlap-mm MM] [--scale 1:N] [--imperial] [--json]
seacraft transform hull.fef -o scaled.fef [--lwl L] [--bwl B] [--draft T]
[--scale sx,sy,sz] [--translate dx,dy,dz] [--mirror x|y|z] [--json]
seacraft resistance hull.fef [--method holtrop|michell|dsyhs] [--cat-spacing S]
Expand Down Expand Up @@ -752,6 +776,9 @@ software. Comparing them with published data is the most useful contribution any
and hydrostatics docks, file actions) is implemented and tested headlessly.
* DXF export of the linesplan (2D views plus 3D curve copies) is implemented
and audit-clean under `ezdxf`.
* Building patterns are checked against closed-form shapes and against
poppler's rendering of the PDF; nobody has yet measured a printed set or built
on one, and the PDFs have not been opened on Windows or macOS.
* Zebra / curvature / draft analysis and a CPU z-buffer renderer with PNG
output are implemented, in the CLI and in all four GUI viewports. Curvature
combs are drawn both on the linesplan (`--combs`, SVG and DXF) and in the four
Expand All @@ -773,7 +800,8 @@ software. Comparing them with published data is the most useful contribution any
`save_hull`, `move_point`, `set_crease`, `split_face`, `insert_edge`,
`transform_hull`, `hydro_compute`, `hydro_table`, `stability_cross_curves`,
`bonjean_curves`, `table_of_offsets`, `unfold_plate`, `resistance_curve`,
`planing_curve`, `trim_scan`, `optimize_hull`, `export_linesplan` and `render_png`.
`planing_curve`, `trim_scan`, `optimize_hull`, `export_linesplan`, `export_templates`,
`export_offsets_pdf` and `render_png`.
Agent skills that teach an AI agent to use these tools well (hull design,
fairing, stability checks) are in [`skills/`](skills/README.md), with install
steps and the CI test that keeps them in step with the tools.
Expand Down
21 changes: 20 additions & 1 deletion ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ see [`DISCLAIMER.md`](DISCLAIMER.md).
- Resistance by Holtrop-Mennen, Michell thin-ship theory and Savitsky; a hull optimiser.
- Strip-theory heave and pitch motions, irregular head seas, MSI.
- Lines plans (SVG, DXF, IGES), mesh exports (OBJ, STL, 3MF, PLY, HTML), an HTML design report.
- Full-size building patterns: station moulds with the skin deducted, profile and raked transom, as a PDF
tiled over ordinary paper, one page a pattern, SVG or DXF; the table of offsets as a PDF.
- A command line, a loopback control channel, and an MCP server for AI agents.

## Next
Expand Down Expand Up @@ -81,14 +83,31 @@ takes about 140 ms to build on the window thread and 12 ms to upload.
### M5: Binaries

- [x] Replace egui's default fonts, whose `Ubuntu-Light.ttf` is under the Ubuntu Font Licence, with DejaVu
(`crates/seacraft-gui/assets/fonts`, `NOTICE`).
(`crates/seacraft-core/assets/fonts`, `NOTICE`).
- [x] Ship full licence texts with binaries: `cargo xtask dist` writes them from the crates that are compiled in.
- [x] Add release packaging: a version tag builds a Linux archive, AppImage and Flatpak bundle, a Windows zip
and macOS disk images, then creates a draft release (`.github/workflows/release.yml`, `packaging/`).
- [ ] Make the first release: run the workflow, and have someone open the GUI on Windows and on a Mac.
- [x] Decide on publishing to crates.io: not now. The people a release is for download a program, and the
library API is not meant to be stable yet. Flathub waits too, since it must build from source.

### M6: Builder's toolkit

- [x] Station moulds from the refined hull, with the skin deducted along the surface normal, mould face and
bevel on each sheet, strongback legs, half moulds (`crates/seacraft-core/src/templates.rs`).
- [x] Profile (backbone) and raked transom patterns.
- [x] A dependency-free PDF writer with an embedded DejaVu subset, tiled over A4, A3 or Letter with join marks,
a map page and 100 mm check rules, or one page a pattern; SVG and DXF in millimetres (`sheet.rs`, `pdf.rs`).
- [x] The table of offsets as a PDF, metric with feet-inches-eighths beside it.
- [x] The same in the CLI (`seacraft templates`, `offsets --pdf`), the GUI (File ▸ Builder templates…), the
control channel (`build.templates`) and MCP (`export_templates`, `export_offsets_pdf`), with a boatbuilding
skill.
- [ ] Print the calibration page and one station and measure them.
- [ ] Open the PDFs on Windows and macOS viewers.
- [ ] Plywood panels: developed shapes of hull panels for stitch-and-glue, with their joins.
- [ ] Materials and weight: skin area, plywood sheets, glass and resin, and the weight they add.
- [ ] A build pack: patterns, offsets, panels and a cutting list in one document.

## Gap review

| Area | Today | Missing |
Expand Down
Loading
Loading