honeybee-openstudio 2.17.5 → 2.18.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f4856942358fea802404323b2df581961230c29b0de01d1993742dc2e9c4aaec
4
- data.tar.gz: 5749259754899e511dd53f3cb4427986abc78bfb6de7f6af023829db9056c630
3
+ metadata.gz: fe82ab879bf620ce30c665948e97a2b078e8b3c5899cbecea1ae0cc0b319c80e
4
+ data.tar.gz: c86bad1a3e7fe7a0c7e8ccbe2900774a561a46056dae0450ed2998d2e29213b4
5
5
  SHA512:
6
- metadata.gz: 573e2448b710a5591c2b2c648d96d6ee09b226a458b589d3a081f6ba1dd5a04cf42ac84f9e63b43bcfa77c09c54632b08d9c3391b14f502c447de9f18a1ffa72
7
- data.tar.gz: 855685ea4d3387be760c97ca56a807bdd6a983be4a528a177784f52cbca182a5d5561eaed9c4ab0a3de71631ddf4633de79174d6bf421ef8c0094a531ca5a566
6
+ metadata.gz: a86ca8992989da3f1f4a5642b55ece1c920e0378a82d8bf55e6362546375cc9fb66f1d0d4e69e74c3803678a77c168b87b733f58a2851b2eafebac0db4386190
7
+ data.tar.gz: 67740da44c34b3408f248a7be3d6a02fb1c9c76524dec2a7cf9fda9755ee923baa443f5f65b136c0d0fcb4d7ca956a8ffe9130715b1369f3413a7534ad34f88f
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'honeybee-openstudio'
7
- spec.version = '2.17.5'
7
+ spec.version = '2.18.0'
8
8
  spec.authors = ['Tanushree Charan', 'Dan Macumber', 'Chris Mackey', 'Mostapha Sadeghipour Roudsari']
9
9
  spec.email = ['tanushree.charan@nrel.gov', 'chris@ladybug.tools']
10
10
 
@@ -43,6 +43,22 @@ require 'from_openstudio/geometry/face'
43
43
  require 'from_openstudio/geometry/room'
44
44
  require 'from_openstudio/geometry/shade'
45
45
 
46
+ # extend the construction objects
47
+ require 'from_openstudio/construction/opaque'
48
+ require 'from_openstudio/construction/window'
49
+ require 'from_openstudio/construction/shade'
50
+ require 'from_openstudio/construction/air'
51
+
52
+ # import the material objects
53
+ require 'from_openstudio/material/opaque'
54
+ require 'from_openstudio/material/opaque_no_mass'
55
+ require 'from_openstudio/material/window_gas'
56
+ require 'from_openstudio/material/window_gas_mixture'
57
+ require 'from_openstudio/material/window_gas_custom'
58
+ require 'from_openstudio/material/window_blind'
59
+ require 'from_openstudio/material/window_glazing'
60
+ require 'from_openstudio/material/window_simpleglazsys'
61
+
46
62
  # extend the simulation objects
47
63
  require 'from_openstudio/simulation/design_day'
48
64
  require 'from_openstudio/simulation/parameter_model'
@@ -0,0 +1,55 @@
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/construction/air'
33
+ require 'to_openstudio/model_object'
34
+
35
+ module Honeybee
36
+ class AirBoundaryConstructionAbridged < ModelObject
37
+
38
+ def self.from_construction(construction)
39
+ # create an empty hash
40
+ hash = {}
41
+ hash[:type] = 'AirBoundaryConstructionAbridged'
42
+ # set hash values from OpenStudio Object
43
+ hash[:identifier] = construction.nameString
44
+ # check if boost optional object is empty
45
+ unless construction.simpleMixingSchedule.empty?
46
+ schedule = construction.simpleMixingSchedule.get
47
+ hash[:air_mixing_schedule] = schedule.nameString
48
+ end
49
+ #TODO: Add air_mixing_per_area
50
+
51
+ hash
52
+ end
53
+
54
+ end # AirBoundaryConstructionAbridged
55
+ end # Honeybee
@@ -0,0 +1,56 @@
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/construction/opaque'
33
+ require 'to_openstudio/model_object'
34
+
35
+ module Honeybee
36
+ class OpaqueConstructionAbridged < ModelObject
37
+
38
+ def self.from_construction(construction)
39
+ # create an empty hash
40
+ hash = {}
41
+ hash[:type] = 'OpaqueConstructionAbridged'
42
+ # set hash values from OpenStudio Object
43
+ hash[:identifier] = construction.nameString
44
+ hash[:materials] = []
45
+ # get construction layers
46
+ layers = construction.layers
47
+ layers.each do |layer|
48
+ name = layer.nameString
49
+ hash[:materials] << name
50
+ end
51
+
52
+ hash
53
+ end
54
+
55
+ end # OpaqueConstructionAbridged
56
+ end # Honeybee
@@ -0,0 +1,82 @@
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/construction/shade'
33
+ require 'from_openstudio/model_object'
34
+
35
+ module Honeybee
36
+ class ShadeConstruction < ModelObject
37
+
38
+ def self.from_construction(construction)
39
+ # create an empty hash
40
+ hash = {}
41
+ hash[:type] = 'ShadeConstruction'
42
+ # set hash values from OpenStudio Object
43
+ hash[:identifier] = construction.nameString
44
+ # get outermost construction layers
45
+ layer = construction.layers[0]
46
+ if layer.to_StandardGlazing.is_initialized
47
+ layer = layer.to_StandardGlazing.get
48
+ hash[:is_specular] = true
49
+ # set reflectance properties from outermost layer
50
+ unless layer.frontSideSolarReflectanceatNormalIncidence.empty?
51
+ hash[:solar_reflectance] = layer.frontSideSolarReflectanceatNormalIncidence.get
52
+ end
53
+ unless layer.frontSideVisibleReflectanceatNormalIncidence.empty?
54
+ hash[:visible_reflectance] = layer.frontSideVisibleReflectanceatNormalIncidence.get
55
+ end
56
+ elsif layer.to_StandardOpaqueMaterial.is_initialized
57
+ layer = layer.to_StandardOpaqueMaterial.get
58
+ hash[:is_specular] = false
59
+ # set reflectance properties from outermost layer
60
+ unless layer.solarReflectance.empty?
61
+ hash[:solar_reflectance] = layer.solarReflectance.get
62
+ end
63
+ unless layer.visibleReflectance.empty?
64
+ hash[:visible_reflectance] = layer.visibleReflectance
65
+ end
66
+ elsif layer.to_MasslessOpaqueMaterial.is_initialized
67
+ layer = layer.to_MasslessOpaqueMaterial.get
68
+ hash[:is_specular] = false
69
+ # set reflectance properties from outermost layer
70
+ unless layer.solarAbsorptance.empty?
71
+ hash[:solar_reflectance] = 1 - layer.solarAbsorptance.get
72
+ end
73
+ unless layer.visibleAbsorptance.empty?
74
+ hash[:visible_reflectance] = 1 - layer.visibleAbsorptance.get
75
+ end
76
+ end
77
+
78
+ hash
79
+ end
80
+
81
+ end # ShadeConstruction
82
+ end # Honeybee
@@ -0,0 +1,56 @@
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/construction/window'
33
+ require 'to_openstudio/model_object'
34
+
35
+ module Honeybee
36
+ class WindowConstructionAbridged
37
+
38
+ def self.from_construction(construction)
39
+ # create an empty hash
40
+ hash = {}
41
+ hash[:type] = 'WindowConstructionAbridged'
42
+ # set hash values from OpenStudio Object
43
+ hash[:identifier] = construction.nameString
44
+ hash[:materials] = []
45
+ # get construction layers
46
+ layers = construction.layers
47
+ layers.each do |layer|
48
+ name = layer.nameString
49
+ hash[:materials] << name
50
+ end
51
+
52
+ hash
53
+ end
54
+
55
+ end # WindowConstructionAbridged
56
+ end # Honeybee
@@ -61,7 +61,13 @@ module Honeybee
61
61
 
62
62
  construction = shading_surface.construction
63
63
  if !construction.empty?
64
- hash[:construction] = construction.get.nameString
64
+ const_name = construction.get.nameString
65
+ hash[:construction] = const_name
66
+ unless $shade_construction.has_key?(const_name)
67
+ const_obj = construction.get
68
+ const = const_obj.to_LayeredConstruction.get
69
+ $shade_construction[const_name] = const
70
+ end
65
71
  end
66
72
 
67
73
  transmittance_schedule = shading_surface.transmittanceSchedule
@@ -42,18 +42,23 @@ module Honeybee
42
42
  # set hash values from OpenStudio Object
43
43
  hash[:identifier] = material.nameString
44
44
  hash[:r_value] = material.thermalResistance
45
- hash[:roughness] = material.roughness
46
- # check if boost optional object is empty
47
- unless material.thermalAbsorptance.empty?
48
- hash[:thermal_absorptance] = material.thermalAbsorptance.get
49
- end
50
- # check if boost optional object is empty
51
- unless material.solarAbsorptance.empty?
52
- hash[:solar_absorptance] = material.solarAbsorptance.get
53
- end
54
- # check if boost optional object is empty
55
- unless material.visibleAbsorptance.empty?
56
- hash[:visible_absorptance] = material.visibleAbsorptance.get
45
+
46
+ if material.to_MasslessOpaqueMaterial.is_initialized
47
+ # Roughness is a required property for OS MasslessOpaqueMaterial but isn't a listed
48
+ # property for OS AirGap
49
+ hash[:roughness] = material.roughness
50
+ # check if boost optional object is empty
51
+ unless material.thermalAbsorptance.empty?
52
+ hash[:thermal_absorptance] = material.thermalAbsorptance.get
53
+ end
54
+ # check if boost optional object is empty
55
+ unless material.solarAbsorptance.empty?
56
+ hash[:solar_absorptance] = material.solarAbsorptance.get
57
+ end
58
+ # check if boost optional object is empty
59
+ unless material.visibleAbsorptance.empty?
60
+ hash[:visible_absorptance] = material.visibleAbsorptance.get
61
+ end
57
62
  end
58
63
 
59
64
  hash
@@ -41,6 +41,10 @@ require 'from_openstudio/material/window_blind'
41
41
  require 'from_openstudio/material/window_gas'
42
42
  require 'from_openstudio/material/window_gas_custom'
43
43
  require 'from_openstudio/material/window_gas_mixture'
44
+ require 'from_openstudio/construction/air'
45
+ require 'from_openstudio/construction/opaque'
46
+ require 'from_openstudio/construction/window'
47
+ require 'from_openstudio/construction/shade'
44
48
 
45
49
  require 'openstudio'
46
50
 
@@ -57,6 +61,8 @@ module Honeybee
57
61
  hash[:tolerance] = 0.01
58
62
  hash[:angle_tolerance] = 1.0
59
63
 
64
+ # Hash for all shade constructions in the model
65
+ $shade_construction = {}
60
66
  hash[:properties] = properties_from_model(openstudio_model)
61
67
 
62
68
  rooms = rooms_from_model(openstudio_model)
@@ -65,6 +71,12 @@ module Honeybee
65
71
  orphaned_shades = orphaned_shades_from_model(openstudio_model)
66
72
  hash[:orphaned_shades] = orphaned_shades if !orphaned_shades.empty?
67
73
 
74
+ unless $shade_construction.empty?
75
+ shade_constructions_from_model($shade_construction).each do |shade_const|
76
+ hash[:properties][:energy][:constructions] << shade_const
77
+ end
78
+ end
79
+
68
80
  Model.new(hash)
69
81
  end
70
82
 
@@ -103,13 +115,17 @@ module Honeybee
103
115
  def self.properties_from_model(openstudio_model)
104
116
  hash = {}
105
117
  hash[:type] = 'ModelProperties'
118
+ hash[:energy] = energy_properties_from_model(openstudio_model)
106
119
  hash
107
120
  end
108
121
 
109
122
  def self.energy_properties_from_model(openstudio_model)
110
123
  hash = {}
111
124
  hash[:type] = 'ModelEnergyProperties'
112
- hash[:energy] = energy_properties_from_model(openstudio_model)
125
+ hash[:constructions] = []
126
+ hash[:constructions] = constructions_from_model(openstudio_model)
127
+ hash[:materials] = materials_from_model(openstudio_model)
128
+
113
129
  hash
114
130
  end
115
131
 
@@ -145,10 +161,17 @@ module Honeybee
145
161
  openstudio_model.getStandardOpaqueMaterials.each do |material|
146
162
  result << EnergyMaterial.from_material(material)
147
163
  end
148
- # Create HB EnergyMaterialNoMass from OpenStudio Material
164
+
165
+ # Create HB EnergyMaterialNoMass from OpenStudio MasslessOpaque Materials
149
166
  openstudio_model.getMasslessOpaqueMaterials.each do |material|
150
167
  result << EnergyMaterialNoMass.from_material(material)
151
168
  end
169
+
170
+ # Create HB EnergyMaterialNoMass from OpenStudio AirGap materials
171
+ openstudio_model.getAirGaps.each do|material|
172
+ result << EnergyMaterialNoMass.from_material(material)
173
+ end
174
+
152
175
  # Create HB WindowMaterialSimpleGlazSys from OpenStudio Material
153
176
  openstudio_model.getSimpleGlazings.each do |material|
154
177
  result << EnergyWindowMaterialSimpleGlazSys.from_material(material)
@@ -178,5 +201,45 @@ module Honeybee
178
201
  result
179
202
  end
180
203
 
204
+ # Create HB Construction from OpenStudio Materials
205
+ def self.constructions_from_model(openstudio_model)
206
+ result = []
207
+
208
+ # Create HB AirConstruction from OpenStudio Construction
209
+ openstudio_model.getConstructionAirBoundarys.each do |construction|
210
+ result << AirBoundaryConstructionAbridged.from_construction(construction)
211
+ end
212
+
213
+ # Create HB WindowConstruction from OpenStudio Construction
214
+ openstudio_model.getConstructions.each do |construction|
215
+ window_construction = false
216
+ opaque_construction = false
217
+ material = construction.layers[0]
218
+ if material.to_StandardGlazing.is_initialized or material.to_SimpleGlazing.is_initialized
219
+ window_construction = true
220
+ elsif material.to_StandardOpaqueMaterial.is_initialized or material.to_MasslessOpaqueMaterial.is_initialized
221
+ opaque_construction = true
222
+ end
223
+ if window_construction == true
224
+ result << WindowConstructionAbridged.from_construction(construction)
225
+ end
226
+ if opaque_construction == true
227
+ result << OpaqueConstructionAbridged.from_construction(construction)
228
+ end
229
+ end
230
+
231
+ result
232
+ end
233
+
234
+ def self.shade_constructions_from_model(shade_constructions)
235
+ result = []
236
+
237
+ shade_constructions.each do |key, value|
238
+ result << ShadeConstruction.from_construction(value)
239
+ end
240
+
241
+ result
242
+ end
243
+
181
244
  end # Model
182
245
  end # Honeybee