From bb43e312b3c22217d4c71d2e1f46e4f4715d4f18 Mon Sep 17 00:00:00 2001 From: hemai Date: Fri, 8 Aug 2025 15:29:45 +0800 Subject: [PATCH] ENH: support E3D nozzle flow type Jira: [STUDIO-13934] Change-Id: I3818c3881e8a926209f2bac321550f3c7a1a9f0d (cherry picked from commit 5bb1c2e66ad5bddfcba6898d9bc330217e912e48) --- src/slic3r/GUI/DeviceCore/DevNozzleSystem.cpp | 12 ++++++++++++ src/slic3r/GUI/DeviceCore/DevNozzleSystem.h | 4 ++-- src/slic3r/GUI/DeviceManager.cpp | 9 ++++++++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/DeviceCore/DevNozzleSystem.cpp b/src/slic3r/GUI/DeviceCore/DevNozzleSystem.cpp index 30305df992..53e1455aef 100644 --- a/src/slic3r/GUI/DeviceCore/DevNozzleSystem.cpp +++ b/src/slic3r/GUI/DeviceCore/DevNozzleSystem.cpp @@ -62,6 +62,7 @@ static void s_parse_nozzle_type(const std::string& nozzle_type_str, DevNozzle& n void DevNozzleSystemParser::ParseV1_0(const nlohmann::json& nozzletype_json, const nlohmann::json& diameter_json, + const int& nozzle_flow_type, DevNozzleSystem* system) { //Since both the old and new protocols push data. @@ -98,6 +99,17 @@ void DevNozzleSystemParser::ParseV1_0(const nlohmann::json& nozzletype_json, } } + { + if (nozzle_flow_type != -1) { + // 0: BBL S_FLOW; 1:E3D H_FLOW (only P) + if (nozzle_flow_type == 1) { + nozzle.m_nozzle_flow = NozzleFlowType::H_FLOW; + } else { + nozzle.m_nozzle_flow = NozzleFlowType::S_FLOW; + } + } + } + system->m_nozzles[nozzle.m_nozzle_id] = nozzle; } diff --git a/src/slic3r/GUI/DeviceCore/DevNozzleSystem.h b/src/slic3r/GUI/DeviceCore/DevNozzleSystem.h index d6d7ed9db4..93b3928461 100644 --- a/src/slic3r/GUI/DeviceCore/DevNozzleSystem.h +++ b/src/slic3r/GUI/DeviceCore/DevNozzleSystem.h @@ -17,7 +17,7 @@ namespace Slic3r NozzleType m_nozzle_type = NozzleType::ntUndefine;// 0-stainless_steel 1-hardened_steel 5-tungsten_carbide float m_diameter = 0.4f;// 0.2mm 0.4mm 0.6mm 0.8mm }; - + class DevNozzleSystem { friend class DevNozzleSystemParser; @@ -44,7 +44,7 @@ namespace Slic3r class DevNozzleSystemParser { public: - static void ParseV1_0(const nlohmann::json& nozzletype_json, const nlohmann::json& diameter_json, DevNozzleSystem* system); + static void ParseV1_0(const nlohmann::json& nozzletype_json, const nlohmann::json& diameter_json, const int& nozzle_flow_type, DevNozzleSystem* system); static void ParseV2_0(const json& nozzle_json, DevNozzleSystem* system); }; }; \ No newline at end of file diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index e2d941916f..40a807eccd 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -3272,7 +3272,14 @@ int MachineObject::parse_json(std::string tunnel, std::string payload, bool key_ if (jj.contains("nozzle_diameter") && jj.contains("nozzle_type")) { - DevNozzleSystemParser::ParseV1_0(jj["nozzle_type"], jj["nozzle_diameter"], m_nozzle_system); + int nozzle_flow_type = -1; + + if(jj.contains("flag3")){ + int flag3 = jj["flag3"].get(); + nozzle_flow_type = get_flag_bits(flag3, 10, 3); + } + + DevNozzleSystemParser::ParseV1_0(jj["nozzle_type"], jj["nozzle_diameter"], nozzle_flow_type, m_nozzle_system); } }