From 019fcf24239bf6a1114b1f9953445f37af2f9475 Mon Sep 17 00:00:00 2001 From: viewit Date: Tue, 9 Jun 2026 13:00:45 +0200 Subject: [PATCH] fix(preset): abgeleitete User-Presets bekommen eigene P-filament_id (Issue #52) save_current_preset() generierte eine P-ID nur bei leerem filament_id. Von Hersteller-Presets abgeleitete Presets erben aber dessen Vendor-ID (z.B. GFA001), wodurch sync_ams_list() auf das Vendor-Preset zurueckfiel statt das User-Preset zu waehlen. Bedingung an Preset::save() angeglichen: auch non-P IDs werden jetzt durch eine eigene P-ID ersetzt. Doku (DE/EN/ES) und Version auf 2.4.0-alpha-kx3 aktualisiert. Co-Authored-By: Claude Opus 4.8 --- docs/filament-preset-bridge-guide.md | 12 ++++++++++++ src/libslic3r/Preset.cpp | 2 +- version.inc | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/docs/filament-preset-bridge-guide.md b/docs/filament-preset-bridge-guide.md index 30862e2aab..c2933f7b33 100644 --- a/docs/filament-preset-bridge-guide.md +++ b/docs/filament-preset-bridge-guide.md @@ -13,6 +13,9 @@ Jedes Filament-Preset in OrcaSlicer hat eine interne `filament_id`. Diese ID wir Ohne eindeutige ID zeigt OrcaSlicer beim Sync immer "Generic PLA" — auch wenn das Preset existiert. +> **Achtung — abgeleitete Presets (Issue #52):** Wenn du dein Preset von einem **Hersteller-Preset** ableitest (z.B. "Anycubic PLA Matte"), übernimmt es zunächst die feste Hersteller-ID (z.B. `GFA001`). Beim Sync wird dann fälschlicherweise das Hersteller-Preset statt deines eigenen ausgewählt. +> Ab OrcaSlicer-KX **v2.4.0-alpha-kx3** wird beim Speichern automatisch eine eigene `P...`-ID vergeben — auch für abgeleitete Presets. Hast du das Preset mit einer älteren Version angelegt, **öffne es einmal und speichere es erneut** (Save), damit die `P`-ID generiert wird. + --- ## 1. Eigenes Filament-Preset anlegen @@ -110,6 +113,7 @@ Die Bridge sendet beim Sync `filament_name: "SUNLU PLA+ 2.0"` → OrcaSlicer fin | Preset muss für **Anycubic Kobra X 0.4 nozzle** kompatibel sein | Beim Speichern den richtigen Drucker auswählen | | Nach dem ersten Speichern OrcaSlicer **neu starten** | Erst dann wird die `filament_id` persistent geschrieben | | **OrcaSlicer-KX v2.4.0-alpha-kx2** oder neuer verwenden | Ältere Versionen generieren keine eindeutige `filament_id` für User-Presets | +| Bei von Hersteller-Presets abgeleiteten Presets: **v2.4.0-alpha-kx3** oder neuer | Erst ab dieser Version wird die geerbte Hersteller-ID beim Speichern durch eine eigene `P`-ID ersetzt (Issue #52) | --- --- @@ -129,6 +133,9 @@ Every filament preset in OrcaSlicer has an internal `filament_id`. The KX-Bridge Without a unique ID, OrcaSlicer will always show "Generic PLA" during sync — even if the preset exists. +> **Caution — derived presets (Issue #52):** If you derive your preset from a **vendor preset** (e.g. "Anycubic PLA Matte"), it initially inherits the fixed vendor ID (e.g. `GFA001`). During sync the vendor preset is then incorrectly selected instead of your own. +> As of OrcaSlicer-KX **v2.4.0-alpha-kx3**, a unique `P...` ID is generated automatically on save — including for derived presets. If you created the preset with an older version, **open it once and save it again** so the `P` ID gets generated. + --- ## 1. Create a Custom Filament Preset @@ -226,6 +233,7 @@ The bridge sends `filament_name: "SUNLU PLA+ 2.0"` during sync → OrcaSlicer ma | Preset must be compatible with **Anycubic Kobra X 0.4 nozzle** | Select the correct printer when saving | | **Restart OrcaSlicer** after saving for the first time | The `filament_id` is only written persistently after a restart | | Use **OrcaSlicer-KX v2.4.0-alpha-kx2** or newer | Older versions do not generate a unique `filament_id` for user presets | +| For presets derived from vendor presets: **v2.4.0-alpha-kx3** or newer | Only from this version is the inherited vendor ID replaced with a unique `P` ID on save (Issue #52) | --- --- @@ -245,6 +253,9 @@ Cada perfil de filamento en OrcaSlicer tiene un `filament_id` interno. KX-Bridge Sin un ID único, OrcaSlicer mostrará siempre "Generic PLA" durante la sincronización, aunque el perfil exista. +> **Atención — perfiles derivados (Issue #52):** Si derivas tu perfil de un **perfil de fabricante** (p. ej. "Anycubic PLA Matte"), inicialmente hereda el ID fijo del fabricante (p. ej. `GFA001`). Durante la sincronización se selecciona entonces por error el perfil del fabricante en lugar del tuyo. +> A partir de OrcaSlicer-KX **v2.4.0-alpha-kx3**, se genera automáticamente un ID `P...` único al guardar — también para perfiles derivados. Si creaste el perfil con una versión anterior, **ábrelo una vez y vuelve a guardarlo** (Save) para que se genere el ID `P`. + --- ## 1. Crear un perfil de filamento personalizado @@ -342,3 +353,4 @@ La bridge envía `filament_name: "SUNLU PLA+ 2.0"` durante la sincronización | El perfil debe ser compatible con **Anycubic Kobra X 0.4 nozzle** | Seleccionar la impresora correcta al guardar | | **Reiniciar OrcaSlicer** tras guardar por primera vez | El `filament_id` solo se escribe de forma permanente tras un reinicio | | Usar **OrcaSlicer-KX v2.4.0-alpha-kx2** o superior | Las versiones anteriores no generan un `filament_id` único para perfiles de usuario | +| Para perfiles derivados de perfiles de fabricante: **v2.4.0-alpha-kx3** o superior | Solo a partir de esta versión se reemplaza el ID heredado del fabricante por un ID `P` único al guardar (Issue #52) | diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index af3bfc05e1..5f4c6f9ba2 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -2852,7 +2852,7 @@ void PresetCollection::save_current_preset(const std::string &new_name, bool det 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()) { + if (preset.filament_id.empty() || preset.filament_id.front() != 'P') { boost::uuids::detail::md5 hash; boost::uuids::detail::md5::digest_type digest; hash.process_bytes(new_name.data(), new_name.size()); diff --git a/version.inc b/version.inc index d2f0fbe217..970274dc6f 100644 --- a/version.inc +++ b/version.inc @@ -7,7 +7,7 @@ set(SLIC3R_APP_KEY "OrcaSlicer") if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "0") endif() -set(SoftFever_VERSION "2.4.0-alpha-kx2") +set(SoftFever_VERSION "2.4.0-alpha-kx3") string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.([0-9]+)" SoftFever_VERSION_MATCH ${SoftFever_VERSION}) set(ORCA_VERSION_MAJOR ${CMAKE_MATCH_1})