eps = 0.01;
fuse_w = 40;
-gear_w = fuse_w - 16;
-gear_l = 25;
+fuse_l = 50;
+
+gear_w = fuse_w - 6;
+gear_l = fuse_l - 5; // 26
spring_l = 6;
-base_w = fuse_w - 10;
-base_l = gear_l + 3;
-base_h = 1;
+base_w = fuse_w;
+base_l = gear_l + 5;
+base_h = 1.2;
base_beam_w = spring_l + 2;
-rear_spring_l = 3;
-rear_beam_w = rear_spring_l + 3;
+base_reinf_h = 1.5;
+base_reinf_w = 2;
-hook_wall = 1.5;
-hook_in = 1.5;
+rear_spring_l = 2.5;
+rear_spring_rear_l = 6;
+rear_beam_w = rear_spring_l + 4;
+rear_spring_w = 3;
+rear_spring_front_bot_w = 15;
+rear_spring_bot_w = 10;
+rear_slot_w = 1.4;
-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]);
+side_spring_bot_w = 3.5;
+side_spring_w = 1.5;
+
+hook_wall = 1;
+hook_in = 1.7;
+hook_h = base_h + base_reinf_h/2;
+side_hook_angle = 4;
+side_hook_angle_cut = 10;
+
+base_h = 0.6;
+
+module body() {
+ // base plate
+ translate([0, -fuse_w/2, 0]) cube([fuse_l, fuse_w, base_h]);
+
+ // wide beam
+ hull() {
+ translate([0, -base_w/2, 0])
+ cube([base_beam_w, base_w, base_h]);
+ translate([base_beam_w/2-base_reinf_w/2, -base_w/2, base_h-eps])
+ cube([base_reinf_w, base_w, base_reinf_h + eps]);
+ }
+
+ // long center beam
+ hull() {
+ translate([base_beam_w/2, -rear_beam_w/2, 0])
+ cube([base_l - base_beam_w/2, rear_beam_w, base_h]);
+ translate([base_beam_w/2, -base_reinf_w/2, base_h-eps])
+ cube([base_l - base_beam_w/2, base_reinf_w, base_reinf_h + eps]);
+ }
+
+ // rear hook - front part
+ hull() {
+ translate([gear_l-rear_spring_front_bot_w/2, -rear_spring_l/2, base_h])
+ cube([rear_spring_front_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, rear_spring_l, eps]);
+ }
+ // rear hook - rear part
+ hull() {
+ translate([gear_l, -rear_spring_rear_l/2, base_h])
+ cube([rear_spring_bot_w/2, rear_spring_rear_l, eps]);
+ translate([gear_l, -rear_spring_rear_l/2, hook_h+hook_in+hook_wall-eps])
+ cube([rear_spring_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() {
+ translate([0, -side_spring_bot_w, 0])
+ cube([20, 2*side_spring_bot_w, base_h-eps]);
+ translate([0, -side_spring_w, 0])
+ cube([20, 2*side_spring_w, hook_h + hook_in + hook_wall-eps]);
}
- 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);
+ // 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);
+*/
+
}
}
+difference() {
+ body();
+ // rear hole
+ translate([gear_l, 0, hook_h+hook_in/2])
+ rotate([90, 90, 0])
+ translate([0, 0, -rear_beam_w/2-eps])
+ cylinder(h = rear_beam_w+2*eps, r = hook_in/2, $fn = 6);
+ // rear slot above the hole
+ // translate([gear_l-rear_slot_w/2, -rear_beam_w/2+eps, hook_h+hook_in/2])
+ // cube([rear_slot_w, rear_beam_w+2*eps, infty]);
+ // side slots
+ for (y = [-1, 1]) scale([1, y, 1]) {
+ translate([0, gear_w/2, hook_h+hook_in/2]) {
+ rotate([0, 90, -side_hook_angle])
+ translate([0, 0, -10])
+ cylinder(r1 = hook_in, r2 = hook_in/2, h = 20, $fn = 6);
-
-// 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);
+ rotate([0, 0, -side_hook_angle])
+ rotate([25, 0, 0])
+ hull() {
+ translate([-10, -rear_slot_w, 0])
+ cube([eps, 2*rear_slot_w, 20]);
+ translate([10, -rear_slot_w/2, 0])
+ cube([eps, rear_slot_w, 20]);
+ }
+ }
+ }
+}