include base_wall = 4; wall = 1.5; rod_d = 5 + 1; d_max = 45; d_min = 20; steps = 3; strut_w = 15; strut_l = 80; strut_side_inner_l = 8; center_hole_d = d_min-wall-rod_d; module base() { difference() { cylinder(r = d_max/2+2*wall + rod_d/2, h = base_wall, $fn = 6); Tz(wall) cylinder(r = d_max/2 + rod_d/2+wall, h = base_wall, $fn = 6); } } module strut() { Ty((d_max/2+wall+rod_d/2)*cos(30)) { Tx(-strut_w/2) { cube([strut_w, strut_l, wall]); Ty(strut_l-wall) difference() { cube([strut_w, wall, strut_w]); Tx(strut_w/2) Tz(strut_w/2) Rx(-90) Tz(-eps) cylinder(r = 2.5, h = wall+2*eps, $fn = 6); } } Mx() hull() { Tx(strut_w/2-wall) { Ty(-strut_side_inner_l) cube([wall, eps, base_wall]); Ty(strut_l-wall) cube([wall, wall, strut_w]); } } } } difference() { union() { base(); strut(); } for (i = [0:1:steps]) { Rz((steps-i)*85/steps) for (angle = [0:60:360]) Rz(angle) Tx(d_min/2+i*(d_max-d_min)/(2*(steps))) Tz(-eps) cylinder(r = rod_d/2, h = wall + 2*eps, $fn = 6); } Tz(-eps) cylinder(r = center_hole_d/2, h = infty); }