From c4a18fc0ac542b9cd1793566c59ddbde32d2b8f1 Mon Sep 17 00:00:00 2001 From: viewit Date: Tue, 2 Jun 2026 14:37:37 +0200 Subject: [PATCH] =?UTF-8?q?fix(preset):=20filament=5Fid=20f=C3=BCr=20User-?= =?UTF-8?q?Presets=20beim=20Speichern=20generieren=20(PR=20#13315=20portie?= =?UTF-8?q?rt)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wenn ein Filament-User-Preset noch keine filament_id hat, wird beim Speichern/Umbenennen automatisch eine MD5-basierte ID (P + 7 Zeichen) generiert. Damit kann der Moonraker-Filament-Matcher das Preset korrekt einem Slot zuordnen statt auf Generic PLA zurückzufallen. --- src/libslic3r/Preset.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index cd58e90e974..61463dd81f9 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -41,6 +41,8 @@ #include #include #include +#include +#include #include "libslic3r.h" #include "Utils.hpp" @@ -2817,8 +2819,20 @@ void PresetCollection::save_current_preset(const std::string &new_name, bool det if (m_type == Preset::TYPE_PRINT) preset.config.option("print_settings_id", true)->value = new_name; - else if (m_type == Preset::TYPE_FILAMENT) + else if (m_type == Preset::TYPE_FILAMENT) { preset.config.option("filament_settings_id", true)->values[0] = new_name; + // Generate a unique filament_id for user presets that don't have one yet (PR #13315). + if (preset.filament_id.empty()) { + boost::uuids::detail::md5 hash; + boost::uuids::detail::md5::digest_type digest; + hash.process_bytes(new_name.data(), new_name.size()); + hash.get_digest(digest); + const auto char_digest = reinterpret_cast(&digest); + std::string result; + boost::algorithm::hex(char_digest, char_digest + sizeof(boost::uuids::detail::md5::digest_type), std::back_inserter(result)); + preset.filament_id = "P" + result.substr(0, 7); + } + } else if (m_type == Preset::TYPE_PRINTER) preset.config.option("printer_settings_id", true)->value = new_name; final_inherits = preset.inherits();