diff --git a/resources/images/single_nozzle.svg b/resources/images/single_nozzle_n.svg
similarity index 100%
rename from resources/images/single_nozzle.svg
rename to resources/images/single_nozzle_n.svg
diff --git a/resources/images/single_nozzle_xp.svg b/resources/images/single_nozzle_xp.svg
new file mode 100644
index 000000000..b7495ecd8
--- /dev/null
+++ b/resources/images/single_nozzle_xp.svg
@@ -0,0 +1,52 @@
+
diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp
index 2ea006700..0a122d9f8 100644
--- a/src/slic3r/GUI/DeviceManager.cpp
+++ b/src/slic3r/GUI/DeviceManager.cpp
@@ -615,10 +615,17 @@ bool MachineObject::get_printer_is_enclosed() const
return DeviceManager::get_printer_is_enclosed(printer_type);
}
-bool MachineObject::is_series_n() const { return DeviceManager::get_printer_series(printer_type) == "series_n"; };
-bool MachineObject::is_series_p() const { return DeviceManager::get_printer_series(printer_type) == "series_p1p"; };
-bool MachineObject::is_series_x() const { return DeviceManager::get_printer_series(printer_type) == "series_x1"; };
-bool MachineObject::is_series_o() const { return DeviceManager::get_printer_series(printer_type) == "series_o"; };
+bool MachineObject::is_series_n(const std::string& series_str) { return series_str == "series_n"; }
+bool MachineObject::is_series_p(const std::string& series_str) { return series_str == "series_p1p";}
+bool MachineObject::is_series_x(const std::string& series_str) { return series_str == "series_x1"; }
+bool MachineObject::is_series_o(const std::string& series_str) { return series_str == "series_o"; }
+
+bool MachineObject::is_series_n() const { return is_series_n(DeviceManager::get_printer_series(printer_type)); }
+bool MachineObject::is_series_p() const { return is_series_p(DeviceManager::get_printer_series(printer_type)); }
+bool MachineObject::is_series_x() const { return is_series_x(DeviceManager::get_printer_series(printer_type)); }
+bool MachineObject::is_series_o() const { return is_series_o(DeviceManager::get_printer_series(printer_type)); }
+
+std::string MachineObject::get_printer_series_str() const{ return DeviceManager::get_printer_series(printer_type);};
void MachineObject::reload_printer_settings()
{
diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp
index 56104e9d2..c5a23814d 100644
--- a/src/slic3r/GUI/DeviceManager.hpp
+++ b/src/slic3r/GUI/DeviceManager.hpp
@@ -629,11 +629,18 @@ public:
bool get_printer_is_enclosed() const;
// check printer device series
+ static bool is_series_n(const std::string& series_str);
+ static bool is_series_p(const std::string& series_str);
+ static bool is_series_x(const std::string& series_str);
+ static bool is_series_o(const std::string& series_str);
+
bool is_series_n() const;
bool is_series_p() const;
bool is_series_x() const;
bool is_series_o() const;
+ std::string get_printer_series_str() const;
+
void reload_printer_settings();
std::string printer_thumbnail_img;
diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp
index 055655423..65b1ab624 100644
--- a/src/slic3r/GUI/StatusPanel.cpp
+++ b/src/slic3r/GUI/StatusPanel.cpp
@@ -3227,7 +3227,7 @@ void StatusPanel::update_ams(MachineObject *obj)
ExtderData data = obj->m_extder_data;
// must select a current can
- m_ams_control->UpdateAms(ams_info, ext_info, data, dev_id, false);
+ m_ams_control->UpdateAms(obj->get_printer_series_str(), 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 27b7cf160..e494b68af 100644
--- a/src/slic3r/GUI/Widgets/AMSControl.cpp
+++ b/src/slic3r/GUI/Widgets/AMSControl.cpp
@@ -3310,7 +3310,7 @@ std::vector AMSControl::GenerateSimulateData() {
}
-void AMSControl::UpdateAms(std::vector ams_info, std::vectorext_info, ExtderData data, std::string dev_id, bool is_reset, bool test)
+void AMSControl::UpdateAms(const std::string& series_name, std::vector ams_info, std::vectorext_info, ExtderData data, std::string dev_id, bool is_reset, bool test)
{
if (!test){
// update item
@@ -3479,6 +3479,9 @@ void AMSControl::UpdateAms(std::vector ams_info, std::vectorex
}
}
}
+
+ /*update ams extruder*/
+ m_extruder->updateNozzleNum(m_extder_data.total_extder_count, series_name);
}
void AMSControl::AddAmsPreview(AMSinfo info, AMSModel type)
diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp
index f63fd4899..9fcb55e6c 100644
--- a/src/slic3r/GUI/Widgets/AMSControl.hpp
+++ b/src/slic3r/GUI/Widgets/AMSControl.hpp
@@ -152,7 +152,7 @@ public:
void CreateAmsDoubleNozzle();
void CreateAmsSingleNozzle();
void ClearAms();
- void UpdateAms(std::vector ams_info, std::vector ext_info, ExtderData data, std::string dev_id, bool is_reset = true, bool test = false);
+ void UpdateAms(const std::string& series_name, std::vector ams_info, std::vector ext_info, ExtderData data, std::string dev_id, bool is_reset = true, bool test = false);
std::vector GenerateSimulateData();
void AddAms(AMSinfo info, AMSPanelPos pos = AMSPanelPos::LEFT_PANEL);
diff --git a/src/slic3r/GUI/Widgets/AMSItem.cpp b/src/slic3r/GUI/Widgets/AMSItem.cpp
index 7127b9b0a..1ab66c5dd 100644
--- a/src/slic3r/GUI/Widgets/AMSItem.cpp
+++ b/src/slic3r/GUI/Widgets/AMSItem.cpp
@@ -766,9 +766,10 @@ void AMSextruder::OnAmsLoading(bool load, int nozzle_id, wxColour col /*= AMS_CO
}
}
-void AMSextruder::updateNozzleNum(int nozzle_num)
+void AMSextruder::updateNozzleNum(int nozzle_num, const string& series_name)
{
- if (m_nozzle_num == nozzle_num) return;
+ if (m_nozzle_num == nozzle_num && m_series_name == series_name) return;
+ m_series_name = series_name;
m_nozzle_num = nozzle_num;
this->DestroyChildren();
@@ -786,7 +787,19 @@ void AMSextruder::updateNozzleNum(int nozzle_num)
}
else
{
- m_left_extruder = new AMSextruderImage(this, wxID_ANY, "single_nozzle", AMS_EXTRUDER_SINGLE_NOZZLE_BITMAP_SIZE);
+ if (MachineObject::is_series_n(m_series_name))
+ {
+ m_left_extruder = new AMSextruderImage(this, wxID_ANY, "single_nozzle_n", AMS_EXTRUDER_SINGLE_NOZZLE_BITMAP_SIZE);
+ }
+ else if(MachineObject::is_series_x(m_series_name) || MachineObject::is_series_p(m_series_name))
+ {
+ m_left_extruder = new AMSextruderImage(this, wxID_ANY, "single_nozzle_xp", AMS_EXTRUDER_SINGLE_NOZZLE_BITMAP_SIZE);
+ }
+ else
+ {
+ m_left_extruder = new AMSextruderImage(this, wxID_ANY, "single_nozzle_xp", AMS_EXTRUDER_SINGLE_NOZZLE_BITMAP_SIZE);
+ }
+
m_left_extruder->setShowState(true);
m_right_extruder->setShowState(false);
m_bitmap_sizer->Add(m_left_extruder, 0, wxALIGN_LEFT | wxALIGN_TOP, 0);
@@ -794,6 +807,7 @@ void AMSextruder::updateNozzleNum(int nozzle_num)
}
SetSizer(m_bitmap_sizer);
+ Layout();
Refresh();
}
diff --git a/src/slic3r/GUI/Widgets/AMSItem.hpp b/src/slic3r/GUI/Widgets/AMSItem.hpp
index dfdd6c52d..f5b99015a 100644
--- a/src/slic3r/GUI/Widgets/AMSItem.hpp
+++ b/src/slic3r/GUI/Widgets/AMSItem.hpp
@@ -398,7 +398,9 @@ private:
class AMSextruder : public wxWindow
{
private:
- int m_nozzle_num = -1;
+ int m_nozzle_num = -1;
+ string m_series_name;
+
public:
void TurnOn(wxColour col);
void TurnOff();
@@ -407,7 +409,7 @@ public:
void msw_rescale();
void has_ams(bool hams) {m_has_vams = hams; Refresh();};
void no_ams_mode(bool mode) {m_none_ams_mode = mode; Refresh();};
- void updateNozzleNum(int nozzle_num);
+ void updateNozzleNum(int nozzle_num, const std::string& series_name = string());
bool m_none_ams_mode{true};
bool m_has_vams{false};