eps = 0.01; wall = 2; top_ins_w = 5; top_ins_h = 4; x_width = 7; y_height = 27; y_clip_l = 4; y_clip_end_r = 0.75; clip_h = 21; spool_r = 100; spool_angle = 15; spool_yoff = -(spool_r + wall + 8)*cos(spool_angle); spool_xoff = -(spool_r + wall + 8)*sin(spool_angle); beam_h = 10; bearing_zoff = beam_h + wall; bearing_d = 15 + 0.1; bearing_h = 9; bearing_r1 = bearing_d/2+wall - bearing_zoff/3; module extrusion_clip(body_h) { translate([-wall, -wall, 0]) cube([wall + x_width+eps, wall, body_h]); translate([-wall, -wall, 0]) cube([wall, wall + y_height + eps, body_h]); translate([x_width, -wall, 0]) cube([top_ins_w, top_ins_h + wall, body_h]); translate([-wall, y_height, 0]) cube([wall+y_clip_l, wall, body_h]); translate([0, 10, 0]) hull() { translate([-eps, -4, 0]) cube([eps, 8, body_h]); translate([1.5-eps, -3, 0]) cube([eps, 6, body_h]); } translate([y_clip_l-y_clip_end_r, y_height, 0]) cylinder(r = y_clip_end_r, h = body_h, $fn = 4); } module bearing_insert() { rotate([0, 0, 30]) cylinder(r1 = bearing_r1, r2 = bearing_d/2 + wall, h = bearing_zoff, $fn = 128); for (a = [0:120:360]) rotate([0, 0, a]) translate([-wall/2, 0, bearing_zoff]) cube([wall, bearing_d/2, bearing_h]); } module beam() { difference() { hull() { translate([-wall, -wall, 0]) cube([wall + x_width + top_ins_w, wall, beam_h]); translate([-wall, -wall, 0]) cube([wall, 2*y_height/3 + wall, beam_h]); translate([spool_xoff, spool_yoff, 0]) rotate([0, 0, 30]) cylinder(r = bearing_r1, h = beam_h, $fn = 6); } translate([0, 0, -eps]) cube([x_width+top_ins_w+eps, y_height+eps, beam_h + 2*eps]); } } module holder() { extrusion_clip(body_h = clip_h); translate([spool_xoff, spool_yoff, 0]) bearing_insert(); beam(); } // holder(); for (x = [-1, 1]) scale([x, 1, 1]) translate([12, 0, 0]) rotate([0, 0, spool_angle]) holder();