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