Hexagonal Drawer Cell
A modular storage cell with a sliding drawer for small parts such as screws, SD cards and other bits. The hexagonal cells have flat tops and bottoms, so you can stack as many as you like into a honeycomb wall of drawers. The drawer has an even 0.3 mm clearance on all six faces, a front plate that doubles as a stop, an open top for easy reach and a round knob. One cell is 70 mm across flats and 100 mm deep (the cell and drawer layout is 172 x 114 x 70 mm). Print the cell standing on its back plate and the drawer on its flat bottom; no supports are needed. You can change the cell size, depth, wall thicknesses, sliding clearance, front plate thickness, opening ratio and knob radius.
# Hexagonal Modular Storage - stackable honeycomb cell with a sliding drawer
# In use: the drawer pulls out toward -Y (front). The hexagon has flat faces on top and bottom.
# Cells stack gap-free in a honeycomb pattern (offset every other column by half a pitch).
# Output is two parts: the cell (at the origin) and the drawer (placed beside it along X).
@param 40..120 desc:"Cell size across flats (mm)"
cell_f = 70
@param 60..200 desc:"Cell depth (mm)"
cell_d = 100
@param 1.2..4 step:0.1 desc:"Cell wall thickness (mm)"
wall = 2.0
@param 0.1..0.6 step:0.05 desc:"Drawer sliding clearance per side (mm)"
clear = 0.3
@param 1.2..3 step:0.1 desc:"Drawer wall thickness (mm)"
dwall = 1.6
@param 2..6 step:0.5 desc:"Front plate thickness (mm)"
front_t = 3
@param 0.3..0.8 step:0.05 desc:"Drawer top opening height (fraction of inner height, cut from the top)"
open_ratio = 0.45
@param 3..10 step:0.5 desc:"Knob radius (mm)"
knob_r = 6
# Hexagon: polygon's r is the circumradius. Across flats F -> circumradius R = F/sqrt(3)
s3 = sqrt(3)
R_out = cell_f / s3
R_in = (cell_f - wall * 2) / s3
R_dr = (cell_f - wall * 2 - clear * 2) / s3
R_drin = (cell_f - wall * 2 - clear * 2 - dwall * 2) / s3
zc = cell_f / 2 # height of the hexagon center (bottom flat at z=0)
# ---- Cell: open at the front (y=0), back plate of thickness wall at y=cell_d ----
cell_outer = workplane XZ | polygon 6 R_out at:(0, zc) | extrude cell_d
cell_void = workplane XZ | polygon 6 R_in at:(0, zc) | extrude (cell_d - wall + 1)
| translate 0 -1 0
cell = cell_outer - cell_void
# ---- Drawer ----
dr_len = cell_d - wall - 0.5 # 0.5mm relief at the back
dr_h_in = (cell_f - wall * 2 - clear * 2 - dwall * 2)
dr_body = workplane XZ | polygon 6 R_dr at:(0, zc) | extrude dr_len
dr_void = workplane XZ | polygon 6 R_drin at:(0, zc) | extrude (dr_len - dwall * 2)
| translate 0 dwall 0
# Cut away the top to leave an opening for your hand
open_cut = box (cell_f * 2) (dr_len - dwall * 2) (cell_f)
| floor
| translate 0 (dr_len / 2) (zc + dr_h_in / 2 - dr_h_in * open_ratio)
# Front plate (same hexagon as the cell outline; stops against the cell's front edge)
$front = workplane XZ | polygon 6 R_out at:(0, zc) | extrude front_t
| translate 0 (-front_t) 0
knob = cylinder knob_r 12 | rotate 90 0 0
| translate 0 (-front_t - 6 + 1) zc
drawer = (dr_body - dr_void - open_cut) + $front + knob
# Output both parts side by side (drawer next to the cell, in its in-use orientation)
cell
drawer | translate (cell_f * 1.3) 0 0