ENH:optimize the logic related to the virtual tray

Change-Id: I4d3b78f86191a4f3760d16234006b3aa603dd09e
This commit is contained in:
tao wang 2023-02-23 16:51:23 +08:00 committed by Lane.Wei
parent c63326b721
commit 14c5215b48
4 changed files with 99 additions and 77 deletions

View File

@ -1962,8 +1962,8 @@ void StatusPanel::update_ams(MachineObject *obj)
is_vt_tray = true; is_vt_tray = true;
// set segment 1, 2 // set segment 1, 2
if (m_ams_control->GetCurentAms() != std::to_string(VIRTUAL_TRAY_ID)) { if (obj->m_tray_now != std::to_string(VIRTUAL_TRAY_ID)) {
if (obj->m_tray_now != "255" && obj->is_filament_at_extruder()) { if (obj->m_tray_now != "255" && obj->is_filament_at_extruder() && !obj->m_tray_id.empty()) {
m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2); m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2);
} }
else if (obj->m_tray_now != "255") { else if (obj->m_tray_now != "255") {
@ -1977,7 +1977,7 @@ void StatusPanel::update_ams(MachineObject *obj)
} }
// set segment 3 // set segment 3
if (m_ams_control->GetCurentAms() == std::to_string(VIRTUAL_TRAY_ID)) { if (obj->m_tray_now == std::to_string(VIRTUAL_TRAY_ID)) {
m_ams_control->SetExtruder(obj->is_filament_at_extruder(), obj->vt_tray.get_color()); m_ams_control->SetExtruder(obj->is_filament_at_extruder(), obj->vt_tray.get_color());
} else { } else {
m_ams_control->SetExtruder(obj->is_filament_at_extruder(), m_ams_control->GetCanColour(curr_ams_id, obj->m_tray_id)); m_ams_control->SetExtruder(obj->is_filament_at_extruder(), m_ams_control->GetCanColour(curr_ams_id, obj->m_tray_id));
@ -2078,34 +2078,67 @@ void StatusPanel::update_ams(MachineObject *obj)
} catch (...) {} } catch (...) {}
} }
update_ams_control_state(curr_ams_id, is_support_extrusion_cali); bool is_curr_tray_selected = false;
} if (!curr_ams_id.empty() && !curr_can_id.empty()) {
if (curr_can_id == obj->m_tray_now) {
void StatusPanel::update_ams_control_state(std::string ams_id, bool is_support_virtual_tray) is_curr_tray_selected = true;
{
// update load/unload enable state
if (obj->is_in_extrusion_cali()) {
m_ams_control->SetActionState(AMSAction::AMS_ACTION_CALI, is_support_virtual_tray);
}
else if (!obj->has_ams()) {
m_ams_control->SetActionState(AMSAction::AMS_ACTION_NOAMS, is_support_virtual_tray);
}
else if (obj->is_in_printing() && !obj->can_resume()) {
m_ams_control->SetActionState(AMSAction::AMS_ACTION_PRINTING, is_support_virtual_tray);
}
else {
if (obj->ams_status_main != AMS_STATUS_MAIN_FILAMENT_CHANGE) {
if (obj->m_tray_now == "255") {
m_ams_control->SetActionState(AMSAction::AMS_ACTION_LOAD, is_support_virtual_tray);
}
else {
m_ams_control->SetActionState(AMSAction::AMS_ACTION_NORMAL, is_support_virtual_tray);
}
} }
else { else {
m_ams_control->SetActionState(AMSAction::AMS_ACTION_PRINTING, is_support_virtual_tray);
std::map<std::string, Ams*>::iterator it = obj->amsList.find(curr_ams_id);
if (it == obj->amsList.end()) {
BOOST_LOG_TRIVIAL(trace) << "ams: find " << curr_ams_id << " failed";
return;
}
auto tray_it = it->second->trayList.find(curr_can_id);
if (tray_it == it->second->trayList.end()) {
BOOST_LOG_TRIVIAL(trace) << "ams: find " << curr_can_id << " failed";
return;
}
if (!tray_it->second->is_exists) {
is_curr_tray_selected = true;
}
} }
} }
else {
is_curr_tray_selected = true;
}
update_ams_control_state(is_support_extrusion_cali, is_curr_tray_selected);
}
void StatusPanel::update_ams_control_state(bool is_support_virtual_tray, bool is_curr_tray_selected)
{
bool enable[ACTION_BTN_COUNT];
// set default value to true
if (obj->is_in_printing() && !obj->can_resume()) {
enable[ACTION_BTN_LOAD] = false;
enable[ACTION_BTN_UNLOAD] = false;
}
if (!is_support_virtual_tray) {
enable[ACTION_BTN_CALI] = false;
} else {
// update load/unload enable state
if (obj->is_in_extrusion_cali()) {
enable[ACTION_BTN_LOAD] = false;
enable[ACTION_BTN_UNLOAD] = false;
}
}
// select current
if (is_curr_tray_selected) {
enable[ACTION_BTN_LOAD] = false;
}
if (obj->m_tray_now == "255") {
enable[ACTION_BTN_UNLOAD] = false;
}
m_ams_control->SetActionState(enable);
} }
void StatusPanel::update_cali(MachineObject *obj) void StatusPanel::update_cali(MachineObject *obj)
@ -2739,12 +2772,27 @@ void StatusPanel::on_ext_spool_edit(wxCommandEvent &event)
m_filament_setting_dlg->obj = obj; m_filament_setting_dlg->obj = obj;
try { try {
m_filament_setting_dlg->tray_id = VIRTUAL_TRAY_ID; m_filament_setting_dlg->tray_id = VIRTUAL_TRAY_ID;
std::string sn_number;
std::string filament;
std::string temp_max;
std::string temp_min;
wxString k_val; wxString k_val;
wxString n_val; wxString n_val;
k_val = wxString::Format("%.3f", obj->vt_tray.k); k_val = wxString::Format("%.3f", obj->vt_tray.k);
n_val = wxString::Format("%.3f", obj->vt_tray.n); n_val = wxString::Format("%.3f", obj->vt_tray.n);
wxColor color = AmsTray::decode_color(obj->vt_tray.color);
m_filament_setting_dlg->set_color(color);
m_filament_setting_dlg->ams_filament_id = obj->vt_tray.setting_id;
m_filament_setting_dlg->m_is_third = !MachineObject::is_bbl_filament(obj->vt_tray.tag_uid);
if (!m_filament_setting_dlg->m_is_third) {
sn_number = obj->vt_tray.uuid;
filament = obj->vt_tray.sub_brands;
temp_max = obj->vt_tray.nozzle_temp_max;
temp_min = obj->vt_tray.nozzle_temp_min;
}
m_filament_setting_dlg->SetPosition(m_ams_control->GetScreenPosition()); m_filament_setting_dlg->SetPosition(m_ams_control->GetScreenPosition());
m_filament_setting_dlg->Popup(wxEmptyString, wxEmptyString, wxEmptyString, wxEmptyString, k_val, n_val); m_filament_setting_dlg->Popup(filament, sn_number, temp_min, temp_max, k_val, n_val);
} }
catch (...) { catch (...) {
; ;
@ -2798,7 +2846,7 @@ void StatusPanel::on_ams_selected(wxCommandEvent &event)
if (obj) { if (obj) {
std::string curr_ams_id = m_ams_control->GetCurentAms(); std::string curr_ams_id = m_ams_control->GetCurentAms();
if (curr_ams_id.compare(std::to_string(VIRTUAL_TRAY_ID)) == 0) { if (curr_ams_id.compare(std::to_string(VIRTUAL_TRAY_ID)) == 0) {
update_ams_control_state(curr_ams_id, true); //update_ams_control_state(curr_ams_id, true);
return; return;
} else { } else {
std::string curr_can_id = event.GetString().ToStdString(); std::string curr_can_id = event.GetString().ToStdString();
@ -2818,7 +2866,7 @@ void StatusPanel::on_ams_selected(wxCommandEvent &event)
} catch (...) { } catch (...) {
; ;
} }
update_ams_control_state(curr_ams_id, obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)); //update_ams_control_state(curr_ams_id, obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI));
} }
} }
} }

View File

@ -383,7 +383,7 @@ protected:
void update_misc_ctrl(MachineObject *obj); void update_misc_ctrl(MachineObject *obj);
void update_ams(MachineObject* obj); void update_ams(MachineObject* obj);
void update_extruder_status(MachineObject* obj); void update_extruder_status(MachineObject* obj);
void update_ams_control_state(std::string ams_id, bool is_support_virtual_tray); void update_ams_control_state(bool is_support_virtual_tray, bool is_curr_tray_selected);
void update_cali(MachineObject* obj); void update_cali(MachineObject* obj);
void reset_printing_values(); void reset_printing_values();

View File

@ -1471,11 +1471,10 @@ void AmsCans::PlayRridLoading(wxString canid)
std::string AmsCans::GetCurrentCan() std::string AmsCans::GetCurrentCan()
{ {
if (m_canlib_selection > -1 && m_canlib_selection < m_can_lib_list.size()) { if (m_canlib_selection < 0)
CanLibs *lib = m_can_lib_list[m_canlib_selection]; return "";
return lib->canLib->m_info.can_id;
} return wxString::Format("%d", m_canlib_selection).ToStdString();
return "";
} }
void AmsCans::StopRridLoading(wxString canid) void AmsCans::StopRridLoading(wxString canid)
@ -2028,48 +2027,16 @@ wxColour AMSControl::GetCanColour(std::string amsid, std::string canid)
return col; return col;
} }
void AMSControl::SetActionState(AMSAction action, bool support_virtual_tray) void AMSControl::SetActionState(bool button_status[])
{ {
m_button_area->Layout(); if (button_status[ActionButton::ACTION_BTN_CALI]) m_button_extrusion_cali->Enable();
m_button_area->Fit(); else m_button_extrusion_cali->Disable();
switch (action) { if (button_status[ActionButton::ACTION_BTN_LOAD]) m_button_extruder_feed->Enable();
case Slic3r::GUI::AMSAction::AMS_ACTION_NONE: break; else m_button_extruder_feed->Disable();
case Slic3r::GUI::AMSAction::AMS_ACTION_LOAD:
m_button_extrusion_cali->Enable(); if (button_status[ActionButton::ACTION_BTN_UNLOAD]) m_button_extruder_back->Enable();
m_button_extruder_feed->Enable(); else m_button_extruder_back->Disable();
m_button_extruder_back->Disable();
break;
case Slic3r::GUI::AMSAction::AMS_ACTION_UNLOAD:
m_button_extrusion_cali->Enable();
m_button_extruder_feed->Disable();
m_button_extruder_back->Enable();
break;
case Slic3r::GUI::AMSAction::AMS_ACTION_PRINTING:
m_button_extrusion_cali->Disable();
m_button_extruder_feed->Disable();
m_button_extruder_back->Disable();
break;
case Slic3r::GUI::AMSAction::AMS_ACTION_NORMAL:
m_button_extrusion_cali->Enable();
m_button_extruder_feed->Enable();
m_button_extruder_back->Enable();
break;
case Slic3r::GUI::AMSAction::AMS_ACTION_CALI:
m_button_extrusion_cali->Enable();
m_button_extruder_feed->Disable();
m_button_extruder_back->Disable();
break;
case Slic3r::GUI::AMSAction::AMS_ACTION_NOAMS:
if (support_virtual_tray)
m_button_extrusion_cali->Enable();
else
m_button_extrusion_cali->Disable();
m_button_extruder_feed->Enable();
m_button_extruder_back->Enable();
break;
default: break;
}
} }
void AMSControl::EnterNoneAMSMode(bool support_vt_load) void AMSControl::EnterNoneAMSMode(bool support_vt_load)

View File

@ -35,6 +35,13 @@
namespace Slic3r { namespace GUI { namespace Slic3r { namespace GUI {
enum ActionButton {
ACTION_BTN_CALI = 0,
ACTION_BTN_LOAD = 1,
ACTION_BTN_UNLOAD = 2,
ACTION_BTN_COUNT = 3
};
enum class AMSRoadMode : int { enum class AMSRoadMode : int {
AMS_ROAD_MODE_LEFT, AMS_ROAD_MODE_LEFT,
AMS_ROAD_MODE_LEFT_RIGHT, AMS_ROAD_MODE_LEFT_RIGHT,
@ -524,7 +531,7 @@ public:
wxColour GetCanColour(std::string amsid, std::string canid); wxColour GetCanColour(std::string amsid, std::string canid);
bool m_is_none_ams_mode{false}; bool m_is_none_ams_mode{false};
void SetActionState(AMSAction action, bool support_virtual_tray = true); void SetActionState(bool button_status[]);
void EnterNoneAMSMode(bool support_vt_load = false); void EnterNoneAMSMode(bool support_vt_load = false);
void ExitNoneAMSMode(); void ExitNoneAMSMode();