################################## ### DM2_w23 # AGruber@tugraz.at ### ### hu_06 UN_headquaters NYC ### ### paneling ### ################################### ############################## 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, 0) # 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(0) # nomen est omen rs.EnableRedraw(0) dm.eAA() ###_________________________________________# ### 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. ################____________________________# dm.newEmptyLayer("UNO::setUp", [120,120,140]) ################ 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) ) ################ if 1: ### SETUP >> dont' exec @ homework ! 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) 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:3], 1.0 ) #rs.AddPoints( UnoGridCoords ) rs.ZoomExtents() frontPanels = UnoPanelCoords[0] backPanels = UnoPanelCoords[1] sidePanels = UnoPanelCoords[2] upSidePanels = UnoPanelCoords[3] allPanels = UnoPanelCoords[4] #_____________________________here you go: dm.newEmptyLayer("myPROJ", [120,100,120]) allPanels = [] # front allPanels = [[dm.getUnoCoord( 0, 0, 0), dm.getUnoCoord( 0, 0, 39), dm.getUnoCoord(10, 0, 39), dm.getUnoCoord(10, 0, 0)]] # back: #allPanels += [[dm.getUnoCoord( 0, 3, 0), dm.getUnoCoord( 0, 3, 39), dm.getUnoCoord(10, 3, 39), dm.getUnoCoord(10, 3, 0)]] # side: #allPanels += [[dm.getUnoCoord( 0, 3, 0), dm.getUnoCoord( 0, 3, 39), dm.getUnoCoord( 0, 0, 39), dm.getUnoCoord( 0, 0, 0)]] #allPanels += [[dm.getUnoCoord(10, 0, 0), dm.getUnoCoord(10, 0, 39), dm.getUnoCoord(10, 3, 39), dm.getUnoCoord(10, 3, 0)]] random.shuffle( allPanels ) def dividePanel( panel=allPanels[0], maxPanels=25, minHig=4.0 ): dm.esc() if maxPanels>500: maxPanels=500 if rs.Distance( panel[0], panel[1] ) > minHig*2: allPanels.remove( panel ) pMid = dm.pntInbetween(panel[0],panel[2]) allPanels.append([panel[0], dm.pntInbetween(panel[0],panel[1]), pMid, dm.pntInbetween(panel[3],panel[0])]) allPanels.append([dm.pntInbetween(panel[0],panel[1]), panel[1],dm.pntInbetween(panel[1],panel[2]), pMid]) allPanels.append([pMid, dm.pntInbetween(panel[1],panel[2]), panel[2], dm.pntInbetween(panel[2],panel[3])]) allPanels.append([dm.pntInbetween(panel[0],panel[3]), pMid, dm.pntInbetween(panel[2],panel[3]), panel[3]]) if len(allPanels) <= maxPanels : dividePanel( panel=random.choice( allPanels[0: int(len(allPanels)*0.666)]), maxPanels=maxPanels ) dividePanel(panel=allPanels[0], maxPanels=111, minHig=12.0 ) print "::: len(allPanels)",len(allPanels) def myPanel_V ( panel, anzahl=8 ): multi=0.10 coordsI = [dm.pntInbetween(p0,p2,multi),dm.pntInbetween(p3,p1,multi),dm.pntInbetween(p2,p0,multi),dm.pntInbetween(p1,p3,multi),dm.pntInbetween(p0,p2,multi)] crv1=rs.AddCurve(coordsI,1) rs.ObjectPrintWidth( crv1, 0.25 ) nVec = dm.normVec3pnts( p0, p1, p2) multi1=0.25 coordsA = [dm.pntInbetween(p0,p2,multi1),dm.pntInbetween(p3,p1,multi1),dm.pntInbetween(p2,p0,multi1),dm.pntInbetween(p1,p3,multi1),dm.pntInbetween(p0,p2,multi1)] for i in range( len(coordsA) ): cor = coordsA[i] cor = rs.VectorAdd( cor, rs.VectorScale(nVec, 5.03) ) coordsA[i]=cor if i != 0: rs.AddLine( coordsI[i],coordsA[i] ) rs.ObjectPrintWidth(rs.AddCurve( coordsA, 1),0.5) def myPanel_H ( panel, anzahl=8 ): p0,p1,p2,p3 = panel multi=0.10 coordsI = [dm.pntInbetween(p0,p2,multi),dm.pntInbetween(p3,p1,multi),dm.pntInbetween(p2,p0,multi),dm.pntInbetween(p1,p3,multi),dm.pntInbetween(p0,p2,multi)] crv1=rs.AddCurve(coordsI,1) rs.ObjectPrintWidth( crv1, 0.25 ) nVec = dm.normVec3pnts( p0, p1, p2) multi1=0.25 coordsA = [dm.pntInbetween(p0,p2,multi1),dm.pntInbetween(p3,p1,multi1),dm.pntInbetween(p2,p0,multi1),dm.pntInbetween(p1,p3,multi1),dm.pntInbetween(p0,p2,multi1)] for i in range( len(coordsA) ): cor = coordsA[i] cor = rs.VectorAdd( cor, rs.VectorScale(nVec, 5.03) ) coordsA[i]=cor if i != 0: rs.AddLine( coordsI[i],coordsA[i] ) rs.ObjectPrintWidth(rs.AddCurve( coordsA, 1),0.5) def myPanel(panel, basement=0): p0,p1,p2,p3=panel if basement != 0: multi=0.10 coordsI = [dm.pntInbetween(p0,p2,multi),dm.pntInbetween(p3,p1,multi),dm.pntInbetween(p2,p0,multi),dm.pntInbetween(p1,p3,multi),dm.pntInbetween(p0,p2,multi)] crv1=rs.AddCurve(coordsI,1) rs.ObjectPrintWidth( crv1, 0.25 ) nVec = dm.normVec3pnts( p0, p1, p2) multi1=0.25 coordsA = [dm.pntInbetween(p0,p2,multi1),dm.pntInbetween(p3,p1,multi1),dm.pntInbetween(p2,p0,multi1),dm.pntInbetween(p1,p3,multi1),dm.pntInbetween(p0,p2,multi1)] for i in range( len(coordsA) ): cor = coordsA[i] cor = rs.VectorAdd( cor, rs.VectorScale(nVec, 5.03) ) coordsA[i]=cor if i != 0: rs.AddLine( coordsI[i],coordsA[i] ) rs.ObjectPrintWidth(rs.AddCurve( coordsA, 1),0.5) else: pass #rs.AddCurve( panel, 1 ) zVal = p0[2] divi = 0.01 #dm.reMap( zVal, 4*3*3, 156-(4*3), 0.2, 0.9) p00 = dm.pntInbetween(p0, p2, divi ) p10 = dm.pntInbetween(p1, p3, divi ) p20 = dm.pntInbetween(p2, p0, divi ) p30 = dm.pntInbetween(p3, p1, divi ) coordsI=(p00,p10,p20,p30,p00) innen=rs.AddCurve(coordsI,2) rs.ObjectColor(innen,[0,0,0]) zCor=3 anz = int(dm.reMap(zCor, 0, 156, 10, 200)) coordsA = rs.DivideCurve( innen, anz , 0) ########aussenteil ab jetzt nVec = dm.normVec3pnts( p0, p1, p2) NVEC= rs.VectorScale(nVec,10) diviO=dm.reMap(zVal,4*3*3,156-12,0.15,0.5) p000 = dm.pntInbetween(p0, p2, diviO ) p001 = dm.pntInbetween(p1, p3, diviO ) p002 = dm.pntInbetween(p2, p0, diviO ) p003= dm.pntInbetween(p3, p1, diviO ) coordsA2 = [p000,p001,p002,p003,p000] for i,cor10 in enumerate(coordsA2): cor10 = coordsA2[i] cor10 = rs.VectorAdd(cor10, NVEC) coordsA2[i] = cor10 aussen = rs.AddCurve( coordsA2, 2) rs.ObjectColor(aussen,[0,0,0]) anz = 80 ### type_casting coordsAUSSEN = rs.DivideCurve( aussen, anz , 0) coordsINNEN = rs.DivideCurve( innen, anz , 0) for i in range( anz) : rs.ObjectColor(rs.AddCurve( [coordsAUSSEN[i], coordsINNEN[i]],2),[10,10,100]) if 1: for i,panel in enumerate(allPanels[0:]): dm.esc() pass rs.AddCurve( panel, 1) if 1 and panel[0][2] > -1: if random.uniform(0, 100) < 50: #myPanel_V ( panel ) myPanel(panel, basement=0) elif random.uniform(0, 100) < 50: pass myPanel_H ( panel, anzahl=20 ) if i%10==0: rs.Redraw() rs.Command("cplane W T enter", 0) if 1: for i,panel in enumerate(sidePanels[0:]): dm.esc() pass rs.AddCurve( panel, 1) if 1 and panel[0][2] > -1: if random.uniform(0, 100) < 50: #myPanel_V ( panel ) myPanel(panel, basement=0) elif random.uniform(0, 100) < 50: pass myPanel_H ( panel, anzahl=20 ) if i%10==0: rs.Redraw() rs.Command("cplane W T enter", 0) coords = rs.DivideCurve(rs.AddCurve( [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) ], 1), 11) random.shuffle(coords) #rs.AddCurve( coords, 1 ) if 0: for i,panel in enumerate(sidePanels): if i<9: basement=1 myPanel( panel, basement = basement ) for i,panel in enumerate(sidePanels): if i>8: basement=0 myPanel( panel, basement = basement ) if 0: for i,panel in enumerate(upSidePanels): if i<9: basement=1 myPanel( panel, basement = basement ) for i,panel in enumerate(sidePanels): if i>8: basement=0 myPanel( panel, basement = basement ) sunVec = dm.setSun(year=2023, mon=11, day=17, hour=17, min=32, sec=29, verbose=0) print sunVec #print dm.getDateNow() print dm.number2date(31+29) print dm.date2number(year=2023, mon=11, day=30, verbose=0) dm.printDisplay(1)