module shellify(thickness = 1) { difference() { minkowski() { children(); cube([thickness, thickness, thickness], center = true); } children(); } } module inset_3d(inset) { difference() { children(); minkowski() { shellify() { children(); } cube([inset * 2, inset * 2, inset * 2], center = true); } } } module round_edges(radius) { minkowski() { inset_3d(radius) { children(); } sphere(radius); } } module round_edges_except_bottom(radius) { minkowski() { inset_3d(radius) { children(); } union() { sphere(radius); translate([0, 0, -radius]) cylinder(r = radius, h = radius); } } } module test_object() { cube([10, 10, 5]); translate([2.5, 2.5, 4.9]) cube([5, 5, 5]); } round_edges_except_bottom(2, $fn = 32) test_object();