Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Ultimaker/Cura.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRemco Burema <r.burema@ultimaker.com>2022-11-04 13:51:26 +0300
committerRemco Burema <r.burema@ultimaker.com>2022-11-04 13:51:26 +0300
commit15f31a7c0c7c4783744180417a5ad60adfbb8145 (patch)
tree816e5ecfaa2046e87855bb360f274191dcc3e4a5
parent79af58ef7e59ae1343e86d224106fd2c1e93917d (diff)
parent997b6f830d6a711341d0211f3034a9cf343a692e (diff)
Merge branch 'main' into PR-13661
-rw-r--r--.github/ISSUE_TEMPLATE/featurerequest.yaml4
-rw-r--r--.github/workflows/conan-package-create.yml16
-rw-r--r--.github/workflows/conan-package.yml2
-rw-r--r--.github/workflows/conan-recipe-version.yml16
-rwxr-xr-xcura/BuildVolume.py72
-rwxr-xr-xcura/Settings/ExtruderManager.py4
-rw-r--r--cura/Settings/ExtruderStack.py2
-rwxr-xr-xcura/Settings/GlobalStack.py2
-rw-r--r--plugins/CuraEngineBackend/StartSliceJob.py4
-rw-r--r--plugins/PostProcessingPlugin/scripts/PauseAtHeight.py47
-rw-r--r--resources/definitions/fdmprinter.def.json47
-rw-r--r--resources/images/cura.pngbin325136 -> 299931 bytes
-rw-r--r--resources/images/cura_enterprise.pngbin327226 -> 301636 bytes
-rw-r--r--resources/images/cura_wip.pngbin324496 -> 298589 bytes
-rw-r--r--resources/themes/cura-light/images/logo.svg30
-rw-r--r--tests/TestBuildVolume.py16
16 files changed, 130 insertions, 132 deletions
diff --git a/.github/ISSUE_TEMPLATE/featurerequest.yaml b/.github/ISSUE_TEMPLATE/featurerequest.yaml
index 83c448fe44..bbdd3908bd 100644
--- a/.github/ISSUE_TEMPLATE/featurerequest.yaml
+++ b/.github/ISSUE_TEMPLATE/featurerequest.yaml
@@ -1,6 +1,6 @@
name: Feature Request
description: Suggest an idea for this project.
-labels: "Type: New Feature"
+labels: ["Type: New Feature", "Status: Triage"]
body:
- type: markdown
attributes:
@@ -41,4 +41,4 @@ body:
- type: textarea
attributes:
label: Additional information & file uploads
- description: You can add pictures or files to visualize your feature request in the comments below. \ No newline at end of file
+ description: You can add pictures or files to visualize your feature request in the comments below.
diff --git a/.github/workflows/conan-package-create.yml b/.github/workflows/conan-package-create.yml
index 4af608b7ac..a3b769fdb3 100644
--- a/.github/workflows/conan-package-create.yml
+++ b/.github/workflows/conan-package-create.yml
@@ -3,6 +3,14 @@ name: Create and Upload Conan package
on:
workflow_call:
inputs:
+ project_name:
+ required: true
+ type: string
+
+ build_id:
+ required: true
+ type: number
+
recipe_id_full:
required: true
type: string
@@ -128,7 +136,13 @@ jobs:
- name: Create the Packages
if: ${{ !inputs.create_from_source }}
- run: conan install ${{ inputs.recipe_id_full }} --build=missing --update
+ run: |
+ conan_build_info --v2 start ${{ inputs.project_name }} ${{ github.run_number }}000${{ inputs.build_id }}
+ conan lock create --reference ${{ inputs.recipe_id_full }} --build=missing --update
+ conan install ${{ inputs.recipe_id_full }} --build=missing --update --lockfile=conan.lock
+ conan_build_info --v2 create buildinfo.json --lockfile conan.lock --user ${{ secrets.CONAN_USER }} --password ${{ secrets.CONAN_PASS }}
+ conan_build_info --v2 publish buildinfo.json --url https://ultimaker.jfrog.io/artifactory --user ${{ secrets.CONAN_USER }} --password ${{ secrets.CONAN_PASS }}
+ conan_build_info --v2 stop
- name: Create the Packages (from source)
if: ${{ inputs.create_from_source }}
diff --git a/.github/workflows/conan-package.yml b/.github/workflows/conan-package.yml
index 8a9de2e37f..0a3d4447c1 100644
--- a/.github/workflows/conan-package.yml
+++ b/.github/workflows/conan-package.yml
@@ -81,6 +81,8 @@ jobs:
uses: ultimaker/cura/.github/workflows/conan-package-create.yml@main
with:
+ project_name: cura
+ build_id: 1
recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }}
runs_on: 'ubuntu-20.04'
python_version: '3.10.x'
diff --git a/.github/workflows/conan-recipe-version.yml b/.github/workflows/conan-recipe-version.yml
index f1dfc67bf3..eb1824c8f7 100644
--- a/.github/workflows/conan-recipe-version.yml
+++ b/.github/workflows/conan-recipe-version.yml
@@ -93,12 +93,13 @@ jobs:
issue_number = "${{ github.ref }}".split('/')[2]
is_tag = "${{ github.ref_type }}" == "tag"
is_release_branch = False
+ ref_name = "${{ github.base_ref }}" if event_name == "pull_request" else "${{ github.ref_name }}"
buildmetadata = "" if "${{ inputs.additional_buildmetadata }}" == "" else "${{ inputs.additional_buildmetadata }}_"
# FIXME: for when we push a tag (such as an release)
channel = "testing"
if is_tag:
- branch_version = tools.Version("${{ github.ref_name }}")
+ branch_version = tools.Version(ref_name)
is_release_branch = True
channel = "_"
user = "_"
@@ -108,10 +109,10 @@ jobs:
branch_version = tools.Version(repo.active_branch.name)
except ConanException:
branch_version = tools.Version('0.0.0')
- if "${{ github.ref_name }}" == f"{branch_version.major}.{branch_version.minor}":
+ if ref_name == f"{branch_version.major}.{branch_version.minor}":
channel = 'stable'
is_release_branch = True
- elif "${{ github.ref_name }}" in ("main", "master"):
+ elif ref_name in ("main", "master"):
channel = 'testing'
else:
channel = repo.active_branch.name.split("_")[0].replace("-", "_").lower()
@@ -165,15 +166,6 @@ jobs:
bump_up_minor = int(latest_branch_version.minor) + 1
reset_patch = 0
actual_version = f"{latest_branch_version.major}.{bump_up_minor}.{reset_patch}-alpha+{buildmetadata}{channel_metadata}"
- else:
- # FIXME: for external PR's
- actual_version = f"5.3.0-alpha+{buildmetadata}pr_{issue_number}"
-
- if is_tag and "${{ github.ref_name }}" == "5.2.0-beta":
- actual_version = "5.2.0-beta"
- is_release_branch = True
- user = "_"
- channel = "_"
# %% print to output
cmd_name = ["echo", f"::set-output name=name::{project_name}"]
diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py
index 776d92a1f6..1536d541c7 100755
--- a/cura/BuildVolume.py
+++ b/cura/BuildVolume.py
@@ -810,11 +810,6 @@ class BuildVolume(SceneNode):
break
if prime_tower_collision: # Already found a collision.
break
- if self._global_container_stack.getProperty("prime_tower_brim_enable", "value") and self._global_container_stack.getProperty("adhesion_type", "value") != "raft":
- brim_size = self._calculateBedAdhesionSize(used_extruders, "brim")
- # Use 2x the brim size, since we need 1x brim size distance due to the object brim and another
- # times the brim due to the brim of the prime tower
- prime_tower_areas[extruder_id][area_index] = prime_tower_area.getMinkowskiHull(Polygon.approximatedCircle(2 * brim_size, num_segments = 24))
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])
@@ -840,9 +835,13 @@ class BuildVolume(SceneNode):
result = {}
skirt_brim_extruder: ExtruderStack = None
+ skirt_brim_extruder_nr = self._global_container_stack.getProperty("skirt_brim_extruder_nr", "value")
+
for extruder in used_extruders:
- if int(extruder.getProperty("extruder_nr", "value")) == int(self._global_container_stack.getProperty("skirt_brim_extruder_nr", "value")):
- skirt_brim_extruder = extruder
+ if skirt_brim_extruder_nr == -1:
+ skirt_brim_extruder = used_extruders[0] # The prime tower brim is always printed with the first extruder
+ elif int(extruder.getProperty("extruder_nr", "value")) == int(skirt_brim_extruder_nr):
+ skirt_brim_extruder = extruder
result[extruder.getId()] = []
# Currently, the only normally printed object is the prime tower.
@@ -856,15 +855,6 @@ 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 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 = (
- 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
-
radius = prime_tower_size / 2
prime_tower_area = Polygon.approximatedCircle(radius, num_segments = 24)
prime_tower_area = prime_tower_area.translate(prime_tower_x - radius, prime_tower_y - radius)
@@ -1076,7 +1066,7 @@ class BuildVolume(SceneNode):
all_values[i] = 0
return all_values
- def _calculateBedAdhesionSize(self, used_extruders, adhesion_override = None):
+ def _calculateBedAdhesionSize(self, used_extruders):
"""Get the bed adhesion size for the global container stack and used extruders
:param adhesion_override: override adhesion type.
@@ -1086,52 +1076,12 @@ class BuildVolume(SceneNode):
return None
container_stack = self._global_container_stack
- adhesion_type = adhesion_override
- if adhesion_type is None:
- adhesion_type = container_stack.getProperty("adhesion_type", "value")
-
- # Skirt_brim_line_width is a bit of an odd one out. The primary bit of the skirt/brim is printed
- # 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.
- skirt_brim_extruder_nr = self._global_container_stack.getProperty("skirt_brim_extruder_nr", "value")
- try:
- skirt_brim_stack = self._global_container_stack.extruderList[int(skirt_brim_extruder_nr)]
- except IndexError:
- 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 = 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 = skirt_brim_stack.getProperty("brim_line_count", "value")
- brim_gap = skirt_brim_stack.getProperty("brim_gap", "value")
- bed_adhesion_size = brim_gap + skirt_brim_line_width * brim_line_count * initial_layer_line_width_factor / 100.0
-
- for extruder_stack in used_extruders:
- bed_adhesion_size += extruder_stack.getProperty("skirt_brim_line_width", "value") * extruder_stack.getProperty("initial_layer_line_width_factor", "value") / 100.0
-
- # 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 = 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
-
- for extruder_stack in used_extruders:
- bed_adhesion_size += extruder_stack.getProperty("skirt_brim_line_width", "value") * extruder_stack.getProperty("initial_layer_line_width_factor", "value") / 100.0
-
- # 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":
+ adhesion_type = container_stack.getProperty("adhesion_type", "value")
+
+ if adhesion_type == "raft":
bed_adhesion_size = self._global_container_stack.getProperty("raft_margin", "value") # Should refer to the raft extruder if set.
- elif adhesion_type == "none":
+ else: # raft, brim or skirt. Those last two are handled by CuraEngine.
bed_adhesion_size = 0
- else:
- raise Exception("Unknown bed adhesion type. Did you forget to update the build volume calculations for your new bed adhesion type?")
max_length_available = 0.5 * min(
self._global_container_stack.getProperty("machine_width", "value"),
diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py
index 52d63b611b..f429a0de19 100755
--- a/cura/Settings/ExtruderManager.py
+++ b/cura/Settings/ExtruderManager.py
@@ -275,7 +275,7 @@ class ExtruderManager(QObject):
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
+ continue # An optional extruder doesn't force any extruder to be used if it isn't used already
if extruder_str_nr in self.extruderIds:
used_extruder_stack_ids.add(self.extruderIds[extruder_str_nr])
@@ -298,7 +298,7 @@ class ExtruderManager(QObject):
# Starts with the adhesion extruder.
adhesion_type = global_stack.getProperty("adhesion_type", "value")
if adhesion_type in {"skirt", "brim"}:
- return global_stack.getProperty("skirt_brim_extruder_nr", "value")
+ return max(0, int(global_stack.getProperty("skirt_brim_extruder_nr", "value"))) # optional skirt/brim extruder defaults to zero
if adhesion_type == "raft":
return global_stack.getProperty("raft_base_extruder_nr", "value")
diff --git a/cura/Settings/ExtruderStack.py b/cura/Settings/ExtruderStack.py
index e93193818c..eba41569b7 100644
--- a/cura/Settings/ExtruderStack.py
+++ b/cura/Settings/ExtruderStack.py
@@ -142,8 +142,6 @@ class ExtruderStack(CuraContainerStack):
limit_to_extruder = super().getProperty(key, "limit_to_extruder", context)
if limit_to_extruder is not None:
- if limit_to_extruder == -1:
- limit_to_extruder = int(cura.CuraApplication.CuraApplication.getInstance().getMachineManager().defaultExtruderPosition)
limit_to_extruder = str(limit_to_extruder)
if (limit_to_extruder is not None and limit_to_extruder != "-1") and self.getMetaDataEntry("position") != str(limit_to_extruder):
diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py
index 041bd19d3a..25fc74b28f 100755
--- a/cura/Settings/GlobalStack.py
+++ b/cura/Settings/GlobalStack.py
@@ -226,8 +226,6 @@ class GlobalStack(CuraContainerStack):
# Handle the "limit_to_extruder" property.
limit_to_extruder = super().getProperty(key, "limit_to_extruder", context)
if limit_to_extruder is not None:
- if limit_to_extruder == -1:
- limit_to_extruder = int(cura.CuraApplication.CuraApplication.getInstance().getMachineManager().defaultExtruderPosition)
limit_to_extruder = str(limit_to_extruder)
if limit_to_extruder is not None and limit_to_extruder != "-1" and limit_to_extruder in self._extruders:
if super().getProperty(key, "settable_per_extruder", context):
diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py
index 64216f373f..d06136a2b4 100644
--- a/plugins/CuraEngineBackend/StartSliceJob.py
+++ b/plugins/CuraEngineBackend/StartSliceJob.py
@@ -487,6 +487,10 @@ class StartSliceJob(Job):
settings["machine_start_gcode"] = self._expandGcodeTokens(settings["machine_start_gcode"], initial_extruder_nr)
settings["machine_end_gcode"] = self._expandGcodeTokens(settings["machine_end_gcode"], initial_extruder_nr)
+ # Manually add 'nozzle offsetting', since that is a metadata-entry instead for some reason.
+ # NOTE: This probably needs to be an actual setting at some point.
+ settings["nozzle_offsetting_for_disallowed_areas"] = CuraApplication.getInstance().getGlobalContainerStack().getMetaDataEntry("nozzle_offsetting_for_disallowed_areas", True)
+
# Add all sub-messages for each individual setting.
for key, value in settings.items():
setting_message = self._slice_message.getMessage("global_settings").addRepeatedMessage("settings")
diff --git a/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py b/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py
index 5923a53adf..6afac57359 100644
--- a/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py
+++ b/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py
@@ -58,16 +58,25 @@ class PauseAtHeight(Script):
"default_value": "marlin",
"value": "\\\"griffin\\\" if machine_gcode_flavor==\\\"Griffin\\\" else \\\"reprap\\\" if machine_gcode_flavor==\\\"RepRap (RepRap)\\\" else \\\"repetier\\\" if machine_gcode_flavor==\\\"Repetier\\\" else \\\"bq\\\" if \\\"BQ\\\" in machine_name or \\\"Flying Bear Ghost 4S\\\" in machine_name else \\\"marlin\\\""
},
+ "hold_steppers_on":
+ {
+ "label": "Keep motors engaged",
+ "description": "Keep the steppers engaged to allow change of filament without moving the head. Applying too much force will move the head/bed anyway",
+ "type": "bool",
+ "default_value": true,
+ "enabled": "pause_method != \\\"griffin\\\""
+ },
"disarm_timeout":
{
"label": "Disarm timeout",
- "description": "After this time steppers are going to disarm (meaning that they can easily lose their positions). Set this to 0 if you don't want to set any duration.",
+ "description": "After this time steppers are going to disarm (meaning that they can easily lose their positions). Set this to 0 if you don't want to set any duration and disarm immediately.",
"type": "int",
"value": "0",
"minimum_value": "0",
"minimum_value_warning": "0",
"maximum_value_warning": "1800",
- "unit": "s"
+ "unit": "s",
+ "enabled": "not hold_steppers_on"
},
"head_park_enabled":
{
@@ -192,6 +201,22 @@ class PauseAtHeight(Script):
"default_value": "RepRap (Marlin/Sprinter)",
"enabled": false
},
+ "beep_at_pause":
+ {
+ "label": "Beep at pause",
+ "description": "Make a beep when pausing",
+ "type": "bool",
+ "default_value": true
+ },
+ "beep_length":
+ {
+ "label": "Beep length",
+ "description": "How much should the beep last",
+ "type": "int",
+ "default_value": "1000",
+ "unit": "ms",
+ "enabled": "beep_at_pause"
+ },
"custom_gcode_before_pause":
{
"label": "G-code Before Pause",
@@ -242,6 +267,7 @@ class PauseAtHeight(Script):
pause_at = self.getSettingValueByKey("pause_at")
pause_height = self.getSettingValueByKey("pause_height")
pause_layer = self.getSettingValueByKey("pause_layer")
+ hold_steppers_on = self.getSettingValueByKey("hold_steppers_on")
disarm_timeout = self.getSettingValueByKey("disarm_timeout")
retraction_amount = self.getSettingValueByKey("retraction_amount")
retraction_speed = self.getSettingValueByKey("retraction_speed")
@@ -260,6 +286,8 @@ class PauseAtHeight(Script):
display_text = self.getSettingValueByKey("display_text")
gcode_before = self.getSettingValueByKey("custom_gcode_before_pause")
gcode_after = self.getSettingValueByKey("custom_gcode_after_pause")
+ beep_at_pause = self.getSettingValueByKey("beep_at_pause")
+ beep_length = self.getSettingValueByKey("beep_length")
pause_method = self.getSettingValueByKey("pause_method")
pause_command = {
@@ -437,19 +465,26 @@ class PauseAtHeight(Script):
prepend_gcode += "M117 " + display_text + "\n"
# Set the disarm timeout
- if disarm_timeout > 0:
- prepend_gcode += self.putValue(M = 18, S = disarm_timeout) + " ; Set the disarm timeout\n"
+ if hold_steppers_on:
+ prepend_gcode += self.putValue(M = 84, S = 3600) + " ; Keep steppers engaged for 1h\n"
+ elif disarm_timeout > 0:
+ prepend_gcode += self.putValue(M = 84, S = disarm_timeout) + " ; Set the disarm timeout\n"
+
+ # Beep at pause
+ if beep_at_pause:
+ prepend_gcode += self.putValue(M = 300, S = 440, P = beep_length) + " ; Beep\n"
+
# Set a custom GCODE section before pause
if gcode_before:
- prepend_gcode += gcode_before + "\n"
+ prepend_gcode += gcode_before.replace(";","\n") + "\n"
# Wait till the user continues printing
prepend_gcode += pause_command + " ; Do the actual pause\n"
# Set a custom GCODE section before pause
if gcode_after:
- prepend_gcode += gcode_after + "\n"
+ prepend_gcode += gcode_after.replace(";","\n") + "\n"
if pause_method == "repetier":
#Push the filament back,
diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json
index 15bd6914b5..08a895c9fa 100644
--- a/resources/definitions/fdmprinter.def.json
+++ b/resources/definitions/fdmprinter.def.json
@@ -4785,7 +4785,6 @@
"default_value": 8.0,
"minimum_value": "0.0",
"maximum_value_warning": "50.0",
- "maximum_value": "0.5 * min(machine_width, machine_depth)",
"enabled": "(support_enable or support_meshes_present) and support_brim_enable",
"settable_per_mesh": false,
"settable_per_extruder": true,
@@ -4800,7 +4799,6 @@
"default_value": 20,
"minimum_value": "0",
"maximum_value_warning": "50 / skirt_brim_line_width",
- "maximum_value": "0.5 * min(machine_width, machine_depth) / skirt_brim_line_width",
"value": "math.ceil(support_brim_width / (skirt_brim_line_width * initial_layer_line_width_factor / 100.0))",
"enabled": "(support_enable or support_meshes_present) and support_brim_enable",
"settable_per_mesh": false,
@@ -5559,10 +5557,11 @@
{
"label": "Skirt/Brim Extruder",
"description": "The extruder train to use for printing the skirt or brim. This is used in multi-extrusion.",
- "type": "extruder",
+ "type": "optional_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'))",
+ "resolve": "'-1' if '-1' in extruderValues('skirt_brim_extruder_nr') else adhesion_extruder_nr",
"settable_per_mesh": false,
"settable_per_extruder": false
},
@@ -5614,9 +5613,9 @@
"maximum_value_warning": "10",
"maximum_value": "0.5 * min(machine_width, machine_depth) / skirt_brim_line_width",
"enabled": "resolveOrValue('adhesion_type') == 'skirt'",
+ "limit_to_extruder": "skirt_brim_extruder_nr",
"settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "skirt_brim_extruder_nr"
+ "settable_per_extruder": true
},
"skirt_gap":
{
@@ -5628,9 +5627,9 @@
"minimum_value_warning": "max(extruderValues('machine_nozzle_size'))",
"maximum_value_warning": "10",
"enabled": "resolveOrValue('adhesion_type') == 'skirt'",
+ "limit_to_extruder": "skirt_brim_extruder_nr",
"settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "skirt_brim_extruder_nr"
+ "settable_per_extruder": true
},
"skirt_brim_minimal_length":
{
@@ -5643,6 +5642,7 @@
"minimum_value_warning": "25",
"maximum_value_warning": "2500",
"enabled": "resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('prime_tower_brim_enable')",
+ "limit_to_extruder": "skirt_brim_extruder_nr",
"settable_per_mesh": false,
"settable_per_extruder": true
},
@@ -5655,11 +5655,10 @@
"default_value": 8.0,
"minimum_value": "0.0",
"maximum_value_warning": "50.0",
- "maximum_value": "0.5 * min(machine_width, machine_depth)",
"enabled": "resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('prime_tower_brim_enable')",
+ "limit_to_extruder": "skirt_brim_extruder_nr",
"settable_per_mesh": false,
"settable_per_extruder": true,
- "limit_to_extruder": "skirt_brim_extruder_nr",
"children":
{
"brim_line_count":
@@ -5670,12 +5669,11 @@
"default_value": 20,
"minimum_value": "0",
"maximum_value_warning": "50 / skirt_brim_line_width",
- "maximum_value": "0.5 * min(machine_width, machine_depth) / 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_enable')",
+ "limit_to_extruder": "skirt_brim_extruder_nr",
"settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "skirt_brim_extruder_nr"
+ "settable_per_extruder": true
}
}
},
@@ -5689,9 +5687,9 @@
"minimum_value": "0",
"maximum_value_warning": "skirt_brim_line_width",
"enabled": "resolveOrValue('adhesion_type') == 'brim'",
+ "limit_to_extruder": "skirt_brim_extruder_nr",
"settable_per_mesh": true,
- "settable_per_extruder": true,
- "limit_to_extruder": "skirt_brim_extruder_nr"
+ "settable_per_extruder": true
},
"brim_replaces_support":
{
@@ -5700,9 +5698,9 @@
"type": "bool",
"default_value": true,
"enabled": "resolveOrValue('adhesion_type') == 'brim' and (support_enable or support_meshes_present)",
+ "limit_to_extruder": "skirt_brim_extruder_nr",
"settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "support_infill_extruder_nr"
+ "settable_per_extruder": true
},
"brim_outside_only":
{
@@ -5711,9 +5709,22 @@
"type": "bool",
"default_value": true,
"enabled": "resolveOrValue('adhesion_type') == 'brim'",
+ "limit_to_extruder": "skirt_brim_extruder_nr",
"settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "skirt_brim_extruder_nr"
+ "settable_per_extruder": true
+ },
+ "brim_inside_margin":
+ {
+ "label": "Brim Inside Avoid Margin",
+ "description": "If brim is only on outside then parts fully enclosed inside another part will get a brim which might overlap with the internal holes of the outer part. This setting controls how far to stay away from those internal holes. Set to a high value to prevent any brim from being generated for parts enclosed within the holes of other parts.",
+ "unit": "mm",
+ "type": "float",
+ "default_value": 5,
+ "minimum_value": "0",
+ "enabled": "resolveOrValue('adhesion_type') == 'brim' and any(extruderValues('brim_outside_only'))",
+ "limit_to_extruder": "skirt_brim_extruder_nr",
+ "settable_per_mesh": false,
+ "settable_per_extruder": true
},
"raft_margin":
{
diff --git a/resources/images/cura.png b/resources/images/cura.png
index 66b10d5118..ac1677f3f8 100644
--- a/resources/images/cura.png
+++ b/resources/images/cura.png
Binary files differ
diff --git a/resources/images/cura_enterprise.png b/resources/images/cura_enterprise.png
index fd5025b67c..4a200a8c6b 100644
--- a/resources/images/cura_enterprise.png
+++ b/resources/images/cura_enterprise.png
Binary files differ
diff --git a/resources/images/cura_wip.png b/resources/images/cura_wip.png
index f98957a0b5..5c2c8104cc 100644
--- a/resources/images/cura_wip.png
+++ b/resources/images/cura_wip.png
Binary files differ
diff --git a/resources/themes/cura-light/images/logo.svg b/resources/themes/cura-light/images/logo.svg
index 611840e248..63449bb296 100644
--- a/resources/themes/cura-light/images/logo.svg
+++ b/resources/themes/cura-light/images/logo.svg
@@ -1,18 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="170.6px" height="23.7px" viewBox="0 0 170.6 23.7">
<g fill="white">
- <!-- U --> <path d="M16.3,3.1v11.1c0,1.2-0.3,2.3-0.8,3.2s-1.3,1.7-2.3,2.3c-1,0.6-2.3,0.8-3.9,0.8c-2.2,0-3.9-0.6-5.1-1.7s-1.7-2.7-1.7-4.6v-11h3.1v10.7c0,1.4,0.3,2.4,0.9,3.1c0.6,0.6,1.6,1,2.9,1c1.3,0,2.3-0.3,2.9-1c0.6-0.7,0.9-1.7,0.9-3V3.1H16.3z" />
- <!-- l --> <path d="M22.6,20.3h-3V2h3V20.3z" />
- <!-- t --> <path d="M30.8,18.1c0.4,0,0.7,0,1.1-0.1c0.4-0.1,0.7-0.2,1-0.3V20c-0.3,0.2-0.7,0.3-1.2,0.4c-0.5,0.1-1,0.1-1.6,0.1c-0.8,0-1.4-0.1-2-0.4s-1.1-0.7-1.4-1.3c-0.4-0.6-0.5-1.5-0.5-2.6V9.5h-1.8V8.2l1.9-1.1l1-2.8h1.9v2.9h3.7v2.3h-3.7v6.7c0,0.6,0.2,1.1,0.5,1.4C29.9,17.9,30.3,18.1,30.8,18.1z" />
- <!-- i --> <path d="M36.3,2.2c0.4,0,0.8,0.1,1.2,0.3C37.8,2.8,38,3.2,38,3.8c0,0.6-0.2,1-0.5,1.2c-0.3,0.2-0.7,0.4-1.2,0.4c-0.5,0-0.9-0.1-1.2-0.4c-0.3-0.2-0.5-0.7-0.5-1.2c0-0.6,0.2-1,0.5-1.2C35.5,2.3,35.8,2.2,36.3,2.2z M37.8,7.2v13h-3v-13H37.8z" />
- <!-- m --> <path d="M55.9,7c1.5,0,2.6,0.4,3.3,1.1c0.7,0.8,1.1,2,1.1,3.6v8.5h-3v-7.9c0-1.9-0.7-2.9-2.2-2.9c-1.1,0-1.8,0.3-2.3,1c-0.4,0.7-0.7,1.7-0.7,3v6.8h-3v-7.9c0-1.9-0.7-2.9-2.2-2.9c-1.1,0-1.9,0.4-2.3,1.2c-0.4,0.8-0.6,1.9-0.6,3.3v6.4h-3v-13h2.3L43.7,9h0.2c0.4-0.7,0.9-1.2,1.6-1.5C46.2,7.2,46.9,7,47.7,7c1,0,1.8,0.2,2.5,0.5c0.7,0.3,1.2,0.8,1.5,1.5h0.2c0.4-0.7,1-1.2,1.7-1.5C54.3,7.2,55.1,7,55.9,7z" />
- <!-- a --> <path d="M68.6,7c1.7,0,3,0.4,3.8,1.1c0.9,0.7,1.3,1.9,1.3,3.4v8.7h-2.1L71,18.5h-0.1c-0.6,0.7-1.2,1.2-1.8,1.5c-0.6,0.3-1.5,0.5-2.5,0.5c-1.2,0-2.1-0.3-2.9-1c-0.8-0.7-1.2-1.7-1.2-3c0-1.3,0.5-2.4,1.5-3c1-0.7,2.5-1,4.5-1.1l2.3-0.1v-0.6c0-0.8-0.2-1.4-0.6-1.8c-0.4-0.4-1-0.5-1.7-0.5c-0.7,0-1.3,0.1-1.9,0.3c-0.6,0.2-1.2,0.4-1.8,0.7l-1-2.1c0.6-0.3,1.4-0.6,2.2-0.8S67.7,7,68.6,7z M70.7,14.1l-1.6,0c-1.3,0-2.2,0.3-2.8,0.7c-0.5,0.4-0.8,1-0.8,1.6c0,0.6,0.2,1.1,0.5,1.3c0.4,0.3,0.8,0.4,1.4,0.4c0.9,0,1.6-0.3,2.2-0.8c0.6-0.5,0.9-1.3,0.9-2.2V14.1z" />
- <!-- k --> <path d="M79.8,2v8.7c0,0.4,0,0.8,0,1.3c0,0.5-0.1,0.9-0.1,1.3h0.1c0.2-0.3,0.4-0.6,0.7-1s0.5-0.7,0.8-1l3.8-4.1h3.4l-5.2,5.6l5.5,7.4h-3.5l-4-5.6l-1.5,1.2v4.3h-3V2H79.8z" />
- <!-- e --> <path d="M95.4,7c1.7,0,3.1,0.5,4.1,1.6c1,1,1.5,2.5,1.5,4.3v1.5h-8.6c0,1.2,0.4,2.1,1,2.7c0.6,0.6,1.5,1,2.6,1c0.8,0,1.6-0.1,2.3-0.3s1.4-0.4,2.1-0.7v2.4c-0.6,0.3-1.3,0.5-2,0.7c-0.7,0.1-1.5,0.2-2.5,0.2c-1.3,0-2.4-0.2-3.4-0.7c-1-0.5-1.7-1.2-2.3-2.2c-0.6-1-0.8-2.2-0.8-3.7c0-2.2,0.5-3.9,1.6-5.1C92.1,7.6,93.6,7,95.4,7z M95.4,9.2c-0.8,0-1.5,0.3-2,0.8c-0.5,0.5-0.8,1.3-0.9,2.3h5.6c0-0.9-0.2-1.6-0.7-2.2C97,9.5,96.3,9.2,95.4,9.2z" />
- <!-- r --> <path d="M110.2,7c0.2,0,0.4,0,0.7,0c0.3,0,0.5,0.1,0.6,0.1l-0.3,2.8c-0.2,0-0.4-0.1-0.6-0.1c-0.2,0-0.4,0-0.6,0c-0.6,0-1.2,0.1-1.8,0.4s-1,0.7-1.4,1.2c-0.3,0.5-0.5,1.2-0.5,2.1v6.7h-3v-13h2.3l0.4,2.3h0.1c0.4-0.7,0.9-1.3,1.6-1.8C108.6,7.3,109.3,7,110.2,7z" />
- <!-- C --> <path d="M127.2,4.1c-1.4,0-2.6,0.3-3.6,0.9c-1,0.6-1.8,1.5-2.3,2.6s-0.8,2.4-0.8,3.9c0,1.5,0.2,2.9,0.7,4c0.5,1.1,1.2,2,2.2,2.6s2.2,0.9,3.6,0.9c0.8,0,1.6-0.1,2.3-0.2c0.7-0.1,1.4-0.3,2-0.5v1.2c-0.6,0.2-1.2,0.4-2,0.5s-1.5,0.2-2.5,0.2c-1.7,0-3.2-0.4-4.3-1.1c-1.2-0.7-2-1.8-2.6-3.1s-0.9-2.9-0.9-4.7c0-1.7,0.3-3.2,1-4.5c0.6-1.3,1.6-2.4,2.8-3.1s2.7-1.1,4.4-1.1c1.7,0,3.2,0.3,4.5,1L131.2,5C129.9,4.4,128.6,4.1,127.2,4.1z" />
- <!-- u --> <path d="M144.6,7.5v12.8h-1.1l-0.2-2.2h-0.1c-0.4,0.7-0.9,1.3-1.6,1.7s-1.6,0.7-2.7,0.7c-3,0-4.5-1.6-4.5-4.7V7.5h1.4v8.3c0,1.2,0.3,2.1,0.8,2.7s1.4,0.9,2.4,0.9c2.8,0,4.2-1.6,4.2-4.9v-7H144.6z" />
- <!-- r --> <path d="M154.1,7.3c0.7,0,1.2,0.1,1.7,0.2l-0.2,1.2c-0.3-0.1-0.5-0.1-0.8-0.1s-0.5,0-0.8,0c-1.2,0-2.1,0.4-2.8,1.3c-0.7,0.9-1,2-1,3.4v7h-1.4V7.5h1.2l0.1,2.4h0.1c0.3-0.7,0.8-1.3,1.5-1.8S153.1,7.3,154.1,7.3z" />
- <!-- a --> <path d="M162.4,7.3c1.4,0,2.5,0.4,3.2,1.1s1.1,1.8,1.1,3.3v8.6h-1l-0.3-2.2h0c-0.4,0.7-1,1.3-1.7,1.7c-0.7,0.4-1.6,0.7-2.8,0.7c-1.2,0-2.2-0.3-2.9-0.9s-1.1-1.5-1.1-2.7c0-1.3,0.5-2.2,1.5-2.9c1-0.7,2.5-1,4.5-1.1l2.3-0.1v-0.9c0-1.3-0.3-2.2-0.8-2.7s-1.2-0.8-2.2-0.8c-0.7,0-1.3,0.1-1.9,0.3c-0.6,0.2-1.2,0.4-1.8,0.7l-0.4-1.1c0.6-0.3,1.2-0.6,2-0.7C160.8,7.4,161.6,7.3,162.4,7.3z M165.3,13.8l-2.2,0.1c-1.6,0.1-2.8,0.3-3.6,0.8c-0.8,0.5-1.2,1.2-1.2,2.2c0,0.8,0.2,1.4,0.7,1.8c0.5,0.4,1.2,0.6,2,0.6c1.3,0,2.4-0.4,3.1-1.1c0.7-0.8,1.1-1.8,1.1-3.2V13.8z" />
-</g>
+ <path class="cls-1" d="M128.2,4.1c-1.4,0-2.6,.3-3.6,.9s-1.8,1.5-2.3,2.6-.8,2.4-.8,3.9,.2,2.9,.7,4,1.2,2,2.2,2.6,2.2,.9,3.6,.9c.8,0,1.6-.1,2.3-.2s1.4-.3,2-.5v1.2c-.6,.2-1.2,.4-2,.5s-1.5,.2-2.5,.2c-1.7,0-3.2-.4-4.3-1.1-1.2-.7-2-1.8-2.6-3.1s-.9-2.9-.9-4.7c0-1.7,.3-3.2,1-4.5,.6-1.3,1.6-2.4,2.8-3.1s2.7-1.1,4.4-1.1,3.2,.3,4.5,1l-.5,1.4c-1.3-.6-2.6-.9-4-.9Z"/>
+ <path class="cls-1" d="M145.6,7.5v12.8h-1.1l-.2-2.2h-.1c-.4,.7-.9,1.3-1.6,1.7s-1.6,.7-2.7,.7c-3,0-4.5-1.6-4.5-4.7V7.5h1.4V15.8c0,1.2,.3,2.1,.8,2.7s1.4,.9,2.4,.9c2.8,0,4.2-1.64,4.2-4.9V7.5h1.4Z"/>
+ <path class="cls-1" d="M155.1,7.3c.7,0,1.2,.1,1.7,.2l-.2,1.2c-.3-.1-.5-.1-.8-.1h-.8c-1.2,0-2.1,.4-2.8,1.3-.7,.9-1,2-1,3.4v7h-1.4V7.5h1.2l.1,2.4h.1c.3-.7,.8-1.3,1.5-1.8s1.4-.8,2.4-.8Z"/>
+ <path class="cls-1" d="M163.4,7.3c1.4,0,2.5,.4,3.2,1.1,.7,.7,1.1,1.8,1.1,3.3v8.6h-1l-.3-2.2h0c-.4,.7-1,1.3-1.7,1.7-.7,.4-1.6,.7-2.8,.7s-2.2-.3-2.9-.9-1.1-1.5-1.1-2.7c0-1.3,.5-2.2,1.5-2.9s2.5-1,4.5-1.1l2.3-.1v-.9c0-1.3-.3-2.2-.8-2.7s-1.2-.8-2.2-.8c-.7,0-1.3,.1-1.9,.3-.6,.2-1.2,.4-1.8,.7l-.4-1.1c.6-.3,1.2-.6,2-.7,.7-.2,1.5-.3,2.3-.3Zm2.9,6.5l-2.2,.1c-1.6,.1-2.8,.3-3.6,.8s-1.2,1.2-1.2,2.2c0,.8,.2,1.4,.7,1.8s1.2,.6,2,.6c1.3,0,2.4-.4,3.1-1.1,.7-.8,1.1-1.8,1.1-3.2v-1.2h.1Z"/>
+
+ <path class="cls-1" d="M102.39,16.94c-.22-.29-.43-.33-.74-.13-.85,.53-1.89,.88-3.55,.88-1.86,0-2.69-.61-3.03-1.68-.12-.36,.15-.74,.53-.74h6.43c.7,0,1.45-.81,1.45-1.51v-2.65c0-.8-.47-1.58-.98-2.19-.83-1-2.19-1.6-4.43-1.6-5.4,0-6.56,3.06-6.56,6.6s1.12,6.6,6.58,6.6c2.5,0,4.1-.49,5.73-1.72-.48-.62-.96-1.24-1.44-1.86h0Zm-7.49-4.74v-.54c0-.78,.63-1.41,1.4-1.41h2.79c.78,0,1.4,.63,1.4,1.41v1.1h-5.04c-.4,0-.56-.16-.56-.56h0Z"/>
+ <path class="cls-1" d="M27.32,7.06v9.29c0,2.82,.98,3.98,4.39,3.98,.62,0,1.56,0,2.07-.05v-2.36c0-.4-.16-.56-.56-.56-.27,0-.53,0-.8,0-1.5,0-1.63-.54-1.63-1.52v-4.65c0-.4,.16-.56,.56-.56h1.87c.4,0,.56-.16,.56-.56v-1.87c0-.4-.16-.56-.56-.56h-1.87c-.4,0-.56-.16-.56-.56v-2.79c0-.4-.16-.56-.56-.56h-2.36c-.4,0-.56,.16-.56,.56v2.79Z"/>
+ <path class="cls-1" d="M17.63,13.95V4.27c0-.4-.16-.56-.56-.56h-2.42c-.4,0-.56,.16-.56,.56V13.48c0,2.55-.65,3.87-3.97,3.87s-3.95-1.41-3.95-3.87V4.27c0-.4-.16-.56-.56-.56H3.06c-.4,0-.56,.16-.56,.56V13.95c0,3.18,.58,6.64,7.56,6.64s7.56-3.47,7.56-6.64h0Z"/>
+ <path class="cls-1" d="M112.54,10.84c.4,0,.56-.16,.56-.56v-2.13c0-.39-.16-.56-.56-.56-.55,0-1.11,.07-1.63,.25-.69,.24-1.33,.66-1.85,1.17-.08-.32-.17-.64-.25-.96-.08-.31-.23-.42-.54-.42h-1.73c-.4,0-.56,.16-.56,.56v11.53c0,.4,.16,.56,.56,.56h2.94v-6.63c0-1.55,1.26-2.81,2.81-2.81h.24Z"/>
+ <path class="cls-1" d="M39.85,20.28V8.19c0-.4-.16-.56-.56-.56h-2.36c-.4,0-.56,.16-.56,.56v11.53c0,.4,.16,.56,.56,.56h2.92Z"/>
+ <path class="cls-1" d="M24.2,20.33V4.27c0-.4-.16-.56-.56-.56h-2.34c-.4,0-.56,.16-.56,.56v15.5c0,.4,.16,.56,.56,.56h2.9Z"/>
+ <path class="cls-1" d="M38.11,6.45c.97,0,1.76-.79,1.76-1.77s-.79-1.77-1.76-1.77-1.76,.79-1.76,1.77,.79,1.77,1.76,1.77Z"/>
+ <path class="cls-1" d="M70.35,7.33c-1.55,0-2.96,.32-4.04,.71-.46,.17-.87,.35-1.2,.52-.3,.16-.4,.54-.21,.82,.37,.55,.74,1.1,1.12,1.65,.2,.29,.4,.35,.72,.19,.79-.4,1.95-.79,3.23-.79,1.98,0,2.41,.48,2.48,1.42,.02,.21-.07,.3-.28,.3h-4.11c-2.33,0-4.21,1.89-4.21,4.22v.21c0,2.21,.85,3.91,4.75,3.91h7.23V12.36c0-3.58-.94-5.03-5.49-5.03h0Zm2.12,10.33c-1.29,0-2.59,0-3.88-.01-.78,0-1.4-.63-1.4-1.41v-.28c0-.78,.63-1.41,1.4-1.41h3.32c.4,0,.56,.16,.56,.56v2.55Z"/>
+ <path class="cls-1" d="M82.64,17.14l1.21-1.44c.16-.19,.32-.18,.45,.03,.91,1.43,1.82,2.86,2.73,4.29,.12,.19,.25,.26,.47,.26h3.57c-1.47-2.38-2.94-4.77-4.41-7.15-.15-.25-.14-.43,.04-.65,1.08-1.31,2.15-2.62,3.23-3.94,.3-.37,.04-.92-.43-.92h-2.36c-.19,0-.31,.06-.43,.2-1.21,1.48-2.43,2.95-3.64,4.43-.21,.26-.5,.15-.5-.18V4.27c0-.4-.16-.56-.56-.56h-2.34c-.4,0-.56,.16-.56,.56v15.45c0,.39,.16,.55,.55,.56h2.91v-2.96c0-.07,.02-.13,.07-.18h0Z"/>
+ <path class="cls-1" d="M46.93,10.63c1.24,3.1,2.49,6.2,3.73,9.31,.1,.26,.25,.35,.52,.35h2.01c.28,0,.42-.1,.52-.35,1.24-3.1,2.49-6.21,3.73-9.32,.13-.34,.55-.25,.54,.11,0,3,.01,6,.02,8.99,0,.4,.16,.56,.56,.56h3.01V5.11c0-.78-.63-1.41-1.4-1.41h-2.4c-.7,0-1.06,.25-1.31,.9-1.29,3.26-2.58,6.52-3.87,9.78-.12,.3-.38,.3-.51,.01-1.29-3.27-2.58-6.54-3.87-9.81-.25-.64-.61-.89-1.3-.89h-2.42c-.78,0-1.4,.63-1.4,1.41v14.61c0,.4,.16,.56,.56,.56h2.74V10.73c0-.36,.41-.44,.54-.11h0Z"/>
+ </g>
</svg>
diff --git a/tests/TestBuildVolume.py b/tests/TestBuildVolume.py
index 458b7afad3..5012784bdf 100644
--- a/tests/TestBuildVolume.py
+++ b/tests/TestBuildVolume.py
@@ -86,12 +86,12 @@ class TestCalculateBedAdhesionSize:
({"adhesion_type": {"value": "skirt"}}, 0),
({"adhesion_type": {"value": "raft"}}, 0),
({"adhesion_type": {"value": "none"}}, 0),
- ({"adhesion_type": {"value": "skirt"}, "skirt_line_count": {"value": 2}, "initial_layer_line_width_factor": {"value": 1}, "skirt_brim_line_width": {"value": 2}}, 0.02),
+ ({"adhesion_type": {"value": "skirt"}, "skirt_line_count": {"value": 2}, "initial_layer_line_width_factor": {"value": 1}, "skirt_brim_line_width": {"value": 2}}, 0),
# Even though it's marked as skirt, it should behave as a brim as the prime tower has a brim (skirt line count is still at 0!)
- ({"adhesion_type": {"value": "skirt"}, "prime_tower_brim_enable": {"value": True}, "skirt_brim_line_width": {"value": 2}, "initial_layer_line_width_factor": {"value": 3}}, -0.06),
+ ({"adhesion_type": {"value": "skirt"}, "prime_tower_brim_enable": {"value": True}, "skirt_brim_line_width": {"value": 2}, "initial_layer_line_width_factor": {"value": 3}}, 0),
({"brim_line_count": {"value": 1}, "skirt_brim_line_width": {"value": 2}, "initial_layer_line_width_factor": {"value": 3}}, 0),
- ({"brim_line_count": {"value": 2}, "skirt_brim_line_width": {"value": 2}, "initial_layer_line_width_factor": {"value": 3}}, 0.06),
- ({"brim_line_count": {"value": 9000000}, "skirt_brim_line_width": {"value": 90000}, "initial_layer_line_width_factor": {"value": 9000}}, 100), # Clamped at half the max size of buildplate
+ ({"brim_line_count": {"value": 2}, "skirt_brim_line_width": {"value": 2}, "initial_layer_line_width_factor": {"value": 3}}, 0),
+ ({"brim_line_count": {"value": 9000000}, "skirt_brim_line_width": {"value": 90000}, "initial_layer_line_width_factor": {"value": 9000}}, 0), # Clamped at half the max size of buildplate
])
def test_singleExtruder(self, build_volume: BuildVolume, setting_dict, result):
self.createAndSetGlobalStack(build_volume)
@@ -106,14 +106,6 @@ class TestCalculateBedAdhesionSize:
with patch.dict(self.setting_property_dict, patched_dictionary):
assert build_volume._calculateBedAdhesionSize([]) == result
- def test_unknownBedAdhesion(self, build_volume: BuildVolume):
- self.createAndSetGlobalStack(build_volume)
- patched_dictionary = self.setting_property_dict.copy()
- patched_dictionary.update({"adhesion_type": {"value": "OMGZOMGBBQ"}})
- with patch.dict(self.setting_property_dict, patched_dictionary):
- with pytest.raises(Exception):
- build_volume._calculateBedAdhesionSize([])
-
class TestComputeDisallowedAreasStatic:
setting_property_dict = {"machine_disallowed_areas": {"value": [[[-200, 112.5], [ -82, 112.5], [ -84, 102.5], [-115, 102.5]]]},
"machine_width": {"value": 200},