#DM2 Hausuebung 07 #Melissa Schnell #Gruppe Gruber 01 ############################## import rhinoscriptsyntax as rs import random, time, sys ### sys.path.append("P:/") ### sys.path.append("P:/WWW\kleeblaettchen04") ### import DM_lib as dm ### import math #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.ViewDisplayMode(rs.CurrentView(), "rendered") 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*7, anzH=39, anzD=3, stepL=1, 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*1, anzH=39, anzD=3, stepL=1, stepH=6, stepD=1) ### = 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,240]) print "***\n*** check RHINO 8 SAMMEL-BESTELLUNG / via FakArch / @ https://workdrive.zohopublic.eu/writer/open/8243091847f125bad45ba9abb31e1e1733f3e\n***\n" if 0: ### 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], 1.0 ) rs.ZoomExtents() #for coords in BigPanelCoords[4]: rs.AddCurve( coords, 1 ) if 0: ### DEMO >> dont' exec @ homework ! print "len(frontPanels) =", len(frontPanels) dm.textDots( frontPanels[0] ) for coords in frontPanels[0:20]+sidePanels[6:]: pass rs.AddPoints( coords ) rs.AddCurve( coords, 1 ) #rs.AddSrfPt( coords ) #for coords in sidePanels[0:]: # rs.AddPoints( coords ) for coords in BigPanelCoords[1][5:]: pass coords[-1]=coords[random.randint(0,3)] rs.ObjectColor( rs.AddCurve( coords, degree=random.randint(1,3) ), [0,100,0]) rs.Redraw() if 0: ### DEMO >> dont' exec @ homework ! #############: ### panel_DEF: def myPanel( panel, basement = 0 ): p0, p1, p2, p3 = panel ### get items (==coords) from list rs.AddLine( p0, p2 ) if basement: crv = rs.AddCurve( [p0, p1, dm.pntInbetween(p1, p3), p2, p3], 1 ) rs.ObjectPrintWidth( crv, 10.5 ) rs.ObjectColor( crv, [200,220,0]) else: rs.AddCurve( panel ) for i,panel in enumerate(frontPanels[:]+sidePanels): pass basementVal = 0 if i<20 or (i>=130 and i<136): basementVal = 1 rs.Redraw() myPanel( panel, basement=basementVal ) ### or: basement=(i<20 or i>=130 and i<136) #_____________________________here you go: dm.newEmptyLayer("myPROJ", [0,0,0]) ### Vorderseite Paneele definieren targetPts_Front = [[700,700,20],[600,500,200]] def Front_Panels( Panel , basement = 0): p0,p1,p2,p3 = Panel crv = rs.AddCurve([p0,p1,p2,p3,p0],1) coords = [] targetPt = random.choice(targetPts_Front) center = dm.pntInbetween(p0,p2,0.5) nVec = dm.normVec3pnts( p0, p1, p2) nVec = rs.VectorSubtract(targetPt,center) nVec = rs.VectorUnitize(nVec) zCor = p0[2] overhang = dm.reMap(zCor, 0, 156, random.uniform(15.0, 1.0),random.uniform(7.5, 1.0)) ###verschiedene Tiefen beim Fenster nVec = rs.VectorScale( nVec, overhang) if basement != 0: #overhang_basement = 0 crv_basement = rs.AddCurve( [p0, p1, dm.pntInbetween(p1, p3), p2, p3, dm.pntInbetween(p0, p2), p0], 1 ) rs.ObjectPrintWidth( crv_basement, 1 ) rs.ObjectColor(crv_basement, [0,0,0]) else: pass #rs.AddCurve( panel ) p00 = dm.pntInbetween(p0, p2, random.uniform(0.1, 0.35) ) ###Fenster p10 = dm.pntInbetween(p1, p3, random.uniform(0.1, 0.35) ) p20 = dm.pntInbetween(p2, p0, random.uniform(0.1, 0.35) ) p30 = dm.pntInbetween(p3, p1, random.uniform(0.1, 0.35) ) rs.AddLine( p0, p1 ) coords = [p00, p10, p20, p30, p00] base = rs.AddCurve( [p0, p1, p2, p3, p0], 3) innen = rs.AddCurve( [p00, p10, p20, p30, p00], 3) for i,cor in enumerate(coords): cor = rs.VectorAdd(cor, nVec) coords[i] = cor aussen = rs.AddCurve( coords, 2) anz = int(dm.reMap(zCor, 0, 156, 255, 10)) coordsA = rs.DivideCurve( aussen, anz , 0) coordsB = rs.DivideCurve( base, anz , 0) fensterrahmen = rs.AddCurve(coordsA, 1) rs.ObjectColor(fensterrahmen, [0,0,0]) rs.ObjectPrintWidth(fensterrahmen, 1) wandanschluss = rs.AddCurve(coordsB, 1) rs.ObjectColor(wandanschluss, [0,0,0]) rs.ObjectPrintWidth(wandanschluss, 1) for i in range( anz) : col = int(dm.reMap(i, 0, anz-1, 0, 255, limit=1)) windows = rs.AddCurve( [coordsA [i], coordsB[i]]) ###tiefe fenster rs.ObjectColor(windows, [random.randint(100,250), random.randint(100,250), random.randint(100,250)]) rs.ObjectColor(windows, [col, 50, 255-col]) ###basement = 1 floor for i,panel in enumerate(frontPanels): basementVal = 0 if i<10: basementVal = 1 rs.Redraw() Front_Panels( panel, basement=basementVal) ### Rueckseite Paneele definieren targetPts_Back =[[4000,900,0], [3500,500,200]] def Back_Panels( Panel , basement = 0): p0,p1,p2,p3 = Panel crv = rs.AddCurve([p0,p1,p2,p3,p0],1) coords = [] targetPt = random.choice(targetPts_Back) center = dm.pntInbetween(p0,p2,0.5) nVec = dm.normVec3pnts( p0, p1, p2) nVec = rs.VectorSubtract(targetPt,center) nVec = rs.VectorUnitize(nVec) zCor = p0[2] overhang = dm.reMap(zCor, 0, 156, random.uniform(15.0, 1.0),random.uniform(7.5, 1.0)) ###verschiedene Tiefen beim Fenster nVec = rs.VectorScale( nVec, overhang) if basement != 0: #overhang_basement = 0 crv_basement = rs.AddCurve( [p0, p1, dm.pntInbetween(p1, p3), p2, p3, dm.pntInbetween(p0, p2), p0], 1 ) rs.ObjectPrintWidth( crv_basement, 1 ) rs.ObjectColor(crv_basement, [0,0,0]) else: pass #rs.AddCurve( panel ) p00 = dm.pntInbetween(p0, p2, random.uniform(0.1, 0.35) ) ###Fenster p10 = dm.pntInbetween(p1, p3, random.uniform(0.1, 0.35) ) p20 = dm.pntInbetween(p2, p0, random.uniform(0.1, 0.35) ) p30 = dm.pntInbetween(p3, p1, random.uniform(0.1, 0.35) ) rs.AddLine( p0, p1 ) coords = [p00, p10, p20, p30, p00] base = rs.AddCurve( [p0, p1, p2, p3, p0], 3) innen = rs.AddCurve( [p00, p10, p20, p30, p00], 3) for i,cor in enumerate(coords): cor = rs.VectorAdd(cor, nVec) coords[i] = cor aussen = rs.AddCurve( coords, 2) anz = int(dm.reMap(zCor, 0, 156, 255, 10)) coordsA = rs.DivideCurve( aussen, anz , 0) coordsB = rs.DivideCurve( base, anz , 0) fensterrahmen = rs.AddCurve(coordsA, 1) rs.ObjectColor(fensterrahmen, [0,0,0]) rs.ObjectPrintWidth(fensterrahmen, 1) wandanschluss = rs.AddCurve(coordsB, 1) rs.ObjectColor(wandanschluss, [0,0,0]) rs.ObjectPrintWidth(wandanschluss, 1) for i in range( anz) : col = int(dm.reMap(i, 0, anz-1, 0, 255, limit=1)) windows = rs.AddCurve( [coordsA [i], coordsB[i]]) ###tiefe fenster rs.ObjectColor(windows, [random.randint(100,250), random.randint(100,250), random.randint(100,250)]) rs.ObjectColor(windows, [col, 50, 255-col]) for i,panel in enumerate(backPanels): basementVal = 0 if i<10: basementVal = 1 rs.Redraw() Back_Panels( panel, basement=basementVal) ### Seiten Paneele rechts definieren targetPts_Side = [[1000,200,0], [700,100,300]] def Side_Panels( Panel , basement = 0 ): p0,p1,p2,p3 = Panel crv = rs.AddCurve([p0,p1,p2,p3,p0],1) coords = [] targetPt = random.choice(targetPts_Side) center = dm.pntInbetween(p0,p2,0.5) nVec = dm.normVec3pnts( p0, p1, p2) nVec = rs.VectorSubtract(targetPt,center) nVec = rs.VectorUnitize(nVec) zCor = p0[2] overhang = dm.reMap(zCor, 0, 156, random.uniform(7.5, 1.0),random.uniform(1.5, 1.0)) ###verschiedene Tiefen beim Fenster nVec = rs.VectorScale( nVec, overhang) if basement != 0: #overhang_basement = 0 crv_basement = rs.AddCurve( [p0, p1, dm.pntInbetween(p1, p3), p2, p3, dm.pntInbetween(p0, p2), p0], 1 ) rs.ObjectPrintWidth( crv_basement, 1 ) rs.ObjectColor(crv_basement, [0,0,0]) else: pass #rs.AddCurve( panel ) p00 = dm.pntInbetween(p0, p2, random.uniform(0.1, 0.35) ) ###Fenster p10 = dm.pntInbetween(p1, p3, random.uniform(0.1, 0.35) ) p20 = dm.pntInbetween(p2, p0, random.uniform(0.1, 0.35) ) p30 = dm.pntInbetween(p3, p1, random.uniform(0.1, 0.35) ) rs.AddLine( p0, p1 ) coords = [p00, p10, p20, p30, p00] base = rs.AddCurve( [p0, p1, p2, p3, p0], 3) innen = rs.AddCurve( [p00, p10, p20, p30, p00], 3) for i,cor in enumerate(coords): cor = rs.VectorAdd(cor, nVec) coords[i] = cor aussen = rs.AddCurve( coords, 2) anz = int(dm.reMap(zCor, 0, 156, 255, 10)) coordsA = rs.DivideCurve( aussen, anz , 0) coordsB = rs.DivideCurve( base, anz , 0) fensterrahmen = rs.AddCurve(coordsA, 1) rs.ObjectColor(fensterrahmen, [0,0,0]) rs.ObjectPrintWidth(fensterrahmen, 1) wandanschluss = rs.AddCurve(coordsB, 1) rs.ObjectColor(wandanschluss, [0,0,0]) rs.ObjectPrintWidth(wandanschluss, 1) for i in range( anz) : col = int(dm.reMap(i, 0, anz-1, 0, 255, limit=1)) windows = rs.AddCurve( [coordsA [i], coordsB[i]]) ###tiefe fenster rs.ObjectColor(windows, [random.randint(100,250), random.randint(100,250), random.randint(100,250)]) rs.ObjectColor(windows, [col, 50, 255-col]) for i,panel in enumerate(sidePanels): basementVal = 0 if i<3: basementVal = 1 rs.Redraw() Side_Panels( panel, basement=basementVal ) ### Seiten Paneele links definieren targetPts_upSide = [[1000,1000,0], [700,1300,300]] def upSide_Panels( Panel , basement = 0 ): p0,p1,p2,p3 = Panel crv = rs.AddCurve([p0,p1,p2,p3,p0],1) coords = [] targetPt = random.choice(targetPts_upSide) center = dm.pntInbetween(p0,p2,0.5) nVec = dm.normVec3pnts( p0, p1, p2) nVec = rs.VectorSubtract(targetPt,center) nVec = rs.VectorUnitize(nVec) zCor = p0[2] overhang = dm.reMap(zCor, 0, 156, random.uniform(7.5, 1.0),random.uniform(1.5, 1.0)) ###verschiedene Tiefen beim Fenster nVec = rs.VectorScale( nVec, overhang) if basement != 0: #overhang_basement = 0 crv_basement = rs.AddCurve( [p0, p1, dm.pntInbetween(p1, p3), p2, p3, dm.pntInbetween(p0, p2), p0], 1 ) rs.ObjectPrintWidth( crv_basement, 1 ) rs.ObjectColor(crv_basement, [0,0,0]) else: pass #rs.AddCurve( panel ) p00 = dm.pntInbetween(p0, p2, random.uniform(0.1, 0.35) ) ###Fenster p10 = dm.pntInbetween(p1, p3, random.uniform(0.1, 0.35) ) p20 = dm.pntInbetween(p2, p0, random.uniform(0.1, 0.35) ) p30 = dm.pntInbetween(p3, p1, random.uniform(0.1, 0.35) ) rs.AddLine( p0, p1 ) coords = [p00, p10, p20, p30, p00] base = rs.AddCurve( [p0, p1, p2, p3, p0], 3) innen = rs.AddCurve( [p00, p10, p20, p30, p00], 3) for i,cor in enumerate(coords): cor = rs.VectorAdd(cor, nVec) coords[i] = cor aussen = rs.AddCurve( coords, 2) anz = int(dm.reMap(zCor, 0, 156, 255, 10)) coordsA = rs.DivideCurve( aussen, anz , 0) coordsB = rs.DivideCurve( base, anz , 0) fensterrahmen = rs.AddCurve(coordsA, 1) rs.ObjectColor(fensterrahmen, [0,0,0]) rs.ObjectPrintWidth(fensterrahmen, 1) wandanschluss = rs.AddCurve(coordsB, 1) rs.ObjectColor(wandanschluss, [0,0,0]) rs.ObjectPrintWidth(wandanschluss, 1) for i in range( anz) : col = int(dm.reMap(i, 0, anz-1, 0, 255, limit=1)) windows = rs.AddCurve( [coordsA [i], coordsB[i]]) ###tiefe fenster rs.ObjectColor(windows, [random.randint(100,250), random.randint(100,250), random.randint(100,250)]) rs.ObjectColor(windows, [col, 50, 255-col]) for i,panel in enumerate(upSidePanels): basementVal = 0 if i<3: basementVal = 1 rs.Redraw() upSide_Panels( panel, basement=basementVal ) #____________________________:here you end ################################# #rs.ZoomExtents() rs.EnableRedraw(1) ### 4 the MACs dm.printDisplay(1) dm.newEmptyLayer("Default")