################################### ### DM2_w24 # AGruber@tugraz.at ### ### hu_08 finale ### ################################### ############################## import rhinoscriptsyntax as rs import random, time, sys ### import math import os sys.path.append("P:/") ### sys.path.append("C:/Users/annas/OneDrive/Dokumente/uni-dokumente/dm2/") sys.path.append("D:/dm2/") import DM_lib as dm #reload( dm ) ############################## rs.UnitSystem(4) # km = 5, meters = 4, cm = 3 etc rs.EnableRedraw(0) dm.printDisplay(1) rs.CurrentView(view="Perspective", return_name=True) rs.ViewDisplayMode(rs.CurrentView(), "rendered") dm.getCameraTarget() dm.setCameraTarget( [31814.8827683, 24918.5319702, 328.01179314], [33309.2213129, 27570.4768867, 184.45130201], lens=50.0, rota=0, upVec=[0.02312681190534399,0.04104226012737455,0.9988897253724917] ) # ... danke, andi ! cam = [31814.8827683, 24918.5319702, 1000]#328.01179314] tar = [33309.2213129, 27570.4768867, 184.45130201] camVec = rs.VectorSubtract(cam, tar) deltaAngle = 180/315 cam = rs.VectorAdd(tar, camVec) zoomStart = zoom = 40 zoomEnd = 80 deltaZoom = (zoomEnd-zoomStart)/315 dm.setCameraTarget(cam, tar, lens = 50, rota = 0, upVec=[0.02312681190534399,0.04104226012737455,0.9988897253724917]) #####finale start###### dm.newEmptyLayer("OSM") rs.LayerVisible("OSM", 1) dm.newEmptyLayer("URANI", [100,100,200]) dm.printDisplay(0) rs.EnableRedraw(0) if 0: id = rs.ObjectsByName("_bldg3D_higBy_hig_1022844779")[0] Uranicoords = [] coords= dm.getSurfacePoints(id) rs.LayerVisible("OSM", 0) #dm.textDots(coords) umrissUrania = rs.AddCurve( coords, 1 ) ###Umriss urania centerUrania = dm.pntCentroid(coords) ###mittelpunkt urania rs.AddPoint(centerUrania) Uranicoords.append([coords]) dm.exportCoordLists(list2export=[coords], exportedListName='allCoords_urani', path='C:/Users/annas/OneDrive/Dokumente/uni-dokumente/dm2/', fileName='Urania_coords') from Urania_coords import allCoords_urani coords = allCoords_urani[0] #rs.AddPoints(Urania_coords) umrissUrania = rs.AddCurve( coords, 1 ) rs.ObjectColor(umrissUrania, [0,0,110]) centerUraniaM = dm.pntCentroid(coords) centerUrania = [centerUraniaM[0], centerUraniaM[1], 0] #rs.AddPoint(centerUrania) targets = [ rs.VectorAdd(centerUrania, [random.uniform(-30,30),random.uniform(-15,20),random.uniform(0,20)] ) for i in range(1001) ] ###Mittelpunkt + random Vec ergibt target #rs.AddPoints( targets ) ### folder fuer animatzi_images path = "C:/Users/annas/Documents/dm2/"#"C:/Users/annas/OneDrive/Dokumente/uni-dokumente/dm2"#"D:/animatzi/meteos/" if not os.path.exists(path): os.makedirs(path) meteoriten = [] bahnen = [] schweife = [] ############################## framNr = 0 allBahnCoords = [] anzMet = random.randint(20, 40) anzFrames = 100#50#250 captureIt = 0 deltaZ = dZ = 5/anzMet divY = 20 divX = 15 min_distance = 5 max_distance = 25 def MakeMeteo(metPt, mSize=25): meteoritCoords = [] for i in range(80): vecX = dm.randVec(-mSize, mSize) corX = rs.VectorAdd(metPt, vecX) meteoritCoords.append(corX) meteorit = rs.AddCurve(meteoritCoords, 2) rs.ObjectColor(meteorit, [102,102,102]) rs.ObjectName(meteorit, "meteo_meteorit_"+str(m)) ###Meteo flachdruecken pos = rs.CurveStartPoint(meteorit) if pos[2] <= 20.5: stauchung = random.uniform(0.1,0.5) rs.ScaleObject(meteorit,metPt, [1.5, 1.5, stauchung]) ###Tangente auf Bahn for bahn in rs.ObjectsByName("bahn_*"): #print bahn param = rs.CurveClosestPoint(bahn, metPt) ptBahn = rs.EvaluateCurve(bahn, param ) dist = rs.Distance( metPt, ptBahn ) #print dist if dist < 0.00001: tan = rs.CurveTangent(bahn, param) schweif = rs.AddLine( metPt, rs.VectorAdd(metPt, rs.VectorScale(tan, -random.uniform(200,500))) ) ###Koma coordsKoma = rs.DivideCurve(schweif, divY, 0) #rs.DeleteObject(schweif) SchweifPt = rs.AddPoints(coordsKoma) rs.ObjectName(SchweifPt, "schweif_"+str(m)) rs.ObjectColor(SchweifPt, [200,200,0]) for i in range(len(coordsKoma)): auskrag = dm.reMap(i, 0, len(coordsKoma)-1, max_distance, min_distance) ####auskragen mithilfe von Chatgpt KomaVec = rs.VectorAdd(coordsKoma[i], [0,0, random.uniform(-auskrag, auskrag)]) Koma = rs.AddPoint(KomaVec) rs.ObjectName(Koma, "koma_"+str(m)) rs.ObjectColor(Koma, [200,200,0]) ###zusaetzliche Punkte um Koma auszufuellen coordsKomaZusatz = rs.DivideCurve(schweif, divX, 0) rs.DeleteObject(schweif) for i in range(len(coordsKomaZusatz)): auskragAdd = dm.reMap(i, 0, len(coordsKomaZusatz)-1, max_distance, min_distance) KomaVecAdd = rs.VectorAdd(coordsKomaZusatz[i], [0,0, random.uniform(-auskrag, auskrag)]) KomaAdd = rs.AddPoint(KomaVecAdd) rs.ObjectName(KomaAdd, "koma_add_"+str(m)) rs.ObjectColor(KomaAdd, [200,200,0]) #break for i in range(anzMet): tar = random.choice(targets) tar[2]= i*dZ #rs.AddPoint( tar ) pOben = rs.VectorAdd(tar, [0,0, random.uniform(200,500)] ) pStart= rs.VectorAdd(pOben, [random.uniform(-100,2000),random.uniform(-100,2000),random.uniform(100,500)] ) ### nord_ost kometBahnCoords = [pStart, pOben, tar ] bahn = rs.AddCurve( kometBahnCoords, 2) ###Flugbahn rs.HideObject(bahn) rs.ObjectColor(bahn, [220,220,100]) rs.ObjectName(bahn, "bahn_"+str(i)) anzBahn = int(rs.CurveLength(bahn)*random.uniform(0.01, 0.05)) ### abstand der points => (randomisierte) speed #print "anzBahn", anzBahn coords = rs.DivideCurve( bahn, anzBahn, 0) for x in range(random.randint(1, 3)): ## sooft startet neuer komet auf gleicher bahn == maximale dauer meteoritenRegen .. nicht mehr als 8 einstellen :) dm.esc() coords.extend(coords) allBahnCoords.append( coords ) #rs.DeleteObject(bahn) #rs.CurrentView(view="Front", return_name=True) #rs.ZoomExtents() for j in range(anzFrames): zoom+=deltaZoom camVec = rs.VectorRotate(camVec, deltaAngle, [0,0,1]) cam = rs.VectorAdd(tar, camVec) dm.setCameraTarget(cam, tar, lens= zoom, rota= 0, upVec = [0.02312681190534399,0.04104226012737455,0.9988897253724917]) rs.Redraw() dm.esc() #rs.DeleteObjects(rs.ObjectsByName("meteo_*")) ####ausklammern damit meteoriten unten liegenbleiben rs.DeleteObjects(rs.ObjectsByName("schweif_*")) rs.DeleteObjects(rs.ObjectsByName("koma_*")) meteos = rs.ObjectsByName("meteo_*") for met in meteos: pos = rs.CurveStartPoint(met) ###rs.PointCoordinates( met ) if pos[2] > 20.5: ### unterhalb bleibens liegen rs.DeleteObject( met ) for m in range(anzMet): dm.esc() if j < len(allBahnCoords[m]): metPt = rs.AddPoint(allBahnCoords[m][j]) ### hier kommt die coole def makeMeteoX(..) MakeMeteo(metPt) rs.DeleteObject(metPt) #rs.ObjectName(rs.AllObjects()[0], "meteo_"+str(m)) ### benannt zwecks deleten rs.Redraw() filename = dm.makeName( name="meteorit", frameNumber=framNr, anzahl=4, format="jpg") ## get_next_filename(path, "meteorit_", "jpg") if captureIt: rs.Command("-viewCaptureToFile Width=1280 Height=720 Scale=2 DrawCPlaneAxes=No TransparentBackground=No " + path+filename, 0) else: print "save as", path+filename framNr += 1