diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index 7161169b22..760a288b7b 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -348,15 +348,18 @@ class ContainerManager(QObject): # # \param material_id \type{str} the id of the material for which to get the linked materials. # \return \type{list} a list of names of materials with the same GUID - @pyqtSlot("QVariant", result = "QStringList") - def getLinkedMaterials(self, material_node): + @pyqtSlot("QVariant", bool, result = "QStringList") + def getLinkedMaterials(self, material_node, exclude_self = False): guid = material_node.metadata["GUID"] + self_root_material_id = material_node.metadata["base_file"] material_group_list = self._material_manager.getMaterialGroupListByGUID(guid) linked_material_names = [] if material_group_list: for material_group in material_group_list: + if exclude_self and material_group.name == self_root_material_id: + continue linked_material_names.append(material_group.root_material_node.metadata["name"]) return linked_material_names diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index f5daa77bb0..214623c92d 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -280,6 +280,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # Check if any quality_changes instance container is in conflict. instance_container_files = [name for name in cura_file_names if name.endswith(self._instance_container_suffix)] quality_name = "" + custom_quality_name = "" num_settings_overriden_by_quality_changes = 0 # How many settings are changed by the quality changes num_user_settings = 0 quality_changes_conflict = False @@ -292,7 +293,14 @@ class ThreeMFWorkspaceReader(WorkspaceReader): container_id = self._stripFileToId(instance_container_file_name) serialized = archive.open(instance_container_file_name).read().decode("utf-8") - serialized = InstanceContainer._updateSerialized(serialized, instance_container_file_name) + + # Qualities and variants don't have upgrades, so don't upgrade them + parser = ConfigParser(interpolation = None) + parser.read_string(serialized) + container_type = parser["metadata"]["type"] + if container_type not in ("quality", "variant"): + serialized = InstanceContainer._updateSerialized(serialized, instance_container_file_name) + parser = ConfigParser(interpolation = None) parser.read_string(serialized) container_info = ContainerInfo(instance_container_file_name, serialized, parser) @@ -309,7 +317,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): position = parser["metadata"]["position"] self._machine_info.quality_changes_info.extruder_info_dict[position] = container_info - quality_name = parser["general"]["name"] + custom_quality_name = parser["general"]["name"] values = parser["values"] if parser.has_section("values") else dict() num_settings_overriden_by_quality_changes += len(values) # Check if quality changes already exists. @@ -473,6 +481,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader): extruders = num_extruders * [""] + quality_name = custom_quality_name if custom_quality_name else quality_name + self._machine_info.container_id = global_stack_id self._machine_info.name = machine_name self._machine_info.definition_id = machine_definition_id diff --git a/resources/qml/Preferences/MaterialView.qml b/resources/qml/Preferences/MaterialView.qml index d2f653e650..50dc6b65a4 100644 --- a/resources/qml/Preferences/MaterialView.qml +++ b/resources/qml/Preferences/MaterialView.qml @@ -36,8 +36,8 @@ TabView if (!base.containerId || !base.editingEnabled) { return "" } - var linkedMaterials = Cura.ContainerManager.getLinkedMaterials(base.currentMaterialNode); - if (linkedMaterials.length <= 1) { + var linkedMaterials = Cura.ContainerManager.getLinkedMaterials(base.currentMaterialNode, true); + if (linkedMaterials.length == 0) { return "" } return linkedMaterials.join(", ");