|
|
|
/*
|
|
|
|
* 3D nine mens'moris
|
|
|
|
* By Gnieark https://blog-du-grouik.tinad.fr
|
|
|
|
*
|
|
|
|
* github: https://github.com/gnieark/3D-Nine-Men-s-Morris
|
|
|
|
*
|
|
|
|
* License GNU-GPL V3
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
checkerRadius=9;
|
|
|
|
checkerHoleRadius=7;
|
|
|
|
|
|
|
|
waysDst=25;
|
|
|
|
nbeCubes=3;
|
|
|
|
|
|
|
|
for(zt=[0 : nbeCubes]){
|
|
|
|
checkerCube(waysDst*zt);
|
|
|
|
checkerCubeLiens(waysDst*zt);
|
|
|
|
}
|
|
|
|
for(zt=[1 : nbeCubes -1]){
|
|
|
|
for (angle=[0,90,180,270]){
|
|
|
|
rotate([0,0,angle])
|
|
|
|
translate([zt * waysDst,-checkerRadius/2,0])
|
|
|
|
cube([waysDst,checkerRadius,2.99]);
|
|
|
|
}
|
|
|
|
translate([0,0,zt* waysDst]) ZLink();
|
|
|
|
translate([0,0, (- zt - 1)* waysDst]) ZLink();
|
|
|
|
|
|
|
|
}
|
|
|
|
module checkerCube(ecartement =25){
|
|
|
|
for(z=[-1 * ecartement,0, ecartement]){
|
|
|
|
for(y=[-1 * ecartement,0, ecartement]){
|
|
|
|
for(x=[-1 * ecartement,0, ecartement]){
|
|
|
|
if ((x==0) && (y==0) && (z==0)){
|
|
|
|
}else{
|
|
|
|
translate([x,y,z]) checkerbase();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
module checkerCubeLiens(ecartement=25){
|
|
|
|
hgCube= (ecartement *2) + checkerRadius;
|
|
|
|
liCube= (ecartement *2) - checkerRadius;
|
|
|
|
for(z=[-1 * ecartement,0, ecartement]){
|
|
|
|
translate([0,0,z+1.5])
|
|
|
|
difference(){
|
|
|
|
cube([hgCube,hgCube,2.99], center=true);
|
|
|
|
cube([liCube,liCube,3], center=true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for(z=[-1 * ecartement, ecartement]){
|
|
|
|
translate([-ecartement,-checkerRadius/2,z]) cube([2*ecartement,checkerRadius,2.99]);
|
|
|
|
|
|
|
|
rotate([0,0,90]) translate([-ecartement,-checkerRadius/2,z]) cube([2*ecartement,checkerRadius,2.99]);
|
|
|
|
|
|
|
|
}
|
|
|
|
translate([ecartement,0,-ecartement])
|
|
|
|
rotate([0,0,180])
|
|
|
|
ZLink(ecartement*2 );
|
|
|
|
translate([-ecartement,0,-ecartement])
|
|
|
|
ZLink(ecartement*2 );
|
|
|
|
|
|
|
|
translate([0,ecartement,-ecartement])
|
|
|
|
rotate([0,0,270])
|
|
|
|
ZLink(ecartement*2 );
|
|
|
|
translate([0,-ecartement,-ecartement])
|
|
|
|
rotate([0,0,90])
|
|
|
|
ZLink(ecartement*2 );
|
|
|
|
}
|
|
|
|
|
|
|
|
module ZLink(hight=25){
|
|
|
|
difference(){
|
|
|
|
cylinder(r=checkerRadius, h=hight, $fn=100);
|
|
|
|
union(){
|
|
|
|
translate([0,0,-0.01]) cylinder(r=checkerHoleRadius, h=hight, $fn=100);
|
|
|
|
translate ([-checkerRadius - 0.1,-checkerRadius - 0.1,-0.01])
|
|
|
|
cube([checkerRadius+0.2,2* checkerRadius+ 2,hight +1]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
module checkerbase(){
|
|
|
|
difference(){
|
|
|
|
cylinder(r=checkerRadius, h=5, $fn=100);
|
|
|
|
translate([0,0,3]) cylinder(r=checkerHoleRadius, h=5, $fn=100);
|
|
|
|
}
|
|
|
|
}
|