diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index fc5691f034..64dc4faceb 100755 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -848,10 +848,10 @@ class BuildVolume(SceneNode): """ result = {} - adhesion_extruder = None #type: ExtruderStack + skirt_brim_extruder: ExtruderStack = None for extruder in used_extruders: - if int(extruder.getProperty("extruder_nr", "value")) == int(self._global_container_stack.getProperty("adhesion_extruder_nr", "value")): - adhesion_extruder = extruder + if int(extruder.getProperty("extruder_nr", "value")) == int(self._global_container_stack.getProperty("skirt_brim_extruder_nr", "value")): + skirt_brim_extruder = extruder result[extruder.getId()] = [] # Currently, the only normally printed object is the prime tower. @@ -865,11 +865,11 @@ class BuildVolume(SceneNode): prime_tower_x = prime_tower_x - machine_width / 2 #Offset by half machine_width and _depth to put the origin in the front-left. prime_tower_y = prime_tower_y + machine_depth / 2 - if adhesion_extruder is not None and self._global_container_stack.getProperty("prime_tower_brim_enable", "value") and self._global_container_stack.getProperty("adhesion_type", "value") != "raft": + if skirt_brim_extruder is not None and self._global_container_stack.getProperty("prime_tower_brim_enable", "value") and self._global_container_stack.getProperty("adhesion_type", "value") != "raft": brim_size = ( - adhesion_extruder.getProperty("brim_line_count", "value") * - adhesion_extruder.getProperty("skirt_brim_line_width", "value") / 100.0 * - adhesion_extruder.getProperty("initial_layer_line_width_factor", "value") + skirt_brim_extruder.getProperty("brim_line_count", "value") * + skirt_brim_extruder.getProperty("skirt_brim_line_width", "value") / 100.0 * + skirt_brim_extruder.getProperty("initial_layer_line_width_factor", "value") ) prime_tower_x -= brim_size prime_tower_y += brim_size @@ -1100,18 +1100,18 @@ class BuildVolume(SceneNode): # with the adhesion extruder, but it also prints one extra line by all other extruders. As such, the # setting does *not* have a limit_to_extruder setting (which means that we can't ask the global extruder what # the value is. - adhesion_extruder = self._global_container_stack.getProperty("adhesion_extruder_nr", "value") + skirt_brim_extruder_nr = self._global_container_stack.getProperty("skirt_brim_extruder_nr", "value") try: - adhesion_stack = self._global_container_stack.extruderList[int(adhesion_extruder)] + skirt_brim_stack = self._global_container_stack.extruderList[int(skirt_brim_extruder_nr)] except IndexError: - Logger.warning(f"Couldn't find extruder with index '{adhesion_extruder}', defaulting to 0 instead.") - adhesion_stack = self._global_container_stack.extruderList[0] - skirt_brim_line_width = adhesion_stack.getProperty("skirt_brim_line_width", "value") + Logger.warning(f"Couldn't find extruder with index '{skirt_brim_extruder_nr}', defaulting to 0 instead.") + skirt_brim_stack = self._global_container_stack.extruderList[0] + skirt_brim_line_width = skirt_brim_stack.getProperty("skirt_brim_line_width", "value") - initial_layer_line_width_factor = adhesion_stack.getProperty("initial_layer_line_width_factor", "value") + initial_layer_line_width_factor = skirt_brim_stack.getProperty("initial_layer_line_width_factor", "value") # Use brim width if brim is enabled OR the prime tower has a brim. if adhesion_type == "brim": - brim_line_count = self._global_container_stack.getProperty("brim_line_count", "value") + brim_line_count = skirt_brim_stack.getProperty("brim_line_count", "value") bed_adhesion_size = skirt_brim_line_width * brim_line_count * initial_layer_line_width_factor / 100.0 for extruder_stack in used_extruders: @@ -1120,8 +1120,8 @@ class BuildVolume(SceneNode): # We don't create an additional line for the extruder we're printing the brim with. bed_adhesion_size -= skirt_brim_line_width * initial_layer_line_width_factor / 100.0 elif adhesion_type == "skirt": - skirt_distance = self._global_container_stack.getProperty("skirt_gap", "value") - skirt_line_count = self._global_container_stack.getProperty("skirt_line_count", "value") + skirt_distance = skirt_brim_stack.getProperty("skirt_gap", "value") + skirt_line_count = skirt_brim_stack.getProperty("skirt_line_count", "value") bed_adhesion_size = skirt_distance + ( skirt_brim_line_width * skirt_line_count) * initial_layer_line_width_factor / 100.0 @@ -1132,7 +1132,7 @@ class BuildVolume(SceneNode): # We don't create an additional line for the extruder we're printing the skirt with. bed_adhesion_size -= skirt_brim_line_width * initial_layer_line_width_factor / 100.0 elif adhesion_type == "raft": - bed_adhesion_size = self._global_container_stack.getProperty("raft_margin", "value") + bed_adhesion_size = self._global_container_stack.getProperty("raft_margin", "value") # Should refer to the raft extruder if set. elif adhesion_type == "none": bed_adhesion_size = 0 else: @@ -1220,7 +1220,7 @@ class BuildVolume(SceneNode): _tower_settings = ["prime_tower_enable", "prime_tower_size", "prime_tower_position_x", "prime_tower_position_y", "prime_tower_brim_enable"] _ooze_shield_settings = ["ooze_shield_enabled", "ooze_shield_dist"] _distance_settings = ["infill_wipe_dist", "travel_avoid_distance", "support_offset", "support_enable", "travel_avoid_other_parts", "travel_avoid_supports", "wall_line_count", "wall_line_width_0", "wall_line_width_x"] - _extruder_settings = ["support_enable", "support_bottom_enable", "support_roof_enable", "support_infill_extruder_nr", "support_extruder_nr_layer_0", "support_bottom_extruder_nr", "support_roof_extruder_nr", "brim_line_count", "adhesion_extruder_nr", "adhesion_type"] #Settings that can affect which extruders are used. - _limit_to_extruder_settings = ["wall_extruder_nr", "wall_0_extruder_nr", "wall_x_extruder_nr", "top_bottom_extruder_nr", "infill_extruder_nr", "support_infill_extruder_nr", "support_extruder_nr_layer_0", "support_bottom_extruder_nr", "support_roof_extruder_nr", "adhesion_extruder_nr"] + _extruder_settings = ["support_enable", "support_bottom_enable", "support_roof_enable", "support_infill_extruder_nr", "support_extruder_nr_layer_0", "support_bottom_extruder_nr", "support_roof_extruder_nr", "brim_line_count", "skirt_brim_extruder_nr", "raft_base_extruder_nr", "raft_interface_extruder_nr", "raft_surface_extruder_nr", "adhesion_type"] #Settings that can affect which extruders are used. + _limit_to_extruder_settings = ["wall_extruder_nr", "wall_0_extruder_nr", "wall_x_extruder_nr", "top_bottom_extruder_nr", "infill_extruder_nr", "support_infill_extruder_nr", "support_extruder_nr_layer_0", "support_bottom_extruder_nr", "support_roof_extruder_nr", "skirt_brim_extruder_nr", "raft_base_extruder_nr", "raft_interface_extruder_nr", "raft_surface_extruder_nr"] _material_size_settings = ["material_shrinkage_percentage", "material_shrinkage_percentage_xy", "material_shrinkage_percentage_z"] _disallowed_area_settings = _skirt_settings + _prime_settings + _tower_settings + _ooze_shield_settings + _distance_settings + _extruder_settings + _material_size_settings diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 701d3d987b..3095d7111b 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -259,11 +259,20 @@ class ExtruderManager(QObject): if support_roof_enabled: used_extruder_stack_ids.add(self.extruderIds[self.extruderValueWithDefault(str(global_stack.getProperty("support_roof_extruder_nr", "value")))]) - # The platform adhesion extruder. Not used if using none. - if global_stack.getProperty("adhesion_type", "value") != "none" or ( - global_stack.getProperty("prime_tower_brim_enable", "value") and - global_stack.getProperty("adhesion_type", "value") != 'raft'): - extruder_str_nr = str(global_stack.getProperty("adhesion_extruder_nr", "value")) + # The platform adhesion extruders. + used_adhesion_extruders = set() + adhesion_type = global_stack.getProperty("adhesion_type", "value") + if adhesion_type == "skirt" and (global_stack.getProperty("skirt_line_count", "value") > 0 or global_stack.getProperty("skirt_brim_minimal_length", "value") > 0): + used_adhesion_extruders.add("skirt_brim_extruder_nr") # There's a skirt. + if (adhesion_type == "brim" or global_stack.getProperty("prime_tower_brim_enable", "value")) and (global_stack.getProperty("brim_line_count", "value") > 0 or global_stack.getProperty("skirt_brim_minimal_length", "value") > 0): + used_adhesion_extruders.add("skirt_brim_extruder_nr") # There's a brim or prime tower brim. + if adhesion_type == "raft": + used_adhesion_extruders.add("raft_base_extruder_nr") + used_adhesion_extruders.add("raft_interface_extruder_nr") + if global_stack.getProperty("raft_surface_layers", "value") > 0: + used_adhesion_extruders.add("raft_surface_extruder_nr") + for extruder_setting in used_adhesion_extruders: + extruder_str_nr = str(global_stack.getProperty(extruder_setting, "value")) if extruder_str_nr == "-1": extruder_str_nr = self._application.getMachineManager().defaultExtruderPosition if extruder_str_nr in self.extruderIds: @@ -286,8 +295,11 @@ class ExtruderManager(QObject): global_stack = application.getGlobalContainerStack() # Starts with the adhesion extruder. - if global_stack.getProperty("adhesion_type", "value") != "none": - return global_stack.getProperty("adhesion_extruder_nr", "value") + adhesion_type = global_stack.getProperty("adhesion_type", "value") + if adhesion_type in {"skirt", "brim"}: + return global_stack.getProperty("skirt_brim_extruder_nr", "value") + if adhesion_type == "raft": + return global_stack.getProperty("raft_base_extruder_nr", "value") # No adhesion? Well maybe there is still support brim. if (global_stack.getProperty("support_enable", "value") or global_stack.getProperty("support_structure", "value") == "tree") and global_stack.getProperty("support_brim_enable", "value"): diff --git a/plugins/DigitalLibrary/resources/qml/SelectProjectPage.qml b/plugins/DigitalLibrary/resources/qml/SelectProjectPage.qml index 50d3cb61c5..89d282ab83 100644 --- a/plugins/DigitalLibrary/resources/qml/SelectProjectPage.qml +++ b/plugins/DigitalLibrary/resources/qml/SelectProjectPage.qml @@ -50,6 +50,7 @@ Item Layout.fillWidth: true implicitHeight: createNewProjectButton.height leftPadding: searchIcon.width + UM.Theme.getSize("default_margin").width * 2 + focus: true onTextEdited: manager.projectFilter = text //Update the search filter when editing this text field. diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 4b33b35daa..88a4a5ed4d 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -1248,12 +1248,14 @@ "label": "Minimum Feature Size", "description": "Minimum thickness of thin features. Model features that are thinner than this value will not be printed, while features thicker than the Minimum Feature Size will be widened to the Minimum Wall Line Width.", "unit": "mm", + "default_value": 0.1, "value": "wall_line_width_0 / 4", "minimum_value": "0", "maximum_value": "wall_line_width_0", "type": "float", "limit_to_extruder": "wall_0_extruder_nr", - "enabled": "fill_outline_gaps" + "enabled": "fill_outline_gaps", + "settable_per_mesh": true }, "min_bead_width": { @@ -1261,13 +1263,14 @@ "description": "Width of the wall that will replace thin features (according to the Minimum Feature Size) of the model. If the Minimum Wall Line Width is thinner than the thickness of the feature, the wall will become as thick as the feature itself.", "unit": "mm", "value": "wall_line_width_0 * (100.0 + wall_split_middle_threshold)/200", - "default_value": "0.2", + "default_value": 0.2, "minimum_value": "0.001", "minimum_value_warning": "min_feature_size", "maximum_value_warning": "wall_line_width_0", "type": "float", "limit_to_extruder": "wall_0_extruder_nr", - "enabled": "fill_outline_gaps" + "enabled": "fill_outline_gaps", + "settable_per_mesh": true }, "xy_offset": { @@ -3232,7 +3235,7 @@ "enabled": "resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('draft_shield_enabled') or resolveOrValue('ooze_shield_enabled')", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "skirt_brim_extruder_nr" }, "speed_z_hop": { @@ -3561,7 +3564,7 @@ "maximum_value_warning": "10000", "enabled": "resolveOrValue('acceleration_enabled') and (resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('draft_shield_enabled') or resolveOrValue('ooze_shield_enabled'))", "settable_per_mesh": false, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "skirt_brim_extruder_nr" }, "jerk_enabled": { @@ -3836,7 +3839,7 @@ "value": "jerk_layer_0", "enabled": "resolveOrValue('jerk_enabled') and (resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('draft_shield_enabled') or resolveOrValue('ooze_shield_enabled'))", "settable_per_mesh": false, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "skirt_brim_extruder_nr" } } }, @@ -5411,7 +5414,54 @@ "value": "int(defaultExtruderPosition())", "enabled": "extruders_enabled_count > 1 and (resolveOrValue('adhesion_type') != 'none' or resolveOrValue('prime_tower_brim_enable'))", "settable_per_mesh": false, - "settable_per_extruder": false + "settable_per_extruder": false, + "children": + { + "skirt_brim_extruder_nr": + { + "label": "Skirt/Brim Extruder", + "description": "The extruder train to use for printing the skirt or brim. This is used in multi-extrusion.", + "type": "extruder", + "default_value": "0", + "value": "adhesion_extruder_nr", + "enabled": "extruders_enabled_count > 1 and (resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('prime_tower_brim_enable'))", + "settable_per_mesh": false, + "settable_per_extruder": false + }, + "raft_base_extruder_nr": + { + "label": "Raft Base Extruder", + "description": "The extruder train to use for printing the first layer of the raft. This is used in multi-extrusion.", + "type": "extruder", + "default_value": "0", + "value": "adhesion_extruder_nr", + "enabled": "extruders_enabled_count > 1 and resolveOrValue('adhesion_type') == 'raft'", + "settable_per_mesh": false, + "settable_per_extruder": false + }, + "raft_interface_extruder_nr": + { + "label": "Raft Middle Extruder", + "description": "The extruder train to use for printing the middle layer of the raft. This is used in multi-extrusion.", + "type": "extruder", + "default_value": "0", + "value": "adhesion_extruder_nr", + "enabled": "extruders_enabled_count > 1 and resolveOrValue('adhesion_type') == 'raft'", + "settable_per_mesh": false, + "settable_per_extruder": false + }, + "raft_surface_extruder_nr": + { + "label": "Raft Top Extruder", + "description": "The extruder train to use for printing the top layer(s) of the raft. This is used in multi-extrusion.", + "type": "extruder", + "default_value": "0", + "value": "adhesion_extruder_nr", + "enabled": "extruders_enabled_count > 1 and resolveOrValue('adhesion_type') == 'raft' and raft_surface_layers > 0", + "settable_per_mesh": false, + "settable_per_extruder": false + } + } }, "skirt_line_count": { @@ -5425,7 +5475,7 @@ "enabled": "resolveOrValue('adhesion_type') == 'skirt'", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "skirt_brim_extruder_nr" }, "skirt_gap": { @@ -5439,7 +5489,7 @@ "enabled": "resolveOrValue('adhesion_type') == 'skirt'", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "skirt_brim_extruder_nr" }, "skirt_brim_minimal_length": { @@ -5468,7 +5518,7 @@ "enabled": "resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('prime_tower_brim_enable')", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "adhesion_extruder_nr", + "limit_to_extruder": "skirt_brim_extruder_nr", "children": { "brim_line_count": @@ -5484,7 +5534,7 @@ "enabled": "resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('prime_tower_brim_enable')", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "skirt_brim_extruder_nr" } } }, @@ -5500,7 +5550,7 @@ "enabled": "resolveOrValue('adhesion_type') == 'brim'", "settable_per_mesh": true, "settable_per_extruder": true, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "skirt_brim_extruder_nr" }, "brim_replaces_support": { @@ -5522,7 +5572,7 @@ "enabled": "resolveOrValue('adhesion_type') == 'brim'", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "skirt_brim_extruder_nr" }, "raft_margin": { @@ -5564,7 +5614,7 @@ "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "raft_surface_extruder_nr" }, "layer_0_z_overlap": { @@ -5579,7 +5629,7 @@ "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "raft_surface_extruder_nr" }, "raft_surface_layers": { @@ -5592,7 +5642,7 @@ "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "raft_interface_extruder_nr" }, "raft_surface_thickness": { @@ -5608,7 +5658,7 @@ "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "raft_surface_extruder_nr" }, "raft_surface_line_width": { @@ -5624,7 +5674,7 @@ "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "raft_surface_extruder_nr" }, "raft_surface_line_spacing": { @@ -5640,7 +5690,7 @@ "value": "raft_surface_line_width", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "raft_surface_extruder_nr" }, "raft_interface_thickness": { @@ -5656,7 +5706,7 @@ "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "raft_interface_extruder_nr" }, "raft_interface_line_width": { @@ -5672,7 +5722,7 @@ "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "raft_interface_extruder_nr" }, "raft_interface_line_spacing": { @@ -5688,7 +5738,7 @@ "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "raft_interface_extruder_nr" }, "raft_base_thickness": { @@ -5704,7 +5754,7 @@ "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "raft_base_extruder_nr" }, "raft_base_line_width": { @@ -5720,7 +5770,7 @@ "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "raft_base_extruder_nr" }, "raft_base_line_spacing": { @@ -5736,7 +5786,7 @@ "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "raft_base_extruder_nr" }, "raft_speed": { @@ -5769,7 +5819,7 @@ "value": "raft_speed", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "raft_surface_extruder_nr" }, "raft_interface_speed": { @@ -5785,7 +5835,7 @@ "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "raft_interface_extruder_nr" }, "raft_base_speed": { @@ -5801,7 +5851,7 @@ "value": "0.75 * raft_speed", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "raft_base_extruder_nr" } } }, @@ -5834,7 +5884,7 @@ "maximum_value_warning": "10000", "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('acceleration_enabled')", "settable_per_mesh": false, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "raft_surface_extruder_nr" }, "raft_interface_acceleration": { @@ -5849,7 +5899,7 @@ "maximum_value_warning": "10000", "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('acceleration_enabled')", "settable_per_mesh": false, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "raft_interface_extruder_nr" }, "raft_base_acceleration": { @@ -5864,7 +5914,7 @@ "maximum_value_warning": "10000", "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('acceleration_enabled')", "settable_per_mesh": false, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "raft_base_extruder_nr" } } }, @@ -5897,7 +5947,7 @@ "maximum_value_warning": "100", "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('jerk_enabled')", "settable_per_mesh": false, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "raft_surface_extruder_nr" }, "raft_interface_jerk": { @@ -5912,7 +5962,7 @@ "maximum_value_warning": "50", "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('jerk_enabled')", "settable_per_mesh": false, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "raft_interface_extruder_nr" }, "raft_base_jerk": { @@ -5927,7 +5977,7 @@ "maximum_value_warning": "50", "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('jerk_enabled')", "settable_per_mesh": false, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "raft_base_extruder_nr" } } }, @@ -5959,7 +6009,7 @@ "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "raft_surface_extruder_nr" }, "raft_interface_fan_speed": { @@ -5974,7 +6024,7 @@ "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "raft_interface_extruder_nr" }, "raft_base_fan_speed": { @@ -5989,7 +6039,7 @@ "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "adhesion_extruder_nr" + "limit_to_extruder": "raft_base_extruder_nr" } } } @@ -6051,7 +6101,7 @@ "unit": "mm", "enabled": "resolveOrValue('prime_tower_enable')", "default_value": 200, - "value": "machine_width - max(extruderValue(adhesion_extruder_nr, 'brim_width') * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 if adhesion_type == 'brim' or (prime_tower_brim_enable and adhesion_type != 'raft') else (extruderValue(adhesion_extruder_nr, 'raft_margin') if adhesion_type == 'raft' else (extruderValue(adhesion_extruder_nr, 'skirt_gap') if adhesion_type == 'skirt' else 0)), max(extruderValues('travel_avoid_distance'))) - max(extruderValues('support_offset')) - sum(extruderValues('skirt_brim_line_width')) * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 - (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0) - max(map(abs, extruderValues('machine_nozzle_offset_x'))) - 1", + "value": "machine_width - max(extruderValue(skirt_brim_extruder_nr, 'brim_width') * extruderValue(skirt_brim_extruder_nr, 'initial_layer_line_width_factor') / 100 if adhesion_type == 'brim' or (prime_tower_brim_enable and adhesion_type != 'raft') else (extruderValue(adhesion_extruder_nr, 'raft_margin') if adhesion_type == 'raft' else (extruderValue(skirt_brim_extruder_nr, 'skirt_gap') if adhesion_type == 'skirt' else 0)), max(extruderValues('travel_avoid_distance'))) - max(extruderValues('support_offset')) - sum(extruderValues('skirt_brim_line_width')) * extruderValue(skirt_brim_extruder_nr, 'initial_layer_line_width_factor') / 100 - (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0) - max(map(abs, extruderValues('machine_nozzle_offset_x'))) - 1", "maximum_value": "machine_width / 2 if machine_center_is_zero else machine_width", "minimum_value": "resolveOrValue('prime_tower_size') - machine_width / 2 if machine_center_is_zero else resolveOrValue('prime_tower_size')", "settable_per_mesh": false, @@ -6065,7 +6115,7 @@ "unit": "mm", "enabled": "resolveOrValue('prime_tower_enable')", "default_value": 200, - "value": "machine_depth - prime_tower_size - max(extruderValue(adhesion_extruder_nr, 'brim_width') * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 if adhesion_type == 'brim' or (prime_tower_brim_enable and adhesion_type != 'raft') else (extruderValue(adhesion_extruder_nr, 'raft_margin') if adhesion_type == 'raft' else (extruderValue(adhesion_extruder_nr, 'skirt_gap') if adhesion_type == 'skirt' else 0)), max(extruderValues('travel_avoid_distance'))) - max(extruderValues('support_offset')) - sum(extruderValues('skirt_brim_line_width')) * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 - (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0) - max(map(abs, extruderValues('machine_nozzle_offset_y'))) - 3", + "value": "machine_depth - prime_tower_size - max(extruderValue(skirt_brim_extruder_nr, 'brim_width') * extruderValue(skirt_brim_extruder_nr, 'initial_layer_line_width_factor') / 100 if adhesion_type == 'brim' or (prime_tower_brim_enable and adhesion_type != 'raft') else (extruderValue(adhesion_extruder_nr, 'raft_margin') if adhesion_type == 'raft' else (extruderValue(skirt_brim_extruder_nr, 'skirt_gap') if adhesion_type == 'skirt' else 0)), max(extruderValues('travel_avoid_distance'))) - max(extruderValues('support_offset')) - sum(extruderValues('skirt_brim_line_width')) * extruderValue(skirt_brim_extruder_nr, 'initial_layer_line_width_factor') / 100 - (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0) - max(map(abs, extruderValues('machine_nozzle_offset_y'))) - 3", "maximum_value": "machine_depth / 2 - resolveOrValue('prime_tower_size') if machine_center_is_zero else machine_depth - resolveOrValue('prime_tower_size')", "minimum_value": "machine_depth / -2 if machine_center_is_zero else 0", "settable_per_mesh": false, diff --git a/resources/qml/ActionButton.qml b/resources/qml/ActionButton.qml index 62bea5df3b..c84018fb07 100644 --- a/resources/qml/ActionButton.qml +++ b/resources/qml/ActionButton.qml @@ -148,8 +148,8 @@ Button // Using parent.width is fine in fixedWidthMode. target: buttonText property: "width" - value: button.fixedWidthMode ? button.width - button.leftPadding - button.rightPadding - : ((maximumWidth != 0 && button.contentWidth > maximumWidth) ? maximumWidth : undefined) + value: button.fixedWidthMode ? (button.width - button.leftPadding - button.rightPadding) + : ((button.maximumWidth != 0 && button.implicitContentWidth > button.maximumWidth) ? (button.maximumWidth - (button.width - button.implicitContentWidth) * 2) : undefined) } } diff --git a/resources/qml/Preferences/GeneralPage.qml b/resources/qml/Preferences/GeneralPage.qml index e7323393ec..7ea89e34ba 100644 --- a/resources/qml/Preferences/GeneralPage.qml +++ b/resources/qml/Preferences/GeneralPage.qml @@ -17,6 +17,8 @@ UM.PreferencesPage title: catalog.i18nc("@title:tab", "General") id: generalPreferencesPage + width: parent.width + function setDefaultLanguage(languageCode) { //loops through the languageList and sets the language using the languageCode @@ -128,14 +130,14 @@ UM.PreferencesPage ScrollView { + id: preferencesScrollView width: parent.width height: parent.height Column { - - //: Language selection label UM.I18nCatalog{id: catalog; name: "cura"} + width: preferencesScrollView.viewport.width Label { @@ -212,7 +214,7 @@ UM.PreferencesPage Label { id: currencyLabel - text: catalog.i18nc("@label","Currency:") + text: catalog.i18nc("@label", "Currency:") } TextField diff --git a/resources/setting_visibility/expert.cfg b/resources/setting_visibility/expert.cfg index 7882dfda15..0c10d9581b 100644 --- a/resources/setting_visibility/expert.cfg +++ b/resources/setting_visibility/expert.cfg @@ -289,6 +289,7 @@ support_mesh_drop_down prime_blob_enable adhesion_type adhesion_extruder_nr +raft_surface_extruder_nr skirt_line_count skirt_gap skirt_brim_minimal_length diff --git a/tests/TestBuildVolume.py b/tests/TestBuildVolume.py index f59d83df5e..843b9e9d12 100644 --- a/tests/TestBuildVolume.py +++ b/tests/TestBuildVolume.py @@ -96,7 +96,12 @@ class TestCalculateBedAdhesionSize: self.createAndSetGlobalStack(build_volume) patched_dictionary = self.setting_property_dict.copy() patched_dictionary.update(setting_dict) - patched_dictionary.update({"adhesion_extruder_nr": {"value": 0}}) + patched_dictionary.update({ + "skirt_brim_extruder_nr": {"value": 0}, + "raft_base_extruder_nr": {"value": 0}, + "raft_interface_extruder_nr": {"value": 0}, + "raft_surface_extruder_nr": {"value": 0} + }) with patch.dict(self.setting_property_dict, patched_dictionary): assert build_volume._calculateBedAdhesionSize([]) == result