length = 76; width = 40; height = 20; r = 4; r_cable = 8; wall = 2.5; hole_dia = 4; hole_dist = 5; difference(){ minkowski(){ cylinder(r1 = r, r2 = r, $fn=100, true); cube([length-2*r, width-2*r, height], true); } translate([0, 0, wall]) minkowski() { cylinder(r1 = r, r2 = r, $fn=100, h=1e-100); cube([length - 2*wall - 2*r, width - 2*wall - 2*r, height - wall], true); } translate([length/2-wall/2, 0, height/2-r_cable+wall]) rotate([0, 90, 0]) union(){ cylinder(h=wall+1, r1=r_cable, r2=r_cable, center=true, $fn=100); translate([-r_cable/2, 0, 0]) cube([r_cable, 2*r_cable, wall+1], true); } translate([-(length/2-hole_dist), (width/2-hole_dist), -height/2+wall/2]) cylinder(r1=hole_dia/2, r2=hole_dia/2, $fn=100, h=wall*2, center=true); translate([(length/2-hole_dist), -(width/2-hole_dist), -height/2+wall/2]) cylinder(r1=hole_dia/2, r2=hole_dia/2, $fn=100, h=wall*2, center=true); } //difference() //translate([length/2-wall+1, 0, 0]) //rotate([0, 90, 0]) // cylinder(h=2*wall, r1=r_cable, r2=r_cable); //rotate([0, 90, 0]) union(){ // cylinder(h=wall, r1=r_cable, r2=r_cable, true); // translate([-r_cable/2, 0, 0]) cube([r_cable, 2*r_cable, wall], true); //} // r=4, d=5mm // translate([-(length/2-hole_dist), // (width/2-hole_dia/2-hole_dist), // 0]) cylinder(r1=hole_dia/2, r2=hole_dia/2, $fn=100, h=wall*2, center=true);