use <layout/layout.scad> use <validation/validate.scad> use <soften/fillet.scad> use <soften/square.scad> include <constants/all.scad>
module soft_cube(size, r=0, center=false, sidesonly=true) {
x_dim = len(size) ? size.x : size; y_dim = len(size) ? size.y : size; z_dim = len(size) ? size.z : size; if(r == 0) { cube(size, center); } else if(sidesonly) { render() translate(center ? [0,0,-z_dim/2] : [x_dim/2, y_dim/2,0]) linear_extrude(z_dim) soft_square([x_dim, y_dim], r, center=true); } else { // FIXME: this has different $fn for different corners hull() difference() { soft_cube(size,r=r,center=true); mirror_xyz() translate([-x_dim/2, -y_dim/2, -z_dim/2]) fillet(x_dim, r, x_axis); mirror_xyz() translate([-x_dim/2, -y_dim/2, -z_dim/2]) fillet(y_dim, r, y_axis); mirror_xyz() difference() { translate([-x_dim/2, -y_dim/2, -z_dim/2]) cube(r); translate([-x_dim/2+r, -y_dim/2+r, -z_dim/2+r]) sphere(r=r); } } }
}