toothheight = 1.2; webthick = 1.8; height = 7; pindepth = 10; nomrad = height/2 - toothheight; minrad = nomrad - 0.5; maxrad = nomrad + 0.5; webgap = 0.4; toothgap = webthick + webgap*2; module DoveClipPin() { intersection(){ union(){ for (m=[0,1]) { mirror([0,0,m]) translate([0,0,height/2]) rotate([90,0,0]) cylinder($fn=20, r1=minrad, r2=maxrad, h=pindepth); } translate([-webthick/2, -pindepth, -height/2-1]) cube([webthick, pindepth, height+2]); } translate([-maxrad-1, -pindepth-1, -height/2]) cube([maxrad*2+2, pindepth+2, height]); } } module DoveClipEnd(baseextend=1, height=7) { basethick = toothheight; jawthick = toothheight; cubex = nomrad*2 + jawthick*2; cube0y = -basethick-nomrad*2-toothheight; centrey = -basethick-nomrad; difference(){ translate([-cubex/2, cube0y, 0]) cube([cubex, -cube0y+baseextend, height]); translate([0, centrey, -1]) cylinder($fn=20, r=nomrad, h=height+2); translate([-toothgap/2, cube0y-1, -1]) cube([toothgap, toothheight+nomrad+1, height+2]); } } for (x=[0,8]) translate([x,0,0]) DoveClipEnd(); translate([-4,0,0]) cube([16,5,7]); //DoveClipPin(); //translate([-10, //cube([