diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py
index 742d1872cb5..56abfc0fa15 100755
--- a/cura/BuildVolume.py
+++ b/cura/BuildVolume.py
@@ -880,7 +880,7 @@ def _computeDisallowedAreasPrinted(self, used_extruders):
result[extruder.getId()] = []
# Currently, the only normally printed object is the prime tower.
- if self._global_container_stack.getProperty("prime_tower_enable", "value"):
+ if self._global_container_stack.getProperty("prime_tower_mode", "value") != 'none':
prime_tower_size = self._global_container_stack.getProperty("prime_tower_size", "value")
machine_width = self._global_container_stack.getProperty("machine_width", "value")
machine_depth = self._global_container_stack.getProperty("machine_depth", "value")
@@ -1208,7 +1208,7 @@ def _clamp(self, value, min_value, max_value):
_raft_settings = ["adhesion_type", "raft_base_thickness", "raft_interface_layers", "raft_interface_thickness", "raft_surface_layers", "raft_surface_thickness", "raft_airgap", "layer_0_z_overlap"]
_extra_z_settings = ["retraction_hop_enabled", "retraction_hop"]
_prime_settings = ["extruder_prime_pos_x", "extruder_prime_pos_y", "prime_blob_enable"]
- _tower_settings = ["prime_tower_enable", "prime_tower_size", "prime_tower_position_x", "prime_tower_position_y", "prime_tower_brim_enable", "prime_tower_base_size", "prime_tower_base_height"]
+ _tower_settings = ["prime_tower_mode", "prime_tower_size", "prime_tower_position_x", "prime_tower_position_y", "prime_tower_brim_enable", "prime_tower_base_size", "prime_tower_base_height"]
_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", "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.
diff --git a/plugins/SliceInfoPlugin/SliceInfo.py b/plugins/SliceInfoPlugin/SliceInfo.py
index 7e7a132c989..04e083520b0 100755
--- a/plugins/SliceInfoPlugin/SliceInfo.py
+++ b/plugins/SliceInfoPlugin/SliceInfo.py
@@ -263,7 +263,7 @@ def _onWriteStarted(self, output_device):
print_settings["retraction_enable"] = global_stack.getProperty("retraction_enable", "value")
# Prime tower settings
- print_settings["prime_tower_enable"] = global_stack.getProperty("prime_tower_enable", "value")
+ print_settings["prime_tower_mode"] = global_stack.getProperty("prime_tower_mode", "value")
# Infill settings
print_settings["infill_sparse_density"] = global_stack.getProperty("infill_sparse_density", "value")
diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json
index 31a67d01221..a66c623826a 100644
--- a/resources/definitions/fdmprinter.def.json
+++ b/resources/definitions/fdmprinter.def.json
@@ -963,7 +963,7 @@
"description": "Width of a single prime tower line.",
"type": "float",
"unit": "mm",
- "enabled": "resolveOrValue('prime_tower_enable')",
+ "enabled": "resolveOrValue('prime_tower_mode') != 'none'",
"default_value": 0.4,
"value": "line_width",
"minimum_value": "0.001",
@@ -3347,7 +3347,7 @@
"description": "The speed at which the prime tower is printed. Printing the prime tower slower can make it more stable when the adhesion between the different filaments is suboptimal.",
"type": "float",
"unit": "mm/s",
- "enabled": "resolveOrValue('prime_tower_enable')",
+ "enabled": "resolveOrValue('prime_tower_mode') != 'none'",
"default_value": 60,
"value": "speed_print",
"minimum_value": "0.1",
@@ -3725,7 +3725,7 @@
"maximum_value_warning": "10000",
"default_value": 3000,
"value": "acceleration_print",
- "enabled": "resolveOrValue('prime_tower_enable') and resolveOrValue('acceleration_enabled')",
+ "enabled": "resolveOrValue('prime_tower_mode') != 'none' and resolveOrValue('acceleration_enabled')",
"settable_per_mesh": false
}
}
@@ -4044,7 +4044,7 @@
"maximum_value_warning": "50",
"default_value": 20,
"value": "jerk_print",
- "enabled": "resolveOrValue('prime_tower_enable') and resolveOrValue('jerk_enabled')",
+ "enabled": "resolveOrValue('prime_tower_mode') != 'none' and resolveOrValue('jerk_enabled')",
"settable_per_mesh": false
}
}
@@ -6766,14 +6766,20 @@
"description": "Settings used for printing with multiple extruders.",
"children":
{
- "prime_tower_enable":
+ "prime_tower_mode":
{
- "label": "Enable Prime Tower",
- "description": "Print a tower next to the print which serves to prime the material after each nozzle switch.",
- "type": "bool",
+ "label": "Prime Tower",
+ "description": "Print a tower next to the model, which serves to prime the material after each nozzle switch.
- None: do not generate a prime tower
- Bucket: generate a bucket in which secondary materials are primed
- Sparse: generate a prime tower as sparse as possible. This will save time and filament, but is only possible if the used materials adhere to each other.
",
+ "type": "enum",
+ "value": "'optimized' if all(material_type == extruderValues('material_type')[0] for material_type in extruderValues('material_type')) else 'optimized_consistent'",
+ "options":
+ {
+ "none": "None",
+ "bucket": "Bucket",
+ "sparse": "Sparse"
+ },
+ "default_value": "none",
"enabled": "extruders_enabled_count > 1",
- "default_value": false,
- "resolve": "(extruders_enabled_count > 1) and any(extruderValues('prime_tower_enable'))",
"settable_per_mesh": false,
"settable_per_extruder": false
},
@@ -6783,7 +6789,7 @@
"description": "The width of the prime tower.",
"type": "float",
"unit": "mm",
- "enabled": "resolveOrValue('prime_tower_enable')",
+ "enabled": "resolveOrValue('prime_tower_mode') != 'none'",
"default_value": 20,
"resolve": "max(extruderValues('prime_tower_size'))",
"minimum_value": "0",
@@ -6802,7 +6808,20 @@
"default_value": 6,
"minimum_value": "0",
"maximum_value_warning": "(resolveOrValue('prime_tower_size') * 0.5) ** 2 * 3.14159 * resolveOrValue('layer_height') - sum(extruderValues('prime_tower_min_volume')) + prime_tower_min_volume",
- "enabled": "resolveOrValue('prime_tower_enable')",
+ "enabled": "resolveOrValue('prime_tower_mode') != 'none'",
+ "settable_per_mesh": false,
+ "settable_per_extruder": true
+ },
+ "prime_tower_max_bridging_distance":
+ {
+ "label": "Prime Tower Maximum Bridging Distance",
+ "description": "The maximum length of the branches which may be printed over the air.",
+ "unit": "mm",
+ "type": "float",
+ "default_value": 5,
+ "minimum_value": "line_width",
+ "maximum_value_warning": "10.0",
+ "enabled": "resolveOrValue('prime_tower_mode') == 'sparse' or resolveOrValue('prime_tower_mode') == 'bucket'",
"settable_per_mesh": false,
"settable_per_extruder": true
},
@@ -6812,7 +6831,7 @@
"description": "The x coordinate of the position of the prime tower.",
"type": "float",
"unit": "mm",
- "enabled": "resolveOrValue('prime_tower_enable')",
+ "enabled": "resolveOrValue('prime_tower_mode') != 'none'",
"default_value": 200,
"value": "(resolveOrValue('machine_width') / 2 + resolveOrValue('prime_tower_size') / 2) if resolveOrValue('machine_shape') == 'elliptic' else (resolveOrValue('machine_width') - (resolveOrValue('prime_tower_base_size') if (resolveOrValue('adhesion_type') == 'raft' or resolveOrValue('prime_tower_brim_enable')) else 0) - max(max(extruderValues('travel_avoid_distance')) + max(extruderValues('machine_nozzle_offset_x')) + max(extruderValues('support_offset')) + (extruderValue(skirt_brim_extruder_nr, 'skirt_brim_line_width') * extruderValue(skirt_brim_extruder_nr, 'skirt_line_count') * extruderValue(skirt_brim_extruder_nr, 'initial_layer_line_width_factor') / 100 + extruderValue(skirt_brim_extruder_nr, 'skirt_gap') if resolveOrValue('adhesion_type') == 'skirt' else 0) + (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0), max(map(abs, extruderValues('machine_nozzle_offset_x'))), 1)) - (resolveOrValue('machine_width') / 2 if resolveOrValue('machine_center_is_zero') else 0)",
"maximum_value": "(machine_width / 2 if machine_center_is_zero else machine_width) - (resolveOrValue('prime_tower_base_size') if (resolveOrValue('adhesion_type') == 'raft' or resolveOrValue('prime_tower_brim_enable')) else 0)",
@@ -6826,7 +6845,7 @@
"description": "The y coordinate of the position of the prime tower.",
"type": "float",
"unit": "mm",
- "enabled": "resolveOrValue('prime_tower_enable')",
+ "enabled": "resolveOrValue('prime_tower_mode') != 'none'",
"default_value": 200,
"value": "machine_depth - prime_tower_size - (resolveOrValue('prime_tower_base_size') if (resolveOrValue('adhesion_type') == 'raft' or resolveOrValue('prime_tower_brim_enable')) else 0) - max(max(extruderValues('travel_avoid_distance')) + max(extruderValues('machine_nozzle_offset_y')) + max(extruderValues('support_offset')) + (extruderValue(skirt_brim_extruder_nr, 'skirt_brim_line_width') * extruderValue(skirt_brim_extruder_nr, 'skirt_line_count') * extruderValue(skirt_brim_extruder_nr, 'initial_layer_line_width_factor') / 100 + extruderValue(skirt_brim_extruder_nr, 'skirt_gap') if resolveOrValue('adhesion_type') == 'skirt' else 0) + (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0), max(map(abs, extruderValues('machine_nozzle_offset_y'))), 1) - (resolveOrValue('machine_depth') / 2 if resolveOrValue('machine_center_is_zero') else 0)",
"maximum_value": "(machine_depth / 2 - resolveOrValue('prime_tower_size') if machine_center_is_zero else machine_depth - resolveOrValue('prime_tower_size')) - (resolveOrValue('prime_tower_base_size') if (resolveOrValue('adhesion_type') == 'raft' or resolveOrValue('prime_tower_brim_enable')) else 0)",
@@ -6839,7 +6858,7 @@
"label": "Wipe Inactive Nozzle on Prime Tower",
"description": "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower.",
"type": "bool",
- "enabled": "resolveOrValue('prime_tower_enable')",
+ "enabled": "resolveOrValue('prime_tower_mode') != 'none'",
"default_value": true,
"settable_per_mesh": false,
"settable_per_extruder": true
@@ -6850,7 +6869,7 @@
"label": "Prime Tower Base",
"description": "By enabling this setting, your prime-tower will get a brim, even if the model doesn't. If you want a sturdier base for a high tower, you can increase the base height.",
"type": "bool",
- "enabled": "resolveOrValue('prime_tower_enable') and resolveOrValue('adhesion_type') != 'raft'",
+ "enabled": "resolveOrValue('prime_tower_mode') != 'none' and resolveOrValue('adhesion_type') != 'raft'",
"default_value": false,
"settable_per_mesh": false,
"settable_per_extruder": false
@@ -6862,7 +6881,7 @@
"description": "The width of the prime tower brim/base. A larger base enhances adhesion to the build plate, but also reduces the effective print area.",
"type": "float",
"unit": "mm",
- "enabled": "resolveOrValue('prime_tower_enable') and (resolveOrValue('prime_tower_brim_enable') or resolveOrValue('adhesion_type') == 'raft')",
+ "enabled": "resolveOrValue('prime_tower_mode') != 'none' and (resolveOrValue('prime_tower_brim_enable') or resolveOrValue('adhesion_type') == 'raft')",
"default_value": 1.2,
"minimum_value": "0",
"maximum_value": "min(0.5 * machine_width, 0.5 * machine_depth)",
@@ -6876,7 +6895,7 @@
"description": "The height of the prime tower base. Increasing this value will result in a more sturdy prime tower because the base will be wider. If this setting is too low, the prime tower will not have a sturdy base.",
"type": "float",
"unit": "mm",
- "enabled": "resolveOrValue('prime_tower_enable') and (resolveOrValue('prime_tower_brim_enable') or resolveOrValue('adhesion_type') == 'raft')",
+ "enabled": "resolveOrValue('prime_tower_mode') != 'none' and (resolveOrValue('prime_tower_brim_enable') or resolveOrValue('adhesion_type') == 'raft')",
"default_value": 0,
"minimum_value": "0",
"maximum_value": "machine_height",
@@ -6888,7 +6907,7 @@
"label": "Prime Tower Base Slope",
"description": "The magnitude factor used for the slope of the prime tower base. If you increase this value, the base will become slimmer. If you decrease it, the base will become thicker.",
"type": "float",
- "enabled": "resolveOrValue('prime_tower_enable') and (resolveOrValue('prime_tower_brim_enable') or resolveOrValue('adhesion_type') == 'raft')",
+ "enabled": "resolveOrValue('prime_tower_mode') != 'none' and (resolveOrValue('prime_tower_brim_enable') or resolveOrValue('adhesion_type') == 'raft')",
"default_value": 4,
"minimum_value": "0",
"maximum_value": "10",
@@ -6906,7 +6925,7 @@
"minimum_value": "0",
"minimum_value_warning": "raft_base_line_width",
"maximum_value_warning": "100",
- "enabled": "resolveOrValue('prime_tower_enable') and resolveOrValue('adhesion_type') == 'raft'",
+ "enabled": "resolveOrValue('prime_tower_mode') != 'none' and resolveOrValue('adhesion_type') == 'raft'",
"settable_per_mesh": false,
"settable_per_extruder": true,
"limit_to_extruder": "raft_base_extruder_nr"
diff --git a/resources/setting_visibility/advanced.cfg b/resources/setting_visibility/advanced.cfg
index c3451d2c981..1b59302c4d8 100644
--- a/resources/setting_visibility/advanced.cfg
+++ b/resources/setting_visibility/advanced.cfg
@@ -127,7 +127,7 @@ brim_line_count
brim_outside_only
[dual]
-prime_tower_enable
+prime_tower_mode
prime_tower_position_x
prime_tower_position_y
prime_tower_brim_enable
diff --git a/resources/setting_visibility/basic.cfg b/resources/setting_visibility/basic.cfg
index 0193eb26ba7..f5552f3cd88 100644
--- a/resources/setting_visibility/basic.cfg
+++ b/resources/setting_visibility/basic.cfg
@@ -53,7 +53,7 @@ adhesion_type
adhesion_extruder_nr
[dual]
-prime_tower_enable
+prime_tower_mode
prime_tower_position_x
prime_tower_position_y
diff --git a/resources/setting_visibility/expert.cfg b/resources/setting_visibility/expert.cfg
index 2a71993998f..5439cdcab83 100644
--- a/resources/setting_visibility/expert.cfg
+++ b/resources/setting_visibility/expert.cfg
@@ -355,7 +355,7 @@ raft_fan_speed
raft_is_shrink_plate
[dual]
-prime_tower_enable
+prime_tower_mode
prime_tower_size
prime_tower_min_volume
prime_tower_position_x
@@ -366,6 +366,7 @@ prime_tower_base_size
prime_tower_base_height
prime_tower_base_curve_magnitude
prime_tower_raft_base_line_spacing
+prime_tower_max_bridging_distance
ooze_shield_enabled
ooze_shield_angle
ooze_shield_dist