A case for Rev 1.0, in 19 glued pieces

/ DINO / updated 2026-11-06 / from dino-homebrew case 3d-printing build123d freecad blender rev-1-0

The Rev 1.0 boards are at PCBWay, so I designed the box they go in. It’s 359.6 x 288 x 115.6 mm, printed on a Prusa Core One in 19 pieces, glued and doweled. After that comes Bondo, sanding, more Bondo, and paint. Nothing is printed yet.

FreeCAD, exploded on every glue joint: four lid quarters, flat wall panels with box-joint fingers and floor tabs, the floor quarters under the Rev 1.0 board, the two front frame halves and the brand plate.
FreeCAD, exploded on every glue joint: four lid quarters, flat wall panels with box-joint fingers and floor tabs, the floor quarters under the Rev 1.0 board, the two front frame halves and the brand plate.

The case is a Python script (build123d) that reads the KiCad PCB for the outline, the five mounting holes, the eight card slots and the power header. If the board moves, the case moves with it. FreeCAD watches the output folder and reloads every piece when the script runs, so I check each change there before calling it done.

The front is a car grille

I started from a photo of a 70s Alfa Romeo nose and a sketch of my own.

The reference: a 70s Alfa Romeo nose.
The reference: a 70s Alfa Romeo nose.
My sketch: a flat rim, a 30-40 deg bevel in, an inset lip, the DINO panel with the intake and the LEDs. "Similar to a 70s sports car grill, '68 Camaro-esque."
My sketch: a flat rim, a 30-40 deg bevel in, an inset lip, the DINO panel with the intake and the LEDs. "Similar to a 70s sports car grill, ‘68 Camaro-esque."

The front is a picture frame on all four sides: a flat rim, a bevel going in, a small ledge, a square step, then the recessed panel. The first pass looked like a drawer front, so it got deeper and steeper.

Front frame
Depth, face to the wall33 mm
Flat rim14 mm
Bevel40 deg to the face, 22 mm deep
Ledge2 mm
Step8 mm
Outer edge chamfer4 mm at 45 deg

The cards come out the back, IBM PC style, one cutout per slot. Each side wall has six tall round-ended intake slots toward the front, 3 x 40 mm at 9 mm pitch, after the Apple IIe. The lid sits flush with the frame at the front and has a long shallow bevel down the sides and the back, 6 mm over 30 mm, about 11 deg.

The front panel is the brand

The front panel is the DINO wordmark, three raised bus lines (orange 0.6 mm, grey 1.0 mm, black 1.4 mm) and the eight OB LEDs, 5 mm reds in 5.2 mm bores at 10 mm pitch. The script reads the panel straight from the brand SVG, so nothing is retyped.

The LEDs sit top right. The last one ends where the black line (the longest one) ends, and it sits as far from the right edge as the D sits from the left.

Blender Cycles render of the front, showing 0xB4 on the OB LEDs (the isa image's pass byte). Rendered before the case was parted.
Blender Cycles render of the front, showing 0xB4 on the OB LEDs (the isa image’s pass byte). Rendered before the case was parted.

Renders in Blender, with the board

KiCad exports the whole board with its 3D models and colors as one glTF, and Blender drops it on the standoffs:

kicad-cli pcb export glb --subst-models --include-tracks --include-pads \
  --include-zones --include-silkscreen --include-soldermask -o board.glb dino_v0_0_2.kicad_pcb

That’s 97 MB and about 40 s to export, so it gets done once and reused. Cycles on the Mac GPU renders the hero, front, rear and lid-off views. In the lid-off view the eight card sockets line up under the back cutouts. The renders show the case before it was parted.

Lid off, with the Rev 1.0 board from KiCad's glTF export on its standoffs. Rendered before the case was parted.
Lid off, with the Rev 1.0 board from KiCad’s glTF export on its standoffs. Rendered before the case was parted.

Parting it for the printer

Every piece has to fit a 250 x 220 mm bed, and nothing on this computer is hollow. The first parting cut the tray into four corners, each a floor plus two walls standing up. That’s a big, tall, risky print, and the vents and the ATX hole would print with flat unsupported tops. So the tray is flat panels now, each printed lying down.

PieceCountSize (mm)Prints
Floor quarters4163 x 133-156 x 8, standoffs on topunderside down
Side wall halves4163 x 108 x 6outside down
Back wall halves2133-156 x 108 x 6outside down
Front wall halves2133-156 x 108 x 6outside down
Lid quarters4163 x 133-156 x 13roof down
Front frame halves2133-156 x 116 x 33face up
Brand plate1203.56 x 31.16 x 3face up

The walls were 4 mm, which leaves 1 mm of plastic each side of a 2 mm dowel hole. A dowel can’t cross a 90 deg corner in a 4 mm wall at all, because it comes out the other side. The walls are 6 mm now. The corners are box joints: each corner column is cut into seven bands, alternating between the side wall and the back or front wall, so the walls interlock and square themselves. The walls stand on the floor, with 20 mm tabs that go down through slots in it. Dowels (1.75 mm filament in 2.0 mm holes, 8 mm each side) go only where a seam runs along a panel’s own plane: the wall halves, the floor quarters, the frame to the tray, and the frame halves to each other.

The frame prints face up, with its back on the bed, so the 40 deg bevel never overhangs. The same goes for the brand plate, and face up also means the logo colors can be swapped by layer height. The plate sits in a seat with a 0.2 mm glue gap, and the frame is 3 mm deeper so the step still shows 8 mm. With the thicker walls I widened the rim from 12 to 14 mm, which keeps the plate at exactly the brand panel’s size.

The other side. The eight blue card sockets face the back wall's cutouts; the frame halves print face up, so the bevels never overhang.
The other side. The eight blue card sockets face the back wall’s cutouts; the frame halves print face up, so the bevels never overhang.

Open threads