$fn = 100; dext = 335; dint = 215; lcube = (((dext - dint) / 2) + 20); epaisseur = 5; module etalon (h){ color("blue") rotate([0,-90,0]) translate([-dint/2+20,0,h/2]) difference(){ cylinder(h=h, r = dext/2, center = true); cylinder(h=h+1, r = dint/2, center=true); } } translate([-2.5,0,0]) etalon (20); translate([202.5,0,0]) etalon(200); union (){ difference(){ rotate([0, -90, 0]) translate([(-(dext / 2) + lcube), 0, 0]) intersection() { union() { cylinder(h = 30, r = (dint / 2), center = true); cylinder(h = epaisseur, r = ((dext - 20) / 2), center = true); translate([0, 0, (((30 / 2) + (20 / 2)) - 0.1)]) cylinder(h = 20, r1 = (dint / 2), r2 = ((dint - 5) / 2), center = true); translate([0, 0, ((-(30 / 2) - (20 / 2)) + 0.1)]) cylinder(h = 20, r1 = ((dint - 5) / 2), r2 = (dint / 2), center = true); } translate([((dext / 2) - (lcube / 2)), 0, 0]) cube([lcube, 50, 80], center = true); } union(){ translate([4,0,0]) cylinder(h=7, r=15/2, center = true); translate([12,0,0]) cylinder(h=7, r=15/2, center = true); translate ([-4,0,0]) cylinder(h=5, r=23/2, center=true); } translate ([-12,0,0]) cylinder(h=5, r=23/2, center=true); } translate([0,0,5]) union(){ for (i=[-1:1]){ translate([0,i * 6,0]) cube ([50,0.5,10],center=true); } for (i = [-3:2]){ translate([i * 6,0,0]) cube([0.5,40,10],center=true); } } }