diff --git a/resources/images/ams_humidity_0.svg b/resources/images/ams_humidity_0.svg
new file mode 100644
index 000000000..9d31af6d0
--- /dev/null
+++ b/resources/images/ams_humidity_0.svg
@@ -0,0 +1,11 @@
+
diff --git a/resources/images/ams_humidity_1.svg b/resources/images/ams_humidity_1.svg
new file mode 100644
index 000000000..0bc84fcf7
--- /dev/null
+++ b/resources/images/ams_humidity_1.svg
@@ -0,0 +1,12 @@
+
diff --git a/resources/images/ams_humidity_2.svg b/resources/images/ams_humidity_2.svg
new file mode 100644
index 000000000..780dd0f0e
--- /dev/null
+++ b/resources/images/ams_humidity_2.svg
@@ -0,0 +1,12 @@
+
diff --git a/resources/images/ams_humidity_3.svg b/resources/images/ams_humidity_3.svg
new file mode 100644
index 000000000..398599dcc
--- /dev/null
+++ b/resources/images/ams_humidity_3.svg
@@ -0,0 +1,12 @@
+
diff --git a/resources/images/ams_humidity_4.svg b/resources/images/ams_humidity_4.svg
new file mode 100644
index 000000000..a6d5860e5
--- /dev/null
+++ b/resources/images/ams_humidity_4.svg
@@ -0,0 +1,12 @@
+
diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp
index 8e8e713b2..db6708467 100644
--- a/src/slic3r/GUI/DeviceManager.cpp
+++ b/src/slic3r/GUI/DeviceManager.cpp
@@ -334,7 +334,7 @@ MachineObject::MachineObject(NetworkAgent* agent, std::string name, std::string
ams_insert_flag = false;
ams_power_on_flag = false;
ams_support_use_ams = false;
- ams_humidity = -1;
+ ams_humidity = 5;
/* signals */
wifi_signal = "";
@@ -2531,6 +2531,18 @@ int MachineObject::parse_json(std::string payload)
}
if (!curr_ams) continue;
+ if (it->contains("humidity")) {
+ std::string humidity = (*it)["humidity"].get();
+
+ try {
+ curr_ams->humidity = atoi(humidity.c_str());
+ }
+ catch (...) {
+ ;
+ }
+ }
+
+
if (it->contains("tray")) {
std::set tray_id_set;
for (auto it = curr_ams->trayList.begin(); it != curr_ams->trayList.end(); it++) {
diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp
index d2342a6f9..d9cdea0f0 100644
--- a/src/slic3r/GUI/DeviceManager.hpp
+++ b/src/slic3r/GUI/DeviceManager.hpp
@@ -210,6 +210,7 @@ public:
id = ams_id;
}
std::string id;
+ int humidity = 5;
bool startup_read_opt{true};
bool tray_read_opt{false};
bool is_exists{false};
diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp
index e0f45aa5e..a5ebc754e 100644
--- a/src/slic3r/GUI/Widgets/AMSControl.cpp
+++ b/src/slic3r/GUI/Widgets/AMSControl.cpp
@@ -58,6 +58,7 @@ bool AMSinfo::parse_ams_info(Ams *ams)
{
if (!ams) return false;
this->ams_id = ams->id;
+ this->ams_humidity = ams->humidity;
cans.clear();
for (int i = 0; i < 4; i++) {
auto it = ams->trayList.find(std::to_string(i));
@@ -79,6 +80,9 @@ bool AMSinfo::parse_ams_info(Ams *ams)
} else {
info.material_state = AMSCanType::AMS_CAN_TYPE_THIRDBRAND;
}
+
+ info.material_remain = it->second->remain < 0 ? 100 :it->second->remain;
+
} else {
info.can_id = it->second->id;
info.material_name = "";
@@ -521,6 +525,10 @@ void AMSLib::render(wxDC &dc)
temp_text_colour = AMS_CONTROL_GRAY800;
}
+ if (m_info.material_remain < 50) {
+ temp_text_colour = AMS_CONTROL_GRAY800;
+ }
+
//if (!wxWindow::IsEnabled()) {
//temp_text_colour = AMS_CONTROL_DISABLE_TEXT_COLOUR;
//}
@@ -568,11 +576,16 @@ void AMSLib::render(wxDC &dc)
void AMSLib::doRender(wxDC &dc)
{
- wxSize size = GetSize();
- auto tmp_lib_colour = m_info.material_colour;
+ wxSize size = GetSize();
+ auto tmp_lib_colour = m_info.material_colour;
auto temp_bitmap_third = m_bitmap_editable_light;
auto temp_bitmap_brand = m_bitmap_readonly_light;
+ //draw def background
+ dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
+ dc.SetBrush(wxBrush(AMS_CONTROL_DEF_LIB_BK_COLOUR));
+ dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4), size.x - FromDIP(8), size.y - FromDIP(8), m_radius);
+
if (tmp_lib_colour.GetLuminance() < 0.5) {
temp_bitmap_third = m_bitmap_editable_light;
temp_bitmap_brand = m_bitmap_readonly_light;
@@ -581,6 +594,11 @@ void AMSLib::doRender(wxDC &dc)
temp_bitmap_brand = m_bitmap_readonly;
}
+ if (m_info.material_remain < 50) {
+ temp_bitmap_third = m_bitmap_editable;
+ temp_bitmap_brand = m_bitmap_readonly;
+ }
+
//if (!wxWindow::IsEnabled()) {
//tmp_lib_colour = AMS_CONTROL_DISABLE_COLOUR;
//}
@@ -598,11 +616,11 @@ void AMSLib::doRender(wxDC &dc)
dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
dc.SetBrush(wxBrush(tmp_lib_colour));
- if (m_radius == 0) {
- dc.DrawRectangle(0, 0, size.x, size.y);
- } else {
- dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4), size.x - FromDIP(8), size.y - FromDIP(8), m_radius);
- }
+ /* if (m_radius == 0) {
+ dc.DrawRectangle(0, 0, size.x, size.y);
+ } else {
+ dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4), size.x - FromDIP(8), size.y - FromDIP(8), m_radius);
+ }*/
}
if (!m_selected && m_hover) {
@@ -610,26 +628,54 @@ void AMSLib::doRender(wxDC &dc)
dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH));
if (m_radius == 0) {
dc.DrawRectangle(0, 0, size.x, size.y);
- } else {
+ }
+ else {
dc.DrawRoundedRectangle(FromDIP(1), FromDIP(1), size.x - FromDIP(1), size.y - FromDIP(1), m_radius);
}
dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
dc.SetBrush(wxBrush(tmp_lib_colour));
- if (m_radius == 0) {
+ /* if (m_radius == 0) {
dc.DrawRectangle(0, 0, size.x, size.y);
} else {
dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4), size.x - FromDIP(8), size.y - FromDIP(8), m_radius);
- }
+ }*/
} else {
dc.SetPen(wxPen(tmp_lib_colour, 1, wxSOLID));
dc.SetBrush(wxBrush(tmp_lib_colour));
- if (m_radius == 0) {
+ /*if (m_radius == 0) {
dc.DrawRectangle(0, 0, size.x, size.y);
} else {
dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4), size.x - FromDIP(8), size.y - FromDIP(8), m_radius);
+ }*/
+ }
+
+ //draw remain
+ int height = size.y - FromDIP(8);
+ int curr_height = height * float(m_info.material_remain * 1.0 / 100.0);
+
+ if (curr_height < FromDIP(6)) {
+ curr_height = FromDIP(6);
+ }
+
+ int top = height - curr_height;
+ dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4) + top, size.x - FromDIP(8), curr_height, m_radius);
+
+ if (top > 2) {
+ dc.DrawRectangle(FromDIP(4), FromDIP(4) + top, size.x - FromDIP(8), FromDIP(2));
+ if (tmp_lib_colour.Red() > 238 && tmp_lib_colour.Green() > 238 && tmp_lib_colour.Blue() > 238) {
+ dc.SetPen(wxPen(wxColour(130, 129, 128), 1, wxSOLID));
+ dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH));
+ dc.DrawLine(FromDIP(4), FromDIP(4) + top, size.x - FromDIP(4), FromDIP(4) + top);
}
}
+
+
+
+ //border
+ dc.SetPen(wxPen(wxColour(130, 130, 128), 1, wxSOLID));
+ dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH));
+ dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4), size.x - FromDIP(8), size.y - FromDIP(8), m_radius);
// edit icon
if (m_info.material_state != AMSCanType::AMS_CAN_TYPE_EMPTY && m_info.material_state != AMSCanType::AMS_CAN_TYPE_NONE)
@@ -696,6 +742,12 @@ AMSRoad::AMSRoad(wxWindow *parent, wxWindowID id, Caninfo info, int canindex, in
m_rode_mode = AMSRoadMode::AMS_ROAD_MODE_LEFT;
}
+ ams_humidity_0 = ScalableBitmap(this, "ams_humidity_0", 18);
+ ams_humidity_1 = ScalableBitmap(this, "ams_humidity_1", 18);
+ ams_humidity_2 = ScalableBitmap(this, "ams_humidity_2", 18);
+ ams_humidity_3 = ScalableBitmap(this, "ams_humidity_3", 18);
+ ams_humidity_4 = ScalableBitmap(this, "ams_humidity_4", 18);
+
create(parent, id, pos, size);
Bind(wxEVT_PAINT, &AMSRoad::paintEvent, this);
wxWindow::SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR);
@@ -703,8 +755,9 @@ AMSRoad::AMSRoad(wxWindow *parent, wxWindowID id, Caninfo info, int canindex, in
void AMSRoad::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size) { wxWindow::Create(parent, id, pos, size); }
-void AMSRoad::Update(Caninfo info, int canindex, int maxcan)
+void AMSRoad::Update(AMSinfo amsinfo, Caninfo info, int canindex, int maxcan)
{
+ m_amsinfo = amsinfo;
m_info = info;
m_canindex = canindex;
if (m_canindex == 0 && maxcan == 1) {
@@ -822,6 +875,27 @@ void AMSRoad::doRender(wxDC &dc)
dc.SetBrush(wxBrush(m_road_def_color));
dc.DrawRoundedRectangle(size.x * 0.37 / 2, size.y * 0.6 - size.y / 6, size.x * 0.63, size.y / 3, m_radius);
}
+
+ if (m_canindex == 3) {
+ if (m_amsinfo.ams_humidity == 5) {
+ dc.DrawBitmap(ams_humidity_0.bmp(), wxPoint(size.x - ams_humidity_0.GetBmpSize().x - FromDIP(4), size.y - ams_humidity_0.GetBmpSize().y - FromDIP(8)));
+ }
+ else if (m_amsinfo.ams_humidity == 4) {
+ dc.DrawBitmap(ams_humidity_1.bmp(), wxPoint(size.x - ams_humidity_0.GetBmpSize().x - FromDIP(4), size.y - ams_humidity_0.GetBmpSize().y - FromDIP(8)));
+ }
+ else if (m_amsinfo.ams_humidity == 3) {
+ dc.DrawBitmap(ams_humidity_2.bmp(), wxPoint(size.x - ams_humidity_0.GetBmpSize().x - FromDIP(4), size.y - ams_humidity_0.GetBmpSize().y - FromDIP(8)));
+ }
+ else if (m_amsinfo.ams_humidity == 2) {
+ dc.DrawBitmap(ams_humidity_3.bmp(), wxPoint(size.x - ams_humidity_0.GetBmpSize().x - FromDIP(4), size.y - ams_humidity_0.GetBmpSize().y - FromDIP(8)));
+ }
+ else if (m_amsinfo.ams_humidity == 1) {
+ dc.DrawBitmap(ams_humidity_4.bmp(), wxPoint(size.x - ams_humidity_0.GetBmpSize().x - FromDIP(4), size.y - ams_humidity_0.GetBmpSize().y - FromDIP(8)));
+ }
+ else {
+ dc.DrawBitmap(ams_humidity_0.bmp(), wxPoint(size.x - ams_humidity_0.GetBmpSize().x - FromDIP(4), size.y - ams_humidity_0.GetBmpSize().y - FromDIP(8)));
+ }
+ }
}
void AMSRoad::UpdatePassRoad(int tag_index, AMSPassRoadType type, AMSPassRoadSTEP step) {}
@@ -886,13 +960,19 @@ AMSItem::AMSItem() {}
AMSItem::AMSItem(wxWindow *parent, wxWindowID id, AMSinfo amsinfo, const wxSize cube_size, const wxPoint &pos, const wxSize &size) : AMSItem()
{
+
+ ams_humidity_0 = ScalableBitmap(this, "ams_humidity_0", 18);
+ ams_humidity_1 = ScalableBitmap(this, "ams_humidity_1", 18);
+ ams_humidity_2 = ScalableBitmap(this, "ams_humidity_2", 18);
+ ams_humidity_3 = ScalableBitmap(this, "ams_humidity_3", 18);
+ ams_humidity_4 = ScalableBitmap(this, "ams_humidity_4", 18);
+
m_amsinfo = amsinfo;
m_cube_size = cube_size;
create(parent, id, pos, size);
Bind(wxEVT_PAINT, &AMSItem::paintEvent, this);
Bind(wxEVT_ENTER_WINDOW, &AMSItem::OnEnterWindow, this);
Bind(wxEVT_LEAVE_WINDOW, &AMSItem::OnLeaveWindow, this);
- // Bind(wxEVT_LEFT_DOWN, &AMSItem::OnSelected, this);
}
void AMSItem::Open()
@@ -1025,12 +1105,30 @@ void AMSItem::doRender(wxDC &dc)
dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH));
dc.DrawLine(left, (size.y - AMS_ITEM_CUBE_SIZE.y) / 2, left, ((size.y - AMS_ITEM_CUBE_SIZE.y) / 2) + AMS_ITEM_CUBE_SIZE.y);
- left += m_space;
- dc.SetFont(::Label::Body_13);
- dc.SetTextForeground(AMS_CONTROL_GRAY800);
- auto tsize = dc.GetTextExtent("00% RH");
- auto text = wxString::Format("%d%% RH", m_humidity);
- dc.DrawText(text, wxPoint(left, (size.y - tsize.y) / 2));
+ left += m_space + m_space / 2;
+ /* dc.SetFont(::Label::Body_13);
+ dc.SetTextForeground(AMS_CONTROL_GRAY800);
+ auto tsize = dc.GetTextExtent("00% RH");
+ auto text = wxString::Format("%d%% RH", m_humidity);*/
+
+ if (m_amsinfo.ams_humidity == 5) {
+ dc.DrawBitmap(ams_humidity_0.bmp(), wxPoint(left, (size.y - ams_humidity_0.GetBmpSize().y) / 2));
+ }
+ else if (m_amsinfo.ams_humidity == 4) {
+ dc.DrawBitmap(ams_humidity_1.bmp(), wxPoint(left, (size.y - ams_humidity_1.GetBmpSize().y) / 2));
+ }
+ else if (m_amsinfo.ams_humidity == 3) {
+ dc.DrawBitmap(ams_humidity_2.bmp(), wxPoint(left, (size.y - ams_humidity_2.GetBmpSize().y) / 2));
+ }
+ else if (m_amsinfo.ams_humidity == 2) {
+ dc.DrawBitmap(ams_humidity_3.bmp(), wxPoint(left, (size.y - ams_humidity_3.GetBmpSize().y) / 2));
+ }
+ else if (m_amsinfo.ams_humidity == 1) {
+ dc.DrawBitmap(ams_humidity_4.bmp(), wxPoint(left, (size.y - ams_humidity_4.GetBmpSize().y) / 2));
+ }
+ else {
+ dc.DrawBitmap(ams_humidity_0.bmp(), wxPoint(left, (size.y - ams_humidity_0.GetBmpSize().y) / 2));
+ }
}
auto border_colour = AMS_CONTROL_BRAND_COLOUR;
@@ -1107,7 +1205,7 @@ void AmsCans::Update(AMSinfo info)
for (auto i = 0; i < m_can_road_list.GetCount(); i++) {
CanRoads *road = m_can_road_list[i];
if (i < m_can_count) {
- road->canRoad->Update(info.cans[i], i, m_can_count);
+ road->canRoad->Update(m_info, info.cans[i], i, m_can_count);
road->canRoad->Show();
} else {
road->canRoad->Hide();
@@ -1902,7 +2000,7 @@ void AMSControl::SwitchAms(std::string ams_id)
//item->amsItem->HideHumidity();
}
m_sizer_top->Layout();
- // m_panel_top->Fit();
+ m_panel_top->Fit();
}
for (auto i = 0; i < m_ams_cans_list.GetCount(); i++) {
diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp
index 5694b076d..8041754d4 100644
--- a/src/slic3r/GUI/Widgets/AMSControl.hpp
+++ b/src/slic3r/GUI/Widgets/AMSControl.hpp
@@ -21,6 +21,7 @@
#define AMS_CONTROL_WHITE_COLOUR wxColour(255, 255, 255)
#define AMS_CONTROL_BLACK_COLOUR wxColour(0, 0, 0)
#define AMS_CONTROL_DEF_BLOCK_BK_COLOUR wxColour(238, 238, 238)
+#define AMS_CONTROL_DEF_LIB_BK_COLOUR wxColour(248, 248, 248)
#define AMS_EXTRUDER_DEF_COLOUR wxColour(234, 234, 234)
#define AMS_CONTROL_MAX_COUNT 4
#define AMS_CONTRO_CALIBRATION_BUTTON_SIZE wxSize(FromDIP(150), FromDIP(28))
@@ -94,7 +95,7 @@ enum FilamentStep {
#define AMS_ITEM_CUBE_SIZE wxSize(FromDIP(14), FromDIP(14))
#define AMS_ITEM_SIZE wxSize(FromDIP(82), FromDIP(27))
-#define AMS_ITEM_HUMIDITY_SIZE wxSize(FromDIP(150), FromDIP(27))
+#define AMS_ITEM_HUMIDITY_SIZE wxSize(FromDIP(120), FromDIP(27))
#define AMS_CAN_LIB_SIZE wxSize(FromDIP(58), FromDIP(80))
#define AMS_CAN_ROAD_SIZE wxSize(FromDIP(66), FromDIP(60))
#define AMS_CAN_ITEM_HEIGHT_SIZE FromDIP(27)
@@ -111,18 +112,19 @@ struct Caninfo
wxString material_name;
wxColour material_colour = {*wxWHITE};
AMSCanType material_state;
+ int material_remain = 100;
};
struct AMSinfo
{
public:
- std::string ams_id;
- std::vector cans;
-
- std::string current_can_id;
- AMSPassRoadSTEP current_step;
- AMSAction current_action;
- int curreent_filamentstep;
+ std::string ams_id;
+ std::vector cans;
+ std::string current_can_id;
+ AMSPassRoadSTEP current_step;
+ AMSAction current_action;
+ int curreent_filamentstep;
+ int ams_humidity = 0;
bool parse_ams_info(Ams *ams);
};
@@ -268,6 +270,7 @@ public:
void create(wxWindow *parent, wxWindowID id = wxID_ANY, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize);
public:
+ AMSinfo m_amsinfo;
Caninfo m_info;
int m_canindex = {0};
AMSRoadMode m_rode_mode = {AMSRoadMode::AMS_ROAD_MODE_LEFT_RIGHT};
@@ -277,7 +280,15 @@ public:
double m_radius = {4};
wxColour m_road_def_color;
wxColour m_road_color;
- void Update(Caninfo info, int canindex, int maxcan);
+ void Update(AMSinfo amsinfo, Caninfo info, int canindex, int maxcan);
+
+ ScalableBitmap ams_humidity_0;
+ ScalableBitmap ams_humidity_1;
+ ScalableBitmap ams_humidity_2;
+ ScalableBitmap ams_humidity_3;
+ ScalableBitmap ams_humidity_4;
+ bool m_show_humidity = { false };
+ int m_humidity = { 0 };
void SetPassRoadColour(wxColour col);
void SetMode(AMSRoadMode mode);
@@ -313,7 +324,13 @@ public:
void HideHumidity();
void SetHumidity(int humidity);
virtual bool Enable(bool enable = true);
+
AMSinfo m_amsinfo;
+ ScalableBitmap ams_humidity_0;
+ ScalableBitmap ams_humidity_1;
+ ScalableBitmap ams_humidity_2;
+ ScalableBitmap ams_humidity_3;
+ ScalableBitmap ams_humidity_4;
protected:
wxSize m_cube_size;