infty = 300; eps = 0.01; wall = 1.2; squares_x = 6; squares_y = 5; bottom_l = 8; top_l = 3; top_h = 5; string_h = 1.5; stem_l = 14; module stem() { hull() { cylinder(r = wall/2, h = string_h, $fn = 16); translate([stem_l, 0, 0]) cylinder(r = wall/2, h = string_h, $fn = 16); } // tip 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); } } module hexagon() { for (angle = [0:120:360]) rotate([0, 0, angle]) translate([-stem_l/2, -stem_l*cos(30), 0]) { stem(); translate([stem_l*(1+sin(30)), stem_l*cos(30), 0]) rotate([0, 0, 240]) stem(); } } for (y = [0:squares_y]) for (x = [0:squares_x]) { if (x % 2 == 0) { translate([x/2*stem_l*(2+2*sin(30)), (y+0.5)*stem_l*(2*cos(30)), 0]) hexagon(); } else { translate([(x/2)*stem_l*(2+2*sin(30)), y*stem_l*(2*cos(30)), 0]) hexagon(); } }