Commit Graph

29730 Commits

Author SHA1 Message Date
fceb087be1 fix(build): resolve Point/Point3 Eigen size mismatches in GCode.cpp 2026-07-21 21:46:01 +02:00
6536e18423 fix(build): Polyline3/Line3 conversions in GCode.cpp wipe+gradient, add sparse_infill_filament config 2026-07-21 21:38:55 +02:00
c73261ca6b fix(build): restore ImageMap GCode.hpp, merge ZAA by-value/skirt signatures 2026-07-21 21:33:24 +02:00
2405572fee fix(build): add missing wall_filament/sparse_infill_filament/solid_infill_filament declarations to LayerTools 2026-07-21 21:27:14 +02:00
6eb4f7c321 fix(build): replace ImageMap GCode.hpp with ZAA version, fix GCode.cpp type conflicts 2026-07-21 15:40:30 +02:00
e15298249a fix(build): convert Point3 lerp results and polyline points to Point in Fill.cpp 2026-07-21 15:31:48 +02:00
f81987e6cc fix(build): add Polyline3::is_closed() and fix Point3 reference in Fill.cpp 2026-07-21 15:24:35 +02:00
6d14497ddc fix(build): add missing ImageMap config fields and fix Polyline3 assignments in Fill.cpp
PrintConfig.hpp: add wall_filament and solid_infill_filament config fields
that ImageMap's Fill.cpp uses for texture zone filament assignment.

Fill.cpp: wrap 2D Polyline in Polyline3() constructor where ExtrusionPath::polyline
(now Polyline3 from ZAA) is assigned from locally created 2D paths.
Fix boundary-skin helper functions to accept Polyline3 instead of Polyline.
Use to_points() to convert Points3 to Points for Polygon constructor.
2026-07-21 15:20:42 +02:00
dbbb28d365 fix(build): wrap 2D Polyline assignments in Polyline3() for ZAA-extended ExtrusionPath
ExtrusionPath::polyline is now Polyline3 (from ZAA commit). Direct assignment
of Polyline{...} (2D) fails. Use Polyline3(Polyline{...}) constructor which
embeds 2D points at z=0.
2026-07-21 15:13:49 +02:00
22637721a5 fix(build): replace ImageMap ExtrusionEntity.hpp with ZAA-compatible version
The merge took the ImageMap version of ExtrusionEntity.hpp (2D Polyline)
but the ZAA version of ExtrusionEntity.cpp (expects Polyline3, z_contoured,
first_point3, etc.). Replace the header with the post-ZAA version from
commit 95736445a4 so .hpp and .cpp are consistent. Update
ExtrusionEntityCollection to return Point by value matching the new
virtual signature. Also sync ExtrusionSimulator.cpp from ZAA commit.
2026-07-21 15:11:54 +02:00
8b805d8cc9 fix(build): revert CutUtils to v2.4.2 — ImageMap texture-remap additions broke signatures
The ImageMap fork removed src_object from perform_by_contour and saved_paintings
from finalize, making the .cpp incompatible with the v2.4.2 header. Reset both
files to v2.4.2 baseline; texture remapping on cut is an ImageMap-only feature
not yet ported.
2026-07-21 15:00:48 +02:00
7b554e1f50 fix(build): fix remaining ImageMap merge type conflicts
- ExtrusionEntityCollection: first/last_point() must return const Point&
  to match the virtual signature in ExtrusionEntity base class
- AppConfig: remove ImageMap-specific VERSION_CHECK_URL_LEGACY,
  VERSION_CHECK_MODE, VERSION_DOWNLOAD_URL constants; simplify methods
  to use our single Gitea URL
- ExtrusionProcessor: restore dimension-bridging in maybe_unscale lambda
  so 2D polyline points work with the 3D (Linef3) boundary distancer
  used in the ZAA overhang slowdown path
2026-07-21 14:54:25 +02:00
4622a0d882 fix(build): remove ImageMap-specific Point3/Polyline3 types incompatible with v2.4.2
ExtrusionEntityCollection.hpp had first_point3()/last_point3() overrides
that reference Point3 and methods not present in the v2.4.2 ExtrusionEntity
base class. Print.hpp used Polyline3() wrappers where plain Polyline is
the correct type. Both are leftovers from the ImageMap fork's 3D geometry
extension that did not merge cleanly.
2026-07-21 14:48:30 +02:00
1f5a76df74 fix(build): ensure Eigen3::Eigen target exists before deps_src configuration
In static builds find_package(Eigen3) is skipped, leaving Eigen3::Eigen
undefined when admesh and clipper try to link against it. Add an
unconditional find_package(Eigen3 CONFIG QUIET) guard in the main
CMakeLists before add_subdirectory(deps_src). deps_src/eigen now simply
provides the unnamespaced alias and fatals clearly if the target is missing.
2026-07-21 14:34:53 +02:00
0f1e69110f fix(build): resolve Eigen3::Eigen via CMAKE_PREFIX_PATH fallback
find_package(Eigen3 CONFIG) may not work in static builds where
find_package is skipped globally. As fallback, manually create the
Eigen3::Eigen IMPORTED target pointing to the eigen3 headers installed
by deps/ (under CMAKE_PREFIX_PATH/include/eigen3). This ensures libigl
and admesh always get a modern Eigen (5.x) with Eigen::all support.
2026-07-21 14:33:28 +02:00
563ade1276 fix(build): use pre-built Eigen3 from deps/ instead of bundled 3.3.7
deps_src/eigen contained Eigen 3.3.7 from the ImageMap fork, which
predates the Eigen::all placeholder (requires Eigen 3.4+). libigl in
deps_src uses Eigen::all, causing build failures. Switch to find_package
so the Eigen3::Eigen target resolves to the Eigen 5.0.1 installed by
deps/ CMakeLists via CMAKE_PREFIX_PATH.
2026-07-21 14:30:48 +02:00
5abd88de31 fix(build): add Eigen3::Eigen alias for CMake target compatibility 2026-07-21 14:24:00 +02:00
d8be383669 fix(build): add missing deps_src/eigen from ImageMap fork 2026-07-21 14:19:17 +02:00
ed7fd34cfc fix(profile): Kobra X bed_temperature_formula auf by_first_filament setzen
G9111 hat während des Auto-Levelings auf den höchsten Bett-Temp-Wert
aller Projekt-Filamente geheizt statt auf die Temp des aktiven Filaments.
Fixes #4 (OrcaSlicer-KX), related KX-Bridge-Release#96.
2026-07-21 14:03:43 +02:00
b200a85a20 fix(branding): KX-Logo in allen UI-Dialogen korrekt anzeigen
- Splash: SVG durch direktes PNG-Laden ersetzt (nanosvg rendert kein
  eingebettetes Raster-PNG)
- About-Dialog: Logo auf 125px skaliert statt unkontrolliert 192px
- TroubleshootDialog, UpdateDialogs, ReleaseNote, MsgDialog:
  OrcaSlicer.svg → OrcaSlicer_192px.png (bereits KX-Logo)
2026-07-21 14:03:39 +02:00
392741b6ac feat(updater): Versionsprüfung auf Gitea OrcaSlicer-KX Releases umleiten
Ersetzt die orcaslicer.com/latest URL durch die Gitea API:
  https://gitea.it-drui.de/api/v1/repos/viewit/OrcaSlicer-KX/releases/latest

Das Gitea-JSON hat dasselbe Format wie GitHub (tag_name, html_url,
prerelease) — der bestehende Parser in check_new_version_sf() funktioniert
ohne weitere Änderungen. Telemetrie-Query-Parameter und Upstream-Signaturen
werden nicht mehr angehängt.
2026-07-21 14:03:34 +02:00
d9051009a5 fix(branding): About-Dialog lädt KX-Logo als PNG statt SVG
nanosvg unterstützt keine eingebetteten Rasterbilder (data:image/png).
Direkt OrcaSlicer_192px.png laden — bereits durch das KX-Logo ersetzt.
2026-07-21 14:03:14 +02:00
0df211a900 feat(branding): OrcaKX-Logo als App-Icon und About/Splash-Logo einsetzen
Ersetzt alle OrcaSlicer-Logos durch das Orca-KX Fork-Logo (Kobra + Orca).
Betrifft: PNG-Icons (32/64/128/154/192px), Windows .ico, macOS .icns,
About-Dialog SVGs (light + dark) und Splash-Screen SVGs.
2026-07-21 14:03:14 +02:00
055b5ff086 fix(compat): add aliases for wall_filament → outer_wall_filament_id; fix verify_build.sh
Adds .aliases = { "wall_filament", "wall_filament_id", "outer_wall_filament",
"perimeter_extruder" } to outer_wall_filament_id and .aliases = { "inner_wall_filament" }
to inner_wall_filament_id in PrintConfig.cpp so that old .3mf files using these legacy
keys do not throw UnknownOptionException on load.

Also corrects verify_build.sh CHECKS to search for "tray_sub_brands" (the actual binary
string) instead of the stale "filament_sub_brands".
2026-07-21 14:02:58 +02:00
b7f6c5b1cd fix(preset): Legacy-Aliases durch korrekte _id-Keys in s_Preset_print_options ersetzen
wall_filament, sparse_infill_filament, solid_infill_filament waren
unregistrierte Legacy-Aliases die beim Start UnknownOptionException
in apply_only() verursachten. Durch die korrekten registrierten Keys
(outer/inner_wall_filament_id, sparse/internal_solid/top/bottom_surface
_filament_id) ersetzt. Ausserdem fehlende Upstream-2.4.0-Keys ergaenzt:
lightning_*, bridge_line_width, relative_bridge_angle,
support_parallel_printheads, parallel_printheads_*, flashforge_serial_number.
2026-07-21 14:02:54 +02:00
93b3c05278 fix(ams): exclude empty placeholder slots from AMS filament mapping
Empty AMS slots (is_tray_info_ready()==false) were included in
tray_filaments with id=0. The distance-map then stored tray_id=0 for
those slots, causing the greedy mapper to assign real project filaments
to the placeholder entry instead of their actual physical slot. On a
6-slot ACS/ACE with Slot 1 empty this shifted all mapped filaments by
one position.

Fix: skip any tray that is not ready (no color/type) before calling
_parse_tray_info() so only loaded slots enter the mapping pool.

Also keep index-alignment in get_ams_cobox_infos(): empty AMS entries
(filament_id empty) now push placeholder strings instead of being
silently skipped. This prevents the Overwriting-mode tab from accessing
m_ams_combo_info.ams_filament_colors at a shifted index, which caused
an out-of-bounds read and subsequent crash when switching sync modes
while a placeholder slot was present.

Fixes KX-Bridge-Release issue #67 comment #480 (slot-index shift +
Overwriting crash).
2026-07-21 14:02:32 +02:00
fc289241d9 fix(moonraker): re-resolve host on user→user preset switch for AMS sync
Two Moonraker user presets on different ports (:7125, :7126) share the
same printer agent type. switch_printer_agent() only called select_machine()
when the agent *type* changed — not when the host changed within the same
agent. A user→user preset switch therefore left the MachineObject pointing
at the first connected printer, causing AMS sync to always query the wrong
host.

Fix: when the agent type stays the same (and is not the BBL agent),
also call select_machine() so the host is re-resolved from the current
preset and set_selected_machine() reconnects to the correct Moonraker
instance.

Fixes: AMS Sync locked to first printer in multi-printer sessions (SirPeroples)
2026-07-21 14:02:31 +02:00
0971ed4ca8 feat(experimental): merge OrcaSlicer-ImageMap fork (texture/image printing)
Merges sentientstardust-dev/OrcaSlicer-ImageMap onto v2.4.2 base.
Includes CMYK texture mapping, side-surface image printing, OBJ/GLTF
texture import, image projection, and prime tower image rendering.

ImageMap base: OrcaSlicer commit 2026-04-26 (between v2.4.1 and v2.4.2)
KX-specific patches (Moonraker/AMS, updater, profile) to be applied on top.

EXPERIMENTAL — not for production use.
2026-07-21 14:02:25 +02:00
8500fcdcca Fix version was not properly updated on non windows OS (#14617)
Fixed an issue where on non-Windows systems, the version was not properly written to the appconfig.
2026-07-06 22:18:06 +08:00
c95887a93f one time bump microsoft appstore version to 2.4.3 2026-07-06 17:37:47 +08:00
d3405cf461 bump version to 2.4.2 2026-07-06 12:31:54 +08:00
a524ec7dde Fixes invalid inherits/compatible_printers/compatible_prints references that point at a deleted or renamed preset. (#14595)
* fix profile reference for Creality

* fix profile reference for Blocks

* fix profile reference for OrcaArena

* fix profile reference for re3D

* fix profile reference for Chuanying

* fix profile reference for Prusa

* fix profile reference for Wanhao France

* fix profile reference for MagicMaker

* fix profile reference for Afinia

Remove the ABS/ABS+/PLA/TPU/Value ABS/Value PLA filament presets that referenced the non-existent "Afinia H400 Pro" printer. The real printer is "Afinia H+1(HS)", already served by the @HS filament variants.

* fix profile reference for Comgrow

Remove the orphaned "0.20mm Standard @Comgrow T500 1.0" process preset and its process_list entry. Its only compatible printer "Comgrow T500 1.0 nozzle" never existed (the T500 model defines nozzle diameters 0.4/0.6/0.8 only).

* always run check_preset_references
2026-07-06 12:31:54 +08:00
55d0108cd3 Show preset name in cloud sync conflict and error messages (#14592)
The 409 conflict notification, the force-push confirmation dialog, and the payload-too-large (413) dialog now name the affected preset. The name was already parsed from the conflict body but never surfaced. The account-level preset-limit message stays generic since it isn't about one specific preset.
2026-07-06 12:27:47 +08:00
d91972e576 Fix reload from disk for STEP models after reopening a project (#12992) (#14591)
* Fix reload from disk for STEP models after reopening a project (#12992)

reload_from_disk matched reloaded source volumes with an exact
source.input_file string comparison. After a project is saved and
reopened, the stored source path is only the filename (the default,
non-full-path save) while a freshly re-imported volume carries a full
path, so the comparison never matched: reload fell into fail_list and
the "locate file" dialog was effectively useless for STEP models.

Fall back to a case-insensitive filename comparison when the exact
paths differ, so the existing same-folder source lookup (and the
locate dialog) can reload the model. Projects that stored absolute
source paths still match exactly as before; no 3mf format change.

* Add Preferences option to store full source paths in projects

Expose the existing export_sources_full_pathnames setting (previously
only editable in the config file) as a checkbox under Preferences >
General > Project. Enabling it stores absolute source paths in saved
projects, so "Reload from disk" works when the source file is kept in
a different folder than the project (companion to #12992).
2026-07-06 12:27:47 +08:00
ccf28f394b Adding the add:north filament profiles to OrcaFilamentLibrary (#13366)
* Adding add:north filament profiles to OrcaFilamentLibrary

* addnorth filament profiles: moving the files to the BBL folder

* addnorth filament profiles: fixing filenames and setting ids

* addnorth filament profiles: updated settings (baseed on 26-06-2026 version)

* addnorth filament profiles: removed unsupported printers

* bump version

---------

Co-authored-by: SoftFever <softfeverever@gmail.com>
2026-07-06 12:27:47 +08:00
6888f9d806 fix: use scalar config accessors in PA calibration for release/v2.4
#14447 backported main's array-based calib.hpp accessors, which call
DynamicPrintConfig::get_abs_value_at() — a coFloats/coFloatsOrPercents-only
method that does not exist on release/v2.4. Here outer_wall_speed,
outer_wall_acceleration and initial_layer_speed are still scalar coFloat,
so the method is undefined and, if backported, would throw at runtime on
these scalar options. This broke the build (calib.hpp is included widely
via AppConfig.hpp).

Revert speed_first_layer/speed_perimeter/accel_perimeter to the scalar
option<ConfigOptionFloat>()->value form used before #14447. The actual
#14447 crash fix (line_width_first_layer zero-width fallback in calib.cpp)
is unaffected.
2026-07-06 12:27:47 +08:00
07a87b4129 fix gcode time estimiation error (#14573)
fix gcode estimiation error
2026-07-06 12:27:47 +08:00
23555f8df2 Preserve disabled filament overrides (nil) through cloud sync (#14550) 2026-07-06 12:27:47 +08:00
116658de29 fix: add logging for refresh token flow and use local os keychain as source of truth. (#14531) 2026-07-06 12:27:47 +08:00
a8f2fea5e2 fix: crash in Measure tool when a plain edge is the first selection (#14538)
* fix: crash in Measure tool when a plain edge is the first selection

The SPHERE_2 gripper raycaster called get_feature_offset() on
.first.feature instead of .second.feature (copy-pasted from the SPHERE_1
block). Plain planar-border edges store no extra point, so the Edge
branch dereferenced an empty optional behind a release-stripped assert,
aborting on Flatpak and undefined behavior elsewhere.

Point the SPHERE_2 raycaster at .second.feature and fall the Edge branch
back to the edge midpoint.

Fixes #14018
2026-07-06 12:27:47 +08:00
7c80ea1fc1 feat: add {first_object_name} filename placeholder (#14497)
{input_filename_base} is meant to be the saved project's file name. Before
saved; #13753 fixed it to use the project name. Some users relied on the old
behavior to get the part name into their output file name and had no
placeholder to recover it ({model_name} is the 3mf designer metadata, blank
for plain STL imports).

Add {first_object_name} as a dedicated placeholder for the first printable
object on the current plate, populated in update_object_placeholders()
independently of {input_filename_base}.

Closes #14493
2026-07-06 12:27:47 +08:00
b5d46a3e7c fix: crash when rotating the prime tower (#14499)
Selecting the prime tower and rotating it (PageUp/PageDown) crashed.
Selection::notify_instance_update() indexed m_model->objects with the
wipe tower's synthetic id (>= 1000), which is not a ModelObject index,
so the lookup returned garbage and dereferencing it segfaulted.

do_rotate/do_scale/do_mirror already skip the wipe tower in their own
loops but all call this shared helper, so scale and mirror hit the same
fault. Selection::drop() had the same latent bug via a direct index.
Guard both with the >= 1000 check already used throughout the file.

Fixes #14498
2026-07-06 12:27:47 +08:00
fa0a08d8f3 Support accessing coFloatsOrPercents values in gcode template (#14526)
* Support accessing `coFloatsOrPercents` values in gcode template (OrcaSlicer/OrcaSlicer#14522)

* Vector option values are separated by comma

* Fix wrong cast used for checking nullability
2026-07-06 12:27:47 +08:00
a38d9ccb21 Fix "plug-in file may be in use" install failure when migrating from older versions (#14373) (#14528)
Fix network plug-in install failing when the plug-in DLL is in use (#14373)

Switching or reinstalling the Bambu network plug-in from a running
OrcaSlicer failed with "The plug-in file may be in use". install_plugin()
deleted each existing file before extracting the new one, and on Windows a
currently-loaded DLL (BambuSource.dll, or the legacy networking library)
cannot be removed or overwritten in place, so the whole install aborted.

Rename an in-use file aside to "<name>.old" before writing the new one: the
running module keeps mapping the renamed file while the new version is
extracted, so the install succeeds without having to unload the plug-in
first. Stale ".old" files are cleaned up at the start of on_init_network(),
before the plug-in is (re)loaded, so they do not accumulate.
2026-07-06 12:27:47 +08:00
92ea1ce57e Feat/update preset validator (#14507)
# Description

This PR expands profile validation so we can catch backward
compatibility issues with custom presets generated by older OrcaSlicer
releases. It also adds missing `renamed_from` metadata for presets that
were renamed or moved, so older user presets can resolve their original
parent names against the current system profiles.

## Background

Many users have reported missing preset issues after upgrading past
2.4.1. Investigation showed two common causes:

- preset lookup and compatibility checks did not always account for
`renamed_from`
- some renamed base presets were missing the old preset name in their
`renamed_from` metadata

The existing profile workflow validates the current system profile tree
and a single nightly-generated custom preset bundle. That is useful for
catching current profile errors, but it does not validate user presets
generated by older OrcaSlicer versions against the current system
profiles. As a result, older missing-parent compatibility gaps can slip
through.

## Changes

- Update `check_profiles.yml` to validate historical custom preset
fixtures from `OrcaSlicer/OrcaSlicer-profile-validator`.
- Download the fixture manifest from the public `fixture-archive`
release.
- Validate each `orca_custom_presets_<version>.zip` fixture
independently against the current PR's `resources/profiles`.
- Generate per-version validation logs and upload them as workflow
artifacts.
- Fail profile validation if any historical fixture version fails.
- Add missing `renamed_from` aliases for renamed/moved presets found by
the historical fixture validation.

## Profile Compatibility Fixes

This PR adds aliases for older parent names including:

- `0.20mm Bambu Support W @BBL X1C` -> `0.20mm Standard @BBL X1C`
- `Bambu PLA Impact @BBL X1C` -> `Bambu PLA Impact @System`
- `Ginger Generic rPLA` -> `Ginger Generic PLA`
- `Ginger Generic rPETG` -> `Ginger Generic PETG`
- legacy `Panchroma PLA Stain` BBL filament names -> current `Panchroma
PLA Satin` names
- legacy Elegoo casing/name variants such as `Elegoo RAPID PLA+`,
`Elegoo RAPID PETG`, `Elegoo RAPID PETG+`, and `Elegoo PETG Pro @System`

## Validation Flow

The custom preset validation step now:

1. Downloads `manifest.json` from the `fixture-archive` release.
2. Iterates over every fixture listed in the manifest.
3. Copies the current branch's `resources/profiles` into a temporary
profile tree.
4. Removes any existing `user` directory from that temporary tree.
5. Unzips exactly one historical fixture into the temporary tree.
6. Runs `OrcaSlicer_profile_validator -p <temp profile tree> -l 2`.
7. Writes a version-specific log and a consolidated summary.

This keeps validation scoped per fixture version and avoids mixing
generated user presets from different OrcaSlicer releases.

## Fixture Source

Historical fixtures are stored as public release assets in:

`OrcaSlicer/OrcaSlicer-profile-validator`, release tag `fixture-archive`

Each release asset is expected to be named like:

```text
orca_custom_presets_v2.4.1.zip
```

## Testing

Validated locally with:

- current system profile validation
- BBL filament subtype validation
- historical custom preset fixture validation
- extra profile JSON check in a clean profile tree

The affected historical fixture set passed after adding the missing
`renamed_from` aliases.

The release manifest controls which fixture versions are validated.
[How to Download Pull Requests Artifacts for
Testing](https://www.orcaslicer.com/wiki/how_to_download_pr_artifacts)
2026-07-06 12:27:47 +08:00
2c029402d7 fix build errors 2026-07-06 12:27:46 +08:00
f8dc94ab7f Fix issue that Orca keeps asking for re-install Bambu network plugin (#14511)
# Description

There is a bug that if user used to use legacy plugin, the
`NetworkAgent::use_legacy_network` will not be properly reset after user
install a newer plugin version through the plugin update dialog (ie, not
from selecting a plugin version from Preference screen). And in that
case Orca will download the legacy plugin but instead installing it with
a newer version suffix. So on next start up Orca can't find the plugin
because it tries to load using legacy version suffix instead.

This PR fixes it by getting rid of that error-prone static variable,
instead it always use the version number directly.

Fix #14373
Fix #14441

# Screenshots/Recordings/Graphs

<!--
> Please attach relevant screenshots to showcase the UI changes.
> Please attach images that can help explain the changes.
-->

## Tests

<!--
> Please describe the tests that you have conducted to verify the
changes made in this PR.
-->

<!--
> A guide for users on how to download the artifacts from this PR.
-->

[How to Download Pull Requests Artifacts for
Testing](https://www.orcaslicer.com/wiki/how_to_download_pr_artifacts)
2026-07-06 12:27:46 +08:00
76e16d8db4 Preferences Dialog fixes & improvements (Wiki link support) (#13857)
* init

* update

* update

* Update Preferences.cpp

* Update Preferences.cpp

* Update Preferences.cpp

* Update Preferences.cpp

* move filament sync mode next to auto sync

* move auto backup next to load behaviour
2026-07-06 12:27:46 +08:00
feeea3e651 fix: treat renamed printer presets as compatible aliases (#14504)
# Description

Fixes user filament presets that reference an old printer preset name in
`compatible_printers`, even when the current system printer preset
correctly declares that old name in `renamed_from`.

## Core Issue

`PresetCollection::find_preset()` was updated to resolve `renamed_from`,
but this specific failure does not go through `find_preset()`.

For root user filament presets with empty `inherits`, Orca infers
`compatible_printers` from the filament name suffix after `@`. For
example:

```json
"ELEGOO PLA Base @Elegoo Neptune 4 Pro (0.4 nozzle)"
```

loads with:

```json
"compatible_printers": ["Elegoo Neptune 4 Pro (0.4 nozzle)"]
```

The current system printer preset is named:

```text
Elegoo Neptune 4 Pro 0.4 nozzle
```

and has:

```json
"renamed_from": "Elegoo Neptune 4 Pro (0.4 nozzle)"
```

However, filament compatibility was doing a direct string comparison
against the active printer name. Since that compatibility path does not
call `find_preset()`, the `renamed_from` mapping was never considered.

## Fix

Teach printer compatibility checks to treat
`active_printer.preset.renamed_from` entries as aliases of the active
printer name.

This preserves existing user preset JSON and avoids rewriting
`compatible_printers`, while allowing old printer suffixes to remain
compatible with renamed system printer presets.

## Tests

<!--
> A guide for users on how to download the artifacts from this PR.
-->

[How to Download Pull Requests Artifacts for
Testing](https://www.orcaslicer.com/wiki/how_to_download_pr_artifacts)
2026-07-06 12:27:46 +08:00
128068cb65 fix: fix type name from preset to process in the preset bundle dialog (#14481)
# Description

The type field for process presets is wrong. It should be process
instead of preset

<img width="2532" height="1576" alt="image"
src="https://github.com/user-attachments/assets/ef73f895-8ce9-4b04-957d-c12cdbaf8f9b"
/>

[How to Download Pull Requests Artifacts for
Testing](https://www.orcaslicer.com/wiki/how_to_download_pr_artifacts)
2026-07-06 12:27:46 +08:00