cap(); body(); module cap(){ difference(){ hull(){ translate([0, 0, 0])sphere(d=15.50+4,$fn=60); translate([88-15.5/2-17.5/2, 0, 0])sphere(d=17.50+4, $fn=60); } union(){ hull(){ translate([0, 0, 0])sphere(d=15.50, $fn=60); translate([88-15.5/2-17.5/2, 0, 0])sphere(d=17.50, $fn=60); } translate([-10, -15, 0])cube([100,100 ,30 ]); } } } module body(){ difference(){ hull(){ translate([0, 0, 0])rotate([0,0,0])cylinder(r=15.50/2+2, h=127, $fn=60); translate([88-15.5/2-17.5/2, 0, 0])rotate([0,0,0])cylinder(r=17.50/2+2, h=127, $fn=60); } union(){ hull(){ translate([0, 0, -1])rotate([0,0,0])cylinder(r=15.50/2, h=129, $fn=60); translate([88-15.5/2-17.5/2, 0, -1])rotate([0,0,0])cylinder(r=17.50/2, h=129, $fn=60); } difference(){ translate([36.2,20,143.4-7])rotate([90,0,0])cylinder(d=38, h=50, $fn=6); union(){ translate([36.2,21,143.4-7])rotate([90,0,0])cylinder(d=37.8, h=52, $fn=6); translate([36.2,21,133.4-7+0.5])rotate([0,0,0])cube([50,120 ,1 ],true); translate([36.2,21,143.4-7])rotate([0,60,0])cube([50,120 ,1 ],true); translate([36.2,21,143.4-7])rotate([0,-60,0])cube([50,120 ,1 ],true); } } } } }