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();