FIX: create filament issue

Jira: 5296 5297 5295 5302 5311 5276

5296 create filament: list has same printer
5297 create filament: filament combobox has blank options
5298 edit filament: delete last preset prompt users
5302 create filament: filament combox has cili preset
5311 create filament: printer name too long to can not show all
5276 edit filament: PLA Aero filament type filter issue
add prusa vendor
Revised copy

Change-Id: I5dcc615ce0951b1a9953fa12283f6090f5069045
This commit is contained in:
maosheng.wei 2023-11-22 14:45:27 +08:00 committed by Lane.Wei
parent 4cb44574fd
commit 567c35022e
2 changed files with 53 additions and 32 deletions

View File

@ -48,19 +48,18 @@ static const std::vector<std::string> filament_types = {"PLA", "PLA+", "PLA
static const std::vector<std::string> system_filament_types = {"PLA", "ABS", "TPU", "PC", "ASA", "PA-CF", "PA6-CF", "PET-CF", "PETG", "PETG-CF", static const std::vector<std::string> system_filament_types = {"PLA", "ABS", "TPU", "PC", "ASA", "PA-CF", "PA6-CF", "PET-CF", "PETG", "PETG-CF",
"PLA Aero", "PLA-CF", "PPA-CF", "PPA-GF", "PA", "HIPS", "PPS", "PPS-CF", "PVA"}; "PLA Aero", "PLA-CF", "PPA-CF", "PPA-GF", "PA", "HIPS", "PPS", "PPS-CF", "PVA"};
/* static std::unordered_map<std::string, std::string> system_filament_types_map = {{"PLA", "PLA"}, {"ABS", "ABS"}, {"TPU", "TPU"},
static const std::unordered_map<std::string, std::string> system_filament_types_map = {{"PLA", "PLA"}, {"ABS", "ABS"}, {"TPU", "TPU"}, {"PC", "PC"}, {"ASA", "ASA"}, {"PA-CF", "PA-CF"},
{"PC", "PC"}, {"ASA", "ASA"}, {"PA-CF", "PA-CF"}, {"PA6-CF", "PA6-CF"}, {"PET-CF", "PET-CF"}, {"PETG", "PETG"},
{"PA6-CF", "PA6-CF"}, {"PET-CF", "PET-CF"}, {"PETG", "PETG"}, {"PETG-CF", "PETG-CF"}, {"PLA Aero", "PLA-AERO"}, {"PLA-CF", "PLA-CF"},
{"PETG-CF", "PETG-CF"}, {"PLA Aero", "PLA-AERO"}, {"PLA-CF", "PLA-CF"}, {"PPA-CF", "PPA-CF"}, {"PPA-GF", "PPA-GF"}, {"PA", "PA"},
{"PPA-CF", "PPA-CF"}, {"PPA-GF", "PPA-GF"}, {"PA", "PA"}, {"HIPS", "HIPS"}, {"PPS", "PPS"}, {"PPS-CF", "PPS-CF"},
{"HIPS", "HIPS"}, {"PPS", "PPS"}, {"PPS-CF", "PPS-CF"}, {"PVA", "PVA"}};
{"PVA", "PVA"}};*/
static const std::vector<std::string> printer_vendors = {"Anycubic", "Artillery", "BIBO", "BIQU", "Creality ENDER", "Creality CR", "Creality SERMOON", static const std::vector<std::string> printer_vendors = {"Anycubic", "Artillery", "BIBO", "BIQU", "Creality ENDER", "Creality CR", "Creality SERMOON",
"FLSun", "gCreate", "Geeetech", "INAT", "Infinity3D", "Jubilee", "LNL3D", "FLSun", "gCreate", "Geeetech", "INAT", "Infinity3D", "Jubilee", "LNL3D",
"LulzBot", "MakerGear", "Papapiu", "Print4Taste", "RatRig", "Rigid3D", "Snapmaker", "Sovol", "LulzBot", "MakerGear", "Original Prusa", "Papapiu", "Print4Taste", "RatRig", "Rigid3D",
"TriLAB", "Trimaker", "Ultimaker", "Voron", "Zonestar"}; "Snapmaker", "Sovol", "TriLAB", "Trimaker", "Ultimaker", "Voron", "Zonestar"};
static const std::unordered_map<std::string, std::vector<std::string>> printer_model_map = static const std::unordered_map<std::string, std::vector<std::string>> printer_model_map =
{{"Anycubic", {"Kossel Linear Plus", "Kossel Pulley(Linear)", "Mega Zero", "i3 Mega", "Predator"}}, {{"Anycubic", {"Kossel Linear Plus", "Kossel Pulley(Linear)", "Mega Zero", "i3 Mega", "Predator"}},
@ -89,6 +88,7 @@ static const std::unordered_map<std::string, std::vector<std::string>> printer_m
{"LulzBot", {"Mini Aero", "Taz6 Aero"}}, {"LulzBot", {"Mini Aero", "Taz6 Aero"}},
{"MakerGear", {"Micro", "M2(V4 Hotend)", "M2 Dual", "M3-single Extruder", "M3-Independent Dual Rev.0", "M3-Independent Dual Rev.0(Duplication Mode)", {"MakerGear", {"Micro", "M2(V4 Hotend)", "M2 Dual", "M3-single Extruder", "M3-Independent Dual Rev.0", "M3-Independent Dual Rev.0(Duplication Mode)",
"M3-Independent Dual Rev.1", "M3-Independent Dual Rev.1(Duplication Mode)", "ultra One", "Ultra One (DuplicationMode)"}}, "M3-Independent Dual Rev.1", "M3-Independent Dual Rev.1(Duplication Mode)", "ultra One", "Ultra One (DuplicationMode)"}},
{"Original Prusa", {"MK4", "SL1S SPEED", "MMU3"}},
{"Papapiu", {"N1s"}}, {"Papapiu", {"N1s"}},
{"Print4Taste", {"mycusini 2.0"}}, {"Print4Taste", {"mycusini 2.0"}},
{"RatRig", {"V-core-3 300mm", "V-Core-3 400mm", "V-Core-3 500mm", "V-Minion"}}, {"RatRig", {"V-core-3 300mm", "V-Core-3 400mm", "V-Core-3 500mm", "V-Minion"}},
@ -510,7 +510,7 @@ static char* read_json_file(const std::string &preset_path)
} }
CreateFilamentPresetDialog::CreateFilamentPresetDialog(wxWindow *parent) CreateFilamentPresetDialog::CreateFilamentPresetDialog(wxWindow *parent)
: DPIDialog(parent ? parent : nullptr, wxID_ANY, _L("Creat Filament"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX | wxCENTRE) : DPIDialog(parent ? parent : nullptr, wxID_ANY, _L("Create Filament"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX | wxCENTRE)
{ {
m_create_type.base_filament = _L("Create based on current filamet"); m_create_type.base_filament = _L("Create based on current filamet");
m_create_type.base_filament_preset = _L("Copy current filament preset "); m_create_type.base_filament_preset = _L("Copy current filament preset ");
@ -730,9 +730,7 @@ wxBoxSizer *CreateFilamentPresetDialog::create_type_item()
m_scrolled_preset_panel->SetSizerAndFit(m_scrolled_sizer); m_scrolled_preset_panel->SetSizerAndFit(m_scrolled_sizer);
Layout(); Layout();
Fit(); Fit();
if (this->GetSize().GetHeight() > 900) { update_dialog_size();
this->SetSize(-1, 900);
}
e.Skip(); e.Skip();
}); });
@ -835,10 +833,7 @@ wxBoxSizer *CreateFilamentPresetDialog::create_filament_preset_item()
Layout(); Layout();
Fit(); Fit();
Refresh(); Refresh();
if (this->GetSize().GetHeight() > 900) { update_dialog_size();
this->SetSize(-1, 900);
}
e.Skip(); e.Skip();
}); });
@ -1071,6 +1066,8 @@ wxArrayString CreateFilamentPresetDialog::get_filament_preset_choices()
for (std::pair<std::string, Preset*> filament_presets : m_all_presets_map) { for (std::pair<std::string, Preset*> filament_presets : m_all_presets_map) {
Preset *preset = filament_presets.second; Preset *preset = filament_presets.second;
auto inherit = preset->config.option<ConfigOptionString>("inherits");
if (inherit && !inherit->value.empty()) continue;
if (std::string::npos == filament_presets.first.find(type_name)) continue; if (std::string::npos == filament_presets.first.find(type_name)) continue;
m_filament_choice_map[preset->filament_id].push_back(preset); m_filament_choice_map[preset->filament_id].push_back(preset);
} }
@ -1097,9 +1094,11 @@ wxArrayString CreateFilamentPresetDialog::get_filament_preset_choices()
suffix++; suffix++;
m_public_name_to_filament_id_map[public_name + "_" + std::to_string(suffix)] = preset.first; m_public_name_to_filament_id_map[public_name + "_" + std::to_string(suffix)] = preset.first;
choices.Add(public_name + "_" + std::to_string(suffix)); choices.Add(public_name + "_" + std::to_string(suffix));
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " add filament choice: " << choices.back();
} else { } else {
m_public_name_to_filament_id_map[public_name] = preset.first; m_public_name_to_filament_id_map[public_name] = preset.first;
choices.Add(public_name); choices.Add(public_name);
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " add filament choice: " << choices.back();
} }
} }
} }
@ -1163,9 +1162,7 @@ void CreateFilamentPresetDialog::select_curr_radiobox(std::vector<std::pair<Radi
Layout(); Layout();
Fit(); Fit();
Refresh(); Refresh();
if (this->GetSize().GetHeight() > 900) { update_dialog_size();
this->SetSize(-1, 900);
}
} }
wxString CreateFilamentPresetDialog::curr_create_filament_type() wxString CreateFilamentPresetDialog::curr_create_filament_type()
@ -1296,6 +1293,17 @@ void CreateFilamentPresetDialog::get_all_visible_printer_name()
} }
void CreateFilamentPresetDialog::update_dialog_size()
{
int width = GetSize().GetWidth();
int height = GetSize().GetHeight();
int new_width = width;
int new_height = height;
if (width > 1400) new_width = 1400;
if (height > 900) new_height = 900;
if (height != new_height || width != new_width) this->SetSize(new_width, new_height);
}
template<typename T> template<typename T>
void CreateFilamentPresetDialog::sort_printer_by_nozzle(std::vector<std::pair<std::string, T>> &printer_name_to_filament_preset) void CreateFilamentPresetDialog::sort_printer_by_nozzle(std::vector<std::pair<std::string, T>> &printer_name_to_filament_preset)
{ {
@ -1347,9 +1355,9 @@ CreatePrinterPresetDialog::CreatePrinterPresetDialog(wxWindow *parent)
: DPIDialog(parent ? parent : nullptr, wxID_ANY, _L("Create Printer/Nozzle"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX | wxCENTER) : DPIDialog(parent ? parent : nullptr, wxID_ANY, _L("Create Printer/Nozzle"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX | wxCENTER)
{ {
m_create_type.create_printer = _L("Create Printer"); m_create_type.create_printer = _L("Create Printer");
m_create_type.create_nozzle = _L("Create Nozzle for existing printer"); m_create_type.create_nozzle = _L("Create Nozzle for Existing Printer");
m_create_type.base_template = _L("Create from template"); m_create_type.base_template = _L("Create from Template");
m_create_type.base_curr_printer = _L("Create based on current printer"); m_create_type.base_curr_printer = _L("Create Based on Current Printer");
this->SetBackgroundColour(*wxWHITE); this->SetBackgroundColour(*wxWHITE);
SetSizeHints(wxDefaultSize, wxDefaultSize); SetSizeHints(wxDefaultSize, wxDefaultSize);
@ -1422,7 +1430,7 @@ wxBoxSizer *CreatePrinterPresetDialog::create_step_switch_item()
horizontal_sizer->Add(0, 0, 1, wxEXPAND,0); horizontal_sizer->Add(0, 0, 1, wxEXPAND,0);
m_step_1 = new wxStaticBitmap(step_switch_panel, wxID_ANY, create_scaled_bitmap("step_1", nullptr, FromDIP(20)), wxDefaultPosition, wxDefaultSize); m_step_1 = new wxStaticBitmap(step_switch_panel, wxID_ANY, create_scaled_bitmap("step_1", nullptr, FromDIP(20)), wxDefaultPosition, wxDefaultSize);
horizontal_sizer->Add(m_step_1, 0, wxEXPAND | wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(3)); horizontal_sizer->Add(m_step_1, 0, wxEXPAND | wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(3));
wxStaticText *static_create_printer_text = new wxStaticText(step_switch_panel, wxID_ANY, _L("Create Printer"), wxDefaultPosition, wxDefaultSize); wxStaticText *static_create_printer_text = new wxStaticText(step_switch_panel, wxID_ANY, m_create_type.create_printer, wxDefaultPosition, wxDefaultSize);
horizontal_sizer->Add(static_create_printer_text, 0, wxEXPAND | wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(3)); horizontal_sizer->Add(static_create_printer_text, 0, wxEXPAND | wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(3));
auto divider_line = new wxPanel(step_switch_panel, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(50), 1)); auto divider_line = new wxPanel(step_switch_panel, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(50), 1));
divider_line->SetBackgroundColour(PRINTER_LIST_COLOUR); divider_line->SetBackgroundColour(PRINTER_LIST_COLOUR);
@ -1505,7 +1513,7 @@ wxBoxSizer *CreatePrinterPresetDialog::create_printer_item(wxWindow *parent)
wxBoxSizer *vertical_sizer = new wxBoxSizer(wxVERTICAL); wxBoxSizer *vertical_sizer = new wxBoxSizer(wxVERTICAL);
wxBoxSizer *comboBoxSizer = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer *comboBoxSizer = new wxBoxSizer(wxHORIZONTAL);
m_select_vendor = new ComboBox(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, NAME_OPTION_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY); m_select_vendor = new ComboBox(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, NAME_OPTION_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY);
m_select_vendor->SetValue(_L("Select Vendor")); m_select_vendor->SetValue(_L("Select vendor"));
m_select_vendor->SetLabelColor(DEFAULT_PROMPT_TEXT_COLOUR); m_select_vendor->SetLabelColor(DEFAULT_PROMPT_TEXT_COLOUR);
wxArrayString printer_vendor; wxArrayString printer_vendor;
for (const std::string &vendor : printer_vendors) { for (const std::string &vendor : printer_vendors) {
@ -2314,9 +2322,9 @@ wxBoxSizer *CreatePrinterPresetDialog::create_printer_preset_item(wxWindow *pare
horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10));
wxBoxSizer * vertical_sizer = new wxBoxSizer(wxVERTICAL); wxBoxSizer * vertical_sizer = new wxBoxSizer(wxVERTICAL);
wxStaticText *combobox_title = new wxStaticText(parent, wxID_ANY, _L("Create based on current printer"), wxDefaultPosition, wxDefaultSize, 0); wxStaticText *combobox_title = new wxStaticText(parent, wxID_ANY, m_create_type.base_curr_printer, wxDefaultPosition, wxDefaultSize, 0);
combobox_title->SetFont(::Label::Body_13); combobox_title->SetFont(::Label::Body_13);
auto size = combobox_title->GetTextExtent(_L("Create based on current printer")); auto size = combobox_title->GetTextExtent(m_create_type.base_curr_printer);
combobox_title->SetMinSize(wxSize(size.x + FromDIP(4), -1)); combobox_title->SetMinSize(wxSize(size.x + FromDIP(4), -1));
combobox_title->Wrap(-1); combobox_title->Wrap(-1);
vertical_sizer->Add(combobox_title, 0, wxEXPAND | wxALL, 0); vertical_sizer->Add(combobox_title, 0, wxEXPAND | wxALL, 0);
@ -4197,6 +4205,9 @@ EditFilamentPresetDialog::EditFilamentPresetDialog(wxWindow *parent, FilamentInf
m_main_sizer->Add(create_add_filament_btn(), 0, wxEXPAND | wxALL, 0); m_main_sizer->Add(create_add_filament_btn(), 0, wxEXPAND | wxALL, 0);
m_main_sizer->Add(create_preset_tree_sizer(), 0, wxEXPAND | wxALL, 0); m_main_sizer->Add(create_preset_tree_sizer(), 0, wxEXPAND | wxALL, 0);
m_note_text = new wxStaticText(this, wxID_ANY, _L("Note: If the only preset under this filament is deleted, the filament will be deleted after exiting the dialog."));
m_main_sizer->Add(m_note_text, 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM | wxALIGN_CENTER_VERTICAL, FromDIP(10));
m_note_text->Hide();
m_main_sizer->Add(create_button_sizer(), 0, wxEXPAND | wxALL, 0); m_main_sizer->Add(create_button_sizer(), 0, wxEXPAND | wxALL, 0);
update_preset_tree(); update_preset_tree();
@ -4240,8 +4251,15 @@ void EditFilamentPresetDialog::update_preset_tree()
for (std::pair<std::string, std::vector<std::shared_ptr<Preset>>> printer_and_presets : m_printer_compatible_presets) { for (std::pair<std::string, std::vector<std::shared_ptr<Preset>>> printer_and_presets : m_printer_compatible_presets) {
m_preset_tree_sizer->Add(m_preset_tree_creater->get_preset_tree(printer_and_presets), 0, wxEXPAND | wxLEFT | wxTOP | wxRIGHT, 5); m_preset_tree_sizer->Add(m_preset_tree_creater->get_preset_tree(printer_and_presets), 0, wxEXPAND | wxLEFT | wxTOP | wxRIGHT, 5);
} }
if (m_printer_compatible_presets.size() == 1 && m_printer_compatible_presets.begin()->second.size() == 1) {
m_note_text->Show();
} else {
m_note_text->Hide();
}
m_preset_tree_panel->SetSizerAndFit(m_preset_tree_sizer); m_preset_tree_panel->SetSizerAndFit(m_preset_tree_sizer);
m_preset_tree_panel->SetMinSize(wxSize(m_note_text->GetSize().GetWidth(), -1));
m_preset_tree_panel->SetSize(wxSize(m_note_text->GetSize().GetWidth(), -1));
int whidth = m_preset_tree_panel->GetSize().GetWidth(); int whidth = m_preset_tree_panel->GetSize().GetWidth();
int height = m_preset_tree_panel->GetSize().GetHeight(); int height = m_preset_tree_panel->GetSize().GetHeight();
m_preset_tree_window->SetMinSize(wxSize(std::min(1000, whidth), std::min(600, height))); m_preset_tree_window->SetMinSize(wxSize(std::min(1000, whidth), std::min(600, height)));
@ -4621,8 +4639,9 @@ void CreatePresetForPrinterDialog::get_visible_printer_and_compatible_filament_p
if (filament_types && filament_types->values.empty()) continue; if (filament_types && filament_types->values.empty()) continue;
const std::string filament_type = filament_types->values[0]; const std::string filament_type = filament_types->values[0];
//if (filament_type != m_filament_type) continue; std::string filament_type_ = system_filament_types_map[m_filament_type];
if (filament_type == m_filament_type) { if (filament_type_.empty()) filament_type_ = m_filament_type;
if (filament_type == filament_type_) {
m_printer_compatible_filament_presets[printer_preset.name].push_back(std::make_shared<Preset>(filament_preset)); m_printer_compatible_filament_presets[printer_preset.name].push_back(std::make_shared<Preset>(filament_preset));
} }
} }

View File

@ -58,6 +58,7 @@ private:
void get_filament_presets_by_machine(); void get_filament_presets_by_machine();
void get_all_filament_presets(); void get_all_filament_presets();
void get_all_visible_printer_name(); void get_all_visible_printer_name();
void update_dialog_size();
template<typename T> template<typename T>
void sort_printer_by_nozzle(std::vector<std::pair<std::string, T>> &printer_name_to_filament_preset); void sort_printer_by_nozzle(std::vector<std::pair<std::string, T>> &printer_name_to_filament_preset);
@ -390,6 +391,7 @@ private:
wxPanel * m_preset_tree_panel = nullptr; wxPanel * m_preset_tree_panel = nullptr;
wxScrolledWindow * m_preset_tree_window = nullptr; wxScrolledWindow * m_preset_tree_window = nullptr;
wxBoxSizer * m_main_sizer = nullptr; wxBoxSizer * m_main_sizer = nullptr;
wxStaticText * m_note_text = nullptr;
int m_need_delete_preset_index = -1; int m_need_delete_preset_index = -1;
int m_need_edit_preset_index = -1; int m_need_edit_preset_index = -1;
std::string m_selected_printer = ""; std::string m_selected_printer = "";