diff --git a/resources/images/ext_image_single_nozzle.svg b/resources/images/ext_image_single_nozzle.svg
new file mode 100644
index 000000000..5cad887f9
--- /dev/null
+++ b/resources/images/ext_image_single_nozzle.svg
@@ -0,0 +1,5 @@
+
diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp
index 228421eb7..1d2a3e65e 100644
--- a/src/slic3r/GUI/StatusPanel.cpp
+++ b/src/slic3r/GUI/StatusPanel.cpp
@@ -2646,7 +2646,7 @@ void StatusPanel::update_ams(MachineObject *obj)
ext_info.push_back(info);
}
std::string dev_id = obj->dev_id;
- int nozzle_num = obj->m_nozzle_data.total_nozzle_count;
+ NozzleData data = obj->m_nozzle_data;
//if (obj->ams_exist_bits != last_ams_exist_bits || obj->tray_exist_bits != last_tray_exist_bits || obj->tray_is_bbl_bits != last_tray_is_bbl_bits ||
// obj->tray_read_done_bits != last_read_done_bits || obj->ams_version != last_ams_version) {
// m_ams_control->UpdateAms(ams_info, false);
@@ -2661,7 +2661,7 @@ void StatusPanel::update_ams(MachineObject *obj)
//}
// must select a current can
- m_ams_control->UpdateAms(ams_info, ext_info, nozzle_num, dev_id, false);
+ m_ams_control->UpdateAms(ams_info, ext_info, data, dev_id, false);
last_tray_exist_bits = obj->tray_exist_bits;
last_ams_exist_bits = obj->ams_exist_bits;
diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp
index 0a738fec0..32ffd27fd 100644
--- a/src/slic3r/GUI/Widgets/AMSControl.cpp
+++ b/src/slic3r/GUI/Widgets/AMSControl.cpp
@@ -2413,6 +2413,8 @@ Description:AMSControl
#define AMS_CANS_SIZE wxSize(FromDIP(284), -1)
#define AMS_CANS_WINDOW_SIZE wxSize(FromDIP(264), -1)
#define SINGLE_SLOT_AMS_PANEL_SIZE wxSize(FromDIP(264), FromDIP(160))
+
+
AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size)
: wxSimplebook(parent, wxID_ANY, pos, size)
, m_Humidity_tip_popup(AmsHumidityTipPopup(this))
@@ -2424,6 +2426,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons
parse_object(obj);
}
+ m_nozzle_data.total_nozzle_count = 1;
SetBackgroundColour(*wxWHITE);
// normal mode
Freeze();
@@ -2592,7 +2595,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons
/*option mid*/
- m_extruder = new AMSextruder(m_amswin, wxID_ANY, m_nozzle_num, wxDefaultPosition, AMS_EXTRUDER_SIZE);
+ m_extruder = new AMSextruder(m_amswin, wxID_ANY, m_nozzle_data.total_nozzle_count, wxDefaultPosition, AMS_EXTRUDER_SIZE);
m_sizer_option_mid->Add( m_extruder, 0, wxALIGN_CENTER, 0 );
@@ -2975,7 +2978,7 @@ std::string AMSControl::GetCurrentCan(std::string amsid)
}
bool AMSControl::IsAmsInRightPanel(std::string ams_id) {
- if (m_nozzle_num == 2){
+ if (m_nozzle_data.total_nozzle_count == 2){
if (m_ams_item_list.find(ams_id) != m_ams_item_list.end() && m_ams_item_list[ams_id]->m_info.nozzle_id == MAIN_NOZZLE_ID){
return true;
}
@@ -3426,10 +3429,10 @@ void AMSControl::CreateAmsDoubleNozzle()
auto right_init_mode = findFirstMode(AMSPanelPos::RIGHT_PANEL);
- m_down_road->UpdateLeft(2, left_init_mode);
- m_down_road->UpdateRight(2, right_init_mode);
+ m_down_road->UpdateLeft(m_nozzle_data.total_nozzle_count, left_init_mode);
+ m_down_road->UpdateRight(m_nozzle_data.total_nozzle_count, right_init_mode);
- m_extruder->updateNozzleNum(2);
+ m_extruder->updateNozzleNum(m_nozzle_data.total_nozzle_count);
m_current_show_ams_left = m_item_ids[DEPUTY_NOZZLE_ID].size() > 0 ? m_item_ids[DEPUTY_NOZZLE_ID][0] : "";
m_current_show_ams_right = m_item_ids[MAIN_NOZZLE_ID].size() > 0 ? m_item_ids[MAIN_NOZZLE_ID][0] : "";
@@ -3460,7 +3463,7 @@ void AMSControl::CreateAmsSingleNozzle()
}
else if (ams_info->cans.size() == 1) {
single_info.push_back(*ams_info);
- if (single_info.size() == 2) {
+ if (single_info.size() == MAX_AMS_NUM_IN_PANEL) {
m_item_ids[DEPUTY_NOZZLE_ID].push_back(single_info[0].ams_id);
m_item_ids[DEPUTY_NOZZLE_ID].push_back(single_info[1].ams_id);
m_item_nums[DEPUTY_NOZZLE_ID]++;
@@ -3723,12 +3726,12 @@ std::vector AMSControl::GenerateSimulateData() {
}
-void AMSControl::UpdateAms(std::vector ams_info, std::vectorext_info, int nozzle_num, std::string dev_id, bool is_reset, bool test)
+void AMSControl::UpdateAms(std::vector ams_info, std::vectorext_info, NozzleData data, std::string dev_id, bool is_reset, bool test)
{
if (!test){
// update item
bool fresh = false;
- if (m_ams_info.size() == ams_info.size() && m_nozzle_num == nozzle_num && m_dev_id == dev_id){
+ if (m_ams_info.size() == ams_info.size() && m_nozzle_data.total_nozzle_count == data.total_nozzle_count && m_dev_id == dev_id){
for (int i = 0; i < m_ams_info.size(); i++){
if (m_ams_info[i].ams_id != ams_info[i].ams_id){
fresh = true;
@@ -3742,11 +3745,11 @@ void AMSControl::UpdateAms(std::vector ams_info, std::vectorex
m_ams_info = ams_info;
m_ext_info.clear();
m_ext_info = ext_info;
- m_nozzle_num = nozzle_num;
+ m_nozzle_data = data;
m_dev_id = dev_id;
if (fresh){
ClearAms();
- if (m_nozzle_num >= 2){
+ if (m_nozzle_data.total_nozzle_count >= 2){
CreateAmsDoubleNozzle();
}else{
CreateAmsSingleNozzle();
@@ -3802,28 +3805,18 @@ void AMSControl::UpdateAms(std::vector ams_info, std::vectorex
else
{
static bool first_time = true;
+ bool fresh = false;
static std::vectorams_info;
int nozzle_num = 2;
if (first_time){
ams_info = GenerateSimulateData();
+ fresh = true;
first_time = false;
}
Freeze();
// update item
- bool fresh = false;
- if (m_ams_info.size() == ams_info.size() && m_nozzle_num == nozzle_num){
- for (int i = 0; i < m_ams_info.size(); i++)
- {
- if (m_ams_info[i].ams_id != ams_info[i].ams_id){
- fresh = true;
- }
- }
- }
- else{
- fresh = true;
- }
m_ams_info.clear();
m_ams_info = ams_info;
m_ext_info.clear();
@@ -3833,10 +3826,10 @@ void AMSControl::UpdateAms(std::vector ams_info, std::vectorex
m_ext_info[0].nozzle_id = MAIN_NOZZLE_ID;
m_ext_info[1].ams_id = std::to_string(VIRTUAL_TRAY_DEPUTY_ID);
m_ext_info[1].nozzle_id = DEPUTY_NOZZLE_ID;
- m_nozzle_num = nozzle_num;
+ m_nozzle_data = data;
if (fresh){
ClearAms();
- if (m_nozzle_num >= 2) {
+ if (m_nozzle_data.total_nozzle_count >= 2) {
CreateAmsDoubleNozzle();
}
else {
@@ -3917,7 +3910,7 @@ void AMSControl::createAms(wxSimplebook* parent, int& idx, AMSinfo info, AMSPane
AMSRoadShowMode AMSControl::findFirstMode(AMSPanelPos pos) {
auto init_mode = AMSRoadShowMode::AMS_ROAD_MODE_NONE;
- std::string ams_id = "-1";
+ std::string ams_id = "";
if (pos == AMSPanelPos::LEFT_PANEL && m_item_ids[DEPUTY_NOZZLE_ID].size() > 0){
ams_id = m_item_ids[DEPUTY_NOZZLE_ID][0];
}
@@ -3930,6 +3923,7 @@ AMSRoadShowMode AMSControl::findFirstMode(AMSPanelPos pos) {
if (item->second->m_info.cans.size() == GENERIC_AMS_SLOT_NUM){
if (item->second->m_info.ams_type == AMSModel::AMS_LITE) return AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE;
+ if (item->second->m_info.ams_type == AMSModel::EXT_AMS && item->second->m_info.ext_type == AMSModelOriginType::LITE_EXT) return AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE;
return AMSRoadShowMode::AMS_ROAD_MODE_FOUR;
}
else{
@@ -3938,6 +3932,7 @@ AMSRoadShowMode AMSControl::findFirstMode(AMSPanelPos pos) {
return AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE;
}
}
+ if (item->second->m_info.ams_type == AMSModel::EXT_AMS && item->second->m_info.ext_type == AMSModelOriginType::LITE_EXT) return AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE;
return AMSRoadShowMode::AMS_ROAD_MODE_SINGLE;
}
}
@@ -3953,7 +3948,7 @@ void AMSControl::createAmsPanel(wxSimplebook* parent, int& idx, std::vectorAdd(ams1, 0, wxLEFT, FromDIP(4));
@@ -3968,12 +3963,17 @@ void AMSControl::createAmsPanel(wxSimplebook* parent, int& idx, std::vectorm_ext_image) {
ams1->m_ext_image->setShowState(false);
}
- if (ams1->m_info.ams_type == AMSModel::EXT_AMS)
- {
- auto ext_image = new AMSExtImage(book_panel, true, pos);
- book_sizer->Add(ams1, 0, wxLEFT, FromDIP(30));
- book_sizer->Add(ext_image, 0, wxEXPAND | wxLEFT, FromDIP(30));
- m_ext_image_list[infos[0].ams_id] = ext_image;
+ if (ams1->m_info.ams_type == AMSModel::EXT_AMS){
+ if (ams1->m_info.ext_type == LITE_EXT){
+ //book_sizer->Add(ams1, 0, wxALIGN_CENTER_HORIZONTAL, 0);
+ book_sizer->Add(ams1, 0, wxLEFT, (book_panel->GetSize().x - ams1->GetSize().x) / 2);
+ }
+ else{
+ auto ext_image = new AMSExtImage(book_panel, pos, &m_nozzle_data);
+ book_sizer->Add(ams1, 0, wxLEFT, FromDIP(30));
+ book_sizer->Add(ext_image, 0, wxEXPAND | wxLEFT, FromDIP(30));
+ m_ext_image_list[infos[0].ams_id] = ext_image;
+ }
}
}
@@ -3996,7 +3996,7 @@ void AMSControl::createAmsPanel(wxSimplebook* parent, int& idx, std::vector 1){
+ if (m_nozzle_data.total_nozzle_count > 1){
if (info.nozzle_id == MAIN_NOZZLE_ID){
createAms(m_simplebook_ams_right, m_right_page_index, info, AMSPanelPos::RIGHT_PANEL);
}
@@ -4004,7 +4004,7 @@ void AMSControl::AddAms(AMSinfo info, AMSPanelPos pos)
createAms(m_simplebook_ams_left, m_left_page_index, info, AMSPanelPos::LEFT_PANEL);
}
}
- else if (m_nozzle_num == 1){
+ else if (m_nozzle_data.total_nozzle_count == 1){
createAms(m_simplebook_ams_left, m_left_page_index, info, AMSPanelPos::LEFT_PANEL);
}
m_simplebook_ams_left->Layout();
@@ -4036,7 +4036,7 @@ void AMSControl::AddAms(std::vectorsingle_info, AMSPanelPos pos) {
if (single_info.size() <= 0){
return;
}
- if (m_nozzle_num == 2) {
+ if (m_nozzle_data.total_nozzle_count == 2) {
if (single_info[0].nozzle_id == MAIN_NOZZLE_ID) {
createAmsPanel(m_simplebook_ams_right, m_right_page_index, single_info, AMSPanelPos::RIGHT_PANEL);
}
@@ -4044,7 +4044,7 @@ void AMSControl::AddAms(std::vectorsingle_info, AMSPanelPos pos) {
createAmsPanel(m_simplebook_ams_left, m_left_page_index, single_info, AMSPanelPos::LEFT_PANEL);
}
}
- else if (m_nozzle_num == 1) {
+ else if (m_nozzle_data.total_nozzle_count == 1) {
if (pos == AMSPanelPos::RIGHT_PANEL) {
createAmsPanel(m_simplebook_ams_right, m_right_page_index, single_info, AMSPanelPos::RIGHT_PANEL);
}
@@ -4193,10 +4193,12 @@ void AMSControl::SwitchAms(std::string ams_id)
pos == AMSPanelPos::LEFT_PANEL ? m_simplebook_ams_left->SetSelection(item->m_selection) : m_simplebook_ams_right->SetSelection(item->m_selection);
if (item->m_info.cans.size() == GENERIC_AMS_SLOT_NUM) {
if (item->m_info.ams_type == AMSModel::AMS_LITE) {
- pos == AMSPanelPos::LEFT_PANEL ? m_down_road->UpdateLeft(m_nozzle_num, AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE) : m_down_road->UpdateRight(m_nozzle_num, AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE);
+ pos == AMSPanelPos::LEFT_PANEL ? m_down_road->UpdateLeft(m_nozzle_data.total_nozzle_count, AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE)
+ : m_down_road->UpdateRight(m_nozzle_data.total_nozzle_count, AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE);
}
else {
- pos == AMSPanelPos::LEFT_PANEL ? m_down_road->UpdateLeft(m_nozzle_num, AMSRoadShowMode::AMS_ROAD_MODE_FOUR) : m_down_road->UpdateRight(m_nozzle_num, AMSRoadShowMode::AMS_ROAD_MODE_FOUR);
+ pos == AMSPanelPos::LEFT_PANEL ? m_down_road->UpdateLeft(m_nozzle_data.total_nozzle_count, AMSRoadShowMode::AMS_ROAD_MODE_FOUR)
+ : m_down_road->UpdateRight(m_nozzle_data.total_nozzle_count, AMSRoadShowMode::AMS_ROAD_MODE_FOUR);
}
}
else {
@@ -4207,7 +4209,8 @@ void AMSControl::SwitchAms(std::string ams_id)
break;
}
}
- pos == AMSPanelPos::LEFT_PANEL ? m_down_road->UpdateLeft(m_nozzle_num, mode) : m_down_road->UpdateRight(m_nozzle_num, mode);
+ pos == AMSPanelPos::LEFT_PANEL ? m_down_road->UpdateLeft(m_nozzle_data.total_nozzle_count, mode)
+ : m_down_road->UpdateRight(m_nozzle_data.total_nozzle_count, mode);
if (pos == AMSPanelPos::LEFT_PANEL){
m_down_road->UpdatePassRoad(item->m_info.current_can_id, AMSPanelPos::LEFT_PANEL, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
}
@@ -4511,6 +4514,7 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy
int length = -1;
+ //Set path length in different case
if (ams->m_info.cans.size() == GENERIC_AMS_SLOT_NUM){
//length = left ? 129 : 145;
length = left ? 129 : 145;
@@ -4527,11 +4531,14 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy
break;
}
}
- model = AMSModel::N3S_AMS;
+ model = ams->m_info.ams_type;
}
if (model == AMSModel::AMS_LITE){
length = left ? 145 : 45;
}
+ if (model == EXT_AMS && ams->m_info.ext_type == AMSModelOriginType::LITE_EXT){
+ length = 145;
+ }
for (auto i = 0; i < m_ams_info.size(); i++) {
if (m_ams_info[i].ams_id == ams_id) {
@@ -4561,141 +4568,51 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy
}
AMSPanelPos pos = left ? AMSPanelPos::LEFT_PANEL : AMSPanelPos::RIGHT_PANEL;
- if (model == AMSModel::GENERIC_AMS || model == AMSModel::N3F_AMS || model == AMSModel::AMS_LITE) {
- if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_NONE) {
- //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
- ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
- if (ams_id_left == ams_id || ams_id_right == ams_id){
- m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
- m_extruder->OnAmsLoading(false, ams->m_info.nozzle_id);
- }
- }
- if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1) {
- ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1);
- if (ams_id_left == ams_id || ams_id_right == ams_id){
- m_down_road->UpdatePassRoad(canid, pos, length, AMSPassRoadSTEP::AMS_ROAD_STEP_1);
- m_extruder->OnAmsLoading(false, ams->m_info.nozzle_id);
- }
- else
- {
- m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_1);
- }
- }
-
- if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2) {
- ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2);
- if (ams_id_left == ams_id || ams_id_right == ams_id) {
- m_down_road->UpdatePassRoad(canid, pos, length, AMSPassRoadSTEP::AMS_ROAD_STEP_2);
- m_extruder->OnAmsLoading(true, ams->m_info.nozzle_id, ams->GetTagColr(canid));
- }
- else
- {
- m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_2);
- }
- }
- if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3) {
- ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_3);
- if (ams_id_left == ams_id || ams_id_right == ams_id)
- {
- m_down_road->UpdatePassRoad(canid, pos, length, AMSPassRoadSTEP::AMS_ROAD_STEP_3);
- m_extruder->OnAmsLoading(true, ams->m_info.nozzle_id, ams->GetTagColr(canid));
- }
- else
- {
- m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_3);
- }
+ if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_NONE) {
+ //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
+ ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
+ if (ams_id_left == ams_id || ams_id_right == ams_id) {
+ m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
+ m_extruder->OnAmsLoading(false, ams->m_info.nozzle_id);
}
}
- else if(model == AMSModel::EXT_AMS || model == AMSModel::N3S_AMS) {
- if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_NONE) {
- //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
- ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
- if (ams_id_left == ams_id || ams_id_right == ams_id) {
- m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
- m_extruder->OnAmsLoading(false);
- }
- else
- {
- m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
- }
- }
- if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1) {
- ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1);
- if (ams_id_left == ams_id || ams_id_right == ams_id) {
- m_down_road->UpdatePassRoad(canid, pos, length, AMSPassRoadSTEP::AMS_ROAD_STEP_1);
- m_extruder->OnAmsLoading(false);
- }
- else
- {
- m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_1);
- }
+ if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1) {
+ ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1);
+ if (ams_id_left == ams_id || ams_id_right == ams_id) {
+ m_down_road->UpdatePassRoad(canid, pos, length, AMSPassRoadSTEP::AMS_ROAD_STEP_1);
+ m_extruder->OnAmsLoading(false, ams->m_info.nozzle_id);
}
+ else
+ {
+ m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_1);
+ }
+ }
- if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2) {
+ if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2) {
+ ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2);
+ if (ams_id_left == ams_id || ams_id_right == ams_id) {
m_down_road->UpdatePassRoad(canid, pos, length, AMSPassRoadSTEP::AMS_ROAD_STEP_2);
- if (ams_id_left == ams_id || ams_id_right == ams_id) {
- ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2);
- m_extruder->OnAmsLoading(true, ams->m_info.nozzle_id, ams->GetTagColr(canid));
- }
- else
- {
- m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_2);
- }
+ m_extruder->OnAmsLoading(true, ams->m_info.nozzle_id, ams->GetTagColr(canid));
}
-
- if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3) {
- ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_3);
- if (ams_id_left == ams_id || ams_id_right == ams_id) {
- m_down_road->UpdatePassRoad(canid, pos, length, AMSPassRoadSTEP::AMS_ROAD_STEP_3);
- m_extruder->OnAmsLoading(true, ams->m_info.nozzle_id, ams->GetTagColr(canid));
- }
- else
- {
- m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_3);
- }
+ else
+ {
+ m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_2);
+ }
+ }
+ if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3) {
+ ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_3);
+ if (ams_id_left == ams_id || ams_id_right == ams_id)
+ {
+ m_down_road->UpdatePassRoad(canid, pos, length, AMSPassRoadSTEP::AMS_ROAD_STEP_3);
+ m_extruder->OnAmsLoading(true, ams->m_info.nozzle_id, ams->GetTagColr(canid));
+ }
+ else
+ {
+ m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_3);
}
}
-
- //if (m_ams_model == AMSModel::GENERIC_AMS) {
- // if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_NONE) {
- // //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
- // m_down_road->UpdatePassRoad(canid, true, -1, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
- // m_down_road->UpdatePassRoad(canid, false, -1, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
- // m_extruder->OnAmsLoading(false);
- // }
-
- // if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1) {
- // //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1);
- // m_extruder->OnAmsLoading(false);
- // }
-
- // if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2) {
- // //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1);
- // //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2);
- // if (m_current_show_ams == ams_id) {
- // m_extruder->OnAmsLoading(true, cans->GetTagColr(canid));
- // }
- // }
-
- // if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3) {
- // //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1);
- // //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2);
- // //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_3);
- // m_extruder->OnAmsLoading(true, cans->GetTagColr(canid));
- // }
- //}
- //else if (m_ams_model == AMSModel::EXTRA_AMS) {
- // //cans->SetAmsStepExtra(canid, type, step);
- // if (step != AMSPassRoadSTEP::AMS_ROAD_STEP_NONE) {
- // m_extruder->OnAmsLoading(true, cans->GetTagColr(canid));
- // }
- // else {
- // m_extruder->OnAmsLoading(false);
- // }
- //}
-
}
void AMSControl::on_filament_load(wxCommandEvent &event)
diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp
index ed0128ee3..1ffaebb9c 100644
--- a/src/slic3r/GUI/Widgets/AMSControl.hpp
+++ b/src/slic3r/GUI/Widgets/AMSControl.hpp
@@ -43,7 +43,7 @@ protected:
//std::map m_ams_extra_item_list;
//std::map m_ams_list;
- int m_nozzle_num = 1;
+ NozzleData m_nozzle_data;
std::string m_dev_id;
std::vector> m_item_ids{ {}, {} };
std::vector> pair_id;
@@ -164,7 +164,7 @@ public:
void CreateAmsDoubleNozzle();
void CreateAmsSingleNozzle();
void ClearAms();
- void UpdateAms(std::vector ams_info, std::vector ext_info, int nozzle_num, std::string dev_id, bool is_reset = true, bool test = false);
+ void UpdateAms(std::vector ams_info, std::vector ext_info, NozzleData data, std::string dev_id, bool is_reset = true, bool test = false);
void ReadExtInfo(MachineObject* obj);
std::vector GenerateSimulateData();
diff --git a/src/slic3r/GUI/Widgets/AMSItem.cpp b/src/slic3r/GUI/Widgets/AMSItem.cpp
index 6cb81e3ad..ae700d5fc 100644
--- a/src/slic3r/GUI/Widgets/AMSItem.cpp
+++ b/src/slic3r/GUI/Widgets/AMSItem.cpp
@@ -234,7 +234,7 @@ AMSrefresh::AMSrefresh(wxWindow *parent, int number, Caninfo info, const wxPoint
void AMSrefresh::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size)
{
wxWindow::Create(parent, id, pos, size, wxBORDER_NONE);
- SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_BLOCK_BK_COLOUR));
+ SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR));
Bind(wxEVT_TIMER, &AMSrefresh::on_timer, this);
Bind(wxEVT_PAINT, &AMSrefresh::paintEvent, this);
@@ -506,9 +506,9 @@ AMSextruderImage::~AMSextruderImage() {}
Description:AMSExtImage upon ext lib
**************************************************/
-AMSExtImage::AMSExtImage(wxWindow* parent, bool single_flag, AMSPanelPos ext_pos, wxWindowID id, const wxPoint& pos, const wxSize& size)
+AMSExtImage::AMSExtImage(wxWindow* parent, AMSPanelPos ext_pos, NozzleData *data, wxWindowID id, const wxPoint& pos)
{
- if (!single_flag){
+ if (data == nullptr){
wxWindow::Create(parent, id, pos, AMS_HUMIDITY_SIZE);
}
else{
@@ -516,22 +516,12 @@ AMSExtImage::AMSExtImage(wxWindow* parent, bool single_flag, AMSPanelPos ext_pos
}
SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR));
-
- m_single_flag = single_flag;
m_ext_pos = ext_pos;
- /*if (single_flag){
- if (ext_pos == AMSPanelPos::LEFT_PANEL){
- m_ams_ext_left = ScalableBitmap(this, "ext_image_left", 98);
- }
- else{
- m_ams_ext_right = ScalableBitmap(this, "ext_image_right", 98);
- }
- }
- else{
- m_ams_ext = ScalableBitmap(this, "ams_ext_image", 25);
- }*/
+ if (data != nullptr) m_nozzle_data = data;
+
m_ams_ext_left = ScalableBitmap(this, "ext_image_left", 98);
m_ams_ext_right = ScalableBitmap(this, "ext_image_right", 98);
+ m_ams_ext_single_nozzle = ScalableBitmap(this, "ext_image_single_nozzle", 98);
m_ams_ext = ScalableBitmap(this, "ams_ext_image", 25);
Bind(wxEVT_PAINT, &AMSExtImage::paintEvent, this);
@@ -545,6 +535,7 @@ void AMSExtImage::msw_rescale()
//auto image = m_ams_extruder.ConvertToImage();
m_ams_ext_left = ScalableBitmap(this, "ext_image_left", 98);
m_ams_ext_right = ScalableBitmap(this, "ext_image_right", 98);
+ m_ams_ext_single_nozzle = ScalableBitmap(this, "ext_image_single_nozzle", 98);
m_ams_ext = ScalableBitmap(this, "ams_ext_image", 25);
Layout();
Fit();
@@ -583,19 +574,24 @@ void AMSExtImage::doRender(wxDC& dc)
auto size = GetSize();
dc.SetPen(*wxTRANSPARENT_PEN);
//dc.DrawRectangle(0, FromDIP(5), size.x, size.y - FromDIP(5) - FromDIP(2));
- if (m_single_flag) {
- if (m_ext_pos == AMSPanelPos::LEFT_PANEL) {
- dc.DrawBitmap(m_ams_ext_left.bmp(), wxPoint((size.x - m_ams_ext_left.GetBmpSize().x) / 2, (size.y - m_ams_ext_left.GetBmpSize().y) / 2));
- }
- else {
- dc.DrawBitmap(m_ams_ext_right.bmp(), wxPoint((size.x - m_ams_ext_right.GetBmpSize().x) / 2, (size.y - m_ams_ext_right.GetBmpSize().y) / 2));
- }
- }
- else {
+ if (m_nozzle_data == nullptr){
if (m_ext_show) {
dc.DrawBitmap(m_ams_ext.bmp(), wxPoint((size.x - m_ams_ext.GetBmpSize().x) / 2, 0));
}
}
+ else{
+ if (m_nozzle_data->total_nozzle_count < 2) {
+ dc.DrawBitmap(m_ams_ext_single_nozzle.bmp(), wxPoint((size.x - m_ams_ext_right.GetBmpSize().x) / 2, (size.y - m_ams_ext_right.GetBmpSize().y) / 2));
+ }
+ else {
+ if (m_ext_pos == AMSPanelPos::LEFT_PANEL) {
+ dc.DrawBitmap(m_ams_ext_left.bmp(), wxPoint((size.x - m_ams_ext_left.GetBmpSize().x) / 2, (size.y - m_ams_ext_left.GetBmpSize().y) / 2));
+ }
+ else {
+ dc.DrawBitmap(m_ams_ext_right.bmp(), wxPoint((size.x - m_ams_ext_right.GetBmpSize().x) / 2, (size.y - m_ams_ext_right.GetBmpSize().y) / 2));
+ }
+ }
+ }
Layout();
}
@@ -2348,10 +2344,8 @@ void AMSRoadDownPart::doRender(wxDC& dc)
dc.DrawLine(right_nozzle_pos.x + FromDIP(68), 0, right_nozzle_pos.x + FromDIP(68), (size.y / 2));
break;
case AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE:
- dc.DrawLine(right_nozzle_pos.x, 0, right_nozzle_pos.x, size.y / 2);
- if (m_nozzle_num >= 2) xpos = right_nozzle_pos.x;
- dc.DrawLine(xpos, size.y / 2, right_nozzle_pos.x, size.y / 2);
- dc.DrawLine(xpos, size.y / 2, xpos, size.y);
+ dc.DrawLine(left_nozzle_pos.x, (size.y / 2), left_nozzle_pos.x + FromDIP(145), (size.y / 2));
+ dc.DrawLine(left_nozzle_pos.x + FromDIP(145), 0, left_nozzle_pos.x + FromDIP(145), (size.y / 2));
break;
default:
break;
@@ -2458,10 +2452,10 @@ AMSPreview::AMSPreview() {}
AMSPreview::AMSPreview(wxWindow* parent, wxWindowID id, AMSinfo amsinfo, AMSModel itemType, const wxPoint& pos, const wxSize& size) : AMSPreview()
{
if (itemType == AMSModel::GENERIC_AMS || itemType == AMSModel::AMS_LITE || itemType == AMSModel::N3F_AMS) {
- create(parent, id, pos, AMS_ITEM_FOUR_SIZE);
+ create(parent, id, pos, AMS_PREV_FOUR_SIZE);
}
else {
- create(parent, id, pos, AMS_ITEM_SINGLE_SIZE);
+ create(parent, id, pos, AMS_PREV_SINGLE_SIZE);
}
m_amsinfo = amsinfo;
m_ams_item_type = itemType;
@@ -2497,7 +2491,7 @@ void AMSPreview::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, con
wxWindow::Create(parent, id, pos, size);
SetMinSize(size);
SetMaxSize(size);
- SetBackgroundColour(StateColor::darkModeColorFor(*wxWHITE));
+ //SetBackgroundColour(StateColor::darkModeColorFor(*wxWHITE));
Refresh();
}
@@ -2566,6 +2560,10 @@ void AMSPreview::doRender(wxDC &dc)
auto left = FromDIP(8);
m_space = FromDIP(9);
auto color = *wxWHITE;
+ dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
+ dc.SetBrush(color);
+ dc.DrawRoundedRectangle(0, 0, size.x, size.y, FromDIP(3));
+
//four slot
if (m_ams_item_type != AMSModel::EXT_AMS && m_ams_item_type != AMSModel::N3S_AMS){
for (std::vector::iterator iter = m_amsinfo.cans.begin(); iter != m_amsinfo.cans.end(); iter++) {
@@ -2613,7 +2611,7 @@ void AMSPreview::doRender(wxDC &dc)
if (iter->material_state == AMSCanType::AMS_CAN_TYPE_EMPTY) {
dc.SetPen(wxPen(wxColor(0, 0, 0)));
dc.DrawRoundedRectangle(rect, 3);
- dc.DrawLine(rect.GetRight() - FromDIP(1), rect.GetTop() + FromDIP(1), rect.GetLeft() + FromDIP(1), rect.GetBottom() - FromDIP(1));
+ //dc.DrawLine(rect.GetRight() - FromDIP(1), rect.GetTop() + FromDIP(1), rect.GetLeft() + FromDIP(1), rect.GetBottom() - FromDIP(1));
}
else {
dc.DrawRoundedRectangle(rect, 2);
@@ -2673,18 +2671,6 @@ void AMSPreview::doRender(wxDC &dc)
auto pot = wxPoint(((size.x - m_single_slot_bitmap.GetBmpSize().x) / 2), ((size.y - m_single_slot_bitmap.GetBmpSize().y) / 2));
dc.DrawBitmap(m_single_slot_bitmap.bmp(), pot);
}
- else {
-
- //auto pot = wxPoint((size.x - m_ext_bitmap.GetBmpSize().x) / 2, (size.y - m_ext_bitmap.GetBmpSize().y) / 2);
- //dc.DrawBitmap(m_ext_bitmap.bmp(), pot);
-
- /*auto tsize = dc.GetMultiLineTextExtent(_L("Ext"));
- dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
- dc.SetFont(Label::Body_8);
- dc.SetTextForeground(AMS_CONTROL_BLACK_COLOUR);
- pot = wxPoint((size.x - tsize.x) / 2 + FromDIP(2), (size.y + FromDIP(12)) / 2 - FromDIP(2));
- dc.DrawText(_L("Ext"), pot);*/
- }
if ((iter.material_colour.Red() >= 238 && iter.material_colour.Green() >= 238 && iter.material_colour.Blue() >= 238) || iter.material_colour.Alpha() == 0) {
dc.SetPen(wxPen(AMS_CONTROL_GRAY500));
dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH));
@@ -2950,7 +2936,7 @@ void AmsItem::create(wxWindow *parent)
}
else{
if (m_ams_model == EXT_AMS){
- m_ext_image = new AMSExtImage(this, false, AMSPanelPos::RIGHT_PANEL);
+ m_ext_image = new AMSExtImage(this, AMSPanelPos::RIGHT_PANEL);
sizer_item->Add(m_ext_image, 0, wxALIGN_CENTER_HORIZONTAL, 0);
}
}
diff --git a/src/slic3r/GUI/Widgets/AMSItem.hpp b/src/slic3r/GUI/Widgets/AMSItem.hpp
index 39c72746a..6c5cbf640 100644
--- a/src/slic3r/GUI/Widgets/AMSItem.hpp
+++ b/src/slic3r/GUI/Widgets/AMSItem.hpp
@@ -143,8 +143,8 @@ enum FilamentStepType {
#define AMS_ITEM_CUBE_SIZE wxSize(FromDIP(8), FromDIP(14))
#define AMS_PREVIEW_SIZE wxSize(FromDIP(82), FromDIP(27))
#define AMS_ITEM_SIZE wxSize(FromDIP(78), FromDIP(184))
-#define AMS_ITEM_FOUR_SIZE wxSize(FromDIP(52), FromDIP(32))
-#define AMS_ITEM_SINGLE_SIZE wxSize(FromDIP(28), FromDIP(32))
+#define AMS_PREV_FOUR_SIZE wxSize(FromDIP(52), FromDIP(32))
+#define AMS_PREV_SINGLE_SIZE wxSize(FromDIP(28), FromDIP(32))
#define AMS_ITEM_HUMIDITY_SIZE wxSize(FromDIP(120), FromDIP(27))
#define AMS_CAN_LIB_SIZE wxSize(FromDIP(52), FromDIP(80))
#define AMS_LITE_CAN_LIB_SIZE wxSize(FromDIP(49), FromDIP(72))
@@ -167,6 +167,7 @@ enum FilamentStepType {
#define MAIN_NOZZLE_ID 0
#define DEPUTY_NOZZLE_ID 1
#define GENERIC_AMS_SLOT_NUM 4
+#define MAX_AMS_NUM_IN_PANEL 2
struct Caninfo
{
@@ -298,7 +299,7 @@ class AMSExtImage : public wxWindow
{
private:
bool m_ext_show = true;
- bool m_single_flag = false;
+ NozzleData* m_nozzle_data = nullptr;
AMSPanelPos m_ext_pos;
public:
void msw_rescale();
@@ -309,8 +310,10 @@ public:
ScalableBitmap m_ams_ext;
ScalableBitmap m_ams_ext_left;
ScalableBitmap m_ams_ext_right;
+ ScalableBitmap m_ams_ext_single_nozzle;
void doRender(wxDC& dc);
- AMSExtImage(wxWindow* parent, bool single_flag = false, AMSPanelPos ext_pos = AMSPanelPos::RIGHT_PANEL, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize);
+ AMSExtImage(wxWindow* parent, AMSPanelPos ext_pos = AMSPanelPos::RIGHT_PANEL, NozzleData *data = nullptr,
+ wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition);
~AMSExtImage();
};