Browse Source

h2n: change triangular bridge to simple rounded rectangle, modularize most parts, many small changes in shapes - may not be a valid 2-manifold so we need to look at the fit of all parts so they fuse together

Fernando Pablo Lopez-Lezcano 9 năm trước cách đây
mục cha
commit
389b4ed6b4
1 tập tin đã thay đổi với 117 bổ sung và 28 xóa
  1. 117 28
      TinySpHEAR_H2N_common.scad

+ 117 - 28
TinySpHEAR_H2N_common.scad

@@ -76,6 +76,8 @@ module h2n_ring(width, depth, radius, height, slot_w, slot_d, band_wall, tube_wa
     }
 }
 
+// side columns
+
 module h2n_columns(width, height, ring_height, tilt, band, transition, radius, wall) {
     // side tubes for cables
     for (m = [0, 1]) mirror([m, 0, 0]) {
@@ -83,15 +85,19 @@ module h2n_columns(width, height, ring_height, tilt, band, transition, radius, w
             // angled tube (4 degrees inward tilt)
             difference() {
                 hull() {
-                    rounded_block(thin_mint, radius, radius, radius / 1 - thin_mint);
+                    // rounded_block(thin_mint, radius, radius, radius / 1 - thin_mint);
+                    cylinder(r = radius, h = thin_mint, $fn = facets);
                     translate([height * tan(tilt) - wall/2, 0, height]) {
-                        rounded_block(thin_mint, radius, radius, radius / 1 - thin_mint);
+                        // rounded_block(thin_mint, radius, radius, radius / 1 - thin_mint);
+                        cylinder(r = radius, h = thin_mint, $fn = facets);
                     }
                 }
                 hull() {
-                    rounded_block_relative(thin_mint, radius, radius, radius / 1 - thin_mint, - wall);
+                    // rounded_block_relative(thin_mint, radius, radius, radius / 1 - thin_mint, - wall);
+                    cylinder(r = radius - wall, h = thin_mint, $fn = facets);
                     translate([height * tan(tilt) - wall/2, 0, height]) {
-                        rounded_block_relative(thin_mint, radius, radius, radius / 1 - thin_mint, - wall);
+                        // rounded_block_relative(thin_mint, radius, radius, radius / 1 - thin_mint, - wall);
+                        cylinder(r = radius - wall, h = thin_mint, $fn = facets);
                     }
                 }
                 // slots for cables
@@ -100,39 +106,113 @@ module h2n_columns(width, height, ring_height, tilt, band, transition, radius, w
                         cube([5.0, mount_radius * 4, 22.0]);
                         translate([0, 2 * mount_radius, 22.0]) {
                             rotate([0, 90, 0]) {
-                                cylinder(r = mount_radius, h = 5.0, $fn = facets);
+                                cylinder(r = mount_radius + wall, h = 5.0, $fn = facets);
                             }
                         }
                     }
                 }
             }
         }
+        // connector to bridge
+        translate([-(width / 2 + mount_radius - wall / 2 - height * tan(tilt)), 0, height]) {
+            tube(mount_radius + wall / 2, mount_radius, 5.0);
+        }
+    }
+}
+
+// bridge that connects to capsule array
+
+module semi_cylinder(r, h, e = thin_mint) {
+    difference() {
+        cylinder(h, r, r, $fn = facets);
+        translate ([-r*2, -(r+e), -e])
+            cube([2*(r+e), 2*(r+e), h+2*e]);
+    }
+}
+
+module quarter_sphere(r, e = thin_mint) {
+    difference() {
+        sphere(r, $fn = facets);
+        translate([-r, -r, -r])
+            cube([2*(r+e), 2*(r+e), (r+e)]);
+        translate([-r, -r, 0])
+            cube([(r+e), 2*(r+e), (r+e)]);
     }
 }
 
-module h2n_bridge(width, height, ring_height, ring_wall, tilt, band, transition, radius, wall) {
-    // triangular transition
-    translate([0, 0, height + band]) {
+module cylcube(width, depth, height, wall) {
+    difference() {
+        semi_cylinder(r = depth, h = height);
+        semi_cylinder(r = depth - wall, h = height);
+    }
+    translate([-(width + depth / 2), -depth, 0]) {
         difference() {
-            hull() {
-                rounded_block(thin_mint, width / 2 + radius * 2 - ring_wall - height * tan(tilt), radius, radius / 1 - thin_mint);
-                translate([0, 0, transition - band]) {
-                    cylinder(r = radius, h = thin_mint, $fn = facets);
+            cube([(width + depth / 2), depth * 2, height]);
+            translate([0, wall, 0]) {
+                cube([(width + depth), (depth - wall) * 2, height]);
+            }
+        }
+    }
+}
+
+module h2n_bridge(width, height, ring_height, ring_wall, tilt, band, transition, radius, col_wall, wall) {
+    // capsule array mount
+    translate([0, 0, band + 20.0]) {
+        tetra_capsule_array_mount([-45, 135]);
+    }
+    // stalk
+    translate([0, 0, band]) {
+        difference() {
+            tube(mount_radius + wall, mount_radius, 20.0);
+            // remove the part of the stalk that is inside the bridge
+            translate([width / 2, 0, -4*thin_mint]) {
+                rotate([0, -90, 0]) {
+                    semi_cylinder(r = radius + col_wall - wall, h = width);
                 }
             }
-            hull() {
-                rounded_block_relative(thin_mint, width / 2 + radius * 2 - ring_wall - height * tan(tilt), radius, radius / 1 - thin_mint, - wall);
-                translate([0, 0, transition - band]) {
-                    cylinder(r = radius - wall, h = thin_mint, $fn = facets);
+        }
+    }
+    // top of bridge
+    translate([width / 2, 0, band]) {
+        rotate([0, -90, 0]) {
+            difference() {
+                // curvy ceiling
+                semi_cylinder(r = radius + col_wall, h = width);
+                semi_cylinder(r = radius + col_wall - wall, h = width);
+                // make a hole for the cables
+                translate([0, 0, width / 2]) {
+                    rotate([0, 90, 0]) {
+                        cylinder(r = mount_radius, h = 10, $fn = facets);
+                    }
                 }
             }
         }
     }
-    // triangular base
-    translate([0, 0, height]) {
-        difference() {
-            rounded_block(band, width / 2 + radius * 2 - ring_wall - height * tan(tilt), radius, radius * 0.99 - thin_mint);
-            rounded_block_relative(band, width / 2 + radius * 2 - ring_wall - height * tan(tilt), radius, radius * 0.8 - thin_mint, - wall);
+    // caps at ends
+    for (m = [0, 1]) mirror([m, 0, 0]) {
+        // fixme: why the 0.3 magic below?
+        translate([width / 2 - 0.3, 0, band]) {
+            difference() {
+                quarter_sphere(r = radius + col_wall);
+                quarter_sphere(r = radius + col_wall - wall);
+            }
+        }
+    }
+    // base of bridge
+    translate([0, 0, 0]) {
+        for (m = [0, 1]) mirror([m, 0, 0]) {
+            translate([width / 2 + mount_radius - col_wall - height * tan(tilt) + wall, 0, 0]) {
+                cylcube(width / 2 - height * tan(tilt), radius + col_wall, band, wall);
+            }
+        }
+    }
+    // reinforcement beams at the base
+    translate([-col_wall / 2, -(radius + wall), 0]) {
+        cube([col_wall, (radius + wall) * 2, col_wall]);
+    }
+    for (m = [0, 1]) mirror([m, 0, 0]) {
+        translate([-width / 2 + radius + wall + 0.5, -(radius + wall), 0]) {
+            cube([col_wall, (radius + wall) * 2, col_wall]);
         }
     }
 }
@@ -154,20 +234,29 @@ h2n_band_height = 6.0;
 // base band width
 h2n_band_wall = 1.6;
 
+// walls for the columns
+h2n_col_wall = 2 * wall;
+
 // render the whole thing
 
-h2n_ring(h2n_width_m, h2n_depth_m, h2n_depth * 0.425, h2n_band_height, h2n_side_band_w, h2n_side_band, h2n_band_wall, 0.0, wall);
+difference() {
+union() {
+
+*h2n_ring(h2n_width_m, h2n_depth_m, h2n_depth * 0.425, h2n_band_height, h2n_side_band_w, h2n_side_band, h2n_band_wall, 0.0, wall);
 
-h2n_columns(h2n_width_m, connector_height, h2n_band_height, 4.0, 10.0, transition_height, mount_radius + wall, wall);
+*h2n_columns(h2n_width_m, connector_height, h2n_band_height, 4.0, 10.0, transition_height, mount_radius + h2n_col_wall, h2n_col_wall);
 
-h2n_bridge(h2n_width_m, connector_height, h2n_band_height, h2n_band_wall, 4.0, 10.0, transition_height, mount_radius + wall, wall);
+h2n_bridge(h2n_width_m, connector_height, h2n_band_height, h2n_band_wall, 4.0, 10.0, transition_height, mount_radius, h2n_col_wall, wall);
+
+}
+*translate([-40, -50, 0]) {
+    cube([80, 50, 80]);
+}
+}
 
 // capsule holders and connector to main body
-*rotate([0, 0, -45]) {
+*rotate([0, 0, 0]) {
     render_tetra_capsule_array(connector_height + transition_height + 30);
-    translate([0, 0, connector_height + transition_height]) {
-        tetra_capsule_array_mount([-45, 135]);
-    }
 }
 
 // make sure dimensions are fine