diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index daaeaa2b0..85f70a1e2 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -796,7 +796,7 @@ bool MachineObject::is_extrusion_cali_finished() void MachineObject::_parse_tray_now(std::string tray_now) { - m_tray_now = tray_now; + m_tray_now = tray_now; if (tray_now.empty()) { return; } else { @@ -3779,6 +3779,7 @@ int MachineObject::parse_json(std::string payload, bool key_field_only) if (jj.contains("flag3")) { int flag3 = jj["flag3"].get(); is_support_filament_setting_inprinting = get_flag_bits(flag3, 3); + is_enable_ams_np = get_flag_bits(flag3, 9); } } if (!key_field_only) { @@ -4468,12 +4469,12 @@ int MachineObject::parse_json(std::string payload, bool key_field_only) if (jj["ams"]["version"].is_number()) ams_version = jj["ams"]["version"].get(); } - if (jj["ams"].contains("tray_now")) { - this->_parse_tray_now(jj["ams"]["tray_now"].get()); - } if (jj["ams"].contains("tray_tar")) { m_tray_tar = jj["ams"]["tray_tar"].get(); } + if (jj["ams"].contains("tray_now")) { + _parse_tray_now(jj["ams"]["tray_now"].get()); + } if (jj["ams"].contains("ams_rfid_status")) ams_rfid_status = jj["ams"]["ams_rfid_status"].get(); diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 095a27112..c309b61a8 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -1310,6 +1310,7 @@ public: /*for more extruder*/ bool is_enable_np{ false }; + bool is_enable_ams_np{ false }; ExtderData m_extder_data; NozzleData m_nozzle_data; diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index aaa3bc9b6..980c1dd60 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -3283,7 +3283,7 @@ void StatusPanel::update_ams(MachineObject *obj) } else { m_ams_control->SetAmsStep(ext.snow.ams_id, ext.snow.slot_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); } - m_ams_control->SetExtruder(ext.ext_has_filament, ext.snow.ams_id, ext.snow.slot_id); + m_ams_control->SetExtruder(ext.ext_has_filament, MAIN_NOZZLE_ID, ext.snow.ams_id, ext.snow.slot_id); } /*left*/ @@ -3298,7 +3298,7 @@ void StatusPanel::update_ams(MachineObject *obj) } else { m_ams_control->SetAmsStep(ext.snow.ams_id, ext.snow.slot_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); } - m_ams_control->SetExtruder(ext.ext_has_filament, ext.snow.ams_id, ext.snow.slot_id); + m_ams_control->SetExtruder(ext.ext_has_filament, DEPUTY_NOZZLE_ID, ext.snow.ams_id, ext.snow.slot_id); } //} @@ -4192,9 +4192,10 @@ void StatusPanel::on_ams_load_curr() ; } - if (obj->is_enable_np) { + if (obj->is_enable_np || obj->is_enable_ams_np) { try { - if (!curr_ams_id.empty() && !curr_can_id.empty()) { obj->command_ams_change_filament(true, curr_ams_id, "0", old_temp, new_temp); + if (!curr_ams_id.empty() && !curr_can_id.empty()) { + obj->command_ams_change_filament(true, curr_ams_id, "0", old_temp, new_temp); } } catch (...) {} } else { @@ -4257,6 +4258,8 @@ void StatusPanel::on_ams_load_vams(wxCommandEvent& event) { void StatusPanel::on_ams_switch(SimpleEvent &event) { if(obj){ + + /*right*/ if (obj->m_extder_data.extders.size() > 0) { auto ext = obj->m_extder_data.extders[MAIN_NOZZLE_ID]; if (ext.ext_has_filament) { @@ -4268,7 +4271,7 @@ void StatusPanel::on_ams_switch(SimpleEvent &event) } else { m_ams_control->SetAmsStep(ext.snow.ams_id, ext.snow.slot_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); } - m_ams_control->SetExtruder(ext.ext_has_filament, ext.snow.ams_id, ext.snow.slot_id); + m_ams_control->SetExtruder(ext.ext_has_filament, MAIN_NOZZLE_ID, ext.snow.ams_id, ext.snow.slot_id); } /*left*/ @@ -4283,7 +4286,7 @@ void StatusPanel::on_ams_switch(SimpleEvent &event) } else { m_ams_control->SetAmsStep(ext.snow.ams_id, ext.snow.slot_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); } - m_ams_control->SetExtruder(ext.ext_has_filament, ext.snow.ams_id, ext.snow.slot_id); + m_ams_control->SetExtruder(ext.ext_has_filament, DEPUTY_NOZZLE_ID, ext.snow.ams_id, ext.snow.slot_id); } } } @@ -4550,20 +4553,13 @@ void StatusPanel::on_ams_refresh_rfid(wxCommandEvent &event) auto has_filament_at_extruder = false; auto use_new_command = false; - if (obj->m_extder_data.total_extder_count <= 1 && !obj->is_enable_np) { - has_filament_at_extruder = obj->is_filament_at_extruder(); - - /*for xp support n3s/n3f*/ - if (!ams_it->second->info.empty()) { - use_new_command = true; - } - - } else { + if (obj->is_enable_np || obj->is_enable_ams_np) { use_new_command = true; - if (ams_it->second->nozzle < obj->m_extder_data.extders.size()) { has_filament_at_extruder = obj->m_extder_data.extders[ams_it->second->nozzle].ext_has_filament; } + } else { + has_filament_at_extruder = obj->is_filament_at_extruder(); } if (has_filament_at_extruder) { diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index e29939569..0048076c3 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -1465,19 +1465,17 @@ bool AMSControl::Enable(bool enable) return wxWindow::Enable(enable); } -void AMSControl::SetExtruder(bool on_off, std::string ams_id, std::string slot_id) +void AMSControl::SetExtruder(bool on_off, int nozzle_id, std::string ams_id, std::string slot_id) { AmsItem *item = nullptr; if (m_ams_item_list.find(ams_id) != m_ams_item_list.end()) { item = m_ams_item_list[ams_id]; } - if (!item) { - return; - } - if (!on_off) { - m_extruder->OnAmsLoading(false, item->get_nozzle_id()); - } else { + if (on_off && item) { auto col = item->GetTagColr(slot_id); - m_extruder->OnAmsLoading(true, item->get_nozzle_id(), col); + m_extruder->OnAmsLoading(true, nozzle_id, col); + } + else { + m_extruder->OnAmsLoading(false, nozzle_id); } } diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp index 86634bf5b..da9ef73ed 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.hpp +++ b/src/slic3r/GUI/Widgets/AMSControl.hpp @@ -170,7 +170,7 @@ public: void AddAms(std::vector single_info, const std::string &series_name, const std::string &printer_type, AMSPanelPos pos = AMSPanelPos::LEFT_PANEL); void AddAmsPreview(std::vectorsingle_info, AMSPanelPos pos); //void AddExtraAms(std::vectorsingle_info); - void SetExtruder(bool on_off, std::string ams_id, std::string slot_id); + void SetExtruder(bool on_off, int nozzle_id, std::string ams_id, std::string slot_id); void SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadType type, AMSPassRoadSTEP step); void SwitchAms(std::string ams_id);