eps = 0.01; infty = 200; blade_w = 3.0; blade_h = 32; blade_l = 200; slot_l = 40; slot_angle_y = -15; slot_angle_z = -10; wall = 1.5; clip_wall = 3.0; clip_h = 15; clip_rear = 20; clip_in = 3.5; // inner width clip_l_top = 65; module slanted_knife() { rotate([90, slot_angle_y, slot_angle_z]) translate([-blade_w/2, -eps, wall]) cube([blade_w, blade_l+2*eps, blade_h]); } module slanted_knife_slot() { difference() { translate([0, 0, -wall]) rotate([90, slot_angle_y, slot_angle_z]) translate([-wall-blade_w/2, 0, 0]) cube([blade_w+2*wall, slot_l, blade_h + 2*wall]); /* rotate([0, 0, slot_angle_z]) translate([0, -infty/2, -infty/2]) cube(infty); */ } } module body() { for (x = [0:20:60]) translate([-x, 30, 0]) slanted_knife_slot(); // main clip stem translate([-75, 0, 0]) cube([75+clip_l_top, clip_wall, clip_h]); // rear support translate([-44+clip_wall, -15, 0]) cube([clip_wall, 15, clip_h]); // horizontal clip part translate([clip_l_top-clip_wall, -clip_wall-clip_in, 0]) cube([clip_wall, clip_in+2*clip_wall, clip_h]); // rear clip part translate([clip_l_top-clip_rear, -clip_wall-clip_in, 0]) cube([clip_rear, clip_wall, clip_h]); } module main() { difference() { body(); // z-negative plane translate([-infty/2, -infty/2, -infty]) cube(infty); for (x = [0:20:60]) translate([-x, 30, 0]) slanted_knife(); } } main();