case_inside_h = 54.5; case_standoff_h = 6.0; pcb_h = 1.6; switch_h = 12.2; glue_h = 0.2; tolerance = 0.7; height = case_inside_h - case_standoff_h - pcb_h - switch_h - glue_h - tolerance; eps = 0.01; base_w = 20; base_h = base_w; base_d = 5; stem_w = 10; stem_h = stem_w; plunger_w = 20; plunger_h = 25; plunger_d = 3; module narf(w, h, d) { translate([0, 0, 1]) minkowski(){ cube([w-2*d, h-2*d, eps], center=true); cylinder(d, d, 0, $fn=32); }; minkowski(){ cube([w-2*d, h-2*d, eps], center=true); cylinder(1, d, d, $fn=32); }; } rotate ([0, 180, 0]) { narf(base_w, base_h, base_d); translate([0, 0, height/2]) cube([stem_w, stem_h, height], center=true); translate([0, 0, height]) mirror([0, 0, 1]) narf(plunger_w, plunger_h, plunger_d); }