mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-05-19 02:57:29 +08:00
Merge branch '2.1' of https://github.com/Ultimaker/Cura into 2.1
This commit is contained in:
commit
4edc4ece86
@ -71,5 +71,87 @@
|
||||
"prime_tower_enable": "wipe_tower",
|
||||
"prime_tower_size": "math.sqrt(float(wipe_tower_volume) / float(layer_height))",
|
||||
"ooze_shield_enabled": "ooze_shield"
|
||||
},
|
||||
|
||||
"defaults": {
|
||||
"bottom_layer_speed": "20",
|
||||
"bottom_thickness": "0.3",
|
||||
"brim_line_count": "20",
|
||||
"cool_head_lift": "False",
|
||||
"cool_min_feedrate": "10",
|
||||
"cool_min_layer_time": "5",
|
||||
"fan_enabled": "True",
|
||||
"fan_full_height": "0.5",
|
||||
"fan_speed": "100",
|
||||
"fan_speed_max": "100",
|
||||
"filament_diameter": "2.85",
|
||||
"filament_diameter2": "0",
|
||||
"filament_diameter3": "0",
|
||||
"filament_diameter4": "0",
|
||||
"filament_diameter5": "0",
|
||||
"filament_flow": "100.0",
|
||||
"fill_density": "20",
|
||||
"fill_overlap": "15",
|
||||
"fix_horrible_extensive_stitching": "False",
|
||||
"fix_horrible_union_all_type_a": "True",
|
||||
"fix_horrible_union_all_type_b": "False",
|
||||
"fix_horrible_use_open_bits": "False",
|
||||
"infill_speed": "0.0",
|
||||
"inset0_speed": "0.0",
|
||||
"insetx_speed": "0.0",
|
||||
"layer_height": "0.1",
|
||||
"layer0_width_factor": "100",
|
||||
"nozzle_size": "0.4",
|
||||
"object_sink": "0.0",
|
||||
"ooze_shield": "False",
|
||||
"overlap_dual": "0.15",
|
||||
"perimeter_before_infill": "False",
|
||||
"platform_adhesion": "None",
|
||||
"print_bed_temperature": "70",
|
||||
"print_speed": "50",
|
||||
"print_temperature": "210",
|
||||
"print_temperature2": "0",
|
||||
"print_temperature3": "0",
|
||||
"print_temperature4": "0",
|
||||
"print_temperature5": "0",
|
||||
"raft_airgap": "0.22",
|
||||
"raft_airgap_all": "0.0",
|
||||
"raft_base_linewidth": "1.0",
|
||||
"raft_base_thickness": "0.3",
|
||||
"raft_interface_linewidth": "0.4",
|
||||
"raft_interface_thickness": "0.27",
|
||||
"raft_line_spacing": "3.0",
|
||||
"raft_margin": "5.0",
|
||||
"raft_surface_layers": "2",
|
||||
"raft_surface_linewidth": "0.4",
|
||||
"raft_surface_thickness": "0.27",
|
||||
"retraction_amount": "4.5",
|
||||
"retraction_combing": "All",
|
||||
"retraction_dual_amount": "16.5",
|
||||
"retraction_enable": "True",
|
||||
"retraction_hop": "0.0",
|
||||
"retraction_min_travel": "1.5",
|
||||
"retraction_minimal_extrusion": "0.02",
|
||||
"retraction_speed": "40.0",
|
||||
"simple_mode": "False",
|
||||
"skirt_gap": "3.0",
|
||||
"skirt_line_count": "1",
|
||||
"skirt_minimal_length": "150.0",
|
||||
"solid_bottom": "True",
|
||||
"solid_layer_thickness": "0.6",
|
||||
"solid_top": "True",
|
||||
"solidarea_speed": "0.0",
|
||||
"spiralize": "False",
|
||||
"support": "None",
|
||||
"support_angle": "60",
|
||||
"support_dual_extrusion": "Both",
|
||||
"support_fill_rate": "15",
|
||||
"support_type": "Lines",
|
||||
"support_xy_distance": "0.7",
|
||||
"support_z_distance": "0.15",
|
||||
"travel_speed": "150.0",
|
||||
"wall_thickness": "0.8",
|
||||
"wipe_tower": "False",
|
||||
"wipe_tower_volume": "15"
|
||||
}
|
||||
}
|
@ -23,6 +23,19 @@ class LegacyProfileReader(ProfileReader):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
|
||||
## Prepares the default values of all legacy settings.
|
||||
#
|
||||
# These are loaded from the Dictionary of Doom.
|
||||
#
|
||||
# \param json The JSON file to load the default setting values from. This
|
||||
# should not be a URL but a pre-loaded JSON handle.
|
||||
# \return A dictionary of the default values of the legacy Cura version.
|
||||
def prepareDefaults(self, json):
|
||||
defaults = {}
|
||||
for key in json["defaults"]: #We have to copy over all defaults from the JSON handle to a normal dict.
|
||||
defaults[key] = json["defaults"][key]
|
||||
return defaults
|
||||
|
||||
## Prepares the local variables that can be used in evaluation of computing
|
||||
# new setting values from the old ones.
|
||||
#
|
||||
@ -30,16 +43,17 @@ class LegacyProfileReader(ProfileReader):
|
||||
# and their values, so that they can be used in evaluating the new setting
|
||||
# values as Python code.
|
||||
#
|
||||
# \param parser The ConfigParser that finds the settings in the legacy
|
||||
# profile.
|
||||
# \param section The section in the profile where the settings should be
|
||||
# found.
|
||||
# \param config_parser The ConfigParser that finds the settings in the
|
||||
# legacy profile.
|
||||
# \param config_section The section in the profile where the settings
|
||||
# should be found.
|
||||
# \param defaults The default values for all settings in the legacy Cura.
|
||||
# \return A set of local variables, one for each setting in the legacy
|
||||
# profile.
|
||||
def prepareLocals(self, parser, section):
|
||||
locals = {}
|
||||
for option in parser.options(section):
|
||||
locals[option] = parser.get(section, option)
|
||||
def prepareLocals(self, config_parser, config_section, defaults):
|
||||
locals = defaults.copy() #Don't edit the original!
|
||||
for option in config_parser.options(config_section):
|
||||
locals[option] = config_parser.get(config_section, option)
|
||||
return locals
|
||||
|
||||
## Reads a legacy Cura profile from a file and returns it.
|
||||
@ -49,6 +63,7 @@ class LegacyProfileReader(ProfileReader):
|
||||
# file could not be read or didn't contain a valid profile, \code None
|
||||
# \endcode is returned.
|
||||
def read(self, file_name):
|
||||
Logger.log("i", "Importing legacy profile from file " + file_name + ".")
|
||||
profile = Profile(machine_manager = Application.getInstance().getMachineManager(), read_only = False) #Create an empty profile.
|
||||
profile.setName("Imported Legacy Profile")
|
||||
|
||||
@ -70,8 +85,6 @@ class LegacyProfileReader(ProfileReader):
|
||||
if not section: #No section starting with "profile" was found. Probably not a proper INI file.
|
||||
return None
|
||||
|
||||
legacy_settings = self.prepareLocals(parser, section) #Gets the settings from the legacy profile.
|
||||
|
||||
try:
|
||||
with open(os.path.join(PluginRegistry.getInstance().getPluginPath("LegacyProfileReader"), "DictionaryOfDoom.json"), "r", -1, "utf-8") as f:
|
||||
dict_of_doom = json.load(f) #Parse the Dictionary of Doom.
|
||||
@ -82,6 +95,9 @@ class LegacyProfileReader(ProfileReader):
|
||||
Logger.log("e", "Could not parse DictionaryOfDoom.json: %s", str(e))
|
||||
return None
|
||||
|
||||
defaults = self.prepareDefaults(dict_of_doom)
|
||||
legacy_settings = self.prepareLocals(parser, section, defaults) #Gets the settings from the legacy profile.
|
||||
|
||||
#Check the target version in the Dictionary of Doom with this application version.
|
||||
if "target_version" not in dict_of_doom:
|
||||
Logger.log("e", "Dictionary of Doom has no target version. Is it the correct JSON file?")
|
||||
@ -98,10 +114,14 @@ class LegacyProfileReader(ProfileReader):
|
||||
compiled = compile(old_setting_expression, new_setting, "eval")
|
||||
try:
|
||||
new_value = eval(compiled, {"math": math}, legacy_settings) #Pass the legacy settings as local variables to allow access to in the evaluation.
|
||||
value_using_defaults = eval(compiled, {"math": math}, defaults) #Evaluate again using only the default values to try to see if they are default.
|
||||
except Exception as e: #Probably some setting name that was missing or something else that went wrong in the ini file.
|
||||
Logger.log("w", "Setting " + new_setting + " could not be set because the evaluation failed. Something is probably missing from the imported legacy profile.")
|
||||
continue
|
||||
if profile.getSettingValue(new_setting) != new_value: #Not equal to the default.
|
||||
if new_value != value_using_defaults and profile.getSettingValue(new_setting) != new_value: #Not equal to the default in the new Cura OR the default in the legacy Cura.
|
||||
profile.setSettingValue(new_setting, new_value) #Store the setting in the profile!
|
||||
|
||||
if len(profile.getChangedSettings()) == 0:
|
||||
Logger.log("i", "A legacy profile was imported but everything evaluates to the defaults, creating an empty profile.")
|
||||
|
||||
return profile
|
Loading…
x
Reference in New Issue
Block a user