8 hinge_pin = 1.5; // xxx
13 screw_head = 10; // xxx
14 screw_nut_across = 10; // xxx
15 screw_nut_th = 5; // xxx
16 screw_head_h = 5; // xxx
18 knob_behind_across = 15; // xxx
29 bridge_slop_factor = 1.5;
36 main_r = tube_dia/2 + main_th;
38 hinge_outer_r = hinge_around + hinge_pin/2;
39 hinge_y = tube_dia/2 + hinge_outer_r;
41 screw_max_y_lhs = -main_r -screw_nut_across/2;
42 screw_max_y_rhs = -main_r -knob_behind_across/2;
44 screw_y = min(screw_max_y_lhs,
47 bot_y = screw_y -max( screw_nut_across, knob_behind_across/2 )
52 module TubePlan(){ circle(r = tube_dia/2); }
53 module HingePinPlan(){ translate([0, hinge_y]) circle(r= hinge_pin/2); }
54 module HingeBodyPlan(){ translate([0, hinge_y]) circle(r= hinge_outer_r); }
56 module TubeClampLeftPlan(){
59 polygon([[ 0, hinge_y + hinge_outer_r ],
60 [ -main_r + overlap_l, hinge_y + hinge_outer_r ],
61 [ -main_r + overlap_l, bot_y ],
62 [ -clamp_gap/2, bot_y ],
73 module TubeClampLeft() { ////toplevel
74 linextr(-clamp_width/2, clamp_width/2)
78 module TubeClampRightPlan(){
81 rectfromto([ clamp_gap/2, bot_y ],
82 [ clamp_gap/2 + behind_knob_th, 0 ]);
88 rectfromto([ clamp_gap/2, main_r*5 ],
101 linextr(-clamp_width/2, clamp_width/2)
104 linextr_x_yz(-main_r*5, main_r*5)
105 translate([screw_y, 0])
110 module TubeClampLeft() { ////toplevel
115 translate([0, screw_y, 0]) {
116 linextr_x_yz(-(clamp_gap/2 + screw_nut_th), 0)
117 square([screw_nut_across, screw_nut_across * bridge_slop_factor],
120 linextr_x_yz(-main_r, -main_r + screw_head_h)
121 square([screw_head, screw_head * bridge_slop_factor],
127 module TubeClampRight() { ////toplevel
129 TubeClampRightPlan();