diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index f253b18444..6a7b671be1 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -700,7 +700,7 @@ class ContainerManager(QObject): self._container_registry.addContainer(duplicated_container) return self._getMaterialContainerIdForActiveMachine(new_id) - ## Create a new material by cloning Generic PLA and setting the GUID to something unqiue + ## Create a new material by cloning Generic PLA for the current material diameter and setting the GUID to something unqiue # # \return \type{str} the id of the newly created container. @pyqtSlot(result = str) @@ -712,14 +712,21 @@ class ContainerManager(QObject): if not global_stack: return "" - containers = self._container_registry.findInstanceContainers(id="generic_pla") + approximate_diameter = round(global_stack.getProperty("material_diameter","value")) + containers = self._container_registry.findInstanceContainers(id="generic_pla*", approximate_diameter=approximate_diameter) if not containers: - Logger.log("d", "Unable to create a new material by cloning generic_pla, because it doesn't exist.") + Logger.log("d", "Unable to create a new material by cloning Generic PLA, because it cannot be found for the material diameter for this machine.") + return "" + + base_file = containers[0].getMetaDataEntry("base_file") + containers = self._container_registry.findInstanceContainers(id=base_file) + if not containers: + Logger.log("d", "Unable to create a new material by cloning Generic PLA, because the base file for Generic PLA for this machine can not be found.") return "" # Create a new ID & container to hold the data. new_id = self._container_registry.uniqueName("custom_material") - container_type = type(containers[0]) # Could be either a XMLMaterialProfile or a InstanceContainer + container_type = type(containers[0]) # Always XMLMaterialProfile, since we specifically clone the base_file duplicated_container = container_type(new_id) # Instead of duplicating we load the data from the basefile again. @@ -733,13 +740,6 @@ class ContainerManager(QObject): duplicated_container.setMetaDataEntry("material", catalog.i18nc("@label", "Custom")) duplicated_container.setName(catalog.i18nc("@label", "Custom Material")) - # Set new material diameter to match the current machine, or it will not be listed - material_diameter = global_stack.getProperty("material_diameter", "value") - properties = duplicated_container.getMetaDataEntry("properties", {}) - properties["diameter"] = str(material_diameter) - duplicated_container.setMetaDataEntry("properties", properties) - duplicated_container.setMetaDataEntry("approximate_diameter", round(material_diameter)) - self._container_registry.addContainer(duplicated_container) return self._getMaterialContainerIdForActiveMachine(new_id)