From 8275e506ce6b3e995a2a03e485eb822f525119f8 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Thu, 15 Feb 2018 11:17:25 +0100 Subject: [PATCH] CURA-4606 fix material names for 1.75mm materials --- cura/Machines/MaterialManager.py | 31 ++++++++++++++++--- cura/Machines/QualityManager.py | 8 +++-- resources/definitions/gmax15plus.def.json | 1 + .../definitions/gmax15plus_dual.def.json | 1 + .../gmax15plus_pla_dual_normal.inst.cfg | 1 - .../gmax15plus_pla_dual_thick.inst.cfg | 1 - .../gmax15plus_pla_dual_thin.inst.cfg | 1 - .../gmax15plus_pla_dual_very_thick.inst.cfg | 1 - .../gmax15plus/gmax15plus_pla_normal.inst.cfg | 1 - .../gmax15plus/gmax15plus_pla_thick.inst.cfg | 1 - .../gmax15plus/gmax15plus_pla_thin.inst.cfg | 1 - .../gmax15plus_pla_very_thick.inst.cfg | 1 - 12 files changed, 33 insertions(+), 16 deletions(-) diff --git a/cura/Machines/MaterialManager.py b/cura/Machines/MaterialManager.py index bd827fe5ba..f5a8995af1 100644 --- a/cura/Machines/MaterialManager.py +++ b/cura/Machines/MaterialManager.py @@ -38,11 +38,17 @@ class MaterialManager(QObject): self._fallback_materials_map = dict() # material_type -> generic material metadata self._material_group_map = dict() # root_material_id -> MaterialGroup self._diameter_machine_variant_material_map = dict() # diameter -> dict(machine_definition_id -> MaterialNode) + + # We're using these two maps to convert between the specific diameter material id and the generic material id + # because the generic material ids are used in qualities and definitions, while the specific diameter material is meant + # i.e. generic_pla -> generic_pla_175 self._material_diameter_map = defaultdict() # root_material_id -> diameter -> root_material_id for that diameter + self._diameter_material_map = dict() # material id including diameter (generic_pla_175) -> material root id (generic_pla) # The machine definition ID for the non-machine-specific materials. # This is used as the last fallback option if the given machine-specific material(s) cannot be found. self._default_machine_definition_id = "fdmprinter" + self._default_approximate_diameter_for_quality_search = "3" self._update_timer = QTimer(self) self._update_timer.setInterval(300) @@ -99,6 +105,7 @@ class MaterialManager(QObject): # be for either "generic_pla" or "generic_pla_175", but not both. This map helps to get the correct material ID # for quality search. self._material_diameter_map = defaultdict(defaultdict) + self._diameter_material_map = dict() # Group the material IDs by the same name, material, brand, and color but with different diameters. material_group_dict = dict() @@ -116,10 +123,17 @@ class MaterialManager(QObject): approximate_diameter = root_material_metadata.get("approximate_diameter") material_group_dict[key_data][approximate_diameter] = root_material_metadata["id"] + # Map [root_material_id][diameter] -> root_material_id for this diameter for data_dict in material_group_dict.values(): - for rmid1 in data_dict.values(): - for ad2, rmid2 in data_dict.items(): - self._material_diameter_map[rmid1][ad2] = rmid2 + for root_material_id1 in data_dict.values(): + for approximate_diameter2, root_material_id2 in data_dict.items(): + self._material_diameter_map[root_material_id1][approximate_diameter2] = root_material_id2 + + default_root_material_id = data_dict.get(self._default_approximate_diameter_for_quality_search) + if default_root_material_id is None: + default_root_material_id = list(data_dict.values())[0] # no default diameter present, just take "the" only one + for root_material_id in data_dict.values(): + self._diameter_material_map[root_material_id] = default_root_material_id # Map #4 # "machine" -> "variant_name" -> "root material ID" -> specific material InstanceContainer @@ -181,6 +195,9 @@ class MaterialManager(QObject): def getRootMaterialIDForDiameter(self, root_material_id: str, approximate_diameter: str) -> str: return self._material_diameter_map.get(root_material_id).get(approximate_diameter, root_material_id) + def getRootMaterialIDWithoutDiameter(self, root_material_id: str) -> str: + return self._diameter_material_map.get(root_material_id) + # # Return a dict with all root material IDs (k) and ContainerNodes (v) that's suitable for the given setup. # @@ -264,8 +281,12 @@ class MaterialManager(QObject): # This function returns the generic root material ID for the given material type, where material types are "PLA", # "ABS", etc. # - def getFallbackMaterialForType(self, material_type: str) -> dict: + def getFallbackMaterialId(self, material_type: str) -> str: # For safety if material_type not in self._fallback_materials_map: raise RuntimeError("Material type [%s] is not in the fallback materials table." % material_type) - return self._fallback_materials_map[material_type] + fallback_material = self._fallback_materials_map[material_type] + if fallback_material: + return self.getRootMaterialIDWithoutDiameter(fallback_material["id"]) + else: + return None diff --git a/cura/Machines/QualityManager.py b/cura/Machines/QualityManager.py index cb723f41d0..f0fd0168a6 100644 --- a/cura/Machines/QualityManager.py +++ b/cura/Machines/QualityManager.py @@ -286,13 +286,15 @@ class QualityManager(QObject): if extruder.material.getId() != "empty_material": has_material = True root_material_id = extruder.material.getMetaDataEntry("base_file") + # Convert possible generic_pla_175 -> generic_pla + root_material_id = self._material_manager.getRootMaterialIDWithoutDiameter(root_material_id) root_material_id_list.append(root_material_id) # Also try to get the fallback material material_type = extruder.material.getMetaDataEntry("material") - fallback_root_material_metadata = self._material_manager.getFallbackMaterialForType(material_type) - if fallback_root_material_metadata: - root_material_id_list.append(fallback_root_material_metadata["id"]) + fallback_root_material_id = self._material_manager.getFallbackMaterialId(material_type) + if fallback_root_material_id: + root_material_id_list.append(fallback_root_material_id) nodes_to_check = [] diff --git a/resources/definitions/gmax15plus.def.json b/resources/definitions/gmax15plus.def.json index 3a207cd054..897d492bb2 100644 --- a/resources/definitions/gmax15plus.def.json +++ b/resources/definitions/gmax15plus.def.json @@ -10,6 +10,7 @@ "category": "Other", "file_formats": "text/x-gcode", "platform": "gmax_1-5_xt-plus_s3d_full model_150707.stl", + "has_machine_quality": true, "has_variants": true, "variants_name": "Hotend", "preferred_variant_name": "0.5mm E3D (Default)" diff --git a/resources/definitions/gmax15plus_dual.def.json b/resources/definitions/gmax15plus_dual.def.json index af26a2e30a..8c57c8af63 100644 --- a/resources/definitions/gmax15plus_dual.def.json +++ b/resources/definitions/gmax15plus_dual.def.json @@ -11,6 +11,7 @@ "file_formats": "text/x-gcode", "platform": "gmax_1-5_xt-plus_s3d_full model_150707.stl", "has_variants": true, + "has_machine_quality": true, "variants_name": "Hotend", "preferred_variant_name": "0.5mm E3D (Default)", "machine_extruder_trains": { diff --git a/resources/quality/gmax15plus/gmax15plus_pla_dual_normal.inst.cfg b/resources/quality/gmax15plus/gmax15plus_pla_dual_normal.inst.cfg index 67b5cb49b8..e08a6ff421 100644 --- a/resources/quality/gmax15plus/gmax15plus_pla_dual_normal.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_pla_dual_normal.inst.cfg @@ -8,7 +8,6 @@ setting_version = 4 type = quality quality_type = normal weight = -1 -global_quality = True [values] layer_height = 0.2 diff --git a/resources/quality/gmax15plus/gmax15plus_pla_dual_thick.inst.cfg b/resources/quality/gmax15plus/gmax15plus_pla_dual_thick.inst.cfg index 376e3241ff..86bfe2af6c 100644 --- a/resources/quality/gmax15plus/gmax15plus_pla_dual_thick.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_pla_dual_thick.inst.cfg @@ -8,7 +8,6 @@ setting_version = 4 type = quality quality_type = course weight = -2 -global_quality = True [values] layer_height = 0.28 diff --git a/resources/quality/gmax15plus/gmax15plus_pla_dual_thin.inst.cfg b/resources/quality/gmax15plus/gmax15plus_pla_dual_thin.inst.cfg index 1c0cabd84f..0d19c6c9f0 100644 --- a/resources/quality/gmax15plus/gmax15plus_pla_dual_thin.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_pla_dual_thin.inst.cfg @@ -8,7 +8,6 @@ setting_version = 4 type = quality quality_type = high weight = 0 -global_quality = True [values] layer_height = 0.16 diff --git a/resources/quality/gmax15plus/gmax15plus_pla_dual_very_thick.inst.cfg b/resources/quality/gmax15plus/gmax15plus_pla_dual_very_thick.inst.cfg index d292284531..2b58120762 100644 --- a/resources/quality/gmax15plus/gmax15plus_pla_dual_very_thick.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_pla_dual_very_thick.inst.cfg @@ -8,7 +8,6 @@ setting_version = 4 type = quality quality_type = extra_course weight = -3 -global_quality = True [values] layer_height = 0.32 diff --git a/resources/quality/gmax15plus/gmax15plus_pla_normal.inst.cfg b/resources/quality/gmax15plus/gmax15plus_pla_normal.inst.cfg index 3baad3a928..70920b6f6a 100644 --- a/resources/quality/gmax15plus/gmax15plus_pla_normal.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_pla_normal.inst.cfg @@ -8,7 +8,6 @@ setting_version = 4 type = quality quality_type = normal weight = -1 -global_quality = True [values] layer_height = 0.2 diff --git a/resources/quality/gmax15plus/gmax15plus_pla_thick.inst.cfg b/resources/quality/gmax15plus/gmax15plus_pla_thick.inst.cfg index 856ab7d3db..0f1e8a3802 100644 --- a/resources/quality/gmax15plus/gmax15plus_pla_thick.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_pla_thick.inst.cfg @@ -8,7 +8,6 @@ setting_version = 4 type = quality quality_type = course weight = -2 -global_quality = True [values] layer_height = 0.28 diff --git a/resources/quality/gmax15plus/gmax15plus_pla_thin.inst.cfg b/resources/quality/gmax15plus/gmax15plus_pla_thin.inst.cfg index 46f41e195f..f548affc2c 100644 --- a/resources/quality/gmax15plus/gmax15plus_pla_thin.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_pla_thin.inst.cfg @@ -8,7 +8,6 @@ setting_version = 4 type = quality quality_type = high weight = 0 -global_quality = True [values] layer_height = 0.16 diff --git a/resources/quality/gmax15plus/gmax15plus_pla_very_thick.inst.cfg b/resources/quality/gmax15plus/gmax15plus_pla_very_thick.inst.cfg index 938f21a13d..5db77a70ea 100644 --- a/resources/quality/gmax15plus/gmax15plus_pla_very_thick.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_pla_very_thick.inst.cfg @@ -8,7 +8,6 @@ setting_version = 4 type = quality quality_type = extra_course weight = -3 -global_quality = True [values] layer_height = 0.32