xantronix-z32/case/case.scad

144 lines
4.3 KiB
OpenSCAD
Raw Normal View History

2023-11-11 14:21:39 -05:00
$fn = 72;
2023-11-11 04:28:53 -05:00
pcb_width = 257.175;
pcb_height = 95.250;
2023-11-11 14:21:39 -05:00
module keyboard_base_plate(pcb_width, pcb_height) {
pcb_clearance_edge = 1.0;
pcb_clearance_bottom = 2.0;
2023-11-11 15:59:01 -05:00
2023-11-11 16:50:11 -05:00
thickness = 2.0;
2023-11-11 18:12:21 -05:00
wall_height = 14.0;
2023-11-11 15:59:01 -05:00
corner_radius = thickness / 2.0;
2023-11-11 15:59:01 -05:00
module round_corner(translation, rotation) {
2023-11-11 14:21:39 -05:00
translate(translation)
rotate(rotation)
rotate_extrude(angle=90) {
intersection() {
circle(r=corner_radius);
square(corner_radius*2);
}
}
}
2023-11-11 18:53:21 -05:00
module round_edge(translation, rotation, length) {
2023-11-11 14:21:39 -05:00
translate(translation)
rotate(rotation)
linear_extrude(length)
intersection() {
2023-11-11 04:28:53 -05:00
circle(r=corner_radius);
square(corner_radius*2);
}
}
2023-11-11 18:12:21 -05:00
module side(translation, dimensions) {
translate(translation)
linear_extrude(dimensions[2])
square([dimensions[0], dimensions[1]], false);
}
2023-11-11 18:53:21 -05:00
module wall_corner(translation, rotation, radius, length) {
translate(translation)
rotate(rotation)
linear_extrude(length)
intersection() {
circle(r=radius);
square([radius, radius], false);
}
}
2023-11-11 15:37:03 -05:00
/* Lower left corner */
2023-11-11 15:59:01 -05:00
round_corner([0 - pcb_clearance_edge,
0 - pcb_clearance_edge, 0], [-90, 90, 90]);
2023-11-11 14:21:39 -05:00
2023-11-11 15:37:03 -05:00
/* Upper left orner */
2023-11-11 15:59:01 -05:00
round_corner([0 - pcb_clearance_edge,
pcb_clearance_edge + pcb_height, 0], [0, 90, 90]);
2023-11-11 14:21:39 -05:00
2023-11-11 15:37:03 -05:00
/* Upper right corner */
2023-11-11 15:59:01 -05:00
round_corner([pcb_clearance_edge + pcb_width,
pcb_clearance_edge + pcb_height, 0], [90, 90, 90]);
2023-11-11 14:21:39 -05:00
2023-11-11 15:37:03 -05:00
/* Lower right corner */
2023-11-11 15:59:01 -05:00
round_corner([ pcb_clearance_edge + pcb_width,
0 - pcb_clearance_edge, 0], [180, 90, 90]);
2023-11-11 14:21:39 -05:00
2023-11-11 18:12:21 -05:00
/* Upper edge */
2023-11-11 18:53:21 -05:00
round_edge([0 - pcb_clearance_edge,
pcb_clearance_edge + pcb_height, 0], [0, 90, 0],
2 * pcb_clearance_edge + pcb_width);
2023-11-11 15:37:03 -05:00
2023-11-11 14:21:39 -05:00
/* Right edge */
2023-11-11 18:53:21 -05:00
round_edge([ pcb_clearance_edge + pcb_width,
0 - pcb_clearance_edge, 0], [270, 0, 0],
2 * pcb_clearance_edge + pcb_height);
2023-11-11 15:37:03 -05:00
2023-11-11 18:12:21 -05:00
/* Lower edge */
2023-11-11 18:53:21 -05:00
round_edge([0 - pcb_clearance_edge,
0 - pcb_clearance_edge, 0], [90, 180, 90],
2 * pcb_clearance_edge + pcb_width);
2023-11-11 15:37:03 -05:00
2023-11-11 14:21:39 -05:00
/* Left edge */
2023-11-11 18:53:21 -05:00
round_edge([0 - pcb_clearance_edge,
0 - pcb_clearance_edge, 0], [270, 90, 0],
2 * pcb_clearance_edge + pcb_height);
2023-11-11 14:21:39 -05:00
2023-11-11 18:53:21 -05:00
/* Upper right wall corner */
wall_corner([pcb_clearance_edge + pcb_width,
pcb_clearance_edge + pcb_height, 0],
[0, 0, 0],
corner_radius,
wall_height);
/* Lower right wall corner */
wall_corner([ pcb_clearance_edge + pcb_width,
0 - pcb_clearance_edge, 0],
[0, 0, 270],
corner_radius,
wall_height);
/* Lower left wall corner */
wall_corner([0 - pcb_clearance_edge,
0 - pcb_clearance_edge, 0],
[0, 0, 180],
corner_radius,
wall_height);
/* Upper left wall corner */
wall_corner([0 - pcb_clearance_edge,
pcb_clearance_edge + pcb_height, 0],
[0, 0, 90],
corner_radius,
wall_height);
2023-11-11 18:12:21 -05:00
/* Upper wall */
side([ 0 - pcb_clearance_edge,
pcb_height, 0],
[thickness + pcb_width,
thickness,
wall_height]);
/* Right wall */
side([pcb_width, 0 - pcb_clearance_edge, 0],
[thickness, thickness + pcb_height, wall_height]);
/* Lower wall */
side([0 - pcb_clearance_edge, 0 - thickness, 0],
[thickness + pcb_width, thickness, wall_height]);
/* Left wall */
side([0 - thickness, 0 - pcb_clearance_edge, 0],
[thickness, thickness + pcb_height, wall_height]);
/* Bottom plate */
side([ 0 - pcb_clearance_edge,
0 - pcb_clearance_edge,
-thickness / 2],
[2 * pcb_clearance_edge + pcb_width,
2 * pcb_clearance_edge + pcb_height,
thickness]);
2023-11-11 14:21:39 -05:00
}
keyboard_base_plate(pcb_width, pcb_height);