import rhinoscriptsyntax as rs import random as ran allobjs = rs.AllObjects() rs.DeleteObjects (allobjs) #------------------------------------------------------------------------------- A = 200 #x length B = 3/4*A #y lenght hgt = 30 #height thick = 3 #floor thick steps = 4 #steps plane = rs.WorldXYPlane() fassade_layers = 2 #fassade layers radius = 0.5 #radius for bambus cylinders for fassade bsize = 10 #start value box dist = 1 numx = 10 #points rows for ran_boxes in x numy = 8 #points rows for ran_boxes in y center_pt = [A/2, B/2, -thick] offsx = A/(numx+1) #offset in x offsy = B/(numy+1) #offset in y corners = [ (0,0,0), (bsize,0,0), (bsize,bsize,0), (0,bsize,0), (0,0,bsize), (bsize,0,bsize), (bsize,bsize,bsize), (0,bsize,bsize)] rs.EnableRedraw(False) #------------------------------------------------------------------------------- #function to create box at centerpoint def make_box(center_pt, xsize=10, ysize=10, zsize=10): 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, center_pt) """ origin="0,0,0" length=str(25.0) width=str(15.0) rad=str(5.0) rs.Command("_Rectangle _Rounded "+origin+" "+length+" "+width+" "+rad) """ #make fundament for i in range(1): rs.InsertBlock("floor", (center_pt[0],center_pt[1],center_pt[2]-thick), scale=(1+i/15,1+i/15,1), angle_degrees=0, rotation_normal=(0,0,1)) #make_2.floor for i in range(steps): rs.InsertBlock("floor", (center_pt[0],center_pt[1],center_pt[2]+hgt+thick+thick*i), scale=(1+i/15,1+i/15,1), angle_degrees=0, rotation_normal=(0,0,1)) rs.InsertBlock("floor", (center_pt[0],center_pt[1],center_pt[2]+hgt*2+thick+thick*steps+thick*i), scale=(1+i/15,1+i/15,1), angle_degrees=0, rotation_normal=(0,0,1)) #make_3.floor for i in range(steps+fassade_layers): rs.InsertBlock("floor", (center_pt[0],center_pt[1],center_pt[2]+hgt*2+thick+thick*steps+thick*i), scale=(1+(i)/15,1+(i)/15,1), angle_degrees=0, rotation_normal=(0,0,1)) #------------------------------------------------------------------------------- # create building Ground Floor building_box = rs.AddBox([ (center_pt[0] - 75, center_pt[1] - 55, center_pt[2] - thick +3), (center_pt[0] + 75, center_pt[1] - 55, center_pt[2] - thick +3), (center_pt[0] + 75, center_pt[1] + 55, center_pt[2] - thick +3), (center_pt[0] - 75, center_pt[1] + 55, center_pt[2] - thick +3), (center_pt[0] - 75, center_pt[1] - 55, center_pt[2] + hgt + thick), (center_pt[0] + 75, center_pt[1] - 55, center_pt[2] + hgt + thick), (center_pt[0] + 75, center_pt[1] + 55, center_pt[2] + hgt + thick), (center_pt[0] - 75, center_pt[1] + 55, center_pt[2] + hgt + thick) ]) # create building First Floor building_box = rs.AddBox([ (center_pt[0] - 75, center_pt[1] - 55, center_pt[2] + hgt + thick+3 * steps), (center_pt[0] + 75, center_pt[1] - 55, center_pt[2] + hgt + thick+3 * steps), (center_pt[0] + 75, center_pt[1] + 55, center_pt[2] + hgt + thick+3 * steps), (center_pt[0] - 75, center_pt[1] + 55, center_pt[2] + hgt + thick+3 * steps), (center_pt[0] - 75, center_pt[1] - 55, center_pt[2] + hgt * 2.1 + thick * steps), (center_pt[0] + 75, center_pt[1] - 55, center_pt[2] + hgt * 2.1 + thick * steps), (center_pt[0] + 75, center_pt[1] + 55, center_pt[2] + hgt * 2.1 + thick * steps), (center_pt[0] - 75, center_pt[1] + 55, center_pt[2] + hgt * 2.1 + thick * steps) ]) #------------------------------------------------------------------------------- offs = radius + 1 rebuild_points = 30 fassade_hgt = hgt * 2 + thick * steps + thick * (steps + fassade_layers) - 1 fassade_hgt2 = hgt + thick * steps * 1.5 + thick #make_fassade offs = radius +1 rebuild_points = 30 fassade_hgt = hgt*2+thick*steps+thick*(steps+fassade_layers)-1 fassade_hgt2 = hgt+thick*steps*1.5+thick #1 rs.Command("-_Rectangle _Rounded 0,0,{} 200,150,{} 50 _Enter".format(fassade_hgt,fassade_hgt)) crv = rs.FirstObject(select=True) rs.UnselectAllObjects() crv_sc = rs.ScaleObject(crv, (center_pt[0],center_pt[1],center_pt[2]+50), (1+(steps)/15,1+(steps)/15,1)) rs.RebuildCurve(crv_sc, 2, rebuild_points) crv_rebuilt = rs.FirstObject(select=True) crv_length = rs.CurveLength(crv_rebuilt) pipes = crv_length/(radius+offs) points = rs.DivideCurve(crv_rebuilt, pipes) #2 rs.Command("-_Rectangle _Rounded 0,0,{} 200,150,{} 50 _Enter".format(fassade_hgt2,fassade_hgt2)) crv2 = rs.FirstObject(select=True) rs.UnselectAllObjects() crv2_sc = rs.ScaleObject(crv2, (center_pt[0],center_pt[1],center_pt[2]+0), (1+(steps)/15,1+(steps)/15,1)) rs.RebuildCurve(crv2_sc, 2, rebuild_points) crv2_rebuilt = rs.FirstObject(select=True) rs.UnselectAllObjects() rs.EnableObjectGrips(crv2_rebuilt, True) for i in range(rebuild_points): if not i %3: rs.SelectObjectGrip(crv2_rebuilt, i) z_value = ran.randint(-40,40) move_point = rs.SelectedObjects(include_lights=True, include_grips=True) rs.Command("-_Move 0,0,0 0,0,{} _Enter".format(z_value)) rs.SelectObject(crv2_rebuilt) rs.UnselectAllObjects() #build bamboo for i in points: intersect_lines = rs.AddLine((i[0],i[1],i[2]), (i[0],i[1],i[2]-100)) intersection_list = rs.CurveCurveIntersection(intersect_lines, crv2_rebuilt) rs.DeleteObjects(intersect_lines) if intersection_list: intersection = intersection_list[0] intersection_point = intersection[1] cylinder = rs.AddCylinder(intersection_point, (i[0],i[1],i[2]), radius, cap=True) rs.DeleteObject(crv2_rebuilt) #------------------------------------------------------------------------------- #1 rs.Command("-_Rectangle _Rounded 0,0,{} 200,150,{} 50 _Enter".format(fassade_hgt,fassade_hgt)) crv3 = rs.FirstObject(select=True) rs.UnselectAllObjects() crv3_sc = rs.ScaleObject(crv3, (center_pt[0],center_pt[1],center_pt[2]+50), (1+(steps+1)/15,1+(steps+1)/15,1)) rs.RebuildCurve(crv3_sc, 2, rebuild_points) crv3_rebuilt = rs.FirstObject(select=True) crv3_length = rs.CurveLength(crv3_rebuilt) pipes2 = crv3_length/(radius+offs) points2 = rs.DivideCurve(crv3_rebuilt, pipes2) #2 rs.Command("-_Rectangle _Rounded 0,0,{} 200,150,{} 50 _Enter".format(fassade_hgt2,fassade_hgt2)) crv4 = rs.FirstObject(select=True) rs.UnselectAllObjects() crv4_sc = rs.ScaleObject(crv4, (center_pt[0],center_pt[1],center_pt[2]+0), (1+(steps+1)/15,1+(steps+1)/15,1)) rs.RebuildCurve(crv4_sc, 2, rebuild_points) crv4_rebuilt = rs.FirstObject(select=True) rs.UnselectAllObjects() rs.EnableObjectGrips(crv4_rebuilt, True) for i in range(rebuild_points): if not i %3: rs.SelectObjectGrip(crv4_rebuilt, i) z_value = ran.randint(-40,40) move_point = rs.SelectedObjects(include_lights=True, include_grips=True) rs.Command("-_Move 0,0,0 0,0,{} _Enter".format(z_value)) rs.SelectObject(crv4_rebuilt) # rs.MoveObject(move_point[0], [0,0,ran.randint(-40,40)]) rs.UnselectAllObjects() #build bamboo for i in points2: intersect_lines2 = rs.AddLine((i[0],i[1],i[2]), (i[0],i[1],i[2]-100)) intersection_list2 = rs.CurveCurveIntersection(intersect_lines2, crv4_rebuilt) rs.DeleteObjects(intersect_lines2) if intersection_list2: intersection2 = intersection_list2[0] intersection_point2 = intersection2[1] cylinder = rs.AddCylinder(intersection_point2, (i[0],i[1],i[2]), radius, cap=True) rs.DeleteObject(crv4_rebuilt) rs.EnableRedraw(True)