+ // rear hook - front part
+ hull() {
+ translate([gear_l-rear_spring_bot_w/2, -rear_spring_l/2, base_h])
+ cube([rear_spring_bot_w/2-rear_slot_w/2, rear_spring_l, eps]);
+ translate([gear_l-rear_spring_w/2, -rear_spring_l/2, hook_h+hook_in+hook_wall-eps])
+ cube([rear_spring_w/2-rear_slot_w/2, rear_spring_l, eps]);
+ }
+ // rear hook - rear part
+ hull() {
+ translate([gear_l + rear_slot_w/2, -rear_spring_rear_l/2, base_h])
+ cube([rear_spring_bot_w/2-rear_slot_w/2, rear_spring_rear_l, eps]);
+ translate([gear_l + rear_slot_w/2, -rear_spring_rear_l/2, hook_h+hook_in+hook_wall-eps])
+ cube([rear_spring_w/2-rear_slot_w/2, rear_spring_rear_l, eps]);
+ }
+
+ // side hooks
+ for (y = [-1, 1]) scale([1, y, 1]) intersection() {
+ translate([0, gear_w/2, eps]) rotate([0, 0, -side_hook_angle])
+ translate([-10, 0, 0]) hull() {
+ cube([20, side_spring_bot_w, base_h-eps]);
+ cube([20, side_spring_w, hook_h + hook_in + hook_wall-eps]);
+ }
+ // above the beam
+ translate([0, -base_w/2, base_h/2])
+ cube([base_beam_w, base_w, infty]);
+ // cut the front sides
+ translate([0, gear_w/2 + 1.25, eps])
+ rotate([0, 0, -side_hook_angle_cut])
+ translate([-5, 0, 0])
+ cube(20);
+
+ }
+}