module cubed(size = [10, 10, 10], radius = 0, center = true/false) { if (radius < 1) { cube(size, center); } else { move = center ? [0, 0, 0] : [size.x / 2, size.y / 2, size.z / 2]; translate(move) { union() { cube([size.x - radius * 2, size.y - radius * 2, size.z], center = true); cube([size.x - radius * 2, size.y, size.z - radius * 2], center = true); cube([size.x, size.y - radius * 2, size.z - radius * 2], center = true); translate([size.x / -2 + radius, size.y / -2 + radius, size.z / -2 + radius]) sphere(radius); translate([size.x / 2 - radius, size.y / -2 + radius, size.z / -2 + radius]) sphere(radius); translate([size.x / -2 + radius, size.y / 2 - radius, size.z / -2 + radius]) sphere(radius); translate([size.x / 2 - radius, size.y / 2 - radius, size.z / -2 + radius]) sphere(radius); translate([size.x / -2 + radius, size.y / -2 + radius, size.z / 2 - radius]) sphere(radius); translate([size.x / 2 - radius, size.y / -2 + radius, size.z / 2 - radius]) sphere(radius); translate([size.x / -2 + radius, size.y / 2 - radius, size.z / 2 - radius]) sphere(radius); translate([size.x / 2 - radius, size.y / 2 - radius, size.z / 2 - radius]) sphere(radius); translate([size.x / -2 + radius, size.y / -2 + radius, 0]) cylinder(h = size.z - radius * 2, r = radius, center = true); translate([size.x / 2 - radius, size.y / -2 + radius, 0]) cylinder(h = size.z - radius * 2, r = radius, center = true); translate([size.x / 2 - radius, size.y / 2 - radius, 0]) cylinder(h = size.z - radius * 2, r = radius, center = true); translate([size.x / -2 + radius, size.y / 2 - radius, 0]) cylinder(h = size.z - radius * 2, r = radius, center = true); rotate([0, 90, 0]) { translate([size.z / 2 - radius, size.y / -2 + radius, 0]) cylinder(h = size.x - radius * 2, r = radius, center = true); translate([size.z / 2 - radius, size.y / 2 - radius, 0]) cylinder(h = size.x - radius * 2, r = radius, center = true); translate([size.z / -2 + radius, size.y / -2 + radius, 0]) cylinder(h = size.x - radius * 2, r = radius, center = true); translate([size.z / -2 + radius, size.y / 2 - radius, 0]) cylinder(h = size.x - radius * 2, r = radius, center = true); } rotate([90, 0, 0]) { translate([size.x / 2 - radius, size.z / -2 + radius, 0]) cylinder(h = size.y - radius * 2, r = radius, center = true); translate([size.x / 2 - radius, size.z / 2 - radius, 0]) cylinder(h = size.y - radius * 2, r = radius, center = true); translate([size.x / -2 + radius, size.z / -2 + radius, 0]) cylinder(h = size.y - radius * 2, r = radius, center = true); translate([size.x / -2 + radius, size.z / 2 - radius, 0]) cylinder(h = size.y - radius * 2, r = radius, center = true); } } } } }