infty = 300; eps = 0.1; wall = 3; papouch_h = 55; w = 20; module din(height) { assign( din_h = 35, din_thick = 2, din_clip = 4, din_bottom_d = 10, din_bottom_thick = 1.0, din_bottom_hole = 0.7 ) { // front part translate([-din_h/2 -wall, 0, 0]) cube([din_h + 2*wall, wall, height]); // top plate translate([din_h/2, 0, 0]) cube([wall, 2*wall + din_thick, height]); // behind the top plate translate([din_h/2 - din_clip, wall + din_thick, 0]) cube([din_clip + wall, wall, height]); // bottom spring translate([-din_h/2 - din_bottom_d/2, din_bottom_d/2+wall-din_bottom_thick, 0]) difference() { cylinder(r = din_bottom_d/2, h = height, $fn = 32); translate([0, 0, -eps]) cylinder(r = din_bottom_d/2 - din_bottom_thick, h = height+2*eps, $fn = 16); translate([0, -din_bottom_d/2 + din_bottom_thick, -eps]) cube([din_bottom_d, din_bottom_hole, height + 2*eps]); }; }; }; module papouch(len, height, clip) { // front part translate([-len/2 - wall, 0, 0]) cube([len + 2*wall, wall, height]); // top plate translate([len/2, -clip, 0]) cube([wall, wall+clip, height]); // bottom plate translate([-len/2-wall, -clip, 0]) cube([wall, wall+clip, height]); }; din(w); papouch(papouch_h, w, 5.5);