// -*- C -*- include tube_dia = 48.3; th = 7; pin_gap = 1.5; // around smooth_r = 10; 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); translate([0, tube_dia*1.5]) { MainPlanB(); MainPlanA(); } // translate([max_x - hinge_x + 20, 0]) color("blue") MainPlanA(); } //PlanDemo(); HalfClamp();