Merge branch '2.1' of https://github.com/Ultimaker/Cura into 2.1

This commit is contained in:
Tim Kuipers 2016-01-26 15:55:13 +01:00
commit 4edc4ece86
2 changed files with 113 additions and 11 deletions

View File

@ -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"
}
}

View File

@ -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