From 4b7cf6cca22611defd64906affb13c954a7fdb4a Mon Sep 17 00:00:00 2001 From: Saumya Jain Date: Tue, 30 Apr 2024 11:28:49 +0200 Subject: [PATCH 1/3] added z-seam approach distance CURA-11227 --- resources/definitions/fdmprinter.def.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 83472631092..6c297e3f125 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -1417,6 +1417,17 @@ "enabled": "z_seam_type == 'back'", "limit_to_extruder": "wall_0_extruder_nr", "settable_per_mesh": true + }, + "z_seam_approach_distance": + { + "label": "Z Seam approach distance", + "description": "When starting to print a wall, if it starts after a rectracted travel mode, do not travel directly to the start position. Instead, move to a transitory position tangent to the first printed segment, at a certain distance equal to Approach Distance.", + "unit": "mm", + "type": "float", + "default_value": 15, + "minimum_value": "0", + "limit_to_extruder": "wall_0_extruder_nr", + "settable_per_mesh": true } } }, From 34a746654d736121f4efd69345fc1b5b2617bd0a Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Thu, 16 May 2024 13:15:57 +0200 Subject: [PATCH 2/3] Properly display the unretraction travel moves This is required due to the addition of the MoveUnretraction segment type in the engine. Those moves need to be displayed as travel moves, with a new color. CURA-11830 --- cura/LayerDataBuilder.py | 1 + cura/LayerPolygon.py | 12 +++++++----- plugins/GCodeReader/FlavorParser.py | 2 +- plugins/SimulationView/SimulationView.py | 1 + plugins/SimulationView/layers.shader | 16 ++++++++++++---- plugins/SimulationView/layers3d.shader | 8 ++++---- plugins/SimulationView/layers3d_shadow.shader | 8 ++++---- plugins/SimulationView/layers_shadow.shader | 11 ++++++++--- resources/themes/cura-light/theme.json | 1 + 9 files changed, 39 insertions(+), 21 deletions(-) diff --git a/cura/LayerDataBuilder.py b/cura/LayerDataBuilder.py index d8801c9e7bb..16b40eb77da 100755 --- a/cura/LayerDataBuilder.py +++ b/cura/LayerDataBuilder.py @@ -83,6 +83,7 @@ def build(self, material_color_map, line_type_brightness = 1.0): # Set material_colors with indices where line_types (also numpy array) == MoveCombingType material_colors[line_types == LayerPolygon.MoveCombingType] = colors[line_types == LayerPolygon.MoveCombingType] material_colors[line_types == LayerPolygon.MoveRetractionType] = colors[line_types == LayerPolygon.MoveRetractionType] + material_colors[line_types == LayerPolygon.MoveUnretractionType] = colors[line_types == LayerPolygon.MoveUnretractionType] attributes = { "line_dimensions": { diff --git a/cura/LayerPolygon.py b/cura/LayerPolygon.py index e772a8b78ec..4a4f3fc98a5 100644 --- a/cura/LayerPolygon.py +++ b/cura/LayerPolygon.py @@ -23,11 +23,12 @@ class LayerPolygon: MoveRetractionType = 9 SupportInterfaceType = 10 PrimeTowerType = 11 - __number_of_types = 12 + MoveUnretractionType = 12 + __number_of_types = 13 - __jump_map = numpy.logical_or(numpy.logical_or(numpy.arange(__number_of_types) == NoneType, - numpy.arange(__number_of_types) == MoveCombingType), - numpy.arange(__number_of_types) == MoveRetractionType) + __jump_map = numpy.logical_or(numpy.arange(__number_of_types) == NoneType, numpy.arange(__number_of_types) == MoveCombingType) + __jump_map = numpy.logical_or(__jump_map, numpy.arange(__number_of_types) == MoveRetractionType) + __jump_map = numpy.logical_or(__jump_map, numpy.arange(__number_of_types) == MoveUnretractionType) def __init__(self, extruder: int, line_types: numpy.ndarray, data: numpy.ndarray, line_widths: numpy.ndarray, line_thicknesses: numpy.ndarray, line_feedrates: numpy.ndarray) -> None: @@ -272,7 +273,8 @@ def getColorMap(cls) -> numpy.ndarray: theme.getColor("layerview_move_combing").getRgbF(), # MoveCombingType theme.getColor("layerview_move_retraction").getRgbF(), # MoveRetractionType theme.getColor("layerview_support_interface").getRgbF(), # SupportInterfaceType - theme.getColor("layerview_prime_tower").getRgbF() # PrimeTowerType + theme.getColor("layerview_prime_tower").getRgbF(), # PrimeTowerType + theme.getColor("layerview_move_unretraction").getRgbF(), # MoveUnretractionType ]) return cls.__color_map diff --git a/plugins/GCodeReader/FlavorParser.py b/plugins/GCodeReader/FlavorParser.py index 372ee831356..e6374494c0b 100644 --- a/plugins/GCodeReader/FlavorParser.py +++ b/plugins/GCodeReader/FlavorParser.py @@ -133,7 +133,7 @@ def _createPolygon(self, layer_thickness: float, path: List[List[Union[float, in if i > 0: line_feedrates[i - 1] = point[3] line_types[i - 1] = point[5] - if point[5] in [LayerPolygon.MoveCombingType, LayerPolygon.MoveRetractionType]: + if point[5] in [LayerPolygon.MoveCombingType, LayerPolygon.MoveRetractionType, LayerPolygon.MoveUnretractionType]: line_widths[i - 1] = 0.1 line_thicknesses[i - 1] = 0.0 # Travels are set as zero thickness lines else: diff --git a/plugins/SimulationView/SimulationView.py b/plugins/SimulationView/SimulationView.py index 10b68edaa09..1b54d62a2dd 100644 --- a/plugins/SimulationView/SimulationView.py +++ b/plugins/SimulationView/SimulationView.py @@ -603,6 +603,7 @@ def calculateColorSchemeLimits(self) -> None: if self.getShowTravelMoves(): visible_line_types.append(LayerPolygon.MoveCombingType) visible_line_types.append(LayerPolygon.MoveRetractionType) + visible_line_types.append(LayerPolygon.MoveUnretractionType) for node in DepthFirstIterator(self.getController().getScene().getRoot()): layer_data = node.callDecoration("getLayerData") diff --git a/plugins/SimulationView/layers.shader b/plugins/SimulationView/layers.shader index e6210c2b65b..5e2b5c64301 100644 --- a/plugins/SimulationView/layers.shader +++ b/plugins/SimulationView/layers.shader @@ -22,8 +22,8 @@ vertex = gl_Position = u_projectionMatrix * u_viewMatrix * u_modelMatrix * a_vertex; // shade the color depending on the extruder index v_color = a_color; - // 8 and 9 are travel moves - if ((a_line_type != 8.0) && (a_line_type != 9.0)) { + // 8, 9 and 12 are travel moves + if ((a_line_type != 8.0) && (a_line_type != 9.0) && (a_line_type != 12.0) { v_color = (a_extruder == u_active_extruder) ? v_color : vec4(u_shade_factor * v_color.rgb, v_color.a); } @@ -48,7 +48,11 @@ fragment = void main() { - if ((u_show_travel_moves == 0) && (v_line_type >= 7.5) && (v_line_type <= 9.5)) { // actually, 8 and 9 + // travel moves: 8, 9 or 12 + if ((u_show_travel_moves == 0) && + (((v_line_type >= 7.5) && (v_line_type <= 9.5)) || + ((v_line_type >= 11.5) && (v_line_type <= 12.5)))) + { // discard movements discard; } @@ -120,7 +124,11 @@ fragment41core = void main() { - if ((u_show_travel_moves == 0) && (v_line_type >= 7.5) && (v_line_type <= 9.5)) { // actually, 8 and 9 + // travel moves: 8, 9 or 12 + if ((u_show_travel_moves == 0) && + (((v_line_type >= 7.5) && (v_line_type <= 9.5)) || + ((v_line_type >= 11.5) && (v_line_type <= 12.5)))) + { // discard movements discard; } diff --git a/plugins/SimulationView/layers3d.shader b/plugins/SimulationView/layers3d.shader index 2bf77e89fae..45f82b4d523 100644 --- a/plugins/SimulationView/layers3d.shader +++ b/plugins/SimulationView/layers3d.shader @@ -242,8 +242,8 @@ geometry41core = if ((v_extruder_opacity[0][int(mod(v_extruder[0], 4))][v_extruder[0] / 4] == 0.0) && (v_line_type[0] != 8) && (v_line_type[0] != 9)) { return; } - // See LayerPolygon; 8 is MoveCombingType, 9 is RetractionType - if ((u_show_travel_moves == 0) && ((v_line_type[0] == 8) || (v_line_type[0] == 9))) { + // See LayerPolygon; 8 is MoveCombingType, 9 is RetractionType, 12 is MoveUnretractionType + if ((u_show_travel_moves == 0) && ((v_line_type[0] == 8) || (v_line_type[0] == 9) || (v_line_type[0] == 12))) { return; } if ((u_show_helpers == 0) && ((v_line_type[0] == 4) || (v_line_type[0] == 5) || (v_line_type[0] == 7) || (v_line_type[0] == 10) || v_line_type[0] == 11)) { @@ -256,7 +256,7 @@ geometry41core = return; } - if ((v_line_type[0] == 8) || (v_line_type[0] == 9)) { + if ((v_line_type[0] == 8) || (v_line_type[0] == 9) || (v_line_type[0] == 12)) { // fixed size for movements size_x = 0.05; } else { @@ -274,7 +274,7 @@ geometry41core = g_vertex_normal_vert = vec3(0.0, 1.0, 0.0); //Upwards normal vector. g_vertex_offset_vert = vec4(g_vertex_normal_vert * size_y, 0.0); //Upwards offset vector. Goes up by half the layer thickness. - if ((v_line_type[0] == 8) || (v_line_type[0] == 9)) { //Travel or retraction moves. + if ((v_line_type[0] == 8) || (v_line_type[0] == 9) || (v_line_type[0] == 12)) { //Travel or retraction moves. vec4 va_head = viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz_head + g_vertex_offset_vert); vec4 va_up = viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz + g_vertex_offset_vert); vec4 va_down = viewProjectionMatrix * (gl_in[0].gl_Position - g_vertex_offset_horz + g_vertex_offset_vert); diff --git a/plugins/SimulationView/layers3d_shadow.shader b/plugins/SimulationView/layers3d_shadow.shader index 88268938c94..5e16701b165 100644 --- a/plugins/SimulationView/layers3d_shadow.shader +++ b/plugins/SimulationView/layers3d_shadow.shader @@ -109,8 +109,8 @@ geometry41core = if ((v_extruder_opacity[0][int(mod(v_extruder[0], 4))][v_extruder[0] / 4] == 0.0) && (v_line_type[0] != 8) && (v_line_type[0] != 9)) { return; } - // See LayerPolygon; 8 is MoveCombingType, 9 is RetractionType - if ((u_show_travel_moves == 0) && ((v_line_type[0] == 8) || (v_line_type[0] == 9))) { + // See LayerPolygon; 8 is MoveCombingType, 9 is RetractionType, 12 is MoveUnretractionType + if ((u_show_travel_moves == 0) && ((v_line_type[0] == 8) || (v_line_type[0] == 9) || (v_line_type[0] == 12))) { return; } if ((u_show_helpers == 0) && ((v_line_type[0] == 4) || (v_line_type[0] == 5) || (v_line_type[0] == 7) || (v_line_type[0] == 10))) { @@ -123,7 +123,7 @@ geometry41core = return; } - if ((v_line_type[0] == 8) || (v_line_type[0] == 9)) { + if ((v_line_type[0] == 8) || (v_line_type[0] == 9) || (v_line_type[0] == 12)) { // fixed size for movements size_x = 0.05; } else { @@ -141,7 +141,7 @@ geometry41core = g_vertex_normal_vert = vec3(0.0, 1.0, 0.0); g_vertex_offset_vert = vec4(g_vertex_normal_vert * size_y, 0.0); - if ((v_line_type[0] == 8) || (v_line_type[0] == 9)) { + if ((v_line_type[0] == 8) || (v_line_type[0] == 9) || (v_line_type[0] == 12)) { vec4 va_head = viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz_head + g_vertex_offset_vert); vec4 va_up = viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz + g_vertex_offset_vert); vec4 va_down = viewProjectionMatrix * (gl_in[0].gl_Position - g_vertex_offset_horz + g_vertex_offset_vert); diff --git a/plugins/SimulationView/layers_shadow.shader b/plugins/SimulationView/layers_shadow.shader index 4bc2de3d0b1..a35b9c5c7c2 100644 --- a/plugins/SimulationView/layers_shadow.shader +++ b/plugins/SimulationView/layers_shadow.shader @@ -48,8 +48,10 @@ fragment = void main() { - if ((u_show_travel_moves == 0) && (v_line_type >= 7.5) && (v_line_type <= 9.5)) - { // actually, 8 and 9 + // travel moves: 8, 9 or 12 + if ((u_show_travel_moves == 0) && + (((v_line_type >= 7.5) && (v_line_type <= 9.5)) || + ((v_line_type >= 11.5) && (v_line_type <= 12.5)))) // discard movements discard; } @@ -124,7 +126,10 @@ fragment41core = void main() { - if ((u_show_travel_moves == 0) && (v_line_type >= 7.5) && (v_line_type <= 9.5)) { // actually, 8 and 9 + // travel moves: 8, 9 or 12 + if ((u_show_travel_moves == 0) && + (((v_line_type >= 7.5) && (v_line_type <= 9.5)) || + ((v_line_type >= 11.5) && (v_line_type <= 12.5)))) // discard movements discard; } diff --git a/resources/themes/cura-light/theme.json b/resources/themes/cura-light/theme.json index 2d537d8ee85..e5182bba447 100644 --- a/resources/themes/cura-light/theme.json +++ b/resources/themes/cura-light/theme.json @@ -465,6 +465,7 @@ "layerview_move_retraction": [128, 127, 255, 255], "layerview_support_interface": [63, 127, 255, 127], "layerview_prime_tower": [0, 255, 255, 255], + "layerview_move_unretraction": [111, 195, 255, 255], "layerview_nozzle": [224, 192, 16, 64], "layerview_starts": [255, 255, 255, 255], From e66410ecfcb694d1913b9ec83d7dd0d4c75381d1 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Fri, 24 May 2024 09:31:29 +0200 Subject: [PATCH 3/3] Add setting for unretract move inset distance CURA-11830 --- resources/definitions/fdmprinter.def.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index fd5878f4153..7f27c407f8f 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -1428,6 +1428,18 @@ "minimum_value": "0", "limit_to_extruder": "wall_0_extruder_nr", "settable_per_mesh": true + }, + "z_seam_approach_inset": + { + "label": "Z Seam approach inset", + "description": "When starting to print a wall, unretract while inside the model. This distance is how much we should be inside the model.", + "unit": "mm", + "type": "float", + "default_value": 0, + "minimum_value": "0", + "value": "wall_line_width_0", + "limit_to_extruder": "wall_0_extruder_nr", + "settable_per_mesh": true } } },