18 base_overhang = 0.9; // factor of base_w, base_l
22 module polyhole(r1, h1, fn) {
24 cylinder(h = h1, r = r1 / cos (180 / fn), $fn = fn);
27 module body(tube_zoff) {
29 // scale([1, base_l/base_w, 1])
30 // cylinder(r = base_w/2, h = thin_wall);
31 translate([-base_w/2, -base_l/2, 0]) cube([base_w, base_l, thin_wall]);
36 scale([x, y, 1]) hull() {
37 translate([base_overhang*base_w/2-thin_wall/2, base_overhang*base_l/2-thin_wall/2, 0])
38 cylinder(r = thin_wall/2, h = thin_wall, $fn = 16);
39 translate([0, -tube_l/3+thin_wall/2, 0])
40 cylinder(r = thin_wall/2, h = tube_zoff + tube_d, $fn = 16);
46 scale([x, y, 1]) hull() {
47 translate([base_overhang*base_w/2-thin_wall/2, base_overhang*base_l/2-thin_wall/2, 0])
48 cylinder(r = thin_wall/2, h = thin_wall, $fn = 16);
49 translate([0, tube_l/2-thin_wall/2, 0])
50 cylinder(r = thin_wall/2, h = tube_zoff + tube_d, $fn = 16);
53 // under the tube supports
55 scale([1, y, 1]) hull() {
56 translate([0, base_overhang*base_l/2, 0])
57 cylinder(r = thin_wall/2, h = thin_wall, $fn = 16);
58 translate([-thin_wall/2, 0, 0])
59 cube([thin_wall, tube_l/2, tube_zoff]);
62 // side bottom tube supports
65 translate([tube_d/2, -tube_l/2, 0])
66 cube([wall, tube_l, tube_zoff + tube_d/2]);
67 translate([tube_d/2+wall, -wall, 0])
68 cube([wall, 2*wall, tube_zoff + tube_d/2]);
71 // upper cylinder clip
72 translate([0, -tube_l/2, tube_d/2 + tube_zoff])
74 rotate([-90, 0, 0]) union() {
75 cylinder(r = tube_d/2 + wall, h = tube_l, $fn = 16);
76 translate([0, 0, tube_l/2 - wall])
77 cylinder(r = tube_d/2 + 2*wall,
80 translate([-tube_d/2-2*wall, 0, 0])
81 cube([tube_d + 4*wall, tube_l, tube_d]);
85 module wing_tube_support(tube_zoff) {
89 translate([0, -base_l/2-eps, tube_d/2+tube_zoff])
91 polyhole(tube_d/2, base_l + 2*eps, 6);
92 // cylinder(r = tube_d/2, h = base_l + 2*eps, $fn = 6);
94 translate([-infty/2, -infty/2, tube_zoff + tube_d + wall])
99 wing_tube_support(tube_zoff);