use use use size=[48,30,37]; size1=[11,32,21]; size2=[20,32,15]; size3=[40,32,4.5]; size4=[20,32,7]; cr1 = 2; // corner radius br1 = 10; // bevel resolution module createbevel(bs,cr1,br1,tp = "topright") { if (tp == "topright") { bevel([ [bs[0]/2, 0, bs[2]/2], [0,1,0], 0], [ [bs[0]/2, 0, bs[2]/2], [1,0,1], 0], cr=cr1, cres=br1, l=bs[1]+2); } else if (tp == "topleft") { bevel([ [-bs[0]/2, 0, bs[2]/2], [0,1,0], 0], [ [bs[0]/2, 0, bs[2]/2], [-1,0,1], 0], cr=cr1, cres=br1, l=bs[1]+2); } else if (tp == "bottomleft") { bevel([ [-bs[0]/2, 0, -bs[2]/2], [0,1,0], 0], [ [bs[0]/2, 0, bs[2]/2], [-1,0,-1], 0], cr=cr1, cres=br1, l=bs[1]+2); } else if (tp == "bottomright") { bevel([ [bs[0]/2, 0, -bs[2]/2], [0,1,0], 0], [ [bs[0]/2, 0, bs[2]/2], [1,0,-1], 0], cr=cr1, cres=br1, l=bs[1]+2); } else if (tp == "topright_oi") { bevel([ [bs[0]/2, 0, bs[2]/2], [0,1,0], 0], [ [bs[0]/2, 0, bs[2]/2], [-1,0,1], 0], cr=cr1, cres=br1, l=bs[1]+2); } else if (tp == "bottomright_oi") { bevel([ [bs[0]/2, 0, -bs[2]/2], [0,1,0], 0], [ [bs[0]/2, 0, bs[2]/2], [-1,0,-1], 0], cr=cr1, cres=br1, l=bs[1]+2); } else if (tp == "topleft_oi") { bevel([ [-bs[0]/2, 0, bs[2]/2], [0,1,0], 0], [ [bs[0]/2, 0, bs[2]/2], [1,0,1], 0], cr=cr1, cres=br1, l=bs[1]+2); } else if (tp == "bottomleft_oi") { bevel([ [-bs[0]/2, 0, -bs[2]/2], [0,1,0], 0], [ [bs[0]/2, 0, bs[2]/2], [1,0,-1], 0], cr=cr1, cres=br1, l=bs[1]+2); } } difference() { cube(size,center=true); createbevel(size,cr1,br1,"topright"); createbevel(size,cr1,br1,"topleft"); createbevel(size,cr1,br1,"bottomleft"); createbevel(size,cr1,br1,"bottomright"); translate([20,0,-8.5]) difference() { cube(size1, center=true); createbevel(size1,cr1,br1,"topleft"); } translate([-20,0,-8.5]) difference() { cube(size1, center=true); createbevel(size1,cr1,br1,"topright"); } translate([0,0,-5]) cube(size2, center=true); translate([0,0,12]) cube(size3, center=true); translate([0,0,16]) cube(size4, center=true); translate([0,0,15]) { createbevel(size4,cr1,br1,"topright_oi"); createbevel(size4,cr1,br1,"topleft_oi"); } translate([0,0,17.5]) { createbevel(size4,cr1,br1,"bottomright_oi"); createbevel(size4,cr1,br1,"bottomleft_oi"); } translate([34,0,5]) createbevel(size4,cr1,br1,"bottomleft_oi"); translate([-34,0,5]) createbevel(size4,cr1,br1,"bottomright_oi"); translate([0,0,10]) cube([10,20,20], center=true); translate([-18,0,5]) cube([3,20,15], center=true); translate([18,0,5]) cube([3,20,15], center=true); translate([0,0,-20]) cylinder(h=10,r1=3,r2=3,center=true); translate([0,0,-14]) hexagon(10, 5); }