honeybee-core 1.64.0__tar.gz → 1.64.1__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.0/honeybee_core.egg-info → honeybee_core-1.64.1}/PKG-INFO +1 -1
  2. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/model.py +111 -46
  3. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/shademesh.py +17 -0
  4. {honeybee_core-1.64.0 → honeybee_core-1.64.1/honeybee_core.egg-info}/PKG-INFO +1 -1
  5. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/model_test.py +18 -0
  6. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/.github/workflows/ci.yaml +0 -0
  7. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/.github/workflows/dependency-release.yaml +0 -0
  8. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/.gitignore +0 -0
  9. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/.releaserc.json +0 -0
  10. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/CODE_OF_CONDUCT.md +0 -0
  11. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/CONTRIBUTING.md +0 -0
  12. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/LICENSE +0 -0
  13. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/MANIFEST.in +0 -0
  14. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/README.md +0 -0
  15. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/deploy.sh +0 -0
  16. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/dev-requirements.txt +0 -0
  17. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/docs/_build/.nojekyll +0 -0
  18. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/docs/_build/README.md +0 -0
  19. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/docs/_build/docs/README.md +0 -0
  20. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/docs/_static/custom.css +0 -0
  21. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/docs/_templates/layout.html +0 -0
  22. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/docs/cli/index.rst +0 -0
  23. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/docs/conf.py +0 -0
  24. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/docs/index.rst +0 -0
  25. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/__init__.py +0 -0
  26. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/__main__.py +0 -0
  27. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/_base.py +0 -0
  28. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/_basewithshade.py +0 -0
  29. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/_lockable.py +0 -0
  30. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/altnumber.py +0 -0
  31. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/aperture.py +0 -0
  32. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/boundarycondition.py +0 -0
  33. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/checkdup.py +0 -0
  34. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/cli/__init__.py +0 -0
  35. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/cli/compare.py +0 -0
  36. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/cli/create.py +0 -0
  37. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/cli/edit.py +0 -0
  38. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/cli/lib.py +0 -0
  39. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/cli/setconfig.py +0 -0
  40. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/cli/validate.py +0 -0
  41. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/colorobj.py +0 -0
  42. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/config.json +0 -0
  43. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/config.py +0 -0
  44. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/dictutil.py +0 -0
  45. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/door.py +0 -0
  46. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/extensionutil.py +0 -0
  47. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/face.py +0 -0
  48. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/facetype.py +0 -0
  49. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/logutil.py +0 -0
  50. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/orientation.py +0 -0
  51. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/properties.py +0 -0
  52. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/room.py +0 -0
  53. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/search.py +0 -0
  54. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/shade.py +0 -0
  55. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/typing.py +0 -0
  56. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/units.py +0 -0
  57. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/writer/__init__.py +0 -0
  58. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/writer/aperture.py +0 -0
  59. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/writer/door.py +0 -0
  60. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/writer/face.py +0 -0
  61. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/writer/model.py +0 -0
  62. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/writer/room.py +0 -0
  63. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/writer/shade.py +0 -0
  64. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee/writer/shademesh.py +0 -0
  65. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee_core.egg-info/SOURCES.txt +0 -0
  66. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee_core.egg-info/dependency_links.txt +0 -0
  67. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee_core.egg-info/entry_points.txt +0 -0
  68. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee_core.egg-info/requires.txt +0 -0
  69. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/honeybee_core.egg-info/top_level.txt +0 -0
  70. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/requirements.txt +0 -0
  71. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/setup.cfg +0 -0
  72. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/setup.py +0 -0
  73. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/__init__.py +0 -0
  74. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/aperture_test.py +0 -0
  75. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/boundary_condition_test.py +0 -0
  76. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/cli_compare_test.py +0 -0
  77. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/cli_create_test.py +0 -0
  78. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/cli_edit_test.py +0 -0
  79. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/cli_validate_test.py +0 -0
  80. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/colorobj_test.py +0 -0
  81. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/config_test.py +0 -0
  82. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/dictutil_test.py +0 -0
  83. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/door_test.py +0 -0
  84. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/face_test.py +0 -0
  85. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/facetype_test.py +0 -0
  86. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/json/ShoeBox.json +0 -0
  87. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/json/bad_geometry_model.hbjson +0 -0
  88. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/json/colliding_room_volumes.hbjson +0 -0
  89. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/json/compare_model_1.hbjson +0 -0
  90. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/json/compare_model_2.hbjson +0 -0
  91. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/json/complex_polyfaces.json +0 -0
  92. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/json/minor_geometry/existing_model.hbjson +0 -0
  93. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/json/minor_geometry/updated_model.hbjson +0 -0
  94. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/json/mismatched_area_adj.hbjson +0 -0
  95. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/json/model_with_adiabatic.hbjson +0 -0
  96. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/json/model_with_holes.hbjson +0 -0
  97. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/json/model_without_adjacency.hbjson +0 -0
  98. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/json/nonascii_face.json +0 -0
  99. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/json/polygons_for_gap_boundary.json +0 -0
  100. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/json/room_for_window_offset.hbjson +0 -0
  101. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/json/single_family_home.hbjson +0 -0
  102. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/lockable_test.py +0 -0
  103. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/orientation_test.py +0 -0
  104. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/room_test.py +0 -0
  105. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/search_test.py +0 -0
  106. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/shade_test.py +0 -0
  107. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/shademesh_test.py +0 -0
  108. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/stl/cube_ascii.stl +0 -0
  109. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/stl/cube_binary.stl +0 -0
  110. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/tests/typing_test.py +0 -0
  111. {honeybee_core-1.64.0 → honeybee_core-1.64.1}/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.0
3
+ Version: 1.64.1
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
@@ -1559,6 +1559,25 @@ class Model(_Base):
1559
1559
  for shade_mesh in self._shade_meshes:
1560
1560
  shade_mesh.add_prefix(prefix)
1561
1561
 
1562
+ def reset_room_ids(self):
1563
+ """Reset the identifiers of the Model Rooms to be derived from display_names.
1564
+
1565
+ In the event that duplicate Room identifiers are found, an integer will
1566
+ be automatically appended to the new Room ID to make it unique.
1567
+
1568
+ Returns:
1569
+ A dictionary that relates the old identifiers (keys) to the new
1570
+ identifiers (values). This can be used to map between old and new
1571
+ objects and update things like Surface boundary conditions.
1572
+ """
1573
+ room_dict, room_map = {}, {}
1574
+ for room in self.rooms:
1575
+ new_id = clean_and_number_string(
1576
+ room.display_name, room_dict, 'Room identifier')
1577
+ room_map[room.identifier] = new_id
1578
+ room.identifier = new_id
1579
+ return room_map
1580
+
1562
1581
  def reset_ids(self, repair_surface_bcs=True):
1563
1582
  """Reset the identifiers of all Model objects to be derived from display_names.
1564
1583
 
@@ -1613,39 +1632,7 @@ class Model(_Base):
1613
1632
  shade_mesh.display_name, sm_dict, 'ShadeMesh identifier')
1614
1633
  # reset all of the Surface boundary conditions if requested
1615
1634
  if repair_surface_bcs:
1616
- for room in self.rooms:
1617
- for face in room.faces:
1618
- if isinstance(face.boundary_condition, Surface):
1619
- old_objs = face.boundary_condition.boundary_condition_objects
1620
- try:
1621
- new_objs = (face_map[old_objs[0]], room_map[old_objs[1]])
1622
- except KeyError: # missing adjacency
1623
- try: # see if maybe the room reference is still there
1624
- new_objs = (old_objs[0], room_map[old_objs[1]])
1625
- except KeyError: # just let the invalid adjacency pass
1626
- continue
1627
- new_bc = Surface(new_objs)
1628
- face.boundary_condition = new_bc
1629
- for ap in face.apertures:
1630
- old_objs = ap.boundary_condition.boundary_condition_objects
1631
- try:
1632
- new_objs = (ap_map[old_objs[0]], face_map[old_objs[1]],
1633
- room_map[old_objs[2]])
1634
- except KeyError: # missing adjacency
1635
- new_objs = (old_objs[0], old_objs[1],
1636
- room_map[old_objs[2]])
1637
- new_bc = Surface(new_objs, True)
1638
- ap.boundary_condition = new_bc
1639
- for dr in face.doors:
1640
- old_objs = dr.boundary_condition.boundary_condition_objects
1641
- try:
1642
- new_objs = (dr_map[old_objs[0]], face_map[old_objs[1]],
1643
- room_map[old_objs[2]])
1644
- except KeyError: # missing adjacency
1645
- new_objs = (old_objs[0], old_objs[1],
1646
- room_map[old_objs[2]])
1647
- new_bc = Surface(new_objs, True)
1648
- dr.boundary_condition = new_bc
1635
+ self._repair_surface_bcs(room_map, face_map, ap_map, dr_map)
1649
1636
  # return a dictionary that maps between old and new IDs
1650
1637
  return {
1651
1638
  'rooms': room_map,
@@ -1654,24 +1641,90 @@ class Model(_Base):
1654
1641
  'doors': dr_map
1655
1642
  }
1656
1643
 
1657
- def reset_room_ids(self):
1658
- """Reset the identifiers of the Model Rooms to be derived from display_names.
1644
+ def reset_ids_to_integers(self, start_integer=0, repair_surface_bcs=True):
1645
+ """Reset the identifiers of all Model geometry objects to be a unique integer.
1659
1646
 
1660
- In the event that duplicate Room identifiers are found, an integer will
1661
- be automatically appended to the new Room ID to make it unique.
1647
+ Integers are simply incremented from the start_integer, assigning integers
1648
+ first to Rooms, then to Faces, then to Apertures/Doors and lastly to
1649
+ Shades/ShadeMeshes.
1650
+
1651
+ Args:
1652
+ start_integer: The starting integer that will be used to set a lower
1653
+ limit on the
1654
+ repair_surface_bcs: A Boolean to note whether all Surface boundary
1655
+ conditions across the model should be updated with the new
1656
+ identifiers that were generated from the display names. (Default: True).
1662
1657
 
1663
1658
  Returns:
1664
- A dictionary that relates the old identifiers (keys) to the new
1665
- identifiers (values). This can be used to map between old and new
1666
- objects and update things like Surface boundary conditions.
1659
+ An integer for the last value assigned to the model geometry objects.
1660
+ This can be used to ensure that any future IDs assigned after running
1661
+ this method do not have IDs that collide with the model objects.
1667
1662
  """
1668
- room_dict, room_map = {}, {}
1663
+ # set up dictionaries to hold various pieces of information
1664
+ room_map, face_map, ap_map, dr_map = {}, {}, {}, {}
1665
+ # loop through the objects and change their identifiers
1669
1666
  for room in self.rooms:
1670
- new_id = clean_and_number_string(
1671
- room.display_name, room_dict, 'Room identifier')
1672
- room_map[room.identifier] = new_id
1673
- room.identifier = new_id
1674
- return room_map
1667
+ room_map[room.identifier] = str(start_integer)
1668
+ room.identifier = str(start_integer)
1669
+ start_integer += 1
1670
+ for face in self.faces:
1671
+ face_map[face.identifier] = str(start_integer)
1672
+ face.identifier = str(start_integer)
1673
+ start_integer += 1
1674
+ for ap in self.apertures:
1675
+ ap_map[ap.identifier] = str(start_integer)
1676
+ ap.identifier = str(start_integer)
1677
+ start_integer += 1
1678
+ for dr in self.doors:
1679
+ dr_map[dr.identifier] = str(start_integer)
1680
+ dr.identifier = str(start_integer)
1681
+ start_integer += 1
1682
+ for shade in self.shades:
1683
+ shade.identifier = str(start_integer)
1684
+ start_integer += 1
1685
+ for shade_mesh in self.shade_meshes:
1686
+ shade_mesh.identifier = str(start_integer)
1687
+ start_integer += 1
1688
+ # reset all of the Surface boundary conditions if requested
1689
+ if repair_surface_bcs:
1690
+ self._repair_surface_bcs(room_map, face_map, ap_map, dr_map)
1691
+ return start_integer
1692
+
1693
+ def _repair_surface_bcs(self, room_map, face_map, ap_map, dr_map):
1694
+ """Repair Surface boundary conditions across the model using dict maps."""
1695
+ for room in self.rooms:
1696
+ for face in room.faces:
1697
+ if isinstance(face.boundary_condition, Surface):
1698
+ old_objs = face.boundary_condition.boundary_condition_objects
1699
+ try:
1700
+ new_objs = (face_map[old_objs[0]], room_map[old_objs[1]])
1701
+ except KeyError: # missing adjacency
1702
+ try: # see if maybe the room reference is still there
1703
+ new_objs = (old_objs[0], room_map[old_objs[1]])
1704
+ except KeyError: # just let the invalid adjacency pass
1705
+ continue
1706
+ new_bc = Surface(new_objs)
1707
+ face.boundary_condition = new_bc
1708
+ for ap in face.apertures:
1709
+ old_objs = ap.boundary_condition.boundary_condition_objects
1710
+ try:
1711
+ new_objs = (ap_map[old_objs[0]], face_map[old_objs[1]],
1712
+ room_map[old_objs[2]])
1713
+ except KeyError: # missing adjacency
1714
+ new_objs = (old_objs[0], old_objs[1],
1715
+ room_map[old_objs[2]])
1716
+ new_bc = Surface(new_objs, True)
1717
+ ap.boundary_condition = new_bc
1718
+ for dr in face.doors:
1719
+ old_objs = dr.boundary_condition.boundary_condition_objects
1720
+ try:
1721
+ new_objs = (dr_map[old_objs[0]], face_map[old_objs[1]],
1722
+ room_map[old_objs[2]])
1723
+ except KeyError: # missing adjacency
1724
+ new_objs = (old_objs[0], old_objs[1],
1725
+ room_map[old_objs[2]])
1726
+ new_bc = Surface(new_objs, True)
1727
+ dr.boundary_condition = new_bc
1675
1728
 
1676
1729
  def solve_adjacency(
1677
1730
  self, merge_coplanar=False, intersect=False, overwrite=False,
@@ -2181,6 +2234,18 @@ class Model(_Base):
2181
2234
  extrusion_rooms.append(room.to_extrusion(tol, a_tol))
2182
2235
  self._rooms = extrusion_rooms
2183
2236
 
2237
+ def shade_meshes_to_shades(self):
2238
+ """Convert all ShadeMesh objects on the Model to planar Shades."""
2239
+ new_shades = []
2240
+ for shade_mesh in self.shade_meshes:
2241
+ try:
2242
+ shade_mesh.triangulate_and_remove_degenerate_faces(self.tolerance)
2243
+ new_shades.extend(shade_mesh.to_shades())
2244
+ except AssertionError:
2245
+ pass # completely degenerate ShadeMesh to ignore
2246
+ self._orphaned_shades.extend(new_shades)
2247
+ self._shade_meshes = []
2248
+
2184
2249
  def convert_to_units(self, units='Meters'):
2185
2250
  """Convert all of the geometry in this model to certain units.
2186
2251
 
@@ -324,6 +324,23 @@ class ShadeMesh(_Base):
324
324
  base['user_data'] = self.user_data
325
325
  return base
326
326
 
327
+ def to_shades(self):
328
+ """Return a list of Honeybee Shade objects derived from this ShadeMesh.
329
+
330
+ Note that the resulting Shades may be degenerate or non-planar so it
331
+ may be useful to call triangulate_and_remove_degenerate_faces on this
332
+ object before converting to Shades.
333
+ """
334
+ from honeybee.shade import Shade # imported here to avoid circular import
335
+ shades = []
336
+ for i, shade_geo in enumerate(self.geometry.face_vertices):
337
+ shade_id = '{}_{}'.format(self.identifier, i)
338
+ shade = Shade(shade_id, Face3D(shade_geo), self.is_detached)
339
+ if self._display_name is not None:
340
+ shade.display_name = '{} {}'.format(self.display_name, i)
341
+ shades.append(shade)
342
+ return shades
343
+
327
344
  @staticmethod
328
345
  def _display_mesh(mesh3d, color):
329
346
  """Create a DisplayMesh3D dictionary from a Mesh3D and color."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: honeybee-core
3
- Version: 1.64.0
3
+ Version: 1.64.1
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
@@ -399,6 +399,18 @@ def test_reset_ids():
399
399
  assert new_model.check_missing_adjacencies() == ''
400
400
 
401
401
 
402
+ def test_reset_ids_to_integers():
403
+ """Test the reset_ids_to_integers method."""
404
+ model_json = './tests/json/model_with_adiabatic.hbjson'
405
+ parsed_model = Model.from_hbjson(model_json, cleanup_irrational=True)
406
+
407
+ new_model = parsed_model.duplicate()
408
+ new_model.reset_ids_to_integers(True)
409
+
410
+ assert new_model.rooms[0].identifier != parsed_model.rooms[0].identifier
411
+ assert new_model.check_missing_adjacencies() == ''
412
+
413
+
402
414
  def test_offset_aperture_edges():
403
415
  """Test the Face offset_aperture_edges method."""
404
416
  model_json = './tests/json/room_for_window_offset.hbjson'
@@ -588,6 +600,12 @@ def test_remove_degenerate_geometry():
588
600
  model.remove_degenerate_geometry()
589
601
  assert len(model.shade_meshes) == 1
590
602
 
603
+ model = Model('MultiZoneSingleFamilyHouse',
604
+ [first_floor, second_floor], shade_meshes=[shade1, shade2])
605
+ model.shade_meshes_to_shades()
606
+ assert len(model.shade_meshes) == 0
607
+ assert len(model.orphaned_shades) == 2
608
+
591
609
 
592
610
  def test_assign_stories_by_floor_height():
593
611
  """Test the Model assign_stories_by_floor_height method."""
File without changes
File without changes
File without changes
File without changes
File without changes