Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CURA-12352 Different minimum layer time for layers that contain overhangs #20039

Original file line number Diff line number Diff line change
@@ -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()]
60 changes: 60 additions & 0 deletions plugins/VersionUpgrade/VersionUpgrade59to510/__init__.py
Original file line number Diff line number Diff line change
@@ -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}
8 changes: 8 additions & 0 deletions plugins/VersionUpgrade/VersionUpgrade59to510/plugin.json
Original file line number Diff line number Diff line change
@@ -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"
}
7 changes: 6 additions & 1 deletion resources/definitions/ankermake_m5.def.json
Original file line number Diff line number Diff line change
@@ -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'" }
}
}
7 changes: 6 additions & 1 deletion resources/definitions/ankermake_m5c.def.json
Original file line number Diff line number Diff line change
@@ -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 }
7 changes: 6 additions & 1 deletion resources/definitions/atmat_signal_pro_base.def.json
Original file line number Diff line number Diff line change
@@ -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" }
}
}
2 changes: 1 addition & 1 deletion resources/definitions/blocks_base.def.json
Original file line number Diff line number Diff line change
@@ -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'" }
25 changes: 25 additions & 0 deletions resources/definitions/fdmprinter.def.json
Original file line number Diff line number Diff line change
@@ -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",
7 changes: 6 additions & 1 deletion resources/definitions/gutenberg_base.def.json
Original file line number Diff line number Diff line change
@@ -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 }
}
}
7 changes: 6 additions & 1 deletion resources/definitions/lotmaxx_sc60.def.json
Original file line number Diff line number Diff line change
@@ -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" },
7 changes: 6 additions & 1 deletion resources/definitions/snakeoil_standard_base.def.json
Original file line number Diff line number Diff line change
@@ -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 }
}
}
6 changes: 4 additions & 2 deletions resources/definitions/ultimaker_sketch_sprint.def.json
Original file line number Diff line number Diff line change
@@ -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" },
7 changes: 6 additions & 1 deletion resources/definitions/voron2_base.def.json
Original file line number Diff line number Diff line change
@@ -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 }
}
}
7 changes: 6 additions & 1 deletion resources/definitions/vzbot_base.def.json
Original file line number Diff line number Diff line change
@@ -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 }
2 changes: 1 addition & 1 deletion resources/quality/flsun_v400/flsun_v400_normal.inst.cfg
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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]

Original file line number Diff line number Diff line change
@@ -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]

Original file line number Diff line number Diff line change
@@ -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]

Original file line number Diff line number Diff line change
@@ -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]

Original file line number Diff line number Diff line change
@@ -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]

Original file line number Diff line number Diff line change
@@ -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]

Original file line number Diff line number Diff line change
@@ -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]

Original file line number Diff line number Diff line change
@@ -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]

Original file line number Diff line number Diff line change
@@ -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]

Original file line number Diff line number Diff line change
@@ -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]

Original file line number Diff line number Diff line change
@@ -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]

Loading