diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 279b870a4..3d1a99fc1 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -1635,9 +1635,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 2fd0ee0ea..98e52646e 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -2928,12 +2928,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() @@ -2952,7 +2957,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 d94ff1a6c..a83634904 100644 --- a/src/slic3r/GUI/PartPlate.hpp +++ b/src/slic3r/GUI/PartPlate.hpp @@ -238,8 +238,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 620f10bc5..ce22385e1 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -14578,6 +14578,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() { @@ -15400,14 +15411,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 929a39e4d..6b68cb9e8 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -461,6 +461,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