############################# import rhinoscriptsyntax as rs import random, time, sys ### sys.path.append("P:/WWW/ortii/DM2") ### 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) dm.eA() ###_________________________________________# ### 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, anzH=20, 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,240]) 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], 1.0 ) #rs.ZoomExtents() #for coords in BigPanelCoords[4]: rs.AddCurve( coords, 1 ) if 0: ### DEMO >> dont' exec @ homework ! print len(frontPanels) dm.textDots( frontPanels[0] ) for coords in frontPanels[0:10]+sidePanels: pass rs.AddPoints( coords ) rs.AddCurve( coords, 1 ) #rs.AddSrfPt( coords ) #for coords in sidePanels[0:]: # rs.AddPoints( coords ) for coords in BigPanelCoords[4]: pass rs.AddCurve( coords, 1 ) 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, 1 ) rs.ObjectColor( crv, [200,0,0]) else: coords = [p0, p1, p2, p3, p0] rs.AddCurve( coords, 2 ) for i,panel in enumerate(frontPanels[0:50] + sidePanels): pass basement = 0 if i<20 or i>119: basement = 1 myPanel( panel, basement = basement ) ### basement = (i<20 or i>109) #rs.Redraw() #_____________________________here you go: dm.newEmptyLayer("UNO::setUp", [120, 120, 140]) #def colors_(): # return [[r, g, b] for r in range(0, 256, 4) for g in range(0, 256, 4) for b in range(0, 256, 4)] ###chatgpt nach hilfe gefragt def color_brightness(color): ##berechnet die helligkeit eines RGB-wertes return 0.1 * color[0] + 0.1 * color[1] + 0.1* color[2] def myPanel(panel, basement=0, auskrag=5): p0, p1, p2, p3 = panel nVec = dm.normVec3pnts(p0, p1, p2) zCor = p0[2] auskrag = dm.reMap(zCor, 0, 100, 0, 7.0) nVec = rs.VectorScale(nVec, auskrag) if basement != 0: p0x = dm.pntInbetween(p0, p2, 0.0) p1x = dm.pntInbetween(p1, p3, 0.1) p2x = dm.pntInbetween(p2, p0, 0.1) p3x = dm.pntInbetween(p3, p1, 0.0) rnd1 = rs.AddCurve([p0, p1, p2, p3], 0) basecoords = [p0x, p1x, p2x, p3x] basecrv = rs.AddCurve([p0x, p1x, p2x, p3x], 0) rs.ObjectPrintWidth(basecrv, 0.2) rs.ObjectPrintWidth(rnd1, 0.2) rs.ObjectColor(basecrv, [186, 32, 44]) for i, cor in enumerate(basecoords): cor = rs.VectorAdd(cor, nVec) basecoords[i] = cor aussen1 = rs.AddCurve(basecoords, 2) rs.ObjectColor(aussen1, [186, 32, 44]) rs.ObjectPrintWidth(aussen1, 0.2) anz1 = int(dm.reMap(zCor, 10, 156, 100, 40)) basecoordsA = rs.DivideCurve(aussen1, anz1, 0) basecoordsB = rs.DivideCurve(rnd1, anz1, 0) for i in range(anz1): crv1 = rs.AddCurve([basecoordsA[i], basecoordsB[i]], 0) rs.ObjectColor(crv1, [186, 32, 44]) else: p00 = dm.pntInbetween(p0, p2, 0.2) p10 = dm.pntInbetween(p1, p3, 0.1) p20 = dm.pntInbetween(p2, p0, 0.2) p30 = dm.pntInbetween(p3, p1, 0.1) coords = [p00, p10, p20, p30, p00] rnd = rs.AddCurve([p0, p1, p2, p3, p0], 1) fenster = 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, 2) anz = int(dm.reMap(zCor, 10, 156, 100, 40)) coordsA = rs.DivideCurve(aussen, anz, 0) # colors = generate_all_colors() # anz = len(colors) # Punktanzahl entspricht der Anzahl der Farben # coordsA = rs.DivideCurve(aussen, anz, 0) # # for i, pntA in enumerate(coordsA): # point = rs.AddPoint(pntA) color_pnts = [] for points in coordsA: pntA = rs.AddPoint(points) color_pnt = [random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)] rs.ObjectColor(pntA, color_pnt) # color_pnt.sort() #habe zuerst verscuht, das sortieren so oder ueber listen zu machen, habs aber nicht geschafft color_pnts.append((pntA, color_pnt)) color_pnts.sort(key=lambda x: color_brightness(x[1])) coordsB = rs.DivideCurve(rnd, anz, 0) for i in range(anz): rs.AddCurve([coordsA[i], coordsB[i]], 0) for i, panel in enumerate(allPanels): basementVar = 0 if i < 5: basementVar = 1 myPanel(panel, basement=basementVar, auskrag=0) rs.EnableRedraw(1) # Enable redraw for Rhino dm.printDisplay(1) dm.newEmptyLayer("Default") rs.ZoomExtents() #for i in range(10): # rs.AddCurve( frontPanels[i], 1 ) # rs.AddCurve( frontPanels[i+20], 1 ) # #dm.textDots( frontPanels[3] ) ##rs.AddSrfPt( frontPanels[3] ) #:here you end #################################