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 = 3.03 # height of room xcol = 4 # columns in x direction ycol = 5 # columns in y direction levels = 4 # 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+thick)*(levels-1)+f_height+(1.5*thick) # 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 podest def make_podest(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]] podest=rs.AddBox(corners) rs.MoveObject(podest, insertion) return(podest) # 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) def make_terrace(A=5.0, level=0.7, thick=0.2, hgt=3.0, xcol=5, ycol=3): cls =[] for i in range(xcol): for j in range(ycol): rando = ran.uniform(0.2,2.0) cls.append(make_box([i*A,j*A,level], rando, rando, rando)) return(cls) #function to make stairs w_total = 2 w_single = 1 #b_hgt = 323 th = 0.17 tt = 0.29 stuf = 0.50 stp_count = 9 stairs = [] def make_stairs(center_pt, p_width, w_total, w_single, hgt, th, tt, stuf): stairs = [] for i in range(stp_count): plane = rs.WorldYZPlane() rect = rs.AddRectangle(plane, stuf, th) poly=rs.AddPolyline([(center_pt[0]+(p_width/2)+ w_total,2+i*tt,center_pt[2]+thick+i*th+th), (center_pt[0]+(p_width/2)+ w_single,2+i*tt,center_pt[2]+thick+i*th+th), (center_pt[0]+(p_width/2)+ w_single,2+i*tt,center_pt[2]+thick+hgt+thick-(i*th)), (center_pt[0]+(p_width/2),2+i*tt,center_pt[2]+thick+hgt+thick-(i*th))]) vec = [center_pt[0]+(p_width/2) +w_total,2+ i*tt,center_pt[2]+thick+ i*th] rs.MoveObject(rect, vec) srf = rs.AddSweep1(poly, [rect], True) rs.CapPlanarHoles(srf) rs.DeleteObject(rect) rs.DeleteObject(poly) stairs.append(srf) return stairs print(stairs) print(center_pt) print(p_width) podest_start = [(center_pt[0]+(p_width/2)),(center_pt[1]-(p_length/2)), (center_pt[2])] zwpodest_start = [(center_pt[0]+(p_width/2)),(center_pt[1]-(p_length/2)+(stp_count*tt)+2+(f_size/2)), (center_pt[2]+(stp_count*th)+thick)] for i in range(levels): if i == 0: make_stairs(center_pt = center_pt, p_width = p_width, w_total = w_total, w_single = w_single, hgt = hgt, th = th, tt = tt, stuf = stuf) make_podest(zwpodest_start, w_total, w_single, th) if not i == levels-1: stair = make_stairs(center_pt = center_pt, p_width = p_width, w_total = w_total, w_single = w_single, hgt = hgt, th = th, tt = tt, stuf = stuf) podest =make_podest(podest_start, w_total, 2+(f_size/2)+(stuf/2), thick) zwpodest = make_podest(zwpodest_start, w_total, w_single, th) vect = [0,0,(hgt+thick)*i] rs.MoveObjects(stair,vect) rs.MoveObject(podest,vect) rs.MoveObject(zwpodest,vect) else: podest =make_podest(podest_start, w_total, 2+(f_size/2)+(stuf/2), thick) vect = [0,0,(hgt+thick)*i] rs.MoveObject(podest,vect) # 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+w_total, 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 def make_domino(A=A, B=B, levels=levels, thick=thick, hgt=hgt, xcol=xcol, ycol=ycol, f_height=f_height, f_size=f_size): 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)) level = f_height + thick +(levels-1)*(hgt+thick) make_terrace(A, level, thick, hgt, xcol, ycol) return(f_list, c_list, p_list) (f_list, c_list, p_list) = make_domino() # 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")