Browse Source

Upgrade extruder stacks

Stupid stuff. All of these containers need to be copied. It's not possible to work this out for all materials properly, since we can't read into these materials what their GUIDs and material types are.
Ghostkeeper 5 years ago
parent
commit
2410d05100

+ 62 - 5
plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py

@@ -7,6 +7,28 @@ from typing import Tuple, List
 import io
 from UM.VersionUpgrade import VersionUpgrade
 
+renamed_nozzles = {
+    "deltacomb_025_e3d": "deltacomb_dc20_fbe025",
+    "deltacomb_040_e3d": "deltacomb_dc20_fbe040",
+    "deltacomb_080_e3d": "deltacomb_dc20_vfbe080"
+}
+default_qualities_per_nozzle_and_material = {  # Can't define defaults for user-defined materials, since we only have the material ID. Those will get reset to empty quality :(
+    "deltacomb_dc20_fbe025": {
+        "generic_pla_175": "deltacomb_FBE0.25_PLA_C",
+        "generic_abs_175": "deltacomb_FBE0.25_ABS_C"
+    },
+    "deltacomb_dc20_fbe040": {
+        "generic_pla_175": "deltacomb_FBE0.40_PLA_C",
+        "generic_abs_175": "deltacomb_FBE0.40_ABS_C",
+        "generic_petg_175": "deltacomb_FBE0.40_PETG_C",
+        "generic_tpu_175": "deltacomb_FBE0.40_TPU_C"
+    },
+    "deltacomb_dc20_vfbe080": {
+        "generic_pla_175": "deltacomb_VFBE0.80_PLA_D",
+        "generic_abs_175": "deltacomb_VFBE0.80_ABS_D"
+    }
+}
+
 class VersionUpgrade46to47(VersionUpgrade):
     def getCfgVersion(self, serialised: str) -> int:
         parser = configparser.ConfigParser(interpolation = None)
@@ -61,8 +83,8 @@ class VersionUpgrade46to47(VersionUpgrade):
                 parser["general"]["definition"] = "deltacomb_base_extruder_1"
                 third_extruder_changes["general"]["definition"] = "deltacomb_base_extruder_2"
                 fourth_extruder_changes["general"]["definition"] = "deltacomb_base_extruder_3"
-                results.append((third_extruder_changes, filename + "_e2_upgrade"))  # Hopefully not already taken.
-                results.append((fourth_extruder_changes, filename + "_e3_upgrade"))  # Hopefully not already taken.
+                results.append((third_extruder_changes, filename[:-len(".inst.cfg")] + "_e2_upgrade.inst.cfg"))  # Hopefully not already taken.
+                results.append((fourth_extruder_changes, filename[:-len(".inst.cfg")] + "_e3_upgrade.inst.cfg"))  # Hopefully not already taken.
             elif parser["general"]["definition"] == "deltacomb":  # Global stack.
                 parser["general"]["definition"] = "deltacomb_dc20"
 
@@ -116,6 +138,9 @@ class VersionUpgrade46to47(VersionUpgrade):
     def upgradeStack(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
         """
         Upgrades stacks to have the new version number.
+
+        This upgrades Deltacomb printers to their new profile structure, and
+        gives them 4 extruders.
         :param serialized: The original contents of the stack.
         :param filename: The original file name of the stack.
         :return: A list of new file names, and a list of the new contents for
@@ -123,12 +148,44 @@ class VersionUpgrade46to47(VersionUpgrade):
         """
         parser = configparser.ConfigParser(interpolation = None)
         parser.read_string(serialized)
+        result_parsers = [parser]
+        result_filenames = [filename]
 
         # Update version number.
         if "metadata" not in parser:
             parser["metadata"] = {}
         parser["metadata"]["setting_version"] = "13"
 
-        result = io.StringIO()
-        parser.write(result)
-        return [filename], [result.getvalue()]
+        if "containers" in parser and "7" in parser["containers"]:
+            if parser["containers"]["7"] == "deltacomb_extruder_0" or parser["containers"]["7"] == "deltacomb_extruder_1":
+                if "5" in parser["containers"]:
+                    parser["containers"]["5"] = renamed_nozzles.get(parser["containers"]["5"], default = parser["containers"]["5"])
+                    if "3" in parser["containers"] and "4" in parser["containers"] and parser["containers"]["3"] == "empty_quality":
+                        parser["containers"]["3"] = default_qualities_per_nozzle_and_material[parser["containers"]["5"]].get(parser["containers"]["4"], "empty_quality")
+                if parser["containers"]["7"] == "deltacomb_extruder_1":
+                    parser["containers"]["7"] = "deltacomb_base_extruder_1"
+                else:
+                    parser["containers"]["7"] = "deltacomb_base_extruder_0"
+                    # Copy this extruder to extruder 3 and 4.
+                    extruder3 = copy.copy(parser)
+                    extruder3["metadata"]["position"] = "2"
+                    extruder3["containers"]["0"] += "_e2_upgrade"
+                    extruder3["containers"]["6"] += "_e2_upgrade"
+                    extruder3["containers"]["7"] = "deltacomb_base_extuder_2"
+                    result_parsers.append(extruder3)
+                    result_filenames.append(filename[:-len(".extruder.cfg")] + "_e2_upgrade.extruder.cfg")
+                    extruder4 = copy.copy(parser)
+                    extruder4["metadata"]["position"] = "3"
+                    extruder4["containers"]["0"] += ".inst.cfg_e3_upgrade"
+                    extruder4["containers"]["6"] += ".inst.cfg_e3_upgrade"
+                    extruder4["containers"]["7"] = "deltacomb_base_extruder_3"
+                    result_parsers.append(extruder4)
+                    result_filenames.append(filename[:-len(".extruder.cfg")] + "_e3_upgrade.extruder.cfg")
+
+        result_serialized = []
+        for result_parser in result_parsers:
+            result_ss = io.StringIO()
+            result_parser.write(result_ss)
+            result_serialized.append(result_ss.getvalue())
+
+        return result_filenames, result_serialized

+ 1 - 1
resources/definitions/deltacomb_base.def.json

@@ -22,7 +22,7 @@
             "1": "deltacomb_base_extruder_1",
             "2": "deltacomb_base_extruder_2",
             "3": "deltacomb_base_extruder_3"
-	    }
+        }
     },
 
     "overrides": {