diff --git a/.github/ISSUE_TEMPLATE/SlicingCrash.yaml b/.github/ISSUE_TEMPLATE/SlicingCrash.yaml index 2fe0a2f63b..f4e082e00a 100644 --- a/.github/ISSUE_TEMPLATE/SlicingCrash.yaml +++ b/.github/ISSUE_TEMPLATE/SlicingCrash.yaml @@ -4,7 +4,14 @@ labels: ["Type: Bug", "Status: Triage", "Slicing Error :collision:"] body: - type: markdown attributes: - value: | + value: | + ### 💥 Slicing Crash Analysis Tool 💥 + We are taking steps to analyze an increase in reported crashes more systematically. We'll need some help with that. 😇 + Before filling out the report below, we want you to try a special Cura 5.7 Alpha. + This version of Cura has an updated slicing engine that will automatically send a report to the Cura Team for analysis. + #### [You can find the downloads here](https://github.com/Ultimaker/Cura/discussions/18080) #### + If you still encounter a crash you are still welcome to report the issue so we can use your model as a test case, you can find instructions on how to do that below. + ### Project File **⚠️ Before you continue, we need your project file to troubleshoot a slicing crash.** It contains the printer and settings we need for troubleshooting. @@ -68,4 +75,3 @@ body: description: You can add the zip file and additional information that is relevant to the issue in the comments below. validations: required: true - diff --git a/.github/workflows/conan-package.yml b/.github/workflows/conan-package.yml index 7ca2b0c467..8faf1e27e1 100644 --- a/.github/workflows/conan-package.yml +++ b/.github/workflows/conan-package.yml @@ -20,12 +20,8 @@ on: - 'main' - 'CURA-*' - 'PP-*' - - '[0-9].[0-9]' - - '[0-9].[0-9][0-9]' - tags: - - '[0-9].[0-9].[0-9]*' - - '[0-9].[0-9].[0-9]' - - '[0-9].[0-9][0-9].[0-9]*' + - '[0-9].[0-9]*' + - '[0-9].[0-9][0-9]*' env: CONAN_LOGIN_USERNAME_CURA: ${{ secrets.CONAN_USER }} @@ -44,3 +40,11 @@ jobs: recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} recipe_id_latest: ${{ needs.conan-recipe-version.outputs.recipe_id_latest }} secrets: inherit + + conan-package-create: + needs: [ conan-recipe-version, conan-package-export ] + uses: ultimaker/cura-workflows/.github/workflows/conan-package-create-linux.yml@main + with: + recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} + conan_extra_args: "-o cura:enable_i18n=True" + secrets: inherit \ No newline at end of file diff --git a/.github/workflows/installers.yml b/.github/workflows/installers.yml index 6e531ba833..f1bd4b2d19 100644 --- a/.github/workflows/installers.yml +++ b/.github/workflows/installers.yml @@ -58,7 +58,7 @@ jobs: enterprise: ${{ github.event.inputs.enterprise == 'true' }} staging: ${{ github.event.inputs.staging == 'true' }} architecture: X64 - operating_system: windows-2022 + operating_system: self-hosted-Windows-X64 secrets: inherit linux-installer: diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index f88b77a022..08c59c9158 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -39,19 +39,14 @@ on: options: - ubuntu-22.04 -env: - CONAN_ARGS: ${{ inputs.conan_args || '' }} - ENTERPRISE: ${{ inputs.enterprise || false }} - STAGING: ${{ inputs.staging || false }} - jobs: - installer: + linux-installer: uses: ultimaker/cura-workflows/.github/workflows/cura-installer-linux.yml@main with: cura_conan_version: ${{ inputs.cura_conan_version }} conan_args: ${{ inputs.conan_args }} - enterprise: ${{ inputs.enterprise == 'true' }} - staging: ${{ inputs.staging == 'true' }} + enterprise: ${{ inputs.enterprise }} + staging: ${{ inputs.staging }} architecture: ${{ inputs.architecture }} operating_system: ${{ inputs.operating_system }} secrets: inherit \ No newline at end of file diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index e909b9f839..9c940330e1 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -43,19 +43,14 @@ on: - macos-11 - macos-12 -env: - CONAN_ARGS: ${{ inputs.conan_args || '' }} - ENTERPRISE: ${{ inputs.enterprise || false }} - STAGING: ${{ inputs.staging || false }} - jobs: - installer: + macos-installer: uses: ultimaker/cura-workflows/.github/workflows/cura-installer-macos.yml@main with: cura_conan_version: ${{ inputs.cura_conan_version }} conan_args: ${{ inputs.conan_args }} - enterprise: ${{ inputs.enterprise == 'true' }} - staging: ${{ inputs.staging == 'true' }} + enterprise: ${{ inputs.enterprise }} + staging: ${{ inputs.staging }} architecture: ${{ inputs.architecture }} operating_system: ${{ inputs.operating_system }} secrets: inherit \ No newline at end of file diff --git a/.github/workflows/unit-test-post.yml b/.github/workflows/unit-test-post.yml index eaf69692a7..a8e9f26b8b 100644 --- a/.github/workflows/unit-test-post.yml +++ b/.github/workflows/unit-test-post.yml @@ -11,3 +11,4 @@ jobs: with: event: ${{ github.event.workflow_run.event }} conclusion: ${{ github.event.workflow_run.conclusion }} + secrets: inherit diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 7c6910b39f..2165540889 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -55,7 +55,8 @@ jobs: needs: [ conan-recipe-version ] with: recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} - conan_extra_args: '-g VirtualPythonEnv -o cura:devtools=True -c tools.build:skip_test=False' + conan_extra_args: '-g VirtualPythonEnv -o cura:devtools=True -c tools.build:skip_test=False --options "*:enable_sentry=False"' unit_test_cmd: 'pytest --junitxml=junit_cura.xml' unit_test_dir: 'tests' - conan_generator_dir: './venv/bin' \ No newline at end of file + conan_generator_dir: './venv/bin' + secrets: inherit \ No newline at end of file diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 151935c3f3..09f972bb1a 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -34,24 +34,20 @@ on: operating_system: description: 'OS' required: true - default: 'windows-2022' + default: 'self-hosted-Windows-X64' type: choice options: + - self-hosted-Windows-X64 - windows-2022 -env: - CONAN_ARGS: ${{ inputs.conan_args || '' }} - ENTERPRISE: ${{ inputs.enterprise || false }} - STAGING: ${{ inputs.staging || false }} - jobs: - installer: + windows-installer: uses: ultimaker/cura-workflows/.github/workflows/cura-installer-windows.yml@main with: cura_conan_version: ${{ inputs.cura_conan_version }} conan_args: ${{ inputs.conan_args }} - enterprise: ${{ inputs.enterprise == 'true' }} - staging: ${{ inputs.staging == 'true' }} + enterprise: ${{ inputs.enterprise }} + staging: ${{ inputs.staging }} architecture: ${{ inputs.architecture }} operating_system: ${{ inputs.operating_system }} secrets: inherit \ No newline at end of file diff --git a/UltiMaker-Cura.spec.jinja b/UltiMaker-Cura.spec.jinja index cd939cf736..2dce96282e 100644 --- a/UltiMaker-Cura.spec.jinja +++ b/UltiMaker-Cura.spec.jinja @@ -55,7 +55,8 @@ exe = EXE( target_arch={{ target_arch }}, codesign_identity=os.getenv('CODESIGN_IDENTITY', None), entitlements_file={{ entitlements_file }}, - icon={{ icon }} + icon={{ icon }}, + contents_directory='.' ) coll = COLLECT( @@ -70,188 +71,7 @@ coll = COLLECT( ) {% if macos == true %} -# PyInstaller seems to copy everything in the resource folder for the MacOS, this causes issues with codesigning and notarizing -# The folder structure should adhere to the one specified in Table 2-5 -# https://developer.apple.com/library/archive/documentation/CoreFoundation/Conceptual/CFBundles/BundleTypes/BundleTypes.html#//apple_ref/doc/uid/10000123i-CH101-SW1 -# The class below is basically ducktyping the BUNDLE class of PyInstaller and using our own `assemble` method for more fine-grain and specific -# control. Some code of the method below is copied from: -# https://github.com/pyinstaller/pyinstaller/blob/22d1d2a5378228744cc95f14904dae1664df32c4/PyInstaller/building/osx.py#L115 -#----------------------------------------------------------------------------- -# Copyright (c) 2005-2022, PyInstaller Development Team. -# -# Distributed under the terms of the GNU General Public License (version 2 -# or later) with exception for distributing the bootloader. -# -# The full license is in the file COPYING.txt, distributed with this software. -# -# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception) -#----------------------------------------------------------------------------- - -import plistlib -import shutil -import PyInstaller.utils.osx as osxutils -from pathlib import Path -from PyInstaller.building.osx import BUNDLE -from PyInstaller.building.utils import (_check_path_overlap, _rmtree, add_suffix_to_extension, checkCache) -from PyInstaller.building.datastruct import logger -from PyInstaller.building.icon import normalize_icon_type - - -class UMBUNDLE(BUNDLE): - def assemble(self): - from PyInstaller.config import CONF - - if _check_path_overlap(self.name) and os.path.isdir(self.name): - _rmtree(self.name) - logger.info("Building BUNDLE %s", self.tocbasename) - - # Create a minimal Mac bundle structure. - macos_path = Path(self.name, "Contents", "MacOS") - resources_path = Path(self.name, "Contents", "Resources") - frameworks_path = Path(self.name, "Contents", "Frameworks") - os.makedirs(macos_path) - os.makedirs(resources_path) - os.makedirs(frameworks_path) - - # Makes sure the icon exists and attempts to convert to the proper format if applicable - self.icon = normalize_icon_type(self.icon, ("icns",), "icns", CONF["workpath"]) - - # Ensure icon path is absolute - self.icon = os.path.abspath(self.icon) - - # Copy icns icon to Resources directory. - shutil.copy(self.icon, os.path.join(self.name, 'Contents', 'Resources')) - - # Key/values for a minimal Info.plist file - info_plist_dict = { - "CFBundleDisplayName": self.appname, - "CFBundleName": self.appname, - - # Required by 'codesign' utility. - # The value for CFBundleIdentifier is used as the default unique name of your program for Code Signing - # purposes. It even identifies the APP for access to restricted OS X areas like Keychain. - # - # The identifier used for signing must be globally unique. The usual form for this identifier is a - # hierarchical name in reverse DNS notation, starting with the toplevel domain, followed by the company - # name, followed by the department within the company, and ending with the product name. Usually in the - # form: com.mycompany.department.appname - # CLI option --osx-bundle-identifier sets this value. - "CFBundleIdentifier": self.bundle_identifier, - "CFBundleExecutable": os.path.basename(self.exename), - "CFBundleIconFile": os.path.basename(self.icon), - "CFBundleInfoDictionaryVersion": "6.0", - "CFBundlePackageType": "APPL", - "CFBundleVersionString": self.version, - "CFBundleShortVersionString": self.version, - } - - # Set some default values. But they still can be overwritten by the user. - if self.console: - # Setting EXE console=True implies LSBackgroundOnly=True. - info_plist_dict['LSBackgroundOnly'] = True - else: - # Let's use high resolution by default. - info_plist_dict['NSHighResolutionCapable'] = True - - # Merge info_plist settings from spec file - if isinstance(self.info_plist, dict) and self.info_plist: - info_plist_dict.update(self.info_plist) - - plist_filename = os.path.join(self.name, "Contents", "Info.plist") - with open(plist_filename, "wb") as plist_fh: - plistlib.dump(info_plist_dict, plist_fh) - - links = [] - _QT_BASE_PATH = {'PySide2', 'PySide6', 'PyQt5', 'PyQt6', 'PySide6'} - for inm, fnm, typ in self.toc: - # Adjust name for extensions, if applicable - inm, fnm, typ = add_suffix_to_extension(inm, fnm, typ) - inm = Path(inm) - fnm = Path(fnm) - # Copy files from cache. This ensures that are used files with relative paths to dynamic library - # dependencies (@executable_path) - if typ in ('EXTENSION', 'BINARY') or (typ == 'DATA' and inm.suffix == '.so'): - if any(['.' in p for p in inm.parent.parts]): - inm = Path(inm.name) - fnm = Path(checkCache( - str(fnm), - strip = self.strip, - upx = self.upx, - upx_exclude = self.upx_exclude, - dist_nm = str(inm), - target_arch = self.target_arch, - codesign_identity = self.codesign_identity, - entitlements_file = self.entitlements_file, - strict_arch_validation = (typ == 'EXTENSION'), - )) - frame_dst = frameworks_path.joinpath(inm) - if not frame_dst.exists(): - if frame_dst.is_dir(): - os.makedirs(frame_dst, exist_ok = True) - else: - os.makedirs(frame_dst.parent, exist_ok = True) - shutil.copy(fnm, frame_dst, follow_symlinks = True) - macos_dst = macos_path.joinpath(inm) - if not macos_dst.exists(): - if macos_dst.is_dir(): - os.makedirs(macos_dst, exist_ok = True) - else: - os.makedirs(macos_dst.parent, exist_ok = True) - - # Create relative symlink to the framework - symlink_to = Path(*[".." for p in macos_dst.relative_to(macos_path).parts], "Frameworks").joinpath( - frame_dst.relative_to(frameworks_path)) - try: - macos_dst.symlink_to(symlink_to) - except FileExistsError: - pass - else: - if typ == 'DATA': - if any(['.' in p for p in inm.parent.parts]) or inm.suffix == '.so': - # Skip info dist egg and some not needed folders in tcl and tk, since they all contain dots in their files - logger.warning(f"Skipping DATA file {inm}") - continue - res_dst = resources_path.joinpath(inm) - if not res_dst.exists(): - if res_dst.is_dir(): - os.makedirs(res_dst, exist_ok = True) - else: - os.makedirs(res_dst.parent, exist_ok = True) - shutil.copy(fnm, res_dst, follow_symlinks = True) - macos_dst = macos_path.joinpath(inm) - if not macos_dst.exists(): - if macos_dst.is_dir(): - os.makedirs(macos_dst, exist_ok = True) - else: - os.makedirs(macos_dst.parent, exist_ok = True) - - # Create relative symlink to the resource - symlink_to = Path(*[".." for p in macos_dst.relative_to(macos_path).parts], "Resources").joinpath( - res_dst.relative_to(resources_path)) - try: - macos_dst.symlink_to(symlink_to) - except FileExistsError: - pass - else: - macos_dst = macos_path.joinpath(inm) - if not macos_dst.exists(): - if macos_dst.is_dir(): - os.makedirs(macos_dst, exist_ok = True) - else: - os.makedirs(macos_dst.parent, exist_ok = True) - shutil.copy(fnm, macos_dst, follow_symlinks = True) - - # Sign the bundle - logger.info('Signing the BUNDLE...') - try: - osxutils.sign_binary(self.name, self.codesign_identity, self.entitlements_file, deep = True) - except Exception as e: - logger.warning(f"Error while signing the bundle: {e}") - logger.warning("You will need to sign the bundle manually!") - - logger.info(f"Building BUNDLE {self.tocbasename} completed successfully.") - -app = UMBUNDLE( +app = BUNDLE( coll, name='{{ display_name }}.app', icon={{ icon }}, @@ -271,9 +91,10 @@ app = UMBUNDLE( 'CFBundleURLSchemes': ['cura', 'slicer'], }], 'CFBundleDocumentTypes': [{ - 'CFBundleTypeRole': 'Viewer', - 'CFBundleTypeExtensions': ['*'], - 'CFBundleTypeName': 'Model Files', - }] - }, -){% endif %} + 'CFBundleTypeRole': 'Viewer', + 'CFBundleTypeExtensions': ['stl', 'obj', '3mf', 'gcode', 'ufp'], + 'CFBundleTypeName': 'Model Files', + }] + }, +) +{% endif %} diff --git a/conandata.yml b/conandata.yml index a0a5a204ca..51a44c152d 100644 --- a/conandata.yml +++ b/conandata.yml @@ -1,12 +1,11 @@ -version: "5.7.0-alpha.0" +version: "5.7.0-alpha.1" requirements: - "uranium/(latest)@ultimaker/testing" - "curaengine/(latest)@ultimaker/testing" - "cura_binary_data/(latest)@ultimaker/testing" - "fdm_materials/(latest)@ultimaker/testing" - - "curaengine_plugin_gradual_flow/(latest)@ultimaker/stable" + - "curaengine_plugin_gradual_flow/0.1.0-beta.2" - "dulcificum/latest@ultimaker/testing" - - "pyarcus/5.3.0" - "pysavitar/5.3.0" - "pynest2d/5.3.0" - "curaengine_grpc_definitions/(latest)@ultimaker/testing" @@ -119,7 +118,6 @@ pyinstaller: - "sqlite3" - "trimesh" - "win32ctypes" - - "PyQt6" - "PyQt6.QtNetwork" - "PyQt6.sip" - "stl" @@ -161,6 +159,10 @@ pycharm_targets: module_name: Cura name: pytest in TestGCodeListDecorator.py script_name: tests/TestGCodeListDecorator.py + - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja + module_name: Cura + name: pytest in TestHitChecker.py + script_name: tests/TestHitChecker.py - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja module_name: Cura name: pytest in TestIntentManager.py @@ -189,6 +191,10 @@ pycharm_targets: module_name: Cura name: pytest in TestPrintInformation.py script_name: tests/TestPrintInformation.py + - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja + module_name: Cura + name: pytest in TestPrintOrderManager.py + script_name: tests/TestPrintOrderManager.py - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja module_name: Cura name: pytest in TestProfileRequirements.py diff --git a/conanfile.py b/conanfile.py index a3ca8f1c89..ca6b4eabd0 100644 --- a/conanfile.py +++ b/conanfile.py @@ -1,4 +1,5 @@ import os +from io import StringIO from pathlib import Path from jinja2 import Template @@ -150,6 +151,7 @@ class CuraConan(ConanFile): return "None" def _conan_installs(self): + self.output.info("Collecting conan installs") conan_installs = {} # list of conan installs @@ -161,13 +163,22 @@ class CuraConan(ConanFile): return conan_installs def _python_installs(self): + self.output.info("Collecting python installs") python_installs = {} # list of python installs - python_ins_cmd = f"python -c \"import pkg_resources; print(';'.join([(s.key+','+ s.version) for s in pkg_resources.working_set]))\"" - from six import StringIO + run_env = VirtualRunEnv(self) + env = run_env.environment() + env.prepend_path("PYTHONPATH", str(self._site_packages.as_posix())) + venv_vars = env.vars(self, scope = "run") + + outer = '"' if self.settings.os == "Windows" else "'" + inner = "'" if self.settings.os == "Windows" else '"' buffer = StringIO() - self.run(python_ins_cmd, run_environment= True, env = "conanrun", output=buffer) + with venv_vars.apply(): + self.run(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}""", + env = "conanrun", + output = buffer) packages = str(buffer.getvalue()).split("-----------------\n") packages = packages[1].strip('\r\n').split(";") @@ -242,7 +253,7 @@ class CuraConan(ConanFile): self.output.warning(f"Source path for binary {binary['binary']} does not exist") continue - for bin in Path(src_path).glob(binary["binary"] + "*[.exe|.dll|.so|.dylib|.so.|.pdb]*"): + for bin in Path(src_path).glob(binary["binary"] + "*[.exe|.dll|.so|.dylib|.so.]*"): binaries.append((str(bin), binary["dst"])) for bin in Path(src_path).glob(binary["binary"]): binaries.append((str(bin), binary["dst"])) @@ -320,6 +331,8 @@ class CuraConan(ConanFile): self.options["openssl"].shared = True if self.conf.get("user.curaengine:sentry_url", "", check_type=str) != "": self.options["curaengine"].enable_sentry = True + self.options["arcus"].enable_sentry = True + self.options["clipper"].enable_sentry = True def validate(self): version = self.conf.get("user.cura:version", default = self.version, check_type = str) @@ -335,7 +348,9 @@ class CuraConan(ConanFile): for req in self.conan_data["requirements_internal"]: self.requires(req) self.requires("cpython/3.10.4@ultimaker/stable") + self.requires("clipper/6.4.2@ultimaker/stable") self.requires("openssl/3.2.0") + self.requires("protobuf/3.21.12") self.requires("boost/1.82.0") self.requires("spdlog/1.12.0") self.requires("fmt/10.1.1") @@ -417,7 +432,6 @@ class CuraConan(ConanFile): ) if self.options.get_safe("enable_i18n", False) and self._i18n_options["extract"]: - # Update the po and pot files vb = VirtualBuildEnv(self) vb.generate() @@ -502,10 +516,14 @@ echo "CURA_APP_NAME={{ cura_app_name }}" >> ${{ env_prefix }}GITHUB_ENV if self.in_local_cache: self.runenv_info.append_path("PYTHONPATH", os.path.join(self.package_folder, "site-packages")) + self.env_info.PYTHONPATH.append(os.path.join(self.package_folder, "site-packages")) self.runenv_info.append_path("PYTHONPATH", os.path.join(self.package_folder, "plugins")) + self.env_info.PYTHONPATH.append(os.path.join(self.package_folder, "plugins")) else: self.runenv_info.append_path("PYTHONPATH", self.source_folder) + self.env_info.PYTHONPATH.append(self.source_folder) self.runenv_info.append_path("PYTHONPATH", os.path.join(self.source_folder, "plugins")) + self.env_info.PYTHONPATH.append(os.path.join(self.source_folder, "plugins")) def package_id(self): self.info.clear() @@ -518,7 +536,8 @@ echo "CURA_APP_NAME={{ cura_app_name }}" >> ${{ env_prefix }}GITHUB_ENV del self.info.options.cloud_api_version del self.info.options.display_name del self.info.options.cura_debug_mode - self.options.rm_safe("enable_i18n") + if self.options.get_safe("enable_i18n", False): + del self.info.options.enable_i18n # TODO: Use the hash of requirements.txt and requirements-ultimaker.txt, Because changing these will actually result in a different # Cura. This is needed because the requirements.txt aren't managed by Conan and therefor not resolved in the package_id. This isn't diff --git a/cura/CuraActions.py b/cura/CuraActions.py index 9a61a1c4f0..e33ce8123d 100644 --- a/cura/CuraActions.py +++ b/cura/CuraActions.py @@ -3,10 +3,11 @@ from typing import List, cast -from PyQt6.QtCore import QObject, QUrl, QMimeData +from PyQt6.QtCore import QObject, QUrl, pyqtSignal, pyqtProperty from PyQt6.QtGui import QDesktopServices from PyQt6.QtWidgets import QApplication +from UM.Application import Application from UM.Event import CallFunctionEvent from UM.FlameProfiler import pyqtSlot from UM.Math.Vector import Vector @@ -37,6 +38,10 @@ class CuraActions(QObject): def __init__(self, parent: QObject = None) -> None: super().__init__(parent) + self._operation_stack = Application.getInstance().getOperationStack() + self._operation_stack.changed.connect(self._onUndoStackChanged) + + undoStackChanged = pyqtSignal() @pyqtSlot() def openDocumentation(self) -> None: # Starting a web browser from a signal handler connected to a menu will crash on windows. @@ -45,6 +50,25 @@ class CuraActions(QObject): event = CallFunctionEvent(self._openUrl, [QUrl("https://ultimaker.com/en/resources/manuals/software?utm_source=cura&utm_medium=software&utm_campaign=dropdown-documentation")], {}) cura.CuraApplication.CuraApplication.getInstance().functionEvent(event) + @pyqtProperty(bool, notify=undoStackChanged) + def canUndo(self): + return self._operation_stack.canUndo() + + @pyqtProperty(bool, notify=undoStackChanged) + def canRedo(self): + return self._operation_stack.canRedo() + + @pyqtSlot() + def undo(self): + self._operation_stack.undo() + + @pyqtSlot() + def redo(self): + self._operation_stack.redo() + + def _onUndoStackChanged(self): + self.undoStackChanged.emit() + @pyqtSlot() def openBugReportPage(self) -> None: event = CallFunctionEvent(self._openUrl, [QUrl("https://github.com/Ultimaker/Cura/issues/new/choose")], {}) @@ -249,7 +273,11 @@ class CuraActions(QObject): # deselect currently selected nodes, and select the new nodes for node in Selection.getAllSelectedObjects(): Selection.remove(node) + + numberOfFixedNodes = len(fixed_nodes) for node in nodes: + numberOfFixedNodes += 1 + node.printOrder = numberOfFixedNodes Selection.add(node) def _openUrl(self, url: QUrl) -> None: diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 1ef2f63a9e..c32017371f 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -15,13 +15,13 @@ import numpy from PyQt6.QtCore import QObject, QTimer, QUrl, QUrlQuery, pyqtSignal, pyqtProperty, QEvent, pyqtEnum, QCoreApplication, \ QByteArray from PyQt6.QtGui import QColor, QIcon -from PyQt6.QtQml import qmlRegisterUncreatableType, qmlRegisterUncreatableMetaObject, qmlRegisterSingletonType, qmlRegisterType +from PyQt6.QtQml import qmlRegisterUncreatableMetaObject, qmlRegisterSingletonType, qmlRegisterType from PyQt6.QtWidgets import QMessageBox import UM.Util import cura.Settings.cura_empty_instance_containers from UM.Application import Application -from UM.Decorators import override +from UM.Decorators import override, deprecated from UM.FlameProfiler import pyqtSlot from UM.Logger import Logger from UM.Math.AxisAlignedBox import AxisAlignedBox @@ -104,7 +104,8 @@ from cura.Settings.SettingInheritanceManager import SettingInheritanceManager from cura.Settings.SidebarCustomMenuItemsModel import SidebarCustomMenuItemsModel from cura.Settings.SimpleModeSettingsManager import SimpleModeSettingsManager from cura.TaskManagement.OnExitCallbackManager import OnExitCallbackManager -from cura.UI import CuraSplashScreen, MachineActionManager, PrintInformation +from cura.UI import CuraSplashScreen, PrintInformation +from cura.UI.MachineActionManager import MachineActionManager from cura.UI.AddPrinterPagesModel import AddPrinterPagesModel from cura.UI.MachineSettingsManager import MachineSettingsManager from cura.UI.ObjectsModel import ObjectsModel @@ -125,6 +126,7 @@ from .Machines.Models.CompatibleMachineModel import CompatibleMachineModel from .Machines.Models.MachineListModel import MachineListModel from .Machines.Models.ActiveIntentQualitiesModel import ActiveIntentQualitiesModel from .Machines.Models.IntentSelectionModel import IntentSelectionModel +from .PrintOrderManager import PrintOrderManager from .SingleInstance import SingleInstance if TYPE_CHECKING: @@ -179,6 +181,7 @@ class CuraApplication(QtApplication): # Variables set from CLI self._files_to_open = [] + self._urls_to_open = [] self._use_single_instance = False self._single_instance = None @@ -186,12 +189,12 @@ class CuraApplication(QtApplication): self._cura_formula_functions = None # type: Optional[CuraFormulaFunctions] - self._machine_action_manager = None # type: Optional[MachineActionManager.MachineActionManager] + self._machine_action_manager: Optional[MachineActionManager] = None self.empty_container = None # type: EmptyInstanceContainer self.empty_definition_changes_container = None # type: EmptyInstanceContainer self.empty_variant_container = None # type: EmptyInstanceContainer - self.empty_intent_container = None # type: EmptyInstanceContainer + self.empty_intent_container = None # type: EmptyInstanceContainer self.empty_material_container = None # type: EmptyInstanceContainer self.empty_quality_container = None # type: EmptyInstanceContainer self.empty_quality_changes_container = None # type: EmptyInstanceContainer @@ -202,6 +205,7 @@ class CuraApplication(QtApplication): self._container_manager = None self._object_manager = None + self._print_order_manager = None self._extruders_model = None self._extruders_model_with_optional = None self._build_plate_model = None @@ -333,7 +337,7 @@ class CuraApplication(QtApplication): for filename in self._cli_args.file: url = QUrl(filename) if url.scheme() in self._supported_url_schemes: - self._open_url_queue.append(url) + self._urls_to_open.append(url) else: self._files_to_open.append(os.path.abspath(filename)) @@ -352,11 +356,11 @@ class CuraApplication(QtApplication): self.__addAllEmptyContainers() self.__setLatestResouceVersionsForVersionUpgrade() - self._machine_action_manager = MachineActionManager.MachineActionManager(self) + self._machine_action_manager = MachineActionManager(self) self._machine_action_manager.initialize() def __sendCommandToSingleInstance(self): - self._single_instance = SingleInstance(self, self._files_to_open) + self._single_instance = SingleInstance(self, self._files_to_open, self._urls_to_open) # If we use single instance, try to connect to the single instance server, send commands, and then exit. # If we cannot find an existing single instance server, this is the only instance, so just keep going. @@ -373,9 +377,15 @@ class CuraApplication(QtApplication): Resources.addExpectedDirNameInData(dir_name) app_root = os.path.abspath(os.path.join(os.path.dirname(sys.executable))) - Resources.addSecureSearchPath(os.path.join(app_root, "share", "cura", "resources")) - Resources.addSecureSearchPath(os.path.join(self._app_install_dir, "share", "cura", "resources")) + if platform.system() == "Darwin": + Resources.addSecureSearchPath(os.path.join(app_root, "Resources", "share", "cura", "resources")) + Resources.addSecureSearchPath( + os.path.join(self._app_install_dir, "Resources", "share", "cura", "resources")) + else: + Resources.addSecureSearchPath(os.path.join(app_root, "share", "cura", "resources")) + Resources.addSecureSearchPath(os.path.join(self._app_install_dir, "share", "cura", "resources")) + if not hasattr(sys, "frozen"): cura_data_root = os.environ.get('CURA_DATA_ROOT', None) if cura_data_root: @@ -591,7 +601,9 @@ class CuraApplication(QtApplication): preferences.addPreference("mesh/scale_to_fit", False) preferences.addPreference("mesh/scale_tiny_meshes", True) preferences.addPreference("cura/dialog_on_project_save", True) + preferences.addPreference("cura/dialog_on_ucp_project_save", True) preferences.addPreference("cura/asked_dialog_on_project_save", False) + preferences.addPreference("cura/asked_dialog_on_ucp_project_save", False) preferences.addPreference("cura/choice_on_profile_override", "always_ask") preferences.addPreference("cura/choice_on_open_project", "always_ask") preferences.addPreference("cura/use_multi_build_plate", False) @@ -607,6 +619,7 @@ class CuraApplication(QtApplication): preferences.addPreference("view/invert_zoom", False) preferences.addPreference("view/filter_current_build_plate", False) + preferences.addPreference("view/navigation_style", "cura") preferences.addPreference("cura/sidebar_collapsed", False) preferences.addPreference("cura/favorite_materials", "") @@ -899,6 +912,7 @@ class CuraApplication(QtApplication): # initialize info objects self._print_information = PrintInformation.PrintInformation(self) self._cura_actions = CuraActions.CuraActions(self) + self._print_order_manager = PrintOrderManager(self.getObjectsModel().getNodes) self.processEvents() # Initialize setting visibility presets model. self._setting_visibility_presets_model = SettingVisibilityPresetsModel(self.getPreferences(), parent = self) @@ -956,6 +970,8 @@ class CuraApplication(QtApplication): self.callLater(self._openFile, file_name) for file_name in self._open_file_queue: # Open all the files that were queued up while plug-ins were loading. self.callLater(self._openFile, file_name) + for url in self._urls_to_open: + self.callLater(self._openUrl, url) for url in self._open_url_queue: self.callLater(self._openUrl, url) @@ -979,6 +995,7 @@ class CuraApplication(QtApplication): t.setEnabledAxis([ToolHandle.XAxis, ToolHandle.YAxis, ToolHandle.ZAxis]) Selection.selectionChanged.connect(self.onSelectionChanged) + self._print_order_manager.printOrderChanged.connect(self._onPrintOrderChanged) # Set default background color for scene self.getRenderer().setBackgroundColor(QColor(245, 245, 245)) @@ -1068,6 +1085,10 @@ class CuraApplication(QtApplication): def getTextManager(self, *args) -> "TextManager": return self._text_manager + @pyqtSlot() + def setWorkplaceDropToBuildplate(self): + return self._physics.setAppAllModelDropDown() + def getCuraFormulaFunctions(self, *args) -> "CuraFormulaFunctions": if self._cura_formula_functions is None: self._cura_formula_functions = CuraFormulaFunctions(self) @@ -1094,6 +1115,10 @@ class CuraApplication(QtApplication): self._object_manager = ObjectsModel(self) return self._object_manager + @pyqtSlot(str, result = "QVariantList") + def getSupportedActionMachineList(self, definition_id: str) -> List["MachineAction"]: + return self._machine_action_manager.getSupportedActions(self._machine_manager.getDefinitionByMachineId(definition_id)) + @pyqtSlot(result = QObject) def getExtrudersModel(self, *args) -> "ExtrudersModel": if self._extruders_model is None: @@ -1119,6 +1144,16 @@ class CuraApplication(QtApplication): self._build_plate_model = BuildPlateModel(self) return self._build_plate_model + @pyqtSlot() + def exportUcp(self): + writer = self.getMeshFileHandler().getWriter("3MFWriter") + + if writer is None: + Logger.warning("3mf writer is not enabled") + return + + writer.exportUcp() + def getCuraSceneController(self, *args) -> CuraSceneController: if self._cura_scene_controller is None: self._cura_scene_controller = CuraSceneController.createCuraSceneController() @@ -1129,14 +1164,16 @@ class CuraApplication(QtApplication): self._setting_inheritance_manager = SettingInheritanceManager.createSettingInheritanceManager() return self._setting_inheritance_manager - def getMachineActionManager(self, *args: Any) -> MachineActionManager.MachineActionManager: + @pyqtSlot(result = QObject) + def getMachineActionManager(self, *args: Any) -> MachineActionManager: """Get the machine action manager We ignore any *args given to this, as we also register the machine manager as qml singleton. It wants to give this function an engine and script engine, but we don't care about that. """ - return cast(MachineActionManager.MachineActionManager, self._machine_action_manager) + return self._machine_action_manager + @pyqtSlot(result = QObject) def getMaterialManagementModel(self) -> MaterialManagementModel: @@ -1150,7 +1187,8 @@ class CuraApplication(QtApplication): self._quality_management_model = QualityManagementModel(parent = self) return self._quality_management_model - def getSimpleModeSettingsManager(self, *args): + @pyqtSlot(result=QObject) + def getSimpleModeSettingsManager(self)-> SimpleModeSettingsManager: if self._simple_mode_settings_manager is None: self._simple_mode_settings_manager = SimpleModeSettingsManager() return self._simple_mode_settings_manager @@ -1193,16 +1231,43 @@ class CuraApplication(QtApplication): return self._print_information - def getQualityProfilesDropDownMenuModel(self, *args, **kwargs): + @pyqtSlot(result=QObject) + def getQualityProfilesDropDownMenuModel(self, *args, **kwargs)-> QualityProfilesDropDownMenuModel: if self._quality_profile_drop_down_menu_model is None: self._quality_profile_drop_down_menu_model = QualityProfilesDropDownMenuModel(self) return self._quality_profile_drop_down_menu_model - def getCustomQualityProfilesDropDownMenuModel(self, *args, **kwargs): + @pyqtSlot(result=QObject) + def getCustomQualityProfilesDropDownMenuModel(self, *args, **kwargs)->CustomQualityProfilesDropDownMenuModel: if self._custom_quality_profile_drop_down_menu_model is None: self._custom_quality_profile_drop_down_menu_model = CustomQualityProfilesDropDownMenuModel(self) return self._custom_quality_profile_drop_down_menu_model + @deprecated("SimpleModeSettingsManager is deprecated and will be removed in major SDK release, Use getSimpleModeSettingsManager() instead", since = "5.7.0") + def getSimpleModeSettingsManagerWrapper(self, *args, **kwargs): + return self.getSimpleModeSettingsManager() + + @deprecated("MachineActionManager is deprecated and will be removed in major SDK release, Use getMachineActionManager() instead", since="5.7.0") + def getMachineActionManagerWrapper(self, *args, **kwargs): + return self.getMachineActionManager() + + @deprecated("QualityManagementModel is deprecated and will be removed in major SDK release, Use getQualityManagementModel() instead", since="5.7.0") + def getQualityManagementModelWrapper(self, *args, **kwargs): + return self.getQualityManagementModel() + + @deprecated("MaterialManagementModel is deprecated and will be removed in major SDK release, Use getMaterialManagementModel() instead", since = "5.7.0") + def getMaterialManagementModelWrapper(self, *args, **kwargs): + return self.getMaterialManagementModel() + + @deprecated("QualityProfilesDropDownMenuModel is deprecated and will be removed in major SDK release, Use getQualityProfilesDropDownMenuModel() instead", since = "5.7.0") + def getQualityProfilesDropDownMenuModelWrapper(self, *args, **kwargs): + return self.getQualityProfilesDropDownMenuModel() + + @deprecated("CustomQualityProfilesDropDownMenuModel is deprecated and will be removed in major SDK release, Use getCustomQualityProfilesDropDownMenuModel() instead", since = "5.7.0") + def getCustomQualityProfilesDropDownMenuModelWrapper(self, *args, **kwargs): + return self.getCustomQualityProfilesDropDownMenuModel() + + def getCuraAPI(self, *args, **kwargs) -> "CuraAPI": return self._cura_API @@ -1218,6 +1283,7 @@ class CuraApplication(QtApplication): self.processEvents() engine.rootContext().setContextProperty("Printer", self) engine.rootContext().setContextProperty("CuraApplication", self) + engine.rootContext().setContextProperty("PrintOrderManager", self._print_order_manager) engine.rootContext().setContextProperty("PrintInformation", self._print_information) engine.rootContext().setContextProperty("CuraActions", self._cura_actions) engine.rootContext().setContextProperty("CuraSDKVersion", ApplicationMetadata.CuraSDKVersion) @@ -1231,8 +1297,8 @@ class CuraApplication(QtApplication): qmlRegisterSingletonType(MachineManager, "Cura", 1, 0, self.getMachineManager, "MachineManager") qmlRegisterSingletonType(IntentManager, "Cura", 1, 6, self.getIntentManager, "IntentManager") qmlRegisterSingletonType(SettingInheritanceManager, "Cura", 1, 0, self.getSettingInheritanceManager, "SettingInheritanceManager") - qmlRegisterSingletonType(SimpleModeSettingsManager, "Cura", 1, 0, self.getSimpleModeSettingsManager, "SimpleModeSettingsManager") - qmlRegisterSingletonType(MachineActionManager.MachineActionManager, "Cura", 1, 0, self.getMachineActionManager, "MachineActionManager") + qmlRegisterSingletonType(SimpleModeSettingsManager, "Cura", 1, 0, self.getSimpleModeSettingsManagerWrapper, "SimpleModeSettingsManager") + qmlRegisterSingletonType(MachineActionManager, "Cura", 1, 0, self.getMachineActionManagerWrapper, "MachineActionManager") self.processEvents() qmlRegisterType(NetworkingUtil, "Cura", 1, 5, "NetworkingUtil") @@ -1257,16 +1323,14 @@ class CuraApplication(QtApplication): qmlRegisterType(FavoriteMaterialsModel, "Cura", 1, 0, "FavoriteMaterialsModel") qmlRegisterType(GenericMaterialsModel, "Cura", 1, 0, "GenericMaterialsModel") qmlRegisterType(MaterialBrandsModel, "Cura", 1, 0, "MaterialBrandsModel") - qmlRegisterSingletonType(QualityManagementModel, "Cura", 1, 0, self.getQualityManagementModel, "QualityManagementModel") - qmlRegisterSingletonType(MaterialManagementModel, "Cura", 1, 5, self.getMaterialManagementModel, "MaterialManagementModel") + qmlRegisterSingletonType(QualityManagementModel, "Cura", 1, 0, self.getQualityManagementModelWrapper,"QualityManagementModel") + qmlRegisterSingletonType(MaterialManagementModel, "Cura", 1, 5, self.getMaterialManagementModelWrapper,"MaterialManagementModel") self.processEvents() qmlRegisterType(DiscoveredPrintersModel, "Cura", 1, 0, "DiscoveredPrintersModel") qmlRegisterType(DiscoveredCloudPrintersModel, "Cura", 1, 7, "DiscoveredCloudPrintersModel") - qmlRegisterSingletonType(QualityProfilesDropDownMenuModel, "Cura", 1, 0, - self.getQualityProfilesDropDownMenuModel, "QualityProfilesDropDownMenuModel") - qmlRegisterSingletonType(CustomQualityProfilesDropDownMenuModel, "Cura", 1, 0, - self.getCustomQualityProfilesDropDownMenuModel, "CustomQualityProfilesDropDownMenuModel") + qmlRegisterSingletonType(QualityProfilesDropDownMenuModel, "Cura", 1, 0, self.getQualityProfilesDropDownMenuModelWrapper, "QualityProfilesDropDownMenuModel") + qmlRegisterSingletonType(CustomQualityProfilesDropDownMenuModel, "Cura", 1, 0, self.getCustomQualityProfilesDropDownMenuModelWrapper, "CustomQualityProfilesDropDownMenuModel") qmlRegisterType(NozzleModel, "Cura", 1, 0, "NozzleModel") qmlRegisterType(IntentModel, "Cura", 1, 6, "IntentModel") qmlRegisterType(IntentCategoryModel, "Cura", 1, 6, "IntentCategoryModel") @@ -1715,8 +1779,12 @@ class CuraApplication(QtApplication): Selection.remove(node) Selection.add(group_node) + all_nodes = self.getObjectsModel().getNodes() + PrintOrderManager.updatePrintOrdersAfterGroupOperation(all_nodes, group_node, selected_nodes) + @pyqtSlot() def ungroupSelected(self) -> None: + all_nodes = self.getObjectsModel().getNodes() selected_objects = Selection.getAllSelectedObjects().copy() for node in selected_objects: if node.callDecoration("isGroup"): @@ -1724,21 +1792,30 @@ class CuraApplication(QtApplication): group_parent = node.getParent() children = node.getChildren().copy() - for child in children: - # Ungroup only 1 level deep - if child.getParent() != node: - continue + # Ungroup only 1 level deep + children_to_ungroup = list(filter(lambda child: child.getParent() == node, children)) + for child in children_to_ungroup: # Set the parent of the children to the parent of the group-node op.addOperation(SetParentOperation(child, group_parent)) # Add all individual nodes to the selection Selection.add(child) + PrintOrderManager.updatePrintOrdersAfterUngroupOperation(all_nodes, node, children_to_ungroup) op.push() # Note: The group removes itself from the scene once all its children have left it, # see GroupDecorator._onChildrenChanged + def _onPrintOrderChanged(self) -> None: + # update object list + scene = self.getController().getScene() + scene.sceneChanged.emit(scene.getRoot()) + + # reset if already was sliced + Application.getInstance().getBackend().needsSlicing() + Application.getInstance().getBackend().tickle() + def _createSplashScreen(self) -> Optional[CuraSplashScreen.CuraSplashScreen]: if self._is_headless: return None diff --git a/cura/HitChecker.py b/cura/HitChecker.py new file mode 100644 index 0000000000..4b229e6b9b --- /dev/null +++ b/cura/HitChecker.py @@ -0,0 +1,88 @@ +from typing import List, Dict +from cura.Scene.CuraSceneNode import CuraSceneNode + + +class HitChecker: + """Checks if nodes can be printed without causing any collisions and interference""" + + def __init__(self, nodes: List[CuraSceneNode]) -> None: + self._hit_map = self._buildHitMap(nodes) + + def anyTwoNodesBlockEachOther(self, nodes: List[CuraSceneNode]) -> bool: + """Returns True if any 2 nodes block each other""" + for a in nodes: + for b in nodes: + if self._hit_map[a][b] and self._hit_map[b][a]: + return True + return False + + def canPrintBefore(self, node: CuraSceneNode, other_nodes: List[CuraSceneNode]) -> bool: + """Returns True if node doesn't block other_nodes and can be printed before them""" + no_hits = all(not self._hit_map[node][other_node] for other_node in other_nodes) + return no_hits + + def canPrintAfter(self, node: CuraSceneNode, other_nodes: List[CuraSceneNode]) -> bool: + """Returns True if node doesn't hit other nodes and can be printed after them""" + no_hits = all(not self._hit_map[other_node][node] for other_node in other_nodes) + return no_hits + + def calculateScore(self, a: CuraSceneNode, b: CuraSceneNode) -> int: + """Calculate score simply sums the number of other objects it 'blocks' + + :param a: node + :param b: node + :return: sum of the number of other objects + """ + + score_a = sum(self._hit_map[a].values()) + score_b = sum(self._hit_map[b].values()) + return score_a - score_b + + def canPrintNodesInProvidedOrder(self, ordered_nodes: List[CuraSceneNode]) -> bool: + """Returns True If nodes don't have any hits in provided order""" + for node_index, node in enumerate(ordered_nodes): + nodes_before = ordered_nodes[:node_index - 1] if node_index - 1 >= 0 else [] + nodes_after = ordered_nodes[node_index + 1:] if node_index + 1 < len(ordered_nodes) else [] + if not self.canPrintBefore(node, nodes_after) or not self.canPrintAfter(node, nodes_before): + return False + return True + + @staticmethod + def _buildHitMap(nodes: List[CuraSceneNode]) -> Dict[CuraSceneNode, CuraSceneNode]: + """Pre-computes all hits between all objects + + :nodes: nodes that need to be checked for collisions + :return: dictionary where hit_map[node1][node2] is False if there node1 can be printed before node2 + """ + hit_map = {j: {i: HitChecker._checkHit(j, i) for i in nodes} for j in nodes} + return hit_map + + @staticmethod + def _checkHit(a: CuraSceneNode, b: CuraSceneNode) -> bool: + """Checks if a can be printed before b + + :param a: node + :param b: node + :return: False if a can be printed before b + """ + + if a == b: + return False + + a_hit_hull = a.callDecoration("getConvexHullBoundary") + b_hit_hull = b.callDecoration("getConvexHullHeadFull") + overlap = a_hit_hull.intersectsPolygon(b_hit_hull) + + if overlap: + return True + + # Adhesion areas must never overlap, regardless of printing order + # This would cause over-extrusion + a_hit_hull = a.callDecoration("getAdhesionArea") + b_hit_hull = b.callDecoration("getAdhesionArea") + overlap = a_hit_hull.intersectsPolygon(b_hit_hull) + + if overlap: + return True + else: + return False diff --git a/cura/Machines/Models/ExtrudersModel.py b/cura/Machines/Models/ExtrudersModel.py index 2677894bff..f31f7c8717 100644 --- a/cura/Machines/Models/ExtrudersModel.py +++ b/cura/Machines/Models/ExtrudersModel.py @@ -227,7 +227,7 @@ class ExtrudersModel(ListModel): "material_brand": "", "color_name": "", "material_type": "", - "material_label": "" + "material_name": "" } items.append(item) if self._items != items: diff --git a/cura/OAuth2/AuthorizationHelpers.py b/cura/OAuth2/AuthorizationHelpers.py index a654ee4bdb..3e7dabaf08 100644 --- a/cura/OAuth2/AuthorizationHelpers.py +++ b/cura/OAuth2/AuthorizationHelpers.py @@ -16,6 +16,7 @@ from UM.TaskManagement.HttpRequestManager import HttpRequestManager # To downlo catalog = i18nCatalog("cura") TOKEN_TIMESTAMP_FORMAT = "%Y-%m-%d %H:%M:%S" +REQUEST_TIMEOUT = 5 # Seconds class AuthorizationHelpers: @@ -40,6 +41,7 @@ class AuthorizationHelpers: """ data = { "client_id": self._settings.CLIENT_ID if self._settings.CLIENT_ID is not None else "", + "client_secret": self._settings.CLIENT_SECRET if self._settings.CLIENT_SECRET is not None else "", "redirect_uri": self._settings.CALLBACK_URL if self._settings.CALLBACK_URL is not None else "", "grant_type": "authorization_code", "code": authorization_code, @@ -52,7 +54,8 @@ class AuthorizationHelpers: data = urllib.parse.urlencode(data).encode("UTF-8"), headers_dict = headers, callback = lambda response: self.parseTokenResponse(response, callback), - error_callback = lambda response, _: self.parseTokenResponse(response, callback) + error_callback = lambda response, _: self.parseTokenResponse(response, callback), + timeout = REQUEST_TIMEOUT ) def getAccessTokenUsingRefreshToken(self, refresh_token: str, callback: Callable[[AuthenticationResponse], None]) -> None: @@ -64,6 +67,7 @@ class AuthorizationHelpers: Logger.log("d", "Refreshing the access token for [%s]", self._settings.OAUTH_SERVER_URL) data = { "client_id": self._settings.CLIENT_ID if self._settings.CLIENT_ID is not None else "", + "client_secret": self._settings.CLIENT_SECRET if self._settings.CLIENT_SECRET is not None else "", "redirect_uri": self._settings.CALLBACK_URL if self._settings.CALLBACK_URL is not None else "", "grant_type": "refresh_token", "refresh_token": refresh_token, @@ -75,7 +79,9 @@ class AuthorizationHelpers: data = urllib.parse.urlencode(data).encode("UTF-8"), headers_dict = headers, callback = lambda response: self.parseTokenResponse(response, callback), - error_callback = lambda response, _: self.parseTokenResponse(response, callback) + error_callback = lambda response, _: self.parseTokenResponse(response, callback), + urgent = True, + timeout = REQUEST_TIMEOUT ) def parseTokenResponse(self, token_response: QNetworkReply, callback: Callable[[AuthenticationResponse], None]) -> None: @@ -120,7 +126,8 @@ class AuthorizationHelpers: check_token_url, headers_dict = headers, callback = lambda reply: self._parseUserProfile(reply, success_callback, failed_callback), - error_callback = lambda _, _2: failed_callback() if failed_callback is not None else None + error_callback = lambda _, _2: failed_callback() if failed_callback is not None else None, + timeout = REQUEST_TIMEOUT ) def _parseUserProfile(self, reply: QNetworkReply, success_callback: Optional[Callable[[UserProfile], None]], failed_callback: Optional[Callable[[], None]] = None) -> None: diff --git a/cura/OAuth2/AuthorizationService.py b/cura/OAuth2/AuthorizationService.py index 62bf31982a..4e8d28173a 100644 --- a/cura/OAuth2/AuthorizationService.py +++ b/cura/OAuth2/AuthorizationService.py @@ -1,4 +1,4 @@ -# Copyright (c) 2021 Ultimaker B.V. +# Copyright (c) 2024 UltiMaker # Cura is released under the terms of the LGPLv3 or higher. import json @@ -6,13 +6,14 @@ from datetime import datetime, timedelta from typing import Callable, Dict, Optional, TYPE_CHECKING, Union from urllib.parse import urlencode, quote_plus -from PyQt6.QtCore import QUrl +from PyQt6.QtCore import QUrl, QTimer from PyQt6.QtGui import QDesktopServices from UM.Logger import Logger from UM.Message import Message from UM.Signal import Signal from UM.i18n import i18nCatalog +from UM.TaskManagement.HttpRequestManager import HttpRequestManager # To download log-in tokens. from cura.OAuth2.AuthorizationHelpers import AuthorizationHelpers, TOKEN_TIMESTAMP_FORMAT from cura.OAuth2.LocalAuthorizationServer import LocalAuthorizationServer from cura.OAuth2.Models import AuthenticationResponse, BaseModel @@ -25,26 +26,32 @@ if TYPE_CHECKING: MYCLOUD_LOGOFF_URL = "https://account.ultimaker.com/logoff?utm_source=cura&utm_medium=software&utm_campaign=change-account-before-adding-printers" +REFRESH_TOKEN_MAX_RETRIES = 15 +REFRESH_TOKEN_RETRY_INTERVAL = 1000 class AuthorizationService: """The authorization service is responsible for handling the login flow, storing user credentials and providing account information. """ - # Emit signal when authentication is completed. - onAuthStateChanged = Signal() + def __init__(self, + settings: "OAuth2Settings", + preferences: Optional["Preferences"] = None, + get_user_profile: bool = True) -> None: + # Emit signal when authentication is completed. + self.onAuthStateChanged = Signal() - # Emit signal when authentication failed. - onAuthenticationError = Signal() + # Emit signal when authentication failed. + self.onAuthenticationError = Signal() - accessTokenChanged = Signal() + self.accessTokenChanged = Signal() - def __init__(self, settings: "OAuth2Settings", preferences: Optional["Preferences"] = None) -> None: self._settings = settings self._auth_helpers = AuthorizationHelpers(settings) self._auth_url = "{}/authorize".format(self._settings.OAUTH_SERVER_URL) self._auth_data: Optional[AuthenticationResponse] = None self._user_profile: Optional["UserProfile"] = None + self._get_user_profile: bool = get_user_profile self._preferences = preferences self._server = LocalAuthorizationServer(self._auth_helpers, self._onAuthStateChanged, daemon=True) self._currently_refreshing_token = False # Whether we are currently in the process of refreshing auth. Don't make new requests while busy. @@ -53,6 +60,12 @@ class AuthorizationService: self.onAuthStateChanged.connect(self._authChanged) + self._refresh_token_retries = 0 + self._refresh_token_retry_timer = QTimer() + self._refresh_token_retry_timer.setInterval(REFRESH_TOKEN_RETRY_INTERVAL) + self._refresh_token_retry_timer.setSingleShot(True) + self._refresh_token_retry_timer.timeout.connect(self.refreshAccessToken) + def _authChanged(self, logged_in): if logged_in and self._unable_to_get_data_message is not None: self._unable_to_get_data_message.hide() @@ -163,16 +176,29 @@ class AuthorizationService: return def process_auth_data(response: AuthenticationResponse) -> None: + self._currently_refreshing_token = False + if response.success: + self._refresh_token_retries = 0 self._storeAuthData(response) + HttpRequestManager.getInstance().setDelayRequests(False) self.onAuthStateChanged.emit(logged_in = True) else: - Logger.warning("Failed to get a new access token from the server.") - self.onAuthStateChanged.emit(logged_in = False) + if self._refresh_token_retries >= REFRESH_TOKEN_MAX_RETRIES: + self._refresh_token_retries = 0 + Logger.warning("Failed to get a new access token from the server, giving up.") + HttpRequestManager.getInstance().setDelayRequests(False) + self.onAuthStateChanged.emit(logged_in = False) + else: + # Retry a bit later, network may be offline right now and will hopefully be back soon + Logger.warning("Failed to get a new access token from the server, retrying later.") + self._refresh_token_retries += 1 + self._refresh_token_retry_timer.start() if self._currently_refreshing_token: Logger.debug("Was already busy refreshing token. Do not start a new request.") return + HttpRequestManager.getInstance().setDelayRequests(True) self._currently_refreshing_token = True self._auth_helpers.getAccessTokenUsingRefreshToken(self._auth_data.refresh_token, process_auth_data) @@ -294,7 +320,8 @@ class AuthorizationService: self._auth_data = auth_data self._currently_refreshing_token = False if auth_data: - self.getUserProfile() + if self._get_user_profile: + self.getUserProfile() self._preferences.setValue(self._settings.AUTH_DATA_PREFERENCE_KEY, json.dumps(auth_data.dump())) else: Logger.log("d", "Clearing the user profile") diff --git a/cura/OAuth2/Models.py b/cura/OAuth2/Models.py index 4c84872a09..3427f1cc3d 100644 --- a/cura/OAuth2/Models.py +++ b/cura/OAuth2/Models.py @@ -16,6 +16,7 @@ class OAuth2Settings(BaseModel): CALLBACK_PORT = None # type: Optional[int] OAUTH_SERVER_URL = None # type: Optional[str] CLIENT_ID = None # type: Optional[str] + CLIENT_SECRET = None # type: Optional[str] CLIENT_SCOPES = None # type: Optional[str] CALLBACK_URL = None # type: Optional[str] AUTH_DATA_PREFERENCE_KEY = "" # type: str diff --git a/cura/OneAtATimeIterator.py b/cura/OneAtATimeIterator.py index 8bdddba554..1017cfc79e 100644 --- a/cura/OneAtATimeIterator.py +++ b/cura/OneAtATimeIterator.py @@ -7,6 +7,11 @@ from UM.Scene.Iterator import Iterator from UM.Scene.SceneNode import SceneNode from functools import cmp_to_key +from cura.HitChecker import HitChecker +from cura.PrintOrderManager import PrintOrderManager +from cura.Scene.CuraSceneNode import CuraSceneNode + + class OneAtATimeIterator(Iterator.Iterator): """Iterator that returns a list of nodes in the order that they need to be printed @@ -16,8 +21,6 @@ class OneAtATimeIterator(Iterator.Iterator): def __init__(self, scene_node) -> None: super().__init__(scene_node) # Call super to make multiple inheritance work. - self._hit_map = [[]] # type: List[List[bool]] # For each node, which other nodes this hits. A grid of booleans on which nodes hit which. - self._original_node_list = [] # type: List[SceneNode] # The nodes that need to be checked for collisions. def _fillStack(self) -> None: """Fills the ``_node_stack`` with a list of scene nodes that need to be printed in order. """ @@ -38,104 +41,50 @@ class OneAtATimeIterator(Iterator.Iterator): self._node_stack = node_list[:] return - # Copy the list - self._original_node_list = node_list[:] + hit_checker = HitChecker(node_list) - # Initialise the hit map (pre-compute all hits between all objects) - self._hit_map = [[self._checkHit(i, j) for i in node_list] for j in node_list] + if PrintOrderManager.isUserDefinedPrintOrderEnabled(): + self._node_stack = self._getNodesOrderedByUser(hit_checker, node_list) + else: + self._node_stack = self._getNodesOrderedAutomatically(hit_checker, node_list) - # Check if we have to files that block each other. If this is the case, there is no solution! - for a in range(0, len(node_list)): - for b in range(0, len(node_list)): - if a != b and self._hit_map[a][b] and self._hit_map[b][a]: - return + # update print orders so that user can try to arrange the nodes automatically first + # and if result is not satisfactory he/she can switch to manual mode and change it + for index, node in enumerate(self._node_stack): + node.printOrder = index + 1 + + @staticmethod + def _getNodesOrderedByUser(hit_checker: HitChecker, node_list: List[CuraSceneNode]) -> List[CuraSceneNode]: + nodes_ordered_by_user = sorted(node_list, key=lambda n: n.printOrder) + if hit_checker.canPrintNodesInProvidedOrder(nodes_ordered_by_user): + return nodes_ordered_by_user + return [] # No solution + + @staticmethod + def _getNodesOrderedAutomatically(hit_checker: HitChecker, node_list: List[CuraSceneNode]) -> List[CuraSceneNode]: + # Check if we have two files that block each other. If this is the case, there is no solution! + if hit_checker.anyTwoNodesBlockEachOther(node_list): + return [] # No solution # Sort the original list so that items that block the most other objects are at the beginning. # This does not decrease the worst case running time, but should improve it in most cases. - sorted(node_list, key = cmp_to_key(self._calculateScore)) + node_list = sorted(node_list, key = cmp_to_key(hit_checker.calculateScore)) todo_node_list = [_ObjectOrder([], node_list)] while len(todo_node_list) > 0: current = todo_node_list.pop() for node in current.todo: # Check if the object can be placed with what we have and still allows for a solution in the future - if not self._checkHitMultiple(node, current.order) and not self._checkBlockMultiple(node, current.todo): + if hit_checker.canPrintAfter(node, current.order) and hit_checker.canPrintBefore(node, current.todo): # We found a possible result. Create new todo & order list. new_todo_list = current.todo[:] new_todo_list.remove(node) new_order = current.order[:] + [node] if len(new_todo_list) == 0: # We have no more nodes to check, so quit looking. - self._node_stack = new_order - return + return new_order # Solution found! todo_node_list.append(_ObjectOrder(new_order, new_todo_list)) - self._node_stack = [] #No result found! - - - # Check if first object can be printed before the provided list (using the hit map) - def _checkHitMultiple(self, node: SceneNode, other_nodes: List[SceneNode]) -> bool: - node_index = self._original_node_list.index(node) - for other_node in other_nodes: - other_node_index = self._original_node_list.index(other_node) - if self._hit_map[node_index][other_node_index]: - return True - return False - - def _checkBlockMultiple(self, node: SceneNode, other_nodes: List[SceneNode]) -> bool: - """Check for a node whether it hits any of the other nodes. - - :param node: The node to check whether it collides with the other nodes. - :param other_nodes: The nodes to check for collisions. - :return: returns collision between nodes - """ - - node_index = self._original_node_list.index(node) - for other_node in other_nodes: - other_node_index = self._original_node_list.index(other_node) - if self._hit_map[other_node_index][node_index] and node_index != other_node_index: - return True - return False - - def _calculateScore(self, a: SceneNode, b: SceneNode) -> int: - """Calculate score simply sums the number of other objects it 'blocks' - - :param a: node - :param b: node - :return: sum of the number of other objects - """ - - score_a = sum(self._hit_map[self._original_node_list.index(a)]) - score_b = sum(self._hit_map[self._original_node_list.index(b)]) - return score_a - score_b - - def _checkHit(self, a: SceneNode, b: SceneNode) -> bool: - """Checks if a can be printed before b - - :param a: node - :param b: node - :return: true if a can be printed before b - """ - - if a == b: - return False - - a_hit_hull = a.callDecoration("getConvexHullBoundary") - b_hit_hull = b.callDecoration("getConvexHullHeadFull") - overlap = a_hit_hull.intersectsPolygon(b_hit_hull) - - if overlap: - return True - - # Adhesion areas must never overlap, regardless of printing order - # This would cause over-extrusion - a_hit_hull = a.callDecoration("getAdhesionArea") - b_hit_hull = b.callDecoration("getAdhesionArea") - overlap = a_hit_hull.intersectsPolygon(b_hit_hull) - - if overlap: - return True - else: - return False + return [] # No result found! class _ObjectOrder: diff --git a/cura/PlatformPhysics.py b/cura/PlatformPhysics.py index 1ef39de80d..c61f78d86e 100755 --- a/cura/PlatformPhysics.py +++ b/cura/PlatformPhysics.py @@ -39,6 +39,11 @@ class PlatformPhysics: Application.getInstance().getPreferences().addPreference("physics/automatic_push_free", False) Application.getInstance().getPreferences().addPreference("physics/automatic_drop_down", True) + self._app_all_model_drop = False + + def setAppAllModelDropDown(self): + self._app_all_model_drop = True + self._onChangeTimerFinished() def _onSceneChanged(self, source): if not source.callDecoration("isSliceable"): @@ -80,9 +85,9 @@ class PlatformPhysics: # Move it downwards if bottom is above platform move_vector = Vector() - if node.getSetting(SceneNodeSettings.AutoDropDown, app_automatic_drop_down) and not (node.getParent() and node.getParent().callDecoration("isGroup") or node.getParent() != root) and node.isEnabled(): #If an object is grouped, don't move it down + if (node.getSetting(SceneNodeSettings.AutoDropDown, app_automatic_drop_down) or self._app_all_model_drop) and not (node.getParent() and node.getParent().callDecoration("isGroup") or node.getParent() != root) and node.isEnabled(): z_offset = node.callDecoration("getZOffset") if node.getDecorator(ZOffsetDecorator.ZOffsetDecorator) else 0 - move_vector = move_vector.set(y = -bbox.bottom + z_offset) + move_vector = move_vector.set(y=-bbox.bottom + z_offset) # If there is no convex hull for the node, start calculating it and continue. if not node.getDecorator(ConvexHullDecorator) and not node.callDecoration("isNonPrintingMesh") and node.callDecoration("getLayerData") is None: @@ -168,6 +173,8 @@ class PlatformPhysics: op = PlatformPhysicsOperation.PlatformPhysicsOperation(node, move_vector) op.push() + # setting this drop to model same as app_automatic_drop_down + self._app_all_model_drop = False # After moving, we have to evaluate the boundary checks for nodes build_volume.updateNodeBoundaryCheck() diff --git a/cura/PrintOrderManager.py b/cura/PrintOrderManager.py new file mode 100644 index 0000000000..59bbe684f4 --- /dev/null +++ b/cura/PrintOrderManager.py @@ -0,0 +1,174 @@ +from typing import List, Callable, Optional, Any + +from PyQt6.QtCore import pyqtProperty, pyqtSignal, QObject, pyqtSlot +from UM.Application import Application +from UM.Scene.Selection import Selection + +from cura.Scene.CuraSceneNode import CuraSceneNode + + +class PrintOrderManager(QObject): + """Allows to order the object list to set the print sequence manually""" + + def __init__(self, get_nodes: Callable[[], List[CuraSceneNode]]) -> None: + super().__init__() + self._get_nodes = get_nodes + self._configureEvents() + + _settingsChanged = pyqtSignal() + _uiActionsOutdated = pyqtSignal() + printOrderChanged = pyqtSignal() + + @pyqtSlot() + def swapSelectedAndPreviousNodes(self) -> None: + selected_node, previous_node, next_node = self._getSelectedAndNeighborNodes() + self._swapPrintOrders(selected_node, previous_node) + + @pyqtSlot() + def swapSelectedAndNextNodes(self) -> None: + selected_node, previous_node, next_node = self._getSelectedAndNeighborNodes() + self._swapPrintOrders(selected_node, next_node) + + @pyqtProperty(str, notify=_uiActionsOutdated) + def previousNodeName(self) -> str: + selected_node, previous_node, next_node = self._getSelectedAndNeighborNodes() + return self._getNodeName(previous_node) + + @pyqtProperty(str, notify=_uiActionsOutdated) + def nextNodeName(self) -> str: + selected_node, previous_node, next_node = self._getSelectedAndNeighborNodes() + return self._getNodeName(next_node) + + @pyqtProperty(bool, notify=_uiActionsOutdated) + def shouldEnablePrintBeforeAction(self) -> bool: + selected_node, previous_node, next_node = self._getSelectedAndNeighborNodes() + can_swap_with_previous_node = selected_node is not None and previous_node is not None + return can_swap_with_previous_node + + @pyqtProperty(bool, notify=_uiActionsOutdated) + def shouldEnablePrintAfterAction(self) -> bool: + selected_node, previous_node, next_node = self._getSelectedAndNeighborNodes() + can_swap_with_next_node = selected_node is not None and next_node is not None + return can_swap_with_next_node + + @pyqtProperty(bool, notify=_settingsChanged) + def shouldShowEditPrintOrderActions(self) -> bool: + return PrintOrderManager.isUserDefinedPrintOrderEnabled() + + @staticmethod + def isUserDefinedPrintOrderEnabled() -> bool: + stack = Application.getInstance().getGlobalContainerStack() + is_enabled = stack and \ + stack.getProperty("print_sequence", "value") == "one_at_a_time" and \ + stack.getProperty("user_defined_print_order_enabled", "value") + return bool(is_enabled) + + @staticmethod + def initializePrintOrders(nodes: List[CuraSceneNode]) -> None: + """Just created (loaded from file) nodes have print order 0. + + This method initializes print orders with max value to put nodes at the end of object list""" + max_print_order = max(map(lambda n: n.printOrder, nodes), default=0) + for node in nodes: + if node.printOrder == 0: + max_print_order += 1 + node.printOrder = max_print_order + + @staticmethod + def updatePrintOrdersAfterGroupOperation( + all_nodes: List[CuraSceneNode], + group_node: CuraSceneNode, + grouped_nodes: List[CuraSceneNode] + ) -> None: + group_node.printOrder = min(map(lambda n: n.printOrder, grouped_nodes)) + + all_nodes.append(group_node) + for node in grouped_nodes: + all_nodes.remove(node) + + # reassign print orders so there won't be gaps like 1 2 5 6 7 + sorted_nodes = sorted(all_nodes, key=lambda n: n.printOrder) + for i, node in enumerate(sorted_nodes): + node.printOrder = i + 1 + + @staticmethod + def updatePrintOrdersAfterUngroupOperation( + all_nodes: List[CuraSceneNode], + group_node: CuraSceneNode, + ungrouped_nodes: List[CuraSceneNode] + ) -> None: + all_nodes.remove(group_node) + nodes_to_update_print_order = filter(lambda n: n.printOrder > group_node.printOrder, all_nodes) + for node in nodes_to_update_print_order: + node.printOrder += len(ungrouped_nodes) - 1 + + for i, child in enumerate(ungrouped_nodes): + child.printOrder = group_node.printOrder + i + all_nodes.append(child) + + def _swapPrintOrders(self, node1: CuraSceneNode, node2: CuraSceneNode) -> None: + if node1 and node2: + node1.printOrder, node2.printOrder = node2.printOrder, node1.printOrder # swap print orders + self.printOrderChanged.emit() # update object list first + self._uiActionsOutdated.emit() # then update UI actions + + def _getSelectedAndNeighborNodes(self + ) -> (Optional[CuraSceneNode], Optional[CuraSceneNode], Optional[CuraSceneNode]): + nodes = self._get_nodes() + ordered_nodes = sorted(nodes, key=lambda n: n.printOrder) + for i, node in enumerate(ordered_nodes, 1): + node.printOrder = i + + selected_node = PrintOrderManager._getSingleSelectedNode() + if selected_node and selected_node in ordered_nodes: + selected_node_index = ordered_nodes.index(selected_node) + else: + selected_node_index = None + + if selected_node_index is not None and selected_node_index - 1 >= 0: + previous_node = ordered_nodes[selected_node_index - 1] + else: + previous_node = None + + if selected_node_index is not None and selected_node_index + 1 < len(ordered_nodes): + next_node = ordered_nodes[selected_node_index + 1] + else: + next_node = None + + return selected_node, previous_node, next_node + + @staticmethod + def _getNodeName(node: CuraSceneNode, max_length: int = 30) -> str: + node_name = node.getName() if node else "" + truncated_node_name = node_name[:max_length] + return truncated_node_name + + @staticmethod + def _getSingleSelectedNode() -> Optional[CuraSceneNode]: + if len(Selection.getAllSelectedObjects()) == 1: + selected_node = Selection.getSelectedObject(0) + return selected_node + return None + + def _configureEvents(self) -> None: + Selection.selectionChanged.connect(self._onSelectionChanged) + self._global_stack = None + Application.getInstance().globalContainerStackChanged.connect(self._onGlobalStackChanged) + self._onGlobalStackChanged() + + def _onGlobalStackChanged(self) -> None: + if self._global_stack: + self._global_stack.propertyChanged.disconnect(self._onSettingsChanged) + self._global_stack.containersChanged.disconnect(self._onSettingsChanged) + + self._global_stack = Application.getInstance().getGlobalContainerStack() + + if self._global_stack: + self._global_stack.propertyChanged.connect(self._onSettingsChanged) + self._global_stack.containersChanged.connect(self._onSettingsChanged) + + def _onSettingsChanged(self, *args: Any) -> None: + self._settingsChanged.emit() + + def _onSelectionChanged(self) -> None: + self._uiActionsOutdated.emit() diff --git a/cura/Scene/CuraSceneNode.py b/cura/Scene/CuraSceneNode.py index 5fbaded650..65b7c1e593 100644 --- a/cura/Scene/CuraSceneNode.py +++ b/cura/Scene/CuraSceneNode.py @@ -11,6 +11,7 @@ from UM.Scene.SceneNode import SceneNode from UM.Scene.SceneNodeDecorator import SceneNodeDecorator # To cast the deepcopy of every decorator back to SceneNodeDecorator. import cura.CuraApplication # To get the build plate. +from UM.Scene.SceneNodeSettings import SceneNodeSettings from cura.Settings.ExtruderStack import ExtruderStack # For typing. from cura.Settings.SettingOverrideDecorator import SettingOverrideDecorator # For per-object settings. @@ -25,13 +26,26 @@ class CuraSceneNode(SceneNode): if not no_setting_override: self.addDecorator(SettingOverrideDecorator()) # Now we always have a getActiveExtruderPosition, unless explicitly disabled self._outside_buildarea = False + self._print_order = 0 def setOutsideBuildArea(self, new_value: bool) -> None: self._outside_buildarea = new_value + @property + def printOrder(self): + return self._print_order + + @printOrder.setter + def printOrder(self, new_value): + self._print_order = new_value + def isOutsideBuildArea(self) -> bool: return self._outside_buildarea or self.callDecoration("getBuildPlateNumber") < 0 + @property + def isDropDownEnabled(self) ->bool: + return self.getSetting(SceneNodeSettings.AutoDropDown, Application.getInstance().getPreferences().getValue("physics/automatic_drop_down")) + def isVisible(self) -> bool: return super().isVisible() and self.callDecoration("getBuildPlateNumber") == cura.CuraApplication.CuraApplication.getInstance().getMultiBuildPlateModel().activeBuildPlate @@ -157,3 +171,6 @@ class CuraSceneNode(SceneNode): def transformChanged(self) -> None: self._transformChanged() + + def __repr__(self) -> str: + return "{print_order}. {name}".format(print_order = self._print_order, name = self.getName()) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 6a152ab51b..3ce83d27e3 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -316,7 +316,13 @@ class ExtruderManager(QObject): # Starts with the adhesion extruder. adhesion_type = global_stack.getProperty("adhesion_type", "value") if adhesion_type in {"skirt", "brim"}: - return max(0, int(global_stack.getProperty("skirt_brim_extruder_nr", "value"))) # optional skirt/brim extruder defaults to zero + skirt_brim_extruder_nr = global_stack.getProperty("skirt_brim_extruder_nr", "value") + # if the skirt_brim_extruder_nr is -1, then we use the first used extruder + if skirt_brim_extruder_nr == -1: + used_extruders = self.getUsedExtruderStacks() + return used_extruders[0].position + else: + return skirt_brim_extruder_nr if adhesion_type == "raft": return global_stack.getProperty("raft_base_extruder_nr", "value") diff --git a/cura/SingleInstance.py b/cura/SingleInstance.py index 61ab1204fe..0448ddc647 100644 --- a/cura/SingleInstance.py +++ b/cura/SingleInstance.py @@ -5,16 +5,18 @@ import json import os from typing import List, Optional +from PyQt6.QtCore import QUrl from PyQt6.QtNetwork import QLocalServer, QLocalSocket -from UM.Qt.QtApplication import QtApplication #For typing. +from UM.Qt.QtApplication import QtApplication # For typing. from UM.Logger import Logger class SingleInstance: - def __init__(self, application: QtApplication, files_to_open: Optional[List[str]]) -> None: + def __init__(self, application: QtApplication, files_to_open: Optional[List[str]], url_to_open: Optional[List[str]]) -> None: self._application = application self._files_to_open = files_to_open + self._url_to_open = url_to_open self._single_instance_server = None @@ -33,7 +35,7 @@ class SingleInstance: return False # We only send the files that need to be opened. - if not self._files_to_open: + if not self._files_to_open and not self._url_to_open: Logger.log("i", "No file need to be opened, do nothing.") return True @@ -55,8 +57,12 @@ class SingleInstance: payload = {"command": "open", "filePath": os.path.abspath(filename)} single_instance_socket.write(bytes(json.dumps(payload) + "\n", encoding = "ascii")) + for url in self._url_to_open: + payload = {"command": "open-url", "urlPath": url.toString()} + single_instance_socket.write(bytes(json.dumps(payload) + "\n", encoding="ascii")) + payload = {"command": "close-connection"} - single_instance_socket.write(bytes(json.dumps(payload) + "\n", encoding = "ascii")) + single_instance_socket.write(bytes(json.dumps(payload) + "\n", encoding="ascii")) single_instance_socket.flush() single_instance_socket.waitForDisconnected() @@ -72,7 +78,7 @@ class SingleInstance: def _onClientConnected(self) -> None: Logger.log("i", "New connection received on our single-instance server") - connection = None #type: Optional[QLocalSocket] + connection = None # type: Optional[QLocalSocket] if self._single_instance_server: connection = self._single_instance_server.nextPendingConnection() @@ -81,7 +87,7 @@ class SingleInstance: def __readCommands(self, connection: QLocalSocket) -> None: line = connection.readLine() - while len(line) != 0: # There is also a .canReadLine() + while len(line) != 0: # There is also a .canReadLine() try: payload = json.loads(str(line, encoding = "ascii").strip()) command = payload["command"] @@ -94,13 +100,19 @@ class SingleInstance: elif command == "open": self._application.callLater(lambda f = payload["filePath"]: self._application._openFile(f)) + #command: Load a url link in Cura + elif command == "open-url": + url = QUrl(payload["urlPath"]) + self._application.callLater(lambda: self._application._openUrl(url)) + + # Command: Activate the window and bring it to the top. elif command == "focus": # Operating systems these days prevent windows from moving around by themselves. # 'alert' or flashing the icon in the taskbar is the best thing we do now. main_window = self._application.getMainWindow() if main_window is not None: - self._application.callLater(lambda: main_window.alert(0)) # type: ignore # I don't know why MyPy complains here + self._application.callLater(lambda: main_window.alert(0)) # type: ignore # I don't know why MyPy complains here # Command: Close the socket connection. We're done. elif command == "close-connection": diff --git a/cura/UI/ObjectsModel.py b/cura/UI/ObjectsModel.py index 4f64270247..4d5a4dfc81 100644 --- a/cura/UI/ObjectsModel.py +++ b/cura/UI/ObjectsModel.py @@ -14,6 +14,9 @@ from UM.Scene.SceneNode import SceneNode from UM.Scene.Selection import Selection from UM.i18n import i18nCatalog +from cura.PrintOrderManager import PrintOrderManager +from cura.Scene.CuraSceneNode import CuraSceneNode + catalog = i18nCatalog("cura") @@ -76,6 +79,9 @@ class ObjectsModel(ListModel): self._build_plate_number = nr self._update() + def getNodes(self) -> List[CuraSceneNode]: + return list(map(lambda n: n["node"], self.items)) + def _updateSceneDelayed(self, source) -> None: if not isinstance(source, Camera): self._update_timer.start() @@ -175,6 +181,10 @@ class ObjectsModel(ListModel): all_nodes = self._renameNodes(name_to_node_info_dict) + user_defined_print_order_enabled = PrintOrderManager.isUserDefinedPrintOrderEnabled() + if user_defined_print_order_enabled: + PrintOrderManager.initializePrintOrders(all_nodes) + for node in all_nodes: if hasattr(node, "isOutsideBuildArea"): is_outside_build_area = node.isOutsideBuildArea() # type: ignore @@ -223,8 +233,13 @@ class ObjectsModel(ListModel): # for anti overhang meshes and groups the extruder nr is irrelevant extruder_number = -1 + if not user_defined_print_order_enabled: + name = node.getName() + else: + name = "{print_order}. {name}".format(print_order = node.printOrder, name = node.getName()) + nodes.append({ - "name": node.getName(), + "name": name, "selected": Selection.isSelected(node), "outside_build_area": is_outside_build_area, "buildplate_number": node_build_plate_number, @@ -234,5 +249,5 @@ class ObjectsModel(ListModel): "node": node }) - nodes = sorted(nodes, key=lambda n: n["name"]) + nodes = sorted(nodes, key=lambda n: n["name"] if not user_defined_print_order_enabled else n["node"].printOrder) self.setItems(nodes) diff --git a/cura_app.py b/cura_app.py index 905d8f4ee0..bcea032789 100755 --- a/cura_app.py +++ b/cura_app.py @@ -15,6 +15,10 @@ if "" in sys.path: import argparse import faulthandler import os + +# set the environment variable QT_QUICK_FLICKABLE_WHEEL_DECELERATION to 5000 as mentioned in qt6.6 update log to overcome scroll related issues +os.environ["QT_QUICK_FLICKABLE_WHEEL_DECELERATION"] = str(int(os.environ.get("QT_QUICK_FLICKABLE_WHEEL_DECELERATION", "5000"))) + if sys.platform != "linux": # Turns out the Linux build _does_ use this, but we're not making an Enterprise release for that system anyway. os.environ["QT_PLUGIN_PATH"] = "" # Security workaround: Don't need it, and introduces an attack vector, so set to nul. os.environ["QML2_IMPORT_PATH"] = "" # Security workaround: Don't need it, and introduces an attack vector, so set to nul. diff --git a/plugins/3MFReader/SpecificSettingsModel.py b/plugins/3MFReader/SpecificSettingsModel.py new file mode 100644 index 0000000000..fd5719d6b3 --- /dev/null +++ b/plugins/3MFReader/SpecificSettingsModel.py @@ -0,0 +1,38 @@ +# Copyright (c) 2024 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from PyQt6.QtCore import Qt + +from UM.Settings.SettingDefinition import SettingDefinition +from UM.Qt.ListModel import ListModel + + +class SpecificSettingsModel(ListModel): + CategoryRole = Qt.ItemDataRole.UserRole + 1 + LabelRole = Qt.ItemDataRole.UserRole + 2 + ValueRole = Qt.ItemDataRole.UserRole + 3 + + def __init__(self, parent = None): + super().__init__(parent = parent) + self.addRoleName(self.CategoryRole, "category") + self.addRoleName(self.LabelRole, "label") + self.addRoleName(self.ValueRole, "value") + + self._i18n_catalog = None + + def addSettingsFromStack(self, stack, category, settings): + for setting, value in settings.items(): + unit = stack.getProperty(setting, "unit") + + setting_type = stack.getProperty(setting, "type") + if setting_type is not None: + # This is not very good looking, but will do for now + value = SettingDefinition.settingValueToString(setting_type, value) + " " + unit + else: + value = str(value) + + self.appendItem({ + "category": category, + "label": stack.getProperty(setting, "label"), + "value": value + }) diff --git a/plugins/3MFReader/ThreeMFReader.py b/plugins/3MFReader/ThreeMFReader.py index 13a97d5a89..99852d84ce 100755 --- a/plugins/3MFReader/ThreeMFReader.py +++ b/plugins/3MFReader/ThreeMFReader.py @@ -16,6 +16,7 @@ from UM.Mesh.MeshReader import MeshReader from UM.MimeTypeDatabase import MimeTypeDatabase, MimeType from UM.Scene.GroupDecorator import GroupDecorator from UM.Scene.SceneNode import SceneNode # For typing. +from UM.Scene.SceneNodeSettings import SceneNodeSettings from cura.CuraApplication import CuraApplication from cura.Machines.ContainerTree import ContainerTree from cura.Scene.BuildPlateDecorator import BuildPlateDecorator @@ -41,7 +42,7 @@ class ThreeMFReader(MeshReader): MimeTypeDatabase.addMimeType( MimeType( - name = "application/vnd.ms-package.3dmanufacturing-3dmodel+xml", + name="application/vnd.ms-package.3dmanufacturing-3dmodel+xml", comment="3MF", suffixes=["3mf"] ) @@ -177,6 +178,12 @@ class ThreeMFReader(MeshReader): else: Logger.log("w", "Unable to find extruder in position %s", setting_value) continue + if key == "print_order": + um_node.printOrder = int(setting_value) + continue + if key =="drop_to_buildplate": + um_node.setSetting(SceneNodeSettings.AutoDropDown, eval(setting_value)) + continue if key in known_setting_keys: setting_container.setProperty(key, "value", setting_value) else: diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index b97cb34b01..25e2afa8bd 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -5,6 +5,7 @@ from configparser import ConfigParser import zipfile import os import json +import re from typing import cast, Dict, List, Optional, Tuple, Any, Set import xml.etree.ElementTree as ET @@ -57,6 +58,7 @@ _ignored_machine_network_metadata: Set[str] = { "is_abstract_machine" } +USER_SETTINGS_PATH = "Cura/user-settings.json" class ContainerInfo: def __init__(self, file_name: Optional[str], serialized: Optional[str], parser: Optional[ConfigParser]) -> None: @@ -141,10 +143,15 @@ class ThreeMFWorkspaceReader(WorkspaceReader): self._old_new_materials: Dict[str, str] = {} self._machine_info = None + self._load_profile = False + self._user_settings: Dict[str, Dict[str, Any]] = {} + def _clearState(self): self._id_mapping = {} self._old_new_materials = {} self._machine_info = None + self._load_profile = False + self._user_settings = {} def getNewId(self, old_id: str): """Get a unique name based on the old_id. This is different from directly calling the registry in that it caches results. @@ -228,11 +235,14 @@ class ThreeMFWorkspaceReader(WorkspaceReader): self._resolve_strategies = {k: None for k in resolve_strategy_keys} containers_found_dict = {k: False for k in resolve_strategy_keys} + # Check whether the file is a UCP, which changes some import options + is_ucp = USER_SETTINGS_PATH in cura_file_names + # # Read definition containers # machine_definition_id = None - updatable_machines = [] + updatable_machines = None if is_ucp else [] machine_definition_container_count = 0 extruder_definition_container_count = 0 definition_container_files = [name for name in cura_file_names if name.endswith(self._definition_container_suffix)] @@ -250,7 +260,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): if definition_container_type == "machine": machine_definition_id = container_id machine_definition_containers = self._container_registry.findDefinitionContainers(id = machine_definition_id) - if machine_definition_containers: + if machine_definition_containers and updatable_machines is not None: updatable_machines = [machine for machine in self._container_registry.findContainerStacks(type = "machine") if machine.definition == machine_definition_containers[0]] machine_type = definition_container["name"] variant_type_name = definition_container.get("variants_name", variant_type_name) @@ -597,6 +607,37 @@ class ThreeMFWorkspaceReader(WorkspaceReader): package_metadata = self._parse_packages_metadata(archive) missing_package_metadata = self._filter_missing_package_metadata(package_metadata) + # Load the user specifically exported settings + self._dialog.exportedSettingModel.clear() + if is_ucp: + try: + self._user_settings = json.loads(archive.open("Cura/user-settings.json").read().decode("utf-8")) + any_extruder_stack = ExtruderManager.getInstance().getExtruderStack(0) + actual_global_stack = CuraApplication.getInstance().getGlobalContainerStack() + + for stack_name, settings in self._user_settings.items(): + if stack_name == 'global': + self._dialog.exportedSettingModel.addSettingsFromStack(actual_global_stack, i18n_catalog.i18nc("@label", "Global"), settings) + else: + extruder_match = re.fullmatch('extruder_([0-9]+)', stack_name) + if extruder_match is not None: + extruder_nr = int(extruder_match.group(1)) + self._dialog.exportedSettingModel.addSettingsFromStack(any_extruder_stack, + i18n_catalog.i18nc("@label", + "Extruder {0}", extruder_nr + 1), + settings) + except KeyError as e: + # If there is no user settings file, it's not a UCP, so notify user of failure. + Logger.log("w", "File %s is not a valid UCP.", file_name) + message = Message( + i18n_catalog.i18nc("@info:error Don't translate the XML tags or !", + "Project file {0} is corrupt: {1}.", + file_name, str(e)), + title=i18n_catalog.i18nc("@info:title", "Can't Open Project File"), + message_type=Message.MessageType.ERROR) + message.show() + return WorkspaceReader.PreReadResult.failed + # Show the dialog, informing the user what is about to happen. self._dialog.setMachineConflict(machine_conflict) self._dialog.setIsPrinterGroup(is_printer_group) @@ -617,8 +658,11 @@ class ThreeMFWorkspaceReader(WorkspaceReader): self._dialog.setVariantType(variant_type_name) self._dialog.setHasObjectsOnPlate(Application.getInstance().platformActivity) self._dialog.setMissingPackagesMetadata(missing_package_metadata) + self._dialog.setHasVisibleSelectSameProfileChanged(is_ucp) + self._dialog.setAllowCreatemachine(not is_ucp) self._dialog.show() + # Choosing the initially selected printer in MachineSelector is_networked_machine = False is_abstract_machine = False @@ -648,6 +692,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader): self._dialog.setIsNetworkedMachine(is_networked_machine) self._dialog.setIsAbstractMachine(is_abstract_machine) self._dialog.setMachineName(machine_name) + self._dialog.updateCompatibleMachine() + self._dialog.setSelectSameProfileChecked(self._dialog.isCompatibleMachine) # Block until the dialog is closed. self._dialog.waitForClose() @@ -655,6 +701,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader): if self._dialog.getResult() == {}: return WorkspaceReader.PreReadResult.cancelled + self._load_profile = not is_ucp or (self._dialog.selectSameProfileChecked and self._dialog.isCompatibleMachine) + self._resolve_strategies = self._dialog.getResult() # # There can be 3 resolve strategies coming from the dialog: @@ -690,16 +738,16 @@ class ThreeMFWorkspaceReader(WorkspaceReader): except EnvironmentError as e: message = Message(i18n_catalog.i18nc("@info:error Don't translate the XML tags or !", "Project file {0} is suddenly inaccessible: {1}.", file_name, str(e)), - title = i18n_catalog.i18nc("@info:title", "Can't Open Project File"), - message_type = Message.MessageType.ERROR) + title = i18n_catalog.i18nc("@info:title", "Can't Open Project File"), + message_type = Message.MessageType.ERROR) message.show() self.setWorkspaceName("") return [], {} except zipfile.BadZipFile as e: message = Message(i18n_catalog.i18nc("@info:error Don't translate the XML tags or !", "Project file {0} is corrupt: {1}.", file_name, str(e)), - title = i18n_catalog.i18nc("@info:title", "Can't Open Project File"), - message_type = Message.MessageType.ERROR) + title = i18n_catalog.i18nc("@info:title", "Can't Open Project File"), + message_type = Message.MessageType.ERROR) message.show() self.setWorkspaceName("") return [], {} @@ -761,9 +809,9 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # Find the machine which will be overridden global_stacks = self._container_registry.findContainerStacks(id = self._dialog.getMachineToOverride(), type = "machine") if not global_stacks: - message = Message(i18n_catalog.i18nc("@info:error Don't translate the XML tag !", + message = Message(i18n_catalog.i18nc("@info:error Don't translate the XML tag !", "Project file {0} is made using profiles that are unknown to this version of UltiMaker Cura.", file_name), - message_type = Message.MessageType.ERROR) + message_type = Message.MessageType.ERROR) message.show() self.setWorkspaceName("") return [], {} @@ -777,84 +825,89 @@ class ThreeMFWorkspaceReader(WorkspaceReader): for stack in extruder_stacks: stack.setNextStack(global_stack, connect_signals = False) - Logger.log("d", "Workspace loading is checking definitions...") - # Get all the definition files & check if they exist. If not, add them. - definition_container_files = [name for name in cura_file_names if name.endswith(self._definition_container_suffix)] - for definition_container_file in definition_container_files: - container_id = self._stripFileToId(definition_container_file) + if self._load_profile: + Logger.log("d", "Workspace loading is checking definitions...") + # Get all the definition files & check if they exist. If not, add them. + definition_container_files = [name for name in cura_file_names if name.endswith(self._definition_container_suffix)] + for definition_container_file in definition_container_files: + container_id = self._stripFileToId(definition_container_file) - definitions = self._container_registry.findDefinitionContainersMetadata(id = container_id) - if not definitions: - definition_container = DefinitionContainer(container_id) - try: - definition_container.deserialize(archive.open(definition_container_file).read().decode("utf-8"), - file_name = definition_container_file) - except ContainerFormatError: - # We cannot just skip the definition file because everything else later will just break if the - # machine definition cannot be found. - Logger.logException("e", "Failed to deserialize definition file %s in project file %s", - definition_container_file, file_name) - definition_container = self._container_registry.findDefinitionContainers(id = "fdmprinter")[0] #Fall back to defaults. - self._container_registry.addContainer(definition_container) - Job.yieldThread() - QCoreApplication.processEvents() # Ensure that the GUI does not freeze. - - Logger.log("d", "Workspace loading is checking materials...") - # Get all the material files and check if they exist. If not, add them. - xml_material_profile = self._getXmlProfileClass() - if self._material_container_suffix is None: - self._material_container_suffix = ContainerRegistry.getMimeTypeForContainer(xml_material_profile).suffixes[0] - if xml_material_profile: - material_container_files = [name for name in cura_file_names if name.endswith(self._material_container_suffix)] - for material_container_file in material_container_files: - to_deserialize_material = False - container_id = self._stripFileToId(material_container_file) - need_new_name = False - materials = self._container_registry.findInstanceContainers(id = container_id) - - if not materials: - # No material found, deserialize this material later and add it - to_deserialize_material = True - else: - material_container = materials[0] - old_material_root_id = material_container.getMetaDataEntry("base_file") - if old_material_root_id is not None and not self._container_registry.isReadOnly(old_material_root_id): # Only create new materials if they are not read only. - to_deserialize_material = True - - if self._resolve_strategies["material"] == "override": - # Remove the old materials and then deserialize the one from the project - root_material_id = material_container.getMetaDataEntry("base_file") - application.getContainerRegistry().removeContainer(root_material_id) - elif self._resolve_strategies["material"] == "new": - # Note that we *must* deserialize it with a new ID, as multiple containers will be - # auto created & added. - container_id = self.getNewId(container_id) - self._old_new_materials[old_material_root_id] = container_id - need_new_name = True - - if to_deserialize_material: - material_container = xml_material_profile(container_id) + definitions = self._container_registry.findDefinitionContainersMetadata(id = container_id) + if not definitions: + definition_container = DefinitionContainer(container_id) try: - material_container.deserialize(archive.open(material_container_file).read().decode("utf-8"), - file_name = container_id + "." + self._material_container_suffix) + definition_container.deserialize(archive.open(definition_container_file).read().decode("utf-8"), + file_name = definition_container_file) except ContainerFormatError: - Logger.logException("e", "Failed to deserialize material file %s in project file %s", - material_container_file, file_name) - continue - if need_new_name: - new_name = ContainerRegistry.getInstance().uniqueName(material_container.getName()) - material_container.setName(new_name) - material_container.setDirty(True) - self._container_registry.addContainer(material_container) + # We cannot just skip the definition file because everything else later will just break if the + # machine definition cannot be found. + Logger.logException("e", "Failed to deserialize definition file %s in project file %s", + definition_container_file, file_name) + definition_container = self._container_registry.findDefinitionContainers(id = "fdmprinter")[0] #Fall back to defaults. + self._container_registry.addContainer(definition_container) Job.yieldThread() QCoreApplication.processEvents() # Ensure that the GUI does not freeze. - if global_stack: - # Handle quality changes if any - self._processQualityChanges(global_stack) + Logger.log("d", "Workspace loading is checking materials...") + # Get all the material files and check if they exist. If not, add them. + xml_material_profile = self._getXmlProfileClass() + if self._material_container_suffix is None: + self._material_container_suffix = ContainerRegistry.getMimeTypeForContainer(xml_material_profile).suffixes[0] + if xml_material_profile: + material_container_files = [name for name in cura_file_names if name.endswith(self._material_container_suffix)] + for material_container_file in material_container_files: + to_deserialize_material = False + container_id = self._stripFileToId(material_container_file) + need_new_name = False + materials = self._container_registry.findInstanceContainers(id = container_id) - # Prepare the machine - self._applyChangesToMachine(global_stack, extruder_stack_dict) + if not materials: + # No material found, deserialize this material later and add it + to_deserialize_material = True + else: + material_container = materials[0] + old_material_root_id = material_container.getMetaDataEntry("base_file") + if old_material_root_id is not None and not self._container_registry.isReadOnly(old_material_root_id): # Only create new materials if they are not read only. + to_deserialize_material = True + + if self._resolve_strategies["material"] == "override": + # Remove the old materials and then deserialize the one from the project + root_material_id = material_container.getMetaDataEntry("base_file") + application.getContainerRegistry().removeContainer(root_material_id) + elif self._resolve_strategies["material"] == "new": + # Note that we *must* deserialize it with a new ID, as multiple containers will be + # auto created & added. + container_id = self.getNewId(container_id) + self._old_new_materials[old_material_root_id] = container_id + need_new_name = True + + if to_deserialize_material: + material_container = xml_material_profile(container_id) + try: + material_container.deserialize(archive.open(material_container_file).read().decode("utf-8"), + file_name = container_id + "." + self._material_container_suffix) + except ContainerFormatError: + Logger.logException("e", "Failed to deserialize material file %s in project file %s", + material_container_file, file_name) + continue + if need_new_name: + new_name = ContainerRegistry.getInstance().uniqueName(material_container.getName()) + material_container.setName(new_name) + material_container.setDirty(True) + self._container_registry.addContainer(material_container) + Job.yieldThread() + QCoreApplication.processEvents() # Ensure that the GUI does not freeze. + + if global_stack: + if self._load_profile: + # Handle quality changes if any + self._processQualityChanges(global_stack) + + # Prepare the machine + self._applyChangesToMachine(global_stack, extruder_stack_dict) + else: + # Just clear the settings now, so that we can change the active machine without conflicts + self._clearMachineSettings(global_stack, extruder_stack_dict) Logger.log("d", "Workspace loading is notifying rest of the code of changes...") # Actually change the active machine. @@ -866,6 +919,10 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # To solve this, we schedule _updateActiveMachine() for later so it will have the latest data. self._updateActiveMachine(global_stack) + if not self._load_profile: + # Now we have switched, apply the user settings + self._applyUserSettings(global_stack, extruder_stack_dict, self._user_settings) + # Load all the nodes / mesh data of the workspace nodes = self._3mf_mesh_reader.read(file_name) if nodes is None: @@ -1177,21 +1234,44 @@ class ThreeMFWorkspaceReader(WorkspaceReader): material_node = machine_node.variants[extruder_stack.variant.getName()].materials[root_material_id] extruder_stack.material = material_node.container - def _applyChangesToMachine(self, global_stack, extruder_stack_dict): - # Clear all first + def _clearMachineSettings(self, global_stack, extruder_stack_dict): self._clearStack(global_stack) for extruder_stack in extruder_stack_dict.values(): self._clearStack(extruder_stack) + self._quality_changes_to_apply = None + self._quality_type_to_apply = None + self._intent_category_to_apply = None + self._user_settings_to_apply = None + + def _applyUserSettings(self, global_stack, extruder_stack_dict, user_settings): + for stack_name, settings in user_settings.items(): + if stack_name == 'global': + ThreeMFWorkspaceReader._applyUserSettingsOnStack(global_stack, settings) + else: + extruder_match = re.fullmatch('extruder_([0-9]+)', stack_name) + if extruder_match is not None: + extruder_nr = extruder_match.group(1) + if extruder_nr in extruder_stack_dict: + ThreeMFWorkspaceReader._applyUserSettingsOnStack(extruder_stack_dict[extruder_nr], settings) + + @staticmethod + def _applyUserSettingsOnStack(stack, user_settings): + user_settings_container = stack.userChanges + + for setting_to_import, setting_value in user_settings.items(): + user_settings_container.setProperty(setting_to_import, 'value', setting_value) + + def _applyChangesToMachine(self, global_stack, extruder_stack_dict): + # Clear all first + self._clearMachineSettings(global_stack, extruder_stack_dict) + self._applyDefinitionChanges(global_stack, extruder_stack_dict) self._applyUserChanges(global_stack, extruder_stack_dict) self._applyVariants(global_stack, extruder_stack_dict) self._applyMaterials(global_stack, extruder_stack_dict) # prepare the quality to select - self._quality_changes_to_apply = None - self._quality_type_to_apply = None - self._intent_category_to_apply = None if self._machine_info.quality_changes_info is not None: self._quality_changes_to_apply = self._machine_info.quality_changes_info.name else: diff --git a/plugins/3MFReader/WorkspaceDialog.py b/plugins/3MFReader/WorkspaceDialog.py index 0203fc92b5..1fafcf59f5 100644 --- a/plugins/3MFReader/WorkspaceDialog.py +++ b/plugins/3MFReader/WorkspaceDialog.py @@ -22,6 +22,8 @@ import time from cura.CuraApplication import CuraApplication +from .SpecificSettingsModel import SpecificSettingsModel + i18n_catalog = i18nCatalog("cura") @@ -71,6 +73,11 @@ class WorkspaceDialog(QObject): self._install_missing_package_dialog: Optional[QObject] = None self._is_abstract_machine = False self._is_networked_machine = False + self._is_compatible_machine = False + self._has_visible_select_same_profile = False + self._select_same_profile_checked = True + self._allow_create_machine = True + self._exported_settings_model = SpecificSettingsModel() machineConflictChanged = pyqtSignal() qualityChangesConflictChanged = pyqtSignal() @@ -94,6 +101,9 @@ class WorkspaceDialog(QObject): extrudersChanged = pyqtSignal() isPrinterGroupChanged = pyqtSignal() missingPackagesChanged = pyqtSignal() + isCompatibleMachineChanged = pyqtSignal() + hasVisibleSelectSameProfileChanged = pyqtSignal() + selectSameProfileCheckedChanged = pyqtSignal() @pyqtProperty(bool, notify = isPrinterGroupChanged) def isPrinterGroup(self) -> bool: @@ -292,6 +302,50 @@ class WorkspaceDialog(QObject): @pyqtSlot(str) def setMachineToOverride(self, machine_name: str) -> None: self._override_machine = machine_name + self.updateCompatibleMachine() + + def updateCompatibleMachine(self): + registry = ContainerRegistry.getInstance() + containers_expected = registry.findDefinitionContainers(name=self._machine_type) + containers_selected = registry.findContainerStacks(id=self._override_machine) + if len(containers_expected) == 1 and len(containers_selected) == 1: + new_compatible_machine = (containers_expected[0] == containers_selected[0].definition) + if new_compatible_machine != self._is_compatible_machine: + self._is_compatible_machine = new_compatible_machine + self.isCompatibleMachineChanged.emit() + + @pyqtProperty(bool, notify = isCompatibleMachineChanged) + def isCompatibleMachine(self) -> bool: + return self._is_compatible_machine + + def setHasVisibleSelectSameProfileChanged(self, has_visible_select_same_profile): + if has_visible_select_same_profile != self._has_visible_select_same_profile: + self._has_visible_select_same_profile = has_visible_select_same_profile + self.hasVisibleSelectSameProfileChanged.emit() + + @pyqtProperty(bool, notify = hasVisibleSelectSameProfileChanged) + def hasVisibleSelectSameProfile(self): + return self._has_visible_select_same_profile + + def setSelectSameProfileChecked(self, select_same_profile_checked): + if select_same_profile_checked != self._select_same_profile_checked: + self._select_same_profile_checked = select_same_profile_checked + self.selectSameProfileCheckedChanged.emit() + + @pyqtProperty(bool, notify = selectSameProfileCheckedChanged, fset = setSelectSameProfileChecked) + def selectSameProfileChecked(self): + return self._select_same_profile_checked + + def setAllowCreatemachine(self, allow_create_machine): + self._allow_create_machine = allow_create_machine + + @pyqtProperty(bool, constant = True) + def allowCreateMachine(self): + return self._allow_create_machine + + @pyqtProperty(QObject, constant = True) + def exportedSettingModel(self): + return self._exported_settings_model @pyqtSlot() def closeBackend(self) -> None: diff --git a/plugins/3MFReader/WorkspaceDialog.qml b/plugins/3MFReader/WorkspaceDialog.qml index d5f9b1817d..8d06b32e14 100644 --- a/plugins/3MFReader/WorkspaceDialog.qml +++ b/plugins/3MFReader/WorkspaceDialog.qml @@ -6,7 +6,7 @@ import QtQuick.Controls 2.3 import QtQuick.Layouts 1.3 import QtQuick.Window 2.2 -import UM 1.5 as UM +import UM 1.6 as UM import Cura 1.1 as Cura UM.Dialog @@ -120,13 +120,17 @@ UM.Dialog minDropDownWidth: machineSelector.width - buttons: [ + Component + { + id: componentNewPrinter + Cura.SecondaryButton { id: createNewPrinter text: catalog.i18nc("@button", "Create new") fixedWidthMode: true width: parent.width - leftPadding * 1.5 + visible: manager.allowCreateMachine onClicked: { toggleContent() @@ -136,7 +140,9 @@ UM.Dialog manager.setIsNetworkedMachine(false) } } - ] + } + + buttons: manager.allowCreateMachine ? [componentNewPrinter.createObject()] : [] onSelectPrinter: function(machine) { @@ -165,26 +171,71 @@ UM.Dialog { leftLabelText: catalog.i18nc("@action:label", "Name") rightLabelText: manager.qualityName + visible: manager.isCompatibleMachine } WorkspaceRow { leftLabelText: catalog.i18nc("@action:label", "Intent") rightLabelText: manager.intentName + visible: manager.isCompatibleMachine } WorkspaceRow { leftLabelText: catalog.i18nc("@action:label", "Not in profile") rightLabelText: catalog.i18ncp("@action:label", "%1 override", "%1 overrides", manager.numUserSettings).arg(manager.numUserSettings) - visible: manager.numUserSettings != 0 + visible: manager.numUserSettings != 0 && manager.selectSameProfileChecked && manager.isCompatibleMachine } WorkspaceRow { leftLabelText: catalog.i18nc("@action:label", "Derivative from") rightLabelText: catalog.i18ncp("@action:label", "%1, %2 override", "%1, %2 overrides", manager.numSettingsOverridenByQualityChanges).arg(manager.qualityType).arg(manager.numSettingsOverridenByQualityChanges) - visible: manager.numSettingsOverridenByQualityChanges != 0 + visible: manager.numSettingsOverridenByQualityChanges != 0 && manager.selectSameProfileChecked && manager.isCompatibleMachine + } + + WorkspaceRow + { + leftLabelText: catalog.i18nc("@action:label", "Specific settings") + rightLabelText: catalog.i18ncp("@action:label", "%1 override", "%1 overrides", manager.exportedSettingModel.rowCount()).arg(manager.exportedSettingModel.rowCount()) + buttonText: tableViewSpecificSettings.shouldBeVisible ? catalog.i18nc("@action:button", "Hide settings") : catalog.i18nc("@action:button", "Show settings") + visible: !manager.selectSameProfileChecked || !manager.isCompatibleMachine + onButtonClicked: tableViewSpecificSettings.shouldBeVisible = !tableViewSpecificSettings.shouldBeVisible + } + + Cura.TableView + { + id: tableViewSpecificSettings + width: parent.width - parent.leftPadding - UM.Theme.getSize("default_margin").width + height: UM.Theme.getSize("card").height + visible: shouldBeVisible && (!manager.selectSameProfileChecked || !manager.isCompatibleMachine) + property bool shouldBeVisible: false + + columnHeaders: + [ + catalog.i18nc("@title:column", "Applies on"), + catalog.i18nc("@title:column", "Setting"), + catalog.i18nc("@title:column", "Value") + ] + + model: UM.TableModel + { + id: tableModel + headers: ["category", "label", "value"] + rows: manager.exportedSettingModel.items + } + } + + UM.CheckBox + { + text: catalog.i18nc("@action:checkbox", "Select the same profile") + onEnabledChanged: manager.selectSameProfileChecked = enabled + tooltip: enabled ? "" : catalog.i18nc("@tooltip", "You can use the same profile only if you have the same printer as the project was published with") + visible: manager.hasVisibleSelectSameProfile && manager.isCompatibleMachine + + checked: manager.selectSameProfileChecked + onCheckedChanged: manager.selectSameProfileChecked = checked } } diff --git a/plugins/3MFReader/WorkspaceRow.qml b/plugins/3MFReader/WorkspaceRow.qml index 8d9f1f25b3..855b8c18b0 100644 --- a/plugins/3MFReader/WorkspaceRow.qml +++ b/plugins/3MFReader/WorkspaceRow.qml @@ -9,26 +9,38 @@ import QtQuick.Window 2.2 import UM 1.5 as UM import Cura 1.1 as Cura -Row +RowLayout { + id: root + property alias leftLabelText: leftLabel.text property alias rightLabelText: rightLabel.text + property alias buttonText: button.text + signal buttonClicked width: parent.width - height: visible ? childrenRect.height : 0 UM.Label { id: leftLabel text: catalog.i18nc("@action:label", "Type") - width: Math.round(parent.width / 4) + Layout.preferredWidth: Math.round(parent.width / 4) wrapMode: Text.WordWrap } + UM.Label { id: rightLabel text: manager.machineType - width: Math.round(parent.width / 3) wrapMode: Text.WordWrap } + + Cura.TertiaryButton + { + id: button + visible: !text.isEmpty + Layout.maximumHeight: leftLabel.implicitHeight + Layout.fillWidth: true + onClicked: root.buttonClicked() + } } \ No newline at end of file diff --git a/plugins/3MFReader/WorkspaceSection.qml b/plugins/3MFReader/WorkspaceSection.qml index 0c94ab5d6a..63b5e89b41 100644 --- a/plugins/3MFReader/WorkspaceSection.qml +++ b/plugins/3MFReader/WorkspaceSection.qml @@ -5,7 +5,7 @@ import QtQuick 2.10 import QtQuick.Controls 2.3 -import UM 1.5 as UM +import UM 1.8 as UM Item @@ -80,34 +80,13 @@ Item sourceComponent: combobox } - MouseArea + UM.HelpIcon { - id: helpIconMouseArea anchors.right: parent.right anchors.verticalCenter: comboboxLabel.verticalCenter - width: childrenRect.width - height: childrenRect.height - hoverEnabled: true - UM.ColorImage - { - width: UM.Theme.getSize("section_icon").width - height: width - - visible: comboboxTooltipText != "" - source: UM.Theme.getIcon("Help") - color: UM.Theme.getColor("text") - - UM.ToolTip - { - text: comboboxTooltipText - visible: helpIconMouseArea.containsMouse - targetPoint: Qt.point(parent.x + Math.round(parent.width / 2), parent.y) - x: 0 - y: parent.y + parent.height + UM.Theme.getSize("default_margin").height - width: UM.Theme.getSize("tooltip").width - } - } + text: comboboxTooltipText + visible: comboboxTooltipText != "" } } diff --git a/plugins/3MFWriter/SettingExport.py b/plugins/3MFWriter/SettingExport.py new file mode 100644 index 0000000000..6702aa1f68 --- /dev/null +++ b/plugins/3MFWriter/SettingExport.py @@ -0,0 +1,38 @@ +# Copyright (c) 2024 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from PyQt6.QtCore import QObject, pyqtProperty, pyqtSignal + + +class SettingExport(QObject): + + def __init__(self, id, name, value, selectable): + super().__init__() + self.id = id + self._name = name + self._value = value + self._selected = selectable + self._selectable = selectable + + @pyqtProperty(str, constant=True) + def name(self): + return self._name + + @pyqtProperty(str, constant=True) + def value(self): + return self._value + + selectedChanged = pyqtSignal(bool) + + def setSelected(self, selected): + if selected != self._selected: + self._selected = selected + self.selectedChanged.emit(self._selected) + + @pyqtProperty(bool, fset = setSelected, notify = selectedChanged) + def selected(self): + return self._selected + + @pyqtProperty(bool, constant=True) + def selectable(self): + return self._selectable diff --git a/plugins/3MFWriter/SettingSelection.qml b/plugins/3MFWriter/SettingSelection.qml new file mode 100644 index 0000000000..478c2d393c --- /dev/null +++ b/plugins/3MFWriter/SettingSelection.qml @@ -0,0 +1,38 @@ +// Copyright (c) 2024 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.3 +import QtQuick.Window 2.2 + +import UM 1.8 as UM +import Cura 1.1 as Cura + +RowLayout +{ + id: settingSelection + + UM.CheckBox + { + text: modelData.name + Layout.preferredWidth: UM.Theme.getSize("setting").width + checked: modelData.selected + onClicked: modelData.selected = checked + enabled: modelData.selectable + } + + UM.Label + { + text: modelData.value + } + + UM.HelpIcon + { + UM.I18nCatalog { id: catalog; name: "cura" } + + text: catalog.i18nc("@tooltip", + "This setting can't be exported because it depends on the used printer capacities") + visible: !modelData.selectable + } +} diff --git a/plugins/3MFWriter/SettingsExportGroup.py b/plugins/3MFWriter/SettingsExportGroup.py new file mode 100644 index 0000000000..cc3fc7b4f5 --- /dev/null +++ b/plugins/3MFWriter/SettingsExportGroup.py @@ -0,0 +1,49 @@ +# Copyright (c) 2024 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from enum import IntEnum + +from PyQt6.QtCore import QObject, pyqtProperty, pyqtEnum + + +class SettingsExportGroup(QObject): + + @pyqtEnum + class Category(IntEnum): + Global = 0 + Extruder = 1 + Model = 2 + + def __init__(self, stack, name, category, settings, category_details = '', extruder_index = 0, extruder_color = ''): + super().__init__() + self.stack = stack + self._name = name + self._settings = settings + self._category = category + self._category_details = category_details + self._extruder_index = extruder_index + self._extruder_color = extruder_color + + @pyqtProperty(str, constant=True) + def name(self): + return self._name + + @pyqtProperty(list, constant=True) + def settings(self): + return self._settings + + @pyqtProperty(int, constant=True) + def category(self): + return self._category + + @pyqtProperty(str, constant=True) + def category_details(self): + return self._category_details + + @pyqtProperty(int, constant=True) + def extruder_index(self): + return self._extruder_index + + @pyqtProperty(str, constant=True) + def extruder_color(self): + return self._extruder_color diff --git a/plugins/3MFWriter/SettingsExportModel.py b/plugins/3MFWriter/SettingsExportModel.py new file mode 100644 index 0000000000..3b034236c8 --- /dev/null +++ b/plugins/3MFWriter/SettingsExportModel.py @@ -0,0 +1,130 @@ +# Copyright (c) 2024 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from dataclasses import asdict +from typing import Optional, cast, List, Dict, Pattern, Set + +from PyQt6.QtCore import QObject, pyqtProperty + +from UM.Settings.SettingDefinition import SettingDefinition +from UM.Settings.InstanceContainer import InstanceContainer +from UM.Settings.SettingFunction import SettingFunction + +from cura.CuraApplication import CuraApplication +from cura.Settings.ExtruderManager import ExtruderManager +from cura.Settings.GlobalStack import GlobalStack + +from .SettingsExportGroup import SettingsExportGroup +from .SettingExport import SettingExport + + +class SettingsExportModel(QObject): + + EXPORTABLE_SETTINGS = {'infill_sparse_density', + 'adhesion_type', + 'support_enable', + 'infill_pattern', + 'support_type', + 'support_structure', + 'support_angle', + 'support_infill_rate', + 'ironing_enabled', + 'fill_outline_gaps', + 'coasting_enable', + 'skin_monotonic', + 'z_seam_position', + 'infill_before_walls', + 'ironing_only_highest_layer', + 'xy_offset', + 'adaptive_layer_height_enabled', + 'brim_gap', + 'support_offset', + 'brim_outside_only', + 'magic_spiralize', + 'slicing_tolerance', + 'outer_inset_first', + 'magic_fuzzy_skin_outside_only', + 'conical_overhang_enabled', + 'min_infill_area', + 'small_hole_max_size', + 'magic_mesh_surface_mode', + 'carve_multiple_volumes', + 'meshfix_union_all_remove_holes', + 'support_tree_rest_preference', + 'small_feature_max_length', + 'draft_shield_enabled', + 'brim_smart_ordering', + 'ooze_shield_enabled', + 'bottom_skin_preshrink', + 'skin_edge_support_thickness', + 'alternate_carve_order', + 'top_skin_preshrink', + 'interlocking_enable'} + + def __init__(self, parent = None): + super().__init__(parent) + self._settings_groups = [] + + application = CuraApplication.getInstance() + + # Display global settings + global_stack = application.getGlobalContainerStack() + self._settings_groups.append(SettingsExportGroup(global_stack, + "Global settings", + SettingsExportGroup.Category.Global, + self._exportSettings(global_stack))) + + # Display per-extruder settings + extruders_stacks = ExtruderManager.getInstance().getUsedExtruderStacks() + for extruder_stack in extruders_stacks: + color = "" + if extruder_stack.material: + color = extruder_stack.material.getMetaDataEntry("color_code") + + self._settings_groups.append(SettingsExportGroup(extruder_stack, + "Extruder settings", + SettingsExportGroup.Category.Extruder, + self._exportSettings(extruder_stack), + extruder_index=extruder_stack.position, + extruder_color=color)) + + # Display per-model settings + scene_root = application.getController().getScene().getRoot() + for scene_node in scene_root.getChildren(): + per_model_stack = scene_node.callDecoration("getStack") + if per_model_stack is not None: + self._settings_groups.append(SettingsExportGroup(per_model_stack, + "Model settings", + SettingsExportGroup.Category.Model, + self._exportSettings(per_model_stack), + scene_node.getName())) + + @pyqtProperty(list, constant=True) + def settingsGroups(self) -> List[SettingsExportGroup]: + return self._settings_groups + + @staticmethod + def _exportSettings(settings_stack): + user_settings_container = settings_stack.userChanges + user_keys = user_settings_container.getAllKeys() + + settings_export = [] + + for setting_to_export in user_keys: + label = settings_stack.getProperty(setting_to_export, "label") + value = settings_stack.getProperty(setting_to_export, "value") + unit = settings_stack.getProperty(setting_to_export, "unit") + + setting_type = settings_stack.getProperty(setting_to_export, "type") + if setting_type is not None: + # This is not very good looking, but will do for now + value = f"{str(SettingDefinition.settingValueToString(setting_type, value))} {unit}" + else: + value = str(value) + + settings_export.append(SettingExport(setting_to_export, + label, + value, + setting_to_export in SettingsExportModel.EXPORTABLE_SETTINGS)) + + return settings_export diff --git a/plugins/3MFWriter/SettingsSelectionGroup.qml b/plugins/3MFWriter/SettingsSelectionGroup.qml new file mode 100644 index 0000000000..e77ba692bc --- /dev/null +++ b/plugins/3MFWriter/SettingsSelectionGroup.qml @@ -0,0 +1,87 @@ +// Copyright (c) 2024 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.3 +import QtQuick.Window 2.2 + +import UM 1.5 as UM +import Cura 1.1 as Cura +import ThreeMFWriter 1.0 as ThreeMFWriter + +ColumnLayout +{ + id: settingsGroup + spacing: UM.Theme.getSize("narrow_margin").width + + RowLayout + { + id: settingsGroupTitleRow + spacing: UM.Theme.getSize("default_margin").width + + Item + { + id: icon + height: UM.Theme.getSize("medium_button_icon").height + width: height + + UM.ColorImage + { + id: settingsMainImage + anchors.fill: parent + source: + { + switch(modelData.category) + { + case ThreeMFWriter.SettingsExportGroup.Global: + return UM.Theme.getIcon("Sliders") + case ThreeMFWriter.SettingsExportGroup.Model: + return UM.Theme.getIcon("View3D") + default: + return "" + } + } + + color: UM.Theme.getColor("text") + } + + Cura.ExtruderIcon + { + id: settingsExtruderIcon + anchors.fill: parent + visible: modelData.category === ThreeMFWriter.SettingsExportGroup.Extruder + text: (modelData.extruder_index + 1).toString() + font: UM.Theme.getFont("tiny_emphasis") + materialColor: modelData.extruder_color + } + } + + UM.Label + { + id: settingsTitle + text: modelData.name + (modelData.category_details ? ' (%1)'.arg(modelData.category_details) : '') + font: UM.Theme.getFont("default_bold") + } + } + + ListView + { + id: settingsExportList + Layout.fillWidth: true + Layout.preferredHeight: contentHeight + spacing: 0 + model: modelData.settings + visible: modelData.settings.length > 0 + + delegate: SettingSelection { } + } + + UM.Label + { + UM.I18nCatalog { id: catalog; name: "cura" } + + text: catalog.i18nc("@label", "No specific value has been set") + visible: modelData.settings.length === 0 + } +} diff --git a/plugins/3MFWriter/ThreeMFWorkspaceWriter.py b/plugins/3MFWriter/ThreeMFWorkspaceWriter.py index e89af5c70a..2536f5dacb 100644 --- a/plugins/3MFWriter/ThreeMFWorkspaceWriter.py +++ b/plugins/3MFWriter/ThreeMFWorkspaceWriter.py @@ -1,9 +1,13 @@ # Copyright (c) 2020 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import Optional + import configparser from io import StringIO +from threading import Lock import zipfile +from typing import Dict, Any from UM.Application import Application from UM.Logger import Logger @@ -13,15 +17,23 @@ from UM.Workspace.WorkspaceWriter import WorkspaceWriter from UM.i18n import i18nCatalog catalog = i18nCatalog("cura") -from cura.Utils.Threading import call_on_qt_thread +from .ThreeMFWriter import ThreeMFWriter +from .SettingsExportModel import SettingsExportModel +from .SettingsExportGroup import SettingsExportGroup + +USER_SETTINGS_PATH = "Cura/user-settings.json" class ThreeMFWorkspaceWriter(WorkspaceWriter): def __init__(self): super().__init__() + self._ucp_model: Optional[SettingsExportModel] = None - @call_on_qt_thread - def write(self, stream, nodes, mode=WorkspaceWriter.OutputMode.BinaryMode): + def setExportModel(self, model: SettingsExportModel) -> None: + if self._ucp_model != model: + self._ucp_model = model + + def _write(self, stream, nodes, mode=WorkspaceWriter.OutputMode.BinaryMode): application = Application.getInstance() machine_manager = application.getMachineManager() @@ -34,20 +46,20 @@ class ThreeMFWorkspaceWriter(WorkspaceWriter): global_stack = machine_manager.activeMachine if global_stack is None: - self.setInformation(catalog.i18nc("@error", "There is no workspace yet to write. Please add a printer first.")) + self.setInformation( + catalog.i18nc("@error", "There is no workspace yet to write. Please add a printer first.")) Logger.error("Tried to write a 3MF workspace before there was a global stack.") return False # Indicate that the 3mf mesh writer should not close the archive just yet (we still need to add stuff to it). mesh_writer.setStoreArchive(True) - if not mesh_writer.write(stream, nodes, mode): + if not mesh_writer.write(stream, nodes, mode, self._ucp_model): self.setInformation(mesh_writer.getInformation()) return False archive = mesh_writer.getArchive() if archive is None: # This happens if there was no mesh data to write. - archive = zipfile.ZipFile(stream, "w", compression = zipfile.ZIP_DEFLATED) - + archive = zipfile.ZipFile(stream, "w", compression=zipfile.ZIP_DEFLATED) try: # Add global container stack data to the archive. @@ -62,15 +74,21 @@ class ThreeMFWorkspaceWriter(WorkspaceWriter): self._writeContainerToArchive(extruder_stack, archive) for container in extruder_stack.getContainers(): self._writeContainerToArchive(container, archive) + + # Write user settings data + if self._ucp_model is not None: + user_settings_data = self._getUserSettings(self._ucp_model) + ThreeMFWriter._storeMetadataJson(user_settings_data, archive, USER_SETTINGS_PATH) except PermissionError: self.setInformation(catalog.i18nc("@error:zip", "No permission to write the workspace here.")) Logger.error("No permission to write workspace to this stream.") return False # Write preferences to archive - original_preferences = Application.getInstance().getPreferences() #Copy only the preferences that we use to the workspace. + original_preferences = Application.getInstance().getPreferences() # Copy only the preferences that we use to the workspace. temp_preferences = Preferences() - for preference in {"general/visible_settings", "cura/active_mode", "cura/categories_expanded", "metadata/setting_version"}: + for preference in {"general/visible_settings", "cura/active_mode", "cura/categories_expanded", + "metadata/setting_version"}: temp_preferences.addPreference(preference, None) temp_preferences.setValue(preference, original_preferences.getValue(preference)) preferences_string = StringIO() @@ -81,7 +99,7 @@ class ThreeMFWorkspaceWriter(WorkspaceWriter): # Save Cura version version_file = zipfile.ZipInfo("Cura/version.ini") - version_config_parser = configparser.ConfigParser(interpolation = None) + version_config_parser = configparser.ConfigParser(interpolation=None) version_config_parser.add_section("versions") version_config_parser.set("versions", "cura_version", application.getVersion()) version_config_parser.set("versions", "build_type", application.getBuildType()) @@ -101,11 +119,17 @@ class ThreeMFWorkspaceWriter(WorkspaceWriter): return False except EnvironmentError as e: self.setInformation(catalog.i18nc("@error:zip", str(e))) - Logger.error("EnvironmentError when writing workspace to this stream: {err}".format(err = str(e))) + Logger.error("EnvironmentError when writing workspace to this stream: {err}".format(err=str(e))) return False mesh_writer.setStoreArchive(False) + return True + def write(self, stream, nodes, mode=WorkspaceWriter.OutputMode.BinaryMode): + success = self._write(stream, nodes, mode=WorkspaceWriter.OutputMode.BinaryMode) + self._ucp_model = None + return success + @staticmethod def _writePluginMetadataToArchive(archive: zipfile.ZipFile) -> None: file_name_template = "%s/plugin_metadata.json" @@ -165,4 +189,27 @@ class ThreeMFWorkspaceWriter(WorkspaceWriter): archive.writestr(file_in_archive, serialized_data) except (FileNotFoundError, EnvironmentError): Logger.error("File became inaccessible while writing to it: {archive_filename}".format(archive_filename = archive.fp.name)) - return \ No newline at end of file + return + + @staticmethod + def _getUserSettings(model: SettingsExportModel) -> Dict[str, Dict[str, Any]]: + user_settings = {} + + for group in model.settingsGroups: + category = '' + if group.category == SettingsExportGroup.Category.Global: + category = 'global' + elif group.category == SettingsExportGroup.Category.Extruder: + category = f"extruder_{group.extruder_index}" + + if len(category) > 0: + settings_values = {} + stack = group.stack + + for setting in group.settings: + if setting.selected: + settings_values[setting.id] = stack.getProperty(setting.id, "value") + + user_settings[category] = settings_values + + return user_settings \ No newline at end of file diff --git a/plugins/3MFWriter/ThreeMFWriter.py b/plugins/3MFWriter/ThreeMFWriter.py index ad4b0d8dad..5583059a2f 100644 --- a/plugins/3MFWriter/ThreeMFWriter.py +++ b/plugins/3MFWriter/ThreeMFWriter.py @@ -10,22 +10,24 @@ from UM.Math.Vector import Vector from UM.Logger import Logger from UM.Math.Matrix import Matrix from UM.Application import Application +from UM.OutputDevice import OutputDeviceError from UM.Message import Message from UM.Resources import Resources from UM.Scene.SceneNode import SceneNode from UM.Settings.ContainerRegistry import ContainerRegistry -from UM.Settings.EmptyInstanceContainer import EmptyInstanceContainer from cura.CuraApplication import CuraApplication from cura.CuraPackageManager import CuraPackageManager from cura.Settings import CuraContainerStack from cura.Utils.Threading import call_on_qt_thread +from cura.Scene.CuraSceneNode import CuraSceneNode from cura.Snapshot import Snapshot -from PyQt6.QtCore import QBuffer +from PyQt6.QtCore import Qt, QBuffer +from PyQt6.QtGui import QImage, QPainter import pySavitar as Savitar - +from .UCPDialog import UCPDialog import numpy import datetime @@ -40,6 +42,9 @@ except ImportError: import zipfile import UM.Application +from .SettingsExportModel import SettingsExportModel +from .SettingsExportGroup import SettingsExportGroup + from UM.i18n import i18nCatalog catalog = i18nCatalog("cura") @@ -87,7 +92,9 @@ class ThreeMFWriter(MeshWriter): self._store_archive = store_archive @staticmethod - def _convertUMNodeToSavitarNode(um_node, transformation=Matrix()): + def _convertUMNodeToSavitarNode(um_node, + transformation = Matrix(), + exported_settings: Optional[Dict[str, Set[str]]] = None): """Convenience function that converts an Uranium SceneNode object to a SavitarSceneNode :returns: Uranium Scene node. @@ -129,13 +136,26 @@ class ThreeMFWriter(MeshWriter): if stack is not None: changed_setting_keys = stack.getTop().getAllKeys() - # Ensure that we save the extruder used for this object in a multi-extrusion setup - if stack.getProperty("machine_extruder_count", "value") > 1: - changed_setting_keys.add("extruder_nr") + if exported_settings is None: + # Ensure that we save the extruder used for this object in a multi-extrusion setup + if stack.getProperty("machine_extruder_count", "value") > 1: + changed_setting_keys.add("extruder_nr") - # Get values for all changed settings & save them. - for key in changed_setting_keys: - savitar_node.setSetting("cura:" + key, str(stack.getProperty(key, "value"))) + # Get values for all changed settings & save them. + for key in changed_setting_keys: + savitar_node.setSetting("cura:" + key, str(stack.getProperty(key, "value"))) + else: + # We want to export only the specified settings + if um_node.getName() in exported_settings: + model_exported_settings = exported_settings[um_node.getName()] + + # Get values for all exported settings & save them. + for key in model_exported_settings: + savitar_node.setSetting("cura:" + key, str(stack.getProperty(key, "value"))) + + if isinstance(um_node, CuraSceneNode): + savitar_node.setSetting("cura:print_order", str(um_node.printOrder)) + savitar_node.setSetting("cura:drop_to_buildplate", str(um_node.isDropDownEnabled)) # Store the metadata. for key, value in um_node.metadata.items(): @@ -145,7 +165,8 @@ 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 = ThreeMFWriter._convertUMNodeToSavitarNode(child_node) + savitar_child_node = ThreeMFWriter._convertUMNodeToSavitarNode(child_node, + exported_settings = exported_settings) if savitar_child_node is not None: savitar_node.addChild(savitar_child_node) @@ -154,7 +175,24 @@ class ThreeMFWriter(MeshWriter): def getArchive(self): return self._archive - def write(self, stream, nodes, mode = MeshWriter.OutputMode.BinaryMode) -> bool: + def _addLogoToThumbnail(self, primary_image, logo_name): + # Load the icon png image + icon_image = QImage(Resources.getPath(Resources.Images, logo_name)) + + # Resize icon_image to be 1/4 of primary_image size + new_width = int(primary_image.width() / 4) + new_height = int(primary_image.height() / 4) + icon_image = icon_image.scaled(new_width, new_height, Qt.AspectRatioMode.KeepAspectRatio) + # Create a QPainter to draw on the image + painter = QPainter(primary_image) + + # Draw the icon in the top-left corner (adjust coordinates as needed) + icon_position = (10, 10) + painter.drawImage(icon_position[0], icon_position[1], icon_image) + + painter.end() + + def write(self, stream, nodes, mode = MeshWriter.OutputMode.BinaryMode, export_settings_model = None) -> bool: self._archive = None # Reset archive archive = zipfile.ZipFile(stream, "w", compression = zipfile.ZIP_DEFLATED) try: @@ -178,6 +216,10 @@ class ThreeMFWriter(MeshWriter): # Attempt to add a thumbnail snapshot = self._createSnapshot() if snapshot: + if export_settings_model != None: + self._addLogoToThumbnail(snapshot, "cura-share.png") + elif export_settings_model == None and self._store_archive: + self._addLogoToThumbnail(snapshot, "cura-icon.png") thumbnail_buffer = QBuffer() thumbnail_buffer.open(QBuffer.OpenModeFlag.ReadWrite) snapshot.save(thumbnail_buffer, "PNG") @@ -232,14 +274,20 @@ class ThreeMFWriter(MeshWriter): transformation_matrix.preMultiply(translation_matrix) root_node = UM.Application.Application.getInstance().getController().getScene().getRoot() + exported_model_settings = ThreeMFWriter._extractModelExportedSettings(export_settings_model) if export_settings_model != None else None + for node in nodes: if node == root_node: for root_child in node.getChildren(): - savitar_node = ThreeMFWriter._convertUMNodeToSavitarNode(root_child, transformation_matrix) + savitar_node = ThreeMFWriter._convertUMNodeToSavitarNode(root_child, + transformation_matrix, + exported_model_settings) if savitar_node: savitar_scene.addSceneNode(savitar_node) else: - savitar_node = self._convertUMNodeToSavitarNode(node, transformation_matrix) + savitar_node = self._convertUMNodeToSavitarNode(node, + transformation_matrix, + exported_model_settings) if savitar_node: savitar_scene.addSceneNode(savitar_node) @@ -395,3 +443,59 @@ class ThreeMFWriter(MeshWriter): parser = Savitar.ThreeMFParser() scene_string = parser.sceneToString(savitar_scene) return scene_string + + @staticmethod + def _extractModelExportedSettings(model: Optional[SettingsExportModel]) -> Dict[str, Set[str]]: + extra_settings = {} + + if model is not None: + for group in model.settingsGroups: + if group.category == SettingsExportGroup.Category.Model: + exported_model_settings = set() + + for exported_setting in group.settings: + if exported_setting.selected: + exported_model_settings.add(exported_setting.id) + + extra_settings[group.category_details] = exported_model_settings + + return extra_settings + + def exportUcp(self): + preferences = CuraApplication.getInstance().getPreferences() + if preferences.getValue("cura/dialog_on_ucp_project_save"): + self._config_dialog = UCPDialog() + self._config_dialog.show() + else: + application = CuraApplication.getInstance() + workspace_handler = application.getInstance().getWorkspaceFileHandler() + + # Set the model to the workspace writer + mesh_writer = workspace_handler.getWriter("3MFWriter") + mesh_writer.setExportModel(SettingsExportModel()) + + # Open file dialog and write the file + device = application.getOutputDeviceManager().getOutputDevice("local_file") + nodes = [application.getController().getScene().getRoot()] + + file_name = CuraApplication.getInstance().getPrintInformation().baseName + + try: + device.requestWrite( + nodes, + file_name, + ["application/vnd.ms-package.3dmanufacturing-3dmodel+xml"], + workspace_handler, + preferred_mimetype_list="application/vnd.ms-package.3dmanufacturing-3dmodel+xml" + ) + except OutputDeviceError.UserCanceledError: + self._onRejected() + except Exception as e: + message = Message( + catalog.i18nc("@info:error", "Unable to write to file: {0}", file_name), + title=catalog.i18nc("@info:title", "Error"), + message_type=Message.MessageType.ERROR + ) + message.show() + Logger.logException("e", "Unable to write to file %s: %s", file_name, e) + self._onRejected() diff --git a/plugins/3MFWriter/UCPDialog.py b/plugins/3MFWriter/UCPDialog.py new file mode 100644 index 0000000000..bedfb4d0da --- /dev/null +++ b/plugins/3MFWriter/UCPDialog.py @@ -0,0 +1,114 @@ +# Copyright (c) 2024 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +import os + +from PyQt6.QtCore import pyqtSignal, QObject + +import UM +from UM.FlameProfiler import pyqtSlot +from UM.OutputDevice import OutputDeviceError +from UM.Workspace.WorkspaceWriter import WorkspaceWriter +from UM.i18n import i18nCatalog +from UM.Logger import Logger +from UM.Message import Message + +from cura.CuraApplication import CuraApplication + +from .SettingsExportModel import SettingsExportModel + +i18n_catalog = i18nCatalog("cura") + + +class UCPDialog(QObject): + finished = pyqtSignal(bool) + + def __init__(self, parent = None) -> None: + super().__init__(parent) + + plugin_path = os.path.dirname(__file__) + dialog_path = os.path.join(plugin_path, 'UCPDialog.qml') + self._model = SettingsExportModel() + self._view = CuraApplication.getInstance().createQmlComponent( + dialog_path, + { + "manager": self, + "settingsExportModel": self._model + } + ) + self._view.accepted.connect(self._onAccepted) + self._view.rejected.connect(self._onRejected) + self._finished = False + self._accepted = False + + def show(self) -> None: + self._finished = False + self._accepted = False + self._view.show() + + def getModel(self) -> SettingsExportModel: + return self._model + + @pyqtSlot() + def notifyClosed(self): + self._onFinished() + + def save3mf(self): + application = CuraApplication.getInstance() + workspace_handler = application.getInstance().getWorkspaceFileHandler() + + # Set the model to the workspace writer + mesh_writer = workspace_handler.getWriter("3MFWriter") + mesh_writer.setExportModel(self._model) + + # Open file dialog and write the file + device = application.getOutputDeviceManager().getOutputDevice("local_file") + nodes = [application.getController().getScene().getRoot()] + + device.writeError.connect(lambda: self._onRejected()) + device.writeSuccess.connect(lambda: self._onSuccess()) + device.writeFinished.connect(lambda: self._onFinished()) + + file_name = CuraApplication.getInstance().getPrintInformation().baseName + + try: + device.requestWrite( + nodes, + file_name, + ["application/vnd.ms-package.3dmanufacturing-3dmodel+xml"], + workspace_handler, + preferred_mimetype_list="application/vnd.ms-package.3dmanufacturing-3dmodel+xml" + ) + except OutputDeviceError.UserCanceledError: + self._onRejected() + except Exception as e: + message = Message( + i18n_catalog.i18nc("@info:error", "Unable to write to file: {0}", file_name), + title=i18n_catalog.i18nc("@info:title", "Error"), + message_type=Message.MessageType.ERROR + ) + message.show() + Logger.logException("e", "Unable to write to file %s: %s", file_name, e) + self._onRejected() + + def _onAccepted(self): + self.save3mf() + + def _onRejected(self): + self._onFinished() + + def _onSuccess(self): + self._accepted = True + self._onFinished() + + def _onFinished(self): + # Make sure we don't send the finished signal twice, whatever happens + if self._finished: + return + self._finished = True + + # Reset the model to the workspace writer + mesh_writer = CuraApplication.getInstance().getInstance().getWorkspaceFileHandler().getWriter("3MFWriter") + mesh_writer.setExportModel(None) + + self.finished.emit(self._accepted) diff --git a/plugins/3MFWriter/UCPDialog.qml b/plugins/3MFWriter/UCPDialog.qml new file mode 100644 index 0000000000..3a0e6bf842 --- /dev/null +++ b/plugins/3MFWriter/UCPDialog.qml @@ -0,0 +1,125 @@ +// Copyright (c) 2024 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.3 +import QtQuick.Window 2.2 + +import UM 1.5 as UM +import Cura 1.1 as Cura + +UM.Dialog +{ + id: exportDialog + title: catalog.i18nc("@title:window", "Export Universal Cura Project") + + margin: UM.Theme.getSize("default_margin").width + minimumWidth: UM.Theme.getSize("modal_window_minimum").width + minimumHeight: UM.Theme.getSize("modal_window_minimum").height + + backgroundColor: UM.Theme.getColor("detail_background") + property bool dontShowAgain: false + + function storeDontShowAgain() + { + UM.Preferences.setValue("cura/dialog_on_ucp_project_save", !dontShowAgainCheckbox.checked) + UM.Preferences.setValue("cura/asked_dialog_on_ucp_project_save", false) + } + + onVisibleChanged: + { + if(visible && UM.Preferences.getValue("cura/asked_dialog_on_ucp_project_save")) + { + dontShowAgain = !UM.Preferences.getValue("cura/dialog_on_ucp_project_save") + } + } + + headerComponent: Rectangle + { + height: childrenRect.height + 2 * UM.Theme.getSize("default_margin").height + color: UM.Theme.getColor("main_background") + + ColumnLayout + { + id: headerColumn + + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + anchors.topMargin: UM.Theme.getSize("default_margin").height + anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.rightMargin: anchors.leftMargin + + UM.Label + { + id: titleLabel + text: catalog.i18nc("@action:title", "Summary - Universal Cura Project") + font: UM.Theme.getFont("large") + } + + UM.Label + { + id: descriptionLabel + text: catalog.i18nc("@action:description", "When exporting a Universal Cura Project, all the models present on the build plate will be included with their current position, orientation and scale. You can also select which per-extruder or per-model settings should be included to ensure a proper printing of the batch, even on different printers.") + font: UM.Theme.getFont("default") + wrapMode: Text.Wrap + Layout.maximumWidth: headerColumn.width + } + } + } + + Rectangle + { + anchors.fill: parent + color: UM.Theme.getColor("main_background") + + UM.I18nCatalog { id: catalog; name: "cura" } + + ListView + { + id: settingsExportList + anchors.fill: parent + anchors.margins: UM.Theme.getSize("default_margin").width + spacing: UM.Theme.getSize("thick_margin").height + model: settingsExportModel.settingsGroups + clip: true + + ScrollBar.vertical: UM.ScrollBar { id: verticalScrollBar } + + delegate: SettingsSelectionGroup { Layout.margins: 0 } + } + } + leftButtons: + [ + UM.CheckBox + { + id: dontShowAgainCheckbox + text: catalog.i18nc("@action:label", "Don't show project summary on save again") + checked: dontShowAgain + } + ] + rightButtons: + [ + Cura.TertiaryButton + { + text: catalog.i18nc("@action:button", "Cancel") + onClicked: reject() + }, + Cura.PrimaryButton + { + text: catalog.i18nc("@action:button", "Save project") + onClicked: accept() + } + ] + + buttonSpacing: UM.Theme.getSize("wide_margin").width + + onClosing: + { + storeDontShowAgain() + manager.notifyClosed() + } + onRejected: storeDontShowAgain() + onAccepted: storeDontShowAgain() +} diff --git a/plugins/3MFWriter/__init__.py b/plugins/3MFWriter/__init__.py index eb8a596afe..0b2976c386 100644 --- a/plugins/3MFWriter/__init__.py +++ b/plugins/3MFWriter/__init__.py @@ -2,9 +2,12 @@ # Uranium is released under the terms of the LGPLv3 or higher. import sys +from PyQt6.QtQml import qmlRegisterType + from UM.Logger import Logger try: from . import ThreeMFWriter + from .SettingsExportGroup import SettingsExportGroup threemf_writer_was_imported = True except ImportError: Logger.log("w", "Could not import ThreeMFWriter; libSavitar may be missing") @@ -23,20 +26,24 @@ def getMetaData(): if threemf_writer_was_imported: metaData["mesh_writer"] = { - "output": [{ - "extension": "3mf", - "description": i18n_catalog.i18nc("@item:inlistbox", "3MF file"), - "mime_type": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml", - "mode": ThreeMFWriter.ThreeMFWriter.OutputMode.BinaryMode - }] + "output": [ + { + "extension": "3mf", + "description": i18n_catalog.i18nc("@item:inlistbox", "3MF file"), + "mime_type": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml", + "mode": ThreeMFWriter.ThreeMFWriter.OutputMode.BinaryMode + } + ] } metaData["workspace_writer"] = { - "output": [{ - "extension": workspace_extension, - "description": i18n_catalog.i18nc("@item:inlistbox", "Cura Project 3MF file"), - "mime_type": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml", - "mode": ThreeMFWorkspaceWriter.ThreeMFWorkspaceWriter.OutputMode.BinaryMode - }] + "output": [ + { + "extension": workspace_extension, + "description": i18n_catalog.i18nc("@item:inlistbox", "Cura Project 3MF file"), + "mime_type": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml", + "mode": ThreeMFWorkspaceWriter.ThreeMFWorkspaceWriter.OutputMode.BinaryMode + } + ] } return metaData @@ -44,6 +51,8 @@ def getMetaData(): def register(app): if "3MFWriter.ThreeMFWriter" in sys.modules: + qmlRegisterType(SettingsExportGroup, "ThreeMFWriter", 1, 0, "SettingsExportGroup") + return {"mesh_writer": ThreeMFWriter.ThreeMFWriter(), "workspace_writer": ThreeMFWorkspaceWriter.ThreeMFWorkspaceWriter()} else: diff --git a/plugins/3MFWriter/plugin.json b/plugins/3MFWriter/plugin.json index b59d4ef8e1..254384dc25 100644 --- a/plugins/3MFWriter/plugin.json +++ b/plugins/3MFWriter/plugin.json @@ -2,7 +2,7 @@ "name": "3MF Writer", "author": "Ultimaker B.V.", "version": "1.0.1", - "description": "Provides support for writing 3MF files.", + "description": "Provides support for writing 3MF and UCP files.", "api": 8, "i18n-catalog": "cura" } diff --git a/plugins/CuraEngineBackend/Cura.proto b/plugins/CuraEngineBackend/Cura.proto index 9593b83528..238829ba64 100644 --- a/plugins/CuraEngineBackend/Cura.proto +++ b/plugins/CuraEngineBackend/Cura.proto @@ -35,6 +35,8 @@ message Slice repeated EnginePlugin engine_plugins = 5; string sentry_id = 6; // The anonymized Sentry user id that requested the slice string cura_version = 7; // The version of Cura that requested the slice + optional string project_name = 8; // The name of the project that requested the slice + optional string user_name = 9; // The Digital Factory account name of the user that requested the slice } message Extruder diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index 818766d766..c73dee2fb0 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -76,6 +76,7 @@ class CuraEngineBackend(QObject, Backend): self._default_engine_location = executable_name search_path = [ + os.path.abspath(os.path.join(os.path.dirname(sys.executable), "..", "Resources")), os.path.abspath(os.path.dirname(sys.executable)), os.path.abspath(os.path.join(os.path.dirname(sys.executable), "bin")), os.path.abspath(os.path.join(os.path.dirname(sys.executable), "..")), @@ -164,6 +165,7 @@ class CuraEngineBackend(QObject, Backend): application.getPreferences().addPreference("general/auto_slice", False) application.getPreferences().addPreference("info/send_engine_crash", True) + application.getPreferences().addPreference("info/anonymous_engine_crash_report", True) self._use_timer: bool = False @@ -179,7 +181,10 @@ class CuraEngineBackend(QObject, Backend): application.getPreferences().preferenceChanged.connect(self._onPreferencesChanged) self._slicing_error_message = Message( - text = catalog.i18nc("@message", "Slicing failed with an unexpected error. Please consider reporting a bug on our issue tracker."), + text = catalog.i18nc("@message", "Oops! We encountered an unexpected error during your slicing process. " + "Rest assured, we've automatically received the crash logs for analysis, " + "if you have not disabled data sharing in your preferences. To assist us " + "further, consider sharing your project details on our issue tracker."), title = catalog.i18nc("@message:title", "Slicing failed"), message_type = Message.MessageType.ERROR ) @@ -1094,14 +1099,14 @@ class CuraEngineBackend(QObject, Backend): self._change_timer.timeout.disconnect(self.slice) def _onPreferencesChanged(self, preference: str) -> None: - if preference != "general/auto_slice" and preference != "info/send_engine_crash": + if preference != "general/auto_slice" and preference != "info/send_engine_crash" and preference != "info/anonymous_engine_crash_report": return if preference == "general/auto_slice": auto_slice = self.determineAutoSlicing() if auto_slice: self._change_timer.start() elif preference == "info/send_engine_crash": - os.environ["use_sentry"] = "1" if CuraApplication.getInstance().getPreferences().getValue("info/send_engine_crash") else "0" + os.environ["USE_SENTRY"] = "1" if CuraApplication.getInstance().getPreferences().getValue("info/send_engine_crash") else "0" def tickle(self) -> None: """Tickle the backend so in case of auto slicing, it starts the timer.""" diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index fe7137150b..3a1d7ce431 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -1,4 +1,4 @@ -# Copyright (c) 2023 UltiMaker +# Copyright (c) 2024 UltiMaker # Cura is released under the terms of the LGPLv3 or higher. import uuid @@ -63,13 +63,12 @@ class GcodeStartEndFormatter(Formatter): # will be used. Alternatively, if the expression is formatted as "{[expression], [extruder_nr]}", # then the expression will be evaluated with the extruder stack of the specified extruder_nr. - _extruder_regex = re.compile(r"^\s*(?P.*)\s*,\s*(?P\d+)\s*$") + _extruder_regex = re.compile(r"^\s*(?P.*)\s*,\s*(?P.*)\s*$") - def __init__(self, default_extruder_nr: int = -1, *, - additional_per_extruder_settings: Optional[Dict[str, Dict[str, any]]] = None) -> None: + def __init__(self, all_extruder_settings: Dict[str, Any], default_extruder_nr: int = -1) -> None: super().__init__() + self._all_extruder_settings: Dict[str, Any] = all_extruder_settings self._default_extruder_nr: int = default_extruder_nr - self._additional_per_extruder_settings: Optional[Dict[str, Dict[str, any]]] = additional_per_extruder_settings def get_field(self, field_name, args: [str], kwargs: dict) -> Tuple[str, str]: # get_field method parses all fields in the format-string and parses them individually to the get_value method. @@ -88,22 +87,32 @@ class GcodeStartEndFormatter(Formatter): if expression in post_slice_data_variables: return f"{{{expression}}}" - extruder_nr = self._default_extruder_nr + extruder_nr = str(self._default_extruder_nr) # The settings may specify a specific extruder to use. This is done by - # formatting the expression as "{expression}, {extruder_nr}". If the + # formatting the expression as "{expression}, {extruder_nr_expr}". If the # expression is formatted like this, we extract the extruder_nr and use # it to get the value from the correct extruder stack. match = self._extruder_regex.match(expression) if match: expression = match.group("expression") - extruder_nr = int(match.group("extruder_nr")) + extruder_nr_expr = match.group("extruder_nr_expr") - if self._additional_per_extruder_settings is not None and str( - extruder_nr) in self._additional_per_extruder_settings: - additional_variables = self._additional_per_extruder_settings[str(extruder_nr)] + if extruder_nr_expr.isdigit(): + extruder_nr = extruder_nr_expr + else: + # We get the value of the extruder_nr_expr from `_all_extruder_settings` dictionary + # rather than the global container stack. The `_all_extruder_settings["-1"]` is a + # dict-representation of the global container stack, with additional properties such + # as `initial_extruder_nr`. As users may enter such expressions we can't use the + # global container stack. + extruder_nr = str(self._all_extruder_settings["-1"].get(extruder_nr_expr, "-1")) + + if extruder_nr in self._all_extruder_settings: + additional_variables = self._all_extruder_settings[extruder_nr].copy() else: - additional_variables = dict() + Logger.warning(f"Extruder {extruder_nr} does not exist, using global settings") + additional_variables = self._all_extruder_settings["-1"].copy() # Add the arguments and keyword arguments to the additional settings. These # are currently _not_ used, but they are added for consistency with the @@ -113,15 +122,17 @@ class GcodeStartEndFormatter(Formatter): for key, value in kwargs.items(): additional_variables[key] = value - if extruder_nr == -1: + if extruder_nr == "-1": container_stack = CuraApplication.getInstance().getGlobalContainerStack() else: container_stack = ExtruderManager.getInstance().getExtruderStack(extruder_nr) + if not container_stack: + Logger.warning(f"Extruder {extruder_nr} does not exist, using global settings") + container_stack = CuraApplication.getInstance().getGlobalContainerStack() setting_function = SettingFunction(expression) value = setting_function(container_stack, additional_variables=additional_variables) - return value @@ -131,12 +142,13 @@ class StartSliceJob(Job): def __init__(self, slice_message: Arcus.PythonMessage) -> None: super().__init__() - self._scene = CuraApplication.getInstance().getController().getScene() #type: Scene + self._scene: Scene = CuraApplication.getInstance().getController().getScene() self._slice_message: Arcus.PythonMessage = slice_message - self._is_cancelled = False #type: bool - self._build_plate_number = None #type: Optional[int] + self._is_cancelled: bool = False + self._build_plate_number: Optional[int] = None - self._all_extruders_settings = None #type: Optional[Dict[str, Any]] # cache for all setting values from all stacks (global & extruder) for the current machine + # cache for all setting values from all stacks (global & extruder) for the current machine + self._all_extruders_settings: Optional[Dict[str, Any]] = None def getSliceMessage(self) -> Arcus.PythonMessage: return self._slice_message @@ -337,9 +349,15 @@ class StartSliceJob(Job): user_id = uuid.getnode() # On all of Cura's supported platforms, this returns the MAC address which is pseudonymical information (!= anonymous). user_id %= 2 ** 16 # So to make it anonymous, apply a bitmask selecting only the last 16 bits. This prevents it from being traceable to a specific user but still gives somewhat of an idea of whether it's just the same user hitting the same crash over and over again, or if it's widespread. - self._slice_message.sentry_id = "{user_id}" + self._slice_message.sentry_id = f"{user_id}" self._slice_message.cura_version = CuraVersion + # Add the project name to the message if the user allows for non-anonymous crash data collection. + account = CuraApplication.getInstance().getCuraAPI().account + if account and account.isLoggedIn and not CuraApplication.getInstance().getPreferences().getValue("info/anonymous_engine_crash_report"): + self._slice_message.project_name = CuraApplication.getInstance().getPrintInformation().baseName + self._slice_message.user_name = account.userName + # Build messages for extruder stacks for extruder_stack in global_stack.extruderList: self._buildExtruderMessage(extruder_stack) @@ -471,10 +489,7 @@ class StartSliceJob(Job): # Get "replacement-keys" for the extruders. In the formatter the settings stack is used to get the # replacement values for the setting-keys. However, the values for `material_id`, `material_type`, # etc are not in the settings stack. - additional_per_extruder_settings = self._all_extruders_settings.copy() - additional_per_extruder_settings["default_extruder_nr"] = default_extruder_nr - fmt = GcodeStartEndFormatter(default_extruder_nr=default_extruder_nr, - additional_per_extruder_settings=additional_per_extruder_settings) + fmt = GcodeStartEndFormatter(self._all_extruders_settings, default_extruder_nr=default_extruder_nr) return str(fmt.format(value)) except: Logger.logException("w", "Unable to do token replacement on start/end g-code") diff --git a/plugins/DigitalLibrary/__init__.py b/plugins/DigitalLibrary/__init__.py index 968aef66ee..fc27f873c8 100644 --- a/plugins/DigitalLibrary/__init__.py +++ b/plugins/DigitalLibrary/__init__.py @@ -1,7 +1,6 @@ # Copyright (c) 2021 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase from .src import DigitalFactoryFileProvider, DigitalFactoryOutputDevicePlugin, DigitalFactoryController diff --git a/plugins/DigitalLibrary/src/DigitalFactoryApiClient.py b/plugins/DigitalLibrary/src/DigitalFactoryApiClient.py index 1168928588..c0ce594ecf 100644 --- a/plugins/DigitalLibrary/src/DigitalFactoryApiClient.py +++ b/plugins/DigitalLibrary/src/DigitalFactoryApiClient.py @@ -3,7 +3,6 @@ import json from json import JSONDecodeError -import re from time import time from typing import List, Any, Optional, Union, Type, Tuple, Dict, cast, TypeVar, Callable diff --git a/plugins/DigitalLibrary/src/DigitalFactoryProjectModel.py b/plugins/DigitalLibrary/src/DigitalFactoryProjectModel.py index 92aa92ef4c..bd12a4ca12 100644 --- a/plugins/DigitalLibrary/src/DigitalFactoryProjectModel.py +++ b/plugins/DigitalLibrary/src/DigitalFactoryProjectModel.py @@ -4,7 +4,6 @@ from typing import List, Optional from PyQt6.QtCore import Qt, pyqtSignal -from UM.Logger import Logger from UM.Qt.ListModel import ListModel from .DigitalFactoryProjectResponse import DigitalFactoryProjectResponse diff --git a/plugins/GCodeGzWriter/__init__.py b/plugins/GCodeGzWriter/__init__.py index 95949eee74..1f350d686c 100644 --- a/plugins/GCodeGzWriter/__init__.py +++ b/plugins/GCodeGzWriter/__init__.py @@ -2,7 +2,6 @@ # Cura is released under the terms of the LGPLv3 or higher. from UM.i18n import i18nCatalog -from UM.Platform import Platform from . import GCodeGzWriter diff --git a/plugins/GCodeWriter/GCodeWriter.py b/plugins/GCodeWriter/GCodeWriter.py index 667e064d90..9fa4f88614 100644 --- a/plugins/GCodeWriter/GCodeWriter.py +++ b/plugins/GCodeWriter/GCodeWriter.py @@ -11,7 +11,6 @@ from UM.Settings.InstanceContainer import InstanceContainer from cura.Machines.ContainerTree import ContainerTree from UM.i18n import i18nCatalog -from cura.Settings.CuraStackBuilder import CuraStackBuilder catalog = i18nCatalog("cura") diff --git a/plugins/Marketplace/MissingPackageList.py b/plugins/Marketplace/MissingPackageList.py index 018e977823..38d7718dc0 100644 --- a/plugins/Marketplace/MissingPackageList.py +++ b/plugins/Marketplace/MissingPackageList.py @@ -3,12 +3,10 @@ from typing import Optional, TYPE_CHECKING, Dict, List -from .Constants import PACKAGES_URL from .PackageModel import PackageModel from .RemotePackageList import RemotePackageList from PyQt6.QtCore import pyqtSignal, QObject, pyqtProperty, QCoreApplication -from UM.TaskManagement.HttpRequestManager import HttpRequestManager # To request the package list from the API. from UM.i18n import i18nCatalog if TYPE_CHECKING: diff --git a/plugins/Marketplace/PackageModel.py b/plugins/Marketplace/PackageModel.py index afc6e0ce73..ddd8f9b531 100644 --- a/plugins/Marketplace/PackageModel.py +++ b/plugins/Marketplace/PackageModel.py @@ -2,7 +2,6 @@ # Cura is released under the terms of the LGPLv3 or higher. import re -from enum import Enum from typing import Any, cast, Dict, List, Optional from PyQt6.QtCore import pyqtProperty, QObject, pyqtSignal, pyqtSlot @@ -12,7 +11,6 @@ from cura.CuraApplication import CuraApplication from cura.CuraPackageManager import CuraPackageManager from cura.Settings.CuraContainerRegistry import CuraContainerRegistry # To get names of materials we're compatible with. from UM.i18n import i18nCatalog # To translate placeholder names if data is not present. -from UM.Logger import Logger from UM.PluginRegistry import PluginRegistry catalog = i18nCatalog("cura") diff --git a/plugins/PerObjectSettingsTool/PerObjectItem.qml b/plugins/PerObjectSettingsTool/PerObjectItem.qml index b6cf13943b..cd406c80af 100644 --- a/plugins/PerObjectSettingsTool/PerObjectItem.qml +++ b/plugins/PerObjectSettingsTool/PerObjectItem.qml @@ -25,7 +25,7 @@ UM.TooltipArea onClicked: { addedSettingsModel.setVisible(model.key, checked); - UM.ActiveTool.forceUpdate(); + UM.Controller.forceUpdate(); } } diff --git a/plugins/PerObjectSettingsTool/PerObjectSettingVisibilityHandler.py b/plugins/PerObjectSettingsTool/PerObjectSettingVisibilityHandler.py index 15f37e499d..d6b433a0c2 100644 --- a/plugins/PerObjectSettingsTool/PerObjectSettingVisibilityHandler.py +++ b/plugins/PerObjectSettingsTool/PerObjectSettingVisibilityHandler.py @@ -11,7 +11,7 @@ from UM.Settings.SettingInstance import SettingInstance from UM.Logger import Logger import UM.Settings.Models.SettingVisibilityHandler -from cura.Settings.ExtruderManager import ExtruderManager #To get global-inherits-stack setting values from different extruders. +from cura.Settings.ExtruderManager import ExtruderManager # To get global-inherits-stack setting values from different extruders. from cura.Settings.SettingOverrideDecorator import SettingOverrideDecorator diff --git a/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml b/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml index 0ddedee897..78d6643034 100644 --- a/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml +++ b/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml @@ -23,7 +23,7 @@ Item readonly property string infillMeshType: "infill_mesh" readonly property string antiOverhangMeshType: "anti_overhang_mesh" - property var currentMeshType: UM.ActiveTool.properties.getValue("MeshType") + property var currentMeshType: UM.Controller.properties.getValue("MeshType") // Update the view every time the currentMeshType changes onCurrentMeshTypeChanged: @@ -56,7 +56,7 @@ Item function setMeshType(type) { - UM.ActiveTool.setProperty("MeshType", type) + UM.Controller.setProperty("MeshType", type) updateMeshTypeCheckedState(type) } @@ -224,7 +224,7 @@ Item visibilityHandler: Cura.PerObjectSettingVisibilityHandler { id: visibility_handler - selectedObjectId: UM.ActiveTool.properties.getValue("SelectedObjectId") + selectedObjectId: UM.Controller.properties.getValue("SelectedObjectId") } // For some reason the model object is updated after removing him from the memory and @@ -320,7 +320,7 @@ Item { id: provider - containerStackId: UM.ActiveTool.properties.getValue("ContainerID") + containerStackId: UM.Controller.properties.getValue("ContainerID") key: model.key watchedProperties: [ "value", "enabled", "validationState" ] storeIndex: 0 @@ -330,7 +330,7 @@ Item UM.SettingPropertyProvider { id: inheritStackProvider - containerStackId: UM.ActiveTool.properties.getValue("ContainerID") + containerStackId: UM.Controller.properties.getValue("ContainerID") key: model.key watchedProperties: [ "limit_to_extruder" ] } @@ -381,22 +381,22 @@ Item Connections { - target: UM.ActiveTool + target: UM.Controller function onPropertiesChanged() { - // the values cannot be bound with UM.ActiveTool.properties.getValue() calls, + // the values cannot be bound with UM.Controller.properties.getValue() calls, // so here we connect to the signal and update the those values. - if (typeof UM.ActiveTool.properties.getValue("SelectedObjectId") !== "undefined") + if (typeof UM.Controller.properties.getValue("SelectedObjectId") !== "undefined") { - const selectedObjectId = UM.ActiveTool.properties.getValue("SelectedObjectId") + const selectedObjectId = UM.Controller.properties.getValue("SelectedObjectId") if (addedSettingsModel.visibilityHandler.selectedObjectId != selectedObjectId) { addedSettingsModel.visibilityHandler.selectedObjectId = selectedObjectId } } - if (typeof UM.ActiveTool.properties.getValue("ContainerID") !== "undefined") + if (typeof UM.Controller.properties.getValue("ContainerID") !== "undefined") { - const containerId = UM.ActiveTool.properties.getValue("ContainerID") + const containerId = UM.Controller.properties.getValue("ContainerID") if (provider.containerStackId !== containerId) { provider.containerStackId = containerId diff --git a/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py b/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py new file mode 100644 index 0000000000..44709afd24 --- /dev/null +++ b/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py @@ -0,0 +1,837 @@ +# Designed in January 2023 by GregValiant (Greg Foresi) +## My design intent was to make this as full featured and "industrial strength" as I could. People printing exotic materials on large custom printers may want to turn the fans off for certain layers, and then back on again later in the print. This script allows that. +# Functions: +## Remove all fan speed lines from the file (optional). This should be enabled for the first instance of the script. It is disabled by default in any following instances. +## "By Layer" allows the user to adjust the fan speed up, or down, or off, within the print. "By Feature" allows different fan speeds for different features (;TYPE:WALL-OUTER, etc.). +## If 'By Feature' then a Start Layer and/or an End Layer can be defined. +## Fan speeds are scaled PWM (0 - 255) or RepRap (0.0 - 1.0) depending on {machine_scale_fan_speed_zero_to_one}. +## A minimum fan speed of 12% is enforced. It is the slowest speed that my cooling fan will turn on so that's what I used. 'M106 S14' (as Cura might insert) was pretty useless. +## If multiple extruders have separate fan circuits the speeds are set at tool changes and conform to the layer or feature setting. There is support for up to 4 layer cooling fan circuits. +## My thanks to @5axes(@CUQ), @fieldOfView(@AHoeben), @Ghostkeeper, and @Torgeir. A special thanks to @RBurema for his patience in reviewing my 'non-pythonic' script. +## 9/14/23 (Greg Foresi) Added support for One-at-a-Time print sequence. +## 12/15/23 (Greg Foresi) Split off 'Single Fan By Layer', 'Multi-fan By Layer', 'Single Fan By Feature', and 'Multi-fan By Feature' from the main 'execute' script. +## 1/5/24 (Greg Foresi) Revised the regex replacements. + +from ..Script import Script +from UM.Application import Application +import re + +class AddCoolingProfile(Script): + + def getSettingDataString(self): + return """{ + "name": "Advanced Cooling Fan Control", + "key": "AddCoolingProfile", + "metadata": {}, + "version": 2, + "settings": + { + "fan_layer_or_feature": + { + "label": "Cooling Control by:", + "description": "A fan percentage of ''0'' turns the fan off. Minimum Fan is 12% (when on). All layer entries are the Cura Preview number. ''By Layer'': Enter as ''Layer#/Fan%'' (foreslash is the delimiter). Your final layer speed will continue to the end of the Gcode. ''By Feature'': If you enable an 'End Layer' then the ''Final %'' is available and is the speed that will finish the file. 'By Feature' is better for large slow prints than it is for short fast prints.", + "type": "enum", + "options": { + "by_layer": "Layer Numbers", + "by_feature": "Feature Types"}, + "default_value": "by_layer" + }, + "delete_existing_m106": + { + "label": "Remove M106 lines prior to inserting new.", + "description": "If you have 2 or more instances of 'Advanced Cooling Fan Control' running (to cool a portion of a print differently), then you must uncheck this box or the followup instances will remove all the lines inserted by the first instance. Pay attention to the Start and Stop layers. Regardless of this setting: The script always removes M106 lines starting with the lowest layer number (when 'By Layer') or the starting layer number (when 'By Feature'). If you want to keep the M106 lines that Cura inserted up to the point where this post-processor will start making insertions, then un-check the box.", + "type": "bool", + "enabled": true, + "value": true, + "default_value": true + }, + "feature_fan_start_layer": + { + "label": "Starting Layer", + "description": "Layer to start the insertion at. Use the Cura preview numbers. Changes will begin at the start of that layer.", + "type": "int", + "default_value": 5, + "minimum_value": 1, + "unit": "Lay# ", + "enabled": "fan_layer_or_feature == 'by_feature'" + }, + "feature_fan_end_layer": + { + "label": "Ending Layer", + "description": "Layer to complete the insertion at. Enter '-1' for the entire file or enter a layer number. Insertions will stop at the END of this layer. If you set an End Layer then you should set the Final % that will finish the file", + "type": "int", + "default_value": -1, + "minimum_value": -1, + "unit": "Lay# ", + "enabled": "fan_layer_or_feature == 'by_feature'" + }, + "layer_fan_1": + { + "label": "Layer/Percent #1", + "description": "Enter as: 'LAYER / Percent' Ex: 55/100 with the layer first, then a '/' to delimit, and then the fan percentage. There are up to 8 changes. If you need more then add a second instance of this script and remember to turn off 'Remove M106 lines' in the second instance. The layer numbers in the second instance must start with a layer number higher than the last layer number in a previous script. You can't end the first script with a setting for layer 80 and then start the second script with a setting for layer 40 because 'Remove M106 lines' always starts with the lowest layer number when 'By Layer' is selected.", + "type": "str", + "default_value": "5/30", + "unit": "L#/% ", + "enabled": "fan_layer_or_feature == 'by_layer'" + }, + "layer_fan_2": + { + "label": "Layer/Percent #2", + "description": "Enter as: 'LAYER / Percent' Ex: 55/100 with the layer first, then a '/' to delimit, and then the fan percentage.", + "type": "str", + "default_value": "", + "unit": "L#/% ", + "enabled": "fan_layer_or_feature == 'by_layer'" + }, + "layer_fan_3": + { + "label": "Layer/Percent #3", + "description": "Enter as: 'LAYER / Percent' Ex: 55/100 with the layer first, then a '/' to delimit, and then the fan percentage.", + "type": "str", + "default_value": "", + "unit": "L#/% ", + "enabled": "fan_layer_or_feature == 'by_layer'" + }, + "layer_fan_4": + { + "label": "Layer/Percent #4", + "description": "Enter as: 'LAYER / Percent' Ex: 55/100 with the layer first, then a '/' to delimit, and then the fan percentage.", + "type": "str", + "default_value": "", + "unit": "L#/% ", + "enabled": "fan_layer_or_feature == 'by_layer'" + }, + "layer_fan_5": + { + "label": "Layer/Percent #5", + "description": "Enter as: 'LAYER / Percent' Ex: 55/100 with the layer first, then a '/' to delimit, and then the fan percentage.", + "type": "str", + "default_value": "", + "unit": "L#/% ", + "enabled": "fan_layer_or_feature == 'by_layer'" + }, + "layer_fan_6": + { + "label": "Layer/Percent #6", + "description": "Enter as: 'LAYER / Percent' Ex: 55/100 with the layer first, then a '/' to delimit, and then the fan percentage.", + "type": "str", + "default_value": "", + "unit": "L#/% ", + "enabled": "fan_layer_or_feature == 'by_layer'" + }, + "layer_fan_7": + { + "label": "Layer/Percent #7", + "description": "Enter as: 'LAYER / Percent' Ex: 55/100 with the layer first, then a '/' to delimit, and then the fan percentage.", + "type": "str", + "default_value": "", + "unit": "L#/% ", + "enabled": "fan_layer_or_feature == 'by_layer'" + }, + "layer_fan_8": + { + "label": "Layer/Percent #8", + "description": "Enter as: 'LAYER / Percent' Ex: 55/100 with the layer first, then a '/' to delimit, and then the fan percentage.", + "type": "str", + "default_value": "", + "unit": "L#/% ", + "enabled": "fan_layer_or_feature == 'by_layer'" + }, + "feature_fan_skirt": + { + "label": "Skirt/Brim/Ooze Shield %", + "description": "Enter the fan percentage for skirt/brim. If you are starting at a layer above 1 then this setting only affects Ooze Shields and from the Start Layer up.", + "type": "int", + "default_value": 0, + "minimum_value": 0, + "maximum_value": 100, + "unit": "% ", + "enabled": "fan_layer_or_feature == 'by_feature'" + }, + "feature_fan_wall_inner": + { + "label": "Inner Walls %", + "description": "Enter the fan percentage for the Wall-Inner.", + "type": "int", + "default_value": 35, + "minimum_value": 0, + "maximum_value": 100, + "unit": "% ", + "enabled": "fan_layer_or_feature == 'by_feature'" + }, + "feature_fan_wall_outer": + { + "label": "Outer Walls %", + "description": "Enter the fan percentage for the Wall-Outer.", + "type": "int", + "default_value": 75, + "minimum_value": 0, + "maximum_value": 100, + "unit": "% ", + "enabled": "fan_layer_or_feature == 'by_feature'" + }, + "feature_fan_fill": + { + "label": "Infill %", + "description": "Enter the fan percentage for the Infill.", + "type": "int", + "default_value": 35, + "minimum_value": 0, + "maximum_value": 100, + "unit": "% ", + "enabled": "fan_layer_or_feature == 'by_feature'" + }, + "feature_fan_skin": + { + "label": "Top/Bottom (Skin) %", + "description": "Enter the fan percentage for the Skins.", + "type": "int", + "default_value": 100, + "minimum_value": 0, + "maximum_value": 100, + "unit": "% ", + "enabled": "fan_layer_or_feature == 'by_feature'" + }, + "feature_fan_support": + { + "label": "Support %", + "description": "Enter the fan percentage for the Supports.", + "type": "int", + "default_value": 35, + "minimum_value": 0, + "maximum_value": 100, + "unit": "% ", + "enabled": "fan_layer_or_feature == 'by_feature'" + }, + "feature_fan_support_interface": + { + "label": "Support Interface %", + "description": "Enter the fan percentage for the Support Interface.", + "type": "int", + "default_value": 100, + "minimum_value": 0, + "maximum_value": 100, + "unit": "% ", + "enabled": "fan_layer_or_feature == 'by_feature'" + }, + "feature_fan_prime_tower": + { + "label": "Prime Tower %", + "description": "Enter the fan percentage for the Prime Tower (whether it's used or not).", + "type": "int", + "default_value": 35, + "minimum_value": 0, + "maximum_value": 100, + "unit": "% ", + "enabled": "fan_layer_or_feature == 'by_feature'" + }, + "feature_fan_bridge": + { + "label": "Bridge %", + "description": "Enter the fan percentage for any Bridging (whether it's used on not).", + "type": "int", + "default_value": 100, + "minimum_value": 0, + "maximum_value": 100, + "unit": "% ", + "enabled": "fan_layer_or_feature == 'by_feature'" + }, + "feature_fan_combing": + { + "label": "Fan 'OFF' during Combing:", + "description": "When checked will set the fan to 0% for combing moves over 5 lines long in the gcode. When un-checked the fan speed during combing is whatever the previous speed is set to.", + "type": "bool", + "enabled": "fan_layer_or_feature == 'by_feature'", + "default_value": true + }, + "feature_fan_feature_final": + { + "label": "Final %", + "description": "If you choose an 'End Layer' then this is the fan speed that will carry through to the end of the gcode file. It will go into effect at the 'END' of your End layer.", + "type": "int", + "default_value": 35, + "minimum_value": 0, + "maximum_value": 100, + "unit": "% ", + "enabled": "(int(feature_fan_end_layer) != -1) and (fan_layer_or_feature == 'by_feature')" + }, + "fan_enable_raft": + { + "label": "Enable Raft Cooling", + "description": "Enable the fan for the raft layers. When enabled the Raft Fan Speed will continue until another Layer or Feature setting over-rides it.", + "type": "bool", + "default_value": false, + "enabled": true + }, + "fan_raft_percent": + { + "label": "Raft Fan %:", + "description": "Enter the percentage for the Raft.", + "type": "int", + "default_value": 35, + "minimum_value": 0, + "maximum_value": 100, + "unit": "% ", + "enabled": "fan_enable_raft" + } + } + }""" + + def initialize(self) -> None: + super().initialize() + scripts = Application.getInstance().getGlobalContainerStack().getMetaDataEntry("post_processing_scripts") + if scripts != None: + script_count = scripts.count("AddCoolingProfile") + if script_count > 0: + ## Set 'Remove M106 lines' to "false" if there is already an instance of this script running. + self._instance.setProperty("delete_existing_m106", "value", False) + + def execute(self, data): + #Initialize variables that are buried in if statements. + mycura = Application.getInstance().getGlobalContainerStack() + t0_fan = " P0"; t1_fan = " P0"; t2_fan = " P0"; t3_fan = " P0"; is_multi_extr_print = True + + #Get some information from Cura----------------------------------- + extruder = mycura.extruderList + + #This will be true when fan scale is 0-255pwm and false when it's RepRap 0-1 (Cura 5.x) + fan_mode = True + ##For 4.x versions that don't have the 0-1 option + try: + fan_mode = not bool(extruder[0].getProperty("machine_scale_fan_speed_zero_to_one", "value")) + except: + pass + bed_adhesion = (extruder[0].getProperty("adhesion_type", "value")) + extruder_count = mycura.getProperty("machine_extruder_count", "value") + print_sequence = str(mycura.getProperty("print_sequence", "value")) + + #Assign the fan numbers to the tools------------------------------ + if extruder_count == 1: + is_multi_fan = False + is_multi_extr_print = False + if int((extruder[0].getProperty("machine_extruder_cooling_fan_number", "value"))) > 0: + t0_fan = " P" + str((extruder[0].getProperty("machine_extruder_cooling_fan_number", "value"))) + else: + #No P parameter if there is a single fan circuit------------------ + t0_fan = "" + + #Get the cooling fan numbers for each extruder if the printer has multiple extruders + elif extruder_count > 1: + is_multi_fan = True + t0_fan = " P" + str((extruder[0].getProperty("machine_extruder_cooling_fan_number", "value"))) + if is_multi_fan: + if extruder_count > 1: t1_fan = " P" + str((extruder[1].getProperty("machine_extruder_cooling_fan_number", "value"))) + if extruder_count > 2: t2_fan = " P" + str((extruder[2].getProperty("machine_extruder_cooling_fan_number", "value"))) + if extruder_count > 3: t3_fan = " P" + str((extruder[3].getProperty("machine_extruder_cooling_fan_number", "value"))) + + #Initialize the fan_list with defaults---------------------------- + fan_list = ["z"] * 16 + for num in range(0,15,2): + fan_list[num] = len(data) + fan_list[num + 1] = "M106 S0" + + #Assign the variable values if "By Layer"------------------------- + by_layer_or_feature = self.getSettingValueByKey("fan_layer_or_feature") + if by_layer_or_feature == "by_layer": + ## By layer doesn't do any feature search so there is no need to look for combing moves + feature_fan_combing = False + fan_list[0] = self.getSettingValueByKey("layer_fan_1") + fan_list[2] = self.getSettingValueByKey("layer_fan_2") + fan_list[4] = self.getSettingValueByKey("layer_fan_3") + fan_list[6] = self.getSettingValueByKey("layer_fan_4") + fan_list[8] = self.getSettingValueByKey("layer_fan_5") + fan_list[10] = self.getSettingValueByKey("layer_fan_6") + fan_list[12] = self.getSettingValueByKey("layer_fan_7") + fan_list[14] = self.getSettingValueByKey("layer_fan_8") + ## If there is no '/' delimiter then ignore the line else put the settings in a list + for num in range(0,15,2): + if "/" in fan_list[num]: + fan_list[num + 1] = self._layer_checker(fan_list[num], "p", fan_mode) + fan_list[num] = self._layer_checker(fan_list[num], "l", fan_mode) + + ## Assign the variable values if "By Feature" + elif by_layer_or_feature == "by_feature": + the_start_layer = self.getSettingValueByKey("feature_fan_start_layer") - 1 + the_end_layer = self.getSettingValueByKey("feature_fan_end_layer") + try: + if int(the_end_layer) != -1: + ## Catch a possible input error. + if the_end_layer < the_start_layer: + the_end_layer = the_start_layer + except: + the_end_layer = -1 ## If there is an input error default to the entire gcode file. + + ## Get the speed for each feature + feature_name_list = [] + feature_speed_list = [] + feature_speed_list.append(self._feature_checker(self.getSettingValueByKey("feature_fan_skirt"), fan_mode)); feature_name_list.append(";TYPE:SKIRT") + feature_speed_list.append(self._feature_checker(self.getSettingValueByKey("feature_fan_wall_inner"), fan_mode)); feature_name_list.append(";TYPE:WALL-INNER") + feature_speed_list.append(self._feature_checker(self.getSettingValueByKey("feature_fan_wall_outer"), fan_mode)); feature_name_list.append(";TYPE:WALL-OUTER") + feature_speed_list.append(self._feature_checker(self.getSettingValueByKey("feature_fan_fill"), fan_mode)); feature_name_list.append(";TYPE:FILL") + feature_speed_list.append(self._feature_checker(self.getSettingValueByKey("feature_fan_skin"), fan_mode)); feature_name_list.append(";TYPE:SKIN") + feature_speed_list.append(self._feature_checker(self.getSettingValueByKey("feature_fan_support"), fan_mode)); feature_name_list.append(";TYPE:SUPPORT") + feature_speed_list.append(self._feature_checker(self.getSettingValueByKey("feature_fan_support_interface"), fan_mode)); feature_name_list.append(";TYPE:SUPPORT-INTERFACE") + feature_speed_list.append(self._feature_checker(self.getSettingValueByKey("feature_fan_prime_tower"), fan_mode)); feature_name_list.append(";TYPE:PRIME-TOWER") + feature_speed_list.append(self._feature_checker(self.getSettingValueByKey("feature_fan_bridge"), fan_mode)); feature_name_list.append(";BRIDGE") + feature_speed_list.append(self._feature_checker(self.getSettingValueByKey("feature_fan_feature_final"), fan_mode)); feature_name_list.append("FINAL_FAN") + feature_fan_combing = self.getSettingValueByKey("feature_fan_combing") + if the_end_layer > -1 and by_layer_or_feature == "by_feature": + ## Required so the final speed input can be determined + the_end_is_enabled = True + else: + ## There is no ending layer so do the whole file + the_end_is_enabled = False + if the_end_layer == -1 or the_end_is_enabled == False: + the_end_layer = len(data) + 2 + + ## Find the Layer0Index and the RaftIndex + raft_start_index = 0 + number_of_raft_layers = 0 + layer_0_index = 0 + ## Catch the number of raft layers. + for l_num in range(1,10,1): + layer = data[l_num] + if ";LAYER:-" in layer: + number_of_raft_layers += 1 + if raft_start_index == 0: + raft_start_index = l_num + if ";LAYER:0" in layer: + layer_0_index = l_num + break + + ## Is this a single extruder print on a multi-extruder printer? - get the correct fan number for the extruder being used. + if is_multi_fan: + T0_used = False + T1_used = False + T2_used = False + T3_used = False + ## Bypass the file header and ending gcode. + for num in range(1,len(data)-1,1): + lines = data[num] + if "T0" in lines: + T0_used = True + if "T1" in lines: + T1_used = True + if "T2" in lines: + T2_used = True + if "T3" in lines: + T3_used = True + is_multi_extr_print = True if sum([T0_used, T1_used, T2_used, T3_used]) > 1 else False + + ## On a multi-extruder printer and single extruder print find out which extruder starts the file. + init_fan = t0_fan + if not is_multi_extr_print: + startup = data[1] + lines = startup.split("\n") + for line in lines: + if line == "T1": + t0_fan = t1_fan + elif line == "T2": + t0_fan = t2_fan + elif line == "T3": + t0_fan = t3_fan + elif is_multi_extr_print: + ## On a multi-extruder printer and multi extruder print find out which extruder starts the file. + startup = data[1] + lines = startup.split("\n") + for line in lines: + if line == "T0": + init_fan = t0_fan + elif line == "T1": + init_fan = t1_fan + elif line == "T2": + init_fan = t2_fan + elif line == "T3": + init_fan = t3_fan + else: + init_fan = "" + ## Assign the variable values if "Raft Enabled" + raft_enabled = self.getSettingValueByKey("fan_enable_raft") + if raft_enabled and bed_adhesion == "raft": + fan_sp_raft = self._feature_checker(self.getSettingValueByKey("fan_raft_percent"), fan_mode) + else: + fan_sp_raft = "M106 S0" + + # Start to alter the data----------------------------------------- + ## Strip the existing M106 lines from the file up to the end of the last layer. If a user wants to use more than one instance of this plugin then they won't want to erase the M106 lines that the preceding plugins inserted so 'delete_existing_m106' is an option. + delete_existing_m106 = self.getSettingValueByKey("delete_existing_m106") + if delete_existing_m106: + ## Start deleting from the beginning + start_from = int(raft_start_index) + else: + if by_layer_or_feature == "by_layer": + altered_start_layer = str(len(data)) + ## The fan list layers don't need to be in ascending order. Get the lowest. + for num in range(0,15,2): + try: + if int(fan_list[num]) < int(altered_start_layer): + altered_start_layer = int(fan_list[num]) + except: + pass + elif by_layer_or_feature == "by_feature": + altered_start_layer = int(the_start_layer) - 1 + start_from = int(layer_0_index) + int(altered_start_layer) + ## Strip the M106 and M107 lines from the file + for l_index in range(int(start_from), len(data) - 1, 1): + data[l_index] = re.sub(re.compile("M106(.*)\n"), "", data[l_index]) + data[l_index] = re.sub(re.compile("M107(.*)\n"), "", data[l_index]) + + ## Deal with a raft and with One-At-A-Time print sequence + if raft_enabled and bed_adhesion == "raft": + if print_sequence == "one_at_a_time": + for r_index in range(2,len(data)-2,1): + lines = data[r_index].split("\n") + if not raft_enabled or bed_adhesion != "raft": + if ";LAYER:0" in data[r_index] or ";LAYER:-" in data[r_index]: + lines.insert(1, "M106 S0" + str(t0_fan)) + if raft_enabled and bed_adhesion == "raft": + if ";LAYER:-" in data[r_index]: + ## Turn the raft fan on + lines.insert(1, fan_sp_raft + str(t0_fan)) + ## Shut the raft fan off at layer 0 + if ";LAYER:0" in data[r_index]: + lines.insert(1,"M106 S0" + str(t0_fan)) + data[r_index] = "\n".join(lines) + elif print_sequence == "all_at_once": + layer = data[raft_start_index] + lines = layer.split("\n") + if ";LAYER:-" in layer: + ## Turn the raft fan on + lines.insert(1, fan_sp_raft + str(init_fan)) + layer = "\n".join(lines) + data[raft_start_index] = layer + layer = data[layer_0_index] + lines = layer.split("\n") + ## Shut the raft fan off + lines.insert(1, "M106 S0" + str(init_fan)) + data[layer_0_index] = "\n".join(lines) + else: + for r_index in range(2,len(data)-2,1): + lines = data[r_index].split("\n") + if ";LAYER:0" in data[r_index] or ";LAYER:-" in data[r_index]: + if not "0" in fan_list: + lines.insert(1, "M106 S0" + str(t0_fan)) + data[r_index] = "\n".join(lines) + + ## Turn off all fans at the end of data[1]. If more than one instance of this script is running then this will result in multiple M106 lines. + temp_startup = data[1].split("\n") + temp_startup.insert(len(temp_startup)-2,"M106 S0" + str(t0_fan)) + ## If there are multiple cooling fans shut them all off + if is_multi_fan: + if extruder_count > 1 and t1_fan != t0_fan: temp_startup.insert(len(temp_startup)-2,"M106 S0" + str(t1_fan)) + if extruder_count > 2 and t2_fan != t1_fan and t2_fan != t0_fan: temp_startup.insert(len(temp_startup)-2,"M106 S0" + str(t2_fan)) + if extruder_count > 3 and t3_fan != t2_fan and t3_fan != t1_fan and t3_fan != t0_fan: temp_startup.insert(len(temp_startup)-2,"M106 S0" + str(t3_fan)) + data[1] = "\n".join(temp_startup) + + ## If 'feature_fan_combing' is True then add additional 'MESH:NONMESH' lines for travel moves over 5 lines long + ## For compatibility with 5.3.0 change any MESH:NOMESH to MESH:NONMESH. + if feature_fan_combing: + for layer_num in range(2,len(data)): + layer = data[layer_num] + data[layer_num] = re.sub(";MESH:NOMESH", ";MESH:NONMESH", layer) + data = self._add_travel_comment(data, layer_0_index) + + # Single Fan "By Layer"-------------------------------------------- + if by_layer_or_feature == "by_layer" and not is_multi_fan: + return self._single_fan_by_layer(data, layer_0_index, fan_list, t0_fan) + + # Multi-Fan "By Layer"--------------------------------------------- + if by_layer_or_feature == "by_layer" and is_multi_fan: + return self._multi_fan_by_layer(data, layer_0_index, fan_list, t0_fan, t1_fan, t2_fan, t3_fan) + + #Single Fan "By Feature"------------------------------------------ + if by_layer_or_feature == "by_feature" and (not is_multi_fan or not is_multi_extr_print): + return self._single_fan_by_feature(data, layer_0_index, the_start_layer, the_end_layer, the_end_is_enabled, fan_list, t0_fan, feature_speed_list, feature_name_list, feature_fan_combing) + + #Multi Fan "By Feature"------------------------------------------- + if by_layer_or_feature == "by_feature" and is_multi_fan: + return self._multi_fan_by_feature(data, layer_0_index, the_start_layer, the_end_layer, the_end_is_enabled, fan_list, t0_fan, t1_fan, t2_fan, t3_fan, feature_speed_list, feature_name_list, feature_fan_combing) + + # The Single Fan "By Layer"---------------------------------------- + def _single_fan_by_layer(self, data: str, layer_0_index: int, fan_list: str, t0_fan: str)->str: + layer_number = "0" + single_fan_data = data + for l_index in range(layer_0_index,len(single_fan_data)-1,1): + layer = single_fan_data[l_index] + fan_lines = layer.split("\n") + for fan_line in fan_lines: + if ";LAYER:" in fan_line: + layer_number = str(fan_line.split(":")[1]) + ## If there is a match for the current layer number make the insertion + for num in range(0,15,2): + if layer_number == str(fan_list[num]): + layer = layer.replace(fan_lines[0],fan_lines[0] + "\n" + fan_list[num + 1] + str(t0_fan)) + single_fan_data[l_index] = layer + return single_fan_data + + # Multi-Fan "By Layer"----------------------------------------- + def _multi_fan_by_layer(self, data: str, layer_0_index: int, fan_list: str, t0_fan: str, t1_fan: str, t2_fan: str, t3_fan: str)->str: + multi_fan_data = data + layer_number = "0" + current_fan_speed = "0" + prev_fan = str(t0_fan) + this_fan = str(t0_fan) + start_index = str(len(multi_fan_data)) + for num in range(0,15,2): + ## The fan_list may not be in ascending order. Get the lowest layer number + try: + if int(fan_list[num]) < int(start_index): + start_index = str(fan_list[num]) + except: + pass + ## Move the start point if delete_existing_m106 is false + start_index = int(start_index) + int(layer_0_index) + ## Track the tool number + for num in range(1,int(start_index),1): + layer = multi_fan_data[num] + lines = layer.split("\n") + for line in lines: + if line == "T0": + prev_fan = this_fan + this_fan = t0_fan + elif line == "T1": + prev_fan = this_fan + this_fan = t1_fan + elif line == "T2": + prev_fan = this_fan + this_fan = t2_fan + elif line == "T3": + prev_fan = this_fan + this_fan = t3_fan + for l_index in range(int(start_index),len(multi_fan_data)-1,1): + modified_data = "" + layer = multi_fan_data[l_index] + fan_lines = layer.split("\n") + for fan_line in fan_lines: + ## Prepare to shut down the previous fan and start the next one. + if fan_line.startswith("T"): + if fan_line == "T0": this_fan = str(t0_fan) + if fan_line == "T1": this_fan = str(t1_fan) + if fan_line == "T2": this_fan = str(t2_fan) + if fan_line == "T3": this_fan = str(t3_fan) + modified_data += "M106 S0" + prev_fan + "\n" + modified_data += fan_line + "\n" + modified_data += "M106 S" + str(current_fan_speed) + this_fan + "\n" + prev_fan = this_fan + elif ";LAYER:" in fan_line: + modified_data += fan_line + "\n" + layer_number = str(fan_line.split(":")[1]) + for num in range(0,15,2): + if layer_number == str(fan_list[num]): + modified_data += fan_list[num + 1] + this_fan + "\n" + current_fan_speed = str(fan_list[num + 1].split("S")[1]) + current_fan_speed = str(current_fan_speed.split(" ")[0]) ## Just in case + else: + modified_data += fan_line + "\n" + if modified_data.endswith("\n"): modified_data = modified_data[0:-1] + multi_fan_data[l_index] = modified_data + return multi_fan_data + + # Single fan by feature----------------------------------------------- + def _single_fan_by_feature(self, data: str, layer_0_index: int, the_start_layer: str, the_end_layer: str, the_end_is_enabled: str, fan_list: str, t0_fan: str, feature_speed_list: str, feature_name_list: str, feature_fan_combing: bool)->str: + single_fan_data = data + layer_number = "0" + index = 1 + ## Start with layer:0 + for l_index in range(layer_0_index,len(single_fan_data)-1,1): + modified_data = "" + layer = single_fan_data[l_index] + lines = layer.split("\n") + for line in lines: + if ";LAYER:" in line: + layer_number = str(line.split(":")[1]) + if int(layer_number) >= int(the_start_layer) and int(layer_number) < int(the_end_layer)-1: + temp = line.split(" ")[0] + try: + name_index = feature_name_list.index(temp) + except: + name_index = -1 + if name_index != -1: + modified_data += feature_speed_list[name_index] + t0_fan + "\n" + elif ";MESH:NONMESH" in line: + if feature_fan_combing == True: + modified_data += "M106 S0" + t0_fan + "\n" + modified_data += line + "\n" + ## If an End Layer is defined and is less than the last layer then insert the Final Speed + if line == ";LAYER:" + str(the_end_layer) and the_end_is_enabled == True: + modified_data += feature_speed_list[len(feature_speed_list) - 1] + t0_fan + "\n" + if modified_data.endswith("\n"): modified_data = modified_data[0: - 1] + single_fan_data[l_index] = modified_data + return single_fan_data + + # Multi-fan by feature------------------------------------------------ + def _multi_fan_by_feature(self, data: str, layer_0_index: int, the_start_layer: str, the_end_layer: str, the_end_is_enabled: str, fan_list: str, t0_fan: str, t1_fan: str, t2_fan: str, t3_fan: str, feature_speed_list: str, feature_name_list: str, feature_fan_combing: bool)->str: + multi_fan_data = data + layer_number = "0" + start_index = 1 + prev_fan = t0_fan + this_fan = t0_fan + modified_data = "" + current_fan_speed = "0" + for my_index in range(1, len(multi_fan_data) - 1, 1): + layer = multi_fan_data[my_index] + if ";LAYER:" + str(the_start_layer) + "\n" in layer: + start_index = int(my_index) - 1 + break + ## Track the previous tool changes + for num in range(1,start_index,1): + layer = multi_fan_data[num] + lines = layer.split("\n") + for line in lines: + if line == "T0": + prev_fan = this_fan + this_fan = t0_fan + elif line == "T1": + prev_fan = this_fan + this_fan = t1_fan + elif line == "T2": + prev_fan = this_fan + this_fan = t2_fan + elif line == "T3": + prev_fan = this_fan + this_fan = t3_fan + ## Get the current tool. + for l_index in range(start_index,start_index + 1,1): + layer = multi_fan_data[l_index] + lines = layer.split("\n") + for line in lines: + if line.startswith("T"): + if line == "T0": this_fan = t0_fan + if line == "T1": this_fan = t1_fan + if line == "T2": this_fan = t2_fan + if line == "T3": this_fan = t3_fan + prev_fan = this_fan + + ## Start to make insertions------------------------------------- + for l_index in range(start_index+1,len(multi_fan_data)-1,1): + layer = multi_fan_data[l_index] + lines = layer.split("\n") + for line in lines: + if line.startswith("T"): + if line == "T0": this_fan = t0_fan + if line == "T1": this_fan = t1_fan + if line == "T2": this_fan = t2_fan + if line == "T3": this_fan = t3_fan + ## Turn off the prev fan + modified_data += "M106 S0" + prev_fan + "\n" + modified_data += line + "\n" + ## Turn on the current fan + modified_data += "M106 S" + str(current_fan_speed) + this_fan + "\n" + prev_fan = this_fan + if ";LAYER:" in line: + layer_number = str(line.split(":")[1]) + modified_data += line + "\n" + if int(layer_number) >= int(the_start_layer): + temp = line.split(" ")[0] + try: + name_index = feature_name_list.index(temp) + except: + name_index = -1 + if name_index != -1: + modified_data += line + "\n" + feature_speed_list[name_index] + this_fan + "\n" + #modified_data += feature_speed_list[name_index] + this_fan + "\n" + current_fan_speed = str(feature_speed_list[name_index].split("S")[1]) + elif ";MESH:NONMESH" in line: + if feature_fan_combing == True: + modified_data += line + "\n" + modified_data += "M106 S0" + this_fan + "\n" + current_fan_speed = "0" + else: + modified_data += line + "\n" + ## If an end layer is defined - Insert the final speed and set the other variables to Final Speed to finish the file + ## There cannot be a break here because if there are multiple fan numbers they still need to be shut off and turned on. + elif line == ";LAYER:" + str(the_end_layer): + modified_data += feature_speed_list[len(feature_speed_list) - 1] + this_fan + "\n" + for set_speed in range(0, len(feature_speed_list) - 2): + feature_speed_list[set_speed] = feature_speed_list[len(feature_speed_list) - 1] + else: + ## Layer and Tool get inserted into modified_data above. All other lines go into modified_data here + if not line.startswith("T") and not line.startswith(";LAYER:"): modified_data += line + "\n" + if modified_data.endswith("\n"): modified_data = modified_data[0: - 1] + multi_fan_data[l_index] = modified_data + modified_data = "" + return multi_fan_data + + #Try to catch layer input errors, set the minimum speed to 12%, and put the strings together + def _layer_checker(self, fan_string: str, ty_pe: str, fan_mode: bool) -> str: + fan_string_l = str(fan_string.split("/")[0]) + try: + if int(fan_string_l) <= 1: fan_string_l = "1" + if fan_string_l == "": fan_string_l = str(len(data)) + except ValueError: + fan_string_l = str(len(data)) + fan_string_l = str(int(fan_string_l) - 1) + fan_string_p = str(fan_string.split("/")[1]) + if fan_string_p == "": fan_string_p = "0" + try: + if int(fan_string_p) < 0: fan_string_p = "0" + if int(fan_string_p) > 100: fan_string_p = "100" + except ValueError: + fan_string_p = "0" + ## Set the minimum fan speed to 12% + if int(fan_string_p) < 12 and int(fan_string_p) != 0: + fan_string_p = "12" + fan_layer_line = str(fan_string_l) + if fan_mode: + fan_percent_line = "M106 S" + str(round(int(fan_string_p) * 2.55)) + else: + fan_percent_line = "M106 S" + str(round(int(fan_string_p) / 100, 1)) + if ty_pe == "l": + return str(fan_layer_line) + elif ty_pe == "p": + return fan_percent_line + + #Try to catch feature input errors, set the minimum speed to 12%, and put the strings together when 'By Feature' + def _feature_checker(self, fan_feat_string: int, fan_mode: bool) -> str: + if fan_feat_string < 0: fan_feat_string = 0 + ## Set the minimum fan speed to 12% + if fan_feat_string > 0 and fan_feat_string < 12: fan_feat_string = 12 + if fan_feat_string > 100: fan_feat_string = 100 + if fan_mode: + fan_sp_feat = "M106 S" + str(round(fan_feat_string * 2.55)) + else: + fan_sp_feat = "M106 S" + str(round(fan_feat_string / 100, 1)) + return fan_sp_feat + + # Add additional travel comments to turn the fan off during combing. + def _add_travel_comment(self, comment_data: str, lay_0_index: str) -> str: + for lay_num in range(int(lay_0_index), len(comment_data)-1,1): + layer = comment_data[lay_num] + lines = layer.split("\n") + ## Copy the data to new_data and make the insertions there + new_data = lines + g0_count = 0 + g0_index = -1 + feature_type = ";TYPE:SUPPORT" + is_travel = False + for index, line in enumerate(lines): + insert_index = 0 + if ";TYPE:" in line: + feature_type = line + is_travel = False + g0_count = 0 + if ";MESH:NONMESH" in line: + is_travel = True + g0_count = 0 + if line.startswith("G0 ") and not is_travel: + g0_count += 1 + if g0_index == -1: + g0_index = lines.index(line) + elif not line.startswith("G0 ") and not is_travel: + ## Add additional 'NONMESH' lines to shut the fan off during long combing moves-------- + if g0_count > 5: + if not is_travel: + new_data.insert(g0_index + insert_index, ";MESH:NONMESH") + insert_index += 1 + ## Add the feature_type at the end of the combing move to turn the fan back on + new_data.insert(g0_index + g0_count + 1, feature_type) + insert_index += 1 + g0_count = 0 + g0_index = -1 + is_travel = False + elif g0_count <= 5: + g0_count = 0 + g0_index = -1 + is_travel = False + comment_data[lay_num] = "\n".join(new_data) + return comment_data \ No newline at end of file diff --git a/plugins/PostProcessingPlugin/scripts/ColorMix.py b/plugins/PostProcessingPlugin/scripts/ColorMix.py index 534c0208cf..000661b46b 100644 --- a/plugins/PostProcessingPlugin/scripts/ColorMix.py +++ b/plugins/PostProcessingPlugin/scripts/ColorMix.py @@ -21,7 +21,7 @@ # M163 - Set Mix Factor # M164 - Save Mix - saves to T2 as a unique mix -import re #To perform the search and replace. +import re # To perform the search and replace. from ..Script import Script class ColorMix(Script): diff --git a/plugins/PostProcessingPlugin/scripts/DisplayFilenameAndLayerOnLCD.py b/plugins/PostProcessingPlugin/scripts/DisplayFilenameAndLayerOnLCD.py index bfe04b2bea..a5edb78d35 100644 --- a/plugins/PostProcessingPlugin/scripts/DisplayFilenameAndLayerOnLCD.py +++ b/plugins/PostProcessingPlugin/scripts/DisplayFilenameAndLayerOnLCD.py @@ -6,7 +6,6 @@ # Description: This plugin is now an option in 'Display Info on LCD' from ..Script import Script -from UM.Application import Application from UM.Message import Message class DisplayFilenameAndLayerOnLCD(Script): diff --git a/plugins/PostProcessingPlugin/scripts/DisplayInfoOnLCD.py b/plugins/PostProcessingPlugin/scripts/DisplayInfoOnLCD.py index 784a18b2e5..63c1c8c788 100644 --- a/plugins/PostProcessingPlugin/scripts/DisplayInfoOnLCD.py +++ b/plugins/PostProcessingPlugin/scripts/DisplayInfoOnLCD.py @@ -30,9 +30,6 @@ from ..Script import Script from UM.Application import Application from UM.Qt.Duration import DurationFormat -import UM.Util -import configparser -from UM.Preferences import Preferences import time import datetime import math diff --git a/plugins/PostProcessingPlugin/scripts/DisplayProgressOnLCD.py b/plugins/PostProcessingPlugin/scripts/DisplayProgressOnLCD.py index 4d24aedac0..03cb375514 100644 --- a/plugins/PostProcessingPlugin/scripts/DisplayProgressOnLCD.py +++ b/plugins/PostProcessingPlugin/scripts/DisplayProgressOnLCD.py @@ -7,8 +7,6 @@ from ..Script import Script -import re -import datetime from UM.Message import Message class DisplayProgressOnLCD(Script): diff --git a/plugins/PostProcessingPlugin/scripts/FilamentChange.py b/plugins/PostProcessingPlugin/scripts/FilamentChange.py index 93941c0992..6fe28ef2f2 100644 --- a/plugins/PostProcessingPlugin/scripts/FilamentChange.py +++ b/plugins/PostProcessingPlugin/scripts/FilamentChange.py @@ -7,7 +7,7 @@ from typing import List from ..Script import Script -from UM.Application import Application #To get the current printer's settings. +from UM.Application import Application # To get the current printer's settings. class FilamentChange(Script): diff --git a/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py b/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py index 3d85740bd4..f502678317 100644 --- a/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py +++ b/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py @@ -7,7 +7,7 @@ from ..Script import Script import re -from UM.Application import Application #To get the current printer's settings. +from UM.Application import Application # To get the current printer's settings. from UM.Logger import Logger from typing import List, Tuple diff --git a/plugins/PostProcessingPlugin/scripts/SearchAndReplace.py b/plugins/PostProcessingPlugin/scripts/SearchAndReplace.py index 7a12c229cc..dabc6b725a 100644 --- a/plugins/PostProcessingPlugin/scripts/SearchAndReplace.py +++ b/plugins/PostProcessingPlugin/scripts/SearchAndReplace.py @@ -1,7 +1,7 @@ # Copyright (c) 2017 Ghostkeeper # The PostProcessingPlugin is released under the terms of the LGPLv3 or higher. -import re #To perform the search and replace. +import re # To perform the search and replace. from ..Script import Script diff --git a/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py b/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py index 8c0c50d0b4..a9a0666d9c 100644 --- a/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py +++ b/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py @@ -8,7 +8,7 @@ from UM.Application import Application from UM.Logger import Logger from UM.Message import Message from UM.FileHandler.WriteFileJob import WriteFileJob -from UM.FileHandler.FileWriter import FileWriter #To check against the write modes (text vs. binary). +from UM.FileHandler.FileWriter import FileWriter # To check against the write modes (text vs. binary). from UM.Scene.Iterator.BreadthFirstIterator import BreadthFirstIterator from UM.OutputDevice.OutputDevice import OutputDevice from UM.OutputDevice import OutputDeviceError diff --git a/plugins/SimulationView/SimulationPass.py b/plugins/SimulationView/SimulationPass.py index dd94d678ae..2099f6c21d 100644 --- a/plugins/SimulationView/SimulationPass.py +++ b/plugins/SimulationView/SimulationPass.py @@ -1,5 +1,6 @@ # Copyright (c) 2021 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +import math from UM.Math.Color import Color from UM.Math.Vector import Vector @@ -148,24 +149,23 @@ class SimulationPass(RenderPass): if layer == self._layer_view._current_layer_num: # We look for the position of the head, searching the point of the current path index = int(self._layer_view.getCurrentPath()) - offset = 0 for polygon in layer_data.getLayer(layer).polygons: # The size indicates all values in the two-dimension array, and the second dimension is # always size 3 because we have 3D points. - if index >= polygon.data.size // 3 - offset: - index -= polygon.data.size // 3 - offset - offset = 1 # This is to avoid the first point when there is more than one polygon, since has the same value as the last point in the previous polygon + if index >= polygon.data.size // 3 : + index -= polygon.data.size // 3 continue # The head position is calculated and translated - ratio = self._layer_view.getCurrentPath() - index - pos_a = Vector(polygon.data[index + offset][0], polygon.data[index + offset][1], - polygon.data[index + offset][2]) - if ratio <= 0.0001 or index + offset < len(polygon.data): + ratio = self._layer_view.getCurrentPath() - math.floor(self._layer_view.getCurrentPath()) + pos_a = Vector(polygon.data[index][0], polygon.data[index][1], + polygon.data[index][2]) + if ratio <= 0.0001 or index + 1 == len(polygon.data): + # in case there multiple polygons and polygon changes, the first point has the same value as the last point in the previous polygon head_position = pos_a + node.getWorldPosition() else: - pos_b = Vector(polygon.data[index + offset + 1][0], - polygon.data[index + offset + 1][1], - polygon.data[index + offset + 1][2]) + pos_b = Vector(polygon.data[index + 1][0], + polygon.data[index + 1][1], + polygon.data[index + 1][2]) vec = pos_a * (1.0 - ratio) + pos_b * ratio head_position = vec + node.getWorldPosition() break diff --git a/plugins/SimulationView/SimulationView.py b/plugins/SimulationView/SimulationView.py index 337879475b..2573c84cb9 100644 --- a/plugins/SimulationView/SimulationView.py +++ b/plugins/SimulationView/SimulationView.py @@ -57,7 +57,7 @@ class SimulationView(CuraView): LAYER_VIEW_TYPE_LINE_TYPE = 1 LAYER_VIEW_TYPE_FEEDRATE = 2 LAYER_VIEW_TYPE_THICKNESS = 3 - SIMULATION_FACTOR = 3 + SIMULATION_FACTOR = 2 _no_layers_warning_preference = "view/no_layers_warning" @@ -97,7 +97,8 @@ class SimulationView(CuraView): self._min_line_width = sys.float_info.max self._min_flow_rate = sys.float_info.max self._max_flow_rate = sys.float_info.min - self._cumulative_line_duration = {} + self._cumulative_line_duration_layer: Optional[int] = None + self._cumulative_line_duration: List[float] = [] self._global_container_stack: Optional[ContainerStack] = None self._proxy = None @@ -196,7 +197,7 @@ class SimulationView(CuraView): if len(cumulative_line_duration) > 0: self._current_time = time left_i = 0 - right_i = self._max_paths - 1 + right_i = len(cumulative_line_duration) - 1 total_duration = cumulative_line_duration[-1] # make an educated guess about where to start i = int(right_i * max(0.0, min(1.0, self._current_time / total_duration))) @@ -211,7 +212,9 @@ class SimulationView(CuraView): left_value = cumulative_line_duration[i - 1] if i > 0 else 0.0 right_value = cumulative_line_duration[i] - assert (left_value <= self._current_time <= right_value) + if not (left_value <= self._current_time <= right_value): + Logger.warn( + f"Binary search error (out of bounds): index {i}: left value {left_value} right value {right_value} and current time is {self._current_time}") fractional_value = (self._current_time - left_value) / (right_value - left_value) @@ -244,19 +247,22 @@ class SimulationView(CuraView): def cumulativeLineDuration(self) -> List[float]: # Make sure _cumulative_line_duration is initialized properly - if self.getCurrentLayer() not in self._cumulative_line_duration: + if self.getCurrentLayer() != self._cumulative_line_duration_layer: #clear cache - self._cumulative_line_duration = {} - self._cumulative_line_duration[self.getCurrentLayer()] = [] + self._cumulative_line_duration = [] total_duration = 0.0 polylines = self.getLayerData() if polylines is not None: for polyline in polylines.polygons: for line_duration in list((polyline.lineLengths / polyline.lineFeedrates)[0]): total_duration += line_duration / SimulationView.SIMULATION_FACTOR - self._cumulative_line_duration[self.getCurrentLayer()].append(total_duration) + self._cumulative_line_duration.append(total_duration) + # for tool change we add an extra tool path + self._cumulative_line_duration.append(total_duration) + # set current cached layer + self._cumulative_line_duration_layer = self.getCurrentLayer() - return self._cumulative_line_duration[self.getCurrentLayer()] + return self._cumulative_line_duration def getLayerData(self) -> Optional["LayerData"]: scene = self.getController().getScene() @@ -366,7 +372,10 @@ class SimulationView(CuraView): self._minimum_path_num = min(self._minimum_path_num, self._current_path_num) # update _current time when the path is changed by user if self._current_path_num < self._max_paths and round(self._current_path_num)== self._current_path_num: - self._current_time = self.cumulativeLineDuration()[int(self._current_path_num)] + actual_path_num = int(self._current_path_num) + cumulative_line_duration = self.cumulativeLineDuration() + if actual_path_num < len(cumulative_line_duration): + self._current_time = cumulative_line_duration[actual_path_num] self._startUpdateTopLayers() self.currentPathNumChanged.emit() diff --git a/plugins/SliceInfoPlugin/SliceInfo.py b/plugins/SliceInfoPlugin/SliceInfo.py index 7e7a132c98..411146d065 100755 --- a/plugins/SliceInfoPlugin/SliceInfo.py +++ b/plugins/SliceInfoPlugin/SliceInfo.py @@ -5,7 +5,7 @@ import json import os import platform import time -from typing import cast, Optional, Set, TYPE_CHECKING +from typing import Optional, Set, TYPE_CHECKING from PyQt6.QtCore import pyqtSlot, QObject from PyQt6.QtNetwork import QNetworkRequest @@ -264,6 +264,7 @@ class SliceInfo(QObject, Extension): # Prime tower settings print_settings["prime_tower_enable"] = global_stack.getProperty("prime_tower_enable", "value") + print_settings["prime_tower_mode"] = global_stack.getProperty("prime_tower_mode", "value") # Infill settings print_settings["infill_sparse_density"] = global_stack.getProperty("infill_sparse_density", "value") diff --git a/plugins/SolidView/SolidView.py b/plugins/SolidView/SolidView.py index b7aeb90da4..7f32b0df7f 100644 --- a/plugins/SolidView/SolidView.py +++ b/plugins/SolidView/SolidView.py @@ -16,8 +16,6 @@ from UM.Application import Application from UM.Logger import Logger from UM.Message import Message from UM.Math.Color import Color -from UM.PluginRegistry import PluginRegistry -from UM.Platform import Platform from UM.Event import Event from UM.View.RenderBatch import RenderBatch diff --git a/plugins/UFPWriter/UFPWriter.py b/plugins/UFPWriter/UFPWriter.py index c8064ac37f..475e5fc01a 100644 --- a/plugins/UFPWriter/UFPWriter.py +++ b/plugins/UFPWriter/UFPWriter.py @@ -22,7 +22,6 @@ from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator from UM.Scene.SceneNode import SceneNode from UM.Settings.InstanceContainer import InstanceContainer from cura.CuraApplication import CuraApplication -from cura.Settings.CuraStackBuilder import CuraStackBuilder from cura.Settings.GlobalStack import GlobalStack from cura.Utils.Threading import call_on_qt_thread diff --git a/plugins/UFPWriter/__init__.py b/plugins/UFPWriter/__init__.py index ae51f78e95..8561454856 100644 --- a/plugins/UFPWriter/__init__.py +++ b/plugins/UFPWriter/__init__.py @@ -9,8 +9,8 @@ try: except ImportError: Logger.log("w", "Could not import UFPWriter; libCharon may be missing") -from UM.i18n import i18nCatalog #To translate the file format description. -from UM.Mesh.MeshWriter import MeshWriter #For the binary mode flag. +from UM.i18n import i18nCatalog # To translate the file format description. +from UM.Mesh.MeshWriter import MeshWriter # For the binary mode flag. i18n_catalog = i18nCatalog("cura") diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py index 9a11bb886c..b2541f6f82 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py @@ -331,7 +331,7 @@ class CloudOutputDevice(UltimakerNetworkedPrinterOutputDevice): return False [printer, *_] = self._printers - return printer.name in ("ultimaker_methodx", "ultimaker_methodxl") + return printer.type in ("MakerBot Method X", "MakerBot Method XL") @pyqtProperty(bool, notify=_cloudClusterPrintersChanged) def supportsPrintJobActions(self) -> bool: diff --git a/plugins/USBPrinting/AutoDetectBaudJob.py b/plugins/USBPrinting/AutoDetectBaudJob.py index 5a8e455720..c26e5e8824 100644 --- a/plugins/USBPrinting/AutoDetectBaudJob.py +++ b/plugins/USBPrinting/AutoDetectBaudJob.py @@ -4,9 +4,6 @@ from UM.Job import Job from UM.Logger import Logger -from .avr_isp import ispBase -from .avr_isp.stk500v2 import Stk500v2 - from time import time, sleep from serial import Serial, SerialException diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py index 1155420b60..85b98e532b 100644 --- a/plugins/USBPrinting/USBPrinterOutputDevice.py +++ b/plugins/USBPrinting/USBPrinterOutputDevice.py @@ -5,9 +5,9 @@ import os from UM.i18n import i18nCatalog from UM.Logger import Logger -from UM.Mesh.MeshWriter import MeshWriter #To get the g-code output. -from UM.Message import Message #Show an error when already printing. -from UM.PluginRegistry import PluginRegistry #To get the g-code output. +from UM.Mesh.MeshWriter import MeshWriter # To get the g-code output. +from UM.Message import Message # Show an error when already printing. +from UM.PluginRegistry import PluginRegistry # To get the g-code output. from UM.Qt.Duration import DurationFormat from cura.CuraApplication import CuraApplication @@ -19,7 +19,7 @@ from cura.PrinterOutput.GenericOutputController import GenericOutputController from .AutoDetectBaudJob import AutoDetectBaudJob from .AvrFirmwareUpdater import AvrFirmwareUpdater -from io import StringIO #To write the g-code output. +from io import StringIO # To write the g-code output. from queue import Queue from serial import Serial, SerialException, SerialTimeoutException from threading import Thread, Event diff --git a/plugins/VersionUpgrade/VersionUpgrade21to22/MachineInstance.py b/plugins/VersionUpgrade/VersionUpgrade21to22/MachineInstance.py index ff5c33517d..be6002e269 100644 --- a/plugins/VersionUpgrade/VersionUpgrade21to22/MachineInstance.py +++ b/plugins/VersionUpgrade/VersionUpgrade21to22/MachineInstance.py @@ -1,16 +1,16 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -import configparser #To read config files. -import io #To write config files to strings as if they were files. -import os.path #To get the path to write new user profiles to. +import configparser # To read config files. +import io # To write config files to strings as if they were files. +import os.path # To get the path to write new user profiles to. from typing import Dict, List, Optional, Set, Tuple -import urllib #To serialise the user container file name properly. +import urllib # To serialise the user container file name properly. import urllib.parse -import UM.VersionUpgrade #To indicate that a file is of incorrect format. -import UM.VersionUpgradeManager #To schedule more files to be upgraded. -from UM.Resources import Resources #To get the config storage path. +import UM.VersionUpgrade # To indicate that a file is of incorrect format. +import UM.VersionUpgradeManager # To schedule more files to be upgraded. +from UM.Resources import Resources # To get the config storage path. ## Creates a new machine instance instance by parsing a serialised machine # instance in version 1 of the file format. diff --git a/plugins/VersionUpgrade/VersionUpgrade21to22/Preferences.py b/plugins/VersionUpgrade/VersionUpgrade21to22/Preferences.py index 953837b863..906f868af9 100644 --- a/plugins/VersionUpgrade/VersionUpgrade21to22/Preferences.py +++ b/plugins/VersionUpgrade/VersionUpgrade21to22/Preferences.py @@ -1,11 +1,11 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -import configparser #To read config files. -import io #To output config files to string. +import configparser # To read config files. +import io # To output config files to string. from typing import List, Optional, Tuple -import UM.VersionUpgrade #To indicate that a file is of the wrong format. +import UM.VersionUpgrade # To indicate that a file is of the wrong format. ## Creates a new preferences instance by parsing a serialised preferences file # in version 1 of the file format. diff --git a/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py b/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py index 8419b3beeb..7e5f330a36 100644 --- a/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py +++ b/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py @@ -1,8 +1,8 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -import configparser #To read config files. -import io #To write config files to strings as if they were files. +import configparser # To read config files. +import io # To write config files to strings as if they were files. from typing import Dict, List, Optional, Tuple import UM.VersionUpgrade diff --git a/plugins/VersionUpgrade/VersionUpgrade56to57/VersionUpgrade56to57.py b/plugins/VersionUpgrade/VersionUpgrade56to57/VersionUpgrade56to57.py new file mode 100644 index 0000000000..8e94f7963c --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade56to57/VersionUpgrade56to57.py @@ -0,0 +1,95 @@ +# Copyright (c) 2024 UltiMaker +# Cura is released under the terms of the LGPLv3 or higher. + +import configparser +from typing import Tuple, List +import io +from UM.VersionUpgrade import VersionUpgrade + +_REMOVED_SETTINGS = { + "support_interface_skip_height", +} +_NEW_SETTING_VERSION = "23" + + +class VersionUpgrade56to57(VersionUpgrade): + def upgradePreferences(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: + """ + Upgrades preferences to remove from the visibility list the settings that were removed in this version. + It also changes the preferences to have the new version number. + + This removes any settings that were removed in the new Cura version. + :param serialized: The original contents of the preferences file. + :param filename: The file name of the preferences file. + :return: A list of new file names, and a list of the new contents for + those files. + """ + parser = configparser.ConfigParser(interpolation = None) + parser.read_string(serialized) + + # Update version number. + parser["metadata"]["setting_version"] = _NEW_SETTING_VERSION + + # Remove deleted settings from the visible settings list. + if "general" in parser and "visible_settings" in parser["general"]: + visible_settings = set(parser["general"]["visible_settings"].split(";")) + for removed in _REMOVED_SETTINGS: + if removed in visible_settings: + visible_settings.remove(removed) + + parser["general"]["visible_settings"] = ";".join(visible_settings) + + result = io.StringIO() + parser.write(result) + return [filename], [result.getvalue()] + + def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: + """ + Upgrades instance containers to remove the settings that were removed in this version. + It also changes the instance containers to have the new version number. + + This removes any settings that were removed in the new Cura version and updates settings that need to be updated + with a new value. + + :param serialized: The original contents of the instance container. + :param filename: The original file name of the instance container. + :return: A list of new file names, and a list of the new contents for + those files. + """ + parser = configparser.ConfigParser(interpolation = None, comment_prefixes = ()) + parser.read_string(serialized) + + # Update version number. + parser["metadata"]["setting_version"] = _NEW_SETTING_VERSION + + if "values" in parser: + # Remove deleted settings from the instance containers. + for removed in _REMOVED_SETTINGS: + if removed in parser["values"]: + del parser["values"][removed] + + result = io.StringIO() + parser.write(result) + return [filename], [result.getvalue()] + + def upgradeStack(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: + """ + Upgrades stacks to have the new version number. + + :param serialized: The original contents of the stack. + :param filename: The original file name of the stack. + :return: A list of new file names, and a list of the new contents for + those files. + """ + parser = configparser.ConfigParser(interpolation = None) + parser.read_string(serialized) + + # Update version number. + if "metadata" not in parser: + parser["metadata"] = {} + + parser["metadata"]["setting_version"] = _NEW_SETTING_VERSION + + result = io.StringIO() + parser.write(result) + return [filename], [result.getvalue()] diff --git a/plugins/VersionUpgrade/VersionUpgrade56to57/__init__.py b/plugins/VersionUpgrade/VersionUpgrade56to57/__init__.py new file mode 100644 index 0000000000..62e72c8da4 --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade56to57/__init__.py @@ -0,0 +1,61 @@ +# Copyright (c) 2024 UltiMaker +# Cura is released under the terms of the LGPLv3 or higher. + +from typing import Any, Dict, TYPE_CHECKING + +from . import VersionUpgrade56to57 + +if TYPE_CHECKING: + from UM.Application import Application + +upgrade = VersionUpgrade56to57.VersionUpgrade56to57() + + +def getMetaData() -> Dict[str, Any]: + return { + "version_upgrade": { + # From To Upgrade function + ("preferences", 7000022): ("preferences", 7000023, upgrade.upgradePreferences), + ("machine_stack", 6000022): ("machine_stack", 6000023, upgrade.upgradeStack), + ("extruder_train", 6000022): ("extruder_train", 6000023, upgrade.upgradeStack), + ("definition_changes", 4000022): ("definition_changes", 4000023, upgrade.upgradeInstanceContainer), + ("quality_changes", 4000022): ("quality_changes", 4000023, upgrade.upgradeInstanceContainer), + ("quality", 4000022): ("quality", 4000023, upgrade.upgradeInstanceContainer), + ("user", 4000022): ("user", 4000023, upgrade.upgradeInstanceContainer), + ("intent", 4000022): ("intent", 4000023, upgrade.upgradeInstanceContainer), + }, + "sources": { + "preferences": { + "get_version": upgrade.getCfgVersion, + "location": {"."} + }, + "machine_stack": { + "get_version": upgrade.getCfgVersion, + "location": {"./machine_instances"} + }, + "extruder_train": { + "get_version": upgrade.getCfgVersion, + "location": {"./extruders"} + }, + "definition_changes": { + "get_version": upgrade.getCfgVersion, + "location": {"./definition_changes"} + }, + "quality_changes": { + "get_version": upgrade.getCfgVersion, + "location": {"./quality_changes"} + }, + "quality": { + "get_version": upgrade.getCfgVersion, + "location": {"./quality"} + }, + "user": { + "get_version": upgrade.getCfgVersion, + "location": {"./user"} + } + } + } + + +def register(app: "Application") -> Dict[str, Any]: + return {"version_upgrade": upgrade} diff --git a/plugins/VersionUpgrade/VersionUpgrade56to57/plugin.json b/plugins/VersionUpgrade/VersionUpgrade56to57/plugin.json new file mode 100644 index 0000000000..1752d64aa0 --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade56to57/plugin.json @@ -0,0 +1,8 @@ +{ + "name": "Version Upgrade 5.6 to 5.7", + "author": "UltiMaker", + "version": "1.0.0", + "description": "Upgrades configurations from Cura 5.6 to Cura 5.7.", + "api": 8, + "i18n-catalog": "cura" +} diff --git a/plugins/XRayView/XRayView.py b/plugins/XRayView/XRayView.py index 5af7b17652..b27e615e56 100644 --- a/plugins/XRayView/XRayView.py +++ b/plugins/XRayView/XRayView.py @@ -7,7 +7,6 @@ from PyQt6.QtGui import QOpenGLContext, QImage from UM.Application import Application from UM.Logger import Logger from UM.Math.Color import Color -from UM.PluginRegistry import PluginRegistry from UM.Resources import Resources from UM.Platform import Platform from UM.Event import Event diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index 490d704d19..98c0f95e10 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -3,9 +3,9 @@ import copy import io -import json #To parse the product-to-id mapping file. -import os.path #To find the product-to-id mapping. -from typing import Any, Dict, List, Optional, Tuple, cast, Set, Union +import json # To parse the product-to-id mapping file. +import os.path # To find the product-to-id mapping. +from typing import Any, Dict, List, Optional, Tuple, cast, Set import xml.etree.ElementTree as ET from UM.PluginRegistry import PluginRegistry @@ -579,8 +579,9 @@ class XmlMaterialProfile(InstanceContainer): meta_data[tag_name] = entry.text - if tag_name in self.__material_metadata_setting_map: - common_setting_values[self.__material_metadata_setting_map[tag_name]] = entry.text + for tag_name, value in meta_data.items(): + if tag_name in self.__material_metadata_setting_map: + common_setting_values[self.__material_metadata_setting_map[tag_name]] = value if "description" not in meta_data: meta_data["description"] = "" @@ -1222,7 +1223,9 @@ class XmlMaterialProfile(InstanceContainer): "diameter": "material_diameter" } __material_metadata_setting_map = { - "GUID": "material_guid" + "GUID": "material_guid", + "material": "material_type", + "brand": "material_brand", } # Map of recognised namespaces with a proper prefix. diff --git a/requirements-dev.txt b/requirements-dev.txt index a1b191009a..162b33bf15 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,5 +1,5 @@ pytest -pyinstaller==5.8.0 +pyinstaller==6.3.0 pyinstaller-hooks-contrib pyyaml sip==6.5.1 diff --git a/resources/definitions/ankermake_m5.def.json b/resources/definitions/ankermake_m5.def.json index 0880f0b007..4e4b3498b3 100644 --- a/resources/definitions/ankermake_m5.def.json +++ b/resources/definitions/ankermake_m5.def.json @@ -112,7 +112,6 @@ "support_interface_density": { "value": 33.333 }, "support_interface_enable": { "value": true }, "support_interface_pattern": { "value": "'grid'" }, - "support_interface_skip_height": { "value": 0.2 }, "support_roof_enable": { "value": true }, "support_xy_distance": { "value": "wall_line_width_0 * 2" }, "support_xy_distance_overhang": { "value": "wall_line_width_0" }, diff --git a/resources/definitions/artillery_base.def.json b/resources/definitions/artillery_base.def.json index d9e71e4333..38d9531f7f 100644 --- a/resources/definitions/artillery_base.def.json +++ b/resources/definitions/artillery_base.def.json @@ -114,7 +114,6 @@ "support_interface_enable": { "value": true }, "support_interface_height": { "value": "layer_height * 4" }, "support_interface_pattern": { "value": "'grid'" }, - "support_interface_skip_height": { "value": 0.2 }, "support_xy_distance": { "value": "wall_line_width_0 * 2" }, "support_xy_distance_overhang": { "value": "wall_line_width_0" }, "support_xy_overrides_z": { "value": "'xy_overrides_z'" }, diff --git a/resources/definitions/atmat_signal_pro_base.def.json b/resources/definitions/atmat_signal_pro_base.def.json index f19dc8920d..cd59e1c169 100644 --- a/resources/definitions/atmat_signal_pro_base.def.json +++ b/resources/definitions/atmat_signal_pro_base.def.json @@ -154,7 +154,6 @@ "support_infill_rate": { "value": "20" }, "support_interface_enable": { "value": "True" }, "support_interface_height": { "value": "1" }, - "support_interface_skip_height": { "value": "layer_height" }, "support_join_distance": { "value": "1" }, "support_offset": { "value": "1.5" }, "support_pattern": { "default_value": "zigzag" }, diff --git a/resources/definitions/biqu_base.def.json b/resources/definitions/biqu_base.def.json index 78edc62b74..a42f4044a0 100755 --- a/resources/definitions/biqu_base.def.json +++ b/resources/definitions/biqu_base.def.json @@ -108,7 +108,6 @@ "support_interface_enable": { "value": true }, "support_interface_height": { "value": "layer_height * 4" }, "support_interface_pattern": { "value": "'grid'" }, - "support_interface_skip_height": { "value": 0.2 }, "support_pattern": { "value": "'zigzag'" }, "support_wall_count": { "value": 1 }, "support_xy_distance": { "value": "wall_line_width_0 * 2" }, diff --git a/resources/definitions/blocks_base.def.json b/resources/definitions/blocks_base.def.json index d83e6b31f6..fde5f912da 100644 --- a/resources/definitions/blocks_base.def.json +++ b/resources/definitions/blocks_base.def.json @@ -97,7 +97,6 @@ "support_interface_enable": { "value": true }, "support_interface_height": { "value": "layer_height * 4" }, "support_interface_pattern": { "value": "'grid'" }, - "support_interface_skip_height": { "value": 0.2 }, "support_pattern": { "value": "'zigzag'" }, "support_xy_distance": { "value": "wall_line_width_0 * 2" }, "support_xy_distance_overhang": { "value": "wall_line_width_0" }, diff --git a/resources/definitions/creality_ender3v3se.def.json b/resources/definitions/creality_ender3v3se.def.json index 5769e3e493..86d6818166 100644 --- a/resources/definitions/creality_ender3v3se.def.json +++ b/resources/definitions/creality_ender3v3se.def.json @@ -45,7 +45,7 @@ "machine_max_feedrate_y": { "value": 500 }, "machine_max_feedrate_z": { "value": 30 }, "machine_name": { "default_value": "Creality Ender-3 V3 SE" }, - "machine_start_gcode": { "default_value": "M220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\n\nG28 ;Home\n\nM420 S1; Enable mesh leveling\n\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up\nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position\nM109 S[material_print_temperature_layer_0]\nG1 X10.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X10.4 Y145.0 Z0.28 F5000.0 ;Move to side a little\nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 E-1.0000 F1800 ;Retract a bit\nG1 Z2.0 F3000 ;Move Z Axis up\nG1 E0.0000 F1800 \n" }, + "machine_start_gcode": { "default_value": "M220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\n\nG28 ;Home\n\nM420 S1; Use saved mesh leveling data\n\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up\nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position\nM190 S{material_bed_temperature_layer_0} ; Set bed temperature and wait\nM109 S{material_print_temperature_layer_0} ; Set hotend temperature and wait\nG1 X10.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X10.4 Y145.0 Z0.28 F5000.0 ;Move to side a little\nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 E-1.0000 F1800 ;Retract a bit\nG1 Z2.0 F3000 ;Move Z Axis up\nG1 E0.0000 F1800 \n" }, "machine_width": { "default_value": 220 }, "retraction_amount": { "value": 0.8 }, "retraction_speed": { "default_value": 40 }, diff --git a/resources/definitions/deltacomb_dc30flux.def.json b/resources/definitions/deltacomb_dc30flux.def.json index 4a42ae4d63..7ba4f4252d 100644 --- a/resources/definitions/deltacomb_dc30flux.def.json +++ b/resources/definitions/deltacomb_dc30flux.def.json @@ -31,7 +31,7 @@ "material_final_print_temperature": { "value": "material_print_temperature" }, "material_initial_print_temperature": { "value": "material_print_temperature" }, "material_standby_temperature": { "value": "material_print_temperature" }, - "prime_tower_enable": { "value": "1" }, + "prime_tower_enable": { "value": "True" }, "prime_tower_min_volume": { "value": "50" }, "switch_extruder_retraction_amount": { "value": "0" } } diff --git a/resources/definitions/elegoo_neptune_4.def.json b/resources/definitions/elegoo_neptune_4.def.json index 21fd28f6f7..4484133bdb 100644 --- a/resources/definitions/elegoo_neptune_4.def.json +++ b/resources/definitions/elegoo_neptune_4.def.json @@ -9,16 +9,20 @@ }, "overrides": { - "acceleration_layer_0": { "value": 3000 }, - "acceleration_print": { "value": 3000 }, - "acceleration_travel": { "value": 5000 }, + "acceleration_print": + { + "maximum_value_warning": "20000", + "value": 10000 + }, + "acceleration_wall": { "value": "acceleration_print/2" }, "cool_fan_full_layer": { "value": 2 }, "infill_line_width": { "value": "line_width + 0.05" }, "infill_overlap": { "value": "0 if infill_sparse_density < 40.01 and infill_pattern != 'concentric' else -5" }, + "infill_pattern": { "value": "'lines' if infill_sparse_density > 35 else 'grid'" }, "initial_layer_line_width_factor": { "value": "100.0 if resolveOrValue('adhesion_type') == 'raft' else 125 if line_width < 0.5 else 110" }, - "machine_acceleration": { "value": 3000 }, + "machine_acceleration": { "value": 5000 }, "machine_depth": { "default_value": 230 }, - "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 Z2 ;Raise Z more\nG90 ;Absolute positionning\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z" }, + "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 Z2 ;Raise Z more\nG90 ;Absolute positionning\nG1 X0 Y{machine_depth - 5} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z" }, "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, "machine_head_with_fans_polygon": { @@ -32,12 +36,12 @@ "machine_heated_bed": { "default_value": true }, "machine_height": { "default_value": 270 }, "machine_max_acceleration_e": { "value": 5000 }, - "machine_max_acceleration_x": { "value": 5000 }, - "machine_max_acceleration_y": { "value": 5000 }, + "machine_max_acceleration_x": { "value": 20000 }, + "machine_max_acceleration_y": { "value": 20000 }, "machine_name": { "default_value": "ELEGOO NEPTUNE 4" }, "machine_nozzle_cool_down_speed": { "value": 0.75 }, "machine_nozzle_heat_up_speed": { "value": 1.6 }, - "machine_start_gcode": { "default_value": "G28 ;home\nG92 E0 ;Reset Extruder\nG1 Z4.0 F3000 ;Move Z Axis up\nG92 E0 ;Reset Extruder\nG1 X1.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X1.1 Y80.0 Z0.28 F1500.0 E10 ;Draw the first line\nG1 X1.4 Y80.0 Z0.28 F5000.0 ;Move to side a little\nG1 X1.4 Y20 Z0.28 F1500.0 E20 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up" }, + "machine_start_gcode": { "default_value": ";ELEGOO NEPTUNE 4 / 4 PRO\nM220 S100 ;Set the feed speed to 100%\nM221 S100 ;Set the flow rate to 100%\nM104 S140 ;Start heating extruder\nM190 S{material_bed_temperature_layer_0} ;Wait for the bed to reach print temp\nG90\nG28 ;home\nG1 Z10 F300\nG1 X67.5 Y0 F6000\nG1 Z0 F300\nM109 S{material_print_temperature_layer_0} ;Wait for extruder to reach print temp\nG92 E0 ;Reset Extruder\nG1 X67.5 Y0 Z0.4 F300 ;Move to start position\nG1 X167.5 E30 F400 ;Draw the first line\nG1 Z0.6 F120.0 ;Move to side a little\nG1 X162.5 F3000\nG92 E0 ;Reset Extruder" }, "machine_width": { "default_value": 235 }, "retraction_amount": { "default_value": 0.5 }, "retraction_count_max": { "value": 80 }, diff --git a/resources/definitions/elegoo_neptune_4max.def.json b/resources/definitions/elegoo_neptune_4max.def.json new file mode 100644 index 0000000000..c12953959b --- /dev/null +++ b/resources/definitions/elegoo_neptune_4max.def.json @@ -0,0 +1,62 @@ +{ + "version": 2, + "name": "ELEGOO NEPTUNE 4 Max", + "inherits": "elegoo_neptune_4", + "metadata": + { + "visible": true, + "author": "mastercaution", + "platform": "elegoo_platform_max.3mf", + "platform_offset": [ + -2.1, + -0.2, + 0 + ], + "quality_definition": "elegoo_neptune_4" + }, + "overrides": + { + "acceleration_print": + { + "maximum_value_warning": "15000", + "value": 2500 + }, + "machine_depth": { "default_value": 430 }, + "machine_height": { "default_value": 482 }, + "machine_max_acceleration_e": { "value": 5000 }, + "machine_max_acceleration_x": { "value": 15000 }, + "machine_max_acceleration_y": { "value": 15000 }, + "machine_name": { "default_value": "ELEGOO NEPTUNE 4 Max" }, + "machine_start_gcode": { "default_value": ";ELEGOO NEPTUNE 4 MAX\nM220 S100 ;Set the feed speed to 100%\nM221 S100 ;Set the flow rate to 100%\nM104 S140 ;Start heating extruder\nM190 S{material_bed_temperature_layer_0} ;Wait for the bed to reach print temp\nG90\nG28 ;home\nG1 Z10 F300\nG1 X165 Y0 F6000\nG1 Z0 F300\nM109 S{material_print_temperature_layer_0} ;Wait for extruder to reach print temp\nG92 E0 ;Reset Extruder\nG1 X165 Y0 Z0.4 F300 ;Move to start position\nG1 X265 E30 F400 ;Draw the first line\nG1 Z0.6 F120.0 ;Move to side a little\nG1 X260 F3000\nG92 E0 ;Reset Extruder" }, + "machine_width": { "default_value": 430 }, + "nozzle_disallowed_areas": + { + "default_value": [ + [ + [-215, -215], + [-215, 215], + [-211, 215], + [-211, -215] + ], + [ + [215, 215], + [215, -215], + [211, -215], + [211, 215] + ], + [ + [-215, -215], + [215, -215], + [-215, -211], + [215, -211] + ], + [ + [-215, 215], + [215, 215], + [-215, 211], + [215, 211] + ] + ] + } + } +} \ No newline at end of file diff --git a/resources/definitions/elegoo_neptune_4plus.def.json b/resources/definitions/elegoo_neptune_4plus.def.json new file mode 100644 index 0000000000..c11b99956f --- /dev/null +++ b/resources/definitions/elegoo_neptune_4plus.def.json @@ -0,0 +1,59 @@ +{ + "version": 2, + "name": "ELEGOO NEPTUNE 4 Plus", + "inherits": "elegoo_neptune_4", + "metadata": + { + "visible": true, + "author": "mastercaution", + "platform": "elegoo_platform_max.3mf", + "platform_offset": [ + -2.1, + -0.2, + 0 + ], + "quality_definition": "elegoo_neptune_4" + }, + "overrides": + { + "acceleration_print": { "value": 4000 }, + "machine_acceleration": { "value": 4000 }, + "machine_depth": { "default_value": 330 }, + "machine_height": { "default_value": 387 }, + "machine_max_acceleration_e": { "value": 5000 }, + "machine_max_acceleration_x": { "value": 20000 }, + "machine_max_acceleration_y": { "value": 20000 }, + "machine_name": { "default_value": "ELEGOO NEPTUNE 4 Plus" }, + "machine_start_gcode": { "default_value": ";ELEGOO NEPTUNE 4 PLUS\nM220 S100 ;Set the feed speed to 100%\nM221 S100 ;Set the flow rate to 100%\nM104 S140 ;Start heating extruder\nM190 S{material_bed_temperature_layer_0} ;Wait for the bed to reach print temp\nG90\nG28 ;home\nG1 Z10 F300\nG1 X115 Y0 F6000\nG1 Z0 F300\nM109 S{material_print_temperature_layer_0} ;Wait for extruder to reach print temp\nG92 E0 ;Reset Extruder\nG1 X115 Y0 Z0.4 F300 ;Move to start position\nG1 X215 E30 F400 ;Draw the first line\nG1 Z0.6 F120.0 ;Move to side a little\nG1 X210 F3000\nG92 E0 ;Reset Extruder" }, + "machine_width": { "default_value": 330 }, + "nozzle_disallowed_areas": + { + "default_value": [ + [ + [-165, -165], + [-165, 165], + [-161, 165], + [-161, -165] + ], + [ + [165, 165], + [165, -165], + [161, -165], + [161, 165] + ], + [ + [-165, -165], + [165, -165], + [-165, -161], + [165, -161] + ], + [ + [-165, 165], + [165, 165], + [-165, 161], + [165, 161] + ] + ] + } + } +} \ No newline at end of file diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 62143cf8f8..1db28b289c 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -76,6 +76,22 @@ "type": "str", "enabled": false }, + "material_type": + { + "label": "Material Type", + "description": "The type of material used.", + "default_value": "", + "type": "str", + "enabled": false + }, + "material_brand": + { + "label": "Material Brand", + "description": "The brand of material used.", + "default_value": "", + "type": "str", + "enabled": false + }, "material_diameter": { "label": "Diameter", @@ -963,7 +979,7 @@ "description": "Width of a single prime tower line.", "type": "float", "unit": "mm", - "enabled": "resolveOrValue('prime_tower_enable')", + "enabled": "prime_tower_enable", "default_value": 0.4, "value": "line_width", "minimum_value": "0.001", @@ -1159,7 +1175,7 @@ "label": "Optimize Wall Printing Order", "description": "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization. First layer is not optimized when choosing brim as build plate adhesion type.", "type": "bool", - "default_value": false, + "default_value": true, "settable_per_mesh": true }, "inset_direction": @@ -1478,6 +1494,7 @@ "description": "Print top surface lines in an ordering that causes them to always overlap with adjacent lines in a single direction. This takes slightly more time to print, but makes flat surfaces look more consistent.", "type": "bool", "value": true, + "default_value": true, "enabled": "roofing_layer_count > 0 and top_layers > 0 and roofing_pattern != 'concentric'", "limit_to_extruder": "roofing_extruder_nr", "settable_per_mesh": true @@ -1667,7 +1684,7 @@ "value": "skin_line_width * 2", "default_value": 1, "minimum_value": "0", - "maximum_value_warning": "skin_line_width * 3", + "maximum_value_warning": "skin_line_width * 10", "type": "float", "enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern != 'concentric'", "limit_to_extruder": "top_bottom_extruder_nr", @@ -3346,7 +3363,7 @@ "description": "The speed at which the prime tower is printed. Printing the prime tower slower can make it more stable when the adhesion between the different filaments is suboptimal.", "type": "float", "unit": "mm/s", - "enabled": "resolveOrValue('prime_tower_enable')", + "enabled": "prime_tower_enable", "default_value": 60, "value": "speed_print", "minimum_value": "0.1", @@ -3724,7 +3741,7 @@ "maximum_value_warning": "10000", "default_value": 3000, "value": "acceleration_print", - "enabled": "resolveOrValue('prime_tower_enable') and resolveOrValue('acceleration_enabled')", + "enabled": "prime_tower_enable and resolveOrValue('acceleration_enabled')", "settable_per_mesh": false } } @@ -4043,7 +4060,7 @@ "maximum_value_warning": "50", "default_value": 20, "value": "jerk_print", - "enabled": "resolveOrValue('prime_tower_enable') and resolveOrValue('jerk_enabled')", + "enabled": "prime_tower_enable and resolveOrValue('jerk_enabled')", "settable_per_mesh": false } } @@ -4578,6 +4595,7 @@ "unit": "\u00b0C", "type": "float", "value": "material_print_temperature", + "default_value": 0, "enabled": "cool_min_layer_time > 0", "minimum_value_warning": "max(material_final_print_temperature, material_initial_print_temperature)", "maximum_value_warning": "material_print_temperature", @@ -5133,7 +5151,7 @@ "unit": "mm", "type": "float", "minimum_value": "0", - "maximum_value_warning": "machine_nozzle_size", + "maximum_value_warning": "5*layer_height", "default_value": 0.1, "limit_to_extruder": "support_interface_extruder_nr if support_interface_enable else support_infill_extruder_nr", "enabled": "support_enable or support_meshes_present", @@ -5421,20 +5439,6 @@ } } }, - "support_interface_skip_height": - { - "label": "Support Interface Resolution", - "description": "When checking where there's model above and below the support, take steps of the given height. Lower values will slice slower, while higher values may cause normal support to be printed in some places where there should have been support interface.", - "unit": "mm", - "type": "float", - "default_value": 0.2, - "value": "layer_height", - "minimum_value": "0", - "maximum_value_warning": "support_interface_height", - "limit_to_extruder": "support_interface_extruder_nr", - "enabled": "support_interface_enable and (support_enable or support_meshes_present)", - "settable_per_mesh": true - }, "support_interface_density": { "label": "Support Interface Density", @@ -6112,7 +6116,101 @@ "enabled": "resolveOrValue('adhesion_type') == 'raft'", "limit_to_extruder": "adhesion_extruder_nr", "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_extruder": true, + "children": + { + "raft_base_margin": + { + "label": "Raft Base Extra Margin", + "description": "If the raft base is enabled, this is the extra raft area around the model which is also given a raft. Increasing this margin will create a stronger raft while using more material and leaving less area for your print.", + "unit": "mm", + "type": "float", + "value": "raft_margin", + "default_value": 15, + "minimum_value_warning": "raft_interface_line_width", + "maximum_value_warning": "min(raft_interface_margin, 20)", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", + "limit_to_extruder": "raft_base_extruder_nr", + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "raft_interface_margin": + { + "label": "Raft Middle Extra Margin", + "description": "If the raft middle is enabled, this is the extra raft area around the model which is also given a raft. Increasing this margin will create a stronger raft while using more material and leaving less area for your print.", + "unit": "mm", + "type": "float", + "value": "raft_margin", + "default_value": 15, + "minimum_value_warning": "raft_interface_line_width", + "maximum_value_warning": "min(raft_surface_margin, 20)", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", + "limit_to_extruder": "raft_interface_extruder_nr", + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "raft_surface_margin": + { + "label": "Raft Top Extra Margin", + "description": "If the raft top is enabled, this is the extra raft area around the model which is also given a raft. Increasing this margin will create a stronger raft while using more material and leaving less area for your print.", + "unit": "mm", + "type": "float", + "value": "raft_margin", + "default_value": 15, + "minimum_value_warning": "raft_interface_line_width", + "maximum_value_warning": "20", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", + "limit_to_extruder": "raft_surface_extruder_nr", + "settable_per_mesh": false, + "settable_per_extruder": true + } + } + }, + "raft_remove_inside_corners": + { + "label": "Remove Raft Inside Corners", + "description": "Remove inside corners from the raft, causing the raft to become convex.", + "type": "bool", + "default_value": false, + "enabled": "resolveOrValue('adhesion_type') == 'raft'", + "settable_per_mesh": false, + "settable_per_extruder": false, + "children": + { + "raft_base_remove_inside_corners": + { + "label": "Remove Raft Base Inside Corners", + "description": "Remove inside corners from the raft base, causing the raft to become convex.", + "type": "bool", + "value": "raft_remove_inside_corners", + "default_value": false, + "enabled": "resolveOrValue('adhesion_type') == 'raft'", + "settable_per_mesh": false, + "settable_per_extruder": false + }, + "raft_interface_remove_inside_corners": + { + "label": "Remove Raft Middle Inside Corners", + "description": "Remove inside corners from the raft middle part, causing the raft to become convex.", + "type": "bool", + "value": "raft_remove_inside_corners", + "default_value": false, + "enabled": "resolveOrValue('adhesion_type') == 'raft'", + "settable_per_mesh": false, + "settable_per_extruder": false + }, + "raft_surface_remove_inside_corners": + { + "label": "Remove Raft Top Inside Corners", + "description": "Remove inside corners from the raft top part, causing the raft to become convex.", + "type": "bool", + "value": "raft_remove_inside_corners", + "default_value": false, + "enabled": "resolveOrValue('adhesion_type') == 'raft'", + "settable_per_mesh": false, + "settable_per_extruder": false + } + } }, "raft_smoothing": { @@ -6124,9 +6222,53 @@ "minimum_value": "0", "minimum_value_warning": "raft_interface_line_width", "enabled": "resolveOrValue('adhesion_type') == 'raft' and not raft_remove_inside_corners", - "limit_to_extruder": "adhesion_extruder_nr", "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_extruder": false, + "children": + { + "raft_base_smoothing": + { + "label": "Raft Base Smoothing", + "description": "This setting controls how much inner corners in the raft base outline are rounded. Inward corners are rounded to a semi circle with a radius equal to the value given here. This setting also removes holes in the raft outline which are smaller than such a circle.", + "unit": "mm", + "type": "float", + "value": "raft_smoothing", + "default_value": 5, + "minimum_value": "0", + "minimum_value_warning": "raft_interface_line_width", + "enabled": "resolveOrValue('adhesion_type') == 'raft' and not raft_base_remove_inside_corners", + "settable_per_mesh": false, + "settable_per_extruder": false + }, + "raft_interface_smoothing": + { + "label": "Raft Middle Smoothing", + "description": "This setting controls how much inner corners in the raft middle outline are rounded. Inward corners are rounded to a semi circle with a radius equal to the value given here. This setting also removes holes in the raft outline which are smaller than such a circle.", + "unit": "mm", + "type": "float", + "value": "raft_smoothing", + "default_value": 5, + "minimum_value": "0", + "minimum_value_warning": "raft_interface_line_width", + "enabled": "resolveOrValue('adhesion_type') == 'raft' and not raft_interface_remove_inside_corners", + "settable_per_mesh": false, + "settable_per_extruder": false + }, + "raft_surface_smoothing": + { + "label": "Raft Top Smoothing", + "description": "This setting controls how much inner corners in the raft top outline are rounded. Inward corners are rounded to a semi circle with a radius equal to the value given here. This setting also removes holes in the raft outline which are smaller than such a circle.", + "unit": "mm", + "type": "float", + "value": "raft_smoothing", + "default_value": 5, + "minimum_value": "0", + "minimum_value_warning": "raft_interface_line_width", + "enabled": "resolveOrValue('adhesion_type') == 'raft' and not raft_surface_remove_inside_corners", + "settable_per_mesh": false, + "settable_per_extruder": false + } + } }, "raft_airgap": { @@ -6157,66 +6299,53 @@ "settable_per_extruder": true, "limit_to_extruder": "raft_surface_extruder_nr" }, - "raft_surface_layers": + "raft_base_thickness": { - "label": "Raft Top Layers", - "description": "The number of top layers on top of the 2nd raft layer. These are fully filled layers that the model sits on. 2 layers result in a smoother top surface than 1.", - "type": "int", - "default_value": 2, - "minimum_value": "0", - "maximum_value_warning": "20", + "label": "Raft Base Thickness", + "description": "Layer thickness of the base raft layer. This should be a thick layer which sticks firmly to the printer build plate.", + "unit": "mm", + "type": "float", + "default_value": 0.3, + "value": "resolveOrValue('layer_height_0') * 1.2", + "minimum_value": "0.001", + "minimum_value_warning": "0.04", + "maximum_value_warning": "0.75 * raft_base_line_width", "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "raft_surface_extruder_nr" + "limit_to_extruder": "raft_base_extruder_nr" }, - "raft_surface_thickness": + "raft_base_line_width": { - "label": "Raft Top Layer Thickness", - "description": "Layer thickness of the top raft layers.", + "label": "Raft Base Line Width", + "description": "Width of the lines in the base raft layer. These should be thick lines to assist in build plate adhesion.", "unit": "mm", "type": "float", - "default_value": 0.1, - "value": "resolveOrValue('layer_height')", + "default_value": 0.8, "minimum_value": "0.001", - "minimum_value_warning": "0.04", - "maximum_value_warning": "0.75 * machine_nozzle_size", - "enabled": "resolveOrValue('adhesion_type') == 'raft' and raft_surface_layers > 0", + "value": "machine_nozzle_size * 2", + "minimum_value_warning": "machine_nozzle_size * 0.5", + "maximum_value_warning": "machine_nozzle_size * 3", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "raft_surface_extruder_nr" + "limit_to_extruder": "raft_base_extruder_nr" }, - "raft_surface_line_width": + "raft_base_line_spacing": { - "label": "Raft Top Line Width", - "description": "Width of the lines in the top surface of the raft. These can be thin lines so that the top of the raft becomes smooth.", + "label": "Raft Base Line Spacing", + "description": "The distance between the raft lines for the base raft layer. Wide spacing makes for easy removal of the raft from the build plate.", "unit": "mm", "type": "float", - "default_value": 0.4, - "value": "line_width", - "minimum_value": "0.001", - "minimum_value_warning": "machine_nozzle_size * 0.1", - "maximum_value_warning": "machine_nozzle_size * 2", - "enabled": "resolveOrValue('adhesion_type') == 'raft' and raft_surface_layers > 0", - "settable_per_mesh": false, - "settable_per_extruder": true, - "limit_to_extruder": "raft_surface_extruder_nr" - }, - "raft_surface_line_spacing": - { - "label": "Raft Top Spacing", - "description": "The distance between the raft lines for the top raft layers. The spacing should be equal to the line width, so that the surface is solid.", - "unit": "mm", - "type": "float", - "default_value": 0.4, + "default_value": 1.6, + "value": "raft_base_line_width * 2", "minimum_value": "0", - "minimum_value_warning": "raft_surface_line_width", - "maximum_value_warning": "raft_surface_line_width * 3", - "enabled": "resolveOrValue('adhesion_type') == 'raft' and raft_surface_layers > 0", - "value": "raft_surface_line_width", + "minimum_value_warning": "raft_base_line_width", + "maximum_value_warning": "100", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "raft_surface_extruder_nr" + "limit_to_extruder": "raft_base_extruder_nr" }, "raft_interface_layers": { @@ -6279,53 +6408,126 @@ "settable_per_extruder": true, "limit_to_extruder": "raft_interface_extruder_nr" }, - "raft_base_thickness": + "raft_surface_layers": { - "label": "Raft Base Thickness", - "description": "Layer thickness of the base raft layer. This should be a thick layer which sticks firmly to the printer build plate.", + "label": "Raft Top Layers", + "description": "The number of top layers on top of the 2nd raft layer. These are fully filled layers that the model sits on. 2 layers result in a smoother top surface than 1.", + "type": "int", + "default_value": 2, + "minimum_value": "0", + "maximum_value_warning": "20", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", + "settable_per_mesh": false, + "settable_per_extruder": true, + "limit_to_extruder": "raft_surface_extruder_nr" + }, + "raft_surface_thickness": + { + "label": "Raft Top Layer Thickness", + "description": "Layer thickness of the top raft layers.", "unit": "mm", "type": "float", - "default_value": 0.3, - "value": "resolveOrValue('layer_height_0') * 1.2", + "default_value": 0.1, + "value": "resolveOrValue('layer_height')", "minimum_value": "0.001", "minimum_value_warning": "0.04", - "maximum_value_warning": "0.75 * raft_base_line_width", - "enabled": "resolveOrValue('adhesion_type') == 'raft'", + "maximum_value_warning": "0.75 * machine_nozzle_size", + "enabled": "resolveOrValue('adhesion_type') == 'raft' and raft_surface_layers > 0", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "raft_base_extruder_nr" + "limit_to_extruder": "raft_surface_extruder_nr" }, - "raft_base_line_width": + "raft_surface_line_width": { - "label": "Raft Base Line Width", - "description": "Width of the lines in the base raft layer. These should be thick lines to assist in build plate adhesion.", + "label": "Raft Top Line Width", + "description": "Width of the lines in the top surface of the raft. These can be thin lines so that the top of the raft becomes smooth.", "unit": "mm", "type": "float", - "default_value": 0.8, + "default_value": 0.4, + "value": "line_width", "minimum_value": "0.001", - "value": "machine_nozzle_size * 2", - "minimum_value_warning": "machine_nozzle_size * 0.5", - "maximum_value_warning": "machine_nozzle_size * 3", - "enabled": "resolveOrValue('adhesion_type') == 'raft'", + "minimum_value_warning": "machine_nozzle_size * 0.1", + "maximum_value_warning": "machine_nozzle_size * 2", + "enabled": "resolveOrValue('adhesion_type') == 'raft' and raft_surface_layers > 0", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "raft_base_extruder_nr" + "limit_to_extruder": "raft_surface_extruder_nr" }, - "raft_base_line_spacing": + "raft_surface_line_spacing": { - "label": "Raft Base Line Spacing", - "description": "The distance between the raft lines for the base raft layer. Wide spacing makes for easy removal of the raft from the build plate.", + "label": "Raft Top Spacing", + "description": "The distance between the raft lines for the top raft layers. The spacing should be equal to the line width, so that the surface is solid.", "unit": "mm", "type": "float", - "default_value": 1.6, - "value": "raft_base_line_width * 2", + "default_value": 0.4, "minimum_value": "0", - "minimum_value_warning": "raft_base_line_width", - "maximum_value_warning": "100", - "enabled": "resolveOrValue('adhesion_type') == 'raft'", + "minimum_value_warning": "raft_surface_line_width", + "maximum_value_warning": "raft_surface_line_width * 3", + "enabled": "resolveOrValue('adhesion_type') == 'raft' and raft_surface_layers > 0", + "value": "raft_surface_line_width", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "raft_base_extruder_nr" + "limit_to_extruder": "raft_surface_extruder_nr" + }, + "raft_surface_monotonic": + { + "label": "Monotonic Raft Top Surface Order", + "description": "Print raft top surface lines in an ordering that causes them to always overlap with adjacent lines in a single direction. This takes slightly more time to print, but makes the surface look more consistent, which is also visible on the model bottom surface.", + "type": "bool", + "default_value": false, + "value": "skin_monotonic", + "enabled": "resolveOrValue('adhesion_type') == 'raft' and raft_surface_layers > 0", + "settable_per_mesh": false, + "settable_per_extruder": true, + "limit_to_extruder": "raft_surface_extruder_nr" + }, + "raft_wall_count": + { + "label": "Raft Wall Count", + "description": "The number of contours to print around the linear pattern of the raft.", + "type": "int", + "default_value": 1, + "minimum_value": "0", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", + "settable_per_mesh": false, + "settable_per_extruder": false, + "children": + { + "raft_base_wall_count": + { + "label": "Raft Base Wall Count", + "description": "The number of contours to print around the linear pattern in the base layer of the raft.", + "type": "int", + "default_value": 1, + "value": "raft_wall_count", + "minimum_value": "0", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", + "settable_per_mesh": false, + "settable_per_extruder": false + }, + "raft_interface_wall_count": + { + "label": "Raft Middle Wall Count", + "description": "The number of contours to print around the linear pattern in the middle layers of the raft.", + "type": "int", + "default_value": 0, + "minimum_value": "0", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", + "settable_per_mesh": false, + "settable_per_extruder": false + }, + "raft_surface_wall_count": + { + "label": "Raft Top Wall Count", + "description": "The number of contours to print around the linear pattern in the top layers of the raft.", + "type": "int", + "default_value": 0, + "minimum_value": "0", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", + "settable_per_mesh": false, + "settable_per_extruder": false + } + } }, "raft_speed": { @@ -6344,21 +6546,21 @@ "limit_to_extruder": "adhesion_extruder_nr", "children": { - "raft_surface_speed": + "raft_base_speed": { - "label": "Raft Top Print Speed", - "description": "The speed at which the top raft layers are printed. These should be printed a bit slower, so that the nozzle can slowly smooth out adjacent surface lines.", + "label": "Raft Base Print Speed", + "description": "The speed at which the base raft layer is printed. This should be printed quite slowly, as the volume of material coming out of the nozzle is quite high.", "unit": "mm/s", "type": "float", - "default_value": 20, + "default_value": 15, "minimum_value": "0.1", "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", - "maximum_value_warning": "100", - "enabled": "resolveOrValue('adhesion_type') == 'raft' and raft_surface_layers > 0", - "value": "raft_speed", + "maximum_value_warning": "200", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", + "value": "0.75 * raft_speed", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "raft_surface_extruder_nr" + "limit_to_extruder": "raft_base_extruder_nr" }, "raft_interface_speed": { @@ -6376,21 +6578,21 @@ "settable_per_extruder": true, "limit_to_extruder": "raft_interface_extruder_nr" }, - "raft_base_speed": + "raft_surface_speed": { - "label": "Raft Base Print Speed", - "description": "The speed at which the base raft layer is printed. This should be printed quite slowly, as the volume of material coming out of the nozzle is quite high.", + "label": "Raft Top Print Speed", + "description": "The speed at which the top raft layers are printed. These should be printed a bit slower, so that the nozzle can slowly smooth out adjacent surface lines.", "unit": "mm/s", "type": "float", - "default_value": 15, + "default_value": 20, "minimum_value": "0.1", "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", - "maximum_value_warning": "200", - "enabled": "resolveOrValue('adhesion_type') == 'raft'", - "value": "0.75 * raft_speed", + "maximum_value_warning": "100", + "enabled": "resolveOrValue('adhesion_type') == 'raft' and raft_surface_layers > 0", + "value": "raft_speed", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "raft_base_extruder_nr" + "limit_to_extruder": "raft_surface_extruder_nr" } } }, @@ -6410,10 +6612,10 @@ "limit_to_extruder": "adhesion_extruder_nr", "children": { - "raft_surface_acceleration": + "raft_base_acceleration": { - "label": "Raft Top Print Acceleration", - "description": "The acceleration with which the top raft layers are printed.", + "label": "Raft Base Print Acceleration", + "description": "The acceleration with which the base raft layer is printed.", "unit": "mm/s\u00b2", "type": "float", "default_value": 3000, @@ -6421,9 +6623,9 @@ "minimum_value": "0.1", "minimum_value_warning": "100", "maximum_value_warning": "10000", - "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('acceleration_enabled') and raft_surface_layers > 0", + "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('acceleration_enabled')", "settable_per_mesh": false, - "limit_to_extruder": "raft_surface_extruder_nr" + "limit_to_extruder": "raft_base_extruder_nr" }, "raft_interface_acceleration": { @@ -6440,10 +6642,10 @@ "settable_per_mesh": false, "limit_to_extruder": "raft_interface_extruder_nr" }, - "raft_base_acceleration": + "raft_surface_acceleration": { - "label": "Raft Base Print Acceleration", - "description": "The acceleration with which the base raft layer is printed.", + "label": "Raft Top Print Acceleration", + "description": "The acceleration with which the top raft layers are printed.", "unit": "mm/s\u00b2", "type": "float", "default_value": 3000, @@ -6451,9 +6653,9 @@ "minimum_value": "0.1", "minimum_value_warning": "100", "maximum_value_warning": "10000", - "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('acceleration_enabled')", + "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('acceleration_enabled') and raft_surface_layers > 0", "settable_per_mesh": false, - "limit_to_extruder": "raft_base_extruder_nr" + "limit_to_extruder": "raft_surface_extruder_nr" } } }, @@ -6473,20 +6675,20 @@ "limit_to_extruder": "adhesion_extruder_nr", "children": { - "raft_surface_jerk": + "raft_base_jerk": { - "label": "Raft Top Print Jerk", - "description": "The jerk with which the top raft layers are printed.", + "label": "Raft Base Print Jerk", + "description": "The jerk with which the base raft layer is printed.", "unit": "mm/s", "type": "float", "default_value": 20, "value": "raft_jerk", "minimum_value": "0", "minimum_value_warning": "5", - "maximum_value_warning": "100", - "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('jerk_enabled') and raft_surface_layers > 0", + "maximum_value_warning": "50", + "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('jerk_enabled')", "settable_per_mesh": false, - "limit_to_extruder": "raft_surface_extruder_nr" + "limit_to_extruder": "raft_base_extruder_nr" }, "raft_interface_jerk": { @@ -6503,20 +6705,20 @@ "settable_per_mesh": false, "limit_to_extruder": "raft_interface_extruder_nr" }, - "raft_base_jerk": + "raft_surface_jerk": { - "label": "Raft Base Print Jerk", - "description": "The jerk with which the base raft layer is printed.", + "label": "Raft Top Print Jerk", + "description": "The jerk with which the top raft layers are printed.", "unit": "mm/s", "type": "float", "default_value": 20, "value": "raft_jerk", "minimum_value": "0", "minimum_value_warning": "5", - "maximum_value_warning": "50", - "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('jerk_enabled')", + "maximum_value_warning": "100", + "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('jerk_enabled') and raft_surface_layers > 0", "settable_per_mesh": false, - "limit_to_extruder": "raft_base_extruder_nr" + "limit_to_extruder": "raft_surface_extruder_nr" } } }, @@ -6535,20 +6737,20 @@ "limit_to_extruder": "adhesion_extruder_nr", "children": { - "raft_surface_fan_speed": + "raft_base_fan_speed": { - "label": "Raft Top Fan Speed", - "description": "The fan speed for the top raft layers.", + "label": "Raft Base Fan Speed", + "description": "The fan speed for the base raft layer.", "unit": "%", "type": "float", "minimum_value": "0", "maximum_value": "100", "default_value": 0, "value": "raft_fan_speed", - "enabled": "resolveOrValue('adhesion_type') == 'raft' and raft_surface_layers > 0", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "raft_surface_extruder_nr" + "limit_to_extruder": "raft_base_extruder_nr" }, "raft_interface_fan_speed": { @@ -6565,20 +6767,20 @@ "settable_per_extruder": true, "limit_to_extruder": "raft_interface_extruder_nr" }, - "raft_base_fan_speed": + "raft_surface_fan_speed": { - "label": "Raft Base Fan Speed", - "description": "The fan speed for the base raft layer.", + "label": "Raft Top Fan Speed", + "description": "The fan speed for the top raft layers.", "unit": "%", "type": "float", "minimum_value": "0", "maximum_value": "100", "default_value": 0, "value": "raft_fan_speed", - "enabled": "resolveOrValue('adhesion_type') == 'raft'", + "enabled": "resolveOrValue('adhesion_type') == 'raft' and raft_surface_layers > 0", "settable_per_mesh": false, "settable_per_extruder": true, - "limit_to_extruder": "raft_base_extruder_nr" + "limit_to_extruder": "raft_surface_extruder_nr" } } } @@ -6603,13 +6805,29 @@ "settable_per_mesh": false, "settable_per_extruder": false }, + "prime_tower_mode": + { + "label": "Prime Tower Type", + "description": "How to generate the prime tower:
  • Normal: create a bucket in which secondary materials are primed
  • Interleaved: create a prime tower as sparse as possible. This will save time and filament, but is only possible if the used materials adhere to each other.
", + "type": "enum", + "value": "'interleaved' if (all(material_type_var == extruderValues('material_type')[0] for material_type_var in extruderValues('material_type')) and all(material_brand_var == extruderValues('material_brand')[0] for material_brand_var in extruderValues('material_brand'))) else 'normal'", + "options": + { + "normal": "Normal", + "interleaved": "Interleaved" + }, + "default_value": "normal", + "enabled": "prime_tower_enable", + "settable_per_mesh": false, + "settable_per_extruder": false + }, "prime_tower_size": { "label": "Prime Tower Size", "description": "The width of the prime tower.", "type": "float", "unit": "mm", - "enabled": "resolveOrValue('prime_tower_enable')", + "enabled": "prime_tower_enable", "default_value": 20, "resolve": "max(extruderValues('prime_tower_size'))", "minimum_value": "0", @@ -6628,7 +6846,20 @@ "default_value": 6, "minimum_value": "0", "maximum_value_warning": "(resolveOrValue('prime_tower_size') * 0.5) ** 2 * 3.14159 * resolveOrValue('layer_height') - sum(extruderValues('prime_tower_min_volume')) + prime_tower_min_volume", - "enabled": "resolveOrValue('prime_tower_enable')", + "enabled": "prime_tower_enable", + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "prime_tower_max_bridging_distance": + { + "label": "Prime Tower Maximum Bridging Distance", + "description": "The maximum length of the branches which may be printed over the air.", + "unit": "mm", + "type": "float", + "default_value": 5, + "minimum_value": "line_width", + "maximum_value_warning": "10.0", + "enabled": "prime_tower_enable", "settable_per_mesh": false, "settable_per_extruder": true }, @@ -6638,7 +6869,7 @@ "description": "The x coordinate of the position of the prime tower.", "type": "float", "unit": "mm", - "enabled": "resolveOrValue('prime_tower_enable')", + "enabled": "prime_tower_enable", "default_value": 200, "value": "(resolveOrValue('machine_width') / 2 + resolveOrValue('prime_tower_size') / 2) if resolveOrValue('machine_shape') == 'elliptic' else (resolveOrValue('machine_width') - (resolveOrValue('prime_tower_base_size') if (resolveOrValue('adhesion_type') == 'raft' or resolveOrValue('prime_tower_brim_enable')) else 0) - max(max(extruderValues('travel_avoid_distance')) + max(extruderValues('machine_nozzle_offset_x')) + max(extruderValues('support_offset')) + (extruderValue(skirt_brim_extruder_nr, 'skirt_brim_line_width') * extruderValue(skirt_brim_extruder_nr, 'skirt_line_count') * extruderValue(skirt_brim_extruder_nr, 'initial_layer_line_width_factor') / 100 + extruderValue(skirt_brim_extruder_nr, 'skirt_gap') if resolveOrValue('adhesion_type') == 'skirt' else 0) + (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0), max(map(abs, extruderValues('machine_nozzle_offset_x'))), 1)) - (resolveOrValue('machine_width') / 2 if resolveOrValue('machine_center_is_zero') else 0)", "maximum_value": "(machine_width / 2 if machine_center_is_zero else machine_width) - (resolveOrValue('prime_tower_base_size') if (resolveOrValue('adhesion_type') == 'raft' or resolveOrValue('prime_tower_brim_enable')) else 0)", @@ -6652,7 +6883,7 @@ "description": "The y coordinate of the position of the prime tower.", "type": "float", "unit": "mm", - "enabled": "resolveOrValue('prime_tower_enable')", + "enabled": "prime_tower_enable", "default_value": 200, "value": "machine_depth - prime_tower_size - (resolveOrValue('prime_tower_base_size') if (resolveOrValue('adhesion_type') == 'raft' or resolveOrValue('prime_tower_brim_enable')) else 0) - max(max(extruderValues('travel_avoid_distance')) + max(extruderValues('machine_nozzle_offset_y')) + max(extruderValues('support_offset')) + (extruderValue(skirt_brim_extruder_nr, 'skirt_brim_line_width') * extruderValue(skirt_brim_extruder_nr, 'skirt_line_count') * extruderValue(skirt_brim_extruder_nr, 'initial_layer_line_width_factor') / 100 + extruderValue(skirt_brim_extruder_nr, 'skirt_gap') if resolveOrValue('adhesion_type') == 'skirt' else 0) + (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0), max(map(abs, extruderValues('machine_nozzle_offset_y'))), 1) - (resolveOrValue('machine_depth') / 2 if resolveOrValue('machine_center_is_zero') else 0)", "maximum_value": "(machine_depth / 2 - resolveOrValue('prime_tower_size') if machine_center_is_zero else machine_depth - resolveOrValue('prime_tower_size')) - (resolveOrValue('prime_tower_base_size') if (resolveOrValue('adhesion_type') == 'raft' or resolveOrValue('prime_tower_brim_enable')) else 0)", @@ -6665,7 +6896,7 @@ "label": "Wipe Inactive Nozzle on Prime Tower", "description": "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower.", "type": "bool", - "enabled": "resolveOrValue('prime_tower_enable')", + "enabled": "prime_tower_enable", "default_value": true, "settable_per_mesh": false, "settable_per_extruder": true @@ -6676,7 +6907,7 @@ "label": "Prime Tower Base", "description": "By enabling this setting, your prime-tower will get a brim, even if the model doesn't. If you want a sturdier base for a high tower, you can increase the base height.", "type": "bool", - "enabled": "resolveOrValue('prime_tower_enable') and resolveOrValue('adhesion_type') != 'raft'", + "enabled": "prime_tower_enable and resolveOrValue('adhesion_type') != 'raft'", "default_value": false, "settable_per_mesh": false, "settable_per_extruder": false @@ -6688,8 +6919,8 @@ "description": "The width of the prime tower brim/base. A larger base enhances adhesion to the build plate, but also reduces the effective print area.", "type": "float", "unit": "mm", - "enabled": "resolveOrValue('prime_tower_enable') and (resolveOrValue('prime_tower_brim_enable') or resolveOrValue('adhesion_type') == 'raft')", - "default_value": "resolveOrValue('brim_width')", + "enabled": "prime_tower_enable and (resolveOrValue('prime_tower_brim_enable') or resolveOrValue('adhesion_type') == 'raft')", + "default_value": 1.2, "minimum_value": "0", "maximum_value": "min(0.5 * machine_width, 0.5 * machine_depth)", "settable_per_mesh": false, @@ -6702,7 +6933,7 @@ "description": "The height of the prime tower base. Increasing this value will result in a more sturdy prime tower because the base will be wider. If this setting is too low, the prime tower will not have a sturdy base.", "type": "float", "unit": "mm", - "enabled": "resolveOrValue('prime_tower_enable') and (resolveOrValue('prime_tower_brim_enable') or resolveOrValue('adhesion_type') == 'raft')", + "enabled": "prime_tower_enable and (resolveOrValue('prime_tower_brim_enable') or resolveOrValue('adhesion_type') == 'raft')", "default_value": 0, "minimum_value": "0", "maximum_value": "machine_height", @@ -6714,7 +6945,7 @@ "label": "Prime Tower Base Slope", "description": "The magnitude factor used for the slope of the prime tower base. If you increase this value, the base will become slimmer. If you decrease it, the base will become thicker.", "type": "float", - "enabled": "resolveOrValue('prime_tower_enable') and (resolveOrValue('prime_tower_brim_enable') or resolveOrValue('adhesion_type') == 'raft')", + "enabled": "prime_tower_enable and (resolveOrValue('prime_tower_brim_enable') or resolveOrValue('adhesion_type') == 'raft')", "default_value": 4, "minimum_value": "0", "maximum_value": "10", @@ -6732,7 +6963,7 @@ "minimum_value": "0", "minimum_value_warning": "raft_base_line_width", "maximum_value_warning": "100", - "enabled": "resolveOrValue('prime_tower_enable') and resolveOrValue('adhesion_type') == 'raft'", + "enabled": "prime_tower_enable and resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "raft_base_extruder_nr" @@ -7060,6 +7291,16 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, + "user_defined_print_order_enabled": + { + "label": "Set Print Sequence Manually", + "description": "Allows to order the object list to set the print sequence manually. First object from the list will be printed first.", + "type": "bool", + "default_value": false, + "settable_per_mesh": false, + "settable_per_extruder": false, + "enabled": "print_sequence == 'one_at_a_time'" + }, "infill_mesh": { "label": "Infill Mesh", @@ -8273,28 +8514,6 @@ "settable_per_mesh": true, "settable_per_extruder": true }, - "raft_remove_inside_corners": - { - "label": "Remove Raft Inside Corners", - "description": "Remove inside corners from the raft, causing the raft to become convex.", - "type": "bool", - "default_value": false, - "resolve": "any(extruderValues('raft_remove_inside_corners'))", - "enabled": "resolveOrValue('adhesion_type') == 'raft'", - "settable_per_mesh": false, - "settable_per_extruder": false - }, - "raft_base_wall_count": - { - "label": "Raft Base Wall Count", - "description": "The number of contours to print around the linear pattern in the base layer of the raft.", - "type": "int", - "default_value": 1, - "enabled": "resolveOrValue('adhesion_type') == 'raft'", - "resolve": "max(extruderValues('raft_base_wall_count'))", - "settable_per_mesh": false, - "settable_per_extruder": false - }, "group_outer_walls": { "label": "Group Outer Walls", @@ -8329,7 +8548,7 @@ { "label": "Flow Warning", "description": "Limit on the flow warning for detection.", - "default_value": "15.0", + "default_value": 15.0, "enabled": "ppr_enable", "unit": "%", "type": "float", @@ -8339,7 +8558,7 @@ { "label": "Flow Limit", "description": "Limit on flow anomaly for detection.", - "default_value": "25.0", + "default_value": 25.0, "enabled": "ppr_enable", "unit": "%", "type": "float", @@ -8351,7 +8570,7 @@ "description": "Limit on Print temperature warning for detection.", "unit": "\u00b0C", "type": "float", - "default_value": "3.0", + "default_value": 3.0, "enabled": "ppr_enable", "settable_per_extruder": true }, @@ -8361,7 +8580,7 @@ "description": "Limit on Print Temperature anomaly for detection.", "unit": "\u00b0C", "type": "float", - "default_value": "7.0", + "default_value": 7.0, "enabled": "ppr_enable", "settable_per_extruder": true }, @@ -8371,7 +8590,7 @@ "description": "Limit on Build Volume Temperature warning for detection.", "unit": "\u00b0C", "type": "float", - "default_value": "7.5", + "default_value": 7.5, "enabled": "ppr_enable", "settable_per_extruder": false }, @@ -8381,7 +8600,7 @@ "description": "Limit on Build Volume temperature Anomaly for detection.", "unit": "\u00b0C", "type": "float", - "default_value": "10.0", + "default_value": 10.0, "enabled": "ppr_enable", "settable_per_extruder": false } diff --git a/resources/definitions/flashforge_adventurer3.def.json b/resources/definitions/flashforge_adventurer3.def.json new file mode 100644 index 0000000000..a05a7d5b8f --- /dev/null +++ b/resources/definitions/flashforge_adventurer3.def.json @@ -0,0 +1,15 @@ +{ + "version": 2, + "name": "Adventurer 3", + "inherits": "flashforge_adventurer3c", + "metadata": + { + "visible": true, + "author": "Jeremie-C", + "supports_network_connection": true + }, + "overrides": + { + "machine_name": { "default_value": "Adventurer 3" } + } +} \ No newline at end of file diff --git a/resources/definitions/flashforge_adventurer3c.def.json b/resources/definitions/flashforge_adventurer3c.def.json new file mode 100644 index 0000000000..f66e542591 --- /dev/null +++ b/resources/definitions/flashforge_adventurer3c.def.json @@ -0,0 +1,33 @@ +{ + "version": 2, + "name": "Adventurer 3C", + "inherits": "flashforge_adventurer_base", + "metadata": + { + "visible": true, + "author": "Jeremie-C", + "quality_definition": "flashforge_adventurer3" + }, + "overrides": + { + "default_material_bed_temperature": { "maximum_value_warning": "100" }, + "gantry_height": { "value": "150" }, + "machine_center_is_zero": { "default_value": true }, + "machine_depth": { "default_value": 150 }, + "machine_end_gcode": { "default_value": ";end gcode\nM104 S0 T0\nM140 S0 T0\nG162 Z F1800\nG28 X Y\nM132 X Y A B\nM652\nG91\nM18" }, + "machine_head_with_fans_polygon": + { + "default_value": [ + [-20, 10], + [-20, -10], + [10, 10], + [10, -10] + ] + }, + "machine_height": { "default_value": 150 }, + "machine_name": { "default_value": "Adventurer 3C" }, + "machine_start_gcode": { "default_value": ";Start Gcode\nG28\nM132 X Y Z A B\nG1 Z50.000 F420\nG161 X Y F3300\nM7 T0\nM6 T0\nM651 S255\n;End Start" }, + "machine_width": { "default_value": 150 }, + "speed_print": { "maximum_value_warning": 100 } + } +} \ No newline at end of file diff --git a/resources/definitions/flashforge_adventurer4.def.json b/resources/definitions/flashforge_adventurer4.def.json new file mode 100644 index 0000000000..2460051a9d --- /dev/null +++ b/resources/definitions/flashforge_adventurer4.def.json @@ -0,0 +1,33 @@ +{ + "version": 2, + "name": "Adventurer 4", + "inherits": "flashforge_adventurer_base", + "metadata": + { + "visible": true, + "author": "Jeremie-C", + "quality_definition": "flashforge_adventurer4", + "supports_network_connection": true + }, + "overrides": + { + "default_material_bed_temperature": { "maximum_value_warning": "110" }, + "gantry_height": { "value": "250" }, + "machine_depth": { "default_value": 200 }, + "machine_end_gcode": { "default_value": ";End Gcode\nM104 S0 T0\nM140 S0 T0\nG162 Z F1800\nG28 X Y\nM132 X Y A B\nM652\nG91\nM18" }, + "machine_head_with_fans_polygon": + { + "default_value": [ + [-20, 10], + [-20, -10], + [10, 10], + [10, -10] + ] + }, + "machine_height": { "default_value": 250 }, + "machine_name": { "default_value": "Adventurer 4" }, + "machine_start_gcode": { "default_value": ";Start Gcode\nG28\nM132 X Y Z A B\nG1 Z50.000 F420\nG161 X Y F3300\nM7 T0\nM6 T0\nM651 S255\n;End Start" }, + "machine_use_extruder_offset_to_offset_coords": { "default_value": false }, + "machine_width": { "default_value": 220 } + } +} \ No newline at end of file diff --git a/resources/definitions/flashforge_adventurer4lite.def.json b/resources/definitions/flashforge_adventurer4lite.def.json new file mode 100644 index 0000000000..f5b1975601 --- /dev/null +++ b/resources/definitions/flashforge_adventurer4lite.def.json @@ -0,0 +1,14 @@ +{ + "version": 2, + "name": "Adventurer 4 Lite", + "inherits": "flashforge_adventurer4", + "metadata": + { + "visible": true, + "author": "Jeremie-C" + }, + "overrides": + { + "machine_name": { "default_value": "Adventurer 4 Lite" } + } +} \ No newline at end of file diff --git a/resources/definitions/flashforge_adventurer_base.def.json b/resources/definitions/flashforge_adventurer_base.def.json new file mode 100644 index 0000000000..c077a4584c --- /dev/null +++ b/resources/definitions/flashforge_adventurer_base.def.json @@ -0,0 +1,34 @@ +{ + "version": 2, + "name": "Flashforge Adventurer Base", + "inherits": "fdmprinter", + "metadata": + { + "visible": false, + "author": "Jeremie-C", + "manufacturer": "Flashforge", + "file_formats": "application/gx;text/x-gcode", + "first_start_actions": [ "MachineSettingsAction" ], + "has_machine_quality": true, + "has_materials": true, + "has_variants": true, + "machine_extruder_trains": { "0": "flashforge_adventurer_extruder_0" }, + "preferred_material": "generic_pla", + "preferred_quality_type": "normal", + "preferred_variant_name": "0.4mm Nozzle", + "variants_name": "Nozzle Size" + }, + "overrides": + { + "adhesion_type": { "default_value": "skirt" }, + "default_material_print_temperature": { "maximum_value_warning": "265" }, + "layer_height": + { + "maximum_value_warning": "0.4", + "minimum_value_warning": "0.1" + }, + "machine_center_is_zero": { "default_value": true }, + "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, + "machine_heated_bed": { "default_value": true } + } +} \ No newline at end of file diff --git a/resources/definitions/flyingbear_base.def.json b/resources/definitions/flyingbear_base.def.json index 268d8a169b..8733a85a84 100644 --- a/resources/definitions/flyingbear_base.def.json +++ b/resources/definitions/flyingbear_base.def.json @@ -92,7 +92,6 @@ "support_interface_height": { "value": "layer_height * 4" }, "support_interface_line_width": { "value": "line_width - 0.1" }, "support_interface_pattern": { "value": "'grid'" }, - "support_interface_skip_height": { "value": 0.2 }, "support_pattern": { "value": "'zigzag'" }, "support_wall_count": { "value": 1 }, "support_xy_distance": { "value": "wall_line_width_0 * 2" }, diff --git a/resources/definitions/fusion3_f410.def.json b/resources/definitions/fusion3_f410.def.json index 6f50a15fd8..83fdb8affd 100644 --- a/resources/definitions/fusion3_f410.def.json +++ b/resources/definitions/fusion3_f410.def.json @@ -112,7 +112,6 @@ "support_interface_density": { "value": 33.333 }, "support_interface_height": { "value": "layer_height * 4" }, "support_interface_pattern": { "value": "'grid'" }, - "support_interface_skip_height": { "value": 0.2 }, "support_pattern": { "value": "'zigzag'" }, "support_wall_count": { "value": 0 }, "support_xy_distance": { "value": "wall_line_width_0 * 3" }, diff --git a/resources/definitions/kingroon_base.def.json b/resources/definitions/kingroon_base.def.json index 7b318018f7..b800b81cca 100644 --- a/resources/definitions/kingroon_base.def.json +++ b/resources/definitions/kingroon_base.def.json @@ -133,7 +133,6 @@ "support_interface_enable": { "value": true }, "support_interface_height": { "value": "layer_height * 4" }, "support_interface_pattern": { "value": "'grid'" }, - "support_interface_skip_height": { "value": 0.2 }, "support_pattern": { "value": "'zigzag'" }, "support_wall_count": { "value": 1 }, "support_xy_distance": { "value": "wall_line_width_0 * 2" }, diff --git a/resources/definitions/koonovo_base.def.json b/resources/definitions/koonovo_base.def.json index b22a4267d1..f46c39ec1e 100644 --- a/resources/definitions/koonovo_base.def.json +++ b/resources/definitions/koonovo_base.def.json @@ -70,7 +70,6 @@ "support_interface_enable": { "value": true }, "support_interface_height": { "value": "layer_height * 4" }, "support_interface_pattern": { "value": "'grid'" }, - "support_interface_skip_height": { "value": 0.2 }, "support_pattern": { "value": "'zigzag'" }, "support_wall_count": { "value": 1 }, "support_xy_distance": { "value": "wall_line_width_0 * 2" }, diff --git a/resources/definitions/koonovo_kn3.def.json b/resources/definitions/koonovo_kn3.def.json index ae978b12e0..06cf226ff4 100644 --- a/resources/definitions/koonovo_kn3.def.json +++ b/resources/definitions/koonovo_kn3.def.json @@ -88,7 +88,6 @@ "support_interface_enable": { "value": true }, "support_interface_height": { "value": "layer_height * 4" }, "support_interface_pattern": { "value": "'grid'" }, - "support_interface_skip_height": { "value": 0.2 }, "support_pattern": { "value": "'zigzag'" }, "support_wall_count": { "value": 1 }, "support_xy_distance": { "value": "wall_line_width_0 * 2" }, diff --git a/resources/definitions/koonovo_kn5.def.json b/resources/definitions/koonovo_kn5.def.json index 96ae03a6d9..c8e444f5d4 100644 --- a/resources/definitions/koonovo_kn5.def.json +++ b/resources/definitions/koonovo_kn5.def.json @@ -88,7 +88,6 @@ "support_interface_enable": { "value": true }, "support_interface_height": { "value": "layer_height * 4" }, "support_interface_pattern": { "value": "'grid'" }, - "support_interface_skip_height": { "value": 0.2 }, "support_pattern": { "value": "'zigzag'" }, "support_wall_count": { "value": 1 }, "support_xy_distance": { "value": "wall_line_width_0 * 2" }, diff --git a/resources/definitions/longer_base.def.json b/resources/definitions/longer_base.def.json index fdc78b838b..6010b7af46 100644 --- a/resources/definitions/longer_base.def.json +++ b/resources/definitions/longer_base.def.json @@ -109,7 +109,6 @@ "support_interface_enable": { "value": true }, "support_interface_height": { "value": "layer_height * 4" }, "support_interface_pattern": { "value": "'grid'" }, - "support_interface_skip_height": { "value": 0.2 }, "support_pattern": { "value": "'zigzag'" }, "support_wall_count": { "value": 1 }, "support_xy_distance": { "value": "wall_line_width_0 * 2" }, diff --git a/resources/definitions/mingda_base.def.json b/resources/definitions/mingda_base.def.json index 23dcf21f48..b07dbe458f 100644 --- a/resources/definitions/mingda_base.def.json +++ b/resources/definitions/mingda_base.def.json @@ -119,7 +119,6 @@ "support_interface_enable": { "value": true }, "support_interface_height": { "value": "layer_height * 4" }, "support_interface_pattern": { "value": "'grid'" }, - "support_interface_skip_height": { "value": 0.2 }, "support_pattern": { "value": "'zigzag'" }, "support_wall_count": { "value": 1 }, "support_xy_distance": { "value": "wall_line_width_0 * 2" }, diff --git a/resources/definitions/ratrig_base.def.json b/resources/definitions/ratrig_base.def.json new file mode 100644 index 0000000000..69ab0f139d --- /dev/null +++ b/resources/definitions/ratrig_base.def.json @@ -0,0 +1,20 @@ +{ + "version": 2, + "name": "RatRig Printer", + "inherits": "fdmprinter", + "metadata": + { + "visible": false, + "author": "nu-hin", + "manufacturer": "RatRig", + "file_formats": "text/x-gcode", + "exclude_materials": [], + "first_start_actions": [ "MachineSettingsAction" ], + "has_materials": true, + "machine_extruder_trains": { "0": "ratrig_base_extruder_0" }, + "preferred_material": "generic_pla", + "preferred_quality_type": "standard", + "quality_definition": "ratrig_base", + "supported_actions": [ "MachineSettingsAction" ] + } +} \ No newline at end of file diff --git a/resources/definitions/ratrig_vcore3_200.def.json b/resources/definitions/ratrig_vcore3_200.def.json new file mode 100644 index 0000000000..143063b95f --- /dev/null +++ b/resources/definitions/ratrig_vcore3_200.def.json @@ -0,0 +1,23 @@ +{ + "version": 2, + "name": "RatRig V-Core 3 200mm", + "inherits": "ratrig_vcore3_base", + "metadata": + { + "visible": true, + "platform": "ratrig_vcore3_200.stl", + "platform_offset": [ + 0, + 0, + 0 + ], + "weight": 16 + }, + "overrides": + { + "machine_depth": { "default_value": 200 }, + "machine_height": { "default_value": 200 }, + "machine_name": { "default_value": "RatRig V-Core 3 200mm" }, + "machine_width": { "default_value": 200 } + } +} \ No newline at end of file diff --git a/resources/definitions/ratrig_vcore3_300.def.json b/resources/definitions/ratrig_vcore3_300.def.json new file mode 100644 index 0000000000..c96860e90b --- /dev/null +++ b/resources/definitions/ratrig_vcore3_300.def.json @@ -0,0 +1,23 @@ +{ + "version": 2, + "name": "RatRig V-Core 3 300mm", + "inherits": "ratrig_vcore3_base", + "metadata": + { + "visible": true, + "platform": "ratrig_vcore3_300.stl", + "platform_offset": [ + 0, + 5, + 0 + ], + "weight": 16 + }, + "overrides": + { + "machine_depth": { "default_value": 300 }, + "machine_height": { "default_value": 300 }, + "machine_name": { "default_value": "RatRig V-Core 3 300mm" }, + "machine_width": { "default_value": 300 } + } +} \ No newline at end of file diff --git a/resources/definitions/ratrig_vcore3_400.def.json b/resources/definitions/ratrig_vcore3_400.def.json new file mode 100644 index 0000000000..fcd51686e8 --- /dev/null +++ b/resources/definitions/ratrig_vcore3_400.def.json @@ -0,0 +1,23 @@ +{ + "version": 2, + "name": "RatRig V-Core 3 400mm", + "inherits": "ratrig_vcore3_base", + "metadata": + { + "visible": true, + "platform": "ratrig_vcore3_400.stl", + "platform_offset": [ + 0, + 3, + 0 + ], + "weight": 16 + }, + "overrides": + { + "machine_depth": { "default_value": 400 }, + "machine_height": { "default_value": 400 }, + "machine_name": { "default_value": "RatRig V-Core 3 400mm" }, + "machine_width": { "default_value": 400 } + } +} \ No newline at end of file diff --git a/resources/definitions/ratrig_vcore3_500.def.json b/resources/definitions/ratrig_vcore3_500.def.json new file mode 100644 index 0000000000..97798bc4ce --- /dev/null +++ b/resources/definitions/ratrig_vcore3_500.def.json @@ -0,0 +1,23 @@ +{ + "version": 2, + "name": "RatRig V-Core 3 500mm", + "inherits": "ratrig_vcore3_base", + "metadata": + { + "visible": true, + "platform": "ratrig_vcore3_500.stl", + "platform_offset": [ + 0, + 0, + 0 + ], + "weight": 16 + }, + "overrides": + { + "machine_depth": { "default_value": 500 }, + "machine_height": { "default_value": 500 }, + "machine_name": { "default_value": "RatRig V-Core 3 500mm" }, + "machine_width": { "default_value": 500 } + } +} \ No newline at end of file diff --git a/resources/definitions/ratrig_vcore3_base.def.json b/resources/definitions/ratrig_vcore3_base.def.json new file mode 100644 index 0000000000..73049b2020 --- /dev/null +++ b/resources/definitions/ratrig_vcore3_base.def.json @@ -0,0 +1,116 @@ +{ + "version": 2, + "name": "RatRig V-Core 3", + "inherits": "ratrig_base", + "metadata": + { + "visible": false, + "has_machine_quality": true, + "has_variants": true, + "machine_extruder_trains": { "0": "ratrig_base_extruder_0" }, + "preferred_variant_name": "0.4mm Nozzle", + "variants_name": "Nozzle Size" + }, + "overrides": + { + "acceleration_enabled": { "value": true }, + "acceleration_layer_0": { "value": "acceleration_topbottom" }, + "acceleration_roofing": { "enabled": "acceleration_enabled and roofing_layer_count > 0 and top_layers > 0" }, + "acceleration_topbottom": { "value": "acceleration_print / 3" }, + "acceleration_travel": { "value": 3000 }, + "acceleration_travel_layer_0": { "value": "acceleration_travel / 3" }, + "adaptive_layer_height_variation": { "value": 0.04 }, + "adaptive_layer_height_variation_step": { "value": 0.04 }, + "adhesion_type": { "value": "'skirt'" }, + "brim_replaces_support": { "value": false }, + "brim_width": { "value": "3" }, + "cool_fan_full_at_height": { "value": "layer_height_0 + 2 * layer_height" }, + "cool_min_layer_time": { "value": 2 }, + "fill_outline_gaps": { "value": false }, + "gantry_height": { "value": 30 }, + "infill_before_walls": { "value": false }, + "infill_overlap": { "value": 30 }, + "infill_pattern": { "value": "'lines' if infill_sparse_density > 50 else 'cubic'" }, + "infill_wipe_dist": { "value": 0 }, + "layer_height": { "default_value": 0.2 }, + "layer_height_0": { "default_value": 0.2 }, + "machine_acceleration": { "value": 3000 }, + "machine_end_gcode": { "default_value": "END_PRINT" }, + "machine_extruder_count": { "default_value": 1 }, + "machine_head_with_fans_polygon": + { + "default_value": [ + [-40, 90], + [-40, -30], + [40, -30], + [40, 90] + ] + }, + "machine_heated_bed": { "default_value": true }, + "machine_max_acceleration_e": { "value": 5000 }, + "machine_max_acceleration_x": { "value": 9000 }, + "machine_max_acceleration_y": { "value": 9000 }, + "machine_max_acceleration_z": { "value": 100 }, + "machine_max_feedrate_e": { "value": 60 }, + "machine_max_feedrate_x": { "value": 500 }, + "machine_max_feedrate_y": { "value": 500 }, + "machine_max_feedrate_z": { "value": 10 }, + "machine_max_jerk_e": { "value": 5 }, + "machine_max_jerk_xy": { "value": 5 }, + "machine_max_jerk_z": { "value": 0.4 }, + "machine_name": { "default_value": "RatRig V-Core 3" }, + "machine_shape": { "default_value": "rectangular" }, + "machine_show_variants": { "default_value": true }, + "machine_start_gcode": { "default_value": "START_PRINT EXTRUDER_TEMP={material_print_temperature_layer_0} BED_TEMP={material_bed_temperature_layer_0}" }, + "material_diameter": { "default_value": 1.75 }, + "material_final_print_temperature": { "value": "material_print_temperature" }, + "material_initial_print_temperature": { "value": "material_print_temperature" }, + "meshfix_maximum_resolution": { "value": "0.25" }, + "meshfix_maximum_travel_resolution": { "value": "meshfix_maximum_resolution" }, + "minimum_interface_area": { "value": 10 }, + "minimum_support_area": { "value": 2 }, + "optimize_wall_printing_order": { "value": true }, + "retraction_amount": { "value": "machine_nozzle_size * 2" }, + "retraction_combing": { "value": "'off' if retraction_hop_enabled else 'noskin'" }, + "retraction_combing_max_distance": { "value": 30 }, + "retraction_count_max": { "value": 100 }, + "retraction_extrusion_window": { "value": 10 }, + "retraction_speed": { "value": 40 }, + "roofing_layer_count": { "value": 1 }, + "skin_overlap": { "value": 18 }, + "skirt_brim_minimal_length": { "default_value": 30 }, + "skirt_gap": { "value": 10 }, + "skirt_line_count": { "value": 3 }, + "speed_layer_0": { "value": "math.floor(speed_print * 3 / 10)" }, + "speed_print": { "value": 100 }, + "speed_roofing": { "value": "math.floor(speed_print * 3 / 10)" }, + "speed_support": { "value": "math.floor(speed_print * 3 / 10)" }, + "speed_support_interface": { "value": "speed_topbottom" }, + "speed_topbottom": { "value": "math.floor(speed_print / 2)" }, + "speed_travel": { "value": 250 }, + "speed_travel_layer_0": { "value": "100 if speed_layer_0 < 20 else 150 if speed_layer_0 > 30 else speed_layer_0 * 5" }, + "speed_wall_x": { "value": "speed_wall" }, + "speed_z_hop": { "value": 5 }, + "support_angle": { "value": "math.floor(math.degrees(math.atan(line_width/2.0/layer_height)))" }, + "support_brim_width": { "value": 4 }, + "support_infill_rate": { "value": "0 if support_enable and support_structure == 'tree' else 20" }, + "support_interface_density": { "value": 33.333 }, + "support_interface_enable": { "value": true }, + "support_interface_height": { "value": "layer_height * 4" }, + "support_interface_pattern": { "value": "'grid'" }, + "support_pattern": { "value": "'zigzag'" }, + "support_use_towers": { "value": false }, + "support_xy_distance": { "value": "wall_line_width_0 * 2" }, + "support_xy_distance_overhang": { "value": "wall_line_width_0" }, + "support_xy_overrides_z": { "value": "'xy_overrides_z'" }, + "support_z_distance": { "value": "layer_height if layer_height >= 0.16 else layer_height * 2" }, + "top_bottom_pattern": { "value": "'lines'" }, + "top_bottom_thickness": { "value": "layer_height_0 + layer_height * 3" }, + "travel_avoid_supports": { "value": true }, + "travel_retract_before_outer_wall": { "value": true }, + "wall_0_wipe_dist": { "value": 0 }, + "wall_thickness": { "value": "line_width * 2" }, + "z_seam_corner": { "value": "'z_seam_corner_weighted'" }, + "z_seam_type": { "value": "'back'" } + } +} \ No newline at end of file diff --git a/resources/definitions/ratrig_vminion.def.json b/resources/definitions/ratrig_vminion.def.json new file mode 100644 index 0000000000..daf0d4f302 --- /dev/null +++ b/resources/definitions/ratrig_vminion.def.json @@ -0,0 +1,127 @@ +{ + "version": 2, + "name": "RatRig V-Minion", + "inherits": "ratrig_base", + "metadata": + { + "visible": true, + "platform": "ratrig_vminion.stl", + "has_machine_quality": true, + "has_variants": true, + "machine_extruder_trains": { "0": "ratrig_base_extruder_0" }, + "platform_offset": [ + 0, + 0, + 0 + ], + "preferred_variant_name": "0.4mm Nozzle", + "variants_name": "Nozzle Size", + "weight": 8 + }, + "overrides": + { + "acceleration_enabled": { "value": true }, + "acceleration_layer_0": { "value": "acceleration_topbottom" }, + "acceleration_roofing": { "enabled": "acceleration_enabled and roofing_layer_count > 0 and top_layers > 0" }, + "acceleration_topbottom": { "value": "acceleration_print / 3" }, + "acceleration_travel": { "value": 3000 }, + "acceleration_travel_layer_0": { "value": "acceleration_travel / 3" }, + "adaptive_layer_height_variation": { "value": 0.04 }, + "adaptive_layer_height_variation_step": { "value": 0.04 }, + "adhesion_type": { "value": "'skirt'" }, + "brim_replaces_support": { "value": false }, + "brim_width": { "value": "3" }, + "cool_fan_full_at_height": { "value": "layer_height_0 + 2 * layer_height" }, + "cool_min_layer_time": { "value": 2 }, + "fill_outline_gaps": { "value": false }, + "gantry_height": { "value": 30 }, + "infill_before_walls": { "value": false }, + "infill_overlap": { "value": 30 }, + "infill_pattern": { "value": "'lines' if infill_sparse_density > 50 else 'cubic'" }, + "infill_wipe_dist": { "value": 0 }, + "layer_height": { "default_value": 0.2 }, + "layer_height_0": { "default_value": 0.2 }, + "machine_acceleration": { "value": 3000 }, + "machine_depth": { "default_value": 180 }, + "machine_end_gcode": { "default_value": "END_PRINT" }, + "machine_extruder_count": { "default_value": 1 }, + "machine_head_with_fans_polygon": + { + "default_value": [ + [-40, 90], + [-40, -30], + [40, -30], + [40, 90] + ] + }, + "machine_heated_bed": { "default_value": true }, + "machine_height": { "default_value": 180 }, + "machine_max_acceleration_e": { "value": 5000 }, + "machine_max_acceleration_x": { "value": 9000 }, + "machine_max_acceleration_y": { "value": 9000 }, + "machine_max_acceleration_z": { "value": 100 }, + "machine_max_feedrate_e": { "value": 60 }, + "machine_max_feedrate_x": { "value": 500 }, + "machine_max_feedrate_y": { "value": 500 }, + "machine_max_feedrate_z": { "value": 10 }, + "machine_max_jerk_e": { "value": 5 }, + "machine_max_jerk_xy": { "value": 5 }, + "machine_max_jerk_z": { "value": 0.4 }, + "machine_name": { "default_value": "RatRig V-Minion" }, + "machine_shape": { "default_value": "rectangular" }, + "machine_show_variants": { "default_value": true }, + "machine_start_gcode": { "default_value": "START_PRINT EXTRUDER_TEMP={material_print_temperature_layer_0} BED_TEMP={material_bed_temperature_layer_0}" }, + "machine_width": { "default_value": 180 }, + "material_diameter": { "default_value": 1.75 }, + "material_final_print_temperature": { "value": "material_print_temperature" }, + "material_initial_print_temperature": { "value": "material_print_temperature" }, + "meshfix_maximum_resolution": { "value": "0.25" }, + "meshfix_maximum_travel_resolution": { "value": "meshfix_maximum_resolution" }, + "minimum_interface_area": { "value": 10 }, + "minimum_support_area": { "value": 2 }, + "optimize_wall_printing_order": { "value": true }, + "retraction_amount": { "value": "machine_nozzle_size * 2" }, + "retraction_combing": { "value": "'off' if retraction_hop_enabled else 'noskin'" }, + "retraction_combing_max_distance": { "value": 30 }, + "retraction_count_max": { "value": 100 }, + "retraction_extrusion_window": { "value": 10 }, + "retraction_speed": { "value": 40 }, + "roofing_layer_count": { "value": 1 }, + "skin_overlap": { "value": 18 }, + "skirt_brim_minimal_length": { "default_value": 30 }, + "skirt_gap": { "value": 10 }, + "skirt_line_count": { "value": 3 }, + "speed_layer_0": { "value": "math.floor(speed_print * 3 / 10)" }, + "speed_print": { "value": 100 }, + "speed_roofing": { "value": "math.floor(speed_print * 3 / 10)" }, + "speed_support": { "value": "math.floor(speed_print * 3 / 10)" }, + "speed_support_interface": { "value": "speed_topbottom" }, + "speed_topbottom": { "value": "math.floor(speed_print / 2)" }, + "speed_travel": { "value": 250 }, + "speed_travel_layer_0": { "value": "100 if speed_layer_0 < 20 else 150 if speed_layer_0 > 30 else speed_layer_0 * 5" }, + "speed_wall": { "value": "math.floor(speed_print / 2)" }, + "speed_wall_x": { "value": "speed_wall" }, + "speed_z_hop": { "value": 5 }, + "support_angle": { "value": "math.floor(math.degrees(math.atan(line_width/2.0/layer_height)))" }, + "support_brim_width": { "value": 4 }, + "support_infill_rate": { "value": "0 if support_enable and support_structure == 'tree' else 20" }, + "support_interface_density": { "value": 33.333 }, + "support_interface_enable": { "value": true }, + "support_interface_height": { "value": "layer_height * 4" }, + "support_interface_pattern": { "value": "'grid'" }, + "support_pattern": { "value": "'zigzag'" }, + "support_use_towers": { "value": false }, + "support_xy_distance": { "value": "wall_line_width_0 * 2" }, + "support_xy_distance_overhang": { "value": "wall_line_width_0" }, + "support_xy_overrides_z": { "value": "'xy_overrides_z'" }, + "support_z_distance": { "value": "layer_height if layer_height >= 0.16 else layer_height * 2" }, + "top_bottom_pattern": { "value": "'lines'" }, + "top_bottom_thickness": { "value": "layer_height_0 + layer_height * 3" }, + "travel_avoid_supports": { "value": true }, + "travel_retract_before_outer_wall": { "value": true }, + "wall_0_wipe_dist": { "value": 0 }, + "wall_thickness": { "value": "line_width * 2" }, + "z_seam_corner": { "value": "'z_seam_corner_weighted'" }, + "z_seam_type": { "value": "'back'" } + } +} \ No newline at end of file diff --git a/resources/definitions/tank_m_base.def.json b/resources/definitions/tank_m_base.def.json index 3692793259..dfeaa7e9d8 100644 --- a/resources/definitions/tank_m_base.def.json +++ b/resources/definitions/tank_m_base.def.json @@ -70,7 +70,6 @@ "support_interface_enable": { "value": true }, "support_interface_height": { "value": "layer_height * 4" }, "support_interface_pattern": { "value": "'grid'" }, - "support_interface_skip_height": { "value": 0.2 }, "support_pattern": { "value": "'zigzag'" }, "support_wall_count": { "value": 1 }, "support_xy_distance": { "value": "wall_line_width_0 * 2" }, diff --git a/resources/definitions/tronxy_x.def.json b/resources/definitions/tronxy_x.def.json index 683761a81b..233dbb1c64 100644 --- a/resources/definitions/tronxy_x.def.json +++ b/resources/definitions/tronxy_x.def.json @@ -111,7 +111,6 @@ "support_interface_density": { "value": 33.333 }, "support_interface_height": { "value": "layer_height * 4" }, "support_interface_pattern": { "value": "'grid'" }, - "support_interface_skip_height": { "value": 0.2 }, "support_pattern": { "value": "'zigzag'" }, "support_wall_count": { "value": "1 if (support_structure == 'tree') else 0" }, "support_xy_distance": { "value": "wall_line_width_0 * 3" }, diff --git a/resources/definitions/two_trees_base.def.json b/resources/definitions/two_trees_base.def.json index ff01e46f6f..c83476db65 100644 --- a/resources/definitions/two_trees_base.def.json +++ b/resources/definitions/two_trees_base.def.json @@ -68,7 +68,6 @@ "support_interface_density": { "value": 33.333 }, "support_interface_height": { "value": "layer_height * 4" }, "support_interface_pattern": { "value": "'grid'" }, - "support_interface_skip_height": { "value": 0.2 }, "support_pattern": { "value": "'zigzag'" }, "support_wall_count": { "value": "1 if (support_structure == 'tree') else 0" }, "support_xy_distance": { "value": "wall_line_width_0 * 2" }, diff --git a/resources/definitions/ultimaker.def.json b/resources/definitions/ultimaker.def.json index 1669dd5e00..9f99b878be 100644 --- a/resources/definitions/ultimaker.def.json +++ b/resources/definitions/ultimaker.def.json @@ -96,16 +96,14 @@ "raft_interface_thickness": { "value": "(raft_base_thickness + raft_surface_thickness) / 2" }, "raft_speed": { "value": 15 }, "raft_surface_fan_speed": { "value": "cool_fan_speed_min" }, + "raft_surface_monotonic": { "value": true }, "raft_surface_speed": { "value": "speed_topbottom" }, - "relative_extrusion": - { - "enabled": false, - "value": false - }, + "relative_extrusion": { "enabled": false }, "retraction_combing": { "value": "'no_outer_surfaces'" }, "retraction_combing_max_distance": { "value": 15 }, "retraction_count_max": { "value": 25 }, "retraction_extrusion_window": { "value": 1 }, + "retraction_min_travel": { "value": 5 }, "roofing_layer_count": { "value": "1" }, "roofing_material_flow": { "value": "material_flow" }, "skin_angles": { "value": "[] if infill_pattern not in ['cross', 'cross_3d'] else [20, 110]" }, diff --git a/resources/definitions/ultimaker3.def.json b/resources/definitions/ultimaker3.def.json index 19df92c08d..17a4b6045e 100644 --- a/resources/definitions/ultimaker3.def.json +++ b/resources/definitions/ultimaker3.def.json @@ -156,7 +156,6 @@ "retraction_hop": { "value": "2" }, "retraction_hop_enabled": { "value": "extruders_enabled_count > 1" }, "retraction_hop_only_when_collides": { "value": "True" }, - "retraction_min_travel": { "value": "5" }, "retraction_prime_speed": { "value": "15" }, "skin_overlap": { "value": "10" }, "speed_prime_tower": { "value": "speed_topbottom" }, diff --git a/resources/definitions/ultimaker_method_base.def.json b/resources/definitions/ultimaker_method_base.def.json index 4f03a8dbe1..22d25f92c7 100644 --- a/resources/definitions/ultimaker_method_base.def.json +++ b/resources/definitions/ultimaker_method_base.def.json @@ -28,7 +28,6 @@ "generic_hips_175", "generic_pc_175", "ultimaker_rapidrinse_175", - "ultimaker_sr30_175", "generic_tpu_175", "goofoo_", "ideagen3D_", @@ -99,7 +98,7 @@ "acceleration_print": { "enabled": false, - "value": 300 + "value": 800 }, "acceleration_print_layer_0": { @@ -234,7 +233,7 @@ "jerk_print": { "enabled": false, - "value": 12.5 + "value": 6.25 }, "jerk_print_layer_0": { @@ -279,7 +278,7 @@ "jerk_travel": { "enabled": false, - "value": 12.5 + "value": "jerk_print" }, "jerk_travel_enabled": { @@ -361,8 +360,10 @@ "raft_interface_line_width": { "value": 0.7 }, "raft_interface_speed": { "value": 90 }, "raft_interface_thickness": { "value": 0.3 }, - "raft_margin": { "value": 3 }, + "raft_interface_wall_count": { "value": "raft_wall_count" }, + "raft_margin": { "value": 1.2 }, "raft_surface_extruder_nr": { "value": "int(anyExtruderWithMaterial('material_is_support_material')) if support_enable and extruderValue(support_extruder_nr,'material_is_support_material') else raft_base_extruder_nr" }, + "raft_surface_wall_count": { "value": "raft_wall_count" }, "retraction_amount": { "value": 0.75 }, "retraction_combing": { "value": "'off'" }, "retraction_combing_max_distance": { "value": "speed_travel / 10" }, @@ -371,19 +372,17 @@ "retraction_hop": { "value": 0.4 }, "retraction_hop_enabled": { "value": true }, "retraction_hop_only_when_collides": { "value": false }, - "retraction_min_travel": { "value": "line_width * 4" }, "retraction_prime_speed": { "value": "retraction_speed" }, "retraction_speed": { "value": 5 }, "roofing_layer_count": { "value": 2 }, - "roofing_material_flow": { "value": "material_flow" }, "roofing_monotonic": { "value": true }, "skin_material_flow": { "value": "0.95*material_flow" }, - "skin_monotonic": { "value": true }, "skin_outline_count": { "value": 0 }, "skin_overlap": { "value": 0 }, "skin_preshrink": { "value": 0 }, "skirt_brim_material_flow": { "value": "material_flow" }, "skirt_brim_minimal_length": { "value": 500 }, + "small_skin_width": { "value": 4 }, "speed_equalize_flow_width_factor": { "value": 0 }, "speed_prime_tower": { "value": "speed_topbottom" }, "speed_print": { "value": 50 }, @@ -424,7 +423,7 @@ "travel_avoid_other_parts": { "value": false }, "wall_0_inset": { "value": 0 }, "wall_0_material_flow": { "value": "material_flow" }, - "wall_0_wipe_dist": { "value": 0 }, + "wall_0_wipe_dist": { "value": 0.8 }, "wall_material_flow": { "value": "material_flow" }, "wall_x_material_flow": { "value": "material_flow" }, "xy_offset": { "value": 0 }, diff --git a/resources/definitions/ultimaker_methodx.def.json b/resources/definitions/ultimaker_methodx.def.json index a6708a0421..9828ba96f2 100644 --- a/resources/definitions/ultimaker_methodx.def.json +++ b/resources/definitions/ultimaker_methodx.def.json @@ -35,7 +35,6 @@ "generic_nylon_175", "generic_hips_175", "generic_pc_175", - "ultimaker_sr30_175", "generic_tpu_175", "goofoo_", "ideagen3D_", diff --git a/resources/definitions/ultimaker_s3.def.json b/resources/definitions/ultimaker_s3.def.json index add1782368..483825df5a 100644 --- a/resources/definitions/ultimaker_s3.def.json +++ b/resources/definitions/ultimaker_s3.def.json @@ -108,7 +108,6 @@ "retraction_hop": { "value": "2" }, "retraction_hop_enabled": { "value": "extruders_enabled_count > 1" }, "retraction_hop_only_when_collides": { "value": "True" }, - "retraction_min_travel": { "value": "5" }, "retraction_prime_speed": { "value": "15" }, "retraction_speed": { "value": "45" }, "speed_prime_tower": { "value": "speed_topbottom" }, diff --git a/resources/definitions/ultimaker_s5.def.json b/resources/definitions/ultimaker_s5.def.json index ec82e6b630..cd48c4fd38 100644 --- a/resources/definitions/ultimaker_s5.def.json +++ b/resources/definitions/ultimaker_s5.def.json @@ -110,7 +110,6 @@ "retraction_hop": { "value": "2" }, "retraction_hop_enabled": { "value": "extruders_enabled_count > 1" }, "retraction_hop_only_when_collides": { "value": "True" }, - "retraction_min_travel": { "value": "5" }, "retraction_prime_speed": { "value": "15" }, "retraction_speed": { "value": "45" }, "speed_prime_tower": { "value": "speed_topbottom" }, diff --git a/resources/definitions/vivedino_base.def.json b/resources/definitions/vivedino_base.def.json index a638fc105c..a5cf0def87 100644 --- a/resources/definitions/vivedino_base.def.json +++ b/resources/definitions/vivedino_base.def.json @@ -99,7 +99,6 @@ "support_interface_enable": { "value": true }, "support_interface_height": { "value": "layer_height * 4" }, "support_interface_pattern": { "value": "'grid'" }, - "support_interface_skip_height": { "value": 0.2 }, "support_pattern": { "value": "'zigzag'" }, "support_wall_count": { "value": 1 }, "support_xy_distance": { "value": "wall_line_width_0 * 2" }, diff --git a/resources/definitions/voron2_base.def.json b/resources/definitions/voron2_base.def.json index 1e76380b69..dc6cd255bb 100644 --- a/resources/definitions/voron2_base.def.json +++ b/resources/definitions/voron2_base.def.json @@ -55,7 +55,7 @@ "machine_endstop_positive_direction_y": { "default_value": true }, "machine_endstop_positive_direction_z": { "default_value": false }, "machine_feeder_wheel_diameter": { "default_value": 7.5 }, - "machine_gcode_flavor": { "default_value": "RepRap (RepRap)" }, + "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, "machine_head_with_fans_polygon": { "default_value": [ @@ -76,7 +76,7 @@ "machine_max_jerk_xy": { "default_value": 20 }, "machine_max_jerk_z": { "default_value": 1 }, "machine_name": { "default_value": "VORON2" }, - "machine_start_gcode": { "default_value": "print_start" }, + "machine_start_gcode": { "default_value": ";Nozzle diameter = {machine_nozzle_size}\n;Filament type = {material_type}\n;Filament name = {material_name}\n;Filament weight = {filament_weight}\n; M190 S{material_bed_temperature_layer_0}\n; M109 S{material_print_temperature_layer_0}\nprint_start EXTRUDER={material_print_temperature_layer_0} BED={material_bed_temperature_layer_0} CHAMBER={build_volume_temperature}" }, "machine_steps_per_mm_x": { "default_value": 80 }, "machine_steps_per_mm_y": { "default_value": 80 }, "machine_steps_per_mm_z": { "default_value": 400 }, diff --git a/resources/extruders/flashforge_adventurer_extruder_0.def.json b/resources/extruders/flashforge_adventurer_extruder_0.def.json new file mode 100644 index 0000000000..232cf3f901 --- /dev/null +++ b/resources/extruders/flashforge_adventurer_extruder_0.def.json @@ -0,0 +1,16 @@ +{ + "version": 2, + "name": "Extruder", + "inherits": "fdmextruder", + "metadata": + { + "machine": "flashforge_adventurer_base", + "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/extruders/geeetech_A20_1.def.json b/resources/extruders/geeetech_A20_1.def.json new file mode 100644 index 0000000000..96e94fe2f6 --- /dev/null +++ b/resources/extruders/geeetech_A20_1.def.json @@ -0,0 +1,16 @@ +{ + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": + { + "machine": "geeetech_A20", + "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/extruders/ratrig_base_extruder_0.def.json b/resources/extruders/ratrig_base_extruder_0.def.json new file mode 100644 index 0000000000..e5afcbdb54 --- /dev/null +++ b/resources/extruders/ratrig_base_extruder_0.def.json @@ -0,0 +1,16 @@ +{ + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": + { + "machine": "ratrig_base", + "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/extruders/ultimaker_methodx_extruder_left.def.json b/resources/extruders/ultimaker_methodx_extruder_left.def.json index 97e8a1f2c3..648a1d6a5c 100644 --- a/resources/extruders/ultimaker_methodx_extruder_left.def.json +++ b/resources/extruders/ultimaker_methodx_extruder_left.def.json @@ -14,8 +14,9 @@ "default_value": 0, "maximum_value": "1" }, - "machine_extruder_end_code": { "default_value": "M106 P{extruder_nr} S255\nG91\nG0 Z0.4 F600\nG90\nG0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000" }, - "machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nM109 S{material_final_print_temperature}\nG4 S5\nG91\nG0 Z-0.4 F600\nG90\nM107 P{(extruder_nr+1)%2}\nM106 P{extruder_nr} S{cool_fan_speed*255/100}" }, + "machine_extruder_end_code": { "default_value": "M106 P{extruder_nr} S1.0\nG91\nG0 Z0.4 F600\nG90\nG0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000" }, + "machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nM104 S{material_print_temperature}\nG4 S5\nG91\nG0 Z-0.4 F600\nG90\nM107 P{(extruder_nr+1)%2}\nM106 P{extruder_nr} S{cool_fan_speed/100}" }, + "machine_extruder_start_code_duration": { "default_value": 8 }, "machine_nozzle_offset_x": { "default_value": 0 }, "machine_nozzle_offset_y": { "default_value": 0 }, "machine_nozzle_size": { "default_value": 0.4 }, diff --git a/resources/extruders/ultimaker_methodx_extruder_right.def.json b/resources/extruders/ultimaker_methodx_extruder_right.def.json index 8a4ef33404..ea52c5dbd2 100644 --- a/resources/extruders/ultimaker_methodx_extruder_right.def.json +++ b/resources/extruders/ultimaker_methodx_extruder_right.def.json @@ -14,8 +14,9 @@ "default_value": 1, "maximum_value": "1" }, - "machine_extruder_end_code": { "default_value": "M106 P{extruder_nr} S255\nG91\nG0 Z0.4 F600\nG90\nG0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000" }, - "machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nM109 S{material_final_print_temperature}\nG4 S5\nG91\nG0 Z-0.4 F600\nG90\nM107 P{(extruder_nr+1)%2}\nM106 P{extruder_nr} S{cool_fan_speed*255/100}" }, + "machine_extruder_end_code": { "default_value": "M106 P{extruder_nr} S1.0\nG91\nG0 Z0.4 F600\nG90\nG0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000" }, + "machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nM104 S{material_print_temperature}\nG4 S5\nG91\nG0 Z-0.4 F600\nG90\nM107 P{(extruder_nr+1)%2}\nM106 P{extruder_nr} S{cool_fan_speed/100}" }, + "machine_extruder_start_code_duration": { "default_value": 8 }, "machine_nozzle_offset_x": { "default_value": 0 }, "machine_nozzle_offset_y": { "default_value": 0 }, "machine_nozzle_size": { "default_value": 0.4 }, diff --git a/resources/extruders/ultimaker_methodxl_extruder_left.def.json b/resources/extruders/ultimaker_methodxl_extruder_left.def.json index 2bedf9a62c..43de74b497 100644 --- a/resources/extruders/ultimaker_methodxl_extruder_left.def.json +++ b/resources/extruders/ultimaker_methodxl_extruder_left.def.json @@ -14,8 +14,9 @@ "default_value": 0, "maximum_value": "1" }, - "machine_extruder_end_code": { "default_value": "M106 P{extruder_nr} S255\nG91\nG0 Z0.4 F600\nG90\nG0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000" }, - "machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nM109 S{material_final_print_temperature}\nG4 S5\nG91\nG0 Z-0.4 F600\nG90\nM107 P{(extruder_nr+1)%2}\nM106 P{extruder_nr} S{cool_fan_speed*255/100}" }, + "machine_extruder_end_code": { "default_value": "M106 P{extruder_nr} S1.0\nG91\nG0 Z0.4 F600\nG90\nG0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000" }, + "machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nM104 S{material_print_temperature}\nG4 S5\nG91\nG0 Z-0.4 F600\nG90\nM107 P{(extruder_nr+1)%2}\nM106 P{extruder_nr} S{cool_fan_speed/100}" }, + "machine_extruder_start_code_duration": { "default_value": 10 }, "machine_nozzle_offset_x": { "default_value": 0 }, "machine_nozzle_offset_y": { "default_value": 0 }, "machine_nozzle_size": { "default_value": 0.4 }, diff --git a/resources/extruders/ultimaker_methodxl_extruder_right.def.json b/resources/extruders/ultimaker_methodxl_extruder_right.def.json index 2fd5b37663..581811646f 100644 --- a/resources/extruders/ultimaker_methodxl_extruder_right.def.json +++ b/resources/extruders/ultimaker_methodxl_extruder_right.def.json @@ -14,8 +14,9 @@ "default_value": 1, "maximum_value": "1" }, - "machine_extruder_end_code": { "default_value": "M106 P{extruder_nr} S255\nG91\nG0 Z0.4 F600\nG90\nG0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000" }, - "machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nM109 S{material_final_print_temperature}\nG4 S5\nG91\nG0 Z-0.4 F600\nG90\nM107 P{(extruder_nr+1)%2}\nM106 P{extruder_nr} S{cool_fan_speed*255/100}" }, + "machine_extruder_end_code": { "default_value": "M106 P{extruder_nr} S1.0\nG91\nG0 Z0.4 F600\nG90\nG0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000" }, + "machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nM104 S{material_print_temperature}\nG4 S5\nG91\nG0 Z-0.4 F600\nG90\nM107 P{(extruder_nr+1)%2}\nM106 P{extruder_nr} S{cool_fan_speed/100}" }, + "machine_extruder_start_code_duration": { "default_value": 10 }, "machine_nozzle_offset_x": { "default_value": 0 }, "machine_nozzle_offset_y": { "default_value": 0 }, "machine_nozzle_size": { "default_value": 0.4 }, diff --git a/resources/i18n/cs_CZ/cura.po b/resources/i18n/cs_CZ/cura.po index 715af3ea84..3267139490 100644 --- a/resources/i18n/cs_CZ/cura.po +++ b/resources/i18n/cs_CZ/cura.po @@ -4946,6 +4946,14 @@ msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Rozdělit modely" +msgctxt "@action:inmenu menubar:edit" +msgid "Print Before" +msgstr "Tisknout před" + +msgctxt "@action:inmenu menubar:edit" +msgid "Print After" +msgstr "Tisknout po" + msgctxt "@button" msgid "Uninstall" msgstr "Odinstalovat" diff --git a/resources/i18n/cs_CZ/fdmprinter.def.json.po b/resources/i18n/cs_CZ/fdmprinter.def.json.po index 7588e81c52..4b697c9cea 100644 --- a/resources/i18n/cs_CZ/fdmprinter.def.json.po +++ b/resources/i18n/cs_CZ/fdmprinter.def.json.po @@ -2583,6 +2583,14 @@ msgctxt "print_sequence label" msgid "Print Sequence" msgstr "Tisková sekvence" +msgctxt "user_defined_print_order_enabled label" +msgid "Set Print Sequence Manually" +msgstr "Nastavit tiskovou sekvenci ručně" + +msgctxt "user_defined_print_order_enabled description" +msgid "Allows to order the object list to set the print sequence manually. First object from the list will be printed first." +msgstr "Umožňuje řadit seznam objektů pro ruční nastavení tiskové sekvence. První objekt ze seznamu bude vytisknut jako první." + msgctxt "speed_print label" msgid "Print Speed" msgstr "Rychlost tisku" diff --git a/resources/i18n/cura.pot b/resources/i18n/cura.pot index 7d5b5f94d6..2fabd97f7e 100644 --- a/resources/i18n/cura.pot +++ b/resources/i18n/cura.pot @@ -4565,6 +4565,14 @@ msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "" +msgctxt "@action:inmenu menubar:edit" +msgid "Print Before" +msgstr "" + +msgctxt "@action:inmenu menubar:edit" +msgid "Print After" +msgstr "" + msgctxt "@button" msgid "Uninstall" msgstr "" diff --git a/resources/i18n/de_DE/cura.po b/resources/i18n/de_DE/cura.po index f006c75fb6..8ca4de67b4 100644 --- a/resources/i18n/de_DE/cura.po +++ b/resources/i18n/de_DE/cura.po @@ -4930,6 +4930,14 @@ msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Gruppierung für Modelle aufheben" +msgctxt "@action:inmenu menubar:edit" +msgid "Print Before" +msgstr "Vor dem Drucken" + +msgctxt "@action:inmenu menubar:edit" +msgid "Print After" +msgstr "Nach dem Drucken" + msgctxt "@button" msgid "Uninstall" msgstr "Deinstallieren" diff --git a/resources/i18n/de_DE/fdmprinter.def.json.po b/resources/i18n/de_DE/fdmprinter.def.json.po index ca893ad149..ff44a4837d 100644 --- a/resources/i18n/de_DE/fdmprinter.def.json.po +++ b/resources/i18n/de_DE/fdmprinter.def.json.po @@ -2580,6 +2580,14 @@ msgctxt "print_sequence label" msgid "Print Sequence" msgstr "Druckreihenfolge" +msgctxt "user_defined_print_order_enabled label" +msgid "Set Print Sequence Manually" +msgstr "Druckreihenfolge manuell einstellen" + +msgctxt "user_defined_print_order_enabled description" +msgid "Allows to order the object list to set the print sequence manually. First object from the list will be printed first." +msgstr "Ermöglicht das Ordnen der Objektliste, um die Druckreihenfolge manuell festzulegen. Das erste Objekt aus der Liste wird zuerst gedruckt." + msgctxt "speed_print label" msgid "Print Speed" msgstr "Druckgeschwindigkeit" diff --git a/resources/i18n/es_ES/cura.po b/resources/i18n/es_ES/cura.po index 07d4ad2d79..aa4c727441 100644 --- a/resources/i18n/es_ES/cura.po +++ b/resources/i18n/es_ES/cura.po @@ -4931,6 +4931,14 @@ msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Desagrupar modelos" +msgctxt "@action:inmenu menubar:edit" +msgid "Print Before" +msgstr "Imprimir antes" + +msgctxt "@action:inmenu menubar:edit" +msgid "Print After" +msgstr "Imprimir después" + msgctxt "@button" msgid "Uninstall" msgstr "Desinstalar" diff --git a/resources/i18n/es_ES/fdmprinter.def.json.po b/resources/i18n/es_ES/fdmprinter.def.json.po index 4b797652ed..6811ca05a8 100644 --- a/resources/i18n/es_ES/fdmprinter.def.json.po +++ b/resources/i18n/es_ES/fdmprinter.def.json.po @@ -2580,6 +2580,14 @@ msgctxt "print_sequence label" msgid "Print Sequence" msgstr "Secuencia de impresión" +msgctxt "user_defined_print_order_enabled label" +msgid "Set Print Sequence Manually" +msgstr "Establecer secuencia de impresión manualmente" + +msgctxt "user_defined_print_order_enabled description" +msgid "Allows to order the object list to set the print sequence manually. First object from the list will be printed first." +msgstr "Permite ordenar la lista de objetos para establecer la secuencia de impresión manualmente. El primer objeto de la lista se imprimirá primero." + msgctxt "speed_print label" msgid "Print Speed" msgstr "Velocidad de impresión" diff --git a/resources/i18n/fdmprinter.def.json.pot b/resources/i18n/fdmprinter.def.json.pot index 6b61ec3173..4e858de0a7 100644 --- a/resources/i18n/fdmprinter.def.json.pot +++ b/resources/i18n/fdmprinter.def.json.pot @@ -3548,14 +3548,6 @@ msgctxt "support_bottom_height description" msgid "The thickness of the support floors. This controls the number of dense layers that are printed on top of places of a model on which support rests." msgstr "" -msgctxt "support_interface_skip_height label" -msgid "Support Interface Resolution" -msgstr "" - -msgctxt "support_interface_skip_height description" -msgid "When checking where there's model above and below the support, take steps of the given height. Lower values will slice slower, while higher values may cause normal support to be printed in some places where there should have been support interface." -msgstr "" - msgctxt "support_interface_density label" msgid "Support Interface Density" msgstr "" @@ -4596,6 +4588,14 @@ msgctxt "print_sequence option one_at_a_time" msgid "One at a Time" msgstr "" +msgctxt "user_defined_print_order_enabled label" +msgid "Set Print Sequence Manually" +msgstr "" + +msgctxt "user_defined_print_order_enabled description" +msgid "Allows to order the object list to set the print sequence manually. First object from the list will be printed first." +msgstr "" + msgctxt "infill_mesh label" msgid "Infill Mesh" msgstr "" diff --git a/resources/i18n/fi_FI/cura.po b/resources/i18n/fi_FI/cura.po index c3f331c1ef..55a60d50ae 100644 --- a/resources/i18n/fi_FI/cura.po +++ b/resources/i18n/fi_FI/cura.po @@ -4899,6 +4899,14 @@ msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Poista mallien ryhmitys" +msgctxt "@action:inmenu menubar:edit" +msgid "Print Before" +msgstr "Tulosta ennen" + +msgctxt "@action:inmenu menubar:edit" +msgid "Print After" +msgstr "Tulosta jälkeen" + msgctxt "@button" msgid "Uninstall" msgstr "" diff --git a/resources/i18n/fi_FI/fdmprinter.def.json.po b/resources/i18n/fi_FI/fdmprinter.def.json.po index 19a83d2f6a..a1e4ab420e 100644 --- a/resources/i18n/fi_FI/fdmprinter.def.json.po +++ b/resources/i18n/fi_FI/fdmprinter.def.json.po @@ -2578,6 +2578,14 @@ msgctxt "print_sequence label" msgid "Print Sequence" msgstr "Tulostusjärjestys" +msgctxt "user_defined_print_order_enabled label" +msgid "Set Print Sequence Manually" +msgstr "Aseta tulostusjärjestys manuaalisesti" + +msgctxt "user_defined_print_order_enabled description" +msgid "Allows to order the object list to set the print sequence manually. First object from the list will be printed first." +msgstr "Mahdollistaa kohteiden järjestämisen tulostusjärjestyksen manuaaliseen asettamiseen. Listan ensimmäinen kohde tulostetaan ensin." + msgctxt "speed_print label" msgid "Print Speed" msgstr "Tulostusnopeus" diff --git a/resources/i18n/fr_FR/cura.po b/resources/i18n/fr_FR/cura.po index b597b2d540..af46346d63 100644 --- a/resources/i18n/fr_FR/cura.po +++ b/resources/i18n/fr_FR/cura.po @@ -4928,6 +4928,14 @@ msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Dégrouper les modèles" +msgctxt "@action:inmenu menubar:edit" +msgid "Print Before" +msgstr "Imprimer avant" + +msgctxt "@action:inmenu menubar:edit" +msgid "Print After" +msgstr "Imprimer après" + msgctxt "@button" msgid "Uninstall" msgstr "Désinstaller" diff --git a/resources/i18n/fr_FR/fdmprinter.def.json.po b/resources/i18n/fr_FR/fdmprinter.def.json.po index e4018d33e5..2376820b7c 100644 --- a/resources/i18n/fr_FR/fdmprinter.def.json.po +++ b/resources/i18n/fr_FR/fdmprinter.def.json.po @@ -2580,6 +2580,14 @@ msgctxt "print_sequence label" msgid "Print Sequence" msgstr "Séquence d'impression" +msgctxt "user_defined_print_order_enabled label" +msgid "Set Print Sequence Manually" +msgstr "Définir la séquence d'impression manuellement" + +msgctxt "user_defined_print_order_enabled description" +msgid "Allows to order the object list to set the print sequence manually. First object from the list will be printed first." +msgstr "Permet de classer la liste des objets pour définir manuellement la séquence d'impression. Le premier objet de la liste sera imprimé en premier." + msgctxt "speed_print label" msgid "Print Speed" msgstr "Vitesse d’impression" diff --git a/resources/i18n/hu_HU/cura.po b/resources/i18n/hu_HU/cura.po index 9a502fbdf6..d5f06599a1 100644 --- a/resources/i18n/hu_HU/cura.po +++ b/resources/i18n/hu_HU/cura.po @@ -4913,6 +4913,14 @@ msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Csoport bontása" +msgctxt "@action:inmenu menubar:edit" +msgid "Print Before" +msgstr "Nyomtatás előtt" + +msgctxt "@action:inmenu menubar:edit" +msgid "Print After" +msgstr "Nyomtatás után" + msgctxt "@button" msgid "Uninstall" msgstr "" diff --git a/resources/i18n/hu_HU/fdmprinter.def.json.po b/resources/i18n/hu_HU/fdmprinter.def.json.po index 789454be37..27eabd4bbc 100644 --- a/resources/i18n/hu_HU/fdmprinter.def.json.po +++ b/resources/i18n/hu_HU/fdmprinter.def.json.po @@ -2585,6 +2585,14 @@ msgctxt "print_sequence label" msgid "Print Sequence" msgstr "Nyomtatási sorrend" +msgctxt "user_defined_print_order_enabled label" +msgid "Set Print Sequence Manually" +msgstr "Nyomtatási sorrend kézi beállítása" + +msgctxt "user_defined_print_order_enabled description" +msgid "Allows to order the object list to set the print sequence manually. First object from the list will be printed first." +msgstr "Lehetővé teszi az objektumlista rendezését a nyomtatási sorrend kézi beállításához. A lista első objektuma lesz először nyomtatva." + msgctxt "speed_print label" msgid "Print Speed" msgstr "Nyomtatási sebesség" diff --git a/resources/i18n/it_IT/cura.po b/resources/i18n/it_IT/cura.po index 1a131973bf..48918d3883 100644 --- a/resources/i18n/it_IT/cura.po +++ b/resources/i18n/it_IT/cura.po @@ -4931,6 +4931,14 @@ msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Separa modelli" +msgctxt "@action:inmenu menubar:edit" +msgid "Print Before" +msgstr "Stampa prima" + +msgctxt "@action:inmenu menubar:edit" +msgid "Print After" +msgstr "Stampa dopo" + msgctxt "@button" msgid "Uninstall" msgstr "Disinstalla" diff --git a/resources/i18n/it_IT/fdmprinter.def.json.po b/resources/i18n/it_IT/fdmprinter.def.json.po index 4565e30aa9..e9fc77ca3c 100644 --- a/resources/i18n/it_IT/fdmprinter.def.json.po +++ b/resources/i18n/it_IT/fdmprinter.def.json.po @@ -2580,6 +2580,14 @@ msgctxt "print_sequence label" msgid "Print Sequence" msgstr "Sequenza di stampa" +msgctxt "user_defined_print_order_enabled label" +msgid "Set Print Sequence Manually" +msgstr "Imposta manualmente la sequenza di stampa" + +msgctxt "user_defined_print_order_enabled description" +msgid "Allows to order the object list to set the print sequence manually. First object from the list will be printed first." +msgstr "Consente di ordinare l'elenco degli oggetti per impostare manualmente la sequenza di stampa. Il primo oggetto dell'elenco sarà stampato per primo." + msgctxt "speed_print label" msgid "Print Speed" msgstr "Velocità di stampa" diff --git a/resources/i18n/ja_JP/cura.po b/resources/i18n/ja_JP/cura.po index 7826e4df9e..bc2f27e825 100644 --- a/resources/i18n/ja_JP/cura.po +++ b/resources/i18n/ja_JP/cura.po @@ -4914,6 +4914,14 @@ msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "モデルを非グループ化" +msgctxt "@action:inmenu menubar:edit" +msgid "Print Before" +msgstr "印刷前" + +msgctxt "@action:inmenu menubar:edit" +msgid "Print After" +msgstr "印刷後" + msgctxt "@button" msgid "Uninstall" msgstr "アンインストール" diff --git a/resources/i18n/ja_JP/fdmprinter.def.json.po b/resources/i18n/ja_JP/fdmprinter.def.json.po index 8e473e72ae..a4311a63bd 100644 --- a/resources/i18n/ja_JP/fdmprinter.def.json.po +++ b/resources/i18n/ja_JP/fdmprinter.def.json.po @@ -2580,6 +2580,14 @@ msgctxt "print_sequence label" msgid "Print Sequence" msgstr "印刷頻度" +msgctxt "user_defined_print_order_enabled label" +msgid "Set Print Sequence Manually" +msgstr "手動で印刷順序を設定する" + +msgctxt "user_defined_print_order_enabled description" +msgid "Allows to order the object list to set the print sequence manually. First object from the list will be printed first." +msgstr "オブジェクトリストを並べ替えて、手動で印刷順序を設定することができます。リストの最初のオブジェクトが最初に印刷されます。" + msgctxt "speed_print label" msgid "Print Speed" msgstr "印刷速度" diff --git a/resources/i18n/ko_KR/cura.po b/resources/i18n/ko_KR/cura.po index 5926b7c442..6bfbd1bae7 100644 --- a/resources/i18n/ko_KR/cura.po +++ b/resources/i18n/ko_KR/cura.po @@ -4917,6 +4917,14 @@ msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "모델 그룹 해제" +msgctxt "@action:inmenu menubar:edit" +msgid "Print Before" +msgstr "인쇄 전" + +msgctxt "@action:inmenu menubar:edit" +msgid "Print After" +msgstr "인쇄 후" + msgctxt "@button" msgid "Uninstall" msgstr "설치 제거" diff --git a/resources/i18n/ko_KR/fdmprinter.def.json.po b/resources/i18n/ko_KR/fdmprinter.def.json.po index 7e2974dd37..0cf075c854 100644 --- a/resources/i18n/ko_KR/fdmprinter.def.json.po +++ b/resources/i18n/ko_KR/fdmprinter.def.json.po @@ -2580,6 +2580,14 @@ msgctxt "print_sequence label" msgid "Print Sequence" msgstr "프린팅 순서" +msgctxt "user_defined_print_order_enabled label" +msgid "Set Print Sequence Manually" +msgstr "수동으로 인쇄 순서 설정" + +msgctxt "user_defined_print_order_enabled description" +msgid "Allows to order the object list to set the print sequence manually. First object from the list will be printed first." +msgstr "객체 목록을 정렬하여 수동으로 인쇄 순서를 설정할 수 있습니다. 목록의 첫 번째 객체가 먼저 인쇄됩니다." + msgctxt "speed_print label" msgid "Print Speed" msgstr "프린팅 속도" diff --git a/resources/i18n/nl_NL/cura.po b/resources/i18n/nl_NL/cura.po index f831c7989f..43ca87b01e 100644 --- a/resources/i18n/nl_NL/cura.po +++ b/resources/i18n/nl_NL/cura.po @@ -4925,6 +4925,14 @@ msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Groeperen van Modellen Opheffen" +msgctxt "@action:inmenu menubar:edit" +msgid "Print Before" +msgstr "Afdrukken voor" + +msgctxt "@action:inmenu menubar:edit" +msgid "Print After" +msgstr "Afdrukken na" + msgctxt "@button" msgid "Uninstall" msgstr "De-installeren" diff --git a/resources/i18n/nl_NL/fdmprinter.def.json.po b/resources/i18n/nl_NL/fdmprinter.def.json.po index 7d6b32e0ac..8c4ef463a8 100644 --- a/resources/i18n/nl_NL/fdmprinter.def.json.po +++ b/resources/i18n/nl_NL/fdmprinter.def.json.po @@ -2580,6 +2580,14 @@ msgctxt "print_sequence label" msgid "Print Sequence" msgstr "Printvolgorde" +msgctxt "user_defined_print_order_enabled label" +msgid "Set Print Sequence Manually" +msgstr "Handmatig afdrukvolgorde instellen" + +msgctxt "user_defined_print_order_enabled description" +msgid "Allows to order the object list to set the print sequence manually. First object from the list will be printed first." +msgstr "Maakt het mogelijk de objectlijst te ordenen om de afdrukvolgorde handmatig in te stellen. Het eerste object van de lijst wordt als eerste afgedrukt." + msgctxt "speed_print label" msgid "Print Speed" msgstr "Printsnelheid" diff --git a/resources/i18n/pl_PL/cura.po b/resources/i18n/pl_PL/cura.po index ed823e183c..fe9f606141 100644 --- a/resources/i18n/pl_PL/cura.po +++ b/resources/i18n/pl_PL/cura.po @@ -4916,6 +4916,14 @@ msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Rozgrupuj modele" +msgctxt "@action:inmenu menubar:edit" +msgid "Print Before" +msgstr "Drukuj przed" + +msgctxt "@action:inmenu menubar:edit" +msgid "Print After" +msgstr "Drukuj po" + msgctxt "@button" msgid "Uninstall" msgstr "" diff --git a/resources/i18n/pl_PL/fdmprinter.def.json.po b/resources/i18n/pl_PL/fdmprinter.def.json.po index b772775d09..7f093c859c 100644 --- a/resources/i18n/pl_PL/fdmprinter.def.json.po +++ b/resources/i18n/pl_PL/fdmprinter.def.json.po @@ -2584,6 +2584,14 @@ msgctxt "print_sequence label" msgid "Print Sequence" msgstr "Sekwencja Wydruku" +msgctxt "user_defined_print_order_enabled label" +msgid "Set Print Sequence Manually" +msgstr "Ręczne ustawienie kolejności drukowania" + +msgctxt "user_defined_print_order_enabled description" +msgid "Allows to order the object list to set the print sequence manually. First object from the list will be printed first." +msgstr "Umożliwia ręczne ustawienie kolejności drukowania na liście obiektów. Pierwszy obiekt z listy zostanie wydrukowany jako pierwszy." + msgctxt "speed_print label" msgid "Print Speed" msgstr "Prędkość Druku" diff --git a/resources/i18n/pt_BR/cura.po b/resources/i18n/pt_BR/cura.po index 1c4590a016..0ae0a56cfd 100644 --- a/resources/i18n/pt_BR/cura.po +++ b/resources/i18n/pt_BR/cura.po @@ -4942,6 +4942,14 @@ msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Desagrupar Modelos" +msgctxt "@action:inmenu menubar:edit" +msgid "Print Before" +msgstr "Imprimir antes" + +msgctxt "@action:inmenu menubar:edit" +msgid "Print After" +msgstr "Imprimir depois" + msgctxt "@button" msgid "Uninstall" msgstr "Desinstalar" diff --git a/resources/i18n/pt_BR/fdmprinter.def.json.po b/resources/i18n/pt_BR/fdmprinter.def.json.po index 651837f458..412a020a7e 100644 --- a/resources/i18n/pt_BR/fdmprinter.def.json.po +++ b/resources/i18n/pt_BR/fdmprinter.def.json.po @@ -2585,6 +2585,14 @@ msgctxt "print_sequence label" msgid "Print Sequence" msgstr "Sequência de Impressão" +msgctxt "user_defined_print_order_enabled label" +msgid "Set Print Sequence Manually" +msgstr "Definir sequência de impressão manualmente" + +msgctxt "user_defined_print_order_enabled description" +msgid "Allows to order the object list to set the print sequence manually. First object from the list will be printed first." +msgstr "Permite ordenar a lista de objetos para definir a sequência de impressão manualmente. O primeiro objeto da lista será impresso primeiro." + msgctxt "speed_print label" msgid "Print Speed" msgstr "Velocidade de Impressão" diff --git a/resources/i18n/pt_PT/cura.po b/resources/i18n/pt_PT/cura.po index 48ea1e7c2c..d6e19b222d 100644 --- a/resources/i18n/pt_PT/cura.po +++ b/resources/i18n/pt_PT/cura.po @@ -4932,6 +4932,14 @@ msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Desagrupar Modelos" +msgctxt "@action:inmenu menubar:edit" +msgid "Print Before" +msgstr "Imprimir antes" + +msgctxt "@action:inmenu menubar:edit" +msgid "Print After" +msgstr "Imprimir depois" + msgctxt "@button" msgid "Uninstall" msgstr "Desinstalar" diff --git a/resources/i18n/pt_PT/fdmprinter.def.json.po b/resources/i18n/pt_PT/fdmprinter.def.json.po index dea593ffe4..36283bc9de 100644 --- a/resources/i18n/pt_PT/fdmprinter.def.json.po +++ b/resources/i18n/pt_PT/fdmprinter.def.json.po @@ -2580,6 +2580,14 @@ msgctxt "print_sequence label" msgid "Print Sequence" msgstr "Sequência de impressão" +msgctxt "user_defined_print_order_enabled label" +msgid "Set Print Sequence Manually" +msgstr "Definir sequência de impressão manualmente" + +msgctxt "user_defined_print_order_enabled description" +msgid "Allows to order the object list to set the print sequence manually. First object from the list will be printed first." +msgstr "Permite ordenar a lista de objetos para definir a sequência de impressão manualmente. O primeiro objeto da lista será impresso primeiro." + msgctxt "speed_print label" msgid "Print Speed" msgstr "Velocidade de Impressão" diff --git a/resources/i18n/ru_RU/cura.po b/resources/i18n/ru_RU/cura.po index 6494d6b5d2..2960193d7e 100644 --- a/resources/i18n/ru_RU/cura.po +++ b/resources/i18n/ru_RU/cura.po @@ -4955,6 +4955,14 @@ msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Разгруппировать модели" +msgctxt "@action:inmenu menubar:edit" +msgid "Print Before" +msgstr "Печатать до" + +msgctxt "@action:inmenu menubar:edit" +msgid "Print After" +msgstr "Печатать после" + msgctxt "@button" msgid "Uninstall" msgstr "Удалить" diff --git a/resources/i18n/ru_RU/fdmprinter.def.json.po b/resources/i18n/ru_RU/fdmprinter.def.json.po index 99036d4865..bba90e21ef 100644 --- a/resources/i18n/ru_RU/fdmprinter.def.json.po +++ b/resources/i18n/ru_RU/fdmprinter.def.json.po @@ -2580,6 +2580,14 @@ msgctxt "print_sequence label" msgid "Print Sequence" msgstr "Последовательная печать" +msgctxt "user_defined_print_order_enabled label" +msgid "Set Print Sequence Manually" +msgstr "Установить последовательность печати вручную" + +msgctxt "user_defined_print_order_enabled description" +msgid "Allows to order the object list to set the print sequence manually. First object from the list will be printed first." +msgstr "Позволяет упорядочить список объектов для ручной настройки последовательности печати. Первый объект из списка будет напечатан первым." + msgctxt "speed_print label" msgid "Print Speed" msgstr "Скорость печати" diff --git a/resources/i18n/tr_TR/cura.po b/resources/i18n/tr_TR/cura.po index d98ff91e72..c3afd0c7c1 100644 --- a/resources/i18n/tr_TR/cura.po +++ b/resources/i18n/tr_TR/cura.po @@ -4931,6 +4931,14 @@ msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Model Grubunu Çöz" +msgctxt "@action:inmenu menubar:edit" +msgid "Print Before" +msgstr "Önce Yazdır" + +msgctxt "@action:inmenu menubar:edit" +msgid "Print After" +msgstr "Sonra Yazdır" + msgctxt "@button" msgid "Uninstall" msgstr "Kaldır" diff --git a/resources/i18n/tr_TR/fdmprinter.def.json.po b/resources/i18n/tr_TR/fdmprinter.def.json.po index b57a0cd0bb..0e11895512 100644 --- a/resources/i18n/tr_TR/fdmprinter.def.json.po +++ b/resources/i18n/tr_TR/fdmprinter.def.json.po @@ -2580,6 +2580,14 @@ msgctxt "print_sequence label" msgid "Print Sequence" msgstr "Yazdırma Dizisi" +msgctxt "user_defined_print_order_enabled label" +msgid "Set Print Sequence Manually" +msgstr "Baskı Sırasını Manuel Olarak Ayarla" + +msgctxt "user_defined_print_order_enabled description" +msgid "Allows to order the object list to set the print sequence manually. First object from the list will be printed first." +msgstr "Nesne listesini sıralayarak baskı sırasını manuel olarak ayarlamayı sağlar. Listeden ilk nesne ilk olarak basılacak." + msgctxt "speed_print label" msgid "Print Speed" msgstr "Yazdırma Hızı" diff --git a/resources/i18n/zh_CN/cura.po b/resources/i18n/zh_CN/cura.po index 34b4f1d4dc..cf2ed81f9b 100644 --- a/resources/i18n/zh_CN/cura.po +++ b/resources/i18n/zh_CN/cura.po @@ -4919,6 +4919,14 @@ msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "拆分模型" +msgctxt "@action:inmenu menubar:edit" +msgid "Print Before" +msgstr "打印前" + +msgctxt "@action:inmenu menubar:edit" +msgid "Print After" +msgstr "打印后" + msgctxt "@button" msgid "Uninstall" msgstr "卸载" diff --git a/resources/i18n/zh_CN/fdmprinter.def.json.po b/resources/i18n/zh_CN/fdmprinter.def.json.po index 1042199d5b..4696832051 100644 --- a/resources/i18n/zh_CN/fdmprinter.def.json.po +++ b/resources/i18n/zh_CN/fdmprinter.def.json.po @@ -2580,6 +2580,14 @@ msgctxt "print_sequence label" msgid "Print Sequence" msgstr "打印序列" +msgctxt "user_defined_print_order_enabled label" +msgid "Set Print Sequence Manually" +msgstr "手动设置打印顺序" + +msgctxt "user_defined_print_order_enabled description" +msgid "Allows to order the object list to set the print sequence manually. First object from the list will be printed first." +msgstr "允许对对象列表进行排序,以手动设置打印顺序。列表中的第一个对象将首先被打印。" + msgctxt "speed_print label" msgid "Print Speed" msgstr "打印速度" diff --git a/resources/i18n/zh_TW/cura.po b/resources/i18n/zh_TW/cura.po index a461fd1fa3..741bde1d14 100644 --- a/resources/i18n/zh_TW/cura.po +++ b/resources/i18n/zh_TW/cura.po @@ -4911,6 +4911,14 @@ msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "取消模型群組" +msgctxt "@action:inmenu menubar:edit" +msgid "Print Before" +msgstr "列印前" + +msgctxt "@action:inmenu menubar:edit" +msgid "Print After" +msgstr "列印後" + msgctxt "@button" msgid "Uninstall" msgstr "" diff --git a/resources/i18n/zh_TW/fdmprinter.def.json.po b/resources/i18n/zh_TW/fdmprinter.def.json.po index c92a7f861a..aa02299fc1 100644 --- a/resources/i18n/zh_TW/fdmprinter.def.json.po +++ b/resources/i18n/zh_TW/fdmprinter.def.json.po @@ -2585,6 +2585,14 @@ msgctxt "print_sequence label" msgid "Print Sequence" msgstr "列印順序" +msgctxt "user_defined_print_order_enabled label" +msgid "Set Print Sequence Manually" +msgstr "手動設置列印順序" + +msgctxt "user_defined_print_order_enabled description" +msgid "Allows to order the object list to set the print sequence manually. First object from the list will be printed first." +msgstr "允許手動設置物件列表以設定列印順序。列表中的第一個物件將首先被列印。" + msgctxt "speed_print label" msgid "Print Speed" msgstr "列印速度" diff --git a/resources/images/cura-share.png b/resources/images/cura-share.png new file mode 100644 index 0000000000..60de85194c Binary files /dev/null and b/resources/images/cura-share.png differ diff --git a/resources/intent/elegoo_neptune_4/PLA/elegoo_n4_aa0.4_pla_0.2mm_engineering.inst.cfg b/resources/intent/elegoo_neptune_4/PLA/elegoo_n4_aa0.4_pla_0.2mm_engineering.inst.cfg new file mode 100644 index 0000000000..1e9703215d --- /dev/null +++ b/resources/intent/elegoo_neptune_4/PLA/elegoo_n4_aa0.4_pla_0.2mm_engineering.inst.cfg @@ -0,0 +1,25 @@ +[general] +definition = elegoo_neptune_4 +name = Accurate +version = 4 + +[metadata] +intent_category = engineering +is_experimental = True +material = generic_pla +quality_type = Elegoo_layer_020 +setting_version = 22 +type = intent +variant = 0.40mm_Elegoo_Nozzle + +[values] +speed_infill = =speed_print +speed_print = 150 +speed_topbottom = =speed_print * 2 / 3 +speed_travel = =min(speed_print * 4 / 3, 250) if speed_print <= 250 else speed_print +speed_wall = =speed_print * 2 / 3 +speed_wall_0 = =speed_wall +speed_wall_x = =speed_wall +top_bottom_thickness = =wall_thickness +wall_thickness = =line_width * 3 + diff --git a/resources/intent/ultimaker_methodx/um_methodx_1c_um-asa-175_0.2mm_solid.inst.cfg b/resources/intent/ultimaker_methodx/um_methodx_1c_um-asa-175_0.2mm_solid.inst.cfg new file mode 100644 index 0000000000..23c8807afd --- /dev/null +++ b/resources/intent/ultimaker_methodx/um_methodx_1c_um-asa-175_0.2mm_solid.inst.cfg @@ -0,0 +1,18 @@ +[general] +definition = ultimaker_methodx +name = Solid +version = 4 + +[metadata] +intent_category = solid +is_experimental = True +material = ultimaker_asa_175 +quality_type = draft +setting_version = 22 +type = intent +variant = 1C + +[values] +infill_pattern = lines +infill_sparse_density = 100 + diff --git a/resources/intent/ultimaker_methodx/um_methodx_1c_um-nylon12-cf-175_0.2mm_solid.inst.cfg b/resources/intent/ultimaker_methodx/um_methodx_1c_um-nylon12-cf-175_0.2mm_solid.inst.cfg new file mode 100644 index 0000000000..cdff2f30ce --- /dev/null +++ b/resources/intent/ultimaker_methodx/um_methodx_1c_um-nylon12-cf-175_0.2mm_solid.inst.cfg @@ -0,0 +1,18 @@ +[general] +definition = ultimaker_methodx +name = Solid +version = 4 + +[metadata] +intent_category = solid +is_experimental = True +material = ultimaker_nylon12-cf_175 +quality_type = draft +setting_version = 22 +type = intent +variant = 1C + +[values] +infill_pattern = lines +infill_sparse_density = 100 + diff --git a/resources/intent/ultimaker_methodx/um_methodx_1xa_um-asa-175_0.2mm_solid.inst.cfg b/resources/intent/ultimaker_methodx/um_methodx_1xa_um-asa-175_0.2mm_solid.inst.cfg new file mode 100644 index 0000000000..3a781b61aa --- /dev/null +++ b/resources/intent/ultimaker_methodx/um_methodx_1xa_um-asa-175_0.2mm_solid.inst.cfg @@ -0,0 +1,18 @@ +[general] +definition = ultimaker_methodx +name = Solid +version = 4 + +[metadata] +intent_category = solid +is_experimental = True +material = ultimaker_asa_175 +quality_type = draft +setting_version = 22 +type = intent +variant = 1XA + +[values] +infill_pattern = lines +infill_sparse_density = 100 + diff --git a/resources/intent/ultimaker_methodx/um_methodx_2xa_um-sr30-175_0.2mm_solid.inst.cfg b/resources/intent/ultimaker_methodx/um_methodx_2xa_um-sr30-175_0.2mm_solid.inst.cfg new file mode 100644 index 0000000000..a833556bd8 --- /dev/null +++ b/resources/intent/ultimaker_methodx/um_methodx_2xa_um-sr30-175_0.2mm_solid.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = ultimaker_methodx +name = Solid +version = 4 + +[metadata] +intent_category = solid +is_experimental = True +material = ultimaker_sr30_175 +quality_type = draft +setting_version = 22 +type = intent +variant = 2XA + +[values] +infill_sparse_density = 100 + diff --git a/resources/intent/ultimaker_methodx/um_methodx_labs_um-asa-175_0.2mm_solid.inst.cfg b/resources/intent/ultimaker_methodx/um_methodx_labs_um-asa-175_0.2mm_solid.inst.cfg new file mode 100644 index 0000000000..87823a01a6 --- /dev/null +++ b/resources/intent/ultimaker_methodx/um_methodx_labs_um-asa-175_0.2mm_solid.inst.cfg @@ -0,0 +1,18 @@ +[general] +definition = ultimaker_methodx +name = Solid +version = 4 + +[metadata] +intent_category = solid +is_experimental = True +material = ultimaker_asa_175 +quality_type = draft +setting_version = 22 +type = intent +variant = LABS + +[values] +infill_pattern = lines +infill_sparse_density = 100 + diff --git a/resources/intent/ultimaker_methodx/um_methodx_labs_um-nylon12-cf-175_0.2mm_solid.inst.cfg b/resources/intent/ultimaker_methodx/um_methodx_labs_um-nylon12-cf-175_0.2mm_solid.inst.cfg new file mode 100644 index 0000000000..bb76919888 --- /dev/null +++ b/resources/intent/ultimaker_methodx/um_methodx_labs_um-nylon12-cf-175_0.2mm_solid.inst.cfg @@ -0,0 +1,18 @@ +[general] +definition = ultimaker_methodx +name = Solid +version = 4 + +[metadata] +intent_category = solid +is_experimental = True +material = ultimaker_nylon12-cf_175 +quality_type = draft +setting_version = 22 +type = intent +variant = LABS + +[values] +infill_pattern = lines +infill_sparse_density = 100 + diff --git a/resources/intent/ultimaker_methodxl/um_methodxl_1c_um-asa-175_0.2mm_solid.inst.cfg b/resources/intent/ultimaker_methodxl/um_methodxl_1c_um-asa-175_0.2mm_solid.inst.cfg new file mode 100644 index 0000000000..12bc3f2708 --- /dev/null +++ b/resources/intent/ultimaker_methodxl/um_methodxl_1c_um-asa-175_0.2mm_solid.inst.cfg @@ -0,0 +1,18 @@ +[general] +definition = ultimaker_methodxl +name = Solid +version = 4 + +[metadata] +intent_category = solid +is_experimental = True +material = ultimaker_asa_175 +quality_type = draft +setting_version = 22 +type = intent +variant = 1C + +[values] +infill_pattern = lines +infill_sparse_density = 100 + diff --git a/resources/intent/ultimaker_methodxl/um_methodxl_1c_um-nylon12-cf-175_0.2mm_solid.inst.cfg b/resources/intent/ultimaker_methodxl/um_methodxl_1c_um-nylon12-cf-175_0.2mm_solid.inst.cfg new file mode 100644 index 0000000000..5533672636 --- /dev/null +++ b/resources/intent/ultimaker_methodxl/um_methodxl_1c_um-nylon12-cf-175_0.2mm_solid.inst.cfg @@ -0,0 +1,18 @@ +[general] +definition = ultimaker_methodxl +name = Solid +version = 4 + +[metadata] +intent_category = solid +is_experimental = True +material = ultimaker_nylon12-cf_175 +quality_type = draft +setting_version = 22 +type = intent +variant = 1C + +[values] +infill_pattern = lines +infill_sparse_density = 100 + diff --git a/resources/intent/ultimaker_methodxl/um_methodxl_1xa_um-asa-175_0.2mm_solid.inst.cfg b/resources/intent/ultimaker_methodxl/um_methodxl_1xa_um-asa-175_0.2mm_solid.inst.cfg new file mode 100644 index 0000000000..82aa8e9bad --- /dev/null +++ b/resources/intent/ultimaker_methodxl/um_methodxl_1xa_um-asa-175_0.2mm_solid.inst.cfg @@ -0,0 +1,18 @@ +[general] +definition = ultimaker_methodxl +name = Solid +version = 4 + +[metadata] +intent_category = solid +is_experimental = True +material = ultimaker_asa_175 +quality_type = draft +setting_version = 22 +type = intent +variant = 1XA + +[values] +infill_pattern = lines +infill_sparse_density = 100 + diff --git a/resources/intent/ultimaker_methodxl/um_methodxl_2xa_um-sr30-175_0.2mm_solid.inst.cfg b/resources/intent/ultimaker_methodxl/um_methodxl_2xa_um-sr30-175_0.2mm_solid.inst.cfg new file mode 100644 index 0000000000..01a55c85a4 --- /dev/null +++ b/resources/intent/ultimaker_methodxl/um_methodxl_2xa_um-sr30-175_0.2mm_solid.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = ultimaker_methodxl +name = Solid +version = 4 + +[metadata] +intent_category = solid +is_experimental = True +material = ultimaker_sr30_175 +quality_type = draft +setting_version = 22 +type = intent +variant = 2XA + +[values] +infill_sparse_density = 100 + diff --git a/resources/intent/ultimaker_methodxl/um_methodxl_labs_um-asa-175_0.2mm_solid.inst.cfg b/resources/intent/ultimaker_methodxl/um_methodxl_labs_um-asa-175_0.2mm_solid.inst.cfg new file mode 100644 index 0000000000..ae7100bc86 --- /dev/null +++ b/resources/intent/ultimaker_methodxl/um_methodxl_labs_um-asa-175_0.2mm_solid.inst.cfg @@ -0,0 +1,18 @@ +[general] +definition = ultimaker_methodxl +name = Solid +version = 4 + +[metadata] +intent_category = solid +is_experimental = True +material = ultimaker_asa_175 +quality_type = draft +setting_version = 22 +type = intent +variant = LABS + +[values] +infill_pattern = lines +infill_sparse_density = 100 + diff --git a/resources/intent/ultimaker_methodxl/um_methodxl_labs_um-nylon12-cf-175_0.2mm_solid.inst.cfg b/resources/intent/ultimaker_methodxl/um_methodxl_labs_um-nylon12-cf-175_0.2mm_solid.inst.cfg new file mode 100644 index 0000000000..af43c95cd2 --- /dev/null +++ b/resources/intent/ultimaker_methodxl/um_methodxl_labs_um-nylon12-cf-175_0.2mm_solid.inst.cfg @@ -0,0 +1,18 @@ +[general] +definition = ultimaker_methodxl +name = Solid +version = 4 + +[metadata] +intent_category = solid +is_experimental = True +material = ultimaker_nylon12-cf_175 +quality_type = draft +setting_version = 22 +type = intent +variant = LABS + +[values] +infill_pattern = lines +infill_sparse_density = 100 + diff --git a/resources/intent/ultimaker_s3/um_s3_aa0.4_um-abs_0.06mm_visual.inst.cfg b/resources/intent/ultimaker_s3/um_s3_aa0.4_um-abs_0.06mm_visual.inst.cfg index fb88768bb6..62e3254f8b 100644 --- a/resources/intent/ultimaker_s3/um_s3_aa0.4_um-abs_0.06mm_visual.inst.cfg +++ b/resources/intent/ultimaker_s3/um_s3_aa0.4_um-abs_0.06mm_visual.inst.cfg @@ -12,6 +12,14 @@ type = intent variant = AA 0.4 [values] -speed_infill = 50 -top_bottom_thickness = 1.05 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 0.5 +acceleration_print = 2500 +acceleration_wall_0 = 1000 +inset_direction = inside_out +jerk_wall_0 = 20 +speed_print = 50 +speed_roofing = =math.ceil(speed_wall*(35/50)) +speed_wall_0 = =math.ceil(speed_wall*(20/50)) +speed_wall_x = =math.ceil(speed_wall*(35/50)) +top_bottom_thickness = =max(1.2 , layer_height * 6) diff --git a/resources/intent/ultimaker_s3/um_s3_aa0.4_um-abs_0.1mm_engineering.inst.cfg b/resources/intent/ultimaker_s3/um_s3_aa0.4_um-abs_0.1mm_engineering.inst.cfg index 967051c6b6..b61495c66f 100644 --- a/resources/intent/ultimaker_s3/um_s3_aa0.4_um-abs_0.1mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s3/um_s3_aa0.4_um-abs_0.1mm_engineering.inst.cfg @@ -12,9 +12,13 @@ type = intent variant = AA 0.4 [values] +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 1 +infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'triangles' +infill_sparse_density = 20 jerk_print = 30 speed_infill = =speed_print -speed_print = 30 +speed_print = 35 +speed_roofing = =speed_topbottom speed_topbottom = =speed_print speed_wall = =speed_print speed_wall_0 = =speed_wall diff --git a/resources/intent/ultimaker_s3/um_s3_aa0.4_um-abs_0.1mm_visual.inst.cfg b/resources/intent/ultimaker_s3/um_s3_aa0.4_um-abs_0.1mm_visual.inst.cfg index c08c5e37c1..2b113bb10c 100644 --- a/resources/intent/ultimaker_s3/um_s3_aa0.4_um-abs_0.1mm_visual.inst.cfg +++ b/resources/intent/ultimaker_s3/um_s3_aa0.4_um-abs_0.1mm_visual.inst.cfg @@ -12,6 +12,14 @@ type = intent variant = AA 0.4 [values] -speed_infill = 50 -top_bottom_thickness = 1.05 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 0.5 +acceleration_print = 2500 +acceleration_wall_0 = 1000 +inset_direction = inside_out +jerk_wall_0 = 20 +speed_print = 50 +speed_roofing = =math.ceil(speed_wall*(35/50)) +speed_wall_0 = =math.ceil(speed_wall*(20/50)) +speed_wall_x = =math.ceil(speed_wall*(35/50)) +top_bottom_thickness = =max(1.2 , layer_height * 6) diff --git a/resources/intent/ultimaker_s3/um_s3_aa0.4_um-petg_0.1mm_engineering.inst.cfg b/resources/intent/ultimaker_s3/um_s3_aa0.4_um-petg_0.1mm_engineering.inst.cfg index 9bf56f69a2..7c1de8fd56 100644 --- a/resources/intent/ultimaker_s3/um_s3_aa0.4_um-petg_0.1mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s3/um_s3_aa0.4_um-petg_0.1mm_engineering.inst.cfg @@ -12,9 +12,13 @@ type = intent variant = AA 0.4 [values] +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 1 +infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'triangles' +infill_sparse_density = 20 jerk_print = 30 speed_infill = =speed_print -speed_print = 30 +speed_print = 35 +speed_roofing = =speed_topbottom speed_topbottom = =speed_print speed_wall = =speed_print speed_wall_0 = =speed_wall diff --git a/resources/intent/ultimaker_s3/um_s3_aa0.4_um-pla_0.06mm_visual.inst.cfg b/resources/intent/ultimaker_s3/um_s3_aa0.4_um-pla_0.06mm_visual.inst.cfg index 63e20e56bd..7bde0a1a84 100644 --- a/resources/intent/ultimaker_s3/um_s3_aa0.4_um-pla_0.06mm_visual.inst.cfg +++ b/resources/intent/ultimaker_s3/um_s3_aa0.4_um-pla_0.06mm_visual.inst.cfg @@ -12,6 +12,14 @@ type = intent variant = AA 0.4 [values] -speed_infill = 50 -top_bottom_thickness = 1.05 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 0.5 +acceleration_print = 2500 +acceleration_wall_0 = 1000 +inset_direction = inside_out +jerk_wall_0 = 20 +speed_print = 50 +speed_roofing = =math.ceil(speed_wall*(35/50)) +speed_wall_0 = =math.ceil(speed_wall*(20/50)) +speed_wall_x = =math.ceil(speed_wall*(35/50)) +top_bottom_thickness = =max(1.2 , layer_height * 6) diff --git a/resources/intent/ultimaker_s3/um_s3_aa0.4_um-pla_0.1mm_engineering.inst.cfg b/resources/intent/ultimaker_s3/um_s3_aa0.4_um-pla_0.1mm_engineering.inst.cfg index b65a22fbdc..ed573773e1 100644 --- a/resources/intent/ultimaker_s3/um_s3_aa0.4_um-pla_0.1mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s3/um_s3_aa0.4_um-pla_0.1mm_engineering.inst.cfg @@ -12,9 +12,13 @@ type = intent variant = AA 0.4 [values] +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 1 +infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'triangles' +infill_sparse_density = 20 jerk_print = 30 speed_infill = =speed_print -speed_print = 30 +speed_print = 35 +speed_roofing = =speed_topbottom speed_topbottom = =speed_print speed_wall = =speed_print speed_wall_0 = =speed_wall diff --git a/resources/intent/ultimaker_s3/um_s3_aa0.4_um-pla_0.1mm_visual.inst.cfg b/resources/intent/ultimaker_s3/um_s3_aa0.4_um-pla_0.1mm_visual.inst.cfg index a90a1b971d..b5e414e2a7 100644 --- a/resources/intent/ultimaker_s3/um_s3_aa0.4_um-pla_0.1mm_visual.inst.cfg +++ b/resources/intent/ultimaker_s3/um_s3_aa0.4_um-pla_0.1mm_visual.inst.cfg @@ -12,6 +12,14 @@ type = intent variant = AA 0.4 [values] -speed_infill = 50 -top_bottom_thickness = 1.05 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 0.5 +acceleration_print = 2500 +acceleration_wall_0 = 1000 +inset_direction = inside_out +jerk_wall_0 = 20 +speed_print = 50 +speed_roofing = =math.ceil(speed_wall*(35/50)) +speed_wall_0 = =math.ceil(speed_wall*(20/50)) +speed_wall_x = =math.ceil(speed_wall*(35/50)) +top_bottom_thickness = =max(1.2 , layer_height * 6) diff --git a/resources/intent/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.06mm_visual.inst.cfg b/resources/intent/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.06mm_visual.inst.cfg index e2997ae696..f1a72ac90b 100644 --- a/resources/intent/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.06mm_visual.inst.cfg +++ b/resources/intent/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.06mm_visual.inst.cfg @@ -12,6 +12,14 @@ type = intent variant = AA 0.4 [values] -speed_infill = 50 -top_bottom_thickness = 1.05 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 0.5 +acceleration_print = 2500 +acceleration_wall_0 = 1000 +inset_direction = inside_out +jerk_wall_0 = 20 +speed_print = 50 +speed_roofing = =math.ceil(speed_wall*(35/50)) +speed_wall_0 = =math.ceil(speed_wall*(20/50)) +speed_wall_x = =math.ceil(speed_wall*(35/50)) +top_bottom_thickness = =max(1.2 , layer_height * 6) diff --git a/resources/intent/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.1mm_engineering.inst.cfg b/resources/intent/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.1mm_engineering.inst.cfg index a57cbf0af0..61916c3da7 100644 --- a/resources/intent/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.1mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.1mm_engineering.inst.cfg @@ -12,9 +12,13 @@ type = intent variant = AA 0.4 [values] +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 1 +infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'triangles' +infill_sparse_density = 20 jerk_print = 30 speed_infill = =speed_print -speed_print = 30 +speed_print = 35 +speed_roofing = =speed_topbottom speed_topbottom = =speed_print speed_wall = =speed_print speed_wall_0 = =speed_wall diff --git a/resources/intent/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.1mm_visual.inst.cfg b/resources/intent/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.1mm_visual.inst.cfg index 48ce65c800..75345728fb 100644 --- a/resources/intent/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.1mm_visual.inst.cfg +++ b/resources/intent/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.1mm_visual.inst.cfg @@ -12,6 +12,14 @@ type = intent variant = AA 0.4 [values] -speed_infill = 50 -top_bottom_thickness = 1.05 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 0.5 +acceleration_print = 2500 +acceleration_wall_0 = 1000 +inset_direction = inside_out +jerk_wall_0 = 20 +speed_print = 50 +speed_roofing = =math.ceil(speed_wall*(35/50)) +speed_wall_0 = =math.ceil(speed_wall*(20/50)) +speed_wall_x = =math.ceil(speed_wall*(35/50)) +top_bottom_thickness = =max(1.2 , layer_height * 6) diff --git a/resources/intent/ultimaker_s5/um_s5_aa0.4_um-abs_0.06mm_visual.inst.cfg b/resources/intent/ultimaker_s5/um_s5_aa0.4_um-abs_0.06mm_visual.inst.cfg index 3866a4593a..7b919a96f5 100644 --- a/resources/intent/ultimaker_s5/um_s5_aa0.4_um-abs_0.06mm_visual.inst.cfg +++ b/resources/intent/ultimaker_s5/um_s5_aa0.4_um-abs_0.06mm_visual.inst.cfg @@ -12,6 +12,14 @@ type = intent variant = AA 0.4 [values] -speed_infill = 50 -top_bottom_thickness = 1.05 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 0.5 +acceleration_print = 2500 +acceleration_wall_0 = 1000 +inset_direction = inside_out +jerk_wall_0 = 20 +speed_print = 50 +speed_roofing = =math.ceil(speed_wall*(35/50)) +speed_wall_0 = =math.ceil(speed_wall*(20/50)) +speed_wall_x = =math.ceil(speed_wall*(35/50)) +top_bottom_thickness = =max(1.2 , layer_height * 6) diff --git a/resources/intent/ultimaker_s5/um_s5_aa0.4_um-abs_0.1mm_engineering.inst.cfg b/resources/intent/ultimaker_s5/um_s5_aa0.4_um-abs_0.1mm_engineering.inst.cfg index b5834b5757..43edfa3548 100644 --- a/resources/intent/ultimaker_s5/um_s5_aa0.4_um-abs_0.1mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s5/um_s5_aa0.4_um-abs_0.1mm_engineering.inst.cfg @@ -12,9 +12,13 @@ type = intent variant = AA 0.4 [values] +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 1 +infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'triangles' +infill_sparse_density = 20 jerk_print = 30 speed_infill = =speed_print -speed_print = 30 +speed_print = 35 +speed_roofing = =speed_topbottom speed_topbottom = =speed_print speed_wall = =speed_print speed_wall_0 = =speed_wall diff --git a/resources/intent/ultimaker_s5/um_s5_aa0.4_um-abs_0.1mm_visual.inst.cfg b/resources/intent/ultimaker_s5/um_s5_aa0.4_um-abs_0.1mm_visual.inst.cfg index 63b0273ba5..62a6fb4fdf 100644 --- a/resources/intent/ultimaker_s5/um_s5_aa0.4_um-abs_0.1mm_visual.inst.cfg +++ b/resources/intent/ultimaker_s5/um_s5_aa0.4_um-abs_0.1mm_visual.inst.cfg @@ -12,6 +12,14 @@ type = intent variant = AA 0.4 [values] -speed_infill = 50 -top_bottom_thickness = 1.05 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 0.5 +acceleration_print = 2500 +acceleration_wall_0 = 1000 +inset_direction = inside_out +jerk_wall_0 = 20 +speed_print = 50 +speed_roofing = =math.ceil(speed_wall*(35/50)) +speed_wall_0 = =math.ceil(speed_wall*(20/50)) +speed_wall_x = =math.ceil(speed_wall*(35/50)) +top_bottom_thickness = =max(1.2 , layer_height * 6) diff --git a/resources/intent/ultimaker_s5/um_s5_aa0.4_um-petg_0.1mm_engineering.inst.cfg b/resources/intent/ultimaker_s5/um_s5_aa0.4_um-petg_0.1mm_engineering.inst.cfg index 00c264aa32..a251a24a6e 100644 --- a/resources/intent/ultimaker_s5/um_s5_aa0.4_um-petg_0.1mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s5/um_s5_aa0.4_um-petg_0.1mm_engineering.inst.cfg @@ -12,9 +12,13 @@ type = intent variant = AA 0.4 [values] +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 1 +infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'triangles' +infill_sparse_density = 20 jerk_print = 30 speed_infill = =speed_print -speed_print = 30 +speed_print = 35 +speed_roofing = =speed_topbottom speed_topbottom = =speed_print speed_wall = =speed_print speed_wall_0 = =speed_wall diff --git a/resources/intent/ultimaker_s5/um_s5_aa0.4_um-pla_0.06mm_visual.inst.cfg b/resources/intent/ultimaker_s5/um_s5_aa0.4_um-pla_0.06mm_visual.inst.cfg index 0bb1797b46..464c17a430 100644 --- a/resources/intent/ultimaker_s5/um_s5_aa0.4_um-pla_0.06mm_visual.inst.cfg +++ b/resources/intent/ultimaker_s5/um_s5_aa0.4_um-pla_0.06mm_visual.inst.cfg @@ -12,6 +12,14 @@ type = intent variant = AA 0.4 [values] -speed_infill = 50 -top_bottom_thickness = 1.05 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 0.5 +acceleration_print = 2500 +acceleration_wall_0 = 1000 +inset_direction = inside_out +jerk_wall_0 = 20 +speed_print = 50 +speed_roofing = =math.ceil(speed_wall*(35/50)) +speed_wall_0 = =math.ceil(speed_wall*(20/50)) +speed_wall_x = =math.ceil(speed_wall*(35/50)) +top_bottom_thickness = =max(1.2 , layer_height * 6) diff --git a/resources/intent/ultimaker_s5/um_s5_aa0.4_um-pla_0.1mm_engineering.inst.cfg b/resources/intent/ultimaker_s5/um_s5_aa0.4_um-pla_0.1mm_engineering.inst.cfg index 0ab18817e0..5f6d7ee67b 100644 --- a/resources/intent/ultimaker_s5/um_s5_aa0.4_um-pla_0.1mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s5/um_s5_aa0.4_um-pla_0.1mm_engineering.inst.cfg @@ -12,9 +12,13 @@ type = intent variant = AA 0.4 [values] +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 1 +infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'triangles' +infill_sparse_density = 20 jerk_print = 30 speed_infill = =speed_print -speed_print = 30 +speed_print = 35 +speed_roofing = =speed_topbottom speed_topbottom = =speed_print speed_wall = =speed_print speed_wall_0 = =speed_wall diff --git a/resources/intent/ultimaker_s5/um_s5_aa0.4_um-pla_0.1mm_visual.inst.cfg b/resources/intent/ultimaker_s5/um_s5_aa0.4_um-pla_0.1mm_visual.inst.cfg index f6b7800386..2dcc5e1850 100644 --- a/resources/intent/ultimaker_s5/um_s5_aa0.4_um-pla_0.1mm_visual.inst.cfg +++ b/resources/intent/ultimaker_s5/um_s5_aa0.4_um-pla_0.1mm_visual.inst.cfg @@ -12,6 +12,14 @@ type = intent variant = AA 0.4 [values] -speed_infill = 50 -top_bottom_thickness = 1.05 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 0.5 +acceleration_print = 2500 +acceleration_wall_0 = 1000 +inset_direction = inside_out +jerk_wall_0 = 20 +speed_print = 50 +speed_roofing = =math.ceil(speed_wall*(35/50)) +speed_wall_0 = =math.ceil(speed_wall*(20/50)) +speed_wall_x = =math.ceil(speed_wall*(35/50)) +top_bottom_thickness = =max(1.2 , layer_height * 6) diff --git a/resources/intent/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.06mm_visual.inst.cfg b/resources/intent/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.06mm_visual.inst.cfg index b4516e44dd..c0c3ccc383 100644 --- a/resources/intent/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.06mm_visual.inst.cfg +++ b/resources/intent/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.06mm_visual.inst.cfg @@ -12,6 +12,14 @@ type = intent variant = AA 0.4 [values] -speed_infill = 50 -top_bottom_thickness = 1.05 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 0.5 +acceleration_print = 2500 +acceleration_wall_0 = 1000 +inset_direction = inside_out +jerk_wall_0 = 20 +speed_print = 50 +speed_roofing = =math.ceil(speed_wall*(35/50)) +speed_wall_0 = =math.ceil(speed_wall*(20/50)) +speed_wall_x = =math.ceil(speed_wall*(35/50)) +top_bottom_thickness = =max(1.2 , layer_height * 6) diff --git a/resources/intent/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.1mm_engineering.inst.cfg b/resources/intent/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.1mm_engineering.inst.cfg index 5c78ea044d..411d22b0ab 100644 --- a/resources/intent/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.1mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.1mm_engineering.inst.cfg @@ -12,9 +12,13 @@ type = intent variant = AA 0.4 [values] +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 1 +infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'triangles' +infill_sparse_density = 20 jerk_print = 30 speed_infill = =speed_print -speed_print = 30 +speed_print = 35 +speed_roofing = =speed_topbottom speed_topbottom = =speed_print speed_wall = =speed_print speed_wall_0 = =speed_wall diff --git a/resources/intent/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.1mm_visual.inst.cfg b/resources/intent/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.1mm_visual.inst.cfg index 5f73432e1c..9a3c677fe9 100644 --- a/resources/intent/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.1mm_visual.inst.cfg +++ b/resources/intent/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.1mm_visual.inst.cfg @@ -12,6 +12,14 @@ type = intent variant = AA 0.4 [values] -speed_infill = 50 -top_bottom_thickness = 1.05 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 0.5 +acceleration_print = 2500 +acceleration_wall_0 = 1000 +inset_direction = inside_out +jerk_wall_0 = 20 +speed_print = 50 +speed_roofing = =math.ceil(speed_wall*(35/50)) +speed_wall_0 = =math.ceil(speed_wall*(20/50)) +speed_wall_x = =math.ceil(speed_wall*(35/50)) +top_bottom_thickness = =max(1.2 , layer_height * 6) diff --git a/resources/meshes/ratrig_vcore3_200.stl b/resources/meshes/ratrig_vcore3_200.stl new file mode 100644 index 0000000000..b44e099eb3 Binary files /dev/null and b/resources/meshes/ratrig_vcore3_200.stl differ diff --git a/resources/meshes/ratrig_vcore3_300.stl b/resources/meshes/ratrig_vcore3_300.stl new file mode 100644 index 0000000000..454efe9012 Binary files /dev/null and b/resources/meshes/ratrig_vcore3_300.stl differ diff --git a/resources/meshes/ratrig_vcore3_400.stl b/resources/meshes/ratrig_vcore3_400.stl new file mode 100644 index 0000000000..dd1b801714 Binary files /dev/null and b/resources/meshes/ratrig_vcore3_400.stl differ diff --git a/resources/meshes/ratrig_vcore3_500.stl b/resources/meshes/ratrig_vcore3_500.stl new file mode 100644 index 0000000000..268c73ca00 Binary files /dev/null and b/resources/meshes/ratrig_vcore3_500.stl differ diff --git a/resources/meshes/ratrig_vminion.stl b/resources/meshes/ratrig_vminion.stl new file mode 100644 index 0000000000..1bfbd6a41c Binary files /dev/null and b/resources/meshes/ratrig_vminion.stl differ diff --git a/resources/qml/Actions.qml b/resources/qml/Actions.qml index 458d7fcaae..7acf39ecb2 100644 --- a/resources/qml/Actions.qml +++ b/resources/qml/Actions.qml @@ -35,8 +35,11 @@ Item property alias mergeObjects: mergeObjectsAction //property alias unMergeObjects: unMergeObjectsAction - property alias multiplyObject: multiplyObjectAction + property alias printObjectBeforePrevious: printObjectBeforePreviousAction + property alias printObjectAfterNext: printObjectAfterNextAction + property alias multiplyObject: multiplyObjectAction + property alias dropAll: dropAllAction property alias selectAll: selectAllAction property alias deleteAll: deleteAllAction property alias reloadAll: reloadAllAction @@ -109,7 +112,6 @@ Item Action { id: exitFullScreenAction - shortcut: StandardKey.Cancel text: catalog.i18nc("@action:inmenu", "Exit Full Screen") icon.name: "view-fullscreen" } @@ -120,8 +122,8 @@ Item text: catalog.i18nc("@action:inmenu menubar:edit", "&Undo") icon.name: "edit-undo" shortcut: StandardKey.Undo - onTriggered: UM.OperationStack.undo() - enabled: UM.OperationStack.canUndo + onTriggered: CuraActions.undo() + enabled: CuraActions.canUndo } Action @@ -130,8 +132,8 @@ Item text: catalog.i18nc("@action:inmenu menubar:edit", "&Redo") icon.name: "edit-redo" shortcut: StandardKey.Redo - onTriggered: UM.OperationStack.redo() - enabled: UM.OperationStack.canRedo + onTriggered: CuraActions.redo() + enabled: CuraActions.canRedo } Action @@ -406,6 +408,26 @@ Item onTriggered: CuraApplication.ungroupSelected() } + Action + { + id: printObjectBeforePreviousAction + text: catalog.i18nc("@action:inmenu menubar:edit","Print Before") + " " + PrintOrderManager.previousNodeName + enabled: PrintOrderManager.shouldEnablePrintBeforeAction + icon.name: "print-before" + shortcut: "PgUp" + onTriggered: PrintOrderManager.swapSelectedAndPreviousNodes() + } + + Action + { + id: printObjectAfterNextAction + text: catalog.i18nc("@action:inmenu menubar:edit","Print After") + " " + PrintOrderManager.nextNodeName + enabled: PrintOrderManager.shouldEnablePrintAfterAction + icon.name: "print-after" + shortcut: "PgDown" + onTriggered: PrintOrderManager.swapSelectedAndNextNodes() + } + Action { id: mergeObjectsAction @@ -468,6 +490,14 @@ Item shortcut: "Shift+Ctrl+R" } + Action + { + id: dropAllAction + text: catalog.i18nc("@action:inmenu menubar:edit","Drop All Models to buildplate") + shortcut: "Ctrl+B" + onTriggered: CuraApplication.setWorkplaceDropToBuildplate() + } + Action { id: resetAllTranslationAction diff --git a/resources/qml/Dialogs/AboutDialog.qml b/resources/qml/Dialogs/AboutDialog.qml index 947b46269a..5c80964e38 100644 --- a/resources/qml/Dialogs/AboutDialog.qml +++ b/resources/qml/Dialogs/AboutDialog.qml @@ -58,7 +58,7 @@ UM.Dialog UM.Label { id: version - text: catalog.i18nc("@label","version: %1").arg(UM.Application.version) + text: catalog.i18nc("@label","version: %1").arg(CuraApplication.version()) font: UM.Theme.getFont("large_bold") color: UM.Theme.getColor("button_text") anchors.right : logo.right diff --git a/resources/qml/Dialogs/WorkspaceSummaryDialog.qml b/resources/qml/Dialogs/WorkspaceSummaryDialog.qml index a174959807..1eca2f395c 100644 --- a/resources/qml/Dialogs/WorkspaceSummaryDialog.qml +++ b/resources/qml/Dialogs/WorkspaceSummaryDialog.qml @@ -25,7 +25,7 @@ UM.Dialog function storeDontShowAgain() { UM.Preferences.setValue("cura/dialog_on_project_save", !dontShowAgainCheckbox.checked) - UM.Preferences.setValue("asked_dialog_on_project_save", true) + UM.Preferences.setValue("cura/asked_dialog_on_project_save", true) } onClosing: storeDontShowAgain() diff --git a/resources/qml/ExtruderIcon.qml b/resources/qml/ExtruderIcon.qml index 3231d924ee..bd15df7848 100644 --- a/resources/qml/ExtruderIcon.qml +++ b/resources/qml/ExtruderIcon.qml @@ -15,6 +15,7 @@ Item property int iconSize: UM.Theme.getSize("extruder_icon").width property string iconVariant: "medium" property alias font: extruderNumberText.font + property alias text: extruderNumberText.text implicitWidth: iconSize implicitHeight: iconSize diff --git a/resources/qml/Menus/ContextMenu.qml b/resources/qml/Menus/ContextMenu.qml index 2de2795a74..1ab0a1332e 100644 --- a/resources/qml/Menus/ContextMenu.qml +++ b/resources/qml/Menus/ContextMenu.qml @@ -71,6 +71,7 @@ Cura.Menu Cura.MenuItem { action: Cura.Actions.reloadAll } Cura.MenuItem { action: Cura.Actions.resetAllTranslation } Cura.MenuItem { action: Cura.Actions.resetAll } + Cura.MenuItem { action: Cura.Actions.dropAll } // Group actions Cura.MenuSeparator {} @@ -78,6 +79,19 @@ Cura.Menu Cura.MenuItem { action: Cura.Actions.mergeObjects } Cura.MenuItem { action: Cura.Actions.unGroupObjects } + // Edit print sequence actions + Cura.MenuSeparator { visible: PrintOrderManager.shouldShowEditPrintOrderActions } + Cura.MenuItem + { + action: Cura.Actions.printObjectBeforePrevious + visible: PrintOrderManager.shouldShowEditPrintOrderActions + } + Cura.MenuItem + { + action: Cura.Actions.printObjectAfterNext + visible: PrintOrderManager.shouldShowEditPrintOrderActions + } + Connections { target: UM.Controller diff --git a/resources/qml/Menus/EditMenu.qml b/resources/qml/Menus/EditMenu.qml index 522c6b27d1..fdab70360e 100644 --- a/resources/qml/Menus/EditMenu.qml +++ b/resources/qml/Menus/EditMenu.qml @@ -21,8 +21,22 @@ Cura.Menu Cura.MenuItem { action: Cura.Actions.deleteAll } Cura.MenuItem { action: Cura.Actions.resetAllTranslation } Cura.MenuItem { action: Cura.Actions.resetAll } + Cura.MenuItem { action: Cura.Actions.dropAll } Cura.MenuSeparator { } Cura.MenuItem { action: Cura.Actions.groupObjects } Cura.MenuItem { action: Cura.Actions.mergeObjects } Cura.MenuItem { action: Cura.Actions.unGroupObjects } + + // Edit print sequence actions + Cura.MenuSeparator { visible: PrintOrderManager.shouldShowEditPrintOrderActions } + Cura.MenuItem + { + action: Cura.Actions.printObjectBeforePrevious + visible: PrintOrderManager.shouldShowEditPrintOrderActions + } + Cura.MenuItem + { + action: Cura.Actions.printObjectAfterNext + visible: PrintOrderManager.shouldShowEditPrintOrderActions + } } \ No newline at end of file diff --git a/resources/qml/Menus/FileMenu.qml b/resources/qml/Menus/FileMenu.qml index 0884053ef3..67edcc5962 100644 --- a/resources/qml/Menus/FileMenu.qml +++ b/resources/qml/Menus/FileMenu.qml @@ -47,8 +47,12 @@ Cura.Menu enabled: UM.WorkspaceFileHandler.enabled && saveProjectMenu.model.count == 1 onTriggered: { - var args = { "filter_by_machine": false, "file_type": "workspace", "preferred_mimetypes": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml" }; - if(UM.Preferences.getValue("cura/dialog_on_project_save")) + const args = { + "filter_by_machine": false, + "file_type": "workspace", + "preferred_mimetypes": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml", + }; + if (UM.Preferences.getValue("cura/dialog_on_project_save")) { saveWorkspaceDialog.args = args saveWorkspaceDialog.open() @@ -70,6 +74,14 @@ Cura.Menu enabled: UM.WorkspaceFileHandler.enabled } + Cura.MenuItem + { + id: saveUCPMenu + text: catalog.i18nc("@title:menu menubar:file", "&Save Universal Cura Project...") + enabled: UM.WorkspaceFileHandler.enabled && CuraApplication.getPackageManager().allEnabledPackages.includes("3MFWriter") + onTriggered: CuraApplication.exportUcp() + } + Cura.MenuSeparator { } Cura.MenuItem @@ -78,8 +90,11 @@ Cura.Menu text: catalog.i18nc("@title:menu menubar:file", "&Export...") onTriggered: { - var localDeviceId = "local_file" - UM.OutputDeviceManager.requestWriteToDevice(localDeviceId, PrintInformation.jobName, { "filter_by_machine": false, "preferred_mimetypes": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml"}) + const args = { + "filter_by_machine": false, + "preferred_mimetypes": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml", + }; + UM.OutputDeviceManager.requestWriteToDevice("local_file", PrintInformation.jobName, args); } } @@ -89,7 +104,13 @@ Cura.Menu text: catalog.i18nc("@action:inmenu menubar:file", "Export Selection...") enabled: UM.Selection.hasSelection icon.name: "document-save-as" - onTriggered: UM.OutputDeviceManager.requestWriteSelectionToDevice("local_file", PrintInformation.jobName, { "filter_by_machine": false, "preferred_mimetypes": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml"}) + onTriggered: { + const args = { + "filter_by_machine": false, + "preferred_mimetypes": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml", + }; + UM.OutputDeviceManager.requestWriteSelectionToDevice("local_file", PrintInformation.jobName, args); + } } Cura.MenuSeparator { } diff --git a/resources/qml/Preferences/GeneralPage.qml b/resources/qml/Preferences/GeneralPage.qml index 587084444c..0f50f169ef 100644 --- a/resources/qml/Preferences/GeneralPage.qml +++ b/resources/qml/Preferences/GeneralPage.qml @@ -101,6 +101,7 @@ UM.PreferencesPage centerOnSelectCheckbox.checked = boolCheck(UM.Preferences.getValue("view/center_on_select")) UM.Preferences.resetPreference("view/invert_zoom"); invertZoomCheckbox.checked = boolCheck(UM.Preferences.getValue("view/invert_zoom")) + UM.Preferences.resetPreference("view/navigation_style"); UM.Preferences.resetPreference("view/zoom_to_mouse"); zoomToMouseCheckbox.checked = boolCheck(UM.Preferences.getValue("view/zoom_to_mouse")) //UM.Preferences.resetPreference("view/top_layer_count"); @@ -124,6 +125,9 @@ UM.PreferencesPage UM.Preferences.resetPreference("info/send_engine_crash") sendEngineCrashCheckbox.checked = boolCheck(UM.Preferences.getValue("info/send_engine_crash")) + UM.Preferences.resetPreference("info/anonymous_engine_crash_report") + sendEngineCrashCheckboxAnonymous.checked = boolCheck(UM.Preferences.getValue("info/anonymous_engine_crash_report")) + UM.Preferences.resetPreference("info/automatic_update_check") checkUpdatesCheckbox.checked = boolCheck(UM.Preferences.getValue("info/automatic_update_check")) @@ -506,11 +510,13 @@ UM.PreferencesPage id: dropDownCheckbox text: catalog.i18nc("@option:check", "Automatically drop models to the build plate") checked: boolCheck(UM.Preferences.getValue("physics/automatic_drop_down")) - onCheckedChanged: UM.Preferences.setValue("physics/automatic_drop_down", checked) + onCheckedChanged: + { + UM.Preferences.setValue("physics/automatic_drop_down", checked) + } } } - UM.TooltipArea { width: childrenRect.width; @@ -608,6 +614,55 @@ UM.PreferencesPage } } + UM.TooltipArea + { + width: childrenRect.width + height: childrenRect.height + text: catalog.i18nc("@info:tooltip", "What type of camera navigation should be used?") + Column + { + spacing: UM.Theme.getSize("narrow_margin").height + + UM.Label + { + text: catalog.i18nc("@window:text", "Camera navigation:") + } + ListModel + { + id: navigationStylesList + Component.onCompleted: + { + append({ text: catalog.i18n("Cura"), code: "cura" }) + append({ text: catalog.i18n("FreeCAD trackpad"), code: "freecad_trackpad" }) + } + } + + Cura.ComboBox + { + id: cameraNavigationComboBox + + model: navigationStylesList + textRole: "text" + width: UM.Theme.getSize("combobox").width + height: UM.Theme.getSize("combobox").height + + currentIndex: + { + var code = UM.Preferences.getValue("view/navigation_style"); + for(var i = 0; i < comboBoxList.count; ++i) + { + if(model.get(i).code == code) + { + return i + } + } + return 0 + } + onActivated: UM.Preferences.setValue("view/navigation_style", model.get(index).code) + } + } + } + Item { //: Spacer @@ -624,6 +679,8 @@ UM.PreferencesPage UM.TooltipArea { width: childrenRect.width + // Mac only allows applications to run as a single instance, so providing the option for this os doesn't make much sense + visible: Qt.platform.os !== "osx" height: childrenRect.height text: catalog.i18nc("@info:tooltip","Should opening files from the desktop or external applications open in the same instance of Cura?") @@ -727,6 +784,20 @@ UM.PreferencesPage } } + UM.TooltipArea + { + width: childrenRect.width + height: childrenRect.height + text: catalog.i18nc("@info:tooltip", "Should a summary be shown when saving a UCP project file?") + + UM.CheckBox + { + text: catalog.i18nc("@option:check", "Show summary dialog when saving a UCP project") + checked: boolCheck(UM.Preferences.getValue("cura/dialog_on_ucp_project_save")) + onCheckedChanged: UM.Preferences.setValue("cura/dialog_on_ucp_project_save", checked) + } + } + UM.TooltipArea { width: childrenRect.width @@ -859,21 +930,63 @@ UM.PreferencesPage font: UM.Theme.getFont("medium_bold") text: catalog.i18nc("@label", "Privacy") } + UM.TooltipArea { width: childrenRect.width height: visible ? childrenRect.height : 0 - text: catalog.i18nc("@info:tooltip", "Should slicing crashes be automatically reported to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored.") + text: catalog.i18nc("@info:tooltip", "Should slicing crashes be automatically reported to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored, unless you give explicit permission.") UM.CheckBox { id: sendEngineCrashCheckbox - text: catalog.i18nc("@option:check","Send (anonymous) engine crash reports") + text: catalog.i18nc("@option:check","Send engine crash reports") checked: boolCheck(UM.Preferences.getValue("info/send_engine_crash")) onCheckedChanged: UM.Preferences.setValue("info/send_engine_crash", checked) } } + ButtonGroup + { + id: curaCrashGroup + buttons: [sendEngineCrashCheckboxAnonymous, sendEngineCrashCheckboxUser] + } + + UM.TooltipArea + { + width: childrenRect.width + height: visible ? childrenRect.height : 0 + text: catalog.i18nc("@info:tooltip", "Send crash reports without any personally identifiable information or models data to UltiMaker.") + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("default_margin").width + Cura.RadioButton + { + id: sendEngineCrashCheckboxAnonymous + text: catalog.i18nc("@option:radio", "Anonymous crash reports") + enabled: sendEngineCrashCheckbox.checked && Cura.API.account.isLoggedIn + checked: boolCheck(UM.Preferences.getValue("info/anonymous_engine_crash_report")) + onClicked: UM.Preferences.setValue("info/anonymous_engine_crash_report", true) + } + } + UM.TooltipArea + { + width: childrenRect.width + height: visible ? childrenRect.height : 0 + text: Cura.API.account.isLoggedIn ? + catalog.i18nc("@info:tooltip", "Send crash reports with your registered UltiMaker account name and the project name to UltiMaker Sentry. No actual model data is being send.") : + catalog.i18nc("@info:tooltip", "Please sign in to your UltiMaker account to allow sending non-anonymous data.") + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("default_margin").width + Cura.RadioButton + { + id: sendEngineCrashCheckboxUser + text: catalog.i18nc("@option:radio", "Include UltiMaker account name") + enabled: sendEngineCrashCheckbox.checked && Cura.API.account.isLoggedIn + checked: !boolCheck(UM.Preferences.getValue("info/anonymous_engine_crash_report")) && Cura.API.account.isLoggedIn + onClicked: UM.Preferences.setValue("info/anonymous_engine_crash_report", false) + } + } + UM.TooltipArea { width: childrenRect.width diff --git a/resources/qml/Preferences/MachinesPage.qml b/resources/qml/Preferences/MachinesPage.qml index fb98cb59c5..1e287e74a0 100644 --- a/resources/qml/Preferences/MachinesPage.qml +++ b/resources/qml/Preferences/MachinesPage.qml @@ -58,10 +58,11 @@ UM.ManagementPage anchors.fill: parent spacing: UM.Theme.getSize("default_margin").height + Repeater { id: machineActionRepeater - model: base.currentItem ? Cura.MachineActionManager.getSupportedActions(Cura.MachineManager.getDefinitionByMachineId(base.currentItem.id)) : null + model: base.currentItem ? CuraApplication.getSupportedActionMachineList(base.currentItem.id) : null Item { diff --git a/resources/qml/Preferences/SettingVisibilityPage.qml b/resources/qml/Preferences/SettingVisibilityPage.qml index 476ba999cf..8743999fe2 100644 --- a/resources/qml/Preferences/SettingVisibilityPage.qml +++ b/resources/qml/Preferences/SettingVisibilityPage.qml @@ -123,7 +123,7 @@ UM.PreferencesPage var idx = -1; for(var i = 0; i < settingVisibilityPresetsModel.items.length; ++i) { - if(settingVisibilityPresetsModel.items[i].presetId == settingVisibilityPresetsModel.activePreset) + if(settingVisibilityPresetsModel.items[i].presetId === settingVisibilityPresetsModel.activePreset) { idx = i; break; @@ -159,7 +159,7 @@ UM.PreferencesPage id: definitionsModel containerId: Cura.MachineManager.activeMachine != null ? Cura.MachineManager.activeMachine.definition.id: "" showAll: true - exclude: ["machine_settings", "command_line_settings"] + exclude: ["machine_settings", "command_line_settings", "ppr"] showAncestors: true expanded: ["*"] visibilityHandler: UM.SettingPreferenceVisibilityHandler {} @@ -173,13 +173,13 @@ UM.PreferencesPage id: loader width: settingsListView.width - scrollBar.width - height: model.type != undefined ? UM.Theme.getSize("section").height : 0 + height: model.type !== undefined ? UM.Theme.getSize("section").height : 0 property var definition: model property var settingDefinitionsModel: definitionsModel asynchronous: true - active: model.type != undefined + active: model.type !== undefined sourceComponent: { switch (model.type) diff --git a/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml b/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml index 41ab40eb31..94e7a93442 100644 --- a/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml +++ b/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml @@ -160,7 +160,6 @@ Item ProfileWarningReset { id: profileWarningReset - width: childrenRect.width anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter fullWarning: false diff --git a/resources/qml/PrintSetupSelector/Custom/QualitiesWithIntentMenu.qml b/resources/qml/PrintSetupSelector/Custom/QualitiesWithIntentMenu.qml index 646e835cb2..9facc5095e 100644 --- a/resources/qml/PrintSetupSelector/Custom/QualitiesWithIntentMenu.qml +++ b/resources/qml/PrintSetupSelector/Custom/QualitiesWithIntentMenu.qml @@ -187,7 +187,7 @@ Popup //Add all the custom profiles. Repeater { - model: Cura.CustomQualityProfilesDropDownMenuModel + model: CuraApplication.getCustomQualityProfilesDropDownMenuModel() MenuButton { onClicked: Cura.MachineManager.setQualityChangesGroup(model.quality_changes_group) diff --git a/resources/qml/PrintSetupSelector/ProfileWarningReset.qml b/resources/qml/PrintSetupSelector/ProfileWarningReset.qml index c44fcc8cc2..bf4385446d 100644 --- a/resources/qml/PrintSetupSelector/ProfileWarningReset.qml +++ b/resources/qml/PrintSetupSelector/ProfileWarningReset.qml @@ -11,7 +11,7 @@ import "../Dialogs" Item { property bool fullWarning: true // <- Can you see the warning icon and the text, or is it just the buttons? - + property var simpleModeSettingsManager :CuraApplication.getSimpleModeSettingsManager() height: visible ? UM.Theme.getSize("action_button_icon").height : 0 width: visible ? childrenRect.width: 0 visible: Cura.MachineManager.hasUserSettings || (fullWarning && Cura.MachineManager.hasCustomQuality) @@ -96,7 +96,7 @@ Item State { name: "custom settings changed" - when: Cura.SimpleModeSettingsManager.isProfileCustomized + when: simpleModeSettingsManager.isProfileCustomized PropertyChanges { target: warning diff --git a/resources/qml/PrinterSelector/PrintSelectorCard.qml b/resources/qml/PrinterSelector/PrintSelectorCard.qml index efcbe07c87..1c3e78adbf 100644 --- a/resources/qml/PrinterSelector/PrintSelectorCard.qml +++ b/resources/qml/PrinterSelector/PrintSelectorCard.qml @@ -79,7 +79,7 @@ Rectangle anchors.verticalCenter: extruderIcon.verticalCenter anchors.left: extruderIcon.right anchors.leftMargin: UM.Theme.getSize("default_margin").width - text: modelData.core + text: modelData ? (modelData.core ? modelData.core : "" ) : "" font: UM.Theme.getFont("default_bold") } diff --git a/resources/qml/Settings/SettingTextField.qml b/resources/qml/Settings/SettingTextField.qml index d8e90e4951..f49b688c18 100644 --- a/resources/qml/Settings/SettingTextField.qml +++ b/resources/qml/Settings/SettingTextField.qml @@ -223,7 +223,7 @@ SettingItem cursorShape: Qt.IBeamCursor - onPressed: { + onPressed:(mouse)=> { if (!input.activeFocus) { base.focusGainedByClick = true diff --git a/resources/qml/Toolbar.qml b/resources/qml/Toolbar.qml index fd48ef7448..81f6c5d682 100644 --- a/resources/qml/Toolbar.qml +++ b/resources/qml/Toolbar.qml @@ -203,7 +203,7 @@ Item x: UM.Theme.getSize("default_margin").width y: UM.Theme.getSize("default_margin").height - source: UM.ActiveTool.valid ? UM.ActiveTool.activeToolPanel : "" + source: UM.Controller.valid ? UM.Controller.activeToolPanel : "" enabled: UM.Controller.toolsEnabled } } @@ -222,7 +222,7 @@ Item UM.Label { id: toolHint - text: UM.ActiveTool.properties.getValue("ToolHint") != undefined ? UM.ActiveTool.properties.getValue("ToolHint") : "" + text: UM.Controller.properties.getValue("ToolHint") != undefined ? UM.Controller.properties.getValue("ToolHint") : "" color: UM.Theme.getColor("tooltip_text") anchors.horizontalCenter: parent.horizontalCenter } diff --git a/resources/quality/beamup_l/beamup_l_coarse.inst.cfg b/resources/quality/beamup_l/beamup_l_coarse.inst.cfg index e298d659f7..2fd1b8afca 100644 --- a/resources/quality/beamup_l/beamup_l_coarse.inst.cfg +++ b/resources/quality/beamup_l/beamup_l_coarse.inst.cfg @@ -33,7 +33,6 @@ support_infill_rate = 20 support_interface_enable = True support_interface_height = 0.60 support_interface_pattern = zigzag -support_interface_skip_height = 0.30 support_offset = 0.8 support_z_distance = 0.4 wall_thickness = 1.6 diff --git a/resources/quality/beamup_l/beamup_l_draft.inst.cfg b/resources/quality/beamup_l/beamup_l_draft.inst.cfg index 16f8536a02..e3cf82651b 100644 --- a/resources/quality/beamup_l/beamup_l_draft.inst.cfg +++ b/resources/quality/beamup_l/beamup_l_draft.inst.cfg @@ -33,7 +33,6 @@ support_infill_rate = 20 support_interface_enable = True support_interface_height = 0.60 support_interface_pattern = zigzag -support_interface_skip_height = 0.20 support_offset = 0.8 support_z_distance = 0.3 wall_thickness = 1.6 diff --git a/resources/quality/beamup_l/beamup_l_extra_fine.inst.cfg b/resources/quality/beamup_l/beamup_l_extra_fine.inst.cfg index cacf5289e7..8b4e8eccc7 100644 --- a/resources/quality/beamup_l/beamup_l_extra_fine.inst.cfg +++ b/resources/quality/beamup_l/beamup_l_extra_fine.inst.cfg @@ -33,7 +33,6 @@ support_infill_rate = 20 support_interface_enable = True support_interface_height = 0.30 support_interface_pattern = zigzag -support_interface_skip_height = 0.06 support_offset = 0.8 support_z_distance = 0.12 wall_thickness = 1.6 diff --git a/resources/quality/beamup_l/beamup_l_fine.inst.cfg b/resources/quality/beamup_l/beamup_l_fine.inst.cfg index f977de059b..87ed50905c 100644 --- a/resources/quality/beamup_l/beamup_l_fine.inst.cfg +++ b/resources/quality/beamup_l/beamup_l_fine.inst.cfg @@ -33,7 +33,6 @@ support_infill_rate = 20 support_interface_enable = True support_interface_height = 0.30 support_interface_pattern = zigzag -support_interface_skip_height = 0.10 support_offset = 0.8 support_z_distance = 0.2 wall_thickness = 1.6 diff --git a/resources/quality/beamup_l/beamup_l_normal.inst.cfg b/resources/quality/beamup_l/beamup_l_normal.inst.cfg index cc78f01198..59ad26fc03 100644 --- a/resources/quality/beamup_l/beamup_l_normal.inst.cfg +++ b/resources/quality/beamup_l/beamup_l_normal.inst.cfg @@ -33,7 +33,6 @@ support_infill_rate = 20 support_interface_enable = True support_interface_height = 0.45 support_interface_pattern = zigzag -support_interface_skip_height = 0.15 support_offset = 0.8 support_z_distance = 0.25 wall_thickness = 1.6 diff --git a/resources/quality/beamup_s/beamup_s_coarse.inst.cfg b/resources/quality/beamup_s/beamup_s_coarse.inst.cfg index d4d8b3551b..673950dca8 100644 --- a/resources/quality/beamup_s/beamup_s_coarse.inst.cfg +++ b/resources/quality/beamup_s/beamup_s_coarse.inst.cfg @@ -33,7 +33,6 @@ support_infill_rate = 20 support_interface_enable = True support_interface_height = 0.60 support_interface_pattern = zigzag -support_interface_skip_height = 0.30 support_offset = 0.8 support_z_distance = 0.2 wall_thickness = 0.8 diff --git a/resources/quality/beamup_s/beamup_s_draft.inst.cfg b/resources/quality/beamup_s/beamup_s_draft.inst.cfg index 14dc4ad964..a307f2d872 100644 --- a/resources/quality/beamup_s/beamup_s_draft.inst.cfg +++ b/resources/quality/beamup_s/beamup_s_draft.inst.cfg @@ -33,7 +33,6 @@ support_infill_rate = 20 support_interface_enable = True support_interface_height = 0.40 support_interface_pattern = zigzag -support_interface_skip_height = 0.20 support_offset = 0.8 support_z_distance = 0.2 wall_thickness = 0.8 diff --git a/resources/quality/beamup_s/beamup_s_extra_fine.inst.cfg b/resources/quality/beamup_s/beamup_s_extra_fine.inst.cfg index fe490f5dd4..daf1c8c5e5 100644 --- a/resources/quality/beamup_s/beamup_s_extra_fine.inst.cfg +++ b/resources/quality/beamup_s/beamup_s_extra_fine.inst.cfg @@ -33,7 +33,6 @@ support_infill_rate = 20 support_interface_enable = True support_interface_height = 0.30 support_interface_pattern = zigzag -support_interface_skip_height = 0.06 support_offset = 0.8 support_z_distance = 0.2 wall_thickness = 0.8 diff --git a/resources/quality/beamup_s/beamup_s_fine.inst.cfg b/resources/quality/beamup_s/beamup_s_fine.inst.cfg index ea86894268..798cc6bb68 100644 --- a/resources/quality/beamup_s/beamup_s_fine.inst.cfg +++ b/resources/quality/beamup_s/beamup_s_fine.inst.cfg @@ -33,7 +33,6 @@ support_infill_rate = 20 support_interface_enable = True support_interface_height = 0.30 support_interface_pattern = zigzag -support_interface_skip_height = 0.10 support_offset = 0.8 support_z_distance = 0.2 wall_thickness = 0.8 diff --git a/resources/quality/beamup_s/beamup_s_normal.inst.cfg b/resources/quality/beamup_s/beamup_s_normal.inst.cfg index c034f9bfd4..cab5840330 100644 --- a/resources/quality/beamup_s/beamup_s_normal.inst.cfg +++ b/resources/quality/beamup_s/beamup_s_normal.inst.cfg @@ -33,7 +33,6 @@ support_infill_rate = 20 support_interface_enable = True support_interface_height = 0.45 support_interface_pattern = zigzag -support_interface_skip_height = 0.15 support_offset = 0.8 support_z_distance = 0.2 wall_thickness = 0.8 diff --git a/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.3_fine.inst.cfg b/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.3_fine.inst.cfg new file mode 100644 index 0000000000..a5a800486f --- /dev/null +++ b/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.3_fine.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Fine +version = 4 + +[metadata] +material = generic_abs +quality_type = fine +setting_version = 22 +type = quality +variant = 0.3mm Nozzle +weight = 1 + +[values] +speed_print = 50 +speed_travel = 100 + diff --git a/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.3_vfine.inst.cfg b/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.3_vfine.inst.cfg new file mode 100644 index 0000000000..316f5872a7 --- /dev/null +++ b/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.3_vfine.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Very Fine +version = 4 + +[metadata] +material = generic_abs +quality_type = veryfine +setting_version = 22 +type = quality +variant = 0.3mm Nozzle +weight = 2 + +[values] +speed_print = 45 +speed_travel = 100 + diff --git a/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.4_draft.inst.cfg b/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.4_draft.inst.cfg new file mode 100644 index 0000000000..b322c2784a --- /dev/null +++ b/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.4_draft.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Draft +version = 4 + +[metadata] +material = generic_abs +quality_type = draft +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = -3 + +[values] +speed_print = 70 +speed_travel = 90 + diff --git a/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.4_fast.inst.cfg b/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.4_fast.inst.cfg new file mode 100644 index 0000000000..d329ebb4d9 --- /dev/null +++ b/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.4_fast.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Fast +version = 4 + +[metadata] +material = generic_abs +quality_type = fast +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = -1 + +[values] +speed_print = 60 +speed_travel = 80 + diff --git a/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.4_fine.inst.cfg b/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.4_fine.inst.cfg new file mode 100644 index 0000000000..0aacffffcc --- /dev/null +++ b/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.4_fine.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Fine +version = 4 + +[metadata] +material = generic_abs +quality_type = fine +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = 1 + +[values] +speed_print = 40 +speed_travel = 70 + diff --git a/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.4_normal.inst.cfg b/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.4_normal.inst.cfg new file mode 100644 index 0000000000..0a62fdc664 --- /dev/null +++ b/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.4_normal.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Standard +version = 4 + +[metadata] +material = generic_abs +quality_type = normal +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = 0 + +[values] +speed_print = 60 +speed_travel = 80 + diff --git a/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.4_vfast.inst.cfg b/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.4_vfast.inst.cfg new file mode 100644 index 0000000000..9ea811006d --- /dev/null +++ b/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.4_vfast.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Very Fast +version = 4 + +[metadata] +material = generic_abs +quality_type = veryfast +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = -2 + +[values] +speed_print = 60 +speed_travel = 90 + diff --git a/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.4_vfine.inst.cfg b/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.4_vfine.inst.cfg new file mode 100644 index 0000000000..9d0d042d37 --- /dev/null +++ b/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.4_vfine.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Very Fine +version = 4 + +[metadata] +material = generic_abs +quality_type = veryfine +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = 2 + +[values] +speed_print = 35 +speed_travel = 70 + diff --git a/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.6_draft.inst.cfg b/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.6_draft.inst.cfg new file mode 100644 index 0000000000..469930cd21 --- /dev/null +++ b/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.6_draft.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Draft +version = 4 + +[metadata] +material = generic_abs +quality_type = draft +setting_version = 22 +type = quality +variant = 0.6mm Nozzle +weight = -3 + +[values] +speed_print = 55 +speed_travel = 100 + diff --git a/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.6_fast.inst.cfg b/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.6_fast.inst.cfg new file mode 100644 index 0000000000..bd25742c2a --- /dev/null +++ b/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.6_fast.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Fast +version = 4 + +[metadata] +material = generic_abs +quality_type = fast +setting_version = 22 +type = quality +variant = 0.6mm Nozzle +weight = -1 + +[values] +speed_print = 50 +speed_travel = 100 + diff --git a/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.6_vfast.inst.cfg b/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.6_vfast.inst.cfg new file mode 100644 index 0000000000..691770bca3 --- /dev/null +++ b/resources/quality/flashforge/abs/flashforge_adventurer3_abs_0.6_vfast.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Very Fast +version = 4 + +[metadata] +material = generic_abs +quality_type = veryfast +setting_version = 22 +type = quality +variant = 0.6mm Nozzle +weight = -2 + +[values] +speed_print = 50 +speed_travel = 100 + diff --git a/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.3_fine.inst.cfg b/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.3_fine.inst.cfg new file mode 100644 index 0000000000..9ad2fc4d39 --- /dev/null +++ b/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.3_fine.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Fine +version = 4 + +[metadata] +material = generic_abs +quality_type = fine +setting_version = 22 +type = quality +variant = 0.3mm Nozzle +weight = 1 + +[values] +retraction_amount = 5 +retraction_speed = 30 +speed_print = 50 +speed_travel = 100 + diff --git a/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.3_vfine.inst.cfg b/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.3_vfine.inst.cfg new file mode 100644 index 0000000000..69c626d03f --- /dev/null +++ b/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.3_vfine.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Very Fine +version = 4 + +[metadata] +material = generic_abs +quality_type = veryfine +setting_version = 22 +type = quality +variant = 0.3mm Nozzle +weight = 2 + +[values] +retraction_amount = 5 +retraction_speed = 30 +speed_print = 45 +speed_travel = 100 + diff --git a/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.4_draft.inst.cfg b/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.4_draft.inst.cfg new file mode 100644 index 0000000000..8d7a92f553 --- /dev/null +++ b/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.4_draft.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Draft +version = 4 + +[metadata] +material = generic_abs +quality_type = draft +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = -3 + +[values] +retraction_amount = 5 +retraction_speed = 30 +speed_print = 70 +speed_travel = 90 + diff --git a/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.4_fast.inst.cfg b/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.4_fast.inst.cfg new file mode 100644 index 0000000000..115387a815 --- /dev/null +++ b/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.4_fast.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Fast +version = 4 + +[metadata] +material = generic_abs +quality_type = fast +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = -1 + +[values] +retraction_amount = 5 +retraction_speed = 30 +speed_print = 60 +speed_travel = 80 + diff --git a/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.4_fine.inst.cfg b/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.4_fine.inst.cfg new file mode 100644 index 0000000000..46f3f2673b --- /dev/null +++ b/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.4_fine.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer3 +name = Fine +version = 4 + +[metadata] +material = generic_abs +quality_type = fine +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = 1 + +[values] +retraction_amount = 5 +retraction_speed = 30 +speed_print = 40 +speed_travel = 70 + diff --git a/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.4_normal.inst.cfg b/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.4_normal.inst.cfg new file mode 100644 index 0000000000..c0bc64550d --- /dev/null +++ b/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.4_normal.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Standard +version = 4 + +[metadata] +material = generic_abs +quality_type = normal +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = 0 + +[values] +retraction_amount = 5 +retraction_speed = 30 +speed_print = 60 +speed_travel = 80 + diff --git a/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.4_vfast.inst.cfg b/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.4_vfast.inst.cfg new file mode 100644 index 0000000000..14ce91d9f3 --- /dev/null +++ b/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.4_vfast.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Very Fast +version = 4 + +[metadata] +material = generic_abs +quality_type = veryfast +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = -2 + +[values] +retraction_amount = 5 +retraction_speed = 30 +speed_print = 60 +speed_travel = 90 + diff --git a/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.4_vfine.inst.cfg b/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.4_vfine.inst.cfg new file mode 100644 index 0000000000..cdb13c71d1 --- /dev/null +++ b/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.4_vfine.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Very Fine +version = 4 + +[metadata] +material = generic_abs +quality_type = veryfine +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = 2 + +[values] +retraction_amount = 5 +retraction_speed = 30 +speed_print = 35 +speed_travel = 70 + diff --git a/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.6_draft.inst.cfg b/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.6_draft.inst.cfg new file mode 100644 index 0000000000..77e222ddcd --- /dev/null +++ b/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.6_draft.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Draft +version = 4 + +[metadata] +material = generic_abs +quality_type = draft +setting_version = 22 +type = quality +variant = 0.6mm Nozzle +weight = -3 + +[values] +retraction_amount = 6 +retraction_speed = 30 +speed_print = 55 +speed_travel = 100 + diff --git a/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.6_fast.inst.cfg b/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.6_fast.inst.cfg new file mode 100644 index 0000000000..cb0dd441c2 --- /dev/null +++ b/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.6_fast.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Fast +version = 4 + +[metadata] +material = generic_abs +quality_type = fast +setting_version = 22 +type = quality +variant = 0.6mm Nozzle +weight = -1 + +[values] +retraction_amount = 6 +retraction_speed = 30 +speed_print = 50 +speed_travel = 100 + diff --git a/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.6_vfast.inst.cfg b/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.6_vfast.inst.cfg new file mode 100644 index 0000000000..10055e2fa0 --- /dev/null +++ b/resources/quality/flashforge/abs/flashforge_adventurer4_abs_0.6_vfast.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer3 +name = Very Fast +version = 4 + +[metadata] +material = generic_abs +quality_type = veryfast +setting_version = 22 +type = quality +variant = 0.6mm Nozzle +weight = -2 + +[values] +retraction_amount = 6 +retraction_speed = 30 +speed_print = 50 +speed_travel = 100 + diff --git a/resources/quality/flashforge/asa/flashforge_adventurer4_asa_0.4_fast.inst.cfg b/resources/quality/flashforge/asa/flashforge_adventurer4_asa_0.4_fast.inst.cfg new file mode 100644 index 0000000000..b85163b595 --- /dev/null +++ b/resources/quality/flashforge/asa/flashforge_adventurer4_asa_0.4_fast.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Fast +version = 4 + +[metadata] +material = generic_asa +quality_type = fast +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = -1 + +[values] +retraction_amount = 4.5 +retraction_speed = 30 +speed_print = 45 +speed_travel = 100 + diff --git a/resources/quality/flashforge/asa/flashforge_adventurer4_asa_0.4_fine.inst.cfg b/resources/quality/flashforge/asa/flashforge_adventurer4_asa_0.4_fine.inst.cfg new file mode 100644 index 0000000000..a584b97724 --- /dev/null +++ b/resources/quality/flashforge/asa/flashforge_adventurer4_asa_0.4_fine.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Fine +version = 4 + +[metadata] +material = generic_asa +quality_type = fine +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = -1 + +[values] +retraction_amount = 4.5 +retraction_speed = 30 +speed_print = 35 +speed_travel = 100 + diff --git a/resources/quality/flashforge/asa/flashforge_adventurer4_asa_0.4_normal.inst.cfg b/resources/quality/flashforge/asa/flashforge_adventurer4_asa_0.4_normal.inst.cfg new file mode 100644 index 0000000000..e976f9f7b4 --- /dev/null +++ b/resources/quality/flashforge/asa/flashforge_adventurer4_asa_0.4_normal.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Standard +version = 4 + +[metadata] +material = generic_asa +quality_type = normal +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = 0 + +[values] +retraction_amount = 4.5 +retraction_speed = 30 +speed_print = 40 +speed_travel = 100 + diff --git a/resources/quality/flashforge/flashforge_adventurer3_draft.inst.cfg b/resources/quality/flashforge/flashforge_adventurer3_draft.inst.cfg new file mode 100644 index 0000000000..f1dd467a2b --- /dev/null +++ b/resources/quality/flashforge/flashforge_adventurer3_draft.inst.cfg @@ -0,0 +1,21 @@ +[general] +definition = flashforge_adventurer3 +name = Draft +version = 4 + +[metadata] +global_quality = True +quality_type = draft +setting_version = 22 +type = quality +weight = -3 + +[values] +layer_height = 0.4 +layer_height_0 = 0.4 +retraction_amount = 5 +retraction_speed = 25 +speed_infill = =speed_print +speed_layer_0 = 10 +speed_support = =math.ceil(speed_print * 0.6) + diff --git a/resources/quality/flashforge/flashforge_adventurer3_fast.inst.cfg b/resources/quality/flashforge/flashforge_adventurer3_fast.inst.cfg new file mode 100644 index 0000000000..300481cd3d --- /dev/null +++ b/resources/quality/flashforge/flashforge_adventurer3_fast.inst.cfg @@ -0,0 +1,21 @@ +[general] +definition = flashforge_adventurer3 +name = Fast +version = 4 + +[metadata] +global_quality = True +quality_type = fast +setting_version = 22 +type = quality +weight = -1 + +[values] +layer_height = 0.25 +layer_height_0 = 0.3 +retraction_amount = 5 +retraction_speed = 25 +speed_infill = =speed_print +speed_layer_0 = 10 +speed_support = =math.ceil(speed_print * 0.6) + diff --git a/resources/quality/flashforge/flashforge_adventurer3_fine.inst.cfg b/resources/quality/flashforge/flashforge_adventurer3_fine.inst.cfg new file mode 100644 index 0000000000..553091b10a --- /dev/null +++ b/resources/quality/flashforge/flashforge_adventurer3_fine.inst.cfg @@ -0,0 +1,21 @@ +[general] +definition = flashforge_adventurer3 +name = Fine +version = 4 + +[metadata] +global_quality = True +quality_type = fine +setting_version = 22 +type = quality +weight = 1 + +[values] +layer_height = 0.15 +layer_height_0 = 0.23 +retraction_amount = 5 +retraction_speed = 25 +speed_infill = =speed_print +speed_layer_0 = 10 +speed_support = =math.ceil(speed_print * 0.6) + diff --git a/resources/quality/flashforge/flashforge_adventurer3_normal.inst.cfg b/resources/quality/flashforge/flashforge_adventurer3_normal.inst.cfg new file mode 100644 index 0000000000..438b2cc9fa --- /dev/null +++ b/resources/quality/flashforge/flashforge_adventurer3_normal.inst.cfg @@ -0,0 +1,21 @@ +[general] +definition = flashforge_adventurer3 +name = Standard +version = 4 + +[metadata] +global_quality = True +quality_type = normal +setting_version = 22 +type = quality +weight = 0 + +[values] +layer_height = 0.2 +layer_height_0 = 0.3 +retraction_amount = 5 +retraction_speed = 25 +speed_infill = =speed_print +speed_layer_0 = 10 +speed_support = =math.ceil(speed_print * 0.6) + diff --git a/resources/quality/flashforge/flashforge_adventurer3_vfast.inst.cfg b/resources/quality/flashforge/flashforge_adventurer3_vfast.inst.cfg new file mode 100644 index 0000000000..fba4eb1091 --- /dev/null +++ b/resources/quality/flashforge/flashforge_adventurer3_vfast.inst.cfg @@ -0,0 +1,21 @@ +[general] +definition = flashforge_adventurer3 +name = Very Fast +version = 4 + +[metadata] +global_quality = True +quality_type = veryfast +setting_version = 22 +type = quality +weight = -2 + +[values] +layer_height = 0.3 +layer_height_0 = 0.3 +retraction_amount = 5 +retraction_speed = 25 +speed_infill = =speed_print +speed_layer_0 = 10 +speed_support = =math.ceil(speed_print * 0.6) + diff --git a/resources/quality/flashforge/flashforge_adventurer3_vfine.inst.cfg b/resources/quality/flashforge/flashforge_adventurer3_vfine.inst.cfg new file mode 100644 index 0000000000..6ea52128be --- /dev/null +++ b/resources/quality/flashforge/flashforge_adventurer3_vfine.inst.cfg @@ -0,0 +1,21 @@ +[general] +definition = flashforge_adventurer3 +name = Very Fine +version = 4 + +[metadata] +global_quality = True +quality_type = veryfine +setting_version = 22 +type = quality +weight = 2 + +[values] +layer_height = 0.1 +layer_height_0 = 0.18 +retraction_amount = 5 +retraction_speed = 25 +speed_infill = =speed_print +speed_layer_0 = 10 +speed_support = =math.ceil(speed_print * 0.6) + diff --git a/resources/quality/flashforge/flashforge_adventurer4_draft.inst.cfg b/resources/quality/flashforge/flashforge_adventurer4_draft.inst.cfg new file mode 100644 index 0000000000..7ee52ca8a3 --- /dev/null +++ b/resources/quality/flashforge/flashforge_adventurer4_draft.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Draft +version = 4 + +[metadata] +global_quality = True +quality_type = draft +setting_version = 22 +type = quality +weight = -3 + +[values] +layer_height = 0.4 +layer_height_0 = 0.4 +speed_infill = =speed_print +speed_layer_0 = 10 +speed_support = =math.ceil(speed_print * 0.6) + diff --git a/resources/quality/flashforge/flashforge_adventurer4_fast.inst.cfg b/resources/quality/flashforge/flashforge_adventurer4_fast.inst.cfg new file mode 100644 index 0000000000..8be5e02e72 --- /dev/null +++ b/resources/quality/flashforge/flashforge_adventurer4_fast.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Fast +version = 4 + +[metadata] +global_quality = True +quality_type = fast +setting_version = 22 +type = quality +weight = -1 + +[values] +layer_height = 0.25 +layer_height_0 = 0.3 +speed_infill = =speed_print +speed_layer_0 = 10 +speed_support = =math.ceil(speed_print * 0.6) + diff --git a/resources/quality/flashforge/flashforge_adventurer4_fine.inst.cfg b/resources/quality/flashforge/flashforge_adventurer4_fine.inst.cfg new file mode 100644 index 0000000000..272e5bc69d --- /dev/null +++ b/resources/quality/flashforge/flashforge_adventurer4_fine.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Fine +version = 4 + +[metadata] +global_quality = True +quality_type = fine +setting_version = 22 +type = quality +weight = 1 + +[values] +layer_height = 0.15 +layer_height_0 = 0.23 +speed_infill = =speed_print +speed_layer_0 = 10 +speed_support = =math.ceil(speed_print * 0.6) + diff --git a/resources/quality/flashforge/flashforge_adventurer4_normal.inst.cfg b/resources/quality/flashforge/flashforge_adventurer4_normal.inst.cfg new file mode 100644 index 0000000000..4eb11924fe --- /dev/null +++ b/resources/quality/flashforge/flashforge_adventurer4_normal.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Standard +version = 4 + +[metadata] +global_quality = True +quality_type = normal +setting_version = 22 +type = quality +weight = 0 + +[values] +layer_height = 0.2 +layer_height_0 = 0.3 +speed_infill = =speed_print +speed_layer_0 = 10 +speed_support = =math.ceil(speed_print * 0.6) + diff --git a/resources/quality/flashforge/flashforge_adventurer4_vfast.inst.cfg b/resources/quality/flashforge/flashforge_adventurer4_vfast.inst.cfg new file mode 100644 index 0000000000..a2e3718bd2 --- /dev/null +++ b/resources/quality/flashforge/flashforge_adventurer4_vfast.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Very Fast +version = 4 + +[metadata] +global_quality = True +quality_type = veryfast +setting_version = 22 +type = quality +weight = -2 + +[values] +layer_height = 0.3 +layer_height_0 = 0.3 +speed_infill = =speed_print +speed_layer_0 = 10 +speed_support = =math.ceil(speed_print * 0.6) + diff --git a/resources/quality/flashforge/flashforge_adventurer4_vfine.inst.cfg b/resources/quality/flashforge/flashforge_adventurer4_vfine.inst.cfg new file mode 100644 index 0000000000..f7eda2f194 --- /dev/null +++ b/resources/quality/flashforge/flashforge_adventurer4_vfine.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Very Fine +version = 4 + +[metadata] +global_quality = True +quality_type = veryfine +setting_version = 22 +type = quality +weight = 2 + +[values] +layer_height = 0.1 +layer_height_0 = 0.18 +speed_infill = =speed_print +speed_layer_0 = 10 +speed_support = =math.ceil(speed_print * 0.6) + diff --git a/resources/quality/flashforge/pc/flashforge_adventurer3_pc_0.4_draft.inst.cfg b/resources/quality/flashforge/pc/flashforge_adventurer3_pc_0.4_draft.inst.cfg new file mode 100644 index 0000000000..03b8d5f74e --- /dev/null +++ b/resources/quality/flashforge/pc/flashforge_adventurer3_pc_0.4_draft.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Draft +version = 4 + +[metadata] +material = generic_pc +quality_type = draft +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = -3 + +[values] +speed_print = 50 +speed_travel = 90 + diff --git a/resources/quality/flashforge/pc/flashforge_adventurer3_pc_0.4_fast.inst.cfg b/resources/quality/flashforge/pc/flashforge_adventurer3_pc_0.4_fast.inst.cfg new file mode 100644 index 0000000000..0c4322dfee --- /dev/null +++ b/resources/quality/flashforge/pc/flashforge_adventurer3_pc_0.4_fast.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Fast +version = 4 + +[metadata] +material = generic_pc +quality_type = fast +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = -1 + +[values] +speed_print = 40 +speed_travel = 80 + diff --git a/resources/quality/flashforge/pc/flashforge_adventurer3_pc_0.4_normal.inst.cfg b/resources/quality/flashforge/pc/flashforge_adventurer3_pc_0.4_normal.inst.cfg new file mode 100644 index 0000000000..1047360ee7 --- /dev/null +++ b/resources/quality/flashforge/pc/flashforge_adventurer3_pc_0.4_normal.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Standard +version = 4 + +[metadata] +material = generic_pc +quality_type = normal +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = 0 + +[values] +speed_print = 40 +speed_travel = 80 + diff --git a/resources/quality/flashforge/pc/flashforge_adventurer3_pc_0.4_vfast.inst.cfg b/resources/quality/flashforge/pc/flashforge_adventurer3_pc_0.4_vfast.inst.cfg new file mode 100644 index 0000000000..cddd593db6 --- /dev/null +++ b/resources/quality/flashforge/pc/flashforge_adventurer3_pc_0.4_vfast.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Very Fast +version = 4 + +[metadata] +material = generic_pc +quality_type = veryfast +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = -2 + +[values] +speed_print = 50 +speed_travel = 90 + diff --git a/resources/quality/flashforge/pc/flashforge_adventurer3_pc_0.6_draft.inst.cfg b/resources/quality/flashforge/pc/flashforge_adventurer3_pc_0.6_draft.inst.cfg new file mode 100644 index 0000000000..1742dbd9c3 --- /dev/null +++ b/resources/quality/flashforge/pc/flashforge_adventurer3_pc_0.6_draft.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Draft +version = 4 + +[metadata] +material = generic_pc +quality_type = draft +setting_version = 22 +type = quality +variant = 0.6mm Nozzle +weight = -3 + +[values] +speed_print = 60 +speed_travel = 100 + diff --git a/resources/quality/flashforge/pc/flashforge_adventurer3_pc_0.6_fast.inst.cfg b/resources/quality/flashforge/pc/flashforge_adventurer3_pc_0.6_fast.inst.cfg new file mode 100644 index 0000000000..7e67c9f178 --- /dev/null +++ b/resources/quality/flashforge/pc/flashforge_adventurer3_pc_0.6_fast.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Fast +version = 4 + +[metadata] +material = generic_pc +quality_type = fast +setting_version = 22 +type = quality +variant = 0.6mm Nozzle +weight = -2 + +[values] +speed_print = 50 +speed_travel = 100 + diff --git a/resources/quality/flashforge/pc/flashforge_adventurer3_pc_0.6_vfast.inst.cfg b/resources/quality/flashforge/pc/flashforge_adventurer3_pc_0.6_vfast.inst.cfg new file mode 100644 index 0000000000..c3aecf6625 --- /dev/null +++ b/resources/quality/flashforge/pc/flashforge_adventurer3_pc_0.6_vfast.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Very Fast +version = 4 + +[metadata] +material = generic_pc +quality_type = veryfast +setting_version = 22 +type = quality +variant = 0.6mm Nozzle +weight = -2 + +[values] +speed_print = 50 +speed_travel = 100 + diff --git a/resources/quality/flashforge/pc/flashforge_adventurer4_pc_0.4_draft.inst.cfg b/resources/quality/flashforge/pc/flashforge_adventurer4_pc_0.4_draft.inst.cfg new file mode 100644 index 0000000000..c60aab1383 --- /dev/null +++ b/resources/quality/flashforge/pc/flashforge_adventurer4_pc_0.4_draft.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Draft +version = 4 + +[metadata] +material = generic_pc +quality_type = draft +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = -3 + +[values] +retraction_amount = 6 +retraction_speed = 30 +speed_print = 50 +speed_travel = 90 + diff --git a/resources/quality/flashforge/pc/flashforge_adventurer4_pc_0.4_fast.inst.cfg b/resources/quality/flashforge/pc/flashforge_adventurer4_pc_0.4_fast.inst.cfg new file mode 100644 index 0000000000..4a532fe98b --- /dev/null +++ b/resources/quality/flashforge/pc/flashforge_adventurer4_pc_0.4_fast.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Fast +version = 4 + +[metadata] +material = generic_pc +quality_type = fast +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = -1 + +[values] +retraction_amount = 6 +retraction_speed = 30 +speed_print = 40 +speed_travel = 80 + diff --git a/resources/quality/flashforge/pc/flashforge_adventurer4_pc_0.4_normal.inst.cfg b/resources/quality/flashforge/pc/flashforge_adventurer4_pc_0.4_normal.inst.cfg new file mode 100644 index 0000000000..b44810bae8 --- /dev/null +++ b/resources/quality/flashforge/pc/flashforge_adventurer4_pc_0.4_normal.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Standard +version = 4 + +[metadata] +material = generic_pc +quality_type = normal +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = 0 + +[values] +retraction_amount = 6 +retraction_speed = 30 +speed_print = 40 +speed_travel = 80 + diff --git a/resources/quality/flashforge/pc/flashforge_adventurer4_pc_0.4_vfast.inst.cfg b/resources/quality/flashforge/pc/flashforge_adventurer4_pc_0.4_vfast.inst.cfg new file mode 100644 index 0000000000..042d303522 --- /dev/null +++ b/resources/quality/flashforge/pc/flashforge_adventurer4_pc_0.4_vfast.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Very Fast +version = 4 + +[metadata] +material = generic_pc +quality_type = veryfast +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = -2 + +[values] +retraction_amount = 6 +retraction_speed = 30 +speed_print = 50 +speed_travel = 90 + diff --git a/resources/quality/flashforge/pc/flashforge_adventurer4_pc_0.6_draft.inst.cfg b/resources/quality/flashforge/pc/flashforge_adventurer4_pc_0.6_draft.inst.cfg new file mode 100644 index 0000000000..cb40e63d8c --- /dev/null +++ b/resources/quality/flashforge/pc/flashforge_adventurer4_pc_0.6_draft.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Draft +version = 4 + +[metadata] +material = generic_pc +quality_type = draft +setting_version = 22 +type = quality +variant = 0.6mm Nozzle +weight = -3 + +[values] +retraction_amount = 6 +retraction_speed = 30 +speed_print = 60 +speed_travel = 100 + diff --git a/resources/quality/flashforge/pc/flashforge_adventurer4_pc_0.6_fast.inst.cfg b/resources/quality/flashforge/pc/flashforge_adventurer4_pc_0.6_fast.inst.cfg new file mode 100644 index 0000000000..e66be5bc7e --- /dev/null +++ b/resources/quality/flashforge/pc/flashforge_adventurer4_pc_0.6_fast.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Fast +version = 4 + +[metadata] +material = generic_pc +quality_type = fast +setting_version = 22 +type = quality +variant = 0.6mm Nozzle +weight = -2 + +[values] +retraction_amount = 6 +retraction_speed = 30 +speed_print = 50 +speed_travel = 100 + diff --git a/resources/quality/flashforge/pc/flashforge_adventurer4_pc_0.6_vfast.inst.cfg b/resources/quality/flashforge/pc/flashforge_adventurer4_pc_0.6_vfast.inst.cfg new file mode 100644 index 0000000000..2d2d8bdbdc --- /dev/null +++ b/resources/quality/flashforge/pc/flashforge_adventurer4_pc_0.6_vfast.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Very Fast +version = 4 + +[metadata] +material = generic_pc +quality_type = veryfast +setting_version = 22 +type = quality +variant = 0.6mm Nozzle +weight = -2 + +[values] +retraction_amount = 6 +retraction_speed = 30 +speed_print = 50 +speed_travel = 100 + diff --git a/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.3_fine.inst.cfg b/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.3_fine.inst.cfg new file mode 100644 index 0000000000..3405adaae5 --- /dev/null +++ b/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.3_fine.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Fine +version = 4 + +[metadata] +material = generic_petg +quality_type = fine +setting_version = 22 +type = quality +variant = 0.3mm Nozzle +weight = 1 + +[values] +speed_print = 50 +speed_travel = 80 + diff --git a/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.3_vfine.inst.cfg b/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.3_vfine.inst.cfg new file mode 100644 index 0000000000..20e2ba9ce5 --- /dev/null +++ b/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.3_vfine.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Very Fine +version = 4 + +[metadata] +material = generic_petg +quality_type = veryfine +setting_version = 22 +type = quality +variant = 0.3mm Nozzle +weight = 2 + +[values] +speed_print = 50 +speed_travel = 80 + diff --git a/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.4_draft.inst.cfg b/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.4_draft.inst.cfg new file mode 100644 index 0000000000..45aebad245 --- /dev/null +++ b/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.4_draft.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Draft +version = 4 + +[metadata] +material = generic_petg +quality_type = draft +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = -3 + +[values] +speed_print = 65 +speed_travel = 100 + diff --git a/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.4_fast.inst.cfg b/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.4_fast.inst.cfg new file mode 100644 index 0000000000..85ef922ea7 --- /dev/null +++ b/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.4_fast.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Fast +version = 4 + +[metadata] +material = generic_petg +quality_type = fast +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = -1 + +[values] +speed_print = 55 +speed_travel = 85 + diff --git a/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.4_fine.inst.cfg b/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.4_fine.inst.cfg new file mode 100644 index 0000000000..ec8d0e4d04 --- /dev/null +++ b/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.4_fine.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Fine +version = 4 + +[metadata] +material = generic_petg +quality_type = fine +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = 1 + +[values] +speed_print = 40 +speed_travel = 80 + diff --git a/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.4_normal.inst.cfg b/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.4_normal.inst.cfg new file mode 100644 index 0000000000..074d4864ce --- /dev/null +++ b/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.4_normal.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Standard +version = 4 + +[metadata] +material = generic_petg +quality_type = normal +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = 0 + +[values] +speed_print = 50 +speed_travel = 80 + diff --git a/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.4_vfast.inst.cfg b/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.4_vfast.inst.cfg new file mode 100644 index 0000000000..66d2184562 --- /dev/null +++ b/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.4_vfast.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Very Fast +version = 4 + +[metadata] +material = generic_petg +quality_type = veryfast +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = -2 + +[values] +speed_print = 60 +speed_travel = 90 + diff --git a/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.4_vfine.inst.cfg b/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.4_vfine.inst.cfg new file mode 100644 index 0000000000..4f7d0da1c2 --- /dev/null +++ b/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.4_vfine.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Very Fine +version = 4 + +[metadata] +material = generic_petg +quality_type = veryfine +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = 2 + +[values] +speed_print = 40 +speed_travel = 80 + diff --git a/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.6_draft.inst.cfg b/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.6_draft.inst.cfg new file mode 100644 index 0000000000..2f486d4d5d --- /dev/null +++ b/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.6_draft.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Draft +version = 4 + +[metadata] +material = generic_petg +quality_type = draft +setting_version = 22 +type = quality +variant = 0.6mm Nozzle +weight = -3 + +[values] +speed_print = 65 +speed_travel = 100 + diff --git a/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.6_fast.inst.cfg b/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.6_fast.inst.cfg new file mode 100644 index 0000000000..9ac7372049 --- /dev/null +++ b/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.6_fast.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Fast +version = 4 + +[metadata] +material = generic_petg +quality_type = fast +setting_version = 22 +type = quality +variant = 0.6mm Nozzle +weight = -1 + +[values] +speed_print = 50 +speed_travel = 100 + diff --git a/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.6_vfast.inst.cfg b/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.6_vfast.inst.cfg new file mode 100644 index 0000000000..744527c139 --- /dev/null +++ b/resources/quality/flashforge/petg/flashforge_adventurer3_petg_0.6_vfast.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Very Fast +version = 4 + +[metadata] +material = generic_petg +quality_type = veryfast +setting_version = 22 +type = quality +variant = 0.6mm Nozzle +weight = -2 + +[values] +speed_print = 50 +speed_travel = 100 + diff --git a/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.3_fine.inst.cfg b/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.3_fine.inst.cfg new file mode 100644 index 0000000000..aeb666c82d --- /dev/null +++ b/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.3_fine.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Fine +version = 4 + +[metadata] +material = generic_petg +quality_type = fine +setting_version = 22 +type = quality +variant = 0.3mm Nozzle +weight = 1 + +[values] +retraction_amount = 5 +retraction_speed = 25 +speed_print = 50 +speed_travel = 80 + diff --git a/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.3_vfine.inst.cfg b/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.3_vfine.inst.cfg new file mode 100644 index 0000000000..cb0b7fba37 --- /dev/null +++ b/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.3_vfine.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Very Fine +version = 4 + +[metadata] +material = generic_petg +quality_type = veryfine +setting_version = 22 +type = quality +variant = 0.3mm Nozzle +weight = 2 + +[values] +retraction_amount = 5 +retraction_speed = 25 +speed_print = 50 +speed_travel = 80 + diff --git a/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.4_draft.inst.cfg b/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.4_draft.inst.cfg new file mode 100644 index 0000000000..ec08773052 --- /dev/null +++ b/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.4_draft.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Draft +version = 4 + +[metadata] +material = generic_petg +quality_type = draft +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = -3 + +[values] +retraction_amount = 5 +retraction_speed = 25 +speed_print = 65 +speed_travel = 100 + diff --git a/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.4_fast.inst.cfg b/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.4_fast.inst.cfg new file mode 100644 index 0000000000..84be0afa3b --- /dev/null +++ b/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.4_fast.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Fast +version = 4 + +[metadata] +material = generic_petg +quality_type = fast +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = -1 + +[values] +retraction_amount = 5 +retraction_speed = 25 +speed_print = 55 +speed_travel = 85 + diff --git a/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.4_fine.inst.cfg b/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.4_fine.inst.cfg new file mode 100644 index 0000000000..75bde3cd43 --- /dev/null +++ b/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.4_fine.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Fine +version = 4 + +[metadata] +material = generic_petg +quality_type = fine +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = 1 + +[values] +retraction_amount = 5 +retraction_speed = 25 +speed_print = 40 +speed_travel = 80 + diff --git a/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.4_normal.inst.cfg b/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.4_normal.inst.cfg new file mode 100644 index 0000000000..5f37b1e812 --- /dev/null +++ b/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.4_normal.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Standard +version = 4 + +[metadata] +material = generic_petg +quality_type = normal +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = 0 + +[values] +retraction_amount = 5 +retraction_speed = 25 +speed_print = 50 +speed_travel = 80 + diff --git a/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.4_vfast.inst.cfg b/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.4_vfast.inst.cfg new file mode 100644 index 0000000000..844195d2df --- /dev/null +++ b/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.4_vfast.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Very Fast +version = 4 + +[metadata] +material = generic_petg +quality_type = veryfast +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = -2 + +[values] +retraction_amount = 5 +retraction_speed = 25 +speed_print = 60 +speed_travel = 90 + diff --git a/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.4_vfine.inst.cfg b/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.4_vfine.inst.cfg new file mode 100644 index 0000000000..2eb93f1216 --- /dev/null +++ b/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.4_vfine.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Very Fine +version = 4 + +[metadata] +material = generic_petg +quality_type = veryfine +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = 2 + +[values] +retraction_amount = 5 +retraction_speed = 25 +speed_print = 40 +speed_travel = 80 + diff --git a/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.6_draft.inst.cfg b/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.6_draft.inst.cfg new file mode 100644 index 0000000000..ff190b0e23 --- /dev/null +++ b/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.6_draft.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Draft +version = 4 + +[metadata] +material = generic_petg +quality_type = draft +setting_version = 22 +type = quality +variant = 0.6mm Nozzle +weight = -3 + +[values] +retraction_amount = 5 +retraction_speed = 20 +speed_print = 65 +speed_travel = 100 + diff --git a/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.6_fast.inst.cfg b/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.6_fast.inst.cfg new file mode 100644 index 0000000000..91d617d234 --- /dev/null +++ b/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.6_fast.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Fast +version = 4 + +[metadata] +material = generic_petg +quality_type = fast +setting_version = 22 +type = quality +variant = 0.6mm Nozzle +weight = -1 + +[values] +retraction_amount = 5 +retraction_speed = 20 +speed_print = 50 +speed_travel = 100 + diff --git a/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.6_vfast.inst.cfg b/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.6_vfast.inst.cfg new file mode 100644 index 0000000000..22647877b8 --- /dev/null +++ b/resources/quality/flashforge/petg/flashforge_adventurer4_petg_0.6_vfast.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Very Fast +version = 4 + +[metadata] +material = generic_petg +quality_type = veryfast +setting_version = 22 +type = quality +variant = 0.6mm Nozzle +weight = -2 + +[values] +retraction_amount = 5 +retraction_speed = 20 +speed_print = 50 +speed_travel = 100 + diff --git a/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.3_fine.inst.cfg b/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.3_fine.inst.cfg new file mode 100644 index 0000000000..6dbc8c55db --- /dev/null +++ b/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.3_fine.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Fine +version = 4 + +[metadata] +material = generic_pla +quality_type = fine +setting_version = 22 +type = quality +variant = 0.3mm Nozzle +weight = 1 + +[values] +speed_print = 50 +speed_travel = 100 + diff --git a/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.3_vfine.inst.cfg b/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.3_vfine.inst.cfg new file mode 100644 index 0000000000..690c3e6b84 --- /dev/null +++ b/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.3_vfine.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Very Fine +version = 4 + +[metadata] +material = generic_pla +quality_type = veryfine +setting_version = 22 +type = quality +variant = 0.3mm Nozzle +weight = 2 + +[values] +speed_print = 45 +speed_travel = 100 + diff --git a/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.4_draft.inst.cfg b/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.4_draft.inst.cfg new file mode 100644 index 0000000000..6a4342197e --- /dev/null +++ b/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.4_draft.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Draft +version = 4 + +[metadata] +material = generic_pla +quality_type = draft +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = -3 + +[values] +speed_print = 75 +speed_travel = 100 + diff --git a/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.4_fast.inst.cfg b/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.4_fast.inst.cfg new file mode 100644 index 0000000000..180e648dfd --- /dev/null +++ b/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.4_fast.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Fast +version = 4 + +[metadata] +material = generic_pla +quality_type = fast +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = -1 + +[values] +speed_print = 65 +speed_travel = 100 + diff --git a/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.4_fine.inst.cfg b/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.4_fine.inst.cfg new file mode 100644 index 0000000000..7e6dee0b1e --- /dev/null +++ b/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.4_fine.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Fine +version = 4 + +[metadata] +material = generic_pla +quality_type = fine +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = 1 + +[values] +speed_print = 50 +speed_travel = 80 + diff --git a/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.4_normal.inst.cfg b/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.4_normal.inst.cfg new file mode 100644 index 0000000000..06e24e078d --- /dev/null +++ b/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.4_normal.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Standard +version = 4 + +[metadata] +material = generic_pla +quality_type = normal +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = 0 + +[values] +speed_print = 60 +speed_travel = 80 + diff --git a/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.4_vfast.inst.cfg b/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.4_vfast.inst.cfg new file mode 100644 index 0000000000..d82fb0cdad --- /dev/null +++ b/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.4_vfast.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Very Fast +version = 4 + +[metadata] +material = generic_pla +quality_type = veryfast +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = -2 + +[values] +speed_print = 70 +speed_travel = 100 + diff --git a/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.4_vfine.inst.cfg b/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.4_vfine.inst.cfg new file mode 100644 index 0000000000..dfd442d63c --- /dev/null +++ b/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.4_vfine.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Very Fine +version = 4 + +[metadata] +material = generic_pla +quality_type = veryfine +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = 2 + +[values] +speed_print = 40 +speed_travel = 70 + diff --git a/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.6_draft.inst.cfg b/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.6_draft.inst.cfg new file mode 100644 index 0000000000..4508444055 --- /dev/null +++ b/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.6_draft.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Draft +version = 4 + +[metadata] +material = generic_pla +quality_type = draft +setting_version = 22 +type = quality +variant = 0.6mm Nozzle +weight = -2 + +[values] +speed_print = 60 +speed_travel = 100 + diff --git a/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.6_fast.inst.cfg b/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.6_fast.inst.cfg new file mode 100644 index 0000000000..782b74a7dc --- /dev/null +++ b/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.6_fast.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Fast +version = 4 + +[metadata] +material = generic_pla +quality_type = fast +setting_version = 22 +type = quality +variant = 0.6mm Nozzle +weight = -1 + +[values] +speed_print = 50 +speed_travel = 100 + diff --git a/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.6_vfast.inst.cfg b/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.6_vfast.inst.cfg new file mode 100644 index 0000000000..22b74b6a25 --- /dev/null +++ b/resources/quality/flashforge/pla/flashforge_adventurer3_pla_0.6_vfast.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = flashforge_adventurer3 +name = Very Fast +version = 4 + +[metadata] +material = generic_pla +quality_type = veryfast +setting_version = 22 +type = quality +variant = 0.6mm Nozzle +weight = -2 + +[values] +speed_print = 55 +speed_travel = 100 + diff --git a/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.3_fine.inst.cfg b/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.3_fine.inst.cfg new file mode 100644 index 0000000000..747f8a0076 --- /dev/null +++ b/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.3_fine.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Fine +version = 4 + +[metadata] +material = generic_pla +quality_type = fine +setting_version = 22 +type = quality +variant = 0.3mm Nozzle +weight = 1 + +[values] +retraction_amount = 5 +retraction_speed = 30 +speed_print = 50 +speed_travel = 100 + diff --git a/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.3_vfine.inst.cfg b/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.3_vfine.inst.cfg new file mode 100644 index 0000000000..e7a6ef72cd --- /dev/null +++ b/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.3_vfine.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Very Fine +version = 4 + +[metadata] +material = generic_pla +quality_type = veryfine +setting_version = 22 +type = quality +variant = 0.3mm Nozzle +weight = 2 + +[values] +retraction_amount = 5 +retraction_speed = 30 +speed_print = 45 +speed_travel = 100 + diff --git a/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.4_draft.inst.cfg b/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.4_draft.inst.cfg new file mode 100644 index 0000000000..18bd03e2fa --- /dev/null +++ b/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.4_draft.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Draft +version = 4 + +[metadata] +material = generic_pla +quality_type = draft +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = -2 + +[values] +retraction_amount = 5.5 +retraction_speed = 25 +speed_print = 65 +speed_travel = 100 + diff --git a/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.4_fast.inst.cfg b/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.4_fast.inst.cfg new file mode 100644 index 0000000000..a40571318d --- /dev/null +++ b/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.4_fast.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Fine +version = 4 + +[metadata] +material = generic_pla +quality_type = fine +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = -1 + +[values] +retraction_amount = 5.5 +retraction_speed = 25 +speed_print = 55 +speed_travel = 100 + diff --git a/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.4_fine.inst.cfg b/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.4_fine.inst.cfg new file mode 100644 index 0000000000..b81f729ed7 --- /dev/null +++ b/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.4_fine.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Fine +version = 4 + +[metadata] +material = generic_pla +quality_type = fine +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = 1 + +[values] +retraction_amount = 5.5 +retraction_speed = 25 +speed_print = 45 +speed_travel = 90 + diff --git a/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.4_normal.inst.cfg b/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.4_normal.inst.cfg new file mode 100644 index 0000000000..6e3486a031 --- /dev/null +++ b/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.4_normal.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Standard +version = 4 + +[metadata] +material = generic_pla +quality_type = normal +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = 0 + +[values] +retraction_amount = 5.5 +retraction_speed = 25 +speed_print = 50 +speed_travel = 100 + diff --git a/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.4_vfast.inst.cfg b/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.4_vfast.inst.cfg new file mode 100644 index 0000000000..7635f68944 --- /dev/null +++ b/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.4_vfast.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Very Fast +version = 4 + +[metadata] +material = generic_pla +quality_type = veryfast +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = -2 + +[values] +retraction_amount = 5.5 +retraction_speed = 25 +speed_print = 60 +speed_travel = 100 + diff --git a/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.4_vfine.inst.cfg b/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.4_vfine.inst.cfg new file mode 100644 index 0000000000..718dd4d4c7 --- /dev/null +++ b/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.4_vfine.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Very Fine +version = 4 + +[metadata] +material = generic_pla +quality_type = veryfine +setting_version = 22 +type = quality +variant = 0.4mm Nozzle +weight = 2 + +[values] +retraction_amount = 5.5 +retraction_speed = 25 +speed_print = 40 +speed_travel = 80 + diff --git a/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.6_draft.inst.cfg b/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.6_draft.inst.cfg new file mode 100644 index 0000000000..50e5223045 --- /dev/null +++ b/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.6_draft.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Draft +version = 4 + +[metadata] +material = generic_pla +quality_type = draft +setting_version = 22 +type = quality +variant = 0.6mm Nozzle +weight = -2 + +[values] +retraction_amount = 6 +retraction_speed = 30 +speed_print = 65 +speed_travel = 100 + diff --git a/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.6_fast.inst.cfg b/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.6_fast.inst.cfg new file mode 100644 index 0000000000..f81ed66155 --- /dev/null +++ b/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.6_fast.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Fast +version = 4 + +[metadata] +material = generic_pla +quality_type = fast +setting_version = 22 +type = quality +variant = 0.6mm Nozzle +weight = -1 + +[values] +retraction_amount = 6 +retraction_speed = 30 +speed_print = 60 +speed_travel = 100 + diff --git a/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.6_vfast.inst.cfg b/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.6_vfast.inst.cfg new file mode 100644 index 0000000000..aa065e31f0 --- /dev/null +++ b/resources/quality/flashforge/pla/flashforge_adventurer4_pla_0.6_vfast.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = flashforge_adventurer4 +name = Very Fast +version = 4 + +[metadata] +material = generic_pla +quality_type = veryfast +setting_version = 22 +type = quality +variant = 0.6mm Nozzle +weight = -2 + +[values] +retraction_amount = 6 +retraction_speed = 30 +speed_print = 60 +speed_travel = 100 + diff --git a/resources/quality/flsun_sr/flsun_sr_fine.inst.cfg b/resources/quality/flsun_sr/flsun_sr_fine.inst.cfg index 7ba7f82e9a..c54130d953 100644 --- a/resources/quality/flsun_sr/flsun_sr_fine.inst.cfg +++ b/resources/quality/flsun_sr/flsun_sr_fine.inst.cfg @@ -65,7 +65,6 @@ support_interface_density = 60 support_interface_enable = True support_interface_height = 0.96 support_interface_pattern = grid -support_interface_skip_height = 0.12 support_roof_density = 60 support_type = everywhere support_wall_count = 1 diff --git a/resources/quality/flsun_sr/flsun_sr_normal.inst.cfg b/resources/quality/flsun_sr/flsun_sr_normal.inst.cfg index 5091ec6d97..373e5dbf6f 100644 --- a/resources/quality/flsun_sr/flsun_sr_normal.inst.cfg +++ b/resources/quality/flsun_sr/flsun_sr_normal.inst.cfg @@ -65,7 +65,6 @@ support_interface_density = 60 support_interface_enable = True support_interface_height = 0.6 support_interface_pattern = grid -support_interface_skip_height = 0.2 support_roof_density = 60 support_type = everywhere support_wall_count = 1 diff --git a/resources/quality/flsun_v400/flsun_v400_normal.inst.cfg b/resources/quality/flsun_v400/flsun_v400_normal.inst.cfg index 321f44a8bd..9c99046939 100644 --- a/resources/quality/flsun_v400/flsun_v400_normal.inst.cfg +++ b/resources/quality/flsun_v400/flsun_v400_normal.inst.cfg @@ -100,7 +100,6 @@ support_interface_density = 70 support_interface_enable = True support_interface_height = 0.6 support_interface_pattern = lines -support_interface_skip_height = 0.2 support_pattern = zigzag support_roof_density = 70 support_type = everywhere diff --git a/resources/quality/imade3d_jellybox/imade3d_jellybox_coarse.inst.cfg b/resources/quality/imade3d_jellybox/imade3d_jellybox_coarse.inst.cfg index 4363815718..b84019e791 100644 --- a/resources/quality/imade3d_jellybox/imade3d_jellybox_coarse.inst.cfg +++ b/resources/quality/imade3d_jellybox/imade3d_jellybox_coarse.inst.cfg @@ -65,7 +65,6 @@ support_interface_density = 70 support_interface_enable = True support_interface_height = 2 support_interface_pattern = concentric -support_interface_skip_height = 0.1 support_type = everywhere support_use_towers = False support_xy_distance = 0.8 diff --git a/resources/quality/imade3d_jellybox/imade3d_jellybox_fine.inst.cfg b/resources/quality/imade3d_jellybox/imade3d_jellybox_fine.inst.cfg index ad1786e646..8aa8ee6203 100644 --- a/resources/quality/imade3d_jellybox/imade3d_jellybox_fine.inst.cfg +++ b/resources/quality/imade3d_jellybox/imade3d_jellybox_fine.inst.cfg @@ -65,7 +65,6 @@ support_interface_density = 70 support_interface_enable = True support_interface_height = 2 support_interface_pattern = concentric -support_interface_skip_height = 0.1 support_type = everywhere support_use_towers = False support_xy_distance = 0.8 diff --git a/resources/quality/imade3d_jellybox/imade3d_jellybox_normal.inst.cfg b/resources/quality/imade3d_jellybox/imade3d_jellybox_normal.inst.cfg index 9d20162475..5e6ed2682c 100644 --- a/resources/quality/imade3d_jellybox/imade3d_jellybox_normal.inst.cfg +++ b/resources/quality/imade3d_jellybox/imade3d_jellybox_normal.inst.cfg @@ -65,7 +65,6 @@ support_interface_density = 70 support_interface_enable = True support_interface_height = 2 support_interface_pattern = concentric -support_interface_skip_height = 0.1 support_type = everywhere support_use_towers = False support_xy_distance = 0.8 diff --git a/resources/quality/imade3d_jellybox/imade3d_jellybox_ultrafine.inst.cfg b/resources/quality/imade3d_jellybox/imade3d_jellybox_ultrafine.inst.cfg index 9cf8367db5..db92713bd0 100644 --- a/resources/quality/imade3d_jellybox/imade3d_jellybox_ultrafine.inst.cfg +++ b/resources/quality/imade3d_jellybox/imade3d_jellybox_ultrafine.inst.cfg @@ -65,7 +65,6 @@ support_interface_density = 70 support_interface_enable = True support_interface_height = 2 support_interface_pattern = concentric -support_interface_skip_height = 0.1 support_type = everywhere support_use_towers = False support_xy_distance = 0.8 diff --git a/resources/quality/imade3d_jellybox_2/jb2_global_coarse.inst.cfg b/resources/quality/imade3d_jellybox_2/jb2_global_coarse.inst.cfg index a445dc28be..9fde6a87ea 100644 --- a/resources/quality/imade3d_jellybox_2/jb2_global_coarse.inst.cfg +++ b/resources/quality/imade3d_jellybox_2/jb2_global_coarse.inst.cfg @@ -65,7 +65,6 @@ support_interface_density = 70 support_interface_enable = True support_interface_height = 2 support_interface_pattern = concentric -support_interface_skip_height = 0.1 support_type = everywhere support_use_towers = False support_xy_distance = 0.8 diff --git a/resources/quality/imade3d_jellybox_2/jb2_global_fine.inst.cfg b/resources/quality/imade3d_jellybox_2/jb2_global_fine.inst.cfg index df0a0bf3f0..419fa6b300 100644 --- a/resources/quality/imade3d_jellybox_2/jb2_global_fine.inst.cfg +++ b/resources/quality/imade3d_jellybox_2/jb2_global_fine.inst.cfg @@ -65,7 +65,6 @@ support_interface_density = 70 support_interface_enable = True support_interface_height = 2 support_interface_pattern = concentric -support_interface_skip_height = 0.1 support_type = everywhere support_use_towers = False support_xy_distance = 0.8 diff --git a/resources/quality/imade3d_jellybox_2/jb2_global_normal.inst.cfg b/resources/quality/imade3d_jellybox_2/jb2_global_normal.inst.cfg index be43962f72..c352981f2d 100644 --- a/resources/quality/imade3d_jellybox_2/jb2_global_normal.inst.cfg +++ b/resources/quality/imade3d_jellybox_2/jb2_global_normal.inst.cfg @@ -65,7 +65,6 @@ support_interface_density = 70 support_interface_enable = True support_interface_height = 2 support_interface_pattern = concentric -support_interface_skip_height = 0.1 support_type = everywhere support_use_towers = False support_xy_distance = 0.8 diff --git a/resources/quality/imade3d_jellybox_2/jb2_global_ultrafine.inst.cfg b/resources/quality/imade3d_jellybox_2/jb2_global_ultrafine.inst.cfg index b3b35aca97..a1496e36cc 100644 --- a/resources/quality/imade3d_jellybox_2/jb2_global_ultrafine.inst.cfg +++ b/resources/quality/imade3d_jellybox_2/jb2_global_ultrafine.inst.cfg @@ -65,7 +65,6 @@ support_interface_density = 70 support_interface_enable = True support_interface_height = 2 support_interface_pattern = concentric -support_interface_skip_height = 0.1 support_type = everywhere support_use_towers = False support_xy_distance = 0.8 diff --git a/resources/quality/ratrig_base/nylon/ratrig_base_0.2_Nylon_super.inst.cfg b/resources/quality/ratrig_base/nylon/ratrig_base_0.2_Nylon_super.inst.cfg new file mode 100644 index 0000000000..adfe0e26a5 --- /dev/null +++ b/resources/quality/ratrig_base/nylon/ratrig_base_0.2_Nylon_super.inst.cfg @@ -0,0 +1,16 @@ +[general] +definition = ratrig_base +name = Super Quality +version = 4 + +[metadata] +material = generic_nylon +quality_type = super +setting_version = 22 +type = quality +variant = 0.2mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*8 + diff --git a/resources/quality/ratrig_base/nylon/ratrig_base_0.2_Nylon_ultra.inst.cfg b/resources/quality/ratrig_base/nylon/ratrig_base_0.2_Nylon_ultra.inst.cfg new file mode 100644 index 0000000000..d0ed1bfc29 --- /dev/null +++ b/resources/quality/ratrig_base/nylon/ratrig_base_0.2_Nylon_ultra.inst.cfg @@ -0,0 +1,16 @@ +[general] +definition = ratrig_base +name = Ultra Quality +version = 4 + +[metadata] +material = generic_nylon +quality_type = ultra +setting_version = 22 +type = quality +variant = 0.2mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*8 + diff --git a/resources/quality/ratrig_base/nylon/ratrig_base_0.3_Nylon_adaptive.inst.cfg b/resources/quality/ratrig_base/nylon/ratrig_base_0.3_Nylon_adaptive.inst.cfg new file mode 100644 index 0000000000..98bf867ce5 --- /dev/null +++ b/resources/quality/ratrig_base/nylon/ratrig_base_0.3_Nylon_adaptive.inst.cfg @@ -0,0 +1,16 @@ +[general] +definition = ratrig_base +name = Dynamic Quality +version = 4 + +[metadata] +material = generic_nylon +quality_type = adaptive +setting_version = 22 +type = quality +variant = 0.3mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 + diff --git a/resources/quality/ratrig_base/nylon/ratrig_base_0.3_Nylon_low.inst.cfg b/resources/quality/ratrig_base/nylon/ratrig_base_0.3_Nylon_low.inst.cfg new file mode 100644 index 0000000000..8af3672269 --- /dev/null +++ b/resources/quality/ratrig_base/nylon/ratrig_base_0.3_Nylon_low.inst.cfg @@ -0,0 +1,16 @@ +[general] +definition = ratrig_base +name = Low Quality +version = 4 + +[metadata] +material = generic_nylon +quality_type = low +setting_version = 22 +type = quality +variant = 0.3mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 + diff --git a/resources/quality/ratrig_base/nylon/ratrig_base_0.3_Nylon_standard.inst.cfg b/resources/quality/ratrig_base/nylon/ratrig_base_0.3_Nylon_standard.inst.cfg new file mode 100644 index 0000000000..5c70c697a6 --- /dev/null +++ b/resources/quality/ratrig_base/nylon/ratrig_base_0.3_Nylon_standard.inst.cfg @@ -0,0 +1,16 @@ +[general] +definition = ratrig_base +name = Standard Quality +version = 4 + +[metadata] +material = generic_nylon +quality_type = standard +setting_version = 22 +type = quality +variant = 0.3mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 + diff --git a/resources/quality/ratrig_base/nylon/ratrig_base_0.3_Nylon_super.inst.cfg b/resources/quality/ratrig_base/nylon/ratrig_base_0.3_Nylon_super.inst.cfg new file mode 100644 index 0000000000..af8ea00735 --- /dev/null +++ b/resources/quality/ratrig_base/nylon/ratrig_base_0.3_Nylon_super.inst.cfg @@ -0,0 +1,16 @@ +[general] +definition = ratrig_base +name = Super Quality +version = 4 + +[metadata] +material = generic_nylon +quality_type = super +setting_version = 22 +type = quality +variant = 0.3mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 + diff --git a/resources/quality/ratrig_base/nylon/ratrig_base_0.4_Nylon_adaptive.inst.cfg b/resources/quality/ratrig_base/nylon/ratrig_base_0.4_Nylon_adaptive.inst.cfg new file mode 100644 index 0000000000..3b4589bd78 --- /dev/null +++ b/resources/quality/ratrig_base/nylon/ratrig_base_0.4_Nylon_adaptive.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = ratrig_base +name = Dynamic Quality +version = 4 + +[metadata] +material = generic_nylon +quality_type = adaptive +setting_version = 22 +type = quality +variant = 0.4mm Nozzle + +[values] +cool_fan_speed = 40 +material_flow = 94.0 +retraction_amount = 1.6 +retraction_speed = 20 +wall_thickness = =line_width*4 + diff --git a/resources/quality/ratrig_base/nylon/ratrig_base_0.4_Nylon_low.inst.cfg b/resources/quality/ratrig_base/nylon/ratrig_base_0.4_Nylon_low.inst.cfg new file mode 100644 index 0000000000..addc6f2c1c --- /dev/null +++ b/resources/quality/ratrig_base/nylon/ratrig_base_0.4_Nylon_low.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = ratrig_base +name = Low Quality +version = 4 + +[metadata] +material = generic_nylon +quality_type = low +setting_version = 22 +type = quality +variant = 0.4mm Nozzle + +[values] +cool_fan_speed = 40 +material_flow = 94.0 +retraction_amount = 1.6 +retraction_speed = 20 +wall_thickness = =line_width*4 + diff --git a/resources/quality/ratrig_base/nylon/ratrig_base_0.4_Nylon_standard.inst.cfg b/resources/quality/ratrig_base/nylon/ratrig_base_0.4_Nylon_standard.inst.cfg new file mode 100644 index 0000000000..e74e3c9015 --- /dev/null +++ b/resources/quality/ratrig_base/nylon/ratrig_base_0.4_Nylon_standard.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = ratrig_base +name = Standard Quality +version = 4 + +[metadata] +material = generic_nylon +quality_type = standard +setting_version = 22 +type = quality +variant = 0.4mm Nozzle + +[values] +cool_fan_speed = 40 +material_flow = 94.0 +retraction_amount = 1.6 +retraction_speed = 20 +wall_thickness = =line_width*4 + diff --git a/resources/quality/ratrig_base/nylon/ratrig_base_0.4_Nylon_super.inst.cfg b/resources/quality/ratrig_base/nylon/ratrig_base_0.4_Nylon_super.inst.cfg new file mode 100644 index 0000000000..957d89d2bf --- /dev/null +++ b/resources/quality/ratrig_base/nylon/ratrig_base_0.4_Nylon_super.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = ratrig_base +name = Super Quality +version = 4 + +[metadata] +material = generic_nylon +quality_type = super +setting_version = 22 +type = quality +variant = 0.4mm Nozzle + +[values] +cool_fan_speed = 40 +material_flow = 94.0 +retraction_amount = 1.6 +retraction_speed = 20 +wall_thickness = =line_width*4 + diff --git a/resources/quality/ratrig_base/nylon/ratrig_base_0.5_Nylon_adaptive.inst.cfg b/resources/quality/ratrig_base/nylon/ratrig_base_0.5_Nylon_adaptive.inst.cfg new file mode 100644 index 0000000000..46766b94c2 --- /dev/null +++ b/resources/quality/ratrig_base/nylon/ratrig_base_0.5_Nylon_adaptive.inst.cfg @@ -0,0 +1,16 @@ +[general] +definition = ratrig_base +name = Dynamic Quality +version = 4 + +[metadata] +material = generic_nylon +quality_type = adaptive +setting_version = 22 +type = quality +variant = 0.5mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 + diff --git a/resources/quality/ratrig_base/nylon/ratrig_base_0.5_Nylon_low.inst.cfg b/resources/quality/ratrig_base/nylon/ratrig_base_0.5_Nylon_low.inst.cfg new file mode 100644 index 0000000000..22e93d8876 --- /dev/null +++ b/resources/quality/ratrig_base/nylon/ratrig_base_0.5_Nylon_low.inst.cfg @@ -0,0 +1,16 @@ +[general] +definition = ratrig_base +name = Low Quality +version = 4 + +[metadata] +material = generic_nylon +quality_type = low +setting_version = 22 +type = quality +variant = 0.5mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 + diff --git a/resources/quality/ratrig_base/nylon/ratrig_base_0.5_Nylon_standard.inst.cfg b/resources/quality/ratrig_base/nylon/ratrig_base_0.5_Nylon_standard.inst.cfg new file mode 100644 index 0000000000..0d9b6ae5c1 --- /dev/null +++ b/resources/quality/ratrig_base/nylon/ratrig_base_0.5_Nylon_standard.inst.cfg @@ -0,0 +1,16 @@ +[general] +definition = ratrig_base +name = Standard Quality +version = 4 + +[metadata] +material = generic_nylon +quality_type = standard +setting_version = 22 +type = quality +variant = 0.5mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 + diff --git a/resources/quality/ratrig_base/nylon/ratrig_base_0.5_Nylon_super.inst.cfg b/resources/quality/ratrig_base/nylon/ratrig_base_0.5_Nylon_super.inst.cfg new file mode 100644 index 0000000000..372d066d4c --- /dev/null +++ b/resources/quality/ratrig_base/nylon/ratrig_base_0.5_Nylon_super.inst.cfg @@ -0,0 +1,16 @@ +[general] +definition = ratrig_base +name = Super Quality +version = 4 + +[metadata] +material = generic_nylon +quality_type = super +setting_version = 22 +type = quality +variant = 0.5mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 + diff --git a/resources/quality/ratrig_base/nylon/ratrig_base_0.6_Nylon_standard.inst.cfg b/resources/quality/ratrig_base/nylon/ratrig_base_0.6_Nylon_standard.inst.cfg new file mode 100644 index 0000000000..a57d8e22ca --- /dev/null +++ b/resources/quality/ratrig_base/nylon/ratrig_base_0.6_Nylon_standard.inst.cfg @@ -0,0 +1,16 @@ +[general] +definition = ratrig_base +name = Standard Quality +version = 4 + +[metadata] +material = generic_nylon +quality_type = standard +setting_version = 22 +type = quality +variant = 0.6mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*3 + diff --git a/resources/quality/ratrig_base/nylon/ratrig_base_0.8_Nylon_draft.inst.cfg b/resources/quality/ratrig_base/nylon/ratrig_base_0.8_Nylon_draft.inst.cfg new file mode 100644 index 0000000000..1fc2e48eed --- /dev/null +++ b/resources/quality/ratrig_base/nylon/ratrig_base_0.8_Nylon_draft.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = ratrig_base +name = Draft Quality +version = 4 + +[metadata] +material = generic_nylon +quality_type = draft +setting_version = 22 +type = quality +variant = 0.8mm Nozzle + +[values] +cool_fan_speed = 40 +speed_layer_0 = 30 +wall_thickness = =line_width*2 + diff --git a/resources/quality/ratrig_base/nylon/ratrig_base_1.0_Nylon_draft.inst.cfg b/resources/quality/ratrig_base/nylon/ratrig_base_1.0_Nylon_draft.inst.cfg new file mode 100644 index 0000000000..bcc88a598c --- /dev/null +++ b/resources/quality/ratrig_base/nylon/ratrig_base_1.0_Nylon_draft.inst.cfg @@ -0,0 +1,16 @@ +[general] +definition = ratrig_base +name = Draft Quality +version = 4 + +[metadata] +material = generic_nylon +quality_type = draft +setting_version = 22 +type = quality +variant = 1.0mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*3 + diff --git a/resources/quality/ratrig_base/petg/ratrig_base_0.2_PETG_super.inst.cfg b/resources/quality/ratrig_base/petg/ratrig_base_0.2_PETG_super.inst.cfg new file mode 100644 index 0000000000..24419b5302 --- /dev/null +++ b/resources/quality/ratrig_base/petg/ratrig_base_0.2_PETG_super.inst.cfg @@ -0,0 +1,16 @@ +[general] +definition = ratrig_base +name = Super Quality +version = 4 + +[metadata] +material = generic_petg +quality_type = super +setting_version = 22 +type = quality +variant = 0.2mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*8 + diff --git a/resources/quality/ratrig_base/petg/ratrig_base_0.2_PETG_ultra.inst.cfg b/resources/quality/ratrig_base/petg/ratrig_base_0.2_PETG_ultra.inst.cfg new file mode 100644 index 0000000000..a55a6ad76a --- /dev/null +++ b/resources/quality/ratrig_base/petg/ratrig_base_0.2_PETG_ultra.inst.cfg @@ -0,0 +1,16 @@ +[general] +definition = ratrig_base +name = Ultra Quality +version = 4 + +[metadata] +material = generic_petg +quality_type = ultra +setting_version = 22 +type = quality +variant = 0.2mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*8 + diff --git a/resources/quality/ratrig_base/petg/ratrig_base_0.3_PETG_adaptive.inst.cfg b/resources/quality/ratrig_base/petg/ratrig_base_0.3_PETG_adaptive.inst.cfg new file mode 100644 index 0000000000..890652591b --- /dev/null +++ b/resources/quality/ratrig_base/petg/ratrig_base_0.3_PETG_adaptive.inst.cfg @@ -0,0 +1,16 @@ +[general] +definition = ratrig_base +name = Dynamic Quality +version = 4 + +[metadata] +material = generic_petg +quality_type = adaptive +setting_version = 22 +type = quality +variant = 0.3mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 + diff --git a/resources/quality/ratrig_base/petg/ratrig_base_0.3_PETG_low.inst.cfg b/resources/quality/ratrig_base/petg/ratrig_base_0.3_PETG_low.inst.cfg new file mode 100644 index 0000000000..aa3787c278 --- /dev/null +++ b/resources/quality/ratrig_base/petg/ratrig_base_0.3_PETG_low.inst.cfg @@ -0,0 +1,16 @@ +[general] +definition = ratrig_base +name = Low Quality +version = 4 + +[metadata] +material = generic_petg +quality_type = low +setting_version = 22 +type = quality +variant = 0.3mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 + diff --git a/resources/quality/ratrig_base/petg/ratrig_base_0.3_PETG_standard.inst.cfg b/resources/quality/ratrig_base/petg/ratrig_base_0.3_PETG_standard.inst.cfg new file mode 100644 index 0000000000..a2afefe69c --- /dev/null +++ b/resources/quality/ratrig_base/petg/ratrig_base_0.3_PETG_standard.inst.cfg @@ -0,0 +1,16 @@ +[general] +definition = ratrig_base +name = Standard Quality +version = 4 + +[metadata] +material = generic_petg +quality_type = standard +setting_version = 22 +type = quality +variant = 0.3mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 + diff --git a/resources/quality/ratrig_base/petg/ratrig_base_0.3_PETG_super.inst.cfg b/resources/quality/ratrig_base/petg/ratrig_base_0.3_PETG_super.inst.cfg new file mode 100644 index 0000000000..a90915b50c --- /dev/null +++ b/resources/quality/ratrig_base/petg/ratrig_base_0.3_PETG_super.inst.cfg @@ -0,0 +1,16 @@ +[general] +definition = ratrig_base +name = Super Quality +version = 4 + +[metadata] +material = generic_petg +quality_type = super +setting_version = 22 +type = quality +variant = 0.3mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 + diff --git a/resources/quality/ratrig_base/petg/ratrig_base_0.4_PETG_adaptive.inst.cfg b/resources/quality/ratrig_base/petg/ratrig_base_0.4_PETG_adaptive.inst.cfg new file mode 100644 index 0000000000..765547d692 --- /dev/null +++ b/resources/quality/ratrig_base/petg/ratrig_base_0.4_PETG_adaptive.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = ratrig_base +name = Dynamic Quality +version = 4 + +[metadata] +material = generic_petg +quality_type = adaptive +setting_version = 22 +type = quality +variant = 0.4mm Nozzle + +[values] +cool_fan_speed = 40 +material_flow = 94.0 +retraction_amount = 1.6 +retraction_speed = 20 +wall_thickness = =line_width*4 + diff --git a/resources/quality/ratrig_base/petg/ratrig_base_0.4_PETG_low.inst.cfg b/resources/quality/ratrig_base/petg/ratrig_base_0.4_PETG_low.inst.cfg new file mode 100644 index 0000000000..d5afe46994 --- /dev/null +++ b/resources/quality/ratrig_base/petg/ratrig_base_0.4_PETG_low.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = ratrig_base +name = Low Quality +version = 4 + +[metadata] +material = generic_petg +quality_type = low +setting_version = 22 +type = quality +variant = 0.4mm Nozzle + +[values] +cool_fan_speed = 40 +material_flow = 94.0 +retraction_amount = 1.6 +retraction_speed = 20 +wall_thickness = =line_width*4 + diff --git a/resources/quality/ratrig_base/petg/ratrig_base_0.4_PETG_standard.inst.cfg b/resources/quality/ratrig_base/petg/ratrig_base_0.4_PETG_standard.inst.cfg new file mode 100644 index 0000000000..ea0ff5ab6b --- /dev/null +++ b/resources/quality/ratrig_base/petg/ratrig_base_0.4_PETG_standard.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = ratrig_base +name = Standard Quality +version = 4 + +[metadata] +material = generic_petg +quality_type = standard +setting_version = 22 +type = quality +variant = 0.4mm Nozzle + +[values] +cool_fan_speed = 40 +material_flow = 94.0 +retraction_amount = 1.6 +retraction_speed = 20 +wall_thickness = =line_width*4 + diff --git a/resources/quality/ratrig_base/petg/ratrig_base_0.4_PETG_super.inst.cfg b/resources/quality/ratrig_base/petg/ratrig_base_0.4_PETG_super.inst.cfg new file mode 100644 index 0000000000..49245f85b2 --- /dev/null +++ b/resources/quality/ratrig_base/petg/ratrig_base_0.4_PETG_super.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = ratrig_base +name = Super Quality +version = 4 + +[metadata] +material = generic_petg +quality_type = super +setting_version = 22 +type = quality +variant = 0.4mm Nozzle + +[values] +cool_fan_speed = 40 +material_flow = 94.0 +retraction_amount = 1.6 +retraction_speed = 20 +wall_thickness = =line_width*4 + diff --git a/resources/quality/ratrig_base/petg/ratrig_base_0.5_PETG_adaptive.inst.cfg b/resources/quality/ratrig_base/petg/ratrig_base_0.5_PETG_adaptive.inst.cfg new file mode 100644 index 0000000000..7147deb58f --- /dev/null +++ b/resources/quality/ratrig_base/petg/ratrig_base_0.5_PETG_adaptive.inst.cfg @@ -0,0 +1,16 @@ +[general] +definition = ratrig_base +name = Dynamic Quality +version = 4 + +[metadata] +material = generic_petg +quality_type = adaptive +setting_version = 22 +type = quality +variant = 0.5mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 + diff --git a/resources/quality/ratrig_base/petg/ratrig_base_0.5_PETG_low.inst.cfg b/resources/quality/ratrig_base/petg/ratrig_base_0.5_PETG_low.inst.cfg new file mode 100644 index 0000000000..e930a9415e --- /dev/null +++ b/resources/quality/ratrig_base/petg/ratrig_base_0.5_PETG_low.inst.cfg @@ -0,0 +1,16 @@ +[general] +definition = ratrig_base +name = Low Quality +version = 4 + +[metadata] +material = generic_petg +quality_type = low +setting_version = 22 +type = quality +variant = 0.5mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 + diff --git a/resources/quality/ratrig_base/petg/ratrig_base_0.5_PETG_standard.inst.cfg b/resources/quality/ratrig_base/petg/ratrig_base_0.5_PETG_standard.inst.cfg new file mode 100644 index 0000000000..92611f4b71 --- /dev/null +++ b/resources/quality/ratrig_base/petg/ratrig_base_0.5_PETG_standard.inst.cfg @@ -0,0 +1,16 @@ +[general] +definition = ratrig_base +name = Standard Quality +version = 4 + +[metadata] +material = generic_petg +quality_type = standard +setting_version = 22 +type = quality +variant = 0.5mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 + diff --git a/resources/quality/ratrig_base/petg/ratrig_base_0.5_PETG_super.inst.cfg b/resources/quality/ratrig_base/petg/ratrig_base_0.5_PETG_super.inst.cfg new file mode 100644 index 0000000000..d147d87728 --- /dev/null +++ b/resources/quality/ratrig_base/petg/ratrig_base_0.5_PETG_super.inst.cfg @@ -0,0 +1,16 @@ +[general] +definition = ratrig_base +name = Super Quality +version = 4 + +[metadata] +material = generic_petg +quality_type = super +setting_version = 22 +type = quality +variant = 0.5mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 + diff --git a/resources/quality/ratrig_base/petg/ratrig_base_0.6_PETG_standard.inst.cfg b/resources/quality/ratrig_base/petg/ratrig_base_0.6_PETG_standard.inst.cfg new file mode 100644 index 0000000000..80dcecfe21 --- /dev/null +++ b/resources/quality/ratrig_base/petg/ratrig_base_0.6_PETG_standard.inst.cfg @@ -0,0 +1,16 @@ +[general] +definition = ratrig_base +name = Standard Quality +version = 4 + +[metadata] +material = generic_petg +quality_type = standard +setting_version = 22 +type = quality +variant = 0.6mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*3 + diff --git a/resources/quality/ratrig_base/petg/ratrig_base_0.8_PETG_draft.inst.cfg b/resources/quality/ratrig_base/petg/ratrig_base_0.8_PETG_draft.inst.cfg new file mode 100644 index 0000000000..4d6a9a5671 --- /dev/null +++ b/resources/quality/ratrig_base/petg/ratrig_base_0.8_PETG_draft.inst.cfg @@ -0,0 +1,17 @@ +[general] +definition = ratrig_base +name = Draft Quality +version = 4 + +[metadata] +material = generic_petg +quality_type = draft +setting_version = 22 +type = quality +variant = 0.8mm Nozzle + +[values] +cool_fan_speed = 40 +speed_layer_0 = 30 +wall_thickness = =line_width*2 + diff --git a/resources/quality/ratrig_base/petg/ratrig_base_1.0_PETG_draft.inst.cfg b/resources/quality/ratrig_base/petg/ratrig_base_1.0_PETG_draft.inst.cfg new file mode 100644 index 0000000000..bce8d9ccba --- /dev/null +++ b/resources/quality/ratrig_base/petg/ratrig_base_1.0_PETG_draft.inst.cfg @@ -0,0 +1,16 @@ +[general] +definition = ratrig_base +name = Draft Quality +version = 4 + +[metadata] +material = generic_petg +quality_type = draft +setting_version = 22 +type = quality +variant = 1.0mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*3 + diff --git a/resources/quality/ratrig_base/pla/ratrig_base_0.2_PLA_super.inst.cfg b/resources/quality/ratrig_base/pla/ratrig_base_0.2_PLA_super.inst.cfg new file mode 100644 index 0000000000..ff81d0d74e --- /dev/null +++ b/resources/quality/ratrig_base/pla/ratrig_base_0.2_PLA_super.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Super Quality +version = 4 + +[metadata] +material = generic_pla +quality_type = super +setting_version = 22 +type = quality +variant = 0.2mm Nozzle + +[values] + diff --git a/resources/quality/ratrig_base/pla/ratrig_base_0.2_PLA_ultra.inst.cfg b/resources/quality/ratrig_base/pla/ratrig_base_0.2_PLA_ultra.inst.cfg new file mode 100644 index 0000000000..10465057cf --- /dev/null +++ b/resources/quality/ratrig_base/pla/ratrig_base_0.2_PLA_ultra.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Ultra Quality +version = 4 + +[metadata] +material = generic_pla +quality_type = ultra +setting_version = 22 +type = quality +variant = 0.2mm Nozzle + +[values] + diff --git a/resources/quality/ratrig_base/pla/ratrig_base_0.3_PLA_adaptive.inst.cfg b/resources/quality/ratrig_base/pla/ratrig_base_0.3_PLA_adaptive.inst.cfg new file mode 100644 index 0000000000..58b51ebf4a --- /dev/null +++ b/resources/quality/ratrig_base/pla/ratrig_base_0.3_PLA_adaptive.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Dynamic Quality +version = 4 + +[metadata] +material = generic_pla +quality_type = adaptive +setting_version = 22 +type = quality +variant = 0.3mm Nozzle + +[values] + diff --git a/resources/quality/ratrig_base/pla/ratrig_base_0.3_PLA_low.inst.cfg b/resources/quality/ratrig_base/pla/ratrig_base_0.3_PLA_low.inst.cfg new file mode 100644 index 0000000000..3622a5927b --- /dev/null +++ b/resources/quality/ratrig_base/pla/ratrig_base_0.3_PLA_low.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Low Quality +version = 4 + +[metadata] +material = generic_pla +quality_type = low +setting_version = 22 +type = quality +variant = 0.3mm Nozzle + +[values] + diff --git a/resources/quality/ratrig_base/pla/ratrig_base_0.3_PLA_standard.inst.cfg b/resources/quality/ratrig_base/pla/ratrig_base_0.3_PLA_standard.inst.cfg new file mode 100644 index 0000000000..39c3d77674 --- /dev/null +++ b/resources/quality/ratrig_base/pla/ratrig_base_0.3_PLA_standard.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Standard Quality +version = 4 + +[metadata] +material = generic_pla +quality_type = standard +setting_version = 22 +type = quality +variant = 0.3mm Nozzle + +[values] + diff --git a/resources/quality/ratrig_base/pla/ratrig_base_0.3_PLA_super.inst.cfg b/resources/quality/ratrig_base/pla/ratrig_base_0.3_PLA_super.inst.cfg new file mode 100644 index 0000000000..5a6b3bd348 --- /dev/null +++ b/resources/quality/ratrig_base/pla/ratrig_base_0.3_PLA_super.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Super Quality +version = 4 + +[metadata] +material = generic_pla +quality_type = super +setting_version = 22 +type = quality +variant = 0.3mm Nozzle + +[values] + diff --git a/resources/quality/ratrig_base/pla/ratrig_base_0.4_PLA_adaptive.inst.cfg b/resources/quality/ratrig_base/pla/ratrig_base_0.4_PLA_adaptive.inst.cfg new file mode 100644 index 0000000000..4ca7bf94d4 --- /dev/null +++ b/resources/quality/ratrig_base/pla/ratrig_base_0.4_PLA_adaptive.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Dynamic Quality +version = 4 + +[metadata] +material = generic_pla +quality_type = adaptive +setting_version = 22 +type = quality +variant = 0.4mm Nozzle + +[values] + diff --git a/resources/quality/ratrig_base/pla/ratrig_base_0.4_PLA_low.inst.cfg b/resources/quality/ratrig_base/pla/ratrig_base_0.4_PLA_low.inst.cfg new file mode 100644 index 0000000000..0c29c77bde --- /dev/null +++ b/resources/quality/ratrig_base/pla/ratrig_base_0.4_PLA_low.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Low Quality +version = 4 + +[metadata] +material = generic_pla +quality_type = low +setting_version = 22 +type = quality +variant = 0.4mm Nozzle + +[values] + diff --git a/resources/quality/ratrig_base/pla/ratrig_base_0.4_PLA_standard.inst.cfg b/resources/quality/ratrig_base/pla/ratrig_base_0.4_PLA_standard.inst.cfg new file mode 100644 index 0000000000..3211f4be86 --- /dev/null +++ b/resources/quality/ratrig_base/pla/ratrig_base_0.4_PLA_standard.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Standard Quality +version = 4 + +[metadata] +material = generic_pla +quality_type = standard +setting_version = 22 +type = quality +variant = 0.4mm Nozzle + +[values] + diff --git a/resources/quality/ratrig_base/pla/ratrig_base_0.4_PLA_super.inst.cfg b/resources/quality/ratrig_base/pla/ratrig_base_0.4_PLA_super.inst.cfg new file mode 100644 index 0000000000..da6ea197b2 --- /dev/null +++ b/resources/quality/ratrig_base/pla/ratrig_base_0.4_PLA_super.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Super Quality +version = 4 + +[metadata] +material = generic_pla +quality_type = super +setting_version = 22 +type = quality +variant = 0.4mm Nozzle + +[values] + diff --git a/resources/quality/ratrig_base/pla/ratrig_base_0.5_PLA_adaptive.inst.cfg b/resources/quality/ratrig_base/pla/ratrig_base_0.5_PLA_adaptive.inst.cfg new file mode 100644 index 0000000000..f9d0649016 --- /dev/null +++ b/resources/quality/ratrig_base/pla/ratrig_base_0.5_PLA_adaptive.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Dynamic Quality +version = 4 + +[metadata] +material = generic_pla +quality_type = adaptive +setting_version = 22 +type = quality +variant = 0.5mm Nozzle + +[values] + diff --git a/resources/quality/ratrig_base/pla/ratrig_base_0.5_PLA_low.inst.cfg b/resources/quality/ratrig_base/pla/ratrig_base_0.5_PLA_low.inst.cfg new file mode 100644 index 0000000000..8f55fe30a4 --- /dev/null +++ b/resources/quality/ratrig_base/pla/ratrig_base_0.5_PLA_low.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Low Quality +version = 4 + +[metadata] +material = generic_pla +quality_type = low +setting_version = 22 +type = quality +variant = 0.5mm Nozzle + +[values] + diff --git a/resources/quality/ratrig_base/pla/ratrig_base_0.5_PLA_standard.inst.cfg b/resources/quality/ratrig_base/pla/ratrig_base_0.5_PLA_standard.inst.cfg new file mode 100644 index 0000000000..f6c42831e3 --- /dev/null +++ b/resources/quality/ratrig_base/pla/ratrig_base_0.5_PLA_standard.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Standard Quality +version = 4 + +[metadata] +material = generic_pla +quality_type = standard +setting_version = 22 +type = quality +variant = 0.5mm Nozzle + +[values] + diff --git a/resources/quality/ratrig_base/pla/ratrig_base_0.5_PLA_super.inst.cfg b/resources/quality/ratrig_base/pla/ratrig_base_0.5_PLA_super.inst.cfg new file mode 100644 index 0000000000..67637bcfea --- /dev/null +++ b/resources/quality/ratrig_base/pla/ratrig_base_0.5_PLA_super.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Super Quality +version = 4 + +[metadata] +material = generic_pla +quality_type = super +setting_version = 22 +type = quality +variant = 0.5mm Nozzle + +[values] + diff --git a/resources/quality/ratrig_base/pla/ratrig_base_0.6_PLA_draft.inst.cfg b/resources/quality/ratrig_base/pla/ratrig_base_0.6_PLA_draft.inst.cfg new file mode 100644 index 0000000000..bbafe934fe --- /dev/null +++ b/resources/quality/ratrig_base/pla/ratrig_base_0.6_PLA_draft.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Draft Quality +version = 4 + +[metadata] +material = generic_pla +quality_type = draft +setting_version = 22 +type = quality +variant = 0.6mm Nozzle + +[values] + diff --git a/resources/quality/ratrig_base/pla/ratrig_base_0.6_PLA_low.inst.cfg b/resources/quality/ratrig_base/pla/ratrig_base_0.6_PLA_low.inst.cfg new file mode 100644 index 0000000000..115341b00d --- /dev/null +++ b/resources/quality/ratrig_base/pla/ratrig_base_0.6_PLA_low.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Low Quality +version = 4 + +[metadata] +material = generic_pla +quality_type = low +setting_version = 22 +type = quality +variant = 0.6mm Nozzle + +[values] + diff --git a/resources/quality/ratrig_base/pla/ratrig_base_0.6_PLA_standard.inst.cfg b/resources/quality/ratrig_base/pla/ratrig_base_0.6_PLA_standard.inst.cfg new file mode 100644 index 0000000000..f365b98c5a --- /dev/null +++ b/resources/quality/ratrig_base/pla/ratrig_base_0.6_PLA_standard.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Standard Quality +version = 4 + +[metadata] +material = generic_pla +quality_type = standard +setting_version = 22 +type = quality +variant = 0.6mm Nozzle + +[values] + diff --git a/resources/quality/ratrig_base/pla/ratrig_base_0.8_PLA_draft.inst.cfg b/resources/quality/ratrig_base/pla/ratrig_base_0.8_PLA_draft.inst.cfg new file mode 100644 index 0000000000..eba25456a9 --- /dev/null +++ b/resources/quality/ratrig_base/pla/ratrig_base_0.8_PLA_draft.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Draft Quality +version = 4 + +[metadata] +material = generic_pla +quality_type = draft +setting_version = 22 +type = quality +variant = 0.8mm Nozzle + +[values] + diff --git a/resources/quality/ratrig_base/pla/ratrig_base_1.0_PLA_draft.inst.cfg b/resources/quality/ratrig_base/pla/ratrig_base_1.0_PLA_draft.inst.cfg new file mode 100644 index 0000000000..ffe30e68ec --- /dev/null +++ b/resources/quality/ratrig_base/pla/ratrig_base_1.0_PLA_draft.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Draft Quality +version = 4 + +[metadata] +material = generic_pla +quality_type = draft +setting_version = 22 +type = quality +variant = 1.0mm Nozzle + +[values] + diff --git a/resources/quality/ratrig_base/ratrig_base_global_adaptive.inst.cfg b/resources/quality/ratrig_base/ratrig_base_global_adaptive.inst.cfg new file mode 100644 index 0000000000..7dc5adffbc --- /dev/null +++ b/resources/quality/ratrig_base/ratrig_base_global_adaptive.inst.cfg @@ -0,0 +1,20 @@ +[general] +definition = ratrig_base +name = Dynamic Quality +version = 4 + +[metadata] +global_quality = True +quality_type = adaptive +setting_version = 22 +type = quality +weight = -2 + +[values] +adaptive_layer_height_enabled = true +layer_height = 0.16 +layer_height_0 = 0.20 +support_interface_height = =layer_height*6 +top_bottom_thickness = =layer_height_0+layer_height*4 +wall_thickness = =line_width*3 + diff --git a/resources/quality/ratrig_base/ratrig_base_global_draft.inst.cfg b/resources/quality/ratrig_base/ratrig_base_global_draft.inst.cfg new file mode 100644 index 0000000000..6300ade8f6 --- /dev/null +++ b/resources/quality/ratrig_base/ratrig_base_global_draft.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = ratrig_base +name = Draft Quality +version = 4 + +[metadata] +global_quality = True +quality_type = draft +setting_version = 22 +type = quality +weight = -5 + +[values] +layer_height = 0.32 +layer_height_0 = 0.32 +support_interface_height = =layer_height*4 +top_bottom_thickness = =layer_height_0+layer_height*3 +wall_thickness = =line_width*2 + diff --git a/resources/quality/ratrig_base/ratrig_base_global_low.inst.cfg b/resources/quality/ratrig_base/ratrig_base_global_low.inst.cfg new file mode 100644 index 0000000000..5cd4519ac2 --- /dev/null +++ b/resources/quality/ratrig_base/ratrig_base_global_low.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = ratrig_base +name = Low Quality +version = 4 + +[metadata] +global_quality = True +quality_type = low +setting_version = 22 +type = quality +weight = -4 + +[values] +layer_height = 0.28 +layer_height_0 = 0.28 +support_interface_height = =layer_height*4 +top_bottom_thickness = =layer_height_0+layer_height*3 +wall_thickness = =line_width*2 + diff --git a/resources/quality/ratrig_base/ratrig_base_global_standard.inst.cfg b/resources/quality/ratrig_base/ratrig_base_global_standard.inst.cfg new file mode 100644 index 0000000000..d1bbff61ed --- /dev/null +++ b/resources/quality/ratrig_base/ratrig_base_global_standard.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = ratrig_base +name = Standard Quality +version = 4 + +[metadata] +global_quality = True +quality_type = standard +setting_version = 22 +type = quality +weight = -3 + +[values] +layer_height = 0.2 +layer_height_0 = 0.2 +support_interface_height = =layer_height*4 +top_bottom_thickness = =layer_height_0+layer_height*3 +wall_thickness = =line_width*2 + diff --git a/resources/quality/ratrig_base/ratrig_base_global_super.inst.cfg b/resources/quality/ratrig_base/ratrig_base_global_super.inst.cfg new file mode 100644 index 0000000000..e73f314a27 --- /dev/null +++ b/resources/quality/ratrig_base/ratrig_base_global_super.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = ratrig_base +name = Super Quality +version = 4 + +[metadata] +global_quality = True +quality_type = super +setting_version = 22 +type = quality +weight = -1 + +[values] +layer_height = 0.12 +layer_height_0 = 0.12 +support_interface_height = =layer_height*8 +top_bottom_thickness = =layer_height_0+layer_height*6 +wall_thickness = =line_width*3 + diff --git a/resources/quality/ratrig_base/ratrig_base_global_ultra.inst.cfg b/resources/quality/ratrig_base/ratrig_base_global_ultra.inst.cfg new file mode 100644 index 0000000000..3864f61858 --- /dev/null +++ b/resources/quality/ratrig_base/ratrig_base_global_ultra.inst.cfg @@ -0,0 +1,19 @@ +[general] +definition = ratrig_base +name = Ultra Quality +version = 4 + +[metadata] +global_quality = True +quality_type = ultra +setting_version = 22 +type = quality +weight = 0 + +[values] +layer_height = 0.08 +layer_height_0 = 0.12 +support_interface_height = =layer_height*12 +top_bottom_thickness = =layer_height_0+layer_height*10 +wall_thickness = =line_width*3 + diff --git a/resources/quality/ratrig_base/tpu/ratrig_base_0.3_TPU_adaptive.inst.cfg b/resources/quality/ratrig_base/tpu/ratrig_base_0.3_TPU_adaptive.inst.cfg new file mode 100644 index 0000000000..6425ec7666 --- /dev/null +++ b/resources/quality/ratrig_base/tpu/ratrig_base_0.3_TPU_adaptive.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Dynamic Quality +version = 4 + +[metadata] +material = generic_tpu +quality_type = adaptive +setting_version = 22 +type = quality +variant = 0.3mm Nozzle + +[values] + diff --git a/resources/quality/ratrig_base/tpu/ratrig_base_0.3_TPU_standard.inst.cfg b/resources/quality/ratrig_base/tpu/ratrig_base_0.3_TPU_standard.inst.cfg new file mode 100644 index 0000000000..8f7b5f7cfa --- /dev/null +++ b/resources/quality/ratrig_base/tpu/ratrig_base_0.3_TPU_standard.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Standard Quality +version = 4 + +[metadata] +material = generic_tpu +quality_type = standard +setting_version = 22 +type = quality +variant = 0.3mm Nozzle + +[values] + diff --git a/resources/quality/ratrig_base/tpu/ratrig_base_0.3_TPU_super.inst.cfg b/resources/quality/ratrig_base/tpu/ratrig_base_0.3_TPU_super.inst.cfg new file mode 100644 index 0000000000..4b92df6df6 --- /dev/null +++ b/resources/quality/ratrig_base/tpu/ratrig_base_0.3_TPU_super.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Super Quality +version = 4 + +[metadata] +material = generic_tpu +quality_type = super +setting_version = 22 +type = quality +variant = 0.3mm Nozzle + +[values] + diff --git a/resources/quality/ratrig_base/tpu/ratrig_base_0.4_TPU_adaptive.inst.cfg b/resources/quality/ratrig_base/tpu/ratrig_base_0.4_TPU_adaptive.inst.cfg new file mode 100644 index 0000000000..d89b488ce6 --- /dev/null +++ b/resources/quality/ratrig_base/tpu/ratrig_base_0.4_TPU_adaptive.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Dynamic Quality +version = 4 + +[metadata] +material = generic_tpu +quality_type = adaptive +setting_version = 22 +type = quality +variant = 0.4mm Nozzle + +[values] + diff --git a/resources/quality/ratrig_base/tpu/ratrig_base_0.4_TPU_standard.inst.cfg b/resources/quality/ratrig_base/tpu/ratrig_base_0.4_TPU_standard.inst.cfg new file mode 100644 index 0000000000..caa88e072a --- /dev/null +++ b/resources/quality/ratrig_base/tpu/ratrig_base_0.4_TPU_standard.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Standard Quality +version = 4 + +[metadata] +material = generic_tpu +quality_type = standard +setting_version = 22 +type = quality +variant = 0.4mm Nozzle + +[values] + diff --git a/resources/quality/ratrig_base/tpu/ratrig_base_0.4_TPU_super.inst.cfg b/resources/quality/ratrig_base/tpu/ratrig_base_0.4_TPU_super.inst.cfg new file mode 100644 index 0000000000..c37bd5df99 --- /dev/null +++ b/resources/quality/ratrig_base/tpu/ratrig_base_0.4_TPU_super.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Super Quality +version = 4 + +[metadata] +material = generic_tpu +quality_type = super +setting_version = 22 +type = quality +variant = 0.4mm Nozzle + +[values] + diff --git a/resources/quality/ratrig_base/tpu/ratrig_base_0.5_TPU_adaptive.inst.cfg b/resources/quality/ratrig_base/tpu/ratrig_base_0.5_TPU_adaptive.inst.cfg new file mode 100644 index 0000000000..4622803d56 --- /dev/null +++ b/resources/quality/ratrig_base/tpu/ratrig_base_0.5_TPU_adaptive.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Dynamic Quality +version = 4 + +[metadata] +material = generic_tpu +quality_type = adaptive +setting_version = 22 +type = quality +variant = 0.5mm Nozzle + +[values] + diff --git a/resources/quality/ratrig_base/tpu/ratrig_base_0.5_TPU_standard.inst.cfg b/resources/quality/ratrig_base/tpu/ratrig_base_0.5_TPU_standard.inst.cfg new file mode 100644 index 0000000000..11b90f79a1 --- /dev/null +++ b/resources/quality/ratrig_base/tpu/ratrig_base_0.5_TPU_standard.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Standard Quality +version = 4 + +[metadata] +material = generic_tpu +quality_type = standard +setting_version = 22 +type = quality +variant = 0.5mm Nozzle + +[values] + diff --git a/resources/quality/ratrig_base/tpu/ratrig_base_0.5_TPU_super.inst.cfg b/resources/quality/ratrig_base/tpu/ratrig_base_0.5_TPU_super.inst.cfg new file mode 100644 index 0000000000..d3762fd839 --- /dev/null +++ b/resources/quality/ratrig_base/tpu/ratrig_base_0.5_TPU_super.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Super Quality +version = 4 + +[metadata] +material = generic_tpu +quality_type = super +setting_version = 22 +type = quality +variant = 0.5mm Nozzle + +[values] + diff --git a/resources/quality/ratrig_base/tpu/ratrig_base_0.6_TPU_standard.inst.cfg b/resources/quality/ratrig_base/tpu/ratrig_base_0.6_TPU_standard.inst.cfg new file mode 100644 index 0000000000..11a0e7cd4e --- /dev/null +++ b/resources/quality/ratrig_base/tpu/ratrig_base_0.6_TPU_standard.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Standard Quality +version = 4 + +[metadata] +material = generic_tpu +quality_type = standard +setting_version = 22 +type = quality +variant = 0.6mm Nozzle + +[values] + diff --git a/resources/quality/ratrig_base/tpu/ratrig_base_0.8_TPU_draft.inst.cfg b/resources/quality/ratrig_base/tpu/ratrig_base_0.8_TPU_draft.inst.cfg new file mode 100644 index 0000000000..fb82909a5d --- /dev/null +++ b/resources/quality/ratrig_base/tpu/ratrig_base_0.8_TPU_draft.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Draft Quality +version = 4 + +[metadata] +material = generic_tpu +quality_type = draft +setting_version = 22 +type = quality +variant = 0.8mm Nozzle + +[values] + diff --git a/resources/quality/ratrig_base/tpu/ratrig_base_1.0_TPU_draft.inst.cfg b/resources/quality/ratrig_base/tpu/ratrig_base_1.0_TPU_draft.inst.cfg new file mode 100644 index 0000000000..013dbfdcbc --- /dev/null +++ b/resources/quality/ratrig_base/tpu/ratrig_base_1.0_TPU_draft.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = ratrig_base +name = Draft Quality +version = 4 + +[metadata] +material = generic_tpu +quality_type = draft +setting_version = 22 +type = quality +variant = 1.0mm Nozzle + +[values] + diff --git a/resources/quality/ultimaker_methodx/um_methodx_1c_um-asa-175_0.2mm.inst.cfg b/resources/quality/ultimaker_methodx/um_methodx_1c_um-asa-175_0.2mm.inst.cfg new file mode 100644 index 0000000000..f0e0a4fded --- /dev/null +++ b/resources/quality/ultimaker_methodx/um_methodx_1c_um-asa-175_0.2mm.inst.cfg @@ -0,0 +1,50 @@ +[general] +definition = ultimaker_methodx +name = Fast - Experimental +version = 4 + +[metadata] +is_experimental = True +material = ultimaker_asa_175 +quality_type = draft +setting_version = 22 +type = quality +variant = 1C +weight = -2 + +[values] +cool_fan_enabled = False +material_print_temperature_layer_0 = =default_material_print_temperature+5 +raft_airgap = 0.3 +raft_base_speed = 10 +retract_at_layer_change = True +retraction_amount = 0.5 +retraction_min_travel = 3.2 +roofing_material_flow = 98.0 +small_skin_width = 3.6 +speed_prime_tower = 30.0 +speed_print = 120.0 +speed_roofing = 55 +speed_topbottom = 55 +speed_travel = 250.0 +speed_wall_0 = 45 +speed_wall_x = 65 +support_angle = 50 +support_bottom_density = 24 +support_bottom_enable = False +support_bottom_line_width = 0.6 +support_bottom_stair_step_height = 0 +support_fan_enable = False +support_infill_rate = 12.0 +support_interface_enable = True +support_interface_pattern = lines +support_line_width = 0.3 +support_pattern = lines +support_roof_density = 97 +support_roof_height = 1.015 +support_roof_line_width = 0.25 +support_use_towers = False +support_xy_distance = 0.2 +support_xy_distance_overhang = 0.15 +support_z_distance = 0.25 + diff --git a/resources/quality/ultimaker_methodx/um_methodx_1c_um-nylon12-cf-175_0.2mm.inst.cfg b/resources/quality/ultimaker_methodx/um_methodx_1c_um-nylon12-cf-175_0.2mm.inst.cfg new file mode 100644 index 0000000000..32d64ed5b1 --- /dev/null +++ b/resources/quality/ultimaker_methodx/um_methodx_1c_um-nylon12-cf-175_0.2mm.inst.cfg @@ -0,0 +1,53 @@ +[general] +definition = ultimaker_methodx +name = Fast - Experimental +version = 4 + +[metadata] +is_experimental = True +material = ultimaker_nylon12-cf_175 +quality_type = draft +setting_version = 22 +type = quality +variant = 1C +weight = -2 + +[values] +cool_fan_enabled = False +material_final_print_temperature = =default_material_print_temperature-5 +material_initial_print_temperature = =default_material_print_temperature-5 +raft_airgap = 0.3 +raft_base_line_spacing = 3 +raft_base_line_width = 1.2 +raft_base_speed = 10 +retract_at_layer_change = True +retraction_amount = 0.5 +retraction_min_travel = 3.2 +roofing_material_flow = 100 +small_skin_width = 3.6 +speed_prime_tower = 30.0 +speed_print = 120.0 +speed_roofing = 55 +speed_topbottom = 55 +speed_travel = 250.0 +speed_wall_0 = 45 +speed_wall_x = 65 +support_angle = 50 +support_bottom_density = 24 +support_bottom_enable = False +support_bottom_line_width = 0.6 +support_bottom_stair_step_height = 0 +support_fan_enable = False +support_infill_rate = 12.0 +support_interface_enable = True +support_interface_pattern = lines +support_line_width = 0.3 +support_pattern = lines +support_roof_density = 97 +support_roof_height = 1.015 +support_roof_line_width = 0.25 +support_use_towers = False +support_xy_distance = 0.2 +support_xy_distance_overhang = 0.15 +support_z_distance = 0.25 + diff --git a/resources/quality/ultimaker_methodx/um_methodx_1xa_um-asa-175_0.2mm.inst.cfg b/resources/quality/ultimaker_methodx/um_methodx_1xa_um-asa-175_0.2mm.inst.cfg new file mode 100644 index 0000000000..e032e3a3b8 --- /dev/null +++ b/resources/quality/ultimaker_methodx/um_methodx_1xa_um-asa-175_0.2mm.inst.cfg @@ -0,0 +1,50 @@ +[general] +definition = ultimaker_methodx +name = Fast - Experimental +version = 4 + +[metadata] +is_experimental = True +material = ultimaker_asa_175 +quality_type = draft +setting_version = 22 +type = quality +variant = 1XA +weight = -2 + +[values] +cool_fan_enabled = False +material_print_temperature_layer_0 = =default_material_print_temperature+5 +raft_airgap = 0.3 +raft_base_speed = 10 +retract_at_layer_change = True +retraction_amount = 0.5 +retraction_min_travel = 3.2 +roofing_material_flow = 98.0 +small_skin_width = 3.6 +speed_prime_tower = 30.0 +speed_print = 120.0 +speed_roofing = 55 +speed_topbottom = 55 +speed_travel = 250.0 +speed_wall_0 = 45 +speed_wall_x = 65 +support_angle = 50 +support_bottom_density = 24 +support_bottom_enable = False +support_bottom_line_width = 0.6 +support_bottom_stair_step_height = 0 +support_fan_enable = False +support_infill_rate = 12.0 +support_interface_enable = True +support_interface_pattern = lines +support_line_width = 0.3 +support_pattern = lines +support_roof_density = 97 +support_roof_height = 1.015 +support_roof_line_width = 0.25 +support_use_towers = False +support_xy_distance = 0.2 +support_xy_distance_overhang = 0.15 +support_z_distance = 0.25 + diff --git a/resources/quality/ultimaker_methodx/um_methodx_2xa_um-sr30-175_0.2mm.inst.cfg b/resources/quality/ultimaker_methodx/um_methodx_2xa_um-sr30-175_0.2mm.inst.cfg new file mode 100644 index 0000000000..5ebc2b4560 --- /dev/null +++ b/resources/quality/ultimaker_methodx/um_methodx_2xa_um-sr30-175_0.2mm.inst.cfg @@ -0,0 +1,41 @@ +[general] +definition = ultimaker_methodx +name = Fast - Experimental +version = 4 + +[metadata] +is_experimental = True +material = ultimaker_sr30_175 +quality_type = draft +setting_version = 22 +type = quality +variant = 2XA +weight = -2 + +[values] +brim_replaces_support = False +cool_fan_enabled = False +cool_min_temperature = =material_print_temperature +raft_airgap = 0.0 +raft_interface_line_width = 0.7 +raft_interface_speed = 70 +raft_surface_speed = 90 +retract_at_layer_change = True +retraction_amount = 0.5 +speed_prime_tower = 25.0 +speed_print = 50 +speed_roofing = 50 +speed_support = 50 +speed_support_bottom = 30 +speed_support_interface = 80 +speed_topbottom = 50 +speed_wall_0 = 50 +speed_wall_x = 50 +support_bottom_wall_count = 5 +support_fan_enable = False +support_infill_sparse_thickness = =min(layer_height * 2, machine_nozzle_size * 3 / 4) if layer_height <= 0.15 / 0.4 * machine_nozzle_size else layer_height +support_interface_enable = True +support_wall_count = 1 +support_xy_distance = 0.2 +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_methodx/um_methodx_labs_um-asa-175_0.2mm.inst.cfg b/resources/quality/ultimaker_methodx/um_methodx_labs_um-asa-175_0.2mm.inst.cfg new file mode 100644 index 0000000000..3c9f4500fc --- /dev/null +++ b/resources/quality/ultimaker_methodx/um_methodx_labs_um-asa-175_0.2mm.inst.cfg @@ -0,0 +1,50 @@ +[general] +definition = ultimaker_methodx +name = Fast - Experimental +version = 4 + +[metadata] +is_experimental = True +material = ultimaker_asa_175 +quality_type = draft +setting_version = 22 +type = quality +variant = LABS +weight = -2 + +[values] +cool_fan_enabled = False +material_print_temperature_layer_0 = =default_material_print_temperature+5 +raft_airgap = 0.3 +raft_base_speed = 10 +retract_at_layer_change = True +retraction_amount = 0.5 +retraction_min_travel = 3.2 +roofing_material_flow = 98.0 +small_skin_width = 3.6 +speed_prime_tower = 30.0 +speed_print = 120.0 +speed_roofing = 55 +speed_topbottom = 55 +speed_travel = 250.0 +speed_wall_0 = 45 +speed_wall_x = 65 +support_angle = 50 +support_bottom_density = 24 +support_bottom_enable = False +support_bottom_line_width = 0.6 +support_bottom_stair_step_height = 0 +support_fan_enable = False +support_infill_rate = 12.0 +support_interface_enable = True +support_interface_pattern = lines +support_line_width = 0.3 +support_pattern = lines +support_roof_density = 97 +support_roof_height = 1.015 +support_roof_line_width = 0.25 +support_use_towers = False +support_xy_distance = 0.2 +support_xy_distance_overhang = 0.15 +support_z_distance = 0.25 + diff --git a/resources/quality/ultimaker_methodx/um_methodx_labs_um-nylon12-cf-175_0.2mm.inst.cfg b/resources/quality/ultimaker_methodx/um_methodx_labs_um-nylon12-cf-175_0.2mm.inst.cfg new file mode 100644 index 0000000000..7bb14d9107 --- /dev/null +++ b/resources/quality/ultimaker_methodx/um_methodx_labs_um-nylon12-cf-175_0.2mm.inst.cfg @@ -0,0 +1,53 @@ +[general] +definition = ultimaker_methodx +name = Fast - Experimental +version = 4 + +[metadata] +is_experimental = True +material = ultimaker_nylon12-cf_175 +quality_type = draft +setting_version = 22 +type = quality +variant = LABS +weight = -2 + +[values] +cool_fan_enabled = False +material_final_print_temperature = =default_material_print_temperature-5 +material_initial_print_temperature = =default_material_print_temperature-5 +raft_airgap = 0.3 +raft_base_line_spacing = 3 +raft_base_line_width = 1.2 +raft_base_speed = 10 +retract_at_layer_change = True +retraction_amount = 0.5 +retraction_min_travel = 3.2 +roofing_material_flow = 100 +small_skin_width = 3.6 +speed_prime_tower = 30.0 +speed_print = 120.0 +speed_roofing = 55 +speed_topbottom = 55 +speed_travel = 250.0 +speed_wall_0 = 45 +speed_wall_x = 65 +support_angle = 50 +support_bottom_density = 24 +support_bottom_enable = False +support_bottom_line_width = 0.6 +support_bottom_stair_step_height = 0 +support_fan_enable = False +support_infill_rate = 12.0 +support_interface_enable = True +support_interface_pattern = lines +support_line_width = 0.3 +support_pattern = lines +support_roof_density = 97 +support_roof_height = 1.015 +support_roof_line_width = 0.25 +support_use_towers = False +support_xy_distance = 0.2 +support_xy_distance_overhang = 0.15 +support_z_distance = 0.25 + diff --git a/resources/quality/ultimaker_methodxl/um_methodxl_1c_um-absr-175_0.2mm.inst.cfg b/resources/quality/ultimaker_methodxl/um_methodxl_1c_um-absr-175_0.2mm.inst.cfg index 7b5daf0d20..2688d88ad3 100644 --- a/resources/quality/ultimaker_methodxl/um_methodxl_1c_um-absr-175_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_methodxl/um_methodxl_1c_um-absr-175_0.2mm.inst.cfg @@ -12,9 +12,7 @@ variant = 1C weight = -2 [values] -build_volume_temperature = 85 cool_fan_enabled = False -default_material_bed_temperature = 95 raft_airgap = 0.3 speed_prime_tower = 30.0 speed_print = 120.0 diff --git a/resources/quality/ultimaker_methodxl/um_methodxl_1c_um-asa-175_0.2mm.inst.cfg b/resources/quality/ultimaker_methodxl/um_methodxl_1c_um-asa-175_0.2mm.inst.cfg new file mode 100644 index 0000000000..5aaee1f2c6 --- /dev/null +++ b/resources/quality/ultimaker_methodxl/um_methodxl_1c_um-asa-175_0.2mm.inst.cfg @@ -0,0 +1,51 @@ +[general] +definition = ultimaker_methodxl +name = Fast - Experimental +version = 4 + +[metadata] +is_experimental = True +material = ultimaker_asa_175 +quality_type = draft +setting_version = 22 +type = quality +variant = 1C +weight = -2 + +[values] +cool_fan_enabled = False +material_print_temperature_layer_0 = =default_material_print_temperature+5 +raft_airgap = 0.3 +raft_base_speed = 10 +retract_at_layer_change = True +retraction_amount = 0.5 +retraction_min_travel = 3.2 +roofing_material_flow = 98.0 +small_skin_width = 3.6 +speed_prime_tower = 30.0 +speed_print = 120.0 +speed_roofing = 55 +speed_topbottom = 55 +speed_travel = 500 +speed_travel_layer_0 = 250 +speed_wall_0 = 45 +speed_wall_x = 65 +support_angle = 50 +support_bottom_density = 24 +support_bottom_enable = False +support_bottom_line_width = 0.6 +support_bottom_stair_step_height = 0 +support_fan_enable = False +support_infill_rate = 12.0 +support_interface_enable = True +support_interface_pattern = lines +support_line_width = 0.3 +support_pattern = lines +support_roof_density = 97 +support_roof_height = 1.015 +support_roof_line_width = 0.25 +support_use_towers = False +support_xy_distance = 0.2 +support_xy_distance_overhang = 0.15 +support_z_distance = 0.25 + diff --git a/resources/quality/ultimaker_methodxl/um_methodxl_1c_um-nylon12-cf-175_0.2mm.inst.cfg b/resources/quality/ultimaker_methodxl/um_methodxl_1c_um-nylon12-cf-175_0.2mm.inst.cfg new file mode 100644 index 0000000000..575189deae --- /dev/null +++ b/resources/quality/ultimaker_methodxl/um_methodxl_1c_um-nylon12-cf-175_0.2mm.inst.cfg @@ -0,0 +1,53 @@ +[general] +definition = ultimaker_methodxl +name = Fast - Experimental +version = 4 + +[metadata] +is_experimental = True +material = ultimaker_nylon12-cf_175 +quality_type = draft +setting_version = 22 +type = quality +variant = 1C +weight = -2 + +[values] +cool_fan_enabled = False +material_final_print_temperature = =default_material_print_temperature-5 +material_initial_print_temperature = =default_material_print_temperature-5 +raft_airgap = 0.3 +raft_base_line_spacing = 3 +raft_base_line_width = 1.2 +raft_base_speed = 10 +retract_at_layer_change = True +retraction_amount = 0.5 +retraction_min_travel = 3.2 +roofing_material_flow = 100 +small_skin_width = 3.6 +speed_prime_tower = 30.0 +speed_print = 120.0 +speed_roofing = 55 +speed_topbottom = 55 +speed_travel = 250.0 +speed_wall_0 = 45 +speed_wall_x = 65 +support_angle = 50 +support_bottom_density = 24 +support_bottom_enable = False +support_bottom_line_width = 0.6 +support_bottom_stair_step_height = 0 +support_fan_enable = False +support_infill_rate = 12.0 +support_interface_enable = True +support_interface_pattern = lines +support_line_width = 0.3 +support_pattern = lines +support_roof_density = 97 +support_roof_height = 1.015 +support_roof_line_width = 0.25 +support_use_towers = False +support_xy_distance = 0.2 +support_xy_distance_overhang = 0.15 +support_z_distance = 0.25 + diff --git a/resources/quality/ultimaker_methodxl/um_methodxl_1xa_um-absr-175_0.2mm.inst.cfg b/resources/quality/ultimaker_methodxl/um_methodxl_1xa_um-absr-175_0.2mm.inst.cfg index 7445bd2d42..fd224e8798 100644 --- a/resources/quality/ultimaker_methodxl/um_methodxl_1xa_um-absr-175_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_methodxl/um_methodxl_1xa_um-absr-175_0.2mm.inst.cfg @@ -12,9 +12,7 @@ variant = 1XA weight = -2 [values] -build_volume_temperature = 85 cool_fan_enabled = False -default_material_bed_temperature = 95 raft_airgap = 0.3 speed_prime_tower = 30.0 speed_print = 120.0 diff --git a/resources/quality/ultimaker_methodxl/um_methodxl_1xa_um-asa-175_0.2mm.inst.cfg b/resources/quality/ultimaker_methodxl/um_methodxl_1xa_um-asa-175_0.2mm.inst.cfg new file mode 100644 index 0000000000..504ab8c10b --- /dev/null +++ b/resources/quality/ultimaker_methodxl/um_methodxl_1xa_um-asa-175_0.2mm.inst.cfg @@ -0,0 +1,51 @@ +[general] +definition = ultimaker_methodxl +name = Fast - Experimental +version = 4 + +[metadata] +is_experimental = True +material = ultimaker_asa_175 +quality_type = draft +setting_version = 22 +type = quality +variant = 1XA +weight = -2 + +[values] +cool_fan_enabled = False +material_print_temperature_layer_0 = =default_material_print_temperature+5 +raft_airgap = 0.3 +raft_base_speed = 10 +retract_at_layer_change = True +retraction_amount = 0.5 +retraction_min_travel = 3.2 +roofing_material_flow = 98.0 +small_skin_width = 3.6 +speed_prime_tower = 30.0 +speed_print = 120.0 +speed_roofing = 55 +speed_topbottom = 55 +speed_travel = 500 +speed_travel_layer_0 = 250 +speed_wall_0 = 45 +speed_wall_x = 65 +support_angle = 50 +support_bottom_density = 24 +support_bottom_enable = False +support_bottom_line_width = 0.6 +support_bottom_stair_step_height = 0 +support_fan_enable = False +support_infill_rate = 12.0 +support_interface_enable = True +support_interface_pattern = lines +support_line_width = 0.3 +support_pattern = lines +support_roof_density = 97 +support_roof_height = 1.015 +support_roof_line_width = 0.25 +support_use_towers = False +support_xy_distance = 0.2 +support_xy_distance_overhang = 0.15 +support_z_distance = 0.25 + diff --git a/resources/quality/ultimaker_methodxl/um_methodxl_2xa_um-sr30-175_0.2mm.inst.cfg b/resources/quality/ultimaker_methodxl/um_methodxl_2xa_um-sr30-175_0.2mm.inst.cfg new file mode 100644 index 0000000000..ebc6ecfe98 --- /dev/null +++ b/resources/quality/ultimaker_methodxl/um_methodxl_2xa_um-sr30-175_0.2mm.inst.cfg @@ -0,0 +1,41 @@ +[general] +definition = ultimaker_methodxl +name = Fast - Experimental +version = 4 + +[metadata] +is_experimental = True +material = ultimaker_sr30_175 +quality_type = draft +setting_version = 22 +type = quality +variant = 2XA +weight = -2 + +[values] +brim_replaces_support = False +cool_fan_enabled = False +cool_min_temperature = =material_print_temperature +raft_airgap = 0.0 +raft_interface_line_width = 0.7 +raft_interface_speed = 70 +raft_surface_speed = 90 +retract_at_layer_change = True +retraction_amount = 0.5 +speed_prime_tower = 25.0 +speed_print = 50 +speed_roofing = 50 +speed_support = 50 +speed_support_bottom = 30 +speed_support_interface = 80 +speed_topbottom = 50 +speed_wall_0 = 50 +speed_wall_x = 50 +support_bottom_wall_count = 5 +support_fan_enable = False +support_infill_sparse_thickness = =min(layer_height * 2, machine_nozzle_size * 3 / 4) if layer_height <= 0.15 / 0.4 * machine_nozzle_size else layer_height +support_interface_enable = True +support_wall_count = 1 +support_xy_distance = 0.2 +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_methodxl/um_methodxl_labs_um-absr-175_0.2mm.inst.cfg b/resources/quality/ultimaker_methodxl/um_methodxl_labs_um-absr-175_0.2mm.inst.cfg index 2114be0ff4..4af8230b24 100644 --- a/resources/quality/ultimaker_methodxl/um_methodxl_labs_um-absr-175_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_methodxl/um_methodxl_labs_um-absr-175_0.2mm.inst.cfg @@ -12,9 +12,7 @@ variant = LABS weight = -2 [values] -build_volume_temperature = 85 cool_fan_enabled = False -default_material_bed_temperature = 95 raft_airgap = 0.3 speed_prime_tower = 30.0 speed_print = 120.0 diff --git a/resources/quality/ultimaker_methodxl/um_methodxl_labs_um-asa-175_0.2mm.inst.cfg b/resources/quality/ultimaker_methodxl/um_methodxl_labs_um-asa-175_0.2mm.inst.cfg new file mode 100644 index 0000000000..14c15fd3c5 --- /dev/null +++ b/resources/quality/ultimaker_methodxl/um_methodxl_labs_um-asa-175_0.2mm.inst.cfg @@ -0,0 +1,51 @@ +[general] +definition = ultimaker_methodxl +name = Fast - Experimental +version = 4 + +[metadata] +is_experimental = True +material = ultimaker_asa_175 +quality_type = draft +setting_version = 22 +type = quality +variant = LABS +weight = -2 + +[values] +cool_fan_enabled = False +material_print_temperature_layer_0 = =default_material_print_temperature+5 +raft_airgap = 0.3 +raft_base_speed = 10 +retract_at_layer_change = True +retraction_amount = 0.5 +retraction_min_travel = 3.2 +roofing_material_flow = 98.0 +small_skin_width = 3.6 +speed_prime_tower = 30.0 +speed_print = 120.0 +speed_roofing = 55 +speed_topbottom = 55 +speed_travel = 500 +speed_travel_layer_0 = 250 +speed_wall_0 = 45 +speed_wall_x = 65 +support_angle = 50 +support_bottom_density = 24 +support_bottom_enable = False +support_bottom_line_width = 0.6 +support_bottom_stair_step_height = 0 +support_fan_enable = False +support_infill_rate = 12.0 +support_interface_enable = True +support_interface_pattern = lines +support_line_width = 0.3 +support_pattern = lines +support_roof_density = 97 +support_roof_height = 1.015 +support_roof_line_width = 0.25 +support_use_towers = False +support_xy_distance = 0.2 +support_xy_distance_overhang = 0.15 +support_z_distance = 0.25 + diff --git a/resources/quality/ultimaker_methodxl/um_methodxl_labs_um-nylon12-cf-175_0.2mm.inst.cfg b/resources/quality/ultimaker_methodxl/um_methodxl_labs_um-nylon12-cf-175_0.2mm.inst.cfg new file mode 100644 index 0000000000..110fa5e4b5 --- /dev/null +++ b/resources/quality/ultimaker_methodxl/um_methodxl_labs_um-nylon12-cf-175_0.2mm.inst.cfg @@ -0,0 +1,53 @@ +[general] +definition = ultimaker_methodxl +name = Fast - Experimental +version = 4 + +[metadata] +is_experimental = True +material = ultimaker_nylon12-cf_175 +quality_type = draft +setting_version = 22 +type = quality +variant = LABS +weight = -2 + +[values] +cool_fan_enabled = False +material_final_print_temperature = =default_material_print_temperature-5 +material_initial_print_temperature = =default_material_print_temperature-5 +raft_airgap = 0.3 +raft_base_line_spacing = 3 +raft_base_line_width = 1.2 +raft_base_speed = 10 +retract_at_layer_change = True +retraction_amount = 0.5 +retraction_min_travel = 3.2 +roofing_material_flow = 100 +small_skin_width = 3.6 +speed_prime_tower = 30.0 +speed_print = 120.0 +speed_roofing = 55 +speed_topbottom = 55 +speed_travel = 250.0 +speed_wall_0 = 45 +speed_wall_x = 65 +support_angle = 50 +support_bottom_density = 24 +support_bottom_enable = False +support_bottom_line_width = 0.6 +support_bottom_stair_step_height = 0 +support_fan_enable = False +support_infill_rate = 12.0 +support_interface_enable = True +support_interface_pattern = lines +support_line_width = 0.3 +support_pattern = lines +support_roof_density = 97 +support_roof_height = 1.015 +support_roof_line_width = 0.25 +support_use_towers = False +support_xy_distance = 0.2 +support_xy_distance_overhang = 0.15 +support_z_distance = 0.25 + 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 5e0afa0015..ec9ff192a9 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 @@ -12,6 +12,7 @@ variant = AA 0.25 weight = 0 [values] +cool_fan_speed_0 = 0 material_print_temperature = =default_material_print_temperature - 20 speed_topbottom = =math.ceil(speed_print * 30 / 55) support_bottom_distance = =support_z_distance 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 c6d99b63b5..e0d3aa4d50 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 @@ -17,7 +17,6 @@ machine_nozzle_heat_up_speed = 1.4 material_print_temperature = =default_material_print_temperature - 20 ooze_shield_angle = 40 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) 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 ec86494397..369cbcd563 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 @@ -25,7 +25,6 @@ prime_tower_wipe_enabled = True raft_airgap = 0.25 retraction_hop = 2 retraction_hop_only_when_collides = True -retraction_min_travel = 0.8 speed_print = 50 speed_topbottom = =math.ceil(speed_print * 25 / 50) speed_wall = =math.ceil(speed_print * 40 / 50) 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 77082932a5..6485844da8 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 @@ -28,7 +28,6 @@ retraction_count_max = 15 retraction_extra_prime_amount = 0.2 retraction_hop = 2 retraction_hop_only_when_collides = True -retraction_min_travel = 0.8 retraction_prime_speed = 15 speed_print = 25 speed_wall = =math.ceil(speed_print * 25 / 25) diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.25_um-abs_0.1mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.25_um-abs_0.1mm.inst.cfg index ada1c2cefb..f989bcc3f6 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.25_um-abs_0.1mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.25_um-abs_0.1mm.inst.cfg @@ -12,10 +12,63 @@ variant = AA 0.25 weight = 0 [values] -material_print_temperature = =default_material_print_temperature - 20 -speed_topbottom = =math.ceil(speed_print * 30 / 55) +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size = 0.2 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled = True +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 1 +acceleration_infill = =acceleration_print +acceleration_ironing = 1000 +acceleration_layer_0 = =acceleration_wall_0 +acceleration_print = 3500 +acceleration_roofing = =acceleration_wall_0 +acceleration_topbottom = =acceleration_wall +acceleration_wall = =acceleration_infill +acceleration_wall_0 = 1500 +acceleration_wall_x = =acceleration_wall +bridge_skin_speed = =bridge_wall_speed +bridge_sparse_infill_max_density = 50 +bridge_wall_speed = 30 +cool_fan_speed_0 = 0 +cool_min_layer_time = 4 +infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' +infill_sparse_density = 15 +jerk_infill = =jerk_print +jerk_layer_0 = =jerk_wall_0 +jerk_print = =max(30, speed_print/2) +jerk_roofing = =jerk_wall_0 +jerk_topbottom = =jerk_wall +jerk_wall = =jerk_infill +jerk_wall_0 = =max(30, speed_wall_0/2) +machine_nozzle_cool_down_speed = 1.3 +machine_nozzle_heat_up_speed = 1.9 +material_extrusion_cool_down_speed = 0.8 +optimize_wall_printing_order = False +prime_tower_enable = False +raft_airgap = 0.15 +retraction_amount = 6.5 +retraction_prime_speed = 15 +retraction_speed = 45 +small_skin_on_surface = False +small_skin_width = 4 +speed_infill = =speed_print +speed_ironing = 20 +speed_layer_0 = 30 +speed_prime_tower = =speed_wall_0 +speed_print = 100 +speed_roofing = =math.ceil(speed_wall*(45/100)) +speed_support_interface = =speed_wall_0 +speed_topbottom = =speed_print +speed_wall = =speed_infill +speed_wall_0 = =math.ceil(speed_wall*(20/100)) +speed_wall_x = =speed_wall +speed_wall_x_roofing = =speed_roofing support_bottom_distance = =support_z_distance support_interface_enable = True +support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.3 +top_bottom_thickness = =max(1.2 , layer_height * 6) +wall_0_wipe_dist = 0.8 +z_seam_relative = True +z_seam_type = back +zig_zaggify_infill = True diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.25_um-petg_0.1mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.25_um-petg_0.1mm.inst.cfg index fe8efb08d8..e3965d9c5c 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.25_um-petg_0.1mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.25_um-petg_0.1mm.inst.cfg @@ -12,12 +12,61 @@ variant = AA 0.25 weight = 0 [values] -material_print_temperature = =default_material_print_temperature - 15 -speed_infill = =math.ceil(speed_print * 40 / 55) -speed_topbottom = =math.ceil(speed_print * 30 / 55) +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size = 0.2 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled = True +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 1 +acceleration_infill = =acceleration_print +acceleration_ironing = 1000 +acceleration_layer_0 = =acceleration_wall_0 +acceleration_print = 3500 +acceleration_roofing = =acceleration_wall_0 +acceleration_topbottom = =acceleration_wall +acceleration_wall = =acceleration_infill +acceleration_wall_0 = 1500 +acceleration_wall_x = =acceleration_wall +bridge_skin_speed = =bridge_wall_speed +bridge_sparse_infill_max_density = 50 +bridge_wall_speed = 30 +cool_min_layer_time = 4 +infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' +infill_sparse_density = 15 +jerk_infill = =jerk_print +jerk_layer_0 = =jerk_wall_0 +jerk_print = =max(30, speed_print/2) +jerk_roofing = =jerk_wall_0 +jerk_topbottom = =jerk_wall +jerk_wall = =jerk_infill +jerk_wall_0 = =max(30, speed_wall_0/2) +machine_nozzle_cool_down_speed = 1.4 +machine_nozzle_heat_up_speed = 1.7 +material_extrusion_cool_down_speed = 0.7 +optimize_wall_printing_order = False +prime_tower_enable = False +retraction_amount = 8 +retraction_prime_speed = 15 +retraction_speed = 45 +small_skin_on_surface = False +small_skin_width = 4 +speed_infill = =speed_print +speed_ironing = 20 +speed_layer_0 = 30 +speed_prime_tower = =speed_wall_0 +speed_print = 100 +speed_roofing = =math.ceil(speed_wall*(45/100)) +speed_support_interface = =speed_wall_0 +speed_topbottom = =speed_print +speed_wall = =speed_infill +speed_wall_0 = =math.ceil(speed_wall*(20/100)) +speed_wall_x = =speed_wall +speed_wall_x_roofing = =speed_roofing support_bottom_distance = =support_z_distance support_interface_enable = True +support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height -top_bottom_thickness = 0.8 +support_z_distance = 0.3 +top_bottom_thickness = =max(1.2 , layer_height * 6) +wall_0_wipe_dist = 0.8 +z_seam_relative = True +z_seam_type = back +zig_zaggify_infill = True diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.25_um-pla_0.1mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.25_um-pla_0.1mm.inst.cfg index b9ec617a19..9589f2f915 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.25_um-pla_0.1mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.25_um-pla_0.1mm.inst.cfg @@ -12,21 +12,62 @@ variant = AA 0.25 weight = 0 [values] -brim_width = 8 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size = 0.2 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled = True +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 2 +acceleration_infill = =acceleration_print +acceleration_ironing = 1000 +acceleration_layer_0 = =acceleration_wall_0 +acceleration_print = 3500 +acceleration_roofing = =acceleration_wall_0 +acceleration_topbottom = =acceleration_wall +acceleration_wall = =acceleration_infill +acceleration_wall_0 = 1500 +acceleration_wall_x = =acceleration_wall +bridge_skin_speed = =bridge_wall_speed +bridge_sparse_infill_max_density = 50 +bridge_wall_speed = 30 +cool_min_layer_time = 6 infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' -machine_nozzle_cool_down_speed = 0.9 -machine_nozzle_heat_up_speed = 1.4 -material_print_temperature = =default_material_print_temperature - 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) +infill_sparse_density = 15 +jerk_infill = =jerk_print +jerk_layer_0 = =jerk_wall_0 +jerk_print = =max(30, speed_print/2) +jerk_roofing = =jerk_wall_0 +jerk_topbottom = =jerk_wall +jerk_wall = =jerk_infill +jerk_wall_0 = =max(30, speed_wall_0/2) +machine_nozzle_cool_down_speed = 1.3 +machine_nozzle_heat_up_speed = 1.9 +material_extrusion_cool_down_speed = 0.7 +optimize_wall_printing_order = False +prime_tower_enable = False +raft_airgap = 0.25 +retraction_amount = 6.5 +retraction_prime_speed = =retraction_speed +retraction_speed = 45 +small_skin_on_surface = False +small_skin_width = 4 +speed_infill = =speed_print +speed_ironing = 20 +speed_layer_0 = 30 +speed_prime_tower = =speed_wall_0 +speed_print = 100 +speed_roofing = =math.ceil(speed_wall*(45/100)) +speed_support_interface = =speed_wall_0 +speed_topbottom = =speed_print +speed_wall = =speed_infill +speed_wall_0 = =math.ceil(speed_wall*(20/100)) +speed_wall_x = =speed_wall +speed_wall_x_roofing = =speed_roofing support_bottom_distance = =support_z_distance support_interface_enable = True +support_structure = tree 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 -wall_0_wipe_dist = 0.25 +support_z_distance = 0.3 +top_bottom_thickness = =max(1 , layer_height * 5) +wall_0_wipe_dist = 0.8 +z_seam_relative = True +z_seam_type = back +zig_zaggify_infill = True diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.25_um-tough-pla_0.1mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.25_um-tough-pla_0.1mm.inst.cfg index 4ffc038ac5..b8aec4972f 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.25_um-tough-pla_0.1mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.25_um-tough-pla_0.1mm.inst.cfg @@ -12,20 +12,62 @@ variant = AA 0.25 weight = 0 [values] -brim_width = 8 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size = 0.2 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled = True +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 2 +acceleration_infill = =acceleration_print +acceleration_ironing = 1000 +acceleration_layer_0 = =acceleration_wall_0 +acceleration_print = 3500 +acceleration_roofing = =acceleration_wall_0 +acceleration_topbottom = =acceleration_wall +acceleration_wall = =acceleration_infill +acceleration_wall_0 = 1500 +acceleration_wall_x = =acceleration_wall +bridge_skin_speed = =bridge_wall_speed +bridge_sparse_infill_max_density = 50 +bridge_wall_speed = 30 +cool_min_layer_time = 6 infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' -machine_nozzle_cool_down_speed = 0.9 -machine_nozzle_heat_up_speed = 1.4 -material_print_temperature = =default_material_print_temperature - 5 -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) +infill_sparse_density = 15 +jerk_infill = =jerk_print +jerk_layer_0 = =jerk_wall_0 +jerk_print = =max(30, speed_print/2) +jerk_roofing = =jerk_wall_0 +jerk_topbottom = =jerk_wall +jerk_wall = =jerk_infill +jerk_wall_0 = =max(30, speed_wall_0/2) +machine_nozzle_cool_down_speed = 1.3 +machine_nozzle_heat_up_speed = 1.9 +material_extrusion_cool_down_speed = 0.7 +optimize_wall_printing_order = False +prime_tower_enable = False +raft_airgap = 0.25 +retraction_amount = 6.5 +retraction_prime_speed = =retraction_speed +retraction_speed = 45 +small_skin_on_surface = False +small_skin_width = 4 +speed_infill = =speed_print +speed_ironing = 20 +speed_layer_0 = 26 +speed_prime_tower = =speed_wall_0 +speed_print = 100 +speed_roofing = =math.ceil(speed_wall*(45/100)) +speed_support_interface = =speed_wall_0 +speed_topbottom = =speed_print +speed_wall = =speed_infill +speed_wall_0 = =math.ceil(speed_wall*(20/100)) +speed_wall_x = =speed_wall +speed_wall_x_roofing = =speed_roofing support_bottom_distance = =support_z_distance support_interface_enable = True +support_structure = tree 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 +support_z_distance = 0.3 +top_bottom_thickness = =max(1 , layer_height * 5) +wall_0_wipe_dist = 0.8 +z_seam_relative = True +z_seam_type = back +zig_zaggify_infill = True 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 f46f816cfb..c9eebee8a0 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 @@ -26,7 +26,6 @@ prime_tower_wipe_enabled = True raft_airgap = 0.25 retraction_hop = 2 retraction_hop_only_when_collides = True -retraction_min_travel = 0.8 speed_print = 50 speed_topbottom = =math.ceil(speed_print * 25 / 50) speed_wall = =math.ceil(speed_print * 40 / 50) 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 2c23449373..bcd04f4b24 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 @@ -25,7 +25,6 @@ prime_tower_wipe_enabled = True raft_airgap = 0.25 retraction_hop = 2 retraction_hop_only_when_collides = True -retraction_min_travel = 0.8 speed_print = 50 speed_topbottom = =math.ceil(speed_print * 25 / 50) speed_wall = =math.ceil(speed_print * 40 / 50) 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 e0899c8dc2..278e502231 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 @@ -26,7 +26,6 @@ prime_tower_wipe_enabled = True raft_airgap = 0.25 retraction_hop = 2 retraction_hop_only_when_collides = True -retraction_min_travel = 0.8 speed_print = 50 speed_topbottom = =math.ceil(speed_print * 25 / 50) speed_wall = =math.ceil(speed_print * 40 / 50) 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 329bd095d5..1baf43933c 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 @@ -25,7 +25,6 @@ prime_tower_wipe_enabled = True raft_airgap = 0.25 retraction_hop = 2 retraction_hop_only_when_collides = True -retraction_min_travel = 0.8 speed_print = 50 speed_topbottom = =math.ceil(speed_print * 25 / 50) speed_wall = =math.ceil(speed_print * 40 / 50) 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 eee8fc31b6..3b106196f2 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 @@ -28,7 +28,6 @@ retraction_count_max = 15 retraction_extra_prime_amount = 0.8 retraction_hop = 2 retraction_hop_only_when_collides = True -retraction_min_travel = 0.8 speed_print = 25 speed_topbottom = =math.ceil(speed_print * 25 / 25) speed_wall = =math.ceil(speed_print * 25 / 25) 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 fa87825718..455338a901 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 @@ -29,7 +29,6 @@ retraction_count_max = 15 retraction_extra_prime_amount = 0.8 retraction_hop = 2 retraction_hop_only_when_collides = True -retraction_min_travel = 0.8 speed_print = 25 speed_topbottom = =math.ceil(speed_print * 25 / 25) speed_wall = =math.ceil(speed_print * 25 / 25) 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 6c90ec685f..b1f5e1f19a 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 @@ -29,7 +29,6 @@ retraction_count_max = 15 retraction_extra_prime_amount = 0.8 retraction_hop = 2 retraction_hop_only_when_collides = True -retraction_min_travel = 0.8 speed_print = 25 speed_topbottom = =math.ceil(speed_print * 25 / 25) speed_wall = =math.ceil(speed_print * 25 / 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 15018203e9..601886a065 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 @@ -28,7 +28,6 @@ prime_tower_wipe_enabled = True retraction_count_max = 15 retraction_extra_prime_amount = 0.8 retraction_hop_only_when_collides = True -retraction_min_travel = =line_width * 2 skin_line_width = =round(line_width / 0.8, 2) speed_print = 25 speed_topbottom = =math.ceil(speed_print * 0.8) 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 1b9912c1d6..bb303eeb33 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 @@ -29,7 +29,6 @@ prime_tower_wipe_enabled = True retraction_count_max = 15 retraction_extra_prime_amount = 0.8 retraction_hop_only_when_collides = True -retraction_min_travel = =line_width * 2 skin_line_width = =round(line_width / 0.8, 2) speed_print = 25 speed_topbottom = =math.ceil(speed_print * 0.8) 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 971cee7b3a..85c37d439d 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 @@ -28,7 +28,6 @@ prime_tower_wipe_enabled = True retraction_count_max = 15 retraction_extra_prime_amount = 0.8 retraction_hop_only_when_collides = True -retraction_min_travel = =line_width * 2 skin_line_width = =round(line_width / 0.8, 2) speed_print = 25 speed_topbottom = =math.ceil(speed_print * 0.8) diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-abs_0.06mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-abs_0.06mm.inst.cfg index 312afa0421..de5e0faf2e 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-abs_0.06mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-abs_0.06mm.inst.cfg @@ -12,18 +12,63 @@ variant = AA 0.4 weight = 1 [values] -machine_nozzle_cool_down_speed = 0.8 -machine_nozzle_heat_up_speed = 1.5 -material_final_print_temperature = =material_print_temperature - 20 -material_print_temperature = =default_material_print_temperature - 10 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size = 0.2 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled = True +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 1 +acceleration_infill = =acceleration_print +acceleration_ironing = 1000 +acceleration_layer_0 = =acceleration_wall_0 +acceleration_print = 3500 +acceleration_roofing = =acceleration_wall_0 +acceleration_topbottom = =acceleration_wall +acceleration_wall = =acceleration_infill +acceleration_wall_0 = 1500 +acceleration_wall_x = =acceleration_wall +bridge_skin_speed = =bridge_wall_speed +bridge_sparse_infill_max_density = 50 +bridge_wall_speed = 30 +cool_min_layer_time = 4 +infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' +infill_sparse_density = 15 +jerk_infill = =jerk_print +jerk_layer_0 = =jerk_wall_0 +jerk_print = =max(30, speed_print/2) +jerk_roofing = =jerk_wall_0 +jerk_topbottom = =jerk_wall +jerk_wall = =jerk_infill +jerk_wall_0 = =max(30, speed_wall_0/2) +machine_nozzle_cool_down_speed = 1.3 +machine_nozzle_heat_up_speed = 1.9 +material_extrusion_cool_down_speed = 0.8 +material_max_flowrate = 20 +optimize_wall_printing_order = False prime_tower_enable = False raft_airgap = 0.15 -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) +retraction_amount = 6.5 +retraction_prime_speed = 15 +retraction_speed = 45 +small_skin_on_surface = False +small_skin_width = 4 +speed_infill = =speed_print +speed_ironing = 20 +speed_layer_0 = 30 +speed_prime_tower = =speed_wall_0 +speed_print = 100 +speed_roofing = =math.ceil(speed_wall*(45/100)) +speed_support_interface = =speed_wall_0 +speed_topbottom = =speed_print +speed_wall = =speed_infill +speed_wall_0 = =math.ceil(speed_wall*(20/100)) +speed_wall_x = =speed_wall +speed_wall_x_roofing = =speed_roofing support_bottom_distance = =support_z_distance support_interface_enable = True +support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.3 +top_bottom_thickness = =max(1.2 , layer_height * 6) +wall_0_wipe_dist = 0.8 +z_seam_relative = True +z_seam_type = back +zig_zaggify_infill = True diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-abs_0.15mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-abs_0.15mm.inst.cfg index cd8e392dfa..c39c6d42c8 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-abs_0.15mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-abs_0.15mm.inst.cfg @@ -52,7 +52,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) @@ -66,7 +66,7 @@ support_bottom_distance = =support_z_distance support_interface_enable = True support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.3 top_bottom_thickness = =max(1.2 , layer_height * 6) wall_0_wipe_dist = 0.8 z_seam_relative = True diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-abs_0.1mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-abs_0.1mm.inst.cfg index b53e8275a2..08bb2befdf 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-abs_0.1mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-abs_0.1mm.inst.cfg @@ -12,18 +12,63 @@ variant = AA 0.4 weight = 0 [values] -machine_nozzle_cool_down_speed = 0.85 -machine_nozzle_heat_up_speed = 1.5 -material_final_print_temperature = =material_print_temperature - 20 -material_print_temperature = =default_material_print_temperature - 5 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size = 0.2 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled = True +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 1 +acceleration_infill = =acceleration_print +acceleration_ironing = 1000 +acceleration_layer_0 = =acceleration_wall_0 +acceleration_print = 3500 +acceleration_roofing = =acceleration_wall_0 +acceleration_topbottom = =acceleration_wall +acceleration_wall = =acceleration_infill +acceleration_wall_0 = 1500 +acceleration_wall_x = =acceleration_wall +bridge_skin_speed = =bridge_wall_speed +bridge_sparse_infill_max_density = 50 +bridge_wall_speed = 30 +cool_min_layer_time = 4 +infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' +infill_sparse_density = 15 +jerk_infill = =jerk_print +jerk_layer_0 = =jerk_wall_0 +jerk_print = =max(30, speed_print/2) +jerk_roofing = =jerk_wall_0 +jerk_topbottom = =jerk_wall +jerk_wall = =jerk_infill +jerk_wall_0 = =max(30, speed_wall_0/2) +machine_nozzle_cool_down_speed = 1.3 +machine_nozzle_heat_up_speed = 1.9 +material_extrusion_cool_down_speed = 0.8 +material_max_flowrate = 20 +optimize_wall_printing_order = False prime_tower_enable = False raft_airgap = 0.15 -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) +retraction_amount = 6.5 +retraction_prime_speed = 15 +retraction_speed = 45 +small_skin_on_surface = False +small_skin_width = 4 +speed_infill = =speed_print +speed_ironing = 20 +speed_layer_0 = 30 +speed_prime_tower = =speed_wall_0 +speed_print = 100 +speed_roofing = =math.ceil(speed_wall*(45/100)) +speed_support_interface = =speed_wall_0 +speed_topbottom = =speed_print +speed_wall = =speed_infill +speed_wall_0 = =math.ceil(speed_wall*(20/100)) +speed_wall_x = =speed_wall +speed_wall_x_roofing = =speed_roofing support_bottom_distance = =support_z_distance support_interface_enable = True +support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.3 +top_bottom_thickness = =max(1.2 , layer_height * 6) +wall_0_wipe_dist = 0.8 +z_seam_relative = True +z_seam_type = back +zig_zaggify_infill = True diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-abs_0.2mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-abs_0.2mm.inst.cfg index 29f3cb056f..89b8386d2f 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-abs_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-abs_0.2mm.inst.cfg @@ -28,6 +28,7 @@ bridge_skin_speed = =bridge_wall_speed bridge_sparse_infill_max_density = 50 bridge_wall_speed = 30 cool_min_layer_time = 4 +infill_material_flow = =1.05 * material_flow infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' infill_sparse_density = 15 jerk_infill = =jerk_print @@ -49,11 +50,12 @@ raft_airgap = 0.15 retraction_amount = 6.5 retraction_prime_speed = 15 retraction_speed = 45 +skin_material_flow = =material_flow small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) @@ -67,9 +69,11 @@ support_bottom_distance = =support_z_distance support_interface_enable = True support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.3 top_bottom_thickness = =max(1.2 , layer_height * 6) wall_0_wipe_dist = 0.8 +wall_x_material_flow = =1.05 * wall_material_flow +wall_x_material_flow_roofing = =wall_material_flow z_seam_relative = True z_seam_type = back zig_zaggify_infill = True diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-abs_0.3mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-abs_0.3mm.inst.cfg index 94535ab9c1..cc0da1a253 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-abs_0.3mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-abs_0.3mm.inst.cfg @@ -53,7 +53,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) @@ -67,7 +67,7 @@ support_bottom_distance = =support_z_distance support_interface_enable = True support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.4 top_bottom_thickness = =max(1.2 , layer_height * 6) wall_0_wipe_dist = 0.8 wall_line_width_0 = =line_width * (1 + magic_spiralize * 0.25) diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-petg_0.06mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-petg_0.06mm.inst.cfg index 1b7919bd02..7eb5de8b64 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-petg_0.06mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-petg_0.06mm.inst.cfg @@ -12,16 +12,62 @@ variant = AA 0.4 weight = 1 [values] -infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'triangles' -machine_nozzle_cool_down_speed = 0.85 -machine_nozzle_heat_up_speed = 1.5 -material_print_temperature = =default_material_print_temperature - 10 -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) +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size = 0.2 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled = True +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 1 +acceleration_infill = =acceleration_print +acceleration_ironing = 1000 +acceleration_layer_0 = =acceleration_wall_0 +acceleration_print = 3500 +acceleration_roofing = =acceleration_wall_0 +acceleration_topbottom = =acceleration_wall +acceleration_wall = =acceleration_infill +acceleration_wall_0 = 1500 +acceleration_wall_x = =acceleration_wall +bridge_skin_speed = =bridge_wall_speed +bridge_sparse_infill_max_density = 50 +bridge_wall_speed = 30 +cool_min_layer_time = 4 +infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' +infill_sparse_density = 15 +jerk_infill = =jerk_print +jerk_layer_0 = =jerk_wall_0 +jerk_print = =max(30, speed_print/2) +jerk_roofing = =jerk_wall_0 +jerk_topbottom = =jerk_wall +jerk_wall = =jerk_infill +jerk_wall_0 = =max(30, speed_wall_0/2) +machine_nozzle_cool_down_speed = 1.4 +machine_nozzle_heat_up_speed = 1.7 +material_extrusion_cool_down_speed = 0.7 +material_max_flowrate = 20 +optimize_wall_printing_order = False +prime_tower_enable = False +retraction_amount = 8 +retraction_prime_speed = 15 +retraction_speed = 45 +small_skin_on_surface = False +small_skin_width = 4 +speed_infill = =speed_print +speed_ironing = 20 +speed_layer_0 = 30 +speed_prime_tower = =speed_wall_0 +speed_print = 100 +speed_roofing = =math.ceil(speed_wall*(45/100)) +speed_support_interface = =speed_wall_0 +speed_topbottom = =speed_print +speed_wall = =speed_infill +speed_wall_0 = =math.ceil(speed_wall*(20/100)) +speed_wall_x = =speed_wall +speed_wall_x_roofing = =speed_roofing support_bottom_distance = =support_z_distance support_interface_enable = True +support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.3 +top_bottom_thickness = =max(1.2 , layer_height * 6) +wall_0_wipe_dist = 0.8 +z_seam_relative = True +z_seam_type = back +zig_zaggify_infill = True diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-petg_0.15mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-petg_0.15mm.inst.cfg index 4c2861436a..d4431382dd 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-petg_0.15mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-petg_0.15mm.inst.cfg @@ -51,7 +51,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) @@ -65,7 +65,7 @@ support_bottom_distance = =support_z_distance support_interface_enable = True support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.3 top_bottom_thickness = =max(1.2 , layer_height * 6) wall_0_wipe_dist = 0.8 z_seam_relative = True diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-petg_0.1mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-petg_0.1mm.inst.cfg index afa05aa2cf..bb7de56356 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-petg_0.1mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-petg_0.1mm.inst.cfg @@ -12,16 +12,62 @@ variant = AA 0.4 weight = 0 [values] -infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'triangles' -machine_nozzle_cool_down_speed = 0.85 -machine_nozzle_heat_up_speed = 1.5 -material_print_temperature = =default_material_print_temperature - 5 -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) +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size = 0.2 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled = True +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 1 +acceleration_infill = =acceleration_print +acceleration_ironing = 1000 +acceleration_layer_0 = =acceleration_wall_0 +acceleration_print = 3500 +acceleration_roofing = =acceleration_wall_0 +acceleration_topbottom = =acceleration_wall +acceleration_wall = =acceleration_infill +acceleration_wall_0 = 1500 +acceleration_wall_x = =acceleration_wall +bridge_skin_speed = =bridge_wall_speed +bridge_sparse_infill_max_density = 50 +bridge_wall_speed = 30 +cool_min_layer_time = 4 +infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' +infill_sparse_density = 15 +jerk_infill = =jerk_print +jerk_layer_0 = =jerk_wall_0 +jerk_print = =max(30, speed_print/2) +jerk_roofing = =jerk_wall_0 +jerk_topbottom = =jerk_wall +jerk_wall = =jerk_infill +jerk_wall_0 = =max(30, speed_wall_0/2) +machine_nozzle_cool_down_speed = 1.4 +machine_nozzle_heat_up_speed = 1.7 +material_extrusion_cool_down_speed = 0.7 +material_max_flowrate = 20 +optimize_wall_printing_order = False +prime_tower_enable = False +retraction_amount = 8 +retraction_prime_speed = 15 +retraction_speed = 45 +small_skin_on_surface = False +small_skin_width = 4 +speed_infill = =speed_print +speed_ironing = 20 +speed_layer_0 = 30 +speed_prime_tower = =speed_wall_0 +speed_print = 100 +speed_roofing = =math.ceil(speed_wall*(45/100)) +speed_support_interface = =speed_wall_0 +speed_topbottom = =speed_print +speed_wall = =speed_infill +speed_wall_0 = =math.ceil(speed_wall*(20/100)) +speed_wall_x = =speed_wall +speed_wall_x_roofing = =speed_roofing support_bottom_distance = =support_z_distance support_interface_enable = True +support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.3 +top_bottom_thickness = =max(1.2 , layer_height * 6) +wall_0_wipe_dist = 0.8 +z_seam_relative = True +z_seam_type = back +zig_zaggify_infill = True diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-petg_0.2mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-petg_0.2mm.inst.cfg index 7e29e3a9d0..c304f13e34 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-petg_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-petg_0.2mm.inst.cfg @@ -28,6 +28,7 @@ bridge_skin_speed = =bridge_wall_speed bridge_sparse_infill_max_density = 50 bridge_wall_speed = 30 cool_min_layer_time = 4 +infill_material_flow = =1.1 * material_flow infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' infill_sparse_density = 15 jerk_infill = =jerk_print @@ -48,11 +49,12 @@ prime_tower_enable = False retraction_amount = 8 retraction_prime_speed = 15 retraction_speed = 45 +skin_material_flow = =1.05 * material_flow small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) @@ -66,9 +68,11 @@ support_bottom_distance = =support_z_distance support_interface_enable = True support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.3 top_bottom_thickness = =max(1.2 , layer_height * 6) wall_0_wipe_dist = 0.8 +wall_x_material_flow = =1.1 * wall_material_flow +wall_x_material_flow_roofing = =wall_material_flow z_seam_relative = True z_seam_type = back zig_zaggify_infill = True diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-petg_0.3mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-petg_0.3mm.inst.cfg index 2a74986a2a..854b868259 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-petg_0.3mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-petg_0.3mm.inst.cfg @@ -52,7 +52,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) @@ -66,7 +66,7 @@ support_bottom_distance = =support_z_distance support_interface_enable = True support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.4 top_bottom_thickness = =max(1.2 , layer_height * 6) wall_0_wipe_dist = 0.8 wall_line_width_0 = =line_width * (1 + magic_spiralize * 0.25) diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-pla_0.06mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-pla_0.06mm.inst.cfg index 2939389a3c..9678ba9523 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-pla_0.06mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-pla_0.06mm.inst.cfg @@ -12,18 +12,63 @@ variant = AA 0.4 weight = 1 [values] -machine_nozzle_cool_down_speed = 0.75 -machine_nozzle_heat_up_speed = 1.6 -material_print_temperature = =default_material_print_temperature - 5 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size = 0.2 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled = True +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 2 +acceleration_infill = =acceleration_print +acceleration_ironing = 1000 +acceleration_layer_0 = =acceleration_wall_0 +acceleration_print = 3500 +acceleration_roofing = =acceleration_wall_0 +acceleration_topbottom = =acceleration_wall +acceleration_wall = =acceleration_infill +acceleration_wall_0 = 1500 +acceleration_wall_x = =acceleration_wall +bridge_skin_speed = =bridge_wall_speed +bridge_sparse_infill_max_density = 50 +bridge_wall_speed = 30 +cool_min_layer_time = 6 +infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' +infill_sparse_density = 15 +jerk_infill = =jerk_print +jerk_layer_0 = =jerk_wall_0 +jerk_print = =max(30, speed_print/2) +jerk_roofing = =jerk_wall_0 +jerk_topbottom = =jerk_wall +jerk_wall = =jerk_infill +jerk_wall_0 = =max(30, speed_wall_0/2) +machine_nozzle_cool_down_speed = 1.3 +machine_nozzle_heat_up_speed = 1.9 +material_extrusion_cool_down_speed = 0.7 +material_max_flowrate = 12 +optimize_wall_printing_order = False prime_tower_enable = False raft_airgap = 0.25 +retraction_amount = 6.5 retraction_prime_speed = =retraction_speed -speed_print = 50 -speed_topbottom = =math.ceil(speed_print * 35 / 50) -speed_wall = =math.ceil(speed_print * 35 / 50) +retraction_speed = 45 +small_skin_on_surface = False +small_skin_width = 4 +speed_infill = =speed_print +speed_ironing = 20 +speed_layer_0 = 30 +speed_prime_tower = =speed_wall_0 +speed_print = 100 +speed_roofing = =math.ceil(speed_wall*(45/100)) +speed_support_interface = =speed_wall_0 +speed_topbottom = =speed_print +speed_wall = =speed_infill +speed_wall_0 = =math.ceil(speed_wall*(20/100)) +speed_wall_x = =speed_wall +speed_wall_x_roofing = =speed_roofing support_bottom_distance = =support_z_distance support_interface_enable = True +support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height -top_bottom_thickness = 1 +support_z_distance = 0.3 +top_bottom_thickness = =max(1 , layer_height * 5) +wall_0_wipe_dist = 0.8 +z_seam_relative = True +z_seam_type = back +zig_zaggify_infill = True diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-pla_0.15mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-pla_0.15mm.inst.cfg index 0f3fee265b..c53596bc9f 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-pla_0.15mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-pla_0.15mm.inst.cfg @@ -52,7 +52,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) @@ -66,7 +66,7 @@ support_bottom_distance = =support_z_distance support_interface_enable = True support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.3 top_bottom_thickness = =max(1 , layer_height * 5) wall_0_wipe_dist = 0.8 z_seam_relative = True diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-pla_0.1mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-pla_0.1mm.inst.cfg index 2b430c1afb..58a8a1ebb0 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-pla_0.1mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-pla_0.1mm.inst.cfg @@ -12,14 +12,63 @@ variant = AA 0.4 weight = 0 [values] -machine_nozzle_cool_down_speed = 0.75 -machine_nozzle_heat_up_speed = 1.6 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size = 0.2 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled = True +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 2 +acceleration_infill = =acceleration_print +acceleration_ironing = 1000 +acceleration_layer_0 = =acceleration_wall_0 +acceleration_print = 3500 +acceleration_roofing = =acceleration_wall_0 +acceleration_topbottom = =acceleration_wall +acceleration_wall = =acceleration_infill +acceleration_wall_0 = 1500 +acceleration_wall_x = =acceleration_wall +bridge_skin_speed = =bridge_wall_speed +bridge_sparse_infill_max_density = 50 +bridge_wall_speed = 30 +cool_min_layer_time = 6 +infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' +infill_sparse_density = 15 +jerk_infill = =jerk_print +jerk_layer_0 = =jerk_wall_0 +jerk_print = =max(30, speed_print/2) +jerk_roofing = =jerk_wall_0 +jerk_topbottom = =jerk_wall +jerk_wall = =jerk_infill +jerk_wall_0 = =max(30, speed_wall_0/2) +machine_nozzle_cool_down_speed = 1.3 +machine_nozzle_heat_up_speed = 1.9 +material_extrusion_cool_down_speed = 0.7 +material_max_flowrate = 12 +optimize_wall_printing_order = False prime_tower_enable = False raft_airgap = 0.25 +retraction_amount = 6.5 retraction_prime_speed = =retraction_speed +retraction_speed = 45 +small_skin_on_surface = False +small_skin_width = 4 +speed_infill = =speed_print +speed_ironing = 20 +speed_layer_0 = 30 +speed_prime_tower = =speed_wall_0 +speed_print = 100 +speed_roofing = =math.ceil(speed_wall*(45/100)) +speed_support_interface = =speed_wall_0 +speed_topbottom = =speed_print +speed_wall = =speed_infill +speed_wall_0 = =math.ceil(speed_wall*(20/100)) +speed_wall_x = =speed_wall +speed_wall_x_roofing = =speed_roofing support_bottom_distance = =support_z_distance support_interface_enable = True +support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height -top_bottom_thickness = 1 +support_z_distance = 0.3 +top_bottom_thickness = =max(1 , layer_height * 5) +wall_0_wipe_dist = 0.8 +z_seam_relative = True +z_seam_type = back +zig_zaggify_infill = True diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-pla_0.2mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-pla_0.2mm.inst.cfg index 100f2485ba..2870c09199 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-pla_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-pla_0.2mm.inst.cfg @@ -28,6 +28,7 @@ bridge_skin_speed = =bridge_wall_speed bridge_sparse_infill_max_density = 50 bridge_wall_speed = 30 cool_min_layer_time = 6 +infill_material_flow = =1.1 * material_flow infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' infill_sparse_density = 15 jerk_infill = =jerk_print @@ -49,11 +50,12 @@ raft_airgap = 0.25 retraction_amount = 6.5 retraction_prime_speed = =retraction_speed retraction_speed = 45 +skin_material_flow = =1.05 * material_flow small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) @@ -67,9 +69,11 @@ support_bottom_distance = =support_z_distance support_interface_enable = True support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.3 top_bottom_thickness = =max(1 , layer_height * 5) wall_0_wipe_dist = 0.8 +wall_x_material_flow = =1.1 * wall_material_flow +wall_x_material_flow_roofing = =wall_material_flow z_seam_relative = True z_seam_type = back zig_zaggify_infill = True diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-pla_0.3mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-pla_0.3mm.inst.cfg index d06fa7c63b..6f450463b9 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-pla_0.3mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-pla_0.3mm.inst.cfg @@ -53,7 +53,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) @@ -67,7 +67,7 @@ support_bottom_distance = =support_z_distance support_interface_enable = True support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.3 top_bottom_thickness = =max(1 , layer_height * 5) wall_0_wipe_dist = 0.8 wall_line_width_0 = =line_width * (1 + magic_spiralize * 0.25) diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.06mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.06mm.inst.cfg index c84c2fb66e..e193aa51c3 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.06mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.06mm.inst.cfg @@ -12,18 +12,63 @@ variant = AA 0.4 weight = 1 [values] -machine_nozzle_cool_down_speed = 0.75 -machine_nozzle_heat_up_speed = 1.6 -material_print_temperature = =default_material_print_temperature - 5 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size = 0.2 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled = True +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 2 +acceleration_infill = =acceleration_print +acceleration_ironing = 1000 +acceleration_layer_0 = =acceleration_wall_0 +acceleration_print = 3500 +acceleration_roofing = =acceleration_wall_0 +acceleration_topbottom = =acceleration_wall +acceleration_wall = =acceleration_infill +acceleration_wall_0 = 1500 +acceleration_wall_x = =acceleration_wall +bridge_skin_speed = =bridge_wall_speed +bridge_sparse_infill_max_density = 50 +bridge_wall_speed = 30 +cool_min_layer_time = 6 +infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' +infill_sparse_density = 15 +jerk_infill = =jerk_print +jerk_layer_0 = =jerk_wall_0 +jerk_print = =max(30, speed_print/2) +jerk_roofing = =jerk_wall_0 +jerk_topbottom = =jerk_wall +jerk_wall = =jerk_infill +jerk_wall_0 = =max(30, speed_wall_0/2) +machine_nozzle_cool_down_speed = 1.3 +machine_nozzle_heat_up_speed = 1.9 +material_extrusion_cool_down_speed = 0.7 +material_max_flowrate = 14 +optimize_wall_printing_order = False prime_tower_enable = False +raft_airgap = 0.25 +retraction_amount = 6.5 retraction_prime_speed = =retraction_speed -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) +retraction_speed = 45 +small_skin_on_surface = False +small_skin_width = 4 +speed_infill = =speed_print +speed_ironing = 20 +speed_layer_0 = 26 +speed_prime_tower = =speed_wall_0 +speed_print = 100 +speed_roofing = =math.ceil(speed_wall*(45/100)) +speed_support_interface = =speed_wall_0 +speed_topbottom = =speed_print +speed_wall = =speed_infill +speed_wall_0 = =math.ceil(speed_wall*(20/100)) +speed_wall_x = =speed_wall +speed_wall_x_roofing = =speed_roofing support_bottom_distance = =support_z_distance support_interface_enable = True +support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height -top_bottom_thickness = 1.2 +support_z_distance = 0.3 +top_bottom_thickness = =max(1 , layer_height * 5) +wall_0_wipe_dist = 0.8 +z_seam_relative = True +z_seam_type = back +zig_zaggify_infill = True diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.15mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.15mm.inst.cfg index d0a2747ea4..622f2030e4 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.15mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.15mm.inst.cfg @@ -52,7 +52,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 26 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) @@ -66,7 +66,7 @@ support_bottom_distance = =support_z_distance support_interface_enable = True support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.35 top_bottom_thickness = =max(1 , layer_height * 5) wall_0_wipe_dist = 0.8 z_seam_relative = True diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.1mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.1mm.inst.cfg index 47687fb5be..09f02aa375 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.1mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.1mm.inst.cfg @@ -12,18 +12,63 @@ variant = AA 0.4 weight = 0 [values] -machine_nozzle_cool_down_speed = 0.75 -machine_nozzle_heat_up_speed = 1.6 -material_print_temperature = =default_material_print_temperature - 5 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size = 0.2 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled = True +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 2 +acceleration_infill = =acceleration_print +acceleration_ironing = 1000 +acceleration_layer_0 = =acceleration_wall_0 +acceleration_print = 3500 +acceleration_roofing = =acceleration_wall_0 +acceleration_topbottom = =acceleration_wall +acceleration_wall = =acceleration_infill +acceleration_wall_0 = 1500 +acceleration_wall_x = =acceleration_wall +bridge_skin_speed = =bridge_wall_speed +bridge_sparse_infill_max_density = 50 +bridge_wall_speed = 30 +cool_min_layer_time = 6 +infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' +infill_sparse_density = 15 +jerk_infill = =jerk_print +jerk_layer_0 = =jerk_wall_0 +jerk_print = =max(30, speed_print/2) +jerk_roofing = =jerk_wall_0 +jerk_topbottom = =jerk_wall +jerk_wall = =jerk_infill +jerk_wall_0 = =max(30, speed_wall_0/2) +machine_nozzle_cool_down_speed = 1.3 +machine_nozzle_heat_up_speed = 1.9 +material_extrusion_cool_down_speed = 0.7 +material_max_flowrate = 14 +optimize_wall_printing_order = False prime_tower_enable = False +raft_airgap = 0.25 +retraction_amount = 6.5 retraction_prime_speed = =retraction_speed -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) +retraction_speed = 45 +small_skin_on_surface = False +small_skin_width = 4 +speed_infill = =speed_print +speed_ironing = 20 +speed_layer_0 = 26 +speed_prime_tower = =speed_wall_0 +speed_print = 100 +speed_roofing = =math.ceil(speed_wall*(45/100)) +speed_support_interface = =speed_wall_0 +speed_topbottom = =speed_print +speed_wall = =speed_infill +speed_wall_0 = =math.ceil(speed_wall*(20/100)) +speed_wall_x = =speed_wall +speed_wall_x_roofing = =speed_roofing support_bottom_distance = =support_z_distance support_interface_enable = True +support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height -top_bottom_thickness = 1.2 +support_z_distance = 0.3 +top_bottom_thickness = =max(1 , layer_height * 5) +wall_0_wipe_dist = 0.8 +z_seam_relative = True +z_seam_type = back +zig_zaggify_infill = True diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.2mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.2mm.inst.cfg index ea4761463c..3b82ebfac7 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.2mm.inst.cfg @@ -28,6 +28,7 @@ bridge_skin_speed = =bridge_wall_speed bridge_sparse_infill_max_density = 50 bridge_wall_speed = 30 cool_min_layer_time = 6 +infill_material_flow = =1.1 * material_flow infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' infill_sparse_density = 15 jerk_infill = =jerk_print @@ -48,11 +49,12 @@ raft_airgap = 0.25 retraction_amount = 6.5 retraction_prime_speed = =retraction_speed retraction_speed = 45 +skin_material_flow = =1.05 * material_flow small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 26 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) @@ -66,9 +68,11 @@ support_bottom_distance = =support_z_distance support_interface_enable = True support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.35 top_bottom_thickness = =max(1 , layer_height * 5) wall_0_wipe_dist = 0.8 +wall_x_material_flow = =1.1 * wall_material_flow +wall_x_material_flow_roofing = =wall_material_flow z_seam_relative = True z_seam_type = back zig_zaggify_infill = True diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.3mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.3mm.inst.cfg index 4ba2b956e9..2fd9e5ef2c 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.3mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_um-tough-pla_0.3mm.inst.cfg @@ -53,7 +53,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 26 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) @@ -67,7 +67,7 @@ support_bottom_distance = =support_z_distance support_interface_enable = True support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.4 top_bottom_thickness = =max(1 , layer_height * 5) wall_0_wipe_dist = 0.8 wall_line_width_0 = =line_width * (1 + magic_spiralize * 0.25) diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.8_pp_0.2mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_pp_0.2mm.inst.cfg index 163f32a36d..7619fcf43d 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.8_pp_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_pp_0.2mm.inst.cfg @@ -24,7 +24,6 @@ prime_tower_min_volume = 10 retraction_count_max = 15 retraction_extra_prime_amount = 0.5 retraction_hop = 0.5 -retraction_min_travel = 1.5 retraction_prime_speed = 15 speed_wall_x = =math.ceil(speed_wall * 30 / 30) switch_extruder_prime_speed = 15 diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.8_pp_0.3mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_pp_0.3mm.inst.cfg index 3f75c3366e..b157ed198c 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.8_pp_0.3mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_pp_0.3mm.inst.cfg @@ -24,7 +24,6 @@ prime_tower_min_volume = 15 retraction_count_max = 15 retraction_extra_prime_amount = 0.5 retraction_hop = 0.5 -retraction_min_travel = 1.5 retraction_prime_speed = 15 speed_wall_x = =math.ceil(speed_wall * 30 / 30) switch_extruder_prime_speed = 15 diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.8_pp_0.4mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_pp_0.4mm.inst.cfg index b2c5dab3c4..550a26c7f8 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.8_pp_0.4mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_pp_0.4mm.inst.cfg @@ -24,7 +24,6 @@ prime_tower_min_volume = 20 retraction_count_max = 15 retraction_extra_prime_amount = 0.5 retraction_hop = 0.5 -retraction_min_travel = 1.5 retraction_prime_speed = 15 speed_infill = =math.ceil(speed_wall * 30 / 30) speed_wall_x = =math.ceil(speed_wall * 30 / 30) diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.8_tpu_0.2mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_tpu_0.2mm.inst.cfg index 75949f45aa..5d6ce58f7c 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.8_tpu_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_tpu_0.2mm.inst.cfg @@ -27,7 +27,6 @@ retraction_count_max = 15 retraction_extra_prime_amount = 0.5 retraction_hop = 1.5 retraction_hop_only_when_collides = False -retraction_min_travel = =line_width * 2 retraction_prime_speed = 15 speed_print = 30 speed_topbottom = =math.ceil(speed_print * 25 / 30) diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.8_tpu_0.3mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_tpu_0.3mm.inst.cfg index 034bda5d09..1b69ada75d 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.8_tpu_0.3mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_tpu_0.3mm.inst.cfg @@ -28,7 +28,6 @@ retraction_count_max = 15 retraction_extra_prime_amount = 0.5 retraction_hop = 1.5 retraction_hop_only_when_collides = False -retraction_min_travel = =line_width * 2 retraction_prime_speed = 15 speed_print = 30 speed_topbottom = =math.ceil(speed_print * 23 / 30) diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.8_tpu_0.4mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_tpu_0.4mm.inst.cfg index e7189d5467..d678d7e178 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.8_tpu_0.4mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_tpu_0.4mm.inst.cfg @@ -27,7 +27,6 @@ retraction_count_max = 15 retraction_extra_prime_amount = 0.5 retraction_hop = 1.5 retraction_hop_only_when_collides = False -retraction_min_travel = =line_width * 2 retraction_prime_speed = 15 speed_infill = =speed_print speed_print = 30 diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.8_um-abs_0.2mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_um-abs_0.2mm.inst.cfg index 2051530eee..9d7b4455d6 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.8_um-abs_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_um-abs_0.2mm.inst.cfg @@ -56,7 +56,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.8_um-abs_0.3mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_um-abs_0.3mm.inst.cfg index 897b0e8688..e2a5c54c66 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.8_um-abs_0.3mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_um-abs_0.3mm.inst.cfg @@ -53,7 +53,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 75 speed_roofing = =math.ceil(speed_wall*(45/100)) diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.8_um-abs_0.4mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_um-abs_0.4mm.inst.cfg index 12e37a25d9..26d3dc7fb8 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.8_um-abs_0.4mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_um-abs_0.4mm.inst.cfg @@ -53,7 +53,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 50 speed_roofing = =math.ceil(speed_wall*(45/100)) diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.8_um-petg_0.2mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_um-petg_0.2mm.inst.cfg index e62880cf41..b1dae1cb7a 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.8_um-petg_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_um-petg_0.2mm.inst.cfg @@ -55,7 +55,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.8_um-petg_0.3mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_um-petg_0.3mm.inst.cfg index 0c35b29fe0..4d4ffa0059 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.8_um-petg_0.3mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_um-petg_0.3mm.inst.cfg @@ -54,7 +54,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 75 speed_roofing = =math.ceil(speed_wall*(45/100)) diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.8_um-petg_0.4mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_um-petg_0.4mm.inst.cfg index 1c8ba2c88b..5cc6a43e13 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.8_um-petg_0.4mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_um-petg_0.4mm.inst.cfg @@ -54,7 +54,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 50 speed_roofing = =math.ceil(speed_wall*(45/100)) diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.8_um-pla_0.2mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_um-pla_0.2mm.inst.cfg index f51cd7df60..59f8409483 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.8_um-pla_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_um-pla_0.2mm.inst.cfg @@ -56,7 +56,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.8_um-pla_0.3mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_um-pla_0.3mm.inst.cfg index 347f3bd093..a4cdd898f1 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.8_um-pla_0.3mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_um-pla_0.3mm.inst.cfg @@ -53,7 +53,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 65 speed_roofing = =math.ceil(speed_wall*(45/100)) diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.8_um-pla_0.4mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_um-pla_0.4mm.inst.cfg index 6aaf0461e2..79dc105f86 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.8_um-pla_0.4mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_um-pla_0.4mm.inst.cfg @@ -53,7 +53,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 45 speed_roofing = =math.ceil(speed_wall*(45/100)) diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.8_um-tough-pla_0.2mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_um-tough-pla_0.2mm.inst.cfg index 4064af789f..a76864a1a3 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.8_um-tough-pla_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_um-tough-pla_0.2mm.inst.cfg @@ -56,7 +56,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 26 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.8_um-tough-pla_0.3mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_um-tough-pla_0.3mm.inst.cfg index d509a82bb6..d364232726 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.8_um-tough-pla_0.3mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_um-tough-pla_0.3mm.inst.cfg @@ -53,7 +53,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 26 speed_prime_tower = =speed_wall_0 speed_print = 65 speed_roofing = =math.ceil(speed_wall*(45/100)) diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.8_um-tough-pla_0.4mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_um-tough-pla_0.4mm.inst.cfg index a6ac3f3895..02a71fa9b7 100644 --- a/resources/quality/ultimaker_s3/um_s3_aa0.8_um-tough-pla_0.4mm.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_um-tough-pla_0.4mm.inst.cfg @@ -53,7 +53,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 26 speed_prime_tower = =speed_wall_0 speed_print = 45 speed_roofing = =math.ceil(speed_wall*(45/100)) 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 2e09727a19..d26fe0daee 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 @@ -12,6 +12,7 @@ variant = AA 0.25 weight = 0 [values] +cool_fan_speed_0 = 0 material_print_temperature = =default_material_print_temperature - 20 speed_topbottom = =math.ceil(speed_print * 30 / 55) support_bottom_distance = =support_z_distance 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 38267fcf24..ea86a9a9a6 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 @@ -17,7 +17,6 @@ machine_nozzle_heat_up_speed = 1.4 material_print_temperature = =default_material_print_temperature - 20 ooze_shield_angle = 40 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) 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 5779142162..eef6e66a5e 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 @@ -25,7 +25,6 @@ prime_tower_wipe_enabled = True raft_airgap = 0.25 retraction_hop = 2 retraction_hop_only_when_collides = True -retraction_min_travel = 0.8 speed_print = 50 speed_topbottom = =math.ceil(speed_print * 25 / 50) speed_wall = =math.ceil(speed_print * 40 / 50) 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 64b1be79aa..56689c4bfa 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 @@ -28,7 +28,6 @@ retraction_count_max = 15 retraction_extra_prime_amount = 0.2 retraction_hop = 2 retraction_hop_only_when_collides = True -retraction_min_travel = 0.8 retraction_prime_speed = 15 speed_print = 25 speed_wall = =math.ceil(speed_print * 25 / 25) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_um-abs_0.1mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_um-abs_0.1mm.inst.cfg index 1b6c680650..29057ff13b 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.25_um-abs_0.1mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_um-abs_0.1mm.inst.cfg @@ -12,10 +12,63 @@ variant = AA 0.25 weight = 0 [values] -material_print_temperature = =default_material_print_temperature - 20 -speed_topbottom = =math.ceil(speed_print * 30 / 55) +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size = 0.2 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled = True +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 1 +acceleration_infill = =acceleration_print +acceleration_ironing = 1000 +acceleration_layer_0 = =acceleration_wall_0 +acceleration_print = 3500 +acceleration_roofing = =acceleration_wall_0 +acceleration_topbottom = =acceleration_wall +acceleration_wall = =acceleration_infill +acceleration_wall_0 = 1500 +acceleration_wall_x = =acceleration_wall +bridge_skin_speed = =bridge_wall_speed +bridge_sparse_infill_max_density = 50 +bridge_wall_speed = 30 +cool_fan_speed_0 = 0 +cool_min_layer_time = 4 +infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' +infill_sparse_density = 15 +jerk_infill = =jerk_print +jerk_layer_0 = =jerk_wall_0 +jerk_print = =max(30, speed_print/2) +jerk_roofing = =jerk_wall_0 +jerk_topbottom = =jerk_wall +jerk_wall = =jerk_infill +jerk_wall_0 = =max(30, speed_wall_0/2) +machine_nozzle_cool_down_speed = 1.3 +machine_nozzle_heat_up_speed = 1.9 +material_extrusion_cool_down_speed = 0.8 +optimize_wall_printing_order = False +prime_tower_enable = False +raft_airgap = 0.15 +retraction_amount = 6.5 +retraction_prime_speed = 15 +retraction_speed = 45 +small_skin_on_surface = False +small_skin_width = 4 +speed_infill = =speed_print +speed_ironing = 20 +speed_layer_0 = 30 +speed_prime_tower = =speed_wall_0 +speed_print = 100 +speed_roofing = =math.ceil(speed_wall*(45/100)) +speed_support_interface = =speed_wall_0 +speed_topbottom = =speed_print +speed_wall = =speed_infill +speed_wall_0 = =math.ceil(speed_wall*(20/100)) +speed_wall_x = =speed_wall +speed_wall_x_roofing = =speed_roofing support_bottom_distance = =support_z_distance support_interface_enable = True +support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.3 +top_bottom_thickness = =max(1.2 , layer_height * 6) +wall_0_wipe_dist = 0.8 +z_seam_relative = True +z_seam_type = back +zig_zaggify_infill = True diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_um-petg_0.1mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_um-petg_0.1mm.inst.cfg index c5cadca4bd..a2233703d4 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.25_um-petg_0.1mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_um-petg_0.1mm.inst.cfg @@ -12,12 +12,61 @@ variant = AA 0.25 weight = 0 [values] -material_print_temperature = =default_material_print_temperature - 15 -speed_infill = =math.ceil(speed_print * 40 / 55) -speed_topbottom = =math.ceil(speed_print * 30 / 55) +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size = 0.2 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled = True +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 1 +acceleration_infill = =acceleration_print +acceleration_ironing = 1000 +acceleration_layer_0 = =acceleration_wall_0 +acceleration_print = 3500 +acceleration_roofing = =acceleration_wall_0 +acceleration_topbottom = =acceleration_wall +acceleration_wall = =acceleration_infill +acceleration_wall_0 = 1500 +acceleration_wall_x = =acceleration_wall +bridge_skin_speed = =bridge_wall_speed +bridge_sparse_infill_max_density = 50 +bridge_wall_speed = 30 +cool_min_layer_time = 4 +infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' +infill_sparse_density = 15 +jerk_infill = =jerk_print +jerk_layer_0 = =jerk_wall_0 +jerk_print = =max(30, speed_print/2) +jerk_roofing = =jerk_wall_0 +jerk_topbottom = =jerk_wall +jerk_wall = =jerk_infill +jerk_wall_0 = =max(30, speed_wall_0/2) +machine_nozzle_cool_down_speed = 1.4 +machine_nozzle_heat_up_speed = 1.7 +material_extrusion_cool_down_speed = 0.7 +optimize_wall_printing_order = False +prime_tower_enable = False +retraction_amount = 8 +retraction_prime_speed = 15 +retraction_speed = 45 +small_skin_on_surface = False +small_skin_width = 4 +speed_infill = =speed_print +speed_ironing = 20 +speed_layer_0 = 30 +speed_prime_tower = =speed_wall_0 +speed_print = 100 +speed_roofing = =math.ceil(speed_wall*(45/100)) +speed_support_interface = =speed_wall_0 +speed_topbottom = =speed_print +speed_wall = =speed_infill +speed_wall_0 = =math.ceil(speed_wall*(20/100)) +speed_wall_x = =speed_wall +speed_wall_x_roofing = =speed_roofing support_bottom_distance = =support_z_distance support_interface_enable = True +support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height -top_bottom_thickness = 0.8 +support_z_distance = 0.3 +top_bottom_thickness = =max(1.2 , layer_height * 6) +wall_0_wipe_dist = 0.8 +z_seam_relative = True +z_seam_type = back +zig_zaggify_infill = True diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_um-pla_0.1mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_um-pla_0.1mm.inst.cfg index c6d2afaf03..44f6670085 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.25_um-pla_0.1mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_um-pla_0.1mm.inst.cfg @@ -12,21 +12,62 @@ variant = AA 0.25 weight = 0 [values] -brim_width = 8 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size = 0.2 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled = True +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 2 +acceleration_infill = =acceleration_print +acceleration_ironing = 1000 +acceleration_layer_0 = =acceleration_wall_0 +acceleration_print = 3500 +acceleration_roofing = =acceleration_wall_0 +acceleration_topbottom = =acceleration_wall +acceleration_wall = =acceleration_infill +acceleration_wall_0 = 1500 +acceleration_wall_x = =acceleration_wall +bridge_skin_speed = =bridge_wall_speed +bridge_sparse_infill_max_density = 50 +bridge_wall_speed = 30 +cool_min_layer_time = 6 infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' -machine_nozzle_cool_down_speed = 0.9 -machine_nozzle_heat_up_speed = 1.4 -material_print_temperature = =default_material_print_temperature - 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) +infill_sparse_density = 15 +jerk_infill = =jerk_print +jerk_layer_0 = =jerk_wall_0 +jerk_print = =max(30, speed_print/2) +jerk_roofing = =jerk_wall_0 +jerk_topbottom = =jerk_wall +jerk_wall = =jerk_infill +jerk_wall_0 = =max(30, speed_wall_0/2) +machine_nozzle_cool_down_speed = 1.3 +machine_nozzle_heat_up_speed = 1.9 +material_extrusion_cool_down_speed = 0.7 +optimize_wall_printing_order = False +prime_tower_enable = False +raft_airgap = 0.25 +retraction_amount = 6.5 +retraction_prime_speed = =retraction_speed +retraction_speed = 45 +small_skin_on_surface = False +small_skin_width = 4 +speed_infill = =speed_print +speed_ironing = 20 +speed_layer_0 = 30 +speed_prime_tower = =speed_wall_0 +speed_print = 100 +speed_roofing = =math.ceil(speed_wall*(45/100)) +speed_support_interface = =speed_wall_0 +speed_topbottom = =speed_print +speed_wall = =speed_infill +speed_wall_0 = =math.ceil(speed_wall*(20/100)) +speed_wall_x = =speed_wall +speed_wall_x_roofing = =speed_roofing support_bottom_distance = =support_z_distance support_interface_enable = True +support_structure = tree 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 -wall_0_wipe_dist = 0.25 +support_z_distance = 0.3 +top_bottom_thickness = =max(1 , layer_height * 5) +wall_0_wipe_dist = 0.8 +z_seam_relative = True +z_seam_type = back +zig_zaggify_infill = True diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_um-tough-pla_0.1mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_um-tough-pla_0.1mm.inst.cfg index a28e41553f..997f823e51 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.25_um-tough-pla_0.1mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_um-tough-pla_0.1mm.inst.cfg @@ -12,20 +12,62 @@ variant = AA 0.25 weight = 0 [values] -brim_width = 8 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size = 0.2 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled = True +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 2 +acceleration_infill = =acceleration_print +acceleration_ironing = 1000 +acceleration_layer_0 = =acceleration_wall_0 +acceleration_print = 3500 +acceleration_roofing = =acceleration_wall_0 +acceleration_topbottom = =acceleration_wall +acceleration_wall = =acceleration_infill +acceleration_wall_0 = 1500 +acceleration_wall_x = =acceleration_wall +bridge_skin_speed = =bridge_wall_speed +bridge_sparse_infill_max_density = 50 +bridge_wall_speed = 30 +cool_min_layer_time = 6 infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' -machine_nozzle_cool_down_speed = 0.9 -machine_nozzle_heat_up_speed = 1.4 -material_print_temperature = =default_material_print_temperature - 5 -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) +infill_sparse_density = 15 +jerk_infill = =jerk_print +jerk_layer_0 = =jerk_wall_0 +jerk_print = =max(30, speed_print/2) +jerk_roofing = =jerk_wall_0 +jerk_topbottom = =jerk_wall +jerk_wall = =jerk_infill +jerk_wall_0 = =max(30, speed_wall_0/2) +machine_nozzle_cool_down_speed = 1.3 +machine_nozzle_heat_up_speed = 1.9 +material_extrusion_cool_down_speed = 0.7 +optimize_wall_printing_order = False +prime_tower_enable = False +raft_airgap = 0.25 +retraction_amount = 6.5 +retraction_prime_speed = =retraction_speed +retraction_speed = 45 +small_skin_on_surface = False +small_skin_width = 4 +speed_infill = =speed_print +speed_ironing = 20 +speed_layer_0 = 26 +speed_prime_tower = =speed_wall_0 +speed_print = 100 +speed_roofing = =math.ceil(speed_wall*(45/100)) +speed_support_interface = =speed_wall_0 +speed_topbottom = =speed_print +speed_wall = =speed_infill +speed_wall_0 = =math.ceil(speed_wall*(20/100)) +speed_wall_x = =speed_wall +speed_wall_x_roofing = =speed_roofing support_bottom_distance = =support_z_distance support_interface_enable = True +support_structure = tree 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 +support_z_distance = 0.3 +top_bottom_thickness = =max(1 , layer_height * 5) +wall_0_wipe_dist = 0.8 +z_seam_relative = True +z_seam_type = back +zig_zaggify_infill = True 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 0b471a8c75..c58107dcf9 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 @@ -26,7 +26,6 @@ prime_tower_wipe_enabled = True raft_airgap = 0.25 retraction_hop = 2 retraction_hop_only_when_collides = True -retraction_min_travel = 0.8 speed_print = 50 speed_topbottom = =math.ceil(speed_print * 25 / 50) speed_wall = =math.ceil(speed_print * 40 / 50) 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 6c9710e436..b210b894e5 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 @@ -25,7 +25,6 @@ prime_tower_wipe_enabled = True raft_airgap = 0.25 retraction_hop = 2 retraction_hop_only_when_collides = True -retraction_min_travel = 0.8 speed_print = 50 speed_topbottom = =math.ceil(speed_print * 25 / 50) speed_wall = =math.ceil(speed_print * 40 / 50) 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 945b77e699..aa17d35a97 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 @@ -26,7 +26,6 @@ prime_tower_wipe_enabled = True raft_airgap = 0.25 retraction_hop = 2 retraction_hop_only_when_collides = True -retraction_min_travel = 0.8 speed_print = 50 speed_topbottom = =math.ceil(speed_print * 25 / 50) speed_wall = =math.ceil(speed_print * 40 / 50) 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 b523e3c646..616443b129 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 @@ -25,7 +25,6 @@ prime_tower_wipe_enabled = True raft_airgap = 0.25 retraction_hop = 2 retraction_hop_only_when_collides = True -retraction_min_travel = 0.8 speed_print = 50 speed_topbottom = =math.ceil(speed_print * 25 / 50) speed_wall = =math.ceil(speed_print * 40 / 50) 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 85e892628d..8eb0d257d6 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 @@ -28,7 +28,6 @@ retraction_count_max = 15 retraction_extra_prime_amount = 0.8 retraction_hop = 2 retraction_hop_only_when_collides = True -retraction_min_travel = 0.8 speed_print = 25 speed_topbottom = =math.ceil(speed_print * 25 / 25) speed_wall = =math.ceil(speed_print * 25 / 25) 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 531f946ba8..bd4dd317bb 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 @@ -29,7 +29,6 @@ retraction_count_max = 15 retraction_extra_prime_amount = 0.8 retraction_hop = 2 retraction_hop_only_when_collides = True -retraction_min_travel = 0.8 speed_print = 25 speed_topbottom = =math.ceil(speed_print * 25 / 25) speed_wall = =math.ceil(speed_print * 25 / 25) 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 a7f63a76b1..1e5ea9efb6 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 @@ -29,7 +29,6 @@ retraction_count_max = 15 retraction_extra_prime_amount = 0.8 retraction_hop = 2 retraction_hop_only_when_collides = True -retraction_min_travel = 0.8 speed_print = 25 speed_topbottom = =math.ceil(speed_print * 25 / 25) speed_wall = =math.ceil(speed_print * 25 / 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 0b69ae0c43..db01865cf8 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 @@ -28,7 +28,6 @@ prime_tower_wipe_enabled = True retraction_count_max = 15 retraction_extra_prime_amount = 0.8 retraction_hop_only_when_collides = True -retraction_min_travel = =line_width * 2 skin_line_width = =round(line_width / 0.8, 2) speed_print = 25 speed_topbottom = =math.ceil(speed_print * 0.8) 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 29aa42a436..27a8bb863b 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 @@ -29,7 +29,6 @@ prime_tower_wipe_enabled = True retraction_count_max = 15 retraction_extra_prime_amount = 0.8 retraction_hop_only_when_collides = True -retraction_min_travel = =line_width * 2 skin_line_width = =round(line_width / 0.8, 2) speed_print = 25 speed_topbottom = =math.ceil(speed_print * 0.8) 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 48e6ffb81b..cf3069ee0f 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 @@ -28,7 +28,6 @@ prime_tower_wipe_enabled = True retraction_count_max = 15 retraction_extra_prime_amount = 0.8 retraction_hop_only_when_collides = True -retraction_min_travel = =line_width * 2 skin_line_width = =round(line_width / 0.8, 2) speed_print = 25 speed_topbottom = =math.ceil(speed_print * 0.8) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-abs_0.06mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-abs_0.06mm.inst.cfg index a69ff33f76..c0b4799ca9 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-abs_0.06mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-abs_0.06mm.inst.cfg @@ -12,18 +12,63 @@ variant = AA 0.4 weight = 1 [values] -machine_nozzle_cool_down_speed = 0.8 -machine_nozzle_heat_up_speed = 1.5 -material_final_print_temperature = =material_print_temperature - 20 -material_print_temperature = =default_material_print_temperature - 10 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size = 0.2 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled = True +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 1 +acceleration_infill = =acceleration_print +acceleration_ironing = 1000 +acceleration_layer_0 = =acceleration_wall_0 +acceleration_print = 3500 +acceleration_roofing = =acceleration_wall_0 +acceleration_topbottom = =acceleration_wall +acceleration_wall = =acceleration_infill +acceleration_wall_0 = 1500 +acceleration_wall_x = =acceleration_wall +bridge_skin_speed = =bridge_wall_speed +bridge_sparse_infill_max_density = 50 +bridge_wall_speed = 30 +cool_min_layer_time = 4 +infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' +infill_sparse_density = 15 +jerk_infill = =jerk_print +jerk_layer_0 = =jerk_wall_0 +jerk_print = =max(30, speed_print/2) +jerk_roofing = =jerk_wall_0 +jerk_topbottom = =jerk_wall +jerk_wall = =jerk_infill +jerk_wall_0 = =max(30, speed_wall_0/2) +machine_nozzle_cool_down_speed = 1.3 +machine_nozzle_heat_up_speed = 1.9 +material_extrusion_cool_down_speed = 0.8 +material_max_flowrate = 20 +optimize_wall_printing_order = False prime_tower_enable = False raft_airgap = 0.15 -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) +retraction_amount = 6.5 +retraction_prime_speed = 15 +retraction_speed = 45 +small_skin_on_surface = False +small_skin_width = 4 +speed_infill = =speed_print +speed_ironing = 20 +speed_layer_0 = 30 +speed_prime_tower = =speed_wall_0 +speed_print = 100 +speed_roofing = =math.ceil(speed_wall*(45/100)) +speed_support_interface = =speed_wall_0 +speed_topbottom = =speed_print +speed_wall = =speed_infill +speed_wall_0 = =math.ceil(speed_wall*(20/100)) +speed_wall_x = =speed_wall +speed_wall_x_roofing = =speed_roofing support_bottom_distance = =support_z_distance support_interface_enable = True +support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.3 +top_bottom_thickness = =max(1.2 , layer_height * 6) +wall_0_wipe_dist = 0.8 +z_seam_relative = True +z_seam_type = back +zig_zaggify_infill = True diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-abs_0.15mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-abs_0.15mm.inst.cfg index 1085472560..d430f867d8 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-abs_0.15mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-abs_0.15mm.inst.cfg @@ -52,7 +52,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) @@ -66,7 +66,7 @@ support_bottom_distance = =support_z_distance support_interface_enable = True support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.3 top_bottom_thickness = =max(1.2 , layer_height * 6) wall_0_wipe_dist = 0.8 z_seam_relative = True diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-abs_0.1mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-abs_0.1mm.inst.cfg index ca659622cb..b2c25e26c7 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-abs_0.1mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-abs_0.1mm.inst.cfg @@ -12,18 +12,63 @@ variant = AA 0.4 weight = 0 [values] -machine_nozzle_cool_down_speed = 0.85 -machine_nozzle_heat_up_speed = 1.5 -material_final_print_temperature = =material_print_temperature - 20 -material_print_temperature = =default_material_print_temperature - 5 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size = 0.2 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled = True +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 1 +acceleration_infill = =acceleration_print +acceleration_ironing = 1000 +acceleration_layer_0 = =acceleration_wall_0 +acceleration_print = 3500 +acceleration_roofing = =acceleration_wall_0 +acceleration_topbottom = =acceleration_wall +acceleration_wall = =acceleration_infill +acceleration_wall_0 = 1500 +acceleration_wall_x = =acceleration_wall +bridge_skin_speed = =bridge_wall_speed +bridge_sparse_infill_max_density = 50 +bridge_wall_speed = 30 +cool_min_layer_time = 4 +infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' +infill_sparse_density = 15 +jerk_infill = =jerk_print +jerk_layer_0 = =jerk_wall_0 +jerk_print = =max(30, speed_print/2) +jerk_roofing = =jerk_wall_0 +jerk_topbottom = =jerk_wall +jerk_wall = =jerk_infill +jerk_wall_0 = =max(30, speed_wall_0/2) +machine_nozzle_cool_down_speed = 1.3 +machine_nozzle_heat_up_speed = 1.9 +material_extrusion_cool_down_speed = 0.8 +material_max_flowrate = 20 +optimize_wall_printing_order = False prime_tower_enable = False raft_airgap = 0.15 -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) +retraction_amount = 6.5 +retraction_prime_speed = 15 +retraction_speed = 45 +small_skin_on_surface = False +small_skin_width = 4 +speed_infill = =speed_print +speed_ironing = 20 +speed_layer_0 = 30 +speed_prime_tower = =speed_wall_0 +speed_print = 100 +speed_roofing = =math.ceil(speed_wall*(45/100)) +speed_support_interface = =speed_wall_0 +speed_topbottom = =speed_print +speed_wall = =speed_infill +speed_wall_0 = =math.ceil(speed_wall*(20/100)) +speed_wall_x = =speed_wall +speed_wall_x_roofing = =speed_roofing support_bottom_distance = =support_z_distance support_interface_enable = True +support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.3 +top_bottom_thickness = =max(1.2 , layer_height * 6) +wall_0_wipe_dist = 0.8 +z_seam_relative = True +z_seam_type = back +zig_zaggify_infill = True diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-abs_0.2mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-abs_0.2mm.inst.cfg index 22ef09c921..15b87d8229 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-abs_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-abs_0.2mm.inst.cfg @@ -28,6 +28,7 @@ bridge_skin_speed = =bridge_wall_speed bridge_sparse_infill_max_density = 50 bridge_wall_speed = 30 cool_min_layer_time = 4 +infill_material_flow = =1.05 * material_flow infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' infill_sparse_density = 15 jerk_infill = =jerk_print @@ -49,11 +50,12 @@ raft_airgap = 0.15 retraction_amount = 6.5 retraction_prime_speed = 15 retraction_speed = 45 +skin_material_flow = =material_flow small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) @@ -67,9 +69,11 @@ support_bottom_distance = =support_z_distance support_interface_enable = True support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.3 top_bottom_thickness = =max(1.2 , layer_height * 6) wall_0_wipe_dist = 0.8 +wall_x_material_flow = =1.05 * wall_material_flow +wall_x_material_flow_roofing = =wall_material_flow z_seam_relative = True z_seam_type = back zig_zaggify_infill = True diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-abs_0.3mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-abs_0.3mm.inst.cfg index 9067d8fb33..9a10024813 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-abs_0.3mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-abs_0.3mm.inst.cfg @@ -53,7 +53,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) @@ -67,7 +67,7 @@ support_bottom_distance = =support_z_distance support_interface_enable = True support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.4 top_bottom_thickness = =max(1.2 , layer_height * 6) wall_0_wipe_dist = 0.8 wall_line_width_0 = =line_width * (1 + magic_spiralize * 0.25) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-petg_0.06mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-petg_0.06mm.inst.cfg index 9545d34977..ef58c14663 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-petg_0.06mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-petg_0.06mm.inst.cfg @@ -12,16 +12,62 @@ variant = AA 0.4 weight = 1 [values] -infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'triangles' -machine_nozzle_cool_down_speed = 0.85 -machine_nozzle_heat_up_speed = 1.5 -material_print_temperature = =default_material_print_temperature - 10 -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) +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size = 0.2 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled = True +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 1 +acceleration_infill = =acceleration_print +acceleration_ironing = 1000 +acceleration_layer_0 = =acceleration_wall_0 +acceleration_print = 3500 +acceleration_roofing = =acceleration_wall_0 +acceleration_topbottom = =acceleration_wall +acceleration_wall = =acceleration_infill +acceleration_wall_0 = 1500 +acceleration_wall_x = =acceleration_wall +bridge_skin_speed = =bridge_wall_speed +bridge_sparse_infill_max_density = 50 +bridge_wall_speed = 30 +cool_min_layer_time = 4 +infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' +infill_sparse_density = 15 +jerk_infill = =jerk_print +jerk_layer_0 = =jerk_wall_0 +jerk_print = =max(30, speed_print/2) +jerk_roofing = =jerk_wall_0 +jerk_topbottom = =jerk_wall +jerk_wall = =jerk_infill +jerk_wall_0 = =max(30, speed_wall_0/2) +machine_nozzle_cool_down_speed = 1.4 +machine_nozzle_heat_up_speed = 1.7 +material_extrusion_cool_down_speed = 0.7 +material_max_flowrate = 20 +optimize_wall_printing_order = False +prime_tower_enable = False +retraction_amount = 8 +retraction_prime_speed = 15 +retraction_speed = 45 +small_skin_on_surface = False +small_skin_width = 4 +speed_infill = =speed_print +speed_ironing = 20 +speed_layer_0 = 30 +speed_prime_tower = =speed_wall_0 +speed_print = 100 +speed_roofing = =math.ceil(speed_wall*(45/100)) +speed_support_interface = =speed_wall_0 +speed_topbottom = =speed_print +speed_wall = =speed_infill +speed_wall_0 = =math.ceil(speed_wall*(20/100)) +speed_wall_x = =speed_wall +speed_wall_x_roofing = =speed_roofing support_bottom_distance = =support_z_distance support_interface_enable = True +support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.3 +top_bottom_thickness = =max(1.2 , layer_height * 6) +wall_0_wipe_dist = 0.8 +z_seam_relative = True +z_seam_type = back +zig_zaggify_infill = True diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-petg_0.15mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-petg_0.15mm.inst.cfg index 8a64a81ab1..5d14f014b9 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-petg_0.15mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-petg_0.15mm.inst.cfg @@ -51,7 +51,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) @@ -65,7 +65,7 @@ support_bottom_distance = =support_z_distance support_interface_enable = True support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.3 top_bottom_thickness = =max(1.2 , layer_height * 6) wall_0_wipe_dist = 0.8 z_seam_relative = True diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-petg_0.1mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-petg_0.1mm.inst.cfg index 4a20bd76b3..d23a7b8cea 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-petg_0.1mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-petg_0.1mm.inst.cfg @@ -12,16 +12,62 @@ variant = AA 0.4 weight = 0 [values] -infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'triangles' -machine_nozzle_cool_down_speed = 0.85 -machine_nozzle_heat_up_speed = 1.5 -material_print_temperature = =default_material_print_temperature - 5 -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) +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size = 0.2 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled = True +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 1 +acceleration_infill = =acceleration_print +acceleration_ironing = 1000 +acceleration_layer_0 = =acceleration_wall_0 +acceleration_print = 3500 +acceleration_roofing = =acceleration_wall_0 +acceleration_topbottom = =acceleration_wall +acceleration_wall = =acceleration_infill +acceleration_wall_0 = 1500 +acceleration_wall_x = =acceleration_wall +bridge_skin_speed = =bridge_wall_speed +bridge_sparse_infill_max_density = 50 +bridge_wall_speed = 30 +cool_min_layer_time = 4 +infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' +infill_sparse_density = 15 +jerk_infill = =jerk_print +jerk_layer_0 = =jerk_wall_0 +jerk_print = =max(30, speed_print/2) +jerk_roofing = =jerk_wall_0 +jerk_topbottom = =jerk_wall +jerk_wall = =jerk_infill +jerk_wall_0 = =max(30, speed_wall_0/2) +machine_nozzle_cool_down_speed = 1.4 +machine_nozzle_heat_up_speed = 1.7 +material_extrusion_cool_down_speed = 0.7 +material_max_flowrate = 20 +optimize_wall_printing_order = False +prime_tower_enable = False +retraction_amount = 8 +retraction_prime_speed = 15 +retraction_speed = 45 +small_skin_on_surface = False +small_skin_width = 4 +speed_infill = =speed_print +speed_ironing = 20 +speed_layer_0 = 30 +speed_prime_tower = =speed_wall_0 +speed_print = 100 +speed_roofing = =math.ceil(speed_wall*(45/100)) +speed_support_interface = =speed_wall_0 +speed_topbottom = =speed_print +speed_wall = =speed_infill +speed_wall_0 = =math.ceil(speed_wall*(20/100)) +speed_wall_x = =speed_wall +speed_wall_x_roofing = =speed_roofing support_bottom_distance = =support_z_distance support_interface_enable = True +support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.3 +top_bottom_thickness = =max(1.2 , layer_height * 6) +wall_0_wipe_dist = 0.8 +z_seam_relative = True +z_seam_type = back +zig_zaggify_infill = True diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-petg_0.2mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-petg_0.2mm.inst.cfg index 70ee9b0309..4e1b0f535f 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-petg_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-petg_0.2mm.inst.cfg @@ -28,6 +28,7 @@ bridge_skin_speed = =bridge_wall_speed bridge_sparse_infill_max_density = 50 bridge_wall_speed = 30 cool_min_layer_time = 4 +infill_material_flow = =1.1 * material_flow infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' infill_sparse_density = 15 jerk_infill = =jerk_print @@ -48,11 +49,12 @@ prime_tower_enable = False retraction_amount = 8 retraction_prime_speed = 15 retraction_speed = 45 +skin_material_flow = =1.05 * material_flow small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) @@ -66,9 +68,11 @@ support_bottom_distance = =support_z_distance support_interface_enable = True support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.3 top_bottom_thickness = =max(1.2 , layer_height * 6) wall_0_wipe_dist = 0.8 +wall_x_material_flow = =1.1 * wall_material_flow +wall_x_material_flow_roofing = =wall_material_flow z_seam_relative = True z_seam_type = back zig_zaggify_infill = True diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-petg_0.3mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-petg_0.3mm.inst.cfg index 65c8343d85..ab66eed0ab 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-petg_0.3mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-petg_0.3mm.inst.cfg @@ -52,7 +52,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) @@ -66,7 +66,7 @@ support_bottom_distance = =support_z_distance support_interface_enable = True support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.4 top_bottom_thickness = =max(1.2 , layer_height * 6) wall_0_wipe_dist = 0.8 wall_line_width_0 = =line_width * (1 + magic_spiralize * 0.25) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-pla_0.06mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-pla_0.06mm.inst.cfg index c2bb123d04..2b192e8c1c 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-pla_0.06mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-pla_0.06mm.inst.cfg @@ -12,18 +12,63 @@ variant = AA 0.4 weight = 1 [values] -machine_nozzle_cool_down_speed = 0.75 -machine_nozzle_heat_up_speed = 1.6 -material_print_temperature = =default_material_print_temperature - 5 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size = 0.2 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled = True +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 2 +acceleration_infill = =acceleration_print +acceleration_ironing = 1000 +acceleration_layer_0 = =acceleration_wall_0 +acceleration_print = 3500 +acceleration_roofing = =acceleration_wall_0 +acceleration_topbottom = =acceleration_wall +acceleration_wall = =acceleration_infill +acceleration_wall_0 = 1500 +acceleration_wall_x = =acceleration_wall +bridge_skin_speed = =bridge_wall_speed +bridge_sparse_infill_max_density = 50 +bridge_wall_speed = 30 +cool_min_layer_time = 6 +infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' +infill_sparse_density = 15 +jerk_infill = =jerk_print +jerk_layer_0 = =jerk_wall_0 +jerk_print = =max(30, speed_print/2) +jerk_roofing = =jerk_wall_0 +jerk_topbottom = =jerk_wall +jerk_wall = =jerk_infill +jerk_wall_0 = =max(30, speed_wall_0/2) +machine_nozzle_cool_down_speed = 1.3 +machine_nozzle_heat_up_speed = 1.9 +material_extrusion_cool_down_speed = 0.7 +material_max_flowrate = 12 +optimize_wall_printing_order = False prime_tower_enable = False raft_airgap = 0.25 +retraction_amount = 6.5 retraction_prime_speed = =retraction_speed -speed_print = 50 -speed_topbottom = =math.ceil(speed_print * 35 / 50) -speed_wall = =math.ceil(speed_print * 35 / 50) +retraction_speed = 45 +small_skin_on_surface = False +small_skin_width = 4 +speed_infill = =speed_print +speed_ironing = 20 +speed_layer_0 = 30 +speed_prime_tower = =speed_wall_0 +speed_print = 100 +speed_roofing = =math.ceil(speed_wall*(45/100)) +speed_support_interface = =speed_wall_0 +speed_topbottom = =speed_print +speed_wall = =speed_infill +speed_wall_0 = =math.ceil(speed_wall*(20/100)) +speed_wall_x = =speed_wall +speed_wall_x_roofing = =speed_roofing support_bottom_distance = =support_z_distance support_interface_enable = True +support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height -top_bottom_thickness = 1 +support_z_distance = 0.3 +top_bottom_thickness = =max(1 , layer_height * 5) +wall_0_wipe_dist = 0.8 +z_seam_relative = True +z_seam_type = back +zig_zaggify_infill = True diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-pla_0.15mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-pla_0.15mm.inst.cfg index ac6cce0b10..11301a2990 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-pla_0.15mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-pla_0.15mm.inst.cfg @@ -52,7 +52,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) @@ -66,7 +66,7 @@ support_bottom_distance = =support_z_distance support_interface_enable = True support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.3 top_bottom_thickness = =max(1 , layer_height * 5) wall_0_wipe_dist = 0.8 z_seam_relative = True diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-pla_0.1mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-pla_0.1mm.inst.cfg index 1e2820f565..1d07e0f63c 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-pla_0.1mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-pla_0.1mm.inst.cfg @@ -12,14 +12,63 @@ variant = AA 0.4 weight = 0 [values] -machine_nozzle_cool_down_speed = 0.75 -machine_nozzle_heat_up_speed = 1.6 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size = 0.2 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled = True +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 2 +acceleration_infill = =acceleration_print +acceleration_ironing = 1000 +acceleration_layer_0 = =acceleration_wall_0 +acceleration_print = 3500 +acceleration_roofing = =acceleration_wall_0 +acceleration_topbottom = =acceleration_wall +acceleration_wall = =acceleration_infill +acceleration_wall_0 = 1500 +acceleration_wall_x = =acceleration_wall +bridge_skin_speed = =bridge_wall_speed +bridge_sparse_infill_max_density = 50 +bridge_wall_speed = 30 +cool_min_layer_time = 6 +infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' +infill_sparse_density = 15 +jerk_infill = =jerk_print +jerk_layer_0 = =jerk_wall_0 +jerk_print = =max(30, speed_print/2) +jerk_roofing = =jerk_wall_0 +jerk_topbottom = =jerk_wall +jerk_wall = =jerk_infill +jerk_wall_0 = =max(30, speed_wall_0/2) +machine_nozzle_cool_down_speed = 1.3 +machine_nozzle_heat_up_speed = 1.9 +material_extrusion_cool_down_speed = 0.7 +material_max_flowrate = 12 +optimize_wall_printing_order = False prime_tower_enable = False raft_airgap = 0.25 +retraction_amount = 6.5 retraction_prime_speed = =retraction_speed +retraction_speed = 45 +small_skin_on_surface = False +small_skin_width = 4 +speed_infill = =speed_print +speed_ironing = 20 +speed_layer_0 = 30 +speed_prime_tower = =speed_wall_0 +speed_print = 100 +speed_roofing = =math.ceil(speed_wall*(45/100)) +speed_support_interface = =speed_wall_0 +speed_topbottom = =speed_print +speed_wall = =speed_infill +speed_wall_0 = =math.ceil(speed_wall*(20/100)) +speed_wall_x = =speed_wall +speed_wall_x_roofing = =speed_roofing support_bottom_distance = =support_z_distance support_interface_enable = True +support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height -top_bottom_thickness = 1 +support_z_distance = 0.3 +top_bottom_thickness = =max(1 , layer_height * 5) +wall_0_wipe_dist = 0.8 +z_seam_relative = True +z_seam_type = back +zig_zaggify_infill = True diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-pla_0.2mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-pla_0.2mm.inst.cfg index dbea8c6436..28cf131812 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-pla_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-pla_0.2mm.inst.cfg @@ -28,6 +28,7 @@ bridge_skin_speed = =bridge_wall_speed bridge_sparse_infill_max_density = 50 bridge_wall_speed = 30 cool_min_layer_time = 6 +infill_material_flow = =1.1 * material_flow infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' infill_sparse_density = 15 jerk_infill = =jerk_print @@ -49,11 +50,12 @@ raft_airgap = 0.25 retraction_amount = 6.5 retraction_prime_speed = =retraction_speed retraction_speed = 45 +skin_material_flow = =1.05 * material_flow small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) @@ -67,9 +69,11 @@ support_bottom_distance = =support_z_distance support_interface_enable = True support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.3 top_bottom_thickness = =max(1 , layer_height * 5) wall_0_wipe_dist = 0.8 +wall_x_material_flow = =1.1 * wall_material_flow +wall_x_material_flow_roofing = =wall_material_flow z_seam_relative = True z_seam_type = back zig_zaggify_infill = True diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-pla_0.3mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-pla_0.3mm.inst.cfg index dcb2e0c516..a01b433eb2 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-pla_0.3mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-pla_0.3mm.inst.cfg @@ -53,7 +53,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) @@ -67,7 +67,7 @@ support_bottom_distance = =support_z_distance support_interface_enable = True support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.3 top_bottom_thickness = =max(1 , layer_height * 5) wall_0_wipe_dist = 0.8 wall_line_width_0 = =line_width * (1 + magic_spiralize * 0.25) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.06mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.06mm.inst.cfg index 595de835ba..f368ac13d8 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.06mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.06mm.inst.cfg @@ -12,18 +12,63 @@ variant = AA 0.4 weight = 1 [values] -machine_nozzle_cool_down_speed = 0.75 -machine_nozzle_heat_up_speed = 1.6 -material_print_temperature = =default_material_print_temperature - 5 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size = 0.2 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled = True +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 2 +acceleration_infill = =acceleration_print +acceleration_ironing = 1000 +acceleration_layer_0 = =acceleration_wall_0 +acceleration_print = 3500 +acceleration_roofing = =acceleration_wall_0 +acceleration_topbottom = =acceleration_wall +acceleration_wall = =acceleration_infill +acceleration_wall_0 = 1500 +acceleration_wall_x = =acceleration_wall +bridge_skin_speed = =bridge_wall_speed +bridge_sparse_infill_max_density = 50 +bridge_wall_speed = 30 +cool_min_layer_time = 6 +infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' +infill_sparse_density = 15 +jerk_infill = =jerk_print +jerk_layer_0 = =jerk_wall_0 +jerk_print = =max(30, speed_print/2) +jerk_roofing = =jerk_wall_0 +jerk_topbottom = =jerk_wall +jerk_wall = =jerk_infill +jerk_wall_0 = =max(30, speed_wall_0/2) +machine_nozzle_cool_down_speed = 1.3 +machine_nozzle_heat_up_speed = 1.9 +material_extrusion_cool_down_speed = 0.7 +material_max_flowrate = 14 +optimize_wall_printing_order = False prime_tower_enable = False +raft_airgap = 0.25 +retraction_amount = 6.5 retraction_prime_speed = =retraction_speed -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) +retraction_speed = 45 +small_skin_on_surface = False +small_skin_width = 4 +speed_infill = =speed_print +speed_ironing = 20 +speed_layer_0 = 26 +speed_prime_tower = =speed_wall_0 +speed_print = 100 +speed_roofing = =math.ceil(speed_wall*(45/100)) +speed_support_interface = =speed_wall_0 +speed_topbottom = =speed_print +speed_wall = =speed_infill +speed_wall_0 = =math.ceil(speed_wall*(20/100)) +speed_wall_x = =speed_wall +speed_wall_x_roofing = =speed_roofing support_bottom_distance = =support_z_distance support_interface_enable = True +support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height -top_bottom_thickness = 1.2 +support_z_distance = 0.3 +top_bottom_thickness = =max(1 , layer_height * 5) +wall_0_wipe_dist = 0.8 +z_seam_relative = True +z_seam_type = back +zig_zaggify_infill = True diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.15mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.15mm.inst.cfg index 59044a7f04..b699ebc9f3 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.15mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.15mm.inst.cfg @@ -52,7 +52,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 26 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) @@ -66,7 +66,7 @@ support_bottom_distance = =support_z_distance support_interface_enable = True support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.35 top_bottom_thickness = =max(1 , layer_height * 5) wall_0_wipe_dist = 0.8 z_seam_relative = True diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.1mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.1mm.inst.cfg index 07c97a632f..d0ee391c65 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.1mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.1mm.inst.cfg @@ -12,18 +12,63 @@ variant = AA 0.4 weight = 0 [values] -machine_nozzle_cool_down_speed = 0.75 -machine_nozzle_heat_up_speed = 1.6 -material_print_temperature = =default_material_print_temperature - 5 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size = 0.2 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled = True +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration = 2 +acceleration_infill = =acceleration_print +acceleration_ironing = 1000 +acceleration_layer_0 = =acceleration_wall_0 +acceleration_print = 3500 +acceleration_roofing = =acceleration_wall_0 +acceleration_topbottom = =acceleration_wall +acceleration_wall = =acceleration_infill +acceleration_wall_0 = 1500 +acceleration_wall_x = =acceleration_wall +bridge_skin_speed = =bridge_wall_speed +bridge_sparse_infill_max_density = 50 +bridge_wall_speed = 30 +cool_min_layer_time = 6 +infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' +infill_sparse_density = 15 +jerk_infill = =jerk_print +jerk_layer_0 = =jerk_wall_0 +jerk_print = =max(30, speed_print/2) +jerk_roofing = =jerk_wall_0 +jerk_topbottom = =jerk_wall +jerk_wall = =jerk_infill +jerk_wall_0 = =max(30, speed_wall_0/2) +machine_nozzle_cool_down_speed = 1.3 +machine_nozzle_heat_up_speed = 1.9 +material_extrusion_cool_down_speed = 0.7 +material_max_flowrate = 14 +optimize_wall_printing_order = False prime_tower_enable = False +raft_airgap = 0.25 +retraction_amount = 6.5 retraction_prime_speed = =retraction_speed -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) +retraction_speed = 45 +small_skin_on_surface = False +small_skin_width = 4 +speed_infill = =speed_print +speed_ironing = 20 +speed_layer_0 = 26 +speed_prime_tower = =speed_wall_0 +speed_print = 100 +speed_roofing = =math.ceil(speed_wall*(45/100)) +speed_support_interface = =speed_wall_0 +speed_topbottom = =speed_print +speed_wall = =speed_infill +speed_wall_0 = =math.ceil(speed_wall*(20/100)) +speed_wall_x = =speed_wall +speed_wall_x_roofing = =speed_roofing support_bottom_distance = =support_z_distance support_interface_enable = True +support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height -top_bottom_thickness = 1.2 +support_z_distance = 0.3 +top_bottom_thickness = =max(1 , layer_height * 5) +wall_0_wipe_dist = 0.8 +z_seam_relative = True +z_seam_type = back +zig_zaggify_infill = True diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.2mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.2mm.inst.cfg index 74e6d5d972..9869a18bb3 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.2mm.inst.cfg @@ -28,6 +28,7 @@ bridge_skin_speed = =bridge_wall_speed bridge_sparse_infill_max_density = 50 bridge_wall_speed = 30 cool_min_layer_time = 6 +infill_material_flow = =1.1 * material_flow infill_pattern = ='zigzag' if infill_sparse_density > 80 else 'grid' infill_sparse_density = 15 jerk_infill = =jerk_print @@ -48,11 +49,12 @@ raft_airgap = 0.25 retraction_amount = 6.5 retraction_prime_speed = =retraction_speed retraction_speed = 45 +skin_material_flow = =1.05 * material_flow small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 26 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) @@ -66,9 +68,11 @@ support_bottom_distance = =support_z_distance support_interface_enable = True support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.35 top_bottom_thickness = =max(1 , layer_height * 5) wall_0_wipe_dist = 0.8 +wall_x_material_flow = =1.1 * wall_material_flow +wall_x_material_flow_roofing = =wall_material_flow z_seam_relative = True z_seam_type = back zig_zaggify_infill = True diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.3mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.3mm.inst.cfg index a9cb1c6865..fc8507c42b 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.3mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_um-tough-pla_0.3mm.inst.cfg @@ -53,7 +53,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 26 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) @@ -67,7 +67,7 @@ support_bottom_distance = =support_z_distance support_interface_enable = True support_structure = tree support_top_distance = =support_z_distance -support_z_distance = =math.ceil(0.3/layer_height)*layer_height +support_z_distance = 0.4 top_bottom_thickness = =max(1 , layer_height * 5) wall_0_wipe_dist = 0.8 wall_line_width_0 = =line_width * (1 + magic_spiralize * 0.25) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_pp_0.2mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_pp_0.2mm.inst.cfg index 149104700e..c338c4b7ff 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_pp_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_pp_0.2mm.inst.cfg @@ -24,7 +24,6 @@ prime_tower_min_volume = 10 retraction_count_max = 15 retraction_extra_prime_amount = 0.5 retraction_hop = 0.5 -retraction_min_travel = 1.5 retraction_prime_speed = 15 speed_wall_x = =math.ceil(speed_wall * 30 / 30) switch_extruder_prime_speed = 15 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_pp_0.3mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_pp_0.3mm.inst.cfg index 670ec78d51..62d9eb235d 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_pp_0.3mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_pp_0.3mm.inst.cfg @@ -24,7 +24,6 @@ prime_tower_min_volume = 15 retraction_count_max = 15 retraction_extra_prime_amount = 0.5 retraction_hop = 0.5 -retraction_min_travel = 1.5 retraction_prime_speed = 15 speed_wall_x = =math.ceil(speed_wall * 30 / 30) switch_extruder_prime_speed = 15 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_pp_0.4mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_pp_0.4mm.inst.cfg index c9b5c26d64..b2792b6fee 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_pp_0.4mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_pp_0.4mm.inst.cfg @@ -24,7 +24,6 @@ prime_tower_min_volume = 20 retraction_count_max = 15 retraction_extra_prime_amount = 0.5 retraction_hop = 0.5 -retraction_min_travel = 1.5 retraction_prime_speed = 15 speed_infill = =math.ceil(speed_wall * 30 / 30) speed_wall_x = =math.ceil(speed_wall * 30 / 30) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_tpu_0.2mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_tpu_0.2mm.inst.cfg index 43436cd4c7..2491d0ed88 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_tpu_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_tpu_0.2mm.inst.cfg @@ -27,7 +27,6 @@ retraction_count_max = 15 retraction_extra_prime_amount = 0.5 retraction_hop = 1.5 retraction_hop_only_when_collides = False -retraction_min_travel = =line_width * 2 retraction_prime_speed = 15 speed_print = 30 speed_topbottom = =math.ceil(speed_print * 25 / 30) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_tpu_0.3mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_tpu_0.3mm.inst.cfg index 58b524dd2a..e975175ce0 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_tpu_0.3mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_tpu_0.3mm.inst.cfg @@ -28,7 +28,6 @@ retraction_count_max = 15 retraction_extra_prime_amount = 0.5 retraction_hop = 1.5 retraction_hop_only_when_collides = False -retraction_min_travel = =line_width * 2 retraction_prime_speed = 15 speed_print = 30 speed_topbottom = =math.ceil(speed_print * 23 / 30) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_tpu_0.4mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_tpu_0.4mm.inst.cfg index d17ec5486a..5334fac1f0 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_tpu_0.4mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_tpu_0.4mm.inst.cfg @@ -27,7 +27,6 @@ retraction_count_max = 15 retraction_extra_prime_amount = 0.5 retraction_hop = 1.5 retraction_hop_only_when_collides = False -retraction_min_travel = =line_width * 2 speed_infill = =speed_print speed_print = 30 speed_topbottom = =math.ceil(speed_print * 20 / 30) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_um-abs_0.2mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_um-abs_0.2mm.inst.cfg index c6e3042130..9ba4a38c6e 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_um-abs_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_um-abs_0.2mm.inst.cfg @@ -56,7 +56,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_um-abs_0.3mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_um-abs_0.3mm.inst.cfg index 764a0cb9ac..4ab74980ef 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_um-abs_0.3mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_um-abs_0.3mm.inst.cfg @@ -53,7 +53,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 75 speed_roofing = =math.ceil(speed_wall*(45/100)) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_um-abs_0.4mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_um-abs_0.4mm.inst.cfg index 1f02428548..269d51dd4b 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_um-abs_0.4mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_um-abs_0.4mm.inst.cfg @@ -53,7 +53,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 50 speed_roofing = =math.ceil(speed_wall*(45/100)) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_um-petg_0.2mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_um-petg_0.2mm.inst.cfg index a144394b5a..4f56167ffd 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_um-petg_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_um-petg_0.2mm.inst.cfg @@ -55,7 +55,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_um-petg_0.3mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_um-petg_0.3mm.inst.cfg index 8af2e7c1bb..9fdf9a665b 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_um-petg_0.3mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_um-petg_0.3mm.inst.cfg @@ -54,7 +54,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 75 speed_roofing = =math.ceil(speed_wall*(45/100)) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_um-petg_0.4mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_um-petg_0.4mm.inst.cfg index bd74c294e1..3368ae6e2d 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_um-petg_0.4mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_um-petg_0.4mm.inst.cfg @@ -54,7 +54,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 50 speed_roofing = =math.ceil(speed_wall*(45/100)) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_um-pla_0.2mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_um-pla_0.2mm.inst.cfg index 32cc67a02b..ca93df9dc1 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_um-pla_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_um-pla_0.2mm.inst.cfg @@ -56,7 +56,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_um-pla_0.3mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_um-pla_0.3mm.inst.cfg index 79df2f65f0..4461ae0772 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_um-pla_0.3mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_um-pla_0.3mm.inst.cfg @@ -53,7 +53,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 65 speed_roofing = =math.ceil(speed_wall*(45/100)) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_um-pla_0.4mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_um-pla_0.4mm.inst.cfg index acfbcb1f1e..1acdad53a0 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_um-pla_0.4mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_um-pla_0.4mm.inst.cfg @@ -53,7 +53,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 30 speed_prime_tower = =speed_wall_0 speed_print = 45 speed_roofing = =math.ceil(speed_wall*(45/100)) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_um-tough-pla_0.2mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_um-tough-pla_0.2mm.inst.cfg index 0ea97ff531..4973ec35bb 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_um-tough-pla_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_um-tough-pla_0.2mm.inst.cfg @@ -56,7 +56,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 26 speed_prime_tower = =speed_wall_0 speed_print = 100 speed_roofing = =math.ceil(speed_wall*(45/100)) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_um-tough-pla_0.3mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_um-tough-pla_0.3mm.inst.cfg index 0f21a87568..2bcf3fa82d 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_um-tough-pla_0.3mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_um-tough-pla_0.3mm.inst.cfg @@ -53,7 +53,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 26 speed_prime_tower = =speed_wall_0 speed_print = 65 speed_roofing = =math.ceil(speed_wall*(45/100)) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_um-tough-pla_0.4mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_um-tough-pla_0.4mm.inst.cfg index 70234b8524..3e4693c115 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_um-tough-pla_0.4mm.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_um-tough-pla_0.4mm.inst.cfg @@ -53,7 +53,7 @@ small_skin_on_surface = False small_skin_width = 4 speed_infill = =speed_print speed_ironing = 20 -speed_layer_0 = =speed_roofing +speed_layer_0 = 26 speed_prime_tower = =speed_wall_0 speed_print = 45 speed_roofing = =math.ceil(speed_wall*(45/100)) diff --git a/resources/setting_visibility/advanced.cfg b/resources/setting_visibility/advanced.cfg index c3451d2c98..55a36075be 100644 --- a/resources/setting_visibility/advanced.cfg +++ b/resources/setting_visibility/advanced.cfg @@ -128,6 +128,7 @@ brim_outside_only [dual] prime_tower_enable +prime_tower_mode prime_tower_position_x prime_tower_position_y prime_tower_brim_enable @@ -136,6 +137,7 @@ prime_tower_brim_enable [blackmagic] print_sequence +user_defined_print_order_enabled magic_mesh_surface_mode magic_spiralize smooth_spiralized_contours diff --git a/resources/setting_visibility/expert.cfg b/resources/setting_visibility/expert.cfg index 2f2dd7671d..130b2580a4 100644 --- a/resources/setting_visibility/expert.cfg +++ b/resources/setting_visibility/expert.cfg @@ -293,7 +293,6 @@ support_bottom_wall_count support_interface_height support_roof_height support_bottom_height -support_interface_skip_height support_interface_density support_roof_density support_bottom_density @@ -332,11 +331,16 @@ brim_outside_only brim_smart_ordering raft_margin raft_smoothing +raft_remove_inside_corners +raft_base_smoothing +raft_interface_smoothing +raft_surface_smoothing raft_airgap raft_surface_layers raft_surface_thickness raft_surface_line_width raft_surface_line_spacing +raft_surface_monotonic raft_interface_layers raft_interface_thickness raft_interface_line_width @@ -344,6 +348,7 @@ raft_interface_line_spacing raft_base_thickness raft_base_line_width raft_base_line_spacing +raft_wall_count raft_speed raft_acceleration raft_jerk @@ -352,6 +357,7 @@ raft_is_shrink_plate [dual] prime_tower_enable +prime_tower_mode prime_tower_size prime_tower_min_volume prime_tower_position_x @@ -362,6 +368,7 @@ prime_tower_base_size prime_tower_base_height prime_tower_base_curve_magnitude prime_tower_raft_base_line_spacing +prime_tower_max_bridging_distance ooze_shield_enabled ooze_shield_angle ooze_shield_dist @@ -386,6 +393,7 @@ meshfix_fluid_motion_angle [blackmagic] print_sequence +user_defined_print_order_enabled infill_mesh infill_mesh_order cutting_mesh diff --git a/resources/variants/arjun/arjun300_pva_0.2.inst.cfg b/resources/variants/arjun/arjun300_pva_0.2.inst.cfg index 26440e5486..065fecd92b 100644 --- a/resources/variants/arjun/arjun300_pva_0.2.inst.cfg +++ b/resources/variants/arjun/arjun300_pva_0.2.inst.cfg @@ -21,7 +21,6 @@ support_interface_density = 100 support_interface_enable = True support_interface_height = =layer_height * 5 support_interface_pattern = concentric -support_interface_skip_height = =layer_height support_join_distance = 3 support_offset = 3 support_pattern = triangles diff --git a/resources/variants/arjun/arjun300_pva_0.3.inst.cfg b/resources/variants/arjun/arjun300_pva_0.3.inst.cfg index 5edaddba92..cef64896b1 100644 --- a/resources/variants/arjun/arjun300_pva_0.3.inst.cfg +++ b/resources/variants/arjun/arjun300_pva_0.3.inst.cfg @@ -21,7 +21,6 @@ support_interface_density = 100 support_interface_enable = True support_interface_height = =layer_height * 5 support_interface_pattern = concentric -support_interface_skip_height = =layer_height support_join_distance = 3 support_offset = 3 support_pattern = triangles diff --git a/resources/variants/arjun/arjun300_pva_0.4.inst.cfg b/resources/variants/arjun/arjun300_pva_0.4.inst.cfg index a5ca8ffb7a..273bab3848 100644 --- a/resources/variants/arjun/arjun300_pva_0.4.inst.cfg +++ b/resources/variants/arjun/arjun300_pva_0.4.inst.cfg @@ -21,7 +21,6 @@ support_interface_density = 100 support_interface_enable = True support_interface_height = =layer_height * 5 support_interface_pattern = concentric -support_interface_skip_height = =layer_height support_join_distance = 3 support_offset = 3 support_pattern = triangles diff --git a/resources/variants/arjun/arjun300_pva_0.5.inst.cfg b/resources/variants/arjun/arjun300_pva_0.5.inst.cfg index 2145714b0d..4ac74b10b0 100644 --- a/resources/variants/arjun/arjun300_pva_0.5.inst.cfg +++ b/resources/variants/arjun/arjun300_pva_0.5.inst.cfg @@ -21,7 +21,6 @@ support_interface_density = 100 support_interface_enable = True support_interface_height = =layer_height * 5 support_interface_pattern = concentric -support_interface_skip_height = =layer_height support_join_distance = 3 support_offset = 3 support_pattern = triangles diff --git a/resources/variants/arjun/arjun300_pva_0.6.inst.cfg b/resources/variants/arjun/arjun300_pva_0.6.inst.cfg index 40e0c5f3ba..9522f1a103 100644 --- a/resources/variants/arjun/arjun300_pva_0.6.inst.cfg +++ b/resources/variants/arjun/arjun300_pva_0.6.inst.cfg @@ -21,7 +21,6 @@ support_interface_density = 100 support_interface_enable = True support_interface_height = =layer_height * 5 support_interface_pattern = concentric -support_interface_skip_height = =layer_height support_join_distance = 3 support_offset = 3 support_pattern = triangles diff --git a/resources/variants/arjun/arjun300_pva_0.8.inst.cfg b/resources/variants/arjun/arjun300_pva_0.8.inst.cfg index ee6e5557fb..1e47424034 100644 --- a/resources/variants/arjun/arjun300_pva_0.8.inst.cfg +++ b/resources/variants/arjun/arjun300_pva_0.8.inst.cfg @@ -21,7 +21,6 @@ support_interface_density = 100 support_interface_enable = True support_interface_height = =layer_height * 5 support_interface_pattern = concentric -support_interface_skip_height = =layer_height support_join_distance = 3 support_offset = 3 support_pattern = triangles diff --git a/resources/variants/arjun/arjunpro300_pva_0.2.inst.cfg b/resources/variants/arjun/arjunpro300_pva_0.2.inst.cfg index 60d7f77d7b..3fc340152c 100644 --- a/resources/variants/arjun/arjunpro300_pva_0.2.inst.cfg +++ b/resources/variants/arjun/arjunpro300_pva_0.2.inst.cfg @@ -21,7 +21,6 @@ support_interface_density = 100 support_interface_enable = True support_interface_height = =layer_height * 5 support_interface_pattern = concentric -support_interface_skip_height = =layer_height support_join_distance = 3 support_offset = 3 support_pattern = triangles diff --git a/resources/variants/arjun/arjunpro300_pva_0.3.inst.cfg b/resources/variants/arjun/arjunpro300_pva_0.3.inst.cfg index f4c0c7e37a..8ae2ffb70a 100644 --- a/resources/variants/arjun/arjunpro300_pva_0.3.inst.cfg +++ b/resources/variants/arjun/arjunpro300_pva_0.3.inst.cfg @@ -21,7 +21,6 @@ support_interface_density = 100 support_interface_enable = True support_interface_height = =layer_height * 5 support_interface_pattern = concentric -support_interface_skip_height = =layer_height support_join_distance = 3 support_offset = 3 support_pattern = triangles diff --git a/resources/variants/arjun/arjunpro300_pva_0.4.inst.cfg b/resources/variants/arjun/arjunpro300_pva_0.4.inst.cfg index 25f40aa829..b444d14925 100644 --- a/resources/variants/arjun/arjunpro300_pva_0.4.inst.cfg +++ b/resources/variants/arjun/arjunpro300_pva_0.4.inst.cfg @@ -21,7 +21,6 @@ support_interface_density = 100 support_interface_enable = True support_interface_height = =layer_height * 5 support_interface_pattern = concentric -support_interface_skip_height = =layer_height support_join_distance = 3 support_offset = 3 support_pattern = triangles diff --git a/resources/variants/arjun/arjunpro300_pva_0.5.inst.cfg b/resources/variants/arjun/arjunpro300_pva_0.5.inst.cfg index cbb9ea3deb..e78ca2f27a 100644 --- a/resources/variants/arjun/arjunpro300_pva_0.5.inst.cfg +++ b/resources/variants/arjun/arjunpro300_pva_0.5.inst.cfg @@ -21,7 +21,6 @@ support_interface_density = 100 support_interface_enable = True support_interface_height = =layer_height * 5 support_interface_pattern = concentric -support_interface_skip_height = =layer_height support_join_distance = 3 support_offset = 3 support_pattern = triangles diff --git a/resources/variants/arjun/arjunpro300_pva_0.6.inst.cfg b/resources/variants/arjun/arjunpro300_pva_0.6.inst.cfg index d9459b476a..d6a3770cd9 100644 --- a/resources/variants/arjun/arjunpro300_pva_0.6.inst.cfg +++ b/resources/variants/arjun/arjunpro300_pva_0.6.inst.cfg @@ -21,7 +21,6 @@ support_interface_density = 100 support_interface_enable = True support_interface_height = =layer_height * 5 support_interface_pattern = concentric -support_interface_skip_height = =layer_height support_join_distance = 3 support_offset = 3 support_pattern = triangles diff --git a/resources/variants/arjun/arjunpro300_pva_0.8.inst.cfg b/resources/variants/arjun/arjunpro300_pva_0.8.inst.cfg index cf5df5f37d..c19c8ca79a 100644 --- a/resources/variants/arjun/arjunpro300_pva_0.8.inst.cfg +++ b/resources/variants/arjun/arjunpro300_pva_0.8.inst.cfg @@ -21,7 +21,6 @@ support_interface_density = 100 support_interface_enable = True support_interface_height = =layer_height * 5 support_interface_pattern = concentric -support_interface_skip_height = =layer_height support_join_distance = 3 support_offset = 3 support_pattern = triangles diff --git a/resources/variants/elegoo/elegoo_neptune_4max/elegoo_neptune_4max_0.20.inst.cfg b/resources/variants/elegoo/elegoo_neptune_4max/elegoo_neptune_4max_0.20.inst.cfg new file mode 100644 index 0000000000..5dea2c50ce --- /dev/null +++ b/resources/variants/elegoo/elegoo_neptune_4max/elegoo_neptune_4max_0.20.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = elegoo_neptune_4max +name = 0.20mm_Elegoo_Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.2 + diff --git a/resources/variants/elegoo/elegoo_neptune_4max/elegoo_neptune_4max_0.40.inst.cfg b/resources/variants/elegoo/elegoo_neptune_4max/elegoo_neptune_4max_0.40.inst.cfg new file mode 100644 index 0000000000..a7d62bdcff --- /dev/null +++ b/resources/variants/elegoo/elegoo_neptune_4max/elegoo_neptune_4max_0.40.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = elegoo_neptune_4max +name = 0.40mm_Elegoo_Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.4 + diff --git a/resources/variants/elegoo/elegoo_neptune_4max/elegoo_neptune_4max_0.60.inst.cfg b/resources/variants/elegoo/elegoo_neptune_4max/elegoo_neptune_4max_0.60.inst.cfg new file mode 100644 index 0000000000..018d6d4881 --- /dev/null +++ b/resources/variants/elegoo/elegoo_neptune_4max/elegoo_neptune_4max_0.60.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = elegoo_neptune_4max +name = 0.60mm_Elegoo_Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.6 + diff --git a/resources/variants/elegoo/elegoo_neptune_4max/elegoo_neptune_4max_0.80.inst.cfg b/resources/variants/elegoo/elegoo_neptune_4max/elegoo_neptune_4max_0.80.inst.cfg new file mode 100644 index 0000000000..fc7177d14c --- /dev/null +++ b/resources/variants/elegoo/elegoo_neptune_4max/elegoo_neptune_4max_0.80.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = elegoo_neptune_4max +name = 0.80mm_Elegoo_Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.8 + diff --git a/resources/variants/elegoo/elegoo_neptune_4plus/elegoo_neptune_4plus_0.20.inst.cfg b/resources/variants/elegoo/elegoo_neptune_4plus/elegoo_neptune_4plus_0.20.inst.cfg new file mode 100644 index 0000000000..16ac330f8a --- /dev/null +++ b/resources/variants/elegoo/elegoo_neptune_4plus/elegoo_neptune_4plus_0.20.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = elegoo_neptune_4plus +name = 0.20mm_Elegoo_Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.2 + diff --git a/resources/variants/elegoo/elegoo_neptune_4plus/elegoo_neptune_4plus_0.40.inst.cfg b/resources/variants/elegoo/elegoo_neptune_4plus/elegoo_neptune_4plus_0.40.inst.cfg new file mode 100644 index 0000000000..2d0237ff34 --- /dev/null +++ b/resources/variants/elegoo/elegoo_neptune_4plus/elegoo_neptune_4plus_0.40.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = elegoo_neptune_4plus +name = 0.40mm_Elegoo_Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.4 + diff --git a/resources/variants/elegoo/elegoo_neptune_4plus/elegoo_neptune_4plus_0.60.inst.cfg b/resources/variants/elegoo/elegoo_neptune_4plus/elegoo_neptune_4plus_0.60.inst.cfg new file mode 100644 index 0000000000..bd960d80e1 --- /dev/null +++ b/resources/variants/elegoo/elegoo_neptune_4plus/elegoo_neptune_4plus_0.60.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = elegoo_neptune_4plus +name = 0.60mm_Elegoo_Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.6 + diff --git a/resources/variants/elegoo/elegoo_neptune_4plus/elegoo_neptune_4plus_0.80.inst.cfg b/resources/variants/elegoo/elegoo_neptune_4plus/elegoo_neptune_4plus_0.80.inst.cfg new file mode 100644 index 0000000000..32d3860498 --- /dev/null +++ b/resources/variants/elegoo/elegoo_neptune_4plus/elegoo_neptune_4plus_0.80.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = elegoo_neptune_4plus +name = 0.80mm_Elegoo_Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.8 + diff --git a/resources/variants/flashforge/flashforge_adventurer3_0.3.inst.cfg b/resources/variants/flashforge/flashforge_adventurer3_0.3.inst.cfg new file mode 100644 index 0000000000..fdaea7e9f0 --- /dev/null +++ b/resources/variants/flashforge/flashforge_adventurer3_0.3.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = flashforge_adventurer3 +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/flashforge/flashforge_adventurer3_0.4.inst.cfg b/resources/variants/flashforge/flashforge_adventurer3_0.4.inst.cfg new file mode 100644 index 0000000000..5a7a2520ad --- /dev/null +++ b/resources/variants/flashforge/flashforge_adventurer3_0.4.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = flashforge_adventurer3 +name = 0.4mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.4 + diff --git a/resources/variants/flashforge/flashforge_adventurer3_0.6.inst.cfg b/resources/variants/flashforge/flashforge_adventurer3_0.6.inst.cfg new file mode 100644 index 0000000000..bee4393cc9 --- /dev/null +++ b/resources/variants/flashforge/flashforge_adventurer3_0.6.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = flashforge_adventurer3 +name = 0.6mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.6 + diff --git a/resources/variants/flashforge/flashforge_adventurer3c_0.3.inst.cfg b/resources/variants/flashforge/flashforge_adventurer3c_0.3.inst.cfg new file mode 100644 index 0000000000..404c0efb06 --- /dev/null +++ b/resources/variants/flashforge/flashforge_adventurer3c_0.3.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = flashforge_adventurer3c +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/flashforge/flashforge_adventurer3c_0.4.inst.cfg b/resources/variants/flashforge/flashforge_adventurer3c_0.4.inst.cfg new file mode 100644 index 0000000000..20cb91c62e --- /dev/null +++ b/resources/variants/flashforge/flashforge_adventurer3c_0.4.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = flashforge_adventurer3c +name = 0.4mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.4 + diff --git a/resources/variants/flashforge/flashforge_adventurer3c_0.6.inst.cfg b/resources/variants/flashforge/flashforge_adventurer3c_0.6.inst.cfg new file mode 100644 index 0000000000..531763721a --- /dev/null +++ b/resources/variants/flashforge/flashforge_adventurer3c_0.6.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = flashforge_adventurer3c +name = 0.6mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.6 + diff --git a/resources/variants/flashforge/flashforge_adventurer4_0.3.inst.cfg b/resources/variants/flashforge/flashforge_adventurer4_0.3.inst.cfg new file mode 100644 index 0000000000..661de9a802 --- /dev/null +++ b/resources/variants/flashforge/flashforge_adventurer4_0.3.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = flashforge_adventurer4 +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/flashforge/flashforge_adventurer4_0.4.inst.cfg b/resources/variants/flashforge/flashforge_adventurer4_0.4.inst.cfg new file mode 100644 index 0000000000..7944ab4d6a --- /dev/null +++ b/resources/variants/flashforge/flashforge_adventurer4_0.4.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = flashforge_adventurer4 +name = 0.4mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.4 + diff --git a/resources/variants/flashforge/flashforge_adventurer4_0.6.inst.cfg b/resources/variants/flashforge/flashforge_adventurer4_0.6.inst.cfg new file mode 100644 index 0000000000..2e0bb4d36a --- /dev/null +++ b/resources/variants/flashforge/flashforge_adventurer4_0.6.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = flashforge_adventurer4 +name = 0.6mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.6 + diff --git a/resources/variants/flashforge/flashforge_adventurer4lite_0.3.inst.cfg b/resources/variants/flashforge/flashforge_adventurer4lite_0.3.inst.cfg new file mode 100644 index 0000000000..25f6eba9bf --- /dev/null +++ b/resources/variants/flashforge/flashforge_adventurer4lite_0.3.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = flashforge_adventurer4lite +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/flashforge/flashforge_adventurer4lite_0.4.inst.cfg b/resources/variants/flashforge/flashforge_adventurer4lite_0.4.inst.cfg new file mode 100644 index 0000000000..c073e05831 --- /dev/null +++ b/resources/variants/flashforge/flashforge_adventurer4lite_0.4.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = flashforge_adventurer4lite +name = 0.4mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.4 + diff --git a/resources/variants/flashforge/flashforge_adventurer4lite_0.6.inst.cfg b/resources/variants/flashforge/flashforge_adventurer4lite_0.6.inst.cfg new file mode 100644 index 0000000000..5801637f40 --- /dev/null +++ b/resources/variants/flashforge/flashforge_adventurer4lite_0.6.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = flashforge_adventurer4lite +name = 0.6mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.6 + diff --git a/resources/variants/kosher/kosher220_pva_0.2.inst.cfg b/resources/variants/kosher/kosher220_pva_0.2.inst.cfg index e5893c3e65..ea3b821cea 100644 --- a/resources/variants/kosher/kosher220_pva_0.2.inst.cfg +++ b/resources/variants/kosher/kosher220_pva_0.2.inst.cfg @@ -21,7 +21,6 @@ support_interface_density = 100 support_interface_enable = True support_interface_height = =layer_height * 5 support_interface_pattern = concentric -support_interface_skip_height = =layer_height support_join_distance = 3 support_offset = 3 support_pattern = triangles diff --git a/resources/variants/kosher/kosher220_pva_0.3.inst.cfg b/resources/variants/kosher/kosher220_pva_0.3.inst.cfg index e1fbeaaf69..216388c64b 100644 --- a/resources/variants/kosher/kosher220_pva_0.3.inst.cfg +++ b/resources/variants/kosher/kosher220_pva_0.3.inst.cfg @@ -21,7 +21,6 @@ support_interface_density = 100 support_interface_enable = True support_interface_height = =layer_height * 5 support_interface_pattern = concentric -support_interface_skip_height = =layer_height support_join_distance = 3 support_offset = 3 support_pattern = triangles diff --git a/resources/variants/kosher/kosher220_pva_0.4.inst.cfg b/resources/variants/kosher/kosher220_pva_0.4.inst.cfg index 40de699118..024d842630 100644 --- a/resources/variants/kosher/kosher220_pva_0.4.inst.cfg +++ b/resources/variants/kosher/kosher220_pva_0.4.inst.cfg @@ -21,7 +21,6 @@ support_interface_density = 100 support_interface_enable = True support_interface_height = =layer_height * 5 support_interface_pattern = concentric -support_interface_skip_height = =layer_height support_join_distance = 3 support_offset = 3 support_pattern = triangles diff --git a/resources/variants/kosher/kosher220_pva_0.5.inst.cfg b/resources/variants/kosher/kosher220_pva_0.5.inst.cfg index 2a4c88d022..6197e0ab9c 100644 --- a/resources/variants/kosher/kosher220_pva_0.5.inst.cfg +++ b/resources/variants/kosher/kosher220_pva_0.5.inst.cfg @@ -21,7 +21,6 @@ support_interface_density = 100 support_interface_enable = True support_interface_height = =layer_height * 5 support_interface_pattern = concentric -support_interface_skip_height = =layer_height support_join_distance = 3 support_offset = 3 support_pattern = triangles diff --git a/resources/variants/kosher/kosher220_pva_0.6.inst.cfg b/resources/variants/kosher/kosher220_pva_0.6.inst.cfg index a3781a00bd..211a361c2b 100644 --- a/resources/variants/kosher/kosher220_pva_0.6.inst.cfg +++ b/resources/variants/kosher/kosher220_pva_0.6.inst.cfg @@ -21,7 +21,6 @@ support_interface_density = 100 support_interface_enable = True support_interface_height = =layer_height * 5 support_interface_pattern = concentric -support_interface_skip_height = =layer_height support_join_distance = 3 support_offset = 3 support_pattern = triangles diff --git a/resources/variants/kosher/kosher220_pva_0.8.inst.cfg b/resources/variants/kosher/kosher220_pva_0.8.inst.cfg index 4faf6729b6..6f6a9dd6b4 100644 --- a/resources/variants/kosher/kosher220_pva_0.8.inst.cfg +++ b/resources/variants/kosher/kosher220_pva_0.8.inst.cfg @@ -21,7 +21,6 @@ support_interface_density = 100 support_interface_enable = True support_interface_height = =layer_height * 5 support_interface_pattern = concentric -support_interface_skip_height = =layer_height support_join_distance = 3 support_offset = 3 support_pattern = triangles diff --git a/resources/variants/ratrig/ratrig_base_0.2.inst.cfg b/resources/variants/ratrig/ratrig_base_0.2.inst.cfg new file mode 100644 index 0000000000..bb337f309a --- /dev/null +++ b/resources/variants/ratrig/ratrig_base_0.2.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_base +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/ratrig/ratrig_base_0.3.inst.cfg b/resources/variants/ratrig/ratrig_base_0.3.inst.cfg new file mode 100644 index 0000000000..ba4d9f74b9 --- /dev/null +++ b/resources/variants/ratrig/ratrig_base_0.3.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_base +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/ratrig/ratrig_base_0.4.inst.cfg b/resources/variants/ratrig/ratrig_base_0.4.inst.cfg new file mode 100644 index 0000000000..e784998708 --- /dev/null +++ b/resources/variants/ratrig/ratrig_base_0.4.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_base +name = 0.4mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.4 + diff --git a/resources/variants/ratrig/ratrig_base_0.6.inst.cfg b/resources/variants/ratrig/ratrig_base_0.6.inst.cfg new file mode 100644 index 0000000000..da6595ad28 --- /dev/null +++ b/resources/variants/ratrig/ratrig_base_0.6.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_base +name = 0.6mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.6 + diff --git a/resources/variants/ratrig/ratrig_base_0.8.inst.cfg b/resources/variants/ratrig/ratrig_base_0.8.inst.cfg new file mode 100644 index 0000000000..d710879bd0 --- /dev/null +++ b/resources/variants/ratrig/ratrig_base_0.8.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_base +name = 0.8mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.8 + diff --git a/resources/variants/ratrig/ratrig_base_1.0.inst.cfg b/resources/variants/ratrig/ratrig_base_1.0.inst.cfg new file mode 100644 index 0000000000..3a8241c15a --- /dev/null +++ b/resources/variants/ratrig/ratrig_base_1.0.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_base +name = 1.0mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 1.0 + diff --git a/resources/variants/ratrig/ratrig_vcore3_200_0.2.inst.cfg b/resources/variants/ratrig/ratrig_vcore3_200_0.2.inst.cfg new file mode 100644 index 0000000000..495d2ba3a3 --- /dev/null +++ b/resources/variants/ratrig/ratrig_vcore3_200_0.2.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_vcore3_200 +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/ratrig/ratrig_vcore3_200_0.3.inst.cfg b/resources/variants/ratrig/ratrig_vcore3_200_0.3.inst.cfg new file mode 100644 index 0000000000..890d7bf30f --- /dev/null +++ b/resources/variants/ratrig/ratrig_vcore3_200_0.3.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_vcore3_200 +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/ratrig/ratrig_vcore3_200_0.4.inst.cfg b/resources/variants/ratrig/ratrig_vcore3_200_0.4.inst.cfg new file mode 100644 index 0000000000..e640ef7adf --- /dev/null +++ b/resources/variants/ratrig/ratrig_vcore3_200_0.4.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_vcore3_200 +name = 0.4mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.4 + diff --git a/resources/variants/ratrig/ratrig_vcore3_200_0.6.inst.cfg b/resources/variants/ratrig/ratrig_vcore3_200_0.6.inst.cfg new file mode 100644 index 0000000000..b25e6ee64a --- /dev/null +++ b/resources/variants/ratrig/ratrig_vcore3_200_0.6.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_vcore3_200 +name = 0.6mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.6 + diff --git a/resources/variants/ratrig/ratrig_vcore3_200_0.8.inst.cfg b/resources/variants/ratrig/ratrig_vcore3_200_0.8.inst.cfg new file mode 100644 index 0000000000..9462fa7748 --- /dev/null +++ b/resources/variants/ratrig/ratrig_vcore3_200_0.8.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_vcore3_200 +name = 0.8mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.8 + diff --git a/resources/variants/ratrig/ratrig_vcore3_200_1.0.inst.cfg b/resources/variants/ratrig/ratrig_vcore3_200_1.0.inst.cfg new file mode 100644 index 0000000000..f817ee13a8 --- /dev/null +++ b/resources/variants/ratrig/ratrig_vcore3_200_1.0.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_vcore3_200 +name = 1.0mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 1.0 + diff --git a/resources/variants/ratrig/ratrig_vcore3_300_0.2.inst.cfg b/resources/variants/ratrig/ratrig_vcore3_300_0.2.inst.cfg new file mode 100644 index 0000000000..a39e02aab2 --- /dev/null +++ b/resources/variants/ratrig/ratrig_vcore3_300_0.2.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_vcore3_300 +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/ratrig/ratrig_vcore3_300_0.3.inst.cfg b/resources/variants/ratrig/ratrig_vcore3_300_0.3.inst.cfg new file mode 100644 index 0000000000..a49459aac3 --- /dev/null +++ b/resources/variants/ratrig/ratrig_vcore3_300_0.3.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_vcore3_300 +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/ratrig/ratrig_vcore3_300_0.4.inst.cfg b/resources/variants/ratrig/ratrig_vcore3_300_0.4.inst.cfg new file mode 100644 index 0000000000..e0bf634a2c --- /dev/null +++ b/resources/variants/ratrig/ratrig_vcore3_300_0.4.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_vcore3_300 +name = 0.4mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.4 + diff --git a/resources/variants/ratrig/ratrig_vcore3_300_0.6.inst.cfg b/resources/variants/ratrig/ratrig_vcore3_300_0.6.inst.cfg new file mode 100644 index 0000000000..c2026ce463 --- /dev/null +++ b/resources/variants/ratrig/ratrig_vcore3_300_0.6.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_vcore3_300 +name = 0.6mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.6 + diff --git a/resources/variants/ratrig/ratrig_vcore3_300_0.8.inst.cfg b/resources/variants/ratrig/ratrig_vcore3_300_0.8.inst.cfg new file mode 100644 index 0000000000..99d6d7e38b --- /dev/null +++ b/resources/variants/ratrig/ratrig_vcore3_300_0.8.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_vcore3_300 +name = 0.8mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.8 + diff --git a/resources/variants/ratrig/ratrig_vcore3_300_1.0.inst.cfg b/resources/variants/ratrig/ratrig_vcore3_300_1.0.inst.cfg new file mode 100644 index 0000000000..7ad21e8c09 --- /dev/null +++ b/resources/variants/ratrig/ratrig_vcore3_300_1.0.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_vcore3_300 +name = 1.0mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 1.0 + diff --git a/resources/variants/ratrig/ratrig_vcore3_400_0.2.inst.cfg b/resources/variants/ratrig/ratrig_vcore3_400_0.2.inst.cfg new file mode 100644 index 0000000000..bd02a12125 --- /dev/null +++ b/resources/variants/ratrig/ratrig_vcore3_400_0.2.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_vcore3_400 +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/ratrig/ratrig_vcore3_400_0.3.inst.cfg b/resources/variants/ratrig/ratrig_vcore3_400_0.3.inst.cfg new file mode 100644 index 0000000000..85a585d692 --- /dev/null +++ b/resources/variants/ratrig/ratrig_vcore3_400_0.3.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_vcore3_400 +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/ratrig/ratrig_vcore3_400_0.4.inst.cfg b/resources/variants/ratrig/ratrig_vcore3_400_0.4.inst.cfg new file mode 100644 index 0000000000..0bcee4f011 --- /dev/null +++ b/resources/variants/ratrig/ratrig_vcore3_400_0.4.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_vcore3_400 +name = 0.4mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.4 + diff --git a/resources/variants/ratrig/ratrig_vcore3_400_0.6.inst.cfg b/resources/variants/ratrig/ratrig_vcore3_400_0.6.inst.cfg new file mode 100644 index 0000000000..0b7ea7fc2e --- /dev/null +++ b/resources/variants/ratrig/ratrig_vcore3_400_0.6.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_vcore3_400 +name = 0.6mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.6 + diff --git a/resources/variants/ratrig/ratrig_vcore3_400_0.8.inst.cfg b/resources/variants/ratrig/ratrig_vcore3_400_0.8.inst.cfg new file mode 100644 index 0000000000..e5baf012f0 --- /dev/null +++ b/resources/variants/ratrig/ratrig_vcore3_400_0.8.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_vcore3_400 +name = 0.8mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.8 + diff --git a/resources/variants/ratrig/ratrig_vcore3_400_1.0.inst.cfg b/resources/variants/ratrig/ratrig_vcore3_400_1.0.inst.cfg new file mode 100644 index 0000000000..4b13608cf1 --- /dev/null +++ b/resources/variants/ratrig/ratrig_vcore3_400_1.0.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_vcore3_400 +name = 1.0mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 1.0 + diff --git a/resources/variants/ratrig/ratrig_vcore3_500_0.2.inst.cfg b/resources/variants/ratrig/ratrig_vcore3_500_0.2.inst.cfg new file mode 100644 index 0000000000..3866031f65 --- /dev/null +++ b/resources/variants/ratrig/ratrig_vcore3_500_0.2.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_vcore3_500 +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/ratrig/ratrig_vcore3_500_0.3.inst.cfg b/resources/variants/ratrig/ratrig_vcore3_500_0.3.inst.cfg new file mode 100644 index 0000000000..c3dcc2fa25 --- /dev/null +++ b/resources/variants/ratrig/ratrig_vcore3_500_0.3.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_vcore3_500 +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/ratrig/ratrig_vcore3_500_0.4.inst.cfg b/resources/variants/ratrig/ratrig_vcore3_500_0.4.inst.cfg new file mode 100644 index 0000000000..8c1911df41 --- /dev/null +++ b/resources/variants/ratrig/ratrig_vcore3_500_0.4.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_vcore3_500 +name = 0.4mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.4 + diff --git a/resources/variants/ratrig/ratrig_vcore3_500_0.6.inst.cfg b/resources/variants/ratrig/ratrig_vcore3_500_0.6.inst.cfg new file mode 100644 index 0000000000..fa9170ee16 --- /dev/null +++ b/resources/variants/ratrig/ratrig_vcore3_500_0.6.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_vcore3_500 +name = 0.6mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.6 + diff --git a/resources/variants/ratrig/ratrig_vcore3_500_0.8.inst.cfg b/resources/variants/ratrig/ratrig_vcore3_500_0.8.inst.cfg new file mode 100644 index 0000000000..ee71589ca2 --- /dev/null +++ b/resources/variants/ratrig/ratrig_vcore3_500_0.8.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_vcore3_500 +name = 0.8mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.8 + diff --git a/resources/variants/ratrig/ratrig_vcore3_500_1.0.inst.cfg b/resources/variants/ratrig/ratrig_vcore3_500_1.0.inst.cfg new file mode 100644 index 0000000000..6e91017f1e --- /dev/null +++ b/resources/variants/ratrig/ratrig_vcore3_500_1.0.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_vcore3_500 +name = 1.0mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 1.0 + diff --git a/resources/variants/ratrig/ratrig_vminion_0.2.inst.cfg b/resources/variants/ratrig/ratrig_vminion_0.2.inst.cfg new file mode 100644 index 0000000000..0f9433e1b2 --- /dev/null +++ b/resources/variants/ratrig/ratrig_vminion_0.2.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_vminion +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/ratrig/ratrig_vminion_0.3.inst.cfg b/resources/variants/ratrig/ratrig_vminion_0.3.inst.cfg new file mode 100644 index 0000000000..0faf86e4d0 --- /dev/null +++ b/resources/variants/ratrig/ratrig_vminion_0.3.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_vminion +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/ratrig/ratrig_vminion_0.4.inst.cfg b/resources/variants/ratrig/ratrig_vminion_0.4.inst.cfg new file mode 100644 index 0000000000..0d126748d1 --- /dev/null +++ b/resources/variants/ratrig/ratrig_vminion_0.4.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_vminion +name = 0.4mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.4 + diff --git a/resources/variants/ratrig/ratrig_vminion_0.6.inst.cfg b/resources/variants/ratrig/ratrig_vminion_0.6.inst.cfg new file mode 100644 index 0000000000..189218b151 --- /dev/null +++ b/resources/variants/ratrig/ratrig_vminion_0.6.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_vminion +name = 0.6mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.6 + diff --git a/resources/variants/ratrig/ratrig_vminion_0.8.inst.cfg b/resources/variants/ratrig/ratrig_vminion_0.8.inst.cfg new file mode 100644 index 0000000000..e8a6437abd --- /dev/null +++ b/resources/variants/ratrig/ratrig_vminion_0.8.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_vminion +name = 0.8mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 0.8 + diff --git a/resources/variants/ratrig/ratrig_vminion_1.0.inst.cfg b/resources/variants/ratrig/ratrig_vminion_1.0.inst.cfg new file mode 100644 index 0000000000..9a55294853 --- /dev/null +++ b/resources/variants/ratrig/ratrig_vminion_1.0.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = ratrig_vminion +name = 1.0mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 22 +type = variant + +[values] +machine_nozzle_size = 1.0 + diff --git a/resources/variants/ultimaker_s3_aa0.25.inst.cfg b/resources/variants/ultimaker_s3_aa0.25.inst.cfg index 1f3baa432f..97b303035c 100644 --- a/resources/variants/ultimaker_s3_aa0.25.inst.cfg +++ b/resources/variants/ultimaker_s3_aa0.25.inst.cfg @@ -16,7 +16,6 @@ machine_nozzle_heat_up_speed = 1.5 machine_nozzle_id = AA 0.25 machine_nozzle_size = 0.25 machine_nozzle_tip_outer_diameter = 0.65 -retraction_min_travel = 0.7 retraction_prime_speed = =retraction_speed speed_print = 55 speed_topbottom = 20 diff --git a/resources/variants/ultimaker_s3_aa0.8.inst.cfg b/resources/variants/ultimaker_s3_aa0.8.inst.cfg index c30365897b..e7d3487503 100644 --- a/resources/variants/ultimaker_s3_aa0.8.inst.cfg +++ b/resources/variants/ultimaker_s3_aa0.8.inst.cfg @@ -29,7 +29,6 @@ raft_surface_layers = 1 retraction_amount = 6.5 retraction_hop = 2 retraction_hop_only_when_collides = True -retraction_min_travel = =line_width * 2 retraction_speed = 25 speed_print = 35 speed_topbottom = =math.ceil(speed_print * 25 / 35) diff --git a/resources/variants/ultimaker_s3_aa04.inst.cfg b/resources/variants/ultimaker_s3_aa04.inst.cfg index b3f76758f4..76992b5805 100644 --- a/resources/variants/ultimaker_s3_aa04.inst.cfg +++ b/resources/variants/ultimaker_s3_aa04.inst.cfg @@ -14,7 +14,6 @@ machine_nozzle_cool_down_speed = 0.9 machine_nozzle_id = AA 0.4 machine_nozzle_tip_outer_diameter = 1.0 retraction_amount = 6.5 -retraction_min_travel = =line_width * 2 speed_print = 70 speed_topbottom = =math.ceil(speed_print * 30 / 70) speed_wall = =math.ceil(speed_print * 30 / 70) diff --git a/resources/variants/ultimaker_s3_bb0.8.inst.cfg b/resources/variants/ultimaker_s3_bb0.8.inst.cfg index 34e1b6d308..d0f78ac3bd 100644 --- a/resources/variants/ultimaker_s3_bb0.8.inst.cfg +++ b/resources/variants/ultimaker_s3_bb0.8.inst.cfg @@ -30,7 +30,6 @@ prime_tower_wipe_enabled = True raft_surface_layers = 1 retraction_hop = 2 retraction_hop_only_when_collides = True -retraction_min_travel = =line_width * 3 speed_prime_tower = =math.ceil(speed_print * 7 / 35) speed_print = 35 speed_support = =math.ceil(speed_print * 25 / 35) diff --git a/resources/variants/ultimaker_s3_bb04.inst.cfg b/resources/variants/ultimaker_s3_bb04.inst.cfg index e50241aa3a..4e232cbb5e 100644 --- a/resources/variants/ultimaker_s3_bb04.inst.cfg +++ b/resources/variants/ultimaker_s3_bb04.inst.cfg @@ -16,7 +16,6 @@ acceleration_support_interface = =math.ceil(acceleration_support * 1500 / 2000) machine_nozzle_heat_up_speed = 1.5 machine_nozzle_id = BB 0.4 machine_nozzle_tip_outer_diameter = 1.0 -retraction_min_travel = =3 * line_width speed_prime_tower = =math.ceil(speed_print * 10 / 35) speed_support = =math.ceil(speed_print * 25 / 35) speed_support_interface = =math.ceil(speed_support * 20 / 25) diff --git a/resources/variants/ultimaker_s3_cc04.inst.cfg b/resources/variants/ultimaker_s3_cc04.inst.cfg index 19192bfba6..38f04547aa 100644 --- a/resources/variants/ultimaker_s3_cc04.inst.cfg +++ b/resources/variants/ultimaker_s3_cc04.inst.cfg @@ -13,7 +13,6 @@ brim_width = 7 machine_nozzle_cool_down_speed = 0.9 machine_nozzle_id = CC 0.4 machine_nozzle_size = 0.4 -retraction_min_travel = =line_width * 2 retraction_prime_speed = =retraction_speed speed_infill = =speed_print speed_print = 45 diff --git a/resources/variants/ultimaker_s3_cc06.inst.cfg b/resources/variants/ultimaker_s3_cc06.inst.cfg index 925a9f68d6..e42817e8f8 100644 --- a/resources/variants/ultimaker_s3_cc06.inst.cfg +++ b/resources/variants/ultimaker_s3_cc06.inst.cfg @@ -13,7 +13,6 @@ brim_width = 7 machine_nozzle_cool_down_speed = 0.9 machine_nozzle_id = CC 0.6 machine_nozzle_size = 0.6 -retraction_min_travel = =line_width * 2 retraction_prime_speed = =retraction_speed speed_infill = =speed_print speed_print = 45 diff --git a/resources/variants/ultimaker_s5_aa0.25.inst.cfg b/resources/variants/ultimaker_s5_aa0.25.inst.cfg index 519b21c920..08ed6132f5 100644 --- a/resources/variants/ultimaker_s5_aa0.25.inst.cfg +++ b/resources/variants/ultimaker_s5_aa0.25.inst.cfg @@ -16,7 +16,6 @@ machine_nozzle_heat_up_speed = 1.5 machine_nozzle_id = AA 0.25 machine_nozzle_size = 0.25 machine_nozzle_tip_outer_diameter = 0.65 -retraction_min_travel = 0.7 retraction_prime_speed = =retraction_speed speed_print = 55 speed_topbottom = 20 diff --git a/resources/variants/ultimaker_s5_aa0.8.inst.cfg b/resources/variants/ultimaker_s5_aa0.8.inst.cfg index b482c418f0..04a3a97d11 100644 --- a/resources/variants/ultimaker_s5_aa0.8.inst.cfg +++ b/resources/variants/ultimaker_s5_aa0.8.inst.cfg @@ -29,7 +29,6 @@ raft_surface_layers = 1 retraction_amount = 6.5 retraction_hop = 2 retraction_hop_only_when_collides = True -retraction_min_travel = =line_width * 2 retraction_speed = 25 speed_print = 35 speed_topbottom = =math.ceil(speed_print * 25 / 35) diff --git a/resources/variants/ultimaker_s5_aa04.inst.cfg b/resources/variants/ultimaker_s5_aa04.inst.cfg index 09f528162d..fd4f1ff778 100644 --- a/resources/variants/ultimaker_s5_aa04.inst.cfg +++ b/resources/variants/ultimaker_s5_aa04.inst.cfg @@ -14,7 +14,6 @@ machine_nozzle_cool_down_speed = 0.9 machine_nozzle_id = AA 0.4 machine_nozzle_tip_outer_diameter = 1.0 retraction_amount = 6.5 -retraction_min_travel = =line_width * 2 speed_print = 70 speed_topbottom = =math.ceil(speed_print * 30 / 70) speed_wall = =math.ceil(speed_print * 30 / 70) diff --git a/resources/variants/ultimaker_s5_bb0.8.inst.cfg b/resources/variants/ultimaker_s5_bb0.8.inst.cfg index 660a6b10f4..07b556d206 100644 --- a/resources/variants/ultimaker_s5_bb0.8.inst.cfg +++ b/resources/variants/ultimaker_s5_bb0.8.inst.cfg @@ -30,7 +30,6 @@ prime_tower_wipe_enabled = True raft_surface_layers = 1 retraction_hop = 2 retraction_hop_only_when_collides = True -retraction_min_travel = =line_width * 3 speed_prime_tower = =math.ceil(speed_print * 7 / 35) speed_print = 35 speed_support = =math.ceil(speed_print * 25 / 35) diff --git a/resources/variants/ultimaker_s5_bb04.inst.cfg b/resources/variants/ultimaker_s5_bb04.inst.cfg index 2058185bb8..7959fc75c2 100644 --- a/resources/variants/ultimaker_s5_bb04.inst.cfg +++ b/resources/variants/ultimaker_s5_bb04.inst.cfg @@ -16,7 +16,6 @@ acceleration_support_interface = =math.ceil(acceleration_support * 1500 / 2000) machine_nozzle_heat_up_speed = 1.5 machine_nozzle_id = BB 0.4 machine_nozzle_tip_outer_diameter = 1.0 -retraction_min_travel = =3 * line_width speed_prime_tower = =math.ceil(speed_print * 10 / 35) speed_support = =math.ceil(speed_print * 25 / 35) speed_support_interface = =math.ceil(speed_support * 20 / 25) diff --git a/resources/variants/ultimaker_s5_cc04.inst.cfg b/resources/variants/ultimaker_s5_cc04.inst.cfg index ef64dc0ae4..5510d0126f 100644 --- a/resources/variants/ultimaker_s5_cc04.inst.cfg +++ b/resources/variants/ultimaker_s5_cc04.inst.cfg @@ -13,7 +13,6 @@ brim_width = 7 machine_nozzle_cool_down_speed = 0.9 machine_nozzle_id = CC 0.4 machine_nozzle_size = 0.4 -retraction_min_travel = =line_width * 2 retraction_prime_speed = =retraction_speed speed_infill = =speed_print speed_print = 45 diff --git a/resources/variants/ultimaker_s5_cc06.inst.cfg b/resources/variants/ultimaker_s5_cc06.inst.cfg index ba33bab17b..a49c790e4f 100644 --- a/resources/variants/ultimaker_s5_cc06.inst.cfg +++ b/resources/variants/ultimaker_s5_cc06.inst.cfg @@ -13,7 +13,6 @@ brim_width = 7 machine_nozzle_cool_down_speed = 0.9 machine_nozzle_id = CC 0.6 machine_nozzle_size = 0.6 -retraction_min_travel = =line_width * 2 retraction_prime_speed = =retraction_speed speed_infill = =speed_print speed_print = 45 diff --git a/resources/variants/ultimaker_s7_aa0.25.inst.cfg b/resources/variants/ultimaker_s7_aa0.25.inst.cfg index 1495af6c48..fc1bdcfef2 100644 --- a/resources/variants/ultimaker_s7_aa0.25.inst.cfg +++ b/resources/variants/ultimaker_s7_aa0.25.inst.cfg @@ -16,7 +16,6 @@ machine_nozzle_heat_up_speed = 1.5 machine_nozzle_id = AA 0.25 machine_nozzle_size = 0.25 machine_nozzle_tip_outer_diameter = 0.65 -retraction_min_travel = 0.7 retraction_prime_speed = =retraction_speed speed_print = 55 speed_topbottom = 20 diff --git a/resources/variants/ultimaker_s7_aa0.8.inst.cfg b/resources/variants/ultimaker_s7_aa0.8.inst.cfg index a5b6a66516..b3253f7d25 100644 --- a/resources/variants/ultimaker_s7_aa0.8.inst.cfg +++ b/resources/variants/ultimaker_s7_aa0.8.inst.cfg @@ -29,7 +29,6 @@ raft_surface_layers = 1 retraction_amount = 6.5 retraction_hop = 2 retraction_hop_only_when_collides = True -retraction_min_travel = =line_width * 2 retraction_speed = 25 speed_print = 35 speed_topbottom = =math.ceil(speed_print * 25 / 35) diff --git a/resources/variants/ultimaker_s7_aa04.inst.cfg b/resources/variants/ultimaker_s7_aa04.inst.cfg index a9079c975e..6aee6597e0 100644 --- a/resources/variants/ultimaker_s7_aa04.inst.cfg +++ b/resources/variants/ultimaker_s7_aa04.inst.cfg @@ -14,7 +14,6 @@ machine_nozzle_cool_down_speed = 0.9 machine_nozzle_id = AA 0.4 machine_nozzle_tip_outer_diameter = 1.0 retraction_amount = 6.5 -retraction_min_travel = =line_width * 2 speed_print = 70 speed_topbottom = =math.ceil(speed_print * 30 / 70) speed_wall = =math.ceil(speed_print * 30 / 70) diff --git a/resources/variants/ultimaker_s7_bb0.8.inst.cfg b/resources/variants/ultimaker_s7_bb0.8.inst.cfg index 6823fe18a4..010d5c7cf1 100644 --- a/resources/variants/ultimaker_s7_bb0.8.inst.cfg +++ b/resources/variants/ultimaker_s7_bb0.8.inst.cfg @@ -31,7 +31,6 @@ raft_surface_layers = 1 retraction_amount = 4.5 retraction_hop = 2 retraction_hop_only_when_collides = True -retraction_min_travel = =line_width * 3 speed_prime_tower = =math.ceil(speed_print * 7 / 35) speed_print = 35 speed_support = =math.ceil(speed_print * 25 / 35) diff --git a/resources/variants/ultimaker_s7_bb04.inst.cfg b/resources/variants/ultimaker_s7_bb04.inst.cfg index bead299de3..1ec0dfab98 100644 --- a/resources/variants/ultimaker_s7_bb04.inst.cfg +++ b/resources/variants/ultimaker_s7_bb04.inst.cfg @@ -17,7 +17,6 @@ machine_nozzle_heat_up_speed = 1.5 machine_nozzle_id = BB 0.4 machine_nozzle_tip_outer_diameter = 1.0 retraction_amount = 4.5 -retraction_min_travel = =3 * line_width speed_prime_tower = =math.ceil(speed_print * 10 / 35) speed_support = =math.ceil(speed_print * 25 / 35) speed_support_interface = =math.ceil(speed_support * 20 / 25) diff --git a/resources/variants/ultimaker_s7_cc04.inst.cfg b/resources/variants/ultimaker_s7_cc04.inst.cfg index d46d387330..6949c5be74 100644 --- a/resources/variants/ultimaker_s7_cc04.inst.cfg +++ b/resources/variants/ultimaker_s7_cc04.inst.cfg @@ -13,7 +13,6 @@ brim_width = 7 machine_nozzle_cool_down_speed = 0.9 machine_nozzle_id = CC 0.4 machine_nozzle_size = 0.4 -retraction_min_travel = =line_width * 2 retraction_prime_speed = =retraction_speed speed_infill = =speed_print speed_print = 45 diff --git a/resources/variants/ultimaker_s7_cc06.inst.cfg b/resources/variants/ultimaker_s7_cc06.inst.cfg index d0c0d3670f..576701fc2b 100644 --- a/resources/variants/ultimaker_s7_cc06.inst.cfg +++ b/resources/variants/ultimaker_s7_cc06.inst.cfg @@ -13,7 +13,6 @@ brim_width = 7 machine_nozzle_cool_down_speed = 0.9 machine_nozzle_id = CC 0.6 machine_nozzle_size = 0.6 -retraction_min_travel = =line_width * 2 retraction_prime_speed = =retraction_speed speed_infill = =speed_print speed_print = 45 diff --git a/scripts/fix_translation_memory.py b/scripts/fix_translation_memory.py index 610fb93ac6..979cc92eb7 100644 --- a/scripts/fix_translation_memory.py +++ b/scripts/fix_translation_memory.py @@ -5,9 +5,8 @@ import re import argparse from pathlib import Path from fuzzywuzzy import fuzz -from fuzzywuzzy import process import xml.etree.ElementTree as ET -from xml.sax.saxutils import unescape, escape, quoteattr +from xml.sax.saxutils import unescape def load_existing_xmtm(path: Path) -> ET.Element: diff --git a/scripts/lionbridge_import.py b/scripts/lionbridge_import.py index 65b07183a3..c73361a912 100644 --- a/scripts/lionbridge_import.py +++ b/scripts/lionbridge_import.py @@ -1,10 +1,10 @@ # Copyright (c) 2021 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -import argparse #To get the source directory from command line arguments. +import argparse # To get the source directory from command line arguments. import io # To fix encoding issues in Windows -import os #To find files from the source. -import os.path #To find files from the source and the destination path. +import os # To find files from the source. +import os.path # To find files from the source and the destination path. cura_files = {"cura", "fdmprinter.def.json", "fdmextruder.def.json"} uranium_files = {"uranium"} diff --git a/tests/TestHitChecker.py b/tests/TestHitChecker.py new file mode 100644 index 0000000000..59ee1d8162 --- /dev/null +++ b/tests/TestHitChecker.py @@ -0,0 +1,141 @@ +from unittest.mock import patch + +from cura.HitChecker import HitChecker +from cura.OneAtATimeIterator import OneAtATimeIterator +from cura.Scene.CuraSceneNode import CuraSceneNode + + +def test_anyTwoNodesBlockEachOther_True(): + node1 = CuraSceneNode(no_setting_override=True) + node2 = CuraSceneNode(no_setting_override=True) + # node1 and node2 block each other + hit_map = { + node1: {node1: 0, node2: 1}, + node2: {node1: 1, node2: 0} + } + + with patch.object(HitChecker, "_buildHitMap", return_value=hit_map): + hit_checker = HitChecker([node1, node2]) + assert hit_checker.anyTwoNodesBlockEachOther([node1, node2]) + assert hit_checker.anyTwoNodesBlockEachOther([node2, node1]) + + +def test_anyTwoNodesBlockEachOther_False(): + node1 = CuraSceneNode(no_setting_override=True) + node2 = CuraSceneNode(no_setting_override=True) + # node1 blocks node2, but node2 doesn't block node1 + hit_map = { + node1: {node1: 0, node2: 1}, + node2: {node1: 0, node2: 0} + } + + with patch.object(HitChecker, "_buildHitMap", return_value=hit_map): + hit_checker = HitChecker([node1, node2]) + assert not hit_checker.anyTwoNodesBlockEachOther([node1, node2]) + assert not hit_checker.anyTwoNodesBlockEachOther([node2, node1]) + + +def test_canPrintBefore(): + node1 = CuraSceneNode(no_setting_override=True) + node2 = CuraSceneNode(no_setting_override=True) + node3 = CuraSceneNode(no_setting_override=True) + # nodes can be printed only in order node1 -> node2 -> node3 + hit_map = { + node1: {node1: 0, node2: 0, node3: 0}, + node2: {node1: 1, node2: 0, node3: 0}, + node3: {node1: 1, node2: 1, node3: 0}, + } + + with patch.object(HitChecker, "_buildHitMap", return_value=hit_map): + hit_checker = HitChecker([node1, node2, node3]) + + assert hit_checker.canPrintBefore(node1, [node2]) + assert hit_checker.canPrintBefore(node1, [node3]) + assert hit_checker.canPrintBefore(node1, [node2, node3]) + assert hit_checker.canPrintBefore(node1, [node3, node2]) + + assert hit_checker.canPrintBefore(node2, [node3]) + assert not hit_checker.canPrintBefore(node2, [node1]) + assert not hit_checker.canPrintBefore(node2, [node1, node3]) + assert not hit_checker.canPrintBefore(node2, [node3, node1]) + + assert not hit_checker.canPrintBefore(node3, [node1]) + assert not hit_checker.canPrintBefore(node3, [node2]) + assert not hit_checker.canPrintBefore(node3, [node1, node2]) + assert not hit_checker.canPrintBefore(node3, [node2, node1]) + + +def test_canPrintAfter(): + node1 = CuraSceneNode(no_setting_override=True) + node2 = CuraSceneNode(no_setting_override=True) + node3 = CuraSceneNode(no_setting_override=True) + + # nodes can be printed only in order node1 -> node2 -> node3 + hit_map = { + node1: {node1: 0, node2: 0, node3: 0}, + node2: {node1: 1, node2: 0, node3: 0}, + node3: {node1: 1, node2: 1, node3: 0}, + } + + with patch.object(HitChecker, "_buildHitMap", return_value=hit_map): + hit_checker = HitChecker([node1, node2, node3]) + + assert not hit_checker.canPrintAfter(node1, [node2]) + assert not hit_checker.canPrintAfter(node1, [node3]) + assert not hit_checker.canPrintAfter(node1, [node2, node3]) + assert not hit_checker.canPrintAfter(node1, [node3, node2]) + + assert hit_checker.canPrintAfter(node2, [node1]) + assert not hit_checker.canPrintAfter(node2, [node3]) + assert not hit_checker.canPrintAfter(node2, [node1, node3]) + assert not hit_checker.canPrintAfter(node2, [node3, node1]) + + assert hit_checker.canPrintAfter(node3, [node1]) + assert hit_checker.canPrintAfter(node3, [node2]) + assert hit_checker.canPrintAfter(node3, [node1, node2]) + assert hit_checker.canPrintAfter(node3, [node2, node1]) + + +def test_calculateScore(): + node1 = CuraSceneNode(no_setting_override=True) + node2 = CuraSceneNode(no_setting_override=True) + node3 = CuraSceneNode(no_setting_override=True) + + hit_map = { + node1: {node1: 0, node2: 0, node3: 0}, # sum is 0 + node2: {node1: 1, node2: 0, node3: 0}, # sum is 1 + node3: {node1: 1, node2: 1, node3: 0}, # sum is 2 + } + + with patch.object(HitChecker, "_buildHitMap", return_value=hit_map): + hit_checker = HitChecker([node1, node2, node3]) + + # score is a diff between sums + assert hit_checker.calculateScore(node1, node2) == -1 + assert hit_checker.calculateScore(node2, node1) == 1 + assert hit_checker.calculateScore(node1, node3) == -2 + assert hit_checker.calculateScore(node3, node1) == 2 + assert hit_checker.calculateScore(node2, node3) == -1 + assert hit_checker.calculateScore(node3, node2) == 1 + + +def test_canPrintNodesInProvidedOrder(): + node1 = CuraSceneNode(no_setting_override=True) + node2 = CuraSceneNode(no_setting_override=True) + node3 = CuraSceneNode(no_setting_override=True) + + # nodes can be printed only in order node1 -> node2 -> node3 + hit_map = { + node1: {node1: 0, node2: 0, node3: 0}, # 0 + node2: {node1: 1, node2: 0, node3: 0}, # 1 + node3: {node1: 1, node2: 1, node3: 0}, # 2 + } + + with patch.object(HitChecker, "_buildHitMap", return_value=hit_map): + hit_checker = HitChecker([node1, node2, node3]) + assert hit_checker.canPrintNodesInProvidedOrder([node1, node2, node3]) + assert not hit_checker.canPrintNodesInProvidedOrder([node1, node3, node2]) + assert not hit_checker.canPrintNodesInProvidedOrder([node2, node1, node3]) + assert not hit_checker.canPrintNodesInProvidedOrder([node2, node3, node1]) + assert not hit_checker.canPrintNodesInProvidedOrder([node3, node1, node2]) + assert not hit_checker.canPrintNodesInProvidedOrder([node3, node2, node1]) \ No newline at end of file diff --git a/tests/TestOAuth2.py b/tests/TestOAuth2.py index 09fa555af4..41edaebbf7 100644 --- a/tests/TestOAuth2.py +++ b/tests/TestOAuth2.py @@ -97,7 +97,7 @@ def test__parseJWTNoRefreshToken(): mock_reply = Mock() # The user profile that the service should respond with. mock_reply.error = Mock(return_value = QNetworkReply.NetworkError.NoError) http_mock = Mock() - http_mock.get = lambda url, headers_dict, callback, error_callback: callback(mock_reply) + http_mock.get = lambda url, headers_dict, callback, error_callback, timeout: callback(mock_reply) http_mock.readJSON = Mock(return_value = {"data": {"user_id": "id_ego_or_superego", "username": "Ghostkeeper"}}) with patch("UM.TaskManagement.HttpRequestManager.HttpRequestManager.getInstance", MagicMock(return_value = http_mock)): @@ -119,8 +119,8 @@ def test__parseJWTFailOnRefresh(): mock_reply = Mock() # The response that the request should give, containing an error about it failing to authenticate. mock_reply.error = Mock(return_value = QNetworkReply.NetworkError.AuthenticationRequiredError) # The reply is 403: Authentication required, meaning the server responded with a "Can't do that, Dave". http_mock = Mock() - http_mock.get = lambda url, headers_dict, callback, error_callback: callback(mock_reply) - http_mock.post = lambda url, data, headers_dict, callback, error_callback: callback(mock_reply) + http_mock.get = lambda url, headers_dict, callback, error_callback, timeout: callback(mock_reply) + http_mock.post = lambda url, data, headers_dict, callback, error_callback, urgent, timeout: callback(mock_reply) with patch("UM.TaskManagement.HttpRequestManager.HttpRequestManager.readJSON", Mock(return_value = {"error_description": "Mock a failed request!"})): with patch("UM.TaskManagement.HttpRequestManager.HttpRequestManager.getInstance", MagicMock(return_value = http_mock)): @@ -142,7 +142,7 @@ def test__parseJWTSucceedOnRefresh(): mock_reply_failure = Mock() mock_reply_failure.error = Mock(return_value = QNetworkReply.NetworkError.AuthenticationRequiredError) http_mock = Mock() - def mock_get(url, headers_dict, callback, error_callback): + def mock_get(url, headers_dict, callback, error_callback, timeout): if(headers_dict == {"Authorization": "Bearer beep"}): callback(mock_reply_success) else: @@ -181,8 +181,8 @@ def test_refreshAccessTokenFailed(): mock_reply = Mock() # The response that the request should give, containing an error about it failing to authenticate. mock_reply.error = Mock(return_value = QNetworkReply.NetworkError.AuthenticationRequiredError) # The reply is 403: Authentication required, meaning the server responded with a "Can't do that, Dave". http_mock = Mock() - http_mock.get = lambda url, headers_dict, callback, error_callback: callback(mock_reply) - http_mock.post = lambda url, data, headers_dict, callback, error_callback: callback(mock_reply) + http_mock.get = lambda url, headers_dict, callback, error_callback, timeout: callback(mock_reply) + http_mock.post = lambda url, data, headers_dict, callback, error_callback, urgent, timeout: callback(mock_reply) with patch("UM.TaskManagement.HttpRequestManager.HttpRequestManager.readJSON", Mock(return_value = {"error_description": "Mock a failed request!"})): with patch("UM.TaskManagement.HttpRequestManager.HttpRequestManager.getInstance", MagicMock(return_value = http_mock)): @@ -263,7 +263,7 @@ def test_loginAndLogout() -> None: mock_reply = Mock() # The user profile that the service should respond with. mock_reply.error = Mock(return_value = QNetworkReply.NetworkError.NoError) http_mock = Mock() - http_mock.get = lambda url, headers_dict, callback, error_callback: callback(mock_reply) + http_mock.get = lambda url, headers_dict, callback, error_callback, timeout: callback(mock_reply) http_mock.readJSON = Mock(return_value = {"data": {"user_id": "di_resu", "username": "Emanresu"}}) # Let the service think there was a successful response diff --git a/tests/TestPrintOrderManager.py b/tests/TestPrintOrderManager.py new file mode 100644 index 0000000000..8b2c0475b2 --- /dev/null +++ b/tests/TestPrintOrderManager.py @@ -0,0 +1,175 @@ +from unittest.mock import patch, MagicMock + +from cura.PrintOrderManager import PrintOrderManager +from cura.Scene.CuraSceneNode import CuraSceneNode + + +def test_getNodeName(): + node1 = CuraSceneNode(name="cat", no_setting_override=True) + node2 = CuraSceneNode(name="dog", no_setting_override=True) + assert PrintOrderManager._getNodeName(node1) == "cat" + assert PrintOrderManager._getNodeName(node2) == "dog" + assert PrintOrderManager._getNodeName(None) == "" + + +def test_getNodeName_truncatesLongName(): + node = CuraSceneNode(name="some_name_longer_than_30_characters", no_setting_override=True) + assert PrintOrderManager._getNodeName(node) == "some_name_longer_than_30_chara" + assert PrintOrderManager._getNodeName(node, max_length=10) == "some_name_" + + +def test_getSingleSelectedNode(): + node1 = CuraSceneNode(no_setting_override=True) + with patch("UM.Scene.Selection.Selection.getAllSelectedObjects", MagicMock(return_value=[node1])): + with patch("UM.Scene.Selection.Selection.getSelectedObject", MagicMock(return_value=node1)): + assert PrintOrderManager._getSingleSelectedNode() == node1 + + +def test_getSingleSelectedNode_returnsNoneIfNothingSelected(): + with patch("UM.Scene.Selection.Selection.getAllSelectedObjects", MagicMock(return_value=[])): + assert PrintOrderManager._getSingleSelectedNode() is None + + +def test_getSingleSelectedNode_returnsNoneIfMultipleObjectsSelected(): + node1 = CuraSceneNode(no_setting_override=True) + node2 = CuraSceneNode(no_setting_override=True) + with patch("UM.Scene.Selection.Selection.getAllSelectedObjects", MagicMock(return_value=[node1, node2])): + assert PrintOrderManager._getSingleSelectedNode() is None + + +def test_neighborNodeNamesCorrect_WhenSomeNodeSelected(): + node1 = CuraSceneNode(no_setting_override=True, name="node1") + node2 = CuraSceneNode(no_setting_override=True, name="node2") + node3 = CuraSceneNode(no_setting_override=True, name="node3") + node1.printOrder = 1 + node2.printOrder = 2 + node3.printOrder = 3 + with patch.object(PrintOrderManager, "_configureEvents", return_value=None): + with patch.object(PrintOrderManager, "_getSingleSelectedNode", return_value=node1): + print_order_manager = PrintOrderManager(get_nodes=lambda: [node1, node2, node3]) + + assert print_order_manager.previousNodeName == "" + assert print_order_manager.nextNodeName == "node2" + assert not print_order_manager.shouldEnablePrintBeforeAction + assert print_order_manager.shouldEnablePrintAfterAction + + print_order_manager.swapSelectedAndNextNodes() # swaps node1 with node2, result: [node2, node1, node3] + assert print_order_manager.previousNodeName == "node2" + assert print_order_manager.nextNodeName == "node3" + assert print_order_manager.shouldEnablePrintBeforeAction + assert print_order_manager.shouldEnablePrintAfterAction + + print_order_manager.swapSelectedAndNextNodes() # swaps node1 with node3, result: [node2, node3, node1] + assert print_order_manager.previousNodeName == "node3" + assert print_order_manager.nextNodeName == "" + assert print_order_manager.shouldEnablePrintBeforeAction + assert not print_order_manager.shouldEnablePrintAfterAction + + print_order_manager.swapSelectedAndPreviousNodes() # swaps node1 with node3, result: [node2, node1, node3] + assert print_order_manager.previousNodeName == "node2" + assert print_order_manager.nextNodeName == "node3" + assert print_order_manager.shouldEnablePrintBeforeAction + assert print_order_manager.shouldEnablePrintAfterAction + + print_order_manager.swapSelectedAndPreviousNodes() # swaps node1 with node2, result: [node1, node2, node3] + assert print_order_manager.previousNodeName == "" + assert print_order_manager.nextNodeName == "node2" + assert not print_order_manager.shouldEnablePrintBeforeAction + assert print_order_manager.shouldEnablePrintAfterAction + + +def test_neighborNodeNamesEmpty_WhenNothingSelected(): + node1 = CuraSceneNode(no_setting_override=True, name="node1") + node2 = CuraSceneNode(no_setting_override=True, name="node2") + node3 = CuraSceneNode(no_setting_override=True, name="node3") + node1.printOrder = 1 + node2.printOrder = 2 + node3.printOrder = 3 + with patch.object(PrintOrderManager, "_configureEvents", return_value=None): + with patch.object(PrintOrderManager, "_getSingleSelectedNode", return_value=None): + print_order_manager = PrintOrderManager(get_nodes=lambda: [node1, node2, node3]) + assert print_order_manager.previousNodeName == "" + assert print_order_manager.nextNodeName == "" + assert not print_order_manager.shouldEnablePrintBeforeAction + assert not print_order_manager.shouldEnablePrintAfterAction + + +def test_initializePrintOrders(): + node1 = CuraSceneNode(no_setting_override=True) + node2 = CuraSceneNode(no_setting_override=True) + + # assume print orders are 0 + assert node1.printOrder == 0 + assert node2.printOrder == 0 + + PrintOrderManager.initializePrintOrders([node1, node2]) + + # assert print orders initialized + assert node1.printOrder == 1 + assert node2.printOrder == 2 + + node3 = CuraSceneNode(no_setting_override=True) + node4 = CuraSceneNode(no_setting_override=True) + # assume print orders are 0 + assert node3.printOrder == 0 + assert node4.printOrder == 0 + + PrintOrderManager.initializePrintOrders([node2, node1, node3, node4]) + + # assert print orders not changed for node1 and node2 and initialized for node3 and node4 + assert node1.printOrder == 1 + assert node2.printOrder == 2 + assert node3.printOrder == 3 + assert node4.printOrder == 4 + + +def test_updatePrintOrdersAfterGroupOperation(): + node1 = CuraSceneNode(no_setting_override=True) + node2 = CuraSceneNode(no_setting_override=True) + node3 = CuraSceneNode(no_setting_override=True) + node4 = CuraSceneNode(no_setting_override=True) + node5 = CuraSceneNode(no_setting_override=True) + node1.printOrder = 1 + node2.printOrder = 2 + node3.printOrder = 3 + node4.printOrder = 4 + node5.printOrder = 5 + + all_nodes = [node1, node2, node3, node4, node5] + grouped_nodes = [node2, node4] + group_node = CuraSceneNode(no_setting_override=True) + + PrintOrderManager.updatePrintOrdersAfterGroupOperation(all_nodes, group_node, grouped_nodes) + + assert node1.printOrder == 1 + assert group_node.printOrder == 2 + assert node3.printOrder == 3 + assert node5.printOrder == 4 + + +def test_updatePrintOrdersAfterUngroupOperation(): + node1 = CuraSceneNode(no_setting_override=True) + node2 = CuraSceneNode(no_setting_override=True) + node3 = CuraSceneNode(no_setting_override=True) + node1.printOrder = 1 + node2.printOrder = 2 + node3.printOrder = 3 + + all_nodes = [node1, node2, node3] + node4 = CuraSceneNode(no_setting_override=True) + node5 = CuraSceneNode(no_setting_override=True) + + group_node = node2 + ungrouped_nodes = [node4, node5] + PrintOrderManager.updatePrintOrdersAfterUngroupOperation(all_nodes, group_node, ungrouped_nodes) + + assert node1.printOrder == 1 + assert node4.printOrder == 2 + assert node5.printOrder == 3 + assert node3.printOrder == 4 + + assert node1 in all_nodes + assert node2 not in all_nodes + assert node3 in all_nodes + assert node4 in all_nodes + assert node5 in all_nodes