+module PsHull(ps) {
+ hull(){
+ for (p = ps) {
+ translate(p)
+ circle(r = ourcirc_r, $fn=10);
+ }
+ }
+}
+
+module LeverSect(top, inadj=false){
+ P3 = inadj ? P3a : P3t;
+ P6 = inadj ? P6a : P6t;
+ P8 = top ? P8t : P8b;
+ P9 = top ? P9t : P9b;
+ difference(){
+ union(){
+ PsHull([P2,P3,P4]);
+ PsHull([P0,P1,P2,P5,P8,P9]);
+ }
+ hull(){
+ for (dp = [ [0,0],
+ (P6-P5),
+ (P3-P4)
+ ]) {
+ translate(Q0 + 5*dp) circle(r=edge_or, $fn=20);
+ }
+ }
+ }
+}
+
+module StrapSectTop(){
+ translate(P9t + ourcirc_r * [+1,-1]) {
+ difference(){
+ circle(r = strap_below + strap_th, $fn=40);
+ circle(r = strap_below, $fn=40);
+ }
+ }
+}
+
+module StrapSectBot(){
+ mirror([0,1]){
+ for (dx = [ -(strap_below + strap_th),
+ 0 ]) {
+ translate(P9b + [ ourcirc_r + dx, -10 ]) {
+ square([strap_th, 20]);
+ }
+ }
+ }
+}
+
+module Ribbles(xmax, xmin, y){
+ for (x = [ xmax + ourcirc_r - ribble_rad :
+ -ribble_rad * 4 :
+ xmin ]) {
+ translate([x, y])
+ circle(r = ribble_rad, $fn=20);
+ }
+}
+
+module LeverSectTop(){
+ difference(){
+ union(){
+ LeverSect(true, false);
+ Ribbles(P8t[0],
+ Q0[0] + edge_or + ribble_rad*2,
+ P5[1] + ourcirc_r);
+ }
+ 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]);
+ PsHull([P8b,P8eb,P9eb,P9b]);
+ Ribbles(P8eb[0],
+ P9b[0],
+ P8eb[1]);
+ 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]) StrapSectTop();
+ color("purple") translate([0,0,-10]) StrapSectBot();
+}
+
+module SomeLever() {
+ // SomeLever(){ LeverBot(inadj); LeverSectBot(); }
+ difference(){
+ linear_extrude(height=width, convexity=100) children(0);
+ for (i = [ 0 : nstraps - 1 ]) {
+ translate([0,0, (i + 0.5) / nstraps * width - strap_width/2])
+ linear_extrude(height=strap_width, convexity=10)
+ children(1);
+ }
+ }
+}
+
+module Test(){
+ linear_extrude(height=test_width, convexity=100) {
+ translate([0,2,0]) LeverSectTop();
+ LeverSectBot();
+ translate([0,kit_adj_shift]) LeverSectBot(true);
+ }
+}
+
+module LeverTop(){ ////toplevel
+ SomeLever(){
+ LeverSectTop();
+ StrapSectTop();
+ }
+}
+module LeverBot(){ ////toplevel
+ SomeLever(){
+ LeverSectBot();
+ StrapSectBot();
+ }
+}
+module LeverBotAdj(){ ////toplevel
+ SomeLever(){
+ LeverSectBot(true);
+ StrapSectBot(true);
+ }
+}
+
+module Kit(){ ////toplevel
+ translate([0,2,0]) LeverTop();
+ LeverBot();
+}
+
+module KitAdj(){ ////toplevel
+ translate([0,2,0]) LeverTop();
+ LeverBotAdj();
+}
+
+//LeverSectBot(true);
+//Demo();
+//LeverTop();
+//Test();
+//Kit();
+//KitAdj();