From 61a174745609e18652485f65b519d316b6351774 Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Fri, 31 May 2024 16:01:30 +0800 Subject: [PATCH] ENH: CLI: add support for params in assembled objects JIRA: no-jira Change-Id: I3ecd280107e4f6d2a184555b9c31fb49f299e9d4 --- src/BambuStudio.cpp | 74 +++++++++++++++++++++++++++++++++++++++++++-- src/BambuStudio.hpp | 8 +++++ 2 files changed, 79 insertions(+), 3 deletions(-) diff --git a/src/BambuStudio.cpp b/src/BambuStudio.cpp index 8ba977a64..67c3b9f95 100644 --- a/src/BambuStudio.cpp +++ b/src/BambuStudio.cpp @@ -694,15 +694,43 @@ static int load_assemble_plate_list(std::string config_file, std::vector>(); - assemble_object.height_ranges.push_back(std::move(height_range)); } - BOOST_LOG_TRIVIAL(debug) << boost::format("Plate %1%, object %2% has %3% print params") % (plate_index + 1) %assemble_object.path % assemble_object.print_params.size(); } } + if (plate_json.contains(JSON_ASSEMPLE_ASSEMBLE_PARAMS)) { + json assemble_params_json = plate_json[JSON_ASSEMPLE_ASSEMBLE_PARAMS]; + int assemble_count = assemble_params_json.size(); + for (int i = 0; i < assemble_count; i++) + { + assembled_param_info_t assembled_param; + int assemble_index = assemble_params_json[i][JSON_ASSEMPLE_OBJECT_ASSEMBLE_INDEX]; + if (assemble_params_json[i].contains(JSON_ASSEMPLE_OBJECT_PRINT_PARAMS)) { + assembled_param.print_params = assemble_params_json[i][JSON_ASSEMPLE_OBJECT_PRINT_PARAMS].get>(); + BOOST_LOG_TRIVIAL(debug) << boost::format("Plate %1%, assemble object %2% has %3% print params") % (plate_index + 1) %i % assembled_param.print_params.size(); + } + if (assemble_params_json[i].contains(JSON_ASSEMPLE_OBJECT_HEIGHT_RANGES)) { + json height_range_json = assemble_params_json[i][JSON_ASSEMPLE_OBJECT_HEIGHT_RANGES]; + int range_count = height_range_json.size(); + + BOOST_LOG_TRIVIAL(debug) << boost::format("Plate %1%, assemble object %2% has %3% height ranges") % (plate_index + 1) %i % range_count; + + assembled_param.height_ranges.resize(range_count); + for (int range_index = 0; range_index < range_count; range_index++) + { + height_range_info_t& height_range = assembled_param.height_ranges[range_index]; + height_range.min_z = height_range_json[range_index][JSON_ASSEMPLE_OBJECT_MIN_Z]; + height_range.max_z = height_range_json[range_index][JSON_ASSEMPLE_OBJECT_MAX_Z]; + height_range.range_params = height_range_json[range_index][JSON_ASSEMPLE_OBJECT_RANGE_PARAMS].get>(); + } + } + assemble_plate.assembled_param_list.emplace(assemble_index, std::move(assembled_param)); + } + BOOST_LOG_TRIVIAL(debug) << boost::format("Plate %1%, has %2% plate params") % (plate_index + 1) % assemble_plate.plate_params.size(); + } } } catch(std::exception &err) { @@ -902,6 +930,46 @@ static int construct_assemble_list(std::vector &assemble_ } } + size_t assemble_count = merged_objects.size(); + if ((assemble_count > 0) && (assemble_plate_info.assembled_param_list.size() > 0)) + { + for (auto& iter : merged_objects) + { + ModelObject* assemble_obj = iter.second; + int assemble_index = iter.first; + + auto assemble_iter = assemble_plate_info.assembled_param_list.find(assemble_index); + + if (assemble_iter != assemble_plate_info.assembled_param_list.end()) + { + assembled_param_info_t& assembled_param = assemble_iter->second; + if (!assembled_param.print_params.empty()) + { + for (auto param_iter = assembled_param.print_params.begin(); param_iter != assembled_param.print_params.end(); param_iter++) + { + assemble_obj->config.set_deserialize(param_iter->first, param_iter->second, config_substitutions); + BOOST_LOG_TRIVIAL(debug) << boost::format("Plate %1%, assemble object %2% key %3%, value %4%") % (index + 1) % assemble_obj->name % param_iter->first % param_iter->second; + } + } + + if (!assembled_param.height_ranges.empty()) + { + for (int range_index = 0; range_index < assembled_param.height_ranges.size(); range_index++) + { + height_range_info_t& range = assembled_param.height_ranges[range_index]; + DynamicPrintConfig range_config; + for (auto range_config_iter = range.range_params.begin(); range_config_iter != range.range_params.end(); range_config_iter++) + { + range_config.set_deserialize(range_config_iter->first, range_config_iter->second, config_substitutions); + BOOST_LOG_TRIVIAL(debug) << boost::format("assenble object %1%, height range %2% key %3%, value %4%") % assemble_obj->name % range_index % range_config_iter->first % range_config_iter->second; + } + assemble_obj->layer_config_ranges[{ range.min_z, range.max_z }].assign_config(std::move(range_config)); + } + } + } + } + } + assemble_plate_info.filaments_count = used_filaments.size(); assemble_plate_info.assemble_obj_list.clear(); assemble_plate_info.assemble_obj_list.shrink_to_fit(); diff --git a/src/BambuStudio.hpp b/src/BambuStudio.hpp index 36bb3b61a..301fb5a3a 100644 --- a/src/BambuStudio.hpp +++ b/src/BambuStudio.hpp @@ -30,6 +30,8 @@ namespace IO { #define JSON_ASSEMPLE_OBJECT_POS_Z "pos_z" #define JSON_ASSEMPLE_OBJECT_ASSEMBLE_INDEX "assemble_index" #define JSON_ASSEMPLE_OBJECT_PRINT_PARAMS "print_params" +#define JSON_ASSEMPLE_ASSEMBLE_PARAMS "assembled_params" + #define JSON_ASSEMPLE_OBJECT_MIN_Z "min_z" #define JSON_ASSEMPLE_OBJECT_MAX_Z "max_z" @@ -43,6 +45,11 @@ typedef struct _height_range_info { std::map range_params; }height_range_info_t; +typedef struct _assembled_param_info { + std::map print_params; + std::vector height_ranges; +}assembled_param_info_t; + typedef struct _assemble_object_info { std::string path; int count; @@ -64,6 +71,7 @@ typedef struct _assemble_plate_info { std::map plate_params; std::vector assemble_obj_list; std::vector loaded_obj_list; + std::map assembled_param_list; }assemble_plate_info_t;