mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-18 20:28:01 -06:00

This was required since Cura 2.1 produced files with the same filename (bar extension). This then resulted in two containers with the same ID. If you had bad luck, an instance container was chosen as global container (depending on which was first in the unordered dictionary). This gives the current settings the postfix _current_settings, fixing that issue. Contributes to issue CURA-844.
178 lines
No EOL
7.8 KiB
Python
178 lines
No EOL
7.8 KiB
Python
# Copyright (c) 2016 Ultimaker B.V.
|
|
# Cura is released under the terms of the AGPLv3 or higher.
|
|
|
|
import configparser #To get version numbers from config files.
|
|
|
|
from UM.VersionUpgrade import VersionUpgrade # Superclass of the plugin.
|
|
|
|
from . import MachineInstance # To upgrade machine instances.
|
|
from . import Preferences #To upgrade preferences.
|
|
from . import Profile # To upgrade profiles.
|
|
|
|
## How to translate printer names from the old version to the new.
|
|
_printer_translations = {
|
|
"ultimaker2plus": "ultimaker2_plus"
|
|
}
|
|
|
|
## How to translate profile names from the old version to the new.
|
|
_profile_translations = {
|
|
"PLA": "generic_pla",
|
|
"ABS": "generic_abs",
|
|
"CPE": "generic_cpe"
|
|
}
|
|
|
|
## How to translate setting names from the old version to the new.
|
|
_setting_name_translations = {
|
|
"remove_overlapping_walls_0_enabled": "travel_compensate_overlapping_walls_0_enabled",
|
|
"remove_overlapping_walls_enabled": "travel_compensate_overlapping_walls_enabled",
|
|
"remove_overlapping_walls_x_enabled": "travel_compensate_overlapping_walls_x_enabled",
|
|
"retraction_hop": "retraction_hop_enabled",
|
|
"speed_support_lines": "speed_support_infill"
|
|
}
|
|
|
|
## How to translate variants of specific machines from the old version to the
|
|
# new.
|
|
_variant_translations = {
|
|
"ultimaker2_plus": {
|
|
"0.25 mm": "ultimaker2_plus_0.25",
|
|
"0.4 mm": "ultimaker2_plus_0.4",
|
|
"0.6 mm": "ultimaker2_plus_0.6",
|
|
"0.8 mm": "ultimaker2_plus_0.8"
|
|
},
|
|
"ultimaker2_extended_plus": {
|
|
"0.25 mm": "ultimaker2_extended_plus_0.25",
|
|
"0.4 mm": "ultimaker2_extended_plus_0.4",
|
|
"0.6 mm": "ultimaker2_extended_plus_0.6",
|
|
"0.8 mm": "ultimaker2_extended_plus_0.8"
|
|
}
|
|
}
|
|
|
|
## Converts configuration from Cura 2.1's file formats to Cura 2.2's.
|
|
#
|
|
# It converts the machine instances and profiles.
|
|
class VersionUpgrade21to22(VersionUpgrade):
|
|
## Gets the version number from a config file.
|
|
#
|
|
# In all config files that concern this version upgrade, the version
|
|
# number is stored in general/version, so get the data from that key.
|
|
#
|
|
# \param serialised The contents of a config file.
|
|
# \return \type{int} The version number of that config file.
|
|
def getCfgVersion(self, serialised):
|
|
parser = configparser.ConfigParser(interpolation = None)
|
|
parser.read_string(serialised)
|
|
return int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised.
|
|
|
|
## Converts machine instances from format version 1 to version 2.
|
|
#
|
|
# \param serialised The serialised machine instance in version 1.
|
|
# \param filename The supposed file name of the machine instance.
|
|
# \return A tuple containing the new filename and the serialised machine
|
|
# instance in version 2, or None if the input was not of the correct
|
|
# format.
|
|
def upgradeMachineInstance(self, serialised, filename):
|
|
machine_instance = MachineInstance.importFrom(serialised, filename)
|
|
if not machine_instance: #Invalid file format.
|
|
return filename, None
|
|
return machine_instance.export()
|
|
|
|
## Converts preferences from format version 2 to version 3.
|
|
#
|
|
# \param serialised The serialised preferences file in version 2.
|
|
# \param filename THe supposed file name of the preferences file.
|
|
# \return A tuple containing the new filename and the serialised
|
|
# preferences in version 3, or None if the input was not of the correct
|
|
# format.
|
|
def upgradePreferences(self, serialised, filename):
|
|
preferences = Preferences.importFrom(serialised, filename)
|
|
if not preferences: #Invalid file format.
|
|
return filename, None
|
|
return preferences.export()
|
|
|
|
## Converts profiles from format version 1 to version 2.
|
|
#
|
|
# \param serialised The serialised profile in version 1.
|
|
# \param filename The supposed file name of the profile.
|
|
# \return A tuple containing the new filename and the serialised profile
|
|
# in version 2, or None if the input was not of the correct format.
|
|
def upgradeProfile(self, serialised, filename):
|
|
profile = Profile.importFrom(serialised, filename)
|
|
if not profile: # Invalid file format.
|
|
return filename, None
|
|
return profile.export()
|
|
|
|
## Translates a printer name that might have changed since the last
|
|
# version.
|
|
#
|
|
# \param printer A printer name in Cura 2.1.
|
|
# \return The name of the corresponding printer in Cura 2.2.
|
|
@staticmethod
|
|
def translatePrinter(printer):
|
|
if printer in _printer_translations:
|
|
return _printer_translations[printer]
|
|
return printer #Doesn't need to be translated.
|
|
|
|
## Translates a built-in profile name that might have changed since the
|
|
# last version.
|
|
#
|
|
# \param profile A profile name in the old version.
|
|
# \return The corresponding profile name in the new version.
|
|
@staticmethod
|
|
def translateProfile(profile):
|
|
if profile in _profile_translations:
|
|
return _profile_translations[profile]
|
|
return profile #Doesn't need to be translated.
|
|
|
|
## Updates settings for the change from Cura 2.1 to 2.2.
|
|
#
|
|
# The keys and values of settings are changed to what they should be in
|
|
# the new version. Each setting is changed in-place in the provided
|
|
# dictionary. This changes the input parameter.
|
|
#
|
|
# \param settings A dictionary of settings (as key-value pairs) to update.
|
|
# \return The same dictionary.
|
|
@staticmethod
|
|
def translateSettings(settings):
|
|
for key, value in settings.items():
|
|
if key == "fill_perimeter_gaps": #Setting is removed.
|
|
del settings[key]
|
|
elif key == "remove_overlapping_walls_0_enabled": #Setting is functionally replaced.
|
|
del settings[key]
|
|
settings["travel_compensate_overlapping_walls_0_enabled"] = value
|
|
elif key == "remove_overlapping_walls_enabled": #Setting is functionally replaced.
|
|
del settings[key]
|
|
settings["travel_compensate_overlapping_walls_enabled"] = value
|
|
elif key == "remove_overlapping_walls_x_enabled": #Setting is functionally replaced.
|
|
del settings[key]
|
|
settings["travel_compensate_overlapping_walls_x_enabled"] = value
|
|
elif key == "retraction_combing": #Combing was made into an enum instead of a boolean.
|
|
settings[key] = "off" if (value == "False") else "all"
|
|
elif key == "retraction_hop": #Setting key was changed.
|
|
del settings[key]
|
|
settings["retraction_hop_enabled"] = value
|
|
elif key == "speed_support_lines": #Setting key was changed.
|
|
del settings[key]
|
|
settings["speed_support_infill"] = value
|
|
return settings
|
|
|
|
## Translates a setting name for the change from Cura 2.1 to 2.2.
|
|
#
|
|
# \param setting The name of a setting in Cura 2.1.
|
|
# \return The name of the corresponding setting in Cura 2.2.
|
|
@staticmethod
|
|
def translateSettingName(setting):
|
|
if setting in _setting_name_translations:
|
|
return _setting_name_translations[setting]
|
|
return setting #Doesn't need to be translated.
|
|
|
|
## Translates a variant name for the change from Cura 2.1 to 2.2
|
|
#
|
|
# \param variant The name of a variant in Cura 2.1.
|
|
# \param machine The name of the machine this variant is part of in Cura
|
|
# 2.2's naming.
|
|
# \return The name of the corresponding variant in Cura 2.2.
|
|
@staticmethod
|
|
def translateVariant(variant, machine):
|
|
if machine in _variant_translations and variant in _variant_translations[machine]:
|
|
return _variant_translations[machine][variant]
|
|
return variant |