// -*- C -*- opening_height = 7.84; opening_depth = 7.88; openingcnr_dia = 2.75; opening_topprotr = 1.54; gap = 0.25; bot_overlap = 5; bot_w = 3; handle_d = 2; handle_w = 8; handle_rh = 2; handle_rcut = 3; // calculated ins_irad = openingcnr_dia/2 + gap; ins_orad = openingcnr_dia/2 + opening_height - gap; ins_th = ins_orad - ins_irad; handle_x0 = ins_irad; handle_h = bot_overlap + ins_th; handle_y0 = -ins_orad-bot_overlap; handle_y1 = handle_y0 + handle_h; handle_x1 = handle_x0 + bot_w + handle_w; module InsertSection(){ translate([-ins_orad, 0]) square([ins_th, opening_topprotr]); translate([0, -ins_orad]) square([ins_irad+1, ins_th]); intersection(){ translate([0.1,0.1]) mirror([1,1]) square([100,100]); difference(){ circle(r= ins_orad); circle(r= ins_irad, $fn=20); } } } module HandleSection(){ difference(){ hull(){ translate([handle_x0, handle_y0]) square([bot_w, handle_h]); for (y= [handle_y1 - handle_rh/2, handle_y1 - ins_th + handle_rh/2]) { translate([handle_x1 - handle_rh/2, y]) circle(r= handle_rh/2, $fn=20); } } hull(){ for (x= [handle_x0 + bot_w + handle_rcut/2, handle_x1 - handle_rh/2 - handle_rcut/2]) { translate([x, handle_y1]) circle(r = handle_rcut/2, $fn=20); } } } } InsertSection(); HandleSection();