Three printed posts were supposed to tie the base of the case to its body. Measured against the shell, two of them touched it nowhere at all and the third grazed it over six tenths of a millimetre. What held the front pair up was the screen bracket, whose screw holes they were plugging at the same time.
1The goal
The case is a wedge with its underside open. Everything lives in there: two boards, the battery, the wiring. A separate plate closes it, and three screws pull that plate up into the body. Those three anchors are the entire mechanical connection between the two halves of the machine.
2What they touched
A post is a cylinder standing near a corner. Looking at it on screen, it sits in the corner and reads as part of the case. Intersect it with the shell and ask how much space the two share, and the answer for the front pair is nothing at all.
Looking down on the front-left corner. The old post cleared both walls by 4.4 mm, so it was a separate solid that happened to be inside the case. The pad is driven straight through the corner and then trimmed by the outer skin, which is what makes it part of the wall rather than something resting against it.
With the baseplate drawn in, the second problem shows up too. Tap a claim for the measurement behind it:
The baseplate is the pale slab. The old post also began at the floor rather than on top of the plate, so it occupied space the plate needed: 343 mm³ of the two solids were the same space, and the plate could not seat. The pad starts where the plate ends.
3The idea
Stop making columns. A cylinder near a wall is a separate thing that has to be brought into contact with it, and the drawing has to get that contact right. A rectangular pad can be made continuous with the wall by construction instead: oversize the block so it runs clean through the corner and out the other side, then trim it with the outer shell. Whatever survives is by definition the case.
Nothing then depends on a gap being right. The pad cannot be short of the wall, because the wall is what cut it to shape.
4The risk
A pad fused to two walls has no reason to be tall. The walls carry it, so height is only ever about how much thread the screw gets, and filling the corner all the way to the deck would be solid plastic paying for nothing.
Ten millimetres is what the screw asks for: it leaves an 8 mm blind pilot and about 7.4 mm of bite, near three times the screw's own diameter, which is what a self-tapper wants in a printed part. It also keeps the pad well clear of the screen bracket's mounts overhead, which is the mistake that started this.
5The change
Each pad is a box that reaches from well outside the case to a fixed distance past the screw axis, cut back by the shell. The pilots are cut afterwards, once every pad is in place.
# hardware/case/typoena-case.scad-module corner_posts() {- for (p = post_xy)- translate([p[0], p[1], 0]) cylinder(h = h, r = post_r); # free-standing-}+module screw_bosses() {+ intersection() {+ body_outer(); # the shell does the trimming+ for (b = post_box)+ translate([b[0], b[2], bp_t]) cube([b[1]-b[0], b[3]-b[2], post_h]);+ }+}
Cutting the pilots last matters more than it looks. A hole cut inside its own post can be filled straight back in by a neighbour that grows into it afterwards, silently. That is precisely what the old posts did to the screen bracket.
6The result
before1.7mm³shared with the shell
after1440.3mm³shared with the shell
the anchors intersected with the bare shell: walls, floor and deck, with nothing else in the model
The plate clash goes to nothing at the same time: 342.69 mm³ down to zero, because the pads now start on top of the plate rather than at the floor. The bracket's pilots come back open, and the body is a single connected solid on the standard case and on both integrated-keyboard variants.