$fn = 20; through = 20; d = 4.5; e = 0.01; function midxy(a, b) = [(a[0]-b[0])/2, (a[1]-b[1])/2, 0]; function centerx(w) = [-w/2, 0, 0]; module rcube(s, r=2) { hull() { for (y = [r, s[1]-r]) { for (x = [r, s[0]-r]) { translate([x, y, 0]) { cylinder(r=r, s[2]); } } } } } module midmounts() { m = 2; ow = 18.5; oh = 6.5; h = 3; w = 7.5; w2 = 10; for (y = [h+m/2, h+oh-m/2]) { for (x = [-ow/2+m/2, ow/2-m/2]) { translate([x, y, -through/2]) { cylinder(d=m, through); } } } for (y = [h+oh-m/2]) { for (x = [-ow/2+m/2-w2, ow/2-m/2+w2]) { translate([x, y, -through/2]) { cylinder(d=m, through); } } } } module bar() { w = 100; h = 10; t = 2; r = 2; d = 28-t; d2 = d+5; translate(centerx(w)) { hull() { translate([r+d2, r, 0]) cylinder(r=r, t); translate([w-r-d2, r, 0]) cylinder(r=r, t); translate([0, d-r, 0]) cube([r, r, t]); translate([w-r, d-r, 0]) cube([r, r, t]); } } translate([0, d, 0]) { translate(centerx(w)) cube([w, t, t+2]); } } module assembly() { module cutout() { midmounts(); } difference() { bar(); cutout(); } } assembly();