+module HolesScope(){
+ intersection_for (dx=[-1,+1]) {
+ intersection_for (dy=[-1,+1]) {
+ translate([dx * holeedge, dy * holeedge, -5])
+ scale([1,1,10])
+ CoverTemplate();
+ }
+ }
+}
+
+module HexGrid(xa,xb,ya,yb) {
+ imin = floor(xa / holepitch);
+ imax = ceil(xb / holepitch);
+ jmin = floor(ya / (sqrt(3)*holepitch));
+ jmax = ceil(yb / (sqrt(3)*holepitch));
+ echo("HexGrid ",imin,imax,jmin,jmax);
+ for (i=[imin:imax]) {
+ for (j=[jmin:jmax]) {
+ translate([(j * sqrt(3) + holeoffx) * holepitch,
+ (i + 0.5 + holeoffy) * holepitch,
+ 0]) {
+ child();
+ translate([sqrt(3)/2 * holepitch, -0.5 * holepitch, 0])
+ child();
+ }
+ }
+ }
+}
+
+module Hole(){
+ cylinder(r=holesize/2, h=40, $fn=40);
+}
+
+module Holes(){
+ intersection(){
+ translate([0, 0, -20])
+ HexGrid(0, coverlonglen, minx, maxx)
+ Hole();
+ HolesScope();
+ }
+}
+
+module CoverCover(){
+ difference(){
+ CoverTemplate();
+ Holes();
+ }
+}
+