4 include <commitid.scad>
25 ply_edge_hole_dist = ply_edge_min + ply_hole_dia/2;
27 echo(str("HOLES IN PLY ctr dist from PLY edge = ", ply_edge_hole_dist));
29 hole_slop = (ply_hole_dia - post_dia)/2;
30 tile_hard_edge_hole_dist = ply_edge_hole_dist + hole_slop;
32 echo(str("HOLES IN PLY ctr dist from TILE HARD edge = ",
33 tile_hard_edge_hole_dist));
35 echo(str("HOLES IN PLY ctr dist from TILE ROUND edge = ",
36 tile_hard_edge_hole_dist + round_edge_rad));
38 thehd = [ tile_hard_edge_hole_dist, tile_hard_edge_hole_dist ];
40 thehd_tl = [ -thehd_tr[0], thehd_tr[1] ];
44 interlock_rad = interlock_dia/2;
45 interlock_negative_rad = interlock_rad + 0.125;
50 cylinder(r= post_dia/2, h= tile_th + ply_th - post_shorter);
51 translate([0,0, tile_th]) {
52 cylinder(r= screw_big_dia/2, h= screw_big_len);
53 cylinder(r= screw_dia/2, h= ply_th, $fn=20);
61 translate(concat(p, [0]))
66 module TileBase(botleft, topright){
67 size = topright - botleft;
68 botleft_post = botleft + thehd_tr;
69 topright_post = topright - thehd_bl;
70 echo(botleft_post, topright_post);
73 translate(concat(botleft, [0]))
74 cube(concat(size, [tile_th]));
75 translate( concat(botleft_post, [-tile_th])
76 + 0.5 * [ post_dia, post_dia, 0 ] )
77 Commitid_BestCount_M( topright_post-botleft_post
79 + [-post_dia,-post_dia] );
83 m4_dnl INREFFRAME(left_post, right_post, morevars) { body; }
84 m4_define(`INREFFRAME',`
85 length_vec = ($2) - ($1);
86 length = dist2d([0,0], length_vec);
87 length_uvec = length_vec / length;
88 ortho_uvec = [ -length_uvec[1], length_uvec[0] ];
89 m = [ [ length_uvec[0], ortho_uvec[0], 0, ($1)[0], ],
90 [ length_uvec[1], ortho_uvec[1], 0, ($1)[1], ],
97 m4_dnl INREFFRAME(left_post, right_post, morevars)
98 m4_dnl INREFFRAME_EDGE { body; }
99 m4_define(`INREFFRAME_EDGE',`
100 translate(concat(-thehd, [-round_edge_rad]))
103 module RoundEdge(left_post, right_post) {
104 INREFFRAME(left_post, right_post,
105 `tlength = length + thehd[0] * 2;') m4_dnl '
109 cylinder(r= round_edge_rad, h= tlength, $fn=50);
110 translate([-1, 0, -20])
111 cube([tlength+2, 20, 20]);
116 module RoundLeftCorner(this_post, right_post) {
117 INREFFRAME(this_post, right_post) INREFFRAME_EDGE {
119 sphere(r= round_edge_rad, $fn=60);
120 translate([0,0, -20])
126 module InterlockCore(r, plusth, ymir) {
129 translate([0, -thehd[1], plusth]){
132 linear_extrude(height=tile_th+plusth*2, convexity=10){
135 translate([-dx, -0.1])
136 square([ dx*2, r/2 + 0.1 ]);
138 translate([ xi*dx, r ])
148 module InterlockNegative(this_post, right_post) {
149 INREFFRAME(this_post, right_post)
150 InterlockCore(interlock_negative_rad, 1, 0);
153 module Interlock(this_post, right_post) {
154 INREFFRAME(this_post, right_post)
155 InterlockCore(interlock_rad, 0, 1);
158 function TestPiece_holes2corners(holes) =
159 [ holes[0] + thehd_bl,
162 holes[1] + thehd_tr ];
164 module TestPiece1(){ ////toplevel
168 corners = TestPiece_holes2corners(holes);
170 TileBase(corners[0], corners[3]);
171 InterlockNegative(holes[1], holes[1] + [0,1]);
174 RoundEdge(holes[0], holes[1]);
175 RoundEdge(holes[0] + [ 0, 0.1 ], holes[0]);
176 RoundLeftCorner(holes[0], holes[1]);
179 module TestPiece2(){ ////toplevel
183 corners = TestPiece_holes2corners(holes);
184 TileBase(corners[0], corners[3]);
186 RoundEdge(holes[0], holes[1]);
187 Interlock(holes[0], holes[0] + [0, -1]);
190 module Demo(){ ////toplevel
191 translate([ -thehd[0], 0 ])
194 translate([ +thehd[0], 0 ])