od=75; id=9.5; len=80; module truss() { polygon([[od/2-3,0], [id/2,len/4], [od/2-3,len/2], [id/2,3*len/4], [od/2-3,len], [od/2,len], [id/2+3,3*len/4], [od/2,len/2], [id/2+3,len/4], [od/2,0] ]); } module end_spoke() { linear_extrude(3) polygon([[-1.5,id/2], [1.5,id/2], [1.5,od/2], [-1.5,od/2]]); } difference() { union() // main body { linear_extrude(len) { difference() { circle(d=od, $fn=90); circle(d=od-4, $fn=90); } difference() { circle(d=id+4, $fn=90); circle(d=id, $fn=90); } } // diagonal spokes translate([0,1.5,0]) rotate([90,0,0]) linear_extrude(3) truss(); translate([-1.5,0,0]) rotate([90,0,90]) linear_extrude(3) truss(); translate([0,-1.5,0]) rotate([90,0,180]) linear_extrude(3) truss(); translate([1.5,0,0]) rotate([90,0,-90]) linear_extrude(3) truss(); } // quick hack: cut in half so we can add flange translate([0,0,len/2]) linear_extrude(len/2+1) circle(d=od+1, $fn=90); } // flange linear_extrude(2) difference() { circle(d=od+20, $fn=90); circle(d=od, $fn=90); } // spokes to support the flange end_spoke(); rotate([0,0,90]) end_spoke(); rotate([0,0,180]) end_spoke(); rotate([0,0,-90]) end_spoke();