diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index f567de42c..e8fc6185b 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -3173,7 +3173,7 @@ int MachineObject::parse_json(std::string payload, bool key_field_only) if (!key_field_only) { if (jj.contains("flag3")) { int flag3 = jj["flag3"].get(); - //is_support_filament_setting_inprinting = get_flag_bits(flag3, 3); + is_support_filament_setting_inprinting = get_flag_bits(flag3, 3); } } if (!key_field_only) { @@ -5203,6 +5203,26 @@ void MachineObject::update_filament_list() m_filament_list = filament_list; } +int MachineObject::get_flag_bits(std::string str, int start, int count) +{ + int decimal_value = std::stoi(str, nullptr, 16); + int mask = 0; + for (int i = 0; i < count; i++) { mask += 1 << (start + i); } + + int flag = (decimal_value & (mask)) >> start; + return flag; +} + +int MachineObject::get_flag_bits(int num, int start, int count) +{ + int decimal_value = num; + int mask = 0; + for (int i = 0; i < count; i++) { mask += 1 << (start + i); } + + int flag = (decimal_value & (mask)) >> start; + return flag; +} + void MachineObject::update_printer_preset_name(const std::string &nozzle_diameter_str) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << __LINE__ << "start update preset_name"; diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index e1ce2974a..cdf6f024d 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -980,6 +980,8 @@ public: std::string m_printer_preset_name; std::map> m_filament_list; // filament_id, pair void update_filament_list(); + int get_flag_bits(std::string str, int start, int count); + int get_flag_bits(int num, int start, int count); void update_printer_preset_name(const std::string &nozzle_diameter_str); };