From d01a3c331b954f9c3f7b16b6ec108c40fe0ded9a Mon Sep 17 00:00:00 2001 From: "maosheng.wei" Date: Fri, 22 Sep 2023 20:49:19 +0800 Subject: [PATCH] FIX: [STUDIO-4502 4505 4558] create filament dialog issue Jira: STUDIO 4502 4505 4888 fix: 4502 modify vendor fix: 4505 renew preset name in filament combobox fix: 4558 reload from disk, delaying busyinfo fix: encoding filament preset name Change-Id: Iff55f539c5b0dd4c96ef22ba84ef22ce4d762443 --- src/libslic3r/Preset.cpp | 16 +++-- src/libslic3r/Preset.hpp | 4 +- src/slic3r/GUI/CreatePresetsDialog.cpp | 96 +++++++++++++++++--------- src/slic3r/GUI/CreatePresetsDialog.hpp | 6 +- src/slic3r/GUI/Plater.cpp | 3 +- 5 files changed, 79 insertions(+), 46 deletions(-) diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index bf94b8c6d..22b5060d3 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -2080,7 +2080,7 @@ Preset& PresetCollection::load_preset(const std::string &path, const std::string return preset; } -bool PresetCollection::clone_presets(std::vector const &presets, std::vector &failures, std::function modifier, bool force_rewritten) +bool PresetCollection::clone_presets(std::vector const &presets, std::vector &failures, std::function modifier, bool force_rewritten) { std::vector new_presets; for (auto curr_preset : presets) { @@ -2095,13 +2095,12 @@ bool PresetCollection::clone_presets(std::vector const &presets, preset.is_external = false; preset.is_visible = true; preset.is_project_embedded = false; - modifier(preset); + modifier(preset, m_type); if (find_preset(preset.name)) { failures.push_back(preset.name); continue; } preset.file = this->path_for_preset(preset); - preset.alias.clear(); if (m_type == Preset::TYPE_PRINT) preset.config.option("print_settings_id", true)->value = preset.name; else if (m_type == Preset::TYPE_FILAMENT) @@ -2114,6 +2113,7 @@ bool PresetCollection::clone_presets(std::vector const &presets, return false; lock(); for (auto preset : new_presets) { + preset.alias.clear(); auto it = this->find_preset_internal(preset.name); assert((it == m_presets.end() || it->name != preset.name) || force_rewritten); if (it == m_presets.end() || it->name != preset.name) { @@ -2130,7 +2130,7 @@ bool PresetCollection::clone_presets(std::vector const &presets, bool PresetCollection::clone_presets_for_printer(std::vector const &presets, std::vector &failures, std::string const &printer, bool force_rewritten) { - return clone_presets(presets, failures, [printer](Preset &preset) { + return clone_presets(presets, failures, [printer](Preset &preset, Preset::Type &type) { preset.name = preset.name.substr(0, preset.name.find("@")) + " @" + printer; //preset.alias = ""; auto *compatible_printers = dynamic_cast(preset.config.option("compatible_printers")); @@ -2147,11 +2147,13 @@ bool PresetCollection::clone_presets_for_filament(std::vector co std::vector & failures, std::string const & filament_name, std::string const & filament_id, - bool force_rewritten) + const std::string & vendor_name, + bool force_rewritten) { - return clone_presets(presets, failures, [filament_name, filament_id](Preset &preset) { + return clone_presets(presets, failures, [filament_name, filament_id, vendor_name](Preset &preset, Preset::Type &type) { preset.name = filament_name + " " + preset.name.substr(preset.name.find_last_of('@')); - //preset.alias = ""; + if (type == Preset::TYPE_FILAMENT) + preset.config.option("filament_vendor", true)->values[0] = vendor_name; preset.filament_id = filament_id; }, force_rewritten); diff --git a/src/libslic3r/Preset.hpp b/src/libslic3r/Preset.hpp index dc8e9f599..7b7f0223d 100644 --- a/src/libslic3r/Preset.hpp +++ b/src/libslic3r/Preset.hpp @@ -450,10 +450,10 @@ public: Preset& load_preset(const std::string &path, const std::string &name, const DynamicPrintConfig &config, bool select = true, Semver file_version = Semver(), bool is_custom_defined = false); Preset& load_preset(const std::string &path, const std::string &name, DynamicPrintConfig &&config, bool select = true, Semver file_version = Semver(), bool is_custom_defined = false); - bool clone_presets(std::vector const &presets, std::vector &failures, std::function modifier, bool force_rewritten = false); + bool clone_presets(std::vector const &presets, std::vector &failures, std::function modifier, bool force_rewritten = false); bool clone_presets_for_printer(std::vector const &presets, std::vector &failures, std::string const &printer, bool force_rewritten = false); bool create_presets_from_template_for_printer(std::vector const &templates, std::vector &failures, std::string const &printer); - bool clone_presets_for_filament(std::vector const &presets, std::vector &failures, std::string const &filament_name, std::string const &filament_id, bool force_rewritten = false); + bool clone_presets_for_filament(std::vector const &presets, std::vector &failures, std::string const &filament_name, std::string const &filament_id, const std::string& vendor, bool force_rewritten = false); std::map> get_filament_presets() const; diff --git a/src/slic3r/GUI/CreatePresetsDialog.cpp b/src/slic3r/GUI/CreatePresetsDialog.cpp index c51f5337e..6541cd428 100644 --- a/src/slic3r/GUI/CreatePresetsDialog.cpp +++ b/src/slic3r/GUI/CreatePresetsDialog.cpp @@ -214,10 +214,10 @@ static wxBoxSizer *create_select_filament_preset_checkbox(wxWindow * combobox->SetLabel(_L("Select filament preset")); combobox->Bind(wxEVT_COMBOBOX, [combobox, checkbox, presets, &machine_filament_preset](wxCommandEvent &e) { combobox->SetLabelColor(*wxBLACK); - std::string preset_name = into_u8(combobox->GetLabel()); + wxString preset_name = combobox->GetStringSelection(); checkbox->SetValue(true); for (Preset *preset : presets) { - if (preset_name == preset->name) { + if (preset_name == wxString::FromUTF8(preset->name)) { machine_filament_preset[checkbox] = preset; } } @@ -228,7 +228,7 @@ static wxBoxSizer *create_select_filament_preset_checkbox(wxWindow * wxArrayString choices; for (Preset *preset : presets) { - choices.Add(preset->name); + choices.Add(wxString::FromUTF8(preset->name)); } combobox->Set(choices); @@ -371,8 +371,9 @@ static char* read_json_file(const std::string &preset_path) return json_contents; } -CreateFilamentPresetDialog::CreateFilamentPresetDialog(wxWindow *parent) - : DPIDialog(parent ? parent : nullptr, wxID_ANY, _L("Creat Filament"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) { +CreateFilamentPresetDialog::CreateFilamentPresetDialog(wxWindow *parent, bool modify_filament) + : DPIDialog(parent ? parent : nullptr, wxID_ANY, _L("Creat Filament"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX), m_modify_filament(modify_filament) +{ m_create_type.base_filament = _L("Create based on current filamet"); m_create_type.base_filament_preset = _L("Copy current filament preset "); @@ -468,6 +469,8 @@ wxBoxSizer *CreateFilamentPresetDialog::create_vendor_item() Layout(); Fit(); }); + m_filament_vendor_combobox->Enable(!m_modify_filament); + horizontal_sizer->Add(comboBoxSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); wxBoxSizer *textInputSizer = new wxBoxSizer(wxVERTICAL); @@ -504,6 +507,7 @@ wxBoxSizer *CreateFilamentPresetDialog::create_type_item() m_filament_type_combobox->Set(filament_type); comboBoxSizer->Add(m_filament_type_combobox, 0, wxEXPAND | wxALL, 0); horizontal_sizer->Add(comboBoxSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + m_filament_type_combobox->Enable(!m_modify_filament); m_filament_type_combobox->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent &e) { m_filament_type_combobox->SetLabelColor(*wxBLACK); @@ -539,6 +543,16 @@ wxBoxSizer *CreateFilamentPresetDialog::create_serial_item() wxBoxSizer *comboBoxSizer = new wxBoxSizer(wxVERTICAL); m_filament_serial_input = new TextInput(this, "", "", "", wxDefaultPosition, NAME_OPTION_COMBOBOX_SIZE, wxTE_PROCESS_ENTER); comboBoxSizer->Add(m_filament_serial_input, 0, wxEXPAND | wxALL, 0); + m_filament_serial_input->GetTextCtrl()->Bind(wxEVT_CHAR, [this](wxKeyEvent &event) { + int key = event.GetKeyCode(); + if (key == 64) { + event.Skip(false); + return; + } + event.Skip(); + }); + m_filament_serial_input->Enable(!m_modify_filament); + wxStaticText *static_eg_text = new wxStaticText(this, wxID_ANY, _L("e.g. Basic, Matte, Silk, Marble"), wxDefaultPosition, wxDefaultSize); static_eg_text->SetForegroundColour(wxColour("#6B6B6B")); static_eg_text->SetFont(::Label::Body_12); @@ -568,15 +582,15 @@ wxBoxSizer *CreateFilamentPresetDialog::create_filament_preset_item() m_filament_preset_combobox->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent &e) { m_filament_preset_combobox->SetLabelColor(*wxBLACK); - std::string filament_type = into_u8(m_filament_preset_combobox->GetStringSelection()); - std::unordered_map>::iterator iter = m_filament_choice_map.find(m_public_name_to_filament_id_map[filament_type]); + wxString filament_type = m_filament_preset_combobox->GetStringSelection(); + std::unordered_map>::iterator iter = m_filament_choice_map.find(m_public_name_to_filament_id_map[filament_type]); m_filament_preset_panel->Freeze(); m_filament_presets_sizer->Clear(true); m_filament_preset.clear(); if (iter != m_filament_choice_map.end()) { for (Preset* preset : iter->second) { - std::string preset_name = wxString::FromUTF8(preset->name).ToStdString(); + std::string preset_name = preset->name; size_t index_at = preset_name.find("@"); if (std::string::npos != index_at) { std::string machine_name = preset_name.substr(index_at + 1); @@ -704,7 +718,7 @@ wxBoxSizer *CreateFilamentPresetDialog::create_button_item() } if (!filament_presets.empty()) { std::vector failures; - bool res = preset_bundle->filaments.clone_presets_for_filament(filament_presets, failures, filament_preset_name, user_filament_id); + bool res = preset_bundle->filaments.clone_presets_for_filament(filament_presets, failures, filament_preset_name, user_filament_id, vendor_name); if (!res) { std::string failure_names; for (std::string &failure : failures) { @@ -713,7 +727,7 @@ wxBoxSizer *CreateFilamentPresetDialog::create_button_item() MessageDialog dlg(this, _L("Some existing presets have failed to be created, as follows:\n") + failure_names + _L("\nDo you want to rewrite it?"), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES_NO | wxYES_DEFAULT | wxCENTRE); if (dlg.ShowModal() == wxID_YES) { - res = preset_bundle->filaments.clone_presets_for_filament(filament_presets, failures, filament_preset_name, user_filament_id, true); + res = preset_bundle->filaments.clone_presets_for_filament(filament_presets, failures, filament_preset_name, user_filament_id, vendor_name, true); BOOST_LOG_TRIVIAL(info) << "clone filament have failures rewritten is successful? "<< res; } else { std::vector temp_filament_presets; @@ -728,7 +742,7 @@ wxBoxSizer *CreateFilamentPresetDialog::create_button_item() } } if (temp_filament_presets.empty()) return; - preset_bundle->filaments.clone_presets_for_filament(temp_filament_presets, failures, filament_preset_name, user_filament_id); + preset_bundle->filaments.clone_presets_for_filament(temp_filament_presets, failures, filament_preset_name, user_filament_id, vendor_name); BOOST_LOG_TRIVIAL(info) << "clone filament have failures not rewritten is successful? " << res; } } @@ -748,14 +762,14 @@ wxBoxSizer *CreateFilamentPresetDialog::create_button_item() } if (!filament_presets.empty()) { std::vector failures; - bool res = preset_bundle->filaments.clone_presets_for_filament(filament_presets, failures, filament_preset_name, user_filament_id); + bool res = preset_bundle->filaments.clone_presets_for_filament(filament_presets, failures, filament_preset_name, user_filament_id, vendor_name); if (!res) { std::string failure_names; for (std::string &failure : failures) { failure_names += failure + "\n"; } MessageDialog dlg(this, _L("Some existing presets have failed to be created, as follows:\n") + failure_names + _L("\nDo you want to rewrite it?"), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES_NO | wxYES_DEFAULT | wxCENTRE); if (wxID_YES == dlg.ShowModal()) { - res = preset_bundle->filaments.clone_presets_for_filament(filament_presets, failures, filament_preset_name, user_filament_id, true); + res = preset_bundle->filaments.clone_presets_for_filament(filament_presets, failures, filament_preset_name, user_filament_id, vendor_name, true); BOOST_LOG_TRIVIAL(info) << "clone filament presets have failures rewritten is successful? " << res; } else { std::vector temp_filament_presets; @@ -770,7 +784,7 @@ wxBoxSizer *CreateFilamentPresetDialog::create_button_item() } } if (temp_filament_presets.empty()) return; - preset_bundle->filaments.clone_presets_for_filament(temp_filament_presets, failures, filament_preset_name, user_filament_id); + preset_bundle->filaments.clone_presets_for_filament(temp_filament_presets, failures, filament_preset_name, user_filament_id, vendor_name); BOOST_LOG_TRIVIAL(info) << "clone filament have failures not rewritten is successful? " << res; } } @@ -828,17 +842,17 @@ wxArrayString CreateFilamentPresetDialog::get_filament_preset_choices() int suffix = 0; for (const pair> &preset : m_filament_choice_map) { if (preset.second.empty()) continue; - std::set preset_name_set; + std::set preset_name_set; for (Preset* filament_preset : preset.second) { std::string preset_name = filament_preset->name; size_t index_at = preset_name.find("@"); if (std::string::npos != index_at) { std::string cur_preset_name = preset_name.substr(0, index_at - 1); - preset_name_set.insert(cur_preset_name); + preset_name_set.insert(wxString::FromUTF8(cur_preset_name)); } } assert(1 == preset_name_set.size()); - for (const std::string& public_name : preset_name_set) { + for (const wxString& public_name : preset_name_set) { if (m_public_name_to_filament_id_map.find(public_name) != m_public_name_to_filament_id_map.end()) { suffix++; m_public_name_to_filament_id_map[public_name + "_" + std::to_string(suffix)] = preset.first; @@ -968,7 +982,7 @@ void CreateFilamentPresetDialog::get_all_filament_presets() for (const Preset &preset : filament_presets) { if (preset.filament_id.empty() || "null" == preset.filament_id) continue; - std::string filament_preset_name = wxString::FromUTF8(preset.name).ToStdString(); + std::string filament_preset_name = preset.name; Preset *filament_preset = new Preset(preset); m_all_presets_map[filament_preset_name] = filament_preset; } @@ -979,7 +993,7 @@ void CreateFilamentPresetDialog::get_all_filament_presets() if (filament_id_to_presets.first.empty()) continue; for (const Preset *preset : filament_id_to_presets.second) { if (preset->filament_id.empty() || "null" == preset->filament_id) continue; - std::string filament_preset_name = wxString::FromUTF8(preset->name).ToStdString(); + std::string filament_preset_name = preset->name; if (!preset->is_visible) continue; Preset *filament_preset = new Preset(*preset); m_all_presets_map[filament_preset_name] = filament_preset; @@ -1022,7 +1036,7 @@ CreatePrinterPresetDialog::CreatePrinterPresetDialog(wxWindow *parent) m_page1 = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize); m_page1->SetBackgroundColour(*wxWHITE); - m_page1->SetScrollRate(0, 5); + m_page1->SetScrollRate(5, 5); m_page2 = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize); m_page2->SetScrollRate(5, 5); m_page2->SetBackgroundColour(*wxWHITE); @@ -1093,20 +1107,20 @@ void CreatePrinterPresetDialog::create_printer_page1(wxWindow *parent) { this->SetBackgroundColour(*wxWHITE); - wxBoxSizer *page1_sizer = new wxBoxSizer(wxVERTICAL); + m_page1_sizer = new wxBoxSizer(wxVERTICAL); - page1_sizer->Add(create_type_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); - page1_sizer->Add(create_printer_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); - page1_sizer->Add(create_nozzle_diameter_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); - page1_sizer->Add(create_bed_shape_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); - page1_sizer->Add(create_bed_size_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); - page1_sizer->Add(create_origin_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); - page1_sizer->Add(create_hot_bed_stl_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); - page1_sizer->Add(create_hot_bed_svg_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); - page1_sizer->Add(create_max_print_height_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); - page1_sizer->Add(create_page1_btns_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); + m_page1_sizer->Add(create_type_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); + m_page1_sizer->Add(create_printer_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); + m_page1_sizer->Add(create_nozzle_diameter_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); + m_page1_sizer->Add(create_bed_shape_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); + m_page1_sizer->Add(create_bed_size_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); + m_page1_sizer->Add(create_origin_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); + m_page1_sizer->Add(create_hot_bed_stl_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); + m_page1_sizer->Add(create_hot_bed_svg_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); + m_page1_sizer->Add(create_max_print_height_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); + m_page1_sizer->Add(create_page1_btns_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); - parent->SetSizerAndFit(page1_sizer); + parent->SetSizerAndFit(m_page1_sizer); Layout(); wxGetApp().UpdateDlgDarkUI(this); @@ -1215,6 +1229,14 @@ wxBoxSizer *CreatePrinterPresetDialog::create_printer_item(wxWindow *parent) m_custom_vendor_model->SetHint(_L("Input Printer Vendor and Model")); checkbox_sizer->Add(m_custom_vendor_model, 0, wxLEFT | wxALIGN_CENTER, FromDIP(13)); m_custom_vendor_model->Hide(); + m_custom_vendor_model->Bind(wxEVT_CHAR, [this](wxKeyEvent &event) { + int key = event.GetKeyCode(); + if (key == 64) { // "@" can not be inputed + event.Skip(false); + return; + } + event.Skip(); + }); m_can_not_find_vendor_combox->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent &e) { bool value = m_can_not_find_vendor_combox->GetValue(); @@ -1231,6 +1253,7 @@ wxBoxSizer *CreatePrinterPresetDialog::create_printer_item(wxWindow *parent) } Refresh(); Layout(); + m_page1->SetSizerAndFit(m_page1_sizer); Fit(); }); @@ -1468,7 +1491,7 @@ wxBoxSizer *CreatePrinterPresetDialog::create_page1_btns_item(wxWindow *parent) bSizer_button->Add(m_button_OK, 0, wxRIGHT, FromDIP(10)); m_button_OK->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { - //if (!validate_input_valid()) return; + if (!validate_input_valid()) return; data_init(); show_page2(); }); @@ -1559,6 +1582,7 @@ void CreatePrinterPresetDialog::select_curr_radiobox(std::vectorClear(true); m_process_preset.clear(); + m_page2->SetSizerAndFit(m_page2_sizer); } else if (curr_selected_type == m_create_presets_type[1]) { if (into_u8(m_printer_model->GetLabel()) == _L("Select model")) { m_filament_preset_template_sizer->Clear(true); @@ -1568,6 +1592,7 @@ void CreatePrinterPresetDialog::select_curr_radiobox(std::vectorSetSizerAndFit(m_page2_sizer); } else if (curr_selected_type == m_create_printer_type[0]) { m_select_printer->Hide(); m_select_vendor->Show(); @@ -1577,6 +1602,7 @@ void CreatePrinterPresetDialog::select_curr_radiobox(std::vectorGetValue()) { m_custom_vendor_model->Show(); } + m_page1->SetSizerAndFit(m_page1_sizer); } else if (curr_selected_type == m_create_printer_type[1]) { m_select_vendor->Hide(); m_select_model->Hide(); @@ -1584,13 +1610,15 @@ void CreatePrinterPresetDialog::select_curr_radiobox(std::vectorHide(); m_custom_vendor_model->Hide(); m_select_printer->Show(); + m_page1->SetSizerAndFit(m_page1_sizer); } } else { radiobox_list[i].first->SetValue(false); } } Layout(); - m_page2->SetSizerAndFit(m_page2_sizer); + //m_page1->SetSizerAndFit(m_page1_sizer); + //m_page2->SetSizerAndFit(m_page2_sizer); Fit(); int screen_height = (int) wxGetDisplaySize().GetHeight() * 4 / 5; if (this->GetSize().GetHeight() > screen_height) { diff --git a/src/slic3r/GUI/CreatePresetsDialog.hpp b/src/slic3r/GUI/CreatePresetsDialog.hpp index 7d3609ab8..0e7a847ae 100644 --- a/src/slic3r/GUI/CreatePresetsDialog.hpp +++ b/src/slic3r/GUI/CreatePresetsDialog.hpp @@ -18,7 +18,7 @@ namespace GUI { class CreateFilamentPresetDialog : public DPIDialog { public: - CreateFilamentPresetDialog(wxWindow *parent); + CreateFilamentPresetDialog(wxWindow *parent, bool modify_filament = false); ~CreateFilamentPresetDialog(); protected: @@ -62,8 +62,9 @@ private: std::vector> m_filament_preset; std::unordered_map m_machint_filament_preset; std::unordered_map> m_filament_choice_map; - std::unordered_map m_public_name_to_filament_id_map; + std::unordered_map m_public_name_to_filament_id_map; std::unordered_map m_all_presets_map; + bool m_modify_filament; CreateType m_create_type; Button * m_button_create = nullptr; Button * m_button_cancel = nullptr; @@ -172,6 +173,7 @@ private: wxPanel * m_filament_preset_panel = nullptr; wxPanel * m_process_preset_panel = nullptr; wxPanel * m_preset_template_panel = nullptr; + wxBoxSizer * m_page1_sizer = nullptr; wxBoxSizer * m_page2_sizer = nullptr; std::string m_custom_texture; std::string m_custom_model; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index d2aa72c83..00d57c99b 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -4959,7 +4959,6 @@ bool Plater::priv::replace_volume_with_stl(int object_idx, int volume_idx, const { const std::string path = new_path.string(); wxBusyCursor wait; - wxBusyInfo info(_devL("Replace from:") + " " + from_u8(path), q->get_current_canvas3D()->get_wxglcanvas()); Model new_model; try { @@ -4980,6 +4979,8 @@ bool Plater::priv::replace_volume_with_stl(int object_idx, int volume_idx, const return false; } + wxBusyInfo info(_devL("Replace from:") + " " + from_u8(path), q->get_current_canvas3D()->get_wxglcanvas()); + if (!snapshot.empty()) q->take_snapshot(snapshot);