X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=reprap-play.git;a=blobdiff_plain;f=knifeblock.scad;h=c1f1869f4b1a07e9a777f9077b0274ccc7478a63;hp=08a0d1a4c43dd34b40b3daa5abcf9a3d8d2d74dd;hb=464ea5bfb20555916aa523b6d2745805347b4245;hpb=0e9caf64125fcdf652b83479281577793538c292 diff --git a/knifeblock.scad b/knifeblock.scad index 08a0d1a..c1f1869 100644 --- a/knifeblock.scad +++ b/knifeblock.scad @@ -5,7 +5,7 @@ nknives = 3; widths = [15.5, 15.8, 19.0]; handlelenbase = 75; handlelendelta = [-15, 0, 10]; -locations = [-35, 0, 40]; +locations = [-35, 0, 37]; bladew = 5; // 2.5 maxhandledepth = 45; @@ -23,6 +23,8 @@ minsideout = 4; frontbackslop = 0.25; +knifewidthslop = 2.0; + screwbackdepth = 6.0 - 1.0; screwdia = 4.0 + 0.5; screwcsinkdia = 9.8 + 1.0; @@ -40,8 +42,12 @@ holesize = 12.5; holestrut = 7; holeedge = 4; -holeoffx = 0.45; -holeoffy = 0.25; +holeoffx = 0.33; +holeoffy = 0.23; + +indentdepth = 1; +indentoutersize = holesize + 2.15; +indentinnersize = indentoutersize - indentdepth * 3.0; pegstem = 3.5; peghead = 10; @@ -59,11 +65,14 @@ pegslopl = 0.5; pegdepthproportion = 0.80; // computed + +function width(k) = widths[k] + knifewidthslop; + side = minsidein + screwcsinkdia + minsideout; totaldepth = front + maxhandledepth + back; -minkx = locations[0] - widths[0] /2; -maxkx = locations[nknives-1] + widths[nknives-1]/2; +minkx = locations[0] - width(0) /2; +maxkx = locations[nknives-1] + width(nknives-1)/2; minx = minkx - side; maxx = maxkx + side; @@ -83,9 +92,9 @@ module ImportTemplate(w,k,t) { module Knife(k){ ImportTemplate(bladew, k,"bl"); hull(){ - ImportTemplate(widths[k], k,"hl"); + ImportTemplate(width(k), k,"hl"); translate([-100,0,0]) - ImportTemplate(widths[k], k,"hl"); + ImportTemplate(width(k), k,"hl"); } } @@ -111,14 +120,14 @@ module ScrewHole(){ cylinder(r=screwcsinkdia/2 / (sqrt(3)/2), h=100, $fn=6); } -module PegTemplate(){ +module PegTemplate(apex){ 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]]); + [-0.1, pegheight /2 + apex]]); } } @@ -128,9 +137,21 @@ module AtSides(){ } module BlockPegSlot(){ - translate([recessblockwidth/2, pegrecess - 0.5*peglen, -height]){ + translate([recessblockwidth/2, pegrecess - peglen, -height]){ rotate([-90,0,0]) linear_extrude(height=totaldepth){ - PegTemplate(); + PegTemplate(peghead/2 * 1.2); + } + } +} + +module DecorativeIndents(){ + translate([0, -front, 0]) + rotate([90,0,0]) + HexGrid(-height, 0, minx,maxx) { + hull(){ + translate([0, 0, -indentdepth]) + cylinder(r=indentinnersize/2, h=indentdepth, $fn=40); + cylinder(r=indentoutersize/2, h=indentdepth, $fn=40); } } } @@ -151,6 +172,7 @@ module Block(){ translate([0, yshift * frontbackslop, 0]) DoKnives(); AtSides() { BlockPegSlot(); BlockPegSlot(); } + DecorativeIndents(); } } @@ -163,9 +185,9 @@ module CoverTemplate(){ linear_extrude(height=coverthick) polygon([[minx, 0], [maxx, 0], - [maxx, coverlonglen], - [maxx - coverside, coverlonglen], - [minx, covershortlen]]); + [maxx, coverlonglen+0.1], + [maxx - coverside, coverlonglen+0.1], + [minx, covershortlen+0.1]]); } module CoverSide(len){ @@ -192,10 +214,10 @@ module Peg(){ 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(); + translate([-dx,-dy,0]) PegTemplate(0); + translate([-dx,+dy,0]) PegTemplate(0); + translate([+dx,+dy,0]) PegTemplate(0); + translate([+dx,-dy,0]) PegTemplate(0); } } } @@ -204,39 +226,49 @@ module Peg(){ module CoverPegSlot(coverlen){ translate([recessblockwidth/2, 0, -1]){ linear_extrude(height= 1 + pegrecess + 0.5*peglen){ - PegTemplate(); + PegTemplate(0); } } } -module HoleRow(){ - for (i=[0:10]) { - translate([0, (i+0.5)*holepitch, -1]) - cylinder(r=holesize/2, h=coverthick+2, $fn=20); - } -} - module HolesScope(){ intersection_for (dx=[-1,+1]) { intersection_for (dy=[-1,+1]) { - translate([dx * holeedge, dy * holeedge, -1]) - scale([1,1,2]) + translate([dx * holeedge, dy * holeedge, -5]) + scale([1,1,10]) CoverTemplate(); } } } -module Holes(){ - intersection(){ - translate([holeoffx * holepitch, holeoffy * holepitch, 0]) { - for (i=[-10:10]) { - translate([i * sqrt(3) * holepitch, 0, 0]) { - HoleRow(); - translate([sqrt(3)/2 * holepitch, -0.5 * holepitch, 0]) - HoleRow(); - } +module HexGrid(xa,xb,ya,yb) { + imin = floor(xa / holepitch); + imax = ceil(xb / holepitch); + jmin = floor(ya / (sqrt(3)*holepitch)); + jmax = ceil(yb / (sqrt(3)*holepitch)); + echo("HexGrid ",imin,imax,jmin,jmax); + for (i=[imin:imax]) { + for (j=[jmin:jmax]) { + translate([(j * sqrt(3) + holeoffx) * holepitch, + (i + 0.5 + holeoffy) * holepitch, + 0]) { + child(); + translate([sqrt(3)/2 * holepitch, -0.5 * holepitch, 0]) + child(); } } + } +} + +module Hole(){ + cylinder(r=holesize/2, h=40, $fn=40); +} + +module Holes(){ + intersection(){ + translate([0, 0, -20]) + HexGrid(0, coverlonglen, minx, maxx) + Hole(); HolesScope(); } } @@ -276,11 +308,30 @@ module Demo(){ ////toplevel color([1,0,0]) AtSides() { DemoPeg(); DemoPeg(); } } +module Pegs(){ ////toplevel + Peg(); + translate([-peghead-3, 0,0]) Peg(); +} + module CoverParts(){ ////toplevel Cover(); - translate([0, coverlonglen, pegheight/2]) { - Peg(); - translate([-peghead-3, 0,0]) Peg(); + translate([0, coverlonglen, pegheight/2-pegslopv]) + Pegs(); +} + +module FrontDemo(){ ////toplevel + color([1,0,1]) Block(); + color([1,0,1]) CoverAligned(); + color([0,0,0]) DoKnives(); +} + +module BlockFrontTest(){ ////toplevel + intersection(){ + Block(); + translate([minx-10, -front-10, -height-10]) { + cube([75,14,35]); + cube([75,25,13]); + } } } @@ -290,3 +341,6 @@ module CoverParts(){ ////toplevel //CoverParts(); //Peg(); //Cover(); +//Holes(); +//%CoverTemplate(); +//Pegs();