/******************************************************************************!
 * \file assemblage.scad
 * \author Sebastien Beaugrand
 * \sa http://beaugrand.chez.com/
 * \copyright CeCILL 2.1 Free Software license
 ******************************************************************************/
module trouDAssemblage(x,y,d,e) {
    translate([x,y,-1]) cylinder(h=e+2,d=d);
    translate([x,y, 1]) cylinder(h=e,d1=d,d2=d+e*sqrt(3));
}
function patteP(L) = 15;
function patteL1(L) = (L==60)?14:(L==80)?18:(L==100)?26:(L==120)?33:(L==140)?46:55;
function patteL2(L) = (L==60)?19:(L==80)?28:(L==100)?27:(L==120)?36:30;
module patte(L) {
    l=patteP(L);
    d=4.5;
    e=2;
    L1=patteL1(L);
    L2=patteL2(L);
    L3=(L-2*L1-L2)/2;
    difference() {
        union() {
            translate([l/2,0,0]) cube([L-l,l,e]);
            translate([  l/2,l/2,0]) cylinder(h=e,d=l);
            translate([L-l/2,l/2,0]) cylinder(h=e,d=l);
        }
        trouDAssemblage(L3     ,l/2,d,e);
        trouDAssemblage(L3+L1  ,l/2,d,e);
        trouDAssemblage(L-L3   ,l/2,d,e);
        trouDAssemblage(L-L3-L1,l/2,d,e);
    }
}
function equerreP(L) = (L==100)?16:(L==120)?18:15;
function equerreL1(L) = (L==30)?10:(L==40)?12:(L==80)?17:(L==100)?26:(L==120)?30:16;
function equerreL2(L) = (L==30)?14:(L==40)?22:(L==80)?55:(L==100)?60:(L==120)?77:(L==50)?25:(L==60)?35:46;
module equerre(L) {
    l=equerreP(L);
    d=4.5;
    e=2;
    L1=equerreL1(L);
    L2=equerreL2(L);
    module patte() {
        difference() {
            union() {
                translate([e+1,0,0]) cube([L-l/2-e-1,l,e]);
                translate([L-l/2,l/2,0]) cylinder(h=e,d=l);
            }
            trouDAssemblage(L1   ,l/2,d,e);
            trouDAssemblage(L1+L2,l/2,d,e);
        }
    }
    union() {
        patte();
        translate([0,l,0]) rotate([0,-90,180]) patte();
        translate([e+1,l,e+1]) rotate([90,0,0]) intersection() {
            difference() {
                cylinder(h=l,r=e+1);
                translate([0,0,-1]) cylinder(h=l+2,r=1);
            }
            translate([-e-2,-e-2,-1]) cube([e+2,e+2,l+2]);
        }
    }
}
y=30;
translate([0,0*y,0]) equerre(30); translate ([40,0*y,0]) patte(160);
translate([0,1*y,0]) equerre(40); translate ([50,1*y,0]) patte(140);
translate([0,2*y,0]) equerre(50); translate ([60,2*y,0]) patte(120);
translate([0,3*y,0]) equerre(60); translate ([70,3*y,0]) patte(100);
translate([0,4*y,0]) equerre(70); translate ([80,4*y,0]) patte(80);
translate([0,5*y,0]) equerre(80); translate ([90,5*y,0]) patte(60);
translate([0,6*y,0]) equerre(100);
translate([0,7*y,0]) equerre(120);