The dogs of war
This commit is contained in:
parent
62855b75dc
commit
d2c6145437
2 changed files with 102 additions and 102 deletions
|
@ -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();
|
||||
}
|
||||
|
|
114
case/top.scad
114
case/top.scad
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue