chiark / gitweb /
sewing-table: jig: other diagonals
[reprap-play.git] / sewing-table.scad.m4
index a8cd185a96a1064cd0e44e3d074fc47d186a574f..8ca8ff17bc26b4a2f7342092f0841d15798f7d4b 100644 (file)
@@ -7,6 +7,8 @@ ply_th = 18;
 ply_hole_dia = 15;
 ply_edge_min = 10;
 
+ply_hole_dia_real = 12;
+
 tile_th = 3;
 post_dia = 8;
 
@@ -34,11 +36,9 @@ machine_rear_to_front = 84 + 0.25 - 1.4;
 
 cutout_l_end_y_front_slop = 0.5;
 cutout_l_end_y_rear_slop = 0.5;
-cutout_l_end_x_slop = 0.25;
 
 cutout_l_end_x = 22;
 cutout_l_end_y = machine_rear_to_front;
-cutout_l_end_curve = 1;
 cutout_l_end_new_x_slop = 1.4 - 1.95;
 cutout_l_end_y_total = cutout_l_end_y
   + cutout_l_end_y_front_slop + cutout_l_end_y_rear_slop;
@@ -47,7 +47,6 @@ tile02_tr = [-250, 0];
 tile01_tr = [  0, 0];
 
 cutout_tile01_y = 170 - 147 + cutout_l_end_y_front_slop;
-cutout_tile11_x = cutout_l_end_x + cutout_l_end_curve;
 cutout_tile11_y = cutout_l_end_y_total - cutout_tile01_y;
 
 // front and rear curves
@@ -83,9 +82,12 @@ teststrapslots_at = [ [ 110, 70 ], [ 110, -35 ],
 teststrap = [ 3, 5 ];
 teststrap_peg = [7.5, 3.5];
 
+ply_edge_hole_dist_real = 14;
+
 // calculated
 
 TEST = false;
+JIG = false;
 
 ply_edge_hole_dist = ply_edge_min + ply_hole_dia/2;
 
@@ -106,7 +108,7 @@ thehd_tl = [ -thehd_tr[0], thehd_tr[1] ];
 thehd_bl = -thehd_tr;
 thehd_br = -thehd_tl;
 
-tablet_z_slop = 0.25;
+tablet_z_slop = 1.00;
 
 interlock_rad = interlock_dia/2;
 interlock_negative_rad = interlock_rad + 0.125;
@@ -118,11 +120,13 @@ m4_define(`POST_TCROSSSZ',
 
 module Post(){
   mirror([0,0,1]) {
-    difference(){
-      cylinder(r= post_dia/2, h= tile_th + ply_th - post_shorter);
-      translate([0,0, tile_th]) {
-       cylinder(r= screw_big_dia/2, h= screw_big_len);
-       cylinder(r= screw_dia/2, h= ply_th, $fn=20);
+    if (!JIG) {
+      difference(){
+       cylinder(r= post_dia/2, h= tile_th + ply_th - post_shorter);
+       translate([0,0, tile_th]) {
+         cylinder(r= screw_big_dia/2, h= screw_big_len);
+         cylinder(r= screw_dia/2, h= ply_th, $fn=20);
+       }
       }
     }
     if (TEST) {
@@ -131,6 +135,24 @@ module Post(){
        cube([POST_TCROSSSZ, post_dia,      tile_th], center=true);
       }
     }
+    if (JIG) {
+      translate([0,0, tile_th/2]) {
+       cube([POST_TCROSSSZ, POST_TCROSSSZ, tile_th], center=true);
+      }
+    }
+  }
+}
+
+module PostHole(){
+  if (JIG) {
+    translate([0,0,-5])
+      cylinder(r= post_dia/2 + jig_post_hole_slop, h=10);
+    translate([0,0, -jig_min_th])
+      cylinder(r= ply_hole_dia_real/2, h = 5);
+    for (rot=[0:90:270]) rotate(rot) {
+       translate([ ply_edge_hole_dist_real, 0, 0 ])
+         cube([ jig_pencil_rad*2, jig_pencil_slotlen, 20 ], center=true);
+      }
   }
 }
 
@@ -140,6 +162,12 @@ module Posts(posts) {
       Post();
   }
 }
+module PostHoles(posts) {
+  for (p= posts)  {
+    translate(concat(p, [0]))
+      PostHole();
+  }
+}
 
 module TileBase(botleft, topright){
   size = topright - botleft;
@@ -149,7 +177,7 @@ module TileBase(botleft, topright){
     mirror([0,0,1])
       translate(concat(botleft, [0]))
       cube(concat(size, [tile_th]));
-    if (!TEST) {
+    if (!(TEST || JIG)) {
       cidsz = topright_post-botleft_post
        + [-post_dia,-post_dia]
        + [0, thehd[1]];
@@ -160,16 +188,17 @@ module TileBase(botleft, topright){
                 + 0.5 * concat( cidsz - cidszr, [ 0 ]) )
        Commitid_BestCount_M(cidszr);
     }
-    if (TEST) {
+    if ((TEST || JIG)) {
       crossoff = tile_hard_edge_hole_dist + POST_TCROSSSZ/2;
       cidsz = [ thehd[0], size[1] - 2*crossoff ];
       cidszr = [ cidsz[0], min(cidsz[1], 50) ];
-      translate( concat(botleft + [0, crossoff] + (cidsz-cidszr)/2, [0]) )
-       Commitid_BestCount(cidszr);
+      if (TEST)
+       translate( concat(botleft + [0, crossoff] + (cidsz-cidszr)/2, [0]) )
+         Commitid_BestCount(cidszr);
       difference(){
        mirror([0,0,1]) {
          translate(concat(botleft + [test_edge,test_edge], [test_tile_th]))
-           cube(concat(size - [test_edge,test_edge]*2, [tile_th]));
+           cube(concat(size - [test_edge,test_edge]*2, [tile_th*2]));
          translate(concat(botleft_post, [-1]))
            cube(concat(topright_post-botleft_post, [tile_th+2]));
        }
@@ -178,6 +207,17 @@ module TileBase(botleft, topright){
          MachineEnvelope();
          cube(shufflesz, center=true);
        }
+       if (JIG) {
+         translate([0,0,-20]) linear_extrude(height=20) {
+           for (diag=[[ +1, botleft                   ],
+                      [ -1, [topright[0], botleft[1]] ]]) {
+             translate(diag[1])
+               rotate(atan2(size[1], diag[0] * size[0]))
+               translate([0, -test_edge/2])
+               square([vectorlen2d(size), test_edge]);
+           }
+         }
+       }
       }
     }
   }
@@ -388,6 +428,7 @@ module TestPiece1(){ ////toplevel
     }
     InterlockEdge(corners[1], corners[2], 1, nlobes=1);
     RoundCornerCut(rcs);
+    PostHoles(holes);
   }
   RoundCornerAdd(rcs);
 }
@@ -397,10 +438,15 @@ module TestPiece2(){ ////toplevel
            [  50, 0]
            ];
   corners = TestPiece_holes2corners(holes);
-  TileBase(corners[0], corners[2]);
-  Posts(holes);
-  RoundEdge(corners[0], corners[1]);
-  InterlockEdge(corners[3], corners[0], 0, nlobes=1);
+  difference(){
+    union(){
+      TileBase(corners[0], corners[2]);
+      Posts(holes);
+      RoundEdge(corners[0], corners[1]);
+      InterlockEdge(corners[3], corners[0], 0, nlobes=1);
+    }
+    PostHoles(holes);
+  }
 }
 
 module TestDemo(){ ////toplevel
@@ -411,24 +457,6 @@ module TestDemo(){ ////toplevel
     TestPiece2();
 }
 
-module Machine_Arm(){
-  ysz = cutout_l_end_y_total;
-  // assume the round end is arc of a circle
-  chordlen = dist2d([0,0], [ cutout_l_end_y, cutout_l_end_curve ]);
-  endrad = cutout_l_end_y / cutout_l_end_curve * chordlen;
-  
-  translate([0,0,-30]) linear_extrude(height=60) {
-    translate(tile01_tr + [0, (-cutout_tile01_y + cutout_tile11_y)/2]) {
-      intersection(){
-       translate([-50, -ysz/2])
-         square([400, ysz]);
-       translate([ endrad - cutout_tile11_x - cutout_l_end_x_slop, 0 ])
-         circle(r=endrad, $fa=0.01,$fd=5);
-      }
-    }
-  }
-}
-
 module Machine_NewRearProfile(){
   // figures copied out of xfig edit boxes
   // best not to edit the posbox size if poss - just move it
@@ -673,6 +701,7 @@ module Tile02(){ ////toplevel
     }
     InterlockEdge(R_EDGE(c,1), 1);
     RoundCornerCut(rcs);
+    PostHoles(posts);
   }
   RoundCornerAdd(rcs);
 }
@@ -693,6 +722,7 @@ module Tile12(){ ////toplevel
     InterlockEdge(R_EDGE(c,0), 1);
     InterlockEdge(R_EDGE(c,1), 1);
     RoundCornerCut(rcs);
+    PostHoles(posts);
   }
   RoundCornerAdd(rcs);
 }
@@ -722,6 +752,7 @@ module Tile11(){ ////toplevel
     }
     InterlockEdge(c[0], tile_01_11_cnr, 1);
     InterlockEdge(tile_11_10_cnr, c[2], 1);
+    PostHoles(posts);
     Machine();
   }
 }    
@@ -745,6 +776,7 @@ module Tile01(){ ////toplevel
       InterlockEdge(tile_01_11_cnr, c[3]);
       InterlockEdge(R_EDGE(c,3));
     }
+    PostHoles(posts);
     InterlockEdge(c[1], tile_01_00_cnr, 1);
     Machine();
   }
@@ -771,6 +803,7 @@ module Tile10(){ ////toplevel
       RoundEdge(R_EDGE(c,2));
       InterlockEdge(c[3], tile_11_10_cnr);
     }
+    PostHoles(posts);
     RoundCornerCut(rcs);
     Machine();
   }
@@ -793,6 +826,7 @@ module Tile00(){ ////toplevel
   rcy = cty + frontcurve_avoid_y;
   posts = [ cnr_posts[0],
            cnr_posts[1],
+           0.5 * (cnr_posts[0] + cnr_posts[1]),
            cnr_posts[2] + [ 0,                             -rcy ],
            cnr_posts[2] + [ -sz[0] + frontedge_len - cutout_l_end_x, -cty ],
            cnr_posts[3] + [ 0,                             -cty ]
@@ -817,6 +851,7 @@ module Tile00(){ ////toplevel
       RoundEdge(c1bis, c2bis);
     }
     Machine();
+    PostHoles(posts);
     RoundCornerCut(rc2);
   }
   RoundCornerAdd(rcs);
@@ -949,9 +984,9 @@ module FitTest_EntireDemo(){ ////toplevel
 }
 
 module FitTest_EndEnd(){ ////toplevel
-  p0 = [-32,-32];
-  sz = [188,113];
-  sz2 = [168,100];
+  p0 = [-30,-32];
+  sz = [156,81] - p0;
+  sz2 = [136,68] - p0;
   difference(){
     FitTest_general(p0, sz);
     translate([ p0[0] -1, p0[1]+sz2[1], -10])
@@ -1004,6 +1039,12 @@ module Demo(){ ////toplevel
   translate(demo_slop*[-3,1]) color("blue")   Tile10();
   translate(demo_slop*[-3,0]) color("red")    Tile00();
   %Machine();
+  // Can also do this, to print reference sheet:
+  //  load this into openscad
+  //  select Ctrl-4 view, view all, scale appropriately
+  //  import sewing-table,Demo-flat.png
+  //  pngtopnm <sewing-table,Demo-flat.png | ppmbrighten -s -50 -v +100 >t.pnm
+  //  lpr t.pnm
 }
   
 //TestPiece1();