+module ClampCollarPlan(){
+ circle(r= thread_nom/2 + clamp_bot_collar_th);
+}
+module ClampHolePlan(){
+ circle(r= clamp_hole_dia/2);
+}
+module ClampArmPlan(){
+ rectfromto([0, -clamp_w/2],
+ [clamp_l, +clamp_w/2]);
+}
+
+module ClampTop(){ ////toplevel
+ linear_extrude(height = clamp_top_th, convexity=4) {
+ difference(){
+ union(){
+ ClampArmPlan();
+ ClampCollarPlan();
+ }
+ ClampHolePlan();
+ }
+ }
+ linear_extrude(height = clamp_reg_sz, convexity=4) {
+ difference(){
+ for (m=[0,1]){
+ mirror([0,m,0])
+ translate([0, clamp_reg_sz/2 + clamp_reg_clear_y, 0])
+ rectfromto([-clamp_reg_bot_x_min - clamp_reg_extra_x, 0 ],
+ [0, clamp_reg_sz ]);
+ }
+ ClampHolePlan();
+ }
+ }
+}
+
+module ClampBot(){ ////toplevel
+ linear_extrude(height = clamp_bot_th, convexity=4) {
+ difference(){
+ ClampArmPlan();
+ ClampHolePlan();
+ }
+ }
+ translate([clamp_l, 0, clamp_bot_th-0.1])
+ linear_extrude(height = clamp_bot_tooth_h +0.1)
+ rectfromto([ -clamp_bot_tooth_d, -clamp_w/2 ],
+ [ 0, +clamp_w/2 ]);
+ translate([0,0, clamp_bot_th])
+ mirror([0,0,1])
+ linear_extrude(height = clamp_bot_collar)
+ difference(){
+ ClampCollarPlan();
+ ClampHolePlan();
+ }
+ translate([0, 0, clamp_bot_th]) {
+ linextr(-clamp_reg_sz, clamp_max_table_th+clamp_reg_sz) {
+ translate([-clamp_reg_bot_x_min, 0]) {
+ rectfromto([ 0, -clamp_reg_sz/2 ],
+ [ clamp_reg_sz, +clamp_reg_sz/2 ]);
+ }
+ }
+ linextr(-clamp_reg_sz, 0) {
+ difference(){
+ rectfromto([ -clamp_reg_bot_x_min, -clamp_reg_sz/2 ],
+ [ 0, +clamp_reg_sz/2 ]);
+ ClampHolePlan();
+ }
+ }
+ }
+}
+
+//Wingnut();
+//Stem();