################################### ### DM2_w24 # AGruber@tugraz.at ### ### hu_06 UN_headquaters NYC ### ###################################################### ### paneling / new dimensions ### 87.5 x 22.0 meters (was lenY = 116.56 / lenX = 28.18) ################################### ###################################################### ############################## import rhinoscriptsyntax as rs import random, time, sys ### sys.path.append("P:/") ### import DM_lib as dm ### reload( dm ) ############################## rs.UnitSystem(4) # km = 5, meters = 4, cm = 3 etc rs.ShowGrid(None, 0) # grid > 0 = off rs.ShowGridAxes(None, 1) # y/y/z axen display > 0/1 = off/on rs.ViewDisplayMode(rs.CurrentView(), "wireframe") rs.Command("cplane w t enter", 0) # cPlane World Top dm.PointRadius(displayModeX=0, rad=3, styl=3) dm.printDisplay(1) # nomen est omen rs.EnableRedraw(0) ###_________________________________________# ### basic settings for grid to fit UN_slab # ### # floors = H = dm.H = 40 # default=40 / incl roof slabs = L = dm.L = 11 # default=11 depth = D = dm.D = 4 # default= 4 / division in building_depth floorHeight = fH = dm.fH = 4.0 # default= 4.0 / 4.0*(H-1) = 156 meters # ################ # get from DM_lib as dm: UnoGridCoords = dm.UnoGridCoords # get gridCoords L*D*H = 1760 UnoPanelCoords = dm.UnoPanelCoords # get panelCoords [frontPanels, backPanels, sidePanels, upSidePanels] / default arguments s.u. ################____________________________# ################ lengthVec = lVec = rs.VectorUnitize(rs.VectorSubtract( dm.getUnoCoord(0, 0, 0), dm.getUnoCoord(1, 0, 0) )) ## rs.AddPoint( dm.getUnoCoord(1, 0, 0) ) depthVec = dVec = rs.VectorUnitize(rs.VectorSubtract( dm.getUnoCoord(0, 1, 0), dm.getUnoCoord(0, 0, 0) )) ## rs.AddPoint( dm.getUnoCoord(0, 1, 0) ) ################ ########################################################################################### UnoPanelCoords = dm.getUNpanelCoords(anzL=10*1, anzH=39, anzD=3, stepL=5, stepH=1, stepD=1) ### = all ~windows_panels BigPanelCoords = dm.getUNpanelCoords(anzL=10*1, anzH=39, anzD=3, stepL=2, stepH=6, stepD=2) ### = all ~windows_panels UnoPanelCoords = dm.getUNpanelCoords(anzL=10*0.8, anzH=39*0.5, anzD=3, stepL=2, stepH=3, stepD=2) ### = standard for hu_06 ########################################################################################### ########################################################## frontPanels = UnoPanelCoords[0] ### list of coordLists ! backPanels = UnoPanelCoords[1] sidePanels = UnoPanelCoords[2] upSidePanels = UnoPanelCoords[3] allPanels = UnoPanelCoords[4] ################################# dm.newEmptyLayer("UNO::setUp", [120,120,140]) if 1: ### SETUP >> dont' exec @ homework ! rs.ObjectColor(rs.AddCurve( [dm.getUnoCoord(0,0,0), dm.getUnoCoord(0,0,39), dm.getUnoCoord(10,0,39), dm.getUnoCoord(10,0,0), dm.getUnoCoord(10,3,0), dm.getUnoCoord(0,3,0), dm.getUnoCoord(0,3,39), dm.getUnoCoord(10,3,39)], 1), [100,0,200]) rs.ObjectColor(rs.AddLine( dm.getUnoCoord(0, 0, 0), dm.getUnoCoord(0, 1, 0) ), [222, 0, 0] ) rs.ObjectColor(rs.AddLine( dm.getUnoCoord(0, 0, 0), dm.getUnoCoord(1, 0, 0) ), [0, 222, 0] ) rs.ObjectColor(rs.AddLine( dm.getUnoCoord(0, 0, 0), dm.getUnoCoord(0, 0, 2) ), [0, 0, 222] ) rs.ObjectPrintWidth( rs.AllObjects()[0:4], 0 ) rs.ZoomExtents() #for coords in BigPanelCoords[4]: rs.AddCurve( coords, 1 ) if 1: ### DEMO >> dont' exec @ homework ! print len(frontPanels) #dm.textDots( frontPanels[0] ) for coords in frontPanels[0:4]+sidePanels: pass rs.AddPoints( coords ) rs.AddCurve( coords, 2 ) for coords in BigPanelCoords[4]: pass if 1: ### DEMO >> dont' exec @ homework ! #dm.textDots( frontPanels[25] ) #############: ### panel_DEF: def myPanel( panel, basement = 1, auskrag = 2 ): p0, p1, p2, p3 = panel ### get items (==coords) from list #rs.AddLine( p0, p2 ) nVec = dm.normVec3pnts( p0, p1, p2) #nVec = rs.VectorScale( nVec, random.uniform(2, 5)) zCor = p0[2] auskrag = dm.reMap(zCor, 0, 200, 8.0, -10.0) nVec = rs.VectorScale( nVec, auskrag) if basement != 0: crv = rs.AddCurve( [p0, p1, dm.pntInbetween(p1, p3), p2, p3], 1 ) rs.ObjectPrintWidth( crv, 0 ) rs.ObjectColor( crv, [200,0,0]) else: pass #rs.AddCurve( panel ) p00 = dm.pntInbetween(p0, p2, random.uniform(0.1, 0.4) ) p10 = dm.pntInbetween(p1, p3, random.uniform(0.1, 0.4) ) p20 = dm.pntInbetween(p2, p0, random.uniform(0.1, 0.4) ) p30 = dm.pntInbetween(p3, p1, random.uniform(0.1, 0.4) ) rs.AddLine( p0, p1 ) coords = [p00, p10, p20, p30, p00] base = rs.AddCurve( [p0, p1, p2, p3, p0], 1) innen = rs.AddCurve( [p00, p10, p20, p30, p00], 2) for i,cor in enumerate(coords): cor = rs.VectorAdd(cor, nVec) coords[i] = cor aussen = rs.AddCurve( coords, 4) anz = int(dm.reMap(zCor, 0, 80, 100, 50)) ### type_casting coordsA = rs.DivideCurve( aussen, anz , 0) coordsB = rs.DivideCurve( base, anz , 0) for i in range( anz) : rs.AddCurve( [coordsA[i], coordsB[i]], 1) for i,panel in enumerate(frontPanels+sidePanels): pass basementVar = 0 if i<4:# or i>109: basementVar = 1 myPanel( panel, basement = basementVar, auskrag = 100 ) ### basement = (i<20 or i>109) #rs.Redraw() #_____________________________here you go: dm.newEmptyLayer("myPROJ", [200,200,200]) if 1: ### DEMOs / SETUP >> dont' exec @ homework ! if 1: rs.AddLine( dm.getUnoCoord(0, 0, 0), dm.getUnoCoord(10, 0, 0) ) rs.AddLine( dm.getUnoCoord(0, 0, 0), dm.getUnoCoord( 0, 3, 0) ) rs.AddLine( dm.getUnoCoord(0, 0, 0), dm.getUnoCoord( 0, 0, 39) ) p0 = dm.getUnoCoord( 0, 0, 0) p1 = dm.getUnoCoord( 10, 0, 0) p2 = dm.getUnoCoord( 10, 3, 0) p3 = dm.getUnoCoord( 0, 3, 0) unoBaseCoords = [p0, p1, p2, p3, p0] unoBaseCrv = rs.AddCurve( unoBaseCoords, 1) unoTopCoords = [dm.getUnoCoord( 0, 0, 39), dm.getUnoCoord( 10, 0, 39), dm.getUnoCoord( 10, 3, 39), dm.getUnoCoord( 0, 3, 39), dm.getUnoCoord( 0, 0, 39), ] unoTopCrv = rs.AddCurve( unoTopCoords, 1) rs.ZoomExtents() ################# ### abbreveation: def gC (l=1, d=2, h=3): cor = dm.getUnoCoord(l, d, h) return cor ## rs.AddPoint( gC(1,0,1) ) ################# p0= gC ( 10, 3, 39) p1= gC ( 0, 3, 37) p2= gC ( 10, 2, 35) p3= gC ( 0, 1, 33) p4= gC ( 8, 3, 31) p5= gC ( 0, 3, 29) p6= gC ( 8, 2, 27) p7= gC ( 0, 1, 25) p8= gC ( 6, 2, 23) p9= gC ( 0, 2, 21) p10= gC ( 6, 1, 19) p11= gC ( 0, 0, 17) p12= gC ( 4, 2, 15) p13= gC ( 0, 2, 13) p14= gC ( 4, 1, 11) p15= gC ( 0, 0, 9) p16= gC ( 2, 1, 5) p17= gC ( 0, 1, 3) p18= gC ( 2, 0, 1) p19= gC ( 0, 0, 0) coords= [p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19] #rs.AddCurve(coords, 1) crv= rs.AddCurve(coords, 3) anzCircs=64 divCircs=18 coords= rs.DivideCurve(crv, anzCircs, create_points=0) allCircCoordsLists= [] for cor in coords: rs.AddCircle(cor,5.5) paraX= rs.CurveClosestPoint(crv,cor) planeX=rs.CurvePerpFrame(crv,paraX) circ= rs.AddCircle(planeX,5.5) coords= rs.DivideCurve(circ,divCircs, 0) rs.DeleteObject(circ) allCircCoordsLists.append(coords) dom=rs.CurveDomain(crv)[1] print "dom", dom paraX= dom*0.25 cor= rs.EvaluateCurve(crv,paraX) rs.AddPoint(cor) planeX= rs.CurvePerpFrame(crv,paraX) #rs.AddCircle(planeX,5.5) rs.AddRectangle(planeX,15,15) i=0 for i in range(divCircs): coords=[] for list in allCircCoordsLists: p0=list[i] #rs.AddPoint(p0) coords.append(p0) rs.AddCurve(coords,3) rs.AddInterpCurve(coords,degree=3,knotstyle=3) def generate_building(base_point, width, depth, height): base_rect = rs.AddRectangle(base_point, width, depth) return rs.AddBox([rs.coerce3dpoint(pt) for pt in [ base_point, (base_point[0] + width, base_point[1], base_point[2]), (base_point[0] + width, base_point[1] + depth, base_point[2]), (base_point[0], base_point[1] + depth, base_point[2]), (base_point[0], base_point[1], base_point[2] + height), (base_point[0] + width, base_point[1], base_point[2] + height), (base_point[0] + width, base_point[1] + depth, base_point[2] + height), (base_point[0], base_point[1] + depth, base_point[2] + height) ]]) def generate_park(base_point, width, depth): return rs.AddRectangle(base_point, width, depth) def generate_city(): city_width = 1500 city_depth = 1500 block_size = 200 max_building_height = 250 park_chance = -1 for x in range(0, city_width, block_size): for y in range(0, city_depth, block_size): base_point = (x, y, 0) if random.random() < park_chance: width = random.uniform(10, block_size) depth = random.uniform(10, block_size) generate_park(base_point, width, depth) else: width = random.uniform(5, block_size) depth = random.uniform(5, block_size) height = random.uniform(5, max_building_height) generate_building(base_point, width, depth, height) for x in range(0, city_width, block_size): rs.AddLine((x, 0, 0), (x, city_depth, 0)) for y in range(0, city_depth, block_size): rs.AddLine((0, y, 0), (city_width, y, 0)) if __name__ == "__main__": generate_city() #____________________________:here you end ################################# #rs.ZoomExtents() rs.EnableRedraw(1) ### 4 the MACs dm.printDisplay(1) dm.newEmptyLayer("Default") ################################################