################################### ### 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") import DM_lib as dm #reload( dm ) ############################## rs.EnableRedraw(0) dm.printDisplay(1) ####moegliche Meteoriten form if(): radiusX = rX = 1000 anz = 500 rad = 100 cen = [rX/2,rX/2,rX/2] deltaAngle = 360/anz vec = [1,1,1] print vec Coords=[] for i in range(anz): angX = deltaAngle*i vecX = rs.VectorRotate(vec, angX, [random.uniform(-1,1),random.uniform(-1,1),random.uniform(-1,1)] ) vecX = rs.VectorScale(vecX, rad) vecX = rs.VectorAdd(vecX, cen) Coords.append(vecX) #rs.AddPoint(vecX) for i in range(anz//3): startpnt = random.choice(Coords) endpnt = random.choice(Coords) if startpnt != endpnt: Sphere2 = rs.AddLine(startpnt, endpnt) #####finale start###### dm.newEmptyLayer("OSM") rs.LayerVisible("OSM", 1) dm.newEmptyLayer("URANI", [100,100,200]) dm.printDisplay(1) 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,0]) centerUraniaM = dm.pntCentroid(coords) centerUrania = [centerUraniaM[0], centerUraniaM[1], 0] def get_next_filename(base_path, base_name, extension): ####weiterfuehrung der filnames mithilfe von chatgbt index = 0 while True: filename = "{}{}{:04d}.{}".format(base_path, base_name, index, extension) if not os.path.exists(filename): return filename index += 1 targets = [ centerUrania, rs.VectorAdd(centerUrania, dm.randVec(50,100)) ] ###Mittelpunkt + random Vec ergibt target frames = 30# 250 path = "C:/Users/annas/OneDrive/Dokumente/uni-dokumente/dm2/meteoriten_fotos/" ####Meteorit Bahnen##### anzMet = 3 meteoriten = [] bahnen = [] schweife = [] for i in range(anzMet): for tar in targets[0:1]: pOben = rs.VectorAdd(tar, [0,0, random.uniform(200,500)] ) pStart= rs.VectorAdd(pOben, [1000,1000,0] ) kometBahnCoords = [pStart, pOben, tar ] #rs.AddCurve( kometBahnCoords, 1) bahn = rs.AddCurve( kometBahnCoords, 2) ###Flugbahn coords = rs.DivideCurve( bahn, frames, 0) ####Flugbahn wird in abhaengikeit von frames geteilt rs.ObjectColor(bahn, [255,255,255]) meteoriten.append(bahn) bahnen.append(coords) for cor_index, cor in enumerate(coords[0:]): ###Flug von Punkt A nach Punkt B for meteorit in rs.ObjectsByName("meteorit"): if meteorit not in flach_Meteorit: rs.DeleteObjects(rs.ObjectsByName("meteorit*")) meteoritCoords = [] ####Meteorit##### for i in range(80): vecX = dm.randVec(-30, 30) corX = rs.VectorAdd( cor, vecX ) #rs.AddPoint( corX ) meteoritCoords.append( corX ) meteorit = rs.AddCurve( meteoritCoords, 1) rs.ObjectColor(meteorit, [102,102,102]) ####Meteorit flachdruecken##### flach_Meteorit = [] if cor_index == len(coords)-1: stauchung = random.uniform(0.1,0.8) rs.ScaleObject(meteorit, cor, [1,1,stauchung]) flach_Meteorit.append(meteorit) ####tangente = schweif##### paramX = rs.CurveClosestPoint(bahn, cor) tanVec = rs.CurveTangent( bahn, paramX ) print rs.VectorLength(tanVec) ####ueberpruefung ob normalvektor schweifLenx = random.uniform(200,500) tanVec = rs.VectorScale( tanVec, -schweifLenx)####Einheitsvektor wird um die SChweiflenx vergroesert schweif = rs.AddLine( cor, rs.VectorAdd(cor,tanVec) ) schweife.append(schweif) ####schweif koma##### divY = 20 coordsKoma = rs.DivideCurve(schweif, divY, 0) #rs.AddPoints(coordsKoma) min_distance = 5 max_distance = 20 CoordsKoma = [] for index, cor in enumerate(coordsKoma[2:]): ###Start bei zweiten Punkt if cor_index < len(coords)-2: ###Sobald meteorit auf vorletzen punkt von coords angekommen ist, wird koma nicht mehr generiert auskrag = dm.reMap( index, 0, divY-2, max_distance, min_distance) ###Hilfe von chatgbt bei remap befehl for i in range(15): vecY = dm.randVec(-auskrag,auskrag) corY = rs.VectorAdd(cor, vecY) Koma = rs.AddPoint(corY) rs.ObjectColor( Koma, [200,200,0]) rs.ObjectPrintWidth( Koma, 0.5) CoordsKoma.append(Koma) rs.ObjectName( schweif, "meteorit_schweif") rs.ObjectName( meteorit, "meteorit") rs.ObjectName(CoordsKoma, "meteorit_koma") rs.ObjectName(flach_Meteorit, "flach_Meteorit") rs.ObjectName(bahn, "bahn") rs.DeleteObject(schweif) rs.Redraw() dm.esc() ####Speichern der bilder mithilfe chatgbt # frameNumber = cor_index # Hier verwenden wir die Meteoritenposition als Frame-Nummer # filename = "{:04d}_meteorit.jpg".format(frameNumber) # save_path = path + filename #print("Speichern unter:", save_path) # Speichern des Bildes # rs.Command("-viewCaptureToFile Width=960 Height=540 Scale=2 DrawCPlaneAxes=No TransparentBackground=No {}".format(save_path), 0) # Speichern der Bilder filename = get_next_filename(path, "meteorit_", "jpg") print("Speichern unter:", filename) # Speichern des Bildes rs.Command("-viewCaptureToFile Width=960 Height=540 Scale=2 DrawCPlaneAxes=No TransparentBackground=No {}".format(filename), 0)