1234567891011121314151617181920212223242526272829303132333435363738 |
- 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)]]);}
- }
- }
- }
- }
- }
|