honeybee-openstudio 0 → 1.8.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (132) hide show
  1. checksums.yaml +5 -5
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +32 -33
  4. data/.releaserc.json +7 -7
  5. data/.travis.yml +41 -0
  6. data/Gemfile +18 -14
  7. data/LICENSE.md +23 -23
  8. data/README.md +95 -95
  9. data/Rakefile +21 -16
  10. data/doc_templates/LICENSE.md +23 -23
  11. data/doc_templates/copyright_erb.txt +31 -31
  12. data/doc_templates/copyright_js.txt +4 -4
  13. data/doc_templates/copyright_ruby.txt +29 -29
  14. data/honeybee-openstudio.gemspec +35 -38
  15. data/lib/files/Honeybee.rb +112 -112
  16. data/lib/files/honeybee_workflow.osw +47 -47
  17. data/lib/files/urbanopt_Gemfile +32 -32
  18. data/lib/{honeybee/_defaults → from_honeybee/_openapi}/model.json +8126 -11310
  19. data/lib/{honeybee/_defaults → from_honeybee/_openapi}/simulation-parameter.json +842 -972
  20. data/lib/{to_openstudio → from_honeybee}/construction/air.rb +65 -56
  21. data/lib/{to_openstudio → from_honeybee}/construction/opaque.rb +77 -67
  22. data/lib/{to_openstudio → from_honeybee}/construction/shade.rb +108 -99
  23. data/lib/{to_openstudio → from_honeybee}/construction/window.rb +80 -70
  24. data/lib/{to_openstudio → from_honeybee}/construction_set.rb +278 -266
  25. data/lib/{honeybee → from_honeybee}/extension.rb +109 -129
  26. data/lib/{to_openstudio → from_honeybee}/geometry/aperture.rb +167 -157
  27. data/lib/{to_openstudio → from_honeybee}/geometry/door.rb +160 -150
  28. data/lib/{to_openstudio → from_honeybee}/geometry/face.rb +163 -178
  29. data/lib/{to_openstudio → from_honeybee}/geometry/room.rb +392 -442
  30. data/lib/{to_openstudio → from_honeybee}/geometry/shade.rb +89 -79
  31. data/lib/{to_openstudio → from_honeybee}/hvac/ideal_air.rb +150 -141
  32. data/lib/{to_openstudio → from_honeybee}/load/electric_equipment.rb +96 -87
  33. data/lib/{to_openstudio → from_honeybee}/load/gas_equipment.rb +97 -88
  34. data/lib/{to_openstudio → from_honeybee}/load/infiltration.rb +94 -85
  35. data/lib/{to_openstudio → from_honeybee}/load/lighting.rb +98 -89
  36. data/lib/{to_openstudio → from_honeybee}/load/people.rb +100 -91
  37. data/lib/{to_openstudio → from_honeybee}/load/setpoint_humidistat.rb +75 -66
  38. data/lib/{to_openstudio → from_honeybee}/load/setpoint_thermostat.rb +71 -62
  39. data/lib/{to_openstudio → from_honeybee}/load/ventilation.rb +96 -87
  40. data/lib/{to_openstudio → from_honeybee}/material/opaque.rb +94 -85
  41. data/lib/{to_openstudio → from_honeybee}/material/opaque_no_mass.rb +94 -85
  42. data/lib/{to_openstudio → from_honeybee}/material/window_blind.rb +238 -229
  43. data/lib/{to_openstudio → from_honeybee}/material/window_gas.rb +76 -67
  44. data/lib/{to_openstudio → from_honeybee}/material/window_gas_custom.rb +118 -108
  45. data/lib/{to_openstudio → from_honeybee}/material/window_gas_mixture.rb +79 -70
  46. data/lib/{to_openstudio → from_honeybee}/material/window_glazing.rb +166 -157
  47. data/lib/{to_openstudio → from_honeybee}/material/window_shade.rb +160 -151
  48. data/lib/{to_openstudio → from_honeybee}/material/window_simpleglazsys.rb +73 -64
  49. data/lib/from_honeybee/model.rb +434 -0
  50. data/lib/{honeybee → from_honeybee}/model_object.rb +110 -108
  51. data/lib/{to_openstudio → from_honeybee}/program_type.rb +124 -104
  52. data/lib/{to_openstudio → from_honeybee}/schedule/fixed_interval.rb +115 -105
  53. data/lib/{to_openstudio → from_honeybee}/schedule/ruleset.rb +164 -164
  54. data/lib/{to_openstudio → from_honeybee}/schedule/type_limit.rb +88 -76
  55. data/lib/{to_openstudio/simulation/design_day.rb → from_honeybee/simulation/designday.rb} +105 -96
  56. data/lib/{honeybee/load/lighting.rb → from_honeybee/simulation/extension.rb} +46 -43
  57. data/lib/{to_openstudio/simulation/parameter_model.rb → from_honeybee/simulation/parameter.rb} +277 -243
  58. data/lib/{honeybee/simulation/design_day.rb → from_honeybee/version.rb} +34 -42
  59. data/lib/{honeybee.rb → from_honeybee.rb} +86 -93
  60. data/lib/measures/from_honeybee_model/LICENSE.md +27 -23
  61. data/lib/measures/from_honeybee_model/README.md +32 -32
  62. data/lib/measures/from_honeybee_model/measure.rb +91 -91
  63. data/lib/measures/from_honeybee_model/measure.xml +103 -80
  64. data/lib/measures/from_honeybee_model/tests/from_honeybee_model_test.rb +126 -126
  65. data/lib/measures/from_honeybee_simulation_parameter/LICENSE.md +27 -23
  66. data/lib/measures/from_honeybee_simulation_parameter/README.md +32 -32
  67. data/lib/measures/from_honeybee_simulation_parameter/measure.rb +95 -95
  68. data/lib/measures/from_honeybee_simulation_parameter/measure.xml +91 -86
  69. data/lib/measures/from_honeybee_simulation_parameter/tests/from_honeybee_simulation_parameter_test.rb +109 -109
  70. metadata +89 -147
  71. data/.github/workflows/ci.yaml +0 -88
  72. data/doc_templates/README.md.erb +0 -42
  73. data/lib/from_openstudio/geometry/aperture.rb +0 -136
  74. data/lib/from_openstudio/geometry/door.rb +0 -136
  75. data/lib/from_openstudio/geometry/face.rb +0 -174
  76. data/lib/from_openstudio/geometry/room.rb +0 -121
  77. data/lib/from_openstudio/geometry/shade.rb +0 -87
  78. data/lib/from_openstudio/model.rb +0 -123
  79. data/lib/from_openstudio/model_object.rb +0 -43
  80. data/lib/from_openstudio/simulation/design_day.rb +0 -123
  81. data/lib/from_openstudio/simulation/parameter_model.rb +0 -93
  82. data/lib/from_openstudio/simulation/simulation_output.rb +0 -67
  83. data/lib/from_openstudio.rb +0 -49
  84. data/lib/honeybee/_defaults/energy_default.json +0 -1682
  85. data/lib/honeybee/construction/air.rb +0 -42
  86. data/lib/honeybee/construction/opaque.rb +0 -42
  87. data/lib/honeybee/construction/shade.rb +0 -42
  88. data/lib/honeybee/construction/window.rb +0 -51
  89. data/lib/honeybee/construction/windowshade.rb +0 -43
  90. data/lib/honeybee/construction_set.rb +0 -42
  91. data/lib/honeybee/geometry/aperture.rb +0 -42
  92. data/lib/honeybee/geometry/door.rb +0 -42
  93. data/lib/honeybee/geometry/face.rb +0 -48
  94. data/lib/honeybee/geometry/room.rb +0 -56
  95. data/lib/honeybee/geometry/shade.rb +0 -42
  96. data/lib/honeybee/hvac/ideal_air.rb +0 -42
  97. data/lib/honeybee/hvac/template.rb +0 -73
  98. data/lib/honeybee/load/electric_equipment.rb +0 -42
  99. data/lib/honeybee/load/gas_equipment.rb +0 -42
  100. data/lib/honeybee/load/infiltration.rb +0 -42
  101. data/lib/honeybee/load/people.rb +0 -42
  102. data/lib/honeybee/load/setpoint_humidistat.rb +0 -46
  103. data/lib/honeybee/load/setpoint_thermostat.rb +0 -46
  104. data/lib/honeybee/load/ventilation.rb +0 -42
  105. data/lib/honeybee/material/opaque.rb +0 -42
  106. data/lib/honeybee/material/opaque_no_mass.rb +0 -42
  107. data/lib/honeybee/material/window_blind.rb +0 -42
  108. data/lib/honeybee/material/window_gas.rb +0 -42
  109. data/lib/honeybee/material/window_gas_custom.rb +0 -42
  110. data/lib/honeybee/material/window_gas_mixture.rb +0 -42
  111. data/lib/honeybee/material/window_glazing.rb +0 -42
  112. data/lib/honeybee/material/window_shade.rb +0 -42
  113. data/lib/honeybee/material/window_simpleglazsys.rb +0 -42
  114. data/lib/honeybee/model.rb +0 -87
  115. data/lib/honeybee/program_type.rb +0 -56
  116. data/lib/honeybee/schedule/fixed_interval.rb +0 -42
  117. data/lib/honeybee/schedule/ruleset.rb +0 -42
  118. data/lib/honeybee/schedule/type_limit.rb +0 -42
  119. data/lib/honeybee/simulation/parameter_model.rb +0 -86
  120. data/lib/honeybee/simulation/simulation_output.rb +0 -42
  121. data/lib/honeybee/ventcool/control.rb +0 -42
  122. data/lib/honeybee/ventcool/opening.rb +0 -46
  123. data/lib/honeybee/ventcool/simulation.rb +0 -42
  124. data/lib/to_openstudio/construction/windowshade.rb +0 -196
  125. data/lib/to_openstudio/hvac/Model.hvac.rb +0 -641
  126. data/lib/to_openstudio/hvac/template.rb +0 -169
  127. data/lib/to_openstudio/model.rb +0 -497
  128. data/lib/to_openstudio/model_object.rb +0 -52
  129. data/lib/to_openstudio/ventcool/control.rb +0 -185
  130. data/lib/to_openstudio/ventcool/opening.rb +0 -189
  131. data/lib/to_openstudio/ventcool/simulation.rb +0 -101
  132. data/lib/to_openstudio.rb +0 -92
@@ -1,136 +0,0 @@
1
- # *******************************************************************************
2
- # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
3
- # Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved.
4
- #
5
- # Redistribution and use in source and binary forms, with or without
6
- # modification, are permitted provided that the following conditions are met:
7
- #
8
- # (1) Redistributions of source code must retain the above copyright notice,
9
- # this list of conditions and the following disclaimer.
10
- #
11
- # (2) Redistributions in binary form must reproduce the above copyright notice,
12
- # this list of conditions and the following disclaimer in the documentation
13
- # and/or other materials provided with the distribution.
14
- #
15
- # (3) Neither the name of the copyright holder nor the names of any contributors
16
- # may be used to endorse or promote products derived from this software without
17
- # specific prior written permission from the respective party.
18
- #
19
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS
20
- # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21
- # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
- # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE
23
- # UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
24
- # THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25
- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
26
- # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
- # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
28
- # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29
- # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
- # *******************************************************************************
31
-
32
- require 'honeybee/geometry/door'
33
-
34
- require 'to_openstudio/model_object'
35
-
36
- module Honeybee
37
- class Door
38
-
39
- def self.from_sub_surface(sub_surface, site_transformation)
40
- hash = {}
41
- hash[:type] = 'Door'
42
- hash[:identifier] = clean_identifier(sub_surface.nameString)
43
- hash[:display_name] = sub_surface.nameString
44
- hash[:user_data] = {handle: sub_surface.handle.to_s}
45
- hash[:properties] = properties_from_sub_surface(sub_surface)
46
- hash[:geometry] = geometry_from_sub_surface(sub_surface, site_transformation)
47
- hash[:boundary_condition] = boundary_condition_from_sub_surface(sub_surface)
48
-
49
- sub_surface_type = sub_surface.subSurfaceType
50
- hash[:is_glass] = (sub_surface_type == 'GlassDoor')
51
-
52
- indoor_shades = indoor_shades_from_sub_surface(sub_surface)
53
- hash[:indoor_shades] = indoor_shades if !indoor_shades.empty?
54
-
55
- outdoor_shades = outdoor_shades_from_sub_surface(sub_surface)
56
- hash[:outdoor_shades] = outdoor_shades if !outdoor_shades.empty?
57
-
58
- hash
59
- end
60
-
61
- def self.properties_from_sub_surface(sub_surface)
62
- hash = {}
63
- hash[:type] = 'DoorPropertiesAbridged'
64
- hash[:energy] = energy_properties_from_sub_surface(sub_surface)
65
- hash
66
- end
67
-
68
- def self.energy_properties_from_sub_surface(sub_surface)
69
- hash = {}
70
- hash[:type] = 'DoorEnergyPropertiesAbridged'
71
-
72
- construction = sub_surface.construction
73
- if !construction.empty?
74
- hash[:construction] = clean_identifier(construction.get.nameString)
75
- end
76
-
77
- hash
78
- end
79
-
80
- def self.geometry_from_sub_surface(sub_surface, site_transformation)
81
- result = {}
82
- result[:type] = 'Face3D'
83
- result[:boundary] = []
84
- vertices = site_transformation * sub_surface.vertices
85
- vertices.each do |v|
86
- result[:boundary] << [v.x, v.y, v.z]
87
- end
88
- result
89
- end
90
-
91
- def self.boundary_condition_from_sub_surface(sub_surface)
92
- result = {}
93
- surface = sub_surface.surface.get
94
- surface_type = surface.surfaceType
95
- adjacent_sub_surface = sub_surface.adjacentSubSurface
96
- if !adjacent_sub_surface.empty?
97
- adjacent_space = clean_identifier(adjacent_sub_surface.get.space.get.nameString)
98
- adjacent_surface = clean_identifier(adjacent_sub_surface.get.surface.get.nameString)
99
- adjacent_sub_surface = clean_identifier(adjacent_sub_surface.get.nameString)
100
- result = {type: 'Surface', boundary_condition_objects: [adjacent_sub_surface, adjacent_surface, adjacent_space]}
101
- elsif surface.isGroundSurface
102
- result = {type: 'Ground'}
103
- elsif surface_type == 'Adiabatic'
104
- result = {type: 'Adiabatic'}
105
- else
106
- sun_exposure = (surface.sunExposure == 'SunExposed')
107
- wind_exposure = (surface.windExposure == 'WindExposed')
108
- view_factor = sub_surface.viewFactortoGround
109
- if view_factor.empty?
110
- view_factor = {type: 'Autocalculate'}
111
- else
112
- view_factor = view_factor.get
113
- end
114
- result = {type: 'Outdoors', sun_exposure: sun_exposure,
115
- wind_exposure: wind_exposure, view_factor: view_factor}
116
- end
117
- result
118
- end
119
-
120
- def self.indoor_shades_from_sub_surface(sub_surface)
121
- []
122
- end
123
-
124
- def self.outdoor_shades_from_sub_surface(sub_surface)
125
- result = []
126
- sub_surface.shadingSurfaceGroups.each do |shading_surface_group|
127
- site_transformation = shading_surface_group.siteTransformation
128
- shading_surface_group.shadingSurfaces.each do |shading_surface|
129
- result << Shade.from_shading_surface(shading_surface, site_transformation)
130
- end
131
- end
132
- result
133
- end
134
-
135
- end # Door
136
- end # Honeybee
@@ -1,174 +0,0 @@
1
- # *******************************************************************************
2
- # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
3
- # Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved.
4
- #
5
- # Redistribution and use in source and binary forms, with or without
6
- # modification, are permitted provided that the following conditions are met:
7
- #
8
- # (1) Redistributions of source code must retain the above copyright notice,
9
- # this list of conditions and the following disclaimer.
10
- #
11
- # (2) Redistributions in binary form must reproduce the above copyright notice,
12
- # this list of conditions and the following disclaimer in the documentation
13
- # and/or other materials provided with the distribution.
14
- #
15
- # (3) Neither the name of the copyright holder nor the names of any contributors
16
- # may be used to endorse or promote products derived from this software without
17
- # specific prior written permission from the respective party.
18
- #
19
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS
20
- # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21
- # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
- # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE
23
- # UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
24
- # THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25
- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
26
- # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
- # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
28
- # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29
- # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
- # *******************************************************************************
31
-
32
- require 'honeybee/model_object'
33
-
34
- module Honeybee
35
- class Face < ModelObject
36
-
37
- def self.from_surface(surface, site_transformation)
38
- hash = {}
39
- hash[:type] = 'Face'
40
- hash[:identifier] = clean_identifier(surface.nameString)
41
- hash[:display_name] = surface.nameString
42
- hash[:user_data] = {handle: surface.handle.to_s}
43
- hash[:properties] = properties_from_surface(surface)
44
- hash[:geometry] = geometry_from_surface(surface, site_transformation)
45
- hash[:face_type] = face_type_from_surface(surface)
46
- hash[:boundary_condition] = boundary_condition_from_surface(surface)
47
-
48
- apertures = apertures_from_surface(surface, site_transformation)
49
- hash[:apertures] = apertures if !apertures.empty?
50
-
51
- doors = doors_from_surface(surface, site_transformation)
52
- hash[:doors] = doors if !doors.empty?
53
-
54
- indoor_shades = indoor_shades_from_surface(surface)
55
- hash[:indoor_shades] = indoor_shades if !indoor_shades.empty?
56
-
57
- outdoor_shades = outdoor_shades_from_surface(surface)
58
- hash[:outdoor_shades] = outdoor_shades if !outdoor_shades.empty?
59
-
60
- hash
61
- end
62
-
63
- def self.properties_from_surface(surface)
64
- hash = {}
65
- hash[:type] = 'FacePropertiesAbridged'
66
- hash[:energy] = energy_properties_from_surface(surface)
67
- hash
68
- end
69
-
70
- def self.energy_properties_from_surface(surface)
71
- hash = {}
72
- hash[:type] = 'FaceEnergyPropertiesAbridged'
73
-
74
- construction = surface.construction
75
- if !construction.empty?
76
- hash[:construction] = clean_identifier(construction.get.nameString)
77
- end
78
-
79
- hash
80
- end
81
-
82
- def self.geometry_from_surface(surface, site_transformation)
83
- result = {}
84
- result[:type] = 'Face3D'
85
- result[:boundary] = []
86
- vertices = site_transformation * surface.vertices
87
- vertices.each do |v|
88
- result[:boundary] << [v.x, v.y, v.z]
89
- end
90
- result
91
- end
92
-
93
- def self.face_type_from_surface(surface)
94
- # "Wall", "Floor", "RoofCeiling", "AirBoundary"
95
- result = nil
96
- surface_type = surface.surfaceType
97
- if surface.isAirWall
98
- result = 'AirBoundary'
99
- elsif /Wall/i.match(surface_type)
100
- result = 'Wall'
101
- elsif /Floor/i.match(surface_type)
102
- result = 'Floor'
103
- elsif /RoofCeiling/i.match(surface_type)
104
- result = 'RoofCeiling'
105
- end
106
- result
107
- end
108
-
109
- def self.boundary_condition_from_surface(surface)
110
- result = {}
111
- surface_type = surface.surfaceType
112
- adjacent_surface = surface.adjacentSurface
113
- if !adjacent_surface.empty?
114
- adjacent_space = clean_identifier(adjacent_surface.get.space.get.nameString)
115
- adjacent_surface = clean_identifier(adjacent_surface.get.nameString)
116
- result = {type: 'Surface', boundary_condition_objects: [adjacent_surface, adjacent_space]}
117
- elsif surface.isGroundSurface
118
- result = {type: 'Ground'}
119
- elsif surface_type == 'Adiabatic'
120
- result = {type: 'Adiabatic'}
121
- else
122
- sun_exposure = (surface.sunExposure == 'SunExposed')
123
- wind_exposure = (surface.windExposure == 'WindExposed')
124
- view_factor = surface.viewFactortoGround
125
- if view_factor.empty?
126
- view_factor = {type: 'Autocalculate'}
127
- else
128
- view_factor = view_factor.get
129
- end
130
- result = {type: 'Outdoors', sun_exposure: sun_exposure,
131
- wind_exposure: wind_exposure, view_factor: view_factor}
132
- end
133
- result
134
- end
135
-
136
- def self.apertures_from_surface(surface, site_transformation)
137
- result = []
138
- surface.subSurfaces.each do |sub_surface|
139
- sub_surface_type = sub_surface.subSurfaceType
140
- if !/Door/i.match(sub_surface_type)
141
- result << Aperture.from_sub_surface(sub_surface, site_transformation)
142
- end
143
- end
144
- result
145
- end
146
-
147
- def self.doors_from_surface(surface, site_transformation)
148
- result = []
149
- surface.subSurfaces.each do |sub_surface|
150
- sub_surface_type = sub_surface.subSurfaceType
151
- if /Door/i.match(sub_surface_type)
152
- result << Door.from_sub_surface(sub_surface, site_transformation)
153
- end
154
- end
155
- result
156
- end
157
-
158
- def self.indoor_shades_from_surface(surface)
159
- []
160
- end
161
-
162
- def self.outdoor_shades_from_surface(surface)
163
- result = []
164
- surface.shadingSurfaceGroups.each do |shading_surface_group|
165
- site_transformation = shading_surface_group.siteTransformation
166
- shading_surface_group.shadingSurfaces.each do |shading_surface|
167
- result << Shade.from_shading_surface(shading_surface, site_transformation)
168
- end
169
- end
170
- result
171
- end
172
-
173
- end #Face
174
- end #Honeybee
@@ -1,121 +0,0 @@
1
- # *******************************************************************************
2
- # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
3
- # Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved.
4
- #
5
- # Redistribution and use in source and binary forms, with or without
6
- # modification, are permitted provided that the following conditions are met:
7
- #
8
- # (1) Redistributions of source code must retain the above copyright notice,
9
- # this list of conditions and the following disclaimer.
10
- #
11
- # (2) Redistributions in binary form must reproduce the above copyright notice,
12
- # this list of conditions and the following disclaimer in the documentation
13
- # and/or other materials provided with the distribution.
14
- #
15
- # (3) Neither the name of the copyright holder nor the names of any contributors
16
- # may be used to endorse or promote products derived from this software without
17
- # specific prior written permission from the respective party.
18
- #
19
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS
20
- # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21
- # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
- # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE
23
- # UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
24
- # THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25
- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
26
- # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
- # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
28
- # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29
- # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
- # *******************************************************************************
31
-
32
- require 'honeybee/model_object'
33
-
34
- module Honeybee
35
- class Room < ModelObject
36
-
37
- def self.from_space(space)
38
- hash = {}
39
- hash[:type] = 'Room'
40
- hash[:identifier] = clean_identifier(space.nameString)
41
- hash[:display_name] = space.nameString
42
- hash[:user_data] = {space: space.handle.to_s}
43
- hash[:properties] = properties_from_space(space)
44
-
45
- site_transformation = space.siteTransformation
46
- hash[:faces] = faces_from_space(space, site_transformation)
47
-
48
- indoor_shades = indoor_shades_from_space(space)
49
- hash[:indoor_shades] = indoor_shades if !indoor_shades.empty?
50
-
51
- outdoor_shades = outdoor_shades_from_space(space)
52
- hash[:outdoor_shades] = outdoor_shades if !outdoor_shades.empty?
53
-
54
- multipler = multiplier_from_space(space)
55
- hash[:multipler] = multipler if multipler
56
-
57
- story = story_from_space(space)
58
- hash[:story] = story if story
59
-
60
- hash
61
- end
62
-
63
- def self.properties_from_space(space)
64
- hash = {}
65
- hash[:type] = 'RoomPropertiesAbridged'
66
- hash[:energy] = self.energy_properties_from_space(space)
67
- hash
68
- end
69
-
70
- def self.energy_properties_from_space(space)
71
- hash = {}
72
- hash[:type] = 'RoomEnergyPropertiesAbridged'
73
- hash
74
- end
75
-
76
- def self.faces_from_space(space, site_transformation)
77
- result = []
78
- space.surfaces.each do |surface|
79
- result << Face.from_surface(surface, site_transformation)
80
- end
81
- result
82
- end
83
-
84
- def self.indoor_shades_from_space(space)
85
- []
86
- end
87
-
88
- def self.outdoor_shades_from_space(space)
89
- result = []
90
- space.shadingSurfaceGroups.each do |shading_surface_group|
91
- # skip if attached to a surface or sub_surface
92
- if !shading_surface_group.shadedSurface.empty? || !shading_surface_group.shadedSubSurface.empty?
93
- next
94
- end
95
-
96
- site_transformation = shading_surface_group.siteTransformation
97
- shading_surface_group.shadingSurfaces.each do |shading_surface|
98
- result << Shade.from_shading_surface(shading_surface, site_transformation)
99
- end
100
- end
101
- result
102
- end
103
-
104
- def self.multiplier_from_space(space)
105
- multiplier = space.multiplier
106
- if multiplier != 1
107
- return multiplier
108
- end
109
- nil
110
- end
111
-
112
- def self.story_from_space(space)
113
- story = space.buildingStory
114
- if !story.empty?
115
- return clean_identifier(story.get.nameString)
116
- end
117
- nil
118
- end
119
-
120
- end # Aperture
121
- end # Honeybee
@@ -1,87 +0,0 @@
1
- # *******************************************************************************
2
- # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
3
- # Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved.
4
- #
5
- # Redistribution and use in source and binary forms, with or without
6
- # modification, are permitted provided that the following conditions are met:
7
- #
8
- # (1) Redistributions of source code must retain the above copyright notice,
9
- # this list of conditions and the following disclaimer.
10
- #
11
- # (2) Redistributions in binary form must reproduce the above copyright notice,
12
- # this list of conditions and the following disclaimer in the documentation
13
- # and/or other materials provided with the distribution.
14
- #
15
- # (3) Neither the name of the copyright holder nor the names of any contributors
16
- # may be used to endorse or promote products derived from this software without
17
- # specific prior written permission from the respective party.
18
- #
19
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS
20
- # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21
- # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
- # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE
23
- # UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
24
- # THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25
- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
26
- # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
- # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
28
- # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29
- # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
- # *******************************************************************************
31
-
32
- require 'honeybee/geometry/shade'
33
-
34
- require 'to_openstudio/model_object'
35
-
36
- module Honeybee
37
- class Shade
38
-
39
- def self.from_shading_surface(shading_surface, site_transformation)
40
- hash = {}
41
- hash[:type] = 'Shade'
42
- hash[:identifier] = clean_identifier(shading_surface.nameString)
43
- hash[:display_name] = shading_surface.nameString
44
- hash[:user_data] = {handle: shading_surface.handle.to_s}
45
- hash[:properties] = properties_from_shading_surface(shading_surface)
46
- hash[:geometry] = geometry_from_shading_surface(shading_surface, site_transformation)
47
-
48
- hash
49
- end
50
-
51
- def self.properties_from_shading_surface(shading_surface)
52
- hash = {}
53
- hash[:type] = 'ShadePropertiesAbridged'
54
- hash[:energy] = energy_properties_from_shading_surface(shading_surface)
55
- hash
56
- end
57
-
58
- def self.energy_properties_from_shading_surface(shading_surface)
59
- hash = {}
60
- hash[:type] = 'ShadeEnergyPropertiesAbridged'
61
-
62
- construction = shading_surface.construction
63
- if !construction.empty?
64
- hash[:construction] = clean_identifier(construction.get.nameString)
65
- end
66
-
67
- transmittance_schedule = shading_surface.transmittanceSchedule
68
- if !transmittance_schedule.empty?
69
- hash[:transmittance_schedule] = clean_identifier(transmittance_schedule.get.nameString)
70
- end
71
-
72
- hash
73
- end
74
-
75
- def self.geometry_from_shading_surface(shading_surface, site_transformation)
76
- result = {}
77
- result[:type] = 'Face3D'
78
- result[:boundary] = []
79
- vertices = site_transformation * shading_surface.vertices
80
- vertices.each do |v|
81
- result[:boundary] << [v.x, v.y, v.z]
82
- end
83
- result
84
- end
85
-
86
- end #Shade
87
- end #Honeybee
@@ -1,123 +0,0 @@
1
- # *******************************************************************************
2
- # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
3
- # Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved.
4
- #
5
- # Redistribution and use in source and binary forms, with or without
6
- # modification, are permitted provided that the following conditions are met:
7
- #
8
- # (1) Redistributions of source code must retain the above copyright notice,
9
- # this list of conditions and the following disclaimer.
10
- #
11
- # (2) Redistributions in binary form must reproduce the above copyright notice,
12
- # this list of conditions and the following disclaimer in the documentation
13
- # and/or other materials provided with the distribution.
14
- #
15
- # (3) Neither the name of the copyright holder nor the names of any contributors
16
- # may be used to endorse or promote products derived from this software without
17
- # specific prior written permission from the respective party.
18
- #
19
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS
20
- # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21
- # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
- # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE
23
- # UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
24
- # THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25
- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
26
- # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
- # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
28
- # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29
- # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
- # *******************************************************************************
31
-
32
- require 'honeybee/model'
33
-
34
- require 'from_openstudio/geometry/room'
35
- require 'from_openstudio/geometry/shade'
36
-
37
- require 'openstudio'
38
-
39
- module Honeybee
40
- class Model
41
-
42
- # Create Ladybug Energy Model JSON from OpenStudio Model
43
- def self.translate_from_openstudio(openstudio_model)
44
- hash = {}
45
- hash[:type] = 'Model'
46
- hash[:identifier] = 'Model'
47
- hash[:display_name] = 'Model'
48
- hash[:units] = 'Meters'
49
- hash[:tolerance] = 0.01
50
- hash[:angle_tolerance] = 1.0
51
-
52
- hash[:properties] = properties_from_model(openstudio_model)
53
-
54
- rooms = rooms_from_model(openstudio_model)
55
- hash[:rooms] = rooms if !rooms.empty?
56
-
57
- orphaned_shades = orphaned_shades_from_model(openstudio_model)
58
- hash[:orphaned_shades] = orphaned_shades if !orphaned_shades.empty?
59
-
60
- Model.new(hash)
61
- end
62
-
63
- # Create Ladybug Energy Model JSON from OSM file
64
- def self.translate_from_osm_file(file)
65
- vt = OpenStudio::OSVersion::VersionTranslator.new
66
- openstudio_model = vt.loadModel(file)
67
- raise "Cannot load OSM file at '#{}'" if openstudio_model.empty?
68
- self.translate_from_openstudio(openstudio_model.get)
69
- end
70
-
71
- # Create Ladybug Energy Model JSON from gbXML file
72
- def self.translate_from_gbxml_file(file)
73
- translator = OpenStudio::GbXML::GbXMLReverseTranslator.new
74
- openstudio_model = translator.loadModel(file)
75
- raise "Cannot load gbXML file at '#{}'" if openstudio_model.empty?
76
- self.translate_from_openstudio(openstudio_model.get)
77
- end
78
-
79
- # Create Ladybug Energy Model JSON from IDF file
80
- def self.translate_from_idf_file(file)
81
- translator = OpenStudio::EnergyPlus::ReverseTranslator.new
82
- openstudio_model = translator.loadModel(file)
83
- raise "Cannot load IDF file at '#{}'" if openstudio_model.empty?
84
- self.translate_from_openstudio(openstudio_model.get)
85
- end
86
-
87
- def self.properties_from_model(openstudio_model)
88
- hash = {}
89
- hash[:type] = 'ModelProperties'
90
- hash
91
- end
92
-
93
- def self.energy_properties_from_model(openstudio_model)
94
- hash = {}
95
- hash[:type] = 'ModelEnergyProperties'
96
- hash[:energy] = energy_properties_from_model(openstudio_model)
97
- hash
98
- end
99
-
100
- def self.rooms_from_model(openstudio_model)
101
- result = []
102
- openstudio_model.getSpaces.each do |space|
103
- result << Room.from_space(space)
104
- end
105
- result
106
- end
107
-
108
- def self.orphaned_shades_from_model(openstudio_model)
109
- result = []
110
- openstudio_model.getShadingSurfaceGroups.each do |shading_surface_group|
111
- shading_surface_type = shading_surface_group.shadingSurfaceType
112
- if shading_surface_type == 'Site' || shading_surface_type == 'Building'
113
- site_transformation = shading_surface_group.siteTransformation
114
- shading_surface_group.shadingSurfaces.each do |shading_surface|
115
- result << Shade.from_shading_surface(shading_surface, site_transformation)
116
- end
117
- end
118
- end
119
- result
120
- end
121
-
122
- end # Model
123
- end # Honeybee
@@ -1,43 +0,0 @@
1
- # *******************************************************************************
2
- # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
3
- # Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved.
4
- #
5
- # Redistribution and use in source and binary forms, with or without
6
- # modification, are permitted provided that the following conditions are met:
7
- #
8
- # (1) Redistributions of source code must retain the above copyright notice,
9
- # this list of conditions and the following disclaimer.
10
- #
11
- # (2) Redistributions in binary form must reproduce the above copyright notice,
12
- # this list of conditions and the following disclaimer in the documentation
13
- # and/or other materials provided with the distribution.
14
- #
15
- # (3) Neither the name of the copyright holder nor the names of any contributors
16
- # may be used to endorse or promote products derived from this software without
17
- # specific prior written permission from the respective party.
18
- #
19
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS
20
- # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21
- # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
- # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE
23
- # UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
24
- # THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25
- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
26
- # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
- # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
28
- # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29
- # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
- # *******************************************************************************
31
-
32
- module Honeybee
33
- class ModelObject
34
- # Base class from which all other objects in this module inherit.
35
- # Attributes and methods of this class should be overwritten in each inheriting object.
36
-
37
- # create a new object in the openstudio model and return it
38
- def to_openstudio(openstudio_model)
39
- raise 'to_openstudio is not yet implemented for this ModelObject.'
40
- end
41
-
42
- end # ModelObject
43
- end # Honeybee