diff --git a/CITATION.cff b/CITATION.cff new file mode 100644 index 0000000000..808a403e1a --- /dev/null +++ b/CITATION.cff @@ -0,0 +1,11 @@ +# YAML 1.2 +--- +authors: +cff-version: "1.1.0" +date-released: 2021-06-28 +license: "LGPL-3.0" +message: "If you use this software, please cite it using these metadata." +repository-code: "https://github.com/ultimaker/cura/" +title: "Ultimaker Cura" +version: "4.10.0" +... \ No newline at end of file diff --git a/cura/API/Account.py b/cura/API/Account.py index 728d0690a3..a85e2c64c5 100644 --- a/cura/API/Account.py +++ b/cura/API/Account.py @@ -109,7 +109,6 @@ class Account(QObject): self._authorization_service.accessTokenChanged.connect(self._onAccessTokenChanged) self._authorization_service.loadAuthDataFromPreferences() - @pyqtProperty(int, notify=syncStateChanged) def syncState(self): return self._sync_state @@ -178,7 +177,10 @@ class Account(QObject): if error_message: if self._error_message: self._error_message.hide() - self._error_message = Message(error_message, title = i18n_catalog.i18nc("@info:title", "Login failed")) + Logger.log("w", "Failed to login: %s", error_message) + self._error_message = Message(error_message, + title = i18n_catalog.i18nc("@info:title", "Login failed"), + message_type = Message.MessageType.ERROR) self._error_message.show() self._logged_in = False self.loginStateChanged.emit(False) @@ -209,7 +211,7 @@ class Account(QObject): if self._update_timer.isActive(): self._update_timer.stop() elif self._sync_state == SyncState.SYNCING: - Logger.warning("Starting a new sync while previous sync was not completed\n{}", str(self._sync_services)) + Logger.debug("Starting a new sync while previous sync was not completed") self.syncRequested.emit() diff --git a/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py b/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py index 0f337a229b..e18f8098df 100644 --- a/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py +++ b/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py @@ -147,6 +147,8 @@ class ArrangeObjectsAllBuildPlatesJob(Job): status_message.hide() if not found_solution_for_all: - no_full_solution_message = Message(i18n_catalog.i18nc("@info:status", "Unable to find a location within the build volume for all objects"), - title = i18n_catalog.i18nc("@info:title", "Can't Find Location")) + no_full_solution_message = Message(i18n_catalog.i18nc("@info:status", + "Unable to find a location within the build volume for all objects"), + title = i18n_catalog.i18nc("@info:title", "Can't Find Location"), + message_type = Message.MessageType.WARNING) no_full_solution_message.show() diff --git a/cura/Arranging/ArrangeObjectsJob.py b/cura/Arranging/ArrangeObjectsJob.py index 46b1aa2d71..e65a442acb 100644 --- a/cura/Arranging/ArrangeObjectsJob.py +++ b/cura/Arranging/ArrangeObjectsJob.py @@ -39,6 +39,7 @@ class ArrangeObjectsJob(Job): no_full_solution_message = Message( i18n_catalog.i18nc("@info:status", "Unable to find a location within the build volume for all objects"), - title = i18n_catalog.i18nc("@info:title", "Can't Find Location")) + title = i18n_catalog.i18nc("@info:title", "Can't Find Location"), + message_type = Message.MessageType.ERROR) no_full_solution_message.show() self.finished.emit(self) diff --git a/cura/Backups/Backup.py b/cura/Backups/Backup.py index 1f6a961733..85510e6b4c 100644 --- a/cura/Backups/Backup.py +++ b/cura/Backups/Backup.py @@ -111,15 +111,15 @@ class Backup: return archive except (IOError, OSError, BadZipfile) as error: Logger.log("e", "Could not create archive from user data directory: %s", error) - self._showMessage( - self.catalog.i18nc("@info:backup_failed", - "Could not create archive from user data directory: {}".format(error))) + self._showMessage(self.catalog.i18nc("@info:backup_failed", + "Could not create archive from user data directory: {}".format(error)), + message_type = Message.MessageType.ERROR) return None - def _showMessage(self, message: str) -> None: + def _showMessage(self, message: str, message_type: Message.MessageType = Message.MessageType.NEUTRAL) -> None: """Show a UI message.""" - Message(message, title=self.catalog.i18nc("@info:title", "Backup"), lifetime=30).show() + Message(message, title=self.catalog.i18nc("@info:title", "Backup"), message_type = message_type).show() def restore(self) -> bool: """Restore this back-up. @@ -130,9 +130,9 @@ class Backup: if not self.zip_file or not self.meta_data or not self.meta_data.get("cura_release", None): # We can restore without the minimum required information. Logger.log("w", "Tried to restore a Cura backup without having proper data or meta data.") - self._showMessage( - self.catalog.i18nc("@info:backup_failed", - "Tried to restore a Cura backup without having proper data or meta data.")) + self._showMessage(self.catalog.i18nc("@info:backup_failed", + "Tried to restore a Cura backup without having proper data or meta data."), + message_type = Message.MessageType.ERROR) return False current_version = Version(self._application.getVersion()) @@ -141,9 +141,9 @@ class Backup: if current_version < version_to_restore: # Cannot restore version newer than current because settings might have changed. Logger.log("d", "Tried to restore a Cura backup of version {version_to_restore} with cura version {current_version}".format(version_to_restore = version_to_restore, current_version = current_version)) - self._showMessage( - self.catalog.i18nc("@info:backup_failed", - "Tried to restore a Cura backup that is higher than the current version.")) + self._showMessage(self.catalog.i18nc("@info:backup_failed", + "Tried to restore a Cura backup that is higher than the current version."), + message_type = Message.MessageType.ERROR) return False # Get the current secrets and store since the back-up doesn't contain those @@ -154,7 +154,11 @@ class Backup: archive = ZipFile(io.BytesIO(self.zip_file), "r") except LookupError as e: Logger.log("d", f"The following error occurred while trying to restore a Cura backup: {str(e)}") - self._showMessage(self.catalog.i18nc("@info:backup_failed", "The following error occurred while trying to restore a Cura backup:") + str(e)) + Message(self.catalog.i18nc("@info:backup_failed", + "The following error occurred while trying to restore a Cura backup:") + str(e), + title = self.catalog.i18nc("@info:title", "Backup"), + message_type = Message.MessageType.ERROR).show() + return False extracted = self._extractArchive(archive, version_data_dir) diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index 0c78be7547..cf397e395e 100755 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -95,9 +95,11 @@ class BuildVolume(SceneNode): self._edge_disallowed_size = None self._build_volume_message = Message(catalog.i18nc("@info:status", - "The build volume height has been reduced due to the value of the" - " \"Print Sequence\" setting to prevent the gantry from colliding" - " with printed models."), title = catalog.i18nc("@info:title", "Build Volume")) + "The build volume height has been reduced due to the value of the" + " \"Print Sequence\" setting to prevent the gantry from colliding" + " with printed models."), + title = catalog.i18nc("@info:title", "Build Volume"), + message_type = Message.MessageType.WARNING) self._global_container_stack = None # type: Optional[GlobalStack] diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 5c1d8aafdc..7580a973c7 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -1798,8 +1798,10 @@ class CuraApplication(QtApplication): if extension in self._non_sliceable_extensions: message = Message( self._i18n_catalog.i18nc("@info:status", - "Only one G-code file can be loaded at a time. Skipped importing {0}", - filename), title = self._i18n_catalog.i18nc("@info:title", "Warning")) + "Only one G-code file can be loaded at a time. Skipped importing {0}", + filename), + title = self._i18n_catalog.i18nc("@info:title", "Warning"), + message_type = Message.MessageType.WARNING) message.show() return # If file being loaded is non-slicable file, then prevent loading of any other files @@ -1808,8 +1810,10 @@ class CuraApplication(QtApplication): if extension in self._non_sliceable_extensions: message = Message( self._i18n_catalog.i18nc("@info:status", - "Can't open any other file if G-code is loading. Skipped importing {0}", - filename), title = self._i18n_catalog.i18nc("@info:title", "Error")) + "Can't open any other file if G-code is loading. Skipped importing {0}", + filename), + title = self._i18n_catalog.i18nc("@info:title", "Error"), + message_type = Message.MessageType.ERROR) message.show() return diff --git a/cura/Machines/Models/MaterialManagementModel.py b/cura/Machines/Models/MaterialManagementModel.py index cd35a78353..6663dbdae1 100644 --- a/cura/Machines/Models/MaterialManagementModel.py +++ b/cura/Machines/Models/MaterialManagementModel.py @@ -2,9 +2,10 @@ # Cura is released under the terms of the LGPLv3 or higher. import copy # To duplicate materials. -from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot # To allow the preference page proxy to be used from the actual preferences page. +from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject, QUrl from typing import Any, Dict, Optional, TYPE_CHECKING import uuid # To generate new GUIDs for new materials. +import zipfile # To export all materials in a .zip archive. from UM.i18n import i18nCatalog from UM.Logger import Logger @@ -20,11 +21,6 @@ if TYPE_CHECKING: catalog = i18nCatalog("cura") class MaterialManagementModel(QObject): - """Proxy class to the materials page in the preferences. - - This class handles the actions in that page, such as creating new materials, renaming them, etc. - """ - favoritesChanged = pyqtSignal(str) """Triggered when a favorite is added or removed. @@ -264,3 +260,40 @@ class MaterialManagementModel(QObject): self.favoritesChanged.emit(material_base_file) except ValueError: # Material was not in the favorites list. Logger.log("w", "Material {material_base_file} was already not a favorite material.".format(material_base_file = material_base_file)) + + @pyqtSlot(result = QUrl) + def getPreferredExportAllPath(self) -> QUrl: + """ + Get the preferred path to export materials to. + + If there is a removable drive, that should be the preferred path. Otherwise it should be the most recent local + file path. + :return: The preferred path to export all materials to. + """ + cura_application = cura.CuraApplication.CuraApplication.getInstance() + device_manager = cura_application.getOutputDeviceManager() + devices = device_manager.getOutputDevices() + for device in devices: + if device.__class__.__name__ == "RemovableDriveOutputDevice": + return QUrl.fromLocalFile(device.getId()) + else: # No removable drives? Use local path. + return cura_application.getDefaultPath("dialog_material_path") + + @pyqtSlot(QUrl) + def exportAll(self, file_path: QUrl) -> None: + """ + Export all materials to a certain file path. + :param file_path: The path to export the materials to. + """ + registry = CuraContainerRegistry.getInstance() + + archive = zipfile.ZipFile(file_path.toLocalFile(), "w", compression = zipfile.ZIP_DEFLATED) + for metadata in registry.findInstanceContainersMetadata(type = "material"): + if metadata["base_file"] != metadata["id"]: # Only process base files. + continue + if metadata["id"] == "empty_material": # Don't export the empty material. + continue + material = registry.findContainers(id = metadata["id"])[0] + suffix = registry.getMimeTypeForContainer(type(material)).preferredSuffix + filename = metadata["id"] + "." + suffix + archive.writestr(filename, material.serialize()) diff --git a/cura/MultiplyObjectsJob.py b/cura/MultiplyObjectsJob.py index 1ba78edacf..4c1caf137c 100644 --- a/cura/MultiplyObjectsJob.py +++ b/cura/MultiplyObjectsJob.py @@ -74,5 +74,6 @@ class MultiplyObjectsJob(Job): if not found_solution_for_all: no_full_solution_message = Message( i18n_catalog.i18nc("@info:status", "Unable to find a location within the build volume for all objects"), - title = i18n_catalog.i18nc("@info:title", "Placing Object")) + title = i18n_catalog.i18nc("@info:title", "Placing Object"), + message_type = Message.MessageType.WARNING) no_full_solution_message.show() diff --git a/cura/OAuth2/AuthorizationService.py b/cura/OAuth2/AuthorizationService.py index 96091f9c11..aba9558de8 100644 --- a/cura/OAuth2/AuthorizationService.py +++ b/cura/OAuth2/AuthorizationService.py @@ -186,8 +186,10 @@ class AuthorizationService: self._server.start(verification_code, state) except OSError: Logger.logException("w", "Unable to create authorization request server") - Message(i18n_catalog.i18nc("@info", "Unable to start a new sign in process. Check if another sign in attempt is still active."), - title=i18n_catalog.i18nc("@info:title", "Warning")).show() + Message(i18n_catalog.i18nc("@info", + "Unable to start a new sign in process. Check if another sign in attempt is still active."), + title=i18n_catalog.i18nc("@info:title", "Warning"), + message_type = Message.MessageType.WARNING).show() return auth_url = self._generate_auth_url(query_parameters_dict, force_browser_logout) @@ -241,7 +243,10 @@ class AuthorizationService: if self._unable_to_get_data_message is not None: self._unable_to_get_data_message.hide() - self._unable_to_get_data_message = Message(i18n_catalog.i18nc("@info", "Unable to reach the Ultimaker account server."), title = i18n_catalog.i18nc("@info:title", "Warning")) + self._unable_to_get_data_message = Message(i18n_catalog.i18nc("@info", + "Unable to reach the Ultimaker account server."), + title = i18n_catalog.i18nc("@info:title", "Warning"), + message_type = Message.MessageType.ERROR) self._unable_to_get_data_message.show() except (ValueError, TypeError): Logger.logException("w", "Could not load auth data from preferences") diff --git a/cura/OAuth2/LocalAuthorizationServer.py b/cura/OAuth2/LocalAuthorizationServer.py index ac14b00985..219191c295 100644 --- a/cura/OAuth2/LocalAuthorizationServer.py +++ b/cura/OAuth2/LocalAuthorizationServer.py @@ -54,6 +54,7 @@ class LocalAuthorizationServer: if self._web_server: # If the server is already running (because of a previously aborted auth flow), we don't have to start it. # We still inject the new verification code though. + Logger.log("d", "Auth web server was already running. Updating the verification code") self._web_server.setVerificationCode(verification_code) return @@ -85,6 +86,7 @@ class LocalAuthorizationServer: except OSError: # OS error can happen if the socket was already closed. We really don't care about that case. pass + Logger.log("d", "Local oauth2 web server was shut down") self._web_server = None self._web_server_thread = None @@ -96,12 +98,13 @@ class LocalAuthorizationServer: :return: None """ + Logger.log("d", "Local web server for authorization has started") if self._web_server: if sys.platform == "win32": try: self._web_server.serve_forever() - except OSError as e: - Logger.warning(str(e)) + except OSError: + Logger.logException("w", "An exception happened while serving the auth server") else: # Leave the default behavior in non-windows platforms self._web_server.serve_forever() diff --git a/cura/Settings/CuraContainerRegistry.py b/cura/Settings/CuraContainerRegistry.py index 7e6c3f5d20..295d843fd7 100644 --- a/cura/Settings/CuraContainerRegistry.py +++ b/cura/Settings/CuraContainerRegistry.py @@ -141,20 +141,29 @@ class CuraContainerRegistry(ContainerRegistry): success = profile_writer.write(file_name, container_list) except Exception as e: Logger.log("e", "Failed to export profile to %s: %s", file_name, str(e)) - m = Message(catalog.i18nc("@info:status Don't translate the XML tags or !", "Failed to export profile to {0}: {1}", file_name, str(e)), + m = Message(catalog.i18nc("@info:status Don't translate the XML tags or !", + "Failed to export profile to {0}: {1}", + file_name, str(e)), lifetime = 0, - title = catalog.i18nc("@info:title", "Error")) + title = catalog.i18nc("@info:title", "Error"), + message_type = Message.MessageType.ERROR) m.show() return False if not success: Logger.log("w", "Failed to export profile to %s: Writer plugin reported failure.", file_name) - m = Message(catalog.i18nc("@info:status Don't translate the XML tag !", "Failed to export profile to {0}: Writer plugin reported failure.", file_name), + m = Message(catalog.i18nc("@info:status Don't translate the XML tag !", + "Failed to export profile to {0}: Writer plugin reported failure.", + file_name), lifetime = 0, - title = catalog.i18nc("@info:title", "Error")) + title = catalog.i18nc("@info:title", "Error"), + message_type = Message.MessageType.ERROR) m.show() return False - m = Message(catalog.i18nc("@info:status Don't translate the XML tag !", "Exported profile to {0}", file_name), - title = catalog.i18nc("@info:title", "Export succeeded")) + m = Message(catalog.i18nc("@info:status Don't translate the XML tag !", + "Exported profile to {0}", + file_name), + title = catalog.i18nc("@info:title", "Export succeeded"), + message_type = Message.MessageType.POSITIVE) m.show() return True diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index 2c7cbf5e25..282034c0ee 100755 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -86,6 +86,14 @@ class GlobalStack(CuraContainerStack): def supportsNetworkConnection(self): return self.getMetaDataEntry("supports_network_connection", False) + @pyqtProperty(bool, constant = True) + def supportsMaterialExport(self): + """ + Whether the printer supports Cura's export format of material profiles. + :return: ``True`` if it supports it, or ``False`` if not. + """ + return self.getMetaDataEntry("supports_material_export", False) + @classmethod def getLoadingPriority(cls) -> int: return 2 diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 1a2ab72a33..70a8a6aae7 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -853,7 +853,8 @@ class MachineManager(QObject): self._global_container_stack.userChanges.setProperty(setting_key, "value", self._default_extruder_position) if add_user_changes: caution_message = Message( - catalog.i18nc("@info:message Followed by a list of settings.", "Settings have been changed to match the current availability of extruders:") + " [{settings_list}]".format(settings_list = ", ".join(add_user_changes)), + catalog.i18nc("@info:message Followed by a list of settings.", + "Settings have been changed to match the current availability of extruders:") + " [{settings_list}]".format(settings_list = ", ".join(add_user_changes)), lifetime = 0, title = catalog.i18nc("@info:title", "Settings updated")) caution_message.show() diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index d0442e083b..ee8652839d 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -540,7 +540,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader): "Project file {0} contains an unknown machine type" " {1}. Cannot import the machine." " Models will be imported instead.", file_name, machine_definition_id), - title = i18n_catalog.i18nc("@info:title", "Open Project File")) + title = i18n_catalog.i18nc("@info:title", "Open Project File"), + message_type = Message.MessageType.WARNING) message.show() Logger.log("i", "Could unknown machine definition %s in project file %s, cannot import it.", @@ -637,14 +638,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")) + 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")) + title = i18n_catalog.i18nc("@info:title", "Can't Open Project File"), + message_type = Message.MessageType.ERROR) message.show() self.setWorkspaceName("") return [], {} @@ -696,7 +699,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader): if not global_stacks: 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)) + " are unknown to this version of Ultimaker Cura.", file_name), + message_type = Message.MessageType.ERROR) message.show() self.setWorkspaceName("") return [], {} diff --git a/plugins/CuraDrive/src/CreateBackupJob.py b/plugins/CuraDrive/src/CreateBackupJob.py index ab1989f382..12bbc035ac 100644 --- a/plugins/CuraDrive/src/CreateBackupJob.py +++ b/plugins/CuraDrive/src/CreateBackupJob.py @@ -43,7 +43,9 @@ class CreateBackupJob(Job): """After the job completes, an empty string indicates success. Othrerwise, the value is a translated message.""" def run(self) -> None: - upload_message = Message(catalog.i18nc("@info:backup_status", "Creating your backup..."), title = self.MESSAGE_TITLE, progress = -1) + upload_message = Message(catalog.i18nc("@info:backup_status", "Creating your backup..."), + title = self.MESSAGE_TITLE, + progress = -1) upload_message.show() CuraApplication.getInstance().processEvents() cura_api = CuraApplication.getInstance().getCuraAPI() diff --git a/plugins/CuraDrive/src/DrivePluginExtension.py b/plugins/CuraDrive/src/DrivePluginExtension.py index 3a7a59a172..f42ffea9f7 100644 --- a/plugins/CuraDrive/src/DrivePluginExtension.py +++ b/plugins/CuraDrive/src/DrivePluginExtension.py @@ -114,13 +114,17 @@ class DrivePluginExtension(QObject, Extension): self.restoringStateChanged.emit() if error_message: self.backupIdBeingRestored = "" - Message(error_message, title = catalog.i18nc("@info:title", "Backup")).show() + Message(error_message, + title = catalog.i18nc("@info:title", "Backup"), + message_type = Message.MessageType.ERROR).show() def _onCreatingStateChanged(self, is_creating: bool = False, error_message: str = None) -> None: self._is_creating_backup = is_creating self.creatingStateChanged.emit() if error_message: - Message(error_message, title = catalog.i18nc("@info:title", "Backup")).show() + Message(error_message, + title = catalog.i18nc("@info:title", "Backup"), + message_type = Message.MessageType.ERROR).show() else: self._storeBackupDate() if not is_creating and not error_message: diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index fa9a8c5474..f5f238c117 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -391,7 +391,9 @@ class CuraEngineBackend(QObject, Backend): if job.getResult() == StartJobResult.MaterialIncompatible: if application.platformActivity: self._error_message = Message(catalog.i18nc("@info:status", - "Unable to slice with the current material as it is incompatible with the selected machine or configuration."), title = catalog.i18nc("@info:title", "Unable to slice")) + "Unable to slice with the current material as it is incompatible with the selected machine or configuration."), + title = catalog.i18nc("@info:title", "Unable to slice"), + message_type = Message.MessageType.WARNING) self._error_message.show() self.setState(BackendState.Error) self.backendError.emit(job) @@ -421,8 +423,10 @@ class CuraEngineBackend(QObject, Backend): continue error_labels.add(definitions[0].label) - self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice with the current settings. The following settings have errors: {0}").format(", ".join(error_labels)), - title = catalog.i18nc("@info:title", "Unable to slice")) + self._error_message = Message(catalog.i18nc("@info:status", + "Unable to slice with the current settings. The following settings have errors: {0}").format(", ".join(error_labels)), + title = catalog.i18nc("@info:title", "Unable to slice"), + message_type = Message.MessageType.WARNING) self._error_message.show() self.setState(BackendState.Error) self.backendError.emit(job) @@ -445,8 +449,10 @@ class CuraEngineBackend(QObject, Backend): Logger.log("e", "When checking settings for errors, unable to find definition for key {key} in per-object stack.".format(key = key)) continue errors[key] = definition[0].label - self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}").format(error_labels = ", ".join(errors.values())), - title = catalog.i18nc("@info:title", "Unable to slice")) + self._error_message = Message(catalog.i18nc("@info:status", + "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}").format(error_labels = ", ".join(errors.values())), + title = catalog.i18nc("@info:title", "Unable to slice"), + message_type = Message.MessageType.WARNING) self._error_message.show() self.setState(BackendState.Error) self.backendError.emit(job) @@ -454,8 +460,10 @@ class CuraEngineBackend(QObject, Backend): if job.getResult() == StartJobResult.BuildPlateError: if application.platformActivity: - self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice because the prime tower or prime position(s) are invalid."), - title = catalog.i18nc("@info:title", "Unable to slice")) + self._error_message = Message(catalog.i18nc("@info:status", + "Unable to slice because the prime tower or prime position(s) are invalid."), + title = catalog.i18nc("@info:title", "Unable to slice"), + message_type = Message.MessageType.WARNING) self._error_message.show() self.setState(BackendState.Error) self.backendError.emit(job) @@ -463,8 +471,10 @@ class CuraEngineBackend(QObject, Backend): self.setState(BackendState.NotStarted) if job.getResult() == StartJobResult.ObjectsWithDisabledExtruder: - self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice because there are objects associated with disabled Extruder %s.") % job.getMessage(), - title = catalog.i18nc("@info:title", "Unable to slice")) + self._error_message = Message(catalog.i18nc("@info:status", + "Unable to slice because there are objects associated with disabled Extruder %s.") % job.getMessage(), + title = catalog.i18nc("@info:title", "Unable to slice"), + message_type = Message.MessageType.WARNING) self._error_message.show() self.setState(BackendState.Error) self.backendError.emit(job) @@ -476,7 +486,8 @@ class CuraEngineBackend(QObject, Backend): "\n- Fit within the build volume" "\n- Are assigned to an enabled extruder" "\n- Are not all set as modifier meshes"), - title = catalog.i18nc("@info:title", "Unable to slice")) + title = catalog.i18nc("@info:title", "Unable to slice"), + message_type = Message.MessageType.WARNING) self._error_message.show() self.setState(BackendState.Error) self.backendError.emit(job) diff --git a/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py b/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py index e0a20177b5..02583a6e40 100644 --- a/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py +++ b/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py @@ -257,10 +257,10 @@ class ProcessSlicedLayersJob(Job): if self.isRunning(): if Application.getInstance().getController().getActiveView().getPluginId() == "SimulationView": if not self._progress_message: - self._progress_message = Message(catalog.i18nc("@info:status", "Processing Layers"), 0, False, 0, catalog.i18nc("@info:title", "Information")) + self._progress_message = Message(catalog.i18nc("@info:status", "Processing Layers"), 0, False, 0, + catalog.i18nc("@info:title", "Information")) if self._progress_message.getProgress() != 100: self._progress_message.show() else: if self._progress_message: self._progress_message.hide() - diff --git a/plugins/DigitalLibrary/resources/images/projects_not_found.svg b/plugins/DigitalLibrary/resources/images/projects_not_found.svg index 8aee7b797c..ba118ebc0a 100644 --- a/plugins/DigitalLibrary/resources/images/projects_not_found.svg +++ b/plugins/DigitalLibrary/resources/images/projects_not_found.svg @@ -1,62 +1,52 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/DigitalLibrary/resources/qml/CreateNewProjectPopup.qml b/plugins/DigitalLibrary/resources/qml/CreateNewProjectPopup.qml index 75fb8d5811..a7297c12fb 100644 --- a/plugins/DigitalLibrary/resources/qml/CreateNewProjectPopup.qml +++ b/plugins/DigitalLibrary/resources/qml/CreateNewProjectPopup.qml @@ -93,7 +93,7 @@ Popup } validator: RegExpValidator { - regExp: /^[^\\\/\*\?\|\[\]]{0,96}$/ + regExp: /^[^\\\/\*\?\|\[\]]{0,99}$/ } text: PrintInformation.jobName @@ -148,7 +148,7 @@ Popup anchors.bottom: parent.bottom anchors.right: parent.right text: "Create" - enabled: newProjectNameTextField.text != "" && !busy + enabled: newProjectNameTextField.text.length >= 2 && !busy onClicked: { diff --git a/plugins/DigitalLibrary/resources/qml/SaveProjectFilesPage.qml b/plugins/DigitalLibrary/resources/qml/SaveProjectFilesPage.qml index 03bd655957..30e3513019 100644 --- a/plugins/DigitalLibrary/resources/qml/SaveProjectFilesPage.qml +++ b/plugins/DigitalLibrary/resources/qml/SaveProjectFilesPage.qml @@ -63,7 +63,7 @@ Item anchors.topMargin: UM.Theme.getSize("thin_margin").height validator: RegExpValidator { - regExp: /^[^\\\/\*\?\|\[\]]{0,96}$/ + regExp: /^[\w\-\. ()]{0,255}$/ } text: PrintInformation.jobName @@ -200,7 +200,7 @@ Item anchors.bottom: parent.bottom anchors.right: parent.right text: "Save" - enabled: (asProjectCheckbox.checked || asSlicedCheckbox.checked) && dfFilenameTextfield.text != "" + enabled: (asProjectCheckbox.checked || asSlicedCheckbox.checked) && dfFilenameTextfield.text.length >= 1 onClicked: { diff --git a/plugins/DigitalLibrary/src/DFFileExportAndUploadManager.py b/plugins/DigitalLibrary/src/DFFileExportAndUploadManager.py index 69163f9cdf..c8650004e9 100644 --- a/plugins/DigitalLibrary/src/DFFileExportAndUploadManager.py +++ b/plugins/DigitalLibrary/src/DFFileExportAndUploadManager.py @@ -73,6 +73,7 @@ class DFFileExportAndUploadManager: text = "Your {} uploaded to '{}'.".format("file was" if len(self._file_upload_job_metadata) <= 1 else "files were", self._library_project_name), title = "Upload successful", lifetime = 0, + message_type = Message.MessageType.POSITIVE ) self._generic_success_message.addAction( "open_df_project", @@ -81,8 +82,6 @@ class DFFileExportAndUploadManager: ) self._generic_success_message.actionTriggered.connect(self._onMessageActionTriggered) - - def _onCuraProjectFileExported(self, job: ExportFileJob) -> None: """Handler for when the DF Library workspace file (3MF) has been created locally. @@ -221,7 +220,8 @@ class DFFileExportAndUploadManager: self._file_upload_job_metadata[filename]["file_upload_failed_message"] = Message( text = "Failed to export the file '{}'. The upload process is aborted.".format(filename), title = "Export error", - lifetime = 0 + lifetime = 0, + message_type = Message.MessageType.ERROR ) self._on_upload_error() self._onFileUploadFinished(filename) @@ -243,7 +243,8 @@ class DFFileExportAndUploadManager: self._file_upload_job_metadata[filename_3mf]["file_upload_failed_message"] = Message( text = "Failed to upload the file '{}' to '{}'. {}".format(filename_3mf, self._library_project_name, human_readable_error), title = "File upload error", - lifetime = 0 + lifetime = 0, + message_type = Message.MessageType.ERROR ) self._on_upload_error() self._onFileUploadFinished(filename_3mf) @@ -265,7 +266,8 @@ class DFFileExportAndUploadManager: self._file_upload_job_metadata[filename_ufp]["file_upload_failed_message"] = Message( title = "File upload error", text = "Failed to upload the file '{}' to '{}'. {}".format(filename_ufp, self._library_project_name, human_readable_error), - lifetime = 0 + lifetime = 0, + message_type = Message.MessageType.ERROR ) self._on_upload_error() self._onFileUploadFinished(filename_ufp) @@ -301,7 +303,8 @@ class DFFileExportAndUploadManager: self._file_upload_job_metadata[filename]["file_upload_failed_message"] = Message( title = "File upload error", text = "Failed to upload the file '{}' to '{}'. {}".format(self._file_name, self._library_project_name, human_readable_error), - lifetime = 0 + lifetime = 0, + message_type = Message.MessageType.ERROR ) self._on_upload_error() @@ -338,11 +341,13 @@ class DFFileExportAndUploadManager: text = "'{}' was uploaded to '{}'.".format(filename_3mf, self._library_project_name), title = "Upload successful", lifetime = 0, + message_type = Message.MessageType.POSITIVE ), "file_upload_failed_message": Message( text = "Failed to upload the file '{}' to '{}'.".format(filename_3mf, self._library_project_name), title = "File upload error", - lifetime = 0 + lifetime = 0, + message_type = Message.MessageType.ERROR ) } job_3mf = ExportFileJob(self._file_handlers["3mf"], self._nodes, self._file_name, "3mf") @@ -360,11 +365,13 @@ class DFFileExportAndUploadManager: text = "'{}' was uploaded to '{}'.".format(filename_ufp, self._library_project_name), title = "Upload successful", lifetime = 0, + message_type = Message.MessageType.POSITIVE ), "file_upload_failed_message": Message( text = "Failed to upload the file '{}' to '{}'.".format(filename_ufp, self._library_project_name), title = "File upload error", - lifetime = 0 + lifetime = 0, + message_type = Message.MessageType.ERROR ) } job_ufp = ExportFileJob(self._file_handlers["ufp"], self._nodes, self._file_name, "ufp") diff --git a/plugins/DigitalLibrary/src/DigitalFactoryApiClient.py b/plugins/DigitalLibrary/src/DigitalFactoryApiClient.py index a9a1ab360b..ad87ea9b8a 100644 --- a/plugins/DigitalLibrary/src/DigitalFactoryApiClient.py +++ b/plugins/DigitalLibrary/src/DigitalFactoryApiClient.py @@ -365,12 +365,10 @@ class DigitalFactoryApiClient: :param on_finished: The function to be called after the result is parsed. :param on_error: The function to be called if anything goes wrong. """ - - display_name = re.sub(r"^[\\w\\-\\. ()]+\\.[a-zA-Z0-9]+$", " ", project_name) - Logger.log("i", "Attempt to create new DF project '{}'.".format(display_name)) + Logger.log("i", "Attempt to create new DF project '{}'.".format(project_name)) url = "{}/projects".format(self.CURA_API_ROOT) - data = json.dumps({"data": {"display_name": display_name}}).encode() + data = json.dumps({"data": {"display_name": project_name}}).encode() self._http.put(url, scope = self._scope, data = data, diff --git a/plugins/DigitalLibrary/src/DigitalFactoryController.py b/plugins/DigitalLibrary/src/DigitalFactoryController.py index cd0f0be638..c0323100c8 100644 --- a/plugins/DigitalLibrary/src/DigitalFactoryController.py +++ b/plugins/DigitalLibrary/src/DigitalFactoryController.py @@ -530,7 +530,8 @@ class DigitalFactoryController(QObject): Message( text = "Failed to write to temporary file for '{}'.".format(file_name), title = "File-system error", - lifetime = 10 + lifetime = 10, + message_type=Message.MessageType.ERROR ).show() return @@ -544,7 +545,8 @@ class DigitalFactoryController(QObject): Message( text = "Failed Digital Library download for '{}'.".format(f), title = "Network error {}".format(error), - lifetime = 10 + lifetime = 10, + message_type=Message.MessageType.ERROR ).show() download_manager = HttpRequestManager.getInstance() @@ -589,7 +591,10 @@ class DigitalFactoryController(QObject): if filename == "": Logger.log("w", "The file name cannot be empty.") - Message(text = "Cannot upload file with an empty name to the Digital Library", title = "Empty file name provided", lifetime = 0).show() + Message(text = "Cannot upload file with an empty name to the Digital Library", + title = "Empty file name provided", + lifetime = 0, + message_type = Message.MessageType.ERROR).show() return self._saveFileToSelectedProjectHelper(filename, formats) diff --git a/plugins/GCodeReader/FlavorParser.py b/plugins/GCodeReader/FlavorParser.py index 09495c527f..56e50d2145 100644 --- a/plugins/GCodeReader/FlavorParser.py +++ b/plugins/GCodeReader/FlavorParser.py @@ -500,7 +500,8 @@ class FlavorParser: "@info:generic", "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate."), lifetime=0, - title = catalog.i18nc("@info:title", "G-code Details")) + title = catalog.i18nc("@info:title", "G-code Details"), + message_type = Message.MessageType.WARNING) caution_message.show() # The "save/print" button's state is bound to the backend state. diff --git a/plugins/ModelChecker/ModelChecker.py b/plugins/ModelChecker/ModelChecker.py index 4f2f8bdf40..321ce8d007 100644 --- a/plugins/ModelChecker/ModelChecker.py +++ b/plugins/ModelChecker/ModelChecker.py @@ -28,7 +28,8 @@ class ModelChecker(QObject, Extension): self._caution_message = Message("", #Message text gets set when the message gets shown, to display the models in question. lifetime = 0, - title = catalog.i18nc("@info:title", "3D Model Assistant")) + title = catalog.i18nc("@info:title", "3D Model Assistant"), + message_type = Message.MessageType.WARNING) self._change_timer = QTimer() self._change_timer.setInterval(200) diff --git a/plugins/PrepareStage/PrepareMenu.qml b/plugins/PrepareStage/PrepareMenu.qml index 061db0b8f6..cf7665bda6 100644 --- a/plugins/PrepareStage/PrepareMenu.qml +++ b/plugins/PrepareStage/PrepareMenu.qml @@ -120,19 +120,6 @@ Item popup.width = childrenRect.width } - Label - { - text: catalog.i18nc("@menu:header", "Open file") - color: UM.Theme.getColor("text_medium") - font: UM.Theme.getFont("medium") - renderType: Text.NativeRendering - verticalAlignment: Text.AlignVCenter - - width: contentWidth - height: UM.Theme.getSize("action_button").height - leftPadding: UM.Theme.getSize("default_margin").width - } - Repeater { model: prepareMenu.fileProviderModel diff --git a/plugins/README_plugins.txt b/plugins/README_plugins.txt new file mode 100644 index 0000000000..47a639818c --- /dev/null +++ b/plugins/README_plugins.txt @@ -0,0 +1,11 @@ +This is the folder for _bundled_ plugins. If you place any other plugins here, +they will not be seen or upgraded by any next version of Cura. + +If you want your (unbundled) plugins to work after an upgrade, +please don't put them here, but install them either; + - via the Marketplace (recommended if available for that plugin), + - by dragging a `.curapackage` file onto Cura, + - or place it in the plugin folder in the configuration folder* for Cura. + +*) The plugin sub-folder of the configuration folder can be found by: + Open up Help -> Show Configuration Folder -> Navigate to the plugins folder. diff --git a/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py b/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py index ccdd27ef16..05543813db 100644 --- a/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py +++ b/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py @@ -93,7 +93,9 @@ class RemovableDriveOutputDevice(OutputDevice): job.progress.connect(self._onProgress) job.finished.connect(self._onFinished) - message = Message(catalog.i18nc("@info:progress Don't translate the XML tags !", "Saving to Removable Drive {0}").format(self.getName()), 0, False, -1, catalog.i18nc("@info:title", "Saving")) + message = Message(catalog.i18nc("@info:progress Don't translate the XML tags !", + "Saving to Removable Drive {0}").format(self.getName()), + 0, False, -1, catalog.i18nc("@info:title", "Saving")) message.show() self.writeStarted.emit(self) @@ -136,7 +138,8 @@ class RemovableDriveOutputDevice(OutputDevice): except: Logger.logException("w", "An execption occured while trying to write to removable drive.") message = Message(catalog.i18nc("@info:status", "Could not save to removable drive {0}: {1}").format(self.getName(),str(job.getError())), - title = catalog.i18nc("@info:title", "Error")) + title = catalog.i18nc("@info:title", "Error"), + message_type = Message.MessageType.ERROR) message.show() self.writeError.emit(self) return @@ -144,13 +147,19 @@ class RemovableDriveOutputDevice(OutputDevice): self._writing = False self.writeFinished.emit(self) if job.getResult(): - message = Message(catalog.i18nc("@info:status", "Saved to Removable Drive {0} as {1}").format(self.getName(), os.path.basename(job.getFileName())), title = catalog.i18nc("@info:title", "File Saved")) + message = Message(catalog.i18nc("@info:status", "Saved to Removable Drive {0} as {1}").format(self.getName(), os.path.basename(job.getFileName())), + title = catalog.i18nc("@info:title", "File Saved"), + message_type = Message.MessageType.POSITIVE) message.addAction("eject", catalog.i18nc("@action:button", "Eject"), "eject", catalog.i18nc("@action", "Eject removable device {0}").format(self.getName())) message.actionTriggered.connect(self._onActionTriggered) message.show() self.writeSuccess.emit(self) else: - message = Message(catalog.i18nc("@info:status", "Could not save to removable drive {0}: {1}").format(self.getName(), str(job.getError())), title = catalog.i18nc("@info:title", "Warning")) + message = Message(catalog.i18nc("@info:status", + "Could not save to removable drive {0}: {1}").format(self.getName(), + str(job.getError())), + title = catalog.i18nc("@info:title", "Error"), + message_type = Message.MessageType.ERROR) message.show() self.writeError.emit(self) job.getStream().close() @@ -159,8 +168,12 @@ class RemovableDriveOutputDevice(OutputDevice): if action == "eject": if Application.getInstance().getOutputDeviceManager().getOutputDevicePlugin("RemovableDriveOutputDevice").ejectDevice(self): message.hide() - - eject_message = Message(catalog.i18nc("@info:status", "Ejected {0}. You can now safely remove the drive.").format(self.getName()), title = catalog.i18nc("@info:title", "Safely Remove Hardware")) + eject_message = Message(catalog.i18nc("@info:status", + "Ejected {0}. You can now safely remove the drive.").format(self.getName()), + title = catalog.i18nc("@info:title", "Safely Remove Hardware")) else: - eject_message = Message(catalog.i18nc("@info:status", "Failed to eject {0}. Another program may be using the drive.").format(self.getName()), title = catalog.i18nc("@info:title", "Warning")) + eject_message = Message(catalog.i18nc("@info:status", + "Failed to eject {0}. Another program may be using the drive.").format(self.getName()), + title = catalog.i18nc("@info:title", "Warning"), + message_type = Message.MessageType.ERROR) eject_message.show() diff --git a/plugins/SimulationView/SimulationView.py b/plugins/SimulationView/SimulationView.py index 57209f2678..af6b538f26 100644 --- a/plugins/SimulationView/SimulationView.py +++ b/plugins/SimulationView/SimulationView.py @@ -125,10 +125,17 @@ class SimulationView(CuraView): self._only_show_top_layers = bool(Application.getInstance().getPreferences().getValue("view/only_show_top_layers")) self._compatibility_mode = self._evaluateCompatibilityMode() - self._wireprint_warning_message = Message(catalog.i18nc("@info:status", "Cura does not accurately display layers when Wire Printing is enabled."), - title = catalog.i18nc("@info:title", "Simulation View")) - self._slice_first_warning_message = Message(catalog.i18nc("@info:status", "Nothing is shown because you need to slice first."), title = catalog.i18nc("@info:title", "No layers to show"), - option_text = catalog.i18nc("@info:option_text", "Do not show this message again"), option_state = False) + self._wireprint_warning_message = Message(catalog.i18nc("@info:status", + "Cura does not accurately display layers when Wire Printing is enabled."), + title = catalog.i18nc("@info:title", "Simulation View"), + message_type = Message.MessageType.WARNING) + self._slice_first_warning_message = Message(catalog.i18nc("@info:status", + "Nothing is shown because you need to slice first."), + title = catalog.i18nc("@info:title", "No layers to show"), + option_text = catalog.i18nc("@info:option_text", + "Do not show this message again"), + option_state = False, + message_type = Message.MessageType.WARNING) self._slice_first_warning_message.optionToggled.connect(self._onDontAskMeAgain) CuraApplication.getInstance().getPreferences().addPreference(self._no_layers_warning_preference, True) diff --git a/plugins/SolidView/SolidView.py b/plugins/SolidView/SolidView.py index 3ecc84eb37..f12c1aae01 100644 --- a/plugins/SolidView/SolidView.py +++ b/plugins/SolidView/SolidView.py @@ -72,7 +72,8 @@ class SolidView(View): lifetime = 60 * 5, # leave message for 5 minutes title = catalog.i18nc("@info:title", "Model Errors"), option_text = catalog.i18nc("@info:option_text", "Do not show this message again"), - option_state = False + option_state = False, + message_type=Message.MessageType.WARNING ) self._xray_warning_message.optionToggled.connect(self._onDontAskMeAgain) application.getPreferences().addPreference(self._show_xray_warning_preference, True) diff --git a/plugins/Toolbox/src/CloudSync/RestartApplicationPresenter.py b/plugins/Toolbox/src/CloudSync/RestartApplicationPresenter.py index d0222029fd..8776d1782a 100644 --- a/plugins/Toolbox/src/CloudSync/RestartApplicationPresenter.py +++ b/plugins/Toolbox/src/CloudSync/RestartApplicationPresenter.py @@ -15,10 +15,9 @@ class RestartApplicationPresenter: def present(self) -> None: app_name = self._app.getApplicationDisplayName() - message = Message(self._i18n_catalog.i18nc( - "@info:generic", - "You need to quit and restart {} before changes have effect.", app_name - )) + message = Message(self._i18n_catalog.i18nc("@info:generic", + "You need to quit and restart {} before changes have effect.", + app_name)) message.addAction("quit", name="Quit " + app_name, diff --git a/plugins/Toolbox/src/CloudSync/SyncOrchestrator.py b/plugins/Toolbox/src/CloudSync/SyncOrchestrator.py index a85c13f639..bb37c6d4a9 100644 --- a/plugins/Toolbox/src/CloudSync/SyncOrchestrator.py +++ b/plugins/Toolbox/src/CloudSync/SyncOrchestrator.py @@ -111,4 +111,4 @@ class SyncOrchestrator(Extension): """Logs an error and shows it to the user""" Logger.error(text) - Message(text, lifetime=0).show() + Message(text, lifetime = 0, message_type = Message.MessageType.ERROR).show() diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py index ac95624421..a900edeb75 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py @@ -230,7 +230,8 @@ class CloudOutputDeviceManager: ), progress = 0, lifetime = 0, - image_source = image_path + image_source = image_path, + message_type = Message.MessageType.POSITIVE ) message.show() @@ -316,7 +317,8 @@ class CloudOutputDeviceManager: "A cloud connection is not available for a printer", "A cloud connection is not available for some printers", len(self.reported_device_ids) - ) + ), + message_type = Message.MessageType.WARNING ) device_names = "".join(["
  • {} ({})
  • ".format(self._um_cloud_printers[device].name, self._um_cloud_printers[device].definition.name) for device in self.reported_device_ids]) message_text = self.i18n_catalog.i18ncp( diff --git a/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py b/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py index 146767467a..9014cc2d70 100644 --- a/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py +++ b/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py @@ -19,7 +19,8 @@ class LegacyDeviceNoLongerSupportedMessage(Message): "running Ultimaker Connect. Please update the printer to the " "latest firmware."), title = I18N_CATALOG.i18nc("@info:title", "Update your printer"), - lifetime = 10 + lifetime = 10, + message_type = Message.MessageType.WARNING ) def show(self) -> None: diff --git a/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py b/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py index 6b481ff4a1..887cfaa5e8 100644 --- a/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py +++ b/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py @@ -25,8 +25,7 @@ class MaterialSyncMessage(Message): "on the host printer of group {0}.", device.name), title = I18N_CATALOG.i18nc("@info:title", "Sending materials to printer"), lifetime = 10, - dismissable = True - ) + dismissable = True) def show(self) -> None: if MaterialSyncMessage.__is_visible: diff --git a/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py b/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py index 70bfa769ee..059b81b39e 100644 --- a/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py +++ b/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py @@ -29,7 +29,8 @@ class NotClusterHostMessage(Message): "it as a group host.", device.name), title = I18N_CATALOG.i18nc("@info:title", "Not a group host"), lifetime = 0, - dismissable = True + dismissable = True, + message_type = Message.MessageType.ERROR ) self._address = device.address self.addAction("", I18N_CATALOG.i18nc("@action", "Configure group"), "", "") diff --git a/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py b/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py index 39dc985cb8..853f6a1380 100644 --- a/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py +++ b/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py @@ -14,5 +14,6 @@ class PrintJobUploadBlockedMessage(Message): super().__init__( text = I18N_CATALOG.i18nc("@info:status", "Please wait until the current job has been sent."), title = I18N_CATALOG.i18nc("@info:title", "Print error"), - lifetime = 10 + lifetime = 10, + message_type = Message.MessageType.ERROR ) diff --git a/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py b/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py index 9feb4b4970..4b30013b9c 100644 --- a/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py +++ b/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py @@ -13,5 +13,6 @@ class PrintJobUploadErrorMessage(Message): def __init__(self, message: str = None) -> None: super().__init__( text = message or I18N_CATALOG.i18nc("@info:text", "Could not upload the data to the printer."), - title = I18N_CATALOG.i18nc("@info:title", "Network error") + title = I18N_CATALOG.i18nc("@info:title", "Network error"), + message_type=Message.MessageType.ERROR ) diff --git a/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadQueueFullMessage.py b/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadQueueFullMessage.py index dc910e9e1b..fc05ce3389 100644 --- a/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadQueueFullMessage.py +++ b/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadQueueFullMessage.py @@ -15,5 +15,6 @@ class PrintJobUploadQueueFullMessage(Message): super().__init__( text = I18N_CATALOG.i18nc("@info:status", "Print job queue is full. The printer can't accept a new job."), title = I18N_CATALOG.i18nc("@info:title", "Queue Full"), - lifetime = 10 + lifetime = 10, + message_type=Message.MessageType.ERROR ) diff --git a/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py b/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py index aa3d72ccd8..7fa7340cff 100644 --- a/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py +++ b/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py @@ -13,5 +13,6 @@ class PrintJobUploadSuccessMessage(Message): def __init__(self) -> None: super().__init__( text = I18N_CATALOG.i18nc("@info:status", "Print job was successfully sent to the printer."), - title = I18N_CATALOG.i18nc("@info:title", "Data Sent") + title = I18N_CATALOG.i18nc("@info:title", "Data Sent"), + message_type = Message.MessageType.POSITIVE ) diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py index 70a1f4333e..92f4bf4e4d 100644 --- a/plugins/USBPrinting/USBPrinterOutputDevice.py +++ b/plugins/USBPrinting/USBPrinterOutputDevice.py @@ -131,7 +131,10 @@ class USBPrinterOutputDevice(PrinterOutputDevice): """ if self._is_printing: - message = Message(text = catalog.i18nc("@message", "A print is still in progress. Cura cannot start another print via USB until the previous print has completed."), title = catalog.i18nc("@message", "Print in Progress")) + message = Message(text = catalog.i18nc("@message", + "A print is still in progress. Cura cannot start another print via USB until the previous print has completed."), + title = catalog.i18nc("@message", "Print in Progress"), + message_type = Message.MessageType.ERROR) message.show() return # Already printing self.writeStarted.emit(self) diff --git a/requirements.txt b/requirements.txt index 59cfd3eccd..db927c4943 100644 --- a/requirements.txt +++ b/requirements.txt @@ -30,7 +30,6 @@ requests==2.22.0 sentry-sdk==0.13.5 six==1.12.0 trimesh==3.2.33 -urllib3==1.25.6 zeroconf==0.24.1 comtypes==1.1.7 pywin32==300 diff --git a/resources/README_resources.txt b/resources/README_resources.txt new file mode 100644 index 0000000000..17124bc0d5 --- /dev/null +++ b/resources/README_resources.txt @@ -0,0 +1,11 @@ +This is the folder for _bundled_ resources. If you place, or tinker with, +any resources here, they will not be seen or upgraded by next versions of Cura. + +If you want your (unbundled or altered) resources to work after an upgrade, +please don't put them here, but install them either; + - for materials: via the Marketplace (recommended if avialable), + - by dragging a `.curapackage` file onto Cura, + - or place it in the right sub-folder in the configuration folder* for Cura. + +*) The configuration folder can be found by: + Open up Help -> Show Configuration Folder diff --git a/resources/definitions/anycubic_i3_mega_s.def.json b/resources/definitions/anycubic_i3_mega_s.def.json index 22eb06af67..288e344332 100644 --- a/resources/definitions/anycubic_i3_mega_s.def.json +++ b/resources/definitions/anycubic_i3_mega_s.def.json @@ -114,6 +114,7 @@ "skirt_gap": { "value": 5.0 }, "skirt_line_count": { "value": 4 }, + "meshfix_maximum_deviation": { "value": 0.05 }, "support_angle": { "value": "math.floor(math.degrees(math.atan(line_width / 2.0 / layer_height)))" }, "support_pattern": { "value": "'zigzag'" }, "support_infill_rate": { "value": "0 if support_enable and support_structure == 'tree' else 20" }, diff --git a/resources/definitions/biqu_base.def.json b/resources/definitions/biqu_base.def.json index 960fb6d494..748660742d 100755 --- a/resources/definitions/biqu_base.def.json +++ b/resources/definitions/biqu_base.def.json @@ -84,8 +84,8 @@ "material_final_print_temperature": { "value": "material_print_temperature" }, "material_flow": { "value": 100 }, - "z_seam_type": { "value": "'back'" }, - "z_seam_corner": { "value": "'z_seam_corner_weighted'" }, + "z_seam_type": { "value": "'sharpest_corner'" }, + "z_seam_corner": { "value": "'z_seam_corner_inner'" }, "infill_line_width": { "value": "line_width * 1.2" }, "infill_sparse_density": { "value": "20" }, @@ -154,7 +154,7 @@ "support_interface_enable": { "value": true }, "support_interface_height": { "value": "layer_height * 4" }, - "support_interface_density": { "value": 33.333 }, + "support_interface_density": { "value": 75 }, "support_interface_pattern": { "value": "'grid'" }, "support_interface_skip_height": { "value": 0.2 }, "minimum_support_area": { "value": 2 }, diff --git a/resources/definitions/biqu_bx_abl.def.json b/resources/definitions/biqu_bx_abl.def.json new file mode 100755 index 0000000000..3b6b60c2e4 --- /dev/null +++ b/resources/definitions/biqu_bx_abl.def.json @@ -0,0 +1,51 @@ +{ + "name": "Biqu BX", + "version": 2, + "inherits": "biqu_base", + "metadata": { + "quality_definition": "biqu_base", + "visible": true, + "has_machine_materials": true, + "platform": "BIQU_BX_PLATE.stl", + "platform_offset": [ + 7, + -7.4, + -3 + ] + }, + "overrides": { + "coasting_enable": { "value": false }, + "retraction_amount": { "value": 1 }, + "retraction_speed": { "value": 40 }, + "retraction_extrusion_window": { "value": 1 }, + "retract_at_layer_change": { "value": true }, + "support_enable": { "value": false }, + "support_structure": { "value": "'normal'" }, + "support_type": { "value": "'buildplate'" }, + "support_angle": { "value": 45 }, + "support_infill_rate": { "value": 15 }, + "infill_overlap": { "value": 15.0 }, + "skin_overlap": { "value": 20.0 }, + "fill_outline_gaps": { "value": true }, + "filter_out_tiny_gaps": { "value": true }, + "roofing_layer_count": { "value": 2 }, + "xy_offset_layer_0": { "value": -0.1 }, + "speed_print": { "value": 50 }, + "machine_name": { "default_value": "Biqu BX" }, + "machine_width": { "value": 250 }, + "machine_depth": { "value": 250 }, + "machine_height": { "value": 250 }, + "machine_head_with_fans_polygon": { "default_value": [ + [-33, 35], + [-33, -23], + [33, -23], + [33, 35] + ] + }, + "machine_start_gcode": { + "default_value": "; BIQU BX Start G-code\r\n; For information on how to tune this profile and get the\r\n; most out of your BX visit: https:\/\/github.com\/looxonline\/Marlin\r\n; For the official github site visit: https:\/\/github.com\/bigtreetech\/BIQU-BX\r\n\r\nM117 Initial homing sequence. ; Home so that the probe is positioned to heat\r\nG28\r\n\r\nM117 Probe heating position\r\nG0 X65 Y5 Z1 ; Move the probe to the heating position.\r\n\r\nM117 Getting the heaters up to temp!\r\nM104 S140 ; Set Extruder temperature, no wait\r\nM140 S60 ; Set Heat Bed temperature\r\nM190 S60 ; Wait for Heat Bed temperature\r\n\r\nM117 Waiting for probe to warm! ; Wait another 90s for the probe to absorb heat.\r\nG4 S90 \r\n\r\nM117 Post warming re-home\r\nG28 ; Home all axes again after warming\r\n\r\nM117 Z-Dance of my people\r\nG34\r\n\r\nM117 ABL Probing\r\nG29\r\n\r\nM900 K0 L0 T0 ;Edit the K and L values if you have calibrated a k factor for your filament\r\nM900 T0 S0\r\n\r\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\r\nG1 X4.1 Y10 Z0.3 F5000.0 ; Move to start position\r\n\r\nM117 Getting the extruder up to temp\r\nM140 S{material_bed_temperature_layer_0} ; Set Heat Bed temperature\r\nM104 S{material_print_temperature_layer_0} ; Set Extruder temperature\r\nM109 S{material_print_temperature_layer_0} ; Wait for Extruder temperature\r\nM190 S{material_bed_temperature_layer_0} ; Wait for Heat Bed temperature\r\n\r\nG92 E0 ; Reset Extruder\r\nM117 Purging\r\nG1 X4.1 Y200.0 Z0.3 F1500.0 E15 ; Draw the first line\r\nG1 X4.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\r\nG1 X4.4 Y20 Z0.3 F1500.0 E30 ; Draw the second line\r\nG92 E0 ; Reset Extruder\r\nM117 Lets make\r\nG1 X8 Y20 Z0.3 F5000.0 ; Move over to prevent blob squish" + }, + + "gantry_height": { "value": 27.5 } + } +} diff --git a/resources/definitions/flsun_sr.def.json b/resources/definitions/flsun_sr.def.json new file mode 100644 index 0000000000..9f68c129bd --- /dev/null +++ b/resources/definitions/flsun_sr.def.json @@ -0,0 +1,76 @@ +{ + "version": 2, + "name": "FlSun SuperRacer", + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Thushan Fernando", + "manufacturer": "Flsun", + "platform": "flsun_sr.3mf", + "file_formats": "text/x-gcode", + "has_materials": true, + "has_machine_quality": false, + "preferred_quality_type": "fast", + "machine_extruder_trains": { + "0": "flsun_sr_extruder_0" + } + }, + "overrides": { + "machine_extruder_count": { + "default_value": 1 + }, + "retraction_enable": { + "default_value": true + }, + "machine_heated_bed": { + "default_value": true + }, + "machine_width": { + "default_value": 260 + }, + "machine_depth": { + "default_value": 260 + }, + "machine_height": { + "default_value": 330 + }, + "machine_center_is_zero": { + "default_value": true + }, + "machine_head_with_fans_polygon": { + "default_value": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ] + }, + "z_seam_type": { + "value": "'back'" + }, + "gantry_height": { + "value": "0" + }, + "machine_shape": { + "default_value": "elliptic" + }, + "machine_nozzle_size": { + "default_value": 0.4 + }, + "material_diameter": { + "default_value": 1.75 + }, + "infill_sparse_density": { + "default_value": 15 + }, + "machine_start_gcode": { + "default_value": "G21\nG90\nM82\nM107 T0\nM140 S{material_bed_temperature}\nM104 S{material_print_temperature} T0\nM190 S{material_bed_temperature}\nM109 S{material_print_temperature} T0\nG28\nG92 E0\n" + }, + "machine_end_gcode": { + "default_value": "M107 T0\nM104 S0\nM104 S0 T1\nM140 S0\nG92 E0\nG91\nG1 E-1 F300 \nG1 Z+0.5 E-5 F6000\nG28 X0 Y0\nG90 ;absolute positioning\n" + }, + "machine_gcode_flavor": { + "default_value": "RepRap (Marlin/Sprinter)" + } + } +} diff --git a/resources/definitions/kingroon_base.def.json b/resources/definitions/kingroon_base.def.json new file mode 100644 index 0000000000..c458e684bd --- /dev/null +++ b/resources/definitions/kingroon_base.def.json @@ -0,0 +1,279 @@ +{ + "name": "Kingroon Base Printer", + "version": 2, + "inherits": "fdmprinter", + "metadata": { + "visible": false, + "author": "notamu", + "manufacturer": "Kingroon", + "file_formats": "text/x-gcode", + "first_start_actions": ["MachineSettingsAction"], + + "machine_extruder_trains": { + "0": "kingroon_base_extruder_0" + }, + + "has_materials": true, + "has_variants": true, + "has_machine_quality": true, + "variants_name": "Nozzle Size", + + "preferred_variant_name": "0.4mm Nozzle", + "preferred_quality_type": "standard", + "preferred_material": "generic_pla", + "exclude_materials": [ + "3D-Fuel_PLA_PRO_Black", + "3D-Fuel_PLA_SnapSupport", + "bestfilament_abs_skyblue", + "bestfilament_petg_orange", + "bestfilament_pla_green", + "chromatik_pla", + "dsm_arnitel2045_175", + "dsm_novamid1070_175", + "emotiontech_abs", + "emotiontech_absx", + "emotiontech_acetate", + "emotiontech_asax", + "emotiontech_copa", + "emotiontech_nylon_1030", + "emotiontech_nylon_1030cf", + "emotiontech_nylon_1070", + "emotiontech_pc", + "emotiontech_petg", + "emotiontech_pla", + "emotiontech_pla_hr_870", + "emotiontech_bvoh", + "emotiontech_hips", + "emotiontech_pva-m", + "emotiontech_pva-s", + "emotiontech_tpu98a", + "eSUN_PLA_PRO_White", + "eSUN_PETG_Black", + "eSUN_PETG_Grey", + "eSUN_PETG_Purple", + "eSUN_PLA_PRO_Black", + "eSUN_PLA_PRO_Grey", + "eSUN_PLA_PRO_Purple", + "fabtotum_abs", + "fabtotum_nylon", + "fabtotum_pla", + "fabtotum_tpu", + "fdplast_pla_olive", + "fdplast_abs_tomato", + "fdplast_petg_gray", + "fiberlogy_hd_pla", + "filo3d_pla", + "filo3d_pla_green", + "filo3d_pla_red", + "generic_cpe_175", + "generic_hips_175", + "generic_nylon_175", + "generic_pc_175", + "generic_pva_175", + "imade3d_petg_175", + "imade3d_pla_175", + "innofill_innoflex60_175", + "layer_one_white_pla", + "layer_one_black_pla", + "layer_one_dark_gray_pla", + "leapfrog_pva_natural", + "leapfrog_abs_natural", + "leapfrog_epla_natural", + "octofiber_pla", + "polyflex_pla", + "polymax_pla", + "polyplus_pla", + "polywood_pla", + "redd_tpe", + "redd_abs", + "redd_asa", + "redd_hips", + "redd_nylon", + "redd_petg", + "redd_pla", + "tizyx_flex", + "tizyx_petg", + "tizyx_pla", + "tizyx_pla_bois", + "tizyx_pva", + "tizyx_abs", + "verbatim_bvoh_175", + "Vertex_Delta_TPU", + "Vertex_Delta_ABS", + "Vertex_Delta_PET", + "Vertex_Delta_PLA", + "Vertex_Delta_PLA_Glitter", + "Vertex_Delta_PLA_Mat", + "Vertex_Delta_PLA_Satin", + "Vertex_Delta_PLA_Wood", + "volumic_support_ultra", + "volumic_abs_ultra", + "volumic_arma_ultra", + "volumic_asa_ultra", + "volumic_br80_ultra", + "volumic_bumper_ultra", + "volumic_cu80_ultra", + "volumic_flex93_ultra", + "volumic_medical_ultra", + "volumic_nylon_ultra", + "volumic_pekk_carbone", + "volumic_petg_ultra", + "volumic_petgcarbone_ultra", + "volumic_pla_ultra", + "volumic_pp_ultra", + "volumic_strong_ultra", + "zyyx_pro_flex", + "zyyx_pro_pla" + ] + }, + "overrides": { + "machine_name": { "default_value": "Kingroon Base Printer" }, + "machine_start_gcode": { "default_value": "G28 ; home all axes\n M117 Purge extruder\n G92 E0 ; reset extruder\n G1 Z1.0 F3000 ; move z up little to prevent scratching of surface\n G1 X2 Y20 Z0.3 F5000.0 ; move to start-line position\n G1 X2 Y175.0 Z0.3 F1500.0 E15 ; draw 1st line\n G1 X2 Y175.0 Z0.4 F5000.0 ; move to side a little\n G1 X2 Y20 Z0.4 F1500.0 E30 ; draw 2nd line\n G92 E0 ; reset extruder\n G1 Z1.0 F3000 ; move z up little to prevent scratching of surface"}, + "machine_end_gcode": { "default_value": "G91; relative positioning\n G1 Z1.0 F3000 ; move z up little to prevent scratching of print\n G90; absolute positioning\n G1 X0 Y200 F1000 ; prepare for part removal\n M104 S0; turn off extruder\n M140 S0 ; turn off bed\n G1 X0 Y300 F1000 ; prepare for part removal\n M84 ; disable motors\n M106 S0 ; turn off fan" }, + + "machine_width": { "default_value": 180 }, + "machine_depth": { "default_value": 180 }, + "machine_height": { "default_value": 180 }, + + "machine_max_feedrate_x": { "default_value": 100 }, + "machine_max_feedrate_y": { "default_value": 100 }, + "machine_max_feedrate_z": { "default_value": 10 }, + "machine_max_feedrate_e": { "default_value": 100 }, + + "machine_max_acceleration_x": { "default_value": 500 }, + "machine_max_acceleration_y": { "default_value": 500 }, + "machine_max_acceleration_z": { "default_value": 50 }, + "machine_max_acceleration_e": { "default_value": 500 }, + "machine_acceleration": { "default_value": 500 }, + + "machine_max_jerk_xy": { "default_value": 10 }, + "machine_max_jerk_z": { "default_value": 0.3 }, + "machine_max_jerk_e": { "default_value": 5 }, + + "machine_heated_bed": { "default_value": true }, + + "material_diameter": { "default_value": 1.75 }, + + "acceleration_print": { "value": 500 }, + "acceleration_travel": { "value": 500 }, + "acceleration_travel_layer_0": { "value": "acceleration_travel" }, + "acceleration_roofing": { "enabled": "acceleration_enabled and roofing_layer_count > 0 and top_layers > 0" }, + + "jerk_print": { "value": 8 }, + "jerk_travel": { "value": "jerk_print" }, + "jerk_travel_layer_0": { "value": "jerk_travel" }, + + "acceleration_enabled": { "value": false }, + "jerk_enabled": { "value": false }, + + "default_material_print_temperature": { "maximum_value_warning": "260", "maximum_value": "275" }, + "default_material_bed_temperature": { "maximum_value": "150" }, + + "speed_print": { "value": 60.0 } , + "speed_infill": { "value": "speed_print" }, + "speed_wall": { "value": "speed_print / 2" }, + "speed_wall_0": { "value": "speed_wall" }, + "speed_wall_x": { "value": "speed_wall" }, + "speed_topbottom": { "value": "speed_print / 2" }, + "speed_roofing": { "value": "speed_topbottom" }, + "speed_travel": { "value": "150.0 if speed_print < 60 else 250.0 if speed_print > 100 else speed_print * 2.5" }, + "speed_layer_0": { "value": 20.0 }, + "speed_print_layer_0": { "value": "speed_layer_0" }, + "speed_travel_layer_0": { "value": "100 if speed_layer_0 < 20 else 150 if speed_layer_0 > 30 else speed_layer_0 * 5" }, + "speed_prime_tower": { "value": "speed_topbottom" }, + "speed_support": { "value": "speed_wall_0" }, + "speed_support_interface": { "value": "speed_topbottom" }, + "speed_z_hop": { "value": 5 }, + + "skirt_brim_speed": { "value": "speed_layer_0" }, + + "line_width": { "value": "machine_nozzle_size * 1.1" }, + + "optimize_wall_printing_order": { "value": true }, + + "material_initial_print_temperature": { "value": "material_print_temperature" }, + "material_final_print_temperature": { "value": "material_print_temperature" }, + "material_flow": { "value": 100 }, + "travel_compensate_overlapping_walls_0_enabled": { "value": false }, + + "z_seam_type": { "value": "'back'" }, + "z_seam_corner": { "value": "'z_seam_corner_none'" }, + + "infill_sparse_density": { "value": "15" }, + "infill_pattern": { "value": "'lines' if infill_sparse_density > 50 else 'cubic'" }, + "infill_before_walls": { "value": false }, + "infill_overlap": { "value": 30.0 }, + "skin_overlap": { "value": 10.0 }, + "infill_wipe_dist": { "value": 0.0 }, + "wall_0_wipe_dist": { "value": 0.0 }, + + "fill_perimeter_gaps": { "value": "'everywhere'" }, + "fill_outline_gaps": { "value": false }, + "filter_out_tiny_gaps": { "value": false }, + + "retraction_speed": { + "maximum_value_warning": "machine_max_feedrate_e if retraction_enable else float('inf')", + "maximum_value": 200 + }, + "retraction_retract_speed": { + "maximum_value_warning": "machine_max_feedrate_e if retraction_enable else float('inf')", + "maximum_value": 200 + }, + "retraction_prime_speed": { + "maximum_value_warning": "machine_max_feedrate_e if retraction_enable else float('inf')", + "maximum_value": 200 + }, + + "retraction_hop_enabled": { "value": true }, + "retraction_hop": { "value": "layer_height*2" }, + "retraction_combing": { "value": "'off' if retraction_hop_enabled else 'infill'" }, + "retraction_combing_max_distance": { "value": 30 }, + "travel_avoid_other_parts": { "value": true }, + "travel_avoid_supports": { "value": true }, + "travel_retract_before_outer_wall": { "value": true }, + + "retraction_amount": { "value": 2 }, + "retraction_enable": { "value": true }, + "retraction_count_max": { "value": 100 }, + "retraction_extrusion_window": { "value": 2 }, + "retraction_min_travel": { "value": 1.5 }, + + "cool_fan_full_at_height": { "value": "layer_height_0 + 2 * layer_height" }, + "cool_fan_enabled": { "value": true }, + "cool_min_layer_time": { "value": 10 }, + + "adhesion_type": { "value": "'none' if support_enable else 'skirt'" }, + "brim_replaces_support": { "value": false }, + "skirt_gap": { "value": 10.0 }, + "skirt_line_count": { "value": 4 }, + + "adaptive_layer_height_variation": { "value": 0.04 }, + "adaptive_layer_height_variation_step": { "value": 0.04 }, + + "meshfix_maximum_resolution": { "value": "0.05" }, + "meshfix_maximum_travel_resolution": { "value": "meshfix_maximum_resolution" }, + + "support_angle": { "value": "math.floor(math.degrees(math.atan(line_width / 2.0 / layer_height)))" }, + "support_pattern": { "value": "'zigzag'" }, + "support_infill_rate": { "value": "0 if support_enable and support_structure == 'tree' else 20" }, + "support_use_towers": { "value": false }, + "support_xy_distance": { "value": "wall_line_width_0 * 2" }, + "support_xy_distance_overhang": { "value": "wall_line_width_0" }, + "support_z_distance": { "value": "layer_height if layer_height >= 0.16 else layer_height * 2" }, + "support_xy_overrides_z": { "value": "'xy_overrides_z'" }, + "support_wall_count": { "value": 1 }, + "support_brim_enable": { "value": true }, + "support_brim_width": { "value": 4 }, + + "support_interface_enable": { "value": true }, + "support_interface_height": { "value": "layer_height * 4" }, + "support_interface_density": { "value": 33.333 }, + "support_interface_pattern": { "value": "'grid'" }, + "support_interface_skip_height": { "value": 0.2 }, + "minimum_support_area": { "value": 2 }, + "minimum_interface_area": { "value": 10 }, + "top_bottom_thickness": {"value": "layer_height_0 + layer_height * 3" }, + "wall_thickness": {"value": "line_width * 2" } + + } +} diff --git a/resources/definitions/kingroon_kp3.def.json b/resources/definitions/kingroon_kp3.def.json new file mode 100644 index 0000000000..7dc04b2cce --- /dev/null +++ b/resources/definitions/kingroon_kp3.def.json @@ -0,0 +1,22 @@ +{ + "name": "Kingroon KP3", + "version": 2, + "inherits": "kingroon_base", + "overrides": { + "machine_name": { "default_value": "Kingroon KP3" }, + "machine_steps_per_mm_x": { "value": 80 }, + "machine_steps_per_mm_y": { "value": 80 }, + "machine_steps_per_mm_z": { "value": 400 }, + "machine_steps_per_mm_e": { "value": 95 }, + "retraction_amount": { "value": 4 }, + "retraction_speed": { "value": 40 }, + "retraction_extrusion_window": { "value": 4 }, + "speed_travel": { "value": 100 } + + }, + "metadata": { + "quality_definition": "kingroon_base", + "visible": true, + "platform": "kingroon_kp3.stl" + } +} diff --git a/resources/definitions/kingroon_kp3s.def.json b/resources/definitions/kingroon_kp3s.def.json new file mode 100644 index 0000000000..00120ed8f8 --- /dev/null +++ b/resources/definitions/kingroon_kp3s.def.json @@ -0,0 +1,33 @@ +{ + "name": "Kingroon KP3S", + "version": 2, + "inherits": "kingroon_base", + "overrides": { + "machine_name": { "default_value": "Kingroon KP3S" }, + "machine_steps_per_mm_x": { "value": 160 }, + "machine_steps_per_mm_y": { "value": 160 }, + "machine_steps_per_mm_z": { "value": 800 }, + "machine_steps_per_mm_e": { "value": 764 }, + "machine_max_feedrate_x": { "value": 200 }, + "machine_max_feedrate_y": { "value": 200 }, + "machine_max_feedrate_z": { "value": 4 }, + "machine_max_feedrate_e": { "value": 100 }, + "machine_max_acceleration_x": { "value": 1000 }, + "machine_max_acceleration_y": { "value": 1000 }, + "machine_max_acceleration_z": { "value": 100 }, + "machine_max_acceleration_e": { "value": 1000 }, + "machine_acceleration": { "value": 1000 }, + "machine_max_jerk_xy": { "value": 15 }, + "machine_max_jerk_z": { "value": 0.4 }, + "retraction_amount": { "value": 1 }, + "retraction_speed": { "value": 40 }, + "retraction_extrusion_window": { "value": 1 }, + "speed_z_hop": { "value": 4 } + + }, + "metadata": { + "quality_definition": "kingroon_base", + "visible": true, + "platform": "kingroon_kp3s.stl" + } +} diff --git a/resources/definitions/mp_mini_delta.def.json b/resources/definitions/mp_mini_delta.def.json index bbdca2c8f8..eda45bb413 100644 --- a/resources/definitions/mp_mini_delta.def.json +++ b/resources/definitions/mp_mini_delta.def.json @@ -3,7 +3,7 @@ "name": "MP Mini Delta", "inherits": "fdmprinter", "metadata": { - "author": "MPMD Facebook Group", + "author": "MPMD V1 Facebook Group", "manufacturer": "Monoprice", "file_formats": "text/x-gcode", "platform": "mp_mini_delta_platform.3mf", @@ -25,7 +25,7 @@ "overrides": { "machine_start_gcode": { - "default_value": ";MPMD Basic Calibration Tutorial: \n; https://www.thingiverse.com/thing:3892011 \n; \n; If you want to put calibration values in your \n; Start Gcode, put them here. \n; \n;If on stock firmware, at minimum, consider adding \n;M665 R here since there is a firmware bug. \n; \n; Calibration part ends here \n; \nG90 ; switch to absolute positioning \nG92 E0 ; reset extrusion distance \nG1 E20 F200 ; purge 20mm of filament to prime nozzle. \nG92 E0 ; reset extrusion distance \nG4 S5 ; Pause for 5 seconds to allow time for removing extruded filament \nG28 ; start from home position \nG1 E-6 F900 ; retract 6mm of filament before starting the bed leveling process \nG92 E0 ; reset extrusion distance \nG4 S5 ; pause for 5 seconds to allow time for removing extruded filament \nG29 P2 Z0.28 ; Auto-level ; ADJUST Z higher or lower to set first layer height. Start with 0.02 adjustments. \nG1 Z30 ; raise Z 30mm to prepare for priming the nozzle \nG1 E5 F200 ; extrude 5mm of filament to help prime the nozzle just prior to the start of the print \nG92 E0 ; reset extrusion distance \nG4 S5 ; pause for 5 seconds to allow time for cleaning the nozzle and build plate if needed " + "default_value": ";MPMD V1 Basic Calibration Tutorial: \n; https://www.thingiverse.com/thing:3892011 \n; \n; If you want to put calibration values in your \n; Start Gcode, put them here. \n; \n;If on stock firmware, at minimum, consider adding \n;M665 R here since there is a firmware bug. \n; \n; Calibration part ends here \n; \nG90 ; switch to absolute positioning \nG92 E0 ; reset extrusion distance \nG1 E20 F200 ; purge 20mm of filament to prime nozzle. \nG92 E0 ; reset extrusion distance \nG4 S5 ; Pause for 5 seconds to allow time for removing extruded filament \nG28 ; start from home position \nG1 E-6 F900 ; retract 6mm of filament before starting the bed leveling process \nG92 E0 ; reset extrusion distance \nG4 S5 ; pause for 5 seconds to allow time for removing extruded filament \nG29 P2 Z0.28 ; Auto-level ; ADJUST Z higher or lower to set first layer height. Start with 0.02 adjustments. \nG1 Z30 ; raise Z 30mm to prepare for priming the nozzle \nG1 E5 F200 ; extrude 5mm of filament to help prime the nozzle just prior to the start of the print \nG92 E0 ; reset extrusion distance \nG4 S5 ; pause for 5 seconds to allow time for cleaning the nozzle and build plate if needed " }, "machine_end_gcode": { @@ -47,9 +47,9 @@ "default_value": 0.21 }, "material_bed_temperature": { "value": 40 }, - "line_width": { "value": "round(machine_nozzle_size * 0.875, 2)" }, - "material_print_temperature_layer_0": { "value": "material_print_temperature + 5" }, - "material_bed_temperature_layer_0": { "value": "material_bed_temperature + 5" }, + "line_width": { "value": "round(machine_nozzle_size, 2)" }, + "material_print_temperature_layer_0": { "value": "material_print_temperature" }, + "material_bed_temperature_layer_0": { "value": "material_bed_temperature" }, "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, "machine_max_feedrate_x": { "default_value": 150 }, "machine_max_feedrate_y": { "default_value": 150 }, diff --git a/resources/definitions/mp_mini_delta_v2.def.json b/resources/definitions/mp_mini_delta_v2.def.json new file mode 100644 index 0000000000..30c7cb2823 --- /dev/null +++ b/resources/definitions/mp_mini_delta_v2.def.json @@ -0,0 +1,51 @@ +{ + "version": 2, + "name": "MP Mini Delta V2", + "inherits": "fdmprinter", + "metadata": { + "author": "mpminidelta subreddit", + "manufacturer": "Monoprice", + "file_formats": "text/x-gcode", + "platform": "mp_mini_delta_platform.3mf", + "supports_usb_connection": true, + "has_machine_quality": false, + "visible": true, + "platform_offset": [0, 0, 0], + "has_materials": true, + "has_variants": false, + "has_machine_materials": false, + "has_variant_materials": false, + "preferred_quality_type": "normal", + "machine_extruder_trains": + { + "0": "mp_mini_delta_v2_extruder_0" + } + }, + + "overrides": { + "machine_start_gcode": + { + "default_value": ";(**** start.gcode for MP Mini Delta V2****)\nG21\nG90\nM82\nM107\nM104 S170\nG28 X0 Y0\nG28 Z0\nG29 Z0.4\nG1 Z15 F300\nM109 S{material_print_temperature_layer_0}\nG92 E0\nG1 F200 E3\nG92 E0\nG1 F2000\n" + }, + "machine_end_gcode": { + "default_value": ";(**** end.gcode for MP Mini Delta V2****)\nG28;(Stick out the part)\nM190 S0;(Turn off heat bed, don't wait.)\nG92 E10;(Set extruder to 10)\nG1 E7 F200;(retract 3mm)\nM104 S0;(Turn off nozzle, don't wait)\nG4 S300;(Delay 5 minutes)\nM107;(Turn off part fan)\nM84;(Turn off stepper motors.)" + }, + "material_print_temp_prepend":{"default_value":false}, + "material_bed_temperature": { "value": 40 }, + "machine_width": { "default_value": 110 }, + "machine_depth": { "default_value": 110 }, + "machine_height": { "default_value": 120 }, + "machine_heated_bed": { "default_value": true }, + "machine_shape": { "default_value": "elliptic" }, + "machine_center_is_zero": { "default_value": true }, + "machine_nozzle_size": { + "default_value": 0.4 + }, + "line_width": { "value": "round(machine_nozzle_size, 2)" }, + "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, + "retraction_amount": { "default_value": 5 }, + "retraction_speed": { "default_value": 28 }, + "retraction_hop_enabled": { "default_value": false }, + "retract_at_layer_change": { "default_value": true } + } +} diff --git a/resources/definitions/seckit_skgo.def.json b/resources/definitions/seckit_skgo.def.json new file mode 100644 index 0000000000..cb413cd9ba --- /dev/null +++ b/resources/definitions/seckit_skgo.def.json @@ -0,0 +1,59 @@ +{ + "version": 2, + "name": "SecKit SK-Go", + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Ernest Lin", + "manufacturer": "SecKit 3DP Design", + "file_formats": "text/x-gcode", + "has_materials": true, + "has_machine_quality": false, + "preferred_quality_type": "normal", + "machine_extruder_trains": + { + "0": "seckit_skgo_extruder_0" + } + }, + + + "overrides": { + "machine_name": { "default_value": "SecKit SK-Go" }, + "machine_width": { + "default_value": 310 + }, + "machine_depth": { + "default_value": 310 + }, + "machine_height": { + "default_value": 350 + }, + "machine_center_is_zero": { + "default_value": false + }, + "machine_heated_bed": { + "default_value": true + }, + "machine_head_with_fans_polygon": + { + "default_value": [ + [ -10, 20 ], + [ -10, -20 ], + [ 10, 20 ], + [ 10, -20 ] + ] + }, + "gantry_height": { + "value": "50" + }, + "machine_gcode_flavor": { + "default_value": "RepRap (Marlin/Sprinter)" + }, + "machine_start_gcode": { + "default_value": "M569 S1 X Y ; enable StealthChop for Sensorless Homing\nG28 ; Home\nM569 S0 X Y ; disable StealthChop for normal print\nM900 K0.07 ; K factor of linear advance\nG1 Z15.0 F6000 ;Move the platform down 15mm\n;Prime the extruder\nG92 E0\nG1 F200 E3\nG92 E0\nG90 ; abs position" + }, + "machine_end_gcode": { + "default value": "M104 S0\nM140 S0\nG91 ; relative position\nG1 Z10 F450\n;Retract the filament\nG92 E1\nG1 E-1 F300\nG90 ; abs position\nG1 X10 Y280 F6000\nM84" + } + } +} diff --git a/resources/definitions/seckit_sktank.def.json b/resources/definitions/seckit_sktank.def.json new file mode 100644 index 0000000000..4b3795d619 --- /dev/null +++ b/resources/definitions/seckit_sktank.def.json @@ -0,0 +1,59 @@ +{ + "version": 2, + "name": "SecKit SK-Tank", + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Ernest Lin", + "manufacturer": "SecKit 3DP Design", + "file_formats": "text/x-gcode", + "has_materials": true, + "has_machine_quality": false, + "preferred_quality_type": "normal", + "machine_extruder_trains": + { + "0": "seckit_sktank_extruder_0" + } + }, + + + "overrides": { + "machine_name": { "default_value": "SecKit SK-Tank" }, + "machine_width": { + "default_value": 350 + }, + "machine_depth": { + "default_value": 350 + }, + "machine_height": { + "default_value": 400 + }, + "machine_center_is_zero": { + "default_value": false + }, + "machine_heated_bed": { + "default_value": true + }, + "machine_head_with_fans_polygon": + { + "default_value": [ + [ -10, 20 ], + [ -10, -20 ], + [ 10, 20 ], + [ 10, -20 ] + ] + }, + "gantry_height": { + "value": "50" + }, + "machine_gcode_flavor": { + "default_value": "RepRap (RepRap)" + }, + "machine_start_gcode": { + "default_value": "G32 ;auto bed tramming and find a correct Z datum\nG29 S1 ;load default mesh\nM572 D0 S0.08 ; Pressure advance\nG1 Z15.0 F6000 ;Move the platform down 15mm\n;Prime the extruder\nG92 E0\nG1 F200 E3\nG92 E0" + }, + "machine_end_gcode": { + "default value": "M104 S0\nM140 S0\n;Retract the filament\nG92 E1\nG1 E-1 F300\nG90\nG1 X2 Y300 F6000\n; move bed to the bottom to prevent bed falls\n;G91\n;G1 Z300\nM106 P0 S0\nM18" + } + } +} diff --git a/resources/definitions/ultimaker_s3.def.json b/resources/definitions/ultimaker_s3.def.json index 962bff3fa0..43f32a96dc 100644 --- a/resources/definitions/ultimaker_s3.def.json +++ b/resources/definitions/ultimaker_s3.def.json @@ -27,6 +27,7 @@ "first_start_actions": [ "DiscoverUM3Action" ], "supported_actions": [ "DiscoverUM3Action" ], "supports_usb_connection": false, + "supports_material_export": true, "weight": -1, "firmware_update_info": { "id": 213482, diff --git a/resources/definitions/ultimaker_s5.def.json b/resources/definitions/ultimaker_s5.def.json index 8a9880c31a..71de826953 100644 --- a/resources/definitions/ultimaker_s5.def.json +++ b/resources/definitions/ultimaker_s5.def.json @@ -28,6 +28,7 @@ "supported_actions": [ "DiscoverUM3Action" ], "supports_usb_connection": false, "supports_network_connection": true, + "supports_material_export": true, "weight": -2, "firmware_update_info": { "id": 9051, diff --git a/resources/extruders/flsun_sr_extruder_0.def.json b/resources/extruders/flsun_sr_extruder_0.def.json new file mode 100644 index 0000000000..31880b5130 --- /dev/null +++ b/resources/extruders/flsun_sr_extruder_0.def.json @@ -0,0 +1,20 @@ +{ + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "flsun_sr", + "position": "0" + }, + "overrides": { + "extruder_nr": { + "default_value": 0 + }, + "machine_nozzle_size": { + "default_value": 0.4 + }, + "material_diameter": { + "default_value": 1.75 + } + } +} diff --git a/resources/extruders/kingroon_base_extruder_0.def.json b/resources/extruders/kingroon_base_extruder_0.def.json new file mode 100644 index 0000000000..bcb7e93260 --- /dev/null +++ b/resources/extruders/kingroon_base_extruder_0.def.json @@ -0,0 +1,16 @@ +{ + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "kingroon_base", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + + } +} diff --git a/resources/extruders/mp_mini_delta_v2_extruder_0.def.json b/resources/extruders/mp_mini_delta_v2_extruder_0.def.json new file mode 100644 index 0000000000..022ace632f --- /dev/null +++ b/resources/extruders/mp_mini_delta_v2_extruder_0.def.json @@ -0,0 +1,15 @@ +{ + "version": 2, + "name": "Extruder 0", + "inherits": "fdmextruder", + "metadata": { + "machine": "mp_mini_delta_v2", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/extruders/seckit_skgo_extruder_0.def.json b/resources/extruders/seckit_skgo_extruder_0.def.json new file mode 100644 index 0000000000..2c79e00c6d --- /dev/null +++ b/resources/extruders/seckit_skgo_extruder_0.def.json @@ -0,0 +1,15 @@ +{ + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "seckit_skgo", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/extruders/seckit_sktank_extruder_0.def.json b/resources/extruders/seckit_sktank_extruder_0.def.json new file mode 100644 index 0000000000..15e8b9f5c6 --- /dev/null +++ b/resources/extruders/seckit_sktank_extruder_0.def.json @@ -0,0 +1,15 @@ +{ + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "seckit_sktank", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/meshes/BIQU_BX_PLATE.stl b/resources/meshes/BIQU_BX_PLATE.stl new file mode 100644 index 0000000000..9c1726f276 Binary files /dev/null and b/resources/meshes/BIQU_BX_PLATE.stl differ diff --git a/resources/meshes/flsun_sr.3mf b/resources/meshes/flsun_sr.3mf new file mode 100644 index 0000000000..7eba390a66 Binary files /dev/null and b/resources/meshes/flsun_sr.3mf differ diff --git a/resources/meshes/kingroon_kp3.stl b/resources/meshes/kingroon_kp3.stl new file mode 100644 index 0000000000..aa876e6710 Binary files /dev/null and b/resources/meshes/kingroon_kp3.stl differ diff --git a/resources/meshes/kingroon_kp3s.stl b/resources/meshes/kingroon_kp3s.stl new file mode 100644 index 0000000000..b42721bc1c Binary files /dev/null and b/resources/meshes/kingroon_kp3s.stl differ diff --git a/resources/qml/Actions.qml b/resources/qml/Actions.qml index 7a4a837c66..95c6778b87 100644 --- a/resources/qml/Actions.qml +++ b/resources/qml/Actions.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2018 Ultimaker B.V. +// Copyright (c) 2021 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. pragma Singleton @@ -122,7 +122,15 @@ Item Action { id: quitAction - text: catalog.i18nc("@action:inmenu menubar:file","&Quit") + + //On MacOS, don't translate the "Quit" word. + //Qt moves the "quit" entry to a different place, and if it got renamed can't find it again when it attempts to + //delete the item upon closing the application, causing a crash. + //In the new location, these items are translated automatically according to the system's language. + //For more information, see: + //- https://doc.qt.io/qt-5/macos-issues.html#menu-bar + //- https://doc.qt.io/qt-5/qmenubar.html#qmenubar-as-a-global-menu-bar + text: (Qt.platform.os == "osx") ? "&Quit" : catalog.i18nc("@action:inmenu menubar:file", "&Quit") iconName: "application-exit" shortcut: StandardKey.Quit } @@ -172,7 +180,14 @@ Item Action { id: preferencesAction - text: catalog.i18nc("@action:inmenu", "Configure Cura...") + //On MacOS, don't translate the "Configure" word. + //Qt moves the "configure" entry to a different place, and if it got renamed can't find it again when it + //attempts to delete the item upon closing the application, causing a crash. + //In the new location, these items are translated automatically according to the system's language. + //For more information, see: + //- https://doc.qt.io/qt-5/macos-issues.html#menu-bar + //- https://doc.qt.io/qt-5/qmenubar.html#qmenubar-as-a-global-menu-bar + text: (Qt.platform.os == "osx") ? "Configure Cura..." : catalog.i18nc("@action:inmenu", "Configure Cura...") iconName: "configure" } @@ -263,7 +278,15 @@ Item Action { id: aboutAction; - text: catalog.i18nc("@action:inmenu menubar:help", "About..."); + + //On MacOS, don't translate the "About" word. + //Qt moves the "about" entry to a different place, and if it got renamed can't find it again when it + //attempts to delete the item upon closing the application, causing a crash. + //In the new location, these items are translated automatically according to the system's language. + //For more information, see: + //- https://doc.qt.io/qt-5/macos-issues.html#menu-bar + //- https://doc.qt.io/qt-5/qmenubar.html#qmenubar-as-a-global-menu-bar + text: (Qt.platform.os == "osx") ? "About..." : catalog.i18nc("@action:inmenu menubar:help", "About..."); iconName: "help-about"; } diff --git a/resources/qml/ExtruderIcon.qml b/resources/qml/ExtruderIcon.qml index f33e345b68..ed392d13d7 100644 --- a/resources/qml/ExtruderIcon.qml +++ b/resources/qml/ExtruderIcon.qml @@ -18,7 +18,7 @@ Item property bool extruderEnabled: true property alias iconSize: mainIcon.sourceSize property string iconVariant: "medium" - + layer.enabled: true // Prevent weird opacity effects. Item { opacity: extruderEnabled ? 1 : UM.Theme.getColor("extruder_disabled").a diff --git a/resources/qml/MainWindow/ApplicationMenu.qml b/resources/qml/MainWindow/ApplicationMenu.qml index 95cea77248..62b3a71ee8 100644 --- a/resources/qml/MainWindow/ApplicationMenu.qml +++ b/resources/qml/MainWindow/ApplicationMenu.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2018 Ultimaker B.V. +// Copyright (c) 2021 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.7 @@ -48,7 +48,17 @@ Item ViewMenu { title: catalog.i18nc("@title:menu menubar:toplevel", "&View") } - SettingsMenu { title: catalog.i18nc("@title:menu menubar:toplevel", "&Settings") } + SettingsMenu + { + //On MacOS, don't translate the "Settings" word. + //Qt moves the "settings" entry to a different place, and if it got renamed can't find it again when it + //attempts to delete the item upon closing the application, causing a crash. + //In the new location, these items are translated automatically according to the system's language. + //For more information, see: + //- https://doc.qt.io/qt-5/macos-issues.html#menu-bar + //- https://doc.qt.io/qt-5/qmenubar.html#qmenubar-as-a-global-menu-bar + title: (Qt.platform.os == "osx") ? "&Settings" : catalog.i18nc("@title:menu menubar:toplevel", "&Settings") + } Menu { @@ -91,7 +101,15 @@ Item Menu { id: preferencesMenu - title: catalog.i18nc("@title:menu menubar:toplevel", "P&references") + + //On MacOS, don't translate the "Preferences" word. + //Qt moves the "preferences" entry to a different place, and if it got renamed can't find it again when it + //attempts to delete the item upon closing the application, causing a crash. + //In the new location, these items are translated automatically according to the system's language. + //For more information, see: + //- https://doc.qt.io/qt-5/macos-issues.html#menu-bar + //- https://doc.qt.io/qt-5/qmenubar.html#qmenubar-as-a-global-menu-bar + title: (Qt.platform.os == "osx") ? "&Preferences" : catalog.i18nc("@title:menu menubar:toplevel", "P&references") MenuItem { action: Cura.Actions.preferences } } diff --git a/resources/qml/Menus/ConfigurationMenu/ConfigurationListView.qml b/resources/qml/Menus/ConfigurationMenu/ConfigurationListView.qml index ab1d66f0e1..afedafa9c2 100644 --- a/resources/qml/Menus/ConfigurationMenu/ConfigurationListView.qml +++ b/resources/qml/Menus/ConfigurationMenu/ConfigurationListView.qml @@ -32,19 +32,20 @@ Item anchors.top: parent.top anchors.topMargin: UM.Theme.getSize("default_margin").height - UM.RecolorImage + Rectangle { id: icon - - anchors.left: parent.left - anchors.verticalCenter: label.verticalCenter - - source: UM.Theme.getIcon("Warning") color: UM.Theme.getColor("warning") width: UM.Theme.getSize("section_icon").width height: width + radius: width / 2 + UM.RecolorImage + { + anchors.fill:parent + source: UM.Theme.getIcon("Warning", "low") + color: UM.Theme.getColor("message_warning_icon") + } } - Label { id: label diff --git a/resources/qml/Preferences/Materials/MaterialsPage.qml b/resources/qml/Preferences/Materials/MaterialsPage.qml index 791d6685de..4de3ad918b 100644 --- a/resources/qml/Preferences/Materials/MaterialsPage.qml +++ b/resources/qml/Preferences/Materials/MaterialsPage.qml @@ -1,5 +1,5 @@ -// Copyright (c) 2018 Ultimaker B.V. -// Uranium is released under the terms of the LGPLv3 or higher. +// Copyright (c) 2021 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.7 import QtQuick.Controls 1.4 @@ -191,6 +191,21 @@ Item } enabled: base.hasCurrentItem } + + //Sync button. + Button + { + id: syncMaterialsButton + text: catalog.i18nc("@action:button Sending materials to printers", "Sync with Printers") + iconName: "sync-synchronizing" + onClicked: + { + forceActiveFocus(); + exportAllMaterialsDialog.folder = base.materialManagementModel.getPreferredExportAllPath(); + exportAllMaterialsDialog.open(); + } + visible: Cura.MachineManager.activeMachine.supportsMaterialExport + } } Item { @@ -368,6 +383,19 @@ Item } } + FileDialog + { + id: exportAllMaterialsDialog + title: catalog.i18nc("@title:window", "Export All Materials") + selectExisting: false + nameFilters: ["Material archives (*.umm)", "All files (*)"] + onAccepted: + { + base.materialManagementModel.exportAll(fileUrl); + CuraApplication.setDefaultPath("dialog_material_path", folder); + } + } + MessageDialog { id: messageDialog diff --git a/resources/qml/Preferences/SettingVisibilityPage.qml b/resources/qml/Preferences/SettingVisibilityPage.qml index 37149c0009..d2fd5c7e94 100644 --- a/resources/qml/Preferences/SettingVisibilityPage.qml +++ b/resources/qml/Preferences/SettingVisibilityPage.qml @@ -95,7 +95,7 @@ UM.PreferencesPage placeholderText: catalog.i18nc("@label:textbox", "Filter...") - onTextChanged: definitionsModel.filter = {"i18n_label": "*" + text} + onTextChanged: definitionsModel.filter = {"i18n_label|i18n_description": "*" + text} } NewControls.ComboBox diff --git a/resources/qml/Settings/SettingView.qml b/resources/qml/Settings/SettingView.qml index fc920a30e7..26d88db911 100644 --- a/resources/qml/Settings/SettingView.qml +++ b/resources/qml/Settings/SettingView.qml @@ -185,6 +185,8 @@ Item right: parent.right rightMargin: UM.Theme.getSize("wide_margin").width } + width: UM.Theme.getSize("medium_button_icon").width + height: UM.Theme.getSize("medium_button_icon").height style: ButtonStyle { diff --git a/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml b/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml index 0ea20f052e..edf6fe5974 100644 --- a/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml +++ b/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml @@ -54,7 +54,7 @@ Item { id: networkPrinterScrollView - maxItemCountAtOnce: 10 // show at max 10 items at once, otherwise you need to scroll. + maxItemCountAtOnce: 9 // show at max 9 items at once, otherwise you need to scroll. onRefreshButtonClicked: { diff --git a/resources/qml/Widgets/MenuItem.qml b/resources/qml/Widgets/MenuItem.qml index a930bfe901..f0824b4d98 100644 --- a/resources/qml/Widgets/MenuItem.qml +++ b/resources/qml/Widgets/MenuItem.qml @@ -24,7 +24,7 @@ MenuItem anchors.verticalCenter: parent.verticalCenter anchors.right: parent.right anchors.rightMargin: UM.Theme.getSize("default_margin").width - source: UM.Theme.getIcon("arrow_right") + source: UM.Theme.getIcon("ChevronSingleRight") color: UM.Theme.getColor("setting_control_text") } @@ -37,7 +37,7 @@ MenuItem anchors.verticalCenter: parent.verticalCenter anchors.left: parent.left anchors.leftMargin: UM.Theme.getSize("default_margin").width - source: UM.Theme.getIcon("check") + source: UM.Theme.getIcon("Check") color: UM.Theme.getColor("setting_control_text") } diff --git a/resources/qml/Widgets/ScrollableTextArea.qml b/resources/qml/Widgets/ScrollableTextArea.qml index 86dcad8112..6becf75cb1 100644 --- a/resources/qml/Widgets/ScrollableTextArea.qml +++ b/resources/qml/Widgets/ScrollableTextArea.qml @@ -34,6 +34,7 @@ ScrollView color: UM.Theme.getColor("text") textFormat: TextEdit.PlainText renderType: Text.NativeRendering + wrapMode: Text.Wrap selectByMouse: true } } diff --git a/resources/quality/kingroon/ABS/kingroon_0.2_ABS_super.inst.cfg b/resources/quality/kingroon/ABS/kingroon_0.2_ABS_super.inst.cfg new file mode 100644 index 0000000000..698303f4e7 --- /dev/null +++ b/resources/quality/kingroon/ABS/kingroon_0.2_ABS_super.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Super Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = super +material = generic_abs +variant = 0.2mm Nozzle + +[values] +wall_thickness = =line_width*8 diff --git a/resources/quality/kingroon/ABS/kingroon_0.2_ABS_ultra.inst.cfg b/resources/quality/kingroon/ABS/kingroon_0.2_ABS_ultra.inst.cfg new file mode 100644 index 0000000000..0c9f850659 --- /dev/null +++ b/resources/quality/kingroon/ABS/kingroon_0.2_ABS_ultra.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Ultra Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = ultra +material = generic_abs +variant = 0.2mm Nozzle + +[values] +wall_thickness = =line_width*8 diff --git a/resources/quality/kingroon/ABS/kingroon_0.3_ABS_adaptive.inst.cfg b/resources/quality/kingroon/ABS/kingroon_0.3_ABS_adaptive.inst.cfg new file mode 100644 index 0000000000..bbc2f0f8eb --- /dev/null +++ b/resources/quality/kingroon/ABS/kingroon_0.3_ABS_adaptive.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Dynamic Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = adaptive +material = generic_abs +variant = 0.3mm Nozzle + +[values] +wall_thickness = =line_width*4 diff --git a/resources/quality/kingroon/ABS/kingroon_0.3_ABS_low.inst.cfg b/resources/quality/kingroon/ABS/kingroon_0.3_ABS_low.inst.cfg new file mode 100644 index 0000000000..7ed5907ea7 --- /dev/null +++ b/resources/quality/kingroon/ABS/kingroon_0.3_ABS_low.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Low Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = low +material = generic_abs +variant = 0.3mm Nozzle + +[values] +wall_thickness = =line_width*4 diff --git a/resources/quality/kingroon/ABS/kingroon_0.3_ABS_standard.inst.cfg b/resources/quality/kingroon/ABS/kingroon_0.3_ABS_standard.inst.cfg new file mode 100644 index 0000000000..485c45d486 --- /dev/null +++ b/resources/quality/kingroon/ABS/kingroon_0.3_ABS_standard.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Standard Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = standard +material = generic_abs +variant = 0.3mm Nozzle + +[values] +wall_thickness = =line_width*4 diff --git a/resources/quality/kingroon/ABS/kingroon_0.3_ABS_super.inst.cfg b/resources/quality/kingroon/ABS/kingroon_0.3_ABS_super.inst.cfg new file mode 100644 index 0000000000..5d42c6cdc4 --- /dev/null +++ b/resources/quality/kingroon/ABS/kingroon_0.3_ABS_super.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Super Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = super +material = generic_abs +variant = 0.3mm Nozzle + +[values] +wall_thickness = =line_width*4 diff --git a/resources/quality/kingroon/ABS/kingroon_0.4_ABS_adaptive.inst.cfg b/resources/quality/kingroon/ABS/kingroon_0.4_ABS_adaptive.inst.cfg new file mode 100644 index 0000000000..1f13b76cbd --- /dev/null +++ b/resources/quality/kingroon/ABS/kingroon_0.4_ABS_adaptive.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Dynamic Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = adaptive +material = generic_abs +variant = 0.4mm Nozzle + +[values] +wall_thickness = =line_width*4 diff --git a/resources/quality/kingroon/ABS/kingroon_0.4_ABS_low.inst.cfg b/resources/quality/kingroon/ABS/kingroon_0.4_ABS_low.inst.cfg new file mode 100644 index 0000000000..8d9ec713f5 --- /dev/null +++ b/resources/quality/kingroon/ABS/kingroon_0.4_ABS_low.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Low Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = low +material = generic_abs +variant = 0.4mm Nozzle + +[values] +wall_thickness = =line_width*4 diff --git a/resources/quality/kingroon/ABS/kingroon_0.4_ABS_standard.inst.cfg b/resources/quality/kingroon/ABS/kingroon_0.4_ABS_standard.inst.cfg new file mode 100644 index 0000000000..38738df40f --- /dev/null +++ b/resources/quality/kingroon/ABS/kingroon_0.4_ABS_standard.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Standard Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = standard +material = generic_abs +variant = 0.4mm Nozzle + +[values] +wall_thickness = =line_width*4 diff --git a/resources/quality/kingroon/ABS/kingroon_0.4_ABS_super.inst.cfg b/resources/quality/kingroon/ABS/kingroon_0.4_ABS_super.inst.cfg new file mode 100644 index 0000000000..5464496205 --- /dev/null +++ b/resources/quality/kingroon/ABS/kingroon_0.4_ABS_super.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Super Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = super +material = generic_abs +variant = 0.4mm Nozzle + +[values] +wall_thickness = =line_width*4 diff --git a/resources/quality/kingroon/ABS/kingroon_0.5_ABS_adaptive.inst.cfg b/resources/quality/kingroon/ABS/kingroon_0.5_ABS_adaptive.inst.cfg new file mode 100644 index 0000000000..c017c78d20 --- /dev/null +++ b/resources/quality/kingroon/ABS/kingroon_0.5_ABS_adaptive.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Dynamic Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = adaptive +material = generic_abs +variant = 0.5mm Nozzle + +[values] +wall_thickness = =line_width*4 diff --git a/resources/quality/kingroon/ABS/kingroon_0.5_ABS_low.inst.cfg b/resources/quality/kingroon/ABS/kingroon_0.5_ABS_low.inst.cfg new file mode 100644 index 0000000000..12ad8e2996 --- /dev/null +++ b/resources/quality/kingroon/ABS/kingroon_0.5_ABS_low.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Low Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = low +material = generic_abs +variant = 0.5mm Nozzle + +[values] +wall_thickness = =line_width*4 diff --git a/resources/quality/kingroon/ABS/kingroon_0.5_ABS_standard.inst.cfg b/resources/quality/kingroon/ABS/kingroon_0.5_ABS_standard.inst.cfg new file mode 100644 index 0000000000..2c24630c6c --- /dev/null +++ b/resources/quality/kingroon/ABS/kingroon_0.5_ABS_standard.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Standard Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = standard +material = generic_abs +variant = 0.5mm Nozzle + +[values] +wall_thickness = =line_width*4 diff --git a/resources/quality/kingroon/ABS/kingroon_0.5_ABS_super.inst.cfg b/resources/quality/kingroon/ABS/kingroon_0.5_ABS_super.inst.cfg new file mode 100644 index 0000000000..d76f8ee5a4 --- /dev/null +++ b/resources/quality/kingroon/ABS/kingroon_0.5_ABS_super.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Super Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = super +material = generic_abs +variant = 0.5mm Nozzle + +[values] +wall_thickness = =line_width*4 diff --git a/resources/quality/kingroon/ABS/kingroon_0.6_ABS_standard.inst.cfg b/resources/quality/kingroon/ABS/kingroon_0.6_ABS_standard.inst.cfg new file mode 100644 index 0000000000..07c8560aa9 --- /dev/null +++ b/resources/quality/kingroon/ABS/kingroon_0.6_ABS_standard.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Standard Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = standard +material = generic_abs +variant = 0.6mm Nozzle + +[values] +wall_thickness = =line_width*3 diff --git a/resources/quality/kingroon/ABS/kingroon_0.8_ABS_draft.inst.cfg b/resources/quality/kingroon/ABS/kingroon_0.8_ABS_draft.inst.cfg new file mode 100644 index 0000000000..6f8940bbed --- /dev/null +++ b/resources/quality/kingroon/ABS/kingroon_0.8_ABS_draft.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Draft Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = draft +material = generic_abs +variant = 0.8mm Nozzle + +[values] +wall_thickness = =line_width*3 diff --git a/resources/quality/kingroon/ABS/kingroon_1.0_ABS_draft.inst.cfg b/resources/quality/kingroon/ABS/kingroon_1.0_ABS_draft.inst.cfg new file mode 100644 index 0000000000..095e6de90f --- /dev/null +++ b/resources/quality/kingroon/ABS/kingroon_1.0_ABS_draft.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Draft Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = draft +material = generic_abs +variant = 1.0mm Nozzle + +[values] +wall_thickness = =line_width*3 diff --git a/resources/quality/kingroon/PETG/kingroon_0.2_PETG_super.inst.cfg b/resources/quality/kingroon/PETG/kingroon_0.2_PETG_super.inst.cfg new file mode 100644 index 0000000000..53fd8840c6 --- /dev/null +++ b/resources/quality/kingroon/PETG/kingroon_0.2_PETG_super.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Super Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = super +material = generic_petg +variant = 0.2mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*8 diff --git a/resources/quality/kingroon/PETG/kingroon_0.2_PETG_ultra.inst.cfg b/resources/quality/kingroon/PETG/kingroon_0.2_PETG_ultra.inst.cfg new file mode 100644 index 0000000000..d1473871b0 --- /dev/null +++ b/resources/quality/kingroon/PETG/kingroon_0.2_PETG_ultra.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Ultra Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = ultra +material = generic_petg +variant = 0.2mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*8 diff --git a/resources/quality/kingroon/PETG/kingroon_0.3_PETG_adaptive.inst.cfg b/resources/quality/kingroon/PETG/kingroon_0.3_PETG_adaptive.inst.cfg new file mode 100644 index 0000000000..adf5e75452 --- /dev/null +++ b/resources/quality/kingroon/PETG/kingroon_0.3_PETG_adaptive.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Dynamic Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = adaptive +material = generic_petg +variant = 0.3mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 diff --git a/resources/quality/kingroon/PETG/kingroon_0.3_PETG_low.inst.cfg b/resources/quality/kingroon/PETG/kingroon_0.3_PETG_low.inst.cfg new file mode 100644 index 0000000000..b1273367ec --- /dev/null +++ b/resources/quality/kingroon/PETG/kingroon_0.3_PETG_low.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Low Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = low +material = generic_petg +variant = 0.3mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 diff --git a/resources/quality/kingroon/PETG/kingroon_0.3_PETG_standard.inst.cfg b/resources/quality/kingroon/PETG/kingroon_0.3_PETG_standard.inst.cfg new file mode 100644 index 0000000000..af071ae0eb --- /dev/null +++ b/resources/quality/kingroon/PETG/kingroon_0.3_PETG_standard.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Standard Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = standard +material = generic_petg +variant = 0.3mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 diff --git a/resources/quality/kingroon/PETG/kingroon_0.3_PETG_super.inst.cfg b/resources/quality/kingroon/PETG/kingroon_0.3_PETG_super.inst.cfg new file mode 100644 index 0000000000..8f69a4d8a2 --- /dev/null +++ b/resources/quality/kingroon/PETG/kingroon_0.3_PETG_super.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Super Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = super +material = generic_petg +variant = 0.3mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 diff --git a/resources/quality/kingroon/PETG/kingroon_0.4_PETG_adaptive.inst.cfg b/resources/quality/kingroon/PETG/kingroon_0.4_PETG_adaptive.inst.cfg new file mode 100644 index 0000000000..75a6b4abc2 --- /dev/null +++ b/resources/quality/kingroon/PETG/kingroon_0.4_PETG_adaptive.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Dynamic Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = adaptive +material = generic_petg +variant = 0.4mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 diff --git a/resources/quality/kingroon/PETG/kingroon_0.4_PETG_low.inst.cfg b/resources/quality/kingroon/PETG/kingroon_0.4_PETG_low.inst.cfg new file mode 100644 index 0000000000..935384311e --- /dev/null +++ b/resources/quality/kingroon/PETG/kingroon_0.4_PETG_low.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Low Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = low +material = generic_petg +variant = 0.4mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 diff --git a/resources/quality/kingroon/PETG/kingroon_0.4_PETG_standard.inst.cfg b/resources/quality/kingroon/PETG/kingroon_0.4_PETG_standard.inst.cfg new file mode 100644 index 0000000000..197744b392 --- /dev/null +++ b/resources/quality/kingroon/PETG/kingroon_0.4_PETG_standard.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Standard Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = standard +material = generic_petg +variant = 0.4mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 diff --git a/resources/quality/kingroon/PETG/kingroon_0.4_PETG_super.inst.cfg b/resources/quality/kingroon/PETG/kingroon_0.4_PETG_super.inst.cfg new file mode 100644 index 0000000000..6f5dd5f6b4 --- /dev/null +++ b/resources/quality/kingroon/PETG/kingroon_0.4_PETG_super.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Super Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = super +material = generic_petg +variant = 0.4mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 diff --git a/resources/quality/kingroon/PETG/kingroon_0.5_PETG_adaptive.inst.cfg b/resources/quality/kingroon/PETG/kingroon_0.5_PETG_adaptive.inst.cfg new file mode 100644 index 0000000000..55480fe4fc --- /dev/null +++ b/resources/quality/kingroon/PETG/kingroon_0.5_PETG_adaptive.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Dynamic Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = adaptive +material = generic_petg +variant = 0.5mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 diff --git a/resources/quality/kingroon/PETG/kingroon_0.5_PETG_low.inst.cfg b/resources/quality/kingroon/PETG/kingroon_0.5_PETG_low.inst.cfg new file mode 100644 index 0000000000..604c1df5ba --- /dev/null +++ b/resources/quality/kingroon/PETG/kingroon_0.5_PETG_low.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Low Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = low +material = generic_petg +variant = 0.5mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 diff --git a/resources/quality/kingroon/PETG/kingroon_0.5_PETG_standard.inst.cfg b/resources/quality/kingroon/PETG/kingroon_0.5_PETG_standard.inst.cfg new file mode 100644 index 0000000000..52f668fa68 --- /dev/null +++ b/resources/quality/kingroon/PETG/kingroon_0.5_PETG_standard.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Standard Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = standard +material = generic_petg +variant = 0.5mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 diff --git a/resources/quality/kingroon/PETG/kingroon_0.5_PETG_super.inst.cfg b/resources/quality/kingroon/PETG/kingroon_0.5_PETG_super.inst.cfg new file mode 100644 index 0000000000..aa8a2da3b8 --- /dev/null +++ b/resources/quality/kingroon/PETG/kingroon_0.5_PETG_super.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Super Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = super +material = generic_petg +variant = 0.5mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 diff --git a/resources/quality/kingroon/PETG/kingroon_0.6_PETG_standard.inst.cfg b/resources/quality/kingroon/PETG/kingroon_0.6_PETG_standard.inst.cfg new file mode 100644 index 0000000000..f90f574798 --- /dev/null +++ b/resources/quality/kingroon/PETG/kingroon_0.6_PETG_standard.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Standard Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = standard +material = generic_petg +variant = 0.6mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*3 diff --git a/resources/quality/kingroon/PETG/kingroon_0.8_PETG_draft.inst.cfg b/resources/quality/kingroon/PETG/kingroon_0.8_PETG_draft.inst.cfg new file mode 100644 index 0000000000..5b4258fd72 --- /dev/null +++ b/resources/quality/kingroon/PETG/kingroon_0.8_PETG_draft.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Draft Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = draft +material = generic_petg +variant = 0.8mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*3 diff --git a/resources/quality/kingroon/PETG/kingroon_1.0_PETG_draft.inst.cfg b/resources/quality/kingroon/PETG/kingroon_1.0_PETG_draft.inst.cfg new file mode 100644 index 0000000000..a2dfab7f1c --- /dev/null +++ b/resources/quality/kingroon/PETG/kingroon_1.0_PETG_draft.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Draft Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = draft +material = generic_petg +variant = 1.0mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*3 diff --git a/resources/quality/kingroon/PLA/kingroon_0.2_PLA_super.inst.cfg b/resources/quality/kingroon/PLA/kingroon_0.2_PLA_super.inst.cfg new file mode 100644 index 0000000000..96097481be --- /dev/null +++ b/resources/quality/kingroon/PLA/kingroon_0.2_PLA_super.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Super Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = super +material = generic_pla +variant = 0.2mm Nozzle + +[values] diff --git a/resources/quality/kingroon/PLA/kingroon_0.2_PLA_ultra.inst.cfg b/resources/quality/kingroon/PLA/kingroon_0.2_PLA_ultra.inst.cfg new file mode 100644 index 0000000000..8b1e4e680c --- /dev/null +++ b/resources/quality/kingroon/PLA/kingroon_0.2_PLA_ultra.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Ultra Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = ultra +material = generic_pla +variant = 0.2mm Nozzle + +[values] diff --git a/resources/quality/kingroon/PLA/kingroon_0.3_PLA_adaptive.inst.cfg b/resources/quality/kingroon/PLA/kingroon_0.3_PLA_adaptive.inst.cfg new file mode 100644 index 0000000000..ba03561f97 --- /dev/null +++ b/resources/quality/kingroon/PLA/kingroon_0.3_PLA_adaptive.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Dynamic Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = adaptive +material = generic_pla +variant = 0.3mm Nozzle + +[values] diff --git a/resources/quality/kingroon/PLA/kingroon_0.3_PLA_low.inst.cfg b/resources/quality/kingroon/PLA/kingroon_0.3_PLA_low.inst.cfg new file mode 100644 index 0000000000..570ac8c627 --- /dev/null +++ b/resources/quality/kingroon/PLA/kingroon_0.3_PLA_low.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Low Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = low +material = generic_pla +variant = 0.3mm Nozzle + +[values] diff --git a/resources/quality/kingroon/PLA/kingroon_0.3_PLA_standard.inst.cfg b/resources/quality/kingroon/PLA/kingroon_0.3_PLA_standard.inst.cfg new file mode 100644 index 0000000000..d0fe46bec6 --- /dev/null +++ b/resources/quality/kingroon/PLA/kingroon_0.3_PLA_standard.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Standard Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = standard +material = generic_pla +variant = 0.3mm Nozzle + +[values] diff --git a/resources/quality/kingroon/PLA/kingroon_0.3_PLA_super.inst.cfg b/resources/quality/kingroon/PLA/kingroon_0.3_PLA_super.inst.cfg new file mode 100644 index 0000000000..5d0fd38e44 --- /dev/null +++ b/resources/quality/kingroon/PLA/kingroon_0.3_PLA_super.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Super Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = super +material = generic_pla +variant = 0.3mm Nozzle + +[values] diff --git a/resources/quality/kingroon/PLA/kingroon_0.4_PLA_adaptive.inst.cfg b/resources/quality/kingroon/PLA/kingroon_0.4_PLA_adaptive.inst.cfg new file mode 100644 index 0000000000..949ee730f4 --- /dev/null +++ b/resources/quality/kingroon/PLA/kingroon_0.4_PLA_adaptive.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Dynamic Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = adaptive +material = generic_pla +variant = 0.4mm Nozzle + +[values] diff --git a/resources/quality/kingroon/PLA/kingroon_0.4_PLA_low.inst.cfg b/resources/quality/kingroon/PLA/kingroon_0.4_PLA_low.inst.cfg new file mode 100644 index 0000000000..637968b6eb --- /dev/null +++ b/resources/quality/kingroon/PLA/kingroon_0.4_PLA_low.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Low Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = low +material = generic_pla +variant = 0.4mm Nozzle + +[values] diff --git a/resources/quality/kingroon/PLA/kingroon_0.4_PLA_standard.inst.cfg b/resources/quality/kingroon/PLA/kingroon_0.4_PLA_standard.inst.cfg new file mode 100644 index 0000000000..ae7950a060 --- /dev/null +++ b/resources/quality/kingroon/PLA/kingroon_0.4_PLA_standard.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Standard Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = standard +material = generic_pla +variant = 0.4mm Nozzle + +[values] diff --git a/resources/quality/kingroon/PLA/kingroon_0.4_PLA_super.inst.cfg b/resources/quality/kingroon/PLA/kingroon_0.4_PLA_super.inst.cfg new file mode 100644 index 0000000000..aa47467c13 --- /dev/null +++ b/resources/quality/kingroon/PLA/kingroon_0.4_PLA_super.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Super Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = super +material = generic_pla +variant = 0.4mm Nozzle + +[values] diff --git a/resources/quality/kingroon/PLA/kingroon_0.5_PLA_adaptive.inst.cfg b/resources/quality/kingroon/PLA/kingroon_0.5_PLA_adaptive.inst.cfg new file mode 100644 index 0000000000..f3a069499f --- /dev/null +++ b/resources/quality/kingroon/PLA/kingroon_0.5_PLA_adaptive.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Dynamic Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = adaptive +material = generic_pla +variant = 0.5mm Nozzle + +[values] diff --git a/resources/quality/kingroon/PLA/kingroon_0.5_PLA_low.inst.cfg b/resources/quality/kingroon/PLA/kingroon_0.5_PLA_low.inst.cfg new file mode 100644 index 0000000000..0b04db2735 --- /dev/null +++ b/resources/quality/kingroon/PLA/kingroon_0.5_PLA_low.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Low Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = low +material = generic_pla +variant = 0.5mm Nozzle + +[values] diff --git a/resources/quality/kingroon/PLA/kingroon_0.5_PLA_standard.inst.cfg b/resources/quality/kingroon/PLA/kingroon_0.5_PLA_standard.inst.cfg new file mode 100644 index 0000000000..e5255a5816 --- /dev/null +++ b/resources/quality/kingroon/PLA/kingroon_0.5_PLA_standard.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Standard Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = standard +material = generic_pla +variant = 0.5mm Nozzle + +[values] diff --git a/resources/quality/kingroon/PLA/kingroon_0.5_PLA_super.inst.cfg b/resources/quality/kingroon/PLA/kingroon_0.5_PLA_super.inst.cfg new file mode 100644 index 0000000000..cc3edb7042 --- /dev/null +++ b/resources/quality/kingroon/PLA/kingroon_0.5_PLA_super.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Super Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = super +material = generic_pla +variant = 0.5mm Nozzle + +[values] diff --git a/resources/quality/kingroon/PLA/kingroon_0.6_PLA_draft.inst.cfg b/resources/quality/kingroon/PLA/kingroon_0.6_PLA_draft.inst.cfg new file mode 100644 index 0000000000..4e908e5d9f --- /dev/null +++ b/resources/quality/kingroon/PLA/kingroon_0.6_PLA_draft.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Draft Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = draft +material = generic_pla +variant = 0.6mm Nozzle + +[values] diff --git a/resources/quality/kingroon/PLA/kingroon_0.6_PLA_low.inst.cfg b/resources/quality/kingroon/PLA/kingroon_0.6_PLA_low.inst.cfg new file mode 100644 index 0000000000..e0a2337eae --- /dev/null +++ b/resources/quality/kingroon/PLA/kingroon_0.6_PLA_low.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Low Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = low +material = generic_pla +variant = 0.6mm Nozzle + +[values] diff --git a/resources/quality/kingroon/PLA/kingroon_0.6_PLA_standard.inst.cfg b/resources/quality/kingroon/PLA/kingroon_0.6_PLA_standard.inst.cfg new file mode 100644 index 0000000000..110feef3b6 --- /dev/null +++ b/resources/quality/kingroon/PLA/kingroon_0.6_PLA_standard.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Standard Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = standard +material = generic_pla +variant = 0.6mm Nozzle + +[values] diff --git a/resources/quality/kingroon/PLA/kingroon_0.8_PLA_draft.inst.cfg b/resources/quality/kingroon/PLA/kingroon_0.8_PLA_draft.inst.cfg new file mode 100644 index 0000000000..3035da9861 --- /dev/null +++ b/resources/quality/kingroon/PLA/kingroon_0.8_PLA_draft.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Draft Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = draft +material = generic_pla +variant = 0.8mm Nozzle + +[values] diff --git a/resources/quality/kingroon/PLA/kingroon_1.0_PLA_draft.inst.cfg b/resources/quality/kingroon/PLA/kingroon_1.0_PLA_draft.inst.cfg new file mode 100644 index 0000000000..d63752a00f --- /dev/null +++ b/resources/quality/kingroon/PLA/kingroon_1.0_PLA_draft.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Draft Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = draft +material = generic_pla +variant = 1.0mm Nozzle + +[values] diff --git a/resources/quality/kingroon/TPU/kingroon_0.3_TPU_adaptive.inst.cfg b/resources/quality/kingroon/TPU/kingroon_0.3_TPU_adaptive.inst.cfg new file mode 100644 index 0000000000..e4433ce3d9 --- /dev/null +++ b/resources/quality/kingroon/TPU/kingroon_0.3_TPU_adaptive.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Dynamic Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = adaptive +material = generic_tpu +variant = 0.3mm Nozzle + +[values] diff --git a/resources/quality/kingroon/TPU/kingroon_0.3_TPU_standard.inst.cfg b/resources/quality/kingroon/TPU/kingroon_0.3_TPU_standard.inst.cfg new file mode 100644 index 0000000000..c8a23122f7 --- /dev/null +++ b/resources/quality/kingroon/TPU/kingroon_0.3_TPU_standard.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Standard Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = standard +material = generic_tpu +variant = 0.3mm Nozzle + +[values] diff --git a/resources/quality/kingroon/TPU/kingroon_0.3_TPU_super.inst.cfg b/resources/quality/kingroon/TPU/kingroon_0.3_TPU_super.inst.cfg new file mode 100644 index 0000000000..50d3c97c8e --- /dev/null +++ b/resources/quality/kingroon/TPU/kingroon_0.3_TPU_super.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Super Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = super +material = generic_tpu +variant = 0.3mm Nozzle + +[values] diff --git a/resources/quality/kingroon/TPU/kingroon_0.4_TPU_adaptive.inst.cfg b/resources/quality/kingroon/TPU/kingroon_0.4_TPU_adaptive.inst.cfg new file mode 100644 index 0000000000..632ccc990b --- /dev/null +++ b/resources/quality/kingroon/TPU/kingroon_0.4_TPU_adaptive.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Dynamic Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = adaptive +material = generic_tpu +variant = 0.4mm Nozzle + +[values] diff --git a/resources/quality/kingroon/TPU/kingroon_0.4_TPU_standard.inst.cfg b/resources/quality/kingroon/TPU/kingroon_0.4_TPU_standard.inst.cfg new file mode 100644 index 0000000000..3b9ee5f56f --- /dev/null +++ b/resources/quality/kingroon/TPU/kingroon_0.4_TPU_standard.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Standard Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = standard +material = generic_tpu +variant = 0.4mm Nozzle + +[values] diff --git a/resources/quality/kingroon/TPU/kingroon_0.4_TPU_super.inst.cfg b/resources/quality/kingroon/TPU/kingroon_0.4_TPU_super.inst.cfg new file mode 100644 index 0000000000..67dda85f40 --- /dev/null +++ b/resources/quality/kingroon/TPU/kingroon_0.4_TPU_super.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Super Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = super +material = generic_tpu +variant = 0.4mm Nozzle + +[values] diff --git a/resources/quality/kingroon/TPU/kingroon_0.5_TPU_adaptive.inst.cfg b/resources/quality/kingroon/TPU/kingroon_0.5_TPU_adaptive.inst.cfg new file mode 100644 index 0000000000..a35ac4c966 --- /dev/null +++ b/resources/quality/kingroon/TPU/kingroon_0.5_TPU_adaptive.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Dynamic Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = adaptive +material = generic_tpu +variant = 0.5mm Nozzle + +[values] diff --git a/resources/quality/kingroon/TPU/kingroon_0.5_TPU_standard.inst.cfg b/resources/quality/kingroon/TPU/kingroon_0.5_TPU_standard.inst.cfg new file mode 100644 index 0000000000..ee1c72dc9d --- /dev/null +++ b/resources/quality/kingroon/TPU/kingroon_0.5_TPU_standard.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Standard Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = standard +material = generic_tpu +variant = 0.5mm Nozzle + +[values] diff --git a/resources/quality/kingroon/TPU/kingroon_0.5_TPU_super.inst.cfg b/resources/quality/kingroon/TPU/kingroon_0.5_TPU_super.inst.cfg new file mode 100644 index 0000000000..de017e2af5 --- /dev/null +++ b/resources/quality/kingroon/TPU/kingroon_0.5_TPU_super.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Super Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = super +material = generic_tpu +variant = 0.5mm Nozzle + +[values] diff --git a/resources/quality/kingroon/TPU/kingroon_0.6_TPU_standard.inst.cfg b/resources/quality/kingroon/TPU/kingroon_0.6_TPU_standard.inst.cfg new file mode 100644 index 0000000000..82bd9a9738 --- /dev/null +++ b/resources/quality/kingroon/TPU/kingroon_0.6_TPU_standard.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Standard Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = standard +material = generic_tpu +variant = 0.6mm Nozzle + +[values] diff --git a/resources/quality/kingroon/TPU/kingroon_0.8_TPU_draft.inst.cfg b/resources/quality/kingroon/TPU/kingroon_0.8_TPU_draft.inst.cfg new file mode 100644 index 0000000000..3f116a8dc1 --- /dev/null +++ b/resources/quality/kingroon/TPU/kingroon_0.8_TPU_draft.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Draft Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = draft +material = generic_tpu +variant = 0.8mm Nozzle + +[values] diff --git a/resources/quality/kingroon/TPU/kingroon_1.0_TPU_draft.inst.cfg b/resources/quality/kingroon/TPU/kingroon_1.0_TPU_draft.inst.cfg new file mode 100644 index 0000000000..cc3447548f --- /dev/null +++ b/resources/quality/kingroon/TPU/kingroon_1.0_TPU_draft.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Draft Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = draft +material = generic_tpu +variant = 1.0mm Nozzle + +[values] diff --git a/resources/quality/kingroon/kingroon_global_adaptive.inst.cfg b/resources/quality/kingroon/kingroon_global_adaptive.inst.cfg new file mode 100644 index 0000000000..cc18db11c7 --- /dev/null +++ b/resources/quality/kingroon/kingroon_global_adaptive.inst.cfg @@ -0,0 +1,19 @@ +[general] +version = 4 +name = Dynamic Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = adaptive +weight = -2 +global_quality = True + +[values] +layer_height = 0.16 +layer_height_0 = 0.20 +top_bottom_thickness = =layer_height_0+layer_height*4 +wall_thickness = =line_width*3 +support_interface_height = =layer_height*6 +adaptive_layer_height_enabled = true diff --git a/resources/quality/kingroon/kingroon_global_draft.inst.cfg b/resources/quality/kingroon/kingroon_global_draft.inst.cfg new file mode 100644 index 0000000000..fd892506a1 --- /dev/null +++ b/resources/quality/kingroon/kingroon_global_draft.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = Draft Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = draft +weight = -5 +global_quality = True + +[values] +layer_height = 0.32 +layer_height_0 = 0.32 +top_bottom_thickness = =layer_height_0+layer_height*3 +wall_thickness = =line_width*2 +support_interface_height = =layer_height*4 diff --git a/resources/quality/kingroon/kingroon_global_low.inst.cfg b/resources/quality/kingroon/kingroon_global_low.inst.cfg new file mode 100644 index 0000000000..e939b5739d --- /dev/null +++ b/resources/quality/kingroon/kingroon_global_low.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = Low Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = low +weight = -4 +global_quality = True + +[values] +layer_height = 0.28 +layer_height_0 = 0.28 +top_bottom_thickness = =layer_height_0+layer_height*3 +wall_thickness = =line_width*2 +support_interface_height = =layer_height*4 diff --git a/resources/quality/kingroon/kingroon_global_standard.inst.cfg b/resources/quality/kingroon/kingroon_global_standard.inst.cfg new file mode 100644 index 0000000000..62f6939255 --- /dev/null +++ b/resources/quality/kingroon/kingroon_global_standard.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = Standard Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = standard +weight = -3 +global_quality = True + +[values] +layer_height = 0.2 +layer_height_0 = 0.2 +top_bottom_thickness = =layer_height_0+layer_height*3 +wall_thickness = =line_width*3 +support_interface_height = =layer_height*5 diff --git a/resources/quality/kingroon/kingroon_global_super.inst.cfg b/resources/quality/kingroon/kingroon_global_super.inst.cfg new file mode 100644 index 0000000000..cbd461cc9f --- /dev/null +++ b/resources/quality/kingroon/kingroon_global_super.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = Super Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = super +weight = -1 +global_quality = True + +[values] +layer_height = 0.12 +layer_height_0 = 0.12 +top_bottom_thickness = =layer_height_0+layer_height*6 +wall_thickness = =line_width*3 +support_interface_height = =layer_height*8 diff --git a/resources/quality/kingroon/kingroon_global_ultra.inst.cfg b/resources/quality/kingroon/kingroon_global_ultra.inst.cfg new file mode 100644 index 0000000000..1ef8f33e0e --- /dev/null +++ b/resources/quality/kingroon/kingroon_global_ultra.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = Ultra Quality +definition = kingroon_base + +[metadata] +setting_version = 17 +type = quality +quality_type = ultra +weight = 0 +global_quality = True + +[values] +layer_height = 0.08 +layer_height_0 = 0.12 +top_bottom_thickness = =layer_height_0+layer_height*10 +wall_thickness = =line_width*3 +support_interface_height = =layer_height*12 diff --git a/resources/themes/cura-dark/theme.json b/resources/themes/cura-dark/theme.json index 0d6fa2f260..457d2092c1 100644 --- a/resources/themes/cura-dark/theme.json +++ b/resources/themes/cura-dark/theme.json @@ -16,7 +16,7 @@ "primary_text": [255, 255, 255, 204], "secondary": [95, 95, 95, 255], - "secondary_button": [0, 0, 0, 0], + "secondary_button": [39, 44, 48, 255], "secondary_button_hover": [85, 85, 87, 255], "secondary_button_text": [255, 255, 255, 255], diff --git a/resources/themes/cura-light/icons/low/Cancel.svg b/resources/themes/cura-light/icons/low/Cancel.svg new file mode 100644 index 0000000000..6fc1159747 --- /dev/null +++ b/resources/themes/cura-light/icons/low/Cancel.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/icons/low/Check.svg b/resources/themes/cura-light/icons/low/Check.svg new file mode 100644 index 0000000000..a20a9b1b70 --- /dev/null +++ b/resources/themes/cura-light/icons/low/Check.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/icons/low/CircleSolid.svg b/resources/themes/cura-light/icons/low/CircleSolid.svg new file mode 100644 index 0000000000..18f38a2341 --- /dev/null +++ b/resources/themes/cura-light/icons/low/CircleSolid.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/resources/themes/cura-light/icons/low/Warning.svg b/resources/themes/cura-light/icons/low/Warning.svg new file mode 100644 index 0000000000..0def040628 --- /dev/null +++ b/resources/themes/cura-light/icons/low/Warning.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/theme.json b/resources/themes/cura-light/theme.json index 93a40d645d..6d99b7ae03 100644 --- a/resources/themes/cura-light/theme.json +++ b/resources/themes/cura-light/theme.json @@ -193,7 +193,7 @@ "primary_button_hover": [16, 70, 156, 255], "primary_button_text": [255, 255, 255, 255], - "secondary_button": [255, 255, 255, 0], + "secondary_button": [255, 255, 255, 255], "secondary_button_shadow": [216, 216, 216, 255], "secondary_button_hover": [232, 240, 253, 255], "secondary_button_text": [25, 110, 240, 255], @@ -239,8 +239,9 @@ "text_scene": [102, 102, 102, 255], "text_scene_hover": [123, 123, 113, 255], - "error": [255, 140, 0, 255], - "warning": [245, 166, 35, 255], + "error": [218, 30, 40, 255], + "warning": [253, 209, 58, 255], + "success": [36, 162, 73, 255], "disabled": [229, 229, 229, 255], "toolbar_button_hover": [232, 242, 252, 255], @@ -363,6 +364,9 @@ "message_close_hover": [8, 7, 63, 255], "message_progressbar_background": [245, 245, 245, 255], "message_progressbar_control": [50, 130, 255, 255], + "message_success_icon": [255, 255, 255, 255], + "message_warning_icon": [0, 0, 0, 255], + "message_error_icon": [255, 255, 255, 255], "tool_panel_background": [255, 255, 255, 255], @@ -616,6 +620,7 @@ "message_radius": [0.25, 0.25], "message_action_button": [0, 2.5], "message_image": [15.0, 5.0], + "message_type_icon": [2, 2], "infill_button_margin": [0.5, 0.5], diff --git a/resources/variants/biqu_bx_abl_0.2.inst.cfg b/resources/variants/biqu_bx_abl_0.2.inst.cfg new file mode 100755 index 0000000000..b72fdc83bb --- /dev/null +++ b/resources/variants/biqu_bx_abl_0.2.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.2mm Nozzle +version = 4 +definition = biqu_bx_abl + +[metadata] +setting_version = 17 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.2 diff --git a/resources/variants/biqu_bx_abl_0.3.inst.cfg b/resources/variants/biqu_bx_abl_0.3.inst.cfg new file mode 100755 index 0000000000..7b195c0013 --- /dev/null +++ b/resources/variants/biqu_bx_abl_0.3.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.3mm Nozzle +version = 4 +definition = biqu_bx_abl + +[metadata] +setting_version = 17 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.3 diff --git a/resources/variants/biqu_bx_abl_0.4.inst.cfg b/resources/variants/biqu_bx_abl_0.4.inst.cfg new file mode 100755 index 0000000000..106c5ea5d7 --- /dev/null +++ b/resources/variants/biqu_bx_abl_0.4.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.4mm Nozzle +version = 4 +definition = biqu_bx_abl + +[metadata] +setting_version = 17 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.4 diff --git a/resources/variants/biqu_bx_abl_0.5.inst.cfg b/resources/variants/biqu_bx_abl_0.5.inst.cfg new file mode 100755 index 0000000000..c95388e23f --- /dev/null +++ b/resources/variants/biqu_bx_abl_0.5.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.5mm Nozzle +version = 4 +definition = biqu_bx_abl + +[metadata] +setting_version = 17 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.5 diff --git a/resources/variants/biqu_bx_abl_0.6.inst.cfg b/resources/variants/biqu_bx_abl_0.6.inst.cfg new file mode 100755 index 0000000000..0116e7478f --- /dev/null +++ b/resources/variants/biqu_bx_abl_0.6.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.6mm Nozzle +version = 4 +definition = biqu_bx_abl + +[metadata] +setting_version = 17 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.6 diff --git a/resources/variants/biqu_bx_abl_0.8.inst.cfg b/resources/variants/biqu_bx_abl_0.8.inst.cfg new file mode 100755 index 0000000000..8a5747a9f7 --- /dev/null +++ b/resources/variants/biqu_bx_abl_0.8.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.8mm Nozzle +version = 4 +definition = biqu_bx_abl + +[metadata] +setting_version = 17 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.8 diff --git a/resources/variants/kingroon_kp3_0.2.inst.cfg b/resources/variants/kingroon_kp3_0.2.inst.cfg new file mode 100644 index 0000000000..8fa9186bff --- /dev/null +++ b/resources/variants/kingroon_kp3_0.2.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.2mm Nozzle +version = 4 +definition = kingroon_kp3 + +[metadata] +setting_version = 17 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.2 diff --git a/resources/variants/kingroon_kp3_0.3.inst.cfg b/resources/variants/kingroon_kp3_0.3.inst.cfg new file mode 100644 index 0000000000..b31510e125 --- /dev/null +++ b/resources/variants/kingroon_kp3_0.3.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.3mm Nozzle +version = 4 +definition = kingroon_kp3 + +[metadata] +setting_version = 17 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.3 diff --git a/resources/variants/kingroon_kp3_0.4.inst.cfg b/resources/variants/kingroon_kp3_0.4.inst.cfg new file mode 100644 index 0000000000..47e539ac09 --- /dev/null +++ b/resources/variants/kingroon_kp3_0.4.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.4mm Nozzle +version = 4 +definition = kingroon_kp3 + +[metadata] +setting_version = 17 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.4 diff --git a/resources/variants/kingroon_kp3_0.5.inst.cfg b/resources/variants/kingroon_kp3_0.5.inst.cfg new file mode 100644 index 0000000000..4cf935f6e1 --- /dev/null +++ b/resources/variants/kingroon_kp3_0.5.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.5mm Nozzle +version = 4 +definition = kingroon_kp3 + +[metadata] +setting_version = 17 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.5 diff --git a/resources/variants/kingroon_kp3_0.6.inst.cfg b/resources/variants/kingroon_kp3_0.6.inst.cfg new file mode 100644 index 0000000000..a1da7fb2c5 --- /dev/null +++ b/resources/variants/kingroon_kp3_0.6.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.6mm Nozzle +version = 4 +definition = kingroon_kp3 + +[metadata] +setting_version = 17 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.6 diff --git a/resources/variants/kingroon_kp3_0.8.inst.cfg b/resources/variants/kingroon_kp3_0.8.inst.cfg new file mode 100644 index 0000000000..1335367a25 --- /dev/null +++ b/resources/variants/kingroon_kp3_0.8.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.8mm Nozzle +version = 4 +definition = kingroon_kp3 + +[metadata] +setting_version = 17 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.8 diff --git a/resources/variants/kingroon_kp3_1.0.inst.cfg b/resources/variants/kingroon_kp3_1.0.inst.cfg new file mode 100644 index 0000000000..0dba9543c9 --- /dev/null +++ b/resources/variants/kingroon_kp3_1.0.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 1.0mm Nozzle +version = 4 +definition = kingroon_kp3 + +[metadata] +setting_version = 17 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 1.0 diff --git a/resources/variants/kingroon_kp3s_0.2.inst.cfg b/resources/variants/kingroon_kp3s_0.2.inst.cfg new file mode 100644 index 0000000000..2ffda2c256 --- /dev/null +++ b/resources/variants/kingroon_kp3s_0.2.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.2mm Nozzle +version = 4 +definition = kingroon_kp3s + +[metadata] +setting_version = 17 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.2 diff --git a/resources/variants/kingroon_kp3s_0.3.inst.cfg b/resources/variants/kingroon_kp3s_0.3.inst.cfg new file mode 100644 index 0000000000..1f914eb6bf --- /dev/null +++ b/resources/variants/kingroon_kp3s_0.3.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.3mm Nozzle +version = 4 +definition = kingroon_kp3s + +[metadata] +setting_version = 17 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.3 diff --git a/resources/variants/kingroon_kp3s_0.4.inst.cfg b/resources/variants/kingroon_kp3s_0.4.inst.cfg new file mode 100644 index 0000000000..479baabb4d --- /dev/null +++ b/resources/variants/kingroon_kp3s_0.4.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.4mm Nozzle +version = 4 +definition = kingroon_kp3s + +[metadata] +setting_version = 17 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.4 diff --git a/resources/variants/kingroon_kp3s_0.5.inst.cfg b/resources/variants/kingroon_kp3s_0.5.inst.cfg new file mode 100644 index 0000000000..60100a80fd --- /dev/null +++ b/resources/variants/kingroon_kp3s_0.5.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.5mm Nozzle +version = 4 +definition = kingroon_kp3s + +[metadata] +setting_version = 17 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.5 diff --git a/resources/variants/kingroon_kp3s_0.6.inst.cfg b/resources/variants/kingroon_kp3s_0.6.inst.cfg new file mode 100644 index 0000000000..2aed87e544 --- /dev/null +++ b/resources/variants/kingroon_kp3s_0.6.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.6mm Nozzle +version = 4 +definition = kingroon_kp3s + +[metadata] +setting_version = 17 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.6 diff --git a/resources/variants/kingroon_kp3s_0.8.inst.cfg b/resources/variants/kingroon_kp3s_0.8.inst.cfg new file mode 100644 index 0000000000..e0bce0a969 --- /dev/null +++ b/resources/variants/kingroon_kp3s_0.8.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.8mm Nozzle +version = 4 +definition = kingroon_kp3s + +[metadata] +setting_version = 17 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.8 diff --git a/resources/variants/kingroon_kp3s_1.0.inst.cfg b/resources/variants/kingroon_kp3s_1.0.inst.cfg new file mode 100644 index 0000000000..f9db27a49f --- /dev/null +++ b/resources/variants/kingroon_kp3s_1.0.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 1.0mm Nozzle +version = 4 +definition = kingroon_kp3s + +[metadata] +setting_version = 17 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 1.0