import rhinoscriptsyntax as rs import Rhino.Geometry as rg import BLOCK_Library as blk import random as r objects = rs.ObjectsByLayer("Default") rs.DeleteObjects(objects) rs.EnableRedraw(False) canvas_size = 100 canvas_dim = [canvas_size, canvas_size, canvas_size] iterations = 20000 max_size = 20 legos = [] canvas = blk.Grid(canvas_dim) canvas.draw_boundary() for i in range(iterations): x = r.randint(0,canvas_size - max_size) y = r.randint(0,canvas_size - max_size) z = r.randint(0,canvas_size - max_size) point = rg.Point3d(x, y, z) l = r.randint(1,max_size) w = r.randint(1,max_size) h = r.randint(1,max_size) dim = [l, w, h] lego = blk.Block(point, dim) collision = canvas.check_collision(lego) if collision == False: canvas.add_block(lego) legos.append(lego) lego.draw() canvas.calculate_density() print "Number of blocks:", len(legos) print "Positive space:", canvas.block_count print "Negative space:", canvas_size**3 - canvas.block_count print round((canvas.block_count*100)/(canvas_size**3)), "%"