$fn=20; //How detailed should the sphere/cyl-s be. holder_height = 2.5; module rounded_cube(size = [1, 1, 1], center = false, radius = 0.04) { //Radii should be lesser than half of the min(size[0],size[1],size[2])! // If single value, convert to [x, y, z] vector size = (size[0] == undef) ? [size, size, size] : size; translate = (center == false) ? [radius, radius, radius] : [ radius - (size[0] / 2), radius - (size[1] / 2), radius - (size[2] / 2) ]; translate(v = translate) minkowski() { cube(size = [ size[0] - (radius * 2), size[1] - (radius * 2), size[2] - (radius * 2) ]); sphere(r = radius); } } color("red"){ union(){ difference(){ rounded_cube([3,3,1]); translate([1,1,0.5]){ rounded_cube([1,1,2]); } } translate([0,0,1]){ rounded_cube([3,1,5]); } translate([0,0,6]){ difference(){ rounded_cube([3,3,1]); translate([1,1,-0.5]){ rounded_cube([1,1,2]); } } } translate([0,0,2]){ difference(){ rounded_cube([3,3,1]); translate([1,1,-0.5]){ rounded_cube([1,1,2]); } } } translate([0,0,1]){ rounded_cube([3,1,5]); } translate([1,1,-holder_height+0.1]){ rounded_cube([1,1,holder_height]); } } }