280 pugi::xml_document xmldoc;
283 std::string xml_input_file =
"plugins/projectbuilder/inputs/inputs.xml";
289 bool light_coord_type =
false;
292 bool is_dirty =
false;
298 float PAR_absorbed = 0.f;
301 float NIR_absorbed = 0.f;
304 float LW_absorbed = 0.f;
310 float diffuse_extinction_coeff = 0.1;
313 bool enforce_periodic_boundary_x =
true;
316 bool enforce_periodic_boundary_y =
true;
322 std::vector<std::string> bandlabels;
325 std::set<std::string> band_group_names;
328 std::map<std::string, bandGroup> band_group_lookup;
331 std::string current_band_group;
334 std::set<std::string> bandlabels_set;
337 std::set<std::string> bandlabels_set_emissivity;
340 std::set<std::string> bandlabels_set_wavelength;
343 std::map<std::string, int> direct_ray_count_dict;
346 std::map<std::string, int> diffuse_ray_count_dict;
349 std::map<std::string, int> scattering_depth_dict;
352 std::string new_band_label;
355 float wavelength_min = 400.0f;
358 float wavelength_max = 700.0f;
361 bool enable_wavelength;
364 bool enable_emission;
367 std::vector<uint> ground_UUIDs;
373 std::vector<uint> leaf_UUIDs;
376 std::vector<uint> petiolule_UUIDs;
379 std::vector<uint> petiole_UUIDs;
382 std::vector<uint> internode_UUIDs;
385 std::vector<uint> peduncle_UUIDs;
388 std::vector<uint> petal_UUIDs;
391 std::vector<uint> flower_UUIDs;
394 std::vector<uint> sepal_UUIDs;
397 std::vector<uint> pedicel_UUIDs;
400 std::vector<uint> fruit_UUIDs;
403 std::vector<std::string> primitive_names = {
"All",
"ground",
"leaf",
"petiolule",
"petiole",
"internode",
"peduncle",
"petal",
"pedicel",
"fruit"};
406 std::map<std::string, bool> bounding_boxes = {
407 {
"plantID",
false}, {
"leafID",
false}, {
"peduncleID",
false}, {
"closedflowerID",
false}, {
"openflowerID",
false}, {
"fruitID",
false}, {
"rank",
false}, {
"age",
false}, {
"carbohydrate_concentration",
false}};
410 std::set<std::string> bounding_boxes_default = {
"plantID",
"leafID",
"peduncleID",
"closedflowerID",
"openflowerID",
"fruitID",
"rank"};
413 std::set<std::string> bounding_boxes_primitive;
416 std::set<std::string> bounding_boxes_object;
419 std::map<std::string, int> bounding_boxes_map;
422 std::set<std::string> primitive_names_set = {
"All",
"ground",
"leaf",
"petiolule",
"petiole",
"internode",
"peduncle",
"petal",
"pedicel",
"fruit"};
425 std::map<std::string, std::vector<uint> *> primitive_addresses;
428 std::map<std::string, std::vector<uint>> primitive_UUIDs;
431 std::map<std::string, std::map<std::string, std::vector<uint>>> primitive_UUIDs_dict;
434 std::map<std::string, std::vector<bool>> primitive_continuous;
437 std::map<std::string, std::map<std::string, std::vector<bool>>> primitive_continuous_dict;
440 std::map<std::string, std::vector<std::string>> primitive_spectra;
443 std::map<std::string, std::map<std::string, std::vector<std::string>>> primitive_spectra_dict;
446 std::map<std::string, std::map<std::string, std::vector<float>>> primitive_values;
449 std::map<std::string, std::map<std::string, std::map<std::string, std::vector<float>>>> primitive_values_dict;
452 std::set<std::string> data_groups_set = {
"All"};
454 std::vector<std::string> data_groups = {
"All"};
460 std::vector<std::string> timeseries_variables;
463 float air_temperature = 300.f;
466 float air_humidity = 0.5f;
481 std::string xml_error_string;
483 rig default_rig{1,
"default_rig", {}, {},
helios::RGBcolor(1, 0, 0),
helios::vec3(0, 0, 1),
helios::vec3(0, 0, 0), {
helios::vec3(0, 0, 1)}, {
helios::vec3(0, 0, 0)}, {1}, {}, {},
false,
false,
false};
486 std::vector<std::string> rig_labels;
489 std::vector<std::vector<distribution>> rig_position_noise;
492 std::vector<std::vector<distribution>> rig_lookat_noise;
495 std::vector<helios::RGBcolor> rig_colors;
498 std::vector<helios::vec3> camera_positions;
501 std::vector<helios::vec3> camera_lookats;
504 std::vector<std::string> camera_labels;
507 std::vector<helios::int2> camera_resolutions;
510 std::vector<float> focal_plane_distances;
513 std::vector<float> lens_diameters;
516 std::vector<float> FOV_aspect_ratios;
519 std::vector<float> HFOVs;
522 std::map<std::string, int> rig_dict;
525 std::map<std::string, rig> rig_dict_;
528 std::set<std::string> rig_labels_set;
531 std::vector<bool> write_depth;
534 std::vector<bool> write_norm_depth;
537 std::vector<bool> write_segmentation_mask;
543 std::vector<std::vector<int>> keypoint_frames;
546 std::vector<std::vector<helios::vec3>> camera_position_vec;
549 std::vector<std::vector<helios::vec3>> camera_lookat_vec;
555 std::string camera_label =
"RGB";
561 std::vector<int> num_images_vec;
564 std::vector<std::string> camera_names;
567 std::set<std::string> camera_names_set;
573 float focal_plane_distance = 0.4;
576 float lens_diameter = 0.02;
579 float FOV_aspect_ratio = 1.4;
585 std::map<std::string, int> camera_dict;
588 std::vector<std::set<std::string>> rig_camera_labels;
591 std::vector<std::string> light_names;
594 std::set<std::string> light_names_set;
597 std::vector<std::string> light_types;
601 std::vector<std::string> all_light_types = {
"sphere",
"rectangle",
"disk"};
604 std::vector<helios::vec3> light_direction_vec;
607 std::vector<helios::SphericalCoord> light_direction_sph_vec;
610 std::vector<helios::vec3> light_rotation_vec;
613 std::vector<helios::vec2> light_size_vec;
616 std::vector<float> light_radius_vec;
619 std::vector<float> light_flux_vec;
622 std::map<std::string, int> light_dict;
625 std::vector<std::set<std::string>> rig_light_labels;
628 std::map<std::string, std::vector<std::vector<uint>>> arrow_dict;
634 pugi::xml_node helios;
637 bool enable_coordinate_axes =
true;
640 bool enable_colorbar =
false;
643 float latitude = 38.55;
646 float longitude = 121.76;
652 std::string csv_weather_file =
"plugins/projectbuilder/inputs/weather_data.csv";
655 std::string cimis_weather_file;
658 bool is_weather_file_csv =
true;
670 std::string ground_texture_file =
"plugins/projectbuilder/inputs/dirt.jpg";
675 bool use_ground_texture =
true;
678 float ground_color[3] = {0.0, 0.0, 0.0};
681 std::string ground_model_file;
684 std::vector<std::string> canopy_labels;
687 std::set<std::string> canopy_labels_set;
690 std::vector<std::string> canopy_data_groups;
696 std::vector<helios::vec3> canopy_origins;
702 std::vector<helios::int2> plant_counts;
708 std::vector<helios::vec2> plant_spacings;
711 std::vector<std::vector<helios::vec3>> individual_plant_locations;
714 std::string plant_library_name =
"cowpea";
717 std::string plant_library_name_verbose =
"Cowpea (Vigna unguiculata)";
720 std::vector<std::string> plant_library_names;
723 std::vector<std::string> plant_library_names_verbose;
726 std::set<std::string> plant_types = {
"almond",
"apple",
"bindweed",
"butterlettuce",
"cheeseweed",
"bean",
"cowpea",
"easternredbud",
"grapevine_VSP",
"maize",
727 "olive",
"pistachio",
"puncturevine",
"rice",
"sorghum",
"soybean",
"sugarbeet",
"tomato",
"walnut",
"wheat"};
730 std::set<std::string> plant_types_verbose = {
"Almond Tree (Prunus dulcis)",
"Apple Tree (Malus pumila)",
731 "Bindweed (Convolvulus arvensis)",
"Butter Lettuce (Lactuca sativa)",
732 "Cheeseweed (Malva neglecta)",
"Common Bean (Phaseolus vulgaris)",
733 "Cowpea (Vigna unguiculata)",
"Eastern Redbud (Cercis canadensis)",
734 "Grapevine (Vitis vinifera)",
"Maize (Zea mays)",
735 "Olive Tree (Olea europaea)",
"Pistachio Tree (Pistachia vera)",
736 "Puncturevine (Tribulus terrestris)",
"Rice (Oryza sativa)",
737 "Sorghum (Sorghum bicolor)",
"Soybean (Glycine max)",
738 "Sugar Beet (Beta vulgaris)",
"Tomato (Solanum lycopersicum)",
739 "Walnut Tree (Juglans regia)",
"Wheat (Triticum aestivum)"};
742 std::map<std::string, std::string> plant_type_lookup = {{
"Almond Tree (Prunus dulcis)",
"almond"},
743 {
"Apple Tree (Malus pumila)",
"apple"},
744 {
"Bindweed (Convolvulus arvensis)",
"bindweed"},
745 {
"Butter Lettuce (Lactuca sativa)",
"butterlettuce"},
746 {
"Cheeseweed (Malva neglecta)",
"cheeseweed"},
747 {
"Common Bean (Phaseolus vulgaris)",
"bean"},
748 {
"Cowpea (Vigna unguiculata)",
"cowpea"},
749 {
"Eastern Redbud (Cercis canadensis)",
"easternredbud"},
750 {
"Grapevine (Vitis vinifera)",
"grapevine_VSP"},
751 {
"Maize (Zea mays)",
"maize"},
752 {
"Olive Tree (Olea europaea)",
"olive"},
753 {
"Pistachio Tree (Pistachia vera)",
"pistachio"},
754 {
"Puncturevine (Tribulus terrestris)",
"puncturevine"},
755 {
"Rice (Oryza sativa)",
"rice"},
756 {
"Sorghum (Sorghum bicolor)",
"sorghum"},
757 {
"Soybean (Glycine max)",
"soybean"},
758 {
"Sugar Beet (Beta vulgaris)",
"sugarbeet"},
759 {
"Tomato (Solanum lycopersicum)",
"tomato"},
760 {
"Walnut Tree (Juglans regia)",
"walnut"},
761 {
"Wheat (Triticum aestivum)",
"wheat"}};
764 std::map<std::string, std::string> plant_type_verbose_lookup = {{
"almond",
"Almond Tree (Prunus dulcis)"},
765 {
"apple",
"Apple Tree (Malus pumila)"},
766 {
"bindweed",
"Bindweed (Convolvulus arvensis)"},
767 {
"butterlettuce",
"Butter Lettuce (Lactuca sativa)"},
768 {
"cheeseweed",
"Cheeseweed (Malva neglecta)"},
769 {
"bean",
"Common Bean (Phaseolus vulgaris)"},
770 {
"cowpea",
"Cowpea (Vigna unguiculata)"},
771 {
"easternredbud",
"Eastern Redbud (Cercis canadensis)"},
772 {
"grapevine_VSP",
"Grapevine (Vitis vinifera)"},
773 {
"maize",
"Maize (Zea mays)"},
774 {
"olive",
"Olive Tree (Olea europaea)"},
775 {
"pistachio",
"Pistachio Tree (Pistachia vera)"},
776 {
"puncturevine",
"Puncturevine (Tribulus terrestris)"},
777 {
"rice",
"Rice (Oryza sativa)"},
778 {
"sorghum",
"Sorghum (Sorghum bicolor)"},
779 {
"soybean",
"Soybean (Glycine max)"},
780 {
"sugarbeet",
"Sugar Beet (Beta vulgaris)"},
781 {
"tomato",
"Tomato (Solanum lycopersicum)"},
782 {
"walnut",
"Walnut Tree (Juglans regia)"},
783 {
"wheat",
"Wheat (Triticum aestivum)"}};
789 std::vector<float> plant_ages;
792 float ground_clipping_height = 0;
795 std::vector<float> ground_clipping_heights;
798 std::map<std::string, int> canopy_labels_dict;
801 std::vector<std::vector<uint>> canopy_IDs;
804 int direct_ray_count = 100;
807 int diffuse_ray_count = 1000;
810 int scattering_depth = 2;
813 float air_turbidity = 0.05;
816 std::vector<std::string> obj_files;
819 std::vector<std::vector<uint>> obj_UUIDs;
822 std::vector<std::string> obj_names;
825 std::set<std::string> obj_names_set;
828 std::string current_obj;
831 std::map<std::string, int> obj_names_dict;
834 std::vector<helios::vec3> obj_positions;
837 std::vector<helios::vec3> prev_obj_positions;
840 std::vector<helios::vec3> obj_orientations;
843 std::vector<helios::vec3> prev_obj_orientations;
846 std::vector<std::string> obj_data_groups;
849 std::vector<helios::vec3> prev_obj_scales;
852 std::vector<helios::vec3> obj_scales;
855 std::vector<helios::RGBcolor> obj_colors;
858 std::set<std::string> xml_library_files = {
"plugins/radiation/spectral_data/leaf_surface_spectral_library.xml",
"plugins/radiation/spectral_data/soil_surface_spectral_library.xml"};
861 std::set<std::string> possible_spectra;
864 std::set<std::string> camera_xml_library_files = {
"plugins/radiation/spectral_data/camera_spectral_library.xml"};
867 std::vector<std::string> possible_camera_calibrations;
870 std::vector<std::map<std::string, std::string>> camera_calibrations;
873 std::string current_calibration_band;
876 std::set<std::string> light_xml_library_files = {
"plugins/radiation/spectral_data/light_spectral_library.xml"};
879 std::vector<std::string> possible_light_spectra;
882 std::vector<std::string> light_spectra;
885 std::string solar_direct_spectrum =
"solar_spectrum_direct_ASTMG173";
888 float reflectivity = 0.0;
891 float transmissivity = 0.0;
894 float emissivity = 1.0;
897 float leaf_reflectivity = 0.0;
900 float leaf_transmissivity = 0.0;
903 float leaf_emissivity = 0.0;
906 float ground_reflectivity = 0.0;
909 float ground_transmissivity = 0.0;
912 float ground_emissivity = 1.0;
915 float petiolule_reflectivity = 0.0;
918 float petiolule_transmissivity = 0.0;
921 float petiolule_emissivity = 0.0;
924 float petiole_reflectivity = 0.0;
927 float petiole_transmissivity = 0.0;
930 float petiole_emissivity = 0.0;
933 float internode_reflectivity = 0.0;
936 float internode_transmissivity = 0.0;
939 float internode_emissivity = 0.0;
942 float peduncle_reflectivity = 0.0;
945 float peduncle_transmissivity = 0.0;
948 float peduncle_emissivity = 0.0;
951 float petal_reflectivity = 0.0;
954 float petal_transmissivity = 0.0;
957 float petal_emissivity = 0.0;
960 float pedicel_reflectivity = 0.0;
963 float pedicel_transmissivity = 0.0;
966 float pedicel_emissivity = 0.0;
969 float fruit_reflectivity = 0.0;
972 float fruit_transmissivity = 0.0;
975 float fruit_emissivity = 0.0;
978 std::string reflectivity_spectrum;
981 std::string transmissivity_spectrum;
984 std::string emissivity_spectrum;
987 std::string leaf_reflectivity_spectrum =
"grape_leaf_reflectivity_0000";
990 std::string leaf_transmissivity_spectrum =
"grape_leaf_transmissivity_0000";
993 std::string leaf_emissivity_spectrum;
996 std::string ground_reflectivity_spectrum =
"soil_reflectivity_0000";
999 std::string ground_transmissivity_spectrum;
1002 std::string ground_emissivity_spectrum;
1005 std::string petiolule_reflectivity_spectrum;
1008 std::string petiolule_transmissivity_spectrum;
1011 std::string petiolule_emissivity_spectrum;
1014 std::string petiole_reflectivity_spectrum;
1017 std::string petiole_transmissivity_spectrum;
1020 std::string petiole_emissivity_spectrum;
1023 std::string internode_reflectivity_spectrum;
1026 std::string internode_transmissivity_spectrum;
1029 std::string internode_emissivity_spectrum;
1032 std::string peduncle_reflectivity_spectrum;
1035 std::string peduncle_transmissivity_spectrum;
1038 std::string peduncle_emissivity_spectrum;
1041 std::string petal_reflectivity_spectrum;
1044 std::string petal_transmissivity_spectrum;
1047 std::string petal_emissivity_spectrum;
1050 std::string pedicel_reflectivity_spectrum;
1053 std::string pedicel_transmissivity_spectrum;
1056 std::string pedicel_emissivity_spectrum;
1059 std::string fruit_reflectivity_spectrum;
1062 std::string fruit_transmissivity_spectrum;
1065 std::string fruit_emissivity_spectrum;
1068 std::set<std::string> visualization_types_primitive = {
"radiation_flux_PAR",
"radiation_flux_NIR",
"radiation_flux_LW"};
1071 std::set<std::string> visualization_types_object = {};
1074 std::map<std::string, helios::HeliosDataType> primitive_data_types;
1077 std::map<std::string, helios::HeliosDataType> object_data_types;
1080 std::string visualization_type =
"RGB";
1083 std::string current_canopy;
1086 std::string current_rig;
1089 std::string current_cam;
1092 std::string current_light;
1095 std::string current_keypoint;
1098 std::string current_primitive =
"All";
1101 std::string current_data_group =
"All";
1104 std::string current_band =
"red";
1107 std::string current_band_reflectivity =
"red";
1110 std::string current_band_transmissivity =
"red";
1113 std::string current_band_emissivity =
"red";
1116 std::map<std::string, std::vector<uint>> camera_models_dict;
1128 void calculationTab();
1134 void radiationTab();
1143 void deleteArrows();
1149 void deleteCanopy(
const std::string &
canopy);
1155 void deleteObject(
const std::string &
obj);
1161 void updateCanopy(
const std::string &
canopy);
1167 void updateArrows();
1170 void updateCameraModels();
1173 void deleteCameraModels();
1176 void updateDataGroups();
1179 void updatePrimitiveTypes();
1185 std::string currently_dragging;
1188 std::string currently_dragging_type;
1191 bool disable_dragging =
false;
1194 void canopyTab(std::string curr_canopy_name,
int id);
1197 void rigTab(std::string curr_rig_name,
int id);
1200 void objectTab(std::string curr_obj_name,
int id);
1203 void saveObject(std::string file_name, std::vector<uint> obj_UUID_vec, std::string file_extension);
1206 void saveCanopy(std::string file_name, std::vector<uint> canopy_ID_vec,
helios::vec3 position, std::string file_extension)
const;
1209 void saveCanopy(std::string file_name_base, std::vector<uint> canopy_ID_vec, std::vector<helios::vec3> positions, std::string file_extension)
const;
1212 bool save_plants_individually =
false;
1215 void addBand(std::string label,
float wavelength_min,
float wavelength_max,
bool enable_emission);
1218 void addBand(std::string label,
bool enable_emission);
1221 std::map<std::string, std::string> distribution_types;
1224 std::map<std::string, std::vector<float>> distribution_params;
1227 std::map<std::string, int> distribution_dict;
1230 std::map<std::string, taggedPtr> randomized_variable_lookup;
1233 std::default_random_engine generator;
1236 std::string current_distribution =
"Normal (Gaussian)";
1239 std::string current_axis =
"X";
1242 std::set<std::string> possible_axes = {
"X",
"Y",
"Z"};
1245 std::vector<std::string> distribution_names = {
"N/A",
"Normal (Gaussian)",
"Uniform",
"Weibull"};
1248 std::vector<distribution> distributions;
1251 std::vector<float> curr_distribution_params = {0.0, 0.0};
1254 bool randomize_repeatedly =
false;
1257 std::streambuf *old_cout_stream_buf = std::cout.rdbuf();
1260 std::stringstream captured_cout;
1262 std::size_t last_console_size = 0;
1265 int num_recordings = 1;
1268 std::map<std::string, object> objects_dict;
1271 std::map<std::string, canopy> canopy_dict;
1280 std::set<int> dirty_objects = {};
1283 std::set<int> dirty_canopies = {};
1286 std::set<std::string> lighting_models = {
"None",
"Phong",
"Phong Shadowed"};
1289 std::string lighting_model =
"None";
1295 float light_intensity = 1.0;
1301 std::string calculation_type =
"primitive";
1304 std::vector<std::string> calculation_types{
"primitive",
"object",
"data group"};
1307 std::map<std::string, bool> calculation_selection_datagroup{{
"All",
false}};
1310 std::map<std::string, bool> calculation_selection_primitive{{
"All",
false}};
1313 std::set<std::string> calculation_variable_choices;
1316 std::string calculation_variable_global;
1319 std::vector<std::string> calculation_variables_global = {
""};
1322 std::vector<std::string> calculation_variables_primitive = {
""};
1325 std::vector<float> calculation_scalars_global = {1.0};
1328 std::vector<float> calculation_scalars_primitive = {1.0};
1331 std::vector<std::string> calculation_operators_global = {};
1334 std::vector<std::string> calculation_operators_primitive = {};
1337 std::set<std::string> calculation_operators_choices = {
"+",
"-",
"/",
"x"};
1340 std::set<std::string> calculation_aggregation_choices = {
"None",
"Mean",
"Sum",
"Area Weighted Mean",
"Area Weighted Sum"};
1345 std::set<helios::HeliosDataType> heliosNumericTypes = {helios::HELIOS_TYPE_FLOAT};
1348 std::string curr_aggregation =
"Mean";
1350 std::vector<std::string> calculation_aggregations = {
"Mean"};
1352 bool by_primitive =
false;
1354 std::string calculation_name_primitive =
"saved prim data";
1356 std::string calculation_name_global =
"saved global data";
1359 float calculation_result_global = 0.0f;
1362 void refreshBoundingBoxObjectList();
1365 void globalCalculation();
1368 void savePrimitiveCalculation();
1371 void runRadiation();
1402 static int selfTest(
int argc = 0,
char **argv =
nullptr);
1461 std::map<std::string, int>
getNodeLabels(
const std::string &label_name,
const std::string &node_name, std::vector<std::string> &labels_vec);
1469 void getKeypoints(
const std::string &name,
const std::string &field, std::vector<std::vector<int>> &keypoints);
1477 void setKeypoints(
const std::string &name,
const std::string &field, std::vector<std::vector<int>> &keypoints);
1485 void xmlGetValue(
const std::string &name,
const std::string &parent,
int &default_value);
1493 void xmlGetValue(
const std::string &name,
const std::string &parent,
float &default_value);
1501 void xmlGetValue(
const std::string &name,
const std::string &parent, std::string &default_value);
1549 void xmlGetValues(
const std::string &name,
const std::string &parent, std::vector<helios::vec2> &default_vec);
1557 void xmlGetValues(
const std::string &name,
const std::string &parent, std::vector<helios::vec3> &default_vec);
1565 void xmlGetValues(
const std::string &name,
const std::string &parent, std::vector<helios::int2> &default_vec);
1573 void xmlGetValues(
const std::string &name,
const std::string &parent, std::vector<std::string> &default_vec);
1581 void xmlGetValues(
const std::string &name,
const std::string &parent, std::vector<float> &default_vec);
1589 void xmlGetValues(
const std::string &name,
const std::string &parent, std::vector<int> &default_vec);
1597 void xmlGetValues(
const std::string &name,
const std::string &parent, std::vector<helios::RGBcolor> &default_vec);
1605 void xmlGetValues(
const std::string &name,
const std::string &parent, std::vector<std::vector<helios::vec3>> &default_vec);
1613 void xmlGetValues(
const std::string &name,
const std::string &parent, std::vector<std::set<std::string>> &default_vec);
1621 void xmlGetValues(
const std::string &name,
const std::string &parent, std::set<std::string> &default_set);
1628 void xmlRemoveField(
const std::string &name,
const std::string &parent);
1636 void xmlSetValue(
const std::string &name,
const std::string &parent,
int &default_value);
1644 void xmlSetValue(
const std::string &name,
const std::string &parent,
float &default_value);
1652 void xmlSetValue(
const std::string &name,
const std::string &parent, std::string &default_value);
1685 void xmlSetValues(
const std::string &field_name,
const std::string &node_name, std::vector<helios::vec2> &values_vec, std::map<std::string, int> &node_map);
1694 void xmlSetValues(
const std::string &field_name,
const std::string &node_name, std::vector<helios::vec3> &values_vec, std::map<std::string, int> &node_map);
1703 void xmlSetValues(
const std::string &field_name,
const std::string &node_name, std::vector<helios::int2> &values_vec, std::map<std::string, int> &node_map);
1712 void xmlSetValues(
const std::string &field_name,
const std::string &node_name, std::vector<std::string> &values_vec, std::map<std::string, int> &node_map);
1721 void xmlSetValues(
const std::string &field_name,
const std::string &node_name, std::vector<int> &values_vec, std::map<std::string, int> &node_map);
1730 void xmlSetValues(
const std::string &field_name,
const std::string &node_name, std::vector<float> &values_vec, std::map<std::string, int> &node_map);
1739 void xmlSetValues(
const std::string &field_name,
const std::string &node_name, std::vector<helios::RGBcolor> &values_vec, std::map<std::string, int> &node_map);
1748 void xmlSetValues(
const std::string &field_name,
const std::string &node_name, std::vector<std::vector<helios::vec3>> &values_vec, std::map<std::string, int> &node_map);
1757 void xmlSetValues(
const std::string &field_name,
const std::string &node_name, std::vector<std::set<std::string>> &values_vec, std::map<std::string, int> &node_map);
1765 void xmlSetValues(
const std::string &field_name,
const std::string &node_name, std::set<std::string> &values_set);
1773 void setNodeLabels(
const std::string &label_name,
const std::string &node_name, std::set<std::string> &labels_set);
1775#ifdef ENABLE_HELIOS_VISUALIZER
1781 void randomizePopup(std::string popup_name,
taggedPtr ptr);
1788 void noisePopup(std::string popup_name, std::vector<distribution> &dist_vec);
1790 void randomizePopup(std::string popup_name,
taggedPtr ptr);
1791 void noisePopup(std::string popup_name, std::vector<distribution> &dist_vec);
1815#ifdef ENABLE_HELIOS_VISUALIZER
1820 void randomizerParams(std::string var_name);
1822 void randomizerParams(std::string var_name);
1829 void sample(std::string var_name);
1834#ifdef ENABLE_HELIOS_VISUALIZER
1836 void outputConsole();
1838 void outputConsole();
1847 void updateColor(std::string curr_obj, std::string obj_type,
float *new_color);
1868 void addRig(std::string new_rig_label);
1870#ifdef ENABLE_HELIOS_VISUALIZER
1877 void dropDown(std::string widget_name, std::string &selected, std::vector<std::string> choices);
1885 void dropDown(std::string widget_name, std::string &selected, std::set<std::string> choices);
1887 void dropDown(std::string widget_name, std::string &selected, std::vector<std::string> choices);
1888 void dropDown(std::string widget_name, std::string &selected, std::set<std::string> choices);
1891#ifdef ENABLE_HELIOS_VISUALIZER
1893 void refreshVisualization();
1896 void refreshVisualizationTypes();
1898 void refreshVisualization();
1899 void refreshVisualizationTypes();
1902#ifdef ENABLE_HELIOS_VISUALIZER
1954 std::cout.rdbuf(captured_cout.rdbuf());
1955 primitive_UUIDs = {{
"ground", ground_UUIDs}, {
"leaf", leaf_UUIDs}, {
"petiolule", petiolule_UUIDs}, {
"petiole", petiole_UUIDs}, {
"internode", internode_UUIDs},
1956 {
"peduncle", peduncle_UUIDs}, {
"petal", petal_UUIDs}, {
"pedicel", pedicel_UUIDs}, {
"fruit", fruit_UUIDs}};
1957 primitive_continuous = {{
"All", {
false,
false,
false}}, {
"ground", {
false,
false,
false}}, {
"leaf", {
false,
false,
false}}, {
"petiolule", {
false,
false,
false}}, {
"petiole", {
false,
false,
false}},
1958 {
"internode", {
false,
false,
false}}, {
"peduncle", {
false,
false,
false}}, {
"petal", {
false,
false,
false}}, {
"pedicel", {
false,
false,
false}}, {
"fruit", {
false,
false,
false}}};
1959 bandlabels = {
"red",
"green",
"blue",
"PAR",
"NIR",
"LW"};
1960 bandlabels_set = {
"All",
"red",
"green",
"blue",
"PAR",
"NIR",
"LW"};
1961 bandlabels_set_emissivity = {
"red",
"green",
"blue",
"PAR",
"NIR",
"LW"};
1964 for (std::string band: bandlabels) {
1965 primitive_values[band] = {{
"All", {reflectivity, transmissivity, emissivity}},
1966 {
"ground", {ground_reflectivity, ground_transmissivity, ground_emissivity}},
1967 {
"leaf", {leaf_reflectivity, leaf_transmissivity, leaf_emissivity}},
1968 {
"petiolule", {petiolule_reflectivity, petiolule_transmissivity, petiolule_emissivity}},
1969 {
"petiole", {petiole_reflectivity, petiole_transmissivity, petiole_emissivity}},
1970 {
"internode", {internode_reflectivity, internode_transmissivity, internode_emissivity}},
1971 {
"peduncle", {peduncle_reflectivity, peduncle_transmissivity, peduncle_emissivity}},
1972 {
"petal", {petal_reflectivity, petal_transmissivity, petal_emissivity}},
1973 {
"pedicel", {pedicel_reflectivity, pedicel_transmissivity, pedicel_emissivity}},
1974 {
"fruit", {fruit_reflectivity, fruit_transmissivity, fruit_emissivity}}};
1975 direct_ray_count_dict[band] = direct_ray_count;
1976 diffuse_ray_count_dict[band] = diffuse_ray_count;
1977 scattering_depth_dict[band] = scattering_depth;
1979 primitive_spectra = {{
"All", {reflectivity_spectrum, transmissivity_spectrum, emissivity_spectrum}},
1980 {
"ground", {ground_reflectivity_spectrum, ground_transmissivity_spectrum, ground_emissivity_spectrum}},
1981 {
"leaf", {leaf_reflectivity_spectrum, leaf_transmissivity_spectrum, leaf_emissivity_spectrum}},
1982 {
"petiolule", {petiolule_reflectivity_spectrum, petiolule_transmissivity_spectrum, petiolule_emissivity_spectrum}},
1983 {
"petiole", {petiole_reflectivity_spectrum, petiole_transmissivity_spectrum, petiole_emissivity_spectrum}},
1984 {
"internode", {internode_reflectivity_spectrum, internode_transmissivity_spectrum, internode_emissivity_spectrum}},
1985 {
"peduncle", {peduncle_reflectivity_spectrum, peduncle_transmissivity_spectrum, peduncle_emissivity_spectrum}},
1986 {
"petal", {petal_reflectivity_spectrum, petal_transmissivity_spectrum, petal_emissivity_spectrum}},
1987 {
"pedicel", {pedicel_reflectivity_spectrum, pedicel_transmissivity_spectrum, pedicel_emissivity_spectrum}},
1988 {
"fruit", {fruit_reflectivity_spectrum, fruit_transmissivity_spectrum, fruit_emissivity_spectrum}}};
1993 std::cout.rdbuf(old_cout_stream_buf);
1998#ifdef ENABLE_BOUNDARYLAYERCONDUCTANCEMODEL
2002#ifdef ENABLE_ENERGYBALANCEMODEL
2006#ifdef ENABLE_SOLARPOSITION
2010#ifdef ENABLE_RADIATION_MODEL
2015#ifdef ENABLE_CANOPY_GENERATOR
2019#ifdef ENABLE_PLANT_ARCHITECTURE
2023#ifdef ENABLE_HELIOS_VISUALIZER