X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=knifeblock.scad;h=6d7e96a5a1a355607cccd6cfeda4465013407317;hb=65d1fbff98e91c996b7c27d8cbea3c7010952f5b;hp=8f71dd74b8ada7040f4fc365fa4f6eb8d813e424;hpb=458597c6a6b486114042ee9830f9013e9dbdcb87;p=reprap-play.git diff --git a/knifeblock.scad b/knifeblock.scad index 8f71dd7..6d7e96a 100644 --- a/knifeblock.scad +++ b/knifeblock.scad @@ -3,20 +3,25 @@ // properties of the knives nknives = 3; widths = [15.5, 15.8, 19.0]; -handlelenbase = 60; -handlelendelta = [-10, 0, 0]; +handlelenbase = 75; +handlelendelta = [-15, 0, 10]; locations = [-35, 0, 40]; bladew = 5; // 2.5 -maxhandledepth = 43.5 - 5; +maxhandledepth = 45; + +templatescale = 27.2 / 19.6; + +coverlonglen = 120; // xxx +covershortlen = 70; // xxx // other tuneables front = 5; -back = 8; +back = 5; height = 50; -minsidein = 3; -minsideout = 3; +minsidein = 4; +minsideout = 4; -frontbackslop = 0.5; +frontbackslop = 0.25; screwbackdepth = 6.0 - 1.0; screwdia = 4.0 + 0.5; @@ -24,16 +29,37 @@ 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; + +pegslop = 0.5; + // 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) - import(file=fn, convexity=100); + scale(templatescale) import(file=fn, convexity=100); } module Knife(k){ @@ -54,12 +80,8 @@ module DoKnife(k){ } module DoKnives(){ - for (yshift=[-1,1]) { - translate([0, yshift * frontbackslop, 0]) - for (k=[0:nknives-1]) { - DoKnife(k); - } - } + for (k=[0:nknives-1]) + DoKnife(k); } module ScrewHole(){ @@ -68,16 +90,10 @@ module ScrewHole(){ cylinder(r=screwdia/2, h=150, $fn=40); translate([0, totaldepth-front - screwbackdepth, 0]) rotate([90,0,0]) - cylinder(r=screwcsinkdia/2, h=100, $fn=40); + cylinder(r=screwcsinkdia/2 / (sqrt(3)/2), h=100, $fn=6); } 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(){ @@ -92,8 +108,85 @@ module Block(){ translate([x, 0, -screwabove]) ScrewHole(); } - DoKnives(); + 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]]); + } +} + +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)); + d = pegslop; + rotate([90,0,0]) { + linear_extrude(height=peglen) { + intersection(){ + translate([-d,-d,0]) PegTemplate(); + translate([-d,+d,0]) PegTemplate(); + translate([+d,+d,0]) PegTemplate(); + translate([+d,-d,0]) PegTemplate(); + } + } } } -Block(); +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();