################################### ### DM2_w24 # AGruber@tugraz.at ### ### ue_05 UN_headquaters NYC ### ################################### ############################## import rhinoscriptsyntax as rs import random, time, sys ### sys.path.append("P:/") sys.path.append("P:/WWW\kleeblaettchen04") ### 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(0) # nomen est omen rs.EnableRedraw(0) ### MAC >> uncomment ! ###_________________________________________# ### basic settings for grid to fit UN_slab # ### # ! no need 2 change ! 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 gridCoords L*D*H = 1760 UnoGridCoords = dm.getUnoGridCoords() # get from DM_lib as dm #################___________________________# dm.newEmptyLayer("UNO::setUp::points", [150,150,200]) dm.newEmptyLayer("UNO::setUp::geo", [150, 20,150]) dm.newEmptyLayer("UNO::setUp::crv", [200, 100, 100]) dm.newEmptyLayer("UNO::setUp", [120,120,140]) ################## depthVec = dVec = rs.VectorUnitize(rs.VectorSubtract( dm.getUnoCoord(0, 0, 0), dm.getUnoCoord(0, 2, 0) )) lengthVec = lVec = rs.VectorUnitize(rs.VectorSubtract( dm.getUnoCoord(0, 0, 0), dm.getUnoCoord(1, 0, 0) )) ################## if 1: ### SETUP >> dont' exec @ homework ! if 1: # rs.AddLine( dm.getUnoCoord(0, 0, 0), dm.getUnoCoord(1, 0, 0) ) # rs.AddLine( dm.getUnoCoord(0, 0, 0), dm.getUnoCoord(0, 1, 0) ) # rs.AddLine( dm.getUnoCoord(0, 0, 0), dm.getUnoCoord(0, 0, 1) ) # rs.ObjectColor(rs.AllObjects()[1], [0, 222, 0] ) # rs.ObjectColor(rs.AllObjects()[2], [222, 0, 0] ) # rs.ObjectColor(rs.AllObjects()[0], [0, 0, 222] ) # rs.ObjectPrintWidth( rs.AllObjects()[0:3], 1.0 ) p0 = dm.getUnoCoord( 0, 0, 0) p1 = dm.getUnoCoord( 10, 0, 0) p2 = dm.getUnoCoord( 10, 3, 0) p3 = dm.getUnoCoord( 0, 3, 0) unoBaseCoords = [p0, p1, p2, p3, p0] unoBaseCrv = rs.AddCurve( unoBaseCoords, 1) unoTopCoords = [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), ] unoTopCrv = rs.AddCurve( unoTopCoords, 1) rs.ZoomExtents() #_____________________________here you go: ################# ##### demoCoaster ################# dm.newEmptyLayer("myPROJ", [100,100,100]) ###Rollercoaster def IndoorRollercoaster(anz = 100, circDiv = 50 , rad = 2, makeAll = 2, crvDeg = 3, delCircs = 1, anzPts = 1): Coords = [] p0 = rs.VectorAdd( dm.getUnoCoord( 0, 0, 10 ), rs.VectorScale(lVec, 10) ) Coords = [p0] counter = 0 for h in range(0, H, 2): counter = counter+1 if counter%4 == 0: cor = rs.VectorAdd(dm.getUnoCoord( int((L-1)/2), 0, h ), rs.VectorScale(dVec, random.uniform(0,50))) if counter%4 == 1: cor = dm.getUnoCoord( L-1, int((D-1)/2), h ) if counter%4 == 2: cor = rs.VectorAdd(dm.getUnoCoord( int((L-1)/2), D-1, h ), rs.VectorScale(dVec, random.uniform(0,50)*-1)) if counter%4 == 3: cor = dm.getUnoCoord( 0, int((D-1)/2), h ) Coords.append(cor) Coords.append(Coords[0]) crv = rs.AddCurve(Coords, 2) rs.ObjectColor(crv, [255,255,255]) rs.ObjectPrintWidth(crv, 0.01) domain = rs.CurveDomain(crv)[1] deltaAng = 360/circDiv allCoords = [] for p in range(0, anz+1): fac = p/anz coord = rs.EvaluateCurve( crv, domain*fac ) para = rs.CurveClosestPoint(unoBaseCrv, coord) coordOnCrv = rs.EvaluateCurve( unoBaseCrv, para ) if makeAll == 2 and p%7==0 : #stuetzen und stuetzenanzahl pass stuetzen = rs.AddCurve( [coord, coordOnCrv ] ) rs.ObjectColor(stuetzen, [0,255,255]) #stuetzenfarbe rs.ObjectPrintWidth(stuetzen, 0.5) #stuetzenstaerke planeX = rs.CurvePerpFrame( crv, domain*fac ) vecXY = dm.vecCurvePerpXY( crv, domain*fac ) #damit es parallel zur XY Ebene liegt tanX = rs.CurveTangent( crv, domain*fac ) if p==0: tanS = tanX if p==anz: tanE = tanX #vecXY = rs.VectorScale(vecXY, rad) #crvXY = rs.AddLine( coord, rs.VectorAdd(coord, vecXY) ) ### horizontal !!! #rs.ObjectColor( crvXY, [0,200,0]) #rs.ObjectColor( rs.AddLine( planeX[0], rs.VectorAdd(planeX[0], rs.VectorScale(tanX, rad)) ), [0,0,222]) #rs.ObjectColor( rs.AddLine( planeX[0], rs.VectorAdd(planeX[0], rs.VectorScale(planeX[1], rad)) ), [222,0,0]) coords = [] for j in range( int(circDiv*0.5)*2 ): if not delCircs: rs.AddLine( coord, rs.VectorAdd(coord, rs.VectorRotate(vecXY, deltaAng*j, tanX) )) coords.append( rs.VectorAdd(coord, rs.VectorRotate(vecXY, deltaAng*j, tanX) ) ) if not delCircs: circ = rs.AddCurve( coords, 1 ) allCoords.append( coords ) #rs.AddCurve( coords[0:-1], 1 ) if makeAll: for list in allCoords: aussteifung = rs.AddCurve(list[0:3], 1 ) #aussteifungen einfuegen rs.ObjectColor(aussteifung, [0,255,255]) rs.ObjectPrintWidth(aussteifung, 1) for i in range(0, anzPts ): coords = [] for circList in allCoords: coords.append( circList[i] ) if makeAll == 1: rs.ObjectColor(rs.AddCurve(coords, degree=crvDeg), [0,255,255] ) if makeAll == 2: crv = rs.AddInterpCurve(coords, degree=crvDeg, knotstyle=3) ##rs.AddInterpCurve(points, degree=3, knotstyle=0, start_tangent=None, end_tangent=None if i==1: rs.ObjectColor( crv, [0,255,255]) #stuetzcurve rs.ObjectPrintWidth( crv, 1) if i==0: rs.ObjectColor( crv, [255,0,255]) #schiene 01 rs.ObjectPrintWidth( crv, 0.5) if i==2: rs.ObjectColor( crv, [255,0,255]) #schiene 02 rs.ObjectPrintWidth( crv, 0.5) if i%2==0: rs.Redraw() anzPoints = len(rs.ObjectsByType(1)) print "anzPoints", anzPoints rs.CurrentLayer("UNO::setUp::crv") circDiv = 4 IndoorRollercoaster( anz = 128, circDiv = circDiv, rad = 3.5, makeAll = 2, crvDeg = 3, delCircs = 1, anzPts=int(circDiv*0.5)+1 ) ###Fassade if 0: Fassade_anz= 100 Fassade_coords_U = rs.DivideCurve(unoBaseCrv, Fassade_anz) Fassade_coords_O = rs.DivideCurve(unoTopCrv, Fassade_anz) Fassade_coords_O += Fassade_coords_O for i in range(Fassade_anz): p1 = Fassade_coords_U[i] p2 = Fassade_coords_O[i+int(Fassade_anz*1)] Fassade = rs.AddLine( p1, p2 ) rs.ObjectColor(Fassade, [random.randint(200,250), random.randint(200,250), random.randint(200,250)]) #____________________________:here you end ################################### ################################### #dm.zA( proz=0.95 ) rs.EnableRedraw(1) ### 4 the MACs dm.printDisplay(1) dm.newEmptyLayer("Default")