X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=knifeblock.scad;h=fb8ff66d3ecd932e7bfa33124ccc10ff49cc3e86;hb=ff667b2d30a8c7c2e6f896b6eb47c9bbd162c2be;hp=1339ded465c9f6cbac02ba08ae8e43b25b1b8c6c;hpb=2d3f39fe6ffde71a404d85d3f1498887a1599e96;p=reprap-play.git diff --git a/knifeblock.scad b/knifeblock.scad index 1339ded..fb8ff66 100644 --- a/knifeblock.scad +++ b/knifeblock.scad @@ -1,18 +1,157 @@ // -*- C -*- -//import(file="t.dxf"); -module ImportTemplate(l) { - import(file=str("knifeblock-knives-l",l,".dxf"), convexity=3); +// properties of the knives +nknives = 3; +widths = [15.5, 15.8, 19.0]; +handlelenbase = 75; +handlelendelta = [-15, 0, 10]; +locations = [-35, 0, 40]; +bladew = 5; // 2.5 +maxhandledepth = 45; + +templatescale = 27.2 / 19.6; + +coverlonglen = 120; // xxx +covershortlen = 70; // xxx + +// other tuneables +front = 5; +back = 5; +height = 50; +minsidein = 4; +minsideout = 4; + +frontbackslop = 0.25; + +screwbackdepth = 6.0 - 1.0; +screwdia = 4.0 + 0.5; +screwcsinkdia = 9.8 + 1.0; + +screwabove = 15; + +coverthick = 2.4; +coverside = coverthick; + +covertopwing = 15; +covertopwingbase = 20; +coveredge = 3; + +// 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; + +module ImportTemplate(w,k,t) { + fn = str("knifeblock-knives-t",k,t,".dxf"); + echo(fn); + translate([0,0, -w/2]) + linear_extrude(height=w) + scale(templatescale) import(file=fn, convexity=100); +} + +module Knife(k){ + ImportTemplate(bladew, k,"bl"); + hull(){ + ImportTemplate(widths[k], k,"hl"); + translate([-100,0,0]) + ImportTemplate(widths[k], k,"hl"); + } +} + +module DoKnife(k){ + translate([locations[k],0,0]){ + rotate([0,90,0]) + translate([-(handlelenbase + handlelendelta[k]),0,0]) + Knife(k); + } } -module Knife(ix){ - translate([0,50*ix,0]){ - ImportTemplate(ix+1); - translate([0,0,10]) - ImportTemplate(ix+4); +module DoKnives(){ + for (k=[0:nknives-1]) + DoKnife(k); +} + +module ScrewHole(){ + translate([0,-50,0]) + rotate([-90,0,0]) + cylinder(r=screwdia/2, h=150, $fn=40); + translate([0, totaldepth-front - screwbackdepth, 0]) + rotate([90,0,0]) + cylinder(r=screwcsinkdia/2 / (sqrt(3)/2), h=100, $fn=6); +} + +module Block(){ + sidemidx = minsideout + screwcsinkdia/2; + + difference(){ + hull() mirror([0,0,1]) { + translate([minx, 0, 0]) + cube([maxx-minx, totaldepth-front, height]); + for (x=[minx + front/2, maxx - front/2]) + translate([x, -front/2, 0]) + cylinder(r=front/2, h=height, $fn=30); + } + for (x=[minx + sidemidx, maxx - sidemidx]) { + translate([x, 0, -screwabove]) + ScrewHole(); + } + for (yshift=[-1,1]) + translate([0, yshift * frontbackslop, 0]) + DoKnives(); + } +} + +module BlockPrint(){ ////toplevel + rotate([0,0,90]) + Block(); +} + +module CoverTemplate(){ + linear_extrude(height=coverthick) + polygon([[minx, 0], + [maxx, 0], + [maxx, coverlonglen], + [maxx - coverside, coverlonglen], + [minx, covershortlen]]); +} + +module CoverSide(xpos, len){ + translate([xpos, 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]]); } } -Knife(0); -Knife(1); -Knife(2); +module Cover(){ + CoverTemplate(); + CoverSide(minx, covershortlen); + mirror([1,0,0]) CoverSide(-maxx, coverlonglen); +} + +module CoverAligned(){ + translate([0,-front,-height]) + rotate([-90,0,0]) + Cover(); +} + +module Demo(){ ////toplevel + %Block(); + DoKnives(); + color([0,0,1]) CoverAligned(); +} + +Demo(); +//Cover();