From f62e8b4bb243fb75737b2fe26ee97397077d152e Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Fri, 21 Dec 2018 17:38:30 +0100 Subject: [PATCH 1/6] Create 'brim for prime tower only' option (see also backend PR). [CURA-5864] --- cura/BuildVolume.py | 13 +++++++++++-- cura/Settings/ExtruderManager.py | 3 ++- plugins/SliceInfoPlugin/SliceInfo.py | 1 + resources/definitions/fdmprinter.def.json | 10 ++++++++++ 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index aa1f170707..3734c3427f 100755 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -785,6 +785,15 @@ 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 ExtruderManager.getInstance().getResolveOrValue("prime_tower_brim_enable"): + brim_size = ( + extruder.getProperty("brim_line_count", "value") * + extruder.getProperty("skirt_brim_line_width", "value") / 100.0 * + extruder.getProperty("initial_layer_line_width_factor", "value") + ) + prime_tower_x -= brim_size + prime_tower_y += brim_size + if self._global_container_stack.getProperty("prime_tower_circular", "value"): radius = prime_tower_size / 2 prime_tower_area = Polygon.approximatedCircle(radius) @@ -1024,7 +1033,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 == "brim": + elif adhesion_type == "brim" or self._global_container_stack.getProperty("prime_tower_brim_enable", "value"): brim_line_count = self._global_container_stack.getProperty("brim_line_count", "value") bed_adhesion_size = skirt_brim_line_width * brim_line_count * initial_layer_line_width_factor / 100.0 @@ -1077,7 +1086,7 @@ class BuildVolume(SceneNode): _raft_settings = ["adhesion_type", "raft_base_thickness", "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", "extruder_prime_pos_z", "prime_blob_enable"] - _tower_settings = ["prime_tower_enable", "prime_tower_circular", "prime_tower_size", "prime_tower_position_x", "prime_tower_position_y"] + _tower_settings = ["prime_tower_enable", "prime_tower_circular", "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"] _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. diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 8fa0172305..b12d88307a 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -264,7 +264,8 @@ class ExtruderManager(QObject): 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": + if (global_stack.getProperty("adhesion_type", "value") != "none" or + global_stack.getProperty("prime_tower_brim_enable", "value")): extruder_str_nr = str(global_stack.getProperty("adhesion_extruder_nr", "value")) if extruder_str_nr == "-1": extruder_str_nr = self._application.getMachineManager().defaultExtruderPosition diff --git a/plugins/SliceInfoPlugin/SliceInfo.py b/plugins/SliceInfoPlugin/SliceInfo.py index 5149b6a6a6..5902d3a720 100755 --- a/plugins/SliceInfoPlugin/SliceInfo.py +++ b/plugins/SliceInfoPlugin/SliceInfo.py @@ -251,6 +251,7 @@ class SliceInfo(QObject, Extension): # Prime tower settings print_settings["prime_tower_enable"] = global_stack.getProperty("prime_tower_enable", "value") + print_settings["prime_tower_brim_enable"] = global_stack.getProperty("prime_tower_brim_enable", "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 f39e267354..8fdf650e9a 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -5317,6 +5317,16 @@ "settable_per_mesh": false, "settable_per_extruder": true }, + "prime_tower_brim_enable": + { + "label": "Prime Tower Brim", + "description": "Prime-towers might need the extra adhesion afforded by a brim even if the model doesn't.", + "type": "bool", + "enabled": "resolveOrValue('prime_tower_enable')", + "default_value": false, + "settable_per_mesh": false, + "settable_per_extruder": false + }, "ooze_shield_enabled": { "label": "Enable Ooze Shield", From 4065c831882f26d59745fadc53f63d73d8f942b9 Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Fri, 21 Dec 2018 17:57:47 +0100 Subject: [PATCH 2/6] Show settings prime-tower-only brim depends on when active. [CURA-5864] --- resources/definitions/fdmprinter.def.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 8fdf650e9a..502bcf1454 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -876,7 +876,7 @@ "default_value": 0.4, "type": "float", "value": "line_width", - "enabled": "resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim'", + "enabled": "resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('prime_tower_brim_enabled')", "settable_per_mesh": false, "settable_per_extruder": true }, @@ -4636,7 +4636,7 @@ "type": "extruder", "default_value": "0", "value": "defaultExtruderPosition()", - "enabled": "extruders_enabled_count > 1 and resolveOrValue('adhesion_type') != 'none'", + "enabled": "extruders_enabled_count > 1 and (resolveOrValue('adhesion_type') != 'none' or resolveOrValue('prime_tower_brim_enabled'))", "settable_per_mesh": false, "settable_per_extruder": false }, @@ -4677,7 +4677,7 @@ "minimum_value": "0", "minimum_value_warning": "25", "maximum_value_warning": "2500", - "enabled": "resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim'", + "enabled": "resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('prime_tower_brim_enabled')", "settable_per_mesh": false, "settable_per_extruder": true }, @@ -4690,7 +4690,7 @@ "default_value": 8.0, "minimum_value": "0.0", "maximum_value_warning": "50.0", - "enabled": "resolveOrValue('adhesion_type') == 'brim'", + "enabled": "resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('prime_tower_brim_enabled')", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "adhesion_extruder_nr", @@ -4705,7 +4705,7 @@ "minimum_value": "0", "maximum_value_warning": "50 / skirt_brim_line_width", "value": "math.ceil(brim_width / (skirt_brim_line_width * initial_layer_line_width_factor / 100.0))", - "enabled": "resolveOrValue('adhesion_type') == 'brim'", + "enabled": "resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('prime_tower_brim_enabled')", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "adhesion_extruder_nr" @@ -5272,7 +5272,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' 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) - 1", + "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 resolveOrValue('prime_tower_brim_enabled') 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) - 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, @@ -5286,7 +5286,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' 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) - 1", + "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 resolveOrValue('prime_tower_brim_enabled') 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) - 1", "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, From 03bed3462c5b91dde843eb57d4e315d7b43664da Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Thu, 10 Jan 2019 15:26:37 +0100 Subject: [PATCH 3/6] SliceInfo doesn't need to be aware of brim for prime tower only. [CURA-5864] --- plugins/SliceInfoPlugin/SliceInfo.py | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/SliceInfoPlugin/SliceInfo.py b/plugins/SliceInfoPlugin/SliceInfo.py index 5902d3a720..5149b6a6a6 100755 --- a/plugins/SliceInfoPlugin/SliceInfo.py +++ b/plugins/SliceInfoPlugin/SliceInfo.py @@ -251,7 +251,6 @@ class SliceInfo(QObject, Extension): # Prime tower settings print_settings["prime_tower_enable"] = global_stack.getProperty("prime_tower_enable", "value") - print_settings["prime_tower_brim_enable"] = global_stack.getProperty("prime_tower_brim_enable", "value") # Infill settings print_settings["infill_sparse_density"] = global_stack.getProperty("infill_sparse_density", "value") From eda7ec492e6078141a36c8c143a339b6d4451467 Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Tue, 22 Jan 2019 13:32:38 +0100 Subject: [PATCH 4/6] 'Prime-tower brim' setting only visible when adhesion is set to 'None'. Also fix spelling. [CURA-5864] --- resources/definitions/fdmprinter.def.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 502bcf1454..3c12733ee5 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -876,7 +876,7 @@ "default_value": 0.4, "type": "float", "value": "line_width", - "enabled": "resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('prime_tower_brim_enabled')", + "enabled": "resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('prime_tower_brim_enable')", "settable_per_mesh": false, "settable_per_extruder": true }, @@ -4636,7 +4636,7 @@ "type": "extruder", "default_value": "0", "value": "defaultExtruderPosition()", - "enabled": "extruders_enabled_count > 1 and (resolveOrValue('adhesion_type') != 'none' or resolveOrValue('prime_tower_brim_enabled'))", + "enabled": "extruders_enabled_count > 1 and (resolveOrValue('adhesion_type') != 'none' or resolveOrValue('prime_tower_brim_enable'))", "settable_per_mesh": false, "settable_per_extruder": false }, @@ -4677,7 +4677,7 @@ "minimum_value": "0", "minimum_value_warning": "25", "maximum_value_warning": "2500", - "enabled": "resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('prime_tower_brim_enabled')", + "enabled": "resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('prime_tower_brim_enable')", "settable_per_mesh": false, "settable_per_extruder": true }, @@ -4690,7 +4690,7 @@ "default_value": 8.0, "minimum_value": "0.0", "maximum_value_warning": "50.0", - "enabled": "resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('prime_tower_brim_enabled')", + "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", @@ -4705,7 +4705,7 @@ "minimum_value": "0", "maximum_value_warning": "50 / skirt_brim_line_width", "value": "math.ceil(brim_width / (skirt_brim_line_width * initial_layer_line_width_factor / 100.0))", - "enabled": "resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('prime_tower_brim_enabled')", + "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" @@ -5272,7 +5272,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 resolveOrValue('prime_tower_brim_enabled') 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) - 1", + "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 resolveOrValue('prime_tower_brim_enabled') 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_enable') else 0) - 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, @@ -5286,7 +5286,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 resolveOrValue('prime_tower_brim_enabled') 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) - 1", + "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 resolveOrValue('prime_tower_brim_enabled') 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_enable') else 0) - 1", "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, @@ -5322,7 +5322,7 @@ "label": "Prime Tower Brim", "description": "Prime-towers might need the extra adhesion afforded by a brim even if the model doesn't.", "type": "bool", - "enabled": "resolveOrValue('prime_tower_enable')", + "enabled": "resolveOrValue('prime_tower_enable') and (resolveOrValue('adhesion_type') == 'none')", "default_value": false, "settable_per_mesh": false, "settable_per_extruder": false From ecaa1bc11055db1a574eff3778c300860a2d653c Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Tue, 22 Jan 2019 19:36:33 +0100 Subject: [PATCH 5/6] Enable prime-tower-brim to work with all adhesion-types except 'Raft' instead of just 'None'. [CURA-5864] --- resources/definitions/fdmprinter.def.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 3c12733ee5..6bd1cc6974 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -5320,9 +5320,9 @@ "prime_tower_brim_enable": { "label": "Prime Tower Brim", - "description": "Prime-towers might need the extra adhesion afforded by a brim even if the model doesn't.", + "description": "Prime-towers might need the extra adhesion afforded by a brim even if the model doesn't. Presently can't be used with the 'Raft' adhesion-type.", "type": "bool", - "enabled": "resolveOrValue('prime_tower_enable') and (resolveOrValue('adhesion_type') == 'none')", + "enabled": "resolveOrValue('prime_tower_enable') and (resolveOrValue('adhesion_type') != 'raft')", "default_value": false, "settable_per_mesh": false, "settable_per_extruder": false From 0a860c701194273591d49b3eec9f5d5bb383b031 Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Tue, 5 Feb 2019 18:15:23 +0100 Subject: [PATCH 6/6] Dissalow overlap of skirt/brim (model vs. prime-towrer) in case of prime-tower brim. [CURA-5864] --- cura/BuildVolume.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index 0249650ca3..ae7cdca12e 100755 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -739,13 +739,16 @@ class BuildVolume(SceneNode): prime_tower_collision = False prime_tower_areas = self._computeDisallowedAreasPrinted(used_extruders) for extruder_id in prime_tower_areas: - for prime_tower_area in prime_tower_areas[extruder_id]: + for i_area, prime_tower_area in enumerate(prime_tower_areas[extruder_id]): for area in result_areas[extruder_id]: if prime_tower_area.intersectsPolygon(area) is not None: prime_tower_collision = True break if prime_tower_collision: #Already found a collision. break + if ExtruderManager.getInstance().getResolveOrValue("prime_tower_brim_enable"): + prime_tower_areas[extruder_id][i_area] = prime_tower_area.getMinkowskiHull( + Polygon.approximatedCircle(disallowed_border_size)) if not prime_tower_collision: result_areas[extruder_id].extend(prime_tower_areas[extruder_id]) result_areas_no_brim[extruder_id].extend(prime_tower_areas[extruder_id])