chiark / gitweb /
sewing-table: RoundEdge could not cope with identical posts, bodge it
[reprap-play.git] / sewing-table.scad
1 // -*- C -*-
2
3 include <funcs.scad>
4
5 ply_th = 18;
6 ply_hole_dia = 15;
7 ply_edge_min = 10;
8
9 tile_th = 3;
10 post_dia = 8;
11
12 post_shorter = 1;
13
14 screw_dia = 2.2;
15 screw_big_dia = 3.6;
16 screw_big_len = 4.0;
17
18 round_edge_rad = 2.0;
19
20 // calculated
21
22 ply_edge_hole_dist = ply_edge_min + ply_hole_dia/2;
23
24 echo(str("HOLES IN PLY ctr dist from edge = ", ply_edge_hole_dist));
25
26 hole_slop = (ply_hole_dia - post_dia)/2;
27 tile_hard_edge_hole_dist = ply_edge_hole_dist + hole_slop;
28 thehd = [ tile_hard_edge_hole_dist, tile_hard_edge_hole_dist ];
29
30 module Post(){
31   mirror([0,0,1]) {
32     difference(){
33       cylinder(r= post_dia/2, h= tile_th + ply_th - post_shorter);
34       translate([0,0, tile_th]) {
35         cylinder(r= screw_big_dia/2, h= screw_big_len);
36         cylinder(r= screw_dia/2, h= ply_th, $fn=20);
37       }
38     }
39   }
40 }
41
42 module Posts(posts) {
43   for (p= posts) {
44     translate([p[0], p[1], 0])
45       Post();
46   }
47 }
48
49 module TileBase(botleft_post, topright_post){
50   botleft = botleft_post - thehd;
51   size = topright_post - botleft_post + thehd * 2;
52   mirror([0,0,1])
53     translate([botleft[0], botleft[1], 0])
54     cube([size[0], size[1], tile_th]);
55 }
56
57 module RoundEdge(left_post, right_post) {
58   length_vec = right_post - left_post;
59   length = dist2d([0,0], length_vec);
60   length_uvec = length_vec / length;
61   ortho_uvec = [ -length_uvec[1], length_uvec[0] ];
62   m = [ [ length_uvec[0],  ortho_uvec[0], 0, left_post[0], ],
63         [ length_uvec[1],  ortho_uvec[1], 0, left_post[1], ],
64         [ 0,              0,              1,            0, ],
65         [ 0,              0,              0,            1, ] ];
66   tlength = length + thehd[1] * 2;
67   echo(m);
68   multmatrix(m) {
69     translate([-thehd[1], -thehd[0], -round_edge_rad]){
70       difference(){
71         rotate([0,90,0])
72           cylinder(r= round_edge_rad, h= tlength, $fn=30);
73         translate([-1, 0, -20])
74           cube([tlength+2, 20, 20]);
75       }
76     }
77   }
78 }
79
80 module RoundLeftCorner(this_post, right_post) {
81 }
82
83 module TestPiece1(){
84   holes = [ [-100, 0],
85             [   0, 0]
86             ];
87   %TileBase(holes[0], holes[1]);
88   Posts(holes);
89   RoundEdge(holes[0], holes[1]);
90   RoundEdge(holes[0] + [ 0, 0.1 ], holes[0]);
91   RoundLeftCorner(holes[0], holes[1]);
92 }
93
94 TestPiece1();