Files
OrcaSlicer-KX/src
Felix Jen ec54dcedd0 Add unique filament_id for inherited user presets
When a user creates a new filament preset by inheriting from an
existing one (e.g., "Brand ABS @BBL H2D" inheriting from "Generic
ABS @BBL H2D"), the resulting preset previously had no filament_id
of its own. This caused two problems:

1. The AMS sync pipeline could not distinguish the user preset from
   its parent, so syncing filaments from the printer always resolved
   to the generic base preset instead of the user's custom one.

2. External tools that rely on filament_id for preset identification
   (e.g., Bambuddy, see maziggy/bambuddy#1053) could not assign or
   recognize user-created inherited presets in AMS slots.

The root cause was twofold:

- No filament_id was generated during save_current_preset() for
  inherited filament presets. Only base (non-inheriting) presets
  received one via the CreatePresetsDialog flow.

- The AMS matching logic in sync_ams_list(), get_ams_cobox_infos(),
  and get_filament_presets() filtered candidates with
  `get_preset_base(f) == &f`, which by definition excludes any
  preset with a non-empty inherits() field.

This commit:

- Generates a unique filament_id (MD5 hash of preset name, prefixed
  with "P", truncated to 8 chars) when creating a new filament
  preset in PresetCollection::save_current_preset(). This matches
  the existing ID generation scheme used for base filaments in
  CreatePresetsDialog::get_filament_id().

- Persists filament_id into the JSON when saving inherited presets
  via Preset::save() and get_differed_values_to_update().

- Broadens the AMS filament matching predicates to also consider
  user presets that carry their own filament_id, rather than
  requiring them to be base presets.

Files changed:
  src/libslic3r/Preset.cpp       - ID generation, save, lookup
  src/libslic3r/PresetBundle.cpp - AMS sync matching predicates
2026-06-10 22:17:05 +02:00
..
2026-04-06 23:05:54 +08:00