// Agrégat de cubions — n×n×n space-cubions amarrés : le pavage de l'espace sans vide, joints lisibles, anneaux fusionnés aux interfaces // params: [{"k": "n", "v": 2, "min": 1, "max": 4, "step": 1}, {"k": "arete", "v": 20, "min": 10, "max": 40, "step": 2}] module cubion_agregat(n,arete){ a=arete; f=a/16; off=-(n-1)*a/2; for(x=[0:n-1])for(y=[0:n-1])for(z=[0:n-1]) translate([off+x*a,off+y*a,off+z*a]){ // ossature de la cellule difference(){ cube(a,center=true); cube([a-2*f,a-2*f,a+2],center=true); cube([a-2*f,a+2,a-2*f],center=true); cube([a+2,a-2*f,a-2*f],center=true); } // panneaux en leger retrait : le joint entre cubions reste lisible cube(a-f,center=true); // anneaux d'amarrage sur les 6 faces (fusionnent aux interfaces : pavage sans vide) for(r=[[0,0,0],[90,0,0],[0,90,0]]) rotate(r) for(s=[-1,1]) translate([0,0,s*a/2]) difference(){ cylinder(h=f,d=a/3,center=true,$fn=24); cylinder(h=f+1,d=a/4,center=true,$fn=24); } } } cubion_agregat(n,arete);