The dogs of war

This commit is contained in:
XANTRONIX 2023-11-16 20:16:24 -05:00
parent 62855b75dc
commit d2c6145437
2 changed files with 102 additions and 102 deletions

View file

@ -26,3 +26,93 @@ keyboard_pcb_screw_holes = [
[123.8250, 9.5250],
[238.1250, 9.5250]
];
module keyboard_deck(wall_width) {
key_switch_footprint = [15.25, 15.25];
eps = 0.01;
function add(v) = [for(p=v) 1]*v;
function slice(v, x, y) = [for (i=[x:y]) v[i]];
function addrange(v, x, y) = add(slice(v, x, y));
module screw_holes() {
pcb_screw_diameter = 2.5;
for (screw_hole = keyboard_pcb_screw_holes) {
translate([screw_hole[0], screw_hole[1], -eps])
cylinder(h=wall_width+2*eps, d=pcb_screw_diameter);
}
}
module key_switch_plate(key_switch_size) {
plate_width = keyboard_switch_width * key_switch_size;
plate_length = keyboard_switch_length;
if (key_switch_size <= 0.5) {
cube([keyboard_switch_width * key_switch_size,
keyboard_switch_length,
wall_width], false);
} else {
hole_width = key_switch_footprint[0];
hole_length = key_switch_footprint[1];
hole_x = plate_width / 2 - hole_width / 2;
hole_y = plate_length / 2 - hole_length / 2;
difference() {
cube([plate_width + eps, plate_length + eps, wall_width], false);
translate([hole_x, hole_y, -eps])
cube([hole_width, hole_length, wall_width + 2*eps], false);
}
}
}
module walls() {
/* Upper */
translate([-wall_width, keyboard_pcb_length, 0])
cube([keyboard_pcb_width + 2 * wall_width, wall_width, keyboard_switch_height], false);
/* Right */
translate([keyboard_pcb_width, -wall_width, 0])
cube([wall_width, keyboard_pcb_length + 2 * wall_width, keyboard_switch_height], false);
/* Lower */
translate([-wall_width, -wall_width, 0])
cube([keyboard_pcb_width + 2 * wall_width, wall_width, keyboard_switch_height], false);
/* Left */
translate([-wall_width, -wall_width, 0])
cube([wall_width, keyboard_pcb_length + 2 * wall_width, keyboard_switch_height], false);
}
module body() {
rows = len(keyboard_switch_sizes);
for (i = [0: rows-1]) {
y = keyboard_switch_length * (rows - 1 - i);
key_switch_row = keyboard_switch_sizes[i];
cols = len(key_switch_row);
for (j = [0: cols-1]) {
x = keyboard_switch_width * ((j == 0)?
0:
addrange(key_switch_row, 0, j-1));
key_switch_size = key_switch_row[j];
translate([x, y, 0])
key_switch_plate(key_switch_size);
}
}
}
difference() {
body();
screw_holes();
}
walls();
}

View file

@ -11,8 +11,6 @@ module top_case(key_switch_sizes, pcb_screw_holes) {
wall_width = 2.5000;
wall_height = 17.2500;
keyboard_width = keyboard_switch_width * 13.5;
keyboard_length = keyboard_switch_length * 5.0;
keyboard_x_offset = 12.2500;
keyboard_y_offset = 12.2500;
@ -20,14 +18,14 @@ module top_case(key_switch_sizes, pcb_screw_holes) {
accent_width = 1.0000;
accent_depth = 0.5;
accent_y_stride = (keyboard_length - accent_width) / 5.0;
accent_y_stride = (keyboard_pcb_length - accent_width) / 5.0;
accent_y_bottom = keyboard_y_offset;
vent_width = 2.0000;
vent_length = wall_width;
vent_height = 12.0000;
vent_count = 32;
vent_x_first = keyboard_x_offset + keyboard_width - vent_count * (vent_width + vent_width);
vent_x_first = keyboard_x_offset + keyboard_pcb_width - vent_count * (vent_width + vent_width);
vent_y_offset = case_length_bottom - vent_length;
support_width = 1.2500;
@ -48,7 +46,7 @@ module top_case(key_switch_sizes, pcb_screw_holes) {
cube([case_width_bottom, case_length_bottom, wall_width], false);
translate([keyboard_x_offset, keyboard_y_offset, -eps])
cube([keyboard_width, keyboard_length, wall_width + 2*eps], false);
cube([keyboard_pcb_width, keyboard_pcb_length, wall_width + 2*eps], false);
}
}
@ -160,20 +158,20 @@ module top_case(key_switch_sizes, pcb_screw_holes) {
}
}
support_x_interval = (keyboard_width + 2 * wall_width - support_width) / 6;
support_x_interval = (keyboard_pcb_width + 2 * wall_width - support_width) / 6;
support_x_offset = keyboard_x_offset - wall_width;
support_y_interval = (keyboard_length + 2 * wall_width - support_width) / 4;
support_y_interval = (keyboard_pcb_length + 2 * wall_width - support_width) / 4;
support_y_offset = keyboard_y_offset;
/* Upper vertical supports */
upper_support_length = case_length_bottom
- keyboard_length
- keyboard_pcb_length
- keyboard_y_offset
- 2 * wall_width;
upper_support_y_offset = keyboard_y_offset
+ keyboard_length
+ keyboard_pcb_length
+ wall_width;
/* Lower vertical supports */
@ -186,15 +184,15 @@ module top_case(key_switch_sizes, pcb_screw_holes) {
/* Right horizontal supports */
right_support_length = case_width_bottom
- keyboard_width
- keyboard_pcb_width
- keyboard_x_offset
- 2 * wall_width;
right_support_x_offset = keyboard_x_offset
+ keyboard_width
+ keyboard_pcb_width
+ wall_width;
for (x = [0: support_x_interval: keyboard_width + 2 * wall_width]) {
for (x = [0: support_x_interval: keyboard_pcb_width + 2 * wall_width]) {
translate([support_x_offset + x,
upper_support_y_offset - eps,
wall_height - wall_width])
@ -206,7 +204,7 @@ module top_case(key_switch_sizes, pcb_screw_holes) {
support([lower_support_length + 2*eps, keyboard_switch_height], support_width);
}
for (y = [0: support_y_interval: keyboard_length + 2 * wall_width]) {
for (y = [0: support_y_interval: keyboard_pcb_length + 2 * wall_width]) {
translate([right_support_x_offset - eps,
support_y_offset + y - wall_width + support_width,
wall_height - wall_width])
@ -240,94 +238,6 @@ module top_case(key_switch_sizes, pcb_screw_holes) {
cube([wall_width, case_length_bottom, wall_height], false);
}
module keyboard_deck() {
key_switch_footprint = [15.25, 15.25];
function add(v) = [for(p=v) 1]*v;
function slice(v, x, y) = [for (i=[x:y]) v[i]];
function addrange(v, x, y) = add(slice(v, x, y));
module screw_holes() {
pcb_screw_diameter = 2.5;
for (screw_hole = pcb_screw_holes) {
translate([screw_hole[0], screw_hole[1], -eps])
cylinder(h=wall_width+2*eps, d=pcb_screw_diameter);
}
}
module key_switch_plate(key_switch_size) {
plate_width = keyboard_switch_width * key_switch_size;
plate_length = keyboard_switch_length;
if (key_switch_size <= 0.5) {
cube([keyboard_switch_width * key_switch_size,
keyboard_switch_length,
wall_width], false);
} else {
hole_width = key_switch_footprint[0];
hole_length = key_switch_footprint[1];
hole_x = plate_width / 2 - hole_width / 2;
hole_y = plate_length / 2 - hole_length / 2;
difference() {
cube([plate_width + eps, plate_length + eps, wall_width], false);
translate([hole_x, hole_y, -eps])
cube([hole_width, hole_length, wall_width + 2*eps], false);
}
}
}
module walls() {
/* Upper */
translate([-wall_width, keyboard_length, 0])
cube([keyboard_width + 2 * wall_width, wall_width, keyboard_switch_height], false);
/* Right */
translate([keyboard_width, -wall_width, 0])
cube([wall_width, keyboard_length + 2 * wall_width, keyboard_switch_height], false);
/* Lower */
translate([-wall_width, -wall_width, 0])
cube([keyboard_width + 2 * wall_width, wall_width, keyboard_switch_height], false);
/* Left */
translate([-wall_width, -wall_width, 0])
cube([wall_width, keyboard_length + 2 * wall_width, keyboard_switch_height], false);
}
module body() {
rows = len(key_switch_sizes);
for (i = [0: rows-1]) {
y = keyboard_switch_length * (rows - 1 - i);
key_switch_row = key_switch_sizes[i];
cols = len(key_switch_row);
for (j = [0: cols-1]) {
x = keyboard_switch_width * ((j == 0)?
0:
addrange(key_switch_row, 0, j-1));
key_switch_size = key_switch_row[j];
translate([x, y, 0])
key_switch_plate(key_switch_size);
}
}
}
difference() {
body();
screw_holes();
}
walls();
}
difference() {
body();
accents();
@ -338,7 +248,7 @@ module top_case(key_switch_sizes, pcb_screw_holes) {
screw_posts();
translate([keyboard_x_offset, keyboard_y_offset, keyboard_deck_z_offset])
keyboard_deck();
keyboard_deck(wall_width);
}
top_case(keyboard_switch_sizes, keyboard_pcb_screw_holes);