]> www.fi.muni.cz Git - things.git/blob - sponge-holder.scad
f54ea65bbf1c70ccd7166ea5e0a957e82ad7faf1
[things.git] / sponge-holder.scad
1 eps = 0.01;
2 infty = 200;
3
4 v_tube_d = 28.2 - 0.5;
5 h_tube_d = 45;
6 x_off = 35;
7
8 sponge_l = 45; // original size is 85 + 5;
9 sponge_w = 58 + 8;
10 sponge_h = 30 + 3;
11
12 wall = 1.5;
13
14 clip_h = 15;
15
16 module clip() {
17         difference() {
18                 cylinder(r = v_tube_d/2 + 2*wall, h = clip_h, $fn = 128);
19                 translate([0, 0, -eps])
20                 cylinder(r = v_tube_d/2 + wall, h = clip_h+2*eps);
21                 translate([-infty-v_tube_d/5, -infty/2, -eps])
22                         cube(infty);
23         }
24         for (angle = [-1.5*72:72:1.5*72]) rotate([0, 0, angle])
25         translate([v_tube_d/2 + wall, 0, 0])
26                 cylinder(r = wall, h = clip_h);
27 }
28
29 module perf_wall(w, h, d, hx, hy, dx, dy, side) {
30         difference() {
31                 translate([-w/2, -h/2, -d/2])
32                         cube([w, h, d]);
33                 for (y = [0:1:1 + h/(hy+dy)])
34                 for (y1 = [-1,1]) scale([1, y1, 1])
35                 for (x1 = [-1,1]) scale([x1, 1, 1]) {
36                         for (x = [0:1:1 + w/(hx+dx)]) {
37                                 translate([x*(hx+dx), y*(hy+dy), -d/2-eps])
38                                         scale([1, hy/hx, 1])
39                                         cylinder(r = hx/2, h = d + 2*eps, $fn = 4);
40                         }
41                         for (x = [0.5:1:1 + w/(hx+dx)]) {
42                                 translate([x*(hx+dx), (y+0.5)*(hy+dy), -d/2-eps])
43                                         scale([1, hy/hx, 1])
44                                         cylinder(r = hx/2, h = d + 2*eps, $fn = 4);
45                         }
46                 }
47         }
48         for (x = [-1, 1]) scale ([x, 1, 1])
49         translate([w/2-side, -h/2, -d/2])
50                 cube([side, h, d]);
51         for (y = [-1, 1]) scale ([1, y, 1])
52         translate([-w/2, h/2-side, -d/2])
53                 cube([w, side, d]);
54 }
55
56 module box() {
57         for (x = [0, sponge_h + wall]) translate([x + wall/2, 0, (sponge_l+wall)/2])
58         rotate([0, 90, 0])
59         perf_wall(h = sponge_w + 2*wall, w = sponge_l + wall, d = wall,
60                 hx = 20, hy = 10, dx = 2, dy = 3, side=2);
61
62         for (y = [-1, 1]) scale ([1, y, 1])
63         translate([sponge_h/2+wall, sponge_w/2+wall/2, (sponge_l+wall)/2])
64         rotate([90, 0, 0])
65         perf_wall(w = sponge_h + 2*wall, h = sponge_l + wall, d = wall,
66                 hy = 20, hx = 10, dx = 3, dy = 2, side=2);
67
68         for (y = [-sponge_w/4, 0, sponge_w/4])
69         translate ([0, y, sponge_l])
70                 cube([sponge_h + 2*wall, wall, wall]);
71 }
72
73 module side_handlers() {
74         for (y = [-1, 1]) scale ([1, y, 1])
75         hull() {
76                 translate([0, sponge_w/2, 0])
77                         cube([wall, wall, clip_h]);
78                 translate([-v_tube_d/2-x_off, v_tube_d/2+wall, 0])
79                         cube([wall, wall, clip_h]);
80         }
81
82 }
83
84 translate([-v_tube_d/2-x_off, 0, 0])
85         clip();
86
87 side_handlers();
88
89 box();
90