+ hull(){
+ for (y= [handle_y1 - handle_rh/2,
+ handle_y1 - 3*handle_rh/2])
+ translate([handle_x1 - handle_rh/2, y])
+ circle(r = handle_rh/2, $fn=20);
+ }
+}
+
+module RetainSection(){
+ translate(retain_mxy) {
+ rotate(retain_empir_angle) {
+ circle(r=retain_rad, $fn=20);
+ square([retain_stalk_len + 1, retain_stalk_h]);
+ }
+ }
+}
+
+module RetainCutout(gapping=false){
+ translate(retain_mxy) {
+ rotate(retain_empir_angle) {
+ translate([-50, -retain_rad]) {
+ square([50 + retain_stalk_len,
+ retain_cutout_h]);
+ }
+ }
+ }
+}
+
+module GappingSection(){
+ difference(){
+ union(){
+ InsertSection();
+ HandleSection();
+ }
+ RetainCutout(true);
+ }
+}
+
+module WithRetainSection(){
+ difference(){
+ union(){
+ InsertSection();
+ HandleSection();
+ }
+ RetainCutout();
+ }
+ RetainSection();
+}
+
+module BasicSection(){
+ InsertSection();
+ HandleSection();
+}
+
+module Handle(){
+ bs0 = retaining_len + overret_gaplen;
+ bs1 = bs0 + overret_hch;
+ linear_extrude(height=total_len, convexity=100) GappingSection();
+ linear_extrude(height=retaining_len, convexity=100) WithRetainSection();
+ translate([0,0, bs1]) linear_extrude(height= total_len - bs1)
+ BasicSection();
+ translate([0,0, bs1+0.1]) mirror([0,0,1]) {
+ intersection_for (sl=[0,1]) {
+ multmatrix([[1,0,0,0],
+ [0,1,sl,0],
+ [0,0,1,0],
+ [0,0,0,1]])
+ linear_extrude(height= overret_gaplen + 10, convexity=100)
+ BasicSection();
+ }
+ }
+}
+
+module Demo(){
+ color("red") translate([0,0,-3]) BasicSection();
+ color("blue") translate([0,0,3]) WithRetainSection();
+}
+
+module Test(){
+ linear_extrude(height=2) {
+ WithRetainSection();
+// translate([0, -handle_y0 + topprotr_y + 10])
+// BasicSection();
+ }