infty = 60; eps = 0.01; body_h = 4.5; d_out = 33; d_in = 15; module spacer() { difference() { cylinder(r = d_out/2, h = body_h); translate([0, 0, -eps]) cylinder(r = d_in/2, h = body_h + 2*eps); } } cube_d = 21; hole_d = 11.5; hole_d2 = 13; side_cut = 1.5; module inner() { difference() { translate([-cube_d/2, -cube_d/2, 0]) cube([cube_d, cube_d, cube_d]); // hole translate([0, 0, -eps]) cylinder(r = hole_d/2, h = cube_d + 2*eps); // hole - moiddle ring translate([0, 0, cube_d/2]) for (z = [-1, 1]) scale([1, 1, z]) cylinder(r1 = hole_d2/2, r2 = hole_d/2, h = 1.5); // bottom cuts for (x = [-1, 1]) scale([x, 1, 1]) translate([cube_d/2-side_cut, -infty/2, 0]) rotate([0, 45, 0]) cube(infty); // bottom cuts for (x = [-1, 1]) scale([x, 1, 1]) translate([cube_d/2, -infty/2, cube_d-side_cut]) rotate([0, -45, 0]) cube(infty); } } spacer(); translate([d_out, 0, 0]) inner();