################################### ### DM2_w25 # AGruber@tugraz.at ### ### DEMO SUN & gherkin ################################### ############################## import rhinoscriptsyntax as rs import random, time, sys, os ### sys.path.append("P:/") ### sys.path.append("P:/WWW/XXX/dm2/") import DM_lib as dm ### dm.reload_lib(dm) ############################## rs.UnitSystem(4) # meters = 4, cm = 3 etc rs.ShowGrid(None, False) # grid > False = off rs.ShowGridAxes(None, True) # y/y/z axen display > False/True = off/on rs.Command("cplane w t enter", False) # cPlane World Top #rs.ViewDisplayMode(rs.CurrentView(), "pen") rs.EnableRedraw(False) ### 4_the_MACs dm.newEmptyLayer("SUN::demo") rs.Redraw() crCords = [] cCordPt = [] anz = 15 # Anzahl der Kreise hoehe = 30 # Hoehe der einzelnen Kreissegmente rad = 50 # Anfangsradius ptAnz = 20 # 20 Anzahl der Unterteilungen grSteps = 5 # Wachstum bis zum wievieltem Kreis shrinkSteps = 3 # Anuzahl der Kreise fuer Spitze factor = 180/420 rad *= factor hoehe *= factor allCoords = [] for i in range(anz+1): level = hoehe*i if i <= grSteps: NeuRad = rad * ((i+1)**(1/6)) # Wachstumsfkt fuer Anfang #print NeuRad elif i <= anz-shrinkSteps: NeuRad = NeuRad * (0.985**(i-grSteps)) # Schrumpffunktion #print NeuRad else: n = i - (anz-shrinkSteps) NeuRad = NeuRad * (1- (n/4)) if i==anz: NeuRad = 1 level = hoehe*(i-1)+5 cir = rs.AddCircle([0,0,level],NeuRad) rs.ObjectName( cir, "level_"+str(int(level))) pts = rs.DivideCurve(cir, ptAnz) #rs.AddPoints(pts) pts.append(pts[0]) cCordPt.append(pts) allCoords.append( pts ) #print "len(allCoords[0])", len(allCoords[0]) #dm.textDots(allCoords[0][0:-1]) for i in range(ptAnz): dm.esc() coordsPositiv = [] coordsNegativ = [] for c,coordList in enumerate(allCoords): ptX = coordList[(i+c+1)%ptAnz] ### %ptAnz: starte bei 0 wenn (i+c+1)==ptAnz coordsPositiv.append( ptX ) ptX = coordList[ptAnz-(i+c+1)%ptAnz] ### %ptAnz: starte bei 0 wenn (i+c+1)==ptAnz coordsNegativ.append( ptX ) rs.AddCurve( coordsPositiv, 1 ) rs.AddCurve( coordsNegativ, 1 ) #rs.ObjectColor(rs.AllObjects()[0], [250-10*i,0,50+10*i]) #rs.ObjectColor(rs.AllObjects()[1], [0,250-10*i,50+10*i]) rs.ObjectName(rs.AllObjects()[0], "negativ_"+str(i)) rs.ObjectName(rs.AllObjects()[1], "positiv_"+str(i)) rs.Redraw() ############################################ dm.ort = "shepperton" # "NYC UN", "HONOLULU" dm.ort = "graz" #dm.ort = "HONOLULU" print "dm.ortX", dm.ortX( dm.ort ) dat = dm.getDateNow() print "dat / tim", dat print "sonnenstand:", dm.setSun( verbose=0 )[0], "-", dm.setSun( verbose=0 )[1] ### https://www.sonnenverlauf.de/#/47.0696,15.4382,12/2025.12.12/12:14/1/3 ############################################ if 1: levels = rs.ObjectsByName("level_*") levels.reverse() for hor in range(10, 14, 1): for lev in range(1, len(levels), 2): dm.esc() coords = rs.DivideCurve(levels[lev], 365, 0) sha_coords = [] for i,cor in enumerate(coords): dm.esc() pSun = cor #rs.AddPoint( pTop ) if 1 and i%10==0: #print i, dm.number2date( i ) dat=dm.number2date( i+1 ) #rs.AddLoftSrf( rs.ObjectsByName("positiv*")[0:5] ) sun = dm.setSun(year=2025, mon=dat[0], day=dat[1], hour=hor, min=0, sec=0, verbose=0) sunVec = sun[2] sunVec = rs.VectorScale( sunVec, 1000.0) pSha = rs.VectorAdd( pSun, sunVec ) pSha = rs.LinePlaneIntersection([pSun, pSha], rs.WorldXYPlane()) #rs.AddPoint( pSha ) sha_coords.append( pSha ) if i and lev==len(levels)-1: beam = rs.AddLine( pSun, pSha ) rs.CurveArrows(beam, arrow_style=2) rs.ObjectColor(beam, [100,100,10]) rs.ObjectName( beam, str(hor)+"h - azi="+str(round(sun[0],2))+" alt="+str(round(sun[1],2))+" deg" ) sha_coords.append(sha_coords[0]) sha = rs.AddCurve( sha_coords, 1 ) rs.ObjectName( sha, str(dat[0])+"_"+str(dat[1])+"_"+str(hor)+"h_lev_"+str(lev) ) rs.AddPlanarSrf( sha ) dm.zA() dat=dm.number2date( 112 ) #print "dat=", dat #dm.setSun(year=2025, mon=12, day=12, hour=8, min=43, sec=25, verbose=0) ############################ ########## EOS / EndOfScript rs.EnableRedraw(True) ### 4_the_MACs #dm.eDup() ### delete duplicate objects dm.printDisplay(state=True, scale=1000) #dm.zA( 0.9 ) dm.newEmptyLayer("Default") print "done"