module pavage_hexagonal(r1 = 15, r2 = undef, epaisseur = 2, espace = 2, x = 25, y = 40, center = false) { r2 = r2 == undef ? r1 : r2; /*la longueur d'un motif sur l'axe y est très facile à calculer : hauteur de l'héxagone + espace long = r1*sqrt(3) + espace la longueur sur l'axe x est plus complexe. l = (r1 + r1*cos(60) + espace*cos(30))*n - r1*cos(60) (l + r1*cos(60))/(r1 + r1*cos(60) + espace*cos(30)) = n */ long = sqrt(3)*r1 + espace; nbr_x = floor( (x + r1*cos(60))/(r1 + r1*cos(60) + espace*cos(30))); nbr_y = ceil(y/long) - 1; delta_x = center ? -((r1 + r1*cos(60) + espace*cos(30))*(nbr_x))/2 + r1*cos(60) - r1: 0; delta_y = center ? -(nbr_y + 1) * long/2 + espace/2 : 0; echo(delta_x=delta_x); translate([delta_x, delta_y, 0]) { for(i = [0:nbr_x]) { for(j = [0:nbr_y + i%2]) { translate([i*cos(30)*long + r1*cos(60), j*long + r1*sin(60) - sin(30)*long*(i%2), 0]) { linear_extrude(epaisseur, scale = r2/r1) {polygon([for(k=[0:60:360])[r1*cos(k), r1*sin(k)]]);} } } } } }