pavage.scad 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. module pavage_hexagonal(r1 = 15, r2 = undef, epaisseur = 2, espace = 2, x = 25, y = 40, center = false)
  2. {
  3. r2 = r2 == undef ? r1 : r2;
  4. /*la longueur d'un motif sur l'axe y est très facile à calculer :
  5. hauteur de l'héxagone + espace
  6. long = r1*sqrt(3) + espace
  7. la longueur sur l'axe x est plus complexe.
  8. l = (r1 + r1*cos(60) + espace*cos(30))*n - r1*cos(60)
  9. (l + r1*cos(60))/(r1 + r1*cos(60) + espace*cos(30)) = n
  10. */
  11. long = sqrt(3)*r1 + espace;
  12. nbr_x = floor( (x + r1*cos(60))/(r1 + r1*cos(60) + espace*cos(30)));
  13. nbr_y = ceil(y/long) - 1;
  14. delta_x = center ? -((r1 + r1*cos(60) + espace*cos(30))*(nbr_x))/2 + r1*cos(60) - r1: 0;
  15. delta_y = center ? -(nbr_y + 1) * long/2 + espace/2 : 0;
  16. echo(delta_x=delta_x);
  17. translate([delta_x, delta_y, 0])
  18. {
  19. for(i = [0:nbr_x])
  20. {
  21. for(j = [0:nbr_y + i%2])
  22. {
  23. translate([i*cos(30)*long + r1*cos(60), j*long + r1*sin(60) - sin(30)*long*(i%2), 0])
  24. {
  25. linear_extrude(epaisseur, scale = r2/r1)
  26. {polygon([for(k=[0:60:360])[r1*cos(k), r1*sin(k)]]);}
  27. }
  28. }
  29. }
  30. }
  31. }