$fn = 300; e = 0.02; difference() { union() { cylinder(h=15, d=11.6); translate([0, 0, 15]) cylinder(h=15, d=8); for (r=[0, 180]) rotate([0, 0, r]) { translate([0, 0, 25]) rotate_extrude(angle=45) square([5, 5]); translate([0, 0, 23]) intersection() { rotate_extrude(angle=45) square([5, 4]); cylinder(h=2, d1=8, d2=10); } } } translate([0, 0, -e]) cylinder(h=(e + 30 + e), d=6.1); } intersection() { translate([-3, 1, 16]) rotate([0, 90, 0]) linear_extrude(height=6) polygon([ [0, 0], [2, 2], [0, 2], ]); cylinder(h=30, d=8); } translate([20, 0, 0]) { difference() { cylinder(h=20, d=11.6); translate([0, 0, -e]) cylinder(h=(15 + e), d=8.2); cylinder(h=(20 + e), d=3.5); translate([0, 0, 18.8]) cylinder(h=(1.3 + e), d=5); translate([0, 0, 18.5]) cylinder(h=0.3, d1=3.5, d2=5); translate([0, 0, -e]) for (r=[0, 180]) rotate([0, 0, r]) { rotate_extrude(angle=45) square([5.05, 15 + e]); translate([0, 0, 10]) rotate_extrude(angle=135) square([5.05, 5 + e]); translate([0, 0, 8]) intersection() { rotate_extrude(angle=135) square([5.05, 4]); cylinder(h=(2+e), d1=8.2, d2=10.1); } } } for (r=[0, 180]) rotate([0, 0, r]) { rotate([0, 0, 85]) translate([5.05, 0, 9]) cylinder(h=7, r=0.2); } }