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);
|