diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index a7a0107453..5ad41a477e 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -1620,9 +1620,12 @@ wxBoxSizer* MainFrame::create_side_tools() } if (slice) { + if (m_plater->get_global_filament_map_mode() != g_filament_map_mode) + m_plater->on_filament_map_mode_change(); m_plater->set_global_filament_map_mode(g_filament_map_mode); if (g_filament_map_mode == FilamentMapMode::fmmManual) m_plater->set_global_filament_map(g_filament_map); + if (m_slice_select == eSliceAll) wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_SLICE_ALL)); else diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 1769a1a9d0..664cc28db4 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -3271,12 +3271,17 @@ void PartPlate::set_filament_maps(const std::vector& f_maps) m_config.option("filament_map", true)->values = f_maps; } -void PartPlate::clear_filament_map_info() +void PartPlate::clear_filament_map() { if (m_config.has("filament_map")) m_config.erase("filament_map"); +} + +void PartPlate::clear_filament_map_mode() +{ if (m_config.has("filament_map_mode")) m_config.erase("filament_map_mode"); + } const std::vector>& PartPlate::get_unprintable_filament_ids() @@ -3295,7 +3300,8 @@ void PartPlate::on_extruder_count_changed(int extruder_count) { if (extruder_count < 2) { // clear filament map and mode in single extruder mode - clear_filament_map_info(); + clear_filament_map(); + clear_filament_map_mode(); } } diff --git a/src/slic3r/GUI/PartPlate.hpp b/src/slic3r/GUI/PartPlate.hpp index b262eb893c..51f642f9dd 100644 --- a/src/slic3r/GUI/PartPlate.hpp +++ b/src/slic3r/GUI/PartPlate.hpp @@ -255,8 +255,8 @@ public: std::vector get_filament_maps() const; void set_filament_maps(const std::vector& f_maps); - // remove filament map and map mode in profiles - void clear_filament_map_info(); + void clear_filament_map(); + void clear_filament_map_mode(); bool has_spiral_mode_config() const; bool get_spiral_vase_mode() const; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 170a895571..97b7c93dbe 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -14561,6 +14561,17 @@ FilamentMapMode Plater::get_global_filament_map_mode() const return project_config.option>("filament_map_mode")->value; } +void Plater::on_filament_map_mode_change() +{ + auto& plate_list = this->get_partplate_list(); + int plate_count = plate_list.get_plate_count(); + for (int idx = 0; idx < plate_count; ++idx) { + auto plate=plate_list.get_plate(idx); + auto plate_map_mode = plate->get_filament_map_mode(); + if (plate_map_mode == fmmDefault) + plate->clear_filament_map(); + } +} wxWindow* Plater::get_select_machine_dialog() { @@ -15374,14 +15385,18 @@ void Plater::open_filament_map_setting_dialog(wxCommandEvent &evt) bool need_invalidate = (old_map_mode != new_map_mode || old_filament_maps != new_filament_maps); - if (old_map_mode != new_map_mode) + if (old_map_mode != new_map_mode) { curr_plate->set_filament_map_mode(new_map_mode); + curr_plate->clear_filament_map(); + } if (old_filament_maps != new_filament_maps && new_map_mode==fmmManual) curr_plate->set_filament_maps(new_filament_maps); - if (new_map_mode == fmmDefault) - curr_plate->clear_filament_map_info(); + if (new_map_mode == fmmDefault) { + curr_plate->clear_filament_map(); + curr_plate->clear_filament_map_mode(); + } if (need_invalidate) { if (need_slice) { diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index b842679f7e..18d3295918 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -509,6 +509,7 @@ public: void set_global_filament_map(const std::vector& filament_map); std::vector get_global_filament_map() const; FilamentMapMode get_global_filament_map_mode() const; + void on_filament_map_mode_change(); void update_menus(); // BBS