import rhinoscriptsyntax as rs import random as ran # crate 2D field # delete everything and start from scratch allobjs = rs.AllObjects() rs.DeleteObjects(allobjs) # prime numbers def is_prime(n): if n < 2: return False for i in range(2, int(n**0.5) + 1): if n % i == 0: return False return True # limit def generate_primes(limit): primes = [] for n in range(2, limit): if is_prime(n): primes.append(n) return primes # random colour def random_color(): return (ran.randint(0, 255), ran.randint(0, 255), ran.randint(0, 255)) # colour def create_material(name, color): material_index = rs.AddMaterialToObject(box) rs.MaterialColor(material_index, color) rs.ObjectMaterialIndex(box, material_index) # attributes bsize = 10 # side length of box dist = 4 # distance between boxes offs = bsize + dist # offset of boxes num = 20 # number of boxes multiple = 4 # deleted boxes #red # prime number boxes # create a box corners = [(0, 0, 0), (bsize, 0, 0), (bsize, bsize, 0), (0, bsize, 0), (0, 0, bsize), (bsize, 0, bsize), (bsize, bsize, bsize), (0, bsize, bsize)] rs.EnableRedraw(False) # prime numbers prime_numbers = generate_primes(num * num) # list created_boxes = [] # loop for i in range(num): for j in range(num): my_ran = ran.randint(0, 9) if my_ran > 2: if ((i + j) % 3 == 0) and ((i - j) % 3 == 0): box = rs.AddBox(corners) rs.MoveObject(box, (i * offs, j * offs, 0)) rs.ObjectColor(box, (0, 255, 0)) rs.RotateObject(box, (i * offs, j * offs, 0), 45) created_boxes.append(box) index = i * num + j + 1 if index in prime_numbers: box = rs.AddBox(corners) rs.MoveObject(box, (i * offs, j * offs, 0)) rs.ObjectColor(box, (255, 0, 0)) created_boxes.append(box) else: box = rs.AddBox(corners) rs.MoveObject(box, (i * offs, j * offs, 0)) rs.ObjectColor(box, random_color()) created_boxes.append(box) rs.RotateObject(box, (i * offs, j * offs, 0), 45) # delete for box in created_boxes: box_index = created_boxes.index(box) if box_index % (multiple) == 0: rs.DeleteObject(box) rs.EnableRedraw(True)