$fn = 50; //difference() { union() { difference() { cylinder(r=4, h=4*8); ball_end_n(); translate([0, 0, 6]) cylinder(r=3.2, h=4*8); translate([-5, -0.5, 4*8-6]) cube(size=[10, 1, 3], center=false); } color([1, 0.5, 0.5]) translate([0, 0, 6*8]) rotate([180, 0, 0]) { difference() { union() { cylinder(r=3, h=3*8); cylinder(r=4, h=8); } translate([-5, -0.7, 14-3]) cube(size=[10, 1.4, 8+3], center=false); ball_end_n(); } } //rotate([90, 0, 0]) color([0.5, 0.5, 1]) translate([-4, -0.5, 4*8-6]) cube(size=[8, 1, 3], center=false); // } translate([0, -50, -1]) cube(size=[10, 100, 50]); } module ball_end() { difference() { ball_end_p(); ball_end_n(); } } module ball_end_p() { union() { translate([0, 0, 1.7+3.2+1-4]) difference() { sphere(r=4); translate([-5, -5, -6]) cube(size=[10,10,5]); } cylinder(r=4, h=2); } } module ball_end_n() { translate([0, 0, 1.7]) sphere(r=3.2); translate([0, 0, -0.1]) cylinder(r=2.9, h=2); }