chiark / gitweb /
Merge branch 'master' of chiark:/u/ianmdlvl/reprap/play
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 1 Jan 2017 21:33:03 +0000 (21:33 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 1 Jan 2017 21:33:03 +0000 (21:33 +0000)
Conflicts:
Makefile

.gitignore
Makefile
lock-inframe-bracket.scad
sewing-table.scad.m4 [new file with mode: 0644]

index f53fd1865918bbebf7eef1c2bf4aeda9c8c8bdcb..71fbe9ecde796f497747f4f6d197ece30020b273 100644 (file)
@@ -22,3 +22,4 @@ commitid-best-test.scad
 filamentspool-number-n*.dxf
 filamentspool-number-n*.eps
 sealing-box.scad
+sewing-table.scad
index 55175070a06e0522d5108a8d65bd8e9d8a2205ef..688c7cec6cbb507a462b8b2686c475d0d342d481 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -30,15 +30,15 @@ CONFIG=$(PLAY)/slic3r-config.ini
 FILAMENTSPOOL_AUTOS = filamentspool filamentspool-lt filamentspool-sm
 FILAMENTSPOOL_AUTOS += filamentspool-storarm3
 
-USING_AUTOS ?= $(FILAMENTSPOOL_AUTOS) xeno-drivebay-bracket dungeonquest-cone anke-gps-bracket cable-hole-trunking-cover anglepoise-neck crossbar-computer-led-mount wardrobe-hook knifeblock pandemic-counter pattress-boxes-3-cover bike-lipo-box earring-stand bike-stalk-led-mount
+USING_AUTOS ?= $(FILAMENTSPOOL_AUTOS) xeno-drivebay-bracket dungeonquest-cone anke-gps-bracket cable-hole-trunking-cover anglepoise-neck crossbar-computer-led-mount wardrobe-hook knifeblock pandemic-counter pattress-boxes-3-cover bike-lipo-box earring-stand bike-stalk-led-mount sewing-table
 
 AUTO_TOPLEVELS := $(foreach m,$(USING_AUTOS),$(shell $(PLAY)/toplevel-find $m))
 
-AUTO_INCS = funcs.scad utils.scad sealing-box.scad
+AUTO_INCS = funcs.scad utils.scad sealing-box.scad sewing-table.scad
 
 default:       autoincs scads
 
-$(shell set -xe; ./commitid.scad.pl >commitid.scad.tmp; cmp commitid.scad.tmp commitid.scad || mv -f commitid.scad.tmp commitid.scad )
+$(shell set -xe; $(PLAY)/commitid.scad.pl >commitid.scad.tmp; cmp commitid.scad.tmp commitid.scad || mv -f commitid.scad.tmp commitid.scad )
 
 autoincs:      $(AUTO_INCS)
 scads:         $(addsuffix .auto.scad, $(AUTO_TOPLEVELS))
@@ -134,7 +134,7 @@ FILAMENTSPOOL_DXFS=$(foreach n,$(FILAMENTSPOOL_NUMBERS), \
        filamentspool-number-n$n.dxf)
 
 $(addsuffix .auto.stl, $(foreach f,$(FILAMENTSPOOL_AUTOS),$(shell \
-       ./toplevel-find $f))): $(FILAMENTSPOOL_DXFS)
+       $(PLAY)/toplevel-find $(PLAY)/$f))): $(FILAMENTSPOOL_DXFS)
 
 filamentspool-numbers filamentspool.stl: $(FILAMENTSPOOL_DXFS)
 
index b4b7f65c272e773b8a88f6c907f2626de47aee7b..bf3c9130374c9d8305a8d55ef14158aa763e0f0d 100644 (file)
@@ -1,5 +1,8 @@
 // -*- C -*-
 
+// use shell thickness 1.50
+// use fill density 40%
+
 include <funcs.scad>
 
 tube_dia = 27.5 + 1.625;
@@ -14,7 +17,7 @@ total_h = 45;
 
 back_gap = 12.5;
 main_th = 2.75;
-tube_th = 2.25;
+tube_th = 2.125;
 
 midweb_d = 3;
 clip_th = 3.5;
@@ -28,7 +31,7 @@ backflange_th = 4.5;
 
 $fn=50;
 
-join_cr = 7;
+join_cr = 9;
 
 tube_rear_extra_th = 1;
 
@@ -59,6 +62,7 @@ module oval(sz){ // sz[0] > sz[1]
 }
 
 module JoinCircs(jr){
+  // http://mathworld.wolfram.com/Circle-CircleIntersection.html
   R = tube_or + join_cr;
   r = lock_or[1] + join_cr;
   d = dist2d( [0,0], lock_0 );
@@ -217,4 +221,4 @@ module TestClipBoltHole(){ //// toplevel
 //TestTopEdge();
 //TestClipBoltHole();
 
-//Bracket();
+Bracket();
diff --git a/sewing-table.scad.m4 b/sewing-table.scad.m4
new file mode 100644 (file)
index 0000000..0d1e813
--- /dev/null
@@ -0,0 +1,179 @@
+// -*- C -*-
+
+include <funcs.scad>
+include <commitid.scad>
+
+ply_th = 18;
+ply_hole_dia = 15;
+ply_edge_min = 10;
+
+tile_th = 3;
+post_dia = 8;
+
+post_shorter = 1;
+
+screw_dia = 2.2;
+screw_big_dia = 3.6;
+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;
+
+echo(str("HOLES IN PLY ctr dist from edge = ", ply_edge_hole_dist));
+
+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(){
+      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);
+      }
+    }
+  }
+}
+
+module Posts(posts) {
+  for (p= posts) {
+    translate([p[0], p[1], 0])
+      Post();
+  }
+}
+
+module TileBase(botleft_post, topright_post){
+  botleft = botleft_post - thehd;
+  size = topright_post - botleft_post + thehd * 2;
+  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; }
+m4_define(`INREFFRAME',`
+  length_vec = ($2) - ($1);
+  length = dist2d([0,0], length_vec);
+  length_uvec = length_vec / length;
+  ortho_uvec = [ -length_uvec[1], length_uvec[0] ];
+  m = [ [ length_uvec[0],  ortho_uvec[0], 0, ($1)[0], ],
+       [ length_uvec[1],  ortho_uvec[1], 0, ($1)[1], ],
+       [ 0,              0,              1,            0, ],
+       [ 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 '
+    INREFFRAME_EDGE {
+    difference(){
+      rotate([0,90,0])
+       cylinder(r= round_edge_rad, h= tlength, $fn=50);
+      translate([-1, 0, -20])
+       cube([tlength+2, 20, 20]);
+    }
+  }
+}
+
+module RoundLeftCorner(this_post, right_post) {
+  INREFFRAME(this_post, right_post) INREFFRAME_EDGE {
+    difference(){
+      sphere(r= round_edge_rad, $fn=60);
+      translate([0,0, -20])
+       cube([20,20,20]);
+    }
+  }
+}
+
+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(){ ////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]);
+  RoundEdge(holes[0] + [ 0, 0.1 ], holes[0]);
+  RoundLeftCorner(holes[0], holes[1]);
+}
+
+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();