Merge pull request #20039 from Ultimaker/CURA-12352_different-minimum-layer-time-for-layers-that-contain-overhangs

CURA-12352 Different minimum layer time for layers that contain overhangs
This commit is contained in:
HellAholic 2025-02-03 11:02:12 +01:00 committed by GitHub
commit 28cf7daf76
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
40 changed files with 240 additions and 36 deletions

View File

@ -0,0 +1,68 @@
import configparser
import io
from typing import Dict, Tuple, List
from UM.VersionUpgrade import VersionUpgrade
_RENAMED_SETTINGS = {
"wall_overhang_speed_factor": "wall_overhang_speed_factors"
} # type: Dict[str, str]
_NEW_SETTING_VERSION = "25"
class VersionUpgrade59to510(VersionUpgrade):
def upgradePreferences(self, serialized: str, filename: str):
parser = configparser.ConfigParser(interpolation = None)
parser.read_string(serialized)
# Fix 'renamed'(ish) settings for visibility
if "visible_settings" in parser["general"]:
all_setting_keys = parser["general"]["visible_settings"].strip().split(";")
if all_setting_keys:
for idx, key in enumerate(all_setting_keys):
if key in _RENAMED_SETTINGS:
all_setting_keys[idx] = _RENAMED_SETTINGS[key]
parser["general"]["visible_settings"] = ";".join(all_setting_keys)
# Update version number.
parser["metadata"]["setting_version"] = _NEW_SETTING_VERSION
result = io.StringIO()
parser.write(result)
return [filename], [result.getvalue()]
def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
parser = configparser.ConfigParser(interpolation = None, comment_prefixes = ())
parser.read_string(serialized)
# Update version number.
parser["metadata"]["setting_version"] = _NEW_SETTING_VERSION
if "values" in parser:
for old_name, new_name in _RENAMED_SETTINGS.items():
if old_name in parser["values"]:
parser["values"][new_name] = parser["values"][old_name]
del parser["values"][old_name]
if "wall_overhang_speed_factors" in parser["values"]:
old_value = float(parser["values"]["wall_overhang_speed_factors"])
new_value = [max(1, int(round(old_value)))]
parser["values"]["wall_overhang_speed_factor"] = str(new_value)
result = io.StringIO()
parser.write(result)
return [filename], [result.getvalue()]
def upgradeStack(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
parser = configparser.ConfigParser(interpolation = None)
parser.read_string(serialized)
# Update version number.
if "metadata" not in parser:
parser["metadata"] = {}
parser["metadata"]["setting_version"] = _NEW_SETTING_VERSION
result = io.StringIO()
parser.write(result)
return [filename], [result.getvalue()]

View File

@ -0,0 +1,60 @@
# Copyright (c) 2024 UltiMaker
# Cura is released under the terms of the LGPLv3 or higher.
from typing import Any, Dict, TYPE_CHECKING
from . import VersionUpgrade59to510
if TYPE_CHECKING:
from UM.Application import Application
upgrade = VersionUpgrade59to510.VersionUpgrade59to510()
def getMetaData() -> Dict[str, Any]:
return {
"version_upgrade": {
# From To Upgrade function
("preferences", 7000024): ("preferences", 7000025, upgrade.upgradePreferences),
("machine_stack", 6000024): ("machine_stack", 6000025, upgrade.upgradeStack),
("extruder_train", 6000024): ("extruder_train", 6000025, upgrade.upgradeStack),
("definition_changes", 4000024): ("definition_changes", 4000025, upgrade.upgradeInstanceContainer),
("quality_changes", 4000024): ("quality_changes", 4000025, upgrade.upgradeInstanceContainer),
("quality", 4000024): ("quality", 4000025, upgrade.upgradeInstanceContainer),
("user", 4000024): ("user", 4000025, upgrade.upgradeInstanceContainer),
("intent", 4000024): ("intent", 4000025, upgrade.upgradeInstanceContainer),
},
"sources": {
"preferences": {
"get_version": upgrade.getCfgVersion,
"location": {"."}
},
"machine_stack": {
"get_version": upgrade.getCfgVersion,
"location": {"./machine_instances"}
},
"extruder_train": {
"get_version": upgrade.getCfgVersion,
"location": {"./extruders"}
},
"definition_changes": {
"get_version": upgrade.getCfgVersion,
"location": {"./definition_changes"}
},
"quality_changes": {
"get_version": upgrade.getCfgVersion,
"location": {"./quality_changes"}
},
"quality": {
"get_version": upgrade.getCfgVersion,
"location": {"./quality"}
},
"user": {
"get_version": upgrade.getCfgVersion,
"location": {"./user"}
}
}
}
def register(app: "Application") -> Dict[str, Any]:
return {"version_upgrade": upgrade}

View File

@ -0,0 +1,8 @@
{
"name": "Version Upgrade 5.9 to 5.10",
"author": "Ultimaker B.V.",
"version": "1.0.0",
"description": "Upgrades configurations from Cura 5.9 to Cura 5.10",
"api": 8,
"i18n-catalog": "cura"
}

View File

@ -120,7 +120,12 @@
"support_z_distance": { "value": "layer_height * 2" },
"top_bottom_thickness": { "value": "layer_height * 4" },
"wall_overhang_angle": { "value": 55 },
"wall_overhang_speed_factor": { "value": 55 },
"wall_overhang_speed_factors":
{
"value": [
55
]
},
"zig_zaggify_infill": { "value": "infill_pattern == 'cross' or infill_pattern == 'cross_3d' or infill_pattern == 'lines'" }
}
}

View File

@ -238,7 +238,12 @@
"wall_extruder_nr": { "value": -1 },
"wall_line_width_0": { "value": 0.44 },
"wall_overhang_angle": { "value": 45 },
"wall_overhang_speed_factor": { "value": 40 },
"wall_overhang_speed_factors":
{
"value": [
40
]
},
"wall_thickness": { "value": 0.84 },
"wall_x_extruder_nr": { "value": -1 },
"zig_zaggify_infill": { "value": true }

View File

@ -167,7 +167,12 @@
"travel_avoid_supports": { "value": "True" },
"wall_line_width": { "value": "machine_nozzle_size" },
"wall_overhang_angle": { "value": "75" },
"wall_overhang_speed_factor": { "value": "50" },
"wall_overhang_speed_factors":
{
"value": [
50
]
},
"zig_zaggify_infill": { "value": "True" }
}
}

View File

@ -107,7 +107,7 @@
"travel_retract_before_outer_wall": { "value": true },
"wall_0_wipe_dist": { "value": 0.0 },
"wall_overhang_angle": { "default_value": 75 },
"wall_overhang_speed_factor": { "default_value": 50 },
"wall_overhang_speed_factors": { "default_value": "[50]" },
"wall_thickness": { "value": "line_width * 2" },
"z_seam_corner": { "value": "'z_seam_corner_weighted'" },
"z_seam_type": { "value": "'back'" }

View File

@ -4728,6 +4728,31 @@
"settable_per_mesh": false,
"settable_per_extruder": true
},
"cool_min_layer_time_overhang":
{
"label": "Minimum Layer Time with Overhang",
"description": "The minimum time spent in a layer that contains overhanging extrusions. This forces the printer to slow down, to at least spend the time set here in one layer. This allows the printed material to cool down properly before printing the next layer. Layers may still take shorter than the minimal layer time if Lift Head is disabled and if the Minimum Speed would otherwise be violated.",
"unit": "s",
"type": "float",
"default_value": 5,
"value": "cool_min_layer_time",
"minimum_value": "0",
"maximum_value_warning": "600",
"settable_per_mesh": false,
"settable_per_extruder": true
},
"cool_min_layer_time_overhang_min_segment_length":
{
"label": "Minimum Overhang Segment Length",
"description": "When trying to apply the minimum layer time specific for overhanging layers, it will be applied only if at least one consecutive overhanging extrusion move is longer than this value.",
"unit": "mm",
"type": "float",
"default_value": 5,
"minimum_value": "0",
"maximum_value_warning": "500",
"settable_per_mesh": false,
"settable_per_extruder": true
},
"cool_min_speed":
{
"label": "Minimum Speed",

View File

@ -109,7 +109,12 @@
"travel_avoid_other_parts": { "default_value": false },
"wall_line_width": { "value": "machine_nozzle_size" },
"wall_overhang_angle": { "default_value": 75 },
"wall_overhang_speed_factor": { "default_value": 50 },
"wall_overhang_speed_factors":
{
"default_value": [
50
]
},
"zig_zaggify_infill": { "value": true }
}
}

View File

@ -61,7 +61,12 @@
"support_pattern": { "default_value": "lines" },
"switch_extruder_retraction_amount": { "value": 100 },
"switch_extruder_retraction_speeds": { "value": 60 },
"wall_overhang_speed_factor": { "value": 50 },
"wall_overhang_speed_factors":
{
"value": [
50
]
},
"z_seam_corner": { "default_value": "z_seam_corner_any" },
"z_seam_relative": { "value": true },
"z_seam_type": { "default_value": "sharpest_corner" },

View File

@ -109,7 +109,12 @@
"travel_avoid_other_parts": { "default_value": false },
"wall_line_width": { "value": "machine_nozzle_size" },
"wall_overhang_angle": { "default_value": 75 },
"wall_overhang_speed_factor": { "default_value": 50 },
"wall_overhang_speed_factors":
{
"default_value": [
50
]
},
"zig_zaggify_infill": { "value": true }
}
}

View File

@ -379,10 +379,12 @@
"wall_0_wipe_dist": { "value": 0.2 },
"wall_line_width_x": { "value": 0.58 },
"wall_overhang_angle": { "value": 35 },
"wall_overhang_speed_factor":
"wall_overhang_speed_factors":
{
"minimum_value_warning": 15,
"value": 17.5
"value": [
18
]
},
"wall_thickness": { "value": 1 },
"wall_x_material_flow_layer_0": { "value": "material_flow" },

View File

@ -119,7 +119,12 @@
"travel_avoid_other_parts": { "default_value": false },
"wall_line_width": { "value": "machine_nozzle_size" },
"wall_overhang_angle": { "default_value": 75 },
"wall_overhang_speed_factor": { "default_value": 50 },
"wall_overhang_speed_factors":
{
"default_value": [
50
]
},
"zig_zaggify_infill": { "value": true }
}
}

View File

@ -195,7 +195,12 @@
"travel_avoid_other_parts": { "default_value": false },
"wall_line_width": { "value": "machine_nozzle_size" },
"wall_overhang_angle": { "default_value": 75 },
"wall_overhang_speed_factor": { "default_value": 50 },
"wall_overhang_speed_factors":
{
"default_value": [
50
]
},
"xy_offset_layer_0": { "value": -0.3 },
"z_seam_type": { "value": "'back'" },
"zig_zaggify_infill": { "value": true }

View File

@ -115,7 +115,7 @@ travel_avoid_other_parts = True
travel_avoid_supports = True
travel_retract_before_outer_wall = False
wall_overhang_angle = 35.0
wall_overhang_speed_factor = 60.0
wall_overhang_speed_factors = [60]
wall_thickness = =line_width*2
z_seam_corner = z_seam_corner_inner
z_seam_position = backright

View File

@ -59,5 +59,5 @@ support_xy_overrides_z = xy_overrides_z
support_z_distance = 0.15
top_skin_expand_distance = 2.4
wall_overhang_angle = 30
wall_overhang_speed_factor = 40
wall_overhang_speed_factors = [40]

View File

@ -52,5 +52,5 @@ support_xy_distance = 0.3
support_xy_distance_overhang = 0.25
support_z_distance = 0.15
wall_overhang_angle = 30
wall_overhang_speed_factor = 50
wall_overhang_speed_factors = [50]

View File

@ -58,5 +58,5 @@ support_xy_overrides_z = xy_overrides_z
support_z_distance = 0.15
top_skin_expand_distance = 2.4
wall_overhang_angle = 30
wall_overhang_speed_factor = 40
wall_overhang_speed_factors = [40]

View File

@ -57,5 +57,5 @@ support_xy_overrides_z = xy_overrides_z
support_z_distance = 0.15
top_skin_expand_distance = 2.4
wall_overhang_angle = 30
wall_overhang_speed_factor = 40
wall_overhang_speed_factors = [40]

View File

@ -59,5 +59,5 @@ support_xy_overrides_z = xy_overrides_z
support_z_distance = 0.15
top_skin_expand_distance = 2.4
wall_overhang_angle = 30
wall_overhang_speed_factor = 40
wall_overhang_speed_factors = [40]

View File

@ -58,5 +58,5 @@ support_xy_overrides_z = xy_overrides_z
support_z_distance = 0.15
top_skin_expand_distance = 2.4
wall_overhang_angle = 30
wall_overhang_speed_factor = 40
wall_overhang_speed_factors = [40]

View File

@ -57,5 +57,5 @@ support_xy_overrides_z = xy_overrides_z
support_z_distance = 0.15
top_skin_expand_distance = 2.4
wall_overhang_angle = 30
wall_overhang_speed_factor = 40
wall_overhang_speed_factors = [40]

View File

@ -54,5 +54,5 @@ support_xy_overrides_z = xy_overrides_z
support_z_distance = 0.22
top_skin_expand_distance = 2.4
wall_overhang_angle = 30
wall_overhang_speed_factor = 40
wall_overhang_speed_factors = [40]

View File

@ -59,5 +59,5 @@ support_xy_overrides_z = xy_overrides_z
support_z_distance = 0.15
top_skin_expand_distance = 2.4
wall_overhang_angle = 30
wall_overhang_speed_factor = 40
wall_overhang_speed_factors = [40]

View File

@ -52,5 +52,5 @@ support_xy_distance = 0.3
support_xy_distance_overhang = 0.25
support_z_distance = 0.15
wall_overhang_angle = 30
wall_overhang_speed_factor = 50
wall_overhang_speed_factors = [50]

View File

@ -58,5 +58,5 @@ support_xy_overrides_z = xy_overrides_z
support_z_distance = 0.15
top_skin_expand_distance = 2.4
wall_overhang_angle = 30
wall_overhang_speed_factor = 40
wall_overhang_speed_factors = [40]

View File

@ -57,5 +57,5 @@ support_xy_overrides_z = xy_overrides_z
support_z_distance = 0.15
top_skin_expand_distance = 2.4
wall_overhang_angle = 30
wall_overhang_speed_factor = 40
wall_overhang_speed_factors = [40]

View File

@ -59,5 +59,5 @@ support_xy_overrides_z = xy_overrides_z
support_z_distance = 0.15
top_skin_expand_distance = 2.4
wall_overhang_angle = 30
wall_overhang_speed_factor = 40
wall_overhang_speed_factors = [40]

View File

@ -54,5 +54,5 @@ support_xy_distance = 0.3
support_xy_distance_overhang = 0.25
support_z_distance = 0.15
wall_overhang_angle = 30
wall_overhang_speed_factor = 50
wall_overhang_speed_factors = [50]

View File

@ -57,5 +57,5 @@ support_xy_overrides_z = xy_overrides_z
support_z_distance = 0.15
top_skin_expand_distance = 2.4
wall_overhang_angle = 30
wall_overhang_speed_factor = 40
wall_overhang_speed_factors = [40]

View File

@ -57,5 +57,5 @@ support_xy_overrides_z = xy_overrides_z
support_z_distance = 0.15
top_skin_expand_distance = 2.4
wall_overhang_angle = 30
wall_overhang_speed_factor = 40
wall_overhang_speed_factors = [40]

View File

@ -59,5 +59,5 @@ support_xy_overrides_z = xy_overrides_z
support_z_distance = 0.15
top_skin_expand_distance = 2.4
wall_overhang_angle = 30
wall_overhang_speed_factor = 40
wall_overhang_speed_factors = [40]

View File

@ -57,5 +57,5 @@ support_xy_overrides_z = xy_overrides_z
support_z_distance = 0.15
top_skin_expand_distance = 2.4
wall_overhang_angle = 30
wall_overhang_speed_factor = 40
wall_overhang_speed_factors = [40]

View File

@ -57,5 +57,5 @@ support_xy_overrides_z = xy_overrides_z
support_z_distance = 0.15
top_skin_expand_distance = 2.4
wall_overhang_angle = 30
wall_overhang_speed_factor = 40
wall_overhang_speed_factors = [40]

View File

@ -54,5 +54,5 @@ support_xy_overrides_z = xy_overrides_z
support_z_distance = 0.22
top_skin_expand_distance = 2.4
wall_overhang_angle = 30
wall_overhang_speed_factor = 40
wall_overhang_speed_factors = [40]

View File

@ -59,5 +59,5 @@ support_xy_overrides_z = xy_overrides_z
support_z_distance = 0.15
top_skin_expand_distance = 2.4
wall_overhang_angle = 30
wall_overhang_speed_factor = 40
wall_overhang_speed_factors = [40]

View File

@ -54,5 +54,5 @@ support_xy_distance = 0.3
support_xy_distance_overhang = 0.25
support_z_distance = 0.15
wall_overhang_angle = 30
wall_overhang_speed_factor = 50
wall_overhang_speed_factors = [50]

View File

@ -57,5 +57,5 @@ support_xy_overrides_z = xy_overrides_z
support_z_distance = 0.15
top_skin_expand_distance = 2.4
wall_overhang_angle = 30
wall_overhang_speed_factor = 40
wall_overhang_speed_factors = [40]

View File

@ -57,5 +57,5 @@ support_xy_overrides_z = xy_overrides_z
support_z_distance = 0.15
top_skin_expand_distance = 2.4
wall_overhang_angle = 30
wall_overhang_speed_factor = 40
wall_overhang_speed_factors = [40]

View File

@ -248,6 +248,7 @@ cool_fan_speed_0
cool_fan_full_at_height
cool_fan_full_layer
cool_min_layer_time
cool_min_layer_time_overhang
cool_min_speed
cool_lift_head
cool_during_extruder_switch