From dbff3729a4ced8f60c710e162066672a4ffaf8aa Mon Sep 17 00:00:00 2001 From: Kunlong Ma Date: Mon, 6 May 2024 18:15:30 +0800 Subject: [PATCH] FIX: Incorrect multiplier, when the multiplier is set to below 1 github: #3987 #3805 1. In some languages that use commas as decimal points, setting multiplier below 1 will resolve to 0 2. Unable to save multiplier correctly Change-Id: I62bc55e270929ebb5e910eb79c6f97106e842b93 --- src/libslic3r/PresetBundle.cpp | 1 + src/slic3r/GUI/WipeTowerDialog.cpp | 42 ++++++++++++------------------ src/slic3r/GUI/WipeTowerDialog.hpp | 7 +---- 3 files changed, 19 insertions(+), 31 deletions(-) diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index ac87d38ee..cba35fe71 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -1577,6 +1577,7 @@ void PresetBundle::load_selections(AppConfig &config, const PresetPreferences& p // If executed due to a Config Wizard update, preferred_printer contains the first newly installed printer, otherwise nullptr. const Preset *preferred_printer = printers.find_system_preset_by_model_and_variant(preferred_selection.printer_model_id, preferred_selection.printer_variant); printers.select_preset_by_name(preferred_printer ? preferred_printer->name : initial_printer_profile_name, true); + CNumericLocalesSetter locales_setter; //BBS: set default print/filament profiles to BBL's default setting if (preferred_printer) diff --git a/src/slic3r/GUI/WipeTowerDialog.cpp b/src/slic3r/GUI/WipeTowerDialog.cpp index 2f73ba952..eb2c6be1f 100644 --- a/src/slic3r/GUI/WipeTowerDialog.cpp +++ b/src/slic3r/GUI/WipeTowerDialog.cpp @@ -430,21 +430,18 @@ WipingPanel::WipingPanel(wxWindow* parent, const std::vector& matrix, con auto on_apply_text_modify = [this](wxEvent& e) { wxString str = m_flush_multiplier_ebox->GetValue(); - str.Replace(",", "."); - double multiplier = 1.f; - if (str.ToDouble(&multiplier)) { - if (multiplier < g_min_flush_multiplier || multiplier > g_max_flush_multiplier) { - str = wxString::Format(("%.2f"), multiplier < g_min_flush_multiplier ? g_min_flush_multiplier : g_max_flush_multiplier); - m_flush_multiplier_ebox->SetValue(str); - MessageDialog dlg(nullptr, - wxString::Format(_L("The multiplier should be in range [%.2f, %.2f]."), g_min_flush_multiplier, g_max_flush_multiplier), - _L("Warning"), wxICON_WARNING | wxOK); - dlg.ShowModal(); - } - for (unsigned int i = 0; i < m_number_of_extruders; ++i) { - for (unsigned int j = 0; j < m_number_of_extruders; ++j) { - edit_boxes[i][j]->SetValue(to_string(int(m_matrix[m_number_of_extruders * j + i] * multiplier))); - } + float multiplier = wxAtof(str); + if (multiplier < g_min_flush_multiplier || multiplier > g_max_flush_multiplier) { + str = wxString::Format(("%.2f"), multiplier < g_min_flush_multiplier ? g_min_flush_multiplier : g_max_flush_multiplier); + m_flush_multiplier_ebox->SetValue(str); + MessageDialog dlg(nullptr, + wxString::Format(_L("The multiplier should be in range [%.2f, %.2f]."), g_min_flush_multiplier, g_max_flush_multiplier), + _L("Warning"), wxICON_WARNING | wxOK); + dlg.ShowModal(); + } + for (unsigned int i = 0; i < m_number_of_extruders; ++i) { + for (unsigned int j = 0; j < m_number_of_extruders; ++j) { + edit_boxes[i][j]->SetValue(to_string(int(m_matrix[m_number_of_extruders * j + i] * multiplier))); } } @@ -459,9 +456,7 @@ WipingPanel::WipingPanel(wxWindow* parent, const std::vector& matrix, con param_sizer->Add(flush_multiplier_title, 0, wxALIGN_CENTER | wxALL, 0); param_sizer->AddSpacer(FromDIP(5)); m_flush_multiplier_ebox = new wxTextCtrl(m_page_advanced, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(FromDIP(50), -1), wxTE_PROCESS_ENTER); - char flush_multi_str[32] = { 0 }; - snprintf(flush_multi_str, sizeof(flush_multi_str), "%.2f", flush_multiplier); - m_flush_multiplier_ebox->SetValue(flush_multi_str); + m_flush_multiplier_ebox->SetValue(wxString::Format(("%.2f"), flush_multiplier)); m_flush_multiplier_ebox->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); param_sizer->Add(m_flush_multiplier_ebox, 0, wxALIGN_CENTER | wxALL, 0); param_sizer->AddStretchSpacer(1); @@ -476,13 +471,10 @@ WipingPanel::WipingPanel(wxWindow* parent, const std::vector& matrix, con m_flush_multiplier_ebox->Bind(wxEVT_KILL_FOCUS, on_apply_text_modify); m_flush_multiplier_ebox->Bind(wxEVT_COMMAND_TEXT_UPDATED, [this](wxCommandEvent&) { wxString str = m_flush_multiplier_ebox->GetValue(); - str.Replace(",", "."); - double multiplier = 1.f; - if (str.ToDouble(&multiplier)) { - if (multiplier < g_min_flush_multiplier || multiplier > g_max_flush_multiplier) { - str = wxString::Format(("%.2f"), multiplier < g_min_flush_multiplier ? g_min_flush_multiplier : g_max_flush_multiplier); - m_flush_multiplier_ebox->SetValue(str); - } + float multiplier = wxAtof(str); + if (multiplier < g_min_flush_multiplier || multiplier > g_max_flush_multiplier) { + str = wxString::Format(("%.2f"), multiplier < g_min_flush_multiplier ? g_min_flush_multiplier : g_max_flush_multiplier); + m_flush_multiplier_ebox->SetValue(str); } m_flush_multiplier_ebox->SetInsertionPointEnd(); }); diff --git a/src/slic3r/GUI/WipeTowerDialog.hpp b/src/slic3r/GUI/WipeTowerDialog.hpp index 791e2d46e..b7d62a555 100644 --- a/src/slic3r/GUI/WipeTowerDialog.hpp +++ b/src/slic3r/GUI/WipeTowerDialog.hpp @@ -30,12 +30,7 @@ public: if (m_flush_multiplier_ebox == nullptr) return 1.f; - wxString str = m_flush_multiplier_ebox->GetValue(); - str.Replace(",", "."); - double multiplier = 1.f; - str.ToDouble(&multiplier); - - return multiplier; + return wxAtof(m_flush_multiplier_ebox->GetValue()); } private: