include base_wall = 3; rod_d = 5 + 0.5; d_max = 40; d_min = 15; steps = 3; difference() { cylinder(r = d_max/2+base_wall + rod_d/2, h = base_wall, $fn = 6); 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 = base_wall + 2*eps, $fn = 6); } } // strut strut_w = 15; strut_l = 80; Ty((d_max/2+base_wall+rod_d/2)*cos(30)) { Tx(-strut_w/2) { cube([strut_w, strut_l, base_wall]); Ty(strut_l-base_wall) difference() { cube([strut_w, base_wall, strut_w]); Tx(strut_w/2) Tz(strut_w/2) Rx(-90) Tz(-eps) cylinder(r = 2.5, h = base_wall+2*eps, $fn = 6); } } Mx() hull() { Tx(strut_w/2-base_wall) { Ty(-base_wall) cube([base_wall, eps, base_wall]); Ty(strut_l-base_wall) cube([base_wall, base_wall, strut_w]); } } }