FIX: the AMS EXT image fault

jira: [STUDIO-10044]
Change-Id: I71d142cd763deff33f1c42047b5ae6ac81574b3f
This commit is contained in:
xin.zhang 2025-02-12 11:21:30 +08:00 committed by lane.wei
parent 0730c4ec51
commit d50fc6a0ce
4 changed files with 119 additions and 53 deletions

View File

@ -3491,7 +3491,8 @@ AMSRoadShowMode AMSControl::findFirstMode(AMSPanelPos pos) {
} }
} }
void AMSControl::createAmsPanel(wxSimplebook* parent, int& idx, std::vector<AMSinfo>infos, AMSPanelPos pos) { void AMSControl::createAmsPanel(wxSimplebook *parent, int &idx, std::vector<AMSinfo> infos, AMSPanelPos pos, int total_ext_num)
{
if (infos.size() <= 0) return; if (infos.size() <= 0) return;
wxPanel* book_panel = new wxPanel(parent); wxPanel* book_panel = new wxPanel(parent);
@ -3502,8 +3503,12 @@ void AMSControl::createAmsPanel(wxSimplebook* parent, int& idx, std::vector<AMSi
AmsItem* ams1 = nullptr, * ams2 = nullptr; AmsItem* ams1 = nullptr, * ams2 = nullptr;
ams1 = new AmsItem(book_panel, infos[0], infos[0].ams_type, pos); ams1 = new AmsItem(book_panel, infos[0], infos[0].ams_type, pos);
if (ams1->get_ext_image()) { ams1->get_ext_image()->setTotalExtNum(total_ext_num); }
if (infos.size() == MAX_AMS_NUM_IN_PANEL) { //n3s and ? in a panel if (infos.size() == MAX_AMS_NUM_IN_PANEL) { //n3s and ? in a panel
ams2 = new AmsItem(book_panel, infos[1], infos[1].ams_type, pos); ams2 = new AmsItem(book_panel, infos[1], infos[1].ams_type, pos);
if (ams2->get_ext_image()) { ams2->get_ext_image()->setTotalExtNum(total_ext_num); }
if (pos == AMSPanelPos::LEFT_PANEL) { if (pos == AMSPanelPos::LEFT_PANEL) {
book_sizer->Add(ams1, 0, wxLEFT, FromDIP(4)); book_sizer->Add(ams1, 0, wxLEFT, FromDIP(4));
book_sizer->Add(ams2, 0, wxLEFT, FromDIP(30)); book_sizer->Add(ams2, 0, wxLEFT, FromDIP(30));
@ -3514,8 +3519,8 @@ void AMSControl::createAmsPanel(wxSimplebook* parent, int& idx, std::vector<AMSi
} }
} }
else { //only an ext in a panel else { //only an ext in a panel
if (ams1->get_ext_image()) { ams1->get_ext_image()->setShowState(false); if (ams1->get_ext_image()) { ams1->get_ext_image()->setShowAmsExt(false);}
}
if (ams1->get_ams_model() == AMSModel::EXT_AMS) { if (ams1->get_ams_model() == AMSModel::EXT_AMS) {
if (ams1->get_ext_type() == LITE_EXT) { if (ams1->get_ext_type() == LITE_EXT) {
//book_sizer->Add(ams1, 0, wxALIGN_CENTER_HORIZONTAL, 0); //book_sizer->Add(ams1, 0, wxALIGN_CENTER_HORIZONTAL, 0);
@ -3590,18 +3595,18 @@ void AMSControl::AddAms(std::vector<AMSinfo>single_info, AMSPanelPos pos) {
} }
if (m_extder_data.total_extder_count == 2) { if (m_extder_data.total_extder_count == 2) {
if (single_info[0].nozzle_id == MAIN_NOZZLE_ID) { if (single_info[0].nozzle_id == MAIN_NOZZLE_ID) {
createAmsPanel(m_simplebook_ams_right, m_right_page_index, single_info, AMSPanelPos::RIGHT_PANEL); createAmsPanel(m_simplebook_ams_right, m_right_page_index, single_info, AMSPanelPos::RIGHT_PANEL, m_extder_data.total_extder_count);
} }
else if (single_info[0].nozzle_id == DEPUTY_NOZZLE_ID) { else if (single_info[0].nozzle_id == DEPUTY_NOZZLE_ID) {
createAmsPanel(m_simplebook_ams_left, m_left_page_index, single_info, AMSPanelPos::LEFT_PANEL); createAmsPanel(m_simplebook_ams_left, m_left_page_index, single_info, AMSPanelPos::LEFT_PANEL, m_extder_data.total_extder_count);
} }
} }
else if (m_extder_data.total_extder_count == 1) { else if (m_extder_data.total_extder_count == 1) {
if (pos == AMSPanelPos::RIGHT_PANEL) { if (pos == AMSPanelPos::RIGHT_PANEL) {
createAmsPanel(m_simplebook_ams_right, m_right_page_index, single_info, AMSPanelPos::RIGHT_PANEL); createAmsPanel(m_simplebook_ams_right, m_right_page_index, single_info, AMSPanelPos::RIGHT_PANEL, m_extder_data.total_extder_count);
} }
else { else {
createAmsPanel(m_simplebook_ams_left, m_left_page_index, single_info, AMSPanelPos::LEFT_PANEL); createAmsPanel(m_simplebook_ams_left, m_left_page_index, single_info, AMSPanelPos::LEFT_PANEL, m_extder_data.total_extder_count);
} }
} }

View File

@ -123,7 +123,7 @@ public:
bool IsAmsInRightPanel(std::string ams_id); bool IsAmsInRightPanel(std::string ams_id);
wxColour GetCanColour(std::string amsid, std::string canid); wxColour GetCanColour(std::string amsid, std::string canid);
void createAms(wxSimplebook* parent, int& idx, AMSinfo info, AMSPanelPos pos); void createAms(wxSimplebook* parent, int& idx, AMSinfo info, AMSPanelPos pos);
void createAmsPanel(wxSimplebook* parent, int& idx, std::vector<AMSinfo>infos, AMSPanelPos pos); void createAmsPanel(wxSimplebook* parent, int& idx, std::vector<AMSinfo>infos, AMSPanelPos pos, int total_ext_num);
AMSRoadShowMode findFirstMode(AMSPanelPos pos); AMSRoadShowMode findFirstMode(AMSPanelPos pos);
AMSModel m_ams_model{AMSModel::EXT_AMS}; AMSModel m_ams_model{AMSModel::EXT_AMS};

View File

@ -543,21 +543,28 @@ Description:AMSExtImage upon ext lib
AMSExtImage::AMSExtImage(wxWindow* parent, AMSPanelPos ext_pos, ExtderData *data, wxWindowID id, const wxPoint& pos) AMSExtImage::AMSExtImage(wxWindow* parent, AMSPanelPos ext_pos, ExtderData *data, wxWindowID id, const wxPoint& pos)
{ {
if (data == nullptr){ if (data == nullptr)
{
wxWindow::Create(parent, id, pos, AMS_HUMIDITY_SIZE); wxWindow::Create(parent, id, pos, AMS_HUMIDITY_SIZE);
m_show_ams_ext = true;
} }
else{ else
{
wxWindow::Create(parent, id, pos, wxSize(FromDIP(98), FromDIP(99))); wxWindow::Create(parent, id, pos, wxSize(FromDIP(98), FromDIP(99)));
m_show_ext = true;
total_ext_num = data->total_extder_count;
} }
m_ext_pos = ext_pos;
m_ext_left = ScalableBitmap(this, "ext_image_left", 98);
m_ext_right = ScalableBitmap(this, "ext_image_right", 98);
m_ext_single_nozzle = ScalableBitmap(this, "ext_image_single_nozzle", 98);
m_ams_single_ext = ScalableBitmap(this, "ams_ext_image", 25);
m_ams_ext_left = ScalableBitmap(this, "ext_image_left", 25);
m_ams_ext_right = ScalableBitmap(this, "ext_image_right", 25);
SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR));
m_ext_pos = ext_pos;
if (data != nullptr) m_extder_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); Bind(wxEVT_PAINT, &AMSExtImage::paintEvent, this);
} }
@ -568,15 +575,37 @@ void AMSExtImage::msw_rescale()
{ {
//m_ams_extruder.SetSize(AMS_EXTRUDER_BITMAP_SIZE); //m_ams_extruder.SetSize(AMS_EXTRUDER_BITMAP_SIZE);
//auto image = m_ams_extruder.ConvertToImage(); //auto image = m_ams_extruder.ConvertToImage();
m_ams_ext_left = ScalableBitmap(this, "ext_image_left", 98); m_ext_left = ScalableBitmap(this, "ext_image_left", 98);
m_ams_ext_right = ScalableBitmap(this, "ext_image_right", 98); m_ext_right = ScalableBitmap(this, "ext_image_right", 98);
m_ams_ext_single_nozzle = ScalableBitmap(this, "ext_image_single_nozzle", 98); m_ext_single_nozzle = ScalableBitmap(this, "ext_image_single_nozzle", 98);
m_ams_ext = ScalableBitmap(this, "ams_ext_image", 25);
m_ams_single_ext = ScalableBitmap(this, "ams_ext_image", 25);
m_ams_ext_left = ScalableBitmap(this, "ext_image_left", 25);
m_ams_ext_right = ScalableBitmap(this, "ext_image_right", 25);
Layout(); Layout();
Fit(); Fit();
Refresh(); Refresh();
} }
void AMSExtImage::setShowAmsExt(bool show)
{
if (m_show_ams_ext != show)
{
m_show_ams_ext = show;
Refresh();
}
}
void AMSExtImage::setTotalExtNum(int num)
{
if (total_ext_num != num)
{
total_ext_num = num;
Refresh();
}
}
void AMSExtImage::paintEvent(wxPaintEvent& evt) void AMSExtImage::paintEvent(wxPaintEvent& evt)
{ {
wxPaintDC dc(this); wxPaintDC dc(this);
@ -608,27 +637,50 @@ void AMSExtImage::doRender(wxDC& dc)
{ {
auto size = GetSize(); auto size = GetSize();
dc.SetPen(*wxTRANSPARENT_PEN); dc.SetPen(*wxTRANSPARENT_PEN);
//dc.DrawRectangle(0, FromDIP(5), size.x, size.y - FromDIP(5) - FromDIP(2));
if (m_extder_data == nullptr){ if (m_show_ams_ext)
if (m_ext_show) { {
dc.DrawBitmap(m_ams_ext.bmp(), wxPoint((size.x - m_ams_ext.GetBmpSize().x) / 2, 0)); if (total_ext_num < 2)
{
dc.DrawBitmap(m_ams_single_ext.bmp(), wxPoint((size.x - m_ams_single_ext.GetBmpSize().x) / 2, 0));
} }
} else
else{ {
if (m_extder_data->total_extder_count < 2) { if (m_ext_pos == AMSPanelPos::LEFT_PANEL)
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)); {
} dc.DrawBitmap(m_ams_ext_left.bmp(), wxPoint((size.x - m_ams_ext_left.GetBmpSize().x) / 2, 0));
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 { 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)); {
dc.DrawBitmap(m_ams_ext_right.bmp(), wxPoint((size.x - m_ams_ext_right.GetBmpSize().x) / 2, 0));
} }
} }
Layout();
return;
} }
Layout(); if (m_show_ext)
{
if (total_ext_num < 2)
{
dc.DrawBitmap(m_ext_single_nozzle.bmp(), wxPoint((size.x - m_ext_right.GetBmpSize().x) / 2, (size.y - m_ext_right.GetBmpSize().y) / 2));
}
else
{
if (m_ext_pos == AMSPanelPos::LEFT_PANEL)
{
dc.DrawBitmap(m_ext_left.bmp(), wxPoint((size.x - m_ext_left.GetBmpSize().x) / 2, (size.y - m_ext_left.GetBmpSize().y) / 2));
}
else
{
dc.DrawBitmap(m_ext_right.bmp(), wxPoint((size.x - m_ext_right.GetBmpSize().x) / 2, (size.y - m_ext_right.GetBmpSize().y) / 2));
}
}
Layout();
return;
}
} }
@ -2896,7 +2948,7 @@ void AmsItem::create(wxWindow *parent)
} }
else{ else{
if (m_ams_model == EXT_AMS){ if (m_ams_model == EXT_AMS){
m_ext_image = new AMSExtImage(this, AMSPanelPos::RIGHT_PANEL); m_ext_image = new AMSExtImage(this, m_panel_pos);
sizer_item->Add(m_ext_image, 0, wxALIGN_CENTER_HORIZONTAL, 0); sizer_item->Add(m_ext_image, 0, wxALIGN_CENTER_HORIZONTAL, 0);
} }
} }

View File

@ -347,24 +347,33 @@ public:
//AMSExtImage upon ext lib //AMSExtImage upon ext lib
class AMSExtImage : public wxWindow class AMSExtImage : public wxWindow
{ {
private: private:
bool m_ext_show = true; bool m_show_ams_ext = false;
ExtderData* m_extder_data = nullptr; bool m_show_ext = false;
AMSPanelPos m_ext_pos;
public:
void msw_rescale();
void paintEvent(wxPaintEvent& evt);
void setShowState(bool show) { m_ext_show = show; };
void render(wxDC& dc); AMSPanelPos m_ext_pos;
ScalableBitmap m_ams_ext; int total_ext_num = 1;
ScalableBitmap m_ams_ext_left;
ScalableBitmap m_ams_ext_right; ScalableBitmap m_ams_ext_left;
ScalableBitmap m_ams_ext_single_nozzle; ScalableBitmap m_ams_ext_right;
void doRender(wxDC& dc); ScalableBitmap m_ams_single_ext;
AMSExtImage(wxWindow* parent, AMSPanelPos ext_pos = AMSPanelPos::RIGHT_PANEL, ExtderData *data = nullptr,
wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition); ScalableBitmap m_ext_left;
ScalableBitmap m_ext_right;
ScalableBitmap m_ext_single_nozzle;
public:
AMSExtImage(wxWindow *parent, AMSPanelPos ext_pos = AMSPanelPos::RIGHT_PANEL, ExtderData *data = nullptr, wxWindowID id = wxID_ANY, const wxPoint &pos = wxDefaultPosition);
~AMSExtImage(); ~AMSExtImage();
void msw_rescale();
void setShowAmsExt(bool show);
void setTotalExtNum(int num);
private:
void paintEvent(wxPaintEvent &evt);
void render(wxDC &dc);
void doRender(wxDC &dc);
}; };