module roundedCube(dims = [10, 10, 10], cornerRadii = [2, 2, 2]) { innerDims = [ dims[0] - cornerRadii[0]*2, dims[1] - cornerRadii[1]*2, dims[2] - cornerRadii[2]*2 ]; // X-Y translate(cornerRadii) scale([cornerRadii[0], cornerRadii[1], 1]) cylinder(r=1, h = innerDims[2]); translate([cornerRadii[0], cornerRadii[1] + innerDims[1], cornerRadii[2]]) scale([cornerRadii[0], cornerRadii[1], 1]) cylinder(r=1, h = innerDims[2]); translate([cornerRadii[0] + innerDims[0], cornerRadii[1] + innerDims[1], cornerRadii[2]]) scale([cornerRadii[0], cornerRadii[1], 1]) cylinder(r=1, h = innerDims[2]); translate([cornerRadii[0] + innerDims[0], cornerRadii[1], cornerRadii[2]]) scale([cornerRadii[0], cornerRadii[1], 1]) cylinder(r=1, h = innerDims[2]); translate([cornerRadii[0], cornerRadii[1], 0]) cube([innerDims[0], innerDims[1], dims[2]]); // X-Z translate(cornerRadii) scale([cornerRadii[0], 1, cornerRadii[2]]) rotate([-90, 0, 0]) cylinder(r=1, h = innerDims[1]); translate([cornerRadii[0] + innerDims[0], cornerRadii[1], cornerRadii[2]]) scale([cornerRadii[0], 1, cornerRadii[2]]) rotate([-90, 0, 0]) cylinder(r=1, h = innerDims[1]); translate([cornerRadii[0], cornerRadii[1], cornerRadii[2] + innerDims[2]]) scale([cornerRadii[0], 1, cornerRadii[2]]) rotate([-90, 0, 0]) cylinder(r=1, h = innerDims[1]); translate([cornerRadii[0] + innerDims[0], cornerRadii[1], cornerRadii[2] + innerDims[2]]) scale([cornerRadii[0], 1, cornerRadii[2]]) rotate([-90, 0, 0]) cylinder(r=1, h = innerDims[1]); translate([cornerRadii[0], 0, cornerRadii[2]]) cube([innerDims[0], dims[1], innerDims[2]]); // Y-Z translate([cornerRadii[0] + innerDims[0], cornerRadii[1] + innerDims[1], cornerRadii[2]]) scale([1, cornerRadii[1], cornerRadii[2]]) rotate([-90, 0, 90]) cylinder(r=1, h = innerDims[0]); translate([cornerRadii[0] + innerDims[0], cornerRadii[1], cornerRadii[2]]) scale([1, cornerRadii[1], cornerRadii[2]]) rotate([-90, 0, 90]) cylinder(r=1, h = innerDims[0]); translate([cornerRadii[0] + innerDims[0], cornerRadii[1] + innerDims[1], cornerRadii[2] + innerDims[2]]) scale([1, cornerRadii[1], cornerRadii[2]]) rotate([-90, 0, 90]) cylinder(r=1, h = innerDims[0]); translate([cornerRadii[0] + innerDims[0], cornerRadii[1], cornerRadii[2] + innerDims[2]]) scale([1, cornerRadii[1], cornerRadii[2]]) rotate([-90, 0, 90]) cylinder(r=1, h = innerDims[0]); translate([0, cornerRadii[1], cornerRadii[2]]) cube([dims[0], innerDims[1], innerDims[2]]); // corners translate(cornerRadii) scale(cornerRadii) sphere(r=1); translate([cornerRadii[0] + innerDims[0], cornerRadii[1], cornerRadii[2]]) scale(cornerRadii) sphere(r=1); translate([cornerRadii[0] + innerDims[0], cornerRadii[1] + innerDims[1], cornerRadii[2]]) scale(cornerRadii) sphere(r=1); translate([cornerRadii[0], cornerRadii[1] + innerDims[1], cornerRadii[2]]) scale(cornerRadii) sphere(r=1); translate([cornerRadii[0], cornerRadii[1], cornerRadii[2] + innerDims[2]]) scale(cornerRadii) sphere(r=1); translate([cornerRadii[0] + innerDims[0], cornerRadii[1], cornerRadii[2] + innerDims[2]]) scale(cornerRadii) sphere(r=1); translate([cornerRadii[0] + innerDims[0], cornerRadii[1] + innerDims[1], cornerRadii[2] + innerDims[2]]) scale(cornerRadii) sphere(r=1); translate([cornerRadii[0], cornerRadii[1] + innerDims[1], cornerRadii[2] + innerDims[2]]) scale(cornerRadii) sphere(r=1); }