48 lines
1.6 KiB
OpenSCAD
48 lines
1.6 KiB
OpenSCAD
|
module pill(length, bevel) {
|
||
|
hull() {
|
||
|
translate([0, 0, (-length / 2) + bevel]) sphere(r = bevel);
|
||
|
translate([0, 0, (length / 2) - bevel]) sphere(r = bevel);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module box_face(length, width, wall_thickness, bevel) {
|
||
|
center_width = width - bevel * 2;
|
||
|
center_length = length - bevel * 2;
|
||
|
|
||
|
hull() {
|
||
|
translate([-center_width / 2, -center_length / 2, 0])
|
||
|
pill(wall_thickness, bevel);
|
||
|
translate([center_width / 2, -center_length / 2, 0])
|
||
|
pill(wall_thickness, bevel);
|
||
|
translate([center_width / 2, center_length / 2, 0])
|
||
|
pill(wall_thickness, bevel);
|
||
|
translate([-center_width / 2, center_length / 2, 0])
|
||
|
pill(wall_thickness, bevel);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module channel(length, width, height) {
|
||
|
union() {
|
||
|
translate([0, 0, -height / 2 + wall_thickness / 2])
|
||
|
box_face(length, width, wall_thickness, bevel);
|
||
|
translate([-width / 2 + wall_thickness / 2, 0, 0]) rotate([0, 90, 0])
|
||
|
box_face(length, height, wall_thickness, bevel);
|
||
|
translate([width / 2 - wall_thickness / 2, 0, 0]) rotate([0, 90, 0])
|
||
|
box_face(length, height, wall_thickness, bevel);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module box(length, width, height) {
|
||
|
union() {
|
||
|
channel(length, width, height);
|
||
|
|
||
|
translate([0, -length / 2 + wall_thickness / 2, 0]) rotate([90, 0, 0])
|
||
|
box_face(height, width, wall_thickness, bevel);
|
||
|
|
||
|
translate([0, length / 2 - wall_thickness / 2, 0]) rotate([90, 0, 0])
|
||
|
box_face(height, width, wall_thickness, bevel);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|