NEW:change mapping popup layout for multi nozzles.

jira:[Popup for multi nozzles]

Change-Id: I07e6d8f0469d2dcf0037d53e2ca8e22de78ca233
This commit is contained in:
hang.xu 2024-07-08 18:19:37 +08:00 committed by lane.wei
parent 7b7ebf1b95
commit 0924fce685
4 changed files with 154 additions and 45 deletions

View File

@ -328,7 +328,7 @@ void MaterialItem::doRender(wxDC& dc)
m_left_marea_panel = new wxPanel(this); m_left_marea_panel = new wxPanel(this);
m_right_marea_panel = new wxPanel(this); m_right_marea_panel = new wxPanel(this);
auto sizer_temp = new wxBoxSizer(wxHORIZONTAL);
/*left ext*/ /*left ext*/
m_left_extra_slot = new MappingItem(m_left_marea_panel); m_left_extra_slot = new MappingItem(m_left_marea_panel);
m_left_extra_slot->m_ams_id = VIRTUAL_TRAY_DEPUTY_ID; m_left_extra_slot->m_ams_id = VIRTUAL_TRAY_DEPUTY_ID;
@ -337,7 +337,13 @@ void MaterialItem::doRender(wxDC& dc)
m_left_extra_slot->SetMinSize(wxSize(FromDIP(48), FromDIP(60))); m_left_extra_slot->SetMinSize(wxSize(FromDIP(48), FromDIP(60)));
m_left_extra_slot->SetMaxSize(wxSize(FromDIP(48), FromDIP(60))); m_left_extra_slot->SetMaxSize(wxSize(FromDIP(48), FromDIP(60)));
auto left_panel = new wxPanel(m_left_marea_panel);
left_panel->SetSize(wxSize(FromDIP(182), FromDIP(60)));
left_panel->SetMinSize(wxSize(FromDIP(182), FromDIP(60)));
left_panel->SetMaxSize(wxSize(FromDIP(182), FromDIP(60)));
sizer_temp->Add(m_left_extra_slot);
sizer_temp->Add(left_panel);
/*right ext*/ /*right ext*/
m_right_extra_slot = new MappingItem(m_right_marea_panel); m_right_extra_slot = new MappingItem(m_right_marea_panel);
@ -347,10 +353,36 @@ void MaterialItem::doRender(wxDC& dc)
m_right_extra_slot->SetMinSize(wxSize(FromDIP(48), FromDIP(60))); m_right_extra_slot->SetMinSize(wxSize(FromDIP(48), FromDIP(60)));
m_right_extra_slot->SetMaxSize(wxSize(FromDIP(48), FromDIP(60))); m_right_extra_slot->SetMaxSize(wxSize(FromDIP(48), FromDIP(60)));
m_sizer_ams_left->Add(create_split_sizer(m_left_marea_panel, _L("Left Ams")), 0, wxEXPAND, 0); m_sizer_split_ams_left = new wxBoxSizer(wxHORIZONTAL);
auto ams_title_text = new Label(parent, _L("Left Ams"));
ams_title_text->SetFont(::Label::Body_13);
ams_title_text->SetForegroundColour(0x909090);
auto m_split_left_line = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
m_split_left_line->SetBackgroundColour(0xeeeeee);
m_split_left_line->SetMinSize(wxSize(-1, 1));
m_split_left_line->SetMaxSize(wxSize(-1, 1));
m_sizer_split_ams_left->Add(0, 0, 0, wxEXPAND, 0);
m_sizer_split_ams_left->Add(ams_title_text, 0, wxALIGN_CENTER, 0);
m_sizer_split_ams_left->Add(m_split_left_line, 1, wxALIGN_CENTER_VERTICAL, 0);
m_sizer_ams_left->Add(m_sizer_split_ams_left, 0, wxEXPAND, 0);
m_sizer_split_ams_right = new wxBoxSizer(wxHORIZONTAL);
ams_title_text = new Label(parent, _L("Right Ams"));
ams_title_text->SetFont(::Label::Body_13);
ams_title_text->SetForegroundColour(0x909090);
auto m_split_right_line = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
m_split_right_line->SetBackgroundColour(0xeeeeee);
m_split_right_line->SetMinSize(wxSize(-1, 1));
m_split_right_line->SetMaxSize(wxSize(-1, 1));
m_sizer_split_ams_right->Add(0, 0, 0, wxEXPAND, 0);
m_sizer_split_ams_right->Add(ams_title_text, 0, wxALIGN_CENTER, 0);
m_sizer_split_ams_right->Add(m_split_left_line, 1, wxALIGN_CENTER_VERTICAL, 0);
m_sizer_ams_right->Add(m_sizer_split_ams_right, 0, wxEXPAND, 0);
m_sizer_ams_left->Add(m_sizer_ams_basket_left, 0, wxEXPAND|wxTOP, FromDIP(8)); m_sizer_ams_left->Add(m_sizer_ams_basket_left, 0, wxEXPAND|wxTOP, FromDIP(8));
m_sizer_ams_left->Add(create_split_sizer(m_left_marea_panel, _L("External")), 0, wxEXPAND|wxTOP, FromDIP(8)); m_sizer_ams_left->Add(create_split_sizer(m_left_marea_panel, _L("External")), 0, wxEXPAND|wxTOP, FromDIP(8));
m_sizer_ams_left->Add(m_left_extra_slot, 0, wxEXPAND|wxTOP, FromDIP(8)); //m_sizer_ams_left->Add(m_left_extra_slot, 0, wxEXPAND|wxTOP, FromDIP(8));
m_sizer_ams_left->Add(sizer_temp, 0, wxEXPAND | wxTOP, FromDIP(8));
m_sizer_ams_right->Add(create_split_sizer(m_right_marea_panel, _L("Right Ams")), 0, wxEXPAND, 0); m_sizer_ams_right->Add(create_split_sizer(m_right_marea_panel, _L("Right Ams")), 0, wxEXPAND, 0);
m_sizer_ams_right->Add(m_sizer_ams_basket_right, 0, wxEXPAND|wxTOP, FromDIP(8)); m_sizer_ams_right->Add(m_sizer_ams_basket_right, 0, wxEXPAND|wxTOP, FromDIP(8));
@ -361,7 +393,8 @@ void MaterialItem::doRender(wxDC& dc)
m_left_marea_panel->SetSizer(m_sizer_ams_left); m_left_marea_panel->SetSizer(m_sizer_ams_left);
m_right_marea_panel->SetSizer(m_sizer_ams_right); m_right_marea_panel->SetSizer(m_sizer_ams_right);
m_sizer_ams->Add(m_left_marea_panel, 0, wxEXPAND, FromDIP(0)); //m_sizer_ams->Add(m_left_marea_panel, 0, wxEXPAND, FromDIP(0));
m_sizer_ams->Add(m_left_marea_panel, 0, wxRIGHT, FromDIP(10));
m_sizer_ams->Add(0, 0, 0, wxEXPAND, FromDIP(15)); m_sizer_ams->Add(0, 0, 0, wxEXPAND, FromDIP(15));
m_sizer_ams->Add(m_right_marea_panel, 0, wxEXPAND, FromDIP(0)); m_sizer_ams->Add(m_right_marea_panel, 0, wxEXPAND, FromDIP(0));
@ -371,8 +404,10 @@ void MaterialItem::doRender(wxDC& dc)
m_warning_text->SetFont(::Label::Body_12); m_warning_text->SetFont(::Label::Body_12);
auto cant_not_match_tip = _L("Note: Only the AMS slots loaded with the same material type can be selected."); auto cant_not_match_tip = _L("Note: Only the AMS slots loaded with the same material type can be selected.");
m_warning_text->SetLabel(format_text(cant_not_match_tip)); m_warning_text->SetLabel(format_text(cant_not_match_tip));
m_warning_text->SetMinSize(wxSize(FromDIP(248), FromDIP(-1))); /*m_warning_text->SetMinSize(wxSize(FromDIP(248), FromDIP(-1)));
m_warning_text->Wrap(FromDIP(248)); m_warning_text->Wrap(FromDIP(248));*/
/*m_warning_text->SetMinSize(wxSize(FromDIP(496), FromDIP(-1)));
m_warning_text->Wrap(FromDIP(496));*/
m_sizer_main->Add(title_panel, 0, wxEXPAND | wxALL, FromDIP(2)); m_sizer_main->Add(title_panel, 0, wxEXPAND | wxALL, FromDIP(2));
m_sizer_main->Add(m_sizer_ams, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(14)); m_sizer_main->Add(m_sizer_ams, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(14));
@ -393,18 +428,18 @@ void MaterialItem::doRender(wxDC& dc)
wxBoxSizer* AmsMapingPopup::create_split_sizer(wxWindow* parent, wxString text) wxBoxSizer* AmsMapingPopup::create_split_sizer(wxWindow* parent, wxString text)
{ {
wxBoxSizer* sizer_split_left_ams = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer* sizer_split_ams = new wxBoxSizer(wxHORIZONTAL);
auto left_ams_title_text = new Label(parent, text); auto ams_title_text = new Label(parent, text);
left_ams_title_text->SetFont(::Label::Body_13); ams_title_text->SetFont(::Label::Body_13);
left_ams_title_text->SetForegroundColour(0x909090); ams_title_text->SetForegroundColour(0x909090);
auto m_split_left_line = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); auto m_split_left_line = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
m_split_left_line->SetBackgroundColour(0xeeeeee); m_split_left_line->SetBackgroundColour(0xeeeeee);
m_split_left_line->SetMinSize(wxSize(-1, 1)); m_split_left_line->SetMinSize(wxSize(-1, 1));
m_split_left_line->SetMaxSize(wxSize(-1, 1)); m_split_left_line->SetMaxSize(wxSize(-1, 1));
sizer_split_left_ams->Add(0, 0, 0, wxEXPAND, 0); sizer_split_ams->Add(0, 0, 0, wxEXPAND, 0);
sizer_split_left_ams->Add(left_ams_title_text, 0, wxALIGN_CENTER, 0); sizer_split_ams->Add(ams_title_text, 0, wxALIGN_CENTER, 0);
sizer_split_left_ams->Add(m_split_left_line, 1, wxALIGN_CENTER_VERTICAL, 0); sizer_split_ams->Add(m_split_left_line, 1, wxALIGN_CENTER_VERTICAL, 0);
return sizer_split_left_ams; return sizer_split_ams;
} }
wxString AmsMapingPopup::format_text(wxString &m_msg) wxString AmsMapingPopup::format_text(wxString &m_msg)
@ -518,15 +553,52 @@ void AmsMapingPopup::update(MachineObject* obj)
m_amsmapping_container_sizer_list.clear(); m_amsmapping_container_sizer_list.clear();
m_mapping_item_list.clear(); m_mapping_item_list.clear();
/*ext*/ /*ext*/
if (obj->vt_slot.size() == 1) { const auto& full_config = wxGetApp().preset_bundle->full_config();
size_t nozzle_nums = full_config.option<ConfigOptionFloats>("nozzle_diameter")->values.size();
if (nozzle_nums == 1) {
m_warning_text->SetMinSize(wxSize(FromDIP(248), FromDIP(-1)));
m_warning_text->Wrap(FromDIP(248));
m_left_marea_panel->Hide(); m_left_marea_panel->Hide();
m_right_extra_slot->Hide(); m_left_extra_slot->Hide();
} //m_left_marea_panel->Show();
else if (obj->vt_slot.size() > 1) { m_right_marea_panel->Show();
m_left_marea_panel->Show();
m_right_extra_slot->Show(); m_right_extra_slot->Show();
} }
else if (nozzle_nums > 1) {
m_left_marea_panel->Hide();
m_right_marea_panel->Hide();
m_left_extra_slot->Hide();
m_right_extra_slot->Hide();
if (m_show_type != ShowType::LEFT_AND_RIGHT)
{
m_warning_text->SetMinSize(wxSize(FromDIP(248), FromDIP(-1)));
m_warning_text->Wrap(FromDIP(248));
}
if (m_show_type == ShowType::LEFT)
{
m_sizer_split_ams_left->Show(false);
m_left_marea_panel->Show();
m_left_extra_slot->Show();
}
else if (m_show_type == ShowType::RIGHT)
{
m_sizer_split_ams_right->Show(false);
m_right_marea_panel->Show();
m_right_extra_slot->Show();
}
else if (m_show_type == ShowType::LEFT_AND_RIGHT)
{
m_warning_text->SetMinSize(wxSize(FromDIP(496), FromDIP(-1)));
m_warning_text->Wrap(FromDIP(496));
m_left_marea_panel->Show();
m_left_extra_slot->Show();
m_right_marea_panel->Show();
m_right_extra_slot->Show();
}
}
for (int i = 0; i < obj->vt_slot.size(); i++) { for (int i = 0; i < obj->vt_slot.size(); i++) {

View File

@ -51,6 +51,12 @@ enum TrayType {
EMPTY EMPTY
}; };
enum ShowType {
LEFT, // only show left ams and left ext
RIGHT, //only show right ams and right ext
LEFT_AND_RIGHT //show left and right ams at the same time
};
struct TrayData struct TrayData
{ {
TrayType type; TrayType type;
@ -156,8 +162,9 @@ public:
std::vector<MappingItem*> m_mapping_item_list; std::vector<MappingItem*> m_mapping_item_list;
bool m_has_unmatch_filament {false}; bool m_has_unmatch_filament {false};
bool m_supporting_mix_print {false}; bool m_supporting_mix_print {false}; //For single extruder, can ams and ext print together?
int m_current_filament_id; int m_current_filament_id;
ShowType m_show_type;
std::string m_tag_material; std::string m_tag_material;
wxBoxSizer *m_sizer_main{nullptr}; wxBoxSizer *m_sizer_main{nullptr};
wxBoxSizer *m_sizer_ams{nullptr}; wxBoxSizer *m_sizer_ams{nullptr};
@ -174,6 +181,9 @@ public:
wxPanel* m_left_marea_panel; wxPanel* m_left_marea_panel;
wxPanel* m_right_marea_panel; wxPanel* m_right_marea_panel;
wxBoxSizer* m_sizer_split_ams_left;
wxBoxSizer* m_sizer_split_ams_right;
wxBoxSizer* create_split_sizer(wxWindow* parent, wxString text); wxBoxSizer* create_split_sizer(wxWindow* parent, wxString text);
wxString format_text(wxString &m_msg); wxString format_text(wxString &m_msg);
void set_send_win(wxWindow* win) {send_win = win;}; void set_send_win(wxWindow* win) {send_win = win;};
@ -191,6 +201,7 @@ public:
virtual bool ProcessLeftDown(wxMouseEvent &event) wxOVERRIDE; virtual bool ProcessLeftDown(wxMouseEvent &event) wxOVERRIDE;
void paintEvent(wxPaintEvent &evt); void paintEvent(wxPaintEvent &evt);
void set_parent_item(wxWindow* item) {m_parent_item = item;}; void set_parent_item(wxWindow* item) {m_parent_item = item;};
void set_show_type(ShowType type) { m_show_type = type; };
std::vector<TrayData> parse_ams_mapping(std::map<std::string, Ams*> amsList); std::vector<TrayData> parse_ams_mapping(std::map<std::string, Ams*> amsList);
}; };

View File

@ -900,11 +900,11 @@ int MachineObject::ams_filament_mapping(std::vector<FilamentInfo> filaments, std
{ {
tray_filaments.emplace(std::make_pair(tray_index, info)); tray_filaments.emplace(std::make_pair(tray_index, info));
} }
else if (ams->second->nozzle == 0 && ext_first) else if (ams->second->nozzle == 0 && ext_second)
{ {
tray_filaments.emplace(std::make_pair(tray_index, info)); tray_filaments.emplace(std::make_pair(tray_index, info));
} }
else if (ams->second->nozzle == 1 && ext_second) else if (ams->second->nozzle == 1 && ext_first)
{ {
tray_filaments.emplace(std::make_pair(tray_index, info)); tray_filaments.emplace(std::make_pair(tray_index, info));
} }

View File

@ -2153,6 +2153,9 @@ bool SelectMachineDialog::get_ams_mapping_result(std::string &mapping_array_str,
} }
bool SelectMachineDialog::is_two_nozzle_same() { bool SelectMachineDialog::is_two_nozzle_same() {
//if two extruder are same and can be mix-used, return true
//else return false
//wait to fill
return false; return false;
} }
@ -3809,7 +3812,9 @@ void SelectMachineDialog::update_show_status()
do_ams_mapping(obj_); do_ams_mapping(obj_);
} }
if (!m_mapping_popup.m_supporting_mix_print) const auto& full_config = wxGetApp().preset_bundle->full_config();
size_t nozzle_nums = full_config.option<ConfigOptionFloats>("nozzle_diameter")->values.size();
if (!m_mapping_popup.m_supporting_mix_print && nozzle_nums == 1)
{ {
bool useAms = false; bool useAms = false;
bool useExt = false; bool useExt = false;
@ -4324,7 +4329,24 @@ void SelectMachineDialog::reset_and_sync_ams_list()
DeviceManager *dev_manager = Slic3r::GUI::wxGetApp().getDeviceManager(); DeviceManager *dev_manager = Slic3r::GUI::wxGetApp().getDeviceManager();
if (!dev_manager) return; if (!dev_manager) return;
MachineObject *obj_ = dev_manager->get_selected_machine(); MachineObject *obj_ = dev_manager->get_selected_machine();
const auto& full_config = wxGetApp().preset_bundle->full_config();
size_t nozzle_nums = full_config.option<ConfigOptionFloats>("nozzle_diameter")->values.size();
if (nozzle_nums > 1)
{
if (is_two_nozzle_same())
{
m_mapping_popup.set_show_type(ShowType::LEFT_AND_RIGHT);
}
else if (m_filaments_map[extruder] == 1)
{
m_mapping_popup.set_show_type(ShowType::LEFT);
}
else if(m_filaments_map[extruder] == 2)
{
m_mapping_popup.set_show_type(ShowType::RIGHT);
}
}
//m_mapping_popup.set_show_type(ShowType::RIGHT);
if (obj_ && obj_->is_support_ams_mapping()) { if (obj_ && obj_->is_support_ams_mapping()) {
if (m_mapping_popup.IsShown()) return; if (m_mapping_popup.IsShown()) return;
wxPoint pos = item->ClientToScreen(wxPoint(0, 0)); wxPoint pos = item->ClientToScreen(wxPoint(0, 0));
@ -4378,6 +4400,10 @@ void SelectMachineDialog::reset_and_sync_ams_list()
} }
else else
{ {
m_filament_left_panel->Hide();
m_filament_right_panel->Hide();
m_filament_panel->Show();
//m_filament_panel_left_sizer->Layout();
m_sizer_ams_mapping->SetCols(8); m_sizer_ams_mapping->SetCols(8);
m_sizer_ams_mapping->Layout(); m_sizer_ams_mapping->Layout();
m_filament_panel_sizer->Layout(); m_filament_panel_sizer->Layout();