difference() { union() { cage(); } translate([208.5 / 2, 0, 43.5]) rotate([90, 0, 30]) cylinder(h=50, d=4.2, center=true, $fn=100); } edges(); module edges() { translate([0, 0, 83]) torus2(d_major=204, d_minor=6, $fn=500); translate([0, 0, 3]) torus2(d_major=204, d_minor=6, $fn=500); } module cage() { difference() { translate([0, 0, 3]) cylinder(h=80, d=210, $fn=500); translate([0, 0, -20]) cylinder(h=150, d=204, $fn=500); for (a = [15 : 6 : 351]) { for (h = [11.5 : 18 : 66]) { rotate([0, 0, a]) translate([100, 0, h]) rotate([0, 90, 0]) cylinder(h=50, d=9, $fn=50); } } for (a = [12 : 6 : 348]) { for (h = [20.5 : 18 : 75]) { rotate([0, 0, a]) translate([100, 0, h]) rotate([0, 90, 0]) cylinder(h=50, d=9, $fn=50); } } } } module torus(r_major, r_minor) { rotate_extrude() translate([r_major, 0, 0]) circle(r=r_minor); } module torus2(d_major, d_minor) { torus(r_major=d_major / 2, r_minor=d_minor / 2); }