Class: URBANopt::Scenario::HoneybeeMapper
- Inherits:
-
SimulationMapperBase
- Object
- SimulationMapperBase
- URBANopt::Scenario::HoneybeeMapper
- Defined in:
- lib/files/Honeybee.rb
Constant Summary collapse
- @@instance_lock =
class level variables
Mutex.new
- @@osw =
nil
- @@mapper_measures =
nil
- @@geometry =
nil
Instance Method Summary collapse
- #create_osw(scenario, features, feature_names) ⇒ Object
-
#initialize ⇒ HoneybeeMapper
constructor
A new instance of HoneybeeMapper.
Constructor Details
permalink #initialize ⇒ HoneybeeMapper
Returns a new instance of HoneybeeMapper.
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/files/Honeybee.rb', line 48 def initialize() # do initialization of class variables in thread safe way @@instance_lock.synchronize do # load the OSW for this class if @@osw.nil? osw_path = File.join(File.dirname(__FILE__), 'honeybee_workflow.osw') File.open(osw_path, 'r') do |file| @@osw = JSON.parse(file.read, symbolize_names: true) end # configure OSW with extension gem paths for measures and files # all extension gems must be required before this line @@osw = OpenStudio::Extension.configure_osw(@@osw) end # load the mapper measure variables if the file exists if @@mapper_measures.nil? map_meas_path = File.join(File.dirname(__FILE__), 'mapper_measures.json') if File.file?(map_meas_path) File.open(map_meas_path, 'r') do |file| @@mapper_measures = JSON.parse(file.read) end end end end end |
Instance Method Details
permalink #create_osw(scenario, features, feature_names) ⇒ Object
[View source]
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/files/Honeybee.rb', line 75 def create_osw(scenario, features, feature_names) if features.size != 1 raise "Mapper currently cannot simulate more than one feature at a time." end feature = features[0] feature_id = feature.id feature_type = feature.type feature_name = feature.name # take the centroid of the vertices as the location of the building feature_vertices_coordinates = feature.feature_json[:geometry][:coordinates][0] feature_location = feature.find_feature_center(feature_vertices_coordinates).to_s if feature_names.size == 1 feature_name = feature_names[0] end # deep clone of @@osw before we configure it osw = Marshal.load(Marshal.dump(@@osw)) # set the name and description of the OSW to reference this particular feature osw[:name] = feature_name osw[:description] = feature_name if feature_type == 'Building' # set the honeybee JSON key to the honeybee_model measure OpenStudio::Extension.set_measure_argument( osw, 'from_honeybee_model', 'model_json', feature.detailed_model_filename) # add any of the mapper measure variables if not @@mapper_measures.nil? @@mapper_measures.each do |map_measure_param| # get the attribute from the feature feature_param = feature.send(map_measure_param[2]) # set the measure argument OpenStudio::Extension.set_measure_argument( osw, map_measure_param[0], map_measure_param[1], feature_param) end end # add the feature id and name to the reporting measure OpenStudio::Extension.set_measure_argument( osw, 'default_feature_reports', 'feature_id', feature_id) OpenStudio::Extension.set_measure_argument( osw, 'default_feature_reports', 'feature_name', feature_name) OpenStudio::Extension.set_measure_argument( osw, 'default_feature_reports', 'feature_type', feature_type) OpenStudio::Extension.set_measure_argument( osw, 'default_feature_reports', 'feature_location', feature_location) end return osw end |