/ src / experimental / tile_truchet.scad
tile_truchet.scad
 1  use <util/choose.scad>
 2  
 3  function tile_truchet(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          nums = [0, 1, 2, 3],
10          ones = [for(x = x_range) 1],
11  		m = is_undef(mask) ? [
12  			for(y = y_range)
13  				ones
14  		] : [
15  			for(y = rows - 1; y > -1; y = y - 1)
16              let(my = mask[y])
17  				[for(x = x_range) my[x]]
18  		]
19  	)
20  	is_undef(seed) ? [
21          for(y = y_range)
22          let(my = m[y])      
23              for(x = x_range)  
24              if(my[x] == 1)
25                  [x, y, choose(nums)]
26          
27      ] : [
28          for(y = y_range)  
29          let(my = m[y])      
30              for(x = x_range) 
31              if(my[x] == 1)
32              [x, y, choose(nums, x + y * rows + seed)]
33      ];