mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-04-23 22:29:41 +08:00
Merge branch 'master' into CURA-8442_remove_wall_min_flow
This commit is contained in:
commit
7a5787bd18
11
CITATION.cff
Normal file
11
CITATION.cff
Normal file
@ -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"
|
||||
...
|
@ -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()
|
||||
|
||||
|
@ -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()
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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]
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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())
|
||||
|
@ -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()
|
||||
|
@ -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")
|
||||
|
@ -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()
|
||||
|
@ -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 <filename> or <message>!", "Failed to export profile to <filename>{0}</filename>: <message>{1}</message>", file_name, str(e)),
|
||||
m = Message(catalog.i18nc("@info:status Don't translate the XML tags <filename> or <message>!",
|
||||
"Failed to export profile to <filename>{0}</filename>: <message>{1}</message>",
|
||||
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 <filename>!", "Failed to export profile to <filename>{0}</filename>: Writer plugin reported failure.", file_name),
|
||||
m = Message(catalog.i18nc("@info:status Don't translate the XML tag <filename>!",
|
||||
"Failed to export profile to <filename>{0}</filename>: 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 <filename>!", "Exported profile to <filename>{0}</filename>", file_name),
|
||||
title = catalog.i18nc("@info:title", "Export succeeded"))
|
||||
m = Message(catalog.i18nc("@info:status Don't translate the XML tag <filename>!",
|
||||
"Exported profile to <filename>{0}</filename>",
|
||||
file_name),
|
||||
title = catalog.i18nc("@info:title", "Export succeeded"),
|
||||
message_type = Message.MessageType.POSITIVE)
|
||||
m.show()
|
||||
return True
|
||||
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
|
@ -540,7 +540,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
"Project file <filename>{0}</filename> contains an unknown machine type"
|
||||
" <message>{1}</message>. 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 <filename> or <message>!",
|
||||
"Project file <filename>{0}</filename> is suddenly inaccessible: <message>{1}</message>.", 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 <filename> or <message>!",
|
||||
"Project file <filename>{0}</filename> is corrupt: <message>{1}</message>.", 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 <filename>!",
|
||||
"Project file <filename>{0}</filename> 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 [], {}
|
||||
|
@ -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()
|
||||
|
@ -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:
|
||||
|
@ -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)
|
||||
|
@ -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()
|
||||
|
||||
|
@ -1,62 +1,52 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 378.13 348.13">
|
||||
<defs>
|
||||
<style>
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 378.13 348.13" version="1.1">
|
||||
<defs
|
||||
id="defs7">
|
||||
<style
|
||||
id="style2">
|
||||
.cls-2,.cls-6{fill:#c5dbfb;}
|
||||
.cls-3,.cls-5,.cls-8{fill:#fff;}
|
||||
.cls-3{stroke:#c5dbfb;}
|
||||
.cls-10,.cls-3,.cls-4,.cls-6,.cls-7,.cls-8{stroke-miterlimit:10;stroke-width:2px;}
|
||||
.cls-4,.cls-7{fill:#f3f8fe;}
|
||||
.cls-4{stroke:#f3f8fe;}
|
||||
.cls-6,.cls-7,.cls-8{stroke:#061884;}
|
||||
.cls-10{fill:#196ef0;stroke:#196ef0;}
|
||||
.cls-11{fill:#061884;}
|
||||
.cls-6,.cls-7{stroke-width:2px;}
|
||||
.cls-7{fill:#f3f8fe;}
|
||||
.cls-6,.cls-7{stroke:#061884;}
|
||||
</style>
|
||||
<clipPath id="clip-path">
|
||||
<circle fill="none" cx="155" cy="125" r="80" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
<path class="cls-2" d="M43,17V3H83a2,2,0,0,1,2,2V17Z" />
|
||||
<path class="cls-3" d="M3,1H40L56,17H87a2,2,0,0,1,2,2V67a2,2,0,0,1-2,2H3a2,2,0,0,1-2-2V3A2,2,0,0,1,3,1Z" />
|
||||
<path class="cls-2" d="M153,17V3h40a2,2,0,0,1,2,2V17Z" />
|
||||
<path class="cls-3" d="M113,1h37l16,16h31a2,2,0,0,1,2,2V67a2,2,0,0,1-2,2H113a2,2,0,0,1-2-2V3A2,2,0,0,1,113,1Z" />
|
||||
<path class="cls-2" d="M263,17V3h40a2,2,0,0,1,2,2V17Z" />
|
||||
<path class="cls-3" d="M223,1h37l16,16h31a2,2,0,0,1,2,2V67a2,2,0,0,1-2,2H223a2,2,0,0,1-2-2V3A2,2,0,0,1,223,1Z" />
|
||||
<path class="cls-2" d="M43,107V93H83a2,2,0,0,1,2,2v12Z" />
|
||||
<path class="cls-3" d="M3,91H40l16,16H87a2,2,0,0,1,2,2v48a2,2,0,0,1-2,2H3a2,2,0,0,1-2-2V93A2,2,0,0,1,3,91Z" />
|
||||
<path class="cls-4" d="M153,107V93h40a2,2,0,0,1,2,2v12Z" />
|
||||
<path class="cls-3" d="M113,91h37l16,16h31a2,2,0,0,1,2,2v48a2,2,0,0,1-2,2H113a2,2,0,0,1-2-2V93A2,2,0,0,1,113,91Z" />
|
||||
<path class="cls-2" d="M263,107V93h40a2,2,0,0,1,2,2v12Z" />
|
||||
<path class="cls-3" d="M223,91h37l16,16h31a2,2,0,0,1,2,2v48a2,2,0,0,1-2,2H223a2,2,0,0,1-2-2V93A2,2,0,0,1,223,91Z" />
|
||||
<path class="cls-2" d="M43,197V183H83a2,2,0,0,1,2,2v12Z" />
|
||||
<path class="cls-3" d="M3,181H40l16,16H87a2,2,0,0,1,2,2v48a2,2,0,0,1-2,2H3a2,2,0,0,1-2-2V183A2,2,0,0,1,3,181Z" />
|
||||
<path class="cls-4" d="M153,197V183h40a2,2,0,0,1,2,2v12Z" />
|
||||
<path class="cls-3" d="M113,181h37l16,16h31a2,2,0,0,1,2,2v48a2,2,0,0,1-2,2H113a2,2,0,0,1-2-2V183A2,2,0,0,1,113,181Z" />
|
||||
<path class="cls-2" d="M263,197V183h40a2,2,0,0,1,2,2v12Z" />
|
||||
<path class="cls-3" d="M223,181h37l16,16h31a2,2,0,0,1,2,2v48a2,2,0,0,1-2,2H223a2,2,0,0,1-2-2V183A2,2,0,0,1,223,181Z" />
|
||||
<circle class="cls-5" cx="155" cy="125" r="100" />
|
||||
<path class="cls-6" d="M351.12,322.62h20a10,10,0,0,1,10,10v7a0,0,0,0,1,0,0h-40a0,0,0,0,1,0,0v-7A10,10,0,0,1,351.12,322.62Z" transform="translate(850.61 309.91) rotate(135)" />
|
||||
<rect class="cls-7" x="293.75" y="225.25" width="40" height="117" transform="translate(-108.74 304.96) rotate(-45)" />
|
||||
<polyline class="cls-7" points="213.69 199.25 252.58 238.14 267.43 223.29 228.54 184.4" />
|
||||
<circle class="cls-8" cx="155" cy="125" r="95" />
|
||||
<circle class="cls-8" cx="155" cy="125" r="85" />
|
||||
<path class="cls-6" d="M256.37,227.87h20a10,10,0,0,1,10,10v7a0,0,0,0,1,0,0h-40a0,0,0,0,1,0,0v-7a10,10,0,0,1,10-10Z" transform="translate(-89.12 257.58) rotate(-45)" />
|
||||
<g clip-path="url(#clip-path)">
|
||||
<path class="cls-10" d="M43,17V3H83a2,2,0,0,1,2,2V17Z" />
|
||||
<path class="cls-8" d="M3,1H40L56,17H87a2,2,0,0,1,2,2V67a2,2,0,0,1-2,2H3a2,2,0,0,1-2-2V3A2,2,0,0,1,3,1Z" />
|
||||
<path class="cls-10" d="M153,17V3h40a2,2,0,0,1,2,2V17Z" />
|
||||
<path class="cls-8" d="M113,1h37l16,16h31a2,2,0,0,1,2,2V67a2,2,0,0,1-2,2H113a2,2,0,0,1-2-2V3A2,2,0,0,1,113,1Z" />
|
||||
<path class="cls-10" d="M263,17V3h40a2,2,0,0,1,2,2V17Z" />
|
||||
<path class="cls-8" d="M223,1h37l16,16h31a2,2,0,0,1,2,2V67a2,2,0,0,1-2,2H223a2,2,0,0,1-2-2V3A2,2,0,0,1,223,1Z" />
|
||||
<path class="cls-10" d="M43,107V93H83a2,2,0,0,1,2,2v12Z" />
|
||||
<path class="cls-8" d="M3,91H40l16,16H87a2,2,0,0,1,2,2v48a2,2,0,0,1-2,2H3a2,2,0,0,1-2-2V93A2,2,0,0,1,3,91Z" />
|
||||
<path class="cls-10" d="M263,107V93h40a2,2,0,0,1,2,2v12Z" />
|
||||
<path class="cls-8" d="M223,91h37l16,16h31a2,2,0,0,1,2,2v48a2,2,0,0,1-2,2H223a2,2,0,0,1-2-2V93A2,2,0,0,1,223,91Z" />
|
||||
<path class="cls-10" d="M43,197V183H83a2,2,0,0,1,2,2v12Z" />
|
||||
<path class="cls-8" d="M3,181H40l16,16H87a2,2,0,0,1,2,2v48a2,2,0,0,1-2,2H3a2,2,0,0,1-2-2V183A2,2,0,0,1,3,181Z" />
|
||||
<path class="cls-10" d="M153,197V183h40a2,2,0,0,1,2,2v12Z" />
|
||||
<path class="cls-8" d="M113,181h37l16,16h31a2,2,0,0,1,2,2v48a2,2,0,0,1-2,2H113a2,2,0,0,1-2-2V183A2,2,0,0,1,113,181Z" />
|
||||
<path class="cls-10" d="M263,197V183h40a2,2,0,0,1,2,2v12Z" />
|
||||
<path class="cls-8" d="M223,181h37l16,16h31a2,2,0,0,1,2,2v48a2,2,0,0,1-2,2H223a2,2,0,0,1-2-2V183A2,2,0,0,1,223,181Z" />
|
||||
<path class="cls-11" d="M149.18,133.69v-3.48a14.36,14.36,0,0,1,1.74-7.25,20.17,20.17,0,0,1,6.4-6.17A25.87,25.87,0,0,0,163,112a7,7,0,0,0,1.48-4.34,4.13,4.13,0,0,0-1.93-3.62,9,9,0,0,0-5.14-1.3,24.94,24.94,0,0,0-7.34,1.16,45.2,45.2,0,0,0-7.78,3.31l-5.37-10.64a48.41,48.41,0,0,1,9.89-4.21,40.25,40.25,0,0,1,11.67-1.61q9.57,0,14.9,4.43a14.16,14.16,0,0,1,5.32,11.41,15.41,15.41,0,0,1-2.55,9,30.38,30.38,0,0,1-7.92,7.34A32.11,32.11,0,0,0,163,127.3a5.91,5.91,0,0,0-1.34,4v2.41Zm-1.61,15.12q0-4.38,2.46-6.12a10,10,0,0,1,5.95-1.75,9.69,9.69,0,0,1,5.77,1.75q2.46,1.74,2.46,6.12,0,4.22-2.46,6a9.42,9.42,0,0,1-5.77,1.84,9.69,9.69,0,0,1-5.95-1.84Q147.57,153,147.57,148.81Z" />
|
||||
</g>
|
||||
</defs>
|
||||
<path class="cls-2" d="M43,17V3H83a2,2,0,0,1,2,2V17Z" />
|
||||
<path fill="white" d="M 3 1 C 1.8954305 1 1 1.8954305 1 3 L 1 67 C 1 68.104569 1.8954305 69 3 69 L 72.152344 69 A 100 100 0 0 1 89 49.873047 L 89 19 C 89 17.895431 88.104569 17 87 17 L 56 17 L 40 1 L 3 1 z " />
|
||||
<path fill="#c5dbfb" d="M 3 0 C 1.3549904 0 0 1.3549904 0 3 L 0 67 C 0 68.64501 1.3549904 70 3 70 L 71.484375 70 A 100 100 0 0 1 72.835938 68 L 3 68 C 2.4358706 68 2 67.564129 2 67 L 2 3 C 2 2.4358706 2.4358706 2 3 2 L 39.585938 2 L 55.585938 18 L 87 18 C 87.564129 18 88 18.435871 88 19 L 88 50.765625 A 100 100 0 0 1 90 49.007812 L 90 19 C 90 17.35499 88.64501 16 87 16 L 56.414062 16 L 40.414062 0 L 3 0 z " />
|
||||
<path class="cls-2" d="M153,17V3h40a2,2,0,0,1,2,2V17Z" />
|
||||
<path fill="white" d="M 113 1 C 111.89543 1 111 1.8954305 111 3 L 111 35.201172 A 100 100 0 0 1 155 25 A 100 100 0 0 1 199 35.201172 L 199 19 C 199 17.895431 198.10457 17 197 17 L 166 17 L 150 1 L 113 1 z " />
|
||||
<path fill="#c5dbfb" d="M 113 0 C 111.35499 0 110 1.3549904 110 3 L 110 35.699219 A 100 100 0 0 1 112 34.716797 L 112 3 C 112 2.4358706 112.43587 2 113 2 L 149.58594 2 L 165.58594 18 L 197 18 C 197.56413 18 198 18.435871 198 19 L 198 34.716797 A 100 100 0 0 1 200 35.699219 L 200 19 C 200 17.35499 198.64501 16 197 16 L 166.41406 16 L 150.41406 0 L 113 0 z " />
|
||||
<path class="cls-2" d="M263,17V3h40a2,2,0,0,1,2,2V17Z" />
|
||||
<path fill="white" d="M 223 1 C 221.89543 1 221 1.8954305 221 3 L 221 49.875 A 100 100 0 0 1 237.84961 69 L 307 69 C 308.10457 69 309 68.104569 309 67 L 309 19 C 309 17.895431 308.10457 17 307 17 L 276 17 L 260 1 L 223 1 z " />
|
||||
<path fill="#c5dbfb" d="M 223 0 C 221.35499 0 220 1.3549904 220 3 L 220 49.005859 A 100 100 0 0 1 222 50.765625 L 222 3 C 222 2.4358706 222.43587 2 223 2 L 259.58594 2 L 275.58594 18 L 307 18 C 307.56413 18 308 18.435871 308 19 L 308 67 C 308 67.564129 307.56413 68 307 68 L 237.16406 68 A 100 100 0 0 1 238.51562 70 L 307 70 C 308.64501 70 310 68.64501 310 67 L 310 19 C 310 17.35499 308.64501 16 307 16 L 276.41406 16 L 260.41406 0 L 223 0 z " />
|
||||
<path fill="#c5dbfb" d="M 43 93 L 43 107 L 56.634766 107 A 100 100 0 0 1 60.259766 93 L 43 93 z " />
|
||||
<path fill="white" d="M 3 91 C 1.8954305 91 1 91.895431 1 93 L 1 157 C 1 158.10457 1.8954305 159 3 159 L 60.958984 159 A 100 100 0 0 1 55 125 A 100 100 0 0 1 56.634766 107 L 56 107 L 40 91 L 3 91 z " />
|
||||
<path fill="#c5dbfb" d="M 3 90 C 1.3549904 90 0 91.35499 0 93 L 0 157 C 0 158.64501 1.3549904 160 3 160 L 61.324219 160 A 100 100 0 0 1 60.603516 158 L 3 158 C 2.4358706 158 2 157.56413 2 157 L 2 93 C 2 92.435871 2.4358706 92 3 92 L 39.585938 92 L 55.585938 108 L 56.455078 108 A 100 100 0 0 1 56.822266 106 L 56.414062 106 L 40.414062 90 L 3 90 z " />
|
||||
<path class="cls-2" d="M263,107V93h40a2,2,0,0,1,2,2v12Z" />
|
||||
<path fill="white" d="M 249.04102 91 A 100 100 0 0 1 255 125 A 100 100 0 0 1 249.04102 159 L 307 159 C 308.10457 159 309 158.10457 309 157 L 309 109 C 309 107.89543 308.10457 107 307 107 L 276 107 L 260 91 L 249.04102 91 z " />
|
||||
<path fill="#c5dbfb" d="M 248.67578 90 A 100 100 0 0 1 249.39648 92 L 259.58594 92 L 275.58594 108 L 307 108 C 307.56413 108 308 108.43587 308 109 L 308 157 C 308 157.56413 307.56413 158 307 158 L 249.39844 158 A 100 100 0 0 1 248.67383 160 L 307 160 C 308.64501 160 310 158.64501 310 157 L 310 109 C 310 107.35499 308.64501 106 307 106 L 276.41406 106 L 260.41406 90 L 248.67578 90 z " />
|
||||
<path fill="#c5dbfb" d="M 43 183 L 43 197 L 85 197 L 85 196.41406 A 100 100 0 0 1 73.539062 183 L 43 183 z " />
|
||||
<path fill="white" d="M 3 181 C 1.8954305 181 1 181.89543 1 183 L 1 247 C 1 248.10457 1.8954305 249 3 249 L 87 249 C 88.104569 249 89 248.10457 89 247 L 89 200.125 A 100 100 0 0 1 85.603516 197 L 56 197 L 40 181 L 3 181 z " />
|
||||
<path fill="#c5dbfb" d="M 3 180 C 1.3549904 180 0 181.35499 0 183 L 0 247 C 0 248.64501 1.3549904 250 3 250 L 87 250 C 88.64501 250 90 248.64501 90 247 L 90 200.99414 A 100 100 0 0 1 88 199.23438 L 88 247 C 88 247.56413 87.564129 248 87 248 L 3 248 C 2.4358706 248 2 247.56413 2 247 L 2 183 C 2 182.43587 2.4358706 182 3 182 L 39.585938 182 L 55.585938 198 L 86.65625 198 A 100 100 0 0 1 84.580078 196 L 56.414062 196 L 40.414062 180 L 3 180 z " />
|
||||
<path fill="white" d="M 111 214.79883 L 111 247 C 111 248.10457 111.89543 249 113 249 L 197 249 C 198.10457 249 199 248.10457 199 247 L 199 214.79883 A 100 100 0 0 1 155 225 A 100 100 0 0 1 111 214.79883 z " />
|
||||
<path fill="#c5dbfb" d="M 110 214.30078 L 110 247 C 110 248.64501 111.35499 250 113 250 L 197 250 C 198.64501 250 200 248.64501 200 247 L 200 214.30078 A 100 100 0 0 1 198 215.2832 L 198 247 C 198 247.56413 197.56413 248 197 248 L 113 248 C 112.43587 248 112 247.56413 112 247 L 112 215.2832 A 100 100 0 0 1 110 214.30078 z " />
|
||||
<path class="cls-2" d="M263,197V183h40a2,2,0,0,1,2,2v12Z" />
|
||||
<path fill="white" d="M 237.84766 181 A 100 100 0 0 1 221 200.12695 L 221 247 C 221 248.10457 221.89543 249 223 249 L 307 249 C 308.10457 249 309 248.10457 309 247 L 309 199 C 309 197.89543 308.10457 197 307 197 L 276 197 L 260 181 L 237.84766 181 z " />
|
||||
<path fill="#c5dbfb" d="M 238.51562 180 A 100 100 0 0 1 237.16406 182 L 259.58594 182 L 275.58594 198 L 307 198 C 307.56413 198 308 198.43587 308 199 L 308 247 C 308 247.56413 307.56413 248 307 248 L 223 248 C 222.43587 248 222 247.56413 222 247 L 222 199.23438 A 100 100 0 0 1 220 200.99219 L 220 247 C 220 248.64501 221.35499 250 223 250 L 307 250 C 308.64501 250 310 248.64501 310 247 L 310 199 C 310 197.35499 308.64501 196 307 196 L 276.41406 196 L 260.41406 180 L 238.51562 180 z " />
|
||||
<path class="cls-6" d="M351.12,322.62h20a10,10,0,0,1,10,10v7a0,0,0,0,1,0,0h-40a0,0,0,0,1,0,0v-7A10,10,0,0,1,351.12,322.62Z" transform="translate(850.61 309.91) rotate(135)" />
|
||||
<rect class="cls-7" x="293.75" y="225.25" width="40" height="117" transform="translate(-108.74 304.96) rotate(-45)" />
|
||||
<polyline class="cls-7" points="213.69 199.25 252.58 238.14 267.43 223.29 228.54 184.4" />
|
||||
<path fill="white" stroke="#061884" stroke-width="2px" d="M 154.94141 30 A 95 95 0 0 0 60 125 A 95 95 0 0 0 155 220 A 95 95 0 0 0 250 125 A 95 95 0 0 0 155 30 A 95 95 0 0 0 154.94141 30 z M 154.82812 40 A 85 85 0 0 1 155 40 A 85 85 0 0 1 240 125 A 85 85 0 0 1 155 210 A 85 85 0 0 1 70 125 A 85 85 0 0 1 154.82812 40 z " />
|
||||
<path class="cls-6" d="M256.37,227.87h20a10,10,0,0,1,10,10v7a0,0,0,0,1,0,0h-40a0,0,0,0,1,0,0v-7a10,10,0,0,1,10-10Z" transform="translate(-89.12 257.58) rotate(-45)" />
|
||||
<path fill="white" d="M 154.94141 45 A 80 80 0 0 0 111 58.185547 L 111 67 C 111 68.104569 111.89543 69 113 69 L 197 69 C 198.10457 69 199 68.104569 199 67 L 199 58.1875 A 80 80 0 0 0 155 45 A 80 80 0 0 0 154.94141 45 z " />
|
||||
<path fill="#061884" d="M 112 57.539062 A 80 80 0 0 0 110 58.857422 L 110 67 C 110 68.64501 111.35499 70 113 70 L 197 70 C 198.64501 70 200 68.64501 200 67 L 200 58.857422 A 80 80 0 0 0 198 57.541016 L 198 67 C 198 67.564129 197.56413 68 197 68 L 113 68 C 112.43587 68 112 67.564129 112 67 L 112 57.539062 z " />
|
||||
<path fill="#196ef0" d="M 81.679688 93 A 80 80 0 0 0 77.050781 107 L 85 107 L 85 95 A 2 2 0 0 0 83 93 L 81.679688 93 z " />
|
||||
<path fill="white" d="M 77.050781 107 A 80 80 0 0 0 75 125 A 80 80 0 0 0 82.585938 159 L 87 159 C 88.104569 159 89 158.10457 89 157 L 89 109 C 89 107.89543 88.104569 107 87 107 L 77.050781 107 z " />
|
||||
<path fill="#061884" d="M 77.289062 106 A 80 80 0 0 0 76.828125 108 L 87 108 C 87.564129 108 88 108.43587 88 109 L 88 157 C 88 157.56413 87.564129 158 87 158 L 82.125 158 A 80 80 0 0 0 83.0625 160 L 87 160 C 88.64501 160 90 158.64501 90 157 L 90 109 C 90 107.35499 88.64501 106 87 106 L 77.289062 106 z " />
|
||||
<path fill="white" d="M 223 91 C 221.89543 91 221 91.895431 221 93 L 221 157 C 221 158.10457 221.89543 159 223 159 L 227.41406 159 A 80 80 0 0 0 235 125 A 80 80 0 0 0 227.41406 91 L 223 91 z " />
|
||||
<path fill="#061884" d="M 223 90 C 221.35499 90 220 91.35499 220 93 L 220 157 C 220 158.64501 221.35499 160 223 160 L 226.9375 160 A 80 80 0 0 0 227.87695 158 L 223 158 C 222.43587 158 222 157.56413 222 157 L 222 93 C 222 92.435871 222.43587 92 223 92 L 227.875 92 A 80 80 0 0 0 226.9375 90 L 223 90 z " />
|
||||
<path fill="#196ef0" d="M 153 183 L 153 197 L 189.86914 197 A 80 80 0 0 0 195 194.28125 L 195 185 A 2 2 0 0 0 193 183 L 153 183 z "/>
|
||||
<path fill="white" d="M 113 181 C 111.89543 181 111 181.89543 111 183 L 111 191.8125 A 80 80 0 0 0 155 205 A 80 80 0 0 0 189.86914 197 L 166 197 L 150 181 L 113 181 z " />
|
||||
<path fill="#061884" d="M 113 180 C 111.35499 180 110 181.35499 110 183 L 110 191.14258 A 80 80 0 0 0 112 192.45898 L 112 183 C 112 182.43587 112.43587 182 113 182 L 149.58594 182 L 165.58594 198 L 187.72461 198 A 80 80 0 0 0 191.86328 196 L 166.41406 196 L 150.41406 180 L 113 180 z " />
|
||||
<path fill="#061884" d="m 149.18,133.69 v -3.48 a 14.36,14.36 0 0 1 1.74,-7.25 20.17,20.17 0 0 1 6.4,-6.17 25.87,25.87 0 0 0 5.68,-4.79 7,7 0 0 0 1.48,-4.34 4.13,4.13 0 0 0 -1.93,-3.62 9,9 0 0 0 -5.14,-1.3 24.94,24.94 0 0 0 -7.34,1.16 45.2,45.2 0 0 0 -7.78,3.31 l -5.37,-10.64 a 48.41,48.41 0 0 1 9.89,-4.21 40.25,40.25 0 0 1 11.67,-1.61 q 9.57,0 14.9,4.43 a 14.16,14.16 0 0 1 5.32,11.41 15.41,15.41 0 0 1 -2.55,9 30.38,30.38 0 0 1 -7.92,7.34 32.11,32.11 0 0 0 -5.23,4.37 5.91,5.91 0 0 0 -1.34,4 v 2.41 z m -1.61,15.12 q 0,-4.38 2.46,-6.12 a 10,10 0 0 1 5.95,-1.75 9.69,9.69 0 0 1 5.77,1.75 q 2.46,1.74 2.46,6.12 0,4.22 -2.46,6 a 9.42,9.42 0 0 1 -5.77,1.84 9.69,9.69 0 0 1 -5.95,-1.84 q -2.46,-1.81 -2.46,-6 z" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 9.6 KiB |
@ -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:
|
||||
{
|
||||
|
@ -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:
|
||||
{
|
||||
|
@ -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")
|
||||
|
@ -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,
|
||||
|
@ -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)
|
||||
|
@ -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.
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
11
plugins/README_plugins.txt
Normal file
11
plugins/README_plugins.txt
Normal file
@ -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.
|
@ -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 <filename>!", "Saving to Removable Drive <filename>{0}</filename>").format(self.getName()), 0, False, -1, catalog.i18nc("@info:title", "Saving"))
|
||||
message = Message(catalog.i18nc("@info:progress Don't translate the XML tags <filename>!",
|
||||
"Saving to Removable Drive <filename>{0}</filename>").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()
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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,
|
||||
|
@ -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()
|
||||
|
@ -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(["<li>{} ({})</li>".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(
|
||||
|
@ -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:
|
||||
|
@ -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:
|
||||
|
@ -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"), "", "")
|
||||
|
@ -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
|
||||
)
|
||||
|
@ -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
|
||||
)
|
||||
|
@ -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
|
||||
)
|
||||
|
@ -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
|
||||
)
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
11
resources/README_resources.txt
Normal file
11
resources/README_resources.txt
Normal file
@ -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
|
@ -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" },
|
||||
|
@ -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 },
|
||||
|
51
resources/definitions/biqu_bx_abl.def.json
Executable file
51
resources/definitions/biqu_bx_abl.def.json
Executable file
@ -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 }
|
||||
}
|
||||
}
|
76
resources/definitions/flsun_sr.def.json
Normal file
76
resources/definitions/flsun_sr.def.json
Normal file
@ -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)"
|
||||
}
|
||||
}
|
||||
}
|
279
resources/definitions/kingroon_base.def.json
Normal file
279
resources/definitions/kingroon_base.def.json
Normal file
@ -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" }
|
||||
|
||||
}
|
||||
}
|
22
resources/definitions/kingroon_kp3.def.json
Normal file
22
resources/definitions/kingroon_kp3.def.json
Normal file
@ -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"
|
||||
}
|
||||
}
|
33
resources/definitions/kingroon_kp3s.def.json
Normal file
33
resources/definitions/kingroon_kp3s.def.json
Normal file
@ -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"
|
||||
}
|
||||
}
|
@ -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 },
|
||||
|
51
resources/definitions/mp_mini_delta_v2.def.json
Normal file
51
resources/definitions/mp_mini_delta_v2.def.json
Normal file
@ -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 }
|
||||
}
|
||||
}
|
59
resources/definitions/seckit_skgo.def.json
Normal file
59
resources/definitions/seckit_skgo.def.json
Normal file
@ -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"
|
||||
}
|
||||
}
|
||||
}
|
59
resources/definitions/seckit_sktank.def.json
Normal file
59
resources/definitions/seckit_sktank.def.json
Normal file
@ -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"
|
||||
}
|
||||
}
|
||||
}
|
@ -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,
|
||||
|
@ -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,
|
||||
|
20
resources/extruders/flsun_sr_extruder_0.def.json
Normal file
20
resources/extruders/flsun_sr_extruder_0.def.json
Normal file
@ -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
|
||||
}
|
||||
}
|
||||
}
|
16
resources/extruders/kingroon_base_extruder_0.def.json
Normal file
16
resources/extruders/kingroon_base_extruder_0.def.json
Normal file
@ -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 }
|
||||
|
||||
}
|
||||
}
|
15
resources/extruders/mp_mini_delta_v2_extruder_0.def.json
Normal file
15
resources/extruders/mp_mini_delta_v2_extruder_0.def.json
Normal file
@ -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 }
|
||||
}
|
||||
}
|
15
resources/extruders/seckit_skgo_extruder_0.def.json
Normal file
15
resources/extruders/seckit_skgo_extruder_0.def.json
Normal file
@ -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 }
|
||||
}
|
||||
}
|
15
resources/extruders/seckit_sktank_extruder_0.def.json
Normal file
15
resources/extruders/seckit_sktank_extruder_0.def.json
Normal file
@ -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 }
|
||||
}
|
||||
}
|
BIN
resources/meshes/BIQU_BX_PLATE.stl
Normal file
BIN
resources/meshes/BIQU_BX_PLATE.stl
Normal file
Binary file not shown.
BIN
resources/meshes/flsun_sr.3mf
Normal file
BIN
resources/meshes/flsun_sr.3mf
Normal file
Binary file not shown.
BIN
resources/meshes/kingroon_kp3.stl
Normal file
BIN
resources/meshes/kingroon_kp3.stl
Normal file
Binary file not shown.
BIN
resources/meshes/kingroon_kp3s.stl
Normal file
BIN
resources/meshes/kingroon_kp3s.stl
Normal file
Binary file not shown.
@ -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";
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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 }
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -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:
|
||||
{
|
||||
|
@ -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")
|
||||
}
|
||||
|
||||
|
@ -34,6 +34,7 @@ ScrollView
|
||||
color: UM.Theme.getColor("text")
|
||||
textFormat: TextEdit.PlainText
|
||||
renderType: Text.NativeRendering
|
||||
wrapMode: Text.Wrap
|
||||
selectByMouse: true
|
||||
}
|
||||
}
|
||||
|
@ -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
|
@ -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
|
@ -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
|
14
resources/quality/kingroon/ABS/kingroon_0.3_ABS_low.inst.cfg
Normal file
14
resources/quality/kingroon/ABS/kingroon_0.3_ABS_low.inst.cfg
Normal file
@ -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
|
@ -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
|
@ -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
|
@ -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
|
14
resources/quality/kingroon/ABS/kingroon_0.4_ABS_low.inst.cfg
Normal file
14
resources/quality/kingroon/ABS/kingroon_0.4_ABS_low.inst.cfg
Normal file
@ -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
|
@ -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
|
@ -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
|
@ -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
|
14
resources/quality/kingroon/ABS/kingroon_0.5_ABS_low.inst.cfg
Normal file
14
resources/quality/kingroon/ABS/kingroon_0.5_ABS_low.inst.cfg
Normal file
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user