Browse Source

Add version upgrade for Creality printers and CreawsomeMod

This should work for both.

Contributes to issue CURA-6554.
Ghostkeeper 5 years ago
parent
commit
d5da6e34be
1 changed files with 202 additions and 1 deletions
  1. 202 1
      plugins/VersionUpgrade/VersionUpgrade41to42/VersionUpgrade41to42.py

+ 202 - 1
plugins/VersionUpgrade/VersionUpgrade41to42/VersionUpgrade41to42.py

@@ -11,6 +11,183 @@ _renamed_settings = {
     "support_minimal_diameter": "support_tower_maximum_supported_diameter"
 } #type: Dict[str, str]
 _removed_settings = ["prime_tower_circular"]  # type: List[str]
+_renamed_profiles = {
+    #Include CreawsomeMod profiles here as well for the people who installed that.
+    #Definitions.
+    "creawsome_base": "creality_base",
+    "creawsome_cr10": "creality_cr10",
+    "creawsome_cr10mini": "creality_cr10mini",
+    "creawsome_cr10s": "creality_cr10s",
+    "creawsome_cr10s4": "creality_cr10s4",
+    "creawsome_cr10s5": "creality_cr10s5",
+    "creawsome_cr10spro": "creality_cr10spro",
+    "creawsome_cr20": "creality_cr20",
+    "creawsome_cr20pro": "creality_cr20pro",
+    "creawsome_ender2": "creality_ender2",
+    "creawsome_ender3": "creality_ender3",
+    "creawsome_ender4": "creality_ender4",
+    "creawsome_ender5": "creality_ender5",
+
+    #Extruder definitions.
+    "creawsome_base_extruder_0": "creality_base_extruder_0",
+
+    #Variants.
+    "creawsome_base_0.2": "creality_base_0.2",
+    "creawsome_base_0.3": "creality_base_0.3",
+    "creawsome_base_0.4": "creality_base_0.4",
+    "creawsome_base_0.5": "creality_base_0.5",
+    "creawsome_base_0.6": "creality_base_0.6",
+    "creawsome_base_0.8": "creality_base_0.8",
+    "creawsome_base_1.0": "creality_base_1.0",
+    "creawsome_cr10_0.2": "creality_cr10_0.2",
+    "creawsome_cr10_0.3": "creality_cr10_0.3",
+    "creawsome_cr10_0.4": "creality_cr10_0.4",
+    "creawsome_cr10_0.5": "creality_cr10_0.5",
+    "creawsome_cr10_0.6": "creality_cr10_0.6",
+    "creawsome_cr10_0.8": "creality_cr10_0.8",
+    "creawsome_cr10_1.0": "creality_cr10_1.0",
+    "creawsome_cr10mini_0.2": "creality_cr10mini_0.2",
+    "creawsome_cr10mini_0.3": "creality_cr10mini_0.3",
+    "creawsome_cr10mini_0.4": "creality_cr10mini_0.4",
+    "creawsome_cr10mini_0.5": "creality_cr10mini_0.5",
+    "creawsome_cr10mini_0.6": "creality_cr10mini_0.6",
+    "creawsome_cr10mini_0.8": "creality_cr10mini_0.8",
+    "creawsome_cr10mini_1.0": "creality_cr10mini_1.0",
+    "creawsome_cr10s4_0.2": "creality_cr10s4_0.2",
+    "creawsome_cr10s4_0.3": "creality_cr10s4_0.3",
+    "creawsome_cr10s4_0.4": "creality_cr10s4_0.4",
+    "creawsome_cr10s4_0.5": "creality_cr10s4_0.5",
+    "creawsome_cr10s4_0.6": "creality_cr10s4_0.6",
+    "creawsome_cr10s4_0.8": "creality_cr10s4_0.8",
+    "creawsome_cr10s4_1.0": "creality_cr10s4_1.0",
+    "creawsome_cr10s5_0.2": "creality_cr10s5_0.2",
+    "creawsome_cr10s5_0.3": "creality_cr10s5_0.3",
+    "creawsome_cr10s5_0.4": "creality_cr10s5_0.4",
+    "creawsome_cr10s5_0.5": "creality_cr10s5_0.5",
+    "creawsome_cr10s5_0.6": "creality_cr10s5_0.6",
+    "creawsome_cr10s5_0.8": "creality_cr10s5_0.8",
+    "creawsome_cr10s5_1.0": "creality_cr10s5_1.0",
+    "creawsome_cr10s_0.2": "creality_cr10s_0.2",
+    "creawsome_cr10s_0.3": "creality_cr10s_0.3",
+    "creawsome_cr10s_0.4": "creality_cr10s_0.4",
+    "creawsome_cr10s_0.5": "creality_cr10s_0.5",
+    "creawsome_cr10s_0.6": "creality_cr10s_0.6",
+    "creawsome_cr10s_0.8": "creality_cr10s_0.8",
+    "creawsome_cr10s_1.0": "creality_cr10s_1.0",
+    "creawsome_cr10spro_0.2": "creality_cr10spro_0.2",
+    "creawsome_cr10spro_0.3": "creality_cr10spro_0.3",
+    "creawsome_cr10spro_0.4": "creality_cr10spro_0.4",
+    "creawsome_cr10spro_0.5": "creality_cr10spro_0.5",
+    "creawsome_cr10spro_0.6": "creality_cr10spro_0.6",
+    "creawsome_cr10spro_0.8": "creality_cr10spro_0.8",
+    "creawsome_cr10spro_1.0": "creality_cr10spro_1.0",
+    "creawsome_cr20_0.2": "creality_cr20_0.2",
+    "creawsome_cr20_0.3": "creality_cr20_0.3",
+    "creawsome_cr20_0.4": "creality_cr20_0.4",
+    "creawsome_cr20_0.5": "creality_cr20_0.5",
+    "creawsome_cr20_0.6": "creality_cr20_0.6",
+    "creawsome_cr20_0.8": "creality_cr20_0.8",
+    "creawsome_cr20_1.0": "creality_cr20_1.0",
+    "creawsome_cr20pro_0.2": "creality_cr20pro_0.2",
+    "creawsome_cr20pro_0.3": "creality_cr20pro_0.3",
+    "creawsome_cr20pro_0.4": "creality_cr20pro_0.4",
+    "creawsome_cr20pro_0.5": "creality_cr20pro_0.5",
+    "creawsome_cr20pro_0.6": "creality_cr20pro_0.6",
+    "creawsome_cr20pro_0.8": "creality_cr20pro_0.8",
+    "creawsome_cr20pro_1.0": "creality_cr20pro_1.0",
+    "creawsome_ender2_0.2": "creality_ender2_0.2",
+    "creawsome_ender2_0.3": "creality_ender2_0.3",
+    "creawsome_ender2_0.4": "creality_ender2_0.4",
+    "creawsome_ender2_0.5": "creality_ender2_0.5",
+    "creawsome_ender2_0.6": "creality_ender2_0.6",
+    "creawsome_ender2_0.8": "creality_ender2_0.8",
+    "creawsome_ender2_1.0": "creality_ender2_1.0",
+    "creawsome_ender3_0.2": "creality_ender3_0.2",
+    "creawsome_ender3_0.3": "creality_ender3_0.3",
+    "creawsome_ender3_0.4": "creality_ender3_0.4",
+    "creawsome_ender3_0.5": "creality_ender3_0.5",
+    "creawsome_ender3_0.6": "creality_ender3_0.6",
+    "creawsome_ender3_0.8": "creality_ender3_0.8",
+    "creawsome_ender3_1.0": "creality_ender3_1.0",
+    "creawsome_ender4_0.2": "creality_ender4_0.2",
+    "creawsome_ender4_0.3": "creality_ender4_0.3",
+    "creawsome_ender4_0.4": "creality_ender4_0.4",
+    "creawsome_ender4_0.5": "creality_ender4_0.5",
+    "creawsome_ender4_0.6": "creality_ender4_0.6",
+    "creawsome_ender4_0.8": "creality_ender4_0.8",
+    "creawsome_ender4_1.0": "creality_ender4_1.0",
+    "creawsome_ender5_0.2": "creality_ender5_0.2",
+    "creawsome_ender5_0.3": "creality_ender5_0.3",
+    "creawsome_ender5_0.4": "creality_ender5_0.4",
+    "creawsome_ender5_0.5": "creality_ender5_0.5",
+    "creawsome_ender5_0.6": "creality_ender5_0.6",
+    "creawsome_ender5_0.8": "creality_ender5_0.8",
+    "creawsome_ender5_1.0": "creality_ender5_1.0",
+
+    #Upgrade for people who had the original Creality profiles from 4.1 and earlier.
+    "creality_cr10_extruder_0": "creality_base_extruder_0",
+    "creality_cr10s4_extruder_0": "creality_base_extruder_0",
+    "creality_cr10s5_extruder_0": "creality_base_extruder_0",
+    "creality_ender3_extruder_0": "creality_base_extruder_0"
+}
+
+#For legacy Creality printers, select the correct quality profile depending on the material.
+_creality_quality_per_material = {
+    #Since legacy Creality printers didn't have different variants, we always pick the 0.4mm variant.
+    "generic_abs_175": {
+        "high": "base_0.4_ABS_super",
+        "normal": "base_0.4_ABS_super",
+        "fast": "base_0.4_ABS_super",
+        "draft": "base_0.4_ABS_standard",
+        "extra_fast": "base_0.4_ABS_low",
+        "coarse": "base_0.4_ABS_low",
+        "extra_coarse": "base_0.4_ABS_low"
+    },
+    "generic_petg_175": {
+        "high": "base_0.4_PETG_super",
+        "normal": "base_0.4_PETG_super",
+        "fast": "base_0.4_PETG_super",
+        "draft": "base_0.4_PETG_standard",
+        "extra_fast": "base_0.4_PETG_low",
+        "coarse": "base_0.4_PETG_low",
+        "extra_coarse": "base_0.4_PETG_low"
+    },
+    "generic_pla_175": {
+        "high": "base_0.4_PLA_super",
+        "normal": "base_0.4_PLA_super",
+        "fast": "base_0.4_PLA_super",
+        "draft": "base_0.4_PLA_standard",
+        "extra_fast": "base_0.4_PLA_low",
+        "coarse": "base_0.4_PLA_low",
+        "extra_coarse": "base_0.4_PLA_low"
+    },
+    "generic_tpu_175": {
+        "high": "base_0.4_TPU_super",
+        "normal": "base_0.4_TPU_super",
+        "fast": "base_0.4_TPU_super",
+        "draft": "base_0.4_TPU_standard",
+        "extra_fast": "base_0.4_TPU_standard",
+        "coarse": "base_0.4_TPU_standard",
+        "extra_coarse": "base_0.4_TPU_standard"
+    },
+    "empty_material": { #For the global stack.
+        "high": "base_global_super",
+        "normal": "base_global_super",
+        "fast": "base_global_super",
+        "draft": "base_global_standard",
+        "extra_fast": "base_global_low",
+        "coarse": "base_global_low",
+        "extra_coarse": "base_global_low"
+    }
+}
+
+#Default variant to select for legacy Creality printers, now that we have variants.
+_default_variants = {
+    "creality_cr10_extruder_0": "creality_cr10_0.4",
+    "creality_cr10s4_extruder_0": "creality_cr10s4_0.4",
+    "creality_cr10s5_extruder_0": "creality_cr10s5_0.4",
+    "creality_ender3_extruder_0": "creality_ender3_0.4"
+}
 
 
 ##  Upgrades configurations from the state they were in at version 4.1 to the
@@ -95,6 +272,30 @@ class VersionUpgrade41to42(VersionUpgrade):
         #Update version number.
         parser["metadata"]["setting_version"] = "8"
 
+        #Change renamed profiles.
+        if "containers" in parser:
+            #For legacy Creality printers, change the variant to 0.4.
+            definition_id = parser["containers"]["6"]
+            if parser["metadata"].get("type", "machine") == "extruder_train":
+                if parser["containers"]["4"] == "empty_variant": #Necessary for people entering from CreawsomeMod who already had a variant.
+                    if definition_id in _default_variants:
+                        parser["containers"]["4"] = _default_variants[definition_id]
+                        if definition_id == "creality_cr10_extruder_0": #We can't disambiguate between Creality CR-10 and Creality-CR10S since they share the same extruder definition. Have to go by the name.
+                            if "cr-10s" in parser["metadata"].get("machine", "Creality CR-10").lower(): #Not perfect, since the user can change this name :(
+                                parser["containers"]["4"] = "creality_cr10s_0.4"
+
+            #Also change the quality to go along with it.
+            material_id = parser["containers"]["3"]
+            old_quality_id = parser["containers"]["2"]
+            if material_id in _creality_quality_per_material and old_quality_id in _creality_quality_per_material[material_id]:
+                parser["containers"]["2"] = _creality_quality_per_material[material_id][old_quality_id]
+
+            stack_copy = {} #Make a copy so that we don't modify the dict we're iterating over.
+            stack_copy.update(parser["containers"])
+            for position, profile_id in stack_copy.items():
+                if profile_id in _renamed_profiles:
+                    parser["containers"][position] = _renamed_profiles[profile_id]
+
         result = io.StringIO()
         parser.write(result)
-        return [filename], [result.getvalue()]
+        return [filename], [result.getvalue()]