import rhinoscriptsyntax as rs import Rhino.Geometry as rg import BLOCK_Library as blk import random as r import scriptcontext def rule_a(lego): dim = [lego.h, lego.w, lego.l] lego_new = blk.Block(lego.corner_2, dim) canvas.add_block(lego_new) legos.append(lego_new) lego_new.draw() return lego_new def rule_b(lego): dim = [lego.h, lego.w, lego.l] lego_new = blk.Block(lego.corner_3, dim) canvas.add_block(lego_new) legos.append(lego_new) lego_new.draw() return lego_new def rule_c(lego): dim = [lego.l, lego.w, lego.h] lego_new = blk.Block(lego.corner_7, dim) canvas.add_block(lego_new) legos.append(lego_new) lego_new.draw() return lego_new def rule_d(lego): dim = [lego.h, lego.w, lego.l] insert_point = lego.corner_1 + rg.Vector3d(0,-lego.w,0) lego_new = blk.Block(insert_point, dim) canvas.add_block(lego_new) legos.append(lego_new) lego_new.draw() return lego_new r.seed("magic spice which will fix the randomness") objects = rs.ObjectsByLayer("Default") rs.DeleteObjects(objects) rs.EnableRedraw(False) canvas_size = 300 canvas_dim = [canvas_size, canvas_size, canvas_size] min_size = 5 max_size = 10 legos = [] canvas = blk.Grid(canvas_dim) #canvas.draw_boundary() m_iterations = 10 n_iterations = 10 for m in range(m_iterations): x, y, z = 0, 0, 0 l, w, h = 10, 3, 3 point = rg.Point3d(m*l, y, z) dim = [l, w, h] lego = blk.Block(point, dim) canvas.add_block(lego) legos.append(lego) lego.draw() for n in range(n_iterations): lego = rule_c(lego) lego = rule_d(lego) lego = rule_a(lego)