monorepo/bike-lights/case/common.scad

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