import rhinoscriptsyntax as rs import Rhino.Geometry as rg import BLOCK_Library as blk import random as r objects = rs.ObjectsByLayer("Layer 01") rs.DeleteObjects(objects) rs.EnableRedraw(False) experiments = 100 graph_points = [] for experiment in range(experiments): objects = rs.ObjectsByLayer("Default") rs.DeleteObjects(objects) rs.EnableRedraw(False) canvas_size = 10 canvas_dim = [canvas_size, canvas_size, canvas_size] iterations = 1000 max_size = 3 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() block_number = len(legos) pos_space = canvas.block_count neg_space = canvas_size**3 - canvas.block_count percent_filled = round((canvas.block_count*100)/(canvas_size**3)) #print "Number of blocks:", block_number #print "Positive space:", pos_space #print "Negative space:", neg_space #print percent_filled, "%" offset_y = 20 #graph_point = rs.AddPoint([experiment, percent_filled - offset_y, 0]) graph_point = rg.Point3d(experiment, percent_filled - offset_y, 0) graph_points.append(graph_point) polyline = rs.AddPolyline(graph_points) rs.ObjectLayer(polyline, "Layer 01")