diff --git a/conandata.yml b/conandata.yml index 5712e0b9cd..5500df2f22 100644 --- a/conandata.yml +++ b/conandata.yml @@ -1,16 +1,16 @@ -version: "5.11.0-beta.1" +version: "5.11.0" commit: "unknown" requirements: - - "cura_resources/5.11.0-beta.1" - - "uranium/5.11.0-beta.1" - - "curaengine/5.11.0-beta.1" - - "cura_binary_data/5.11.0-beta.1" - - "fdm_materials/5.11.0-beta.1" + - "cura_resources/5.11.0" + - "uranium/5.11.0" + - "curaengine/5.11.0" + - "cura_binary_data/5.11.0" + - "fdm_materials/5.11.0" - "dulcificum/5.10.0" - "pysavitar/5.11.0-alpha.0" - "pynest2d/5.10.0" requirements_internal: - - "fdm_materials/5.11.0-beta.1" + - "fdm_materials/5.11.0" - "cura_private_data/5.11.0-alpha.0@internal/testing" requirements_enterprise: - "native_cad_plugin/2.0.0" diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index 1c7e554399..a102d7bf48 100755 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -116,7 +116,8 @@ class BuildVolume(SceneNode): self._application.engineCreatedSignal.connect(self._onEngineCreated) self._has_errors = False - self._application.getController().getScene().sceneChanged.connect(self._onSceneChanged) + scene = self._application.getController().getScene() + scene.sceneChanged.connect(self._onSceneChanged) # Objects loaded at the moment. We are connected to the property changed events of these objects. self._scene_objects = set() # type: Set[SceneNode] @@ -645,7 +646,7 @@ class BuildVolume(SceneNode): extra_z = retraction_hop return extra_z - def _onStackChanged(self): + def _onStackChanged(self, *args) -> None: self._stack_change_timer.start() def _onStackChangeTimerFinished(self) -> None: diff --git a/cura/Scene/SliceableObjectDecorator.py b/cura/Scene/SliceableObjectDecorator.py index 627c066b55..dab2060efb 100644 --- a/cura/Scene/SliceableObjectDecorator.py +++ b/cura/Scene/SliceableObjectDecorator.py @@ -1,9 +1,12 @@ +# Copyright (c) 2025 UltiMaker +# Cura is released under the terms of the LGPLv3 or higher. import copy import json +import numpy -from typing import Optional, Dict +from typing import Optional, Dict, List -from PyQt6.QtCore import QBuffer +from PyQt6.QtCore import QBuffer, QTimer from PyQt6.QtGui import QImage, QImageWriter from UM.Scene.SceneNodeDecorator import SceneNodeDecorator @@ -25,6 +28,14 @@ class SliceableObjectDecorator(SceneNodeDecorator): from cura.CuraApplication import CuraApplication application = CuraApplication.getInstance() application.getMachineManager().extruderChanged.connect(self._updateIsAssignedToDisabledExtruder) + self._painted_extruders: Optional[List[int]] = None + + self.paintTextureChanged = Signal() + + self._texture_change_timer = QTimer() + self._texture_change_timer.setInterval(500) # Long interval to avoid triggering during painting + self._texture_change_timer.setSingleShot(True) + self._texture_change_timer.timeout.connect(self._onTextureChangeTimerFinished) def isSliceable(self) -> bool: return True @@ -35,6 +46,32 @@ class SliceableObjectDecorator(SceneNodeDecorator): def getPaintTextureChangedSignal(self) -> Signal: return self.paintTextureChanged + def setPaintedExtrudersCountDirty(self) -> None: + self._texture_change_timer.start() + + def _onTextureChangeTimerFinished(self) -> None: + self._painted_extruders = None + + if (self._paint_texture is None or self._paint_texture.getImage() is None or + "extruder" not in self._texture_data_mapping): + return + + image = self._paint_texture.getImage() + image_bits = image.constBits() + image_bits.setsize(image.sizeInBytes()) + image_array = numpy.frombuffer(image_bits, dtype=numpy.uint32) + + bit_range_start, bit_range_end = self._texture_data_mapping["extruder"] + full_int32 = 0xffffffff + bit_mask = (((full_int32 << (32 - 1 - (bit_range_end - bit_range_start))) & full_int32) >> ( + 32 - 1 - bit_range_end)) + + texel_counts = numpy.bincount((image_array & bit_mask) >> bit_range_start) + self._painted_extruders = [extruder_nr for extruder_nr, count in enumerate(texel_counts) if count > 0] + + from cura.CuraApplication import CuraApplication + CuraApplication.getInstance().globalContainerStackChanged.emit() + def setPaintTexture(self, texture: Texture) -> None: self._paint_texture = texture self.paintTextureChanged.emit() @@ -84,6 +121,8 @@ class SliceableObjectDecorator(SceneNodeDecorator): pass self._is_assigned_to_disabled_extruder = new_is_assigned_to_disabled_extruder + def getPaintedExtruders(self) -> Optional[List[int]]: + return self._painted_extruders def __deepcopy__(self, memo) -> "SliceableObjectDecorator": copied_decorator = SliceableObjectDecorator() diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index cd39947bf8..8e950350b3 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -1,4 +1,4 @@ -# Copyright (c) 2022 Ultimaker B.V. +# Copyright (c) 2025 UltiMaker # Cura is released under the terms of the LGPLv3 or higher. from PyQt6.QtCore import pyqtSignal, pyqtProperty, QObject, QVariant # For communicating data and events to Qt. @@ -254,6 +254,11 @@ class ExtruderManager(QObject): if not support_roof_enabled: support_roof_enabled |= stack_to_use.getProperty("support_roof_enable", "value") + painted_extruders = node.callDecoration("getPaintedExtruders") + if painted_extruders is not None: + for extruder_nr in painted_extruders: + used_extruder_stack_ids.add(self.extruderIds[str(extruder_nr)]) + # Check limit to extruders limit_to_extruder_feature_list = ["wall_0_extruder_nr", "wall_x_extruder_nr", diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index 0108aa2457..f303c612f6 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -416,7 +416,7 @@ class StartSliceJob(Job): # Only check if the printing extruder is enabled for printing meshes is_non_printing_mesh = node.callDecoration("evaluateIsNonPrintingMesh") if not is_non_printing_mesh: - for used_extruder in StartSliceJob._getUsedExtruders(node): + for used_extruder in StartSliceJob._getMainExtruders(node): if not extruders_enabled[used_extruder]: skip_group = True has_model_with_disabled_extruders = True @@ -762,28 +762,11 @@ class StartSliceJob(Job): self._addRelations(relations_set, relation.target.relations) @staticmethod - def _getUsedExtruders(node: SceneNode) -> List[int]: - used_extruders = [] - - # Look at extruders used in painted texture - node_texture = node.callDecoration("getPaintTexture") - texture_data_mapping = node.callDecoration("getTextureDataMapping") - if node_texture is not None and texture_data_mapping is not None and "extruder" in texture_data_mapping: - texture_image = node_texture.getImage() - image_ptr = texture_image.constBits() - image_ptr.setsize(texture_image.sizeInBytes()) - image_size = texture_image.height(), texture_image.width() - image_array = numpy.frombuffer(image_ptr, dtype=numpy.uint32).reshape(image_size) - - bit_range_start, bit_range_end = texture_data_mapping["extruder"] - full_int32 = 0xffffffff - bit_mask = (((full_int32 << (32 - 1 - (bit_range_end - bit_range_start))) & full_int32) >> ( - 32 - 1 - bit_range_end)) - - used_extruders = (numpy.unique(image_array & bit_mask) >> bit_range_start).tolist() + def _getMainExtruders(node: SceneNode) -> List[int]: + used_extruders = node.callDecoration("getPaintedExtruders") # There is no relevant painting data, just take the extruder associated to the model if not used_extruders: used_extruders = [int(node.callDecoration("getActiveExtruderPosition"))] - return used_extruders \ No newline at end of file + return used_extruders diff --git a/plugins/PaintTool/MultiMaterialExtruderConverter.py b/plugins/PaintTool/MultiMaterialExtruderConverter.py index be1d0e05db..8dbf56893e 100644 --- a/plugins/PaintTool/MultiMaterialExtruderConverter.py +++ b/plugins/PaintTool/MultiMaterialExtruderConverter.py @@ -109,4 +109,6 @@ class MultiMaterialExtruderConverter: texture.updateImagePart(image.rect()) + node.callDecoration("setPaintedExtrudersCountDirty") + self.mainExtruderChanged.emit(node) diff --git a/plugins/PaintTool/PaintClearCommand.py b/plugins/PaintTool/PaintClearCommand.py index 1a7d95c98a..1be8b9bcbf 100644 --- a/plugins/PaintTool/PaintClearCommand.py +++ b/plugins/PaintTool/PaintClearCommand.py @@ -5,6 +5,7 @@ from typing import Optional from PyQt6.QtGui import QUndoCommand, QImage, QPainter, QBrush +from cura.Scene.SliceableObjectDecorator import SliceableObjectDecorator from UM.View.GL.Texture import Texture from .PaintCommand import PaintCommand @@ -13,8 +14,12 @@ from .PaintCommand import PaintCommand class PaintClearCommand(PaintCommand): """Provides the command that clears all the painting for the current mode""" - def __init__(self, texture: Texture, bit_range: tuple[int, int], set_value: int) -> None: - super().__init__(texture, bit_range) + def __init__(self, + texture: Texture, + bit_range: tuple[int, int], + set_value: int, + sliceable_object_decorator: Optional[SliceableObjectDecorator] = None) -> None: + super().__init__(texture, bit_range, sliceable_object_decorator=sliceable_object_decorator) self._set_value = set_value def id(self) -> int: @@ -22,13 +27,12 @@ class PaintClearCommand(PaintCommand): def redo(self) -> None: painter = self._makeClearedTexture() - if self._set_value > 0: painter.setCompositionMode(QPainter.CompositionMode.RasterOp_SourceOrDestination) painter.fillRect(self._texture.getImage().rect(), QBrush(self._set_value)) - painter.end() + self._setPaintedExtrudersCountDirty() self._texture.updateImagePart(self._bounding_rect) def mergeWith(self, command: QUndoCommand) -> bool: @@ -38,6 +42,6 @@ class PaintClearCommand(PaintCommand): # There is actually nothing more to do here, both clear commands already have the same original texture return True - def _clearTextureBits(self, painter: QPainter): + def _clearTextureBits(self, painter: QPainter, extended = False): painter.setCompositionMode(QPainter.CompositionMode.RasterOp_NotSourceAndDestination) painter.fillRect(self._texture.getImage().rect(), QBrush(self._getBitRangeMask())) \ No newline at end of file diff --git a/plugins/PaintTool/PaintCommand.py b/plugins/PaintTool/PaintCommand.py index 9dfae1d092..5367d0e0ca 100644 --- a/plugins/PaintTool/PaintCommand.py +++ b/plugins/PaintTool/PaintCommand.py @@ -1,12 +1,14 @@ # Copyright (c) 2025 UltiMaker # Cura is released under the terms of the LGPLv3 or higher. -from typing import Tuple, Optional +from typing import Tuple, Optional, Dict -from PyQt6.QtCore import QRect +import numpy from PyQt6.QtGui import QUndoCommand, QImage, QPainter, QBrush from UM.View.GL.Texture import Texture +from cura.CuraApplication import CuraApplication +from cura.Scene.SliceableObjectDecorator import SliceableObjectDecorator class PaintCommand(QUndoCommand): @@ -14,7 +16,11 @@ class PaintCommand(QUndoCommand): FULL_INT32 = 0xffffffff - def __init__(self, texture: Texture, bit_range: tuple[int, int], make_original_image = True) -> None: + def __init__(self, + texture: Texture, + bit_range: tuple[int, int], + make_original_image = True, + sliceable_object_decorator: Optional[SliceableObjectDecorator] = None) -> None: super().__init__() self._texture: Texture = texture @@ -22,6 +28,8 @@ class PaintCommand(QUndoCommand): self._original_texture_image = None self._bounding_rect = texture.getImage().rect() + self._sliceable_object_decorator: Optional[SliceableObjectDecorator] = sliceable_object_decorator + if make_original_image: self._original_texture_image = self._texture.getImage().copy() painter = QPainter(self._original_texture_image) @@ -35,21 +43,26 @@ class PaintCommand(QUndoCommand): if self._original_texture_image is None: return - painter = self._makeClearedTexture() + painter = self._makeClearedTexture(extended=True) painter.setCompositionMode(QPainter.CompositionMode.RasterOp_SourceOrDestination) painter.drawImage(0, 0, self._original_texture_image) painter.end() + self._setPaintedExtrudersCountDirty() self._texture.updateImagePart(self._bounding_rect) - def _makeClearedTexture(self) -> QPainter: + def _setPaintedExtrudersCountDirty(self) -> None: + if self._sliceable_object_decorator is not None: + self._sliceable_object_decorator.setPaintedExtrudersCountDirty() + + def _makeClearedTexture(self, extended = False) -> QPainter: painter = QPainter(self._texture.getImage()) painter.setRenderHint(QPainter.RenderHint.Antialiasing, False) - self._clearTextureBits(painter) + self._clearTextureBits(painter, extended) return painter - def _clearTextureBits(self, painter: QPainter): + def _clearTextureBits(self, painter: QPainter, extended = False): raise NotImplementedError() @staticmethod diff --git a/plugins/PaintTool/PaintStrokeCommand.py b/plugins/PaintTool/PaintStrokeCommand.py index 8d4a5c2dbd..bcb38a19bc 100644 --- a/plugins/PaintTool/PaintStrokeCommand.py +++ b/plugins/PaintTool/PaintStrokeCommand.py @@ -7,6 +7,7 @@ import math from PyQt6.QtCore import QRect, QRectF, QPoint from PyQt6.QtGui import QUndoCommand, QImage, QPainter, QPainterPath, QPen, QBrush +from cura.Scene.SliceableObjectDecorator import SliceableObjectDecorator from UM.View.GL.Texture import Texture from UM.Math.Polygon import Polygon @@ -16,14 +17,16 @@ class PaintStrokeCommand(PaintCommand): """Provides the command that does the actual painting on objects with undo/redo mechanisms""" PEN_OVERLAP_WIDTH = 2.5 + PEN_OVERLAP_WIDTH_EXTENDED = PEN_OVERLAP_WIDTH + 0.5 def __init__(self, texture: Texture, stroke_polygons: List[Polygon], set_value: int, bit_range: tuple[int, int], - mergeable: bool) -> None: - super().__init__(texture, bit_range, make_original_image = not mergeable) + mergeable: bool, + sliceable_object_decorator: Optional[SliceableObjectDecorator] = None) -> None: + super().__init__(texture, bit_range, make_original_image = not mergeable, sliceable_object_decorator=sliceable_object_decorator) self._stroke_polygons: List[Polygon] = stroke_polygons self._calculateBoundingRect() self._set_value: int = set_value @@ -40,6 +43,7 @@ class PaintStrokeCommand(PaintCommand): painter.drawPath(self._makePainterPath()) painter.end() + self._setPaintedExtrudersCountDirty() self._texture.updateImagePart(self._bounding_rect) def mergeWith(self, command: QUndoCommand) -> bool: @@ -55,9 +59,9 @@ class PaintStrokeCommand(PaintCommand): return True - def _clearTextureBits(self, painter: QPainter): + def _clearTextureBits(self, painter: QPainter, extended = False): painter.setBrush(QBrush(self._getBitRangeMask())) - painter.setPen(QPen(painter.brush(), self.PEN_OVERLAP_WIDTH)) + painter.setPen(QPen(painter.brush(), self.PEN_OVERLAP_WIDTH_EXTENDED if extended else self.PEN_OVERLAP_WIDTH)) painter.setCompositionMode(QPainter.CompositionMode.RasterOp_NotSourceAndDestination) painter.drawPath(self._makePainterPath()) diff --git a/plugins/PaintTool/PaintTool.py b/plugins/PaintTool/PaintTool.py index ff2f196431..72796837e0 100644 --- a/plugins/PaintTool/PaintTool.py +++ b/plugins/PaintTool/PaintTool.py @@ -412,7 +412,7 @@ class PaintTool(Tool): Logger.logException("e", "Error when adding paint stroke") self._last_world_coords = world_coords - self._updateScene(painted_object, update_node = self._mouse_held) + self._updateScene(painted_object, update_node = event_caught) return event_caught return False diff --git a/plugins/PaintTool/PaintView.py b/plugins/PaintTool/PaintView.py index 6750c5b33e..d7bfb6f1c9 100644 --- a/plugins/PaintTool/PaintView.py +++ b/plugins/PaintTool/PaintView.py @@ -23,6 +23,7 @@ from UM.View.GL.OpenGL import OpenGL from UM.i18n import i18nCatalog from UM.Math.Color import Color from UM.Math.Polygon import Polygon +from cura.Scene.SliceableObjectDecorator import SliceableObjectDecorator from .PaintStrokeCommand import PaintStrokeCommand from .PaintClearCommand import PaintClearCommand @@ -242,7 +243,14 @@ class PaintView(CuraView): stroke_path, set_value, self._current_bits_ranges, - merge_with_previous)) + merge_with_previous, + self._getSliceableObjectDecorator())) + + def _getSliceableObjectDecorator(self) -> Optional[SliceableObjectDecorator]: + if self._painted_object is None or self._current_paint_type != "extruder": + return None + + return self._painted_object.getDecorator(SliceableObjectDecorator) def _makeClearCommand(self) -> Optional[PaintClearCommand]: if self._painted_object is None or self._paint_texture is None or self._current_bits_ranges is None: @@ -254,7 +262,10 @@ class PaintView(CuraView): if extruder_stack is not None: set_value = extruder_stack.getValue("extruder_nr") - return PaintClearCommand(self._paint_texture, self._current_bits_ranges, set_value) + return PaintClearCommand(self._paint_texture, + self._current_bits_ranges, + set_value, + self._getSliceableObjectDecorator()) def clearPaint(self): self._prepareDataMapping() diff --git a/resources/conandata.yml b/resources/conandata.yml index f06b0d86a7..eeba833884 100644 --- a/resources/conandata.yml +++ b/resources/conandata.yml @@ -1 +1 @@ -version: "5.11.0-beta.1" +version: "5.11.0" diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index e633017431..4bdad37ff7 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -1542,6 +1542,19 @@ "enabled": "roofing_pattern != 'concentric' and roofing_layer_count > 0 and top_layers > 0", "limit_to_extruder": "roofing_extruder_nr", "settable_per_mesh": true + }, + "roofing_extension": + { + "label": "Top Surface Extension", + "description": "Determines how much the top surfaces are extended beneath overlapping surfaces. By adjusting this value, you can ensure that the outer edges of the top surfaces are concealed by the layers above, resulting in a better visual quality, particularly for models with curved surfaces.", + "type": "float", + "default_value": "0", + "value": "0", + "minimum_value": "0", + "maximum_value_warning": "roofing_line_width * 10", + "enabled": "roofing_layer_count > 0 and top_layers > 0", + "limit_to_extruder": "roofing_extruder_nr", + "settable_per_mesh": true } } }, @@ -2053,7 +2066,7 @@ "unit": "mm", "type": "float", "default_value": 1, - "value": "wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x", + "value": "max(-skin_preshrink, wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x)", "minimum_value": "-skin_preshrink", "limit_to_extruder": "top_bottom_extruder_nr", "enabled": "top_layers > 0 or bottom_layers > 0", diff --git a/resources/definitions/ultimaker_factor4.def.json b/resources/definitions/ultimaker_factor4.def.json index 2149116a03..07ec095cb5 100644 --- a/resources/definitions/ultimaker_factor4.def.json +++ b/resources/definitions/ultimaker_factor4.def.json @@ -200,6 +200,7 @@ "value": "skin_material_flow" }, "roofing_monotonic": { "value": "True" }, + "seam_overhang_angle": { "value": 30 }, "skin_angles": { "value": "[-40, 50]" }, "skin_material_flow": { @@ -362,7 +363,7 @@ "value": "(wall_material_flow + roofing_material_flow) / 2" }, "z_seam_position": { "value": "'backleft'" }, - "z_seam_type": { "value": "'back'" }, + "z_seam_type": { "value": "'sharpest_corner'" }, "zig_zaggify_infill": { "value": "True" } } } \ No newline at end of file diff --git a/resources/definitions/ultimaker_s8.def.json b/resources/definitions/ultimaker_s8.def.json index b7ee5524db..1fc8c05628 100644 --- a/resources/definitions/ultimaker_s8.def.json +++ b/resources/definitions/ultimaker_s8.def.json @@ -236,7 +236,7 @@ "flooring_layer_count": { "value": 1 }, "flooring_material_flow": { "value": "skin_material_flow * 110/93" }, "flooring_monotonic": { "value": false }, - "gradual_flow_discretisation_step_size": { "value": 1 }, + "gradual_flow_discretisation_step_size": { "value": 0.3 }, "gradual_flow_enabled": { "value": true }, "hole_xy_offset": { "value": 0.075 }, "infill_material_flow": { "value": "material_flow if infill_sparse_density < 95 else 95" }, @@ -244,7 +244,7 @@ "infill_pattern": { "value": "'zigzag' if infill_sparse_density > 50 else 'grid'" }, "infill_sparse_density": { "value": 15 }, "infill_wall_line_count": { "value": "1 if infill_sparse_density > 80 else 0" }, - "initial_bottom_layers": { "value": 2 }, + "initial_bottom_layers": { "value": "2 if extruderValueFromContainer(extruder_nr, 'bottom_layers', 2) == bottom_layers else bottom_layers" }, "jerk_flooring": { "maximum_value_warning": "machine_max_jerk_xy / 2", @@ -446,8 +446,7 @@ "retraction_hop_after_extruder_switch_height": { "value": 2 }, "retraction_hop_enabled": { "value": true }, "retraction_min_travel": { "value": "2.5 if support_enable and support_structure=='tree' else line_width * 2.5" }, - "retraction_prime_speed": { "value": 15 }, - "roofing_monotonic": { "value": false }, + "roofing_extension": { "value": 1.2 }, "roofing_pattern": { "value": "'lines'" }, "seam_overhang_angle": { "value": 35 }, "skin_edge_support_thickness": { "value": 0.8 }, diff --git a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_abs_0.2mm_engineering.inst.cfg b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_abs_0.2mm_engineering.inst.cfg index 9e6032024b..1ae08483a8 100644 --- a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_abs_0.2mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_abs_0.2mm_engineering.inst.cfg @@ -12,10 +12,11 @@ type = intent variant = AA+ 0.4 [values] -hole_xy_offset = 0.075 +hole_xy_offset = 0.1 infill_sparse_density = 20 -inset_direction = outside_in +initial_bottom_layers = =bottom_layers +inset_direction = inside_out top_bottom_thickness = =wall_thickness wall_thickness = =line_width * 4 -xy_offset = 0.075 +xy_offset = 0.025 diff --git a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_cpe-plus_0.2mm_engineering.inst.cfg b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_cpe-plus_0.2mm_engineering.inst.cfg index 74a80d566c..1ce33df63e 100644 --- a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_cpe-plus_0.2mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_cpe-plus_0.2mm_engineering.inst.cfg @@ -12,10 +12,11 @@ type = intent variant = AA+ 0.4 [values] -hole_xy_offset = 0.075 +hole_xy_offset = 0.1 infill_sparse_density = 20 -inset_direction = outside_in +initial_bottom_layers = =bottom_layers +inset_direction = inside_out top_bottom_thickness = =wall_thickness wall_thickness = =line_width * 4 -xy_offset = 0.075 +xy_offset = 0.025 diff --git a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_cpe_0.2mm_engineering.inst.cfg b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_cpe_0.2mm_engineering.inst.cfg index 33fd2b9d8b..830b383a14 100644 --- a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_cpe_0.2mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_cpe_0.2mm_engineering.inst.cfg @@ -12,10 +12,11 @@ type = intent variant = AA+ 0.4 [values] -hole_xy_offset = 0.075 +hole_xy_offset = 0.1 infill_sparse_density = 20 -inset_direction = outside_in +initial_bottom_layers = =bottom_layers +inset_direction = inside_out top_bottom_thickness = =wall_thickness wall_thickness = =line_width * 4 -xy_offset = 0.075 +xy_offset = 0.025 diff --git a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_pc_0.2mm_engineering.inst.cfg b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_pc_0.2mm_engineering.inst.cfg index 5c8d802225..117609b5f9 100644 --- a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_pc_0.2mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_pc_0.2mm_engineering.inst.cfg @@ -12,10 +12,11 @@ type = intent variant = AA+ 0.4 [values] -hole_xy_offset = 0.075 +hole_xy_offset = 0.1 infill_sparse_density = 20 -inset_direction = outside_in +initial_bottom_layers = =bottom_layers +inset_direction = inside_out top_bottom_thickness = =wall_thickness wall_thickness = =line_width * 4 -xy_offset = 0.075 +xy_offset = 0.025 diff --git a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_petg_0.2mm_engineering.inst.cfg b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_petg_0.2mm_engineering.inst.cfg index ecd6554ecb..faca17a7f2 100644 --- a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_petg_0.2mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_petg_0.2mm_engineering.inst.cfg @@ -12,10 +12,11 @@ type = intent variant = AA+ 0.4 [values] -hole_xy_offset = 0.075 +hole_xy_offset = 0.1 infill_sparse_density = 20 -inset_direction = outside_in +initial_bottom_layers = =bottom_layers +inset_direction = inside_out top_bottom_thickness = =wall_thickness wall_thickness = =line_width * 4 -xy_offset = 0.075 +xy_offset = 0.025 diff --git a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.2mm_engineering.inst.cfg b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.2mm_engineering.inst.cfg index 11761903ee..d2a93c9628 100644 --- a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.2mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.2mm_engineering.inst.cfg @@ -12,10 +12,11 @@ type = intent variant = AA+ 0.4 [values] -hole_xy_offset = 0.075 +hole_xy_offset = 0.1 infill_sparse_density = 20 -inset_direction = outside_in +initial_bottom_layers = =bottom_layers +inset_direction = inside_out top_bottom_thickness = =wall_thickness wall_thickness = =line_width * 4 -xy_offset = 0.075 +xy_offset = 0.025 diff --git a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.2mm_engineering.inst.cfg b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.2mm_engineering.inst.cfg index 8e88841ec1..94107c6c07 100644 --- a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.2mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.2mm_engineering.inst.cfg @@ -12,10 +12,11 @@ type = intent variant = AA+ 0.4 [values] -hole_xy_offset = 0.075 +hole_xy_offset = 0.1 infill_sparse_density = 20 -inset_direction = outside_in +initial_bottom_layers = =bottom_layers +inset_direction = inside_out top_bottom_thickness = =wall_thickness wall_thickness = =line_width * 4 -xy_offset = 0.075 +xy_offset = 0.025 diff --git a/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_cpe-plus_0.2mm_engineering.inst.cfg b/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_cpe-plus_0.2mm_engineering.inst.cfg index aad54ac9d7..e5cc0e5980 100644 --- a/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_cpe-plus_0.2mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_cpe-plus_0.2mm_engineering.inst.cfg @@ -13,10 +13,11 @@ type = intent variant = CC+ 0.4 [values] -hole_xy_offset = 0.075 +hole_xy_offset = 0.1 infill_sparse_density = 20 -inset_direction = outside_in +initial_bottom_layers = =bottom_layers +inset_direction = inside_out top_bottom_thickness = =wall_thickness wall_thickness = =line_width * 4 -xy_offset = 0.075 +xy_offset = 0.025 diff --git a/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_nylon-cf-slide_0.2mm_engineering.inst.cfg b/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_nylon-cf-slide_0.2mm_engineering.inst.cfg index 9892f6b555..7b507c7dd2 100644 --- a/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_nylon-cf-slide_0.2mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_nylon-cf-slide_0.2mm_engineering.inst.cfg @@ -13,10 +13,11 @@ type = intent variant = CC+ 0.4 [values] -hole_xy_offset = 0.075 +hole_xy_offset = 0.1 infill_sparse_density = 20 -inset_direction = outside_in +initial_bottom_layers = =bottom_layers +inset_direction = inside_out top_bottom_thickness = =wall_thickness wall_thickness = =line_width * 4 -xy_offset = 0.075 +xy_offset = 0.025 diff --git a/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_pc_0.2mm_engineering.inst.cfg b/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_pc_0.2mm_engineering.inst.cfg index 18ff3a861b..d5b8ea662e 100644 --- a/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_pc_0.2mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_pc_0.2mm_engineering.inst.cfg @@ -13,10 +13,11 @@ type = intent variant = CC+ 0.4 [values] -hole_xy_offset = 0.075 +hole_xy_offset = 0.1 infill_sparse_density = 20 -inset_direction = outside_in +initial_bottom_layers = =bottom_layers +inset_direction = inside_out top_bottom_thickness = =wall_thickness wall_thickness = =line_width * 4 -xy_offset = 0.075 +xy_offset = 0.025 diff --git a/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_petcf_0.2mm_engineering.inst.cfg b/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_petcf_0.2mm_engineering.inst.cfg index f41bf80386..7112e25a24 100644 --- a/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_petcf_0.2mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_petcf_0.2mm_engineering.inst.cfg @@ -13,10 +13,11 @@ type = intent variant = CC+ 0.4 [values] -hole_xy_offset = 0.075 +hole_xy_offset = 0.1 infill_sparse_density = 20 -inset_direction = outside_in +initial_bottom_layers = =bottom_layers +inset_direction = inside_out top_bottom_thickness = =wall_thickness wall_thickness = =line_width * 4 -xy_offset = 0.075 +xy_offset = 0.025 diff --git a/resources/intent/ultimaker_s8/um_s8_cc_plus_0.6_nylon-cf-slide_0.2mm_engineering.inst.cfg b/resources/intent/ultimaker_s8/um_s8_cc_plus_0.6_nylon-cf-slide_0.2mm_engineering.inst.cfg index cb43ac7cfa..b123d08d07 100644 --- a/resources/intent/ultimaker_s8/um_s8_cc_plus_0.6_nylon-cf-slide_0.2mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s8/um_s8_cc_plus_0.6_nylon-cf-slide_0.2mm_engineering.inst.cfg @@ -12,10 +12,11 @@ type = intent variant = CC+ 0.6 [values] -hole_xy_offset = 0.075 +hole_xy_offset = 0.1 infill_sparse_density = 20 -inset_direction = outside_in +initial_bottom_layers = =bottom_layers +inset_direction = inside_out top_bottom_thickness = =wall_thickness wall_thickness = =line_width * 4 -xy_offset = 0.075 +xy_offset = 0.025 diff --git a/resources/intent/ultimaker_s8/um_s8_cc_plus_0.6_petcf_0.2mm_engineering.inst.cfg b/resources/intent/ultimaker_s8/um_s8_cc_plus_0.6_petcf_0.2mm_engineering.inst.cfg index 0ecb4c3a61..6b76067441 100644 --- a/resources/intent/ultimaker_s8/um_s8_cc_plus_0.6_petcf_0.2mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s8/um_s8_cc_plus_0.6_petcf_0.2mm_engineering.inst.cfg @@ -12,10 +12,11 @@ type = intent variant = CC+ 0.6 [values] -hole_xy_offset = 0.075 +hole_xy_offset = 0.1 infill_sparse_density = 20 -inset_direction = outside_in +initial_bottom_layers = =bottom_layers +inset_direction = inside_out top_bottom_thickness = =wall_thickness wall_thickness = =line_width * 4 -xy_offset = 0.075 +xy_offset = 0.025 diff --git a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_abs_0.2mm.inst.cfg b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_abs_0.2mm.inst.cfg index dcb79ffbee..be7813a2dc 100644 --- a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_abs_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_abs_0.2mm.inst.cfg @@ -16,7 +16,6 @@ cool_min_layer_time = 4 cool_min_layer_time_fan_speed_max = 9 cool_min_temperature = =material_print_temperature - 20 hole_xy_offset = 0.1 -inset_direction = inside_out retraction_prime_speed = 15 speed_roofing = =speed_topbottom * 1/3 speed_wall_x = =speed_wall diff --git a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_petg_0.2mm.inst.cfg b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_petg_0.2mm.inst.cfg index fd3942a782..acf6ed24e0 100644 --- a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_petg_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_petg_0.2mm.inst.cfg @@ -14,7 +14,6 @@ weight = -2 [values] cool_min_layer_time = 4 hole_xy_offset = 0.1 -inset_direction = inside_out material_print_temperature = =default_material_print_temperature + 5 retraction_prime_speed = 15 speed_roofing = =speed_topbottom * 1/3 diff --git a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.15mm.inst.cfg b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.15mm.inst.cfg index 3807598f26..68e7629157 100644 --- a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.15mm.inst.cfg +++ b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.15mm.inst.cfg @@ -14,7 +14,6 @@ weight = -1 [values] cool_min_temperature = =material_print_temperature - 20 hole_xy_offset = 0.1 -inset_direction = inside_out material_final_print_temperature = =material_print_temperature - 15 material_initial_print_temperature = =material_print_temperature - 15 retraction_prime_speed = =retraction_speed diff --git a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.1mm.inst.cfg b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.1mm.inst.cfg index c047ded9c3..fde3aae9b0 100644 --- a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.1mm.inst.cfg +++ b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.1mm.inst.cfg @@ -14,7 +14,6 @@ weight = 0 [values] cool_min_temperature = =material_print_temperature - 20 hole_xy_offset = 0.1 -inset_direction = inside_out material_final_print_temperature = =material_print_temperature - 15 material_initial_print_temperature = =material_print_temperature - 15 retraction_prime_speed = =retraction_speed diff --git a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.2mm.inst.cfg b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.2mm.inst.cfg index 580f05d0b7..47b96dd98c 100644 --- a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.2mm.inst.cfg @@ -14,7 +14,6 @@ weight = -2 [values] cool_min_temperature = =material_print_temperature - 20 hole_xy_offset = 0.1 -inset_direction = inside_out material_final_print_temperature = =material_print_temperature - 15 material_initial_print_temperature = =material_print_temperature - 15 retraction_prime_speed = =retraction_speed diff --git a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.15mm.inst.cfg b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.15mm.inst.cfg index 06d3c93cf3..4ac348f94b 100644 --- a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.15mm.inst.cfg +++ b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.15mm.inst.cfg @@ -14,7 +14,6 @@ weight = -1 [values] cool_min_temperature = =material_print_temperature - 20 hole_xy_offset = 0.1 -inset_direction = inside_out retraction_prime_speed = =retraction_speed retraction_speed = 25 speed_roofing = =speed_topbottom * 1/3 diff --git a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.1mm.inst.cfg b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.1mm.inst.cfg index 6099457369..b3d13edf4a 100644 --- a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.1mm.inst.cfg +++ b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.1mm.inst.cfg @@ -14,7 +14,6 @@ weight = 0 [values] cool_min_temperature = =material_print_temperature - 20 hole_xy_offset = 0.1 -inset_direction = inside_out retraction_prime_speed = =retraction_speed speed_roofing = =speed_topbottom * 1/3 speed_wall_x = =speed_wall diff --git a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.2mm.inst.cfg b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.2mm.inst.cfg index 373fa7b78e..346a658ad0 100644 --- a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.2mm.inst.cfg @@ -14,7 +14,6 @@ weight = -2 [values] cool_min_temperature = =material_print_temperature - 20 hole_xy_offset = 0.1 -inset_direction = inside_out retraction_prime_speed = =retraction_speed speed_roofing = =speed_topbottom * 1/3 speed_wall_x = =speed_wall diff --git a/resources/setting_visibility/expert.cfg b/resources/setting_visibility/expert.cfg index 1aaa6f999e..8f07f7a2f9 100644 --- a/resources/setting_visibility/expert.cfg +++ b/resources/setting_visibility/expert.cfg @@ -49,6 +49,7 @@ z_seam_corner z_seam_relative [top_bottom] +roofing_extension roofing_layer_count flooring_layer_count top_bottom_extruder_nr diff --git a/resources/variants/ultimaker_s6_aa025.inst.cfg b/resources/variants/ultimaker_s6_aa025.inst.cfg index 95ac4eeb3b..e90473103b 100644 --- a/resources/variants/ultimaker_s6_aa025.inst.cfg +++ b/resources/variants/ultimaker_s6_aa025.inst.cfg @@ -112,6 +112,7 @@ retraction_hop_after_extruder_switch_height = =retraction_hop retraction_hop_enabled = =extruders_enabled_count > 1 retraction_min_travel = 5 retraction_prime_speed = =retraction_speed +roofing_extension = 0 roofing_monotonic = True roofing_pattern = =top_bottom_pattern seam_overhang_angle = =support_angle diff --git a/resources/variants/ultimaker_s6_aa04.inst.cfg b/resources/variants/ultimaker_s6_aa04.inst.cfg index ac227c8cd0..a12753fc41 100644 --- a/resources/variants/ultimaker_s6_aa04.inst.cfg +++ b/resources/variants/ultimaker_s6_aa04.inst.cfg @@ -112,6 +112,7 @@ retraction_hop_after_extruder_switch_height = =retraction_hop retraction_hop_enabled = =extruders_enabled_count > 1 retraction_min_travel = 5 retraction_prime_speed = 15 +roofing_extension = 0 roofing_monotonic = True roofing_pattern = =top_bottom_pattern seam_overhang_angle = =support_angle diff --git a/resources/variants/ultimaker_s6_aa08.inst.cfg b/resources/variants/ultimaker_s6_aa08.inst.cfg index 760ce661b9..2269c0cba2 100644 --- a/resources/variants/ultimaker_s6_aa08.inst.cfg +++ b/resources/variants/ultimaker_s6_aa08.inst.cfg @@ -123,6 +123,7 @@ retraction_hop_only_when_collides = True retraction_min_travel = 5 retraction_prime_speed = 15 retraction_speed = 25 +roofing_extension = 0 roofing_monotonic = True roofing_pattern = =top_bottom_pattern seam_overhang_angle = =support_angle diff --git a/resources/variants/ultimaker_s6_cc04.inst.cfg b/resources/variants/ultimaker_s6_cc04.inst.cfg index 37573be739..9baa9ceb0e 100644 --- a/resources/variants/ultimaker_s6_cc04.inst.cfg +++ b/resources/variants/ultimaker_s6_cc04.inst.cfg @@ -111,6 +111,7 @@ retraction_hop_after_extruder_switch_height = =retraction_hop retraction_hop_enabled = =extruders_enabled_count > 1 retraction_min_travel = 5 retraction_prime_speed = =retraction_speed +roofing_extension = 0 roofing_monotonic = True roofing_pattern = =top_bottom_pattern seam_overhang_angle = =support_angle diff --git a/resources/variants/ultimaker_s6_cc06.inst.cfg b/resources/variants/ultimaker_s6_cc06.inst.cfg index 595a181f63..4adcb69336 100644 --- a/resources/variants/ultimaker_s6_cc06.inst.cfg +++ b/resources/variants/ultimaker_s6_cc06.inst.cfg @@ -111,6 +111,7 @@ retraction_hop_after_extruder_switch_height = =retraction_hop retraction_hop_enabled = =extruders_enabled_count > 1 retraction_min_travel = 5 retraction_prime_speed = =retraction_speed +roofing_extension = 0 roofing_monotonic = True roofing_pattern = =top_bottom_pattern seam_overhang_angle = =support_angle diff --git a/resources/variants/ultimaker_s8_aa025.inst.cfg b/resources/variants/ultimaker_s8_aa025.inst.cfg index 96e31fbb04..883a551da8 100644 --- a/resources/variants/ultimaker_s8_aa025.inst.cfg +++ b/resources/variants/ultimaker_s8_aa025.inst.cfg @@ -112,6 +112,7 @@ retraction_hop_after_extruder_switch_height = =retraction_hop retraction_hop_enabled = =extruders_enabled_count > 1 retraction_min_travel = 5 retraction_prime_speed = =retraction_speed +roofing_extension = 0 roofing_monotonic = True roofing_pattern = =top_bottom_pattern seam_overhang_angle = =support_angle diff --git a/resources/variants/ultimaker_s8_aa04.inst.cfg b/resources/variants/ultimaker_s8_aa04.inst.cfg index 8e7df64b79..3a181f9c46 100644 --- a/resources/variants/ultimaker_s8_aa04.inst.cfg +++ b/resources/variants/ultimaker_s8_aa04.inst.cfg @@ -112,6 +112,7 @@ retraction_hop_after_extruder_switch_height = =retraction_hop retraction_hop_enabled = =extruders_enabled_count > 1 retraction_min_travel = 5 retraction_prime_speed = 15 +roofing_extension = 0 roofing_monotonic = True roofing_pattern = =top_bottom_pattern seam_overhang_angle = =support_angle diff --git a/resources/variants/ultimaker_s8_aa08.inst.cfg b/resources/variants/ultimaker_s8_aa08.inst.cfg index ca0e09485e..ebbaa15620 100644 --- a/resources/variants/ultimaker_s8_aa08.inst.cfg +++ b/resources/variants/ultimaker_s8_aa08.inst.cfg @@ -123,6 +123,7 @@ retraction_hop_only_when_collides = True retraction_min_travel = 5 retraction_prime_speed = 15 retraction_speed = 25 +roofing_extension = 0 roofing_monotonic = True roofing_pattern = =top_bottom_pattern seam_overhang_angle = =support_angle diff --git a/resources/variants/ultimaker_s8_cc04.inst.cfg b/resources/variants/ultimaker_s8_cc04.inst.cfg index 91a7186c0d..f0dbf19934 100644 --- a/resources/variants/ultimaker_s8_cc04.inst.cfg +++ b/resources/variants/ultimaker_s8_cc04.inst.cfg @@ -111,6 +111,7 @@ retraction_hop_after_extruder_switch_height = =retraction_hop retraction_hop_enabled = =extruders_enabled_count > 1 retraction_min_travel = 5 retraction_prime_speed = =retraction_speed +roofing_extension = 0 roofing_monotonic = True roofing_pattern = =top_bottom_pattern seam_overhang_angle = =support_angle diff --git a/resources/variants/ultimaker_s8_cc06.inst.cfg b/resources/variants/ultimaker_s8_cc06.inst.cfg index 3ccfe3e2d6..e81dfa1543 100644 --- a/resources/variants/ultimaker_s8_cc06.inst.cfg +++ b/resources/variants/ultimaker_s8_cc06.inst.cfg @@ -111,6 +111,7 @@ retraction_hop_after_extruder_switch_height = =retraction_hop retraction_hop_enabled = =extruders_enabled_count > 1 retraction_min_travel = 5 retraction_prime_speed = =retraction_speed +roofing_extension = 0 roofing_monotonic = True roofing_pattern = =top_bottom_pattern seam_overhang_angle = =support_angle