// -*- C -*-
+include <utils.scad>
+
tube_dia = 48.3;
-th = 6;
+th = 7;
+
+pin_gap = 1.5; // around
+
+smooth_r = 10;
-pin_gap = 1.0; // around
+bolt_dia = 5 + 0.75;
+bolt_flat = 10 + 1;
+
+open_gap = 10;
+
+hinge_unit = 10;
+hinge_units = 4;
+hinge_z_gap = 1;
// calculated
pin_dia = th;
hole_dia = th + pin_gap;
+hinge_gap = pin_gap;
+
hinge_o_r = 0.5 * hole_dia + th;
hinge_x = -0.5 * tube_dia - hinge_o_r;
+bolt_x = 0.5 * tube_dia + bolt_flat * 0.5;
+max_x = bolt_x + max(0.5 + bolt_dia + th, 0.5 * bolt_flat/2);
+
+flats_y = open_gap/2 + th;
+
+stride_z = hinge_unit*2 + hinge_z_gap*2;
+total_z = hinge_units * stride_z - hinge_z_gap;
+
+$fa = 3;
+$fs = 0.1;
+
+module MainPlan() {
+ difference(){
+ offset(r=-smooth_r) offset(delta=smooth_r)
+ union(){
+ translate([hinge_x, 0]) circle(r= hinge_o_r);
+ circle(r = tube_dia/2 + th);
+ rectfromto([0, -flats_y],
+ [max_x, +flats_y]);
+ }
+ circle(r = tube_dia/2);
+ rectfromto([0, -open_gap/2],
+ [max_x+1, +open_gap/2]);
+ translate([hinge_x, 0]) circle(r= hole_dia/2);
+ }
+}
+
+module Portion(d=0) {
+ translate([hinge_x, 0]) circle(r= hinge_o_r + d);
+ rectfromto([hinge_x*2, 0],
+ [max_x+10, -(tube_dia/2+th+10)]);
+}
+
+module MainPlanA(){
+ intersection(){
+ MainPlan();
+ Portion(0);
+ }
+}
+
+module MainPlanB(){
+ difference(){
+ MainPlan();
+ Portion(hinge_gap);
+ }
+}
+
+module HalfClamp(){
+ linextr(0, total_z) mirror([0,1]) MainPlanB();
+ for (i=[0 : hinge_units-1]) {
+ translate([0,0, stride_z*i])
+ linextr(0, hinge_unit) MainPlanA();
+ }
+}
+
+module PlanDemo(){
+ MainPlan();
+ translate([0,0,-4]) color("red") Portion(1);
+ translate([0,0,-2]) color("grey") Portion(0);
-module Plan() {
- union(){
- translate([hinge_x, 0]) circle(r= hinge_o_r);
- circle(r = tube_dia/2 + th);
+ translate([0, tube_dia*1.5]) {
+ MainPlanB();
+ MainPlanA();
}
+// translate([max_x - hinge_x + 20, 0]) color("blue") MainPlanA();
}
-Plan();
+//PlanDemo();
+HalfClamp();