honeybee-core 1.61.29__tar.gz → 1.61.30__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {honeybee_core-1.61.29/honeybee_core.egg-info → honeybee_core-1.61.30}/PKG-INFO +1 -1
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/cli/edit.py +2 -1
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/face.py +2 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/model.py +17 -4
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/room.py +24 -4
- {honeybee_core-1.61.29 → honeybee_core-1.61.30/honeybee_core.egg-info}/PKG-INFO +1 -1
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/.github/workflows/ci.yaml +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/.github/workflows/dependency-release.yaml +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/.gitignore +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/.releaserc.json +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/CODE_OF_CONDUCT.md +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/CONTRIBUTING.md +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/LICENSE +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/MANIFEST.in +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/README.md +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/deploy.sh +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/dev-requirements.txt +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/docs/_build/.nojekyll +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/docs/_build/README.md +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/docs/_build/docs/README.md +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/docs/_static/custom.css +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/docs/_templates/layout.html +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/docs/cli/index.rst +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/docs/conf.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/docs/index.rst +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/__init__.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/__main__.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/_base.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/_basewithshade.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/_lockable.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/altnumber.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/aperture.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/boundarycondition.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/checkdup.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/cli/__init__.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/cli/compare.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/cli/create.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/cli/lib.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/cli/setconfig.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/cli/validate.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/colorobj.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/config.json +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/config.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/dictutil.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/door.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/extensionutil.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/facetype.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/logutil.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/orientation.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/properties.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/search.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/shade.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/shademesh.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/typing.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/units.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/writer/__init__.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/writer/aperture.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/writer/door.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/writer/face.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/writer/model.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/writer/room.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/writer/shade.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee/writer/shademesh.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee_core.egg-info/SOURCES.txt +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee_core.egg-info/dependency_links.txt +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee_core.egg-info/entry_points.txt +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee_core.egg-info/requires.txt +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/honeybee_core.egg-info/top_level.txt +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/requirements.txt +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/setup.cfg +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/setup.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/__init__.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/aperture_test.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/boundary_condition_test.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/cli_compare_test.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/cli_create_test.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/cli_edit_test.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/cli_validate_test.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/colorobj_test.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/config_test.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/dictutil_test.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/door_test.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/face_test.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/facetype_test.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/json/ShoeBox.json +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/json/bad_geometry_model.hbjson +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/json/colliding_room_volumes.hbjson +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/json/compare_model_1.hbjson +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/json/compare_model_2.hbjson +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/json/complex_polyfaces.json +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/json/minor_geometry/existing_model.hbjson +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/json/minor_geometry/updated_model.hbjson +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/json/mismatched_area_adj.hbjson +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/json/model_with_adiabatic.hbjson +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/json/model_with_holes.hbjson +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/json/model_without_adjacency.hbjson +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/json/nonascii_face.json +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/json/polygons_for_gap_boundary.json +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/json/room_for_window_offset.hbjson +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/json/single_family_home.hbjson +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/lockable_test.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/model_test.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/orientation_test.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/room_test.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/search_test.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/shade_test.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/shademesh_test.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/stl/cube_ascii.stl +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/stl/cube_binary.stl +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/typing_test.py +0 -0
- {honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/units_test.py +0 -0
|
@@ -104,7 +104,8 @@ def solve_adjacency(model_file, no_merge, no_intersect, no_overwrite,
|
|
|
104
104
|
air_boundary = not wall
|
|
105
105
|
adiabatic = not surface
|
|
106
106
|
parsed_model.solve_adjacency(
|
|
107
|
-
merge_coplanar, intersect, overwrite,
|
|
107
|
+
merge_coplanar, intersect, overwrite,
|
|
108
|
+
air_boundary=air_boundary, adiabatic=adiabatic)
|
|
108
109
|
|
|
109
110
|
# write the new model out to the file or stdout
|
|
110
111
|
output_file.write(json.dumps(parsed_model.to_dict()))
|
|
@@ -740,6 +740,8 @@ class Face(_BaseWithShade):
|
|
|
740
740
|
if len(joined_bounds) == 1: # can be represented with a single Face3D
|
|
741
741
|
verts3d = tuple(ref_plane.xy_to_xyz(_v) for _v in joined_bounds[0])
|
|
742
742
|
non_rect_geos = [Face3D(verts3d, plane=ref_plane)]
|
|
743
|
+
elif len(joined_bounds) == 0: # everything was invalid
|
|
744
|
+
non_rect_geos = []
|
|
743
745
|
else: # need to separate holes from distinct Face3Ds
|
|
744
746
|
bound_faces = []
|
|
745
747
|
for poly in joined_bounds:
|
|
@@ -1449,7 +1449,7 @@ class Model(_Base):
|
|
|
1449
1449
|
|
|
1450
1450
|
def solve_adjacency(
|
|
1451
1451
|
self, merge_coplanar=False, intersect=False, overwrite=False,
|
|
1452
|
-
air_boundary=False, adiabatic=False,
|
|
1452
|
+
remove_mismatched_sub_faces=True, air_boundary=False, adiabatic=False,
|
|
1453
1453
|
tolerance=None, angle_tolerance=None):
|
|
1454
1454
|
"""Solve adjacency between Rooms of the Model.
|
|
1455
1455
|
|
|
@@ -1465,6 +1465,10 @@ class Model(_Base):
|
|
|
1465
1465
|
solved. (Default: False).
|
|
1466
1466
|
overwrite: Boolean to note whether existing Surface boundary
|
|
1467
1467
|
conditions should be overwritten. (Default: False).
|
|
1468
|
+
remove_mismatched_sub_faces: Boolean to note whether any mis-matches
|
|
1469
|
+
in sub-faces between adjacent rooms should simply result in
|
|
1470
|
+
the sub-faces being removed rather than raising an
|
|
1471
|
+
exception. (Default: True).
|
|
1468
1472
|
air_boundary: Boolean to note whether the wall adjacencies should be
|
|
1469
1473
|
of the air boundary face type. (Default: False).
|
|
1470
1474
|
adiabatic: Boolean to note whether the adjacencies should be
|
|
@@ -1491,11 +1495,20 @@ class Model(_Base):
|
|
|
1491
1495
|
|
|
1492
1496
|
# solve adjacency
|
|
1493
1497
|
if not overwrite: # only assign new adjacencies
|
|
1494
|
-
adj_info = Room.solve_adjacency(self.rooms, tol)
|
|
1498
|
+
adj_info = Room.solve_adjacency(self.rooms, tol, remove_mismatched_sub_faces)
|
|
1495
1499
|
else: # overwrite existing Surface BC
|
|
1496
1500
|
adj_faces = Room.find_adjacency(self.rooms, tol)
|
|
1497
|
-
|
|
1498
|
-
face_pair
|
|
1501
|
+
if remove_mismatched_sub_faces:
|
|
1502
|
+
for face_pair in adj_faces:
|
|
1503
|
+
try:
|
|
1504
|
+
face_pair[0].set_adjacency(face_pair[1])
|
|
1505
|
+
except AssertionError:
|
|
1506
|
+
face_pair[0].remove_sub_faces()
|
|
1507
|
+
face_pair[1].remove_sub_faces()
|
|
1508
|
+
face_pair[0].set_adjacency(face_pair[1])
|
|
1509
|
+
else:
|
|
1510
|
+
for face_pair in adj_faces:
|
|
1511
|
+
face_pair[0].set_adjacency(face_pair[1])
|
|
1499
1512
|
adj_info = {'adjacent_faces': adj_faces}
|
|
1500
1513
|
|
|
1501
1514
|
# try to assign the air boundary face type
|
|
@@ -1759,10 +1759,18 @@ class Room(_BaseWithShade):
|
|
|
1759
1759
|
nf = Face(fid, new_geo, prop_f.type, fbc)
|
|
1760
1760
|
for ap in apertures:
|
|
1761
1761
|
if nf.geometry.is_sub_face(ap.geometry, tol, a_tol):
|
|
1762
|
-
|
|
1762
|
+
try:
|
|
1763
|
+
nf.add_aperture(ap)
|
|
1764
|
+
except AssertionError: # probably adiabatic
|
|
1765
|
+
nf.boundary_condition = boundary_conditions.outdoors
|
|
1766
|
+
nf.add_aperture(ap)
|
|
1763
1767
|
for dr in doors:
|
|
1764
1768
|
if nf.geometry.is_sub_face(dr.geometry, tol, a_tol):
|
|
1765
|
-
|
|
1769
|
+
try:
|
|
1770
|
+
nf.add_door(dr)
|
|
1771
|
+
except AssertionError: # probably adiabatic
|
|
1772
|
+
nf.boundary_condition = boundary_conditions.outdoors
|
|
1773
|
+
nf.add_door(dr)
|
|
1766
1774
|
if i == 0: # add all assigned shades to this face
|
|
1767
1775
|
nf.add_indoor_shades(in_shades)
|
|
1768
1776
|
nf.add_outdoor_shades(out_shades)
|
|
@@ -1943,7 +1951,7 @@ class Room(_BaseWithShade):
|
|
|
1943
1951
|
room.coplanar_split(other_rooms, tolerance, angle_tolerance)
|
|
1944
1952
|
|
|
1945
1953
|
@staticmethod
|
|
1946
|
-
def solve_adjacency(rooms, tolerance=0.01):
|
|
1954
|
+
def solve_adjacency(rooms, tolerance=0.01, remove_mismatched_sub_faces=False):
|
|
1947
1955
|
"""Solve for adjacencies between a list of rooms.
|
|
1948
1956
|
|
|
1949
1957
|
Note that this method will mutate the input rooms by setting Surface
|
|
@@ -1956,6 +1964,10 @@ class Room(_BaseWithShade):
|
|
|
1956
1964
|
tolerance: The minimum difference between the coordinate values of two
|
|
1957
1965
|
faces at which they can be considered centered adjacent. Default: 0.01,
|
|
1958
1966
|
suitable for objects in meters.
|
|
1967
|
+
remove_mismatched_sub_faces: Boolean to note whether any mis-matches
|
|
1968
|
+
in sub-faces between adjacent rooms should simply result in
|
|
1969
|
+
the sub-faces being removed rather than raising an
|
|
1970
|
+
exception. (Default: False).
|
|
1959
1971
|
|
|
1960
1972
|
Returns:
|
|
1961
1973
|
A dictionary of information about the objects that had their adjacency set.
|
|
@@ -1989,7 +2001,15 @@ class Room(_BaseWithShade):
|
|
|
1989
2001
|
if not isinstance(face_2.boundary_condition, Surface):
|
|
1990
2002
|
if face_1.geometry.is_centered_adjacent(
|
|
1991
2003
|
face_2.geometry, tolerance):
|
|
1992
|
-
|
|
2004
|
+
if not remove_mismatched_sub_faces:
|
|
2005
|
+
face_info = face_1.set_adjacency(face_2)
|
|
2006
|
+
else:
|
|
2007
|
+
try:
|
|
2008
|
+
face_info = face_1.set_adjacency(face_2)
|
|
2009
|
+
except AssertionError:
|
|
2010
|
+
face_1[0].remove_sub_faces()
|
|
2011
|
+
face_2.remove_sub_faces()
|
|
2012
|
+
face_info = face_1.set_adjacency(face_2)
|
|
1993
2013
|
adj_info['adjacent_faces'].append((face_1, face_2))
|
|
1994
2014
|
adj_info['adjacent_apertures'].extend(
|
|
1995
2015
|
face_info['adjacent_apertures'])
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/json/minor_geometry/existing_model.hbjson
RENAMED
|
File without changes
|
{honeybee_core-1.61.29 → honeybee_core-1.61.30}/tests/json/minor_geometry/updated_model.hbjson
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|