8 sponge_l = 55; // original size is 85 + 5;
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);
24 translate([-infty/2, 0, -eps]) cube(infty);
26 translate([-infty/2, 0, -eps]) cube(infty);
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);
34 module perf_wall(w, h, d, hx, hy, dx, dy, side) {
36 translate([-w/2, -h/2, -d/2])
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])
44 cylinder(r = hx/2, h = d + 2*eps, $fn = 4);
46 for (x = [0.5:1:1 + w/(hx+dx)]) {
47 translate([x*(hx+dx), (y+0.5)*(hy+dy), -d/2-eps])
49 cylinder(r = hx/2, h = d + 2*eps, $fn = 4);
53 for (x = [-1, 1]) scale ([x, 1, 1])
54 translate([w/2-side, -h/2, -d/2])
56 for (y = [-1, 1]) scale ([1, y, 1])
57 translate([-w/2, h/2-side, -d/2])
62 for (x = [0, sponge_h + wall]) translate([x + wall/2, 0, (sponge_l+wall)/2])
64 perf_wall(h = sponge_w + 2*wall, w = sponge_l + wall, d = wall,
65 hx = 20, hy = 10, dx = 2, dy = 3, side=2);
67 for (y = [-1, 1]) scale ([1, y, 1])
68 translate([sponge_h/2+wall, sponge_w/2+wall/2, (sponge_l+wall)/2])
70 perf_wall(w = sponge_h + 2*wall, h = sponge_l + wall, d = wall,
71 hy = 20, hx = 10, dx = 3, dy = 2, side=2);
73 for (y = [-sponge_w/4, 0, sponge_w/4])
75 // translate ([0, y, sponge_l])
76 cube([sponge_h + 2*wall, wall, wall]);
79 module side_handlers() {
81 translate([0, sponge_w/2, 0])
82 cube([wall, wall, clip_h]);
83 translate([-x_off-v_tube_d/2, 0, 0])
85 translate([v_tube_d/2+clip_w-2*wall, -wall, 0])
86 cube([2*wall, 2*wall, clip_h]);
90 translate([0, -sponge_w/2-wall, 0])
91 cube([wall, wall, clip_h]);
92 translate([-x_off-v_tube_d/2, -v_tube_d/2-clip_w, 0])
93 cube([wall, wall, clip_h]);
98 translate([-v_tube_d/2-x_off, 0, 0])