$fn=100;
wire = 8;
shell = 3;
height = 4;
width = wire+(2*shell);
bwidth = width+2;
blength = (wire + 1.5*shell)*2+2;
difference() {
union() {
// base end cylinders
translate([ 0, blength/2, 0]) rotate(a=[ 0, 0, 0]) cylinder(h=height,d1=bwidth,d2=bwidth);
translate([ 0, -blength/2, 0]) rotate(a=[ 0, 0, 0]) cylinder(h=height,d1=bwidth,d2=bwidth);
// base connecting box
translate([ -bwidth/2, -blength/2, 0]) cube([bwidth,blength,height],false);
}
union() {
// screw holes
translate([ 0, blength/2+3, -height*2]) rotate(a=[ 0, 0, 0]) cylinder(h=height*4,d1=wire/2,d2=wire/2);
translate([ 0, -blength/2-3, -height*2]) rotate(a=[ 0, 0, 0]) cylinder(h=height*4,d1=wire/2,d2=wire/2);
// wire holes
translate([ 0, wire/2+shell/2, -height*2]) rotate(a=[ 0, 0, 0]) cylinder(h=height*4,d1=wire,d2=wire);
translate([ 0, -(wire/2+shell/2), -height*2]) rotate(a=[ 0, 0, 0]) cylinder(h=height*4,d1=wire,d2=wire);
// wire exits
translate([ 0, -wire-shell/2, -height-.5]) cube([width/2+2,wire,height*3+1],false);
translate([ 0, shell/2, -height-.5]) cube([width/2+2,wire,height*3+1],false);
// center cut
translate([ -bwidth, -shell/2, height/2]) cube([blength, shell, height+1],false);
// end cuts
translate([ -bwidth, wire+shell/2, height/2]) cube([blength, bwidth, height+1],false);
translate([ -bwidth, -bwidth-wire-shell/2, height/2]) cube([blength, bwidth, height+1],false);
// cleanup cut on thin side
translate([ 0, -bwidth, height/2]) cube([ bwidth, blength, height],false);
}
}