diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index a6327de3b6..8a014c17bc 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -28,6 +28,6 @@ This fixes... OR This improves... -->
- [ ] My code follows the style guidelines of this project as described in [UltiMaker Meta](https://github.com/Ultimaker/Meta) and [Cura QML best practices](https://github.com/Ultimaker/Cura/wiki/QML-Best-Practices)
-- [ ] I have read the [Contribution guide](https://github.com/Ultimaker/Cura/blob/main/contributing.md)
+- [ ] I have read the [Contribution guide](https://github.com/Ultimaker/Cura/blob/main/CONTRIBUTING.md)
- [ ] I have commented my code, particularly in hard-to-understand areas
-- [ ] I have uploaded any files required to test this change
\ No newline at end of file
+- [ ] I have uploaded any files required to test this change
diff --git a/.gitignore b/.gitignore
index 45cf4400f6..048bb915c7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -101,3 +101,4 @@ graph_info.json
Ultimaker-Cura.spec
.run/
/printer-linter/src/printerlinter.egg-info/
+/resources/qml/Dialogs/AboutDialogVersionsList.qml
diff --git a/AboutDialogVersionsList.qml.jinja b/AboutDialogVersionsList.qml.jinja
new file mode 100644
index 0000000000..0503469660
--- /dev/null
+++ b/AboutDialogVersionsList.qml.jinja
@@ -0,0 +1,61 @@
+import QtQuick 2.2
+import QtQuick.Controls 2.9
+
+import UM 1.6 as UM
+import Cura 1.5 as Cura
+
+
+ListView
+{
+ id: projectBuildInfoList
+ visible: false
+ anchors.top: creditsNotes.bottom
+ anchors.topMargin: UM.Theme.getSize("default_margin").height
+ width: parent.width
+ height: base.height - y - (2 * UM.Theme.getSize("default_margin").height + closeButton.height)
+
+ ScrollBar.vertical: UM.ScrollBar
+ {
+ id: projectBuildInfoListScrollBar
+ }
+
+ delegate: Row
+ {
+ spacing: UM.Theme.getSize("narrow_margin").width
+ UM.Label
+ {
+ text: (model.name)
+ width: (projectBuildInfoList.width* 0.4) | 0
+ elide: Text.ElideRight
+ }
+ UM.Label
+ {
+ text: (model.version)
+ width: (projectBuildInfoList.width *0.6) | 0
+ elide: Text.ElideRight
+ }
+
+ }
+ model: ListModel
+ {
+ id: developerInfo
+ }
+ Component.onCompleted:
+ {
+ var conan_installs = {{ conan_installs }};
+ var python_installs = {{ python_installs }};
+ developerInfo.append({ name : "
Conan Installs
", version : '' });
+ for (var n in conan_installs)
+ {
+ developerInfo.append({ name : conan_installs[n][0], version : conan_installs[n][1] });
+ }
+ developerInfo.append({ name : '', version : '' });
+ developerInfo.append({ name : "Python Installs
", version : '' });
+ for (var n in python_installs)
+ {
+ developerInfo.append({ name : python_installs[n][0], version : python_installs[n][1] });
+ }
+
+ }
+}
+
diff --git a/README.md b/README.md
index c40ead2baa..eb04799339 100644
--- a/README.md
+++ b/README.md
@@ -12,7 +12,7 @@
[![Badge Test]][Test]
[![Badge Conan]][Conan]
-
+![Badge Downloads]
@@ -84,6 +84,7 @@
[Badge Conan]: https://img.shields.io/github/workflow/status/Ultimaker/Cura/conan-package?style=for-the-badge&logoColor=white&labelColor=6185aa&color=4c6987&logo=Conan&label=Conan%20Package
[Badge Test]: https://img.shields.io/github/workflow/status/Ultimaker/Cura/unit-test?style=for-the-badge&logoColor=white&labelColor=4a999d&color=346c6e&logo=Codacy&label=Unit%20Test
[Badge Size]: https://img.shields.io/github/repo-size/ultimaker/cura?style=for-the-badge&logoColor=white&labelColor=715a97&color=584674&logo=GoogleAnalytics
+[Badge Downloads]: https://img.shields.io/github/downloads-pre/Ultimaker/Cura/latest/total?style=for-the-badge
diff --git a/conanfile.py b/conanfile.py
index 46e143cc10..77cecf1134 100644
--- a/conanfile.py
+++ b/conanfile.py
@@ -10,7 +10,7 @@ from conan.tools.env import VirtualRunEnv, Environment, VirtualBuildEnv
from conan.tools.scm import Version
from conan.errors import ConanInvalidConfiguration, ConanException
-required_conan_version = "<=1.56.0"
+required_conan_version = ">=1.54 <=1.56.0 || >=1.58.0 <2.0.0"
class CuraConan(ConanFile):
@@ -21,7 +21,7 @@ class CuraConan(ConanFile):
description = "3D printer / slicing GUI built on top of the Uranium framework"
topics = ("conan", "python", "pyqt6", "qt", "qml", "3d-printing", "slicer")
build_policy = "missing"
- exports = "LICENSE*", "UltiMaker-Cura.spec.jinja", "CuraVersion.py.jinja"
+ exports = "LICENSE*", "UltiMaker-Cura.spec.jinja", "CuraVersion.py.jinja", "AboutDialogVersionsList.qml.jinja"
settings = "os", "compiler", "build_type", "arch"
# FIXME: Remove specific branch once merged to main
@@ -138,6 +138,37 @@ class CuraConan(ConanFile):
return "'x86_64'"
return "None"
+ def _generate_about_versions(self, location):
+ with open(os.path.join(self.recipe_folder, "AboutDialogVersionsList.qml.jinja"), "r") as f:
+ cura_version_py = Template(f.read())
+
+ conan_installs = []
+ python_installs = []
+
+ # list of conan installs
+ for _, dependency in self.dependencies.host.items():
+ conan_installs.append([dependency.ref.name,dependency.ref.version])
+
+ #list of python installs
+ outer = '"' if self.settings.os == "Windows" else "'"
+ inner = "'" if self.settings.os == "Windows" else '"'
+ python_ins_cmd = f"python -c {outer}import pkg_resources; print({inner};{inner}.join([(s.key+{inner},{inner}+ s.version) for s in pkg_resources.working_set])){outer}"
+ from six import StringIO
+ buffer = StringIO()
+ self.run(python_ins_cmd, run_environment= True, env = "conanrun", output=buffer)
+
+ packages = str(buffer.getvalue()).split("-----------------\n")
+ package = packages[1].strip('\r\n').split(";")
+ for pack in package:
+ python_installs.append(pack.split(","))
+
+ with open(os.path.join(location, "AboutDialogVersionsList.qml"), "w") as f:
+ f.write(cura_version_py.render(
+ conan_installs = conan_installs,
+ python_installs = python_installs
+ ))
+
+
def _generate_cura_version(self, location):
with open(os.path.join(self.recipe_folder, "CuraVersion.py.jinja"), "r") as f:
cura_version_py = Template(f.read())
@@ -308,6 +339,7 @@ class CuraConan(ConanFile):
self._generate_cura_version(os.path.join(self.source_folder, "cura"))
+
if self.options.devtools:
entitlements_file = "'{}'".format(os.path.join(self.source_folder, "packaging", "MacOS", "cura.entitlements"))
self._generate_pyinstaller_spec(location = self.generators_folder,
@@ -325,6 +357,8 @@ class CuraConan(ConanFile):
pot = self.python_requires["translationextractor"].module.ExtractTranslations(self, cpp_info.bindirs[0])
pot.generate()
+ self._generate_about_versions(os.path.join(self.source_folder, "resources","qml", "Dialogs"))
+
def build(self):
if self.options.devtools:
if self.settings.os != "Windows" or self.conf.get("tools.microsoft.bash:path", check_type = str):
@@ -432,6 +466,7 @@ echo "CURA_APP_NAME={{ cura_app_name }}" >> ${{ env_prefix }}GITHUB_ENV
save(self, os.path.join(self._script_dir, f"activate_github_actions_version_env{ext}"), activate_github_actions_version_env)
self._generate_cura_version(os.path.join(self._site_packages, "cura"))
+ self._generate_about_versions(str(self._share_dir.joinpath("cura", "resources", "qml", "Dialogs")))
entitlements_file = "'{}'".format(Path(self.cpp_info.res_paths[2], "MacOS", "cura.entitlements"))
self._generate_pyinstaller_spec(location = self._base_dir,
@@ -439,6 +474,7 @@ echo "CURA_APP_NAME={{ cura_app_name }}" >> ${{ env_prefix }}GITHUB_ENV
icon_path = "'{}'".format(os.path.join(self.package_folder, self.cpp_info.resdirs[2], self.conan_data["pyinstaller"]["icon"][str(self.settings.os)])).replace("\\", "\\\\"),
entitlements_file = entitlements_file if self.settings.os == "Macos" else "None")
+
def package(self):
copy(self, "cura_app.py", src = self.source_folder, dst = os.path.join(self.package_folder, self.cpp.package.bindirs[0]))
copy(self, "*", src = os.path.join(self.source_folder, "cura"), dst = os.path.join(self.package_folder, self.cpp.package.libdirs[0]))
diff --git a/cura/CrashHandler.py b/cura/CrashHandler.py
index e6214d7073..e2f20355c7 100644
--- a/cura/CrashHandler.py
+++ b/cura/CrashHandler.py
@@ -22,7 +22,7 @@ except ImportError:
from PyQt6.QtCore import QT_VERSION_STR, PYQT_VERSION_STR, QUrl
from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout, QLabel, QTextEdit, QGroupBox, QCheckBox, QPushButton
-from PyQt6.QtGui import QDesktopServices
+from PyQt6.QtGui import QDesktopServices, QTextCursor
from UM.Application import Application
from UM.Logger import Logger
@@ -309,7 +309,7 @@ class CrashHandler:
trace = "".join(trace_list)
text_area.setText(trace)
text_area.setReadOnly(True)
-
+ text_area.moveCursor(QTextCursor.MoveOperation.End) # Move cursor to end, so we see last bit of the exception
layout.addWidget(text_area)
group.setLayout(layout)
@@ -400,7 +400,7 @@ class CrashHandler:
text_area.setText(logdata)
text_area.setReadOnly(True)
-
+ text_area.moveCursor(QTextCursor.MoveOperation.End) # Move cursor to end, so we see last bit of the log
layout.addWidget(text_area)
group.setLayout(layout)
diff --git a/cura/CuraActions.py b/cura/CuraActions.py
index 193803325f..6c2d3f4cb8 100644
--- a/cura/CuraActions.py
+++ b/cura/CuraActions.py
@@ -1,15 +1,18 @@
-# Copyright (c) 2018 Ultimaker B.V.
+# Copyright (c) 2023 UltiMaker
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt6.QtCore import QObject, QUrl
-from PyQt6.QtGui import QDesktopServices
from typing import List, cast
+from PyQt6.QtCore import QObject, QUrl, QMimeData
+from PyQt6.QtGui import QDesktopServices
+from PyQt6.QtWidgets import QApplication
+
from UM.Event import CallFunctionEvent
from UM.FlameProfiler import pyqtSlot
from UM.Math.Vector import Vector
from UM.Scene.Selection import Selection
from UM.Scene.Iterator.BreadthFirstIterator import BreadthFirstIterator
+from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
from UM.Operations.GroupedOperation import GroupedOperation
from UM.Operations.RemoveSceneNodeOperation import RemoveSceneNodeOperation
from UM.Operations.TranslateOperation import TranslateOperation
@@ -19,6 +22,7 @@ from cura.Operations.SetParentOperation import SetParentOperation
from cura.MultiplyObjectsJob import MultiplyObjectsJob
from cura.Settings.SetObjectExtruderOperation import SetObjectExtruderOperation
from cura.Settings.ExtruderManager import ExtruderManager
+from cura.Arranging.Nest2DArrange import createGroupOperationForArrange
from cura.Operations.SetBuildPlateNumberOperation import SetBuildPlateNumberOperation
@@ -181,5 +185,60 @@ class CuraActions(QObject):
Selection.clear()
+ @pyqtSlot()
+ def cut(self) -> None:
+ self.copy()
+ self.deleteSelection()
+
+ @pyqtSlot()
+ def copy(self) -> None:
+ mesh_writer = cura.CuraApplication.CuraApplication.getInstance().getMeshFileHandler().getWriter("3MFWriter")
+ if not mesh_writer:
+ Logger.log("e", "No 3MF writer found, unable to copy.")
+ return
+
+ # Get the selected nodes
+ selected_objects = Selection.getAllSelectedObjects()
+ # Serialize the nodes to a string
+ scene_string = mesh_writer.sceneNodesToString(selected_objects)
+ # Put the string on the clipboard
+ QApplication.clipboard().setText(scene_string)
+
+ @pyqtSlot()
+ def paste(self) -> None:
+ application = cura.CuraApplication.CuraApplication.getInstance()
+ mesh_reader = application.getMeshFileHandler().getReaderForFile(".3mf")
+ if not mesh_reader:
+ Logger.log("e", "No 3MF reader found, unable to paste.")
+ return
+
+ # Parse the scene from the clipboard
+ scene_string = QApplication.clipboard().text()
+
+ nodes = mesh_reader.stringToSceneNodes(scene_string)
+
+ if not nodes:
+ # Nothing to paste
+ return
+
+ # Find all fixed nodes, these are the nodes that should be avoided when arranging
+ fixed_nodes = []
+ root = application.getController().getScene().getRoot()
+ for node in DepthFirstIterator(root):
+ # Only count sliceable objects
+ if node.callDecoration("isSliceable"):
+ fixed_nodes.append(node)
+ # Add the new nodes to the scene, and arrange them
+ group_operation, not_fit_count = createGroupOperationForArrange(nodes, application.getBuildVolume(),
+ fixed_nodes, factor=10000,
+ add_new_nodes_in_scene=True)
+ group_operation.push()
+
+ # deselect currently selected nodes, and select the new nodes
+ for node in Selection.getAllSelectedObjects():
+ Selection.remove(node)
+ for node in nodes:
+ Selection.add(node)
+
def _openUrl(self, url: QUrl) -> None:
QDesktopServices.openUrl(url)
diff --git a/cura/Machines/Models/IntentSelectionModel.py b/cura/Machines/Models/IntentSelectionModel.py
index 603244a12b..3df94e4ad8 100644
--- a/cura/Machines/Models/IntentSelectionModel.py
+++ b/cura/Machines/Models/IntentSelectionModel.py
@@ -71,15 +71,15 @@ class IntentSelectionModel(ListModel):
def _update(self) -> None:
Logger.log("d", "Updating {model_class_name}.".format(model_class_name = self.__class__.__name__))
-
- global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()
+ cura_application = cura.CuraApplication.CuraApplication.getInstance()
+ global_stack = cura_application.getGlobalContainerStack()
if global_stack is None:
self.setItems([])
Logger.log("d", "No active GlobalStack, set quality profile model as empty.")
return
# Check for material compatibility
- if not cura.CuraApplication.CuraApplication.getInstance().getMachineManager().activeMaterialsCompatible():
+ if not cura_application.getMachineManager().activeMaterialsCompatible():
Logger.log("d", "No active material compatibility, set quality profile model as empty.")
self.setItems([])
return
@@ -101,17 +101,18 @@ class IntentSelectionModel(ListModel):
else:
# There can be multiple intents with the same category, use one of these
# intent-metadata's for the icon/description defintions for the intent
- intent_metadata = cura.CuraApplication.CuraApplication \
- .getInstance() \
- .getContainerRegistry() \
- .findContainersMetadata(type="intent", definition=global_stack.definition.getId(),
- intent_category=category)[0]
+
+
+
+ intent_metadata = cura_application.getContainerRegistry().findContainersMetadata(type="intent",
+ definition=global_stack.findInstanceContainerDefinitionId(global_stack.definition),
+ intent_category=category)[0]
intent_name = intent_metadata.get("name", category.title())
icon = intent_metadata.get("icon", None)
description = intent_metadata.get("description", None)
- if icon is not None:
+ if icon is not None and icon != '':
try:
icon = QUrl.fromLocalFile(
Resources.getPath(cura.CuraApplication.CuraApplication.ResourceTypes.ImageFiles, icon))
diff --git a/cura/Machines/Models/MachineListModel.py b/cura/Machines/Models/MachineListModel.py
index 74ef7ae7b4..69a3c53d03 100644
--- a/cura/Machines/Models/MachineListModel.py
+++ b/cura/Machines/Models/MachineListModel.py
@@ -110,22 +110,22 @@ class MachineListModel(ListModel):
for abstract_machine in abstract_machine_stacks:
definition_id = abstract_machine.definition.getId()
- online_machine_stacks = machines_manager.getMachinesWithDefinition(definition_id, online_only = True)
+ connected_machine_stacks = machines_manager.getMachinesWithDefinition(definition_id, online_only = False)
- online_machine_stacks = list(filter(lambda machine: machine.hasNetworkedConnection(), online_machine_stacks))
- online_machine_stacks.sort(key=lambda machine: machine.getName().upper())
+ connected_machine_stacks = list(filter(lambda machine: machine.hasNetworkedConnection(), connected_machine_stacks))
+ connected_machine_stacks.sort(key=lambda machine: machine.getName().upper())
if abstract_machine in other_machine_stacks:
other_machine_stacks.remove(abstract_machine)
- if abstract_machine in online_machine_stacks:
- online_machine_stacks.remove(abstract_machine)
+ if abstract_machine in connected_machine_stacks:
+ connected_machine_stacks.remove(abstract_machine)
# Create a list item for abstract machine
- self.addItem(abstract_machine, True, len(online_machine_stacks))
+ self.addItem(abstract_machine, True, len(connected_machine_stacks))
# Create list of machines that are children of the abstract machine
- for stack in online_machine_stacks:
+ for stack in connected_machine_stacks:
if self._show_cloud_printers:
self.addItem(stack, True)
# Remove this machine from the other stack list
diff --git a/cura/Settings/CuraContainerStack.py b/cura/Settings/CuraContainerStack.py
index 41502f8874..b5b8a1b721 100755
--- a/cura/Settings/CuraContainerStack.py
+++ b/cura/Settings/CuraContainerStack.py
@@ -359,7 +359,7 @@ class CuraContainerStack(ContainerStack):
return self.definition
@classmethod
- def _findInstanceContainerDefinitionId(cls, machine_definition: DefinitionContainerInterface) -> str:
+ def findInstanceContainerDefinitionId(cls, machine_definition: DefinitionContainerInterface) -> str:
"""Find the ID that should be used when searching for instance containers for a specified definition.
This handles the situation where the definition specifies we should use a different definition when
@@ -379,7 +379,7 @@ class CuraContainerStack(ContainerStack):
Logger.log("w", "Unable to find parent definition {parent} for machine {machine}", parent = quality_definition, machine = machine_definition.id) #type: ignore
return machine_definition.id #type: ignore
- return cls._findInstanceContainerDefinitionId(definitions[0])
+ return cls.findInstanceContainerDefinitionId(definitions[0])
def getExtruderPositionValueWithDefault(self, key):
"""getProperty for extruder positions, with translation from -1 to default extruder number"""
diff --git a/plugins/3MFReader/ThreeMFReader.py b/plugins/3MFReader/ThreeMFReader.py
index e8b6a54e46..e06e9dcf4e 100755
--- a/plugins/3MFReader/ThreeMFReader.py
+++ b/plugins/3MFReader/ThreeMFReader.py
@@ -56,7 +56,8 @@ class ThreeMFReader(MeshReader):
def emptyFileHintSet(self) -> bool:
return self._empty_project
- def _createMatrixFromTransformationString(self, transformation: str) -> Matrix:
+ @staticmethod
+ def _createMatrixFromTransformationString(transformation: str) -> Matrix:
if transformation == "":
return Matrix()
@@ -90,7 +91,8 @@ class ThreeMFReader(MeshReader):
return temp_mat
- def _convertSavitarNodeToUMNode(self, savitar_node: Savitar.SceneNode, file_name: str = "") -> Optional[SceneNode]:
+ @staticmethod
+ def _convertSavitarNodeToUMNode(savitar_node: Savitar.SceneNode, file_name: str = "") -> Optional[SceneNode]:
"""Convenience function that converts a SceneNode object (as obtained from libSavitar) to a scene node.
:returns: Scene node.
@@ -119,7 +121,7 @@ class ThreeMFReader(MeshReader):
pass
um_node.setName(node_name)
um_node.setId(node_id)
- transformation = self._createMatrixFromTransformationString(savitar_node.getTransformation())
+ transformation = ThreeMFReader._createMatrixFromTransformationString(savitar_node.getTransformation())
um_node.setTransformation(transformation)
mesh_builder = MeshBuilder()
@@ -138,7 +140,7 @@ class ThreeMFReader(MeshReader):
um_node.setMeshData(mesh_data)
for child in savitar_node.getChildren():
- child_node = self._convertSavitarNodeToUMNode(child)
+ child_node = ThreeMFReader._convertSavitarNodeToUMNode(child)
if child_node:
um_node.addChild(child_node)
@@ -214,7 +216,7 @@ class ThreeMFReader(MeshReader):
CuraApplication.getInstance().getController().getScene().setMetaDataEntry(key, value)
for node in scene_3mf.getSceneNodes():
- um_node = self._convertSavitarNodeToUMNode(node, file_name)
+ um_node = ThreeMFReader._convertSavitarNodeToUMNode(node, file_name)
if um_node is None:
continue
@@ -300,8 +302,23 @@ class ThreeMFReader(MeshReader):
if unit is None:
unit = "millimeter"
elif unit not in conversion_to_mm:
- Logger.log("w", "Unrecognised unit {unit} used. Assuming mm instead.".format(unit = unit))
+ Logger.log("w", "Unrecognised unit {unit} used. Assuming mm instead.".format(unit=unit))
unit = "millimeter"
scale = conversion_to_mm[unit]
return Vector(scale, scale, scale)
+
+ @staticmethod
+ def stringToSceneNodes(scene_string: str) -> List[SceneNode]:
+ parser = Savitar.ThreeMFParser()
+ scene = parser.parse(scene_string)
+
+ # Convert the scene to scene nodes
+ nodes = []
+ for savitar_node in scene.getSceneNodes():
+ scene_node = ThreeMFReader._convertSavitarNodeToUMNode(savitar_node, "file_name")
+ if scene_node is None:
+ continue
+ nodes.append(scene_node)
+
+ return nodes
diff --git a/plugins/3MFWriter/ThreeMFWriter.py b/plugins/3MFWriter/ThreeMFWriter.py
index 57c667145e..3f6fef7201 100644
--- a/plugins/3MFWriter/ThreeMFWriter.py
+++ b/plugins/3MFWriter/ThreeMFWriter.py
@@ -55,11 +55,12 @@ class ThreeMFWriter(MeshWriter):
"cura": "http://software.ultimaker.com/xml/cura/3mf/2015/10"
}
- self._unit_matrix_string = self._convertMatrixToString(Matrix())
+ self._unit_matrix_string = ThreeMFWriter._convertMatrixToString(Matrix())
self._archive: Optional[zipfile.ZipFile] = None
self._store_archive = False
- def _convertMatrixToString(self, matrix):
+ @staticmethod
+ def _convertMatrixToString(matrix):
result = ""
result += str(matrix._data[0, 0]) + " "
result += str(matrix._data[1, 0]) + " "
@@ -83,7 +84,8 @@ class ThreeMFWriter(MeshWriter):
"""
self._store_archive = store_archive
- def _convertUMNodeToSavitarNode(self, um_node, transformation = Matrix()):
+ @staticmethod
+ def _convertUMNodeToSavitarNode(um_node, transformation=Matrix()):
"""Convenience function that converts an Uranium SceneNode object to a SavitarSceneNode
:returns: Uranium Scene node.
@@ -100,7 +102,7 @@ class ThreeMFWriter(MeshWriter):
node_matrix = um_node.getLocalTransformation()
- matrix_string = self._convertMatrixToString(node_matrix.preMultiply(transformation))
+ matrix_string = ThreeMFWriter._convertMatrixToString(node_matrix.preMultiply(transformation))
savitar_node.setTransformation(matrix_string)
mesh_data = um_node.getMeshData()
@@ -133,7 +135,7 @@ class ThreeMFWriter(MeshWriter):
# only save the nodes on the active build plate
if child_node.callDecoration("getBuildPlateNumber") != active_build_plate_nr:
continue
- savitar_child_node = self._convertUMNodeToSavitarNode(child_node)
+ savitar_child_node = ThreeMFWriter._convertUMNodeToSavitarNode(child_node)
if savitar_child_node is not None:
savitar_node.addChild(savitar_child_node)
@@ -221,7 +223,7 @@ class ThreeMFWriter(MeshWriter):
for node in nodes:
if node == root_node:
for root_child in node.getChildren():
- savitar_node = self._convertUMNodeToSavitarNode(root_child, transformation_matrix)
+ savitar_node = ThreeMFWriter._convertUMNodeToSavitarNode(root_child, transformation_matrix)
if savitar_node:
savitar_scene.addSceneNode(savitar_node)
else:
@@ -303,9 +305,19 @@ class ThreeMFWriter(MeshWriter):
Logger.log("w", "Can't create snapshot when renderer not initialized.")
return None
try:
- snapshot = Snapshot.snapshot(width = 300, height = 300)
+ snapshot = Snapshot.snapshot(width=300, height=300)
except:
Logger.logException("w", "Failed to create snapshot image")
return None
return snapshot
+
+ @staticmethod
+ def sceneNodesToString(scene_nodes: [SceneNode]) -> str:
+ savitar_scene = Savitar.Scene()
+ for scene_node in scene_nodes:
+ savitar_node = ThreeMFWriter._convertUMNodeToSavitarNode(scene_node)
+ savitar_scene.addSceneNode(savitar_node)
+ parser = Savitar.ThreeMFParser()
+ scene_string = parser.sceneToString(savitar_scene)
+ return scene_string
diff --git a/plugins/Marketplace/RemotePackageList.py b/plugins/Marketplace/RemotePackageList.py
index d06d2c64c5..f8826ff395 100644
--- a/plugins/Marketplace/RemotePackageList.py
+++ b/plugins/Marketplace/RemotePackageList.py
@@ -21,6 +21,7 @@ catalog = i18nCatalog("cura")
class RemotePackageList(PackageList):
ITEMS_PER_PAGE = 20 # Pagination of number of elements to download at once.
+ SORT_TYPE = "last_updated" # Default value to send for sort_by filter.
def __init__(self, parent: Optional["QObject"] = None) -> None:
super().__init__(parent)
@@ -28,6 +29,7 @@ class RemotePackageList(PackageList):
self._package_type_filter = ""
self._requested_search_string = ""
self._current_search_string = ""
+ self._search_sort = "sort_by"
self._search_type = "search"
self._request_url = self._initialRequestUrl()
self._ongoing_requests["get_packages"] = None
@@ -102,6 +104,8 @@ class RemotePackageList(PackageList):
request_url += f"&package_type={self._package_type_filter}"
if self._current_search_string != "":
request_url += f"&{self._search_type}={self._current_search_string}"
+ if self.SORT_TYPE:
+ request_url += f"&{self._search_sort}={self.SORT_TYPE}"
return request_url
def _parseResponse(self, reply: "QNetworkReply") -> None:
diff --git a/plugins/Marketplace/resources/qml/Marketplace.qml b/plugins/Marketplace/resources/qml/Marketplace.qml
index 97ba2303e9..8028b89e02 100644
--- a/plugins/Marketplace/resources/qml/Marketplace.qml
+++ b/plugins/Marketplace/resources/qml/Marketplace.qml
@@ -280,7 +280,7 @@ Window
onClicked:
{
marketplaceDialog.hide();
- CuraApplication.closeApplication();
+ CuraApplication.checkAndExitApplication();
}
}
}
diff --git a/plugins/USBPrinting/AutoDetectBaudJob.py b/plugins/USBPrinting/AutoDetectBaudJob.py
index 1b791f6187..1a7187be4d 100644
--- a/plugins/USBPrinting/AutoDetectBaudJob.py
+++ b/plugins/USBPrinting/AutoDetectBaudJob.py
@@ -21,7 +21,7 @@ class AutoDetectBaudJob(Job):
self._all_baud_rates = [115200, 250000, 500000, 230400, 76800, 57600, 38400, 19200, 9600]
def run(self) -> None:
- Logger.log("d", "Auto detect baud rate started.")
+ Logger.debug(f"Auto detect baud rate started for {self._serial_port}")
wait_response_timeouts = [3, 15, 30]
wait_bootloader_times = [1.5, 5, 15]
write_timeout = 3
@@ -46,8 +46,7 @@ class AutoDetectBaudJob(Job):
wait_bootloader = wait_bootloader_times[retry]
else:
wait_bootloader = wait_bootloader_times[-1]
- Logger.log("d", "Checking {serial} if baud rate {baud_rate} works. Retry nr: {retry}. Wait timeout: {timeout}".format(
- serial = self._serial_port, baud_rate = baud_rate, retry = retry, timeout = wait_response_timeout))
+ Logger.debug(f"Checking {self._serial_port} if baud rate {baud_rate} works. Retry nr: {retry}. Wait timeout: {wait_response_timeout}")
if serial is None:
try:
@@ -61,7 +60,9 @@ class AutoDetectBaudJob(Job):
serial.baudrate = baud_rate
except ValueError:
continue
- sleep(wait_bootloader) # Ensure that we are not talking to the boot loader. 1.5 seconds seems to be the magic number
+
+ # Ensure that we are not talking to the boot loader. 1.5 seconds seems to be the magic number
+ sleep(wait_bootloader)
serial.write(b"\n") # Ensure we clear out previous responses
serial.write(b"M105\n")
@@ -83,4 +84,5 @@ class AutoDetectBaudJob(Job):
serial.write(b"M105\n")
sleep(15) # Give the printer some time to init and try again.
+ Logger.debug(f"Unable to find a working baudrate for {serial}")
self.setResult(None) # Unable to detect the correct baudrate.
diff --git a/resources/definitions/anycubic_kobra_plus.def.json b/resources/definitions/anycubic_kobra_plus.def.json
new file mode 100644
index 0000000000..944398711f
--- /dev/null
+++ b/resources/definitions/anycubic_kobra_plus.def.json
@@ -0,0 +1,29 @@
+{
+ "version": 2,
+ "name": "Anycubic Kobra Plus",
+ "inherits": "fdmprinter",
+ "metadata":
+ {
+ "visible": true,
+ "author": "Jordon Brooks",
+ "manufacturer": "Anycubic",
+ "file_formats": "text/x-gcode",
+ "has_machine_quality": true,
+ "has_materials": true,
+ "machine_extruder_trains": { "0": "anycubic_kobra_plus_extruder_0" },
+ "preferred_material": "generic_pla",
+ "preferred_quality_type": "normal",
+ "quality_definition": "anycubic_kobra_plus"
+ },
+ "overrides":
+ {
+ "machine_depth": { "default_value": 302 },
+ "machine_end_gcode": { "default_value": "M104 S0\nM140 S0\n;Retract the filament\nG92 E1\nG1 E-1 F300\nG28 X0 Y0\nM84\nM355 S0; led off" },
+ "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
+ "machine_heated_bed": { "default_value": true },
+ "machine_height": { "default_value": 352 },
+ "machine_name": { "default_value": "Anycubic Kobra Plus" },
+ "machine_start_gcode": { "default_value": "G28 ;Home\nG1 Z15.0 F6000 ;Move the platform down 15mm\n;Prime the extruder\nG92 E0\nM355 S1; Turn LED on\n; Add Custom purge lines\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X1.0 Y30 Z0.3 F5000.0 ; Move to start position\nG1 X1.0 Y100.0 Z0.3 F1500.0 E15 ; Draw the first line\nG1 X1.3 Y100.0 Z0.3 F5000.0 ; Move to side a little\nG1 X1.3 Y30 Z0.3 F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 E-2 F500 ; Retract a little \nG1 X50 F500 ; wipe away from the filament line\nG1 X100 F9000 ; Quickly wipe away from the filament line\nG1 Z5.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\n; End custom purge lines" },
+ "machine_width": { "default_value": 302 }
+ }
+}
\ No newline at end of file
diff --git a/resources/definitions/anycubic_kossel.def.json b/resources/definitions/anycubic_kossel.def.json
index 28d6ac141d..50ee14db4e 100644
--- a/resources/definitions/anycubic_kossel.def.json
+++ b/resources/definitions/anycubic_kossel.def.json
@@ -18,51 +18,6 @@
{
"machine_center_is_zero": { "default_value": true },
"machine_depth": { "default_value": 180 },
- "machine_disallowed_areas":
- {
- "default_value": [
- [
- [-50, -85],
- [-85, -85],
- [-90, -90]
- ],
- [
- [-85, -85],
- [-85, -50],
- [-90, -90]
- ],
- [
- [50, -85],
- [85, -85],
- [90, -90]
- ],
- [
- [85, -85],
- [85, -50],
- [90, -90]
- ],
- [
- [-50, 85],
- [-85, 85],
- [-90, 90]
- ],
- [
- [-85, 85],
- [-85, 50],
- [-90, 90]
- ],
- [
- [50, 85],
- [85, 85],
- [90, 90]
- ],
- [
- [85, 85],
- [85, 50],
- [90, 90]
- ]
- ]
- },
"machine_end_gcode": { "default_value": "M400 ;Free buffer\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 F{speed_travel} Z+1 E-5 ;move Z up a bit and retract filament even more\nG90 ;absolute positioning\nM104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off\nM107 ;fan off\nM84 ;steppers off\nG28 ;move to endstop\nM84 ;steppers off" },
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
"machine_heated_bed": { "default_value": true },
diff --git a/resources/definitions/anycubic_kossel_linear_plus.def.json b/resources/definitions/anycubic_kossel_linear_plus.def.json
index 8f8080d58f..4e35fff69a 100644
--- a/resources/definitions/anycubic_kossel_linear_plus.def.json
+++ b/resources/definitions/anycubic_kossel_linear_plus.def.json
@@ -16,51 +16,6 @@
"overrides":
{
"machine_depth": { "default_value": 240 },
- "machine_disallowed_areas":
- {
- "default_value": [
- [
- [-50, -115],
- [-115, -115],
- [-90, -90]
- ],
- [
- [-115, -115],
- [-115, -50],
- [-90, -90]
- ],
- [
- [50, -115],
- [115, -115],
- [90, -90]
- ],
- [
- [115, -115],
- [115, -50],
- [90, -90]
- ],
- [
- [-50, 115],
- [-115, 115],
- [-90, 90]
- ],
- [
- [-115, 115],
- [-115, 50],
- [-90, 90]
- ],
- [
- [50, 115],
- [115, 115],
- [90, 90]
- ],
- [
- [115, 115],
- [115, 50],
- [90, 90]
- ]
- ]
- },
"machine_name": { "default_value": "Anycubic Kossel Linear Plus" },
"machine_width": { "default_value": 240 }
}
diff --git a/resources/definitions/creality_ender3pro.def.json b/resources/definitions/creality_ender3pro.def.json
index de0d4ed0bf..aa5daa132b 100644
--- a/resources/definitions/creality_ender3pro.def.json
+++ b/resources/definitions/creality_ender3pro.def.json
@@ -23,7 +23,7 @@
},
"machine_height": { "default_value": 250 },
"machine_name": { "default_value": "Creality Ender-3 Pro" },
- "machine_start_gcode": { "default_value": "; Ender 3 Custom Start G-code\nG92 E0 ; Reset Extruder\nG28 ; Home all axes\nM104 S{material_standby_temperature} ; Start heating up the nozzle most of the way\nM190 S{material_bed_temperature_layer_0} ; Start heating the bed, wait until target temperature reached\nM109 S{material_print_temperature_layer_0} ; Finish heating the nozzle\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X0.1 Y20 Z0.3 F5000.0 ; Move to start position\nG1 X0.1 Y200.0 Z0.3 F1500.0 E15 ; Draw the first line\nG1 X0.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X0.4 Y20 Z0.3 F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X5 Y20 Z0.3 F5000.0 ; Move over to prevent blob squish" },
+ "machine_start_gcode": { "default_value": "; Ender 3 Custom Start G-code\nG92 E0 ; Reset Extruder\nG28 ; Home all axes\nG1 Z5.0 F3000 ; Move Z Axis up a bit during heating to not damage bed\nM104 S{material_standby_temperature} ; Start heating up the nozzle most of the way\nM190 S{material_bed_temperature_layer_0} ; Start heating the bed, wait until target temperature reached\nM109 S{material_print_temperature_layer_0} ; Finish heating the nozzle\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X0.1 Y20 Z0.3 F5000.0 ; Move to start position\nG1 X0.1 Y200.0 Z0.3 F1500.0 E15 ; Draw the first line\nG1 X0.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X0.4 Y20 Z0.3 F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X5 Y20 Z0.3 F5000.0 ; Move over to prevent blob squish" },
"machine_width": { "default_value": 220 }
}
}
\ No newline at end of file
diff --git a/resources/definitions/creality_ender3s1.def.json b/resources/definitions/creality_ender3s1.def.json
index 37e69d72c0..62405572d7 100644
--- a/resources/definitions/creality_ender3s1.def.json
+++ b/resources/definitions/creality_ender3s1.def.json
@@ -24,7 +24,7 @@
},
"machine_height": { "default_value": 270 },
"machine_name": { "default_value": "Creality Ender-3 S1" },
- "machine_start_gcode": { "default_value": "; Ender 3 S1 Start G-code\n; M413 S0 ; Disable power loss recovery\nG92 E0 ; Reset Extruder\n\n; Prep surfaces before auto home for better accuracy\nM140 S{material_bed_temperature_layer_0}\nM104 S{material_print_temperature_layer_0}\n\nG28 O ; Home all untrusted axes\nG1 Z10.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X0 Y0\n\nM190 S{material_bed_temperature_layer_0}\nM109 S{material_print_temperature_layer_0}\n\nG1 X0.1 Y20 Z0.3 F5000.0 ; Move to start position\nG1 X0.1 Y200.0 Z0.3 F1500.0 E15 ; Draw the first line\nG1 X0.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X0.4 Y20 Z0.3 F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X5 Y20 Z0.3 F5000.0 ; Move over to prevent blob squish\n" },
+ "machine_start_gcode": { "default_value": "; Ender 3 S1 Start G-code\n; M413 S0 ; Disable power loss recovery\nG92 E0 ; Reset Extruder\n\n; Prep surfaces before auto home for better accuracy\nM140 S{material_bed_temperature_layer_0}\nM104 S{material_print_temperature_layer_0}\n\nG28 ; Home all axes\nG1 Z10.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X0 Y0\n\nM190 S{material_bed_temperature_layer_0}\nM109 S{material_print_temperature_layer_0}\n\nG1 X0.1 Y20 Z0.3 F5000.0 ; Move to start position\nG1 X0.1 Y200.0 Z0.3 F1500.0 E15 ; Draw the first line\nG1 X0.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X0.4 Y20 Z0.3 F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X5 Y20 Z0.3 F5000.0 ; Move over to prevent blob squish\n" },
"machine_width": { "default_value": 220 },
"retraction_amount": { "value": 0.8 },
"retraction_extrusion_window": { "value": 1.5 },
diff --git a/resources/definitions/creality_ender3s1plus.def.json b/resources/definitions/creality_ender3s1plus.def.json
index 61da5b690e..0982104cd9 100644
--- a/resources/definitions/creality_ender3s1plus.def.json
+++ b/resources/definitions/creality_ender3s1plus.def.json
@@ -24,7 +24,7 @@
},
"machine_height": { "default_value": 300 },
"machine_name": { "default_value": "Creality Ender-3 S1 Plus" },
- "machine_start_gcode": { "default_value": "; Ender 3 S1 Plus Start G-code\n; M413 S0 ; Disable power loss recovery\nG92 E0 ; Reset Extruder\n\n; Prep surfaces before auto home for better accuracy\nM140 S{material_bed_temperature_layer_0}\nM104 S{material_print_temperature_layer_0}\n\nG28 O ; Home all untrusted axes\nG1 Z10.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X0 Y0\n\nM190 S{material_bed_temperature_layer_0}\nM109 S{material_print_temperature_layer_0}\n\nG1 X0.1 Y20 Z0.3 F5000.0 ; Move to start position\nG1 X0.1 Y200.0 Z0.3 F1500.0 E15 ; Draw the first line\nG1 X0.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X0.4 Y20 Z0.3 F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X5 Y20 Z0.3 F5000.0 ; Move over to prevent blob squish\n" },
+ "machine_start_gcode": { "default_value": "; Ender 3 S1 Plus Start G-code\n; M413 S0 ; Disable power loss recovery\nG92 E0 ; Reset Extruder\n\n; Prep surfaces before auto home for better accuracy\nM140 S{material_bed_temperature_layer_0}\nM104 S{material_print_temperature_layer_0}\n\nG28 ; Home all axes\nG1 Z10.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X0 Y0\n\nM190 S{material_bed_temperature_layer_0}\nM109 S{material_print_temperature_layer_0}\n\nG1 X0.1 Y20 Z0.3 F5000.0 ; Move to start position\nG1 X0.1 Y200.0 Z0.3 F1500.0 E15 ; Draw the first line\nG1 X0.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X0.4 Y20 Z0.3 F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X5 Y20 Z0.3 F5000.0 ; Move over to prevent blob squish\n" },
"machine_width": { "default_value": 300 },
"retraction_amount": { "value": 0.8 },
"retraction_extrusion_window": { "value": 1.5 },
diff --git a/resources/definitions/creality_ender3s1pro.def.json b/resources/definitions/creality_ender3s1pro.def.json
index ba5d22e2dc..d375a904de 100644
--- a/resources/definitions/creality_ender3s1pro.def.json
+++ b/resources/definitions/creality_ender3s1pro.def.json
@@ -24,7 +24,7 @@
},
"machine_height": { "default_value": 270 },
"machine_name": { "default_value": "Creality Ender-3 S1 Pro" },
- "machine_start_gcode": { "default_value": "; Ender 3 S1 Pro Start G-code\n; M413 S0 ; Disable power loss recovery\nG92 E0 ; Reset Extruder\n\n; Prep surfaces before auto home for better accuracy\nM140 S{material_bed_temperature_layer_0}\nM104 S{material_print_temperature_layer_0}\n\nG28 O ; Home all untrusted axes\nG1 Z10.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X0 Y0\n\nM190 S{material_bed_temperature_layer_0}\nM109 S{material_print_temperature_layer_0}\n\nG1 X0.1 Y20 Z0.3 F5000.0 ; Move to start position\nG1 X0.1 Y200.0 Z0.3 F1500.0 E15 ; Draw the first line\nG1 X0.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X0.4 Y20 Z0.3 F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X5 Y20 Z0.3 F5000.0 ; Move over to prevent blob squish\n" },
+ "machine_start_gcode": { "default_value": "; Ender 3 S1 Pro Start G-code\n; M413 S0 ; Disable power loss recovery\nG92 E0 ; Reset Extruder\n\n; Prep surfaces before auto home for better accuracy\nM140 S{material_bed_temperature_layer_0}\nM104 S{material_print_temperature_layer_0}\n\nG28 ; Home all axes\nG1 Z10.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X0 Y0\n\nM190 S{material_bed_temperature_layer_0}\nM109 S{material_print_temperature_layer_0}\n\nG1 X0.1 Y20 Z0.3 F5000.0 ; Move to start position\nG1 X0.1 Y200.0 Z0.3 F1500.0 E15 ; Draw the first line\nG1 X0.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X0.4 Y20 Z0.3 F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X5 Y20 Z0.3 F5000.0 ; Move over to prevent blob squish\n" },
"machine_width": { "default_value": 220 },
"retraction_amount": { "value": 0.8 },
"retraction_extrusion_window": { "value": 1.5 },
diff --git a/resources/definitions/creality_ender5s1.def.json b/resources/definitions/creality_ender5s1.def.json
new file mode 100644
index 0000000000..32dbf75b02
--- /dev/null
+++ b/resources/definitions/creality_ender5s1.def.json
@@ -0,0 +1,37 @@
+{
+ "version": 2,
+ "name": "Creality Ender-5 S1",
+ "inherits": "creality_base",
+ "metadata":
+ {
+ "visible": true,
+ "quality_definition": "creality_base"
+ },
+ "overrides":
+ {
+ "build_volume_temperature": { "value": 195 },
+ "cool_min_layer_time": { "value": 5 },
+ "gantry_height": { "value": 25 },
+ "machine_depth": { "default_value": 225 },
+ "machine_end_gcode": { "default_value": "G91 ;Relative positionning\nG1 E-2 F2700 ;Retract a bit\nG1 E-2 Z0.2 F2400 ;Retract and raise Z\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positionning\n\nG1 X0 Y0 ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\n\nM84 X Y E ;Disable all steppers but Z\n" },
+ "machine_head_with_fans_polygon":
+ {
+ "default_value": [
+ [-26, 34],
+ [-26, -32],
+ [32, -32],
+ [32, 34]
+ ]
+ },
+ "machine_height": { "default_value": 305 },
+ "machine_name": { "default_value": "Creality Ender-5 S1" },
+ "machine_width": { "default_value": 225 },
+ "material_bed_temperature": { "value": 60 },
+ "retraction_amount": { "value": 2 },
+ "retraction_speed": { "value": 45 },
+ "speed_print": { "value": 80.0 },
+ "support_z_distance": { "value": 0.25 },
+ "wall_thickness": { "value": "line_width * 3" },
+ "z_seam_type": { "value": "'sharpest_corner'" }
+ }
+}
\ No newline at end of file
diff --git a/resources/definitions/entina_tina2.def.json b/resources/definitions/entina_tina2.def.json
new file mode 100644
index 0000000000..7e6b18a982
--- /dev/null
+++ b/resources/definitions/entina_tina2.def.json
@@ -0,0 +1,200 @@
+{
+ "version": 2,
+ "name": "ENTINA TINA2",
+ "inherits": "weedo_base",
+ "metadata":
+ {
+ "visible": true,
+ "author": "ENTINA",
+ "manufacturer": "ENTINA",
+ "file_formats": "text/x-gcode",
+ "exclude_materials": [
+ "3D-Fuel_PLA_PRO_Black",
+ "3D-Fuel_PLA_SnapSupport",
+ "bestfilament_abs_skyblue",
+ "bestfilament_petg_orange",
+ "bestfilament_pla_green",
+ "leapfrog_abs_natural",
+ "leapfrog_epla_natural",
+ "leapfrog_pva_natural",
+ "generic_abs_175",
+ "generic_asa_175",
+ "generic_bvoh_175",
+ "generic_cpe_175",
+ "generic_hips_175",
+ "generic_nylon_175",
+ "generic_pc_175",
+ "generic_petg_175",
+ "generic_pva_175",
+ "goofoo_abs",
+ "goofoo_asa",
+ "goofoo_bronze_pla",
+ "goofoo_emarble_pla",
+ "goofoo_esilk_pla",
+ "goofoo_hips",
+ "goofoo_pa_cf",
+ "goofoo_pa",
+ "goofoo_pc",
+ "goofoo_peek",
+ "goofoo_petg",
+ "goofoo_pla",
+ "goofoo_pva",
+ "goofoo_tpe_83a",
+ "goofoo_tpu_87a",
+ "goofoo_tpu_95a",
+ "goofoo_wood_pla",
+ "emotiontech_abs",
+ "emotiontech_absx",
+ "emotiontech_acetate",
+ "emotiontech_asax",
+ "emotiontech_bvoh",
+ "emotiontech_copa",
+ "emotiontech_hips",
+ "emotiontech_nylon_1030",
+ "emotiontech_nylon_1030cf",
+ "emotiontech_nylon_1070",
+ "emotiontech_pc",
+ "emotiontech_pekk",
+ "emotiontech_petg",
+ "emotiontech_pla",
+ "emotiontech_pla_hr_870",
+ "emotiontech_pva-m",
+ "emotiontech_pva-s",
+ "emotiontech_tpu98a",
+ "eryone_petg",
+ "eryone_pla_glow",
+ "eryone_pla_matte",
+ "eryone_pla_wood",
+ "eryone_pla",
+ "eryone_tpu",
+ "eSUN_PETG_Black",
+ "eSUN_PETG_Grey",
+ "eSUN_PETG_Purple",
+ "eSUN_PLA_PRO_Black",
+ "eSUN_PLA_PRO_Grey",
+ "eSUN_PLA_PRO_Purple",
+ "eSUN_PLA_PRO_White",
+ "Extrudr_GreenTECPro_Anthracite_175",
+ "Extrudr_GreenTECPro_Black_175",
+ "Extrudr_GreenTECPro_Blue_175",
+ "Extrudr_GreenTECPro_Nature_175",
+ "Extrudr_GreenTECPro_Red_175",
+ "Extrudr_GreenTECPro_Silver_175",
+ "Extrudr_GreenTECPro_White_175",
+ "verbatim_bvoh_175",
+ "Vertex_Delta_ABS",
+ "Vertex_Delta_PET",
+ "Vertex_Delta_PLA",
+ "Vertex_Delta_TPU",
+ "chromatik_pla",
+ "dsm_arnitel2045_175",
+ "dsm_novamid1070_175",
+ "fabtotum_abs",
+ "fabtotum_nylon",
+ "fabtotum_pla",
+ "fabtotum_tpu",
+ "fdplast_abs_tomato",
+ "fdplast_petg_gray",
+ "fdplast_pla_olive",
+ "fiberlogy_hd_pla",
+ "filo3d_pla",
+ "filo3d_pla_green",
+ "filo3d_pla_red",
+ "imade3d_petg_green",
+ "imade3d_petg_pink",
+ "imade3d_pla_green",
+ "imade3d_pla_pink",
+ "imade3d_petg_175",
+ "imade3d_pla_175",
+ "innofill_innoflex60_175",
+ "layer_one_black_pla",
+ "layer_one_dark_gray_pla",
+ "layer_one_white_pla",
+ "octofiber_pla",
+ "polyflex_pla",
+ "polymax_pla",
+ "polyplus_pla",
+ "polywood_pla",
+ "redd_abs",
+ "redd_asa",
+ "redd_hips",
+ "redd_nylon",
+ "redd_petg",
+ "redd_pla",
+ "redd_tpe",
+ "tizyx_abs",
+ "tizyx_flex",
+ "tizyx_petg",
+ "tizyx_pla_bois",
+ "tizyx_pla",
+ "tizyx_pva",
+ "Vertex_Delta_ABS",
+ "Vertex_Delta_PET",
+ "Vertex_Delta_PLA_Glitter",
+ "Vertex_Delta_PLA_Mat",
+ "Vertex_Delta_PLA_Satin",
+ "Vertex_Delta_PLA_Wood",
+ "Vertex_Delta_PLA",
+ "Vertex_Delta_TPU",
+ "volumic_abs_ultra",
+ "volumic_arma_ultra",
+ "volumic_asa_ultra",
+ "volumic_br80_ultra",
+ "volumic_bumper_ultra",
+ "volumic_cu80_ultra",
+ "volumic_flex93_ultra",
+ "volumic_medical_ultra",
+ "volumic_nylon_ultra",
+ "volumic_pekk_carbone",
+ "volumic_petg_ultra",
+ "volumic_petgcarbone_ultra",
+ "volumic_pla_ultra",
+ "volumic_pp_ultra",
+ "volumic_strong_ultra",
+ "volumic_support_ultra",
+ "xyzprinting_abs",
+ "xyzprinting_antibact_pla",
+ "xyzprinting_carbon_fiber",
+ "xyzprinting_colorinkjet_pla",
+ "xyzprinting_flexible",
+ "xyzprinting_metallic_pla",
+ "xyzprinting_nylon",
+ "xyzprinting_petg",
+ "xyzprinting_pla",
+ "xyzprinting_tough_pla",
+ "xyzprinting_tpu",
+ "zyyx_pro_flex",
+ "zyyx_pro_pla"
+ ],
+ "platform_offset": [
+ 0,
+ 0,
+ 0
+ ]
+ },
+ "overrides":
+ {
+ "infill_pattern": { "value": "'lines' if infill_sparse_density > 45 else 'grid'" },
+ "machine_depth": { "default_value": 120 },
+ "machine_end_gcode": { "default_value": ";(**** end.gcode for tina2****)\nM203 Z15\nM104 S0\nM107\nG92 E0 (Reset after prime)\nG0 E-1 F300\nG28 Z F300\nG28 X0 Y0\nG1 Y90 F1000" },
+ "machine_heated_bed": { "default_value": false },
+ "machine_height": { "default_value": 100 },
+ "machine_name": { "default_value": "ENTINA TINA2" },
+ "machine_start_gcode": { "default_value": ";MachineType:{machine_name}\n;FilamentType:{material_type}\n;InfillDensity:{infill_sparse_density}\n;Extruder0Temperature:{material_print_temperature}\n\n;(**** start.gcode for tina2****)\nM203 Z15\nM104 S150\nG28 Z\nG28 X Y; Home extruder\nG1 X55 Y55 F1000\nG29\nM107 ; Turn off fan\nG90 ; Absolute positioning\nM82 ; Extruder in absolute mode\nM109 S{material_print_temperature_layer_0}\nG92 E0 ; Reset extruder position\nG1 X90 Y6 Z0.27 F2000\nG1 X20 Y6 Z0.27 E15 F1000\nG92 E0 ; Reset extruder position\nM203 Z5" },
+ "machine_width": { "default_value": 100 },
+ "raft_base_thickness": { "value": 0.35 },
+ "speed_infill": { "value": 40.0 },
+ "speed_print": { "value": 40.0 },
+ "speed_print_layer_0": { "value": 22.0 },
+ "speed_roofing": { "value": 25.0 },
+ "speed_support_bottom": { "value": 30.0 },
+ "speed_support_infill": { "value": 45.0 },
+ "speed_support_roof": { "value": 30.0 },
+ "speed_topbottom": { "value": 30.0 },
+ "speed_travel": { "value": 65.0 },
+ "speed_travel_layer_0": { "value": 60 },
+ "speed_wall": { "value": 25.0 },
+ "speed_wall_0": { "value": 20.0 },
+ "speed_wall_x": { "value": 25.0 }
+ }
+}
\ No newline at end of file
diff --git a/resources/definitions/entina_tina2s.def.json b/resources/definitions/entina_tina2s.def.json
new file mode 100644
index 0000000000..82dc85b36e
--- /dev/null
+++ b/resources/definitions/entina_tina2s.def.json
@@ -0,0 +1,201 @@
+{
+ "version": 2,
+ "name": "ENTINA TINA2S",
+ "inherits": "weedo_base",
+ "metadata":
+ {
+ "visible": true,
+ "author": "ENTINA",
+ "manufacturer": "ENTINA",
+ "file_formats": "text/x-gcode",
+ "exclude_materials": [
+ "3D-Fuel_PLA_PRO_Black",
+ "3D-Fuel_PLA_SnapSupport",
+ "bestfilament_abs_skyblue",
+ "bestfilament_petg_orange",
+ "bestfilament_pla_green",
+ "leapfrog_abs_natural",
+ "leapfrog_epla_natural",
+ "leapfrog_pva_natural",
+ "generic_abs_175",
+ "generic_asa_175",
+ "generic_cpe_175",
+ "generic_nylon_175",
+ "generic_pc_175",
+ "generic_petg_175",
+ "generic_pva_175",
+ "goofoo_abs",
+ "goofoo_asa",
+ "goofoo_bronze_pla",
+ "goofoo_emarble_pla",
+ "goofoo_esilk_pla",
+ "goofoo_hips",
+ "goofoo_pa_cf",
+ "goofoo_pa",
+ "goofoo_pc",
+ "goofoo_peek",
+ "goofoo_petg",
+ "goofoo_pla",
+ "goofoo_pva",
+ "goofoo_tpe_83a",
+ "goofoo_tpu_87a",
+ "goofoo_tpu_95a",
+ "goofoo_wood_pla",
+ "emotiontech_abs",
+ "emotiontech_absx",
+ "emotiontech_acetate",
+ "emotiontech_asax",
+ "emotiontech_bvoh",
+ "emotiontech_copa",
+ "emotiontech_hips",
+ "emotiontech_nylon_1030",
+ "emotiontech_nylon_1030cf",
+ "emotiontech_nylon_1070",
+ "emotiontech_pc",
+ "emotiontech_pekk",
+ "emotiontech_petg",
+ "emotiontech_pla",
+ "emotiontech_pla_hr_870",
+ "emotiontech_pva-m",
+ "emotiontech_pva-s",
+ "emotiontech_tpu98a",
+ "eryone_petg",
+ "eryone_pla_glow",
+ "eryone_pla_matte",
+ "eryone_pla_wood",
+ "eryone_pla",
+ "eryone_tpu",
+ "eSUN_PETG_Black",
+ "eSUN_PETG_Grey",
+ "eSUN_PETG_Purple",
+ "eSUN_PLA_PRO_Black",
+ "eSUN_PLA_PRO_Grey",
+ "eSUN_PLA_PRO_Purple",
+ "eSUN_PLA_PRO_White",
+ "Extrudr_GreenTECPro_Anthracite_175",
+ "Extrudr_GreenTECPro_Black_175",
+ "Extrudr_GreenTECPro_Blue_175",
+ "Extrudr_GreenTECPro_Nature_175",
+ "Extrudr_GreenTECPro_Red_175",
+ "Extrudr_GreenTECPro_Silver_175",
+ "Extrudr_GreenTECPro_White_175",
+ "verbatim_bvoh_175",
+ "Vertex_Delta_ABS",
+ "Vertex_Delta_PET",
+ "Vertex_Delta_PLA",
+ "Vertex_Delta_TPU",
+ "chromatik_pla",
+ "dsm_arnitel2045_175",
+ "dsm_novamid1070_175",
+ "fabtotum_abs",
+ "fabtotum_nylon",
+ "fabtotum_pla",
+ "fabtotum_tpu",
+ "fdplast_abs_tomato",
+ "fdplast_petg_gray",
+ "fdplast_pla_olive",
+ "fiberlogy_hd_pla",
+ "filo3d_pla",
+ "filo3d_pla_green",
+ "filo3d_pla_red",
+ "imade3d_petg_green",
+ "imade3d_petg_pink",
+ "imade3d_pla_green",
+ "imade3d_pla_pink",
+ "imade3d_petg_175",
+ "imade3d_pla_175",
+ "innofill_innoflex60_175",
+ "layer_one_black_pla",
+ "layer_one_dark_gray_pla",
+ "layer_one_white_pla",
+ "octofiber_pla",
+ "polyflex_pla",
+ "polymax_pla",
+ "polyplus_pla",
+ "polywood_pla",
+ "redd_abs",
+ "redd_asa",
+ "redd_hips",
+ "redd_nylon",
+ "redd_petg",
+ "redd_pla",
+ "redd_tpe",
+ "tizyx_abs",
+ "tizyx_flex",
+ "tizyx_petg",
+ "tizyx_pla_bois",
+ "tizyx_pla",
+ "tizyx_pva",
+ "Vertex_Delta_ABS",
+ "Vertex_Delta_PET",
+ "Vertex_Delta_PLA_Glitter",
+ "Vertex_Delta_PLA_Mat",
+ "Vertex_Delta_PLA_Satin",
+ "Vertex_Delta_PLA_Wood",
+ "Vertex_Delta_PLA",
+ "Vertex_Delta_TPU",
+ "volumic_abs_ultra",
+ "volumic_arma_ultra",
+ "volumic_asa_ultra",
+ "volumic_br80_ultra",
+ "volumic_bumper_ultra",
+ "volumic_cu80_ultra",
+ "volumic_flex93_ultra",
+ "volumic_medical_ultra",
+ "volumic_nylon_ultra",
+ "volumic_pekk_carbone",
+ "volumic_petg_ultra",
+ "volumic_petgcarbone_ultra",
+ "volumic_pla_ultra",
+ "volumic_pp_ultra",
+ "volumic_strong_ultra",
+ "volumic_support_ultra",
+ "xyzprinting_abs",
+ "xyzprinting_antibact_pla",
+ "xyzprinting_carbon_fiber",
+ "xyzprinting_colorinkjet_pla",
+ "xyzprinting_flexible",
+ "xyzprinting_metallic_pla",
+ "xyzprinting_nylon",
+ "xyzprinting_petg",
+ "xyzprinting_pla",
+ "xyzprinting_tough_pla",
+ "xyzprinting_tpu",
+ "zyyx_pro_flex",
+ "zyyx_pro_pla"
+ ],
+ "platform_offset": [
+ 0,
+ 0,
+ 0
+ ]
+ },
+ "overrides":
+ {
+ "machine_depth": { "default_value": 110 },
+ "machine_end_gcode": { "default_value": ";(**** end.gcode for tina2****)\nM203 Z15\nM104 S0\nM107\nG92 E0 (Reset after prime)\nG0 E-1 F300\nG28 Z F300\nG28 X0 Y0\nG1 Y90 F1000" },
+ "machine_height": { "default_value": 100 },
+ "machine_name": { "default_value": "ENTINA TINA2S" },
+ "machine_start_gcode": { "default_value": ";MachineType:{machine_name}\n;FilamentType:{material_type}\n;InfillDensity:{infill_sparse_density}\n;Extruder0Temperature:{material_print_temperature}\n;BedTemperature:{material_bed_temperature}\n\n;(**** start.gcode for tina2****)\nM203 Z15\nM104 S150\nG28 Z\nG28 X Y; Home extruder\nG1 X55 Y55 F1000\nG29\nM107 ; Turn off fan\nG90 ; Absolute positioning\nM82 ; Extruder in absolute mode\nM109 S{material_print_temperature_layer_0}\nG92 E0 ; Reset extruder position\nG1 X90 Y6 Z0.27 F2000\nG1 X20 Y6 Z0.27 E15 F1000\nG92 E0 ; Reset extruder position\nM203 Z5" },
+ "machine_width": { "default_value": 100 },
+ "material_bed_temperature":
+ {
+ "maximum_value": "65",
+ "maximum_value_warning": "60"
+ },
+ "raft_base_thickness": { "value": 0.35 },
+ "speed_infill": { "value": 40.0 },
+ "speed_print": { "value": 40.0 },
+ "speed_print_layer_0": { "value": 22.0 },
+ "speed_roofing": { "value": 25.0 },
+ "speed_support_bottom": { "value": 30.0 },
+ "speed_support_infill": { "value": 45.0 },
+ "speed_support_roof": { "value": 30.0 },
+ "speed_topbottom": { "value": 30.0 },
+ "speed_travel": { "value": 65.0 },
+ "speed_travel_layer_0": { "value": 60 },
+ "speed_wall": { "value": 25.0 },
+ "speed_wall_0": { "value": 20.0 },
+ "speed_wall_x": { "value": 25.0 }
+ }
+}
\ No newline at end of file
diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json
index 915a550a33..fca9e69310 100644
--- a/resources/definitions/fdmprinter.def.json
+++ b/resources/definitions/fdmprinter.def.json
@@ -1289,7 +1289,7 @@
"hole_xy_offset":
{
"label": "Hole Horizontal Expansion",
- "description": "Amount of offset applied to all holes in each layer. Positive values increase the size of the holes, negative values reduce the size of the holes.",
+ "description": "When greater than zero, the Hole Horizontal Expansion is the amount of offset applied to all holes in each layer. Positive values increase the size of the holes, negative values reduce the size of the holes. When this setting is enabled it can be further tuned with Hole Horizontal Expansion Max Diameter.",
"unit": "mm",
"type": "float",
"minimum_value_warning": "-1",
@@ -5921,7 +5921,7 @@
"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_mesh": false,
"settable_per_extruder": true
},
"brim_replaces_support":
diff --git a/resources/definitions/kingroon_kp3s_pro.def.json b/resources/definitions/kingroon_kp3s_pro.def.json
index 3d768e3bd0..79a4916680 100644
--- a/resources/definitions/kingroon_kp3s_pro.def.json
+++ b/resources/definitions/kingroon_kp3s_pro.def.json
@@ -6,7 +6,8 @@
{
"visible": true,
"platform": "kingroon_kp3s.stl",
- "quality_definition": "kingroon_base"
+ "quality_definition": "kingroon_base",
+ "author": "willuhmjs"
},
"overrides":
{
@@ -33,4 +34,4 @@
"retraction_speed": { "value": 40 },
"speed_z_hop": { "value": 4 }
}
-}
\ No newline at end of file
+}
diff --git a/resources/definitions/renkforce_pro10plus.def.json b/resources/definitions/renkforce_pro10plus.def.json
deleted file mode 100644
index 414d59ec0b..0000000000
--- a/resources/definitions/renkforce_pro10plus.def.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "version": 2,
- "name": "Renkforce Pro 10+",
- "inherits": "goofoo_near",
- "metadata":
- {
- "visible": true,
- "author": "Woosh (based on RF100.ini by Conrad Electronic SE)",
- "manufacturer": "Renkforce"
- },
- "overrides":
- {
- "machine_depth": { "default_value": 360 },
- "machine_height": { "default_value": 400 },
- "machine_name": { "default_value": "Renkforce Pro 10+" },
- "machine_width": { "default_value": 360 }
- }
-}
\ No newline at end of file
diff --git a/resources/definitions/weedo_base.def.json b/resources/definitions/weedo_base.def.json
index 0a43dae8cc..bbc1fcd09e 100644
--- a/resources/definitions/weedo_base.def.json
+++ b/resources/definitions/weedo_base.def.json
@@ -9,19 +9,154 @@
"manufacturer": "WEEDO",
"file_formats": "text/x-gcode",
"exclude_materials": [
- "Extrudr_GreenTECPro_Anthracite",
- "Extrudr_GreenTECPro_Black",
- "Extrudr_GreenTECPro_Blue",
- "Extrudr_GreenTECPro_Nature",
- "Extrudr_GreenTECPro_Red",
- "Extrudr_GreenTECPro_Silver",
- "Extrudr_GreenTECPro_White",
- "verbatim_bvoh",
- "dsm_arnitel2045",
- "dsm_novamid1070",
- "imade3d_petg",
- "imade3d_pla",
- "innofill_innoflex60"
+ "3D-Fuel_PLA_PRO_Black",
+ "3D-Fuel_PLA_SnapSupport",
+ "bestfilament_abs_skyblue",
+ "bestfilament_petg_orange",
+ "bestfilament_pla_green",
+ "leapfrog_abs_natural",
+ "leapfrog_epla_natural",
+ "leapfrog_pva_natural",
+ "generic_pc_175",
+ "goofoo_abs",
+ "goofoo_asa",
+ "goofoo_bronze_pla",
+ "goofoo_emarble_pla",
+ "goofoo_esilk_pla",
+ "goofoo_hips",
+ "goofoo_pa_cf",
+ "goofoo_pa",
+ "goofoo_pc",
+ "goofoo_peek",
+ "goofoo_petg",
+ "goofoo_pla",
+ "goofoo_pva",
+ "goofoo_tpe_83a",
+ "goofoo_tpu_87a",
+ "goofoo_tpu_95a",
+ "goofoo_wood_pla",
+ "emotiontech_abs",
+ "emotiontech_absx",
+ "emotiontech_acetate",
+ "emotiontech_asax",
+ "emotiontech_bvoh",
+ "emotiontech_copa",
+ "emotiontech_hips",
+ "emotiontech_nylon_1030",
+ "emotiontech_nylon_1030cf",
+ "emotiontech_nylon_1070",
+ "emotiontech_pc",
+ "emotiontech_pekk",
+ "emotiontech_petg",
+ "emotiontech_pla",
+ "emotiontech_pla_hr_870",
+ "emotiontech_pva-m",
+ "emotiontech_pva-s",
+ "emotiontech_tpu98a",
+ "eryone_petg",
+ "eryone_pla_glow",
+ "eryone_pla_matte",
+ "eryone_pla_wood",
+ "eryone_pla",
+ "eryone_tpu",
+ "eSUN_PETG_Black",
+ "eSUN_PETG_Grey",
+ "eSUN_PETG_Purple",
+ "eSUN_PLA_PRO_Black",
+ "eSUN_PLA_PRO_Grey",
+ "eSUN_PLA_PRO_Purple",
+ "eSUN_PLA_PRO_White",
+ "Extrudr_GreenTECPro_Anthracite_175",
+ "Extrudr_GreenTECPro_Black_175",
+ "Extrudr_GreenTECPro_Blue_175",
+ "Extrudr_GreenTECPro_Nature_175",
+ "Extrudr_GreenTECPro_Red_175",
+ "Extrudr_GreenTECPro_Silver_175",
+ "Extrudr_GreenTECPro_White_175",
+ "verbatim_bvoh_175",
+ "Vertex_Delta_ABS",
+ "Vertex_Delta_PET",
+ "Vertex_Delta_PLA",
+ "Vertex_Delta_TPU",
+ "chromatik_pla",
+ "dsm_arnitel2045_175",
+ "dsm_novamid1070_175",
+ "fabtotum_abs",
+ "fabtotum_nylon",
+ "fabtotum_pla",
+ "fabtotum_tpu",
+ "fdplast_abs_tomato",
+ "fdplast_petg_gray",
+ "fdplast_pla_olive",
+ "fiberlogy_hd_pla",
+ "filo3d_pla",
+ "filo3d_pla_green",
+ "filo3d_pla_red",
+ "imade3d_petg_green",
+ "imade3d_petg_pink",
+ "imade3d_pla_green",
+ "imade3d_pla_pink",
+ "imade3d_petg_175",
+ "imade3d_pla_175",
+ "innofill_innoflex60_175",
+ "layer_one_black_pla",
+ "layer_one_dark_gray_pla",
+ "layer_one_white_pla",
+ "octofiber_pla",
+ "polyflex_pla",
+ "polymax_pla",
+ "polyplus_pla",
+ "polywood_pla",
+ "redd_abs",
+ "redd_asa",
+ "redd_hips",
+ "redd_nylon",
+ "redd_petg",
+ "redd_pla",
+ "redd_tpe",
+ "tizyx_abs",
+ "tizyx_flex",
+ "tizyx_petg",
+ "tizyx_pla_bois",
+ "tizyx_pla",
+ "tizyx_pva",
+ "Vertex_Delta_ABS",
+ "Vertex_Delta_PET",
+ "Vertex_Delta_PLA_Glitter",
+ "Vertex_Delta_PLA_Mat",
+ "Vertex_Delta_PLA_Satin",
+ "Vertex_Delta_PLA_Wood",
+ "Vertex_Delta_PLA",
+ "Vertex_Delta_TPU",
+ "volumic_abs_ultra",
+ "volumic_arma_ultra",
+ "volumic_asa_ultra",
+ "volumic_br80_ultra",
+ "volumic_bumper_ultra",
+ "volumic_cu80_ultra",
+ "volumic_flex93_ultra",
+ "volumic_medical_ultra",
+ "volumic_nylon_ultra",
+ "volumic_pekk_carbone",
+ "volumic_petg_ultra",
+ "volumic_petgcarbone_ultra",
+ "volumic_pla_ultra",
+ "volumic_pp_ultra",
+ "volumic_strong_ultra",
+ "volumic_support_ultra",
+ "xyzprinting_abs",
+ "xyzprinting_antibact_pla",
+ "xyzprinting_carbon_fiber",
+ "xyzprinting_colorinkjet_pla",
+ "xyzprinting_flexible",
+ "xyzprinting_metallic_pla",
+ "xyzprinting_nylon",
+ "xyzprinting_petg",
+ "xyzprinting_pla",
+ "xyzprinting_tough_pla",
+ "xyzprinting_tpu",
+ "zyyx_pro_flex",
+ "zyyx_pro_pla"
],
"has_machine_quality": false,
"has_materials": true,
@@ -33,63 +168,91 @@
"overrides":
{
"adhesion_type": { "default_value": "raft" },
- "default_material_bed_temperature": { "default_value": 35 },
- "extruder_prime_pos_x":
- {
- "maximum_value": "machine_width",
- "minimum_value": "0"
- },
- "extruder_prime_pos_y":
- {
- "maximum_value": "machine_depth",
- "minimum_value": "0"
- },
- "infill_sparse_density": { "default_value": 10 },
- "machine_endstop_positive_direction_x": { "default_value": true },
- "machine_endstop_positive_direction_y": { "default_value": true },
- "machine_endstop_positive_direction_z": { "default_value": false },
- "machine_feeder_wheel_diameter": { "default_value": 10.61 },
- "machine_max_feedrate_e": { "default_value": 45 },
- "machine_max_feedrate_x": { "default_value": 250 },
- "machine_max_feedrate_y": { "default_value": 250 },
+ "draft_shield_dist": { "default_value": 3 },
+ "infill_before_walls": { "default_value": false },
+ "infill_line_width": { "value": "line_width * 1.25" },
+ "infill_material_flow": { "value": "max(0, material_flow - 5)" },
+ "infill_pattern": { "value": "'zigzag'" },
+ "infill_sparse_density": { "default_value": 10.0 },
+ "initial_layer_line_width_factor": { "default_value": 110.0 },
+ "layer_0_z_overlap": { "value": 0.09 },
+ "machine_acceleration": { "default_value": 3000 },
+ "machine_end_gcode": { "default_value": "G92 E0\nG1 E-3 F1680 \nG28 Z F400; Get extruder out of way.\nM107 ; Turn off fan\n; Disable all extruder\nM104 T0 S0\nG90 ; Absolute positioning\nG92 E0 ; Reset extruder position\nM84 ; Turn steppers off\n" },
+ "machine_heated_bed": { "default_value": true },
+ "machine_max_acceleration_e": { "default_value": 1600 },
+ "machine_max_acceleration_x": { "default_value": 3000 },
+ "machine_max_acceleration_y": { "default_value": 3000 },
+ "machine_max_acceleration_z": { "default_value": 120 },
+ "machine_max_feedrate_e": { "default_value": 50 },
+ "machine_max_feedrate_x": { "default_value": 200 },
+ "machine_max_feedrate_y": { "default_value": 130 },
"machine_max_feedrate_z": { "default_value": 10 },
- "machine_nozzle_size": { "default_value": 0.4 },
+ "machine_max_jerk_e": { "default_value": 5.1 },
+ "machine_max_jerk_xy": { "default_value": 10.0 },
+ "machine_max_jerk_z": { "default_value": 5 },
+ "machine_min_cool_heat_time_window": { "default_value": 1200.0 },
+ "machine_name": { "default_value": "WEEDO Base" },
+ "machine_nozzle_cool_down_speed": { "default_value": 0.67 },
+ "machine_nozzle_heat_up_speed": { "default_value": 1.8 },
+ "machine_nozzle_tip_outer_diameter": { "default_value": 0.8 },
+ "machine_start_gcode": { "default_value": "G28 ;Home\nG92 E0\nG1 F200 E3\nG92 E0" },
"machine_steps_per_mm_e": { "default_value": 96 },
"machine_steps_per_mm_x": { "default_value": 94 },
"machine_steps_per_mm_y": { "default_value": 94 },
"machine_steps_per_mm_z": { "default_value": 400 },
"material_bed_temp_wait": { "default_value": false },
+ "material_bed_temperature": { "maximum_value_warning": "96" },
"material_diameter": { "default_value": 1.75 },
- "material_flow": { "default_value": 95 },
- "material_print_temp_prepend": { "default_value": false },
+ "material_final_print_temperature": { "value": "material_print_temperature" },
+ "material_flow": { "default_value": 95.0 },
+ "material_flow_layer_0": { "default_value": 95.0 },
+ "material_initial_print_temperature": { "value": "material_print_temperature" },
"material_print_temp_wait": { "default_value": false },
- "material_standby_temperature": { "minimum_value": "0" },
- "prime_tower_min_volume": { "default_value": 10 },
- "prime_tower_size": { "default_value": 15 },
- "raft_airgap": { "default_value": 0.22 },
- "raft_base_speed": { "value": 20 },
- "raft_interface_speed": { "value": 33 },
- "raft_margin": { "default_value": 8 },
- "raft_surface_fan_speed": { "value": 100 },
- "raft_surface_speed": { "value": 40 },
- "retraction_amount": { "default_value": 1.5 },
+ "material_print_temperature": { "maximum_value": "300" },
+ "material_print_temperature_layer_0": { "value": "min(material_print_temperature + 10, 300)" },
+ "material_standby_temperature": { "default_value": 175.0 },
+ "prime_tower_min_volume": { "default_value": 10.0 },
+ "prime_tower_size": { "default_value": 15.0 },
+ "raft_airgap": { "default_value": 0.19 },
+ "raft_base_fan_speed": { "value": 0.0 },
+ "raft_base_speed": { "value": 20.0 },
+ "raft_base_thickness": { "value": 0.3 },
+ "raft_interface_speed": { "value": 33.0 },
+ "raft_margin": { "default_value": 8.0 },
+ "raft_surface_speed": { "value": 40.0 },
+ "raft_surface_thickness": { "value": 0.25 },
+ "retraction_amount": { "default_value": 3 },
"retraction_combing": { "value": "off" },
- "retraction_speed": { "default_value": 28 },
+ "retraction_extrusion_window": { "value": 1.0 },
+ "retraction_hop_after_extruder_switch": { "default_value": false },
+ "retraction_min_travel": { "value": 0.8 },
+ "retraction_speed": { "default_value": 28.0 },
+ "skin_outline_count": { "value": "0" },
"skirt_brim_speed": { "value": 26.0 },
+ "skirt_line_count": { "default_value": 2 },
"speed_layer_0": { "value": 26.0 },
"speed_prime_tower": { "value": "speed_support" },
- "speed_print_layer_0": { "value": 26.0 },
- "speed_support": { "value": "round(speed_print*0.82,1)" },
- "speed_support_interface": { "value": "round(speed_support*0.689,1)" },
- "speed_topbottom": { "value": "round(speed_print * 0.65,1)" },
+ "speed_print": { "default_value": 70.0 },
+ "speed_support": { "value": "round(speed_print * 0.82, 1)" },
+ "speed_support_interface": { "value": "round(speed_support * 0.689, 1)" },
+ "speed_topbottom": { "value": "round(speed_print * 0.65, 1)" },
"speed_travel": { "value": 105.0 },
"speed_travel_layer_0": { "value": 80.0 },
- "speed_wall": { "value": "max(5,round(speed_print / 2,1))" },
- "speed_wall_0": { "value": "max(5,speed_wall-5)" },
+ "speed_wall": { "value": "max(5, round(speed_print / 2 - 5, 1))" },
+ "speed_wall_0": { "value": "max(5, speed_wall - 5)" },
"speed_wall_x": { "value": "speed_wall" },
- "support_angle": { "default_value": 60 },
+ "support_angle": { "default_value": 60.0 },
+ "support_connect_zigzags": { "default_value": false },
+ "support_interface_density": { "default_value": 60.0 },
+ "support_interface_enable": { "default_value": true },
+ "support_interface_height": { "default_value": 0.8 },
"support_interface_pattern": { "default_value": "lines" },
+ "support_material_flow": { "value": "max(0, material_flow - 5)" },
+ "support_z_distance": { "default_value": 0.18 },
"switch_extruder_retraction_amount": { "value": 16.5 },
- "switch_extruder_retraction_speeds": { "default_value": 28 }
+ "switch_extruder_retraction_speeds": { "default_value": 28.0 },
+ "top_skin_preshrink": { "value": 0.0 },
+ "wall_0_wipe_dist": { "value": 0.0 },
+ "z_seam_corner": { "default_value": "z_seam_corner_any" }
}
}
\ No newline at end of file
diff --git a/resources/definitions/weedo_tina2.def.json b/resources/definitions/weedo_tina2.def.json
new file mode 100644
index 0000000000..7824aa3006
--- /dev/null
+++ b/resources/definitions/weedo_tina2.def.json
@@ -0,0 +1,200 @@
+{
+ "version": 2,
+ "name": "WEEDO TINA2",
+ "inherits": "weedo_base",
+ "metadata":
+ {
+ "visible": true,
+ "author": "WEEDO",
+ "manufacturer": "WEEDO",
+ "file_formats": "text/x-gcode",
+ "exclude_materials": [
+ "3D-Fuel_PLA_PRO_Black",
+ "3D-Fuel_PLA_SnapSupport",
+ "bestfilament_abs_skyblue",
+ "bestfilament_petg_orange",
+ "bestfilament_pla_green",
+ "leapfrog_abs_natural",
+ "leapfrog_epla_natural",
+ "leapfrog_pva_natural",
+ "generic_abs_175",
+ "generic_asa_175",
+ "generic_bvoh_175",
+ "generic_cpe_175",
+ "generic_hips_175",
+ "generic_nylon_175",
+ "generic_pc_175",
+ "generic_petg_175",
+ "generic_pva_175",
+ "goofoo_abs",
+ "goofoo_asa",
+ "goofoo_bronze_pla",
+ "goofoo_emarble_pla",
+ "goofoo_esilk_pla",
+ "goofoo_hips",
+ "goofoo_pa_cf",
+ "goofoo_pa",
+ "goofoo_pc",
+ "goofoo_peek",
+ "goofoo_petg",
+ "goofoo_pla",
+ "goofoo_pva",
+ "goofoo_tpe_83a",
+ "goofoo_tpu_87a",
+ "goofoo_tpu_95a",
+ "goofoo_wood_pla",
+ "emotiontech_abs",
+ "emotiontech_absx",
+ "emotiontech_acetate",
+ "emotiontech_asax",
+ "emotiontech_bvoh",
+ "emotiontech_copa",
+ "emotiontech_hips",
+ "emotiontech_nylon_1030",
+ "emotiontech_nylon_1030cf",
+ "emotiontech_nylon_1070",
+ "emotiontech_pc",
+ "emotiontech_pekk",
+ "emotiontech_petg",
+ "emotiontech_pla",
+ "emotiontech_pla_hr_870",
+ "emotiontech_pva-m",
+ "emotiontech_pva-s",
+ "emotiontech_tpu98a",
+ "eryone_petg",
+ "eryone_pla_glow",
+ "eryone_pla_matte",
+ "eryone_pla_wood",
+ "eryone_pla",
+ "eryone_tpu",
+ "eSUN_PETG_Black",
+ "eSUN_PETG_Grey",
+ "eSUN_PETG_Purple",
+ "eSUN_PLA_PRO_Black",
+ "eSUN_PLA_PRO_Grey",
+ "eSUN_PLA_PRO_Purple",
+ "eSUN_PLA_PRO_White",
+ "Extrudr_GreenTECPro_Anthracite_175",
+ "Extrudr_GreenTECPro_Black_175",
+ "Extrudr_GreenTECPro_Blue_175",
+ "Extrudr_GreenTECPro_Nature_175",
+ "Extrudr_GreenTECPro_Red_175",
+ "Extrudr_GreenTECPro_Silver_175",
+ "Extrudr_GreenTECPro_White_175",
+ "verbatim_bvoh_175",
+ "Vertex_Delta_ABS",
+ "Vertex_Delta_PET",
+ "Vertex_Delta_PLA",
+ "Vertex_Delta_TPU",
+ "chromatik_pla",
+ "dsm_arnitel2045_175",
+ "dsm_novamid1070_175",
+ "fabtotum_abs",
+ "fabtotum_nylon",
+ "fabtotum_pla",
+ "fabtotum_tpu",
+ "fdplast_abs_tomato",
+ "fdplast_petg_gray",
+ "fdplast_pla_olive",
+ "fiberlogy_hd_pla",
+ "filo3d_pla",
+ "filo3d_pla_green",
+ "filo3d_pla_red",
+ "imade3d_petg_green",
+ "imade3d_petg_pink",
+ "imade3d_pla_green",
+ "imade3d_pla_pink",
+ "imade3d_petg_175",
+ "imade3d_pla_175",
+ "innofill_innoflex60_175",
+ "layer_one_black_pla",
+ "layer_one_dark_gray_pla",
+ "layer_one_white_pla",
+ "octofiber_pla",
+ "polyflex_pla",
+ "polymax_pla",
+ "polyplus_pla",
+ "polywood_pla",
+ "redd_abs",
+ "redd_asa",
+ "redd_hips",
+ "redd_nylon",
+ "redd_petg",
+ "redd_pla",
+ "redd_tpe",
+ "tizyx_abs",
+ "tizyx_flex",
+ "tizyx_petg",
+ "tizyx_pla_bois",
+ "tizyx_pla",
+ "tizyx_pva",
+ "Vertex_Delta_ABS",
+ "Vertex_Delta_PET",
+ "Vertex_Delta_PLA_Glitter",
+ "Vertex_Delta_PLA_Mat",
+ "Vertex_Delta_PLA_Satin",
+ "Vertex_Delta_PLA_Wood",
+ "Vertex_Delta_PLA",
+ "Vertex_Delta_TPU",
+ "volumic_abs_ultra",
+ "volumic_arma_ultra",
+ "volumic_asa_ultra",
+ "volumic_br80_ultra",
+ "volumic_bumper_ultra",
+ "volumic_cu80_ultra",
+ "volumic_flex93_ultra",
+ "volumic_medical_ultra",
+ "volumic_nylon_ultra",
+ "volumic_pekk_carbone",
+ "volumic_petg_ultra",
+ "volumic_petgcarbone_ultra",
+ "volumic_pla_ultra",
+ "volumic_pp_ultra",
+ "volumic_strong_ultra",
+ "volumic_support_ultra",
+ "xyzprinting_abs",
+ "xyzprinting_antibact_pla",
+ "xyzprinting_carbon_fiber",
+ "xyzprinting_colorinkjet_pla",
+ "xyzprinting_flexible",
+ "xyzprinting_metallic_pla",
+ "xyzprinting_nylon",
+ "xyzprinting_petg",
+ "xyzprinting_pla",
+ "xyzprinting_tough_pla",
+ "xyzprinting_tpu",
+ "zyyx_pro_flex",
+ "zyyx_pro_pla"
+ ],
+ "platform_offset": [
+ 0,
+ 0,
+ 0
+ ]
+ },
+ "overrides":
+ {
+ "infill_pattern": { "value": "'lines' if infill_sparse_density > 45 else 'grid'" },
+ "machine_depth": { "default_value": 120 },
+ "machine_end_gcode": { "default_value": ";(**** end.gcode for tina2****)\nM203 Z15\nM104 S0\nM107\nG92 E0 (Reset after prime)\nG0 E-1 F300\nG28 Z F300\nG28 X0 Y0\nG1 Y90 F1000" },
+ "machine_heated_bed": { "default_value": false },
+ "machine_height": { "default_value": 100 },
+ "machine_name": { "default_value": "WEEDO TINA2" },
+ "machine_start_gcode": { "default_value": ";MachineType:{machine_name}\n;FilamentType:{material_type}\n;InfillDensity:{infill_sparse_density}\n;Extruder0Temperature:{material_print_temperature}\n\n;(**** start.gcode for tina2****)\nM203 Z15\nM104 S150\nG28 Z\nG28 X Y; Home extruder\nG1 X55 Y55 F1000\nG29\nM107 ; Turn off fan\nG90 ; Absolute positioning\nM82 ; Extruder in absolute mode\nM109 S{material_print_temperature_layer_0}\nG92 E0 ; Reset extruder position\nG1 X90 Y6 Z0.27 F2000\nG1 X20 Y6 Z0.27 E15 F1000\nG92 E0 ; Reset extruder position\nM203 Z5" },
+ "machine_width": { "default_value": 100 },
+ "raft_base_thickness": { "value": 0.35 },
+ "speed_infill": { "value": 40.0 },
+ "speed_print": { "value": 40.0 },
+ "speed_print_layer_0": { "value": 22.0 },
+ "speed_roofing": { "value": 25.0 },
+ "speed_support_bottom": { "value": 30.0 },
+ "speed_support_infill": { "value": 45.0 },
+ "speed_support_roof": { "value": 30.0 },
+ "speed_topbottom": { "value": 30.0 },
+ "speed_travel": { "value": 65.0 },
+ "speed_travel_layer_0": { "value": 60 },
+ "speed_wall": { "value": 25.0 },
+ "speed_wall_0": { "value": 20.0 },
+ "speed_wall_x": { "value": 25.0 }
+ }
+}
\ No newline at end of file
diff --git a/resources/definitions/weedo_tina2s.def.json b/resources/definitions/weedo_tina2s.def.json
new file mode 100644
index 0000000000..5c11529854
--- /dev/null
+++ b/resources/definitions/weedo_tina2s.def.json
@@ -0,0 +1,201 @@
+{
+ "version": 2,
+ "name": "WEEDO TINA2S",
+ "inherits": "weedo_base",
+ "metadata":
+ {
+ "visible": true,
+ "author": "WEEDO",
+ "manufacturer": "WEEDO",
+ "file_formats": "text/x-gcode",
+ "exclude_materials": [
+ "3D-Fuel_PLA_PRO_Black",
+ "3D-Fuel_PLA_SnapSupport",
+ "bestfilament_abs_skyblue",
+ "bestfilament_petg_orange",
+ "bestfilament_pla_green",
+ "leapfrog_abs_natural",
+ "leapfrog_epla_natural",
+ "leapfrog_pva_natural",
+ "generic_abs_175",
+ "generic_asa_175",
+ "generic_cpe_175",
+ "generic_nylon_175",
+ "generic_pc_175",
+ "generic_petg_175",
+ "generic_pva_175",
+ "goofoo_abs",
+ "goofoo_asa",
+ "goofoo_bronze_pla",
+ "goofoo_emarble_pla",
+ "goofoo_esilk_pla",
+ "goofoo_hips",
+ "goofoo_pa_cf",
+ "goofoo_pa",
+ "goofoo_pc",
+ "goofoo_peek",
+ "goofoo_petg",
+ "goofoo_pla",
+ "goofoo_pva",
+ "goofoo_tpe_83a",
+ "goofoo_tpu_87a",
+ "goofoo_tpu_95a",
+ "goofoo_wood_pla",
+ "emotiontech_abs",
+ "emotiontech_absx",
+ "emotiontech_acetate",
+ "emotiontech_asax",
+ "emotiontech_bvoh",
+ "emotiontech_copa",
+ "emotiontech_hips",
+ "emotiontech_nylon_1030",
+ "emotiontech_nylon_1030cf",
+ "emotiontech_nylon_1070",
+ "emotiontech_pc",
+ "emotiontech_pekk",
+ "emotiontech_petg",
+ "emotiontech_pla",
+ "emotiontech_pla_hr_870",
+ "emotiontech_pva-m",
+ "emotiontech_pva-s",
+ "emotiontech_tpu98a",
+ "eryone_petg",
+ "eryone_pla_glow",
+ "eryone_pla_matte",
+ "eryone_pla_wood",
+ "eryone_pla",
+ "eryone_tpu",
+ "eSUN_PETG_Black",
+ "eSUN_PETG_Grey",
+ "eSUN_PETG_Purple",
+ "eSUN_PLA_PRO_Black",
+ "eSUN_PLA_PRO_Grey",
+ "eSUN_PLA_PRO_Purple",
+ "eSUN_PLA_PRO_White",
+ "Extrudr_GreenTECPro_Anthracite_175",
+ "Extrudr_GreenTECPro_Black_175",
+ "Extrudr_GreenTECPro_Blue_175",
+ "Extrudr_GreenTECPro_Nature_175",
+ "Extrudr_GreenTECPro_Red_175",
+ "Extrudr_GreenTECPro_Silver_175",
+ "Extrudr_GreenTECPro_White_175",
+ "verbatim_bvoh_175",
+ "Vertex_Delta_ABS",
+ "Vertex_Delta_PET",
+ "Vertex_Delta_PLA",
+ "Vertex_Delta_TPU",
+ "chromatik_pla",
+ "dsm_arnitel2045_175",
+ "dsm_novamid1070_175",
+ "fabtotum_abs",
+ "fabtotum_nylon",
+ "fabtotum_pla",
+ "fabtotum_tpu",
+ "fdplast_abs_tomato",
+ "fdplast_petg_gray",
+ "fdplast_pla_olive",
+ "fiberlogy_hd_pla",
+ "filo3d_pla",
+ "filo3d_pla_green",
+ "filo3d_pla_red",
+ "imade3d_petg_green",
+ "imade3d_petg_pink",
+ "imade3d_pla_green",
+ "imade3d_pla_pink",
+ "imade3d_petg_175",
+ "imade3d_pla_175",
+ "innofill_innoflex60_175",
+ "layer_one_black_pla",
+ "layer_one_dark_gray_pla",
+ "layer_one_white_pla",
+ "octofiber_pla",
+ "polyflex_pla",
+ "polymax_pla",
+ "polyplus_pla",
+ "polywood_pla",
+ "redd_abs",
+ "redd_asa",
+ "redd_hips",
+ "redd_nylon",
+ "redd_petg",
+ "redd_pla",
+ "redd_tpe",
+ "tizyx_abs",
+ "tizyx_flex",
+ "tizyx_petg",
+ "tizyx_pla_bois",
+ "tizyx_pla",
+ "tizyx_pva",
+ "Vertex_Delta_ABS",
+ "Vertex_Delta_PET",
+ "Vertex_Delta_PLA_Glitter",
+ "Vertex_Delta_PLA_Mat",
+ "Vertex_Delta_PLA_Satin",
+ "Vertex_Delta_PLA_Wood",
+ "Vertex_Delta_PLA",
+ "Vertex_Delta_TPU",
+ "volumic_abs_ultra",
+ "volumic_arma_ultra",
+ "volumic_asa_ultra",
+ "volumic_br80_ultra",
+ "volumic_bumper_ultra",
+ "volumic_cu80_ultra",
+ "volumic_flex93_ultra",
+ "volumic_medical_ultra",
+ "volumic_nylon_ultra",
+ "volumic_pekk_carbone",
+ "volumic_petg_ultra",
+ "volumic_petgcarbone_ultra",
+ "volumic_pla_ultra",
+ "volumic_pp_ultra",
+ "volumic_strong_ultra",
+ "volumic_support_ultra",
+ "xyzprinting_abs",
+ "xyzprinting_antibact_pla",
+ "xyzprinting_carbon_fiber",
+ "xyzprinting_colorinkjet_pla",
+ "xyzprinting_flexible",
+ "xyzprinting_metallic_pla",
+ "xyzprinting_nylon",
+ "xyzprinting_petg",
+ "xyzprinting_pla",
+ "xyzprinting_tough_pla",
+ "xyzprinting_tpu",
+ "zyyx_pro_flex",
+ "zyyx_pro_pla"
+ ],
+ "platform_offset": [
+ 0,
+ 0,
+ 0
+ ]
+ },
+ "overrides":
+ {
+ "machine_depth": { "default_value": 110 },
+ "machine_end_gcode": { "default_value": ";(**** end.gcode for tina2****)\nM203 Z15\nM104 S0\nM107\nG92 E0 (Reset after prime)\nG0 E-1 F300\nG28 Z F300\nG28 X0 Y0\nG1 Y90 F1000" },
+ "machine_height": { "default_value": 100 },
+ "machine_name": { "default_value": "WEEDO TINA2S" },
+ "machine_start_gcode": { "default_value": ";MachineType:{machine_name}\n;FilamentType:{material_type}\n;InfillDensity:{infill_sparse_density}\n;Extruder0Temperature:{material_print_temperature}\n;BedTemperature:{material_bed_temperature}\n\n;(**** start.gcode for tina2****)\nM203 Z15\nM104 S150\nG28 Z\nG28 X Y; Home extruder\nG1 X55 Y55 F1000\nG29\nM107 ; Turn off fan\nG90 ; Absolute positioning\nM82 ; Extruder in absolute mode\nM109 S{material_print_temperature_layer_0}\nG92 E0 ; Reset extruder position\nG1 X90 Y6 Z0.27 F2000\nG1 X20 Y6 Z0.27 E15 F1000\nG92 E0 ; Reset extruder position\nM203 Z5" },
+ "machine_width": { "default_value": 100 },
+ "material_bed_temperature":
+ {
+ "maximum_value": "65",
+ "maximum_value_warning": "60"
+ },
+ "raft_base_thickness": { "value": 0.35 },
+ "speed_infill": { "value": 40.0 },
+ "speed_print": { "value": 40.0 },
+ "speed_print_layer_0": { "value": 22.0 },
+ "speed_roofing": { "value": 25.0 },
+ "speed_support_bottom": { "value": 30.0 },
+ "speed_support_infill": { "value": 45.0 },
+ "speed_support_roof": { "value": 30.0 },
+ "speed_topbottom": { "value": 30.0 },
+ "speed_travel": { "value": 65.0 },
+ "speed_travel_layer_0": { "value": 60 },
+ "speed_wall": { "value": 25.0 },
+ "speed_wall_0": { "value": 20.0 },
+ "speed_wall_x": { "value": 25.0 }
+ }
+}
\ No newline at end of file
diff --git a/resources/definitions/weefun_tina2.def.json b/resources/definitions/weefun_tina2.def.json
index ebe026b163..8177da741c 100644
--- a/resources/definitions/weefun_tina2.def.json
+++ b/resources/definitions/weefun_tina2.def.json
@@ -8,6 +8,164 @@
"author": "WEEFUN",
"manufacturer": "WEEFUN",
"file_formats": "text/x-gcode",
+ "exclude_materials": [
+ "3D-Fuel_PLA_PRO_Black",
+ "3D-Fuel_PLA_SnapSupport",
+ "bestfilament_abs_skyblue",
+ "bestfilament_petg_orange",
+ "bestfilament_pla_green",
+ "leapfrog_abs_natural",
+ "leapfrog_epla_natural",
+ "leapfrog_pva_natural",
+ "generic_abs_175",
+ "generic_asa_175",
+ "generic_bvoh_175",
+ "generic_cpe_175",
+ "generic_hips_175",
+ "generic_nylon_175",
+ "generic_pc_175",
+ "generic_petg_175",
+ "generic_pva_175",
+ "goofoo_abs",
+ "goofoo_asa",
+ "goofoo_bronze_pla",
+ "goofoo_emarble_pla",
+ "goofoo_esilk_pla",
+ "goofoo_hips",
+ "goofoo_pa_cf",
+ "goofoo_pa",
+ "goofoo_pc",
+ "goofoo_peek",
+ "goofoo_petg",
+ "goofoo_pla",
+ "goofoo_pva",
+ "goofoo_tpe_83a",
+ "goofoo_tpu_87a",
+ "goofoo_tpu_95a",
+ "goofoo_wood_pla",
+ "emotiontech_abs",
+ "emotiontech_absx",
+ "emotiontech_acetate",
+ "emotiontech_asax",
+ "emotiontech_bvoh",
+ "emotiontech_copa",
+ "emotiontech_hips",
+ "emotiontech_nylon_1030",
+ "emotiontech_nylon_1030cf",
+ "emotiontech_nylon_1070",
+ "emotiontech_pc",
+ "emotiontech_pekk",
+ "emotiontech_petg",
+ "emotiontech_pla",
+ "emotiontech_pla_hr_870",
+ "emotiontech_pva-m",
+ "emotiontech_pva-s",
+ "emotiontech_tpu98a",
+ "eryone_petg",
+ "eryone_pla_glow",
+ "eryone_pla_matte",
+ "eryone_pla_wood",
+ "eryone_pla",
+ "eryone_tpu",
+ "eSUN_PETG_Black",
+ "eSUN_PETG_Grey",
+ "eSUN_PETG_Purple",
+ "eSUN_PLA_PRO_Black",
+ "eSUN_PLA_PRO_Grey",
+ "eSUN_PLA_PRO_Purple",
+ "eSUN_PLA_PRO_White",
+ "Extrudr_GreenTECPro_Anthracite_175",
+ "Extrudr_GreenTECPro_Black_175",
+ "Extrudr_GreenTECPro_Blue_175",
+ "Extrudr_GreenTECPro_Nature_175",
+ "Extrudr_GreenTECPro_Red_175",
+ "Extrudr_GreenTECPro_Silver_175",
+ "Extrudr_GreenTECPro_White_175",
+ "verbatim_bvoh_175",
+ "Vertex_Delta_ABS",
+ "Vertex_Delta_PET",
+ "Vertex_Delta_PLA",
+ "Vertex_Delta_TPU",
+ "chromatik_pla",
+ "dsm_arnitel2045_175",
+ "dsm_novamid1070_175",
+ "fabtotum_abs",
+ "fabtotum_nylon",
+ "fabtotum_pla",
+ "fabtotum_tpu",
+ "fdplast_abs_tomato",
+ "fdplast_petg_gray",
+ "fdplast_pla_olive",
+ "fiberlogy_hd_pla",
+ "filo3d_pla",
+ "filo3d_pla_green",
+ "filo3d_pla_red",
+ "imade3d_petg_green",
+ "imade3d_petg_pink",
+ "imade3d_pla_green",
+ "imade3d_pla_pink",
+ "imade3d_petg_175",
+ "imade3d_pla_175",
+ "innofill_innoflex60_175",
+ "layer_one_black_pla",
+ "layer_one_dark_gray_pla",
+ "layer_one_white_pla",
+ "octofiber_pla",
+ "polyflex_pla",
+ "polymax_pla",
+ "polyplus_pla",
+ "polywood_pla",
+ "redd_abs",
+ "redd_asa",
+ "redd_hips",
+ "redd_nylon",
+ "redd_petg",
+ "redd_pla",
+ "redd_tpe",
+ "tizyx_abs",
+ "tizyx_flex",
+ "tizyx_petg",
+ "tizyx_pla_bois",
+ "tizyx_pla",
+ "tizyx_pva",
+ "Vertex_Delta_ABS",
+ "Vertex_Delta_PET",
+ "Vertex_Delta_PLA_Glitter",
+ "Vertex_Delta_PLA_Mat",
+ "Vertex_Delta_PLA_Satin",
+ "Vertex_Delta_PLA_Wood",
+ "Vertex_Delta_PLA",
+ "Vertex_Delta_TPU",
+ "volumic_abs_ultra",
+ "volumic_arma_ultra",
+ "volumic_asa_ultra",
+ "volumic_br80_ultra",
+ "volumic_bumper_ultra",
+ "volumic_cu80_ultra",
+ "volumic_flex93_ultra",
+ "volumic_medical_ultra",
+ "volumic_nylon_ultra",
+ "volumic_pekk_carbone",
+ "volumic_petg_ultra",
+ "volumic_petgcarbone_ultra",
+ "volumic_pla_ultra",
+ "volumic_pp_ultra",
+ "volumic_strong_ultra",
+ "volumic_support_ultra",
+ "xyzprinting_abs",
+ "xyzprinting_antibact_pla",
+ "xyzprinting_carbon_fiber",
+ "xyzprinting_colorinkjet_pla",
+ "xyzprinting_flexible",
+ "xyzprinting_metallic_pla",
+ "xyzprinting_nylon",
+ "xyzprinting_petg",
+ "xyzprinting_pla",
+ "xyzprinting_tough_pla",
+ "xyzprinting_tpu",
+ "zyyx_pro_flex",
+ "zyyx_pro_pla"
+ ],
"platform_offset": [
0,
0,
@@ -16,28 +174,27 @@
},
"overrides":
{
- "machine_center_is_zero": { "default_value": false },
+ "infill_pattern": { "value": "'lines' if infill_sparse_density > 45 else 'grid'" },
"machine_depth": { "default_value": 120 },
- "machine_end_gcode": { "default_value": ";(**** end.gcode for TINA2****)\nM104 S0\nM107\nG92 E0 (Reset after prime)\nG0 E-1 F300\nG1 Z105 F300\nG28 X0 Y0\nG1 Y90 F1000\nM203 Z30" },
- "machine_extruder_count": { "default_value": 1 },
+ "machine_end_gcode": { "default_value": ";(**** end.gcode for tina2****)\nM203 Z15\nM104 S0\nM107\nG92 E0 (Reset after prime)\nG0 E-1 F300\nG28 Z F300\nG28 X0 Y0\nG1 Y90 F1000" },
"machine_heated_bed": { "default_value": false },
"machine_height": { "default_value": 100 },
"machine_name": { "default_value": "WEEFUN TINA2" },
- "machine_start_gcode": { "default_value": ";(**** start.gcode for TINA2****)\nM104 S150\nG28 Z\nG28 X Y; Home extruder\nG1 X55 Y55 F1000\nG1 Z10 F200\nG29\nG1 Z15 F100\nM107 ; Turn off fan\nG90 ; Absolute positioning\nM82 ; Extruder in absolute mode\nM109 S{material_print_temperature_layer_0}\nG92 E0 ; Reset extruder position\nG1 X90 Y6 Z0.27 F2000\nG1 X20 Y6 Z0.27 E15 F1000 \nG92 E0 ; Reset extruder position\n\nM203 Z5" },
+ "machine_start_gcode": { "default_value": ";MachineType:{machine_name}\n;FilamentType:{material_type}\n;InfillDensity:{infill_sparse_density}\n;Extruder0Temperature:{material_print_temperature}\n\n;(**** start.gcode for tina2****)\nM203 Z15\nM104 S150\nG28 Z\nG28 X Y; Home extruder\nG1 X55 Y55 F1000\nG29\nM107 ; Turn off fan\nG90 ; Absolute positioning\nM82 ; Extruder in absolute mode\nM109 S{material_print_temperature_layer_0}\nG92 E0 ; Reset extruder position\nG1 X90 Y6 Z0.27 F2000\nG1 X20 Y6 Z0.27 E15 F1000\nG92 E0 ; Reset extruder position\nM203 Z5" },
"machine_width": { "default_value": 100 },
- "retraction_amount": { "default_value": 3 },
- "retraction_count_max": { "default_value": 10 },
- "retraction_speed": { "default_value": 35 },
+ "raft_base_thickness": { "value": 0.35 },
"speed_infill": { "value": 40.0 },
+ "speed_print": { "value": 40.0 },
"speed_print_layer_0": { "value": 22.0 },
"speed_roofing": { "value": 25.0 },
- "speed_support_bottom": { "dvalue": 30.0 },
+ "speed_support_bottom": { "value": 30.0 },
"speed_support_infill": { "value": 45.0 },
"speed_support_roof": { "value": 30.0 },
"speed_topbottom": { "value": 30.0 },
+ "speed_travel": { "value": 65.0 },
"speed_travel_layer_0": { "value": 60 },
+ "speed_wall": { "value": 25.0 },
"speed_wall_0": { "value": 20.0 },
- "speed_wall_x": { "value": 25.0 },
- "support_xy_distance": { "default_value": 1.0 }
+ "speed_wall_x": { "value": 25.0 }
}
}
\ No newline at end of file
diff --git a/resources/definitions/weefun_tina2s.def.json b/resources/definitions/weefun_tina2s.def.json
index d23e0c356c..fc0720ade0 100644
--- a/resources/definitions/weefun_tina2s.def.json
+++ b/resources/definitions/weefun_tina2s.def.json
@@ -8,6 +8,162 @@
"author": "WEEFUN",
"manufacturer": "WEEFUN",
"file_formats": "text/x-gcode",
+ "exclude_materials": [
+ "3D-Fuel_PLA_PRO_Black",
+ "3D-Fuel_PLA_SnapSupport",
+ "bestfilament_abs_skyblue",
+ "bestfilament_petg_orange",
+ "bestfilament_pla_green",
+ "leapfrog_abs_natural",
+ "leapfrog_epla_natural",
+ "leapfrog_pva_natural",
+ "generic_abs_175",
+ "generic_asa_175",
+ "generic_cpe_175",
+ "generic_nylon_175",
+ "generic_pc_175",
+ "generic_petg_175",
+ "generic_pva_175",
+ "goofoo_abs",
+ "goofoo_asa",
+ "goofoo_bronze_pla",
+ "goofoo_emarble_pla",
+ "goofoo_esilk_pla",
+ "goofoo_hips",
+ "goofoo_pa_cf",
+ "goofoo_pa",
+ "goofoo_pc",
+ "goofoo_peek",
+ "goofoo_petg",
+ "goofoo_pla",
+ "goofoo_pva",
+ "goofoo_tpe_83a",
+ "goofoo_tpu_87a",
+ "goofoo_tpu_95a",
+ "goofoo_wood_pla",
+ "emotiontech_abs",
+ "emotiontech_absx",
+ "emotiontech_acetate",
+ "emotiontech_asax",
+ "emotiontech_bvoh",
+ "emotiontech_copa",
+ "emotiontech_hips",
+ "emotiontech_nylon_1030",
+ "emotiontech_nylon_1030cf",
+ "emotiontech_nylon_1070",
+ "emotiontech_pc",
+ "emotiontech_pekk",
+ "emotiontech_petg",
+ "emotiontech_pla",
+ "emotiontech_pla_hr_870",
+ "emotiontech_pva-m",
+ "emotiontech_pva-s",
+ "emotiontech_tpu98a",
+ "eryone_petg",
+ "eryone_pla_glow",
+ "eryone_pla_matte",
+ "eryone_pla_wood",
+ "eryone_pla",
+ "eryone_tpu",
+ "eSUN_PETG_Black",
+ "eSUN_PETG_Grey",
+ "eSUN_PETG_Purple",
+ "eSUN_PLA_PRO_Black",
+ "eSUN_PLA_PRO_Grey",
+ "eSUN_PLA_PRO_Purple",
+ "eSUN_PLA_PRO_White",
+ "Extrudr_GreenTECPro_Anthracite_175",
+ "Extrudr_GreenTECPro_Black_175",
+ "Extrudr_GreenTECPro_Blue_175",
+ "Extrudr_GreenTECPro_Nature_175",
+ "Extrudr_GreenTECPro_Red_175",
+ "Extrudr_GreenTECPro_Silver_175",
+ "Extrudr_GreenTECPro_White_175",
+ "verbatim_bvoh_175",
+ "Vertex_Delta_ABS",
+ "Vertex_Delta_PET",
+ "Vertex_Delta_PLA",
+ "Vertex_Delta_TPU",
+ "chromatik_pla",
+ "dsm_arnitel2045_175",
+ "dsm_novamid1070_175",
+ "fabtotum_abs",
+ "fabtotum_nylon",
+ "fabtotum_pla",
+ "fabtotum_tpu",
+ "fdplast_abs_tomato",
+ "fdplast_petg_gray",
+ "fdplast_pla_olive",
+ "fiberlogy_hd_pla",
+ "filo3d_pla",
+ "filo3d_pla_green",
+ "filo3d_pla_red",
+ "imade3d_petg_green",
+ "imade3d_petg_pink",
+ "imade3d_pla_green",
+ "imade3d_pla_pink",
+ "imade3d_petg_175",
+ "imade3d_pla_175",
+ "innofill_innoflex60_175",
+ "layer_one_black_pla",
+ "layer_one_dark_gray_pla",
+ "layer_one_white_pla",
+ "octofiber_pla",
+ "polyflex_pla",
+ "polymax_pla",
+ "polyplus_pla",
+ "polywood_pla",
+ "redd_abs",
+ "redd_asa",
+ "redd_hips",
+ "redd_nylon",
+ "redd_petg",
+ "redd_pla",
+ "redd_tpe",
+ "tizyx_abs",
+ "tizyx_flex",
+ "tizyx_petg",
+ "tizyx_pla_bois",
+ "tizyx_pla",
+ "tizyx_pva",
+ "Vertex_Delta_ABS",
+ "Vertex_Delta_PET",
+ "Vertex_Delta_PLA_Glitter",
+ "Vertex_Delta_PLA_Mat",
+ "Vertex_Delta_PLA_Satin",
+ "Vertex_Delta_PLA_Wood",
+ "Vertex_Delta_PLA",
+ "Vertex_Delta_TPU",
+ "volumic_abs_ultra",
+ "volumic_arma_ultra",
+ "volumic_asa_ultra",
+ "volumic_br80_ultra",
+ "volumic_bumper_ultra",
+ "volumic_cu80_ultra",
+ "volumic_flex93_ultra",
+ "volumic_medical_ultra",
+ "volumic_nylon_ultra",
+ "volumic_pekk_carbone",
+ "volumic_petg_ultra",
+ "volumic_petgcarbone_ultra",
+ "volumic_pla_ultra",
+ "volumic_pp_ultra",
+ "volumic_strong_ultra",
+ "volumic_support_ultra",
+ "xyzprinting_abs",
+ "xyzprinting_antibact_pla",
+ "xyzprinting_carbon_fiber",
+ "xyzprinting_colorinkjet_pla",
+ "xyzprinting_flexible",
+ "xyzprinting_metallic_pla",
+ "xyzprinting_nylon",
+ "xyzprinting_petg",
+ "xyzprinting_pla",
+ "xyzprinting_tough_pla",
+ "xyzprinting_tpu",
+ "zyyx_pro_flex",
+ "zyyx_pro_pla"
+ ],
"platform_offset": [
0,
0,
@@ -16,25 +172,29 @@
},
"overrides":
{
- "gantry_height": { "value": 20 },
- "machine_center_is_zero": { "default_value": false },
- "machine_depth": { "default_value": 120 },
- "machine_end_gcode": { "default_value": ";(**** end.gcode for tina2s****)\nM203 Z15 ;Move Z axis up 5mm\nM104 S0 ;Turn off extruder heating\nM140 S0 ;Turn off bed heating\nM107 ;Turn Fans off\nG92 E0 ;(Reset after prime)\nG0 E-1 F300 ;Retract Fillament 1mm\nG28 Z F300 ;Park Hotend up\nG28 X0 Y0 ;Park Hotend\nG1 Y90 F1000 ;Present finished model\nG0 E-2 F300 ;Retract Fillament 2mm\nM82 ;absolute extrusion mode\nM104 S0 ;Ensure hotend is off\nM117 Print Complete" },
- "machine_extruder_count": { "default_value": 1 },
- "machine_heated_bed": { "default_value": true },
+ "machine_depth": { "default_value": 110 },
+ "machine_end_gcode": { "default_value": ";(**** end.gcode for tina2****)\nM203 Z15\nM104 S0\nM107\nG92 E0 (Reset after prime)\nG0 E-1 F300\nG28 Z F300\nG28 X0 Y0\nG1 Y90 F1000" },
"machine_height": { "default_value": 100 },
"machine_name": { "default_value": "WEEFUN TINA2S" },
- "machine_start_gcode": { "default_value": ";MachineType:TINA2S\n;FilamentType:{material_type}\n;Layer height:{layer_height}\n;Extruder0Temperature:{material_print_temperature}\n;BedTemperature:{material_bed_temperature}\n;InfillDensity:{infill_sparse_density}\n;(**** start.gcode for tina2s****)\nM203 Z5 ;Move Z axis up 5mm\nM117 Homing axes\nG28 Z; Home extruder axis Z\nG28 X Y; Home extruder axis X Y\nM117 Start Warm Up\nM140 S{material_bed_temperature} ;start heating the bed to what is set in Cura\nM104 S130 ;start heating E to 130 for preheat\nM190 S{material_bed_temperature} ;Wait for Bed Temperature\nM117 Levling the build plate\nG29\nG1 Z1.0 F3000 ;Move Z Axis up to 1mm\nG1 X0.5 Y1 ;Move hotend to starting position\nM117 Heating Hotend\nM104 S{material_initial_print_temperature} T0 ;start heating T0 to what is set in Cura\nM109 S{material_initial_print_temperature} T0 ;Wait for Hotend Temperature\nG92 E0 ;Reset Extruder\nM117 Purging and cleaning nozzle\nG1 X1.1 Y10 Z0.28 F1000.0 ;Move to start position\nG1 X1.1 Y90.0 Z0.28 F2000.0 E15 ;Draw the first line\nG1 X1.4 Y90.0 Z0.23 F5000.0 ;Move to side a little\nG1 X1.4 Y10 Z0.20 F2000.0 E15 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up\nG1 X1 Y5 Z0.2 F5000.0 ;Move over to prevent blob squish\nM117 Printing..." },
+ "machine_start_gcode": { "default_value": ";MachineType:{machine_name}\n;FilamentType:{material_type}\n;InfillDensity:{infill_sparse_density}\n;Extruder0Temperature:{material_print_temperature}\n;BedTemperature:{material_bed_temperature}\n\n;(**** start.gcode for tina2****)\nM203 Z15\nM104 S150\nG28 Z\nG28 X Y; Home extruder\nG1 X55 Y55 F1000\nG29\nM107 ; Turn off fan\nG90 ; Absolute positioning\nM82 ; Extruder in absolute mode\nM109 S{material_print_temperature_layer_0}\nG92 E0 ; Reset extruder position\nG1 X90 Y6 Z0.27 F2000\nG1 X20 Y6 Z0.27 E15 F1000\nG92 E0 ; Reset extruder position\nM203 Z5" },
"machine_width": { "default_value": 100 },
- "retraction_amount": { "default_value": 3 },
+ "material_bed_temperature":
+ {
+ "maximum_value": "65",
+ "maximum_value_warning": "60"
+ },
+ "raft_base_thickness": { "value": 0.35 },
"speed_infill": { "value": 40.0 },
+ "speed_print": { "value": 40.0 },
"speed_print_layer_0": { "value": 22.0 },
"speed_roofing": { "value": 25.0 },
- "speed_support_bottom": { "dvalue": 30.0 },
+ "speed_support_bottom": { "value": 30.0 },
"speed_support_infill": { "value": 45.0 },
"speed_support_roof": { "value": 30.0 },
"speed_topbottom": { "value": 30.0 },
+ "speed_travel": { "value": 65.0 },
"speed_travel_layer_0": { "value": 60 },
+ "speed_wall": { "value": 25.0 },
"speed_wall_0": { "value": 20.0 },
"speed_wall_x": { "value": 25.0 }
}
diff --git a/resources/extruders/anycubic_kobra_plus_extruder_0.def.json b/resources/extruders/anycubic_kobra_plus_extruder_0.def.json
new file mode 100644
index 0000000000..51a6c351bc
--- /dev/null
+++ b/resources/extruders/anycubic_kobra_plus_extruder_0.def.json
@@ -0,0 +1,16 @@
+{
+ "version": 2,
+ "name": "Extruder 1",
+ "inherits": "fdmextruder",
+ "metadata":
+ {
+ "machine": "anycubic_kobra_plus",
+ "position": "0"
+ },
+ "overrides":
+ {
+ "extruder_nr": { "default_value": 0 },
+ "machine_nozzle_size": { "default_value": 0.4 },
+ "material_diameter": { "default_value": 1.75 }
+ }
+}
\ No newline at end of file
diff --git a/resources/qml/Actions.qml b/resources/qml/Actions.qml
index 6cd75b51ac..3b75c7699e 100644
--- a/resources/qml/Actions.qml
+++ b/resources/qml/Actions.qml
@@ -1,4 +1,4 @@
-// Copyright (c) 2022 UltiMaker
+// Copyright (c) 2023 UltiMaker
// Cura is released under the terms of the LGPLv3 or higher.
pragma Singleton
@@ -6,7 +6,7 @@ pragma Singleton
import QtQuick 2.10
import QtQuick.Controls 2.4
import UM 1.1 as UM
-import Cura 1.0 as Cura
+import Cura 1.5 as Cura
Item
{
@@ -71,6 +71,15 @@ Item
property alias browsePackages: browsePackagesAction
+ property alias paste: pasteAction
+ property alias copy: copyAction
+ property alias cut: cutAction
+
+ readonly property bool copy_paste_enabled: {
+ const all_enabled_packages = CuraApplication.getPackageManager().allEnabledPackages;
+ return all_enabled_packages.includes("3MFReader") && all_enabled_packages.includes("3MFWriter");
+ }
+
UM.I18nCatalog{id: catalog; name: "cura"}
@@ -309,6 +318,33 @@ Item
onTriggered: CuraActions.centerSelection()
}
+ Action
+ {
+ id: copyAction
+ text: catalog.i18nc("@action:inmenu menubar:edit", "Copy to clipboard")
+ onTriggered: CuraActions.copy()
+ enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection && copy_paste_enabled
+ shortcut: StandardKey.Copy
+ }
+
+ Action
+ {
+ id: pasteAction
+ text: catalog.i18nc("@action:inmenu menubar:edit", "Paste from clipboard")
+ onTriggered: CuraActions.paste()
+ enabled: UM.Controller.toolsEnabled && copy_paste_enabled
+ shortcut: StandardKey.Paste
+ }
+
+ Action
+ {
+ id: cutAction
+ text: catalog.i18nc("@action:inmenu menubar:edit", "Cut")
+ onTriggered: CuraActions.cut()
+ enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection && copy_paste_enabled
+ shortcut: StandardKey.Cut
+ }
+
Action
{
id: multiplySelectionAction
diff --git a/resources/qml/ColorDialog.qml b/resources/qml/ColorDialog.qml
deleted file mode 100644
index 99d46ed327..0000000000
--- a/resources/qml/ColorDialog.qml
+++ /dev/null
@@ -1,152 +0,0 @@
-// Copyright (c) 2022 UltiMaker
-// Cura is released under the terms of the LGPLv3 or higher.
-
-import QtQuick 2.15
-import QtQuick.Controls 2.2
-import QtQuick.Window 2.1
-import QtQuick.Layouts 1.1
-
-import UM 1.7 as UM
-import Cura 1.7 as Cura
-
-
-/*
-* A dialog that provides the option to pick a color. Currently it only asks for a hex code and shows the color
-* in a color swath
-*/
-UM.Dialog
-{
- id: base
-
- property variant catalog: UM.I18nCatalog { name: "cura" }
-
- margin: UM.Theme.getSize("default_margin").width
-
- property alias swatchGridColumns: colorSwatchGrid.columns
-
- // In this case we would like to let the content of the dialog determine the size of the dialog
- // however with the current implementation of the dialog this is not possible, so instead we calculate
- // the size of the dialog ourselves.
- // Ugly workaround for windows having overlapping elements due to incorrect dialog width
- minimumWidth: content.width + (Qt.platform.os === "windows" ? 4 * margin : 2 * margin)
- minimumHeight: {
- const footerHeight = Math.max(okButton.height, cancelButton.height);
- return content.height + footerHeight + (Qt.platform.os === "windows" ? 5 * margin : 3 * margin);
- }
-
- property alias color: colorInput.text
- property var swatchColors: [
- "#2161AF", "#57AFB2", "#F7B32D", "#E33D4A", "#C088AD",
- "#5D88BE", "#5ABD0E", "#E17239", "#F74E46", "#874AF9",
- "#50C2EC", "#8DC15A", "#C3977A", "#CD7776", "#9086BA",
- "#FFFFFF", "#D3D3D3", "#9E9E9E", "#5A5A5A", "#000000",
- ]
-
- Component.onCompleted: updateSwatches()
- onSwatchColorsChanged: updateSwatches()
-
- function updateSwatches()
- {
- swatchColorsModel.clear();
- for (const swatchColor of base.swatchColors)
- {
- swatchColorsModel.append({ swatchColor });
- }
- }
-
- Column
- {
- id: content
- width: childrenRect.width
- height: childrenRect.height
- spacing: UM.Theme.getSize("wide_margin").height
-
- GridLayout {
- id: colorSwatchGrid
- columns: 5
- width: childrenRect.width
- height: childrenRect.height
- columnSpacing: UM.Theme.getSize("thick_margin").width
- rowSpacing: UM.Theme.getSize("thick_margin").height
-
- Repeater
- {
- model: ListModel
- {
- id: swatchColorsModel
- }
-
- delegate: Rectangle
- {
- color: swatchColor
- implicitWidth: UM.Theme.getSize("medium_button_icon").width
- implicitHeight: UM.Theme.getSize("medium_button_icon").height
- radius: width / 2
-
- UM.ColorImage
- {
- anchors.fill: parent
- visible: swatchColor == base.color
- source: UM.Theme.getIcon("Check", "low")
- color: UM.Theme.getColor("checkbox")
- }
-
- MouseArea
- {
- anchors.fill: parent
- onClicked: base.color = swatchColor
- }
- }
- }
- }
-
- RowLayout
- {
- width: parent.width
- spacing: UM.Theme.getSize("default_margin").width
-
- UM.Label
- {
- text: catalog.i18nc("@label", "Hex")
- }
-
- Cura.TextField
- {
- id: colorInput
- Layout.fillWidth: true
- text: "#FFFFFF"
- selectByMouse: true
- onTextChanged: {
- if (!text.startsWith("#"))
- {
- text = `#${text}`;
- }
- }
- validator: UM.HexColorValidator {}
- }
-
- Rectangle
- {
- color: base.color
- Layout.preferredHeight: parent.height
- Layout.preferredWidth: height
- }
- }
- }
-
- buttonSpacing: UM.Theme.getSize("thin_margin").width
-
- rightButtons:
- [
- Cura.TertiaryButton {
- id: cancelButton
- text: catalog.i18nc("@action:button", "Cancel")
- onClicked: base.close()
- },
- Cura.PrimaryButton {
- id: okButton
- text: catalog.i18nc("@action:button", "OK")
- onClicked: base.accept()
- }
- ]
-}
\ No newline at end of file
diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml
index cb3202bc00..31066f8f46 100644
--- a/resources/qml/Cura.qml
+++ b/resources/qml/Cura.qml
@@ -628,7 +628,7 @@ UM.MainWindow
//: File open dialog title
title: catalog.i18nc("@title:window","Open file(s)")
modality: Qt.WindowModal
- fileMode: FileDialog.FileMode.ExistingFile
+ fileMode: FileDialog.FileMode.OpenFiles
nameFilters: UM.MeshFileHandler.supportedReadFileTypes;
currentFolder: CuraApplication.getDefaultPath("dialog_load_path")
onAccepted:
diff --git a/resources/qml/Dialogs/AboutDialog.qml b/resources/qml/Dialogs/AboutDialog.qml
index 4ccf58d0b4..b0cd9d2ad3 100644
--- a/resources/qml/Dialogs/AboutDialog.qml
+++ b/resources/qml/Dialogs/AboutDialog.qml
@@ -1,10 +1,10 @@
// Copyright (c) 2022 UltiMaker
// Cura is released under the terms of the LGPLv3 or higher.
-import QtQuick 2.2
+import QtQuick 2.4
import QtQuick.Controls 2.9
-import UM 1.5 as UM
+import UM 1.6 as UM
import Cura 1.5 as Cura
UM.Dialog
@@ -21,6 +21,7 @@ UM.Dialog
backgroundColor: UM.Theme.getColor("main_background")
+
Rectangle
{
id: header
@@ -50,6 +51,15 @@ UM.Dialog
anchors.horizontalCenter: parent.horizontalCenter
UM.I18nCatalog{id: catalog; name: "cura"}
+ MouseArea
+ {
+ anchors.fill: parent
+ onClicked:
+ {
+ projectsList.visible = !projectsList.visible;
+ projectBuildInfoList.visible = !projectBuildInfoList.visible;
+ }
+ }
}
UM.Label
@@ -181,6 +191,18 @@ UM.Dialog
}
}
+ AboutDialogVersionsList{
+ id: projectBuildInfoList
+
+ }
+
+
+ onVisibleChanged:
+ {
+ projectsList.visible = true;
+ projectBuildInfoList.visible = false;
+ }
+
rightButtons: Cura.TertiaryButton
{
//: Close about dialog button
diff --git a/resources/qml/MachineSettings/NumericTextFieldWithUnit.qml b/resources/qml/MachineSettings/NumericTextFieldWithUnit.qml
index 64beeb9834..408db66f3a 100644
--- a/resources/qml/MachineSettings/NumericTextFieldWithUnit.qml
+++ b/resources/qml/MachineSettings/NumericTextFieldWithUnit.qml
@@ -76,6 +76,11 @@ UM.TooltipArea
anchors.left: fieldLabel.right
anchors.leftMargin: spacing
verticalAlignment: Text.AlignVCenter
+
+ // The control is set up for left to right. So we force it to that. If we don't, it will take the OS reading
+ // direction, which might not be left to right. This will lead to the text overlapping with the unit
+ horizontalAlignment: TextInput.AlignLeft
+
selectionColor: UM.Theme.getColor("text_selection")
selectedTextColor: UM.Theme.getColor("setting_control_text")
padding: 0
diff --git a/resources/qml/Menus/ContextMenu.qml b/resources/qml/Menus/ContextMenu.qml
index f7029939cd..d85703451f 100644
--- a/resources/qml/Menus/ContextMenu.qml
+++ b/resources/qml/Menus/ContextMenu.qml
@@ -19,6 +19,8 @@ Cura.Menu
// Selection-related actions.
Cura.MenuItem { action: Cura.Actions.centerSelection; }
Cura.MenuItem { action: Cura.Actions.deleteSelection; }
+ Cura.MenuItem { action: Cura.Actions.copy; }
+ Cura.MenuItem { action: Cura.Actions.paste; }
Cura.MenuItem { action: Cura.Actions.multiplySelection; }
// Extruder selection - only visible if there is more than 1 extruder
diff --git a/resources/qml/Preferences/Materials/MaterialsView.qml b/resources/qml/Preferences/Materials/MaterialsView.qml
index d37150075b..3245009a96 100644
--- a/resources/qml/Preferences/Materials/MaterialsView.qml
+++ b/resources/qml/Preferences/Materials/MaterialsView.qml
@@ -256,12 +256,12 @@ Item
// popup dialog to select a new color
// if successful it sets the properties.color_code value to the new color
- Cura.ColorDialog
+ ColorDialog
{
id: colorDialog
title: catalog.i18nc("@title", "Material color picker")
- color: properties.color_code
- onAccepted: base.setMetaDataEntry("color_code", properties.color_code, color)
+ selectedColor: properties.color_code
+ onAccepted: base.setMetaDataEntry("color_code", properties.color_code, selectedColor)
}
}
}
diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml
index 2183ef7d5e..07e9c1ffaa 100644
--- a/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml
+++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml
@@ -17,7 +17,7 @@ RecommendedSettingSection
enableSectionSwitchVisible: platformAdhesionType.properties.enabled === "True"
enableSectionSwitchChecked: platformAdhesionType.properties.value !== "skirt" && platformAdhesionType.properties.value !== "none"
enableSectionSwitchEnabled: recommendedPrintSetup.settingsEnabled
- tooltipText: catalog.i18nc("@label", "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards.")
+ tooltipText: catalog.i18nc("@label", "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards. Disabling it results in a skirt around object by default.")
property var curaRecommendedMode: Cura.RecommendedMode {}
diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedPrintSetup.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedPrintSetup.qml
index 50b5dc7357..0f4efc8498 100644
--- a/resources/qml/PrintSetupSelector/Recommended/RecommendedPrintSetup.qml
+++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedPrintSetup.qml
@@ -111,7 +111,6 @@ Flickable
anchors.right: parent.right
text: catalog.i18nc("@button", "Show Custom")
textFont: UM.Theme.getFont("medium_bold")
- outlineColor: "transparent"
onClicked: onModeChanged()
}
}
diff --git a/resources/quality/anycubic_kobra_plus/anycubic_kobra_plus_normal.inst.cfg b/resources/quality/anycubic_kobra_plus/anycubic_kobra_plus_normal.inst.cfg
new file mode 100644
index 0000000000..47983fe3b1
--- /dev/null
+++ b/resources/quality/anycubic_kobra_plus/anycubic_kobra_plus_normal.inst.cfg
@@ -0,0 +1,28 @@
+[general]
+definition = anycubic_kobra_plus
+name = Normal
+version = 4
+
+[metadata]
+global_quality = True
+quality_type = normal
+setting_version = 22
+type = quality
+weight = 0
+
+[values]
+infill_pattern = cubic
+layer_height = 0.2
+layer_height_0 = 0.2
+material_final_print_temperature = 195
+material_print_temperature = 195
+retraction_combing = off
+retraction_hop = 0.1
+retraction_hop_enabled = True
+retraction_hop_only_when_collides = True
+speed_infill = 40
+speed_layer_0 = 20
+speed_print = 80
+speed_wall_x = 60
+wall_thickness = 1.2
+
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.25_abs_0.1mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.25_abs_0.1mm.inst.cfg
index 6bc57b7a6e..3a88801570 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.25_abs_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.25_abs_0.1mm.inst.cfg
@@ -13,4 +13,8 @@ weight = 0
[values]
speed_topbottom = =math.ceil(speed_print * 30 / 55)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.25_cpe_0.1mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.25_cpe_0.1mm.inst.cfg
index 2cba4bb788..cd74f2688f 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.25_cpe_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.25_cpe_0.1mm.inst.cfg
@@ -14,5 +14,9 @@ weight = 0
[values]
speed_infill = =math.ceil(speed_print * 40 / 55)
speed_topbottom = =math.ceil(speed_print * 30 / 55)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 0.8
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.25_nylon_0.1mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.25_nylon_0.1mm.inst.cfg
index 3d765aaa1e..a148563d97 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.25_nylon_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.25_nylon_0.1mm.inst.cfg
@@ -20,6 +20,10 @@ retraction_min_travel = 5
speed_print = 70
speed_topbottom = =math.ceil(speed_print * 30 / 70)
speed_wall = =math.ceil(speed_print * 30 / 70)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 30
switch_extruder_retraction_amount = 30
switch_extruder_retraction_speeds = 40
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.25_pc_0.1mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.25_pc_0.1mm.inst.cfg
index 3e97141c64..7a15e94478 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.25_pc_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.25_pc_0.1mm.inst.cfg
@@ -29,7 +29,11 @@ speed_print = 50
speed_topbottom = =math.ceil(speed_print * 25 / 50)
speed_wall = =math.ceil(speed_print * 40 / 50)
speed_wall_0 = =math.ceil(speed_wall * 25 / 40)
+support_bottom_distance = =support_z_distance
support_interface_density = 87.5
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.25_petg_0.1mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.25_petg_0.1mm.inst.cfg
index ffaf1dd591..d2695b0eaf 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.25_petg_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.25_petg_0.1mm.inst.cfg
@@ -15,5 +15,9 @@ weight = 0
material_print_temperature = =default_material_print_temperature - 5
speed_infill = =math.ceil(speed_print * 40 / 55)
speed_topbottom = =math.ceil(speed_print * 30 / 55)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 0.8
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.25_pla_0.1mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.25_pla_0.1mm.inst.cfg
index 95d624cf99..1b40b93f91 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.25_pla_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.25_pla_0.1mm.inst.cfg
@@ -21,6 +21,10 @@ retraction_hop = 0.2
speed_print = 30
speed_wall = =math.ceil(speed_print * 25 / 30)
speed_wall_0 = =math.ceil(speed_print * 20 / 30)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 0.72
travel_avoid_distance = 0.4
wall_0_inset = 0.015
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.25_pp_0.1mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.25_pp_0.1mm.inst.cfg
index 90ac201992..75cea75e5b 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.25_pp_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.25_pp_0.1mm.inst.cfg
@@ -34,6 +34,10 @@ speed_print = 25
speed_wall = =math.ceil(speed_print * 25 / 25)
speed_wall_0 = =math.ceil(speed_wall * 25 / 25)
support_angle = 50
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.25_tough-pla_0.1mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.25_tough-pla_0.1mm.inst.cfg
index 90a389ea0b..03daa33819 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.25_tough-pla_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.25_tough-pla_0.1mm.inst.cfg
@@ -21,6 +21,10 @@ speed_print = 30
speed_topbottom = =math.ceil(speed_print * 20 / 30)
speed_wall = =math.ceil(speed_print * 25 / 30)
speed_wall_0 = =math.ceil(speed_print * 20 / 30)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 0.72
wall_0_inset = 0.015
wall_0_wipe_dist = 0.25
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_abs_0.06mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_abs_0.06mm.inst.cfg
index ad57f4d87d..f6969a31a3 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_abs_0.06mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_abs_0.06mm.inst.cfg
@@ -22,4 +22,8 @@ speed_infill = =math.ceil(speed_print * 40 / 50)
speed_print = 50
speed_topbottom = =math.ceil(speed_print * 30 / 50)
speed_wall = =math.ceil(speed_print * 30 / 50)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_abs_0.15mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_abs_0.15mm.inst.cfg
index 075c1fd4aa..6d5e7148c4 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_abs_0.15mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_abs_0.15mm.inst.cfg
@@ -23,4 +23,8 @@ speed_print = 60
speed_topbottom = =math.ceil(speed_print * 30 / 60)
speed_wall = =math.ceil(speed_print * 40 / 60)
speed_wall_0 = =math.ceil(speed_wall * 30 / 40)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_abs_0.1mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_abs_0.1mm.inst.cfg
index 5c2bb0f6f4..852c8580d7 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_abs_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_abs_0.1mm.inst.cfg
@@ -22,4 +22,8 @@ speed_infill = =math.ceil(speed_print * 40 / 55)
speed_print = 55
speed_topbottom = =math.ceil(speed_print * 30 / 55)
speed_wall = =math.ceil(speed_print * 30 / 55)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_abs_0.2mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_abs_0.2mm.inst.cfg
index 6d68564281..df95d49c12 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_abs_0.2mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_abs_0.2mm.inst.cfg
@@ -23,4 +23,8 @@ speed_print = 60
speed_topbottom = =math.ceil(speed_print * 35 / 60)
speed_wall = =math.ceil(speed_print * 45 / 60)
speed_wall_0 = =math.ceil(speed_wall * 35 / 45)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe-plus_0.06mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe-plus_0.06mm.inst.cfg
index fe501993d4..baa0b0c36d 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe-plus_0.06mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe-plus_0.06mm.inst.cfg
@@ -28,6 +28,9 @@ speed_print = 40
speed_topbottom = =math.ceil(speed_print * 30 / 35)
speed_wall = =math.ceil(speed_print * 35 / 40)
speed_wall_0 = =math.ceil(speed_wall * 30 / 35)
-support_z_distance = =layer_height
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.4/layer_height)*layer_height
wall_0_inset = 0
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe-plus_0.15mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe-plus_0.15mm.inst.cfg
index f9c44650c2..f53c0f5aeb 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe-plus_0.15mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe-plus_0.15mm.inst.cfg
@@ -26,6 +26,9 @@ speed_print = 45
speed_topbottom = =math.ceil(speed_print * 35 / 45)
speed_wall = =math.ceil(speed_print * 45 / 45)
speed_wall_0 = =math.ceil(speed_wall * 35 / 45)
-support_z_distance = =layer_height
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.4/layer_height)*layer_height
wall_0_inset = 0
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe-plus_0.1mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe-plus_0.1mm.inst.cfg
index d7b82b4a1c..967d3ccd44 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe-plus_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe-plus_0.1mm.inst.cfg
@@ -28,6 +28,9 @@ speed_print = 40
speed_topbottom = =math.ceil(speed_print * 30 / 35)
speed_wall = =math.ceil(speed_print * 35 / 40)
speed_wall_0 = =math.ceil(speed_wall * 30 / 35)
-support_z_distance = =layer_height
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.4/layer_height)*layer_height
wall_0_inset = 0
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe-plus_0.2mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe-plus_0.2mm.inst.cfg
index 76a248a749..de0053edf9 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe-plus_0.2mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe-plus_0.2mm.inst.cfg
@@ -26,6 +26,9 @@ speed_print = 50
speed_topbottom = =math.ceil(speed_print * 40 / 50)
speed_wall = =math.ceil(speed_print * 50 / 50)
speed_wall_0 = =math.ceil(speed_wall * 40 / 50)
-support_z_distance = =layer_height
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.4/layer_height)*layer_height
wall_0_inset = 0
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe_0.06mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe_0.06mm.inst.cfg
index 8a399bd637..7a13861023 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe_0.06mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe_0.06mm.inst.cfg
@@ -21,4 +21,8 @@ speed_infill = =math.ceil(speed_print * 40 / 50)
speed_print = 50
speed_topbottom = =math.ceil(speed_print * 30 / 50)
speed_wall = =math.ceil(speed_print * 30 / 50)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe_0.15mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe_0.15mm.inst.cfg
index e6f19344df..60a9e47834 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe_0.15mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe_0.15mm.inst.cfg
@@ -20,4 +20,8 @@ speed_print = 60
speed_topbottom = =math.ceil(speed_print * 30 / 60)
speed_wall = =math.ceil(speed_print * 40 / 60)
speed_wall_0 = =math.ceil(speed_wall * 30 / 40)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe_0.1mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe_0.1mm.inst.cfg
index 730f7cd2f3..422258c09c 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe_0.1mm.inst.cfg
@@ -20,4 +20,8 @@ speed_infill = =math.ceil(speed_print * 45 / 55)
speed_print = 55
speed_topbottom = =math.ceil(speed_print * 30 / 55)
speed_wall = =math.ceil(speed_print * 30 / 55)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe_0.2mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe_0.2mm.inst.cfg
index da5699d463..1764954dd5 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe_0.2mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_cpe_0.2mm.inst.cfg
@@ -20,4 +20,8 @@ speed_print = 60
speed_topbottom = =math.ceil(speed_print * 35 / 60)
speed_wall = =math.ceil(speed_print * 45 / 60)
speed_wall_0 = =math.ceil(speed_wall * 35 / 45)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_nylon_0.06mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_nylon_0.06mm.inst.cfg
index 39f3fd8686..f6be35a2ec 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_nylon_0.06mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_nylon_0.06mm.inst.cfg
@@ -14,7 +14,10 @@ weight = 1
[values]
ooze_shield_angle = 40
raft_airgap = 0.4
-retraction_prime_speed = =retraction_speed
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 30
switch_extruder_retraction_amount = 30
switch_extruder_retraction_speeds = 40
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_nylon_0.15mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_nylon_0.15mm.inst.cfg
index b834ac75bb..874bcc66f0 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_nylon_0.15mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_nylon_0.15mm.inst.cfg
@@ -15,7 +15,10 @@ weight = -1
material_print_temperature = =default_material_print_temperature + 5
ooze_shield_angle = 40
raft_airgap = 0.4
-retraction_prime_speed = =retraction_speed
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 30
switch_extruder_retraction_amount = 30
switch_extruder_retraction_speeds = 40
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_nylon_0.1mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_nylon_0.1mm.inst.cfg
index ea8f7837a2..89c3b6f361 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_nylon_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_nylon_0.1mm.inst.cfg
@@ -14,7 +14,10 @@ weight = 0
[values]
ooze_shield_angle = 40
raft_airgap = 0.4
-retraction_prime_speed = =retraction_speed
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 30
switch_extruder_retraction_amount = 30
switch_extruder_retraction_speeds = 40
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_nylon_0.2mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_nylon_0.2mm.inst.cfg
index 88b89d7a47..662aa9fb66 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_nylon_0.2mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_nylon_0.2mm.inst.cfg
@@ -15,7 +15,10 @@ weight = -2
material_print_temperature = =default_material_print_temperature + 10
ooze_shield_angle = 40
raft_airgap = 0.4
-retraction_prime_speed = =retraction_speed
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 30
switch_extruder_retraction_amount = 30
switch_extruder_retraction_speeds = 40
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_pc_0.06mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_pc_0.06mm.inst.cfg
index 046b9f6ce2..4e217f5cca 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_pc_0.06mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_pc_0.06mm.inst.cfg
@@ -31,7 +31,11 @@ speed_print = 50
speed_topbottom = =math.ceil(speed_print * 25 / 50)
speed_wall = =math.ceil(speed_print * 40 / 50)
speed_wall_0 = =math.ceil(speed_wall * 25 / 40)
+support_bottom_distance = =support_z_distance
support_interface_density = 87.5
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_pc_0.15mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_pc_0.15mm.inst.cfg
index c1d488bf5f..b5ec910404 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_pc_0.15mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_pc_0.15mm.inst.cfg
@@ -31,7 +31,11 @@ speed_print = 50
speed_topbottom = =math.ceil(speed_print * 25 / 50)
speed_wall = =math.ceil(speed_print * 40 / 50)
speed_wall_0 = =math.ceil(speed_wall * 25 / 40)
+support_bottom_distance = =support_z_distance
support_interface_density = 87.5
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_pc_0.1mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_pc_0.1mm.inst.cfg
index d2a3b67d4c..ff2159e522 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_pc_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_pc_0.1mm.inst.cfg
@@ -30,7 +30,11 @@ speed_print = 50
speed_topbottom = =math.ceil(speed_print * 25 / 50)
speed_wall = =math.ceil(speed_print * 40 / 50)
speed_wall_0 = =math.ceil(speed_wall * 25 / 40)
+support_bottom_distance = =support_z_distance
support_interface_density = 87.5
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_pc_0.2mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_pc_0.2mm.inst.cfg
index c95009797d..a524c5c040 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_pc_0.2mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_pc_0.2mm.inst.cfg
@@ -31,7 +31,11 @@ speed_print = 50
speed_topbottom = =math.ceil(speed_print * 25 / 50)
speed_wall = =math.ceil(speed_print * 40 / 50)
speed_wall_0 = =math.ceil(speed_wall * 25 / 40)
+support_bottom_distance = =support_z_distance
support_interface_density = 87.5
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_petg_0.06mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_petg_0.06mm.inst.cfg
index fdbdb811c1..adc4670e8d 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_petg_0.06mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_petg_0.06mm.inst.cfg
@@ -20,4 +20,8 @@ speed_infill = =math.ceil(speed_print * 40 / 50)
speed_print = 50
speed_topbottom = =math.ceil(speed_print * 30 / 50)
speed_wall = =math.ceil(speed_print * 30 / 50)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_petg_0.15mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_petg_0.15mm.inst.cfg
index d71148e5ce..3967838a12 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_petg_0.15mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_petg_0.15mm.inst.cfg
@@ -19,4 +19,8 @@ speed_print = 60
speed_topbottom = =math.ceil(speed_print * 30 / 60)
speed_wall = =math.ceil(speed_print * 40 / 60)
speed_wall_0 = =math.ceil(speed_wall * 30 / 40)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_petg_0.1mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_petg_0.1mm.inst.cfg
index 69f6059c00..7829f46334 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_petg_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_petg_0.1mm.inst.cfg
@@ -20,4 +20,8 @@ speed_infill = =math.ceil(speed_print * 45 / 55)
speed_print = 55
speed_topbottom = =math.ceil(speed_print * 30 / 55)
speed_wall = =math.ceil(speed_print * 30 / 55)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_petg_0.2mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_petg_0.2mm.inst.cfg
index 5291946ccd..db079b04c9 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_petg_0.2mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_petg_0.2mm.inst.cfg
@@ -19,4 +19,8 @@ speed_print = 60
speed_topbottom = =math.ceil(speed_print * 35 / 60)
speed_wall = =math.ceil(speed_print * 45 / 60)
speed_wall_0 = =math.ceil(speed_wall * 35 / 45)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_pla_0.06mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_pla_0.06mm.inst.cfg
index 6de3ad3edb..4b8f9f433b 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_pla_0.06mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_pla_0.06mm.inst.cfg
@@ -21,5 +21,9 @@ retraction_prime_speed = =retraction_speed
speed_print = 50
speed_topbottom = =math.ceil(speed_print * 35 / 50)
speed_wall = =math.ceil(speed_print * 35 / 50)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 1
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_pla_0.15mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_pla_0.15mm.inst.cfg
index f076447401..5581284de4 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_pla_0.15mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_pla_0.15mm.inst.cfg
@@ -21,5 +21,9 @@ speed_print = 70
speed_topbottom = =math.ceil(speed_print * 35 / 70)
speed_wall = =math.ceil(speed_print * 45 / 70)
speed_wall_0 = =math.ceil(speed_wall * 35 / 70)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 1
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_pla_0.1mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_pla_0.1mm.inst.cfg
index 40b7c5b843..30af138465 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_pla_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_pla_0.1mm.inst.cfg
@@ -17,5 +17,9 @@ machine_nozzle_heat_up_speed = 1.6
prime_tower_enable = False
raft_airgap = 0.25
retraction_prime_speed = =retraction_speed
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 1
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_pla_0.2mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_pla_0.2mm.inst.cfg
index 8452bce4a9..e5dc960d98 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_pla_0.2mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_pla_0.2mm.inst.cfg
@@ -24,5 +24,9 @@ retraction_prime_speed = =retraction_speed
speed_topbottom = =math.ceil(speed_print * 40 / 70)
speed_wall = =math.ceil(speed_print * 55 / 70)
speed_wall_0 = =math.ceil(speed_wall * 45 / 50)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 0.8
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_pla_0.3mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_pla_0.3mm.inst.cfg
index 98990f6fe0..719adc820b 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_pla_0.3mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_pla_0.3mm.inst.cfg
@@ -27,6 +27,10 @@ raft_airgap = 0.25
retraction_prime_speed = =retraction_speed
speed_print = 50
speed_wall = 50
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 0.9
wall_line_width_0 = =line_width * (1 + magic_spiralize * 0.25)
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_pp_0.15mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_pp_0.15mm.inst.cfg
index b2cbff9177..70d53dd331 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_pp_0.15mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_pp_0.15mm.inst.cfg
@@ -35,6 +35,10 @@ speed_topbottom = =math.ceil(speed_print * 25 / 25)
speed_wall = =math.ceil(speed_print * 25 / 25)
speed_wall_0 = =math.ceil(speed_wall * 25 / 25)
support_angle = 50
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_pp_0.1mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_pp_0.1mm.inst.cfg
index 309f646559..009039d972 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_pp_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_pp_0.1mm.inst.cfg
@@ -35,6 +35,10 @@ speed_topbottom = =math.ceil(speed_print * 25 / 25)
speed_wall = =math.ceil(speed_print * 25 / 25)
speed_wall_0 = =math.ceil(speed_wall * 25 / 25)
support_angle = 50
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_pp_0.2mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_pp_0.2mm.inst.cfg
index 234ec47e8f..9c2870b661 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_pp_0.2mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_pp_0.2mm.inst.cfg
@@ -35,6 +35,10 @@ speed_topbottom = =math.ceil(speed_print * 25 / 25)
speed_wall = =math.ceil(speed_print * 25 / 25)
speed_wall_0 = =math.ceil(speed_wall * 25 / 25)
support_angle = 50
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_tough-pla_0.06mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_tough-pla_0.06mm.inst.cfg
index 6268da9a9f..e091136b32 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_tough-pla_0.06mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_tough-pla_0.06mm.inst.cfg
@@ -21,5 +21,9 @@ speed_print = 45
speed_topbottom = =math.ceil(speed_print * 35 / 45)
speed_wall = =math.ceil(speed_print * 40 / 45)
speed_wall_0 = =math.ceil(speed_wall * 35 / 45)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 1.2
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_tough-pla_0.15mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_tough-pla_0.15mm.inst.cfg
index d94df8b8f3..450c82a0c2 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_tough-pla_0.15mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_tough-pla_0.15mm.inst.cfg
@@ -21,5 +21,9 @@ speed_print = 45
speed_topbottom = =math.ceil(speed_print * 35 / 45)
speed_wall = =math.ceil(speed_print * 40 / 45)
speed_wall_0 = =math.ceil(speed_wall * 35 / 45)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 1.2
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_tough-pla_0.1mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_tough-pla_0.1mm.inst.cfg
index cd358539bb..fa25ccb171 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_tough-pla_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_tough-pla_0.1mm.inst.cfg
@@ -21,5 +21,9 @@ speed_print = 45
speed_topbottom = =math.ceil(speed_print * 35 / 45)
speed_wall = =math.ceil(speed_print * 40 / 45)
speed_wall_0 = =math.ceil(speed_wall * 35 / 45)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 1.2
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_tough-pla_0.2mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_tough-pla_0.2mm.inst.cfg
index a0d698a327..fd3574f313 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_tough-pla_0.2mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_tough-pla_0.2mm.inst.cfg
@@ -22,5 +22,9 @@ speed_roofing = =math.ceil(speed_wall * 20 / 24)
speed_topbottom = =math.ceil(speed_print * 25 / 50)
speed_wall = =math.ceil(speed_print * 36 / 50)
speed_wall_0 = =math.ceil(speed_print * 26 / 50)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 1.2
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_tough-pla_0.3mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_tough-pla_0.3mm.inst.cfg
index e9e0c2fc7f..cbf086000e 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_tough-pla_0.3mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_tough-pla_0.3mm.inst.cfg
@@ -27,6 +27,10 @@ raft_airgap = 0.25
retraction_prime_speed = =retraction_speed
speed_print = 50
speed_wall = 50
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 1.2
wall_line_width_0 = =line_width * (1 + magic_spiralize * 0.25)
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_tpu_0.15mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_tpu_0.15mm.inst.cfg
index 18aaeb6470..c6e9fc00d1 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_tpu_0.15mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_tpu_0.15mm.inst.cfg
@@ -36,6 +36,10 @@ speed_topbottom = =math.ceil(speed_print * 0.8)
speed_wall = =math.ceil(speed_print * 25 / 25)
speed_wall_0 = =math.ceil(speed_wall * 25 / 25)
support_angle = 50
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_tpu_0.1mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_tpu_0.1mm.inst.cfg
index e8e7410cd5..043aa880ad 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_tpu_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_tpu_0.1mm.inst.cfg
@@ -35,6 +35,10 @@ speed_topbottom = =math.ceil(speed_print * 0.8)
speed_wall = =math.ceil(speed_print * 25 / 25)
speed_wall_0 = =math.ceil(speed_wall * 25 / 25)
support_angle = 50
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_tpu_0.2mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_tpu_0.2mm.inst.cfg
index e24ab778b5..0c8d7eb429 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_tpu_0.2mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_tpu_0.2mm.inst.cfg
@@ -36,6 +36,10 @@ speed_topbottom = =math.ceil(speed_print * 0.8)
speed_wall = =math.ceil(speed_print * 25 / 25)
speed_wall_0 = =math.ceil(speed_wall * 25 / 25)
support_angle = 50
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
diff --git a/resources/quality/ultimaker_s3/um_s3_cc0.4_petcf_0.15mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_cc0.4_petcf_0.15mm.inst.cfg
index 3dff641b42..fd25f84ca5 100644
--- a/resources/quality/ultimaker_s3/um_s3_cc0.4_petcf_0.15mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_cc0.4_petcf_0.15mm.inst.cfg
@@ -22,8 +22,9 @@ speed_topbottom = =speed_print
speed_wall = =speed_print
speed_wall_0 = =speed_wall
speed_wall_x = =speed_wall
-support_bottom_distance = =support_z_distance / 2
-support_top_distance = =support_z_distance / 2
-support_z_distance = =layer_height * 2
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 0.8
diff --git a/resources/quality/ultimaker_s3/um_s3_cc0.4_petcf_0.2mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_cc0.4_petcf_0.2mm.inst.cfg
index f9d1cb1295..ea26d6b146 100644
--- a/resources/quality/ultimaker_s3/um_s3_cc0.4_petcf_0.2mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_cc0.4_petcf_0.2mm.inst.cfg
@@ -22,8 +22,9 @@ speed_topbottom = =speed_print
speed_wall = =speed_print
speed_wall_0 = =speed_wall
speed_wall_x = =speed_wall
-support_bottom_distance = =support_z_distance / 2
-support_top_distance = =support_z_distance / 2
-support_z_distance = =layer_height * 2
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 0.8
diff --git a/resources/quality/ultimaker_s3/um_s3_cc0.6_petcf_0.15mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_cc0.6_petcf_0.15mm.inst.cfg
index 864e913a9c..b49ee3061e 100644
--- a/resources/quality/ultimaker_s3/um_s3_cc0.6_petcf_0.15mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_cc0.6_petcf_0.15mm.inst.cfg
@@ -22,8 +22,9 @@ speed_topbottom = =speed_print
speed_wall = =speed_print
speed_wall_0 = =speed_wall
speed_wall_x = =speed_wall
-support_bottom_distance = =support_z_distance / 2
-support_top_distance = =support_z_distance / 2
-support_z_distance = =layer_height * 2
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 1.2
diff --git a/resources/quality/ultimaker_s3/um_s3_cc0.6_petcf_0.2mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_cc0.6_petcf_0.2mm.inst.cfg
index 138b118073..db82d6e40e 100644
--- a/resources/quality/ultimaker_s3/um_s3_cc0.6_petcf_0.2mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_cc0.6_petcf_0.2mm.inst.cfg
@@ -22,8 +22,9 @@ speed_topbottom = =speed_print
speed_wall = =speed_print
speed_wall_0 = =speed_wall
speed_wall_x = =speed_wall
-support_bottom_distance = =support_z_distance / 2
-support_top_distance = =support_z_distance / 2
-support_z_distance = =layer_height * 2
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 1.2
diff --git a/resources/quality/ultimaker_s3/um_s3_cc0.6_petcf_0.3mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_cc0.6_petcf_0.3mm.inst.cfg
index 6f899afbbf..8e94df9387 100644
--- a/resources/quality/ultimaker_s3/um_s3_cc0.6_petcf_0.3mm.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_cc0.6_petcf_0.3mm.inst.cfg
@@ -22,8 +22,9 @@ speed_topbottom = =speed_print
speed_wall = =speed_print
speed_wall_0 = =speed_wall
speed_wall_x = =speed_wall
-support_bottom_distance = =support_z_distance / 2
-support_top_distance = =support_z_distance / 2
-support_z_distance = =layer_height * 2
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 1.2
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_abs_0.1mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_abs_0.1mm.inst.cfg
index ae9144728a..08053a4f6d 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.25_abs_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_abs_0.1mm.inst.cfg
@@ -13,4 +13,8 @@ weight = 0
[values]
speed_topbottom = =math.ceil(speed_print * 30 / 55)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_cpe_0.1mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_cpe_0.1mm.inst.cfg
index ba519667d0..ca39f8dc7a 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.25_cpe_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_cpe_0.1mm.inst.cfg
@@ -14,5 +14,9 @@ weight = 0
[values]
speed_infill = =math.ceil(speed_print * 40 / 55)
speed_topbottom = =math.ceil(speed_print * 30 / 55)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 0.8
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_nylon_0.1mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_nylon_0.1mm.inst.cfg
index 710701b22a..009628fd2e 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.25_nylon_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_nylon_0.1mm.inst.cfg
@@ -15,11 +15,15 @@ weight = 0
machine_nozzle_cool_down_speed = 0.9
machine_nozzle_heat_up_speed = 1.4
ooze_shield_angle = 40
-raft_airgap = 0.15
+raft_airgap = 0.4
retraction_min_travel = 5
speed_print = 70
speed_topbottom = =math.ceil(speed_print * 30 / 70)
speed_wall = =math.ceil(speed_print * 30 / 70)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 30
switch_extruder_retraction_amount = 30
switch_extruder_retraction_speeds = 40
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_pc_0.1mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_pc_0.1mm.inst.cfg
index f5a34415b4..eeffba5b98 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.25_pc_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_pc_0.1mm.inst.cfg
@@ -29,7 +29,11 @@ speed_print = 50
speed_topbottom = =math.ceil(speed_print * 25 / 50)
speed_wall = =math.ceil(speed_print * 40 / 50)
speed_wall_0 = =math.ceil(speed_wall * 25 / 40)
+support_bottom_distance = =support_z_distance
support_interface_density = 87.5
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_petg_0.1mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_petg_0.1mm.inst.cfg
index 7b41e45d1c..374ef26315 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.25_petg_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_petg_0.1mm.inst.cfg
@@ -15,5 +15,9 @@ weight = 0
material_print_temperature = =default_material_print_temperature - 5
speed_infill = =math.ceil(speed_print * 40 / 55)
speed_topbottom = =math.ceil(speed_print * 30 / 55)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 0.8
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_pla_0.1mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_pla_0.1mm.inst.cfg
index 199995e5a1..2b99c9acce 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.25_pla_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_pla_0.1mm.inst.cfg
@@ -21,6 +21,10 @@ retraction_hop = 0.2
speed_print = 30
speed_wall = =math.ceil(speed_print * 25 / 30)
speed_wall_0 = =math.ceil(speed_print * 20 / 30)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 0.72
travel_avoid_distance = 0.4
wall_0_inset = 0.015
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_pp_0.1mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_pp_0.1mm.inst.cfg
index 4b9d902b31..d38c036bcd 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.25_pp_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_pp_0.1mm.inst.cfg
@@ -34,6 +34,10 @@ speed_print = 25
speed_wall = =math.ceil(speed_print * 25 / 25)
speed_wall_0 = =math.ceil(speed_wall * 25 / 25)
support_angle = 50
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_tough-pla_0.1mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_tough-pla_0.1mm.inst.cfg
index 81d1d1f735..4f02a053b4 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.25_tough-pla_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_tough-pla_0.1mm.inst.cfg
@@ -21,6 +21,10 @@ speed_print = 30
speed_topbottom = =math.ceil(speed_print * 20 / 30)
speed_wall = =math.ceil(speed_print * 25 / 30)
speed_wall_0 = =math.ceil(speed_print * 20 / 30)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 0.72
wall_0_inset = 0.015
wall_0_wipe_dist = 0.25
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_abs_0.06mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_abs_0.06mm.inst.cfg
index 8ecbf19956..7694e37ba3 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_abs_0.06mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_abs_0.06mm.inst.cfg
@@ -22,4 +22,8 @@ speed_infill = =math.ceil(speed_print * 40 / 50)
speed_print = 50
speed_topbottom = =math.ceil(speed_print * 30 / 50)
speed_wall = =math.ceil(speed_print * 30 / 50)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_abs_0.15mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_abs_0.15mm.inst.cfg
index f576b20987..c27a4a1b57 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_abs_0.15mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_abs_0.15mm.inst.cfg
@@ -23,4 +23,8 @@ speed_print = 60
speed_topbottom = =math.ceil(speed_print * 30 / 60)
speed_wall = =math.ceil(speed_print * 40 / 60)
speed_wall_0 = =math.ceil(speed_wall * 30 / 40)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_abs_0.1mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_abs_0.1mm.inst.cfg
index 65e2cb0361..f19345a0fe 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_abs_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_abs_0.1mm.inst.cfg
@@ -22,4 +22,8 @@ speed_infill = =math.ceil(speed_print * 40 / 55)
speed_print = 55
speed_topbottom = =math.ceil(speed_print * 30 / 55)
speed_wall = =math.ceil(speed_print * 30 / 55)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_abs_0.2mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_abs_0.2mm.inst.cfg
index 337054f0de..03f67f9924 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_abs_0.2mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_abs_0.2mm.inst.cfg
@@ -23,4 +23,8 @@ speed_print = 60
speed_topbottom = =math.ceil(speed_print * 35 / 60)
speed_wall = =math.ceil(speed_print * 45 / 60)
speed_wall_0 = =math.ceil(speed_wall * 35 / 45)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe-plus_0.06mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe-plus_0.06mm.inst.cfg
index e95804af3a..72e6ead239 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe-plus_0.06mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe-plus_0.06mm.inst.cfg
@@ -28,6 +28,9 @@ speed_print = 40
speed_topbottom = =math.ceil(speed_print * 30 / 35)
speed_wall = =math.ceil(speed_print * 35 / 40)
speed_wall_0 = =math.ceil(speed_wall * 30 / 35)
-support_z_distance = =layer_height
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.4/layer_height)*layer_height
wall_0_inset = 0
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe-plus_0.15mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe-plus_0.15mm.inst.cfg
index ac1e50fd49..1a4e89f783 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe-plus_0.15mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe-plus_0.15mm.inst.cfg
@@ -26,6 +26,9 @@ speed_print = 45
speed_topbottom = =math.ceil(speed_print * 35 / 45)
speed_wall = =math.ceil(speed_print * 45 / 45)
speed_wall_0 = =math.ceil(speed_wall * 35 / 45)
-support_z_distance = =layer_height
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.4/layer_height)*layer_height
wall_0_inset = 0
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe-plus_0.1mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe-plus_0.1mm.inst.cfg
index 77ccf92459..6c2e7b2f94 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe-plus_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe-plus_0.1mm.inst.cfg
@@ -28,6 +28,9 @@ speed_print = 40
speed_topbottom = =math.ceil(speed_print * 30 / 35)
speed_wall = =math.ceil(speed_print * 35 / 40)
speed_wall_0 = =math.ceil(speed_wall * 30 / 35)
-support_z_distance = =layer_height
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.4/layer_height)*layer_height
wall_0_inset = 0
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe-plus_0.2mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe-plus_0.2mm.inst.cfg
index dde22bbd42..b2182320fd 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe-plus_0.2mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe-plus_0.2mm.inst.cfg
@@ -26,6 +26,9 @@ speed_print = 50
speed_topbottom = =math.ceil(speed_print * 40 / 50)
speed_wall = =math.ceil(speed_print * 50 / 50)
speed_wall_0 = =math.ceil(speed_wall * 40 / 50)
-support_z_distance = =layer_height
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.4/layer_height)*layer_height
wall_0_inset = 0
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe_0.06mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe_0.06mm.inst.cfg
index 5e96ec7e28..ab7fc5ef9b 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe_0.06mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe_0.06mm.inst.cfg
@@ -21,4 +21,8 @@ speed_infill = =math.ceil(speed_print * 40 / 50)
speed_print = 50
speed_topbottom = =math.ceil(speed_print * 30 / 50)
speed_wall = =math.ceil(speed_print * 30 / 50)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe_0.15mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe_0.15mm.inst.cfg
index ec4cef925d..7c27d79d2d 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe_0.15mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe_0.15mm.inst.cfg
@@ -20,4 +20,8 @@ speed_print = 60
speed_topbottom = =math.ceil(speed_print * 30 / 60)
speed_wall = =math.ceil(speed_print * 40 / 60)
speed_wall_0 = =math.ceil(speed_wall * 30 / 40)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe_0.1mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe_0.1mm.inst.cfg
index 2928127314..20c036907a 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe_0.1mm.inst.cfg
@@ -20,4 +20,8 @@ speed_infill = =math.ceil(speed_print * 45 / 55)
speed_print = 55
speed_topbottom = =math.ceil(speed_print * 30 / 55)
speed_wall = =math.ceil(speed_print * 30 / 55)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe_0.2mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe_0.2mm.inst.cfg
index af34967c61..b1094daf5a 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe_0.2mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_cpe_0.2mm.inst.cfg
@@ -20,4 +20,8 @@ speed_print = 60
speed_topbottom = =math.ceil(speed_print * 35 / 60)
speed_wall = =math.ceil(speed_print * 45 / 60)
speed_wall_0 = =math.ceil(speed_wall * 35 / 45)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_nylon_0.06mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_nylon_0.06mm.inst.cfg
index e243e33749..0abeb14221 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_nylon_0.06mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_nylon_0.06mm.inst.cfg
@@ -14,7 +14,10 @@ weight = 1
[values]
ooze_shield_angle = 40
raft_airgap = 0.4
-retraction_prime_speed = =retraction_speed
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 30
switch_extruder_retraction_amount = 30
switch_extruder_retraction_speeds = 40
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_nylon_0.15mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_nylon_0.15mm.inst.cfg
index 8833881fdf..94536f1904 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_nylon_0.15mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_nylon_0.15mm.inst.cfg
@@ -15,7 +15,10 @@ weight = -1
material_print_temperature = =default_material_print_temperature + 5
ooze_shield_angle = 40
raft_airgap = 0.4
-retraction_prime_speed = =retraction_speed
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 30
switch_extruder_retraction_amount = 30
switch_extruder_retraction_speeds = 40
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_nylon_0.1mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_nylon_0.1mm.inst.cfg
index 70f76a5266..f07d801dc0 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_nylon_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_nylon_0.1mm.inst.cfg
@@ -14,7 +14,10 @@ weight = 0
[values]
ooze_shield_angle = 40
raft_airgap = 0.4
-retraction_prime_speed = =retraction_speed
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 30
switch_extruder_retraction_amount = 30
switch_extruder_retraction_speeds = 40
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_nylon_0.2mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_nylon_0.2mm.inst.cfg
index 0f7b604b15..005ccf6e59 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_nylon_0.2mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_nylon_0.2mm.inst.cfg
@@ -15,7 +15,10 @@ weight = -2
material_print_temperature = =default_material_print_temperature + 10
ooze_shield_angle = 40
raft_airgap = 0.4
-retraction_prime_speed = =retraction_speed
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 30
switch_extruder_retraction_amount = 30
switch_extruder_retraction_speeds = 40
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_pc_0.06mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_pc_0.06mm.inst.cfg
index c19de26c93..a2e3bd792b 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_pc_0.06mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_pc_0.06mm.inst.cfg
@@ -31,7 +31,11 @@ speed_print = 50
speed_topbottom = =math.ceil(speed_print * 25 / 50)
speed_wall = =math.ceil(speed_print * 40 / 50)
speed_wall_0 = =math.ceil(speed_wall * 25 / 40)
+support_bottom_distance = =support_z_distance
support_interface_density = 87.5
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_pc_0.15mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_pc_0.15mm.inst.cfg
index b21da5f2e4..9ef073b635 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_pc_0.15mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_pc_0.15mm.inst.cfg
@@ -31,7 +31,11 @@ speed_print = 50
speed_topbottom = =math.ceil(speed_print * 25 / 50)
speed_wall = =math.ceil(speed_print * 40 / 50)
speed_wall_0 = =math.ceil(speed_wall * 25 / 40)
+support_bottom_distance = =support_z_distance
support_interface_density = 87.5
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_pc_0.1mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_pc_0.1mm.inst.cfg
index c99934288e..e118f0db8a 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_pc_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_pc_0.1mm.inst.cfg
@@ -30,7 +30,11 @@ speed_print = 50
speed_topbottom = =math.ceil(speed_print * 25 / 50)
speed_wall = =math.ceil(speed_print * 40 / 50)
speed_wall_0 = =math.ceil(speed_wall * 25 / 40)
+support_bottom_distance = =support_z_distance
support_interface_density = 87.5
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_pc_0.2mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_pc_0.2mm.inst.cfg
index 7eedf33df9..4351a289b9 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_pc_0.2mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_pc_0.2mm.inst.cfg
@@ -31,7 +31,11 @@ speed_print = 50
speed_topbottom = =math.ceil(speed_print * 25 / 50)
speed_wall = =math.ceil(speed_print * 40 / 50)
speed_wall_0 = =math.ceil(speed_wall * 25 / 40)
+support_bottom_distance = =support_z_distance
support_interface_density = 87.5
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_petg_0.06mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_petg_0.06mm.inst.cfg
index 8bebbf4113..6fe817fba1 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_petg_0.06mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_petg_0.06mm.inst.cfg
@@ -20,4 +20,8 @@ speed_infill = =math.ceil(speed_print * 40 / 50)
speed_print = 50
speed_topbottom = =math.ceil(speed_print * 30 / 50)
speed_wall = =math.ceil(speed_print * 30 / 50)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_petg_0.15mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_petg_0.15mm.inst.cfg
index ce957c1a50..060e9b3540 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_petg_0.15mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_petg_0.15mm.inst.cfg
@@ -19,4 +19,8 @@ speed_print = 60
speed_topbottom = =math.ceil(speed_print * 30 / 60)
speed_wall = =math.ceil(speed_print * 40 / 60)
speed_wall_0 = =math.ceil(speed_wall * 30 / 40)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_petg_0.1mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_petg_0.1mm.inst.cfg
index 4bba37dd01..1e04aad8ce 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_petg_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_petg_0.1mm.inst.cfg
@@ -20,4 +20,8 @@ speed_infill = =math.ceil(speed_print * 45 / 55)
speed_print = 55
speed_topbottom = =math.ceil(speed_print * 30 / 55)
speed_wall = =math.ceil(speed_print * 30 / 55)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_petg_0.2mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_petg_0.2mm.inst.cfg
index 6b7f2fba1a..aaf279f115 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_petg_0.2mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_petg_0.2mm.inst.cfg
@@ -19,4 +19,8 @@ speed_print = 60
speed_topbottom = =math.ceil(speed_print * 35 / 60)
speed_wall = =math.ceil(speed_print * 45 / 60)
speed_wall_0 = =math.ceil(speed_wall * 35 / 45)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_pla_0.06mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_pla_0.06mm.inst.cfg
index 5facf88970..f34549bc78 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_pla_0.06mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_pla_0.06mm.inst.cfg
@@ -21,5 +21,9 @@ retraction_prime_speed = =retraction_speed
speed_print = 50
speed_topbottom = =math.ceil(speed_print * 35 / 50)
speed_wall = =math.ceil(speed_print * 35 / 50)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 1
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_pla_0.15mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_pla_0.15mm.inst.cfg
index 262fa01441..4a9e914b99 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_pla_0.15mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_pla_0.15mm.inst.cfg
@@ -21,5 +21,9 @@ speed_print = 70
speed_topbottom = =math.ceil(speed_print * 35 / 70)
speed_wall = =math.ceil(speed_print * 45 / 70)
speed_wall_0 = =math.ceil(speed_wall * 35 / 70)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 1
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_pla_0.1mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_pla_0.1mm.inst.cfg
index b05f4fdd62..dc73f13bb5 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_pla_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_pla_0.1mm.inst.cfg
@@ -17,5 +17,9 @@ machine_nozzle_heat_up_speed = 1.6
prime_tower_enable = False
raft_airgap = 0.25
retraction_prime_speed = =retraction_speed
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 1
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_pla_0.2mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_pla_0.2mm.inst.cfg
index aea145b1f9..ead512bb50 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_pla_0.2mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_pla_0.2mm.inst.cfg
@@ -24,5 +24,9 @@ retraction_prime_speed = =retraction_speed
speed_topbottom = =math.ceil(speed_print * 40 / 70)
speed_wall = =math.ceil(speed_print * 55 / 70)
speed_wall_0 = =math.ceil(speed_wall * 45 / 50)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 0.8
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_pla_0.3mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_pla_0.3mm.inst.cfg
index 31d2b31017..c6641e7a08 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_pla_0.3mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_pla_0.3mm.inst.cfg
@@ -27,6 +27,10 @@ raft_airgap = 0.25
retraction_prime_speed = =retraction_speed
speed_print = 50
speed_wall = 50
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 0.9
wall_line_width_0 = =line_width * (1 + magic_spiralize * 0.25)
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_pp_0.15mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_pp_0.15mm.inst.cfg
index 318a14834f..9712132da9 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_pp_0.15mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_pp_0.15mm.inst.cfg
@@ -35,6 +35,10 @@ speed_topbottom = =math.ceil(speed_print * 25 / 25)
speed_wall = =math.ceil(speed_print * 25 / 25)
speed_wall_0 = =math.ceil(speed_wall * 25 / 25)
support_angle = 50
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_pp_0.1mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_pp_0.1mm.inst.cfg
index 1527a11fd0..79a0f11262 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_pp_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_pp_0.1mm.inst.cfg
@@ -35,6 +35,10 @@ speed_topbottom = =math.ceil(speed_print * 25 / 25)
speed_wall = =math.ceil(speed_print * 25 / 25)
speed_wall_0 = =math.ceil(speed_wall * 25 / 25)
support_angle = 50
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_pp_0.2mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_pp_0.2mm.inst.cfg
index 356fa2d4cb..70207475dc 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_pp_0.2mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_pp_0.2mm.inst.cfg
@@ -35,6 +35,10 @@ speed_topbottom = =math.ceil(speed_print * 25 / 25)
speed_wall = =math.ceil(speed_print * 25 / 25)
speed_wall_0 = =math.ceil(speed_wall * 25 / 25)
support_angle = 50
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_tough-pla_0.06mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_tough-pla_0.06mm.inst.cfg
index 5f63f533f7..f3e17318b6 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_tough-pla_0.06mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_tough-pla_0.06mm.inst.cfg
@@ -21,5 +21,9 @@ speed_print = 45
speed_topbottom = =math.ceil(speed_print * 35 / 45)
speed_wall = =math.ceil(speed_print * 40 / 45)
speed_wall_0 = =math.ceil(speed_wall * 35 / 45)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 1.2
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_tough-pla_0.15mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_tough-pla_0.15mm.inst.cfg
index bf64c24170..6a3ec605ad 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_tough-pla_0.15mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_tough-pla_0.15mm.inst.cfg
@@ -21,5 +21,9 @@ speed_print = 45
speed_topbottom = =math.ceil(speed_print * 35 / 45)
speed_wall = =math.ceil(speed_print * 40 / 45)
speed_wall_0 = =math.ceil(speed_wall * 35 / 45)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 1.2
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_tough-pla_0.1mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_tough-pla_0.1mm.inst.cfg
index 977232f4d4..9e3a3586f3 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_tough-pla_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_tough-pla_0.1mm.inst.cfg
@@ -21,5 +21,9 @@ speed_print = 45
speed_topbottom = =math.ceil(speed_print * 35 / 45)
speed_wall = =math.ceil(speed_print * 40 / 45)
speed_wall_0 = =math.ceil(speed_wall * 35 / 45)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 1.2
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_tough-pla_0.2mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_tough-pla_0.2mm.inst.cfg
index 8e904a41a5..506ed71f9a 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_tough-pla_0.2mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_tough-pla_0.2mm.inst.cfg
@@ -22,5 +22,9 @@ speed_roofing = =math.ceil(speed_wall * 20 / 24)
speed_topbottom = =math.ceil(speed_print * 25 / 50)
speed_wall = =math.ceil(speed_print * 36 / 50)
speed_wall_0 = =math.ceil(speed_print * 26 / 50)
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 1.2
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_tough-pla_0.3mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_tough-pla_0.3mm.inst.cfg
index 0ac60ad5a2..5590368369 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_tough-pla_0.3mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_tough-pla_0.3mm.inst.cfg
@@ -27,6 +27,10 @@ raft_airgap = 0.25
retraction_prime_speed = =retraction_speed
speed_print = 50
speed_wall = 50
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 1.2
wall_line_width_0 = =line_width * (1 + magic_spiralize * 0.25)
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_tpu_0.15mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_tpu_0.15mm.inst.cfg
index b641bdbe13..281d99afb1 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_tpu_0.15mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_tpu_0.15mm.inst.cfg
@@ -36,6 +36,10 @@ speed_topbottom = =math.ceil(speed_print * 0.8)
speed_wall = =math.ceil(speed_print * 25 / 25)
speed_wall_0 = =math.ceil(speed_wall * 25 / 25)
support_angle = 50
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_tpu_0.1mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_tpu_0.1mm.inst.cfg
index 9a4f7c61fd..450b9adeb4 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_tpu_0.1mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_tpu_0.1mm.inst.cfg
@@ -35,6 +35,10 @@ speed_topbottom = =math.ceil(speed_print * 0.8)
speed_wall = =math.ceil(speed_print * 25 / 25)
speed_wall_0 = =math.ceil(speed_wall * 25 / 25)
support_angle = 50
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_tpu_0.2mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_tpu_0.2mm.inst.cfg
index 3461b45736..21fbcff466 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_tpu_0.2mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_tpu_0.2mm.inst.cfg
@@ -36,6 +36,10 @@ speed_topbottom = =math.ceil(speed_print * 0.8)
speed_wall = =math.ceil(speed_print * 25 / 25)
speed_wall_0 = =math.ceil(speed_wall * 25 / 25)
support_angle = 50
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
diff --git a/resources/quality/ultimaker_s5/um_s5_cc0.4_petcf_0.15mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_cc0.4_petcf_0.15mm.inst.cfg
index 4921b87434..88ee346758 100644
--- a/resources/quality/ultimaker_s5/um_s5_cc0.4_petcf_0.15mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_cc0.4_petcf_0.15mm.inst.cfg
@@ -22,8 +22,9 @@ speed_topbottom = =speed_print
speed_wall = =speed_print
speed_wall_0 = =speed_wall
speed_wall_x = =speed_wall
-support_bottom_distance = =support_z_distance / 2
-support_top_distance = =support_z_distance / 2
-support_z_distance = =layer_height * 2
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 0.8
diff --git a/resources/quality/ultimaker_s5/um_s5_cc0.4_petcf_0.2mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_cc0.4_petcf_0.2mm.inst.cfg
index 2dde7772b6..00f9ef51ff 100644
--- a/resources/quality/ultimaker_s5/um_s5_cc0.4_petcf_0.2mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_cc0.4_petcf_0.2mm.inst.cfg
@@ -22,8 +22,9 @@ speed_topbottom = =speed_print
speed_wall = =speed_print
speed_wall_0 = =speed_wall
speed_wall_x = =speed_wall
-support_bottom_distance = =support_z_distance / 2
-support_top_distance = =support_z_distance / 2
-support_z_distance = =layer_height * 2
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 0.8
diff --git a/resources/quality/ultimaker_s5/um_s5_cc0.6_petcf_0.15mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_cc0.6_petcf_0.15mm.inst.cfg
index df11fcf377..c9a6a2bafe 100644
--- a/resources/quality/ultimaker_s5/um_s5_cc0.6_petcf_0.15mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_cc0.6_petcf_0.15mm.inst.cfg
@@ -22,8 +22,9 @@ speed_topbottom = =speed_print
speed_wall = =speed_print
speed_wall_0 = =speed_wall
speed_wall_x = =speed_wall
-support_bottom_distance = =support_z_distance / 2
-support_top_distance = =support_z_distance / 2
-support_z_distance = =layer_height * 2
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 1.2
diff --git a/resources/quality/ultimaker_s5/um_s5_cc0.6_petcf_0.2mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_cc0.6_petcf_0.2mm.inst.cfg
index 759f3ed41d..7abb9e4018 100644
--- a/resources/quality/ultimaker_s5/um_s5_cc0.6_petcf_0.2mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_cc0.6_petcf_0.2mm.inst.cfg
@@ -22,8 +22,9 @@ speed_topbottom = =speed_print
speed_wall = =speed_print
speed_wall_0 = =speed_wall
speed_wall_x = =speed_wall
-support_bottom_distance = =support_z_distance / 2
-support_top_distance = =support_z_distance / 2
-support_z_distance = =layer_height * 2
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 1.2
diff --git a/resources/quality/ultimaker_s5/um_s5_cc0.6_petcf_0.3mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_cc0.6_petcf_0.3mm.inst.cfg
index f18c0e018e..e0c6719bde 100644
--- a/resources/quality/ultimaker_s5/um_s5_cc0.6_petcf_0.3mm.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_cc0.6_petcf_0.3mm.inst.cfg
@@ -22,8 +22,9 @@ speed_topbottom = =speed_print
speed_wall = =speed_print
speed_wall_0 = =speed_wall
speed_wall_x = =speed_wall
-support_bottom_distance = =support_z_distance / 2
-support_top_distance = =support_z_distance / 2
-support_z_distance = =layer_height * 2
+support_bottom_distance = =support_z_distance
+support_interface_enable = True
+support_top_distance = =support_z_distance
+support_z_distance = =math.ceil(0.3/layer_height)*layer_height
top_bottom_thickness = 1.2
diff --git a/resources/setting_visibility/basic.cfg b/resources/setting_visibility/basic.cfg
index 927989fee3..0193eb26ba 100644
--- a/resources/setting_visibility/basic.cfg
+++ b/resources/setting_visibility/basic.cfg
@@ -45,6 +45,7 @@ support_extruder_nr
support_type
support_angle
support_offset
+support_structure
[platform_adhesion]
prime_blob_enable
diff --git a/resources/variants/creality/creality_ender5s1_0.2.inst.cfg b/resources/variants/creality/creality_ender5s1_0.2.inst.cfg
new file mode 100644
index 0000000000..bb3e5312ea
--- /dev/null
+++ b/resources/variants/creality/creality_ender5s1_0.2.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = creality_ender5s1
+name = 0.2mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 22
+type = variant
+
+[values]
+machine_nozzle_size = 0.2
+
diff --git a/resources/variants/creality/creality_ender5s1_0.3.inst.cfg b/resources/variants/creality/creality_ender5s1_0.3.inst.cfg
new file mode 100644
index 0000000000..f7aa3350bc
--- /dev/null
+++ b/resources/variants/creality/creality_ender5s1_0.3.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = creality_ender5s1
+name = 0.3mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 22
+type = variant
+
+[values]
+machine_nozzle_size = 0.3
+
diff --git a/resources/variants/renkforce/renkforce_pro10plus_0.4.inst.cfg b/resources/variants/creality/creality_ender5s1_0.4.inst.cfg
similarity index 81%
rename from resources/variants/renkforce/renkforce_pro10plus_0.4.inst.cfg
rename to resources/variants/creality/creality_ender5s1_0.4.inst.cfg
index aea6acc5e5..6e38f503fc 100644
--- a/resources/variants/renkforce/renkforce_pro10plus_0.4.inst.cfg
+++ b/resources/variants/creality/creality_ender5s1_0.4.inst.cfg
@@ -1,5 +1,5 @@
[general]
-definition = renkforce_pro10plus
+definition = creality_ender5s1
name = 0.4mm Nozzle
version = 4
diff --git a/resources/variants/creality/creality_ender5s1_0.5.inst.cfg b/resources/variants/creality/creality_ender5s1_0.5.inst.cfg
new file mode 100644
index 0000000000..cb2b684542
--- /dev/null
+++ b/resources/variants/creality/creality_ender5s1_0.5.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = creality_ender5s1
+name = 0.5mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 22
+type = variant
+
+[values]
+machine_nozzle_size = 0.5
+
diff --git a/resources/variants/renkforce/renkforce_pro10plus_0.6.inst.cfg b/resources/variants/creality/creality_ender5s1_0.6.inst.cfg
similarity index 81%
rename from resources/variants/renkforce/renkforce_pro10plus_0.6.inst.cfg
rename to resources/variants/creality/creality_ender5s1_0.6.inst.cfg
index 228ea98425..2c2d0480ff 100644
--- a/resources/variants/renkforce/renkforce_pro10plus_0.6.inst.cfg
+++ b/resources/variants/creality/creality_ender5s1_0.6.inst.cfg
@@ -1,5 +1,5 @@
[general]
-definition = renkforce_pro10plus
+definition = creality_ender5s1
name = 0.6mm Nozzle
version = 4
diff --git a/resources/variants/renkforce/renkforce_pro10plus_0.8.inst.cfg b/resources/variants/creality/creality_ender5s1_0.8.inst.cfg
similarity index 81%
rename from resources/variants/renkforce/renkforce_pro10plus_0.8.inst.cfg
rename to resources/variants/creality/creality_ender5s1_0.8.inst.cfg
index c7b037a84d..2e95f8e3d0 100644
--- a/resources/variants/renkforce/renkforce_pro10plus_0.8.inst.cfg
+++ b/resources/variants/creality/creality_ender5s1_0.8.inst.cfg
@@ -1,5 +1,5 @@
[general]
-definition = renkforce_pro10plus
+definition = creality_ender5s1
name = 0.8mm Nozzle
version = 4
diff --git a/resources/variants/renkforce/renkforce_pro10plus_1.0.inst.cfg b/resources/variants/creality/creality_ender5s1_1.0.inst.cfg
similarity index 81%
rename from resources/variants/renkforce/renkforce_pro10plus_1.0.inst.cfg
rename to resources/variants/creality/creality_ender5s1_1.0.inst.cfg
index 2c1e6194ed..48fba7a715 100644
--- a/resources/variants/renkforce/renkforce_pro10plus_1.0.inst.cfg
+++ b/resources/variants/creality/creality_ender5s1_1.0.inst.cfg
@@ -1,5 +1,5 @@
[general]
-definition = renkforce_pro10plus
+definition = creality_ender5s1
name = 1.0mm Nozzle
version = 4
diff --git a/resources/variants/voron/voron_trident_250_0.25.inst.cfg b/resources/variants/voron/voron_trident_250_0.25.inst.cfg
new file mode 100644
index 0000000000..2ba2351c56
--- /dev/null
+++ b/resources/variants/voron/voron_trident_250_0.25.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = voron_trident_250
+name = V6 0.25mm
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 22
+type = variant
+
+[values]
+machine_nozzle_size = 0.25
+
diff --git a/resources/variants/voron/voron_trident_250_0.50.inst.cfg b/resources/variants/voron/voron_trident_250_0.50.inst.cfg
new file mode 100644
index 0000000000..deae0b748c
--- /dev/null
+++ b/resources/variants/voron/voron_trident_250_0.50.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = voron_trident_250
+name = V6 0.50mm
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 22
+type = variant
+
+[values]
+machine_nozzle_size = 0.5
+
diff --git a/resources/variants/voron/voron_trident_300_0.25.inst.cfg b/resources/variants/voron/voron_trident_300_0.25.inst.cfg
new file mode 100644
index 0000000000..99b00d7683
--- /dev/null
+++ b/resources/variants/voron/voron_trident_300_0.25.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = voron_trident_300
+name = V6 0.25mm
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 22
+type = variant
+
+[values]
+machine_nozzle_size = 0.25
+
diff --git a/resources/variants/voron/voron_trident_300_0.50.inst.cfg b/resources/variants/voron/voron_trident_300_0.50.inst.cfg
new file mode 100644
index 0000000000..5a9bde2f79
--- /dev/null
+++ b/resources/variants/voron/voron_trident_300_0.50.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = voron_trident_300
+name = V6 0.50mm
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 22
+type = variant
+
+[values]
+machine_nozzle_size = 0.5
+
diff --git a/resources/variants/voron/voron_trident_350_0.25.inst.cfg b/resources/variants/voron/voron_trident_350_0.25.inst.cfg
new file mode 100644
index 0000000000..8d124cca03
--- /dev/null
+++ b/resources/variants/voron/voron_trident_350_0.25.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = voron_trident_350
+name = V6 0.25mm
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 22
+type = variant
+
+[values]
+machine_nozzle_size = 0.25
+
diff --git a/resources/variants/voron/voron_trident_350_0.50.inst.cfg b/resources/variants/voron/voron_trident_350_0.50.inst.cfg
new file mode 100644
index 0000000000..896a12aee7
--- /dev/null
+++ b/resources/variants/voron/voron_trident_350_0.50.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = voron_trident_350
+name = V6 0.50mm
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 22
+type = variant
+
+[values]
+machine_nozzle_size = 0.5
+