Skip to content

Arcline nesting, in the browser

True-shape nesting that knows which sheets you actually hold.

Parts interlock on their real outlines rather than their bounding boxes, small parts drop into the holes of bigger ones, and the search runs on the offcuts in your rack as readily as on a full sheet. Every run records the seed it was found with, so a nest can be reproduced exactly.

The job as it stands

The sheet is the expensive part

Material is most of the cost of a cut part, and the difference between a good nest and a lazy one is money on the floor.

Ten different profiles across three orders, all 6mm mild steel, all wanted this week. Somebody arranges them on the screen by eye, notices too late that the two big brackets could have interlocked, cuts the sheet, and puts a 1400 by 500 remnant on the rack that nobody writes down and nobody finds again. Next week the same profiles come round and the whole exercise repeats from a full sheet.

The packages that do this properly exist, and they are a desktop install with a dongle, a licence per seat and a training day. That is a reasonable answer for a shop with a full time programmer. It is a poor answer for four people, two tables and a laptop in the office that also does the invoicing.

The nest, the stock it came off and the remnant it left behind are one problem. Keeping them in three places is what loses the sheet.

So the nesting here is not a separate program. It runs in the browser against the same stock, parts and cut orders as everything else, and what it leaves behind goes back on the rack as a real remnant with its own outline, ready to be nested on next time.

True shape

Outlines, not boxes

Two parts may sit together exactly when the origin of one lies outside the no-fit polygon of the other, which is the Minkowski sum of the first with the negated second. The engine computes those polygons from the real outlines and caches one per shape pair, so an L bracket nests into the corner of another L bracket instead of reserving a rectangle it never fills.

Most real parts are convex once they carry their spacing offset, and for those the sum is the convex hull of the pairwise vertex sums, which is exact and cheap. A concave outline is decomposed into triangles, the triangles are merged back into as few convex pieces as the shape allows, and every piece pair contributes its own exact sum. Where a decomposition is numerically awkward the engine falls back to the convex hull of the outline, which forbids slightly more space than it strictly must: conservative, never overlapping.

Containment works the same way. The positions where a part sits fully inside the sheet are an inner-fit polygon, so a shaped offcut is nested on its true outline rather than on the rectangle that would fit inside it. A rectangular sheet takes the exact bounding-box shortcut, because for a rectangle the two answers are the same answer.

A part nested inside another part's hole is cut, and freed, before the part around it drops out of the sheet.

Parts inside parts

The hole in a flange is a piece of sheet you paid for

After the main pass, any part still unplaced is offered the holes of the parts already placed. Each hole is taken at its placed position, eroded by the same edge margin the sheet uses, and rejected outright if what is left is too small to be worth seating anything in. Small parts then drop into the holes that remain, using the same no-fit arithmetic as the sheet itself, so a spacer nests inside the bore of a flange rather than taking up fresh sheet.

That only pays off if the cut file understands what it has been handed, so it does. A part sitting in another part's hole is cut as one complete block, its own holes then its own outer, and always before its parent, so the child is freed while the frame around it is still bridged to the sheet. Nesting a part into a hole and then dropping the parent first would tip the small part into the slats.

Hole filling is one level deep on purpose: a part seated in a hole does not then host a part in its own hole. It adds no randomness either, so it never makes a nest less reproducible than it was.

Reproducible

The same seed gives the same nest

The search is a genetic algorithm over part order and rotation, and every random draw in it comes from one seeded stream. Nothing reads the clock, nothing reads a hash of an object address and nothing iterates a map in whatever order it happens to be in. Give it the same parts, the same candidate sheets, the same settings, the same seed and the same generation count and it produces byte-identical placements. That is not a claim about intent: it is what the test suite asserts, twice, once on the search and once end to end through sheet selection.

In the workshop the run is bounded by a time box rather than a generation count, so the honest version of the sentence is this: the sequence of layouts it tries is fixed by the seed, and the clock only decides how far down that sequence it gets. A faster machine looks at more of it, and the best layout found is always the one kept. Every nest is saved with the seed it was found with, so a nest you liked can be reproduced rather than hunted for again.

Pressing nest a second time deliberately advances the seed, because the useful thing at that moment is a different attempt to compare rather than the same one repeated.

Fast mode is a different engine, not a shorter run of the same one: a skyline packer over bounding boxes, parts largest first, every tie broken on coordinates. It is deterministic too, it finishes in well under a second, and it is what quick-scores the candidate sheets before the real search starts.

Sheet selection

It nests on the stock you hold, remnants first

Nothing here nests on an ideal sheet. The candidates are the rows in your own stock that match the material and thickness of the job.

Every candidate is quick-scored first
The fast packer runs on each candidate to predict how much of it the job would fill, and the score is that prediction weighted at 0.55, a remnant bonus weighted at 0.30 and a smallness preference weighted at 0.15 that favours the tightest sheet the job fits. The weights are settings rather than a mystery, and the ranked list is on screen.
A remnant beats a full sheet by construction
The remnant bonus is a fixed part of the score, so an offcut that can take the job is chosen over a virgin sheet unless the packing is clearly worse. That is the whole point of banking remnants in the first place, and it is the part a manual nest quietly stops doing after a busy fortnight.
A close second gets its own run
When the runner up scores within five per cent of the winner, both get a real search on half the time box each and the better result wins. A quick estimate is good at ranking and not good enough to decide.
What does not fit spills to the next sheet
Anything left unplaced goes round again against the remaining candidates and comes back as a second sheet, and a third if it needs one. A candidate that cannot host a single remaining part is skipped rather than searched, so the loop always terminates.
A banked remnant keeps its real shape
An offcut is stored with its outline, not just a width and a height, and the parts already cut out of it stay as holes so nothing is ever nested over air. Everything downstream works in the remnant's own frame, so its placements come back in the coordinates you cut in.
The offcut goes back on the rack
On a rectangular sheet the leftover is banked as the two clean strips to the right of and above the used region, which is what a guillotine or a straight cut can actually recover. On a shaped remnant the true free region is measured, and a piece is only banked when the biggest rectangle genuinely inside it clears the threshold, so a large but sliver-shaped area is not recorded as usable stock.
Sheet and remnant stockExample stock

From nest to cut file

The part of it the table actually reads

Every closed profile gets a pierce on the waste side of the line and a lead-in onto it, inner profiles are cut before the outer of the same part, and the parts are ordered nearest neighbour on their pierce points from the sheet origin. Outers take a lead-out into scrap. Straight runs come out as G1 and true arcs are recovered as G2 and G3 with incremental centre offsets rather than being flattened into a thousand short moves.

Each table is a machine record, and the post details follow it: the pierce dwell after the torch fires, the exact lines your height control wants before and after a cut, a feed ceiling the emitted feed is clamped to, and the machine's own name in the header. The same nest therefore posts correctly for two different tables without anybody editing the file.

The toolpath itself is adjustable before you cut: kerf compensation, straight or arc leads with their own lengths and angles, cut direction, the start point of any individual profile nudged off a corner and into the scrap, and micro-joint tabs so parts stay bridged. Every one of those is off by default, and with them off the file is the plain, portable one.

In detail

What comes out of a nest

Six things, every time, for every sheet the job needed.

A layout you can read at the machine
Every placement as a position and a rotation in sheet coordinates, drawn on the sheet or the remnant it belongs to, with the parts that were seated inside other parts' holes marked as what they are.
A utilisation figure that is defined
True part area over the used region of the sheet, clipped to the real outline. It is deliberately not a whole-sheet percentage, because a whole-sheet number scores the same however well the parts are packed. It also means the figure is not comparable with a whole-sheet number from another package, so it is worth knowing which one you are reading.
Scrap, with the banked offcut taken off it
Measured against the whole usable sheet, with anything banked as a remnant excluded, because a piece you put back on the rack is not scrap. That is the number that tells you whether the job cost you a sheet.
An estimated cut time with its parts shown
Cut length at the feed from your process parameters, plus the pierce time for every pierce, plus torch travel between profiles at a modelled rapid rate. It is labelled estimated everywhere it appears, because it models a table rather than measuring yours.
DXF and G-code from the same layout
A DXF with every profile as a closed polyline on a CUT layer and the sheet outline on its own layer, arcs preserved as bulges, in millimetres. Or word address G-code with the machine's own post details applied. The two describe the same nest.
Stock that accounts for itself
Marking a nest cut consumes the sheet or the remnant it was nested on, banks each qualifying offcut as a new remnant row carrying its outline and a link back to the nest that made it, advances the cut quantity on every order line the nest covered, and raises a low stock note when a material crosses the threshold you set.

Getting parts in

DXF in, and it tells you what it could not read

Import reads lines, arcs, circles and polylines including bulged segments, joins open chains into closed loops by snapping endpoints within a twentieth of a millimetre, and sorts the resulting loops into outers and holes by containment. A circle imported as a single entity keeps its arc, so it exports and posts as an arc rather than as a polygon pretending to be one.

What it cannot use it says out loud. Unsupported entity types are counted by type and reported, and any chain that would not close is discarded and reported as discarded. A DXF with no closed profile in it is told so plainly rather than being imported as an empty part, because an empty part discovered at the machine is an expensive way to find out.

Parts can also be drawn in the browser or taken from the parametric templates in the preset, and every part carries its own material, thickness, area, cut length and pierce count, which is what the queue groups and prices from.

Part editorUI still

Being straight about it

What this does not do

Worth knowing before you move a job onto it, because a page that leaves this out is one you find out about later.

It nests flat profiles in two dimensions. There is no bevel, no tube or section nesting and no multi-torch, and it does not do common-line or chain cutting: every profile is pierced and led on its own. One job is one material at one thickness, because that is how the cut queue groups outstanding work.

It does not choose your cut parameters. Feed, pierce time and kerf come from the process parameters you set per material and thickness, and every figure derived from them, the cut time above all, is labelled as an estimate. Nothing here decides an amperage, a torch height or a consumable set.

It is not machine control. It emits a file, and your controller runs the table. Direct G-code is validated together on your own table before anybody relies on it, and the DXF path into the CAM you already run is there precisely so you do not have to take that on trust.

Against arranging by eye

Where it helps, and where it does not

A careful operator arranging parts on screen is a real answer, and on a simple sheet it is a good one. This is what changes.

A sheet laid out by hand compared with the same parts nested.
TaskBy eye on the screenKabaido
Interlocking two concave profilesIf someone spots itSearched, on the real outlines
Using the hole in a large partRareFilled where a part fits
Nesting on an odd-shaped offcutBy eye, on its bounding boxOn its true outline
Choosing which sheet to cutWhatever is nearestRanked, remnants weighted first
The parts that do not fitSecond sheet, laid out againSpilled and nested automatically
Reproducing a nest you likedFrom memorySaved with its seed
Recording what is leftA note on the rack, if thatBanked with its outline
Cut order and pierce placementYour CAMEmitted, or exported to your CAM
Feed, pierce time and kerfYoursYours
Running the tableYour controllerYour controller
Deciding the job is right to cutYouYou

Getting started

Nest a sheet you have already cut

No card at signup, and the free plan is not a trial.

Step 1

Import the DXFs and enter the sheet

Bring in the profiles from a job you cut last month and add the stock size you cut it on, remnant or full sheet.

Step 2

Nest it and compare

Run it and put the layout next to the one you cut. The utilisation figure and the offcut are the two numbers worth arguing with.

Step 3

Export and check the file

Take the DXF into the CAM you already run, or the G-code onto the table with the machine profile set, and check it before you trust it.

On the call we nest one of your own jobs with you, on your own stock sizes, and you keep whatever comes out of it.

Questions

What plasma shops ask first

Nest a sheet you already cut and compare the two.

Sign up free, import the profiles, enter the stock you cut it on and run it. If the layout is not better than the one you cut by hand, tell us which job it was.