diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index 7c965c6cdf..70578d0e02 100755 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -442,7 +442,7 @@ class BuildVolume(SceneNode): def _updateExtraZClearance(self) -> None: extra_z = 0.0 - extruders = ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId()) + extruders = ExtruderManager.getInstance().getUsedExtruderStacks() use_extruders = False for extruder in extruders: if extruder.getProperty("retraction_hop_enabled", "value"): diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index 0d776aec20..9707ca4909 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -333,11 +333,25 @@ class ContainerManager(QObject): @pyqtSlot(str, result = bool) def isContainerUsed(self, container_id): Logger.log("d", "Checking if container %s is currently used", container_id) - containers = self._container_registry.findContainerStacks() - for stack in containers: - if container_id in [child.getId() for child in stack.getContainers()]: - Logger.log("d", "The container is in use by %s", stack.getId()) - return True + # check if this is a material container. If so, check if any material with the same GUID is being used by any + # stacks. + container_ids_to_check = [container_id] + container_results = self._container_registry.findInstanceContainers(id = container_id, type = "material") + if container_results: + this_container = container_results[0] + container_guid = this_container.getMetaDataEntry("GUID") + # check all material container IDs with the same GUID + material_containers = self._container_registry.findInstanceContainers(GUID = container_guid, + type = "material") + if material_containers: + container_ids_to_check = [container.getId() for container in material_containers] + + all_stacks = self._container_registry.findContainerStacks() + for stack in all_stacks: + for used_container_id in container_ids_to_check: + if used_container_id in [child.getId() for child in stack.getContainers()]: + Logger.log("d", "The container is in use by %s", stack.getId()) + return True return False @pyqtSlot(str, result = str) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 7fb9c3b0a2..e946c18790 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -916,6 +916,8 @@ class MachineManager(QObject): global_quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [], global_quality = True) else: global_quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [material]) + if not global_quality: + global_quality = self._empty_quality_container # Find the values for each extruder. extruder_stacks = ExtruderManager.getInstance().getActiveExtruderStacks() @@ -929,6 +931,8 @@ class MachineManager(QObject): quality_changes = quality_changes_list[0] else: quality_changes = global_quality_changes + if not quality_changes: + quality_changes = self._empty_quality_changes_container material = stack.material quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [material]) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index a259fa4226..650b125153 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -997,7 +997,7 @@ "type": "[int]", "default_value": "[ ]", "value": "skin_angles", - "enabled": "roofing_pattern != 'concentric'", + "enabled": "roofing_pattern != 'concentric' and roofing_layer_count > 0 and top_layers > 0", "limit_to_extruder": "roofing_extruder_nr", "settable_per_mesh": true },