bar_width = 3; bar_height = 20; clamp_thick = 5; clamp_l1 = 10; clamp_l2 = 50; strut_height = bar_height; angle = 30; // fake value; TODO clamp_width = 2 * clamp_thick + bar_width; clamp_height = bar_height + clamp_thick; module clamp() { l = clamp_l2 - clamp_l1; difference() { translate([clamp_l1, -clamp_width/2, 0]) cube([l, clamp_width, clamp_height]); translate([0, -bar_width/2, clamp_thick + clamp_l2 * sin(angle)]) rotate([0, angle, 0]) cube([2*l, bar_width, 2*bar_height]); } } module con(num) { difference() { for (dist = [clamp_l1 + 2*clamp_thick, clamp_l2]) assign(l = 2 * dist * sin(180/num) + 2*clamp_thick) for (i = [1:num]) rotate(i*360/num) translate([dist, -clamp_thick, 0]) rotate(180/num) translate([0, 0, 0]) cube([clamp_thick, l, strut_height]); for (i = [1:num]) rotate(i*360/num) translate([0, -clamp_width/2, 0]) cube([2*clamp_l2, clamp_width, clamp_height]); } for (i = [1:num]) rotate(i*360/num) clamp(); } con(5); //clamp();