Nothing stands proud of a surface you sit on or stand under
Reported for the third time, and the first two answers were wrong in the same
way: I treated "it should not be visible" as a number to reduce rather than a
rule to satisfy. The bench's through-tenons went 42 mm proud, then 3 mm, and
3 mm is still a raised patch with a lit edge on it — visible in the render,
and the thing being complained about. The market stall then reproduced it
exactly: four post heads through the awning, like tacks.
Both were pushed proud DELIBERATELY, to keep two faces out of one plane and
away from the z-fight check. That trade is false, and this is the sentence
worth keeping: a piece that must not show ends INSIDE the solid it enters. A
buried face cannot be coplanar with a surface and cannot be seen. Level with
the surface is the only genuinely bad option, and it was the one I kept
treating as the alternative.
- The bench's tenon is now housed an eighth of the seat's thickness below
the top. That is a real joint rather than a compromise: a stub tenon into
the underside of a board is how a bench is made when the top is thick
enough to take it, which at 0.135 of the height it is. What is lost is the
panel of end grain; what is gained is a seat.
- The stall's posts stop ON the cloth's mid surface, with half its thickness
over them, and the cloth went from 0.2 of a board to 0.42 so there is
something to bury them in. The heads now sit 25 mm under the top surface.
And the brief is a check now, because a rule I keep is worth less than a rule
the build keeps. `nothingAbove` names the part nothing else may rise above —
the seat, the counter, the awning — and it reports the offender and the
millimetres. Mutation-tested: pushing the tenon back to 3 mm proud fails it
with "PROUD: legs by 3.0mm".
38 models, all checks pass, 0 floating cases, documentation in step.
This commit is contained in:
parent
672041cceb
commit
4730973fbd
8 changed files with 123 additions and 38 deletions
|
|
@ -231,8 +231,14 @@ export function createModel(overrides: Partial<MarketStallConfig> = {}) {
|
|||
|
||||
for (const sx of [-1, 1] as const) {
|
||||
for (const sz of [-1, 1] as const) {
|
||||
// A shade past the cloth's mid surface, so the head is buried in it.
|
||||
const head = clothY(sx * postX, sz * legZ) + boardT * 0.15
|
||||
// ON the cloth's mid surface, so half its thickness covers the head.
|
||||
//
|
||||
// A shade PAST it was the first version, and four dark post heads
|
||||
// came through the awning like tacks — the same fault as the bench's
|
||||
// tenons and made for the same reason: pushed proud to keep two
|
||||
// faces out of one plane. Buried does that too, and cannot be seen
|
||||
// doing it.
|
||||
const head = clothY(sx * postX, sz * legZ)
|
||||
// Down PAST the rail and finishing as a stub below it, which is both
|
||||
// the reference's detail and the fix for a real fault: stopped at the
|
||||
// rail's underside, the post's foot lay in the same plane as it,
|
||||
|
|
@ -269,7 +275,10 @@ export function createModel(overrides: Partial<MarketStallConfig> = {}) {
|
|||
levels.push({
|
||||
y: halfDepth * (f * 2 - 1),
|
||||
halfWidth: halfLength,
|
||||
thickness: boardT * 0.2,
|
||||
// Thick enough to hide a post head in. At 0.2 of a board there was
|
||||
// barely three millimetres of cloth either side of the mid surface,
|
||||
// which is not enough to bury anything in with confidence.
|
||||
thickness: boardT * 0.42,
|
||||
// Deeper at the front than the back. Cloth pulled over a ridge and
|
||||
// left loose at the eaves does not hang symmetrically.
|
||||
curve: sag * (0.72 + f * 0.55),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue