From db0cb854a13bec4f9cd977e3c218d6aaff9d204b Mon Sep 17 00:00:00 2001 From: Morton Jonuschat Date: Mon, 6 Jan 2025 19:54:05 -0800 Subject: [PATCH] [FEATURE] Add bed/plate number to output filename Make the bed/plate number available as an output filaname placeholder. --- src/libslic3r/GCode.cpp | 3 +++ src/libslic3r/Print.cpp | 10 ++++++++++ src/libslic3r/Print.hpp | 2 ++ 3 files changed, 15 insertions(+) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 6de1a5db198..962287b2a62 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -1178,6 +1178,9 @@ void GCodeGenerator::_do_export(Print& print, GCodeOutputStream &file, Thumbnail this->placeholder_parser().set("has_wipe_tower", has_wipe_tower); this->placeholder_parser().set("has_single_extruder_multi_material_priming", has_wipe_tower && print.config().single_extruder_multi_material_priming); this->placeholder_parser().set("total_toolchanges", tool_ordering.toolchanges_count()); + + this->placeholder_parser().set("bed_number", new ConfigOptionString(print.get_bed_number_formatted())); + { BoundingBoxf bbox(print.config().bed_shape.values); assert(bbox.defined); diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 65fcf31d308..4cbad48d723 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -36,6 +36,7 @@ #include "libslic3r/GCode/ConflictChecker.hpp" #include "Utils.hpp" #include "BuildVolume.hpp" +#include "MultipleBeds.hpp" #include "format.hpp" #include @@ -1666,6 +1667,7 @@ std::string Print::output_filename(const std::string &filename_base) const DynamicConfig config = this->finished() ? this->print_statistics().config() : this->print_statistics().placeholders(); config.set_key_value("num_extruders", new ConfigOptionInt((int)m_config.nozzle_diameter.size())); config.set_key_value("default_output_extension", new ConfigOptionString(".gcode")); + config.set_key_value("bed_number", new ConfigOptionString(get_bed_number_formatted())); // Handle output_filename_format. There is a hack related to binary G-codes: gcode / bgcode substitution. std::string output_filename_format = m_config.output_filename_format.value; @@ -1677,6 +1679,14 @@ std::string Print::output_filename(const std::string &filename_base) const return this->PrintBase::output_filename(output_filename_format, ".gcode", filename_base, &config); } +std::string Print::get_bed_number_formatted() const +{ + std::string bed_number = std::to_string(s_multiple_beds.get_active_bed() + 1); + static const size_t n_zero = 2; + + return std::string(n_zero - std::min(n_zero, bed_number.length()), '0') + bed_number; +} + // Returns if all used filaments have same shrinkage compensations. bool Print::has_same_shrinkage_compensations() const { const std::vector extruders = this->extruders(); diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp index c1efc635983..f29cbee83ac 100644 --- a/src/libslic3r/Print.hpp +++ b/src/libslic3r/Print.hpp @@ -684,6 +684,8 @@ class Print : public PrintBaseWithState std::string output_filename(const std::string &filename_base = std::string()) const override; + std::string get_bed_number_formatted() const; + size_t num_print_regions() const throw() { return m_print_regions.size(); } const PrintRegion& get_print_region(size_t idx) const { return *m_print_regions[idx]; } const ToolOrdering& get_tool_ordering() const { return m_wipe_tower_data.tool_ordering; }