How far a sheet reaches#
How a part is broken into simple blocks carries a face on as a sheet and uses it as a knife. It leaves one question open, and it is the question the whole method turns on: how big is the sheet?
A face has edges. The surface underneath it does not — a plane goes on forever, a cylinder goes all the way round. So carrying a face on is not one operation with one answer, and the difference between the two answers is the difference between a reading of the part and a pile of slabs.
This page works that out on the part the method’s own first example uses. There is no code on it; when you want to run this, go to Decomposing a part.
Tip
The part used throughout:
woo2003_figure_2.step
It is also the part the test suite holds the published answer against, so the counts below are gated rather than merely measured.
The part, and what asks to be cut#
A block, 100 × 60 × 20 mm, with a boss standing on the middle of it: a slot shape, two flat sides closed by two half-cylinders, 20 mm tall. Eleven faces.
The blue face is the block’s top — the floor the boss stands on. The orange face is one of the boss’s two flats, the purple ones its two round ends. Everywhere a boss side meets the blue floor, the material folds inward: those are the inside corners, and they are the only ones the part has.
So five faces carry an inside corner — the floor, and the boss’s four sides — and five faces are therefore carried on as sheets. Nothing else is.
Look at where the boss’s flats meet its round ends. The material does not fold in there and it does not fold out either: the surfaces run on smoothly into one another, tangentially. Those joins ask for no cut. They are about to do something else entirely.
A sheet with nothing to stop it#
Take the orange flat and carry its surface on with nothing to bound it. The flat is 30 × 20 mm. Its plane is this:
The part is in there, to scale. Used as a knife, that plane does not cut the boss away from the block: it cuts the block in two from end to end. The other flat’s plane does the same 20 mm away, and the two round ends’ surfaces, carried on, are full cylinders that punch straight through everything.
The sheet has to be trimmed. The question is what by.
Trimmed by the neighbours its own face meets#
Here is the answer the method gives, and it is a local one: a sheet is bounded by the faces its own face meets across edges that are not inside corners.
The flat meets the two round ends tangentially. Those two joins are not inside corners, so they bound it. Its sheet is therefore exactly as wide as the flat is, and reaches only as far as there is material to reach through:
The part is drawn see-through so the strip can be seen inside it. It starts at the inside corner that asked for it, keeps the width its own face has, and stops at the block’s underside because that is where the material stops.
The tangent joins have earned their keep. They carried no cut of their own; what they did was say how far their neighbour’s cut goes.
Five sheets, and a closed footprint#
Do the same for the other three boss sides and for the floor, and this is every piece of every sheet that is used:
The four boss sides — orange flats, purple ends — meet each other exactly where their faces were tangent, and together they close the boss’s footprint and carry it down through the block to its underside. Nothing about that was arranged in advance: each sheet was trimmed by its own neighbours, and the footprint closed because those neighbours are each other.
The blue lid is the floor’s own sheet, at the height of the block’s top, spanning the footprint. It arrives in three pieces rather than one because the round ends’ surfaces cross it, which costs nothing — pieces of one sheet, used together, cut as one.
That is five sheets, seven pieces, and every one of them inside the material.
Formally
An extension face is trimmed by the sheets of the faces its own face meets across non-concave edges, and by the solid. Of the trimmed pieces, a piece is used if it carries one of the concave edges that asked for the extension, or if it can be reached from such a piece across shared edges without crossing a bounding neighbour’s sheet, and lies in the material.
Reached, not merely marked: on a part of any size most used pieces carry no concave edge of their own and are kept because a piece that does is next to them.
The sheets are trimmed against one another before the solid is cut, rather than the
solid being cut and the result filtered. Both give the same cells here and on every
benchmark part measured, but only the first is the construction the method describes, and
it is the one the library performs. This is the localisation="material" setting, and
it is the default.
The cut#
Cutting the block with those seven pieces gives three cells:
Cell |
What it is |
Share of part |
|---|---|---|
blue |
the block, with the boss’s footprint taken out of it |
73.6 % |
orange |
the plug that fills that hole — buried, directly under the boss |
13.2 % |
green |
the boss itself |
13.2 % |
Three cells is the published answer for this part, and two maximal volumes come out of them: the block at 86.8 % of the part, the boss carried down through the block to its underside at 26.4 %. They share the plug, which is why they add to more than everything — How a part is broken into simple blocks is the page about that.
What the unlocalised reading does instead#
The library will also bound each sheet by nothing but how far the part reaches. That is the
localisation="none" setting, and here is what it does to this part:
Ten cells instead of three. Read what they are, because the count is the least of it:
The flats’ planes, unbounded, slice the block into three bands running its whole length — the two outer ones account for 28.9 % of the part each.
The round ends’ surfaces, unbounded, are full cylinders. They punch through the middle band, and they punch through the boss.
So the boss is no longer a cell. It arrives as a box with a cylinder on either side of it, floating at the top of the picture.
Nothing here is wrong, exactly. These ten cells still tile the part, and growing volumes over them returns the same two readings at the same two shares — the block at 86.8 %, the boss carried through at 26.4 %. What it cost was the work: ten cells to cut and collect where three would do, and three cells that can start a volume rather than two.
Both readings run on every benchmark part, and the gap between them is what makes the default affordable — every cell has to be cut, classified and collected:
Part |
Cells, localised |
Cells, unlocalised |
|---|---|---|
a machined bracket (ANC101) |
10 |
39 |
a clamp arm |
5 |
14 |
a cast bracket |
27 |
137 |
Do not read one ratio off the table, though. Localisation keeps a fifth of the cells on the cast bracket, a quarter on the machined bracket and over a third on the clamp arm. How much it earns depends on how much room the part leaves an unbounded sheet to do damage the bounded one does not, so the ratio is a property of the part, not a rate.
The unlocalised reading is kept for exactly one reason: it is the denominator. Saying that localisation removes most of the cells is a claim about two numbers, and this is the one that is otherwise never built. It is not a way to decompose a part.
Where to go next#
How a part is broken into simple blocks — the method end to end, on a part with no curves in it
Decomposing a part — how to run this on your own file, and the settings
Decomposition — the rest of this section