chiark / gitweb /
e94ee126b6ecd8912f2584e97ec8ca1727463f23
[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   multmatrix(m) {
68     translate([-thehd[1], -thehd[0], -round_edge_rad]){
69       difference(){
70         rotate([0,90,0])
71           cylinder(r= round_edge_rad, h= tlength, $fn=50);
72         translate([-1, 0, -20])
73           cube([tlength+2, 20, 20]);
74       }
75     }
76   }
77 }
78
79 module RoundLeftCorner(this_post, right_post) {
80   length_vec = right_post - this_post;
81   length_uvec = length_vec - dist2d([0,0], length_vec);
82   ortho_uvec = [ -length_uvec[1], length_uvec[0] ];
83   m = [ [ length_uvec[0],  ortho_uvec[0], 0, this_post[0], ],
84         [ length_uvec[1],  ortho_uvec[1], 0, this_post[1], ],
85         [ 0,              0,              1,            0, ],
86         [ 0,              0,              0,            1, ] ];
87   multmatrix(m) {
88     translate([-thehd[1], -thehd[0], -round_edge_rad]){
89       difference(){
90         sphere(r= round_edge_rad, $fn=60);
91         translate([0,0, -20])
92           cube([20,20,20]);
93       }
94     }
95   }
96 }
97
98 module TestPiece1(){
99   holes = [ [-100, 0],
100             [   0, 0]
101             ];
102   TileBase(holes[0], holes[1]);
103   Posts(holes);
104   RoundEdge(holes[0], holes[1]);
105   RoundEdge(holes[0] + [ 0, 0.1 ], holes[0]);
106   RoundLeftCorner(holes[0], holes[1]);
107 }
108
109 TestPiece1();