From b1ae6f1eec36824eff7e9951b74bf42ca2c61275 Mon Sep 17 00:00:00 2001 From: Johannes Obermayr Date: Tue, 22 Nov 2016 21:49:26 +0100 Subject: [PATCH] ArchSite can now also use Python3 Pysolar. --- src/Mod/Arch/ArchSite.py | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/src/Mod/Arch/ArchSite.py b/src/Mod/Arch/ArchSite.py index deb201d82..68b6c5b2b 100644 --- a/src/Mod/Arch/ArchSite.py +++ b/src/Mod/Arch/ArchSite.py @@ -72,13 +72,20 @@ def makeSolarDiagram(longitude,latitude,scale=1,complete=False): returns a solar diagram as a pivy node. If complete is True, the 12 months are drawn""" - try: - import Pysolar - except: - print("Pysolar is not installed. Unable to generate solar diagrams") - return None + from subprocess import call + py3_failed = call(["python3", "-c", "import Pysolar"]) + + if py3_failed: + try: + import Pysolar + except: + print("Pysolar is not installed. Unable to generate solar diagrams") + return None + else: + from subprocess import check_output + from pivy import coin - + if not scale: return None @@ -129,9 +136,16 @@ def makeSolarDiagram(longitude,latitude,scale=1,complete=False): for i,d in enumerate(m): pts = [] for h in range(24): - dt = datetime.datetime(year,d[0],d[1],h) - alt = math.radians(Pysolar.solar.GetAltitudeFast(latitude,longitude,dt)) - az = Pysolar.solar.GetAzimuth(latitude,longitude,dt) + if not py3_failed: + dt = "datetime.datetime(%s, %s, %s, %s)" % (year, d[0], d[1], h) + alt_call = "python3 -c 'import datetime,Pysolar; print (Pysolar.solar.get_altitude_fast(%s, %s, %s))'" % (latitude, longitude, dt) + alt = math.radians(float(check_output(alt_call, shell=True).strip())) + az_call = "python3 -c 'import datetime,Pysolar; print (Pysolar.solar.get_azimuth(%s, %s, %s))'" % (latitude, longitude, dt) + az = float(re.search('.+$', check_output(az_call, shell=True)).group(0)) + else: + dt = datetime.datetime(year,d[0],d[1],h) + alt = math.radians(Pysolar.solar.GetAltitudeFast(latitude,longitude,dt)) + az = Pysolar.solar.GetAzimuth(latitude,longitude,dt) az = -90 + az # pysolar's zero is south if az < 0: az = 360 + az