import rhinoscriptsyntax as rs import random as ran # deleting starting from scratch allobjs = rs.AllObjects() rs.DeleteObjects(allobjs) rs.EnableRedraw(False) # dom-ino variables: A = 5 # A = Module size (distance between columns) B = A/3 # B = Distance of columns to end of plate thick = 0.2 # thickness of all slabs hgt = 2.7 # height of room xcol = 2 # columns in x direction ycol = 3 # columns in y direction levels = 3 # number of floor plates f_height= 0.5 # f_height = foundation height f_size = 0.8 # f_size = foundation edge size w_pts = 500 # number of Facade Elements w_height= hgt*(levels)-(levels/2) # w_height = hight of the facade w_size = 0.05 # w_size = facade edge size # derived values: center_pt = [A*(xcol-1)/2,A*(ycol-1)/2, f_height] # insertion point of floor plate p_width = A*(xcol-1) + 2*B # width of floor plate (x) p_length = A*(ycol-1) + f_size # length of floor plate (y) # function box def make_box(insertion=[0,0,0],xsize=10,ysize=10,zsize=10): # Define the corners of the box corners = [[0, 0, 0], [xsize, 0, 0], [xsize, ysize, 0], [0, ysize, 0], [0, 0, zsize], [xsize, 0, zsize], [xsize, ysize, zsize], [0, ysize, zsize]] box=rs.AddBox(corners) rs.MoveObject(box, (-xsize/2,-ysize/2,0)) rs.MoveObject(box, insertion) return(box) # function foundations def make_foundations(A=5.0, f_size=0.8, f_height=0.5, xcol=2, ycol=3): fns = [] for i in range(xcol): for j in range(ycol): fns.append(make_box([i*A,j*A,0], f_size, f_size, f_height)) return(fns) # function columns def make_columns(A=5.0, level=0.7, thick=0.2, hgt=3.0, xcol=2, ycol=3): cls =[] for i in range(xcol): for j in range(ycol): cls.append(make_box([i*A,j*A,level], thick, thick, hgt)) return(cls) # function facade def make_facade(insertion=[0, 0, 0], p_width=p_width, p_length=p_length, w_size=w_size, w_height=w_height): fcd = [] rec = rs.AddRectangle(rs.WorldXYPlane(), p_width, p_length) move_vector = rs.VectorCreate( [center_pt[0] - p_width / 2, center_pt[1] - p_length / 2, center_pt[2] + thick], [0, 0, 0]) rs.MoveObject(rec, move_vector) pts = rs.DivideCurve(rec, w_pts, False, True) if not rs.IsLayer("facade"): rs.AddLayer("facade") rs.LayerColor("facade", (255, 0, 0)) generate_row = True for i, p in enumerate(pts): facade_height = f_height + (levels * (thick + hgt)) if generate_row: w_box = make_box(insertion, w_size, w_size, w_height) rs.MoveObject(w_box, [p[0], p[1], 0]) rs.ObjectLayer(w_box, "facade") fcd.append(w_box) generate_row = not generate_row rs.DeleteObjects(rec) return fcd, pts # dom-ino f_list=[] # list of foundations c_list=[] # list of columns p_list=[] # list of plates for i in range(levels): center_pt[2] = f_height + i*(thick+hgt) level = f_height + thick +(i-1)*(hgt+thick) if i==0: f_list = make_foundations(A, f_size, f_height, xcol, ycol) else: c_list.extend(make_columns(A, level, thick, hgt, xcol, ycol)) p_list.append(make_box(center_pt, p_width, p_length, thick)) # facade make_facade() # the rest of the layers rs.AddLayer("foundation") rs.LayerColor("foundation", (255, 255, 255)) rs.ObjectLayer(f_list,"foundation") rs.AddLayer("columns") rs.LayerColor("columns", (0, 255, 0)) rs.ObjectLayer(c_list,"columns") rs.AddLayer("plates") rs.LayerColor("plates", (0, 255, 255)) rs.ObjectLayer(p_list,"plates")