diff --git a/src/slic3r/GUI/DeviceCore/DevConfigUtil.cpp b/src/slic3r/GUI/DeviceCore/DevConfigUtil.cpp index b3a3a95424..ef70218dd7 100644 --- a/src/slic3r/GUI/DeviceCore/DevConfigUtil.cpp +++ b/src/slic3r/GUI/DeviceCore/DevConfigUtil.cpp @@ -108,6 +108,53 @@ std::string DevPrinterConfigUtil::get_fan_text(const std::string& type_str, cons return std::string(); } +std::string DevPrinterConfigUtil::get_fan_text(const std::string& type_str, int airduct_mode, int airduct_func, int submode) +{ + std::vector filaments; + std::string config_file = m_resource_file_path + "/printers/" + type_str + ".json"; + boost::nowide::ifstream json_file(config_file.c_str()); + try + { + json jj; + if (json_file.is_open()) + { + json_file >> jj; + if (jj.contains("00.00.00.00")) + { + json const& printer = jj["00.00.00.00"]; + if (!printer.contains("fan")) + { + return std::string(); + } + + json const& fan_item = printer["fan"]; + const auto& airduct_mode_str = std::to_string(airduct_mode); + if (!fan_item.contains(airduct_mode_str)) + { + return std::string(); + } + + json const& airduct_item = fan_item[airduct_mode_str]; + const auto& airduct_func_str = std::to_string(airduct_func); + if (airduct_item.contains(airduct_func_str)) + { + const auto& airduct_func_item = airduct_item[airduct_func_str]; + if (airduct_func_item.is_object()) + { + return airduct_func_item[std::to_string(submode)].get(); + } + else if (airduct_func_item.is_string()) + { + return airduct_func_item.get(); + } + } + } + } + } + catch (...) {} + return std::string(); +} + std::map> DevPrinterConfigUtil::get_all_subseries(std::string type_str) { std::vector m_files; diff --git a/src/slic3r/GUI/DeviceCore/DevConfigUtil.h b/src/slic3r/GUI/DeviceCore/DevConfigUtil.h index d4b44549e1..6add560f7d 100644 --- a/src/slic3r/GUI/DeviceCore/DevConfigUtil.h +++ b/src/slic3r/GUI/DeviceCore/DevConfigUtil.h @@ -66,6 +66,7 @@ public: /*fan*/ static std::string get_fan_text(const std::string& type_str, const std::string& key); + static std::string get_fan_text(const std::string& type_str, int airduct_mode, int airduct_func, int submode); /*extruder*/ static bool get_printer_can_set_nozzle(std::string type_str) { return get_value_from_config(type_str, "enable_set_nozzle_info"); }// can set nozzle from studio diff --git a/src/slic3r/GUI/DeviceCore/DevFan.cpp b/src/slic3r/GUI/DeviceCore/DevFan.cpp index f6b0fb904c..d8d617355b 100644 --- a/src/slic3r/GUI/DeviceCore/DevFan.cpp +++ b/src/slic3r/GUI/DeviceCore/DevFan.cpp @@ -204,7 +204,7 @@ void Slic3r::DevFan::ParseV2_0(const json &print_json) { AirParts part; part.type = m_owner->get_flag_bits((*it_part)["id"].get(), 0, 4); - part.id = m_owner->get_flag_bits((*it_part)["id"].get(), 4, 9); + part.id = m_owner->get_flag_bits((*it_part)["id"].get(), 4, 8); part.func = (*it_part)["func"].get(); part.state = m_owner->get_flag_bits(state, 0, 8); part.range_start = m_owner->get_flag_bits(range, 0, 16); diff --git a/src/slic3r/GUI/DeviceCore/DevFan.h b/src/slic3r/GUI/DeviceCore/DevFan.h index b3b58d6627..5975b43192 100644 --- a/src/slic3r/GUI/DeviceCore/DevFan.h +++ b/src/slic3r/GUI/DeviceCore/DevFan.h @@ -11,7 +11,7 @@ typedef std::function CommandCallBack; -enum AIR_FUN { +enum AIR_FUN : int { FAN_HEAT_BREAK_0_IDX = 0, FAN_COOLING_0_AIRDOOR = 1, FAN_REMOTE_COOLING_0_IDX = 2, @@ -19,13 +19,14 @@ enum AIR_FUN { FAN_HEAT_BREAK_1_IDX = 4, FAN_MC_BOARD_0_IDX = 5, FAN_INNNER_LOOP_FAN_0_IDX = 6, - FAN_TOTAL_COUNT = 7 + FAN_TOTAL_COUNT = 7, + FAN_REMOTE_COOLING_1_IDX = 10 }; enum AIR_DOOR { AIR_DOOR_FUNC_CHAMBER = 0, AIR_DOOR_FUNC_INNERLOOP, AIR_DOOR_FUNC_TOP }; -enum AIR_DUCT { +enum AIR_DUCT : int { AIR_DUCT_NONE = -1, AIR_DUCT_COOLING_FILT = 0, AIR_DUCT_HEATING_INTERNAL_FILT, @@ -87,7 +88,7 @@ public: }; bool IsSupportCoolingFilter() const { return m_support_cooling_filter; } - bool IsCoolingFilerOn() const { return m_sub_mode == 0; } + bool IsCoolingFilerOn() const { return m_sub_mode == 1; } }; class DevFan diff --git a/src/slic3r/GUI/Widgets/FanControl.cpp b/src/slic3r/GUI/Widgets/FanControl.cpp index 9a1026473e..f0b180f255 100644 --- a/src/slic3r/GUI/Widgets/FanControl.cpp +++ b/src/slic3r/GUI/Widgets/FanControl.cpp @@ -357,7 +357,7 @@ FanControlNew::FanControlNew(wxWindow *parent, const AirDuctData &fan_data, int m_static_name = new wxStaticText(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END | wxALIGN_CENTER_HORIZONTAL); m_static_name->SetBackgroundColour(wxColour(248, 248, 248)); - m_static_name->SetFont(Label::Head_18); + m_static_name->SetFont(Label::Head_16); m_static_name->SetMinSize(wxSize(FromDIP(100), -1)); m_static_name->SetMaxSize(wxSize(FromDIP(100), -1)); @@ -692,8 +692,6 @@ void FanControlPopupNew::CreateDuct() 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)]; auto part_state = part.state; auto it = m_fan_control_list.find(part_id); @@ -731,7 +729,7 @@ void FanControlPopupNew::UpdateParts() for (const auto& part : m_data.parts) { auto part_id = part.id; - auto part_name = fan_func_name[AIR_FUN(part_id)]; + auto part_name = get_fan_func_name(m_data.curren_mode, m_data.m_sub_mode, AIR_FUN(part_id)); auto fan_control = m_fan_control_list[part_id]; if (!fan_control) @@ -774,7 +772,7 @@ void FanControlPopupNew::UpdatePartSubMode() if (msg_wingow.ShowModal() != wxID_OK) { return; } } - int submode = m_cooling_filter_switch_panel->IsSwitchOn() ? 0 : 1; + int submode = m_cooling_filter_switch_panel->IsSwitchOn() ? 1 : 0; command_control_air_duct(m_data.curren_mode, submode); }); @@ -827,8 +825,6 @@ void FanControlPopupNew::update_fan_data(const AirDuctData &data) m_data = data; 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)]; auto part_state = part.state; auto it = m_fan_control_list.find(part_id); @@ -845,9 +841,6 @@ void FanControlPopupNew::update_fan_data(AIR_FUN id, int speed) { for (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)]; - if (id == part_id) { part.state = speed; auto it = m_fan_control_list.find(part_id); @@ -979,14 +972,6 @@ void FanControlPopupNew::init_names(MachineObject* obj) { radio_btn_name[AIR_DUCT::AIR_DUCT_FULL_COOLING] = _L("Full Cooling"); radio_btn_name[AIR_DUCT::AIR_DUCT_INIT] = L("Init"); - fan_func_name[AIR_FUN::FAN_HEAT_BREAK_0_IDX] = _L("Hotend"); - fan_func_name[AIR_FUN::FAN_COOLING_0_AIRDOOR] = _L("Parts"); - fan_func_name[AIR_FUN::FAN_REMOTE_COOLING_0_IDX] = _L("Aux"); - 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("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");/*UNUSED*/ @@ -1007,15 +992,36 @@ void FanControlPopupNew::init_names(MachineObject* obj) { L("Cooling mode is suitable for printing PLA/PETG/TPU materials."); //some potential text, add i18n flags label_text[AIR_DUCT::AIR_DUCT_COOLING_FILT] = special_cooling_text; } - - const std::string& special_func_aux_text = DevPrinterConfigUtil::get_fan_text(obj->printer_type, "special_func_aux_text"); - if (!special_func_aux_text.empty()) { - L_CONTEXT("Right", "air_duct"); - fan_func_name[AIR_FUN::FAN_REMOTE_COOLING_0_IDX] = _CTX(special_func_aux_text, "air_duct"); - } } } +wxString FanControlPopupNew::get_fan_func_name(int mode, int submode, AIR_FUN func) const +{ + if (m_obj) + { + const std::string& func_text = DevPrinterConfigUtil::get_fan_text(m_obj->printer_type, mode, (int)func, submode); + if (!func_text.empty()) + { + L_CONTEXT("Right(Aux)", "air_duct"); + L_CONTEXT("Right(Filter)", "air_duct"); + return _CTX(func_text, "air_duct"); + } + } + + static std::map s_fan_func_name + { + { AIR_FUN::FAN_HEAT_BREAK_0_IDX, _L("Hotend") }, + { AIR_FUN::FAN_COOLING_0_AIRDOOR, _L("Parts") }, + { AIR_FUN::FAN_REMOTE_COOLING_0_IDX, _L("Aux") }, + { AIR_FUN::FAN_CHAMBER_0_IDX, _L("Exhaust") }, + { AIR_FUN::FAN_HEAT_BREAK_1_IDX, _L("Nozzle1") }, + { AIR_FUN::FAN_MC_BOARD_0_IDX, _L("MC Board") }, + { AIR_FUN::FAN_INNNER_LOOP_FAN_0_IDX, _L("Heat") }, + }; + + auto iter = s_fan_func_name.find(func); + return (iter != s_fan_func_name.end()) ? iter->second : wxString::Format(_L("Fan")); +} wxDEFINE_EVENT(EVT_FANCTRL_SWITCH, wxCommandEvent); FanControlNewSwitchPanel::FanControlNewSwitchPanel(wxWindow* parent, const wxString& title, const wxString& tips, bool on) diff --git a/src/slic3r/GUI/Widgets/FanControl.hpp b/src/slic3r/GUI/Widgets/FanControl.hpp index 53c0e2658d..fc29d22000 100644 --- a/src/slic3r/GUI/Widgets/FanControl.hpp +++ b/src/slic3r/GUI/Widgets/FanControl.hpp @@ -237,12 +237,12 @@ private: int m_fan_set_time_out{ 0 }; std::map radio_btn_name; - std::map fan_func_name; std::map air_door_func_name; std::map label_text; private: void init_names(MachineObject* obj); + wxString get_fan_func_name(int mode, int submode, AIR_FUN func) const; void CreateDuct();