diff --git a/examples/tiles/2_edge_wang_tiles_basic.scad b/examples/tiles/2_edge_wang_tiles_basic.scad index 87a069ed..5dc6199f 100644 --- a/examples/tiles/2_edge_wang_tiles_basic.scad +++ b/examples/tiles/2_edge_wang_tiles_basic.scad @@ -1,4 +1,4 @@ -use ; +use ; use ; rows = 10; @@ -7,51 +7,24 @@ tile_width = 10; tile_thickness = 2; $fn = 24; -tiles_wang_2e(rows, columns, tile_width) { - sample_tile(0, tile_width, tile_thickness); - sample_tile(1, tile_width, tile_thickness); - sample_tile(2, tile_width, tile_thickness); - sample_tile(3, tile_width, tile_thickness); - sample_tile(4, tile_width, tile_thickness); - sample_tile(5, tile_width, tile_thickness); - sample_tile(6, tile_width, tile_thickness); - sample_tile(7, tile_width, tile_thickness); - sample_tile(8, tile_width, tile_thickness); - sample_tile(9, tile_width, tile_thickness); - sample_tile(10, tile_width, tile_thickness); - sample_tile(11, tile_width, tile_thickness); - sample_tile(12, tile_width, tile_thickness); - sample_tile(13, tile_width, tile_thickness); - sample_tile(14, tile_width, tile_thickness); - sample_tile(15, tile_width, tile_thickness); -} - -translate([0, tile_width * (rows + 1)]) { - color("LightGrey") - linear_extrude(tile_thickness / 2) - square([columns * tile_width, rows * tile_width]); +translate([tile_width, tile_width] / 2) + for(tile = tile_w2e(rows, columns)) { + x = tile[0]; + y = tile[1]; + i = tile[2]; + translate([x, y] * tile_width) + sample_tile(i, tile_width, tile_thickness); + } +translate([0, tile_width * (rows + 1)] + [tile_width, tile_width] / 2) color("green") - linear_extrude(tile_thickness) - tiles_wang_2e(rows, columns, tile_width) { - path_tile(0, tile_width); - path_tile(1, tile_width); - path_tile(2, tile_width); - path_tile(3, tile_width); - path_tile(4, tile_width); - path_tile(5, tile_width); - path_tile(6, tile_width); - path_tile(7, tile_width); - path_tile(8, tile_width); - path_tile(9, tile_width); - path_tile(10, tile_width); - path_tile(11, tile_width); - path_tile(12, tile_width); - path_tile(13, tile_width); - path_tile(14, tile_width); - path_tile(15, tile_width); - } -} + for(tile = tile_w2e(rows, columns)) { + x = tile[0]; + y = tile[1]; + i = tile[2]; + translate([x, y] * tile_width) + path_tile(i, tile_width); + } module sample_tile(n, width, thickness) { half_w = width / 2; diff --git a/src/experimental/tile_w2e.scad b/src/experimental/tile_w2e.scad new file mode 100644 index 00000000..21ee132c --- /dev/null +++ b/src/experimental/tile_w2e.scad @@ -0,0 +1,46 @@ +// wang tiles - 2 edges + +function tile_w2e(rows, columns, mask, seed) = + let( + edges = is_undef(seed) ? [ + for(y = [0:rows]) + [ + for(x = [0:columns]) + let(rs = rands(0, 1, 2)) + [round(rs[0]), round(rs[1])] + ] + ] : [ + for(y = [0:rows]) + [ + for(x = [0:columns]) + let(rs = rands(0, 1, 2, seed + y * columns + x)) + [round(rs[0]), round(rs[1])] + ] + ], + m = is_undef(mask) ? [ + for(y = [0:rows - 1]) + [for(x = [0:columns - 1]) 1] + ] : [ + for(y = rows - 1; y > -1; y = y - 1) + [for(x = [0:columns - 1]) mask[y][x]] + ], + /* + 1 + . - . + 8 | | 2 + . - . + 4 + */ + tiles = [ + for(y = [0:rows - 1]) + for(x = [0:columns - 1]) + if(m[y][x] == 1) + [x, y, + (edges[y + 1][x][0] == 1 ? 1 : 0) + + (edges[y][x + 1][1] == 1 ? 2 : 0) + + (edges[y][x][0] == 1 ? 4 : 0) + + (edges[y][x][1] == 1 ? 8 : 0) + ] + ] + ) + tiles; \ No newline at end of file