slop=0.5; prongthick=5; prongwidth=5; ratchetstep=15; ratchettooth=3; ratchettoothheight=5; ratchettoothsmoothr=1; ratchettoothslope=0.75; overlap=0.5; armendwallthick=2.5; armendbasethick=1.2; include module ArmEnd(length=120){ channelwidth = prongthick + slop; channeldepth = prongwidth + ratchettoothheight; totalwidth = armendwallthick*2 + channelwidth; totalheight = channeldepth + armendbasethick; basecube = 5; translate([0, 3, -armendbasethick]) { translate([-basecube+0.5, -7.5, 0]) cube([basecube, 15, totalheight]); translate([-basecube+2,0,0]) rotate([0,0,-90]) DoveClipPair(h=totalheight); } for (dx = [0 : ratchetstep : length]) translate([dx,0,0]) { difference(){ translate([0, -armendwallthick, -armendbasethick]) cube([ratchetstep+overlap, totalwidth, totalheight]); translate([-1, 0, 0]) cube([ratchetstep+overlap+2, channelwidth, channeldepth+1]); } translate([ratchettoothsmoothr+0.5, armendwallthick/2, 0]) minkowski(){ rotate([90,0,0]) cylinder($fn=20, r=ratchettoothsmoothr, h=armendwallthick); multmatrix([ [ 1, 0, ratchettoothslope, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ]]) cube([ratchettooth - ratchettoothsmoothr*2, channelwidth, ratchettoothheight]); } } } ArmEnd();