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

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

Inheritance diagram for Slic3r::GUI::FanControlPopupNew:
Collaboration diagram for Slic3r::GUI::FanControlPopupNew:

Public Member Functions

 FanControlPopupNew (wxWindow *parent, MachineObject *obj, const AirDuctData &data)
 ~FanControlPopupNew ()
void update_fan_data (MachineObject *obj)
void msw_rescale ()

Private Member Functions

void init_names (MachineObject *obj)
wxString get_fan_func_name (int mode, int submode, AIR_FUN func) const
void CreateDuct ()
void UpdateParts ()
void UpdatePartSubMode ()
void update_fan_data (const AirDuctData &data)
void update_fan_data (AIR_FUN id, int speed)
void on_mode_changed (const wxMouseEvent &event)
void on_fan_changed (const wxCommandEvent &event)
void on_left_down (wxMouseEvent &evt)
void post_event (int fan_type, wxString speed)
void on_show (wxShowEvent &evt)
void paintEvent (wxPaintEvent &evt)
void command_control_air_duct (int mode_id, int submode=-1)

Private Attributes

wxBoxSizer * m_sizer_main { nullptr }
wxGridSizer * m_radio_btn_sizer { nullptr }
wxGridSizer * m_sizer_fanControl { nullptr }
wxBoxSizer * m_mode_sizer { nullptr }
std::unordered_map< int, SendModeSwitchButton * > m_mode_switch_btns
Label * m_mode_text
wxPanel * m_sub_mode_panel { nullptr }
wxBoxSizer * m_sub_mode_sizer { nullptr }
FanControlNewSwitchPanel * m_cooling_filter_switch_panel { nullptr }
std::map< int, FanControlNew * > m_fan_control_list
MachineObject * m_obj {nullptr}
AirDuctData m_data
int m_air_duct_time_out { 0 }
int m_fan_set_time_out { 0 }
std::map< AIR_DUCT, wxString > radio_btn_name
std::map< AIR_DOOR, wxString > air_door_func_name
std::map< AIR_DUCT, wxString > label_text

Detailed Description

Constructor & Destructor Documentation

◆ FanControlPopupNew()

Slic3r::GUI::FanControlPopupNew::FanControlPopupNew ( wxWindow * parent,
MachineObject * obj,
const AirDuctData & data )
649 : wxDialog(parent, wxID_ANY, wxEmptyString)
650{
651 SetBackgroundColour(*wxWHITE);
652 init_names(obj);
653
654 m_data = data;
655 m_obj = obj;
656
657 m_sizer_main = new wxBoxSizer(wxVERTICAL);
658
659 int part_size = data.parts.size();
660 int grid_column = part_size > 1 ? 2 : 1;
661
662 m_radio_btn_sizer = new wxGridSizer(0, 2, FromDIP(3), FromDIP(3));
663 m_sizer_fanControl = new wxGridSizer(0, grid_column, FromDIP(3), FromDIP(10));
664
665 m_mode_sizer = new wxBoxSizer(wxHORIZONTAL);
666 m_mode_sizer->Add(m_radio_btn_sizer, 0, wxALIGN_CENTRE_VERTICAL, 0);
667
668 m_mode_text = new Label(this);
669 m_mode_text->SetBackgroundColour(*wxWHITE);
670
671 m_sub_mode_panel = new wxPanel(this, wxID_ANY);
672 m_sub_mode_panel->SetBackgroundColour(wxColour(248, 248, 248));
673 m_sub_mode_sizer = new wxBoxSizer(wxVERTICAL);
675
676 m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(23));
677 m_sizer_main->Add(m_mode_sizer, 0, wxALIGN_CENTER_HORIZONTAL | wxLEFT | wxRIGHT, FromDIP(30));
678 m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(10));
679 m_sizer_main->Add(m_mode_text, 0, wxLEFT, FromDIP(35));
680 m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(10));
681 m_sizer_main->Add(m_sub_mode_panel, 0, wxLEFT | wxRIGHT, FromDIP(30));
682 m_sizer_main->Add(m_sizer_fanControl, 0, wxALIGN_CENTER_HORIZONTAL | wxLEFT | wxRIGHT, 0);
683 m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(16));
684
685 CreateDuct();
686
687 SetSizer(m_sizer_main);
688 Layout();
689 Fit();
690
691 this->Centre(wxBOTH);
692 Bind(wxEVT_PAINT, &FanControlPopupNew::paintEvent, this);
693
694#if __APPLE__
695 Bind(wxEVT_LEFT_DOWN, &FanControlPopupNew::on_left_down, this);
696#endif
697
698#ifdef __WXOSX__
699 Bind(wxEVT_IDLE, [](wxIdleEvent& evt) {});
700#endif
701 Bind(wxEVT_SHOW, &FanControlPopupNew::on_show, this);
702 Bind(EVT_FAN_CHANGED, &FanControlPopupNew::on_fan_changed, this);
703}
wxGridSizer * m_sizer_fanControl
Definition FanControl.hpp:226
wxGridSizer * m_radio_btn_sizer
Definition FanControl.hpp:225
Label * m_mode_text
Definition FanControl.hpp:234
wxBoxSizer * m_sizer_main
Definition FanControl.hpp:222
void init_names(MachineObject *obj)
Definition FanControl.cpp:1013
void CreateDuct()
Definition FanControl.cpp:705
wxBoxSizer * m_sub_mode_sizer
Definition FanControl.hpp:239
wxPanel * m_sub_mode_panel
Definition FanControl.hpp:238
void paintEvent(wxPaintEvent &evt)
Definition FanControl.cpp:964
wxBoxSizer * m_mode_sizer
Definition FanControl.hpp:228
void on_show(wxShowEvent &evt)
Definition FanControl.cpp:940
void on_left_down(wxMouseEvent &evt)
Definition FanControl.cpp:895
MachineObject * m_obj
Definition FanControl.hpp:246
void on_fan_changed(const wxCommandEvent &event)
Definition FanControl.cpp:1008
AirDuctData m_data
Definition FanControl.hpp:247

References CreateDuct(), init_names(), m_data, m_mode_sizer, m_mode_text, m_obj, m_radio_btn_sizer, m_sizer_fanControl, m_sizer_main, m_sub_mode_panel, m_sub_mode_sizer, on_fan_changed(), on_left_down(), on_show(), paintEvent(), and Slic3r::AirDuctData::parts.

Here is the call graph for this function:

◆ ~FanControlPopupNew()

Slic3r::GUI::FanControlPopupNew::~FanControlPopupNew ( )
inline
218{};

Member Function Documentation

◆ command_control_air_duct()

void Slic3r::GUI::FanControlPopupNew::command_control_air_duct ( int mode_id,
int submode = -1 )
private
946{
947 BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", control air duct, id = " << mode_id;
948 if (m_obj) {
949 m_obj->GetFan()->command_control_air_duct(mode_id, submode, [](const json& reply) {});
950
952 m_data.curren_mode = mode_id;
953 m_data.m_sub_mode = submode;
954 this->UpdateParts();
955 }
956}
int m_air_duct_time_out
Definition FanControl.hpp:248
void UpdateParts()
Definition FanControl.cpp:758
constexpr int time_out
Definition FanControl.cpp:41
nlohmann::json json
Definition AssembleList.cpp:42

References m_air_duct_time_out, m_data, m_obj, Slic3r::GUI::time_out, and UpdateParts().

Referenced by on_mode_changed(), and UpdatePartSubMode().

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

◆ CreateDuct()

void Slic3r::GUI::FanControlPopupNew::CreateDuct ( )
private
706{
707 m_radio_btn_sizer->Clear(true);
708 //m_radio_btn_sizer->SetCols(m_data.modes.size());
709
710 m_mode_switch_btns.clear();
711 auto iter = m_data.modes.begin();
712 while (iter != m_data.modes.end()) {
713
714 int mode_id = iter->second.id;
715 const wxString& text = wxString::Format("%s", radio_btn_name[AIR_DUCT(mode_id)]);
716 if (text.empty()) { BOOST_LOG_TRIVIAL(error) << "FanControlPopupNew::CreateDuct: radio_btn_name is empty";}
717
718 SendModeSwitchButton *radio_btn = new SendModeSwitchButton(this, text, m_data.curren_mode == mode_id);
719 radio_btn->Bind(wxEVT_LEFT_DOWN, &FanControlPopupNew::on_mode_changed, this);
720 m_mode_switch_btns[mode_id] = radio_btn;
721 m_radio_btn_sizer->Add(radio_btn, wxALL, FromDIP(5));
722 iter++;
723 }
724
725 //tips
726 UpdateParts();
727
728 //update data
729 if (!m_data.modes.empty())
730 {
731 for (const auto& part : m_data.parts)
732 {
733 auto part_id = part.id;
734 auto part_state = part.state;
735
736 auto it = m_fan_control_list.find(part_id);
737 if (it != m_fan_control_list.end())
738 {
739 auto fan_control = m_fan_control_list[part_id];
740 fan_control->set_fan_speed_percent(part_state / 10);
741 }
742 }
743 }
744 else
745 {
746 if (m_obj)
747 {
748 int cooling_fan_speed = round(m_obj->GetFan()->GetCoolingFanSpeed() / float(25.5));
749 int big_fan1_speed = round(m_obj->GetFan()->GetBigFan1Speed() / float(25.5));
750 int big_fan2_speed = round(m_obj->GetFan()->GetBigFan2Speed() / float(25.5));
754 }
755 }
756}
std::unordered_map< int, SendModeSwitchButton * > m_mode_switch_btns
Definition FanControl.hpp:231
void update_fan_data(const AirDuctData &data)
Definition FanControl.cpp:860
std::map< AIR_DUCT, wxString > radio_btn_name
Definition FanControl.hpp:251
std::map< int, FanControlNew * > m_fan_control_list
Definition FanControl.hpp:243
void on_mode_changed(const wxMouseEvent &event)
Definition FanControl.cpp:972
@ FAN_COOLING_0_AIRDOOR
Definition DevFan.h:19
@ FAN_REMOTE_COOLING_0_IDX
Definition DevFan.h:20
@ FAN_CHAMBER_0_IDX
Definition DevFan.h:21
AIR_DUCT
Definition DevFan.h:32

References Slic3r::FAN_CHAMBER_0_IDX, Slic3r::FAN_COOLING_0_AIRDOOR, Slic3r::FAN_REMOTE_COOLING_0_IDX, m_data, m_fan_control_list, m_mode_switch_btns, m_obj, m_radio_btn_sizer, on_mode_changed(), radio_btn_name, update_fan_data(), and UpdateParts().

Referenced by FanControlPopupNew().

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

◆ get_fan_func_name()

wxString Slic3r::GUI::FanControlPopupNew::get_fan_func_name ( int mode,
int submode,
AIR_FUN func ) const
private
1051{
1052 if (m_obj)
1053 {
1054 const std::string& func_text = DevPrinterConfigUtil::get_fan_text(m_obj->printer_type, mode, (int)func, submode);
1055 if (!func_text.empty())
1056 {
1057 // Possible runtime values of func_text, marked for extraction.
1058 static const char *const markers[] = {
1059 L_CONTEXT("Right(Aux)", "air_duct"),
1060 L_CONTEXT("Right(Filter)", "air_duct"),
1061 L_CONTEXT("Left(Aux)", "air_duct"),
1062 };
1063 (void) markers;
1064 return _L_CONTEXT(func_text, "air_duct");
1065 }
1066 }
1067
1068 static std::map<AIR_FUN, wxString> s_fan_func_name
1069 {
1070 { AIR_FUN::FAN_HEAT_BREAK_0_IDX, _L_CONTEXT("Hotend", "Hotend Heat Breaker Fan") },
1071 { AIR_FUN::FAN_COOLING_0_AIRDOOR, _L("Parts") },
1073 { AIR_FUN::FAN_CHAMBER_0_IDX, _L("Exhaust") },
1074 { AIR_FUN::FAN_HEAT_BREAK_1_IDX, _L("Nozzle1") },
1075 { AIR_FUN::FAN_MC_BOARD_0_IDX, _L("MC Board") },
1077 };
1078
1079 auto iter = s_fan_func_name.find(func);
1080 return (iter != s_fan_func_name.end()) ? iter->second : wxString::Format(_L("Fan"));
1081}
#define L_CONTEXT(s, context)
Definition DesignOffer.hpp:17
#define _L(s)
Definition OBJ.cpp:34
static std::string get_fan_text(const std::string &type_str, const std::string &key)
Definition DevConfigUtil.cpp:169
@ FAN_HEAT_BREAK_0_IDX
Definition DevFan.h:18
@ FAN_MC_BOARD_0_IDX
Definition DevFan.h:23
@ FAN_INNNER_LOOP_FAN_0_IDX
Definition DevFan.h:24
@ FAN_HEAT_BREAK_1_IDX
Definition DevFan.h:22
#define _L_CONTEXT(s, ctx)
Definition I18N.hpp:15

References _L, _L_CONTEXT, Slic3r::FAN_CHAMBER_0_IDX, Slic3r::FAN_COOLING_0_AIRDOOR, Slic3r::FAN_HEAT_BREAK_0_IDX, Slic3r::FAN_HEAT_BREAK_1_IDX, Slic3r::FAN_INNNER_LOOP_FAN_0_IDX, Slic3r::FAN_MC_BOARD_0_IDX, Slic3r::FAN_REMOTE_COOLING_0_IDX, Slic3r::DevPrinterConfigUtil::get_fan_text(), L_CONTEXT, and m_obj.

Referenced by UpdateParts().

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

◆ init_names()

void Slic3r::GUI::FanControlPopupNew::init_names ( MachineObject * obj)
private
1013 {
1014
1015 //Iint fan/door/func/duct name lists
1021
1025
1026 label_text[AIR_DUCT::AIR_DUCT_NONE] = _L("The fan controls the temperature during printing to improve print quality. "
1027 "The system automatically adjusts the fan's switch and speed "
1028 "according to different printing materials.");
1029 label_text[AIR_DUCT::AIR_DUCT_COOLING_FILT] = _L("Cooling mode is suitable for printing PLA/PETG/TPU materials and filters the chamber air.");
1030 label_text[AIR_DUCT::AIR_DUCT_HEATING_INTERNAL_FILT] = _L("Heating mode is suitable for printing ABS/ASA/PC/PA materials and circulates filters the chamber air.");
1032 label_text[AIR_DUCT::AIR_DUCT_FULL_COOLING] = _L("Strong cooling mode is suitable for printing PLA/TPU materials. In this mode, the printouts will be fully cooled.");
1034
1035 // special texts
1036 if (obj) {
1037 const std::string& special_cooling_text = DevPrinterConfigUtil::get_fan_text(obj->printer_type, "special_cooling_text");
1038 if (!special_cooling_text.empty()) {
1039 // Possible runtime values of special_cooling_text, marked for extraction.
1040 static const char *const markers[] = {
1041 L("Cooling mode is suitable for printing PLA/PETG/TPU materials."),
1042 L("Cooling mode is suitable for printing PLA/PETG/TPU materials and filters the chamber air."),
1043 };
1044 (void) markers;
1045 label_text[AIR_DUCT::AIR_DUCT_COOLING_FILT] = _L(special_cooling_text);
1046 }
1047 }
1048}
#define L(s)
Definition ExtrusionEntity.cpp:25
std::map< AIR_DUCT, wxString > label_text
Definition FanControl.hpp:253
std::map< AIR_DOOR, wxString > air_door_func_name
Definition FanControl.hpp:252
@ AIR_DOOR_FUNC_INNERLOOP
Definition DevFan.h:29
@ AIR_DOOR_FUNC_CHAMBER
Definition DevFan.h:29
@ AIR_DOOR_FUNC_TOP
Definition DevFan.h:29
@ AIR_DUCT_COOLING_FILT
Definition DevFan.h:34
@ AIR_DUCT_NONE
Definition DevFan.h:33
@ AIR_DUCT_HEATING_INTERNAL_FILT
Definition DevFan.h:35
@ AIR_DUCT_FULL_COOLING
Definition DevFan.h:37
@ AIR_DUCT_INIT
Definition DevFan.h:38
@ AIR_DUCT_EXHAUST
Definition DevFan.h:36

References _L, Slic3r::AIR_DOOR_FUNC_CHAMBER, Slic3r::AIR_DOOR_FUNC_INNERLOOP, air_door_func_name, Slic3r::AIR_DOOR_FUNC_TOP, Slic3r::AIR_DUCT_COOLING_FILT, Slic3r::AIR_DUCT_EXHAUST, Slic3r::AIR_DUCT_FULL_COOLING, Slic3r::AIR_DUCT_HEATING_INTERNAL_FILT, Slic3r::AIR_DUCT_INIT, Slic3r::AIR_DUCT_NONE, Slic3r::DevPrinterConfigUtil::get_fan_text(), L, label_text, Slic3r::MachineObject::printer_type, and radio_btn_name.

Referenced by FanControlPopupNew(), and update_fan_data().

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

◆ msw_rescale()

void Slic3r::GUI::FanControlPopupNew::msw_rescale ( )
959{
960 for (const auto& btn_iter : m_mode_switch_btns) { btn_iter.second->msw_rescale(); }
961 for (const auto& fan_iter : m_fan_control_list) { fan_iter.second->msw_rescale(); }
962}

References m_fan_control_list, and m_mode_switch_btns.

◆ on_fan_changed()

void Slic3r::GUI::FanControlPopupNew::on_fan_changed ( const wxCommandEvent & event)
private
1009{
1011}
int m_fan_set_time_out
Definition FanControl.hpp:249

References m_fan_set_time_out, and Slic3r::GUI::time_out.

Referenced by FanControlPopupNew().

Here is the caller graph for this function:

◆ on_left_down()

void Slic3r::GUI::FanControlPopupNew::on_left_down ( wxMouseEvent & evt)
private
896{
897 auto mouse_pos = ClientToScreen(evt.GetPosition());
898
899 for (const auto& iter : m_mode_switch_btns) {
900 SendModeSwitchButton* sw_it = iter.second;
901 auto win_pos = sw_it->ClientToScreen(wxPoint(0, 0));
902 auto size = sw_it->GetSize();
903 if (mouse_pos.x > win_pos.x && mouse_pos.x < (win_pos.x + sw_it->GetSize().x) && mouse_pos.y > win_pos.y &&
904 mouse_pos.y < (win_pos.y + sw_it->GetSize().y)) {
905 evt.SetId(sw_it->GetId());
906 on_mode_changed(evt);
907 }
908 }
909
910 for (auto fan_it : m_fan_control_list){
911 auto fan = fan_it.second;
912 auto win_pos = fan->m_switch_button->ClientToScreen(wxPoint(0, 0));
913 auto size = fan->m_switch_button->GetSize();
914 if (mouse_pos.x > win_pos.x && mouse_pos.x < (win_pos.x + fan->m_switch_button->GetSize().x) && mouse_pos.y > win_pos.y &&
915 mouse_pos.y < (win_pos.y + fan->m_switch_button->GetSize().y)) {
916 fan->on_swith_fan(evt);
917 }
918
919 fan->on_left_down(evt);
920 }
921
922 Layout();
923 Fit();
924 Refresh();
925
926 evt.Skip();
927}

References m_fan_control_list, m_mode_switch_btns, on_mode_changed(), and Slic3r::GUI::wxMouseEvent.

Referenced by FanControlPopupNew().

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

◆ on_mode_changed()

void Slic3r::GUI::FanControlPopupNew::on_mode_changed ( const wxMouseEvent & event)
private
973{
974 /* go check*/
975 if (m_obj && m_obj->is_in_printing())
976 {
977 SendModeSwitchButton* btn = dynamic_cast<SendModeSwitchButton*> (event.GetEventObject());
978 if (btn && !btn->isSelected())
979 {
980 MessageDialog msg_wingow(nullptr, _L("The selected material only supports the current fan mode, and it can't be changed during printing."), "", wxICON_WARNING | wxOK);
981 msg_wingow.ShowModal();
982 return;
983 }
984 }
985
986 /* update buttons*/
987 for (const auto& btn_iter : m_mode_switch_btns)
988 {
989 if (btn_iter.second->GetId() == event.GetId())
990 {
991 if (!btn_iter.second->isSelected())
992 {
993 btn_iter.second->setSelected(true);
994 command_control_air_duct(btn_iter.first);
995 }
996 }
997 else
998 {
999 btn_iter.second->setSelected(false);
1000 }
1001 }
1002
1003 Layout();
1004 Fit();
1005 Refresh();
1006}
void command_control_air_duct(int mode_id, int submode=-1)
Definition FanControl.cpp:945

References _L, command_control_air_duct(), Slic3r::GUI::SendModeSwitchButton::isSelected(), m_mode_switch_btns, m_obj, Slic3r::GUI::DPIAware< P >::ShowModal(), and Slic3r::GUI::wxMouseEvent.

Referenced by CreateDuct(), and on_left_down().

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

◆ on_show()

void Slic3r::GUI::FanControlPopupNew::on_show ( wxShowEvent & evt)
private
941{
942 wxGetApp().UpdateDlgDarkUI(this);
943}

Referenced by FanControlPopupNew().

Here is the caller graph for this function:

◆ paintEvent()

void Slic3r::GUI::FanControlPopupNew::paintEvent ( wxPaintEvent & evt)
private
965{
966 wxPaintDC dc(this);
967 dc.SetPen(wxColour(0xAC, 0xAC, 0xAC));
968 dc.SetBrush(*wxTRANSPARENT_BRUSH);
969 dc.DrawRoundedRectangle(0, 0, GetSize().x, GetSize().y, 0);
970}

Referenced by FanControlPopupNew().

Here is the caller graph for this function:

◆ post_event()

void Slic3r::GUI::FanControlPopupNew::post_event ( int fan_type,
wxString speed )
private
930{
931 // id, speed
932 wxCommandEvent event(EVT_FAN_CHANGED);
933 event.SetInt(fan_type);
934 event.SetString(speed);
935 event.SetEventObject(GetParent());
936 wxPostEvent(GetParent(), event);
937 event.Skip();
938}

◆ update_fan_data() [1/3]

void Slic3r::GUI::FanControlPopupNew::update_fan_data ( AIR_FUN id,
int speed )
private
880{
881 for (auto& part : m_data.parts) {
882 auto part_id = part.id;
883 if (id == part_id) {
884 part.state = speed;
885 auto it = m_fan_control_list.find(part_id);
886 if (it != m_fan_control_list.end()) {
887 auto fan_control = m_fan_control_list[part_id];
888 fan_control->update_mode();
889 fan_control->set_fan_speed_percent(speed);
890 }
891 }
892 }
893}

References m_data, and m_fan_control_list.

◆ update_fan_data() [2/3]

void Slic3r::GUI::FanControlPopupNew::update_fan_data ( const AirDuctData & data)
private
861{
862 if (m_data == data) { return; }
863
864 m_data = data;
865 for (const auto& part : m_data.parts) {
866 auto part_id = part.id;
867 auto part_state = part.state;
868
869 auto it = m_fan_control_list.find(part_id);
870 if (it != m_fan_control_list.end()) {
871 auto fan_control = m_fan_control_list[part_id];
872 fan_control->set_fan_speed_percent(part_state / 10);
873 }
874 }
875
876 UpdateParts();
877}

References m_data, m_fan_control_list, and UpdateParts().

Referenced by CreateDuct(), and update_fan_data().

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

◆ update_fan_data() [3/3]

void Slic3r::GUI::FanControlPopupNew::update_fan_data ( MachineObject * obj)
829{
830 if (!obj)
831 return;
832
833 if (m_obj != obj) {
834 m_obj = obj;
836 }
837
838 if (m_air_duct_time_out > 0) {
840 return;
841 }
842
843 if (m_fan_set_time_out > 0) {
845 return;
846 }
847
848 if (!obj->GetFan()->GetAirDuctData().modes.empty()) {
849 update_fan_data(obj->GetFan()->GetAirDuctData());
850 } else {
851 int cooling_fan_speed = round(obj->GetFan()->GetCoolingFanSpeed() / float(25.5));
852 int big_fan1_speed = round(obj->GetFan()->GetBigFan1Speed() / float(25.5));
853 int big_fan2_speed = round(obj->GetFan()->GetBigFan2Speed() / float(25.5));
857 }
858}

References Slic3r::FAN_CHAMBER_0_IDX, Slic3r::FAN_COOLING_0_AIRDOOR, Slic3r::FAN_REMOTE_COOLING_0_IDX, Slic3r::DevFan::GetAirDuctData(), Slic3r::DevFan::GetBigFan1Speed(), Slic3r::DevFan::GetBigFan2Speed(), Slic3r::DevFan::GetCoolingFanSpeed(), Slic3r::MachineObject::GetFan(), init_names(), m_air_duct_time_out, m_fan_set_time_out, m_obj, Slic3r::AirDuctData::modes, and update_fan_data().

Here is the call graph for this function:

◆ UpdateParts()

void Slic3r::GUI::FanControlPopupNew::UpdateParts ( )
private
759{
760 auto text = label_text[AIR_DUCT(m_data.curren_mode)];
761 if (m_mode_text->GetLabelText() != text)
762 {
763 m_mode_text->SetLabelText(text);
764 m_mode_text->Wrap(FromDIP(400));
765 }
766
768 for (const auto& part : m_data.parts) {
769
770 auto part_id = part.id;
771 auto part_name = get_fan_func_name(m_data.curren_mode, m_data.m_sub_mode, AIR_FUN(part_id));
772
773 auto fan_control = m_fan_control_list[part_id];
774 if (!fan_control)
775 {
776 fan_control = new FanControlNew(this, m_data, m_data.curren_mode, part_id, wxID_ANY, wxDefaultPosition, wxDefaultSize);
777 m_fan_control_list[part_id] = fan_control;
778 m_sizer_fanControl->Add(fan_control, 0, wxALL, FromDIP(5));
779 }
780
781 fan_control->set_machine_obj(m_obj);
782 fan_control->set_name(part_name);
783 fan_control->update_fan_data(m_data);
784 fan_control->set_mode_id(m_data.curren_mode);
785 fan_control->update_mode();
786 }
787
788 for (const auto& btn_iter : m_mode_switch_btns) {
789 if (btn_iter.first == m_data.curren_mode) {
790 btn_iter.second->setSelected(true);
791 } else {
792 btn_iter.second->setSelected(false);
793 }
794 }
795
796 Layout();
797 Fit();
798}
void UpdatePartSubMode()
Definition FanControl.cpp:800
wxString get_fan_func_name(int mode, int submode, AIR_FUN func) const
Definition FanControl.cpp:1050
AIR_FUN
Definition DevFan.h:17

References get_fan_func_name(), label_text, m_data, m_fan_control_list, m_mode_switch_btns, m_mode_text, m_obj, m_sizer_fanControl, and UpdatePartSubMode().

Referenced by command_control_air_duct(), CreateDuct(), and update_fan_data().

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

◆ UpdatePartSubMode()

void Slic3r::GUI::FanControlPopupNew::UpdatePartSubMode ( )
private
801{
802 // Submode for cooling filter
803 if (AIR_DUCT(m_data.curren_mode) == AIR_DUCT::AIR_DUCT_COOLING_FILT && m_data.IsSupportCoolingFilter()) {
805 m_cooling_filter_switch_panel = new FanControlNewSwitchPanel(m_sub_mode_panel, _L_CONTEXT("Filter", "air_duct"), _L("Enabling filtration redirects the right fan to filter gas, which may reduce cooling performance."));
806 m_cooling_filter_switch_panel->Bind(EVT_FANCTRL_SWITCH, [this] (wxCommandEvent& evt)
807 {
808 if (m_obj && m_obj->is_in_printing()) {
809 MessageDialog msg_wingow(nullptr, _L("Enabling filtration during printing may reduce cooling and affect print quality. Please choose carefully."), "", wxICON_WARNING | wxCANCEL | wxOK);
810 msg_wingow.SetButtonLabel(wxID_OK, _L("Change Anyway"));
811 if (msg_wingow.ShowModal() != wxID_OK) { return; }
812 }
813
814 int submode = m_cooling_filter_switch_panel->IsSwitchOn() ? 1 : 0;
815 command_control_air_duct(m_data.curren_mode, submode);
816 });
817
818 m_sub_mode_sizer->Add(m_cooling_filter_switch_panel, 0, wxALL, FromDIP(5));
819 }
820
821 m_cooling_filter_switch_panel->SetSwitchOn(m_data.IsCoolingFilerOn());
822 } else {
825 }
826}
FanControlNewSwitchPanel * m_cooling_filter_switch_panel
Definition FanControl.hpp:240

References _L, _L_CONTEXT, Slic3r::AIR_DUCT_COOLING_FILT, command_control_air_duct(), m_cooling_filter_switch_panel, m_data, m_obj, m_sub_mode_panel, m_sub_mode_sizer, Slic3r::GUI::MsgDialog::SetButtonLabel(), and Slic3r::GUI::DPIAware< P >::ShowModal().

Referenced by UpdateParts().

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

Member Data Documentation

◆ air_door_func_name

std::map<AIR_DOOR, wxString> Slic3r::GUI::FanControlPopupNew::air_door_func_name
private

Referenced by init_names().

◆ label_text

std::map<AIR_DUCT, wxString> Slic3r::GUI::FanControlPopupNew::label_text
private

Referenced by init_names(), and UpdateParts().

◆ m_air_duct_time_out

int Slic3r::GUI::FanControlPopupNew::m_air_duct_time_out { 0 }
private
248{ 0 };

Referenced by command_control_air_duct(), and update_fan_data().

◆ m_cooling_filter_switch_panel

FanControlNewSwitchPanel* Slic3r::GUI::FanControlPopupNew::m_cooling_filter_switch_panel { nullptr }
private
240{ nullptr };

Referenced by UpdatePartSubMode().

◆ m_data

◆ m_fan_control_list

std::map<int, FanControlNew*> Slic3r::GUI::FanControlPopupNew::m_fan_control_list
private

◆ m_fan_set_time_out

int Slic3r::GUI::FanControlPopupNew::m_fan_set_time_out { 0 }
private
249{ 0 };

Referenced by on_fan_changed(), and update_fan_data().

◆ m_mode_sizer

wxBoxSizer* Slic3r::GUI::FanControlPopupNew::m_mode_sizer { nullptr }
private
228{ nullptr };

Referenced by FanControlPopupNew().

◆ m_mode_switch_btns

std::unordered_map<int, SendModeSwitchButton*> Slic3r::GUI::FanControlPopupNew::m_mode_switch_btns
private

◆ m_mode_text

Label* Slic3r::GUI::FanControlPopupNew::m_mode_text
private

Referenced by FanControlPopupNew(), and UpdateParts().

◆ m_obj

◆ m_radio_btn_sizer

wxGridSizer* Slic3r::GUI::FanControlPopupNew::m_radio_btn_sizer { nullptr }
private
225{ nullptr };

Referenced by FanControlPopupNew(), and CreateDuct().

◆ m_sizer_fanControl

wxGridSizer* Slic3r::GUI::FanControlPopupNew::m_sizer_fanControl { nullptr }
private
226{ nullptr };

Referenced by FanControlPopupNew(), and UpdateParts().

◆ m_sizer_main

wxBoxSizer* Slic3r::GUI::FanControlPopupNew::m_sizer_main { nullptr }
private
222{ nullptr };

Referenced by FanControlPopupNew().

◆ m_sub_mode_panel

wxPanel* Slic3r::GUI::FanControlPopupNew::m_sub_mode_panel { nullptr }
private
238{ nullptr };

Referenced by FanControlPopupNew(), and UpdatePartSubMode().

◆ m_sub_mode_sizer

wxBoxSizer* Slic3r::GUI::FanControlPopupNew::m_sub_mode_sizer { nullptr }
private
239{ nullptr };

Referenced by FanControlPopupNew(), and UpdatePartSubMode().

◆ radio_btn_name

std::map<AIR_DUCT, wxString> Slic3r::GUI::FanControlPopupNew::radio_btn_name
private

Referenced by CreateDuct(), and init_names().


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