chiark / gitweb /
filamentspool: deeper cups (hope to avoid tangles) - actually, on big spool, this...
[reprap-play.git] / sewing-table.scad.m4
index 3d2ce81a9a469d964de2d39d01cb8cc3c8edd43d..0d1e813cdeece80975517fb9663e23cb94ad1e43 100644 (file)
@@ -1,6 +1,7 @@
 // -*- C -*-
 
 include <funcs.scad>
+include <commitid.scad>
 
 ply_th = 18;
 ply_hole_dia = 15;
@@ -17,6 +18,8 @@ screw_big_len = 4.0;
 
 round_edge_rad = 2.0;
 
+interlock_dia = 10;
+
 // calculated
 
 ply_edge_hole_dist = ply_edge_min + ply_hole_dia/2;
@@ -27,6 +30,9 @@ hole_slop = (ply_hole_dia - post_dia)/2;
 tile_hard_edge_hole_dist = ply_edge_hole_dist + hole_slop;
 thehd = [ tile_hard_edge_hole_dist, tile_hard_edge_hole_dist ];
 
+interlock_rad = interlock_dia/2;
+interlock_negative_rad = interlock_rad + 0.125;
+
 module Post(){
   mirror([0,0,1]) {
     difference(){
@@ -49,9 +55,16 @@ module Posts(posts) {
 module TileBase(botleft_post, topright_post){
   botleft = botleft_post - thehd;
   size = topright_post - botleft_post + thehd * 2;
-  mirror([0,0,1])
-    translate([botleft[0], botleft[1], 0])
-    cube([size[0], size[1], tile_th]);
+  difference(){
+    mirror([0,0,1])
+      translate([botleft[0], botleft[1], 0])
+      cube([size[0], size[1], tile_th]);
+    translate( [ botleft_post[0], botleft_post[1], -tile_th ]
+              + 0.5 * [ post_dia, post_dia, 0 ] )
+      Commitid_BestCount_M( topright_post-botleft_post
+                           + [0, thehd[0] ]
+                           + [-post_dia,-post_dia] );
+  }
 }
 
 m4_dnl  INREFFRAME(left_post, right_post, morevars) { body; }
@@ -66,12 +79,18 @@ m4_define(`INREFFRAME',`
        [ 0,              0,              0,            1, ] ];
   $3
   multmatrix(m)
+')
+
+m4_dnl  INREFFRAME(left_post, right_post, morevars)
+m4_dnl    INREFFRAME_EDGE { body; }
+m4_define(`INREFFRAME_EDGE',`
   translate([-thehd[1], -thehd[0], -round_edge_rad])
 ')
 
 module RoundEdge(left_post, right_post) {
   INREFFRAME(left_post, right_post,
-             `tlength = length + thehd[1] * 2;') { m4_dnl '
+             `tlength = length + thehd[1] * 2;') m4_dnl '
+    INREFFRAME_EDGE {
     difference(){
       rotate([0,90,0])
        cylinder(r= round_edge_rad, h= tlength, $fn=50);
@@ -82,7 +101,7 @@ module RoundEdge(left_post, right_post) {
 }
 
 module RoundLeftCorner(this_post, right_post) {
-  INREFFRAME(this_post, right_post){
+  INREFFRAME(this_post, right_post) INREFFRAME_EDGE {
     difference(){
       sphere(r= round_edge_rad, $fn=60);
       translate([0,0, -20])
@@ -91,17 +110,45 @@ module RoundLeftCorner(this_post, right_post) {
   }
 }
 
+module InterlockCore(r, plusth, ymir) {
+  dx = sqrt(3) * r;
+  $fn= 80;
+  translate([0, -thehd[0], plusth]){
+    mirror([0,ymir,0]){
+      mirror([0,0,1]){
+       linear_extrude(height=tile_th+plusth*2, convexity=10){
+         circle(r=r);
+         difference(){
+           translate([-dx, -0.1])
+             square([ dx*2, r/2 + 0.1 ]);
+           for (xi = [-1, 1]) {
+             translate([ xi*dx, r ])
+               circle(r=r);
+           }
+         }
+       }
+      }
+    }
+  }
+}
+
 module InterlockNegative(this_post, right_post) {
+  INREFFRAME(this_post, right_post)
+    InterlockCore(interlock_negative_rad, 1, 0);
+}
+
+module Interlock(this_post, right_post) {
+  INREFFRAME(this_post, right_post)
+    InterlockCore(interlock_rad, 0, 1);
 }
 
-module TestPiece1(){
+module TestPiece1(){ ////toplevel
   holes = [ [-100, 0],
            [   0, 0]
            ];
   difference(){
     TileBase(holes[0], holes[1]);
     InterlockNegative(holes[1], holes[1] + [0,1]);
-
   }
   Posts(holes);
   RoundEdge(holes[0], holes[1]);
@@ -109,4 +156,24 @@ module TestPiece1(){
   RoundLeftCorner(holes[0], holes[1]);
 }
 
-TestPiece1();
+module TestPiece2(){ ////toplevel
+  holes = [ [   0, 0],
+           [  50, 0]
+           ];
+  TileBase(holes[0], holes[1]);
+  Posts(holes);
+  RoundEdge(holes[0], holes[1]);
+  Interlock(holes[0], holes[0] + [0, -1]);
+}
+module Demo(){
+  translate([ -thehd[1], 0 ])
+    color("blue")
+    TestPiece1();
+  translate([ +thehd[1], 0 ])
+    TestPiece2();
+}
+  
+//TestPiece1();
+//TestPiece2();
+//Demo();