Nest Parts (Nest)
Nests flat parts onto stock sheets with minimal waste. Parts pack against their true outlines (concave shapes interlock), honor a spacing gap derived from the material thickness (or an override), and rotate in fixed steps. Parts of different thickness are automatically nested onto separate sheets. When parts don't fit on one sheet, additional sheets are opened; parts that fit on no sheet are reported as unplaced.
Nesting decides where each part sits on which sheet. You give it flat parts and the
stock you have; it returns placement planes you can use to orient the real geometry.
Parts pack against their true outlines, not their bounding boxes, so an L-shape nests
into the notch of another L-shape. Two spacings control the packing: the Gap between
neighbouring outlines, and the Margin inset from the sheet edge. Leave Gap unset and it
is derived from the material thickness.
Parts of different thickness never share a sheet. They are split into groups and nested
separately, so a 2 mm part can never land on a 3 mm sheet.
Inputs
| Name | Nick | Type | Access | Default | Description |
|---|---|---|---|---|---|
| Parts | P | Generic | list | Parts to nest: Unroll Results (from the Unroller component) or closed planar curves in the XY plane. | |
| Quantities | Q | Integer | list | How many copies of each part to place. One value per part, or a single value for all (default 1). | |
| Sheets | S | Rectangle | list | Available stock sheet sizes as rectangles. Multiple sizes allowed. When a new sheet is opened, remnants come first (see R), then the smallest size that fits. | |
| Sheet Quantities | SQ | Integer | list | Sheets available per stock size. One value per sheet rectangle; 0 or negative means unlimited (default unlimited). | |
| Remnants | R | Boolean | list | Marks a sheet size as leftover scrap you already have, rather than fresh stock you would buy. Sheets marked true get used up before any standard stock, so odd offcuts leave the rack instead of sitting there. Useful when an offcut is larger than a standard size, since otherwise the smaller standard sheet gets opened first. One value per sheet rectangle (default false). | |
| Gap | G | Number | item | Gap between part outlines, in document units. Leave unset to derive it automatically from the material thickness (thicker material → wider gap). | |
| Margin | M | Number | item | Usable-area inset from the sheet edge, in document units. Defaults to the Gap value. | |
| Rotation Steps | RS | Integer | item | 8 | Number of rotation steps to try per part: 8 = 45° steps (default), 4 = 90° steps, 1 = no rotation. |
| Min Hole Area | MHA | Number | item | 100 | Holes smaller than this area are ignored by the nesting logic (they are still cut). Larger values speed up nesting of parts with many small holes (default 100). |
| Optimize | Opt | Boolean | item | false | Deep optimize: searches part order and rotations with a genetic algorithm for the given time budget. Better yield, slower. Off = quick greedy mode (default). |
| Time Budget | TB | Number | item | 10 | Time budget for deep optimization in seconds, per material/thickness group (default 10). Ignored in quick mode. |
| Separate Parts | Sep | Boolean | item | false | Keep each part type on its own sheets: copies of a part may share a sheet, but two different parts never do. Easier sorting at the machine, lower yield (default false). |
Outputs
| Name | Nick | Type | Access | Default | Description |
|---|---|---|---|---|---|
| Outlines | O | Curve | tree | Placed part outlines (incl. holes), one branch per sheet. Sheets are laid out side by side for preview. | |
| Sheet Frames | F | Rectangle | list | The outline of every sheet used, in the same preview layout. | |
| Placements | PL | Plane | tree | Placement plane per placed part, one branch per sheet. Orient the source geometry from World XY onto this plane. | |
| Info | I | Text | item | Job summary: sheets used, yield, unplaced parts. | |
| Unplaced | U | Text | list | Parts that could not be placed, with the reason. Empty when everything fits. | |
| Result | Res | Generic | item | The full nesting result object (sheets, placements, source curves, sheet size/gauge) in true sheet-local coordinates, for downstream CNC/machine-file tooling. |
Remnants: using up your offcuts
A remnant is scrap you already have, rather than fresh stock you would buy. Mark a sheet
size as a remnant and it gets used before any standard stock, so odd offcuts leave the rack
instead of sitting there.
This matters most when an offcut is _larger_ than a standard sheet. Without the remnant
flag, the nester opens the smaller standard sheet first and your big offcut never gets
touched.
Remnants are matched to sheet sizes by position: one boolean per rectangle in Sheets.
A worked stock list
Say you buy 2500 × 1250 sheets, and you have two offcuts left from an earlier job.
| Input | Value | Meaning |
|---|---|---|
| Sheets (S) | 2500×1250, 1200×700, 800×560 | Three sizes, largest is your standard stock |
| Remnants (R) | false, true, true | The two smaller sizes are offcuts |
| Sheet Quantities (SQ) | 0, 1, 1 | Unlimited standard stock, exactly one of each offcut |
0 means unlimited, which is what you want for stock you can reorder. The offcuts are
capped at 1 because you only own one of each. The nester fills both offcuts first, then
opens as many 2500 × 1250 sheets as the job needs.
Quick mode and deep optimize
By default the nester runs a single greedy pass and returns immediately. Switch Optimize
on and it searches part order and rotations with a genetic algorithm until the **Time
Budget** runs out, which usually buys a noticeably better yield.
The budget is spent _per thickness group_, not for the whole job. Four different materials
at a 10 second budget is up to 40 seconds of solving. Yield climbs steeply at first and then
flattens, so raising the budget far past the default rarely pays for itself.
Reading the Unplaced output
Unplaced (U) is empty when everything fits. Any entry means a part never made it onto a
sheet, with the reason:
- The part is larger than every available sheet. Check that Gap and Margin have not
- Stock ran out. Every sheet size hit its Sheet Quantities cap. Raise a cap, or set one
0 for unlimited.
Always check this output before sending a job to the machine. The Info (I) output gives
the job summary alongside it: sheets used, yield, and unplaced count.
Tips
- Rotation Steps trades yield for grain direction.
8(45° steps) is the default,4
1 disables rotation entirely: use it when the material has a grain
or finish direction you must respect.
- Min Hole Area speeds up parts with many small holes. Holes below the threshold are
- Separate Parts keeps each part type on its own sheets. Sorting at the machine gets
- The Result (Res) output carries the full nesting result in true sheet-local