X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=scaffold-clamp-common.scad;h=4e9f36759e267902306214f23f3b5aca9536a674;hb=ba7c5b240dcdab5fa3f4e3f7823bb828551471f0;hp=f3e25ade20b7e2f9f3807fed3b352bfa439f0dad;hpb=3b7f6f013523cb8eaa20c7a5b333aa516999e92d;p=reprap-play.git diff --git a/scaffold-clamp-common.scad b/scaffold-clamp-common.scad index f3e25ad..4e9f367 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 ---------- @@ -90,6 +93,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; @@ -249,17 +263,22 @@ module VHookPlanDemo(){ // ---------- cleat ---------- -function cleat_frame_theta(s) = s * cleat_horn_l / cleat_curve_r * 360/TAU; +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; + 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); } @@ -267,26 +286,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(){ @@ -380,5 +434,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();