--- /dev/null
+infty = 300;
+eps = 0.01;
+
+wall = 1.0;
+
+squares = 3;
+
+bottom_l = 6;
+top_l = 3;
+top_h = 3.5;
+string_h = 1.5;
+square_l = 20;
+
+module stem() {
+ hull() {
+ cylinder(r = wall/2, h = string_h, $fn = 16);
+ translate([square_l, 0, 0])
+ cylinder(r = wall/2, h = string_h, $fn = 16);
+ }
+ // tip
+ for (x = [-1, 1])
+ translate([(1-x)*square_l/2, 0, 0])
+ scale([x, 1, 1])
+ hull() {
+ cylinder(r = wall/2, h = top_h, $fn = 16);
+ translate([top_l, 0, 0])
+ cylinder(r = wall/2, h = top_h, $fn = 16);
+ translate([bottom_l, 0, 0])
+ cylinder(r = wall/2, h = string_h, $fn = 16);
+ }
+}
+
+for (y = [-squares/2:squares/2])
+for (x = [-squares/2:squares/2-1])
+ translate([x*square_l, y*square_l, 0])
+ stem();
+
+rotate([0, 0, 90])
+for (y = [-squares/2:squares/2])
+for (x = [-squares/2:squares/2-1])
+ translate([x*square_l, y*square_l, 0])
+ stem();
+