From f5e870db0f8be93994fd1c2aec8e76253571a53a Mon Sep 17 00:00:00 2001 From: PH Tools Date: Wed, 26 Apr 2023 17:12:53 +0200 Subject: [PATCH] fix(shade): Fixe Shading builder to support IP units - Fix shade_create_bldg_shd so it works with IP Rhino units - Fix win_set_inst_depth so it works with IP Rhino units - Update installer versions --- hbph_installer.gh | Bin 18912 -> 20848 bytes honeybee_ph_rhino/_component_info_.py | 2 +- .../gh_compo_io/shade_create_bldg_shd.py | 32 ++++++++++++----- .../gh_compo_io/win_set_inst_depth.py | 33 ++++++++++++++++-- honeybee_ph_rhino/gh_io.py | 10 ++++++ honeybee_ph_rhino/make_spaces/make_space.py | 1 + 6 files changed, 67 insertions(+), 11 deletions(-) diff --git a/hbph_installer.gh b/hbph_installer.gh index 366483300342c0c8df4e89e8207bee8e26cc5a23..2c3d549c2b455daf78b0b566fe9f455192cfabd9 100644 GIT binary patch literal 20848 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 diff --git a/honeybee_ph_rhino/_component_info_.py b/honeybee_ph_rhino/_component_info_.py index ff0b435..de9c7d7 100644 --- a/honeybee_ph_rhino/_component_info_.py +++ b/honeybee_ph_rhino/_component_info_.py @@ -5,7 +5,7 @@ These are called when the component is instantiated within the Grasshopper canvas. """ -RELEASE_VERSION = "Honeybee-PH v1.0.37" +RELEASE_VERSION = "Honeybee-PH v1.0.38" CATEGORY = "HB-PH" SUB_CATEGORIES = { 0: "00 | Utils", diff --git a/honeybee_ph_rhino/gh_compo_io/shade_create_bldg_shd.py b/honeybee_ph_rhino/gh_compo_io/shade_create_bldg_shd.py index 7c50b01..3d321ce 100644 --- a/honeybee_ph_rhino/gh_compo_io/shade_create_bldg_shd.py +++ b/honeybee_ph_rhino/gh_compo_io/shade_create_bldg_shd.py @@ -38,6 +38,12 @@ except ImportError as e: raise ImportError('\nFailed to import honeybee_ph_rhino:\n\t{}'.format(e)) +try: + from ph_units.converter import convert +except ImportError as e: + raise ImportError('\nFailed to import ph_units:\n\t{}'.format(e)) + + def create_punched_geometry(_hb_rooms): # type: (Collection[room.Room]) -> List[rg.Brep] """Return a list of all of the 'punched' surfaces from the HB-Model.""" @@ -82,12 +88,21 @@ def create_inset_aperture_surfaces(_hb_rooms): return inset_window_surfaces -def create_window_reveal(_hb_aperture): - # type: (aperture.Aperture) -> List[rg.Brep] +def create_window_reveal(_hb_aperture, _rh_units_name): + # type: (aperture.Aperture, str) -> List[rg.Brep] """Return a list of the Aperture 'reveal' surfaces.""" - ap_prop_ph = _hb_aperture.properties.ph # type: AperturePhProperties + + # -- Convert the Aperture's install depth to Rhino units + try: + ap_prop_ph = _hb_aperture.properties.ph # type: AperturePhProperties + ap_install_depth_in_m = ap_prop_ph.install_depth + ap_install_depth_in_r_units = convert(ap_install_depth_in_m, "M", _rh_units_name) + except Exception as e: + msg = "Error converting Aperture's install depth to Rhino units: {}?\t{}".format(_rh_units_name, e) + raise Exception(msg) + extrusion_vector = _hb_aperture.normal.reverse( - ) * ap_prop_ph.install_depth + ) * ap_install_depth_in_r_units return [ from_face3d(Face3D.from_extrusion(seg, extrusion_vector)) for seg in _hb_aperture.geometry.boundary_segments @@ -95,15 +110,15 @@ def create_window_reveal(_hb_aperture): ] -def create_window_reveals(_hb_rooms): - # type: (Collection[room.Room]) -> List[rg.Brep] +def create_window_reveals(_hb_rooms, _rh_units_name): + # type: (Collection[room.Room], str) -> List[rg.Brep] """Return a list of all the aperture 'reveals' in the Honeybee-Model""" reveals = [] for room in _hb_rooms: for face in room.faces: for aperture in face.apertures: - reveals.extend(create_window_reveal(aperture)) + reveals.extend(create_window_reveal(aperture, _rh_units_name)) return reveals @@ -116,9 +131,10 @@ def __init__(self, _IGH, _hb_rooms): def run(self): # type: () -> Tuple[List[rg.Brep], List[rg.Brep], List[room.Room]] + rh_units_name = self.IGH.get_rhino_unit_system_name() shading_surfaces_ = [] shading_surfaces_.extend(create_punched_geometry(self.hb_rooms)) - shading_surfaces_.extend(create_window_reveals(self.hb_rooms)) + shading_surfaces_.extend(create_window_reveals(self.hb_rooms, rh_units_name)) window_surfaces_ = create_inset_aperture_surfaces(self.hb_rooms) hb_rooms_ = self.hb_rooms diff --git a/honeybee_ph_rhino/gh_compo_io/win_set_inst_depth.py b/honeybee_ph_rhino/gh_compo_io/win_set_inst_depth.py index 7ab10a7..a2f34d3 100644 --- a/honeybee_ph_rhino/gh_compo_io/win_set_inst_depth.py +++ b/honeybee_ph_rhino/gh_compo_io/win_set_inst_depth.py @@ -24,6 +24,13 @@ except ImportError as e: raise ImportError('\nFailed to import honeybee_ph_rhino:\n\t{}'.format(e)) +try: + from ph_units.converter import convert + from ph_units.parser import parse_input +except ImportError as e: + raise ImportError('\nFailed to import ph_units:\n\t{}'.format(e)) + + class GHCompo_SetApertureInstallDepth(object): """Interface to collect and clean PhWindowGlazing user-inputs.""" @@ -33,13 +40,35 @@ def __init__(self, _IGH, _apertures, _install_depth): # type: (gh_io.IGH, List[Aperture], Optional[str]) -> None self.IGH = _IGH self._apertures = _apertures - self._install_depth = _install_depth or 0.106 + self._install_depth = self.calc_install_depth(_install_depth) + + def calc_install_depth(self, _install_depth): + # type: (Optional[str]) -> float| int + """Calculate the install depth of the window glazing, considering Rhino unit-types.""" + + if not _install_depth: + return 0.106 + + # -- If the user supplied an input unit, just use that + input_value, input_unit = parse_input(_install_depth) + + # -- otherwise use the Rhino document unit system + if not input_unit: + input_unit = self.IGH.get_rhino_unit_system_name() + + # -- convert the input value to Meters, always + install_depth = convert(input_value, input_unit, "M") + + if not install_depth: + raise ValueError("Failed to parse install depth input {}?".format(_install_depth)) + else: + return install_depth def run(self): # type: () -> List[Aperture] apertures_ = [] for aperture in self._apertures: dup_ap = aperture.duplicate() - dup_ap.properties.ph.install_depth = self._install_depth + dup_ap.properties.ph.install_depth = self._install_depth # type: ignore apertures_.append(dup_ap) return apertures_ \ No newline at end of file diff --git a/honeybee_ph_rhino/gh_io.py b/honeybee_ph_rhino/gh_io.py index f2c9282..cd05034 100644 --- a/honeybee_ph_rhino/gh_io.py +++ b/honeybee_ph_rhino/gh_io.py @@ -87,6 +87,11 @@ def ghc(self): """Convenience Attribute Alias.""" return self.ghpythonlib_components + @property + def sc(self): + """Convenience Attribute Alias.""" + return self.scriptcontext + def gh_compo_find_input_index_by_name(self, _input_name): # type: (str) -> int """ @@ -439,6 +444,11 @@ def remark(self, _in): level = self.Grasshopper.Kernel.GH_RuntimeMessageLevel.Remark self.ghenv.Component.AddRuntimeMessage(level, _in) + def get_rhino_unit_system_name(self): + # type: () -> str + """Returns the Rhino Unit System Name as a string.""" + return self.sc.doc.ModelUnitSystem + class ComponentInput: """GH-Component Input Node data class.""" diff --git a/honeybee_ph_rhino/make_spaces/make_space.py b/honeybee_ph_rhino/make_spaces/make_space.py index fdb9268..eaaabd6 100644 --- a/honeybee_ph_rhino/make_spaces/make_space.py +++ b/honeybee_ph_rhino/make_spaces/make_space.py @@ -21,6 +21,7 @@ from ladybug_rhino.togeometry import to_point3d except ImportError as e: raise ImportError("\nFailed to import ladybug_rhino:\n\t{}".format(e)) + try: from ladybug_geometry import geometry3d except ImportError as e: