diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index 5bb262ab24..e5da1091f0 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -360,11 +360,11 @@ void AMSMaterialsSetting::update() void AMSMaterialsSetting::enable_confirm_button(bool en) { - if (!m_is_third) { + m_button_confirm->Show(en); + if (!m_is_third) { m_tip_readonly->Hide(); } else { - m_button_confirm->Show(en); m_comboBox_filament->Show(en); m_readonly_filament->Show(!en); m_tip_readonly->Show(!en); diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index d9fb9787e3..0dc50acd60 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -3037,10 +3037,12 @@ int MachineObject::parse_json(std::string payload) } else { curr_tray->remain = -1; } + int ams_id_int = 0; + int tray_id_int = 0; try { if (!ams_id.empty() && !curr_tray->id.empty()) { - int ams_id_int = atoi(ams_id.c_str()); - int tray_id_int = atoi(curr_tray->id.c_str()); + ams_id_int = atoi(ams_id.c_str()); + tray_id_int = atoi(curr_tray->id.c_str()); curr_tray->is_exists = (tray_exist_bits & (1 << (ams_id_int * 4 + tray_id_int))) != 0 ? true : false; } } @@ -3049,11 +3051,19 @@ int MachineObject::parse_json(std::string payload) if (tray_it->contains("setting_id")) { curr_tray->filament_setting_id = (*tray_it)["setting_id"].get(); } - if (tray_it->contains("k")) { - curr_tray->k = (*tray_it)["k"].get(); - } - if (tray_it->contains("n")) { - curr_tray->n = (*tray_it)["n"].get(); + + + auto curr_time = std::chrono::system_clock::now(); + auto diff = std::chrono::duration_cast(curr_time - extrusion_cali_set_hold_start); + if (diff.count() > HOLD_TIMEOUT || diff.count() < 0 + || ams_id_int != (extrusion_cali_set_tray_id / 4) + || tray_id_int != (extrusion_cali_set_tray_id % 4)) { + if (tray_it->contains("k")) { + curr_tray->k = (*tray_it)["k"].get(); + } + if (tray_it->contains("n")) { + curr_tray->n = (*tray_it)["n"].get(); + } } } // remove not in trayList @@ -3084,10 +3094,15 @@ int MachineObject::parse_json(std::string payload) if (jj.contains("vt_tray")) { if (jj["vt_tray"].contains("id")) vt_tray.id = jj["vt_tray"]["id"].get(); - if (jj["vt_tray"].contains("k")) - vt_tray.k = jj["vt_tray"]["k"].get(); - if (jj["vt_tray"].contains("n")) - vt_tray.n = jj["vt_tray"]["n"].get(); + auto curr_time = std::chrono::system_clock::now(); + auto diff = std::chrono::duration_cast(curr_time - extrusion_cali_set_hold_start); + if (diff.count() > HOLD_TIMEOUT || diff.count() < 0 + || extrusion_cali_set_tray_id != VIRTUAL_TRAY_ID) { + if (jj["vt_tray"].contains("k")) + vt_tray.k = jj["vt_tray"]["k"].get(); + if (jj["vt_tray"].contains("n")) + vt_tray.n = jj["vt_tray"]["n"].get(); + } ams_support_virtual_tray = true; } else { ams_support_virtual_tray = false; @@ -3197,9 +3212,10 @@ int MachineObject::parse_json(std::string payload) } else if (jj["command"].get() == "extrusion_cali_set") { int ams_id = -1; int tray_id = -1; + int curr_tray_id = -1; if (jj.contains("tray_id")) { try { - int curr_tray_id = jj["tray_id"].get(); + curr_tray_id = jj["tray_id"].get(); if (curr_tray_id == VIRTUAL_TRAY_ID) tray_id = curr_tray_id; else if (curr_tray_id >= 0 && curr_tray_id < 16){ @@ -3230,6 +3246,8 @@ int MachineObject::parse_json(std::string payload) } } } + extrusion_cali_set_tray_id = curr_tray_id; + extrusion_cali_set_hold_start = std::chrono::system_clock::now(); } } } diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 36e8fc0e00..37930dee7e 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -21,6 +21,7 @@ #define REQUEST_PUSH_MIN_TIME 15000.f // milliseconds #define REQUEST_START_MIN_TIME 15000.f // milliseconds #define EXTRUSION_OMIT_TIME 20000.f // milliseconds +#define HOLD_TIMEOUT 10000.f // milliseconds #define FILAMENT_MAX_TEMP 300 #define FILAMENT_DEF_TEMP 220 @@ -459,6 +460,8 @@ public: int extrusion_cali_hold_count = 0; std::chrono::system_clock::time_point last_extrusion_cali_start_time; + int extrusion_cali_set_tray_id = -1; + std::chrono::system_clock::time_point extrusion_cali_set_hold_start; bool is_in_extrusion_cali(); bool is_extrusion_cali_finished();