X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=knifeblock.scad;h=64b8468fdbdf132438e4a639683d9466d364dd50;hb=a6a3c38e00402b6875a10e04d4f49e30b1050b04;hp=302dacb73739d6cc1ee2ff1099c1a400163843d2;hpb=c236bc6884660c451667b5d59432195b2179443e;p=reprap-play.git diff --git a/knifeblock.scad b/knifeblock.scad index 302dacb..64b8468 100644 --- a/knifeblock.scad +++ b/knifeblock.scad @@ -11,6 +11,9 @@ maxhandledepth = 45; templatescale = 27.2 / 19.6; +coverlonglen = 120; // xxx +covershortlen = 70; // xxx + // other tuneables front = 5; back = 5; @@ -26,10 +29,40 @@ screwcsinkdia = 9.8 + 1.0; screwabove = 15; +coverthick = 2.4; +coverside = coverthick; + +covertopwing = 15; +covertopwingbase = 20; +coveredge = 3; + +pegstem = 3.5; +peghead = 10; +pegstemheight = 2; +pegheight = 9; +peglen = 12; + +recessblockwidth = peghead + pegstem*3; +recessblockheight = peglen + pegstem*1.5; + +pegsloph = 0.5; +pegslopv = 0.5; +pegslopl = 0.5; + +pegdepthproportion = 0.67; + // computed side = minsidein + screwcsinkdia + minsideout; totaldepth = front + maxhandledepth + back; +minkx = locations[0] - widths[0] /2; +maxkx = locations[nknives-1] + widths[nknives-1]/2; + +minx = minkx - side; +maxx = maxkx + side; + +pegrecess = pegdepthproportion*totaldepth - 0.5*peglen; + module ImportTemplate(w,k,t) { fn = str("knifeblock-knives-t",k,t,".dxf"); echo(fn); @@ -70,12 +103,6 @@ module ScrewHole(){ } module Block(){ - minkx = locations[0] - widths[0] /2; - maxkx = locations[nknives-1] + widths[nknives-1]/2; - - minx = minkx - side; - maxx = maxkx + side; - sidemidx = minsideout + screwcsinkdia/2; difference(){ @@ -101,9 +128,93 @@ module BlockPrint(){ ////toplevel Block(); } +module CoverTemplate(){ + linear_extrude(height=coverthick) + polygon([[minx, 0], + [maxx, 0], + [maxx, coverlonglen], + [maxx - coverside, coverlonglen], + [minx, covershortlen]]); +} + +module CoverSide(len){ + translate([0, 0 ,0]) { + rotate([90,0,90]) + linear_extrude(height=coverside) + polygon([[0, 0], + [0, totaldepth], + [covertopwing, totaldepth], + [covertopwingbase, coverside + coverthick], + [len - covertopwingbase, coverside + coverthick], + [len - covertopwing, totaldepth], + [len, totaldepth], + [len, 0]]); + cube([recessblockwidth, recessblockheight, totaldepth]); + } +} + +module PegTemplate(){ + for (mx=[0,1]) for (my=[0,1]) { + mirror([mx,0,0]) mirror([0,my,0]) + polygon([[-0.1, -0.1], + [pegstem/2, -0.1], + [pegstem/2, pegstemheight/2], + [peghead/2, pegheight /2], + [-0.1, pegheight /2]]); + } +} + +module Peg(){ + echo("peg angle slope (must be <1)", + (peghead-pegstem)/(pegheight-pegstemheight)); + dx = pegsloph; + dy = pegslopv; + rotate([90,0,0]) { + linear_extrude(height=peglen-pegslopl) { + intersection(){ + translate([-dx,-dy,0]) PegTemplate(); + translate([-dx,+dy,0]) PegTemplate(); + translate([+dx,+dy,0]) PegTemplate(); + translate([+dx,-dy,0]) PegTemplate(); + } + } + } +} + +module CoverPegSlot(coverlen){ + translate([recessblockwidth/2, 0, -1]){ + linear_extrude(height= 1 + pegrecess + 0.5*peglen){ + PegTemplate(); + } + } +} + +module AtSides(){ + translate([minx,0,0]) child(0); + translate([maxx,0,0]) mirror([1,0,0]) child(1); +} + +module Cover(){ + difference(){ + union(){ + CoverTemplate(); + AtSides() { CoverSide(covershortlen); CoverSide(coverlonglen); } + } + AtSides() { CoverPegSlot(); CoverPegSlot(); } + } +} + +module CoverAligned(){ + translate([0,-front,-height]) + rotate([-90,0,0]) + Cover(); +} + module Demo(){ ////toplevel - Block(); - %DoKnives(); + %Block(); + DoKnives(); + color([0,0,1]) CoverAligned(); } Demo(); +//Cover();