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

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

Inheritance diagram for Slic3r::GUI::AMSControl:
Collaboration diagram for Slic3r::GUI::AMSControl:

Public Member Functions

 AMSControl (wxWindow *parent, wxWindowID id=wxID_ANY, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize)
 ~AMSControl ()
void on_retry ()
std::string GetCurentAms ()
std::string GetCurentShowAms (AMSPanelPos pos=AMSPanelPos::RIGHT_PANEL)
std::string GetCurrentCan (std::string amsid)
bool IsAmsInRightPanel (std::string ams_id)
wxColour GetCanColour (std::string amsid, std::string canid)
void createAms (wxSimplebook *parent, int &idx, AMSinfo info, AMSPanelPos pos)
void createAmsPanel (wxSimplebook *parent, int &idx, std::vector< AMSinfo > infos, const std::string &series_name, const std::string &printer_type, AMSPanelPos pos, int total_ext_num)
AMSRoadShowMode findFirstMode (AMSPanelPos pos)
void SetAmsModel (AMSModel mode, AMSModel ext_mode)
void AmsSelectedSwitch (wxCommandEvent &event)
void EnableLoadFilamentBtn (bool enable, const std::string &ams_id, const std::string &can_id, const wxString &tips)
void EnableUnLoadFilamentBtn (bool enable, const std::string &ams_id, const std::string &can_id, const wxString &tips)
void EnterNoneAMSMode ()
void EnterGenericAMSMode ()
void EnterExtraAMSMode ()
void PlayRridLoading (wxString amsid, wxString canid)
void StopRridLoading (wxString amsid, wxString canid)
void ShowFilamentTip (bool hasams=true)
std::tuple< bool, bool > isFilaSwitchReady ()
void show_switcher_status (bool show)
void UpdatePassRoad (std::string ams_id, AMSPassRoadType type, AMSPassRoadSTEP step)
void CreateAms ()
void CreateAmsDoubleNozzle (const std::string &series_name, const std::string &printer_type)
void CreateAmsSingleNozzle (const std::string &series_name, const std::string &printer_type)
void ClearAms ()
void UpdateAmsDryControl (MachineObject *obj)
void UpdateAms (const std::string &series_name, const std::string &printer_type, std::vector< AMSinfo > ams_info, std::vector< AMSinfo > ext_info, DevExtderSystem data, std::string dev_id, MachineObject *obj=nullptr, bool is_reset=true, bool test=false)
std::vector< AMSinfo > GenerateSimulateData ()
void AddAms (AMSinfo info, AMSPanelPos pos=AMSPanelPos::LEFT_PANEL)
void AddAmsPreview (AMSinfo info, AMSModel type)
void AddAms (std::vector< AMSinfo > single_info, const std::string &series_name, const std::string &printer_type, AMSPanelPos pos=AMSPanelPos::LEFT_PANEL)
void AddAmsPreview (std::vector< AMSinfo >single_info, AMSPanelPos pos)
void SetExtruder (bool on_off, int nozzle_id, std::string ams_id, std::string slot_id)
void SetAmsStep (std::string ams_id, std::string canid, AMSPassRoadType type, AMSPassRoadSTEP step)
void SwitchAms (std::string ams_id)
void msw_rescale ()
void on_filament_load (wxCommandEvent &event)
void on_filament_unload (wxCommandEvent &event)
void auto_refill (wxCommandEvent &event)
void on_ams_setting_click (wxMouseEvent &event)
void on_extrusion_cali (wxCommandEvent &event)
void on_ams_setting_click (wxCommandEvent &event)
void on_clibration_again_click (wxMouseEvent &event)
void on_clibration_cancel_click (wxMouseEvent &event)
void Reset ()
void show_noams_mode ()
void show_auto_refill (bool show)
void enable_ams_setting (bool en)
void show_vams_kn_value (bool show)
void post_event (wxEvent &&event)
virtual bool Enable (bool enable=true)
void parse_object (MachineObject *obj)

Public Attributes

AMSModel m_ams_model {AMSModel::EXT_AMS}
AMSModel m_ext_model {AMSModel::EXT_AMS}
AMSModel m_is_none_ams_mode {AMSModel::EXT_AMS}
bool m_single_nozzle_no_ams = { true }
std::string m_current_select

Protected Attributes

std::string m_current_ams
std::string m_current_slot_left
std::string m_current_slot_right
std::string m_current_show_ams_left
std::string m_current_show_ams_right
std::map< std::string, int > m_ams_selection
std::map< std::string, AMSPreview * > m_ams_preview_list
std::vector< AMSinfo > m_ams_info
std::vector< AMSinfo > m_ext_info
std::map< std::string, AmsItem * > m_ams_item_list
std::map< std::string, AMSExtImage * > m_ext_image_list
std::string m_dev_id
std::vector< std::vector< std::string > > m_item_ids { {}, {} }
std::vector< std::pair< std::string, std::string > > pair_id
int m_total_ext_count = 1
AMSextruder * m_extruder {nullptr}
SwitcherImage * m_switcher {nullptr}
AMSRoadDownPart * m_down_road { nullptr }
wxBoxSizer * m_sizer_body {nullptr}
wxPanel * tipPanel {nullptr}
wxBoxSizer * tipSizer {nullptr}
wxStaticBitmap * icon {nullptr}
wxStaticText * tipText {nullptr}
wxBoxSizer * m_sizer_ams_items {nullptr}
wxScrolledWindow * m_panel_prv_left {nullptr}
wxScrolledWindow * m_panel_prv_right {nullptr}
wxBoxSizer * m_sizer_prv_left {nullptr}
wxBoxSizer * m_sizer_prv_right {nullptr}
wxBoxSizer * m_sizer_ams_body {nullptr}
wxBoxSizer * m_sizer_ams_area_left {nullptr}
wxBoxSizer * m_sizer_ams_area_right {nullptr}
wxBoxSizer * m_sizer_down_road { nullptr }
wxBoxSizer * m_sizer_ams_option {nullptr}
wxBoxSizer * m_sizer_option_left {nullptr}
wxBoxSizer * m_sizer_option_mid {nullptr}
wxBoxSizer * m_sizer_option_right {nullptr}
AmsIntroducePopup m_ams_introduce_popup
wxSimplebook * m_simplebook_ams_left {nullptr}
wxSimplebook * m_simplebook_ams_right { nullptr }
wxSimplebook * m_simplebook_bottom {nullptr}
wxPanel * m_panel_down_road { nullptr }
int m_left_page_index = 0
int m_right_page_index = 0
wxStaticText * m_tip_right_top {nullptr}
Label * m_tip_load_info {nullptr}
wxWindow * m_amswin {nullptr}
wxBoxSizer * m_vams_sizer {nullptr}
wxBoxSizer * m_sizer_vams_tips {nullptr}
Label * m_ams_tip {nullptr}
Caninfo m_vams_info
StaticBox * m_panel_virtual {nullptr}
AMSLib * m_vams_lib {nullptr}
AMSRoad * m_vams_road {nullptr}
wxBoxSizer * m_sizer_right_tip {nullptr}
wxBoxSizer * m_sizer_ams_tips {nullptr}
::StepIndicator * m_filament_load_step {nullptr}
::StepIndicator * m_filament_unload_step {nullptr}
::StepIndicator * m_filament_vt_load_step {nullptr}
Button * m_button_extruder_feed {nullptr}
Button * m_button_extruder_back {nullptr}
Button * m_button_auto_refill { nullptr }
wxStaticBitmap * m_button_ams_setting {nullptr}
wxStaticBitmap * m_img_ams_backup {nullptr}
wxStaticBitmap * m_img_amsmapping_tip {nullptr}
wxStaticBitmap * m_img_vams_tip {nullptr}
ScalableBitmap m_button_ams_setting_normal
ScalableBitmap m_button_ams_setting_hover
ScalableBitmap m_button_ams_setting_press
AmsHumidityTipPopup m_Humidity_tip_popup
uiAmsPercentHumidityDryPopup * m_percent_humidity_dry_popup
AMSDryCtrWin * m_ams_dry_ctr_win
std::string m_last_ams_id = ""
std::string m_last_tray_id = ""

Private Member Functions

std::string get_filament_id (const std::string &ams_id, const std::string &can_id)

Detailed Description

Constructor & Destructor Documentation

◆ AMSControl()

Slic3r::GUI::AMSControl::AMSControl ( wxWindow * parent,
wxWindowID id = wxID_ANY,
const wxPoint & pos = wxDefaultPosition,
const wxSize & size = wxDefaultSize )
59 : wxSimplebook(parent, wxID_ANY, pos, size)
60 , m_Humidity_tip_popup(AmsHumidityTipPopup(this))
61 , m_percent_humidity_dry_popup(new uiAmsPercentHumidityDryPopup(this))
62 , m_ams_introduce_popup(AmsIntroducePopup(this))
63 , m_ams_dry_ctr_win(new AMSDryCtrWin(this))
64{
65 Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager();
66 if (dev) {
67 MachineObject *obj = dev->get_selected_machine();
68 parse_object(obj);
69 }
70
71 SetBackgroundColour(*wxWHITE);
72 // normal mode
73 //Freeze();
74 m_sizer_body = new wxBoxSizer(wxVERTICAL);
75 m_amswin = new wxWindow(this, wxID_ANY);
76 m_amswin->SetBackgroundColour(*wxWHITE);
77 m_amswin->SetSize(wxSize(FromDIP(578), -1));
78 m_amswin->SetMinSize(wxSize(FromDIP(578), -1));
79
80
81 m_sizer_ams_items = new wxBoxSizer(wxHORIZONTAL);
82
83 /*right items*/
84 m_panel_prv_left = new wxScrolledWindow(m_amswin, wxID_ANY);
85 m_panel_prv_left->SetScrollRate(10, 0);
88 //m_panel_prv_left->SetBackgroundColour(0x4169E1);
90 m_sizer_prv_left = new wxBoxSizer(wxHORIZONTAL);
92 m_panel_prv_left->Layout();
93 //m_sizer_items_left->Fit(m_panel_prv_left);
94
95 /*right items*/
96 m_panel_prv_right = new wxScrolledWindow(m_amswin, wxID_ANY);
97 m_panel_prv_right->SetScrollRate(10, 0);
100 //m_panel_prv_right->SetBackgroundColour(0x4169E1);
102 m_sizer_prv_right = new wxBoxSizer(wxHORIZONTAL);
104 m_panel_prv_right->Layout();
105 //m_sizer_items_right->Fit(m_panel_prv_right);
106
107 /*m_sizer_ams_items->Add(m_panel_prv_left, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, FromDIP(5));
108 m_sizer_ams_items->Add(m_panel_prv_right, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, FromDIP(5));*/
109 m_sizer_ams_items->Add(m_panel_prv_left, 0, wxLEFT | wxRIGHT, FromDIP(5));
110 m_sizer_ams_items->Add(m_panel_prv_right, 0, wxLEFT | wxRIGHT, FromDIP(5));
111
112 //m_panel_prv_right->Hide();
113
114 //m_sizer_ams_body = new wxBoxSizer(wxHORIZONTAL);
115
116 m_sizer_ams_body = new wxBoxSizer(wxHORIZONTAL);
117
118 //ams area
119 m_sizer_ams_area_left = new wxBoxSizer(wxHORIZONTAL);
120 m_sizer_ams_area_right = new wxBoxSizer(wxHORIZONTAL);
121 m_sizer_down_road = new wxBoxSizer(wxHORIZONTAL);
122
123 m_simplebook_ams_left = new wxSimplebook(m_amswin, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0);
125 //m_sizer_ams_area_left->Add(m_simplebook_ams_left, 0, wxLEFT | wxRIGHT, FromDIP(5));
126 m_sizer_ams_area_left->Add(m_simplebook_ams_left, 0, wxALIGN_CENTER, 0);
127
128 m_simplebook_ams_right = new wxSimplebook(m_amswin, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0);
130 //m_sizer_ams_area_right->Add(m_simplebook_ams_right, 0, wxLEFT | wxRIGHT, FromDIP(5));
131 m_sizer_ams_area_right->Add(m_simplebook_ams_right, 0, wxALIGN_CENTER, 0);
132
133 m_panel_down_road = new wxPanel(m_amswin, wxID_ANY, wxDefaultPosition, AMS_DOWN_ROAD_SIZE, 0);
135
136 m_down_road = new AMSRoadDownPart(m_panel_down_road, wxID_ANY, wxDefaultPosition, AMS_DOWN_ROAD_SIZE);
137 m_sizer_down_road->Add(m_panel_down_road, 0, wxTOP, 0);
138
139 // ams mode
140 //
142
143
144 m_sizer_ams_area_left->Layout();
145 m_sizer_ams_area_right->Layout();
146
147
148 m_sizer_ams_option = new wxBoxSizer(wxHORIZONTAL);
149 m_sizer_option_left = new wxBoxSizer(wxHORIZONTAL);
150 m_sizer_option_mid = new wxBoxSizer(wxHORIZONTAL);
151 m_sizer_option_right = new wxBoxSizer(wxHORIZONTAL);
152
153 auto m_panel_option_left = new wxPanel(m_amswin);
154 auto m_panel_option_right = new wxPanel(m_amswin);
155
156 m_panel_option_left->SetBackgroundColour(*wxWHITE);
157 m_panel_option_right->SetBackgroundColour(*wxWHITE);
158
159 m_panel_option_left->SetSizer(m_sizer_option_left);
160 m_panel_option_right->SetSizer(m_sizer_option_right);
161
162 m_panel_option_left->SetMinSize(wxSize(FromDIP(180), -1));
163 m_panel_option_left->SetMaxSize(wxSize(FromDIP(180), -1));
164
165 m_panel_option_right->SetMinSize(wxSize(FromDIP(180), -1));
166 m_panel_option_right->SetMaxSize(wxSize(FromDIP(180), -1));
167
168 /*option left*/
169 m_button_auto_refill = new Button(m_panel_option_left, _L("Auto Refill"));
171
172 m_button_ams_setting_normal = ScalableBitmap(this, "ams_setting_normal", 24);
173 m_button_ams_setting_hover = ScalableBitmap(this, "ams_setting_hover", 24);
174 m_button_ams_setting_press = ScalableBitmap(this, "ams_setting_press", 24);
175
176 m_button_ams_setting = new wxStaticBitmap(m_panel_option_left, wxID_ANY, m_button_ams_setting_normal.bmp(), wxDefaultPosition, wxSize(FromDIP(24), FromDIP(24)));
177 m_button_ams_setting->SetMinSize(wxSize(FromDIP(24), FromDIP(24)));
178 m_button_ams_setting->SetMaxSize(wxSize(FromDIP(24), FromDIP(24)));
179 m_sizer_option_left->Add(m_button_auto_refill, 0, wxALIGN_CENTER, 0);
180 m_sizer_option_left->Add(0, 0, 0, wxLEFT, FromDIP(20));
181 m_sizer_option_left->Add(m_button_ams_setting, 0, wxALIGN_CENTER, 0);
182
183
184 /*option mid*/
185 m_extruder = new AMSextruder(m_amswin, wxID_ANY, m_total_ext_count, wxDefaultPosition, AMS_EXTRUDER_SIZE);
186 m_sizer_option_mid->Add( m_extruder, 0, wxALIGN_CENTER, 0 );
187
188 // Orca: filament-switch routing glyph; hidden by default so it stays inert (zero layout impact)
189 // on any printer without a Filament Track Switch. Shown from UpdateAms only when installed.
190 m_switcher = new SwitcherImage(m_amswin, wxID_ANY, "fila_switch", wxSize(FromDIP(29), FromDIP(16)), wxDefaultPosition);
191 m_switcher->Hide();
192 m_sizer_option_mid->Add(m_switcher, 0, wxALIGN_CENTER | wxLEFT, FromDIP(6));
193
194
195 /*option right*/
196 m_button_extruder_feed = new Button(m_panel_option_right, _L("Load"));
198 m_button_extruder_feed->EnableTooltipEvenDisabled();
199
200
201 if (wxGetApp().app_config->get("language") == "de_DE") m_button_extruder_feed->SetFont(Label::Body_9);
202 if (wxGetApp().app_config->get("language") == "fr_FR") m_button_extruder_feed->SetFont(Label::Body_9);
203 if (wxGetApp().app_config->get("language") == "ru_RU") m_button_extruder_feed->SetLabel("Load");
204 if (wxGetApp().app_config->get("language") == "nl_NL") m_button_extruder_feed->SetFont(Label::Body_9);
205 if (wxGetApp().app_config->get("language") == "hu_HU") m_button_extruder_feed->SetFont(Label::Body_9);
206 if (wxGetApp().app_config->get("language") == "ja_JP") m_button_extruder_feed->SetFont(Label::Body_9);
207 if (wxGetApp().app_config->get("language") == "sv_SE") m_button_extruder_feed->SetFont(Label::Body_9);
208 if (wxGetApp().app_config->get("language") == "cs_CZ") m_button_extruder_feed->SetFont(Label::Body_9);
209 if (wxGetApp().app_config->get("language") == "uk_UA") m_button_extruder_feed->SetFont(Label::Body_9);
210 if (wxGetApp().app_config->get("language") == "pt_BR") m_button_extruder_feed->SetLabel("Load");
211
212 m_button_extruder_back = new Button(m_panel_option_right, _L("Unload"));
214 m_button_extruder_back->EnableTooltipEvenDisabled();
215
216 if (wxGetApp().app_config->get("language") == "de_DE") m_button_extruder_back->SetFont(Label::Body_9);
217 if (wxGetApp().app_config->get("language") == "fr_FR") m_button_extruder_back->SetFont(Label::Body_9);
218 if (wxGetApp().app_config->get("language") == "ru_RU") m_button_extruder_back->SetLabel("Unload");
219 if (wxGetApp().app_config->get("language") == "nl_NL") m_button_extruder_back->SetFont(Label::Body_9);
220 if (wxGetApp().app_config->get("language") == "hu_HU") m_button_extruder_back->SetFont(Label::Body_9);
221 if (wxGetApp().app_config->get("language") == "ja_JP") m_button_extruder_back->SetFont(Label::Body_9);
222 if (wxGetApp().app_config->get("language") == "sv_SE") m_button_extruder_back->SetFont(Label::Body_9);
223 if (wxGetApp().app_config->get("language") == "cs_CZ") m_button_extruder_back->SetFont(Label::Body_9);
224 if (wxGetApp().app_config->get("language") == "uk_UA") m_button_extruder_back->SetFont(Label::Body_9);
225 if (wxGetApp().app_config->get("language") == "pt_BR") m_button_extruder_back->SetLabel("Unload");
226
227
228 //m_sizer_option_right->Add(0, 0, 1, wxEXPAND, 0);
229 m_sizer_option_right->Add(m_button_extruder_back, 0, wxLEFT, FromDIP(0));
230 m_sizer_option_right->Add(m_button_extruder_feed, 0, wxLEFT, FromDIP(20));
231
232 m_panel_option_left->Layout();
233 m_panel_option_right->Layout();
234
235 m_sizer_ams_option->Add(m_panel_option_left, 0, wxALIGN_TOP, 0);
236 m_sizer_ams_option->Add( 0, 0, 1, wxEXPAND, 0);
237 m_sizer_ams_option->Add(m_sizer_option_mid, 0, wxALIGN_TOP, 0);
238 m_sizer_ams_option->Add( 0, 0, 1, wxEXPAND, 0);
239 m_sizer_ams_option->Add(m_panel_option_right, 0, wxALIGN_TOP, 0);
240
241
242 m_sizer_ams_body->Add(m_sizer_ams_area_left, wxALIGN_CENTER, 0);
243 m_sizer_ams_body->AddSpacer(FromDIP(10));
244 m_sizer_ams_body->Add(m_sizer_ams_area_right, wxALIGN_CENTER, 0);
245
246 m_sizer_body->Add(m_sizer_ams_items, 0, wxALIGN_CENTER, 0);
247 m_sizer_body->Add(0, 0, 1, wxEXPAND | wxTOP, FromDIP(10));
248 m_sizer_body->Add(m_sizer_ams_body, 0, wxALIGN_CENTER, 0);
249 m_sizer_body->Add(m_sizer_down_road, 0, wxALIGN_CENTER, 0);
250 m_sizer_body->Add(m_sizer_ams_option, 0, wxEXPAND, 0);
251
252 m_amswin->SetSizer(m_sizer_body);
253 m_amswin->Layout();
254 m_amswin->Fit();
255 //Thaw();
256
257 SetSize(m_amswin->GetSize());
258 SetMinSize(m_amswin->GetSize());
259
260
261 AddPage(m_amswin, wxEmptyString, false);
262
263
264 m_button_extruder_feed->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(AMSControl::on_filament_load), NULL, this);
265 m_button_extruder_back->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(AMSControl::on_filament_unload), NULL, this);
266 m_button_auto_refill->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(AMSControl::auto_refill), NULL, this);
267
268 m_button_ams_setting->Bind(wxEVT_ENTER_WINDOW, [this](wxMouseEvent& e) {
270 e.Skip();
271 });
272 m_button_ams_setting->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) {
275 e.Skip();
276 });
277
278 m_button_ams_setting->Bind(wxEVT_LEAVE_WINDOW, [this](wxMouseEvent& e) {
280 e.Skip();
281 });
282
283 Bind(EVT_AMS_SHOW_HUMIDITY_TIPS, [this](wxCommandEvent& evt) {
284 uiAmsHumidityInfo *info = (uiAmsHumidityInfo *) evt.GetClientData();
285 if (info)
286 {
287 Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager();
288 MachineObject *obj = nullptr;
289 if (dev) {
290 obj = dev->get_selected_machine();
291 }
292
293 if (info->ams_type == AMSModel::GENERIC_AMS)
294 {
295 wxPoint img_pos = ClientToScreen(wxPoint(0, 0));
296 wxPoint popup_pos(img_pos.x - m_Humidity_tip_popup.GetSize().GetWidth() + FromDIP(150), img_pos.y - FromDIP(80));
297 m_Humidity_tip_popup.Position(popup_pos, wxSize(0, 0));
298
299 int humidity_value = info->humidity_display_idx;
300 if (humidity_value > 0 && humidity_value <= 5) { m_Humidity_tip_popup.set_humidity_level(humidity_value); }
301 m_Humidity_tip_popup.Popup();
302 } else if (obj && obj->is_support_remote_dry && (info->ams_type == AMSModel::N3F_AMS || info->ams_type == AMSModel::N3S_AMS)){
303 m_ams_dry_ctr_win->set_ams_id(info->ams_id);
304
305 wxPoint img_pos = ClientToScreen(wxPoint(0, 0));
306 wxPoint popup_pos(img_pos.x - m_ams_dry_ctr_win->GetSize().GetWidth() + FromDIP(150), img_pos.y - FromDIP(80));
307 m_ams_dry_ctr_win->Move(popup_pos);
308 m_ams_dry_ctr_win->ShowModal();
309 } else {
310 m_percent_humidity_dry_popup->UpdateInfo(info);
311
312 wxPoint img_pos = ClientToScreen(wxPoint(0, 0));
313 wxPoint popup_pos(img_pos.x - m_percent_humidity_dry_popup->GetSize().GetWidth() + FromDIP(150), img_pos.y - FromDIP(80));
314 m_percent_humidity_dry_popup->Move(popup_pos);
315 m_percent_humidity_dry_popup->ShowModal();
316 }
317 }
318
319 delete info;
320 });
321 Bind(EVT_AMS_ON_SELECTED, &AMSControl::AmsSelectedSwitch, this);
322}
#define AMS_CANS_WINDOW_SIZE
Definition AMSControl.cpp:54
#define AMS_EXTRUDER_SIZE
Definition AMSItem.hpp:181
#define AMS_ITEMS_PANEL_SIZE
Definition AMSItem.hpp:176
#define AMS_CONTROL_DEF_BLOCK_BK_COLOUR
Definition AMSItem.hpp:44
#define AMS_DOWN_ROAD_SIZE
Definition AMSItem.hpp:186
@ Confirm
Definition Button.hpp:25
@ Regular
Definition Button.hpp:24
@ Choice
Definition Button.hpp:33
#define _L(s)
Definition OBJ.cpp:34
static wxFont Body_9
Definition Label.hpp:58
MachineObject * get_selected_machine()
Definition DevManager.cpp:747
wxStaticBitmap * m_button_ams_setting
Definition AMSControl.hpp:135
void on_filament_unload(wxCommandEvent &event)
Definition AMSControl.cpp:1706
wxBoxSizer * m_sizer_ams_area_left
Definition AMSControl.hpp:89
ScalableBitmap m_button_ams_setting_hover
Definition AMSControl.hpp:140
Button * m_button_auto_refill
Definition AMSControl.hpp:134
wxSimplebook * m_simplebook_ams_right
Definition AMSControl.hpp:104
wxBoxSizer * m_sizer_body
Definition AMSControl.hpp:74
void parse_object(MachineObject *obj)
Definition AMSControl.cpp:1772
wxBoxSizer * m_sizer_down_road
Definition AMSControl.hpp:91
ScalableBitmap m_button_ams_setting_normal
Definition AMSControl.hpp:139
uiAmsPercentHumidityDryPopup * m_percent_humidity_dry_popup
Definition AMSControl.hpp:144
Button * m_button_extruder_feed
Definition AMSControl.hpp:132
wxBoxSizer * m_sizer_prv_right
Definition AMSControl.hpp:85
wxBoxSizer * m_sizer_ams_items
Definition AMSControl.hpp:81
AmsIntroducePopup m_ams_introduce_popup
Definition AMSControl.hpp:100
wxWindow * m_amswin
Definition AMSControl.hpp:113
int m_total_ext_count
Definition AMSControl.hpp:68
ScalableBitmap m_button_ams_setting_press
Definition AMSControl.hpp:141
AmsHumidityTipPopup m_Humidity_tip_popup
Definition AMSControl.hpp:143
void on_ams_setting_click(wxMouseEvent &event)
Definition AMSControl.cpp:1719
wxBoxSizer * m_sizer_ams_body
Definition AMSControl.hpp:88
AMSextruder * m_extruder
Definition AMSControl.hpp:69
wxBoxSizer * m_sizer_ams_area_right
Definition AMSControl.hpp:90
Button * m_button_extruder_back
Definition AMSControl.hpp:133
void auto_refill(wxCommandEvent &event)
Definition AMSControl.cpp:1714
wxBoxSizer * m_sizer_ams_option
Definition AMSControl.hpp:94
wxPanel * m_panel_down_road
Definition AMSControl.hpp:106
wxBoxSizer * m_sizer_option_left
Definition AMSControl.hpp:95
AMSDryCtrWin * m_ams_dry_ctr_win
Definition AMSControl.hpp:145
wxSimplebook * m_simplebook_ams_left
Definition AMSControl.hpp:103
wxBoxSizer * m_sizer_prv_left
Definition AMSControl.hpp:84
AMSRoadDownPart * m_down_road
Definition AMSControl.hpp:71
SwitcherImage * m_switcher
Definition AMSControl.hpp:70
wxBoxSizer * m_sizer_option_mid
Definition AMSControl.hpp:96
wxScrolledWindow * m_panel_prv_right
Definition AMSControl.hpp:83
wxBoxSizer * m_sizer_option_right
Definition AMSControl.hpp:97
void AmsSelectedSwitch(wxCommandEvent &event)
Definition AMSControl.cpp:384
wxScrolledWindow * m_panel_prv_left
Definition AMSControl.hpp:82
void on_filament_load(wxCommandEvent &event)
Definition AMSControl.cpp:1680
wxMouseEvent
Definition CameraPopup.cpp:47
@ N3S_AMS
Definition AMSItem.hpp:62
@ GENERIC_AMS
Definition AMSItem.hpp:59
@ N3F_AMS
Definition AMSItem.hpp:61

References _L, AMS_CANS_WINDOW_SIZE, AMS_CONTROL_DEF_BLOCK_BK_COLOUR, AMS_DOWN_ROAD_SIZE, AMS_EXTRUDER_SIZE, Slic3r::GUI::uiAmsHumidityInfo::ams_id, AMS_ITEMS_PANEL_SIZE, Slic3r::GUI::uiAmsHumidityInfo::ams_type, AmsSelectedSwitch(), auto_refill(), Label::Body_9, Choice, Confirm, Slic3r::GUI::GENERIC_AMS, Slic3r::DeviceManager::get_selected_machine(), Slic3r::GUI::uiAmsHumidityInfo::humidity_display_idx, Slic3r::MachineObject::is_support_remote_dry, m_ams_dry_ctr_win, m_ams_introduce_popup, m_amswin, m_button_ams_setting, m_button_ams_setting_hover, m_button_ams_setting_normal, m_button_ams_setting_press, m_button_auto_refill, m_button_extruder_back, m_button_extruder_feed, m_down_road, m_extruder, m_Humidity_tip_popup, m_panel_down_road, m_panel_prv_left, m_panel_prv_right, m_percent_humidity_dry_popup, m_simplebook_ams_left, m_simplebook_ams_right, m_sizer_ams_area_left, m_sizer_ams_area_right, m_sizer_ams_body, m_sizer_ams_items, m_sizer_ams_option, m_sizer_body, m_sizer_down_road, m_sizer_option_left, m_sizer_option_mid, m_sizer_option_right, m_sizer_prv_left, m_sizer_prv_right, m_switcher, m_total_ext_count, Slic3r::GUI::N3F_AMS, Slic3r::GUI::N3S_AMS, on_ams_setting_click(), on_filament_load(), on_filament_unload(), parse_object(), Regular, and Slic3r::GUI::wxMouseEvent.

Here is the call graph for this function:

◆ ~AMSControl()

Slic3r::GUI::AMSControl::~AMSControl ( )
330{
331 if (m_ams_dry_ctr_win) {
332 delete m_ams_dry_ctr_win;
333 }
334}

References m_ams_dry_ctr_win.

Member Function Documentation

◆ AddAms() [1/2]

void Slic3r::GUI::AMSControl::AddAms ( AMSinfo info,
AMSPanelPos pos = AMSPanelPos::LEFT_PANEL )
1230{
1231 if (m_total_ext_count > 1){
1232 if (info.routes_to_main_extruder()){
1234 }
1235 else if (!info.routes_to_main_extruder()){
1237 }
1238 }
1239 else if (m_total_ext_count == 1){
1241 }
1242 m_simplebook_ams_left->Layout();
1243 m_simplebook_ams_right->Layout();
1244 m_simplebook_ams_left->Refresh();
1245 m_simplebook_ams_right->Refresh();
1246
1247}
int m_left_page_index
Definition AMSControl.hpp:107
int m_right_page_index
Definition AMSControl.hpp:108
void createAms(wxSimplebook *parent, int &idx, AMSinfo info, AMSPanelPos pos)
Definition AMSControl.cpp:1129
@ RIGHT_PANEL
Definition AMSItem.hpp:90
@ LEFT_PANEL
Definition AMSItem.hpp:89

References createAms(), Slic3r::GUI::LEFT_PANEL, m_left_page_index, m_right_page_index, m_simplebook_ams_left, m_simplebook_ams_right, m_total_ext_count, Slic3r::GUI::RIGHT_PANEL, and Slic3r::GUI::AMSinfo::routes_to_main_extruder().

Referenced by CreateAms(), CreateAmsDoubleNozzle(), and CreateAmsSingleNozzle().

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

◆ AddAms() [2/2]

void Slic3r::GUI::AMSControl::AddAms ( std::vector< AMSinfo > single_info,
const std::string & series_name,
const std::string & printer_type,
AMSPanelPos pos = AMSPanelPos::LEFT_PANEL )
1268{
1269 if (single_info.size() <= 0){
1270 return;
1271 }
1272 if (m_total_ext_count == 2) {
1273 if (single_info[0].routes_to_main_extruder()) {
1275 }
1276 else if (!single_info[0].routes_to_main_extruder()) {
1278 }
1279 }
1280 else if (m_total_ext_count == 1) {
1281 if (pos == AMSPanelPos::RIGHT_PANEL) {
1283 }
1284 else {
1286 }
1287 }
1288
1289 m_simplebook_ams_left->Layout();
1290 m_simplebook_ams_right->Layout();
1291 m_simplebook_ams_left->Refresh();
1292 m_simplebook_ams_right->Refresh();
1293}
void createAmsPanel(wxSimplebook *parent, int &idx, std::vector< AMSinfo > infos, const std::string &series_name, const std::string &printer_type, AMSPanelPos pos, int total_ext_num)
Definition AMSControl.cpp:1168

References createAmsPanel(), Slic3r::GUI::LEFT_PANEL, m_left_page_index, m_right_page_index, m_simplebook_ams_left, m_simplebook_ams_right, m_total_ext_count, and Slic3r::GUI::RIGHT_PANEL.

Here is the call graph for this function:

◆ AddAmsPreview() [1/2]

void Slic3r::GUI::AMSControl::AddAmsPreview ( AMSinfo info,
AMSModel type )
1106{
1107 AMSPreview *ams_prv = nullptr;
1108
1109 if (info.routes_to_main_extruder())
1110 {
1111 ams_prv = new AMSPreview(m_panel_prv_right, wxID_ANY, info, type);
1112 m_sizer_prv_right->Add(ams_prv, 0, wxALIGN_CENTER | wxLEFT, FromDIP(6));
1113 }
1114 else if (!info.routes_to_main_extruder())
1115 {
1116 ams_prv = new AMSPreview(m_panel_prv_left, wxID_ANY, info, type);
1117 m_sizer_prv_left->Add(ams_prv, 0, wxALIGN_CENTER | wxLEFT, FromDIP(6));
1118 }
1119
1120 if (ams_prv){
1121 ams_prv->Bind(wxEVT_LEFT_DOWN, [this, ams_prv](wxMouseEvent &e) {
1122 SwitchAms(ams_prv->get_ams_id());
1123 e.Skip();
1124 });
1125 m_ams_preview_list[info.ams_id] = ams_prv;
1126 }
1127}
std::map< std::string, AMSPreview * > m_ams_preview_list
Definition AMSControl.hpp:57
void SwitchAms(std::string ams_id)
Definition AMSControl.cpp:1363

References Slic3r::GUI::AMSinfo::ams_id, Slic3r::GUI::AMSPreview::get_ams_id(), m_ams_preview_list, m_panel_prv_left, m_panel_prv_right, m_sizer_prv_left, m_sizer_prv_right, Slic3r::GUI::AMSinfo::routes_to_main_extruder(), SwitchAms(), and Slic3r::GUI::wxMouseEvent.

Referenced by CreateAms(), CreateAmsDoubleNozzle(), and CreateAmsSingleNozzle().

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

◆ AddAmsPreview() [2/2]

void Slic3r::GUI::AMSControl::AddAmsPreview ( std::vector< AMSinfo > single_info,
AMSPanelPos pos )
1322 {
1323 if (single_info.size() <= 0) return;
1324
1325 AMSPreview* ams_prv = nullptr;
1326 AMSPreview* ams_prv2 = nullptr;
1327 if (pos == AMSPanelPos::RIGHT_PANEL){
1328 ams_prv = new AMSPreview(m_panel_prv_right, wxID_ANY, single_info[0], single_info[0].ams_type);
1329 m_sizer_prv_right->Add(ams_prv, 0, wxALIGN_CENTER | wxLEFT, FromDIP(6));
1330 if (single_info.size() == 2)
1331 {
1332 ams_prv2 = new AMSPreview(m_panel_prv_right, wxID_ANY, single_info[1], single_info[1].ams_type);
1333 m_sizer_prv_right->Add(ams_prv2, 0, wxALIGN_CENTER | wxLEFT, 0);
1334 }
1335 }
1336 else
1337 {
1338 ams_prv = new AMSPreview(m_panel_prv_left, wxID_ANY, single_info[0], single_info[0].ams_type);
1339 m_sizer_prv_left->Add(ams_prv, 0, wxALIGN_CENTER | wxLEFT, FromDIP(6));
1340 if (single_info.size() == 2)
1341 {
1342 ams_prv2 = new AMSPreview(m_panel_prv_left, wxID_ANY, single_info[1], single_info[1].ams_type);
1343 m_sizer_prv_left->Add(ams_prv2, 0, wxALIGN_CENTER | wxLEFT, 0);
1344 }
1345 }
1346
1347 if (ams_prv) {
1348 ams_prv->Bind(wxEVT_LEFT_DOWN, [this, ams_prv](wxMouseEvent& e) {
1349 SwitchAms(ams_prv->get_ams_id());
1350 e.Skip();
1351 });
1352 m_ams_preview_list[single_info[0].ams_id] = ams_prv;
1353 }
1354 if (ams_prv2) {
1355 ams_prv2->Bind(wxEVT_LEFT_DOWN, [this, ams_prv2](wxMouseEvent& e) {
1356 SwitchAms(ams_prv2->get_ams_id());
1357 e.Skip();
1358 });
1359 m_ams_preview_list[single_info[1].ams_id] = ams_prv2;
1360 }
1361}

References Slic3r::GUI::AMSPreview::get_ams_id(), m_ams_preview_list, m_panel_prv_left, m_panel_prv_right, m_sizer_prv_left, m_sizer_prv_right, Slic3r::GUI::RIGHT_PANEL, SwitchAms(), and Slic3r::GUI::wxMouseEvent.

Here is the call graph for this function:

◆ AmsSelectedSwitch()

void Slic3r::GUI::AMSControl::AmsSelectedSwitch ( wxCommandEvent & event)
384 {
385 std::string ams_id_selected = std::to_string(event.GetInt());
386 if (m_current_ams != ams_id_selected){
387 m_current_ams = ams_id_selected;
388 }
389 if (m_current_show_ams_left != ams_id_selected && m_current_show_ams_left != "") {
391 if (!item) return;
392 try{
393 const auto& can_lib_list = item->get_can_lib_list();
394 for (auto can : can_lib_list) {
395 can.second->UnSelected();
396 }
397 }
398 catch (...){
399 ;
400 }
401 }
402 else if (m_current_show_ams_right != ams_id_selected && m_current_show_ams_right != "") {
404 if (!item) return;
405 try {
406 const auto &can_lib_list = item->get_can_lib_list();
407 for (auto can : can_lib_list) {
408 can.second->UnSelected();
409 }
410 }
411 catch (...) {
412 ;
413 }
414 }
415}
std::string m_current_ams
Definition AMSControl.hpp:50
std::string m_current_show_ams_left
Definition AMSControl.hpp:53
std::string m_current_show_ams_right
Definition AMSControl.hpp:54
std::map< std::string, AmsItem * > m_ams_item_list
Definition AMSControl.hpp:61

References m_ams_item_list, m_current_ams, m_current_show_ams_left, and m_current_show_ams_right.

Referenced by AMSControl().

Here is the caller graph for this function:

◆ auto_refill()

void Slic3r::GUI::AMSControl::auto_refill ( wxCommandEvent & event)
1715{
1716 post_event(SimpleEvent(EVT_AMS_FILAMENT_BACKUP));
1717}
void post_event(wxEvent &&event)
Definition AMSControl.cpp:1821

References post_event().

Referenced by AMSControl().

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

◆ ClearAms()

void Slic3r::GUI::AMSControl::ClearAms ( )
605 {
606 m_simplebook_ams_right->DeleteAllPages();
607 m_simplebook_ams_left->DeleteAllPages();
608 m_simplebook_ams_right->DestroyChildren();
609 m_simplebook_ams_left->DestroyChildren();
610 m_simplebook_ams_right->Layout();
611 m_simplebook_ams_left->Layout();
612 m_simplebook_ams_right->Refresh();
613 m_simplebook_ams_left->Refresh();
614
615 for (auto it : m_ams_preview_list) {
616 delete it.second;
617 }
618 m_ams_preview_list.clear();
619 m_ext_image_list.clear();
620
623
624 m_ams_item_list.clear();
625 m_sizer_prv_right->Clear();
626 m_sizer_prv_left->Clear();
627 m_item_ids = { {}, {} };
628 pair_id.clear();
629}
std::vector< std::vector< std::string > > m_item_ids
Definition AMSControl.hpp:65
std::vector< std::pair< std::string, std::string > > pair_id
Definition AMSControl.hpp:66
std::map< std::string, AMSExtImage * > m_ext_image_list
Definition AMSControl.hpp:62

References m_ams_item_list, m_ams_preview_list, m_ext_image_list, m_item_ids, m_left_page_index, m_right_page_index, m_simplebook_ams_left, m_simplebook_ams_right, m_sizer_prv_left, m_sizer_prv_right, and pair_id.

Referenced by Reset(), and UpdateAms().

Here is the caller graph for this function:

◆ CreateAms()

void Slic3r::GUI::AMSControl::CreateAms ( )
564{
565 auto caninfo0_0 = Caninfo{"def_can_0", (""), *wxWHITE, AMSCanType::AMS_CAN_TYPE_VIRTUAL};
566 auto caninfo0_1 = Caninfo{"def_can_1", (""), *wxWHITE, AMSCanType::AMS_CAN_TYPE_VIRTUAL };
567 auto caninfo0_2 = Caninfo{"def_can_2", (""), *wxWHITE, AMSCanType::AMS_CAN_TYPE_VIRTUAL };
568 auto caninfo0_3 = Caninfo{"def_can_3", (""), *wxWHITE, AMSCanType::AMS_CAN_TYPE_VIRTUAL };
569
570 auto caninfo1_0 = Caninfo{ "def_can_0", (""), *wxWHITE, AMSCanType::AMS_CAN_TYPE_VIRTUAL };
571 auto caninfo1_1 = Caninfo{ "def_can_1", (""), *wxWHITE, AMSCanType::AMS_CAN_TYPE_VIRTUAL };
572 auto caninfo1_2 = Caninfo{ "def_can_2", (""), *wxWHITE, AMSCanType::AMS_CAN_TYPE_VIRTUAL };
573 auto caninfo1_3 = Caninfo{ "def_can_3", (""), *wxWHITE, AMSCanType::AMS_CAN_TYPE_VIRTUAL };
574
575 AMSinfo ams1 = AMSinfo{"0", std::vector<Caninfo>{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}, 0};
576 AMSinfo ams2 = AMSinfo{"1", std::vector<Caninfo>{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}, 0 };
577 AMSinfo ams3 = AMSinfo{"2", std::vector<Caninfo>{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}, 0 };
578 AMSinfo ams4 = AMSinfo{"3", std::vector<Caninfo>{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}, 0 };
579
580 AMSinfo ams5 = AMSinfo{ "4", std::vector<Caninfo>{caninfo1_0, caninfo1_1, caninfo1_2, caninfo1_3}, 1 };
581 AMSinfo ams6 = AMSinfo{ "5", std::vector<Caninfo>{caninfo1_0, caninfo1_1, caninfo1_2, caninfo1_3}, 1 };
582 AMSinfo ams7 = AMSinfo{ "6", std::vector<Caninfo>{caninfo1_0, caninfo1_1, caninfo1_2, caninfo1_3}, 1 };
583 AMSinfo ams8 = AMSinfo{ "7", std::vector<Caninfo>{caninfo1_0, caninfo1_1, caninfo1_2, caninfo1_3}, 1 };
584 std::vector<AMSinfo> ams_info{ams1, ams2, ams3, ams4, ams5, ams6, ams7, ams8 };
585 std::vector<AMSinfo>::iterator it;
586 //Freeze();
587 for (it = ams_info.begin(); it != ams_info.end(); it++) {
589 AddAms(*it);
590 //AddExtraAms(*it);
591 m_ams_info.push_back(*it);
592 }
594 {
595 m_simplebook_ams_left->Hide();
596 }
597 else {
598 m_sizer_prv_left->Layout();
599 m_sizer_prv_right->Layout();
600 }
601 //Thaw();
602}
void AddAms(AMSinfo info, AMSPanelPos pos=AMSPanelPos::LEFT_PANEL)
Definition AMSControl.cpp:1229
void AddAmsPreview(AMSinfo info, AMSModel type)
Definition AMSControl.cpp:1105
std::vector< AMSinfo > m_ams_info
Definition AMSControl.hpp:59
bool m_single_nozzle_no_ams
Definition AMSControl.hpp:163
@ AMS_CAN_TYPE_VIRTUAL
Definition AMSItem.hpp:143

References AddAms(), AddAmsPreview(), Slic3r::GUI::AMS_CAN_TYPE_VIRTUAL, Slic3r::GUI::GENERIC_AMS, m_ams_info, m_simplebook_ams_left, m_single_nozzle_no_ams, m_sizer_prv_left, and m_sizer_prv_right.

Here is the call graph for this function:

◆ createAms()

void Slic3r::GUI::AMSControl::createAms ( wxSimplebook * parent,
int & idx,
AMSinfo info,
AMSPanelPos pos )
1129 {
1130 auto ams_item = new AmsItem(parent, info, info.ams_type, pos);
1131 parent->InsertPage(idx, ams_item, wxEmptyString, true);
1132 ams_item->set_selection(idx);
1133 idx++;
1134
1135 m_ams_item_list[info.ams_id] = ams_item;
1136}

References Slic3r::GUI::AMSinfo::ams_id, Slic3r::GUI::AMSinfo::ams_type, and m_ams_item_list.

Referenced by AddAms().

Here is the caller graph for this function:

◆ CreateAmsDoubleNozzle()

void Slic3r::GUI::AMSControl::CreateAmsDoubleNozzle ( const std::string & series_name,
const std::string & printer_type )
632{
633 std::vector<AMSinfo> single_info_left;
634 std::vector<AMSinfo> single_info_right;
635
636 //Freeze();
637 // Orca: place each AMS by its switch inlet when a Filament Track Switch is installed, else by the pinned
638 // nozzle_id (routes_to_main_extruder). Switch-less machines are unaffected; ext spools keep nozzle_id.
639 for (auto ams_info = m_ams_info.begin(); ams_info != m_ams_info.end(); ams_info++){
640 if (ams_info->cans.size() == GENERIC_AMS_SLOT_NUM){
641 ams_info->routes_to_main_extruder() ? m_item_ids[MAIN_EXTRUDER_ID].push_back(ams_info->ams_id) : m_item_ids[DEPUTY_EXTRUDER_ID].push_back(ams_info->ams_id);
642 AddAmsPreview(*ams_info, ams_info->ams_type);
643 AddAms(*ams_info);
644 }
645 else if (ams_info->cans.size() == 1){
646
647 if (ams_info->routes_to_main_extruder()){
648 single_info_right.push_back(*ams_info);
649 if (single_info_right.size() == 2){
650 single_info_right[0].routes_to_main_extruder() ? m_item_ids[MAIN_EXTRUDER_ID].push_back(single_info_right[0].ams_id) : m_item_ids[DEPUTY_EXTRUDER_ID].push_back(single_info_right[0].ams_id);
651 single_info_right[1].routes_to_main_extruder() ? m_item_ids[MAIN_EXTRUDER_ID].push_back(single_info_right[1].ams_id) : m_item_ids[DEPUTY_EXTRUDER_ID].push_back(single_info_right[1].ams_id);
652 AddAms(single_info_right, series_name, printer_type);
653 AddAmsPreview(single_info_right, AMSPanelPos::RIGHT_PANEL);
654 pair_id.push_back(std::make_pair(single_info_right[0].ams_id, single_info_right[1].ams_id));
655 single_info_right.clear();
656 }
657 }
658 else if (!ams_info->routes_to_main_extruder()){
659 single_info_left.push_back(*ams_info);
660 if (single_info_left.size() == 2){
661 single_info_left[0].routes_to_main_extruder() ? m_item_ids[MAIN_EXTRUDER_ID].push_back(single_info_left[0].ams_id) : m_item_ids[DEPUTY_EXTRUDER_ID].push_back(single_info_left[0].ams_id);
662 single_info_left[1].routes_to_main_extruder() ? m_item_ids[MAIN_EXTRUDER_ID].push_back(single_info_left[1].ams_id) : m_item_ids[DEPUTY_EXTRUDER_ID].push_back(single_info_left[1].ams_id);
663 AddAms(single_info_left, series_name, printer_type);
664 AddAmsPreview(single_info_left, AMSPanelPos::LEFT_PANEL);
665 pair_id.push_back(std::make_pair(single_info_left[0].ams_id, single_info_left[1].ams_id));
666 single_info_left.clear();
667 }
668 }
669 }
670 }
671 if (m_ext_info.size() <= 1) {
672 BOOST_LOG_TRIVIAL(trace) << "vt_slot empty!";
673 assert(0);
674 return;
675 }
676 AMSinfo ext_info;
677 for (auto info : m_ext_info){
678 if (info.ams_id == std::to_string(VIRTUAL_TRAY_MAIN_ID)){
679 ext_info = info;
680 single_info_right.push_back(ext_info);
681 break;
682 }
683 }
684 //wait add
685
686
687 single_info_right[0].routes_to_main_extruder() ? m_item_ids[MAIN_EXTRUDER_ID].push_back(single_info_right[0].ams_id) : m_item_ids[DEPUTY_EXTRUDER_ID].push_back(single_info_right[0].ams_id);
688 if (single_info_right.size() == 2){
689 single_info_right[1].routes_to_main_extruder() ? m_item_ids[MAIN_EXTRUDER_ID].push_back(single_info_right[1].ams_id) : m_item_ids[DEPUTY_EXTRUDER_ID].push_back(single_info_right[1].ams_id);
690 pair_id.push_back(std::make_pair(single_info_right[0].ams_id, single_info_right[1].ams_id));
691 }
692 AddAms(single_info_right, series_name, printer_type);
693 AddAmsPreview(single_info_right, AMSPanelPos::RIGHT_PANEL);
694 single_info_right.clear();
695
696 for (auto info : m_ext_info) {
697 if (info.ams_id == std::to_string(VIRTUAL_TRAY_DEPUTY_ID)) {
698 ext_info = info;
699 single_info_left.push_back(ext_info);
700 break;
701 }
702 }
703 //wait add
704 single_info_left[0].routes_to_main_extruder() ? m_item_ids[MAIN_EXTRUDER_ID].push_back(single_info_left[0].ams_id) : m_item_ids[DEPUTY_EXTRUDER_ID].push_back(single_info_left[0].ams_id);
705 if (single_info_left.size() == 2){
706 single_info_left[1].routes_to_main_extruder() ? m_item_ids[MAIN_EXTRUDER_ID].push_back(single_info_left[1].ams_id) : m_item_ids[DEPUTY_EXTRUDER_ID].push_back(single_info_left[1].ams_id);
707 pair_id.push_back(std::make_pair(single_info_left[0].ams_id, single_info_left[1].ams_id));
708 }
709 AddAmsPreview(single_info_left, AMSPanelPos::LEFT_PANEL);
710 AddAms(single_info_left, series_name, printer_type);
711 single_info_left.clear();
712
713 m_sizer_prv_left->Layout();
714 m_sizer_prv_right->Layout();
715 m_simplebook_ams_left->Show();
717 if (m_ams_info.size() > 0){
718 m_panel_prv_left->Show();
719 m_panel_prv_right->Show();
720 }
721 else{
722 m_panel_prv_left->Hide();
723 m_panel_prv_right->Hide();
724 }
725 m_simplebook_ams_left->SetSelection(0);
726 m_simplebook_ams_right->SetSelection(0);
727
728 auto left_init_mode = findFirstMode(AMSPanelPos::LEFT_PANEL);
729 auto right_init_mode = findFirstMode(AMSPanelPos::RIGHT_PANEL);
730
731
732 m_down_road->UpdateLeft(2, left_init_mode);
733 m_down_road->UpdateRight(2, right_init_mode);
734
735 m_extruder->updateNozzleNum(2);
736
739
740 m_current_ams = "";
742 m_extruder->OnAmsLoading(false, DEPUTY_EXTRUDER_ID);
744 m_extruder->OnAmsLoading(false, MAIN_EXTRUDER_ID);
745
746 m_amswin->Layout();
747 m_amswin->Fit();
748
749 //Thaw();
750}
#define GENERIC_AMS_SLOT_NUM
Definition AMSItem.hpp:194
#define DEPUTY_EXTRUDER_ID
Definition DevDefs.h:102
#define VIRTUAL_TRAY_DEPUTY_ID
Definition DevDefs.h:90
#define VIRTUAL_TRAY_MAIN_ID
Definition DevDefs.h:89
#define MAIN_EXTRUDER_ID
Definition DevDefs.h:101
std::vector< AMSinfo > m_ext_info
Definition AMSControl.hpp:60
AMSRoadShowMode findFirstMode(AMSPanelPos pos)
Definition AMSControl.cpp:1138
@ AMS_ROAD_STEP_NONE
Definition AMSItem.hpp:122
void trace(unsigned int level, const char *message)
Definition utils.cpp:247

References AddAms(), AddAmsPreview(), Slic3r::GUI::AMS_ROAD_STEP_NONE, DEPUTY_EXTRUDER_ID, findFirstMode(), GENERIC_AMS_SLOT_NUM, Slic3r::GUI::LEFT_PANEL, m_ams_info, m_amswin, m_current_ams, m_current_show_ams_left, m_current_show_ams_right, m_down_road, m_ext_info, m_extruder, m_item_ids, m_panel_prv_left, m_panel_prv_right, m_simplebook_ams_left, m_simplebook_ams_right, m_sizer_prv_left, m_sizer_prv_right, MAIN_EXTRUDER_ID, pair_id, Slic3r::GUI::RIGHT_PANEL, Slic3r::trace(), VIRTUAL_TRAY_DEPUTY_ID, and VIRTUAL_TRAY_MAIN_ID.

Referenced by UpdateAms().

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

◆ createAmsPanel()

void Slic3r::GUI::AMSControl::createAmsPanel ( wxSimplebook * parent,
int & idx,
std::vector< AMSinfo > infos,
const std::string & series_name,
const std::string & printer_type,
AMSPanelPos pos,
int total_ext_num )
1169{
1170 if (infos.size() <= 0) return;
1171
1172 wxPanel* book_panel = new wxPanel(parent);
1173 wxBoxSizer* book_sizer = new wxBoxSizer(wxHORIZONTAL);
1174 book_panel->SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR));
1175 book_panel->SetSize(AMS_PANEL_SIZE);
1176 book_panel->SetMinSize(AMS_PANEL_SIZE);
1177
1178 AmsItem* ams1 = nullptr, * ams2 = nullptr;
1179 ams1 = new AmsItem(book_panel, infos[0], infos[0].ams_type, pos);
1180 if (ams1->get_ext_image()) { ams1->get_ext_image()->setTotalExtNum(series_name, printer_type, total_ext_num); }
1181
1182 if (infos.size() == MAX_AMS_NUM_IN_PANEL) { //n3s and ? in a panel
1183 ams2 = new AmsItem(book_panel, infos[1], infos[1].ams_type, pos);
1184 if (ams2->get_ext_image()) { ams2->get_ext_image()->setTotalExtNum(series_name, printer_type, total_ext_num); }
1185
1186 if (pos == AMSPanelPos::LEFT_PANEL) {
1187 book_sizer->Add(ams1, 0, wxLEFT, FromDIP(4));
1188 book_sizer->Add(ams2, 0, wxLEFT, FromDIP(30));
1189 }
1190 else {
1191 book_sizer->Add(ams1, 0, wxLEFT, FromDIP(72));
1192 book_sizer->Add(ams2, 0, wxLEFT, FromDIP(30));
1193 }
1194 }
1195 else { //only an ext in a panel
1196 if (ams1->get_ext_image()) { ams1->get_ext_image()->setShowAmsExt(false);}
1197
1198 if (ams1->get_ams_model() == AMSModel::EXT_AMS) {
1199 if (ams1->get_ext_type() == LITE_EXT) {
1200 //book_sizer->Add(ams1, 0, wxALIGN_CENTER_HORIZONTAL, 0);
1201 book_sizer->Add(ams1, 0, wxLEFT, (book_panel->GetSize().x - ams1->GetSize().x) / 2);
1202 }
1203 else{
1204 auto ext_image = new AMSExtImage(book_panel, pos, m_total_ext_count, false);
1205 book_sizer->Add(ams1, 0, wxLEFT, FromDIP(30));
1206 book_sizer->Add(ext_image, 0, wxEXPAND | wxLEFT, FromDIP(30));
1207 ext_image->setTotalExtNum(series_name, printer_type, total_ext_num);
1208 m_ext_image_list[infos[0].ams_id] = ext_image;
1209 }
1210 }
1211 }
1212
1213 book_panel->SetSizer(book_sizer);
1214 book_panel->Layout();
1215 book_panel->Fit();
1216
1217 parent->InsertPage(idx, book_panel, wxEmptyString, true);
1219 ams1->set_selection(idx);
1220 m_ams_item_list[infos[0].ams_id] = ams1;
1221 if (ams2) {
1223 ams2->set_selection(idx);
1224 m_ams_item_list[infos[1].ams_id] = ams2;
1225 }
1226 idx++;
1227}
#define AMS_CONTROL_DEF_LIB_BK_COLOUR
Definition AMSItem.hpp:45
#define MAX_AMS_NUM_IN_PANEL
Definition AMSItem.hpp:195
#define AMS_PANEL_SIZE
Definition AMSItem.hpp:192
static wxColour darkModeColorFor(wxColour const &color)
Definition StateColor.cpp:219
@ LITE_EXT
Definition AMSItem.hpp:67
@ EXT_AMS
Definition AMSItem.hpp:58

References AMS_CONTROL_DEF_LIB_BK_COLOUR, AMS_PANEL_SIZE, StateColor::darkModeColorFor(), Slic3r::GUI::EXT_AMS, Slic3r::GUI::AmsItem::get_ams_model(), Slic3r::GUI::AmsItem::get_ext_image(), Slic3r::GUI::AmsItem::get_ext_type(), Slic3r::GUI::LEFT_PANEL, Slic3r::GUI::LITE_EXT, m_ams_item_list, m_ext_image_list, m_total_ext_count, MAX_AMS_NUM_IN_PANEL, Slic3r::GUI::AmsItem::set_selection(), Slic3r::GUI::AMSExtImage::setShowAmsExt(), and Slic3r::GUI::AMSExtImage::setTotalExtNum().

Referenced by AddAms().

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

◆ CreateAmsSingleNozzle()

void Slic3r::GUI::AMSControl::CreateAmsSingleNozzle ( const std::string & series_name,
const std::string & printer_type )
753{
754 std::vector<int>m_item_nums{0,0};
755 std::vector<AMSinfo> single_info;
756
757 //Freeze();
758
759 //add ams data
760 for (auto ams_info = m_ams_info.begin(); ams_info != m_ams_info.end(); ams_info++) {
761 if (ams_info->cans.size() == GENERIC_AMS_SLOT_NUM) {
762 m_item_ids[DEPUTY_EXTRUDER_ID].push_back(ams_info->ams_id);
763 AddAmsPreview(*ams_info, ams_info->ams_type);
765 //AddExtraAms(*ams_info);
766 }
767 else if (ams_info->cans.size() == 1) {
768 m_item_ids[DEPUTY_EXTRUDER_ID].push_back(ams_info->ams_id);
769 AddAmsPreview(*ams_info, ams_info->ams_type);
771
772 /*single_info.push_back(*ams_info);
773 if (single_info.size() == MAX_AMS_NUM_IN_PANEL) {
774 m_item_ids[DEPUTY_NOZZLE_ID].push_back(single_info[0].ams_id);
775 m_item_ids[DEPUTY_NOZZLE_ID].push_back(single_info[1].ams_id);
776 m_item_nums[DEPUTY_NOZZLE_ID]++;
777 pair_id.push_back(std::make_pair(single_info[0].ams_id, single_info[1].ams_id));
778 AddAmsPreview(single_info, AMSPanelPos::LEFT_PANEL);
779 AddAms(single_info, AMSPanelPos::LEFT_PANEL);
780 single_info.clear();
781 }*/
782 }
783 }
784 if (single_info.size() > 0){
785 m_item_ids[DEPUTY_EXTRUDER_ID].push_back(single_info[0].ams_id);
786 m_item_nums[DEPUTY_EXTRUDER_ID]++;
787 AddAms(single_info, series_name, printer_type, AMSPanelPos::LEFT_PANEL);
789 single_info.clear();
790 }
791
792 // data ext data
793 if (m_ext_info.size() <= 0){
794 BOOST_LOG_TRIVIAL(trace) << "vt_slot empty!";
795 return;
796 }
797
798 single_info.push_back(m_ext_info[0]);
799 m_item_ids[MAIN_EXTRUDER_ID].push_back(single_info[0].ams_id);
800 AddAms(single_info, series_name, printer_type, AMSPanelPos::RIGHT_PANEL);
801 auto left_init_mode = findFirstMode(AMSPanelPos::LEFT_PANEL);
802 auto right_init_mode = findFirstMode(AMSPanelPos::RIGHT_PANEL);
803
804 m_panel_prv_right->Hide();
805 m_panel_prv_left->Hide();
806 if (m_ams_info.size() > 0){
807 m_simplebook_ams_left->Show();
809 m_simplebook_ams_left->SetSelection(0);
810 m_simplebook_ams_right->SetSelection(0);
811
812 if (m_ams_info.size() > 1){
813 m_sizer_prv_right->Layout();
814 m_panel_prv_right->Show();
815 }
816 m_down_road->UpdateLeft(1, left_init_mode);
817 m_down_road->UpdateRight(1, right_init_mode);
818 }
819 else {
820 m_panel_prv_left->Hide();
821 m_panel_prv_right->Hide();
822 m_simplebook_ams_left->Hide();
824
825 m_simplebook_ams_right->SetSelection(0);
826 m_down_road->UpdateLeft(1, left_init_mode);
827 m_down_road->UpdateRight(1, right_init_mode);
828 }
831 m_current_ams = "";
832
835 m_extruder->updateNozzleNum(1);
836 m_extruder->OnAmsLoading(false, MAIN_EXTRUDER_ID);
837
838 m_amswin->Layout();
839 m_amswin->Fit();
840
841 //Refresh();
842 //Thaw();
843}

References AddAms(), AddAmsPreview(), Slic3r::GUI::AMS_ROAD_STEP_NONE, DEPUTY_EXTRUDER_ID, findFirstMode(), GENERIC_AMS_SLOT_NUM, Slic3r::GUI::LEFT_PANEL, m_ams_info, m_amswin, m_current_ams, m_current_show_ams_left, m_current_show_ams_right, m_down_road, m_ext_info, m_extruder, m_item_ids, m_panel_prv_left, m_panel_prv_right, m_simplebook_ams_left, m_simplebook_ams_right, m_sizer_prv_right, MAIN_EXTRUDER_ID, Slic3r::GUI::RIGHT_PANEL, and Slic3r::trace().

Referenced by UpdateAms().

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

◆ Enable()

bool Slic3r::GUI::AMSControl::Enable ( bool enable = true)
virtual
1478{
1479 for (auto prv_it : m_ams_preview_list) {
1480 AMSPreview* prv = prv_it.second;
1481 prv->Enable(enable);
1482 }
1483
1484 for (auto item_it : m_ams_item_list) {
1485 AmsItem* item = item_it.second;
1486 item->Enable(enable);
1487 }
1488
1489 m_button_extruder_feed->Enable(enable);
1490 m_button_extruder_back->Enable(enable);
1491 m_button_auto_refill->Enable(enable);
1492 m_button_ams_setting->Enable(enable);
1493
1494 m_filament_load_step->Enable(enable);
1495 return wxWindow::Enable(enable);
1496}
::StepIndicator * m_filament_load_step
Definition AMSControl.hpp:128

References Slic3r::GUI::AMSPreview::Enable(), m_ams_item_list, m_ams_preview_list, m_button_ams_setting, m_button_auto_refill, m_button_extruder_back, m_button_extruder_feed, and m_filament_load_step.

Here is the call graph for this function:

◆ enable_ams_setting()

void Slic3r::GUI::AMSControl::enable_ams_setting ( bool en)
873{
874 m_button_ams_setting->Enable(en);
875}

References m_button_ams_setting.

◆ EnableLoadFilamentBtn()

void Slic3r::GUI::AMSControl::EnableLoadFilamentBtn ( bool enable,
const std::string & ams_id,
const std::string & can_id,
const wxString & tips )
433{
434 m_button_extruder_feed->Enable(enable);
435 if (m_button_extruder_feed->GetToolTipText() != tips) {
436 BOOST_LOG_TRIVIAL(info) << "ams_id=" << ams_id << ", can_id=" << can_id << " Set Load Filament Button ToolTip : " << tips.ToUTF8();
437 m_button_extruder_feed->SetToolTip(tips);
438 }
439}

References m_button_extruder_feed.

◆ EnableUnLoadFilamentBtn()

void Slic3r::GUI::AMSControl::EnableUnLoadFilamentBtn ( bool enable,
const std::string & ams_id,
const std::string & can_id,
const wxString & tips )
442{
443 m_button_extruder_back->Enable(enable);
444 if (m_button_extruder_back->GetToolTipText() != tips) {
445 BOOST_LOG_TRIVIAL(info) << "ams_id=" << ams_id << ", can_id=" << can_id << " Set Unload Filament Button ToolTip : " << tips.ToUTF8();
446 m_button_extruder_back->SetToolTip(tips);
447 }
448}

References m_button_extruder_back.

◆ EnterExtraAMSMode()

void Slic3r::GUI::AMSControl::EnterExtraAMSMode ( )
480{
481 //m_vams_lib->m_ams_model = m_ext_model;
483 m_panel_prv_left->Hide();
484
485 m_simplebook_ams_left->SetSelection(2);
486 m_extruder->no_ams_mode(false);
487 m_amswin->Layout();
488 m_amswin->Fit();
489 Layout();
490 Refresh(true);
492
493}
AMSModel m_is_none_ams_mode
Definition AMSControl.hpp:162
@ AMS_LITE
Definition AMSItem.hpp:60

References Slic3r::GUI::AMS_LITE, m_amswin, m_extruder, m_is_none_ams_mode, m_panel_prv_left, and m_simplebook_ams_left.

◆ EnterGenericAMSMode()

void Slic3r::GUI::AMSControl::EnterGenericAMSMode ( )
470{
472 m_extruder->no_ams_mode(false);
473 m_amswin->Layout();
474 m_amswin->Fit();
475 Layout();
477}

References Slic3r::GUI::GENERIC_AMS, m_amswin, m_extruder, and m_is_none_ams_mode.

Referenced by show_noams_mode().

Here is the caller graph for this function:

◆ EnterNoneAMSMode()

void Slic3r::GUI::AMSControl::EnterNoneAMSMode ( )
451{
452 //m_vams_lib->m_ams_model = m_ext_model;
454 m_panel_prv_left->Hide();
455
456 m_simplebook_ams_left->SetSelection(0);
457 m_extruder->no_ams_mode(true);
458 //m_button_ams_setting->Hide();
459 //m_button_extruder_feed->Show();
460 //m_button_extruder_back->Show();
461
462 ShowFilamentTip(false);
463 m_amswin->Layout();
464 m_amswin->Fit();
465 Layout();
467}
void ShowFilamentTip(bool hasams=true)
Definition AMSControl.cpp:1460

References Slic3r::GUI::EXT_AMS, m_amswin, m_extruder, m_is_none_ams_mode, m_panel_prv_left, m_simplebook_ams_left, and ShowFilamentTip().

Here is the call graph for this function:

◆ findFirstMode()

AMSRoadShowMode Slic3r::GUI::AMSControl::findFirstMode ( AMSPanelPos pos)
1138 {
1139 auto init_mode = AMSRoadShowMode::AMS_ROAD_MODE_NONE;
1140 std::string ams_id = "";
1141 if (pos == AMSPanelPos::LEFT_PANEL && m_item_ids[DEPUTY_EXTRUDER_ID].size() > 0){
1142 ams_id = m_item_ids[DEPUTY_EXTRUDER_ID][0];
1143 }
1144 else if (pos == AMSPanelPos::RIGHT_PANEL && m_item_ids[MAIN_EXTRUDER_ID].size() > 0){
1145 ams_id = m_item_ids[MAIN_EXTRUDER_ID][0];
1146 }
1147
1148 auto item = m_ams_item_list.find(ams_id);
1149 if (ams_id.empty() || item == m_ams_item_list.end()) return init_mode;
1150
1151 if (item->second->get_can_count() == GENERIC_AMS_SLOT_NUM) {
1152 if (item->second->get_ams_model() == AMSModel::AMS_LITE) return AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE;
1153 if (item->second->get_ams_model() == AMSModel::EXT_AMS && item->second->get_ext_type() == AMSModelOriginType::LITE_EXT) return AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE;
1155 }
1156 else{
1157 for (auto ids : pair_id){
1158 if (ids.first == ams_id || ids.second == ams_id){
1160 }
1161 }
1162 if (item->second->get_ams_model() == AMSModel::EXT_AMS && item->second->get_ext_type() == AMSModelOriginType::LITE_EXT) return AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE;
1163 if (item->second->get_ams_model() == AMSModel::N3S_AMS) return AMSRoadShowMode::AMS_ROAD_MODE_SINGLE_N3S;
1165 }
1166}
@ AMS_ROAD_MODE_SINGLE
Definition AMSItem.hpp:96
@ AMS_ROAD_MODE_FOUR
Definition AMSItem.hpp:94
@ AMS_ROAD_MODE_AMS_LITE
Definition AMSItem.hpp:98
@ AMS_ROAD_MODE_DOUBLE
Definition AMSItem.hpp:95
@ AMS_ROAD_MODE_NONE
Definition AMSItem.hpp:99
@ AMS_ROAD_MODE_SINGLE_N3S
Definition AMSItem.hpp:97

References Slic3r::GUI::AMS_LITE, Slic3r::GUI::AMS_ROAD_MODE_AMS_LITE, Slic3r::GUI::AMS_ROAD_MODE_DOUBLE, Slic3r::GUI::AMS_ROAD_MODE_FOUR, Slic3r::GUI::AMS_ROAD_MODE_NONE, Slic3r::GUI::AMS_ROAD_MODE_SINGLE, Slic3r::GUI::AMS_ROAD_MODE_SINGLE_N3S, DEPUTY_EXTRUDER_ID, Slic3r::GUI::EXT_AMS, GENERIC_AMS_SLOT_NUM, Slic3r::GUI::LEFT_PANEL, Slic3r::GUI::LITE_EXT, m_ams_item_list, m_item_ids, MAIN_EXTRUDER_ID, Slic3r::GUI::N3S_AMS, pair_id, and Slic3r::GUI::RIGHT_PANEL.

Referenced by CreateAmsDoubleNozzle(), and CreateAmsSingleNozzle().

Here is the caller graph for this function:

◆ GenerateSimulateData()

std::vector< AMSinfo > Slic3r::GUI::AMSControl::GenerateSimulateData ( )
903 {
904 auto caninfo0_0 = Caninfo{ "0", (""), *wxRED, AMSCanType::AMS_CAN_TYPE_VIRTUAL };
905 auto caninfo0_1 = Caninfo{ "1", (""), *wxGREEN, AMSCanType::AMS_CAN_TYPE_VIRTUAL };
906 auto caninfo0_2 = Caninfo{ "2", (""), *wxBLUE, AMSCanType::AMS_CAN_TYPE_VIRTUAL };
907 auto caninfo0_3 = Caninfo{ "3", (""), *wxYELLOW, AMSCanType::AMS_CAN_TYPE_VIRTUAL };
908
909 auto caninfo1_0 = Caninfo{ "0", (""), wxColour(255, 255, 0), AMSCanType::AMS_CAN_TYPE_VIRTUAL };
910 auto caninfo1_1 = Caninfo{ "1", (""), wxColour(255, 0, 255), AMSCanType::AMS_CAN_TYPE_VIRTUAL };
911 auto caninfo1_2 = Caninfo{ "2", (""), wxColour(0, 255, 255), AMSCanType::AMS_CAN_TYPE_VIRTUAL };
912 auto caninfo1_3 = Caninfo{ "3", (""), wxColour(200, 80, 150), AMSCanType::AMS_CAN_TYPE_VIRTUAL };
913
914 AMSinfo ams1 = AMSinfo{ "0", std::vector<Caninfo>{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}, 0 };
915 AMSinfo ams2 = AMSinfo{ "1", std::vector<Caninfo>{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}, 0 };
916 AMSinfo ams3 = AMSinfo{ "2", std::vector<Caninfo>{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}, 0 };
917 AMSinfo ams4 = AMSinfo{ "3", std::vector<Caninfo>{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}, 0 };
918
919 AMSinfo singleams1 = AMSinfo{ "0", std::vector<Caninfo>{caninfo0_0}, 0 };
920 AMSinfo singleams2 = AMSinfo{ "1", std::vector<Caninfo>{caninfo0_0}, 0 };
921 AMSinfo singleams3 = AMSinfo{ "2", std::vector<Caninfo>{caninfo0_0}, 0 };
922 AMSinfo singleams4 = AMSinfo{ "3", std::vector<Caninfo>{caninfo0_0}, 0 };
923 singleams1.ams_type = AMSModel::N3S_AMS;
924 singleams2.ams_type = AMSModel::N3S_AMS;
925 singleams3.ams_type = AMSModel::N3S_AMS;
926 singleams4.ams_type = AMSModel::N3S_AMS;
927
928 AMSinfo ams5 = AMSinfo{ "4", std::vector<Caninfo>{caninfo1_0, caninfo1_1, caninfo1_2, caninfo1_3}, 1 };
929 AMSinfo ams6 = AMSinfo{ "5", std::vector<Caninfo>{caninfo1_0, caninfo1_1, caninfo1_2, caninfo1_3}, 1 };
930 AMSinfo ams7 = AMSinfo{ "6", std::vector<Caninfo>{caninfo1_0, caninfo1_1, caninfo1_2, caninfo1_3}, 1 };
931 AMSinfo ams8 = AMSinfo{ "7", std::vector<Caninfo>{caninfo1_0, caninfo1_1, caninfo1_2, caninfo1_3}, 1 };
932
933 AMSinfo singleams5 = AMSinfo{ "4", std::vector<Caninfo>{caninfo1_0}, 1 };
934 AMSinfo singleams6 = AMSinfo{ "5", std::vector<Caninfo>{caninfo1_0}, 1 };
935 AMSinfo singleams7 = AMSinfo{ "6", std::vector<Caninfo>{caninfo1_0}, 1 };
936 AMSinfo singleams8 = AMSinfo{ "7", std::vector<Caninfo>{caninfo1_0}, 1 };
937 AMSinfo singleams9 = AMSinfo{ "8", std::vector<Caninfo>{caninfo1_0}, 1 };
938 singleams5.ams_type = AMSModel::N3S_AMS;
939 singleams6.ams_type = AMSModel::N3S_AMS;
940 singleams7.ams_type = AMSModel::N3S_AMS;
941 singleams8.ams_type = AMSModel::N3S_AMS;
942 singleams9.ams_type = AMSModel::N3S_AMS;
943
944 ams3.current_can_id = "2";
946 ams5.current_can_id = "2";
948 std::vector<AMSinfo>generic_ams = { ams1, ams2, ams3, ams4, ams5, ams6, ams7, ams8 };
949 std::vector<AMSinfo>single_ams = { singleams1, singleams2, singleams3, singleams4, singleams5, singleams6, singleams7, singleams8, singleams9 };
950 std::vector<AMSinfo>ams_info = { ams1, singleams2, ams3, singleams4, ams5, singleams6, ams7, singleams8, singleams9 };
951 return ams_info;
952}
@ AMS_ROAD_STEP_COMBO_LOAD_STEP2
Definition AMSItem.hpp:128

References Slic3r::GUI::AMS_CAN_TYPE_VIRTUAL, Slic3r::GUI::AMS_ROAD_STEP_COMBO_LOAD_STEP2, Slic3r::GUI::AMSinfo::ams_type, Slic3r::GUI::AMSinfo::current_can_id, Slic3r::GUI::AMSinfo::current_step, and Slic3r::GUI::N3S_AMS.

◆ get_filament_id()

std::string Slic3r::GUI::AMSControl::get_filament_id ( const std::string & ams_id,
const std::string & can_id )
private
1787{
1788 for (const auto& ams_info : m_ams_info)
1789 {
1790 if (ams_info.ams_id == m_current_ams)
1791 {
1792 bool found = false;
1793 const auto& can_info = ams_info.get_caninfo(this->GetCurrentCan(m_current_ams), found);
1794 if (found)
1795 {
1796 return can_info.filament_id;
1797 }
1798 }
1799 }
1800
1801 for (const auto& ext_info : m_ext_info)
1802 {
1803 if (ext_info.ams_id == m_current_ams)
1804 {
1805 bool found = false;
1806 const auto& can_info = ext_info.get_caninfo(this->GetCurrentCan(m_current_ams), found);
1807 if (found)
1808 {
1809 return can_info.filament_id;
1810 }
1811 }
1812 }
1813
1814 return std::string();
1815}
std::string GetCurrentCan(std::string amsid)
Definition AMSControl.cpp:348

References GetCurrentCan(), m_ams_info, m_current_ams, and m_ext_info.

Referenced by on_filament_load().

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

◆ GetCanColour()

wxColour Slic3r::GUI::AMSControl::GetCanColour ( std::string amsid,
std::string canid )
418{
419 wxColour col = *wxWHITE;
420 for (auto i = 0; i < m_ams_info.size(); i++) {
421 if (m_ams_info[i].ams_id == amsid) {
422 for (auto o = 0; o < m_ams_info[i].cans.size(); o++) {
423 if (m_ams_info[i].cans[o].can_id == canid) {
424 col = m_ams_info[i].cans[o].material_colour;
425 }
426 }
427 }
428 }
429 return col;
430}

References m_ams_info.

◆ GetCurentAms()

std::string Slic3r::GUI::AMSControl::GetCurentAms ( )
336 {
337 return m_current_ams;
338}

References m_current_ams.

◆ GetCurentShowAms()

std::string Slic3r::GUI::AMSControl::GetCurentShowAms ( AMSPanelPos pos = AMSPanelPos::RIGHT_PANEL)
339 {
340 if (pos == AMSPanelPos::RIGHT_PANEL){
342 }
343 else{
345 }
346}

References m_current_show_ams_left, m_current_show_ams_right, and Slic3r::GUI::RIGHT_PANEL.

Referenced by SetAmsStep().

Here is the caller graph for this function:

◆ GetCurrentCan()

std::string Slic3r::GUI::AMSControl::GetCurrentCan ( std::string amsid)
349{
350 std::string current_can;
351 for (auto ams_item : m_ams_item_list) {
352 AmsItem* item = ams_item.second;
353 if (item == nullptr){
354 continue;
355 }
356 if (item->get_ams_id() == amsid) {
357 current_can = item->GetCurrentCan();
358 return current_can;
359 }
360 }
361 return current_can;
362}

References Slic3r::GUI::AmsItem::get_ams_id(), Slic3r::GUI::AmsItem::GetCurrentCan(), and m_ams_item_list.

Referenced by get_filament_id(), and on_filament_load().

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

◆ IsAmsInRightPanel()

bool Slic3r::GUI::AMSControl::IsAmsInRightPanel ( std::string ams_id)
364 {
365 if (m_total_ext_count == 2){
366 // Orca: inlet-aware panel routing (see AMSinfo::routes_to_main_extruder)
367 if (m_ams_item_list.find(ams_id) != m_ams_item_list.end() && m_ams_item_list[ams_id]->routes_to_main_extruder()) {
368 return true;
369 }
370 else{
371 return false;
372 }
373 }
374 else{
375 for (auto id : m_item_ids[MAIN_EXTRUDER_ID]){
376 if (id == ams_id){
377 return true;
378 }
379 }
380 return false;
381 }
382}

References m_ams_item_list, m_item_ids, m_total_ext_count, and MAIN_EXTRUDER_ID.

Referenced by SetAmsStep(), and SwitchAms().

Here is the caller graph for this function:

◆ isFilaSwitchReady()

std::tuple< bool, bool > Slic3r::GUI::AMSControl::isFilaSwitchReady ( )
1725{
1726 DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager();
1727 if (!dev) return {false, false};
1728 MachineObject* obj = dev->get_selected_machine();
1729 if (!obj) return {false, false};
1730 // Orca: GetFilaSwitch() is a raw non-null accessor (BBS returns a shared_ptr).
1731 DevFilaSwitch* fila_switch = obj->GetFilaSwitch();
1732 if (fila_switch)
1733 {
1734 return {fila_switch->IsInstalled(), fila_switch->IsReady()};
1735 }
1736 return {false, false};
1737}

References Slic3r::DeviceManager::get_selected_machine(), Slic3r::MachineObject::GetFilaSwitch(), Slic3r::DevFilaSwitch::IsInstalled(), and Slic3r::DevFilaSwitch::IsReady().

Referenced by UpdateAms().

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

◆ msw_rescale()

void Slic3r::GUI::AMSControl::msw_rescale ( )
516{
517 m_button_ams_setting_normal.msw_rescale();
518 m_button_ams_setting_hover.msw_rescale();
519 m_button_ams_setting_press.msw_rescale();
521
522 m_extruder->msw_rescale();
523
524 if (m_button_extruder_feed) m_button_extruder_feed->Rescale(); // ORCA
525 if (m_button_extruder_back) m_button_extruder_back->Rescale(); // ORCA
526 if (m_button_auto_refill) m_button_auto_refill->Rescale(); // ORCA
527 if (m_button_ams_setting) m_button_ams_setting->SetMinSize(wxSize(FromDIP(25), FromDIP(24)));
528
529
530 for (auto ams_item : m_ams_item_list) {
531 if (ams_item.second){
532 ams_item.second->msw_rescale();
533 }
534 }
535 for (auto ams_prv : m_ams_preview_list) {
536 if (ams_prv.second){
537 ams_prv.second->msw_rescale();
538 }
539 }
540 for (auto ext_img : m_ext_image_list) {
541 if (ext_img.second) {
542 ext_img.second->msw_rescale();
543 }
544 }
545 if (m_down_road){
546 m_down_road->msw_rescale();
547 }
548
550 m_percent_humidity_dry_popup->msw_rescale();
551 }
552
553 if (m_ams_dry_ctr_win) {
554 m_ams_dry_ctr_win->msw_rescale();
555 }
556
557 m_Humidity_tip_popup.msw_rescale();
558
559 Layout();
560 Refresh();
561}

References m_ams_dry_ctr_win, m_ams_item_list, m_ams_preview_list, m_button_ams_setting, m_button_ams_setting_hover, m_button_ams_setting_normal, m_button_ams_setting_press, m_button_auto_refill, m_button_extruder_back, m_button_extruder_feed, m_down_road, m_ext_image_list, m_extruder, m_Humidity_tip_popup, and m_percent_humidity_dry_popup.

◆ on_ams_setting_click() [1/2]

void Slic3r::GUI::AMSControl::on_ams_setting_click ( wxCommandEvent & event)

◆ on_ams_setting_click() [2/2]

void Slic3r::GUI::AMSControl::on_ams_setting_click ( wxMouseEvent & event)
1720{
1721 post_event(SimpleEvent(EVT_AMS_SETTINGS));
1722}

References post_event(), and Slic3r::GUI::wxMouseEvent.

Referenced by AMSControl().

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

◆ on_clibration_again_click()

void Slic3r::GUI::AMSControl::on_clibration_again_click ( wxMouseEvent & event)
1817{ post_event(SimpleEvent(EVT_AMS_CLIBRATION_AGAIN)); }

References post_event(), and Slic3r::GUI::wxMouseEvent.

Here is the call graph for this function:

◆ on_clibration_cancel_click()

void Slic3r::GUI::AMSControl::on_clibration_cancel_click ( wxMouseEvent & event)
1819{ post_event(SimpleEvent(EVT_AMS_CLIBRATION_CANCEL)); }

References post_event(), and Slic3r::GUI::wxMouseEvent.

Here is the call graph for this function:

◆ on_extrusion_cali()

void Slic3r::GUI::AMSControl::on_extrusion_cali ( wxCommandEvent & event)
1699{
1700 for (auto i = 0; i < m_ams_info.size(); i++) {
1701 if (m_ams_info[i].ams_id == m_current_ams) { m_ams_info[i].current_action = AMSAction::AMS_ACTION_CALI; }
1702 }
1703 post_event(SimpleEvent(EVT_AMS_EXTRUSION_CALI));
1704}
@ AMS_ACTION_CALI
Definition AMSItem.hpp:115

References Slic3r::GUI::AMS_ACTION_CALI, m_ams_info, m_current_ams, and post_event().

Here is the call graph for this function:

◆ on_filament_load()

void Slic3r::GUI::AMSControl::on_filament_load ( wxCommandEvent & event)
1681{
1682 /*If the filament is unknown, show warning*/
1683 const auto& filament_id = get_filament_id(m_current_ams, GetCurrentCan(m_current_ams));
1684 if (filament_id.empty())
1685 {
1686 MessageDialog msg_dlg(nullptr, _L("Filament type is unknown which is required to perform this action. Please set target filament's informations."),
1687 wxEmptyString, wxICON_WARNING | wxOK);
1688 msg_dlg.ShowModal();
1689 return;
1690 }
1691
1692 for (auto i = 0; i < m_ams_info.size(); i++) {
1693 if (m_ams_info[i].ams_id == m_current_ams) { m_ams_info[i].current_action = AMSAction::AMS_ACTION_LOAD; }
1694 }
1695 post_event(SimpleEvent(EVT_AMS_LOAD));
1696}
std::string get_filament_id(const std::string &ams_id, const std::string &can_id)
Definition AMSControl.cpp:1786
@ AMS_ACTION_LOAD
Definition AMSItem.hpp:113

References _L, Slic3r::GUI::AMS_ACTION_LOAD, get_filament_id(), GetCurrentCan(), m_ams_info, m_current_ams, post_event(), and Slic3r::GUI::DPIAware< P >::ShowModal().

Referenced by AMSControl().

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

◆ on_filament_unload()

void Slic3r::GUI::AMSControl::on_filament_unload ( wxCommandEvent & event)
1707{
1708 for (auto i = 0; i < m_ams_info.size(); i++) {
1709 if (m_ams_info[i].ams_id == m_current_ams) { m_ams_info[i].current_action = AMSAction::AMS_ACTION_UNLOAD; }
1710 }
1711 post_event(SimpleEvent(EVT_AMS_UNLOAD));
1712}
@ AMS_ACTION_UNLOAD
Definition AMSItem.hpp:114

References Slic3r::GUI::AMS_ACTION_UNLOAD, m_ams_info, m_current_ams, and post_event().

Referenced by AMSControl().

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

◆ on_retry()

void Slic3r::GUI::AMSControl::on_retry ( )
325{
326 post_event(wxCommandEvent(EVT_AMS_RETRY));
327}

References post_event().

Here is the call graph for this function:

◆ parse_object()

void Slic3r::GUI::AMSControl::parse_object ( MachineObject * obj)
1772 {
1773 if (!obj || obj->GetFilaSystem()->GetAmsList().size() == 0)
1774 {
1775 return;
1776 }
1777 m_ams_info.clear();
1778 for (auto ams : obj->GetFilaSystem()->GetAmsList())
1779 {
1780 AMSinfo info;
1781 info.parse_ams_info(obj, ams.second);
1782 m_ams_info.push_back(info);
1783 }
1784}

References Slic3r::MachineObject::GetFilaSystem(), m_ams_info, and Slic3r::GUI::AMSinfo::parse_ams_info().

Referenced by AMSControl().

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

◆ PlayRridLoading()

void Slic3r::GUI::AMSControl::PlayRridLoading ( wxString amsid,
wxString canid )
496{
497 auto iter = m_ams_item_list.find(amsid.ToStdString());
498
499 if (iter != m_ams_item_list.end()) {
500 AmsItem* cans = iter->second;
501 cans->PlayRridLoading(canid);
502 }
503}

References m_ams_item_list, and Slic3r::GUI::AmsItem::PlayRridLoading().

Here is the call graph for this function:

◆ post_event()

void Slic3r::GUI::AMSControl::post_event ( wxEvent && event)
1822{
1823 event.SetEventObject(m_parent);
1824 wxPostEvent(m_parent, event);
1825}

Referenced by auto_refill(), on_ams_setting_click(), on_clibration_again_click(), on_clibration_cancel_click(), on_extrusion_cali(), on_filament_load(), on_filament_unload(), on_retry(), and SwitchAms().

Here is the caller graph for this function:

◆ Reset()

void Slic3r::GUI::AMSControl::Reset ( )
846{
847 m_ams_info.clear();
848 m_ext_info.clear();
849 m_dev_id.clear();
850 ClearAms();
851
852 Layout();
853}
std::string m_dev_id
Definition AMSControl.hpp:64
void ClearAms()
Definition AMSControl.cpp:605

References ClearAms(), m_ams_info, m_dev_id, and m_ext_info.

Here is the call graph for this function:

◆ SetAmsModel()

void Slic3r::GUI::AMSControl::SetAmsModel ( AMSModel mode,
AMSModel ext_mode )
inline
165{m_ams_model = mode; m_ext_model = ext_mode;};
AMSModel m_ext_model
Definition AMSControl.hpp:161
AMSModel m_ams_model
Definition AMSControl.hpp:160

References m_ams_model, and m_ext_model.

◆ SetAmsStep()

void Slic3r::GUI::AMSControl::SetAmsStep ( std::string ams_id,
std::string canid,
AMSPassRoadType type,
AMSPassRoadSTEP step )
1513{
1514 AmsItem* ams = nullptr;
1515 auto amsit = m_ams_item_list.find(ams_id);
1516 bool in_same_page = false;
1517
1518 if (amsit != m_ams_item_list.end()) {ams = amsit->second;}
1519 else {return;}
1520 if (ams == nullptr) return;
1521
1522 m_last_ams_id = ams_id;
1523 m_last_tray_id = canid;
1524 int can_index = atoi(canid.c_str());
1525
1526 std::vector<std::string> cur_left_ams;
1527 std::vector<std::string> cur_right_ams;
1528
1529 std::string ams_id_left = GetCurentShowAms(AMSPanelPos::LEFT_PANEL);
1530 std::string ams_id_right = GetCurentShowAms(AMSPanelPos::RIGHT_PANEL);
1531
1532 for (auto it : pair_id) {
1533 if ((ams_id_left == it.first || ams_id_left == it.second)) {
1534 cur_left_ams.push_back(it.first);
1535 cur_left_ams.push_back(it.second);
1536 }
1537 else if ((ams_id_right == it.first || ams_id_right == it.second)) {
1538 cur_right_ams.push_back(it.first);
1539 cur_right_ams.push_back(it.second);
1540 }
1541 }
1542
1543 auto left = !IsAmsInRightPanel(ams_id);
1544 auto length = -1;
1545 auto model = AMSModel::AMS_LITE;
1546 auto in_pair = false;
1547
1548 if (std::find(cur_left_ams.begin(), cur_left_ams.end(), ams_id) != cur_left_ams.end()) {
1549 in_same_page = true;
1550 }
1551
1552 if (std::find(cur_right_ams.begin(), cur_right_ams.end(), ams_id) != cur_right_ams.end()) {
1553 in_same_page = true;
1554 }
1555
1556 //Set path length in different case
1557 model = ams->get_ams_model();
1558
1559 if (ams->get_can_count() == GENERIC_AMS_SLOT_NUM) {
1560 length = left ? 129 : 145;
1561 } else if (ams->get_can_count() == 1) {
1562 for (auto it : pair_id){
1563 if (it.first == ams_id){
1564 length = left ? 218 : 124;
1565 in_pair = true;
1566 break;
1567 }
1568 else if (it.second == ams_id){
1569 length = left ? 124 : 232;
1570 in_pair = true;
1571 break;
1572 }
1573 }
1574
1575 if (!in_pair && model == N3S_AMS) {
1576 length = left ? 129 : 232;
1577 }
1578 }
1579
1580 if (model == AMSModel::AMS_LITE){
1581 length = left ? 145 : 45;
1582 }
1583 if (model == EXT_AMS && ams->get_ext_type() == AMSModelOriginType::LITE_EXT) {
1584
1585 if (m_ams_info.size() == 0 && m_ext_info.size() == 1) {
1586 length = 13;
1587 } else {
1588 length = 145;
1589 }
1590 }
1591
1592 if (model == EXT_AMS && ams->get_ext_type() == AMSModelOriginType::GENERIC_EXT) {
1593 if (m_ams_info.size() == 0 && m_ext_info.size() == 1) {
1594 left = true;
1595 length = 50;
1596 } else {
1597 /*check in pair*/
1598 if (in_pair) {
1599 length = left ? 110 : 232;
1600 } else {
1601 length = left ? 192 : 82;
1602 }
1603 }
1604 }
1605
1606 for (auto i = 0; i < m_ams_info.size(); i++) {
1607 if (m_ams_info[i].ams_id == ams_id) {
1608 m_ams_info[i].current_step = step;
1609 m_ams_info[i].current_can_id = canid;
1610 }
1611 }
1612 for (auto i = 0; i < m_ext_info.size(); i++) {
1613 if (m_ext_info[i].ams_id == ams_id) {
1614 m_ext_info[i].current_step = step;
1615 m_ext_info[i].current_can_id = canid;
1616 }
1617 }
1618
1619
1620 AMSinfo info;
1621 if (m_ams_item_list.find(ams_id) != m_ams_item_list.end()) {
1622 info = m_ams_item_list[ams_id]->get_ams_info();
1623 }
1624 else{
1625 return;
1626 }
1627 if (can_index >= 0 && can_index < info.cans.size())
1628 {
1629 m_down_road->SetPassRoadColour(left, info.cans[can_index].material_colour);
1630 }
1631
1633
1635 //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
1636 ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
1637 if (ams_id_left == ams_id || ams_id_right == ams_id || in_same_page) {
1638 m_down_road->UpdatePassRoad(pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
1639 m_extruder->OnAmsLoading(false, ams->get_nozzle_id());
1640 }
1641 }
1642
1644 ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1);
1645 if (ams_id_left == ams_id || ams_id_right == ams_id || in_same_page) {
1647 m_extruder->OnAmsLoading(false, ams->get_nozzle_id());
1648 }
1649 else
1650 {
1651 m_down_road->UpdatePassRoad(pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_1);
1652 }
1653 }
1654
1656 ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2);
1657 if (ams_id_left == ams_id || ams_id_right == ams_id || in_same_page) {
1659 m_extruder->OnAmsLoading(true, ams->get_nozzle_id(), ams->GetTagColr(canid));
1660 }
1661 else
1662 {
1663 m_down_road->UpdatePassRoad(pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_2);
1664 }
1665 }
1667 ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_3);
1668 if (ams_id_left == ams_id || ams_id_right == ams_id || in_same_page)
1669 {
1671 m_extruder->OnAmsLoading(true, ams->get_nozzle_id(), ams->GetTagColr(canid));
1672 }
1673 else
1674 {
1675 m_down_road->UpdatePassRoad(pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_3);
1676 }
1677 }
1678}
bool IsAmsInRightPanel(std::string ams_id)
Definition AMSControl.cpp:364
std::string m_last_tray_id
Definition AMSControl.hpp:148
std::string GetCurentShowAms(AMSPanelPos pos=AMSPanelPos::RIGHT_PANEL)
Definition AMSControl.cpp:339
std::string m_last_ams_id
Definition AMSControl.hpp:147
@ GENERIC_EXT
Definition AMSItem.hpp:66
AMSPanelPos
Definition AMSItem.hpp:87
@ AMS_ROAD_STEP_1
Definition AMSItem.hpp:123
@ AMS_ROAD_STEP_2
Definition AMSItem.hpp:124
@ AMS_ROAD_STEP_COMBO_LOAD_STEP1
Definition AMSItem.hpp:127
@ AMS_ROAD_STEP_3
Definition AMSItem.hpp:125
@ AMS_ROAD_STEP_COMBO_LOAD_STEP3
Definition AMSItem.hpp:129
Vec3d pos(const Pt &p)
Definition ReprojectPointsOnMesh.hpp:16
double length(const Points &pts)
Definition MultiPoint.hpp:181
void step(Coord &crd, const Dir d, const long n=1)
Definition MarchingSquares.hpp:213
@ left
Definition MarchingSquares.hpp:188

References Slic3r::GUI::AMS_LITE, Slic3r::GUI::AMS_ROAD_STEP_1, Slic3r::GUI::AMS_ROAD_STEP_2, Slic3r::GUI::AMS_ROAD_STEP_3, Slic3r::GUI::AMS_ROAD_STEP_COMBO_LOAD_STEP1, Slic3r::GUI::AMS_ROAD_STEP_COMBO_LOAD_STEP2, Slic3r::GUI::AMS_ROAD_STEP_COMBO_LOAD_STEP3, Slic3r::GUI::AMS_ROAD_STEP_NONE, Slic3r::GUI::AMSinfo::cans, Slic3r::GUI::EXT_AMS, GENERIC_AMS_SLOT_NUM, Slic3r::GUI::GENERIC_EXT, Slic3r::GUI::AmsItem::get_ams_model(), Slic3r::GUI::AmsItem::get_can_count(), Slic3r::GUI::AmsItem::get_ext_type(), Slic3r::GUI::AmsItem::get_nozzle_id(), GetCurentShowAms(), Slic3r::GUI::AmsItem::GetTagColr(), IsAmsInRightPanel(), Slic3r::GUI::LEFT_PANEL, Slic3r::length(), Slic3r::GUI::LITE_EXT, m_ams_info, m_ams_item_list, m_down_road, m_ext_info, m_extruder, m_last_ams_id, m_last_tray_id, Slic3r::GUI::N3S_AMS, pair_id, Slic3r::GUI::RIGHT_PANEL, and Slic3r::GUI::AmsItem::SetAmsStep().

Here is the call graph for this function:

◆ SetExtruder()

void Slic3r::GUI::AMSControl::SetExtruder ( bool on_off,
int nozzle_id,
std::string ams_id,
std::string slot_id )
1499{
1500 AmsItem *item = nullptr;
1501 if (m_ams_item_list.find(ams_id) != m_ams_item_list.end()) { item = m_ams_item_list[ams_id]; }
1502
1503 if (on_off && item) {
1504 auto col = item->GetTagColr(slot_id);
1505 m_extruder->OnAmsLoading(true, nozzle_id, col);
1506 }
1507 else {
1508 m_extruder->OnAmsLoading(false, nozzle_id);
1509 }
1510}

References Slic3r::GUI::AmsItem::GetTagColr(), m_ams_item_list, and m_extruder.

Here is the call graph for this function:

◆ show_auto_refill()

void Slic3r::GUI::AMSControl::show_auto_refill ( bool show)
861{
862 if (m_button_auto_refill->IsShown() == show)
863 {
864 return;
865 }
866
867 m_button_auto_refill->Show(show);
868 m_amswin->Layout();
869 m_amswin->Fit();
870}

References m_amswin, and m_button_auto_refill.

◆ show_noams_mode()

void Slic3r::GUI::AMSControl::show_noams_mode ( )
856{
858}
void EnterGenericAMSMode()
Definition AMSControl.cpp:469

References EnterGenericAMSMode().

Here is the call graph for this function:

◆ show_switcher_status()

void Slic3r::GUI::AMSControl::show_switcher_status ( bool show)
1740{
1741 // Orca: never materialize the banner on printers that never request it, so the AMS control is
1742 // byte-identical without a Filament Track Switch (UpdateAms calls this with show=false every refresh).
1743 if (!show && tipPanel == nullptr) { return; }
1744
1745 if (tipPanel == nullptr)
1746 {
1747 m_sizer_body->Add(0, 0, 1, wxEXPAND | wxTOP, FromDIP(5));
1748 tipPanel = new wxPanel(m_amswin);
1749 tipPanel->SetBackgroundColour(wxColour(255, 153, 0));
1750 tipSizer = new wxBoxSizer(wxHORIZONTAL);
1751 tipPanel->SetSizer(tipSizer);
1752 icon = new wxStaticBitmap(tipPanel, wxID_ANY,
1753 wxArtProvider::GetBitmap(wxART_INFORMATION, wxART_MESSAGE_BOX, wxSize(FromDIP(16), FromDIP(16))));
1754 tipSizer->Add(icon, 0, wxALL, FromDIP(8));
1755 tipText = new wxStaticText(tipPanel, wxID_ANY, _L("AMS has not been initialized. Please initialize it before use."));
1756 tipText->SetForegroundColour(wxColour(255, 255, 255));
1757 tipText->SetFont(wxFont(10, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD));
1758 tipText->Wrap(-1);
1759 tipText->SetMinSize(wxSize(-1, -1));
1760 tipSizer->Add(tipText, 0, wxALL | wxALIGN_CENTER_VERTICAL | wxEXPAND, FromDIP(8));
1761 m_sizer_body->Add(tipPanel, 1, wxEXPAND, 0);
1762 }
1763 if (tipPanel->IsShown() == show)
1764 {
1765 return;
1766 }
1767 tipPanel->Show(show);
1768 m_amswin->Layout();
1769 m_amswin->Fit();
1770}
class WXDLLIMPEXP_FWD_CORE wxStaticText
Definition ProgressDialog.hpp:30
wxPanel * tipPanel
Definition AMSControl.hpp:75
wxStaticText * tipText
Definition AMSControl.hpp:78
wxBoxSizer * tipSizer
Definition AMSControl.hpp:76
wxStaticBitmap * icon
Definition AMSControl.hpp:77

References _L, icon, m_amswin, m_sizer_body, tipPanel, tipSizer, tipText, and wxStaticText.

Referenced by UpdateAms().

Here is the caller graph for this function:

◆ show_vams_kn_value()

void Slic3r::GUI::AMSControl::show_vams_kn_value ( bool show)
878{
879 //m_vams_lib->show_kn_value(show);
880}

◆ ShowFilamentTip()

void Slic3r::GUI::AMSControl::ShowFilamentTip ( bool hasams = true)
1461{
1462 //m_simplebook_right->SetSelection(0);
1463 if (hasams) {
1464 m_tip_right_top->Show();
1465 m_tip_load_info->SetLabelText(_L("Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically load or unload filament."));
1466 } else {
1467 // m_tip_load_info->SetLabelText(_L("Before loading, please make sure the filament is pushed into toolhead."));
1468 m_tip_right_top->Hide();
1469 m_tip_load_info->SetLabelText(wxEmptyString);
1470 }
1471
1472 m_tip_load_info->SetMinSize(AMS_STEP_SIZE);
1473 m_tip_load_info->Wrap(AMS_STEP_SIZE.x - FromDIP(5));
1474 m_sizer_right_tip->Layout();
1475}
#define AMS_STEP_SIZE
Definition AMSItem.hpp:179
Label * m_tip_load_info
Definition AMSControl.hpp:112
wxBoxSizer * m_sizer_right_tip
Definition AMSControl.hpp:125
wxStaticText * m_tip_right_top
Definition AMSControl.hpp:111

References _L, AMS_STEP_SIZE, m_sizer_right_tip, m_tip_load_info, and m_tip_right_top.

Referenced by EnterNoneAMSMode().

Here is the caller graph for this function:

◆ StopRridLoading()

void Slic3r::GUI::AMSControl::StopRridLoading ( wxString amsid,
wxString canid )
506{
507 auto iter = m_ams_item_list.find(amsid.ToStdString());
508
509 if (iter != m_ams_item_list.end()) {
510 AmsItem* cans = iter->second;
511 cans->StopRridLoading(canid);
512 }
513}

References m_ams_item_list, and Slic3r::GUI::AmsItem::StopRridLoading().

Here is the call graph for this function:

◆ SwitchAms()

void Slic3r::GUI::AMSControl::SwitchAms ( std::string ams_id)
1364{
1365 if(ams_id == m_current_show_ams_left || ams_id == m_current_show_ams_right){return;}
1366
1367 bool is_in_right = IsAmsInRightPanel(ams_id);
1368 if (is_in_right){
1369 m_current_show_ams_right = ams_id;
1371 }
1372 else{
1373 m_current_show_ams_left = ams_id;
1375 }
1376
1377
1378 for (auto prv_it : m_ams_preview_list) {
1379 AMSPreview* prv = prv_it.second;
1380 if (prv->get_ams_id() == m_current_show_ams_left || prv->get_ams_id() == m_current_show_ams_right) {
1381 prv->OnSelected();
1382 m_current_select = ams_id;
1383
1384 bool ready_selected = false;
1385 for (auto item_it : m_ams_item_list) {
1386 AmsItem* item = item_it.second;
1387 if (item->get_ams_id() == ams_id) {
1388 for (auto lib_it : item->get_can_lib_list()) {
1389 AMSLib* lib = lib_it.second;
1390 if (lib->is_selected()) {
1391 ready_selected = true;
1392 }
1393 }
1394 }
1395 }
1396 if (is_in_right){
1397 m_current_show_ams_right = ams_id;
1398 }
1399 else{
1400 m_current_show_ams_left = ams_id;
1401 }
1402
1403 } else {
1404 prv->UnSelected();
1405 }
1406 }
1407
1408 for (auto ams_item : m_ams_item_list) {
1409 AmsItem* item = ams_item.second;
1410 if (item->get_ams_id() == ams_id) {
1411 auto ids = item->get_panel_pos() == AMSPanelPos::LEFT_PANEL ? m_item_ids[DEPUTY_EXTRUDER_ID] : m_item_ids[MAIN_EXTRUDER_ID];
1412 auto pos = item->get_panel_pos();
1413 for (auto id : ids) {
1414 if (id == item->get_ams_id()) {
1415 pos == AMSPanelPos::LEFT_PANEL ? m_simplebook_ams_left->SetSelection(item->get_selection()) : m_simplebook_ams_right->SetSelection(item->get_selection());
1416 if (item->get_can_count() == GENERIC_AMS_SLOT_NUM) {
1417 if (item->get_ams_model() == AMSModel::AMS_LITE) {
1418 if (pos == AMSPanelPos::LEFT_PANEL) {
1420 } else {
1422 }
1423 }
1424 else {
1425 if (pos == AMSPanelPos::LEFT_PANEL) {
1427 } else {
1429 }
1430 }
1431 }
1432 else {
1434
1435 if (item->get_ams_model() == AMSModel::N3S_AMS)
1437
1438 for (auto it : pair_id) {
1439 if (it.first == ams_id || it.second == ams_id) {
1441 break;
1442 }
1443 }
1445 : m_down_road->UpdateRight(m_total_ext_count, mode);
1446 if (pos == AMSPanelPos::LEFT_PANEL) {
1448 } else {
1450 }
1451 }
1452 }
1453 }
1454 }
1455 }
1456
1457 post_event(SimpleEvent(EVT_AMS_SWITCH));
1458}
std::string m_current_select
Definition AMSControl.hpp:238
AMSRoadShowMode
Definition AMSItem.hpp:93

References Slic3r::GUI::AMS_LITE, Slic3r::GUI::AMS_ROAD_MODE_AMS_LITE, Slic3r::GUI::AMS_ROAD_MODE_DOUBLE, Slic3r::GUI::AMS_ROAD_MODE_FOUR, Slic3r::GUI::AMS_ROAD_MODE_SINGLE, Slic3r::GUI::AMS_ROAD_MODE_SINGLE_N3S, Slic3r::GUI::AMS_ROAD_STEP_NONE, DEPUTY_EXTRUDER_ID, GENERIC_AMS_SLOT_NUM, Slic3r::GUI::AmsItem::get_ams_id(), Slic3r::GUI::AMSPreview::get_ams_id(), Slic3r::GUI::AmsItem::get_ams_model(), Slic3r::GUI::AmsItem::get_can_count(), Slic3r::GUI::AmsItem::get_can_lib_list(), Slic3r::GUI::AmsItem::get_panel_pos(), Slic3r::GUI::AmsItem::get_selection(), Slic3r::GUI::AMSLib::is_selected(), IsAmsInRightPanel(), Slic3r::GUI::LEFT_PANEL, m_ams_item_list, m_ams_preview_list, m_current_select, m_current_show_ams_left, m_current_show_ams_right, m_down_road, m_item_ids, m_simplebook_ams_left, m_simplebook_ams_right, m_total_ext_count, MAIN_EXTRUDER_ID, Slic3r::GUI::N3S_AMS, Slic3r::GUI::AMSPreview::OnSelected(), pair_id, post_event(), Slic3r::GUI::RIGHT_PANEL, and Slic3r::GUI::AMSPreview::UnSelected().

Referenced by AddAmsPreview(), and AddAmsPreview().

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

◆ UpdateAms()

void Slic3r::GUI::AMSControl::UpdateAms ( const std::string & series_name,
const std::string & printer_type,
std::vector< AMSinfo > ams_info,
std::vector< AMSinfo > ext_info,
DevExtderSystem data,
std::string dev_id,
MachineObject * obj = nullptr,
bool is_reset = true,
bool test = false )
964{
965 if (!test){
966 // update item
967 bool fresh = false;
968
969 // basic check
970 if (m_ams_info.size() == ams_info.size() && m_total_ext_count == data.GetTotalExtderCount() && m_dev_id == dev_id && m_ext_info.size() == ext_info.size())
971 {
972 for (int i = 0; i < m_ams_info.size(); i++){
973 if (m_ams_info[i].ams_id != ams_info[i].ams_id){
974 fresh = true;
975 }
976
977 // Orca: rebuild when the panel assignment changes; inlet-aware so a Filament Track Switch
978 // re-plug (same pinned nozzle_id, different inlet) still refreshes placement.
979 if (m_ams_info[i].routes_to_main_extruder() != ams_info[i].routes_to_main_extruder()) {
980 fresh = true;
981 }
982 }
983 }
984 else{
985 fresh = true;
986 }
987
988 m_ams_info.clear();
989 m_ams_info = ams_info;
990 m_total_ext_count = data.GetTotalExtderCount();
991 m_ext_info.clear();
992 m_ext_info = ext_info;
993 m_dev_id = dev_id;
994 if (fresh){
995 ClearAms();
996 if (m_total_ext_count >= 2){
997 CreateAmsDoubleNozzle(series_name, printer_type);
998 }else{
999 CreateAmsSingleNozzle(series_name, printer_type);
1000 }
1001 SetSize(wxSize(FromDIP(578), -1));
1002 SetMinSize(wxSize(FromDIP(578), -1));
1003 Layout();
1004 }
1005 // update cans
1006
1007 for (auto ams_item : m_ams_item_list) {
1008 if (ams_item.second == nullptr){
1009 continue;
1010 }
1011 std::string ams_id = ams_item.second->get_ams_id();
1012 AmsItem* cans = ams_item.second;
1013 if (cans->get_ams_id() == std::to_string(VIRTUAL_TRAY_MAIN_ID) || cans->get_ams_id() == std::to_string(VIRTUAL_TRAY_DEPUTY_ID)) {
1014 for (auto ifo : m_ext_info) {
1015 if (ifo.ams_id == ams_id) {
1016 cans->UpdateInfo(ifo);
1017 cans->show_sn_value(m_ams_model == AMSModel::AMS_LITE ? false : true);
1018 }
1019 }
1020 }
1021 else{
1022 for (auto ifo : m_ams_info) {
1023 if (ifo.ams_id == ams_id) {
1024 cans->UpdateInfo(ifo);
1025 cans->show_sn_value(m_ams_model == AMSModel::AMS_LITE ? false : true);
1026 }
1027 }
1028 }
1029 }
1030
1031 // 2D mode (laser/cut) makes every spool view-only: show the read-only (eye) icon while the spool
1032 // stays clickable to open the read-only filament dialog.
1033 // Orca: gated on the device mode via MachineObject::is_fdm_type(); obj is null for callers that do
1034 // not supply it, leaving spools editable.
1035 const bool view_only = obj && !obj->is_fdm_type();
1036 for (auto ams_item : m_ams_item_list) {
1037 if (ams_item.second == nullptr) { continue; }
1038 for (auto lib_it : ams_item.second->get_can_lib_list()) {
1039 if (lib_it.second) { lib_it.second->set_view_only(view_only); }
1040 }
1041 }
1042
1043 for (auto ams_prv : m_ams_preview_list) {
1044 std::string id = ams_prv.second->get_ams_id();
1045 auto item = m_ams_item_list.find(id);
1046 if (item != m_ams_item_list.end())
1047 { ams_prv.second->UpdateInfo(item->second->get_ams_info());
1048 }
1049 }
1050 }
1051
1052 /*update humidity popup*/
1053 if (m_percent_humidity_dry_popup->IsShown())
1054 {
1055 std::string target_id = m_percent_humidity_dry_popup->get_owner_ams_id();
1056 for (const auto& the_info : ams_info)
1057 {
1058 if (target_id == the_info.ams_id)
1059 {
1060 uiAmsHumidityInfo humidity_info;
1061 humidity_info.ams_id = the_info.ams_id;
1062 humidity_info.humidity_display_idx = the_info.get_humidity_display_idx();
1063 humidity_info.humidity_percent = the_info.humidity_raw;
1064 humidity_info.left_dry_time = the_info.left_dray_time;
1065 humidity_info.current_temperature = the_info.current_temperature;
1066 m_percent_humidity_dry_popup->UpdateInfo(&humidity_info);
1067 break;
1068 }
1069 }
1070 }
1071
1072 /*update ams extruder*/
1073 if (m_extruder->updateNozzleNum(m_total_ext_count, series_name))
1074 {
1075 m_amswin->Layout();
1076 }
1077
1078 /*update switch status*/
1079 // Orca: inert on any printer without a Filament Track Switch — install is false, so the banner is
1080 // never materialized, the glyph stays hidden, and every ShowRoad(true) below is a no-op.
1081 const auto [install, ready] = isFilaSwitchReady();
1082 show_switcher_status(install && (!ready));
1083 bool isShow = install && m_total_ext_count >= 2;
1084 if (m_switcher->IsShown() != isShow)
1085 {
1086 m_switcher->Show(isShow);
1087 m_sizer_body->Layout();
1088 m_sizer_body->Fit(this);
1089 this->Layout();
1090 this->Refresh(true);
1091 this->Update();
1092 }
1093
1094 /*update ext road visibility when fila switch installed*/
1095 bool road_visibility_changed = false;
1096 for (auto& [ams_id, ams_item] : m_ams_item_list) {
1097 if (!ams_item) continue;
1098 // Orca: drop the external-spool road (AMSModel::EXT_AMS) while the switch routes all filament.
1099 const bool should_show_road = !(install && ams_item->get_ams_model() == AMSModel::EXT_AMS);
1100 if (ams_item->ShowRoad(should_show_road)) { road_visibility_changed = true; }
1101 }
1102 if (road_visibility_changed) { m_amswin->Layout(); }
1103}
void show_switcher_status(bool show)
Definition AMSControl.cpp:1739
void CreateAmsSingleNozzle(const std::string &series_name, const std::string &printer_type)
Definition AMSControl.cpp:752
void CreateAmsDoubleNozzle(const std::string &series_name, const std::string &printer_type)
Definition AMSControl.cpp:631
std::tuple< bool, bool > isFilaSwitchReady()
Definition AMSControl.cpp:1724
void install(Class cls)
Definition MacIME.mm:123

References Slic3r::GUI::uiAmsHumidityInfo::ams_id, Slic3r::GUI::AMS_LITE, ClearAms(), CreateAmsDoubleNozzle(), CreateAmsSingleNozzle(), Slic3r::GUI::uiAmsHumidityInfo::current_temperature, Slic3r::GUI::EXT_AMS, Slic3r::GUI::AmsItem::get_ams_id(), Slic3r::DevExtderSystem::GetTotalExtderCount(), Slic3r::GUI::uiAmsHumidityInfo::humidity_display_idx, Slic3r::GUI::uiAmsHumidityInfo::humidity_percent, Slic3r::MachineObject::is_fdm_type(), isFilaSwitchReady(), Slic3r::GUI::uiAmsHumidityInfo::left_dry_time, m_ams_info, m_ams_item_list, m_ams_model, m_ams_preview_list, m_amswin, m_dev_id, m_ext_info, m_extruder, m_percent_humidity_dry_popup, m_sizer_body, m_switcher, m_total_ext_count, Slic3r::GUI::AmsItem::show_sn_value(), show_switcher_status(), Slic3r::GUI::AmsItem::UpdateInfo(), VIRTUAL_TRAY_DEPUTY_ID, and VIRTUAL_TRAY_MAIN_ID.

Here is the call graph for this function:

◆ UpdateAmsDryControl()

void Slic3r::GUI::AMSControl::UpdateAmsDryControl ( MachineObject * obj)
883{
884 if (!m_ams_dry_ctr_win->IsShown()) {
885 return;
886 }
887
888 if (!obj || !obj->GetFilaSystem()) {
889 m_ams_dry_ctr_win->Close();
890 return;
891 }
892
893 std::weak_ptr<DevFilaSystem> weak_fila_system = obj->GetFilaSystem();
894
895 if (auto locaked_fila_system = weak_fila_system.lock()) {
896 m_ams_dry_ctr_win->update(locaked_fila_system, obj);
897 } else {
898 m_ams_dry_ctr_win->Close();
899 return;
900 }
901}

References Slic3r::MachineObject::GetFilaSystem(), and m_ams_dry_ctr_win.

Here is the call graph for this function:

◆ UpdatePassRoad()

void Slic3r::GUI::AMSControl::UpdatePassRoad ( std::string ams_id,
AMSPassRoadType type,
AMSPassRoadSTEP step )

Member Data Documentation

◆ icon

wxStaticBitmap* Slic3r::GUI::AMSControl::icon {nullptr}
protected
77{nullptr};

Referenced by show_switcher_status().

◆ m_ams_dry_ctr_win

AMSDryCtrWin* Slic3r::GUI::AMSControl::m_ams_dry_ctr_win
protected

◆ m_ams_info

◆ m_ams_introduce_popup

AmsIntroducePopup Slic3r::GUI::AMSControl::m_ams_introduce_popup
protected

Referenced by AMSControl().

◆ m_ams_item_list

◆ m_ams_model

AMSModel Slic3r::GUI::AMSControl::m_ams_model {AMSModel::EXT_AMS}

Referenced by SetAmsModel(), and UpdateAms().

◆ m_ams_preview_list

std::map<std::string, AMSPreview*> Slic3r::GUI::AMSControl::m_ams_preview_list
protected

◆ m_ams_selection

std::map<std::string, int> Slic3r::GUI::AMSControl::m_ams_selection
protected

◆ m_ams_tip

Label* Slic3r::GUI::AMSControl::m_ams_tip {nullptr}
protected
117{nullptr};

◆ m_amswin

◆ m_button_ams_setting

wxStaticBitmap* Slic3r::GUI::AMSControl::m_button_ams_setting {nullptr}
protected
135{nullptr};

Referenced by AMSControl(), Enable(), enable_ams_setting(), and msw_rescale().

◆ m_button_ams_setting_hover

ScalableBitmap Slic3r::GUI::AMSControl::m_button_ams_setting_hover
protected

Referenced by AMSControl(), and msw_rescale().

◆ m_button_ams_setting_normal

ScalableBitmap Slic3r::GUI::AMSControl::m_button_ams_setting_normal
protected

Referenced by AMSControl(), and msw_rescale().

◆ m_button_ams_setting_press

ScalableBitmap Slic3r::GUI::AMSControl::m_button_ams_setting_press
protected

Referenced by AMSControl(), and msw_rescale().

◆ m_button_auto_refill

Button* Slic3r::GUI::AMSControl::m_button_auto_refill { nullptr }
protected
134{ nullptr };

Referenced by AMSControl(), Enable(), msw_rescale(), and show_auto_refill().

◆ m_button_extruder_back

Button* Slic3r::GUI::AMSControl::m_button_extruder_back {nullptr}
protected
133{nullptr};

Referenced by AMSControl(), Enable(), EnableUnLoadFilamentBtn(), and msw_rescale().

◆ m_button_extruder_feed

Button* Slic3r::GUI::AMSControl::m_button_extruder_feed {nullptr}
protected
132{nullptr};

Referenced by AMSControl(), Enable(), EnableLoadFilamentBtn(), and msw_rescale().

◆ m_current_ams

◆ m_current_select

std::string Slic3r::GUI::AMSControl::m_current_select

Referenced by SwitchAms().

◆ m_current_show_ams_left

std::string Slic3r::GUI::AMSControl::m_current_show_ams_left
protected

◆ m_current_show_ams_right

std::string Slic3r::GUI::AMSControl::m_current_show_ams_right
protected

◆ m_current_slot_left

std::string Slic3r::GUI::AMSControl::m_current_slot_left
protected

◆ m_current_slot_right

std::string Slic3r::GUI::AMSControl::m_current_slot_right
protected

◆ m_dev_id

std::string Slic3r::GUI::AMSControl::m_dev_id
protected

Referenced by Reset(), and UpdateAms().

◆ m_down_road

AMSRoadDownPart* Slic3r::GUI::AMSControl::m_down_road { nullptr }
protected

◆ m_ext_image_list

std::map<std::string, AMSExtImage*> Slic3r::GUI::AMSControl::m_ext_image_list
protected

◆ m_ext_info

std::vector<AMSinfo> Slic3r::GUI::AMSControl::m_ext_info
protected

◆ m_ext_model

AMSModel Slic3r::GUI::AMSControl::m_ext_model {AMSModel::EXT_AMS}

Referenced by SetAmsModel().

◆ m_extruder

◆ m_filament_load_step

::StepIndicator* Slic3r::GUI::AMSControl::m_filament_load_step {nullptr}
protected
128{nullptr};

Referenced by Enable().

◆ m_filament_unload_step

::StepIndicator* Slic3r::GUI::AMSControl::m_filament_unload_step {nullptr}
protected
129{nullptr};

◆ m_filament_vt_load_step

::StepIndicator* Slic3r::GUI::AMSControl::m_filament_vt_load_step {nullptr}
protected
130{nullptr};

◆ m_Humidity_tip_popup

AmsHumidityTipPopup Slic3r::GUI::AMSControl::m_Humidity_tip_popup
protected

Referenced by AMSControl(), and msw_rescale().

◆ m_img_ams_backup

wxStaticBitmap* Slic3r::GUI::AMSControl::m_img_ams_backup {nullptr}
protected
136{nullptr};

◆ m_img_amsmapping_tip

wxStaticBitmap* Slic3r::GUI::AMSControl::m_img_amsmapping_tip {nullptr}
protected
137{nullptr};

◆ m_img_vams_tip

wxStaticBitmap* Slic3r::GUI::AMSControl::m_img_vams_tip {nullptr}
protected
138{nullptr};

◆ m_is_none_ams_mode

AMSModel Slic3r::GUI::AMSControl::m_is_none_ams_mode {AMSModel::EXT_AMS}

◆ m_item_ids

std::vector<std::vector<std::string> > Slic3r::GUI::AMSControl::m_item_ids { {}, {} }
protected

◆ m_last_ams_id

std::string Slic3r::GUI::AMSControl::m_last_ams_id = ""
protected

Referenced by SetAmsStep().

◆ m_last_tray_id

std::string Slic3r::GUI::AMSControl::m_last_tray_id = ""
protected

Referenced by SetAmsStep().

◆ m_left_page_index

int Slic3r::GUI::AMSControl::m_left_page_index = 0
protected

Referenced by AddAms(), AddAms(), and ClearAms().

◆ m_panel_down_road

wxPanel* Slic3r::GUI::AMSControl::m_panel_down_road { nullptr }
protected
106{ nullptr };

Referenced by AMSControl().

◆ m_panel_prv_left

wxScrolledWindow* Slic3r::GUI::AMSControl::m_panel_prv_left {nullptr}
protected

◆ m_panel_prv_right

wxScrolledWindow* Slic3r::GUI::AMSControl::m_panel_prv_right {nullptr}
protected

◆ m_panel_virtual

StaticBox* Slic3r::GUI::AMSControl::m_panel_virtual {nullptr}
protected
120{nullptr};

◆ m_percent_humidity_dry_popup

uiAmsPercentHumidityDryPopup* Slic3r::GUI::AMSControl::m_percent_humidity_dry_popup
protected

Referenced by AMSControl(), msw_rescale(), and UpdateAms().

◆ m_right_page_index

int Slic3r::GUI::AMSControl::m_right_page_index = 0
protected

Referenced by AddAms(), AddAms(), and ClearAms().

◆ m_simplebook_ams_left

wxSimplebook* Slic3r::GUI::AMSControl::m_simplebook_ams_left {nullptr}
protected

◆ m_simplebook_ams_right

wxSimplebook* Slic3r::GUI::AMSControl::m_simplebook_ams_right { nullptr }
protected

◆ m_simplebook_bottom

wxSimplebook* Slic3r::GUI::AMSControl::m_simplebook_bottom {nullptr}
protected
105{nullptr};

◆ m_single_nozzle_no_ams

bool Slic3r::GUI::AMSControl::m_single_nozzle_no_ams = { true }
163{ true };

Referenced by CreateAms().

◆ m_sizer_ams_area_left

wxBoxSizer* Slic3r::GUI::AMSControl::m_sizer_ams_area_left {nullptr}
protected
89{nullptr};

Referenced by AMSControl().

◆ m_sizer_ams_area_right

wxBoxSizer* Slic3r::GUI::AMSControl::m_sizer_ams_area_right {nullptr}
protected
90{nullptr};

Referenced by AMSControl().

◆ m_sizer_ams_body

wxBoxSizer* Slic3r::GUI::AMSControl::m_sizer_ams_body {nullptr}
protected
88{nullptr};

Referenced by AMSControl().

◆ m_sizer_ams_items

wxBoxSizer* Slic3r::GUI::AMSControl::m_sizer_ams_items {nullptr}
protected
81{nullptr};

Referenced by AMSControl().

◆ m_sizer_ams_option

wxBoxSizer* Slic3r::GUI::AMSControl::m_sizer_ams_option {nullptr}
protected
94{nullptr};

Referenced by AMSControl().

◆ m_sizer_ams_tips

wxBoxSizer* Slic3r::GUI::AMSControl::m_sizer_ams_tips {nullptr}
protected
126{nullptr};

◆ m_sizer_body

wxBoxSizer* Slic3r::GUI::AMSControl::m_sizer_body {nullptr}
protected
74{nullptr};

Referenced by AMSControl(), show_switcher_status(), and UpdateAms().

◆ m_sizer_down_road

wxBoxSizer* Slic3r::GUI::AMSControl::m_sizer_down_road { nullptr }
protected
91{ nullptr };

Referenced by AMSControl().

◆ m_sizer_option_left

wxBoxSizer* Slic3r::GUI::AMSControl::m_sizer_option_left {nullptr}
protected
95{nullptr};

Referenced by AMSControl().

◆ m_sizer_option_mid

wxBoxSizer* Slic3r::GUI::AMSControl::m_sizer_option_mid {nullptr}
protected
96{nullptr};

Referenced by AMSControl().

◆ m_sizer_option_right

wxBoxSizer* Slic3r::GUI::AMSControl::m_sizer_option_right {nullptr}
protected
97{nullptr};

Referenced by AMSControl().

◆ m_sizer_prv_left

wxBoxSizer* Slic3r::GUI::AMSControl::m_sizer_prv_left {nullptr}
protected

◆ m_sizer_prv_right

wxBoxSizer* Slic3r::GUI::AMSControl::m_sizer_prv_right {nullptr}
protected

◆ m_sizer_right_tip

wxBoxSizer* Slic3r::GUI::AMSControl::m_sizer_right_tip {nullptr}
protected
125{nullptr};

Referenced by ShowFilamentTip().

◆ m_sizer_vams_tips

wxBoxSizer* Slic3r::GUI::AMSControl::m_sizer_vams_tips {nullptr}
protected
115{nullptr};

◆ m_switcher

SwitcherImage* Slic3r::GUI::AMSControl::m_switcher {nullptr}
protected
70{nullptr}; // Orca: filament-switch routing glyph (hidden unless a switch is installed)

Referenced by AMSControl(), and UpdateAms().

◆ m_tip_load_info

Label* Slic3r::GUI::AMSControl::m_tip_load_info {nullptr}
protected
112{nullptr};

Referenced by ShowFilamentTip().

◆ m_tip_right_top

wxStaticText* Slic3r::GUI::AMSControl::m_tip_right_top {nullptr}
protected
111{nullptr};

Referenced by ShowFilamentTip().

◆ m_total_ext_count

int Slic3r::GUI::AMSControl::m_total_ext_count = 1
protected

◆ m_vams_info

Caninfo Slic3r::GUI::AMSControl::m_vams_info
protected

◆ m_vams_lib

AMSLib* Slic3r::GUI::AMSControl::m_vams_lib {nullptr}
protected
121{nullptr};

◆ m_vams_road

AMSRoad* Slic3r::GUI::AMSControl::m_vams_road {nullptr}
protected
122{nullptr};

◆ m_vams_sizer

wxBoxSizer* Slic3r::GUI::AMSControl::m_vams_sizer {nullptr}
protected
114{nullptr};

◆ pair_id

std::vector<std::pair<std::string, std::string> > Slic3r::GUI::AMSControl::pair_id
protected

◆ tipPanel

wxPanel* Slic3r::GUI::AMSControl::tipPanel {nullptr}
protected
75{nullptr};

Referenced by show_switcher_status().

◆ tipSizer

wxBoxSizer* Slic3r::GUI::AMSControl::tipSizer {nullptr}
protected
76{nullptr};

Referenced by show_switcher_status().

◆ tipText

wxStaticText* Slic3r::GUI::AMSControl::tipText {nullptr}
protected
78{nullptr};

Referenced by show_switcher_status().


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