Skip to content

Commit

Permalink
fix(roof/ceiling): handle cases that are not fully horizontal
Browse files Browse the repository at this point in the history
  • Loading branch information
mostaphaRoudsari committed Jul 13, 2022
1 parent bfe6e0e commit e59e7aa
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 3 deletions.
19 changes: 16 additions & 3 deletions honeybee_ies/reader.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
import math
import pathlib
import re
from typing import Iterator, List, Tuple
import uuid

from ladybug_geometry.geometry3d import Face3D, Point3D
from ladybug_geometry.intersection2d import closest_point2d_on_line2d
from ladybug_geometry.geometry3d import Face3D, Point3D, Vector3D
from honeybee.model import Model, Shade, Room, Face, Aperture, Door, AirBoundary
from honeybee.typing import clean_string, clean_and_id_ep_string

Z_AXIS = Vector3D(0, 0, 1)
ROOF_ANGLE_TOLERANCE = math.radians(10)


def _opening_from_ies(geometry: Face3D, content: Iterator) -> Tuple[List[Point3D], int]:
"""Translate an opening from gem format.
Expand All @@ -21,11 +24,19 @@ def _opening_from_ies(geometry: Face3D, content: Iterator) -> Tuple[List[Point3D
opening_type: An integer between 0-2. 0 for apertures, 1 for doors and 2 for
holes.
"""

if geometry.plane.n.z in (1, -1):
# horizontal faces
origin = geometry.upper_right_corner
vertices = geometry.upper_right_counter_clockwise_vertices
x = geometry.plane.x.reverse()
y = geometry.plane.y.reverse()
elif geometry.plane.n.angle(Z_AXIS) < ROOF_ANGLE_TOLERANCE:
# almost horizontal faces
vertices = geometry.lower_left_counter_clockwise_vertices
origin = geometry.lower_left_corner
x = geometry.plane.x.reverse()
y = geometry.plane.y.reverse()
else:
vertices = geometry.lower_left_counter_clockwise_vertices
origin = vertices[0]
Expand Down Expand Up @@ -143,6 +154,7 @@ def _parse_gem_segment(segment: str):
hole_face = Face(
str(uuid.uuid4()), geometry=hole_geo, type=AirBoundary()
)
hole_face.user_data = {'__ies_import__': True}
faces.append(hole_face)
elif type_ == 4 or type_ == 2:
# local and context shades
Expand Down Expand Up @@ -183,7 +195,8 @@ def model_from_ies(gem: str) -> Model:
shades.extend(r)

model = Model(
clean_string(gem_file.stem), rooms=rooms, units='Meters', orphaned_shades=shades
clean_string(gem_file.stem), rooms=rooms, units='Meters', orphaned_shades=shades,
tolerance=0.01
)
model.display_name = gem_file.stem
return model
3 changes: 3 additions & 0 deletions honeybee_ies/writer.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from honeybee.model import Model, Shade, Room, AirBoundary

from .templates import SPACE_TEMPLATE, SHADE_TEMPLATE, ADJ_BLDG_TEMPLATE
from .reader import Z_AXIS, ROOF_ANGLE_TOLERANCE


def _opening_to_ies(
Expand All @@ -23,6 +24,8 @@ def _opening_to_ies(
"""
if parent_geo.plane.n.z in (1, -1):
origin, flip = parent_geo.upper_right_corner, True
elif parent_geo.plane.n.angle(Z_AXIS) < ROOF_ANGLE_TOLERANCE:
origin, flip = parent_geo.lower_left_corner, True
else:
origin, flip = parent_geo.lower_left_corner, False
openings = []
Expand Down

0 comments on commit e59e7aa

Please sign in to comment.