summaryrefslogtreecommitdiffstats
path: root/case/top.scad
blob: b27b3ffcf4f1d1cecbcb7ad9de1a88beb7f46ef7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
$fn = 72;

case_width_top     = 317.5000;
case_width_bottom  = 320.0000;
case_length_top    = 150.0000;
case_length_bottom = 151.5000;

wall_width  =  2.5000;
wall_height = 17.2500;

key_switch_width  = 19.0500;
key_switch_length = 19.0500;
keyboard_width    = key_switch_width  * 13.5;
keyboard_length   = key_switch_length *  5.0;
keyboard_x_offset = 12.2500;
keyboard_y_offset = 12.2500;

accent_width    =  1.0000;
accent_depth    = 0.5;
accent_y_stride = (keyboard_length - accent_width) / 5.0;
accent_y_bottom = keyboard_y_offset;

fin_width        =  2.0000;
fin_gap_width    =  2.0000;
fin_gap_length   =  2.0000;
fin_gap_height   = 12.0000;
fin_gap_count    = 33;
fin_gap_x_first  = keyboard_x_offset + keyboard_width - fin_gap_count * (fin_width + fin_gap_width);
fin_gap_y_offset = case_length_bottom - fin_gap_length;

module fascia() {
    linear_extrude(wall_width)
    difference() {
        square([case_width_bottom, case_length_bottom], false);
        translate([keyboard_x_offset, keyboard_y_offset, 0])
        square([keyboard_width, keyboard_length], false);
    }
}

module fin_gaps() {
    for (i = [0:fin_gap_count]) {
        x = fin_gap_x_first + (i * (fin_width + fin_gap_width));
        
        translate([x, fin_gap_y_offset, wall_height - fin_gap_height])
        cube([fin_gap_width, fin_gap_length, fin_gap_height], false);
    }    
}

module accents() {
    for (y = [accent_y_bottom: accent_y_stride: case_length_bottom]) {
        /* Top */
        translate([0, y, wall_height - accent_depth])
        cube([case_width_bottom, accent_width, accent_depth], false);
        
        /* Left */
        translate([0, y, 0])
        cube([accent_depth, accent_width, wall_height], false);
    }
}

module top_case() {
    translate([0, 0, wall_height - wall_width])
    fascia();
    
    cube([wall_width, case_length_bottom, wall_height - wall_width], false);
}

difference() {
    top_case();
    accents();
    fin_gaps();
}