FIX: error sync behavior for customize printer preset

jira: STUDIO-10331
Change-Id: I4d42ed089e515c2d74dfade1589f20f1c80ca4ca
This commit is contained in:
zhimin.zeng 2025-02-19 10:10:44 +08:00 committed by lane.wei
parent 6e8670ec6e
commit ce963cede5
2 changed files with 120 additions and 122 deletions

View File

@ -2856,13 +2856,13 @@ wxBoxSizer *CreatePrinterPresetDialog::create_page2_btns_item(wxWindow *parent)
if (printer_variant) if (printer_variant)
printer_variant->value = printer_nozzle_name; printer_variant->value = printer_nozzle_name;
auto nozzle_diameter = dynamic_cast<ConfigOptionFloats *>(m_printer_preset->config.option("nozzle_diameter", true)); auto nozzle_diameter = dynamic_cast<ConfigOptionFloatsNullable *>(m_printer_preset->config.option("nozzle_diameter", true));
if (nozzle_diameter) { if (nozzle_diameter) {
std::unordered_map<std::string, float>::const_iterator iter = nozzle_diameter_map.find(printer_nozzle_name); std::unordered_map<std::string, float>::const_iterator iter = nozzle_diameter_map.find(printer_nozzle_name);
if (nozzle_diameter_map.end() != iter) { if (nozzle_diameter_map.end() != iter) {
nozzle_diameter->values = {iter->second}; std::fill(nozzle_diameter->values.begin(), nozzle_diameter->values.end(), iter->second);
} else { } else {
nozzle_diameter->values = {std::stof(get_nozzle_diameter())}; std::fill(nozzle_diameter->values.begin(), nozzle_diameter->values.end(), std::stof(get_nozzle_diameter()));
} }
} }
} }

View File

@ -194,16 +194,11 @@ wxDEFINE_EVENT(EVT_ADD_FILAMENT, SimpleEvent);
wxDEFINE_EVENT(EVT_DEL_FILAMENT, SimpleEvent); wxDEFINE_EVENT(EVT_DEL_FILAMENT, SimpleEvent);
wxDEFINE_EVENT(EVT_ADD_CUSTOM_FILAMENT, ColorEvent); wxDEFINE_EVENT(EVT_ADD_CUSTOM_FILAMENT, ColorEvent);
wxDEFINE_EVENT(EVT_NOTICE_CHILDE_SIZE_CHANGED, SimpleEvent); wxDEFINE_EVENT(EVT_NOTICE_CHILDE_SIZE_CHANGED, SimpleEvent);
static int get_diameter_index(float diameter) static string get_diameter_string(float diameter)
{ {
float eps = 1e-3; std::ostringstream stream;
std::vector<float> diameters = {0.2, 0.4, 0.6, 0.8}; stream << std::fixed << std::setprecision(1) << diameter;
for (int index = 0; index < diameters.size(); ++index) { return stream.str();
if (abs(diameters[index] - diameter) < eps) {
return index;
}
}
return 0;
} }
bool Plater::has_illegal_filename_characters(const wxString& wxs_name) bool Plater::has_illegal_filename_characters(const wxString& wxs_name)
@ -1229,8 +1224,11 @@ bool Sidebar::priv::sync_extruder_list(bool &only_external_material)
int main_index = obj->is_main_extruder_on_left() ? 0 : 1; int main_index = obj->is_main_extruder_on_left() ? 0 : 1;
int deputy_index = obj->is_main_extruder_on_left() ? 1 : 0; int deputy_index = obj->is_main_extruder_on_left() ? 1 : 0;
left_extruder->combo_diameter->SetSelection(get_diameter_index(nozzle_diameters[0])); int left_index = left_extruder->combo_diameter->FindString(get_diameter_string(nozzle_diameters[0]));
right_extruder->combo_diameter->SetSelection(get_diameter_index(nozzle_diameters[1])); int right_index = left_extruder->combo_diameter->FindString(get_diameter_string(nozzle_diameters[1]));
assert(left_extruder != -1 && right_extruder != -1);
left_extruder->combo_diameter->SetSelection(left_index);
right_extruder->combo_diameter->SetSelection(right_index);
is_switching_diameter = true; is_switching_diameter = true;
switch_diameter(false); switch_diameter(false);
is_switching_diameter = false; is_switching_diameter = false;