24 ply_edge_hole_dist = ply_edge_min + ply_hole_dia/2;
26 echo(str("HOLES IN PLY ctr dist from edge = ", ply_edge_hole_dist));
28 hole_slop = (ply_hole_dia - post_dia)/2;
29 tile_hard_edge_hole_dist = ply_edge_hole_dist + hole_slop;
30 thehd = [ tile_hard_edge_hole_dist, tile_hard_edge_hole_dist ];
32 interlock_rad = interlock_dia/2;
33 interlock_negative_rad = interlock_rad + 0.25;
38 cylinder(r= post_dia/2, h= tile_th + ply_th - post_shorter);
39 translate([0,0, tile_th]) {
40 cylinder(r= screw_big_dia/2, h= screw_big_len);
41 cylinder(r= screw_dia/2, h= ply_th, $fn=20);
49 translate([p[0], p[1], 0])
54 module TileBase(botleft_post, topright_post){
55 botleft = botleft_post - thehd;
56 size = topright_post - botleft_post + thehd * 2;
58 translate([botleft[0], botleft[1], 0])
59 cube([size[0], size[1], tile_th]);
62 m4_dnl INREFFRAME(left_post, right_post, morevars) { body; }
63 m4_define(`INREFFRAME',`
64 length_vec = ($2) - ($1);
65 length = dist2d([0,0], length_vec);
66 length_uvec = length_vec / length;
67 ortho_uvec = [ -length_uvec[1], length_uvec[0] ];
68 m = [ [ length_uvec[0], ortho_uvec[0], 0, ($1)[0], ],
69 [ length_uvec[1], ortho_uvec[1], 0, ($1)[1], ],
76 m4_dnl INREFFRAME(left_post, right_post, morevars)
77 m4_dnl INREFFRAME_EDGE { body; }
78 m4_define(`INREFFRAME_EDGE',`
79 translate([-thehd[1], -thehd[0], -round_edge_rad])
82 module RoundEdge(left_post, right_post) {
83 INREFFRAME(left_post, right_post,
84 `tlength = length + thehd[1] * 2;') m4_dnl '
88 cylinder(r= round_edge_rad, h= tlength, $fn=50);
89 translate([-1, 0, -20])
90 cube([tlength+2, 20, 20]);
95 module RoundLeftCorner(this_post, right_post) {
96 INREFFRAME(this_post, right_post) INREFFRAME_EDGE {
98 sphere(r= round_edge_rad, $fn=60);
105 module InterlockCore(r) {
108 translate([0, -thehd[0], 1]){
110 linear_extrude(height=tile_th+2){
113 translate([-dx, -0.1])
114 square([ dx*2, r/2 + 0.1 ]);
116 translate([ xi*dx, r ])
125 module InterlockNegative(this_post, right_post) {
126 INREFFRAME(this_post, right_post)
127 InterlockCore(interlock_negative_rad);
135 TileBase(holes[0], holes[1]);
136 InterlockNegative(holes[1], holes[1] + [0,1]);
140 RoundEdge(holes[0], holes[1]);
141 RoundEdge(holes[0] + [ 0, 0.1 ], holes[0]);
142 RoundLeftCorner(holes[0], holes[1]);