diff --git a/resources/images/ams_drying.svg b/resources/images/ams_drying.svg
new file mode 100644
index 0000000000..e6f9fb9f63
--- /dev/null
+++ b/resources/images/ams_drying.svg
@@ -0,0 +1,10 @@
+
diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp
index bcb5860f07..7a9144a851 100644
--- a/src/slic3r/GUI/StatusPanel.cpp
+++ b/src/slic3r/GUI/StatusPanel.cpp
@@ -2598,7 +2598,7 @@ void StatusPanel::update_ams(MachineObject *obj)
AMSModel ams_mode = AMSModel::GENERIC_AMS;
if (obj) {
- if (obj->get_printer_ams_type() == "f1") { ams_mode = AMSModel::EXTRA_AMS; }
+ if (obj->get_printer_ams_type() == "f1") { ams_mode = AMSModel::AMS_LITE; }
else if(obj->get_printer_ams_type() == "generic") { ams_mode = AMSModel::GENERIC_AMS; }
obj->check_ams_filament_valid();
}
@@ -2618,7 +2618,7 @@ void StatusPanel::update_ams(MachineObject *obj)
}
- m_ams_control->SetAmsModel(AMSModel::NO_AMS, ams_mode);
+ m_ams_control->SetAmsModel(AMSModel::EXT_AMS, ams_mode);
show_ams_group(false);
m_ams_control->show_auto_refill(false);
diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp
index c535249ce2..6fa1f41257 100644
--- a/src/slic3r/GUI/Widgets/AMSControl.cpp
+++ b/src/slic3r/GUI/Widgets/AMSControl.cpp
@@ -641,7 +641,7 @@ void AMSControl::SetActionState(bool button_status[])
void AMSControl::EnterNoneAMSMode()
{
m_vams_lib->m_ams_model = m_ext_model;
- if(m_is_none_ams_mode == AMSModel::NO_AMS) return;
+ if(m_is_none_ams_mode == AMSModel::EXT_AMS) return;
m_panel_top->Hide();
m_simplebook_amsitems->Hide();
m_simplebook_amsitems->SetSelection(0);
@@ -657,7 +657,7 @@ void AMSControl::EnterNoneAMSMode()
m_amswin->Layout();
m_amswin->Fit();
Layout();
- m_is_none_ams_mode = AMSModel::NO_AMS;
+ m_is_none_ams_mode = AMSModel::EXT_AMS;
}
void AMSControl::EnterGenericAMSMode()
@@ -692,13 +692,13 @@ void AMSControl::EnterGenericAMSMode()
void AMSControl::EnterExtraAMSMode()
{
m_vams_lib->m_ams_model = m_ext_model;
- if(m_is_none_ams_mode == AMSModel::EXTRA_AMS) return;
+ if(m_is_none_ams_mode == AMSModel::AMS_LITE) return;
m_panel_top->Hide();
m_simplebook_amsitems->Show();
m_simplebook_amsitems->SetSelection(1);
- m_vams_lib->m_ams_model = AMSModel::EXTRA_AMS;
+ m_vams_lib->m_ams_model = AMSModel::AMS_LITE;
m_ams_tip->SetLabel(wxEmptyString);
m_img_vams_tip->SetBitmap(create_scaled_bitmap("enable_ams_disable", this, 16));
m_img_vams_tip->Disable();
@@ -717,7 +717,7 @@ void AMSControl::EnterExtraAMSMode()
m_amswin->Fit();
Layout();
Refresh(true);
- m_is_none_ams_mode = AMSModel::EXTRA_AMS;
+ m_is_none_ams_mode = AMSModel::AMS_LITE;
}
@@ -836,7 +836,7 @@ void AMSControl::UpdateStepCtrl(bool is_extrusion)
}
- if (m_ams_model == AMSModel::EXTRA_AMS || m_ext_model == AMSModel::EXTRA_AMS) {
+ if (m_ams_model == AMSModel::AMS_LITE || m_ext_model == AMSModel::AMS_LITE) {
m_filament_load_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_HEAT_NOZZLE]);
m_filament_load_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_CHECK_POSITION]);
m_filament_load_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_CUT_FILAMENT]);
@@ -908,11 +908,11 @@ void AMSControl::show_noams_mode()
show_vams(true);
m_sizer_ams_tips->Show(true);
- if (m_ams_model == AMSModel::NO_AMS) {
+ if (m_ams_model == AMSModel::EXT_AMS) {
EnterNoneAMSMode();
} else if(m_ams_model == AMSModel::GENERIC_AMS){
EnterGenericAMSMode();
- } else if (m_ams_model == AMSModel::EXTRA_AMS) {
+ } else if (m_ams_model == AMSModel::AMS_LITE) {
EnterExtraAMSMode();
}
}
@@ -998,7 +998,7 @@ void AMSControl::UpdateAms(std::vector info, bool is_reset)
if (m_ams_model == AMSModel::GENERIC_AMS){
m_ams_cans_list = m_ams_generic_cans_list;
}
- else if (m_ams_model == AMSModel::EXTRA_AMS) {
+ else if (m_ams_model == AMSModel::AMS_LITE) {
m_ams_cans_list = m_ams_extra_cans_list;
}
@@ -1034,7 +1034,7 @@ void AMSControl::UpdateAms(std::vector info, bool is_reset)
if (ifo.ams_id == cans->amsIndex) {
cans->amsCans->m_info = ifo;
cans->amsCans->Update(ifo);
- cans->amsCans->show_sn_value(m_ams_model == AMSModel::EXTRA_AMS?false:true);
+ cans->amsCans->show_sn_value(m_ams_model == AMSModel::AMS_LITE?false:true);
}
}
}
@@ -1045,7 +1045,7 @@ void AMSControl::UpdateAms(std::vector info, bool is_reset)
}
}
- if (m_ams_model == AMSModel::NO_AMS && !m_vams_lib->is_selected()) {
+ if (m_ams_model == AMSModel::EXT_AMS && !m_vams_lib->is_selected()) {
m_vams_lib->OnSelected();
}
}
@@ -1082,7 +1082,7 @@ void AMSControl::AddAms(AMSinfo info)
void AMSControl::AddExtraAms(AMSinfo info)
{
AmsCansWindow* canswin = new AmsCansWindow();
- auto amscans = new AmsCans(m_simplebook_extra_cans, info, AMSModel::EXTRA_AMS);
+ auto amscans = new AmsCans(m_simplebook_extra_cans, info, AMSModel::AMS_LITE);
canswin->amsIndex = info.ams_id;
canswin->amsCans = amscans;
@@ -1156,7 +1156,7 @@ void AMSControl::SwitchAms(std::string ams_id)
if (m_ams_model == AMSModel::GENERIC_AMS) {
m_simplebook_generic_cans->SetSelection(cans->amsCans->m_selection);
}
- else if (m_ams_model == AMSModel::EXTRA_AMS) {
+ else if (m_ams_model == AMSModel::AMS_LITE) {
m_simplebook_extra_cans->SetSelection(cans->amsCans->m_selection);
}
}
@@ -1321,7 +1321,7 @@ void AMSControl::SetExtruder(bool on_off, bool is_vams, std::string ams_now, wxC
m_vams_road->OnVamsLoading(false);
}
}
- else if (m_ams_model == AMSModel::EXTRA_AMS || m_ext_model == AMSModel::EXTRA_AMS) {
+ else if (m_ams_model == AMSModel::AMS_LITE || m_ext_model == AMSModel::AMS_LITE) {
if (!is_vams && !on_off) {
m_extruder->TurnOff();
m_extruder->OnVamsLoading(false);
@@ -1400,7 +1400,7 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy
m_extruder->OnAmsLoading(true, cans->amsCans->GetTagColr(canid));
}
}
- else if (m_ams_model == AMSModel::EXTRA_AMS) {
+ else if (m_ams_model == AMSModel::AMS_LITE) {
cans->amsCans->SetAmsStepExtra(canid, type, step);
if (step != AMSPassRoadSTEP::AMS_ROAD_STEP_NONE) {
m_extruder->OnAmsLoading(true, cans->amsCans->GetTagColr(canid));
diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp
index e5c5e08942..2063e0eb30 100644
--- a/src/slic3r/GUI/Widgets/AMSControl.hpp
+++ b/src/slic3r/GUI/Widgets/AMSControl.hpp
@@ -104,9 +104,9 @@ public:
std::string GetCurrentCan(std::string amsid);
wxColour GetCanColour(std::string amsid, std::string canid);
- AMSModel m_ams_model{AMSModel::NO_AMS};
- AMSModel m_ext_model{AMSModel::NO_AMS};
- AMSModel m_is_none_ams_mode{AMSModel::NO_AMS};
+ AMSModel m_ams_model{AMSModel::EXT_AMS};
+ AMSModel m_ext_model{AMSModel::EXT_AMS};
+ AMSModel m_is_none_ams_mode{AMSModel::EXT_AMS};
void SetAmsModel(AMSModel mode, AMSModel ext_mode) {m_ams_model = mode; m_ext_model = ext_mode;};
diff --git a/src/slic3r/GUI/Widgets/AMSItem.cpp b/src/slic3r/GUI/Widgets/AMSItem.cpp
index 617816932a..5b80a8439b 100644
--- a/src/slic3r/GUI/Widgets/AMSItem.cpp
+++ b/src/slic3r/GUI/Widgets/AMSItem.cpp
@@ -49,6 +49,7 @@ bool AMSinfo::parse_ams_info(MachineObject *obj, Ams *ams, bool remain_flag, boo
}
this->humidity_raw = ams->humidity_raw;
+ this->ams_type = AMSModel(ams->type);
cans.clear();
for (int i = 0; i < ams->trayList.size(); i++) {
@@ -707,7 +708,7 @@ void AMSLib::on_left_down(wxMouseEvent &evt)
top = (size.y - FromDIP(15) - m_bitmap_editable_light.GetBmpSize().y);
bottom = size.y - FromDIP(15);
}
- else if (m_ams_model == AMSModel::EXTRA_AMS) {
+ else if (m_ams_model == AMSModel::AMS_LITE) {
top = (size.y - FromDIP(20) - m_bitmap_editable_light.GetBmpSize().y);
bottom = size.y - FromDIP(20);
}
@@ -759,7 +760,7 @@ void AMSLib::render(wxDC &dc)
if (m_ams_model == AMSModel::GENERIC_AMS) {
render_generic_text(dc);
}
- else if (m_ams_model == AMSModel::EXTRA_AMS) {
+ else if (m_ams_model == AMSModel::AMS_LITE) {
render_extra_text(dc);
}
}
@@ -977,7 +978,7 @@ void AMSLib::doRender(wxDC &dc)
if (m_ams_model == AMSModel::GENERIC_AMS) {
render_generic_lib(dc);
}
- else if (m_ams_model == AMSModel::EXTRA_AMS) {
+ else if (m_ams_model == AMSModel::AMS_LITE) {
render_extra_lib(dc);
}
}
@@ -1408,7 +1409,7 @@ AMSRoad::AMSRoad(wxWindow *parent, wxWindowID id, Caninfo info, int canindex, in
for (int i = 1; i <= 5; i++) { ams_humidity_dark_imgs.push_back(ScalableBitmap(this, "hum_level" + std::to_string(i) + "_dark", 32));}
for (int i = 1; i <= 5; i++) { ams_humidity_no_num_imgs.push_back(ScalableBitmap(this, "hum_level" + std::to_string(i) + "_no_num_light", 16)); }
for (int i = 1; i <= 5; i++) { ams_humidity_no_num_dark_imgs.push_back(ScalableBitmap(this, "hum_level" + std::to_string(i) + "_no_num_dark", 16)); }
-
+ ams_sun_img = ScalableBitmap(this, "ams_drying", 16);
if (m_rode_mode != AMSRoadMode::AMS_ROAD_MODE_VIRTUAL_TRAY) {
create(parent, id, pos, size);
}
@@ -1701,6 +1702,7 @@ void AMSRoad::msw_rescale()
for (auto& img : ams_humidity_dark_imgs) { img.msw_rescale(); }
for (auto &img : ams_humidity_no_num_imgs) { img.msw_rescale(); }
for (auto &img : ams_humidity_no_num_dark_imgs) { img.msw_rescale(); }
+ ams_sun_img.msw_rescale();
}
@@ -1736,7 +1738,7 @@ void AmsCans::create(wxWindow *parent)
}
SetSizer(sizer_can);
}
- else if(m_ams_model == AMSModel::EXTRA_AMS) {
+ else if(m_ams_model == AMSModel::AMS_LITE) {
sizer_can = new wxBoxSizer(wxVERTICAL);
sizer_can_middle = new wxBoxSizer(wxHORIZONTAL);
sizer_can_left = new wxBoxSizer(wxVERTICAL);
@@ -1823,7 +1825,7 @@ void AmsCans::AddCan(Caninfo caninfo, int canindex, int maxcan, wxBoxSizer* size
m_sizer_ams->Add(m_panel_lib, 1, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, FromDIP(3));
m_sizer_ams->Add(m_panel_road, 0, wxALL, 0);
}
- else if (m_ams_model == AMSModel::EXTRA_AMS)
+ else if (m_ams_model == AMSModel::AMS_LITE)
{
m_sizer_ams = new wxBoxSizer(wxHORIZONTAL);
m_panel_road->Hide();
@@ -1846,7 +1848,7 @@ void AmsCans::AddCan(Caninfo caninfo, int canindex, int maxcan, wxBoxSizer* size
if (m_ams_model == AMSModel::GENERIC_AMS) {
sizer->Add(amscan, 0, wxALL, 0);
}
- else if (m_ams_model == AMSModel::EXTRA_AMS)
+ else if (m_ams_model == AMSModel::AMS_LITE)
{
if (canindex > 1) {
sizer->Prepend(amscan, 0, wxALL, 0);
@@ -2100,7 +2102,7 @@ void AmsCans::doRender(wxDC& dc)
dc.DrawBitmap(m_bitmap_extra_framework.bmp(), (size.x - m_bitmap_extra_framework.GetBmpSize().x) / 2, (size.y - m_bitmap_extra_framework.GetBmpSize().y) / 2);
//road for extra
- if (m_ams_model == AMSModel::EXTRA_AMS) {
+ if (m_ams_model == AMSModel::AMS_LITE) {
auto end_top = size.x / 2 - FromDIP(99);
auto passroad_width = 6;
diff --git a/src/slic3r/GUI/Widgets/AMSItem.hpp b/src/slic3r/GUI/Widgets/AMSItem.hpp
index a089da690d..149b6d7f61 100644
--- a/src/slic3r/GUI/Widgets/AMSItem.hpp
+++ b/src/slic3r/GUI/Widgets/AMSItem.hpp
@@ -36,11 +36,12 @@
namespace Slic3r { namespace GUI {
-
enum AMSModel {
- NO_AMS = 0,
+ EXT_AMS = 0, //ext
GENERIC_AMS = 1,
- EXTRA_AMS = 2
+ AMS_LITE = 2, //ams-lite
+ N3F_AMS = 3,
+ N3S_AMS = 4 //n3s single_ams
};
enum ActionButton {
@@ -160,6 +161,7 @@ public:
int curreent_filamentstep;
int ams_humidity = 0;
int humidity_raw = -1;
+ AMSModel ams_type = AMSModel::GENERIC_AMS;
bool parse_ams_info(MachineObject* obj, Ams *ams, bool remain_flag = false, bool humidity_flag = false);
};
@@ -396,7 +398,9 @@ public:
std::vector ams_humidity_no_num_imgs;
std::vector ams_humidity_no_num_dark_imgs;
-
+
+ ScalableBitmap ams_sun_img;
+
int m_humidity = { 0 };
bool m_show_humidity = { false };
bool m_vams_loading{false};