Skip to content

Worktops and plinths

A kitchen’s worktop is one slab over four cabinets. No cabinet owns it, and no recipe can produce it: its length is the sum of four modules and two overhangs, and it exists only because those four ended up standing next to each other.

So it is not in your recipe. What is in your recipe is one line saying that a worktop is allowed to cross this cabinet.

"materialSlots": ["body", "front", "back", "worktop", "plinth"],
"materialDefaults": {
"body": "oak_natural",
"front": "white_matte",
"back": "hdf_white",
"worktop": "worktop_stone_grey",
"plinth": "plinth_board"
}

Your cabinet contains neither a worktop nor a toe kick. The worktop slot means “a worktop crosses me, and this is what it is made of”; the row takes the slot from its first cabinet. A chair has no such slot and takes no worktop, and that is the entire compatibility test — there is no second list of worktop-capable modules for anybody to keep in step with this one.

A recipe without the slot never joins a row. Not an error, not a warning: the cabinet is simply not one a worktop goes over, which is right for a wall unit and wrong for a base unit, and nothing on screen distinguishes the two. Every shipped recipe once lacked it, and the whole feature was inert — built, tested and drawing nothing — until somebody put five words in a fixture.

Wall units and open shelving are the cases that should NOT have it. A stone slab across a bookcase is what happens when a row sweeps up everything standing in a line.

Neighbouring floor modules, facing the same way, standing on one line, with no more than 3 mm between them.

All four conditions matter, and the last three are what stop a row that is not a row:

  • Facing. At the corner of an L the two runs meet at ninety degrees and their cabinets are as close as any two in one row. A single slab over both would be one rectangle covering the inside of the corner — over the floor, through the wall, impossible to cut. Each run gets its own.
  • One line. Two cabinets on opposite walls of a galley kitchen are nearer to each other than to their own neighbours.
  • 3 mm. A kitchen is set out with millimetre gaps between carcasses. A row that broke at the first of them would make one slab per cabinet — and four joints a customer can see.

A row is a computed thing, not a node of the graph. Nothing is saved about it except what somebody deliberately changed, and it re-forms from wherever the cabinets are standing the moment they move.

Per row, in the specification and on the screen:

part role cut comes out as
the slab worktop yes one blank, row length by cabinet depth plus overhangs
the toe kick plinth yes one board along the front, set back from it
the edge worktop / plinth no a moulding swept along the front, when a section is named

The slab and the kick are cut from sheets and appear in the cut list as blanks. The moulding is not: it is bought by the running metre, and nesting a 2400 × 40 strip as a rectangle would order a sheet of stone to make it.

Overhangs, and the numbers you did not set

Section titled “Overhangs, and the numbers you did not set”

Defaults, all of them conventions rather than measurements:

front overhang 30 mm
back, left, right 0 mm
slab thickness the material’s, or 38 mm
toe kick 100 mm tall, 16 mm board, set back 50 mm

The thickness comes from the material you actually bought. A shop on 40 mm postforming gets a 40 mm slab; the 38 is only what happens when the catalogue has nothing to say. Price is computed from square metres and geometry from this number, so a default that overrode the catalogue would make the two disagree by two millimetres with nothing on screen to show it — and the first person to notice would be whoever fitted the sink.

Front and back are measured from the doors, not from a world axis. A row facing the other way still stands 30 mm proud of its own fronts.

"runs": [
{ "nodes": ["n3", "n4", "n5"],
"worktop": { "overhangFront": 40, "profile": "cornice_chamfer" } }
]

The stored nodes point at a row rather than define one. A shop that set 40 mm and then added a cabinet to the end of that row meant the row, and the override follows it. Omit the whole entry when the defaults are right — that is why nothing is stored for an ordinary kitchen.

profile names a section from the catalogue and produces the swept moulding in the table above. It goes on the front edge, along the row.

"worktop": {
"sink": { "at": 900, "width": 600, "depth": 500, "fromFront": 45, "cornerRadius": 20 }
}

Measured from the slab’s own corner, not from the row’s first cabinet: the opening travels to the machine in the blank’s coordinates, and any other origin needs a conversion happening somewhere nobody can see it. at runs along the slab from its left edge; fromFront from the edge the doors are on.

Corners are flattened to a 0.5 mm chord tolerance and at most 64 points — the same rule an imported profile gets, so the two cannot disagree about a corner in a worktop at the machine. A 20 mm radius comes out at four segments a corner.

The opening reaches the DXF on its own CUTOUT layer, never on the blank’s: the panel outline and the sink are two toolpaths with different tools and usually a different order, and merged into one layer a postprocessor told to cut the blanks would drop the worktop on the floor with the sink still in it.