3 opening_height = 7.84 - 0.3;
6 opening_topprotr = 1.54;
10 retain_empir_angle = 20;
11 retain_empir_stalkw = 0.8;
13 retain_empir_inward = 0.65;
29 ins_irad = openingcnr_dia/2 + gap;
30 ins_orad = openingcnr_dia/2 + opening_height - gap;
31 ins_th = ins_orad - ins_irad;
34 handle_h = bot_overlap + ins_th;
35 handle_y0 = -ins_orad-bot_overlap;
36 handle_y1 = handle_y0 + handle_h;
38 handle_x1 = handle_x0 + bot_w + handle_w;
40 module InsertSection(){
42 translate([-ins_orad, 0]) square([ins_th, 0.1]);
43 translate([-ins_irad - topprotr_rad,
44 opening_topprotr - topprotr_rad])
45 circle(r=topprotr_rad, $fn=10);
47 translate([0, -ins_orad]) square([ins_irad+1, ins_th]);
49 translate([0.1,0.1]) mirror([1,1]) square([100,100]);
52 circle(r= ins_irad, $fn=20);
57 module HandleSection(){
60 translate([handle_x0, handle_y0])
61 square([bot_w, handle_h]);
62 for (y= [handle_y1 - handle_rh/2,
63 handle_y1 - ins_th + handle_rh/2]) {
64 translate([handle_x1 - handle_rh/2, y])
65 circle(r= handle_rh/2, $fn=20);
69 for (x= [handle_x0 + bot_w + handle_rcut/2,
70 handle_x1 - handle_rh/2 - handle_rcut/2]) {
71 translate([x, handle_y1])
72 circle(r = handle_rcut/2, $fn=20);
77 for (y= [handle_y1 - handle_rh/2,
78 handle_y1 - 3*handle_rh/2])
79 translate([handle_x1 - handle_rh/2, y])
80 circle(r = handle_rh/2, $fn=20);
84 module RetainSection(){
85 rotate(180-retain_empir_angle)
86 translate([0, ins_orad - retain_empir_inward])
87 circle(r=retain_rad, $fn=20);
90 module RetainCutout(gapping=false){
91 rotate(180-retain_empir_angle)
92 translate([0, ins_orad - retain_empir_inward]) {
94 circle(r=retain_rad + cutout_gap, $fn=20);
96 rotate(180 + retain_empir_angle/2)
97 translate([0, -retain_empir_stalkw])
98 square([100, retain_empir_stalkw*2]);
103 module GappingSection(){
111 module WithRetainSection(){
120 module BasicSection(){
131 color("red") RetainSection();
135 linear_extrude(height=2) WithRetainSection();