include ; wall = 1.2; pi_d = [65, 30, 2]; box_d = [pi_d[0] + wall*2 + 6, 48, 30]; e = 0.01; module pigateway() { module standoffs() { r = 3.5; n = 2.4; translate([r, r, 0]) { // Hole pads. for (x = [0, 58]) { for (y = [0, 23]) { translate([x, y, 0]) { cylinder(h, r, r); // Nubs translate([0, 0, h]) cylinder(h, n/2, n/2); } } } // Mid holdoffs. for (x = [1, 2, 3]) { y = 23/2; translate([x*58/4, y, 0]) cylinder(h, r, r); } } } translate([wall+2, wall*2, wall]) standoffs(); // Hole for the USB cables. usb_d = [(54-41)*2 + 3, 10, 9+2]; // The main box. difference() { rbox(box_d, wall, 3); translate([6, box_d[1] + wall*2, wall+h/2]) rotate(90, [1, 0, 0]) rcube(usb_d); } } module lid() { dim = [box_d[0], box_d[1], wall]; rim = 2; r = 9; module main() { rcube(dim); translate([wall, wall, 0]) rbox(dim - [2*wall, 2*wall, 0] + [0, 0, wall + rim], wall, 3); } module holes() { for (x = [1, 2, 3, 4, 5]) { for (y = [1, 2, 3]) { translate([x*dim[0]/6, y*dim[1]/4, -e]) cylinder(rim*2, r/2, r/2); } } } difference() { main(); holes(); } } $fn = 50; lid();