|
@@ -545,56 +545,99 @@ module tetra_capsule_array_mount(angles, mount_radius, mount_wall) {
|
|
|
|
|
|
|
|
// windscreen
|
|
// windscreen
|
|
|
|
|
|
|
|
-module tetra_wind_screen(radius, corner, height, band_height, col_radius) {
|
|
|
|
|
- // mount to body
|
|
|
|
|
- difference() {
|
|
|
|
|
- rounded_block_relative(band_height, radius, radius, corner, col_radius);
|
|
|
|
|
- rounded_block_relative(band_height, radius, radius, corner, -(col_radius + lip_fit));
|
|
|
|
|
- // indentation to trap nylon screen
|
|
|
|
|
- }
|
|
|
|
|
|
|
+module tetra_wind_screen_quad(radius, corner, height, band_height, helix_radius, twist) {
|
|
|
// quad helix windscreen support
|
|
// quad helix windscreen support
|
|
|
- translate([0, 0, band_height]) {
|
|
|
|
|
|
|
+ translate([0, 0, 0]) {
|
|
|
for (r = [0, 90, -90, 180]) for (t = [1, -1]) rotate([0, 0, r]) {
|
|
for (r = [0, 90, -90, 180]) for (t = [1, -1]) rotate([0, 0, r]) {
|
|
|
- linear_extrude(height = height, center = false, convexity = 0, twist = (360 + 45/2) * t, $fn = facets) {
|
|
|
|
|
- translate([radius, 0, 0]) {
|
|
|
|
|
- circle(r = col_radius, $fn = facets);
|
|
|
|
|
|
|
+ linear_extrude(height = height, center = false, convexity = 0, twist = twist * t, $fn = facets) {
|
|
|
|
|
+ translate([radius + helix_radius, 0, 0]) {
|
|
|
|
|
+ circle(r = helix_radius, $fn = facets);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // connectors to top
|
|
|
|
|
+ translate([0, 0, height]) {
|
|
|
|
|
+ for (r = [0, 90, -90, 180]) rotate([0, 0, r + twist]) {
|
|
|
|
|
+ translate([radius + helix_radius, 0, 0]) {
|
|
|
|
|
+ cylinder(r = helix_radius * 2/3, h = 2.0, $fn = facets);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+module tetra_wind_screen(radius, corner, height, band_height, beam_radius, twist) {
|
|
|
|
|
+ // quad helix windscreen support
|
|
|
|
|
+ translate([0, 0, 0]) {
|
|
|
|
|
+ for (r = [0, 60, 120, 180, 240, 300]) for (t = [1, -1]) rotate([0, 0, r]) {
|
|
|
|
|
+ linear_extrude(height = height, center = false, convexity = 0, twist = twist * t, $fn = facets) {
|
|
|
|
|
+ translate([radius + beam_radius, 0, 0]) {
|
|
|
|
|
+ circle(r = beam_radius, $fn = facets);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
// connectors to top
|
|
// connectors to top
|
|
|
- translate([0, 0, height + band_height]) {
|
|
|
|
|
- for (r = [0, 90, -90, 180]) for (t = [22.5, -22.5]) rotate([0, 0, r + t]) {
|
|
|
|
|
- translate([radius, 0, 0]) {
|
|
|
|
|
- cylinder(r = col_radius * 2/3, h = 2.0, $fn = facets);
|
|
|
|
|
|
|
+ translate([0, 0, height]) {
|
|
|
|
|
+ for (r = [0, 60, 120, 180, 240, 300]) rotate([0, 0, r + twist]) {
|
|
|
|
|
+ translate([radius + beam_radius, 0, 0]) {
|
|
|
|
|
+ cylinder(r = beam_radius * 2/3, h = 2.0, $fn = facets);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-module tetra_wind_screen_top(radius, col_rad) {
|
|
|
|
|
|
|
+module tetra_wind_screen_top(radius, beam_rad) {
|
|
|
// main ring
|
|
// main ring
|
|
|
difference() {
|
|
difference() {
|
|
|
- cylinder(r = radius + 2 * col_rad, h = col_rad * 1.5, $fn = facets);
|
|
|
|
|
- cylinder(r = radius, h = col_rad * 1.5, $fn = facets);
|
|
|
|
|
|
|
+ cylinder(r = radius + beam_rad * 1.5, h = beam_rad * 1.5, $fn = facets);
|
|
|
|
|
+ cylinder(r = radius + beam_rad * 0.5, h = beam_rad * 1.5, $fn = facets);
|
|
|
}
|
|
}
|
|
|
// cross
|
|
// cross
|
|
|
- for (r = [-45, 45, 135, -135]) rotate([0, 0, r]) {
|
|
|
|
|
- translate([0, -col_rad/2, 0]) {
|
|
|
|
|
- cube([radius, col_rad, col_rad * 1.5]);
|
|
|
|
|
|
|
+ for (r = [0, 90, 180, 270]) rotate([0, 0, r]) {
|
|
|
|
|
+ translate([0, -beam_rad/2, 0]) {
|
|
|
|
|
+ cube([radius + beam_rad, beam_rad, beam_rad * 1.5]);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- // connectors for quad helix
|
|
|
|
|
- for (r = [0, 90, -90, 180]) for (t = [22.5, -22.5]) rotate([0, 0, r + t]) {
|
|
|
|
|
- translate([radius + col_rad, 0, 0]) {
|
|
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+module tetra_wind_screen_mount(radius, helix_radius, corner, beam_rad) {
|
|
|
|
|
+ difference() {
|
|
|
|
|
+ rounded_block_relative(band_height, radius, radius, corner, 2 * beam_rad);
|
|
|
|
|
+ rounded_block_relative(band_height, radius, radius, corner, 1.2); // (lip_fit + 0.5));
|
|
|
|
|
+ // indentation to trap nylon screen
|
|
|
|
|
+ }
|
|
|
|
|
+ // supports for double helix
|
|
|
|
|
+ for (r = [0, 60, 120, 180, 240, 300]) rotate([0, 0, r]) {
|
|
|
|
|
+ translate([0, helix_radius + beam_rad, 0]) {
|
|
|
difference() {
|
|
difference() {
|
|
|
- cylinder(r = col_rad * 2/3 + wall/2, h = col_rad * 1.5 + 2.0, $fn = facets);
|
|
|
|
|
- cylinder(r = col_rad * 2/3 - fit, h = col_rad * 1.5 + 2.0, $fn = facets);
|
|
|
|
|
|
|
+ union() {
|
|
|
|
|
+ cylinder(r = beam_rad, h = band_height, $fn = facets);
|
|
|
|
|
+ // attach beam to sides (2)
|
|
|
|
|
+ translate([-beam_rad/2, -beam_rad * 2, 0]) {
|
|
|
|
|
+ cube([beam_rad, beam_rad * 2, band_height]);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // cut bottom of attachment beams
|
|
|
|
|
+ translate([-3, -1.1, 0]) {
|
|
|
|
|
+ rotate([-15, 0, 0]) {
|
|
|
|
|
+ cube([10, 10, 10]);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// small tube to connect both helical windscreen mounts
|
|
|
|
|
+
|
|
|
|
|
+module tetra_wind_screen_connector(beam_rad) {
|
|
|
|
|
+ difference() {
|
|
|
|
|
+ cylinder(r = beam_rad * 1.2, h = 4, $fn = facets);
|
|
|
|
|
+ cylinder(r = beam_rad * 2/3 + fit, h = 5, $fn = facets);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
|
|
|
////
|
|
////
|
|
|
//// render all the different parts
|
|
//// render all the different parts
|