honeybee-core 1.64.1__tar.gz → 1.64.3__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.
Files changed (111) hide show
  1. {honeybee_core-1.64.1/honeybee_core.egg-info → honeybee_core-1.64.3}/PKG-INFO +1 -1
  2. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/model.py +89 -4
  3. {honeybee_core-1.64.1 → honeybee_core-1.64.3/honeybee_core.egg-info}/PKG-INFO +1 -1
  4. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/.github/workflows/ci.yaml +0 -0
  5. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/.github/workflows/dependency-release.yaml +0 -0
  6. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/.gitignore +0 -0
  7. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/.releaserc.json +0 -0
  8. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/CODE_OF_CONDUCT.md +0 -0
  9. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/CONTRIBUTING.md +0 -0
  10. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/LICENSE +0 -0
  11. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/MANIFEST.in +0 -0
  12. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/README.md +0 -0
  13. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/deploy.sh +0 -0
  14. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/dev-requirements.txt +0 -0
  15. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/docs/_build/.nojekyll +0 -0
  16. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/docs/_build/README.md +0 -0
  17. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/docs/_build/docs/README.md +0 -0
  18. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/docs/_static/custom.css +0 -0
  19. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/docs/_templates/layout.html +0 -0
  20. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/docs/cli/index.rst +0 -0
  21. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/docs/conf.py +0 -0
  22. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/docs/index.rst +0 -0
  23. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/__init__.py +0 -0
  24. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/__main__.py +0 -0
  25. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/_base.py +0 -0
  26. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/_basewithshade.py +0 -0
  27. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/_lockable.py +0 -0
  28. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/altnumber.py +0 -0
  29. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/aperture.py +0 -0
  30. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/boundarycondition.py +0 -0
  31. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/checkdup.py +0 -0
  32. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/cli/__init__.py +0 -0
  33. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/cli/compare.py +0 -0
  34. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/cli/create.py +0 -0
  35. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/cli/edit.py +0 -0
  36. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/cli/lib.py +0 -0
  37. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/cli/setconfig.py +0 -0
  38. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/cli/validate.py +0 -0
  39. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/colorobj.py +0 -0
  40. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/config.json +0 -0
  41. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/config.py +0 -0
  42. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/dictutil.py +0 -0
  43. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/door.py +0 -0
  44. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/extensionutil.py +0 -0
  45. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/face.py +0 -0
  46. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/facetype.py +0 -0
  47. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/logutil.py +0 -0
  48. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/orientation.py +0 -0
  49. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/properties.py +0 -0
  50. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/room.py +0 -0
  51. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/search.py +0 -0
  52. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/shade.py +0 -0
  53. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/shademesh.py +0 -0
  54. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/typing.py +0 -0
  55. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/units.py +0 -0
  56. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/writer/__init__.py +0 -0
  57. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/writer/aperture.py +0 -0
  58. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/writer/door.py +0 -0
  59. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/writer/face.py +0 -0
  60. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/writer/model.py +0 -0
  61. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/writer/room.py +0 -0
  62. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/writer/shade.py +0 -0
  63. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee/writer/shademesh.py +0 -0
  64. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee_core.egg-info/SOURCES.txt +0 -0
  65. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee_core.egg-info/dependency_links.txt +0 -0
  66. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee_core.egg-info/entry_points.txt +0 -0
  67. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee_core.egg-info/requires.txt +0 -0
  68. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/honeybee_core.egg-info/top_level.txt +0 -0
  69. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/requirements.txt +0 -0
  70. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/setup.cfg +0 -0
  71. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/setup.py +0 -0
  72. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/__init__.py +0 -0
  73. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/aperture_test.py +0 -0
  74. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/boundary_condition_test.py +0 -0
  75. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/cli_compare_test.py +0 -0
  76. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/cli_create_test.py +0 -0
  77. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/cli_edit_test.py +0 -0
  78. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/cli_validate_test.py +0 -0
  79. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/colorobj_test.py +0 -0
  80. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/config_test.py +0 -0
  81. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/dictutil_test.py +0 -0
  82. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/door_test.py +0 -0
  83. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/face_test.py +0 -0
  84. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/facetype_test.py +0 -0
  85. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/json/ShoeBox.json +0 -0
  86. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/json/bad_geometry_model.hbjson +0 -0
  87. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/json/colliding_room_volumes.hbjson +0 -0
  88. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/json/compare_model_1.hbjson +0 -0
  89. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/json/compare_model_2.hbjson +0 -0
  90. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/json/complex_polyfaces.json +0 -0
  91. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/json/minor_geometry/existing_model.hbjson +0 -0
  92. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/json/minor_geometry/updated_model.hbjson +0 -0
  93. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/json/mismatched_area_adj.hbjson +0 -0
  94. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/json/model_with_adiabatic.hbjson +0 -0
  95. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/json/model_with_holes.hbjson +0 -0
  96. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/json/model_without_adjacency.hbjson +0 -0
  97. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/json/nonascii_face.json +0 -0
  98. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/json/polygons_for_gap_boundary.json +0 -0
  99. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/json/room_for_window_offset.hbjson +0 -0
  100. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/json/single_family_home.hbjson +0 -0
  101. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/lockable_test.py +0 -0
  102. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/model_test.py +0 -0
  103. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/orientation_test.py +0 -0
  104. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/room_test.py +0 -0
  105. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/search_test.py +0 -0
  106. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/shade_test.py +0 -0
  107. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/shademesh_test.py +0 -0
  108. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/stl/cube_ascii.stl +0 -0
  109. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/stl/cube_binary.stl +0 -0
  110. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/typing_test.py +0 -0
  111. {honeybee_core-1.64.1 → honeybee_core-1.64.3}/tests/units_test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: honeybee-core
3
- Version: 1.64.1
3
+ Version: 1.64.3
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
@@ -13,7 +13,9 @@ try: # check if we are in IronPython
13
13
  except ImportError: # wea are in cPython
14
14
  import pickle
15
15
 
16
- from ladybug_geometry.geometry3d import Vector3D, Point3D, Plane, Face3D, Mesh3D
16
+ from ladybug_geometry.geometry2d import Polygon2D
17
+ from ladybug_geometry.geometry3d import Vector3D, Point3D, Plane, Face3D, \
18
+ Mesh3D, Polyface3D
17
19
  from ladybug_geometry.interop.stl import STL
18
20
 
19
21
  from ._base import _Base
@@ -1476,7 +1478,7 @@ class Model(_Base):
1476
1478
  )
1477
1479
  return shades
1478
1480
 
1479
- def classified_envelope_edges(self, tolerance=None, exclude_coplanar=False):
1481
+ def classified_envelope_edges(self, tolerance=None, exclude_coplanar=True):
1480
1482
  """Get classified edges of this Model's envelope based on Faces they adjoin.
1481
1483
 
1482
1484
  The edges returned by this method will only exist along the exterior
@@ -1488,7 +1490,7 @@ class Model(_Base):
1488
1490
  considered equivalent. If None, the Model's tolerance will be used.
1489
1491
  exclude_coplanar: Boolean to note whether edges falling between two
1490
1492
  coplanar Faces in the building envelope should be included
1491
- in the result (False) or excluded from it (True). (Default: False).
1493
+ in the result (False) or excluded from it (True). (Default: True).
1492
1494
 
1493
1495
  Returns:
1494
1496
  A tuple with eight items where each item is a list containing
@@ -1533,6 +1535,89 @@ class Model(_Base):
1533
1535
  return roof_to_exterior, slab_to_exterior, exposed_floor_to_exterior_wall, \
1534
1536
  exterior_wall_to_wall, roof_ridge, exposed_floor_to_floor, underground
1535
1537
 
1538
+ def classified_sub_face_edges(
1539
+ self, mullion_thickness=None, tolerance=None, angle_tolerance=None
1540
+ ):
1541
+ """Get classified edges around this Model's Apertures and Doors.
1542
+
1543
+ The edges returned by this method will only exist along the exterior
1544
+ sub-faces.
1545
+
1546
+ Args:
1547
+ mullion_thickness: The maximum difference that apertures can be from
1548
+ one another for the edges to be considered a mullion rather than
1549
+ a frame. If None, the Model's tolerance will be used.
1550
+ tolerance: The maximum difference between point values for them to be
1551
+ considered equivalent. If None, the Model's tolerance will be used.
1552
+ angle_tolerance: The max angle difference in degrees where sub-face
1553
+ normals are no longer considered coplanar. If None, the Model
1554
+ angle_tolerance will be used. (Default: None).
1555
+
1556
+ Returns:
1557
+ A tuple with three items where each item is a list containing
1558
+ LineSegment3D surrounding different sub-face conditions.
1559
+
1560
+ - window_frames - Apertures meet their parent exterior wall or roof.
1561
+
1562
+ - window_mullions - Apertures meet one another.
1563
+
1564
+ - door_frames - Doors meet their parent exterior wall or roof.
1565
+
1566
+ - door_mullions - Doors meet one another.
1567
+ """
1568
+ # set up variables to be used for all sub_faces
1569
+ tol = tolerance if tolerance is not None else self.tolerance
1570
+ a_tol = math.radians(angle_tolerance) if angle_tolerance is not None else \
1571
+ math.radians(self.angle_tolerance)
1572
+ mul_thick = tol if mullion_thickness is None else mullion_thickness
1573
+
1574
+ # get the edges of the sub_faces
1575
+ window_frames, window_mullions = \
1576
+ self._classify_mullions(self.apertures, mul_thick, tol, a_tol)
1577
+ door_frames, door_mullions = \
1578
+ self._classify_mullions(self.doors, mul_thick, tol, a_tol)
1579
+ return window_frames, window_mullions, door_frames, door_mullions
1580
+
1581
+ @staticmethod
1582
+ def _classify_mullions(sub_faces, mul_thick, tol, a_tol):
1583
+ """Organize subface edges depending on whether they are frames or mullions."""
1584
+ sub_face_frames, sub_face_mullions = [], []
1585
+ # group the apertures by the plane in which they exist
1586
+ coplanar_dict = {}
1587
+ sub_faces = [sf for sf in sub_faces
1588
+ if isinstance(sf.boundary_condition, Outdoors)]
1589
+ if len(sub_faces) != 0:
1590
+ coplanar_dict = {sub_faces[0].geometry.plane: [sub_faces[0]]}
1591
+ for sf in sub_faces[1:]:
1592
+ for pln, f_list in coplanar_dict.items():
1593
+ if sf.geometry.plane.is_coplanar_tolerance(pln, tol, a_tol):
1594
+ f_list.append(sf)
1595
+ break
1596
+ else: # the first face with this type of plane
1597
+ coplanar_dict[sf.geometry.plane] = [sf]
1598
+
1599
+ # for each group, intersect their edges and extract edges from a Polyface3D
1600
+ for plane, sfs in coplanar_dict.items():
1601
+ # intersect edges that are close enough to one another within thickness
1602
+ polygons = []
1603
+ for sf in sfs:
1604
+ pts_2d = [plane.xyz_to_xy(pt) for pt in sf.geometry.boundary]
1605
+ try:
1606
+ poly = Polygon2D(pts_2d).remove_colinear_vertices(mul_thick)
1607
+ polygons.append(poly)
1608
+ except AssertionError:
1609
+ pass # too small of a geometry
1610
+ polygons = Polygon2D.intersect_polygon_segments(polygons, mul_thick)
1611
+ faces = []
1612
+ for poly in polygons:
1613
+ faces.append(Face3D([plane.xy_to_xyz(pt) for pt in poly], plane))
1614
+ # create a joined Polyface3D and classify the edges
1615
+ ap_polyface = Polyface3D.from_faces(faces, mul_thick)
1616
+ sub_face_frames.extend(ap_polyface.naked_edges)
1617
+ sub_face_mullions.extend(ap_polyface.internal_edges)
1618
+
1619
+ return sub_face_frames, sub_face_mullions
1620
+
1536
1621
  def add_prefix(self, prefix):
1537
1622
  """Change the identifier of this object and child objects by inserting a prefix.
1538
1623
 
@@ -1650,7 +1735,7 @@ class Model(_Base):
1650
1735
 
1651
1736
  Args:
1652
1737
  start_integer: The starting integer that will be used to set a lower
1653
- limit on the
1738
+ limit on the integers assigned to the geometry elements.
1654
1739
  repair_surface_bcs: A Boolean to note whether all Surface boundary
1655
1740
  conditions across the model should be updated with the new
1656
1741
  identifiers that were generated from the display names. (Default: True).
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: honeybee-core
3
- Version: 1.64.1
3
+ Version: 1.64.3
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
File without changes
File without changes
File without changes
File without changes
File without changes