tile_w2c.scad
1 // wang tiles - 2 corners 2 3 function tile_w2c(size, mask, seed) = 4 let( 5 rows = size[1], 6 columns = size[0], 7 y_range = [0:rows - 1], 8 x_range = [0:columns - 1], 9 corners = is_undef(seed) ? [ 10 for(y = y_range) 11 [ 12 for(x = x_range) 13 round(rands(0, 1, 1)[0]) 14 ] 15 ] : [ 16 for(y = y_range) 17 [ 18 for(x = x_range) 19 round(rands(0, 1, 1, seed + y * columns + x)[0]) 20 ] 21 ], 22 ones = [for(x = x_range) 1], 23 m = is_undef(mask) ? [ 24 for(y = y_range) 25 ones 26 ] : [ 27 for(y = rows - 1; y > -1; y = y - 1) 28 let(my = mask[y]) 29 [for(x = x_range) my[x]] 30 ], 31 /* 32 8 1 33 . - . 34 | | 35 . - . 36 4 2 37 */ 38 tiles = [ 39 for(y = y_range) 40 let(my = m[y]) 41 for(x = x_range) 42 if(my[x] == 1) 43 [x, y, 44 (corners[(y + 1) % rows][(x + 1) % columns] == 1 ? 1 : 0) + 45 (corners[y][(x + 1) % columns] == 1 ? 2 : 0) + 46 (corners[y][x] == 1 ? 4 : 0) + 47 (corners[(y + 1) % rows][x] == 1 ? 8 : 0) 48 ] 49 ] 50 ) 51 tiles;