X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;ds=sidebyside;f=sewing-table.scad.m4;h=91d6629f40e0b4b87c727a2b11034f987f0bca97;hb=015cd12073fed8ee2788c96653f0044f4dbd83ff;hp=25bca6cf5f0a4d9d9c626a25a315d6b8eaf948fc;hpb=e9331be9b202aa194530385acd5801a5f6cd1f0e;p=reprap-play.git diff --git a/sewing-table.scad.m4 b/sewing-table.scad.m4 index 25bca6c..91d6629 100644 --- a/sewing-table.scad.m4 +++ b/sewing-table.scad.m4 @@ -19,6 +19,11 @@ screw_big_len = 4.0; round_edge_rad = 2.0; interlock_dia = 10; +interlock_fine = 1.0; + +interlock_fine_lenslop = 1.0; + +demo_slop = 0.1; // calculated @@ -121,11 +126,14 @@ module RoundLeftCorner(this_cnr, right_cnr) { } } -module InterlockPlan(r, ymir) { +module InterlockLobePlan(negative) { + r = negative ? interlock_negative_rad : interlock_rad; + ymir = negative ? 0 : 1; + dx = sqrt(3) * r; $fn= 80; translate([thehd[0], 0]){ - mirror([0,ymir,0]){ + mirror([0,ymir]){ circle(r=r); difference(){ translate([-dx, -0.1]) @@ -139,21 +147,34 @@ module InterlockPlan(r, ymir) { } } -module InterlockCore(r, plusth, ymir) { - translate([0, 0, plusth]){ - mirror([0,0,1]){ - linear_extrude(height=tile_th+plusth*2, convexity=10){ - InterlockPlan(r, ymir); - } +module InterlockEdgePlan(negative, nlobes, length) { + iadj = 0.1; + + for (lobei = [ 0 : nlobes-1 ]) { + lobex = (length - thehd[0]*2) * (lobei ? lobei / (nlobes-1) : 0); + translate([lobex, 0, 0]) { + InterlockLobePlan(negative); } } + + slotshorter = negative ? 0 : interlock_fine_lenslop; + mirror([0, negative]) + translate([slotshorter, iadj]) + square([length - slotshorter*2, interlock_fine + iadj*2]); } -module Interlock(this_cnr, right_cnr, negative=0) { - INREFFRAME(this_cnr, right_cnr) - InterlockCore(negative ? interlock_negative_rad : interlock_rad, - negative ? 1 : 0, - negative ? 0 : 1); +module InterlockEdge(left_cnr, right_cnr, negative=0, nlobes=2) { + plusth = negative * 1.0; + + INREFFRAME(left_cnr, right_cnr) { + translate([0, 0, plusth]){ + mirror([0,0,1]){ + linear_extrude(height=tile_th+plusth*2, convexity=10){ + InterlockEdgePlan(negative, nlobes, length); + } + } + } + } } function TestPiece_holes2corners(holes) = @@ -169,7 +190,7 @@ module TestPiece1(){ ////toplevel corners = TestPiece_holes2corners(holes); difference(){ TileBase(corners[0], corners[2]); - Interlock(corners[1], corners[2], 1); + InterlockEdge(corners[1], corners[2], 1, nlobes=1); } Posts(holes); RoundEdge(corners[0], corners[1]); @@ -185,17 +206,65 @@ module TestPiece2(){ ////toplevel TileBase(corners[0], corners[2]); Posts(holes); RoundEdge(corners[0], corners[1]); - Interlock(corners[3], corners[0]); + InterlockEdge(corners[3], corners[0], 0, nlobes=1); } -module Demo(){ ////toplevel +module TestDemo(){ ////toplevel translate([ -thehd[0], 0 ]) color("blue") TestPiece1(); - translate([ +thehd[0], 0 ]) + translate([ +thehd[0] + demo_slop, 0 ]) TestPiece2(); } +function Rectangle_corners(c0, sz) = + [ c0 + [ 0, 0 ], + c0 + [ sz[0], 0 ], + c0 + [ sz[0], sz[1] ], + c0 + [ 0, sz[1] ] ]; + +function Rectangle_corners2posts(c) = + [ c[0] + thehd_tr, + c[1] + thehd_tl, + c[2] + thehd_bl, + c[3] + thehd_br ]; + +module Tile02(){ ////toplevel + sz = [100,170]; + c0 = -sz; + c = Rectangle_corners(c0, sz); + posts = Rectangle_corners2posts(c); + difference(){ + TileBase(c[0], c[2]); + InterlockEdge(c[1], c[2], 1); + } + Posts(posts); + RoundEdge(c[0], c[1]); + RoundEdge(c[3], c[0]); + RoundLeftCorner(c[0], c[1]); + InterlockEdge(c[2], c[3], 0); +} + +module Tile12(){ ////toplevel + sz = [100,250]; + c0 = [-sz[0], 0]; + c = Rectangle_corners(c0, sz); + posts = Rectangle_corners2posts(c); + difference(){ + TileBase(c[0], c[2]); + InterlockEdge(c[0], c[1], 1); + } + Posts(posts); + RoundEdge(c[2], c[3]); + RoundEdge(c[3], c[0]); + RoundLeftCorner(c[2], c[3]); +} + +module Demo(){ ////toplevel + translate(demo_slop*[-2,1]) color("blue") Tile12(); + translate(demo_slop*[-2,0]) color("red") Tile02(); +} + //TestPiece1(); //TestPiece2(); //Demo();