|
@@ -0,0 +1,192 @@
|
|
1
|
+gap = 15;
|
|
2
|
+wall = 3;
|
|
3
|
+add_outlet = gap - wall;
|
|
4
|
+support = 2;
|
|
5
|
+tab_w = 8;
|
|
6
|
+tab_p = 2;
|
|
7
|
+tab_x = 2;
|
|
8
|
+tab_d = tab_w + tab_p;
|
|
9
|
+tab_h1 = 3.8;
|
|
10
|
+tab_h2 = 6;
|
|
11
|
+
|
|
12
|
+display = true;
|
|
13
|
+
|
|
14
|
+$fn = 42;
|
|
15
|
+
|
|
16
|
+module wall() {
|
|
17
|
+ difference() {
|
|
18
|
+ translate([-18, -50, -50])
|
|
19
|
+ cube([18, 100, 100]);
|
|
20
|
+
|
|
21
|
+ translate([1, 0, 0])
|
|
22
|
+ rotate([0, -90, 0])
|
|
23
|
+ cylinder(d = 15, h = 20);
|
|
24
|
+ }
|
|
25
|
+}
|
|
26
|
+
|
|
27
|
+module prism(l, w, h) {
|
|
28
|
+ polyhedron(
|
|
29
|
+ points = [[0,0,0], [l,0,0], [l,w,0], [0,w,0], [0,w,h], [l,w,h]],
|
|
30
|
+ faces = [[0,1,2,3],[5,4,3,2],[0,4,5,1],[0,3,4],[5,2,1]]
|
|
31
|
+ );
|
|
32
|
+}
|
|
33
|
+
|
|
34
|
+module prism_arc(w, n = 5, d = 0.1) {
|
|
35
|
+ hull()
|
|
36
|
+ for (i = [0 : n]) {
|
|
37
|
+ rotate([0, 0, i / n * 90])
|
|
38
|
+ translate([0, w, 0])
|
|
39
|
+ rotate([0, 0, 180])
|
|
40
|
+ translate([-d / 2, 0, 0]) // TODO
|
|
41
|
+ prism(d, w, w);
|
|
42
|
+ }
|
|
43
|
+}
|
|
44
|
+
|
|
45
|
+module addition(h) {
|
|
46
|
+ translate([0, -wall, 0])
|
|
47
|
+ cube([gap + wall, wall, h]);
|
|
48
|
+
|
|
49
|
+ translate([gap, 0, 0])
|
|
50
|
+ cube([wall, gap, h]);
|
|
51
|
+
|
|
52
|
+ translate([0, gap, 0])
|
|
53
|
+ cube([gap + wall, wall, h]);
|
|
54
|
+
|
|
55
|
+ translate([gap - support, gap, h])
|
|
56
|
+ rotate([90, 90, 0])
|
|
57
|
+ prism(h + wall + gap, support, support);
|
|
58
|
+
|
|
59
|
+ translate([gap, support, h])
|
|
60
|
+ rotate([180, 90, 0])
|
|
61
|
+ prism(h + wall, support, support);
|
|
62
|
+
|
|
63
|
+ translate([gap, 0, -wall])
|
|
64
|
+ rotate([0, -90, 0])
|
|
65
|
+ prism_arc(support);
|
|
66
|
+}
|
|
67
|
+
|
|
68
|
+module tab() {
|
|
69
|
+ difference() {
|
|
70
|
+ cube([tab_w, tab_d, tab_x]);
|
|
71
|
+
|
|
72
|
+ translate([tab_w / 2, (tab_d - tab_p) / 2, -0.1])
|
|
73
|
+ cylinder(d1 = tab_h1, d2 = tab_h2, h = tab_x + 0.2);
|
|
74
|
+ }
|
|
75
|
+
|
|
76
|
+ translate([0, tab_d - tab_p, tab_x])
|
|
77
|
+ prism(tab_w, tab_p, tab_p);
|
|
78
|
+
|
|
79
|
+ for (i = [0 : 1])
|
|
80
|
+ translate([i * tab_w, 0, 0])
|
|
81
|
+ scale([i * 2 - 1, 1, 1]) {
|
|
82
|
+ translate([0, tab_d - tab_p, tab_x])
|
|
83
|
+ rotate([0, 90, 0])
|
|
84
|
+ prism(tab_x, tab_p, tab_p);
|
|
85
|
+
|
|
86
|
+ translate([0, tab_d, tab_x])
|
|
87
|
+ rotate([90, 90, 0])
|
|
88
|
+ prism_arc(tab_p);
|
|
89
|
+ }
|
|
90
|
+}
|
|
91
|
+
|
|
92
|
+module block(base = true) {
|
|
93
|
+ //%translate([0, 0, wall])
|
|
94
|
+ //cube([gap, gap, gap]);
|
|
95
|
+
|
|
96
|
+ if (base) {
|
|
97
|
+ cube([gap, gap, wall]);
|
|
98
|
+ } else {
|
|
99
|
+ cube([gap, gap + wall, wall]);
|
|
100
|
+ }
|
|
101
|
+
|
|
102
|
+ if (base) {
|
|
103
|
+ translate([0, 0, wall + gap])
|
|
104
|
+ cube([gap, gap, wall]);
|
|
105
|
+ }
|
|
106
|
+
|
|
107
|
+ if (base) {
|
|
108
|
+ translate([0, -wall, 0])
|
|
109
|
+ cube([gap, wall, gap + 2 * wall]);
|
|
110
|
+ } else {
|
|
111
|
+ translate([0, -wall, 0])
|
|
112
|
+ cube([gap, wall, gap + wall]);
|
|
113
|
+ }
|
|
114
|
+
|
|
115
|
+ if (base) {
|
|
116
|
+ translate([gap, -wall, 0])
|
|
117
|
+ cube([wall, gap + wall, gap + 2 * wall]);
|
|
118
|
+ } else {
|
|
119
|
+ translate([gap, -wall, 0])
|
|
120
|
+ cube([wall, gap + wall * 2, gap + wall]);
|
|
121
|
+ }
|
|
122
|
+}
|
|
123
|
+
|
|
124
|
+module pipeblock() {
|
|
125
|
+ translate([0, -gap / 2, -gap / 2 - wall])
|
|
126
|
+ block();
|
|
127
|
+
|
|
128
|
+ translate([0, gap * 3 / 2 + wall, -gap / 2])
|
|
129
|
+ rotate([90, 0, 0])
|
|
130
|
+ block(false);
|
|
131
|
+
|
|
132
|
+ translate([0, gap / 2, gap / 2 + wall])
|
|
133
|
+ addition(add_outlet);
|
|
134
|
+
|
|
135
|
+ translate([0, gap * 3 / 2 - support, -gap / 2])
|
|
136
|
+ prism(gap, support, support);
|
|
137
|
+
|
|
138
|
+ translate([0, -gap / 2, -gap / 2 + support])
|
|
139
|
+ rotate([-90, 0, 0])
|
|
140
|
+ prism(gap, support, support);
|
|
141
|
+
|
|
142
|
+ translate([0, -gap / 2 + support, gap / 2])
|
|
143
|
+ rotate([180, 0, 0])
|
|
144
|
+ prism(gap, support, support);
|
|
145
|
+
|
|
146
|
+ translate([gap, gap / 2, gap / 2 - support])
|
|
147
|
+ rotate([90, 0, -90])
|
|
148
|
+ prism(gap, support, support);
|
|
149
|
+
|
|
150
|
+ translate([gap, -gap / 2 + support, gap / 2])
|
|
151
|
+ rotate([90, 90, -90])
|
|
152
|
+ prism(gap, support, support);
|
|
153
|
+
|
|
154
|
+ translate([gap, -gap / 2, -gap / 2 + support])
|
|
155
|
+ rotate([-90, 0, 90])
|
|
156
|
+ prism(gap * 2, support, support);
|
|
157
|
+
|
|
158
|
+ if (add_outlet > 0) {
|
|
159
|
+ translate([0, gap / 2 - wall - support, gap / 2 + wall])
|
|
160
|
+ prism(gap + wall, support, support);
|
|
161
|
+ }
|
|
162
|
+
|
|
163
|
+ translate([0, 0, tab_d + gap / 2 + wall])
|
|
164
|
+ rotate([-90, 0, -90])
|
|
165
|
+ tab();
|
|
166
|
+
|
|
167
|
+ translate([0, -gap / 2 - tab_d - wall, tab_w / 2])
|
|
168
|
+ rotate([-90, 90, -90])
|
|
169
|
+ tab();
|
|
170
|
+
|
|
171
|
+ translate([0, gap * 3 / 2 + wall + tab_d, tab_w / 2])
|
|
172
|
+ rotate([-90, -90, -90])
|
|
173
|
+ tab();
|
|
174
|
+
|
|
175
|
+ translate([0, gap / 2 - tab_w / 2, -gap / 2 - wall - tab_d])
|
|
176
|
+ rotate([-90, 180, -90])
|
|
177
|
+ tab();
|
|
178
|
+}
|
|
179
|
+
|
|
180
|
+if (display) {
|
|
181
|
+ %wall();
|
|
182
|
+
|
|
183
|
+ pipeblock();
|
|
184
|
+
|
|
185
|
+ translate([-18, 0, 0])
|
|
186
|
+ rotate([-90, 180, 0])
|
|
187
|
+ pipeblock();
|
|
188
|
+} else {
|
|
189
|
+ translate([0, 0, gap + wall])
|
|
190
|
+ rotate([0, 90, 0])
|
|
191
|
+ pipeblock();
|
|
192
|
+}
|