############################## import rhinoscriptsyntax as rs import random, time, sys ### sys.path.append("P:\WWW\selvo") ### 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*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=3, stepD=2) ### = standard for hu_06 #step fur kleiner panels anzL oder (stepH = 3, ein panel ist 3 geschose hoch) ########################################################################################### ########################################################## frontPanels = UnoPanelCoords[0] ### list of coordLists ! backPanels = UnoPanelCoords[1] UnoPanelCoords = dm.getUNpanelCoords(anzL=10*2, anzH=39, anzD=3, stepL=1, stepH=3, stepD=1) ### = standard for hu_06 #step fur kleiner panels anzL oder (stepH = 3, ein panel ist 3 geschose hoch) sidePanels = UnoPanelCoords[2] upSidePanels = UnoPanelCoords[3] allPanels = UnoPanelCoords[4] ################################# dm.newEmptyLayer("UNO::setUp", [120,120,240]) 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), [0,0,0]) 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 ) ############################################# ##################Uebung 06################## ############################################# #for list in frontPanels: # rs.AddCurve( list, 1) # #dm.textDots( frontPanels[0] ) #dm.textDots( frontPanels[13] ) # #rs.AddSrfPt( frontPanels[13] ) if 0: ### DEMO >> dont' exec @ homework ! ######demo fuer versch. panel groesen 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 1: ### DEMO >> dont' exec @ homework ! #dm.textDots( frontPanels[25] ) #############: ### panel_DEF: ###definition remap notieren def myPanel( panel, basement = 0, 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 = random.randint( 5.0 , 15.0 ) nVec = rs.VectorScale( nVec, auskrag) ######basement###### if basement != 0: p0plus = rs.VectorAdd(p0, lVec*-1) p01 = dm.pntInbetween(p0,p1) p12 = dm.pntInbetween(p1,p2) p23 = dm.pntInbetween(p2,p3) p3minus = rs.VectorAdd(p3, lVec) crv = rs.AddCurve( [p0plus, p01, p12, p23, p3minus], 2) rs.ObjectPrintWidth( crv, 1 ) rs.ObjectColor( crv, [200,0,0]) else: #####Modul Aussenwand##### pass #rs.AddCurve( panel ) p00 = dm.pntInbetween(p0, p2, 0.1 ) p10 = dm.pntInbetween(p1, p3, 0.1 ) p20 = dm.pntInbetween(p2, p0, 0.1 ) p30 = dm.pntInbetween(p3, p1, 0.1 ) 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 = 72 ### type_casting coordsA = rs.DivideCurve( aussen, anz , 0) coordsB = rs.DivideCurve( innen, anz , 0) for i in range( anz) : Mod = rs.AddCurve( [coordsA[i], coordsB[i]], 1) rs.ObjectColor( Mod, [random.randint(50,100), random.randint(50,100), random.randint(50,100)]) rs.DeleteObject( innen ) #####Hintere Fassade##### coordsC = rs.DivideCurve( base, anz, 0) for j in range ( anz ): Fass = rs.AddCurve( [coordsB[j], coordsC[j]], 1) rs.ObjectColor( Fass, [0, 0, 0]) #######fenster###### #fenmid = rs.CurveAreaCentroid( aussen )[0] #CHATGPT - Mittelpunkt fenster fenplane = rs.CurvePlane( aussen ) fen = rs.AddCircle( fenplane, 4) fenmid = rs.CurveAreaCentroid( aussen )[0] transvec = p20 - (dm.pntInbetween(p00, p20, 0.5)) rs.MoveObject(fen, transvec) #rs.RotateObject(fen , fenmid , 90 , axis=lVec) #rotiert auf richtige plane rs.RotateObject(fen , fenmid , 225 , axis=nVec) # rotiert um verbindungen mit aussen nicht zu ueberschneiden HeightScale = [ dm.reMap(zCor, 0, 156, 0.2, 1.1) , dm.reMap(zCor, 0, 156, 0.2, 1.1) , dm.reMap(zCor, 0, 156, 0.2, 1.1)] rs.ScaleObject( fen , fenmid , HeightScale ) # nach oben hin groesser coordsfen = rs.DivideCurve(fen, anz, 0) coordsAA = rs.DivideCurve( aussen, anz , 0) #hat iwie originale coordsA nicht angenommen for k in range( anz ): fenwand = rs.AddCurve( [coordsAA[k], coordsfen[k]], 1) rs.ObjectColor( [fenwand, fen, aussen], [random.randint(50,100), random.randint(50,100), random.randint(50,100)]) #######Seiten ausgeschaltet fuer schnelle generation####### for i,panel in enumerate(frontPanels[:]): #+backPanels #+sidePanels+upSidePanels): pass basementVar = 0 if i<10:# or i>109: ###wenn i unter 20 dann wird das aktiviert basementVar = 1 myPanel( panel, basement = basementVar, auskrag = 50 ) # basement = (i<20 or i>109) #rs.Redraw() #_____________________________here you go: dm.newEmptyLayer("myPROJ", [200,100,200]) #____________________________:here you end ################################# #rs.ZoomExtents() rs.EnableRedraw(1) ### 4 the MACs dm.printDisplay(1) dm.newEmptyLayer("Default")