17 base_overhang = 0.9; // factor of base_w, base_l
21 module polyhole(r1, h1, fn) {
23 cylinder(h = h1, r = r1 / cos (180 / fn), $fn = fn);
26 module body(tube_zoff) {
28 // scale([1, base_l/base_w, 1])
29 // cylinder(r = base_w/2, h = thin_wall);
30 translate([-base_w/2, -base_l/2, 0]) cube([base_w, base_l, thin_wall]);
35 scale([x, y, 1]) hull() {
36 translate([base_overhang*base_w/2-thin_wall/2, base_overhang*base_l/2-thin_wall/2, 0])
37 cylinder(r = thin_wall/2, h = thin_wall, $fn = 16);
38 translate([0, -tube_l/3+thin_wall/2, 0])
39 cylinder(r = thin_wall/2, h = tube_zoff + tube_d, $fn = 16);
45 scale([x, y, 1]) hull() {
46 translate([base_overhang*base_w/2-thin_wall/2, base_overhang*base_l/2-thin_wall/2, 0])
47 cylinder(r = thin_wall/2, h = thin_wall, $fn = 16);
48 translate([0, tube_l/2-thin_wall/2, 0])
49 cylinder(r = thin_wall/2, h = tube_zoff + tube_d, $fn = 16);
52 // under the tube supports
54 scale([1, y, 1]) hull() {
55 translate([0, base_overhang*base_l/2, 0])
56 cylinder(r = thin_wall/2, h = thin_wall, $fn = 16);
57 translate([-thin_wall/2, 0, 0])
58 cube([thin_wall, tube_l/2, tube_zoff]);
61 // side bottom tube supports
64 translate([tube_d/2, -tube_l/2, 0])
65 cube([wall, tube_l, tube_zoff + tube_d/2]);
66 translate([tube_d/2+wall, -wall, 0])
67 cube([wall, 2*wall, tube_zoff + tube_d/2]);
70 // upper cylinder clip
71 translate([0, -tube_l/2, tube_d/2 + tube_zoff])
73 rotate([-90, 0, 0]) union() {
74 cylinder(r = tube_d/2 + wall, h = tube_l, $fn = 16);
75 translate([0, 0, tube_l/2 - wall])
76 cylinder(r = tube_d/2 + 2*wall,
79 translate([-tube_d/2-2*wall, 0, 0])
80 cube([tube_d + 4*wall, tube_l, tube_d]);
84 module wing_tube_support(tube_zoff) {
88 translate([0, -base_l/2-eps, tube_d/2+tube_zoff])
90 polyhole(tube_d/2, base_l + 2*eps, 6);
91 // cylinder(r = tube_d/2, h = base_l + 2*eps, $fn = 6);
93 translate([-infty/2, -infty/2, tube_zoff + tube_d + wall])
98 wing_tube_support(tube_zoff);