ENH: set filament retract params even if nil

1.Always set filament retract params to filament_num size.In
gcode export module, we can always use filament idx to get
retract params

2. add logic in update_filament_maps_to_config to update the
   retraction related params which can be overiden by filament

jira:NONE

Signed-off-by: xun.zhang <xun.zhang@bambulab.com>
Change-Id: Ia45dd1401aa3565d062d5da1c9f4a2ba8966f693
(cherry picked from commit 4b083d8d8220b8f65a1b804688cb2d6e238eb4e6)
This commit is contained in:
xun.zhang
2024-12-05 17:10:28 +08:00
committed by Noisyfox
parent d637efee3d
commit 07148d2dfd
5 changed files with 70 additions and 27 deletions

View File

@@ -8553,6 +8553,41 @@ void DynamicPrintConfig::update_non_diff_values_to_base_config(DynamicPrintConfi
return;
}
void compute_filament_override_value(const std::string& opt_key, const ConfigOption *opt_old_machine, const ConfigOption *opt_new_machine, const ConfigOption *opt_new_filament, const DynamicPrintConfig& new_full_config,
t_config_option_keys& diff_keys, DynamicPrintConfig& filament_overrides, std::vector<int>& f_maps)
{
bool is_nil = opt_new_filament->is_nil();
// ugly code, for these params, we should ignore the value in filament params
ConfigOptionBoolsNullable opt_long_retraction_default;
if (opt_key == "long_retractions_when_cut" && new_full_config.option<ConfigOptionInt>("enable_long_retraction_when_cut")->value != LongRectrationLevel::EnableFilament) {
auto ptr = dynamic_cast<const ConfigOptionBoolsNullable*>(opt_new_filament);
for (size_t idx = 0; idx < ptr->values.size(); ++idx)
opt_long_retraction_default.values.push_back(ptr->nil_value());
opt_new_filament = &opt_long_retraction_default;
}
ConfigOptionFloatsNullable opt_retraction_distance_default;
if (opt_key == "retraction_distances_when_cut" && new_full_config.option<ConfigOptionInt>("enable_long_retraction_when_cut")->value != LongRectrationLevel::EnableFilament) {
auto ptr = dynamic_cast<const ConfigOptionFloatsNullable*>(opt_new_filament);
for (size_t idx = 0; idx < ptr->values.size(); ++idx)
opt_long_retraction_default.values.push_back(ptr->nil_value());
opt_new_filament = &opt_retraction_distance_default;
}
auto opt_copy = opt_new_machine->clone();
opt_copy->apply_override(opt_new_filament, f_maps);
bool changed = *opt_old_machine != *opt_copy;
if (changed) {
diff_keys.emplace_back(opt_key);
filament_overrides.set_key_value(opt_key, opt_copy);
}
else
delete opt_copy;
}
//BBS: pass map to recording all invalid valies
//FIXME localize this function.
std::map<std::string, std::string> validate(const FullPrintConfig &cfg, bool under_cli)