infty = 100; eps = 0.01; fuse_w = 40; gear_w = fuse_w - 16; gear_l = 25; spring_l = 6; base_w = fuse_w - 10; base_l = gear_l + 3; base_h = 1; base_beam_w = spring_l + 2; rear_spring_l = 3; rear_beam_w = rear_spring_l + 3; hook_wall = 1.5; hook_in = 1.5; module hook(w) { translate([0, w/2, base_h + hook_in/2]) rotate([90, 90, 0]) difference() { hull() { cylinder(r = hook_in/2 + hook_wall/2, h = w, $fn = 6); translate([hook_in/2, 0, 0]) cube([eps, hook_in/2 + hook_wall, w]); } translate([0, 0, -eps]) cylinder(r = hook_in/2, h = w + 2*eps, $fn = 6); translate([-infty/2, -infty, -infty/2]) cube(infty); translate([hook_in/2 + eps,, -infty/2, -infty/2]) cube(infty); } } // wide beam translate([0, -base_w/2, 0]) cube([base_beam_w, base_w, base_h]); // long center beam translate([0, -rear_beam_w/2, 0]) cube([base_l, rear_beam_w, base_h]); // rear hook translate([gear_l, 0, 0]) hook(rear_spring_l); // rear front hook translate([gear_l - hook_in/2, 0, 0]) rotate([0, 0, 180]) hook(rear_spring_l); // side hooks for (y = [-1, 1]) scale([1, y, 1]) translate([1, gear_w/2, 0]) rotate([0, 0, 70]) translate([0, -spring_l/2, 0]) hook(spring_l);