eps=0.01;
bar_w = 3.5 + 0.7;
-bar_h = 29.3 + 0.8;
-bar_to_wall = 24; // incl. the bar itself
+bar_h = 29.3 + 0.5;
+bar_to_wall = 27; // incl. the bar itself
wall = 3.1;
upper_overhang = 10.0 - wall;
-lower_overhang = 1.5;
+lower_overhang = 2.0;
body_h = 12;
+clip_front = 5; // stronger than wall for this object
+
// coordinates: front end of the bar is the xz plane, centered by the x axis,
// +x is the upper part, -x is lower, +y is front
module clip() {
// front part
translate([-bar_h/2-wall, 0, 0])
- cube([bar_h + 2*wall, wall, body_h]);
+ cube([bar_h + 2*wall, clip_front, body_h]);
// upper and lower horizontal bars
for (x = [-1, 1]) scale([x, 1, 1])
translate([bar_h/2, -bar_w -wall, 0])
difference() {
cube([lower_overhang + wall, wall, body_h]);
translate([lower_overhang + wall, 2*wall/3, 0])
- rotate([0, 0, -36])
+ rotate([0, 0, -45])
translate([0, -infty/2, -infty/2])
cube(infty);
}
// top
hull() {
translate([-bar_h/2-wall, -bar_w -wall, 0])
- cube([wall, bar_w + 2*wall, body_h]);
+ cube([wall, bar_w + wall + clip_front, body_h]);
translate([knifebar_x_off, knifebar_y_off-knifebar_rear_wall, 0])
cube([wall, -knifebar_y_off+wall+knifebar_rear_wall, body_h]);
// translate([knifebar_x_off, knifebar_y_off-knifebar_rear_wall, 0])
eps=0.01;
bar_diam = 20;
-body_h = 15;
-body_l = 100;
+body_h = 7;
+body_l = 150;
wall = 1.5;
-spike_w = 1;
-spike_l = 2;
+spike_w_bot = 1;
+spike_w_top = 6;
+spike_l = 5;
+
+spike_count = 8;
+spike_dist = body_l/(spike_count + 1);
module spike() {
hull() {
- translate([-body_h/4, 0, -eps])
- cube([body_h/2, bar_diam/2+wall/2, eps]);
- translate([-spike_w/2, 0, -body_h/2])
- cube([spike_w, bar_diam/2 + wall + spike_l, eps]);
+ translate([-spike_w_top/2, 0, body_h/2-eps])
+ cube([spike_w_top, bar_diam/2+wall/2, eps]);
+ translate([-spike_w_bot/2, 0, -body_h/2])
+ cube([spike_w_bot, bar_diam/2 + wall + spike_l, eps]);
}
}
translate([-body_l/2, 0, 0])
rotate([0, 90, 0])
cylinder(r = bar_diam/2 + wall, h = body_l);
- for (x = [-37.5:15:37.5])
- translate([x, 0, 0]) spike();
- for (x = [-45:15:45])
- translate([x, 0, 0]) scale([1, 1, -1]) spike();
+ for (i = [-spike_count/2:1:spike_count/2])
+ translate([i*spike_dist, 0, 0]) spike();
}
// tube hole
cylinder(r = bar_diam/2, h = body_l + 2*eps);
// cut the bottom
translate([-infty/2, -infty/2, -infty-body_h/2]) cube(infty);
- // cut the bottom
+ // cut the top
translate([-infty/2, -infty/2, body_h/2]) cube(infty);
- // cut the bottom rear half
+ // cut the rear half
translate([-infty/2, -infty, -infty/2]) cube(infty);
}