+module PsHull(ps) {
+ hull(){
+ for (p = ps) {
+ translate(p)
+ circle(r = ourcirc_r, $fn=10);
+ }
+ }
+}
+
+module LeverSect(top, inadj=false){
+ P3 = inadj ? P3a : P3t;
+ P8 = top ? P8t : P8b;
+ P9 = top ? P9t : P9b;
+ diag = inadj ? atan(outside_push_inadj_slope) : 0;
+ PsHull([P2,P3,P4]);
+ difference(){
+ PsHull([P0,P1,P2,P5,P8,P9]);
+ translate(Q0) {
+ rotate(diag){
+ hull(){
+ circle(r=edge_or, $fn=20);
+ translate([0,10]) circle(r=edge_or, $fn=20);
+ }
+ }
+ }
+ }
+}
+
+module StrapSect(){
+ translate(P9t) {
+ difference(){
+ circle(r = strap_below + strap_th, $fn=40);
+ circle(r = strap_below, $fn=40);
+ }
+ }
+}
+
+module LeverSectTop(){
+ difference(){
+ union(){
+ LeverSect(true, false);
+ for (x = [ P8t[0] + ourcirc_r - ribble_rad :
+ -ribble_rad * 4 :
+ Q0[0] + edge_or + ribble_rad*2 ]) {
+ translate([x, P5[1] + ourcirc_r])
+ circle(r = ribble_rad, $fn=20);
+ }
+ }
+ translate([pivot_x,0]) circle(r= pivot_r + pivot_slop, $fn=20);
+ }
+}
+
+module LeverSectBot(inadj=false){
+ P6 = inadj ? P6a : P6t;
+ mirror([0,1]) {
+ LeverSect(false, inadj);
+ PsHull([P5,P6,P7]);
+ translate([pivot_x,0]) circle(r=pivot_r, $fn=20);
+ }
+}
+
+module Demo(){
+ translate([0,0,-5]) color("white") ExtrusionSect();
+ LeverSectTop();
+ translate([0,0,5]) LeverSectBot();
+ color("black") LeverSectBot(true);
+ color("blue") translate([0,0,10]) StrapSect();
+}
+
+module LeverTop(){
+ linear_extrude(height=width, convexity=100) LeverSectTop();
+}
+
+module LeverBot(inadj=false){
+ linear_extrude(height=width, convexity=100) LeverSectBot(inadj);
+}
+
+module Test(){
+ translate([0,2,0]) LeverTop();
+ LeverBot();
+ translate([0,-opening_height - 2,0]) LeverBot(true);