FIX: invalid params in user preset load

jira: NONE

Signed-off-by: xun.zhang <xun.zhang@bambulab.com>
Change-Id: I7e9cdabb2d9c285db841c810f32aee5943b4db82
(cherry picked from commit ff8d764e7256cec1e7cd1d4d3d034590eb846f45)
(cherry picked from commit fb0461f3459afcfc80165442277ba8c54e232a39)
This commit is contained in:
xun.zhang
2025-06-04 18:13:58 +08:00
committed by Noisyfox
parent 8c64808ae5
commit 3c051f4180
5 changed files with 97 additions and 21 deletions

View File

@@ -152,6 +152,51 @@ static const std::unordered_map<std::string, std::string> pre_family_model_map {
{ "SL1", "SL1" },
}};
// 中间版本兼容性处理如果是nil值先改成default值再进行扩展
void extend_default_config_length(DynamicPrintConfig& config, const DynamicPrintConfig& defaults)
{
constexpr int default_param_length = 1;
int filament_variant_length = default_param_length;
int process_variant_length = default_param_length;
int machine_variant_length = default_param_length;
if(config.has("filament_extruder_variant"))
filament_variant_length = config.option<ConfigOptionStrings>("filament_extruder_variant")->size();
if(config.has("print_extruder_variant"))
process_variant_length = config.option<ConfigOptionStrings>("print_extruder_variant")->size();
if(config.has("printer_extruder_variant"))
machine_variant_length = config.option<ConfigOptionStrings>("printer_extruder_variant")->size();
auto replace_nil_and_resize = [&](const std::string & key, int length){
ConfigOption* raw_ptr = config.option(key);
ConfigOptionVectorBase* opt_vec = static_cast<ConfigOptionVectorBase *>(raw_ptr);
if(raw_ptr->is_nil() && defaults.has(key) && std::find(filament_extruder_override_keys.begin(), filament_extruder_override_keys.end(), key) == filament_extruder_override_keys.end()){
opt_vec->clear();
opt_vec->resize(length, defaults.option(key));
}
else{
opt_vec->resize(length, raw_ptr);
}
};
for(auto& key :config.keys()){
if(auto iter = print_options_with_variant.find(key); iter != print_options_with_variant.end()){
replace_nil_and_resize(key, process_variant_length);
}
else if(auto iter = filament_options_with_variant.find(key); iter != filament_options_with_variant.end()){
replace_nil_and_resize(key, filament_variant_length);
}
else if(auto iter = printer_options_with_variant_1.find(key); iter != printer_options_with_variant_1.end()){
replace_nil_and_resize(key, machine_variant_length);
}
else if(auto iter = printer_options_with_variant_2.find(key); iter != printer_options_with_variant_2.end()){
replace_nil_and_resize(key, machine_variant_length * 2);
}
}
}
VendorProfile VendorProfile::from_ini(const ptree &tree, const boost::filesystem::path &path, bool load_all)
{
static const std::string printer_model_key = "printer_model:";
@@ -1265,6 +1310,7 @@ void PresetCollection::load_presets(
// Find a default preset for the config. The PrintPresetCollection provides different default preset based on the "printer_technology" field.
preset.config = default_preset.config;
preset.config.apply(std::move(config));
extend_default_config_length(preset.config, default_preset.config);
}
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " load preset: " << name << " and filament_id: " << preset.filament_id << " and base_id: " << preset.base_id;
@@ -1821,6 +1867,7 @@ bool PresetCollection::load_user_preset(std::string name, std::map<std::string,
}
// Find a default preset for the config. The PrintPresetCollection provides different default preset based on the "printer_technology" field.
new_config = default_preset.config;
extend_default_config_length(new_config, default_preset.config);
}
if (inherit_preset) {
std::string extruder_id_name, extruder_variant_name;