eps = 0.01; infty = 100; width = 30; depth = 10; hole_d = 3.5; wall_angle = 40; hole_angle = 10; hole_wall = 2; wall = 1; front_h = 0.5; difference() { hull() { translate([-width/2, 0, 0]) rotate([hole_angle, 0, 0]) cube([width, eps, front_h]); intersection() { translate([0, depth, 0]) rotate([hole_angle, 0, 0]) translate([0, 0, -infty/2]) cylinder(r = hole_d/2 + hole_wall, h = infty); translate([-infty/2, -infty/2, 0]) cube(infty); // z > 0 translate([0, 0, wall]) rotate([-90+wall_angle, 0, 0]) translate([-infty/2, 0, 0]) cube(infty); // upper side } } // screw hole translate([0, depth, 0]) rotate([hole_angle, 0, 0]) translate([0, 0, -infty/2]) cylinder(r = hole_d/2, h = infty); }