diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index b292ca529..12dc8d04d 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -5679,35 +5679,49 @@ void MachineObject::parse_new_info(json print) m_air_duct_data.curren_mode = device["airduct"]["modeCur"].get(); - for (auto it_mode = device["airduct"]["modeList"].begin(); it_mode != device["airduct"]["modeList"].end(); it_mode++) { - AirMode mode; - mode.id = (*it_mode)["modeId"].get(); + const json& airduct = device["airduct"]; + if (airduct.contains("modeList") && airduct["modeList"].is_array()) { + auto list = airduct["modeList"].get>(); - for (auto it_mode_ctrl = (*it_mode)["ctrl"].begin(); it_mode_ctrl != (*it_mode)["ctrl"].end(); it_mode_ctrl++) { - mode.ctrl.push_back((*it_mode_ctrl).get() >> 4); + for (int i = 0; i < list.size(); ++i) { + // only show 2 mode + if (i >= 2) { break; } + + json mode_json = list[i]; + AirMode mode; + if (mode_json.contains("modeId")) + mode.id = mode_json["modeId"].get(); + if (mode_json.contains("ctrl")) { + for (auto it_mode_ctrl = mode_json["ctrl"].begin(); it_mode_ctrl != mode_json["ctrl"].end(); it_mode_ctrl++) { + mode.ctrl.push_back((*it_mode_ctrl).get() >> 4); + } + } + + if (mode_json.contains("off")) { + for (auto it_mode_off = mode_json["off"].begin(); it_mode_off != mode_json["off"].end(); *it_mode_off++) { + mode.off.push_back((*it_mode_off).get() >> 4); + } + } + + m_air_duct_data.modes.push_back(mode); } - - for (auto it_mode_off = (*it_mode)["off"].begin(); it_mode_off != (*it_mode)["off"].begin(); *it_mode_off++) { - mode.off.push_back((*it_mode_off).get() >> 4); - } - - m_air_duct_data.modes.push_back(mode); } - for (auto it_part = device["airduct"]["parts"].begin(); it_part != device["airduct"]["parts"].end(); it_part++) { + if (airduct.contains("parts") && airduct["parts"].is_array()) { + for (auto it_part = airduct["parts"].begin(); it_part != airduct["parts"].end(); it_part++) { + int state = (*it_part)["state"].get(); + int range = (*it_part)["range"].get(); - int state = (*it_part)["state"].get(); - int range = (*it_part)["range"].get(); + AirParts part; + part.type = get_flag_bits((*it_part)["id"].get(), 0, 3); + part.id = get_flag_bits((*it_part)["id"].get(), 4, 12); + part.func = (*it_part)["func"].get(); + part.state = get_flag_bits(state, 0, 8); + part.range_start = get_flag_bits(range, 0, 15); + part.range_end = get_flag_bits(range, 16, 15); - AirParts part; - part.type = get_flag_bits((*it_part)["id"].get(), 0, 3); - part.id = get_flag_bits((*it_part)["id"].get(), 4, 12); - part.func = (*it_part)["func"].get(); - part.state = get_flag_bits(state, 0, 8); - part.range_start = get_flag_bits(range, 0, 15); - part.range_end = get_flag_bits(range, 16, 15); - - m_air_duct_data.parts.push_back(part); + m_air_duct_data.parts.push_back(part); + } } } @@ -6147,7 +6161,8 @@ int MachineObject::command_handle_response(const json &response) std::string reply = response["sequence_id"].get(); auto it = m_callback_list.find(reply); if (it != m_callback_list.end()) { - it->second(response); + if (it->second) + it->second(response); m_callback_list.erase(it); } diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 99ee55e1e..d71f7c681 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -4677,8 +4677,8 @@ std::string PrintOptionItem::getValue() SetBackgroundColour(*wxWHITE); static Slic3r::GUI::BitmapCache cache; - m_img_selected = ScalableBitmap(this, "switch_send_mode_on", 28); - m_img_unselected = ScalableBitmap(this, "switch_send_mode_off", 28); + m_img_selected = ScalableBitmap(this, "switch_send_mode_on", 28); + m_img_unselected = ScalableBitmap(this, "switch_send_mode_off", 28); m_img_selected_tag = ScalableBitmap(this, "switch_send_mode_tag_on", 16); m_img_unselected_tag = ScalableBitmap(this, "switch_send_mode_tag_off", 16); @@ -4686,6 +4686,7 @@ std::string PrintOptionItem::getValue() SetMinSize(tagSize); SetMaxSize(tagSize); + wxGetApp().UpdateDarkUIWin(this); } void SendModeSwitchButton::OnPaint(wxPaintEvent &event) diff --git a/src/slic3r/GUI/Widgets/FanControl.cpp b/src/slic3r/GUI/Widgets/FanControl.cpp index 971994cbd..e4e92d3c1 100644 --- a/src/slic3r/GUI/Widgets/FanControl.cpp +++ b/src/slic3r/GUI/Widgets/FanControl.cpp @@ -15,7 +15,7 @@ wxDEFINE_EVENT(EVT_FAN_ADD, wxCommandEvent); wxDEFINE_EVENT(EVT_FAN_DEC, wxCommandEvent); wxDEFINE_EVENT(EVT_FAN_CHANGED, wxCommandEvent); -constexpr int time_out = 20; +constexpr int time_out = 10; /************************************************* Description:Fan @@ -47,17 +47,16 @@ void Fan::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSi //auto m_bitmap_pointer = ScalableBitmap(this, "fan_pointer", FromDIP(25)); //m_img_pointer = m_bitmap_pointer.bmp().ConvertToImage(); - m_bitmap_bk = ScalableBitmap(this, "fan_dash_bk", FromDIP(80)); + m_bitmap_bk = ScalableBitmap(this, "fan_dash_bk", 80); for (auto i = 0; i <= 10; i++) { #ifdef __APPLE__ - auto m_bitmap_scale = ScalableBitmap(this, wxString::Format("fan_scale_%d", i).ToStdString(), FromDIP(60)); + auto m_bitmap_scale = ScalableBitmap(this, wxString::Format("fan_scale_%d", i).ToStdString(), 60); m_bitmap_scales.push_back(m_bitmap_scale); #else - auto m_bitmap_scale = ScalableBitmap(this, wxString::Format("fan_scale_%d", i).ToStdString(), FromDIP(46)); + auto m_bitmap_scale = ScalableBitmap(this, wxString::Format("fan_scale_%d", i).ToStdString(), 46); m_bitmap_scales.push_back(m_bitmap_scale); #endif - } //#ifdef __APPLE__ @@ -149,7 +148,8 @@ void Fan::doRender(wxDC& dc) //dc.DrawText(rpm, (size.x - dc.GetTextExtent(rpm).x) / 2, size.y - dc.GetTextExtent(rpm).y); } -void Fan::msw_rescale() { +void Fan::msw_rescale() +{ m_bitmap_bk.msw_rescale(); } @@ -168,16 +168,16 @@ FanOperate::FanOperate(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_min_speeds = 1; m_max_speeds = 10; create(parent, id, pos, size); + wxGetApp().UpdateDarkUIWin(this); } void FanOperate::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size) { - wxWindow::Create(parent, id, pos, size, wxBORDER_NONE); SetBackgroundColour(*wxWHITE); - m_bitmap_add = ScalableBitmap(this, "fan_control_add", FromDIP(24)); - m_bitmap_decrease = ScalableBitmap(this, "fan_control_decrease", FromDIP(24)); + m_bitmap_add = ScalableBitmap(this, "fan_control_add", 24); + m_bitmap_decrease = ScalableBitmap(this, "fan_control_decrease", 24); SetMinSize(wxSize(FromDIP(SIZE_OF_FAN_OPERATE.x), FromDIP(SIZE_OF_FAN_OPERATE.y))); Bind(wxEVT_PAINT, &FanOperate::paintEvent, this); @@ -327,7 +327,6 @@ FanControlNew::FanControlNew(wxWindow *parent, const AirDuctData &fan_data, int auto m_static_bitmap_fan = new wxStaticBitmap(this, wxID_ANY, m_bitmap_fan->bmp(), wxDefaultPosition, wxDefaultSize); m_static_name = new wxStaticText(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END | wxALIGN_CENTER_HORIZONTAL); - m_static_name->SetForegroundColour(wxColour(DRAW_HEAD_TEXT_COLOUR)); m_static_name->SetBackgroundColour(wxColour(248, 248, 248)); m_static_name->SetFont(Label::Head_18); m_static_name->SetMinSize(wxSize(FromDIP(100), -1)); @@ -370,6 +369,11 @@ FanControlNew::FanControlNew(wxWindow *parent, const AirDuctData &fan_data, int command_control_fan(); }); + m_fan_operate->Bind(EVT_FAN_DEC, [this](const wxCommandEvent& e) { + m_current_speed = e.GetInt(); + command_control_fan(); + }); + m_sizer_control_bottom->Add(m_static_status_name, 0, wxALL, FromDIP(10)); m_sizer_control_bottom->Add(m_fan_operate, 0, wxALL, FromDIP(10)); @@ -380,6 +384,7 @@ FanControlNew::FanControlNew(wxWindow *parent, const AirDuctData &fan_data, int this->SetSizer(m_sizer_main); this->Layout(); m_sizer_main->Fit(this); + wxGetApp().UpdateDarkUIWin(this); } void FanControlNew::on_left_down(wxMouseEvent& evt) @@ -395,19 +400,14 @@ void FanControlNew::command_control_fan() if (m_current_speed < 0 || m_current_speed > 10) { return; } BOOST_LOG_TRIVIAL(info) << "Functions Need to be supplemented! :FanControlNew::command_control_fan. the speed may change"; - token.reset(this, nop_deleter_fan_control); if (m_obj) { if (!m_obj->is_enable_np){ int speed = floor(m_current_speed * float(25.5)); m_obj->command_control_fan(m_part_id, speed); } else { - m_obj->command_control_fan_new(m_part_id, m_current_speed, [this, w = std::weak_ptr(token)](const json &reply) { - if (w.expired()) - return; - post_event(1); - }); + m_obj->command_control_fan_new(m_part_id, m_current_speed * 10, nullptr); } - post_event(0); + post_event(); } } @@ -480,7 +480,8 @@ void FanControlNew::set_machine_obj(MachineObject* obj) m_obj = obj; } -void FanControlNew::set_name(wxString name) { +void FanControlNew::set_name(wxString name) +{ m_static_name->SetLabelText(name); } @@ -520,10 +521,9 @@ void FanControlNew::set_fan_switch(bool s) { } -void FanControlNew::post_event(int type) +void FanControlNew::post_event() { auto event = wxCommandEvent(EVT_FAN_CHANGED); - event.SetInt(type); event.SetString(wxString::Format("%d", m_current_speed)); event.SetEventObject(GetParent()); wxPostEvent(GetParent(), event); @@ -544,20 +544,25 @@ FanControlPopupNew::FanControlPopupNew(wxWindow* parent, MachineObject* obj,AirD m_obj = obj; m_sizer_main = new wxBoxSizer(wxVERTICAL); - m_radio_btn_sizer = new wxGridSizer( 0, 3, 3, 3 ); - m_sizer_fanControl = new wxGridSizer( 0, 3, 3, 10 ); + m_radio_btn_sizer = new wxGridSizer(0, 2, FromDIP(3), FromDIP(3)); + m_sizer_fanControl = new wxGridSizer(0, 2, FromDIP(3), FromDIP(10)); m_mode_sizer = new wxBoxSizer(wxHORIZONTAL); - m_button_refresh = new Button(this, wxString(""), "fan_poppingup_refresh", 0, FromDIP(24)); + m_button_refresh = new Button(this, wxString(""), "fan_poppingup_refresh", 0, 24); m_button_refresh->SetBackgroundColor(*wxWHITE); m_button_refresh->SetBorderColor(*wxWHITE); m_button_refresh->SetMinSize(wxSize(FromDIP(26), FromDIP(26))); m_button_refresh->SetMaxSize(wxSize(FromDIP(26), FromDIP(26))); - + m_button_refresh->Bind(wxEVT_ENTER_WINDOW, [this](const auto &e) { SetCursor(wxCURSOR_HAND); }); + m_button_refresh->Bind(wxEVT_LEAVE_WINDOW, [this](const auto &e) { SetCursor(wxCURSOR_ARROW); }); + m_button_refresh->Bind(wxEVT_LEFT_DOWN, [this](const auto &e) { + CreateDuct(); + Layout(); + Fit(); + }); m_mode_sizer->Add(m_radio_btn_sizer, 0, wxALIGN_CENTRE_VERTICAL, 0); m_mode_sizer->Add(m_button_refresh, 0, wxALIGN_CENTRE_VERTICAL, 0); - m_cooling_text = new wxStaticText(this, wxID_ANY, wxT("")); m_cooling_text->SetBackgroundColour(*wxWHITE); @@ -589,14 +594,15 @@ FanControlPopupNew::FanControlPopupNew(wxWindow* parent, MachineObject* obj,AirD #endif Bind(wxEVT_SHOW, &FanControlPopupNew::on_show, this); Bind(EVT_FAN_CHANGED, &FanControlPopupNew::on_fan_changed, this); - - for (const auto& btn : m_mode_switch_btn_list) { - btn->Bind(wxEVT_LEFT_DOWN, &FanControlPopupNew::on_mode_changed, this); - } + Bind(wxEVT_CLOSE_WINDOW, [this](const auto& e) { + int a = 0; + }); } -void FanControlPopupNew::CreateDuct(){ - +void FanControlPopupNew::CreateDuct() +{ + m_radio_btn_sizer->Clear(true); + m_mode_switch_btn_list.clear(); //tips UpdateTips(m_data.curren_mode); @@ -611,6 +617,7 @@ void FanControlPopupNew::CreateDuct(){ for (auto i = 0; i < mode_size; i++) { wxString text = wxString::Format("%s", radio_btn_name[AIR_DUCT(m_data.modes[i].id)]); SendModeSwitchButton *radio_btn = new SendModeSwitchButton(this, text, m_data.curren_mode == m_data.modes[i].id); + radio_btn->Bind(wxEVT_LEFT_DOWN, &FanControlPopupNew::on_mode_changed, this); m_mode_switch_btn_list.emplace_back(radio_btn); m_radio_btn_sizer->Add(radio_btn, wxALL, FromDIP(5)); } @@ -620,7 +627,7 @@ void FanControlPopupNew::UpdateParts(int mode_id) { m_sizer_fanControl->Clear(true); for (const auto& part : m_data.parts) { - + auto part_id = part.id; auto part_func = part.func; auto part_name = fan_func_name[AIR_FUN(part_id)]; @@ -633,39 +640,16 @@ void FanControlPopupNew::UpdateParts(int mode_id) m_fan_control_list[part_id] = fan_control; m_sizer_fanControl->Add(fan_control, 0, wxALL, FromDIP(5)); - - /*if (fan_control.type == AIR_FAN_TYPE) - m_duct_fans_list[fan.id] = fan_control; - else if (fan_control.type == AIR_DOOR_TYPE) - m_duct_doors_list[fan.id] = fan_control;*/ } m_sizer_fanControl->Layout(); - - /*update state*/ - - //m_sizer_fanControl->Clear(); - //if (m_fan_control_list.find(duct_id) == m_fan_control_list.end()) return; - //for (auto fan_control_list : m_fan_control_list){ - // if (fan_control_list.first == duct_id) continue; - // for (auto fan_control : fan_control_list.second){ - // fan_control.second->Hide(); - // } - //} - //auto fan_control_new_list = m_fan_control_list[duct_id]; - //for (auto it : fan_control_new_list){ - // //m_sizer_fanControl->Add(it.second, 0, wxALL | wxEXPAND, 0); - // m_sizer_fanControl->Add(it.second, 0, wxALL, 5); - // it.second->Show(); - //} - //m_sizer_fanControl->Layout(); } void FanControlPopupNew::UpdateTips(int model) { auto text = label_text[AIR_DUCT(model)]; m_cooling_text->SetLabelText(text); - m_cooling_text->Wrap(FromDIP(600)); + m_cooling_text->Wrap(FromDIP(400)); Layout(); } @@ -675,8 +659,8 @@ void FanControlPopupNew::update_fan_data(MachineObject *obj) return; if (obj->is_enable_np) { - if (m_air_duct_time_out == 0) { - m_air_duct_time_out--; + if (m_fan_set_time_out > 0) { + m_fan_set_time_out--; return; } update_fan_data(obj->m_air_duct_data); @@ -690,7 +674,7 @@ void FanControlPopupNew::update_fan_data(MachineObject *obj) int big_fan2_speed = round(obj->big_fan2_speed / float(25.5)); update_fan_data(AIR_FUN::FAN_COOLING_0_AIRDOOR, cooling_fan_speed); update_fan_data(AIR_FUN::FAN_REMOTE_COOLING_0_IDX, big_fan1_speed); - update_fan_data(AIR_FUN::FAN_REMOTE_COOLING_0_IDX, big_fan2_speed); + update_fan_data(AIR_FUN::FAN_CHAMBER_0_IDX, big_fan2_speed); } } @@ -706,12 +690,12 @@ void FanControlPopupNew::update_fan_data(const AirDuctData &data) auto it = m_fan_control_list.find(part_id); if (it != m_fan_control_list.end()) { auto fan_control = m_fan_control_list[part_id]; - fan_control->set_fan_speed_percent(part_state); + fan_control->set_fan_speed_percent(part_state / 10); } } } -void FanControlPopupNew::update_fan_data(AIR_FUN id, int speed) +void FanControlPopupNew::update_fan_data(AIR_FUN id, int speed) { for (auto& part : m_data.parts) { auto part_id = part.id; @@ -872,38 +856,34 @@ void FanControlPopupNew::on_mode_changed(const wxMouseEvent &event) void FanControlPopupNew::on_fan_changed(const wxCommandEvent &event) { - int type = event.GetInt(); - if (type == 0) - m_fan_set_time_out = time_out; - else - m_fan_set_time_out = 0; + m_fan_set_time_out = time_out; } void FanControlPopupNew::init_names() { //Iint fan/door/func/duct name lists - radio_btn_name[AIR_DUCT::AIR_DUCT_COOLING_FILT] = _L("Cooling Filter"); - radio_btn_name[AIR_DUCT::AIR_DUCT_HEATING_INTERNAL_FILT] = L("Internal Filter"); + radio_btn_name[AIR_DUCT::AIR_DUCT_COOLING_FILT] = _L("Cooling"); + radio_btn_name[AIR_DUCT::AIR_DUCT_HEATING_INTERNAL_FILT] = L("Heating"); radio_btn_name[AIR_DUCT::AIR_DUCT_EXHAUST] = L("Exhaust"); radio_btn_name[AIR_DUCT::AIR_DUCT_FULL_COOLING] = L("Full Cooling"); radio_btn_name[AIR_DUCT::AIR_DUCT_NUM] = L("Num?"); radio_btn_name[AIR_DUCT::AIR_DUCT_INIT] = L("Init"); - - fan_func_name[AIR_FUN::FAN_HEAT_BREAK_0_IDX] = _L("Nozzle0"); + + fan_func_name[AIR_FUN::FAN_HEAT_BREAK_0_IDX] = _L("Hotend"); fan_func_name[AIR_FUN::FAN_COOLING_0_AIRDOOR] = _L("Part"); fan_func_name[AIR_FUN::FAN_REMOTE_COOLING_0_IDX] = _L("Aux"); - fan_func_name[AIR_FUN::FAN_CHAMBER_0_IDX] = _L("Chamber"); + fan_func_name[AIR_FUN::FAN_CHAMBER_0_IDX] = _L("Exhaust"); fan_func_name[AIR_FUN::FAN_HEAT_BREAK_1_IDX] = _L("Nozzle1"); fan_func_name[AIR_FUN::FAN_MC_BOARD_0_IDX] = _L("MC Board"); - fan_func_name[AIR_FUN::FAN_INNNER_LOOP_FAN_0_IDX] = _L("Innerloop"); - + fan_func_name[AIR_FUN::FAN_INNNER_LOOP_FAN_0_IDX] = _L("Heat"); + air_door_func_name[AIR_DOOR::AIR_DOOR_FUNC_CHAMBER] = _L("Chamber"); air_door_func_name[AIR_DOOR::AIR_DOOR_FUNC_INNERLOOP] = _L("Innerloop"); air_door_func_name[AIR_DOOR::AIR_DOOR_FUNC_TOP] = _L("Top"); label_text[AIR_DUCT::AIR_DUCT_NONE] = _L("The fan controls the temperature during printing to improve print quality.The system automatically adjusts the fan's switch and speed according to different printing materials."); label_text[AIR_DUCT::AIR_DUCT_COOLING_FILT] = L("Cooling-filtering mode is suitable for printing PLA/PETG/TPU materials. In this mode, the chamber temperature is low, and the air in the chamber can be filtered while cooling the printed part."); - label_text[AIR_DUCT::AIR_DUCT_HEATING_INTERNAL_FILT] = L("Cooling-filtering mode is suitable for printing PLA/PETG/TPU materials. In this mode, the chamber temperature is low, and the air in the chamber can be filtered while cooling the printed part."); + label_text[AIR_DUCT::AIR_DUCT_HEATING_INTERNAL_FILT] = L("Heating mode is suitable for printeing ABS/ASA/PC/PA materials and circulates filters the chamber air."); label_text[AIR_DUCT::AIR_DUCT_EXHAUST] = L("Exhaust"); label_text[AIR_DUCT::AIR_DUCT_FULL_COOLING] = L("Strong cooling mode is suitable for printing PLA/TPU materials. In this mode, the printed part will be cooled in all directions."); label_text[AIR_DUCT::AIR_DUCT_NUM] = _L("Num"); diff --git a/src/slic3r/GUI/Widgets/FanControl.hpp b/src/slic3r/GUI/Widgets/FanControl.hpp index 272ac5924..bf990b0b1 100644 --- a/src/slic3r/GUI/Widgets/FanControl.hpp +++ b/src/slic3r/GUI/Widgets/FanControl.hpp @@ -159,7 +159,7 @@ public: void set_fan_speed(int g); void set_fan_speed_percent(int speed); void set_fan_switch(bool s); - void post_event(int type); + void post_event(); void on_swith_fan(wxMouseEvent& evt); void on_swith_fan(bool on); void update_mode();