summaryrefslogtreecommitdiff
path: root/body/holes.scad
blob: 0512fda773e182566b4e60abcf2ddc09d0f3231f (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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
include <design.scad>
include <helpers.scad>

// `Heat` in module name means heat brass threaded insert

// in scanner coords:
// Z facing towards laser beam
// X facing right on laser beam plane
// Y facing top (for scanner body)
hole_side_front = 0;
hole_side_back = 1;
hole_side_top = 2;
hole_side_bottom = 3;
hole_side_left = 4;
hole_side_right = 5;

// some draft here, don't pay attention:
// id - insert diameter
// il - insert length (unused?)
// m - screw deameter, like M2
// r - glass corner radius
// hole_side - see hole_side_* values above. affects hole
// initial position. unused here, glass is always facing Z+
// in scanner coords
// TODO: cleanup unused params
//module glass_hole(id, il, m, r, hole_side)

// gw - glass width
// gh - glass height
// gt - glass thickness
// gcr - glass corner radius
module glass_hole(gw, gh, gt, gcr)
{
    wt = $scannerBodyWallThicknessMm;
    padding_around_glass = 0.4;
    padding_under_glass = 1;
    
    pag = padding_around_glass;
    pug = padding_under_glass;
    
    // visualize glass
    color("yellow", 0.5)
    hull()
    {
        for (x_mult = [-1, 1], y_mult = [-1, 1])
        {
            translate([
                (-gw / 2 + gcr) * x_mult,
                (-gh / 2 + gcr) * y_mult,
                0])
            cylinder($fn = dToFn(gcr * 2), r = gcr, h = gt);
        }
    }
    
    // area to cut around glass
    // TODO: create a module for such rounded rects
    color("blue", 0.5)
    hull()
    {
        w = gw + pag * 2;
        h = gh + pag * 2;
        // I'm not sure it's needed, but epoxy should
        // have some thickness as well, and this padding should
        // protect the glass a bit (the glass will not protrude
        // from the scanner body)
        t = gt + pag + $tiny_padding;
        
        for (x_mult = [-1, 1], y_mult = [-1, 1])
        {
            translate([
                (-w / 2 + gcr) * x_mult,
                (-h / 2 + gcr) * y_mult,
                // cut without artifacts
                -$tiny_padding])
            cylinder($fn = dToFn(gcr * 2), r = gcr, h = t);
        }
    }
    
    // area to cut under glass
    color("blue", 0.5)
    hull()
    {
        w = gw - pug * 2;
        h = gh - pug * 2;
        // cut without artifacts
        // area in front of glass is already taken
        // into account above
        t = wt + $tiny_padding;
        
        for (x_mult = [-1, 1], y_mult = [-1, 1])
        {
            translate([
                (-w / 2 + gcr) * x_mult,
                (-h / 2 + gcr) * y_mult,
                0])
            cylinder($fn = dToFn(gcr * 2), r = gcr, h = t);
        }
    }
}

// see `glass_hole` docs for params details
module front_glass_hole(gw, gh, gt, gcr)
{
    rotate([90, 0, 0])
    glass_hole(gw, gh, gt, gcr);
}

//front_glass_hole(gw = 26.6, gh = 19.6, gt = 2, gcr = 1);