Automatically tile several types of rectangular parts onto a Ginestium™ disc, respecting a safety margin and a cutting clearance (kerf) — then produce manufacturing files (SVG, DXF, Gerber), with an optional serial number and orientation marker engraved directly into the layout. This guide explains the placement algorithm's principle, what it assumes, and how to read its results without being a developer.
You have a Ginestium™ disc of a given size and one or more types of rectangular parts to cut out of it (up to 200 types) — each with its own W × H dimensions and a desired quantity. The tool computes where to place each part to fit as many as possible, while respecting a safety margin at the disc's edge and a spacing (kerf) between neighbouring parts for the blade or beam that will cut them.
The result exports to SVG, DXF, or Gerber, ready for manufacturing — optionally with a serial number and an orientation marker engraved in the margin, without ever encroaching on the parts themselves.
Unlike the portal's thermal tools, which simulate physics, this one solves a purely geometric problem: how many W × H rectangles can fit inside a circle of a given radius, without overlapping or spilling over — and exactly where, so that the cutting file is directly usable. It's the step that follows a part's design (a serpentine drawn in the Meander Generator, for instance, or a simple geometry) and precedes physical cutting: it turns "I need N parts of this size" into a ready-to-engrave disc layout.
The placement itself — the search that decides where each part goes — and the generation of the final files are computed and secured server-side. A Numba JIT (just-in-time compiled) kernel resolves a layout of several hundred parts in a few tens to a few hundred milliseconds, despite a search that brute-forces a large number of candidate positions (see §09).
When several part types are requested, the tool does not place them in the order you entered them: it first sorts them by decreasing area, then places them one type at a time, largest to smallest. Every part already placed becomes an obstacle for the following types.
For a given part type (W × H), the tool doesn't test random positions: it lays down a regular grid with a pitch of (W + kerf) × (H + kerf) — the spacing that guarantees a kerf's worth of cutting clearance between two neighbouring parts of the same type — then slides that grid (an offset) to find the position that fits the most cells at once, both inside the usable disc and outside the parts already placed. A first, coarse search sweeps a grid of candidate offsets; if a part type is already placed, or if "Evolutionary" mode is active, a second pass refines that offset over a finer area around the best one found.
Among offsets that fit the same number of parts, the tool prefers the one that centres the layout best — a simple tie-breaker, not an aesthetic goal in its own right.
Rotation (0°, 45°, 90°, or a free angle) turns the entire placement grid — and therefore every part, across all types — in a single move. It never applies to a single type in isolation: to orient one type differently from the others, you have to declare it as a second part type, with W and H swapped.
The algorithm never tests a W×H orientation against H×W for the same part to better fill a gap: each type keeps the orientation you entered, modulo the global rotation which applies to the whole disc. To explore both orientations of the same part, you must create two types with the dimensions swapped.
"Evolutionary" mode refines the same grid search in two passes; it does not evolve a population of solutions through selection, mutation, or crossover. Detail and nuance in the nota bene (§10).
The ring between the disc's edge and the usable radius (diameter/2 − margin) serves as an exclusion zone for parts, but also as a home for the serial number and the orientation marker, engraved inside that ring — so it isn't simply wasted space.
For two adjacent parts of the same type, the centre-to-centre gap (W + kerf) leaves exactly kerf of cutting clearance. Between two parts of different types that end up neighbouring each other, the tool only checks that they don't overlap, with a half-kerf margin — not a systematic full kerf. Detail in §09, step 4.
These values are read once, when "Optimise & Generate" is launched; changing them afterwards does not affect an already-computed layout until generation is run again.
A quantity of ∞ is not truly unlimited: the engine treats it as a maximum of 9999 parts for that specific type, and the total number of parts placed, across all types, is itself capped (see §04).
The serial number (13 characters, normally produced by the Serial Number Generator and starting with "G") runs along an arc located in the safety margin, at a distance from the edge set by the chosen text height. It can be repeated 1, 2, 3, or 4 times, distributed evenly around the disc, with an adjustable starting angular offset — handy so the number stays legible whatever orientation the part ends up in on the workbench.
The orientation marker is a small solid triangle, also positioned in the margin, at one of four predefined orientations (0°, 45°, 180°, 12.5°) — this last, deliberately non-round value lets you unambiguously tell a manufacturing marker apart from a plain decorative element if you come across it in isolation on a finished part. The triangle has no measurement function: it's a visual cue for orienting the part correctly during assembly.
The on-screen SVG preview draws the serial number with a system font, for comfortable reading; the Gerber file, on the other hand, engraves each character with a "stroke font" — a set of segments a laser or a tip can follow directly, with no fill. Both trace the same text, at the same position, but the exact shape of the characters differs slightly between the two renderings — see §09, step 8.
SVG (full vector) — the exact drawing shown on screen, colours and labels included, for viewing or editing in a vector editor.
DXF (AutoCAD) — the disc and each part's outline (one layer named TYPE_n per type), without kerf, margin, S/N, or marker: a raw geometric plan for CAD.
GBR (Gerber, configurable) — up to 5 independently selectable layers: disc + centre, part outlines, saw paths, S/N engraving, orientation marker. Combined into a single file, or exported separately as a zip archive — useful for laser passes at different depths per layer.
Project (.efb.json) — all the tool's settings (disc, parts, S/N, marker, algorithm), not the placement results, named after the serial number. Reimports identically.
This section is the guide's technical reference: it describes the calculations actually executed by the server-side kernel (Numba JIT compiled). It isn't necessary for using the tool.
This is the classic "largest first" heuristic of rectangle bin-packing: large parts are the most constraining to fit, so placing them first, on a still-empty disc, gives them the most room to manoeuvre. Small parts, easier to slide into gaps, then come and fill what's left (§02).
The grid is built in a local frame aligned with the part (not with the disc), then rotated as one block by θ at the very end: that's what guarantees parts stay orthogonal to each other regardless of the chosen global angle, rather than having to recompute a tilted grid. The +1 on n_x and n_y adds a margin row to the explored area, so the search isn't cut off exactly at the usable radius's edge.
A rotated rectangle can have a corner outside the usable circle even when its centre sits well inside. Testing all 4 corners is the conservative test that guarantees no part ever spills over, even slightly — at the cost of discarding a few positions that, by centre alone, would have looked valid.
Within a single type, it's the grid pitch from step 2 (step = W + kerf) that already guarantees a full kerf between two neighbouring parts — this test has nothing more to check. This test (4) only comes into play between parts of different types, which don't share the same grid and must therefore be compared directly: it guarantees a minimum half-kerf gap between them, not systematically a full kerf. A nuance worth knowing if you're placing very different-sized types next to each other and the cutting clearance matters down to a tenth of a millimetre.
The coarse phase locates the right offset zone without testing the full resolution everywhere; the fine phase then refines locally around the best candidate found. This is a deliberate computational saving, not an exhaustive search of every possible offset — see the nota bene (§10) for what this changes between Grid and Evolutionary modes.
At equal fill, preferring positions close to the centre leaves peripheral positions — more constrained by the disc's edge — available for the following types, which statistically need them more.
The marker triangle is centred on its own radius (midR), while the serial number's text is anchored at its base (baseR) and then drawn outward over a height of textH — the two elements thus occupy neighbouring but distinct rings, never overlapping regardless of the chosen text height. Each S/N character is then traced along the arc with a "stroke font" vector typeface dedicated to Gerber engraving (pure segments, no fill) — see §07.
The name can be misleading: "Evolutionary" mode does not evolve a population of solutions through selection, mutation, and crossover, as a true evolutionary or genetic algorithm would. It's the same grid-search algorithm as "Grid" mode (§09, steps 2 to 5), with two measurable differences and nothing more.
| Behaviour | Grid | Evolutionary |
|---|---|---|
| Fine phase (2 of step 5) for the very first type placed | not triggered | always triggered |
| Fine phase for subsequent types | triggered | always triggered |
| Grid size p1 (coarse phase) | max(10, min(prec, 40)) | max(8, prec / 2) |
| Grid size p2 (fine phase) | max(15, prec) | floor(prec × 1.5) |
Concretely, the only real difference for a disc with a single part type is the systematic triggering of the fine phase in Evolutionary mode: in Grid mode, that single part only benefits from the coarse search, for lack of an obstacle to avoid that would justify a refinement. As soon as a second part type comes into play, both modes run both phases — only the search grid sizes keep differing.
Because "Evolutionary" refines systematically, it costs more computation time for a gain that's only significant on tight configurations — little free space left, a single part type, a large kerf relative to the parts' size. On a disc well below its packing capacity, both modes generally converge to the same result, and the name "Evolutionary" shouldn't suggest a smarter or more exhaustive search — only a more locally persistent one.