X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=reprap-play.git;a=blobdiff_plain;f=sewing-table.scad.m4;h=38638ac0f5f15bd0b2786a9f6d9601e396c19abb;hp=d1d3d94f4939a0570c0da37bbae10f6e0dc66094;hb=1e024a80ef18fd8f0aac56a94634d6a2319966b6;hpb=382eed97b2d7d74ff8228bd9d0ce2f96f2323dac diff --git a/sewing-table.scad.m4 b/sewing-table.scad.m4 index d1d3d94..38638ac 100644 --- a/sewing-table.scad.m4 +++ b/sewing-table.scad.m4 @@ -66,8 +66,7 @@ module Posts(posts) { module TileBase(botleft, topright){ size = topright - botleft; botleft_post = botleft + thehd_tr; - topright_post = topright - thehd_bl; - echo(botleft_post, topright_post); + topright_post = topright + thehd_bl; difference(){ mirror([0,0,1]) translate(concat(botleft, [0])) @@ -75,8 +74,8 @@ module TileBase(botleft, topright){ translate( concat(botleft_post, [-tile_th]) + 0.5 * [ post_dia, post_dia, 0 ] ) Commitid_BestCount_M( topright_post-botleft_post - + [0, thehd[1] ] - + [-post_dia,-post_dia] ); + + [-post_dia,-post_dia] + + [0, thehd[1]]); } } @@ -122,7 +121,7 @@ module RoundLeftCorner(this_cnr, right_cnr) { } } -module InterlockPlan(r, ymir) { +module InterlockLobePlan(r, ymir) { dx = sqrt(3) * r; $fn= 80; translate([thehd[0], 0]){ @@ -140,21 +139,32 @@ module InterlockPlan(r, ymir) { } } -module InterlockCore(r, plusth, ymir) { +module InterlockLobeCore(negative=0) { + r = negative ? interlock_negative_rad : interlock_rad; + plusth = negative * 1.0; + ymir = negative ? 0 : 1; translate([0, 0, plusth]){ mirror([0,0,1]){ linear_extrude(height=tile_th+plusth*2, convexity=10){ - InterlockPlan(r, ymir); + InterlockLobePlan(r, ymir); } } } } -module Interlock(this_cnr, right_cnr, negative=0) { +module InterlockLobe(this_cnr, right_cnr, negative=0) { INREFFRAME(this_cnr, right_cnr) - InterlockCore(negative ? interlock_negative_rad : interlock_rad, - negative ? 1 : 0, - negative ? 0 : 1); + InterlockLobeCore(negative); +} + +module InterlockEdge(left_cnr, right_cnr, negative=0, nlobes=2) { + INREFFRAME(left_cnr, right_cnr) { + for (lobei = [ 0 : nlobes-1 ]) { + lobex = (length - thehd[0]*2) * lobei / (nlobes-1); + translate([lobex, 0, 0]) + InterlockLobeCore(negative); + } + } } function TestPiece_holes2corners(holes) = @@ -170,7 +180,7 @@ module TestPiece1(){ ////toplevel corners = TestPiece_holes2corners(holes); difference(){ TileBase(corners[0], corners[2]); - Interlock(corners[1], corners[2], 1); + InterlockLobe(corners[1], corners[2], 1); } Posts(holes); RoundEdge(corners[0], corners[1]); @@ -186,10 +196,10 @@ module TestPiece2(){ ////toplevel TileBase(corners[0], corners[2]); Posts(holes); RoundEdge(corners[0], corners[1]); - Interlock(corners[3], corners[0]); + InterlockLobe(corners[3], corners[0]); } -module Demo(){ ////toplevel +module TestDemo(){ ////toplevel translate([ -thehd[0], 0 ]) color("blue") TestPiece1(); @@ -197,6 +207,52 @@ module Demo(){ ////toplevel 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]); + } + Posts(posts); + RoundEdge(c[0], c[1]); + RoundEdge(c[3], c[0]); + RoundLeftCorner(c[0], c[1]); + InterlockEdge(c[2], c[3], 0, 2); +} + +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]); + } + Posts(posts); + RoundEdge(c[2], c[3]); + RoundEdge(c[3], c[0]); + RoundLeftCorner(c[2], c[3]); +} + +module Demo(){ ////toplevel + color("blue") Tile12(); + color("red") Tile02(); +} + //TestPiece1(); //TestPiece2(); //Demo();