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.
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.
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.
| Task | By eye on the screen | Kabaido |
|---|---|---|
| Interlocking two concave profiles | If someone spots it | Searched, on the real outlines |
| Using the hole in a large part | Rare | Filled where a part fits |
| Nesting on an odd-shaped offcut | By eye, on its bounding box | On its true outline |
| Choosing which sheet to cut | Whatever is nearest | Ranked, remnants weighted first |
| The parts that do not fit | Second sheet, laid out again | Spilled and nested automatically |
| Reproducing a nest you liked | From memory | Saved with its seed |
| Recording what is left | A note on the rack, if that | Banked with its outline |
| Cut order and pierce placement | Your CAM | Emitted, or exported to your CAM |
| Feed, pierce time and kerf | Yours | Yours |
| Running the table | Your controller | Your controller |
| Deciding the job is right to cut | You | You |
Getting started
Nest a sheet you have already cut
No card at signup, and the free plan is not a trial.
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.
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.
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
- True shape in the normal search mode. Legality between two parts is decided by the no-fit polygon of their real outlines, computed as a Minkowski sum, and containment inside the sheet or a shaped remnant is decided by an inner-fit polygon of the same kind. Bounding boxes appear in exactly two places and both are stated on screen: the Fast quality toggle, and the quick pass that ranks candidate sheets before the real search runs.
- Yes, from the same seed and the same amount of search. Every random draw comes from one seeded stream, so the sequence of layouts tried is fixed by the seed and the time box only decides how far into it the run gets. The best layout found is always kept, and the nest is saved with its seed. Pressing nest again advances the seed on purpose, so you get a fresh attempt to compare rather than the same one back.
- That is a large part of why it exists. An offcut is banked with its real outline, including the holes where parts have already been taken out of it, and it is nested on that outline rather than on a rectangle drawn around it. Remnants also carry a fixed bonus in the sheet selection score, so an offcut that can take the job is chosen ahead of a full sheet.
- Where they fit. After the main pass, unplaced parts are offered the holes of the parts already placed, each hole eroded by the same edge margin the sheet uses and skipped if what is left is too small to be worth using. The cut file then cuts each of those parts completely, and before the part around it, so it is freed while the frame is still held in the sheet. Hole filling is one level deep.
- True part area divided by the used region of the sheet, clipped to the sheet's real outline. It is deliberately not a whole-sheet figure, because a whole-sheet figure is the same number however tightly the parts are packed and so it cannot be optimised against. It does mean the number is not directly comparable with a whole-sheet percentage from another package. Scrap is reported separately, against the whole sheet, with anything banked as a remnant taken off it.
- Lines, arcs, circles and polylines, including bulged polyline segments, with open chains joined into closed loops by snapping endpoints within 0.05mm and loops sorted into outers and holes by containment. Anything it does not support is counted by type and reported as a warning, and a chain that will not close is discarded and reported. A file with no closed profile in it is rejected with that reason rather than imported as an empty part.
- No. Export the nest as DXF and carry on through the CAM you already run, exactly as today. The direct G-code path is there when you want the shorter route, with the pierce dwell, height control lines, feed ceiling and machine name coming from that table's own profile, and it is validated together on your table before you rely on it. Your controller runs the machine either way.
- Nesting is manual work and manual work is never metered, so nesting, exporting and cutting cost nothing on any plan including Free. The Free plan is full manual Arcline on one machine with no card at signup and no time limit. Starter is £149 a month and adds AI credits and white label branding, every plan includes one machine screen, and extra screens are £49 a month each on any paid plan.
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.