Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
- A diameter tool may set `cutter_sense` (`upcut`, `downcut`, or `compression`) and, with compression, `upcut_length` (millimetres at the tip). Omitted, compensation stays the flat diameter offset. Sense is stored on the job and the IR for later checks; it does not change the 2D offset. Posted G-code is unchanged when the field is omitted. This output has not been proven on a machine.
- A profile, pocket, face, engrave, drill, wrap or live mill may set `onion_skin`, a positive length strictly less than `depth`. Earlier depth passes stop that far short of the floor. The last pass cuts the skin with the same entry as the other passes. Omitting the field leaves the depth plan unchanged. `campanion run` checks that no earlier pass enters the skin and that the last pass reaches the floor. This output has not been proven on a machine.
- `linuxcnc_router` is a millimetre LinuxCNC gantry post: the same RS274 motion as `linuxcnc`, with no rotary axis. A Probe event with a contact pose and a feed is `G38.2` (LinuxCNC straight probe; <https://linuxcnc.org/docs/stable/html/gcode/g-code.html#gcode:g38>). `vacuum` and `dust` are immediate digital outputs `M64`/`M65` (<https://linuxcnc.org/docs/stable/html/gcode/m-code.html#mcode:m62-m65>); pin numbers default to 0 and 1. Any other Other name is refused. Existing posts still fall back to `process.other`. This output has not been proven on a machine.
- Mill jobs may set `sheet` (width and height in the XY plane, origin at (0, 0)) and `nest` (gap, margin, clamp keep-outs and parts). When both are set, `campanion run` packs each part's axis-aligned bounds onto the sheet before building toolpaths. Parts are placed in input order. The first feasible pose wins: ascending Y, then ascending X, then rotation index (0°, then 90° when the step is 90°). The same parts always pack the same way. The packer is not a yield optimiser. It packs rectangles; contour packing can follow. A part lies inside the sheet inset by the margin, clears other parts by the gap, and clears each keep-out by the tool radius plus the gap. A part that does not fit, or that fails a check, exits 1 and nothing is written. Placements are printed on stderr. `--nest-out FILE.json` writes `campanion-nest/1` after the program is accepted. The IR stays ordinary toolpaths in the sheet frame. This output has not been proven on a machine.

## 0.9.3 — 2026-11-03

Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ cargo run -p campanion-cli -- run examples/sample.job.json -o out.ngc --ir out.j

- `examples/sample.job.json` describes the source drawing (`examples/sample.dxf`), tools,
heights and operations (inside/outside profiles by layer).
- `examples/nest.job.json` packs two 20 mm squares from `examples/nest.dxf` onto a 50 by 30 mm sheet. See [Sheet nesting](docs/job-file.md#sheet-nesting).
- `-o out.ngc` writes reference G-code; `--ir out.json` writes the machine-neutral toolpath.
Pass `--post` to write a controller dialect instead of the test sink. See [Posts](#posts).
- The toolpath is verified before anything is written; errors stop the run.
Expand Down Expand Up @@ -96,6 +97,7 @@ that post. The G-code is read back and compared to the toolpath at the job chord

```sh
campanion run examples/sample.job.json -o out.ngc --post linuxcnc
campanion run examples/nest.job.json -o out.ngc --nest-out placements.json
campanion run examples/sample.job.json -o out.ngc --ir out.json --post path/to/my-post.json
campanion post out.json --post grbl -o out.nc
campanion post out.json --post grbl
Expand Down
Loading
Loading