OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::GUI::AMSLib Class Reference

#include </home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/GUI/Widgets/AMSItem.hpp>

Inheritance diagram for Slic3r::GUI::AMSLib:
Collaboration diagram for Slic3r::GUI::AMSLib:

Public Member Functions

 AMSLib (wxWindow *parent, std::string ams_idx, Caninfo info, AMSModelOriginType ext_type=AMSModelOriginType::GENERIC_EXT)
 ~AMSLib ()
void create (wxWindow *parent, wxWindowID id=wxID_ANY, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize)
wxColour GetLibColour ()
void UpdateInfo (Caninfo info, std::string ams_idx, bool refresh=true)
void UnableSelected ()
void EableSelected ()
void OnSelected ()
void UnSelected ()
bool is_selected ()
void post_event (wxCommandEvent &&event)
void show_kn_value (bool show)
void support_cali (bool sup)
virtual bool Enable (bool enable=true)
void set_disable_mode (bool disable)
void set_view_only (bool view_only)
void msw_rescale ()
void on_pass_road (bool pass)

Public Attributes

Caninfo m_info
MachineObject * m_obj = { nullptr }
std::string m_ams_id
std::string m_slot_id
int m_can_index = 0
bool transparent_changed = { false }
AMSModel m_ams_model
AMSModelOriginType m_ext_type = { AMSModelOriginType::GENERIC_EXT }

Protected Member Functions

void on_enter_window (wxMouseEvent &evt)
void on_leave_window (wxMouseEvent &evt)
void on_left_down (wxMouseEvent &evt)
void paintEvent (wxPaintEvent &evt)
void render (wxDC &dc)
void render_lite_text (wxDC &dc)
void render_generic_text (wxDC &dc)
void doRender (wxDC &dc)
void render_lite_lib (wxDC &dc)
void render_generic_lib (wxDC &dc)

Protected Attributes

wxStaticBitmap * m_edit_bitmp = {nullptr}
wxStaticBitmap * m_edit_bitmp_light = {nullptr}
ScalableBitmap m_bitmap_editable
ScalableBitmap m_bitmap_editable_light
ScalableBitmap m_bitmap_readonly
ScalableBitmap m_bitmap_readonly_light
ScalableBitmap m_bitmap_transparent
ScalableBitmap m_bitmap_transparent_def
ScalableBitmap m_bitmap_transparent_lite
ScalableBitmap m_bitmap_extra_tray_left
ScalableBitmap m_bitmap_extra_tray_right
ScalableBitmap m_bitmap_extra_tray_mid
ScalableBitmap m_bitmap_extra_tray_left_hover
ScalableBitmap m_bitmap_extra_tray_right_hover
ScalableBitmap m_bitmap_extra_tray_mid_hover
ScalableBitmap m_bitmap_extra_tray_left_selected
ScalableBitmap m_bitmap_extra_tray_right_selected
ScalableBitmap m_bitmap_extra_tray_mid_selected
bool m_unable_selected = {false}
bool m_enable = {false}
bool m_selected = {false}
bool m_hover = {false}
bool m_show_kn = {false}
bool m_support_cali = {false}
double m_radius = {4}
wxColour m_border_color
wxColour m_road_def_color
wxColour m_lib_color
bool m_disable_mode { false }
bool m_view_only { false }
bool m_pass_road {false}

Detailed Description

Constructor & Destructor Documentation

◆ AMSLib()

Slic3r::GUI::AMSLib::AMSLib ( wxWindow * parent,
std::string ams_idx,
Caninfo info,
AMSModelOriginType ext_type = AMSModelOriginType::GENERIC_EXT )
965{
966 m_border_color = (wxColour(130, 130, 128));
968 m_ext_type = ext_type;
969 wxWindow::SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR));
970 create(parent);
971
972 Bind(wxEVT_PAINT, &AMSLib::paintEvent, this);
973 Bind(wxEVT_ENTER_WINDOW, &AMSLib::on_enter_window, this);
974 Bind(wxEVT_LEAVE_WINDOW, &AMSLib::on_leave_window, this);
975 Bind(wxEVT_LEFT_DOWN, &AMSLib::on_left_down, this);
976
977 UpdateInfo(info, ams_idx, false);
978}
#define AMS_CONTROL_DEF_LIB_BK_COLOUR
Definition AMSItem.hpp:45
#define AMS_CONTROL_GRAY500
Definition AMSItem.hpp:39
void on_leave_window(wxMouseEvent &evt)
Definition AMSItem.cpp:1029
void UpdateInfo(Caninfo info, std::string ams_idx, bool refresh=true)
Definition AMSItem.cpp:1777
AMSModelOriginType m_ext_type
Definition AMSItem.hpp:510
wxColour m_road_def_color
Definition AMSItem.hpp:562
void on_left_down(wxMouseEvent &evt)
Definition AMSItem.cpp:1035
void create(wxWindow *parent, wxWindowID id=wxID_ANY, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize)
Definition AMSItem.cpp:984
void paintEvent(wxPaintEvent &evt)
Definition AMSItem.cpp:1074
void on_enter_window(wxMouseEvent &evt)
Definition AMSItem.cpp:1023
wxColour m_border_color
Definition AMSItem.hpp:561
static wxColour darkModeColorFor(wxColour const &color)
Definition StateColor.cpp:219

References AMS_CONTROL_DEF_LIB_BK_COLOUR, AMS_CONTROL_GRAY500, create(), StateColor::darkModeColorFor(), m_border_color, m_ext_type, m_road_def_color, on_enter_window(), on_leave_window(), on_left_down(), paintEvent(), and UpdateInfo().

Here is the call graph for this function:

◆ ~AMSLib()

Slic3r::GUI::AMSLib::~AMSLib ( )
981{
982}

Member Function Documentation

◆ create()

void Slic3r::GUI::AMSLib::create ( wxWindow * parent,
wxWindowID id = wxID_ANY,
const wxPoint & pos = wxDefaultPosition,
const wxSize & size = wxDefaultSize )
985{
986 wxWindow::Create(parent, id, pos, size);
987
988 SetSize(AMS_CAN_LIB_SIZE);
989 SetMinSize(AMS_CAN_LIB_SIZE);
990 SetMaxSize(AMS_CAN_LIB_SIZE);
991 auto m_sizer_body = new wxBoxSizer(wxVERTICAL);
992
993 wxBoxSizer *m_sizer_edit = new wxBoxSizer(wxHORIZONTAL);
994
995 m_bitmap_editable = ScalableBitmap(this, "ams_editable", 14);
996 m_bitmap_editable_light = ScalableBitmap(this, "ams_editable_light", 14);
997 m_bitmap_readonly = ScalableBitmap(this, "ams_readonly", 14);
998 m_bitmap_readonly_light = ScalableBitmap(this, "ams_readonly_light", 14);
999 m_bitmap_transparent = ScalableBitmap(this, "transparent_ams_lib", 76);
1000 m_bitmap_transparent_def = ScalableBitmap(this, "transparent_ams_lib", 76);
1001 m_bitmap_transparent_lite = ScalableBitmap(this, "transparent_ams_lib", 56);
1002
1003 m_bitmap_extra_tray_left = ScalableBitmap(this, "extra_ams_tray_left", 72);
1004 m_bitmap_extra_tray_right = ScalableBitmap(this, "extra_ams_tray_right", 72);
1005 m_bitmap_extra_tray_mid = ScalableBitmap(this, "extra_ams_tray_mid", 72);
1006
1007 m_bitmap_extra_tray_left_hover = ScalableBitmap(this, "extra_ams_tray_left_hover", 72);
1008 m_bitmap_extra_tray_right_hover = ScalableBitmap(this, "extra_ams_tray_right_hover", 72);
1009 m_bitmap_extra_tray_mid_hover = ScalableBitmap(this, "extra_ams_tray_mid_hover", 72);
1010
1011 m_bitmap_extra_tray_left_selected = ScalableBitmap(this, "extra_ams_tray_left_selected", 72);
1012 m_bitmap_extra_tray_right_selected = ScalableBitmap(this, "extra_ams_tray_right_selected", 72);
1013 m_bitmap_extra_tray_mid_selected = ScalableBitmap(this, "extra_ams_tray_mid_selected", 72);
1014
1015
1016 m_sizer_body->Add(0, 0, 1, wxEXPAND, 0);
1017 m_sizer_body->Add(m_sizer_edit, 0, wxALIGN_CENTER, 0);
1018 m_sizer_body->Add(0, 0, 0, wxBOTTOM, GetSize().y * 0.12);
1019 SetSizer(m_sizer_body);
1020 Layout();
1021}
#define AMS_CAN_LIB_SIZE
Definition AMSItem.hpp:173
ScalableBitmap m_bitmap_extra_tray_mid_selected
Definition AMSItem.hpp:550
ScalableBitmap m_bitmap_transparent_def
Definition AMSItem.hpp:537
ScalableBitmap m_bitmap_editable_light
Definition AMSItem.hpp:533
ScalableBitmap m_bitmap_readonly
Definition AMSItem.hpp:534
ScalableBitmap m_bitmap_extra_tray_mid_hover
Definition AMSItem.hpp:546
ScalableBitmap m_bitmap_extra_tray_right
Definition AMSItem.hpp:541
ScalableBitmap m_bitmap_extra_tray_right_hover
Definition AMSItem.hpp:545
ScalableBitmap m_bitmap_transparent
Definition AMSItem.hpp:536
ScalableBitmap m_bitmap_readonly_light
Definition AMSItem.hpp:535
ScalableBitmap m_bitmap_extra_tray_left_selected
Definition AMSItem.hpp:548
ScalableBitmap m_bitmap_transparent_lite
Definition AMSItem.hpp:538
ScalableBitmap m_bitmap_extra_tray_right_selected
Definition AMSItem.hpp:549
ScalableBitmap m_bitmap_editable
Definition AMSItem.hpp:532
ScalableBitmap m_bitmap_extra_tray_left
Definition AMSItem.hpp:540
ScalableBitmap m_bitmap_extra_tray_mid
Definition AMSItem.hpp:542
ScalableBitmap m_bitmap_extra_tray_left_hover
Definition AMSItem.hpp:544

References AMS_CAN_LIB_SIZE, m_bitmap_editable, m_bitmap_editable_light, m_bitmap_extra_tray_left, m_bitmap_extra_tray_left_hover, m_bitmap_extra_tray_left_selected, m_bitmap_extra_tray_mid, m_bitmap_extra_tray_mid_hover, m_bitmap_extra_tray_mid_selected, m_bitmap_extra_tray_right, m_bitmap_extra_tray_right_hover, m_bitmap_extra_tray_right_selected, m_bitmap_readonly, m_bitmap_readonly_light, m_bitmap_transparent, m_bitmap_transparent_def, and m_bitmap_transparent_lite.

Referenced by AMSLib().

Here is the caller graph for this function:

◆ doRender()

void Slic3r::GUI::AMSLib::doRender ( wxDC & dc)
protected
1326{
1328 render_lite_lib(dc);
1329 }
1330 else {
1332 }
1333}
void render_lite_lib(wxDC &dc)
Definition AMSItem.cpp:1335
AMSModel m_ams_model
Definition AMSItem.hpp:509
void render_generic_lib(wxDC &dc)
Definition AMSItem.cpp:1465
@ LITE_EXT
Definition AMSItem.hpp:67
@ AMS_LITE
Definition AMSItem.hpp:60

References Slic3r::GUI::AMS_LITE, Slic3r::GUI::LITE_EXT, m_ams_model, m_ext_type, render_generic_lib(), and render_lite_lib().

Referenced by render().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ EableSelected()

void Slic3r::GUI::AMSLib::EableSelected ( )
inline
514{ m_unable_selected = false; };
bool m_unable_selected
Definition AMSItem.hpp:552

References m_unable_selected.

◆ Enable()

bool Slic3r::GUI::AMSLib::Enable ( bool enable = true)
virtual
1823{ return wxWindow::Enable(enable); }

◆ GetLibColour()

wxColour Slic3r::GUI::AMSLib::GetLibColour ( )
1794{ return m_info.material_colour; }
Caninfo m_info
Definition AMSItem.hpp:501

References m_info.

Referenced by Slic3r::GUI::AmsItem::GetTagColr().

Here is the caller graph for this function:

◆ is_selected()

bool Slic3r::GUI::AMSLib::is_selected ( )
inline
517{return m_selected;};
bool m_selected
Definition AMSItem.hpp:554

References m_selected.

Referenced by Slic3r::GUI::AMSControl::SwitchAms().

Here is the caller graph for this function:

◆ msw_rescale()

void Slic3r::GUI::AMSLib::msw_rescale ( )
1826{
1827 //m_bitmap_transparent.msw_rescale();
1828 m_bitmap_transparent_def.msw_rescale();
1829 m_bitmap_transparent_lite.msw_rescale();
1830
1831 m_bitmap_editable = ScalableBitmap(this, "ams_editable", 14);
1832 m_bitmap_editable_light = ScalableBitmap(this, "ams_editable_light", 14);
1833 m_bitmap_readonly = ScalableBitmap(this, "ams_readonly", 14);
1834 m_bitmap_readonly_light = ScalableBitmap(this, "ams_readonly_light", 14);
1835 m_bitmap_transparent = ScalableBitmap(this, "transparent_ams_lib", 76);
1836 m_bitmap_transparent_def = ScalableBitmap(this, "transparent_ams_lib", 76);
1837
1838 m_bitmap_extra_tray_left = ScalableBitmap(this, "extra_ams_tray_left", 72);
1839 m_bitmap_extra_tray_right = ScalableBitmap(this, "extra_ams_tray_right", 72);
1840 m_bitmap_extra_tray_mid = ScalableBitmap(this, "extra_ams_tray_mid", 72);
1841
1842 m_bitmap_extra_tray_left_hover = ScalableBitmap(this, "extra_ams_tray_left_hover", 72);
1843 m_bitmap_extra_tray_right_hover = ScalableBitmap(this, "extra_ams_tray_right_hover", 72);
1844 m_bitmap_extra_tray_mid_hover = ScalableBitmap(this, "extra_ams_tray_mid_hover", 72);
1845
1846 m_bitmap_extra_tray_left_selected = ScalableBitmap(this, "extra_ams_tray_left_selected", 72);
1847 m_bitmap_extra_tray_right_selected = ScalableBitmap(this, "extra_ams_tray_right_selected", 72);
1848 m_bitmap_extra_tray_mid_selected = ScalableBitmap(this, "extra_ams_tray_mid_selected", 72);
1849
1850 Layout();
1851 Refresh();
1852}

References m_bitmap_editable, m_bitmap_editable_light, m_bitmap_extra_tray_left, m_bitmap_extra_tray_left_hover, m_bitmap_extra_tray_left_selected, m_bitmap_extra_tray_mid, m_bitmap_extra_tray_mid_hover, m_bitmap_extra_tray_mid_selected, m_bitmap_extra_tray_right, m_bitmap_extra_tray_right_hover, m_bitmap_extra_tray_right_selected, m_bitmap_readonly, m_bitmap_readonly_light, m_bitmap_transparent, m_bitmap_transparent_def, and m_bitmap_transparent_lite.

Referenced by Slic3r::GUI::AmsItem::msw_rescale().

Here is the caller graph for this function:

◆ on_enter_window()

void Slic3r::GUI::AMSLib::on_enter_window ( wxMouseEvent & evt)
protected
1024{
1025 m_hover = true;
1026 Refresh();
1027}
bool m_hover
Definition AMSItem.hpp:555

References m_hover, and Slic3r::GUI::wxMouseEvent.

Referenced by AMSLib().

Here is the caller graph for this function:

◆ on_leave_window()

void Slic3r::GUI::AMSLib::on_leave_window ( wxMouseEvent & evt)
protected
1030{
1031 m_hover = false;
1032 Refresh();
1033}

References m_hover, and Slic3r::GUI::wxMouseEvent.

Referenced by AMSLib().

Here is the caller graph for this function:

◆ on_left_down()

void Slic3r::GUI::AMSLib::on_left_down ( wxMouseEvent & evt)
protected
1036{
1037 if (m_info.material_state != AMSCanType::AMS_CAN_TYPE_EMPTY && m_info.material_state != AMSCanType::AMS_CAN_TYPE_NONE) {
1038 auto size = GetSize();
1039 auto pos = evt.GetPosition();
1040 if (m_info.material_state == AMSCanType::AMS_CAN_TYPE_THIRDBRAND || m_info.material_state == AMSCanType::AMS_CAN_TYPE_BRAND ||
1041 m_info.material_state == AMSCanType::AMS_CAN_TYPE_VIRTUAL) {
1042
1043 auto left = FromDIP(10);
1044 auto right = size.x - FromDIP(10);
1045 auto top = 0;
1046 auto bottom = 0;
1047
1049 top = (size.y - FromDIP(15) - m_bitmap_editable_light.GetBmpSize().y);
1050 bottom = size.y - FromDIP(15);
1051 }
1052 else if (m_ams_model == AMSModel::AMS_LITE) {
1053 top = (size.y - FromDIP(20) - m_bitmap_editable_light.GetBmpSize().y);
1054 bottom = size.y - FromDIP(20);
1055 }
1056
1057 if (pos.x >= left && pos.x <= right && pos.y >= top && top <= bottom) {
1058 if (m_selected) {
1059 if (m_info.material_state == AMSCanType::AMS_CAN_TYPE_VIRTUAL) {
1060 post_event(wxCommandEvent(EVT_VAMS_ON_FILAMENT_EDIT));
1061 }
1062 else {
1063 post_event(wxCommandEvent(EVT_AMS_ON_FILAMENT_EDIT));
1064 }
1065 } else {
1066 BOOST_LOG_TRIVIAL(trace) << "current amslib is not selected";
1067 }
1068 }
1069 }
1070 }
1071}
void post_event(wxCommandEvent &&event)
Definition AMSItem.cpp:1806
@ EXT_AMS
Definition AMSItem.hpp:58
@ N3S_AMS
Definition AMSItem.hpp:62
@ GENERIC_AMS
Definition AMSItem.hpp:59
@ N3F_AMS
Definition AMSItem.hpp:61
@ AMS_CAN_TYPE_NONE
Definition AMSItem.hpp:139
@ AMS_CAN_TYPE_BRAND
Definition AMSItem.hpp:140
@ AMS_CAN_TYPE_THIRDBRAND
Definition AMSItem.hpp:141
@ AMS_CAN_TYPE_VIRTUAL
Definition AMSItem.hpp:143
@ AMS_CAN_TYPE_EMPTY
Definition AMSItem.hpp:142
Vec3d pos(const Pt &p)
Definition ReprojectPointsOnMesh.hpp:16
void trace(unsigned int level, const char *message)
Definition utils.cpp:247
@ right
Definition MarchingSquares.hpp:190
@ left
Definition MarchingSquares.hpp:188

References Slic3r::GUI::AMS_CAN_TYPE_BRAND, Slic3r::GUI::AMS_CAN_TYPE_EMPTY, Slic3r::GUI::AMS_CAN_TYPE_NONE, Slic3r::GUI::AMS_CAN_TYPE_THIRDBRAND, Slic3r::GUI::AMS_CAN_TYPE_VIRTUAL, Slic3r::GUI::AMS_LITE, Slic3r::GUI::EXT_AMS, Slic3r::GUI::GENERIC_AMS, m_ams_model, m_bitmap_editable_light, m_info, m_selected, Slic3r::GUI::N3F_AMS, Slic3r::GUI::N3S_AMS, post_event(), Slic3r::trace(), and Slic3r::GUI::wxMouseEvent.

Referenced by AMSLib().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ on_pass_road()

void Slic3r::GUI::AMSLib::on_pass_road ( bool pass)
1770{
1771 if (m_pass_road != pass) {
1772 m_pass_road = pass;
1773 Refresh();
1774 }
1775}
bool m_pass_road
Definition AMSItem.hpp:566

References m_pass_road.

◆ OnSelected()

void Slic3r::GUI::AMSLib::OnSelected ( )
1797{
1798 if (!wxWindow::IsEnabled()) return;
1799 if (m_unable_selected) return;
1800
1801 post_event(wxCommandEvent(EVT_AMS_ON_SELECTED));
1802 m_selected = true;
1803 Refresh();
1804}

References m_selected, m_unable_selected, and post_event().

Referenced by Slic3r::GUI::AmsItem::AddCan(), Slic3r::GUI::AmsItem::AddLiteCan(), and Slic3r::GUI::AmsItem::SelectCan().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ paintEvent()

void Slic3r::GUI::AMSLib::paintEvent ( wxPaintEvent & evt)
protected
1075{
1076 wxPaintDC dc(this);
1077 render(dc);
1078}
void render(wxDC &dc)
Definition AMSItem.cpp:1080

References render().

Referenced by AMSLib().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ post_event()

void Slic3r::GUI::AMSLib::post_event ( wxCommandEvent && event)
1807{
1808 //int tray_id = atoi(m_ams_id.c_str()) * 4 + atoi(m_info.can_id.c_str());
1809 //event.SetString(m_info.can_id);
1810 event.SetString(m_slot_id);
1811 event.SetInt(std::stoi(m_ams_id));
1812 event.SetEventObject(m_parent);
1813 wxPostEvent(m_parent, event);
1814 event.Skip();
1815}
std::string m_slot_id
Definition AMSItem.hpp:505
std::string m_ams_id
Definition AMSItem.hpp:504

References m_ams_id, and m_slot_id.

Referenced by on_left_down(), and OnSelected().

Here is the caller graph for this function:

◆ render()

void Slic3r::GUI::AMSLib::render ( wxDC & dc)
protected
1081{
1082#ifdef __WXMSW__
1083 wxSize size = GetSize();
1084 wxMemoryDC memdc;
1085 wxBitmap bmp(size.x, size.y);
1086 memdc.SelectObject(bmp);
1087 memdc.Blit({0, 0}, size, &dc, {0, 0});
1088
1089 {
1090 wxGCDC dc2(memdc);
1091 doRender(dc2);
1092 }
1093
1094 memdc.SelectObject(wxNullBitmap);
1095 dc.DrawBitmap(bmp, 0, 0);
1096#else
1097 doRender(dc);
1098#endif
1099
1100 // text
1102 render_lite_text(dc);
1103 }
1104 else{
1106 }
1107}
void render_generic_text(wxDC &dc)
Definition AMSItem.cpp:1192
void render_lite_text(wxDC &dc)
Definition AMSItem.cpp:1109
void doRender(wxDC &dc)
Definition AMSItem.cpp:1325

References Slic3r::GUI::AMS_LITE, doRender(), Slic3r::GUI::EXT_AMS, Slic3r::GUI::LITE_EXT, m_ams_model, m_ext_type, render_generic_text(), and render_lite_text().

Referenced by paintEvent().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ render_generic_lib()

void Slic3r::GUI::AMSLib::render_generic_lib ( wxDC & dc)
protected
1466{
1467 wxSize size = GetSize();
1468 auto tmp_lib_colour = m_info.material_colour;
1469 change_the_opacity(tmp_lib_colour);
1470
1471 auto temp_bitmap_third = m_bitmap_editable_light;
1472 auto temp_bitmap_brand = m_bitmap_readonly_light;
1473
1474 //draw def background
1475 dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
1476 dc.SetBrush(wxBrush(AMS_CONTROL_DEF_LIB_BK_COLOUR));
1477 dc.DrawRoundedRectangle(FromDIP(2), FromDIP(2), size.x - FromDIP(4), size.y - FromDIP(3), m_radius);
1478
1479 if (tmp_lib_colour.GetLuminance() < 0.6) {
1480 temp_bitmap_third = m_bitmap_editable_light;
1481 temp_bitmap_brand = m_bitmap_readonly_light;
1482 }
1483 else {
1484 temp_bitmap_third = m_bitmap_editable;
1485 temp_bitmap_brand = m_bitmap_readonly;
1486 }
1487
1488 if (m_info.material_remain < 50) {
1489 temp_bitmap_third = m_bitmap_editable;
1490 temp_bitmap_brand = m_bitmap_readonly;
1491 }
1492
1493 if (tmp_lib_colour.Alpha() == 0) {
1494 temp_bitmap_third = m_bitmap_editable;
1495 temp_bitmap_brand = m_bitmap_readonly;
1496 }
1497
1498 // View-only mode forces the read-only (eye) icon even for third-party spools.
1499 if (m_view_only) {
1500 temp_bitmap_third = temp_bitmap_brand;
1501 }
1502
1503 dc.SetPen(wxPen(tmp_lib_colour, 1, wxPENSTYLE_SOLID));
1504 dc.SetBrush(wxBrush(tmp_lib_colour));
1505
1506 //draw remain
1507 auto alpha = m_info.material_colour.Alpha();
1508 int height = size.y;
1509 int curr_height = height * float(m_info.material_remain * 1.0 / 100.0);
1510 if (curr_height != 0) { curr_height = std::max(curr_height, FromDIP(2)); }/*STUDIO-11323 too small to show, enlarge it*/
1511 dc.SetFont(::Label::Body_13);
1512
1513 int top = height - curr_height;
1514
1515 if (m_ams_model == EXT_AMS){
1516 wxRect color_rect(FromDIP(1), FromDIP(1), size.x - FromDIP(2), size.y - FromDIP(1));
1517 if ((m_info.ctype == 0 || m_info.ctype == 1) && m_info.material_cols.size() > 1 && alpha != 0) {
1518 if (m_info.ctype == 0) {
1519 fill_gradient_rect_east(dc, color_rect, m_info.material_cols.front(), m_info.material_cols.back());
1520 }
1521 else {
1522 int cols_size = static_cast<int>(m_info.material_cols.size());
1523 for (int i = 0; i < cols_size; i++) {
1524 dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
1525 dc.SetBrush(wxBrush(m_info.material_cols[i]));
1526 int x = color_rect.x + color_rect.width * i / cols_size;
1527 int next_x = color_rect.x + color_rect.width * (i + 1) / cols_size;
1528 dc.DrawRectangle(x, color_rect.y, next_x - x, color_rect.height);
1529 }
1530 }
1531 dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
1532 dc.SetBrush(wxBrush(tmp_lib_colour));
1533 }
1534 else {
1535 dc.DrawRoundedRectangle(color_rect.x, color_rect.y, color_rect.width, color_rect.height, m_radius - 1);
1536 }
1537 if (alpha == 0) {
1538 dc.DrawBitmap(m_bitmap_transparent_def.bmp(), FromDIP(2), FromDIP(2));
1539 }
1540 else if (alpha != 255 && alpha != 254) {
1541 if (transparent_changed) {
1542 transparent_changed = false;
1543 }
1544 dc.DrawBitmap(m_bitmap_transparent.bmp(), FromDIP(2), FromDIP(2));
1545 }
1546
1547 if (!m_disable_mode) {
1548 // edit icon
1549 if (m_info.material_state != AMSCanType::AMS_CAN_TYPE_EMPTY && m_info.material_state != AMSCanType::AMS_CAN_TYPE_NONE) {
1550 if (m_info.material_state == AMSCanType::AMS_CAN_TYPE_THIRDBRAND || m_info.material_state == AMSCanType::AMS_CAN_TYPE_VIRTUAL)
1551 dc.DrawBitmap(temp_bitmap_third.bmp(), (size.x - temp_bitmap_third.GetBmpSize().x) / 2, (size.y - FromDIP(10) - temp_bitmap_third.GetBmpSize().y));
1552 if (m_info.material_state == AMSCanType::AMS_CAN_TYPE_BRAND)
1553 dc.DrawBitmap(temp_bitmap_brand.bmp(), (size.x - temp_bitmap_brand.GetBmpSize().x) / 2, (size.y - FromDIP(10) - temp_bitmap_brand.GetBmpSize().y));
1554 }
1555 }
1556
1557 dc.SetPen(wxPen(wxColour(130, 130, 128), 1, wxPENSTYLE_SOLID));
1558 dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH));
1559#ifdef __APPLE__
1560 dc.DrawRoundedRectangle(FromDIP(1), FromDIP(1), size.x - FromDIP(2), size.y - FromDIP(1), m_radius);
1561#else
1562 dc.DrawRoundedRectangle(FromDIP(1), FromDIP(1), size.x - FromDIP(2), size.y - FromDIP(1), m_radius);
1563#endif
1564 if (m_selected) {
1565 dc.SetPen(wxPen(AMS_CONTROL_BRAND_COLOUR, 3, wxPENSTYLE_SOLID));
1566 //dc.SetPen(wxPen(tmp_lib_colour, 2, wxPENSTYLE_SOLID));
1567 if (tmp_lib_colour.Alpha() == 0) {
1568 dc.SetPen(wxPen(wxColour(tmp_lib_colour.Red(), tmp_lib_colour.Green(), tmp_lib_colour.Blue(), 128), 3, wxPENSTYLE_SOLID));
1569 }
1570 dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH));
1571#ifdef __APPLE__
1572 dc.DrawRoundedRectangle(FromDIP(1), FromDIP(1), size.x - FromDIP(2), size.y - FromDIP(2), 0);
1573#else
1574 dc.DrawRoundedRectangle(0, 0, size.x, size.y, m_radius);
1575#endif
1576
1577 dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
1578 dc.SetBrush(wxBrush(tmp_lib_colour));
1579 }
1580
1581 if (!m_selected && m_hover) {
1582 dc.SetPen(wxPen(AMS_CONTROL_BRAND_COLOUR, 3, wxPENSTYLE_SOLID));
1583 dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH));
1584#ifdef __APPLE__
1585 dc.DrawRoundedRectangle(FromDIP(1), FromDIP(1), size.x - FromDIP(2), size.y - FromDIP(2), 0);
1586#else
1587 dc.DrawRoundedRectangle(0, 0, size.x, size.y, m_radius);
1588#endif
1589 dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
1590 dc.SetBrush(wxBrush(tmp_lib_colour));
1591 }
1592 return;
1593 }
1594
1595 if (curr_height >= FromDIP(1)) {
1596
1597 //transparent
1598 if (alpha == 0) {
1599 dc.DrawBitmap(m_bitmap_transparent_def.bmp(), FromDIP(2), FromDIP(2));
1600 }
1601 else if (alpha != 255 && alpha != 254) {
1602 if (transparent_changed) {
1603 std::string rgb = (tmp_lib_colour.GetAsString(wxC2S_HTML_SYNTAX)).ToStdString();
1604 if (rgb.size() == 9) {
1605 //delete alpha value
1606 rgb = rgb.substr(0, rgb.size() - 2);
1607 }
1608 float alpha_f = 0.7 * tmp_lib_colour.Alpha() / 255.0;
1609 std::vector<std::string> replace;
1610 replace.push_back(rgb);
1611 std::string fill_replace = "fill-opacity=\"" + std::to_string(alpha_f);
1612 replace.push_back(fill_replace);
1613 m_bitmap_transparent = ScalableBitmap(this, "transparent_ams_lib", 76, false, false, true, replace);
1614 transparent_changed = false;
1615
1616 }
1617 dc.DrawBitmap(m_bitmap_transparent.bmp(), FromDIP(2), FromDIP(2));
1618 }
1619 //gradient
1620 if (m_info.material_cols.size() > 1) {
1621 auto left = FromDIP(2);
1622 float total_width = size.x - FromDIP(4);
1623 int gwidth = std::round(total_width / (m_info.material_cols.size() - 1));
1624 //gradient
1625 if (m_info.ctype == 0) {
1626 for (int i = 0; i < m_info.material_cols.size() - 1; i++) {
1627
1628 if ((left + gwidth) > (size.x)) {
1629 gwidth = (size.x) - left;
1630 }
1631
1632 auto rect = wxRect(left, height - curr_height, gwidth, curr_height);
1633 fill_gradient_rect_east(dc, rect, m_info.material_cols[i], m_info.material_cols[i + 1]);
1634 left += gwidth;
1635 }
1636 }
1637 else {
1638 //multicolour
1639 gwidth = std::round(total_width / m_info.material_cols.size());
1640 for (int i = 0; i < m_info.material_cols.size(); i++) {
1641 dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
1642 dc.SetBrush(wxBrush(m_info.material_cols[i]));
1643 if (i == 0 || i == m_info.material_cols.size() - 1) {
1644#ifdef __APPLE__
1645 dc.DrawRoundedRectangle(left + gwidth * i - FromDIP(1), height - curr_height, gwidth, curr_height, m_radius);
1646#else
1647 dc.DrawRoundedRectangle(left + gwidth * i, height - curr_height, gwidth, curr_height, m_radius - 1);
1648#endif
1649 //add rectangle
1650 int dr_gwidth = std::round(gwidth * 0.6);
1651 if (i == 0) {
1652 dc.DrawRectangle(left + gwidth - dr_gwidth, height - curr_height, dr_gwidth, curr_height);
1653 }
1654 else {
1655 dc.DrawRectangle(left + gwidth*i, height - curr_height, dr_gwidth, curr_height);
1656 }
1657 }
1658 else {
1659 dc.DrawRectangle(left + gwidth * i, height - curr_height, gwidth, curr_height);
1660 }
1661 }
1662 //reset pen and brush
1663 if (m_selected || m_hover) {
1664 dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
1665 dc.SetBrush(wxBrush(tmp_lib_colour));
1666 }
1667 else {
1668 dc.SetPen(wxPen(tmp_lib_colour, 1, wxPENSTYLE_SOLID));
1669 dc.SetBrush(wxBrush(tmp_lib_colour));
1670 }
1671 }
1672 }
1673 else {
1674 auto brush = dc.GetBrush();
1675 if (alpha != 0 && alpha != 255 && alpha != 254) dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH));
1676 dc.DrawRoundedRectangle(FromDIP(2), FromDIP(1) + top, size.x - FromDIP(4), curr_height, m_radius - 1);
1677 dc.SetBrush(brush);
1678 }
1679 }
1680
1681 if (top > 2) {
1682 if (curr_height >= FromDIP(1)) {
1683 //dc.DrawLine(FromDIP(2), top, size.x - FromDIP(4), top);
1684 if (alpha != 255 && alpha != 254) {
1685 dc.SetPen(wxPen(*wxWHITE));
1686 dc.SetBrush(wxBrush(*wxWHITE));
1687#ifdef __APPLE__
1688 dc.DrawRoundedRectangle(FromDIP(2), FromDIP(1) , size.x - FromDIP(4), top, m_radius);
1689#else
1690 dc.DrawRoundedRectangle(FromDIP(2), FromDIP(1) , size.x - FromDIP(4), top, m_radius - 1);
1691#endif
1692 }
1693 if (tmp_lib_colour.Red() > 238 && tmp_lib_colour.Green() > 238 && tmp_lib_colour.Blue() > 238) {
1694 dc.SetPen(wxPen(wxColour(130, 129, 128), 1, wxPENSTYLE_SOLID));
1695 dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH));
1696 if (m_info.material_cols.size() <= 1){
1697 dc.DrawLine(FromDIP(2), top, size.x - FromDIP(4), top);
1698 }
1699 }
1700 }
1701 else {
1702 dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH));
1703 if (tmp_lib_colour.Red() > 238 && tmp_lib_colour.Green() > 238 && tmp_lib_colour.Blue() > 238) {
1704 dc.SetPen(wxPen(wxColour(130, 129, 128), 2, wxPENSTYLE_SOLID));
1705 }
1706 else {
1707 dc.SetPen(wxPen(tmp_lib_colour, 2, wxPENSTYLE_SOLID));
1708 }
1709
1710#ifdef __APPLE__
1711 dc.DrawLine(FromDIP(5), FromDIP(4) + height - FromDIP(2), size.x - FromDIP(5), FromDIP(4) + height - FromDIP(2));
1712 dc.DrawLine(FromDIP(6), FromDIP(4) + height - FromDIP(1), size.x - FromDIP(6), FromDIP(4) + height - FromDIP(1));
1713#else
1714 //dc.DrawLine(FromDIP(2), FromDIP(0 + height), FromDIP(size.x - 4), FromDIP(height));
1715 dc.DrawLine(FromDIP(2), height - FromDIP(1), size.x - FromDIP(4), height - FromDIP(1));
1716#endif
1717 }
1718 }
1719
1720 //border
1721 dc.SetPen(wxPen(wxColour(130, 130, 128), 1, wxPENSTYLE_SOLID));
1722 dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH));
1723#ifdef __APPLE__
1724 dc.DrawRoundedRectangle(FromDIP(1), FromDIP(1), size.x - FromDIP(2), size.y - FromDIP(1), m_radius);
1725#else
1726 dc.DrawRoundedRectangle(FromDIP(1), FromDIP(1), size.x - FromDIP(2), size.y - FromDIP(1), m_radius);
1727#endif
1728
1729 if (m_selected) {
1730 dc.SetPen(wxPen(AMS_CONTROL_BRAND_COLOUR, 3, wxPENSTYLE_SOLID));
1731 //dc.SetPen(wxPen(tmp_lib_colour, 3, wxPENSTYLE_SOLID));
1732 if (tmp_lib_colour.Alpha() == 0) {
1733 dc.SetPen(wxPen(wxColour(tmp_lib_colour.Red(), tmp_lib_colour.Green(), tmp_lib_colour.Blue(), 128), 3, wxPENSTYLE_SOLID));
1734 }
1735 dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH));
1736#ifdef __APPLE__
1737 dc.DrawRoundedRectangle(FromDIP(1), FromDIP(1), size.x - FromDIP(2), size.y - FromDIP(2), 0);
1738#else
1739 dc.DrawRoundedRectangle(0, 0, size.x, size.y, m_radius);
1740#endif
1741 dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
1742 dc.SetBrush(wxBrush(tmp_lib_colour));
1743 }
1744
1745 if (!m_selected && m_hover) {
1746 dc.SetPen(wxPen(AMS_CONTROL_BRAND_COLOUR, 3, wxPENSTYLE_SOLID));
1747 dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH));
1748#ifdef __APPLE__
1749 dc.DrawRoundedRectangle(FromDIP(1), FromDIP(1), size.x - FromDIP(2), size.y - FromDIP(2), 0);
1750#else
1751 dc.DrawRoundedRectangle(0, 0, size.x, size.y, m_radius);
1752#endif
1753 dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
1754 dc.SetBrush(wxBrush(tmp_lib_colour));
1755 }
1756
1757 if (!m_disable_mode) {
1758 // edit icon
1759 if (m_info.material_state != AMSCanType::AMS_CAN_TYPE_EMPTY && m_info.material_state != AMSCanType::AMS_CAN_TYPE_NONE)
1760 {
1761 if (m_info.material_state == AMSCanType::AMS_CAN_TYPE_THIRDBRAND || m_info.material_state == AMSCanType::AMS_CAN_TYPE_VIRTUAL)
1762 dc.DrawBitmap(temp_bitmap_third.bmp(), (size.x - temp_bitmap_third.GetBmpSize().x) / 2, (size.y - FromDIP(10) - temp_bitmap_third.GetBmpSize().y));
1763 if (m_info.material_state == AMSCanType::AMS_CAN_TYPE_BRAND)
1764 dc.DrawBitmap(temp_bitmap_brand.bmp(), (size.x - temp_bitmap_brand.GetBmpSize().x) / 2, (size.y - FromDIP(10) - temp_bitmap_brand.GetBmpSize().y));
1765 }
1766 }
1767}
#define AMS_CONTROL_BRAND_COLOUR
Definition AMSItem.hpp:36
static wxFont Body_13
Definition Label.hpp:54
double m_radius
Definition AMSItem.hpp:560
bool transparent_changed
Definition AMSItem.hpp:508
bool m_view_only
Definition AMSItem.hpp:565
bool m_disable_mode
Definition AMSItem.hpp:564
void fill_gradient_rect_east(wxDC &dc, const wxRect &rect, const wxColour &from, const wxColour &to)
Definition FilamentBitmapUtils.cpp:76
coord_t height(const BoundingBox &box)
Definition Arrange.cpp:1185
void change_the_opacity(wxColour &colour)
Definition DeviceManager.cpp:6154

References Slic3r::GUI::AMS_CAN_TYPE_BRAND, Slic3r::GUI::AMS_CAN_TYPE_EMPTY, Slic3r::GUI::AMS_CAN_TYPE_NONE, Slic3r::GUI::AMS_CAN_TYPE_THIRDBRAND, Slic3r::GUI::AMS_CAN_TYPE_VIRTUAL, AMS_CONTROL_BRAND_COLOUR, AMS_CONTROL_DEF_LIB_BK_COLOUR, Label::Body_13, Slic3r::change_the_opacity(), Slic3r::GUI::EXT_AMS, Slic3r::GUI::fill_gradient_rect_east(), m_ams_model, m_bitmap_editable, m_bitmap_editable_light, m_bitmap_readonly, m_bitmap_readonly_light, m_bitmap_transparent, m_bitmap_transparent_def, m_disable_mode, m_hover, m_info, m_radius, m_selected, m_view_only, and transparent_changed.

Referenced by doRender().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ render_generic_text()

void Slic3r::GUI::AMSLib::render_generic_text ( wxDC & dc)
protected
1193{
1194 bool show_k_value = true;
1195 if (m_info.material_name.empty()) {
1196 show_k_value = false;
1197 }
1198 else if (m_info.cali_idx == -1 || (m_obj && (CalibUtils::get_selected_calib_idx(m_obj->pa_calib_tab, m_info.cali_idx) == -1))) {
1199 if (m_obj && m_obj->GetConfig()->SupportCalibrationPA_FlowAuto())
1200 show_k_value = false;
1201 else
1202 get_default_k_n_value(m_info.filament_id, m_info.k, m_info.n);
1203 }
1204 else if (abs(m_info.k) < EPSILON) {
1205 show_k_value = false;
1206 }
1207
1208 auto tmp_lib_colour = m_info.material_colour;
1209 change_the_opacity(tmp_lib_colour);
1210
1211 auto temp_text_colour = AMS_CONTROL_GRAY800;
1212
1213 if (tmp_lib_colour.GetLuminance() < 0.6) {
1214 temp_text_colour = AMS_CONTROL_WHITE_COLOUR;
1215 }
1216 else {
1217 temp_text_colour = AMS_CONTROL_GRAY800;
1218 }
1219
1220 if (m_info.material_remain < 50) {
1221 temp_text_colour = AMS_CONTROL_GRAY800;
1222 }
1223
1224 if (tmp_lib_colour.Alpha() == 0) {
1225 temp_text_colour = AMS_CONTROL_GRAY800;
1226 }
1227
1228 dc.SetFont(::Label::Body_13);
1229 dc.SetTextForeground(temp_text_colour);
1230 auto alpha = m_info.material_colour.Alpha();
1231 if (alpha != 0 && alpha != 255 && alpha != 254) {
1232 dc.SetTextForeground(*wxBLACK);
1233 }
1234
1235 auto libsize = GetSize();
1236 if (m_info.material_state == AMSCanType::AMS_CAN_TYPE_THIRDBRAND
1237 || m_info.material_state == AMSCanType::AMS_CAN_TYPE_BRAND
1238 || m_info.material_state == AMSCanType::AMS_CAN_TYPE_VIRTUAL) {
1239
1240 if (m_info.material_name.empty() /*&& m_info.material_state != AMSCanType::AMS_CAN_TYPE_VIRTUAL*/) {
1241 auto tsize = dc.GetMultiLineTextExtent("?");
1242 auto pot = wxPoint(0, 0);
1243
1244 if (m_obj && show_k_value) {
1245 pot = wxPoint((libsize.x - tsize.x) / 2, (libsize.y - tsize.y) / 2 - FromDIP(9));
1246 }
1247 else {
1248 pot = wxPoint((libsize.x - tsize.x) / 2, (libsize.y - tsize.y) / 2 + FromDIP(3));
1249 }
1250 dc.DrawText(L("?"), pot);
1251
1252 }
1253 else {
1254 auto tsize = dc.GetMultiLineTextExtent(m_info.material_name);
1255 std::vector<std::string> split_char_arr = { " ", "-" };
1256 bool has_split = false;
1257 std::string has_split_char = " ";
1258
1259 for (std::string split_char : split_char_arr) {
1260 if (m_info.material_name.find(split_char) != std::string::npos) {
1261 has_split = true;
1262 has_split_char = split_char;
1263 }
1264 }
1265
1266
1267 if (has_split) {
1268 dc.SetFont(::Label::Body_12);
1269
1270 auto line_top = m_info.material_name.substr(0, m_info.material_name.find(has_split_char));
1271 auto line_bottom = m_info.material_name.substr(m_info.material_name.find(has_split_char));
1272
1273 auto line_top_tsize = dc.GetMultiLineTextExtent(line_top);
1274 auto line_bottom_tsize = dc.GetMultiLineTextExtent(line_bottom);
1275
1276 if (!m_show_kn) {
1277 auto pot_top = wxPoint((libsize.x - line_top_tsize.x) / 2, (libsize.y - line_top_tsize.y) / 2 - line_top_tsize.y + FromDIP(6));
1278 dc.DrawText(line_top, pot_top);
1279
1280
1281 auto pot_bottom = wxPoint((libsize.x - line_bottom_tsize.x) / 2, (libsize.y - line_bottom_tsize.y) / 2 + FromDIP(4));
1282 dc.DrawText(line_bottom, pot_bottom);
1283 }
1284 else {
1285 auto pot_top = wxPoint((libsize.x - line_top_tsize.x) / 2, (libsize.y - line_top_tsize.y) / 2 - line_top_tsize.y - FromDIP(6));
1286 dc.DrawText(line_top, pot_top);
1287
1288 auto pot_bottom = wxPoint((libsize.x - line_bottom_tsize.x) / 2, (libsize.y - line_bottom_tsize.y) / 2 - FromDIP(8));
1289 dc.DrawText(line_bottom, pot_bottom);
1290 }
1291
1292
1293 }
1294 else {
1295 auto pot = wxPoint(0, 0);
1296 if (m_obj && show_k_value) {
1297 pot = wxPoint((libsize.x - tsize.x) / 2, (libsize.y - tsize.y) / 2 - FromDIP(9));
1298 } else {
1299 pot = wxPoint((libsize.x - tsize.x) / 2, (libsize.y - tsize.y) / 2 + FromDIP(3));
1300 }
1301 dc.DrawText(m_info.material_name, pot);
1302 }
1303 }
1304
1305 //draw k&n
1306 if (m_obj && show_k_value) {
1307 if (m_show_kn) {
1308 wxString str_k = wxString::Format("K %1.3f", m_info.k);
1309 wxString str_n = wxString::Format("N %1.3f", m_info.n);
1310 dc.SetFont(::Label::Body_11);
1311 auto tsize = dc.GetMultiLineTextExtent(str_k);
1312 auto pot_k = wxPoint((libsize.x - tsize.x) / 2, (libsize.y - tsize.y) / 2 - FromDIP(9) + tsize.y);
1313 dc.DrawText(str_k, pot_k);
1314 }
1315 }
1316 }
1317
1318 if (m_info.material_state == AMSCanType::AMS_CAN_TYPE_EMPTY) {
1319 auto tsize = dc.GetMultiLineTextExtent(_L("Empty"));
1320 auto pot = wxPoint((libsize.x - tsize.x) / 2, (libsize.y - tsize.y) / 2 + FromDIP(3));
1321 dc.DrawText(_L("Empty"), pot);
1322 }
1323}
#define AMS_CONTROL_WHITE_COLOUR
Definition AMSItem.hpp:42
#define AMS_CONTROL_GRAY800
Definition AMSItem.hpp:38
#define EPSILON
Definition ColorUtils.cpp:64
#define L(s)
Definition ExtrusionEntity.cpp:25
#define _L(s)
Definition OBJ.cpp:34
static wxFont Body_11
Definition Label.hpp:57
static wxFont Body_12
Definition Label.hpp:55
MachineObject * m_obj
Definition AMSItem.hpp:502
bool m_show_kn
Definition AMSItem.hpp:556
static int get_selected_calib_idx(const std::vector< PACalibResult > &pa_calib_values, int cali_idx)
Definition CalibUtils.cpp:1459
void get_default_k_n_value(const std::string &filament_id, float &k, float &n)
Definition CalibUtils.cpp:103

References _L, Slic3r::GUI::AMS_CAN_TYPE_BRAND, Slic3r::GUI::AMS_CAN_TYPE_EMPTY, Slic3r::GUI::AMS_CAN_TYPE_THIRDBRAND, Slic3r::GUI::AMS_CAN_TYPE_VIRTUAL, AMS_CONTROL_GRAY800, AMS_CONTROL_WHITE_COLOUR, Label::Body_11, Label::Body_12, Label::Body_13, Slic3r::change_the_opacity(), EPSILON, Slic3r::GUI::get_default_k_n_value(), Slic3r::GUI::CalibUtils::get_selected_calib_idx(), L, m_info, m_obj, and m_show_kn.

Referenced by render().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ render_lite_lib()

void Slic3r::GUI::AMSLib::render_lite_lib ( wxDC & dc)
protected
1336{
1337 wxSize size = GetSize();
1338 auto libsize = AMS_LITE_CAN_LIB_SIZE;
1339 ScalableBitmap tray_bitmap, tray_bitmap_hover, tray_bitmap_selected;
1344 }
1345 else{
1346 tray_bitmap = m_bitmap_extra_tray_mid;
1347 tray_bitmap_hover = m_bitmap_extra_tray_mid_hover;
1348 tray_bitmap_selected = m_bitmap_extra_tray_mid_selected;
1349 }
1350
1351 auto tmp_lib_colour = m_info.material_colour;
1352 change_the_opacity(tmp_lib_colour);
1353
1354 auto temp_bitmap_third = m_bitmap_editable_light;
1355 auto temp_bitmap_brand = m_bitmap_readonly_light;
1356
1357 //draw road
1358
1359
1360 dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxPENSTYLE_SOLID));
1361 dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH));
1362
1363 if (m_pass_road) {
1364 dc.SetPen(wxPen(m_info.material_colour, 4, wxPENSTYLE_SOLID));
1365 }
1366
1367 if (m_can_index == 0 || m_can_index == 3) {
1368 dc.DrawLine(size.x / 2, size.y / 2, size.x / 2, size.y);
1369 }
1370 else {
1371 dc.DrawLine(size.x / 2, size.y / 2, size.x / 2, 0);
1372 }
1373
1374 //draw def background
1375 dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
1378 dc.DrawRoundedRectangle(FromDIP(10), FromDIP(6), libsize.x - FromDIP(20), libsize.y - FromDIP(12), 0);
1379 }
1380 dc.DrawRoundedRectangle(FromDIP(10), FromDIP(10), libsize.x - FromDIP(20), libsize.y - FromDIP(20), 0);
1381
1382 if (tmp_lib_colour.GetLuminance() < 0.6) {
1383 temp_bitmap_third = m_bitmap_editable_light;
1384 temp_bitmap_brand = m_bitmap_readonly_light;
1385 }
1386 else {
1387 temp_bitmap_third = m_bitmap_editable;
1388 temp_bitmap_brand = m_bitmap_readonly;
1389 }
1390
1391 if (m_info.material_remain < 50) {
1392 temp_bitmap_third = m_bitmap_editable;
1393 temp_bitmap_brand = m_bitmap_readonly;
1394 }
1395
1396 if (tmp_lib_colour.Alpha() == 0) {
1397 temp_bitmap_third = m_bitmap_editable;
1398 temp_bitmap_brand = m_bitmap_readonly;
1399
1401 dc.DrawBitmap(m_bitmap_transparent_lite.bmp(), FromDIP(8), (size.y - libsize.y) / 2 + FromDIP(8));
1402 } else {
1403 dc.DrawBitmap(m_bitmap_transparent_lite.bmp(), FromDIP(10), (size.y - libsize.y) / 2 + FromDIP(8));
1404 }
1405 }
1406
1407 // View-only mode forces the read-only (eye) icon even for third-party spools.
1408 if (m_view_only) {
1409 temp_bitmap_third = temp_bitmap_brand;
1410 }
1411
1412 dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
1413 if (m_info.material_cols.size() > 1) {
1414 wxRect color_rect(FromDIP(10), FromDIP(10), libsize.x - FromDIP(18), libsize.y - FromDIP(18));
1415 if (m_info.ctype == 0) {
1416 fill_gradient_rect_east(dc, color_rect, m_info.material_cols.front(), m_info.material_cols.back());
1417 }
1418 else {
1419 int cols_size = m_info.material_cols.size();
1420 for (int i = 0; i < cols_size; i++) {
1421 dc.SetBrush(wxBrush(m_info.material_cols[i]));
1422 int x = color_rect.x + color_rect.width * i / cols_size;
1423 int next_x = color_rect.x + color_rect.width * (i + 1) / cols_size;
1424 dc.DrawRectangle(x, color_rect.y, next_x - x, color_rect.height);
1425 }
1426 dc.SetBrush(wxBrush(tmp_lib_colour));
1427 }
1428 }
1429 else {
1430 dc.SetBrush(wxBrush(tmp_lib_colour));
1432 dc.DrawRoundedRectangle(FromDIP(10), (size.y - libsize.y) / 2 + FromDIP(8), libsize.x - FromDIP(17), libsize.y - FromDIP(16), 0);
1433 }
1434 else{
1435 dc.DrawRoundedRectangle(FromDIP(10), (size.y - libsize.y) / 2 + FromDIP(10), libsize.x - FromDIP(17), libsize.y - FromDIP(20), 0);
1436 }
1437
1438 }
1439 dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
1440 dc.SetBrush(wxBrush(tmp_lib_colour));
1441 if (!m_disable_mode) {
1442 // edit icon
1443 if (m_info.material_state != AMSCanType::AMS_CAN_TYPE_EMPTY && m_info.material_state != AMSCanType::AMS_CAN_TYPE_NONE)
1444 {
1445 if (m_info.material_state == AMSCanType::AMS_CAN_TYPE_THIRDBRAND || m_info.material_state == AMSCanType::AMS_CAN_TYPE_VIRTUAL)
1446 dc.DrawBitmap(temp_bitmap_third.bmp(), (size.x - temp_bitmap_third.GetBmpSize().x) / 2 + FromDIP(2), (size.y - FromDIP(18) - temp_bitmap_third.GetBmpSize().y));
1447 if (m_info.material_state == AMSCanType::AMS_CAN_TYPE_BRAND)
1448 dc.DrawBitmap(temp_bitmap_brand.bmp(), (size.x - temp_bitmap_brand.GetBmpSize().x) / 2 + FromDIP(2), (size.y - FromDIP(18) - temp_bitmap_brand.GetBmpSize().y));
1449 }
1450 }
1451
1452 // selected & hover
1453 if (m_selected) {
1454 dc.DrawBitmap(tray_bitmap_selected.bmp(), (size.x - tray_bitmap_selected.GetBmpSize().x) / 2, (size.y - tray_bitmap_selected.GetBmpSize().y) / 2);
1455 }
1456 else if (!m_selected && m_hover) {
1457 dc.DrawBitmap(tray_bitmap_hover.bmp(), (size.x - tray_bitmap_hover.GetBmpSize().x) / 2, (size.y - tray_bitmap_hover.GetBmpSize().y) / 2);
1458 }
1459 else {
1460 dc.DrawBitmap(tray_bitmap.bmp(), (size.x - tray_bitmap.GetBmpSize().x) / 2, (size.y - tray_bitmap.GetBmpSize().y) / 2);
1461 }
1462}
#define AMS_LITE_CAN_LIB_SIZE
Definition AMSItem.hpp:174
wxSize GetBmpSize() const
Definition wxExtensions.cpp:959
const wxBitmap & bmp() const
Definition wxExtensions.hpp:189
int m_can_index
Definition AMSItem.hpp:507

References Slic3r::GUI::AMS_CAN_TYPE_BRAND, Slic3r::GUI::AMS_CAN_TYPE_EMPTY, Slic3r::GUI::AMS_CAN_TYPE_NONE, Slic3r::GUI::AMS_CAN_TYPE_THIRDBRAND, Slic3r::GUI::AMS_CAN_TYPE_VIRTUAL, AMS_CONTROL_DEF_LIB_BK_COLOUR, AMS_CONTROL_GRAY500, Slic3r::GUI::AMS_LITE, AMS_LITE_CAN_LIB_SIZE, ScalableBitmap::bmp(), Slic3r::change_the_opacity(), StateColor::darkModeColorFor(), Slic3r::GUI::EXT_AMS, Slic3r::GUI::fill_gradient_rect_east(), ScalableBitmap::GetBmpSize(), m_ams_model, m_bitmap_editable, m_bitmap_editable_light, m_bitmap_extra_tray_left, m_bitmap_extra_tray_left_hover, m_bitmap_extra_tray_left_selected, m_bitmap_extra_tray_mid, m_bitmap_extra_tray_mid_hover, m_bitmap_extra_tray_mid_selected, m_bitmap_extra_tray_right, m_bitmap_extra_tray_right_hover, m_bitmap_extra_tray_right_selected, m_bitmap_readonly, m_bitmap_readonly_light, m_bitmap_transparent_lite, m_can_index, m_disable_mode, m_hover, m_info, m_pass_road, m_selected, and m_view_only.

Referenced by doRender().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ render_lite_text()

void Slic3r::GUI::AMSLib::render_lite_text ( wxDC & dc)
protected
1110{
1111 auto tmp_lib_colour = m_info.material_colour;
1112
1113 change_the_opacity(tmp_lib_colour);
1114 auto temp_text_colour = AMS_CONTROL_GRAY800;
1115
1116 if (tmp_lib_colour.GetLuminance() < 0.6) {
1117 temp_text_colour = AMS_CONTROL_WHITE_COLOUR;
1118 }
1119 else {
1120 temp_text_colour = AMS_CONTROL_GRAY800;
1121 }
1122
1123 if (m_info.material_remain < 50) {
1124 temp_text_colour = AMS_CONTROL_GRAY800;
1125 }
1126
1127 if (tmp_lib_colour.Alpha() == 0) {
1128 temp_text_colour = AMS_CONTROL_GRAY800;
1129 }
1130
1131 dc.SetFont(::Label::Body_13);
1132 dc.SetTextForeground(temp_text_colour);
1133
1134 auto libsize = GetSize();
1135 if (m_info.material_state == AMSCanType::AMS_CAN_TYPE_THIRDBRAND
1136 || m_info.material_state == AMSCanType::AMS_CAN_TYPE_BRAND
1137 || m_info.material_state == AMSCanType::AMS_CAN_TYPE_VIRTUAL) {
1138
1139 if (m_info.material_name.empty()) {
1140 auto tsize = dc.GetMultiLineTextExtent("?");
1141 auto pot = wxPoint(0, 0);
1142 pot = wxPoint((libsize.x - tsize.x) / 2 + FromDIP(2), (libsize.y - tsize.y) / 2 - FromDIP(5));
1143 dc.DrawText(L("?"), pot);
1144 }
1145 else {
1146 auto tsize = dc.GetMultiLineTextExtent(m_info.material_name);
1147 std::vector<std::string> split_char_arr = { " ", "-" };
1148 bool has_split = false;
1149 std::string has_split_char = " ";
1150
1151 for (std::string split_char : split_char_arr) {
1152 if (m_info.material_name.find(split_char) != std::string::npos) {
1153 has_split = true;
1154 has_split_char = split_char;
1155 }
1156 }
1157
1158 if (has_split) {
1159 dc.SetFont(::Label::Body_10);
1160 auto line_top = m_info.material_name.substr(0, m_info.material_name.find(has_split_char));
1161 auto line_bottom = m_info.material_name.substr(m_info.material_name.find(has_split_char));
1162
1163 auto line_top_tsize = dc.GetMultiLineTextExtent(line_top);
1164 auto line_bottom_tsize = dc.GetMultiLineTextExtent(line_bottom);
1165
1166 auto pot_top = wxPoint((libsize.x - line_top_tsize.x) / 2 + FromDIP(3), (libsize.y - line_top_tsize.y) / 2 - line_top_tsize.y);
1167 dc.DrawText(line_top, pot_top);
1168
1169 auto pot_bottom = wxPoint((libsize.x - line_bottom_tsize.x) / 2 + FromDIP(3), (libsize.y - line_bottom_tsize.y) / 2);
1170 dc.DrawText(line_bottom, pot_bottom);
1171
1172
1173 }
1174 else {
1175 dc.SetFont(::Label::Body_10);
1176 auto pot = wxPoint(0, 0);
1177 if (m_obj ) {
1178 pot = wxPoint((libsize.x - tsize.x) / 2 + FromDIP(6), (libsize.y - tsize.y) / 2 - FromDIP(5));
1179 }
1180 dc.DrawText(m_info.material_name, pot);
1181 }
1182 }
1183 }
1184
1185 if (m_info.material_state == AMSCanType::AMS_CAN_TYPE_EMPTY) {
1186 auto tsize = dc.GetMultiLineTextExtent("/");
1187 auto pot = wxPoint((libsize.x - tsize.x) / 2 + FromDIP(2), (libsize.y - tsize.y) / 2 + FromDIP(3));
1188 dc.DrawText("/", pot);
1189 }
1190}
static wxFont Body_10
Definition Label.hpp:56

References Slic3r::GUI::AMS_CAN_TYPE_BRAND, Slic3r::GUI::AMS_CAN_TYPE_EMPTY, Slic3r::GUI::AMS_CAN_TYPE_THIRDBRAND, Slic3r::GUI::AMS_CAN_TYPE_VIRTUAL, AMS_CONTROL_GRAY800, AMS_CONTROL_WHITE_COLOUR, Label::Body_10, Label::Body_13, Slic3r::change_the_opacity(), L, m_info, and m_obj.

Referenced by render().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ set_disable_mode()

void Slic3r::GUI::AMSLib::set_disable_mode ( bool disable)
inline
522{ m_disable_mode = disable; }

References m_disable_mode.

◆ set_view_only()

void Slic3r::GUI::AMSLib::set_view_only ( bool view_only)
inline
525{ if (m_view_only != view_only) { m_view_only = view_only; Refresh(); } }

References m_view_only.

◆ show_kn_value()

void Slic3r::GUI::AMSLib::show_kn_value ( bool show)
inline
519{ m_show_kn = show; };

References m_show_kn.

Referenced by Slic3r::GUI::AmsItem::show_sn_value().

Here is the caller graph for this function:

◆ support_cali()

void Slic3r::GUI::AMSLib::support_cali ( bool sup)
inline
520{ m_support_cali = sup; Refresh(); };
bool m_support_cali
Definition AMSItem.hpp:557

References m_support_cali.

◆ UnableSelected()

void Slic3r::GUI::AMSLib::UnableSelected ( )
inline
513{ m_unable_selected = true; };

References m_unable_selected.

◆ UnSelected()

void Slic3r::GUI::AMSLib::UnSelected ( )
1818{
1819 m_selected = false;
1820 Refresh();
1821}

References m_selected.

Referenced by Slic3r::GUI::AmsItem::AddCan(), Slic3r::GUI::AmsItem::AddLiteCan(), and Slic3r::GUI::AmsItem::SelectCan().

Here is the caller graph for this function:

◆ UpdateInfo()

void Slic3r::GUI::AMSLib::UpdateInfo ( Caninfo info,
std::string ams_idx,
bool refresh = true )
1778{
1779 DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager();
1780 if (!dev) return;
1781 if (dev->get_selected_machine() && dev->get_selected_machine() != m_obj) {
1782 m_obj = dev->get_selected_machine();
1783 }
1784 if (info.material_colour.Alpha() != 0 && info.material_colour.Alpha() != 255 && info.material_colour.Alpha() != 254 && m_info.material_colour != info.material_colour) {
1785 transparent_changed = true;
1786 }
1787
1788 m_info = info;
1789 m_ams_id = ams_idx;
1790 m_slot_id = info.can_id;
1791 if (refresh) Refresh();
1792}

References Slic3r::GUI::Caninfo::can_id, Slic3r::DeviceManager::get_selected_machine(), m_ams_id, m_info, m_obj, m_slot_id, Slic3r::GUI::Caninfo::material_colour, and transparent_changed.

Referenced by AMSLib(), and Slic3r::GUI::AmsItem::UpdateInfo().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ m_ams_id

std::string Slic3r::GUI::AMSLib::m_ams_id

◆ m_ams_model

◆ m_bitmap_editable

ScalableBitmap Slic3r::GUI::AMSLib::m_bitmap_editable
protected

◆ m_bitmap_editable_light

ScalableBitmap Slic3r::GUI::AMSLib::m_bitmap_editable_light
protected

◆ m_bitmap_extra_tray_left

ScalableBitmap Slic3r::GUI::AMSLib::m_bitmap_extra_tray_left
protected

◆ m_bitmap_extra_tray_left_hover

ScalableBitmap Slic3r::GUI::AMSLib::m_bitmap_extra_tray_left_hover
protected

◆ m_bitmap_extra_tray_left_selected

ScalableBitmap Slic3r::GUI::AMSLib::m_bitmap_extra_tray_left_selected
protected

◆ m_bitmap_extra_tray_mid

ScalableBitmap Slic3r::GUI::AMSLib::m_bitmap_extra_tray_mid
protected

◆ m_bitmap_extra_tray_mid_hover

ScalableBitmap Slic3r::GUI::AMSLib::m_bitmap_extra_tray_mid_hover
protected

◆ m_bitmap_extra_tray_mid_selected

ScalableBitmap Slic3r::GUI::AMSLib::m_bitmap_extra_tray_mid_selected
protected

◆ m_bitmap_extra_tray_right

ScalableBitmap Slic3r::GUI::AMSLib::m_bitmap_extra_tray_right
protected

◆ m_bitmap_extra_tray_right_hover

ScalableBitmap Slic3r::GUI::AMSLib::m_bitmap_extra_tray_right_hover
protected

◆ m_bitmap_extra_tray_right_selected

ScalableBitmap Slic3r::GUI::AMSLib::m_bitmap_extra_tray_right_selected
protected

◆ m_bitmap_readonly

ScalableBitmap Slic3r::GUI::AMSLib::m_bitmap_readonly
protected

◆ m_bitmap_readonly_light

ScalableBitmap Slic3r::GUI::AMSLib::m_bitmap_readonly_light
protected

◆ m_bitmap_transparent

ScalableBitmap Slic3r::GUI::AMSLib::m_bitmap_transparent
protected

◆ m_bitmap_transparent_def

ScalableBitmap Slic3r::GUI::AMSLib::m_bitmap_transparent_def
protected

◆ m_bitmap_transparent_lite

ScalableBitmap Slic3r::GUI::AMSLib::m_bitmap_transparent_lite
protected

◆ m_border_color

wxColour Slic3r::GUI::AMSLib::m_border_color
protected

Referenced by AMSLib().

◆ m_can_index

◆ m_disable_mode

bool Slic3r::GUI::AMSLib::m_disable_mode { false }
protected
564{ false };

Referenced by render_generic_lib(), render_lite_lib(), and set_disable_mode().

◆ m_edit_bitmp

wxStaticBitmap* Slic3r::GUI::AMSLib::m_edit_bitmp = {nullptr}
protected
530{nullptr};

◆ m_edit_bitmp_light

wxStaticBitmap* Slic3r::GUI::AMSLib::m_edit_bitmp_light = {nullptr}
protected
531{nullptr};

◆ m_enable

bool Slic3r::GUI::AMSLib::m_enable = {false}
protected
553{false};

◆ m_ext_type

AMSModelOriginType Slic3r::GUI::AMSLib::m_ext_type = { AMSModelOriginType::GENERIC_EXT }
@ GENERIC_EXT
Definition AMSItem.hpp:66

Referenced by AMSLib(), doRender(), and render().

◆ m_hover

bool Slic3r::GUI::AMSLib::m_hover = {false}
protected

◆ m_info

◆ m_lib_color

wxColour Slic3r::GUI::AMSLib::m_lib_color
protected

◆ m_obj

MachineObject* Slic3r::GUI::AMSLib::m_obj = { nullptr }
502{ nullptr };

Referenced by render_generic_text(), render_lite_text(), and UpdateInfo().

◆ m_pass_road

bool Slic3r::GUI::AMSLib::m_pass_road {false}
protected
566{false};

Referenced by on_pass_road(), and render_lite_lib().

◆ m_radius

double Slic3r::GUI::AMSLib::m_radius = {4}
protected
560{4};

Referenced by render_generic_lib().

◆ m_road_def_color

wxColour Slic3r::GUI::AMSLib::m_road_def_color
protected

Referenced by AMSLib().

◆ m_selected

bool Slic3r::GUI::AMSLib::m_selected = {false}
protected

◆ m_show_kn

bool Slic3r::GUI::AMSLib::m_show_kn = {false}
protected
556{false};

Referenced by render_generic_text(), and show_kn_value().

◆ m_slot_id

std::string Slic3r::GUI::AMSLib::m_slot_id

◆ m_support_cali

bool Slic3r::GUI::AMSLib::m_support_cali = {false}
protected
557{false};

Referenced by support_cali().

◆ m_unable_selected

bool Slic3r::GUI::AMSLib::m_unable_selected = {false}
protected
552{false};

Referenced by EableSelected(), OnSelected(), and UnableSelected().

◆ m_view_only

bool Slic3r::GUI::AMSLib::m_view_only { false }
protected
565{ false };

Referenced by render_generic_lib(), render_lite_lib(), and set_view_only().

◆ transparent_changed

bool Slic3r::GUI::AMSLib::transparent_changed = { false }
508{ false };

Referenced by render_generic_lib(), and UpdateInfo().


The documentation for this class was generated from the following files:
  • /home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/GUI/Widgets/AMSItem.hpp
  • /home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/GUI/Widgets/AMSItem.cpp