FIX:All plates share the current mapping

jira: STUDIO-10008
Change-Id: I5d04c95dea7bd6b56c97258863a190f0f0c3b4e6
This commit is contained in:
zhou.xu 2025-01-19 18:21:35 +08:00 committed by lane.wei
parent a039401683
commit a1de92523f
4 changed files with 144 additions and 76 deletions

View File

@ -1808,6 +1808,55 @@ void PresetBundle::update_num_filaments(unsigned int to_del_flament_id)
update_multi_material_filament_presets(to_del_flament_id); update_multi_material_filament_presets(to_del_flament_id);
} }
std::vector<std::string> PresetBundle::get_ams_colors() {
std::vector<std::string> ams_filament_colors;
std::vector<std::string> ams_filament_presets;
auto is_double_extruder = get_printer_extruder_count() == 2;
for (auto &entry : filament_ams_list) {
auto &ams = entry.second;
auto filament_id = ams.opt_string("filament_id", 0u);
auto filament_color = ams.opt_string("filament_colour", 0u);
auto filament_changed = !ams.has("filament_changed") || ams.opt_bool("filament_changed");
auto filament_multi_color = ams.opt<ConfigOptionStrings>("filament_multi_colors")->values;
if (filament_id.empty()) {
continue;
}
if (!filament_changed && this->filament_presets.size() > ams_filament_presets.size()) {
ams_filament_presets.push_back(this->filament_presets[ams_filament_presets.size()]);
ams_filament_colors.push_back(filament_color);
ams_multi_color_filment.push_back(filament_multi_color);
continue;
}
auto iter = std::find_if(filaments.begin(), filaments.end(),
[this, &filament_id](auto &f) { return f.is_compatible && filaments.get_preset_base(f) == &f && f.filament_id == filament_id; });
if (iter == filaments.end()) {
BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": filament_id %1% not found or system or compatible") % filament_id;
auto filament_type = ams.opt_string("filament_type", 0u);
if (!filament_type.empty()) {
filament_type = "Generic " + filament_type;
iter = std::find_if(filaments.begin(), filaments.end(),
[&filament_type](auto &f) { return f.is_compatible && f.is_system && boost::algorithm::starts_with(f.name, filament_type); });
}
if (iter == filaments.end()) {
// Prefer old selection
if (ams_filament_presets.size() < this->filament_presets.size()) {
ams_filament_presets.push_back(this->filament_presets[ams_filament_presets.size()]);
ams_filament_colors.push_back(filament_color);
ams_multi_color_filment.push_back(filament_multi_color);
continue;
}
iter = std::find_if(filaments.begin(), filaments.end(), [&filament_type](auto &f) { return f.is_compatible && f.is_system; });
if (iter == filaments.end())
continue;
}
filament_id = iter->filament_id;
}
ams_filament_presets.push_back(iter->name);
ams_filament_colors.push_back(filament_color);
}
return ams_filament_colors;
}
unsigned int PresetBundle::sync_ams_list(unsigned int &unknowns, bool use_map, std::map<int, AMSMapInfo> &maps,bool enable_append, MergeFilamentInfo &merge_info) unsigned int PresetBundle::sync_ams_list(unsigned int &unknowns, bool use_map, std::map<int, AMSMapInfo> &maps,bool enable_append, MergeFilamentInfo &merge_info)
{ {
std::vector<std::string> ams_filament_presets; std::vector<std::string> ams_filament_presets;

View File

@ -108,6 +108,7 @@ public:
void set_num_filaments(unsigned int n, std::string new_col = ""); void set_num_filaments(unsigned int n, std::string new_col = "");
void update_num_filaments(unsigned int to_del_flament_id); void update_num_filaments(unsigned int to_del_flament_id);
std::vector<std::string> get_ams_colors();
unsigned int sync_ams_list(unsigned int &unknowns, bool use_map, std::map<int, AMSMapInfo> &maps,bool enable_append, MergeFilamentInfo& merge_info); unsigned int sync_ams_list(unsigned int &unknowns, bool use_map, std::map<int, AMSMapInfo> &maps,bool enable_append, MergeFilamentInfo& merge_info);
//BBS: check whether this is the only edited filament //BBS: check whether this is the only edited filament
bool is_the_only_edited_filament(unsigned int filament_index); bool is_the_only_edited_filament(unsigned int filament_index);

View File

@ -129,7 +129,6 @@ void SyncAmsInfoDialog::updata_ui_data_after_connected_printer() {
if (!m_input_info.connected_printer) { return; } if (!m_input_info.connected_printer) { return; }
if (is_dirty_filament()) { return; } if (is_dirty_filament()) { return; }
show_sizer(m_sizer_line, true);
m_two_thumbnail_panel->Show(true); m_two_thumbnail_panel->Show(true);
m_attention_text->Show(); m_attention_text->Show();
@ -207,7 +206,6 @@ void SyncAmsInfoDialog::update_select_layout(MachineObject *obj)
void SyncAmsInfoDialog::set_default_normal(const ThumbnailData &data) void SyncAmsInfoDialog::set_default_normal(const ThumbnailData &data)
{ {
update_page_turn_state(false);
if (m_cur_input_thumbnail_data.is_valid() && m_left_image_button) { if (m_cur_input_thumbnail_data.is_valid() && m_left_image_button) {
auto & temp_data = m_cur_input_thumbnail_data; auto & temp_data = m_cur_input_thumbnail_data;
wxImage image(temp_data.width, temp_data.height); wxImage image(temp_data.width, temp_data.height);
@ -245,13 +243,9 @@ void SyncAmsInfoDialog::set_default_normal(const ThumbnailData &data)
//m_used_colors_tip_text->SetLabel(" (" + std::to_string(extruders.size()) + " " + _L("colors used") + ")"); //m_used_colors_tip_text->SetLabel(" (" + std::to_string(extruders.size()) + " " + _L("colors used") + ")");
} }
} }
// disable pei bed if (m_map_mode == MapModeEnum::ColorMap) {
DeviceManager *dev_manager = Slic3r::GUI::wxGetApp().getDeviceManager(); m_back_cur_colors_in_thumbnail = m_cur_colors_in_thumbnail;
if (!dev_manager) }
return;
MachineObject *obj_ = dev_manager->get_selected_machine();
wxSize screenSize = wxGetDisplaySize();
auto dialogSize = this->GetSize();
} }
bool SyncAmsInfoDialog::is_must_finish_slice_then_connected_printer() { bool SyncAmsInfoDialog::is_must_finish_slice_then_connected_printer() {
@ -340,10 +334,10 @@ wxBoxSizer *SyncAmsInfoDialog::create_sizer_thumbnail(wxButton *image_button, bo
} }
else { else {
wxBoxSizer *text_sizer = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer *text_sizer = new wxBoxSizer(wxHORIZONTAL);
auto sync_text = new wxStaticText(image_button->GetParent(), wxID_ANY, _L("After mapping")); m_after_map_text = new wxStaticText(image_button->GetParent(), wxID_ANY, _L("After mapping"));
sync_text->SetForegroundColour(wxColour(107, 107, 107, 100)); m_after_map_text->SetForegroundColour(wxColour(107, 107, 107, 100));
text_sizer->Add(sync_text, 0, wxALIGN_CENTER | wxALL, 0); text_sizer->Add(m_after_map_text, 0, wxALIGN_CENTER | wxALL, 0);
sizer_thumbnail->Add(sync_text, FromDIP(0), wxALIGN_CENTER | wxALL, FromDIP(4)); sizer_thumbnail->Add(m_after_map_text, FromDIP(0), wxALIGN_CENTER | wxALL, FromDIP(4));
} }
sizer_thumbnail->Add(image_button, 0, wxALIGN_CENTER, 0); sizer_thumbnail->Add(image_button, 0, wxALIGN_CENTER, 0);
return sizer_thumbnail; return sizer_thumbnail;
@ -355,13 +349,7 @@ void SyncAmsInfoDialog::update_when_change_plate(int idx) {
} }
m_specify_plate_idx = idx; m_specify_plate_idx = idx;
reset_and_sync_ams_list(); update_thumbnail_data_accord_plate_index(false); // share current map
m_cur_input_thumbnail_data = m_plater->get_partplate_list().get_plate(m_specify_plate_idx)->thumbnail_data;
clone_thumbnail_data();
set_default_normal(m_cur_input_thumbnail_data);
wxCommandEvent empty;
on_selection_changed(empty);
update_swipe_button_state(); update_swipe_button_state();
Layout(); Layout();
@ -374,15 +362,44 @@ void SyncAmsInfoDialog::update_when_change_map_mode(int idx)
if (m_map_mode == MapModeEnum::ColorMap) { if (m_map_mode == MapModeEnum::ColorMap) {
show_color_panel(true); show_color_panel(true);
m_confirm_title->SetLabel(m_undone_str); m_confirm_title->SetLabel(m_undone_str);
m_after_map_text->SetLabel(_L("After mapping"));
} else if (m_map_mode == MapModeEnum::Override) { } else if (m_map_mode == MapModeEnum::Override) {
show_color_panel(false); show_color_panel(false);
m_confirm_title->Show(); m_confirm_title->Show();
m_confirm_title->SetLabel(m_override_undone_str); m_confirm_title->SetLabel(m_override_undone_str);
m_after_map_text->SetLabel(_L("After overwriting"));
} }
update_map_when_change_map_mode();
Layout(); Layout();
Fit(); Fit();
} }
void SyncAmsInfoDialog::update_map_when_change_map_mode() {
if (m_map_mode == MapModeEnum::ColorMap) {
m_cur_colors_in_thumbnail = m_back_cur_colors_in_thumbnail;
} else if (m_map_mode == MapModeEnum::Override) {
auto ams_colors = wxGetApp().preset_bundle->get_ams_colors();
for (size_t i = 0; i < m_preview_colors_in_thumbnail.size(); i++) {
if (i < ams_colors.size()) {
auto color_str = ams_colors[i];
if (color_str.front() == '#') {
color_str = color_str.substr(1);
}
if (color_str.size() == 6) {
color_str += "FF";
}
auto result = AmsTray::decode_color(color_str);
m_cur_colors_in_thumbnail[i] = result;
}
else {
//todo:give warning
m_cur_colors_in_thumbnail[i] = m_cur_colors_in_thumbnail[0];
}
}
}
update_thumbnail_data_accord_plate_index(false);
}
void SyncAmsInfoDialog::update_when_change_map_mode(wxCommandEvent &e) void SyncAmsInfoDialog::update_when_change_map_mode(wxCommandEvent &e)
{ {
int win_id = e.GetId(); int win_id = e.GetId();
@ -410,24 +427,11 @@ void SyncAmsInfoDialog::update_panel_status(PageType page)
void SyncAmsInfoDialog::show_color_panel(bool flag, bool update_layout) void SyncAmsInfoDialog::show_color_panel(bool flag, bool update_layout)
{ {
//show_sizer(m_plate_combox_sizer, flag); //show_sizer(m_plate_combox_sizer, flag);
if (m_sizer_line) {
show_sizer(m_sizer_line, flag);
}
m_two_thumbnail_panel->Show(flag);
m_filament_panel->Show(flag); // empty_project m_filament_panel->Show(flag); // empty_project
m_attention_text->Show(flag); m_attention_text->Show(flag);
m_tip_text->Show(flag); m_tip_text->Show(flag);
m_more_setting_tips->Show(flag); show_advanced_settings(flag);
if (!flag) {
show_sizer(m_append_color_sizer, false);
show_sizer(m_merge_color_sizer, false);
}
else {
update_more_setting();
}
m_confirm_title->Show(flag); m_confirm_title->Show(flag);
m_are_you_sure_title->Show(flag); m_are_you_sure_title->Show(flag);
if (flag) { if (flag) {
@ -4000,14 +4004,17 @@ void SyncAmsInfoDialog::reset_and_sync_ams_list()
// reset_ams_material();//show "-" // reset_ams_material();//show "-"
} }
void SyncAmsInfoDialog::clone_thumbnail_data() void SyncAmsInfoDialog::clone_thumbnail_data(bool allow_clone_ams_color)
{ {
// record preview_colors // record preview_colors
MaterialHash::iterator iter = m_materialList.begin(); MaterialHash::iterator iter = m_materialList.begin();
if (m_preview_colors_in_thumbnail.size() != m_materialList.size()) { m_preview_colors_in_thumbnail.resize(m_materialList.size()); } if (m_preview_colors_in_thumbnail.size() != m_materialList.size()) {
m_preview_colors_in_thumbnail.resize(m_materialList.size());
}
if (allow_clone_ams_color) {
while (iter != m_materialList.end()) { while (iter != m_materialList.end()) {
int id = iter->first; int id = iter->first;
Material * item = iter->second; Material *item = iter->second;
auto m = item->item; auto m = item->item;
m_preview_colors_in_thumbnail[id] = m->m_material_coloul; m_preview_colors_in_thumbnail[id] = m->m_material_coloul;
if (item->id < m_cur_colors_in_thumbnail.size()) { if (item->id < m_cur_colors_in_thumbnail.size()) {
@ -4018,6 +4025,7 @@ void SyncAmsInfoDialog::clone_thumbnail_data()
} }
iter++; iter++;
} }
}
// copy data // copy data
auto &data = m_cur_input_thumbnail_data; auto &data = m_cur_input_thumbnail_data;
m_preview_thumbnail_data.reset(); m_preview_thumbnail_data.reset();
@ -4125,16 +4133,44 @@ void SyncAmsInfoDialog::final_deal_edge_pixels_data(ThumbnailData &data)
void SyncAmsInfoDialog::updata_thumbnail_data_after_connected_printer() void SyncAmsInfoDialog::updata_thumbnail_data_after_connected_printer()
{ {
updata_ui_data_after_connected_printer(); updata_ui_data_after_connected_printer();
update_thumbnail_data_accord_plate_index(true);
}
void SyncAmsInfoDialog::show_advanced_settings(bool flag) {
m_more_setting_tips->Show(flag);
if (!flag) {
show_sizer(m_append_color_sizer, false);
show_sizer(m_merge_color_sizer, false);
} else {
update_more_setting();
}
}
void SyncAmsInfoDialog::show_ams_controls(bool flag)
{
m_filament_panel->Show(flag);
m_attention_text->Show(flag);
}
void SyncAmsInfoDialog::update_thumbnail_data_accord_plate_index(bool allow_clone_ams_color)
{
if (m_map_mode == MapModeEnum::Override) {
show_ams_controls(false);
show_advanced_settings(false);
} else if (m_map_mode == MapModeEnum::ColorMap) {
show_ams_controls(true);
show_advanced_settings(true);
}
// change thumbnail_data // change thumbnail_data
ThumbnailData &input_data = m_specify_plate_idx == -1 ? m_plater->get_partplate_list().get_curr_plate()->thumbnail_data : ThumbnailData &input_data = m_specify_plate_idx == -1 ? m_plater->get_partplate_list().get_curr_plate()->thumbnail_data :
m_plater->get_partplate_list().get_plate(m_specify_plate_idx)->thumbnail_data; m_plater->get_partplate_list().get_plate(m_specify_plate_idx)->thumbnail_data;
ThumbnailData &no_light_data = m_specify_plate_idx == -1 ? m_plater->get_partplate_list().get_curr_plate()->no_light_thumbnail_data : ThumbnailData &no_light_data = m_specify_plate_idx == -1 ? m_plater->get_partplate_list().get_curr_plate()->no_light_thumbnail_data :
m_plater->get_partplate_list().get_plate(m_specify_plate_idx)->no_light_thumbnail_data; m_plater->get_partplate_list().get_plate(m_specify_plate_idx)->no_light_thumbnail_data;
if (input_data.width == 0 || input_data.height == 0 || no_light_data.width == 0 || no_light_data.height == 0) { wxGetApp().plater()->update_all_plate_thumbnails(false); } if (input_data.width == 0 || input_data.height == 0 || no_light_data.width == 0 || no_light_data.height == 0) { wxGetApp().plater()->update_all_plate_thumbnails(false); }
unify_deal_thumbnail_data(input_data, no_light_data); unify_deal_thumbnail_data(input_data, no_light_data, allow_clone_ams_color);
} }
void SyncAmsInfoDialog::unify_deal_thumbnail_data(ThumbnailData &input_data, ThumbnailData &no_light_data) void SyncAmsInfoDialog::unify_deal_thumbnail_data(ThumbnailData &input_data, ThumbnailData &no_light_data, bool allow_clone_ams_color)
{ {
if (input_data.width == 0 || input_data.height == 0 || no_light_data.width == 0 || no_light_data.height == 0) { if (input_data.width == 0 || input_data.height == 0 || no_light_data.width == 0 || no_light_data.height == 0) {
BOOST_LOG_TRIVIAL(error) << "SyncAmsInfoDialog::no_light_data is empty,error"; BOOST_LOG_TRIVIAL(error) << "SyncAmsInfoDialog::no_light_data is empty,error";
@ -4142,7 +4178,7 @@ void SyncAmsInfoDialog::unify_deal_thumbnail_data(ThumbnailData &input_data, Thu
} }
m_cur_input_thumbnail_data = input_data; m_cur_input_thumbnail_data = input_data;
m_cur_no_light_thumbnail_data = no_light_data; m_cur_no_light_thumbnail_data = no_light_data;
clone_thumbnail_data(); clone_thumbnail_data(allow_clone_ams_color);
MaterialHash::iterator iter = m_materialList.begin(); MaterialHash::iterator iter = m_materialList.begin();
bool is_connect_printer = true; bool is_connect_printer = true;
while (iter != m_materialList.end()) { while (iter != m_materialList.end()) {
@ -4223,25 +4259,6 @@ void SyncAmsInfoDialog::change_default_normal(int old_filament_id, wxColour temp
} }
} }
void SyncAmsInfoDialog::update_page_turn_state(bool show)
{
/* m_bitmap_last_plate->Show(show);
m_bitmap_next_plate->Show(show);
if (show) {
if (m_print_plate_idx <= 0) { m_bitmap_last_plate->Hide(); }
else { m_bitmap_last_plate->Show(); }
if ((m_print_plate_idx + 1) >= m_print_plate_total) { m_bitmap_next_plate->Hide(); }
else { m_bitmap_next_plate->Show(); }
if (m_print_plate_total == 1) {
m_bitmap_last_plate->Show(false);
m_bitmap_next_plate->Show(false);
}
}*/
}
void SyncAmsInfoDialog::sys_color_changed() void SyncAmsInfoDialog::sys_color_changed()
{ {
if (wxGetApp().dark_mode()) { if (wxGetApp().dark_mode()) {
@ -4254,8 +4271,6 @@ void SyncAmsInfoDialog::sys_color_changed()
m_rename_button->Refresh(); m_rename_button->Refresh();
} }
wxString SyncAmsInfoDialog::format_bed_name(std::string plate_name) wxString SyncAmsInfoDialog::format_bed_name(std::string plate_name)
{ {
wxString name; wxString name;

View File

@ -124,6 +124,7 @@ protected:
ThumbnailData m_preview_thumbnail_data; // when ams map change ThumbnailData m_preview_thumbnail_data; // when ams map change
std::vector<wxColour> m_preview_colors_in_thumbnail; std::vector<wxColour> m_preview_colors_in_thumbnail;
std::vector<wxColour> m_cur_colors_in_thumbnail; std::vector<wxColour> m_cur_colors_in_thumbnail;
std::vector<wxColour> m_back_cur_colors_in_thumbnail;
std::vector<bool> m_edge_pixels; std::vector<bool> m_edge_pixels;
StaticBox * m_two_image_panel{nullptr}; StaticBox * m_two_image_panel{nullptr};
@ -193,15 +194,16 @@ public:
void on_set_finish_mapping(wxCommandEvent &evt); void on_set_finish_mapping(wxCommandEvent &evt);
void on_print_job_cancel(wxCommandEvent &evt); void on_print_job_cancel(wxCommandEvent &evt);
void reset_and_sync_ams_list(); void reset_and_sync_ams_list();
void clone_thumbnail_data(); void clone_thumbnail_data(bool allow_clone_ams_color);
void record_edge_pixels_data(); void record_edge_pixels_data();
wxColour adjust_color_for_render(const wxColour &color); wxColour adjust_color_for_render(const wxColour &color);
void final_deal_edge_pixels_data(ThumbnailData &data); void final_deal_edge_pixels_data(ThumbnailData &data);
void updata_thumbnail_data_after_connected_printer(); void updata_thumbnail_data_after_connected_printer();
void unify_deal_thumbnail_data(ThumbnailData &input_data, ThumbnailData &no_light_data); void show_ams_controls(bool flag);
void show_advanced_settings(bool flag);
void update_thumbnail_data_accord_plate_index(bool allow_clone_ams_color);
void unify_deal_thumbnail_data(ThumbnailData &input_data, ThumbnailData &no_light_data,bool allow_clone_ams_color);
void change_default_normal(int old_filament_id, wxColour temp_ams_color); void change_default_normal(int old_filament_id, wxColour temp_ams_color);
void set_default_from_sdcard();
void update_page_turn_state(bool show);
void on_timer(wxTimerEvent &event); void on_timer(wxTimerEvent &event);
void on_selection_changed(wxCommandEvent &event); void on_selection_changed(wxCommandEvent &event);
void update_flow_cali_check(MachineObject *obj); void update_flow_cali_check(MachineObject *obj);
@ -284,6 +286,7 @@ private:
wxBoxSizer *create_sizer_thumbnail(wxButton *image_button, bool left); wxBoxSizer *create_sizer_thumbnail(wxButton *image_button, bool left);
void update_when_change_plate(int); void update_when_change_plate(int);
void update_when_change_map_mode(int); void update_when_change_map_mode(int);
void update_map_when_change_map_mode();
void update_when_change_map_mode(wxCommandEvent &e); void update_when_change_map_mode(wxCommandEvent &e);
void update_panel_status(PageType page); void update_panel_status(PageType page);
void show_color_panel(bool,bool update_layout = true); void show_color_panel(bool,bool update_layout = true);
@ -301,6 +304,7 @@ private:
Button * m_button_ok = nullptr; Button * m_button_ok = nullptr;
Button * m_button_cancel = nullptr; Button * m_button_cancel = nullptr;
wxStaticText *m_after_map_text{nullptr};
wxStaticText *m_attention_text{nullptr}; wxStaticText *m_attention_text{nullptr};
wxStaticText* m_tip_text{nullptr}; wxStaticText* m_tip_text{nullptr};
//wxStaticText *m_specify_color_cluster_title = nullptr; //wxStaticText *m_specify_color_cluster_title = nullptr;
@ -320,7 +324,6 @@ private:
// wxBoxSizer * m_plate_combox_sizer = nullptr; // wxBoxSizer * m_plate_combox_sizer = nullptr;
wxBoxSizer * m_mode_combox_sizer = nullptr; wxBoxSizer * m_mode_combox_sizer = nullptr;
wxBoxSizer * m_sizer_line = nullptr;
//wxStaticText * m_printer_title = nullptr; //wxStaticText * m_printer_title = nullptr;
wxStaticText * m_printer_device_name = nullptr; wxStaticText * m_printer_device_name = nullptr;
wxStaticText * m_printer_is_map_title = nullptr; wxStaticText * m_printer_is_map_title = nullptr;