honeybee-core 1.61.16__tar.gz → 1.61.18__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.16/honeybee_core.egg-info → honeybee_core-1.61.18}/PKG-INFO +2 -2
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/aperture.py +33 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/cli/validate.py +2 -10
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/door.py +33 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/face.py +39 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/room.py +27 -11
- {honeybee_core-1.61.16 → honeybee_core-1.61.18/honeybee_core.egg-info}/PKG-INFO +2 -2
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee_core.egg-info/requires.txt +1 -1
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/requirements.txt +1 -1
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/.github/workflows/ci.yaml +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/.github/workflows/dependency-release.yaml +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/.gitignore +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/.releaserc.json +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/CODE_OF_CONDUCT.md +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/CONTRIBUTING.md +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/LICENSE +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/MANIFEST.in +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/README.md +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/deploy.sh +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/dev-requirements.txt +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/docs/_build/.nojekyll +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/docs/_build/README.md +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/docs/_build/docs/README.md +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/docs/_static/custom.css +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/docs/_templates/layout.html +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/docs/cli/index.rst +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/docs/conf.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/docs/index.rst +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/__init__.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/__main__.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/_base.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/_basewithshade.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/_lockable.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/altnumber.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/boundarycondition.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/checkdup.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/cli/__init__.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/cli/compare.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/cli/create.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/cli/edit.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/cli/lib.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/cli/setconfig.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/colorobj.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/config.json +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/config.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/dictutil.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/extensionutil.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/facetype.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/logutil.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/model.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/orientation.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/properties.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/search.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/shade.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/shademesh.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/typing.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/units.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/writer/__init__.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/writer/aperture.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/writer/door.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/writer/face.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/writer/model.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/writer/room.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/writer/shade.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee/writer/shademesh.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee_core.egg-info/SOURCES.txt +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee_core.egg-info/dependency_links.txt +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee_core.egg-info/entry_points.txt +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/honeybee_core.egg-info/top_level.txt +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/setup.cfg +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/setup.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/__init__.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/aperture_test.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/boundary_condition_test.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/cli_compare_test.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/cli_create_test.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/cli_edit_test.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/cli_validate_test.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/colorobj_test.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/config_test.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/dictutil_test.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/door_test.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/face_test.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/facetype_test.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/json/ShoeBox.json +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/json/bad_geometry_model.hbjson +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/json/colliding_room_volumes.hbjson +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/json/compare_model_1.hbjson +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/json/compare_model_2.hbjson +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/json/complex_polyfaces.json +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/json/minor_geometry/existing_model.hbjson +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/json/minor_geometry/updated_model.hbjson +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/json/mismatched_area_adj.hbjson +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/json/model_with_adiabatic.hbjson +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/json/model_with_holes.hbjson +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/json/model_without_adjacency.hbjson +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/json/nonascii_face.json +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/json/polygons_for_gap_boundary.json +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/json/room_for_window_offset.hbjson +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/json/single_family_home.hbjson +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/lockable_test.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/model_test.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/orientation_test.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/room_test.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/search_test.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/shade_test.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/shademesh_test.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/stl/cube_ascii.stl +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/stl/cube_binary.stl +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/typing_test.py +0 -0
- {honeybee_core-1.61.16 → honeybee_core-1.61.18}/tests/units_test.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: honeybee-core
|
|
3
|
-
Version: 1.61.
|
|
3
|
+
Version: 1.61.18
|
|
4
4
|
Summary: A library to create 3D building geometry for various types of environmental simulation.
|
|
5
5
|
Home-page: https://github.com/ladybug-tools/honeybee-core
|
|
6
6
|
Author: Ladybug Tools
|
|
@@ -14,7 +14,7 @@ Classifier: License :: OSI Approved :: GNU Affero General Public License v3
|
|
|
14
14
|
Classifier: Operating System :: OS Independent
|
|
15
15
|
Description-Content-Type: text/markdown
|
|
16
16
|
License-File: LICENSE
|
|
17
|
-
Requires-Dist: ladybug-core==0.44.
|
|
17
|
+
Requires-Dist: ladybug-core==0.44.12
|
|
18
18
|
Requires-Dist: ladybug-geometry-polyskel==1.7.25
|
|
19
19
|
Requires-Dist: honeybee-schema==1.59.0; python_version >= "3.7"
|
|
20
20
|
|
|
@@ -818,6 +818,39 @@ class Aperture(_BaseWithShade):
|
|
|
818
818
|
return full_msg
|
|
819
819
|
return [] if detailed else ''
|
|
820
820
|
|
|
821
|
+
def check_degenerate(self, tolerance=0.01, raise_exception=True, detailed=False):
|
|
822
|
+
"""Check whether the Aperture is degenerate with effectively zero area.
|
|
823
|
+
|
|
824
|
+
Note that, while the Aperture may have an area larger than the tolerance,
|
|
825
|
+
removing colinear vertices within the tolerance would create a geometry
|
|
826
|
+
smaller than the tolerance.
|
|
827
|
+
|
|
828
|
+
Args:
|
|
829
|
+
tolerance: The minimum difference between the coordinate values of two
|
|
830
|
+
vertices at which they can be considered equivalent. Default: 0.01,
|
|
831
|
+
suitable for objects in meters.
|
|
832
|
+
raise_exception: If True, a ValueError will be raised if the object
|
|
833
|
+
intersects with itself. Default: True.
|
|
834
|
+
detailed: Boolean for whether the returned object is a detailed list of
|
|
835
|
+
dicts with error info or a string with a message. (Default: False).
|
|
836
|
+
|
|
837
|
+
Returns:
|
|
838
|
+
A string with the message or a list with a dictionary if detailed is True.
|
|
839
|
+
"""
|
|
840
|
+
msg = 'Aperture "{}" is degenerate and should be deleted.'.format(
|
|
841
|
+
self.full_id)
|
|
842
|
+
try: # see if it is self-intersecting because of a duplicate vertex
|
|
843
|
+
new_geo = self.geometry.remove_colinear_vertices(tolerance)
|
|
844
|
+
if new_geo.area > tolerance:
|
|
845
|
+
return [] if detailed else '' # valid
|
|
846
|
+
except AssertionError:
|
|
847
|
+
pass # degenerate subface; treat it as degenerate
|
|
848
|
+
full_msg = self._validation_message(
|
|
849
|
+
msg, raise_exception, detailed, '000103',
|
|
850
|
+
error_type='Zero-Area Geometry')
|
|
851
|
+
return full_msg
|
|
852
|
+
return [] if detailed else ''
|
|
853
|
+
|
|
821
854
|
def display_dict(self):
|
|
822
855
|
"""Get a list of DisplayFace3D dictionaries for visualizing the object."""
|
|
823
856
|
base = [self._display_face(self.geometry, self.type_color)]
|
|
@@ -187,12 +187,7 @@ def validate_rooms_solid(model_file, json=False, output_file=None, plain_text=Tr
|
|
|
187
187
|
'of the validation. By default it will be printed out to stdout.',
|
|
188
188
|
type=click.File('w'), default='-')
|
|
189
189
|
def validate_room_collisions_cli(model_file, plain_text, output_file):
|
|
190
|
-
"""Validate whether
|
|
191
|
-
|
|
192
|
-
The returned result can include a list of all naked and non-manifold edges
|
|
193
|
-
preventing closed room volumes when --json is used. This is helpful for visually
|
|
194
|
-
identifying issues in geometry that are preventing the room volume from
|
|
195
|
-
validating as closed.
|
|
190
|
+
"""Validate whether Room collide with one another beyond the model tolerance.
|
|
196
191
|
|
|
197
192
|
\b
|
|
198
193
|
Args:
|
|
@@ -209,10 +204,7 @@ def validate_room_collisions_cli(model_file, plain_text, output_file):
|
|
|
209
204
|
|
|
210
205
|
|
|
211
206
|
def validate_room_collisions(model_file, json=False, output_file=None, plain_text=True):
|
|
212
|
-
"""
|
|
213
|
-
|
|
214
|
-
This is helpful for visually identifying issues in geometry that are preventing
|
|
215
|
-
the room volume from reading as closed.
|
|
207
|
+
"""Validate whether Room collide with one another beyond the model tolerance.
|
|
216
208
|
|
|
217
209
|
Args:
|
|
218
210
|
model_file: Full path to a Honeybee Model file.
|
|
@@ -575,6 +575,39 @@ class Door(_BaseWithShade):
|
|
|
575
575
|
return full_msg
|
|
576
576
|
return [] if detailed else ''
|
|
577
577
|
|
|
578
|
+
def check_degenerate(self, tolerance=0.01, raise_exception=True, detailed=False):
|
|
579
|
+
"""Check whether the Door is degenerate with effectively zero area.
|
|
580
|
+
|
|
581
|
+
Note that, while the Door may have an area larger than the tolerance,
|
|
582
|
+
removing colinear vertices within the tolerance would create a geometry
|
|
583
|
+
smaller than the tolerance.
|
|
584
|
+
|
|
585
|
+
Args:
|
|
586
|
+
tolerance: The minimum difference between the coordinate values of two
|
|
587
|
+
vertices at which they can be considered equivalent. Default: 0.01,
|
|
588
|
+
suitable for objects in meters.
|
|
589
|
+
raise_exception: If True, a ValueError will be raised if the object
|
|
590
|
+
intersects with itself. Default: True.
|
|
591
|
+
detailed: Boolean for whether the returned object is a detailed list of
|
|
592
|
+
dicts with error info or a string with a message. (Default: False).
|
|
593
|
+
|
|
594
|
+
Returns:
|
|
595
|
+
A string with the message or a list with a dictionary if detailed is True.
|
|
596
|
+
"""
|
|
597
|
+
msg = 'Door "{}" is degenerate and should be deleted.'.format(
|
|
598
|
+
self.full_id)
|
|
599
|
+
try: # see if it is self-intersecting because of a duplicate vertex
|
|
600
|
+
new_geo = self.geometry.remove_colinear_vertices(tolerance)
|
|
601
|
+
if new_geo.area > tolerance:
|
|
602
|
+
return [] if detailed else '' # valid
|
|
603
|
+
except AssertionError:
|
|
604
|
+
pass # degenerate subface; treat it as degenerate
|
|
605
|
+
full_msg = self._validation_message(
|
|
606
|
+
msg, raise_exception, detailed, '000103',
|
|
607
|
+
error_type='Zero-Area Geometry')
|
|
608
|
+
return full_msg
|
|
609
|
+
return [] if detailed else ''
|
|
610
|
+
|
|
578
611
|
def display_dict(self):
|
|
579
612
|
"""Get a list of DisplayFace3D dictionaries for visualizing the object."""
|
|
580
613
|
base = [self._display_face(self.geometry, self.type_color)]
|
|
@@ -130,6 +130,13 @@ class Face(_BaseWithShade):
|
|
|
130
130
|
assert data['type'] == 'Face', 'Expected Face dictionary. ' \
|
|
131
131
|
'Got {}.'.format(data['type'])
|
|
132
132
|
|
|
133
|
+
# remove any invalid holes from the geometry
|
|
134
|
+
geo_dict = data['geometry']
|
|
135
|
+
if 'holes' in geo_dict and geo_dict['holes'] is not None:
|
|
136
|
+
for i, hole_list in enumerate(geo_dict['holes']):
|
|
137
|
+
if len(hole_list) < 3:
|
|
138
|
+
geo_dict['holes'].pop(i)
|
|
139
|
+
|
|
133
140
|
# first serialize it with an outdoor boundary condition
|
|
134
141
|
face_type = face_types.by_name(data['face_type'])
|
|
135
142
|
face = cls(data['identifier'], Face3D.from_dict(data['geometry']),
|
|
@@ -2039,6 +2046,38 @@ class Face(_BaseWithShade):
|
|
|
2039
2046
|
return full_msg
|
|
2040
2047
|
return [] if detailed else ''
|
|
2041
2048
|
|
|
2049
|
+
def check_degenerate(self, tolerance=0.01, raise_exception=True, detailed=False):
|
|
2050
|
+
"""Check whether the Face is degenerate with effectively zero area.
|
|
2051
|
+
|
|
2052
|
+
Note that, while the Face may have an area larger than the tolerance,
|
|
2053
|
+
removing colinear vertices within the tolerance would create a geometry
|
|
2054
|
+
smaller than the tolerance.
|
|
2055
|
+
|
|
2056
|
+
Args:
|
|
2057
|
+
tolerance: The minimum difference between the coordinate values of two
|
|
2058
|
+
vertices at which they can be considered equivalent. Default: 0.01,
|
|
2059
|
+
suitable for objects in meters.
|
|
2060
|
+
raise_exception: If True, a ValueError will be raised if the object
|
|
2061
|
+
intersects with itself. Default: True.
|
|
2062
|
+
detailed: Boolean for whether the returned object is a detailed list of
|
|
2063
|
+
dicts with error info or a string with a message. (Default: False).
|
|
2064
|
+
|
|
2065
|
+
Returns:
|
|
2066
|
+
A string with the message or a list with a dictionary if detailed is True.
|
|
2067
|
+
"""
|
|
2068
|
+
msg = 'Face "{}" is degenerate and should be deleted.'.format(self.full_id)
|
|
2069
|
+
try: # see if it is self-intersecting because of a duplicate vertex
|
|
2070
|
+
new_geo = self.geometry.remove_colinear_vertices(tolerance)
|
|
2071
|
+
if new_geo.area > tolerance:
|
|
2072
|
+
return [] if detailed else '' # valid
|
|
2073
|
+
except AssertionError:
|
|
2074
|
+
pass # degenerate face; treat it as degenerate
|
|
2075
|
+
full_msg = self._validation_message(
|
|
2076
|
+
msg, raise_exception, detailed, '000103',
|
|
2077
|
+
error_type='Zero-Area Geometry')
|
|
2078
|
+
return full_msg
|
|
2079
|
+
return [] if detailed else ''
|
|
2080
|
+
|
|
2042
2081
|
def display_dict(self):
|
|
2043
2082
|
"""Get a list of DisplayFace3D dictionaries for visualizing the object."""
|
|
2044
2083
|
base = [self._display_face(self.punched_geometry, self.type_color)]
|
|
@@ -1155,7 +1155,7 @@ class Room(_BaseWithShade):
|
|
|
1155
1155
|
"""Remove colinear and duplicate vertices from this object's Faces and Sub-faces.
|
|
1156
1156
|
|
|
1157
1157
|
If degenerate geometry is found in the process of removing colinear vertices,
|
|
1158
|
-
an exception will be raised
|
|
1158
|
+
an exception will be raised unless delete_degenerate is True.
|
|
1159
1159
|
|
|
1160
1160
|
Args:
|
|
1161
1161
|
tolerance: The minimum distance between a vertex and the boundary segments
|
|
@@ -1628,13 +1628,19 @@ class Room(_BaseWithShade):
|
|
|
1628
1628
|
"""
|
|
1629
1629
|
# if the room has the correct number of faces, test the envelope geometry
|
|
1630
1630
|
if len(self._faces) >= 4 and self.volume > tolerance:
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1631
|
+
msgs, final_faces = [], []
|
|
1632
|
+
for face in self._faces:
|
|
1633
|
+
face_msg = face.check_degenerate(tolerance, False, detailed)
|
|
1634
|
+
if not face_msg:
|
|
1635
|
+
final_faces.append(face)
|
|
1636
|
+
msgs.append(face_msg)
|
|
1637
|
+
for ap in face._apertures:
|
|
1638
|
+
msgs.append(ap.check_degenerate(tolerance, False, detailed))
|
|
1639
|
+
for dr in face._doors:
|
|
1640
|
+
msgs.append(dr.check_degenerate(tolerance, False, detailed))
|
|
1641
|
+
if len(final_faces) < 4:
|
|
1642
|
+
deg_msg = 'Room "{}" is degenerate with zero volume. ' \
|
|
1643
|
+
'It should be deleted'.format(self.full_id)
|
|
1638
1644
|
if detailed:
|
|
1639
1645
|
deg_msg = [{
|
|
1640
1646
|
'type': 'ValidationError',
|
|
@@ -1646,9 +1652,19 @@ class Room(_BaseWithShade):
|
|
|
1646
1652
|
'element_name': [self.display_name],
|
|
1647
1653
|
'message': deg_msg
|
|
1648
1654
|
}]
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1655
|
+
msgs.append(deg_msg)
|
|
1656
|
+
full_msgs = [msg for msg in msgs if msg]
|
|
1657
|
+
if len(full_msgs) == 0:
|
|
1658
|
+
return [] if detailed else ''
|
|
1659
|
+
elif detailed:
|
|
1660
|
+
return [m for megs in full_msgs for m in megs]
|
|
1661
|
+
full_msg = 'Room "{}" contains degenerate geometry.' \
|
|
1662
|
+
'\n {}'.format(self.full_id, '\n '.join(full_msgs))
|
|
1663
|
+
if raise_exception and len(full_msgs) != 0:
|
|
1664
|
+
raise ValueError(full_msg)
|
|
1665
|
+
return full_msg
|
|
1666
|
+
|
|
1667
|
+
# otherwise, report the room as invalid
|
|
1652
1668
|
msg = 'Room "{}" is degenerate with zero volume. It should be deleted'.format(
|
|
1653
1669
|
self.full_id)
|
|
1654
1670
|
return self._validation_message(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: honeybee-core
|
|
3
|
-
Version: 1.61.
|
|
3
|
+
Version: 1.61.18
|
|
4
4
|
Summary: A library to create 3D building geometry for various types of environmental simulation.
|
|
5
5
|
Home-page: https://github.com/ladybug-tools/honeybee-core
|
|
6
6
|
Author: Ladybug Tools
|
|
@@ -14,7 +14,7 @@ Classifier: License :: OSI Approved :: GNU Affero General Public License v3
|
|
|
14
14
|
Classifier: Operating System :: OS Independent
|
|
15
15
|
Description-Content-Type: text/markdown
|
|
16
16
|
License-File: LICENSE
|
|
17
|
-
Requires-Dist: ladybug-core==0.44.
|
|
17
|
+
Requires-Dist: ladybug-core==0.44.12
|
|
18
18
|
Requires-Dist: ladybug-geometry-polyskel==1.7.25
|
|
19
19
|
Requires-Dist: honeybee-schema==1.59.0; python_version >= "3.7"
|
|
20
20
|
|
|
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.16 → honeybee_core-1.61.18}/tests/json/minor_geometry/existing_model.hbjson
RENAMED
|
File without changes
|
{honeybee_core-1.61.16 → honeybee_core-1.61.18}/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
|