/ src / experimental / tile_w2c.scad
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;