module rounded_cube(x, y, z, rx=fillet, ry=fillet, rz=fillet, noback=true, nobottom=false, notop=false) { $fs = 0.15; union() { if (rx == ry && ry == rz) { minkowski() { translate([rx, rx, rx])cube([x-rx*2, y-rx*2, z-rx*2]); sphere(r = rx); } } else { minkowski() { translate([rz+ry, rz+rx, rz+ry])cube([x-rz*2-ry*2, y-rz*2-rx*2, z-rx*2-ry*2]); cylinder(r = rz, h = 0.01); rotate ([0, 90, 0]) cylinder(r = rx, h = 0.01); rotate ([90, 0, 0]) cylinder(r = ry, h = 0.01); } } if (noback) { minkowski() { translate([ry, y/2, ry])cube([x-ry*2, y/2, z-ry*2]); rotate ([90, 0, 0]) cylinder(r = ry, h = 0.01); } } if (nobottom) { minkowski() { translate([rz, rz, 0])cube([x-rz*2, y-rz*2, z/2]); rotate ([0, 0, 0]) cylinder(r = rz, h = 0.01); } } if (notop) { minkowski() { translate([rz, rz, z/2])cube([x-rz*2, y-rz*2, z/2]); rotate ([0, 0, 0]) cylinder(r = rz, h = 0.01); } } } } module rounded_cylinder(r, h, rrnd = fillet, rtop = true, rbottom = false, center=false) { $fs = 0.15; htr = center ? -h/2 : 0; translate([0, 0, htr]) union() { minkowski() { translate([0,0,rrnd]) cylinder(r=r-rrnd, h=h-rrnd*2); sphere(rrnd); } if (!rbottom) translate([0,0,h/2]) cylinder(r=r, h=h/2); if (!rtop) translate([0,0,0]) cylinder(r=r, h=h/2); } }