From 98b127851b581d83418eb6a0dbef102eaa1206f9 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 8 May 2017 12:54:12 +0200 Subject: [PATCH 1/2] Fix setting number of extruders when hasVariants is set --- cura/Settings/MachineManager.py | 16 ++++++++++++++++ .../MachineSettingsAction.py | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 66aee70f14..2a83fa0d51 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -525,6 +525,22 @@ class MachineManager(QObject): return "" + @pyqtProperty("QVariantMap", notify = activeVariantChanged) + def allActiveVariantIds(self): + if not self._global_container_stack: + return {} + + result = {} + + for stack in ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks(): + variant_container = stack.variant + if not variant_container: + continue + + result[stack.getId()] = variant_container.getId() + + return result + @pyqtProperty("QVariantMap", notify = activeMaterialChanged) def allActiveMaterialIds(self): if not self._global_container_stack: diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index 28cd8ba2f3..486ab25918 100755 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -153,7 +153,7 @@ class MachineSettingsAction(MachineAction): if machine_manager.hasMaterials: extruder_material_id = machine_manager.allActiveMaterialIds[extruder_manager.extruderIds["0"]] if machine_manager.hasVariants: - extruder_variant_id = machine_manager.activeVariantIds[0] + extruder_variant_id = machine_manager.allActiveVariantIds[extruder_manager.extruderIds["0"]] # Copy any settable_per_extruder setting value from the extruders to the global stack extruder_stacks = ExtruderManager.getInstance().getActiveExtruderStacks() From 3fbdaf6c17faa1539292bb03ff8ca5db57cc75de Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 8 May 2017 13:43:09 +0200 Subject: [PATCH 2/2] Ignore values of extruders that are inactive for the current machine instance extrudervalues() would include the values of extruders whose position >= machine_extruder_count. This can happen in machine definitions that have more extruders than machine_extruder_count, eg Custom FDM printer. --- cura/Settings/ExtruderManager.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 0f649e5860..359cd74f09 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -520,6 +520,10 @@ class ExtruderManager(QObject): result = [] for extruder in ExtruderManager.getInstance().getMachineExtruders(global_stack.getId()): + # only include values from extruders that are "active" for the current machine instance + if int(extruder.getMetaDataEntry("position")) >= global_stack.getProperty("machine_extruder_count", "value"): + continue + value = extruder.getRawProperty(key, "value") if value is None: