mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-08-12 02:19:04 +08:00
Merge branch 'master' into bremco-graphics_buffer_update
This commit is contained in:
commit
6dff2bebb5
@ -7,5 +7,5 @@ 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"
|
||||
version: "4.12.0"
|
||||
...
|
@ -2,7 +2,7 @@ Cura
|
||||
====
|
||||
Ultimaker Cura is a state-of-the-art slicer application to prepare your 3D models for printing with a 3D printer. With hundreds of settings and hundreds of community-managed print profiles, Ultimaker Cura is sure to lead your next project to a success.
|
||||
|
||||

|
||||

|
||||
|
||||
Logging Issues
|
||||
------------
|
||||
|
BIN
cura-logo.PNG
Normal file
BIN
cura-logo.PNG
Normal file
Binary file not shown.
After Width: | Height: | Size: 520 KiB |
@ -62,7 +62,7 @@ class Account(QObject):
|
||||
updatePackagesEnabledChanged = pyqtSignal(bool)
|
||||
|
||||
CLIENT_SCOPES = "account.user.read drive.backup.read drive.backup.write packages.download " \
|
||||
"packages.rating.read packages.rating.write connect.cluster.read connect.cluster.write " \
|
||||
"packages.rating.read packages.rating.write connect.cluster.read connect.cluster.write connect.material.write " \
|
||||
"library.project.read library.project.write cura.printjob.read cura.printjob.write " \
|
||||
"cura.mesh.read cura.mesh.write"
|
||||
|
||||
|
@ -159,4 +159,4 @@ def arrange(nodes_to_arrange: List["SceneNode"],
|
||||
|
||||
grouped_operation, not_fit_count = createGroupOperationForArrange(nodes_to_arrange, build_volume, fixed_nodes, factor, add_new_nodes_in_scene)
|
||||
grouped_operation.push()
|
||||
return not_fit_count != 0
|
||||
return not_fit_count == 0
|
||||
|
@ -289,7 +289,7 @@ class BuildVolume(SceneNode):
|
||||
# Mark the node as outside build volume if the set extruder is disabled
|
||||
extruder_position = node.callDecoration("getActiveExtruderPosition")
|
||||
try:
|
||||
if not self._global_container_stack.extruderList[int(extruder_position)].isEnabled:
|
||||
if not self._global_container_stack.extruderList[int(extruder_position)].isEnabled and not node.callDecoration("isGroup"):
|
||||
node.setOutsideBuildArea(True)
|
||||
continue
|
||||
except IndexError: # Happens when the extruder list is too short. We're not done building the printer in memory yet.
|
||||
|
@ -162,6 +162,7 @@ class CuraApplication(QtApplication):
|
||||
self.default_theme = "cura-light"
|
||||
|
||||
self.change_log_url = "https://ultimaker.com/ultimaker-cura-latest-features?utm_source=cura&utm_medium=software&utm_campaign=cura-update-features"
|
||||
self.beta_change_log_url = "https://ultimaker.com/ultimaker-cura-beta-features?utm_source=cura&utm_medium=software&utm_campaign=cura-update-features"
|
||||
|
||||
self._boot_loading_time = time.time()
|
||||
|
||||
|
@ -1,7 +1,8 @@
|
||||
# Copyright (c) 2018 Ultimaker B.V.
|
||||
# Copyright (c) 2021 Ultimaker B.V.
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
from PyQt5.QtCore import Qt, QTimer
|
||||
from PyQt5.QtCore import Qt, QTimer, pyqtProperty, pyqtSignal
|
||||
from typing import Optional
|
||||
|
||||
from UM.Qt.ListModel import ListModel
|
||||
from UM.i18n import i18nCatalog
|
||||
@ -20,6 +21,7 @@ class GlobalStacksModel(ListModel):
|
||||
MetaDataRole = Qt.UserRole + 5
|
||||
DiscoverySourceRole = Qt.UserRole + 6 # For separating local and remote printers in the machine management page
|
||||
RemovalWarningRole = Qt.UserRole + 7
|
||||
IsOnlineRole = Qt.UserRole + 8
|
||||
|
||||
def __init__(self, parent = None) -> None:
|
||||
super().__init__(parent)
|
||||
@ -31,18 +33,49 @@ class GlobalStacksModel(ListModel):
|
||||
self.addRoleName(self.HasRemoteConnectionRole, "hasRemoteConnection")
|
||||
self.addRoleName(self.MetaDataRole, "metadata")
|
||||
self.addRoleName(self.DiscoverySourceRole, "discoverySource")
|
||||
self.addRoleName(self.IsOnlineRole, "isOnline")
|
||||
|
||||
self._change_timer = QTimer()
|
||||
self._change_timer.setInterval(200)
|
||||
self._change_timer.setSingleShot(True)
|
||||
self._change_timer.timeout.connect(self._update)
|
||||
|
||||
self._filter_connection_type = None # type: Optional[ConnectionType]
|
||||
self._filter_online_only = False
|
||||
|
||||
# Listen to changes
|
||||
CuraContainerRegistry.getInstance().containerAdded.connect(self._onContainerChanged)
|
||||
CuraContainerRegistry.getInstance().containerMetaDataChanged.connect(self._onContainerChanged)
|
||||
CuraContainerRegistry.getInstance().containerRemoved.connect(self._onContainerChanged)
|
||||
self._updateDelayed()
|
||||
|
||||
filterConnectionTypeChanged = pyqtSignal()
|
||||
def setFilterConnectionType(self, new_filter: Optional[ConnectionType]) -> None:
|
||||
self._filter_connection_type = new_filter
|
||||
|
||||
@pyqtProperty(int, fset = setFilterConnectionType, notify = filterConnectionTypeChanged)
|
||||
def filterConnectionType(self) -> int:
|
||||
"""
|
||||
The connection type to filter the list of printers by.
|
||||
|
||||
Only printers that match this connection type will be listed in the
|
||||
model.
|
||||
"""
|
||||
if self._filter_connection_type is None:
|
||||
return -1
|
||||
return self._filter_connection_type.value
|
||||
|
||||
filterOnlineOnlyChanged = pyqtSignal()
|
||||
def setFilterOnlineOnly(self, new_filter: bool) -> None:
|
||||
self._filter_online_only = new_filter
|
||||
|
||||
@pyqtProperty(bool, fset = setFilterOnlineOnly, notify = filterOnlineOnlyChanged)
|
||||
def filterOnlineOnly(self) -> bool:
|
||||
"""
|
||||
Whether to filter the global stacks to show only printers that are online.
|
||||
"""
|
||||
return self._filter_online_only
|
||||
|
||||
def _onContainerChanged(self, container) -> None:
|
||||
"""Handler for container added/removed events from registry"""
|
||||
|
||||
@ -58,6 +91,10 @@ class GlobalStacksModel(ListModel):
|
||||
|
||||
container_stacks = CuraContainerRegistry.getInstance().findContainerStacks(type = "machine")
|
||||
for container_stack in container_stacks:
|
||||
if self._filter_connection_type is not None: # We want to filter on connection types.
|
||||
if not any((connection_type == self._filter_connection_type for connection_type in container_stack.configuredConnectionTypes)):
|
||||
continue # No connection type on this printer matches the filter.
|
||||
|
||||
has_remote_connection = False
|
||||
|
||||
for connection_type in container_stack.configuredConnectionTypes:
|
||||
@ -67,6 +104,10 @@ class GlobalStacksModel(ListModel):
|
||||
if parseBool(container_stack.getMetaDataEntry("hidden", False)):
|
||||
continue
|
||||
|
||||
is_online = container_stack.getMetaDataEntry("is_online", False)
|
||||
if self._filter_online_only and not is_online:
|
||||
continue
|
||||
|
||||
device_name = container_stack.getMetaDataEntry("group_name", container_stack.getName())
|
||||
section_name = "Connected printers" if has_remote_connection else "Preset printers"
|
||||
section_name = self._catalog.i18nc("@info:title", section_name)
|
||||
@ -82,6 +123,7 @@ class GlobalStacksModel(ListModel):
|
||||
"hasRemoteConnection": has_remote_connection,
|
||||
"metadata": container_stack.getMetaData().copy(),
|
||||
"discoverySource": section_name,
|
||||
"removalWarning": removal_warning})
|
||||
"removalWarning": removal_warning,
|
||||
"isOnline": is_online})
|
||||
items.sort(key=lambda i: (not i["hasRemoteConnection"], i["name"]))
|
||||
self.setItems(items)
|
||||
|
@ -107,7 +107,7 @@ class IntentCategoryModel(ListModel):
|
||||
qualities = IntentModel()
|
||||
qualities.setIntentCategory(category)
|
||||
result.append({
|
||||
"name": IntentCategoryModel.translation(category, "name", catalog.i18nc("@label", "Unknown")),
|
||||
"name": IntentCategoryModel.translation(category, "name", category),
|
||||
"description": IntentCategoryModel.translation(category, "description", None),
|
||||
"intent_category": category,
|
||||
"weight": list(IntentCategoryModel._get_translations().keys()).index(category),
|
||||
|
@ -2,21 +2,21 @@
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import copy # To duplicate materials.
|
||||
from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject, QUrl
|
||||
from PyQt5.QtCore import pyqtSignal, pyqtSlot, QObject, QUrl
|
||||
from PyQt5.QtGui import QDesktopServices
|
||||
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 PyQt5.QtGui import QDesktopServices
|
||||
|
||||
from UM.Message import Message
|
||||
from UM.i18n import i18nCatalog
|
||||
from UM.Logger import Logger
|
||||
from UM.Message import Message
|
||||
from UM.Resources import Resources # To find QML files.
|
||||
from UM.Signal import postponeSignals, CompressTechnique
|
||||
|
||||
import cura.CuraApplication # Imported like this to prevent circular imports.
|
||||
import cura.CuraApplication # Imported like this to prevent cirmanagecular imports.
|
||||
from cura.Machines.ContainerTree import ContainerTree
|
||||
from cura.Settings.CuraContainerRegistry import CuraContainerRegistry # To find the sets of materials belonging to each other, and currently loaded extruder stacks.
|
||||
from cura.UltimakerCloud.CloudMaterialSync import CloudMaterialSync
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from cura.Machines.MaterialNode import MaterialNode
|
||||
@ -33,6 +33,7 @@ class MaterialManagementModel(QObject):
|
||||
|
||||
def __init__(self, parent: Optional[QObject] = None) -> None:
|
||||
super().__init__(parent = parent)
|
||||
self._material_sync = CloudMaterialSync(parent=self)
|
||||
self._checkIfNewMaterialsWereInstalled()
|
||||
|
||||
def _checkIfNewMaterialsWereInstalled(self) -> None:
|
||||
@ -89,6 +90,7 @@ class MaterialManagementModel(QObject):
|
||||
elif sync_message_action == "learn_more":
|
||||
QDesktopServices.openUrl(QUrl("https://support.ultimaker.com/hc/en-us/articles/360013137919?utm_source=cura&utm_medium=software&utm_campaign=sync-material-printer-message"))
|
||||
|
||||
|
||||
@pyqtSlot("QVariant", result = bool)
|
||||
def canMaterialBeRemoved(self, material_node: "MaterialNode") -> bool:
|
||||
"""Can a certain material be deleted, or is it still in use in one of the container stacks anywhere?
|
||||
@ -323,52 +325,10 @@ class MaterialManagementModel(QObject):
|
||||
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:
|
||||
@pyqtSlot()
|
||||
def openSyncAllWindow(self) -> None:
|
||||
"""
|
||||
Get the preferred path to export materials to.
|
||||
Opens the window to sync all materials.
|
||||
"""
|
||||
self._material_sync.openSyncAllWindow()
|
||||
|
||||
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()
|
||||
|
||||
try:
|
||||
archive = zipfile.ZipFile(file_path.toLocalFile(), "w", compression = zipfile.ZIP_DEFLATED)
|
||||
except OSError as e:
|
||||
Logger.log("e", f"Can't write to destination {file_path.toLocalFile()}: {type(e)} - {str(e)}")
|
||||
error_message = Message(
|
||||
text = catalog.i18nc("@error:text Followed by an error message of why it could not save", "Could not save material archive to {filename}:").format(filename = file_path.toLocalFile()) + " " + str(e),
|
||||
title = catalog.i18nc("@error:title", "Failed to save material archive"),
|
||||
message_type = Message.MessageType.ERROR
|
||||
)
|
||||
error_message.show()
|
||||
return
|
||||
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
|
||||
try:
|
||||
archive.writestr(filename, material.serialize())
|
||||
except OSError as e:
|
||||
Logger.log("e", f"An error has occurred while writing the material \'{metadata['id']}\' in the file \'{filename}\': {e}.")
|
||||
|
@ -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.
|
||||
|
||||
from UM.FileHandler.FileHandler import FileHandler #For typing.
|
||||
@ -114,6 +114,11 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice):
|
||||
return b"".join(file_data_bytes_list)
|
||||
|
||||
def _update(self) -> None:
|
||||
"""
|
||||
Update the connection state of this device.
|
||||
|
||||
This is called on regular intervals.
|
||||
"""
|
||||
if self._last_response_time:
|
||||
time_since_last_response = time() - self._last_response_time
|
||||
else:
|
||||
@ -127,11 +132,11 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice):
|
||||
if time_since_last_response > self._timeout_time >= time_since_last_request:
|
||||
# Go (or stay) into timeout.
|
||||
if self._connection_state_before_timeout is None:
|
||||
self._connection_state_before_timeout = self._connection_state
|
||||
self._connection_state_before_timeout = self.connectionState
|
||||
|
||||
self.setConnectionState(ConnectionState.Closed)
|
||||
|
||||
elif self._connection_state == ConnectionState.Closed:
|
||||
elif self.connectionState == ConnectionState.Closed:
|
||||
# Go out of timeout.
|
||||
if self._connection_state_before_timeout is not None: # sanity check, but it should never be None here
|
||||
self.setConnectionState(self._connection_state_before_timeout)
|
||||
@ -361,7 +366,7 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice):
|
||||
|
||||
self._last_response_time = time()
|
||||
|
||||
if self._connection_state == ConnectionState.Connecting:
|
||||
if self.connectionState == ConnectionState.Connecting:
|
||||
self.setConnectionState(ConnectionState.Connected)
|
||||
|
||||
callback_key = reply.url().toString() + str(reply.operation())
|
||||
|
@ -1,11 +1,13 @@
|
||||
# Copyright (c) 2018 Ultimaker B.V.
|
||||
# Copyright (c) 2021 Ultimaker B.V.
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
from enum import IntEnum
|
||||
from typing import Callable, List, Optional, Union
|
||||
|
||||
from PyQt5.QtCore import pyqtProperty, pyqtSignal, QObject, QTimer, QUrl
|
||||
from PyQt5.QtWidgets import QMessageBox
|
||||
|
||||
import cura.CuraApplication # Imported like this to prevent circular imports.
|
||||
from UM.Logger import Logger
|
||||
from UM.Signal import signalemitter
|
||||
from UM.Qt.QtApplication import QtApplication
|
||||
@ -120,11 +122,22 @@ class PrinterOutputDevice(QObject, OutputDevice):
|
||||
callback(QMessageBox.Yes)
|
||||
|
||||
def isConnected(self) -> bool:
|
||||
return self._connection_state != ConnectionState.Closed and self._connection_state != ConnectionState.Error
|
||||
"""
|
||||
Returns whether we could theoretically send commands to this printer.
|
||||
:return: `True` if we are connected, or `False` if not.
|
||||
"""
|
||||
return self.connectionState != ConnectionState.Closed and self.connectionState != ConnectionState.Error
|
||||
|
||||
def setConnectionState(self, connection_state: "ConnectionState") -> None:
|
||||
if self._connection_state != connection_state:
|
||||
"""
|
||||
Store the connection state of the printer.
|
||||
|
||||
Causes everything that displays the connection state to update its QML models.
|
||||
:param connection_state: The new connection state to store.
|
||||
"""
|
||||
if self.connectionState != connection_state:
|
||||
self._connection_state = connection_state
|
||||
cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack().setMetaDataEntry("is_online", self.isConnected())
|
||||
self.connectionStateChanged.emit(self._id)
|
||||
|
||||
@pyqtProperty(int, constant = True)
|
||||
@ -133,6 +146,10 @@ class PrinterOutputDevice(QObject, OutputDevice):
|
||||
|
||||
@pyqtProperty(int, notify = connectionStateChanged)
|
||||
def connectionState(self) -> "ConnectionState":
|
||||
"""
|
||||
Get the connection state of the printer, e.g. whether it is connected, still connecting, error state, etc.
|
||||
:return: The current connection state of this output device.
|
||||
"""
|
||||
return self._connection_state
|
||||
|
||||
def _update(self) -> None:
|
||||
|
256
cura/PrinterOutput/UploadMaterialsJob.py
Normal file
256
cura/PrinterOutput/UploadMaterialsJob.py
Normal file
@ -0,0 +1,256 @@
|
||||
# Copyright (c) 2021 Ultimaker B.V.
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import enum
|
||||
import functools # For partial methods to use as callbacks with information pre-filled.
|
||||
import json # To serialise metadata for API calls.
|
||||
import os # To delete the archive when we're done.
|
||||
from PyQt5.QtCore import QUrl
|
||||
import tempfile # To create an archive before we upload it.
|
||||
|
||||
import cura.CuraApplication # Imported like this to prevent circular imports.
|
||||
from cura.Settings.CuraContainerRegistry import CuraContainerRegistry # To find all printers to upload to.
|
||||
from cura.UltimakerCloud import UltimakerCloudConstants # To know where the API is.
|
||||
from cura.UltimakerCloud.UltimakerCloudScope import UltimakerCloudScope # To know how to communicate with this server.
|
||||
from UM.i18n import i18nCatalog
|
||||
from UM.Job import Job
|
||||
from UM.Logger import Logger
|
||||
from UM.Signal import Signal
|
||||
from UM.TaskManagement.HttpRequestManager import HttpRequestManager # To call the API.
|
||||
from UM.TaskManagement.HttpRequestScope import JsonDecoratorScope
|
||||
|
||||
from typing import Any, cast, Dict, List, Optional, TYPE_CHECKING
|
||||
if TYPE_CHECKING:
|
||||
from PyQt5.QtNetwork import QNetworkReply
|
||||
from cura.UltimakerCloud.CloudMaterialSync import CloudMaterialSync
|
||||
|
||||
catalog = i18nCatalog("cura")
|
||||
|
||||
|
||||
class UploadMaterialsError(Exception):
|
||||
"""
|
||||
Class to indicate something went wrong while uploading.
|
||||
"""
|
||||
pass
|
||||
|
||||
|
||||
class UploadMaterialsJob(Job):
|
||||
"""
|
||||
Job that uploads a set of materials to the Digital Factory.
|
||||
|
||||
The job has a number of stages:
|
||||
- First, it generates an archive of all materials. This typically takes a lot of processing power during which the
|
||||
GIL remains locked.
|
||||
- Then it requests the API to upload an archive.
|
||||
- Then it uploads the archive to the URL given by the first request.
|
||||
- Then it tells the API that the archive can be distributed to the printers.
|
||||
"""
|
||||
|
||||
UPLOAD_REQUEST_URL = f"{UltimakerCloudConstants.CuraCloudAPIRoot}/connect/v1/materials/upload"
|
||||
UPLOAD_CONFIRM_URL = UltimakerCloudConstants.CuraCloudAPIRoot + "/connect/v1/clusters/{cluster_id}/printers/{cluster_printer_id}/action/import_material"
|
||||
|
||||
class Result(enum.IntEnum):
|
||||
SUCCESS = 0
|
||||
FAILED = 1
|
||||
|
||||
class PrinterStatus(enum.Enum):
|
||||
UPLOADING = "uploading"
|
||||
SUCCESS = "success"
|
||||
FAILED = "failed"
|
||||
|
||||
def __init__(self, material_sync: "CloudMaterialSync"):
|
||||
super().__init__()
|
||||
self._material_sync = material_sync
|
||||
self._scope = JsonDecoratorScope(UltimakerCloudScope(cura.CuraApplication.CuraApplication.getInstance())) # type: JsonDecoratorScope
|
||||
self._archive_filename = None # type: Optional[str]
|
||||
self._archive_remote_id = None # type: Optional[str] # ID that the server gives to this archive. Used to communicate about the archive to the server.
|
||||
self._printer_sync_status = {} # type: Dict[str, str]
|
||||
self._printer_metadata = [] # type: List[Dict[str, Any]]
|
||||
self.processProgressChanged.connect(self._onProcessProgressChanged)
|
||||
|
||||
uploadCompleted = Signal() # Triggered when the job is really complete, including uploading to the cloud.
|
||||
processProgressChanged = Signal() # Triggered when we've made progress creating the archive.
|
||||
uploadProgressChanged = Signal() # Triggered when we've made progress with the complete job. This signal emits a progress fraction (0-1) as well as the status of every printer.
|
||||
|
||||
def run(self) -> None:
|
||||
"""
|
||||
Generates an archive of materials and starts uploading that archive to the cloud.
|
||||
"""
|
||||
self._printer_metadata = CuraContainerRegistry.getInstance().findContainerStacksMetadata(
|
||||
type = "machine",
|
||||
connection_type = "3", # Only cloud printers.
|
||||
is_online = "True", # Only online printers. Otherwise the server gives an error.
|
||||
host_guid = "*", # Required metadata field. Otherwise we get a KeyError.
|
||||
um_cloud_cluster_id = "*" # Required metadata field. Otherwise we get a KeyError.
|
||||
)
|
||||
for printer in self._printer_metadata:
|
||||
self._printer_sync_status[printer["host_guid"]] = self.PrinterStatus.UPLOADING.value
|
||||
|
||||
try:
|
||||
archive_file = tempfile.NamedTemporaryFile("wb", delete = False)
|
||||
archive_file.close()
|
||||
self._archive_filename = archive_file.name
|
||||
self._material_sync.exportAll(QUrl.fromLocalFile(self._archive_filename), notify_progress = self.processProgressChanged)
|
||||
except OSError as e:
|
||||
Logger.error(f"Failed to create archive of materials to sync with printers: {type(e)} - {e}")
|
||||
self.failed(UploadMaterialsError(catalog.i18nc("@text:error", "Failed to create archive of materials to sync with printers.")))
|
||||
return
|
||||
|
||||
try:
|
||||
file_size = os.path.getsize(self._archive_filename)
|
||||
except OSError as e:
|
||||
Logger.error(f"Failed to load the archive of materials to sync it with printers: {type(e)} - {e}")
|
||||
self.failed(UploadMaterialsError(catalog.i18nc("@text:error", "Failed to load the archive of materials to sync it with printers.")))
|
||||
return
|
||||
|
||||
request_metadata = {
|
||||
"data": {
|
||||
"file_size": file_size,
|
||||
"material_profile_name": "cura.umm", # File name can be anything as long as it's .umm. It's not used by anyone.
|
||||
"content_type": "application/zip", # This endpoint won't receive files of different MIME types.
|
||||
"origin": "cura" # Some identifier against hackers intercepting this upload request, apparently.
|
||||
}
|
||||
}
|
||||
request_payload = json.dumps(request_metadata).encode("UTF-8")
|
||||
|
||||
http = HttpRequestManager.getInstance()
|
||||
http.put(
|
||||
url = self.UPLOAD_REQUEST_URL,
|
||||
data = request_payload,
|
||||
callback = self.onUploadRequestCompleted,
|
||||
error_callback = self.onError,
|
||||
scope = self._scope
|
||||
)
|
||||
|
||||
def onUploadRequestCompleted(self, reply: "QNetworkReply") -> None:
|
||||
"""
|
||||
Triggered when we successfully requested to upload a material archive.
|
||||
|
||||
We then need to start uploading the material archive to the URL that the request answered with.
|
||||
:param reply: The reply from the server to our request to upload an archive.
|
||||
"""
|
||||
response_data = HttpRequestManager.readJSON(reply)
|
||||
if response_data is None:
|
||||
Logger.error(f"Invalid response to material upload request. Could not parse JSON data.")
|
||||
self.failed(UploadMaterialsError(catalog.i18nc("@text:error", "The response from Digital Factory appears to be corrupted.")))
|
||||
return
|
||||
if "data" not in response_data:
|
||||
Logger.error(f"Invalid response to material upload request: Missing 'data' field that contains the entire response.")
|
||||
self.failed(UploadMaterialsError(catalog.i18nc("@text:error", "The response from Digital Factory is missing important information.")))
|
||||
return
|
||||
if "upload_url" not in response_data["data"]:
|
||||
Logger.error(f"Invalid response to material upload request: Missing 'upload_url' field to upload archive to.")
|
||||
self.failed(UploadMaterialsError(catalog.i18nc("@text:error", "The response from Digital Factory is missing important information.")))
|
||||
return
|
||||
if "material_profile_id" not in response_data["data"]:
|
||||
Logger.error(f"Invalid response to material upload request: Missing 'material_profile_id' to communicate about the materials with the server.")
|
||||
self.failed(UploadMaterialsError(catalog.i18nc("@text:error", "The response from Digital Factory is missing important information.")))
|
||||
return
|
||||
|
||||
upload_url = response_data["data"]["upload_url"]
|
||||
self._archive_remote_id = response_data["data"]["material_profile_id"]
|
||||
try:
|
||||
with open(cast(str, self._archive_filename), "rb") as f:
|
||||
file_data = f.read()
|
||||
except OSError as e:
|
||||
Logger.error(f"Failed to load archive back in for sending to cloud: {type(e)} - {e}")
|
||||
self.failed(UploadMaterialsError(catalog.i18nc("@text:error", "Failed to load the archive of materials to sync it with printers.")))
|
||||
return
|
||||
http = HttpRequestManager.getInstance()
|
||||
http.put(
|
||||
url = upload_url,
|
||||
data = file_data,
|
||||
callback = self.onUploadCompleted,
|
||||
error_callback = self.onError,
|
||||
scope = self._scope
|
||||
)
|
||||
|
||||
def onUploadCompleted(self, reply: "QNetworkReply") -> None:
|
||||
"""
|
||||
When we've successfully uploaded the archive to the cloud, we need to notify the API to start syncing that
|
||||
archive to every printer.
|
||||
:param reply: The reply from the cloud storage when the upload succeeded.
|
||||
"""
|
||||
for container_stack in self._printer_metadata:
|
||||
cluster_id = container_stack["um_cloud_cluster_id"]
|
||||
printer_id = container_stack["host_guid"]
|
||||
|
||||
http = HttpRequestManager.getInstance()
|
||||
http.post(
|
||||
url = self.UPLOAD_CONFIRM_URL.format(cluster_id = cluster_id, cluster_printer_id = printer_id),
|
||||
callback = functools.partial(self.onUploadConfirmed, printer_id),
|
||||
error_callback = functools.partial(self.onUploadConfirmed, printer_id), # Let this same function handle the error too.
|
||||
scope = self._scope,
|
||||
data = json.dumps({"data": {"material_profile_id": self._archive_remote_id}}).encode("UTF-8")
|
||||
)
|
||||
|
||||
def onUploadConfirmed(self, printer_id: str, reply: "QNetworkReply", error: Optional["QNetworkReply.NetworkError"] = None) -> None:
|
||||
"""
|
||||
Triggered when we've got a confirmation that the material is synced with the printer, or that syncing failed.
|
||||
|
||||
If syncing succeeded we mark this printer as having the status "success". If it failed we mark the printer as
|
||||
"failed". If this is the last upload that needed to be completed, we complete the job with either a success
|
||||
state (every printer successfully synced) or a failed state (any printer failed).
|
||||
:param printer_id: The printer host_guid that we completed syncing with.
|
||||
:param reply: The reply that the server gave to confirm.
|
||||
:param error: If the request failed, this error gives an indication what happened.
|
||||
"""
|
||||
if error is not None:
|
||||
Logger.error(f"Failed to confirm uploading material archive to printer {printer_id}: {error}")
|
||||
self._printer_sync_status[printer_id] = self.PrinterStatus.FAILED.value
|
||||
else:
|
||||
self._printer_sync_status[printer_id] = self.PrinterStatus.SUCCESS.value
|
||||
|
||||
still_uploading = len([val for val in self._printer_sync_status.values() if val == self.PrinterStatus.UPLOADING.value])
|
||||
self.uploadProgressChanged.emit(0.8 + (len(self._printer_sync_status) - still_uploading) / len(self._printer_sync_status), self.getPrinterSyncStatus())
|
||||
|
||||
if still_uploading == 0: # This is the last response to be processed.
|
||||
if self.PrinterStatus.FAILED.value in self._printer_sync_status.values():
|
||||
self.setResult(self.Result.FAILED)
|
||||
self.setError(UploadMaterialsError(catalog.i18nc("@text:error", "Failed to connect to Digital Factory to sync materials with some of the printers.")))
|
||||
else:
|
||||
self.setResult(self.Result.SUCCESS)
|
||||
self.uploadCompleted.emit(self.getResult(), self.getError())
|
||||
|
||||
def onError(self, reply: "QNetworkReply", error: Optional["QNetworkReply.NetworkError"]) -> None:
|
||||
"""
|
||||
Used as callback from HTTP requests when the request failed.
|
||||
|
||||
The given network error from the `HttpRequestManager` is logged, and the job is marked as failed.
|
||||
:param reply: The main reply of the server. This reply will most likely not be valid.
|
||||
:param error: The network error (Qt's enum) that occurred.
|
||||
"""
|
||||
Logger.error(f"Failed to upload material archive: {error}")
|
||||
self.failed(UploadMaterialsError(catalog.i18nc("@text:error", "Failed to connect to Digital Factory.")))
|
||||
|
||||
def getPrinterSyncStatus(self) -> Dict[str, str]:
|
||||
"""
|
||||
For each printer, identified by host_guid, this gives the current status of uploading the material archive.
|
||||
|
||||
The possible states are given in the PrinterStatus enum.
|
||||
:return: A dictionary with printer host_guids as keys, and their status as values.
|
||||
"""
|
||||
return self._printer_sync_status
|
||||
|
||||
def failed(self, error: UploadMaterialsError) -> None:
|
||||
"""
|
||||
Helper function for when we have a general failure.
|
||||
|
||||
This sets the sync status for all printers to failed, sets the error on
|
||||
the job and the result of the job to FAILED.
|
||||
:param error: An error to show to the user.
|
||||
"""
|
||||
self.setResult(self.Result.FAILED)
|
||||
self.setError(error)
|
||||
for printer_id in self._printer_sync_status:
|
||||
self._printer_sync_status[printer_id] = self.PrinterStatus.FAILED.value
|
||||
self.uploadProgressChanged.emit(1.0, self.getPrinterSyncStatus())
|
||||
self.uploadCompleted.emit(self.getResult(), self.getError())
|
||||
|
||||
def _onProcessProgressChanged(self, progress: float) -> None:
|
||||
"""
|
||||
When we progress in the process of uploading materials, we not only signal the new progress (float from 0 to 1)
|
||||
but we also signal the current status of every printer. These are emitted as the two parameters of the signal.
|
||||
:param progress: The progress of this job, between 0 and 1.
|
||||
"""
|
||||
self.uploadProgressChanged.emit(progress * 0.8, self.getPrinterSyncStatus()) # The processing is 80% of the progress bar.
|
@ -1191,7 +1191,7 @@ class MachineManager(QObject):
|
||||
|
||||
self.setIntentByCategory(quality_changes_group.intent_category)
|
||||
self._reCalculateNumUserSettings()
|
||||
|
||||
self.correctExtruderSettings()
|
||||
self.activeQualityGroupChanged.emit()
|
||||
self.activeQualityChangesGroupChanged.emit()
|
||||
|
||||
|
@ -61,6 +61,10 @@ class SettingInheritanceManager(QObject):
|
||||
result.append(key)
|
||||
return result
|
||||
|
||||
@pyqtSlot(str, str, result = bool)
|
||||
def hasOverrides(self, key: str, extruder_index: str):
|
||||
return key in self.getOverridesForExtruder(key, extruder_index)
|
||||
|
||||
@pyqtSlot(str, str, result = "QStringList")
|
||||
def getOverridesForExtruder(self, key: str, extruder_index: str) -> List[str]:
|
||||
if self._global_container_stack is None:
|
||||
|
217
cura/UltimakerCloud/CloudMaterialSync.py
Normal file
217
cura/UltimakerCloud/CloudMaterialSync.py
Normal file
@ -0,0 +1,217 @@
|
||||
# Copyright (c) 2021 Ultimaker B.V.
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject, QUrl
|
||||
from PyQt5.QtGui import QDesktopServices
|
||||
from typing import Dict, Optional, TYPE_CHECKING
|
||||
import zipfile # To export all materials in a .zip archive.
|
||||
|
||||
import cura.CuraApplication # Imported like this to prevent circular imports.
|
||||
from UM.Resources import Resources
|
||||
from cura.PrinterOutput.UploadMaterialsJob import UploadMaterialsJob, UploadMaterialsError # To export materials to the output printer.
|
||||
from cura.Settings.CuraContainerRegistry import CuraContainerRegistry
|
||||
from UM.i18n import i18nCatalog
|
||||
from UM.Logger import Logger
|
||||
from UM.Message import Message
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from UM.Signal import Signal
|
||||
catalog = i18nCatalog("cura")
|
||||
|
||||
class CloudMaterialSync(QObject):
|
||||
"""
|
||||
Handles the synchronisation of material profiles with cloud accounts.
|
||||
"""
|
||||
|
||||
def __init__(self, parent: QObject = None):
|
||||
super().__init__(parent)
|
||||
self.sync_all_dialog = None # type: Optional[QObject]
|
||||
self._export_upload_status = "idle"
|
||||
self._checkIfNewMaterialsWereInstalled()
|
||||
self._export_progress = 0.0
|
||||
self._printer_status = {} # type: Dict[str, str]
|
||||
|
||||
def _checkIfNewMaterialsWereInstalled(self) -> None:
|
||||
"""
|
||||
Checks whether new material packages were installed in the latest startup. If there were, then it shows
|
||||
a message prompting the user to sync the materials with their printers.
|
||||
"""
|
||||
application = cura.CuraApplication.CuraApplication.getInstance()
|
||||
for package_id, package_data in application.getPackageManager().getPackagesInstalledOnStartup().items():
|
||||
if package_data["package_info"]["package_type"] == "material":
|
||||
# At least one new material was installed
|
||||
self._showSyncNewMaterialsMessage()
|
||||
break
|
||||
|
||||
def openSyncAllWindow(self):
|
||||
|
||||
self.reset()
|
||||
|
||||
if self.sync_all_dialog is None:
|
||||
qml_path = Resources.getPath(cura.CuraApplication.CuraApplication.ResourceTypes.QmlFiles, "Preferences",
|
||||
"Materials", "MaterialsSyncDialog.qml")
|
||||
self.sync_all_dialog = cura.CuraApplication.CuraApplication.getInstance().createQmlComponent(
|
||||
qml_path, {})
|
||||
if self.sync_all_dialog is None: # Failed to load QML file.
|
||||
return
|
||||
self.sync_all_dialog.setProperty("syncModel", self)
|
||||
self.sync_all_dialog.setProperty("pageIndex", 0) # Return to first page.
|
||||
self.sync_all_dialog.setProperty("hasExportedUsb", False) # If the user exported USB before, reset that page.
|
||||
self.sync_all_dialog.show()
|
||||
|
||||
def _showSyncNewMaterialsMessage(self) -> None:
|
||||
sync_materials_message = Message(
|
||||
text = catalog.i18nc("@action:button",
|
||||
"Please sync the material profiles with your printers before starting to print."),
|
||||
title = catalog.i18nc("@action:button", "New materials installed"),
|
||||
message_type = Message.MessageType.WARNING,
|
||||
lifetime = 0
|
||||
)
|
||||
|
||||
sync_materials_message.addAction(
|
||||
"sync",
|
||||
name = catalog.i18nc("@action:button", "Sync materials with printers"),
|
||||
icon = "",
|
||||
description = "Sync your newly installed materials with your printers.",
|
||||
button_align = Message.ActionButtonAlignment.ALIGN_RIGHT
|
||||
)
|
||||
|
||||
sync_materials_message.addAction(
|
||||
"learn_more",
|
||||
name = catalog.i18nc("@action:button", "Learn more"),
|
||||
icon = "",
|
||||
description = "Learn more about syncing your newly installed materials with your printers.",
|
||||
button_align = Message.ActionButtonAlignment.ALIGN_LEFT,
|
||||
button_style = Message.ActionButtonStyle.LINK
|
||||
)
|
||||
sync_materials_message.actionTriggered.connect(self._onSyncMaterialsMessageActionTriggered)
|
||||
|
||||
# Show the message only if there are printers that support material export
|
||||
container_registry = cura.CuraApplication.CuraApplication.getInstance().getContainerRegistry()
|
||||
global_stacks = container_registry.findContainerStacks(type = "machine")
|
||||
if any([stack.supportsMaterialExport for stack in global_stacks]):
|
||||
sync_materials_message.show()
|
||||
|
||||
def _onSyncMaterialsMessageActionTriggered(self, sync_message: Message, sync_message_action: str):
|
||||
if sync_message_action == "sync":
|
||||
self.openSyncAllWindow()
|
||||
sync_message.hide()
|
||||
elif sync_message_action == "learn_more":
|
||||
QDesktopServices.openUrl(QUrl("https://support.ultimaker.com/hc/en-us/articles/360013137919?utm_source=cura&utm_medium=software&utm_campaign=sync-material-printer-message"))
|
||||
|
||||
@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, notify_progress: Optional["Signal"] = None) -> None:
|
||||
"""
|
||||
Export all materials to a certain file path.
|
||||
:param file_path: The path to export the materials to.
|
||||
"""
|
||||
registry = CuraContainerRegistry.getInstance()
|
||||
|
||||
# Create empty archive.
|
||||
try:
|
||||
archive = zipfile.ZipFile(file_path.toLocalFile(), "w", compression = zipfile.ZIP_DEFLATED)
|
||||
except OSError as e:
|
||||
Logger.log("e", f"Can't write to destination {file_path.toLocalFile()}: {type(e)} - {str(e)}")
|
||||
error_message = Message(
|
||||
text = catalog.i18nc("@message:text", "Could not save material archive to {}:").format(file_path.toLocalFile()) + " " + str(e),
|
||||
title = catalog.i18nc("@message:title", "Failed to save material archive"),
|
||||
message_type = Message.MessageType.ERROR
|
||||
)
|
||||
error_message.show()
|
||||
return
|
||||
|
||||
materials_metadata = registry.findInstanceContainersMetadata(type = "material")
|
||||
for index, metadata in enumerate(materials_metadata):
|
||||
if notify_progress is not None:
|
||||
progress = index / len(materials_metadata)
|
||||
notify_progress.emit(progress)
|
||||
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
|
||||
try:
|
||||
archive.writestr(filename, material.serialize())
|
||||
except OSError as e:
|
||||
Logger.log("e", f"An error has occurred while writing the material \'{metadata['id']}\' in the file \'{filename}\': {e}.")
|
||||
|
||||
exportUploadStatusChanged = pyqtSignal()
|
||||
|
||||
@pyqtProperty(str, notify = exportUploadStatusChanged)
|
||||
def exportUploadStatus(self) -> str:
|
||||
return self._export_upload_status
|
||||
|
||||
@pyqtSlot()
|
||||
def exportUpload(self) -> None:
|
||||
"""
|
||||
Export all materials and upload them to the user's account.
|
||||
"""
|
||||
self._export_upload_status = "uploading"
|
||||
self.exportUploadStatusChanged.emit()
|
||||
job = UploadMaterialsJob(self)
|
||||
job.uploadProgressChanged.connect(self._onUploadProgressChanged)
|
||||
job.uploadCompleted.connect(self.exportUploadCompleted)
|
||||
job.start()
|
||||
|
||||
def _onUploadProgressChanged(self, progress: float, printers_status: Dict[str, str]):
|
||||
self.setExportProgress(progress)
|
||||
self.setPrinterStatus(printers_status)
|
||||
|
||||
def exportUploadCompleted(self, job_result: UploadMaterialsJob.Result, job_error: Optional[Exception]):
|
||||
if not self.sync_all_dialog: # Shouldn't get triggered before the dialog is open, but better to check anyway.
|
||||
return
|
||||
if job_result == UploadMaterialsJob.Result.FAILED:
|
||||
if isinstance(job_error, UploadMaterialsError):
|
||||
self.sync_all_dialog.setProperty("syncStatusText", str(job_error))
|
||||
else: # Could be "None"
|
||||
self.sync_all_dialog.setProperty("syncStatusText", catalog.i18nc("@text", "Unknown error."))
|
||||
self._export_upload_status = "error"
|
||||
else:
|
||||
self._export_upload_status = "success"
|
||||
self.exportUploadStatusChanged.emit()
|
||||
|
||||
exportProgressChanged = pyqtSignal(float)
|
||||
|
||||
def setExportProgress(self, progress: float) -> None:
|
||||
self._export_progress = progress
|
||||
self.exportProgressChanged.emit(self._export_progress)
|
||||
|
||||
@pyqtProperty(float, fset = setExportProgress, notify = exportProgressChanged)
|
||||
def exportProgress(self) -> float:
|
||||
return self._export_progress
|
||||
|
||||
printerStatusChanged = pyqtSignal()
|
||||
|
||||
def setPrinterStatus(self, new_status: Dict[str, str]) -> None:
|
||||
self._printer_status = new_status
|
||||
self.printerStatusChanged.emit()
|
||||
|
||||
@pyqtProperty("QVariantMap", fset = setPrinterStatus, notify = printerStatusChanged)
|
||||
def printerStatus(self) -> Dict[str, str]:
|
||||
return self._printer_status
|
||||
|
||||
def reset(self) -> None:
|
||||
self.setPrinterStatus({})
|
||||
self.setExportProgress(0.0)
|
||||
self._export_upload_status = "idle"
|
||||
self.exportUploadStatusChanged.emit()
|
@ -1,9 +1,15 @@
|
||||
# Copyright (c) 2021 Ultimaker B.V.
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
from PyQt5.QtNetwork import QNetworkRequest
|
||||
|
||||
from UM.Logger import Logger
|
||||
from UM.TaskManagement.HttpRequestScope import DefaultUserAgentScope
|
||||
from cura.API import Account
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
if TYPE_CHECKING:
|
||||
from cura.CuraApplication import CuraApplication
|
||||
from cura.API.Account import Account
|
||||
|
||||
|
||||
class UltimakerCloudScope(DefaultUserAgentScope):
|
||||
@ -12,7 +18,7 @@ class UltimakerCloudScope(DefaultUserAgentScope):
|
||||
Also add the user agent headers (see DefaultUserAgentScope).
|
||||
"""
|
||||
|
||||
def __init__(self, application: CuraApplication):
|
||||
def __init__(self, application: "CuraApplication"):
|
||||
super().__init__(application)
|
||||
api = application.getCuraAPI()
|
||||
self._account = api.account # type: Account
|
||||
|
@ -123,6 +123,9 @@ class StartSliceJob(Job):
|
||||
Job.yieldThread()
|
||||
|
||||
for changed_setting_key in changed_setting_keys:
|
||||
if not stack.getProperty(changed_setting_key, "enabled"):
|
||||
continue
|
||||
|
||||
validation_state = stack.getProperty(changed_setting_key, "validationState")
|
||||
|
||||
if validation_state is None:
|
||||
|
@ -11,6 +11,8 @@
|
||||
# Modified by Jaime van Kessel (Ultimaker), j.vankessel@ultimaker.com to make it work for 15.10 / 2.x
|
||||
# Modified by Ghostkeeper (Ultimaker), rubend@tutanota.com, to debug.
|
||||
# Modified by Wes Hanney, https://github.com/novamxd, Retract Length + Speed, Clean up
|
||||
# Modified by Alex Jaxon, https://github.com/legend069, Added option to modify Build Volume Temperature
|
||||
|
||||
|
||||
# history / changelog:
|
||||
# V3.0.1: TweakAtZ-state default 1 (i.e. the plugin works without any TweakAtZ comment)
|
||||
@ -33,13 +35,17 @@
|
||||
# V5.0: Bugfix for fall back after one layer and doubled G0 commands when using print speed tweak, Initial version for Cura 2.x
|
||||
# V5.0.1: Bugfix for calling unknown property 'bedTemp' of previous settings storage and unknown variable 'speed'
|
||||
# V5.1: API Changes included for use with Cura 2.2
|
||||
# V5.2.0: Wes Hanney. Added support for changing Retract Length and Speed. Removed layer spread option. Fixed issue of cumulative ChangeZ
|
||||
# V5.2.0: Wes Hanney. Added support for changing Retract Length and Speed. Removed layer spread option. Fixed issue of cumulative ChangeAtZ
|
||||
# mods so they can now properly be stacked on top of each other. Applied code refactoring to clean up various coding styles. Added comments.
|
||||
# Broke up functions for clarity. Split up class so it can be debugged outside of Cura.
|
||||
# V5.2.1: Wes Hanney. Added support for firmware based retractions. Fixed issue of properly restoring previous values in single layer option.
|
||||
# Added support for outputting changes to LCD (untested). Added type hints to most functions and variables. Added more comments. Created GCodeCommand
|
||||
# class for better detection of G1 vs G10 or G11 commands, and accessing arguments. Moved most GCode methods to GCodeCommand class. Improved wording
|
||||
# of Single Layer vs Keep Layer to better reflect what was happening.
|
||||
# V5.3.0 Alex Jaxon, Added option to modify Build Volume Temperature keeping current format
|
||||
#
|
||||
|
||||
|
||||
|
||||
# Uses -
|
||||
# M220 S<factor in percent> - set speed factor override percentage
|
||||
@ -56,9 +62,9 @@ from ..Script import Script
|
||||
import re
|
||||
|
||||
|
||||
# this was broken up into a separate class so the main ChangeZ script could be debugged outside of Cura
|
||||
# this was broken up into a separate class so the main ChangeAtZ script could be debugged outside of Cura
|
||||
class ChangeAtZ(Script):
|
||||
version = "5.2.1"
|
||||
version = "5.3.0"
|
||||
|
||||
def getSettingDataString(self):
|
||||
return """{
|
||||
@ -69,7 +75,7 @@ class ChangeAtZ(Script):
|
||||
"settings": {
|
||||
"caz_enabled": {
|
||||
"label": "Enabled",
|
||||
"description": "Allows adding multiple ChangeZ mods and disabling them as needed.",
|
||||
"description": "Allows adding multiple ChangeAtZ mods and disabling them as needed.",
|
||||
"type": "bool",
|
||||
"default_value": true
|
||||
},
|
||||
@ -222,6 +228,23 @@ class ChangeAtZ(Script):
|
||||
"maximum_value_warning": "120",
|
||||
"enabled": "h1_Change_bedTemp"
|
||||
},
|
||||
"h1_Change_buildVolumeTemperature": {
|
||||
"label": "Change Build Volume Temperature",
|
||||
"description": "Select if Build Volume Temperature has to be changed",
|
||||
"type": "bool",
|
||||
"default_value": false
|
||||
},
|
||||
"h2_buildVolumeTemperature": {
|
||||
"label": "Build Volume Temperature",
|
||||
"description": "New Build Volume Temperature",
|
||||
"unit": "C",
|
||||
"type": "float",
|
||||
"default_value": 20,
|
||||
"minimum_value": "0",
|
||||
"minimum_value_warning": "10",
|
||||
"maximum_value_warning": "50",
|
||||
"enabled": "h1_Change_buildVolumeTemperature"
|
||||
},
|
||||
"i1_Change_extruderOne": {
|
||||
"label": "Change Extruder 1 Temp",
|
||||
"description": "Select if First Extruder Temperature has to be changed",
|
||||
@ -345,6 +368,7 @@ class ChangeAtZ(Script):
|
||||
self.setIntSettingIfEnabled(caz_instance, "g3_Change_flowrateOne", "flowrateOne", "g4_flowrateOne")
|
||||
self.setIntSettingIfEnabled(caz_instance, "g5_Change_flowrateTwo", "flowrateTwo", "g6_flowrateTwo")
|
||||
self.setFloatSettingIfEnabled(caz_instance, "h1_Change_bedTemp", "bedTemp", "h2_bedTemp")
|
||||
self.setFloatSettingIfEnabled(caz_instance, "h1_Change_buildVolumeTemperature", "buildVolumeTemperature", "h2_buildVolumeTemperature")
|
||||
self.setFloatSettingIfEnabled(caz_instance, "i1_Change_extruderOne", "extruderOne", "i2_extruderOne")
|
||||
self.setFloatSettingIfEnabled(caz_instance, "i3_Change_extruderTwo", "extruderTwo", "i4_extruderTwo")
|
||||
self.setIntSettingIfEnabled(caz_instance, "j1_Change_fanSpeed", "fanSpeed", "j2_fanSpeed")
|
||||
@ -776,6 +800,10 @@ class ChangeAtZProcessor:
|
||||
if "bedTemp" in values:
|
||||
codes.append("BedTemp: " + str(round(values["bedTemp"])))
|
||||
|
||||
# looking for wait for Build Volume Temperature
|
||||
if "buildVolumeTemperature" in values:
|
||||
codes.append("buildVolumeTemperature: " + str(round(values["buildVolumeTemperature"])))
|
||||
|
||||
# set our extruder one temp (if specified)
|
||||
if "extruderOne" in values:
|
||||
codes.append("Extruder 1 Temp: " + str(round(values["extruderOne"])))
|
||||
@ -858,6 +886,10 @@ class ChangeAtZProcessor:
|
||||
if "bedTemp" in values:
|
||||
codes.append("M140 S" + str(values["bedTemp"]))
|
||||
|
||||
# looking for wait for Build Volume Temperature
|
||||
if "buildVolumeTemperature" in values:
|
||||
codes.append("M141 S" + str(values["buildVolumeTemperature"]))
|
||||
|
||||
# set our extruder one temp (if specified)
|
||||
if "extruderOne" in values:
|
||||
codes.append("M104 S" + str(values["extruderOne"]) + " T0")
|
||||
@ -943,7 +975,7 @@ class ChangeAtZProcessor:
|
||||
# nothing to do
|
||||
return ""
|
||||
|
||||
# Returns the unmodified GCODE line from previous ChangeZ edits
|
||||
# Returns the unmodified GCODE line from previous ChangeAtZ edits
|
||||
@staticmethod
|
||||
def getOriginalLine(line: str) -> str:
|
||||
|
||||
@ -990,7 +1022,7 @@ class ChangeAtZProcessor:
|
||||
else:
|
||||
return self.currentZ >= self.targetZ
|
||||
|
||||
# Marks any current ChangeZ layer defaults in the layer for deletion
|
||||
# Marks any current ChangeAtZ layer defaults in the layer for deletion
|
||||
@staticmethod
|
||||
def markChangesForDeletion(layer: str):
|
||||
return re.sub(r";\[CAZD:", ";[CAZD:DELETE:", layer)
|
||||
@ -1288,7 +1320,7 @@ class ChangeAtZProcessor:
|
||||
# flag that we're inside our target layer
|
||||
self.insideTargetLayer = True
|
||||
|
||||
# Removes all the ChangeZ layer defaults from the given layer
|
||||
# Removes all the ChangeAtZ layer defaults from the given layer
|
||||
@staticmethod
|
||||
def removeMarkedChanges(layer: str) -> str:
|
||||
return re.sub(r";\[CAZD:DELETE:[\s\S]+?:CAZD\](\n|$)", "", layer)
|
||||
@ -1364,6 +1396,16 @@ class ChangeAtZProcessor:
|
||||
# move to the next command
|
||||
return
|
||||
|
||||
# handle Build Volume Temperature changes, really shouldn't want to wait for enclousure temp mid print though.
|
||||
if command.command == "M141" or command.command == "M191":
|
||||
|
||||
# get our bed temp if provided
|
||||
if "S" in command.arguments:
|
||||
self.lastValues["buildVolumeTemperature"] = command.getArgumentAsFloat("S")
|
||||
|
||||
# move to the next command
|
||||
return
|
||||
|
||||
# handle extruder temp changes
|
||||
if command.command == "M104" or command.command == "M109":
|
||||
|
||||
|
@ -6,6 +6,7 @@ from PyQt5.QtWidgets import QApplication
|
||||
|
||||
from UM.Application import Application
|
||||
from UM.Math.Vector import Vector
|
||||
from UM.Operations.TranslateOperation import TranslateOperation
|
||||
from UM.Tool import Tool
|
||||
from UM.Event import Event, MouseEvent
|
||||
from UM.Mesh.MeshBuilder import MeshBuilder
|
||||
@ -120,8 +121,8 @@ class SupportEraser(Tool):
|
||||
# First add node to the scene at the correct position/scale, before parenting, so the eraser mesh does not get scaled with the parent
|
||||
op.addOperation(AddSceneNodeOperation(node, self._controller.getScene().getRoot()))
|
||||
op.addOperation(SetParentOperation(node, parent))
|
||||
op.addOperation(TranslateOperation(node, position, set_position = True))
|
||||
op.push()
|
||||
node.setPosition(position, CuraSceneNode.TransformSpace.World)
|
||||
|
||||
CuraApplication.getInstance().getController().getScene().sceneChanged.emit(node)
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2020 Ultimaker B.V.
|
||||
# Copyright (c) 2021 Ultimaker B.V.
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import os
|
||||
@ -16,6 +16,7 @@ from UM.Util import parseBool
|
||||
from cura.API import Account
|
||||
from cura.API.Account import SyncState
|
||||
from cura.CuraApplication import CuraApplication
|
||||
from cura.Settings.CuraContainerRegistry import CuraContainerRegistry # To update printer metadata with information received about cloud printers.
|
||||
from cura.Settings.CuraStackBuilder import CuraStackBuilder
|
||||
from cura.Settings.GlobalStack import GlobalStack
|
||||
from cura.UltimakerCloud.UltimakerCloudConstants import META_UM_LINKED_TO_ACCOUNT
|
||||
@ -129,6 +130,8 @@ class CloudOutputDeviceManager:
|
||||
self._um_cloud_printers[device_id].setMetaDataEntry(META_UM_LINKED_TO_ACCOUNT, True)
|
||||
self._onDevicesDiscovered(new_clusters)
|
||||
|
||||
self._updateOnlinePrinters(all_clusters)
|
||||
|
||||
# Hide the current removed_printers_message, if there is any
|
||||
if self._removed_printers_message:
|
||||
self._removed_printers_message.actionTriggered.disconnect(self._onRemovedPrintersMessageActionTriggered)
|
||||
@ -154,6 +157,8 @@ class CloudOutputDeviceManager:
|
||||
self._syncing = False
|
||||
self._account.setSyncState(self.SYNC_SERVICE_NAME, SyncState.SUCCESS)
|
||||
|
||||
Logger.debug("Synced cloud printers with account.")
|
||||
|
||||
def _onGetRemoteClusterFailed(self, reply: QNetworkReply, error: QNetworkReply.NetworkError) -> None:
|
||||
self._syncing = False
|
||||
self._account.setSyncState(self.SYNC_SERVICE_NAME, SyncState.ERROR)
|
||||
@ -255,6 +260,16 @@ class CloudOutputDeviceManager:
|
||||
message_text = self.i18n_catalog.i18nc("info:status", "Printers added from Digital Factory:") + "<ul>" + device_names + "</ul>"
|
||||
message.setText(message_text)
|
||||
|
||||
def _updateOnlinePrinters(self, printer_responses: Dict[str, CloudClusterResponse]) -> None:
|
||||
"""
|
||||
Update the metadata of the printers to store whether they are online or not.
|
||||
:param printer_responses: The responses received from the API about the printer statuses.
|
||||
"""
|
||||
for container_stack in CuraContainerRegistry.getInstance().findContainerStacks(type = "machine"):
|
||||
cluster_id = container_stack.getMetaDataEntry("um_cloud_cluster_id", "")
|
||||
if cluster_id in printer_responses:
|
||||
container_stack.setMetaDataEntry("is_online", printer_responses[cluster_id].is_online)
|
||||
|
||||
def _updateOutdatedMachine(self, outdated_machine: GlobalStack, new_cloud_output_device: CloudOutputDevice) -> None:
|
||||
"""
|
||||
Update the cloud metadata of a pre-existing machine that is rediscovered (e.g. if the printer was removed and
|
||||
|
@ -3,6 +3,7 @@
|
||||
|
||||
import configparser
|
||||
import io
|
||||
import json
|
||||
import os.path
|
||||
from typing import List, Tuple
|
||||
|
||||
@ -49,6 +50,28 @@ class VersionUpgrade411to412(VersionUpgrade):
|
||||
# Update version number.
|
||||
parser["metadata"]["setting_version"] = "19"
|
||||
|
||||
# If the account scope in 4.11 is outdated, delete it so that the user is enforced to log in again and get the
|
||||
# correct permissions.
|
||||
new_scopes = {"account.user.read",
|
||||
"drive.backup.read",
|
||||
"drive.backup.write",
|
||||
"packages.download",
|
||||
"packages.rating.read",
|
||||
"packages.rating.write",
|
||||
"connect.cluster.read",
|
||||
"connect.cluster.write",
|
||||
"library.project.read",
|
||||
"library.project.write",
|
||||
"cura.printjob.read",
|
||||
"cura.printjob.write",
|
||||
"cura.mesh.read",
|
||||
"cura.mesh.write",
|
||||
"cura.material.write"}
|
||||
if "ultimaker_auth_data" in parser["general"]:
|
||||
ultimaker_auth_data = json.loads(parser["general"]["ultimaker_auth_data"])
|
||||
if new_scopes - set(ultimaker_auth_data["scope"].split(" ")):
|
||||
parser["general"]["ultimaker_auth_data"] = "{}"
|
||||
|
||||
result = io.StringIO()
|
||||
parser.write(result)
|
||||
return [filename], [result.getvalue()]
|
||||
|
@ -1943,7 +1943,7 @@
|
||||
"description": "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the traditional default angles (45 and 135 degrees for the lines and zig zag patterns and 45 degrees for all other patterns).",
|
||||
"type": "[int]",
|
||||
"default_value": "[ ]",
|
||||
"enabled": "infill_pattern != 'lightning' and infill_pattern != 'concentric' and infill_sparse_density > 0",
|
||||
"enabled": "infill_pattern not in ('concentric', 'cross', 'cross_3d', 'gyroid', 'lightning') and infill_sparse_density > 0",
|
||||
"limit_to_extruder": "infill_extruder_nr",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
|
@ -95,9 +95,6 @@
|
||||
},
|
||||
"skin_monotonic" : {
|
||||
"value": true
|
||||
},
|
||||
"top_bottom_pattern" : {
|
||||
"value": "'zigzag'"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -168,7 +168,6 @@
|
||||
"support_z_distance": { "value": "0" },
|
||||
"switch_extruder_prime_speed": { "value": "15" },
|
||||
"switch_extruder_retraction_amount": { "value": "8" },
|
||||
"top_bottom_pattern" : {"value": "'zigzag'"},
|
||||
"top_bottom_thickness": { "value": "1" },
|
||||
"travel_avoid_distance": { "value": "3 if extruders_enabled_count > 1 else machine_nozzle_tip_outer_diameter / 2 * 1.5" },
|
||||
"wall_0_inset": { "value": "0" },
|
||||
|
@ -160,7 +160,6 @@
|
||||
"support_z_distance": { "value": "0" },
|
||||
"switch_extruder_prime_speed": { "value": "15" },
|
||||
"switch_extruder_retraction_amount": { "value": "8" },
|
||||
"top_bottom_pattern" : {"value": "'zigzag'"},
|
||||
"top_bottom_thickness": { "value": "1" },
|
||||
"travel_avoid_supports": { "value": "True" },
|
||||
"travel_avoid_distance": { "value": "3 if extruders_enabled_count > 1 else machine_nozzle_tip_outer_diameter / 2 * 1.5" },
|
||||
|
@ -161,7 +161,6 @@
|
||||
"support_z_distance": { "value": "0" },
|
||||
"switch_extruder_prime_speed": { "value": "15" },
|
||||
"switch_extruder_retraction_amount": { "value": "8" },
|
||||
"top_bottom_pattern" : {"value": "'zigzag'"},
|
||||
"top_bottom_thickness": { "value": "1" },
|
||||
"travel_avoid_supports": { "value": "True" },
|
||||
"travel_avoid_distance": { "value": "3 if extruders_enabled_count > 1 else machine_nozzle_tip_outer_diameter / 2 * 1.5" },
|
||||
|
47
resources/definitions/xyzprinting_base.def.json
Normal file
47
resources/definitions/xyzprinting_base.def.json
Normal file
@ -0,0 +1,47 @@
|
||||
{
|
||||
"name": "XYZprinting Base Printer",
|
||||
"version": 2,
|
||||
"inherits": "fdmprinter",
|
||||
"metadata": {
|
||||
"visible": false,
|
||||
"author": "XYZprinting Software",
|
||||
"manufacturer": "XYZprinting",
|
||||
"file_formats": "text/x-gcode",
|
||||
"first_start_actions": ["MachineSettingsAction"],
|
||||
"machine_extruder_trains":
|
||||
{
|
||||
"0": "xyzprinting_base_extruder_0"
|
||||
},
|
||||
"has_materials": true,
|
||||
"has_variants": true,
|
||||
"has_machine_quality": true,
|
||||
"preferred_quality_type": "normal",
|
||||
"preferred_material": "generic_pla",
|
||||
"variants_name": "Nozzle Type"
|
||||
},
|
||||
"overrides": {
|
||||
"machine_heated_bed": {"default_value": true},
|
||||
"machine_max_feedrate_x": { "value": 500 },
|
||||
"machine_max_feedrate_y": { "value": 500 },
|
||||
"machine_max_feedrate_z": { "value": 10 },
|
||||
"machine_max_feedrate_e": { "value": 50 },
|
||||
"machine_max_acceleration_x": { "value": 1500 },
|
||||
"machine_max_acceleration_y": { "value": 1500 },
|
||||
"machine_max_acceleration_z": { "value": 500 },
|
||||
"machine_max_acceleration_e": { "value": 5000 },
|
||||
"machine_acceleration": { "value": 500 },
|
||||
"machine_max_jerk_xy": { "value": 10 },
|
||||
"machine_max_jerk_z": { "value": 0.4 },
|
||||
"machine_max_jerk_e": { "value": 5 },
|
||||
"adhesion_type": { "value": "'none' if support_enable else 'brim'" },
|
||||
"brim_width": { "value": 10.0 },
|
||||
"cool_fan_speed": { "value": 100 },
|
||||
"cool_fan_speed_0": { "value": 0 }
|
||||
},
|
||||
|
||||
|
||||
"machine_gcode_flavor": {"default_value": "RepRap (Marlin/Sprinter)"},
|
||||
"machine_start_gcode": {"default_value": ";Start Gcode\nG90 ;absolute positioning\nM118 X25.00 Y25.00 Z20.00 T0\nM140 S{material_bed_temperature_layer_0} T0 ;Heat bed up to first layer temperature\nM104 S{material_print_temperature_layer_0} T0 ;Set nozzle temperature to first layer temperature\nM107 ;start with the fan off\nG90\nG28\nM132 X Y Z A B\nG1 Z50.000 F420\nG161 X Y F3300\nM7 T0\nM6 T0\nM651\nM907 X100 Y100 Z40 A100 B20 ;Digital potentiometer value\nM108 T0\n;Purge line\nG1 X-110.00 Y-60.00 F4800\nG1 Z{layer_height_0} F420\nG1 X-110.00 Y60.00 E17,4 F1200\n;Purge line end"},
|
||||
"machine_end_gcode": {"default_value": ";end gcode\nM104 S0 T0\nM140 S0 T0\nG162 Z F1800\nG28 X Y\nM652\nM132 X Y Z A B\nG91\nM18"
|
||||
}
|
||||
}
|
52
resources/definitions/xyzprinting_da_vinci_1p0_pro.def.json
Normal file
52
resources/definitions/xyzprinting_da_vinci_1p0_pro.def.json
Normal file
@ -0,0 +1,52 @@
|
||||
{
|
||||
"version": 2,
|
||||
"name": "XYZprinting da Vinci 1.0 Pro",
|
||||
"inherits": "xyzprinting_base",
|
||||
"metadata": {
|
||||
"author": "XYZprinting Software",
|
||||
"manufacturer": "XYZprinting",
|
||||
"visible": true,
|
||||
"file_formats": "text/x-gcode",
|
||||
"has_machine_quality": true,
|
||||
"has_materials": true,
|
||||
"has_variants": true,
|
||||
"supports_usb_connection": true,
|
||||
"preferred_quality_type": "normal",
|
||||
"quality_definition": "xyzprinting_da_vinci_1p0_pro",
|
||||
"preferred_variant_name": "Copper 0.4mm Nozzle",
|
||||
"variants_name": "Nozzle Type",
|
||||
"machine_extruder_trains": {
|
||||
"0": "xyzprinting_da_vinci_1p0_pro_extruder_0"
|
||||
}
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"machine_name": { "default_value": "XYZprinting da Vinci 1.0 Pro" },
|
||||
"machine_shape": { "default_value": "rectangular"},
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_width": { "default_value": 200.00 },
|
||||
"machine_depth": { "default_value": 200.00 },
|
||||
"machine_height": { "default_value":200.00 },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
"machine_head_with_fans_polygon": {
|
||||
"default_value": [
|
||||
[ -20, -10 ],
|
||||
[ -20, 10 ],
|
||||
[ 10, 10 ],
|
||||
[ 10, -10 ]
|
||||
]
|
||||
},
|
||||
"material_flow_layer_0": {"value": 120},
|
||||
"cool_fan_enabled": { "default_value": true },
|
||||
"cool_fan_speed_0": { "value": 100 },
|
||||
"brim_line_count": { "value" : 5 },
|
||||
"skirt_line_count": { "default_value" : 5 },
|
||||
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
|
||||
"machine_start_gcode": {
|
||||
"default_value": "G28 ; home all axes\nG1 Z15 F5000 ; lift nozzle\nG92 E0\nG1 F200 E3\n"
|
||||
},
|
||||
"machine_end_gcode": {
|
||||
"default_value": "M104 S0 ; turn off temperature\nM105 S0; \nG28 X0 ; home X axis\nM84 ; disable motors\n"
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,53 @@
|
||||
{
|
||||
"version": 2,
|
||||
"name": "XYZprinting da Vinci Jr. 1.0A Pro",
|
||||
"inherits": "xyzprinting_base",
|
||||
"metadata": {
|
||||
"author": "XYZprinting Software",
|
||||
"manufacturer": "XYZprinting",
|
||||
"visible": true,
|
||||
"file_formats": "text/x-gcode",
|
||||
"has_machine_quality": true,
|
||||
"has_materials": true,
|
||||
"has_variants": true,
|
||||
"exclude_materials": ["generic_hips", "generic_petg", "generic_bam", "ultimaker_bam", "generic_pva", "ultimaker_pva", "generic_tough_pla", "ultimaker_tough_pla_black", "ultimaker_tough_pla_green", "ultimaker_tough_pla_red", "ultimaker_tough_pla_white", "generic_cffcpe", "generic_cffpa", "generic_gffcpe", "generic_gffpa", "structur3d_dap100silicone", "ultimaker_petg_blue", "ultimaker_petg_grey", "ultimaker_petg_black", "ultimaker_petg_green", "ultimaker_petg_white", "ultimaker_petg_orange", "ultimaker_petg_silver", "ultimaker_petg_yellow", "ultimaker_petg_transparent", "ultimaker_petg_red_translucent", "ultimaker_petg_blue_translucent", "ultimaker_petg_green_translucent", "ultimaker_petg_yellow_fluorescent", "ultimaker_petg_red" ],
|
||||
"supports_usb_connection": true,
|
||||
"preferred_quality_type": "normal",
|
||||
"quality_definition": "xyzprinting_da_vinci_jr_1p0a_pro",
|
||||
"preferred_variant_name": "Copper 0.4mm Nozzle",
|
||||
"variants_name": "Nozzle Type",
|
||||
"machine_extruder_trains": {
|
||||
"0": "xyzprinting_da_vinci_jr_1p0a_pro_extruder_0"
|
||||
}
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"machine_name": { "default_value": "XYZprinting da Vinci Jr. 1.0A Pro" },
|
||||
"machine_shape": { "default_value": "rectangular"},
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_width": { "default_value": 175.00 },
|
||||
"machine_depth": { "default_value": 175.00 },
|
||||
"machine_height": { "default_value":175.00 },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
"machine_head_with_fans_polygon": {
|
||||
"default_value": [
|
||||
[ -20, -10 ],
|
||||
[ -20, 10 ],
|
||||
[ 10, 10 ],
|
||||
[ 10, -10 ]
|
||||
]
|
||||
},
|
||||
"material_flow_layer_0": {"value": 120},
|
||||
"cool_fan_enabled": { "default_value": true },
|
||||
"cool_fan_speed_0": { "value": 100 },
|
||||
"brim_line_count": { "value" : 5 },
|
||||
"skirt_line_count": { "default_value" : 5 },
|
||||
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
|
||||
"machine_start_gcode": {
|
||||
"default_value": "G28 ; home all axes\nG1 Z15 F5000 ; lift nozzle\nG92 E0\nG1 F200 E3\n"
|
||||
},
|
||||
"machine_end_gcode": {
|
||||
"default_value": "M104 S0 ; turn off temperature\nM105 S0; \nG28 X0 ; home X axis\nM84 ; disable motors\n"
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,52 @@
|
||||
{
|
||||
"version": 2,
|
||||
"name": "XYZprinting da Vinci Jr. Pro Xe+",
|
||||
"inherits": "xyzprinting_base",
|
||||
"metadata": {
|
||||
"author": "XYZprinting Software",
|
||||
"manufacturer": "XYZprinting",
|
||||
"visible": true,
|
||||
"file_formats": "text/x-gcode",
|
||||
"has_machine_quality": true,
|
||||
"has_materials": true,
|
||||
"has_variants": true,
|
||||
"supports_usb_connection": true,
|
||||
"preferred_quality_type": "normal",
|
||||
"quality_definition": "xyzprinting_da_vinci_jr_pro_xeplus",
|
||||
"preferred_variant_name": "Copper 0.4mm Nozzle",
|
||||
"variants_name": "Nozzle Type",
|
||||
"machine_extruder_trains": {
|
||||
"0": "xyzprinting_da_vinci_jr_pro_xeplus_extruder_0"
|
||||
}
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"machine_name": { "default_value": "XYZprinting da Vinci Jr. Pro Xe+" },
|
||||
"machine_shape": { "default_value": "rectangular"},
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_width": { "default_value": 175.00 },
|
||||
"machine_depth": { "default_value": 175.00 },
|
||||
"machine_height": { "default_value":175.00 },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
"machine_head_with_fans_polygon": {
|
||||
"default_value": [
|
||||
[ -20, -10 ],
|
||||
[ -20, 10 ],
|
||||
[ 10, 10 ],
|
||||
[ 10, -10 ]
|
||||
]
|
||||
},
|
||||
"material_flow_layer_0": {"value": 120},
|
||||
"cool_fan_enabled": { "default_value": true },
|
||||
"cool_fan_speed_0": { "value": 100 },
|
||||
"brim_line_count": { "value" : 5 },
|
||||
"skirt_line_count": { "default_value" : 5 },
|
||||
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
|
||||
"machine_start_gcode": {
|
||||
"default_value": "G28 ; home all axes\nG1 Z15 F5000 ; lift nozzle\nG92 E0\nG1 F200 E3\n"
|
||||
},
|
||||
"machine_end_gcode": {
|
||||
"default_value": "M104 S0 ; turn off temperature\nM105 S0; \nG28 X0 ; home X axis\nM84 ; disable motors\n"
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,52 @@
|
||||
{
|
||||
"version": 2,
|
||||
"name": "XYZprinting da Vinci Jr. Pro X+",
|
||||
"inherits": "xyzprinting_base",
|
||||
"metadata": {
|
||||
"author": "XYZprinting Software",
|
||||
"manufacturer": "XYZprinting",
|
||||
"visible": true,
|
||||
"file_formats": "text/x-gcode",
|
||||
"has_machine_quality": true,
|
||||
"has_materials": true,
|
||||
"has_variants": true,
|
||||
"supports_usb_connection": true,
|
||||
"preferred_quality_type": "normal",
|
||||
"quality_definition": "xyzprinting_da_vinci_jr_pro_xplus",
|
||||
"preferred_variant_name": "Copper 0.4mm Nozzle",
|
||||
"variants_name": "Nozzle Type",
|
||||
"machine_extruder_trains": {
|
||||
"0": "xyzprinting_da_vinci_jr_pro_xplus_extruder_0"
|
||||
}
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"machine_name": { "default_value": "XYZprinting da Vinci Jr. Pro X+" },
|
||||
"machine_shape": { "default_value": "rectangular"},
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_width": { "default_value": 175.00 },
|
||||
"machine_depth": { "default_value": 175.00 },
|
||||
"machine_height": { "default_value":175.00 },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
"machine_head_with_fans_polygon": {
|
||||
"default_value": [
|
||||
[ -20, -10 ],
|
||||
[ -20, 10 ],
|
||||
[ 10, 10 ],
|
||||
[ 10, -10 ]
|
||||
]
|
||||
},
|
||||
"material_flow_layer_0": {"value": 120},
|
||||
"cool_fan_enabled": { "default_value": true },
|
||||
"cool_fan_speed_0": { "value": 100 },
|
||||
"brim_line_count": { "value" : 5 },
|
||||
"skirt_line_count": { "default_value" : 5 },
|
||||
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
|
||||
"machine_start_gcode": {
|
||||
"default_value": "G28 ; home all axes\nG1 Z15 F5000 ; lift nozzle\nG92 E0\nG1 F200 E3\n"
|
||||
},
|
||||
"machine_end_gcode": {
|
||||
"default_value": "M104 S0 ; turn off temperature\nM105 S0; \nG28 X0 ; home X axis\nM84 ; disable motors\n"
|
||||
}
|
||||
}
|
||||
}
|
52
resources/definitions/xyzprinting_da_vinci_jr_w_pro.def.json
Normal file
52
resources/definitions/xyzprinting_da_vinci_jr_w_pro.def.json
Normal file
@ -0,0 +1,52 @@
|
||||
{
|
||||
"version": 2,
|
||||
"name": "XYZprinting da Vinci Jr. WiFi Pro",
|
||||
"inherits": "xyzprinting_base",
|
||||
"metadata": {
|
||||
"author": "XYZprinting Software",
|
||||
"manufacturer": "XYZprinting",
|
||||
"visible": true,
|
||||
"file_formats": "text/x-gcode",
|
||||
"has_machine_quality": true,
|
||||
"has_materials": true,
|
||||
"has_variants": true,
|
||||
"supports_usb_connection": true,
|
||||
"preferred_quality_type": "normal",
|
||||
"quality_definition": "xyzprinting_da_vinci_jr_w_pro",
|
||||
"preferred_variant_name": "Hardened Steel 0.4mm Nozzle",
|
||||
"variants_name": "Nozzle Type",
|
||||
"machine_extruder_trains": {
|
||||
"0": "xyzprinting_da_vinci_jr_w_pro_extruder_0"
|
||||
}
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"machine_name": { "default_value": "XYZprinting da Vinci Jr. WiFi Pro" },
|
||||
"machine_shape": { "default_value": "rectangular"},
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_width": { "default_value": 150.00 },
|
||||
"machine_depth": { "default_value": 150.00 },
|
||||
"machine_height": { "default_value":150.00 },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
"machine_head_with_fans_polygon": {
|
||||
"default_value": [
|
||||
[ -20, -10 ],
|
||||
[ -20, 10 ],
|
||||
[ 10, 10 ],
|
||||
[ 10, -10 ]
|
||||
]
|
||||
},
|
||||
"material_flow_layer_0": {"value": 120},
|
||||
"cool_fan_enabled": { "default_value": true },
|
||||
"cool_fan_speed_0": { "value": 100 },
|
||||
"brim_line_count": { "value" : 5 },
|
||||
"skirt_line_count": { "default_value" : 5 },
|
||||
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
|
||||
"machine_start_gcode": {
|
||||
"default_value": "G28 ; home all axes\nG1 Z15 F5000 ; lift nozzle\nG92 E0\nG1 F200 E3\n"
|
||||
},
|
||||
"machine_end_gcode": {
|
||||
"default_value": "M104 S0 ; turn off temperature\nM105 S0; \nG28 X0 ; home X axis\nM84 ; disable motors\n"
|
||||
}
|
||||
}
|
||||
}
|
52
resources/definitions/xyzprinting_da_vinci_super.def.json
Normal file
52
resources/definitions/xyzprinting_da_vinci_super.def.json
Normal file
@ -0,0 +1,52 @@
|
||||
{
|
||||
"version": 2,
|
||||
"name": "XYZprinting da Vinci Super",
|
||||
"inherits": "xyzprinting_base",
|
||||
"metadata": {
|
||||
"author": "XYZprinting Software",
|
||||
"manufacturer": "XYZprinting",
|
||||
"visible": true,
|
||||
"file_formats": "text/x-gcode",
|
||||
"has_machine_quality": true,
|
||||
"has_materials": true,
|
||||
"has_variants": true,
|
||||
"supports_usb_connection": true,
|
||||
"preferred_quality_type": "normal",
|
||||
"quality_definition": "xyzprinting_da_vinci_super",
|
||||
"preferred_variant_name": "Copper 0.4mm Nozzle",
|
||||
"variants_name": "Nozzle Type",
|
||||
"machine_extruder_trains": {
|
||||
"0": "xyzprinting_da_vinci_super_extruder_0"
|
||||
}
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"machine_name": { "default_value": "XYZprinting da Vinci Super" },
|
||||
"machine_shape": { "default_value": "rectangular"},
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_width": { "default_value": 300.00 },
|
||||
"machine_depth": { "default_value": 300.00 },
|
||||
"machine_height": { "default_value":300.00 },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
"machine_head_with_fans_polygon": {
|
||||
"default_value": [
|
||||
[ -20, -10 ],
|
||||
[ -20, 10 ],
|
||||
[ 10, 10 ],
|
||||
[ 10, -10 ]
|
||||
]
|
||||
},
|
||||
"material_flow_layer_0": {"value": 120},
|
||||
"cool_fan_enabled": { "default_value": true },
|
||||
"cool_fan_speed_0": { "value": 100 },
|
||||
"brim_line_count": { "value" : 5 },
|
||||
"skirt_line_count": { "default_value" : 5 },
|
||||
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
|
||||
"machine_start_gcode": {
|
||||
"default_value": "G28 ; home all axes\nG1 Z15 F5000 ; lift nozzle\nG92 E0\nG1 F200 E3\n"
|
||||
},
|
||||
"machine_end_gcode": {
|
||||
"default_value": "M104 S0 ; turn off temperature\nM105 S0; \nG28 X0 ; home X axis\nM84 ; disable motors\n"
|
||||
}
|
||||
}
|
||||
}
|
16
resources/extruders/xyzprinting_base_extruder_0.def.json
Normal file
16
resources/extruders/xyzprinting_base_extruder_0.def.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"version": 2,
|
||||
"name": "Extruder 1",
|
||||
"inherits": "fdmextruder",
|
||||
"metadata": {
|
||||
"machine": "xyzprinting_base",
|
||||
"position": "0"
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"extruder_nr": { "default_value": 0 },
|
||||
"machine_nozzle_size": { "default_value": 0.4 },
|
||||
"material_diameter": { "default_value": 1.75 }
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
{
|
||||
"version": 2,
|
||||
"name": "Extruder 1",
|
||||
"inherits": "fdmextruder",
|
||||
"metadata": {
|
||||
"machine": "xyzprinting_da_vinci_1p0_pro",
|
||||
"position": "0"
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"extruder_nr": { "default_value": 0 },
|
||||
"machine_nozzle_size": { "default_value": 0.4 },
|
||||
"material_diameter": { "default_value": 1.75 }
|
||||
}
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
{
|
||||
"version": 2,
|
||||
"name": "Extruder 1",
|
||||
"inherits": "fdmextruder",
|
||||
"metadata": {
|
||||
"machine": "xyzprinting_da_vinci_jr_1p0a_pro",
|
||||
"position": "0"
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"extruder_nr": { "default_value": 0 },
|
||||
"machine_nozzle_size": { "default_value": 0.4 },
|
||||
"material_diameter": { "default_value": 1.75 }
|
||||
}
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
{
|
||||
"version": 2,
|
||||
"name": "Extruder 1",
|
||||
"inherits": "fdmextruder",
|
||||
"metadata": {
|
||||
"machine": "xyzprinting_da_vinci_jr_pro_xeplus",
|
||||
"position": "0"
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"extruder_nr": { "default_value": 0 },
|
||||
"machine_nozzle_size": { "default_value": 0.4 },
|
||||
"material_diameter": { "default_value": 1.75 }
|
||||
}
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
{
|
||||
"version": 2,
|
||||
"name": "Extruder 1",
|
||||
"inherits": "fdmextruder",
|
||||
"metadata": {
|
||||
"machine": "xyzprinting_da_vinci_jr_pro_xplus",
|
||||
"position": "0"
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"extruder_nr": { "default_value": 0 },
|
||||
"machine_nozzle_size": { "default_value": 0.4 },
|
||||
"material_diameter": { "default_value": 1.75 }
|
||||
}
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
{
|
||||
"version": 2,
|
||||
"name": "Extruder 1",
|
||||
"inherits": "fdmextruder",
|
||||
"metadata": {
|
||||
"machine": "xyzprinting_da_vinci_jr_w_pro",
|
||||
"position": "0"
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"extruder_nr": { "default_value": 0 },
|
||||
"machine_nozzle_size": { "default_value": 0.4 },
|
||||
"material_diameter": { "default_value": 1.75 }
|
||||
}
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
{
|
||||
"version": 2,
|
||||
"name": "Extruder 1",
|
||||
"inherits": "fdmextruder",
|
||||
"metadata": {
|
||||
"machine": "xyzprinting_da_vinci_super",
|
||||
"position": "0"
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"extruder_nr": { "default_value": 0 },
|
||||
"machine_nozzle_size": { "default_value": 0.4 },
|
||||
"material_diameter": { "default_value": 1.75 }
|
||||
}
|
||||
}
|
@ -51,7 +51,6 @@ Menu
|
||||
onTriggered:
|
||||
{
|
||||
UM.Preferences.setValue("general/camera_perspective_mode", "perspective")
|
||||
checked = cameraViewMenu.cameraMode == "perspective"
|
||||
}
|
||||
exclusiveGroup: group
|
||||
}
|
||||
@ -63,7 +62,6 @@ Menu
|
||||
onTriggered:
|
||||
{
|
||||
UM.Preferences.setValue("general/camera_perspective_mode", "orthographic")
|
||||
checked = cameraViewMenu.cameraMode == "orthographic"
|
||||
}
|
||||
exclusiveGroup: group
|
||||
}
|
||||
|
@ -201,8 +201,7 @@ Item
|
||||
onClicked:
|
||||
{
|
||||
forceActiveFocus();
|
||||
exportAllMaterialsDialog.folder = base.materialManagementModel.getPreferredExportAllPath();
|
||||
exportAllMaterialsDialog.open();
|
||||
base.materialManagementModel.openSyncAllWindow();
|
||||
}
|
||||
visible: Cura.MachineManager.activeMachine.supportsMaterialExport
|
||||
}
|
||||
@ -383,19 +382,6 @@ 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
|
||||
|
762
resources/qml/Preferences/Materials/MaterialsSyncDialog.qml
Normal file
762
resources/qml/Preferences/Materials/MaterialsSyncDialog.qml
Normal file
@ -0,0 +1,762 @@
|
||||
//Copyright (c) 2021 Ultimaker B.V.
|
||||
//Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Controls 2.15
|
||||
import QtQuick.Dialogs 1.2
|
||||
import QtQuick.Layouts 1.15
|
||||
import QtQuick.Window 2.1
|
||||
import Cura 1.1 as Cura
|
||||
import UM 1.4 as UM
|
||||
|
||||
Window
|
||||
{
|
||||
id: materialsSyncDialog
|
||||
property variant catalog: UM.I18nCatalog { name: "cura" }
|
||||
|
||||
title: catalog.i18nc("@title:window", "Sync materials with printers")
|
||||
minimumWidth: UM.Theme.getSize("modal_window_minimum").width
|
||||
minimumHeight: UM.Theme.getSize("modal_window_minimum").height
|
||||
width: minimumWidth
|
||||
height: minimumHeight
|
||||
modality: Qt.ApplicationModal
|
||||
|
||||
property variant syncModel
|
||||
property alias pageIndex: swipeView.currentIndex
|
||||
property alias syncStatusText: syncStatusLabel.text
|
||||
property bool hasExportedUsb: false
|
||||
|
||||
SwipeView
|
||||
{
|
||||
id: swipeView
|
||||
anchors.fill: parent
|
||||
interactive: false
|
||||
|
||||
Rectangle
|
||||
{
|
||||
id: introPage
|
||||
color: UM.Theme.getColor("main_background")
|
||||
Column
|
||||
{
|
||||
spacing: UM.Theme.getSize("default_margin").height
|
||||
anchors.fill: parent
|
||||
anchors.margins: UM.Theme.getSize("default_margin").width
|
||||
|
||||
Label
|
||||
{
|
||||
text: catalog.i18nc("@title:header", "Sync materials with printers")
|
||||
font: UM.Theme.getFont("large_bold")
|
||||
color: UM.Theme.getColor("text")
|
||||
}
|
||||
Label
|
||||
{
|
||||
text: catalog.i18nc("@text", "Following a few simple steps, you will be able to synchronize all your material profiles with your printers.")
|
||||
font: UM.Theme.getFont("medium")
|
||||
color: UM.Theme.getColor("text")
|
||||
wrapMode: Text.Wrap
|
||||
width: parent.width
|
||||
}
|
||||
Image
|
||||
{
|
||||
source: UM.Theme.getImage("material_ecosystem")
|
||||
width: parent.width
|
||||
sourceSize.width: width
|
||||
}
|
||||
}
|
||||
|
||||
Cura.PrimaryButton
|
||||
{
|
||||
id: startButton
|
||||
anchors
|
||||
{
|
||||
right: parent.right
|
||||
rightMargin: UM.Theme.getSize("default_margin").width
|
||||
bottom: parent.bottom
|
||||
bottomMargin: UM.Theme.getSize("default_margin").height
|
||||
}
|
||||
text: catalog.i18nc("@button", "Start")
|
||||
onClicked:
|
||||
{
|
||||
if(Cura.API.account.isLoggedIn)
|
||||
{
|
||||
swipeView.currentIndex += 2; //Skip sign in page.
|
||||
}
|
||||
else
|
||||
{
|
||||
swipeView.currentIndex += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
Cura.TertiaryButton
|
||||
{
|
||||
anchors
|
||||
{
|
||||
left: parent.left
|
||||
leftMargin: UM.Theme.getSize("default_margin").width
|
||||
verticalCenter: startButton.verticalCenter
|
||||
}
|
||||
text: catalog.i18nc("@button", "Why do I need to sync material profiles?")
|
||||
iconSource: UM.Theme.getIcon("LinkExternal")
|
||||
isIconOnRightSide: true
|
||||
onClicked: Qt.openUrlExternally("https://support.ultimaker.com/hc/en-us/articles/360013137919?utm_source=cura&utm_medium=software&utm_campaign=sync-material-printer-why")
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle
|
||||
{
|
||||
id: signinPage
|
||||
color: UM.Theme.getColor("main_background")
|
||||
|
||||
Connections //While this page is active, continue to the next page if the user logs in.
|
||||
{
|
||||
target: Cura.API.account
|
||||
function onLoginStateChanged(is_logged_in)
|
||||
{
|
||||
if(is_logged_in && signinPage.SwipeView.isCurrentItem)
|
||||
{
|
||||
swipeView.currentIndex += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout
|
||||
{
|
||||
spacing: UM.Theme.getSize("default_margin").height
|
||||
anchors.fill: parent
|
||||
anchors.margins: UM.Theme.getSize("default_margin").width
|
||||
|
||||
Label
|
||||
{
|
||||
text: catalog.i18nc("@title:header", "Sign in")
|
||||
font: UM.Theme.getFont("large_bold")
|
||||
color: UM.Theme.getColor("text")
|
||||
Layout.preferredHeight: height
|
||||
}
|
||||
Label
|
||||
{
|
||||
text: catalog.i18nc("@text", "To automatically sync the material profiles with all your printers connected to Digital Factory you need to be signed in in Cura.")
|
||||
font: UM.Theme.getFont("medium")
|
||||
color: UM.Theme.getColor("text")
|
||||
wrapMode: Text.Wrap
|
||||
width: parent.width
|
||||
Layout.maximumWidth: width
|
||||
Layout.preferredHeight: height
|
||||
}
|
||||
Item
|
||||
{
|
||||
Layout.preferredWidth: parent.width
|
||||
Layout.fillHeight: true
|
||||
Image
|
||||
{
|
||||
source: UM.Theme.getImage("first_run_ultimaker_cloud")
|
||||
width: parent.width / 2
|
||||
sourceSize.width: width
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
}
|
||||
Item
|
||||
{
|
||||
width: parent.width
|
||||
height: childrenRect.height
|
||||
Layout.preferredHeight: height
|
||||
Cura.SecondaryButton
|
||||
{
|
||||
anchors.left: parent.left
|
||||
text: catalog.i18nc("@button", "Sync materials with USB")
|
||||
onClicked: swipeView.currentIndex = removableDriveSyncPage.SwipeView.index
|
||||
}
|
||||
Cura.PrimaryButton
|
||||
{
|
||||
anchors.right: parent.right
|
||||
text: catalog.i18nc("@button", "Sign in")
|
||||
onClicked: Cura.API.account.login()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle
|
||||
{
|
||||
id: printerListPage
|
||||
color: UM.Theme.getColor("main_background")
|
||||
|
||||
ColumnLayout
|
||||
{
|
||||
spacing: UM.Theme.getSize("default_margin").height
|
||||
anchors.fill: parent
|
||||
anchors.margins: UM.Theme.getSize("default_margin").width
|
||||
visible: cloudPrinterList.count > 0
|
||||
|
||||
Row
|
||||
{
|
||||
Layout.preferredHeight: childrenRect.height
|
||||
spacing: UM.Theme.getSize("default_margin").width
|
||||
|
||||
states: [
|
||||
State
|
||||
{
|
||||
name: "idle"
|
||||
when: typeof syncModel === "undefined" || syncModel.exportUploadStatus == "idle" || syncModel.exportUploadStatus == "uploading"
|
||||
PropertyChanges { target: printerListHeader; text: catalog.i18nc("@title:header", "The following printers will receive the new material profiles:") }
|
||||
PropertyChanges { target: printerListHeaderIcon; status: UM.StatusIcon.Status.NEUTRAL; width: 0 }
|
||||
},
|
||||
State
|
||||
{
|
||||
name: "error"
|
||||
when: typeof syncModel !== "undefined" && syncModel.exportUploadStatus == "error"
|
||||
PropertyChanges { target: printerListHeader; text: catalog.i18nc("@title:header", "Something went wrong when sending the materials to the printers.") }
|
||||
PropertyChanges { target: printerListHeaderIcon; status: UM.StatusIcon.Status.ERROR }
|
||||
},
|
||||
State
|
||||
{
|
||||
name: "success"
|
||||
when: typeof syncModel !== "undefined" && syncModel.exportUploadStatus == "success"
|
||||
PropertyChanges { target: printerListHeader; text: catalog.i18nc("@title:header", "Material profiles successfully synced with the following printers:") }
|
||||
PropertyChanges { target: printerListHeaderIcon; status: UM.StatusIcon.Status.POSITIVE }
|
||||
}
|
||||
]
|
||||
|
||||
UM.StatusIcon
|
||||
{
|
||||
id: printerListHeaderIcon
|
||||
width: UM.Theme.getSize("section_icon").width
|
||||
height: width
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
Label
|
||||
{
|
||||
id: printerListHeader
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
//Text is always defined by the states above.
|
||||
font: UM.Theme.getFont("large_bold")
|
||||
color: UM.Theme.getColor("text")
|
||||
}
|
||||
}
|
||||
Row
|
||||
{
|
||||
Layout.preferredWidth: parent.width
|
||||
Layout.preferredHeight: childrenRect.height
|
||||
|
||||
Label
|
||||
{
|
||||
id: syncStatusLabel
|
||||
|
||||
width: parent.width - UM.Theme.getSize("default_margin").width - troubleshootingLink.width
|
||||
|
||||
wrapMode: Text.Wrap
|
||||
elide: Text.ElideRight
|
||||
visible: text !== ""
|
||||
text: ""
|
||||
color: UM.Theme.getColor("text")
|
||||
font: UM.Theme.getFont("medium")
|
||||
}
|
||||
Cura.TertiaryButton
|
||||
{
|
||||
id: troubleshootingLink
|
||||
text: catalog.i18nc("@button", "Troubleshooting")
|
||||
visible: typeof syncModel !== "undefined" && syncModel.exportUploadStatus == "error"
|
||||
iconSource: UM.Theme.getIcon("LinkExternal")
|
||||
onClicked: Qt.openUrlExternally("https://support.ultimaker.com/hc/en-us/articles/360012019239?utm_source=cura&utm_medium=software&utm_campaign=sync-material-wizard-troubleshoot-cloud-printer")
|
||||
}
|
||||
}
|
||||
ScrollView
|
||||
{
|
||||
id: printerListScrollView
|
||||
width: parent.width
|
||||
Layout.preferredWidth: width
|
||||
Layout.fillHeight: true
|
||||
clip: true
|
||||
ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
|
||||
|
||||
ListView
|
||||
{
|
||||
id: printerList
|
||||
width: parent.width
|
||||
spacing: UM.Theme.getSize("default_margin").height
|
||||
|
||||
model: cloudPrinterList
|
||||
delegate: Rectangle
|
||||
{
|
||||
id: delegateContainer
|
||||
color: "transparent"
|
||||
border.color: UM.Theme.getColor("lining")
|
||||
border.width: UM.Theme.getSize("default_lining").width
|
||||
width: printerListScrollView.width
|
||||
height: UM.Theme.getSize("card").height
|
||||
|
||||
property string syncStatus:
|
||||
{
|
||||
var printer_id = model.metadata["host_guid"]
|
||||
if(syncModel.printerStatus[printer_id] === undefined) //No status information available. Could be added after we started syncing.
|
||||
{
|
||||
return "idle";
|
||||
}
|
||||
return syncModel.printerStatus[printer_id];
|
||||
}
|
||||
|
||||
Cura.IconWithText
|
||||
{
|
||||
anchors
|
||||
{
|
||||
verticalCenter: parent.verticalCenter
|
||||
left: parent.left
|
||||
leftMargin: Math.round(parent.height - height) / 2 //Equal margin on the left as above and below.
|
||||
right: parent.right
|
||||
rightMargin: Math.round(parent.height - height) / 2
|
||||
}
|
||||
|
||||
text: model.name
|
||||
font: UM.Theme.getFont("medium")
|
||||
|
||||
source: UM.Theme.getIcon("Printer", "medium")
|
||||
iconColor: UM.Theme.getColor("machine_selector_printer_icon")
|
||||
iconSize: UM.Theme.getSize("machine_selector_icon").width
|
||||
|
||||
//Printer status badge (always cloud, but whether it's online or offline).
|
||||
UM.RecolorImage
|
||||
{
|
||||
width: UM.Theme.getSize("printer_status_icon").width
|
||||
height: UM.Theme.getSize("printer_status_icon").height
|
||||
anchors
|
||||
{
|
||||
bottom: parent.bottom
|
||||
bottomMargin: -Math.round(height / 6)
|
||||
left: parent.left
|
||||
leftMargin: parent.iconSize - Math.round(width * 5 / 6)
|
||||
}
|
||||
|
||||
source: UM.Theme.getIcon("CloudBadge", "low")
|
||||
color: UM.Theme.getColor("primary")
|
||||
|
||||
//Make a themeable circle in the background so we can change it in other themes.
|
||||
Rectangle
|
||||
{
|
||||
anchors.centerIn: parent
|
||||
width: parent.width - 1.5 //1.5 pixels smaller (at least sqrt(2), regardless of pixel scale) so that the circle doesn't show up behind the icon due to anti-aliasing.
|
||||
height: parent.height - 1.5
|
||||
radius: width / 2
|
||||
color: UM.Theme.getColor("connection_badge_background")
|
||||
z: parent.z - 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
UM.RecolorImage
|
||||
{
|
||||
id: printerSpinner
|
||||
width: UM.Theme.getSize("section_icon").width
|
||||
height: width
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: Math.round((parent.height - height) / 2) //Same margin on the right as above and below.
|
||||
|
||||
visible: delegateContainer.syncStatus === "uploading"
|
||||
source: UM.Theme.getIcon("ArrowDoubleCircleRight")
|
||||
color: UM.Theme.getColor("primary")
|
||||
|
||||
RotationAnimator
|
||||
{
|
||||
target: printerSpinner
|
||||
from: 0
|
||||
to: 360
|
||||
duration: 1000
|
||||
loops: Animation.Infinite
|
||||
running: true
|
||||
}
|
||||
}
|
||||
UM.StatusIcon
|
||||
{
|
||||
width: UM.Theme.getSize("section_icon").width
|
||||
height: width
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: Math.round((parent.height - height) / 2) //Same margin on the right as above and below.
|
||||
|
||||
visible: delegateContainer.syncStatus === "failed" || delegateContainer.syncStatus === "success"
|
||||
status: delegateContainer.syncStatus === "success" ? UM.StatusIcon.Status.POSITIVE : UM.StatusIcon.Status.ERROR
|
||||
}
|
||||
}
|
||||
|
||||
footer: Item
|
||||
{
|
||||
width: printerListScrollView.width
|
||||
height: {
|
||||
if(!visible)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
let h = UM.Theme.getSize("card").height + printerListTroubleshooting.height + UM.Theme.getSize("default_margin").height * 2; //1 margin between content and footer, 1 for troubleshooting link.
|
||||
return h;
|
||||
}
|
||||
visible: includeOfflinePrinterList.count - cloudPrinterList.count > 0 && typeof syncModel !== "undefined" && syncModel.exportUploadStatus === "idle"
|
||||
Rectangle
|
||||
{
|
||||
anchors.fill: parent
|
||||
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
||||
|
||||
border.color: UM.Theme.getColor("lining")
|
||||
border.width: UM.Theme.getSize("default_lining").width
|
||||
color: "transparent"
|
||||
|
||||
Row
|
||||
{
|
||||
anchors
|
||||
{
|
||||
fill: parent
|
||||
margins: Math.round(UM.Theme.getSize("card").height - UM.Theme.getSize("machine_selector_icon").width) / 2 //Same margin as in other cards.
|
||||
}
|
||||
spacing: UM.Theme.getSize("default_margin").width
|
||||
|
||||
UM.StatusIcon
|
||||
{
|
||||
id: infoIcon
|
||||
width: UM.Theme.getSize("section_icon").width
|
||||
height: width
|
||||
//Fake anchor.verticalCenter: printersMissingText.verticalCenter, since we can't anchor to things that aren't siblings.
|
||||
anchors.top: parent.top
|
||||
anchors.topMargin: Math.round(printersMissingText.height / 2 - height / 2)
|
||||
|
||||
status: UM.StatusIcon.Status.WARNING
|
||||
}
|
||||
|
||||
Column
|
||||
{
|
||||
//Fill the total width. Can't use layouts because we need the anchors for vertical alignment.
|
||||
width: parent.width - infoIcon.width - refreshListButton.width - parent.spacing * 2
|
||||
|
||||
spacing: UM.Theme.getSize("default_margin").height
|
||||
|
||||
Label
|
||||
{
|
||||
id: printersMissingText
|
||||
text: catalog.i18nc("@text Asking the user whether printers are missing in a list.", "Printers missing?")
|
||||
+ "\n"
|
||||
+ catalog.i18nc("@text", "Make sure all your printers are turned ON and connected to Digital Factory.")
|
||||
font: UM.Theme.getFont("medium")
|
||||
color: UM.Theme.getColor("text")
|
||||
elide: Text.ElideRight
|
||||
}
|
||||
Cura.TertiaryButton
|
||||
{
|
||||
id: printerListTroubleshooting
|
||||
leftPadding: 0 //Want to visually align this to the text.
|
||||
|
||||
text: catalog.i18nc("@button", "Troubleshooting")
|
||||
iconSource: UM.Theme.getIcon("LinkExternal")
|
||||
onClicked: Qt.openUrlExternally("https://support.ultimaker.com/hc/en-us/articles/360012019239?utm_source=cura&utm_medium=software&utm_campaign=sync-material-wizard-troubleshoot-cloud-printer")
|
||||
}
|
||||
}
|
||||
|
||||
Cura.SecondaryButton
|
||||
{
|
||||
id: refreshListButton
|
||||
//Fake anchor.verticalCenter: printersMissingText.verticalCenter, since we can't anchor to things that aren't siblings.
|
||||
anchors.top: parent.top
|
||||
anchors.topMargin: Math.round(printersMissingText.height / 2 - height / 2)
|
||||
|
||||
text: catalog.i18nc("@button", "Refresh List")
|
||||
iconSource: UM.Theme.getIcon("ArrowDoubleCircleRight")
|
||||
onClicked: Cura.API.account.sync(true)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Item
|
||||
{
|
||||
width: parent.width
|
||||
height: childrenRect.height
|
||||
Layout.preferredWidth: width
|
||||
Layout.preferredHeight: height
|
||||
|
||||
Cura.SecondaryButton
|
||||
{
|
||||
anchors.left: parent.left
|
||||
text: catalog.i18nc("@button", "Sync materials with USB")
|
||||
onClicked: swipeView.currentIndex = removableDriveSyncPage.SwipeView.index
|
||||
}
|
||||
Cura.PrimaryButton
|
||||
{
|
||||
id: syncButton
|
||||
anchors.right: parent.right
|
||||
text:
|
||||
{
|
||||
if(typeof syncModel !== "undefined" && syncModel.exportUploadStatus == "error")
|
||||
{
|
||||
return catalog.i18nc("@button", "Try again");
|
||||
}
|
||||
if(typeof syncModel !== "undefined" && syncModel.exportUploadStatus == "success")
|
||||
{
|
||||
return catalog.i18nc("@button", "Done");
|
||||
}
|
||||
return catalog.i18nc("@button", "Sync");
|
||||
}
|
||||
onClicked:
|
||||
{
|
||||
if(typeof syncModel !== "undefined" && syncModel.exportUploadStatus == "success")
|
||||
{
|
||||
materialsSyncDialog.close();
|
||||
}
|
||||
else
|
||||
{
|
||||
syncModel.exportUpload();
|
||||
}
|
||||
}
|
||||
visible:
|
||||
{
|
||||
if(!syncModel) //When the dialog is created, this is not set yet.
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return syncModel.exportUploadStatus != "uploading";
|
||||
}
|
||||
}
|
||||
Item
|
||||
{
|
||||
anchors.right: parent.right
|
||||
width: childrenRect.width
|
||||
height: syncButton.height
|
||||
|
||||
visible: !syncButton.visible
|
||||
|
||||
UM.RecolorImage
|
||||
{
|
||||
id: syncingIcon
|
||||
height: UM.Theme.getSize("action_button_icon").height
|
||||
width: height
|
||||
anchors.verticalCenter: syncingLabel.verticalCenter
|
||||
|
||||
source: UM.Theme.getIcon("ArrowDoubleCircleRight")
|
||||
color: UM.Theme.getColor("primary")
|
||||
|
||||
RotationAnimator
|
||||
{
|
||||
target: syncingIcon
|
||||
from: 0
|
||||
to: 360
|
||||
duration: 1000
|
||||
loops: Animation.Infinite
|
||||
running: true
|
||||
}
|
||||
}
|
||||
Label
|
||||
{
|
||||
id: syncingLabel
|
||||
anchors.left: syncingIcon.right
|
||||
anchors.leftMargin: UM.Theme.getSize("narrow_margin").width
|
||||
|
||||
text: catalog.i18nc("@button", "Syncing")
|
||||
color: UM.Theme.getColor("primary")
|
||||
font: UM.Theme.getFont("medium")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout //Placeholder for when the user has no cloud printers.
|
||||
{
|
||||
spacing: UM.Theme.getSize("default_margin").height
|
||||
anchors.fill: parent
|
||||
anchors.margins: UM.Theme.getSize("default_margin").width
|
||||
visible: cloudPrinterList.count == 0
|
||||
|
||||
Label
|
||||
{
|
||||
text: catalog.i18nc("@title:header", "No printers found")
|
||||
font: UM.Theme.getFont("large_bold")
|
||||
color: UM.Theme.getColor("text")
|
||||
Layout.preferredWidth: width
|
||||
Layout.preferredHeight: height
|
||||
}
|
||||
Image
|
||||
{
|
||||
source: UM.Theme.getImage("3d_printer_faded")
|
||||
sourceSize.width: width
|
||||
fillMode: Image.PreserveAspectFit
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
Layout.preferredWidth: parent.width / 3
|
||||
}
|
||||
Label
|
||||
{
|
||||
text: catalog.i18nc("@text", "It seems like you don't have access to any printers connected to Digital Factory.")
|
||||
width: parent.width
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
wrapMode: Text.Wrap
|
||||
Layout.preferredWidth: width
|
||||
Layout.preferredHeight: height
|
||||
}
|
||||
Item
|
||||
{
|
||||
Layout.preferredWidth: parent.width
|
||||
Layout.fillHeight: true
|
||||
Cura.TertiaryButton
|
||||
{
|
||||
text: catalog.i18nc("@button", "Learn how to connect your printer to Digital Factory")
|
||||
iconSource: UM.Theme.getIcon("LinkExternal")
|
||||
onClicked: Qt.openUrlExternally("https://support.ultimaker.com/hc/en-us/articles/360012019239?utm_source=cura&utm_medium=software&utm_campaign=sync-material-wizard-add-cloud-printer")
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
}
|
||||
Item
|
||||
{
|
||||
width: parent.width
|
||||
height: childrenRect.height
|
||||
Layout.preferredWidth: width
|
||||
Layout.preferredHeight: height
|
||||
|
||||
Cura.SecondaryButton
|
||||
{
|
||||
anchors.left: parent.left
|
||||
text: catalog.i18nc("@button", "Sync materials with USB")
|
||||
onClicked: swipeView.currentIndex = removableDriveSyncPage.SwipeView.index
|
||||
}
|
||||
Cura.PrimaryButton
|
||||
{
|
||||
id: disabledSyncButton
|
||||
anchors.right: parent.right
|
||||
text: catalog.i18nc("@button", "Sync")
|
||||
enabled: false //If there are no printers, always disable this button.
|
||||
}
|
||||
Cura.SecondaryButton
|
||||
{
|
||||
anchors.right: disabledSyncButton.left
|
||||
anchors.rightMargin: UM.Theme.getSize("default_margin").width
|
||||
text: catalog.i18nc("@button", "Refresh")
|
||||
iconSource: UM.Theme.getIcon("ArrowDoubleCircleRight")
|
||||
outlineColor: "transparent"
|
||||
onClicked: Cura.API.account.sync(true)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle
|
||||
{
|
||||
id: removableDriveSyncPage
|
||||
color: UM.Theme.getColor("main_background")
|
||||
|
||||
ColumnLayout
|
||||
{
|
||||
spacing: UM.Theme.getSize("default_margin").height
|
||||
anchors.fill: parent
|
||||
anchors.margins: UM.Theme.getSize("default_margin").width
|
||||
|
||||
Label
|
||||
{
|
||||
text: catalog.i18nc("@title:header", "Sync material profiles via USB")
|
||||
font: UM.Theme.getFont("large_bold")
|
||||
color: UM.Theme.getColor("text")
|
||||
Layout.preferredHeight: height
|
||||
}
|
||||
Label
|
||||
{
|
||||
text: catalog.i18nc("@text In the UI this is followed by a list of steps the user needs to take.", "Follow the following steps to load the new material profiles to your printer.")
|
||||
font: UM.Theme.getFont("medium")
|
||||
color: UM.Theme.getColor("text")
|
||||
wrapMode: Text.Wrap
|
||||
width: parent.width
|
||||
Layout.maximumWidth: width
|
||||
Layout.preferredHeight: height
|
||||
}
|
||||
Row
|
||||
{
|
||||
width: parent.width
|
||||
Layout.preferredWidth: width
|
||||
Layout.fillHeight: true
|
||||
spacing: UM.Theme.getSize("default_margin").width
|
||||
|
||||
Image
|
||||
{
|
||||
source: UM.Theme.getImage("insert_usb")
|
||||
width: parent.width / 3
|
||||
height: width
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
sourceSize.width: width
|
||||
}
|
||||
Label
|
||||
{
|
||||
text: "1. " + catalog.i18nc("@text", "Click the export material archive button.")
|
||||
+ "\n2. " + catalog.i18nc("@text", "Save the .umm file on a USB stick.")
|
||||
+ "\n3. " + catalog.i18nc("@text", "Insert the USB stick into your printer and launch the procedure to load new material profiles.")
|
||||
font: UM.Theme.getFont("medium")
|
||||
color: UM.Theme.getColor("text")
|
||||
wrapMode: Text.Wrap
|
||||
width: parent.width * 2 / 3 - UM.Theme.getSize("default_margin").width
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
}
|
||||
|
||||
Cura.TertiaryButton
|
||||
{
|
||||
text: catalog.i18nc("@button", "How to load new material profiles to my printer")
|
||||
iconSource: UM.Theme.getIcon("LinkExternal")
|
||||
onClicked: Qt.openUrlExternally("https://support.ultimaker.com/hc/en-us/articles/360013137919?utm_source=cura&utm_medium=software&utm_campaign=sync-material-wizard-how-usb")
|
||||
}
|
||||
|
||||
Item
|
||||
{
|
||||
width: parent.width
|
||||
height: childrenRect.height
|
||||
Layout.preferredWidth: width
|
||||
Layout.preferredHeight: height
|
||||
|
||||
Cura.SecondaryButton
|
||||
{
|
||||
anchors.left: parent.left
|
||||
text: catalog.i18nc("@button", "Back")
|
||||
onClicked: swipeView.currentIndex = 0 //Reset to first page.
|
||||
}
|
||||
Cura.PrimaryButton
|
||||
{
|
||||
id: exportUsbButton
|
||||
anchors.right: parent.right
|
||||
|
||||
property bool hasExported: false
|
||||
text: materialsSyncDialog.hasExportedUsb ? catalog.i18nc("@button", "Done") : catalog.i18nc("@button", "Export material archive")
|
||||
onClicked:
|
||||
{
|
||||
if(!materialsSyncDialog.hasExportedUsb)
|
||||
{
|
||||
exportUsbDialog.folder = syncModel.getPreferredExportAllPath();
|
||||
exportUsbDialog.open();
|
||||
}
|
||||
else
|
||||
{
|
||||
materialsSyncDialog.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Cura.GlobalStacksModel
|
||||
{
|
||||
id: cloudPrinterList
|
||||
filterConnectionType: 3 //Only show cloud connections.
|
||||
filterOnlineOnly: true //Only show printers that are online.
|
||||
}
|
||||
Cura.GlobalStacksModel
|
||||
{
|
||||
//In order to show a refresh button only when there are offline cloud printers, we need to know if there are any offline printers.
|
||||
//A global stacks model without the filter for online-only printers allows this.
|
||||
id: includeOfflinePrinterList
|
||||
filterConnectionType: 3 //Still only show cloud connections.
|
||||
}
|
||||
|
||||
FileDialog
|
||||
{
|
||||
id: exportUsbDialog
|
||||
title: catalog.i18nc("@title:window", "Export All Materials")
|
||||
selectExisting: false
|
||||
nameFilters: ["Material archives (*.umm)", "All files (*)"]
|
||||
onAccepted:
|
||||
{
|
||||
syncModel.exportAll(fileUrl);
|
||||
CuraApplication.setDefaultPath("dialog_material_path", folder);
|
||||
materialsSyncDialog.hasExportedUsb = true;
|
||||
}
|
||||
}
|
||||
}
|
@ -269,7 +269,7 @@ Item
|
||||
}
|
||||
|
||||
// If the setting does not have a limit_to_extruder property (or is -1), use the active stack.
|
||||
if (globalPropertyProvider.properties.limit_to_extruder === null || String(globalPropertyProvider.properties.limit_to_extruder) === "-1")
|
||||
if (globalPropertyProvider.properties.limit_to_extruder === null || globalPropertyProvider.properties.limit_to_extruder === "-1")
|
||||
{
|
||||
return Cura.SettingInheritanceManager.settingsWithInheritanceWarning.indexOf(definition.key) >= 0
|
||||
}
|
||||
@ -283,7 +283,7 @@ Item
|
||||
{
|
||||
return false
|
||||
}
|
||||
return Cura.SettingInheritanceManager.getOverridesForExtruder(definition.key, String(globalPropertyProvider.properties.limit_to_extruder)).indexOf(definition.key) >= 0
|
||||
return Cura.SettingInheritanceManager.hasOverrides(definition.key, globalPropertyProvider.properties.limit_to_extruder)
|
||||
}
|
||||
|
||||
anchors.top: parent.top
|
||||
|
@ -302,7 +302,7 @@ Item
|
||||
{
|
||||
target: provider
|
||||
property: "containerStackId"
|
||||
when: model.settable_per_extruder || (inheritStackProvider.properties.limit_to_extruder !== null && inheritStackProvider.properties.limit_to_extruder >= 0);
|
||||
when: model.settable_per_extruder || (inheritStackProvider.properties.limit_to_extruder !== undefined && inheritStackProvider.properties.limit_to_extruder >= 0);
|
||||
value:
|
||||
{
|
||||
// Associate this binding with Cura.MachineManager.activeMachine.id in the beginning so this
|
||||
@ -315,10 +315,10 @@ Item
|
||||
//Not settable per extruder or there only is global, so we must pick global.
|
||||
return contents.activeMachineId
|
||||
}
|
||||
if (inheritStackProvider.properties.limit_to_extruder !== null && inheritStackProvider.properties.limit_to_extruder >= 0)
|
||||
if (inheritStackProvider.properties.limit_to_extruder !== undefined && inheritStackProvider.properties.limit_to_extruder >= 0)
|
||||
{
|
||||
//We have limit_to_extruder, so pick that stack.
|
||||
return Cura.ExtruderManager.extruderIds[String(inheritStackProvider.properties.limit_to_extruder)];
|
||||
return Cura.ExtruderManager.extruderIds[inheritStackProvider.properties.limit_to_extruder];
|
||||
}
|
||||
if (Cura.ExtruderManager.activeExtruderStackId)
|
||||
{
|
||||
|
@ -0,0 +1,32 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Coarse Quality
|
||||
definition = xyzprinting_da_vinci_1p0_pro
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = coarse
|
||||
weight = -3
|
||||
material = xyzprinting_abs
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.4
|
||||
layer_height_0 = 0.4
|
||||
material_diameter = 1.75
|
||||
material_bed_temperature_layer_0 = =material_bed_temperature
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 20
|
||||
speed_infill = =speed_print
|
||||
speed_support = =speed_print
|
||||
speed_travel = 45
|
||||
retraction_amount = 6.0
|
||||
retraction_speed = 40
|
||||
retraction_prime_speed = =retraction_speed
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,32 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Draft Quality
|
||||
definition = xyzprinting_da_vinci_1p0_pro
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = draft
|
||||
weight = -2
|
||||
material = xyzprinting_abs
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.3
|
||||
layer_height_0 = 0.4
|
||||
material_diameter = 1.75
|
||||
material_bed_temperature_layer_0 = =material_bed_temperature
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 20
|
||||
speed_infill = =speed_print
|
||||
speed_support = =speed_print
|
||||
speed_travel = 45
|
||||
retraction_amount = 6.0
|
||||
retraction_speed = 40
|
||||
retraction_prime_speed = =retraction_speed
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,32 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Fine Quality
|
||||
definition = xyzprinting_da_vinci_1p0_pro
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = fine
|
||||
weight = 0
|
||||
material = xyzprinting_abs
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.1
|
||||
layer_height_0 = 0.2
|
||||
material_diameter = 1.75
|
||||
material_bed_temperature_layer_0 = =material_bed_temperature
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 20
|
||||
speed_infill = =speed_print
|
||||
speed_support = =speed_print
|
||||
speed_travel = 45
|
||||
retraction_amount = 6.0
|
||||
retraction_speed = 40
|
||||
retraction_prime_speed = =retraction_speed
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,32 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Normal Quality
|
||||
definition = xyzprinting_da_vinci_1p0_pro
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = normal
|
||||
weight = -1
|
||||
material = xyzprinting_abs
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.2
|
||||
layer_height_0 = 0.35
|
||||
material_diameter = 1.75
|
||||
material_bed_temperature_layer_0 = =material_bed_temperature
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 20
|
||||
speed_infill = =speed_print
|
||||
speed_support = =speed_print
|
||||
speed_travel = 45
|
||||
retraction_amount = 6.0
|
||||
retraction_speed = 40
|
||||
retraction_prime_speed = =retraction_speed
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,32 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Coarse Quality
|
||||
definition = xyzprinting_da_vinci_jr_pro_xplus
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = coarse
|
||||
weight = -3
|
||||
material = xyzprinting_abs
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.4
|
||||
layer_height_0 = 0.4
|
||||
material_diameter = 1.75
|
||||
material_bed_temperature_layer_0 = =material_bed_temperature
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_wall = 20
|
||||
speed_print = 60
|
||||
speed_topbottom = 10
|
||||
speed_infill = =speed_print
|
||||
speed_support = 30
|
||||
speed_travel = 120
|
||||
retraction_amount = 3.0
|
||||
retraction_speed = 20
|
||||
retraction_prime_speed = 15
|
||||
skirt_brim_speed = 30
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,32 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Draft Quality
|
||||
definition = xyzprinting_da_vinci_jr_pro_xplus
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = draft
|
||||
weight = -2
|
||||
material = xyzprinting_abs
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.3
|
||||
layer_height_0 = 0.4
|
||||
material_diameter = 1.75
|
||||
material_bed_temperature_layer_0 = =material_bed_temperature
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_wall = 20
|
||||
speed_print = 60
|
||||
speed_topbottom = 10
|
||||
speed_infill = =speed_print
|
||||
speed_support = 30
|
||||
speed_travel = 120
|
||||
retraction_amount = 3.0
|
||||
retraction_speed = 20
|
||||
retraction_prime_speed = 15
|
||||
skirt_brim_speed = 30
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,32 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Fine Quality
|
||||
definition = xyzprinting_da_vinci_jr_pro_xplus
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = fine
|
||||
weight = 0
|
||||
material = xyzprinting_abs
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.1
|
||||
layer_height_0 = 0.2
|
||||
material_diameter = 1.75
|
||||
material_bed_temperature_layer_0 = =material_bed_temperature
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_wall = 20
|
||||
speed_print = 60
|
||||
speed_topbottom = 10
|
||||
speed_infill = =speed_print
|
||||
speed_support = 30
|
||||
speed_travel = 120
|
||||
retraction_amount = 3.0
|
||||
retraction_speed = 20
|
||||
retraction_prime_speed = 15
|
||||
skirt_brim_speed = 30
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,32 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Normal Quality
|
||||
definition = xyzprinting_da_vinci_jr_pro_xplus
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = normal
|
||||
weight = -1
|
||||
material = xyzprinting_abs
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.2
|
||||
layer_height_0 = 0.3
|
||||
material_diameter = 1.75
|
||||
material_bed_temperature_layer_0 = =material_bed_temperature
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_wall = 20
|
||||
speed_print = 60
|
||||
speed_topbottom = 10
|
||||
speed_infill = =speed_print
|
||||
speed_support = 30
|
||||
speed_travel = 120
|
||||
retraction_amount = 3.0
|
||||
retraction_speed = 20
|
||||
retraction_prime_speed = 15
|
||||
skirt_brim_speed = 30
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,31 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Coarse Quality
|
||||
definition = xyzprinting_da_vinci_super
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = coarse
|
||||
weight = -3
|
||||
material = xyzprinting_abs
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.4
|
||||
layer_height_0 = 0.4
|
||||
material_diameter = 1.75
|
||||
material_bed_temperature_layer_0 = =material_bed_temperature
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_infill = =speed_print
|
||||
speed_support = =speed_print
|
||||
speed_travel = 120
|
||||
retraction_amount = 5.0
|
||||
retraction_speed = 40
|
||||
retraction_prime_speed = =retraction_speed
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,31 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Draft Quality
|
||||
definition = xyzprinting_da_vinci_super
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = draft
|
||||
weight = -2
|
||||
material = xyzprinting_abs
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.3
|
||||
layer_height_0 = 0.4
|
||||
material_diameter = 1.75
|
||||
material_bed_temperature_layer_0 = =material_bed_temperature
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_infill = =speed_print
|
||||
speed_support = =speed_print
|
||||
speed_travel = 120
|
||||
retraction_amount = 5.0
|
||||
retraction_speed = 40
|
||||
retraction_prime_speed = =retraction_speed
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,31 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Fine Quality
|
||||
definition = xyzprinting_da_vinci_super
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = fine
|
||||
weight = 0
|
||||
material = xyzprinting_abs
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.1
|
||||
layer_height_0 = 0.2
|
||||
material_diameter = 1.75
|
||||
material_bed_temperature_layer_0 = =material_bed_temperature
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_infill = =speed_print
|
||||
speed_support = =speed_print
|
||||
speed_travel = 120
|
||||
retraction_amount = 5.0
|
||||
retraction_speed = 40
|
||||
retraction_prime_speed = =retraction_speed
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,32 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Normal Quality
|
||||
definition = xyzprinting_da_vinci_super
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = normal
|
||||
weight = -1
|
||||
material = xyzprinting_abs
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.2
|
||||
layer_height_0 = 0.35
|
||||
material_diameter = 1.75
|
||||
material_bed_temperature_layer_0 = =material_bed_temperature
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_topbottom = 10
|
||||
speed_wall = =speed_print
|
||||
speed_infill = =speed_print
|
||||
speed_support = =speed_print
|
||||
speed_travel = 120
|
||||
retraction_amount = 5.0
|
||||
retraction_speed = 40
|
||||
retraction_prime_speed = =retraction_speed
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,32 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Coarse Quality
|
||||
definition = xyzprinting_da_vinci_1p0_pro
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = coarse
|
||||
weight = -3
|
||||
material = xyzprinting_antibact_pla
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.4
|
||||
layer_height_0 = 0.4
|
||||
material_diameter = 1.75
|
||||
material_bed_temperature_layer_0 = =material_bed_temperature
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 20
|
||||
speed_infill = =speed_print
|
||||
speed_support = =speed_print
|
||||
speed_travel = 100
|
||||
retraction_amount = 4.0
|
||||
retraction_speed = =speed_print
|
||||
retraction_prime_speed = =retraction_speed
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,32 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Draft Quality
|
||||
definition = xyzprinting_da_vinci_1p0_pro
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = draft
|
||||
weight = -2
|
||||
material = xyzprinting_antibact_pla
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.3
|
||||
layer_height_0 = 0.4
|
||||
material_diameter = 1.75
|
||||
material_bed_temperature_layer_0 = =material_bed_temperature
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 20
|
||||
speed_infill = =speed_print
|
||||
speed_support = =speed_print
|
||||
speed_travel = 100
|
||||
retraction_amount = 4.0
|
||||
retraction_speed = =speed_print
|
||||
retraction_prime_speed = =retraction_speed
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,32 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Fine Quality
|
||||
definition = xyzprinting_da_vinci_1p0_pro
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = fine
|
||||
weight = 0
|
||||
material = xyzprinting_antibact_pla
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.1
|
||||
layer_height_0 = 0.2
|
||||
material_diameter = 1.75
|
||||
material_bed_temperature_layer_0 = =material_bed_temperature
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 20
|
||||
speed_infill = =speed_print
|
||||
speed_support = =speed_print
|
||||
speed_travel = 100
|
||||
retraction_amount = 4.0
|
||||
retraction_speed = =speed_print
|
||||
retraction_prime_speed = =retraction_speed
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,32 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Normal Quality
|
||||
definition = xyzprinting_da_vinci_1p0_pro
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = normal
|
||||
weight = -1
|
||||
material = xyzprinting_antibact_pla
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.2
|
||||
layer_height_0 = 0.35
|
||||
material_diameter = 1.75
|
||||
material_bed_temperature_layer_0 = =material_bed_temperature
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 20
|
||||
speed_infill = =speed_print
|
||||
speed_support = =speed_print
|
||||
speed_travel = 100
|
||||
retraction_amount = 4.0
|
||||
retraction_speed = =speed_print
|
||||
retraction_prime_speed = =retraction_speed
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,30 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Coarse Quality
|
||||
definition = xyzprinting_da_vinci_jr_1p0a_pro
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = coarse
|
||||
weight = -3
|
||||
material = xyzprinting_antibact_pla
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.4
|
||||
layer_height_0 = 0.4
|
||||
material_diameter = 1.75
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = =65
|
||||
speed_support = =speed_print
|
||||
speed_travel = 120
|
||||
retraction_amount = 4.5
|
||||
retraction_speed = =speed_print
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,30 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Draft Quality
|
||||
definition = xyzprinting_da_vinci_jr_1p0a_pro
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = draft
|
||||
weight = -2
|
||||
material = xyzprinting_antibact_pla
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.3
|
||||
layer_height_0 = 0.4
|
||||
material_diameter = 1.75
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = =65
|
||||
speed_support = =speed_print
|
||||
speed_travel = 120
|
||||
retraction_amount = 4.5
|
||||
retraction_speed = =speed_print
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,29 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Fine Quality
|
||||
definition = xyzprinting_da_vinci_jr_1p0a_pro
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = fine
|
||||
material = xyzprinting_antibact_pla
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.1
|
||||
layer_height_0 = 0.2
|
||||
material_diameter = 1.75
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = =65
|
||||
speed_support = =speed_print
|
||||
speed_travel = 120
|
||||
retraction_amount = 4.5
|
||||
retraction_speed = =speed_print
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,30 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Normal Quality
|
||||
definition = xyzprinting_da_vinci_jr_1p0a_pro
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = normal
|
||||
weight = -1
|
||||
material = xyzprinting_antibact_pla
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.2
|
||||
layer_height_0 = 0.35
|
||||
material_diameter = 1.75
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = =65
|
||||
speed_support = =speed_print
|
||||
speed_travel = 120
|
||||
retraction_amount = 4.5
|
||||
retraction_speed = =speed_print
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,30 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Coarse Quality
|
||||
definition = xyzprinting_da_vinci_jr_pro_xeplus
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = coarse
|
||||
weight = -3
|
||||
material = xyzprinting_antibact_pla
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.4
|
||||
layer_height_0 = 0.4
|
||||
material_diameter = 1.75
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = 60
|
||||
speed_support = =speed_print
|
||||
speed_travel = 120
|
||||
retraction_amount = 5.0
|
||||
retraction_speed = 15
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,30 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Draft Quality
|
||||
definition = xyzprinting_da_vinci_jr_pro_xeplus
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = draft
|
||||
weight = -2
|
||||
material = xyzprinting_antibact_pla
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.3
|
||||
layer_height_0 = 0.4
|
||||
material_diameter = 1.75
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = 60
|
||||
speed_support = =speed_print
|
||||
speed_travel = 120
|
||||
retraction_amount = 5.0
|
||||
retraction_speed = 15
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,30 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Fine Quality
|
||||
definition = xyzprinting_da_vinci_jr_pro_xeplus
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = fine
|
||||
weight = 0
|
||||
material = xyzprinting_antibact_pla
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.1
|
||||
layer_height_0 = 0.2
|
||||
material_diameter = 1.75
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = 60
|
||||
speed_support = =speed_print
|
||||
speed_travel = 120
|
||||
retraction_amount = 5.0
|
||||
retraction_speed = 15
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,30 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Normal Quality
|
||||
definition = xyzprinting_da_vinci_jr_pro_xeplus
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = normal
|
||||
weight = -1
|
||||
material = xyzprinting_antibact_pla
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.2
|
||||
layer_height_0 = 0.3
|
||||
material_diameter = 1.75
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = 60
|
||||
speed_support = =speed_print
|
||||
speed_travel = 120
|
||||
retraction_amount = 5.0
|
||||
retraction_speed = 15
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,31 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Coarse Quality
|
||||
definition = xyzprinting_da_vinci_jr_pro_xplus
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = coarse
|
||||
weight = -3
|
||||
material = xyzprinting_antibact_pla
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.4
|
||||
layer_height_0 = 0.4
|
||||
material_diameter = 1.75
|
||||
material_bed_temperature_layer_0 = =material_bed_temperature
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = 60
|
||||
speed_support = =speed_print
|
||||
speed_travel = 120
|
||||
retraction_amount = 7.0
|
||||
retraction_speed = 15
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,31 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Draft Quality
|
||||
definition = xyzprinting_da_vinci_jr_pro_xplus
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = draft
|
||||
weight = -2
|
||||
material = xyzprinting_antibact_pla
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.3
|
||||
layer_height_0 = 0.4
|
||||
material_diameter = 1.75
|
||||
material_bed_temperature_layer_0 = =material_bed_temperature
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = 60
|
||||
speed_support = =speed_print
|
||||
speed_travel = 120
|
||||
retraction_amount = 7.0
|
||||
retraction_speed = 15
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,31 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Fine Quality
|
||||
definition = xyzprinting_da_vinci_jr_pro_xplus
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = fine
|
||||
weight = 0
|
||||
material = xyzprinting_antibact_pla
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.1
|
||||
layer_height_0 = 0.2
|
||||
material_diameter = 1.75
|
||||
material_bed_temperature_layer_0 = =material_bed_temperature
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = 60
|
||||
speed_support = =speed_print
|
||||
speed_travel = 120
|
||||
retraction_amount = 5.0
|
||||
retraction_speed = 15
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,31 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Normal Quality
|
||||
definition = xyzprinting_da_vinci_jr_pro_xplus
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = normal
|
||||
weight = -1
|
||||
material = xyzprinting_antibact_pla
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.2
|
||||
layer_height_0 = 0.3
|
||||
material_diameter = 1.75
|
||||
material_bed_temperature_layer_0 = =material_bed_temperature
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = 60
|
||||
speed_support = =speed_print
|
||||
speed_travel = 120
|
||||
retraction_amount = 5.0
|
||||
retraction_speed = 15
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,30 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Coarse Quality
|
||||
definition = xyzprinting_da_vinci_jr_w_pro
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = coarse
|
||||
weight = -3
|
||||
material = xyzprinting_antibact_pla
|
||||
variant = Stainless Steel 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.4
|
||||
layer_height_0 = 0.4
|
||||
material_diameter = 1.75
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = 60
|
||||
speed_support = =speed_print
|
||||
speed_travel = 100
|
||||
retraction_amount = 5.0
|
||||
retraction_speed = 30
|
||||
skirt_brim_speed = 30
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,30 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Draft Quality
|
||||
definition = xyzprinting_da_vinci_jr_w_pro
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = draft
|
||||
weight = -2
|
||||
material = xyzprinting_antibact_pla
|
||||
variant = Stainless Steel 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.3
|
||||
layer_height_0 = 0.4
|
||||
material_diameter = 1.75
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = 60
|
||||
speed_support = =speed_print
|
||||
speed_travel = 100
|
||||
retraction_amount = 5.0
|
||||
retraction_speed = 30
|
||||
skirt_brim_speed = 30
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,30 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Fine Quality
|
||||
definition = xyzprinting_da_vinci_jr_w_pro
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = fine
|
||||
weight = 0
|
||||
material = xyzprinting_antibact_pla
|
||||
variant = Stainless Steel 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.1
|
||||
layer_height_0 = 0.2
|
||||
material_diameter = 1.75
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = 60
|
||||
speed_support = =speed_print
|
||||
speed_travel = 100
|
||||
retraction_amount = 5.0
|
||||
retraction_speed = 30
|
||||
skirt_brim_speed = 30
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,30 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Normal Quality
|
||||
definition = xyzprinting_da_vinci_jr_w_pro
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = normal
|
||||
weight = -1
|
||||
material = xyzprinting_antibact_pla
|
||||
variant = Stainless Steel 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.2
|
||||
layer_height_0 = 0.35
|
||||
material_diameter = 1.75
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = 60
|
||||
speed_support = =speed_print
|
||||
speed_travel = 100
|
||||
retraction_amount = 5.0
|
||||
retraction_speed = 30
|
||||
skirt_brim_speed = 30
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,31 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Coarse Quality
|
||||
definition = xyzprinting_da_vinci_super
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = coarse
|
||||
weight = -3
|
||||
material = xyzprinting_antibact_pla
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.4
|
||||
layer_height_0 = 0.4
|
||||
material_diameter = 1.75
|
||||
material_bed_temperature_layer_0 = =material_bed_temperature
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_infill = =speed_print
|
||||
speed_support = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_travel = 120
|
||||
retraction_amount = 5.5
|
||||
retraction_speed = 50
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,31 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Draft Quality
|
||||
definition = xyzprinting_da_vinci_super
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = draft
|
||||
weight = -2
|
||||
material = xyzprinting_antibact_pla
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.3
|
||||
layer_height_0 = 0.4
|
||||
material_diameter = 1.75
|
||||
material_bed_temperature_layer_0 = =material_bed_temperature
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_infill = =speed_print
|
||||
speed_support = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_travel = 120
|
||||
retraction_amount = 5.5
|
||||
retraction_speed = 50
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,31 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Fine Quality
|
||||
definition = xyzprinting_da_vinci_super
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = fine
|
||||
weight = 0
|
||||
material = xyzprinting_antibact_pla
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.1
|
||||
layer_height_0 = 0.2
|
||||
material_diameter = 1.75
|
||||
material_bed_temperature_layer_0 = =material_bed_temperature
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_infill = =speed_print
|
||||
speed_support = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_travel = 120
|
||||
retraction_amount = 5.5
|
||||
retraction_speed = 50
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,31 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Normal Quality
|
||||
definition = xyzprinting_da_vinci_super
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = normal
|
||||
weight = -1
|
||||
material = xyzprinting_antibact_pla
|
||||
variant = Copper 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.2
|
||||
layer_height_0 = 0.35
|
||||
material_diameter = 1.75
|
||||
material_bed_temperature_layer_0 = =material_bed_temperature
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_infill = =speed_print
|
||||
speed_support = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_travel = 120
|
||||
retraction_amount = 5.5
|
||||
retraction_speed = 50
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,30 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Coarse Quality
|
||||
definition = xyzprinting_da_vinci_jr_1p0a_pro
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = coarse
|
||||
weight = -3
|
||||
material = xyzprinting_carbon_fiber
|
||||
variant = Hardened Steel 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.4
|
||||
layer_height_0 = 0.4
|
||||
material_diameter = 1.75
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = =speed_print
|
||||
speed_support = =speed_print
|
||||
speed_travel = 120
|
||||
retraction_amount = 6.0
|
||||
retraction_speed = 20
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,30 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Draft Quality
|
||||
definition = xyzprinting_da_vinci_jr_1p0a_pro
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = draft
|
||||
weight = -2
|
||||
material = xyzprinting_carbon_fiber
|
||||
variant = Hardened Steel 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.3
|
||||
layer_height_0 = 0.4
|
||||
material_diameter = 1.75
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = =speed_print
|
||||
speed_support = =speed_print
|
||||
speed_travel = 120
|
||||
retraction_amount = 6.0
|
||||
retraction_speed = 20
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,30 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Fine Quality
|
||||
definition = xyzprinting_da_vinci_jr_1p0a_pro
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = fine
|
||||
weight = 0
|
||||
material = xyzprinting_carbon_fiber
|
||||
variant = Hardened Steel 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.1
|
||||
layer_height_0 = 0.2
|
||||
material_diameter = 1.75
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = =speed_print
|
||||
speed_support = =speed_print
|
||||
speed_travel = 120
|
||||
retraction_amount = 6.0
|
||||
retraction_speed = 20
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,30 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Normal Quality
|
||||
definition = xyzprinting_da_vinci_jr_1p0a_pro
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = normal
|
||||
weight = -1
|
||||
material = xyzprinting_carbon_fiber
|
||||
variant = Hardened Steel 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.2
|
||||
layer_height_0 = 0.35
|
||||
material_diameter = 1.75
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = =speed_print
|
||||
speed_support = =speed_print
|
||||
speed_travel = 120
|
||||
retraction_amount = 6.0
|
||||
retraction_speed = 20
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,30 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Coarse Quality
|
||||
definition = xyzprinting_da_vinci_jr_pro_xeplus
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = coarse
|
||||
weight = -3
|
||||
material = xyzprinting_carbon_fiber
|
||||
variant = Hardened Steel 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.4
|
||||
layer_height_0 = 0.4
|
||||
material_diameter = 1.75
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = =40
|
||||
speed_support = =speed_print
|
||||
speed_travel = 120
|
||||
retraction_amount = 8.0
|
||||
retraction_speed = 20
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,30 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Draft Quality
|
||||
definition = xyzprinting_da_vinci_jr_pro_xeplus
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = draft
|
||||
weight = -2
|
||||
material = xyzprinting_carbon_fiber
|
||||
variant = Hardened Steel 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.3
|
||||
layer_height_0 = 0.4
|
||||
material_diameter = 1.75
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = =40
|
||||
speed_support = =speed_print
|
||||
speed_travel = 120
|
||||
retraction_amount = 8.0
|
||||
retraction_speed = 20
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,30 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Fine Quality
|
||||
definition = xyzprinting_da_vinci_jr_pro_xeplus
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = fine
|
||||
weight = 0
|
||||
material = xyzprinting_carbon_fiber
|
||||
variant = Hardened Steel 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.1
|
||||
layer_height_0 = 0.2
|
||||
material_diameter = 1.75
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = =40
|
||||
speed_support = =speed_print
|
||||
speed_travel = 120
|
||||
retraction_amount = 8.0
|
||||
retraction_speed = 20
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,30 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Normal Quality
|
||||
definition = xyzprinting_da_vinci_jr_pro_xeplus
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = normal
|
||||
weight = -1
|
||||
material = xyzprinting_carbon_fiber
|
||||
variant = Hardened Steel 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.2
|
||||
layer_height_0 = 0.3
|
||||
material_diameter = 1.75
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = =40
|
||||
speed_support = =speed_print
|
||||
speed_travel = 120
|
||||
retraction_amount = 8.0
|
||||
retraction_speed = 20
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,31 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Coarse Quality
|
||||
definition = xyzprinting_da_vinci_jr_pro_xplus
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = coarse
|
||||
weight = -3
|
||||
material = xyzprinting_carbon_fiber
|
||||
variant = Hardened Steel 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.4
|
||||
layer_height_0 = 0.4
|
||||
material_diameter = 1.75
|
||||
material_bed_temperature_layer_0 = =material_bed_temperature
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = 40
|
||||
speed_support = =speed_print
|
||||
speed_travel = 120
|
||||
retraction_amount = 8.0
|
||||
retraction_speed = 20
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,31 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Draft Quality
|
||||
definition = xyzprinting_da_vinci_jr_pro_xplus
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = draft
|
||||
weight = -2
|
||||
material = xyzprinting_carbon_fiber
|
||||
variant = Hardened Steel 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.3
|
||||
layer_height_0 = 0.4
|
||||
material_diameter = 1.75
|
||||
material_bed_temperature_layer_0 = =material_bed_temperature
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = 40
|
||||
speed_support = =speed_print
|
||||
speed_travel = 120
|
||||
retraction_amount = 8.0
|
||||
retraction_speed = 20
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,31 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Fine Quality
|
||||
definition = xyzprinting_da_vinci_jr_pro_xplus
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = fine
|
||||
weight = 0
|
||||
material = xyzprinting_carbon_fiber
|
||||
variant = Hardened Steel 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.1
|
||||
layer_height_0 = 0.2
|
||||
material_diameter = 1.75
|
||||
material_bed_temperature_layer_0 = =material_bed_temperature
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = 40
|
||||
speed_support = =speed_print
|
||||
speed_travel = 120
|
||||
retraction_amount = 8.0
|
||||
retraction_speed = 20
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,31 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Normal Quality
|
||||
definition = xyzprinting_da_vinci_jr_pro_xplus
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = normal
|
||||
weight = -1
|
||||
material = xyzprinting_carbon_fiber
|
||||
variant = Hardened Steel 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.2
|
||||
layer_height_0 = 0.3
|
||||
material_diameter = 1.75
|
||||
material_bed_temperature_layer_0 = =material_bed_temperature
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = 40
|
||||
speed_support = =speed_print
|
||||
speed_travel = 120
|
||||
retraction_amount = 8.0
|
||||
retraction_speed = 20
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,30 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Coarse Quality
|
||||
definition = xyzprinting_da_vinci_jr_w_pro
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = coarse
|
||||
weight = -3
|
||||
material = xyzprinting_carbon_fiber
|
||||
variant = Hardened Steel 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.4
|
||||
layer_height_0 = 0.4
|
||||
material_diameter = 1.75
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = 60
|
||||
speed_support = =speed_print
|
||||
speed_travel = 100
|
||||
retraction_amount = 8.0
|
||||
retraction_speed = 50
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,30 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Draft Quality
|
||||
definition = xyzprinting_da_vinci_jr_w_pro
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = draft
|
||||
weight = -2
|
||||
material = xyzprinting_carbon_fiber
|
||||
variant = Hardened Steel 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.3
|
||||
layer_height_0 = 0.4
|
||||
material_diameter = 1.75
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = 60
|
||||
speed_support = =speed_print
|
||||
speed_travel = 100
|
||||
retraction_amount = 8.0
|
||||
retraction_speed = 50
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,30 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Fine Quality
|
||||
definition = xyzprinting_da_vinci_jr_w_pro
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = fine
|
||||
weight = 0
|
||||
material = xyzprinting_carbon_fiber
|
||||
variant = Hardened Steel 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.1
|
||||
layer_height_0 = 0.2
|
||||
material_diameter = 1.75
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = 60
|
||||
speed_support = =speed_print
|
||||
speed_travel = 100
|
||||
retraction_amount = 8.0
|
||||
retraction_speed = 50
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,30 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Normal Quality
|
||||
definition = xyzprinting_da_vinci_jr_w_pro
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = normal
|
||||
weight = -1
|
||||
material = xyzprinting_carbon_fiber
|
||||
variant = Hardened Steel 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.2
|
||||
layer_height_0 = 0.35
|
||||
material_diameter = 1.75
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_infill = 60
|
||||
speed_support = =speed_print
|
||||
speed_travel = 100
|
||||
retraction_amount = 8.0
|
||||
retraction_speed = 50
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,31 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Coarse Quality
|
||||
definition = xyzprinting_da_vinci_super
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = coarse
|
||||
weight = -3
|
||||
material = xyzprinting_carbon_fiber
|
||||
variant = Hardened Steel 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.4
|
||||
layer_height_0 = 0.4
|
||||
material_diameter = 1.75
|
||||
material_bed_temperature_layer_0 = =material_bed_temperature
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_infill = 45
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_support = =speed_print
|
||||
speed_travel = 120
|
||||
retraction_amount = 6.0
|
||||
retraction_speed = 20
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
@ -0,0 +1,31 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Draft Quality
|
||||
definition = xyzprinting_da_vinci_super
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = quality
|
||||
quality_type = draft
|
||||
weight = -2
|
||||
material = xyzprinting_carbon_fiber
|
||||
variant = Hardened Steel 0.4mm Nozzle
|
||||
|
||||
[values]
|
||||
layer_height = 0.3
|
||||
layer_height_0 = 0.4
|
||||
material_diameter = 1.75
|
||||
material_bed_temperature_layer_0 = =material_bed_temperature
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
speed_print = 30
|
||||
speed_infill = 45
|
||||
speed_wall = =speed_print
|
||||
speed_topbottom = 10
|
||||
speed_support = =speed_print
|
||||
speed_travel = 120
|
||||
retraction_amount = 6.0
|
||||
retraction_speed = 20
|
||||
skirt_brim_speed = =speed_print
|
||||
infill_sparse_density = 10
|
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