From 549b0406321ede754db086b66ce45301f1fecb53 Mon Sep 17 00:00:00 2001 From: HellAholic Date: Tue, 21 Oct 2025 09:04:46 +0200 Subject: [PATCH 1/2] Safeguard against decrease in number of extruders When the painted model goes from a machine with higher number of extruders to a lower number of extruders with painted data, adding the same safeguard as the limit to extruder settings to prevent crash --- cura/Settings/ExtruderManager.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 8e950350b3..87420b408e 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -257,6 +257,8 @@ class ExtruderManager(QObject): painted_extruders = node.callDecoration("getPaintedExtruders") if painted_extruders is not None: for extruder_nr in painted_extruders: + if str(extruder_nr) not in self.extruderIds: + extruder_nr = int(self._application.getMachineManager().defaultExtruderPosition) used_extruder_stack_ids.add(self.extruderIds[str(extruder_nr)]) # Check limit to extruders From e10093167c72647164645c6ea32ac7b85c079fa7 Mon Sep 17 00:00:00 2001 From: HellAholic Date: Tue, 21 Oct 2025 09:16:11 +0200 Subject: [PATCH 2/2] try-except instead of if Adding the defaultExtruderPosition could be wrongly adding an unused extruder. In this case I do prefer a try/except to indicate that this is kind of an edge-case, and it also avoids some string/int conversions. Co-authored-by: Erwan MATHIEU --- cura/Settings/ExtruderManager.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 87420b408e..a0ec63e1cf 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -257,9 +257,10 @@ class ExtruderManager(QObject): painted_extruders = node.callDecoration("getPaintedExtruders") if painted_extruders is not None: for extruder_nr in painted_extruders: - if str(extruder_nr) not in self.extruderIds: - extruder_nr = int(self._application.getMachineManager().defaultExtruderPosition) - used_extruder_stack_ids.add(self.extruderIds[str(extruder_nr)]) + try: + used_extruder_stack_ids.add(self.extruderIds[str(extruder_nr)]) + except KeyError: + pass # Check limit to extruders limit_to_extruder_feature_list = ["wall_0_extruder_nr",