diff --git a/src/bonsai/bonsai/bim/module/light/decorator.py b/src/bonsai/bonsai/bim/module/light/decorator.py index 12b4438e09..77cd20ddbd 100644 --- a/src/bonsai/bonsai/bim/module/light/decorator.py +++ b/src/bonsai/bonsai/bim/module/light/decorator.py @@ -22,7 +22,7 @@ import gpu import bmesh import bonsai.tool as tool from bpy.types import SpaceView3D -from math import radians +from math import radians, degrees from mathutils import Vector, Matrix from gpu_extras.batch import batch_for_shader from bpy_extras.view3d_utils import location_3d_to_region_2d @@ -72,7 +72,7 @@ class SolarDecorator: self.draw_text_at_position(context, f"{props.hour:02}:{props.minute:02}", location) self.tn_angle = props.true_north - angle = Matrix.Rotation(radians(self.tn_angle), 4, "Z") + angle = Matrix.Rotation(props.true_north, 4, "Z") grid_north_p = origin @ angle @ (Vector((0, 0.8, 0)) * props.sun_path_size) self.draw_text_at_position(context, "True North", grid_north_p) @@ -155,13 +155,13 @@ class SolarDecorator: # True north self.tn_angle = props.true_north points = [Vector((0, 0, 0)), Vector((0, 0.75, 0))] - angle = Matrix.Rotation(radians(self.tn_angle), 4, "Z") + angle = Matrix.Rotation(self.tn_angle, 4, "Z") points = [origin @ angle @ (v * props.sun_path_size) for v in points] self.draw_batch("POINTS", points, decorator_color_special) verts = [Vector((0, 0, 0)), Vector((0, 0.75, 0))] edges = [[0, 1]] - angle = Matrix.Rotation(radians(self.tn_angle), 4, "Z") + angle = Matrix.Rotation(self.tn_angle, 4, "Z") verts = [origin @ angle @ (v * props.sun_path_size) for v in verts] self.draw_batch("LINES", verts, decorator_color_special, edges) @@ -174,7 +174,7 @@ class SolarDecorator: arc_start = Vector((0, 0.25, 0)) * props.sun_path_size arc_end = angle @ arc_start - angle_half = Matrix.Rotation(radians(self.tn_angle / 2), 4, "Z") + angle_half = Matrix.Rotation(self.tn_angle / 2, 4, "Z") arc_mid = angle_half @ arc_start arc_segments = tool.Cad.create_arc_segments( pts=[origin @ v for v in [arc_start, arc_mid, arc_end]], num_verts=12, make_edges=True diff --git a/src/bonsai/bonsai/bim/module/light/operator.py b/src/bonsai/bonsai/bim/module/light/operator.py index 2dc0834ea2..40a68df33b 100644 --- a/src/bonsai/bonsai/bim/module/light/operator.py +++ b/src/bonsai/bonsai/bim/module/light/operator.py @@ -38,6 +38,7 @@ import webbrowser import ifcopenshell.geom import multiprocessing import requests +from math import radians from mathutils import Vector from bonsai.bim.module.light.data import SolarData from bpy_extras.io_utils import ExportHelper @@ -512,7 +513,7 @@ class ImportTrueNorth(bpy.types.Operator): if not context.TrueNorth: continue value = context.TrueNorth.DirectionRatios - props.true_north = ifcopenshell.util.geolocation.yaxis2angle(*value[:2]) + props.true_north = radians(ifcopenshell.util.geolocation.yaxis2angle(*value[:2])) return {"FINISHED"} diff --git a/src/bonsai/bonsai/bim/module/light/prop.py b/src/bonsai/bonsai/bim/module/light/prop.py index 91a7d6b522..ef674582c6 100644 --- a/src/bonsai/bonsai/bim/module/light/prop.py +++ b/src/bonsai/bonsai/bim/module/light/prop.py @@ -151,7 +151,7 @@ def update_sun_path(self: "BIMSolarProperties") -> None: sun_props.day = self.day sun_props.time = self.hour + (self.minute / 60) # Preserve IFC sign convention - sun_props.north_offset = radians(self.true_north * -1) + sun_props.north_offset = self.true_north * -1 props.timezone = tzfpy.get_tz(props.longitude, props.latitude) timezone = pytz.timezone(props.timezone) @@ -457,7 +457,7 @@ class BIMSolarProperties(PropertyGroup): default=151.209900, ) timezone: StringProperty(name="Timezone", default="Etc/GMT") - true_north: FloatProperty(name="True North", min=-180, max=180, update=update_true_north) + true_north: FloatProperty(name="True North", min=-pi, max=pi, subtype="ANGLE", update=update_true_north) year: IntProperty(name="Year", min=1, max=9999, default=now.year, update=update_date) month: IntProperty(name="Month", min=1, max=12, default=now.month, update=update_date) day: IntProperty(name="Date", min=1, max=31, default=now.day, update=update_date)