########################################### ### #WS24 DM2 HUE7_B Philipp Filipovic ### ########################################### ############################## import rhinoscriptsyntax as rs import random, time, sys ### sys.path.append("P:/WWW/filipovp/") ### 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 0: ### 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=100 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=100, minHig=12.0 ) print "::: len(allPanels)",len(allPanels) def myPanel_V ( panel, anzahl=8 ): p0,p1,p2,p3 = panel rs.AddCurve( [p0,p1,p2,p3, p0],1) #rs.AddCurve( [p0,p1,p2,p3, p0],3) crv = rs.AddLine( p0, p3) if anzahl==0: anzahl = int(rs.Distance( p0, p3 )) coords03 = rs.DivideCurve( crv, anzahl) rs.DeleteObject(crv) #rs.AddPoints( coords03 ) breite = rs.Distance( coords03[0], coords03[1]) vecHoehe = rs.VectorSubtract( p1, p0) nVec = dm.normVec3pnts( p0, p1, p2 ) nVec = rs.VectorScale( nVec, breite*2 ) nVec = rs.VectorRotate( nVec, random.uniform(-30,30), [0,0,1] ) for pX in coords03: pX0 = pX pX1 = rs.VectorAdd(pX, nVec) pX2 = rs.VectorAdd(pX1, vecHoehe) pX3 = rs.VectorAdd(pX, vecHoehe) coords = [pX0,pX1,pX2,pX3,pX0] #rs.AddLine( pX, rs.VectorAdd(pX, nVec) ) rs.AddCurve( coords, 1) def myPanel_H ( panel, anzahl=8 ): p0,p1,p2,p3 = panel #rs.AddCurve( [p1,p0,p2,p3, p1],2) #rs.AddCurve( [p0,p2,p1,p3, p0],2) #rs.AddCurve( [p0,p1,p2,p3, p0],3) crv = rs.AddLine( p0, p1) coords = rs.DivideCurve( crv, anzahl ) rs.DeleteObject(crv) untenVec = rs.VectorSubtract( p3, p0 ) for cor in coords: rs.AddLine( cor, rs.VectorAdd(cor, untenVec)) def myPanel( panel, basement = 5, auskrag = 5 ): 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, 6.111, 156, 10, 0) #auskrag abstand zur fassade nVec = rs.VectorScale( nVec, auskrag) if basement != 0: crv = rs.AddCurve( [p0, dm.pntInbetween(p0,p1), dm.pntInbetween (p1, p2), dm.pntInbetween (p2,p3), p3], 1 ) rs.ObjectPrintWidth( crv, 1 ) rs.ObjectColor( crv, [2,100,222]) else: pass #rs.AddCurve( panel ) p00 = dm.pntInbetween(p0, p2, random.uniform(.1, .3) ) p10 = dm.pntInbetween(p1, p3, random.uniform(.1, .3) ) p20 = dm.pntInbetween(p2, p0, random.uniform(.1, .3) ) p30 = dm.pntInbetween(p3, p1, random.uniform(.1, .3) ) 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], 1) for i,cor in enumerate(coords): cor = rs.VectorAdd(cor, nVec) coords[i] = cor aussen = rs.AddCurve( coords, 1) anz = int(dm.reMap(zCor, 0, 150, 550, 5)) ### type_casting print zCor, "___", anz coordsA = rs.DivideCurve( aussen, anz , 0) coordsB = rs.DivideCurve( base, anz , 0) coordsI = rs.DivideCurve( innen, anz , 0) rs.DeleteObjects( [aussen, base] ) for i in range( anz) : #rs.AddCurve( [coordsB[i], coordsA[i], coordsI[i]], 1) rs.AddCurve( [coordsB[i], coordsA[i], coordsI[i]], 2) if 1: for i,panel in enumerate(allPanels[0:]): dm.esc() pass rs.AddCurve( panel, 1) basementVar=0 if panel[0][2] == 0.0: basementVar=1 myPanel(panel, basement = basementVar, auskrag = 50 ) for i,panel in enumerate(backPanels[0:]): dm.esc() pass rs.AddCurve( panel, 1) basementVar=0 myPanel(panel, basement = basementVar, auskrag = 50 ) if 0 and panel[0][2] > -1: if random.uniform(0, 100) < 50: myPanel_V ( panel ) elif random.uniform(0, 100) < 50: myPanel_H ( panel, anzahl=8 ) 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 ) 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)