import rhinoscriptsyntax as rs import random as ran #delete everything and start from scratch allobjs = rs.AllObjects() rs.DeleteObjects(allobjs) A = 5 #Module size B = A/3 #Distance of columns to end of plate thick = 0.2 #thickness of all slabs hgt = 3.9 #height of room xcol = 2 #columns in x direction ycol = 3 #columns in y direction levels = 3 #number of flooer plates f_height = 0.5 #f_height = foundation height f_size = 0.8 #f_size = foundation edge size #derived values: center_pt = [A*(xcol-1)/2, A*(ycol-1)/2, f_height] #insertion point of the floor plate p_width = A*(xcol-1) + 2*B #width of floor plate p_length = A*(ycol-1) + f_size #length of floor plate def make_box(insertion=[0,0,0],xsize=10,ysize=10,zsize=10): #create a 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 to create a field of 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 to create a field of 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) rs.EnableRedraw(False) #function to create stair def make_stair(start, th, tt, steps, thick, s_width): pointlist=[start] for i in range (steps): pointlist.append([pointlist[-1][0],pointlist[-1][1], pointlist[-1][2]+th]) pointlist.append([pointlist[-1][0]+tt,pointlist[-1][1], pointlist[-1][2]]) pointlist.append([pointlist[-1][0],pointlist[-1][1], pointlist[-1][2]-thick]) pointlist.append([pointlist[0][0],pointlist[0][1], pointlist[0][2]-thick]) pointlist.append([pointlist[0][0],pointlist[0][1], pointlist[0][2]]) s_outline= rs.AddPolyline(pointlist) path = rs.AddLine(start, [start[0],start[1]+s_width,start[2]]) hull = rs.ExtrudeCurve(s_outline, path) rs.CapPlanarHoles(hull) rs.DeleteObject(s_outline) rs.DeleteObject(path) return (hull) #building dom-ino f_list=[] #list of foundations c_list=[] #of columns p_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)) rs.AddLayer("foundation") rs.LayerColor("foundation", (220,60,60)) rs.ObjectLayer(f_list,"foundation") rs.AddLayer("columns") rs.LayerColor("columns", (60,220,60)) rs.ObjectLayer(c_list,"columns") rs.AddLayer("plates") rs.LayerColor("plates", (60,60,220)) rs.ObjectLayer(p_list,"plates") #facade import rhinoscriptsyntax as rs # Parameters num = 9 # Number of triangles along one side bsize = p_width / num # Base size of each triangle ysize = thick # Thickness (depth) of the triangle dist = 0 # Distance between triangles boffs = dist + bsize # Offset for placing triangles # Function to create a vertical triangle def create_vertical_triangle(base_size, height_size): return [(0, 0, 0), (base_size, 0, 0), (base_size / 2, 0, height_size)] # Vertical triangle for i in range(num): for j in range(num): # Check if the triangle should be created at this position if ((i + j) % 2) == 0: # Create the triangle points tri_corners = create_vertical_triangle(bsize, bsize) # bsize for the height of the triangle # Create a polyline from the triangle points and close the loop tri = rs.AddPolyline(tri_corners + [tri_corners[0]]) # Extrude the triangle into a planar surface tri_surface = rs.AddPlanarSrf(tri) # Move the triangle to its correct position on the facade rs.MoveObject(tri_surface, (i * boffs, 0, j * boffs)) rs.MoveObject(tri_surface, (-B, (-f_size + thick), (f_height))) # Enable drawing to show the result rs.EnableRedraw(True)