Merge branch 'main' into PR-13661
4
.github/ISSUE_TEMPLATE/featurerequest.yaml
vendored
|
@ -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.
|
||||
description: You can add pictures or files to visualize your feature request in the comments below.
|
||||
|
|
16
.github/workflows/conan-package-create.yml
vendored
|
@ -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 }}
|
||||
|
|
2
.github/workflows/conan-package.yml
vendored
|
@ -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'
|
||||
|
|
16
.github/workflows/conan-recipe-version.yml
vendored
|
@ -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}"]
|
||||
|
|
|
@ -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")
|
||||
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":
|
||||
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"),
|
||||
|
|
|
@ -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")
|
||||
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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":
|
||||
{
|
||||
|
|
Before Width: | Height: | Size: 318 KiB After Width: | Height: | Size: 293 KiB |
Before Width: | Height: | Size: 320 KiB After Width: | Height: | Size: 295 KiB |
Before Width: | Height: | Size: 317 KiB After Width: | Height: | Size: 292 KiB |
|
@ -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>
|
||||
|
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.3 KiB |
|
@ -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},
|
||||
|
|