
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);
}
}
}
}
}