From d83581ef749a3d5c7e8c350f89c31826b15652c4 Mon Sep 17 00:00:00 2001 From: igiannakas Date: Sun, 17 Nov 2024 20:21:42 +0000 Subject: [PATCH] Integrate external purge estimates to the filament consumption UI --- src/libslic3r/GCode/GCodeProcessor.cpp | 20 ++++++++++++++++++++ src/libslic3r/GCode/GCodeProcessor.hpp | 1 + 2 files changed, 21 insertions(+) diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index 757939637ed..f1bae32ebc7 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -98,6 +98,8 @@ const std::vector GCodeProcessor::Reserved_Tags_compatible = { const std::string GCodeProcessor::Flush_Start_Tag = " FLUSH_START"; const std::string GCodeProcessor::Flush_End_Tag = " FLUSH_END"; +//Orca: External device purge tag +const std::string GCodeProcessor::External_Purge_Tag = " EXTERNAL_PURGE"; const float GCodeProcessor::Wipe_Width = 0.05f; const float GCodeProcessor::Wipe_Height = 0.05f; @@ -2289,6 +2291,24 @@ void GCodeProcessor::process_tags(const std::string_view comment, bool producers m_flushing = false; return; } + + // Orca: Integrate filament consumption for purging performed to an external device and controlled via macros + // (eg. Happy Hare) in the filament consumption stats. + if (boost::starts_with(comment, GCodeProcessor::External_Purge_Tag)) { + std::regex numberRegex(R"(\d+\.\d+)"); + std::smatch match; + std::string line(comment); + if (std::regex_search(line, match, numberRegex)) { + float filament_diameter = (static_cast(m_extruder_id) < m_result.filament_diameters.size()) ? m_result.filament_diameters[m_extruder_id] : m_result.filament_diameters.back(); + float filament_radius = 0.5f * filament_diameter; + float area_filament_cross_section = static_cast(M_PI) * sqr(filament_radius); + + float dE = std::stof(match.str()); + float volume_extruded_filament = area_filament_cross_section * dE; + m_used_filaments.update_flush_per_filament(m_extruder_id, volume_extruded_filament); + } + return; + } if (!producers_enabled || m_producer == EProducer::OrcaSlicer) { // height tag diff --git a/src/libslic3r/GCode/GCodeProcessor.hpp b/src/libslic3r/GCode/GCodeProcessor.hpp index 21403cc2053..e7b6e6f8833 100644 --- a/src/libslic3r/GCode/GCodeProcessor.hpp +++ b/src/libslic3r/GCode/GCodeProcessor.hpp @@ -272,6 +272,7 @@ class Print; static const std::vector Reserved_Tags_compatible; static const std::string Flush_Start_Tag; static const std::string Flush_End_Tag; + static const std::string External_Purge_Tag; public: enum class ETags : unsigned char {