X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=reprap-play.git;a=blobdiff_plain;f=scaffold-clamp-common.scad;h=d2640b6a9a08ef3e8b75c0467896634de7a9da05;hp=843e05c18d25ed398ec3d2e6c791f23b08b2a32a;hb=HEAD;hpb=df4e53c99a5573eee956a297534c170da2a81808 diff --git a/scaffold-clamp-common.scad b/scaffold-clamp-common.scad index 843e05c..79ed1da 100644 --- a/scaffold-clamp-common.scad +++ b/scaffold-clamp-common.scad @@ -32,10 +32,13 @@ vhook_th = 14; cleat_frames = 10; cleat_curve_r = 200; -cleat_horn_l = 60; -cleat_horn_d_min = [8, 10]; -cleat_horn_d_max = [10, 12]; +cleat_horn_l = 40; +cleat_horn_d_min = [10, 12]; +cleat_horn_d_max = [12, 14]; cleat_height = 25; +cleat_stem_l = 20; + +cleat_overlap = (1-cos(60)); // ---------- hhook ---------- @@ -43,6 +46,14 @@ hhook_inside = 40; hhook_th = 4; hhook_l = 40; +// ---------- linear bracket ---------- + +linear_bracket_h = 50; +linear_bracket_l = 100; +linear_bracket_t = 15; +linear_bracket_hole_offset = 20; +linear_bracket_hole_dia = 5 + 1.00; + // ========== defaults ========== pin_head_th = th/2; @@ -90,6 +101,17 @@ vhook_y0 = -max(main_r, (tube_dia/2 + vhook_th)); vhook_ctr = vhook_y0 - vhook_inside/2; vhook_outer_dia = vhook_inside + vhook_th*2; +// calculated - cleat + +cleat_horn_tl = cleat_horn_l + cleat_stem_l/2; + +vcleat_dz = max(0, + cleat_horn_tl + + cleat_horn_d_min[0]/2 + - cleat_horn_d_min[0]/2 * cleat_overlap + - total_z/2 + ); + // calculated - hhook hhook_outer_dia = hhook_inside + hhook_th*2; @@ -165,28 +187,36 @@ module MainPlanB(flatten){ } } -module HalfClampX(flatten=false){ - difference(){ - translate([0,0, min_z]) { - 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(flatten); - } +module HalfClampXPositive(flatten=false){ + translate([0,0, min_z]) { + 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(flatten); } - for (j=[0:nbolts-1]) { - translate([ bolt_x, 0, min_z + (j + 0.5) * bolt_stride ]) { - translate([0, -tube_dia/2, 0]) - rotate([-90,0,0]) - cylinder(r= bolt_hole_r, h= tube_dia); - translate([0, -flats_y, 0]) - rotate([90,0,0]) - cylinder(r= bolt_flat/2, h= tube_dia/2); - } + } +} + +module HalfClampXNegative(){ + for (j=[0:nbolts-1]) { + translate([ bolt_x, 0, min_z + (j + 0.5) * bolt_stride ]) { + translate([0, -tube_dia/2, 0]) + rotate([-90,0,0]) + cylinder(r= bolt_hole_r, h= tube_dia); + translate([0, -flats_y, 0]) + rotate([90,0,0]) + cylinder(r= bolt_flat/2, h= tube_dia/2); } } } +module HalfClampX(flatten=false){ + difference(){ + HalfClampXPositive(flatten); + HalfClampXNegative(); + } +} + // ---------- vhook ---------- module VHookProfile() { @@ -249,15 +279,22 @@ module VHookPlanDemo(){ // ---------- cleat ---------- +function cleat_frame_theta(s) = s * cleat_horn_tl / cleat_curve_r * 360/TAU; +function cleat_frame_z(s) = cleat_curve_r * (1 - cos(cleat_frame_theta(s))); +function cleat_frame_x(s) = cleat_curve_r * sin(cleat_frame_theta(s)); +function cleat_frame_r(s) = ( cleat_horn_d_min * s + + cleat_horn_d_max * (1-s) ) * 0.5; + +module CleatFrameSphere(r) { + scale([1, r[1]/r[0], 1]) + sphere(r= r[0]); +} + module CleatFrame(s) { - r = ( cleat_horn_d_min * s + - cleat_horn_d_max * (1-s) ) * 0.5; - translate([0,0, cleat_curve_r]) - rotate( s * cleat_horn_l / cleat_curve_r * 360/TAU * [0,1,0] ) - translate([0,0, -cleat_curve_r]) + r = cleat_frame_r(s); + translate([cleat_frame_x(s), 0, cleat_frame_z(s)]) rotate([0, 90, 0]) - scale([1, r[1]/r[0]]) - sphere(r= r[0]); + CleatFrameSphere(r); } @@ -265,26 +302,61 @@ module CleatHorn(){ for (si=[0 : cleat_frames-2]) { s0 = si / (cleat_frames-1); s1 = (si+1) / (cleat_frames-1); - //hull(){ + hull(){ CleatFrame(s0); CleatFrame(s1); - //} + } } } -module VCleatA(){ ////toplevel - %DummyA(); +module CleatBase(){ + frames = cleat_frames/2; + se = cleat_stem_l/2 / cleat_horn_tl; + r = cleat_frame_r(se); + + hull(){ + for (s = [-se, se]) { + for (z= [-(cleat_height + tube_dia/2), + cleat_frame_z(s)]) { + translate([cleat_frame_x(s), 0, z]) + linear_extrude(height=0.1) + scale([1, r[1]/r[0]]) + circle(r=r[0]); + } + } + } +} - translate([0, -(main_r + cleat_height), 0]) { - rotate([0, -90, 90]) { - for (m=[0,1]) { - mirror([m,0,0]) - CleatHorn(); +module VCleat(){ + intersection(){ + translate([0,0, vcleat_dz]){ + difference(){ + translate([0, -(main_r + cleat_height), 0]) { + rotate([0, -90, 90]) { + CleatBase(); + for (m=[0,1]) { + mirror([m,0,0]) { + CleatHorn(); + } + } + } + } + linextr(-cleat_stem_l, +cleat_stem_l) + circle(r = tube_dia/2 + 0.1); } } + translate([0,0, total_z * 0.5]) + cube(center=true, + (main_r + cleat_stem_l)*4 * [1,1,0] + + total_z * [0,0,2]); } } +module VCleatA(){ ////toplevel + DummyA(); + VCleat(); +} + // ---------- hhook ---------- module HHookHookPlan(){ @@ -317,6 +389,34 @@ module HHookPlanDemo(){ HHookHookPlan(); } +// ---------- linear bracket ---------- + +module LinearBracketA(){ ////toplevel + difference(){ + union(){ + HalfClampXPositive(); + mirror([1,0,0]) + linextr_y_xz(-open_gap/2 - linear_bracket_t, -open_gap/2) + rectfromto([0, min_z], + [max_x + linear_bracket_l, min_z + linear_bracket_h]); + } + HalfClampXNegative(); + linextr(-1000,1000) + TubePlan(); + mirror([1,0,0]) + linextr_y_xz(-100,100) { + for (t = [ + [1,1] * linear_bracket_hole_offset, + -[1,1] * linear_bracket_hole_offset + + [linear_bracket_l, linear_bracket_h] + ]) { + translate([ max_x, min_z ] + t) + circle(r= linear_bracket_hole_dia/2); + } + } + } +} + // ---------- misc ---------- module PinSitu(){ ////toplevel @@ -378,5 +478,12 @@ module Demo(){ ////toplevel rotate([0,0,180]) PinSitu(); } +module DemoPair(){ ////toplevel + color("red") rotate([180,0,0]) DemoA(); + color("blue") DemoA(); + color("orange") translate([hinge_x, 0, min_z - hinge_z_gap]) + rotate([0,0,180]) PinSitu(); +} + //PlanDemo(); //HalfClamp();